@zackbart/connecta 0.34.1 → 0.36.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 (441) hide show
  1. package/CHANGELOG.md +418 -0
  2. package/README.md +65 -105
  3. package/SECURITY.md +3 -2
  4. package/bin/connecta.mjs +41 -16
  5. package/bin/version.mjs +1 -1
  6. package/dist/access-tokens.d.ts +2 -1
  7. package/dist/access-tokens.js +66 -30
  8. package/dist/activity.d.ts +1 -1
  9. package/dist/activity.js +2 -0
  10. package/dist/agent-config.d.ts +23 -0
  11. package/dist/agent-config.js +59 -0
  12. package/dist/agent-description.js +16 -0
  13. package/dist/agent-identity.js +4 -4
  14. package/dist/agent-observation.js +39 -0
  15. package/dist/auth/clerk-sdk/client.d.ts +2 -0
  16. package/dist/auth/clerk-sdk/generated.js +554 -563
  17. package/dist/auth/clerk-transport.js +70 -3
  18. package/dist/auth/clerk.d.ts +13 -0
  19. package/dist/auth/clerk.js +653 -246
  20. package/dist/auth/cloudflare-access.js +46 -42
  21. package/dist/auth/downstream-client-metadata.js +2 -2
  22. package/dist/auth/downstream-oauth.js +2044 -1161
  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 +751 -281
  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 +29 -7
  53. package/dist/connectors/api-connector.js +145 -57
  54. package/dist/connectors/guarded-fetch.d.ts +51 -17
  55. package/dist/connectors/guarded-fetch.js +215 -121
  56. package/dist/connectors/negotiation-cache.js +20 -10
  57. package/dist/connectors/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 +227 -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 +379 -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/contract.d.ts +8 -3
  109. package/dist/operator-ui/generated.js +4 -4
  110. package/dist/operator-ui/model.d.ts +2 -3
  111. package/dist/program-writes.js +47 -26
  112. package/dist/provider-call-facts.d.ts +115 -0
  113. package/dist/provider-call-facts.js +182 -0
  114. package/dist/provider-call.d.ts +112 -0
  115. package/dist/provider-call.js +271 -0
  116. package/dist/provider.d.ts +65 -31
  117. package/dist/provider.js +116 -39
  118. package/dist/providers/_shared/google/hatch.js +91 -0
  119. package/dist/providers/_shared/google/kit.js +427 -0
  120. package/dist/providers/_shared/google/result-size.js +15 -2
  121. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  122. package/dist/providers/_shared/google/service-account.js +8 -4
  123. package/dist/providers/_shared/google/workspace.d.ts +6 -210
  124. package/dist/providers/_shared/google/workspace.js +6 -425
  125. package/dist/providers/_shared/rest/compact-index.js +86 -0
  126. package/dist/providers/_shared/rest/kit.js +146 -0
  127. package/dist/providers/_shared/rest/operation-index.js +230 -14
  128. package/dist/providers/_shared/rest/response-media.js +11 -0
  129. package/dist/providers/_shared/rest/value-safety.js +353 -195
  130. package/dist/providers/_shared/sensitive-fields.js +27 -0
  131. package/dist/providers/breeze/api.js +584 -0
  132. package/dist/providers/breeze/index.d.ts +1 -3
  133. package/dist/providers/breeze/index.js +67 -1420
  134. package/dist/providers/breeze/openapi.generated.js +60 -0
  135. package/dist/providers/breeze/skill.generated.js +2 -6
  136. package/dist/providers/breeze/tools.js +696 -0
  137. package/dist/providers/ccb/api.js +496 -0
  138. package/dist/providers/ccb/index.d.ts +15 -37
  139. package/dist/providers/ccb/index.js +77 -1702
  140. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  141. package/dist/providers/ccb/lib/constants.js +74 -0
  142. package/dist/providers/ccb/lib/guide.js +9 -0
  143. package/dist/providers/ccb/lib/verdicts.js +387 -0
  144. package/dist/providers/ccb/openapi.generated.js +397 -0
  145. package/dist/providers/ccb/safety.js +295 -0
  146. package/dist/providers/ccb/skill.generated.js +2 -6
  147. package/dist/providers/ccb/tools.js +853 -0
  148. package/dist/providers/cloudflare/api.js +1066 -0
  149. package/dist/providers/cloudflare/index.d.ts +5 -22
  150. package/dist/providers/cloudflare/index.js +79 -197
  151. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  152. package/dist/providers/cloudflare/lib/config.js +2 -0
  153. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  154. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  155. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  156. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  157. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  158. package/dist/providers/cloudflare/openapi.generated.js +4 -3
  159. package/dist/providers/cloudflare/{value-safety.js → safety.js} +487 -0
  160. package/dist/providers/cloudflare/skill.generated.js +2 -10
  161. package/dist/providers/cloudflare/tools.js +360 -0
  162. package/dist/providers/docs/api.js +51 -0
  163. package/dist/providers/docs/index.d.ts +1 -12
  164. package/dist/providers/docs/index.js +53 -1165
  165. package/dist/providers/docs/lib/constants.d.ts +18 -0
  166. package/dist/providers/docs/lib/constants.js +18 -0
  167. package/dist/providers/docs/lib/discovery.js +26 -0
  168. package/dist/providers/docs/lib/requests.js +48 -0
  169. package/dist/providers/docs/lib/schemas.js +168 -0
  170. package/dist/providers/docs/openapi.generated.js +16 -0
  171. package/dist/providers/docs/safety.js +54 -0
  172. package/dist/providers/docs/skill.generated.js +2 -6
  173. package/dist/providers/docs/tools.js +801 -0
  174. package/dist/providers/drive/api.js +177 -0
  175. package/dist/providers/drive/index.d.ts +1 -12
  176. package/dist/providers/drive/index.js +38 -1448
  177. package/dist/providers/drive/lib/constants.d.ts +6 -0
  178. package/dist/providers/drive/lib/constants.js +6 -0
  179. package/dist/providers/drive/lib/contracts.js +532 -0
  180. package/dist/providers/drive/lib/hatch.js +197 -0
  181. package/dist/providers/drive/openapi.generated.js +77 -0
  182. package/dist/providers/drive/safety.js +90 -0
  183. package/dist/providers/drive/skill.generated.js +2 -6
  184. package/dist/providers/drive/tools.js +1290 -0
  185. package/dist/providers/forms/api.js +71 -0
  186. package/dist/providers/forms/index.d.ts +1 -12
  187. package/dist/providers/forms/index.js +49 -1145
  188. package/dist/providers/forms/lib/constants.d.ts +14 -0
  189. package/dist/providers/forms/lib/constants.js +19 -0
  190. package/dist/providers/forms/lib/hatch.js +72 -0
  191. package/dist/providers/forms/openapi.generated.js +23 -0
  192. package/dist/providers/forms/safety.js +34 -0
  193. package/dist/providers/forms/skill.generated.js +2 -8
  194. package/dist/providers/forms/tools.js +1023 -0
  195. package/dist/providers/github/api.js +150 -0
  196. package/dist/providers/github/index.d.ts +4 -5
  197. package/dist/providers/github/index.js +30 -87
  198. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  199. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  200. package/dist/providers/github/lib/discovery.js +132 -0
  201. package/dist/providers/github/lib/operations.js +58 -0
  202. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  203. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  204. package/dist/providers/github/openapi.generated.js +1216 -0
  205. package/dist/providers/github/safety.js +216 -0
  206. package/dist/providers/github/skill.generated.js +2 -5
  207. package/dist/providers/github/tools.js +506 -0
  208. package/dist/providers/gmail/api.js +114 -0
  209. package/dist/providers/gmail/index.d.ts +1 -12
  210. package/dist/providers/gmail/index.js +73 -1621
  211. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  212. package/dist/providers/gmail/lib/constants.js +16 -0
  213. package/dist/providers/gmail/lib/index.js +173 -0
  214. package/dist/providers/gmail/lib/schemas.js +176 -0
  215. package/dist/providers/gmail/lib/threading.js +120 -0
  216. package/dist/providers/gmail/openapi.generated.js +92 -0
  217. package/dist/providers/gmail/safety.js +21 -0
  218. package/dist/providers/gmail/skill.generated.js +2 -6
  219. package/dist/providers/gmail/tools.js +1435 -0
  220. package/dist/providers/overflow/api.js +1008 -0
  221. package/dist/providers/overflow/index.d.ts +1 -17
  222. package/dist/providers/overflow/index.js +60 -1488
  223. package/dist/providers/overflow/skill.generated.js +2 -5
  224. package/dist/providers/overflow/tools.js +873 -0
  225. package/dist/providers/planning-center/api.js +467 -0
  226. package/dist/providers/planning-center/index.d.ts +4 -35
  227. package/dist/providers/planning-center/index.js +69 -2445
  228. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  229. package/dist/providers/planning-center/lib/constants.js +83 -0
  230. package/dist/providers/planning-center/lib/discovery.js +40 -0
  231. package/dist/providers/planning-center/lib/guide.js +39 -0
  232. package/dist/providers/planning-center/lib/json-api.js +83 -0
  233. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  234. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  235. package/dist/providers/planning-center/safety.js +188 -0
  236. package/dist/providers/planning-center/skill.generated.js +2 -27
  237. package/dist/providers/planning-center/tools.js +1010 -0
  238. package/dist/providers/quickbooks/api.js +299 -0
  239. package/dist/providers/quickbooks/index.d.ts +13 -0
  240. package/dist/providers/quickbooks/index.js +93 -0
  241. package/dist/providers/quickbooks/lib/query.js +118 -0
  242. package/dist/providers/quickbooks/lib/writes.js +168 -0
  243. package/dist/providers/quickbooks/safety.js +222 -0
  244. package/dist/providers/quickbooks/skill.generated.js +5 -0
  245. package/dist/providers/quickbooks/tools.js +117 -0
  246. package/dist/providers/sheets/api.js +133 -0
  247. package/dist/providers/sheets/index.d.ts +4 -16
  248. package/dist/providers/sheets/index.js +61 -1172
  249. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  250. package/dist/providers/sheets/lib/constants.js +14 -0
  251. package/dist/providers/sheets/lib/hatch.js +163 -0
  252. package/dist/providers/sheets/lib/requests.js +105 -0
  253. package/dist/providers/sheets/lib/schemas.js +138 -0
  254. package/dist/providers/sheets/openapi.generated.js +30 -0
  255. package/dist/providers/sheets/safety.js +27 -0
  256. package/dist/providers/sheets/skill.generated.js +2 -7
  257. package/dist/providers/sheets/tools.js +733 -0
  258. package/dist/providers/slides/api.js +147 -0
  259. package/dist/providers/slides/index.d.ts +2 -10
  260. package/dist/providers/slides/index.js +48 -2555
  261. package/dist/providers/slides/lib/constants.d.ts +11 -0
  262. package/dist/providers/slides/lib/constants.js +11 -0
  263. package/dist/providers/slides/lib/requests.js +60 -0
  264. package/dist/providers/slides/lib/schemas.js +565 -0
  265. package/dist/providers/slides/openapi.generated.js +18 -0
  266. package/dist/providers/slides/skill.generated.js +2 -6
  267. package/dist/providers/slides/tools.js +1968 -0
  268. package/dist/providers/stripe/api.js +401 -0
  269. package/dist/providers/stripe/index.d.ts +5 -27
  270. package/dist/providers/stripe/index.js +74 -210
  271. package/dist/providers/stripe/lib/config.d.ts +4 -0
  272. package/dist/providers/stripe/lib/config.js +2 -0
  273. package/dist/providers/stripe/openapi.generated.js +4 -3
  274. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  275. package/dist/providers/stripe/skill.generated.js +2 -11
  276. package/dist/providers/stripe/tools.js +77 -0
  277. package/dist/providers/tithely/api.js +531 -0
  278. package/dist/providers/tithely/index.d.ts +17 -0
  279. package/dist/providers/tithely/index.js +86 -965
  280. package/dist/providers/tithely/skill.generated.js +2 -5
  281. package/dist/providers/tithely/tools.js +426 -0
  282. package/dist/providers/vercel/api.js +551 -0
  283. package/dist/providers/vercel/index.d.ts +9 -25
  284. package/dist/providers/vercel/index.js +65 -260
  285. package/dist/providers/vercel/lib/config.d.ts +2 -0
  286. package/dist/providers/vercel/lib/config.js +2 -0
  287. package/dist/providers/vercel/lib/index.js +117 -0
  288. package/dist/providers/vercel/lib/logs.js +100 -0
  289. package/dist/providers/vercel/lib/pin.js +270 -0
  290. package/dist/providers/vercel/openapi.generated.js +10 -5
  291. package/dist/providers/vercel/{value-safety.js → safety.js} +247 -38
  292. package/dist/providers/vercel/skill.generated.js +2 -7
  293. package/dist/providers/vercel/tools.js +642 -0
  294. package/dist/redaction-identity.js +47 -0
  295. package/dist/redaction-marker.js +125 -0
  296. package/dist/registry.d.ts +21 -15
  297. package/dist/registry.js +409 -376
  298. package/dist/routes/access-tokens.js +1 -1
  299. package/dist/routes/actor-labels.js +1 -1
  300. package/dist/routes/connect.js +1 -1
  301. package/dist/routes/dispatch.js +103 -0
  302. package/dist/routes/mcp.js +170 -79
  303. package/dist/routes/oauth.js +6 -1
  304. package/dist/routes/operator.js +2 -2
  305. package/dist/routes/shared.d.ts +5 -4
  306. package/dist/routes/shared.js +244 -177
  307. package/dist/routes/skills.js +10 -8
  308. package/dist/routes/ui-config.js +27 -3
  309. package/dist/routes/ui-data.js +21 -20
  310. package/dist/routes/ui.js +1 -1
  311. package/dist/runtime/call-admission.js +0 -26
  312. package/dist/runtime/call-entry.js +30 -0
  313. package/dist/runtime/call.js +552 -0
  314. package/dist/runtime/connector-scope.js +7 -0
  315. package/dist/runtime/credential-probe.js +34 -0
  316. package/dist/runtime/executor.js +40 -0
  317. package/dist/runtime/native-storage.js +63 -0
  318. package/dist/runtime/registry.js +27 -0
  319. package/dist/runtime/request-scope.js +72 -0
  320. package/dist/runtime/run.js +15 -7
  321. package/dist/runtime/shared-read.js +34 -5
  322. package/dist/runtime/storage.js +34 -21
  323. package/dist/sent-secrets.d.ts +194 -37
  324. package/dist/sent-secrets.js +1743 -340
  325. package/dist/server.js +5 -56
  326. package/dist/skills.js +322 -223
  327. package/dist/sqlite.js +15 -14
  328. package/dist/storage/d1-copy.js +255 -0
  329. package/dist/storage/d1-driver.js +15 -0
  330. package/dist/storage/keys.js +28 -0
  331. package/dist/storage/sql-driver.js +88 -0
  332. package/dist/storage/sql-native.js +544 -0
  333. package/dist/storage/sql-schema.d.ts +6 -0
  334. package/dist/storage/sql-schema.js +15 -0
  335. package/dist/storage/sql.d.ts +14 -20
  336. package/dist/storage/sql.js +29 -535
  337. package/dist/timeout.js +0 -26
  338. package/dist/tool-safety.js +20 -10
  339. package/dist/types.d.ts +9 -109
  340. package/dist/ui.d.ts +1 -1
  341. package/dist/ui.js +0 -1
  342. package/dist/upward.js +3 -0
  343. package/dist/usage-guide.js +3 -1
  344. package/dist/validate.d.ts +4 -2
  345. package/dist/validate.js +86 -9
  346. package/dist/version.d.ts +1 -1
  347. package/dist/version.js +1 -1
  348. package/dist/worker.js +312 -292
  349. package/dist/workspace-subject.js +5 -1
  350. package/dist/write-outcome.js +454 -34
  351. package/documentation/README.md +28 -7
  352. package/documentation/architecture.md +2409 -255
  353. package/documentation/auth.md +867 -114
  354. package/documentation/code-mode.md +49 -16
  355. package/documentation/deploying.md +164 -20
  356. package/documentation/hosted-mcp-migration.md +460 -0
  357. package/documentation/integrating.md +129 -144
  358. package/documentation/meta-tools.md +409 -32
  359. package/documentation/operating.md +27 -3
  360. package/documentation/operator-tests.md +3 -0
  361. package/documentation/operator-ui.md +84 -48
  362. package/documentation/provider-auth-migration.md +16 -63
  363. package/documentation/provider-migration-0.29.md +10 -5
  364. package/documentation/provider-migration-0.35.md +975 -0
  365. package/documentation/providers.md +1347 -0
  366. package/examples/worker/AGENTS.md +23 -9
  367. package/examples/worker/README.md +254 -135
  368. package/examples/worker/alchemy.run.ts +116 -0
  369. package/examples/worker/gitignore +10 -0
  370. package/examples/worker/src/connecta.config.ts +23 -21
  371. package/examples/worker/wrangler.jsonc +14 -5
  372. package/guides/connecting-agents.md +157 -0
  373. package/guides/how-it-works.md +156 -0
  374. package/guides/safety-and-trust.md +153 -0
  375. package/package.json +30 -50
  376. package/templates/node/.env.example +3 -0
  377. package/templates/node/README.md +22 -2
  378. package/templates/node/docker-compose.yml +1 -0
  379. package/templates/node/package.json +3 -2
  380. package/templates/node/src/connecta.config.ts +8 -0
  381. package/dist/catalog-drift.d.ts +0 -138
  382. package/dist/catalog-drift.js +0 -578
  383. package/dist/operator-ui/agents.d.ts +0 -74
  384. package/dist/operator-ui/agents.js +0 -104
  385. package/dist/operator-ui/config-summary.js +0 -565
  386. package/dist/operator-ui/connection-map.js +0 -376
  387. package/dist/operator-ui/endpoints.js +0 -221
  388. package/dist/operator-ui/fix-prompts.d.ts +0 -18
  389. package/dist/operator-ui/fix-prompts.js +0 -87
  390. package/dist/operator-ui/health.js +0 -52
  391. package/dist/operator-ui/member-page.js +0 -97
  392. package/dist/operator-ui/overview.js +0 -123
  393. package/dist/operator-ui/setup-commands.js +0 -51
  394. package/dist/operator-ui/view.d.ts +0 -401
  395. package/dist/operator-ui/view.js +0 -705
  396. package/dist/providers/_shared/request-token.js +0 -83
  397. package/dist/providers/_shared/rest/dispatch.js +0 -41
  398. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  399. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  400. package/dist/providers/_shared/rest/tools.js +0 -569
  401. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  402. package/dist/providers/basecamp/index.d.ts +0 -45
  403. package/dist/providers/basecamp/index.js +0 -997
  404. package/dist/providers/basecamp/skill.generated.js +0 -9
  405. package/dist/providers/cloudflare/rest.d.ts +0 -37
  406. package/dist/providers/cloudflare/rest.js +0 -1097
  407. package/dist/providers/github/hosted.js +0 -218
  408. package/dist/providers/github/rest.js +0 -321
  409. package/dist/providers/infisical/index.d.ts +0 -7
  410. package/dist/providers/infisical/index.js +0 -713
  411. package/dist/providers/infisical/skill.generated.js +0 -8
  412. package/dist/providers/intercom/index.d.ts +0 -24
  413. package/dist/providers/intercom/index.js +0 -121
  414. package/dist/providers/intercom/skill.generated.js +0 -8
  415. package/dist/providers/linear/index.d.ts +0 -55
  416. package/dist/providers/linear/index.js +0 -537
  417. package/dist/providers/linear/skill.generated.js +0 -8
  418. package/dist/providers/mixpanel/index.d.ts +0 -59
  419. package/dist/providers/mixpanel/index.js +0 -472
  420. package/dist/providers/mixpanel/operations.js +0 -20
  421. package/dist/providers/mixpanel/rest.js +0 -603
  422. package/dist/providers/mixpanel/skill.generated.js +0 -10
  423. package/dist/providers/mixpanel/value-safety.js +0 -16
  424. package/dist/providers/notion/index.d.ts +0 -67
  425. package/dist/providers/notion/index.js +0 -368
  426. package/dist/providers/notion/openapi.generated.js +0 -75
  427. package/dist/providers/notion/rest.d.ts +0 -24
  428. package/dist/providers/notion/rest.js +0 -1226
  429. package/dist/providers/notion/skill.generated.js +0 -11
  430. package/dist/providers/notion/value-safety.js +0 -56
  431. package/dist/providers/revenuecat/index.d.ts +0 -51
  432. package/dist/providers/revenuecat/index.js +0 -697
  433. package/dist/providers/revenuecat/skill.generated.js +0 -11
  434. package/dist/providers/stripe/rest.d.ts +0 -14
  435. package/dist/providers/stripe/rest.js +0 -402
  436. package/dist/providers/vercel/rest.d.ts +0 -20
  437. package/dist/providers/vercel/rest.js +0 -1020
  438. package/dist/providers/wispr-flow/index.d.ts +0 -14
  439. package/dist/providers/wispr-flow/index.js +0 -117
  440. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  441. /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
  }
