@ghx-dev/core 0.1.1 → 0.2.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 (187) hide show
  1. package/.claude-plugin/plugin.json +21 -0
  2. package/README.md +17 -20
  3. package/dist/cards/issue.assignees.add.yaml +50 -0
  4. package/dist/cards/issue.assignees.remove.yaml +50 -0
  5. package/dist/cards/issue.assignees.set.yaml +47 -0
  6. package/dist/cards/issue.close.yaml +16 -2
  7. package/dist/cards/issue.comments.create.yaml +16 -2
  8. package/dist/cards/issue.create.yaml +11 -0
  9. package/dist/cards/issue.delete.yaml +16 -2
  10. package/dist/cards/issue.labels.add.yaml +48 -0
  11. package/dist/cards/issue.labels.remove.yaml +50 -0
  12. package/dist/cards/issue.labels.set.yaml +47 -0
  13. package/dist/cards/issue.milestone.clear.yaml +40 -0
  14. package/dist/cards/issue.milestone.set.yaml +23 -4
  15. package/dist/{core/registry/cards/issue.blocked_by.add.yaml → cards/issue.relations.blocked_by.add.yaml} +3 -2
  16. package/dist/cards/{issue.blocked_by.remove.yaml → issue.relations.blocked_by.remove.yaml} +1 -1
  17. package/dist/cards/{issue.parent.remove.yaml → issue.relations.parent.remove.yaml} +11 -1
  18. package/dist/{core/registry/cards/issue.parent.set.yaml → cards/issue.relations.parent.set.yaml} +3 -2
  19. package/dist/{core/registry/cards/issue.linked_prs.list.yaml → cards/issue.relations.prs.list.yaml} +1 -1
  20. package/dist/cards/{issue.relations.get.yaml → issue.relations.view.yaml} +1 -1
  21. package/dist/cards/issue.reopen.yaml +16 -2
  22. package/dist/cards/issue.update.yaml +16 -2
  23. package/dist/cards/issue.view.yaml +7 -5
  24. package/dist/cards/{pr.review.submit_approve.yaml → pr.assignees.add.yaml} +12 -9
  25. package/dist/cards/pr.assignees.remove.yaml +29 -0
  26. package/dist/{core/registry/cards/pr.status.checks.yaml → cards/pr.checks.list.yaml} +15 -2
  27. package/dist/{core/registry/cards/pr.checks.rerun_all.yaml → cards/pr.checks.rerun.all.yaml} +2 -4
  28. package/dist/{core/registry/cards/pr.checks.rerun_failed.yaml → cards/pr.checks.rerun.failed.yaml} +3 -5
  29. package/dist/cards/pr.create.yaml +30 -0
  30. package/dist/cards/{pr.diff.list_files.yaml → pr.diff.files.yaml} +1 -1
  31. package/dist/cards/{pr.ready_for_review.set.yaml → pr.diff.view.yaml} +6 -8
  32. package/dist/{core/registry/cards/pr.mergeability.view.yaml → cards/pr.merge.status.yaml} +6 -3
  33. package/dist/{core/registry/cards/pr.merge.execute.yaml → cards/pr.merge.yaml} +1 -1
  34. package/dist/cards/pr.reviews.list.yaml +1 -1
  35. package/dist/cards/{pr.reviewers.request.yaml → pr.reviews.request.yaml} +1 -1
  36. package/dist/cards/pr.reviews.submit.yaml +67 -0
  37. package/dist/cards/{pr.comments.list.yaml → pr.threads.list.yaml} +2 -2
  38. package/dist/cards/{pr.comment.reply.yaml → pr.threads.reply.yaml} +4 -2
  39. package/dist/cards/{pr.comment.resolve.yaml → pr.threads.resolve.yaml} +1 -1
  40. package/dist/cards/{pr.comment.unresolve.yaml → pr.threads.unresolve.yaml} +1 -1
  41. package/dist/cards/pr.update.yaml +29 -0
  42. package/dist/cards/pr.view.yaml +7 -5
  43. package/dist/cards/project_v2.fields.list.yaml +2 -2
  44. package/dist/{core/registry/cards/project_v2.item.field.update.yaml → cards/project_v2.items.field.update.yaml} +3 -3
  45. package/dist/{core/registry/cards/project_v2.item.add_issue.yaml → cards/project_v2.items.issue.add.yaml} +3 -3
  46. package/dist/cards/project_v2.items.issue.remove.yaml +23 -0
  47. package/dist/cards/project_v2.items.list.yaml +2 -2
  48. package/dist/{core/registry/cards/project_v2.org.get.yaml → cards/project_v2.org.view.yaml} +3 -3
  49. package/dist/cards/{project_v2.user.get.yaml → project_v2.user.view.yaml} +3 -3
  50. package/dist/{core/registry/cards/release.create_draft.yaml → cards/release.create.yaml} +1 -1
  51. package/dist/cards/{release.publish_draft.yaml → release.publish.yaml} +1 -1
  52. package/dist/{core/registry/cards/release.get.yaml → cards/release.view.yaml} +1 -1
  53. package/dist/cards/repo.issue_types.list.yaml +2 -2
  54. package/dist/cards/repo.view.yaml +2 -4
  55. package/dist/cards/{workflow_dispatch.run.yaml → workflow.dispatch.yaml} +1 -1
  56. package/dist/{core/registry/cards/workflow_job.logs.get.yaml → cards/workflow.job.logs.raw.yaml} +2 -2
  57. package/dist/{core/registry/cards/workflow_job.logs.analyze.yaml → cards/workflow.job.logs.view.yaml} +1 -1
  58. package/dist/{core/registry/cards/workflow_run.artifacts.list.yaml → cards/workflow.run.artifacts.list.yaml} +1 -1
  59. package/dist/cards/{workflow_run.cancel.yaml → workflow.run.cancel.yaml} +1 -1
  60. package/dist/cards/{workflow_run.rerun_all.yaml → workflow.run.rerun.all.yaml} +3 -3
  61. package/dist/{core/registry/cards/workflow_run.rerun_failed.yaml → cards/workflow.run.rerun.failed.yaml} +3 -3
  62. package/dist/{core/registry/cards/workflow_run.get.yaml → cards/workflow.run.view.yaml} +19 -4
  63. package/dist/cards/{workflow_runs.list.yaml → workflow.runs.list.yaml} +1 -1
  64. package/dist/cards/{workflow.get.yaml → workflow.view.yaml} +2 -2
  65. package/dist/chunk-3DU2WHXF.js +15 -0
  66. package/dist/chunk-3DU2WHXF.js.map +1 -0
  67. package/dist/chunk-3P3KHWFU.js +5779 -0
  68. package/dist/chunk-3P3KHWFU.js.map +1 -0
  69. package/dist/chunk-BIWBJA2F.js +228 -0
  70. package/dist/chunk-BIWBJA2F.js.map +1 -0
  71. package/dist/chunk-HEHONZTO.js +121 -0
  72. package/dist/chunk-HEHONZTO.js.map +1 -0
  73. package/dist/chunk-Q7RCIK2C.js +773 -0
  74. package/dist/chunk-Q7RCIK2C.js.map +1 -0
  75. package/dist/chunk-R3CBGJZX.js +12 -0
  76. package/dist/chunk-R3CBGJZX.js.map +1 -0
  77. package/dist/chunk-TDABI6C7.js +167 -0
  78. package/dist/chunk-TDABI6C7.js.map +1 -0
  79. package/dist/chunk-TPQYVCAS.js +15 -0
  80. package/dist/chunk-TPQYVCAS.js.map +1 -0
  81. package/dist/cli/index.js +202 -21
  82. package/dist/cli/index.js.map +1 -1
  83. package/dist/core/registry/cards/issue.assignees.add.yaml +50 -0
  84. package/dist/core/registry/cards/issue.assignees.remove.yaml +50 -0
  85. package/dist/core/registry/cards/issue.assignees.set.yaml +47 -0
  86. package/dist/core/registry/cards/issue.close.yaml +16 -2
  87. package/dist/core/registry/cards/issue.comments.create.yaml +16 -2
  88. package/dist/core/registry/cards/issue.create.yaml +11 -0
  89. package/dist/core/registry/cards/issue.delete.yaml +16 -2
  90. package/dist/core/registry/cards/issue.labels.add.yaml +48 -0
  91. package/dist/core/registry/cards/issue.labels.remove.yaml +50 -0
  92. package/dist/core/registry/cards/issue.labels.set.yaml +47 -0
  93. package/dist/core/registry/cards/issue.milestone.clear.yaml +40 -0
  94. package/dist/core/registry/cards/issue.milestone.set.yaml +23 -4
  95. package/dist/{cards/issue.blocked_by.add.yaml → core/registry/cards/issue.relations.blocked_by.add.yaml} +3 -2
  96. package/dist/core/registry/cards/{issue.blocked_by.remove.yaml → issue.relations.blocked_by.remove.yaml} +1 -1
  97. package/dist/core/registry/cards/{issue.parent.remove.yaml → issue.relations.parent.remove.yaml} +11 -1
  98. package/dist/{cards/issue.parent.set.yaml → core/registry/cards/issue.relations.parent.set.yaml} +3 -2
  99. package/dist/{cards/issue.linked_prs.list.yaml → core/registry/cards/issue.relations.prs.list.yaml} +1 -1
  100. package/dist/core/registry/cards/{issue.relations.get.yaml → issue.relations.view.yaml} +1 -1
  101. package/dist/core/registry/cards/issue.reopen.yaml +16 -2
  102. package/dist/core/registry/cards/issue.update.yaml +16 -2
  103. package/dist/core/registry/cards/issue.view.yaml +7 -5
  104. package/dist/core/registry/cards/pr.assignees.add.yaml +29 -0
  105. package/dist/core/registry/cards/pr.assignees.remove.yaml +29 -0
  106. package/dist/{cards/pr.status.checks.yaml → core/registry/cards/pr.checks.list.yaml} +15 -2
  107. package/dist/{cards/pr.checks.rerun_all.yaml → core/registry/cards/pr.checks.rerun.all.yaml} +2 -4
  108. package/dist/{cards/pr.checks.rerun_failed.yaml → core/registry/cards/pr.checks.rerun.failed.yaml} +3 -5
  109. package/dist/core/registry/cards/pr.create.yaml +30 -0
  110. package/dist/core/registry/cards/{pr.diff.list_files.yaml → pr.diff.files.yaml} +1 -1
  111. package/dist/core/registry/cards/{pr.ready_for_review.set.yaml → pr.diff.view.yaml} +6 -8
  112. package/dist/{cards/pr.mergeability.view.yaml → core/registry/cards/pr.merge.status.yaml} +6 -3
  113. package/dist/{cards/pr.merge.execute.yaml → core/registry/cards/pr.merge.yaml} +1 -1
  114. package/dist/core/registry/cards/pr.reviews.list.yaml +1 -1
  115. package/dist/core/registry/cards/{pr.reviewers.request.yaml → pr.reviews.request.yaml} +1 -1
  116. package/dist/core/registry/cards/pr.reviews.submit.yaml +67 -0
  117. package/dist/core/registry/cards/{pr.comments.list.yaml → pr.threads.list.yaml} +2 -2
  118. package/dist/core/registry/cards/{pr.comment.reply.yaml → pr.threads.reply.yaml} +4 -2
  119. package/dist/core/registry/cards/{pr.comment.resolve.yaml → pr.threads.resolve.yaml} +1 -1
  120. package/dist/core/registry/cards/{pr.comment.unresolve.yaml → pr.threads.unresolve.yaml} +1 -1
  121. package/dist/core/registry/cards/pr.update.yaml +29 -0
  122. package/dist/core/registry/cards/pr.view.yaml +7 -5
  123. package/dist/core/registry/cards/project_v2.fields.list.yaml +2 -2
  124. package/dist/{cards/project_v2.item.field.update.yaml → core/registry/cards/project_v2.items.field.update.yaml} +3 -3
  125. package/dist/{cards/project_v2.item.add_issue.yaml → core/registry/cards/project_v2.items.issue.add.yaml} +3 -3
  126. package/dist/core/registry/cards/project_v2.items.issue.remove.yaml +23 -0
  127. package/dist/core/registry/cards/project_v2.items.list.yaml +2 -2
  128. package/dist/{cards/project_v2.org.get.yaml → core/registry/cards/project_v2.org.view.yaml} +3 -3
  129. package/dist/core/registry/cards/{project_v2.user.get.yaml → project_v2.user.view.yaml} +3 -3
  130. package/dist/{cards/release.create_draft.yaml → core/registry/cards/release.create.yaml} +1 -1
  131. package/dist/core/registry/cards/{release.publish_draft.yaml → release.publish.yaml} +1 -1
  132. package/dist/{cards/release.get.yaml → core/registry/cards/release.view.yaml} +1 -1
  133. package/dist/core/registry/cards/repo.issue_types.list.yaml +2 -2
  134. package/dist/core/registry/cards/repo.view.yaml +2 -4
  135. package/dist/core/registry/cards/{workflow_dispatch.run.yaml → workflow.dispatch.yaml} +1 -1
  136. package/dist/{cards/workflow_job.logs.get.yaml → core/registry/cards/workflow.job.logs.raw.yaml} +2 -2
  137. package/dist/{cards/workflow_job.logs.analyze.yaml → core/registry/cards/workflow.job.logs.view.yaml} +1 -1
  138. package/dist/{cards/workflow_run.artifacts.list.yaml → core/registry/cards/workflow.run.artifacts.list.yaml} +1 -1
  139. package/dist/core/registry/cards/{workflow_run.cancel.yaml → workflow.run.cancel.yaml} +1 -1
  140. package/dist/core/registry/cards/{workflow_run.rerun_all.yaml → workflow.run.rerun.all.yaml} +3 -3
  141. package/dist/{cards/workflow_run.rerun_failed.yaml → core/registry/cards/workflow.run.rerun.failed.yaml} +3 -3
  142. package/dist/{cards/workflow_run.get.yaml → core/registry/cards/workflow.run.view.yaml} +19 -4
  143. package/dist/core/registry/cards/{workflow_runs.list.yaml → workflow.runs.list.yaml} +1 -1
  144. package/dist/core/registry/cards/{workflow.get.yaml → workflow.view.yaml} +2 -2
  145. package/dist/index.d.ts +374 -35
  146. package/dist/index.js +33 -5
  147. package/dist/index.js.map +1 -1
  148. package/dist/issue-mutations-FJNZW7L5.js +668 -0
  149. package/dist/issue-mutations-FJNZW7L5.js.map +1 -0
  150. package/dist/issue-queries-GRA4MKPD.js +208 -0
  151. package/dist/issue-queries-GRA4MKPD.js.map +1 -0
  152. package/dist/pr-mutations-UG67YOF5.js +344 -0
  153. package/dist/pr-mutations-UG67YOF5.js.map +1 -0
  154. package/dist/pr-queries-UOEOXIJQ.js +331 -0
  155. package/dist/pr-queries-UOEOXIJQ.js.map +1 -0
  156. package/dist/repo-JDUHFPZF.js +66 -0
  157. package/dist/repo-JDUHFPZF.js.map +1 -0
  158. package/package.json +18 -18
  159. package/skills/using-ghx/SKILL.md +61 -0
  160. package/dist/agent.d.ts +0 -32
  161. package/dist/agent.js +0 -38
  162. package/dist/agent.js.map +0 -1
  163. package/dist/cards/check_run.annotations.list.yaml +0 -35
  164. package/dist/cards/issue.assignees.update.yaml +0 -27
  165. package/dist/cards/issue.labels.update.yaml +0 -27
  166. package/dist/cards/pr.assignees.update.yaml +0 -38
  167. package/dist/cards/pr.checks.get_failed.yaml +0 -42
  168. package/dist/cards/pr.review.submit_comment.yaml +0 -26
  169. package/dist/cards/pr.review.submit_request_changes.yaml +0 -26
  170. package/dist/cards/workflow_run.jobs.list.yaml +0 -35
  171. package/dist/chunk-OL4ARD3R.js +0 -242
  172. package/dist/chunk-OL4ARD3R.js.map +0 -1
  173. package/dist/chunk-PJ2JKKQE.js +0 -4148
  174. package/dist/chunk-PJ2JKKQE.js.map +0 -1
  175. package/dist/chunk-SCIJMW5P.js +0 -54
  176. package/dist/chunk-SCIJMW5P.js.map +0 -1
  177. package/dist/cli/assets/skills/ghx/SKILL.md +0 -57
  178. package/dist/core/registry/cards/check_run.annotations.list.yaml +0 -35
  179. package/dist/core/registry/cards/issue.assignees.update.yaml +0 -27
  180. package/dist/core/registry/cards/issue.labels.update.yaml +0 -27
  181. package/dist/core/registry/cards/pr.assignees.update.yaml +0 -38
  182. package/dist/core/registry/cards/pr.checks.get_failed.yaml +0 -42
  183. package/dist/core/registry/cards/pr.review.submit_approve.yaml +0 -26
  184. package/dist/core/registry/cards/pr.review.submit_comment.yaml +0 -26
  185. package/dist/core/registry/cards/pr.review.submit_request_changes.yaml +0 -26
  186. package/dist/core/registry/cards/workflow_run.jobs.list.yaml +0 -35
  187. package/dist/envelope-BpF6MNCv.d.ts +0 -55
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "ghx",
3
+ "description": "GitHub execution router for AI agents — 66 capabilities with deterministic routing and normalized output",
4
+ "version": "0.2.0",
5
+ "author": {
6
+ "name": "Arye Kogan"
7
+ },
8
+ "repository": "https://github.com/aryeko/ghx",
9
+ "homepage": "https://github.com/aryeko/ghx",
10
+ "license": "MIT",
11
+ "keywords": [
12
+ "github",
13
+ "github-api",
14
+ "ai-agents",
15
+ "agentic",
16
+ "cli",
17
+ "graphql",
18
+ "automation",
19
+ "typescript"
20
+ ]
21
+ }
package/README.md CHANGED
@@ -119,24 +119,24 @@ npx @ghx-dev/core setup --scope project --verify
119
119
 
120
120
  The canonical setup skill content is stored in:
121
121
 
122
- - `src/cli/assets/skills/ghx/SKILL.md`
122
+ - `skills/using-ghx/SKILL.md` (package root)
123
123
 
124
124
  During build/publish it is copied to:
125
125
 
126
- - `dist/cli/assets/skills/ghx/SKILL.md`
126
+ - `dist/skills/using-ghx/SKILL.md`
127
127
 
128
128
  `ghx setup` writes this content to `.agents/skills/ghx/SKILL.md` in user or project scope.
129
129
 
130
- ## Agent Tools (`@ghx-dev/core/agent`)
130
+ ## Agent Tools
131
131
 
132
132
  ```ts
133
133
  import {
134
134
  createExecuteTool,
135
- listCapabilities,
135
+ createGithubClientFromToken,
136
+ executeTask,
136
137
  explainCapability,
137
- MAIN_SKILL_TEXT,
138
- } from "@ghx-dev/core/agent"
139
- import { createGithubClientFromToken, executeTask } from "@ghx-dev/core"
138
+ listCapabilities,
139
+ } from "@ghx-dev/core"
140
140
 
141
141
  // Wire the execute tool to the real engine
142
142
  const token = process.env.GITHUB_TOKEN!
@@ -152,23 +152,21 @@ console.log(explainCapability("repo.view"))
152
152
  const result = await tool.execute("repo.view", { owner: "aryeko", name: "ghx" })
153
153
  ```
154
154
 
155
- `MAIN_SKILL_TEXT` provides a ready-to-use system prompt describing all capabilities.
156
-
157
- ## 66 Capabilities
155
+ ## 69 Capabilities
158
156
 
159
157
  **Repository** -- `repo.view`, `repo.labels.list`, `repo.issue_types.list`
160
158
 
161
159
  **Issues** -- `issue.view`, `issue.list`, `issue.comments.list`, `issue.create`, `issue.update`, `issue.close`, `issue.reopen`, `issue.delete`, `issue.labels.update`, `issue.assignees.update`, `issue.milestone.set`, `issue.comments.create`, `issue.linked_prs.list`, `issue.relations.get`, `issue.parent.set`, `issue.parent.remove`, `issue.blocked_by.add`, `issue.blocked_by.remove`
162
160
 
163
- **Pull Requests (read)** -- `pr.view`, `pr.list`, `pr.comments.list`, `pr.reviews.list`, `pr.diff.list_files`, `pr.status.checks`, `pr.checks.get_failed`, `pr.mergeability.view`
161
+ **Pull Requests (read)** -- `pr.view`, `pr.list`, `pr.threads.list`, `pr.reviews.list`, `pr.diff.files`, `pr.checks.list`, `pr.merge.status`
164
162
 
165
- **Pull Requests (execute)** -- `pr.comment.reply`, `pr.comment.resolve`, `pr.comment.unresolve`, `pr.ready_for_review.set`, `pr.review.submit_approve`, `pr.review.submit_request_changes`, `pr.review.submit_comment`, `pr.merge.execute`, `pr.checks.rerun_failed`, `pr.checks.rerun_all`, `pr.reviewers.request`, `pr.assignees.update`, `pr.branch.update`
163
+ **Pull Requests (execute)** -- `pr.threads.reply`, `pr.threads.resolve`, `pr.threads.unresolve`, `pr.update`, `pr.reviews.submit`, `pr.reviews.request`, `pr.merge`, `pr.checks.rerun.failed`, `pr.checks.rerun.all`, `pr.branch.update`, `pr.assignees.add`, `pr.assignees.remove`
166
164
 
167
- **CI Diagnostics** -- `check_run.annotations.list`, `workflow_runs.list`, `workflow_run.jobs.list`, `workflow_job.logs.get`, `workflow_job.logs.analyze`
165
+ **CI Diagnostics** -- `workflow.runs.list`, `workflow.job.logs.get`
168
166
 
169
167
  **Releases** -- `release.list`, `release.get`, `release.create_draft`, `release.update`, `release.publish_draft`
170
168
 
171
- **Workflow Controls** -- `workflow.list`, `workflow.get`, `workflow_dispatch.run`, `workflow_run.get`, `workflow_run.rerun_failed`, `workflow_run.rerun_all`, `workflow_run.cancel`, `workflow_run.artifacts.list`
169
+ **Workflow Controls** -- `workflow.list`, `workflow.get`, `workflow_dispatch.run`, `workflow_run.view`, `workflow_run.rerun_failed`, `workflow_run.rerun_all`, `workflow_run.cancel`, `workflow_run.artifacts.list`
172
170
 
173
171
  **Projects v2** -- `project_v2.org.get`, `project_v2.user.get`, `project_v2.fields.list`, `project_v2.items.list`, `project_v2.item.add_issue`, `project_v2.item.field.update`
174
172
 
@@ -233,7 +231,6 @@ Root (`@ghx-dev/core`):
233
231
 
234
232
  Subpaths:
235
233
 
236
- - `@ghx-dev/core/agent` -- `createExecuteTool`, `listCapabilities`, `explainCapability`, `MAIN_SKILL_TEXT`
237
234
  - `@ghx-dev/core/cli` -- CLI entrypoint
238
235
 
239
236
  ## Custom GraphQL Transport
@@ -268,11 +265,11 @@ const result = await executeTask(
268
265
 
269
266
  ## Documentation
270
267
 
271
- - [Architecture overview](https://github.com/aryeko/ghx/blob/main/docs/CODEMAPS/ARCHITECTURE.md)
272
- - [Module map](https://github.com/aryeko/ghx/blob/main/docs/CODEMAPS/MODULES.md)
273
- - [File map](https://github.com/aryeko/ghx/blob/main/docs/CODEMAPS/FILES.md)
274
- - [Operation card registry](https://github.com/aryeko/ghx/blob/main/docs/architecture/operation-card-registry.md)
275
- - [Publishing guide](https://github.com/aryeko/ghx/blob/main/docs/guides/publishing.md)
268
+ - [Documentation Hub](https://github.com/aryeko/ghx/blob/main/docs/README.md)
269
+ - [Architecture](https://github.com/aryeko/ghx/blob/main/docs/architecture/README.md)
270
+ - [Capabilities Reference](https://github.com/aryeko/ghx/blob/main/docs/capabilities/README.md)
271
+ - [Operation Cards](https://github.com/aryeko/ghx/blob/main/docs/architecture/operation-cards.md)
272
+ - [Publishing Guide](https://github.com/aryeko/ghx/blob/main/docs/contributing/publishing.md)
276
273
 
277
274
  ## License
278
275
 
@@ -0,0 +1,50 @@
1
+ capability_id: issue.assignees.add
2
+ version: "1.0.0"
3
+ description: Add assignees to an issue without replacing existing ones.
4
+ input_schema:
5
+ type: object
6
+ required: [owner, name, issueNumber, assignees]
7
+ properties:
8
+ owner: { type: string, minLength: 1 }
9
+ name: { type: string, minLength: 1 }
10
+ issueNumber: { type: integer, minimum: 1 }
11
+ assignees:
12
+ type: array
13
+ items: { type: string, minLength: 1 }
14
+ minItems: 1
15
+ additionalProperties: false
16
+ output_schema:
17
+ type: object
18
+ required: [issueNumber, added]
19
+ properties:
20
+ issueNumber: { type: integer, minimum: 1 }
21
+ added:
22
+ type: array
23
+ items: { type: string }
24
+ additionalProperties: false
25
+ routing:
26
+ preferred: graphql
27
+ fallbacks: [cli]
28
+ graphql:
29
+ operationName: IssueAssigneesAdd
30
+ documentPath: src/gql/operations/issue-assignees-add.graphql
31
+ resolution:
32
+ lookup:
33
+ operationName: IssueAssigneesLookupByNumber
34
+ documentPath: src/gql/operations/issue-assignees-lookup-by-number.graphql
35
+ vars:
36
+ owner: owner
37
+ name: name
38
+ issueNumber: issueNumber
39
+ inject:
40
+ - target: assignableId
41
+ source: scalar
42
+ path: repository.issue.id
43
+ - target: assigneeIds
44
+ source: map_array
45
+ from_input: assignees
46
+ nodes_path: repository.assignableUsers.nodes
47
+ match_field: login
48
+ extract_field: id
49
+ cli:
50
+ command: issue edit
@@ -0,0 +1,50 @@
1
+ capability_id: issue.assignees.remove
2
+ version: "1.0.0"
3
+ description: Remove specific assignees from an issue.
4
+ input_schema:
5
+ type: object
6
+ required: [owner, name, issueNumber, assignees]
7
+ properties:
8
+ owner: { type: string, minLength: 1 }
9
+ name: { type: string, minLength: 1 }
10
+ issueNumber: { type: integer, minimum: 1 }
11
+ assignees:
12
+ type: array
13
+ items: { type: string, minLength: 1 }
14
+ minItems: 1
15
+ additionalProperties: false
16
+ output_schema:
17
+ type: object
18
+ required: [issueNumber, removed]
19
+ properties:
20
+ issueNumber: { type: integer, minimum: 1 }
21
+ removed:
22
+ type: array
23
+ items: { type: string, minLength: 1 }
24
+ additionalProperties: false
25
+ routing:
26
+ preferred: graphql
27
+ fallbacks: [cli]
28
+ graphql:
29
+ operationName: IssueAssigneesRemove
30
+ documentPath: src/gql/operations/issue-assignees-remove.graphql
31
+ resolution:
32
+ lookup:
33
+ operationName: IssueAssigneesLookupByNumber
34
+ documentPath: src/gql/operations/issue-assignees-lookup-by-number.graphql
35
+ vars:
36
+ owner: owner
37
+ name: name
38
+ issueNumber: issueNumber
39
+ inject:
40
+ - target: assignableId
41
+ source: scalar
42
+ path: repository.issue.id
43
+ - target: assigneeIds
44
+ source: map_array
45
+ from_input: assignees
46
+ nodes_path: repository.assignableUsers.nodes
47
+ match_field: login
48
+ extract_field: id
49
+ cli:
50
+ command: issue edit
@@ -0,0 +1,47 @@
1
+ capability_id: issue.assignees.set
2
+ version: "1.0.0"
3
+ description: Replace issue assignees.
4
+ input_schema:
5
+ type: object
6
+ required: [owner, name, issueNumber, assignees]
7
+ properties:
8
+ owner: { type: string, minLength: 1 }
9
+ name: { type: string, minLength: 1 }
10
+ issueNumber: { type: integer, minimum: 1 }
11
+ assignees:
12
+ type: array
13
+ items: { type: string, minLength: 1 }
14
+ additionalProperties: false
15
+ output_schema:
16
+ type: object
17
+ required: [id, assignees]
18
+ properties:
19
+ id: { type: string, minLength: 1 }
20
+ assignees:
21
+ type: array
22
+ items: { type: string, minLength: 1 }
23
+ additionalProperties: false
24
+ routing:
25
+ preferred: graphql
26
+ fallbacks: []
27
+ graphql:
28
+ operationName: IssueAssigneesUpdate
29
+ documentPath: src/gql/operations/issue-assignees-update.graphql
30
+ resolution:
31
+ lookup:
32
+ operationName: IssueAssigneesLookupByNumber
33
+ documentPath: src/gql/operations/issue-assignees-lookup-by-number.graphql
34
+ vars:
35
+ owner: owner
36
+ name: name
37
+ issueNumber: issueNumber
38
+ inject:
39
+ - target: assignableId
40
+ source: scalar
41
+ path: repository.issue.id
42
+ - target: assigneeIds
43
+ source: map_array
44
+ from_input: assignees
45
+ nodes_path: repository.assignableUsers.nodes
46
+ match_field: login
47
+ extract_field: id
@@ -3,9 +3,11 @@ version: "1.0.0"
3
3
  description: Close an issue.
4
4
  input_schema:
5
5
  type: object
6
- required: [issueId]
6
+ required: [owner, name, issueNumber]
7
7
  properties:
8
- issueId: { type: string, minLength: 1 }
8
+ owner: { type: string, minLength: 1 }
9
+ name: { type: string, minLength: 1 }
10
+ issueNumber: { type: integer, minimum: 1 }
9
11
  additionalProperties: false
10
12
  output_schema:
11
13
  type: object
@@ -22,3 +24,15 @@ routing:
22
24
  graphql:
23
25
  operationName: IssueClose
24
26
  documentPath: src/gql/operations/issue-close.graphql
27
+ resolution:
28
+ lookup:
29
+ operationName: IssueNodeIdLookup
30
+ documentPath: src/gql/operations/issue-node-id-lookup.graphql
31
+ vars:
32
+ owner: owner
33
+ name: name
34
+ issueNumber: issueNumber
35
+ inject:
36
+ - target: issueId
37
+ source: scalar
38
+ path: repository.issue.id
@@ -3,9 +3,11 @@ version: "1.0.0"
3
3
  description: Create an issue comment.
4
4
  input_schema:
5
5
  type: object
6
- required: [issueId, body]
6
+ required: [owner, name, issueNumber, body]
7
7
  properties:
8
- issueId: { type: string, minLength: 1 }
8
+ owner: { type: string, minLength: 1 }
9
+ name: { type: string, minLength: 1 }
10
+ issueNumber: { type: integer, minimum: 1 }
9
11
  body: { type: string, minLength: 1 }
10
12
  additionalProperties: false
11
13
  output_schema:
@@ -22,3 +24,15 @@ routing:
22
24
  graphql:
23
25
  operationName: IssueCommentCreate
24
26
  documentPath: src/gql/operations/issue-comment-create.graphql
27
+ resolution:
28
+ lookup:
29
+ operationName: IssueNodeIdLookup
30
+ documentPath: src/gql/operations/issue-node-id-lookup.graphql
31
+ vars:
32
+ owner: owner
33
+ name: name
34
+ issueNumber: issueNumber
35
+ inject:
36
+ - target: issueId
37
+ source: scalar
38
+ path: repository.issue.id
@@ -26,3 +26,14 @@ routing:
26
26
  graphql:
27
27
  operationName: IssueCreate
28
28
  documentPath: src/gql/operations/issue-create.graphql
29
+ resolution:
30
+ lookup:
31
+ operationName: IssueCreateRepositoryId
32
+ documentPath: src/gql/operations/issue-create-repository-id.graphql
33
+ vars:
34
+ owner: owner
35
+ name: name
36
+ inject:
37
+ - target: repositoryId
38
+ source: scalar
39
+ path: repository.id
@@ -3,9 +3,11 @@ version: "1.0.0"
3
3
  description: Delete an issue.
4
4
  input_schema:
5
5
  type: object
6
- required: [issueId]
6
+ required: [owner, name, issueNumber]
7
7
  properties:
8
- issueId: { type: string, minLength: 1 }
8
+ owner: { type: string, minLength: 1 }
9
+ name: { type: string, minLength: 1 }
10
+ issueNumber: { type: integer, minimum: 1 }
9
11
  additionalProperties: false
10
12
  output_schema:
11
13
  type: object
@@ -21,3 +23,15 @@ routing:
21
23
  graphql:
22
24
  operationName: IssueDelete
23
25
  documentPath: src/gql/operations/issue-delete.graphql
26
+ resolution:
27
+ lookup:
28
+ operationName: IssueNodeIdLookup
29
+ documentPath: src/gql/operations/issue-node-id-lookup.graphql
30
+ vars:
31
+ owner: owner
32
+ name: name
33
+ issueNumber: issueNumber
34
+ inject:
35
+ - target: issueId
36
+ source: scalar
37
+ path: repository.issue.id
@@ -0,0 +1,48 @@
1
+ capability_id: issue.labels.add
2
+ version: "1.0.0"
3
+ description: Add labels to an issue without removing existing labels.
4
+ input_schema:
5
+ type: object
6
+ required: [owner, name, issueNumber, labels]
7
+ properties:
8
+ owner: { type: string, minLength: 1 }
9
+ name: { type: string, minLength: 1 }
10
+ issueNumber: { type: integer, minimum: 1 }
11
+ labels:
12
+ type: array
13
+ items: { type: string, minLength: 1 }
14
+ minItems: 1
15
+ additionalProperties: false
16
+ output_schema:
17
+ type: object
18
+ required: [id, labels]
19
+ properties:
20
+ id: { type: string, minLength: 1 }
21
+ labels:
22
+ type: array
23
+ items: { type: string }
24
+ additionalProperties: false
25
+ routing:
26
+ preferred: graphql
27
+ fallbacks: []
28
+ graphql:
29
+ operationName: IssueLabelsAdd
30
+ documentPath: src/gql/operations/issue-labels-add.graphql
31
+ resolution:
32
+ lookup:
33
+ operationName: IssueLabelsLookupByNumber
34
+ documentPath: src/gql/operations/issue-labels-lookup-by-number.graphql
35
+ vars:
36
+ owner: owner
37
+ name: name
38
+ issueNumber: issueNumber
39
+ inject:
40
+ - target: labelableId
41
+ source: scalar
42
+ path: repository.issue.id
43
+ - target: labelIds
44
+ source: map_array
45
+ from_input: labels
46
+ nodes_path: repository.labels.nodes
47
+ match_field: name
48
+ extract_field: id
@@ -0,0 +1,50 @@
1
+ capability_id: issue.labels.remove
2
+ version: "1.0.0"
3
+ description: Remove specific labels from an issue.
4
+ input_schema:
5
+ type: object
6
+ required: [owner, name, issueNumber, labels]
7
+ properties:
8
+ owner: { type: string, minLength: 1 }
9
+ name: { type: string, minLength: 1 }
10
+ issueNumber: { type: integer, minimum: 1 }
11
+ labels:
12
+ type: array
13
+ items: { type: string, minLength: 1 }
14
+ minItems: 1
15
+ additionalProperties: false
16
+ output_schema:
17
+ type: object
18
+ required: [issueNumber, removed]
19
+ properties:
20
+ issueNumber: { type: integer, minimum: 1 }
21
+ removed:
22
+ type: array
23
+ items: { type: string }
24
+ additionalProperties: false
25
+ routing:
26
+ preferred: graphql
27
+ fallbacks: [cli]
28
+ graphql:
29
+ operationName: IssueLabelsRemove
30
+ documentPath: src/gql/operations/issue-labels-remove.graphql
31
+ resolution:
32
+ lookup:
33
+ operationName: IssueLabelsLookupByNumber
34
+ documentPath: src/gql/operations/issue-labels-lookup-by-number.graphql
35
+ vars:
36
+ owner: owner
37
+ name: name
38
+ issueNumber: issueNumber
39
+ inject:
40
+ - target: labelableId
41
+ source: scalar
42
+ path: repository.issue.id
43
+ - target: labelIds
44
+ source: map_array
45
+ from_input: labels
46
+ nodes_path: repository.labels.nodes
47
+ match_field: name
48
+ extract_field: id
49
+ cli:
50
+ command: issue edit
@@ -0,0 +1,47 @@
1
+ capability_id: issue.labels.set
2
+ version: "1.0.0"
3
+ description: Replace issue labels.
4
+ input_schema:
5
+ type: object
6
+ required: [owner, name, issueNumber, labels]
7
+ properties:
8
+ owner: { type: string, minLength: 1 }
9
+ name: { type: string, minLength: 1 }
10
+ issueNumber: { type: integer, minimum: 1 }
11
+ labels:
12
+ type: array
13
+ items: { type: string, minLength: 1 }
14
+ additionalProperties: false
15
+ output_schema:
16
+ type: object
17
+ required: [id, labels]
18
+ properties:
19
+ id: { type: string, minLength: 1 }
20
+ labels:
21
+ type: array
22
+ items: { type: string, minLength: 1 }
23
+ additionalProperties: false
24
+ routing:
25
+ preferred: graphql
26
+ fallbacks: []
27
+ graphql:
28
+ operationName: IssueLabelsUpdate
29
+ documentPath: src/gql/operations/issue-labels-update.graphql
30
+ resolution:
31
+ lookup:
32
+ operationName: IssueLabelsLookupByNumber
33
+ documentPath: src/gql/operations/issue-labels-lookup-by-number.graphql
34
+ vars:
35
+ owner: owner
36
+ name: name
37
+ issueNumber: issueNumber
38
+ inject:
39
+ - target: labelableId
40
+ source: scalar
41
+ path: repository.issue.id
42
+ - target: labelIds
43
+ source: map_array
44
+ from_input: labels
45
+ nodes_path: repository.labels.nodes
46
+ match_field: name
47
+ extract_field: id
@@ -0,0 +1,40 @@
1
+ capability_id: issue.milestone.clear
2
+ version: "1.0.0"
3
+ description: Remove the milestone from an issue.
4
+ input_schema:
5
+ type: object
6
+ required: [owner, name, issueNumber]
7
+ properties:
8
+ owner: { type: string, minLength: 1 }
9
+ name: { type: string, minLength: 1 }
10
+ issueNumber: { type: integer, minimum: 1 }
11
+ additionalProperties: false
12
+ output_schema:
13
+ type: object
14
+ required: [issueNumber, cleared]
15
+ properties:
16
+ issueNumber: { type: integer, minimum: 1 }
17
+ cleared: { type: boolean }
18
+ additionalProperties: false
19
+ routing:
20
+ preferred: graphql
21
+ fallbacks: [cli]
22
+ graphql:
23
+ operationName: IssueMilestoneSet
24
+ documentPath: src/gql/operations/issue-milestone-set.graphql
25
+ resolution:
26
+ lookup:
27
+ operationName: IssueNodeIdLookup
28
+ documentPath: src/gql/operations/issue-node-id-lookup.graphql
29
+ vars:
30
+ owner: owner
31
+ name: name
32
+ issueNumber: issueNumber
33
+ inject:
34
+ - target: issueId
35
+ source: scalar
36
+ path: repository.issue.id
37
+ - target: milestoneId
38
+ source: "null_literal"
39
+ cli:
40
+ command: issue edit
@@ -3,17 +3,20 @@ version: "1.0.0"
3
3
  description: Set issue milestone number or clear with null.
4
4
  input_schema:
5
5
  type: object
6
- required: [issueId, milestoneNumber]
6
+ required: [owner, name, issueNumber, milestoneNumber]
7
7
  properties:
8
- issueId: { type: string, minLength: 1 }
9
- milestoneNumber: { type: [integer, "null"], minimum: 1 }
8
+ owner: { type: string, minLength: 1 }
9
+ name: { type: string, minLength: 1 }
10
+ issueNumber: { type: integer, minimum: 1 }
11
+ milestoneNumber: { type: integer, minimum: 1 }
10
12
  additionalProperties: false
11
13
  output_schema:
12
14
  type: object
13
- required: [id, milestoneNumber]
15
+ required: [id, milestoneNumber, updated]
14
16
  properties:
15
17
  id: { type: string, minLength: 1 }
16
18
  milestoneNumber: { type: [integer, "null"] }
19
+ updated: { type: boolean }
17
20
  additionalProperties: false
18
21
  routing:
19
22
  preferred: graphql
@@ -21,3 +24,19 @@ routing:
21
24
  graphql:
22
25
  operationName: IssueMilestoneSet
23
26
  documentPath: src/gql/operations/issue-milestone-set.graphql
27
+ resolution:
28
+ lookup:
29
+ operationName: IssueMilestoneLookupByNumber
30
+ documentPath: src/gql/operations/issue-milestone-lookup-by-number.graphql
31
+ vars:
32
+ owner: owner
33
+ name: name
34
+ issueNumber: issueNumber
35
+ milestoneNumber: milestoneNumber
36
+ inject:
37
+ - target: issueId
38
+ source: scalar
39
+ path: repository.issue.id
40
+ - target: milestoneId
41
+ source: scalar
42
+ path: repository.milestone.id
@@ -1,4 +1,4 @@
1
- capability_id: issue.blocked_by.add
1
+ capability_id: issue.relations.blocked_by.add
2
2
  version: "1.0.0"
3
3
  description: Add a blocked-by relation for an issue.
4
4
  input_schema:
@@ -10,10 +10,11 @@ input_schema:
10
10
  additionalProperties: false
11
11
  output_schema:
12
12
  type: object
13
- required: [issueId, blockedByIssueId]
13
+ required: [issueId, blockedByIssueId, added]
14
14
  properties:
15
15
  issueId: { type: string, minLength: 1 }
16
16
  blockedByIssueId: { type: string, minLength: 1 }
17
+ added: { type: boolean }
17
18
  additionalProperties: false
18
19
  routing:
19
20
  preferred: graphql
@@ -1,4 +1,4 @@
1
- capability_id: issue.blocked_by.remove
1
+ capability_id: issue.relations.blocked_by.remove
2
2
  version: "1.0.0"
3
3
  description: Remove a blocked-by relation for an issue.
4
4
  input_schema:
@@ -1,4 +1,4 @@
1
- capability_id: issue.parent.remove
1
+ capability_id: issue.relations.parent.remove
2
2
  version: "1.0.0"
3
3
  description: Remove an issue parent relation.
4
4
  input_schema:
@@ -20,3 +20,13 @@ routing:
20
20
  graphql:
21
21
  operationName: IssueParentRemove
22
22
  documentPath: src/gql/operations/issue-parent-remove.graphql
23
+ resolution:
24
+ lookup:
25
+ operationName: IssueParentLookup
26
+ documentPath: src/gql/operations/issue-parent-lookup.graphql
27
+ vars:
28
+ issueId: issueId
29
+ inject:
30
+ - target: parentIssueId
31
+ source: scalar
32
+ path: node.parent.id
@@ -1,4 +1,4 @@
1
- capability_id: issue.parent.set
1
+ capability_id: issue.relations.parent.set
2
2
  version: "1.0.0"
3
3
  description: Set an issue parent relation.
4
4
  input_schema:
@@ -10,10 +10,11 @@ input_schema:
10
10
  additionalProperties: false
11
11
  output_schema:
12
12
  type: object
13
- required: [issueId, parentIssueId]
13
+ required: [issueId, parentIssueId, updated]
14
14
  properties:
15
15
  issueId: { type: string, minLength: 1 }
16
16
  parentIssueId: { type: string, minLength: 1 }
17
+ updated: { type: boolean }
17
18
  additionalProperties: false
18
19
  routing:
19
20
  preferred: graphql
@@ -1,4 +1,4 @@
1
- capability_id: issue.linked_prs.list
1
+ capability_id: issue.relations.prs.list
2
2
  version: "1.0.0"
3
3
  description: List pull requests linked to an issue.
4
4
  input_schema:
@@ -1,4 +1,4 @@
1
- capability_id: issue.relations.get
1
+ capability_id: issue.relations.view
2
2
  version: "1.0.0"
3
3
  description: Get issue parent/children/blocking relations.
4
4
  input_schema: