Support secrets.defaults.store in executor.jsonc - #1
Open
aidansunbury wants to merge 685 commits into
Open
aidansunbury wants to merge 685 commits into
aidansunbury wants to merge 685 commits into
Conversation
Replace ILIKE-based tool search with PostgreSQL tsvector/GIN full-text search for better performance. Add composite indexes on frequently queried columns, drop redundant lookup indexes on sub-tables, and add pending session index for auth flows.
Add an optional name field to secret materials so users can label their stored credentials. Update the schema model, the postgres provider, and all test fixtures to include the new column.
Move ControlPlaneAuthHeaders to a shared auth-headers module so both the client and actor-resolver can import it without circular deps. Add a server-side prettier-format utility and use it in source-inspection to format tool schemas and manifests before returning them to the UI.
Prettier formatting now happens server-side in source-inspection, so remove the browser-side format.ts hook and the prettier dependency from the web app. Add prettier to control-plane where it is actually used.
Add config, list/create/update/delete endpoints for secret materials under /v1/local/secrets. Includes instance config endpoint that exposes available secret providers. Add listAll, updateById repo methods to the secret materials persistence layer.
Extract MCP source connection logic into a reusable connectMcpSourceInternal function and expose it as a new /sources/mcp/oauth/start endpoint. The credential-complete callback now returns an HTML popup page that posts results back to the opener via postMessage. Includes an integration test for the full popup OAuth callback flow.
…nectMcp hooks Replace raw fetch-based requestJson with the typed createControlPlaneClient for all API calls. Add useSecrets, useCreateSecret, useUpdateSecret, useDeleteSecret, useInstanceConfig, useConnectMcpSource, and useRefreshSecrets hooks. Fix the source creation test to validate client-side rejection before optimistic state is applied.
…p flow Add system-preference-driven light/dark theme with proper color-scheme meta tag and CSS variables. Add a dedicated /secrets page for managing stored credentials. Replace raw text inputs for auth tokens with a SecretPicker component that lists existing secrets and supports inline creation. Add OAuth popup flow for MCP sources with postMessage communication. Polyfill Buffer for browser environment compatibility.
Enrich the listSecrets API response with a linkedSources array per secret by joining credentials, source-credential bindings, and sources. Each secret row in the UI now displays clickable source name badges that link to the source detail page.
…t config paths Switch the local executor server from Bun-specific APIs to portable Node.js http/fs equivalents so the server can run on stock Node.js. Add platform-aware XDG directory defaults (EXECUTOR_HOME, data dir, pid file, log file) and write a pid record file on server start.
Extract MCP OAuth client logic into a dedicated module and introduce generic /oauth/source-auth/start and /oauth/source-auth/callback endpoints that negotiate tokens independently of source CRUD. Refactor SourceAuthService to support HTTP-generic auth materialization (renamed from OpenAPI-specific) and OAuth2 token materialization. This lets the UI collect OAuth credentials before the source exists.
…generation Implement end-to-end GraphQL sources: introspect a schema to generate per-field tool manifests with JSON Schema inputs/outputs, index them as tool artifacts, and execute queries/mutations at runtime. Extends the workspace execution environment to load, catalog, search, describe, and invoke GraphQL tools alongside existing MCP and OpenAPI sources.
Probe an arbitrary URL to determine whether it serves an OpenAPI spec, GraphQL introspection endpoint, or MCP server. For OpenAPI sources, parse security schemes to infer auth requirements. For MCP, attempt tool discovery with OAuth fallback detection.
Introduce POST /sources/connect that handles MCP, OpenAPI, and GraphQL connection in a single endpoint (replacing the old MCP-only connect). Add POST /sources/discover for URL-based source type detection. Update sources-operations with auto-probe logic for draft sources.
Rename useConnectMcpSource to useStartSourceOAuth and add new hooks: useDiscoverSource, useConnectSource, useRefreshSecrets. Enhance the mutation system with OptimisticMutationResult type and add dev-mode error logging for failed API calls.
Introduce a multi-step add-source page: enter a URL, auto-detect source type via the discover API, configure auth, then connect. Extract source templates into a standalone module and add new GraphQL templates. Add favicon components for source endpoints. Refactor the source editor for decoupled OAuth flow and GraphQL kind support. Improve dev server error logging.
Introduce lifecycle commands (up, down, status, doctor) for managing the local executor daemon with PID tracking and log tailing. Add runtime-paths module to resolve bundled web assets, migrations, and the self-command across source, bundled JS, and compiled binary layouts. Improve error handling with Cause.pretty and dynamic version from package.json.
Implement build-package (bundles JS, web assets, migrations, and PGlite into an npm-publishable package) and build-portable (downloads official Node.js binaries and creates self-contained installers for macOS, Linux, and Windows). Includes integration tests and metadata utilities.
…ution Adapt the server integration test to the new standalone OAuth endpoints that store secrets without creating a source. Add workspace execution environment tests for GraphQL tool loading and invocation. Update auth service and control-plane runtime tests for the refactored APIs.
- Bump version from 0.0.0-local to 1.1.0 - Change license from UNLICENSED to MIT - Simplify bin field to single string entry - Include README.md in distribution package files - Update default license fallback in metadata reader
- Split SourceTemplate into OpenApiSourceTemplate and NonOpenApiSourceTemplate discriminated union for type-safe specUrl access - Add specUrl to GitHub, OpenAI, Vercel, and Stripe templates - Wire specUrl through both add-source and source-editor form defaults
…purpose - Add scopeType (organization|workspace) and organizationId columns to policies - Make workspaceId nullable for organization-scoped policies - Add check constraints for scope consistency - Add organization-level index on policies table - Add purpose column to execution interactions table - Add PolicyScopeTypeSchema to schema models - Update persistence test to include new required fields - Include database migration for all schema changes
- Evaluate tool invocations against an ordered policy list to produce allow/deny/approval-required decisions - Support resource matching by source, namespace, tool_path, and all_tools - Support exact and prefix match types with argument conditions - Include comprehensive tests for match hierarchy, deny precedence, and approval mode resolution
- Add listOrganization, createOrganization, getOrganization, updateOrganization, removeOrganization API endpoints - Refactor policy operations into scope-aware helpers that resolve organization or workspace context before delegating to shared logic - Add listByOrganizationId and listForWorkspaceContext repo queries that combine org + workspace policies for evaluation - Scope workspace policy deletion to workspace-scoped rows only - Cascade-delete organization policies when removing an organization
- Mark non-GET/HEAD OpenAPI tools and non-query GraphQL tools as interaction: required by default - Add authorizePersistedToolInvocation that evaluates the invocation policy engine and triggers an approval elicitation when needed - Build InvocationDescriptor from OpenAPI, GraphQL, and artifact tools - Derive interaction purpose from context (tool_execution_gate, source_connect_oauth2, source_connect_secret, elicitation) - Pass accountId through workspace execution environment resolver - Add server integration test verifying default gating and policy override - Update workspace execution environment tests with onElicitation
…ndling - Extract parseInteractionPayload and buildPausedExecutionOutput into a dedicated module with tests - Detect non-interactive terminals early and emit structured paused output with resume instructions instead of hanging - Include baseUrl and web URL in paused output for easier resumption - Pass baseUrl through driveExecution for resume URL construction
…lease/main Version Packages (beta)
…lease/main Version Packages (beta)
…lease/main Version Packages (beta)
…lease/main Version Packages (beta)
…lease/main Version Packages (beta)
…lease/main Version Packages
…ature-scroll fix: make tool signature panel scrollable
…nk-resolution fix: resolve symlinks in bin script for bun link compatibility
…lease/main Version Packages (beta)
…lease/main Version Packages
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
secrets.defaults.storeto local config schema so workspaces can declare a default secret store (localorkeychain)explicit providerId>EXECUTOR_SECRET_STORE_PROVIDER>executor.jsonc> platform fallback)Testing