@zackbart/connecta 0.34.1 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. package/CHANGELOG.md +363 -0
  2. package/README.md +62 -106
  3. package/SECURITY.md +3 -2
  4. package/bin/connecta.mjs +41 -16
  5. package/bin/version.mjs +1 -1
  6. package/dist/access-tokens.d.ts +2 -1
  7. package/dist/access-tokens.js +66 -30
  8. package/dist/activity.d.ts +1 -1
  9. package/dist/activity.js +2 -0
  10. package/dist/agent-config.d.ts +23 -0
  11. package/dist/agent-config.js +59 -0
  12. package/dist/agent-description.js +16 -0
  13. package/dist/agent-identity.js +4 -4
  14. package/dist/agent-observation.js +39 -0
  15. package/dist/auth/clerk-sdk/client.d.ts +2 -0
  16. package/dist/auth/clerk-sdk/generated.js +554 -563
  17. package/dist/auth/clerk-transport.js +70 -3
  18. package/dist/auth/clerk.d.ts +13 -0
  19. package/dist/auth/clerk.js +653 -246
  20. package/dist/auth/cloudflare-access.js +46 -42
  21. package/dist/auth/downstream-client-metadata.js +2 -2
  22. package/dist/auth/downstream-oauth.js +2051 -1160
  23. package/dist/auth/downstream-revocation.js +88 -88
  24. package/dist/auth/native-call.js +20 -0
  25. package/dist/auth/native.js +184 -0
  26. package/dist/auth/oauth-start-reset.js +11 -5
  27. package/dist/auth/oauth-token-response.js +121 -102
  28. package/dist/auth/oauth-v2-migration.js +97 -78
  29. package/dist/auth/renewable-grant.js +10 -0
  30. package/dist/auth/static-oauth.js +663 -271
  31. package/dist/auth/vercel-agent.js +266 -0
  32. package/dist/auth-admission.js +204 -0
  33. package/dist/auth-elicitation.js +350 -241
  34. package/dist/authorization-handoff.js +164 -90
  35. package/dist/call-admission-context.js +3 -10
  36. package/dist/call-admission.js +2 -0
  37. package/dist/call-classification.js +9 -0
  38. package/dist/call-recovery.js +32 -13
  39. package/dist/canonical-json.js +8 -0
  40. package/dist/catalog-cache.js +369 -213
  41. package/dist/catalog-service.js +659 -530
  42. package/dist/catalog.js +5 -1
  43. package/dist/concurrency.js +0 -25
  44. package/dist/config-defaults.d.ts +1 -0
  45. package/dist/config-defaults.js +1 -0
  46. package/dist/config-schema.d.ts +3 -1
  47. package/dist/config-schema.js +13 -3
  48. package/dist/config.d.ts +40 -6
  49. package/dist/config.js +40 -26
  50. package/dist/connector-caller.d.ts +4 -0
  51. package/dist/connector-caller.js +17 -4
  52. package/dist/connectors/api-connector.d.ts +12 -7
  53. package/dist/connectors/api-connector.js +142 -56
  54. package/dist/connectors/guarded-fetch.d.ts +51 -17
  55. package/dist/connectors/guarded-fetch.js +215 -121
  56. package/dist/connectors/negotiation-cache.js +20 -10
  57. package/dist/connectors/remote-mcp.d.ts +10 -30
  58. package/dist/connectors/remote-mcp.js +955 -563
  59. package/dist/d1.js +10 -243
  60. package/dist/derived-context.js +5 -0
  61. package/dist/describe-config.d.ts +3 -1
  62. package/dist/describe-config.js +2 -0
  63. package/dist/downstream-input.js +347 -260
  64. package/dist/errors.d.ts +87 -6
  65. package/dist/errors.js +114 -4
  66. package/dist/execute.js +87 -50
  67. package/dist/executor-admission.js +3 -0
  68. package/dist/executors/quickjs.js +163 -112
  69. package/dist/guarded-transport.js +50 -0
  70. package/dist/guest-runtime.js +1 -1
  71. package/dist/http/client.js +439 -0
  72. package/dist/http/errors.js +558 -0
  73. package/dist/http/fields.js +49 -0
  74. package/dist/http/hatch-paging.js +318 -0
  75. package/dist/http/hatch.js +1279 -0
  76. package/dist/http/json-schema.js +267 -0
  77. package/dist/http/node-transport.js +241 -0
  78. package/dist/http/oauth.js +162 -0
  79. package/dist/http/paging.js +228 -0
  80. package/dist/http/provider.js +221 -0
  81. package/dist/http/safety.js +82 -0
  82. package/dist/http/services.js +79 -0
  83. package/dist/http/tools.js +383 -0
  84. package/dist/http/vendor-index.js +138 -0
  85. package/dist/http/vendor.js +448 -0
  86. package/dist/http/write-request.js +66 -0
  87. package/dist/http-policy.d.ts +11 -0
  88. package/dist/http-policy.js +45 -0
  89. package/dist/inbound-credential.js +1 -1
  90. package/dist/index.d.ts +2 -2
  91. package/dist/index.js +4 -0
  92. package/dist/invocation-auth.js +30 -19
  93. package/dist/invocation.js +218 -85
  94. package/dist/mcp-result.js +0 -4
  95. package/dist/membership.d.ts +4 -0
  96. package/dist/meta-output.js +1 -1
  97. package/dist/meta-tools.js +531 -406
  98. package/dist/native-recovery.js +52 -0
  99. package/dist/native-tools.js +382 -0
  100. package/dist/node.d.ts +4 -3
  101. package/dist/node.js +45 -8
  102. package/dist/oauth-handoff.js +177 -104
  103. package/dist/oauth-partition.js +6 -20
  104. package/dist/oauth-sealing.js +6 -7
  105. package/dist/operation-vocabulary.js +101 -0
  106. package/dist/operator-record.d.ts +2 -2
  107. package/dist/operator-record.js +17 -4
  108. package/dist/operator-ui/agents.d.ts +5 -4
  109. package/dist/operator-ui/agents.js +17 -7
  110. package/dist/operator-ui/config-summary.js +5 -4
  111. package/dist/operator-ui/connection-map.js +7 -5
  112. package/dist/operator-ui/contract.d.ts +7 -3
  113. package/dist/operator-ui/endpoints.js +4 -13
  114. package/dist/operator-ui/fix-prompts.d.ts +1 -1
  115. package/dist/operator-ui/fix-prompts.js +0 -8
  116. package/dist/operator-ui/generated.js +3 -3
  117. package/dist/operator-ui/model.d.ts +2 -3
  118. package/dist/operator-ui/overview.js +5 -2
  119. package/dist/operator-ui/setup-commands.js +0 -4
  120. package/dist/operator-ui/view.d.ts +2 -25
  121. package/dist/operator-ui/view.js +2 -76
  122. package/dist/program-writes.js +47 -26
  123. package/dist/provider-call-facts.d.ts +115 -0
  124. package/dist/provider-call-facts.js +182 -0
  125. package/dist/provider-call.d.ts +112 -0
  126. package/dist/provider-call.js +271 -0
  127. package/dist/provider.d.ts +65 -31
  128. package/dist/provider.js +116 -39
  129. package/dist/providers/_shared/google/hatch.js +91 -0
  130. package/dist/providers/_shared/google/kit.js +537 -0
  131. package/dist/providers/_shared/google/result-size.js +15 -2
  132. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  133. package/dist/providers/_shared/google/service-account.js +8 -4
  134. package/dist/providers/_shared/google/workspace.d.ts +6 -210
  135. package/dist/providers/_shared/google/workspace.js +6 -425
  136. package/dist/providers/_shared/rest/compact-index.js +86 -0
  137. package/dist/providers/_shared/rest/dispatch.js +3 -23
  138. package/dist/providers/_shared/rest/kit.js +546 -0
  139. package/dist/providers/_shared/rest/operation-index.js +230 -14
  140. package/dist/providers/_shared/rest/response-media.js +11 -0
  141. package/dist/providers/_shared/rest/tools.js +101 -78
  142. package/dist/providers/_shared/rest/value-safety.js +353 -195
  143. package/dist/providers/_shared/sensitive-fields.js +27 -0
  144. package/dist/providers/breeze/api.js +584 -0
  145. package/dist/providers/breeze/index.d.ts +1 -3
  146. package/dist/providers/breeze/index.js +67 -1420
  147. package/dist/providers/breeze/openapi.generated.js +60 -0
  148. package/dist/providers/breeze/skill.generated.js +2 -6
  149. package/dist/providers/breeze/tools.js +696 -0
  150. package/dist/providers/ccb/api.js +496 -0
  151. package/dist/providers/ccb/index.d.ts +15 -37
  152. package/dist/providers/ccb/index.js +77 -1702
  153. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  154. package/dist/providers/ccb/lib/constants.js +74 -0
  155. package/dist/providers/ccb/lib/guide.js +9 -0
  156. package/dist/providers/ccb/lib/verdicts.js +387 -0
  157. package/dist/providers/ccb/openapi.generated.js +397 -0
  158. package/dist/providers/ccb/safety.js +295 -0
  159. package/dist/providers/ccb/skill.generated.js +2 -6
  160. package/dist/providers/ccb/tools.js +853 -0
  161. package/dist/providers/cloudflare/api.js +1066 -0
  162. package/dist/providers/cloudflare/index.d.ts +5 -22
  163. package/dist/providers/cloudflare/index.js +79 -197
  164. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  165. package/dist/providers/cloudflare/lib/config.js +2 -0
  166. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  167. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  168. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  169. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  170. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  171. package/dist/providers/cloudflare/openapi.generated.js +4 -3
  172. package/dist/providers/cloudflare/{value-safety.js → safety.js} +487 -0
  173. package/dist/providers/cloudflare/skill.generated.js +2 -10
  174. package/dist/providers/cloudflare/tools.js +360 -0
  175. package/dist/providers/docs/api.js +51 -0
  176. package/dist/providers/docs/index.d.ts +1 -12
  177. package/dist/providers/docs/index.js +53 -1165
  178. package/dist/providers/docs/lib/constants.d.ts +18 -0
  179. package/dist/providers/docs/lib/constants.js +18 -0
  180. package/dist/providers/docs/lib/discovery.js +26 -0
  181. package/dist/providers/docs/lib/requests.js +48 -0
  182. package/dist/providers/docs/lib/schemas.js +168 -0
  183. package/dist/providers/docs/openapi.generated.js +16 -0
  184. package/dist/providers/docs/safety.js +54 -0
  185. package/dist/providers/docs/skill.generated.js +2 -6
  186. package/dist/providers/docs/tools.js +802 -0
  187. package/dist/providers/drive/api.js +177 -0
  188. package/dist/providers/drive/index.d.ts +1 -12
  189. package/dist/providers/drive/index.js +38 -1448
  190. package/dist/providers/drive/lib/constants.d.ts +6 -0
  191. package/dist/providers/drive/lib/constants.js +6 -0
  192. package/dist/providers/drive/lib/contracts.js +532 -0
  193. package/dist/providers/drive/lib/hatch.js +197 -0
  194. package/dist/providers/drive/openapi.generated.js +77 -0
  195. package/dist/providers/drive/safety.js +90 -0
  196. package/dist/providers/drive/skill.generated.js +2 -6
  197. package/dist/providers/drive/tools.js +1290 -0
  198. package/dist/providers/forms/api.js +71 -0
  199. package/dist/providers/forms/index.d.ts +1 -12
  200. package/dist/providers/forms/index.js +49 -1145
  201. package/dist/providers/forms/lib/constants.d.ts +14 -0
  202. package/dist/providers/forms/lib/constants.js +19 -0
  203. package/dist/providers/forms/lib/hatch.js +72 -0
  204. package/dist/providers/forms/openapi.generated.js +23 -0
  205. package/dist/providers/forms/safety.js +34 -0
  206. package/dist/providers/forms/skill.generated.js +2 -8
  207. package/dist/providers/forms/tools.js +1024 -0
  208. package/dist/providers/github/api.js +150 -0
  209. package/dist/providers/github/index.d.ts +4 -5
  210. package/dist/providers/github/index.js +30 -87
  211. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  212. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  213. package/dist/providers/github/lib/discovery.js +132 -0
  214. package/dist/providers/github/lib/operations.js +58 -0
  215. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  216. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  217. package/dist/providers/github/openapi.generated.js +1216 -0
  218. package/dist/providers/github/safety.js +216 -0
  219. package/dist/providers/github/skill.generated.js +2 -5
  220. package/dist/providers/github/tools.js +506 -0
  221. package/dist/providers/gmail/api.js +114 -0
  222. package/dist/providers/gmail/index.d.ts +1 -12
  223. package/dist/providers/gmail/index.js +73 -1621
  224. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  225. package/dist/providers/gmail/lib/constants.js +16 -0
  226. package/dist/providers/gmail/lib/index.js +173 -0
  227. package/dist/providers/gmail/lib/schemas.js +176 -0
  228. package/dist/providers/gmail/lib/threading.js +120 -0
  229. package/dist/providers/gmail/openapi.generated.js +92 -0
  230. package/dist/providers/gmail/safety.js +21 -0
  231. package/dist/providers/gmail/skill.generated.js +2 -6
  232. package/dist/providers/gmail/tools.js +1435 -0
  233. package/dist/providers/overflow/api.js +1008 -0
  234. package/dist/providers/overflow/index.d.ts +1 -17
  235. package/dist/providers/overflow/index.js +60 -1488
  236. package/dist/providers/overflow/skill.generated.js +2 -5
  237. package/dist/providers/overflow/tools.js +873 -0
  238. package/dist/providers/planning-center/api.js +467 -0
  239. package/dist/providers/planning-center/index.d.ts +4 -35
  240. package/dist/providers/planning-center/index.js +69 -2445
  241. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  242. package/dist/providers/planning-center/lib/constants.js +83 -0
  243. package/dist/providers/planning-center/lib/discovery.js +40 -0
  244. package/dist/providers/planning-center/lib/guide.js +39 -0
  245. package/dist/providers/planning-center/lib/json-api.js +83 -0
  246. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  247. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  248. package/dist/providers/planning-center/safety.js +188 -0
  249. package/dist/providers/planning-center/skill.generated.js +2 -27
  250. package/dist/providers/planning-center/tools.js +1010 -0
  251. package/dist/providers/sheets/api.js +133 -0
  252. package/dist/providers/sheets/index.d.ts +4 -16
  253. package/dist/providers/sheets/index.js +61 -1172
  254. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  255. package/dist/providers/sheets/lib/constants.js +14 -0
  256. package/dist/providers/sheets/lib/hatch.js +163 -0
  257. package/dist/providers/sheets/lib/requests.js +105 -0
  258. package/dist/providers/sheets/lib/schemas.js +138 -0
  259. package/dist/providers/sheets/openapi.generated.js +30 -0
  260. package/dist/providers/sheets/safety.js +27 -0
  261. package/dist/providers/sheets/skill.generated.js +2 -7
  262. package/dist/providers/sheets/tools.js +734 -0
  263. package/dist/providers/slides/api.js +147 -0
  264. package/dist/providers/slides/index.d.ts +2 -10
  265. package/dist/providers/slides/index.js +48 -2555
  266. package/dist/providers/slides/lib/constants.d.ts +11 -0
  267. package/dist/providers/slides/lib/constants.js +11 -0
  268. package/dist/providers/slides/lib/requests.js +60 -0
  269. package/dist/providers/slides/lib/schemas.js +565 -0
  270. package/dist/providers/slides/openapi.generated.js +18 -0
  271. package/dist/providers/slides/skill.generated.js +2 -6
  272. package/dist/providers/slides/tools.js +1968 -0
  273. package/dist/providers/stripe/api.js +401 -0
  274. package/dist/providers/stripe/index.d.ts +5 -27
  275. package/dist/providers/stripe/index.js +74 -210
  276. package/dist/providers/stripe/lib/config.d.ts +4 -0
  277. package/dist/providers/stripe/lib/config.js +2 -0
  278. package/dist/providers/stripe/openapi.generated.js +4 -3
  279. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  280. package/dist/providers/stripe/skill.generated.js +2 -11
  281. package/dist/providers/stripe/tools.js +77 -0
  282. package/dist/providers/tithely/api.js +531 -0
  283. package/dist/providers/tithely/index.d.ts +17 -0
  284. package/dist/providers/tithely/index.js +86 -965
  285. package/dist/providers/tithely/skill.generated.js +2 -5
  286. package/dist/providers/tithely/tools.js +426 -0
  287. package/dist/providers/vercel/api.js +551 -0
  288. package/dist/providers/vercel/index.d.ts +9 -25
  289. package/dist/providers/vercel/index.js +66 -260
  290. package/dist/providers/vercel/lib/config.d.ts +2 -0
  291. package/dist/providers/vercel/lib/config.js +2 -0
  292. package/dist/providers/vercel/lib/index.js +117 -0
  293. package/dist/providers/vercel/lib/logs.js +100 -0
  294. package/dist/providers/vercel/lib/pin.js +270 -0
  295. package/dist/providers/vercel/openapi.generated.js +10 -5
  296. package/dist/providers/vercel/{value-safety.js → safety.js} +247 -38
  297. package/dist/providers/vercel/skill.generated.js +2 -7
  298. package/dist/providers/vercel/tools.js +642 -0
  299. package/dist/redaction-identity.js +47 -0
  300. package/dist/redaction-marker.js +125 -0
  301. package/dist/registry.d.ts +21 -15
  302. package/dist/registry.js +409 -376
  303. package/dist/routes/access-tokens.js +1 -1
  304. package/dist/routes/actor-labels.js +1 -1
  305. package/dist/routes/connect.js +1 -1
  306. package/dist/routes/dispatch.js +103 -0
  307. package/dist/routes/mcp.js +170 -79
  308. package/dist/routes/oauth.js +3 -1
  309. package/dist/routes/operator.js +2 -2
  310. package/dist/routes/shared.d.ts +5 -4
  311. package/dist/routes/shared.js +244 -177
  312. package/dist/routes/skills.js +10 -8
  313. package/dist/routes/ui-config.js +27 -3
  314. package/dist/routes/ui-data.js +21 -20
  315. package/dist/routes/ui.js +1 -1
  316. package/dist/runtime/call-admission.js +0 -26
  317. package/dist/runtime/call-entry.js +30 -0
  318. package/dist/runtime/call.js +556 -0
  319. package/dist/runtime/connector-scope.js +7 -0
  320. package/dist/runtime/credential-probe.js +34 -0
  321. package/dist/runtime/executor.js +40 -0
  322. package/dist/runtime/native-storage.js +63 -0
  323. package/dist/runtime/registry.js +27 -0
  324. package/dist/runtime/request-scope.js +72 -0
  325. package/dist/runtime/run.js +15 -7
  326. package/dist/runtime/shared-read.js +34 -5
  327. package/dist/runtime/storage.js +34 -21
  328. package/dist/sent-secrets.d.ts +194 -37
  329. package/dist/sent-secrets.js +1743 -340
  330. package/dist/server.js +5 -56
  331. package/dist/skills.js +322 -222
  332. package/dist/sqlite.js +15 -14
  333. package/dist/storage/d1-copy.js +255 -0
  334. package/dist/storage/d1-driver.js +15 -0
  335. package/dist/storage/keys.js +28 -0
  336. package/dist/storage/sql-driver.js +88 -0
  337. package/dist/storage/sql-native.js +544 -0
  338. package/dist/storage/sql-schema.d.ts +6 -0
  339. package/dist/storage/sql-schema.js +15 -0
  340. package/dist/storage/sql.d.ts +14 -20
  341. package/dist/storage/sql.js +29 -535
  342. package/dist/timeout.js +0 -26
  343. package/dist/tool-safety.js +20 -10
  344. package/dist/types.d.ts +7 -109
  345. package/dist/upward.js +3 -0
  346. package/dist/usage-guide.js +3 -1
  347. package/dist/validate.d.ts +4 -2
  348. package/dist/validate.js +86 -9
  349. package/dist/version.d.ts +1 -1
  350. package/dist/version.js +1 -1
  351. package/dist/worker.js +312 -292
  352. package/dist/workspace-subject.js +5 -1
  353. package/dist/write-outcome.js +454 -34
  354. package/documentation/README.md +27 -7
  355. package/documentation/architecture.md +2547 -226
  356. package/documentation/auth.md +821 -98
  357. package/documentation/code-mode.md +49 -16
  358. package/documentation/deploying.md +164 -20
  359. package/documentation/hosted-mcp-migration.md +460 -0
  360. package/documentation/integrating.md +129 -144
  361. package/documentation/meta-tools.md +409 -32
  362. package/documentation/operating.md +27 -3
  363. package/documentation/operator-tests.md +3 -0
  364. package/documentation/operator-ui.md +68 -45
  365. package/documentation/provider-auth-migration.md +16 -63
  366. package/documentation/provider-migration-0.29.md +10 -5
  367. package/documentation/provider-migration-0.35.md +975 -0
  368. package/documentation/providers.md +965 -0
  369. package/examples/worker/AGENTS.md +23 -9
  370. package/examples/worker/README.md +254 -135
  371. package/examples/worker/alchemy.run.ts +116 -0
  372. package/examples/worker/gitignore +10 -0
  373. package/examples/worker/src/connecta.config.ts +23 -21
  374. package/examples/worker/wrangler.jsonc +14 -5
  375. package/guides/connecting-agents.md +157 -0
  376. package/guides/how-it-works.md +156 -0
  377. package/guides/safety-and-trust.md +153 -0
  378. package/package.json +27 -46
  379. package/templates/node/.env.example +3 -0
  380. package/templates/node/README.md +22 -2
  381. package/templates/node/docker-compose.yml +1 -0
  382. package/templates/node/package.json +3 -2
  383. package/templates/node/src/connecta.config.ts +8 -0
  384. package/dist/catalog-drift.d.ts +0 -138
  385. package/dist/catalog-drift.js +0 -578
  386. package/dist/providers/_shared/request-token.js +0 -83
  387. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  388. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  389. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  390. package/dist/providers/basecamp/index.d.ts +0 -45
  391. package/dist/providers/basecamp/index.js +0 -997
  392. package/dist/providers/basecamp/skill.generated.js +0 -9
  393. package/dist/providers/cloudflare/rest.d.ts +0 -37
  394. package/dist/providers/cloudflare/rest.js +0 -1097
  395. package/dist/providers/github/hosted.js +0 -218
  396. package/dist/providers/github/rest.js +0 -321
  397. package/dist/providers/infisical/index.d.ts +0 -7
  398. package/dist/providers/infisical/index.js +0 -713
  399. package/dist/providers/infisical/skill.generated.js +0 -8
  400. package/dist/providers/intercom/index.d.ts +0 -24
  401. package/dist/providers/intercom/index.js +0 -121
  402. package/dist/providers/intercom/skill.generated.js +0 -8
  403. package/dist/providers/linear/index.d.ts +0 -55
  404. package/dist/providers/linear/index.js +0 -537
  405. package/dist/providers/linear/skill.generated.js +0 -8
  406. package/dist/providers/mixpanel/index.d.ts +0 -59
  407. package/dist/providers/mixpanel/index.js +0 -472
  408. package/dist/providers/mixpanel/operations.js +0 -20
  409. package/dist/providers/mixpanel/rest.js +0 -603
  410. package/dist/providers/mixpanel/skill.generated.js +0 -10
  411. package/dist/providers/mixpanel/value-safety.js +0 -16
  412. package/dist/providers/notion/index.d.ts +0 -67
  413. package/dist/providers/notion/index.js +0 -368
  414. package/dist/providers/notion/openapi.generated.js +0 -75
  415. package/dist/providers/notion/rest.d.ts +0 -24
  416. package/dist/providers/notion/rest.js +0 -1226
  417. package/dist/providers/notion/skill.generated.js +0 -11
  418. package/dist/providers/notion/value-safety.js +0 -56
  419. package/dist/providers/revenuecat/index.d.ts +0 -51
  420. package/dist/providers/revenuecat/index.js +0 -697
  421. package/dist/providers/revenuecat/skill.generated.js +0 -11
  422. package/dist/providers/stripe/rest.d.ts +0 -14
  423. package/dist/providers/stripe/rest.js +0 -402
  424. package/dist/providers/vercel/rest.d.ts +0 -20
  425. package/dist/providers/vercel/rest.js +0 -1020
  426. package/dist/providers/wispr-flow/index.d.ts +0 -14
  427. package/dist/providers/wispr-flow/index.js +0 -117
  428. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  429. /package/dist/providers/github/{key.js → lib/key.js} +0 -0
