@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
@@ -3,6 +3,21 @@
3
3
  Use this guide to change connectors in deployment configuration.
4
4
  [All agent routes](./README.md) are in the index.
5
5
 
6
+ ## Make one connection read-only
7
+
8
+ Every connector accepts optional `readOnly?: boolean`, defaulting to `false`:
9
+ `remoteMcp("notes", { url: "https://notes.example.com/mcp", auth: { type: "headers", headers: {} }, readOnly: true })`,
10
+ `api("tickets", { readOnly: true, tools: [] })`, and maintained providers such as
11
+ `stripe("billing", { purpose: "Revenue reports", auth: { type: "oauth" }, readOnly: true })`.
12
+ A custom `Connector` sets `readOnly: true` on its connector object.
13
+
14
+ Only tools classified read appear in search and describe, and every write or
15
+ unclassified tool call is refused before dispatch on every endpoint, including
16
+ maintainers' plain `/mcp`, programs, `call_tool`, and `call_destructive_tool`.
17
+ Effective read-only is endpoint `readOnly` OR connector `readOnly`; connector
18
+ `false` never widens an endpoint. Existing pool/deployment inheritance is unchanged.
19
+ Guides may still name unavailable tools. The operator UI shows a Read-only badge.
20
+
6
21
  ## Add or remove a connector
7
22
 
8
23
  Connectors are code-owned. Edit the deployment's `src/connecta.config.ts`;
@@ -78,22 +93,9 @@ the deployment constructs its registry.
78
93
 
79
94
  ## Maintained integrations
80
95
 
81
- Import a provider individually. For example, Linear requires an explicit
82
- choice of its downstream endpoint:
83
-
84
- ```ts
85
- import { linear } from "@zackbart/connecta/providers/linear";
86
-
87
- const tracker = linear("tracker", {
88
- purpose: "Engineering issues in our workspace",
89
- access: "read-only",
90
- });
91
- // Add tracker to the deployment's connectors array.
92
- ```
93
-
94
- Linear defaults to OAuth; its read-only endpoint requests only the downstream
95
- read scope. That is separate from a Connecta `readOnly` endpoint. Read the installed `dist/providers/linear/index.d.ts` for API-key framing,
96
- workspace instructions, and admission choices.
96
+ Import a provider individually from its published subpath. For removed presets
97
+ or a provider's former hosted mode, use the
98
+ [hosted MCP migration guide](./hosted-mcp-migration.md).
97
99
 
