@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
@@ -1,12 +1,23 @@
1
+ import { Effect, Exit } from "effect";
2
+ import { registerConnectorVocabulary } from "../operation-vocabulary.js";
3
+ import { causeError, runEdge } from "../runtime/run.js";
4
+ import { credentialProbe } from "../runtime/credential-probe.js";
5
+ import { ContinuationBinding, serviceFor, setViewService, settleOnClose, duringViewEffect } from "../runtime/call.js";
6
+ import { registerCallEntry, toolEntry } from "../runtime/call-entry.js";
1
7
  import { ConnectorCallError, networkErrorCode, unavailableCallError, WithheldTextError } from "../errors.js";
2
8
  import { attachFailureFacts, carryFailureFacts, errorLabel } from "../operator-record.js";
3
- import { compileValidator, validateCatalogToolInput } from "../validate.js";
9
+ import { compileValidator, normalizeToolInput, validateCatalogToolInput } from "../validate.js";
4
10
  import { array, assertKnownOptions, instance, keys, optionsOf, strings } from "../config-schema.js";
5
11
  import { describedEndpoint, describedOrigin, describedTools } from "../described.js";
6
12
  import { READ_ONLY, CALL_ADMISSION, CREDENTIAL, USAGE_GUIDE } from "./option-shapes.js";
7
13
  import { assertStaticToolNames } from "../tool-name.js";
8
14
  import { registerInvocationAuth } from "../invocation-auth.js";
9
15
  import { redactCatalog, redactSentSecrets, sentSecretsFetch, trackCredentialReads } from "../sent-secrets.js";
16
+ import { callClassification } from "../call-classification.js";
17
+ import { classifyTool } from "../tool-safety.js";
18
+ import { closeProviderCall, enterProviderBoundary, inLogicalCall, knownProviderFailure, nestedProviderRequests, providerBoundary, providerCallContext, providerFetch, providerRequests, tracksRequests, } from "../provider-call.js";
19
+ import { providerCallFailure, providerCallResult } from "../write-outcome.js";
20
+ import { deriveContext } from "../derived-context.js";
10
21
  export function defined(value) {
11
22
  return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined));
12
23
  }
@@ -132,31 +143,62 @@ export function apiConnector(id, opts, oauth) {
132
143
  callAdmission: opts.callAdmission,
133
144
  usageGuide: opts.usageGuide,
134
145
  credential: opts.credential,
135
- testCredential: opts.testCredential,
136
- testCredentials: opts.testCredentials,
146
+ testCredential: opts.testCredential
147
+ ? (value, ctx) => credentialProbe(ctx, { value }, (view) => settleOnClose(view, () => opts.testCredential(value, view)))
148
+ : undefined,
149
+ testCredentials: opts.testCredentials
150
+ ? (values, ctx) => credentialProbe(ctx, values, (view) => settleOnClose(view, () => opts.testCredentials(values, view)))
151
+ : undefined,
137
152
  }),
138
153
  ...(oauth
139
154
  ? {
140
- status: oauth.status,
141
- startAuth: oauth.startAuth,
142
- disconnectAuth: oauth.disconnectAuth,
143
- verifyState: oauth.verifyState,
144
- verifyCallbackIssuer: oauth.verifyCallbackIssuer,
145
- consumeAuthError: oauth.consumeAuthError,
146
- finishAuth: oauth.finishAuth,
155
+ status: (ctx) => settleOnClose(ctx, () => oauth.status(ctx)),
156
+ startAuth: (ctx, options) => settleOnClose(ctx, () => oauth.startAuth(ctx, options)),
157
+ disconnectAuth: (ctx) => settleOnClose(ctx, () => oauth.disconnectAuth(ctx)),
158
+ // Callback work belongs to its request, including the route's
159
+ // uninterruptible exchange, rather than any resource call.
160
+ verifyState: (state, ctx) => settleOnClose(ctx, () => oauth.verifyState(state, ctx), true),
161
+ verifyCallbackIssuer: (issuer, ctx) => settleOnClose(ctx, () => oauth.verifyCallbackIssuer(issuer, ctx), true),
162
+ consumeAuthError: (ctx) => settleOnClose(ctx, () => oauth.consumeAuthError(ctx), true),
163
+ finishAuth: (code, ctx, callbackParams) => settleOnClose(ctx, () => oauth.finishAuth(code, ctx, callbackParams), true),
147
164
  }
148
165
  : {}),
