@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,111 +1,185 @@
1
+ import { upwardStep } from "./upward.js";
2
+ import { authCall, authInvoke, authFlow, registerAuth } from "./auth/native.js";
3
+ import { Context, Deferred, Effect, Scheduler } from "effect";
4
+ import { forkRequest, fromSignal, runEdge } from "./runtime/run.js";
5
+ import { RequestScope, requestOwner } from "./runtime/request-scope.js";
1
6
  import { boundedEchoText } from "./errors.js";
2
- function oauthFollowUp(connectorId) {
3
- return `Then retry the original call; connecta.search({ connector: ${JSON.stringify(connectorId)} }) inside execute_code confirms the catalog now loads.`;
7
+ // A write whose outcome is unknown is never told to retry after recovery: it
8
+ // re-reads its target first (INV-9). Each handoff keeps that variant beside
9
+ // it, since one handoff per connector serves every call in a request.
10
+ const RECONCILE = "re-read the target of the write that failed to check whether it took effect before any fresh call";
11
+ const afterUnknownWrite = new WeakMap();
12
+ function outcomeAware(build) {
13
+ const handoff = build(false);
14
+ afterUnknownWrite.set(handoff, build(true));
15
+ return handoff;
16
+ }
17
+ function oauthFollowUp(connectorId, unknownWrite) {
18
+ return `Then ${unknownWrite ? RECONCILE : "retry the original call"}; connecta.search({ connector: ${JSON.stringify(connectorId)} }) inside execute_code confirms the catalog now loads.`;
4
19
  }
5
20
  /** Shared with explicit authorization; errors never request a forced restart. */
6
- export async function authorizationHandoff(registry, baseUrl, requestScope, opts, args) {
7
- const connector = registry.getConnector(args.connector);
8
- if (!connector) {
9
- throw new Error(`Unknown connector "${boundedEchoText(args.connector)}"`);
10
- }
11
- if (!connector.startAuth) {
12
- if (!connector.credential) {
21
+ export function authorizationHandoff(registry, baseUrl, requestScope, opts, args) {
22
+ return runEdge(authorizationHandoffNative(registry, baseUrl, requestScope, opts, args));
23
+ }
24
+ const authorizationHandoffNative = /* @__PURE__ */ registerAuth(authorizationHandoff, function (registry, baseUrl, requestScope, opts, args) {
25
+ return authFlow(function* () {
26
+ const connector = registry.getConnector(args.connector);
27
+ if (!connector) {
28
+ throw new Error(`Unknown connector "${boundedEchoText(args.connector)}"`);
29
+ }
30
+ if (!connector.startAuth) {
31
+ if (!connector.credential) {
32
+ return outcomeAware((unknownWrite) => ({
33
+ connector: connector.id,
34
+ recovery: "unavailable",
35
+ message: `Connector "${connector.id}" declares neither downstream OAuth ` +
36
+ "nor an operator-managed credential slot. Update the connector " +
37
+ `or deployment configuration${unknownWrite ? `, then ${RECONCILE}` : " before retrying"}.`,
38
+ }));
39
+ }
40
+ const ctx = registry.contextFor(connector.id, baseUrl, requestScope);
41
+ if (!ctx.credential || !opts.credentialHandoffUrl) {
42
+ return {
43
+ connector: connector.id,
44
+ recovery: "unavailable",
45
+ message: "Credential recovery needs both a vault and the optional UI. Configure " +
46
+ "vault and ui in deployment code, then call " +
47
+ "authorize_connector again.",
48
+ };
49
+ }
50
+ const fields = connector.credential.fields?.map((field) => ({
51
+ name: field.name,
52
+ guidance: field.description ?? field.label,
53
+ })) ?? [
54
+ {
55
+ name: "value",
56
+ guidance: connector.credential.description ?? connector.credential.label,
57
+ },
58
+ ];
59
+ const operatorUrl = opts.credentialHandoffUrl;
60
+ const label = connector.credential.label;
61
+ return outcomeAware((unknownWrite) => ({
62
+ connector: connector.id,
63
+ recovery: "operator_config",
64
+ credential: { label, fields },
65
+ operatorUrl,
66
+ instructions: "Have the operator open operatorUrl, set and test the credential, " +
67
+ `then ${unknownWrite ? RECONCILE : "retry the original call"}. No redeploy is needed. ` +
68
+ (connector.authScope === "personal"
69
+ ? "Credential mutation requires the signed-in principal who owns this connection."
70
+ : "Shared credential mutation requires a signed-in human with access to this connector."),
71
+ }));
72
+ }
73
+ if (opts.oauthConnectUnavailable || !opts.oauthConnectUrl)
13
74
  return {
14
75
  connector: connector.id,
15
76
  recovery: "unavailable",
16
- message: `Connector "${connector.id}" declares neither downstream OAuth ` +
17
- "nor an operator-managed credential slot. Update the connector " +
18
- "or deployment configuration before retrying.",
77
+ message: opts.oauthConnectUnavailable ??
78
+ "OAuth connection requires an interactive provider and a credential vault with a handoff signing key.",
19
79
  };
20
- }
21
- const ctx = registry.contextFor(connector.id, baseUrl, requestScope);
22
- if (!ctx.credential || !opts.credentialHandoffUrl) {
80
+ if (!opts.canManageAuth?.(connector.id))
23
81
  return {
24
82
  connector: connector.id,
25
83
  recovery: "unavailable",
26
- message: "Credential recovery needs both a vault and the optional UI. Configure " +
27
- "vault and ui in deployment code, then call " +
28
- "authorize_connector again.",
84
+ message: "Your identity is not permitted to manage authentication for this connection.",
29
85
  };
30
- }
31
- const fields = connector.credential.fields?.map((field) => ({
32
- name: field.name,
33
- guidance: field.description ?? field.label,
34
- })) ?? [
35
- {
36
- name: "value",
37
- guidance: connector.credential.description ?? connector.credential.label,
38
- },
39
- ];
40
- return {
86
+ const authorizationUrl = yield* upwardStep(authInvoke(opts, "oauthConnectUrl", [connector.id, args.force]));
87
+ return outcomeAware((unknownWrite) => ({
41
88
  connector: connector.id,
42
- recovery: "operator_config",
43
- credential: {
44
- label: connector.credential.label,
45
- fields,
46
- },
47
- operatorUrl: opts.credentialHandoffUrl,
48
- instructions: "Have the operator open operatorUrl, set and test the credential, " +
49
- "then retry the original call. No redeploy is needed. " +
50
- (connector.authScope === "personal"
51
- ? "Credential mutation requires the signed-in principal who owns this connection."
52
- : "Shared credential mutation requires a signed-in human with access to this connector."),
53
- };
54
- }
55
- if (opts.oauthConnectUnavailable || !opts.oauthConnectUrl)
56
- return {
57
- connector: connector.id,
58
- recovery: "unavailable",
59
- message: opts.oauthConnectUnavailable ??
60
- "OAuth connection requires an interactive provider and a credential vault with a handoff signing key.",
61
- };
62
- if (!opts.canManageAuth?.(connector.id))
63
- return {
64
- connector: connector.id,
65
- recovery: "unavailable",
66
- message: "Your identity is not permitted to manage authentication for this connection.",
67
- };
68
- return {
69
- connector: connector.id,
70
- recovery: "oauth",
71
- status: "auth_required",
72
- authorizationUrl: await opts.oauthConnectUrl(connector.id, args.force),
73
- instructions: "Copy authorizationUrl exactly as returned; do not decode or re-encode it. Open it in a browser and sign in as the user who requested this connection. Connecta verifies your identity and permission before starting consent. " +
74
- oauthFollowUp(connector.id),
75
- };
89
+ recovery: "oauth",
90
+ status: "auth_required",
91
+ authorizationUrl,
92
+ instructions: "Copy authorizationUrl exactly as returned; do not decode or re-encode it. Open it in a browser and sign in as the user who requested this connection. Connecta verifies your identity and permission before starting consent. " +
93
+ oauthFollowUp(connector.id, unknownWrite),
94
+ }));
95
+ });
96
+ });
97
+ export function authorizeConnector(...args) {
98
+ return runEdge(authorizeConnectorNative(...args));
76
99
  }
77
- const requests = new WeakMap();
100
+ const authorizeConnectorNative = /* @__PURE__ */ registerAuth(authorizeConnector, function (...args) {
101
+ return authFlow(function* () {
102
+ const [registry, baseUrl, requestScope, , input] = args;
103
+ const handoff = yield* upwardStep(authCall(authorizationHandoff, [...args]));
104
+ const connector = registry.getConnector(input.connector);
105
+ if (connector.startAuth || !connector.credential)
106
+ return handoff;
107
+ const ctx = registry.contextFor(connector.id, baseUrl, requestScope);
108
+ try {
109
+ const values = yield* upwardStep(authCall(ctx.credential?.getAll, [], ctx.credential));
110
+ const fields = connector.credential.fields?.map((field) => field.name) ?? ["value"];
111
+ if (values && fields.every((field) => typeof values[field] === "string" && values[field].length > 0)) {
112
+ // A later HTTP request cannot know whether a previous call rejected this
113
+ // key. Keep its recovery fields and state the condition, without probing.
114
+ return {
115
+ ...handoff,
116
+ recovery: "ready",
117
+ message: "This connector's credential is configured. If a call to it just failed with an authentication or operator-configuration error, give this handoff to the operator; otherwise proceed with the call." +
118
+ (handoff.message ? ` If recovery is needed: ${handoff.message}` : ""),
119
+ };
120
+ }
121
+ }
122
+ catch {
123
+ // An unreadable or declaration-mismatched slot needs operator repair.
124
+ }
125
+ return handoff;
126
+ });
127
+ });
78
128
  /** Retain the admitted route's factory when program utilities share its scope. */
79
129
  export function bindAuthorizationHandoffs(scope, create) {
80
- if (!requests.has(scope))
81
- requests.set(scope, { create, enabled: true, handoffs: new Map() });
130
+ const retained = requestOwner(scope).retained;
131
+ retained.handoffs ??= { create, enabled: true, handoffs: new Map() };
82
132
  }
83
133
  export function enableAuthorizationHandoffs(scope, enabled) {
84
- const request = requests.get(scope);
134
+ const request = requestOwner(scope).retained.handoffs;
85
135
  if (request)
86
136
  request.enabled = enabled;
87
137
  }
88
- /** One promise per connector also bounds concurrent errors in a program. */
89
- export async function withAuthorizationHandoff(scope, error) {
90
- const request = requests.get(scope);
91
- if (!request?.enabled ||
92
- !error.nextAction ||
93
- !("tool" in error.nextAction) ||
94
- error.nextAction.tool !== "authorize_connector")
95
- return error;
96
- const connector = error.nextAction.arguments.connector;
97
- let handoff = request.handoffs.get(connector);
98
- if (!handoff) {
99
- handoff = request.create(connector);
100
- request.handoffs.set(connector, handoff);
101
- }
102
- try {
103
- const value = await handoff;
104
- return { ...error, ...value, message: error.message, ...(value.message ? { instructions: value.message } : {}) };
105
- }
106
- catch {
107
- // A signing/configuration failure cannot replace the original call failure
108
- // or leak an arbitrary vault exception into the recovery envelope.
109
- return error;
110
- }
138
+ /** One request-owned producer per connector bounds concurrent errors in a program. */
139
+ export function withAuthorizationHandoff(scope, error) {
140
+ return runEdge(withAuthorizationHandoffNative(scope, error));
141
+ }
142
+ export function withAuthorizationHandoffEffect(scope, error) {
143
+ return Effect.gen(function* () {
144
+ const owner = requestOwner(scope);
145
+ const request = owner.retained.handoffs;
146
+ if (!owner.open ||
147
+ !request ||
148
+ !error.nextAction ||
149
+ !("tool" in error.nextAction) ||
150
+ error.nextAction.tool !== "authorize_connector" ||
151
+ !request.enabled)
152
+ return error;
153
+ const connector = error.nextAction.arguments.connector;
154
+ const handoff = yield* Effect.uninterruptibleMask(() => Effect.gen(function* () {
155
+ const existing = request.handoffs.get(connector);
156
+ if (existing)
157
+ return existing;
158
+ const outcome = Deferred.makeUnsafe();
159
+ const answer = Deferred.await(outcome);
160
+ request.handoffs.set(connector, answer);
161
+ const scheduler = yield* Scheduler.Scheduler;
162
+ // Only canonical request ownership and the scheduler enter the producer.
163
+ // A waiting call's budget, credentials and cancellation cannot own it.
164
+ const services = Context.make(RequestScope, owner).pipe(Context.add(Scheduler.Scheduler, scheduler));
165
+ yield* forkRequest(Effect.interruptible(Effect.raceFirst(authCall(request.create, [connector]), fromSignal(owner.controller.signal))).pipe(Effect.setContext(services), Effect.onExit((exit) => Effect.sync(() => {
166
+ Deferred.doneUnsafe(outcome, exit);
167
+ }))), owner.scope);
168
+ return answer;
169
+ }));
170
+ return yield* handoff.pipe(Effect.map((shared) => {
171
+ if (!owner.open)
172
+ return error;
173
+ const value = (error.writeOutcome === "unknown" && afterUnknownWrite.get(shared)) || shared;
174
+ return {
175
+ ...error,
176
+ ...value,
177
+ message: error.message,
178
+ ...(value.message ? { instructions: value.message } : {}),
179
+ };
180
+ }),
181
+ // A signing/configuration failure cannot replace the original failure.
182
+ Effect.catch(() => Effect.succeed(error)));
183
+ });
111
184
  }
185
+ const withAuthorizationHandoffNative = /* @__PURE__ */ registerAuth(withAuthorizationHandoff, withAuthorizationHandoffEffect);
@@ -1,15 +1,8 @@
1
+ import { Budget, callScopeKnown, chargeView, recordedService, setViewService } from "./runtime/call.js";
1
2
  import { chargeCallBudget } from "./runtime/call-admission.js";
2
- import { runEdge } from "./runtime/run.js";
3
- const permits = new WeakMap();
4
3
  export function attachCallAdmission(ctx, permit) {
5
- permits.set(ctx, permit);
4
+ setViewService(ctx, Budget, { charge: chargeCallBudget(permit, ctx.signal) });
6
5
  }
7
- /**
8
- * Charge one sequential auxiliary request using the enclosing concurrency slot.
9
- * Await before dispatch and propagate refusal. Contexts outside an invocation
10
- * have no registry policy to charge.
11
- */
12
6
  export function chargeConnectorCall(ctx) {
13
- const permit = permits.get(ctx);
14
- return permit ? runEdge(chargeCallBudget(permit, ctx.signal)) : Promise.resolve();
7
+ return recordedService(ctx, Budget) || callScopeKnown(ctx) ? chargeView(ctx) : Promise.resolve();
15
8
  }
@@ -3,6 +3,7 @@ import { CALL_ADMISSION } from "./provider.js";
3
3
  import { ConnectorCallError } from "./errors.js";
4
4
  import { provideCallAdmissionProgram, provideCallBudgetCharge, startCallAdmission } from "./runtime/call-admission.js";
5
5
  import { fromSignal, runEdge } from "./runtime/run.js";
6
+ import { keepErrorName } from "./redaction-identity.js";
6
7
  const DEFAULT_MAX_QUEUE_SIZE = 32;
7
8
  const DEFAULT_QUEUE_TIMEOUT_MS = 5_000;
8
9
  const DEFAULT_RETRY_AFTER_MS = 1_000;
@@ -23,6 +24,7 @@ export class CallAdmissionError extends ConnectorCallError {
23
24
  this.name = "CallAdmissionError";
24
25
  }
25
26
  }
27
+ keepErrorName(CallAdmissionError, "CallAdmissionError");
26
28
  export function isCallAdmissionError(error) {
27
29
  return error instanceof CallAdmissionError;
28
30
  }
@@ -0,0 +1,9 @@
1
+ // The served verdict comes from invocation, never a handler argument or method.
2
+ import { Classification, ServedClassification, recordedService, setViewService } from "./runtime/call.js";
3
+ export function attachCallClassification(ctx, classification) {
4
+ setViewService(ctx, Classification, classification);
5
+ setViewService(ctx, ServedClassification, classification);
6
+ }
7
+ export function callClassification(ctx) {
8
+ return recordedService(ctx, ServedClassification);
9
+ }
@@ -1,17 +1,23 @@
1
+ // Recovery facts a connector records before it dispatches a write, such as an
2
+ // idempotency key it will send. When the invocation deadline interrupts the
3
+ // call, the connector's own failure never arrives, so the invocation reads
4
+ // these facts from its own record and returns them with
5
+ // `write_outcome_unknown` (`uncertainCall.recovery`). They are agent-only,
6
+ // like the rest of `uncertainCall`, and never reach an operator record.
7
+ import { Context, Effect } from "effect";
8
+ import { Recovery, serviceFor, setViewService } from "./runtime/call.js";
1
9
  const MAX_FACTS = 4;
2
10
  const MAX_TEXT = 128;
3
11
  // Shared with the REST write schema so every accepted key survives recovery.
4
12
  export const IDEMPOTENCY_KEY_MAX_LENGTH = 255;
5
13
  const NAME = /^[A-Za-z][A-Za-z0-9]*$/;
6
- const facts = new WeakMap();
7
- /**
8
- * Record facts that let the caller reconcile or safely retry this call's
9
- * write. Bounded: at most four string facts with short camelCase names; a fact
10
- * outside the bound is dropped rather than truncated. Idempotency keys allow
11
- * 255 characters to match the REST write schema; other values allow 128.
12
- */
13
- export function recordRecovery(ctx, recovery) {
14
- const kept = { ...facts.get(ctx) };
14
+ class RecordedRecovery extends Context.Service()("connecta/call/RecordedRecovery") {
15
+ }
16
+ export function recoveryRecord() {
17
+ return {};
18
+ }
19
+ export function recordRecoveryFacts(record, recovery) {
20
+ const kept = { ...record.facts };
15
21
  for (const [name, value] of Object.entries(recovery)) {
16
22
  if (Object.keys(kept).length >= MAX_FACTS && !Object.hasOwn(kept, name))
17
23
  break;
@@ -20,10 +26,23 @@ export function recordRecovery(ctx, recovery) {
20
26
  continue;
21
27
  kept[name] = value;
22
28
  }
23
- facts.set(ctx, Object.freeze(kept));
29
+ record.facts = Object.freeze(kept);
30
+ }
31
+ function recordFor(ctx) {
32
+ let record = serviceFor(ctx, RecordedRecovery);
33
+ if (!record) {
34
+ record = recoveryRecord();
35
+ setViewService(ctx, RecordedRecovery, record);
36
+ const recordNow = (facts) => recordRecoveryFacts(record, facts);
37
+ setViewService(ctx, Recovery, { recordNow, record: (facts) => Effect.sync(() => recordNow(facts)) });
38
+ }
39
+ return record;
40
+ }
41
+ export function recordRecovery(ctx, facts) {
42
+ if (!serviceFor(ctx, Recovery))
43
+ recordFor(ctx);
44
+ serviceFor(ctx, Recovery)?.recordNow?.(facts);
24
45
  }
25
- /** The facts a connector recorded on this call's context, if any. */
26
46
  export function recoveryFor(ctx) {
27
- const recorded = ctx ? facts.get(ctx) : undefined;
28
- return recorded && Object.keys(recorded).length > 0 ? recorded : undefined;
47
+ return ctx ? serviceFor(ctx, RecordedRecovery)?.facts : undefined;
29
48
  }
@@ -0,0 +1,8 @@
1
+ /** Canonical JSON for internal claims: sorted object keys, preserved array order and JSON values. */
2
+ export function canonicalJson(value) {
3
+ return JSON.stringify(value, (_key, item) => item !== null && typeof item === "object" && !Array.isArray(item)
4
+ ? Object.fromEntries(Object.keys(item)
5
+ .sort()
6
+ .map((key) => [key, item[key]]))
7
+ : item);
8
+ }