@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 @@
1
+ {"version":3,"sources":["../src/core/routing/policy.ts"],"sourcesContent":["export const routePreferenceOrder = [\"cli\", \"graphql\"] as const\n"],"mappings":";AAAO,IAAM,uBAAuB,CAAC,OAAO,SAAS;","names":[]}
@@ -0,0 +1,16 @@
1
+ // src/core/errors/codes.ts
2
+ var errorCodes = {
3
+ Auth: "AUTH",
4
+ NotFound: "NOT_FOUND",
5
+ Validation: "VALIDATION",
6
+ RateLimit: "RATE_LIMIT",
7
+ Network: "NETWORK",
8
+ Server: "SERVER",
9
+ AdapterUnsupported: "ADAPTER_UNSUPPORTED",
10
+ Unknown: "UNKNOWN"
11
+ };
12
+
13
+ export {
14
+ errorCodes
15
+ };
16
+ //# sourceMappingURL=chunk-UOJWOHRM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/errors/codes.ts"],"sourcesContent":["export const errorCodes = {\n Auth: \"AUTH\",\n NotFound: \"NOT_FOUND\",\n Validation: \"VALIDATION\",\n RateLimit: \"RATE_LIMIT\",\n Network: \"NETWORK\",\n Server: \"SERVER\",\n AdapterUnsupported: \"ADAPTER_UNSUPPORTED\",\n Unknown: \"UNKNOWN\"\n} as const\n\nexport type ErrorCode = (typeof errorCodes)[keyof typeof errorCodes]\n"],"mappings":";AAAO,IAAM,aAAa;AAAA,EACxB,MAAM;AAAA,EACN,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,oBAAoB;AAAA,EACpB,SAAS;AACX;","names":[]}
@@ -0,0 +1,42 @@
1
+ // src/gql/operations/pr-reviews-list.generated.ts
2
+ var PrReviewsListDocument = `
3
+ query PrReviewsList($owner: String!, $name: String!, $prNumber: Int!, $first: Int!, $after: String) {
4
+ repository(owner: $owner, name: $name) {
5
+ pullRequest(number: $prNumber) {
6
+ reviews(first: $first, after: $after) {
7
+ nodes {
8
+ id
9
+ author {
10
+ login
11
+ }
12
+ body
13
+ state
14
+ submittedAt
15
+ url
16
+ commit {
17
+ oid
18
+ }
19
+ }
20
+ pageInfo {
21
+ hasNextPage
22
+ endCursor
23
+ }
24
+ }
25
+ }
26
+ }
27
+ }
28
+ `;
29
+ var defaultWrapper = (action, _operationName, _operationType, _variables) => action();
30
+ function getSdk(client, withWrapper = defaultWrapper) {
31
+ return {
32
+ PrReviewsList(variables, requestHeaders, signal) {
33
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: PrReviewsListDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "PrReviewsList", "query", variables);
34
+ }
35
+ };
36
+ }
37
+
38
+ export {
39
+ PrReviewsListDocument,
40
+ getSdk
41
+ };
42
+ //# sourceMappingURL=chunk-VD5NXQP7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gql/operations/pr-reviews-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 PrReviewsListQueryVariables = 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 PrReviewsListQuery = { __typename?: 'Query', repository?: { __typename?: 'Repository', pullRequest?: { __typename?: 'PullRequest', reviews?: { __typename?: 'PullRequestReviewConnection', nodes?: Array<{ __typename?: 'PullRequestReview', id: string, body: string, state: Types.PullRequestReviewState, submittedAt?: any | null, url: any, author?: { __typename?: 'Bot', login: string } | { __typename?: 'EnterpriseUserAccount', login: string } | { __typename?: 'Mannequin', login: string } | { __typename?: 'Organization', login: string } | { __typename?: 'User', login: string } | null, commit?: { __typename?: 'Commit', oid: any } | null } | null> | null, pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null } } | null } | null } | null };\n\n\nexport const PrReviewsListDocument = `\n query PrReviewsList($owner: String!, $name: String!, $prNumber: Int!, $first: Int!, $after: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $prNumber) {\n reviews(first: $first, after: $after) {\n nodes {\n id\n author {\n login\n }\n body\n state\n submittedAt\n url\n commit {\n oid\n }\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 PrReviewsList(variables: PrReviewsListQueryVariables, requestHeaders?: GraphQLClientRequestHeaders, signal?: RequestInit['signal']): Promise<PrReviewsListQuery> {\n return withWrapper((wrappedRequestHeaders) => client.request<PrReviewsListQuery>({ document: PrReviewsListDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), 'PrReviewsList', 'query', variables);\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;"],"mappings":";AAgBO,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BrC,IAAM,iBAAqC,CAAC,QAAQ,gBAAgB,gBAAgB,eAAe,OAAO;AAEnG,SAAS,OAAO,QAAuB,cAAkC,gBAAgB;AAC9F,SAAO;AAAA,IACL,cAAc,WAAwC,gBAA8C,QAA6D;AAC/J,aAAO,YAAY,CAAC,0BAA0B,OAAO,QAA4B,EAAE,UAAU,uBAAuB,WAAW,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,OAAO,CAAC,GAAG,iBAAiB,SAAS,SAAS;AAAA,IAChP;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,37 @@
1
+ // src/core/telemetry/logger.ts
2
+ var SENSITIVE_KEY_PATTERN = /(token|authorization|cookie|secret|password|api[_-]?key)/i;
3
+ function redactValue(value) {
4
+ if (Array.isArray(value)) {
5
+ return value.map(redactValue);
6
+ }
7
+ if (value && typeof value === "object") {
8
+ const redacted = {};
9
+ for (const [key, nested] of Object.entries(value)) {
10
+ redacted[key] = SENSITIVE_KEY_PATTERN.test(key) ? "[REDACTED]" : redactValue(nested);
11
+ }
12
+ return redacted;
13
+ }
14
+ return value;
15
+ }
16
+ function sanitizeTelemetryContext(context) {
17
+ return redactValue(context);
18
+ }
19
+ function logMetric(name, value, context = {}) {
20
+ if (process.env.GHX_TELEMETRY_STDOUT !== "1") {
21
+ return;
22
+ }
23
+ const payload = {
24
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
25
+ metric: name,
26
+ value,
27
+ context: sanitizeTelemetryContext(context)
28
+ };
29
+ process.stdout.write(`${JSON.stringify(payload)}
30
+ `);
31
+ }
32
+
33
+ export {
34
+ sanitizeTelemetryContext,
35
+ logMetric
36
+ };
37
+ //# sourceMappingURL=chunk-W2TKG2UL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/telemetry/logger.ts"],"sourcesContent":["type Primitive = string | number | boolean | null\n\ntype LogValue = Primitive | LogValue[] | { [key: string]: LogValue }\n\nconst SENSITIVE_KEY_PATTERN = /(token|authorization|cookie|secret|password|api[_-]?key)/i\n\nfunction redactValue(value: LogValue): LogValue {\n if (Array.isArray(value)) {\n return value.map(redactValue)\n }\n\n if (value && typeof value === \"object\") {\n const redacted: Record<string, LogValue> = {}\n for (const [key, nested] of Object.entries(value)) {\n redacted[key] = SENSITIVE_KEY_PATTERN.test(key) ? \"[REDACTED]\" : redactValue(nested)\n }\n return redacted\n }\n\n return value\n}\n\nexport function sanitizeTelemetryContext(context: Record<string, LogValue>): Record<string, LogValue> {\n return redactValue(context) as Record<string, LogValue>\n}\n\nexport function logMetric(name: string, value: number, context: Record<string, LogValue> = {}): void {\n if (process.env.GHX_TELEMETRY_STDOUT !== \"1\") {\n return\n }\n\n const payload = {\n timestamp: new Date().toISOString(),\n metric: name,\n value,\n context: sanitizeTelemetryContext(context)\n }\n\n process.stdout.write(`${JSON.stringify(payload)}\\n`)\n}\n"],"mappings":";AAIA,IAAM,wBAAwB;AAE9B,SAAS,YAAY,OAA2B;AAC9C,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,WAAW;AAAA,EAC9B;AAEA,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,UAAM,WAAqC,CAAC;AAC5C,eAAW,CAAC,KAAK,MAAM,KAAK,OAAO,QAAQ,KAAK,GAAG;AACjD,eAAS,GAAG,IAAI,sBAAsB,KAAK,GAAG,IAAI,eAAe,YAAY,MAAM;AAAA,IACrF;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,yBAAyB,SAA6D;AACpG,SAAO,YAAY,OAAO;AAC5B;AAEO,SAAS,UAAU,MAAc,OAAe,UAAoC,CAAC,GAAS;AACnG,MAAI,QAAQ,IAAI,yBAAyB,KAAK;AAC5C;AAAA,EACF;AAEA,QAAM,UAAU;AAAA,IACd,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,QAAQ;AAAA,IACR;AAAA,IACA,SAAS,yBAAyB,OAAO;AAAA,EAC3C;AAEA,UAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,OAAO,CAAC;AAAA,CAAI;AACrD;","names":[]}
@@ -0,0 +1,28 @@
1
+ // src/gql/operations/issue-view.generated.ts
2
+ var IssueViewDocument = `
3
+ query IssueView($owner: String!, $name: String!, $issueNumber: Int!) {
4
+ repository(owner: $owner, name: $name) {
5
+ issue(number: $issueNumber) {
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
+ IssueView(variables, requestHeaders, signal) {
19
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: IssueViewDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "IssueView", "query", variables);
20
+ }
21
+ };
22
+ }
23
+
24
+ export {
25
+ IssueViewDocument,
26
+ getSdk
27
+ };
28
+ //# sourceMappingURL=chunk-W6ROKCY5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gql/operations/issue-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 IssueViewQueryVariables = Types.Exact<{\n owner: Types.Scalars['String']['input'];\n name: Types.Scalars['String']['input'];\n issueNumber: Types.Scalars['Int']['input'];\n}>;\n\n\nexport type IssueViewQuery = { __typename?: 'Query', repository?: { __typename?: 'Repository', issue?: { __typename?: 'Issue', id: string, number: number, title: string, state: Types.IssueState, url: any } | null } | null };\n\n\nexport const IssueViewDocument = `\n query IssueView($owner: String!, $name: String!, $issueNumber: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $issueNumber) {\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 IssueView(variables: IssueViewQueryVariables, requestHeaders?: GraphQLClientRequestHeaders, signal?: RequestInit['signal']): Promise<IssueViewQuery> {\n return withWrapper((wrappedRequestHeaders) => client.request<IssueViewQuery>({ document: IssueViewDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), 'IssueView', 'query', variables);\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;"],"mappings":";AAcO,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBjC,IAAM,iBAAqC,CAAC,QAAQ,gBAAgB,gBAAgB,eAAe,OAAO;AAEnG,SAAS,OAAO,QAAuB,cAAkC,gBAAgB;AAC9F,SAAO;AAAA,IACL,UAAU,WAAoC,gBAA8C,QAAyD;AACnJ,aAAO,YAAY,CAAC,0BAA0B,OAAO,QAAwB,EAAE,UAAU,mBAAmB,WAAW,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,OAAO,CAAC,GAAG,aAAa,SAAS,SAAS;AAAA,IACpO;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,156 @@
1
+ import {
2
+ createSafeCliCommandRunner
3
+ } from "./chunk-DLKIQBK6.js";
4
+ import {
5
+ runCliCapability
6
+ } from "./chunk-3RAT5BCB.js";
7
+ import {
8
+ runGraphqlCapability
9
+ } from "./chunk-YNNDBMNR.js";
10
+ import {
11
+ routePreferenceOrder
12
+ } from "./chunk-UGWIZ3RI.js";
13
+ import {
14
+ preflightCheck
15
+ } from "./chunk-TDTKOJKN.js";
16
+ import {
17
+ execute
18
+ } from "./chunk-Q4RTT3DV.js";
19
+ import {
20
+ normalizeError
21
+ } from "./chunk-QEAMC4IJ.js";
22
+ import {
23
+ errorCodes
24
+ } from "./chunk-UOJWOHRM.js";
25
+ import {
26
+ getOperationCard
27
+ } from "./chunk-MT4U5DYD.js";
28
+
29
+ // src/core/routing/engine.ts
30
+ function chooseRoute() {
31
+ return routePreferenceOrder[0];
32
+ }
33
+ var DEFAULT_REASON = "DEFAULT_POLICY";
34
+ var CLI_ENV_CACHE_TTL_MS = 3e4;
35
+ var cliEnvironmentCache = /* @__PURE__ */ new WeakMap();
36
+ var cliEnvironmentInFlight = /* @__PURE__ */ new WeakMap();
37
+ var defaultCliRunner = createSafeCliCommandRunner();
38
+ async function detectCliEnvironment(runner) {
39
+ try {
40
+ const version = await runner.run("gh", ["--version"], 1500);
41
+ if (version.exitCode !== 0) {
42
+ return {
43
+ ghCliAvailable: false,
44
+ ghAuthenticated: false
45
+ };
46
+ }
47
+ const auth = await runner.run("gh", ["auth", "status"], 2500);
48
+ return {
49
+ ghCliAvailable: true,
50
+ ghAuthenticated: auth.exitCode === 0
51
+ };
52
+ } catch {
53
+ return {
54
+ ghCliAvailable: false,
55
+ ghAuthenticated: false
56
+ };
57
+ }
58
+ }
59
+ async function detectCliEnvironmentCached(runner) {
60
+ const now = Date.now();
61
+ const cached = cliEnvironmentCache.get(runner);
62
+ if (cached && cached.expiresAt > now) {
63
+ return cached.value;
64
+ }
65
+ const inFlight = cliEnvironmentInFlight.get(runner);
66
+ if (inFlight) {
67
+ return inFlight;
68
+ }
69
+ const probePromise = detectCliEnvironment(runner).then((value) => {
70
+ cliEnvironmentCache.set(runner, {
71
+ value,
72
+ expiresAt: Date.now() + CLI_ENV_CACHE_TTL_MS
73
+ });
74
+ cliEnvironmentInFlight.delete(runner);
75
+ return value;
76
+ }).catch((error) => {
77
+ cliEnvironmentInFlight.delete(runner);
78
+ throw error;
79
+ });
80
+ cliEnvironmentInFlight.set(runner, probePromise);
81
+ return probePromise;
82
+ }
83
+ async function executeTask(request, deps) {
84
+ const reason = deps.reason ?? DEFAULT_REASON;
85
+ const card = getOperationCard(request.task);
86
+ if (!card) {
87
+ return normalizeError(
88
+ {
89
+ code: errorCodes.Validation,
90
+ message: `Unsupported task: ${request.task}`,
91
+ retryable: false
92
+ },
93
+ chooseRoute(),
94
+ { capabilityId: request.task, reason }
95
+ );
96
+ }
97
+ const cliRunner = deps.cliRunner ?? defaultCliRunner;
98
+ return execute({
99
+ card,
100
+ params: request.input,
101
+ routingContext: {
102
+ ghCliAvailable: deps.ghCliAvailable,
103
+ ghAuthenticated: deps.ghAuthenticated,
104
+ githubTokenPresent: Boolean(deps.githubToken)
105
+ },
106
+ retry: {
107
+ maxAttemptsPerRoute: 2
108
+ },
109
+ preflight: async (route) => {
110
+ const preflightInput = { route };
111
+ if (deps.githubToken !== void 0) {
112
+ preflightInput.githubToken = deps.githubToken;
113
+ }
114
+ if (route === "cli") {
115
+ if (deps.ghCliAvailable !== void 0) {
116
+ preflightInput.ghCliAvailable = deps.ghCliAvailable;
117
+ }
118
+ if (deps.ghAuthenticated !== void 0) {
119
+ preflightInput.ghAuthenticated = deps.ghAuthenticated;
120
+ }
121
+ if (preflightInput.ghCliAvailable === void 0 || preflightInput.ghAuthenticated === void 0) {
122
+ const detected = await detectCliEnvironmentCached(cliRunner);
123
+ if (preflightInput.ghCliAvailable === void 0) {
124
+ preflightInput.ghCliAvailable = detected.ghCliAvailable;
125
+ }
126
+ if (preflightInput.ghAuthenticated === void 0) {
127
+ preflightInput.ghAuthenticated = detected.ghAuthenticated;
128
+ }
129
+ }
130
+ }
131
+ return preflightCheck(preflightInput);
132
+ },
133
+ routes: {
134
+ graphql: async () => runGraphqlCapability(deps.githubClient, request.task, request.input),
135
+ cli: async () => {
136
+ return runCliCapability(cliRunner, request.task, request.input, card);
137
+ },
138
+ rest: async () => normalizeError(
139
+ {
140
+ code: errorCodes.AdapterUnsupported,
141
+ message: `Route 'rest' is not implemented for task '${request.task}'`,
142
+ retryable: false,
143
+ details: { route: "rest", task: request.task }
144
+ },
145
+ "rest",
146
+ { capabilityId: request.task, reason }
147
+ )
148
+ }
149
+ });
150
+ }
151
+
152
+ export {
153
+ chooseRoute,
154
+ executeTask
155
+ };
156
+ //# sourceMappingURL=chunk-WYSY75U7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/routing/engine.ts"],"sourcesContent":["import { routePreferenceOrder } from \"./policy.js\"\nimport type { ResultEnvelope, RouteSource } from \"../contracts/envelope.js\"\nimport type { TaskRequest } from \"../contracts/task.js\"\nimport { errorCodes } from \"../errors/codes.js\"\nimport type { GithubClient } from \"../../gql/client.js\"\nimport type { RouteReasonCode } from \"./reason-codes.js\"\nimport { preflightCheck } from \"../execution/preflight.js\"\nimport { normalizeError } from \"../execution/normalizer.js\"\nimport { execute } from \"../execute/execute.js\"\nimport { getOperationCard } from \"../registry/index.js\"\nimport { runGraphqlCapability, type GraphqlCapabilityId } from \"../execution/adapters/graphql-capability-adapter.js\"\nimport { runCliCapability, type CliCapabilityId, type CliCommandRunner } from \"../execution/adapters/cli-capability-adapter.js\"\nimport { createSafeCliCommandRunner } from \"../execution/cli/safe-runner.js\"\n\nexport function chooseRoute(): (typeof routePreferenceOrder)[number] {\n return routePreferenceOrder[0]\n}\n\ntype ExecutionDeps = {\n githubClient: Pick<\n GithubClient,\n \"fetchRepoView\" | \"fetchIssueCommentsList\" | \"fetchIssueList\" | \"fetchIssueView\" | \"fetchPrList\" | \"fetchPrView\" | \"fetchPrCommentsList\" | \"fetchPrReviewsList\" | \"fetchPrDiffListFiles\" | \"replyToReviewThread\" | \"resolveReviewThread\" | \"unresolveReviewThread\"\n >\n githubToken?: string | null\n cliRunner?: CliCommandRunner\n ghCliAvailable?: boolean\n ghAuthenticated?: boolean\n reason?: RouteReasonCode\n}\n\nconst DEFAULT_REASON: RouteReasonCode = \"DEFAULT_POLICY\"\n\ntype CliEnvironmentState = {\n ghCliAvailable: boolean\n ghAuthenticated: boolean\n}\n\nconst CLI_ENV_CACHE_TTL_MS = 30_000\nconst cliEnvironmentCache = new WeakMap<CliCommandRunner, { value: CliEnvironmentState; expiresAt: number }>()\nconst cliEnvironmentInFlight = new WeakMap<CliCommandRunner, Promise<CliEnvironmentState>>()\nconst defaultCliRunner = createSafeCliCommandRunner()\n\nasync function detectCliEnvironment(runner: CliCommandRunner): Promise<CliEnvironmentState> {\n try {\n const version = await runner.run(\"gh\", [\"--version\"], 1_500)\n if (version.exitCode !== 0) {\n return {\n ghCliAvailable: false,\n ghAuthenticated: false\n }\n }\n\n const auth = await runner.run(\"gh\", [\"auth\", \"status\"], 2_500)\n return {\n ghCliAvailable: true,\n ghAuthenticated: auth.exitCode === 0\n }\n } catch {\n return {\n ghCliAvailable: false,\n ghAuthenticated: false\n }\n }\n}\n\nasync function detectCliEnvironmentCached(runner: CliCommandRunner): Promise<CliEnvironmentState> {\n const now = Date.now()\n const cached = cliEnvironmentCache.get(runner)\n if (cached && cached.expiresAt > now) {\n return cached.value\n }\n\n const inFlight = cliEnvironmentInFlight.get(runner)\n if (inFlight) {\n return inFlight\n }\n\n const probePromise = detectCliEnvironment(runner)\n .then((value) => {\n cliEnvironmentCache.set(runner, {\n value,\n expiresAt: Date.now() + CLI_ENV_CACHE_TTL_MS\n })\n cliEnvironmentInFlight.delete(runner)\n return value\n })\n .catch((error) => {\n cliEnvironmentInFlight.delete(runner)\n throw error\n })\n\n cliEnvironmentInFlight.set(runner, probePromise)\n return probePromise\n}\n\nexport async function executeTask(\n request: TaskRequest,\n deps: ExecutionDeps\n): Promise<ResultEnvelope> {\n const reason = deps.reason ?? DEFAULT_REASON\n const card = getOperationCard(request.task)\n if (!card) {\n return normalizeError(\n {\n code: errorCodes.Validation,\n message: `Unsupported task: ${request.task}`,\n retryable: false\n },\n chooseRoute(),\n { capabilityId: request.task, reason }\n )\n }\n\n const cliRunner = deps.cliRunner ?? defaultCliRunner\n\n return execute({\n card,\n params: request.input as Record<string, unknown>,\n routingContext: {\n ghCliAvailable: deps.ghCliAvailable,\n ghAuthenticated: deps.ghAuthenticated,\n githubTokenPresent: Boolean(deps.githubToken)\n },\n retry: {\n maxAttemptsPerRoute: 2\n },\n preflight: async (route: RouteSource) => {\n const preflightInput: Parameters<typeof preflightCheck>[0] = { route }\n if (deps.githubToken !== undefined) {\n preflightInput.githubToken = deps.githubToken\n }\n\n if (route === \"cli\") {\n if (deps.ghCliAvailable !== undefined) {\n preflightInput.ghCliAvailable = deps.ghCliAvailable\n }\n\n if (deps.ghAuthenticated !== undefined) {\n preflightInput.ghAuthenticated = deps.ghAuthenticated\n }\n\n if (preflightInput.ghCliAvailable === undefined || preflightInput.ghAuthenticated === undefined) {\n const detected = await detectCliEnvironmentCached(cliRunner)\n\n if (preflightInput.ghCliAvailable === undefined) {\n preflightInput.ghCliAvailable = detected.ghCliAvailable\n }\n\n if (preflightInput.ghAuthenticated === undefined) {\n preflightInput.ghAuthenticated = detected.ghAuthenticated\n }\n }\n }\n\n return preflightCheck(preflightInput)\n },\n routes: {\n graphql: async () =>\n runGraphqlCapability(deps.githubClient, request.task as GraphqlCapabilityId, request.input as Record<string, unknown>),\n cli: async () => {\n return runCliCapability(cliRunner, request.task as CliCapabilityId, request.input as Record<string, unknown>, card)\n },\n rest: async () =>\n normalizeError(\n {\n code: errorCodes.AdapterUnsupported,\n message: `Route 'rest' is not implemented for task '${request.task}'`,\n retryable: false,\n details: { route: \"rest\", task: request.task }\n },\n \"rest\",\n { capabilityId: request.task, reason }\n )\n }\n })\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,113 @@
1
+ import {
2
+ normalizeError,
3
+ normalizeResult
4
+ } from "./chunk-QEAMC4IJ.js";
5
+ import {
6
+ mapErrorToCode
7
+ } from "./chunk-B6RLMKS4.js";
8
+ import {
9
+ isRetryableErrorCode
10
+ } from "./chunk-573MDG3I.js";
11
+ import {
12
+ errorCodes
13
+ } from "./chunk-UOJWOHRM.js";
14
+
15
+ // src/core/execution/adapters/graphql-capability-adapter.ts
16
+ var DEFAULT_LIST_FIRST = 30;
17
+ function withDefaultFirst(params) {
18
+ if (params.first === void 0) {
19
+ return {
20
+ ...params,
21
+ first: DEFAULT_LIST_FIRST
22
+ };
23
+ }
24
+ return params;
25
+ }
26
+ function requireNonEmptyString(params, field, capabilityId) {
27
+ const value = params[field];
28
+ if (typeof value !== "string" || value.trim().length === 0) {
29
+ throw new Error(`Missing or invalid ${field} for ${capabilityId}`);
30
+ }
31
+ return value;
32
+ }
33
+ async function runGraphqlCapability(client, capabilityId, params) {
34
+ try {
35
+ if (capabilityId === "repo.view") {
36
+ const data = await client.fetchRepoView(params);
37
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
38
+ }
39
+ if (capabilityId === "issue.view") {
40
+ const data = await client.fetchIssueView(params);
41
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
42
+ }
43
+ if (capabilityId === "issue.list") {
44
+ const data = await client.fetchIssueList(withDefaultFirst(params));
45
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
46
+ }
47
+ if (capabilityId === "issue.comments.list") {
48
+ const data = await client.fetchIssueCommentsList(params);
49
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
50
+ }
51
+ if (capabilityId === "pr.view") {
52
+ const data = await client.fetchPrView(params);
53
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
54
+ }
55
+ if (capabilityId === "pr.list") {
56
+ const data = await client.fetchPrList(withDefaultFirst(params));
57
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
58
+ }
59
+ if (capabilityId === "pr.comments.list") {
60
+ const data = await client.fetchPrCommentsList(withDefaultFirst(params));
61
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
62
+ }
63
+ if (capabilityId === "pr.reviews.list") {
64
+ const data = await client.fetchPrReviewsList(withDefaultFirst(params));
65
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
66
+ }
67
+ if (capabilityId === "pr.diff.list_files") {
68
+ const data = await client.fetchPrDiffListFiles(withDefaultFirst(params));
69
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
70
+ }
71
+ if (capabilityId === "pr.comment.reply") {
72
+ const threadId = requireNonEmptyString(params, "threadId", capabilityId);
73
+ const body = requireNonEmptyString(params, "body", capabilityId);
74
+ const data = await client.replyToReviewThread({ threadId, body });
75
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
76
+ }
77
+ if (capabilityId === "pr.comment.resolve") {
78
+ const threadId = requireNonEmptyString(params, "threadId", capabilityId);
79
+ const data = await client.resolveReviewThread({ threadId });
80
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
81
+ }
82
+ if (capabilityId === "pr.comment.unresolve") {
83
+ const threadId = requireNonEmptyString(params, "threadId", capabilityId);
84
+ const data = await client.unresolveReviewThread({ threadId });
85
+ return normalizeResult(data, "graphql", { capabilityId, reason: "CARD_PREFERRED" });
86
+ }
87
+ return normalizeError(
88
+ {
89
+ code: errorCodes.Validation,
90
+ message: `Unsupported GraphQL capability: ${capabilityId}`,
91
+ retryable: false
92
+ },
93
+ "graphql",
94
+ { capabilityId, reason: "CAPABILITY_LIMIT" }
95
+ );
96
+ } catch (error) {
97
+ const code = mapErrorToCode(error);
98
+ return normalizeError(
99
+ {
100
+ code,
101
+ message: error instanceof Error ? error.message : String(error),
102
+ retryable: isRetryableErrorCode(code)
103
+ },
104
+ "graphql",
105
+ { capabilityId, reason: "CARD_PREFERRED" }
106
+ );
107
+ }
108
+ }
109
+
110
+ export {
111
+ runGraphqlCapability
112
+ };
113
+ //# sourceMappingURL=chunk-YNNDBMNR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/execution/adapters/graphql-capability-adapter.ts"],"sourcesContent":["import type {\n GithubClient,\n IssueCommentsListInput,\n IssueListInput,\n IssueViewInput,\n PrCommentsListInput,\n PrDiffListFilesInput,\n PrListInput,\n PrReviewsListInput,\n PrViewInput,\n RepoViewInput\n} from \"../../../gql/client.js\"\nimport { errorCodes } from \"../../errors/codes.js\"\nimport { mapErrorToCode } from \"../../errors/map-error.js\"\nimport { isRetryableErrorCode } from \"../../errors/retryability.js\"\nimport { normalizeError, normalizeResult } from \"../normalizer.js\"\nimport type { ResultEnvelope } from \"../../contracts/envelope.js\"\n\nexport type GraphqlCapabilityId =\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.comment.reply\"\n | \"pr.comment.resolve\"\n | \"pr.comment.unresolve\"\n\nconst DEFAULT_LIST_FIRST = 30\n\nfunction withDefaultFirst(params: Record<string, unknown>): Record<string, unknown> {\n if (params.first === undefined) {\n return {\n ...params,\n first: DEFAULT_LIST_FIRST\n }\n }\n\n return params\n}\n\nfunction requireNonEmptyString(params: Record<string, unknown>, field: string, capabilityId: GraphqlCapabilityId): string {\n const value = params[field]\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`Missing or invalid ${field} for ${capabilityId}`)\n }\n\n return value\n}\n\nexport async function runGraphqlCapability(\n client: Pick<\n GithubClient,\n \"fetchRepoView\" | \"fetchIssueView\" | \"fetchIssueList\" | \"fetchIssueCommentsList\" | \"fetchPrView\" | \"fetchPrList\"\n | \"fetchPrCommentsList\" | \"fetchPrReviewsList\" | \"fetchPrDiffListFiles\" | \"replyToReviewThread\"\n | \"resolveReviewThread\" | \"unresolveReviewThread\"\n >,\n capabilityId: GraphqlCapabilityId,\n params: Record<string, unknown>\n): Promise<ResultEnvelope> {\n try {\n if (capabilityId === \"repo.view\") {\n const data = await client.fetchRepoView(params as RepoViewInput)\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n if (capabilityId === \"issue.view\") {\n const data = await client.fetchIssueView(params as IssueViewInput)\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n if (capabilityId === \"issue.list\") {\n const data = await client.fetchIssueList(withDefaultFirst(params) as IssueListInput)\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n if (capabilityId === \"issue.comments.list\") {\n const data = await client.fetchIssueCommentsList(params as IssueCommentsListInput)\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n if (capabilityId === \"pr.view\") {\n const data = await client.fetchPrView(params as PrViewInput)\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n if (capabilityId === \"pr.list\") {\n const data = await client.fetchPrList(withDefaultFirst(params) as PrListInput)\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n if (capabilityId === \"pr.comments.list\") {\n const data = await client.fetchPrCommentsList(withDefaultFirst(params) as PrCommentsListInput)\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n if (capabilityId === \"pr.reviews.list\") {\n const data = await client.fetchPrReviewsList(withDefaultFirst(params) as PrReviewsListInput)\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n if (capabilityId === \"pr.diff.list_files\") {\n const data = await client.fetchPrDiffListFiles(withDefaultFirst(params) as PrDiffListFilesInput)\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n if (capabilityId === \"pr.comment.reply\") {\n const threadId = requireNonEmptyString(params, \"threadId\", capabilityId)\n const body = requireNonEmptyString(params, \"body\", capabilityId)\n const data = await client.replyToReviewThread({ threadId, body })\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n if (capabilityId === \"pr.comment.resolve\") {\n const threadId = requireNonEmptyString(params, \"threadId\", capabilityId)\n const data = await client.resolveReviewThread({ threadId })\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n if (capabilityId === \"pr.comment.unresolve\") {\n const threadId = requireNonEmptyString(params, \"threadId\", capabilityId)\n const data = await client.unresolveReviewThread({ threadId })\n return normalizeResult(data, \"graphql\", { capabilityId, reason: \"CARD_PREFERRED\" })\n }\n\n return normalizeError(\n {\n code: errorCodes.Validation,\n message: `Unsupported GraphQL capability: ${capabilityId}`,\n retryable: false\n },\n \"graphql\",\n { capabilityId, reason: \"CAPABILITY_LIMIT\" }\n )\n } catch (error: unknown) {\n const code = mapErrorToCode(error)\n return normalizeError(\n {\n code,\n message: error instanceof Error ? error.message : String(error),\n retryable: isRetryableErrorCode(code)\n },\n \"graphql\",\n { capabilityId, reason: \"CARD_PREFERRED\" }\n )\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,198 @@
1
+ // src/cli/commands/setup.ts
2
+ import { access, appendFile, mkdir, readFile, writeFile } from "fs/promises";
3
+ import { homedir } from "os";
4
+ import { dirname, join } from "path";
5
+ import readline from "readline/promises";
6
+ import Ajv from "ajv";
7
+ var ajv = new Ajv({ allErrors: true, strict: false });
8
+ var setupOptionsSchema = {
9
+ type: "object",
10
+ additionalProperties: false,
11
+ required: ["scope", "assumeYes", "dryRun", "verifyOnly", "track"],
12
+ properties: {
13
+ scope: {
14
+ type: "string",
15
+ enum: ["user", "project"]
16
+ },
17
+ assumeYes: { type: "boolean" },
18
+ dryRun: { type: "boolean" },
19
+ verifyOnly: { type: "boolean" },
20
+ track: { type: "boolean" }
21
+ }
22
+ };
23
+ var validateSetupOptions = ajv.compile(setupOptionsSchema);
24
+ var SKILL_CONTENT = `# ghx skill
25
+
26
+ Use ghx capabilities to execute GitHub operations through a stable capability interface.
27
+
28
+ Quick commands:
29
+ - ghx capabilities list
30
+ - ghx capabilities explain <capability_id>
31
+ - ghx run <capability_id> --input '<json>'
32
+
33
+ Example:
34
+ - ghx run repo.view --input '{"owner":"aryeko","name":"ghx"}'
35
+ `;
36
+ function usage() {
37
+ return "Usage: ghx setup --scope <user|project> [--yes] [--dry-run] [--verify] [--track]";
38
+ }
39
+ function parseScope(argv) {
40
+ const inline = argv.find((arg) => arg.startsWith("--scope="));
41
+ if (inline) {
42
+ const raw = inline.slice("--scope=".length);
43
+ if (raw === "user" || raw === "project") {
44
+ return raw;
45
+ }
46
+ return void 0;
47
+ }
48
+ const scopeIndex = argv.findIndex((arg) => arg === "--scope");
49
+ if (scopeIndex < 0) {
50
+ return void 0;
51
+ }
52
+ const value = argv[scopeIndex + 1];
53
+ if (value === "user" || value === "project") {
54
+ return value;
55
+ }
56
+ return void 0;
57
+ }
58
+ function parseArgs(argv) {
59
+ const scope = parseScope(argv);
60
+ if (!scope) {
61
+ return null;
62
+ }
63
+ const options = {
64
+ scope,
65
+ assumeYes: argv.includes("--yes"),
66
+ dryRun: argv.includes("--dry-run"),
67
+ verifyOnly: argv.includes("--verify"),
68
+ track: argv.includes("--track")
69
+ };
70
+ if (!validateSetupOptions(options)) {
71
+ return null;
72
+ }
73
+ return options;
74
+ }
75
+ function resolveSkillPath(scope) {
76
+ const base = scope === "user" ? homedir() : process.cwd();
77
+ return join(base, ".agents", "skill", "ghx", "SKILL.md");
78
+ }
79
+ function resolveTrackingPath() {
80
+ return join(homedir(), ".agents", "ghx", "setup-events.jsonl");
81
+ }
82
+ async function writeTrackingEvent(options) {
83
+ if (!options.track) {
84
+ return;
85
+ }
86
+ const trackingPath = resolveTrackingPath();
87
+ await mkdir(join(homedir(), ".agents", "ghx"), { recursive: true });
88
+ await appendFile(
89
+ trackingPath,
90
+ `${JSON.stringify({
91
+ command: "setup",
92
+ scope: options.scope,
93
+ mode: options.mode,
94
+ success: options.success,
95
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
96
+ })}
97
+ `,
98
+ "utf8"
99
+ );
100
+ }
101
+ async function confirmOverwrite(skillPath) {
102
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
103
+ return false;
104
+ }
105
+ const rl = readline.createInterface({
106
+ input: process.stdin,
107
+ output: process.stdout
108
+ });
109
+ try {
110
+ const answer = await rl.question(`Skill already exists at ${skillPath}. Overwrite? [y/N] `);
111
+ const normalized = answer.trim().toLowerCase();
112
+ return normalized === "y" || normalized === "yes";
113
+ } finally {
114
+ rl.close();
115
+ }
116
+ }
117
+ async function verifySkill(skillPath) {
118
+ try {
119
+ const content = await readFile(skillPath, "utf8");
120
+ return content.includes("ghx capabilities");
121
+ } catch (error) {
122
+ if (typeof error === "object" && error !== null && "code" in error) {
123
+ if (error.code === "ENOENT") {
124
+ return false;
125
+ }
126
+ }
127
+ throw error;
128
+ }
129
+ }
130
+ async function skillFileExists(skillPath) {
131
+ try {
132
+ await access(skillPath);
133
+ return true;
134
+ } catch (error) {
135
+ if (typeof error === "object" && error !== null && "code" in error) {
136
+ if (error.code === "ENOENT") {
137
+ return false;
138
+ }
139
+ }
140
+ throw error;
141
+ }
142
+ }
143
+ async function setupCommand(argv = []) {
144
+ const parsed = parseArgs(argv);
145
+ if (!parsed) {
146
+ process.stderr.write(`${usage()}
147
+ `);
148
+ return 1;
149
+ }
150
+ const skillPath = resolveSkillPath(parsed.scope);
151
+ try {
152
+ if (parsed.verifyOnly) {
153
+ const ok = await verifySkill(skillPath);
154
+ if (!ok) {
155
+ process.stderr.write(`Verify failed: skill not installed at ${skillPath}
156
+ `);
157
+ return 1;
158
+ }
159
+ process.stdout.write(`Verify passed: skill installed at ${skillPath}
160
+ `);
161
+ return 0;
162
+ }
163
+ if (parsed.dryRun) {
164
+ process.stdout.write(`Dry run: would write ${skillPath}
165
+ `);
166
+ return 0;
167
+ }
168
+ const alreadyExists = await skillFileExists(skillPath);
169
+ if (alreadyExists && !parsed.assumeYes) {
170
+ const approved = await confirmOverwrite(skillPath);
171
+ if (!approved) {
172
+ process.stderr.write(
173
+ `Skill already exists at ${skillPath}. Re-run with --yes or confirm overwrite interactively.
174
+ `
175
+ );
176
+ await writeTrackingEvent({ track: parsed.track, scope: parsed.scope, mode: "apply", success: false });
177
+ return 1;
178
+ }
179
+ }
180
+ await mkdir(dirname(skillPath), { recursive: true });
181
+ await writeFile(skillPath, SKILL_CONTENT, "utf8");
182
+ process.stdout.write(`Setup complete: wrote ${skillPath}
183
+ `);
184
+ process.stdout.write("Try: ghx capabilities list\n");
185
+ await writeTrackingEvent({ track: parsed.track, scope: parsed.scope, mode: "apply", success: true });
186
+ return 0;
187
+ } catch (error) {
188
+ const message = error instanceof Error ? error.message : String(error);
189
+ process.stderr.write(`Setup failed: ${message}
190
+ `);
191
+ return 1;
192
+ }
193
+ }
194
+
195
+ export {
196
+ setupCommand
197
+ };
198
+ //# sourceMappingURL=chunk-YNQNHCRS.js.map