@@ -46,8 +57,9 @@ export const API_OPTIONS = optionsOf()({
46
57
  usageGuide: USAGE_GUIDE,
47
58
  credential: CREDENTIAL,
48
59
  oauth: optionsOf()({
49
- ...keys("authorizationEndpoint", "tokenEndpoint", "clientId", "clientSecret", "tokenEndpointAuthMethod", "scope", "pkce", "apiOrigins"),
60
+ ...keys("authorizationEndpoint", "tokenEndpoint", "clientId", "clientSecret", "tokenEndpointAuthMethod", "scope", "pkce", "apiOrigins", "revocationEndpoint", "revocationRequestFormat"),
50
61
  authorizationParams: strings(),
62
+ expectedCallbackParameters: strings(),
51
63
  tokenRequestHeaders: strings(),
52
64
  }),
53
65
  // A tool's annotations stay open: MCP lets a tool carry hints Connecta
@@ -132,31 +144,63 @@ export function apiConnector(id, opts, oauth) {
132
144
  callAdmission: opts.callAdmission,
133
145
  usageGuide: opts.usageGuide,
134
146
  credential: opts.credential,
135
- testCredential: opts.testCredential,
136
- testCredentials: opts.testCredentials,
147
+ testCredential: opts.testCredential
148
+ ? (value, ctx) => credentialProbe(ctx, { value }, (view) => settleOnClose(view, () => opts.testCredential(value, view)))
149
+ : undefined,
150
+ testCredentials: opts.testCredentials
151
+ ? (values, ctx) => credentialProbe(ctx, values, (view) => settleOnClose(view, () => opts.testCredentials(values, view)))
152
+ : undefined,
137
153
  }),
138
154
  ...(oauth
139
155
  ? {
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,
156
+ status: (ctx) => settleOnClose(ctx, () => oauth.status(ctx)),
157
+ startAuth: (ctx, options) => settleOnClose(ctx, () => oauth.startAuth(ctx, options)),
158
+ disconnectAuth: (ctx) => settleOnClose(ctx, () => oauth.disconnectAuth(ctx)),
159
+ // Callback work belongs to its request, including the route's
160
+ // uninterruptible exchange, rather than any resource call.
161
+ verifyState: (state, ctx) => settleOnClose(ctx, () => oauth.verifyState(state, ctx), true),
162
+ verifyCallbackParameters: (params, ctx) => settleOnClose(ctx, () => oauth.verifyCallbackParameters(params, ctx), true),
163
+ verifyCallbackIssuer: (issuer, ctx) => settleOnClose(ctx, () => oauth.verifyCallbackIssuer(issuer, ctx), true),
164
+ consumeAuthError: (ctx) => settleOnClose(ctx, () => oauth.consumeAuthError(ctx), true),
165
+ finishAuth: (code, ctx, callbackParams) => settleOnClose(ctx, () => oauth.finishAuth(code, ctx, callbackParams), true),
147
166
  }
148
167
  : {}),
149
168
  staticTools: defs,
150
169
  async listTools(ctx) {
151
- return redactCatalog(ctx, defs);
170
+ return settleOnClose(ctx, async () => redactCatalog(ctx, defs));
152
171
  },
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 ?? {};
172
+ callTool: (name, args, ctx, options) => runEdge(core(name, args, ctx, options)),
173
+ };
174
+ const core = (name, args, ctx) => Effect.gen(function* () {
175
+ trackCredentialReads(ctx);
176
+ enterProviderBoundary(ctx, connector);
177
+ const tool = byName.get(name);
178
+ // Refusals before the handler runs are known failures: nothing was sent.
179
+ if (!tool) {
180
+ throw knownProviderFailure(new Error(`Unknown tool "${name}" on connector "${id}"`));
181
+ }
182
+ // `await` (not a bare promise return) so a handler that throws before
183
+ // its first await never sits handler-less for the thenable-adoption
184
+ // microtask — workerd and vitest both report that gap as an unhandled
185
+ // rejection even though the caller catches the failure.
186
+ // Derived, never mutated: the registry's context stays as it was, and
187
+ // the call state beside it (caller, admission permit, recovery facts,
188
+ // sent secrets) resolves through the handler's copy. The grant sends a
189
+ // write once: the registry's classification of this call decides, else
190
+ // the rule the registry would apply to the tool (INV-1).
191
+ const write = (callClassification(ctx) ?? classifyTool(tool)) === "write";
192
+ const callCtx = providerCallContext(ctx, providerRequests(ctx) ? classifyTool(tool) : write ? "write" : "read");
193
+ const handlerCtx = deriveContext(callCtx, {
194
+ fetch: providerFetch(callCtx, opts.title ?? id, false, sentSecretsFetch(ctx)),
195
+ ...(oauth ? { oauth: oauth.access(callCtx, { write }) } : {}),
196
+ });
197
+ setViewService(handlerCtx, ContinuationBinding, {
198
+ connection: serviceFor(ctx, ContinuationBinding)?.connection || id,
199
+ principal: serviceFor(ctx, ContinuationBinding)?.principal ?? null,
200
+ });
201
+ let handlerStarted = false;
202
+ const handled = yield* Effect.exit(Effect.gen(function* () {
203
+ const input = normalizeToolInput(args ?? {});
160
204
  if (validateArgs && tool.inputSchema) {
161
205
  const invalid = validateCatalogToolInput(tool.inputSchema, input, {
162
206
  address: `${id}.${name}`,
@@ -167,54 +211,98 @@ export function apiConnector(id, opts, oauth) {
167
211
  failClosed: true,
168
212
  }, { connector: id, tool });
169
213
  if (invalid)
170
- throw invalid;
214
+ throw knownProviderFailure(invalid);
171
215
  }
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));
216
+ handlerStarted = true;
217
+ // The opaque handler may await a helper, swallow its rejection, or
218
+ // wait elsewhere. Its boundary remains call-owned; auxiliary helpers
219
+ // retain their separate request ownership. Ledger settlement below
220
+ // must see the close reason before this call's Promise rejects.
221
+ const native = toolEntry(tool);
222
+ return yield* native
223
+ ? duringViewEffect(callCtx, () => native(input, handlerCtx))
224
+ : Effect.tryPromise({
225
+ // Custom handlers retain their Promise revocation bridge and
226
+ // synchronous entry, including their helpers' fact ordering.
227
+ try: () => settleOnClose(callCtx, () => Promise.resolve(tool.handler(input, handlerCtx))),
228
+ catch: (error) => error,
229
+ });
230
+ }));
231
+ if (Exit.isFailure(handled)) {
232
+ const error = causeError(handled.cause, callCtx.signal);
233
+ // Settled before anything is decided or reported: a request that has
234
+ // not left by now (a sibling awaiting its credential) never will.
235
+ closeProviderCall(callCtx);
236
+ if (!handlerStarted) {
237
+ throw knownProviderFailure(error instanceof ConnectorCallError
238
+ ? error
239
+ : new ConnectorCallError("invalid_args", `Cannot validate arguments for "${id}.${name}": its inputSchema could not be evaluated`));
184
240
  }
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)
241
+ // A handler owns its destinations. ctx.baseUrl is Connecta's inbound
242
+ // URL, so it must never masquerade as the failed downstream host.
243
+ const settle = (failure) => redactSentSecrets(ctx, providerCallFailure(handlerCtx, { title: opts.title ?? id }, failure, {
244
+ dispatched: true,
245
+ fallback: write ? "write" : "read",
246
+ finalize: true,
247
+ // Only a declared provider's ledger can see every request.
248
+ untracked: !tracksRequests(connector),
249
+ }));
250
+ // The request's own abort reason, by identity, is the caller's. The
251
+ // invocation reports it for its logical call; any other write's is
252
+ // settled like any other failure: it may have left.
253
+ if (ctx.signal?.aborted === true && error === ctx.signal.reason) {
254
+ if (!write || inLogicalCall(ctx))
188
255
  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);
256
+ throw settle(error);
208
257
  }
