@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
@@ -7,7 +7,12 @@ and credentials are the deployment operator's responsibility; use
7
7
 
8
8
  ## Choose the call path
9
9
 
10
- Connecta exposes six top-level tools. Read [the tool table](./meta-tools.md#the-six-tools)
10
+ A [native pool](./meta-tools.md#native-tool-surface) lists individual operations.
11
+ Use your host's tool search, call a known operation directly, and follow its
12
+ repair or authorization handoff. Use `execute_code` for combined work when
13
+ listed; without code, page results through the listed `read_result` tool.
14
+
15
+ Meta endpoints expose six top-level tools. Read [the tool table](./meta-tools.md#the-six-tools)
11
16
  for exact arguments and result envelopes. Follow the endpoint's supplied
12
17
  instructions and `skills` usage guide for deployment-specific context.
13
18
 
@@ -24,7 +29,7 @@ descriptions. On a writable endpoint, programs and `call_destructive_tool` may
24
29
  write within the caller's grants, and `execute_code` is annotated as a write;
25
30
  the client controls approval. On a read-only endpoint, search and describe omit
26
31
  write tools and every write call is refused with `read_only_endpoint`, even one
27
- a connector guide names; tell the user rather than looking for another route. Never change pool, identity, or `readOnly` to work
32
+ a connector guide names; tell the user rather than looking for another route. A connector marked Read-only serves only read-classified tools even on a writable endpoint; writes and unclassified tools are omitted from search/describe and refused on every call path. Endpoint and connector restrictions compose by OR. Never change pool, identity, or `readOnly` to work
28
33
  around a refusal.
29
34
  [Routing between the call surfaces](./meta-tools.md#routing-between-the-call-surfaces)
30
35
  owns the full decision rules.
@@ -100,6 +105,12 @@ values. Treat it as evidence, not a provider contract; handle missing fields.
100
105
 
101
106
  ## Large results and resources
102
107
 
108
+ MCP request bodies default to a 4 MiB limit on every endpoint. Deployment code
109
+ can set `admission.requests.maxBodyBytes`; `describeConfig()` reports its value
110
+ and source. An oversized body returns 413 before tool dispatch. See
111
+ [request admission and body limits](./architecture.md#admission-in-two-places)
112
+ for Node's separate pre-auth buffer and the listen-classification bound.
113
+
103
114
  Direct calls may return a preview and a result handle. Page the handle through
104
115
  `connecta.result` in a program using the returned offset and byte limits, or
105
116
  reduce the data in the original program. Handles are short-lived and bound to
@@ -122,10 +133,23 @@ and status do not begin consent on their own. Follow
122
133
  [argument recovery](./meta-tools.md#argument-recovery) for the specific failure.
123
134
 
124
135
  A dispatched write is never automatically replayed. An ambiguous timeout may
125
- mean the provider applied it; inspect state or ask for the missing decision
126
- before issuing it again. [Retry semantics](./code-mode.md#retry-semantics) and
136
+ mean the provider applied it; inspect state to check whether it took effect, or
137
+ ask for the missing decision, before any fresh call. [Retry semantics](./code-mode.md#retry-semantics) and
127
138
  [writes](./code-mode.md#writes) describe program outcomes and write accounting.
128
139
 
140
+ ## Read failure records
141
+
142
+ Failure logs and connector status report checked facts without downstream
143
+ error text. A failure record can include `httpStatus`, an integer from 100
144
+ through 599; status messages can include `with HTTP <status>`. Recorded status
145
+ is retained when a write's 401 had no mapped authorization verdict, when a Google write reports
146
+ an unknown outcome, and when a response exceeds the connector's byte ceiling.
147
+ If no answer was recorded, the field is absent. The status alone does not
148
+ prove whether a write took effect or permit replaying it.
149
+
150
+ For example, a `crm` write answered HTTP 503 can log `httpStatus: 503` while
151
+ its outcome stays unknown. Inspect the target before repeating the call.
152
+
129
153
  ## Contributor reference
130
154
 
131
155
  ### Implementation and evidence
@@ -61,7 +61,7 @@ pool member, who gets the member page, with no tabs, on every path.
61
61
  | Activity | No calls | Activity | Member page, no activity request |
62
62
  | Settings | Snapshot without connectors or pools | Config | Member page, no configuration facts |
63
63
 
64
- Populated Overview has a failing connector, drift, auth and credential problems
64
+ Populated Overview has a failing connector, auth and credential problems
65
65
  and a tokenless agent in its attention list. Populated Endpoints shows who can use each endpoint; populated Tokens has one
66
66
  agent per slot state, with pools and last seen.
67
67
 
@@ -102,7 +102,13 @@ empty catalog counts zero.
102
102
  `test/browser/operator-overview.spec.ts` covers the Overview on the frozen v2
103
103
  fixtures: the status pill, stat labels and numbers, map columns, dashed read-only grants and dotted
104
104
  tokenless access; attention rows with their fix links, a copied fix prompt equal
105
- to the catalogue's text and a failing connector sorted first; the hover
105
+ to the catalogue's text, config order through a staggered full refresh, prototype-named
106
+ connector IDs during loading and failure, and stable single-card height when
107
+ its catalog empties. A single long-id, long-title card at 320, 390, 1024 and
108
+ 1440px covers all eight status labels, both auth scopes, with and without the
109
+ Read-only badge, tools and an action. Text rows stay single-line, full text
110
+ remains accessible, links stay focusable, and the detail header and Overview
111
+ attention rows retain their height; the hover
106
112
  sentence replacing the legend, and dimming; keyboard focus in column order with each node's sentence
107
113
  as its accessible name, Enter opening an endpoint's row and a connector; the
108
114
  narrow list, whose caller chips link where their map nodes do; an empty deployment; and a member at `/` getting the member page
@@ -169,6 +175,9 @@ updates run only through `workflow_dispatch`.
169
175
  On a matching Linux runner, `pnpm install --frozen-lockfile`, install Chromium with the command above,
170
176
  then run `pnpm run test:browser:snapshots`. The normal command is
171
177
  `pnpm run test:browser`. Missing baselines fail CI; retries cannot bless them.
178
+ Visual comparisons run in their own Playwright project without retries, so a
179
+ mismatch fails on its first attempt. When any attempt fails, CI uploads
180
+ the HTML report, actual/expected/diff images and traces as `playwright-report`.
172
181
  Set `OPERATOR_VISUAL_INSPECT=1` to retain local screenshots under ignored
173
182
  `test-results/` for inspection, without updating committed baselines.
174
183
 
@@ -42,15 +42,15 @@ No select menu displays configuration. Copy is short labels; a failure names
42
42
  what to do next in one or two sentences and never quotes a route's or
43
43
  downstream's text.
44
44
 
45
- | Path | Page | Who |
46
- | ------------------ | ------------------------------------------------------ | ---------- |
47
- | `/` | Overview (a member gets the member page) | Maintainer |
48
- | `/endpoints` | Endpoints; `#mcp/<pool>` opens that row | Maintainer |
49
- | `/connectors` | Connectors list; `?view=matrix` for the matrix | Maintainer |
50
- | `/connectors/<id>` | Connector detail; `#tools`, `#connection`, `#activity` | Maintainer |
51
- | `/activity` | Activity | Maintainer |
52
- | `/tokens` | Tokens, when token management is open to the viewer | Maintainer |
53
- | `/settings` | Settings | Maintainer |
45
+ | Path | Page | Who |
46
+ | ------------------ | ------------------------------------------------------------ | ---------- |
47
+ | `/` | Overview (a member gets the member page) | Maintainer |
48
+ | `/endpoints` | Endpoints; `#mcp/<pool>` opens that row | Maintainer |
49
+ | `/connectors` | Connectors list; `?view=matrix` for the matrix | Maintainer |
50
+ | `/connectors/<id>` | Connector detail; `#tools`, `#connection`, `#activity` | Maintainer |
51
+ | `/activity` | Activity | Maintainer |
52
+ | `/tokens` | Tokens, when agents are declared or token management is open | Maintainer |
53
+ | `/settings` | Settings | Maintainer |
54
54
 
55
55
  `/access` redirects to `/endpoints`, `/tools` to `/connectors`, and `/config`
56
56
  to `/settings`, replacing the history entry. Connector hashes `#config`,
@@ -68,15 +68,16 @@ parameters such as signed handoffs. A pool member sees the
68
68
  marks; a tokenless agent's mark is hollow). A dot legend counts each segment
69
69
  kind; the first two tiles link to their pages. At 760px and below the tiles
70
70
  sit two up, with People · Agents as one row across both.
71
- - **Needs attention.** One row per connector whose health is not ok, failing
72
- first, then one per agent in a pool whose token is missing or revoked. A
71
+ - **Needs attention.** One row per connector whose health is not ok, in
72
+ configuration order, then one per agent in a pool whose token is missing or revoked. A
73
73
  row names the problem ("crm needs authorization"), the endpoints it
74
74
  affects ("Affects /mcp and /mcp/team") or the agent URL it can't connect at,
75
- and links to the existing fix: Connect, Replace key, Inspect or Review on
75
+ and links to the existing fix: Connect, Replace key or Inspect on
76
76
  the connector's Connection tab, or Issue token on Tokens. A row with a
77
- problem code or drift also has Copy fix prompt. A problem keeps its row and
77
+ problem code also has Copy fix prompt. A problem keeps its row and
78
78
  prompt when the connector's detail read failed, prefixed "Details didn't
79
- load". With no rows it reads "All clear".
79
+ load". Surviving connector rows retain their order as individual reads settle,
80
+ even when their severity changes. With no rows it reads "All clear".
80
81
  - **Who reaches what.** The [connection map](#connection-map).
81
82
 
82
83
  ### Connection map
@@ -108,6 +109,10 @@ instead of "0 tools".
108
109
 
109
110
  ### Endpoints
110
111
 
112
+ Pool endpoint rows show the effective surface (`meta` or `native`) and whether
113
+ code is on. These are read-only facts from deployment configuration; change
114
+ `surface` and `executeCode` in deployment code.
115
+
111
116
  One row each for `/mcp` and every pool: the path, a read-only pill on a
112
117
  read-only endpoint, a copyable URL, who can use it, its connectors as colored
113
118
  monograms (four, then "+N"), its tool count over a read and write bar, and a
@@ -134,15 +139,37 @@ cells for the root), guarded grants' live verdicts, and read-only mode.
134
139
  ### Connectors
135
140
 
136
141
  One card per connector: title and id, one status pill, a Shared or Per person
137
- badge, its tool count over a read and write bar, and when it was last called.
142
+ badge, a Read-only badge when connector `readOnly` is enabled, its tool count over a read and write bar, and when it was last called.
138
143
  All, Needs attention and Healthy filter the cards, with counts, beside a
139
144
  search field. A connector that is not fine adds one action (Connect, Replace
140
- key, Inspect, or Review for drift) that opens its Connection tab.
145
+ key or Inspect) that opens its Connection tab.
141
146
 
142
147
  Every view shares one verdict per connector: the server's problem code first
143
148
  (a failed catalog reads "Catalog failed", never "Connected"), then a failed
144
- detail read ("Couldn't load", with no fix prompt), then a non-ok status, then
145
- catalog drift.
149
+ detail read ("Couldn't load", with no fix prompt), then a non-ok status.
150
+ Catalog drift is informational: it stays in the connector's Connection panel
151
+ with its fix prompt and in Activity, and never affects health or attention.
152
+
153
+ Health does not bounce while details load. A connector whose detail read is
154
+ in flight (its `/ui/data` row is `loading`, during sign-in, Retry or a
155
+ connector's Refresh) keeps the verdict the page last showed for it on every
156
+ view (cards, filter counts, the Overview headline, bar, attention list and map,
157
+ Endpoints and the connector page) until that read settles, never "Loading
158
+ details" or an in-between verdict. A connector with no earlier verdict shows
159
+ its contract status. Each connector changes only when its own read settles,
160
+ so one slow read never holds back the others and no row moves for an
161
+ in-between verdict. A new signed-in identity starts fresh. Cards reserve the action footer
162
+ even when no action is needed and the tool bar row even when the catalog is
163
+ empty. Each card header keeps its title, status and id/scope badges on single
164
+ lines; long text truncates with ellipsis and retains its full value on hover
165
+ and for screen readers. The connector detail header and Overview attention
166
+ text follow the same rule, and truncated links remain keyboard focusable.
167
+ Wider status labels never change the card height.
168
+
169
+ The top bar uses an icon-only Search button (⌘K or Ctrl+K opens the palette).
170
+ Deployment names stay on one line with ellipsis and their full name on hover;
171
+ a name matching the product label is omitted. Tabs scroll horizontally when
172
+ needed, moving to a second row on narrow screens.
146
173
 
147
174
  A List / Matrix toggle (`?view=matrix`) switches to a table of connectors by
148
175
  endpoint, `/mcp` first. A row header is the connector's monogram and name, plus
@@ -169,7 +196,7 @@ tabs:
169
196
  - **Connection.** An Authentication card (mode, OAuth client mechanism, who
170
197
  manages it, OAuth actions, and the credential card with masked last four,
171
198
  field states, and Replace, Test and Remove); a Diagnostics card of tiles
172
- (catalog age, last call, drift counts) with a fix prompt beside each
199
+ (catalog age and last call) with a fix prompt beside each
173
200
  problem; and a Configuration card. Its badges name the kind (Remote MCP,
174
201
  HTTP API or Custom), provider, auth scope, endpoint host and usage guide.
175
202
  The auth row names the mode and draws each auth fact as a mono badge
@@ -181,6 +208,13 @@ tabs:
181
208
  - **Activity.** The [Activity](#activity) page for that connector, without
182
209
  connector chips or monograms.
183
210
 
211
+ #### Read catalog changes
212
+
213
+ Catalog refresh activity reports added, removed, and changed tool counts within
214
+ its identity partition. The UI no longer compares tools with a release-reviewed
215
+ manifest or shows schema-pin coverage. Check live annotations and deployment
216
+ classification in the catalog when reviewing exposure.
217
+
184
218
  ### Settings
185
219
 
186
220
  The configuration snapshot as tiles, tagged "Defined in code", with no
@@ -213,9 +247,13 @@ editing controls. An empty section is not drawn.
213
247
 
214
248
  ### Tokens
215
249
 
216
- One row per agent declared in code, in `GET /ui/access-tokens` order: agent
217
- mark and name, pools as chips, a state pill (No token, Issued or Revoked), the
218
- issue or revoke date, and last seen ("never" when null). The heading note
250
+ One row per agent declared in code, including OIDC-only agents when the token
251
+ module is absent: agent mark and name, supported credentials (Agent token,
252
+ Vercel OIDC, or both), pools as chips, a token state pill (Not configured, No
253
+ token, Issued or Revoked), the issue or revoke date, and last seen ("never"
254
+ when unknown). Not configured means the managed token module is absent and
255
+ has no token controls; No token means that module has an unissued slot.
256
+ An OIDC binding works independently of the token's state. The heading note
219
257
  reads "Declared in code"; nothing creates or renames an agent. Narrow screens
220
258
  stack each row into a card.
221
259
 
@@ -264,13 +302,13 @@ red when the calls span more than a minute.
264
302
 
265
303
  The top bar is one row: the mark, branding and deployment name, the section
266
304
  links (Overview, Endpoints, Connectors, Activity, Tokens, Settings), then
267
- Search (the command palette, also ⌘K or Ctrl+K), Appearance, and Account
305
+ icon-only Search (the command palette, also ⌘K or Ctrl+K), Appearance, and Account
268
306
  (the signed-in account with Sign out or Change token). The mark is connecta's
269
307
  drawn "C" only when no product name, owner or favicon is configured; with
270
308
  `branding.favicon.svg` it is that SVG; otherwise there is none. The sign-in
271
309
  gate shows the same mark above "Sign in". Below 820px the section links move
272
310
  to a second row that scrolls sideways and keeps the current section in view,
273
- and Search shrinks to its icon. A member's top bar has only branding and
311
+ with Search remaining an icon. A member's top bar has only branding and
274
312
  Account. The command palette searches visible pages, connectors and tools,
275
313
  opening connector results on Tools.
276
314
 
@@ -365,18 +403,36 @@ The maintainer view carries:
365
403
  code or credential material.
366
404
  - `root`: plain `/mcp`, its `readOnly`, and its `maintainers`, people only.
367
405
  - `pools`: every declared pool with `humanPath` (`/mcp/<name>`), `agentPath`
368
- (`/agent/<name>`), `readOnly`, `owner` (the Workspace address its agents act
406
+ (`/agent/<name>`), `readOnly`, effective `surface` (`meta` or `native`),
407
+ `executeCode` (whether code is enabled), `owner` (the Workspace address its agents act
369
408
  as), its declared `tools` (never intersected; no `requireReadOnly` is ever
370
409
  true), and its `members`, agents as `{ kind: "agent", name }`. Every listed
371
410
  person carries a `label` from the same directory lookup activity actor
372
411
  labels use, on an interactive read only, and `null` without a directory
373
412
  (Cloudflare Access) or an entry. An open deployment's anonymous maintainer
374
413
  reads every `owner` as `null`.
375
- - `agents`: every agent declared in code, with its pools, its token slot
376
- (`state`, `issuedAt`, `revokedAt`, `revision`) exactly as
377
- `GET /ui/access-tokens` lists it, and `lastSeenAt`, the newest visible
378
- activity row recorded for that agent, or `null` when activity is off or
379
- none is visible. A slot read that fails answers 503 rather than drop agents.
414
+ - `agents`: every agent declared in code, in deployment order, with its pools
415
+ and `credentialTypes` (`access_token`, `vercel_oidc`, or both). These are
416
+ immutable deployment descriptions: the token kind requires the managed
417
+ access-token module, and OIDC requires that agent's own workload binding.
418
+ They grant nothing. `token` is `null` when the token module is absent;
419
+ otherwise its slot (`state`, `issuedAt`, `revokedAt`, `revision`) is exactly
420
+ what `GET /ui/access-tokens` lists, including an unissued `state: "none"`.
421
+ A failed or incomplete slot read answers 503 rather than drop agents.
422
+ `lastSeenAt` is the newest sampled successful agent-endpoint admission or
423
+ visible historical activity timestamp, or `null` when unknown or withheld.
424
+ Admission means credential verification and membership in that declared pool
425
+ succeeded; it does not promise a completed call. Invalid credentials,
426
+ refused/undeclared pools and human routes record nothing. The observation
427
+ stores only the declared name and timestamp, independently of activity.
428
+ Admission observations sample at most once per minute: a valid stored time
429
+ less than 60 seconds behind the candidate skips the write, and an older
430
+ candidate never moves the time backwards. This is minute-level admission
431
+ evidence, not an exact timestamp for every request. Each observation uses at
432
+ most two atomic storage attempts under the smaller of the configured probe
433
+ deadline and 500 ms, within the request lifetime. Failure, timeout or
434
+ contention can lose a sample; a later eligible admission can try again.
435
+ Observation never refuses admission or retries MCP or tool work.
380
436
  - `matrix`: a cell per connector for plain `/mcp` (`pool: null`) and for each
381
437
  pool that serves it, with that endpoint's tool names or `"all"` and
382
438
  `runsAs`. A Workspace connector with a subject mapping is
@@ -400,10 +456,12 @@ The maintainer view carries:
400
456
  mechanism when known. Static and unobserved catalogs have a null age;
401
457
  persisted catalogs retain their original fetch time.
402
458
  - `live.activity`: available, unconfigured, forbidden, or unavailable history.
403
- Last-call and last-seen lookups need the activity permission and read gate,
459
+ Historical last-call and last-seen lookups need the activity permission and read gate,
404
460
  scan up to 1,000 recent rows, filter connector/tool grants, restrict personal
405
461
  connectors to the caller's activity identity, and copy a validated timestamp
406
- and outcome only. A null means unknown or absent in that window.
462
+ and outcome only. Admission last-seen reads require a maintainer and honor
463
+ the configured activity read gate, including when history is unavailable;
464
+ they work with no activity module. A null means unknown or withheld.
407
465
  - `connectors: []`.
408
466
 
409
467
  The member view is exactly that member's projection: `config`,
@@ -497,7 +555,14 @@ duplicate summary, token, config, detail or body reads. The passive retry schedu
497
555
  stays bounded and does not reset its budget on a deadline. Retry remains available
498
556
  during recovery configuration loading and supersedes and aborts the old cycle;
499
557
  identity changes, navigation and connector-page unmount also cancel it. Navigation
500
- that cancels pending data schedules a bounded reread for the destination. Failed reads retry after
558
+ that cancels pending data schedules a bounded reread for the destination. A scoped OAuth poll publishes only its connector's detail and live row. It does
559
+ not supersede a pending full admission or catalog/auth cycle, release its
560
+ recovery guard, or clear its deadline. That full cycle still publishes other
561
+ connectors as they settle and decides recovery, retaining the newer polled row
562
+ even when its summary was pending or its deadline exposed Retry. Only a newer
563
+ full cycle, mutation, identity change, or sign-out fences older work. Owed
564
+ publication neither spends nor resets the failed-read retry budget and adds no
565
+ timer. Failed reads retry after
501
566
  2, 2, 4, and 8 seconds. Refusals preserve the throttle and retry budget. After
502
567
  those four automatic retries, a focus return can request one more read after
503
568
  the eight-second backoff, without replenishing the automatic budget. Retry
@@ -554,6 +619,11 @@ names, descriptions or schemas enter the event. Private catalog changes require
554
619
  a matching principal owner even when the connector uses shared auth. Empty credential declarations
555
620
  report `credential_required` before running a connector status or catalog probe.
556
621
 
622
+ Activity label resolvers receive an optional `AbortSignal`. Pass it to user-directory
623
+ fetches and stop work when it aborts: the reader has left or the label lookup
624
+ budget has expired. Clerk label lookups follow the same lifetime and discard
625
+ late answers after cancellation.
626
+
557
627
  ## Contributor reference
558
628
 
559
629
  ### Source and tests
@@ -1,6 +1,11 @@
1
1
  # Provider auth migration
2
2
 
3
- Use this upgrade guide when moving a Stripe, Notion, Vercel, or Cloudflare
3
+ Hosted selections described in this historical migration are now removed.
4
+ For Stripe, Vercel, Cloudflare, Notion, Mixpanel, and GitHub hosted connections,
5
+ use the [current hosted MCP migration guide](./hosted-mcp-migration.md).
6
+ The API migrations below remain applicable.
7
+
8
+ Use this upgrade guide when moving a Stripe, Vercel, or Cloudflare
4
9
  deployment from 0.30 to 0.31, where `auth` selects each provider's
5
10
  implementation.
6
11
  [Deployment upgrades](./deploying.md#upgrade-an-existing-deployment) cover other
@@ -13,6 +18,31 @@ uses one implementation: configure two ids for both.
13
18
 
14
19
  ## Stripe
15
20
 
21
+ For current API-key setup, use [Maintained provider setup](./providers.md#stripe).
22
+ For the 0.35 argument and paging changes, use [Stripe surface migration](./provider-migration-0.35.md#stripe).
23
+
24
+ ## Choose OAuth or an API key
25
+
26
+ Import `stripe` from `@zackbart/connecta/providers/stripe`. Choose one of two setup paths:
27
+
28
+ ```ts
29
+ // OAuth: Stripe's hosted MCP. Authorize the connection with Stripe.
30
+ stripe("billing", { purpose: "Payments", auth: { type: "oauth" } });
31
+ stripe("billing", { purpose: "Revenue reports", auth: { type: "oauth" }, readOnly: true });
32
+
33
+ // API key: Connecta's REST connector. Paste the key into this connection in the operator UI.
34
+ stripe("billing", { purpose: "Payments", auth: { type: "apiKey" }, mode: "production" });
35
+ stripe("billing", { purpose: "Revenue reports", auth: { type: "apiKey" }, mode: "production", readOnly: true });
36
+ ```
37
+
38
+ For an API key, set `mode` to `"production"` or `"sandbox"` to match the key.
39
+ Use a secret (`sk_`) or restricted (`rk_`) key. For read-only access, prefer a
40
+ restricted `rk_` key configured with only read permissions: Stripe enforces
41
+ those permissions too. Connecta's `readOnly: true` omits non-read tools and
42
+ refuses their calls on every endpoint. Omit it for the default writable connector;
43
+ endpoint restrictions still apply. OAuth needs no `mode` and can reach both live
44
+ and sandbox accounts through Stripe's account selectors.
45
+
16
46
  Stripe's hosted MCP server stops accepting secret keys and untagged
17
47
  restricted keys on 2026-10-31; Stripe still documents agent-tagged restricted
18
48
  keys for it. Connecta's hosted Stripe connection is OAuth only either way, and
@@ -62,7 +92,8 @@ or a generated one as `Idempotency-Key` and return it (DELETE sends none).
62
92
  Caller-supplied keys may contain up to 255 characters. An ambiguous POST write
63
93
  also returns the key in `uncertainCall.recovery.idempotencyKey`, including when
64
94
  the call deadline interrupts it. See [argument recovery](./meta-tools.md#argument-recovery)
65
- before retrying.
95
+ before retrying: a custom connector that wraps or composes Stripe calls gets
96
+ the key as a diagnostic only, never advice to reuse it.
66
97
  Every request, v1 and v2, sends `Stripe-Version: 2026-09-30.endive`, the
67
98
  version of the pinned index, whatever the account's default API version, so
68
99
  response shapes and accepted parameters follow that version. Check fields
@@ -78,56 +109,9 @@ connector need an OAuth connector beside it. Read the connector runtime guide wi
78
109
 
79
110
  ## Notion
80
111
 
81
- Every `notion()` call must now name `auth`. 0.30 defaulted to hosted MCP and
82
- selected the REST interface with `surface: "api"`; `surface` is gone:
83
-
84
- ```ts
85
- connectors: [
86
- notion("notion", { purpose: "Workspace content as the signed-in user", auth: { type: "oauth" } }),
87
- notion("notion_bot", { purpose: "Internal integration content", auth: { type: "token" } }),
88
- ]
89
- ```
90
-
91
- | 0.30 configuration | Now |
92
- | ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
93
- | No `surface`, or `surface: "mcp"` | `auth: { type: "oauth" }`. Same endpoint, reviewed catalog, grant, and optional `callAdmission`. |
94
- | `surface: "api"` | `auth: { type: "token" }`. The integration token stored for the same connector id carries over; run its Test action. |
95
- | `credentialLabel` or `defaultPageSize` | Token only, as before. Under OAuth they are refused by name at construction. |
96
- | `integration_search`, `_get_page`, `_get_page_content`, `_get_data_source_schema`, `_query_data_source`, `_create_page`, `_append_blocks` | Unchanged names and contracts. `integration_append_blocks` also takes `checklist`. |
97
- | `integration_get_database` | `notion_api_read` `GET /v1/databases/{database_id}`. |
98
- | `integration_get_page_property` | `notion_api_read` `GET /v1/pages/{page_id}/properties/{property_id}`; `truncated_properties` names it. |
99
- | `integration_list_users`, `integration_get_self` | `notion_api_read` `GET /v1/users` or `GET /v1/users/me`. |
100
- | `integration_list_comments`, `integration_add_comment` | `notion_api_read` `GET /v1/comments`; `notion_api_write` `POST /v1/comments`. |
101
- | `integration_update_page_properties`, `integration_trash_page` | `notion_api_write` `PATCH /v1/pages/{page_id}` with `properties`, or `in_trash` to trash or restore. |
102
-
103
- Both auth variants accept optional `callAdmission`. On a token connector it
104
- replaces the whole default policy of 180 calls per minute and 3 concurrent
105
- per runtime. Malformed policies throw at construction. Notion's
106
- [request limits](https://developers.notion.com/reference/request-limits) allow
107
- 600 requests per minute per connection on Business and Enterprise and 180 on
108
- other plans, with a separate workspace-wide limit shared by all connections.
109
- Account for other runtimes and tools that make multiple HTTP requests when
110
- choosing an override.
111
-
112
- The token connector gains Connecta's generic REST tools over Notion's pinned
113
- API index (`notion_api_search`, `notion_api_details`, `notion_api_read`,
114
- `notion_api_write`), so every public operation is reachable with the bot's
115
- token: views, page moves and Markdown, meeting notes, custom agents and
116
- sessions, file uploads by `external_url`, and data source changes. Every call
117
- is checked against the index before it is sent, and results arrive as
118
- `{ status, data, page? }`. The read-only POST queries (search, data source,
119
- meeting notes, agents, sessions, and session events) use `notion_api_read`;
120
- `page.in: "body"` says their cursor goes back in the body. Notion's OAuth token
121
- endpoints and multipart file sends are refused. The 0.29 reconciliation table
122
- and the `surface: "api"` complement rules no longer apply to Notion.
123
-
124
- Lost per mode. A token connector acts as the integration bot, never as a
125
- person, and has none of the hosted MCP's search across connected apps, page
126
- duplication, team and skill search, attachment downloads, or page-to-skill
127
- conversion. An OAuth connector acts as the user, and has none of the generic
128
- REST tools or the `integration_*` projections and authoring helpers. Configure
129
- both ids when a deployment needs both; a failed call is never retried on the
130
- other. Read the connector runtime guide with `connecta.skill("connector:<id>")` in `execute_code` for its usage conventions.
112
+ The maintained Notion API provider is removed in 0.35. See the
113
+ [provider removal migration](./provider-migration-0.35.md#remove-infisical-notion-and-mixpanel)
114
+ and use generic `remoteMcp()` for the hosted server.
131
115
 
132
116
  ## Vercel
133
117
 
@@ -292,16 +276,7 @@ one; read or rotate withheld secrets in the vendor's dashboard.
292
276
  Failures of credential-bearing operations keep Stripe's type, code, and
293
277
  param but not its message. Create client-side sessions and links from your
294
278
  own server code.
295
- - **Notion** REST results and error text withhold the whole query and
296
- fragment of canonical Notion file links, including links embedded in
297
- Markdown and async task results. External proxy URLs keep their bytes;
298
- AWS and Google signing-parameter values are withheld at any host. Writes
299
- carrying the plain or encoded `[redacted]` placeholder in a Notion file
300
- link's own query or fragment are refused before dispatch. See the
301
- connector runtime guide through `connecta.skill("connector:<id>")` in `execute_code` for recognized hosts and scanning limits. Credential-named fields,
302
- including database properties named like credentials, read as
303
- `"[redacted]"`. Failures of the OAuth, file upload, bot user, and agent
304
- operations keep Notion's code but not its message.
279
+
305
280
  - **Vercel** replaces environment values with `"[redacted]"` instead of
306
281
  dropping the field, and withholds Vercel's error text for every reviewed
307
282
  operation and every operation whose request takes a credential-named
@@ -319,4 +294,4 @@ one; read or rotate withheld secrets in the vendor's dashboard.
319
294
  [Decision 0005](https://github.com/zackbart/connecta/blob/main/decisions/0005-auth-selects-implementation.md)
320
295
  explains why auth selects the implementation. Maintained provider source
321
296
  skills and review tables live under `src/providers/` in the repository;
322
- `src/providers/vercel/value-safety.ts` owns Vercel's reviewed table.
297
+ `src/providers/vercel/safety.ts` owns Vercel's reviewed table.
@@ -1,12 +1,17 @@
1
1
  # Notion, Vercel and Cloudflare migration for 0.29
2
2
 
3
+ Hosted selections described in this historical migration are now removed.
4
+ For Stripe, Vercel, Cloudflare, Notion, Mixpanel, and GitHub hosted connections,
5
+ use the [current hosted MCP migration guide](./hosted-mcp-migration.md).
6
+ The API migrations below remain applicable.
7
+
3
8
  Use this upgrade guide for an existing deployment.
4
9
  [Deployment upgrades](./deploying.md#upgrade-an-existing-deployment) cover other
5
10
  version changes; [integrating services](./integrating.md) covers new connectors.
6
11
  [The agent index](./README.md) routes package maintenance separately.
7
12
 
8
- This is the Phase 1 item 5d migration input for [Phase 5 release #709](https://github.com/zackbart/connecta/issues/709).
9
- Deploy it with the consolidated 0.29 release, not while the rework is in progress.
13
+ This was the Phase 1 item 5d migration input for [Phase 5 release #709](https://github.com/zackbart/connecta/issues/709),
14
+ which shipped as 0.29.0.
10
15
  Deployments that use Notion or Cloudflare must check their actual grants and
11
16
  connector ids in deployment configuration before that release.
12
17
  The provider audit establishes available auth modes, not production OAuth grants.
@@ -14,7 +19,7 @@ The provider audit establishes available auth modes, not production OAuth grants
14
19
  Cloudflare's part of this guide is superseded: `cloudflare()` now selects its
15
20
  implementation by `auth` and its key connector is complete on its own. Follow
16
21
  the [provider auth migration](./provider-auth-migration.md#cloudflare) for
17
- Cloudflare; the Cloudflare lines below record the 0.29 transition only.
22
+ Cloudflare; the Cloudflare lines below record the transition shipped in 0.29.0 only.
18
23
 
19
24
  All three providers now default to hosted MCP. `surface: "api"` explicitly
20
25
  selects a REST complement and accepts only its API-specific options. The old
@@ -36,7 +41,7 @@ Notion has since moved to auth-selected implementations: `surface` is gone,
36
41
  and `auth: { type: "oauth" }` or `{ type: "token" }` selects hosted MCP or the
37
42
  REST connector. Upgrade with the
38
43
  [provider auth migration](./provider-auth-migration.md#notion); the rest of
39
- this paragraph records the 0.29 rules.
44
+ this paragraph records the rules shipped in 0.29.0.
40
45
  Notion preserves headless/internal-integration capabilities. Add explicit
41
46
  `surface: "api"` to retain that identity and migrate old REST names to
42
47
  `integration_*`, for example `search` to `integration_search`, `create_page`
@@ -62,7 +67,7 @@ Writable endpoints may run `execute`; `readOnly` endpoints refuse it.
62
67
 
63
68
  Vercel's `surface` and ownership rules were later replaced: `auth` now selects
64
69
  the implementation. See the [provider auth migration](./provider-auth-migration.md#vercel).
65
- The 0.29 Vercel guidance follows for history. For Vercel, authorize the owning teams in hosted OAuth, migrate discovery/logs,
70
+ The Vercel guidance shipped in 0.29.0 follows for history. For Vercel, authorize the owning teams in hosted OAuth, migrate discovery/logs,
66
71
  domain listing/adding, deployment cancellation and file uploads to live MCP
67
72
  schemas, and keep the independently authorized REST complement for value-safe
68
73
  project environment variables (including `upsert: false` create-only writes), domain verification/removal and deployment