@zackbart/connecta 0.34.0 → 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 (428) hide show
  1. package/CHANGELOG.md +393 -0
  2. package/README.md +62 -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 +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 +15 -7
  53. package/dist/connectors/api-connector.js +147 -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/option-shapes.js +1 -1
  58. package/dist/connectors/remote-mcp.d.ts +12 -30
  59. package/dist/connectors/remote-mcp.js +960 -564
  60. package/dist/d1.js +10 -243
  61. package/dist/derived-context.js +5 -0
  62. package/dist/describe-config.d.ts +5 -1
  63. package/dist/describe-config.js +3 -0
  64. package/dist/downstream-input.js +347 -260
  65. package/dist/errors.d.ts +87 -6
  66. package/dist/errors.js +114 -4
  67. package/dist/execute.js +87 -50
  68. package/dist/executor-admission.js +3 -0
  69. package/dist/executors/quickjs.js +163 -112
  70. package/dist/guarded-transport.js +50 -0
  71. package/dist/guest-runtime.js +1 -1
  72. package/dist/http/client.js +439 -0
  73. package/dist/http/errors.js +558 -0
  74. package/dist/http/fields.js +49 -0
  75. package/dist/http/hatch-paging.js +318 -0
  76. package/dist/http/hatch.js +1279 -0
  77. package/dist/http/json-schema.js +267 -0
  78. package/dist/http/node-transport.js +241 -0
  79. package/dist/http/oauth.js +162 -0
  80. package/dist/http/paging.js +228 -0
  81. package/dist/http/provider.js +221 -0
  82. package/dist/http/safety.js +82 -0
  83. package/dist/http/services.js +79 -0
  84. package/dist/http/tools.js +383 -0
  85. package/dist/http/vendor-index.js +138 -0
  86. package/dist/http/vendor.js +448 -0
  87. package/dist/http/write-request.js +66 -0
  88. package/dist/http-policy.d.ts +11 -0
  89. package/dist/http-policy.js +45 -0
  90. package/dist/inbound-credential.js +1 -1
  91. package/dist/index.d.ts +2 -2
  92. package/dist/index.js +4 -0
  93. package/dist/invocation-auth.js +30 -19
  94. package/dist/invocation.js +221 -87
  95. package/dist/mcp-result.js +0 -4
  96. package/dist/membership.d.ts +4 -0
  97. package/dist/meta-output.js +1 -1
  98. package/dist/meta-tools.js +534 -408
  99. package/dist/native-recovery.js +52 -0
  100. package/dist/native-tools.js +382 -0
  101. package/dist/node.d.ts +4 -3
  102. package/dist/node.js +45 -8
  103. package/dist/oauth-handoff.js +177 -104
  104. package/dist/oauth-partition.js +6 -20
  105. package/dist/oauth-sealing.js +6 -7
  106. package/dist/operation-vocabulary.js +101 -0
  107. package/dist/operator-record.d.ts +2 -2
  108. package/dist/operator-record.js +17 -4
  109. package/dist/operator-ui/agents.d.ts +5 -4
  110. package/dist/operator-ui/agents.js +17 -7
  111. package/dist/operator-ui/config-summary.js +8 -4
  112. package/dist/operator-ui/connection-map.js +9 -6
  113. package/dist/operator-ui/contract.d.ts +7 -3
  114. package/dist/operator-ui/endpoints.js +5 -14
  115. package/dist/operator-ui/fix-prompts.d.ts +1 -1
  116. package/dist/operator-ui/fix-prompts.js +0 -8
  117. package/dist/operator-ui/generated.js +3 -3
  118. package/dist/operator-ui/health.js +52 -0
  119. package/dist/operator-ui/model.d.ts +2 -3
  120. package/dist/operator-ui/overview.js +11 -19
  121. package/dist/operator-ui/setup-commands.js +0 -4
  122. package/dist/operator-ui/view.d.ts +5 -29
  123. package/dist/operator-ui/view.js +3 -59
  124. package/dist/program-writes.js +47 -26
  125. package/dist/provider-call-facts.d.ts +115 -0
  126. package/dist/provider-call-facts.js +182 -0
  127. package/dist/provider-call.d.ts +112 -0
  128. package/dist/provider-call.js +271 -0
  129. package/dist/provider.d.ts +71 -32
  130. package/dist/provider.js +134 -40
  131. package/dist/providers/_shared/google/hatch.js +91 -0
  132. package/dist/providers/_shared/google/kit.js +537 -0
  133. package/dist/providers/_shared/google/result-size.js +15 -2
  134. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  135. package/dist/providers/_shared/google/service-account.js +8 -4
  136. package/dist/providers/_shared/google/workspace.d.ts +8 -209
  137. package/dist/providers/_shared/google/workspace.js +7 -426
  138. package/dist/providers/_shared/rest/compact-index.js +86 -0
  139. package/dist/providers/_shared/rest/dispatch.js +3 -23
  140. package/dist/providers/_shared/rest/kit.js +546 -0
  141. package/dist/providers/_shared/rest/operation-index.js +230 -14
  142. package/dist/providers/_shared/rest/response-media.js +11 -0
  143. package/dist/providers/_shared/rest/tools.js +101 -78
  144. package/dist/providers/_shared/rest/value-safety.js +353 -195
  145. package/dist/providers/_shared/sensitive-fields.js +27 -0
  146. package/dist/providers/breeze/api.js +584 -0
  147. package/dist/providers/breeze/index.d.ts +3 -3
  148. package/dist/providers/breeze/index.js +67 -1420
  149. package/dist/providers/breeze/openapi.generated.js +60 -0
  150. package/dist/providers/breeze/skill.generated.js +2 -6
  151. package/dist/providers/breeze/tools.js +696 -0
  152. package/dist/providers/ccb/api.js +496 -0
  153. package/dist/providers/ccb/index.d.ts +17 -37
  154. package/dist/providers/ccb/index.js +77 -1702
  155. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  156. package/dist/providers/ccb/lib/constants.js +74 -0
  157. package/dist/providers/ccb/lib/guide.js +9 -0
  158. package/dist/providers/ccb/lib/verdicts.js +387 -0
  159. package/dist/providers/ccb/openapi.generated.js +397 -0
  160. package/dist/providers/ccb/safety.js +295 -0
  161. package/dist/providers/ccb/skill.generated.js +2 -6
  162. package/dist/providers/ccb/tools.js +853 -0
  163. package/dist/providers/cloudflare/api.js +1066 -0
  164. package/dist/providers/cloudflare/index.d.ts +7 -22
  165. package/dist/providers/cloudflare/index.js +80 -194
  166. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  167. package/dist/providers/cloudflare/lib/config.js +2 -0
  168. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  169. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  170. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  171. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  172. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  173. package/dist/providers/cloudflare/openapi.generated.js +3299 -3208
  174. package/dist/providers/cloudflare/{value-safety.js → safety.js} +538 -18
  175. package/dist/providers/cloudflare/skill.generated.js +2 -10
  176. package/dist/providers/cloudflare/tools.js +360 -0
  177. package/dist/providers/docs/api.js +51 -0
  178. package/dist/providers/docs/index.d.ts +1 -12
  179. package/dist/providers/docs/index.js +53 -1165
  180. package/dist/providers/docs/lib/constants.d.ts +18 -0
  181. package/dist/providers/docs/lib/constants.js +18 -0
  182. package/dist/providers/docs/lib/discovery.js +26 -0
  183. package/dist/providers/docs/lib/requests.js +48 -0
  184. package/dist/providers/docs/lib/schemas.js +168 -0
  185. package/dist/providers/docs/openapi.generated.js +16 -0
  186. package/dist/providers/docs/safety.js +54 -0
  187. package/dist/providers/docs/skill.generated.js +2 -6
  188. package/dist/providers/docs/tools.js +802 -0
  189. package/dist/providers/drive/api.js +177 -0
  190. package/dist/providers/drive/index.d.ts +1 -12
  191. package/dist/providers/drive/index.js +38 -1448
  192. package/dist/providers/drive/lib/constants.d.ts +6 -0
  193. package/dist/providers/drive/lib/constants.js +6 -0
  194. package/dist/providers/drive/lib/contracts.js +532 -0
  195. package/dist/providers/drive/lib/hatch.js +197 -0
  196. package/dist/providers/drive/openapi.generated.js +77 -0
  197. package/dist/providers/drive/safety.js +90 -0
  198. package/dist/providers/drive/skill.generated.js +2 -6
  199. package/dist/providers/drive/tools.js +1290 -0
  200. package/dist/providers/forms/api.js +71 -0
  201. package/dist/providers/forms/index.d.ts +1 -12
  202. package/dist/providers/forms/index.js +49 -1145
  203. package/dist/providers/forms/lib/constants.d.ts +14 -0
  204. package/dist/providers/forms/lib/constants.js +19 -0
  205. package/dist/providers/forms/lib/hatch.js +72 -0
  206. package/dist/providers/forms/openapi.generated.js +23 -0
  207. package/dist/providers/forms/safety.js +34 -0
  208. package/dist/providers/forms/skill.generated.js +2 -8
  209. package/dist/providers/forms/tools.js +1024 -0
  210. package/dist/providers/github/api.js +150 -0
  211. package/dist/providers/github/index.d.ts +4 -5
  212. package/dist/providers/github/index.js +30 -87
  213. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  214. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  215. package/dist/providers/github/lib/discovery.js +132 -0
  216. package/dist/providers/github/lib/operations.js +58 -0
  217. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  218. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  219. package/dist/providers/github/openapi.generated.js +1216 -0
  220. package/dist/providers/github/safety.js +216 -0
  221. package/dist/providers/github/skill.generated.js +2 -5
  222. package/dist/providers/github/tools.js +506 -0
  223. package/dist/providers/gmail/api.js +114 -0
  224. package/dist/providers/gmail/index.d.ts +1 -12
  225. package/dist/providers/gmail/index.js +73 -1621
  226. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  227. package/dist/providers/gmail/lib/constants.js +16 -0
  228. package/dist/providers/gmail/lib/index.js +173 -0
  229. package/dist/providers/gmail/lib/schemas.js +176 -0
  230. package/dist/providers/gmail/lib/threading.js +120 -0
  231. package/dist/providers/gmail/openapi.generated.js +92 -0
  232. package/dist/providers/gmail/safety.js +21 -0
  233. package/dist/providers/gmail/skill.generated.js +2 -6
  234. package/dist/providers/gmail/tools.js +1435 -0
  235. package/dist/providers/overflow/api.js +1008 -0
  236. package/dist/providers/overflow/index.d.ts +3 -17
  237. package/dist/providers/overflow/index.js +60 -1488
  238. package/dist/providers/overflow/skill.generated.js +2 -5
  239. package/dist/providers/overflow/tools.js +873 -0
  240. package/dist/providers/planning-center/api.js +467 -0
  241. package/dist/providers/planning-center/index.d.ts +6 -35
  242. package/dist/providers/planning-center/index.js +69 -2445
  243. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  244. package/dist/providers/planning-center/lib/constants.js +83 -0
  245. package/dist/providers/planning-center/lib/discovery.js +40 -0
  246. package/dist/providers/planning-center/lib/guide.js +39 -0
  247. package/dist/providers/planning-center/lib/json-api.js +83 -0
  248. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  249. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  250. package/dist/providers/planning-center/safety.js +188 -0
  251. package/dist/providers/planning-center/skill.generated.js +2 -27
  252. package/dist/providers/planning-center/tools.js +1010 -0
  253. package/dist/providers/sheets/api.js +133 -0
  254. package/dist/providers/sheets/index.d.ts +4 -16
  255. package/dist/providers/sheets/index.js +61 -1172
  256. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  257. package/dist/providers/sheets/lib/constants.js +14 -0
  258. package/dist/providers/sheets/lib/hatch.js +163 -0
  259. package/dist/providers/sheets/lib/requests.js +105 -0
  260. package/dist/providers/sheets/lib/schemas.js +138 -0
  261. package/dist/providers/sheets/openapi.generated.js +30 -0
  262. package/dist/providers/sheets/safety.js +27 -0
  263. package/dist/providers/sheets/skill.generated.js +2 -7
  264. package/dist/providers/sheets/tools.js +734 -0
  265. package/dist/providers/slides/api.js +147 -0
  266. package/dist/providers/slides/index.d.ts +2 -10
  267. package/dist/providers/slides/index.js +48 -2555
  268. package/dist/providers/slides/lib/constants.d.ts +11 -0
  269. package/dist/providers/slides/lib/constants.js +11 -0
  270. package/dist/providers/slides/lib/requests.js +60 -0
  271. package/dist/providers/slides/lib/schemas.js +565 -0
  272. package/dist/providers/slides/openapi.generated.js +18 -0
  273. package/dist/providers/slides/skill.generated.js +2 -6
  274. package/dist/providers/slides/tools.js +1968 -0
  275. package/dist/providers/stripe/api.js +401 -0
  276. package/dist/providers/stripe/index.d.ts +7 -27
  277. package/dist/providers/stripe/index.js +75 -191
  278. package/dist/providers/stripe/lib/config.d.ts +4 -0
  279. package/dist/providers/stripe/lib/config.js +2 -0
  280. package/dist/providers/stripe/openapi.generated.js +4 -3
  281. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  282. package/dist/providers/stripe/skill.generated.js +2 -10
  283. package/dist/providers/stripe/tools.js +77 -0
  284. package/dist/providers/tithely/api.js +531 -0
  285. package/dist/providers/tithely/index.d.ts +19 -0
  286. package/dist/providers/tithely/index.js +86 -965
  287. package/dist/providers/tithely/skill.generated.js +2 -5
  288. package/dist/providers/tithely/tools.js +426 -0
  289. package/dist/providers/vercel/api.js +551 -0
  290. package/dist/providers/vercel/index.d.ts +11 -25
  291. package/dist/providers/vercel/index.js +67 -261
  292. package/dist/providers/vercel/lib/config.d.ts +2 -0
  293. package/dist/providers/vercel/lib/config.js +2 -0
  294. package/dist/providers/vercel/lib/index.js +117 -0
  295. package/dist/providers/vercel/lib/logs.js +100 -0
  296. package/dist/providers/vercel/lib/pin.js +270 -0
  297. package/dist/providers/vercel/openapi.generated.js +398 -376
  298. package/dist/providers/vercel/{value-safety.js → safety.js} +261 -42
  299. package/dist/providers/vercel/skill.generated.js +2 -7
  300. package/dist/providers/vercel/tools.js +642 -0
  301. package/dist/redaction-identity.js +47 -0
  302. package/dist/redaction-marker.js +125 -0
  303. package/dist/registry.d.ts +30 -28
  304. package/dist/registry.js +446 -413
  305. package/dist/routes/access-tokens.js +1 -1
  306. package/dist/routes/actor-labels.js +1 -1
  307. package/dist/routes/connect.js +1 -1
  308. package/dist/routes/dispatch.js +103 -0
  309. package/dist/routes/mcp.js +170 -79
  310. package/dist/routes/oauth.js +3 -1
  311. package/dist/routes/operator.js +2 -2
  312. package/dist/routes/shared.d.ts +5 -4
  313. package/dist/routes/shared.js +244 -177
  314. package/dist/routes/skills.js +10 -8
  315. package/dist/routes/ui-config.js +27 -3
  316. package/dist/routes/ui-data.js +29 -22
  317. package/dist/routes/ui.js +1 -1
  318. package/dist/runtime/call-admission.js +0 -26
  319. package/dist/runtime/call-entry.js +30 -0
  320. package/dist/runtime/call.js +556 -0
  321. package/dist/runtime/connector-scope.js +7 -0
  322. package/dist/runtime/credential-probe.js +34 -0
  323. package/dist/runtime/executor.js +40 -0
  324. package/dist/runtime/native-storage.js +63 -0
  325. package/dist/runtime/registry.js +27 -0
  326. package/dist/runtime/request-scope.js +72 -0
  327. package/dist/runtime/run.js +15 -7
  328. package/dist/runtime/shared-read.js +34 -5
  329. package/dist/runtime/storage.js +34 -21
  330. package/dist/sent-secrets.d.ts +194 -37
  331. package/dist/sent-secrets.js +1743 -340
  332. package/dist/server.js +5 -56
  333. package/dist/skills.js +330 -224
  334. package/dist/sqlite.js +15 -14
  335. package/dist/storage/d1-copy.js +255 -0
  336. package/dist/storage/d1-driver.js +15 -0
  337. package/dist/storage/keys.js +28 -0
  338. package/dist/storage/sql-driver.js +88 -0
  339. package/dist/storage/sql-native.js +544 -0
  340. package/dist/storage/sql-schema.d.ts +6 -0
  341. package/dist/storage/sql-schema.js +15 -0
  342. package/dist/storage/sql.d.ts +14 -20
  343. package/dist/storage/sql.js +29 -535
  344. package/dist/timeout.js +0 -26
  345. package/dist/tool-safety.js +20 -10
  346. package/dist/types.d.ts +11 -99
  347. package/dist/upward.js +3 -0
  348. package/dist/usage-guide.js +3 -1
  349. package/dist/validate.d.ts +4 -2
  350. package/dist/validate.js +86 -9
  351. package/dist/version.d.ts +1 -1
  352. package/dist/version.js +1 -1
  353. package/dist/worker.js +312 -292
  354. package/dist/workspace-subject.js +5 -1
  355. package/dist/write-outcome.js +454 -34
  356. package/documentation/README.md +27 -7
  357. package/documentation/architecture.md +2550 -186
  358. package/documentation/auth.md +821 -98
  359. package/documentation/code-mode.md +56 -21
  360. package/documentation/deploying.md +164 -20
  361. package/documentation/hosted-mcp-migration.md +460 -0
  362. package/documentation/integrating.md +144 -105
  363. package/documentation/meta-tools.md +411 -34
  364. package/documentation/operating.md +28 -4
  365. package/documentation/operator-tests.md +11 -2
  366. package/documentation/operator-ui.md +103 -33
  367. package/documentation/provider-auth-migration.md +38 -63
  368. package/documentation/provider-migration-0.29.md +10 -5
  369. package/documentation/provider-migration-0.35.md +975 -0
  370. package/documentation/providers.md +965 -0
  371. package/examples/worker/AGENTS.md +23 -9
  372. package/examples/worker/README.md +254 -135
  373. package/examples/worker/alchemy.run.ts +116 -0
  374. package/examples/worker/gitignore +10 -0
  375. package/examples/worker/src/connecta.config.ts +23 -21
  376. package/examples/worker/wrangler.jsonc +14 -5
  377. package/guides/connecting-agents.md +157 -0
  378. package/guides/how-it-works.md +156 -0
  379. package/guides/safety-and-trust.md +153 -0
  380. package/package.json +27 -42
  381. package/templates/node/.env.example +3 -0
  382. package/templates/node/README.md +22 -2
  383. package/templates/node/docker-compose.yml +1 -0
  384. package/templates/node/package.json +3 -2
  385. package/templates/node/src/connecta.config.ts +8 -0
  386. package/dist/catalog-drift.d.ts +0 -134
  387. package/dist/catalog-drift.js +0 -493
  388. package/dist/providers/_shared/request-token.js +0 -83
  389. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  390. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  391. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  392. package/dist/providers/basecamp/index.d.ts +0 -43
  393. package/dist/providers/basecamp/index.js +0 -997
  394. package/dist/providers/basecamp/skill.generated.js +0 -9
  395. package/dist/providers/cloudflare/rest.d.ts +0 -37
  396. package/dist/providers/cloudflare/rest.js +0 -1078
  397. package/dist/providers/github/hosted.js +0 -218
  398. package/dist/providers/github/rest.js +0 -321
  399. package/dist/providers/infisical/index.d.ts +0 -7
  400. package/dist/providers/infisical/index.js +0 -713
  401. package/dist/providers/infisical/skill.generated.js +0 -8
  402. package/dist/providers/linear/index.d.ts +0 -55
  403. package/dist/providers/linear/index.js +0 -352
  404. package/dist/providers/linear/skill.generated.js +0 -8
  405. package/dist/providers/mixpanel/index.d.ts +0 -57
  406. package/dist/providers/mixpanel/index.js +0 -468
  407. package/dist/providers/mixpanel/operations.js +0 -20
  408. package/dist/providers/mixpanel/rest.js +0 -603
  409. package/dist/providers/mixpanel/skill.generated.js +0 -10
  410. package/dist/providers/mixpanel/value-safety.js +0 -16
  411. package/dist/providers/notion/index.d.ts +0 -65
  412. package/dist/providers/notion/index.js +0 -368
  413. package/dist/providers/notion/openapi.generated.js +0 -75
  414. package/dist/providers/notion/rest.d.ts +0 -24
  415. package/dist/providers/notion/rest.js +0 -1226
  416. package/dist/providers/notion/skill.generated.js +0 -11
  417. package/dist/providers/notion/value-safety.js +0 -56
  418. package/dist/providers/revenuecat/index.d.ts +0 -49
  419. package/dist/providers/revenuecat/index.js +0 -557
  420. package/dist/providers/revenuecat/skill.generated.js +0 -11
  421. package/dist/providers/stripe/rest.d.ts +0 -14
  422. package/dist/providers/stripe/rest.js +0 -402
  423. package/dist/providers/vercel/rest.d.ts +0 -20
  424. package/dist/providers/vercel/rest.js +0 -1020
  425. package/dist/providers/wispr-flow/index.d.ts +0 -14
  426. package/dist/providers/wispr-flow/index.js +0 -117
  427. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  428. /package/dist/providers/github/{key.js → lib/key.js} +0 -0
