@ghx-dev/core 0.1.0-beta.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 (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +212 -0
  3. package/dist/agent-interface/prompt/main-skill.d.ts +3 -0
  4. package/dist/agent-interface/prompt/main-skill.js +7 -0
  5. package/dist/agent-interface/prompt/main-skill.js.map +1 -0
  6. package/dist/agent-interface/tools/execute-tool.d.ts +16 -0
  7. package/dist/agent-interface/tools/execute-tool.js +7 -0
  8. package/dist/agent-interface/tools/execute-tool.js.map +1 -0
  9. package/dist/agent-interface/tools/explain-tool.d.ts +11 -0
  10. package/dist/agent-interface/tools/explain-tool.js +9 -0
  11. package/dist/agent-interface/tools/explain-tool.js.map +1 -0
  12. package/dist/agent-interface/tools/list-capabilities-tool.d.ts +7 -0
  13. package/dist/agent-interface/tools/list-capabilities-tool.js +9 -0
  14. package/dist/agent-interface/tools/list-capabilities-tool.js.map +1 -0
  15. package/dist/agent.d.ts +7 -0
  16. package/dist/agent.js +21 -0
  17. package/dist/agent.js.map +1 -0
  18. package/dist/chunk-2W4L5YCC.js +116 -0
  19. package/dist/chunk-2W4L5YCC.js.map +1 -0
  20. package/dist/chunk-3RAT5BCB.js +584 -0
  21. package/dist/chunk-3RAT5BCB.js.map +1 -0
  22. package/dist/chunk-3RJCF42N.js +16 -0
  23. package/dist/chunk-3RJCF42N.js.map +1 -0
  24. package/dist/chunk-573MDG3I.js +18 -0
  25. package/dist/chunk-573MDG3I.js.map +1 -0
  26. package/dist/chunk-5JRLVOF2.js +50 -0
  27. package/dist/chunk-5JRLVOF2.js.map +1 -0
  28. package/dist/chunk-B6RLMKS4.js +41 -0
  29. package/dist/chunk-B6RLMKS4.js.map +1 -0
  30. package/dist/chunk-BJHVAFTN.js +42 -0
  31. package/dist/chunk-BJHVAFTN.js.map +1 -0
  32. package/dist/chunk-D746VR3B.js +38 -0
  33. package/dist/chunk-D746VR3B.js.map +1 -0
  34. package/dist/chunk-DJIEG6K7.js +20 -0
  35. package/dist/chunk-DJIEG6K7.js.map +1 -0
  36. package/dist/chunk-DLKIQBK6.js +106 -0
  37. package/dist/chunk-DLKIQBK6.js.map +1 -0
  38. package/dist/chunk-EBRDO4Y6.js +31 -0
  39. package/dist/chunk-EBRDO4Y6.js.map +1 -0
  40. package/dist/chunk-FXN6IIT5.js +14 -0
  41. package/dist/chunk-FXN6IIT5.js.map +1 -0
  42. package/dist/chunk-GPU4P7UG.js +92 -0
  43. package/dist/chunk-GPU4P7UG.js.map +1 -0
  44. package/dist/chunk-MMG6CIKK.js +44 -0
  45. package/dist/chunk-MMG6CIKK.js.map +1 -0
  46. package/dist/chunk-MT4U5DYD.js +88 -0
  47. package/dist/chunk-MT4U5DYD.js.map +1 -0
  48. package/dist/chunk-NFF5VF4U.js +28 -0
  49. package/dist/chunk-NFF5VF4U.js.map +1 -0
  50. package/dist/chunk-Q4RTT3DV.js +209 -0
  51. package/dist/chunk-Q4RTT3DV.js.map +1 -0
  52. package/dist/chunk-QEAMC4IJ.js +34 -0
  53. package/dist/chunk-QEAMC4IJ.js.map +1 -0
  54. package/dist/chunk-QX34GTH6.js +30 -0
  55. package/dist/chunk-QX34GTH6.js.map +1 -0
  56. package/dist/chunk-QZZC53HF.js +38 -0
  57. package/dist/chunk-QZZC53HF.js.map +1 -0
  58. package/dist/chunk-RUQXGZ35.js +34 -0
  59. package/dist/chunk-RUQXGZ35.js.map +1 -0
  60. package/dist/chunk-TCLMLVUQ.js +38 -0
  61. package/dist/chunk-TCLMLVUQ.js.map +1 -0
  62. package/dist/chunk-TDTKOJKN.js +52 -0
  63. package/dist/chunk-TDTKOJKN.js.map +1 -0
  64. package/dist/chunk-UGWIZ3RI.js +7 -0
  65. package/dist/chunk-UGWIZ3RI.js.map +1 -0
  66. package/dist/chunk-UOJWOHRM.js +16 -0
  67. package/dist/chunk-UOJWOHRM.js.map +1 -0
  68. package/dist/chunk-VD5NXQP7.js +42 -0
  69. package/dist/chunk-VD5NXQP7.js.map +1 -0
  70. package/dist/chunk-W2TKG2UL.js +37 -0
  71. package/dist/chunk-W2TKG2UL.js.map +1 -0
  72. package/dist/chunk-W6ROKCY5.js +28 -0
  73. package/dist/chunk-W6ROKCY5.js.map +1 -0
  74. package/dist/chunk-WYSY75U7.js +156 -0
  75. package/dist/chunk-WYSY75U7.js.map +1 -0
  76. package/dist/chunk-YNNDBMNR.js +113 -0
  77. package/dist/chunk-YNNDBMNR.js.map +1 -0
  78. package/dist/chunk-YNQNHCRS.js +198 -0
  79. package/dist/chunk-YNQNHCRS.js.map +1 -0
  80. package/dist/chunk-YQDQX4BT.js +624 -0
  81. package/dist/chunk-YQDQX4BT.js.map +1 -0
  82. package/dist/cli/commands/capabilities-explain.d.ts +3 -0
  83. package/dist/cli/commands/capabilities-explain.js +10 -0
  84. package/dist/cli/commands/capabilities-explain.js.map +1 -0
  85. package/dist/cli/commands/capabilities-list.d.ts +3 -0
  86. package/dist/cli/commands/capabilities-list.js +10 -0
  87. package/dist/cli/commands/capabilities-list.js.map +1 -0
  88. package/dist/cli/commands/doctor.d.ts +3 -0
  89. package/dist/cli/commands/doctor.js +7 -0
  90. package/dist/cli/commands/doctor.js.map +1 -0
  91. package/dist/cli/commands/routes.d.ts +3 -0
  92. package/dist/cli/commands/routes.js +7 -0
  93. package/dist/cli/commands/routes.js.map +1 -0
  94. package/dist/cli/commands/run.d.ts +3 -0
  95. package/dist/cli/commands/run.js +31 -0
  96. package/dist/cli/commands/run.js.map +1 -0
  97. package/dist/cli/commands/setup.d.ts +3 -0
  98. package/dist/cli/commands/setup.js +7 -0
  99. package/dist/cli/commands/setup.js.map +1 -0
  100. package/dist/cli/formatters/json.d.ts +3 -0
  101. package/dist/cli/formatters/json.js +8 -0
  102. package/dist/cli/formatters/json.js.map +1 -0
  103. package/dist/cli/formatters/table.d.ts +3 -0
  104. package/dist/cli/formatters/table.js +8 -0
  105. package/dist/cli/formatters/table.js.map +1 -0
  106. package/dist/cli/index.d.ts +4 -0
  107. package/dist/cli/index.js +118 -0
  108. package/dist/cli/index.js.map +1 -0
  109. package/dist/core/contracts/envelope.d.ts +43 -0
  110. package/dist/core/contracts/envelope.js +1 -0
  111. package/dist/core/contracts/envelope.js.map +1 -0
  112. package/dist/core/contracts/task.d.ts +7 -0
  113. package/dist/core/contracts/task.js +1 -0
  114. package/dist/core/contracts/task.js.map +1 -0
  115. package/dist/core/contracts/tasks/check_run.annotations.list.d.ts +5 -0
  116. package/dist/core/contracts/tasks/check_run.annotations.list.js +8 -0
  117. package/dist/core/contracts/tasks/check_run.annotations.list.js.map +1 -0
  118. package/dist/core/contracts/tasks/issue.comments.list.d.ts +5 -0
  119. package/dist/core/contracts/tasks/issue.comments.list.js +8 -0
  120. package/dist/core/contracts/tasks/issue.comments.list.js.map +1 -0
  121. package/dist/core/contracts/tasks/issue.list.d.ts +5 -0
  122. package/dist/core/contracts/tasks/issue.list.js +8 -0
  123. package/dist/core/contracts/tasks/issue.list.js.map +1 -0
  124. package/dist/core/contracts/tasks/issue.view.d.ts +5 -0
  125. package/dist/core/contracts/tasks/issue.view.js +8 -0
  126. package/dist/core/contracts/tasks/issue.view.js.map +1 -0
  127. package/dist/core/contracts/tasks/pr.checks.get_failed.d.ts +5 -0
  128. package/dist/core/contracts/tasks/pr.checks.get_failed.js +8 -0
  129. package/dist/core/contracts/tasks/pr.checks.get_failed.js.map +1 -0
  130. package/dist/core/contracts/tasks/pr.comment.reply.d.ts +5 -0
  131. package/dist/core/contracts/tasks/pr.comment.reply.js +8 -0
  132. package/dist/core/contracts/tasks/pr.comment.reply.js.map +1 -0
  133. package/dist/core/contracts/tasks/pr.comment.resolve.d.ts +5 -0
  134. package/dist/core/contracts/tasks/pr.comment.resolve.js +8 -0
  135. package/dist/core/contracts/tasks/pr.comment.resolve.js.map +1 -0
  136. package/dist/core/contracts/tasks/pr.comment.unresolve.d.ts +5 -0
  137. package/dist/core/contracts/tasks/pr.comment.unresolve.js +8 -0
  138. package/dist/core/contracts/tasks/pr.comment.unresolve.js.map +1 -0
  139. package/dist/core/contracts/tasks/pr.comments.list.d.ts +5 -0
  140. package/dist/core/contracts/tasks/pr.comments.list.js +8 -0
  141. package/dist/core/contracts/tasks/pr.comments.list.js.map +1 -0
  142. package/dist/core/contracts/tasks/pr.diff.list_files.d.ts +5 -0
  143. package/dist/core/contracts/tasks/pr.diff.list_files.js +8 -0
  144. package/dist/core/contracts/tasks/pr.diff.list_files.js.map +1 -0
  145. package/dist/core/contracts/tasks/pr.list.d.ts +5 -0
  146. package/dist/core/contracts/tasks/pr.list.js +8 -0
  147. package/dist/core/contracts/tasks/pr.list.js.map +1 -0
  148. package/dist/core/contracts/tasks/pr.mergeability.view.d.ts +5 -0
  149. package/dist/core/contracts/tasks/pr.mergeability.view.js +8 -0
  150. package/dist/core/contracts/tasks/pr.mergeability.view.js.map +1 -0
  151. package/dist/core/contracts/tasks/pr.ready_for_review.set.d.ts +5 -0
  152. package/dist/core/contracts/tasks/pr.ready_for_review.set.js +8 -0
  153. package/dist/core/contracts/tasks/pr.ready_for_review.set.js.map +1 -0
  154. package/dist/core/contracts/tasks/pr.reviews.list.d.ts +5 -0
  155. package/dist/core/contracts/tasks/pr.reviews.list.js +8 -0
  156. package/dist/core/contracts/tasks/pr.reviews.list.js.map +1 -0
  157. package/dist/core/contracts/tasks/pr.status.checks.d.ts +5 -0
  158. package/dist/core/contracts/tasks/pr.status.checks.js +8 -0
  159. package/dist/core/contracts/tasks/pr.status.checks.js.map +1 -0
  160. package/dist/core/contracts/tasks/pr.view.d.ts +5 -0
  161. package/dist/core/contracts/tasks/pr.view.js +8 -0
  162. package/dist/core/contracts/tasks/pr.view.js.map +1 -0
  163. package/dist/core/contracts/tasks/repo.view.d.ts +5 -0
  164. package/dist/core/contracts/tasks/repo.view.js +8 -0
  165. package/dist/core/contracts/tasks/repo.view.js.map +1 -0
  166. package/dist/core/contracts/tasks/workflow_job.logs.analyze.d.ts +5 -0
  167. package/dist/core/contracts/tasks/workflow_job.logs.analyze.js +8 -0
  168. package/dist/core/contracts/tasks/workflow_job.logs.analyze.js.map +1 -0
  169. package/dist/core/contracts/tasks/workflow_job.logs.get.d.ts +5 -0
  170. package/dist/core/contracts/tasks/workflow_job.logs.get.js +8 -0
  171. package/dist/core/contracts/tasks/workflow_job.logs.get.js.map +1 -0
  172. package/dist/core/contracts/tasks/workflow_run.jobs.list.d.ts +5 -0
  173. package/dist/core/contracts/tasks/workflow_run.jobs.list.js +8 -0
  174. package/dist/core/contracts/tasks/workflow_run.jobs.list.js.map +1 -0
  175. package/dist/core/contracts/tasks/workflow_runs.list.d.ts +5 -0
  176. package/dist/core/contracts/tasks/workflow_runs.list.js +8 -0
  177. package/dist/core/contracts/tasks/workflow_runs.list.js.map +1 -0
  178. package/dist/core/errors/codes.d.ts +13 -0
  179. package/dist/core/errors/codes.js +7 -0
  180. package/dist/core/errors/codes.js.map +1 -0
  181. package/dist/core/errors/map-error.d.ts +5 -0
  182. package/dist/core/errors/map-error.js +8 -0
  183. package/dist/core/errors/map-error.js.map +1 -0
  184. package/dist/core/errors/retryability.d.ts +3 -0
  185. package/dist/core/errors/retryability.js +8 -0
  186. package/dist/core/errors/retryability.js.map +1 -0
  187. package/dist/core/execute/execute.d.ts +28 -0
  188. package/dist/core/execute/execute.js +11 -0
  189. package/dist/core/execute/execute.js.map +1 -0
  190. package/dist/core/execution/adapters/cli-adapter.d.ts +22 -0
  191. package/dist/core/execution/adapters/cli-adapter.js +69 -0
  192. package/dist/core/execution/adapters/cli-adapter.js.map +1 -0
  193. package/dist/core/execution/adapters/cli-capability-adapter.d.ts +16 -0
  194. package/dist/core/execution/adapters/cli-capability-adapter.js +11 -0
  195. package/dist/core/execution/adapters/cli-capability-adapter.js.map +1 -0
  196. package/dist/core/execution/adapters/graphql-adapter.d.ts +25 -0
  197. package/dist/core/execution/adapters/graphql-adapter.js +44 -0
  198. package/dist/core/execution/adapters/graphql-adapter.js.map +1 -0
  199. package/dist/core/execution/adapters/graphql-capability-adapter.d.ts +20 -0
  200. package/dist/core/execution/adapters/graphql-capability-adapter.js +11 -0
  201. package/dist/core/execution/adapters/graphql-capability-adapter.js.map +1 -0
  202. package/dist/core/execution/adapters/rest-adapter.d.ts +3 -0
  203. package/dist/core/execution/adapters/rest-adapter.js +8 -0
  204. package/dist/core/execution/adapters/rest-adapter.js.map +1 -0
  205. package/dist/core/execution/cli/safe-runner.d.ts +12 -0
  206. package/dist/core/execution/cli/safe-runner.js +7 -0
  207. package/dist/core/execution/cli/safe-runner.js.map +1 -0
  208. package/dist/core/execution/normalizer.d.ts +13 -0
  209. package/dist/core/execution/normalizer.js +9 -0
  210. package/dist/core/execution/normalizer.js.map +1 -0
  211. package/dist/core/execution/preflight.d.ts +24 -0
  212. package/dist/core/execution/preflight.js +8 -0
  213. package/dist/core/execution/preflight.js.map +1 -0
  214. package/dist/core/registry/cards/check_run.annotations.list.yaml +35 -0
  215. package/dist/core/registry/cards/issue.comments.list.yaml +48 -0
  216. package/dist/core/registry/cards/issue.list.yaml +48 -0
  217. package/dist/core/registry/cards/issue.view.yaml +32 -0
  218. package/dist/core/registry/cards/pr.checks.get_failed.yaml +42 -0
  219. package/dist/core/registry/cards/pr.comment.reply.yaml +23 -0
  220. package/dist/core/registry/cards/pr.comment.resolve.yaml +22 -0
  221. package/dist/core/registry/cards/pr.comment.unresolve.yaml +22 -0
  222. package/dist/core/registry/cards/pr.comments.list.yaml +98 -0
  223. package/dist/core/registry/cards/pr.diff.list_files.yaml +43 -0
  224. package/dist/core/registry/cards/pr.list.yaml +48 -0
  225. package/dist/core/registry/cards/pr.mergeability.view.yaml +27 -0
  226. package/dist/core/registry/cards/pr.ready_for_review.set.yaml +24 -0
  227. package/dist/core/registry/cards/pr.reviews.list.yaml +47 -0
  228. package/dist/core/registry/cards/pr.status.checks.yaml +42 -0
  229. package/dist/core/registry/cards/pr.view.yaml +32 -0
  230. package/dist/core/registry/cards/repo.view.yaml +34 -0
  231. package/dist/core/registry/cards/workflow_job.logs.analyze.yaml +33 -0
  232. package/dist/core/registry/cards/workflow_job.logs.get.yaml +24 -0
  233. package/dist/core/registry/cards/workflow_run.jobs.list.yaml +35 -0
  234. package/dist/core/registry/cards/workflow_runs.list.yaml +45 -0
  235. package/dist/core/registry/index.d.ts +15 -0
  236. package/dist/core/registry/index.js +12 -0
  237. package/dist/core/registry/index.js.map +1 -0
  238. package/dist/core/registry/operation-card-schema.d.ts +167 -0
  239. package/dist/core/registry/operation-card-schema.js +7 -0
  240. package/dist/core/registry/operation-card-schema.js.map +1 -0
  241. package/dist/core/registry/schema-validator.d.ts +16 -0
  242. package/dist/core/registry/schema-validator.js +9 -0
  243. package/dist/core/registry/schema-validator.js.map +1 -0
  244. package/dist/core/registry/types.d.ts +51 -0
  245. package/dist/core/registry/types.js +1 -0
  246. package/dist/core/registry/types.js.map +1 -0
  247. package/dist/core/routing/capability-registry.d.ts +8 -0
  248. package/dist/core/routing/capability-registry.js +15 -0
  249. package/dist/core/routing/capability-registry.js.map +1 -0
  250. package/dist/core/routing/engine.d.ts +32 -0
  251. package/dist/core/routing/engine.js +23 -0
  252. package/dist/core/routing/engine.js.map +1 -0
  253. package/dist/core/routing/policy.d.ts +3 -0
  254. package/dist/core/routing/policy.js +7 -0
  255. package/dist/core/routing/policy.js.map +1 -0
  256. package/dist/core/routing/reason-codes.d.ts +4 -0
  257. package/dist/core/routing/reason-codes.js +15 -0
  258. package/dist/core/routing/reason-codes.js.map +1 -0
  259. package/dist/core/telemetry/logger.d.ts +8 -0
  260. package/dist/core/telemetry/logger.js +9 -0
  261. package/dist/core/telemetry/logger.js.map +1 -0
  262. package/dist/core/telemetry/metrics.d.ts +7 -0
  263. package/dist/core/telemetry/metrics.js +1 -0
  264. package/dist/core/telemetry/metrics.js.map +1 -0
  265. package/dist/gql/client.d.ts +183 -0
  266. package/dist/gql/client.js +17 -0
  267. package/dist/gql/client.js.map +1 -0
  268. package/dist/gql/generated/common-types.d.ts +36 -0
  269. package/dist/gql/generated/common-types.js +1 -0
  270. package/dist/gql/generated/common-types.js.map +1 -0
  271. package/dist/gql/operations/issue-comments-list.generated.d.ts +59 -0
  272. package/dist/gql/operations/issue-comments-list.generated.js +9 -0
  273. package/dist/gql/operations/issue-comments-list.generated.js.map +1 -0
  274. package/dist/gql/operations/issue-list.generated.d.ts +40 -0
  275. package/dist/gql/operations/issue-list.generated.js +9 -0
  276. package/dist/gql/operations/issue-list.generated.js.map +1 -0
  277. package/dist/gql/operations/issue-view.generated.d.ts +31 -0
  278. package/dist/gql/operations/issue-view.generated.js +9 -0
  279. package/dist/gql/operations/issue-view.generated.js.map +1 -0
  280. package/dist/gql/operations/pr-comment-reply.generated.d.ts +26 -0
  281. package/dist/gql/operations/pr-comment-reply.generated.js +25 -0
  282. package/dist/gql/operations/pr-comment-reply.generated.js.map +1 -0
  283. package/dist/gql/operations/pr-comment-resolve.generated.d.ts +26 -0
  284. package/dist/gql/operations/pr-comment-resolve.generated.js +24 -0
  285. package/dist/gql/operations/pr-comment-resolve.generated.js.map +1 -0
  286. package/dist/gql/operations/pr-comment-unresolve.generated.d.ts +26 -0
  287. package/dist/gql/operations/pr-comment-unresolve.generated.js +24 -0
  288. package/dist/gql/operations/pr-comment-unresolve.generated.js.map +1 -0
  289. package/dist/gql/operations/pr-comments-list.generated.d.ts +84 -0
  290. package/dist/gql/operations/pr-comments-list.generated.js +58 -0
  291. package/dist/gql/operations/pr-comments-list.generated.js.map +1 -0
  292. package/dist/gql/operations/pr-diff-list-files.generated.d.ts +42 -0
  293. package/dist/gql/operations/pr-diff-list-files.generated.js +9 -0
  294. package/dist/gql/operations/pr-diff-list-files.generated.js.map +1 -0
  295. package/dist/gql/operations/pr-list.generated.d.ts +40 -0
  296. package/dist/gql/operations/pr-list.generated.js +9 -0
  297. package/dist/gql/operations/pr-list.generated.js.map +1 -0
  298. package/dist/gql/operations/pr-reviews-list.generated.d.ts +64 -0
  299. package/dist/gql/operations/pr-reviews-list.generated.js +9 -0
  300. package/dist/gql/operations/pr-reviews-list.generated.js.map +1 -0
  301. package/dist/gql/operations/pr-view.generated.d.ts +31 -0
  302. package/dist/gql/operations/pr-view.generated.js +9 -0
  303. package/dist/gql/operations/pr-view.generated.js.map +1 -0
  304. package/dist/gql/operations/repo-view.generated.d.ts +33 -0
  305. package/dist/gql/operations/repo-view.generated.js +9 -0
  306. package/dist/gql/operations/repo-view.generated.js.map +1 -0
  307. package/dist/index.d.ts +22 -0
  308. package/dist/index.js +43 -0
  309. package/dist/index.js.map +1 -0
  310. package/dist/shared/constants.d.ts +3 -0
  311. package/dist/shared/constants.js +6 -0
  312. package/dist/shared/constants.js.map +1 -0
  313. package/dist/shared/types.d.ts +3 -0
  314. package/dist/shared/types.js +1 -0
  315. package/dist/shared/types.js.map +1 -0
  316. package/dist/shared/utils.d.ts +3 -0
  317. package/dist/shared/utils.js +8 -0
  318. package/dist/shared/utils.js.map +1 -0
  319. package/package.json +79 -0
@@ -0,0 +1,88 @@
1
+ import {
2
+ operationCardSchema
3
+ } from "./chunk-2W4L5YCC.js";
4
+
5
+ // src/core/registry/index.ts
6
+ import { readdirSync, readFileSync } from "fs";
7
+ import { dirname, extname, join } from "path";
8
+ import { fileURLToPath } from "url";
9
+ import Ajv from "ajv";
10
+ import { load as parseYaml } from "js-yaml";
11
+ var ajv = new Ajv({ allErrors: true, strict: false });
12
+ var validateCard = ajv.compile(operationCardSchema);
13
+ function cardDirectory() {
14
+ const currentDir = dirname(fileURLToPath(import.meta.url));
15
+ return join(currentDir, "cards");
16
+ }
17
+ function loadCardsFromYaml() {
18
+ const directory = cardDirectory();
19
+ const preferredOrder = [
20
+ "repo.view",
21
+ "issue.view",
22
+ "issue.list",
23
+ "issue.comments.list",
24
+ "pr.view",
25
+ "pr.list",
26
+ "pr.comments.list",
27
+ "pr.reviews.list",
28
+ "pr.diff.list_files",
29
+ "pr.status.checks",
30
+ "pr.checks.get_failed",
31
+ "pr.mergeability.view",
32
+ "pr.comment.reply",
33
+ "pr.comment.resolve",
34
+ "pr.comment.unresolve",
35
+ "pr.ready_for_review.set",
36
+ "check_run.annotations.list",
37
+ "workflow_runs.list",
38
+ "workflow_run.jobs.list",
39
+ "workflow_job.logs.get",
40
+ "workflow_job.logs.analyze"
41
+ ];
42
+ const orderMap = new Map(preferredOrder.map((id, index) => [id, index]));
43
+ const entries = readdirSync(directory).filter((entry) => {
44
+ const extension = extname(entry).toLowerCase();
45
+ return extension === ".yaml" || extension === ".yml";
46
+ }).sort((a, b) => {
47
+ const capabilityA = a.replace(/\.ya?ml$/i, "");
48
+ const capabilityB = b.replace(/\.ya?ml$/i, "");
49
+ const orderA = orderMap.get(capabilityA) ?? Number.MAX_SAFE_INTEGER;
50
+ const orderB = orderMap.get(capabilityB) ?? Number.MAX_SAFE_INTEGER;
51
+ if (orderA !== orderB) {
52
+ return orderA - orderB;
53
+ }
54
+ return a.localeCompare(b);
55
+ });
56
+ return entries.map((entry) => {
57
+ const filePath = join(directory, entry);
58
+ const raw = readFileSync(filePath, "utf8");
59
+ const parsed = parseYaml(raw);
60
+ const validation = validateOperationCard(parsed);
61
+ if (!validation.ok) {
62
+ throw new Error(`Invalid operation card '${entry}': ${validation.error}`);
63
+ }
64
+ return parsed;
65
+ });
66
+ }
67
+ function validateOperationCard(card) {
68
+ const valid = validateCard(card);
69
+ if (!valid) {
70
+ const message = validateCard.errors?.[0]?.message ?? "Operation card schema validation failed";
71
+ return { ok: false, error: message };
72
+ }
73
+ return { ok: true };
74
+ }
75
+ var operationCards = loadCardsFromYaml();
76
+ function listOperationCards() {
77
+ return [...operationCards];
78
+ }
79
+ function getOperationCard(capabilityId) {
80
+ return operationCards.find((card) => card.capability_id === capabilityId);
81
+ }
82
+
83
+ export {
84
+ validateOperationCard,
85
+ listOperationCards,
86
+ getOperationCard
87
+ };
88
+ //# sourceMappingURL=chunk-MT4U5DYD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/registry/index.ts"],"sourcesContent":["import { readdirSync, readFileSync } from \"node:fs\"\nimport { dirname, extname, join } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nimport Ajv from \"ajv\"\nimport { load as parseYaml } from \"js-yaml\"\n\nimport type { OperationCard } from \"./types.js\"\nimport { operationCardSchema } from \"./operation-card-schema.js\"\n\nconst ajv = new Ajv({ allErrors: true, strict: false })\nconst validateCard = ajv.compile(operationCardSchema)\n\nfunction cardDirectory(): string {\n const currentDir = dirname(fileURLToPath(import.meta.url))\n return join(currentDir, \"cards\")\n}\n\nfunction loadCardsFromYaml(): OperationCard[] {\n const directory = cardDirectory()\n const preferredOrder = [\n \"repo.view\",\n \"issue.view\",\n \"issue.list\",\n \"issue.comments.list\",\n \"pr.view\",\n \"pr.list\",\n \"pr.comments.list\",\n \"pr.reviews.list\",\n \"pr.diff.list_files\",\n \"pr.status.checks\",\n \"pr.checks.get_failed\",\n \"pr.mergeability.view\",\n \"pr.comment.reply\",\n \"pr.comment.resolve\",\n \"pr.comment.unresolve\",\n \"pr.ready_for_review.set\",\n \"check_run.annotations.list\",\n \"workflow_runs.list\",\n \"workflow_run.jobs.list\",\n \"workflow_job.logs.get\",\n \"workflow_job.logs.analyze\"\n ]\n const orderMap = new Map(preferredOrder.map((id, index) => [id, index]))\n\n const entries = readdirSync(directory)\n .filter((entry) => {\n const extension = extname(entry).toLowerCase()\n return extension === \".yaml\" || extension === \".yml\"\n })\n .sort((a, b) => {\n const capabilityA = a.replace(/\\.ya?ml$/i, \"\")\n const capabilityB = b.replace(/\\.ya?ml$/i, \"\")\n const orderA = orderMap.get(capabilityA) ?? Number.MAX_SAFE_INTEGER\n const orderB = orderMap.get(capabilityB) ?? Number.MAX_SAFE_INTEGER\n\n if (orderA !== orderB) {\n return orderA - orderB\n }\n\n return a.localeCompare(b)\n })\n\n return entries.map((entry): OperationCard => {\n const filePath = join(directory, entry)\n const raw = readFileSync(filePath, \"utf8\")\n const parsed = parseYaml(raw)\n const validation = validateOperationCard(parsed)\n if (!validation.ok) {\n throw new Error(`Invalid operation card '${entry}': ${validation.error}`)\n }\n\n return parsed as OperationCard\n })\n}\n\nexport function validateOperationCard(card: unknown): { ok: true } | { ok: false; error: string } {\n const valid = validateCard(card)\n if (!valid) {\n const message = validateCard.errors?.[0]?.message ?? \"Operation card schema validation failed\"\n return { ok: false, error: message }\n }\n\n return { ok: true }\n}\n\nconst operationCards = loadCardsFromYaml()\n\nexport function listOperationCards(): OperationCard[] {\n return [...operationCards]\n}\n\nexport function getOperationCard(capabilityId: string): OperationCard | undefined {\n return operationCards.find((card) => card.capability_id === capabilityId)\n}\n"],"mappings":";;;;;AAAA,SAAS,aAAa,oBAAoB;AAC1C,SAAS,SAAS,SAAS,YAAY;AACvC,SAAS,qBAAqB;AAE9B,OAAO,SAAS;AAChB,SAAS,QAAQ,iBAAiB;AAKlC,IAAM,MAAM,IAAI,IAAI,EAAE,WAAW,MAAM,QAAQ,MAAM,CAAC;AACtD,IAAM,eAAe,IAAI,QAAQ,mBAAmB;AAEpD,SAAS,gBAAwB;AAC/B,QAAM,aAAa,QAAQ,cAAc,YAAY,GAAG,CAAC;AACzD,SAAO,KAAK,YAAY,OAAO;AACjC;AAEA,SAAS,oBAAqC;AAC5C,QAAM,YAAY,cAAc;AAChC,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,WAAW,IAAI,IAAI,eAAe,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC;AAEvE,QAAM,UAAU,YAAY,SAAS,EAClC,OAAO,CAAC,UAAU;AACjB,UAAM,YAAY,QAAQ,KAAK,EAAE,YAAY;AAC7C,WAAO,cAAc,WAAW,cAAc;AAAA,EAChD,CAAC,EACA,KAAK,CAAC,GAAG,MAAM;AACd,UAAM,cAAc,EAAE,QAAQ,aAAa,EAAE;AAC7C,UAAM,cAAc,EAAE,QAAQ,aAAa,EAAE;AAC7C,UAAM,SAAS,SAAS,IAAI,WAAW,KAAK,OAAO;AACnD,UAAM,SAAS,SAAS,IAAI,WAAW,KAAK,OAAO;AAEnD,QAAI,WAAW,QAAQ;AACrB,aAAO,SAAS;AAAA,IAClB;AAEA,WAAO,EAAE,cAAc,CAAC;AAAA,EAC1B,CAAC;AAEH,SAAO,QAAQ,IAAI,CAAC,UAAyB;AAC3C,UAAM,WAAW,KAAK,WAAW,KAAK;AACtC,UAAM,MAAM,aAAa,UAAU,MAAM;AACzC,UAAM,SAAS,UAAU,GAAG;AAC5B,UAAM,aAAa,sBAAsB,MAAM;AAC/C,QAAI,CAAC,WAAW,IAAI;AAClB,YAAM,IAAI,MAAM,2BAA2B,KAAK,MAAM,WAAW,KAAK,EAAE;AAAA,IAC1E;AAEA,WAAO;AAAA,EACT,CAAC;AACH;AAEO,SAAS,sBAAsB,MAA4D;AAChG,QAAM,QAAQ,aAAa,IAAI;AAC/B,MAAI,CAAC,OAAO;AACV,UAAM,UAAU,aAAa,SAAS,CAAC,GAAG,WAAW;AACrD,WAAO,EAAE,IAAI,OAAO,OAAO,QAAQ;AAAA,EACrC;AAEA,SAAO,EAAE,IAAI,KAAK;AACpB;AAEA,IAAM,iBAAiB,kBAAkB;AAElC,SAAS,qBAAsC;AACpD,SAAO,CAAC,GAAG,cAAc;AAC3B;AAEO,SAAS,iBAAiB,cAAiD;AAChF,SAAO,eAAe,KAAK,CAAC,SAAS,KAAK,kBAAkB,YAAY;AAC1E;","names":[]}
@@ -0,0 +1,28 @@
1
+ // src/gql/operations/pr-view.generated.ts
2
+ var PrViewDocument = `
3
+ query PrView($owner: String!, $name: String!, $prNumber: Int!) {
4
+ repository(owner: $owner, name: $name) {
5
+ pullRequest(number: $prNumber) {
6
+ id
7
+ number
8
+ title
9
+ state
10
+ url
11
+ }
12
+ }
13
+ }
14
+ `;
15
+ var defaultWrapper = (action, _operationName, _operationType, _variables) => action();
16
+ function getSdk(client, withWrapper = defaultWrapper) {
17
+ return {
18
+ PrView(variables, requestHeaders, signal) {
19
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: PrViewDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "PrView", "query", variables);
20
+ }
21
+ };
22
+ }
23
+
24
+ export {
25
+ PrViewDocument,
26
+ getSdk
27
+ };
28
+ //# sourceMappingURL=chunk-NFF5VF4U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gql/operations/pr-view.generated.ts"],"sourcesContent":["import type * as Types from '../generated/common-types';\n\nimport type { GraphQLClient, RequestOptions } from 'graphql-request';\ntype GraphQLClientRequestHeaders = RequestOptions['requestHeaders'];\nexport type PrViewQueryVariables = Types.Exact<{\n owner: Types.Scalars['String']['input'];\n name: Types.Scalars['String']['input'];\n prNumber: Types.Scalars['Int']['input'];\n}>;\n\n\nexport type PrViewQuery = { __typename?: 'Query', repository?: { __typename?: 'Repository', pullRequest?: { __typename?: 'PullRequest', id: string, number: number, title: string, state: Types.PullRequestState, url: any } | null } | null };\n\n\nexport const PrViewDocument = `\n query PrView($owner: String!, $name: String!, $prNumber: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $prNumber) {\n id\n number\n title\n state\n url\n }\n }\n}\n `;\n\nexport type SdkFunctionWrapper = <T>(action: (requestHeaders?:Record<string, string>) => Promise<T>, operationName: string, operationType?: string, variables?: any) => Promise<T>;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType, _variables) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n PrView(variables: PrViewQueryVariables, requestHeaders?: GraphQLClientRequestHeaders, signal?: RequestInit['signal']): Promise<PrViewQuery> {\n return withWrapper((wrappedRequestHeaders) => client.request<PrViewQuery>({ document: PrViewDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), 'PrView', 'query', variables);\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;"],"mappings":";AAcO,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiB9B,IAAM,iBAAqC,CAAC,QAAQ,gBAAgB,gBAAgB,eAAe,OAAO;AAEnG,SAAS,OAAO,QAAuB,cAAkC,gBAAgB;AAC9F,SAAO;AAAA,IACL,OAAO,WAAiC,gBAA8C,QAAsD;AAC1I,aAAO,YAAY,CAAC,0BAA0B,OAAO,QAAqB,EAAE,UAAU,gBAAgB,WAAW,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,OAAO,CAAC,GAAG,UAAU,SAAS,SAAS;AAAA,IAC3N;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,209 @@
1
+ import {
2
+ logMetric
3
+ } from "./chunk-W2TKG2UL.js";
4
+ import {
5
+ normalizeError
6
+ } from "./chunk-QEAMC4IJ.js";
7
+ import {
8
+ validateInput,
9
+ validateOutput
10
+ } from "./chunk-5JRLVOF2.js";
11
+ import {
12
+ errorCodes
13
+ } from "./chunk-UOJWOHRM.js";
14
+
15
+ // src/core/execute/execute.ts
16
+ function parsePredicateValue(raw) {
17
+ const value = raw.trim();
18
+ if (value === "true") {
19
+ return true;
20
+ }
21
+ if (value === "false") {
22
+ return false;
23
+ }
24
+ if (value === "null") {
25
+ return null;
26
+ }
27
+ const numeric = Number(value);
28
+ if (!Number.isNaN(numeric) && value.length > 0) {
29
+ return numeric;
30
+ }
31
+ return value.replace(/^['"]|['"]$/g, "");
32
+ }
33
+ function resolvePathValue(source, path) {
34
+ const segments = path.split(".").filter((segment) => segment.length > 0);
35
+ let current = source;
36
+ for (const segment of segments) {
37
+ if (typeof current !== "object" || current === null || Array.isArray(current)) {
38
+ return void 0;
39
+ }
40
+ current = current[segment];
41
+ }
42
+ return current;
43
+ }
44
+ function evaluateSuitabilityPreferred(card, params, routingContext) {
45
+ const rules = card.routing.suitability ?? [];
46
+ for (const rule of rules) {
47
+ const alwaysMatch = /^(cli|graphql|rest)$/i.exec(rule.predicate.trim());
48
+ const alwaysRoute = alwaysMatch?.[1];
49
+ if (rule.when === "always" && alwaysRoute) {
50
+ return alwaysRoute.toLowerCase();
51
+ }
52
+ const conditionalMatch = /^(cli|graphql|rest)\s+if\s+([a-zA-Z0-9_.]+)\s*(==|!=)\s*(.+)$/i.exec(
53
+ rule.predicate.trim()
54
+ );
55
+ if (!conditionalMatch) {
56
+ continue;
57
+ }
58
+ const [, targetRouteRaw = "", rawPath = "", operator = "==", rawExpected = ""] = conditionalMatch;
59
+ const targetRoute = targetRouteRaw.toLowerCase();
60
+ const source = rule.when === "env" ? routingContext : params;
61
+ const path = rawPath.startsWith("params.") || rawPath.startsWith("env.") ? rawPath.split(".").slice(1).join(".") : rawPath;
62
+ const actual = resolvePathValue(source, path);
63
+ const expected = parsePredicateValue(rawExpected);
64
+ const matches = operator === "==" ? actual === expected : actual !== expected;
65
+ if (matches) {
66
+ return targetRoute;
67
+ }
68
+ }
69
+ return card.routing.preferred;
70
+ }
71
+ function routePlan(card, params, routingContext) {
72
+ const preferred = evaluateSuitabilityPreferred(card, params, routingContext);
73
+ const planned = /* @__PURE__ */ new Set([preferred, ...card.routing.fallbacks]);
74
+ return [...planned];
75
+ }
76
+ async function execute(options) {
77
+ const inputValidation = validateInput(options.card.input_schema, options.params);
78
+ if (!inputValidation.ok) {
79
+ return normalizeError(
80
+ {
81
+ code: errorCodes.Validation,
82
+ message: "Input schema validation failed",
83
+ retryable: false,
84
+ details: { ajvErrors: inputValidation.errors }
85
+ },
86
+ options.card.routing.preferred,
87
+ {
88
+ capabilityId: options.card.capability_id,
89
+ reason: "INPUT_VALIDATION"
90
+ }
91
+ );
92
+ }
93
+ const attempts = [];
94
+ const maxAttemptsPerRoute = Math.max(1, options.retry?.maxAttemptsPerRoute ?? 1);
95
+ let lastError;
96
+ let firstError;
97
+ const routingContext = options.routingContext ?? {};
98
+ for (const route of routePlan(options.card, options.params, routingContext)) {
99
+ logMetric("route.plan", 1, {
100
+ capability_id: options.card.capability_id,
101
+ route
102
+ });
103
+ const preflight = await options.preflight(route);
104
+ if (!preflight.ok) {
105
+ logMetric("route.preflight_skipped", 1, {
106
+ capability_id: options.card.capability_id,
107
+ route,
108
+ error_code: preflight.code
109
+ });
110
+ attempts.push({ route, status: "skipped", error_code: preflight.code });
111
+ lastError = {
112
+ code: preflight.code,
113
+ message: preflight.message,
114
+ retryable: preflight.retryable,
115
+ ...preflight.details ? { details: preflight.details } : {}
116
+ };
117
+ firstError ??= lastError;
118
+ continue;
119
+ }
120
+ const routeHandler = options.routes[route];
121
+ if (typeof routeHandler !== "function") {
122
+ logMetric("route.missing_handler", 1, {
123
+ capability_id: options.card.capability_id,
124
+ route
125
+ });
126
+ const handlerError = {
127
+ code: errorCodes.AdapterUnsupported,
128
+ message: `No route handler configured for '${route}'`,
129
+ retryable: false,
130
+ details: { route }
131
+ };
132
+ attempts.push({ route, status: "skipped", error_code: errorCodes.AdapterUnsupported });
133
+ lastError = handlerError;
134
+ firstError ??= handlerError;
135
+ continue;
136
+ }
137
+ for (let attempt = 0; attempt < maxAttemptsPerRoute; attempt += 1) {
138
+ const result = await routeHandler(options.params);
139
+ logMetric("route.attempt", 1, {
140
+ capability_id: options.card.capability_id,
141
+ route,
142
+ ok: result.ok
143
+ });
144
+ const attemptRecord = {
145
+ route,
146
+ status: result.ok ? "success" : "error"
147
+ };
148
+ if (result.error?.code) {
149
+ attemptRecord.error_code = result.error.code;
150
+ }
151
+ attempts.push(attemptRecord);
152
+ if (result.ok) {
153
+ const outputValidation = validateOutput(options.card.output_schema, result.data);
154
+ if (!outputValidation.ok) {
155
+ const envelope2 = normalizeError(
156
+ {
157
+ code: errorCodes.Server,
158
+ message: "Output schema validation failed",
159
+ retryable: false,
160
+ details: { ajvErrors: outputValidation.errors }
161
+ },
162
+ route,
163
+ {
164
+ capabilityId: options.card.capability_id,
165
+ reason: "OUTPUT_VALIDATION"
166
+ }
167
+ );
168
+ if (options.trace) {
169
+ envelope2.meta.attempts = attempts;
170
+ }
171
+ return envelope2;
172
+ }
173
+ if (options.trace) {
174
+ result.meta.attempts = attempts;
175
+ }
176
+ return result;
177
+ }
178
+ lastError = result.error;
179
+ firstError ??= result.error;
180
+ if (!result.error?.retryable) {
181
+ if (result.error?.code !== errorCodes.AdapterUnsupported) {
182
+ if (options.trace) {
183
+ result.meta.attempts = attempts;
184
+ }
185
+ return result;
186
+ }
187
+ break;
188
+ }
189
+ }
190
+ }
191
+ const finalError = lastError ?? firstError ?? {
192
+ code: errorCodes.Unknown,
193
+ message: "No route produced a result",
194
+ retryable: false
195
+ };
196
+ const envelope = normalizeError(finalError, options.card.routing.preferred, {
197
+ capabilityId: options.card.capability_id,
198
+ reason: "CARD_FALLBACK"
199
+ });
200
+ if (options.trace) {
201
+ envelope.meta.attempts = attempts;
202
+ }
203
+ return envelope;
204
+ }
205
+
206
+ export {
207
+ execute
208
+ };
209
+ //# sourceMappingURL=chunk-Q4RTT3DV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/execute/execute.ts"],"sourcesContent":["import type { ErrorCode } from \"../errors/codes.js\"\nimport { errorCodes } from \"../errors/codes.js\"\nimport type { ResultEnvelope, RouteSource } from \"../contracts/envelope.js\"\nimport type { OperationCard } from \"../registry/types.js\"\nimport { validateInput, validateOutput } from \"../registry/schema-validator.js\"\nimport { normalizeError } from \"../execution/normalizer.js\"\nimport { logMetric } from \"../telemetry/logger.js\"\n\ntype PreflightResult =\n | { ok: true }\n | { ok: false; code: ErrorCode; message: string; retryable: boolean; details?: Record<string, unknown> }\n\ntype ExecuteOptions = {\n card: OperationCard\n params: Record<string, unknown>\n routingContext?: Record<string, unknown>\n trace?: boolean\n retry?: {\n maxAttemptsPerRoute?: number\n }\n preflight: (route: RouteSource) => Promise<PreflightResult>\n routes: Record<RouteSource, (params: Record<string, unknown>) => Promise<ResultEnvelope>>\n}\n\nfunction parsePredicateValue(raw: string): unknown {\n const value = raw.trim()\n if (value === \"true\") {\n return true\n }\n if (value === \"false\") {\n return false\n }\n if (value === \"null\") {\n return null\n }\n\n const numeric = Number(value)\n if (!Number.isNaN(numeric) && value.length > 0) {\n return numeric\n }\n\n return value.replace(/^['\"]|['\"]$/g, \"\")\n}\n\nfunction resolvePathValue(source: Record<string, unknown>, path: string): unknown {\n const segments = path.split(\".\").filter((segment) => segment.length > 0)\n let current: unknown = source\n\n for (const segment of segments) {\n if (typeof current !== \"object\" || current === null || Array.isArray(current)) {\n return undefined\n }\n\n current = (current as Record<string, unknown>)[segment]\n }\n\n return current\n}\n\nfunction evaluateSuitabilityPreferred(\n card: OperationCard,\n params: Record<string, unknown>,\n routingContext: Record<string, unknown>\n): RouteSource {\n const rules = card.routing.suitability ?? []\n\n for (const rule of rules) {\n const alwaysMatch = /^(cli|graphql|rest)$/i.exec(rule.predicate.trim())\n const alwaysRoute = alwaysMatch?.[1]\n if (rule.when === \"always\" && alwaysRoute) {\n return alwaysRoute.toLowerCase() as RouteSource\n }\n\n const conditionalMatch = /^(cli|graphql|rest)\\s+if\\s+([a-zA-Z0-9_.]+)\\s*(==|!=)\\s*(.+)$/i.exec(\n rule.predicate.trim()\n )\n\n if (!conditionalMatch) {\n continue\n }\n\n const [, targetRouteRaw = \"\", rawPath = \"\", operator = \"==\", rawExpected = \"\"] = conditionalMatch\n const targetRoute = targetRouteRaw.toLowerCase() as RouteSource\n const source = rule.when === \"env\" ? routingContext : params\n const path = rawPath.startsWith(\"params.\") || rawPath.startsWith(\"env.\")\n ? rawPath.split(\".\").slice(1).join(\".\")\n : rawPath\n const actual = resolvePathValue(source, path)\n const expected = parsePredicateValue(rawExpected)\n const matches = operator === \"==\" ? actual === expected : actual !== expected\n\n if (matches) {\n return targetRoute\n }\n }\n\n return card.routing.preferred\n}\n\nfunction routePlan(\n card: OperationCard,\n params: Record<string, unknown>,\n routingContext: Record<string, unknown>\n): RouteSource[] {\n const preferred = evaluateSuitabilityPreferred(card, params, routingContext)\n const planned = new Set<RouteSource>([preferred, ...card.routing.fallbacks])\n return [...planned]\n}\n\nexport async function execute(options: ExecuteOptions): Promise<ResultEnvelope> {\n const inputValidation = validateInput(options.card.input_schema, options.params)\n if (!inputValidation.ok) {\n return normalizeError(\n {\n code: errorCodes.Validation,\n message: \"Input schema validation failed\",\n retryable: false,\n details: { ajvErrors: inputValidation.errors }\n },\n options.card.routing.preferred,\n {\n capabilityId: options.card.capability_id,\n reason: \"INPUT_VALIDATION\"\n }\n )\n }\n\n const attempts: NonNullable<ResultEnvelope[\"meta\"][\"attempts\"]> = []\n const maxAttemptsPerRoute = Math.max(1, options.retry?.maxAttemptsPerRoute ?? 1)\n let lastError: ResultEnvelope[\"error\"]\n let firstError: ResultEnvelope[\"error\"]\n\n const routingContext = options.routingContext ?? {}\n\n for (const route of routePlan(options.card, options.params, routingContext)) {\n logMetric(\"route.plan\", 1, {\n capability_id: options.card.capability_id,\n route\n })\n\n const preflight = await options.preflight(route)\n if (!preflight.ok) {\n logMetric(\"route.preflight_skipped\", 1, {\n capability_id: options.card.capability_id,\n route,\n error_code: preflight.code\n })\n attempts.push({ route, status: \"skipped\", error_code: preflight.code })\n lastError = {\n code: preflight.code,\n message: preflight.message,\n retryable: preflight.retryable,\n ...(preflight.details ? { details: preflight.details } : {})\n }\n firstError ??= lastError\n continue\n }\n\n const routeHandler = options.routes[route]\n if (typeof routeHandler !== \"function\") {\n logMetric(\"route.missing_handler\", 1, {\n capability_id: options.card.capability_id,\n route\n })\n\n const handlerError = {\n code: errorCodes.AdapterUnsupported,\n message: `No route handler configured for '${route}'`,\n retryable: false,\n details: { route }\n }\n\n attempts.push({ route, status: \"skipped\", error_code: errorCodes.AdapterUnsupported })\n lastError = handlerError\n firstError ??= handlerError\n continue\n }\n\n for (let attempt = 0; attempt < maxAttemptsPerRoute; attempt += 1) {\n const result = await routeHandler(options.params)\n logMetric(\"route.attempt\", 1, {\n capability_id: options.card.capability_id,\n route,\n ok: result.ok\n })\n const attemptRecord: { route: RouteSource; status: \"success\" | \"error\"; error_code?: ErrorCode } = {\n route,\n status: result.ok ? \"success\" : \"error\"\n }\n if (result.error?.code) {\n attemptRecord.error_code = result.error.code\n }\n attempts.push(attemptRecord)\n\n if (result.ok) {\n const outputValidation = validateOutput(options.card.output_schema, result.data)\n if (!outputValidation.ok) {\n const envelope = normalizeError(\n {\n code: errorCodes.Server,\n message: \"Output schema validation failed\",\n retryable: false,\n details: { ajvErrors: outputValidation.errors }\n },\n route,\n {\n capabilityId: options.card.capability_id,\n reason: \"OUTPUT_VALIDATION\"\n }\n )\n\n if (options.trace) {\n envelope.meta.attempts = attempts\n }\n\n return envelope\n }\n\n if (options.trace) {\n result.meta.attempts = attempts\n }\n return result\n }\n\n lastError = result.error\n firstError ??= result.error\n if (!result.error?.retryable) {\n if (result.error?.code !== errorCodes.AdapterUnsupported) {\n if (options.trace) {\n result.meta.attempts = attempts\n }\n return result\n }\n break\n }\n }\n }\n\n const finalError = lastError ?? firstError ?? {\n code: errorCodes.Unknown,\n message: \"No route produced a result\",\n retryable: false\n }\n\n const envelope = normalizeError(finalError, options.card.routing.preferred, {\n capabilityId: options.card.capability_id,\n reason: \"CARD_FALLBACK\"\n })\n\n if (options.trace) {\n envelope.meta.attempts = attempts\n }\n\n return envelope\n}\n"],"mappings":"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","names":["envelope"]}
@@ -0,0 +1,34 @@
1
+ // src/core/execution/normalizer.ts
2
+ function buildMeta(route, options) {
3
+ const meta = {
4
+ capability_id: options.capabilityId,
5
+ route_used: route
6
+ };
7
+ if (options.reason !== void 0) {
8
+ meta.reason = options.reason;
9
+ }
10
+ if (options.pagination !== void 0) {
11
+ meta.pagination = options.pagination;
12
+ }
13
+ return meta;
14
+ }
15
+ function normalizeResult(data, route, options) {
16
+ return {
17
+ ok: true,
18
+ data,
19
+ meta: buildMeta(route, options)
20
+ };
21
+ }
22
+ function normalizeError(error, route, options) {
23
+ return {
24
+ ok: false,
25
+ error,
26
+ meta: buildMeta(route, options)
27
+ };
28
+ }
29
+
30
+ export {
31
+ normalizeResult,
32
+ normalizeError
33
+ };
34
+ //# sourceMappingURL=chunk-QEAMC4IJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/execution/normalizer.ts"],"sourcesContent":["import type { ResultEnvelope } from \"../contracts/envelope.js\"\nimport type { RouteReasonCode } from \"../routing/reason-codes.js\"\n\ntype MetaInput = {\n capabilityId: string\n reason: RouteReasonCode | undefined\n pagination?: ResultEnvelope[\"meta\"][\"pagination\"]\n}\n\nfunction buildMeta(\n route: \"cli\" | \"rest\" | \"graphql\",\n options: MetaInput\n): ResultEnvelope[\"meta\"] {\n const meta: ResultEnvelope[\"meta\"] = {\n capability_id: options.capabilityId,\n route_used: route\n }\n\n if (options.reason !== undefined) {\n meta.reason = options.reason\n }\n\n if (options.pagination !== undefined) {\n meta.pagination = options.pagination\n }\n\n return meta\n}\n\nexport function normalizeResult<TData>(\n data: TData,\n route: \"cli\" | \"rest\" | \"graphql\",\n options: MetaInput\n): ResultEnvelope<TData> {\n return {\n ok: true,\n data,\n meta: buildMeta(route, options)\n }\n}\n\nexport function normalizeError<TData = unknown>(\n error: NonNullable<ResultEnvelope[\"error\"]>,\n route: \"cli\" | \"rest\" | \"graphql\",\n options: MetaInput\n): ResultEnvelope<TData> {\n return {\n ok: false,\n error,\n meta: buildMeta(route, options)\n }\n}\n"],"mappings":";AASA,SAAS,UACP,OACA,SACwB;AACxB,QAAM,OAA+B;AAAA,IACnC,eAAe,QAAQ;AAAA,IACvB,YAAY;AAAA,EACd;AAEA,MAAI,QAAQ,WAAW,QAAW;AAChC,SAAK,SAAS,QAAQ;AAAA,EACxB;AAEA,MAAI,QAAQ,eAAe,QAAW;AACpC,SAAK,aAAa,QAAQ;AAAA,EAC5B;AAEA,SAAO;AACT;AAEO,SAAS,gBACd,MACA,OACA,SACuB;AACvB,SAAO;AAAA,IACL,IAAI;AAAA,IACJ;AAAA,IACA,MAAM,UAAU,OAAO,OAAO;AAAA,EAChC;AACF;AAEO,SAAS,eACd,OACA,OACA,SACuB;AACvB,SAAO;AAAA,IACL,IAAI;AAAA,IACJ;AAAA,IACA,MAAM,UAAU,OAAO,OAAO;AAAA,EAChC;AACF;","names":[]}
@@ -0,0 +1,30 @@
1
+ import {
2
+ listCapabilities
3
+ } from "./chunk-3RJCF42N.js";
4
+
5
+ // src/cli/commands/capabilities-list.ts
6
+ function parseArgs(argv) {
7
+ return {
8
+ asJson: argv.includes("--json")
9
+ };
10
+ }
11
+ async function capabilitiesListCommand(argv = []) {
12
+ const { asJson } = parseArgs(argv);
13
+ const capabilities = listCapabilities();
14
+ if (asJson) {
15
+ process.stdout.write(`${JSON.stringify(capabilities)}
16
+ `);
17
+ return 0;
18
+ }
19
+ const lines = capabilities.map(
20
+ (item) => `${item.capability_id} - ${item.description}`
21
+ );
22
+ process.stdout.write(`${lines.join("\n")}
23
+ `);
24
+ return 0;
25
+ }
26
+
27
+ export {
28
+ capabilitiesListCommand
29
+ };
30
+ //# sourceMappingURL=chunk-QX34GTH6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/capabilities-list.ts"],"sourcesContent":["import { listCapabilities } from \"../../agent-interface/tools/list-capabilities-tool.js\"\n\nfunction parseArgs(argv: string[]): { asJson: boolean } {\n return {\n asJson: argv.includes(\"--json\")\n }\n}\n\nexport async function capabilitiesListCommand(argv: string[] = []): Promise<number> {\n const { asJson } = parseArgs(argv)\n const capabilities = listCapabilities()\n\n if (asJson) {\n process.stdout.write(`${JSON.stringify(capabilities)}\\n`)\n return 0\n }\n\n const lines = capabilities.map(\n (item) => `${item.capability_id} - ${item.description}`\n )\n process.stdout.write(`${lines.join(\"\\n\")}\\n`)\n return 0\n}\n"],"mappings":";;;;;AAEA,SAAS,UAAU,MAAqC;AACtD,SAAO;AAAA,IACL,QAAQ,KAAK,SAAS,QAAQ;AAAA,EAChC;AACF;AAEA,eAAsB,wBAAwB,OAAiB,CAAC,GAAoB;AAClF,QAAM,EAAE,OAAO,IAAI,UAAU,IAAI;AACjC,QAAM,eAAe,iBAAiB;AAEtC,MAAI,QAAQ;AACV,YAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,YAAY,CAAC;AAAA,CAAI;AACxD,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,aAAa;AAAA,IACzB,CAAC,SAAS,GAAG,KAAK,aAAa,MAAM,KAAK,WAAW;AAAA,EACvD;AACA,UAAQ,OAAO,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA,CAAI;AAC5C,SAAO;AACT;","names":[]}
@@ -0,0 +1,38 @@
1
+ // src/gql/operations/issue-comments-list.generated.ts
2
+ var IssueCommentsListDocument = `
3
+ query IssueCommentsList($owner: String!, $name: String!, $issueNumber: Int!, $first: Int!, $after: String) {
4
+ repository(owner: $owner, name: $name) {
5
+ issue(number: $issueNumber) {
6
+ comments(first: $first, after: $after) {
7
+ nodes {
8
+ id
9
+ body
10
+ createdAt
11
+ url
12
+ author {
13
+ login
14
+ }
15
+ }
16
+ pageInfo {
17
+ endCursor
18
+ hasNextPage
19
+ }
20
+ }
21
+ }
22
+ }
23
+ }
24
+ `;
25
+ var defaultWrapper = (action, _operationName, _operationType, _variables) => action();
26
+ function getSdk(client, withWrapper = defaultWrapper) {
27
+ return {
28
+ IssueCommentsList(variables, requestHeaders, signal) {
29
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: IssueCommentsListDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "IssueCommentsList", "query", variables);
30
+ }
31
+ };
32
+ }
33
+
34
+ export {
35
+ IssueCommentsListDocument,
36
+ getSdk
37
+ };
38
+ //# sourceMappingURL=chunk-QZZC53HF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gql/operations/issue-comments-list.generated.ts"],"sourcesContent":["import type * as Types from '../generated/common-types';\n\nimport type { GraphQLClient, RequestOptions } from 'graphql-request';\ntype GraphQLClientRequestHeaders = RequestOptions['requestHeaders'];\nexport type IssueCommentsListQueryVariables = Types.Exact<{\n owner: Types.Scalars['String']['input'];\n name: Types.Scalars['String']['input'];\n issueNumber: Types.Scalars['Int']['input'];\n first: Types.Scalars['Int']['input'];\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type IssueCommentsListQuery = { __typename?: 'Query', repository?: { __typename?: 'Repository', issue?: { __typename?: 'Issue', comments: { __typename?: 'IssueCommentConnection', nodes?: Array<{ __typename?: 'IssueComment', id: string, body: string, createdAt: any, url: any, author?: { __typename?: 'Bot', login: string } | { __typename?: 'EnterpriseUserAccount', login: string } | { __typename?: 'Mannequin', login: string } | { __typename?: 'Organization', login: string } | { __typename?: 'User', login: string } | null } | null> | null, pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean } } } | null } | null };\n\n\nexport const IssueCommentsListDocument = `\n query IssueCommentsList($owner: String!, $name: String!, $issueNumber: Int!, $first: Int!, $after: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $issueNumber) {\n comments(first: $first, after: $after) {\n nodes {\n id\n body\n createdAt\n url\n author {\n login\n }\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n `;\n\nexport type SdkFunctionWrapper = <T>(action: (requestHeaders?:Record<string, string>) => Promise<T>, operationName: string, operationType?: string, variables?: any) => Promise<T>;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType, _variables) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n IssueCommentsList(variables: IssueCommentsListQueryVariables, requestHeaders?: GraphQLClientRequestHeaders, signal?: RequestInit['signal']): Promise<IssueCommentsListQuery> {\n return withWrapper((wrappedRequestHeaders) => client.request<IssueCommentsListQuery>({ document: IssueCommentsListDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), 'IssueCommentsList', 'query', variables);\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;"],"mappings":";AAgBO,IAAM,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BzC,IAAM,iBAAqC,CAAC,QAAQ,gBAAgB,gBAAgB,eAAe,OAAO;AAEnG,SAAS,OAAO,QAAuB,cAAkC,gBAAgB;AAC9F,SAAO;AAAA,IACL,kBAAkB,WAA4C,gBAA8C,QAAiE;AAC3K,aAAO,YAAY,CAAC,0BAA0B,OAAO,QAAgC,EAAE,UAAU,2BAA2B,WAAW,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,OAAO,CAAC,GAAG,qBAAqB,SAAS,SAAS;AAAA,IAC5P;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,34 @@
1
+ // src/gql/operations/pr-diff-list-files.generated.ts
2
+ var PrDiffListFilesDocument = `
3
+ query PrDiffListFiles($owner: String!, $name: String!, $prNumber: Int!, $first: Int!, $after: String) {
4
+ repository(owner: $owner, name: $name) {
5
+ pullRequest(number: $prNumber) {
6
+ files(first: $first, after: $after) {
7
+ nodes {
8
+ path
9
+ additions
10
+ deletions
11
+ }
12
+ pageInfo {
13
+ hasNextPage
14
+ endCursor
15
+ }
16
+ }
17
+ }
18
+ }
19
+ }
20
+ `;
21
+ var defaultWrapper = (action, _operationName, _operationType, _variables) => action();
22
+ function getSdk(client, withWrapper = defaultWrapper) {
23
+ return {
24
+ PrDiffListFiles(variables, requestHeaders, signal) {
25
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: PrDiffListFilesDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "PrDiffListFiles", "query", variables);
26
+ }
27
+ };
28
+ }
29
+
30
+ export {
31
+ PrDiffListFilesDocument,
32
+ getSdk
33
+ };
34
+ //# sourceMappingURL=chunk-RUQXGZ35.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gql/operations/pr-diff-list-files.generated.ts"],"sourcesContent":["import type * as Types from '../generated/common-types';\n\nimport type { GraphQLClient, RequestOptions } from 'graphql-request';\ntype GraphQLClientRequestHeaders = RequestOptions['requestHeaders'];\nexport type PrDiffListFilesQueryVariables = Types.Exact<{\n owner: Types.Scalars['String']['input'];\n name: Types.Scalars['String']['input'];\n prNumber: Types.Scalars['Int']['input'];\n first: Types.Scalars['Int']['input'];\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type PrDiffListFilesQuery = { __typename?: 'Query', repository?: { __typename?: 'Repository', pullRequest?: { __typename?: 'PullRequest', files?: { __typename?: 'PullRequestChangedFileConnection', nodes?: Array<{ __typename?: 'PullRequestChangedFile', path: string, additions: number, deletions: number } | null> | null, pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null } } | null } | null } | null };\n\n\nexport const PrDiffListFilesDocument = `\n query PrDiffListFiles($owner: String!, $name: String!, $prNumber: Int!, $first: Int!, $after: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $prNumber) {\n files(first: $first, after: $after) {\n nodes {\n path\n additions\n deletions\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n}\n `;\n\nexport type SdkFunctionWrapper = <T>(action: (requestHeaders?:Record<string, string>) => Promise<T>, operationName: string, operationType?: string, variables?: any) => Promise<T>;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType, _variables) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n PrDiffListFiles(variables: PrDiffListFilesQueryVariables, requestHeaders?: GraphQLClientRequestHeaders, signal?: RequestInit['signal']): Promise<PrDiffListFilesQuery> {\n return withWrapper((wrappedRequestHeaders) => client.request<PrDiffListFilesQuery>({ document: PrDiffListFilesDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), 'PrDiffListFiles', 'query', variables);\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;"],"mappings":";AAgBO,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBvC,IAAM,iBAAqC,CAAC,QAAQ,gBAAgB,gBAAgB,eAAe,OAAO;AAEnG,SAAS,OAAO,QAAuB,cAAkC,gBAAgB;AAC9F,SAAO;AAAA,IACL,gBAAgB,WAA0C,gBAA8C,QAA+D;AACrK,aAAO,YAAY,CAAC,0BAA0B,OAAO,QAA8B,EAAE,UAAU,yBAAyB,WAAW,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,OAAO,CAAC,GAAG,mBAAmB,SAAS,SAAS;AAAA,IACtP;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,38 @@
1
+ // src/gql/operations/pr-list.generated.ts
2
+ var PrListDocument = `
3
+ query PrList($owner: String!, $name: String!, $first: Int!, $after: String) {
4
+ repository(owner: $owner, name: $name) {
5
+ pullRequests(
6
+ first: $first
7
+ after: $after
8
+ orderBy: {field: CREATED_AT, direction: DESC}
9
+ ) {
10
+ nodes {
11
+ id
12
+ number
13
+ title
14
+ state
15
+ url
16
+ }
17
+ pageInfo {
18
+ endCursor
19
+ hasNextPage
20
+ }
21
+ }
22
+ }
23
+ }
24
+ `;
25
+ var defaultWrapper = (action, _operationName, _operationType, _variables) => action();
26
+ function getSdk(client, withWrapper = defaultWrapper) {
27
+ return {
28
+ PrList(variables, requestHeaders, signal) {
29
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: PrListDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "PrList", "query", variables);
30
+ }
31
+ };
32
+ }
33
+
34
+ export {
35
+ PrListDocument,
36
+ getSdk
37
+ };
38
+ //# sourceMappingURL=chunk-TCLMLVUQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gql/operations/pr-list.generated.ts"],"sourcesContent":["import type * as Types from '../generated/common-types';\n\nimport type { GraphQLClient, RequestOptions } from 'graphql-request';\ntype GraphQLClientRequestHeaders = RequestOptions['requestHeaders'];\nexport type PrListQueryVariables = Types.Exact<{\n owner: Types.Scalars['String']['input'];\n name: Types.Scalars['String']['input'];\n first: Types.Scalars['Int']['input'];\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type PrListQuery = { __typename?: 'Query', repository?: { __typename?: 'Repository', pullRequests: { __typename?: 'PullRequestConnection', nodes?: Array<{ __typename?: 'PullRequest', id: string, number: number, title: string, state: Types.PullRequestState, url: any } | null> | null, pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean } } } | null };\n\n\nexport const PrListDocument = `\n query PrList($owner: String!, $name: String!, $first: Int!, $after: String) {\n repository(owner: $owner, name: $name) {\n pullRequests(\n first: $first\n after: $after\n orderBy: {field: CREATED_AT, direction: DESC}\n ) {\n nodes {\n id\n number\n title\n state\n url\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n}\n `;\n\nexport type SdkFunctionWrapper = <T>(action: (requestHeaders?:Record<string, string>) => Promise<T>, operationName: string, operationType?: string, variables?: any) => Promise<T>;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType, _variables) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n PrList(variables: PrListQueryVariables, requestHeaders?: GraphQLClientRequestHeaders, signal?: RequestInit['signal']): Promise<PrListQuery> {\n return withWrapper((wrappedRequestHeaders) => client.request<PrListQuery>({ document: PrListDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), 'PrList', 'query', variables);\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;"],"mappings":";AAeO,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2B9B,IAAM,iBAAqC,CAAC,QAAQ,gBAAgB,gBAAgB,eAAe,OAAO;AAEnG,SAAS,OAAO,QAAuB,cAAkC,gBAAgB;AAC9F,SAAO;AAAA,IACL,OAAO,WAAiC,gBAA8C,QAAsD;AAC1I,aAAO,YAAY,CAAC,0BAA0B,OAAO,QAAqB,EAAE,UAAU,gBAAgB,WAAW,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,OAAO,CAAC,GAAG,UAAU,SAAS,SAAS;AAAA,IAC3N;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,52 @@
1
+ import {
2
+ errorCodes
3
+ } from "./chunk-UOJWOHRM.js";
4
+
5
+ // src/core/execution/preflight.ts
6
+ function preflightCheck(input) {
7
+ if (input.route === "rest") {
8
+ return {
9
+ ok: false,
10
+ code: errorCodes.AdapterUnsupported,
11
+ message: "REST route is planned but not implemented in v1",
12
+ retryable: false,
13
+ details: { route: input.route }
14
+ };
15
+ }
16
+ if (input.route === "cli" && input.ghCliAvailable === false) {
17
+ return {
18
+ ok: false,
19
+ code: errorCodes.Validation,
20
+ message: "GitHub CLI is required for cli route",
21
+ retryable: false,
22
+ details: { route: input.route }
23
+ };
24
+ }
25
+ if (input.route === "cli" && input.ghAuthenticated === false) {
26
+ return {
27
+ ok: false,
28
+ code: errorCodes.Auth,
29
+ message: "GitHub CLI authentication is required for cli route",
30
+ retryable: false,
31
+ details: { route: input.route }
32
+ };
33
+ }
34
+ if (input.route === "graphql") {
35
+ const token = input.githubToken?.trim();
36
+ if (!token) {
37
+ return {
38
+ ok: false,
39
+ code: errorCodes.Auth,
40
+ message: "GitHub token is required for graphql route",
41
+ retryable: false,
42
+ details: { route: input.route }
43
+ };
44
+ }
45
+ }
46
+ return { ok: true };
47
+ }
48
+
49
+ export {
50
+ preflightCheck
51
+ };
52
+ //# sourceMappingURL=chunk-TDTKOJKN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/execution/preflight.ts"],"sourcesContent":["import type { RouteSource } from \"../contracts/envelope.js\"\nimport type { ErrorCode } from \"../errors/codes.js\"\nimport { errorCodes } from \"../errors/codes.js\"\n\nexport type PreflightInput = {\n route: RouteSource\n githubToken?: string | null\n ghCliAvailable?: boolean\n ghAuthenticated?: boolean\n}\n\nexport type PreflightResult =\n | { ok: true }\n | {\n ok: false\n code: ErrorCode\n message: string\n retryable: boolean\n details: { route: RouteSource }\n }\n\nexport function preflightCheck(input: PreflightInput): PreflightResult {\n if (input.route === \"rest\") {\n return {\n ok: false,\n code: errorCodes.AdapterUnsupported,\n message: \"REST route is planned but not implemented in v1\",\n retryable: false,\n details: { route: input.route }\n }\n }\n\n if (input.route === \"cli\" && input.ghCliAvailable === false) {\n return {\n ok: false,\n code: errorCodes.Validation,\n message: \"GitHub CLI is required for cli route\",\n retryable: false,\n details: { route: input.route }\n }\n }\n\n if (input.route === \"cli\" && input.ghAuthenticated === false) {\n return {\n ok: false,\n code: errorCodes.Auth,\n message: \"GitHub CLI authentication is required for cli route\",\n retryable: false,\n details: { route: input.route }\n }\n }\n\n if (input.route === \"graphql\") {\n const token = input.githubToken?.trim()\n if (!token) {\n return {\n ok: false,\n code: errorCodes.Auth,\n message: \"GitHub token is required for graphql route\",\n retryable: false,\n details: { route: input.route }\n }\n }\n }\n\n return { ok: true }\n}\n"],"mappings":";;;;;AAqBO,SAAS,eAAe,OAAwC;AACrE,MAAI,MAAM,UAAU,QAAQ;AAC1B,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,MAAM,WAAW;AAAA,MACjB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS,EAAE,OAAO,MAAM,MAAM;AAAA,IAChC;AAAA,EACF;AAEA,MAAI,MAAM,UAAU,SAAS,MAAM,mBAAmB,OAAO;AAC3D,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,MAAM,WAAW;AAAA,MACjB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS,EAAE,OAAO,MAAM,MAAM;AAAA,IAChC;AAAA,EACF;AAEA,MAAI,MAAM,UAAU,SAAS,MAAM,oBAAoB,OAAO;AAC5D,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,MAAM,WAAW;AAAA,MACjB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS,EAAE,OAAO,MAAM,MAAM;AAAA,IAChC;AAAA,EACF;AAEA,MAAI,MAAM,UAAU,WAAW;AAC7B,UAAM,QAAQ,MAAM,aAAa,KAAK;AACtC,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM,WAAW;AAAA,QACjB,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS,EAAE,OAAO,MAAM,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,IAAI,KAAK;AACpB;","names":[]}
@@ -0,0 +1,7 @@
1
+ // src/core/routing/policy.ts
2
+ var routePreferenceOrder = ["cli", "graphql"];
3
+
4
+ export {
5
+ routePreferenceOrder
6
+ };
7
+ //# sourceMappingURL=chunk-UGWIZ3RI.js.map