@zackbart/connecta 0.34.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/CHANGELOG.md +393 -0
  2. package/README.md +62 -105
  3. package/SECURITY.md +3 -2
  4. package/bin/connecta.mjs +41 -16
  5. package/bin/version.mjs +1 -1
  6. package/dist/access-tokens.d.ts +2 -1
  7. package/dist/access-tokens.js +66 -30
  8. package/dist/activity.d.ts +1 -1
  9. package/dist/activity.js +2 -0
  10. package/dist/agent-config.d.ts +23 -0
  11. package/dist/agent-config.js +59 -0
  12. package/dist/agent-description.js +16 -0
  13. package/dist/agent-identity.js +4 -4
  14. package/dist/agent-observation.js +39 -0
  15. package/dist/auth/clerk-sdk/client.d.ts +2 -0
  16. package/dist/auth/clerk-sdk/generated.js +554 -563
  17. package/dist/auth/clerk-transport.js +70 -3
  18. package/dist/auth/clerk.d.ts +13 -0
  19. package/dist/auth/clerk.js +653 -246
  20. package/dist/auth/cloudflare-access.js +46 -42
  21. package/dist/auth/downstream-client-metadata.js +2 -2
  22. package/dist/auth/downstream-oauth.js +2051 -1160
  23. package/dist/auth/downstream-revocation.js +88 -88
  24. package/dist/auth/native-call.js +20 -0
  25. package/dist/auth/native.js +184 -0
  26. package/dist/auth/oauth-start-reset.js +11 -5
  27. package/dist/auth/oauth-token-response.js +121 -102
  28. package/dist/auth/oauth-v2-migration.js +97 -78
  29. package/dist/auth/renewable-grant.js +10 -0
  30. package/dist/auth/static-oauth.js +663 -271
  31. package/dist/auth/vercel-agent.js +266 -0
  32. package/dist/auth-admission.js +204 -0
  33. package/dist/auth-elicitation.js +350 -241
  34. package/dist/authorization-handoff.js +164 -90
  35. package/dist/call-admission-context.js +3 -10
  36. package/dist/call-admission.js +2 -0
  37. package/dist/call-classification.js +9 -0
  38. package/dist/call-recovery.js +32 -13
  39. package/dist/canonical-json.js +8 -0
  40. package/dist/catalog-cache.js +369 -213
  41. package/dist/catalog-service.js +659 -530
  42. package/dist/catalog.js +5 -1
  43. package/dist/concurrency.js +0 -25
  44. package/dist/config-defaults.d.ts +1 -0
  45. package/dist/config-defaults.js +1 -0
  46. package/dist/config-schema.d.ts +3 -1
  47. package/dist/config-schema.js +13 -3
  48. package/dist/config.d.ts +40 -6
  49. package/dist/config.js +40 -26
  50. package/dist/connector-caller.d.ts +4 -0
  51. package/dist/connector-caller.js +17 -4
  52. package/dist/connectors/api-connector.d.ts +15 -7
  53. package/dist/connectors/api-connector.js +147 -57
  54. package/dist/connectors/guarded-fetch.d.ts +51 -17
  55. package/dist/connectors/guarded-fetch.js +215 -121
  56. package/dist/connectors/negotiation-cache.js +20 -10
  57. package/dist/connectors/option-shapes.js +1 -1
  58. package/dist/connectors/remote-mcp.d.ts +12 -30
  59. package/dist/connectors/remote-mcp.js +960 -564
  60. package/dist/d1.js +10 -243
  61. package/dist/derived-context.js +5 -0
  62. package/dist/describe-config.d.ts +5 -1
  63. package/dist/describe-config.js +3 -0
  64. package/dist/downstream-input.js +347 -260
  65. package/dist/errors.d.ts +87 -6
  66. package/dist/errors.js +114 -4
  67. package/dist/execute.js +87 -50
  68. package/dist/executor-admission.js +3 -0
  69. package/dist/executors/quickjs.js +163 -112
  70. package/dist/guarded-transport.js +50 -0
  71. package/dist/guest-runtime.js +1 -1
  72. package/dist/http/client.js +439 -0
  73. package/dist/http/errors.js +558 -0
  74. package/dist/http/fields.js +49 -0
  75. package/dist/http/hatch-paging.js +318 -0
  76. package/dist/http/hatch.js +1279 -0
  77. package/dist/http/json-schema.js +267 -0
  78. package/dist/http/node-transport.js +241 -0
  79. package/dist/http/oauth.js +162 -0
  80. package/dist/http/paging.js +228 -0
  81. package/dist/http/provider.js +221 -0
  82. package/dist/http/safety.js +82 -0
  83. package/dist/http/services.js +79 -0
  84. package/dist/http/tools.js +383 -0
  85. package/dist/http/vendor-index.js +138 -0
  86. package/dist/http/vendor.js +448 -0
  87. package/dist/http/write-request.js +66 -0
  88. package/dist/http-policy.d.ts +11 -0
  89. package/dist/http-policy.js +45 -0
  90. package/dist/inbound-credential.js +1 -1
  91. package/dist/index.d.ts +2 -2
  92. package/dist/index.js +4 -0
  93. package/dist/invocation-auth.js +30 -19
  94. package/dist/invocation.js +221 -87
  95. package/dist/mcp-result.js +0 -4
  96. package/dist/membership.d.ts +4 -0
  97. package/dist/meta-output.js +1 -1
  98. package/dist/meta-tools.js +534 -408
  99. package/dist/native-recovery.js +52 -0
  100. package/dist/native-tools.js +382 -0
  101. package/dist/node.d.ts +4 -3
  102. package/dist/node.js +45 -8
  103. package/dist/oauth-handoff.js +177 -104
  104. package/dist/oauth-partition.js +6 -20
  105. package/dist/oauth-sealing.js +6 -7
  106. package/dist/operation-vocabulary.js +101 -0
  107. package/dist/operator-record.d.ts +2 -2
  108. package/dist/operator-record.js +17 -4
  109. package/dist/operator-ui/agents.d.ts +5 -4
  110. package/dist/operator-ui/agents.js +17 -7
  111. package/dist/operator-ui/config-summary.js +8 -4
  112. package/dist/operator-ui/connection-map.js +9 -6
  113. package/dist/operator-ui/contract.d.ts +7 -3
  114. package/dist/operator-ui/endpoints.js +5 -14
  115. package/dist/operator-ui/fix-prompts.d.ts +1 -1
  116. package/dist/operator-ui/fix-prompts.js +0 -8
  117. package/dist/operator-ui/generated.js +3 -3
  118. package/dist/operator-ui/health.js +52 -0
  119. package/dist/operator-ui/model.d.ts +2 -3
  120. package/dist/operator-ui/overview.js +11 -19
  121. package/dist/operator-ui/setup-commands.js +0 -4
  122. package/dist/operator-ui/view.d.ts +5 -29
  123. package/dist/operator-ui/view.js +3 -59
  124. package/dist/program-writes.js +47 -26
  125. package/dist/provider-call-facts.d.ts +115 -0
  126. package/dist/provider-call-facts.js +182 -0
  127. package/dist/provider-call.d.ts +112 -0
  128. package/dist/provider-call.js +271 -0
  129. package/dist/provider.d.ts +71 -32
  130. package/dist/provider.js +134 -40
  131. package/dist/providers/_shared/google/hatch.js +91 -0
  132. package/dist/providers/_shared/google/kit.js +537 -0
  133. package/dist/providers/_shared/google/result-size.js +15 -2
  134. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  135. package/dist/providers/_shared/google/service-account.js +8 -4
  136. package/dist/providers/_shared/google/workspace.d.ts +8 -209
  137. package/dist/providers/_shared/google/workspace.js +7 -426
  138. package/dist/providers/_shared/rest/compact-index.js +86 -0
  139. package/dist/providers/_shared/rest/dispatch.js +3 -23
  140. package/dist/providers/_shared/rest/kit.js +546 -0
  141. package/dist/providers/_shared/rest/operation-index.js +230 -14
  142. package/dist/providers/_shared/rest/response-media.js +11 -0
  143. package/dist/providers/_shared/rest/tools.js +101 -78
  144. package/dist/providers/_shared/rest/value-safety.js +353 -195
  145. package/dist/providers/_shared/sensitive-fields.js +27 -0
  146. package/dist/providers/breeze/api.js +584 -0
  147. package/dist/providers/breeze/index.d.ts +3 -3
  148. package/dist/providers/breeze/index.js +67 -1420
  149. package/dist/providers/breeze/openapi.generated.js +60 -0
  150. package/dist/providers/breeze/skill.generated.js +2 -6
  151. package/dist/providers/breeze/tools.js +696 -0
  152. package/dist/providers/ccb/api.js +496 -0
  153. package/dist/providers/ccb/index.d.ts +17 -37
  154. package/dist/providers/ccb/index.js +77 -1702
  155. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  156. package/dist/providers/ccb/lib/constants.js +74 -0
  157. package/dist/providers/ccb/lib/guide.js +9 -0
  158. package/dist/providers/ccb/lib/verdicts.js +387 -0
  159. package/dist/providers/ccb/openapi.generated.js +397 -0
  160. package/dist/providers/ccb/safety.js +295 -0
  161. package/dist/providers/ccb/skill.generated.js +2 -6
  162. package/dist/providers/ccb/tools.js +853 -0
  163. package/dist/providers/cloudflare/api.js +1066 -0
  164. package/dist/providers/cloudflare/index.d.ts +7 -22
  165. package/dist/providers/cloudflare/index.js +80 -194
  166. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  167. package/dist/providers/cloudflare/lib/config.js +2 -0
  168. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  169. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  170. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  171. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  172. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  173. package/dist/providers/cloudflare/openapi.generated.js +3299 -3208
  174. package/dist/providers/cloudflare/{value-safety.js → safety.js} +538 -18
  175. package/dist/providers/cloudflare/skill.generated.js +2 -10
  176. package/dist/providers/cloudflare/tools.js +360 -0
  177. package/dist/providers/docs/api.js +51 -0
  178. package/dist/providers/docs/index.d.ts +1 -12
  179. package/dist/providers/docs/index.js +53 -1165
  180. package/dist/providers/docs/lib/constants.d.ts +18 -0
  181. package/dist/providers/docs/lib/constants.js +18 -0
  182. package/dist/providers/docs/lib/discovery.js +26 -0
  183. package/dist/providers/docs/lib/requests.js +48 -0
  184. package/dist/providers/docs/lib/schemas.js +168 -0
  185. package/dist/providers/docs/openapi.generated.js +16 -0
  186. package/dist/providers/docs/safety.js +54 -0
  187. package/dist/providers/docs/skill.generated.js +2 -6
  188. package/dist/providers/docs/tools.js +802 -0
  189. package/dist/providers/drive/api.js +177 -0
  190. package/dist/providers/drive/index.d.ts +1 -12
  191. package/dist/providers/drive/index.js +38 -1448
  192. package/dist/providers/drive/lib/constants.d.ts +6 -0
  193. package/dist/providers/drive/lib/constants.js +6 -0
  194. package/dist/providers/drive/lib/contracts.js +532 -0
  195. package/dist/providers/drive/lib/hatch.js +197 -0
  196. package/dist/providers/drive/openapi.generated.js +77 -0
  197. package/dist/providers/drive/safety.js +90 -0
  198. package/dist/providers/drive/skill.generated.js +2 -6
  199. package/dist/providers/drive/tools.js +1290 -0
  200. package/dist/providers/forms/api.js +71 -0
  201. package/dist/providers/forms/index.d.ts +1 -12
  202. package/dist/providers/forms/index.js +49 -1145
  203. package/dist/providers/forms/lib/constants.d.ts +14 -0
  204. package/dist/providers/forms/lib/constants.js +19 -0
  205. package/dist/providers/forms/lib/hatch.js +72 -0
  206. package/dist/providers/forms/openapi.generated.js +23 -0
  207. package/dist/providers/forms/safety.js +34 -0
  208. package/dist/providers/forms/skill.generated.js +2 -8
  209. package/dist/providers/forms/tools.js +1024 -0
  210. package/dist/providers/github/api.js +150 -0
  211. package/dist/providers/github/index.d.ts +4 -5
  212. package/dist/providers/github/index.js +30 -87
  213. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  214. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  215. package/dist/providers/github/lib/discovery.js +132 -0
  216. package/dist/providers/github/lib/operations.js +58 -0
  217. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  218. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  219. package/dist/providers/github/openapi.generated.js +1216 -0
  220. package/dist/providers/github/safety.js +216 -0
  221. package/dist/providers/github/skill.generated.js +2 -5
  222. package/dist/providers/github/tools.js +506 -0
  223. package/dist/providers/gmail/api.js +114 -0
  224. package/dist/providers/gmail/index.d.ts +1 -12
  225. package/dist/providers/gmail/index.js +73 -1621
  226. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  227. package/dist/providers/gmail/lib/constants.js +16 -0
  228. package/dist/providers/gmail/lib/index.js +173 -0
  229. package/dist/providers/gmail/lib/schemas.js +176 -0
  230. package/dist/providers/gmail/lib/threading.js +120 -0
  231. package/dist/providers/gmail/openapi.generated.js +92 -0
  232. package/dist/providers/gmail/safety.js +21 -0
  233. package/dist/providers/gmail/skill.generated.js +2 -6
  234. package/dist/providers/gmail/tools.js +1435 -0
  235. package/dist/providers/overflow/api.js +1008 -0
  236. package/dist/providers/overflow/index.d.ts +3 -17
  237. package/dist/providers/overflow/index.js +60 -1488
  238. package/dist/providers/overflow/skill.generated.js +2 -5
  239. package/dist/providers/overflow/tools.js +873 -0
  240. package/dist/providers/planning-center/api.js +467 -0
  241. package/dist/providers/planning-center/index.d.ts +6 -35
  242. package/dist/providers/planning-center/index.js +69 -2445
  243. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  244. package/dist/providers/planning-center/lib/constants.js +83 -0
  245. package/dist/providers/planning-center/lib/discovery.js +40 -0
  246. package/dist/providers/planning-center/lib/guide.js +39 -0
  247. package/dist/providers/planning-center/lib/json-api.js +83 -0
  248. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  249. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  250. package/dist/providers/planning-center/safety.js +188 -0
  251. package/dist/providers/planning-center/skill.generated.js +2 -27
  252. package/dist/providers/planning-center/tools.js +1010 -0
  253. package/dist/providers/sheets/api.js +133 -0
  254. package/dist/providers/sheets/index.d.ts +4 -16
  255. package/dist/providers/sheets/index.js +61 -1172
  256. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  257. package/dist/providers/sheets/lib/constants.js +14 -0
  258. package/dist/providers/sheets/lib/hatch.js +163 -0
  259. package/dist/providers/sheets/lib/requests.js +105 -0
  260. package/dist/providers/sheets/lib/schemas.js +138 -0
  261. package/dist/providers/sheets/openapi.generated.js +30 -0
  262. package/dist/providers/sheets/safety.js +27 -0
  263. package/dist/providers/sheets/skill.generated.js +2 -7
  264. package/dist/providers/sheets/tools.js +734 -0
  265. package/dist/providers/slides/api.js +147 -0
  266. package/dist/providers/slides/index.d.ts +2 -10
  267. package/dist/providers/slides/index.js +48 -2555
  268. package/dist/providers/slides/lib/constants.d.ts +11 -0
  269. package/dist/providers/slides/lib/constants.js +11 -0
  270. package/dist/providers/slides/lib/requests.js +60 -0
  271. package/dist/providers/slides/lib/schemas.js +565 -0
  272. package/dist/providers/slides/openapi.generated.js +18 -0
  273. package/dist/providers/slides/skill.generated.js +2 -6
  274. package/dist/providers/slides/tools.js +1968 -0
  275. package/dist/providers/stripe/api.js +401 -0
  276. package/dist/providers/stripe/index.d.ts +7 -27
  277. package/dist/providers/stripe/index.js +75 -191
  278. package/dist/providers/stripe/lib/config.d.ts +4 -0
  279. package/dist/providers/stripe/lib/config.js +2 -0
  280. package/dist/providers/stripe/openapi.generated.js +4 -3
  281. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  282. package/dist/providers/stripe/skill.generated.js +2 -10
  283. package/dist/providers/stripe/tools.js +77 -0
  284. package/dist/providers/tithely/api.js +531 -0
  285. package/dist/providers/tithely/index.d.ts +19 -0
  286. package/dist/providers/tithely/index.js +86 -965
  287. package/dist/providers/tithely/skill.generated.js +2 -5
  288. package/dist/providers/tithely/tools.js +426 -0
  289. package/dist/providers/vercel/api.js +551 -0
  290. package/dist/providers/vercel/index.d.ts +11 -25
  291. package/dist/providers/vercel/index.js +67 -261
  292. package/dist/providers/vercel/lib/config.d.ts +2 -0
  293. package/dist/providers/vercel/lib/config.js +2 -0
  294. package/dist/providers/vercel/lib/index.js +117 -0
  295. package/dist/providers/vercel/lib/logs.js +100 -0
  296. package/dist/providers/vercel/lib/pin.js +270 -0
  297. package/dist/providers/vercel/openapi.generated.js +398 -376
  298. package/dist/providers/vercel/{value-safety.js → safety.js} +261 -42
  299. package/dist/providers/vercel/skill.generated.js +2 -7
  300. package/dist/providers/vercel/tools.js +642 -0
  301. package/dist/redaction-identity.js +47 -0
  302. package/dist/redaction-marker.js +125 -0
  303. package/dist/registry.d.ts +30 -28
  304. package/dist/registry.js +446 -413
  305. package/dist/routes/access-tokens.js +1 -1
  306. package/dist/routes/actor-labels.js +1 -1
  307. package/dist/routes/connect.js +1 -1
  308. package/dist/routes/dispatch.js +103 -0
  309. package/dist/routes/mcp.js +170 -79
  310. package/dist/routes/oauth.js +3 -1
  311. package/dist/routes/operator.js +2 -2
  312. package/dist/routes/shared.d.ts +5 -4
  313. package/dist/routes/shared.js +244 -177
  314. package/dist/routes/skills.js +10 -8
  315. package/dist/routes/ui-config.js +27 -3
  316. package/dist/routes/ui-data.js +29 -22
  317. package/dist/routes/ui.js +1 -1
  318. package/dist/runtime/call-admission.js +0 -26
  319. package/dist/runtime/call-entry.js +30 -0
  320. package/dist/runtime/call.js +556 -0
  321. package/dist/runtime/connector-scope.js +7 -0
  322. package/dist/runtime/credential-probe.js +34 -0
  323. package/dist/runtime/executor.js +40 -0
  324. package/dist/runtime/native-storage.js +63 -0
  325. package/dist/runtime/registry.js +27 -0
  326. package/dist/runtime/request-scope.js +72 -0
  327. package/dist/runtime/run.js +15 -7
  328. package/dist/runtime/shared-read.js +34 -5
  329. package/dist/runtime/storage.js +34 -21
  330. package/dist/sent-secrets.d.ts +194 -37
  331. package/dist/sent-secrets.js +1743 -340
  332. package/dist/server.js +5 -56
  333. package/dist/skills.js +330 -224
  334. package/dist/sqlite.js +15 -14
  335. package/dist/storage/d1-copy.js +255 -0
  336. package/dist/storage/d1-driver.js +15 -0
  337. package/dist/storage/keys.js +28 -0
  338. package/dist/storage/sql-driver.js +88 -0
  339. package/dist/storage/sql-native.js +544 -0
  340. package/dist/storage/sql-schema.d.ts +6 -0
  341. package/dist/storage/sql-schema.js +15 -0
  342. package/dist/storage/sql.d.ts +14 -20
  343. package/dist/storage/sql.js +29 -535
  344. package/dist/timeout.js +0 -26
  345. package/dist/tool-safety.js +20 -10
  346. package/dist/types.d.ts +11 -99
  347. package/dist/upward.js +3 -0
  348. package/dist/usage-guide.js +3 -1
  349. package/dist/validate.d.ts +4 -2
  350. package/dist/validate.js +86 -9
  351. package/dist/version.d.ts +1 -1
  352. package/dist/version.js +1 -1
  353. package/dist/worker.js +312 -292
  354. package/dist/workspace-subject.js +5 -1
  355. package/dist/write-outcome.js +454 -34
  356. package/documentation/README.md +27 -7
  357. package/documentation/architecture.md +2550 -186
  358. package/documentation/auth.md +821 -98
  359. package/documentation/code-mode.md +56 -21
  360. package/documentation/deploying.md +164 -20
  361. package/documentation/hosted-mcp-migration.md +460 -0
  362. package/documentation/integrating.md +144 -105
  363. package/documentation/meta-tools.md +411 -34
  364. package/documentation/operating.md +28 -4
  365. package/documentation/operator-tests.md +11 -2
  366. package/documentation/operator-ui.md +103 -33
  367. package/documentation/provider-auth-migration.md +38 -63
  368. package/documentation/provider-migration-0.29.md +10 -5
  369. package/documentation/provider-migration-0.35.md +975 -0
  370. package/documentation/providers.md +965 -0
  371. package/examples/worker/AGENTS.md +23 -9
  372. package/examples/worker/README.md +254 -135
  373. package/examples/worker/alchemy.run.ts +116 -0
  374. package/examples/worker/gitignore +10 -0
  375. package/examples/worker/src/connecta.config.ts +23 -21
  376. package/examples/worker/wrangler.jsonc +14 -5
  377. package/guides/connecting-agents.md +157 -0
  378. package/guides/how-it-works.md +156 -0
  379. package/guides/safety-and-trust.md +153 -0
  380. package/package.json +27 -42
  381. package/templates/node/.env.example +3 -0
  382. package/templates/node/README.md +22 -2
  383. package/templates/node/docker-compose.yml +1 -0
  384. package/templates/node/package.json +3 -2
  385. package/templates/node/src/connecta.config.ts +8 -0
  386. package/dist/catalog-drift.d.ts +0 -134
  387. package/dist/catalog-drift.js +0 -493
  388. package/dist/providers/_shared/request-token.js +0 -83
  389. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  390. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  391. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  392. package/dist/providers/basecamp/index.d.ts +0 -43
  393. package/dist/providers/basecamp/index.js +0 -997
  394. package/dist/providers/basecamp/skill.generated.js +0 -9
  395. package/dist/providers/cloudflare/rest.d.ts +0 -37
  396. package/dist/providers/cloudflare/rest.js +0 -1078
  397. package/dist/providers/github/hosted.js +0 -218
  398. package/dist/providers/github/rest.js +0 -321
  399. package/dist/providers/infisical/index.d.ts +0 -7
  400. package/dist/providers/infisical/index.js +0 -713
  401. package/dist/providers/infisical/skill.generated.js +0 -8
  402. package/dist/providers/linear/index.d.ts +0 -55
  403. package/dist/providers/linear/index.js +0 -352
  404. package/dist/providers/linear/skill.generated.js +0 -8
  405. package/dist/providers/mixpanel/index.d.ts +0 -57
  406. package/dist/providers/mixpanel/index.js +0 -468
  407. package/dist/providers/mixpanel/operations.js +0 -20
  408. package/dist/providers/mixpanel/rest.js +0 -603
  409. package/dist/providers/mixpanel/skill.generated.js +0 -10
  410. package/dist/providers/mixpanel/value-safety.js +0 -16
  411. package/dist/providers/notion/index.d.ts +0 -65
  412. package/dist/providers/notion/index.js +0 -368
  413. package/dist/providers/notion/openapi.generated.js +0 -75
  414. package/dist/providers/notion/rest.d.ts +0 -24
  415. package/dist/providers/notion/rest.js +0 -1226
  416. package/dist/providers/notion/skill.generated.js +0 -11
  417. package/dist/providers/notion/value-safety.js +0 -56
  418. package/dist/providers/revenuecat/index.d.ts +0 -49
  419. package/dist/providers/revenuecat/index.js +0 -557
  420. package/dist/providers/revenuecat/skill.generated.js +0 -11
  421. package/dist/providers/stripe/rest.d.ts +0 -14
  422. package/dist/providers/stripe/rest.js +0 -402
  423. package/dist/providers/vercel/rest.d.ts +0 -20
  424. package/dist/providers/vercel/rest.js +0 -1020
  425. package/dist/providers/wispr-flow/index.d.ts +0 -14
  426. package/dist/providers/wispr-flow/index.js +0 -117
  427. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  428. /package/dist/providers/github/{key.js → lib/key.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,399 @@
2
2
 
3
3
  All notable changes to this package are documented here.
4
4
 
5
+ ## 0.35.0 — 2026-10-26
6
+
7
+ Connecta 0.35.0 brings the provider kit and standard agent surfaces to all 15 maintained providers. Operation search and details expose reviewed API contracts without reading account data; indexed read and write tools complement the retained named tools. Gmail keeps its reviewed exception: draft writes use named tools and sending remains unavailable. Results use consistent list envelopes, narrowing `fields`, signed continuations and truncation paths. The [provider migration guide](https://github.com/zackbart/connecta/blob/v0.35.0/documentation/provider-migration-0.35.md) maps every renamed or removed tool and argument, including retired `raw`/`select` arguments, list keys, paging inputs and wrappers replaced by indexed operations. Update saved programs, pool grants, classification entries and deployment instructions before upgrading, and restart old continuations where the guide requires it.
8
+
9
+ Pools can opt into a native tool surface for clients with their own tool search, retaining the same classification, scope and invocation enforcement. Native pools include `execute_code` by default; code-off pools provide `read_result` for bounded result paging. The separate `@zackbart/connecta-eve` helper supplies an Eve connection, endpoint instructions and an optional host write gate. Explicit Vercel workload bindings can admit declared agents without separately provisioned Connecta tokens. Existing agent tokens remain supported. See [native tools and Eve agents](https://github.com/zackbart/connecta/blob/v0.35.0/documentation/meta-tools.md#native-tool-surface) and [Vercel workload credentials](https://github.com/zackbart/connecta/blob/v0.35.0/documentation/auth.md#vercel-workload-credentials). The helper requires Node 24 and Eve 0.83.x. Eve 0.83.0 apps need their own undici 8.12.3 override; the repository's development override does not ship with the helper. Its [package guide](https://github.com/zackbart/connecta/blob/v0.35.0/packages/connecta-eve/README.md#eve-0830-dependency-override) gives the operator steps.
10
+
11
+ Write outcomes now follow the whole logical call's dispatch evidence (H1). A dispatched write with an uncertain result is non-retryable and requires reading the target before another write; a later refusal or caught program error cannot erase earlier uncertainty. Source or effective write classification prevents automatic replay. Signed continuations also bind the admitted caller and pool owner when downstream identity varies by caller, refusing cross-caller continuation before dispatch. Security fixes strengthen credential withholding, response safety, authentication bounds, OAuth state and cancellation while keeping activity records free of request and response payloads.
12
+
13
+ The core now composes storage, registry and calls, authentication, executors, remote MCP and upward MCP orchestration through native Effect programs. HTTP routes use cached public Effect HttpRouters, and SQLite/D1 execution uses public Effect SQL services. The published API still returns Promises and retains existing database formats. The pinned modern and legacy MCP SDK adapters remain the protocol implementations; this release does not adopt Effect McpServer or add MCP Apps, Tasks, prompts or subscriptions.
14
+
15
+ On Node, `listen()` from `@zackbart/connecta/node` installs the owned sender for every maintained-provider request, reads included, remote MCP writes, and downstream OAuth token, registration and revocation POSTs. Install the template's exact optional peer, `undici@6.29.1`. A Node host serving `connecta.fetch` without `listen()` refuses maintained-provider writes, reviewed POST reads, remote MCP writes and those credential POSTs before sending; these paths worked in 0.34.1. The sender connects directly by default or through an explicit HTTP(S) CONNECT `proxy` option on `listen()`. It ignores ambient proxy variables and host dispatchers. Remote MCP reads and OAuth discovery GETs retain native fetch and need their own host proxy policy. An uncertain OAuth refresh requires fresh authorization rather than replaying the spent token. Shutdown closes unused connections and active connections as their responses finish, including SSE. See [Node deployment requirements](https://github.com/zackbart/connecta/blob/v0.35.0/documentation/deploying.md#start-on-node).
16
+
17
+ Authenticated MCP request bodies now default to a 4 MiB limit on every endpoint. Node's separate pre-auth buffer drops from 10 MiB to 4 MiB; deployments accepting larger bodies must configure both limits. Discovery can find API-only capabilities through bounded operation vocabulary, ranks exact resources across versioned namespaces, and preserves vendor summaries beside a separate reviewed `refusal` field. Planning Center exposes reliable page totals and respects excluded applications in discovery. Vercel connections can opt into a deployment-owned team pin. The operator UI lists OIDC-only agents and bounded last-seen observations. These additions retain existing classification, caller scope and one-attempt write rules.
18
+
19
+ The maintained Infisical, Notion and Mixpanel API providers and their package subpaths are removed. Replace Notion and Mixpanel with generic `remoteMcp()` connections to their hosted servers, then rediscover live tool names, schemas and permissions. Infisical has no packaged replacement; remove it or supply a deployment-owned connector. Hosted connections do not inherit removed providers' API coverage or value-safety projections. Vercel environment-variable `value` arguments are now `writeOnly`; hosts must treat them as private write inputs, and reads and write replies withhold their values. The [migration guide](https://github.com/zackbart/connecta/blob/v0.35.0/documentation/provider-migration-0.35.md) also covers response-media and numeric-path validation, changed error meanings and each provider's exact upgrade actions.
20
+
21
+ Deployments using unchanged tools can ignore unrelated provider mappings; deployments without the removed providers need no replacement connections. Existing pools keep the meta-tool surface unless configured otherwise, and deployments without Eve or Vercel-hosted agents need neither new integration. No database conversion or agent-token rotation is required solely for 0.35.0. Workers deployments do not need Node's transport peer or startup changes. Follow [Upgrade an existing deployment](https://github.com/zackbart/connecta/blob/v0.35.0/documentation/deploying.md#upgrade-an-existing-deployment) for the installed-package handoff.
22
+
23
+ ### Added
24
+
25
+ - Find API-only capabilities through bounded operation vocabulary in catalog search, with owning API-search tools and existing visibility and safety filters (#997).
26
+ - Pin activity insert and retention rollback, schema initialization rollback, and retry recovery with execution-time failure tests on SQLite, proxied D1, and native Workers D1.
27
+ - Add the internal HTTP provider kit with declared vendor operations, typed tool builders, paging, reviewed operation hatches and validated provider construction. All 15 maintained providers use this kit in 0.35.0; their standard agent-surface changes are listed in the provider migration guide.
28
+ - Add characterization goldens for every maintained `api()` provider: catalog, fixture-call requests (exact JSON body bytes included) grouped into causal steps with delivered-answer frontiers under a virtual clock installed before provider imports, with compact prefix frontiers and independently captured canonical/reverse answer orders, and results, failure mapping (including transport timeouts and a vendor error that echoes credentials), token-exchange and consent requests with decoded JWT claims, and sent-secret echo redaction across raw, percent, base64, base64url, `\u`-escaped and HTTP Basic encodings, compared byte for byte on Node and Workers independent of request scheduling, with explicit rejection of unsupported asynchronous sources and ambiguous concurrent reply fixtures, with `pnpm run goldens:update` to regenerate them.
29
+ - `clerkAuth({ organizationId })` lets one Clerk instance serve many deployments, one Organization each. Only that Organization's members are admitted, on MCP OAuth tokens (JWT and opaque) and operator sessions. Membership confirmed with Clerk's Backend API is the only organization rule: organization claims in tokens and sessions are never read. Each answer is cached per Organization and user for 60 seconds from the start of its lookup (30 for a non-member). An answer is cached only if no lookup that started later has already cached one, so an older answer never replaces a newer one, and, assuming no unseen clock rollback within the TTL window, a removed member is refused from 60 seconds after removal even while their access token is still valid. An unseen rollback within that window can extend admission beyond 60 seconds of elapsed time. The cache trusts an answer only while the clock reads between its lookup's start and the end of its TTL, so a step forward ends it early, a step back before the start ends it, and an answer found expired is never revived. Each request runs and owns its own lookup, as Workers require, and a caller that leaves cancels only that lookup. A failed, redirected, oversized, or timed-out lookup refuses admission and is not cached, and every lookup ends its Backend API request and body on every outcome. In organization mode a JWT's issuer and subject, and a session's, must be this instance's and match the looked-up user. Organization roles grant nothing; maintainers and pool members stay in code. Organization mode requires resource-bound tokens, so a nonempty `allowedOAuthClientIds` throws at construction, as does a malformed `organizationId`. The Node template reads `CLERK_ORGANIZATION_ID`.
30
+
31
+ Organization-mode Backend API reads (membership and extra opaque verification) are capped at 16 concurrent calls per isolate and two per identity, without sharing request-owned I/O or queuing. Excess calls and Clerk 429 backoff return retryable `503 organization_lookup_busy` with `Retry-After` and are never cached; valid membership cache hits still work. Backoff honors a bounded Retry-After (1–60 seconds, default ten). Operators must rate limit ingress against Clerk's shared per-instance quota. When the eviction floor suppresses a newer answer, it invalidates any older cached answer for that identity.
32
+ - Add `@zackbart/connecta-eve`, a separate Node 24 package for Eve 0.83 agents, with app-owned connections, rotating token sources, optional write approvals and cached endpoint instructions. Validate and release it alongside Connecta without adding Eve to core installs.
33
+ - Add shared Google Discovery compilation, verified source conversions, complete request-schema details, hatch binding, page-token handling and standard errors used by all six Google Workspace providers. The `allSuccessResponses` generator option collects response fields from every JSON 2xx contract when a provider opts in.
34
+ - Add a native tool surface for clients with their own tool search: a pool with `surface: "native"` lists each downstream tool as `<connector>__<tool>`, annotated read or write from its classification, beside `skills` and `execute_code` (or `read_result` with `executeCode: false`), and runs every call through the existing `call_tool` or `call_destructive_tool` path.
35
+ - Provider tooling now implements decision 0011's S.1. `providers:generate` writes `drift.json` version 2's `generated` block (operations, hosted names, evidence digests) and a guide's generated `## Conventions`, and refuses a provider past step 1 that breaks the `drift.json` rules or one past step 2 that breaks the guide rules. `defineProvider` accepts `blocks: { keys, select }` for a guide's `<!-- when: <key> -->` sections, which `ProviderContext.usageGuide` selects per connection, and `kit` facts for the provider kit to fill; `ProviderGuideBlocks` and `ProviderKitFacts` are exported types. `providers:check` reads version 1 and 2 records, reports a manifest operation no endpoint row records whether or not an endpoint check exists, and reports manual checks last verified more than 180 days ago; `providers:generate` and the standard suite refuse a version 2 record `providers:check` could not read, through the same validator. `providers:spec` reads `evidence/openapi.json` (and vendored `evidence/openapi.document.json`, whose digest the generated index records so `check:providers-generated` catches a changed conversion), writes `evidence/value-safety.json`, and reads value-safety absences from the table's `absent` field in `safety.ts`. Existing providers keep their current files until their step 1; no agent-facing output changes.
36
+ - Add Vercel OIDC workload credentials for declared agents. Bind an immutable team ID,
37
+ project and allowed environments in deployment code; agent endpoints accept
38
+ the verified workload identity alongside existing Connecta agent tokens.
39
+ - Record the Effect 4.0.5 HTTP router and MCP compatibility decision. Production
40
+ HTTP routing uses public Effect HttpRouters; upward MCP retains the pinned
41
+ modern and legacy SDK protocol adapters. Historical comparison fixtures were
42
+ retired after the completed migration; focused production regressions remain.
43
+ - Add a reproducible real-Eve catalog contract probe through the 1,000-tool native cap, using the installed helper and a deterministic local model transport without paid calls.
44
+ - Support an explicit HTTP(S) CONNECT proxy in Node `listen` options, with confined proxy credentials and one physical attempt per owned send. Distinguish tunnel failure before destination dispatch from uncertain writes.
45
+ - Add an optional deployment-owned Vercel team pin across named tools, logs,
46
+ uploads and hatch calls, with charged ownership checks and policy-bound cursors.
47
+ Connections without a pin retain their teamId, slug and personal-scope routing.
48
+ Pinned hatch discovery and the guide's refusal count reflect the team boundary
49
+ without changing dispatch policy.
50
+
51
+ ### Changed
52
+
53
+ - Consolidate redundant provider and harness test matrices and replace historical Effect migration scaffolding with focused production routing regressions, preserving provider goldens and unconditional invariant/spec enforcement.
54
+ - The Worker example now deploys with Alchemy. `examples/worker/alchemy.run.ts` declares the Worker, its vars and in-stack secrets, the D1 database (retained on `alchemy destroy`), the Worker Loader, the Worker-level Cloudflare Access application with Managed OAuth, and the `/agent/*` bypass application; deploy with `npx alchemy deploy --stage production`. `wrangler.jsonc` remains for `wrangler dev` only. Install `alchemy@2.0.0-beta.83`, `effect@4.0.5`, and `@effect/platform-node@4.0.5` exactly; the Alchemy CLI needs Node 24.11.1 or later. Never commit `.alchemy/` or `.env`: local state records secret values in plaintext. The example ships its ignore rules as `examples/worker/gitignore`, because npm strips `.gitignore` from packages; a copied deployment renames it to `.gitignore` before the first `git add`, which keeps `.alchemy/`, `.env*`, `.dev.vars*`, `.wrangler/`, and `node_modules/` out of git. Custom domains are not yet verified with Alchemy; verify a custom hostname before agents use it. A Worker already deployed with Wrangler moves once by adopting its resources, as the example README describes.
55
+ - Move operation and call state into internal Effect services, with Promise context views and explicit call and request teardown. Revoke nested calls when their parent ends so paused authentication cannot send after the outer call finishes.
56
+
57
+ Refuse copied contexts that lack authority within an admitted request scope and auxiliary requests after request closure. Finish every revocation and cleanup step even when a signal facade throws, and detach child listeners on parent closure. Cancel closed calls' use of OAuth renewal while preserving coordinator completion once a refresh claim is submitted.
58
+
59
+ Bind shared remote MCP renewal preparation to its initiating call until claim submission. Abort pending operation authentication, fetches and authorization-code exchange when their request scope is explicitly revoked, including operations without an external signal; refuse token writes from a late code response.
60
+
61
+ Interrupt pending OAuth grant and catalog-epoch preparation when its owning call or request closes, including legacy migration, cleanup and vault reads. Preserve coordinator completion after refresh claim submission.
62
+
63
+ Settle complete Promise views and connector operations at their call or request boundary, including paused credential resolution, cryptography and response cleanup. Keep auxiliary work request-owned and preserve write settlement and submitted renewal ownership.
64
+
65
+ Keep concurrent operator probes in separate scopes so a failed row cannot revoke live siblings.
66
+ - Guard the internal Effect HTTP client with an owned Node dispatcher and share bounded transport policy and refresh-once OAuth grant use across both transports. The Node template installs the optional undici peer. Request headers consistently override constant headers regardless of their field-name casing. Write reservations and OAuth replay use the core's positive-read rule: only positively classified GET/HEAD requests without method-override headers can replay; reviewed POST reads and auxiliary labels do not bypass the write guard.
67
+ - Establish the internal HTTP kit's tagged failure mapping, bounded vendor facts and served-answer provenance. Blocked resends preserve the original attempt's verdict; write outcomes remain decided by the core. Maintained providers retain their existing wire behavior.
68
+ - Run the Tithe.ly provider on the internal HTTP provider kit, with its tools, credential probe, failures and hatches unchanged for agents. On Node, its writes now need the owned transport that `listen` from `@zackbart/connecta/node` installs, as every kit write does; a blank `title` is refused at construction like every other provider's.
69
+ - **Breaking:** Standardize Breeze's agent surface for 0.35.0. `breeze_api_get` becomes `breeze_api_read`; `breeze_api_mutate` becomes `breeze_api_write` with `method: "GET"`. Query name/value arrays become objects, `*_json` values must be JSON strings, and `{ result }` becomes `{ status, data, page? }`. Indexed search/details are added; unindexed paths, unreviewed parameters, reads through the write hatch and non-JSON successful hatch replies retire. Remove `raw` and use `fields` or the read hatch. Person-write profile `fields` becomes `values`. `list_calendars`, `list_forms`, `list_form_fields`, `list_form_entries`, `list_volunteers`, `list_volunteer_roles`, and `list_account_log` move to their indexed read operations; `assign_tag`, `unassign_tag`, and `record_check_in` move to their indexed GET write operations. Removed form `archived` becomes query `is_archived`; log `userId`/`includeDetails` become `user_id`/`details` (`limit` stays `limit`). Tag assignment and check-in now require write approval on every hatch call. Trailing-slash paths are refused. People hatch limits must be whole decimal counts from 0 to 1,000 before dispatch. Named list keys (`people`, `fields`, `tags`, `events`, `attendance`, `contributions`, `funds`) become `items` with `page`; contribution `count`/`totalAmount` retire in favor of client reductions. Local list windows gain `limit`/`cursor`; people cursors become opaque and final pages omit `nextCursor`. Event `truncated: true` becomes `truncated: ["items[]"]`. Named person writes return `{ ok: true }` when the vendor acknowledges without a record. Calendar secrets remain removed. See the Breeze section of the 0.35 provider migration for exact replacement paths and arguments.
70
+ - Support non-secret resource headers on generic remote MCP connections and deployment classification overrides of read, write, or hidden. Missing runtime tools leave overrides dormant with one operator warning per catalog change; static typos still fail construction. Preserve source classification from verified provider reviews or server annotations so a write-to-read override cannot permit automatic replay after OAuth renewal, transport or authorization recovery, or program re-runs. Ambiguous dispatched failures remain non-retryable with unknown outcomes, including timeouts and cancellation.
71
+ - Move Breeze onto the provider kit while preserving its characterized tools, guide, requests, and responses. Add reviewed, bounded text-body contracts for vendors that return text.
72
+ - Move Overflow onto the shared HTTP provider kit while preserving its existing tool and guide contracts.
73
+ - Migrate Planning Center onto the provider kit while preserving its tools, requests, results, and usage guide.
74
+ - Move Cloudflare's API-token and Global API Key connectors onto the provider kit while preserving their tool catalog, guide, requests, results, pin confinement and characterization goldens. Record REST and GraphQL envelope contracts in the provider evidence.
75
+ - Move Stripe API calls onto the provider kit while preserving its tools, guide, pinned operation index and reviewed value safety.
76
+ - Move Vercel onto the provider kit while retaining its tools, guide, request bytes and value-safety review. Bounded success reads cancel unread streams and retain the shared redaction and failure boundaries.
77
+ - Move Google Docs onto the provider kit through the shared Google Workspace layer, keeping its tools, schemas, guide, document rendering, requests, revision guards, and create-recovery advice. Each create and optional initial-text write has its own fixed, single-send step. Reviewed public JSON field names remain available to the renderer while private values are redacted before text normalization.
78
+ - Google Drive runs on the shared Google provider kit, preserving its tool catalog, guide, request framing, and bounded content results.
79
+ - Move Gmail onto the shared Google provider kit while retaining its draft-only tools, catalogs, MIME requests, projections, guides and bound cursors. Track auxiliary lookups separately from draft writes when reporting whether a draft write was dispatched. Sanitize decoded Gmail bodies and attachments before truncation while retaining their original byte-size checks.
80
+
81
+ Keep multi-request Gmail reads working when served as writes, validate large encoded bodies without overflowing the regex stack, and refuse draft replacement when redaction hides an attachment's disposition or a header name.
82
+ - Move Google Forms onto the provider kit through a shared Google Workspace layer: the delegated service-account token is a machine grant, Google's failures map through one vendor table, and Forms keeps its tools, guide, requests, cursors, results and characterization goldens. A read refused with HTTP 401 is still replayed once with a fresh token, and a write is still never resent.
83
+ - Move Google Sheets onto the provider kit through the shared Google Workspace layer, preserving its tools, guide, A1 requests, paging, results, and write recovery advice.
84
+ - Move Google Slides onto the shared Google Workspace provider kit, preserving its tool catalog, revision-checked edits, digest-bound paging, and create recovery advice.
85
+ - Move GitHub's six REST tools onto the provider kit while preserving GitHub App scopes, lazy installation-token renewal, tool annotations and result envelopes.
86
+ - **Breaking:** Standardize Church Community Builder's v2 JSON/OAuth tools. Rename `ccb_api_get`
87
+ to `ccb_api_read`, `ccb_api_mutate` to `ccb_api_write`, and the old data-search
88
+ `ccb_api_search` to `search_records`; `ccb_api_search` now searches an offline
89
+ operation index and `ccb_api_details` exposes its contracts. Replace named-list
90
+ `page`/`perPage` with enum `limit` (25/50/75/100, default 25) and signed `cursor`,
91
+ return `items` and standard page metadata with optional exact vendor `total`, remove `raw`, add validated `fields`
92
+ and standard `truncated` envelopes. Remove `list_forms`, `list_form_responses`,
93
+ `list_processes`, `list_queues`, `list_queue_individuals`,
94
+ `list_scheduling_categories`, `list_schedules`, `list_individual_assignments` and
95
+ `list_individual_pledges`; their indexed replacements and every filter/path
96
+ change are listed in the [0.35 migration guide](../documentation/provider-migration-0.35.md#church-community-builder).
97
+ Preserve write approval and read-only scope boundaries. Require canonical API
98
+ paths and documented JSON bodies, withhold private file/payment/calendar
99
+ links and OAuth credentials permanently, and classify unproven HTTP 409 meanings
100
+ as `connector_call_failed`. Legacy v1 XML remains outside the provider.
101
+ - Run browser and dependency-audit jobs for relevant pull requests and every main/nightly run. Visual comparisons do not retry; failed attempts upload the Playwright report with diffs and traces. Weekly provider drift scans remain advisory and separate changed contracts from standing manual reviews.
102
+ - Select conditional browser, audit and Eve jobs with one inline changed-files step; missing or invalid selection outputs fail the required check gate.
103
+ - **Breaking:** Standardize Cloudflare's nine existing tools. Rename hatch `select` to `fields`;
104
+ hatch reads/writes/uploads retain the safe vendor envelope (`data.id` →
105
+ `data.result.id`, arrays under `data.result`; select `result.id`/`result[].id`).
106
+ `cloudflare_api_upload` data likewise becomes the envelope: `data.id` → `data.result.id`.
107
+ Named reads keep projected shapes and gain `fields`; account/zone lists replace
108
+ `perPage`/`page` with `limit`/opaque `cursor`, and `accounts`/`zones` with `items`.
109
+ Replace hatch `page.next` and raw continuation values with signed
110
+ `page.nextCursor` at `page.param`/`page.in` where the pin establishes an
111
+ unambiguous adapter; other envelopes retain their vendor query protocol. Operation search defaults to six hits
112
+ and caps at eight, with bounded search/details continuation. Numeric paging
113
+ constraints fail before I/O; HTTP 409 becomes generic `connector_call_failed`.
114
+ No tool names or approval classifications change. Pins, configured path defaults,
115
+ R2 headers, uploads, text/NDJSON framing and in-band refusal semantics remain.
116
+ - Record decision 0012: hosted MCP servers are generic `remoteMcp()` configuration, discovered at runtime and classified from their annotations, with no vendored MCP providers, catalogs, classification maps, hosted drift or per-tool guides. Amend decision 0011 to govern only vendored APIs, and add C.0a–C.0d to decision 0009's Phase C. Nothing a deployment or agent sees changes yet.
117
+ - Record decision 0014: standardize vendored API step-2 tool shapes on an indexed coverage hatch, evidence-backed curated tools and optional generated per-operation catalogs, with discovery budgets.
118
+ - Pin `effect` to exactly 4.0.5 (from `^4.0.0`). A deployment that also depends on Effect, such as an Alchemy resource stack, must pin the same 4.0.5 to resolve one copy. Bundle caps stay on the deployed shapes; per-provider entries are now reported against their baseline instead of capped, because every deployment already pays for the Effect core through the root. `ProviderDefinition`'s `bundle.maxGzip` stays accepted but deprecated and ignored.
119
+ - Record the Effect-native rewrite and Clerk organization mode as decision 0009.
120
+ - Record decision 0010's provider kit design and implement request-ledger integration, fixed write capacity, atomic step/item reservation and call-owned cancellation. Every maintained provider now uses the kit; writes preserve the core's whole-call outcome and structured recovery rules.
121
+ - Preserve recorded HTTP status in operator failure records for bare write-401 fallbacks, Google writes with unknown outcomes, and oversized responses. Agent error codes, messages, retryability, and write outcomes stay unchanged.
122
+ - **Breaking:** Standardize GitHub's agent surface for 0.35: add `github_api_search`,
123
+ `github_api_details`, `github_api_read` and destructive `github_api_write`
124
+ over an immutable operation pin with a reviewed repository-read and release-write
125
+ allowlist. Replace `create_release` with POST `/repos/{owner}/{repo}/releases`,
126
+ `update_release` with PATCH `/repos/{owner}/{repo}/releases/{release_id}`, and
127
+ `delete_release` with DELETE on that release path through `github_api_write`.
128
+ Move repository and release identifiers into the path and write values into body.
129
+ Release creation now uses the destructive hatch; the host may request confirmation.
130
+
131
+ Keep `list_scopes`, `search_scoped` and guarded `merge_pull_request`. Replace
132
+ named `page`/`pages` with signed `cursor`, `per_page` with `limit`, and legacy
133
+ scope/repository/partition results with `{items,page}`; search rows carry
134
+ `scope`, `repository` and `item`. Search visits one partition page per call,
135
+ retains `incomplete_results`, and omits inexact aggregate totals. The default
136
+ scope-list size changes from 100 to 30; both named lists cap limit at 100.
137
+ Named continuations bind the original effective limit. Omission uses 30 and is
138
+ accepted for a cursor issued with limit 30; mismatches name the expected limit.
139
+
140
+ Add `fields` to named reads and both call hatches; hatch continuation uses a
141
+ separate signed cursor. Release hatch replies use `{status,data}`, including
142
+ `data:null` on an empty delete. Reject noncanonical target/file paths before
143
+ credentials. Preserve permanent secret withholding and refuse raw search/merge,
144
+ secret/admin, archive/log downloads and raw diff media routes. Inline UTF-8 file
145
+ content and patches are redacted before 32,768-character cuts reported through
146
+ `truncated`. A failed auxiliary merge lookup claims no unknown write outcome;
147
+ `merged:false` is an in-band failure. Kit fallback errors classify 400/422 as
148
+ invalid arguments, retain documented rate-limit facts, and distinguish failed
149
+ body reads from malformed JSON. See the GitHub migration section for exact paths,
150
+ field selections, paging and authentication setup.
151
+
152
+ Support canonical nested contents paths and the repository root listing. Encode
153
+ branch-name slashes as `%2F` in commit and compare paths; unmatched raw-slash
154
+ refs include this repair hint. Refuse owner-prefixed object refs and
155
+ cross-repository comparisons before authentication. PR-list head filters require
156
+ `login:branch`; bare branches are refused because GitHub silently ignores them. Withhold
157
+ configured App private keys when echoed in repository data.
158
+ - Run provider characterization goldens in forward/reverse order on Node and canonical order on workerd. Normal runs capture once; nightly Node checks add identical repeats, jitter seeds and the full source-probe matrix. Reuse fixed public RSA fixture keys without caching evaluated module graphs or changing golden bytes.
159
+ - **Breaking:** Standardize Google Docs with four indexed `docs_api_*` hatches over all three pinned API methods, retaining all six named tools. Additive create, append and insert retain their explicit `destructiveHint:false` annotation and remain writes. Hatch batch writes require a revision, 1–100 requests and exactly one supported GA kind each; preview comment and suggestion kinds remain refused. Generic create sets only a title; the named create retains separate create/initial-text steps and partial-create recovery.
160
+
161
+ Remove `get_document.raw`; use `docs_api_read` with `/documents/{id}` and `query.includeTabsContent:true`, reading the vendor document from the hatch value's `data`. Add `get_document.fields`. Replace unsigned `e:` cursors with signed content/revision-bound cursors; start without a cursor and keep read arguments fixed. Terminal pages omit `nextCursor` instead of returning null. Replace `tabs[].textTruncated` and `repliesTruncated` with top-level `truncated` paths; remove `replyCount` and use `replies.length`. Ambiguous document 404s report `connector_call_failed`, while standard read 5xx failures report `unavailable`. Temporary image `contentUri` access capabilities are permanently withheld; ordinary authored links remain. See the Google Docs section in the 0.35 provider migration guide for concrete calls.
162
+ - **Breaking:** Standardize Google Drive's agent surface while retaining its 17 named tools and adding four indexed `drive_api_*` tools. Named lists return `items` instead of `files`, `permissions` or `drives`; terminal cursors are omitted, old cursors must be discarded, and all named reads accept narrowing `fields`. Replace `truncatedFields` and `contentTruncated` with `truncated` paths. The hatch executes 13 reviewed JSON metadata operations from a pinned 64-method inventory; all grants remain in `share_file`, and media, ownership transfer, permanent deletion, watches and credential minting stay refused. Use standard error/outcome mapping, treat move lookups as auxiliary, refuse altered decision metadata before follow-up dispatch, and permanently withhold private access keys and download destinations. Dispatched write timeouts now use `write_outcome_unknown` instead of `connector_call_failed`, with `uncertainCall` evidence. `create_folder` and `restore_file` retain their explicit `destructiveHint:false` catalog annotation and remain writes. Named-list `fields` and `maxBytes` may change between pages without invalidating a cursor. Existing names are unchanged; Drive had no raw argument to remove. See the Drive section of the 0.35 provider migration guide for request and result examples.
163
+ - **Breaking:** Standardize Google Forms with four indexed `forms_api_*` hatches while keeping
164
+ all six named tools. Replace `get_form.raw` with `forms_api_read` at
165
+ `/forms/{formId}` and read the vendor Form from `data`. `list_responses.responses`
166
+ becomes `items`, and its redundant `formId` is removed. Named reads accept
167
+ `fields` (per item for response lists); terminal pages omit `nextCursor`.
168
+ Discard old cursors after upgrade. Size cuts use `truncated` paths instead of
169
+ batch booleans or `moreOptions`/`moreQuestions`; recovery question ids remain.
170
+ Temporary image access destinations are permanently withheld. Publish settings
171
+ and all watches stay refused. Named-write classifications and scopes stay the
172
+ same; the new write hatch is destructive. See the Google Forms section of the
173
+ 0.35 migration guide for concrete path, body, cursor and result mappings.
174
+ - **Breaking:** Standardize Gmail's read surface with three indexed hatches and retain all nine named tools. Gmail is the documented decision 0014 exception: no `gmail_api_write`; only `create_draft`/`update_draft` write drafts, and sending is never available. Replace `get_message.raw` with `gmail_api_read` (`path: "/messages/{id}"`, `query: { format: "full" }`, resource in `data`). Named list `threads`/`drafts`/`labels` become `items`; remove the named search estimate. Named reads gain `fields` and preserve thread continuations; labels use one bounded unpaged read, size booleans/omission counts become top-level `truncated` paths, terminal cursors are omitted and old private cursors expire. Use top-level `cursor` for signed hatch continuation instead of raw `query.pageToken`. Copied threading headers now refuse malformed/control/non-ASCII tokens before saving. Standard error meanings replace legacy wording. Draft approval classification, MIME/attachment safeguards and scopes remain unchanged. See the Gmail section of `documentation/provider-migration-0.35.md` for every mapping.
175
+ - **Breaking:** Standardize Google Sheets with four indexed API hatches and all nine named
176
+ workflows retained. Replace `get_spreadsheet.raw` with `sheets_api_read` full
177
+ vendor JSON; add result `fields` to named reads. Terminal cursors are absent.
178
+ Replace named-range omission counts, value-cell/per-range cut flags and batch
179
+ reply summary/omission counts with standard `truncated` paths. Keep cell content
180
+ as requested data, scalar/null value semantics, whole-row paging and named
181
+ append's INSERT_ROWS pin. Explicitly admit seven reads (including three read
182
+ POSTs) and ten writes, with bounded values and batches; refuse preview comment
183
+ and external data-source batch mutations. Use standard kit errors and preserve
184
+ ambiguous unknown-id and once-only write outcomes. See the 0.35 provider
185
+ migration guide for argument, envelope and path mappings.
186
+
187
+ Sign named cell-content continuations and bind them to the admitted delegated
188
+ caller for mapped subjects; restart existing unsigned `get_values` cursors after upgrading. Preserve
189
+ `truncated` on every named read after field selection and preserve value-read
190
+ continuation metadata. Keep operation action words and conditional refusal
191
+ reasons in the first summary sentence used by discovery.
192
+ - **Breaking:** Standardize Google Slides with four indexed `slides_api_*` hatches while keeping all 15 named tools. Generic thumbnails remain refused; `get_slide_thumbnail` keeps its private temporary-link workflow. Batch writes retain the 49 reviewed request kinds, revision preconditions and separate comment-save outcomes. Remove `raw` from `get_presentation`, `get_page` and `list_comments`; use `slides_api_read` for structural JSON. Rename list `layouts`/`threads` to `items`, move exact `total` into `page.total`, omit terminal `page.nextCursor`, and restart old content cursors once for signed continuation. Replace boolean `truncated`, reply `cut`, `elementsNotShown`, `layoutsNotShown`, `repliesNotShown` and `revisionIdNotShown` size reports with `truncated` paths. Rename projected `get_presentation.pageSize` to `canvasSize` (slide dimensions); full hatch JSON keeps vendor `data.pageSize`. Named reads gain narrowing `fields` that retain `page` and `truncated` metadata; hatch responses use `{status,data}`. Presentations.get details retain the legacy `presentationsId` parameter spelling. The new write hatch is destructive; the additive named tools `create_presentation`, `create_slide`, `create_comment` and `create_comment_reply` retain their explicit `destructiveHint:false` catalog annotation and remain writes. Replacement hatch reads redact temporary Image, SheetsChart and StretchedPictureFill `contentUrl` links to `"[redacted]"`, keeping `sourceUrl` and the named thumbnail workflow. Hatch comment-save state and advice remain in envelope-level `warnings` after `fields` selection, without fabricating vendor data. See the Google Slides section of `documentation/provider-migration-0.35.md` for concrete path, query and body mappings.
193
+ - Across maintained API providers, kit writes now refuse whole withheld scalar values and withheld links before running, including named Gmail, document, sheet, and other write tools. Longer prose may mention `[redacted]`; paths and queries refuse any containment. Authenticate bound cursors with a persistent deployment key, connection/personal-owner binding and index content hash; pre-upgrade cursors stop working and require a fresh first page. Report key-storage failures as retryable `unavailable`, and reject unknown declared error codes at construction.
194
+ - Rewrite the product overview and add explanatory guides for connections, agent access, and safety.
195
+ - **Breaking:** Require Node deployments to serve with `listen()` from `@zackbart/connecta/node` and install `undici@6.29.1`. Without its owned sender, every maintained-provider write, every reviewed POST read and every remote MCP write is refused before sending, although each worked in 0.34.1. With `listen()`, every maintained-provider request, reads included, remote MCP writes and downstream OAuth credential POSTs use the owned sender. It connects directly by default or through an explicit HTTP(S) CONNECT `proxy` option, ignoring `NODE_USE_ENV_PROXY`, `HTTP_PROXY`, `HTTPS_PROXY` and host proxy dispatchers. Remote MCP reads and OAuth discovery GETs retain native fetch and need their own host proxy policy.
196
+ - **Breaking:** Standardize Overflow's agent surface for 0.35.0. `overflow_api_get` becomes `overflow_api_read`, `overflow_api_mutate` becomes destructive `overflow_api_write`, and new `overflow_api_search`/`overflow_api_details` discover the 38 reviewed operations. `list_tap_events`, `list_webhooks` and `list_webhook_event_logs` move to indexed reads of `/tap/events`, `/webhooks` and `/webhooks/{webhookId}/event-logs`; flattened rows become vendor records under hatch `data.data`. Hatch query pairs become an object, with repeated arrays under bracketed names; `{ result }` becomes `{ status, data, page? }`. Paths remain relative to `/api/v3`, unindexed calls retire, and subscription creation uses `/subscriptions/{donorId}` rather than undocumented `/subscriptions` plus a body `donorId`. Remove `raw` from all named reads. Named `page` becomes opaque `cursor`, list noun keys become `items`, numbered `page`/`limit`/`totalCount` metadata becomes `hasMore`/optional `nextCursor`/vendor-stated `total`, payment methods gain paging, and delivery tokens move into hatch `page.nextCursor` with the vendor parameter named explicitly. All named reads and both call hatches gain narrowing `fields`. Preserve text `/health`, JSON-string or plain-text refund acknowledgements and empty write acknowledgements; refuse other unexpected non-JSON successes. Permanently strip webhook keys matching `secret|signing|hmac` case-insensitively, including nested delivery payloads. HTTP 422 becomes `invalid_args`; 409 stays generic. The sensitive set remains empty, writes still need host approval and have no idempotency key, and the maintained provider setup and 0.35 migration describe the exact replacements.
197
+ - **Breaking:** Standardize Planning Center's agent surface for 0.35.0 (#703). `pco_api_get` becomes `pco_api_read`, `pco_api_mutate` becomes the destructive `pco_api_write`, and new `pco_api_search`/`pco_api_details` discover the ten pinned products' operations. Hatch query pairs become an object, `{ result }` becomes `{ status, data, page? }`, arbitrary unindexed paths and per-call `version` are removed, and `fields` narrows declared results. Every named `raw` is removed; named-list `perPage`/`offset` become `limit`/opaque `cursor`, noun keys become `items`, `page.nextOffset` becomes `nextCursor`, terminal cursors are omitted, and named `totalCount` is replaced by optional reliable `page.total` (paged hatch reads also expose `page.total`). `get_plan.plan` moves to the top level; `itemsTruncated`/`teamMembersTruncated` become `truncated` paths. Acknowledged workflow-card actions return `{ ok: true }`. People's documented duplicate 409 now means `conflict`; incomplete body reads and malformed JSON have distinct messages. The source's empty-path verification artifact is omitted from the index. Publishing's signed-download generation and Webhooks signing-key rotation are refused before transport. Hatch per_page preserves and validates the vendor's integer range 1–100. Private calendar codes, private file destinations and opaque webhook payload/body/header values stay withheld alongside permanent credentials, without a widening argument or option.
198
+
199
+ Removed wrappers move to the indexed method/path: `add_person_email` → POST `/people/v2/people/{personId}/emails`; `add_person_phone_number` → POST `/people/v2/people/{personId}/phone_numbers`; `list_lists` → GET `/people/v2/lists`; `list_list_people` → GET `/people/v2/lists/{listId}/people`; `run_list` → POST `/people/v2/lists/{listId}/run`; `add_workflow_card_note` → POST `/people/v2/people/{personId}/workflow_cards/{cardId}/notes`; `list_forms` → GET `/people/v2/forms`; `list_form_submissions` → GET `/people/v2/forms/{formId}/form_submissions`; `add_plan_item` → POST `/services/v2/service_types/{serviceTypeId}/plans/{planId}/items`; `list_songs` → GET `/services/v2/songs`; `list_song_arrangements` → GET `/services/v2/songs/{songId}/arrangements`; `list_group_events` → GET `/groups/v2/events` or `/groups/v2/groups/{groupId}/events`; `list_check_in_events` → GET `/check-ins/v2/events`; `list_check_in_event_periods` → GET `/check-ins/v2/events/{eventId}/event_periods`; `list_check_ins` → GET `/check-ins/v2/check_ins` or `/check-ins/v2/events/{eventId}/check_ins`; `list_calendar_event_instances` → GET `/calendar/v2/event_instances`; `list_signups` → GET `/registrations/v2/signups`; `list_signup_attendees` → GET `/registrations/v2/signups/{signupId}/attendees`; `list_batches` → GET `/giving/v2/batches`; `list_pledge_campaigns` → GET `/giving/v2/pledge_campaigns`; `list_pledges` → GET `/giving/v2/pledge_campaigns/{pledgeCampaignId}/pledges`; `list_recurring_donations` → GET `/giving/v2/recurring_donations`; `list_webhook_subscriptions` → GET `/webhooks/v2/webhook_subscriptions`. Their old id arguments fill path slots; paged-read `perPage` becomes query `per_page` and continuation uses signed query `offset`, while attribute/filter/include argument mappings are listed completely in the Planning Center section of `documentation/provider-migration-0.35.md`. Additive writes moved to the hatch now require approval for a destructive tool. Operator setup moves to `documentation/providers.md` and agent conventions are generated.
200
+
201
+ Removed additive writes now accept empty 2xx replies as success and return the vendor envelope. Custom-field writes use POST `/people/v2/people/{person_id}/field_data` or PATCH `/people/v2/field_data/{field_datum_id}`. Reviewed provider-local discovery summaries cover volunteer rosters, church group leaders, custom fields, order of service and People profile roots.
202
+ - Record the provider standard as decision 0011, and enforce it for contributors. The standard covers one folder layout per kind, fixed evidence names, `drift.json` version 2, `SKILL.md` limited to agent guidance, and one agent-facing shape for hatches, paging, results, errors, `fields` and privacy, with `composed` folded into `dual`. A new provider folder must meet it. The 23 existing providers are listed as pending, and each leaves the list in two migration PRs. Nothing a deployment or agent sees changes yet.
203
+
204
+ Keep all three characterization goldens byte-identical in step 1 after safety back-ports, and require fresh affected evals for every step-2 PR. Guard pending exemptions against additions and reinsertions using the pre-push commit in main CI, the PR base in PR CI, and the merge base locally (with a first-parent fallback when the base equals HEAD); missing history fails closed. Require offline authored-tool fixtures independently of convention metadata, and validate standard schema types, required fields and hatch envelopes on both runtimes. Preserve observation-only hosted catalog names and annotations separately from served classification.
205
+ - Reduce required PR CI to static/build, complete Node coverage with INV/spec enforcement, selected native workerd boundaries, and a fail-closed `check` gate. Browser and dependency audit block relevant PRs through one inline changed-files step with NUL-delimited paths; main and nightly always run both. Compare forward/reverse golden bytes on Node and canonical bytes on workerd, with repeats and jitter nightly. Run package/Docker smoke on main and nightly and advisory provider drift weekly. Remove custom selection machinery, retain a small no-new-provider-exemptions check, and keep additional release checks in `release:check`.
206
+ - Remove low-value tests from the inbound auth, admission, Clerk, downstream OAuth, remote MCP, storage, operator store, and server suites: duplicates, implementation-detail and wording pins, and cosmetic matrices. The strongest guards for each security property, every spec coverage reference, and the shared storage contract that runs against both drivers stay. Runtime behavior is unchanged.
207
+ - Prune redundant operator UI checks and the browser state/viewport matrix, retaining real operator flows, browser security checks, and four representative visual baselines.
208
+ - Prune redundant core tests and repeated executor matrices while retaining security, guest contract, and package surface coverage.
209
+ - Prune provider tests duplicated by characterization goldens, shared safety checks, and broader contract suites, and remove obsolete provider contract fixtures.
210
+ - Remove redundant core test matrices and narrow D1 proxy checks while retaining wire, security, and native runtime contracts.
211
+ - Prune redundant core test cases and reduce QuickJS log-limit fixture costs while retaining sandbox limits, request cleanup, privacy, and wire-contract coverage.
212
+ - Prune redundant provider tests while retaining characterization goldens, provider-standard evidence, value-safety reviews, and provider-specific security regressions.
213
+ - Release core and the Eve helper together at 0.35.0, finalize upgrade guidance and release status, and document the Eve app's required undici override. Extend the generated-container smoke to verify non-root SQLite token adoption, rotation and restart, credential-free loopback health, active QuickJS shutdown, and physical remote MCP write attempts through the installed transport.
214
+ - **Breaking:** Send remote MCP writes through the owned Node transport so HTTP 421 responses
215
+ and host retry dispatchers cannot silently repeat them. Node deployments must
216
+ serve with `listen` from `@zackbart/connecta/node` to send remote writes. Node
217
+ hosts serving `connecta.fetch` without `listen` lose remote writes that worked
218
+ in 0.34; those writes are now refused before dispatch. The owned transport
219
+ connects directly by default or through an explicit HTTP(S) CONNECT proxy,
220
+ ignoring ambient outbound proxy settings and host dispatchers.
221
+ Unconfirmed dispatched writes retain an unknown, non-retryable outcome.
222
+ - Documentation now names 0.35.0 as the consolidated rework release. The GitHub personal-auth refusal no longer promises per-user OAuth attribution in a specific release.
223
+ - Run QuickJS executor coverage in parallel across execution, limits, and lifecycle suites, reusing warm children for ordinary result and host-error cases while retaining fresh executors for interruption and shutdown coverage.
224
+ - Pin SQL batch rollback with failure-injection tests for SQLite and real local D1, including multi-key copies and expiry sweeps.
225
+ - **Breaking:** Standardize Stripe's six-tool API surface for 0.35. Tool names stay the same.
226
+ Replace `select` with `fields` on `stripe_api_read` and `stripe_api_write`;
227
+ both named reads also accept `fields`. Invalid roots fail before dispatch.
228
+ Replace `page.next` with `page.nextCursor` and pass it as the top-level
229
+ `cursor`, retaining the original path, filters and selected fields. Raw
230
+ `query.starting_after`/`query.ending_before` record-id anchors remain supported
231
+ on a first request without cursor; a cursor with a raw anchor or both directions
232
+ is refused. Raw vendor continuation tokens cannot be used as cursor. Search
233
+ defaults to 6 hits and caps at 8 instead of 10/50; it and large details results
234
+ have explicit continuation, bounded discovery and `truncated` paths. Search
235
+ drops `tag`, omits `tool` for refused operations, and adds `named`/`matched`.
236
+ HTTP 409 now fails as `conflict`; oversized 424 replies preserve dependency
237
+ failure and unknown-write semantics, and failed body reads receive truthful
238
+ wording. Writes refuse whole withheld placeholders and links before dispatch.
239
+ The guide uses generated conventions. See the Stripe section of
240
+ `documentation/provider-migration-0.35.md` for the complete mapping.
241
+ The guide identifies the configured account and its confirmation read. V2
242
+ pages retain fetched data without a continuation when the next URL adds
243
+ omitted parameters; a signed cursor in a raw record anchor is refused with
244
+ guidance to use `cursor`.
245
+ - **Breaking:** Standardize Tithe.ly's agent surface for 0.35.0 (decision 0011 step 2). `tithely_api_get` becomes `tithely_api_read` and `tithely_api_mutate` becomes `tithely_api_write`: `query` and `form` name/value lists become `query` and `body` objects, the reply `{ result }` becomes `{ status, data }`, and each call is checked against Tithe.ly's documented operations before it is sent. New `tithely_api_search` and `tithely_api_details` find operations and their parameters without reading account data. `get_organization` and `get_account` are removed: use `list_organizations`/`list_accounts` rows or `tithely_api_read`. `raw` is removed from every named read, and `sensitiveFields: "return"` now widens only the hatch. Lists return `{ items, page }` (the `organizations`, `accounts`, `charges`, `recurringCharges` and `paymentMethods` keys are gone), `page.nextCursor` is omitted on the last page, `list_payment_methods` pages with `limit` and `cursor`, every named read takes `fields`, and organization rows now include `widgetId`. 429 and 5xx answers use the kit's standard wording. The guide's paging, hatch, write and error conventions are generated, and operator setup moves to the maintained provider setup page.
246
+ - **Breaking:** Standardize Vercel's API tools for 0.35.0. Replace `delete_project_env_var`
247
+ with `vercel_api_write` using DELETE `/v9/projects/{projectId}/env/{envVarId}`;
248
+ both are destructive and use the host's write route. Other tool names remain.
249
+ Replace hatch `select` with `fields`, `list_teams.until` with `cursor`, and runtime
250
+ log `maxRows` with `limit`. Named lists return `items` and `page`; `defaultTeamId`
251
+ is connection context. Hatch `page.next` becomes signed `page.nextCursor`, passed
252
+ unchanged in `query[page.param]` (`page.in` is `query`). Search defaults to six
253
+ hits, allows eight, and pages within 16 KiB; details page within 32 KiB.
254
+
255
+ Named reads accept narrowing `fields`. Log truncation uses dot-path arrays,
256
+ replacing boolean `truncated` and row `textTruncated`; runtime `stopped` remains
257
+ the collection reason. Unexpected HTML/text/binary acknowledgements for JSON-only
258
+ operations now fail; dispatched writes report an unknown outcome without replay.
259
+ Undocumented upload text acknowledgements (`data.contentType`/`data.bytes`) retire.
260
+ HTTP 409 uses generic `connector_call_failed`, absent a reviewed conflict meaning.
261
+
262
+ The Vercel pin is updated to reviewed bytes `4a06e85c2848`: four nondeprecated
263
+ operations added, no removals, eight changed request contracts. API-key quota
264
+ responses withhold the entire API-key subtree. Configured `teamId` remains a
265
+ routing default with intentional teamId/slug/null overrides, enforced consistently
266
+ across named tools, hatches and uploads; token permissions remain the access boundary.
267
+
268
+ Raw environment upserts with only `failed[]` now raise `invalid_args` instead of
269
+ returning successful hatch data; upsert/update-by-id guidance remains. Partial
270
+ hatch batches retain both `created` and `failed`. Partial named upserts report
271
+ created ids and failed variables; missing acknowledgements report unknown outcome
272
+ without replay. Documented billing JSONL, sandbox command NDJSON and log stream
273
+ media still parse into rows. Artifact downloads are explicitly refused because
274
+ they serve binary bytes despite the JSON contract. Audit-event `drainUrl` is
275
+ withheld entirely, including secret path components and query tokens. URL-shaped
276
+ continuations retain page data while refusing continuation.
277
+ - A write the downstream answered with HTTP 401 now has an unknown outcome by default in maintained providers and `api()` connectors, since a server may act on a request before it rejects the credential. It keeps its `auth_required` (or `downstream_oauth_required`) code, `reconciliationRequired: true`, and the `authorize_connector` handoff, whose instructions say to authorize and then re-read the target before any fresh call; it gains `writeOutcome: "unknown"`, a message saying the write was sent before the vendor rejected its credential, and no retry advice, key-reuse advice or wait. That holds whatever the call met after the 401 (a body past the response ceiling, a later failure in the same call, a 401 on a composite write's later request, a custom `api()` handler, a 401 answered inside another `api()` or `remoteMcp()` connector the call reached, directly, through a custom connector or from a program, or the call's deadline or the caller's cancellation, which no longer report `write_outcome_unknown` with key-reuse advice) and whatever idempotency key the write carried. Such a call never succeeds: a handler that caught the 401 and returned, or a result that could not be processed, still ends in that verdict, and programs count the write in `writes.unknown`. Before this, Breeze, Cloudflare, GitHub, Mixpanel, Notion, Overflow, Planning Center, Tithe.ly and Vercel reported such a write as a known refusal. A provider keeps that refusal only with reviewed vendor documentation that the vendor authenticates a request before acting on it: Stripe's API-key connector does, for an API v1 answer carrying Stripe's `Request-Id`, since Stripe documents an invalid API key as an error that occurs before execution begins, so its write 401s are unchanged. A write whose credential renewal fails after a 401, for any reason, keeps the 401's authorization code and handoff with an unknown outcome; before, a renewal that failed without an authorization verdict (an operator disconnect racing an `api()` OAuth refresh, an Infisical login outage, a direct `remoteMcp()` write whose caller left during the refresh) became `connector_call_failed`. A renewal that succeeds still leaves a non-retryable `connector_call_failed` with an unknown outcome, even if the handler catches the failure and returns, and no write is ever sent again after a 401. A renewal succeeds only when it yields a different credential than the one the write sent: a refresh or login that hands back the rejected token (remote MCP's OAuth refresh included), or an Infisical recovery already spent earlier in the same request, renews nothing, and the write keeps its handoff. A call whose renewed write shares it with another write stays unknown, never retryable, with no wait or key-reuse advice. A direct guarded transport settles successful mapper returns too. A caught read 401 (positive operation/tool classification plus a recorded GET or HEAD is required; method-override headers always count as writes), or a declared refusal followed by a successful write, does not block success. Reads answered 401 are unchanged.
278
+
279
+ A guarded transport that delegates through `ctx.fetch` or `ctx.oauth.fetch` keeps a separate record of each physical send, so a later response cannot erase an earlier write 401 or lend it the wrapper's read evidence. Dispatch and method fields are locked once sent, each response status is recorded once, and renewal only adds that request's own mark. Read replays through static OAuth and remote MCP also keep separate records. The built-in OAuth transport can hand its unsent entry to the recording grant once; every further send gets a new entry, and a response names only its own record. Custom delegated entries do not inherit the wrapper's declared refusal or explicit read classification; this can conservatively leave a successful composite unknown, including when the request init is copied.
280
+ - Compose registry, catalog, invocation, and maintained API calls through native Effect programs while preserving the Promise API, request revocation, secret redaction, and write outcome contracts.
281
+ Preserve delegating registry wrappers, recoverable native validation failures, graceful stash refusal on corrupt storage, and cleanup error structure. Release completed catalog-read finalizers from long-lived request scopes.
282
+ - Dispatch HTTP routes through two public Effect HttpRouters built once per handler, preserving raw paths, route ordering, method refusals and response-body lifetimes.
283
+ - Compose inbound authentication and downstream OAuth as native Effect programs while preserving Promise adapters, credential ownership, one-use grants and cancellation behavior.
284
+ - Compose upward MCP registration, tool and Skills dispatch, continuation policy, and result redaction with native Effect programs while preserving the modern and fresh stateless legacy SDK protocol adapters and Promise APIs.
285
+ - Compose SQLite and D1 storage, activity history, and KV copy operations with native Effect SQL execution while preserving Promise APIs, atomic claims and batches, existing database formats, and payload-free diagnostics.
286
+
287
+ Native storage and activity validation and decoding failures retain the original thrown value in the typed failure channel, matching custom Promise adapters.
288
+ - Finalize the joint Connecta and Eve 0.35.0 release notes with the completed Effect core, explicit Node proxy support, credential transport requirements and authenticated request-body limits.
289
+ - **Breaking:** Bound authenticated MCP request bodies with `admission.requests.maxBodyBytes`, defaulting to 4 MiB on every endpoint. Oversized streams stop with the existing 413 refusal and release admission. The Node adapter's separate pre-auth buffer drops from 10 MiB to 4 MiB.
290
+ - Run Worker Loader and QuickJS host acquisition, execution, cancellation, and cleanup as native Effect programs while preserving the Promise executor contract and synchronous lease release.
291
+ - Compose remote MCP connection, catalog, call, resource, Skills and auth workflows as native Effect programs around the pinned SDK, preserving Promise APIs, request lifetimes, complete caches and one-attempt writes. Honor decorated or replaced storage and activity methods through native dispatch, including nested storage namespaces.
292
+ - Preserve original API-operation summaries and expose reviewed policy in a separate `refusal` field. Search retains bounded actionable reasons; details returns complete reasons, including methods intentionally absent from call schemas. Gmail remains draft-only with no write hatch (#1033).
293
+ - Reduce generated provider index storage by sharing complete parameter rows and decoding operation details lazily, preserving schemas, refusals, search results and cursor identity.
294
+
295
+ ### Fixed
296
+
297
+ - Maintain defensive redaction boundaries while preserving ordinary text and link spelling.
298
+ - Settle write failures from the complete logical call's dispatch ledger (H1). Only positive pre-dispatch or served-refusal evidence can establish a known failure. A dispatched write with an uncertain result is non-retryable, including when later calls fail, guest code catches an error or a recovery wrapper supplies authorization guidance. Programs retain `writes.unknown` and require reconciliation before a fresh write. Direct keyed Stripe requests retain only the retry guidance supported by the vendor's actual idempotency contract. See [write outcomes and recovery](https://github.com/zackbart/connecta/blob/main/documentation/code-mode.md#writes).
299
+ - Bound result-paging authentication to once per access-validation pass and reuse connector catalogs within each pass, so large search handles page within their deadline even with slow token storage. Keep both live access checks, including revocation during paging, and distinguish access-validation timeouts from result-storage timeouts.
300
+ - Make CI Chromium setup resilient to slow Ubuntu mirrors with cached browser downloads, HTTPS package sources, bounded apt operations and one install retry.
301
+ - `clerkAuth`'s extra Backend API verification of an opaque OAuth access token works on Workers. It asked for `redirect: "error"`, which workerd rejects, so every opaque token was refused there; it now asks for `manual` and refuses a redirect without following it. The verification also ends its request and response body on every outcome, including an error status, an oversized body, a caller that leaves, and the ten-second deadline. It previously left the request open and the body unread after an error status, and read a body of any size; the response is now read as bytes and refused past 64 KiB.
302
+ - Infer write outcomes and reconciliation advice from call-owned dispatches. A failed maintained-provider call whose complete tracking records an auxiliary resource read and no call-owned dispatch keeps its retry or authorization recovery advice, including when it reports a timeout. Explicit unknown-outcome markers always take precedence. Empty ledgers, missing or incomplete evidence, authentication POSTs alone, kit requests falsely declared as auxiliary reads, custom `api()` and `remoteMcp()` connectors, invocation deadlines, cancellation, and dispatched call-owned writes remain conservative. Auxiliary effect labels do not change core write reservation or replay rules.
303
+ - Stabilize the shared-deadline tests for direct and guest calls: they now expire each short deadline only after the downstream call has started, so catalog resolution or hashing on a slow host can no longer end the call in the `catalog` stage before the stage under test.
304
+ - Make the OAuth Restart expiry-ambiguity test wait for refresh receipt explicitly, preserving delayed storage and late-response assertions without a wall-clock polling deadline.
305
+ - Clarify that hosts own write confirmation, retain connector identity guidance alongside bounded API-search pointers without duplicate filter-recovery text, and suppress write pointers on read-only endpoints. Unreadable successful write responses report an unknown outcome and say to check before repeating; auxiliary read failures keep their read wording. Configured credentials return conditional guidance with their operator handoff, including after an authentication failure in an earlier request.
306
+ - Clarify that Node deployments need `listen()` and the template's `undici` dependency for guarded provider writes and requests using non-GET/HEAD methods, including reviewed read-only POSTs. Correct the Vercel value-safety source reference. Record the already-shipped shared provider-kit behavior that attaches a bounded `httpStatus` fact to operator failure records, including GitHub failures.
307
+ - Preserve reviewed vendor failure classifications when private request values overlap public error reasons or codes, while keeping diagnostic text redacted.
308
+ - Preserve failure classification and bounded retry delays when sent private values match declared numeric response headers or body fields. Delays are read as whole seconds or an HTTP-date and capped at 24 hours; off-spec values such as `"1.5"` no longer give a retry hint. Failure messages and operator records continue to use redacted data.
309
+ - Keep golden captures bounded while allowing delayed native Web Crypto to settle before resuming the driver. Producer-fed reads retain bounded rejection and full capture cleanup, preserving existing golden observations and allowing the next capture to run after unsupported producer dependencies. Reject late work from closed capture epochs so exhausted native cleanup cannot contaminate later observations.
310
+ - Regenerate Planning Center drift output after the hosted-half removal dropped `generated.hosted`.
311
+ - Make activity-label deadline tests wait for resolver entry and check URL scanner work with deterministic character/search-work budgets and a generous time backstop for native regex scans.
312
+ - Grade Google eval tasks from returned resource facts and final state across equivalent reads. Tighten shared Google index, field-mask, and Discovery evidence guards before product migrations. Accept referenced Discovery evidence and projected named-read page schemas in the provider-standard checker.
313
+ - Stabilize the executor-shared write-deadline and Infisical recovery tests: they now expire each short deadline only after the write has been dispatched, so catalog resolution or the login exchange on a slow host can no longer end the call before the stage under test. The Workers test project now reports only rejections still unhandled after the microtask checkpoint, as Node does, so a cancelled response body or a deadline that ends a catalog listing no longer reports a spurious unhandled rejection.
314
+ - Improve API operation discovery for noun phrases, create and update phrases after conversational framing, cell references, and explicit refusals with the same reviewed reason in search, details, and calls. Generated provider guidance names tools that can continue, explains the cursor location, preserves continuation before a program exceeds its call limit, and summarizes nonzero refused operations with a count and details lookup.
315
+ - Rank API operations by intent and the requested action before root-collection ties. Keep explicit write verbs when their objects contain read words, accept modifiers before resources with bounded noun coverage, recognize common plurals and conversational queries without admitting verb-only matches for an unrelated resource, and keep Planning Center person operations reachable beyond the leading profile results.
316
+ - Preserve vendor error wording when a read answered HTTP 421 becomes retryable, and withhold provider hook defect text during credential probes.
317
+ - Withhold vendor text from provider-kit result-hook defects, require canonical path resolution for reviewed tables even with a global review, and preserve accepted-write retry diagnostics with the original HTTP status.
318
+ - Replace the former narrow-matrix retry policy with four representative light/dark Overview and connector Connection baselines. Visual comparisons never retry; failed attempts retain diffs and traces.
319
+ - Close accepted Node connections that have not sent their first HTTP request during graceful shutdown. Spare client sockets left after canceled authentication probes no longer hold token adoption, rotation, and doctor deployments open until the shutdown deadline; active requests and sandbox children still receive cleanup.
320
+ - Stabilize the operator-sink output tests: their sentinel check now matches only planted markers, so a random activity id whose hex digits happen to contain the marker suffix no longer fails the run.
321
+ - **Breaking:** Constrain Stripe and Cloudflare non-JSON success responses to reviewed operation/media pairs, preserving downloads, streams, raw Worker content and R2/KV object reads. Unexpected HTML/text on JSON writes reports an unknown outcome without replay. Withhold Vercel partial environment-write failure prose, identify the sent key, and retain safe created ids/keys and failed keys/codes after redaction. Validate pinned path parameter types, enums and numeric bounds before dispatch, including canonical ASCII decimal safe-integer ids.
322
+
323
+ Overflow refund initiation accepts the documented application/json string, the narrow NestJS-compatible text/plain acknowledgement, or an empty 2xx acknowledgement. Nonempty HTML, binary, other media and JSON-object replies produce an unknown write outcome; check the target before repeating the single dispatched write. Vercel env value inputs are marked writeOnly and echoes are withheld on named and raw env writes.
324
+ - Stabilize the bounded skill-cancellation test: it now expires its deadlines only after the downstream skills scope opens, and a new test covers cancellation that lands while local skill manifests are still being hashed, before any downstream scope opens.
325
+ - Consolidate generated provider drift key and digest validation in the shared drift validator. Cancel activity display-label lookups and their Clerk transport when the reader leaves or the lookup budget expires. Clarify Worker test enrollment and fixture watch restarts.
326
+ - Withhold every provider hook defect on HTTP kit operations that withhold vendor text, including reviewed redaction and error facts. Report a read's HTTP 421 as retryable `unavailable` advice without resending; physical writes keep their existing refusal.
327
+ - Defer unhandled-rejection reporting until the microtask checkpoint finishes in the Worker example's Alchemy stack and local Wrangler configuration, avoiding false reports for rejections handled within that checkpoint. Existing deployments receive the behavior on their next deploy after adding the flag.
328
+ - Restore explicit additive-write annotations across Breeze and Google named tools, including Gmail draft creation. Kit writes can also declare reviewed idempotency hints independently of transport keys. Correct the affected migration notes, generated Google Conventions punctuation, and sentence boundaries in Google failure messages. Partial Docs creates and oversized successful write replies carry one unknown-outcome sentence with recovery advice.
329
+
330
+ Align auth recovery advice with program write accounting for proven resource refusals. Auth failures after entering a write with no call-owned dispatch, including credential refusals, static-OAuth refresh failures, and remote MCP connect/initialize 401s, report unknown outcomes and require reconciliation. Count kit auxiliary requests without physical read proof as call-owned when settling failures, including 503 and unavailable responses.
331
+
332
+ Treat undefined plain-object properties as absent during input validation, without mutating caller arguments or copying dates, byte arrays and class instances. A throwing input getter is a validation refusal. An evaluation failure no longer disables a cached validator for later calls. Omitted destructive hints keep the conservative default.
333
+ - Accept equivalent Sheets append ranges and numeric or lexical Gmail id ordering in offline evaluation graders. Add negative controls and disclose all saved-trial regrades alongside unchanged original results.
334
+ - Close active Node response connections promptly after shutdown drain, including completed SSE streams, without a keepalive tail or a false shutdown deadline failure. Preserve normal keepalive and the configured shutdown deadline.
335
+ - **Breaking:** Send downstream OAuth token, registration and revocation POSTs through the owned one-attempt transport on Node, including an explicitly configured proxy. Refuse unsupported Node hosts before code/refresh claims, retain native discovery GETs and Workers fetch, and withhold credential transport diagnostics.
336
+ - Keep scoped OAuth polls from discarding unrelated full-refresh results or their bounded recovery, while retaining the newer polled connector row.
337
+ - List every declared agent and its pools with supported credential types, distinguish an absent token module from an unissued token, and show payload-free last-seen observations sampled within a minute from successful OIDC or agent-token endpoint admission, with best-effort recording bounded to 500 ms or the shorter probe deadline.
338
+ - Expose reliable Planning Center collection totals as page.total on named and
339
+ paged hatch reads, while preserving opaque continuations and omitting invalid
340
+ optional totals. Stop suggesting excluded applications' unavailable tools in
341
+ generated guides and hatch discovery.
342
+ - Prefer exact API resources across versioned namespaces while retaining authored tools, compound resource names and existing action-query relevance (#1030).
343
+ - Strengthen Vercel response value withholding while preserving useful metadata and one-attempt write handling.
344
+
345
+ ### Removed
346
+
347
+ - **Breaking:** Remove the `@zackbart/connecta/providers/basecamp`, `/providers/intercom`, `/providers/linear`, `/providers/revenuecat`, and `/providers/wispr-flow` subpath imports. Replace these presets with generic `remoteMcp()` entries using the [hosted MCP migration guide](https://github.com/zackbart/connecta/blob/main/documentation/hosted-mcp-migration.md), preserving connector ids, credential ownership, scopes, regional URLs, and read-only restrictions.
348
+ - **Breaking:** Remove the hosted halves of Stripe, Vercel, Cloudflare, Notion, Mixpanel, and GitHub, hosted drift checks, reviewed classification and UI drift reports. Old hosted selectors require generic `remoteMcp()` entries; `classify` requires `ConnectaConfig.classification`. GitHub now exposes seven REST tools after its standard-surface migration; its 26 former hosted tools are removed. Remote source classification now uses fail-closed annotations only. The hosted MCP migration guide maps each former URL, auth mode, headers and scope to a separate generic connection beside its API connector.
349
+ - **Breaking:** Remove the Infisical, Notion, and Mixpanel providers and their package exports.
350
+ Use generic `remoteMcp()` entries for Notion and Mixpanel hosted servers;
351
+ Infisical has no maintained replacement. See the provider migration for 0.35.
352
+
353
+ ### Security
354
+
355
+ - **Breaking:** Preserve one-attempt write behavior and conservative unknown outcomes across HTTP providers, custom connectors and remote MCP. Credential renewal, redirects and recovery handoffs cannot replay a dispatched write or erase its uncertainty. Reads retain their supported recovery paths. Apply the configured sensitive-field policy before returning provider results and retain caller, admission and redaction context across provider boundaries. See the [0.35 provider migration](https://github.com/zackbart/connecta/blob/main/documentation/provider-migration-0.35.md) for provider-specific behavior changes.
356
+ - Bound inbound adapter authorizations to 16 per loaded core in a process or Worker isolate across MCP, agent, operator, and browser OAuth routes. Saturation fast-refuses with retryable 503 `authentication_busy` and `Retry-After: 1`, before adapter or SDK work. Preserve prompt subscription-listen refusal under a full MCP execution pool and account for authentication I/O through actual settlement.
357
+
358
+ Keep admission charged until authentication I/O and cancellation settle. After the hard deadline plus one second of grace, move stalled work into a separate allowance of 16 abandoned operations; refuse new work while it is full, log `authentication_abandoned_saturated`, expose both counters in `/health`, and bound outstanding authorizations to 32. Release a charge exactly once: when its work settles, or when a `FinalizationRegistry` finalizer shows that nothing can ever settle it, as after Cloudflare cancels an invocation's I/O. That release is eventual, never timed, never happens while a caller, middleware, or other handler can still settle the work, and logs `authentication_unreachable`; `/health` reports `admission.authentication.unreachableRelease`. The Worker example sets `enable_weak_ref`, which exposes `FinalizationRegistry` before the 2025-05-05 compatibility date; without it, only settlement releases a charge. Return Access and agent-token deadline refusals promptly without losing native-operation accounting. Cache Clerk domain/gate verdicts only after completed, uncancelled checks. Bind all Clerk SDK fetches to the owning request and authentication deadline, close response bodies before returning buffered data to the SDK, and preserve Worker disconnect cleanup through the invocation context.
359
+ - Move CCB v2 onto the shared provider kit, preserving its tools, requests, OAuth diagnostics and characterized results. Apply the deployment's sensitive-field policy before every projection, closing nested-value gaps in custom fields, event guest counts and scheduling metrics.
360
+ - Bind signed continuations to the admitted caller and pool owner when a connection's downstream identity varies per caller. Refuse a continuation from another identity before sending a downstream request.
361
+ - Override undici to 8.12.3 in the Eve helper's development and test install, for GHSA-xjj6-f33q-929c, GHSA-4qv8-2p9j-2685, and GHSA-f72v-6w45-q472. The published helper's dependencies are unchanged. Eve 0.83.0 requires undici 8.10.2, so a deployment that installs Eve receives that version unless it overrides undici itself.
362
+ - Withhold complete signing values written with character references in provider text and reviewed links.
363
+ - Harden credential and private-argument withholding across provider results, errors, continuations and program outputs.
364
+ - Value safety now takes its most protective choice when sent-secret redaction changed a value it decides on: a resource type, a record's label or type, an environment entry, a URL's scheme or parameter name, a streamed row's field name, a response's Content-Type, or the public prefix of a credential (such as `sk_live_`, `whsec_` or a signing parameter's name) whose remainder follows. Echoed sensitive header lines are read before an echoed value in them is replaced, so their whole value is withheld. Such a response may withhold more than before; other responses are unchanged.
365
+ - Sent-secret redaction no longer renames vendor field names before result safety runs. Provider kit responses keep their field names and have every value redacted, so value safety and projections find each field by the name the vendor gave it; response header names are kept the same way, with their values redacted. Field names are still checked for sent secrets before results, failures and program values reach the agent. The reviewed field-name exemption that Docs, Slides, Sheets and Drive declared is no longer needed and is removed.
366
+ - Update zod to 4.6.6 to pick up an upstream fix for memory use when validating oversized collections.
367
+
368
+ ## 0.34.1 — 2026-10-19
369
+
370
+ Connecta 0.34.1 is a patch release with a security fix. The Cloudflare provider passed stored AI Search crawler headers through unredacted, including on the routes 0.34.0 already served, so any caller allowed to read those resources could see header values that may carry credentials. 0.34.1 withholds them, along with conditional firewall match credentials, Vercel daemon probe headers, setup-form defaults and payment client secrets, and refuses Cloudforce One match responses that have no published schema before any request is sent. Deployments that use the Cloudflare or Vercel providers should upgrade.
371
+
372
+ Connectors can now set `readOnly: true` (#895). A read-only connector serves only reviewed reads on every endpoint, maintainers' plain `/mcp` included; write and unclassified tools are hidden from discovery and refused on every call path. It combines with endpoint and pool `readOnly`, and the default is unchanged. The Stripe guide now shows both setups side by side: OAuth to Stripe's hosted MCP, or a secret or restricted key through the REST connector, with or without `readOnly`. A new maintained Intercom provider supports personal OAuth or a shared bearer token in the US or EU region; its schemas are not pinned yet because Intercom's catalog requires authentication to list.
373
+
374
+ Catalog drift no longer counts as connector health (#867): a drifted connector reads Connected and stays out of Needs attention, while drift details remain on the connector page and in Activity. Connector cards, counts and the attention list keep their last verdict and position while details reload, and the top bar is more compact. Drift detection itself is corrected (#884): reordered schema arrays no longer report false changes for schemas pinned in the new format (existing pins keep their original hashing until re-reviewed), plan-gated tools can be marked optional, schema coverage is reported honestly, failed fingerprints mark verification unavailable instead of keeping a clean report, and per-person connectors keep separate observations. The Linear, Mixpanel, RevenueCat and Stripe reviews are reconciled with their live hosted catalogs and pin schemas; Mixpanel's Get-Events, Get-Dashboard, List-Cohorts and Get-Metric serve as reads again without deployment overrides, so a `classification: { mixpanel: { "Get-Events": "read" } }` override can be removed. Upgrading from 0.34.0 needs no configuration, storage migration or token rotation.
375
+
376
+ ### Added
377
+
378
+ - Add a maintained Intercom hosted MCP provider with explicit US/EU region selection, personal OAuth or shared bearer-token auth, reviewed tool classifications, and guidance for sensitive support data and optional Fin Operator actions. Permission-gated Fin tools are optional for missing-tool drift while present tools retain classification checks. Schema coverage reports present reviewed tools as unpinned. Schema digests remain unpinned because anonymous catalog discovery requires authentication.
379
+ - Add optional connector-level `readOnly` to every connector and maintained provider, enforcing read-only discovery and calls on every endpoint. Show the policy in the operator UI and clarify Stripe OAuth and API-key setup.
380
+
381
+ ### Fixed
382
+
383
+ - Correct catalog drift reporting with schema coverage and verification states,
384
+ identity-partitioned observations, optional gated tools, and versioned schema
385
+ set canonicalization that preserves existing pins. Detect documented tool
386
+ access changes and stale unclassified acknowledgements in provider checks.
387
+ Operator refresh responses include the catalog comparison from that refresh,
388
+ so hashing failures and changed schemas cannot return an earlier clean report.
389
+ Provider pin assertions select the stored digest format, and a generated-roster
390
+ guard verifies every pin against captured schemas and rejects input/output drift.
391
+ - Reconcile the maintained Linear catalog with hosted label lifecycle, inbox, saved view, triage, and diff tools. Preserve plan-gated customer requests, review the documented customer-needs read, and pin the observed hosted schemas so later changes fail closed.
392
+ - Refresh reviewed hosted Mixpanel schemas so Get-Events, Get-Dashboard, List-Cohorts, and Get-Metric remain available to read-only endpoints without deployment overrides. Review the limited-beta Get-Audit-Log as a read, retain Fill-Event-Metadata as a write, and classify Get-Experiment as destructive because its optional computations can persist results and auto-conclude experiments.
393
+ - Keep catalog drift informational, keep each connector's last verdict on every operator view while its details are read again so cards, counts and the attention list stop bouncing, keep attention rows in configuration order as their verdicts settle, safely hold prototype-named connector IDs, keep card and detail headers and Overview attention text on single lines with accessible ellipsis, including long connector ids, auth scopes and Read-only badges, reserve the card action footer and empty tool bar row, and compact the top bar for long deployment names and all page tabs.
394
+ - Refresh Vercel and Cloudflare REST contracts and value-safety reviews, withhold conditional firewall match credentials, stored AI Search crawler headers and daemon probe headers, setup-form defaults, and payment client secrets, refuse schemaless Cloudforce match responses before dispatch, admit two stateless Cloudflare POST reads, classify hosted Cloudflare documentation search as read-only, and reconcile Vercel's complete hosted tool inventory.
395
+ - Review RevenueCat subscription-group listing, audience preview, and paywall screenshot rendering as reads, pin four live schemas, and clarify permission-gated catalogs and conservative credential-validation routing.
396
+ - Refresh Stripe hosted MCP tool reviews for money movement, recipient setup, Atlas formation, and renamed feedback; remove retired reviews, pin captured schemas for drift detection, and document account, mode, and human-confirmation requirements.
397
+
5
398
  ## 0.34.0 — 2026-10-16
6
399
 
7
400
  Connecta 0.34.0 rebuilds the operator UI around an Overview with connector health, endpoints, people and agents, a Needs attention list with fix prompts, and a connection map (#867). Maintainers now land on Overview at `/`; Endpoints moves to `/endpoints`, and `/access` redirects there. Update bookmarks, links and browser automation that expected Endpoints at `/`. Members still get their member page on every operator page path. The upgrade steps are in `documentation/migration-0.34.md`.