149
166
  staticTools: defs,
150
167
  async listTools(ctx) {
151
- return redactCatalog(ctx, defs);
168
+ return settleOnClose(ctx, async () => redactCatalog(ctx, defs));
152
169
  },
153
- async callTool(name, args, ctx) {
154
- trackCredentialReads(ctx);
155
- const tool = byName.get(name);
156
- if (!tool) {
157
- throw new Error(`Unknown tool "${name}" on connector "${id}"`);
158
- }
159
- const input = args ?? {};
170
+ callTool: (name, args, ctx, options) => runEdge(core(name, args, ctx, options)),
171
+ };
172
+ const core = (name, args, ctx) => Effect.gen(function* () {
173
+ trackCredentialReads(ctx);
174
+ enterProviderBoundary(ctx, connector);
175
+ const tool = byName.get(name);
176
+ // Refusals before the handler runs are known failures: nothing was sent.
177
+ if (!tool) {
178
+ throw knownProviderFailure(new Error(`Unknown tool "${name}" on connector "${id}"`));
179
+ }
180
+ // `await` (not a bare promise return) so a handler that throws before
181
+ // its first await never sits handler-less for the thenable-adoption
182
+ // microtask — workerd and vitest both report that gap as an unhandled
183
+ // rejection even though the caller catches the failure.
184
+ // Derived, never mutated: the registry's context stays as it was, and
185
+ // the call state beside it (caller, admission permit, recovery facts,
186
+ // sent secrets) resolves through the handler's copy. The grant sends a
187
+ // write once: the registry's classification of this call decides, else
188
+ // the rule the registry would apply to the tool (INV-1).
189
+ const write = (callClassification(ctx) ?? classifyTool(tool)) === "write";
190
+ const callCtx = providerCallContext(ctx, providerRequests(ctx) ? classifyTool(tool) : write ? "write" : "read");
191
+ const handlerCtx = deriveContext(callCtx, {
192
+ fetch: providerFetch(callCtx, opts.title ?? id, false, sentSecretsFetch(ctx)),
193
+ ...(oauth ? { oauth: oauth.access(callCtx, { write }) } : {}),
194
+ });
195
+ setViewService(handlerCtx, ContinuationBinding, {
196
+ connection: serviceFor(ctx, ContinuationBinding)?.connection || id,
197
+ principal: serviceFor(ctx, ContinuationBinding)?.principal ?? null,
198
+ });
199
+ let handlerStarted = false;
200
+ const handled = yield* Effect.exit(Effect.gen(function* () {
201
+ const input = normalizeToolInput(args ?? {});
160
202
  if (validateArgs && tool.inputSchema) {
161
203
  const invalid = validateCatalogToolInput(tool.inputSchema, input, {
162
204
  address: `${id}.${name}`,
@@ -167,54 +209,98 @@ export function apiConnector(id, opts, oauth) {
167
209
  failClosed: true,
168
210
  }, { connector: id, tool });
169
211
  if (invalid)
170
- throw invalid;
212
+ throw knownProviderFailure(invalid);
171
213
  }
172
- // `await` (not a bare promise return) so a handler that throws before
173
- // its first await never sits handler-less for the thenable-adoption
174
- // microtask — workerd and vitest both report that gap as an unhandled
175
- // rejection even though the caller catches the failure.
176
- // Preserve the registry's context identity: private caller/provenance
177
- // markers belong to it, as does the grant its accessor reaches.
178
- const handlerCtx = Object.assign(ctx, {
179
- fetch: sentSecretsFetch(ctx),
180
- ...(oauth ? { oauth: oauth.access(ctx) } : {}),
181
- });
182
- try {
183
- return redactSentSecrets(ctx, await tool.handler(input, handlerCtx));
214
+ handlerStarted = true;
215
+ // The opaque handler may await a helper, swallow its rejection, or
216
+ // wait elsewhere. Its boundary remains call-owned; auxiliary helpers
217
+ // retain their separate request ownership. Ledger settlement below
218
+ // must see the close reason before this call's Promise rejects.
219
+ const native = toolEntry(tool);
220
+ return yield* native
221
+ ? duringViewEffect(callCtx, () => native(input, handlerCtx))
222
+ : Effect.tryPromise({
223
+ // Custom handlers retain their Promise revocation bridge and
224
+ // synchronous entry, including their helpers' fact ordering.
225
+ try: () => settleOnClose(callCtx, () => Promise.resolve(tool.handler(input, handlerCtx))),
226
+ catch: (error) => error,
227
+ });
228
+ }));
229
+ if (Exit.isFailure(handled)) {
230
+ const error = causeError(handled.cause, callCtx.signal);
231
+ // Settled before anything is decided or reported: a request that has
232
+ // not left by now (a sibling awaiting its credential) never will.
233
+ closeProviderCall(callCtx);
234
+ if (!handlerStarted) {
235
+ throw knownProviderFailure(error instanceof ConnectorCallError
236
+ ? error
237
+ : new ConnectorCallError("invalid_args", `Cannot validate arguments for "${id}.${name}": its inputSchema could not be evaluated`));
184
238
  }
185
- catch (error) {
186
- // The request's own abort reason, by identity, is the caller's.
187
- if (ctx.signal?.aborted === true && error === ctx.signal.reason)
239
+ // A handler owns its destinations. ctx.baseUrl is Connecta's inbound
240
+ // URL, so it must never masquerade as the failed downstream host.
241
+ const settle = (failure) => redactSentSecrets(ctx, providerCallFailure(handlerCtx, { title: opts.title ?? id }, failure, {
242
+ dispatched: true,
243
+ fallback: write ? "write" : "read",
244
+ finalize: true,
245
+ // Only a declared provider's ledger can see every request.
246
+ untracked: !tracksRequests(connector),
247
+ }));
248
+ // The request's own abort reason, by identity, is the caller's. The
249
+ // invocation reports it for its logical call; any other write's is
250
+ // settled like any other failure: it may have left.
251
+ if (ctx.signal?.aborted === true && error === ctx.signal.reason) {
252
+ if (!write || inLogicalCall(ctx))
188
253
  throw error;
189
- // A handler owns its destinations. ctx.baseUrl is Connecta's inbound
190
- // URL, so it must never masquerade as the failed downstream host.
191
- if (error instanceof ConnectorCallError)
192
- throw redactSentSecrets(ctx, error);
193
- if (!networkErrorCode(error)) {
194
- // Anything else is a runtime's, parser's, or stream's account of
195
- // what the handler read (a JSON parser quotes the reply it choked
196
- // on; a body stream rejects with whatever the runtime says), so it
197
- // is told in connecta's words, classified as the original would
198
- // have been, and rebuilt without its cause or nested errors. A
199
- // handler that means the agent to read its words throws a
200
- // ConnectorCallError. No host is named: connecta does not know
201
- // which destination the handler read.
202
- const kind = errorLabel(error);
203
- throw attachFailureFacts(carryFailureFacts(error, new WithheldTextError(`Connector "${id}" tool "${name}" handler failed` +
204
- `${kind ? ` (${kind})` : ""}. Its text is withheld because it ` +
205
- "can quote what the downstream sent.", error)), { step: "handler" });
206
- }
207
- throw unavailableCallError(error, undefined, undefined, ctx.signal);
254
+ throw settle(error);
208
255
  }
209
- },
210
- };
256
+ if (error instanceof ConnectorCallError)
257
+ throw settle(error);
258
+ if (!networkErrorCode(error)) {
259
+ // Anything else is a runtime's, parser's, or stream's account of
260
+ // what the handler read (a JSON parser quotes the reply it choked
261
+ // on; a body stream rejects with whatever the runtime says), so it
262
+ // is told in connecta's words, classified as the original would
263
+ // have been, and rebuilt without its cause or nested errors. A
264
+ // handler that means the agent to read its words throws a
265
+ // ConnectorCallError. No host is named: connecta does not know
266
+ // which destination the handler read.
267
+ const kind = errorLabel(error);
268
+ throw settle(attachFailureFacts(carryFailureFacts(error, new WithheldTextError(`Connector "${id}" tool "${name}" handler failed` +
269
+ `${kind ? ` (${kind})` : ""}. Its text is withheld because it ` +
270
+ "can quote what the downstream sent.", error)), { step: "handler" }));
271
+ }
272
+ // A handler is opaque: by the time its fetch failed it may already
273
+ // have sent the write, so no network code proves a write unsent.
274
+ const unreachable = unavailableCallError(error, undefined, undefined, ctx.signal);
275
+ // A raw handler with no tracked requests remains opaque, as before.
276
+ // Once guarded requests exist, its own or a nested api() boundary's,
277
+ // the ledgers supply the dispatch proof.
278
+ if (providerRequests(handlerCtx)?.length || nestedProviderRequests(handlerCtx).length)
279
+ throw settle(unreachable);
280
+ throw providerCallFailure(ctx, { title: opts.title ?? id }, unreachable, {
281
+ dispatched: true,
282
+ fallback: classifyTool(tool),
283
+ });
284
+ }
285
+ closeProviderCall(callCtx);
286
+ // A write an undeclared 401 left unknown fails however its handler returned.
287
+ const unknown = providerCallResult(handlerCtx, write ? "write" : "read");
288
+ if (unknown)
289
+ throw redactSentSecrets(ctx, unknown);
290
+ return redactSentSecrets(ctx, handled.value);
291
+ }).pipe(Effect.catchDefect((error) => Effect.fail(error)));
292
+ // This boundary's identity in a logical call, fixed now: this object with
293
+ // this function, never whatever the property or a copy holds by then.
294
+ providerBoundary(connector);
295
+ registerCallEntry(connector, core);
211
296
  if (oauth)
212
297
  registerInvocationAuth(connector, async (ctx) => {
213
298
  // The built-in static OAuth status only reads the stored grant. It never
214
299
  // refreshes, invokes a handler, or sends a downstream request.
215
- if ((await oauth.status(ctx)).state === "auth_required") {
300
+ if ((await settleOnClose(ctx, () => oauth.status(ctx))).state === "auth_required") {
216
301
  throw new ConnectorCallError("downstream_oauth_required", `Connector "${id}" requires authorization. Call authorize_connector.`);
217
302
  }
218
303
  });
304
+ registerConnectorVocabulary(connector, opts.tools);
219
305
  return connector;
220
306
  }
@@ -1,3 +1,5 @@
1
+ export { retryAfterMs } from "../http-policy.js";
2
+ import { type ProviderRequest } from "../provider-call.js";
1
3
  import type { ConnectorContext } from "../types.js";
2
4
  /** The methods a hand-written provider surface actually uses. */
3
5
  type GuardedMethod = "GET" | "HEAD" | "POST" | "PUT" | "PATCH" | "DELETE";
@@ -43,6 +45,18 @@ export interface GuardedRequest {
43
45
  * up front: the ceiling still bounds what is read, never what is sent.
44
46
  */
45
47
  prefixOnly?: boolean;
48
+ /** Trusted per-operation evidence (e.g. Breeze writes use GET); otherwise the tool's verdict applies. */
49
+ classification?: "read" | "write";
50
+ /** Provider-declared request that cannot perform the logical resource write. */
51
+ auxiliary?: boolean;
52
+ /**
53
+ * Replay proof for direct transport users: the genuine, legal idempotency
54
+ * key its vendor honors that this request carries (among `visibleHeaders`),
55
+ * set only then. An operation hint (a PUT, a content address) is never
56
+ * this proof. Never overrides a served write, and recorded on the logical
57
+ * call so key-reuse advice can name it (`keyProtectsCall`).
58
+ */
59
+ idempotencyKey?: string;
46
60
  }
47
61
  /**
48
62
  * One downstream response, read under the connector's byte ceiling.
@@ -84,8 +98,6 @@ interface GuardedResponse {
84
98
  truncated: boolean;
85
99
  }>;
86
100
  }
87
- /** Parse delta-seconds or an HTTP-date into a non-negative wait window. */
88
- export declare function retryAfterMs(headers: Headers): number | undefined;
89
101
  /**
90
102
  * Turn one response into the provider's own result, or throw the provider's
91
103
  * own typed failure. This is where status codes acquire meaning, and it is
@@ -95,9 +107,11 @@ type GuardedResponseMapper<T> = (response: GuardedResponse, ctx: ConnectorContex
95
107
  export interface GuardedFetchOptions {
96
108
  /**
97
109
  * Provider name as it appears in normalized failure prose — "Cloudflare",
98
- * "Notion". Used for messages only; it is never parsed.
110
+ * "Vercel". Used for messages only; it is never parsed.
99
111
  */
100
112
  provider: string;
113
+ /** Provider-declared auth/metadata work that cannot perform the logical write. */
114
+ auxiliary?: boolean;
101
115
  /**
102
116
  * Absolute base URL. Its origin and path prefix are the confinement: every
103
117
  * request resolves beneath it or is refused.
@@ -133,29 +147,49 @@ export interface GuardedFetchOptions {
133
147
  * authentication, so a refused request never resolves a credential.
134
148
  */
135
149
  admit?: (url: URL, request: GuardedRequest) => void;
150
+ /**
151
+ * Reviewed vendor evidence that the vendor authenticates a request before
152
+ * it acts on it. Without it, a write answered 401 has an unknown outcome:
153
+ * a server may act on a request before it rejects the credential. With it,
154
+ * a 401 that `matches` is that write's refusal. Declare it only where the
155
+ * vendor's documentation says so, cite that documentation in `evidence` and
156
+ * in the provider's evidence review, and keep `matches` narrow. Of the
157
+ * maintained providers only Stripe declares it. Checked at construction.
158
+ */
159
+ authBeforeExecution?: AuthBeforeExecution;
136
160
  }