@@ -175,6 +175,9 @@ updates run only through `workflow_dispatch`.
175
175
  On a matching Linux runner, `pnpm install --frozen-lockfile`, install Chromium with the command above,
176
176
  then run `pnpm run test:browser:snapshots`. The normal command is
177
177
  `pnpm run test:browser`. Missing baselines fail CI; retries cannot bless them.
178
+ Visual comparisons run in their own Playwright project without retries, so a
179
+ mismatch fails on its first attempt. When any attempt fails, CI uploads
180
+ the HTML report, actual/expected/diff images and traces as `playwright-report`.
178
181
  Set `OPERATOR_VISUAL_INSPECT=1` to retain local screenshots under ignored
179
182
  `test-results/` for inspection, without updating committed baselines.
180
183
 
@@ -42,15 +42,15 @@ No select menu displays configuration. Copy is short labels; a failure names
42
42
  what to do next in one or two sentences and never quotes a route's or
43
43
  downstream's text.
44
44
 
45
- | Path | Page | Who |
46
- | ------------------ | ------------------------------------------------------ | ---------- |
47
- | `/` | Overview (a member gets the member page) | Maintainer |
48
- | `/endpoints` | Endpoints; `#mcp/<pool>` opens that row | Maintainer |
49
- | `/connectors` | Connectors list; `?view=matrix` for the matrix | Maintainer |
50
- | `/connectors/<id>` | Connector detail; `#tools`, `#connection`, `#activity` | Maintainer |
51
- | `/activity` | Activity | Maintainer |
52
- | `/tokens` | Tokens, when token management is open to the viewer | Maintainer |
53
- | `/settings` | Settings | Maintainer |
45
+ | Path | Page | Who |
46
+ | ------------------ | ------------------------------------------------------------ | ---------- |
47
+ | `/` | Overview (a member gets the member page) | Maintainer |
48
+ | `/endpoints` | Endpoints; `#mcp/<pool>` opens that row | Maintainer |
49
+ | `/connectors` | Connectors list; `?view=matrix` for the matrix | Maintainer |
50
+ | `/connectors/<id>` | Connector detail; `#tools`, `#connection`, `#activity` | Maintainer |
51
+ | `/activity` | Activity | Maintainer |
52
+ | `/tokens` | Tokens, when agents are declared or token management is open | Maintainer |
53
+ | `/settings` | Settings | Maintainer |
54
54
 
