@zackbart/connecta 0.34.0 → 0.35.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.
Files changed (428) hide show
  1. package/CHANGELOG.md +393 -0
  2. package/README.md +62 -105
  3. package/SECURITY.md +3 -2
  4. package/bin/connecta.mjs +41 -16
  5. package/bin/version.mjs +1 -1
  6. package/dist/access-tokens.d.ts +2 -1
  7. package/dist/access-tokens.js +66 -30
  8. package/dist/activity.d.ts +1 -1
  9. package/dist/activity.js +2 -0
  10. package/dist/agent-config.d.ts +23 -0
  11. package/dist/agent-config.js +59 -0
  12. package/dist/agent-description.js +16 -0
  13. package/dist/agent-identity.js +4 -4
  14. package/dist/agent-observation.js +39 -0
  15. package/dist/auth/clerk-sdk/client.d.ts +2 -0
  16. package/dist/auth/clerk-sdk/generated.js +554 -563
  17. package/dist/auth/clerk-transport.js +70 -3
  18. package/dist/auth/clerk.d.ts +13 -0
  19. package/dist/auth/clerk.js +653 -246
  20. package/dist/auth/cloudflare-access.js +46 -42
  21. package/dist/auth/downstream-client-metadata.js +2 -2
  22. package/dist/auth/downstream-oauth.js +2051 -1160
  23. package/dist/auth/downstream-revocation.js +88 -88
  24. package/dist/auth/native-call.js +20 -0
  25. package/dist/auth/native.js +184 -0
  26. package/dist/auth/oauth-start-reset.js +11 -5
  27. package/dist/auth/oauth-token-response.js +121 -102
  28. package/dist/auth/oauth-v2-migration.js +97 -78
  29. package/dist/auth/renewable-grant.js +10 -0
  30. package/dist/auth/static-oauth.js +663 -271
  31. package/dist/auth/vercel-agent.js +266 -0
  32. package/dist/auth-admission.js +204 -0
  33. package/dist/auth-elicitation.js +350 -241
  34. package/dist/authorization-handoff.js +164 -90
  35. package/dist/call-admission-context.js +3 -10
  36. package/dist/call-admission.js +2 -0
  37. package/dist/call-classification.js +9 -0
  38. package/dist/call-recovery.js +32 -13
  39. package/dist/canonical-json.js +8 -0
  40. package/dist/catalog-cache.js +369 -213
  41. package/dist/catalog-service.js +659 -530
  42. package/dist/catalog.js +5 -1
  43. package/dist/concurrency.js +0 -25
  44. package/dist/config-defaults.d.ts +1 -0
  45. package/dist/config-defaults.js +1 -0
  46. package/dist/config-schema.d.ts +3 -1
  47. package/dist/config-schema.js +13 -3
  48. package/dist/config.d.ts +40 -6
  49. package/dist/config.js +40 -26
  50. package/dist/connector-caller.d.ts +4 -0
  51. package/dist/connector-caller.js +17 -4
  52. package/dist/connectors/api-connector.d.ts +15 -7
  53. package/dist/connectors/api-connector.js +147 -57
  54. package/dist/connectors/guarded-fetch.d.ts +51 -17
  55. package/dist/connectors/guarded-fetch.js +215 -121
  56. package/dist/connectors/negotiation-cache.js +20 -10
  57. package/dist/connectors/option-shapes.js +1 -1
  58. package/dist/connectors/remote-mcp.d.ts +12 -30
  59. package/dist/connectors/remote-mcp.js +960 -564
  60. package/dist/d1.js +10 -243
  61. package/dist/derived-context.js +5 -0
  62. package/dist/describe-config.d.ts +5 -1
  63. package/dist/describe-config.js +3 -0
  64. package/dist/downstream-input.js +347 -260
  65. package/dist/errors.d.ts +87 -6
  66. package/dist/errors.js +114 -4
  67. package/dist/execute.js +87 -50
  68. package/dist/executor-admission.js +3 -0
  69. package/dist/executors/quickjs.js +163 -112
  70. package/dist/guarded-transport.js +50 -0
  71. package/dist/guest-runtime.js +1 -1
  72. package/dist/http/client.js +439 -0
  73. package/dist/http/errors.js +558 -0
  74. package/dist/http/fields.js +49 -0
  75. package/dist/http/hatch-paging.js +318 -0
  76. package/dist/http/hatch.js +1279 -0
  77. package/dist/http/json-schema.js +267 -0
  78. package/dist/http/node-transport.js +241 -0
  79. package/dist/http/oauth.js +162 -0
  80. package/dist/http/paging.js +228 -0
  81. package/dist/http/provider.js +221 -0
  82. package/dist/http/safety.js +82 -0
  83. package/dist/http/services.js +79 -0
  84. package/dist/http/tools.js +383 -0
  85. package/dist/http/vendor-index.js +138 -0
  86. package/dist/http/vendor.js +448 -0
  87. package/dist/http/write-request.js +66 -0
  88. package/dist/http-policy.d.ts +11 -0
  89. package/dist/http-policy.js +45 -0
  90. package/dist/inbound-credential.js +1 -1
  91. package/dist/index.d.ts +2 -2
  92. package/dist/index.js +4 -0
  93. package/dist/invocation-auth.js +30 -19
  94. package/dist/invocation.js +221 -87
  95. package/dist/mcp-result.js +0 -4
  96. package/dist/membership.d.ts +4 -0
  97. package/dist/meta-output.js +1 -1
  98. package/dist/meta-tools.js +534 -408
  99. package/dist/native-recovery.js +52 -0
  100. package/dist/native-tools.js +382 -0
  101. package/dist/node.d.ts +4 -3
  102. package/dist/node.js +45 -8
  103. package/dist/oauth-handoff.js +177 -104
  104. package/dist/oauth-partition.js +6 -20
  105. package/dist/oauth-sealing.js +6 -7
  106. package/dist/operation-vocabulary.js +101 -0
  107. package/dist/operator-record.d.ts +2 -2
  108. package/dist/operator-record.js +17 -4
  109. package/dist/operator-ui/agents.d.ts +5 -4
  110. package/dist/operator-ui/agents.js +17 -7
  111. package/dist/operator-ui/config-summary.js +8 -4
  112. package/dist/operator-ui/connection-map.js +9 -6
  113. package/dist/operator-ui/contract.d.ts +7 -3
  114. package/dist/operator-ui/endpoints.js +5 -14
  115. package/dist/operator-ui/fix-prompts.d.ts +1 -1
  116. package/dist/operator-ui/fix-prompts.js +0 -8
  117. package/dist/operator-ui/generated.js +3 -3
  118. package/dist/operator-ui/health.js +52 -0
  119. package/dist/operator-ui/model.d.ts +2 -3
  120. package/dist/operator-ui/overview.js +11 -19
  121. package/dist/operator-ui/setup-commands.js +0 -4
  122. package/dist/operator-ui/view.d.ts +5 -29
  123. package/dist/operator-ui/view.js +3 -59
  124. package/dist/program-writes.js +47 -26
  125. package/dist/provider-call-facts.d.ts +115 -0
  126. package/dist/provider-call-facts.js +182 -0
  127. package/dist/provider-call.d.ts +112 -0
  128. package/dist/provider-call.js +271 -0
  129. package/dist/provider.d.ts +71 -32
  130. package/dist/provider.js +134 -40
  131. package/dist/providers/_shared/google/hatch.js +91 -0
  132. package/dist/providers/_shared/google/kit.js +537 -0
  133. package/dist/providers/_shared/google/result-size.js +15 -2
  134. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  135. package/dist/providers/_shared/google/service-account.js +8 -4
  136. package/dist/providers/_shared/google/workspace.d.ts +8 -209
  137. package/dist/providers/_shared/google/workspace.js +7 -426
  138. package/dist/providers/_shared/rest/compact-index.js +86 -0
  139. package/dist/providers/_shared/rest/dispatch.js +3 -23
  140. package/dist/providers/_shared/rest/kit.js +546 -0
  141. package/dist/providers/_shared/rest/operation-index.js +230 -14
  142. package/dist/providers/_shared/rest/response-media.js +11 -0
  143. package/dist/providers/_shared/rest/tools.js +101 -78
  144. package/dist/providers/_shared/rest/value-safety.js +353 -195
  145. package/dist/providers/_shared/sensitive-fields.js +27 -0
  146. package/dist/providers/breeze/api.js +584 -0
  147. package/dist/providers/breeze/index.d.ts +3 -3
  148. package/dist/providers/breeze/index.js +67 -1420
  149. package/dist/providers/breeze/openapi.generated.js +60 -0
  150. package/dist/providers/breeze/skill.generated.js +2 -6
  151. package/dist/providers/breeze/tools.js +696 -0
  152. package/dist/providers/ccb/api.js +496 -0
  153. package/dist/providers/ccb/index.d.ts +17 -37
  154. package/dist/providers/ccb/index.js +77 -1702
  155. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  156. package/dist/providers/ccb/lib/constants.js +74 -0
  157. package/dist/providers/ccb/lib/guide.js +9 -0
  158. package/dist/providers/ccb/lib/verdicts.js +387 -0
  159. package/dist/providers/ccb/openapi.generated.js +397 -0
  160. package/dist/providers/ccb/safety.js +295 -0
  161. package/dist/providers/ccb/skill.generated.js +2 -6
  162. package/dist/providers/ccb/tools.js +853 -0
  163. package/dist/providers/cloudflare/api.js +1066 -0
  164. package/dist/providers/cloudflare/index.d.ts +7 -22
  165. package/dist/providers/cloudflare/index.js +80 -194
  166. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  167. package/dist/providers/cloudflare/lib/config.js +2 -0
  168. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  169. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  170. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  171. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  172. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  173. package/dist/providers/cloudflare/openapi.generated.js +3299 -3208
  174. package/dist/providers/cloudflare/{value-safety.js → safety.js} +538 -18
  175. package/dist/providers/cloudflare/skill.generated.js +2 -10
  176. package/dist/providers/cloudflare/tools.js +360 -0
  177. package/dist/providers/docs/api.js +51 -0
  178. package/dist/providers/docs/index.d.ts +1 -12
  179. package/dist/providers/docs/index.js +53 -1165
  180. package/dist/providers/docs/lib/constants.d.ts +18 -0
  181. package/dist/providers/docs/lib/constants.js +18 -0
  182. package/dist/providers/docs/lib/discovery.js +26 -0
  183. package/dist/providers/docs/lib/requests.js +48 -0
  184. package/dist/providers/docs/lib/schemas.js +168 -0
  185. package/dist/providers/docs/openapi.generated.js +16 -0
  186. package/dist/providers/docs/safety.js +54 -0
  187. package/dist/providers/docs/skill.generated.js +2 -6
  188. package/dist/providers/docs/tools.js +802 -0
  189. package/dist/providers/drive/api.js +177 -0
  190. package/dist/providers/drive/index.d.ts +1 -12
  191. package/dist/providers/drive/index.js +38 -1448
  192. package/dist/providers/drive/lib/constants.d.ts +6 -0
  193. package/dist/providers/drive/lib/constants.js +6 -0
  194. package/dist/providers/drive/lib/contracts.js +532 -0
  195. package/dist/providers/drive/lib/hatch.js +197 -0
  196. package/dist/providers/drive/openapi.generated.js +77 -0
  197. package/dist/providers/drive/safety.js +90 -0
  198. package/dist/providers/drive/skill.generated.js +2 -6
  199. package/dist/providers/drive/tools.js +1290 -0
  200. package/dist/providers/forms/api.js +71 -0
  201. package/dist/providers/forms/index.d.ts +1 -12
  202. package/dist/providers/forms/index.js +49 -1145
  203. package/dist/providers/forms/lib/constants.d.ts +14 -0
  204. package/dist/providers/forms/lib/constants.js +19 -0
  205. package/dist/providers/forms/lib/hatch.js +72 -0
  206. package/dist/providers/forms/openapi.generated.js +23 -0
  207. package/dist/providers/forms/safety.js +34 -0
  208. package/dist/providers/forms/skill.generated.js +2 -8
  209. package/dist/providers/forms/tools.js +1024 -0
  210. package/dist/providers/github/api.js +150 -0
  211. package/dist/providers/github/index.d.ts +4 -5
  212. package/dist/providers/github/index.js +30 -87
  213. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  214. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  215. package/dist/providers/github/lib/discovery.js +132 -0
  216. package/dist/providers/github/lib/operations.js +58 -0
  217. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  218. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  219. package/dist/providers/github/openapi.generated.js +1216 -0
  220. package/dist/providers/github/safety.js +216 -0
  221. package/dist/providers/github/skill.generated.js +2 -5
  222. package/dist/providers/github/tools.js +506 -0
  223. package/dist/providers/gmail/api.js +114 -0
  224. package/dist/providers/gmail/index.d.ts +1 -12
  225. package/dist/providers/gmail/index.js +73 -1621
  226. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  227. package/dist/providers/gmail/lib/constants.js +16 -0
  228. package/dist/providers/gmail/lib/index.js +173 -0
  229. package/dist/providers/gmail/lib/schemas.js +176 -0
  230. package/dist/providers/gmail/lib/threading.js +120 -0
  231. package/dist/providers/gmail/openapi.generated.js +92 -0
  232. package/dist/providers/gmail/safety.js +21 -0
  233. package/dist/providers/gmail/skill.generated.js +2 -6
  234. package/dist/providers/gmail/tools.js +1435 -0
  235. package/dist/providers/overflow/api.js +1008 -0
  236. package/dist/providers/overflow/index.d.ts +3 -17
  237. package/dist/providers/overflow/index.js +60 -1488
  238. package/dist/providers/overflow/skill.generated.js +2 -5
  239. package/dist/providers/overflow/tools.js +873 -0
  240. package/dist/providers/planning-center/api.js +467 -0
  241. package/dist/providers/planning-center/index.d.ts +6 -35
  242. package/dist/providers/planning-center/index.js +69 -2445
  243. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  244. package/dist/providers/planning-center/lib/constants.js +83 -0
  245. package/dist/providers/planning-center/lib/discovery.js +40 -0
  246. package/dist/providers/planning-center/lib/guide.js +39 -0
  247. package/dist/providers/planning-center/lib/json-api.js +83 -0
  248. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  249. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  250. package/dist/providers/planning-center/safety.js +188 -0
  251. package/dist/providers/planning-center/skill.generated.js +2 -27
  252. package/dist/providers/planning-center/tools.js +1010 -0
  253. package/dist/providers/sheets/api.js +133 -0
  254. package/dist/providers/sheets/index.d.ts +4 -16
  255. package/dist/providers/sheets/index.js +61 -1172
  256. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  257. package/dist/providers/sheets/lib/constants.js +14 -0
  258. package/dist/providers/sheets/lib/hatch.js +163 -0
  259. package/dist/providers/sheets/lib/requests.js +105 -0
  260. package/dist/providers/sheets/lib/schemas.js +138 -0
  261. package/dist/providers/sheets/openapi.generated.js +30 -0
  262. package/dist/providers/sheets/safety.js +27 -0
  263. package/dist/providers/sheets/skill.generated.js +2 -7
  264. package/dist/providers/sheets/tools.js +734 -0
  265. package/dist/providers/slides/api.js +147 -0
  266. package/dist/providers/slides/index.d.ts +2 -10
  267. package/dist/providers/slides/index.js +48 -2555
  268. package/dist/providers/slides/lib/constants.d.ts +11 -0
  269. package/dist/providers/slides/lib/constants.js +11 -0
  270. package/dist/providers/slides/lib/requests.js +60 -0
  271. package/dist/providers/slides/lib/schemas.js +565 -0
  272. package/dist/providers/slides/openapi.generated.js +18 -0
  273. package/dist/providers/slides/skill.generated.js +2 -6
  274. package/dist/providers/slides/tools.js +1968 -0
  275. package/dist/providers/stripe/api.js +401 -0
  276. package/dist/providers/stripe/index.d.ts +7 -27
  277. package/dist/providers/stripe/index.js +75 -191
  278. package/dist/providers/stripe/lib/config.d.ts +4 -0
  279. package/dist/providers/stripe/lib/config.js +2 -0
  280. package/dist/providers/stripe/openapi.generated.js +4 -3
  281. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  282. package/dist/providers/stripe/skill.generated.js +2 -10
  283. package/dist/providers/stripe/tools.js +77 -0
  284. package/dist/providers/tithely/api.js +531 -0
  285. package/dist/providers/tithely/index.d.ts +19 -0
  286. package/dist/providers/tithely/index.js +86 -965
  287. package/dist/providers/tithely/skill.generated.js +2 -5
  288. package/dist/providers/tithely/tools.js +426 -0
  289. package/dist/providers/vercel/api.js +551 -0
  290. package/dist/providers/vercel/index.d.ts +11 -25
  291. package/dist/providers/vercel/index.js +67 -261
  292. package/dist/providers/vercel/lib/config.d.ts +2 -0
  293. package/dist/providers/vercel/lib/config.js +2 -0
  294. package/dist/providers/vercel/lib/index.js +117 -0
  295. package/dist/providers/vercel/lib/logs.js +100 -0
  296. package/dist/providers/vercel/lib/pin.js +270 -0
  297. package/dist/providers/vercel/openapi.generated.js +398 -376
  298. package/dist/providers/vercel/{value-safety.js → safety.js} +261 -42
  299. package/dist/providers/vercel/skill.generated.js +2 -7
  300. package/dist/providers/vercel/tools.js +642 -0
  301. package/dist/redaction-identity.js +47 -0
  302. package/dist/redaction-marker.js +125 -0
  303. package/dist/registry.d.ts +30 -28
  304. package/dist/registry.js +446 -413
  305. package/dist/routes/access-tokens.js +1 -1
  306. package/dist/routes/actor-labels.js +1 -1
  307. package/dist/routes/connect.js +1 -1
  308. package/dist/routes/dispatch.js +103 -0
  309. package/dist/routes/mcp.js +170 -79
  310. package/dist/routes/oauth.js +3 -1
  311. package/dist/routes/operator.js +2 -2
  312. package/dist/routes/shared.d.ts +5 -4
  313. package/dist/routes/shared.js +244 -177
  314. package/dist/routes/skills.js +10 -8
  315. package/dist/routes/ui-config.js +27 -3
  316. package/dist/routes/ui-data.js +29 -22
  317. package/dist/routes/ui.js +1 -1
  318. package/dist/runtime/call-admission.js +0 -26
  319. package/dist/runtime/call-entry.js +30 -0
  320. package/dist/runtime/call.js +556 -0
  321. package/dist/runtime/connector-scope.js +7 -0
  322. package/dist/runtime/credential-probe.js +34 -0
  323. package/dist/runtime/executor.js +40 -0
  324. package/dist/runtime/native-storage.js +63 -0
  325. package/dist/runtime/registry.js +27 -0
  326. package/dist/runtime/request-scope.js +72 -0
  327. package/dist/runtime/run.js +15 -7
  328. package/dist/runtime/shared-read.js +34 -5
  329. package/dist/runtime/storage.js +34 -21
  330. package/dist/sent-secrets.d.ts +194 -37
  331. package/dist/sent-secrets.js +1743 -340
  332. package/dist/server.js +5 -56
  333. package/dist/skills.js +330 -224
  334. package/dist/sqlite.js +15 -14
  335. package/dist/storage/d1-copy.js +255 -0
  336. package/dist/storage/d1-driver.js +15 -0
  337. package/dist/storage/keys.js +28 -0
  338. package/dist/storage/sql-driver.js +88 -0
  339. package/dist/storage/sql-native.js +544 -0
  340. package/dist/storage/sql-schema.d.ts +6 -0
  341. package/dist/storage/sql-schema.js +15 -0
  342. package/dist/storage/sql.d.ts +14 -20
  343. package/dist/storage/sql.js +29 -535
  344. package/dist/timeout.js +0 -26
  345. package/dist/tool-safety.js +20 -10
  346. package/dist/types.d.ts +11 -99
  347. package/dist/upward.js +3 -0
  348. package/dist/usage-guide.js +3 -1
  349. package/dist/validate.d.ts +4 -2
  350. package/dist/validate.js +86 -9
  351. package/dist/version.d.ts +1 -1
  352. package/dist/version.js +1 -1
  353. package/dist/worker.js +312 -292
  354. package/dist/workspace-subject.js +5 -1
  355. package/dist/write-outcome.js +454 -34
  356. package/documentation/README.md +27 -7
  357. package/documentation/architecture.md +2550 -186
  358. package/documentation/auth.md +821 -98
  359. package/documentation/code-mode.md +56 -21
  360. package/documentation/deploying.md +164 -20
  361. package/documentation/hosted-mcp-migration.md +460 -0
  362. package/documentation/integrating.md +144 -105
  363. package/documentation/meta-tools.md +411 -34
  364. package/documentation/operating.md +28 -4
  365. package/documentation/operator-tests.md +11 -2
  366. package/documentation/operator-ui.md +103 -33
  367. package/documentation/provider-auth-migration.md +38 -63
  368. package/documentation/provider-migration-0.29.md +10 -5
  369. package/documentation/provider-migration-0.35.md +975 -0
  370. package/documentation/providers.md +965 -0
  371. package/examples/worker/AGENTS.md +23 -9
  372. package/examples/worker/README.md +254 -135
  373. package/examples/worker/alchemy.run.ts +116 -0
  374. package/examples/worker/gitignore +10 -0
  375. package/examples/worker/src/connecta.config.ts +23 -21
  376. package/examples/worker/wrangler.jsonc +14 -5
  377. package/guides/connecting-agents.md +157 -0
  378. package/guides/how-it-works.md +156 -0
  379. package/guides/safety-and-trust.md +153 -0
  380. package/package.json +27 -42
  381. package/templates/node/.env.example +3 -0
  382. package/templates/node/README.md +22 -2
  383. package/templates/node/docker-compose.yml +1 -0
  384. package/templates/node/package.json +3 -2
  385. package/templates/node/src/connecta.config.ts +8 -0
  386. package/dist/catalog-drift.d.ts +0 -134
  387. package/dist/catalog-drift.js +0 -493
  388. package/dist/providers/_shared/request-token.js +0 -83
  389. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  390. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  391. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  392. package/dist/providers/basecamp/index.d.ts +0 -43
  393. package/dist/providers/basecamp/index.js +0 -997
  394. package/dist/providers/basecamp/skill.generated.js +0 -9
  395. package/dist/providers/cloudflare/rest.d.ts +0 -37
  396. package/dist/providers/cloudflare/rest.js +0 -1078
  397. package/dist/providers/github/hosted.js +0 -218
  398. package/dist/providers/github/rest.js +0 -321
  399. package/dist/providers/infisical/index.d.ts +0 -7
  400. package/dist/providers/infisical/index.js +0 -713
  401. package/dist/providers/infisical/skill.generated.js +0 -8
  402. package/dist/providers/linear/index.d.ts +0 -55
  403. package/dist/providers/linear/index.js +0 -352
  404. package/dist/providers/linear/skill.generated.js +0 -8
  405. package/dist/providers/mixpanel/index.d.ts +0 -57
  406. package/dist/providers/mixpanel/index.js +0 -468
  407. package/dist/providers/mixpanel/operations.js +0 -20
  408. package/dist/providers/mixpanel/rest.js +0 -603
  409. package/dist/providers/mixpanel/skill.generated.js +0 -10
  410. package/dist/providers/mixpanel/value-safety.js +0 -16
  411. package/dist/providers/notion/index.d.ts +0 -65
  412. package/dist/providers/notion/index.js +0 -368
  413. package/dist/providers/notion/openapi.generated.js +0 -75
  414. package/dist/providers/notion/rest.d.ts +0 -24
  415. package/dist/providers/notion/rest.js +0 -1226
  416. package/dist/providers/notion/skill.generated.js +0 -11
  417. package/dist/providers/notion/value-safety.js +0 -56
  418. package/dist/providers/revenuecat/index.d.ts +0 -49
  419. package/dist/providers/revenuecat/index.js +0 -557
  420. package/dist/providers/revenuecat/skill.generated.js +0 -11
  421. package/dist/providers/stripe/rest.d.ts +0 -14
  422. package/dist/providers/stripe/rest.js +0 -402
  423. package/dist/providers/vercel/rest.d.ts +0 -20
  424. package/dist/providers/vercel/rest.js +0 -1020
  425. package/dist/providers/wispr-flow/index.d.ts +0 -14
  426. package/dist/providers/wispr-flow/index.js +0 -117
  427. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  428. /package/dist/providers/github/{key.js → lib/key.js} +0 -0
