@zackbart/connecta 0.34.1 → 0.36.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 (441) hide show
  1. package/CHANGELOG.md +418 -0
  2. package/README.md +65 -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 +2044 -1161
  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 +751 -281
  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 +29 -7
  53. package/dist/connectors/api-connector.js +145 -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/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 +227 -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 +379 -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/contract.d.ts +8 -3
  109. package/dist/operator-ui/generated.js +4 -4
  110. package/dist/operator-ui/model.d.ts +2 -3
  111. package/dist/program-writes.js +47 -26
  112. package/dist/provider-call-facts.d.ts +115 -0
  113. package/dist/provider-call-facts.js +182 -0
  114. package/dist/provider-call.d.ts +112 -0
  115. package/dist/provider-call.js +271 -0
  116. package/dist/provider.d.ts +65 -31
  117. package/dist/provider.js +116 -39
  118. package/dist/providers/_shared/google/hatch.js +91 -0
  119. package/dist/providers/_shared/google/kit.js +427 -0
  120. package/dist/providers/_shared/google/result-size.js +15 -2
  121. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  122. package/dist/providers/_shared/google/service-account.js +8 -4
  123. package/dist/providers/_shared/google/workspace.d.ts +6 -210
  124. package/dist/providers/_shared/google/workspace.js +6 -425
  125. package/dist/providers/_shared/rest/compact-index.js +86 -0
  126. package/dist/providers/_shared/rest/kit.js +146 -0
  127. package/dist/providers/_shared/rest/operation-index.js +230 -14
  128. package/dist/providers/_shared/rest/response-media.js +11 -0
  129. package/dist/providers/_shared/rest/value-safety.js +353 -195
  130. package/dist/providers/_shared/sensitive-fields.js +27 -0
  131. package/dist/providers/breeze/api.js +584 -0
  132. package/dist/providers/breeze/index.d.ts +1 -3
  133. package/dist/providers/breeze/index.js +67 -1420
  134. package/dist/providers/breeze/openapi.generated.js +60 -0
  135. package/dist/providers/breeze/skill.generated.js +2 -6
  136. package/dist/providers/breeze/tools.js +696 -0
  137. package/dist/providers/ccb/api.js +496 -0
  138. package/dist/providers/ccb/index.d.ts +15 -37
  139. package/dist/providers/ccb/index.js +77 -1702
  140. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  141. package/dist/providers/ccb/lib/constants.js +74 -0
  142. package/dist/providers/ccb/lib/guide.js +9 -0
  143. package/dist/providers/ccb/lib/verdicts.js +387 -0
  144. package/dist/providers/ccb/openapi.generated.js +397 -0
  145. package/dist/providers/ccb/safety.js +295 -0
  146. package/dist/providers/ccb/skill.generated.js +2 -6
  147. package/dist/providers/ccb/tools.js +853 -0
  148. package/dist/providers/cloudflare/api.js +1066 -0
  149. package/dist/providers/cloudflare/index.d.ts +5 -22
  150. package/dist/providers/cloudflare/index.js +79 -197
  151. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  152. package/dist/providers/cloudflare/lib/config.js +2 -0
  153. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  154. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  155. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  156. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  157. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  158. package/dist/providers/cloudflare/openapi.generated.js +4 -3
  159. package/dist/providers/cloudflare/{value-safety.js → safety.js} +487 -0
  160. package/dist/providers/cloudflare/skill.generated.js +2 -10
  161. package/dist/providers/cloudflare/tools.js +360 -0
  162. package/dist/providers/docs/api.js +51 -0
  163. package/dist/providers/docs/index.d.ts +1 -12
  164. package/dist/providers/docs/index.js +53 -1165
  165. package/dist/providers/docs/lib/constants.d.ts +18 -0
  166. package/dist/providers/docs/lib/constants.js +18 -0
  167. package/dist/providers/docs/lib/discovery.js +26 -0
  168. package/dist/providers/docs/lib/requests.js +48 -0
  169. package/dist/providers/docs/lib/schemas.js +168 -0
  170. package/dist/providers/docs/openapi.generated.js +16 -0
  171. package/dist/providers/docs/safety.js +54 -0
  172. package/dist/providers/docs/skill.generated.js +2 -6
  173. package/dist/providers/docs/tools.js +801 -0
  174. package/dist/providers/drive/api.js +177 -0
  175. package/dist/providers/drive/index.d.ts +1 -12
  176. package/dist/providers/drive/index.js +38 -1448
  177. package/dist/providers/drive/lib/constants.d.ts +6 -0
  178. package/dist/providers/drive/lib/constants.js +6 -0
  179. package/dist/providers/drive/lib/contracts.js +532 -0
  180. package/dist/providers/drive/lib/hatch.js +197 -0
  181. package/dist/providers/drive/openapi.generated.js +77 -0
  182. package/dist/providers/drive/safety.js +90 -0
  183. package/dist/providers/drive/skill.generated.js +2 -6
  184. package/dist/providers/drive/tools.js +1290 -0
  185. package/dist/providers/forms/api.js +71 -0
  186. package/dist/providers/forms/index.d.ts +1 -12
  187. package/dist/providers/forms/index.js +49 -1145
  188. package/dist/providers/forms/lib/constants.d.ts +14 -0
  189. package/dist/providers/forms/lib/constants.js +19 -0
  190. package/dist/providers/forms/lib/hatch.js +72 -0
  191. package/dist/providers/forms/openapi.generated.js +23 -0
  192. package/dist/providers/forms/safety.js +34 -0
  193. package/dist/providers/forms/skill.generated.js +2 -8
  194. package/dist/providers/forms/tools.js +1023 -0
  195. package/dist/providers/github/api.js +150 -0
  196. package/dist/providers/github/index.d.ts +4 -5
  197. package/dist/providers/github/index.js +30 -87
  198. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  199. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  200. package/dist/providers/github/lib/discovery.js +132 -0
  201. package/dist/providers/github/lib/operations.js +58 -0
  202. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  203. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  204. package/dist/providers/github/openapi.generated.js +1216 -0
  205. package/dist/providers/github/safety.js +216 -0
  206. package/dist/providers/github/skill.generated.js +2 -5
  207. package/dist/providers/github/tools.js +506 -0
  208. package/dist/providers/gmail/api.js +114 -0
  209. package/dist/providers/gmail/index.d.ts +1 -12
  210. package/dist/providers/gmail/index.js +73 -1621
  211. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  212. package/dist/providers/gmail/lib/constants.js +16 -0
  213. package/dist/providers/gmail/lib/index.js +173 -0
  214. package/dist/providers/gmail/lib/schemas.js +176 -0
  215. package/dist/providers/gmail/lib/threading.js +120 -0
  216. package/dist/providers/gmail/openapi.generated.js +92 -0
  217. package/dist/providers/gmail/safety.js +21 -0
  218. package/dist/providers/gmail/skill.generated.js +2 -6
  219. package/dist/providers/gmail/tools.js +1435 -0
  220. package/dist/providers/overflow/api.js +1008 -0
  221. package/dist/providers/overflow/index.d.ts +1 -17
  222. package/dist/providers/overflow/index.js +60 -1488
  223. package/dist/providers/overflow/skill.generated.js +2 -5
  224. package/dist/providers/overflow/tools.js +873 -0
  225. package/dist/providers/planning-center/api.js +467 -0
  226. package/dist/providers/planning-center/index.d.ts +4 -35
  227. package/dist/providers/planning-center/index.js +69 -2445
  228. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  229. package/dist/providers/planning-center/lib/constants.js +83 -0
  230. package/dist/providers/planning-center/lib/discovery.js +40 -0
  231. package/dist/providers/planning-center/lib/guide.js +39 -0
  232. package/dist/providers/planning-center/lib/json-api.js +83 -0
  233. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  234. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  235. package/dist/providers/planning-center/safety.js +188 -0
  236. package/dist/providers/planning-center/skill.generated.js +2 -27
  237. package/dist/providers/planning-center/tools.js +1010 -0
  238. package/dist/providers/quickbooks/api.js +299 -0
  239. package/dist/providers/quickbooks/index.d.ts +13 -0
  240. package/dist/providers/quickbooks/index.js +93 -0
  241. package/dist/providers/quickbooks/lib/query.js +118 -0
  242. package/dist/providers/quickbooks/lib/writes.js +168 -0
  243. package/dist/providers/quickbooks/safety.js +222 -0
  244. package/dist/providers/quickbooks/skill.generated.js +5 -0
  245. package/dist/providers/quickbooks/tools.js +117 -0
  246. package/dist/providers/sheets/api.js +133 -0
  247. package/dist/providers/sheets/index.d.ts +4 -16
  248. package/dist/providers/sheets/index.js +61 -1172
  249. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  250. package/dist/providers/sheets/lib/constants.js +14 -0
  251. package/dist/providers/sheets/lib/hatch.js +163 -0
  252. package/dist/providers/sheets/lib/requests.js +105 -0
  253. package/dist/providers/sheets/lib/schemas.js +138 -0
  254. package/dist/providers/sheets/openapi.generated.js +30 -0
  255. package/dist/providers/sheets/safety.js +27 -0
  256. package/dist/providers/sheets/skill.generated.js +2 -7
  257. package/dist/providers/sheets/tools.js +733 -0
  258. package/dist/providers/slides/api.js +147 -0
  259. package/dist/providers/slides/index.d.ts +2 -10
  260. package/dist/providers/slides/index.js +48 -2555
  261. package/dist/providers/slides/lib/constants.d.ts +11 -0
  262. package/dist/providers/slides/lib/constants.js +11 -0
  263. package/dist/providers/slides/lib/requests.js +60 -0
  264. package/dist/providers/slides/lib/schemas.js +565 -0
  265. package/dist/providers/slides/openapi.generated.js +18 -0
  266. package/dist/providers/slides/skill.generated.js +2 -6
  267. package/dist/providers/slides/tools.js +1968 -0
  268. package/dist/providers/stripe/api.js +401 -0
  269. package/dist/providers/stripe/index.d.ts +5 -27
  270. package/dist/providers/stripe/index.js +74 -210
  271. package/dist/providers/stripe/lib/config.d.ts +4 -0
  272. package/dist/providers/stripe/lib/config.js +2 -0
  273. package/dist/providers/stripe/openapi.generated.js +4 -3
  274. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  275. package/dist/providers/stripe/skill.generated.js +2 -11
  276. package/dist/providers/stripe/tools.js +77 -0
  277. package/dist/providers/tithely/api.js +531 -0
  278. package/dist/providers/tithely/index.d.ts +17 -0
  279. package/dist/providers/tithely/index.js +86 -965
  280. package/dist/providers/tithely/skill.generated.js +2 -5
  281. package/dist/providers/tithely/tools.js +426 -0
  282. package/dist/providers/vercel/api.js +551 -0
  283. package/dist/providers/vercel/index.d.ts +9 -25
  284. package/dist/providers/vercel/index.js +65 -260
  285. package/dist/providers/vercel/lib/config.d.ts +2 -0
  286. package/dist/providers/vercel/lib/config.js +2 -0
  287. package/dist/providers/vercel/lib/index.js +117 -0
  288. package/dist/providers/vercel/lib/logs.js +100 -0
  289. package/dist/providers/vercel/lib/pin.js +270 -0
  290. package/dist/providers/vercel/openapi.generated.js +10 -5
  291. package/dist/providers/vercel/{value-safety.js → safety.js} +247 -38
  292. package/dist/providers/vercel/skill.generated.js +2 -7
  293. package/dist/providers/vercel/tools.js +642 -0
  294. package/dist/redaction-identity.js +47 -0
  295. package/dist/redaction-marker.js +125 -0
  296. package/dist/registry.d.ts +21 -15
  297. package/dist/registry.js +409 -376
  298. package/dist/routes/access-tokens.js +1 -1
  299. package/dist/routes/actor-labels.js +1 -1
  300. package/dist/routes/connect.js +1 -1
  301. package/dist/routes/dispatch.js +103 -0
  302. package/dist/routes/mcp.js +170 -79
  303. package/dist/routes/oauth.js +6 -1
  304. package/dist/routes/operator.js +2 -2
  305. package/dist/routes/shared.d.ts +5 -4
  306. package/dist/routes/shared.js +244 -177
  307. package/dist/routes/skills.js +10 -8
  308. package/dist/routes/ui-config.js +27 -3
  309. package/dist/routes/ui-data.js +21 -20
  310. package/dist/routes/ui.js +1 -1
  311. package/dist/runtime/call-admission.js +0 -26
  312. package/dist/runtime/call-entry.js +30 -0
  313. package/dist/runtime/call.js +552 -0
  314. package/dist/runtime/connector-scope.js +7 -0
  315. package/dist/runtime/credential-probe.js +34 -0
  316. package/dist/runtime/executor.js +40 -0
  317. package/dist/runtime/native-storage.js +63 -0
  318. package/dist/runtime/registry.js +27 -0
  319. package/dist/runtime/request-scope.js +72 -0
  320. package/dist/runtime/run.js +15 -7
  321. package/dist/runtime/shared-read.js +34 -5
  322. package/dist/runtime/storage.js +34 -21
  323. package/dist/sent-secrets.d.ts +194 -37
  324. package/dist/sent-secrets.js +1743 -340
  325. package/dist/server.js +5 -56
  326. package/dist/skills.js +322 -223
  327. package/dist/sqlite.js +15 -14
  328. package/dist/storage/d1-copy.js +255 -0
  329. package/dist/storage/d1-driver.js +15 -0
  330. package/dist/storage/keys.js +28 -0
  331. package/dist/storage/sql-driver.js +88 -0
  332. package/dist/storage/sql-native.js +544 -0
  333. package/dist/storage/sql-schema.d.ts +6 -0
  334. package/dist/storage/sql-schema.js +15 -0
  335. package/dist/storage/sql.d.ts +14 -20
  336. package/dist/storage/sql.js +29 -535
  337. package/dist/timeout.js +0 -26
  338. package/dist/tool-safety.js +20 -10
  339. package/dist/types.d.ts +9 -109
  340. package/dist/ui.d.ts +1 -1
  341. package/dist/ui.js +0 -1
  342. package/dist/upward.js +3 -0
  343. package/dist/usage-guide.js +3 -1
  344. package/dist/validate.d.ts +4 -2
  345. package/dist/validate.js +86 -9
  346. package/dist/version.d.ts +1 -1
  347. package/dist/version.js +1 -1
  348. package/dist/worker.js +312 -292
  349. package/dist/workspace-subject.js +5 -1
  350. package/dist/write-outcome.js +454 -34
  351. package/documentation/README.md +28 -7
  352. package/documentation/architecture.md +2409 -255
  353. package/documentation/auth.md +867 -114
  354. package/documentation/code-mode.md +49 -16
  355. package/documentation/deploying.md +164 -20
  356. package/documentation/hosted-mcp-migration.md +460 -0
  357. package/documentation/integrating.md +129 -144
  358. package/documentation/meta-tools.md +409 -32
  359. package/documentation/operating.md +27 -3
  360. package/documentation/operator-tests.md +3 -0
  361. package/documentation/operator-ui.md +84 -48
  362. package/documentation/provider-auth-migration.md +16 -63
  363. package/documentation/provider-migration-0.29.md +10 -5
  364. package/documentation/provider-migration-0.35.md +975 -0
  365. package/documentation/providers.md +1347 -0
  366. package/examples/worker/AGENTS.md +23 -9
  367. package/examples/worker/README.md +254 -135
  368. package/examples/worker/alchemy.run.ts +116 -0
  369. package/examples/worker/gitignore +10 -0
  370. package/examples/worker/src/connecta.config.ts +23 -21
  371. package/examples/worker/wrangler.jsonc +14 -5
  372. package/guides/connecting-agents.md +157 -0
  373. package/guides/how-it-works.md +156 -0
  374. package/guides/safety-and-trust.md +153 -0
  375. package/package.json +30 -50
  376. package/templates/node/.env.example +3 -0
  377. package/templates/node/README.md +22 -2
  378. package/templates/node/docker-compose.yml +1 -0
  379. package/templates/node/package.json +3 -2
  380. package/templates/node/src/connecta.config.ts +8 -0
  381. package/dist/catalog-drift.d.ts +0 -138
  382. package/dist/catalog-drift.js +0 -578
  383. package/dist/operator-ui/agents.d.ts +0 -74
  384. package/dist/operator-ui/agents.js +0 -104
  385. package/dist/operator-ui/config-summary.js +0 -565
  386. package/dist/operator-ui/connection-map.js +0 -376
  387. package/dist/operator-ui/endpoints.js +0 -221
  388. package/dist/operator-ui/fix-prompts.d.ts +0 -18
  389. package/dist/operator-ui/fix-prompts.js +0 -87
  390. package/dist/operator-ui/health.js +0 -52
  391. package/dist/operator-ui/member-page.js +0 -97
  392. package/dist/operator-ui/overview.js +0 -123
  393. package/dist/operator-ui/setup-commands.js +0 -51
  394. package/dist/operator-ui/view.d.ts +0 -401
  395. package/dist/operator-ui/view.js +0 -705
  396. package/dist/providers/_shared/request-token.js +0 -83
  397. package/dist/providers/_shared/rest/dispatch.js +0 -41
  398. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  399. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  400. package/dist/providers/_shared/rest/tools.js +0 -569
  401. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  402. package/dist/providers/basecamp/index.d.ts +0 -45
  403. package/dist/providers/basecamp/index.js +0 -997
  404. package/dist/providers/basecamp/skill.generated.js +0 -9
  405. package/dist/providers/cloudflare/rest.d.ts +0 -37
  406. package/dist/providers/cloudflare/rest.js +0 -1097
  407. package/dist/providers/github/hosted.js +0 -218
  408. package/dist/providers/github/rest.js +0 -321
  409. package/dist/providers/infisical/index.d.ts +0 -7
  410. package/dist/providers/infisical/index.js +0 -713
  411. package/dist/providers/infisical/skill.generated.js +0 -8
  412. package/dist/providers/intercom/index.d.ts +0 -24
  413. package/dist/providers/intercom/index.js +0 -121
  414. package/dist/providers/intercom/skill.generated.js +0 -8
  415. package/dist/providers/linear/index.d.ts +0 -55
  416. package/dist/providers/linear/index.js +0 -537
  417. package/dist/providers/linear/skill.generated.js +0 -8
  418. package/dist/providers/mixpanel/index.d.ts +0 -59
  419. package/dist/providers/mixpanel/index.js +0 -472
  420. package/dist/providers/mixpanel/operations.js +0 -20
  421. package/dist/providers/mixpanel/rest.js +0 -603
  422. package/dist/providers/mixpanel/skill.generated.js +0 -10
  423. package/dist/providers/mixpanel/value-safety.js +0 -16
  424. package/dist/providers/notion/index.d.ts +0 -67
  425. package/dist/providers/notion/index.js +0 -368
  426. package/dist/providers/notion/openapi.generated.js +0 -75
  427. package/dist/providers/notion/rest.d.ts +0 -24
  428. package/dist/providers/notion/rest.js +0 -1226
  429. package/dist/providers/notion/skill.generated.js +0 -11
  430. package/dist/providers/notion/value-safety.js +0 -56
  431. package/dist/providers/revenuecat/index.d.ts +0 -51
  432. package/dist/providers/revenuecat/index.js +0 -697
  433. package/dist/providers/revenuecat/skill.generated.js +0 -11
  434. package/dist/providers/stripe/rest.d.ts +0 -14
  435. package/dist/providers/stripe/rest.js +0 -402
  436. package/dist/providers/vercel/rest.d.ts +0 -20
  437. package/dist/providers/vercel/rest.js +0 -1020
  438. package/dist/providers/wispr-flow/index.d.ts +0 -14
  439. package/dist/providers/wispr-flow/index.js +0 -117
  440. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  441. /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>;