@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,16 @@
1
+ import {
2
+ listOperationCards
3
+ } from "./chunk-MT4U5DYD.js";
4
+
5
+ // src/agent-interface/tools/list-capabilities-tool.ts
6
+ function listCapabilities() {
7
+ return listOperationCards().map((card) => ({
8
+ capability_id: card.capability_id,
9
+ description: card.description
10
+ }));
11
+ }
12
+
13
+ export {
14
+ listCapabilities
15
+ };
16
+ //# sourceMappingURL=chunk-3RJCF42N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agent-interface/tools/list-capabilities-tool.ts"],"sourcesContent":["import { listOperationCards } from \"../../core/registry/index.js\"\n\nexport type CapabilityListItem = {\n capability_id: string\n description: string\n}\n\nexport function listCapabilities(): CapabilityListItem[] {\n return listOperationCards().map((card) => ({\n capability_id: card.capability_id,\n description: card.description\n }))\n}\n"],"mappings":";;;;;AAOO,SAAS,mBAAyC;AACvD,SAAO,mBAAmB,EAAE,IAAI,CAAC,UAAU;AAAA,IACzC,eAAe,KAAK;AAAA,IACpB,aAAa,KAAK;AAAA,EACpB,EAAE;AACJ;","names":[]}
@@ -0,0 +1,18 @@
1
+ import {
2
+ errorCodes
3
+ } from "./chunk-UOJWOHRM.js";
4
+
5
+ // src/core/errors/retryability.ts
6
+ var retryableCodes = /* @__PURE__ */ new Set([
7
+ errorCodes.Network,
8
+ errorCodes.RateLimit,
9
+ errorCodes.Server
10
+ ]);
11
+ function isRetryableErrorCode(code) {
12
+ return retryableCodes.has(code);
13
+ }
14
+
15
+ export {
16
+ isRetryableErrorCode
17
+ };
18
+ //# sourceMappingURL=chunk-573MDG3I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/errors/retryability.ts"],"sourcesContent":["import { errorCodes } from \"./codes.js\"\n\nconst retryableCodes = new Set<string>([\n errorCodes.Network,\n errorCodes.RateLimit,\n errorCodes.Server\n])\n\nexport function isRetryableErrorCode(code: string): boolean {\n return retryableCodes.has(code)\n}\n"],"mappings":";;;;;AAEA,IAAM,iBAAiB,oBAAI,IAAY;AAAA,EACrC,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AACb,CAAC;AAEM,SAAS,qBAAqB,MAAuB;AAC1D,SAAO,eAAe,IAAI,IAAI;AAChC;","names":[]}
@@ -0,0 +1,50 @@
1
+ // src/core/registry/schema-validator.ts
2
+ import Ajv from "ajv";
3
+ var ajv = new Ajv({
4
+ allErrors: true,
5
+ strict: false
6
+ });
7
+ var validatorCache = /* @__PURE__ */ new WeakMap();
8
+ function mapAjvErrors(errors) {
9
+ if (!errors) {
10
+ return [];
11
+ }
12
+ return errors.map((error) => ({
13
+ instancePath: error.instancePath,
14
+ message: error.message ?? "schema validation failed",
15
+ keyword: error.keyword,
16
+ params: error.params
17
+ }));
18
+ }
19
+ function getValidator(schema) {
20
+ const cached = validatorCache.get(schema);
21
+ if (cached) {
22
+ return cached;
23
+ }
24
+ const validator = ajv.compile(schema);
25
+ validatorCache.set(schema, validator);
26
+ return validator;
27
+ }
28
+ function validate(schema, payload) {
29
+ const validator = getValidator(schema);
30
+ const ok = validator(payload);
31
+ if (ok) {
32
+ return { ok: true };
33
+ }
34
+ return {
35
+ ok: false,
36
+ errors: mapAjvErrors(validator.errors)
37
+ };
38
+ }
39
+ function validateInput(inputSchema, params) {
40
+ return validate(inputSchema, params);
41
+ }
42
+ function validateOutput(outputSchema, data) {
43
+ return validate(outputSchema, data);
44
+ }
45
+
46
+ export {
47
+ validateInput,
48
+ validateOutput
49
+ };
50
+ //# sourceMappingURL=chunk-5JRLVOF2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/registry/schema-validator.ts"],"sourcesContent":["import Ajv from \"ajv\"\nimport type { ErrorObject, ValidateFunction } from \"ajv\"\n\ntype SchemaValidationError = {\n instancePath: string\n message: string\n keyword: string\n params: Record<string, unknown>\n}\n\ntype SchemaValidationResult =\n | { ok: true }\n | {\n ok: false\n errors: SchemaValidationError[]\n }\n\nconst ajv = new Ajv({\n allErrors: true,\n strict: false\n})\n\nconst validatorCache = new WeakMap<Record<string, unknown>, ValidateFunction>()\n\nfunction mapAjvErrors(errors: ErrorObject[] | null | undefined): SchemaValidationError[] {\n if (!errors) {\n return []\n }\n\n return errors.map((error) => ({\n instancePath: error.instancePath,\n message: error.message ?? \"schema validation failed\",\n keyword: error.keyword,\n params: error.params\n }))\n}\n\nfunction getValidator(schema: Record<string, unknown>): ValidateFunction {\n const cached = validatorCache.get(schema)\n if (cached) {\n return cached\n }\n\n const validator = ajv.compile(schema)\n validatorCache.set(schema, validator)\n return validator\n}\n\nfunction validate(schema: Record<string, unknown>, payload: unknown): SchemaValidationResult {\n const validator = getValidator(schema)\n const ok = validator(payload)\n\n if (ok) {\n return { ok: true }\n }\n\n return {\n ok: false,\n errors: mapAjvErrors(validator.errors)\n }\n}\n\nexport function validateInput(inputSchema: Record<string, unknown>, params: Record<string, unknown>): SchemaValidationResult {\n return validate(inputSchema, params)\n}\n\nexport function validateOutput(outputSchema: Record<string, unknown>, data: unknown): SchemaValidationResult {\n return validate(outputSchema, data)\n}\n"],"mappings":";AAAA,OAAO,SAAS;AAiBhB,IAAM,MAAM,IAAI,IAAI;AAAA,EAClB,WAAW;AAAA,EACX,QAAQ;AACV,CAAC;AAED,IAAM,iBAAiB,oBAAI,QAAmD;AAE9E,SAAS,aAAa,QAAmE;AACvF,MAAI,CAAC,QAAQ;AACX,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,OAAO,IAAI,CAAC,WAAW;AAAA,IAC5B,cAAc,MAAM;AAAA,IACpB,SAAS,MAAM,WAAW;AAAA,IAC1B,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM;AAAA,EAChB,EAAE;AACJ;AAEA,SAAS,aAAa,QAAmD;AACvE,QAAM,SAAS,eAAe,IAAI,MAAM;AACxC,MAAI,QAAQ;AACV,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,IAAI,QAAQ,MAAM;AACpC,iBAAe,IAAI,QAAQ,SAAS;AACpC,SAAO;AACT;AAEA,SAAS,SAAS,QAAiC,SAA0C;AAC3F,QAAM,YAAY,aAAa,MAAM;AACrC,QAAM,KAAK,UAAU,OAAO;AAE5B,MAAI,IAAI;AACN,WAAO,EAAE,IAAI,KAAK;AAAA,EACpB;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ,aAAa,UAAU,MAAM;AAAA,EACvC;AACF;AAEO,SAAS,cAAc,aAAsC,QAAyD;AAC3H,SAAO,SAAS,aAAa,MAAM;AACrC;AAEO,SAAS,eAAe,cAAuC,MAAuC;AAC3G,SAAO,SAAS,cAAc,IAAI;AACpC;","names":[]}
@@ -0,0 +1,41 @@
1
+ import {
2
+ errorCodes
3
+ } from "./chunk-UOJWOHRM.js";
4
+
5
+ // src/core/errors/map-error.ts
6
+ function toMessage(error) {
7
+ if (error instanceof Error) {
8
+ return error.message;
9
+ }
10
+ return String(error);
11
+ }
12
+ function mapErrorToCode(error) {
13
+ const message = toMessage(error).toLowerCase();
14
+ if (message.includes("rate limit") || message.includes(" 429") || message.includes("too many requests")) {
15
+ return errorCodes.RateLimit;
16
+ }
17
+ if (message.includes("timeout")) {
18
+ return errorCodes.Network;
19
+ }
20
+ if (message.includes("econn") || message.includes("enotfound") || message.includes("eai_again") || message.includes("network") || message.includes("connection reset")) {
21
+ return errorCodes.Network;
22
+ }
23
+ if (message.includes(" 500") || message.includes(" 502") || message.includes(" 503") || message.includes(" 504")) {
24
+ return errorCodes.Server;
25
+ }
26
+ if (message.includes("auth") || message.includes("forbidden") || message.includes("unauthorized")) {
27
+ return errorCodes.Auth;
28
+ }
29
+ if (message.includes("validation") || message.includes("invalid") || message.includes("required") || message.includes("positive integer")) {
30
+ return errorCodes.Validation;
31
+ }
32
+ if (message.includes("not found") || message.includes(" 404")) {
33
+ return errorCodes.NotFound;
34
+ }
35
+ return errorCodes.Unknown;
36
+ }
37
+
38
+ export {
39
+ mapErrorToCode
40
+ };
41
+ //# sourceMappingURL=chunk-B6RLMKS4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/errors/map-error.ts"],"sourcesContent":["import { errorCodes } from \"./codes.js\"\nimport type { ErrorCode } from \"./codes.js\"\n\nfunction toMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message\n }\n\n return String(error)\n}\n\nexport function mapErrorToCode(error: unknown): ErrorCode {\n const message = toMessage(error).toLowerCase()\n\n if (message.includes(\"rate limit\") || message.includes(\" 429\") || message.includes(\"too many requests\")) {\n return errorCodes.RateLimit\n }\n\n if (message.includes(\"timeout\")) {\n return errorCodes.Network\n }\n\n if (\n message.includes(\"econn\") ||\n message.includes(\"enotfound\") ||\n message.includes(\"eai_again\") ||\n message.includes(\"network\") ||\n message.includes(\"connection reset\")\n ) {\n return errorCodes.Network\n }\n\n if (message.includes(\" 500\") || message.includes(\" 502\") || message.includes(\" 503\") || message.includes(\" 504\")) {\n return errorCodes.Server\n }\n\n if (message.includes(\"auth\") || message.includes(\"forbidden\") || message.includes(\"unauthorized\")) {\n return errorCodes.Auth\n }\n\n if (\n message.includes(\"validation\") ||\n message.includes(\"invalid\") ||\n message.includes(\"required\") ||\n message.includes(\"positive integer\")\n ) {\n return errorCodes.Validation\n }\n\n if (message.includes(\"not found\") || message.includes(\" 404\")) {\n return errorCodes.NotFound\n }\n\n return errorCodes.Unknown\n}\n"],"mappings":";;;;;AAGA,SAAS,UAAU,OAAwB;AACzC,MAAI,iBAAiB,OAAO;AAC1B,WAAO,MAAM;AAAA,EACf;AAEA,SAAO,OAAO,KAAK;AACrB;AAEO,SAAS,eAAe,OAA2B;AACxD,QAAM,UAAU,UAAU,KAAK,EAAE,YAAY;AAE7C,MAAI,QAAQ,SAAS,YAAY,KAAK,QAAQ,SAAS,MAAM,KAAK,QAAQ,SAAS,mBAAmB,GAAG;AACvG,WAAO,WAAW;AAAA,EACpB;AAEA,MAAI,QAAQ,SAAS,SAAS,GAAG;AAC/B,WAAO,WAAW;AAAA,EACpB;AAEA,MACE,QAAQ,SAAS,OAAO,KACxB,QAAQ,SAAS,WAAW,KAC5B,QAAQ,SAAS,WAAW,KAC5B,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,kBAAkB,GACnC;AACA,WAAO,WAAW;AAAA,EACpB;AAEA,MAAI,QAAQ,SAAS,MAAM,KAAK,QAAQ,SAAS,MAAM,KAAK,QAAQ,SAAS,MAAM,KAAK,QAAQ,SAAS,MAAM,GAAG;AAChH,WAAO,WAAW;AAAA,EACpB;AAEA,MAAI,QAAQ,SAAS,MAAM,KAAK,QAAQ,SAAS,WAAW,KAAK,QAAQ,SAAS,cAAc,GAAG;AACjG,WAAO,WAAW;AAAA,EACpB;AAEA,MACE,QAAQ,SAAS,YAAY,KAC7B,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,UAAU,KAC3B,QAAQ,SAAS,kBAAkB,GACnC;AACA,WAAO,WAAW;AAAA,EACpB;AAEA,MAAI,QAAQ,SAAS,WAAW,KAAK,QAAQ,SAAS,MAAM,GAAG;AAC7D,WAAO,WAAW;AAAA,EACpB;AAEA,SAAO,WAAW;AACpB;","names":[]}
@@ -0,0 +1,42 @@
1
+ import {
2
+ explainCapability
3
+ } from "./chunk-MMG6CIKK.js";
4
+
5
+ // src/cli/commands/capabilities-explain.ts
6
+ function usage() {
7
+ return "Usage: ghx capabilities explain <capability_id> [--json]";
8
+ }
9
+ function parseArgs(argv) {
10
+ const asJson = argv.includes("--json");
11
+ const capabilityId = argv.find((arg) => !arg.startsWith("-"));
12
+ return { capabilityId, asJson };
13
+ }
14
+ async function capabilitiesExplainCommand(argv = []) {
15
+ const { capabilityId, asJson } = parseArgs(argv);
16
+ if (!capabilityId) {
17
+ process.stderr.write(`${usage()}
18
+ `);
19
+ return 1;
20
+ }
21
+ try {
22
+ const explained = explainCapability(capabilityId);
23
+ if (asJson) {
24
+ process.stdout.write(`${JSON.stringify(explained)}
25
+ `);
26
+ return 0;
27
+ }
28
+ process.stdout.write(`${JSON.stringify(explained, null, 2)}
29
+ `);
30
+ return 0;
31
+ } catch (error) {
32
+ const message = error instanceof Error ? error.message : String(error);
33
+ process.stderr.write(`${message}
34
+ `);
35
+ return 1;
36
+ }
37
+ }
38
+
39
+ export {
40
+ capabilitiesExplainCommand
41
+ };
42
+ //# sourceMappingURL=chunk-BJHVAFTN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/capabilities-explain.ts"],"sourcesContent":["import { explainCapability } from \"../../agent-interface/tools/explain-tool.js\"\n\nfunction usage(): string {\n return \"Usage: ghx capabilities explain <capability_id> [--json]\"\n}\n\nfunction parseArgs(argv: string[]): { capabilityId: string | undefined; asJson: boolean } {\n const asJson = argv.includes(\"--json\")\n const capabilityId = argv.find((arg) => !arg.startsWith(\"-\"))\n return { capabilityId, asJson }\n}\n\nexport async function capabilitiesExplainCommand(argv: string[] = []): Promise<number> {\n const { capabilityId, asJson } = parseArgs(argv)\n\n if (!capabilityId) {\n process.stderr.write(`${usage()}\\n`)\n return 1\n }\n\n try {\n const explained = explainCapability(capabilityId)\n\n if (asJson) {\n process.stdout.write(`${JSON.stringify(explained)}\\n`)\n return 0\n }\n\n process.stdout.write(`${JSON.stringify(explained, null, 2)}\\n`)\n return 0\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n process.stderr.write(`${message}\\n`)\n return 1\n }\n}\n"],"mappings":";;;;;AAEA,SAAS,QAAgB;AACvB,SAAO;AACT;AAEA,SAAS,UAAU,MAAuE;AACxF,QAAM,SAAS,KAAK,SAAS,QAAQ;AACrC,QAAM,eAAe,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,WAAW,GAAG,CAAC;AAC5D,SAAO,EAAE,cAAc,OAAO;AAChC;AAEA,eAAsB,2BAA2B,OAAiB,CAAC,GAAoB;AACrF,QAAM,EAAE,cAAc,OAAO,IAAI,UAAU,IAAI;AAE/C,MAAI,CAAC,cAAc;AACjB,YAAQ,OAAO,MAAM,GAAG,MAAM,CAAC;AAAA,CAAI;AACnC,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,YAAY,kBAAkB,YAAY;AAEhD,QAAI,QAAQ;AACV,cAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,SAAS,CAAC;AAAA,CAAI;AACrD,aAAO;AAAA,IACT;AAEA,YAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,WAAW,MAAM,CAAC,CAAC;AAAA,CAAI;AAC9D,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,YAAQ,OAAO,MAAM,GAAG,OAAO;AAAA,CAAI;AACnC,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,38 @@
1
+ // src/gql/operations/issue-list.generated.ts
2
+ var IssueListDocument = `
3
+ query IssueList($owner: String!, $name: String!, $first: Int!, $after: String) {
4
+ repository(owner: $owner, name: $name) {
5
+ issues(
6
+ first: $first
7
+ after: $after
8
+ orderBy: {field: CREATED_AT, direction: DESC}
9
+ ) {
10
+ nodes {
11
+ id
12
+ number
13
+ title
14
+ state
15
+ url
16
+ }
17
+ pageInfo {
18
+ endCursor
19
+ hasNextPage
20
+ }
21
+ }
22
+ }
23
+ }
24
+ `;
25
+ var defaultWrapper = (action, _operationName, _operationType, _variables) => action();
26
+ function getSdk(client, withWrapper = defaultWrapper) {
27
+ return {
28
+ IssueList(variables, requestHeaders, signal) {
29
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: IssueListDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "IssueList", "query", variables);
30
+ }
31
+ };
32
+ }
33
+
34
+ export {
35
+ IssueListDocument,
36
+ getSdk
37
+ };
38
+ //# sourceMappingURL=chunk-D746VR3B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gql/operations/issue-list.generated.ts"],"sourcesContent":["import type * as Types from '../generated/common-types';\n\nimport type { GraphQLClient, RequestOptions } from 'graphql-request';\ntype GraphQLClientRequestHeaders = RequestOptions['requestHeaders'];\nexport type IssueListQueryVariables = Types.Exact<{\n owner: Types.Scalars['String']['input'];\n name: Types.Scalars['String']['input'];\n first: Types.Scalars['Int']['input'];\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type IssueListQuery = { __typename?: 'Query', repository?: { __typename?: 'Repository', issues: { __typename?: 'IssueConnection', nodes?: Array<{ __typename?: 'Issue', id: string, number: number, title: string, state: Types.IssueState, url: any } | null> | null, pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean } } } | null };\n\n\nexport const IssueListDocument = `\n query IssueList($owner: String!, $name: String!, $first: Int!, $after: String) {\n repository(owner: $owner, name: $name) {\n issues(\n first: $first\n after: $after\n orderBy: {field: CREATED_AT, direction: DESC}\n ) {\n nodes {\n id\n number\n title\n state\n url\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n}\n `;\n\nexport type SdkFunctionWrapper = <T>(action: (requestHeaders?:Record<string, string>) => Promise<T>, operationName: string, operationType?: string, variables?: any) => Promise<T>;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType, _variables) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n IssueList(variables: IssueListQueryVariables, requestHeaders?: GraphQLClientRequestHeaders, signal?: RequestInit['signal']): Promise<IssueListQuery> {\n return withWrapper((wrappedRequestHeaders) => client.request<IssueListQuery>({ document: IssueListDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), 'IssueList', 'query', variables);\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;"],"mappings":";AAeO,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BjC,IAAM,iBAAqC,CAAC,QAAQ,gBAAgB,gBAAgB,eAAe,OAAO;AAEnG,SAAS,OAAO,QAAuB,cAAkC,gBAAgB;AAC9F,SAAO;AAAA,IACL,UAAU,WAAoC,gBAA8C,QAAyD;AACnJ,aAAO,YAAY,CAAC,0BAA0B,OAAO,QAAwB,EAAE,UAAU,mBAAmB,WAAW,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,OAAO,CAAC,GAAG,aAAa,SAAS,SAAS;AAAA,IACpO;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,20 @@
1
+ // src/agent-interface/tools/execute-tool.ts
2
+ function createExecuteTool(deps) {
3
+ return {
4
+ execute(capabilityId, params, options) {
5
+ const request = {
6
+ task: capabilityId,
7
+ input: params,
8
+ ...options ? { options } : {}
9
+ };
10
+ return deps.executeTask({
11
+ ...request
12
+ });
13
+ }
14
+ };
15
+ }
16
+
17
+ export {
18
+ createExecuteTool
19
+ };
20
+ //# sourceMappingURL=chunk-DJIEG6K7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agent-interface/tools/execute-tool.ts"],"sourcesContent":["import type { ResultEnvelope } from \"../../core/contracts/envelope.js\"\n\ntype ExecuteTaskFn = (request: {\n task: string\n input: Record<string, unknown>\n options?: Record<string, unknown>\n}) => Promise<ResultEnvelope>\n\nexport function createExecuteTool(deps: { executeTask: ExecuteTaskFn }) {\n return {\n execute(\n capabilityId: string,\n params: Record<string, unknown>,\n options?: Record<string, unknown>\n ): Promise<ResultEnvelope> {\n const request = {\n task: capabilityId,\n input: params,\n ...(options ? { options } : {})\n }\n\n return deps.executeTask({\n ...request\n })\n }\n }\n}\n"],"mappings":";AAQO,SAAS,kBAAkB,MAAsC;AACtE,SAAO;AAAA,IACL,QACE,cACA,QACA,SACyB;AACzB,YAAM,UAAU;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC/B;AAEA,aAAO,KAAK,YAAY;AAAA,QACtB,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,106 @@
1
+ // src/core/execution/cli/safe-runner.ts
2
+ import { spawn } from "child_process";
3
+ var DEFAULT_MAX_OUTPUT_BYTES = 1e6;
4
+ function createSafeCliCommandRunner(options) {
5
+ const maxOutputBytes = options?.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
6
+ return {
7
+ run(command, args, timeoutMs) {
8
+ if (timeoutMs <= 0) {
9
+ return Promise.reject(new Error("timeoutMs must be a positive number"));
10
+ }
11
+ return new Promise((resolve, reject) => {
12
+ const child = spawn(command, args, {
13
+ shell: false,
14
+ stdio: ["ignore", "pipe", "pipe"]
15
+ });
16
+ const stdoutChunks = [];
17
+ const stderrChunks = [];
18
+ let stdoutSize = 0;
19
+ let stderrSize = 0;
20
+ let failureReason = null;
21
+ let settled = false;
22
+ const timer = setTimeout(() => {
23
+ if (failureReason === null) {
24
+ failureReason = "timeout";
25
+ }
26
+ child.kill("SIGKILL");
27
+ }, timeoutMs);
28
+ function settleError(error) {
29
+ if (settled) {
30
+ return;
31
+ }
32
+ settled = true;
33
+ clearTimeout(timer);
34
+ reject(error);
35
+ }
36
+ function settleSuccess(stdout, stderr, exitCode) {
37
+ if (settled) {
38
+ return;
39
+ }
40
+ settled = true;
41
+ clearTimeout(timer);
42
+ resolve({ stdout, stderr, exitCode });
43
+ }
44
+ child.stdout?.on("data", (chunk) => {
45
+ if (failureReason === "overflow") {
46
+ return;
47
+ }
48
+ stdoutSize += chunk.length;
49
+ if (stdoutSize + stderrSize > maxOutputBytes) {
50
+ if (failureReason === null) {
51
+ failureReason = "overflow";
52
+ clearTimeout(timer);
53
+ child.kill("SIGKILL");
54
+ settleError(new Error(`CLI output exceeded ${maxOutputBytes} bytes`));
55
+ return;
56
+ }
57
+ child.kill("SIGKILL");
58
+ return;
59
+ }
60
+ stdoutChunks.push(chunk);
61
+ });
62
+ child.stderr?.on("data", (chunk) => {
63
+ if (failureReason === "overflow") {
64
+ return;
65
+ }
66
+ stderrSize += chunk.length;
67
+ if (stdoutSize + stderrSize > maxOutputBytes) {
68
+ if (failureReason === null) {
69
+ failureReason = "overflow";
70
+ clearTimeout(timer);
71
+ child.kill("SIGKILL");
72
+ settleError(new Error(`CLI output exceeded ${maxOutputBytes} bytes`));
73
+ return;
74
+ }
75
+ child.kill("SIGKILL");
76
+ return;
77
+ }
78
+ stderrChunks.push(chunk);
79
+ });
80
+ child.on("error", (error) => {
81
+ settleError(error);
82
+ });
83
+ child.on("close", (code) => {
84
+ if (failureReason === "timeout") {
85
+ settleError(new Error(`CLI command timed out after ${timeoutMs}ms`));
86
+ return;
87
+ }
88
+ if (failureReason === "overflow") {
89
+ settleError(new Error(`CLI output exceeded ${maxOutputBytes} bytes`));
90
+ return;
91
+ }
92
+ settleSuccess(
93
+ Buffer.concat(stdoutChunks).toString("utf8"),
94
+ Buffer.concat(stderrChunks).toString("utf8"),
95
+ code ?? 1
96
+ );
97
+ });
98
+ });
99
+ }
100
+ };
101
+ }
102
+
103
+ export {
104
+ createSafeCliCommandRunner
105
+ };
106
+ //# sourceMappingURL=chunk-DLKIQBK6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/execution/cli/safe-runner.ts"],"sourcesContent":["import { spawn } from \"node:child_process\"\n\nimport type { CliCommandRunner } from \"../adapters/cli-capability-adapter.js\"\n\nconst DEFAULT_MAX_OUTPUT_BYTES = 1_000_000\n\ntype SafeRunnerOptions = {\n maxOutputBytes?: number\n}\n\nexport function createSafeCliCommandRunner(options?: SafeRunnerOptions): CliCommandRunner {\n const maxOutputBytes = options?.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES\n\n return {\n run(command: string, args: string[], timeoutMs: number): Promise<{ stdout: string; stderr: string; exitCode: number }> {\n if (timeoutMs <= 0) {\n return Promise.reject(new Error(\"timeoutMs must be a positive number\"))\n }\n\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n shell: false,\n stdio: [\"ignore\", \"pipe\", \"pipe\"]\n })\n\n const stdoutChunks: Buffer[] = []\n const stderrChunks: Buffer[] = []\n let stdoutSize = 0\n let stderrSize = 0\n let failureReason: \"timeout\" | \"overflow\" | null = null\n let settled = false\n\n const timer = setTimeout(() => {\n if (failureReason === null) {\n failureReason = \"timeout\"\n }\n child.kill(\"SIGKILL\")\n }, timeoutMs)\n\n function settleError(error: Error): void {\n if (settled) {\n return\n }\n\n settled = true\n clearTimeout(timer)\n reject(error)\n }\n\n function settleSuccess(stdout: string, stderr: string, exitCode: number): void {\n if (settled) {\n return\n }\n\n settled = true\n clearTimeout(timer)\n resolve({ stdout, stderr, exitCode })\n }\n\n child.stdout?.on(\"data\", (chunk: Buffer) => {\n if (failureReason === \"overflow\") {\n return\n }\n\n stdoutSize += chunk.length\n if (stdoutSize + stderrSize > maxOutputBytes) {\n if (failureReason === null) {\n failureReason = \"overflow\"\n clearTimeout(timer)\n child.kill(\"SIGKILL\")\n settleError(new Error(`CLI output exceeded ${maxOutputBytes} bytes`))\n return\n }\n\n child.kill(\"SIGKILL\")\n return\n }\n\n stdoutChunks.push(chunk)\n })\n\n child.stderr?.on(\"data\", (chunk: Buffer) => {\n if (failureReason === \"overflow\") {\n return\n }\n\n stderrSize += chunk.length\n if (stdoutSize + stderrSize > maxOutputBytes) {\n if (failureReason === null) {\n failureReason = \"overflow\"\n clearTimeout(timer)\n child.kill(\"SIGKILL\")\n settleError(new Error(`CLI output exceeded ${maxOutputBytes} bytes`))\n return\n }\n\n child.kill(\"SIGKILL\")\n return\n }\n\n stderrChunks.push(chunk)\n })\n\n child.on(\"error\", (error) => {\n settleError(error)\n })\n\n child.on(\"close\", (code) => {\n if (failureReason === \"timeout\") {\n settleError(new Error(`CLI command timed out after ${timeoutMs}ms`))\n return\n }\n\n if (failureReason === \"overflow\") {\n settleError(new Error(`CLI output exceeded ${maxOutputBytes} bytes`))\n return\n }\n\n settleSuccess(\n Buffer.concat(stdoutChunks).toString(\"utf8\"),\n Buffer.concat(stderrChunks).toString(\"utf8\"),\n code ?? 1\n )\n })\n })\n }\n }\n}\n"],"mappings":";AAAA,SAAS,aAAa;AAItB,IAAM,2BAA2B;AAM1B,SAAS,2BAA2B,SAA+C;AACxF,QAAM,iBAAiB,SAAS,kBAAkB;AAElD,SAAO;AAAA,IACL,IAAI,SAAiB,MAAgB,WAAkF;AACrH,UAAI,aAAa,GAAG;AAClB,eAAO,QAAQ,OAAO,IAAI,MAAM,qCAAqC,CAAC;AAAA,MACxE;AAEA,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,cAAM,QAAQ,MAAM,SAAS,MAAM;AAAA,UACjC,OAAO;AAAA,UACP,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,QAClC,CAAC;AAED,cAAM,eAAyB,CAAC;AAChC,cAAM,eAAyB,CAAC;AAChC,YAAI,aAAa;AACjB,YAAI,aAAa;AACjB,YAAI,gBAA+C;AACnD,YAAI,UAAU;AAEd,cAAM,QAAQ,WAAW,MAAM;AAC7B,cAAI,kBAAkB,MAAM;AAC1B,4BAAgB;AAAA,UAClB;AACA,gBAAM,KAAK,SAAS;AAAA,QACtB,GAAG,SAAS;AAEZ,iBAAS,YAAY,OAAoB;AACvC,cAAI,SAAS;AACX;AAAA,UACF;AAEA,oBAAU;AACV,uBAAa,KAAK;AAClB,iBAAO,KAAK;AAAA,QACd;AAEA,iBAAS,cAAc,QAAgB,QAAgB,UAAwB;AAC7E,cAAI,SAAS;AACX;AAAA,UACF;AAEA,oBAAU;AACV,uBAAa,KAAK;AAClB,kBAAQ,EAAE,QAAQ,QAAQ,SAAS,CAAC;AAAA,QACtC;AAEA,cAAM,QAAQ,GAAG,QAAQ,CAAC,UAAkB;AAC1C,cAAI,kBAAkB,YAAY;AAChC;AAAA,UACF;AAEA,wBAAc,MAAM;AACpB,cAAI,aAAa,aAAa,gBAAgB;AAC5C,gBAAI,kBAAkB,MAAM;AAC1B,8BAAgB;AAChB,2BAAa,KAAK;AAClB,oBAAM,KAAK,SAAS;AACpB,0BAAY,IAAI,MAAM,uBAAuB,cAAc,QAAQ,CAAC;AACpE;AAAA,YACF;AAEA,kBAAM,KAAK,SAAS;AACpB;AAAA,UACF;AAEA,uBAAa,KAAK,KAAK;AAAA,QACzB,CAAC;AAED,cAAM,QAAQ,GAAG,QAAQ,CAAC,UAAkB;AAC1C,cAAI,kBAAkB,YAAY;AAChC;AAAA,UACF;AAEA,wBAAc,MAAM;AACpB,cAAI,aAAa,aAAa,gBAAgB;AAC5C,gBAAI,kBAAkB,MAAM;AAC1B,8BAAgB;AAChB,2BAAa,KAAK;AAClB,oBAAM,KAAK,SAAS;AACpB,0BAAY,IAAI,MAAM,uBAAuB,cAAc,QAAQ,CAAC;AACpE;AAAA,YACF;AAEA,kBAAM,KAAK,SAAS;AACpB;AAAA,UACF;AAEA,uBAAa,KAAK,KAAK;AAAA,QACzB,CAAC;AAED,cAAM,GAAG,SAAS,CAAC,UAAU;AAC3B,sBAAY,KAAK;AAAA,QACnB,CAAC;AAED,cAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,cAAI,kBAAkB,WAAW;AAC/B,wBAAY,IAAI,MAAM,+BAA+B,SAAS,IAAI,CAAC;AACnE;AAAA,UACF;AAEA,cAAI,kBAAkB,YAAY;AAChC,wBAAY,IAAI,MAAM,uBAAuB,cAAc,QAAQ,CAAC;AACpE;AAAA,UACF;AAEA;AAAA,YACE,OAAO,OAAO,YAAY,EAAE,SAAS,MAAM;AAAA,YAC3C,OAAO,OAAO,YAAY,EAAE,SAAS,MAAM;AAAA,YAC3C,QAAQ;AAAA,UACV;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,31 @@
1
+ // src/gql/operations/repo-view.generated.ts
2
+ var RepoViewDocument = `
3
+ query RepoView($owner: String!, $name: String!) {
4
+ repository(owner: $owner, name: $name) {
5
+ id
6
+ name
7
+ nameWithOwner
8
+ isPrivate
9
+ stargazerCount
10
+ forkCount
11
+ url
12
+ defaultBranchRef {
13
+ name
14
+ }
15
+ }
16
+ }
17
+ `;
18
+ var defaultWrapper = (action, _operationName, _operationType, _variables) => action();
19
+ function getSdk(client, withWrapper = defaultWrapper) {
20
+ return {
21
+ RepoView(variables, requestHeaders, signal) {
22
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: RepoViewDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "RepoView", "query", variables);
23
+ }
24
+ };
25
+ }
26
+
27
+ export {
28
+ RepoViewDocument,
29
+ getSdk
30
+ };
31
+ //# sourceMappingURL=chunk-EBRDO4Y6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gql/operations/repo-view.generated.ts"],"sourcesContent":["import type * as Types from '../generated/common-types';\n\nimport type { GraphQLClient, RequestOptions } from 'graphql-request';\ntype GraphQLClientRequestHeaders = RequestOptions['requestHeaders'];\nexport type RepoViewQueryVariables = Types.Exact<{\n owner: Types.Scalars['String']['input'];\n name: Types.Scalars['String']['input'];\n}>;\n\n\nexport type RepoViewQuery = { __typename?: 'Query', repository?: { __typename?: 'Repository', id: string, name: string, nameWithOwner: string, isPrivate: boolean, stargazerCount: number, forkCount: number, url: any, defaultBranchRef?: { __typename?: 'Ref', name: string } | null } | null };\n\n\nexport const RepoViewDocument = `\n query RepoView($owner: String!, $name: String!) {\n repository(owner: $owner, name: $name) {\n id\n name\n nameWithOwner\n isPrivate\n stargazerCount\n forkCount\n url\n defaultBranchRef {\n name\n }\n }\n}\n `;\n\nexport type SdkFunctionWrapper = <T>(action: (requestHeaders?:Record<string, string>) => Promise<T>, operationName: string, operationType?: string, variables?: any) => Promise<T>;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType, _variables) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n RepoView(variables: RepoViewQueryVariables, requestHeaders?: GraphQLClientRequestHeaders, signal?: RequestInit['signal']): Promise<RepoViewQuery> {\n return withWrapper((wrappedRequestHeaders) => client.request<RepoViewQuery>({ document: RepoViewDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), 'RepoView', 'query', variables);\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;"],"mappings":";AAaO,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBhC,IAAM,iBAAqC,CAAC,QAAQ,gBAAgB,gBAAgB,eAAe,OAAO;AAEnG,SAAS,OAAO,QAAuB,cAAkC,gBAAgB;AAC9F,SAAO;AAAA,IACL,SAAS,WAAmC,gBAA8C,QAAwD;AAChJ,aAAO,YAAY,CAAC,0BAA0B,OAAO,QAAuB,EAAE,UAAU,kBAAkB,WAAW,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,OAAO,CAAC,GAAG,YAAY,SAAS,SAAS;AAAA,IACjO;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,14 @@
1
+ // src/agent-interface/prompt/main-skill.ts
2
+ var MAIN_SKILL_TEXT = `
3
+ Use execute(capability_id, params) for all GitHub actions.
4
+ Never call gh help and never fetch GraphQL schema/introspection.
5
+ If required params are unknown, call explain(capability_id) or ask the user.
6
+ Treat ResultEnvelope.ok=false as a failure.
7
+ If error.retryable=true, retry once unless user requested otherwise.
8
+ Only reason about ResultEnvelope.data and ResultEnvelope.error.
9
+ `.trim();
10
+
11
+ export {
12
+ MAIN_SKILL_TEXT
13
+ };
14
+ //# sourceMappingURL=chunk-FXN6IIT5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agent-interface/prompt/main-skill.ts"],"sourcesContent":["export const MAIN_SKILL_TEXT = `\nUse execute(capability_id, params) for all GitHub actions.\nNever call gh help and never fetch GraphQL schema/introspection.\nIf required params are unknown, call explain(capability_id) or ask the user.\nTreat ResultEnvelope.ok=false as a failure.\nIf error.retryable=true, retry once unless user requested otherwise.\nOnly reason about ResultEnvelope.data and ResultEnvelope.error.\n`.trim()\n"],"mappings":";AAAO,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7B,KAAK;","names":[]}
@@ -0,0 +1,92 @@
1
+ import {
2
+ executeTask
3
+ } from "./chunk-WYSY75U7.js";
4
+ import {
5
+ createGithubClient
6
+ } from "./chunk-YQDQX4BT.js";
7
+
8
+ // src/cli/commands/run.ts
9
+ var GITHUB_GRAPHQL_ENDPOINT = "https://api.github.com/graphql";
10
+ function parseRunArgs(argv) {
11
+ const [task, ...rest] = argv;
12
+ if (!task || task.trim().length === 0) {
13
+ throw new Error("Usage: ghx run <task> --input '<json>'");
14
+ }
15
+ const inputIndex = rest.findIndex((arg) => arg === "--input");
16
+ const inlineInput = rest.find((arg) => arg.startsWith("--input="));
17
+ const inputRaw = inputIndex >= 0 ? rest[inputIndex + 1] : inlineInput ? inlineInput.slice("--input=".length) : void 0;
18
+ if (!inputRaw) {
19
+ throw new Error("Missing --input JSON");
20
+ }
21
+ let parsed;
22
+ try {
23
+ parsed = JSON.parse(inputRaw);
24
+ } catch {
25
+ throw new Error("Invalid JSON for --input");
26
+ }
27
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
28
+ throw new Error("--input must be a JSON object");
29
+ }
30
+ return { task, input: parsed };
31
+ }
32
+ function resolveGithubToken() {
33
+ const token = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN;
34
+ if (!token || token.trim().length === 0) {
35
+ throw new Error("Missing GITHUB_TOKEN or GH_TOKEN for GraphQL transport");
36
+ }
37
+ return token;
38
+ }
39
+ async function executeGraphqlRequest(token, query, variables) {
40
+ const response = await fetch(GITHUB_GRAPHQL_ENDPOINT, {
41
+ method: "POST",
42
+ headers: {
43
+ "content-type": "application/json",
44
+ accept: "application/json",
45
+ authorization: `Bearer ${token}`,
46
+ "user-agent": "ghx"
47
+ },
48
+ body: JSON.stringify({ query, variables: variables ?? {} })
49
+ });
50
+ const payload = await response.json();
51
+ if (!response.ok) {
52
+ const message = payload.message ?? `GitHub GraphQL request failed with status ${response.status}`;
53
+ throw new Error(message);
54
+ }
55
+ if (Array.isArray(payload.errors) && payload.errors.length > 0) {
56
+ const message = payload.errors[0]?.message ?? "GitHub GraphQL returned errors";
57
+ throw new Error(message);
58
+ }
59
+ if (payload.data === void 0) {
60
+ throw new Error("GitHub GraphQL response missing data");
61
+ }
62
+ return payload.data;
63
+ }
64
+ async function runCommand(argv = []) {
65
+ if (argv.length === 0) {
66
+ process.stdout.write("Usage: ghx run <task> --input '<json>'\n");
67
+ return 1;
68
+ }
69
+ const { task, input } = parseRunArgs(argv);
70
+ const githubToken = resolveGithubToken();
71
+ const githubClient = createGithubClient({
72
+ async execute(query, variables) {
73
+ return executeGraphqlRequest(githubToken, query, variables);
74
+ }
75
+ });
76
+ const request = {
77
+ task,
78
+ input
79
+ };
80
+ const result = await executeTask(request, {
81
+ githubClient,
82
+ githubToken
83
+ });
84
+ process.stdout.write(`${JSON.stringify(result)}
85
+ `);
86
+ return 0;
87
+ }
88
+
89
+ export {
90
+ runCommand
91
+ };
92
+ //# sourceMappingURL=chunk-GPU4P7UG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/run.ts"],"sourcesContent":["import { createGithubClient } from \"../../gql/client.js\"\nimport { executeTask } from \"../../core/routing/engine.js\"\nimport type { TaskRequest } from \"../../core/contracts/task.js\"\n\nconst GITHUB_GRAPHQL_ENDPOINT = \"https://api.github.com/graphql\"\n\nfunction parseRunArgs(argv: string[]): { task: string; input: Record<string, unknown> } {\n const [task, ...rest] = argv\n if (!task || task.trim().length === 0) {\n throw new Error(\"Usage: ghx run <task> --input '<json>'\")\n }\n\n const inputIndex = rest.findIndex((arg) => arg === \"--input\")\n const inlineInput = rest.find((arg) => arg.startsWith(\"--input=\"))\n const inputRaw =\n inputIndex >= 0\n ? rest[inputIndex + 1]\n : inlineInput\n ? inlineInput.slice(\"--input=\".length)\n : undefined\n\n if (!inputRaw) {\n throw new Error(\"Missing --input JSON\")\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(inputRaw)\n } catch {\n throw new Error(\"Invalid JSON for --input\")\n }\n\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new Error(\"--input must be a JSON object\")\n }\n\n return { task, input: parsed as Record<string, unknown> }\n}\n\nfunction resolveGithubToken(): string {\n const token = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN\n if (!token || token.trim().length === 0) {\n throw new Error(\"Missing GITHUB_TOKEN or GH_TOKEN for GraphQL transport\")\n }\n\n return token\n}\n\nasync function executeGraphqlRequest<TData>(\n token: string,\n query: string,\n variables?: Record<string, unknown>\n): Promise<TData> {\n const response = await fetch(GITHUB_GRAPHQL_ENDPOINT, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n authorization: `Bearer ${token}`,\n \"user-agent\": \"ghx\"\n },\n body: JSON.stringify({ query, variables: variables ?? {} })\n })\n\n const payload = (await response.json()) as {\n data?: TData\n errors?: Array<{ message?: string }>\n message?: string\n }\n\n if (!response.ok) {\n const message = payload.message ?? `GitHub GraphQL request failed with status ${response.status}`\n throw new Error(message)\n }\n\n if (Array.isArray(payload.errors) && payload.errors.length > 0) {\n const message = payload.errors[0]?.message ?? \"GitHub GraphQL returned errors\"\n throw new Error(message)\n }\n\n if (payload.data === undefined) {\n throw new Error(\"GitHub GraphQL response missing data\")\n }\n\n return payload.data\n}\n\nexport async function runCommand(argv: string[] = []): Promise<number> {\n if (argv.length === 0) {\n process.stdout.write(\"Usage: ghx run <task> --input '<json>'\\n\")\n return 1\n }\n\n const { task, input } = parseRunArgs(argv)\n const githubToken = resolveGithubToken()\n\n const githubClient = createGithubClient({\n async execute<TData>(query: string, variables?: Record<string, unknown>): Promise<TData> {\n return executeGraphqlRequest<TData>(githubToken, query, variables)\n }\n })\n\n const request: TaskRequest = {\n task,\n input\n }\n\n const result = await executeTask(request, {\n githubClient,\n githubToken\n })\n\n process.stdout.write(`${JSON.stringify(result)}\\n`)\n return 0\n}\n"],"mappings":";;;;;;;;AAIA,IAAM,0BAA0B;AAEhC,SAAS,aAAa,MAAkE;AACtF,QAAM,CAAC,MAAM,GAAG,IAAI,IAAI;AACxB,MAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,WAAW,GAAG;AACrC,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,QAAM,aAAa,KAAK,UAAU,CAAC,QAAQ,QAAQ,SAAS;AAC5D,QAAM,cAAc,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,UAAU,CAAC;AACjE,QAAM,WACJ,cAAc,IACV,KAAK,aAAa,CAAC,IACnB,cACE,YAAY,MAAM,WAAW,MAAM,IACnC;AAER,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AAEA,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,QAAQ;AAAA,EAC9B,QAAQ;AACN,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AAEA,MAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,MAAM,QAAQ,MAAM,GAAG;AAC1E,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AAEA,SAAO,EAAE,MAAM,OAAO,OAAkC;AAC1D;AAEA,SAAS,qBAA6B;AACpC,QAAM,QAAQ,QAAQ,IAAI,gBAAgB,QAAQ,IAAI;AACtD,MAAI,CAAC,SAAS,MAAM,KAAK,EAAE,WAAW,GAAG;AACvC,UAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AAEA,SAAO;AACT;AAEA,eAAe,sBACb,OACA,OACA,WACgB;AAChB,QAAM,WAAW,MAAM,MAAM,yBAAyB;AAAA,IACpD,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,eAAe,UAAU,KAAK;AAAA,MAC9B,cAAc;AAAA,IAChB;AAAA,IACA,MAAM,KAAK,UAAU,EAAE,OAAO,WAAW,aAAa,CAAC,EAAE,CAAC;AAAA,EAC5D,CAAC;AAED,QAAM,UAAW,MAAM,SAAS,KAAK;AAMrC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,UAAU,QAAQ,WAAW,6CAA6C,SAAS,MAAM;AAC/F,UAAM,IAAI,MAAM,OAAO;AAAA,EACzB;AAEA,MAAI,MAAM,QAAQ,QAAQ,MAAM,KAAK,QAAQ,OAAO,SAAS,GAAG;AAC9D,UAAM,UAAU,QAAQ,OAAO,CAAC,GAAG,WAAW;AAC9C,UAAM,IAAI,MAAM,OAAO;AAAA,EACzB;AAEA,MAAI,QAAQ,SAAS,QAAW;AAC9B,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AAEA,SAAO,QAAQ;AACjB;AAEA,eAAsB,WAAW,OAAiB,CAAC,GAAoB;AACrE,MAAI,KAAK,WAAW,GAAG;AACrB,YAAQ,OAAO,MAAM,0CAA0C;AAC/D,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,MAAM,MAAM,IAAI,aAAa,IAAI;AACzC,QAAM,cAAc,mBAAmB;AAEvC,QAAM,eAAe,mBAAmB;AAAA,IACtC,MAAM,QAAe,OAAe,WAAqD;AACvF,aAAO,sBAA6B,aAAa,OAAO,SAAS;AAAA,IACnE;AAAA,EACF,CAAC;AAED,QAAM,UAAuB;AAAA,IAC3B;AAAA,IACA;AAAA,EACF;AAEA,QAAM,SAAS,MAAM,YAAY,SAAS;AAAA,IACxC;AAAA,IACA;AAAA,EACF,CAAC;AAED,UAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,MAAM,CAAC;AAAA,CAAI;AAClD,SAAO;AACT;","names":[]}
@@ -0,0 +1,44 @@
1
+ import {
2
+ getOperationCard
3
+ } from "./chunk-MT4U5DYD.js";
4
+
5
+ // src/agent-interface/tools/explain-tool.ts
6
+ function extractRequiredInputs(inputSchema) {
7
+ if (!inputSchema || typeof inputSchema !== "object") {
8
+ return [];
9
+ }
10
+ const required = inputSchema.required;
11
+ if (!Array.isArray(required)) {
12
+ return [];
13
+ }
14
+ return required.filter((entry) => typeof entry === "string");
15
+ }
16
+ function extractOutputFields(outputSchema) {
17
+ if (!outputSchema || typeof outputSchema !== "object") {
18
+ return [];
19
+ }
20
+ const properties = outputSchema.properties;
21
+ if (!properties || typeof properties !== "object") {
22
+ return [];
23
+ }
24
+ return Object.keys(properties);
25
+ }
26
+ function explainCapability(capabilityId) {
27
+ const card = getOperationCard(capabilityId);
28
+ if (!card) {
29
+ throw new Error(`Unknown capability: ${capabilityId}`);
30
+ }
31
+ return {
32
+ capability_id: card.capability_id,
33
+ purpose: card.description,
34
+ required_inputs: extractRequiredInputs(card.input_schema),
35
+ preferred_route: card.routing.preferred,
36
+ fallback_routes: [...card.routing.fallbacks],
37
+ output_fields: extractOutputFields(card.output_schema)
38
+ };
39
+ }
40
+
41
+ export {
42
+ explainCapability
43
+ };
44
+ //# sourceMappingURL=chunk-MMG6CIKK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agent-interface/tools/explain-tool.ts"],"sourcesContent":["import { getOperationCard } from \"../../core/registry/index.js\"\n\nexport type CapabilityExplanation = {\n capability_id: string\n purpose: string\n required_inputs: string[]\n preferred_route: \"cli\" | \"graphql\" | \"rest\"\n fallback_routes: Array<\"cli\" | \"graphql\" | \"rest\">\n output_fields: string[]\n}\n\nfunction extractRequiredInputs(inputSchema: Record<string, unknown> | null | undefined): string[] {\n if (!inputSchema || typeof inputSchema !== \"object\") {\n return []\n }\n\n const required = (inputSchema as Record<string, unknown>).required\n if (!Array.isArray(required)) {\n return []\n }\n\n return required.filter((entry): entry is string => typeof entry === \"string\")\n}\n\nfunction extractOutputFields(outputSchema: Record<string, unknown> | null | undefined): string[] {\n if (!outputSchema || typeof outputSchema !== \"object\") {\n return []\n }\n\n const properties = (outputSchema as Record<string, unknown>).properties\n if (!properties || typeof properties !== \"object\") {\n return []\n }\n\n return Object.keys(properties)\n}\n\nexport function explainCapability(capabilityId: string): CapabilityExplanation {\n const card = getOperationCard(capabilityId)\n if (!card) {\n throw new Error(`Unknown capability: ${capabilityId}`)\n }\n\n return {\n capability_id: card.capability_id,\n purpose: card.description,\n required_inputs: extractRequiredInputs(card.input_schema),\n preferred_route: card.routing.preferred,\n fallback_routes: [...card.routing.fallbacks],\n output_fields: extractOutputFields(card.output_schema)\n }\n}\n"],"mappings":";;;;;AAWA,SAAS,sBAAsB,aAAmE;AAChG,MAAI,CAAC,eAAe,OAAO,gBAAgB,UAAU;AACnD,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,WAAY,YAAwC;AAC1D,MAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC5B,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,SAAS,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ;AAC9E;AAEA,SAAS,oBAAoB,cAAoE;AAC/F,MAAI,CAAC,gBAAgB,OAAO,iBAAiB,UAAU;AACrD,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,aAAc,aAAyC;AAC7D,MAAI,CAAC,cAAc,OAAO,eAAe,UAAU;AACjD,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,OAAO,KAAK,UAAU;AAC/B;AAEO,SAAS,kBAAkB,cAA6C;AAC7E,QAAM,OAAO,iBAAiB,YAAY;AAC1C,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,uBAAuB,YAAY,EAAE;AAAA,EACvD;AAEA,SAAO;AAAA,IACL,eAAe,KAAK;AAAA,IACpB,SAAS,KAAK;AAAA,IACd,iBAAiB,sBAAsB,KAAK,YAAY;AAAA,IACxD,iBAAiB,KAAK,QAAQ;AAAA,IAC9B,iBAAiB,CAAC,GAAG,KAAK,QAAQ,SAAS;AAAA,IAC3C,eAAe,oBAAoB,KAAK,aAAa;AAAA,EACvD;AACF;","names":[]}