@zackbart/connecta 0.37.0 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +80 -0
- package/README.md +2 -2
- package/bin/connecta.mjs +1 -39
- package/bin/version.mjs +1 -1
- package/dist/access-tokens.js +2 -4
- package/dist/agent-identity.js +1 -1
- package/dist/auth/clerk-sdk/generated.js +2 -1
- package/dist/auth/cloudflare-access.d.ts +3 -1
- package/dist/auth/cloudflare-access.js +22 -11
- package/dist/auth/downstream-oauth.js +195 -270
- package/dist/auth/downstream-revocation.js +1 -1
- package/dist/auth/oauth-grant.js +11 -0
- package/dist/auth/oauth-token-response.js +1 -1
- package/dist/auth/vercel-agent.js +2 -1
- package/dist/auth-elicitation.js +2 -2
- package/dist/branding.d.ts +1 -15
- package/dist/branding.js +2 -2
- package/dist/bytes.js +42 -0
- package/dist/call-admission-context.js +2 -5
- package/dist/call-admission.js +5 -0
- package/dist/call-recovery.js +0 -3
- package/dist/catalog-cache.js +26 -7
- package/dist/catalog-fingerprint.js +2 -18
- package/dist/catalog-revision.js +9 -0
- package/dist/catalog-service.js +51 -20
- package/dist/config-defaults.d.ts +1 -0
- package/dist/config-defaults.js +1 -0
- package/dist/config-schema.d.ts +1 -1
- package/dist/config-schema.js +6 -2
- package/dist/config.d.ts +41 -14
- package/dist/config.js +21 -71
- package/dist/connector-caller.js +1 -1
- package/dist/connectors/api-connector.js +4 -3
- package/dist/connectors/guarded-fetch.d.ts +0 -6
- package/dist/connectors/guarded-fetch.js +1 -11
- package/dist/connectors/remote-mcp.js +93 -69
- package/dist/connectors/resource-uri.js +0 -4
- package/dist/credentials.js +3 -0
- package/dist/d1.d.ts +0 -89
- package/dist/d1.js +0 -34
- package/dist/downstream-input.js +2 -2
- package/dist/execute.js +161 -116
- package/dist/executor-result.js +2 -1
- package/dist/executors/quickjs-runtime.js +2 -25
- package/dist/executors/quickjs.js +1 -1
- package/dist/guest-runtime.js +5 -3
- package/dist/guest-types.d.ts +5 -5
- package/dist/http/client.js +1 -1
- package/dist/http/errors.js +2 -2
- package/dist/http/json-schema.js +1 -1
- package/dist/http/node-transport.js +0 -1
- package/dist/http/oauth.js +1 -1
- package/dist/http/paging.js +6 -9
- package/dist/http/provider.js +1 -1
- package/dist/http/safety.js +1 -1
- package/dist/http/services.js +1 -8
- package/dist/http/tools.js +1 -7
- package/dist/http/vendor.js +7 -7
- package/dist/identity.js +2 -6
- package/dist/index.js +1 -2
- package/dist/invocation-auth.js +2 -1
- package/dist/invocation.js +8 -2
- package/dist/meta-tools.js +27 -27
- package/dist/native-tools.js +2 -1
- package/dist/oauth-handoff.js +2 -2
- package/dist/operation-vocabulary.js +1 -1
- package/dist/operator-record.d.ts +8 -2
- package/dist/operator-record.js +18 -50
- package/dist/operator-ui/contract.d.ts +4 -2
- package/dist/operator-ui/generated.js +3 -3
- package/dist/operator-ui/model.d.ts +7 -2
- package/dist/program-writes.js +3 -8
- package/dist/provider-call.js +0 -7
- package/dist/provider.d.ts +1 -1
- package/dist/providers/_shared/google/kit.js +1 -6
- package/dist/providers/_shared/google/service-account.js +1 -3
- package/dist/providers/_shared/google/workspace.d.ts +1 -1
- package/dist/providers/_shared/guide.js +3 -0
- package/dist/providers/_shared/json.js +12 -0
- package/dist/providers/_shared/rest/compact-index.js +1 -1
- package/dist/providers/_shared/rest/kit.js +1 -3
- package/dist/providers/_shared/rest/operation-index.js +1 -3
- package/dist/providers/_shared/rest/value-safety.js +26 -28
- package/dist/providers/breeze/api.js +2 -7
- package/dist/providers/breeze/index.js +4 -2
- package/dist/providers/breeze/tools.js +3 -4
- package/dist/providers/ccb/api.js +1 -6
- package/dist/providers/ccb/index.js +2 -1
- package/dist/providers/ccb/tools.js +1 -6
- package/dist/providers/cloudflare/api.js +2 -2
- package/dist/providers/cloudflare/index.js +2 -1
- package/dist/providers/cloudflare/safety.js +3 -3
- package/dist/providers/docs/tools.js +2 -10
- package/dist/providers/drive/tools.js +12 -25
- package/dist/providers/forms/tools.js +1 -9
- package/dist/providers/gmail/tools.js +5 -21
- package/dist/providers/overflow/api.js +1 -3
- package/dist/providers/overflow/index.js +2 -1
- package/dist/providers/overflow/tools.js +3 -7
- package/dist/providers/planning-center/api.js +2 -1
- package/dist/providers/planning-center/lib/constants.d.ts +1 -1
- package/dist/providers/planning-center/lib/json-api.js +1 -9
- package/dist/providers/planning-center/tools.js +2 -1
- package/dist/providers/sheets/tools.js +1 -9
- package/dist/providers/slides/tools.js +4 -13
- package/dist/providers/stripe/index.js +2 -1
- package/dist/providers/stripe/safety.js +2 -2
- package/dist/providers/tithely/api.js +2 -7
- package/dist/providers/tithely/index.js +3 -2
- package/dist/providers/tithely/tools.js +7 -5
- package/dist/providers/vercel/api.js +1 -6
- package/dist/providers/vercel/lib/pin.js +1 -1
- package/dist/providers/vercel/safety.js +1 -1
- package/dist/providers/vercel/tools.js +2 -1
- package/dist/redaction-marker.js +2 -2
- package/dist/registry.d.ts +4 -1
- package/dist/registry.js +35 -22
- package/dist/request-principal.js +15 -2
- package/dist/request-state.js +2 -2
- package/dist/routes/access-tokens.js +1 -1
- package/dist/routes/activity-disclosure.js +1 -1
- package/dist/routes/connect.js +2 -2
- package/dist/routes/credentials.js +1 -1
- package/dist/routes/dispatch.js +10 -0
- package/dist/routes/mcp.js +23 -21
- package/dist/routes/oauth-management.js +1 -1
- package/dist/routes/operator.js +53 -7
- package/dist/routes/shared.d.ts +8 -8
- package/dist/routes/shared.js +22 -15
- package/dist/routes/ui-config.js +6 -6
- package/dist/routes/ui-data.js +2 -2
- package/dist/routes/ui.js +9 -4
- package/dist/runtime/call-admission.js +1 -1
- package/dist/runtime/call.js +1 -1
- package/dist/runtime/settlement.js +1 -1
- package/dist/runtime/shared-read.js +2 -15
- package/dist/sent-secrets.d.ts +14 -6
- package/dist/sent-secrets.js +231 -85
- package/dist/server.js +4 -4
- package/dist/skills.js +8 -35
- package/dist/sqlite.d.ts +0 -19
- package/dist/sqlite.js +2 -83
- package/dist/storage/keys.js +29 -124
- package/dist/storage/sql-native.js +14 -111
- package/dist/storage/sql.d.ts +1 -24
- package/dist/storage/sql.js +1 -12
- package/dist/tool-error.js +4 -0
- package/dist/types.d.ts +4 -3
- package/dist/ui.js +3 -0
- package/dist/url-safety.js +0 -4
- package/dist/usage-guide.js +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker.js +1 -1
- package/documentation/README.md +6 -42
- package/documentation/architecture.md +190 -507
- package/documentation/auth.md +172 -58
- package/documentation/code-mode.md +98 -66
- package/documentation/deploying.md +19 -40
- package/documentation/integrating.md +8 -19
- package/documentation/meta-tools.md +23 -6
- package/documentation/migration-0.33.md +5 -5
- package/documentation/migration-0.34.md +2 -4
- package/documentation/migration-retired-layouts.md +74 -0
- package/documentation/operator-tests.md +19 -119
- package/documentation/operator-ui.md +46 -8
- package/documentation/provider-auth-migration.md +4 -10
- package/documentation/provider-migration-0.29.md +4 -15
- package/examples/worker/AGENTS.md +4 -6
- package/examples/worker/README.md +20 -115
- package/guides/connecting-agents.md +7 -30
- package/guides/how-it-works.md +2 -2
- package/guides/safety-and-trust.md +4 -1
- package/package.json +19 -19
- package/templates/node/README.md +9 -26
- package/templates/node/package.json +1 -1
- package/dist/auth/oauth-v2-migration.js +0 -135
- package/dist/provider-call-facts.d.ts +0 -115
- package/dist/provider-call.d.ts +0 -112
- package/dist/storage/d1-copy.js +0 -255
- package/dist/storage/sql-schema.d.ts +0 -6
- package/examples/worker/kv-to-d1.wrangler.jsonc +0 -26
- package/examples/worker/scripts/copy-kv-to-d1.mjs +0 -162
|
@@ -113,7 +113,8 @@ Connecta passes exactly one provider, named `connecta`. An executor must:
|
|
|
113
113
|
|
|
114
114
|
1. **Expose each provider as a guest global** whose properties are its `fns`,
|
|
115
115
|
called with the program's arguments and awaited. Connecta supplies `search`,
|
|
116
|
-
`describe`, `call`, `read`, `result`, `skill`, and `emit
|
|
116
|
+
`describe`, `call`, `read`, `result`, `skill`, and `emit`; the prelude also
|
|
117
|
+
binds the guest's `skills` alias to `skill`.
|
|
117
118
|
2. **Evaluate `prelude` after the provider globals exist and before the
|
|
118
119
|
program.** It is trusted host code that installs the immutable namespace
|
|
119
120
|
and waits for emission acknowledgements. Capture runner intrinsics first;
|
|
@@ -202,7 +203,8 @@ belonged to shortcut dispatch and stay retired; nothing reuses those ids.
|
|
|
202
203
|
|
|
203
204
|
## The surface
|
|
204
205
|
|
|
205
|
-
Seven functions: `search`, `describe`, `call`, `read`, `result`, `skill`, and `emit
|
|
206
|
+
Seven functions: `search`, `describe`, `call`, `read`, `result`, `skill`, and `emit`,
|
|
207
|
+
plus `skills`, an undeclared alias bound to the same host function as `skill`.
|
|
206
208
|
All return awaitable values; emission also works without `await`. The namespace
|
|
207
209
|
has no inherited members. Unknown properties are undefined, and calling them
|
|
208
210
|
fails as a guest `TypeError`. The host also dispatches only own members of `fns`.
|
|
@@ -413,7 +415,11 @@ The `get_result` meta-tool is removed.
|
|
|
413
415
|
top-level `skills`, within the admitted connector view. It reads the registry
|
|
414
416
|
behind native `skills/get` and `resources/read`, including opted-in downstream
|
|
415
417
|
skills. It returns
|
|
416
|
-
`{ name, format: "text", text }`; an unknown name is `not_found`.
|
|
418
|
+
`{ name, format: "text", text }`; an unknown name is `not_found`. It also
|
|
419
|
+
accepts the top-level tool's `{ name }` object, and `connecta.skills` is an
|
|
420
|
+
undeclared alias of `connecta.skill` with the same host-call accounting, because
|
|
421
|
+
models copy the `skills` tool's shape into programs. Any other argument is
|
|
422
|
+
`invalid_args`, with a message naming `connecta.skill("usage")`.
|
|
417
423
|
|
|
418
424
|
### Parallel calls
|
|
419
425
|
|
|
@@ -673,11 +679,26 @@ fields. Program-authored projection saved bytes; host heuristics could drop
|
|
|
673
679
|
deliberately returned fields. Helpers need [#222](https://github.com/zackbart/connecta/issues/222)
|
|
674
680
|
evidence that programs fail to project.
|
|
675
681
|
|
|
676
|
-
**R2.** The boundary is
|
|
677
|
-
emitted text
|
|
682
|
+
**R2.** The boundary is `execute.maxResultChars` serialized characters, shared
|
|
683
|
+
with emitted text: 24,000 (~6k tokens) by default, configurable from 4,000 to
|
|
684
|
+
1,000,000. Raise it when agents need large results whole and the model's
|
|
685
|
+
context can afford them, since every paging round trip costs a model step.
|
|
686
|
+
The response carries a return twice (text content and `structuredContent`),
|
|
687
|
+
and Connecta has no response-size limit of its own, so the client's limits
|
|
688
|
+
apply; `admission.requests.maxBodyBytes` bounds request bodies only. Claude Code,
|
|
689
|
+
for one, passes at most 50,000 characters of text and can reject a larger result
|
|
690
|
+
with no content (see [truncated direct-call results](./meta-tools.md#truncated-direct-call-results)),
|
|
691
|
+
so keep the cap below what every client of the deployment accepts. Redaction scans the whole envelope once, so its cost grows with the cap.
|
|
692
|
+
The cap does not change stash paging: pages still obey the stashed call's
|
|
693
|
+
`maxResultBytes` and the 32 KiB bridge ceiling.
|
|
694
|
+
An oversized return is stashed as compact JSON through the same
|
|
678
695
|
result store as direct calls. The returned notice carries `truncated`, `resultId`,
|
|
679
696
|
`totalBytes`, `hint`, `nextOffset: 0`, and an executable `nextAction` that pages
|
|
680
|
-
with `connecta.result`.
|
|
697
|
+
with `connecta.result`. Its page size is `floor((maxResultChars - 1024) / 6)`
|
|
698
|
+
bytes, so a page fits the next program's return even when every byte escapes to
|
|
699
|
+
six characters (3,829 bytes by default), at most the stashed call's
|
|
700
|
+
`maxResultBytes` and the 32 KiB bridge ceiling; direct-call notices use the same
|
|
701
|
+
size. It also retains `totalChars` and a bounded `preview`.
|
|
681
702
|
The recovery action and hint precede the preview, so clients that spill results
|
|
682
703
|
after the first 2,000 characters retain the handle and the instruction.
|
|
683
704
|
Small returns pass through unchanged; Connecta does not select fields.
|
|
@@ -790,8 +811,8 @@ a successful result, appended to `content` after the JSON envelope, which gains
|
|
|
790
811
|
response (`R6`). `structuredContent` stays the envelope alone — emission is
|
|
791
812
|
presentation, not a second data channel.
|
|
792
813
|
|
|
793
|
-
**M3.** Text emission shares `R2`'s
|
|
794
|
-
characters reserved for the envelope (23,488 for emitted text). Its
|
|
814
|
+
**M3.** Text emission shares `R2`'s `execute.maxResultChars` cap, less 512
|
|
815
|
+
characters reserved for the envelope (23,488 for emitted text by default). Its
|
|
795
816
|
serialized block size reduces the return budget, and oversized text fails with
|
|
796
817
|
`result_too_large`. Image/audio blocks use the separate transport budget and
|
|
797
818
|
reach the model as real MCP media content, including when `emit` is not awaited.
|
|
@@ -874,12 +895,24 @@ including discovery. The response returns `executor_cancelled` without awaiting
|
|
|
874
895
|
a wedged executor or `acquire()` that ignores its signal. It releases the lease;
|
|
875
896
|
a late-granted lease releases on arrival. Nothing request-bound survives the
|
|
876
897
|
request. Whether guest computation stops is the executor's (`X3`).
|
|
898
|
+
Final program-return paging remains request-owned after the executor lease is
|
|
899
|
+
released. Cancellation stops its storage waits and starts no further stash
|
|
900
|
+
operations when a pending storage response arrives. An in-process caller receives
|
|
901
|
+
`executor_cancelled` with any completed writes counted in `writes.succeeded`.
|
|
877
902
|
|
|
878
903
|
Programs and direct calls use the same invocation deadline and stages. A call's
|
|
879
904
|
`timeoutMs` wins, then `calls.defaultTimeoutMs`, then `execute.hostCallTimeoutMs`
|
|
880
|
-
(default 15,000).
|
|
905
|
+
(default 15,000). `connecta.result`, `connecta.skill` and `connecta.read` always
|
|
906
|
+
use `execute.hostCallTimeoutMs`. The `execute_code` description advertises the
|
|
907
|
+
`connecta.call` default as `<n>s/host call`, or, when `calls.defaultTimeoutMs`
|
|
908
|
+
differs, both deadlines, for example `25s/call (15s result/skill/read)`.
|
|
909
|
+
A guest may request a longer individual call, but the sandbox
|
|
881
910
|
and request ceilings still bound the whole run. Timeout details are agent-facing;
|
|
882
911
|
operator records retain only checked classifications and numeric facts.
|
|
912
|
+
Result processing, including stash reservation, uses the same remaining call
|
|
913
|
+
budget and request cancellation. If it cannot finish after a successful call,
|
|
914
|
+
the error is non-retryable `result_processing_failed`; the write already
|
|
915
|
+
happened and stays successful in program write accounting.
|
|
883
916
|
A dispatched write timeout becomes `write_outcome_unknown` and retains its
|
|
884
917
|
deadline details even when the program catches the failure. A completed
|
|
885
918
|
maintained-provider call that reports a timeout keeps `timeout` when its complete
|
|
@@ -905,17 +938,17 @@ deadline past the ceiling means raising the ceiling too.
|
|
|
905
938
|
**L4.** Per-execution bounds that are contract, identical in both executors
|
|
906
939
|
because connecta enforces them above the sandbox:
|
|
907
940
|
|
|
908
|
-
| Bound | Value
|
|
909
|
-
| --------------------------------------------------------------------------------------- |
|
|
910
|
-
| Host calls per execution, shared by every guest call except `emit` | 20 by default, `execute.maxHostCalls`
|
|
911
|
-
| Writes per run on a writable endpoint, on top of the host calls they also spend (`W10`) | 10 by default, `execute.maxWrites`
|
|
912
|
-
| Deadline per host call | 15 s
|
|
913
|
-
| Discovery page | ≤ 100 tools, ≤ 256,000 serialized bytes
|
|
914
|
-
| `describe` addresses | ≤ 100
|
|
915
|
-
| `describe` nearby suggestions | ≤ 3 canonical addresses per failed entry
|
|
916
|
-
| Caller text echoed by `describe` recovery | ≤ 512 UTF-8 bytes per field, plus `…`
|
|
917
|
-
| Result | 24,000 serialized characters
|
|
918
|
-
| Logs presented to the model | 4,000 characters
|
|
941
|
+
| Bound | Value |
|
|
942
|
+
| --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
943
|
+
| Host calls per execution, shared by every guest call except `emit` | 20 by default, `execute.maxHostCalls` |
|
|
944
|
+
| Writes per run on a writable endpoint, on top of the host calls they also spend (`W10`) | 10 by default, `execute.maxWrites` |
|
|
945
|
+
| Deadline per host call | `connecta.call`: its `timeoutMs`, else `calls.defaultTimeoutMs`, else `execute.hostCallTimeoutMs` (15 s); `result`, `skill` and `read`: `execute.hostCallTimeoutMs`. One deadline covers catalog resolution, admission, the connector call, and result processing |
|
|
946
|
+
| Discovery page | ≤ 100 tools, ≤ 256,000 serialized bytes |
|
|
947
|
+
| `describe` addresses | ≤ 100 |
|
|
948
|
+
| `describe` nearby suggestions | ≤ 3 canonical addresses per failed entry |
|
|
949
|
+
| Caller text echoed by `describe` recovery | ≤ 512 UTF-8 bytes per field, plus `…` |
|
|
950
|
+
| Result | 24,000 serialized characters by default, `execute.maxResultChars` (4,000–1,000,000) |
|
|
951
|
+
| Logs presented to the model | 4,000 characters |
|
|
919
952
|
|
|
920
953
|
For any tool whose output declares `page`, continue while `page.hasMore` is true.
|
|
921
954
|
When approaching the program's host-call limit, return `page.nextCursor` before
|
|
@@ -1278,50 +1311,49 @@ Titles name clauses; executor-independent clauses run in both arms.
|
|
|
1278
1311
|
`test/codemode-compat.test.ts` pins upstream shape compatibility, minified upstream
|
|
1279
1312
|
rejection, and branded adapter acceptance across module copies.
|
|
1280
1313
|
|
|
1281
|
-
| Clauses | Test
|
|
1282
|
-
| ---------------------- |
|
|
1283
|
-
| `P1`, `P5` | both guest-contract executors (TypeScript syntax, trailing terminators, wrapper recovery), `test/program-source.test.ts` (which semicolons and wrappers are recovered), `test/quickjs-executor.node.test.ts` (`normalizeCode`)
|
|
1284
|
-
| `P2`, `X5` | `test/guest-api-contract.test.ts` (Dynamic globals plus loader-only filesystem, HTTP, environment, egress, DNS, and local `data:` boundaries), `test/guest-api-contract-quickjs.node.test.ts` (exact absent globals and blocked imports), `test/
|
|
1285
|
-
| `P3`, `X9` | `test/guest-api-contract.test.ts`, `test/execute.test.ts`
|
|
1286
|
-
| `P4` | `test/guest-api-contract.test.ts` (no cross-run leakage), `test/execute.test.ts` (one catalog load per connector per execution)
|
|
1287
|
-
| `A1`, `A2` | `test/guest-api-contract.test.ts`, `test/execute.test.ts` (canonical addressing), `test/server.test.ts` (bounded live connector inventory)
|
|
1288
|
-
| `S1`, `S1a`, `S2` | `test/guest-api-contract.test.ts` (flat page, connector guides, schema keys, unfiltered browse), `test/execute.test.ts` (guide pagination/partial/no-match behavior and `$ref`/`allOf`), `test/meta-tools-search.test.ts` (mixed complete/partial ranking, stable pagination, the two safety classes), `test/typescript-signatures.test.ts` (the TypeScript format over provider and pathological schemas, search/describe parity, observed labeling)
|
|
1289
|
-
| `S3` | `test/guest-api-contract.test.ts` (typed uncaught bound), `test/execute.test.ts` (count limits, fan-out bound)
|
|
1290
|
-
| `S4` | both guest-contract executors (ordered mixed describe results with unknown-address, unknown-tool suggestion, and catalog-failure details), `test/meta-tools-search.test.ts` (top-level routing, no-suggestion, catalog-failure, and hostile-input bounds)
|
|
1291
|
-
| `S5`, `S6` | `test/guest-api-contract.test.ts`, `test/execute.test.ts` (`unwrapMcpResult`, fail-closed annotations, activity parity)
|
|
1292
|
-
| `S7` | `test/guest-api-contract.test.ts`, `test/execute.test.ts` (parallel calls and shared admission)
|
|
1293
|
-
| `S8`, `E1`, `X11` | both guest-contract executors (caught call, discovery, utility, removed-function, and forgery cases; typed promise rejections), `test/quickjs-executor.node.test.ts` (oversized messages, private transport, forged outcomes)
|
|
1294
|
-
| `S9` | `test/result-shapes.test.ts` (value exclusion, bounds, merging, LRU and time expiry, runtime isolation, read-only admission, declared precedence, definition invalidation, unwrapped MCP results, discovery provenance, copy isolation, failure isolation)
|
|
1295
|
-
| `S10` | `test/resource-read.test.ts` (qualified routing, whole-connector grants, personal credentials, redaction, admission, timeout, cancellation and downstream MCP reads), both guest-contract executors (successful resource reads and caught/uncaught typed failures)
|
|
1296
|
-
| `E2`, `E8` | `test/guest-api-contract.test.ts` (code → `retryable`, caught, parallel, and uncaught validation recovery, a conflict's bounded `current`), `test/meta-tools-call.test.ts` (direct, destructive, provider fallback), `test/validate.test.ts` (bounded payload-free findings), `test/errors.test.ts`
|
|
1297
|
-
| `E3`, `E4` | `test/guest-api-contract.test.ts`, `test/execute.test.ts` (`auth_required`, destructive reroute), `test/identity-write-journey.node.test.ts` (read-only refusals before validation or dispatch, actual QuickJS)
|
|
1298
|
-
| `E5` | `test/guest-api-contract.test.ts` (execution-failure channel, in-flight `cancelled`), `test/execute.test.ts` (admission), `test/executor-admission.test.ts`, `test/quickjs-executor.node.test.ts` (mid-run shutdown)
|
|
1299
|
-
| `E6`, `X8` | `test/guest-api-contract.test.ts` (unknown and inherited members, retained error identities), `test/quickjs-executor.node.test.ts`
|
|
1300
|
-
| `E7` | `test/guest-api-contract.test.ts` (refusals about a `503`-named connector), `test/errors.test.ts`
|
|
1301
|
-
| `R1`, `R2`, `R3`, `R4` | `test/guest-api-contract.test.ts` and `test/guest-api-contract-quickjs.node.test.ts` (small pass-through, shared return paging and unavailable fallback, no repeated writes, live authority), `test/program-result-cases.ts` (reconstruction, redaction, notice survives a 2,000-character spill)
|
|
1302
|
-
| `M6`, `M9` | verdicts; `R2`'s guard, `M1`'s strict typing, and `M2`'s collect-then-deliver are their enforcement
|
|
1303
|
-
| `R5` | `test/guest-api-contract.test.ts
|
|
1304
|
-
| `R6`–`R8` | `test/guest-api-contract.test.ts` (normal result keys), `test/execute.test.ts` (opt-in operation aggregates, failure paths, payload exclusion)
|
|
1305
|
-
| `Y1`, `Y2`, `Y3` | `test/guest-api-contract.test.ts` (one attempt per call, retryable flags by code)
|
|
1306
|
-
| `Y4` | `test/meta-tools-call.test.ts`, `test/call-admission.test.ts` (one attempt, retry hints, caller reissue)
|
|
1307
|
-
| `L1`, `L2` | `test/guest-api-contract.test.ts` (in-flight call fails `cancelled`), `test/execute.test.ts` (cancels outstanding host calls, discovery included, and refuses discovery after the run; a cancelled wedged executor, or one whose `acquire()` ignores the signal, returns promptly and releases its lease)
|
|
1308
|
-
| `L3`, `X1` | `test/guest-api-contract.test.ts` (short-deadline executors), `test/execute.test.ts` (the watchdog ends a never-settling executor, frees the default pool, spares a slow run, and falls back from an unusable value)
|
|
1309
|
-
| `L4`, `L8` | `test/guest-api-contract.test.ts`, `test/execute.test.ts` (shared discovery/call budgets and terminal catch-and-continue loops and queued-write cancellation on both executors)
|
|
1310
|
-
| `L5`, `L7`, `X2` | `test/quickjs-executor.node.test.ts` (CPU, heap), `test/execute.test.ts` and `test/executor-admission.test.ts` (bounded admission and queue), `test/executor-requests.test.ts` (queued handoffs and refusal shape across separate workerd requests), `test/request-context.node.test.ts` (queued and QuickJS host-call request context)
|
|
1311
|
-
| `L6`, `X10` | `test/guest-api-contract-quickjs.node.test.ts` and `test/guest-api-contract.test.ts` (whole oversized reads and one-write pageable handles), `test/sqlite-storage.node.test.ts` and `test/
|
|
1312
|
-
| `V1`–`V4` | `test/guest-api-contract.test.ts` (dispatched calls, every refusal class including an address no connector owns, the friction each derives, no event for the execution itself), `test/activity.test.ts` (the shared code → friction table, the identity clamp, the one-attempt floor), `test/browser/operator-ui.spec.ts` (identity changes), `test/sql-storage-contract.ts`, run by `test/sqlite-storage.node.test.ts` (historical activity rows still round-trip)
|
|
1313
|
-
| `V5`, `W9` | `test/program-writes.test.ts` (unawaited program drain, failed-program accounting), `test/identity-write-journey.node.test.ts` (committed ambiguity, reconciliation and physical writes), `test/invocation-pipeline.test.ts` (the gate after validation, an unrecorded refusal)
|
|
1314
|
-
| `W10`, `W12` | `test/identity-write-journey.node.test.ts` (real HTTP/MCP and QuickJS: write budget, read-only discovery and refusal, named guide, pool inheritance/reopening and connector policy), `test/program-writes.test.ts` (construction refusals and classification drift), `test/
|
|
1315
|
-
| `M1` | `test/guest-api-contract.test.ts` (invalid emits throw catchably, accept nothing), `test/execute-emit.test.ts` (rejected shapes, bounded native snapshots, paging before metadata traversal, and cyclic presentation refusal)
|
|
1316
|
-
| `M2`, `M3` | `test/guest-api-contract.test.ts` (delivery order, truncated return plus delivered blocks), `test/execute-emit.test.ts` (envelope, `structuredContent`, byte-for-byte no-emit path)
|
|
1317
|
-
| `M4` | `test/guest-api-contract.test.ts` (discard is visible), `test/execute-emit.test.ts` (structured and plain paths), `test/quickjs-executor.node.test.ts` (mid-run shutdown)
|
|
1318
|
-
| `M5`, `M7` | `test/execute-emit.test.ts` (both budgets fail the crossing block; host-call budget untouched)
|
|
1319
|
-
| `M8` | two arms passing one case table, `test/codemode-compat.test.ts`
|
|
1320
|
-
| `M10` | `test/execute-emit.test.ts` (aggregate present, numbers only, absent when nothing emitted)
|
|
1321
|
-
| `X4` | `test/guest-api-contract.test.ts` (string logs only), `test/quickjs-executor.node.test.ts` (logs before cancellation)
|
|
1322
|
-
| `X3`, `X6` | `test/quickjs-executor.node.test.ts` (cancels a running child, never-settling await), `test/execute.test.ts` (a wedged executor stops being awaited)
|
|
1323
|
-
| `X7` | `P3`'s tests; the Workers superset is deliberately unused
|
|
1324
|
-
|
|
1325
|
-
The surface itself is checked by `test/server.test.ts` (the exact six-tool list)
|
|
1326
|
-
`test/code-first-surface.test.ts` (construction, executor, removed tools, copy, and size),
|
|
1314
|
+
| Clauses | Test |
|
|
1315
|
+
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1316
|
+
| `P1`, `P5` | both guest-contract executors (TypeScript syntax, trailing terminators, wrapper recovery), `test/program-source.test.ts` (which semicolons and wrappers are recovered), `test/quickjs-executor.node.test.ts` (`normalizeCode`) |
|
|
1317
|
+
| `P2`, `X5` | `test/guest-api-contract.test.ts` (Dynamic globals plus loader-only filesystem, HTTP, environment, egress, DNS, and local `data:` boundaries), `test/guest-api-contract-quickjs.node.test.ts` (exact absent globals and blocked imports), `test/deployment-shapes.node.test.ts` (loader-only Worker construction) |
|
|
1318
|
+
| `P3`, `X9` | `test/guest-api-contract.test.ts`, `test/execute.test.ts` |
|
|
1319
|
+
| `P4` | `test/guest-api-contract.test.ts` (no cross-run leakage), `test/execute.test.ts` (one catalog load per connector per execution) |
|
|
1320
|
+
| `A1`, `A2` | `test/guest-api-contract.test.ts`, `test/execute.test.ts` (canonical addressing), `test/server.test.ts` (bounded live connector inventory) |
|
|
1321
|
+
| `S1`, `S1a`, `S2` | `test/guest-api-contract.test.ts` (flat page, connector guides, schema keys, unfiltered browse), `test/execute.test.ts` (guide pagination/partial/no-match behavior and `$ref`/`allOf`), `test/meta-tools-search.test.ts` (mixed complete/partial ranking, stable pagination, the two safety classes), `test/typescript-signatures.test.ts` (the TypeScript format over provider and pathological schemas, search/describe parity, observed labeling) |
|
|
1322
|
+
| `S3` | `test/guest-api-contract.test.ts` (typed uncaught bound), `test/execute.test.ts` (count limits, fan-out bound) |
|
|
1323
|
+
| `S4` | both guest-contract executors (ordered mixed describe results with unknown-address, unknown-tool suggestion, and catalog-failure details), `test/meta-tools-search.test.ts` (top-level routing, no-suggestion, catalog-failure, and hostile-input bounds) |
|
|
1324
|
+
| `S5`, `S6` | `test/guest-api-contract.test.ts`, `test/execute.test.ts` (`unwrapMcpResult`, fail-closed annotations, activity parity) |
|
|
1325
|
+
| `S7` | `test/guest-api-contract.test.ts`, `test/execute.test.ts` (parallel calls and shared admission) |
|
|
1326
|
+
| `S8`, `E1`, `X11` | both guest-contract executors (caught call, discovery, utility, removed-function, and forgery cases; typed promise rejections), `test/quickjs-executor.node.test.ts` (oversized messages, private transport, forged outcomes) |
|
|
1327
|
+
| `S9` | `test/result-shapes.test.ts` (value exclusion, bounds, merging, LRU and time expiry, runtime isolation, read-only admission, declared precedence, definition invalidation, unwrapped MCP results, discovery provenance, copy isolation, failure isolation) |
|
|
1328
|
+
| `S10` | `test/resource-read.test.ts` (qualified routing, whole-connector grants, personal credentials, redaction, admission, timeout, cancellation and downstream MCP reads), both guest-contract executors (successful resource reads and caught/uncaught typed failures) |
|
|
1329
|
+
| `E2`, `E8` | `test/guest-api-contract.test.ts` (code → `retryable`, caught, parallel, and uncaught validation recovery, a conflict's bounded `current`), `test/meta-tools-call.test.ts` (direct, destructive, provider fallback), `test/validate.test.ts` (bounded payload-free findings), `test/errors.test.ts` |
|
|
1330
|
+
| `E3`, `E4` | `test/guest-api-contract.test.ts`, `test/execute.test.ts` (`auth_required`, destructive reroute), `test/identity-write-journey.node.test.ts` (read-only refusals before validation or dispatch, actual QuickJS) |
|
|
1331
|
+
| `E5` | `test/guest-api-contract.test.ts` (execution-failure channel, in-flight `cancelled`), `test/execute.test.ts` (admission), `test/executor-admission.test.ts`, `test/quickjs-executor.node.test.ts` (mid-run shutdown) |
|
|
1332
|
+
| `E6`, `X8` | `test/guest-api-contract.test.ts` (unknown and inherited members, retained error identities), `test/quickjs-executor.node.test.ts` |
|
|
1333
|
+
| `E7` | `test/guest-api-contract.test.ts` (refusals about a `503`-named connector), `test/errors.test.ts` |
|
|
1334
|
+
| `R1`, `R2`, `R3`, `R4` | `test/guest-api-contract.test.ts` and `test/guest-api-contract-quickjs.node.test.ts` (small pass-through, shared return paging and unavailable fallback, no repeated writes, live authority), `test/program-result-cases.ts` (reconstruction, redaction, notice survives a 2,000-character spill) |
|
|
1335
|
+
| `M6`, `M9` | verdicts; `R2`'s guard, `M1`'s strict typing, and `M2`'s collect-then-deliver are their enforcement |
|
|
1336
|
+
| `R5` | `test/guest-api-contract.test.ts` |
|
|
1337
|
+
| `R6`–`R8` | `test/guest-api-contract.test.ts` (normal result keys), `test/execute.test.ts` (opt-in operation aggregates, failure paths, payload exclusion) |
|
|
1338
|
+
| `Y1`, `Y2`, `Y3` | `test/guest-api-contract.test.ts` (one attempt per call, retryable flags by code) |
|
|
1339
|
+
| `Y4` | `test/meta-tools-call.test.ts`, `test/call-admission.test.ts` (one attempt, retry hints, caller reissue) |
|
|
1340
|
+
| `L1`, `L2` | `test/guest-api-contract.test.ts` (in-flight call fails `cancelled`), `test/execute.test.ts` (cancels outstanding host calls, discovery included, and refuses discovery after the run; a cancelled wedged executor, or one whose `acquire()` ignores the signal, returns promptly and releases its lease) |
|
|
1341
|
+
| `L3`, `X1` | `test/guest-api-contract.test.ts` (short-deadline executors), `test/execute.test.ts` (the watchdog ends a never-settling executor, frees the default pool, spares a slow run, and falls back from an unusable value) |
|
|
1342
|
+
| `L4`, `L8` | `test/guest-api-contract.test.ts`, `test/execute.test.ts` (shared discovery/call budgets and terminal catch-and-continue loops and queued-write cancellation on both executors) |
|
|
1343
|
+
| `L5`, `L7`, `X2` | `test/quickjs-executor.node.test.ts` (CPU, heap), `test/execute.test.ts` and `test/executor-admission.test.ts` (bounded admission and queue), `test/executor-requests.test.ts` (queued handoffs and refusal shape across separate workerd requests), `test/request-context.node.test.ts` (queued and QuickJS host-call request context) |
|
|
1344
|
+
| `L6`, `X10` | `test/guest-api-contract-quickjs.node.test.ts` and `test/guest-api-contract.test.ts` (whole oversized reads and one-write pageable handles), `test/sqlite-storage.node.test.ts` and `test/storage-sql-d1.test.ts` (SQL stash and native D1 fault probes), `test/quickjs-executor.node.test.ts` (bridge and IPC bounds for arguments and result; the address in the over-bound message) |
|
|
1345
|
+
| `V1`–`V4` | `test/guest-api-contract.test.ts` (dispatched calls, every refusal class including an address no connector owns, the friction each derives, no event for the execution itself), `test/activity.test.ts` (the shared code → friction table, the identity clamp, the one-attempt floor), `test/browser/operator-ui.spec.ts` (identity changes), `test/sql-storage-contract.ts`, run by `test/sqlite-storage.node.test.ts` (historical activity rows still round-trip) |
|
|
1346
|
+
| `V5`, `W9` | `test/program-writes.test.ts` (unawaited program drain, failed-program accounting), `test/identity-write-journey.node.test.ts` (committed ambiguity, reconciliation and physical writes), `test/invocation-pipeline.test.ts` (the gate after validation, an unrecorded refusal) |
|
|
1347
|
+
| `W10`, `W12` | `test/identity-write-journey.node.test.ts` (real HTTP/MCP and QuickJS: write budget, read-only discovery and refusal, named guide, pool inheritance/reopening and connector policy), `test/program-writes.test.ts` (construction refusals and classification drift), `test/browser/operator-ui.spec.ts` (the badge) |
|
|
1348
|
+
| `M1` | `test/guest-api-contract.test.ts` (invalid emits throw catchably, accept nothing), `test/execute-emit.test.ts` (rejected shapes, bounded native snapshots, paging before metadata traversal, and cyclic presentation refusal) |
|
|
1349
|
+
| `M2`, `M3` | `test/guest-api-contract.test.ts` (delivery order, truncated return plus delivered blocks), `test/execute-emit.test.ts` (envelope, `structuredContent`, byte-for-byte no-emit path) |
|
|
1350
|
+
| `M4` | `test/guest-api-contract.test.ts` (discard is visible), `test/execute-emit.test.ts` (structured and plain paths), `test/quickjs-executor.node.test.ts` (mid-run shutdown) |
|
|
1351
|
+
| `M5`, `M7` | `test/execute-emit.test.ts` (both budgets fail the crossing block; host-call budget untouched) |
|
|
1352
|
+
| `M8` | two arms passing one case table, `test/codemode-compat.test.ts` |
|
|
1353
|
+
| `M10` | `test/execute-emit.test.ts` (aggregate present, numbers only, absent when nothing emitted) |
|
|
1354
|
+
| `X4` | `test/guest-api-contract.test.ts` (string logs only), `test/quickjs-executor.node.test.ts` (logs before cancellation) |
|
|
1355
|
+
| `X3`, `X6` | `test/quickjs-executor.node.test.ts` (cancels a running child, never-settling await), `test/execute.test.ts` (a wedged executor stops being awaited) |
|
|
1356
|
+
| `X7` | `P3`'s tests; the Workers superset is deliberately unused |
|
|
1357
|
+
|
|
1358
|
+
The surface itself is checked by `test/server.test.ts` (the exact six-tool list)
|
|
1327
1359
|
and `test/program-writes.test.ts` (deployment policy and classification construction refusals).
|
|
@@ -64,12 +64,9 @@ platform, proxy or adapter cap still wins. See
|
|
|
64
64
|
A Node host serving `connecta.fetch` without `listen()` has no owned sender:
|
|
65
65
|
every maintained-provider write, every reviewed POST read and every remote MCP
|
|
66
66
|
write is refused before sending. Downstream OAuth credential POSTs also require
|
|
67
|
-
that sender
|
|
68
|
-
credential POSTs used native fetch through 0.34.1. For example, an `assistant` using
|
|
67
|
+
that sender. For example, an `assistant` using
|
|
69
68
|
`vercel_api_read` to POST `/v1/registrar/domains/availability` needs that
|
|
70
|
-
transport even on a read-only endpoint.
|
|
71
|
-
entry refuses those requests before sending them. Workers use their native
|
|
72
|
-
fetch transport.
|
|
69
|
+
transport even on a read-only endpoint. Workers use their native fetch transport.
|
|
73
70
|
|
|
74
71
|
By default, Node's `listen()` handles SIGTERM and SIGINT: it stops accepting
|
|
75
72
|
connections, closes idle connections and accepted sockets without a first HTTP
|
|
@@ -81,9 +78,8 @@ keepalive before shutdown is unchanged. Its shutdown deadline defaults to ten se
|
|
|
81
78
|
(`shutdownTimeoutMs`). For example, retain the template's `listen(connecta, port)` when running it under
|
|
82
79
|
Docker Compose so `docker compose stop` uses this cleanup.
|
|
83
80
|
|
|
84
|
-
The owned Node sender connects directly by default.
|
|
85
|
-
|
|
86
|
-
proxy, set `proxy` explicitly on `listen`:
|
|
81
|
+
The owned Node sender connects directly by default. For HTTP(S) CONNECT proxy
|
|
82
|
+
egress, set `proxy` explicitly on `listen`:
|
|
87
83
|
|
|
88
84
|
```ts
|
|
89
85
|
listen(connecta, { port: 3000, proxy: "http://proxy.example.com:8080" });
|
|
@@ -108,9 +104,7 @@ replayed by the sender, including after HTTP 421, a reset or a 503. An uncertain
|
|
|
108
104
|
refresh requires authorization again; Connecta blocks the spent refresh
|
|
109
105
|
fingerprint rather than redeeming it twice. Once a refresh claim has been
|
|
110
106
|
submitted, that protection remains conservative even if proxy setup later fails.
|
|
111
|
-
Use a fresh authorization flow to reconcile.
|
|
112
|
-
fetch and needs its own host proxy policy. These credential POST requirements
|
|
113
|
-
change the native-fetch behavior of 0.34.1.
|
|
107
|
+
Use a fresh authorization flow to reconcile.
|
|
114
108
|
|
|
115
109
|
## Start on Workers
|
|
116
110
|
|
|
@@ -136,10 +130,8 @@ verified ingress behavior and the cases that still require verification.
|
|
|
136
130
|
Agents use `/agent/<pool>`, which connecta authenticates with the `cta_` token
|
|
137
131
|
alone and which ignores Access context entirely
|
|
138
132
|
([agent endpoints](./auth.md#agent-endpoints)). Behind Access, the edge must
|
|
139
|
-
let those requests through without an Access login or service token.
|
|
140
|
-
|
|
141
|
-
verified this shape on 2026-10-15. The Worker example's `alchemy.run.ts`
|
|
142
|
-
declares both applications:
|
|
133
|
+
let those requests through without an Access login or service token.
|
|
134
|
+
The Worker example's `alchemy.run.ts` declares both applications:
|
|
143
135
|
|
|
144
136
|
1. Keep the Worker-level application, whose destination is
|
|
145
137
|
`{ "type": "worker", "worker_id": "<the Worker script tag>" }`, exactly as
|
|
@@ -170,12 +162,9 @@ declares both applications:
|
|
|
170
162
|
3. Point each agent at `https://<host>/agent/<pool>` with
|
|
171
163
|
`Authorization: Bearer cta_…` and drop its `CF-Access-Client-Id` and
|
|
172
164
|
`CF-Access-Client-Secret` headers. The pool must list `"agent:<name>"`.
|
|
173
|
-
4. Verify after the change has settled.
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
responses, and in one round a 403 on a bypassed path after more than 30
|
|
177
|
-
seconds. Do not rely on a fixed wait: repeat these checks until they agree
|
|
178
|
-
for several consecutive rounds. Without credentials, `/agent/<pool>`
|
|
165
|
+
4. Verify after the change has settled. Do not rely on a fixed wait: repeat
|
|
166
|
+
these checks until they agree for several consecutive rounds. Without
|
|
167
|
+
credentials, `/agent/<pool>`
|
|
179
168
|
reaches connecta (its 401 carries `WWW-Authenticate: Bearer`, not Access's
|
|
180
169
|
403 page), while `/mcp` and `/` still get Access's refusal. Then run
|
|
181
170
|
`connecta doctor --pool <pool>` with the agent's token.
|
|
@@ -185,11 +174,8 @@ Connecta answers there only an issued token of an agent listed in the pool,
|
|
|
185
174
|
and gives every other spelling of the agent namespace a 404 before auth,
|
|
186
175
|
because Access matches `/agent/*` after resolving dot segments, folding case,
|
|
187
176
|
decoding unreserved escapes, and collapsing a leading `//`, while the Worker
|
|
188
|
-
sees the raw path.
|
|
189
|
-
|
|
190
|
-
never reads it at `/agent/*`), and Custom Domains, which use the same
|
|
191
|
-
documented hostname-and-path form but were not observed; only `workers.dev`
|
|
192
|
-
was probed. Pinning the Worker-level application's AUD on human routes is
|
|
177
|
+
sees the raw path. Connecta never reads `ctx.access` at `/agent/*`.
|
|
178
|
+
Pinning the Worker-level application's AUD on human routes is
|
|
193
179
|
recommended hardening that connecta does not yet do.
|
|
194
180
|
|
|
195
181
|
## Compose capabilities and access
|
|
@@ -314,22 +300,16 @@ Bump the exact package pin, read the [changelog](../CHANGELOG.md) for every
|
|
|
314
300
|
intervening release, and apply the relevant migration before startup. `init`
|
|
315
301
|
does not merge changes into an existing deployment.
|
|
316
302
|
|
|
303
|
+
Before upgrading past 0.37.1 with pre-0.29 state, follow
|
|
304
|
+
[Retired layout migrations](./migration-retired-layouts.md). Version 0.37.1 is
|
|
305
|
+
the last bridge for KV → D1, JSON → SQLite, and OAuth layout-2 conversions.
|
|
306
|
+
|
|
317
307
|
For an existing Node deployment, add the Node entry's pinned optional peer
|
|
318
308
|
before starting the upgraded package: `npm install --save-exact undici@6.29.1`.
|
|
319
309
|
The current Node template already declares this dependency.
|
|
320
310
|
|
|
321
|
-
For
|
|
322
|
-
|
|
323
|
-
no owned sender: every maintained-provider write, every reviewed POST read and
|
|
324
|
-
every remote MCP write is refused before sending, although each worked in 0.34.1.
|
|
325
|
-
Downstream OAuth token, registration and revocation POSTs also require that
|
|
326
|
-
sender. With `listen()`, every maintained-provider request, reads included,
|
|
327
|
-
remote MCP writes and those credential POSTs use the owned sender. Configure
|
|
328
|
-
`listen(..., { proxy })` explicitly for HTTP(S) CONNECT proxy egress; ambient
|
|
329
|
-
`NODE_USE_ENV_PROXY`, `HTTP_PROXY`, `HTTPS_PROXY` and host proxy dispatchers do
|
|
330
|
-
not configure it. Remote MCP reads and OAuth discovery GETs retain native fetch
|
|
331
|
-
and need their own host proxy policy. An uncertain refresh requires fresh
|
|
332
|
-
authorization rather than replaying the spent token. See [Start on Node](#start-on-node).
|
|
311
|
+
For Node upgrades, retain the template's `listen` entrypoint and apply the
|
|
312
|
+
[Node transport and proxy requirements](#start-on-node).
|
|
333
313
|
|
|
334
314
|
Authenticated MCP bodies now default to 4 MiB through
|
|
335
315
|
`admission.requests.maxBodyBytes`; Node's separate pre-auth buffer also defaults
|
|
@@ -354,8 +334,7 @@ and [Eve agents](./meta-tools.md#eve-agents).
|
|
|
354
334
|
- [Migration to 0.34](./migration-0.34.md) covers the Overview landing page, Endpoints at `/endpoints`, default browser titles, and Workspace discovery in owner-less agent pools. No storage migration or token rotation is needed from 0.33.
|
|
355
335
|
- [Migration to 0.33](./migration-0.33.md) maps every removed access option to `maintainers`, pool `members`, and `agents`, moves agents to `/agent/<pool>`, and covers pool owners, token revisions, operator contract v2 with its operator route changes, and the pre-auth listen fix.
|
|
356
336
|
- [Tokens issued before agents](./auth.md#agent-tokens-and-upgrading-from-earlier-tokens) stop admitting until each machine's token is bound once to a declared agent with `npm run adopt-token -- <token-id> <agent>` (Node) or `AccessTokenManager.adopt`, which keeps its secret. Human-bound tokens stay refused; issue those agents new tokens. Pool members name `"agent:<name>"` instead of matching token record ids.
|
|
357
|
-
- [
|
|
358
|
-
- [Worker storage from 0.28](../examples/worker/README.md#upgrading-from-028) copies KV into D1 with a one-shot migration.
|
|
337
|
+
- [Retired layout migrations](./migration-retired-layouts.md) requires completing Node JSON → SQLite, Workers KV → D1, and every OAuth layout-2 grant conversion on 0.37.1 before upgrading. The new package no longer supplies those migrations.
|
|
359
338
|
- [Worker deployments on Wrangler](../examples/worker/README.md#moving-a-wrangler-deployed-worker-to-alchemy) move to Alchemy once, adopting the Worker, D1 database, and Access applications so the script tag and Access AUD stay unchanged.
|
|
360
339
|
- [Notion, Vercel, and Cloudflare for 0.29](./provider-migration-0.29.md) records historical defaults and retained API tool names.
|
|
361
340
|
- [Executor wiring](./code-mode.md#deploy-time-capability) requires branded shipped executors or a self-managed custom executor.
|
|
@@ -90,6 +90,10 @@ value is validated at construction. Malformed policies, including `false`,
|
|
|
90
90
|
`null`, `0`, and `""`, throw before serving requests; they never disable
|
|
91
91
|
admission or select a default. Custom connector policies are validated when
|
|
92
92
|
the deployment constructs its registry.
|
|
93
|
+
A queued connector call whose wait reaches `queueTimeoutMs` is refused with a
|
|
94
|
+
concurrency `rate_limited` error, even if timer delivery is delayed. For example,
|
|
95
|
+
with `maxConcurrency: 1` and `queueTimeoutMs: 10`, releasing the occupied slot
|
|
96
|
+
after 40 ms refuses the expired waiter instead of dispatching it.
|
|
93
97
|
|
|
94
98
|
## Maintained integrations
|
|
95
99
|
|
|
@@ -215,26 +219,11 @@ failure also reports an unknown outcome with no retry or wait advice; a proven
|
|
|
215
219
|
unsent failure retains its own recovery advice. Connector `readOnly` remains
|
|
216
220
|
optional and composes with endpoint policy.
|
|
217
221
|
|
|
218
|
-
On Node,
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
refuses remote writes before dispatch. A connector with its own `fetch` hands
|
|
222
|
-
writes to that function instead, which owns their single attempt. Downstream OAuth token, registration and
|
|
223
|
-
revocation POSTs also require the owned sender. Read calls and OAuth discovery
|
|
224
|
-
GETs keep native fetch. Workers
|
|
225
|
-
use their native fetch with manual redirects; transport failures after
|
|
222
|
+
On Node, follow the [Node transport and proxy requirements](./deploying.md#start-on-node).
|
|
223
|
+
A connector with its own `fetch` hands writes to that function, which owns their
|
|
224
|
+
single attempt. Workers use native fetch with manual redirects; failures after
|
|
226
225
|
dispatch remain unknown and non-retryable.
|
|
227
226
|
|
|
228
|
-
The owned sender connects directly by default. For HTTP(S) CONNECT proxy egress,
|
|
229
|
-
configure `listen(connecta, { port: 3000, proxy: "http://proxy.example.com:8080" })`.
|
|
230
|
-
This controls maintained-provider requests, remote MCP writes and OAuth
|
|
231
|
-
credential POSTs; it ignores `NODE_USE_ENV_PROXY`, `HTTP_PROXY`, `HTTPS_PROXY`
|
|
232
|
-
and host proxy dispatchers. Remote MCP reads and OAuth discovery GETs retain
|
|
233
|
-
native fetch and need their own host proxy policy. An uncertain refresh requires
|
|
234
|
-
fresh authorization rather than replaying the spent token. See
|
|
235
|
-
[Node startup](./deploying.md#start-on-node) for the proxy URL, credentials and
|
|
236
|
-
TLS trust rules.
|
|
237
|
-
|
|
238
227
|
Remote catalogs evolve. Discovery, direct calls, and programs enforce the
|
|
239
228
|
current annotations and `ConnectaConfig.classification` overrides. A leftover
|
|
240
229
|
`classify` option throws at construction and names that map. Provider reviews,
|
|
@@ -342,7 +331,7 @@ check shared behavior. Provider-specific tests remain beside each provider.
|
|
|
342
331
|
|
|
343
332
|
Use [`@zackbart/connecta-eve`](https://github.com/zackbart/connecta/blob/main/packages/connecta-eve/README.md)
|
|
344
333
|
in the Eve app for an app-owned connection and endpoint instructions refreshed
|
|
345
|
-
once per turn. It requires Node 24 and Eve 0.
|
|
334
|
+
once per turn. It requires Node 24 and Eve 0.86.x, and installs separately from
|
|
346
335
|
Connecta. Follow its README for the two agent files, token environment variables,
|
|
347
336
|
optional write approval and Vercel OIDC token source. Configure the server's
|
|
348
337
|
[agent and pool membership](./auth.md#issue-rotate-or-revoke-an-agent-token)
|
|
@@ -221,6 +221,16 @@ act on is the flag: any cap sets `inputSchemaTruncated` or
|
|
|
221
221
|
`outputSchemaTruncated`, and that means repeat with `includeSchemas: "json"`, or
|
|
222
222
|
describe, when the exact constraints matter.
|
|
223
223
|
|
|
224
|
+
Repeated searches in one request reuse a private lexical index for the same
|
|
225
|
+
visible catalog and safety filter. Returned schemas and annotations are independent
|
|
226
|
+
copies: changing a result cannot change later discovery or tool classification.
|
|
227
|
+
In-process registry invalidation (including refresh and OAuth connect/disconnect/restart)
|
|
228
|
+
or built-in vault set/clear replaces the retained catalog and its index before the
|
|
229
|
+
next discovery read in that request, without storage reads on unchanged repeats.
|
|
230
|
+
Changes from another process/isolate or direct storage writes need not be observed
|
|
231
|
+
until the next request. Custom vault mutations must also invalidate the registry.
|
|
232
|
+
The index never crosses request or caller/pool boundaries.
|
|
233
|
+
|
|
224
234
|
### TypeScript signatures
|
|
225
235
|
|
|
226
236
|
`includeSchemas: "typescript"` replaces both schema fields with one
|
|
@@ -423,6 +433,13 @@ new entries. A later attempt deletes expired entries before reusing their
|
|
|
423
433
|
capacity; a failed deletion keeps the charge. These bounds cover all processes and Worker isolates sharing the store.
|
|
424
434
|
Compare-and-set reserves each charge in one storage ledger before any chunk
|
|
425
435
|
is written; chunk TTLs cannot exceed the charge deadline.
|
|
436
|
+
The whole stash, including reservation, stops waiting after 45 seconds, or sooner
|
|
437
|
+
when the call's remaining deadline or request cancellation ends result processing.
|
|
438
|
+
A completed call whose result processing is cut off returns the non-retryable
|
|
439
|
+
`result_processing_failed`: any write already happened and must not be repeated
|
|
440
|
+
to recover its result. Programs keep that write in `writes.succeeded`, even if
|
|
441
|
+
paging is cancelled. A full or unavailable stash that answers within the budget
|
|
442
|
+
still returns the ordinary truncated result and paging-unavailable hint.
|
|
426
443
|
|
|
427
444
|
Results belong to the authenticated subject whenever auth supplies a subject or
|
|
428
445
|
user id, independently of activity configuration, under the provider's namespace
|
|
@@ -511,8 +528,10 @@ The default cap sits under both lines with room to spare. Preview plus notice
|
|
|
511
528
|
stays under 25,000 bytes, which is under 50,000 characters for any text, because
|
|
512
529
|
a character is at least one UTF-8 byte, and under 25,000 tokens for any text,
|
|
513
530
|
because a token covers at least one byte. A `connecta.result` page is bounded by the same
|
|
514
|
-
inline byte cap, and 24,000 matches the program result boundary in
|
|
515
|
-
[code mode](./code-mode.md).
|
|
531
|
+
inline byte cap, and 24,000 matches the default program result boundary in
|
|
532
|
+
[code mode](./code-mode.md) (`execute.maxResultChars`). The `maxBytes` in
|
|
533
|
+
`nextAction` is sized so one page fits that boundary under worst-case JSON
|
|
534
|
+
escaping, capped by the call's own inline cap: 3,829 bytes by default. A deployment whose
|
|
516
535
|
clients take more can raise the cap, and one whose clients take less can lower
|
|
517
536
|
it, per connector if need be; a result between 24,000 and 50,000 bytes that
|
|
518
537
|
used to arrive whole now pages. A client that spills rather than rejects keeps
|
|
@@ -1292,7 +1311,7 @@ window, a native `tools/list` carries a 300-second private cache hint, against
|
|
|
1292
1311
|
an hour on meta endpoints. This hint does not guarantee that a host refreshes
|
|
1293
1312
|
its cached annotations; the stale-approval race is accepted on writable pools.
|
|
1294
1313
|
|
|
1295
|
-
**Listing.** `tools/list` is one page with no cursor (Eve 0.
|
|
1314
|
+
**Listing.** `tools/list` is one page with no cursor (Eve 0.86 reads only the
|
|
1296
1315
|
first page). A pool listing more than 1,000 tools fails `tools/list` with a
|
|
1297
1316
|
JSON-RPC error asking the operator to narrow the pool; nothing is silently
|
|
1298
1317
|
dropped. A connector whose catalog cannot load is left out of that listing
|
|
@@ -1363,8 +1382,6 @@ listing, and call translation live in
|
|
|
1363
1382
|
[search tests](https://github.com/zackbart/connecta/blob/main/test/meta-tools-search.test.ts),
|
|
1364
1383
|
[call tests](https://github.com/zackbart/connecta/blob/main/test/meta-tools-call.test.ts),
|
|
1365
1384
|
[skills tests](https://github.com/zackbart/connecta/blob/main/test/skills-extension.test.ts),
|
|
1366
|
-
[native surface tests](https://github.com/zackbart/connecta/blob/main/test/native-tools.test.ts)
|
|
1367
|
-
[surface tests](https://github.com/zackbart/connecta/blob/main/test/code-first-surface.test.ts),
|
|
1368
|
-
and [pool description tests](https://github.com/zackbart/connecta/blob/main/test/pool-description.test.ts)
|
|
1385
|
+
and [native surface tests](https://github.com/zackbart/connecta/blob/main/test/native-tools.test.ts)
|
|
1369
1386
|
check the published contract. Guest parity and clause evidence are in
|
|
1370
1387
|
[code-mode verification](./code-mode.md#verification).
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Migration to 0.33
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
general procedure; [the agent index](./README.md) routes other work.
|
|
3
|
+
Apply the [general upgrade procedure](./deploying.md#upgrade-an-existing-deployment)
|
|
4
|
+
when moving from 0.32 to 0.33.
|
|
6
5
|
|
|
7
6
|
0.33 makes pools the access model.
|
|
8
7
|
Every deployment with inbound auth changes its configuration. Each removed
|
|
@@ -338,8 +337,9 @@ pools: {
|
|
|
338
337
|
|
|
339
338
|
## Verify
|
|
340
339
|
|
|
341
|
-
1. Start the deployment; construction errors name each removed option's
|
|
342
|
-
replacement.
|
|
340
|
+
1. Start the deployment; 0.33 construction errors name each removed option's
|
|
341
|
+
replacement. Releases after 0.37.1 use generic unknown-option errors;
|
|
342
|
+
use this guide for replacements.
|
|
343
343
|
2. Sign in as a maintainer and confirm plain `/mcp` and the operator UI work.
|
|
344
344
|
3. Run `connecta doctor --pool <pool>` with each agent's token, and confirm
|
|
345
345
|
the same token at `/mcp` is refused.
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
# Migration to 0.34
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
general procedure; [the agent index](./README.md) routes other work. Upgrades
|
|
6
|
-
from earlier versions must also apply the intervening migrations.
|
|
3
|
+
Apply the [general upgrade procedure](./deploying.md#upgrade-an-existing-deployment)
|
|
4
|
+
when moving from 0.33 to 0.34, including intervening migrations for older versions.
|
|
7
5
|
|
|
8
6
|
No storage migration, token rotation or required configuration field is added.
|
|
9
7
|
Review the following changes before updating the package pin.
|