137
- /** Sends one already-guarded request on behalf of one call's context. */
138
- type GuardedFetcher = (url: string, init: RequestInit, ctx: ConnectorContext) => Promise<Response>;
139
161
  /**
140
- * The transport half of a guarded connector that authenticates through its
141
- * own `api()` OAuth grant: no header of the helper's making, and every request
142
- * sent through `ctx.oauth.fetch`, which adds the calling owner's bearer token,
143
- * refuses any origin outside the grant's `apiOrigins`, and spends one
144
- * coordinated refresh and one replay on a 401 before answering
145
- * `auth_required`. Spread it into the options:
146
- * `guardedFetch({ provider, baseUrl, maxResponseBytes, ...oauthBearer(provider) })`.
147
- *
148
- * Confinement still happens here first, so a request reaches the grant only
149
- * once it is provably beneath `baseUrl`; the grant's origin check is the second
150
- * fence, not the only one.
162
+ * A trusted per-vendor review: types cannot verify what a vendor does, so the
163
+ * reviewer checks the cited documentation and the predicate against it.
151
164
  */
165
+ interface AuthBeforeExecution {
166
+ /** The vendor's documented guarantee: its URL and what it says. Never empty. */
167
+ evidence: string;
168
+ /**
169
+ * Whether this raw 401 is one the evidence covers, from its status and
170
+ * headers and the request's method and provider-relative path only: never a
171
+ * mapped code or prose.
172
+ */
173
+ matches: (answer: {
174
+ status: 401;
175
+ headers: Headers;
176
+ method: string;
177
+ path: string;
178
+ }) => boolean;
179
+ }
180
+ /** Sends one already-guarded request on behalf of one call's context. */
181
+ type GuardedFetcher = (url: string, init: RequestInit, ctx: ConnectorContext) => Promise<Response>;
152
182
  export declare function oauthBearer(provider: string): Pick<GuardedFetchOptions, "authenticate" | "fetch">;
153
183
  /** Send one guarded request and map its response with provider knowledge. */
154
184
  export type GuardedTransport = <T>(request: GuardedRequest, ctx: ConnectorContext, map: GuardedResponseMapper<T>) => Promise<T>;
185
+ /**
186
+ * Test-only legacy response lookup for renewal-provenance fixtures outside
187
+ * the kit. Production renewal uses the kit ledger. Undefined for other objects.
188
+ */
189
+ export declare function answeredRequest(response: object): ProviderRequest | undefined;
155
190
  /**
156
191
  * Build the transport a connector sends every request through. `maxResponseBytes`
157
192
  * is required rather than defaulted: what counts as an absurd response is a fact
158
193
  * about the API, not about HTTP.
159
194
  */
160
195
  export declare function guardedFetch(options: GuardedFetchOptions): GuardedTransport;
161
- export {};