@ghx-dev/core 0.1.0 → 0.1.1

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 (480) hide show
  1. package/README.md +14 -2
  2. package/dist/agent.d.ts +32 -7
  3. package/dist/agent.js +29 -12
  4. package/dist/agent.js.map +1 -1
  5. package/dist/{chunk-JH6GM6XU.js → chunk-OL4ARD3R.js} +116 -7
  6. package/dist/chunk-OL4ARD3R.js.map +1 -0
  7. package/dist/chunk-PJ2JKKQE.js +4148 -0
  8. package/dist/chunk-PJ2JKKQE.js.map +1 -0
  9. package/dist/{chunk-4PLVKNCF.js → chunk-SCIJMW5P.js} +14 -4
  10. package/dist/chunk-SCIJMW5P.js.map +1 -0
  11. package/dist/cli/assets/skills/ghx/SKILL.md +57 -0
  12. package/dist/cli/index.js +373 -41
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/{core/contracts/envelope.d.ts → envelope-BpF6MNCv.d.ts} +15 -3
  15. package/dist/index.d.ts +470 -22
  16. package/dist/index.js +6 -30
  17. package/package.json +11 -9
  18. package/dist/agent-interface/prompt/main-skill.d.ts +0 -3
  19. package/dist/agent-interface/prompt/main-skill.js +0 -7
  20. package/dist/agent-interface/prompt/main-skill.js.map +0 -1
  21. package/dist/agent-interface/tools/execute-tool.d.ts +0 -16
  22. package/dist/agent-interface/tools/execute-tool.js +0 -7
  23. package/dist/agent-interface/tools/execute-tool.js.map +0 -1
  24. package/dist/agent-interface/tools/explain-tool.d.ts +0 -11
  25. package/dist/agent-interface/tools/explain-tool.js +0 -9
  26. package/dist/agent-interface/tools/explain-tool.js.map +0 -1
  27. package/dist/agent-interface/tools/list-capabilities-tool.d.ts +0 -7
  28. package/dist/agent-interface/tools/list-capabilities-tool.js +0 -9
  29. package/dist/agent-interface/tools/list-capabilities-tool.js.map +0 -1
  30. package/dist/chunk-22WWCK6A.js +0 -92
  31. package/dist/chunk-22WWCK6A.js.map +0 -1
  32. package/dist/chunk-2W4L5YCC.js +0 -116
  33. package/dist/chunk-2W4L5YCC.js.map +0 -1
  34. package/dist/chunk-3MRJX72M.js +0 -209
  35. package/dist/chunk-3MRJX72M.js.map +0 -1
  36. package/dist/chunk-4PLVKNCF.js.map +0 -1
  37. package/dist/chunk-573MDG3I.js +0 -18
  38. package/dist/chunk-573MDG3I.js.map +0 -1
  39. package/dist/chunk-5JRLVOF2.js +0 -50
  40. package/dist/chunk-5JRLVOF2.js.map +0 -1
  41. package/dist/chunk-B6RLMKS4.js +0 -41
  42. package/dist/chunk-B6RLMKS4.js.map +0 -1
  43. package/dist/chunk-D746VR3B.js +0 -38
  44. package/dist/chunk-D746VR3B.js.map +0 -1
  45. package/dist/chunk-DJIEG6K7.js +0 -20
  46. package/dist/chunk-DJIEG6K7.js.map +0 -1
  47. package/dist/chunk-DLKIQBK6.js +0 -106
  48. package/dist/chunk-DLKIQBK6.js.map +0 -1
  49. package/dist/chunk-EBRDO4Y6.js +0 -31
  50. package/dist/chunk-EBRDO4Y6.js.map +0 -1
  51. package/dist/chunk-FXN6IIT5.js +0 -14
  52. package/dist/chunk-FXN6IIT5.js.map +0 -1
  53. package/dist/chunk-GMTG7X2L.js +0 -16
  54. package/dist/chunk-GMTG7X2L.js.map +0 -1
  55. package/dist/chunk-HQ2VRCH7.js +0 -42
  56. package/dist/chunk-HQ2VRCH7.js.map +0 -1
  57. package/dist/chunk-JH6GM6XU.js.map +0 -1
  58. package/dist/chunk-JLDU462R.js +0 -1352
  59. package/dist/chunk-JLDU462R.js.map +0 -1
  60. package/dist/chunk-MGNGSGMF.js +0 -203
  61. package/dist/chunk-MGNGSGMF.js.map +0 -1
  62. package/dist/chunk-NFF5VF4U.js +0 -28
  63. package/dist/chunk-NFF5VF4U.js.map +0 -1
  64. package/dist/chunk-QEAMC4IJ.js +0 -34
  65. package/dist/chunk-QEAMC4IJ.js.map +0 -1
  66. package/dist/chunk-QZZC53HF.js +0 -38
  67. package/dist/chunk-QZZC53HF.js.map +0 -1
  68. package/dist/chunk-RUQXGZ35.js +0 -34
  69. package/dist/chunk-RUQXGZ35.js.map +0 -1
  70. package/dist/chunk-SA2D4A5U.js +0 -1496
  71. package/dist/chunk-SA2D4A5U.js.map +0 -1
  72. package/dist/chunk-SD7U4BNA.js +0 -174
  73. package/dist/chunk-SD7U4BNA.js.map +0 -1
  74. package/dist/chunk-SJR2SACI.js +0 -30
  75. package/dist/chunk-SJR2SACI.js.map +0 -1
  76. package/dist/chunk-TCLMLVUQ.js +0 -38
  77. package/dist/chunk-TCLMLVUQ.js.map +0 -1
  78. package/dist/chunk-TDTKOJKN.js +0 -52
  79. package/dist/chunk-TDTKOJKN.js.map +0 -1
  80. package/dist/chunk-UGWIZ3RI.js +0 -7
  81. package/dist/chunk-UGWIZ3RI.js.map +0 -1
  82. package/dist/chunk-UOJWOHRM.js +0 -16
  83. package/dist/chunk-UOJWOHRM.js.map +0 -1
  84. package/dist/chunk-VD5NXQP7.js +0 -42
  85. package/dist/chunk-VD5NXQP7.js.map +0 -1
  86. package/dist/chunk-W2TKG2UL.js +0 -37
  87. package/dist/chunk-W2TKG2UL.js.map +0 -1
  88. package/dist/chunk-W6ROKCY5.js +0 -28
  89. package/dist/chunk-W6ROKCY5.js.map +0 -1
  90. package/dist/chunk-XNMM64WU.js +0 -221
  91. package/dist/chunk-XNMM64WU.js.map +0 -1
  92. package/dist/cli/commands/capabilities-explain.d.ts +0 -3
  93. package/dist/cli/commands/capabilities-explain.js +0 -10
  94. package/dist/cli/commands/capabilities-explain.js.map +0 -1
  95. package/dist/cli/commands/capabilities-list.d.ts +0 -3
  96. package/dist/cli/commands/capabilities-list.js +0 -10
  97. package/dist/cli/commands/capabilities-list.js.map +0 -1
  98. package/dist/cli/commands/doctor.d.ts +0 -3
  99. package/dist/cli/commands/doctor.js +0 -7
  100. package/dist/cli/commands/doctor.js.map +0 -1
  101. package/dist/cli/commands/routes.d.ts +0 -3
  102. package/dist/cli/commands/routes.js +0 -7
  103. package/dist/cli/commands/routes.js.map +0 -1
  104. package/dist/cli/commands/run.d.ts +0 -3
  105. package/dist/cli/commands/run.js +0 -31
  106. package/dist/cli/commands/run.js.map +0 -1
  107. package/dist/cli/commands/setup.d.ts +0 -3
  108. package/dist/cli/commands/setup.js +0 -7
  109. package/dist/cli/commands/setup.js.map +0 -1
  110. package/dist/cli/formatters/json.d.ts +0 -3
  111. package/dist/cli/formatters/json.js +0 -8
  112. package/dist/cli/formatters/json.js.map +0 -1
  113. package/dist/cli/formatters/table.d.ts +0 -3
  114. package/dist/cli/formatters/table.js +0 -8
  115. package/dist/cli/formatters/table.js.map +0 -1
  116. package/dist/core/contracts/envelope.js +0 -1
  117. package/dist/core/contracts/envelope.js.map +0 -1
  118. package/dist/core/contracts/task.d.ts +0 -7
  119. package/dist/core/contracts/task.js +0 -1
  120. package/dist/core/contracts/task.js.map +0 -1
  121. package/dist/core/contracts/tasks/check_run.annotations.list.d.ts +0 -5
  122. package/dist/core/contracts/tasks/check_run.annotations.list.js +0 -8
  123. package/dist/core/contracts/tasks/check_run.annotations.list.js.map +0 -1
  124. package/dist/core/contracts/tasks/issue.assignees.update.d.ts +0 -5
  125. package/dist/core/contracts/tasks/issue.assignees.update.js +0 -8
  126. package/dist/core/contracts/tasks/issue.assignees.update.js.map +0 -1
  127. package/dist/core/contracts/tasks/issue.blocked_by.add.d.ts +0 -5
  128. package/dist/core/contracts/tasks/issue.blocked_by.add.js +0 -8
  129. package/dist/core/contracts/tasks/issue.blocked_by.add.js.map +0 -1
  130. package/dist/core/contracts/tasks/issue.blocked_by.remove.d.ts +0 -5
  131. package/dist/core/contracts/tasks/issue.blocked_by.remove.js +0 -8
  132. package/dist/core/contracts/tasks/issue.blocked_by.remove.js.map +0 -1
  133. package/dist/core/contracts/tasks/issue.close.d.ts +0 -5
  134. package/dist/core/contracts/tasks/issue.close.js +0 -8
  135. package/dist/core/contracts/tasks/issue.close.js.map +0 -1
  136. package/dist/core/contracts/tasks/issue.comments.create.d.ts +0 -5
  137. package/dist/core/contracts/tasks/issue.comments.create.js +0 -8
  138. package/dist/core/contracts/tasks/issue.comments.create.js.map +0 -1
  139. package/dist/core/contracts/tasks/issue.comments.list.d.ts +0 -5
  140. package/dist/core/contracts/tasks/issue.comments.list.js +0 -8
  141. package/dist/core/contracts/tasks/issue.comments.list.js.map +0 -1
  142. package/dist/core/contracts/tasks/issue.create.d.ts +0 -5
  143. package/dist/core/contracts/tasks/issue.create.js +0 -8
  144. package/dist/core/contracts/tasks/issue.create.js.map +0 -1
  145. package/dist/core/contracts/tasks/issue.delete.d.ts +0 -5
  146. package/dist/core/contracts/tasks/issue.delete.js +0 -8
  147. package/dist/core/contracts/tasks/issue.delete.js.map +0 -1
  148. package/dist/core/contracts/tasks/issue.labels.update.d.ts +0 -5
  149. package/dist/core/contracts/tasks/issue.labels.update.js +0 -8
  150. package/dist/core/contracts/tasks/issue.labels.update.js.map +0 -1
  151. package/dist/core/contracts/tasks/issue.linked_prs.list.d.ts +0 -5
  152. package/dist/core/contracts/tasks/issue.linked_prs.list.js +0 -8
  153. package/dist/core/contracts/tasks/issue.linked_prs.list.js.map +0 -1
  154. package/dist/core/contracts/tasks/issue.list.d.ts +0 -5
  155. package/dist/core/contracts/tasks/issue.list.js +0 -8
  156. package/dist/core/contracts/tasks/issue.list.js.map +0 -1
  157. package/dist/core/contracts/tasks/issue.milestone.set.d.ts +0 -5
  158. package/dist/core/contracts/tasks/issue.milestone.set.js +0 -8
  159. package/dist/core/contracts/tasks/issue.milestone.set.js.map +0 -1
  160. package/dist/core/contracts/tasks/issue.parent.remove.d.ts +0 -5
  161. package/dist/core/contracts/tasks/issue.parent.remove.js +0 -8
  162. package/dist/core/contracts/tasks/issue.parent.remove.js.map +0 -1
  163. package/dist/core/contracts/tasks/issue.parent.set.d.ts +0 -5
  164. package/dist/core/contracts/tasks/issue.parent.set.js +0 -8
  165. package/dist/core/contracts/tasks/issue.parent.set.js.map +0 -1
  166. package/dist/core/contracts/tasks/issue.relations.get.d.ts +0 -5
  167. package/dist/core/contracts/tasks/issue.relations.get.js +0 -8
  168. package/dist/core/contracts/tasks/issue.relations.get.js.map +0 -1
  169. package/dist/core/contracts/tasks/issue.reopen.d.ts +0 -5
  170. package/dist/core/contracts/tasks/issue.reopen.js +0 -8
  171. package/dist/core/contracts/tasks/issue.reopen.js.map +0 -1
  172. package/dist/core/contracts/tasks/issue.update.d.ts +0 -5
  173. package/dist/core/contracts/tasks/issue.update.js +0 -8
  174. package/dist/core/contracts/tasks/issue.update.js.map +0 -1
  175. package/dist/core/contracts/tasks/issue.view.d.ts +0 -5
  176. package/dist/core/contracts/tasks/issue.view.js +0 -8
  177. package/dist/core/contracts/tasks/issue.view.js.map +0 -1
  178. package/dist/core/contracts/tasks/pr.assignees.update.d.ts +0 -5
  179. package/dist/core/contracts/tasks/pr.assignees.update.js +0 -8
  180. package/dist/core/contracts/tasks/pr.assignees.update.js.map +0 -1
  181. package/dist/core/contracts/tasks/pr.branch.update.d.ts +0 -5
  182. package/dist/core/contracts/tasks/pr.branch.update.js +0 -8
  183. package/dist/core/contracts/tasks/pr.branch.update.js.map +0 -1
  184. package/dist/core/contracts/tasks/pr.checks.get_failed.d.ts +0 -5
  185. package/dist/core/contracts/tasks/pr.checks.get_failed.js +0 -8
  186. package/dist/core/contracts/tasks/pr.checks.get_failed.js.map +0 -1
  187. package/dist/core/contracts/tasks/pr.checks.rerun_all.d.ts +0 -5
  188. package/dist/core/contracts/tasks/pr.checks.rerun_all.js +0 -8
  189. package/dist/core/contracts/tasks/pr.checks.rerun_all.js.map +0 -1
  190. package/dist/core/contracts/tasks/pr.checks.rerun_failed.d.ts +0 -5
  191. package/dist/core/contracts/tasks/pr.checks.rerun_failed.js +0 -8
  192. package/dist/core/contracts/tasks/pr.checks.rerun_failed.js.map +0 -1
  193. package/dist/core/contracts/tasks/pr.comment.reply.d.ts +0 -5
  194. package/dist/core/contracts/tasks/pr.comment.reply.js +0 -8
  195. package/dist/core/contracts/tasks/pr.comment.reply.js.map +0 -1
  196. package/dist/core/contracts/tasks/pr.comment.resolve.d.ts +0 -5
  197. package/dist/core/contracts/tasks/pr.comment.resolve.js +0 -8
  198. package/dist/core/contracts/tasks/pr.comment.resolve.js.map +0 -1
  199. package/dist/core/contracts/tasks/pr.comment.unresolve.d.ts +0 -5
  200. package/dist/core/contracts/tasks/pr.comment.unresolve.js +0 -8
  201. package/dist/core/contracts/tasks/pr.comment.unresolve.js.map +0 -1
  202. package/dist/core/contracts/tasks/pr.comments.list.d.ts +0 -5
  203. package/dist/core/contracts/tasks/pr.comments.list.js +0 -8
  204. package/dist/core/contracts/tasks/pr.comments.list.js.map +0 -1
  205. package/dist/core/contracts/tasks/pr.diff.list_files.d.ts +0 -5
  206. package/dist/core/contracts/tasks/pr.diff.list_files.js +0 -8
  207. package/dist/core/contracts/tasks/pr.diff.list_files.js.map +0 -1
  208. package/dist/core/contracts/tasks/pr.list.d.ts +0 -5
  209. package/dist/core/contracts/tasks/pr.list.js +0 -8
  210. package/dist/core/contracts/tasks/pr.list.js.map +0 -1
  211. package/dist/core/contracts/tasks/pr.merge.execute.d.ts +0 -5
  212. package/dist/core/contracts/tasks/pr.merge.execute.js +0 -8
  213. package/dist/core/contracts/tasks/pr.merge.execute.js.map +0 -1
  214. package/dist/core/contracts/tasks/pr.mergeability.view.d.ts +0 -5
  215. package/dist/core/contracts/tasks/pr.mergeability.view.js +0 -8
  216. package/dist/core/contracts/tasks/pr.mergeability.view.js.map +0 -1
  217. package/dist/core/contracts/tasks/pr.ready_for_review.set.d.ts +0 -5
  218. package/dist/core/contracts/tasks/pr.ready_for_review.set.js +0 -8
  219. package/dist/core/contracts/tasks/pr.ready_for_review.set.js.map +0 -1
  220. package/dist/core/contracts/tasks/pr.review.submit_approve.d.ts +0 -5
  221. package/dist/core/contracts/tasks/pr.review.submit_approve.js +0 -8
  222. package/dist/core/contracts/tasks/pr.review.submit_approve.js.map +0 -1
  223. package/dist/core/contracts/tasks/pr.review.submit_comment.d.ts +0 -5
  224. package/dist/core/contracts/tasks/pr.review.submit_comment.js +0 -8
  225. package/dist/core/contracts/tasks/pr.review.submit_comment.js.map +0 -1
  226. package/dist/core/contracts/tasks/pr.review.submit_request_changes.d.ts +0 -5
  227. package/dist/core/contracts/tasks/pr.review.submit_request_changes.js +0 -8
  228. package/dist/core/contracts/tasks/pr.review.submit_request_changes.js.map +0 -1
  229. package/dist/core/contracts/tasks/pr.reviewers.request.d.ts +0 -5
  230. package/dist/core/contracts/tasks/pr.reviewers.request.js +0 -8
  231. package/dist/core/contracts/tasks/pr.reviewers.request.js.map +0 -1
  232. package/dist/core/contracts/tasks/pr.reviews.list.d.ts +0 -5
  233. package/dist/core/contracts/tasks/pr.reviews.list.js +0 -8
  234. package/dist/core/contracts/tasks/pr.reviews.list.js.map +0 -1
  235. package/dist/core/contracts/tasks/pr.status.checks.d.ts +0 -5
  236. package/dist/core/contracts/tasks/pr.status.checks.js +0 -8
  237. package/dist/core/contracts/tasks/pr.status.checks.js.map +0 -1
  238. package/dist/core/contracts/tasks/pr.view.d.ts +0 -5
  239. package/dist/core/contracts/tasks/pr.view.js +0 -8
  240. package/dist/core/contracts/tasks/pr.view.js.map +0 -1
  241. package/dist/core/contracts/tasks/project_v2.fields.list.d.ts +0 -5
  242. package/dist/core/contracts/tasks/project_v2.fields.list.js +0 -8
  243. package/dist/core/contracts/tasks/project_v2.fields.list.js.map +0 -1
  244. package/dist/core/contracts/tasks/project_v2.item.add_issue.d.ts +0 -5
  245. package/dist/core/contracts/tasks/project_v2.item.add_issue.js +0 -8
  246. package/dist/core/contracts/tasks/project_v2.item.add_issue.js.map +0 -1
  247. package/dist/core/contracts/tasks/project_v2.item.field.update.d.ts +0 -5
  248. package/dist/core/contracts/tasks/project_v2.item.field.update.js +0 -8
  249. package/dist/core/contracts/tasks/project_v2.item.field.update.js.map +0 -1
  250. package/dist/core/contracts/tasks/project_v2.items.list.d.ts +0 -5
  251. package/dist/core/contracts/tasks/project_v2.items.list.js +0 -8
  252. package/dist/core/contracts/tasks/project_v2.items.list.js.map +0 -1
  253. package/dist/core/contracts/tasks/project_v2.org.get.d.ts +0 -5
  254. package/dist/core/contracts/tasks/project_v2.org.get.js +0 -8
  255. package/dist/core/contracts/tasks/project_v2.org.get.js.map +0 -1
  256. package/dist/core/contracts/tasks/project_v2.user.get.d.ts +0 -5
  257. package/dist/core/contracts/tasks/project_v2.user.get.js +0 -8
  258. package/dist/core/contracts/tasks/project_v2.user.get.js.map +0 -1
  259. package/dist/core/contracts/tasks/release.create_draft.d.ts +0 -5
  260. package/dist/core/contracts/tasks/release.create_draft.js +0 -8
  261. package/dist/core/contracts/tasks/release.create_draft.js.map +0 -1
  262. package/dist/core/contracts/tasks/release.get.d.ts +0 -5
  263. package/dist/core/contracts/tasks/release.get.js +0 -8
  264. package/dist/core/contracts/tasks/release.get.js.map +0 -1
  265. package/dist/core/contracts/tasks/release.list.d.ts +0 -5
  266. package/dist/core/contracts/tasks/release.list.js +0 -8
  267. package/dist/core/contracts/tasks/release.list.js.map +0 -1
  268. package/dist/core/contracts/tasks/release.publish_draft.d.ts +0 -5
  269. package/dist/core/contracts/tasks/release.publish_draft.js +0 -8
  270. package/dist/core/contracts/tasks/release.publish_draft.js.map +0 -1
  271. package/dist/core/contracts/tasks/release.update.d.ts +0 -5
  272. package/dist/core/contracts/tasks/release.update.js +0 -8
  273. package/dist/core/contracts/tasks/release.update.js.map +0 -1
  274. package/dist/core/contracts/tasks/repo.issue_types.list.d.ts +0 -5
  275. package/dist/core/contracts/tasks/repo.issue_types.list.js +0 -8
  276. package/dist/core/contracts/tasks/repo.issue_types.list.js.map +0 -1
  277. package/dist/core/contracts/tasks/repo.labels.list.d.ts +0 -5
  278. package/dist/core/contracts/tasks/repo.labels.list.js +0 -8
  279. package/dist/core/contracts/tasks/repo.labels.list.js.map +0 -1
  280. package/dist/core/contracts/tasks/repo.view.d.ts +0 -5
  281. package/dist/core/contracts/tasks/repo.view.js +0 -8
  282. package/dist/core/contracts/tasks/repo.view.js.map +0 -1
  283. package/dist/core/contracts/tasks/workflow.get.d.ts +0 -5
  284. package/dist/core/contracts/tasks/workflow.get.js +0 -8
  285. package/dist/core/contracts/tasks/workflow.get.js.map +0 -1
  286. package/dist/core/contracts/tasks/workflow.list.d.ts +0 -5
  287. package/dist/core/contracts/tasks/workflow.list.js +0 -8
  288. package/dist/core/contracts/tasks/workflow.list.js.map +0 -1
  289. package/dist/core/contracts/tasks/workflow_dispatch.run.d.ts +0 -5
  290. package/dist/core/contracts/tasks/workflow_dispatch.run.js +0 -8
  291. package/dist/core/contracts/tasks/workflow_dispatch.run.js.map +0 -1
  292. package/dist/core/contracts/tasks/workflow_job.logs.analyze.d.ts +0 -5
  293. package/dist/core/contracts/tasks/workflow_job.logs.analyze.js +0 -8
  294. package/dist/core/contracts/tasks/workflow_job.logs.analyze.js.map +0 -1
  295. package/dist/core/contracts/tasks/workflow_job.logs.get.d.ts +0 -5
  296. package/dist/core/contracts/tasks/workflow_job.logs.get.js +0 -8
  297. package/dist/core/contracts/tasks/workflow_job.logs.get.js.map +0 -1
  298. package/dist/core/contracts/tasks/workflow_run.artifacts.list.d.ts +0 -5
  299. package/dist/core/contracts/tasks/workflow_run.artifacts.list.js +0 -8
  300. package/dist/core/contracts/tasks/workflow_run.artifacts.list.js.map +0 -1
  301. package/dist/core/contracts/tasks/workflow_run.cancel.d.ts +0 -5
  302. package/dist/core/contracts/tasks/workflow_run.cancel.js +0 -8
  303. package/dist/core/contracts/tasks/workflow_run.cancel.js.map +0 -1
  304. package/dist/core/contracts/tasks/workflow_run.get.d.ts +0 -5
  305. package/dist/core/contracts/tasks/workflow_run.get.js +0 -8
  306. package/dist/core/contracts/tasks/workflow_run.get.js.map +0 -1
  307. package/dist/core/contracts/tasks/workflow_run.jobs.list.d.ts +0 -5
  308. package/dist/core/contracts/tasks/workflow_run.jobs.list.js +0 -8
  309. package/dist/core/contracts/tasks/workflow_run.jobs.list.js.map +0 -1
  310. package/dist/core/contracts/tasks/workflow_run.rerun_all.d.ts +0 -5
  311. package/dist/core/contracts/tasks/workflow_run.rerun_all.js +0 -8
  312. package/dist/core/contracts/tasks/workflow_run.rerun_all.js.map +0 -1
  313. package/dist/core/contracts/tasks/workflow_run.rerun_failed.d.ts +0 -5
  314. package/dist/core/contracts/tasks/workflow_run.rerun_failed.js +0 -8
  315. package/dist/core/contracts/tasks/workflow_run.rerun_failed.js.map +0 -1
  316. package/dist/core/contracts/tasks/workflow_runs.list.d.ts +0 -5
  317. package/dist/core/contracts/tasks/workflow_runs.list.js +0 -8
  318. package/dist/core/contracts/tasks/workflow_runs.list.js.map +0 -1
  319. package/dist/core/errors/codes.d.ts +0 -13
  320. package/dist/core/errors/codes.js +0 -7
  321. package/dist/core/errors/codes.js.map +0 -1
  322. package/dist/core/errors/map-error.d.ts +0 -5
  323. package/dist/core/errors/map-error.js +0 -8
  324. package/dist/core/errors/map-error.js.map +0 -1
  325. package/dist/core/errors/retryability.d.ts +0 -3
  326. package/dist/core/errors/retryability.js +0 -8
  327. package/dist/core/errors/retryability.js.map +0 -1
  328. package/dist/core/execute/execute.d.ts +0 -28
  329. package/dist/core/execute/execute.js +0 -11
  330. package/dist/core/execute/execute.js.map +0 -1
  331. package/dist/core/execution/adapters/cli-adapter.d.ts +0 -22
  332. package/dist/core/execution/adapters/cli-adapter.js +0 -69
  333. package/dist/core/execution/adapters/cli-adapter.js.map +0 -1
  334. package/dist/core/execution/adapters/cli-capability-adapter.d.ts +0 -16
  335. package/dist/core/execution/adapters/cli-capability-adapter.js +0 -11
  336. package/dist/core/execution/adapters/cli-capability-adapter.js.map +0 -1
  337. package/dist/core/execution/adapters/graphql-adapter.d.ts +0 -25
  338. package/dist/core/execution/adapters/graphql-adapter.js +0 -44
  339. package/dist/core/execution/adapters/graphql-adapter.js.map +0 -1
  340. package/dist/core/execution/adapters/graphql-capability-adapter.d.ts +0 -20
  341. package/dist/core/execution/adapters/graphql-capability-adapter.js +0 -11
  342. package/dist/core/execution/adapters/graphql-capability-adapter.js.map +0 -1
  343. package/dist/core/execution/adapters/rest-adapter.d.ts +0 -3
  344. package/dist/core/execution/adapters/rest-adapter.js +0 -8
  345. package/dist/core/execution/adapters/rest-adapter.js.map +0 -1
  346. package/dist/core/execution/cli/safe-runner.d.ts +0 -12
  347. package/dist/core/execution/cli/safe-runner.js +0 -7
  348. package/dist/core/execution/cli/safe-runner.js.map +0 -1
  349. package/dist/core/execution/normalizer.d.ts +0 -13
  350. package/dist/core/execution/normalizer.js +0 -9
  351. package/dist/core/execution/normalizer.js.map +0 -1
  352. package/dist/core/execution/preflight.d.ts +0 -24
  353. package/dist/core/execution/preflight.js +0 -8
  354. package/dist/core/execution/preflight.js.map +0 -1
  355. package/dist/core/registry/index.d.ts +0 -15
  356. package/dist/core/registry/index.js +0 -12
  357. package/dist/core/registry/index.js.map +0 -1
  358. package/dist/core/registry/operation-card-schema.d.ts +0 -167
  359. package/dist/core/registry/operation-card-schema.js +0 -7
  360. package/dist/core/registry/operation-card-schema.js.map +0 -1
  361. package/dist/core/registry/schema-validator.d.ts +0 -16
  362. package/dist/core/registry/schema-validator.js +0 -9
  363. package/dist/core/registry/schema-validator.js.map +0 -1
  364. package/dist/core/registry/types.d.ts +0 -51
  365. package/dist/core/registry/types.js +0 -1
  366. package/dist/core/registry/types.js.map +0 -1
  367. package/dist/core/routing/capability-registry.d.ts +0 -8
  368. package/dist/core/routing/capability-registry.js +0 -15
  369. package/dist/core/routing/capability-registry.js.map +0 -1
  370. package/dist/core/routing/engine.d.ts +0 -32
  371. package/dist/core/routing/engine.js +0 -23
  372. package/dist/core/routing/engine.js.map +0 -1
  373. package/dist/core/routing/policy.d.ts +0 -3
  374. package/dist/core/routing/policy.js +0 -7
  375. package/dist/core/routing/policy.js.map +0 -1
  376. package/dist/core/routing/reason-codes.d.ts +0 -4
  377. package/dist/core/routing/reason-codes.js +0 -15
  378. package/dist/core/routing/reason-codes.js.map +0 -1
  379. package/dist/core/telemetry/logger.d.ts +0 -8
  380. package/dist/core/telemetry/logger.js +0 -9
  381. package/dist/core/telemetry/logger.js.map +0 -1
  382. package/dist/core/telemetry/metrics.d.ts +0 -7
  383. package/dist/core/telemetry/metrics.js +0 -1
  384. package/dist/core/telemetry/metrics.js.map +0 -1
  385. package/dist/gql/client.d.ts +0 -314
  386. package/dist/gql/client.js +0 -19
  387. package/dist/gql/client.js.map +0 -1
  388. package/dist/gql/generated/common-types.d.ts +0 -36
  389. package/dist/gql/generated/common-types.js +0 -1
  390. package/dist/gql/generated/common-types.js.map +0 -1
  391. package/dist/gql/operations/issue-assignees-update.generated.d.ts +0 -33
  392. package/dist/gql/operations/issue-assignees-update.generated.js +0 -28
  393. package/dist/gql/operations/issue-assignees-update.generated.js.map +0 -1
  394. package/dist/gql/operations/issue-blocked-by-add.generated.d.ts +0 -30
  395. package/dist/gql/operations/issue-blocked-by-add.generated.js +0 -26
  396. package/dist/gql/operations/issue-blocked-by-add.generated.js.map +0 -1
  397. package/dist/gql/operations/issue-blocked-by-remove.generated.d.ts +0 -30
  398. package/dist/gql/operations/issue-blocked-by-remove.generated.js +0 -26
  399. package/dist/gql/operations/issue-blocked-by-remove.generated.js.map +0 -1
  400. package/dist/gql/operations/issue-close.generated.d.ts +0 -27
  401. package/dist/gql/operations/issue-close.generated.js +0 -25
  402. package/dist/gql/operations/issue-close.generated.js.map +0 -1
  403. package/dist/gql/operations/issue-comment-create.generated.d.ts +0 -31
  404. package/dist/gql/operations/issue-comment-create.generated.js +0 -27
  405. package/dist/gql/operations/issue-comment-create.generated.js.map +0 -1
  406. package/dist/gql/operations/issue-comments-list.generated.d.ts +0 -59
  407. package/dist/gql/operations/issue-comments-list.generated.js +0 -9
  408. package/dist/gql/operations/issue-comments-list.generated.js.map +0 -1
  409. package/dist/gql/operations/issue-create.generated.d.ts +0 -31
  410. package/dist/gql/operations/issue-create.generated.js +0 -27
  411. package/dist/gql/operations/issue-create.generated.js.map +0 -1
  412. package/dist/gql/operations/issue-delete.generated.d.ts +0 -22
  413. package/dist/gql/operations/issue-delete.generated.js +0 -21
  414. package/dist/gql/operations/issue-delete.generated.js.map +0 -1
  415. package/dist/gql/operations/issue-labels-update.generated.d.ts +0 -33
  416. package/dist/gql/operations/issue-labels-update.generated.js +0 -28
  417. package/dist/gql/operations/issue-labels-update.generated.js.map +0 -1
  418. package/dist/gql/operations/issue-linked-prs-list.generated.d.ts +0 -132
  419. package/dist/gql/operations/issue-linked-prs-list.generated.js +0 -39
  420. package/dist/gql/operations/issue-linked-prs-list.generated.js.map +0 -1
  421. package/dist/gql/operations/issue-list.generated.d.ts +0 -40
  422. package/dist/gql/operations/issue-list.generated.js +0 -9
  423. package/dist/gql/operations/issue-list.generated.js.map +0 -1
  424. package/dist/gql/operations/issue-milestone-set.generated.d.ts +0 -30
  425. package/dist/gql/operations/issue-milestone-set.generated.js +0 -26
  426. package/dist/gql/operations/issue-milestone-set.generated.js.map +0 -1
  427. package/dist/gql/operations/issue-parent-remove.generated.d.ts +0 -30
  428. package/dist/gql/operations/issue-parent-remove.generated.js +0 -26
  429. package/dist/gql/operations/issue-parent-remove.generated.js.map +0 -1
  430. package/dist/gql/operations/issue-parent-set.generated.d.ts +0 -30
  431. package/dist/gql/operations/issue-parent-set.generated.js +0 -26
  432. package/dist/gql/operations/issue-parent-set.generated.js.map +0 -1
  433. package/dist/gql/operations/issue-relations-get.generated.d.ts +0 -49
  434. package/dist/gql/operations/issue-relations-get.generated.js +0 -40
  435. package/dist/gql/operations/issue-relations-get.generated.js.map +0 -1
  436. package/dist/gql/operations/issue-reopen.generated.d.ts +0 -27
  437. package/dist/gql/operations/issue-reopen.generated.js +0 -25
  438. package/dist/gql/operations/issue-reopen.generated.js.map +0 -1
  439. package/dist/gql/operations/issue-update.generated.d.ts +0 -31
  440. package/dist/gql/operations/issue-update.generated.js +0 -27
  441. package/dist/gql/operations/issue-update.generated.js.map +0 -1
  442. package/dist/gql/operations/issue-view.generated.d.ts +0 -31
  443. package/dist/gql/operations/issue-view.generated.js +0 -9
  444. package/dist/gql/operations/issue-view.generated.js.map +0 -1
  445. package/dist/gql/operations/pr-comment-reply.generated.d.ts +0 -26
  446. package/dist/gql/operations/pr-comment-reply.generated.js +0 -25
  447. package/dist/gql/operations/pr-comment-reply.generated.js.map +0 -1
  448. package/dist/gql/operations/pr-comment-resolve.generated.d.ts +0 -26
  449. package/dist/gql/operations/pr-comment-resolve.generated.js +0 -24
  450. package/dist/gql/operations/pr-comment-resolve.generated.js.map +0 -1
  451. package/dist/gql/operations/pr-comment-unresolve.generated.d.ts +0 -26
  452. package/dist/gql/operations/pr-comment-unresolve.generated.js +0 -24
  453. package/dist/gql/operations/pr-comment-unresolve.generated.js.map +0 -1
  454. package/dist/gql/operations/pr-comments-list.generated.d.ts +0 -84
  455. package/dist/gql/operations/pr-comments-list.generated.js +0 -58
  456. package/dist/gql/operations/pr-comments-list.generated.js.map +0 -1
  457. package/dist/gql/operations/pr-diff-list-files.generated.d.ts +0 -42
  458. package/dist/gql/operations/pr-diff-list-files.generated.js +0 -9
  459. package/dist/gql/operations/pr-diff-list-files.generated.js.map +0 -1
  460. package/dist/gql/operations/pr-list.generated.d.ts +0 -40
  461. package/dist/gql/operations/pr-list.generated.js +0 -9
  462. package/dist/gql/operations/pr-list.generated.js.map +0 -1
  463. package/dist/gql/operations/pr-reviews-list.generated.d.ts +0 -64
  464. package/dist/gql/operations/pr-reviews-list.generated.js +0 -9
  465. package/dist/gql/operations/pr-reviews-list.generated.js.map +0 -1
  466. package/dist/gql/operations/pr-view.generated.d.ts +0 -31
  467. package/dist/gql/operations/pr-view.generated.js +0 -9
  468. package/dist/gql/operations/pr-view.generated.js.map +0 -1
  469. package/dist/gql/operations/repo-view.generated.d.ts +0 -33
  470. package/dist/gql/operations/repo-view.generated.js +0 -9
  471. package/dist/gql/operations/repo-view.generated.js.map +0 -1
  472. package/dist/shared/constants.d.ts +0 -3
  473. package/dist/shared/constants.js +0 -6
  474. package/dist/shared/constants.js.map +0 -1
  475. package/dist/shared/types.d.ts +0 -3
  476. package/dist/shared/types.js +0 -1
  477. package/dist/shared/types.js.map +0 -1
  478. package/dist/shared/utils.d.ts +0 -3
  479. package/dist/shared/utils.js +0 -8
  480. package/dist/shared/utils.js.map +0 -1
