@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
@@ -1,218 +0,0 @@
1
- import { ConnectorCallError } from "../../errors.js";
2
- import { target, workflowPath } from "./scope.js";
3
- // Exact reviewed ownership map. New upstream names, arguments and methods
4
- // require review before they can authenticate or dispatch.
5
- export const HOSTED_ROUTES = {
6
- get_file_contents: {
7
- verdict: "read",
8
- permissions: { "contents": "read" },
9
- keys: ["fields", "owner", "path", "ref", "repo", "sha"],
10
- },
11
- get_commit: {
12
- verdict: "read",
13
- permissions: { "contents": "read" },
14
- keys: ["detail", "owner", "page", "perPage", "repo", "sha"],
15
- },
16
- list_commits: {
17
- verdict: "read",
18
- permissions: { "contents": "read" },
19
- keys: ["author", "fields", "owner", "page", "path", "perPage", "repo", "sha", "since", "until"],
20
- },
21
- list_branches: { verdict: "read", permissions: { "contents": "read" }, keys: ["owner", "page", "perPage", "repo"] },
22
- get_tag: { verdict: "read", permissions: { "contents": "read" }, keys: ["owner", "repo", "tag"] },
23
- list_tags: { verdict: "read", permissions: { "contents": "read" }, keys: ["owner", "page", "perPage", "repo"] },
24
- get_latest_release: { verdict: "read", permissions: { "contents": "read" }, keys: ["owner", "repo"] },
25
- get_release_by_tag: { verdict: "read", permissions: { "contents": "read" }, keys: ["owner", "repo", "tag"] },
26
- list_releases: {
27
- verdict: "read",
28
- permissions: { "contents": "read" },
29
- keys: ["fields", "owner", "page", "perPage", "repo"],
30
- },
31
- list_issues: {
32
- verdict: "read",
33
- permissions: { "issues": "read", "pull_requests": "read" },
34
- keys: [
35
- "after",
36
- "direction",
37
- "field_filters",
38
- "fields",
39
- "labels",
40
- "orderBy",
41
- "owner",
42
- "perPage",
43
- "repo",
44
- "since",
45
- "state",
46
- ],
47
- },
48
- issue_read: {
49
- verdict: "read",
50
- permissions: { "issues": "read" },
51
- keys: ["issue_number", "method", "owner", "page", "perPage", "repo"],
52
- methods: ["get", "get_comments", "get_labels"],
53
- },
54
- get_label: { verdict: "read", permissions: { "issues": "read" }, keys: ["name", "owner", "repo"] },
55
- list_pull_requests: {
56
- verdict: "read",
57
- permissions: { "pull_requests": "read" },
58
- keys: ["base", "direction", "fields", "head", "owner", "page", "perPage", "repo", "sort", "state"],
59
- },
60
- pull_request_read: {
61
- verdict: "read",
62
- permissions: { "pull_requests": "read", "contents": "read", "checks": "read", "statuses": "read" },
63
- keys: ["after", "method", "owner", "page", "perPage", "pullNumber", "repo"],
64
- methods: [
65
- "get",
66
- "get_diff",
67
- "get_status",
68
- "get_files",
69
- "get_commits",
70
- "get_review_comments",
71
- "get_reviews",
72
- "get_comments",
73
- "get_check_runs",
74
- ],
75
- },
76
- actions_list: {
77
- verdict: "read",
78
- permissions: { "actions": "read" },
79
- keys: ["method", "owner", "page", "perPage", "repo", "resource_id", "workflow_jobs_filter", "workflow_runs_filter"],
80
- methods: ["list_workflows", "list_workflow_runs", "list_workflow_jobs", "list_workflow_run_artifacts"],
81
- },
82
- actions_get: {
83
- verdict: "read",
84
- permissions: { "actions": "read" },
85
- keys: ["method", "owner", "repo", "resource_id"],
86
- methods: ["get_workflow", "get_workflow_run", "get_workflow_run_usage", "get_workflow_job"],
87
- },
88
- issue_write: {
89
- verdict: "destructive",
90
- permissions: { "issues": "write", "pull_requests": "write" },
91
- keys: [
92
- "assignees",
93
- "body",
94
- "duplicate_of",
95
- "issue_fields",
96
- "issue_number",
97
- "labels",
98
- "method",
99
- "milestone",
100
- "owner",
101
- "parent_issue_number",
102
- "parent_owner",
103
- "parent_repo",
104
- "repo",
105
- "state",
106
- "state_reason",
107
- "title",
108
- "type",
109
- ],
110
- methods: ["create", "update"],
111
- },
112
- add_issue_comment: {
113
- verdict: "write",
114
- permissions: { "issues": "write", "pull_requests": "write" },
115
- keys: ["body", "comment_id", "issue_number", "owner", "reaction", "repo"],
116
- },
117
- create_pull_request: {
118
- verdict: "write",
119
- permissions: { "pull_requests": "write" },
120
- keys: ["base", "body", "draft", "head", "maintainer_can_modify", "owner", "repo", "reviewers", "title"],
121
- },
122
- update_pull_request: {
123
- verdict: "destructive",
124
- permissions: { "pull_requests": "write" },
125
- keys: [
126
- "base",
127
- "body",
128
- "draft",
129
- "maintainer_can_modify",
130
- "owner",
131
- "pullNumber",
132
- "repo",
133
- "reviewers",
134
- "state",
135
- "title",
136
- ],
137
- },
138
- pull_request_review_write: {
139
- verdict: "destructive",
140
- permissions: { "pull_requests": "write" },
141
- keys: ["body", "commitID", "event", "method", "owner", "pullNumber", "repo", "threadId"],
142
- methods: ["create", "submit_pending", "delete_pending"],
143
- },
144
- create_branch: {
145
- verdict: "write",
146
- permissions: { "contents": "write" },
147
- keys: ["branch", "from_branch", "owner", "repo"],
148
- },
149
- create_or_update_file: {
150
- verdict: "destructive",
151
- permissions: { "contents": "write" },
152
- keys: ["allow_symlink_write", "branch", "content", "message", "owner", "path", "repo", "sha"],
153
- },
154
- delete_file: {
155
- verdict: "destructive",
156
- permissions: { "contents": "write" },
157
- keys: ["branch", "message", "owner", "path", "repo"],
158
- },
159
- push_files: {
160
- verdict: "destructive",
161
- permissions: { "contents": "write" },
162
- keys: ["branch", "files", "message", "owner", "repo"],
163
- },
164
- actions_run_trigger: {
165
- verdict: "destructive",
166
- permissions: { "actions": "write" },
167
- keys: ["inputs", "method", "owner", "ref", "repo", "run_id", "workflow_id"],
168
- methods: ["run_workflow", "rerun_workflow_run", "rerun_failed_jobs", "cancel_workflow_run"],
169
- },
170
- };
171
- export const HOSTED_CLASSIFICATION = {
172
- unlisted: "hide",
173
- tools: Object.fromEntries(Object.entries(HOSTED_ROUTES).map(([name, route]) => [name, route.verdict])),
174
- };
175
- export function hostedTarget(name, input, policy) {
176
- const route = Object.hasOwn(HOSTED_ROUTES, name) ? HOSTED_ROUTES[name] : undefined;
177
- if (!route)
178
- throw new ConnectorCallError("invalid_args", "This GitHub tool is not in the reviewed allowlist.");
179
- if (!input || typeof input !== "object" || Array.isArray(input))
180
- throw new ConnectorCallError("invalid_args", "Supply GitHub arguments as an object.");
181
- const args = input;
182
- const t = target(args.owner, args.repo);
183
- policy.scope(t, route.verdict !== "read");
184
- if (Object.keys(args).some((key) => !route.keys.includes(key)))
185
- throw new ConnectorCallError("invalid_args", "Unreviewed GitHub arguments are refused; use the reviewed tool schema.");
186
- if (route.methods && !route.methods.includes(String(args.method)))
187
- throw new ConnectorCallError("invalid_args", "This GitHub method is not in the reviewed allowlist.");
188
- // Secondary repositories and opaque review-thread IDs cannot choose a grant.
189
- if (args.parent_owner !== undefined ||
190
- args.parent_repo !== undefined ||
191
- args.threadId !== undefined ||
192
- args.comment_id !== undefined) {
193
- throw new ConnectorCallError("invalid_args", "Cross-repository parent references and opaque comment/thread IDs are not supported. Use the scoped repository operation.");
194
- }
195
- if (args.allow_symlink_write === true)
196
- throw new ConnectorCallError("invalid_args", "Symlink writes cannot establish a workflow-file boundary.");
197
- if (name === "create_pull_request" && (typeof args.head !== "string" || args.head.includes(":")))
198
- throw new ConnectorCallError("invalid_args", "Create pull requests from a branch in the target repository; cross-owner heads are not supported.");
199
- let workflows = false;
200
- if (["create_or_update_file", "delete_file"].includes(name))
201
- workflows = workflowPath(args.path);
202
- if (name === "push_files") {
203
- if (!Array.isArray(args.files) || args.files.length === 0 || args.files.length > 100)
204
- throw new ConnectorCallError("invalid_args", "Supply between 1 and 100 file changes.");
205
- for (const file of args.files) {
206
- if (!file ||
207
- typeof file !== "object" ||
208
- Array.isArray(file) ||
209
- Object.keys(file).some((key) => !["path", "content"].includes(key)))
210
- throw new ConnectorCallError("invalid_args", "Each file has only path and content fields.");
211
- workflows = workflowPath(file.path) || workflows;
212
- }
213
- }
214
- if (name === "get_file_contents" && args.path !== undefined && args.path !== "")
215
- workflowPath(args.path);
216
- policy.scope(t, route.verdict !== "read", workflows);
217
- return { target: t, permissions: { ...route.permissions, ...(workflows ? { workflows: "write" } : {}) } };
218
- }
@@ -1,321 +0,0 @@
1
- import { api } from "../../connectors/api.js";
2
- import { ConnectorCallError } from "../../errors.js";
3
- import { target } from "./scope.js";
4
- const text = (description) => ({ type: "string", minLength: 1, description });
5
- const ownerRepo = { owner: text("Configured repository owner."), repo: text("Repository name under that owner.") };
6
- const object = (properties, required = []) => ({
7
- type: "object",
8
- properties,
9
- required,
10
- additionalProperties: false,
11
- });
12
- const integer = (description) => ({ type: "integer", minimum: 1, description });
13
- const bool = (description) => ({ type: "boolean", description });
14
- const jsonObject = { type: "object", additionalProperties: true };
15
- const scopeRecord = object({
16
- org: { type: "string" },
17
- repo: { type: "string" },
18
- access: { type: "string", enum: ["read", "read-write"] },
19
- workflows: { type: "string", enum: ["write"] },
20
- }, ["access"]);
21
- const selector = object({
22
- org: text("Configured org scope."),
23
- repo: text("Exact owner/repo within configured scope."),
24
- });
25
- const repoPath = (t) => `/repos/${encodeURIComponent(t.owner)}/${encodeURIComponent(t.repo)}`;
26
- const row = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : {};
27
- function selectors(input, policy) {
28
- if (!Array.isArray(input) || input.length === 0 || input.length > 100)
29
- throw new ConnectorCallError("invalid_args", "Select between 1 and 100 configured scopes.");
30
- return input.map((item) => {
31
- const value = row(item);
32
- if ((value.org === undefined) === (value.repo === undefined))
33
- throw new ConnectorCallError("invalid_args", "Each selector names either org or repo.");
34
- if (value.org !== undefined) {
35
- const owner = policy.owner(value.org);
36
- const grant = policy.scopes.find((scope) => scope.org === owner);
37
- if (!grant)
38
- throw new ConnectorCallError("invalid_args", "This org is not configured for org-wide access.");
39
- return grant;
40
- }
41
- const parts = typeof value.repo === "string" ? value.repo.split("/") : [];
42
- const t = target(parts[0], parts.length === 2 ? parts[1] : undefined);
43
- const grant = policy.scope(t);
44
- return { repo: `${t.owner}/${t.repo}`, access: grant.access };
45
- });
46
- }
47
- function searchPartitions(scopes) {
48
- const orgs = new Set(scopes.flatMap((scope) => (scope.org ? [scope.org] : [])));
49
- const repos = new Map();
50
- for (const scope of scopes) {
51
- if (!scope.repo)
52
- continue;
53
- const [owner, repo] = scope.repo.split("/");
54
- if (orgs.has(owner))
55
- continue;
56
- if (!repos.has(owner))
57
- repos.set(owner, new Set());
58
- repos.get(owner).add(repo);
59
- }
60
- const partitions = [...orgs].sort().map((owner) => ({ id: `org:${owner}`, owner, qualifier: `org:${owner}` }));
61
- const result = [...partitions];
62
- for (const [owner, names] of [...repos].sort(([a], [b]) => a.localeCompare(b))) {
63
- const sorted = [...names].sort();
64
- for (let offset = 0; offset < sorted.length; offset += 5) {
65
- const chunk = sorted.slice(offset, offset + 5);
66
- result.push({
67
- id: chunk.map((repo) => `${owner}/${repo}`).join(","),
68
- owner,
69
- repos: chunk,
70
- qualifier: chunk.map((repo) => `repo:${owner}/${repo}`).join(" "),
71
- });
72
- }
73
- }
74
- if (result.length > 20)
75
- throw new ConnectorCallError("invalid_args", "Search fan-out exceeds 20 partitions. Select fewer scopes.");
76
- return result;
77
- }
78
- function resultTarget(item, kind) {
79
- if (kind === "repositories" || kind === "code") {
80
- const name = kind === "code" ? row(item.repository).full_name : item.full_name;
81
- const parts = typeof name === "string" ? name.split("/") : [];
82
- return target(parts[0], parts.length === 2 ? parts[1] : undefined);
83
- }
84
- let url;
85
- try {
86
- url = new URL(item.repository_url);
87
- }
88
- catch {
89
- throw new ConnectorCallError("connector_call_failed", "GitHub search omitted the repository binding.");
90
- }
91
- const match = /^\/repos\/([^/]+)\/([^/]+)$/.exec(url.pathname);
92
- if (url.origin !== "https://api.github.com" || !match || url.search || url.hash)
93
- throw new ConnectorCallError("connector_call_failed", "GitHub search returned an invalid repository binding.");
94
- return target(match[1], match[2]);
95
- }
96
- export function restConnector(id, auth, policy) {
97
- const scopedRequest = async (args, permissions, method, suffix, body, ctx) => {
98
- const t = target(args.owner, args.repo);
99
- policy.scope(t, true);
100
- const token = await auth.repo(t, permissions, ctx);
101
- const data = await auth.json({ method, path: `${repoPath(t)}${suffix}`, ...(body !== undefined ? { body } : {}) }, token, ctx);
102
- return data ?? { deleted: true };
103
- };
104
- const tools = [
105
- {
106
- name: "list_scopes",
107
- description: "List configured GitHub scopes and reachable repositories for one owner.",
108
- annotations: { readOnlyHint: true },
109
- inputSchema: object({
110
- owner: text("Configured owner; omit to return configuration without network access."),
111
- page: integer("Repository page, default 1, at most 1000."),
112
- per_page: { ...integer("Repositories per page, default 100."), maximum: 100 },
113
- }),
114
- outputSchema: object({
115
- acting_as: { type: "string" },
116
- scopes: { type: "array", items: scopeRecord },
117
- repositories: { type: "array", items: { type: "string" } },
118
- next_page: { type: ["integer", "null"] },
119
- }, ["acting_as", "scopes"]),
120
- async handler(args, ctx) {
121
- if (args.owner === undefined)
122
- return { acting_as: "GitHub App", scopes: policy.scopes };
123
- const owner = policy.owner(args.owner);
124
- const page = args.page ?? 1;
125
- const count = args.per_page ?? 100;
126
- if (page > 1000)
127
- throw new ConnectorCallError("invalid_args", "Repository page must be at most 1000.");
128
- const token = await auth.token(owner, undefined, { metadata: "read" }, ctx);
129
- const data = row(await auth.json({ method: "GET", path: "/installation/repositories", query: { page, per_page: count } }, token, ctx));
130
- if (!Array.isArray(data.repositories))
131
- throw new ConnectorCallError("connector_call_failed", "GitHub returned an invalid repository list.");
132
- const repositories = [];
133
- for (const item of data.repositories) {
134
- const repository = row(item);
135
- const t = resultTarget(repository, "repositories");
136
- if (t.owner !== owner)
137
- throw new ConnectorCallError("connector_call_failed", "GitHub returned a repository from another installation owner.");
138
- await auth.checkResult(t, repository.id, token, ctx);
139
- repositories.push(`${t.owner}/${t.repo}`);
140
- }
141
- return {
142
- acting_as: "GitHub App",
143
- scopes: policy.scopes.filter((scope) => scope.org === owner || scope.repo?.startsWith(`${owner}/`)),
144
- repositories,
145
- next_page: repositories.length === count ? page + 1 : null,
146
- };
147
- },
148
- },
149
- {
150
- name: "search_scoped",
151
- description: "Search GitHub repositories, issues, pull requests or code within configured scopes.",
152
- annotations: { readOnlyHint: true },
153
- inputSchema: object({
154
- terms: text("Literal words only; scope qualifiers and Boolean operators are refused."),
155
- kind: {
156
- type: "string",
157
- enum: ["repositories", "issues", "pull-requests", "code"],
158
- description: "Resource to search.",
159
- },
160
- scopes: {
161
- type: "array",
162
- minItems: 1,
163
- maxItems: 100,
164
- items: selector,
165
- description: "Optional subset; defaults to all configured scopes.",
166
- },
167
- pages: {
168
- type: "object",
169
- additionalProperties: { type: "integer", minimum: 1, maximum: 10 },
170
- description: "Page per returned partition ID, at most 10.",
171
- },
172
- per_page: { ...integer("Results per partition, default 30."), maximum: 100 },
173
- }, ["terms", "kind"]),
174
- outputSchema: object({ partitions: { type: "array", items: jsonObject }, incomplete_results: { type: "boolean" } }, ["partitions", "incomplete_results"]),
175
- async handler(args, ctx) {
176
- if (!/^[a-z0-9_. -]{1,128}$/i.test(args.terms) || /\b(?:OR|NOT|AND)\b/i.test(args.terms))
177
- throw new ConnectorCallError("invalid_args", "Search terms must be literal words, without qualifiers or Boolean operators.");
178
- const selected = args.scopes === undefined ? policy.scopes : selectors(args.scopes, policy);
179
- const partitions = searchPartitions(selected);
180
- if (Object.keys(args.pages ?? {}).some((key) => !partitions.some((partition) => partition.id === key)))
181
- throw new ConnectorCallError("invalid_args", "Pagination keys must match the selected search partitions.");
182
- const type = args.kind === "issues" ? " is:issue" : args.kind === "pull-requests" ? " is:pr" : "";
183
- const queries = partitions.map((partition) => `${partition.qualifier} ${args.terms.trim()}${type}`);
184
- if (queries.some((query) => query.length > 256))
185
- throw new ConnectorCallError("invalid_args", "The scoped search query exceeds GitHub's 256-character bound. Select fewer repositories.");
186
- const seen = new Set();
187
- const output = [];
188
- let incomplete = false;
189
- for (const partition of partitions) {
190
- const page = args.pages?.[partition.id] ?? 1;
191
- const count = args.per_page ?? 30;
192
- const permissions = args.kind === "repositories"
193
- ? { metadata: "read" }
194
- : args.kind === "code"
195
- ? { contents: "read" }
196
- : { issues: "read", pull_requests: "read" };
197
- const token = await auth.token(partition.owner, partition.repos, permissions, ctx);
198
- const kind = args.kind === "pull-requests" ? "issues" : args.kind;
199
- const query = `${partition.qualifier} ${args.terms.trim()}${type}`;
200
- const data = row(await auth.json({ method: "GET", path: `/search/${kind}`, query: { q: query, page, per_page: count } }, token, ctx));
201
- if (!Array.isArray(data.items))
202
- throw new ConnectorCallError("connector_call_failed", "GitHub returned an invalid search result.");
203
- const items = [];
204
- for (const value of data.items) {
205
- const item = row(value);
206
- const t = resultTarget(item, args.kind);
207
- policy.owner(t.owner);
208
- if (t.owner !== partition.owner)
209
- throw new ConnectorCallError("connector_call_failed", "GitHub search escaped its selected partition; results were withheld.");
210
- await auth.checkResult(t, args.kind === "repositories" ? item.id : args.kind === "code" ? row(item.repository).id : undefined, token, ctx);
211
- const key = `${args.kind}:${t.owner}/${t.repo}:${args.kind === "code" ? item.path : item.id}`;
212
- if (!seen.has(key)) {
213
- seen.add(key);
214
- items.push(value);
215
- }
216
- }
217
- const more = data.items.length === count || data.total_count > page * count;
218
- const limited = data.incomplete_results === true || (more && page === 10);
219
- incomplete ||= limited;
220
- output.push({
221
- scope: partition.id,
222
- items,
223
- total_count: data.total_count,
224
- incomplete_results: limited,
225
- next_page: more && page < 10 ? page + 1 : null,
226
- });
227
- }
228
- return { partitions: output, incomplete_results: incomplete };
229
- },
230
- },
231
- {
232
- name: "create_release",
233
- description: "Create a GitHub release, optionally as a draft.",
234
- annotations: { readOnlyHint: false },
235
- inputSchema: object({
236
- ...ownerRepo,
237
- tag_name: text("Release tag."),
238
- target_commitish: text("Branch or commit for a new tag."),
239
- name: text("Release title."),
240
- body: { type: "string", description: "Release notes." },
241
- draft: bool("Create a draft release."),
242
- prerelease: bool("Mark as a prerelease."),
243
- }, ["owner", "repo", "tag_name"]),
244
- outputSchema: jsonObject,
245
- handler: (args, ctx) => {
246
- const { owner: _owner, repo: _repo, ...body } = args;
247
- return scopedRequest(args, { contents: "write" }, "POST", "/releases", body, ctx);
248
- },
249
- },
250
- {
251
- name: "update_release",
252
- description: "Update or publish an existing GitHub release.",
253
- annotations: { readOnlyHint: false, destructiveHint: true },
254
- inputSchema: object({
255
- ...ownerRepo,
256
- release_id: integer("Release ID in this repository."),
257
- tag_name: text("Release tag."),
258
- name: text("Release title."),
259
- body: { type: "string", description: "Release notes." },
260
- draft: bool("Set false to publish a draft."),
261
- prerelease: bool("Mark as a prerelease."),
262
- }, ["owner", "repo", "release_id"]),
263
- outputSchema: jsonObject,
264
- handler: (args, ctx) => {
265
- const { owner: _owner, repo: _repo, release_id, ...body } = args;
266
- return scopedRequest(args, { contents: "write" }, "PATCH", `/releases/${release_id}`, body, ctx);
267
- },
268
- },
269
- {
270
- name: "delete_release",
271
- description: "Delete a GitHub release from the scoped repository.",
272
- annotations: { readOnlyHint: false, destructiveHint: true },
273
- inputSchema: object({ ...ownerRepo, release_id: integer("Release ID in this repository.") }, [
274
- "owner",
275
- "repo",
276
- "release_id",
277
- ]),
278
- outputSchema: jsonObject,
279
- handler: (args, ctx) => scopedRequest(args, { contents: "write" }, "DELETE", `/releases/${args.release_id}`, undefined, ctx),
280
- },
281
- {
282
- name: "merge_pull_request",
283
- description: "Merge a same-repository GitHub pull request with explicit workflow-write scope.",
284
- annotations: { readOnlyHint: false, destructiveHint: true },
285
- inputSchema: object({
286
- ...ownerRepo,
287
- pull_number: integer("Pull request number."),
288
- sha: text("Expected head commit SHA; reread after a conflict."),
289
- merge_method: {
290
- type: "string",
291
- enum: ["merge", "squash", "rebase"],
292
- description: "Merge strategy, default merge.",
293
- },
294
- }, ["owner", "repo", "pull_number", "sha"]),
295
- outputSchema: jsonObject,
296
- async handler(args, ctx) {
297
- const t = target(args.owner, args.repo);
298
- // GitHub's atomic sha guard binds only the head, not the base/ref.
299
- // Retargeting can turn a file-safe diff into workflow changes. Require
300
- // explicit workflow permission before any authentication for merges.
301
- policy.scope(t, true, true);
302
- const reader = await auth.repo(t, { pull_requests: "read", contents: "read" }, ctx);
303
- const pr = row(await auth.json({ method: "GET", path: `${repoPath(t)}/pulls/${args.pull_number}` }, reader, ctx));
304
- const head = row(pr.head);
305
- const base = row(pr.base);
306
- if (head.sha !== args.sha ||
307
- row(head.repo).full_name?.toLowerCase() !== `${t.owner}/${t.repo}` ||
308
- row(base.repo).full_name?.toLowerCase() !== `${t.owner}/${t.repo}`)
309
- throw new ConnectorCallError("conflict", "Merge requires the expected head SHA and a same-repository head and base. Reread the pull request.");
310
- const token = await auth.repo(t, { contents: "write", pull_requests: "write", workflows: "write" }, ctx);
311
- // GitHub verifies sha atomically. No automatic write retry.
312
- return auth.json({
313
- method: "PUT",
314
- path: `${repoPath(t)}/pulls/${args.pull_number}/merge`,
315
- body: { sha: args.sha, merge_method: args.merge_method ?? "merge" },
316
- }, token, ctx);
317
- },
318
- },
319
- ];
320
- return api(id, { tools });
321
- }
@@ -1,7 +0,0 @@
1
- import { type ProviderOptions } from "../../provider.js";
2
- export declare const INFISICAL_API_BASE_URL = "https://app.infisical.com/api";
3
- export interface InfisicalOptions extends ProviderOptions {
4
- /** API base including /api; US cloud by default, EU cloud or self-hosted HTTPS allowed. */
5
- baseUrl?: string;
6
- }
7
- export declare const infisical: import("../../provider.js").ProviderFactory<InfisicalOptions>;