@zackbart/connecta 0.34.1 → 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 (429) hide show
  1. package/CHANGELOG.md +363 -0
  2. package/README.md +62 -106
  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 +12 -7
  53. package/dist/connectors/api-connector.js +142 -56
  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/remote-mcp.d.ts +10 -30
  58. package/dist/connectors/remote-mcp.js +955 -563
  59. package/dist/d1.js +10 -243
  60. package/dist/derived-context.js +5 -0
  61. package/dist/describe-config.d.ts +3 -1
  62. package/dist/describe-config.js +2 -0
  63. package/dist/downstream-input.js +347 -260
  64. package/dist/errors.d.ts +87 -6
  65. package/dist/errors.js +114 -4
  66. package/dist/execute.js +87 -50
  67. package/dist/executor-admission.js +3 -0
  68. package/dist/executors/quickjs.js +163 -112
  69. package/dist/guarded-transport.js +50 -0
  70. package/dist/guest-runtime.js +1 -1
  71. package/dist/http/client.js +439 -0
  72. package/dist/http/errors.js +558 -0
  73. package/dist/http/fields.js +49 -0
  74. package/dist/http/hatch-paging.js +318 -0
  75. package/dist/http/hatch.js +1279 -0
  76. package/dist/http/json-schema.js +267 -0
  77. package/dist/http/node-transport.js +241 -0
  78. package/dist/http/oauth.js +162 -0
  79. package/dist/http/paging.js +228 -0
  80. package/dist/http/provider.js +221 -0
  81. package/dist/http/safety.js +82 -0
  82. package/dist/http/services.js +79 -0
  83. package/dist/http/tools.js +383 -0
  84. package/dist/http/vendor-index.js +138 -0
  85. package/dist/http/vendor.js +448 -0
  86. package/dist/http/write-request.js +66 -0
  87. package/dist/http-policy.d.ts +11 -0
  88. package/dist/http-policy.js +45 -0
  89. package/dist/inbound-credential.js +1 -1
  90. package/dist/index.d.ts +2 -2
  91. package/dist/index.js +4 -0
  92. package/dist/invocation-auth.js +30 -19
  93. package/dist/invocation.js +218 -85
  94. package/dist/mcp-result.js +0 -4
  95. package/dist/membership.d.ts +4 -0
  96. package/dist/meta-output.js +1 -1
  97. package/dist/meta-tools.js +531 -406
  98. package/dist/native-recovery.js +52 -0
  99. package/dist/native-tools.js +382 -0
  100. package/dist/node.d.ts +4 -3
  101. package/dist/node.js +45 -8
  102. package/dist/oauth-handoff.js +177 -104
  103. package/dist/oauth-partition.js +6 -20
  104. package/dist/oauth-sealing.js +6 -7
  105. package/dist/operation-vocabulary.js +101 -0
  106. package/dist/operator-record.d.ts +2 -2
  107. package/dist/operator-record.js +17 -4
  108. package/dist/operator-ui/agents.d.ts +5 -4
  109. package/dist/operator-ui/agents.js +17 -7
  110. package/dist/operator-ui/config-summary.js +5 -4
  111. package/dist/operator-ui/connection-map.js +7 -5
  112. package/dist/operator-ui/contract.d.ts +7 -3
  113. package/dist/operator-ui/endpoints.js +4 -13
  114. package/dist/operator-ui/fix-prompts.d.ts +1 -1
  115. package/dist/operator-ui/fix-prompts.js +0 -8
  116. package/dist/operator-ui/generated.js +3 -3
  117. package/dist/operator-ui/model.d.ts +2 -3
  118. package/dist/operator-ui/overview.js +5 -2
  119. package/dist/operator-ui/setup-commands.js +0 -4
  120. package/dist/operator-ui/view.d.ts +2 -25
  121. package/dist/operator-ui/view.js +2 -76
  122. package/dist/program-writes.js +47 -26
  123. package/dist/provider-call-facts.d.ts +115 -0
  124. package/dist/provider-call-facts.js +182 -0
  125. package/dist/provider-call.d.ts +112 -0
  126. package/dist/provider-call.js +271 -0
  127. package/dist/provider.d.ts +65 -31
  128. package/dist/provider.js +116 -39
  129. package/dist/providers/_shared/google/hatch.js +91 -0
  130. package/dist/providers/_shared/google/kit.js +537 -0
  131. package/dist/providers/_shared/google/result-size.js +15 -2
  132. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  133. package/dist/providers/_shared/google/service-account.js +8 -4
  134. package/dist/providers/_shared/google/workspace.d.ts +6 -210
  135. package/dist/providers/_shared/google/workspace.js +6 -425
  136. package/dist/providers/_shared/rest/compact-index.js +86 -0
  137. package/dist/providers/_shared/rest/dispatch.js +3 -23
  138. package/dist/providers/_shared/rest/kit.js +546 -0
  139. package/dist/providers/_shared/rest/operation-index.js +230 -14
  140. package/dist/providers/_shared/rest/response-media.js +11 -0
  141. package/dist/providers/_shared/rest/tools.js +101 -78
  142. package/dist/providers/_shared/rest/value-safety.js +353 -195
  143. package/dist/providers/_shared/sensitive-fields.js +27 -0
  144. package/dist/providers/breeze/api.js +584 -0
  145. package/dist/providers/breeze/index.d.ts +1 -3
  146. package/dist/providers/breeze/index.js +67 -1420
  147. package/dist/providers/breeze/openapi.generated.js +60 -0
  148. package/dist/providers/breeze/skill.generated.js +2 -6
  149. package/dist/providers/breeze/tools.js +696 -0
  150. package/dist/providers/ccb/api.js +496 -0
  151. package/dist/providers/ccb/index.d.ts +15 -37
  152. package/dist/providers/ccb/index.js +77 -1702
  153. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  154. package/dist/providers/ccb/lib/constants.js +74 -0
  155. package/dist/providers/ccb/lib/guide.js +9 -0
  156. package/dist/providers/ccb/lib/verdicts.js +387 -0
  157. package/dist/providers/ccb/openapi.generated.js +397 -0
  158. package/dist/providers/ccb/safety.js +295 -0
  159. package/dist/providers/ccb/skill.generated.js +2 -6
  160. package/dist/providers/ccb/tools.js +853 -0
  161. package/dist/providers/cloudflare/api.js +1066 -0
  162. package/dist/providers/cloudflare/index.d.ts +5 -22
  163. package/dist/providers/cloudflare/index.js +79 -197
  164. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  165. package/dist/providers/cloudflare/lib/config.js +2 -0
  166. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  167. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  168. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  169. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  170. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  171. package/dist/providers/cloudflare/openapi.generated.js +4 -3
  172. package/dist/providers/cloudflare/{value-safety.js → safety.js} +487 -0
  173. package/dist/providers/cloudflare/skill.generated.js +2 -10
  174. package/dist/providers/cloudflare/tools.js +360 -0
  175. package/dist/providers/docs/api.js +51 -0
  176. package/dist/providers/docs/index.d.ts +1 -12
  177. package/dist/providers/docs/index.js +53 -1165
  178. package/dist/providers/docs/lib/constants.d.ts +18 -0
  179. package/dist/providers/docs/lib/constants.js +18 -0
  180. package/dist/providers/docs/lib/discovery.js +26 -0
  181. package/dist/providers/docs/lib/requests.js +48 -0
  182. package/dist/providers/docs/lib/schemas.js +168 -0
  183. package/dist/providers/docs/openapi.generated.js +16 -0
  184. package/dist/providers/docs/safety.js +54 -0
  185. package/dist/providers/docs/skill.generated.js +2 -6
  186. package/dist/providers/docs/tools.js +802 -0
  187. package/dist/providers/drive/api.js +177 -0
  188. package/dist/providers/drive/index.d.ts +1 -12
  189. package/dist/providers/drive/index.js +38 -1448
  190. package/dist/providers/drive/lib/constants.d.ts +6 -0
  191. package/dist/providers/drive/lib/constants.js +6 -0
  192. package/dist/providers/drive/lib/contracts.js +532 -0
  193. package/dist/providers/drive/lib/hatch.js +197 -0
  194. package/dist/providers/drive/openapi.generated.js +77 -0
  195. package/dist/providers/drive/safety.js +90 -0
  196. package/dist/providers/drive/skill.generated.js +2 -6
  197. package/dist/providers/drive/tools.js +1290 -0
  198. package/dist/providers/forms/api.js +71 -0
  199. package/dist/providers/forms/index.d.ts +1 -12
  200. package/dist/providers/forms/index.js +49 -1145
  201. package/dist/providers/forms/lib/constants.d.ts +14 -0
  202. package/dist/providers/forms/lib/constants.js +19 -0
  203. package/dist/providers/forms/lib/hatch.js +72 -0
  204. package/dist/providers/forms/openapi.generated.js +23 -0
  205. package/dist/providers/forms/safety.js +34 -0
  206. package/dist/providers/forms/skill.generated.js +2 -8
  207. package/dist/providers/forms/tools.js +1024 -0
  208. package/dist/providers/github/api.js +150 -0
  209. package/dist/providers/github/index.d.ts +4 -5
  210. package/dist/providers/github/index.js +30 -87
  211. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  212. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  213. package/dist/providers/github/lib/discovery.js +132 -0
  214. package/dist/providers/github/lib/operations.js +58 -0
  215. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  216. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  217. package/dist/providers/github/openapi.generated.js +1216 -0
  218. package/dist/providers/github/safety.js +216 -0
  219. package/dist/providers/github/skill.generated.js +2 -5
  220. package/dist/providers/github/tools.js +506 -0
  221. package/dist/providers/gmail/api.js +114 -0
  222. package/dist/providers/gmail/index.d.ts +1 -12
  223. package/dist/providers/gmail/index.js +73 -1621
  224. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  225. package/dist/providers/gmail/lib/constants.js +16 -0
  226. package/dist/providers/gmail/lib/index.js +173 -0
  227. package/dist/providers/gmail/lib/schemas.js +176 -0
  228. package/dist/providers/gmail/lib/threading.js +120 -0
  229. package/dist/providers/gmail/openapi.generated.js +92 -0
  230. package/dist/providers/gmail/safety.js +21 -0
  231. package/dist/providers/gmail/skill.generated.js +2 -6
  232. package/dist/providers/gmail/tools.js +1435 -0
  233. package/dist/providers/overflow/api.js +1008 -0
  234. package/dist/providers/overflow/index.d.ts +1 -17
  235. package/dist/providers/overflow/index.js +60 -1488
  236. package/dist/providers/overflow/skill.generated.js +2 -5
  237. package/dist/providers/overflow/tools.js +873 -0
  238. package/dist/providers/planning-center/api.js +467 -0
  239. package/dist/providers/planning-center/index.d.ts +4 -35
  240. package/dist/providers/planning-center/index.js +69 -2445
  241. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  242. package/dist/providers/planning-center/lib/constants.js +83 -0
  243. package/dist/providers/planning-center/lib/discovery.js +40 -0
  244. package/dist/providers/planning-center/lib/guide.js +39 -0
  245. package/dist/providers/planning-center/lib/json-api.js +83 -0
  246. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  247. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  248. package/dist/providers/planning-center/safety.js +188 -0
  249. package/dist/providers/planning-center/skill.generated.js +2 -27
  250. package/dist/providers/planning-center/tools.js +1010 -0
  251. package/dist/providers/sheets/api.js +133 -0
  252. package/dist/providers/sheets/index.d.ts +4 -16
  253. package/dist/providers/sheets/index.js +61 -1172
  254. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  255. package/dist/providers/sheets/lib/constants.js +14 -0
  256. package/dist/providers/sheets/lib/hatch.js +163 -0
  257. package/dist/providers/sheets/lib/requests.js +105 -0
  258. package/dist/providers/sheets/lib/schemas.js +138 -0
  259. package/dist/providers/sheets/openapi.generated.js +30 -0
  260. package/dist/providers/sheets/safety.js +27 -0
  261. package/dist/providers/sheets/skill.generated.js +2 -7
  262. package/dist/providers/sheets/tools.js +734 -0
  263. package/dist/providers/slides/api.js +147 -0
  264. package/dist/providers/slides/index.d.ts +2 -10
  265. package/dist/providers/slides/index.js +48 -2555
  266. package/dist/providers/slides/lib/constants.d.ts +11 -0
  267. package/dist/providers/slides/lib/constants.js +11 -0
  268. package/dist/providers/slides/lib/requests.js +60 -0
  269. package/dist/providers/slides/lib/schemas.js +565 -0
  270. package/dist/providers/slides/openapi.generated.js +18 -0
  271. package/dist/providers/slides/skill.generated.js +2 -6
  272. package/dist/providers/slides/tools.js +1968 -0
  273. package/dist/providers/stripe/api.js +401 -0
  274. package/dist/providers/stripe/index.d.ts +5 -27
  275. package/dist/providers/stripe/index.js +74 -210
  276. package/dist/providers/stripe/lib/config.d.ts +4 -0
  277. package/dist/providers/stripe/lib/config.js +2 -0
  278. package/dist/providers/stripe/openapi.generated.js +4 -3
  279. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  280. package/dist/providers/stripe/skill.generated.js +2 -11
  281. package/dist/providers/stripe/tools.js +77 -0
  282. package/dist/providers/tithely/api.js +531 -0
  283. package/dist/providers/tithely/index.d.ts +17 -0
  284. package/dist/providers/tithely/index.js +86 -965
  285. package/dist/providers/tithely/skill.generated.js +2 -5
  286. package/dist/providers/tithely/tools.js +426 -0
  287. package/dist/providers/vercel/api.js +551 -0
  288. package/dist/providers/vercel/index.d.ts +9 -25
  289. package/dist/providers/vercel/index.js +66 -260
  290. package/dist/providers/vercel/lib/config.d.ts +2 -0
  291. package/dist/providers/vercel/lib/config.js +2 -0
  292. package/dist/providers/vercel/lib/index.js +117 -0
  293. package/dist/providers/vercel/lib/logs.js +100 -0
  294. package/dist/providers/vercel/lib/pin.js +270 -0
  295. package/dist/providers/vercel/openapi.generated.js +10 -5
  296. package/dist/providers/vercel/{value-safety.js → safety.js} +247 -38
  297. package/dist/providers/vercel/skill.generated.js +2 -7
  298. package/dist/providers/vercel/tools.js +642 -0
  299. package/dist/redaction-identity.js +47 -0
  300. package/dist/redaction-marker.js +125 -0
  301. package/dist/registry.d.ts +21 -15
  302. package/dist/registry.js +409 -376
  303. package/dist/routes/access-tokens.js +1 -1
  304. package/dist/routes/actor-labels.js +1 -1
  305. package/dist/routes/connect.js +1 -1
  306. package/dist/routes/dispatch.js +103 -0
  307. package/dist/routes/mcp.js +170 -79
  308. package/dist/routes/oauth.js +3 -1
  309. package/dist/routes/operator.js +2 -2
  310. package/dist/routes/shared.d.ts +5 -4
  311. package/dist/routes/shared.js +244 -177
  312. package/dist/routes/skills.js +10 -8
  313. package/dist/routes/ui-config.js +27 -3
  314. package/dist/routes/ui-data.js +21 -20
  315. package/dist/routes/ui.js +1 -1
  316. package/dist/runtime/call-admission.js +0 -26
  317. package/dist/runtime/call-entry.js +30 -0
  318. package/dist/runtime/call.js +556 -0
  319. package/dist/runtime/connector-scope.js +7 -0
  320. package/dist/runtime/credential-probe.js +34 -0
  321. package/dist/runtime/executor.js +40 -0
  322. package/dist/runtime/native-storage.js +63 -0
  323. package/dist/runtime/registry.js +27 -0
  324. package/dist/runtime/request-scope.js +72 -0
  325. package/dist/runtime/run.js +15 -7
  326. package/dist/runtime/shared-read.js +34 -5
  327. package/dist/runtime/storage.js +34 -21
  328. package/dist/sent-secrets.d.ts +194 -37
  329. package/dist/sent-secrets.js +1743 -340
  330. package/dist/server.js +5 -56
  331. package/dist/skills.js +322 -222
  332. package/dist/sqlite.js +15 -14
  333. package/dist/storage/d1-copy.js +255 -0
  334. package/dist/storage/d1-driver.js +15 -0
  335. package/dist/storage/keys.js +28 -0
  336. package/dist/storage/sql-driver.js +88 -0
  337. package/dist/storage/sql-native.js +544 -0
  338. package/dist/storage/sql-schema.d.ts +6 -0
  339. package/dist/storage/sql-schema.js +15 -0
  340. package/dist/storage/sql.d.ts +14 -20
  341. package/dist/storage/sql.js +29 -535
  342. package/dist/timeout.js +0 -26
  343. package/dist/tool-safety.js +20 -10
  344. package/dist/types.d.ts +7 -109
  345. package/dist/upward.js +3 -0
  346. package/dist/usage-guide.js +3 -1
  347. package/dist/validate.d.ts +4 -2
  348. package/dist/validate.js +86 -9
  349. package/dist/version.d.ts +1 -1
  350. package/dist/version.js +1 -1
  351. package/dist/worker.js +312 -292
  352. package/dist/workspace-subject.js +5 -1
  353. package/dist/write-outcome.js +454 -34
  354. package/documentation/README.md +27 -7
  355. package/documentation/architecture.md +2547 -226
  356. package/documentation/auth.md +821 -98
  357. package/documentation/code-mode.md +49 -16
  358. package/documentation/deploying.md +164 -20
  359. package/documentation/hosted-mcp-migration.md +460 -0
  360. package/documentation/integrating.md +129 -144
  361. package/documentation/meta-tools.md +409 -32
  362. package/documentation/operating.md +27 -3
  363. package/documentation/operator-tests.md +3 -0
  364. package/documentation/operator-ui.md +68 -45
  365. package/documentation/provider-auth-migration.md +16 -63
  366. package/documentation/provider-migration-0.29.md +10 -5
  367. package/documentation/provider-migration-0.35.md +975 -0
  368. package/documentation/providers.md +965 -0
  369. package/examples/worker/AGENTS.md +23 -9
  370. package/examples/worker/README.md +254 -135
  371. package/examples/worker/alchemy.run.ts +116 -0
  372. package/examples/worker/gitignore +10 -0
  373. package/examples/worker/src/connecta.config.ts +23 -21
  374. package/examples/worker/wrangler.jsonc +14 -5
  375. package/guides/connecting-agents.md +157 -0
  376. package/guides/how-it-works.md +156 -0
  377. package/guides/safety-and-trust.md +153 -0
  378. package/package.json +27 -46
  379. package/templates/node/.env.example +3 -0
  380. package/templates/node/README.md +22 -2
  381. package/templates/node/docker-compose.yml +1 -0
  382. package/templates/node/package.json +3 -2
  383. package/templates/node/src/connecta.config.ts +8 -0
  384. package/dist/catalog-drift.d.ts +0 -138
  385. package/dist/catalog-drift.js +0 -578
  386. package/dist/providers/_shared/request-token.js +0 -83
  387. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  388. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  389. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  390. package/dist/providers/basecamp/index.d.ts +0 -45
  391. package/dist/providers/basecamp/index.js +0 -997
  392. package/dist/providers/basecamp/skill.generated.js +0 -9
  393. package/dist/providers/cloudflare/rest.d.ts +0 -37
  394. package/dist/providers/cloudflare/rest.js +0 -1097
  395. package/dist/providers/github/hosted.js +0 -218
  396. package/dist/providers/github/rest.js +0 -321
  397. package/dist/providers/infisical/index.d.ts +0 -7
  398. package/dist/providers/infisical/index.js +0 -713
  399. package/dist/providers/infisical/skill.generated.js +0 -8
  400. package/dist/providers/intercom/index.d.ts +0 -24
  401. package/dist/providers/intercom/index.js +0 -121
  402. package/dist/providers/intercom/skill.generated.js +0 -8
  403. package/dist/providers/linear/index.d.ts +0 -55
  404. package/dist/providers/linear/index.js +0 -537
  405. package/dist/providers/linear/skill.generated.js +0 -8
  406. package/dist/providers/mixpanel/index.d.ts +0 -59
  407. package/dist/providers/mixpanel/index.js +0 -472
  408. package/dist/providers/mixpanel/operations.js +0 -20
  409. package/dist/providers/mixpanel/rest.js +0 -603
  410. package/dist/providers/mixpanel/skill.generated.js +0 -10
  411. package/dist/providers/mixpanel/value-safety.js +0 -16
  412. package/dist/providers/notion/index.d.ts +0 -67
  413. package/dist/providers/notion/index.js +0 -368
  414. package/dist/providers/notion/openapi.generated.js +0 -75
  415. package/dist/providers/notion/rest.d.ts +0 -24
  416. package/dist/providers/notion/rest.js +0 -1226
  417. package/dist/providers/notion/skill.generated.js +0 -11
  418. package/dist/providers/notion/value-safety.js +0 -56
  419. package/dist/providers/revenuecat/index.d.ts +0 -51
  420. package/dist/providers/revenuecat/index.js +0 -697
  421. package/dist/providers/revenuecat/skill.generated.js +0 -11
  422. package/dist/providers/stripe/rest.d.ts +0 -14
  423. package/dist/providers/stripe/rest.js +0 -402
  424. package/dist/providers/vercel/rest.d.ts +0 -20
  425. package/dist/providers/vercel/rest.js +0 -1020
  426. package/dist/providers/wispr-flow/index.d.ts +0 -14
  427. package/dist/providers/wispr-flow/index.js +0 -117
  428. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  429. /package/dist/providers/github/{key.js → lib/key.js} +0 -0