@@ -33,10 +33,10 @@ new behavior.
33
33
 
34
34
  ## Deploy-time capability
35
35
 
36
- The `executor` passed to `createConnecta()` is required. `tools/list` is exactly
37
- six — `execute_code`, `search_tools`, `call_tool`, `call_destructive_tool`,
38
- `authorize_connector` and `skills`. Construction fails when the
39
- executor is missing, and the removed `surface` option is rejected rather than
36
+ The `executor` passed to `createConnecta()` is required. The
37
+ [six-tool surface](./meta-tools.md#the-six-tools) is defined in the meta-tool
38
+ reference. Construction fails when the
39
+ executor is missing, and the removed deployment-level `surface` option is rejected rather than
40
40
  ignored ([#273](https://github.com/zackbart/connecta/issues/273)), as are the
41
41
  pause-only `execute.resumableWrites` and `execute.pausedRunTtlSeconds`
42
42
  ([#672](https://github.com/zackbart/connecta/issues/672)).
@@ -70,9 +70,7 @@ through `admission`. Lease release disposes RPC and loader handles independently
70
70
  of guest settlement. `bindings`, `modules`, or `globalOutbound` violate `P2`.
71
71
  The [Worker example](../examples/worker/README.md#code-mode) has the full setup.
72
72
 
73
- Replace `import { DynamicWorkerExecutor } from "@cloudflare/codemode";` with
74
- `import { workerExecutor } from "@zackbart/connecta/worker";` and use the wiring above.
75
- Keep the peer. Unbranded executors throw, including bundled upstream copies.
73
+ Keep the Worker's optional peer. Unbranded executors throw, including bundled upstream copies.
76
74
  Shipped executors carry a non-enumerable `Symbol.for("connecta.executor")` version/lifecycle brand.
77
75
  Custom sandboxes import `customExecutor` from `@zackbart/connecta`, then configure
78
76
  `executor: customExecutor(myExecutor, { lifecycle: "self-managed" })`. They own guest termination
@@ -283,7 +281,7 @@ signature is byte-identical to the one `search_tools` returns.
283
281
  integration is ambiguous. `safety: "readOnly"` selects stored read verdicts;
284
282
  `"approvalRequired"` selects stored write verdicts; omitted or `"all"` selects
285
283
  both. Search and describe rows carry `classification`. These filters grant no
286
- authority and change no call admission decision. On a read-only endpoint,
284
+ authority and change no call admission decision. On a read-only endpoint or connector,
287
285
  search and describe omit write tools (`W12`): a write is absent from every
288
286
  filter, and describing one is `unknown_tool`. `connecta.skill` guides are not
289
287
  filtered and may name such a write; calling it is still refused.
@@ -569,12 +567,12 @@ direct calls; and `input_required_invalid`, `input_required_limit`,
569
567
  | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
570
568
  | `unknown_address` | no visible connector owns the tool address or grants the resource reader | false |
571
569
  | `unknown_tool` | the connector has no such tool | false |
572
- | `read_only_endpoint` | a program on a read-only endpoint attempted a write (`E4`) | false |
570
+ | `read_only_endpoint` | a program on a read-only endpoint or connector attempted a write (`E4`) | false |
573
571
  | `auth_required` | the credential is missing, expired, or rejected | false |
574
572
  | `invalid_args` | arguments or discovery bounds were rejected | false |
575
573
  | `not_found` | the downstream answered and the resource is not there — the one code that says skip this id rather than stop, raised only where the provider tells absence from a permission gap | false |
576
574
  | `conflict` | the write named a base version someone else already moved past; nothing changed. `details.current` says where things stand (at most 20 whole-number entries) — re-read, reapply, retry with that base | false |
577
- | `input_required_unsupported` | a downstream asked for input; use `nextAction` for the equivalent direct call | false |
575
+ | `input_required_unsupported` | a downstream asked for input; a read gets `nextAction` for the equivalent direct call, a write is an unknown outcome (`writeOutcome: "unknown"`) to reconcile before any fresh call | false |
578
576
  | `rate_limited` | the downstream reported a rate limit | true |
579
577
  | `unavailable` | the downstream is down or unreachable; optional sanitized `details.host` and `details.code` describe the transport failure without paths, queries, credentials, or provider prose | true |
580
578
  | `timeout` | a call or sandbox deadline expired; details name operation, stage, elapsedMs, and deadlineMs | per operation |
@@ -594,7 +592,7 @@ direct calls; and `input_required_invalid`, `input_required_limit`,
594
592
  sentence. A program cannot recover credentials — only an operator can — so stop
595
593
  and let the failure reach the model.
596
594
 
597
- **E4.** A tool classified as a write never runs on a read-only endpoint
595
+ **E4.** A tool classified as a write never runs on a read-only endpoint or connector
598
596
  (`W12`). A program's call is refused with `read_only_endpoint` before
599
597
  validation and before anything is sent. The refusal carries no `nextAction` and
600
598
  echoes no arguments: no route on that endpoint writes, so the program reports
@@ -619,7 +617,7 @@ when empty. An empty string reports `program_error` with
619
617
  program-authored throw is `program_error`. `details.name` is a bounded engine
620
618
  error name; `details.line` is the source line when the runtime supplies one,
621
619
  otherwise null. Fixed hints repair imports/require/filesystem access, shadowed
622
- `connecta`, and invented globals such as `callTool` and `mixpanel`.
620
+ `connecta`, and invented globals such as `callTool`.
623
621
 
624
622
  An unchanged uncaught host error retains its classification through Error
625
623
  identity. A new error containing its message is a new program error. Copied
@@ -702,7 +700,7 @@ errors retain their contributing connectors as well.
702
700
  Search counts, ranking, and term analysis retain every searched connector,
703
701
  including matches outside the returned page or beyond the requested offset.
704
702
  Each page rechecks current auth,
705
- grants, pool membership, and the endpoint's `readOnly`. Reading a stash inside a program carries
703
+ grants, pool membership, and endpoint OR connector `readOnly`. Reading a stash inside a program carries
706
704
  its dependencies forward to any new return stash. The page cap is the smallest
707
705
  of the deployment cap and contributing connectors' effective `maxResultBytes`.
708
706
  Read-only endpoints cannot page write results. A UUID is a handle, never a grant.
@@ -877,7 +875,12 @@ Programs and direct calls use the same invocation deadline and stages. A call's
877
875
  and request ceilings still bound the whole run. Timeout details are agent-facing;
878
876
  operator records retain only checked classifications and numeric facts.
879
877
  A dispatched write timeout becomes `write_outcome_unknown` and retains its
880
- deadline details even when the program catches the failure. The final program
878
+ deadline details even when the program catches the failure. A completed
879
+ maintained-provider call that reports a timeout keeps `timeout` when its complete
880
+ request ledger records an auxiliary resource read and proves that no call-owned
881
+ request or kit auxiliary falsely declared as a read departed, unless an explicit `writeOutcome: "unknown"` overrides that
882
+ proof. Custom `api()` and `remoteMcp()` connectors, invocation deadlines and
883
+ cancellation without a complete answer retain conservative write outcomes. The final program
881
884
  error includes the first timeout in `details`; multiple write timeouts also
882
885
  appear in `timeouts`, bounded to ten entries.
883
886
 
@@ -908,6 +911,13 @@ because connecta enforces them above the sandbox:
908
911
  | Result | 24,000 serialized characters |
909
912
  | Logs presented to the model | 4,000 characters |
910
913
 
914
+ For any tool whose output declares `page`, continue while `page.hasMore` is true.
915
+ When approaching the program's host-call limit, return `page.nextCursor` before
916
+ the call that would exceed it and continue in the next program with the same
917
+ arguments and that cursor; don't restart.
918
+ For example, return `{ nextCursor: result.page.nextCursor }` after reducing the
919
+ current page, then pass that cursor to the tool in the next program.
920
+
911
921
  Every `call`, `read`, `search`, `describe`, `result`, and `skill` spends one host
912
922
  call on entry, before resolution, validation, or dispatch; automatic transfer
913
923
  pages of a paged result do not. Catching a local refusal refunds nothing.
@@ -1023,10 +1033,21 @@ sent and records nothing: it was never an attempt (`W9`).
1023
1033
 
1024
1034
  ## Writes
1025
1035
 
1036
+ Kit write tools refuse whole `[redacted]` string values (including decoded
1037
+ spellings) and withheld links in argument keys/values with `invalid_args`
1038
+ before the program runs. Longer prose may mention the marker: for example,
1039
+ `{ body: "the log says [redacted]" }` is accepted. Standard hatches and typed
1040
+ kit requests refuse any marker containment in paths and queries, including on
1041
+ reads. Obtain the original value/link or omit the field when a whole value is
1042
+ withheld. Admission checks agent arguments rather than bodies later composed
1043
+ from internal reads. Legacy non-kit and remote MCP tools keep their own rules.
1044
+
1026
1045
  Whether an endpoint writes belongs to deployment code. Every deployment sets
1027
1046
  `readOnly` for `/mcp` explicitly; construction fails without it. Each named pool inherits
1028
1047
  the deployment's `readOnly` unless it sets its own, in either direction. The
1029
- client owns approval; Connecta answers one question per endpoint: can it write.
1048
+ client owns approval. Every connector also accepts optional `readOnly?: boolean`
1049
+ (default `false`), enforced on every endpoint. Effective read-only is endpoint OR
1050
+ connector; setting connector `false` cannot reopen a read-only endpoint.
1030
1051
 
1031
1052
  ```ts
1032
1053
  createConnecta({
@@ -1053,13 +1074,21 @@ all calls this deployment can make through it.
1053
1074
 
1054
1075
  | Precedence | Evidence | Result |
1055
1076
  | ---------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
1056
- | 1 | Exact deployment `classification[connectorId][toolName]` | `read` or `write`, even over a stale provider review |
1077
+ | 1 | Exact deployment `classification[connectorId][toolName]` | `read`, `write`, or `hidden`, even over a stale provider review |
1057
1078
  | 2 | `Connector.classification` provider review | Reviewed writes remain writes; a stale schema digest makes a read a write; an explicit downstream contradiction also invalidates a reviewed read |
1058
1079
  | 3 | Downstream annotations | Read only when `readOnlyHint === true && destructiveHint !== true`; otherwise write |
1059
1080
 
1060
1081
  Unknown connector override keys fail construction. Unknown static tool keys
1061
- fail construction; unknown remote tool keys fail publication of the whole
1062
- catalog. Overrides are exact tool names, including names containing dots.
1082
+ fail construction. An absent runtime-discovered tool leaves its override
1083
+ dormant and emits an operator warning once per catalog change; the override applies if the name returns.
1084
+ Hidden tools are absent from search and describe and refuse every call, including
1085
+ a guessed name. `"write"` selects the host approval path. MCP recovery sends a
1086
+ tool only once when either its effective or source class is write, even when an
1087
+ override changes write to read. The source class is the verified provider review
1088
+ where present during migration, otherwise the server annotations. It also governs
1089
+ authorization recovery, program re-runs and ambiguous failure outcomes: after
1090
+ dispatch, an unknown outcome has no retry or wait advice, including on timeout or
1091
+ cancellation. Overrides are exact tool names, including names containing dots.
1063
1092
  They are never inferred from descriptions or arguments.
1064
1093
 
1065
1094
  **W9.** Programs on a writable endpoint may write. A dispatched write is awaited even
@@ -1069,8 +1098,11 @@ write makes the run fail `write_outcome_unknown` with
1069
1098
  `writes: { succeeded, failed, unknown }`, regardless of its return value.
1070
1099
  A failed program that already wrote carries those counts on its error. No
1071
1100
  write is automatically retried, including an ambiguous timeout. A downstream
1072
- refusal or a tool's `isError` can establish failure; a timeout or an unanswered
1073
- transport failure leaves the outcome unknown.
1101
+ refusal can establish failure only when it covers the whole call: a request
1102
+ connecta never sent, or an HTTP 4xx refusal (not 408) of the only request the
1103
+ call dispatched. A write's `isError`, a timeout, an unanswered transport
1104
+ failure, and a custom connector that composed several calls leave the outcome
1105
+ unknown.
1074
1106
 
1075
1107
  **W10.** `execute.maxWrites`, default 10, bounds a program's writes in
1076
1108
  addition to the host-call budget. It is checked after argument validation and
@@ -1094,7 +1126,10 @@ omit write tools from `search_tools`, `connecta.search`, and
1094
1126
  `connecta.describe`, and refuse every write call through `call_tool`,
1095
1127
  `call_destructive_tool`, and programs with `read_only_endpoint` before
1096
1128
  validation or dispatch. Guides and skills are documentation and may still name
1097
- those tools. `tools/list` is the same six tools on both. Approval belongs to the client.
1129
+ those tools. Meta endpoints list the same six tools in both modes.
1130
+ [Native pools](./meta-tools.md#native-tool-surface) list individual downstream
1131
+ tools and omit writes when read-only. They retain `execute_code` by default;
1132
+ `executeCode: false` replaces it with `read_result`. Approval belongs to the client.
1098
1133
  `readOnly` grants no tool or connector access and cannot be set by guest code,
1099
1134
  request arguments, or a downstream catalog. `execute.approval`,
1100
1135
  `Connector.approval`, per-tool approval exemptions, and pool `trust` are
@@ -3,7 +3,8 @@
3
3
  Use this guide when creating or maintaining a deployment. For changes to the
4
4
  Connecta package itself, follow [repository policy](https://github.com/zackbart/connecta/blob/main/AGENTS.md).
5
5
  For work through an already connected endpoint, use [Operating an endpoint](./operating.md).
6
- [All agent routes](./README.md) are in the index.
6
+ [All agent routes](./README.md) are in the index. For a cursor signing-key error,
7
+ follow [cursor-key recovery](#recover-a-cursor-signing-key).
7
8
 
8
9
  ## Choose a deployment
9
10
 
@@ -13,7 +14,8 @@ For work through an already connected endpoint, use [Operating an endpoint](./op
13
14
  | Docker | [Container setup in the same Node template](../templates/node/README.md#run-it-in-docker) | Same source and config, persistent named volume |
14
15
  | Cloudflare Workers | [Worker example](../examples/worker/README.md#deploy) | Workers Paid plan, Worker Loader binding, one D1 database, Cloudflare Access |
15
16
 
16
- These are the two deployment shapes. Docker packages the Node project.
17
+ These are the two deployment shapes. Docker packages the Node project, and
18
+ Alchemy deploys the Worker.
17
19
  Templates and their configuration files own the full runnable steps and
18
20
  environment-variable names; follow them rather than rebuilding their setup
19
21
  from the contract reference.
@@ -50,24 +52,84 @@ Follow the [template README](../templates/node/README.md) for storage paths,
50
52
  backups, Docker provisioning, secrets, and optional modules. Run the deployment's
51
53
  `npm run typecheck` after configuration changes.
52
54
 
55
+ Retain the Node template's `undici` dependency and serve with `listen` from
56
+ `@zackbart/connecta/node`. `listen()` installs the owned sender for every
57
+ maintained-provider request, reads included, remote MCP writes, and downstream
58
+ OAuth token exchange/refresh, dynamic registration and revocation POSTs.
59
+ Its separate pre-auth request buffer defaults to 4 MiB, matching core's
60
+ authenticated `admission.requests.maxBodyBytes` default. To accept larger MCP
61
+ bodies, configure both core and `listen(..., { maxBodyBytes })`; a smaller
62
+ platform, proxy or adapter cap still wins. See
63
+ [request body limits](./architecture.md#admission-in-two-places).
64
+ A Node host serving `connecta.fetch` without `listen()` has no owned sender:
65
+ every maintained-provider write, every reviewed POST read and every remote MCP
66
+ write is refused before sending. Downstream OAuth credential POSTs also require
67
+ that sender; discovery GETs retain native fetch. Resource writes worked in 0.34.1;
68
+ credential POSTs used native fetch through 0.34.1. For example, an `assistant` using
69
+ `vercel_api_read` to POST `/v1/registrar/domains/availability` needs that
70
+ transport even on a read-only endpoint. A Node deployment using only the root
71
+ entry refuses those requests before sending them. Workers use their native
72
+ fetch transport.
73
+
74
+ By default, Node's `listen()` handles SIGTERM and SIGINT: it stops accepting
75
+ connections, closes idle connections and accepted sockets without a first HTTP
76
+ request, closes request and code admission, reaps sandbox children, and drains
77
+ active responses and deferred work. A connection serving an active response
78
+ closes as soon as all its admitted responses finish, including SSE, without
79
+ waiting for the normal keepalive timeout or for the client to close. Normal
80
+ keepalive before shutdown is unchanged. Its shutdown deadline defaults to ten seconds
81
+ (`shutdownTimeoutMs`). For example, retain the template's `listen(connecta, port)` when running it under
82
+ Docker Compose so `docker compose stop` uses this cleanup.
83
+
84
+ The owned Node sender connects directly by default. To send maintained-provider
85
+ requests (including reads), remote MCP writes and OAuth credential POSTs through an HTTP(S) CONNECT
86
+ proxy, set `proxy` explicitly on `listen`:
87
+
88
+ ```ts
89
+ listen(connecta, { port: 3000, proxy: "http://proxy.example.com:8080" });
90
+ ```
91
+
92
+ The URL must have an HTTP or HTTPS scheme and no path, query or fragment.
93
+ Optional URL username/password credentials authenticate CONNECT only; they are
94
+ never forwarded to the destination. Load credential-bearing URLs from the
95
+ host's secret configuration. The sender validates the option before listening,
96
+ uses an owned proxy dispatcher for each send, and closes it when the response
97
+ ends or is canceled. TLS certificates for both proxy and destination use Node's
98
+ normal trust configuration; TLS interception requires operator-configured trust.
99
+
100
+ The sender ignores `NODE_USE_ENV_PROXY`, `HTTP_PROXY`, `HTTPS_PROXY` and global
101
+ dispatchers. Remote MCP reads retain native fetch and its proxy settings; the
102
+ explicit `proxy` option controls only owned sends. Set the host's native-fetch
103
+ proxy policy too if the remote server requires proxy egress for discovery and
104
+ reads. CONNECT failure before destination dispatch is a known unsent failure;
105
+ a connection failure after a write dispatch is unknown and non-retryable.
106
+ Neither case automatically repeats the write. A credential POST is never
107
+ replayed by the sender, including after HTTP 421, a reset or a 503. An uncertain
108
+ refresh requires authorization again; Connecta blocks the spent refresh
109
+ fingerprint rather than redeeming it twice. Once a refresh claim has been
110
+ submitted, that protection remains conservative even if proxy setup later fails.
111
+ Use a fresh authorization flow to reconcile. OAuth discovery remains on native
112
+ fetch and needs its own host proxy policy. These credential POST requirements
113
+ change the native-fetch behavior of 0.34.1.
114
+
53
115
  ## Start on Workers
54
116
 
55
- Follow the [Worker example](../examples/worker/README.md#deploy) to create D1,
56
- set secrets, configure `PUBLIC_URL` and `LOADER`, and deploy with Wrangler.
57
- When copying it into a separate repository, follow
58
- [the separate-project installation](../examples/worker/README.md#copied-into-its-own-repository)
59
- and pin Connecta's exact version. The optional `@cloudflare/codemode` peer
60
- must be installed for the Worker executor.
61
-
62
- Attach Cloudflare Access to the Worker destination. Interactive MCP clients
63
- need Managed OAuth, Dynamic Client Registration, and the documented redirect
64
- allowlist. Machines are declared agents: they use `/agent/<pool>` with the
65
- agent's `cta_` bearer as their only credential, once the
66
- [agent bypass application](#agent-endpoints-behind-cloudflare-access) exists;
67
- Access service identity alone is refused. Keep
68
- `enable_request_signal`, construct Connecta once per isolate, and pass `ctx`
69
- through to `fetch`. The example owns those details and
70
- [the machine-token procedure](../examples/worker/README.md#machine-tokens).
117
+ Use the [Worker example](../examples/worker/README.md) as the canonical runnable
118
+ setup and upgrade guide. Alchemy deploys that example's stack; it owns the
119
+ Worker, D1 database, Worker Loader, secrets, and Access applications.
120
+
121
+ | Task | Canonical procedure |
122
+ | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
123
+ | Copy and install a deployment | [Separate-project installation](../examples/worker/README.md#copied-into-its-own-repository), including exact versions, peers, ignore files, and trusted tooling |
124
+ | Deploy or update the stack | [Deploy](../examples/worker/README.md#deploy), including account permissions and consistent stage selection |
125
+ | Protect secrets and retain data | [Secrets and state](../examples/worker/README.md#secrets-and-state) and [destroying and recovering](../examples/worker/README.md#destroying-and-recovering) |
126
+ | Configure human and agent access | [Cloudflare Access](../examples/worker/README.md#cloudflare-access), [agent bypass](../examples/worker/README.md#let-agents-through-access), and [machine tokens](../examples/worker/README.md#machine-tokens) |
127
+ | Move an existing Wrangler deployment | [Take over existing resources](../examples/worker/README.md#moving-a-wrangler-deployed-worker-to-alchemy) |
128
+ | Run locally and verify a deploy | [Local development](../examples/worker/README.md#local-development) and [verification](../examples/worker/README.md#verify-after-deploying) |
129
+
130
+ Retain the example's [compatibility flags and entrypoint wiring](../examples/worker/README.md#files).
131
+ The [agent bypass notes](#agent-endpoints-behind-cloudflare-access) below record
132
+ verified ingress behavior and the cases that still require verification.
71
133
 
72
134
  ## Agent endpoints behind Cloudflare Access
73
135
 
@@ -76,7 +138,8 @@ alone and which ignores Access context entirely
76
138
  ([agent endpoints](./auth.md#agent-endpoints)). Behind Access, the edge must
77
139
  let those requests through without an Access login or service token. The P0
78
140
  probe ([observations](./architecture.md#production-access-bypass-for-agent-endpoints))
79
- verified this shape on 2026-10-15:
141
+ verified this shape on 2026-10-15. The Worker example's `alchemy.run.ts`
142
+ declares both applications:
80
143
 
81
144
  1. Keep the Worker-level application, whose destination is
82
145
  `{ "type": "worker", "worker_id": "<the Worker script tag>" }`, exactly as
@@ -166,6 +229,27 @@ personal connectors in their pools.
166
229
  [Auth](./auth.md#principals-visibility-and-operators) owns maintainers and members;
167
230
  [Clerk setup](./auth.md#clerk-oauth-tokens-and-operator-sessions) owns resource-bound
168
231
  tokens and `aud_claim_enabled`. A person's operator session is not an MCP token.
232
+ Several deployments can share one Clerk instance with one Organization each;
233
+ [Clerk Organizations](./auth.md#one-clerk-instance-one-organization-per-deployment)
234
+ owns that setup and its isolation tradeoff.
235
+
236
+ Public deployments require ingress rate limiting on all authenticated routes,
237
+ including agent, operator, connection-start, and callback paths. Connecta's
238
+ fixed bound of 16 active inbound authorizations per loaded core/process or
239
+ isolate fast-refuses with retryable 503 `authentication_busy` and `Retry-After: 1`.
240
+ A separate allowance of 16 abandoned operations holds stalled work after its
241
+ hard deadline plus one second of grace. While it is full, new authentication
242
+ receives the same 503, the log records `authentication_abandoned_saturated`,
243
+ and `/health` reports `admission.authentication.abandonedSaturated: true`.
244
+ Stalled work counts until it settles or until the garbage collector frees
245
+ everything that could settle it, as after Cloudflare cancels an invocation.
246
+ That second release is eventual, never timed, and needs `FinalizationRegistry`:
247
+ on Workers, `enable_weak_ref` or a compatibility date of 2025-05-05 or later.
248
+ `/health` reports `admission.authentication.unreachableRelease`.
249
+ These bounds limit outstanding work, not requests per second or a quota shared by several
250
+ isolates or deployments. Budget ingress across the identity-provider account;
251
+ see [authentication capacity](./auth.md#authentication-capacity-and-ingress-limiting)
252
+ for route coverage and the interaction with MCP execution admission.
169
253
 
170
254
  Every deployment must set `readOnly` in its configuration; startup fails without
171
255
  it, and the template and Worker example set `readOnly: false`. Each named pool
@@ -230,14 +314,74 @@ Bump the exact package pin, read the [changelog](../CHANGELOG.md) for every
230
314
  intervening release, and apply the relevant migration before startup. `init`
231
315
  does not merge changes into an existing deployment.
232
316
 
317
+ For an existing Node deployment, add the Node entry's pinned optional peer
318
+ before starting the upgraded package: `npm install --save-exact undici@6.29.1`.
319
+ The current Node template already declares this dependency.
320
+
321
+ For 0.35.0, serve Node with `listen` from `@zackbart/connecta/node`, as the
322
+ current template does. Without `listen()`, a host serving `connecta.fetch` has
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).
333
+
334
+ Authenticated MCP bodies now default to 4 MiB through
335
+ `admission.requests.maxBodyBytes`; Node's separate pre-auth buffer also defaults
336
+ to 4 MiB. Configure both core and `listen(..., { maxBodyBytes })` if a deployment
337
+ must accept larger bodies. Smaller platform or proxy limits still apply.
338
+
339
+ After a dispatched write reports an unknown outcome, read the target before
340
+ making another write. Programs retain that outcome even when guest code catches
341
+ the error; see [Writes](./code-mode.md#writes). Provider
342
+ continuations now bind their connection, credential owner and read arguments;
343
+ connections with caller-dependent downstream identities also bind the admitted
344
+ caller and pool owner. Follow each provider's migration rules for old cursors.
345
+ No database conversion or agent-token rotation is required solely for 0.35.0.
346
+
347
+ Native pools and code-off result paging are optional; existing pools keep the
348
+ meta-tool surface. See [Native tool surface](./meta-tools.md#native-tool-surface).
349
+ Vercel workload admission and the separate Eve helper are also opt-in; existing
350
+ agent tokens keep working. See [Vercel workload credentials](./auth.md#vercel-workload-credentials)
351
+ and [Eve agents](./meta-tools.md#eve-agents).
352
+
353
+ - [Provider migration for 0.35](./provider-migration-0.35.md) collects provider upgrade actions for 0.35.0, including removal of Infisical, Notion, and Mixpanel factories.
233
354
  - [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.
234
355
  - [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.
235
356
  - [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.
236
357
  - [Node storage from 0.28](../templates/node/README.md#storage) uses `connecta migrate-state` to copy the JSON state into SQLite. Activity JSONL is not imported.
237
358
  - [Worker storage from 0.28](../examples/worker/README.md#upgrading-from-028) copies KV into D1 with a one-shot migration.
238
- - [Notion, Vercel, and Cloudflare for 0.29](./provider-migration-0.29.md) change defaults and retained API tool names.
359
+ - [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
+ - [Notion, Vercel, and Cloudflare for 0.29](./provider-migration-0.29.md) records historical defaults and retained API tool names.
239
361
  - [Executor wiring](./code-mode.md#deploy-time-capability) requires branded shipped executors or a self-managed custom executor.
240
362
 
363
+ ## Recover a cursor signing key
364
+
365
+ Paged API discovery and bound list continuations use one signing key in the
366
+ deployment store. A load failure returns retryable `unavailable` and names the
367
+ cursor signing key without revealing its value. Restore database connectivity
368
+ first, then retry the call. A valid key already cached by a process keeps working.
369
+
370
+ If the stored key is corrupt, pause incoming traffic and stop every Node process
371
+ (or prepare a fresh Worker version), then delete only this row from the
372
+ existing SQLite/D1 database:
373
+
374
+ ```sql
375
+ DELETE FROM connecta_kv WHERE key = 'continuation-key:v1:signing';
376
+ ```
377
+
378
+ Restart all Node processes or switch all traffic to the fresh Worker version
379
+ before accepting requests again, so no instance retains an older cached key.
380
+ The next paged call creates one replacement key atomically. Do not print or
381
+ inspect its value. Outstanding cursors signed with the old key fail
382
+ `invalid_args`; start each affected search, details walk or list at its first
383
+ page. Other deployment state and credentials remain in the database.
384
+
241
385
  ## Contributor reference
242
386
 
243
387
  ### Implementation and evidence