209
- },
210
- };
258
+ if (error instanceof ConnectorCallError)
259
+ throw settle(error);
260
+ if (!networkErrorCode(error)) {
261
+ // Anything else is a runtime's, parser's, or stream's account of
262
+ // what the handler read (a JSON parser quotes the reply it choked
263
+ // on; a body stream rejects with whatever the runtime says), so it
264
+ // is told in connecta's words, classified as the original would
265
+ // have been, and rebuilt without its cause or nested errors. A
266
+ // handler that means the agent to read its words throws a
267
+ // ConnectorCallError. No host is named: connecta does not know
268
+ // which destination the handler read.
269
+ const kind = errorLabel(error);
270
+ throw settle(attachFailureFacts(carryFailureFacts(error, new WithheldTextError(`Connector "${id}" tool "${name}" handler failed` +
271
+ `${kind ? ` (${kind})` : ""}. Its text is withheld because it ` +
272
+ "can quote what the downstream sent.", error)), { step: "handler" }));
273
+ }
274
+ // A handler is opaque: by the time its fetch failed it may already
275
+ // have sent the write, so no network code proves a write unsent.
276
+ const unreachable = unavailableCallError(error, undefined, undefined, ctx.signal);
277
+ // A raw handler with no tracked requests remains opaque, as before.
278
+ // Once guarded requests exist, its own or a nested api() boundary's,
279
+ // the ledgers supply the dispatch proof.
280
+ if (providerRequests(handlerCtx)?.length || nestedProviderRequests(handlerCtx).length)
281
+ throw settle(unreachable);
282
+ throw providerCallFailure(ctx, { title: opts.title ?? id }, unreachable, {
283
+ dispatched: true,
284
+ fallback: classifyTool(tool),
285
+ });
286
+ }
287
+ closeProviderCall(callCtx);
288
+ // A write an undeclared 401 left unknown fails however its handler returned.
289
+ const unknown = providerCallResult(handlerCtx, write ? "write" : "read");
290
+ if (unknown)
291
+ throw redactSentSecrets(ctx, unknown);
292
+ return redactSentSecrets(ctx, handled.value);
293
+ }).pipe(Effect.catchDefect((error) => Effect.fail(error)));
294
+ // This boundary's identity in a logical call, fixed now: this object with
295
+ // this function, never whatever the property or a copy holds by then.
296
+ providerBoundary(connector);
297
+ registerCallEntry(connector, core);
211
298
  if (oauth)
212
299
  registerInvocationAuth(connector, async (ctx) => {
213
300
  // The built-in static OAuth status only reads the stored grant. It never
214
301
  // refreshes, invokes a handler, or sends a downstream request.
215
- if ((await oauth.status(ctx)).state === "auth_required") {
302
+ if ((await settleOnClose(ctx, () => oauth.status(ctx))).state === "auth_required") {
216
303
  throw new ConnectorCallError("downstream_oauth_required", `Connector "${id}" requires authorization. Call authorize_connector.`);
217
304
  }
218
305
  });
306
+ registerConnectorVocabulary(connector, opts.tools);
219
307
  return connector;
220
308
  }
@@ -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 {};