History

Version Packages (#1743)

Rhys Sullivan committed 2 months agov1.6.1

Commit bc8dd391 parent a3a73e084 files · +471 −224Browse files

Unified · Split

84 files
  1. .changeset/cli-credential-store-permissions.md +0 −11
  2. .changeset/concurrent-data-migration-stamps.md +0 −5
  3. .changeset/connection-edit-sheet-agent-preview.md +0 −9
  4. .changeset/desktop-settings-owner-only.md +0 −9
  5. .changeset/graph-slice-urls-first-class.md +0 −5
  6. .changeset/graph-spec-slices.md +0 −5
  7. .changeset/lazy-mcp-client-module.md +0 −5
  8. .changeset/mcp-abort-releases-response-body.md +0 −7
  9. .changeset/mcp-health-missing-credential.md +0 −11
  10. .changeset/mcp-namespace-search-tools.md +0 −8
  11. .changeset/mcp-pool-key-credential-retention.md +0 −11
  12. .changeset/mcp-session-idle-runtime-reclaim.md +0 −15
  13. .changeset/oauth-dcr-application-type.md +0 −9
  14. .changeset/oauth-popup-localstorage-residue.md +0 −9
  15. .changeset/onepassword-service-account-token-lifetime.md +0 −11
  16. .changeset/openapi-streaming-preview.md +0 −5
  17. .changeset/slim-search-tools.md +0 −6
  18. .changeset/storage-error-shaping.md +0 −8
  19. .changeset/worker-bundler-staging-contract.md +0 −11
  20. apps/cli/CHANGELOG.md +88 −0
  21. apps/cli/package.json +1 −1
  22. apps/cloud/CHANGELOG.md +21 −0
  23. apps/cloud/package.json +1 −1
  24. apps/desktop/CHANGELOG.md +2 −0
  25. apps/desktop/package.json +1 −1
  26. apps/host-selfhost/CHANGELOG.md +21 −0
  27. apps/host-selfhost/package.json +1 −1
  28. apps/local/CHANGELOG.md +27 −0
  29. apps/local/package.json +1 −1
  30. bun.lock +32 −32
  31. e2e/CHANGELOG.md +12 −0
  32. e2e/package.json +1 −1
  33. examples/all-plugins/CHANGELOG.md +14 −0
  34. examples/all-plugins/package.json +1 −1
  35. examples/docs-sdk-quickstart/CHANGELOG.md +8 −0
  36. examples/docs-sdk-quickstart/package.json +1 −1
  37. packages/core/analytics/CHANGELOG.md +7 −0
  38. packages/core/analytics/package.json +1 −1
  39. packages/core/api/CHANGELOG.md +13 −0
  40. packages/core/api/package.json +1 −1
  41. packages/core/cli/CHANGELOG.md +7 −0
  42. packages/core/cli/package.json +1 −1
  43. packages/core/config/CHANGELOG.md +7 −0
  44. packages/core/config/package.json +1 −1
  45. packages/core/execution/CHANGELOG.md +14 −0
  46. packages/core/execution/package.json +1 −1
  47. packages/core/sdk/CHANGELOG.md +8 −0
  48. packages/core/sdk/package.json +1 −1
  49. packages/core/vite-plugin/CHANGELOG.md +7 −0
  50. packages/core/vite-plugin/package.json +1 −1
  51. packages/hosts/cloudflare/CHANGELOG.md +10 −0
  52. packages/hosts/cloudflare/package.json +1 −1
  53. packages/hosts/mcp-apps-shell/CHANGELOG.md +8 −0
  54. packages/hosts/mcp-apps-shell/package.json +1 −1
  55. packages/kernel/core/CHANGELOG.md +2 −0
  56. packages/kernel/core/package.json +1 −1
  57. packages/kernel/runtime-quickjs/CHANGELOG.md +7 −0
  58. packages/kernel/runtime-quickjs/package.json +1 −1
  59. packages/kernel/runtime-workerd-subprocess/CHANGELOG.md +7 −0
  60. packages/kernel/runtime-workerd-subprocess/package.json +1 −1
  61. packages/plugins/desktop-settings/CHANGELOG.md +7 −0
  62. packages/plugins/desktop-settings/package.json +1 −1
  63. packages/plugins/encrypted-secrets/CHANGELOG.md +7 −0
  64. packages/plugins/encrypted-secrets/package.json +1 −1
  65. packages/plugins/example/CHANGELOG.md +7 −0
  66. packages/plugins/example/package.json +1 −1
  67. packages/plugins/file-secrets/CHANGELOG.md +7 −0
  68. packages/plugins/file-secrets/package.json +1 −1
  69. packages/plugins/graphql/CHANGELOG.md +10 −0
  70. packages/plugins/graphql/package.json +1 −1
  71. packages/plugins/keychain/CHANGELOG.md +7 −0
  72. packages/plugins/keychain/package.json +1 −1
  73. packages/plugins/mcp/CHANGELOG.md +16 −0
  74. packages/plugins/mcp/package.json +1 −1
  75. packages/plugins/onepassword/CHANGELOG.md +9 −0
  76. packages/plugins/onepassword/package.json +1 −1
  77. packages/plugins/openapi/CHANGELOG.md +16 −0
  78. packages/plugins/openapi/package.json +1 −1
  79. packages/plugins/provider-service-split/CHANGELOG.md +8 −0
  80. packages/plugins/provider-service-split/package.json +1 −1
  81. packages/plugins/toolkits/CHANGELOG.md +9 −0
  82. packages/plugins/toolkits/package.json +1 −1
  83. packages/react/CHANGELOG.md +14 −0
  84. packages/react/package.json +1 −1
.changeset/cli-credential-store-permissions.md+0−11
@@ -1,11 +0,0 @@
1−---
2−"executor": patch
3−---
4−
5−**The CLI's server-connection store is written owner-only, and two of its tests now actually run**
6−
7−`~/.executor/server-connections.json` holds live credentials for a hosted server — a bearer token, or an OAuth access token together with its long-lived refresh token, rewritten on every silent refresh. It was created with no explicit mode, so the process umask applied and it landed world-readable (0644 by default). Any other account on the machine — or anything that copies a home directory, such as a backup or a container layer — could read a durable credential until the user ran `executor logout`.
8−
9−It is now created `0600` with a follow-up `chmod`, matching what the local-server manifest already does for the sibling secret it keeps under `server-control/`. Both steps are needed: `mode` applies only on create, and the `chmod` covers rewriting a store that already exists with looser permissions — which is the common path here, since the file is rewritten on every token refresh.
10−
11−Separately, two tests in `server-profile.test.ts` were written as `it("…", () => Effect.gen(…))`. An `Effect` is not a thenable, so Vitest treated each as passing without ever running its body — a deliberately falsified assertion still passed. They are now `it.effect` and execute for real. No production behaviour was wrong; the tests simply were not checking it.
.changeset/concurrent-data-migration-stamps.md+0−5
@@ -1,5 +0,0 @@
1−---
2−"executor": patch
3−---
4−
5−Prevent concurrent SQLite data-migration runners from failing when another runner commits the same ledger stamp first.
.changeset/connection-edit-sheet-agent-preview.md+0−9
@@ -1,9 +0,0 @@
1−---
2−"@executor-js/react": patch
3−---
4−
5−**The connection edit sheet now previews what agents actually read**
6−
7−The "What agents see" preview in the connection edit sheet rendered a `- \`<prefix>\` — <description>`inventory line. That line left the`execute`tool description when the inventory was slimmed to bare integration slugs, so the preview showed text no agent reads. The account label was also marked "Display-only", but`connections.list` returns it to agents alongside the description.
8−
9−The preview now mirrors the `connections.list` item for the connection (`name`, `identityLabel`, `description`), and the sheet copy says that both fields are agent-visible while the callable name stays as it was at connect time.
.changeset/desktop-settings-owner-only.md+0−9
@@ -1,9 +0,0 @@
1−---
2−"executor": patch
3−---
4−
5−**The desktop settings store is written owner-only**
6−
7−`settings.json` holds `serverProfiles`, which carries a remote server's credential — a bearer token, or a basic-auth username and password — for any "Custom server" the user connects to. `conf` (under electron-store) defaults to `configFileMode: 0o666`, so with no explicit mode the file was created `0644`. On Linux, where `~/.config` is not reliably `0700`, that is readable by every other account on the machine. macOS is protected by `~/Library` being `0700` and Windows by ACLs, so this is primarily a Linux-desktop exposure — but owner-only credential files are already this app's standard: `local-auth.ts` writes `auth.json` at `0o600`, and the sidecar manifest is chmodded the same way.
8−
9−One option is sufficient here, rather than the mode-plus-chmod pair used elsewhere: `atomically` chmods the temp inode only when the requested mode differs from its own default, and the atomic rename then carries the tight mode onto an already-loose file. Verified against the installed `conf` — with no option a fresh file lands `0644`; with `configFileMode: 0o600` a fresh file lands `0600` and an existing `0644` file becomes `0600` on the next write.
.changeset/graph-slice-urls-first-class.md+0−5
@@ -1,5 +0,0 @@
1−---
2−"@executor-js/plugin-openapi": patch
3−---
4−
5−Make Microsoft Graph slice URLs first-class spec sources instead of a hidden substitution. Catalog tiles now point directly at the slice release assets, the stored specUrl is exactly what gets fetched, and selection narrowing travels visibly in the URL fragment; requesting the upstream monolith URL fetches the monolith, never a silently swapped slice.
.changeset/graph-spec-slices.md+0−5
@@ -1,5 +0,0 @@
1−---
2−"@executor-js/plugin-openapi": patch
3−---
4−
5−Serve Microsoft Graph preset selections from precomputed slice release assets instead of the 43MB upstream monolith. The monolith fetch almost never survives a 128MB Workers isolate (production traces show one completion in 30 days), so covered selections — every catalog preset, plus any combination within the default bundle — now read a 4–19MB filtered document built offline by the graph-slices workflow, with the monolith path kept only as a fallback and for full-graph/custom-scope selections.
.changeset/lazy-mcp-client-module.md+0−5
@@ -1,5 +0,0 @@
1−---
2−"@executor-js/plugin-mcp": patch
3−---
4−
5−Load the MCP client SDK lazily on first outbound connection instead of at module evaluation. Runtimes that bundle the plugin (notably Cloudflare Workers) no longer pay the client package's module-eval memory and CPU on startup or on code paths that never dial an MCP server.
.changeset/mcp-abort-releases-response-body.md+0−7
@@ -1,7 +0,0 @@
1−---
2−"@executor-js/plugin-mcp": patch
3−---
4−
5−**Closing a remote MCP connection now ends its streamable-http SSE request**
6−
7−On a supplied `httpClientLayer`, the fetch adapter wired the caller's `AbortSignal` only to the pending response promise, never to the response body, so closing a connection left the long-lived `GET` channel in flight forever — one abandoned request per dial. Under Bun each holds one of the 256 concurrent-request slots, so a long-running process eventually exhausts the pool and every connection starts failing with `MCP discovery timed out after 15000ms`. The response stream is now interrupted when the signal aborts.
.changeset/mcp-health-missing-credential.md+0−11
@@ -1,11 +0,0 @@
1−---
2−"executor": patch
3−---
4−
5−**An MCP health check no longer reports `healthy` when the connection's credential is missing**
6−
7−Rendering skips an auth placement whose value is unresolved — that is the renderer's documented behaviour, and callers own the missing-value policy. The MCP health check had no such policy, so it dialled unauthenticated, and any server that lists tools without auth answered. `discoverTools` succeeding maps straight to `healthy`, so a connection whose credential was gone reported as healthy.
8−
9−Health status is the signal telling a user to re-authenticate, which makes `healthy` the one answer it must never give in that state. The check now reports `expired` with the unresolved input names, mirroring the OpenAPI health check, which already did exactly this.
10−
11−The MCP tool-invocation path already refused for the same reason. `resolveTools` is deliberately left alone — its own comment records that discovery tolerating unresolved credentials is intended, since an open server lists tools unauthenticated.
.changeset/mcp-namespace-search-tools.md+0−8
@@ -1,8 +0,0 @@
1−---
2−"@executor-js/execution": patch
3−"executor": patch
4−---
5−
6−**Opt-in per-integration search tools on the MCP surface**
7−
8−Connecting with `?search_tools=true` (stdio: `executor mcp --search-tools`) adds one minimally-described `search_<integration>` MCP tool per connected integration, so the integration namespaces reach the model as tool names it can see without calling anything. Each call routes through the same flow as `tools.search({ namespace })` inside `execute`, and the tool list comes from the same inventory the `execute` description shows. Off by default; a clean endpoint URL is unchanged.
.changeset/mcp-pool-key-credential-retention.md+0−11
@@ -1,11 +0,0 @@
1−---
2−"executor": patch
3−---
4−
5−**The MCP connection pool no longer keeps credentials in its cache key**
6−
7−A pooled remote MCP session is looked up by a key describing the connection's identity, and that key included the connection's resolved credential values — plus the headers and query params those same secrets had already been rendered into. The key is retained as a `Map` key for the pool's lifetime, so the secret stayed readable in process memory long after the call that needed it had finished, with nothing left to read it.
8−
9−The key is now the SHA-256 digest of that identity rather than the identity itself. Reuse is unchanged, because equal identities still produce equal keys, and separation is unchanged too: a rotated access token, a different rendered auth header and a credential carried in a query param each still dial a fresh session instead of reusing one authenticated as somebody else. Hashing the whole identity rather than only the fields known to be sensitive means a field added later is covered without anyone having to remember it carries a secret.
10−
11−Nothing reads the key back — the pool only compares it, and it reaches no log, span or error message — so nothing observable changes.
.changeset/mcp-session-idle-runtime-reclaim.md+0−15
@@ -1,15 +0,0 @@
1−---
2−"executor": patch
3−---
4−
5−**Idle MCP session runtimes are actually reclaimed**
6−
7−The MCP session Durable Object has an idle timeout that disposes a session's execution runtime — the execution engine and its executor closure, the built tool catalog, and a live database handle — once the session has gone quiet. That timeout never ran.
8−
9−The session arms an idle alarm on every request. The agents framework independently recomputes the Durable Object alarm from its own schedule table and keep-alive refcount, and when it finds neither it does not leave the alarm alone: it deletes it. It releases the last keep-alive reference at the end of every ordinary tool call, from a `waitUntil` that runs just after the response goes out — so the idle alarm the session had armed moments earlier was erased, and a session that had just served a request was left with no alarm at all. Its runtime then stayed resident until the platform evicted the whole object.
10−
11−Durable Objects are colocated many-to-one onto an isolate with a single heap, so runtimes that are never reclaimed accumulate there. When the heap is exhausted the allocation that fails is whichever comes next, anywhere in the isolate — which is why the failure tended to surface from storage rather than from the runtimes that had consumed the memory.
12−
13−The idle deadline belongs to the session, not to the framework's scheduler, so it is now re-asserted after the framework has arranged whatever it needs — and only while a runtime is actually resident, since once there is nothing left to reclaim the framework's answer is correct.
14−
15−Disposal also now emits a span carrying a per-isolate resident-runtime gauge, alongside the same gauge on runtime build, so the reclaim can be confirmed in production rather than inferred.
.changeset/oauth-dcr-application-type.md+0−9
@@ -1,9 +0,0 @@
1−---
2−"executor": patch
3−---
4−
5−**Fix: declare the OAuth application type during dynamic client registration**
6−
7−Dynamic OAuth registrations now identify HTTPS callbacks as web applications
8−and loopback HTTP callbacks as native applications. This lets strict OAuth
9−servers validate Executor's redirect URI against the correct client type.
.changeset/oauth-popup-localstorage-residue.md+0−9
@@ -1,9 +0,0 @@
1−---
2−"executor": patch
3−---
4−
5−**The OAuth popup clears its result out of `localStorage` after handing it over**
6−
7−The popup writes its result to `localStorage` as the fallback completion channel, because `postMessage` is severed when a provider's consent page sets COOP and `BroadcastChannel` can be partitioned or raced by the auto-close. Nothing removed that entry afterwards, so the payload — which carries the identity label, an email, and on failure the error preview — stayed parked in the user's browser profile.
8−
9−The entry is now cleared once the handover has had time to land, and on `pagehide` as a backstop — the failure page never auto-closes so the user can read the error, and closing it by hand would otherwise cancel the pending timer and strand the entry. This cannot cost a listener the result: a `storage` event captures `newValue` at dispatch, so an opener that has been notified already holds it.
.changeset/onepassword-service-account-token-lifetime.md+0−11
@@ -1,11 +0,0 @@
1−---
2−"executor": patch
3−---
4−
5−**The 1Password service-account token is cleared from the op-js global after each call**
6−
7−`@1password/op-js` keeps the service-account token on a module-level CLI instance (`cli.serviceAccountToken`) and reads it when it spawns `op`. The CLI backend set that global before each call and never cleared it, so one reachable reference to the token stayed live for the rest of the process.
8−
9−It is now cleared as soon as the call that needed it is done, on success, failure and interruption alike. Authentication is unaffected: every read and write of that global already happens inside the backend's semaphore, so the next operation re-sets the token before it spawns anything.
10−
11−This is hygiene rather than a boundary change. No unrelated `op` child ever received a stale token — every call routes through the same critical section that sets the correct one immediately before invoking — and the token is separately persisted in plaintext in the plugin's config blob, so an attacker's reach is unchanged. What it removes is a long-lived reachable reference that nothing needed to keep.
.changeset/openapi-streaming-preview.md+0−5
@@ -1,5 +0,0 @@
1−---
2−"@executor-js/plugin-openapi": patch
3−---
4−
5−Preview OpenAPI spec-format selections (Microsoft Graph) through the streaming structural-split path instead of a whole-document parse, and guard generic whole-document parses by parsed-tree size (line count for block YAML, text size for JSON). Previewing a Graph preset URL previously parsed the 43MB source whole and killed the 128MB Workers isolate mid-request, surfacing as an empty 503; it now streams within budget, and oversized generic specs fail with an actionable error instead of taking down the isolate.
.changeset/slim-search-tools.md+0−6
@@ -1,6 +0,0 @@
1−---
2−"@executor-js/execution": patch
3−"executor": patch
4−---
5−
6−Slim the per-integration `search_<integration>` tool definitions to under half their size: one shared one-line description (the tool name already carries the namespace) and a single bare `query` parameter, dropping the `limit`/`offset` knobs. A session pays for these definitions once per connected integration, so the surface now costs ~2k tokens instead of ~5k at 30 integrations; paging through a namespace belongs in `execute`.
.changeset/storage-error-shaping.md+0−8
@@ -1,8 +0,0 @@
1−---
2−"@executor-js/sdk": patch
3−"@executor-js/api": patch
4−---
5−
6−Build `StorageError.message` from the call-site label plus the driver's error code instead of the driver's raw text. The driver text is drizzle's `Failed query: <sql>\nparams: <bound values>`, so error reporting grouped one storage defect by statement shape and printed bound parameters into issue titles. The full driver error stays on `cause`.
7−
8−Add `StorageConnectionError`, a `StorageFailure` variant for postgres.js connection faults (`CONNECTION_ENDED`, `CONNECTION_CLOSED`, `CONNECTION_DESTROYED`, `CONNECT_TIMEOUT`, `ECONNREFUSED`, `ECONNRESET`) and workerd's cross-request I/O rejection. It carries the fault `code` and a `retryable` flag so a lost socket can be told apart from a pool-lifetime bug.
.changeset/worker-bundler-staging-contract.md+0−11
@@ -1,11 +0,0 @@
1−---
2−"executor": patch
3−---
4−
5−**The packed Worker toolchain is verified at build time, and an incomplete copy is now reported instead of silently ignored**
6−
7−`@cloudflare/worker-bundler` cannot live inside the compiled binary: bunfs has no `node_modules`, so a bare specifier is unresolvable there by construction. The build instead copies the package's `dist/` next to the executable and `native-bindings.ts` publishes that path as `EXECUTOR_WORKER_BUNDLER_DIR` for consumers to load from.
8−
9−That handoff was described in two places that were free to drift, and did. The build writes `dist/index.bundled.js` — the entry consumers actually load, packed so it has no bare imports of its own — while the runtime check only looked for `dist/index.js` and `dist/esbuild.wasm`. Nothing verified the staged copy after the compile, so a partial staging produced a binary that looked fine on the build machine and failed on the user's, at startup. Worse, the runtime check failed open: when a file was missing it silently declined to set the environment variable, leaving a consumer to fall through to the bare specifier and crash.
10−
11−The required file list is now one shared contract used by both sides, so they cannot disagree. The build asserts the staged copy after compiling each target — every required file present, a size floor on the packed entry, and the `\0asm` magic on the wasm so a truncated copy cannot pass — turning a packaging slip into a failed build rather than a broken install. At runtime, a directory that is present but incomplete is reported on stderr naming the missing files, instead of being swallowed. An absent directory stays quiet, since that is the normal non-packaged path.
apps/cli/CHANGELOG.md+88−0
@@ -1,5 +1,93 @@
11 # executor
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- [#1576](https://github.com/UsefulSoftwareCo/executor/pull/1576) [`6535a74`](https://github.com/UsefulSoftwareCo/executor/commit/6535a74de4860e376e5a2e273cb2d5a662f98c5c) Thanks [@GeiserX](https://github.com/GeiserX)! - **The CLI's server-connection store is written owner-only, and two of its tests now actually run**
8+
9+ `~/.executor/server-connections.json` holds live credentials for a hosted server — a bearer token, or an OAuth access token together with its long-lived refresh token, rewritten on every silent refresh. It was created with no explicit mode, so the process umask applied and it landed world-readable (0644 by default). Any other account on the machine — or anything that copies a home directory, such as a backup or a container layer — could read a durable credential until the user ran `executor logout`.
10+
11+ It is now created `0600` with a follow-up `chmod`, matching what the local-server manifest already does for the sibling secret it keeps under `server-control/`. Both steps are needed: `mode` applies only on create, and the `chmod` covers rewriting a store that already exists with looser permissions — which is the common path here, since the file is rewritten on every token refresh.
12+
13+ Separately, two tests in `server-profile.test.ts` were written as `it("…", () => Effect.gen(…))`. An `Effect` is not a thenable, so Vitest treated each as passing without ever running its body — a deliberately falsified assertion still passed. They are now `it.effect` and execute for real. No production behaviour was wrong; the tests simply were not checking it.
14+
15+- [#1454](https://github.com/UsefulSoftwareCo/executor/pull/1454) [`e8ea62c`](https://github.com/UsefulSoftwareCo/executor/commit/e8ea62c8ba295931cf969cd310278b6a50771bdc) Thanks [@jadch](https://github.com/jadch)! - Prevent concurrent SQLite data-migration runners from failing when another runner commits the same ledger stamp first.
16+
17+- [#1579](https://github.com/UsefulSoftwareCo/executor/pull/1579) [`31e17c7`](https://github.com/UsefulSoftwareCo/executor/commit/31e17c725f0987f86896519f0626f9c94d39ccb7) Thanks [@GeiserX](https://github.com/GeiserX)! - **The desktop settings store is written owner-only**
18+
19+ `settings.json` holds `serverProfiles`, which carries a remote server's credential — a bearer token, or a basic-auth username and password — for any "Custom server" the user connects to. `conf` (under electron-store) defaults to `configFileMode: 0o666`, so with no explicit mode the file was created `0644`. On Linux, where `~/.config` is not reliably `0700`, that is readable by every other account on the machine. macOS is protected by `~/Library` being `0700` and Windows by ACLs, so this is primarily a Linux-desktop exposure — but owner-only credential files are already this app's standard: `local-auth.ts` writes `auth.json` at `0o600`, and the sidecar manifest is chmodded the same way.
20+
21+ One option is sufficient here, rather than the mode-plus-chmod pair used elsewhere: `atomically` chmods the temp inode only when the requested mode differs from its own default, and the atomic rename then carries the tight mode onto an already-loose file. Verified against the installed `conf` — with no option a fresh file lands `0644`; with `configFileMode: 0o600` a fresh file lands `0600` and an existing `0644` file becomes `0600` on the next write.
22+
23+- [#1582](https://github.com/UsefulSoftwareCo/executor/pull/1582) [`e8e97c4`](https://github.com/UsefulSoftwareCo/executor/commit/e8e97c4c008fce702ee07ec0ffe2a8d3e6946a21) Thanks [@GeiserX](https://github.com/GeiserX)! - **An MCP health check no longer reports `healthy` when the connection's credential is missing**
24+
25+ Rendering skips an auth placement whose value is unresolved — that is the renderer's documented behaviour, and callers own the missing-value policy. The MCP health check had no such policy, so it dialled unauthenticated, and any server that lists tools without auth answered. `discoverTools` succeeding maps straight to `healthy`, so a connection whose credential was gone reported as healthy.
26+
27+ Health status is the signal telling a user to re-authenticate, which makes `healthy` the one answer it must never give in that state. The check now reports `expired` with the unresolved input names, mirroring the OpenAPI health check, which already did exactly this.
28+
29+ The MCP tool-invocation path already refused for the same reason. `resolveTools` is deliberately left alone — its own comment records that discovery tolerating unresolved credentials is intended, since an open server lists tools unauthenticated.
30+
31+- [#1741](https://github.com/UsefulSoftwareCo/executor/pull/1741) [`62748e8`](https://github.com/UsefulSoftwareCo/executor/commit/62748e86122b747226c76c2e112c5c4d2b4f7095) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - **Opt-in per-integration search tools on the MCP surface**
32+
33+ Connecting with `?search_tools=true` (stdio: `executor mcp --search-tools`) adds one minimally-described `search_<integration>` MCP tool per connected integration, so the integration namespaces reach the model as tool names it can see without calling anything. Each call routes through the same flow as `tools.search({ namespace })` inside `execute`, and the tool list comes from the same inventory the `execute` description shows. Off by default; a clean endpoint URL is unchanged.
34+
35+- [#1573](https://github.com/UsefulSoftwareCo/executor/pull/1573) [`45ba141`](https://github.com/UsefulSoftwareCo/executor/commit/45ba1419b4e33ad10b0856c5fbc40fabc8f6efe1) Thanks [@GeiserX](https://github.com/GeiserX)! - **The MCP connection pool no longer keeps credentials in its cache key**
36+
37+ A pooled remote MCP session is looked up by a key describing the connection's identity, and that key included the connection's resolved credential values — plus the headers and query params those same secrets had already been rendered into. The key is retained as a `Map` key for the pool's lifetime, so the secret stayed readable in process memory long after the call that needed it had finished, with nothing left to read it.
38+
39+ The key is now the SHA-256 digest of that identity rather than the identity itself. Reuse is unchanged, because equal identities still produce equal keys, and separation is unchanged too: a rotated access token, a different rendered auth header and a credential carried in a query param each still dial a fresh session instead of reusing one authenticated as somebody else. Hashing the whole identity rather than only the fields known to be sensitive means a field added later is covered without anyone having to remember it carries a secret.
40+
41+ Nothing reads the key back — the pool only compares it, and it reaches no log, span or error message — so nothing observable changes.
42+
43+- [#1800](https://github.com/UsefulSoftwareCo/executor/pull/1800) [`eac13e7`](https://github.com/UsefulSoftwareCo/executor/commit/eac13e7032c027d866c06728f1d5b634fd9ef7dd) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - **Idle MCP session runtimes are actually reclaimed**
44+
45+ The MCP session Durable Object has an idle timeout that disposes a session's execution runtime — the execution engine and its executor closure, the built tool catalog, and a live database handle — once the session has gone quiet. That timeout never ran.
46+
47+ The session arms an idle alarm on every request. The agents framework independently recomputes the Durable Object alarm from its own schedule table and keep-alive refcount, and when it finds neither it does not leave the alarm alone: it deletes it. It releases the last keep-alive reference at the end of every ordinary tool call, from a `waitUntil` that runs just after the response goes out — so the idle alarm the session had armed moments earlier was erased, and a session that had just served a request was left with no alarm at all. Its runtime then stayed resident until the platform evicted the whole object.
48+
49+ Durable Objects are colocated many-to-one onto an isolate with a single heap, so runtimes that are never reclaimed accumulate there. When the heap is exhausted the allocation that fails is whichever comes next, anywhere in the isolate — which is why the failure tended to surface from storage rather than from the runtimes that had consumed the memory.
50+
51+ The idle deadline belongs to the session, not to the framework's scheduler, so it is now re-asserted after the framework has arranged whatever it needs — and only while a runtime is actually resident, since once there is nothing left to reclaim the framework's answer is correct.
52+
53+ Disposal also now emits a span carrying a per-isolate resident-runtime gauge, alongside the same gauge on runtime build, so the reclaim can be confirmed in production rather than inferred.
54+
55+- [#1609](https://github.com/UsefulSoftwareCo/executor/pull/1609) [`662ebe2`](https://github.com/UsefulSoftwareCo/executor/commit/662ebe28d5109156a1aa3b27eaa80ba9daacaf11) Thanks [@timkley](https://github.com/timkley)! - **Fix: declare the OAuth application type during dynamic client registration**
56+
57+ Dynamic OAuth registrations now identify HTTPS callbacks as web applications
58+ and loopback HTTP callbacks as native applications. This lets strict OAuth
59+ servers validate Executor's redirect URI against the correct client type.
60+
61+- [#1570](https://github.com/UsefulSoftwareCo/executor/pull/1570) [`e66a3d8`](https://github.com/UsefulSoftwareCo/executor/commit/e66a3d893c948fcccc7fc028870d051cb2d31860) Thanks [@GeiserX](https://github.com/GeiserX)! - **The OAuth popup clears its result out of `localStorage` after handing it over**
62+
63+ The popup writes its result to `localStorage` as the fallback completion channel, because `postMessage` is severed when a provider's consent page sets COOP and `BroadcastChannel` can be partitioned or raced by the auto-close. Nothing removed that entry afterwards, so the payload — which carries the identity label, an email, and on failure the error preview — stayed parked in the user's browser profile.
64+
65+ The entry is now cleared once the handover has had time to land, and on `pagehide` as a backstop — the failure page never auto-closes so the user can read the error, and closing it by hand would otherwise cancel the pending timer and strand the entry. This cannot cost a listener the result: a `storage` event captures `newValue` at dispatch, so an opener that has been notified already holds it.
66+
67+- [#1574](https://github.com/UsefulSoftwareCo/executor/pull/1574) [`c8bb857`](https://github.com/UsefulSoftwareCo/executor/commit/c8bb8578c3afdc9731274d9e9abc68d7ce32d9ab) Thanks [@GeiserX](https://github.com/GeiserX)! - **The 1Password service-account token is cleared from the op-js global after each call**
68+
69+ `@1password/op-js` keeps the service-account token on a module-level CLI instance (`cli.serviceAccountToken`) and reads it when it spawns `op`. The CLI backend set that global before each call and never cleared it, so one reachable reference to the token stayed live for the rest of the process.
70+
71+ It is now cleared as soon as the call that needed it is done, on success, failure and interruption alike. Authentication is unaffected: every read and write of that global already happens inside the backend's semaphore, so the next operation re-sets the token before it spawns anything.
72+
73+ This is hygiene rather than a boundary change. No unrelated `op` child ever received a stale token — every call routes through the same critical section that sets the correct one immediately before invoking — and the token is separately persisted in plaintext in the plugin's config blob, so an attacker's reach is unchanged. What it removes is a long-lived reachable reference that nothing needed to keep.
74+
75+- [#1749](https://github.com/UsefulSoftwareCo/executor/pull/1749) [`d4afe0c`](https://github.com/UsefulSoftwareCo/executor/commit/d4afe0c79f146dd169a00988a2d5d0469297be19) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - Slim the per-integration `search_<integration>` tool definitions to under half their size: one shared one-line description (the tool name already carries the namespace) and a single bare `query` parameter, dropping the `limit`/`offset` knobs. A session pays for these definitions once per connected integration, so the surface now costs ~2k tokens instead of ~5k at 30 integrations; paging through a namespace belongs in `execute`.
76+
77+- [#1798](https://github.com/UsefulSoftwareCo/executor/pull/1798) [`69b0e64`](https://github.com/UsefulSoftwareCo/executor/commit/69b0e6413737599f11848b3877048f789ca84ac5) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - **The packed Worker toolchain is verified at build time, and an incomplete copy is now reported instead of silently ignored**
78+
79+ `@cloudflare/worker-bundler` cannot live inside the compiled binary: bunfs has no `node_modules`, so a bare specifier is unresolvable there by construction. The build instead copies the package's `dist/` next to the executable and `native-bindings.ts` publishes that path as `EXECUTOR_WORKER_BUNDLER_DIR` for consumers to load from.
80+
81+ That handoff was described in two places that were free to drift, and did. The build writes `dist/index.bundled.js` — the entry consumers actually load, packed so it has no bare imports of its own — while the runtime check only looked for `dist/index.js` and `dist/esbuild.wasm`. Nothing verified the staged copy after the compile, so a partial staging produced a binary that looked fine on the build machine and failed on the user's, at startup. Worse, the runtime check failed open: when a file was missing it silently declined to set the environment variable, leaving a consumer to fall through to the bare specifier and crash.
82+
83+ The required file list is now one shared contract used by both sides, so they cannot disagree. The build asserts the staged copy after compiling each target — every required file present, a size floor on the packed entry, and the `\0asm` magic on the wasm so a truncated copy cannot pass — turning a packaging slip into a failed build rather than a broken install. At runtime, a directory that is present but incomplete is reported on stderr naming the missing files, instead of being swallowed. An absent directory stays quiet, since that is the normal non-packaged path.
84+
85+- Updated dependencies [[`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
86+ - @executor-js/sdk@1.6.1
87+ - @executor-js/api@1.4.64
88+ - @executor-js/local@1.6.1
89+ - @executor-js/runtime-quickjs@1.6.1
90+
391 ## 1.6.0
492
593 ### Patch Changes
apps/cli/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "executor",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "private": true,
55 "bin": {
66 "executor": "./bin/executor.ts"
apps/cloud/CHANGELOG.md+21−0
@@ -1,5 +1,26 @@
11 # @executor-js/cloud
22
3+## 1.4.62
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`9dff4e8`](https://github.com/UsefulSoftwareCo/executor/commit/9dff4e8e6598e7d3108634a71269245ba9b480bb), [`7c12aee`](https://github.com/UsefulSoftwareCo/executor/commit/7c12aeea390225291ce4c97865b392237ee7934d), [`ddbf0fe`](https://github.com/UsefulSoftwareCo/executor/commit/ddbf0feba38c8502d78fa20c3081391b8ba3d112), [`91062c2`](https://github.com/UsefulSoftwareCo/executor/commit/91062c2b1d7b8edbc8470ca5eaa544045652afaa), [`9c35f26`](https://github.com/UsefulSoftwareCo/executor/commit/9c35f269dd5de3548111fe5c83cf1e877f23c80d), [`62748e8`](https://github.com/UsefulSoftwareCo/executor/commit/62748e86122b747226c76c2e112c5c4d2b4f7095), [`0007474`](https://github.com/UsefulSoftwareCo/executor/commit/0007474602d8da3642648f216bfdb0f09eb0914f), [`d4afe0c`](https://github.com/UsefulSoftwareCo/executor/commit/d4afe0c79f146dd169a00988a2d5d0469297be19), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/react@1.4.64
9+ - @executor-js/plugin-openapi@1.6.1
10+ - @executor-js/plugin-mcp@1.6.1
11+ - @executor-js/execution@1.6.1
12+ - @executor-js/sdk@1.6.1
13+ - @executor-js/api@1.4.64
14+ - @executor-js/mcp-apps-shell@1.4.12
15+ - @executor-js/plugin-graphql@1.6.1
16+ - @executor-js/plugin-toolkits@1.5.36
17+ - @executor-js/plugin-workos-vault@0.0.2
18+ - @executor-js/runtime-dynamic-worker@1.4.4
19+ - @executor-js/cloudflare@0.0.43
20+ - @executor-js/host-mcp@1.4.4
21+ - @executor-js/vite-plugin@0.0.61
22+ - @executor-js/runtime-quickjs@1.6.1
23+
324 ## 1.4.61
425
526 ### Patch Changes
apps/cloud/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/cloud",
3− "version": "1.4.61",
3+ "version": "1.4.62",
44 "private": true,
55 "type": "module",
66 "scripts": {
apps/desktop/CHANGELOG.md+2−0
@@ -1,5 +1,7 @@
11 # @executor-js/desktop
22
3+## 1.6.1
4+
35 ## 1.6.0
46
57 ## 1.5.42
apps/desktop/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/desktop",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "private": true,
55 "homepage": "https://github.com/UsefulSoftwareCo/executor",
66 "license": "MIT",
apps/host-selfhost/CHANGELOG.md+21−0
@@ -1,5 +1,26 @@
11 # @executor-js/host-selfhost
22
3+## 0.0.43
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`9dff4e8`](https://github.com/UsefulSoftwareCo/executor/commit/9dff4e8e6598e7d3108634a71269245ba9b480bb), [`7c12aee`](https://github.com/UsefulSoftwareCo/executor/commit/7c12aeea390225291ce4c97865b392237ee7934d), [`ddbf0fe`](https://github.com/UsefulSoftwareCo/executor/commit/ddbf0feba38c8502d78fa20c3081391b8ba3d112), [`91062c2`](https://github.com/UsefulSoftwareCo/executor/commit/91062c2b1d7b8edbc8470ca5eaa544045652afaa), [`9c35f26`](https://github.com/UsefulSoftwareCo/executor/commit/9c35f269dd5de3548111fe5c83cf1e877f23c80d), [`62748e8`](https://github.com/UsefulSoftwareCo/executor/commit/62748e86122b747226c76c2e112c5c4d2b4f7095), [`0007474`](https://github.com/UsefulSoftwareCo/executor/commit/0007474602d8da3642648f216bfdb0f09eb0914f), [`d4afe0c`](https://github.com/UsefulSoftwareCo/executor/commit/d4afe0c79f146dd169a00988a2d5d0469297be19), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/react@1.4.64
9+ - @executor-js/plugin-openapi@1.6.1
10+ - @executor-js/plugin-mcp@1.6.1
11+ - @executor-js/execution@1.6.1
12+ - @executor-js/sdk@1.6.1
13+ - @executor-js/api@1.4.64
14+ - @executor-js/app@1.4.4
15+ - @executor-js/mcp-apps-shell@1.4.12
16+ - @executor-js/plugin-graphql@1.6.1
17+ - @executor-js/plugin-toolkits@1.5.36
18+ - @executor-js/plugin-provider-service-split@0.0.15
19+ - @executor-js/analytics@0.1.8
20+ - @executor-js/host-mcp@1.4.4
21+ - @executor-js/plugin-encrypted-secrets@0.0.43
22+ - @executor-js/runtime-quickjs@1.6.1
23+
324 ## 0.0.42
425
526 ### Patch Changes
apps/host-selfhost/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/host-selfhost",
3− "version": "0.0.42",
3+ "version": "0.0.43",
44 "private": true,
55 "type": "module",
66 "exports": {
apps/local/CHANGELOG.md+27−0
@@ -1,5 +1,32 @@
11 # @executor-js/local
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`9dff4e8`](https://github.com/UsefulSoftwareCo/executor/commit/9dff4e8e6598e7d3108634a71269245ba9b480bb), [`7c12aee`](https://github.com/UsefulSoftwareCo/executor/commit/7c12aeea390225291ce4c97865b392237ee7934d), [`ddbf0fe`](https://github.com/UsefulSoftwareCo/executor/commit/ddbf0feba38c8502d78fa20c3081391b8ba3d112), [`91062c2`](https://github.com/UsefulSoftwareCo/executor/commit/91062c2b1d7b8edbc8470ca5eaa544045652afaa), [`9c35f26`](https://github.com/UsefulSoftwareCo/executor/commit/9c35f269dd5de3548111fe5c83cf1e877f23c80d), [`62748e8`](https://github.com/UsefulSoftwareCo/executor/commit/62748e86122b747226c76c2e112c5c4d2b4f7095), [`0007474`](https://github.com/UsefulSoftwareCo/executor/commit/0007474602d8da3642648f216bfdb0f09eb0914f), [`d4afe0c`](https://github.com/UsefulSoftwareCo/executor/commit/d4afe0c79f146dd169a00988a2d5d0469297be19), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/react@1.4.64
9+ - @executor-js/plugin-openapi@1.6.1
10+ - @executor-js/plugin-mcp@1.6.1
11+ - @executor-js/execution@1.6.1
12+ - @executor-js/sdk@1.6.1
13+ - @executor-js/api@1.4.64
14+ - @executor-js/app@1.4.4
15+ - @executor-js/mcp-apps-shell@1.4.12
16+ - @executor-js/plugin-graphql@1.6.1
17+ - @executor-js/plugin-onepassword@1.6.1
18+ - @executor-js/plugin-toolkits@1.5.36
19+ - @executor-js/plugin-provider-service-split@0.0.15
20+ - @executor-js/analytics@0.1.8
21+ - @executor-js/host-mcp@1.4.4
22+ - @executor-js/config@1.6.1
23+ - @executor-js/vite-plugin@0.0.61
24+ - @executor-js/plugin-desktop-settings@1.6.1
25+ - @executor-js/plugin-example@1.6.1
26+ - @executor-js/plugin-file-secrets@1.6.1
27+ - @executor-js/plugin-keychain@1.6.1
28+ - @executor-js/runtime-quickjs@1.6.1
29+
330 ## 1.6.0
431
532 ### Patch Changes
apps/local/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/local",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "private": true,
55 "type": "module",
66 "exports": {
bun.lock+32−32
@@ -31,7 +31,7 @@ · 30 unmodified lines
3131 },
3232 "apps/cli": {
3333 "name": "executor",
34− "version": "1.6.0",
34+ "version": "1.6.1",
3535 "bin": {
3636 "executor": "./bin/executor.ts",
3737 },
@@ -60,7 +60,7 @@ · 22 unmodified lines
6060 },
6161 "apps/cloud": {
6262 "name": "@executor-js/cloud",
63− "version": "1.4.61",
63+ "version": "1.4.62",
6464 "dependencies": {
6565 "@cloudflare/vite-plugin": "^1.31.1",
6666 "@effect/atom-react": "catalog:",
@@ -133,7 +133,7 @@ · 66 unmodified lines
133133 },
134134 "apps/desktop": {
135135 "name": "@executor-js/desktop",
136− "version": "1.6.0",
136+ "version": "1.6.1",
137137 "dependencies": {
138138 "@sentry/bun": "^10.57.0",
139139 "@sentry/electron": "^7.13.0",
@@ -220,7 +220,7 @@ · 80 unmodified lines
220220 },
221221 "apps/host-selfhost": {
222222 "name": "@executor-js/host-selfhost",
223− "version": "0.0.42",
223+ "version": "0.0.43",
224224 "dependencies": {
225225 "@better-auth/api-key": "^1.6.11",
226226 "@cloudflare/worker-bundler": "0.2.1",
@@ -272,7 +272,7 @@ · 45 unmodified lines
272272 },
273273 "apps/local": {
274274 "name": "@executor-js/local",
275− "version": "1.6.0",
275+ "version": "1.6.1",
276276 "dependencies": {
277277 "@effect/atom-react": "catalog:",
278278 "@effect/platform-node": "catalog:",
@@ -352,7 +352,7 @@ · 73 unmodified lines
352352 },
353353 "e2e": {
354354 "name": "@executor-js/e2e",
355− "version": "0.0.40",
355+ "version": "0.0.41",
356356 "dependencies": {
357357 "@executor-js/api": "workspace:*",
358358 "@executor-js/emulate": "^0.14.0",
@@ -387,7 +387,7 @@ · 28 unmodified lines
387387 },
388388 "examples/all-plugins": {
389389 "name": "@executor-js/example-all-plugins",
390− "version": "0.0.61",
390+ "version": "0.0.62",
391391 "dependencies": {
392392 "@executor-js/plugin-file-secrets": "workspace:*",
393393 "@executor-js/plugin-graphql": "workspace:*",
@@ -406,7 +406,7 @@ · 12 unmodified lines
406406 },
407407 "examples/docs-sdk-quickstart": {
408408 "name": "@executor-js/example-docs-sdk-quickstart",
409− "version": "0.0.46",
409+ "version": "0.0.47",
410410 "dependencies": {
411411 "@executor-js/plugin-openapi": "workspace:*",
412412 "@executor-js/sdk": "workspace:*",
@@ -463,7 +463,7 @@ · 50 unmodified lines
463463 },
464464 "packages/core/analytics": {
465465 "name": "@executor-js/analytics",
466− "version": "0.1.7",
466+ "version": "0.1.8",
467467 "dependencies": {
468468 "@effect/platform-node": "catalog:",
469469 "@executor-js/execution": "workspace:*",
@@ -479,7 +479,7 @@ · 9 unmodified lines
479479 },
480480 "packages/core/api": {
481481 "name": "@executor-js/api",
482− "version": "1.4.63",
482+ "version": "1.4.64",
483483 "dependencies": {
484484 "@executor-js/execution": "workspace:*",
485485 "@executor-js/host-mcp": "workspace:*",
@@ -496,7 +496,7 @@ · 10 unmodified lines
496496 },
497497 "packages/core/cli": {
498498 "name": "@executor-js/cli",
499− "version": "0.2.50",
499+ "version": "0.2.51",
500500 "bin": {
501501 "executor-sdk": "./dist/index.js",
502502 },
@@ -517,7 +517,7 @@ · 14 unmodified lines
517517 },
518518 "packages/core/config": {
519519 "name": "@executor-js/config",
520− "version": "1.6.0",
520+ "version": "1.6.1",
521521 "dependencies": {
522522 "@executor-js/sdk": "workspace:*",
523523 "jiti": "^2.6.1",
@@ -538,7 +538,7 @@ · 14 unmodified lines
538538 },
539539 "packages/core/execution": {
540540 "name": "@executor-js/execution",
541− "version": "1.6.0",
541+ "version": "1.6.1",
542542 "dependencies": {
543543 "@executor-js/codemode-core": "workspace:*",
544544 "@executor-js/sdk": "workspace:*",
@@ -604,7 +604,7 @@ · 59 unmodified lines
604604 },
605605 "packages/core/sdk": {
606606 "name": "@executor-js/sdk",
607− "version": "1.6.0",
607+ "version": "1.6.1",
608608 "dependencies": {
609609 "@executor-js/fumadb": "workspace:*",
610610 "@standard-schema/spec": "^1.1.0",
@@ -657,7 +657,7 @@ · 46 unmodified lines
657657 },
658658 "packages/core/vite-plugin": {
659659 "name": "@executor-js/vite-plugin",
660− "version": "0.0.60",
660+ "version": "0.0.61",
661661 "dependencies": {
662662 "@executor-js/sdk": "workspace:*",
663663 "jiti": "^2.6.1",
@@ -677,7 +677,7 @@ · 13 unmodified lines
677677 },
678678 "packages/hosts/cloudflare": {
679679 "name": "@executor-js/cloudflare",
680− "version": "0.0.42",
680+ "version": "0.0.43",
681681 "dependencies": {
682682 "@executor-js/api": "workspace:*",
683683 "@executor-js/execution": "workspace:*",
@@ -718,7 +718,7 @@ · 34 unmodified lines
718718 },
719719 "packages/hosts/mcp-apps-shell": {
720720 "name": "@executor-js/mcp-apps-shell",
721− "version": "1.4.11",
721+ "version": "1.4.12",
722722 "dependencies": {
723723 "@executor-js/react": "workspace:*",
724724 "@executor-js/runtime-quickjs": "workspace:*",
@@ -756,7 +756,7 @@ · 31 unmodified lines
756756 },
757757 "packages/kernel/core": {
758758 "name": "@executor-js/codemode-core",
759− "version": "1.6.0",
759+ "version": "1.6.1",
760760 "dependencies": {
761761 "@babel/parser": "^7.29.2",
762762 "@standard-schema/spec": "^1.0.0",
@@ -829,7 +829,7 @@ · 66 unmodified lines
829829 },
830830 "packages/kernel/runtime-quickjs": {
831831 "name": "@executor-js/runtime-quickjs",
832− "version": "1.6.0",
832+ "version": "1.6.1",
833833 "dependencies": {
834834 "@executor-js/codemode-core": "workspace:*",
835835 "quickjs-emscripten": "catalog:",
@@ -849,7 +849,7 @@ · 13 unmodified lines
849849 },
850850 "packages/kernel/runtime-workerd-subprocess": {
851851 "name": "@executor-js/runtime-workerd-subprocess",
852− "version": "0.0.15",
852+ "version": "0.0.16",
853853 "dependencies": {
854854 "@executor-js/codemode-core": "workspace:*",
855855 "effect": "catalog:",
@@ -864,7 +864,7 @@ · 8 unmodified lines
864864 },
865865 "packages/plugins/desktop-settings": {
866866 "name": "@executor-js/plugin-desktop-settings",
867− "version": "1.6.0",
867+ "version": "1.6.1",
868868 "dependencies": {
869869 "@executor-js/sdk": "workspace:*",
870870 "react": "catalog:",
@@ -877,7 +877,7 @@ · 6 unmodified lines
877877 },
878878 "packages/plugins/encrypted-secrets": {
879879 "name": "@executor-js/plugin-encrypted-secrets",
880− "version": "0.0.42",
880+ "version": "0.0.43",
881881 "dependencies": {
882882 "@executor-js/sdk": "workspace:*",
883883 "effect": "catalog:",
@@ -892,7 +892,7 @@ · 8 unmodified lines
892892 },
893893 "packages/plugins/example": {
894894 "name": "@executor-js/plugin-example",
895− "version": "1.6.0",
895+ "version": "1.6.1",
896896 "dependencies": {
897897 "@executor-js/sdk": "workspace:*",
898898 },
@@ -915,7 +915,7 @@ · 16 unmodified lines
915915 },
916916 "packages/plugins/file-secrets": {
917917 "name": "@executor-js/plugin-file-secrets",
918− "version": "1.6.0",
918+ "version": "1.6.1",
919919 "dependencies": {
920920 "@executor-js/sdk": "workspace:*",
921921 },
@@ -932,7 +932,7 @@ · 10 unmodified lines
932932 },
933933 "packages/plugins/graphql": {
934934 "name": "@executor-js/plugin-graphql",
935− "version": "1.6.0",
935+ "version": "1.6.1",
936936 "dependencies": {
937937 "@effect/platform-node": "catalog:",
938938 "@executor-js/config": "workspace:*",
@@ -971,7 +971,7 @@ · 32 unmodified lines
971971 },
972972 "packages/plugins/keychain": {
973973 "name": "@executor-js/plugin-keychain",
974− "version": "1.6.0",
974+ "version": "1.6.1",
975975 "dependencies": {
976976 "@executor-js/sdk": "workspace:*",
977977 "@napi-rs/keyring": "^1.2.0",
@@ -990,7 +990,7 @@ · 12 unmodified lines
990990 },
991991 "packages/plugins/mcp": {
992992 "name": "@executor-js/plugin-mcp",
993− "version": "1.6.0",
993+ "version": "1.6.1",
994994 "dependencies": {
995995 "@cfworker/json-schema": "^4.1.1",
996996 "@effect/platform-node": "catalog:",
@@ -1033,7 +1033,7 @@ · 36 unmodified lines
10331033 },
10341034 "packages/plugins/onepassword": {
10351035 "name": "@executor-js/plugin-onepassword",
1036− "version": "1.6.0",
1036+ "version": "1.6.1",
10371037 "dependencies": {
10381038 "@1password/op-js": "^0.1.13",
10391039 "@1password/sdk": "^0.4.1-beta.1",
@@ -1067,7 +1067,7 @@ · 27 unmodified lines
10671067 },
10681068 "packages/plugins/openapi": {
10691069 "name": "@executor-js/plugin-openapi",
1070− "version": "1.6.0",
1070+ "version": "1.6.1",
10711071 "dependencies": {
10721072 "@effect/platform-node": "catalog:",
10731073 "@executor-js/config": "workspace:*",
@@ -1108,7 +1108,7 @@ · 34 unmodified lines
11081108 },
11091109 "packages/plugins/provider-service-split": {
11101110 "name": "@executor-js/plugin-provider-service-split",
1111− "version": "0.0.14",
1111+ "version": "0.0.15",
11121112 "dependencies": {
11131113 "@executor-js/plugin-openapi": "workspace:*",
11141114 "@executor-js/sdk": "workspace:*",
@@ -1125,7 +1125,7 @@ · 10 unmodified lines
11251125 },
11261126 "packages/plugins/toolkits": {
11271127 "name": "@executor-js/plugin-toolkits",
1128− "version": "1.5.35",
1128+ "version": "1.5.36",
11291129 "dependencies": {
11301130 "@executor-js/sdk": "workspace:*",
11311131 },
@@ -1194,7 +1194,7 @@ · 62 unmodified lines
11941194 },
11951195 "packages/react": {
11961196 "name": "@executor-js/react",
1197− "version": "1.4.63",
1197+ "version": "1.4.64",
11981198 "dependencies": {
11991199 "@base-ui/react": "^1.3.0",
12001200 "@effect/atom-react": "catalog:",
e2e/CHANGELOG.md+12−0
@@ -1,5 +1,17 @@
11 # @executor-js/e2e
22
3+## 0.0.41
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`7c12aee`](https://github.com/UsefulSoftwareCo/executor/commit/7c12aeea390225291ce4c97865b392237ee7934d), [`ddbf0fe`](https://github.com/UsefulSoftwareCo/executor/commit/ddbf0feba38c8502d78fa20c3081391b8ba3d112), [`91062c2`](https://github.com/UsefulSoftwareCo/executor/commit/91062c2b1d7b8edbc8470ca5eaa544045652afaa), [`9c35f26`](https://github.com/UsefulSoftwareCo/executor/commit/9c35f269dd5de3548111fe5c83cf1e877f23c80d), [`0007474`](https://github.com/UsefulSoftwareCo/executor/commit/0007474602d8da3642648f216bfdb0f09eb0914f), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/plugin-openapi@1.6.1
9+ - @executor-js/plugin-mcp@1.6.1
10+ - @executor-js/sdk@1.6.1
11+ - @executor-js/api@1.4.64
12+ - @executor-js/plugin-graphql@1.6.1
13+ - @executor-js/plugin-toolkits@1.5.36
14+
315 ## 0.0.40
416
517 ### Patch Changes
e2e/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/e2e",
3− "version": "0.0.40",
3+ "version": "0.0.41",
44 "private": true,
55 "type": "module",
66 "scripts": {
examples/all-plugins/CHANGELOG.md+14−0
@@ -1,5 +1,19 @@
11 # @executor-js/example-all-plugins
22
3+## 0.0.62
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`7c12aee`](https://github.com/UsefulSoftwareCo/executor/commit/7c12aeea390225291ce4c97865b392237ee7934d), [`ddbf0fe`](https://github.com/UsefulSoftwareCo/executor/commit/ddbf0feba38c8502d78fa20c3081391b8ba3d112), [`91062c2`](https://github.com/UsefulSoftwareCo/executor/commit/91062c2b1d7b8edbc8470ca5eaa544045652afaa), [`9c35f26`](https://github.com/UsefulSoftwareCo/executor/commit/9c35f269dd5de3548111fe5c83cf1e877f23c80d), [`0007474`](https://github.com/UsefulSoftwareCo/executor/commit/0007474602d8da3642648f216bfdb0f09eb0914f), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/plugin-openapi@1.6.1
9+ - @executor-js/plugin-mcp@1.6.1
10+ - @executor-js/sdk@1.6.1
11+ - @executor-js/plugin-graphql@1.6.1
12+ - @executor-js/plugin-onepassword@1.6.1
13+ - @executor-js/plugin-workos-vault@0.0.2
14+ - @executor-js/plugin-file-secrets@1.6.1
15+ - @executor-js/plugin-keychain@1.6.1
16+
317 ## 0.0.61
418
519 ### Patch Changes
examples/all-plugins/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/example-all-plugins",
3− "version": "0.0.61",
3+ "version": "0.0.62",
44 "private": true,
55 "type": "module",
66 "scripts": {
examples/docs-sdk-quickstart/CHANGELOG.md+8−0
@@ -1,5 +1,13 @@
11 # @executor-js/example-docs-sdk-quickstart
22
3+## 0.0.47
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`7c12aee`](https://github.com/UsefulSoftwareCo/executor/commit/7c12aeea390225291ce4c97865b392237ee7934d), [`ddbf0fe`](https://github.com/UsefulSoftwareCo/executor/commit/ddbf0feba38c8502d78fa20c3081391b8ba3d112), [`0007474`](https://github.com/UsefulSoftwareCo/executor/commit/0007474602d8da3642648f216bfdb0f09eb0914f), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/plugin-openapi@1.6.1
9+ - @executor-js/sdk@1.6.1
10+
311 ## 0.0.46
412
513 ### Patch Changes
examples/docs-sdk-quickstart/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/example-docs-sdk-quickstart",
3− "version": "0.0.46",
3+ "version": "0.0.47",
44 "private": true,
55 "type": "module",
66 "scripts": {
packages/core/analytics/CHANGELOG.md+7−0
@@ -1,5 +1,12 @@
11 # @executor-js/analytics
22
3+## 0.1.8
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`62748e8`](https://github.com/UsefulSoftwareCo/executor/commit/62748e86122b747226c76c2e112c5c4d2b4f7095), [`d4afe0c`](https://github.com/UsefulSoftwareCo/executor/commit/d4afe0c79f146dd169a00988a2d5d0469297be19)]:
8+ - @executor-js/execution@1.6.1
9+
310 ## 0.1.7
411
512 ### Patch Changes
packages/core/analytics/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/analytics",
3− "version": "0.1.7",
3+ "version": "0.1.8",
44 "private": true,
55 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/core/analytics",
66 "bugs": {
packages/core/api/CHANGELOG.md+13−0
@@ -1,5 +1,18 @@
11 # @executor-js/api
22
3+## 1.4.64
4+
5+### Patch Changes
6+
7+- [#1784](https://github.com/UsefulSoftwareCo/executor/pull/1784) [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - Build `StorageError.message` from the call-site label plus the driver's error code instead of the driver's raw text. The driver text is drizzle's `Failed query: <sql>\nparams: <bound values>`, so error reporting grouped one storage defect by statement shape and printed bound parameters into issue titles. The full driver error stays on `cause`.
8+
9+ Add `StorageConnectionError`, a `StorageFailure` variant for postgres.js connection faults (`CONNECTION_ENDED`, `CONNECTION_CLOSED`, `CONNECTION_DESTROYED`, `CONNECT_TIMEOUT`, `ECONNREFUSED`, `ECONNRESET`) and workerd's cross-request I/O rejection. It carries the fault `code` and a `retryable` flag so a lost socket can be told apart from a pool-lifetime bug.
10+
11+- Updated dependencies [[`62748e8`](https://github.com/UsefulSoftwareCo/executor/commit/62748e86122b747226c76c2e112c5c4d2b4f7095), [`d4afe0c`](https://github.com/UsefulSoftwareCo/executor/commit/d4afe0c79f146dd169a00988a2d5d0469297be19), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
12+ - @executor-js/execution@1.6.1
13+ - @executor-js/sdk@1.6.1
14+ - @executor-js/host-mcp@1.4.4
15+
316 ## 1.4.63
417
518 ### Patch Changes
packages/core/api/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/api",
3− "version": "1.4.63",
3+ "version": "1.4.64",
44 "private": true,
55 "type": "module",
66 "exports": {
packages/core/cli/CHANGELOG.md+7−0
@@ -1,5 +1,12 @@
11 # @executor-js/cli
22
3+## 0.2.51
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/sdk@1.6.1
9+
310 ## 0.2.50
411
512 ### Patch Changes
packages/core/cli/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/cli",
3− "version": "0.2.50",
3+ "version": "0.2.51",
44 "description": "CLI for the executor SDK — schema generation, migrations",
55 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/core/cli",
66 "bugs": {
packages/core/config/CHANGELOG.md+7−0
@@ -1,5 +1,12 @@
11 # @executor-js/config
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/sdk@1.6.1
9+
310 ## 1.6.0
411
512 ### Patch Changes
packages/core/config/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/config",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/core/config",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/core/execution/CHANGELOG.md+14−0
@@ -1,5 +1,19 @@
11 # @executor-js/execution
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- [#1741](https://github.com/UsefulSoftwareCo/executor/pull/1741) [`62748e8`](https://github.com/UsefulSoftwareCo/executor/commit/62748e86122b747226c76c2e112c5c4d2b4f7095) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - **Opt-in per-integration search tools on the MCP surface**
8+
9+ Connecting with `?search_tools=true` (stdio: `executor mcp --search-tools`) adds one minimally-described `search_<integration>` MCP tool per connected integration, so the integration namespaces reach the model as tool names it can see without calling anything. Each call routes through the same flow as `tools.search({ namespace })` inside `execute`, and the tool list comes from the same inventory the `execute` description shows. Off by default; a clean endpoint URL is unchanged.
10+
11+- [#1749](https://github.com/UsefulSoftwareCo/executor/pull/1749) [`d4afe0c`](https://github.com/UsefulSoftwareCo/executor/commit/d4afe0c79f146dd169a00988a2d5d0469297be19) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - Slim the per-integration `search_<integration>` tool definitions to under half their size: one shared one-line description (the tool name already carries the namespace) and a single bare `query` parameter, dropping the `limit`/`offset` knobs. A session pays for these definitions once per connected integration, so the surface now costs ~2k tokens instead of ~5k at 30 integrations; paging through a namespace belongs in `execute`.
12+
13+- Updated dependencies [[`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
14+ - @executor-js/sdk@1.6.1
15+ - @executor-js/codemode-core@1.6.1
16+
317 ## 1.6.0
418
519 ### Patch Changes
packages/core/execution/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/execution",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/core/execution",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/core/sdk/CHANGELOG.md+8−0
@@ -1,5 +1,13 @@
11 # @executor-js/sdk
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- [#1784](https://github.com/UsefulSoftwareCo/executor/pull/1784) [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - Build `StorageError.message` from the call-site label plus the driver's error code instead of the driver's raw text. The driver text is drizzle's `Failed query: <sql>\nparams: <bound values>`, so error reporting grouped one storage defect by statement shape and printed bound parameters into issue titles. The full driver error stays on `cause`.
8+
9+ Add `StorageConnectionError`, a `StorageFailure` variant for postgres.js connection faults (`CONNECTION_ENDED`, `CONNECTION_CLOSED`, `CONNECTION_DESTROYED`, `CONNECT_TIMEOUT`, `ECONNREFUSED`, `ECONNRESET`) and workerd's cross-request I/O rejection. It carries the fault `code` and a `retryable` flag so a lost socket can be told apart from a pool-lifetime bug.
10+
311 ## 1.6.0
412
513 ### Patch Changes
packages/core/sdk/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/sdk",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/core/sdk",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/core/vite-plugin/CHANGELOG.md+7−0
@@ -1,5 +1,12 @@
11 # @executor-js/vite-plugin
22
3+## 0.0.61
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/sdk@1.6.1
9+
310 ## 0.0.60
411
512 ### Patch Changes
packages/core/vite-plugin/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/vite-plugin",
3− "version": "0.0.60",
3+ "version": "0.0.61",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/core/vite-plugin",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/hosts/cloudflare/CHANGELOG.md+10−0
@@ -1,5 +1,15 @@
11 # @executor-js/cloudflare
22
3+## 0.0.43
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`62748e8`](https://github.com/UsefulSoftwareCo/executor/commit/62748e86122b747226c76c2e112c5c4d2b4f7095), [`d4afe0c`](https://github.com/UsefulSoftwareCo/executor/commit/d4afe0c79f146dd169a00988a2d5d0469297be19), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/execution@1.6.1
9+ - @executor-js/sdk@1.6.1
10+ - @executor-js/api@1.4.64
11+ - @executor-js/host-mcp@1.4.4
12+
313 ## 0.0.42
414
515 ### Patch Changes
packages/hosts/cloudflare/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/cloudflare",
3− "version": "0.0.42",
3+ "version": "0.0.43",
44 "private": true,
55 "type": "module",
66 "exports": {
packages/hosts/mcp-apps-shell/CHANGELOG.md+8−0
@@ -1,5 +1,13 @@
11 # @executor-js/mcp-apps-shell
22
3+## 1.4.12
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`9dff4e8`](https://github.com/UsefulSoftwareCo/executor/commit/9dff4e8e6598e7d3108634a71269245ba9b480bb)]:
8+ - @executor-js/react@1.4.64
9+ - @executor-js/runtime-quickjs@1.6.1
10+
311 ## 1.4.11
412
513 ### Patch Changes
packages/hosts/mcp-apps-shell/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/mcp-apps-shell",
3− "version": "1.4.11",
3+ "version": "1.4.12",
44 "private": true,
55 "type": "module",
66 "exports": {
packages/kernel/core/CHANGELOG.md+2−0
@@ -1,5 +1,7 @@
11 # @executor-js/codemode-core
22
3+## 1.6.1
4+
35 ## 1.6.0
46
57 ## 1.5.42
packages/kernel/core/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/codemode-core",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/kernel/core",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/kernel/runtime-quickjs/CHANGELOG.md+7−0
@@ -1,5 +1,12 @@
11 # @executor-js/runtime-quickjs
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- Updated dependencies []:
8+ - @executor-js/codemode-core@1.6.1
9+
310 ## 1.6.0
411
512 ### Patch Changes
packages/kernel/runtime-quickjs/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/runtime-quickjs",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/kernel/runtime-quickjs",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/kernel/runtime-workerd-subprocess/CHANGELOG.md+7−0
@@ -1,5 +1,12 @@
11 # @executor-js/runtime-workerd-subprocess
22
3+## 0.0.16
4+
5+### Patch Changes
6+
7+- Updated dependencies []:
8+ - @executor-js/codemode-core@1.6.1
9+
310 ## 0.0.15
411
512 ### Patch Changes
packages/kernel/runtime-workerd-subprocess/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/runtime-workerd-subprocess",
3− "version": "0.0.15",
3+ "version": "0.0.16",
44 "private": true,
55 "type": "module",
66 "exports": {
packages/plugins/desktop-settings/CHANGELOG.md+7−0
@@ -1,5 +1,12 @@
11 # @executor-js/plugin-desktop-settings
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/sdk@1.6.1
9+
310 ## 1.6.0
411
512 ### Patch Changes
packages/plugins/desktop-settings/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/plugin-desktop-settings",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/plugins/desktop-settings",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/plugins/encrypted-secrets/CHANGELOG.md+7−0
@@ -1,5 +1,12 @@
11 # @executor-js/plugin-encrypted-secrets
22
3+## 0.0.43
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/sdk@1.6.1
9+
310 ## 0.0.42
411
512 ### Patch Changes
packages/plugins/encrypted-secrets/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/plugin-encrypted-secrets",
3− "version": "0.0.42",
3+ "version": "0.0.43",
44 "private": true,
55 "type": "module",
66 "exports": {
packages/plugins/example/CHANGELOG.md+7−0
@@ -1,5 +1,12 @@
11 # @executor-js/plugin-example
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/sdk@1.6.1
9+
310 ## 1.6.0
411
512 ### Patch Changes
packages/plugins/example/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/plugin-example",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/plugins/example",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/plugins/file-secrets/CHANGELOG.md+7−0
@@ -1,5 +1,12 @@
11 # @executor-js/plugin-file-secrets
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/sdk@1.6.1
9+
310 ## 1.6.0
411
512 ### Patch Changes
packages/plugins/file-secrets/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/plugin-file-secrets",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/plugins/file-secrets",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/plugins/graphql/CHANGELOG.md+10−0
@@ -1,5 +1,15 @@
11 # @executor-js/plugin-graphql
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`9dff4e8`](https://github.com/UsefulSoftwareCo/executor/commit/9dff4e8e6598e7d3108634a71269245ba9b480bb), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/react@1.4.64
9+ - @executor-js/sdk@1.6.1
10+ - @executor-js/api@1.4.64
11+ - @executor-js/config@1.6.1
12+
313 ## 1.6.0
414
515 ### Patch Changes
packages/plugins/graphql/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/plugin-graphql",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/plugins/graphql",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/plugins/keychain/CHANGELOG.md+7−0
@@ -1,5 +1,12 @@
11 # @executor-js/plugin-keychain
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/sdk@1.6.1
9+
310 ## 1.6.0
411
512 ### Patch Changes
packages/plugins/keychain/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/plugin-keychain",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/plugins/keychain",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/plugins/mcp/CHANGELOG.md+16−0
@@ -1,5 +1,21 @@
11 # @executor-js/plugin-mcp
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- [#1747](https://github.com/UsefulSoftwareCo/executor/pull/1747) [`91062c2`](https://github.com/UsefulSoftwareCo/executor/commit/91062c2b1d7b8edbc8470ca5eaa544045652afaa) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - Load the MCP client SDK lazily on first outbound connection instead of at module evaluation. Runtimes that bundle the plugin (notably Cloudflare Workers) no longer pay the client package's module-eval memory and CPU on startup or on code paths that never dial an MCP server.
8+
9+- [#1716](https://github.com/UsefulSoftwareCo/executor/pull/1716) [`9c35f26`](https://github.com/UsefulSoftwareCo/executor/commit/9c35f269dd5de3548111fe5c83cf1e877f23c80d) Thanks [@xav-ie](https://github.com/xav-ie)! - **Closing a remote MCP connection now ends its streamable-http SSE request**
10+
11+ On a supplied `httpClientLayer`, the fetch adapter wired the caller's `AbortSignal` only to the pending response promise, never to the response body, so closing a connection left the long-lived `GET` channel in flight forever — one abandoned request per dial. Under Bun each holds one of the 256 concurrent-request slots, so a long-running process eventually exhausts the pool and every connection starts failing with `MCP discovery timed out after 15000ms`. The response stream is now interrupted when the signal aborts.
12+
13+- Updated dependencies [[`9dff4e8`](https://github.com/UsefulSoftwareCo/executor/commit/9dff4e8e6598e7d3108634a71269245ba9b480bb), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
14+ - @executor-js/react@1.4.64
15+ - @executor-js/sdk@1.6.1
16+ - @executor-js/api@1.4.64
17+ - @executor-js/config@1.6.1
18+
319 ## 1.6.0
420
521 ### Minor Changes
packages/plugins/mcp/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/plugin-mcp",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/plugins/mcp",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/plugins/onepassword/CHANGELOG.md+9−0
@@ -1,5 +1,14 @@
11 # @executor-js/plugin-onepassword
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`9dff4e8`](https://github.com/UsefulSoftwareCo/executor/commit/9dff4e8e6598e7d3108634a71269245ba9b480bb), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/react@1.4.64
9+ - @executor-js/sdk@1.6.1
10+ - @executor-js/api@1.4.64
11+
312 ## 1.6.0
413
514 ### Patch Changes
packages/plugins/onepassword/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/plugin-onepassword",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/plugins/onepassword",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/plugins/openapi/CHANGELOG.md+16−0
@@ -1,5 +1,21 @@
11 # @executor-js/plugin-openapi
22
3+## 1.6.1
4+
5+### Patch Changes
6+
7+- [#1755](https://github.com/UsefulSoftwareCo/executor/pull/1755) [`7c12aee`](https://github.com/UsefulSoftwareCo/executor/commit/7c12aeea390225291ce4c97865b392237ee7934d) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - Make Microsoft Graph slice URLs first-class spec sources instead of a hidden substitution. Catalog tiles now point directly at the slice release assets, the stored specUrl is exactly what gets fetched, and selection narrowing travels visibly in the URL fragment; requesting the upstream monolith URL fetches the monolith, never a silently swapped slice.
8+
9+- [#1753](https://github.com/UsefulSoftwareCo/executor/pull/1753) [`ddbf0fe`](https://github.com/UsefulSoftwareCo/executor/commit/ddbf0feba38c8502d78fa20c3081391b8ba3d112) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - Serve Microsoft Graph preset selections from precomputed slice release assets instead of the 43MB upstream monolith. The monolith fetch almost never survives a 128MB Workers isolate (production traces show one completion in 30 days), so covered selections — every catalog preset, plus any combination within the default bundle — now read a 4–19MB filtered document built offline by the graph-slices workflow, with the monolith path kept only as a fallback and for full-graph/custom-scope selections.
10+
11+- [#1751](https://github.com/UsefulSoftwareCo/executor/pull/1751) [`0007474`](https://github.com/UsefulSoftwareCo/executor/commit/0007474602d8da3642648f216bfdb0f09eb0914f) Thanks [@RhysSullivan](https://github.com/RhysSullivan)! - Preview OpenAPI spec-format selections (Microsoft Graph) through the streaming structural-split path instead of a whole-document parse, and guard generic whole-document parses by parsed-tree size (line count for block YAML, text size for JSON). Previewing a Graph preset URL previously parsed the 43MB source whole and killed the 128MB Workers isolate mid-request, surfacing as an empty 503; it now streams within budget, and oversized generic specs fail with an actionable error instead of taking down the isolate.
12+
13+- Updated dependencies [[`9dff4e8`](https://github.com/UsefulSoftwareCo/executor/commit/9dff4e8e6598e7d3108634a71269245ba9b480bb), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
14+ - @executor-js/react@1.4.64
15+ - @executor-js/sdk@1.6.1
16+ - @executor-js/api@1.4.64
17+ - @executor-js/config@1.6.1
18+
319 ## 1.6.0
420
521 ### Patch Changes
packages/plugins/openapi/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/plugin-openapi",
3− "version": "1.6.0",
3+ "version": "1.6.1",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/plugins/openapi",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/plugins/provider-service-split/CHANGELOG.md+8−0
@@ -1,5 +1,13 @@
11 # @executor-js/plugin-provider-service-split
22
3+## 0.0.15
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`7c12aee`](https://github.com/UsefulSoftwareCo/executor/commit/7c12aeea390225291ce4c97865b392237ee7934d), [`ddbf0fe`](https://github.com/UsefulSoftwareCo/executor/commit/ddbf0feba38c8502d78fa20c3081391b8ba3d112), [`0007474`](https://github.com/UsefulSoftwareCo/executor/commit/0007474602d8da3642648f216bfdb0f09eb0914f), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/plugin-openapi@1.6.1
9+ - @executor-js/sdk@1.6.1
10+
311 ## 0.0.14
412
513 ### Patch Changes
packages/plugins/provider-service-split/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/plugin-provider-service-split",
3− "version": "0.0.14",
3+ "version": "0.0.15",
44 "private": true,
55 "type": "module",
66 "exports": {
packages/plugins/toolkits/CHANGELOG.md+9−0
@@ -1,5 +1,14 @@
11 # @executor-js/plugin-toolkits
22
3+## 1.5.36
4+
5+### Patch Changes
6+
7+- Updated dependencies [[`9dff4e8`](https://github.com/UsefulSoftwareCo/executor/commit/9dff4e8e6598e7d3108634a71269245ba9b480bb), [`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
8+ - @executor-js/react@1.4.64
9+ - @executor-js/sdk@1.6.1
10+ - @executor-js/api@1.4.64
11+
312 ## 1.5.35
413
514 ### Patch Changes
packages/plugins/toolkits/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/plugin-toolkits",
3− "version": "1.5.35",
3+ "version": "1.5.36",
44 "homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/plugins/toolkits",
55 "bugs": {
66 "url": "https://github.com/UsefulSoftwareCo/executor/issues"
packages/react/CHANGELOG.md+14−0
@@ -1,5 +1,19 @@
11 # @executor-js/react
22
3+## 1.4.64
4+
5+### Patch Changes
6+
7+- [#1746](https://github.com/UsefulSoftwareCo/executor/pull/1746) [`9dff4e8`](https://github.com/UsefulSoftwareCo/executor/commit/9dff4e8e6598e7d3108634a71269245ba9b480bb) Thanks [@sergical](https://github.com/sergical)! - **The connection edit sheet now previews what agents actually read**
8+
9+ The "What agents see" preview in the connection edit sheet rendered a `- \`<prefix>\` — <description>`inventory line. That line left the`execute`tool description when the inventory was slimmed to bare integration slugs, so the preview showed text no agent reads. The account label was also marked "Display-only", but`connections.list` returns it to agents alongside the description.
10+
11+ The preview now mirrors the `connections.list` item for the connection (`name`, `identityLabel`, `description`), and the sheet copy says that both fields are agent-visible while the callable name stays as it was at connect time.
12+
13+- Updated dependencies [[`55180cb`](https://github.com/UsefulSoftwareCo/executor/commit/55180cb1487f9a3a28ddc0ee0bedfab8464c1f72)]:
14+ - @executor-js/sdk@1.6.1
15+ - @executor-js/api@1.4.64
16+
317 ## 1.4.63
418
519 ### Patch Changes
packages/react/package.json+1−1
@@ -1,6 +1,6 @@
11 {
22 "name": "@executor-js/react",
3− "version": "1.4.63",
3+ "version": "1.4.64",
44 "private": true,
55 "type": "module",
66 "exports": {