55
55
  `/access` redirects to `/endpoints`, `/tools` to `/connectors`, and `/config`
56
56
  to `/settings`, replacing the history entry. Connector hashes `#config`,
@@ -109,6 +109,10 @@ instead of "0 tools".
109
109
 
110
110
  ### Endpoints
111
111
 
112
+ Pool endpoint rows show the effective surface (`meta` or `native`) and whether
113
+ code is on. These are read-only facts from deployment configuration; change
114
+ `surface` and `executeCode` in deployment code.
115
+
112
116
  One row each for `/mcp` and every pool: the path, a read-only pill on a
113
117
  read-only endpoint, a copyable URL, who can use it, its connectors as colored
114
118
  monograms (four, then "+N"), its tool count over a read and write bar, and a
@@ -192,7 +196,7 @@ tabs:
192
196
  - **Connection.** An Authentication card (mode, OAuth client mechanism, who
193
197
  manages it, OAuth actions, and the credential card with masked last four,
194
198
  field states, and Replace, Test and Remove); a Diagnostics card of tiles
195
- (catalog age, last call, drift counts) with a fix prompt beside each
199
+ (catalog age and last call) with a fix prompt beside each
196
200
  problem; and a Configuration card. Its badges name the kind (Remote MCP,
197
201
  HTTP API or Custom), provider, auth scope, endpoint host and usage guide.