@@ -1,1496 +0,0 @@
1
- import {
2
- mapErrorToCode
3
- } from "./chunk-B6RLMKS4.js";
4
- import {
5
- isRetryableErrorCode
6
- } from "./chunk-573MDG3I.js";
7
- import {
8
- normalizeError,
9
- normalizeResult
10
- } from "./chunk-QEAMC4IJ.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 REDACTED_CLI_ERROR_MESSAGE = "gh command failed; stderr redacted for safety";
20
- var REPO_ISSUE_TYPES_GRAPHQL_QUERY = "query($owner:String!,$name:String!,$first:Int!,$after:String){repository(owner:$owner,name:$name){issueTypes(first:$first,after:$after){nodes{id name color isEnabled} pageInfo{hasNextPage endCursor}}}}";
21
- 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}}}}}";
22
- function containsSensitiveText(value) {
23
- return /(gh[pousr]_[A-Za-z0-9_]+|github_pat_[A-Za-z0-9_]+|authorization:\s*bearer\s+\S+|bearer\s+[A-Za-z0-9._-]{20,}|(?:api[_-]?key|token|secret|password)\s*[=:]\s*\S+)/i.test(
24
- value
25
- );
26
- }
27
- function sanitizeCliErrorMessage(stderr, exitCode) {
28
- const trimmed = stderr.trim();
29
- if (!trimmed) {
30
- return `gh exited with code ${exitCode}`;
31
- }
32
- if (containsSensitiveText(trimmed)) {
33
- return REDACTED_CLI_ERROR_MESSAGE;
34
- }
35
- return trimmed;
36
- }
37
- function parseStrictPositiveInt(value) {
38
- return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : null;
39
- }
40
- function parseListFirst(value) {
41
- if (value === void 0) {
42
- return DEFAULT_LIST_FIRST;
43
- }
44
- return parseStrictPositiveInt(value);
45
- }
46
- function parseNonEmptyString(value) {
47
- if (typeof value !== "string") {
48
- return null;
49
- }
50
- const trimmed = value.trim();
51
- return trimmed.length > 0 ? trimmed : null;
52
- }
53
- function requireRepo(owner, name, capabilityId) {
54
- if (!owner || !name) {
55
- throw new Error(`Missing owner/name for ${capabilityId}`);
56
- }
57
- }
58
- function commandTokens(card, fallbackCommand) {
59
- const fromCard = card?.cli?.command;
60
- const command = typeof fromCard === "string" && fromCard.trim().length > 0 ? fromCard : fallbackCommand;
61
- return command.trim().split(/\s+/);
62
- }
63
- function jsonFieldsFromCard(card, fallbackFields) {
64
- const fields = card?.cli?.jsonFields;
65
- if (Array.isArray(fields) && fields.length > 0) {
66
- return fields.join(",");
67
- }
68
- return fallbackFields;
69
- }
70
- function buildArgs(capabilityId, params, card) {
71
- const owner = String(params.owner ?? "");
72
- const name = String(params.name ?? "");
73
- const repo = owner && name ? `${owner}/${name}` : "";
74
- if (capabilityId === "repo.view") {
75
- const args = commandTokens(card, "repo view");
76
- if (repo) {
77
- args.push(repo);
78
- }
79
- args.push("--json", jsonFieldsFromCard(card, "id,name,nameWithOwner,isPrivate,stargazerCount,forkCount,url,defaultBranchRef"));
80
- return args;
81
- }
82
- if (capabilityId === "repo.labels.list") {
83
- const first = parseListFirst(params.first);
84
- if (first === null) {
85
- throw new Error("Missing or invalid first for repo.labels.list");
86
- }
87
- const args = commandTokens(card, "label list");
88
- if (repo) {
89
- args.push("--repo", repo);
90
- }
91
- args.push("--limit", String(first), "--json", jsonFieldsFromCard(card, "id,name,description,color,isDefault"));
92
- return args;
93
- }
94
- if (capabilityId === "repo.issue_types.list") {
95
- const first = parseListFirst(params.first);
96
- if (first === null) {
97
- throw new Error("Missing or invalid first for repo.issue_types.list");
98
- }
99
- const after = params.after;
100
- if (!(after === void 0 || after === null || typeof after === "string")) {
101
- throw new Error("Invalid after cursor for repo.issue_types.list");
102
- }
103
- if (!owner || !name) {
104
- throw new Error("Missing owner/name for repo.issue_types.list");
105
- }
106
- const args = [
107
- ...commandTokens(card, "api graphql"),
108
- "-f",
109
- `query=${REPO_ISSUE_TYPES_GRAPHQL_QUERY}`,
110
- "-f",
111
- `owner=${owner}`,
112
- "-f",
113
- `name=${name}`,
114
- "-F",
115
- `first=${first}`
116
- ];
117
- if (typeof after === "string" && after.length > 0) {
118
- args.push("-f", `after=${after}`);
119
- }
120
- return args;
121
- }
122
- if (capabilityId === "issue.view") {
123
- const issueNumber = parseStrictPositiveInt(params.issueNumber);
124
- if (issueNumber === null) {
125
- throw new Error("Missing or invalid issueNumber for issue.view");
126
- }
127
- const args = [...commandTokens(card, "issue view"), String(issueNumber)];
128
- if (repo) {
129
- args.push("--repo", repo);
130
- }
131
- args.push("--json", jsonFieldsFromCard(card, "id,number,title,state,url"));
132
- return args;
133
- }
134
- if (capabilityId === "issue.list") {
135
- const first = parseListFirst(params.first);
136
- if (first === null) {
137
- throw new Error("Missing or invalid first for issue.list");
138
- }
139
- const args = commandTokens(card, "issue list");
140
- if (repo) {
141
- args.push("--repo", repo);
142
- }
143
- args.push("--limit", String(first), "--json", jsonFieldsFromCard(card, "id,number,title,state,url"));
144
- return args;
145
- }
146
- if (capabilityId === "issue.comments.list") {
147
- const issueNumber = parseStrictPositiveInt(params.issueNumber);
148
- if (issueNumber === null) {
149
- throw new Error("Missing or invalid issueNumber for issue.comments.list");
150
- }
151
- const first = parseStrictPositiveInt(params.first);
152
- if (first === null) {
153
- throw new Error("Missing or invalid first for issue.comments.list");
154
- }
155
- const after = params.after;
156
- if (!(after === void 0 || after === null || typeof after === "string")) {
157
- throw new Error("Invalid after cursor for issue.comments.list");
158
- }
159
- const args = [
160
- ...commandTokens(card, "api graphql"),
161
- "-f",
162
- `query=${ISSUE_COMMENTS_GRAPHQL_QUERY}`,
163
- "-f",
164
- `owner=${owner}`,
165
- "-f",
166
- `name=${name}`,
167
- "-F",
168
- `issueNumber=${issueNumber}`,
169
- "-F",
170
- `first=${first}`
171
- ];
172
- if (typeof after === "string" && after.length > 0) {
173
- args.push("-f", `after=${after}`);
174
- }
175
- return args;
176
- }
177
- if (capabilityId === "pr.view") {
178
- const prNumber = parseStrictPositiveInt(params.prNumber);
179
- if (prNumber === null) {
180
- throw new Error("Missing or invalid prNumber for pr.view");
181
- }
182
- const args = [...commandTokens(card, "pr view"), String(prNumber)];
183
- if (repo) {
184
- args.push("--repo", repo);
185
- }
186
- args.push("--json", jsonFieldsFromCard(card, "id,number,title,state,url"));
187
- return args;
188
- }
189
- if (capabilityId === "pr.list") {
190
- const first = parseListFirst(params.first);
191
- if (first === null) {
192
- throw new Error("Missing or invalid first for pr.list");
193
- }
194
- const args = commandTokens(card, "pr list");
195
- if (repo) {
196
- args.push("--repo", repo);
197
- }
198
- args.push("--limit", String(first), "--json", jsonFieldsFromCard(card, "id,number,title,state,url"));
199
- return args;
200
- }
201
- if (capabilityId === "pr.status.checks" || capabilityId === "pr.checks.get_failed") {
202
- const prNumber = parseStrictPositiveInt(params.prNumber);
203
- if (prNumber === null) {
204
- throw new Error(`Missing or invalid prNumber for ${capabilityId}`);
205
- }
206
- const args = [...commandTokens(card, "pr checks"), String(prNumber)];
207
- if (repo) {
208
- args.push("--repo", repo);
209
- }
210
- args.push("--json", jsonFieldsFromCard(card, "name,state,bucket,workflow,link"));
211
- return args;
212
- }
213
- if (capabilityId === "pr.mergeability.view") {
214
- const prNumber = parseStrictPositiveInt(params.prNumber);
215
- if (prNumber === null) {
216
- throw new Error("Missing or invalid prNumber for pr.mergeability.view");
217
- }
218
- const args = [...commandTokens(card, "pr view"), String(prNumber)];
219
- if (repo) {
220
- args.push("--repo", repo);
221
- }
222
- args.push("--json", jsonFieldsFromCard(card, "mergeable,mergeStateStatus,reviewDecision,isDraft,state"));
223
- return args;
224
- }
225
- if (capabilityId === "pr.ready_for_review.set") {
226
- const prNumber = parseStrictPositiveInt(params.prNumber);
227
- if (prNumber === null) {
228
- throw new Error("Missing or invalid prNumber for pr.ready_for_review.set");
229
- }
230
- if (typeof params.ready !== "boolean") {
231
- throw new Error("Missing or invalid ready for pr.ready_for_review.set");
232
- }
233
- const args = [...commandTokens(card, "pr ready"), String(prNumber)];
234
- if (repo) {
235
- args.push("--repo", repo);
236
- }
237
- if (!params.ready) {
238
- args.push("--undo");
239
- }
240
- return args;
241
- }
242
- if (capabilityId === "pr.review.submit_approve" || capabilityId === "pr.review.submit_request_changes" || capabilityId === "pr.review.submit_comment") {
243
- const prNumber = parseStrictPositiveInt(params.prNumber);
244
- if (prNumber === null) {
245
- throw new Error(`Missing or invalid prNumber for ${capabilityId}`);
246
- }
247
- const args = [...commandTokens(card, "pr review"), String(prNumber)];
248
- if (repo) {
249
- args.push("--repo", repo);
250
- }
251
- if (capabilityId === "pr.review.submit_approve") {
252
- args.push("--approve");
253
- const body2 = parseNonEmptyString(params.body);
254
- if (body2) {
255
- args.push("--body", body2);
256
- }
257
- return args;
258
- }
259
- const body = parseNonEmptyString(params.body);
260
- if (body === null) {
261
- throw new Error(`Missing or invalid body for ${capabilityId}`);
262
- }
263
- if (capabilityId === "pr.review.submit_request_changes") {
264
- args.push("--request-changes", "--body", body);
265
- return args;
266
- }
267
- args.push("--comment", "--body", body);
268
- return args;
269
- }
270
- if (capabilityId === "pr.merge.execute") {
271
- const prNumber = parseStrictPositiveInt(params.prNumber);
272
- if (prNumber === null) {
273
- throw new Error("Missing or invalid prNumber for pr.merge.execute");
274
- }
275
- const method = params.method === void 0 ? "merge" : params.method;
276
- if (method !== "merge" && method !== "squash" && method !== "rebase") {
277
- throw new Error("Missing or invalid method for pr.merge.execute");
278
- }
279
- if (params.deleteBranch !== void 0 && typeof params.deleteBranch !== "boolean") {
280
- throw new Error("Missing or invalid deleteBranch for pr.merge.execute");
281
- }
282
- const args = [...commandTokens(card, "pr merge"), String(prNumber)];
283
- if (repo) {
284
- args.push("--repo", repo);
285
- }
286
- args.push(`--${method}`);
287
- if (params.deleteBranch === true) {
288
- args.push("--delete-branch");
289
- }
290
- return args;
291
- }
292
- if (capabilityId === "pr.checks.rerun_failed" || capabilityId === "pr.checks.rerun_all") {
293
- const prNumber = parseStrictPositiveInt(params.prNumber);
294
- if (prNumber === null) {
295
- throw new Error(`Missing or invalid prNumber for ${capabilityId}`);
296
- }
297
- const runId = parseStrictPositiveInt(params.runId);
298
- if (runId === null) {
299
- throw new Error(`Missing or invalid runId for ${capabilityId}`);
300
- }
301
- const args = [...commandTokens(card, "run rerun"), String(runId)];
302
- if (repo) {
303
- args.push("--repo", repo);
304
- }
305
- if (capabilityId === "pr.checks.rerun_failed") {
306
- args.push("--failed");
307
- }
308
- return args;
309
- }
310
- if (capabilityId === "pr.reviewers.request") {
311
- const prNumber = parseStrictPositiveInt(params.prNumber);
312
- if (prNumber === null) {
313
- throw new Error("Missing or invalid prNumber for pr.reviewers.request");
314
- }
315
- const reviewers = Array.isArray(params.reviewers) ? params.reviewers.filter((value) => typeof value === "string" && value.trim().length > 0) : [];
316
- if (reviewers.length === 0) {
317
- throw new Error("Missing or invalid reviewers for pr.reviewers.request");
318
- }
319
- const args = [...commandTokens(card, "pr edit"), String(prNumber)];
320
- if (repo) {
321
- args.push("--repo", repo);
322
- }
323
- args.push("--add-reviewer", reviewers.join(","));
324
- return args;
325
- }
326
- if (capabilityId === "pr.assignees.update") {
327
- const prNumber = parseStrictPositiveInt(params.prNumber);
328
- if (prNumber === null) {
329
- throw new Error("Missing or invalid prNumber for pr.assignees.update");
330
- }
331
- const addAssignees = Array.isArray(params.add) ? params.add.filter((value) => typeof value === "string" && value.trim().length > 0) : [];
332
- const removeAssignees = Array.isArray(params.remove) ? params.remove.filter((value) => typeof value === "string" && value.trim().length > 0) : [];
333
- if (addAssignees.length === 0 && removeAssignees.length === 0) {
334
- throw new Error("Missing or invalid add/remove assignees for pr.assignees.update");
335
- }
336
- const args = [...commandTokens(card, "pr edit"), String(prNumber)];
337
- if (repo) {
338
- args.push("--repo", repo);
339
- }
340
- if (addAssignees.length > 0) {
341
- args.push("--add-assignee", addAssignees.join(","));
342
- }
343
- if (removeAssignees.length > 0) {
344
- args.push("--remove-assignee", removeAssignees.join(","));
345
- }
346
- return args;
347
- }
348
- if (capabilityId === "pr.branch.update") {
349
- const prNumber = parseStrictPositiveInt(params.prNumber);
350
- if (prNumber === null) {
351
- throw new Error("Missing or invalid prNumber for pr.branch.update");
352
- }
353
- const args = [...commandTokens(card, "pr update-branch"), String(prNumber)];
354
- if (repo) {
355
- args.push("--repo", repo);
356
- }
357
- return args;
358
- }
359
- if (capabilityId === "check_run.annotations.list") {
360
- const checkRunId = parseStrictPositiveInt(params.checkRunId);
361
- if (checkRunId === null) {
362
- throw new Error("Missing or invalid checkRunId for check_run.annotations.list");
363
- }
364
- if (!owner || !name) {
365
- throw new Error("Missing owner/name for check_run.annotations.list");
366
- }
367
- const args = [...commandTokens(card, "api"), `repos/${owner}/${name}/check-runs/${checkRunId}/annotations`];
368
- return args;
369
- }
370
- if (capabilityId === "workflow_runs.list") {
371
- const first = parseListFirst(params.first);
372
- if (first === null) {
373
- throw new Error("Missing or invalid first for workflow_runs.list");
374
- }
375
- const args = commandTokens(card, "run list");
376
- if (repo) {
377
- args.push("--repo", repo);
378
- }
379
- if (typeof params.branch === "string" && params.branch.length > 0) {
380
- args.push("--branch", params.branch);
381
- }
382
- if (typeof params.event === "string" && params.event.length > 0) {
383
- args.push("--event", params.event);
384
- }
385
- if (typeof params.status === "string" && params.status.length > 0) {
386
- args.push("--status", params.status);
387
- }
388
- args.push("--limit", String(first), "--json", jsonFieldsFromCard(card, "databaseId,workflowName,status,conclusion,headBranch,url"));
389
- return args;
390
- }
391
- if (capabilityId === "workflow_run.jobs.list") {
392
- const runId = parseStrictPositiveInt(params.runId);
393
- if (runId === null) {
394
- throw new Error("Missing or invalid runId for workflow_run.jobs.list");
395
- }
396
- const args = [...commandTokens(card, "run view"), String(runId)];
397
- if (repo) {
398
- args.push("--repo", repo);
399
- }
400
- args.push("--json", "jobs");
401
- return args;
402
- }
403
- if (capabilityId === "workflow_job.logs.get" || capabilityId === "workflow_job.logs.analyze") {
404
- const jobId = parseStrictPositiveInt(params.jobId);
405
- if (jobId === null) {
406
- throw new Error(`Missing or invalid jobId for ${capabilityId}`);
407
- }
408
- const args = [...commandTokens(card, "run view"), "--job", String(jobId), "--log"];
409
- if (repo) {
410
- args.push("--repo", repo);
411
- }
412
- return args;
413
- }
414
- if (capabilityId === "workflow.list") {
415
- const first = parseListFirst(params.first);
416
- if (first === null) {
417
- throw new Error("Missing or invalid first for workflow.list");
418
- }
419
- const args = commandTokens(card, "workflow list");
420
- if (repo) {
421
- args.push("--repo", repo);
422
- }
423
- args.push("--limit", String(first), "--json", jsonFieldsFromCard(card, "id,name,path,state"));
424
- return args;
425
- }
426
- if (capabilityId === "workflow.get") {
427
- const workflowId = parseNonEmptyString(params.workflowId) ?? (typeof params.workflowId === "number" ? String(params.workflowId) : null);
428
- if (workflowId === null) {
429
- throw new Error("Missing or invalid workflowId for workflow.get");
430
- }
431
- const args = [...commandTokens(card, "workflow view"), workflowId];
432
- if (repo) {
433
- args.push("--repo", repo);
434
- }
435
- args.push("--json", jsonFieldsFromCard(card, "id,name,path,state,url"));
436
- return args;
437
- }
438
- if (capabilityId === "workflow_run.get") {
439
- const runId = parseStrictPositiveInt(params.runId);
440
- if (runId === null) {
441
- throw new Error("Missing or invalid runId for workflow_run.get");
442
- }
443
- const args = [...commandTokens(card, "run view"), String(runId)];
444
- if (repo) {
445
- args.push("--repo", repo);
446
- }
447
- args.push("--json", jsonFieldsFromCard(card, "databaseId,workflowName,status,conclusion,headBranch,headSha,url,event,createdAt,updatedAt,startedAt"));
448
- return args;
449
- }
450
- if (capabilityId === "workflow_run.rerun_all" || capabilityId === "workflow_run.cancel") {
451
- const runId = parseStrictPositiveInt(params.runId);
452
- if (runId === null) {
453
- throw new Error(`Missing or invalid runId for ${capabilityId}`);
454
- }
455
- const args = [
456
- ...commandTokens(card, capabilityId === "workflow_run.rerun_all" ? "run rerun" : "run cancel"),
457
- String(runId)
458
- ];
459
- if (repo) {
460
- args.push("--repo", repo);
461
- }
462
- return args;
463
- }
464
- if (capabilityId === "workflow_run.artifacts.list") {
465
- const runId = parseStrictPositiveInt(params.runId);
466
- if (runId === null) {
467
- throw new Error("Missing or invalid runId for workflow_run.artifacts.list");
468
- }
469
- const args = [...commandTokens(card, "run view"), String(runId)];
470
- if (repo) {
471
- args.push("--repo", repo);
472
- }
473
- args.push("--json", jsonFieldsFromCard(card, "artifacts"));
474
- return args;
475
- }
476
- if (capabilityId === "project_v2.org.get" || capabilityId === "project_v2.user.get") {
477
- const ownerParam = capabilityId === "project_v2.org.get" ? params.org : params.user;
478
- const owner2 = parseNonEmptyString(ownerParam);
479
- const projectNumber = parseStrictPositiveInt(params.projectNumber);
480
- if (owner2 === null || projectNumber === null) {
481
- throw new Error(`Missing or invalid owner/projectNumber for ${capabilityId}`);
482
- }
483
- const args = [...commandTokens(card, "project view"), String(projectNumber), "--owner", owner2, "--format", "json"];
484
- return args;
485
- }
486
- if (capabilityId === "project_v2.fields.list") {
487
- const projectNumber = parseStrictPositiveInt(params.projectNumber);
488
- const projectOwner = parseNonEmptyString(params.owner);
489
- if (projectNumber === null || projectOwner === null) {
490
- throw new Error("Missing or invalid owner/projectNumber for project_v2.fields.list");
491
- }
492
- const args = [...commandTokens(card, "project field-list"), String(projectNumber), "--owner", projectOwner, "--format", "json"];
493
- return args;
494
- }
495
- if (capabilityId === "project_v2.items.list") {
496
- const projectNumber = parseStrictPositiveInt(params.projectNumber);
497
- const projectOwner = parseNonEmptyString(params.owner);
498
- const first = parseListFirst(params.first);
499
- if (projectNumber === null || projectOwner === null || first === null) {
500
- throw new Error("Missing or invalid owner/projectNumber/first for project_v2.items.list");
501
- }
502
- const args = [
503
- ...commandTokens(card, "project item-list"),
504
- String(projectNumber),
505
- "--owner",
506
- projectOwner,
507
- "--format",
508
- "json",
509
- "--limit",
510
- String(first)
511
- ];
512
- return args;
513
- }
514
- if (capabilityId === "release.list") {
515
- requireRepo(owner, name, capabilityId);
516
- const first = parseListFirst(params.first);
517
- if (first === null) {
518
- throw new Error("Missing or invalid first for release.list");
519
- }
520
- const args = [...commandTokens(card, "api"), `repos/${owner}/${name}/releases`, "-F", `per_page=${first}`];
521
- return args;
522
- }
523
- if (capabilityId === "release.get") {
524
- requireRepo(owner, name, capabilityId);
525
- const tagName = parseNonEmptyString(params.tagName);
526
- if (tagName === null) {
527
- throw new Error("Missing or invalid tagName for release.get");
528
- }
529
- const args = [...commandTokens(card, "api"), `repos/${owner}/${name}/releases/tags/${encodeURIComponent(tagName)}`];
530
- return args;
531
- }
532
- if (capabilityId === "release.create_draft") {
533
- requireRepo(owner, name, capabilityId);
534
- const tagName = parseNonEmptyString(params.tagName);
535
- if (tagName === null) {
536
- throw new Error("Missing or invalid tagName for release.create_draft");
537
- }
538
- const args = [
539
- ...commandTokens(card, "api"),
540
- `repos/${owner}/${name}/releases`,
541
- "--method",
542
- "POST",
543
- "-f",
544
- `tag_name=${tagName}`,
545
- "-F",
546
- "draft=true"
547
- ];
548
- const title = parseNonEmptyString(params.title);
549
- if (title) {
550
- args.push("-f", `name=${title}`);
551
- }
552
- const notes = parseNonEmptyString(params.notes);
553
- if (notes) {
554
- args.push("-f", `body=${notes}`);
555
- }
556
- const target = parseNonEmptyString(params.targetCommitish);
557
- if (target) {
558
- args.push("-f", `target_commitish=${target}`);
559
- }
560
- if (typeof params.prerelease === "boolean") {
561
- args.push("-F", `prerelease=${params.prerelease ? "true" : "false"}`);
562
- }
563
- return args;
564
- }
565
- if (capabilityId === "release.update") {
566
- requireRepo(owner, name, capabilityId);
567
- const releaseId = parseStrictPositiveInt(params.releaseId);
568
- if (releaseId === null) {
569
- throw new Error("Missing or invalid releaseId for release.update");
570
- }
571
- if (params.draft !== void 0 && params.draft !== true) {
572
- throw new Error("release.update only supports draft=true; use release.publish_draft to publish");
573
- }
574
- const args = [
575
- ...commandTokens(card, "api"),
576
- `repos/${owner}/${name}/releases/${releaseId}`,
577
- "--method",
578
- "PATCH",
579
- "-F",
580
- "draft=true"
581
- ];
582
- const tagName = parseNonEmptyString(params.tagName);
583
- if (tagName) {
584
- args.push("-f", `tag_name=${tagName}`);
585
- }
586
- const title = parseNonEmptyString(params.title);
587
- if (title) {
588
- args.push("-f", `name=${title}`);
589
- }
590
- const notes = parseNonEmptyString(params.notes);
591
- if (notes) {
592
- args.push("-f", `body=${notes}`);
593
- }
594
- const target = parseNonEmptyString(params.targetCommitish);
595
- if (target) {
596
- args.push("-f", `target_commitish=${target}`);
597
- }
598
- if (typeof params.prerelease === "boolean") {
599
- args.push("-F", `prerelease=${params.prerelease ? "true" : "false"}`);
600
- }
601
- return args;
602
- }
603
- if (capabilityId === "release.publish_draft") {
604
- requireRepo(owner, name, capabilityId);
605
- const releaseId = parseStrictPositiveInt(params.releaseId);
606
- if (releaseId === null) {
607
- throw new Error("Missing or invalid releaseId for release.publish_draft");
608
- }
609
- const args = [
610
- ...commandTokens(card, "api"),
611
- `repos/${owner}/${name}/releases/${releaseId}`,
612
- "--method",
613
- "PATCH",
614
- "-F",
615
- "draft=false"
616
- ];
617
- const title = parseNonEmptyString(params.title);
618
- if (title) {
619
- args.push("-f", `name=${title}`);
620
- }
621
- const notes = parseNonEmptyString(params.notes);
622
- if (notes) {
623
- args.push("-f", `body=${notes}`);
624
- }
625
- if (typeof params.prerelease === "boolean") {
626
- args.push("-F", `prerelease=${params.prerelease ? "true" : "false"}`);
627
- }
628
- return args;
629
- }
630
- if (capabilityId === "workflow_dispatch.run") {
631
- requireRepo(owner, name, capabilityId);
632
- const workflowId = parseNonEmptyString(params.workflowId);
633
- if (workflowId === null) {
634
- throw new Error("Missing or invalid workflowId for workflow_dispatch.run");
635
- }
636
- const ref = parseNonEmptyString(params.ref);
637
- if (ref === null) {
638
- throw new Error("Missing or invalid ref for workflow_dispatch.run");
639
- }
640
- const args = [
641
- ...commandTokens(card, "api"),
642
- `repos/${owner}/${name}/actions/workflows/${encodeURIComponent(workflowId)}/dispatches`,
643
- "--method",
644
- "POST",
645
- "-f",
646
- `ref=${ref}`
647
- ];
648
- if (params.inputs !== void 0) {
649
- if (typeof params.inputs !== "object" || params.inputs === null || Array.isArray(params.inputs)) {
650
- throw new Error("Missing or invalid inputs for workflow_dispatch.run");
651
- }
652
- const inputEntries = Object.entries(params.inputs);
653
- for (const [key, value] of inputEntries) {
654
- if (!key.trim()) {
655
- throw new Error("Missing or invalid inputs for workflow_dispatch.run");
656
- }
657
- if (!(typeof value === "string" || typeof value === "number" || typeof value === "boolean")) {
658
- throw new Error("Missing or invalid inputs for workflow_dispatch.run");
659
- }
660
- args.push("-f", `inputs[${key}]=${String(value)}`);
661
- }
662
- }
663
- return args;
664
- }
665
- if (capabilityId === "workflow_run.rerun_failed") {
666
- requireRepo(owner, name, capabilityId);
667
- const runId = parseStrictPositiveInt(params.runId);
668
- if (runId === null) {
669
- throw new Error("Missing or invalid runId for workflow_run.rerun_failed");
670
- }
671
- const args = [
672
- ...commandTokens(card, "api"),
673
- `repos/${owner}/${name}/actions/runs/${runId}/rerun-failed-jobs`,
674
- "--method",
675
- "POST"
676
- ];
677
- return args;
678
- }
679
- if (capabilityId === "project_v2.item.add_issue") {
680
- const projectNumber = parseStrictPositiveInt(params.projectNumber);
681
- const projectOwner = parseNonEmptyString(params.owner);
682
- const issueUrl = parseNonEmptyString(params.issueUrl);
683
- if (projectNumber === null || projectOwner === null || issueUrl === null) {
684
- throw new Error("Missing or invalid owner/projectNumber/issueUrl for project_v2.item.add_issue");
685
- }
686
- const args = [
687
- ...commandTokens(card, "project item-add"),
688
- String(projectNumber),
689
- "--owner",
690
- projectOwner,
691
- "--url",
692
- issueUrl,
693
- "--format",
694
- "json"
695
- ];
696
- return args;
697
- }
698
- if (capabilityId === "project_v2.item.field.update") {
699
- const projectId = parseNonEmptyString(params.projectId);
700
- const itemId = parseNonEmptyString(params.itemId);
701
- const fieldId = parseNonEmptyString(params.fieldId);
702
- if (projectId === null || itemId === null || fieldId === null) {
703
- throw new Error("Missing or invalid projectId/itemId/fieldId for project_v2.item.field.update");
704
- }
705
- const args = [
706
- ...commandTokens(card, "project item-edit"),
707
- "--project-id",
708
- projectId,
709
- "--id",
710
- itemId,
711
- "--field-id",
712
- fieldId
713
- ];
714
- const valueText = parseNonEmptyString(params.valueText);
715
- const valueDate = parseNonEmptyString(params.valueDate);
716
- const valueSingleSelectOptionId = parseNonEmptyString(params.valueSingleSelectOptionId);
717
- const valueIterationId = parseNonEmptyString(params.valueIterationId);
718
- const clear = params.clear === true;
719
- if (valueText !== null) {
720
- args.push("--text", valueText);
721
- } else if (typeof params.valueNumber === "number" && Number.isFinite(params.valueNumber)) {
722
- args.push("--number", String(params.valueNumber));
723
- } else if (valueDate !== null) {
724
- args.push("--date", valueDate);
725
- } else if (valueSingleSelectOptionId !== null) {
726
- args.push("--single-select-option-id", valueSingleSelectOptionId);
727
- } else if (valueIterationId !== null) {
728
- args.push("--iteration-id", valueIterationId);
729
- } else if (clear) {
730
- args.push("--clear");
731
- } else {
732
- throw new Error("Missing field value update for project_v2.item.field.update");
733
- }
734
- return args;
735
- }
736
- throw new Error(`Unsupported CLI capability: ${capabilityId}`);
737
- }
738
- function parseCliData(stdout) {
739
- const trimmed = stdout.trim();
740
- if (!trimmed) {
741
- return {};
742
- }
743
- return JSON.parse(trimmed);
744
- }
745
- function normalizeListItem(item) {
746
- if (typeof item !== "object" || item === null || Array.isArray(item)) {
747
- return {};
748
- }
749
- const input = item;
750
- return {
751
- id: input.id,
752
- number: input.number,
753
- title: input.title,
754
- state: input.state,
755
- url: input.url
756
- };
757
- }
758
- function normalizeWorkflowItem(item) {
759
- if (typeof item !== "object" || item === null || Array.isArray(item)) {
760
- return {
761
- id: 0,
762
- name: null,
763
- path: null,
764
- state: null
765
- };
766
- }
767
- const input = item;
768
- return {
769
- id: typeof input.id === "number" ? input.id : 0,
770
- name: typeof input.name === "string" ? input.name : null,
771
- path: typeof input.path === "string" ? input.path : null,
772
- state: typeof input.state === "string" ? input.state : null
773
- };
774
- }
775
- function normalizeProjectV2Summary(data) {
776
- const input = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
777
- return {
778
- id: typeof input.id === "string" ? input.id : null,
779
- title: typeof input.title === "string" ? input.title : null,
780
- shortDescription: typeof input.shortDescription === "string" ? input.shortDescription : null,
781
- public: typeof input.public === "boolean" ? input.public : null,
782
- closed: typeof input.closed === "boolean" ? input.closed : null,
783
- url: typeof input.url === "string" ? input.url : null
784
- };
785
- }
786
- function normalizeCheckItem(item) {
787
- if (typeof item !== "object" || item === null || Array.isArray(item)) {
788
- return {
789
- name: null,
790
- state: null,
791
- bucket: null,
792
- workflow: null,
793
- link: null
794
- };
795
- }
796
- const input = item;
797
- return {
798
- name: typeof input.name === "string" ? input.name : null,
799
- state: typeof input.state === "string" ? input.state : null,
800
- bucket: typeof input.bucket === "string" ? input.bucket : null,
801
- workflow: typeof input.workflow === "string" ? input.workflow : null,
802
- link: typeof input.link === "string" ? input.link : null
803
- };
804
- }
805
- function normalizeCheckBucket(value) {
806
- if (typeof value !== "string") {
807
- return null;
808
- }
809
- return value.trim().toLowerCase();
810
- }
811
- function isCheckFailureBucket(bucket) {
812
- const normalized = normalizeCheckBucket(bucket);
813
- if (!normalized) {
814
- return false;
815
- }
816
- return normalized === "fail" || normalized === "cancel";
817
- }
818
- function isCheckPendingBucket(bucket) {
819
- const normalized = normalizeCheckBucket(bucket);
820
- if (!normalized) {
821
- return false;
822
- }
823
- return normalized === "pending";
824
- }
825
- function isCheckPassBucket(bucket) {
826
- const normalized = normalizeCheckBucket(bucket);
827
- if (!normalized) {
828
- return false;
829
- }
830
- return normalized === "pass";
831
- }
832
- function normalizeCliData(capabilityId, data, params) {
833
- const normalizeRelease = (input) => {
834
- if (typeof input !== "object" || input === null || Array.isArray(input)) {
835
- return {
836
- id: 0,
837
- tagName: null,
838
- name: null,
839
- isDraft: false,
840
- isPrerelease: false,
841
- url: null,
842
- targetCommitish: null,
843
- createdAt: null,
844
- publishedAt: null
845
- };
846
- }
847
- const record = input;
848
- return {
849
- id: typeof record.id === "number" ? record.id : 0,
850
- tagName: typeof record.tag_name === "string" ? record.tag_name : null,
851
- name: typeof record.name === "string" ? record.name : null,
852
- isDraft: typeof record.draft === "boolean" ? record.draft : false,
853
- isPrerelease: typeof record.prerelease === "boolean" ? record.prerelease : false,
854
- url: typeof record.html_url === "string" ? record.html_url : null,
855
- targetCommitish: typeof record.target_commitish === "string" ? record.target_commitish : null,
856
- createdAt: typeof record.created_at === "string" ? record.created_at : null,
857
- publishedAt: typeof record.published_at === "string" ? record.published_at : null
858
- };
859
- };
860
- if (capabilityId === "repo.view") {
861
- const input = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
862
- const defaultBranchRef = typeof input.defaultBranchRef === "object" && input.defaultBranchRef !== null ? input.defaultBranchRef : null;
863
- return {
864
- id: input.id,
865
- name: input.name,
866
- nameWithOwner: input.nameWithOwner,
867
- isPrivate: input.isPrivate,
868
- stargazerCount: input.stargazerCount,
869
- forkCount: input.forkCount,
870
- url: input.url,
871
- defaultBranch: typeof defaultBranchRef?.name === "string" ? defaultBranchRef.name : null
872
- };
873
- }
874
- if (capabilityId === "repo.labels.list") {
875
- const labels = Array.isArray(data) ? data : [];
876
- return {
877
- items: labels.map((label) => {
878
- if (typeof label !== "object" || label === null || Array.isArray(label)) {
879
- return {
880
- id: null,
881
- name: null,
882
- description: null,
883
- color: null,
884
- isDefault: null
885
- };
886
- }
887
- const record = label;
888
- return {
889
- id: typeof record.id === "string" ? record.id : null,
890
- name: typeof record.name === "string" ? record.name : null,
891
- description: typeof record.description === "string" ? record.description : null,
892
- color: typeof record.color === "string" ? record.color : null,
893
- isDefault: typeof record.isDefault === "boolean" ? record.isDefault : null
894
- };
895
- }),
896
- pageInfo: {
897
- hasNextPage: false,
898
- endCursor: null
899
- }
900
- };
901
- }
902
- if (capabilityId === "repo.issue_types.list") {
903
- const root = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
904
- const payload = typeof root.data === "object" && root.data !== null && !Array.isArray(root.data) ? root.data : {};
905
- const repository = typeof payload.repository === "object" && payload.repository !== null && !Array.isArray(payload.repository) ? payload.repository : {};
906
- const connection = typeof repository.issueTypes === "object" && repository.issueTypes !== null && !Array.isArray(repository.issueTypes) ? repository.issueTypes : {};
907
- const nodes = Array.isArray(connection.nodes) ? connection.nodes : [];
908
- const pageInfo = typeof connection.pageInfo === "object" && connection.pageInfo !== null && !Array.isArray(connection.pageInfo) ? connection.pageInfo : {};
909
- return {
910
- items: nodes.map((node) => {
911
- if (typeof node !== "object" || node === null || Array.isArray(node)) {
912
- return {
913
- id: null,
914
- name: null,
915
- color: null,
916
- isEnabled: null
917
- };
918
- }
919
- const record = node;
920
- return {
921
- id: typeof record.id === "string" ? record.id : null,
922
- name: typeof record.name === "string" ? record.name : null,
923
- color: typeof record.color === "string" ? record.color : null,
924
- isEnabled: typeof record.isEnabled === "boolean" ? record.isEnabled : null
925
- };
926
- }),
927
- pageInfo: {
928
- hasNextPage: typeof pageInfo.hasNextPage === "boolean" ? pageInfo.hasNextPage : false,
929
- endCursor: typeof pageInfo.endCursor === "string" ? pageInfo.endCursor : null
930
- }
931
- };
932
- }
933
- if (capabilityId === "issue.list" || capabilityId === "pr.list") {
934
- const items = Array.isArray(data) ? data.map((entry) => normalizeListItem(entry)) : [];
935
- return {
936
- items,
937
- pageInfo: {
938
- hasNextPage: false,
939
- endCursor: null
940
- }
941
- };
942
- }
943
- if (capabilityId === "issue.comments.list") {
944
- if (parseStrictPositiveInt(params.first) === null) {
945
- throw new Error("Missing or invalid first for issue.comments.list");
946
- }
947
- const input = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
948
- const commentsConnection = typeof input.data === "object" && input.data !== null && !Array.isArray(input.data) ? input.data.repository : null;
949
- const repository = typeof commentsConnection === "object" && commentsConnection !== null && !Array.isArray(commentsConnection) ? commentsConnection : null;
950
- const issue = typeof repository?.issue === "object" && repository.issue !== null && !Array.isArray(repository.issue) ? repository.issue : null;
951
- const comments = typeof issue?.comments === "object" && issue.comments !== null && !Array.isArray(issue.comments) ? issue.comments : null;
952
- const nodes = Array.isArray(comments?.nodes) ? comments.nodes : null;
953
- const pageInfo = typeof comments?.pageInfo === "object" && comments.pageInfo !== null && !Array.isArray(comments.pageInfo) ? comments.pageInfo : null;
954
- if (nodes === null || pageInfo === null || typeof pageInfo.hasNextPage !== "boolean") {
955
- throw new Error("Invalid CLI payload: comments connection is malformed");
956
- }
957
- const normalizedItems = nodes.flatMap((comment) => {
958
- if (typeof comment !== "object" || comment === null || Array.isArray(comment)) {
959
- throw new Error("Invalid CLI payload: comment item must be an object");
960
- }
961
- const commentRecord = comment;
962
- const author = typeof commentRecord.author === "object" && commentRecord.author !== null ? commentRecord.author : null;
963
- if (typeof commentRecord.id !== "string" || typeof commentRecord.body !== "string" || typeof commentRecord.url !== "string" || typeof commentRecord.createdAt !== "string") {
964
- throw new Error("Invalid CLI payload: comment item has invalid field types");
965
- }
966
- return [{
967
- id: commentRecord.id,
968
- body: commentRecord.body,
969
- authorLogin: typeof author?.login === "string" ? author.login : null,
970
- url: commentRecord.url,
971
- createdAt: commentRecord.createdAt
972
- }];
973
- });
974
- return {
975
- items: normalizedItems,
976
- pageInfo: {
977
- hasNextPage: pageInfo.hasNextPage,
978
- endCursor: typeof pageInfo.endCursor === "string" ? pageInfo.endCursor : null
979
- }
980
- };
981
- }
982
- if (capabilityId === "pr.status.checks" || capabilityId === "pr.checks.get_failed") {
983
- const checks = Array.isArray(data) ? data.map((entry) => normalizeCheckItem(entry)) : [];
984
- const failed = checks.filter((entry) => isCheckFailureBucket(entry.bucket));
985
- const pending = checks.filter((entry) => isCheckPendingBucket(entry.bucket));
986
- const passed = checks.filter((entry) => isCheckPassBucket(entry.bucket));
987
- return {
988
- items: capabilityId === "pr.checks.get_failed" ? failed : checks,
989
- summary: {
990
- total: checks.length,
991
- failed: failed.length,
992
- pending: pending.length,
993
- passed: passed.length
994
- }
995
- };
996
- }
997
- if (capabilityId === "pr.mergeability.view") {
998
- const input = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
999
- return {
1000
- mergeable: typeof input.mergeable === "string" ? input.mergeable : null,
1001
- mergeStateStatus: typeof input.mergeStateStatus === "string" ? input.mergeStateStatus : null,
1002
- reviewDecision: typeof input.reviewDecision === "string" ? input.reviewDecision : null,
1003
- isDraft: Boolean(input.isDraft),
1004
- state: typeof input.state === "string" ? input.state : "UNKNOWN"
1005
- };
1006
- }
1007
- if (capabilityId === "pr.ready_for_review.set") {
1008
- const prNumber = Number(params.prNumber);
1009
- const ready = Boolean(params.ready);
1010
- return {
1011
- prNumber,
1012
- isDraft: !ready
1013
- };
1014
- }
1015
- if (capabilityId === "pr.review.submit_approve" || capabilityId === "pr.review.submit_request_changes" || capabilityId === "pr.review.submit_comment") {
1016
- const prNumber = Number(params.prNumber);
1017
- const event = capabilityId === "pr.review.submit_approve" ? "APPROVE" : capabilityId === "pr.review.submit_request_changes" ? "REQUEST_CHANGES" : "COMMENT";
1018
- return {
1019
- prNumber,
1020
- event,
1021
- submitted: true,
1022
- body: typeof params.body === "string" ? params.body : null
1023
- };
1024
- }
1025
- if (capabilityId === "pr.merge.execute") {
1026
- const method = params.method === "squash" || params.method === "rebase" ? params.method : "merge";
1027
- return {
1028
- prNumber: Number(params.prNumber),
1029
- method,
1030
- queued: true,
1031
- deleteBranch: params.deleteBranch === true
1032
- };
1033
- }
1034
- if (capabilityId === "pr.checks.rerun_failed" || capabilityId === "pr.checks.rerun_all") {
1035
- return {
1036
- prNumber: Number(params.prNumber),
1037
- runId: Number(params.runId),
1038
- mode: capabilityId === "pr.checks.rerun_failed" ? "failed" : "all",
1039
- queued: true
1040
- };
1041
- }
1042
- if (capabilityId === "pr.reviewers.request") {
1043
- const reviewers = Array.isArray(params.reviewers) ? params.reviewers.filter((value) => typeof value === "string" && value.trim().length > 0) : [];
1044
- return {
1045
- prNumber: Number(params.prNumber),
1046
- reviewers,
1047
- updated: true
1048
- };
1049
- }
1050
- if (capabilityId === "pr.assignees.update") {
1051
- const add = Array.isArray(params.add) ? params.add.filter((value) => typeof value === "string" && value.trim().length > 0) : [];
1052
- const remove = Array.isArray(params.remove) ? params.remove.filter((value) => typeof value === "string" && value.trim().length > 0) : [];
1053
- return {
1054
- prNumber: Number(params.prNumber),
1055
- add,
1056
- remove,
1057
- updated: true
1058
- };
1059
- }
1060
- if (capabilityId === "pr.branch.update") {
1061
- return {
1062
- prNumber: Number(params.prNumber),
1063
- updated: true
1064
- };
1065
- }
1066
- if (capabilityId === "check_run.annotations.list") {
1067
- const annotations = Array.isArray(data) ? data : [];
1068
- return {
1069
- items: annotations.map((annotation) => {
1070
- if (typeof annotation !== "object" || annotation === null || Array.isArray(annotation)) {
1071
- return {
1072
- path: null,
1073
- startLine: null,
1074
- endLine: null,
1075
- level: null,
1076
- message: null,
1077
- title: null,
1078
- details: null
1079
- };
1080
- }
1081
- const record = annotation;
1082
- return {
1083
- path: typeof record.path === "string" ? record.path : null,
1084
- startLine: typeof record.start_line === "number" ? record.start_line : null,
1085
- endLine: typeof record.end_line === "number" ? record.end_line : null,
1086
- level: typeof record.annotation_level === "string" ? record.annotation_level : null,
1087
- message: typeof record.message === "string" ? record.message : null,
1088
- title: typeof record.title === "string" ? record.title : null,
1089
- details: typeof record.raw_details === "string" ? record.raw_details : null
1090
- };
1091
- })
1092
- };
1093
- }
1094
- if (capabilityId === "workflow_runs.list") {
1095
- const runs = Array.isArray(data) ? data : [];
1096
- return {
1097
- items: runs.map((run) => {
1098
- if (typeof run !== "object" || run === null || Array.isArray(run)) {
1099
- return {
1100
- id: 0,
1101
- workflowName: null,
1102
- status: null,
1103
- conclusion: null,
1104
- headBranch: null,
1105
- url: null
1106
- };
1107
- }
1108
- const record = run;
1109
- return {
1110
- id: typeof record.databaseId === "number" ? record.databaseId : 0,
1111
- workflowName: typeof record.workflowName === "string" ? record.workflowName : null,
1112
- status: typeof record.status === "string" ? record.status : null,
1113
- conclusion: typeof record.conclusion === "string" ? record.conclusion : null,
1114
- headBranch: typeof record.headBranch === "string" ? record.headBranch : null,
1115
- url: typeof record.url === "string" ? record.url : null
1116
- };
1117
- }),
1118
- pageInfo: {
1119
- hasNextPage: false,
1120
- endCursor: null
1121
- }
1122
- };
1123
- }
1124
- if (capabilityId === "workflow_run.jobs.list") {
1125
- const root = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
1126
- const jobs = Array.isArray(root.jobs) ? root.jobs : [];
1127
- return {
1128
- items: jobs.map((job) => {
1129
- if (typeof job !== "object" || job === null || Array.isArray(job)) {
1130
- return {
1131
- id: 0,
1132
- name: null,
1133
- status: null,
1134
- conclusion: null,
1135
- startedAt: null,
1136
- completedAt: null,
1137
- url: null
1138
- };
1139
- }
1140
- const record = job;
1141
- return {
1142
- id: typeof record.databaseId === "number" ? record.databaseId : 0,
1143
- name: typeof record.name === "string" ? record.name : null,
1144
- status: typeof record.status === "string" ? record.status : null,
1145
- conclusion: typeof record.conclusion === "string" ? record.conclusion : null,
1146
- startedAt: typeof record.startedAt === "string" ? record.startedAt : null,
1147
- completedAt: typeof record.completedAt === "string" ? record.completedAt : null,
1148
- url: typeof record.url === "string" ? record.url : null
1149
- };
1150
- })
1151
- };
1152
- }
1153
- if (capabilityId === "workflow_job.logs.get") {
1154
- const jobId = Number(params.jobId);
1155
- const rawLog = typeof data === "string" ? data : String(data);
1156
- const truncated = rawLog.length > MAX_WORKFLOW_JOB_LOG_CHARS;
1157
- return {
1158
- jobId,
1159
- log: truncated ? rawLog.slice(0, MAX_WORKFLOW_JOB_LOG_CHARS) : rawLog,
1160
- truncated
1161
- };
1162
- }
1163
- if (capabilityId === "workflow_job.logs.analyze") {
1164
- const jobId = Number(params.jobId);
1165
- const rawLog = typeof data === "string" ? data : String(data);
1166
- const truncated = rawLog.length > MAX_WORKFLOW_JOB_LOG_CHARS;
1167
- const boundedLog = truncated ? rawLog.slice(0, MAX_WORKFLOW_JOB_LOG_CHARS) : rawLog;
1168
- const lines = boundedLog.split(/\r?\n/);
1169
- const errorLines = lines.filter((line) => /\berror\b/i.test(line));
1170
- const topErrorLines = errorLines.slice(0, 10);
1171
- const warningLines = lines.filter((line) => /\bwarn(ing)?\b/i.test(line));
1172
- return {
1173
- jobId,
1174
- truncated,
1175
- summary: {
1176
- errorCount: errorLines.length,
1177
- warningCount: warningLines.length,
1178
- topErrorLines
1179
- }
1180
- };
1181
- }
1182
- if (capabilityId === "workflow.list") {
1183
- const workflows = Array.isArray(data) ? data : [];
1184
- return {
1185
- items: workflows.map((workflow) => normalizeWorkflowItem(workflow)),
1186
- pageInfo: {
1187
- hasNextPage: false,
1188
- endCursor: null
1189
- }
1190
- };
1191
- }
1192
- if (capabilityId === "release.list") {
1193
- const items = Array.isArray(data) ? data.map((item) => normalizeRelease(item)) : [];
1194
- return {
1195
- items,
1196
- pageInfo: {
1197
- hasNextPage: false,
1198
- endCursor: null
1199
- }
1200
- };
1201
- }
1202
- if (capabilityId === "workflow.get") {
1203
- const input = normalizeWorkflowItem(data);
1204
- const root = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
1205
- return {
1206
- ...input,
1207
- url: typeof root.url === "string" ? root.url : null
1208
- };
1209
- }
1210
- if (capabilityId === "workflow_run.get") {
1211
- const input = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
1212
- return {
1213
- id: typeof input.databaseId === "number" ? input.databaseId : 0,
1214
- workflowName: typeof input.workflowName === "string" ? input.workflowName : null,
1215
- status: typeof input.status === "string" ? input.status : null,
1216
- conclusion: typeof input.conclusion === "string" ? input.conclusion : null,
1217
- headBranch: typeof input.headBranch === "string" ? input.headBranch : null,
1218
- headSha: typeof input.headSha === "string" ? input.headSha : null,
1219
- event: typeof input.event === "string" ? input.event : null,
1220
- createdAt: typeof input.createdAt === "string" ? input.createdAt : null,
1221
- updatedAt: typeof input.updatedAt === "string" ? input.updatedAt : null,
1222
- startedAt: typeof input.startedAt === "string" ? input.startedAt : null,
1223
- url: typeof input.url === "string" ? input.url : null
1224
- };
1225
- }
1226
- if (capabilityId === "workflow_run.rerun_all") {
1227
- return {
1228
- runId: Number(params.runId),
1229
- status: "requested"
1230
- };
1231
- }
1232
- if (capabilityId === "workflow_run.cancel") {
1233
- return {
1234
- runId: Number(params.runId),
1235
- status: "cancel_requested"
1236
- };
1237
- }
1238
- if (capabilityId === "workflow_run.artifacts.list") {
1239
- const root = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
1240
- const artifacts = Array.isArray(root.artifacts) ? root.artifacts : [];
1241
- return {
1242
- items: artifacts.map((artifact) => {
1243
- if (typeof artifact !== "object" || artifact === null || Array.isArray(artifact)) {
1244
- return {
1245
- id: 0,
1246
- name: null,
1247
- sizeInBytes: null,
1248
- archiveDownloadUrl: null
1249
- };
1250
- }
1251
- const record = artifact;
1252
- return {
1253
- id: typeof record.id === "number" ? record.id : 0,
1254
- name: typeof record.name === "string" ? record.name : null,
1255
- sizeInBytes: typeof record.sizeInBytes === "number" ? record.sizeInBytes : null,
1256
- archiveDownloadUrl: typeof record.archiveDownloadUrl === "string" ? record.archiveDownloadUrl : null
1257
- };
1258
- }),
1259
- pageInfo: {
1260
- hasNextPage: false,
1261
- endCursor: null
1262
- }
1263
- };
1264
- }
1265
- if (capabilityId === "project_v2.org.get" || capabilityId === "project_v2.user.get") {
1266
- return normalizeProjectV2Summary(data);
1267
- }
1268
- if (capabilityId === "project_v2.fields.list") {
1269
- const root = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
1270
- const fields = Array.isArray(root.fields) ? root.fields : [];
1271
- return {
1272
- items: fields.map((field) => {
1273
- if (typeof field !== "object" || field === null || Array.isArray(field)) {
1274
- return {
1275
- id: null,
1276
- name: null,
1277
- dataType: null
1278
- };
1279
- }
1280
- const record = field;
1281
- return {
1282
- id: typeof record.id === "string" ? record.id : null,
1283
- name: typeof record.name === "string" ? record.name : null,
1284
- dataType: typeof record.dataType === "string" ? record.dataType : null
1285
- };
1286
- }),
1287
- pageInfo: {
1288
- hasNextPage: false,
1289
- endCursor: null
1290
- }
1291
- };
1292
- }
1293
- if (capabilityId === "project_v2.items.list") {
1294
- const root = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
1295
- const items = Array.isArray(root.items) ? root.items : [];
1296
- return {
1297
- items: items.map((item) => {
1298
- if (typeof item !== "object" || item === null || Array.isArray(item)) {
1299
- return {
1300
- id: null,
1301
- contentType: null,
1302
- contentNumber: null,
1303
- contentTitle: null
1304
- };
1305
- }
1306
- const record = item;
1307
- const content = typeof record.content === "object" && record.content !== null && !Array.isArray(record.content) ? record.content : {};
1308
- return {
1309
- id: typeof record.id === "string" ? record.id : null,
1310
- contentType: typeof content.type === "string" ? content.type : null,
1311
- contentNumber: typeof content.number === "number" ? content.number : null,
1312
- contentTitle: typeof content.title === "string" ? content.title : null
1313
- };
1314
- }),
1315
- pageInfo: {
1316
- hasNextPage: false,
1317
- endCursor: null
1318
- }
1319
- };
1320
- }
1321
- if (capabilityId === "project_v2.item.add_issue") {
1322
- const root = typeof data === "object" && data !== null && !Array.isArray(data) ? data : {};
1323
- return {
1324
- itemId: typeof root.id === "string" ? root.id : null,
1325
- added: true
1326
- };
1327
- }
1328
- if (capabilityId === "project_v2.item.field.update") {
1329
- return {
1330
- itemId: parseNonEmptyString(params.itemId),
1331
- updated: true
1332
- };
1333
- }
1334
- if (capabilityId === "release.get" || capabilityId === "release.create_draft" || capabilityId === "release.update") {
1335
- return normalizeRelease(data);
1336
- }
1337
- if (capabilityId === "release.publish_draft") {
1338
- const release = normalizeRelease(data);
1339
- return {
1340
- ...release,
1341
- wasDraft: Boolean(params.__wasDraft)
1342
- };
1343
- }
1344
- if (capabilityId === "workflow_dispatch.run") {
1345
- return {
1346
- workflowId: String(params.workflowId),
1347
- ref: String(params.ref),
1348
- dispatched: true
1349
- };
1350
- }
1351
- if (capabilityId === "workflow_run.rerun_failed") {
1352
- return {
1353
- runId: Number(params.runId),
1354
- rerunFailed: true
1355
- };
1356
- }
1357
- if (capabilityId === "issue.view" || capabilityId === "pr.view") {
1358
- return normalizeListItem(data);
1359
- }
1360
- return data;
1361
- }
1362
- async function runCliCapability(runner, capabilityId, params, card) {
1363
- try {
1364
- if (capabilityId === "release.publish_draft") {
1365
- const owner = String(params.owner ?? "");
1366
- const name = String(params.name ?? "");
1367
- const releaseId = parseStrictPositiveInt(params.releaseId);
1368
- if (!owner || !name || releaseId === null) {
1369
- throw new Error("Missing owner/name/releaseId for release.publish_draft");
1370
- }
1371
- const readArgs = [...commandTokens(card, "api"), `repos/${owner}/${name}/releases/${releaseId}`];
1372
- const readResult = await runner.run("gh", readArgs, DEFAULT_TIMEOUT_MS);
1373
- if (readResult.exitCode !== 0) {
1374
- const code = mapErrorToCode(readResult.stderr);
1375
- return normalizeError(
1376
- {
1377
- code,
1378
- message: sanitizeCliErrorMessage(readResult.stderr, readResult.exitCode),
1379
- retryable: isRetryableErrorCode(code),
1380
- details: { capabilityId, exitCode: readResult.exitCode }
1381
- },
1382
- "cli",
1383
- { capabilityId, reason: "CARD_FALLBACK" }
1384
- );
1385
- }
1386
- const currentRelease = parseCliData(readResult.stdout);
1387
- const currentDraftValue = typeof currentRelease === "object" && currentRelease !== null && !Array.isArray(currentRelease) ? currentRelease.draft : void 0;
1388
- if (currentDraftValue !== true) {
1389
- return normalizeError(
1390
- {
1391
- code: errorCodes.Validation,
1392
- message: "release.publish_draft requires an existing draft release",
1393
- retryable: false
1394
- },
1395
- "cli",
1396
- { capabilityId, reason: "CARD_FALLBACK" }
1397
- );
1398
- }
1399
- const args2 = buildArgs(capabilityId, params, card);
1400
- const result2 = await runner.run("gh", args2, DEFAULT_TIMEOUT_MS);
1401
- if (result2.exitCode !== 0) {
1402
- const code = mapErrorToCode(result2.stderr);
1403
- return normalizeError(
1404
- {
1405
- code,
1406
- message: sanitizeCliErrorMessage(result2.stderr, result2.exitCode),
1407
- retryable: isRetryableErrorCode(code),
1408
- details: { capabilityId, exitCode: result2.exitCode }
1409
- },
1410
- "cli",
1411
- { capabilityId, reason: "CARD_FALLBACK" }
1412
- );
1413
- }
1414
- const normalized2 = normalizeCliData(capabilityId, parseCliData(result2.stdout), { ...params, __wasDraft: true });
1415
- return normalizeResult(normalized2, "cli", { capabilityId, reason: "CARD_FALLBACK" });
1416
- }
1417
- const args = buildArgs(capabilityId, params, card);
1418
- const result = await runner.run("gh", args, DEFAULT_TIMEOUT_MS);
1419
- if (result.exitCode !== 0) {
1420
- const code = mapErrorToCode(result.stderr);
1421
- return normalizeError(
1422
- {
1423
- code,
1424
- message: sanitizeCliErrorMessage(result.stderr, result.exitCode),
1425
- retryable: isRetryableErrorCode(code),
1426
- details: { capabilityId, exitCode: result.exitCode }
1427
- },
1428
- "cli",
1429
- { capabilityId, reason: "CARD_FALLBACK" }
1430
- );
1431
- }
1432
- const data = capabilityId === "workflow_job.logs.get" || capabilityId === "workflow_job.logs.analyze" ? result.stdout : parseCliData(result.stdout);
1433
- const normalized = normalizeCliData(capabilityId, data, params);
1434
- return normalizeResult(normalized, "cli", { capabilityId, reason: "CARD_FALLBACK" });
1435
- } catch (error) {
1436
- if (error instanceof SyntaxError) {
1437
- return normalizeError(
1438
- {
1439
- code: errorCodes.Server,
1440
- message: "Failed to parse CLI JSON output",
1441
- retryable: false
1442
- },
1443
- "cli",
1444
- { capabilityId, reason: "CARD_FALLBACK" }
1445
- );
1446
- }
1447
- if (error instanceof Error && error.message.toLowerCase().includes("invalid cli payload")) {
1448
- return normalizeError(
1449
- {
1450
- code: errorCodes.Server,
1451
- message: error.message,
1452
- retryable: false
1453
- },
1454
- "cli",
1455
- { capabilityId, reason: "CARD_FALLBACK" }
1456
- );
1457
- }
1458
- if (error instanceof Error && error.message.toLowerCase().includes("invalid after cursor")) {
1459
- return normalizeError(
1460
- {
1461
- code: errorCodes.Validation,
1462
- message: error.message,
1463
- retryable: false
1464
- },
1465
- "cli",
1466
- { capabilityId, reason: "CARD_FALLBACK" }
1467
- );
1468
- }
1469
- if (error instanceof Error && error.message.toLowerCase().includes("only supports draft=true")) {
1470
- return normalizeError(
1471
- {
1472
- code: errorCodes.Validation,
1473
- message: error.message,
1474
- retryable: false
1475
- },
1476
- "cli",
1477
- { capabilityId, reason: "CARD_FALLBACK" }
1478
- );
1479
- }
1480
- const code = mapErrorToCode(error);
1481
- return normalizeError(
1482
- {
1483
- code,
1484
- message: error instanceof Error ? error.message : String(error),
1485
- retryable: isRetryableErrorCode(code)
1486
- },
1487
- "cli",
1488
- { capabilityId, reason: "CARD_FALLBACK" }
1489
- );
1490
- }
1491
- }
1492
-
1493
- export {
1494
- runCliCapability
1495
- };
1496
- //# sourceMappingURL=chunk-SA2D4A5U.js.map