package/dist/d1.js CHANGED
@@ -4,24 +4,11 @@
4
4
  // `KVStorage`, and `d1ActivityStore(db)` its activity history. Both create
5
5
  // their tables on first use, so binding the database is the whole setup.
6
6
  // `copyKvToD1` moves a 0.28 deployment's Workers KV state into it once.
7
- import { errorLabel } from "./operator-record.js";
8
- import { familyOfKey, KEY_FAMILIES, KV_COPY_CURSOR_TTL_SECONDS, kvCopyKeys, kvCutoverKeys } from "./storage/keys.js";
9
- import { copyIntoSql, sqlActivityStore, sqlStorage, } from "./storage/sql.js";
10
- function d1Driver(db) {
11
- const prepare = (statement) => statement.params.length > 0 ? db.prepare(statement.sql).bind(...statement.params) : db.prepare(statement.sql);
12
- return {
13
- async all(statement) {
14
- return (await prepare(statement).all()).results;
15
- },
16
- async run(statement) {
17
- return (await prepare(statement).run()).meta.changes ?? 0;
18
- },
19
- async batch(statements) {
20
- // D1 runs a batch as one transaction, in order.
21
- return (await db.batch(statements.map(prepare))).map((result) => result.meta.changes ?? 0);
22
- },
23
- };
24
- }
7
+ import { runEdge } from "./runtime/run.js";
8
+ import { d1Driver } from "./storage/d1-driver.js";
9
+ import { copyKvToD1Effect, markKvToD1LiveEffect } from "./storage/d1-copy.js";
10
+ import { sqlActivityStore, sqlStorage } from "./storage/sql.js";
11
+ import { keepErrorName } from "./redaction-identity.js";
25
12
  /**
26
13
  * `KVStorage` over a D1 database, with the atomic `compareAndSet` every
27
14
  * subsystem relies on. The `connecta_kv` table is created on first use; a
@@ -54,53 +41,10 @@ export class KvToD1CopyError extends Error {
54
41
  this.cursor = cursor;
55
42
  }
56
43
  }
57
- /** D1 string and row limit, in UTF-8 bytes.
58
- * https://developers.cloudflare.com/d1/platform/limits/
59
- */
60
- const D1_MAX_ROW_BYTES = 2_000_000;
61
- /** Buffered entries, excluding the single value currently being read. */
62
- const COPY_BUFFER_BYTES = 4 * 1024 * 1024;
63
- const COPY_GROUP_KEYS = 50;
64
- const KV_LIST_LIMIT = 1000;
65
- const encoder = new TextEncoder();
66
- // SQLite record header, two TEXT serial types, and an eight-byte expiry.
67
- // Reserve the worst-case header rather than accepting a row at the boundary.
68
- const ROW_OVERHEAD_BYTES = 32;
69
- const emptyCounts = () => ({
70
- copied: 0,
71
- unchanged: 0,
72
- conflicts: 0,
73
- overwritten: 0,
74
- expired: 0,
75
- invalid: 0,
76
- verified: 0,
77
- mismatches: 0,
78
- });
79
- const OUTCOME_COUNT = {
80
- copied: "copied",
81
- unchanged: "unchanged",
82
- conflict: "conflicts",
83
- overwritten: "overwritten",
84
- };
85
- function errorClass(error) {
86
- const label = errorLabel(error);
87
- return label ? ` (${label})` : "";
88
- }
89
- const valueHash = async (value) => {
90
- const hash = await crypto.subtle.digest("SHA-256", encoder.encode(value));
91
- return Array.from(new Uint8Array(hash), (byte) => byte.toString(16).padStart(2, "0")).join("");
92
- };
44
+ keepErrorName(KvToD1CopyError, "KvToD1CopyError");
93
45
  /** Mark cutover before reopening traffic. The marker stays in D1 permanently. */