198
202
  The auth row names the mode and draws each auth fact as a mono badge
@@ -204,29 +208,12 @@ tabs:
204
208
  - **Activity.** The [Activity](#activity) page for that connector, without
205
209
  connector chips or monograms.
206
210
 
207
- #### Read catalog drift
208
-
209
- The connector's drift panel reports the last catalog comparison in this
210
- runtime and identity partition. It never lists tool names or schemas. A
211
- personal OAuth refresh belongs to that user; another user or endpoint subject
212
- does not inherit it. A runtime restart or bounded observation eviction resets
213
- the report until another listing is served.
214
-
215
- “No catalog refresh yet” means this partition has no observation. “No reviewed
216
- baseline” means a listing was observed without a reviewed classification.
217
- “Matches the reviewed manifest” requires a baseline, successful verification,
218
- no differences, and schema pins for every live reviewed tool. “Schemas not
219
- pinned” and “Partial schema coverage” describe missing review evidence; they
220
- are not clean schema comparisons. “Schema verification unavailable” replaces
221
- an earlier successful report if hashing fails. Known differences remain visible
222
- alongside coverage or verification limits. Each operator refresh returns the
223
- comparison from the catalog it just loaded, including hashing failures and
224
- schema changes, without another downstream status probe.
225
-
226
- The unserved count excludes reviewed names explicitly marked optional for
227
- plan, feature, or permission gating. Present optional tools still participate
228
- in annotation and schema comparisons. Dropped tool names are counted even
229
- without a baseline, and do not establish one.
211
+ #### Read catalog changes
212
+
213
+ Catalog refresh activity reports added, removed, and changed tool counts within
214
+ its identity partition. The UI no longer compares tools with a release-reviewed
215
+ manifest or shows schema-pin coverage. Check live annotations and deployment
216
+ classification in the catalog when reviewing exposure.
230
217
 
231
218
  ### Settings
232
219
 
@@ -260,9 +247,13 @@ editing controls. An empty section is not drawn.
260
247
 
261
248
  ### Tokens
262
249
 
263
- One row per agent declared in code, in `GET /ui/access-tokens` order: agent
264
- mark and name, pools as chips, a state pill (No token, Issued or Revoked), the
265
- issue or revoke date, and last seen ("never" when null). The heading note
250
+ One row per agent declared in code, including OIDC-only agents when the token
251
+ module is absent: agent mark and name, supported credentials (Agent token,
252
+ Vercel OIDC, or both), pools as chips, a token state pill (Not configured, No
253
+ token, Issued or Revoked), the issue or revoke date, and last seen ("never"
254
+ when unknown). Not configured means the managed token module is absent and
255
+ has no token controls; No token means that module has an unissued slot.
256
+ An OIDC binding works independently of the token's state. The heading note
266
257
  reads "Declared in code"; nothing creates or renames an agent. Narrow screens
267
258
  stack each row into a card.
268
259
 
@@ -412,18 +403,36 @@ The maintainer view carries:
412
403
  code or credential material.
413
404
  - `root`: plain `/mcp`, its `readOnly`, and its `maintainers`, people only.
414
405
  - `pools`: every declared pool with `humanPath` (`/mcp/<name>`), `agentPath`
415
- (`/agent/<name>`), `readOnly`, `owner` (the Workspace address its agents act
406
+ (`/agent/<name>`), `readOnly`, effective `surface` (`meta` or `native`),
407
+ `executeCode` (whether code is enabled), `owner` (the Workspace address its agents act
416
408
  as), its declared `tools` (never intersected; no `requireReadOnly` is ever
417
409
  true), and its `members`, agents as `{ kind: "agent", name }`. Every listed
418
410
  person carries a `label` from the same directory lookup activity actor
419
411
  labels use, on an interactive read only, and `null` without a directory
420
412
  (Cloudflare Access) or an entry. An open deployment's anonymous maintainer
421
413
  reads every `owner` as `null`.
422
- - `agents`: every agent declared in code, with its pools, its token slot
423
- (`state`, `issuedAt`, `revokedAt`, `revision`) exactly as
424
- `GET /ui/access-tokens` lists it, and `lastSeenAt`, the newest visible
425
- activity row recorded for that agent, or `null` when activity is off or
426
- none is visible. A slot read that fails answers 503 rather than drop agents.
414
+ - `agents`: every agent declared in code, in deployment order, with its pools
415
+ and `credentialTypes` (`access_token`, `vercel_oidc`, or both). These are
416
+ immutable deployment descriptions: the token kind requires the managed
417
+ access-token module, and OIDC requires that agent's own workload binding.
418
+ They grant nothing. `token` is `null` when the token module is absent;
419
+ otherwise its slot (`state`, `issuedAt`, `revokedAt`, `revision`) is exactly
420
+ what `GET /ui/access-tokens` lists, including an unissued `state: "none"`.
421
+ A failed or incomplete slot read answers 503 rather than drop agents.
422
+ `lastSeenAt` is the newest sampled successful agent-endpoint admission or
423
+ visible historical activity timestamp, or `null` when unknown or withheld.
424
+ Admission means credential verification and membership in that declared pool
425
+ succeeded; it does not promise a completed call. Invalid credentials,
426
+ refused/undeclared pools and human routes record nothing. The observation
427
+ stores only the declared name and timestamp, independently of activity.
428
+ Admission observations sample at most once per minute: a valid stored time
429
+ less than 60 seconds behind the candidate skips the write, and an older
430
+ candidate never moves the time backwards. This is minute-level admission
431
+ evidence, not an exact timestamp for every request. Each observation uses at
432
+ most two atomic storage attempts under the smaller of the configured probe
433
+ deadline and 500 ms, within the request lifetime. Failure, timeout or
434
+ contention can lose a sample; a later eligible admission can try again.
435
+ Observation never refuses admission or retries MCP or tool work.
427
436
  - `matrix`: a cell per connector for plain `/mcp` (`pool: null`) and for each
428
437
  pool that serves it, with that endpoint's tool names or `"all"` and
429
438
  `runsAs`. A Workspace connector with a subject mapping is
@@ -447,10 +456,12 @@ The maintainer view carries:
447
456
  mechanism when known. Static and unobserved catalogs have a null age;
448
457
  persisted catalogs retain their original fetch time.
449
458
  - `live.activity`: available, unconfigured, forbidden, or unavailable history.
450
- Last-call and last-seen lookups need the activity permission and read gate,
459
+ Historical last-call and last-seen lookups need the activity permission and read gate,
451
460
  scan up to 1,000 recent rows, filter connector/tool grants, restrict personal
452
461
  connectors to the caller's activity identity, and copy a validated timestamp
453
- and outcome only. A null means unknown or absent in that window.
462
+ and outcome only. Admission last-seen reads require a maintainer and honor
463
+ the configured activity read gate, including when history is unavailable;
464
+ they work with no activity module. A null means unknown or withheld.
454
465
  - `connectors: []`.
455
466
 
456
467
  The member view is exactly that member's projection: `config`,
@@ -544,7 +555,14 @@ duplicate summary, token, config, detail or body reads. The passive retry schedu
544
555
  stays bounded and does not reset its budget on a deadline. Retry remains available
545
556
  during recovery configuration loading and supersedes and aborts the old cycle;
546
557
  identity changes, navigation and connector-page unmount also cancel it. Navigation
547
- that cancels pending data schedules a bounded reread for the destination. Failed reads retry after
558
+ that cancels pending data schedules a bounded reread for the destination. A scoped OAuth poll publishes only its connector's detail and live row. It does
559
+ not supersede a pending full admission or catalog/auth cycle, release its
560
+ recovery guard, or clear its deadline. That full cycle still publishes other
561
+ connectors as they settle and decides recovery, retaining the newer polled row
562
+ even when its summary was pending or its deadline exposed Retry. Only a newer
563
+ full cycle, mutation, identity change, or sign-out fences older work. Owed
564
+ publication neither spends nor resets the failed-read retry budget and adds no
565
+ timer. Failed reads retry after
548
566
  2, 2, 4, and 8 seconds. Refusals preserve the throttle and retry budget. After
549
567
  those four automatic retries, a focus return can request one more read after
550
568
  the eight-second backoff, without replenishing the automatic budget. Retry
@@ -601,6 +619,11 @@ names, descriptions or schemas enter the event. Private catalog changes require
601
619
  a matching principal owner even when the connector uses shared auth. Empty credential declarations
602
620
  report `credential_required` before running a connector status or catalog probe.
603
621
 
622
+ Activity label resolvers receive an optional `AbortSignal`. Pass it to user-directory
623
+ fetches and stop work when it aborts: the reader has left or the label lookup
624
+ budget has expired. Clerk label lookups follow the same lifetime and discard
625
+ late answers after cancellation.
626
+
604
627
  ## Contributor reference
605
628
 
606
629
  ### Source and tests
@@ -1,6 +1,11 @@
1
1
  # Provider auth migration
2
2
 
3
- Use this upgrade guide when moving a Stripe, Notion, Vercel, or Cloudflare
3
+ Hosted selections described in this historical migration are now removed.
4
+ For Stripe, Vercel, Cloudflare, Notion, Mixpanel, and GitHub hosted connections,
5
+ use the [current hosted MCP migration guide](./hosted-mcp-migration.md).
6
+ The API migrations below remain applicable.
7
+
8
+ Use this upgrade guide when moving a Stripe, Vercel, or Cloudflare
4
9
  deployment from 0.30 to 0.31, where `auth` selects each provider's
5
10
  implementation.
6
11
  [Deployment upgrades](./deploying.md#upgrade-an-existing-deployment) cover other
@@ -13,6 +18,9 @@ uses one implementation: configure two ids for both.
13
18
 
14
19
  ## Stripe
15
20
 
21
+ For current API-key setup, use [Maintained provider setup](./providers.md#stripe).
22
+ For the 0.35 argument and paging changes, use [Stripe surface migration](./provider-migration-0.35.md#stripe).
23
+
16
24
  ## Choose OAuth or an API key
17
25
 
18
26
  Import `stripe` from `@zackbart/connecta/providers/stripe`. Choose one of two setup paths:
@@ -84,7 +92,8 @@ or a generated one as `Idempotency-Key` and return it (DELETE sends none).
84
92
  Caller-supplied keys may contain up to 255 characters. An ambiguous POST write
85
93
  also returns the key in `uncertainCall.recovery.idempotencyKey`, including when
86
94
  the call deadline interrupts it. See [argument recovery](./meta-tools.md#argument-recovery)
87
- before retrying.
95
+ before retrying: a custom connector that wraps or composes Stripe calls gets
96
+ the key as a diagnostic only, never advice to reuse it.
88
97
  Every request, v1 and v2, sends `Stripe-Version: 2026-09-30.endive`, the
89
98
  version of the pinned index, whatever the account's default API version, so
90
99
  response shapes and accepted parameters follow that version. Check fields
@@ -100,56 +109,9 @@ connector need an OAuth connector beside it. Read the connector runtime guide wi
100
109
 
101
110
  ## Notion
102
111
 
103
- Every `notion()` call must now name `auth`. 0.30 defaulted to hosted MCP and
104
- selected the REST interface with `surface: "api"`; `surface` is gone:
105
-
106
- ```ts
107
- connectors: [
108
- notion("notion", { purpose: "Workspace content as the signed-in user", auth: { type: "oauth" } }),
109
- notion("notion_bot", { purpose: "Internal integration content", auth: { type: "token" } }),
110
- ]
111
- ```
112
-
113
- | 0.30 configuration | Now |
114
- | ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
115
- | No `surface`, or `surface: "mcp"` | `auth: { type: "oauth" }`. Same endpoint, reviewed catalog, grant, and optional `callAdmission`. |
116
- | `surface: "api"` | `auth: { type: "token" }`. The integration token stored for the same connector id carries over; run its Test action. |
117
- | `credentialLabel` or `defaultPageSize` | Token only, as before. Under OAuth they are refused by name at construction. |
118
- | `integration_search`, `_get_page`, `_get_page_content`, `_get_data_source_schema`, `_query_data_source`, `_create_page`, `_append_blocks` | Unchanged names and contracts. `integration_append_blocks` also takes `checklist`. |
119
- | `integration_get_database` | `notion_api_read` `GET /v1/databases/{database_id}`. |
120
- | `integration_get_page_property` | `notion_api_read` `GET /v1/pages/{page_id}/properties/{property_id}`; `truncated_properties` names it. |
121
- | `integration_list_users`, `integration_get_self` | `notion_api_read` `GET /v1/users` or `GET /v1/users/me`. |
122
- | `integration_list_comments`, `integration_add_comment` | `notion_api_read` `GET /v1/comments`; `notion_api_write` `POST /v1/comments`. |
123
- | `integration_update_page_properties`, `integration_trash_page` | `notion_api_write` `PATCH /v1/pages/{page_id}` with `properties`, or `in_trash` to trash or restore. |
124
-
125
- Both auth variants accept optional `callAdmission`. On a token connector it
126
- replaces the whole default policy of 180 calls per minute and 3 concurrent
127
- per runtime. Malformed policies throw at construction. Notion's
128
- [request limits](https://developers.notion.com/reference/request-limits) allow
129
- 600 requests per minute per connection on Business and Enterprise and 180 on
130
- other plans, with a separate workspace-wide limit shared by all connections.
131
- Account for other runtimes and tools that make multiple HTTP requests when
132
- choosing an override.
133
-
134
- The token connector gains Connecta's generic REST tools over Notion's pinned
135
- API index (`notion_api_search`, `notion_api_details`, `notion_api_read`,
136
- `notion_api_write`), so every public operation is reachable with the bot's
137
- token: views, page moves and Markdown, meeting notes, custom agents and
138
- sessions, file uploads by `external_url`, and data source changes. Every call
139
- is checked against the index before it is sent, and results arrive as
140
- `{ status, data, page? }`. The read-only POST queries (search, data source,
141
- meeting notes, agents, sessions, and session events) use `notion_api_read`;
142
- `page.in: "body"` says their cursor goes back in the body. Notion's OAuth token
143
- endpoints and multipart file sends are refused. The 0.29 reconciliation table
144
- and the `surface: "api"` complement rules no longer apply to Notion.
145
-
146
- Lost per mode. A token connector acts as the integration bot, never as a
147
- person, and has none of the hosted MCP's search across connected apps, page
148
- duplication, team and skill search, attachment downloads, or page-to-skill
149
- conversion. An OAuth connector acts as the user, and has none of the generic
150
- REST tools or the `integration_*` projections and authoring helpers. Configure
151
- both ids when a deployment needs both; a failed call is never retried on the
152
- other. Read the connector runtime guide with `connecta.skill("connector:<id>")` in `execute_code` for its usage conventions.
112
+ The maintained Notion API provider is removed in 0.35. See the
113
+ [provider removal migration](./provider-migration-0.35.md#remove-infisical-notion-and-mixpanel)
114
+ and use generic `remoteMcp()` for the hosted server.
153
115
 
154
116
  ## Vercel
155
117
 
@@ -314,16 +276,7 @@ one; read or rotate withheld secrets in the vendor's dashboard.
314
276
  Failures of credential-bearing operations keep Stripe's type, code, and
315
277
  param but not its message. Create client-side sessions and links from your
316
278
  own server code.
317
- - **Notion** REST results and error text withhold the whole query and
318
- fragment of canonical Notion file links, including links embedded in
319
- Markdown and async task results. External proxy URLs keep their bytes;
320
- AWS and Google signing-parameter values are withheld at any host. Writes
321
- carrying the plain or encoded `[redacted]` placeholder in a Notion file
322
- link's own query or fragment are refused before dispatch. See the
323
- connector runtime guide through `connecta.skill("connector:<id>")` in `execute_code` for recognized hosts and scanning limits. Credential-named fields,
324
- including database properties named like credentials, read as
325
- `"[redacted]"`. Failures of the OAuth, file upload, bot user, and agent
326
- operations keep Notion's code but not its message.
279
+
327
280
  - **Vercel** replaces environment values with `"[redacted]"` instead of
328
281
  dropping the field, and withholds Vercel's error text for every reviewed
329
282
  operation and every operation whose request takes a credential-named
@@ -341,4 +294,4 @@ one; read or rotate withheld secrets in the vendor's dashboard.
341
294
  [Decision 0005](https://github.com/zackbart/connecta/blob/main/decisions/0005-auth-selects-implementation.md)
342
295
  explains why auth selects the implementation. Maintained provider source
343
296
  skills and review tables live under `src/providers/` in the repository;
344
- `src/providers/vercel/value-safety.ts` owns Vercel's reviewed table.
297
+ `src/providers/vercel/safety.ts` owns Vercel's reviewed table.
@@ -1,12 +1,17 @@
1
1
  # Notion, Vercel and Cloudflare migration for 0.29
2
2
 
3
+ Hosted selections described in this historical migration are now removed.
4
+ For Stripe, Vercel, Cloudflare, Notion, Mixpanel, and GitHub hosted connections,
5
+ use the [current hosted MCP migration guide](./hosted-mcp-migration.md).
6
+ The API migrations below remain applicable.
7
+
3
8
  Use this upgrade guide for an existing deployment.
4
9
  [Deployment upgrades](./deploying.md#upgrade-an-existing-deployment) cover other
5
10
  version changes; [integrating services](./integrating.md) covers new connectors.
6
11
  [The agent index](./README.md) routes package maintenance separately.
7
12
 
8
- This is the Phase 1 item 5d migration input for [Phase 5 release #709](https://github.com/zackbart/connecta/issues/709).
9
- Deploy it with the consolidated 0.29 release, not while the rework is in progress.
13
+ This was the Phase 1 item 5d migration input for [Phase 5 release #709](https://github.com/zackbart/connecta/issues/709),
14
+ which shipped as 0.29.0.
10
15
  Deployments that use Notion or Cloudflare must check their actual grants and
11
16
  connector ids in deployment configuration before that release.
12
17
  The provider audit establishes available auth modes, not production OAuth grants.
@@ -14,7 +19,7 @@ The provider audit establishes available auth modes, not production OAuth grants
14
19
  Cloudflare's part of this guide is superseded: `cloudflare()` now selects its
15
20
  implementation by `auth` and its key connector is complete on its own. Follow
16
21
  the [provider auth migration](./provider-auth-migration.md#cloudflare) for
17
- Cloudflare; the Cloudflare lines below record the 0.29 transition only.
22
+ Cloudflare; the Cloudflare lines below record the transition shipped in 0.29.0 only.
18
23
 
19
24
  All three providers now default to hosted MCP. `surface: "api"` explicitly
20
25
  selects a REST complement and accepts only its API-specific options. The old
@@ -36,7 +41,7 @@ Notion has since moved to auth-selected implementations: `surface` is gone,
36
41
  and `auth: { type: "oauth" }` or `{ type: "token" }` selects hosted MCP or the
37
42
  REST connector. Upgrade with the
38
43
  [provider auth migration](./provider-auth-migration.md#notion); the rest of
39
- this paragraph records the 0.29 rules.
44
+ this paragraph records the rules shipped in 0.29.0.
40
45
  Notion preserves headless/internal-integration capabilities. Add explicit
41
46
  `surface: "api"` to retain that identity and migrate old REST names to
42
47
  `integration_*`, for example `search` to `integration_search`, `create_page`
@@ -62,7 +67,7 @@ Writable endpoints may run `execute`; `readOnly` endpoints refuse it.
62
67
 
63
68
  Vercel's `surface` and ownership rules were later replaced: `auth` now selects
64
69
  the implementation. See the [provider auth migration](./provider-auth-migration.md#vercel).
65
- The 0.29 Vercel guidance follows for history. For Vercel, authorize the owning teams in hosted OAuth, migrate discovery/logs,
70
+ The Vercel guidance shipped in 0.29.0 follows for history. For Vercel, authorize the owning teams in hosted OAuth, migrate discovery/logs,
66
71
  domain listing/adding, deployment cancellation and file uploads to live MCP
67
72
  schemas, and keep the independently authorized REST complement for value-safe
68
73
  project environment variables (including `upsert: false` create-only writes), domain verification/removal and deployment