98
100
  The [human README](../README.md#what-you-can-connect) lists available
99
101
  integrations. In the installed package, `dist/providers/<name>/index.d.ts`
@@ -105,85 +107,37 @@ providers require administrator-managed domain-wide delegation and a deployment
105
107
  mapping from admitted identity to the downstream account; an agent acts as its
106
108
  pool's `owner` instead ([auth guide](auth.md#pool-owners-for-google-workspace)).
107
109
  A request must not choose its own account. Gmail never sends mail, and Drive never permanently
108
- deletes files.
109
-
110
- Wispr Flow uses OAuth only through `wisprFlow()` from
111
- `@zackbart/connecta/providers/wispr-flow`. It reaches the authorized account's
112
- Notetaker content, with personal and work accounts holding separate data.
113
- Its runtime guide, available through `connecta.skill("connector:<id>")` in `execute_code`, describes account access,
114
- search limits, transcript permissions and paging. The
115
- reviewed classification includes task writes listed in Claude's directory even
116
- though Wispr's public help describes read-only access; discover the account's
117
- actual tools before assuming those writes exist.
118
-
119
- Stripe requires `auth`: `{ type: "oauth" }` reaches Stripe's hosted MCP
120
- server, and `{ type: "apiKey" }` with `mode` reaches Connecta's REST connector
121
- with an operator-managed key. Notion requires `auth` the same way:
122
- `{ type: "oauth" }` acts as the signed-in user over Notion's hosted MCP, and
123
- `{ type: "token" }` acts as an internal integration over Connecta's REST
124
- connector. Cloudflare requires `auth` too: `{ type: "oauth" }` reaches its
125
- hosted MCP server, and `{ type: "apiToken" }` or `{ type: "globalApiKey" }`
126
- reaches Connecta's REST connector, with an optional `pin` of accounts and zones
127
- (required for a Global API Key unless `unpinned: true`). Vercel requires `auth`
128
- as well: `{ type: "oauth" }` reaches Vercel's hosted MCP server, and
129
- `{ type: "token" }` with an optional `teamId` reaches Connecta's REST connector
130
- with an operator-managed access token. Vercel admits only reviewed and approved
131
- MCP clients to its hosted server, an operational gate outside Connecta. See the
132
- [provider auth migration](./provider-auth-migration.md).
133
- To use both implementations of one provider, configure two connector ids with
134
- independent credentials.
135
-
136
- Both Notion auth variants accept optional `callAdmission`. For a token
137
- connector it replaces the whole per-runtime default of 180 calls per minute
138
- and 3 concurrent. Notion's [request limits](https://developers.notion.com/reference/request-limits)
139
- allow 600 requests per minute per connection on Business and Enterprise and
140
- 180 on other plans. A separate workspace-wide limit is shared by all
141
- connections. Size an override for other runtime traffic and tools that make
142
- multiple HTTP requests. Only an omitted or `undefined` policy selects the
143
- default; malformed policies, including `false`, `null`, `0`, and `""`, throw
144
- at construction on both auth variants.
145
-
146
- Planning Center's `excludeApps` removes whole products from a connection, for
147
- example `planningCenter("pco", { purpose, excludeApps: ["giving"] })` for a
148
- deployment that keeps agents away from donor and financial data. Excluded
149
- products lose their named tools, guide text, and version pins, and the
150
- `pco_api_get` and `pco_api_mutate` hatches refuse their paths before sending.
151
- The check reads the exact URL the transport would fetch, and while any product
152
- is excluded a hatch path must be literal: dot segments, empty segments,
153
- backslashes, whitespace, and percent-encoded `/`, `\`, `?`, `#`, or `%` are
154
- refused rather than normalized.
155
-
156
- Exclusion also closes the routes through which the excluded product's data is
157
- reachable through another product. While any product is excluded the connection removes
158
- `list_lists`, `list_list_people`, and `run_list` and refuses every People list,
159
- list result, rule, and condition, by path or `include`, because a list's
160
- conditions can draw on any product, such as a donor list built from Giving
161
- donations, and lists can depend on other lists. Planning Center publishes a
162
- list's conditions, but a reliable check would have to follow every nested list,
163
- so the connection does not attempt one. It refuses webhook event and delivery
164
- payloads, since a payload can carry any product's records, and every change to
165
- an existing webhook subscription by id, since the id does not name its product.
166
- A new subscription must name a reachable product's event. People cannot be
167
- excluded.
168
-
169
- What exclusion guarantees is that agents reach none of the excluded product's
170
- endpoints, no live cross-product query such as a People list, and no webhook
171
- payload or change to an existing subscription. It does not hide records that the church's own
172
- automations or staff have copied into a reachable product. A
173
- [Giving automation](https://help.planningcenter.com/en/144355-automations-in-giving.html)
174
- can add first-time donors to a People workflow, and those workflow cards stay
175
- readable, as do donor details recorded in notes, custom fields, or form
176
- answers. Those are People data once written, so the connection does not refuse
177
- them by guessing at their origin.
178
-
179
- For a hard boundary, give the connection a personal access token belonging to a
180
- Planning Center user with No Access in the excluded product. Planning Center
181
- sets permissions per product for each user, does not grant Giving to
182
- organization administrators automatically, and lets People workflows be shared
183
- per workflow; a token carries its user's permissions, so Planning Center itself
184
- refuses what that user cannot see. `excludeApps` is defense in depth on top of
185
- that boundary: it narrows what Connecta exposes, not what the token can do
186
- elsewhere.
110
+ deletes files. Google Docs setup and hatch limits are in
111
+ [Google Docs setup](./providers.md#google-docs). Slides setup is in
112
+ [Google Slides setup](./providers.md#google-slides).
113
+
114
+ Stripe, Vercel, and Cloudflare vendor only their APIs. Cloudflare setup is in
115
+ [Maintained provider setup](./providers.md#cloudflare).
116
+ Keep their existing API auth choices. For token setup, team routing, bounded logs
117
+ and upload limits, see [Vercel setup](./providers.md#vercel).
118
+ GitHub provides scoped App-authenticated repository reads, release writes and guarded merges; see [GitHub setup](./providers.md#github). Hosted servers use distinct
119
+ `remoteMcp()` entries, separate from maintained API providers.
120
+
121
+ For Stripe API-key setup, see [Stripe setup](./providers.md#stripe).
122
+ Prefer a restricted `rk_` key with only read permissions for read-only access;
123
+ Stripe enforces it too.
124
+
125
+ For Planning Center construction, token permissions, product exclusions,
126
+ per-product versions and rate/admission limits, see
127
+ [Planning Center setup](./providers.md#planning-center). Its `pco_api_search`
128
+ and `pco_api_details` discover reviewed operations; `pco_api_read` reads them,
129
+ and `pco_api_write` sends approved writes.
130
+
131
+ Church Community Builder's `sensitiveFields` option controls the documented
132
+ sensitive response fields. Advanced search can still filter on dropped sensitive
133
+ fields, so matching rows can reveal their values by inference. Where that
134
+ matters, omit `read:advanced_searches` from the exact configured OAuth scopes.
135
+ See [Church Community Builder](./providers.md#church-community-builder)
136
+ for OAuth setup, scope boundaries, permanent withholding, paging and limits.
137
+ Tithe.ly's option works the same way; see [Tithe.ly](./providers.md#tithely).
138
+
139
+ For delegated Google Forms setup, scopes, response privacy and refused publish/watch
140
+ operations, see [Google Forms setup](./providers.md#google-forms).
187
141
 
188
142
  ## Another remote MCP server
189
143
 
@@ -211,15 +165,69 @@ also supports OAuth, static headers, and request-local token resolution. Use
211
165
  for those cases. Secrets belong in deployment secret storage or the vault,
212
166
  not source literals.
213
167
 
214
- Remote catalogs evolve. Discovery, direct calls, and program calls all enforce
215
- classification against the current catalog. Missing or contradictory read hints
216
- fail closed as writes. `classify` can supply a reviewed per-tool verdict;
217
- schema changes can invalidate a reviewed read. Exact deployment classification
218
- overrides take precedence. See
219
- [reviewed classification](./architecture.md#providers-and-reviewed-classification)
220
- for precedence, schema digests, and `unlisted: "hide"`. Review the behavior
221
- before declaring a read, and do not use classification to bypass provider target
222
- scopes or caller grants.
168
+ Use optional top-level `headers` for non-secret resource context:
169
+ `remoteMcp("crm", { url: "https://crm.example/mcp", headers: {
170
+ "X-MCP-Toolsets": "tickets,notes" }, readOnly: true })`. These headers apply to
171
+ MCP handshake, catalog and call requests at the exact resource URL path, never OAuth
172
+ metadata, token or registration requests. Values are included in cache and
173
+ negotiation identities; values of at least eight characters are redacted if echoed. Configuration descriptions
174
+ show only names. Never put credentials here. Use `auth` for secrets. Extra
175
+ headers cannot be combined with `auth.type: "headers"`, collide with an
176
+ auth-owned name, or set HTTP transport/session headers
177
+ (`Accept`, `Cookie`, `Host`, `Content-*`, hop-by-hop headers, `Last-Event-ID`,
178
+ `Mcp-*`), OAuth client-auth headers, or credential-named headers such as
179
+ `X-Api-Key`. Names are case-insensitive.
180
+
181
+ Runtime-discovered tools default to read exactly when `readOnlyHint === true &&
182
+ destructiveHint !== true`; otherwise they are writes. Override individual tools
183
+ only in deployment code through the existing `classification` map:
184
+
185
+ ```ts
186
+ classification: {
187
+ crm: { list_tickets: "read", update_ticket: "write", internal_export: "hidden" },
188
+ },
189
+ ```
190
+
191
+ `"write"` requires the host's approval path. `"hidden"` omits a tool from search
192
+ and describe and refuses guessed-name calls, including programs. An absent
193
+ runtime tool leaves its override dormant with an operator warning once per catalog change; the override
194
+ applies if that exact name returns. Unknown static tool names fail construction.
195
+ No argument can change these rules. A write-to-read override changes exposure
196
+ and approval. Replay and failure decisions treat a call as a write when either its
197
+ effective class or its source class is write. The source class is the verified
198
+ server annotations;
199
+ deployment overrides never change it. A write gets one wire attempt across
200
+ OAuth renewal, reconnect, transport and authorization recovery, including program re-runs. After possible dispatch, its
201
+ failure also reports an unknown outcome with no retry or wait advice; a proven
202
+ unsent failure retains its own recovery advice. Connector `readOnly` remains
203
+ optional and composes with endpoint policy.
204
+
205
+ On Node, serve with `listen` from `@zackbart/connecta/node`: it installs the
206
+ owned transport that prevents native fetch or a host-configured dispatcher
207
+ from silently resending a remote MCP write. Without that transport, Node
208
+ refuses remote writes before dispatch. Downstream OAuth token, registration and
209
+ revocation POSTs also require the owned sender. Read calls and OAuth discovery
210
+ GETs keep native fetch. Workers
211
+ use their native fetch with manual redirects; transport failures after
212
+ dispatch remain unknown and non-retryable.
213
+
214
+ The owned sender connects directly by default. For HTTP(S) CONNECT proxy egress,
215
+ configure `listen(connecta, { port: 3000, proxy: "http://proxy.example.com:8080" })`.
216
+ This controls maintained-provider requests, remote MCP writes and OAuth
217
+ credential POSTs; it ignores `NODE_USE_ENV_PROXY`, `HTTP_PROXY`, `HTTPS_PROXY`
218
+ and host proxy dispatchers. Remote MCP reads and OAuth discovery GETs retain
219
+ native fetch and need their own host proxy policy. An uncertain refresh requires
220
+ fresh authorization rather than replaying the spent token. See
221
+ [Node startup](./deploying.md#start-on-node) for the proxy URL, credentials and
222
+ TLS trust rules.
223
+
224
+ Remote catalogs evolve. Discovery, direct calls, and programs enforce the
225
+ current annotations and `ConnectaConfig.classification` overrides. A leftover
226
+ `classify` option throws at construction and names that map. Provider reviews,
227
+ schema pins, `optional`, and `unlisted: "hide"` are removed. Missing or
228
+ contradictory hints make the source class write, even when an override makes
229
+ the effective class read. Review behavior before setting a read override;
230
+ classification does not replace downstream scopes or caller grants.
223
231
 
224
232
  ## A hand-written HTTP capability
225
233
 
@@ -262,6 +270,27 @@ writes use `call_destructive_tool` or a program, within the caller's grants; a
262
270
  tool definition. Use declared output
263
271
  schemas when known; runtime observations cannot replace them.
264
272
 
273
+ A write leaves once. Once a write-classified tool's handler has run, any
274
+ failure it ends with is non-retryable with `writeOutcome: "unknown"`, whatever
275
+ its code: a handler can reach the network in ways `api()` cannot observe, so
276
+ nothing it reports proves its write was not sent. A raw network error or an
277
+ `unavailable` becomes `connector_call_failed`; any other `ConnectorCallError`
278
+ keeps its code. Failures before
279
+ the handler runs stay ordinary refusals: argument validation against
280
+ `inputSchema` and missing authorization. Declare input constraints in
281
+ `inputSchema` so a malformed write is refused before the handler starts. In-process
282
+ calls treat undefined properties of plain objects as absent during validation,
283
+ including records nested in arrays. Other objects, such as dates, byte arrays
284
+ and class instances, retain their identity. For example, `{ title: "Minutes", cursor: undefined }` validates
285
+ like `{ title: "Minutes" }`. Validation leaves the caller's arguments intact;
286
+ handlers receive the normalized input. One input evaluation failure cannot
287
+ disable validation for later calls. A
288
+ read's failure keeps its own advice, so a network error stays a retryable
289
+ `unavailable`. `ctx.oauth.fetch` never resends a write the API answered with
290
+ HTTP 401 (see [Downstream OAuth on api()](./auth.md#downstream-oauth-on-api)).
291
+ When the handler settles, the call ends: a `ctx.fetch` or `ctx.oauth.fetch`
292
+ request it starts afterwards fails without being sent.
293
+
265
294
  ## Separate ownership from visibility
266
295
 
267
296
  `authScope: "shared"` uses deployment-owned downstream auth; `"personal"` uses
@@ -292,5 +321,15 @@ and [provider construction](https://github.com/zackbart/connecta/blob/main/src/p
292
321
  [Remote tests](https://github.com/zackbart/connecta/blob/main/test/remote-mcp.test.ts),
293
322
  [API tests](https://github.com/zackbart/connecta/blob/main/test/api-connector.test.ts),
294
323
  [provider contracts](https://github.com/zackbart/connecta/blob/main/test/provider-contracts.test.ts),
295
- and [classification tests](https://github.com/zackbart/connecta/blob/main/test/classified-decorators.test.ts)
324
+ and the [write-once tests](https://github.com/zackbart/connecta/blob/main/test/remote-mcp-write-once.test.ts)
296
325
  check shared behavior. Provider-specific tests remain beside each provider.
326
+
327
+ ## Connect an Eve agent
328
+
329
+ Use [`@zackbart/connecta-eve`](https://github.com/zackbart/connecta/blob/main/packages/connecta-eve/README.md)
330
+ in the Eve app for an app-owned connection and endpoint instructions refreshed
331
+ at turn start. It requires Node 24 and Eve 0.83.x, and installs separately from
332
+ Connecta. Follow its README for the two agent files, token environment variables,
333
+ optional write approval and Vercel OIDC token source. Configure the server's
334
+ [agent and pool membership](./auth.md#issue-rotate-or-revoke-an-agent-token)
335
+ before connecting.