package/dist/catalog.js CHANGED
@@ -155,9 +155,13 @@ const CONVERSATIONAL_QUERY_WORDS = new Set([
155
155
  * search into an unfiltered catalog browse.
156
156
  */
157
157
  export function lexicalSearchQuery(query) {
158
+ return lexicalSearchContent(query) || query;
159
+ }
160
+ /** Normalized content only; empty means every query word was framing. */
161
+ export function lexicalSearchContent(query) {
158
162
  const terms = normalized(query).split(/\s+/).filter(Boolean);
159
163
  const contentTerms = terms.filter((term) => !CONVERSATIONAL_QUERY_WORDS.has(term));
160
- return contentTerms.length > 0 ? contentTerms.join(" ") : query;
164
+ return contentTerms.join(" ");
161
165
  }
162
166
  const searchIndexes = new WeakMap();
163
167
  function indexFor(tools) {
@@ -1,30 +1,5 @@
1
1
  import { CONFIG_DEFAULTS } from "./config-defaults.js";
2
- import { Effect } from "effect";
3
- import { runEdge } from "./runtime/run.js";
4
2
  const DEFAULT_DISCOVERY_CONCURRENCY = CONFIG_DEFAULTS.discovery.concurrency;
5
3
  export function resolveDiscoveryConcurrency(value) {
6
4
  return value !== undefined && Number.isInteger(value) && value > 0 ? value : DEFAULT_DISCOVERY_CONCURRENCY;
7
5
  }
8
- /**
9
- * Run `fn` over `items` with at most `limit` operations in flight, settling
10
- * every one: a rejection lands in its slot instead of cancelling the rest.
11
- * Results keep input order whatever order the work finishes in. A limit below
12
- * one runs the items one at a time.
13
- */
14
- export function mapSettledWithConcurrency(items, limit, fn) {
15
- return runEdge(Effect.forEach(items, (item, index) => Effect.tryPromise({
16
- // Promise.resolve keeps a non-promise return from `fn` working, as
17
- // `await` did; a synchronous throw is caught either way.
18
- try: () => Promise.resolve(fn(item, index)),
19
- catch: (reason) => reason,
20
- }).pipe(Effect.match({
21
- onSuccess: (value) => ({
22
- status: "fulfilled",
23
- value,
24
- }),
25
- onFailure: (reason) => ({
26
- status: "rejected",
27
- reason,
28
- }),
29
- })), { concurrency: limit >= 1 ? Math.floor(limit) : 1 }));
30
- }
@@ -28,6 +28,7 @@ export declare const CONFIG_DEFAULTS: {
28
28
  readonly queueTimeoutMs: 5000;
29
29
  readonly retryAfterMs: 1000;
30
30
  readonly maxDurationMs: 300000;
31
+ readonly maxBodyBytes: number;
31
32
  };
32
33
  readonly code: {
33
34
  readonly concurrency: 2;
@@ -35,6 +35,7 @@ export const CONFIG_DEFAULTS = {
35
35
  queueTimeoutMs: 5_000,
36
36
  retryAfterMs: 1_000,
37
37
  maxDurationMs: 300_000,
38
+ maxBodyBytes: 4 * 1024 * 1024,
38
39
  },
39
40
  code: {
40
41
  concurrency: 2,
@@ -34,6 +34,8 @@ interface Variants {
34
34
  readonly key: readonly string[];
35
35
  readonly cases: Readonly<Record<string, Shape>>;
36
36
  readonly otherwise?: string;
37
+ /** Migration guards that throw rather than construct; omit them from valid choices. */
38
+ readonly rejected?: readonly string[];
37
39
  }
38
40
  type InputOf<F> = F extends Field<infer In, unknown, boolean> ? In : never;
39
41
  type OutputOf<F> = F extends Field<unknown, infer Out, boolean> ? Out : never;
@@ -129,7 +131,7 @@ export declare function instance<F extends AnyField>(field: F): F & {
129
131
  * its path and the valid values, so no union falls through to "no case". Only
130
132
  * the walk reads variants; the factory validates the remaining values itself.
131
133
  */
132
- export declare function variants(key: string | readonly string[], cases: Readonly<Record<string, Shape>>, otherwise?: string): Field<unknown, unknown, true>;
134
+ export declare function variants(key: string | readonly string[], cases: Readonly<Record<string, Shape>>, otherwise?: string, rejected?: readonly string[]): Field<unknown, unknown, true>;
133
135
  /**
134
136
  * A closed object for the unknown-key walk only: each named key may hold
135
137
  * anything, which its factory validates. For the options of a built-in
@@ -11,10 +11,12 @@
11
11
  // Deliberately small. Opaque fields (connectors, modules, functions) are
12
12
  // checked by identity or shape and passed through untouched, never cloned, so
13
13
  // a private-field receiver or a frozen object reaches core as configured.
14
+ import { keepErrorName } from "./redaction-identity.js";
14
15
  /** A structural configuration mistake, thrown before construction does work. */
15
16
  export class ConfigError extends TypeError {
16
17
  name = "ConfigError";
17
18
  }
19
+ keepErrorName(ConfigError, "ConfigError");
18
20
  function fail(message) {
19
21
  throw new ConfigError(message);
20
22
  }
@@ -192,13 +194,18 @@ export function instance(field) {
192
194
  * its path and the valid values, so no union falls through to "no case". Only
193
195
  * the walk reads variants; the factory validates the remaining values itself.
194
196
  */
195
- export function variants(key, cases, otherwise) {
197
+ export function variants(key, cases, otherwise, rejected) {
196
198
  const path = typeof key === "string" ? [key] : [...key];
197
199
  if (path.length === 0)
198
200
  throw new Error("variants() requires a discriminant key.");
199
201
  return {
200
202
  ...opaque(),
201
- variants: { key: path, cases, ...(otherwise !== undefined ? { otherwise } : {}) },
203
+ variants: {
204
+ key: path,
205
+ cases,
206
+ ...(otherwise !== undefined ? { otherwise } : {}),
207
+ ...(rejected ? { rejected } : {}),
208
+ },
202
209
  };
203
210
  }
204
211
  /**
@@ -233,7 +240,9 @@ export function assertKnownOptions(value, path, field) {
233
240
  if (read.unknown.length === 0)
234
241
  return read.value;
235
242
  return fail(`Unknown option${read.unknown.length === 1 ? "" : "s"}: ${read.unknown.join(", ")}. ` +
236
- "Check the spelling against the factory's options type.");
243
+ (read.unknown.some((key) => key.endsWith(".classify"))
244
+ ? "classify was removed; use ConnectaConfig.classification."
245
+ : "Check the spelling against the factory's options type."));
237
246
  }
238
247
  /**
239
248
  * Own property descriptors, read without invoking any accessor. A config
@@ -317,6 +326,7 @@ function inspectRecord(value, path, field) {
317
326
  function selectShape(inspected, path, variants) {
318
327
  const at = `${path}.${variants.key.join(".")}`;
319
328
  const valid = Object.keys(variants.cases)
329
+ .filter((name) => !variants.rejected?.includes(name))
320
330
  .map((name) => JSON.stringify(name))
321
331
  .join(", ");
322
332
  // Walk the key path one plain object at a time, reading descriptors only.
package/dist/config.d.ts CHANGED
@@ -90,6 +90,8 @@ declare const codeAdmission: {
90
90
  retryAfterMs: import("./config-schema.js").Field<number, number, true>;
91
91
  };
92
92
  declare const requestAdmission: {
93
+ /** Authenticated MCP body limit in bytes, checked while reading. Default 4 MiB. */
94
+ maxBodyBytes: import("./config-schema.js").Field<number, number, true>;
93
95
  /** Hard lifetime of an admitted /mcp request. Default 300,000 ms. */
94
96
  maxDurationMs: import("./config-schema.js").Field<number, number, true>;
95
97
  /** Simultaneous work admitted to this pool. */
@@ -107,12 +109,14 @@ declare const admission: {
107
109
  * 5-second maximum wait.
108
110
  */
109
111
  requests: import("./config-schema.js").Field<{
112
+ maxBodyBytes?: number | undefined;
110
113
  maxDurationMs?: number | undefined;
111
114
  concurrency?: number | undefined;
112
115
  maxQueueSize?: number | undefined;
113
116
  queueTimeoutMs?: number | undefined;
114
117
  retryAfterMs?: number | undefined;
115
118
  }, {
119
+ readonly maxBodyBytes: number;
116
120
  readonly maxDurationMs: number;
117
121
  readonly concurrency: number;
118
122
  readonly maxQueueSize: number;
@@ -120,6 +124,8 @@ declare const admission: {
120
124
  readonly retryAfterMs: number;
121
125
  }, true> & {
122
126
  readonly shape: {
127
+ /** Authenticated MCP body limit in bytes, checked while reading. Default 4 MiB. */
128
+ maxBodyBytes: import("./config-schema.js").Field<number, number, true>;
123
129
  /** Hard lifetime of an admitted /mcp request. Default 300,000 ms. */
124
130
  maxDurationMs: import("./config-schema.js").Field<number, number, true>;
125
131
  /** Simultaneous work admitted to this pool. */
@@ -194,6 +200,19 @@ declare const pool: {
194
200
  * `/mcp` never shows it.
195
201
  */
196
202
  description: import("./config-schema.js").Field<string, string | undefined, true>;
203
+ /**
204
+ * The tools this pool's endpoints list. `"meta"`, the default, is the six
205
+ * meta-tools. `"native"` lists each downstream tool directly, named
206
+ * `<connector>__<tool>` and annotated from its classification, for clients
207
+ * that run their own tool search; calls take the same invocation path.
208
+ */
209
+ surface: import("./config-schema.js").Field<"native" | "meta", "native" | "meta" | undefined, true>;
210
+ /**
211
+ * `false` drops `execute_code` from a native pool and lists `read_result`
212
+ * for paging instead. Only valid with `surface: "native"`: the meta surface
213
+ * always includes it.
214
+ */
215
+ executeCode: import("./config-schema.js").Field<boolean, boolean | undefined, true>;
197
216
  };
198
217
  declare const connectaConfig: {
199
218
  connectors: import("./config-schema.js").Field<Connector[], readonly Connector[], false>;
@@ -201,13 +220,16 @@ declare const connectaConfig: {
201
220
  auth: import("./config-schema.js").Field<InboundAuth | InboundAuth[], readonly InboundAuth[], true>;
202
221
  /**
203
222
  * Agents, declared by name: lowercase letters, digits, `_` and `-`, each
204
- * unique. Each has one `cta_` token slot that operators issue, rotate, and
223
+ * unique. With `accessTokens`, each has one `cta_` slot operators issue, rotate, and
205
224
  * revoke; nothing outside code adds, renames, or rebinds an agent. Removing
206
- * a name stops its token on the next request. Requires `accessTokens`.
225
+ * a name stops its credentials on the next request. A string name requires
226
+ * `accessTokens`; `{ name, vercel: { team, project, environments? } }` also
227
+ * accepts Vercel OIDC. Requires an immutable team_ ID; prefer a prj_ ID for the project. Environments
228
+ * default to production. Both credential types may coexist.
207
229
  * An admitted agent carries `identity.agent` and has no principal, so
208
230
  * personal connectors are absent for it. Defaults to none.
209
231
  */
210
- agents: import("./config-schema.js").Field<readonly string[], readonly string[], true>;
232
+ agents: import("./config-schema.js").Field<readonly import("./agent-config.js").AgentConfig[], readonly import("./agent-config.js").ResolvedAgent[], true>;
211
233
  /**
212
234
  * The people who may use plain `/mcp`, which serves the whole catalog with
213
235
  * the deployment's `readOnly`, and who administer the deployment. Same
@@ -220,6 +242,8 @@ declare const connectaConfig: {
220
242
  readOnly?: boolean | undefined;
221
243
  owner?: string | undefined;
222
244
  description?: string | undefined;
245
+ surface?: "native" | "meta" | undefined;
246
+ executeCode?: boolean | undefined;
223
247
  tools: readonly string[];
224
248
  members: readonly MemberRef[];
225
249
  }>, Readonly<Record<string, {
@@ -228,9 +252,12 @@ declare const connectaConfig: {
228
252
  readonly members: readonly MemberRef[];
229
253
  readonly owner: string | undefined;
230
254
  readonly description: string | undefined;
255
+ readonly surface: "native" | "meta" | undefined;
256
+ readonly executeCode: boolean | undefined;
231
257
  }>> | undefined, true>;
232
- /** Exact connector id -> tool name -> verdict. Unknown names fail at catalog publication. */
233
- classification: import("./config-schema.js").Field<Record<string, Record<string, "read" | "write">>, Readonly<Record<string, Readonly<Record<string, "read" | "write">>>> | undefined, true>;
258
+ /** Exact connector id -> tool name -> verdict. Hidden tools cannot be discovered or called.
259
+ * Unknown static names fail construction; absent runtime names stay dormant and are reported. */
260
+ classification: import("./config-schema.js").Field<Record<string, Record<string, "read" | "write" | "hidden">>, Readonly<Record<string, Readonly<Record<string, "read" | "write" | "hidden">>>> | undefined, true>;
234
261
  /**
235
262
  * The deployment's one store: `d1Storage(env.CONNECTA_DB)` from
236
263
  * `@zackbart/connecta/d1` on Workers, `sqliteStorage(path)` from
@@ -391,6 +418,7 @@ declare const connectaConfig: {
391
418
  */
392
419
  admission: import("./config-schema.js").Field<{
393
420
  requests?: {
421
+ maxBodyBytes?: number | undefined;
394
422
  maxDurationMs?: number | undefined;
395
423
  concurrency?: number | undefined;
396
424
  maxQueueSize?: number | undefined;
@@ -405,6 +433,7 @@ declare const connectaConfig: {
405
433
  } | undefined;
406
434
  }, {
407
435
  readonly requests: {
436
+ readonly maxBodyBytes: number;
408
437
  readonly maxDurationMs: number;
409
438
  readonly concurrency: number;
410
439
  readonly maxQueueSize: number;
@@ -424,12 +453,14 @@ declare const connectaConfig: {
424
453
  * 5-second maximum wait.
425
454
  */
426
455
  requests: import("./config-schema.js").Field<{
456
+ maxBodyBytes?: number | undefined;
427
457
  maxDurationMs?: number | undefined;
428
458
  concurrency?: number | undefined;
429
459
  maxQueueSize?: number | undefined;
430
460
  queueTimeoutMs?: number | undefined;
431
461
  retryAfterMs?: number | undefined;
432
462
  }, {
463
+ readonly maxBodyBytes: number;
433
464
  readonly maxDurationMs: number;
434
465
  readonly concurrency: number;
435
466
  readonly maxQueueSize: number;
@@ -437,6 +468,8 @@ declare const connectaConfig: {
437
468
  readonly retryAfterMs: number;
438
469
  }, true> & {
439
470
  readonly shape: {
471
+ /** Authenticated MCP body limit in bytes, checked while reading. Default 4 MiB. */
472
+ maxBodyBytes: import("./config-schema.js").Field<number, number, true>;
440
473
  /** Hard lifetime of an admitted /mcp request. Default 300,000 ms. */
441
474
  maxDurationMs: import("./config-schema.js").Field<number, number, true>;
442
475
  /** Simultaneous work admitted to this pool. */
@@ -566,7 +599,8 @@ type Parsed = ConfigOutput<typeof connectaConfig>;
566
599
  * The configuration a Connecta runs with: validated, every default applied,
567
600
  * auth ordered, and `serverInfo` named and versioned. Built once by createConnecta; nothing downstream re-derives it.
568
601
  */
569
- export interface ResolvedConfig extends Omit<Parsed, "serverInfo"> {
602
+ export interface ResolvedConfig extends Omit<Parsed, "serverInfo" | "agents"> {
603
+ readonly agents: readonly string[];
570
604
  /** `serverInfo` with its name and version defaults applied. */
571
605
  readonly serverInfo: {
572
606
  readonly name: string;
package/dist/config.js CHANGED
@@ -1,19 +1,8 @@
1
- // ConnectaConfig as one schema.
2
- //
3
- // The schema below is the canonical record of the configuration surface. It
4
- // produces the TypeScript type a deployment writes (`ConnectaConfig`), the
5
- // unknown-key rejection createConnecta runs before reading anything, every
6
- // default (src/config-defaults.ts), and one validation policy: a present value
7
- // that is wrong throws with its path at construction (INV-11). Each field's
8
- // default and operator-facing meaning belongs in its doc comment here, where a
9
- // deployment author reads it from the editor.
10
- //
11
- // `resolveConfig` turns an accepted config into the `ResolvedConfig` core
12
- // reads, with defaults applied once, so no later layer re-derives a value or
13
- // re-plumbs a field.
1
+ import { registerAgentDescriptions } from "./agent-description.js";
14
2
  import { CONFIG_DEFAULTS as D } from "./config-defaults.js";
15
3
  import { array, ConfigError, object, opaque, record, required, seconds, readPlain, text, whole, } from "./config-schema.js";
16
- import { assertAgentNames } from "./agent-identity.js";
4
+ import { agentConfig } from "./agent-config.js";
5
+ import { vercelAgentAuth } from "./auth/vercel-agent.js";
17
6
  import { assertExecutor } from "./executor-contract.js";
18
7
  import { memoryStorage } from "./storage/memory.js";
19
8
  import { CONNECTA_VERSION } from "./version.js";
@@ -156,6 +145,8 @@ function admissionPool(defaults) {
156
145
  const codeAdmission = admissionPool(D.admission.code);
157
146
  const requestAdmission = {
158
147
  ...admissionPool(D.admission.requests),
148
+ /** Authenticated MCP body limit in bytes, checked while reading. Default 4 MiB. */
149
+ maxBodyBytes: whole({ min: 1, default: D.admission.requests.maxBodyBytes }),
159
150
  /** Hard lifetime of an admitted /mcp request. Default 300,000 ms. */
160
151
  maxDurationMs: whole({
161
152
  min: 1,
@@ -261,6 +252,24 @@ const pool = {
261
252
  * `/mcp` never shows it.
262
253
  */
263
254
  description: opaque({ check: assertPoolDescription }),
255
+ /**
256
+ * The tools this pool's endpoints list. `"meta"`, the default, is the six
257
+ * meta-tools. `"native"` lists each downstream tool directly, named
258
+ * `<connector>__<tool>` and annotated from its classification, for clients
259
+ * that run their own tool search; calls take the same invocation path.
260
+ */
261
+ surface: opaque({
262
+ check: (value, path) => {
263
+ if (value !== "meta" && value !== "native")
264
+ throw new ConfigError(`${path} must be "meta" or "native".`);
265
+ },
266
+ }),
267
+ /**
268
+ * `false` drops `execute_code` from a native pool and lists `read_result`
269
+ * for paging instead. Only valid with `surface: "native"`: the meta surface
270
+ * always includes it.
271
+ */
272
+ executeCode: opaque({ check: assertFlag }),
264
273
  };
265
274
  const icon = {
266
275
  src: required(text()),
@@ -315,16 +324,16 @@ const connectaConfig = {
315
324
  }),
316
325
  /**
317
326
  * Agents, declared by name: lowercase letters, digits, `_` and `-`, each
318
- * unique. Each has one `cta_` token slot that operators issue, rotate, and
327
+ * unique. With `accessTokens`, each has one `cta_` slot operators issue, rotate, and
319
328
  * revoke; nothing outside code adds, renames, or rebinds an agent. Removing
320
- * a name stops its token on the next request. Requires `accessTokens`.
329
+ * a name stops its credentials on the next request. A string name requires
330
+ * `accessTokens`; `{ name, vercel: { team, project, environments? } }` also
331
+ * accepts Vercel OIDC. Requires an immutable team_ ID; prefer a prj_ ID for the project. Environments
332
+ * default to production. Both credential types may coexist.
321
333
  * An admitted agent carries `identity.agent` and has no principal, so
322
334
  * personal connectors are absent for it. Defaults to none.
323
335
  */
324
- agents: opaque({
325
- check: (value, path) => assertAgentNames(value, path),
326
- resolve: (value) => Object.freeze([...(value ?? [])]),
327
- }),
336
+ agents: agentConfig,
328
337
  /**
329
338
  * The people who may use plain `/mcp`, which serves the whole catalog with
330
339
  * the deployment's `readOnly`, and who administer the deployment. Same
@@ -334,11 +343,12 @@ const connectaConfig = {
334
343
  maintainers: opaque({ check: assertMemberList }),
335
344
  /** Named tool pools, each served at `/mcp/<name>` to its members only. */
336
345
  pools: record(object(pool)),
337
- /** Exact connector id -> tool name -> verdict. Unknown names fail at catalog publication. */
346
+ /** Exact connector id -> tool name -> verdict. Hidden tools cannot be discovered or called.
347
+ * Unknown static names fail construction; absent runtime names stay dormant and are reported. */
338
348
  classification: record(record(opaque({
339
349
  check: (value, path) => {
340
- if (value !== "read" && value !== "write") {
341
- throw new ConfigError(`${path} must be "read" or "write".`);
350
+ if (value !== "read" && value !== "write" && value !== "hidden") {
351
+ throw new ConfigError(`${path} must be "read", "write", or "hidden".`);
342
352
  }
343
353
  },
344
354
  }))),
@@ -566,7 +576,7 @@ function assertCoherent(config) {
566
576
  config.discovery.catalogMaxTtlSeconds > 86_400) {
567
577
  throw new ConfigError("ConnectaConfig.discovery requires catalogMinTtlSeconds <= catalogMaxTtlSeconds <= 86400.");
568
578
  }
569
- if (config.agents.length > 0 && !config.accessTokens) {
579
+ if (config.agents.some((agent) => !agent.vercel) && !config.accessTokens) {
570
580
  throw new ConfigError("ConnectaConfig.agents needs accessTokens: accessTokens(storage) from @zackbart/connecta/auth/access-tokens " +
571
581
  "holds each agent's token slot.");
572
582
  }
@@ -598,14 +608,18 @@ export function readConfig(config) {
598
608
  version: parsed.serverInfo.version ?? CONNECTA_VERSION,
599
609
  };
600
610
  // The token module admits exactly the agents this configuration declares.
601
- const accessTokens = parsed.accessTokens?.forAgents(parsed.agents);
611
+ const agents = Object.freeze(parsed.agents.map((agent) => agent.name));
612
+ const accessTokens = parsed.accessTokens?.forAgents(agents);
613
+ const vercel = vercelAgentAuth(parsed.agents, parsed.logger);
602
614
  const resolved = Object.freeze({
603
615
  ...parsed,
616
+ agents,
604
617
  accessTokens,
605
618
  // A managed-token module contributes one more provider, ordered with the rest.
606
- auth: accessTokens ? normalizeAuth([accessTokens.auth, ...parsed.auth]) : parsed.auth,
619
+ auth: normalizeAuth([...(accessTokens ? [accessTokens.auth] : []), ...(vercel ? [vercel] : []), ...parsed.auth]),
607
620
  serverInfo: Object.freeze(info),
608
621
  });
622
+ registerAgentDescriptions(resolved, parsed.agents, accessTokens !== undefined);
609
623
  return { input, resolved };
610
624
  }
611
625
  /**
@@ -18,5 +18,9 @@ export interface ConnectorCaller {
18
18
  */
19
19
  poolOwner?: string;
20
20
  }
21
+ /** Mark a connector whose downstream identity depends on the admitted caller. */
22
+ export declare function tagCallerIdentity<C extends object>(connector: C): C;
23
+ /** Provider construction may wrap a connector in an inheriting object. */
24
+ export declare function usesCallerIdentity(connector: object): boolean;
21
25
  export declare function attachCaller(ctx: ConnectorContext, caller: ConnectorCaller | undefined): ConnectorContext;
22
26
  export declare function callerOf(ctx: ConnectorContext): ConnectorCaller | undefined;
@@ -19,12 +19,25 @@
19
19
  // through an inbound-auth provider configured to read one (a bearer's asserted
20
20
  // principal). A context no request admitted, such as an operator probe, has no caller, and a delegated provider fails closed on it,
21
21
  // as it does on the anonymous caller an open deployment admits.
22
- const callers = new WeakMap();
22
+ import { Caller, serviceFor, setViewService } from "./runtime/call.js";
23
+ const callerIdentities = new WeakSet();
24
+ /** Mark a connector whose downstream identity depends on the admitted caller. */
25
+ export function tagCallerIdentity(connector) {
26
+ callerIdentities.add(connector);
27
+ return connector;
28
+ }
29
+ /** Provider construction may wrap a connector in an inheriting object. */
30
+ export function usesCallerIdentity(connector) {
31
+ for (let current = connector; current; current = Object.getPrototypeOf(current)) {
32
+ if (callerIdentities.has(current))
33
+ return true;
34
+ }
35
+ return false;
36
+ }
23
37
  export function attachCaller(ctx, caller) {
24
- if (caller)
25
- callers.set(ctx, caller);
38
+ setViewService(ctx, Caller, caller);
26
39
  return ctx;
27
40
  }
28
41
  export function callerOf(ctx) {
29
- return callers.get(ctx);
42
+ return serviceFor(ctx, Caller);
30
43
  }
@@ -85,9 +85,12 @@ export interface ApiOAuthAccess {
85
85
  /**
86
86
  * `fetch` with the calling owner's access token as `Authorization: Bearer`.
87
87
  * Only to `apiOrigins`; redirects are returned unfollowed. A 401 earns one
88
- * coordinated refresh and one replay; a second 401, a refused refresh, or
89
- * no grant at all throws `auth_required`, and an authorization-server
90
- * outage throws a retryable `unavailable`.
88
+ * coordinated refresh. Only a positively read-classified GET/HEAD without
89
+ * method-override headers is sent once more; a write's never is, and the call fails with `connector_call_failed`
90
+ * whose outcome is unknown, so the agent checks the target before
91
+ * repeating it. A second 401, a refused refresh, or no grant at all throws
92
+ * `auth_required`, and an authorization-server outage throws a retryable
93
+ * `unavailable`.
91
94
  */
92
95
  fetch(input: string | URL, init?: RequestInit): Promise<Response>;
93
96
  }
@@ -209,11 +212,11 @@ export declare const API_OPTIONS: import("../config-schema.js").Field<unknown, u
209
212
  };
210
213
  tools: import("../config-schema.js").Field<unknown[], readonly unknown[] | undefined, true>;
211
214
  title: import("../config-schema.js").Field<unknown, unknown, true>;
215
+ authScope: import("../config-schema.js").Field<unknown, unknown, true>;
216
+ maxResultBytes: import("../config-schema.js").Field<unknown, unknown, true>;
212
217
  description: import("../config-schema.js").Field<unknown, unknown, true>;
213
218
  testCredential: import("../config-schema.js").Field<unknown, unknown, true>;
214
219
  testCredentials: import("../config-schema.js").Field<unknown, unknown, true>;
215
- authScope: import("../config-schema.js").Field<unknown, unknown, true>;
216
- maxResultBytes: import("../config-schema.js").Field<unknown, unknown, true>;
217
220
  validateArgs: import("../config-schema.js").Field<unknown, unknown, true>;
218
221
  };
219
222
  };
@@ -234,8 +237,10 @@ export interface ApiOAuthHooks {
234
237
  consumeAuthError(ctx: ConnectorContext): Promise<void>;
235
238
  /** Requires callbackParams with a nonempty state, including without PKCE. */
236
239
  finishAuth(code: string, ctx: ConnectorContext, callbackParams: URLSearchParams): Promise<void>;
237
- /** The handler-facing accessor for one call's context. */
238
- access(ctx: ConnectorContext): ApiOAuthAccess;
240
+ /** The handler-facing accessor for one call's context; a write's request is never resent. */
241
+ access(ctx: ConnectorContext, call: {
242
+ write: boolean;
243
+ }): ApiOAuthAccess;
239
244
  }
240
245
  /**
241
246
  * A static connector; every tool passes {@link checkToolContract} first.