94
- export async function markKvToD1Live(db, source) {
95
- if (typeof source !== "string" || !source || source.includes("\0")) {
96
- throw new TypeError("copyKvToD1 source must be a namespace id");
97
- }
98
- try {
99
- await d1Storage(db).set(kvCutoverKeys.source(source), "live");
100
- }
101
- catch (error) {
102
- throw new KvToD1CopyError(`Workers KV to D1 copy stopped: recording cutover failed${errorClass(error)}`, undefined);
103
- }
46
+ export function markKvToD1Live(db, source) {
47
+ return runEdge(markKvToD1LiveEffect(db, source));
104
48
  }
105
49
  /**
106
50
  * Copy live KV entries verbatim while all writers and traffic are stopped.
@@ -108,183 +52,6 @@ export async function markKvToD1Live(db, source) {
108
52
  * `verify` reads hashes and absolute expiries without changing copied entries.
109
53
  * Results contain counts only. Resume tokens are source-bound atomic claims.
110
54
  */
111
- export async function copyKvToD1(kv, db, options) {
112
- if (!options?.source || typeof options.source !== "string" || options.source.includes("\0")) {
113
- throw new TypeError("copyKvToD1 source must be a namespace id");
114
- }
115
- const maxKeys = options.maxKeys ?? 500;
116
- if (!Number.isSafeInteger(maxKeys) || maxKeys < 1) {
117
- throw new TypeError("copyKvToD1 maxKeys must be a positive integer");
118
- }
119
- const allowed = new Set([...KEY_FAMILIES.map((family) => family.name), "connector-owned", "unclassified"]);
120
- if (options.overwriteFamilies?.some((family) => !allowed.has(family))) {
121
- throw new TypeError("copyKvToD1 overwriteFamilies contains an unknown family");
122
- }
123
- const overwrite = new Set(options.overwriteFamilies ?? []);
124
- const driver = d1Driver(db);
125
- const storage = sqlStorage(driver, "d1");
126
- const remember = async (kvCursor) => {
127
- const token = crypto.randomUUID();
128
- await storage.set(kvCopyKeys.cursor(token), JSON.stringify({ source: options.source, cursor: kvCursor }), {
129
- ttlSeconds: KV_COPY_CURSOR_TTL_SECONDS,
130
- });
131
- return token;
132
- };
133
- let cursor;
134
- let pageCursor;
135
- const families = {};
136
- const count = (key, field) => {
137
- (families[familyOfKey(key)] ??= emptyCounts())[field] += 1;
138
- };
139
- const unknown = new TypeError("copyKvToD1 cursor is unknown, expired, spent, or belongs to another source; restart under maintenance");
140
- const stale = new TypeError("copyKvToD1 refuses stale KV after cutover");
141
- // Validate before any D1 access so a failing binding cannot return raw input
142
- // as an error's resume point.
143
- if (options.cursor !== undefined &&
144
- !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(options.cursor)) {
145
- throw unknown;
146
- }
147
- const failures = new WeakSet();
148
- const failure = (message) => {
149
- const error = new KvToD1CopyError(message, undefined);
150
- failures.add(error);
151
- return error;
152
- };
153
- try {
154
- if (!options.allowStale && (await storage.get(kvCutoverKeys.source(options.source))) !== null) {
155
- throw stale;
156
- }
157
- if (options.cursor !== undefined) {
158
- const key = kvCopyKeys.cursor(options.cursor);
159
- const stored = await storage.get(key);
160
- let record = null;
161
- try {
162
- record = stored === null ? null : JSON.parse(stored);
163
- }
164
- catch {
165
- /* refused below */
166
- }
167
- if (!record || record.source !== options.source || typeof record.cursor !== "string") {
168
- throw unknown;
169
- }
170
- // Delete only the exact record read: concurrent consumers cannot both win.
171
- if (!(await storage.compareAndSet(key, stored, null)))
172
- throw unknown;
173
- cursor = record.cursor;
174
- }
175
- }
176
- catch (error) {
177
- if (error === unknown || error === stale)
178
- throw error;
179
- throw new KvToD1CopyError(`Workers KV to D1 copy stopped: claiming the resume point in D1 failed${errorClass(error)}`, options.cursor);
180
- }
181
- const flush = async (buffer) => {
182
- const entries = buffer.filter((entry) => {
183
- if (entry.expiresAtMs !== null && entry.expiresAtMs <= Date.now()) {
184
- count(entry.key, "expired");
185
- return false;
186
- }
187
- return true;
188
- });
189
- if (!entries.length)
190
- return;
191
- try {
192
- if (options.verify) {
193
- for (const entry of entries) {
194
- const [row] = await driver.all({
195
- // Read bytes, including NUL, and hash in JS. D1 has no SHA-256 function.
196
- sql: "SELECT CAST(value AS BLOB) AS value_bytes, expires_at_ms FROM connecta_kv WHERE key = ?",
197
- params: [entry.key],
198
- });
199
- const bytes = row ? Uint8Array.from(row.value_bytes) : undefined;
200
- const hash = bytes ? await crypto.subtle.digest("SHA-256", bytes) : undefined;
201
- const hex = hash
202
- ? Array.from(new Uint8Array(hash), (byte) => byte.toString(16).padStart(2, "0")).join("")
203
- : undefined;
204
- count(entry.key, row && row.expires_at_ms === entry.expiresAtMs && hex === (await valueHash(entry.value))
205
- ? "verified"
206
- : "mismatches");
207
- }
208
- }
209
- else {
210
- // Partition only this bounded buffer by overwrite permission.
211
- for (const replace of [false, true]) {
212
- const group = entries.filter((entry) => overwrite.has(familyOfKey(entry.key)) === replace);
213
- if (!group.length)
214
- continue;
215
- const outcomes = await copyIntoSql(driver, group, { overwrite: replace, now: Date.now() });
216
- for (const [index, outcome] of outcomes.entries())
217
- count(group[index].key, OUTCOME_COUNT[outcome]);
218
- }
219
- }
220
- }
221
- catch (error) {
222
- throw failure(`Workers KV to D1 copy stopped: ${options.verify ? "verifying" : "writing to"} D1 failed${errorClass(error)}`);
223
- }
224
- };
225
- let read = 0;
226
- try {
227
- for (;;) {
228
- pageCursor = cursor;
229
- let page;
230
- try {
231
- page = await kv.list({ limit: Math.min(KV_LIST_LIMIT, maxKeys - read), ...(cursor ? { cursor } : {}) });
232
- }
233
- catch (error) {
234
- throw failure(`Workers KV to D1 copy stopped: listing Workers KV failed${errorClass(error)}`);
235
- }
236
- read += page.keys.length;
237
- let entries = [];
238
- let bufferedBytes = 0;
239
- for (const key of page.keys) {
240
- const keyBytes = encoder.encode(key.name).byteLength;
241
- if (key.name.includes("\0") || keyBytes + ROW_OVERHEAD_BYTES > D1_MAX_ROW_BYTES) {
242
- count(key.name, "invalid");
243
- continue;
244
- }
245
- const expiresAtMs = key.expiration === undefined ? null : key.expiration * 1000;
246
- if (expiresAtMs !== null && expiresAtMs <= Date.now()) {
247
- count(key.name, "expired");
248
- continue;
249
- }
250
- let value;
251
- try {
252
- value = await kv.get(key.name, "text");
253
- }
254
- catch (error) {
255
- throw failure(`Workers KV to D1 copy stopped: reading an entry of the ${familyOfKey(key.name)} family from Workers KV failed${errorClass(error)}`);
256
- }
257
- if (value === null || (expiresAtMs !== null && expiresAtMs <= Date.now())) {
258
- count(key.name, "expired");
259
- continue;
260
- }
261
- const valueBytes = encoder.encode(value).byteLength;
262
- const bytes = keyBytes + valueBytes + ROW_OVERHEAD_BYTES;
263
- if (valueBytes > D1_MAX_ROW_BYTES || bytes > D1_MAX_ROW_BYTES) {
264
- count(key.name, "invalid");
265
- continue;
266
- }
267
- if (entries.length >= COPY_GROUP_KEYS || bufferedBytes + bytes > COPY_BUFFER_BYTES) {
268
- await flush(entries);
269
- entries = [];
270
- bufferedBytes = 0;
271
- }
272
- entries.push({ key: key.name, value, expiresAtMs });
273
- bufferedBytes += bytes;
274
- }
275
- await flush(entries);
276
- if (page.list_complete || !page.cursor)
277
- return { done: true, families };
278
- cursor = page.cursor;
279
- if (read >= maxKeys)
280
- return { done: false, cursor: await remember(cursor), families };
281
- }
282
- }
283
- catch (error) {
284
- // The old token was claimed atomically. Replace it on failure, if D1 works.
285
- const resume = pageCursor === undefined ? undefined : await remember(pageCursor).catch(() => undefined);
286
- throw new KvToD1CopyError(error instanceof KvToD1CopyError && failures.has(error)
287
- ? error.message
288
- : `Workers KV to D1 copy stopped: recording the resume point in D1 failed${errorClass(error)}`, resume);
289
- }
55
+ export function copyKvToD1(kv, db, options) {
56
+ return runEdge(copyKvToD1Effect(kv, db, options));
290
57
  }
@@ -0,0 +1,5 @@
1
+ // The Promise bridge shares its service entry only through explicit derivation.
2
+ import { deriveView } from "./runtime/call.js";
3
+ export function deriveContext(ctx, overrides) {
4
+ return deriveView(ctx, overrides);
5
+ }
@@ -20,6 +20,8 @@ export type DescribedMember = {
20
20
  };
21
21
  /** One connector as `describeConfig()` reports it. */
22
22
  export interface DescribedConnector {
23
+ /** Connector policy, independent of endpoint policy; omitted when false. */
24
+ readOnly?: boolean;
23
25
  id: string;
24
26
  title?: string;
25
27
  description?: string;
@@ -103,7 +105,7 @@ export interface ConnectaConfigDescription {
103
105
  namespace: string;
104
106
  id: string;
105
107
  }>;
106
- classification: Record<string, Record<string, "read" | "write">>;
108
+ classification: Record<string, Record<string, "read" | "write" | "hidden">>;
107
109
  /** Inbound auth providers in the order they are tried. */
108
110
  auth: Array<{
109
111
  kind: string;
@@ -124,6 +126,8 @@ export interface ConnectaConfigDescription {
124
126
  tools: string[];
125
127
  members: DescribedMember[];
126
128
  readOnly: boolean;
129
+ surface: "meta" | "native";
130
+ executeCode: boolean;
127
131
  owner: string | null;
128
132
  description: string | null;
129
133
  }>;
@@ -133,6 +133,7 @@ function describeConnector(connector, deploymentCap, registry) {
133
133
  const guideSummary = connectorGuideSummary(connector);
134
134
  const guided = connector.usageGuide !== undefined;
135
135
  return {
136
+ ...(connector.readOnly === true ? { readOnly: true } : {}),
136
137
  id: connector.id,
137
138
  ...(str(connector.title) !== undefined ? { title: connector.title } : {}),
138
139
  ...(str(connector.description) !== undefined ? { description: connector.description } : {}),
@@ -243,6 +244,8 @@ export function describeConfig(input) {
243
244
  agents: [...config.agents],
244
245
  pools: Object.entries(config.pools ?? {}).map(([name, pool]) => ({
245
246
  readOnly: pool.readOnly ?? config.readOnly,
247
+ surface: pool.surface ?? "meta",
248
+ executeCode: pool.executeCode !== false,
246
249
  name,
247
250
  path: `/mcp/${name}`,
248
251
  tools: pool.tools.map(String),