Skip to content

Support secrets.defaults.store in executor.jsonc - #1

Open
aidansunbury wants to merge 685 commits into
mainfrom
config-secret-store-default
Open

aidansunbury wants to merge 685 commits into
mainfrom
config-secret-store-default

Conversation

@aidansunbury

Copy link
Copy Markdown
Owner

Summary

  • add secrets.defaults.store to local config schema so workspaces can declare a default secret store (local or keychain)
  • apply config-aware precedence for default secret storage (explicit providerId > EXECUTOR_SECRET_STORE_PROVIDER > executor.jsonc > platform fallback)
  • wire loaded workspace config into secret storage + instance config resolution, and add tests for merge and precedence behavior

Testing

  • bun run --cwd packages/platform/sdk-file test
  • bun run --cwd packages/platform/sdk-file typecheck

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
RhysSullivan and others added 29 commits March 22, 2026 18:08
…ature-scroll

fix: make tool signature panel scrollable
…nk-resolution

fix: resolve symlinks in bin script for bun link compatibility
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants