@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Arye Kogan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,212 @@
1
+ # @ghx-dev/core
2
+
3
+ [![npm version](https://img.shields.io/npm/v/%40ghx-dev%2Fcore)](https://www.npmjs.com/package/@ghx-dev/core)
4
+ [![npm downloads](https://img.shields.io/npm/dm/%40ghx-dev%2Fcore)](https://www.npmjs.com/package/@ghx-dev/core)
5
+ [![License](https://img.shields.io/npm/l/%40ghx-dev%2Fcore)](https://github.com/aryeko/ghx/blob/main/LICENSE)
6
+
7
+ CLI-first GitHub execution router for agents.
8
+
9
+ `@ghx-dev/core` exposes a typed execution engine that routes GitHub tasks across CLI and GraphQL, validates inputs/outputs against operation-card schemas, and returns a stable result envelope for deterministic agent workflows.
10
+
11
+ ## Why @ghx-dev/core
12
+
13
+ - **Stable contract**: every task returns `{ ok, data, error, meta }`
14
+ - **Route-aware execution**: preferred route + fallback routes per capability
15
+ - **Schema validation**: runtime validation for task input/output
16
+ - **Typed clients**: typed GraphQL/GitHub client helpers
17
+ - **Agent-ready tools**: subpath exports for capability listing/explanation/execution wrappers
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ pnpm add @ghx-dev/core
23
+ ```
24
+
25
+ Alternative package managers:
26
+
27
+ ```bash
28
+ npm i @ghx-dev/core
29
+ # or
30
+ yarn add @ghx-dev/core
31
+ ```
32
+
33
+ ## Quick Start (Library API)
34
+
35
+ ```ts
36
+ import { createGithubClient, executeTask } from "@ghx-dev/core"
37
+
38
+ const githubToken = process.env.GITHUB_TOKEN
39
+
40
+ if (!githubToken) {
41
+ throw new Error("Missing GITHUB_TOKEN")
42
+ }
43
+
44
+ const githubClient = createGithubClient({
45
+ async execute<TData>(query: string, variables?: Record<string, unknown>): Promise<TData> {
46
+ const response = await fetch("https://api.github.com/graphql", {
47
+ method: "POST",
48
+ headers: {
49
+ "content-type": "application/json",
50
+ authorization: `Bearer ${githubToken}`,
51
+ },
52
+ body: JSON.stringify({ query, variables: variables ?? {} }),
53
+ })
54
+
55
+ const payload = (await response.json()) as {
56
+ data?: TData
57
+ errors?: Array<{ message?: string }>
58
+ message?: string
59
+ }
60
+
61
+ if (!response.ok) {
62
+ throw new Error(payload.message ?? `GraphQL request failed (${response.status})`)
63
+ }
64
+
65
+ if (payload.errors?.length) {
66
+ throw new Error(payload.errors[0]?.message ?? "GraphQL returned errors")
67
+ }
68
+
69
+ if (payload.data === undefined) {
70
+ throw new Error("GraphQL response missing data")
71
+ }
72
+
73
+ return payload.data
74
+ },
75
+ })
76
+
77
+ const result = await executeTask(
78
+ {
79
+ task: "repo.view",
80
+ input: {
81
+ owner: "aryeko",
82
+ name: "ghx",
83
+ },
84
+ },
85
+ {
86
+ githubClient,
87
+ githubToken,
88
+ },
89
+ )
90
+
91
+ if (!result.ok) {
92
+ throw new Error(`${result.error?.code}: ${result.error?.message}`)
93
+ }
94
+
95
+ console.log(result.data)
96
+ ```
97
+
98
+ ## Agent Tools (`@ghx-dev/core/agent`)
99
+
100
+ ```ts
101
+ import {
102
+ createExecuteTool,
103
+ explainCapability,
104
+ listCapabilities,
105
+ MAIN_SKILL_TEXT,
106
+ } from "@ghx-dev/core/agent"
107
+
108
+ const executeTool = createExecuteTool({
109
+ executeTask: async (request) => {
110
+ // delegate to your runtime integration
111
+ return { ok: true, data: request, meta: { capability_id: request.task } }
112
+ },
113
+ })
114
+
115
+ console.log(MAIN_SKILL_TEXT)
116
+ console.log(listCapabilities())
117
+ console.log(explainCapability("repo.view"))
118
+ await executeTool.execute("repo.view", { owner: "aryeko", name: "ghx" })
119
+ ```
120
+
121
+ ## CLI
122
+
123
+ When installed globally (or executed via package manager), use:
124
+
125
+ ```bash
126
+ ghx run repo.view --input '{"owner":"aryeko","name":"ghx"}'
127
+ ```
128
+
129
+ Environment variables used by the CLI path:
130
+
131
+ - `GITHUB_TOKEN` or `GH_TOKEN` (required)
132
+ - `GITHUB_GRAPHQL_URL` (optional override)
133
+ - `GH_HOST` (optional; used to derive enterprise GraphQL endpoint)
134
+
135
+ ## Built-in Capabilities
136
+
137
+ - `repo.view` - fetch repository metadata
138
+ - `issue.view` - fetch a single issue
139
+ - `issue.list` - list repository issues
140
+ - `issue.comments.list` - list issue comments with pagination
141
+ - `pr.view` - fetch a single pull request
142
+ - `pr.list` - list pull requests
143
+ - `pr.comments.list` - list pull request review threads/comments
144
+ - `pr.reviews.list` - list pull request reviews
145
+ - `pr.diff.list_files` - list changed files in a pull request
146
+ - `pr.status.checks` - list pull request checks and summary counts
147
+ - `pr.checks.get_failed` - list failed pull request checks
148
+ - `pr.mergeability.view` - fetch mergeability and review decision signals
149
+ - `pr.comment.reply` - reply to a pull request review thread
150
+ - `pr.comment.resolve` - resolve a pull request review thread
151
+ - `pr.comment.unresolve` - unresolve a pull request review thread
152
+ - `pr.ready_for_review.set` - mark draft/ready-for-review state
153
+ - `check_run.annotations.list` - list check run annotations
154
+ - `workflow_runs.list` - list workflow runs for a repository
155
+ - `workflow_run.jobs.list` - list jobs for a workflow run
156
+ - `workflow_job.logs.get` - fetch workflow job logs
157
+ - `workflow_job.logs.analyze` - analyze workflow job logs for error/warning summaries
158
+
159
+ ## Public Exports
160
+
161
+ Root (`@ghx-dev/core`):
162
+
163
+ - `executeTask`
164
+ - `createGithubClient`, `createGraphqlClient`
165
+ - `listOperationCards`, `getOperationCard`
166
+ - `createSafeCliCommandRunner`
167
+ - core result/task types (`TaskRequest`, `ResultEnvelope`, `ResultError`, `ResultMeta`, `AttemptMeta`, `RouteSource`, `RouteReasonCode`)
168
+
169
+ Subpaths:
170
+
171
+ - `@ghx-dev/core/agent` - agent tooling exports
172
+ - `@ghx-dev/core/cli` - CLI entrypoint
173
+
174
+ ## Result Envelope
175
+
176
+ All execution paths resolve to:
177
+
178
+ ```ts
179
+ type ResultEnvelope<TData = unknown> = {
180
+ ok: boolean
181
+ data?: TData
182
+ error?: {
183
+ code: string
184
+ message: string
185
+ retryable: boolean
186
+ details?: Record<string, unknown>
187
+ }
188
+ meta: {
189
+ capability_id: string
190
+ route_used?: "cli" | "graphql" | "rest"
191
+ reason?: string
192
+ attempts?: Array<{
193
+ route: "cli" | "graphql" | "rest"
194
+ status: "success" | "error" | "skipped"
195
+ error_code?: string
196
+ duration_ms?: number
197
+ }>
198
+ }
199
+ }
200
+ ```
201
+
202
+ ## Documentation
203
+
204
+ - Architecture overview: https://github.com/aryeko/ghx/blob/main/docs/CODEMAPS/ARCHITECTURE.md
205
+ - Module map: https://github.com/aryeko/ghx/blob/main/docs/CODEMAPS/MODULES.md
206
+ - File map: https://github.com/aryeko/ghx/blob/main/docs/CODEMAPS/FILES.md
207
+ - Adding capabilities: https://github.com/aryeko/ghx/blob/main/docs/guides/adding-a-capability.md
208
+ - Publishing guide: https://github.com/aryeko/ghx/blob/main/docs/guides/publishing.md
209
+
210
+ ## License
211
+
212
+ MIT - https://github.com/aryeko/ghx/blob/main/LICENSE
@@ -0,0 +1,3 @@
1
+ declare const MAIN_SKILL_TEXT: string;
2
+
3
+ export { MAIN_SKILL_TEXT };
@@ -0,0 +1,7 @@
1
+ import {
2
+ MAIN_SKILL_TEXT
3
+ } from "../../chunk-FXN6IIT5.js";
4
+ export {
5
+ MAIN_SKILL_TEXT
6
+ };
7
+ //# sourceMappingURL=main-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,16 @@
1
+ import { ResultEnvelope } from '../../core/contracts/envelope.js';
2
+ import '../../core/routing/reason-codes.js';
3
+ import '../../core/errors/codes.js';
4
+
5
+ type ExecuteTaskFn = (request: {
6
+ task: string;
7
+ input: Record<string, unknown>;
8
+ options?: Record<string, unknown>;
9
+ }) => Promise<ResultEnvelope>;
10
+ declare function createExecuteTool(deps: {
11
+ executeTask: ExecuteTaskFn;
12
+ }): {
13
+ execute(capabilityId: string, params: Record<string, unknown>, options?: Record<string, unknown>): Promise<ResultEnvelope>;
14
+ };
15
+
16
+ export { createExecuteTool };
@@ -0,0 +1,7 @@
1
+ import {
2
+ createExecuteTool
3
+ } from "../../chunk-DJIEG6K7.js";
4
+ export {
5
+ createExecuteTool
6
+ };
7
+ //# sourceMappingURL=execute-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,11 @@
1
+ type CapabilityExplanation = {
2
+ capability_id: string;
3
+ purpose: string;
4
+ required_inputs: string[];
5
+ preferred_route: "cli" | "graphql" | "rest";
6
+ fallback_routes: Array<"cli" | "graphql" | "rest">;
7
+ output_fields: string[];
8
+ };
9
+ declare function explainCapability(capabilityId: string): CapabilityExplanation;
10
+
11
+ export { type CapabilityExplanation, explainCapability };
@@ -0,0 +1,9 @@
1
+ import {
2
+ explainCapability
3
+ } from "../../chunk-MMG6CIKK.js";
4
+ import "../../chunk-MT4U5DYD.js";
5
+ import "../../chunk-2W4L5YCC.js";
6
+ export {
7
+ explainCapability
8
+ };
9
+ //# sourceMappingURL=explain-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,7 @@
1
+ type CapabilityListItem = {
2
+ capability_id: string;
3
+ description: string;
4
+ };
5
+ declare function listCapabilities(): CapabilityListItem[];
6
+
7
+ export { type CapabilityListItem, listCapabilities };
@@ -0,0 +1,9 @@
1
+ import {
2
+ listCapabilities
3
+ } from "../../chunk-3RJCF42N.js";
4
+ import "../../chunk-MT4U5DYD.js";
5
+ import "../../chunk-2W4L5YCC.js";
6
+ export {
7
+ listCapabilities
8
+ };
9
+ //# sourceMappingURL=list-capabilities-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,7 @@
1
+ export { MAIN_SKILL_TEXT } from './agent-interface/prompt/main-skill.js';
2
+ export { explainCapability } from './agent-interface/tools/explain-tool.js';
3
+ export { createExecuteTool } from './agent-interface/tools/execute-tool.js';
4
+ export { listCapabilities } from './agent-interface/tools/list-capabilities-tool.js';
5
+ import './core/contracts/envelope.js';
6
+ import './core/routing/reason-codes.js';
7
+ import './core/errors/codes.js';
package/dist/agent.js ADDED
@@ -0,0 +1,21 @@
1
+ import {
2
+ createExecuteTool
3
+ } from "./chunk-DJIEG6K7.js";
4
+ import {
5
+ explainCapability
6
+ } from "./chunk-MMG6CIKK.js";
7
+ import {
8
+ listCapabilities
9
+ } from "./chunk-3RJCF42N.js";
10
+ import "./chunk-MT4U5DYD.js";
11
+ import "./chunk-2W4L5YCC.js";
12
+ import {
13
+ MAIN_SKILL_TEXT
14
+ } from "./chunk-FXN6IIT5.js";
15
+ export {
16
+ MAIN_SKILL_TEXT,
17
+ createExecuteTool,
18
+ explainCapability,
19
+ listCapabilities
20
+ };
21
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,116 @@
1
+ // src/core/registry/operation-card-schema.ts
2
+ var operationCardSchema = {
3
+ $id: "https://ghx.local/schemas/operation-card.json",
4
+ type: "object",
5
+ required: ["capability_id", "version", "description", "input_schema", "output_schema", "routing"],
6
+ properties: {
7
+ capability_id: { type: "string", minLength: 1 },
8
+ version: { type: "string", minLength: 1 },
9
+ description: { type: "string", minLength: 1 },
10
+ input_schema: { type: "object" },
11
+ output_schema: { type: "object" },
12
+ routing: {
13
+ type: "object",
14
+ required: ["preferred", "fallbacks"],
15
+ properties: {
16
+ preferred: { enum: ["cli", "graphql", "rest"] },
17
+ fallbacks: {
18
+ type: "array",
19
+ items: { enum: ["cli", "graphql", "rest"] }
20
+ },
21
+ suitability: {
22
+ type: "array",
23
+ items: {
24
+ type: "object",
25
+ required: ["when", "predicate", "reason"],
26
+ properties: {
27
+ when: { enum: ["always", "env", "params"] },
28
+ predicate: { type: "string", minLength: 1 },
29
+ reason: { type: "string", minLength: 1 }
30
+ },
31
+ additionalProperties: false
32
+ }
33
+ },
34
+ notes: {
35
+ type: "array",
36
+ items: { type: "string" }
37
+ }
38
+ },
39
+ additionalProperties: false
40
+ },
41
+ graphql: {
42
+ type: "object",
43
+ required: ["operationName", "documentPath"],
44
+ properties: {
45
+ operationName: { type: "string", minLength: 1 },
46
+ documentPath: { type: "string", minLength: 1 },
47
+ variables: { type: "object" },
48
+ limits: {
49
+ type: "object",
50
+ properties: {
51
+ maxPageSize: { type: "number" }
52
+ },
53
+ additionalProperties: false
54
+ }
55
+ },
56
+ additionalProperties: false
57
+ },
58
+ cli: {
59
+ type: "object",
60
+ required: ["command"],
61
+ properties: {
62
+ command: { type: "string", minLength: 1 },
63
+ jsonFields: {
64
+ type: "array",
65
+ items: { type: "string", minLength: 1 }
66
+ },
67
+ jq: { type: "string" },
68
+ limits: {
69
+ type: "object",
70
+ properties: {
71
+ maxItemsPerCall: { type: "number" }
72
+ },
73
+ additionalProperties: false
74
+ }
75
+ },
76
+ additionalProperties: false
77
+ },
78
+ rest: {
79
+ type: "object",
80
+ required: ["endpoints"],
81
+ properties: {
82
+ endpoints: {
83
+ type: "array",
84
+ items: {
85
+ type: "object",
86
+ required: ["method", "path"],
87
+ properties: {
88
+ method: { type: "string" },
89
+ path: { type: "string" }
90
+ },
91
+ additionalProperties: false
92
+ }
93
+ }
94
+ },
95
+ additionalProperties: false
96
+ },
97
+ examples: {
98
+ type: "array",
99
+ items: {
100
+ type: "object",
101
+ required: ["title", "input"],
102
+ properties: {
103
+ title: { type: "string" },
104
+ input: { type: "object" }
105
+ },
106
+ additionalProperties: false
107
+ }
108
+ }
109
+ },
110
+ additionalProperties: false
111
+ };
112
+
113
+ export {
114
+ operationCardSchema
115
+ };
116
+ //# sourceMappingURL=chunk-2W4L5YCC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/registry/operation-card-schema.ts"],"sourcesContent":["export const operationCardSchema = {\n $id: \"https://ghx.local/schemas/operation-card.json\",\n type: \"object\",\n required: [\"capability_id\", \"version\", \"description\", \"input_schema\", \"output_schema\", \"routing\"],\n properties: {\n capability_id: { type: \"string\", minLength: 1 },\n version: { type: \"string\", minLength: 1 },\n description: { type: \"string\", minLength: 1 },\n input_schema: { type: \"object\" },\n output_schema: { type: \"object\" },\n routing: {\n type: \"object\",\n required: [\"preferred\", \"fallbacks\"],\n properties: {\n preferred: { enum: [\"cli\", \"graphql\", \"rest\"] },\n fallbacks: {\n type: \"array\",\n items: { enum: [\"cli\", \"graphql\", \"rest\"] }\n },\n suitability: {\n type: \"array\",\n items: {\n type: \"object\",\n required: [\"when\", \"predicate\", \"reason\"],\n properties: {\n when: { enum: [\"always\", \"env\", \"params\"] },\n predicate: { type: \"string\", minLength: 1 },\n reason: { type: \"string\", minLength: 1 }\n },\n additionalProperties: false\n }\n },\n notes: {\n type: \"array\",\n items: { type: \"string\" }\n }\n },\n additionalProperties: false\n },\n graphql: {\n type: \"object\",\n required: [\"operationName\", \"documentPath\"],\n properties: {\n operationName: { type: \"string\", minLength: 1 },\n documentPath: { type: \"string\", minLength: 1 },\n variables: { type: \"object\" },\n limits: {\n type: \"object\",\n properties: {\n maxPageSize: { type: \"number\" }\n },\n additionalProperties: false\n }\n },\n additionalProperties: false\n },\n cli: {\n type: \"object\",\n required: [\"command\"],\n properties: {\n command: { type: \"string\", minLength: 1 },\n jsonFields: {\n type: \"array\",\n items: { type: \"string\", minLength: 1 }\n },\n jq: { type: \"string\" },\n limits: {\n type: \"object\",\n properties: {\n maxItemsPerCall: { type: \"number\" }\n },\n additionalProperties: false\n }\n },\n additionalProperties: false\n },\n rest: {\n type: \"object\",\n required: [\"endpoints\"],\n properties: {\n endpoints: {\n type: \"array\",\n items: {\n type: \"object\",\n required: [\"method\", \"path\"],\n properties: {\n method: { type: \"string\" },\n path: { type: \"string\" }\n },\n additionalProperties: false\n }\n }\n },\n additionalProperties: false\n },\n examples: {\n type: \"array\",\n items: {\n type: \"object\",\n required: [\"title\", \"input\"],\n properties: {\n title: { type: \"string\" },\n input: { type: \"object\" }\n },\n additionalProperties: false\n }\n }\n },\n additionalProperties: false\n} as const\n"],"mappings":"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","names":[]}