gh-axi 0.1.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.
- package/LICENSE +21 -0
- package/README.md +46 -0
- package/dist/bin/gh-axg.d.ts +2 -0
- package/dist/bin/gh-axg.js +4 -0
- package/dist/bin/gh-axg.js.map +1 -0
- package/dist/bin/gh-axi.d.ts +2 -0
- package/dist/bin/gh-axi.js +4 -0
- package/dist/bin/gh-axi.js.map +1 -0
- package/dist/src/args.d.ts +16 -0
- package/dist/src/args.js +66 -0
- package/dist/src/args.js.map +1 -0
- package/dist/src/body.d.ts +14 -0
- package/dist/src/body.js +44 -0
- package/dist/src/body.js.map +1 -0
- package/dist/src/cli.d.ts +1 -0
- package/dist/src/cli.js +112 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/api.d.ts +3 -0
- package/dist/src/commands/api.js +144 -0
- package/dist/src/commands/api.js.map +1 -0
- package/dist/src/commands/home.d.ts +3 -0
- package/dist/src/commands/home.js +42 -0
- package/dist/src/commands/home.js.map +1 -0
- package/dist/src/commands/issue.d.ts +3 -0
- package/dist/src/commands/issue.js +432 -0
- package/dist/src/commands/issue.js.map +1 -0
- package/dist/src/commands/label.d.ts +3 -0
- package/dist/src/commands/label.js +121 -0
- package/dist/src/commands/label.js.map +1 -0
- package/dist/src/commands/pr.d.ts +3 -0
- package/dist/src/commands/pr.js +544 -0
- package/dist/src/commands/pr.js.map +1 -0
- package/dist/src/commands/release.d.ts +3 -0
- package/dist/src/commands/release.js +209 -0
- package/dist/src/commands/release.js.map +1 -0
- package/dist/src/commands/repo.d.ts +3 -0
- package/dist/src/commands/repo.js +182 -0
- package/dist/src/commands/repo.js.map +1 -0
- package/dist/src/commands/run.d.ts +3 -0
- package/dist/src/commands/run.js +218 -0
- package/dist/src/commands/run.js.map +1 -0
- package/dist/src/commands/search.d.ts +3 -0
- package/dist/src/commands/search.js +295 -0
- package/dist/src/commands/search.js.map +1 -0
- package/dist/src/commands/workflow.d.ts +3 -0
- package/dist/src/commands/workflow.js +126 -0
- package/dist/src/commands/workflow.js.map +1 -0
- package/dist/src/context.d.ts +13 -0
- package/dist/src/context.js +48 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/errors.d.ts +8 -0
- package/dist/src/errors.js +84 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/gh.d.ts +12 -0
- package/dist/src/gh.js +54 -0
- package/dist/src/gh.js.map +1 -0
- package/dist/src/suggestions.d.ts +12 -0
- package/dist/src/suggestions.js +431 -0
- package/dist/src/suggestions.js.map +1 -0
- package/dist/src/toon.d.ts +65 -0
- package/dist/src/toon.js +151 -0
- package/dist/src/toon.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import { ghJson, ghExec, ghRaw } from '../gh.js';
|
|
2
|
+
import { AxiError } from '../errors.js';
|
|
3
|
+
import { getSuggestions } from '../suggestions.js';
|
|
4
|
+
import { getFlag, hasFlag, getPositional, requireNumber } from '../args.js';
|
|
5
|
+
import { truncateBody } from '../body.js';
|
|
6
|
+
import { field, pluck, joinArray, relativeTime, lower, custom, renderList, renderDetail, renderHelp, renderError, renderOutput, } from '../toon.js';
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Help
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
export const ISSUE_HELP = `usage: gh-axi issue <subcommand> [flags]
|
|
11
|
+
subcommands[13]:
|
|
12
|
+
list, view <number>, create, edit <number>, close <number>, reopen <number>, comment <number>, delete <number>, lock <number>, unlock <number>, pin <number>, unpin <number>, transfer <number>
|
|
13
|
+
flags{list}:
|
|
14
|
+
--state <open|closed|all>, --label <name>, --assignee <login>, --author <login>, --milestone <name>, --sort <created|updated|comments>, --limit <n> (default 30)
|
|
15
|
+
flags{view}:
|
|
16
|
+
--comments, --full (show complete body without truncation)
|
|
17
|
+
flags{create}:
|
|
18
|
+
--title <text> (required), --body <text>, --assignee <login>, --label <name>, --milestone <name>
|
|
19
|
+
flags{edit}:
|
|
20
|
+
--title, --body, --add-label, --remove-label, --add-assignee, --remove-assignee, --milestone
|
|
21
|
+
flags{close}:
|
|
22
|
+
--reason <completed|not_planned>, --comment <text>
|
|
23
|
+
flags{comment}:
|
|
24
|
+
--body <text> (required)
|
|
25
|
+
flags{transfer}:
|
|
26
|
+
--repo <owner/name> (required)`;
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Field schemas
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
const listSchema = [
|
|
31
|
+
field('number'),
|
|
32
|
+
field('title'),
|
|
33
|
+
lower('state'),
|
|
34
|
+
pluck('author', 'login', 'author'),
|
|
35
|
+
relativeTime('createdAt', 'created'),
|
|
36
|
+
];
|
|
37
|
+
const viewSchema = [
|
|
38
|
+
field('number'),
|
|
39
|
+
field('title'),
|
|
40
|
+
lower('state'),
|
|
41
|
+
pluck('author', 'login', 'author'),
|
|
42
|
+
relativeTime('createdAt', 'created'),
|
|
43
|
+
custom('body', (item) => truncateBody(item.body, 500)),
|
|
44
|
+
];
|
|
45
|
+
const viewSchemaFull = viewSchema.map(f => 'as' in f && f.as === 'body'
|
|
46
|
+
? custom('body', (item) => typeof item.body === 'string' ? item.body : '')
|
|
47
|
+
: f);
|
|
48
|
+
const createResultSchema = [
|
|
49
|
+
field('number'),
|
|
50
|
+
field('title'),
|
|
51
|
+
lower('state'),
|
|
52
|
+
field('url'),
|
|
53
|
+
];
|
|
54
|
+
const editResultSchema = [
|
|
55
|
+
field('number'),
|
|
56
|
+
field('title'),
|
|
57
|
+
lower('state'),
|
|
58
|
+
joinArray('labels', 'name', 'labels'),
|
|
59
|
+
joinArray('assignees', 'login', 'assignees'),
|
|
60
|
+
];
|
|
61
|
+
const stateResultSchema = [
|
|
62
|
+
field('number'),
|
|
63
|
+
lower('state'),
|
|
64
|
+
];
|
|
65
|
+
const commentResultSchema = [
|
|
66
|
+
field('number', 'issue'),
|
|
67
|
+
pluck('author', 'login', 'author'),
|
|
68
|
+
relativeTime('createdAt', 'created'),
|
|
69
|
+
custom('body', (item) => truncateBody(item.body, 800)),
|
|
70
|
+
];
|
|
71
|
+
const lockResultSchema = [
|
|
72
|
+
field('number'),
|
|
73
|
+
lower('state'),
|
|
74
|
+
field('locked'),
|
|
75
|
+
];
|
|
76
|
+
const pinResultSchema = [
|
|
77
|
+
field('number'),
|
|
78
|
+
lower('state'),
|
|
79
|
+
field('isPinned', 'pinned'),
|
|
80
|
+
];
|
|
81
|
+
const transferResultSchema = [
|
|
82
|
+
field('number'),
|
|
83
|
+
field('url'),
|
|
84
|
+
];
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Subcommand handlers
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
async function listIssues(args, ctx) {
|
|
89
|
+
if (hasFlag(args, '--search')) {
|
|
90
|
+
throw new AxiError('issue list does not support --search. Use `gh-axi search issues "<query>"` instead for full-text search with total counts.', 'VALIDATION_ERROR');
|
|
91
|
+
}
|
|
92
|
+
const state = getFlag(args, '--state');
|
|
93
|
+
const label = getFlag(args, '--label');
|
|
94
|
+
const assignee = getFlag(args, '--assignee');
|
|
95
|
+
const author = getFlag(args, '--author');
|
|
96
|
+
const milestone = getFlag(args, '--milestone');
|
|
97
|
+
const sort = getFlag(args, '--sort');
|
|
98
|
+
const limitRaw = getFlag(args, '--limit');
|
|
99
|
+
const limit = limitRaw ? parseInt(limitRaw, 10) : 30;
|
|
100
|
+
const ghArgs = ['issue', 'list', '--json', 'number,title,state,author,createdAt', '--limit', String(limit)];
|
|
101
|
+
if (state)
|
|
102
|
+
ghArgs.push('--state', state);
|
|
103
|
+
if (label)
|
|
104
|
+
ghArgs.push('--label', label);
|
|
105
|
+
if (assignee)
|
|
106
|
+
ghArgs.push('--assignee', assignee);
|
|
107
|
+
if (author)
|
|
108
|
+
ghArgs.push('--author', author);
|
|
109
|
+
if (milestone)
|
|
110
|
+
ghArgs.push('--milestone', milestone);
|
|
111
|
+
if (sort)
|
|
112
|
+
ghArgs.push('--search', `sort:${sort}-desc`);
|
|
113
|
+
const items = await ghJson(ghArgs, ctx);
|
|
114
|
+
const isEmpty = items.length === 0;
|
|
115
|
+
// If we hit the limit, fetch the true totalCount via GraphQL
|
|
116
|
+
let countLine;
|
|
117
|
+
if (items.length === limit) {
|
|
118
|
+
let totalCount = null;
|
|
119
|
+
if (ctx) {
|
|
120
|
+
try {
|
|
121
|
+
const ghState = (state ?? 'open').toUpperCase();
|
|
122
|
+
const query = `{ repository(owner:"${ctx.owner}", name:"${ctx.name}") { issues(states:[${ghState}]) { totalCount } } }`;
|
|
123
|
+
const gqlResult = await ghRaw(['api', 'graphql', '-f', `query=${query}`]);
|
|
124
|
+
if (gqlResult.exitCode === 0) {
|
|
125
|
+
const parsed = JSON.parse(gqlResult.stdout);
|
|
126
|
+
totalCount = parsed?.data?.repository?.issues?.totalCount ?? null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// fall back to old behavior
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
countLine = totalCount !== null
|
|
134
|
+
? `count: ${items.length} of ${totalCount} total`
|
|
135
|
+
: `count: ${items.length} (showing first ${items.length}; run \`gh-axi repo view\` for total count)`;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
countLine = `count: ${items.length}`;
|
|
139
|
+
}
|
|
140
|
+
const blocks = [countLine, renderList('issues', items, listSchema)];
|
|
141
|
+
const help = getSuggestions({ domain: 'issue', action: 'list', isEmpty, repo: ctx });
|
|
142
|
+
blocks.push(renderHelp(help));
|
|
143
|
+
return renderOutput(blocks);
|
|
144
|
+
}
|
|
145
|
+
async function viewIssue(args, ctx) {
|
|
146
|
+
const num = requireNumber(getPositional(args, 1), 'issue');
|
|
147
|
+
const withComments = hasFlag(args, '--comments');
|
|
148
|
+
const full = hasFlag(args, '--full');
|
|
149
|
+
const fields = 'number,title,state,author,createdAt,body' + (withComments ? ',comments' : '');
|
|
150
|
+
const ghArgs = ['issue', 'view', String(num), '--json', fields];
|
|
151
|
+
const item = await ghJson(ghArgs, ctx);
|
|
152
|
+
const state = typeof item.state === 'string' ? item.state.toLowerCase() : undefined;
|
|
153
|
+
const blocks = [renderDetail('issue', item, full ? viewSchemaFull : viewSchema)];
|
|
154
|
+
if (withComments && Array.isArray(item.comments)) {
|
|
155
|
+
blocks.push(renderList('comments', item.comments, commentResultSchema.filter((d) => ('key' in d ? d.key !== 'number' : true))));
|
|
156
|
+
}
|
|
157
|
+
const help = getSuggestions({ domain: 'issue', action: 'view', state, id: num, repo: ctx });
|
|
158
|
+
blocks.push(renderHelp(help));
|
|
159
|
+
return renderOutput(blocks);
|
|
160
|
+
}
|
|
161
|
+
async function createIssue(args, ctx) {
|
|
162
|
+
const title = getFlag(args, '--title');
|
|
163
|
+
if (!title)
|
|
164
|
+
throw new AxiError('--title is required', 'VALIDATION_ERROR');
|
|
165
|
+
const body = getFlag(args, '--body');
|
|
166
|
+
const assignee = getFlag(args, '--assignee');
|
|
167
|
+
const label = getFlag(args, '--label');
|
|
168
|
+
const milestone = getFlag(args, '--milestone');
|
|
169
|
+
const project = getFlag(args, '--project');
|
|
170
|
+
const ghArgs = ['issue', 'create', '--title', title];
|
|
171
|
+
if (body)
|
|
172
|
+
ghArgs.push('--body', body);
|
|
173
|
+
if (assignee)
|
|
174
|
+
ghArgs.push('--assignee', assignee);
|
|
175
|
+
if (label)
|
|
176
|
+
ghArgs.push('--label', label);
|
|
177
|
+
if (milestone)
|
|
178
|
+
ghArgs.push('--milestone', milestone);
|
|
179
|
+
if (project)
|
|
180
|
+
ghArgs.push('--project', project);
|
|
181
|
+
// gh issue create outputs the URL; use --json to get structured data
|
|
182
|
+
// Unfortunately gh issue create doesn't support --json, so we parse the URL
|
|
183
|
+
const output = await ghExec(ghArgs, ctx);
|
|
184
|
+
const urlMatch = output.match(/https:\/\/github\.com\/[^\s]+/);
|
|
185
|
+
const url = urlMatch ? urlMatch[0] : output.trim();
|
|
186
|
+
const numMatch = url.match(/\/issues\/(\d+)/);
|
|
187
|
+
const num = numMatch ? parseInt(numMatch[1], 10) : 0;
|
|
188
|
+
// Fetch the created issue for structured output
|
|
189
|
+
const item = await ghJson(['issue', 'view', String(num), '--json', 'number,title,state,url'], ctx);
|
|
190
|
+
const blocks = [renderDetail('issue', item, createResultSchema)];
|
|
191
|
+
const help = getSuggestions({ domain: 'issue', action: 'create', id: num, repo: ctx });
|
|
192
|
+
blocks.push(renderHelp(help));
|
|
193
|
+
return renderOutput(blocks);
|
|
194
|
+
}
|
|
195
|
+
async function editIssue(args, ctx) {
|
|
196
|
+
const num = requireNumber(getPositional(args, 1), 'issue');
|
|
197
|
+
const title = getFlag(args, '--title');
|
|
198
|
+
const body = getFlag(args, '--body');
|
|
199
|
+
const addLabel = getFlag(args, '--add-label');
|
|
200
|
+
const removeLabel = getFlag(args, '--remove-label');
|
|
201
|
+
const addAssignee = getFlag(args, '--add-assignee');
|
|
202
|
+
const removeAssignee = getFlag(args, '--remove-assignee');
|
|
203
|
+
const milestone = getFlag(args, '--milestone');
|
|
204
|
+
const ghArgs = ['issue', 'edit', String(num)];
|
|
205
|
+
if (title)
|
|
206
|
+
ghArgs.push('--title', title);
|
|
207
|
+
if (body)
|
|
208
|
+
ghArgs.push('--body', body);
|
|
209
|
+
if (addLabel)
|
|
210
|
+
ghArgs.push('--add-label', addLabel);
|
|
211
|
+
if (removeLabel)
|
|
212
|
+
ghArgs.push('--remove-label', removeLabel);
|
|
213
|
+
if (addAssignee)
|
|
214
|
+
ghArgs.push('--add-assignee', addAssignee);
|
|
215
|
+
if (removeAssignee)
|
|
216
|
+
ghArgs.push('--remove-assignee', removeAssignee);
|
|
217
|
+
if (milestone)
|
|
218
|
+
ghArgs.push('--milestone', milestone);
|
|
219
|
+
await ghExec(ghArgs, ctx);
|
|
220
|
+
// Fetch updated issue
|
|
221
|
+
const item = await ghJson(['issue', 'view', String(num), '--json', 'number,title,state,labels,assignees'], ctx);
|
|
222
|
+
const blocks = [renderDetail('issue', item, editResultSchema)];
|
|
223
|
+
const help = getSuggestions({ domain: 'issue', action: 'edit', id: num, repo: ctx });
|
|
224
|
+
blocks.push(renderHelp(help));
|
|
225
|
+
return renderOutput(blocks);
|
|
226
|
+
}
|
|
227
|
+
async function closeIssue(args, ctx) {
|
|
228
|
+
const num = requireNumber(getPositional(args, 1), 'issue');
|
|
229
|
+
const reason = getFlag(args, '--reason');
|
|
230
|
+
const comment = getFlag(args, '--comment');
|
|
231
|
+
// Idempotent: check current state
|
|
232
|
+
const current = await ghJson(['issue', 'view', String(num), '--json', 'state'], ctx);
|
|
233
|
+
if (current.state.toLowerCase() === 'closed') {
|
|
234
|
+
const item = await ghJson(['issue', 'view', String(num), '--json', 'number,state'], ctx);
|
|
235
|
+
const blocks = [renderDetail('issue', { ...item, _message: 'Already closed' }, [...stateResultSchema, field('_message', 'message')])];
|
|
236
|
+
const help = getSuggestions({ domain: 'issue', action: 'close', id: num, repo: ctx });
|
|
237
|
+
blocks.push(renderHelp(help));
|
|
238
|
+
return renderOutput(blocks);
|
|
239
|
+
}
|
|
240
|
+
const ghArgs = ['issue', 'close', String(num)];
|
|
241
|
+
if (reason)
|
|
242
|
+
ghArgs.push('--reason', reason);
|
|
243
|
+
if (comment)
|
|
244
|
+
ghArgs.push('--comment', comment);
|
|
245
|
+
await ghExec(ghArgs, ctx);
|
|
246
|
+
const item = await ghJson(['issue', 'view', String(num), '--json', 'number,state'], ctx);
|
|
247
|
+
const blocks = [renderDetail('issue', item, stateResultSchema)];
|
|
248
|
+
const help = getSuggestions({ domain: 'issue', action: 'close', id: num, repo: ctx });
|
|
249
|
+
blocks.push(renderHelp(help));
|
|
250
|
+
return renderOutput(blocks);
|
|
251
|
+
}
|
|
252
|
+
async function reopenIssue(args, ctx) {
|
|
253
|
+
const num = requireNumber(getPositional(args, 1), 'issue');
|
|
254
|
+
// Idempotent: check current state
|
|
255
|
+
const current = await ghJson(['issue', 'view', String(num), '--json', 'state'], ctx);
|
|
256
|
+
if (current.state.toLowerCase() === 'open') {
|
|
257
|
+
const item = await ghJson(['issue', 'view', String(num), '--json', 'number,state'], ctx);
|
|
258
|
+
const blocks = [renderDetail('issue', { ...item, _message: 'Already open' }, [...stateResultSchema, field('_message', 'message')])];
|
|
259
|
+
const help = getSuggestions({ domain: 'issue', action: 'reopen', id: num, repo: ctx });
|
|
260
|
+
blocks.push(renderHelp(help));
|
|
261
|
+
return renderOutput(blocks);
|
|
262
|
+
}
|
|
263
|
+
await ghExec(['issue', 'reopen', String(num)], ctx);
|
|
264
|
+
const item = await ghJson(['issue', 'view', String(num), '--json', 'number,state'], ctx);
|
|
265
|
+
const blocks = [renderDetail('issue', item, stateResultSchema)];
|
|
266
|
+
const help = getSuggestions({ domain: 'issue', action: 'reopen', id: num, repo: ctx });
|
|
267
|
+
blocks.push(renderHelp(help));
|
|
268
|
+
return renderOutput(blocks);
|
|
269
|
+
}
|
|
270
|
+
async function commentOnIssue(args, ctx) {
|
|
271
|
+
const num = requireNumber(getPositional(args, 1), 'issue');
|
|
272
|
+
const body = getFlag(args, '--body');
|
|
273
|
+
if (!body)
|
|
274
|
+
throw new AxiError('--body is required', 'VALIDATION_ERROR');
|
|
275
|
+
await ghExec(['issue', 'comment', String(num), '--body', body], ctx);
|
|
276
|
+
// Fetch the latest comment
|
|
277
|
+
const issue = await ghJson(['issue', 'view', String(num), '--json', 'comments'], ctx);
|
|
278
|
+
const lastComment = issue.comments[issue.comments.length - 1];
|
|
279
|
+
const commentItem = { ...lastComment, number: num };
|
|
280
|
+
const blocks = [renderDetail('comment', commentItem, commentResultSchema)];
|
|
281
|
+
const help = getSuggestions({ domain: 'issue', action: 'comment', id: num, repo: ctx });
|
|
282
|
+
blocks.push(renderHelp(help));
|
|
283
|
+
return renderOutput(blocks);
|
|
284
|
+
}
|
|
285
|
+
async function deleteIssue(args, ctx) {
|
|
286
|
+
const num = requireNumber(getPositional(args, 1), 'issue');
|
|
287
|
+
await ghExec(['issue', 'delete', String(num), '--yes'], ctx);
|
|
288
|
+
const blocks = [renderDetail('issue', { number: num, status: 'deleted' }, [field('number'), field('status')])];
|
|
289
|
+
const help = getSuggestions({ domain: 'issue', action: 'delete', id: num, repo: ctx });
|
|
290
|
+
blocks.push(renderHelp(help));
|
|
291
|
+
return renderOutput(blocks);
|
|
292
|
+
}
|
|
293
|
+
async function lockIssue(args, ctx) {
|
|
294
|
+
const num = requireNumber(getPositional(args, 1), 'issue');
|
|
295
|
+
// Idempotent: check current locked state
|
|
296
|
+
const current = await ghJson(['issue', 'view', String(num), '--json', 'state,locked'], ctx);
|
|
297
|
+
if (current.locked) {
|
|
298
|
+
const item = { number: num, state: current.state, locked: true, _message: 'Already locked' };
|
|
299
|
+
const blocks = [renderDetail('issue', item, [...lockResultSchema, field('_message', 'message')])];
|
|
300
|
+
const help = getSuggestions({ domain: 'issue', action: 'lock', id: num, repo: ctx });
|
|
301
|
+
blocks.push(renderHelp(help));
|
|
302
|
+
return renderOutput(blocks);
|
|
303
|
+
}
|
|
304
|
+
await ghExec(['issue', 'lock', String(num)], ctx);
|
|
305
|
+
const item = await ghJson(['issue', 'view', String(num), '--json', 'number,state,locked'], ctx);
|
|
306
|
+
const blocks = [renderDetail('issue', item, lockResultSchema)];
|
|
307
|
+
const help = getSuggestions({ domain: 'issue', action: 'lock', id: num, repo: ctx });
|
|
308
|
+
blocks.push(renderHelp(help));
|
|
309
|
+
return renderOutput(blocks);
|
|
310
|
+
}
|
|
311
|
+
async function unlockIssue(args, ctx) {
|
|
312
|
+
const num = requireNumber(getPositional(args, 1), 'issue');
|
|
313
|
+
// Idempotent: check current locked state
|
|
314
|
+
const current = await ghJson(['issue', 'view', String(num), '--json', 'state,locked'], ctx);
|
|
315
|
+
if (!current.locked) {
|
|
316
|
+
const item = { number: num, state: current.state, locked: false, _message: 'Already unlocked' };
|
|
317
|
+
const blocks = [renderDetail('issue', { ...item }, [...lockResultSchema, field('_message', 'message')])];
|
|
318
|
+
const help = getSuggestions({ domain: 'issue', action: 'unlock', id: num, repo: ctx });
|
|
319
|
+
blocks.push(renderHelp(help));
|
|
320
|
+
return renderOutput(blocks);
|
|
321
|
+
}
|
|
322
|
+
await ghExec(['issue', 'unlock', String(num)], ctx);
|
|
323
|
+
const item = await ghJson(['issue', 'view', String(num), '--json', 'number,state,locked'], ctx);
|
|
324
|
+
const blocks = [renderDetail('issue', item, lockResultSchema)];
|
|
325
|
+
const help = getSuggestions({ domain: 'issue', action: 'unlock', id: num, repo: ctx });
|
|
326
|
+
blocks.push(renderHelp(help));
|
|
327
|
+
return renderOutput(blocks);
|
|
328
|
+
}
|
|
329
|
+
async function pinIssue(args, ctx) {
|
|
330
|
+
const num = requireNumber(getPositional(args, 1), 'issue');
|
|
331
|
+
// Idempotent: check current pinned state
|
|
332
|
+
const current = await ghJson(['issue', 'view', String(num), '--json', 'state,isPinned'], ctx);
|
|
333
|
+
if (current.isPinned) {
|
|
334
|
+
const item = { number: num, state: current.state, isPinned: true, _message: 'Already pinned' };
|
|
335
|
+
const blocks = [renderDetail('issue', item, [...pinResultSchema, field('_message', 'message')])];
|
|
336
|
+
const help = getSuggestions({ domain: 'issue', action: 'pin', id: num, repo: ctx });
|
|
337
|
+
blocks.push(renderHelp(help));
|
|
338
|
+
return renderOutput(blocks);
|
|
339
|
+
}
|
|
340
|
+
await ghExec(['issue', 'pin', String(num)], ctx);
|
|
341
|
+
const item = await ghJson(['issue', 'view', String(num), '--json', 'number,state,isPinned'], ctx);
|
|
342
|
+
const blocks = [renderDetail('issue', item, pinResultSchema)];
|
|
343
|
+
const help = getSuggestions({ domain: 'issue', action: 'pin', id: num, repo: ctx });
|
|
344
|
+
blocks.push(renderHelp(help));
|
|
345
|
+
return renderOutput(blocks);
|
|
346
|
+
}
|
|
347
|
+
async function unpinIssue(args, ctx) {
|
|
348
|
+
const num = requireNumber(getPositional(args, 1), 'issue');
|
|
349
|
+
// Idempotent: check current pinned state
|
|
350
|
+
const current = await ghJson(['issue', 'view', String(num), '--json', 'state,isPinned'], ctx);
|
|
351
|
+
if (!current.isPinned) {
|
|
352
|
+
const item = { number: num, state: current.state, isPinned: false, _message: 'Already unpinned' };
|
|
353
|
+
const blocks = [renderDetail('issue', item, [...pinResultSchema, field('_message', 'message')])];
|
|
354
|
+
const help = getSuggestions({ domain: 'issue', action: 'unpin', id: num, repo: ctx });
|
|
355
|
+
blocks.push(renderHelp(help));
|
|
356
|
+
return renderOutput(blocks);
|
|
357
|
+
}
|
|
358
|
+
await ghExec(['issue', 'unpin', String(num)], ctx);
|
|
359
|
+
const item = await ghJson(['issue', 'view', String(num), '--json', 'number,state,isPinned'], ctx);
|
|
360
|
+
const blocks = [renderDetail('issue', item, pinResultSchema)];
|
|
361
|
+
const help = getSuggestions({ domain: 'issue', action: 'unpin', id: num, repo: ctx });
|
|
362
|
+
blocks.push(renderHelp(help));
|
|
363
|
+
return renderOutput(blocks);
|
|
364
|
+
}
|
|
365
|
+
async function transferIssue(args, ctx) {
|
|
366
|
+
const num = requireNumber(getPositional(args, 1), 'issue');
|
|
367
|
+
const destRepo = getFlag(args, '--repo');
|
|
368
|
+
if (!destRepo)
|
|
369
|
+
throw new AxiError('--repo is required for transfer', 'VALIDATION_ERROR');
|
|
370
|
+
await ghExec(['issue', 'transfer', String(num), destRepo], ctx);
|
|
371
|
+
// After transfer the issue gets a new URL; try to get it from the output
|
|
372
|
+
// The transferred issue may have a new number in the target repo.
|
|
373
|
+
// We can fetch by the original number since gh resolves it via redirect.
|
|
374
|
+
let item;
|
|
375
|
+
try {
|
|
376
|
+
item = await ghJson(['issue', 'view', String(num), '--json', 'number,url', '--repo', destRepo]);
|
|
377
|
+
}
|
|
378
|
+
catch {
|
|
379
|
+
// Fallback: return what we know
|
|
380
|
+
item = { number: num, url: `https://github.com/${destRepo}/issues/${num}` };
|
|
381
|
+
}
|
|
382
|
+
const blocks = [renderDetail('issue', item, transferResultSchema)];
|
|
383
|
+
const help = getSuggestions({ domain: 'issue', action: 'transfer', id: num, repo: ctx });
|
|
384
|
+
blocks.push(renderHelp(help));
|
|
385
|
+
return renderOutput(blocks);
|
|
386
|
+
}
|
|
387
|
+
// ---------------------------------------------------------------------------
|
|
388
|
+
// Main dispatcher
|
|
389
|
+
// ---------------------------------------------------------------------------
|
|
390
|
+
export async function issueCommand(args, ctx) {
|
|
391
|
+
const sub = args[0];
|
|
392
|
+
if (!sub || hasFlag(args, '--help')) {
|
|
393
|
+
const blocks = [ISSUE_HELP];
|
|
394
|
+
const help = getSuggestions({ domain: 'issue', action: 'help', repo: ctx });
|
|
395
|
+
if (help.length > 0)
|
|
396
|
+
blocks.push(renderHelp(help));
|
|
397
|
+
return renderOutput(blocks);
|
|
398
|
+
}
|
|
399
|
+
switch (sub) {
|
|
400
|
+
case 'list':
|
|
401
|
+
return listIssues(args, ctx);
|
|
402
|
+
case 'view':
|
|
403
|
+
return viewIssue(args, ctx);
|
|
404
|
+
case 'create':
|
|
405
|
+
return createIssue(args, ctx);
|
|
406
|
+
case 'edit':
|
|
407
|
+
return editIssue(args, ctx);
|
|
408
|
+
case 'close':
|
|
409
|
+
return closeIssue(args, ctx);
|
|
410
|
+
case 'reopen':
|
|
411
|
+
return reopenIssue(args, ctx);
|
|
412
|
+
case 'comment':
|
|
413
|
+
return commentOnIssue(args, ctx);
|
|
414
|
+
case 'delete':
|
|
415
|
+
return deleteIssue(args, ctx);
|
|
416
|
+
case 'lock':
|
|
417
|
+
return lockIssue(args, ctx);
|
|
418
|
+
case 'unlock':
|
|
419
|
+
return unlockIssue(args, ctx);
|
|
420
|
+
case 'pin':
|
|
421
|
+
return pinIssue(args, ctx);
|
|
422
|
+
case 'unpin':
|
|
423
|
+
return unpinIssue(args, ctx);
|
|
424
|
+
case 'transfer':
|
|
425
|
+
return transferIssue(args, ctx);
|
|
426
|
+
default:
|
|
427
|
+
return renderError(`Unknown issue subcommand: ${sub}`, 'VALIDATION_ERROR', [
|
|
428
|
+
'Run `gh-axi issue --help` for usage',
|
|
429
|
+
]);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
//# sourceMappingURL=issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../src/commands/issue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { RepoContext } from '../context.js';
|
|
2
|
+
export declare const LABEL_HELP = "usage: gh-axi label <subcommand> [flags]\nsubcommands[4]:\n list, create, edit <name>, delete <name>\nflags{list}:\n --limit <n> (default 500)\nflags{create}:\n --name <text> (required), --color <hex> (required, without #), --description <text>\nflags{edit}:\n --name, --color, --description";
|
|
3
|
+
export declare function labelCommand(args: string[], ctx?: RepoContext): Promise<string>;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { encode } from '@toon-format/toon';
|
|
2
|
+
import { ghJson, ghExec } from '../gh.js';
|
|
3
|
+
import { AxiError } from '../errors.js';
|
|
4
|
+
import { getFlag } from '../args.js';
|
|
5
|
+
import { field, renderList, renderHelp, renderOutput, renderError, } from '../toon.js';
|
|
6
|
+
import { getSuggestions } from '../suggestions.js';
|
|
7
|
+
export const LABEL_HELP = `usage: gh-axi label <subcommand> [flags]
|
|
8
|
+
subcommands[4]:
|
|
9
|
+
list, create, edit <name>, delete <name>
|
|
10
|
+
flags{list}:
|
|
11
|
+
--limit <n> (default 500)
|
|
12
|
+
flags{create}:
|
|
13
|
+
--name <text> (required), --color <hex> (required, without #), --description <text>
|
|
14
|
+
flags{edit}:
|
|
15
|
+
--name, --color, --description`;
|
|
16
|
+
const listSchema = [
|
|
17
|
+
field('name'),
|
|
18
|
+
];
|
|
19
|
+
async function listLabels(args, ctx) {
|
|
20
|
+
const limitArg = getFlag(args, '--limit');
|
|
21
|
+
const limit = limitArg ?? '500';
|
|
22
|
+
const ghArgs = [
|
|
23
|
+
'label', 'list',
|
|
24
|
+
'--json', 'name',
|
|
25
|
+
'--limit', limit,
|
|
26
|
+
];
|
|
27
|
+
const labels = await ghJson(ghArgs, ctx);
|
|
28
|
+
const isEmpty = labels.length === 0;
|
|
29
|
+
// Add a count line so agents don't need to count rows
|
|
30
|
+
const countLine = labels.length === Number(limit)
|
|
31
|
+
? `count: ${labels.length} (showing first ${labels.length}; run \`gh-axi repo view\` for total count)`
|
|
32
|
+
: `count: ${labels.length}`;
|
|
33
|
+
const suggestions = getSuggestions({ domain: 'label', action: 'list', isEmpty, repo: ctx });
|
|
34
|
+
return renderOutput([
|
|
35
|
+
countLine,
|
|
36
|
+
renderList('labels', labels, listSchema),
|
|
37
|
+
renderHelp(suggestions),
|
|
38
|
+
]);
|
|
39
|
+
}
|
|
40
|
+
async function createLabel(args, ctx) {
|
|
41
|
+
const name = getFlag(args, '--name');
|
|
42
|
+
if (!name)
|
|
43
|
+
throw new AxiError('--name is required: gh-axi label create --name "..." --color "..."', 'VALIDATION_ERROR');
|
|
44
|
+
const color = getFlag(args, '--color');
|
|
45
|
+
if (!color)
|
|
46
|
+
throw new AxiError('--color is required: gh-axi label create --name "..." --color "..."', 'VALIDATION_ERROR');
|
|
47
|
+
// Idempotent: check if label already exists
|
|
48
|
+
const existing = await ghJson(['label', 'list', '--json', 'name'], ctx);
|
|
49
|
+
const found = existing.find((l) => typeof l.name === 'string' && l.name.toLowerCase() === name.toLowerCase());
|
|
50
|
+
if (found) {
|
|
51
|
+
const suggestions = getSuggestions({ domain: 'label', action: 'create', repo: ctx });
|
|
52
|
+
return renderOutput([
|
|
53
|
+
encode({ create: 'already_exists', label: found.name }),
|
|
54
|
+
renderHelp(suggestions),
|
|
55
|
+
]);
|
|
56
|
+
}
|
|
57
|
+
const ghArgs = ['label', 'create', name, '--color', color];
|
|
58
|
+
const description = getFlag(args, '--description');
|
|
59
|
+
if (description)
|
|
60
|
+
ghArgs.push('--description', description);
|
|
61
|
+
await ghExec(ghArgs, ctx);
|
|
62
|
+
const suggestions = getSuggestions({ domain: 'label', action: 'create', repo: ctx });
|
|
63
|
+
return renderOutput([
|
|
64
|
+
encode({ created: 'ok', label: name }),
|
|
65
|
+
renderHelp(suggestions),
|
|
66
|
+
]);
|
|
67
|
+
}
|
|
68
|
+
async function editLabel(args, ctx) {
|
|
69
|
+
const positionals = args.filter((a) => !a.startsWith('--'));
|
|
70
|
+
const labelName = positionals[1];
|
|
71
|
+
if (!labelName)
|
|
72
|
+
throw new AxiError('Label name is required: gh-axi label edit <name>', 'VALIDATION_ERROR');
|
|
73
|
+
const ghArgs = ['label', 'edit', labelName];
|
|
74
|
+
const newName = getFlag(args, '--name');
|
|
75
|
+
if (newName)
|
|
76
|
+
ghArgs.push('--name', newName);
|
|
77
|
+
const color = getFlag(args, '--color');
|
|
78
|
+
if (color)
|
|
79
|
+
ghArgs.push('--color', color);
|
|
80
|
+
const description = getFlag(args, '--description');
|
|
81
|
+
if (description)
|
|
82
|
+
ghArgs.push('--description', description);
|
|
83
|
+
await ghExec(ghArgs, ctx);
|
|
84
|
+
const suggestions = getSuggestions({ domain: 'label', action: 'edit', repo: ctx });
|
|
85
|
+
return renderOutput([
|
|
86
|
+
encode({ edit: 'ok', label: newName ?? labelName }),
|
|
87
|
+
renderHelp(suggestions),
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
async function deleteLabel(args, ctx) {
|
|
91
|
+
const positionals = args.filter((a) => !a.startsWith('--'));
|
|
92
|
+
const name = positionals[1];
|
|
93
|
+
if (!name)
|
|
94
|
+
throw new AxiError('Label name is required: gh-axi label delete <name>', 'VALIDATION_ERROR');
|
|
95
|
+
await ghExec(['label', 'delete', name, '--yes'], ctx);
|
|
96
|
+
const suggestions = getSuggestions({ domain: 'label', action: 'delete', repo: ctx });
|
|
97
|
+
return renderOutput([
|
|
98
|
+
encode({ delete: 'ok', label: name }),
|
|
99
|
+
renderHelp(suggestions),
|
|
100
|
+
]);
|
|
101
|
+
}
|
|
102
|
+
export async function labelCommand(args, ctx) {
|
|
103
|
+
const sub = args[0];
|
|
104
|
+
if (sub === '--help' || sub === undefined)
|
|
105
|
+
return LABEL_HELP;
|
|
106
|
+
switch (sub) {
|
|
107
|
+
case 'list':
|
|
108
|
+
return listLabels(args, ctx);
|
|
109
|
+
case 'create':
|
|
110
|
+
return createLabel(args, ctx);
|
|
111
|
+
case 'edit':
|
|
112
|
+
return editLabel(args, ctx);
|
|
113
|
+
case 'delete':
|
|
114
|
+
return deleteLabel(args, ctx);
|
|
115
|
+
default:
|
|
116
|
+
return renderError(`Unknown subcommand: ${sub}`, 'VALIDATION_ERROR', [
|
|
117
|
+
'Available subcommands: list, create, edit, delete',
|
|
118
|
+
]);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.js","sourceRoot":"","sources":["../../../src/commands/label.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { RepoContext } from '../context.js';
|
|
2
|
+
export declare const PR_HELP = "usage: gh-axi pr <subcommand> [flags]\nsubcommands[15]:\n list, view <number>, create, edit <number>, close <number>, merge <number>, review <number>, checks <number>, diff <number>, checkout <number>, ready <number>, reopen <number>, comment <number>, update-branch <number>, revert <number>\nflags{list}:\n --state <open|closed|all>, --label, --assignee, --author, --base, --head, --draft, --limit <n> (default 30)\nflags{view}:\n --comments, --full (show complete body without truncation)\nflags{create}:\n --title <text> (required), --body, --base, --head, --draft, --assignee, --reviewer, --label, --milestone\nflags{merge}:\n --method <merge|squash|rebase>, --auto, --delete-branch, --body, --subject\nflags{review}:\n --approve, --request-changes, --comment, --body\nflags{checks}:\n (none)";
|
|
3
|
+
export declare function prCommand(args: string[], ctx?: RepoContext): Promise<string>;
|