@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,584 @@
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/cli-capability-adapter.ts
16
+ var DEFAULT_TIMEOUT_MS = 1e4;
17
+ var DEFAULT_LIST_FIRST = 30;
18
+ var MAX_WORKFLOW_JOB_LOG_CHARS = 5e4;
19
+ var ISSUE_COMMENTS_GRAPHQL_QUERY = "query($owner:String!,$name:String!,$issueNumber:Int!,$first:Int!,$after:String){repository(owner:$owner,name:$name){issue(number:$issueNumber){comments(first:$first,after:$after){nodes{id body createdAt url author{login}} pageInfo{hasNextPage endCursor}}}}}";
20
+ function parseStrictPositiveInt(value) {
21
+ return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : null;
22
+ }
23
+ function parseListFirst(value) {
24
+ if (value === void 0) {
25
+ return DEFAULT_LIST_FIRST;
26
+ }
27
+ return parseStrictPositiveInt(value);
28
+ }
29
+ function commandTokens(card, fallbackCommand) {
30
+ const fromCard = card?.cli?.command;
31
+ const command = typeof fromCard === "string" && fromCard.trim().length > 0 ? fromCard : fallbackCommand;
32
+ return command.trim().split(/\s+/);
33
+ }
34
+ function jsonFieldsFromCard(card, fallbackFields) {
35
+ const fields = card?.cli?.jsonFields;
36
+ if (Array.isArray(fields) && fields.length > 0) {
37
+ return fields.join(",");
38
+ }
39
+ return fallbackFields;
40
+ }
41
+ function buildArgs(capabilityId, params, card) {
42
+ const owner = String(params.owner ?? "");
43
+ const name = String(params.name ?? "");
44
+ const repo = owner && name ? `${owner}/${name}` : "";
45
+ if (capabilityId === "repo.view") {
46
+ const args = commandTokens(card, "repo view");
47
+ if (repo) {
48
+ args.push(repo);
49
+ }
50
+ args.push("--json", jsonFieldsFromCard(card, "id,name,nameWithOwner,isPrivate,stargazerCount,forkCount,url,defaultBranchRef"));
51
+ return args;
52
+ }
53
+ if (capabilityId === "issue.view") {
54
+ const issueNumber = parseStrictPositiveInt(params.issueNumber);
55
+ if (issueNumber === null) {
56
+ throw new Error("Missing or invalid issueNumber for issue.view");
57
+ }
58
+ const args = [...commandTokens(card, "issue view"), String(issueNumber)];
59
+ if (repo) {
60
+ args.push("--repo", repo);
61
+ }
62
+ args.push("--json", jsonFieldsFromCard(card, "id,number,title,state,url"));
63
+ return args;
64
+ }
65
+ if (capabilityId === "issue.list") {
66
+ const first = parseListFirst(params.first);
67
+ if (first === null) {
68
+ throw new Error("Missing or invalid first for issue.list");
69
+ }
70
+ const args = commandTokens(card, "issue list");
71
+ if (repo) {
72
+ args.push("--repo", repo);
73
+ }
74
+ args.push("--limit", String(first), "--json", jsonFieldsFromCard(card, "id,number,title,state,url"));
75
+ return args;
76
+ }
77
+ if (capabilityId === "issue.comments.list") {
78
+ const issueNumber = parseStrictPositiveInt(params.issueNumber);
79
+ if (issueNumber === null) {
80
+ throw new Error("Missing or invalid issueNumber for issue.comments.list");
81
+ }
82
+ const first = parseStrictPositiveInt(params.first);
83
+ if (first === null) {
84
+ throw new Error("Missing or invalid first for issue.comments.list");
85
+ }
86
+ const after = params.after;
87
+ if (!(after === void 0 || after === null || typeof after === "string")) {
88
+ throw new Error("Invalid after cursor for issue.comments.list");
89
+ }
90
+ const args = [
91
+ ...commandTokens(card, "api graphql"),
92
+ "-f",
93
+ `query=${ISSUE_COMMENTS_GRAPHQL_QUERY}`,
94
+ "-f",
95
+ `owner=${owner}`,
96
+ "-f",
97
+ `name=${name}`,
98
+ "-F",
99
+ `issueNumber=${issueNumber}`,
100
+ "-F",
101
+ `first=${first}`
102
+ ];
103
+ if (typeof after === "string" && after.length > 0) {
104
+ args.push("-f", `after=${after}`);
105
+ }
106
+ return args;
107
+ }
108
+ if (capabilityId === "pr.view") {
109
+ const prNumber = parseStrictPositiveInt(params.prNumber);
110
+ if (prNumber === null) {
111
+ throw new Error("Missing or invalid prNumber for pr.view");
112
+ }
113
+ const args = [...commandTokens(card, "pr view"), String(prNumber)];
114
+ if (repo) {
115
+ args.push("--repo", repo);
116
+ }
117
+ args.push("--json", jsonFieldsFromCard(card, "id,number,title,state,url"));
118
+ return args;
119
+ }
120
+ if (capabilityId === "pr.list") {
121
+ const first = parseListFirst(params.first);
122
+ if (first === null) {
123
+ throw new Error("Missing or invalid first for pr.list");
124
+ }
125
+ const args = commandTokens(card, "pr list");
126
+ if (repo) {
127
+ args.push("--repo", repo);
128
+ }
129
+ args.push("--limit", String(first), "--json", jsonFieldsFromCard(card, "id,number,title,state,url"));
130
+ return args;
131
+ }
132
+ if (capabilityId === "pr.status.checks" || capabilityId === "pr.checks.get_failed") {
133
+ const prNumber = parseStrictPositiveInt(params.prNumber);
134
+ if (prNumber === null) {
135
+ throw new Error(`Missing or invalid prNumber for ${capabilityId}`);
136
+ }
137
+ const args = [...commandTokens(card, "pr checks"), String(prNumber)];
138
+ if (repo) {
139
+ args.push("--repo", repo);
140
+ }
141
+ args.push("--json", jsonFieldsFromCard(card, "name,state,bucket,workflow,link"));
142
+ return args;
143
+ }
144
+ if (capabilityId === "pr.mergeability.view") {
145
+ const prNumber = parseStrictPositiveInt(params.prNumber);
146
+ if (prNumber === null) {
147
+ throw new Error("Missing or invalid prNumber for pr.mergeability.view");
148
+ }
149
+ const args = [...commandTokens(card, "pr view"), String(prNumber)];
150
+ if (repo) {
151
+ args.push("--repo", repo);
152
+ }
153
+ args.push("--json", jsonFieldsFromCard(card, "mergeable,mergeStateStatus,reviewDecision,isDraft,state"));
154
+ return args;
155
+ }
156
+ if (capabilityId === "pr.ready_for_review.set") {
157
+ const prNumber = parseStrictPositiveInt(params.prNumber);
158
+ if (prNumber === null) {
159
+ throw new Error("Missing or invalid prNumber for pr.ready_for_review.set");
160
+ }
161
+ if (typeof params.ready !== "boolean") {
162
+ throw new Error("Missing or invalid ready for pr.ready_for_review.set");
163
+ }
164
+ const args = [...commandTokens(card, "pr ready"), String(prNumber)];
165
+ if (repo) {
166
+ args.push("--repo", repo);
167
+ }
168
+ if (!params.ready) {
169
+ args.push("--undo");
170
+ }
171
+ return args;
172
+ }
173
+ if (capabilityId === "check_run.annotations.list") {
174
+ const checkRunId = parseStrictPositiveInt(params.checkRunId);
175
+ if (checkRunId === null) {
176
+ throw new Error("Missing or invalid checkRunId for check_run.annotations.list");
177
+ }
178
+ if (!owner || !name) {
179
+ throw new Error("Missing owner/name for check_run.annotations.list");
180
+ }
181
+ const args = [...commandTokens(card, "api"), `repos/${owner}/${name}/check-runs/${checkRunId}/annotations`];
182
+ return args;
183
+ }
184
+ if (capabilityId === "workflow_runs.list") {
185
+ const first = parseListFirst(params.first);
186
+ if (first === null) {
187
+ throw new Error("Missing or invalid first for workflow_runs.list");
188
+ }
189
+ const args = commandTokens(card, "run list");
190
+ if (repo) {
191
+ args.push("--repo", repo);
192
+ }
193
+ if (typeof params.branch === "string" && params.branch.length > 0) {
194
+ args.push("--branch", params.branch);
195
+ }
196
+ if (typeof params.event === "string" && params.event.length > 0) {
197
+ args.push("--event", params.event);
198
+ }
199
+ if (typeof params.status === "string" && params.status.length > 0) {
200
+ args.push("--status", params.status);
201
+ }
202
+ args.push("--limit", String(first), "--json", jsonFieldsFromCard(card, "databaseId,workflowName,status,conclusion,headBranch,url"));
203
+ return args;
204
+ }
205
+ if (capabilityId === "workflow_run.jobs.list") {
206
+ const runId = parseStrictPositiveInt(params.runId);
207
+ if (runId === null) {
208
+ throw new Error("Missing or invalid runId for workflow_run.jobs.list");
209
+ }
210
+ const args = [...commandTokens(card, "run view"), String(runId)];
211
+ if (repo) {
212
+ args.push("--repo", repo);
213
+ }
214
+ args.push("--json", "jobs");
215
+ return args;
216
+ }
217
+ if (capabilityId === "workflow_job.logs.get" || capabilityId === "workflow_job.logs.analyze") {
218
+ const jobId = parseStrictPositiveInt(params.jobId);
219
+ if (jobId === null) {
220
+ throw new Error(`Missing or invalid jobId for ${capabilityId}`);
221
+ }
222
+ const args = [...commandTokens(card, "run view"), "--job", String(jobId), "--log"];
223
+ if (repo) {
224
+ args.push("--repo", repo);
225
+ }
226
+ return args;
227
+ }
228
+ throw new Error(`Unsupported CLI capability: ${capabilityId}`);
229
+ }
230
+ function parseCliData(stdout) {
231
+ const trimmed = stdout.trim();
232
+ if (!trimmed) {
233
+ return {};
234
+ }
235
+ return JSON.parse(trimmed);
236
+ }
237
+ function normalizeListItem(item) {
238
+ if (typeof item !== "object" || item === null || Array.isArray(item)) {
239
+ return {};
240
+ }
241
+ const input = item;
242
+ return {
243
+ id: input.id,
244
+ number: input.number,
245
+ title: input.title,
246
+ state: input.state,
247
+ url: input.url
248
+ };
249
+ }
250
+ function normalizeCheckItem(item) {
251
+ if (typeof item !== "object" || item === null || Array.isArray(item)) {
252
+ return {
253
+ name: null,
254
+ state: null,
255
+ bucket: null,
256
+ workflow: null,
257
+ link: null
258
+ };
259
+ }
260
+ const input = item;
261
+ return {
262
+ name: typeof input.name === "string" ? input.name : null,
263
+ state: typeof input.state === "string" ? input.state : null,
264
+ bucket: typeof input.bucket === "string" ? input.bucket : null,
265
+ workflow: typeof input.workflow === "string" ? input.workflow : null,
266
+ link: typeof input.link === "string" ? input.link : null
267
+ };
268
+ }
269
+ function normalizeCheckBucket(value) {
270
+ if (typeof value !== "string") {
271
+ return null;
272
+ }
273
+ return value.trim().toLowerCase();
274
+ }
275
+ function isCheckFailureBucket(bucket) {
276
+ const normalized = normalizeCheckBucket(bucket);
277
+ if (!normalized) {
278
+ return false;
279
+ }
280
+ return normalized === "fail" || normalized === "cancel";
281
+ }
282
+ function isCheckPendingBucket(bucket) {
283
+ const normalized = normalizeCheckBucket(bucket);
284
+ if (!normalized) {
285
+ return false;
286
+ }
287
+ return normalized === "pending";
288
+ }
289
+ function isCheckPassBucket(bucket) {
290
+ const normalized = normalizeCheckBucket(bucket);
291
+ if (!normalized) {
292
+ return false;
293
+ }
294
+ return normalized === "pass";
295
+ }
296
+ function normalizeCliData(capabilityId, data, params) {
297
+ if (capabilityId === "repo.view") {
298
+ const input = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
299
+ const defaultBranchRef = typeof input.defaultBranchRef === "object" && input.defaultBranchRef !== null ? input.defaultBranchRef : null;
300
+ return {
301
+ id: input.id,
302
+ name: input.name,
303
+ nameWithOwner: input.nameWithOwner,
304
+ isPrivate: input.isPrivate,
305
+ stargazerCount: input.stargazerCount,
306
+ forkCount: input.forkCount,
307
+ url: input.url,
308
+ defaultBranch: typeof defaultBranchRef?.name === "string" ? defaultBranchRef.name : null
309
+ };
310
+ }
311
+ if (capabilityId === "issue.list" || capabilityId === "pr.list") {
312
+ const items = Array.isArray(data) ? data.map((entry) => normalizeListItem(entry)) : [];
313
+ return {
314
+ items,
315
+ pageInfo: {
316
+ hasNextPage: false,
317
+ endCursor: null
318
+ }
319
+ };
320
+ }
321
+ if (capabilityId === "issue.comments.list") {
322
+ if (parseStrictPositiveInt(params.first) === null) {
323
+ throw new Error("Missing or invalid first for issue.comments.list");
324
+ }
325
+ const input = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
326
+ const commentsConnection = typeof input.data === "object" && input.data !== null && !Array.isArray(input.data) ? input.data.repository : null;
327
+ const repository = typeof commentsConnection === "object" && commentsConnection !== null && !Array.isArray(commentsConnection) ? commentsConnection : null;
328
+ const issue = typeof repository?.issue === "object" && repository.issue !== null && !Array.isArray(repository.issue) ? repository.issue : null;
329
+ const comments = typeof issue?.comments === "object" && issue.comments !== null && !Array.isArray(issue.comments) ? issue.comments : null;
330
+ const nodes = Array.isArray(comments?.nodes) ? comments.nodes : null;
331
+ const pageInfo = typeof comments?.pageInfo === "object" && comments.pageInfo !== null && !Array.isArray(comments.pageInfo) ? comments.pageInfo : null;
332
+ if (nodes === null || pageInfo === null || typeof pageInfo.hasNextPage !== "boolean") {
333
+ throw new Error("Invalid CLI payload: comments connection is malformed");
334
+ }
335
+ const normalizedItems = nodes.flatMap((comment) => {
336
+ if (typeof comment !== "object" || comment === null || Array.isArray(comment)) {
337
+ throw new Error("Invalid CLI payload: comment item must be an object");
338
+ }
339
+ const commentRecord = comment;
340
+ const author = typeof commentRecord.author === "object" && commentRecord.author !== null ? commentRecord.author : null;
341
+ if (typeof commentRecord.id !== "string" || typeof commentRecord.body !== "string" || typeof commentRecord.url !== "string" || typeof commentRecord.createdAt !== "string") {
342
+ throw new Error("Invalid CLI payload: comment item has invalid field types");
343
+ }
344
+ return [{
345
+ id: commentRecord.id,
346
+ body: commentRecord.body,
347
+ authorLogin: typeof author?.login === "string" ? author.login : null,
348
+ url: commentRecord.url,
349
+ createdAt: commentRecord.createdAt
350
+ }];
351
+ });
352
+ return {
353
+ items: normalizedItems,
354
+ pageInfo: {
355
+ hasNextPage: pageInfo.hasNextPage,
356
+ endCursor: typeof pageInfo.endCursor === "string" ? pageInfo.endCursor : null
357
+ }
358
+ };
359
+ }
360
+ if (capabilityId === "pr.status.checks" || capabilityId === "pr.checks.get_failed") {
361
+ const checks = Array.isArray(data) ? data.map((entry) => normalizeCheckItem(entry)) : [];
362
+ const failed = checks.filter((entry) => isCheckFailureBucket(entry.bucket));
363
+ const pending = checks.filter((entry) => isCheckPendingBucket(entry.bucket));
364
+ const passed = checks.filter((entry) => isCheckPassBucket(entry.bucket));
365
+ return {
366
+ items: capabilityId === "pr.checks.get_failed" ? failed : checks,
367
+ summary: {
368
+ total: checks.length,
369
+ failed: failed.length,
370
+ pending: pending.length,
371
+ passed: passed.length
372
+ }
373
+ };
374
+ }
375
+ if (capabilityId === "pr.mergeability.view") {
376
+ const input = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
377
+ return {
378
+ mergeable: typeof input.mergeable === "string" ? input.mergeable : null,
379
+ mergeStateStatus: typeof input.mergeStateStatus === "string" ? input.mergeStateStatus : null,
380
+ reviewDecision: typeof input.reviewDecision === "string" ? input.reviewDecision : null,
381
+ isDraft: Boolean(input.isDraft),
382
+ state: typeof input.state === "string" ? input.state : "UNKNOWN"
383
+ };
384
+ }
385
+ if (capabilityId === "pr.ready_for_review.set") {
386
+ const prNumber = Number(params.prNumber);
387
+ const ready = Boolean(params.ready);
388
+ return {
389
+ prNumber,
390
+ isDraft: !ready
391
+ };
392
+ }
393
+ if (capabilityId === "check_run.annotations.list") {
394
+ const annotations = Array.isArray(data) ? data : [];
395
+ return {
396
+ items: annotations.map((annotation) => {
397
+ if (typeof annotation !== "object" || annotation === null || Array.isArray(annotation)) {
398
+ return {
399
+ path: null,
400
+ startLine: null,
401
+ endLine: null,
402
+ level: null,
403
+ message: null,
404
+ title: null,
405
+ details: null
406
+ };
407
+ }
408
+ const record = annotation;
409
+ return {
410
+ path: typeof record.path === "string" ? record.path : null,
411
+ startLine: typeof record.start_line === "number" ? record.start_line : null,
412
+ endLine: typeof record.end_line === "number" ? record.end_line : null,
413
+ level: typeof record.annotation_level === "string" ? record.annotation_level : null,
414
+ message: typeof record.message === "string" ? record.message : null,
415
+ title: typeof record.title === "string" ? record.title : null,
416
+ details: typeof record.raw_details === "string" ? record.raw_details : null
417
+ };
418
+ })
419
+ };
420
+ }
421
+ if (capabilityId === "workflow_runs.list") {
422
+ const runs = Array.isArray(data) ? data : [];
423
+ return {
424
+ items: runs.map((run) => {
425
+ if (typeof run !== "object" || run === null || Array.isArray(run)) {
426
+ return {
427
+ id: 0,
428
+ workflowName: null,
429
+ status: null,
430
+ conclusion: null,
431
+ headBranch: null,
432
+ url: null
433
+ };
434
+ }
435
+ const record = run;
436
+ return {
437
+ id: typeof record.databaseId === "number" ? record.databaseId : 0,
438
+ workflowName: typeof record.workflowName === "string" ? record.workflowName : null,
439
+ status: typeof record.status === "string" ? record.status : null,
440
+ conclusion: typeof record.conclusion === "string" ? record.conclusion : null,
441
+ headBranch: typeof record.headBranch === "string" ? record.headBranch : null,
442
+ url: typeof record.url === "string" ? record.url : null
443
+ };
444
+ }),
445
+ pageInfo: {
446
+ hasNextPage: false,
447
+ endCursor: null
448
+ }
449
+ };
450
+ }
451
+ if (capabilityId === "workflow_run.jobs.list") {
452
+ const root = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
453
+ const jobs = Array.isArray(root.jobs) ? root.jobs : [];
454
+ return {
455
+ items: jobs.map((job) => {
456
+ if (typeof job !== "object" || job === null || Array.isArray(job)) {
457
+ return {
458
+ id: 0,
459
+ name: null,
460
+ status: null,
461
+ conclusion: null,
462
+ startedAt: null,
463
+ completedAt: null,
464
+ url: null
465
+ };
466
+ }
467
+ const record = job;
468
+ return {
469
+ id: typeof record.databaseId === "number" ? record.databaseId : 0,
470
+ name: typeof record.name === "string" ? record.name : null,
471
+ status: typeof record.status === "string" ? record.status : null,
472
+ conclusion: typeof record.conclusion === "string" ? record.conclusion : null,
473
+ startedAt: typeof record.startedAt === "string" ? record.startedAt : null,
474
+ completedAt: typeof record.completedAt === "string" ? record.completedAt : null,
475
+ url: typeof record.url === "string" ? record.url : null
476
+ };
477
+ })
478
+ };
479
+ }
480
+ if (capabilityId === "workflow_job.logs.get") {
481
+ const jobId = Number(params.jobId);
482
+ const rawLog = typeof data === "string" ? data : String(data);
483
+ const truncated = rawLog.length > MAX_WORKFLOW_JOB_LOG_CHARS;
484
+ return {
485
+ jobId,
486
+ log: truncated ? rawLog.slice(0, MAX_WORKFLOW_JOB_LOG_CHARS) : rawLog,
487
+ truncated
488
+ };
489
+ }
490
+ if (capabilityId === "workflow_job.logs.analyze") {
491
+ const jobId = Number(params.jobId);
492
+ const rawLog = typeof data === "string" ? data : String(data);
493
+ const truncated = rawLog.length > MAX_WORKFLOW_JOB_LOG_CHARS;
494
+ const boundedLog = truncated ? rawLog.slice(0, MAX_WORKFLOW_JOB_LOG_CHARS) : rawLog;
495
+ const lines = boundedLog.split(/\r?\n/);
496
+ const errorLines = lines.filter((line) => /\berror\b/i.test(line));
497
+ const topErrorLines = errorLines.slice(0, 10);
498
+ const warningLines = lines.filter((line) => /\bwarn(ing)?\b/i.test(line));
499
+ return {
500
+ jobId,
501
+ truncated,
502
+ summary: {
503
+ errorCount: errorLines.length,
504
+ warningCount: warningLines.length,
505
+ topErrorLines
506
+ }
507
+ };
508
+ }
509
+ if (capabilityId === "issue.view" || capabilityId === "pr.view") {
510
+ return normalizeListItem(data);
511
+ }
512
+ return data;
513
+ }
514
+ async function runCliCapability(runner, capabilityId, params, card) {
515
+ try {
516
+ const args = buildArgs(capabilityId, params, card);
517
+ const result = await runner.run("gh", args, DEFAULT_TIMEOUT_MS);
518
+ if (result.exitCode !== 0) {
519
+ const code = mapErrorToCode(result.stderr);
520
+ return normalizeError(
521
+ {
522
+ code,
523
+ message: result.stderr || `gh exited with code ${result.exitCode}`,
524
+ retryable: isRetryableErrorCode(code),
525
+ details: { capabilityId, args, exitCode: result.exitCode }
526
+ },
527
+ "cli",
528
+ { capabilityId, reason: "CARD_FALLBACK" }
529
+ );
530
+ }
531
+ const data = capabilityId === "workflow_job.logs.get" || capabilityId === "workflow_job.logs.analyze" ? result.stdout : parseCliData(result.stdout);
532
+ const normalized = normalizeCliData(capabilityId, data, params);
533
+ return normalizeResult(normalized, "cli", { capabilityId, reason: "CARD_FALLBACK" });
534
+ } catch (error) {
535
+ if (error instanceof SyntaxError) {
536
+ return normalizeError(
537
+ {
538
+ code: errorCodes.Server,
539
+ message: "Failed to parse CLI JSON output",
540
+ retryable: false
541
+ },
542
+ "cli",
543
+ { capabilityId, reason: "CARD_FALLBACK" }
544
+ );
545
+ }
546
+ if (error instanceof Error && error.message.toLowerCase().includes("invalid cli payload")) {
547
+ return normalizeError(
548
+ {
549
+ code: errorCodes.Server,
550
+ message: error.message,
551
+ retryable: false
552
+ },
553
+ "cli",
554
+ { capabilityId, reason: "CARD_FALLBACK" }
555
+ );
556
+ }
557
+ if (error instanceof Error && error.message.toLowerCase().includes("invalid after cursor")) {
558
+ return normalizeError(
559
+ {
560
+ code: errorCodes.Validation,
561
+ message: error.message,
562
+ retryable: false
563
+ },
564
+ "cli",
565
+ { capabilityId, reason: "CARD_FALLBACK" }
566
+ );
567
+ }
568
+ const code = mapErrorToCode(error);
569
+ return normalizeError(
570
+ {
571
+ code,
572
+ message: error instanceof Error ? error.message : String(error),
573
+ retryable: isRetryableErrorCode(code)
574
+ },
575
+ "cli",
576
+ { capabilityId, reason: "CARD_FALLBACK" }
577
+ );
578
+ }
579
+ }
580
+
581
+ export {
582
+ runCliCapability
583
+ };
584
+ //# sourceMappingURL=chunk-3RAT5BCB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/execution/adapters/cli-capability-adapter.ts"],"sourcesContent":["import { errorCodes } from \"../../errors/codes.js\"\nimport { mapErrorToCode } from \"../../errors/map-error.js\"\nimport { isRetryableErrorCode } from \"../../errors/retryability.js\"\nimport type { ResultEnvelope } from \"../../contracts/envelope.js\"\nimport type { OperationCard } from \"../../registry/types.js\"\nimport { normalizeError, normalizeResult } from \"../normalizer.js\"\n\nexport type CliCapabilityId =\n | \"repo.view\"\n | \"issue.view\"\n | \"issue.list\"\n | \"issue.comments.list\"\n | \"pr.view\"\n | \"pr.list\"\n | \"pr.status.checks\"\n | \"pr.checks.get_failed\"\n | \"pr.mergeability.view\"\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\nexport type CliCommandRunner = {\n run(command: string, args: string[], timeoutMs: number): Promise<{ stdout: string; stderr: string; exitCode: number }>\n}\n\nconst DEFAULT_TIMEOUT_MS = 10_000\nconst DEFAULT_LIST_FIRST = 30\nconst MAX_WORKFLOW_JOB_LOG_CHARS = 50_000\nconst ISSUE_COMMENTS_GRAPHQL_QUERY =\n \"query($owner:String!,$name:String!,$issueNumber:Int!,$first:Int!,$after:String){repository(owner:$owner,name:$name){issue(number:$issueNumber){comments(first:$first,after:$after){nodes{id body createdAt url author{login}} pageInfo{hasNextPage endCursor}}}}}\"\n\nfunction parseStrictPositiveInt(value: unknown): number | null {\n return typeof value === \"number\" && Number.isInteger(value) && value > 0 ? value : null\n}\n\nfunction parseListFirst(value: unknown): number | null {\n if (value === undefined) {\n return DEFAULT_LIST_FIRST\n }\n\n return parseStrictPositiveInt(value)\n}\n\nfunction commandTokens(card: OperationCard | undefined, fallbackCommand: string): string[] {\n const fromCard = card?.cli?.command\n const command = typeof fromCard === \"string\" && fromCard.trim().length > 0 ? fromCard : fallbackCommand\n return command.trim().split(/\\s+/)\n}\n\nfunction jsonFieldsFromCard(card: OperationCard | undefined, fallbackFields: string): string {\n const fields = card?.cli?.jsonFields\n if (Array.isArray(fields) && fields.length > 0) {\n return fields.join(\",\")\n }\n\n return fallbackFields\n}\n\nfunction buildArgs(capabilityId: CliCapabilityId, params: Record<string, unknown>, card?: OperationCard): string[] {\n const owner = String(params.owner ?? \"\")\n const name = String(params.name ?? \"\")\n const repo = owner && name ? `${owner}/${name}` : \"\"\n\n if (capabilityId === \"repo.view\") {\n const args = commandTokens(card, \"repo view\")\n if (repo) {\n args.push(repo)\n }\n\n args.push(\"--json\", jsonFieldsFromCard(card, \"id,name,nameWithOwner,isPrivate,stargazerCount,forkCount,url,defaultBranchRef\"))\n return args\n }\n\n if (capabilityId === \"issue.view\") {\n const issueNumber = parseStrictPositiveInt(params.issueNumber)\n if (issueNumber === null) {\n throw new Error(\"Missing or invalid issueNumber for issue.view\")\n }\n\n const args = [...commandTokens(card, \"issue view\"), String(issueNumber)]\n if (repo) {\n args.push(\"--repo\", repo)\n }\n\n args.push(\"--json\", jsonFieldsFromCard(card, \"id,number,title,state,url\"))\n return args\n }\n\n if (capabilityId === \"issue.list\") {\n const first = parseListFirst(params.first)\n if (first === null) {\n throw new Error(\"Missing or invalid first for issue.list\")\n }\n\n const args = commandTokens(card, \"issue list\")\n if (repo) {\n args.push(\"--repo\", repo)\n }\n\n args.push(\"--limit\", String(first), \"--json\", jsonFieldsFromCard(card, \"id,number,title,state,url\"))\n return args\n }\n\n if (capabilityId === \"issue.comments.list\") {\n const issueNumber = parseStrictPositiveInt(params.issueNumber)\n if (issueNumber === null) {\n throw new Error(\"Missing or invalid issueNumber for issue.comments.list\")\n }\n\n const first = parseStrictPositiveInt(params.first)\n if (first === null) {\n throw new Error(\"Missing or invalid first for issue.comments.list\")\n }\n\n const after = params.after\n if (!(after === undefined || after === null || typeof after === \"string\")) {\n throw new Error(\"Invalid after cursor for issue.comments.list\")\n }\n\n const args = [\n ...commandTokens(card, \"api graphql\"),\n \"-f\",\n `query=${ISSUE_COMMENTS_GRAPHQL_QUERY}`,\n \"-f\",\n `owner=${owner}`,\n \"-f\",\n `name=${name}`,\n \"-F\",\n `issueNumber=${issueNumber}`,\n \"-F\",\n `first=${first}`\n ]\n\n if (typeof after === \"string\" && after.length > 0) {\n args.push(\"-f\", `after=${after}`)\n }\n\n return args\n }\n\n if (capabilityId === \"pr.view\") {\n const prNumber = parseStrictPositiveInt(params.prNumber)\n if (prNumber === null) {\n throw new Error(\"Missing or invalid prNumber for pr.view\")\n }\n\n const args = [...commandTokens(card, \"pr view\"), String(prNumber)]\n if (repo) {\n args.push(\"--repo\", repo)\n }\n\n args.push(\"--json\", jsonFieldsFromCard(card, \"id,number,title,state,url\"))\n return args\n }\n\n if (capabilityId === \"pr.list\") {\n const first = parseListFirst(params.first)\n if (first === null) {\n throw new Error(\"Missing or invalid first for pr.list\")\n }\n\n const args = commandTokens(card, \"pr list\")\n if (repo) {\n args.push(\"--repo\", repo)\n }\n\n args.push(\"--limit\", String(first), \"--json\", jsonFieldsFromCard(card, \"id,number,title,state,url\"))\n return args\n }\n\n if (capabilityId === \"pr.status.checks\" || capabilityId === \"pr.checks.get_failed\") {\n const prNumber = parseStrictPositiveInt(params.prNumber)\n if (prNumber === null) {\n throw new Error(`Missing or invalid prNumber for ${capabilityId}`)\n }\n\n const args = [...commandTokens(card, \"pr checks\"), String(prNumber)]\n if (repo) {\n args.push(\"--repo\", repo)\n }\n\n args.push(\"--json\", jsonFieldsFromCard(card, \"name,state,bucket,workflow,link\"))\n return args\n }\n\n if (capabilityId === \"pr.mergeability.view\") {\n const prNumber = parseStrictPositiveInt(params.prNumber)\n if (prNumber === null) {\n throw new Error(\"Missing or invalid prNumber for pr.mergeability.view\")\n }\n\n const args = [...commandTokens(card, \"pr view\"), String(prNumber)]\n if (repo) {\n args.push(\"--repo\", repo)\n }\n\n args.push(\"--json\", jsonFieldsFromCard(card, \"mergeable,mergeStateStatus,reviewDecision,isDraft,state\"))\n return args\n }\n\n if (capabilityId === \"pr.ready_for_review.set\") {\n const prNumber = parseStrictPositiveInt(params.prNumber)\n if (prNumber === null) {\n throw new Error(\"Missing or invalid prNumber for pr.ready_for_review.set\")\n }\n\n if (typeof params.ready !== \"boolean\") {\n throw new Error(\"Missing or invalid ready for pr.ready_for_review.set\")\n }\n\n const args = [...commandTokens(card, \"pr ready\"), String(prNumber)]\n if (repo) {\n args.push(\"--repo\", repo)\n }\n\n if (!params.ready) {\n args.push(\"--undo\")\n }\n\n return args\n }\n\n if (capabilityId === \"check_run.annotations.list\") {\n const checkRunId = parseStrictPositiveInt(params.checkRunId)\n if (checkRunId === null) {\n throw new Error(\"Missing or invalid checkRunId for check_run.annotations.list\")\n }\n\n if (!owner || !name) {\n throw new Error(\"Missing owner/name for check_run.annotations.list\")\n }\n\n const args = [...commandTokens(card, \"api\"), `repos/${owner}/${name}/check-runs/${checkRunId}/annotations`]\n return args\n }\n\n if (capabilityId === \"workflow_runs.list\") {\n const first = parseListFirst(params.first)\n if (first === null) {\n throw new Error(\"Missing or invalid first for workflow_runs.list\")\n }\n\n const args = commandTokens(card, \"run list\")\n if (repo) {\n args.push(\"--repo\", repo)\n }\n\n if (typeof params.branch === \"string\" && params.branch.length > 0) {\n args.push(\"--branch\", params.branch)\n }\n if (typeof params.event === \"string\" && params.event.length > 0) {\n args.push(\"--event\", params.event)\n }\n if (typeof params.status === \"string\" && params.status.length > 0) {\n args.push(\"--status\", params.status)\n }\n\n args.push(\"--limit\", String(first), \"--json\", jsonFieldsFromCard(card, \"databaseId,workflowName,status,conclusion,headBranch,url\"))\n return args\n }\n\n if (capabilityId === \"workflow_run.jobs.list\") {\n const runId = parseStrictPositiveInt(params.runId)\n if (runId === null) {\n throw new Error(\"Missing or invalid runId for workflow_run.jobs.list\")\n }\n\n const args = [...commandTokens(card, \"run view\"), String(runId)]\n if (repo) {\n args.push(\"--repo\", repo)\n }\n\n args.push(\"--json\", \"jobs\")\n return args\n }\n\n if (capabilityId === \"workflow_job.logs.get\" || capabilityId === \"workflow_job.logs.analyze\") {\n const jobId = parseStrictPositiveInt(params.jobId)\n if (jobId === null) {\n throw new Error(`Missing or invalid jobId for ${capabilityId}`)\n }\n\n const args = [...commandTokens(card, \"run view\"), \"--job\", String(jobId), \"--log\"]\n if (repo) {\n args.push(\"--repo\", repo)\n }\n\n return args\n }\n\n throw new Error(`Unsupported CLI capability: ${capabilityId}`)\n}\n\nfunction parseCliData(stdout: string): unknown {\n const trimmed = stdout.trim()\n if (!trimmed) {\n return {}\n }\n\n return JSON.parse(trimmed)\n}\n\nfunction normalizeListItem(item: unknown): Record<string, unknown> {\n if (typeof item !== \"object\" || item === null || Array.isArray(item)) {\n return {}\n }\n\n const input = item as Record<string, unknown>\n return {\n id: input.id,\n number: input.number,\n title: input.title,\n state: input.state,\n url: input.url\n }\n}\n\nfunction normalizeCheckItem(item: unknown): Record<string, unknown> {\n if (typeof item !== \"object\" || item === null || Array.isArray(item)) {\n return {\n name: null,\n state: null,\n bucket: null,\n workflow: null,\n link: null\n }\n }\n\n const input = item as Record<string, unknown>\n return {\n name: typeof input.name === \"string\" ? input.name : null,\n state: typeof input.state === \"string\" ? input.state : null,\n bucket: typeof input.bucket === \"string\" ? input.bucket : null,\n workflow: typeof input.workflow === \"string\" ? input.workflow : null,\n link: typeof input.link === \"string\" ? input.link : null\n }\n}\n\nfunction normalizeCheckBucket(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null\n }\n\n return value.trim().toLowerCase()\n}\n\nfunction isCheckFailureBucket(bucket: unknown): boolean {\n const normalized = normalizeCheckBucket(bucket)\n if (!normalized) {\n return false\n }\n\n return normalized === \"fail\" || normalized === \"cancel\"\n}\n\nfunction isCheckPendingBucket(bucket: unknown): boolean {\n const normalized = normalizeCheckBucket(bucket)\n if (!normalized) {\n return false\n }\n\n return normalized === \"pending\"\n}\n\nfunction isCheckPassBucket(bucket: unknown): boolean {\n const normalized = normalizeCheckBucket(bucket)\n if (!normalized) {\n return false\n }\n\n return normalized === \"pass\"\n}\n\nfunction normalizeCliData(capabilityId: CliCapabilityId, data: unknown, params: Record<string, unknown>): unknown {\n if (capabilityId === \"repo.view\") {\n const input = typeof data === \"object\" && data !== null && !Array.isArray(data)\n ? (data as Record<string, unknown>)\n : {}\n const defaultBranchRef =\n typeof input.defaultBranchRef === \"object\" && input.defaultBranchRef !== null\n ? (input.defaultBranchRef as Record<string, unknown>)\n : null\n\n return {\n id: input.id,\n name: input.name,\n nameWithOwner: input.nameWithOwner,\n isPrivate: input.isPrivate,\n stargazerCount: input.stargazerCount,\n forkCount: input.forkCount,\n url: input.url,\n defaultBranch:\n typeof defaultBranchRef?.name === \"string\"\n ? defaultBranchRef.name\n : null\n }\n }\n\n if (capabilityId === \"issue.list\" || capabilityId === \"pr.list\") {\n const items = Array.isArray(data) ? data.map((entry) => normalizeListItem(entry)) : []\n return {\n items,\n pageInfo: {\n hasNextPage: false,\n endCursor: null\n }\n }\n }\n\n if (capabilityId === \"issue.comments.list\") {\n if (parseStrictPositiveInt(params.first) === null) {\n throw new Error(\"Missing or invalid first for issue.comments.list\")\n }\n\n const input = typeof data === \"object\" && data !== null && !Array.isArray(data)\n ? (data as Record<string, unknown>)\n : {}\n const commentsConnection =\n typeof input.data === \"object\" && input.data !== null && !Array.isArray(input.data)\n ? (input.data as Record<string, unknown>).repository\n : null\n const repository =\n typeof commentsConnection === \"object\" && commentsConnection !== null && !Array.isArray(commentsConnection)\n ? (commentsConnection as Record<string, unknown>)\n : null\n const issue =\n typeof repository?.issue === \"object\" && repository.issue !== null && !Array.isArray(repository.issue)\n ? (repository.issue as Record<string, unknown>)\n : null\n const comments =\n typeof issue?.comments === \"object\" && issue.comments !== null && !Array.isArray(issue.comments)\n ? (issue.comments as Record<string, unknown>)\n : null\n const nodes = Array.isArray(comments?.nodes) ? comments.nodes : null\n const pageInfo =\n typeof comments?.pageInfo === \"object\" && comments.pageInfo !== null && !Array.isArray(comments.pageInfo)\n ? (comments.pageInfo as Record<string, unknown>)\n : null\n\n if (nodes === null || pageInfo === null || typeof pageInfo.hasNextPage !== \"boolean\") {\n throw new Error(\"Invalid CLI payload: comments connection is malformed\")\n }\n\n const normalizedItems = nodes.flatMap((comment) => {\n if (typeof comment !== \"object\" || comment === null || Array.isArray(comment)) {\n throw new Error(\"Invalid CLI payload: comment item must be an object\")\n }\n\n const commentRecord = comment as Record<string, unknown>\n const author =\n typeof commentRecord.author === \"object\" && commentRecord.author !== null\n ? (commentRecord.author as Record<string, unknown>)\n : null\n\n if (\n typeof commentRecord.id !== \"string\" ||\n typeof commentRecord.body !== \"string\" ||\n typeof commentRecord.url !== \"string\" ||\n typeof commentRecord.createdAt !== \"string\"\n ) {\n throw new Error(\"Invalid CLI payload: comment item has invalid field types\")\n }\n\n return [{\n id: commentRecord.id,\n body: commentRecord.body,\n authorLogin: typeof author?.login === \"string\" ? author.login : null,\n url: commentRecord.url,\n createdAt: commentRecord.createdAt\n }]\n })\n\n return {\n items: normalizedItems,\n pageInfo: {\n hasNextPage: pageInfo.hasNextPage,\n endCursor: typeof pageInfo.endCursor === \"string\" ? pageInfo.endCursor : null\n }\n }\n }\n\n if (capabilityId === \"pr.status.checks\" || capabilityId === \"pr.checks.get_failed\") {\n const checks = Array.isArray(data) ? data.map((entry) => normalizeCheckItem(entry)) : []\n const failed = checks.filter((entry) => isCheckFailureBucket(entry.bucket))\n const pending = checks.filter((entry) => isCheckPendingBucket(entry.bucket))\n const passed = checks.filter((entry) => isCheckPassBucket(entry.bucket))\n\n return {\n items: capabilityId === \"pr.checks.get_failed\" ? failed : checks,\n summary: {\n total: checks.length,\n failed: failed.length,\n pending: pending.length,\n passed: passed.length\n }\n }\n }\n\n if (capabilityId === \"pr.mergeability.view\") {\n const input = typeof data === \"object\" && data !== null && !Array.isArray(data)\n ? (data as Record<string, unknown>)\n : {}\n\n return {\n mergeable: typeof input.mergeable === \"string\" ? input.mergeable : null,\n mergeStateStatus: typeof input.mergeStateStatus === \"string\" ? input.mergeStateStatus : null,\n reviewDecision: typeof input.reviewDecision === \"string\" ? input.reviewDecision : null,\n isDraft: Boolean(input.isDraft),\n state: typeof input.state === \"string\" ? input.state : \"UNKNOWN\"\n }\n }\n\n if (capabilityId === \"pr.ready_for_review.set\") {\n const prNumber = Number(params.prNumber)\n const ready = Boolean(params.ready)\n\n return {\n prNumber,\n isDraft: !ready\n }\n }\n\n if (capabilityId === \"check_run.annotations.list\") {\n const annotations = Array.isArray(data) ? data : []\n\n return {\n items: annotations.map((annotation) => {\n if (typeof annotation !== \"object\" || annotation === null || Array.isArray(annotation)) {\n return {\n path: null,\n startLine: null,\n endLine: null,\n level: null,\n message: null,\n title: null,\n details: null\n }\n }\n\n const record = annotation as Record<string, unknown>\n return {\n path: typeof record.path === \"string\" ? record.path : null,\n startLine: typeof record.start_line === \"number\" ? record.start_line : null,\n endLine: typeof record.end_line === \"number\" ? record.end_line : null,\n level: typeof record.annotation_level === \"string\" ? record.annotation_level : null,\n message: typeof record.message === \"string\" ? record.message : null,\n title: typeof record.title === \"string\" ? record.title : null,\n details: typeof record.raw_details === \"string\" ? record.raw_details : null\n }\n })\n }\n }\n\n if (capabilityId === \"workflow_runs.list\") {\n const runs = Array.isArray(data) ? data : []\n\n return {\n items: runs.map((run) => {\n if (typeof run !== \"object\" || run === null || Array.isArray(run)) {\n return {\n id: 0,\n workflowName: null,\n status: null,\n conclusion: null,\n headBranch: null,\n url: null\n }\n }\n\n const record = run as Record<string, unknown>\n return {\n id: typeof record.databaseId === \"number\" ? record.databaseId : 0,\n workflowName: typeof record.workflowName === \"string\" ? record.workflowName : null,\n status: typeof record.status === \"string\" ? record.status : null,\n conclusion: typeof record.conclusion === \"string\" ? record.conclusion : null,\n headBranch: typeof record.headBranch === \"string\" ? record.headBranch : null,\n url: typeof record.url === \"string\" ? record.url : null\n }\n }),\n pageInfo: {\n hasNextPage: false,\n endCursor: null\n }\n }\n }\n\n if (capabilityId === \"workflow_run.jobs.list\") {\n const root = typeof data === \"object\" && data !== null && !Array.isArray(data)\n ? (data as Record<string, unknown>)\n : {}\n const jobs = Array.isArray(root.jobs) ? root.jobs : []\n\n return {\n items: jobs.map((job) => {\n if (typeof job !== \"object\" || job === null || Array.isArray(job)) {\n return {\n id: 0,\n name: null,\n status: null,\n conclusion: null,\n startedAt: null,\n completedAt: null,\n url: null\n }\n }\n\n const record = job as Record<string, unknown>\n return {\n id: typeof record.databaseId === \"number\" ? record.databaseId : 0,\n name: typeof record.name === \"string\" ? record.name : null,\n status: typeof record.status === \"string\" ? record.status : null,\n conclusion: typeof record.conclusion === \"string\" ? record.conclusion : null,\n startedAt: typeof record.startedAt === \"string\" ? record.startedAt : null,\n completedAt: typeof record.completedAt === \"string\" ? record.completedAt : null,\n url: typeof record.url === \"string\" ? record.url : null\n }\n })\n }\n }\n\n if (capabilityId === \"workflow_job.logs.get\") {\n const jobId = Number(params.jobId)\n\n const rawLog = typeof data === \"string\" ? data : String(data)\n const truncated = rawLog.length > MAX_WORKFLOW_JOB_LOG_CHARS\n\n return {\n jobId,\n log: truncated ? rawLog.slice(0, MAX_WORKFLOW_JOB_LOG_CHARS) : rawLog,\n truncated\n }\n }\n\n if (capabilityId === \"workflow_job.logs.analyze\") {\n const jobId = Number(params.jobId)\n\n const rawLog = typeof data === \"string\" ? data : String(data)\n const truncated = rawLog.length > MAX_WORKFLOW_JOB_LOG_CHARS\n const boundedLog = truncated ? rawLog.slice(0, MAX_WORKFLOW_JOB_LOG_CHARS) : rawLog\n\n const lines = boundedLog.split(/\\r?\\n/)\n const errorLines = lines.filter((line) => /\\berror\\b/i.test(line))\n const topErrorLines = errorLines.slice(0, 10)\n const warningLines = lines.filter((line) => /\\bwarn(ing)?\\b/i.test(line))\n\n return {\n jobId,\n truncated,\n summary: {\n errorCount: errorLines.length,\n warningCount: warningLines.length,\n topErrorLines\n }\n }\n }\n\n if (capabilityId === \"issue.view\" || capabilityId === \"pr.view\") {\n return normalizeListItem(data)\n }\n\n return data\n}\n\nexport async function runCliCapability(\n runner: CliCommandRunner,\n capabilityId: CliCapabilityId,\n params: Record<string, unknown>,\n card?: OperationCard\n): Promise<ResultEnvelope> {\n try {\n const args = buildArgs(capabilityId, params, card)\n const result = await runner.run(\"gh\", args, DEFAULT_TIMEOUT_MS)\n\n if (result.exitCode !== 0) {\n const code = mapErrorToCode(result.stderr)\n return normalizeError(\n {\n code,\n message: result.stderr || `gh exited with code ${result.exitCode}`,\n retryable: isRetryableErrorCode(code),\n details: { capabilityId, args, exitCode: result.exitCode }\n },\n \"cli\",\n { capabilityId, reason: \"CARD_FALLBACK\" }\n )\n }\n\n const data =\n capabilityId === \"workflow_job.logs.get\" || capabilityId === \"workflow_job.logs.analyze\"\n ? result.stdout\n : parseCliData(result.stdout)\n const normalized = normalizeCliData(capabilityId, data, params)\n return normalizeResult(normalized, \"cli\", { capabilityId, reason: \"CARD_FALLBACK\" })\n } catch (error: unknown) {\n if (error instanceof SyntaxError) {\n return normalizeError(\n {\n code: errorCodes.Server,\n message: \"Failed to parse CLI JSON output\",\n retryable: false\n },\n \"cli\",\n { capabilityId, reason: \"CARD_FALLBACK\" }\n )\n }\n\n if (error instanceof Error && error.message.toLowerCase().includes(\"invalid cli payload\")) {\n return normalizeError(\n {\n code: errorCodes.Server,\n message: error.message,\n retryable: false\n },\n \"cli\",\n { capabilityId, reason: \"CARD_FALLBACK\" }\n )\n }\n\n if (error instanceof Error && error.message.toLowerCase().includes(\"invalid after cursor\")) {\n return normalizeError(\n {\n code: errorCodes.Validation,\n message: error.message,\n retryable: false\n },\n \"cli\",\n { capabilityId, reason: \"CARD_FALLBACK\" }\n )\n }\n\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 \"cli\",\n { capabilityId, reason: \"CARD_FALLBACK\" }\n )\n }\n}\n"],"mappings":"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","names":[]}