@zackbart/connecta 0.34.1 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. package/CHANGELOG.md +363 -0
  2. package/README.md +62 -106
  3. package/SECURITY.md +3 -2
  4. package/bin/connecta.mjs +41 -16
  5. package/bin/version.mjs +1 -1
  6. package/dist/access-tokens.d.ts +2 -1
  7. package/dist/access-tokens.js +66 -30
  8. package/dist/activity.d.ts +1 -1
  9. package/dist/activity.js +2 -0
  10. package/dist/agent-config.d.ts +23 -0
  11. package/dist/agent-config.js +59 -0
  12. package/dist/agent-description.js +16 -0
  13. package/dist/agent-identity.js +4 -4
  14. package/dist/agent-observation.js +39 -0
  15. package/dist/auth/clerk-sdk/client.d.ts +2 -0
  16. package/dist/auth/clerk-sdk/generated.js +554 -563
  17. package/dist/auth/clerk-transport.js +70 -3
  18. package/dist/auth/clerk.d.ts +13 -0
  19. package/dist/auth/clerk.js +653 -246
  20. package/dist/auth/cloudflare-access.js +46 -42
  21. package/dist/auth/downstream-client-metadata.js +2 -2
  22. package/dist/auth/downstream-oauth.js +2051 -1160
  23. package/dist/auth/downstream-revocation.js +88 -88
  24. package/dist/auth/native-call.js +20 -0
  25. package/dist/auth/native.js +184 -0
  26. package/dist/auth/oauth-start-reset.js +11 -5
  27. package/dist/auth/oauth-token-response.js +121 -102
  28. package/dist/auth/oauth-v2-migration.js +97 -78
  29. package/dist/auth/renewable-grant.js +10 -0
  30. package/dist/auth/static-oauth.js +663 -271
  31. package/dist/auth/vercel-agent.js +266 -0
  32. package/dist/auth-admission.js +204 -0
  33. package/dist/auth-elicitation.js +350 -241
  34. package/dist/authorization-handoff.js +164 -90
  35. package/dist/call-admission-context.js +3 -10
  36. package/dist/call-admission.js +2 -0
  37. package/dist/call-classification.js +9 -0
  38. package/dist/call-recovery.js +32 -13
  39. package/dist/canonical-json.js +8 -0
  40. package/dist/catalog-cache.js +369 -213
  41. package/dist/catalog-service.js +659 -530
  42. package/dist/catalog.js +5 -1
  43. package/dist/concurrency.js +0 -25
  44. package/dist/config-defaults.d.ts +1 -0
  45. package/dist/config-defaults.js +1 -0
  46. package/dist/config-schema.d.ts +3 -1
  47. package/dist/config-schema.js +13 -3
  48. package/dist/config.d.ts +40 -6
  49. package/dist/config.js +40 -26
  50. package/dist/connector-caller.d.ts +4 -0
  51. package/dist/connector-caller.js +17 -4
  52. package/dist/connectors/api-connector.d.ts +12 -7
  53. package/dist/connectors/api-connector.js +142 -56
  54. package/dist/connectors/guarded-fetch.d.ts +51 -17
  55. package/dist/connectors/guarded-fetch.js +215 -121
  56. package/dist/connectors/negotiation-cache.js +20 -10
  57. package/dist/connectors/remote-mcp.d.ts +10 -30
  58. package/dist/connectors/remote-mcp.js +955 -563
  59. package/dist/d1.js +10 -243
  60. package/dist/derived-context.js +5 -0
  61. package/dist/describe-config.d.ts +3 -1
  62. package/dist/describe-config.js +2 -0
  63. package/dist/downstream-input.js +347 -260
  64. package/dist/errors.d.ts +87 -6
  65. package/dist/errors.js +114 -4
  66. package/dist/execute.js +87 -50
  67. package/dist/executor-admission.js +3 -0
  68. package/dist/executors/quickjs.js +163 -112
  69. package/dist/guarded-transport.js +50 -0
  70. package/dist/guest-runtime.js +1 -1
  71. package/dist/http/client.js +439 -0
  72. package/dist/http/errors.js +558 -0
  73. package/dist/http/fields.js +49 -0
  74. package/dist/http/hatch-paging.js +318 -0
  75. package/dist/http/hatch.js +1279 -0
  76. package/dist/http/json-schema.js +267 -0
  77. package/dist/http/node-transport.js +241 -0
  78. package/dist/http/oauth.js +162 -0
  79. package/dist/http/paging.js +228 -0
  80. package/dist/http/provider.js +221 -0
  81. package/dist/http/safety.js +82 -0
  82. package/dist/http/services.js +79 -0
  83. package/dist/http/tools.js +383 -0
  84. package/dist/http/vendor-index.js +138 -0
  85. package/dist/http/vendor.js +448 -0
  86. package/dist/http/write-request.js +66 -0
  87. package/dist/http-policy.d.ts +11 -0
  88. package/dist/http-policy.js +45 -0
  89. package/dist/inbound-credential.js +1 -1
  90. package/dist/index.d.ts +2 -2
  91. package/dist/index.js +4 -0
  92. package/dist/invocation-auth.js +30 -19
  93. package/dist/invocation.js +218 -85
  94. package/dist/mcp-result.js +0 -4
  95. package/dist/membership.d.ts +4 -0
  96. package/dist/meta-output.js +1 -1
  97. package/dist/meta-tools.js +531 -406
  98. package/dist/native-recovery.js +52 -0
  99. package/dist/native-tools.js +382 -0
  100. package/dist/node.d.ts +4 -3
  101. package/dist/node.js +45 -8
  102. package/dist/oauth-handoff.js +177 -104
  103. package/dist/oauth-partition.js +6 -20
  104. package/dist/oauth-sealing.js +6 -7
  105. package/dist/operation-vocabulary.js +101 -0
  106. package/dist/operator-record.d.ts +2 -2
  107. package/dist/operator-record.js +17 -4
  108. package/dist/operator-ui/agents.d.ts +5 -4
  109. package/dist/operator-ui/agents.js +17 -7
  110. package/dist/operator-ui/config-summary.js +5 -4
  111. package/dist/operator-ui/connection-map.js +7 -5
  112. package/dist/operator-ui/contract.d.ts +7 -3
  113. package/dist/operator-ui/endpoints.js +4 -13
  114. package/dist/operator-ui/fix-prompts.d.ts +1 -1
  115. package/dist/operator-ui/fix-prompts.js +0 -8
  116. package/dist/operator-ui/generated.js +3 -3
  117. package/dist/operator-ui/model.d.ts +2 -3
  118. package/dist/operator-ui/overview.js +5 -2
  119. package/dist/operator-ui/setup-commands.js +0 -4
  120. package/dist/operator-ui/view.d.ts +2 -25
  121. package/dist/operator-ui/view.js +2 -76
  122. package/dist/program-writes.js +47 -26
  123. package/dist/provider-call-facts.d.ts +115 -0
  124. package/dist/provider-call-facts.js +182 -0
  125. package/dist/provider-call.d.ts +112 -0
  126. package/dist/provider-call.js +271 -0
  127. package/dist/provider.d.ts +65 -31
  128. package/dist/provider.js +116 -39
  129. package/dist/providers/_shared/google/hatch.js +91 -0
  130. package/dist/providers/_shared/google/kit.js +537 -0
  131. package/dist/providers/_shared/google/result-size.js +15 -2
  132. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  133. package/dist/providers/_shared/google/service-account.js +8 -4
  134. package/dist/providers/_shared/google/workspace.d.ts +6 -210
  135. package/dist/providers/_shared/google/workspace.js +6 -425
  136. package/dist/providers/_shared/rest/compact-index.js +86 -0
  137. package/dist/providers/_shared/rest/dispatch.js +3 -23
  138. package/dist/providers/_shared/rest/kit.js +546 -0
  139. package/dist/providers/_shared/rest/operation-index.js +230 -14
  140. package/dist/providers/_shared/rest/response-media.js +11 -0
  141. package/dist/providers/_shared/rest/tools.js +101 -78
  142. package/dist/providers/_shared/rest/value-safety.js +353 -195
  143. package/dist/providers/_shared/sensitive-fields.js +27 -0
  144. package/dist/providers/breeze/api.js +584 -0
  145. package/dist/providers/breeze/index.d.ts +1 -3
  146. package/dist/providers/breeze/index.js +67 -1420
  147. package/dist/providers/breeze/openapi.generated.js +60 -0
  148. package/dist/providers/breeze/skill.generated.js +2 -6
  149. package/dist/providers/breeze/tools.js +696 -0
  150. package/dist/providers/ccb/api.js +496 -0
  151. package/dist/providers/ccb/index.d.ts +15 -37
  152. package/dist/providers/ccb/index.js +77 -1702
  153. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  154. package/dist/providers/ccb/lib/constants.js +74 -0
  155. package/dist/providers/ccb/lib/guide.js +9 -0
  156. package/dist/providers/ccb/lib/verdicts.js +387 -0
  157. package/dist/providers/ccb/openapi.generated.js +397 -0
  158. package/dist/providers/ccb/safety.js +295 -0
  159. package/dist/providers/ccb/skill.generated.js +2 -6
  160. package/dist/providers/ccb/tools.js +853 -0
  161. package/dist/providers/cloudflare/api.js +1066 -0
  162. package/dist/providers/cloudflare/index.d.ts +5 -22
  163. package/dist/providers/cloudflare/index.js +79 -197
  164. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  165. package/dist/providers/cloudflare/lib/config.js +2 -0
  166. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  167. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  168. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  169. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  170. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  171. package/dist/providers/cloudflare/openapi.generated.js +4 -3
  172. package/dist/providers/cloudflare/{value-safety.js → safety.js} +487 -0
  173. package/dist/providers/cloudflare/skill.generated.js +2 -10
  174. package/dist/providers/cloudflare/tools.js +360 -0
  175. package/dist/providers/docs/api.js +51 -0
  176. package/dist/providers/docs/index.d.ts +1 -12
  177. package/dist/providers/docs/index.js +53 -1165
  178. package/dist/providers/docs/lib/constants.d.ts +18 -0
  179. package/dist/providers/docs/lib/constants.js +18 -0
  180. package/dist/providers/docs/lib/discovery.js +26 -0
  181. package/dist/providers/docs/lib/requests.js +48 -0
  182. package/dist/providers/docs/lib/schemas.js +168 -0
  183. package/dist/providers/docs/openapi.generated.js +16 -0
  184. package/dist/providers/docs/safety.js +54 -0
  185. package/dist/providers/docs/skill.generated.js +2 -6
  186. package/dist/providers/docs/tools.js +802 -0
  187. package/dist/providers/drive/api.js +177 -0
  188. package/dist/providers/drive/index.d.ts +1 -12
  189. package/dist/providers/drive/index.js +38 -1448
  190. package/dist/providers/drive/lib/constants.d.ts +6 -0
  191. package/dist/providers/drive/lib/constants.js +6 -0
  192. package/dist/providers/drive/lib/contracts.js +532 -0
  193. package/dist/providers/drive/lib/hatch.js +197 -0
  194. package/dist/providers/drive/openapi.generated.js +77 -0
  195. package/dist/providers/drive/safety.js +90 -0
  196. package/dist/providers/drive/skill.generated.js +2 -6
  197. package/dist/providers/drive/tools.js +1290 -0
  198. package/dist/providers/forms/api.js +71 -0
  199. package/dist/providers/forms/index.d.ts +1 -12
  200. package/dist/providers/forms/index.js +49 -1145
  201. package/dist/providers/forms/lib/constants.d.ts +14 -0
  202. package/dist/providers/forms/lib/constants.js +19 -0
  203. package/dist/providers/forms/lib/hatch.js +72 -0
  204. package/dist/providers/forms/openapi.generated.js +23 -0
  205. package/dist/providers/forms/safety.js +34 -0
  206. package/dist/providers/forms/skill.generated.js +2 -8
  207. package/dist/providers/forms/tools.js +1024 -0
  208. package/dist/providers/github/api.js +150 -0
  209. package/dist/providers/github/index.d.ts +4 -5
  210. package/dist/providers/github/index.js +30 -87
  211. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  212. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  213. package/dist/providers/github/lib/discovery.js +132 -0
  214. package/dist/providers/github/lib/operations.js +58 -0
  215. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  216. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  217. package/dist/providers/github/openapi.generated.js +1216 -0
  218. package/dist/providers/github/safety.js +216 -0
  219. package/dist/providers/github/skill.generated.js +2 -5
  220. package/dist/providers/github/tools.js +506 -0
  221. package/dist/providers/gmail/api.js +114 -0
  222. package/dist/providers/gmail/index.d.ts +1 -12
  223. package/dist/providers/gmail/index.js +73 -1621
  224. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  225. package/dist/providers/gmail/lib/constants.js +16 -0
  226. package/dist/providers/gmail/lib/index.js +173 -0
  227. package/dist/providers/gmail/lib/schemas.js +176 -0
  228. package/dist/providers/gmail/lib/threading.js +120 -0
  229. package/dist/providers/gmail/openapi.generated.js +92 -0
  230. package/dist/providers/gmail/safety.js +21 -0
  231. package/dist/providers/gmail/skill.generated.js +2 -6
  232. package/dist/providers/gmail/tools.js +1435 -0
  233. package/dist/providers/overflow/api.js +1008 -0
  234. package/dist/providers/overflow/index.d.ts +1 -17
  235. package/dist/providers/overflow/index.js +60 -1488
  236. package/dist/providers/overflow/skill.generated.js +2 -5
  237. package/dist/providers/overflow/tools.js +873 -0
  238. package/dist/providers/planning-center/api.js +467 -0
  239. package/dist/providers/planning-center/index.d.ts +4 -35
  240. package/dist/providers/planning-center/index.js +69 -2445
  241. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  242. package/dist/providers/planning-center/lib/constants.js +83 -0
  243. package/dist/providers/planning-center/lib/discovery.js +40 -0
  244. package/dist/providers/planning-center/lib/guide.js +39 -0
  245. package/dist/providers/planning-center/lib/json-api.js +83 -0
  246. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  247. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  248. package/dist/providers/planning-center/safety.js +188 -0
  249. package/dist/providers/planning-center/skill.generated.js +2 -27
  250. package/dist/providers/planning-center/tools.js +1010 -0
  251. package/dist/providers/sheets/api.js +133 -0
  252. package/dist/providers/sheets/index.d.ts +4 -16
  253. package/dist/providers/sheets/index.js +61 -1172
  254. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  255. package/dist/providers/sheets/lib/constants.js +14 -0
  256. package/dist/providers/sheets/lib/hatch.js +163 -0
  257. package/dist/providers/sheets/lib/requests.js +105 -0
  258. package/dist/providers/sheets/lib/schemas.js +138 -0
  259. package/dist/providers/sheets/openapi.generated.js +30 -0
  260. package/dist/providers/sheets/safety.js +27 -0
  261. package/dist/providers/sheets/skill.generated.js +2 -7
  262. package/dist/providers/sheets/tools.js +734 -0
  263. package/dist/providers/slides/api.js +147 -0
  264. package/dist/providers/slides/index.d.ts +2 -10
  265. package/dist/providers/slides/index.js +48 -2555
  266. package/dist/providers/slides/lib/constants.d.ts +11 -0
  267. package/dist/providers/slides/lib/constants.js +11 -0
  268. package/dist/providers/slides/lib/requests.js +60 -0
  269. package/dist/providers/slides/lib/schemas.js +565 -0
  270. package/dist/providers/slides/openapi.generated.js +18 -0
  271. package/dist/providers/slides/skill.generated.js +2 -6
  272. package/dist/providers/slides/tools.js +1968 -0
  273. package/dist/providers/stripe/api.js +401 -0
  274. package/dist/providers/stripe/index.d.ts +5 -27
  275. package/dist/providers/stripe/index.js +74 -210
  276. package/dist/providers/stripe/lib/config.d.ts +4 -0
  277. package/dist/providers/stripe/lib/config.js +2 -0
  278. package/dist/providers/stripe/openapi.generated.js +4 -3
  279. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  280. package/dist/providers/stripe/skill.generated.js +2 -11
  281. package/dist/providers/stripe/tools.js +77 -0
  282. package/dist/providers/tithely/api.js +531 -0
  283. package/dist/providers/tithely/index.d.ts +17 -0
  284. package/dist/providers/tithely/index.js +86 -965
  285. package/dist/providers/tithely/skill.generated.js +2 -5
  286. package/dist/providers/tithely/tools.js +426 -0
  287. package/dist/providers/vercel/api.js +551 -0
  288. package/dist/providers/vercel/index.d.ts +9 -25
  289. package/dist/providers/vercel/index.js +66 -260
  290. package/dist/providers/vercel/lib/config.d.ts +2 -0
  291. package/dist/providers/vercel/lib/config.js +2 -0
  292. package/dist/providers/vercel/lib/index.js +117 -0
  293. package/dist/providers/vercel/lib/logs.js +100 -0
  294. package/dist/providers/vercel/lib/pin.js +270 -0
  295. package/dist/providers/vercel/openapi.generated.js +10 -5
  296. package/dist/providers/vercel/{value-safety.js → safety.js} +247 -38
  297. package/dist/providers/vercel/skill.generated.js +2 -7
  298. package/dist/providers/vercel/tools.js +642 -0
  299. package/dist/redaction-identity.js +47 -0
  300. package/dist/redaction-marker.js +125 -0
  301. package/dist/registry.d.ts +21 -15
  302. package/dist/registry.js +409 -376
  303. package/dist/routes/access-tokens.js +1 -1
  304. package/dist/routes/actor-labels.js +1 -1
  305. package/dist/routes/connect.js +1 -1
  306. package/dist/routes/dispatch.js +103 -0
  307. package/dist/routes/mcp.js +170 -79
  308. package/dist/routes/oauth.js +3 -1
  309. package/dist/routes/operator.js +2 -2
  310. package/dist/routes/shared.d.ts +5 -4
  311. package/dist/routes/shared.js +244 -177
  312. package/dist/routes/skills.js +10 -8
  313. package/dist/routes/ui-config.js +27 -3
  314. package/dist/routes/ui-data.js +21 -20
  315. package/dist/routes/ui.js +1 -1
  316. package/dist/runtime/call-admission.js +0 -26
  317. package/dist/runtime/call-entry.js +30 -0
  318. package/dist/runtime/call.js +556 -0
  319. package/dist/runtime/connector-scope.js +7 -0
  320. package/dist/runtime/credential-probe.js +34 -0
  321. package/dist/runtime/executor.js +40 -0
  322. package/dist/runtime/native-storage.js +63 -0
  323. package/dist/runtime/registry.js +27 -0
  324. package/dist/runtime/request-scope.js +72 -0
  325. package/dist/runtime/run.js +15 -7
  326. package/dist/runtime/shared-read.js +34 -5
  327. package/dist/runtime/storage.js +34 -21
  328. package/dist/sent-secrets.d.ts +194 -37
  329. package/dist/sent-secrets.js +1743 -340
  330. package/dist/server.js +5 -56
  331. package/dist/skills.js +322 -222
  332. package/dist/sqlite.js +15 -14
  333. package/dist/storage/d1-copy.js +255 -0
  334. package/dist/storage/d1-driver.js +15 -0
  335. package/dist/storage/keys.js +28 -0
  336. package/dist/storage/sql-driver.js +88 -0
  337. package/dist/storage/sql-native.js +544 -0
  338. package/dist/storage/sql-schema.d.ts +6 -0
  339. package/dist/storage/sql-schema.js +15 -0
  340. package/dist/storage/sql.d.ts +14 -20
  341. package/dist/storage/sql.js +29 -535
  342. package/dist/timeout.js +0 -26
  343. package/dist/tool-safety.js +20 -10
  344. package/dist/types.d.ts +7 -109
  345. package/dist/upward.js +3 -0
  346. package/dist/usage-guide.js +3 -1
  347. package/dist/validate.d.ts +4 -2
  348. package/dist/validate.js +86 -9
  349. package/dist/version.d.ts +1 -1
  350. package/dist/version.js +1 -1
  351. package/dist/worker.js +312 -292
  352. package/dist/workspace-subject.js +5 -1
  353. package/dist/write-outcome.js +454 -34
  354. package/documentation/README.md +27 -7
  355. package/documentation/architecture.md +2547 -226
  356. package/documentation/auth.md +821 -98
  357. package/documentation/code-mode.md +49 -16
  358. package/documentation/deploying.md +164 -20
  359. package/documentation/hosted-mcp-migration.md +460 -0
  360. package/documentation/integrating.md +129 -144
  361. package/documentation/meta-tools.md +409 -32
  362. package/documentation/operating.md +27 -3
  363. package/documentation/operator-tests.md +3 -0
  364. package/documentation/operator-ui.md +68 -45
  365. package/documentation/provider-auth-migration.md +16 -63
  366. package/documentation/provider-migration-0.29.md +10 -5
  367. package/documentation/provider-migration-0.35.md +975 -0
  368. package/documentation/providers.md +965 -0
  369. package/examples/worker/AGENTS.md +23 -9
  370. package/examples/worker/README.md +254 -135
  371. package/examples/worker/alchemy.run.ts +116 -0
  372. package/examples/worker/gitignore +10 -0
  373. package/examples/worker/src/connecta.config.ts +23 -21
  374. package/examples/worker/wrangler.jsonc +14 -5
  375. package/guides/connecting-agents.md +157 -0
  376. package/guides/how-it-works.md +156 -0
  377. package/guides/safety-and-trust.md +153 -0
  378. package/package.json +27 -46
  379. package/templates/node/.env.example +3 -0
  380. package/templates/node/README.md +22 -2
  381. package/templates/node/docker-compose.yml +1 -0
  382. package/templates/node/package.json +3 -2
  383. package/templates/node/src/connecta.config.ts +8 -0
  384. package/dist/catalog-drift.d.ts +0 -138
  385. package/dist/catalog-drift.js +0 -578
  386. package/dist/providers/_shared/request-token.js +0 -83
  387. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  388. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  389. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  390. package/dist/providers/basecamp/index.d.ts +0 -45
  391. package/dist/providers/basecamp/index.js +0 -997
  392. package/dist/providers/basecamp/skill.generated.js +0 -9
  393. package/dist/providers/cloudflare/rest.d.ts +0 -37
  394. package/dist/providers/cloudflare/rest.js +0 -1097
  395. package/dist/providers/github/hosted.js +0 -218
  396. package/dist/providers/github/rest.js +0 -321
  397. package/dist/providers/infisical/index.d.ts +0 -7
  398. package/dist/providers/infisical/index.js +0 -713
  399. package/dist/providers/infisical/skill.generated.js +0 -8
  400. package/dist/providers/intercom/index.d.ts +0 -24
  401. package/dist/providers/intercom/index.js +0 -121
  402. package/dist/providers/intercom/skill.generated.js +0 -8
  403. package/dist/providers/linear/index.d.ts +0 -55
  404. package/dist/providers/linear/index.js +0 -537
  405. package/dist/providers/linear/skill.generated.js +0 -8
  406. package/dist/providers/mixpanel/index.d.ts +0 -59
  407. package/dist/providers/mixpanel/index.js +0 -472
  408. package/dist/providers/mixpanel/operations.js +0 -20
  409. package/dist/providers/mixpanel/rest.js +0 -603
  410. package/dist/providers/mixpanel/skill.generated.js +0 -10
  411. package/dist/providers/mixpanel/value-safety.js +0 -16
  412. package/dist/providers/notion/index.d.ts +0 -67
  413. package/dist/providers/notion/index.js +0 -368
  414. package/dist/providers/notion/openapi.generated.js +0 -75
  415. package/dist/providers/notion/rest.d.ts +0 -24
  416. package/dist/providers/notion/rest.js +0 -1226
  417. package/dist/providers/notion/skill.generated.js +0 -11
  418. package/dist/providers/notion/value-safety.js +0 -56
  419. package/dist/providers/revenuecat/index.d.ts +0 -51
  420. package/dist/providers/revenuecat/index.js +0 -697
  421. package/dist/providers/revenuecat/skill.generated.js +0 -11
  422. package/dist/providers/stripe/rest.d.ts +0 -14
  423. package/dist/providers/stripe/rest.js +0 -402
  424. package/dist/providers/vercel/rest.d.ts +0 -20
  425. package/dist/providers/vercel/rest.js +0 -1020
  426. package/dist/providers/wispr-flow/index.d.ts +0 -14
  427. package/dist/providers/wispr-flow/index.js +0 -117
  428. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  429. /package/dist/providers/github/{key.js → lib/key.js} +0 -0
package/dist/provider.js CHANGED
@@ -1,10 +1,7 @@
1
- // The one shape every maintained provider takes. Deliberately transport-free:
2
- // it imports neither `remoteMcp()` nor `api()`, so an `api()` provider does not
3
- // acquire the MCP client, OAuth, or Effect graph by using it, and a hosted
4
- // provider does not acquire `api()`. Its runtime imports validate plain
5
- // options and reviewed classification, with no I/O.
1
+ // Transport-free maintained API provider definitions and construction validation.
6
2
  import { array, assertKnownOptions, ConfigError, fn, keys, object, opaque, required, whole, } from "./config-schema.js";
7
- import { reviewedClassification } from "./catalog-drift.js";
3
+ import { aliasCallIdentity } from "./provider-call-facts.js";
4
+ import { isConnectorCallErrorCode } from "./errors.js";
8
5
  const budget = {
9
6
  ...object({
10
7
  kind: required(opaque({
@@ -64,10 +61,75 @@ export const PROVIDER_COMMON = {
64
61
  callAdmission: CALL_ADMISSION,
65
62
  };
66
63
  const PROVIDER_NAME = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
67
- const KINDS = new Set(["mcp", "api", "composed", "dual"]);
64
+ const BLOCK_KEY = /^[a-z][a-z0-9:-]*$/;
65
+ /** A when-block marker, alone on its line. */
66
+ const BLOCK_MARKER = /^<!--\s*(?:when:\s*([a-z][a-z0-9:-]*)|end)\s*-->$/;
68
67
  function nonEmpty(value) {
69
68
  return typeof value === "string" && value.trim() !== "";
70
69
  }
70
+ /**
71
+ * Render a guide's selected when-blocks, or, with no selection, check them
72
+ * and return their keys. Markers stand alone on their lines and never nest.
73
+ * Removing an unselected block also removes the blank line it leaves, so
74
+ * paragraphs and tight lists keep their spacing.
75
+ */
76
+ function guideBlocks(content, selected) {
77
+ const keys = new Set();
78
+ const kept = [];
79
+ let open;
80
+ let seam = false;
81
+ for (const line of content.split("\n")) {
82
+ const marker = BLOCK_MARKER.exec(line.trim());
83
+ if (marker) {
84
+ if (marker[1] !== undefined ? open !== undefined : open === undefined) {
85
+ throw new Error("when-blocks must open and close in turn, unnested");
86
+ }
87
+ if (marker[1] !== undefined)
88
+ keys.add((open = marker[1]));
89
+ else {
90
+ seam = selected !== undefined && !selected.has(open);
91
+ open = undefined;
92
+ }
93
+ continue;
94
+ }
95
+ if (/<!--\s*(?:when:|end\s*-->)/.test(line))
96
+ throw new Error("a when-block marker stands alone on its line");
97
+ if (open !== undefined && !selected?.has(open))
98
+ continue;
99
+ if (seam && !line.trim() && (kept.length === 0 || !kept.at(-1).trim()))
100
+ continue;
101
+ seam = false;
102
+ kept.push(line);
103
+ }
104
+ if (open !== undefined)
105
+ throw new Error(`the when-block "${open}" is never closed`);
106
+ return { text: kept.join("\n").trim(), keys };
107
+ }
108
+ /** A frozen copy: kit facts are review evidence `providers:generate` reads. */
109
+ function kitFacts(kit) {
110
+ if (kit.errors && !isConnectorCallErrorCode(kit.errors.unknownId)) {
111
+ throw new Error("Provider kit errors.unknownId must be a ConnectorCallErrorCode.");
112
+ }
113
+ return Object.freeze({
114
+ operations: Object.freeze([...kit.operations]),
115
+ ...(kit.pageSize ? { pageSize: Object.freeze({ ...kit.pageSize }) } : {}),
116
+ ...(kit.hatch
117
+ ? {
118
+ hatch: Object.freeze({
119
+ name: kit.hatch.name,
120
+ verdicts: Object.freeze({ ...kit.hatch.verdicts }),
121
+ ...(kit.hatch.paging ? { paging: kit.hatch.paging } : {}),
122
+ ...(kit.hatch.fieldsRoot ? { fieldsRoot: kit.hatch.fieldsRoot } : {}),
123
+ }),
124
+ }
125
+ : {}),
126
+ ...(kit.errors
127
+ ? { errors: Object.freeze({ ...kit.errors, conflicts: Object.freeze([...kit.errors.conflicts]) }) }
128
+ : {}),
129
+ ...(kit.idempotencyKey !== undefined ? { idempotencyKey: kit.idempotencyKey } : {}),
130
+ ...(kit.refusesWithheld ? { refusesWithheld: true } : {}),
131
+ });
132
+ }
71
133
  /**
72
134
  * Define a maintained provider: one validated description and one factory.
73
135
  *
@@ -83,23 +145,37 @@ export function defineProvider(definition) {
83
145
  if (!nonEmpty(definition.title)) {
84
146
  throw new Error(`${label} requires a non-empty title.`);
85
147
  }
86
- if (!KINDS.has(definition.kind)) {
87
- throw new Error(`${label} kind must be "mcp", "api", "composed", or "dual".`);
88
- }
148
+ if (definition.kind !== "api")
149
+ throw new Error(`${label} kind must be "api".`);
89
150
  if (!nonEmpty(definition.skill?.content) || !nonEmpty(definition.skill.instructionsHeading)) {
90
151
  throw new Error(`${label} skill requires non-empty content and instructionsHeading.`);
91
152
  }
92
- if (definition.classify !== undefined && definition.kind === "api") {
93
- throw new Error(`${label} is an api() provider; annotate each authored tool instead of classifying a hosted catalog.`);
94
- }
153
+ if (Object.hasOwn(definition, "classify"))
154
+ throw new Error(`${label} classify was removed; use ConnectaConfig.classification.`);
95
155
  if (!definition.options?.shape && !definition.options?.variants) {
96
156
  throw new Error(`${label} requires a closed options shape from optionsOf().`);
97
157
  }
98
- // A validated, deep-frozen copy. The definition is what build and check
99
- // tools read and what every later connector classifies with, so nothing
100
- // reachable from it may change a verdict after review: neither the
101
- // caller's original object nor a write through `factory.definition`.
102
- const classify = definition.classify === undefined ? undefined : reviewedClassification(definition.classify, label);
158
+ const blocks = definition.blocks;
159
+ if (blocks !== undefined &&
160
+ (!Array.isArray(blocks.keys) ||
161
+ blocks.keys.length === 0 ||
162
+ !blocks.keys.every((key) => typeof key === "string" && BLOCK_KEY.test(key)) ||
163
+ new Set(blocks.keys).size !== blocks.keys.length ||
164
+ typeof blocks.select !== "function")) {
165
+ throw new Error(`${label} blocks require unique lowercase keys and a select function.`);
166
+ }
167
+ let used;
168
+ try {
169
+ used = guideBlocks(definition.skill.content).keys;
170
+ }
171
+ catch (error) {
172
+ throw new Error(`${label} skill: ${error instanceof Error ? error.message : String(error)}.`, { cause: error });
173
+ }
174
+ for (const key of used) {
175
+ if (!blocks?.keys.includes(key))
176
+ throw new Error(`${label} skill uses the when-block "${key}" its blocks omit.`);
177
+ }
178
+ // Freeze definition facts consumed by construction, generation and checks.
103
179
  if (typeof definition.create !== "function") {
104
180
  throw new Error(`${label} requires a create function.`);
105
181
  }
@@ -110,7 +186,8 @@ export function defineProvider(definition) {
110
186
  ...(definition.skill.fragments ? { fragments: Object.freeze(definition.skill.fragments) } : {}),
111
187
  }),
112
188
  ...(definition.bundle ? { bundle: Object.freeze({ ...definition.bundle }) } : {}),
113
- ...(classify !== undefined ? { classify } : {}),
189
+ ...(blocks ? { blocks: Object.freeze({ keys: Object.freeze([...blocks.keys]), select: blocks.select }) } : {}),
190
+ ...(definition.kit ? { kit: kitFacts(definition.kit) } : {}),
114
191
  });
115
192
  const factoryName = `${frozen.name.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())}()`;
116
193
  const factory = (id, options) => asProvider(frozen.name, frozen.options, id, options, (id, options) => {
@@ -133,7 +210,6 @@ export function defineProvider(definition) {
133
210
  const resolved = { ...options, purpose: options.purpose.trim() };
134
211
  const instructions = options.instructions?.trim();
135
212
  const connector = frozen.create(id, resolved, {
136
- ...(frozen.classify !== undefined ? { classify: frozen.classify } : {}),
137
213
  connectorOptions: {
138
214
  ...(options.readOnly !== undefined ? { readOnly: options.readOnly } : {}),
139
215
  ...(options.authScope !== undefined ? { authScope: options.authScope } : {}),
@@ -142,7 +218,20 @@ export function defineProvider(definition) {
142
218
  },
143
219
  usageGuide(input) {
144
220
  const heading = input.heading ?? `${frozen.title} usage`;
145
- const body = [...input.context, frozen.skill.content.trim()].join("\n\n");
221
+ let guide = frozen.skill.content.trim();
222
+ if (frozen.blocks) {
223
+ const { keys, select } = frozen.blocks;
224
+ const selected = select(resolved);
225
+ if (!Array.isArray(selected))
226
+ throw new Error(`${at} requires blocks.select() to return an array of keys.`);
227
+ for (const key of selected) {
228
+ if (!keys.includes(key)) {
229
+ throw new Error(`${at} requires blocks.select() to return declared keys; it returned ${String(key)}.`);
230
+ }
231
+ }
232
+ guide = guideBlocks(frozen.skill.content, new Set(selected)).text;
233
+ }
234
+ const body = [...input.context, guide].join("\n\n");
146
235
  return {
147
236
  content: `# ${heading}\n\n${body}\n` +
148
237
  (instructions ? `\n## ${frozen.skill.instructionsHeading}\n\n${instructions}\n` : ""),
@@ -156,28 +245,13 @@ export function defineProvider(definition) {
156
245
  }
157
246
  return connector;
158
247
  });
159
- // Frozen whole: build and check tools read `definition` to learn what the
160
- // factory classifies, so neither replacing nor deleting it may take effect.
161
- return Object.freeze(Object.assign(factory, { definition: frozen }));
162
- }
163
- /**
164
- * Attach the same validated definition to an existing provider constructor.
165
- * Its option policy stays in its builder during the mechanical folder move;
166
- * adopting defineProvider's common-value policy is a separate conversion.
167
- */
168
- export function asProviderFactory(definition) {
169
- const frozen = defineProvider(definition).definition;
170
- const create = definition.create;
171
- const factory = (id, options) => asProvider(frozen.name, frozen.options, id, options, create);
172
- Object.defineProperty(factory, "name", {
173
- value: frozen.name.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase()),
174
- });
248
+ // Build and check tools rely on this definition remaining attached.
175
249
  return Object.freeze(Object.assign(factory, { definition: frozen }));
176
250
  }
177
251
  /**
178
252
  * Build a maintained provider's connector: refuse unknown options and
179
253
  * accessors by path before the builder reads any of them, then stamp the
180
- * provider onto its description, so the operator surface can say "Linear"
254
+ * provider onto its description, so the operator surface can say "Stripe"
181
255
  * rather than "remote MCP". This is the same construction path defineProvider
182
256
  * uses; existing constructors retain their provider-specific option policy.
183
257
  */
@@ -202,12 +276,15 @@ function asProvider(provider, shape, id, options, build) {
202
276
  const ownReadOnly = Object.getOwnPropertyDescriptor(connector, "readOnly");
203
277
  // Keep the receiver of prototype methods (including private fields). When
204
278
  // the description cannot be replaced, inherit the whole connector instead
205
- // of copying it: decorators may inherit their id, methods, and review.
279
+ // of copying it: decorators may inherit their id and methods.
206
280
  const stamped = Object.isExtensible(connector) &&
207
281
  (!ownDescribe || ownDescribe.configurable) &&
208
282
  (options.readOnly === undefined || !ownReadOnly || ownReadOnly.configurable)
209
283
  ? connector
210
284
  : Object.create(connector);
285
+ // An inheriting stamp serves the connector itself, so it keeps its call identity.
286
+ if (stamped !== connector)
287
+ aliasCallIdentity(stamped, connector);
211
288
  if (options.readOnly !== undefined) {
212
289
  Object.defineProperty(stamped, "readOnly", { value: options.readOnly, enumerable: true, configurable: true });
213
290
  }
@@ -0,0 +1,91 @@
1
+ // Opt-in plumbing only. Product PRs supply their reviewed literal verdicts.
2
+ import { Effect } from "effect";
3
+ import { ConnectorCallError } from "../../../errors.js";
4
+ export function requireGoogleIndex(index) {
5
+ if (!index)
6
+ throw new Error("Google requests require their reviewed operation index.");
7
+ if (index.pathMatching !== "uri-template")
8
+ throw new Error('Google indexes require pathMatching: "uri-template".');
9
+ }
10
+ /** Independent of compact schema depth: only reviewed batch kinds can execute. */
11
+ export function googleBatchGuard(body, options) {
12
+ if (!body || typeof body !== "object" || Array.isArray(body))
13
+ return "A Google batch body must be an object.";
14
+ const value = body;
15
+ const requests = value["requests"];
16
+ if (!Array.isArray(requests) || !requests.length || requests.length > (options.max ?? 100))
17
+ return `A Google batch needs 1–${options.max ?? 100} requests.`;
18
+ if (requests.some((request) => !request ||
19
+ typeof request !== "object" ||
20
+ Array.isArray(request) ||
21
+ Object.keys(request).length !== 1 ||
22
+ !options.kinds.includes(Object.keys(request)[0])))
23
+ return "Each Google batch request must contain exactly one reviewed request kind.";
24
+ const control = value["writeControl"];
25
+ if (options.revision &&
26
+ (!control || typeof control["requiredRevisionId"] !== "string" || !control["requiredRevisionId"].trim()))
27
+ return "This Google batch needs a nonempty writeControl.requiredRevisionId from a current read.";
28
+ return undefined;
29
+ }
30
+ /** Ensure a substituted named id still reaches the endpoint the tool declared. */
31
+ export function googleNamedOperation(index, method, path, template) {
32
+ requireGoogleIndex(index);
33
+ if (index.resolve(method, path).op.path !== template)
34
+ throw new ConnectorCallError("invalid_args", "This Google id resolves to a different operation; no request was sent.");
35
+ }
36
+ export function googleHatchBinding(connection, options) {
37
+ requireGoogleIndex(options.index);
38
+ return {
39
+ index: options.index,
40
+ ...(options.wrapSend ? { warnings: true } : {}),
41
+ review: options.review,
42
+ ...(options.refusal ? { refusal: options.refusal } : {}),
43
+ refuse: (call) => {
44
+ for (const match of call.path.matchAll(/%([a-f0-9]{2})/gi))
45
+ if (/^[-A-Za-z0-9._~:]$/.test(String.fromCharCode(parseInt(match[1], 16))))
46
+ return "Google paths must spell unreserved characters and action separators literally.";
47
+ if (call.headers && Object.keys(call.headers).length)
48
+ return "Google hatches do not accept caller headers.";
49
+ for (const key of Object.keys(call.query))
50
+ if ([
51
+ "access_token",
52
+ "oauth_token",
53
+ "key",
54
+ "callback",
55
+ "upload_protocol",
56
+ "uploadType",
57
+ "userId",
58
+ "quotaUser",
59
+ ].includes(key))
60
+ return `Google query.${key} is owned by the deployment and cannot be selected by a caller.`;
61
+ if (call.query["alt"] !== undefined && call.query["alt"] !== "json")
62
+ return "Google hatches return JSON only; use a named content tool for media.";
63
+ return options.refuse?.(call);
64
+ },
65
+ send: (call, sendOptions) => Effect.suspend(() => {
66
+ // Capture the admitted wire request before the wrapper can inspect its copy.
67
+ const request = {
68
+ method: call.method,
69
+ path: call.path,
70
+ template: call.op.path,
71
+ query: Object.entries(call.query).flatMap(([name, value]) => value === undefined
72
+ ? []
73
+ : (Array.isArray(value) ? value : [value]).map((item) => [name, String(item)])),
74
+ headers: { accept: "application/json" },
75
+ ...(call.body === undefined ? {} : { json: JSON.stringify(call.body) }),
76
+ };
77
+ const optionsForSend = {
78
+ ...sendOptions,
79
+ ...(options.revisionGuarded?.(call) ? { flags: { revisionGuarded: true } } : {}),
80
+ };
81
+ let sent = false;
82
+ const send = () => Effect.suspend(() => {
83
+ if (sent)
84
+ return Effect.die(new Error("A Google hatch wrapper may send its admitted request only once."));
85
+ sent = true;
86
+ return connection.sendPath(request, optionsForSend);
87
+ });
88
+ return options.wrapSend ? options.wrapSend(structuredClone(call), send) : send();
89
+ }),
90
+ };
91
+ }