@jacobsandersen/glab-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.
Files changed (82) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +139 -0
  3. package/dist/bin/glab-axi.d.ts +2 -0
  4. package/dist/bin/glab-axi.js +4 -0
  5. package/dist/bin/glab-axi.js.map +1 -0
  6. package/dist/src/args.d.ts +8 -0
  7. package/dist/src/args.js +84 -0
  8. package/dist/src/args.js.map +1 -0
  9. package/dist/src/body.d.ts +15 -0
  10. package/dist/src/body.js +132 -0
  11. package/dist/src/body.js.map +1 -0
  12. package/dist/src/cli.d.ts +9 -0
  13. package/dist/src/cli.js +124 -0
  14. package/dist/src/cli.js.map +1 -0
  15. package/dist/src/commands/api.d.ts +3 -0
  16. package/dist/src/commands/api.js +155 -0
  17. package/dist/src/commands/api.js.map +1 -0
  18. package/dist/src/commands/home.d.ts +3 -0
  19. package/dist/src/commands/home.js +57 -0
  20. package/dist/src/commands/home.js.map +1 -0
  21. package/dist/src/commands/issue.d.ts +3 -0
  22. package/dist/src/commands/issue.js +364 -0
  23. package/dist/src/commands/issue.js.map +1 -0
  24. package/dist/src/commands/job.d.ts +3 -0
  25. package/dist/src/commands/job.js +119 -0
  26. package/dist/src/commands/job.js.map +1 -0
  27. package/dist/src/commands/label.d.ts +3 -0
  28. package/dist/src/commands/label.js +117 -0
  29. package/dist/src/commands/label.js.map +1 -0
  30. package/dist/src/commands/mr.d.ts +3 -0
  31. package/dist/src/commands/mr.js +365 -0
  32. package/dist/src/commands/mr.js.map +1 -0
  33. package/dist/src/commands/pipeline.d.ts +3 -0
  34. package/dist/src/commands/pipeline.js +168 -0
  35. package/dist/src/commands/pipeline.js.map +1 -0
  36. package/dist/src/commands/project.d.ts +3 -0
  37. package/dist/src/commands/project.js +138 -0
  38. package/dist/src/commands/project.js.map +1 -0
  39. package/dist/src/commands/release.d.ts +3 -0
  40. package/dist/src/commands/release.js +179 -0
  41. package/dist/src/commands/release.js.map +1 -0
  42. package/dist/src/commands/search.d.ts +3 -0
  43. package/dist/src/commands/search.js +266 -0
  44. package/dist/src/commands/search.js.map +1 -0
  45. package/dist/src/commands/setup.d.ts +2 -0
  46. package/dist/src/commands/setup.js +23 -0
  47. package/dist/src/commands/setup.js.map +1 -0
  48. package/dist/src/commands/variable.d.ts +3 -0
  49. package/dist/src/commands/variable.js +92 -0
  50. package/dist/src/commands/variable.js.map +1 -0
  51. package/dist/src/context.d.ts +7 -0
  52. package/dist/src/context.js +42 -0
  53. package/dist/src/context.js.map +1 -0
  54. package/dist/src/errors.d.ts +5 -0
  55. package/dist/src/errors.js +81 -0
  56. package/dist/src/errors.js.map +1 -0
  57. package/dist/src/fields.d.ts +10 -0
  58. package/dist/src/fields.js +26 -0
  59. package/dist/src/fields.js.map +1 -0
  60. package/dist/src/format.d.ts +8 -0
  61. package/dist/src/format.js +17 -0
  62. package/dist/src/format.js.map +1 -0
  63. package/dist/src/glab.d.ts +10 -0
  64. package/dist/src/glab.js +73 -0
  65. package/dist/src/glab.js.map +1 -0
  66. package/dist/src/secretValue.d.ts +1 -0
  67. package/dist/src/secretValue.js +33 -0
  68. package/dist/src/secretValue.js.map +1 -0
  69. package/dist/src/skill.d.ts +6 -0
  70. package/dist/src/skill.js +79 -0
  71. package/dist/src/skill.js.map +1 -0
  72. package/dist/src/stdin.d.ts +2 -0
  73. package/dist/src/stdin.js +15 -0
  74. package/dist/src/stdin.js.map +1 -0
  75. package/dist/src/suggestions.d.ts +11 -0
  76. package/dist/src/suggestions.js +262 -0
  77. package/dist/src/suggestions.js.map +1 -0
  78. package/dist/src/toon.d.ts +57 -0
  79. package/dist/src/toon.js +150 -0
  80. package/dist/src/toon.js.map +1 -0
  81. package/package.json +59 -0
  82. package/skills/glab-axi/SKILL.md +51 -0
@@ -0,0 +1,155 @@
1
+ import { encode } from "@toon-format/toon";
2
+ import { glabExec } from "../glab.js";
3
+ import { AxiError } from "../errors.js";
4
+ import { getAllFlags } from "../args.js";
5
+ import { cleanBody } from "../body.js";
6
+ export const API_HELP = `usage: glab-axi api [<method>] <path>
7
+ description: Make an authenticated GitLab API request. Defaults to GET if no method specified.
8
+ methods[6]:
9
+ GET, POST, PUT, PATCH, DELETE
10
+ flags[2]:
11
+ --field <key=value> (repeatable), --header <key:value> (repeatable)
12
+ examples:
13
+ glab-axi api /projects/{owner}%2F{repo}
14
+ glab-axi api POST /projects/{id}/issues --field title="Bug report"
15
+ glab-axi api GET /projects/{id}/merge_requests`;
16
+ const HTTP_METHODS = new Set(["GET", "POST", "PUT", "PATCH", "DELETE"]);
17
+ const RAW_OUTPUT_TRUNCATION_LIMIT = 4000;
18
+ const LONG_STRING_CLEANUP_THRESHOLD = 200;
19
+ const STRING_VALUE_TRUNCATION_LIMIT = 2000;
20
+ export async function apiCommand(args, ctx) {
21
+ if (args[0] === "--help" || args.length === 0)
22
+ return API_HELP;
23
+ const positionals = [];
24
+ for (let i = 0; i < args.length; i++) {
25
+ if (args[i].startsWith("--")) {
26
+ i++;
27
+ }
28
+ else {
29
+ positionals.push(args[i]);
30
+ }
31
+ }
32
+ let method;
33
+ let path;
34
+ if (positionals.length >= 2 &&
35
+ HTTP_METHODS.has(positionals[0].toUpperCase())) {
36
+ method = positionals[0].toUpperCase();
37
+ path = positionals[1];
38
+ }
39
+ else if (positionals.length >= 1) {
40
+ method = "GET";
41
+ path = positionals[0];
42
+ }
43
+ else {
44
+ throw new AxiError("API path is required: glab-axi api [<method>] <path>", "VALIDATION_ERROR");
45
+ }
46
+ const ghArgs = ["api", path, "--method", method];
47
+ const fields = getAllFlags(args, "--field");
48
+ for (const f of fields) {
49
+ ghArgs.push("--field", f);
50
+ }
51
+ const headers = getAllFlags(args, "--header");
52
+ for (const h of headers) {
53
+ ghArgs.push("--header", h);
54
+ }
55
+ const raw = await glabExec(ghArgs, ctx);
56
+ try {
57
+ const data = JSON.parse(raw);
58
+ const cleaned = stripNoisyFields(data);
59
+ return encode(cleaned);
60
+ }
61
+ catch {
62
+ const trimmed = raw.trim();
63
+ const truncated = trimmed.length > RAW_OUTPUT_TRUNCATION_LIMIT;
64
+ const result = {
65
+ api_response: {
66
+ body: truncated
67
+ ? trimmed.slice(0, RAW_OUTPUT_TRUNCATION_LIMIT)
68
+ : trimmed,
69
+ truncated,
70
+ },
71
+ };
72
+ if (truncated) {
73
+ result.api_response.original_length =
74
+ trimmed.length;
75
+ }
76
+ return encode(result);
77
+ }
78
+ }
79
+ const NOISY_KEYS = new Set([
80
+ "avatar_url",
81
+ "gravatar_id",
82
+ "followers_url",
83
+ "following_url",
84
+ "gists_url",
85
+ "starred_url",
86
+ "subscriptions_url",
87
+ "organizations_url",
88
+ "repos_url",
89
+ "events_url",
90
+ "received_events_url",
91
+ "labels_url",
92
+ "comments_url",
93
+ "timeline_url",
94
+ "node_id",
95
+ "url",
96
+ "repository_url",
97
+ "html_url",
98
+ "reactions",
99
+ "user_view_type",
100
+ "site_admin",
101
+ "score",
102
+ "permissions",
103
+ "verification",
104
+ "_links",
105
+ ]);
106
+ function isTemplateUrlKey(key) {
107
+ if (!key.endsWith("_url"))
108
+ return false;
109
+ const KEEP_URL_KEYS = new Set([
110
+ "diff_url",
111
+ "patch_url",
112
+ "clone_url",
113
+ "ssh_url",
114
+ "git_url",
115
+ "svn_url",
116
+ "commit_url",
117
+ "web_url",
118
+ ]);
119
+ return !KEEP_URL_KEYS.has(key);
120
+ }
121
+ function stripNoisyFields(obj, depth = 0) {
122
+ if (depth > 8)
123
+ return obj;
124
+ if (Array.isArray(obj)) {
125
+ return obj.map((item) => stripNoisyFields(item, depth + 1));
126
+ }
127
+ if (obj !== null && typeof obj === "object") {
128
+ const record = obj;
129
+ const result = {};
130
+ for (const [key, value] of Object.entries(record)) {
131
+ if (NOISY_KEYS.has(key))
132
+ continue;
133
+ if (isTemplateUrlKey(key))
134
+ continue;
135
+ if (key === "user" &&
136
+ value &&
137
+ typeof value === "object" &&
138
+ "username" in value) {
139
+ result[key] = value.username;
140
+ continue;
141
+ }
142
+ result[key] = stripNoisyFields(value, depth + 1);
143
+ }
144
+ return result;
145
+ }
146
+ if (typeof obj === "string" && obj.length > LONG_STRING_CLEANUP_THRESHOLD) {
147
+ const s = cleanBody(obj);
148
+ if (s.length > STRING_VALUE_TRUNCATION_LIMIT) {
149
+ return s.slice(0, STRING_VALUE_TRUNCATION_LIMIT) + "... (truncated)";
150
+ }
151
+ return s;
152
+ }
153
+ return obj;
154
+ }
155
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/commands/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RepoContext } from "../context.js";
2
+ export declare const HOME_HELP = "";
3
+ export declare function homeCommand(_args: string[], ctx?: RepoContext): Promise<string>;
@@ -0,0 +1,57 @@
1
+ import { glabJson } from "../glab.js";
2
+ import { field, lower, pluck, mapEnum, renderList, renderHelp, renderOutput, } from "../toon.js";
3
+ import { getSuggestions } from "../suggestions.js";
4
+ import { encode } from "@toon-format/toon";
5
+ export const HOME_HELP = "";
6
+ const issueSchema = [
7
+ field("iid", "number"),
8
+ field("title"),
9
+ lower("state"),
10
+ pluck("author", "username", "author"),
11
+ ];
12
+ const mrSchema = [
13
+ field("iid", "number"),
14
+ field("title"),
15
+ pluck("author", "username", "author"),
16
+ mapEnum("merge_status", {
17
+ can_be_merged: "can_merge",
18
+ cannot_be_merged: "conflict",
19
+ unchecked: "unchecked",
20
+ }, "unknown", "merge_status"),
21
+ ];
22
+ export async function homeCommand(_args, ctx) {
23
+ const [issues, mrs] = await Promise.all([
24
+ glabJson(["issue", "list", "--json", "iid,title,state,author", "--per-page", "3"], ctx).catch(() => []),
25
+ glabJson([
26
+ "mr",
27
+ "list",
28
+ "--json",
29
+ "iid,title,author,merge_status",
30
+ "--per-page",
31
+ "3",
32
+ ], ctx).catch(() => []),
33
+ ]);
34
+ const blocks = [];
35
+ if (ctx) {
36
+ blocks.push(encode({ project: ctx.nwo }));
37
+ }
38
+ blocks.push(issues.length
39
+ ? renderList("issues", issues, issueSchema)
40
+ : "issues: 0 open");
41
+ blocks.push(mrs.length
42
+ ? renderList("merge_requests", mrs, mrSchema)
43
+ : "merge_requests: 0 open");
44
+ const hints = [];
45
+ if (issues.length >= 3)
46
+ hints.push("Run `glab-axi issue list` for full issue list");
47
+ if (mrs.length >= 3)
48
+ hints.push("Run `glab-axi mr list` for full MR list");
49
+ const suggestions = getSuggestions({
50
+ domain: "home",
51
+ action: "home",
52
+ repo: ctx,
53
+ });
54
+ blocks.push(renderHelp([...hints, ...suggestions]));
55
+ return renderOutput(blocks);
56
+ }
57
+ //# sourceMappingURL=home.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/commands/home.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,OAAO,EACP,UAAU,EACV,UAAU,EACV,YAAY,GAEb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAE5B,MAAM,WAAW,GAAe;IAC9B,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;IACtB,KAAK,CAAC,OAAO,CAAC;IACd,KAAK,CAAC,OAAO,CAAC;IACd,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;CACtC,CAAC;AAEF,MAAM,QAAQ,GAAe;IAC3B,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;IACtB,KAAK,CAAC,OAAO,CAAC;IACd,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;IACrC,OAAO,CACL,cAAc,EACd;QACE,aAAa,EAAE,WAAW;QAC1B,gBAAgB,EAAE,UAAU;QAC5B,SAAS,EAAE,WAAW;KACvB,EACD,SAAS,EACT,cAAc,CACf;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAe,EACf,GAAiB;IAEjB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACtC,QAAQ,CACN,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE,YAAY,EAAE,GAAG,CAAC,EACxE,GAAG,CACJ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAA+B,CAAC;QAC9C,QAAQ,CACN;YACE,IAAI;YACJ,MAAM;YACN,QAAQ;YACR,+BAA+B;YAC/B,YAAY;YACZ,GAAG;SACJ,EACD,GAAG,CACJ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAA+B,CAAC;KAC/C,CAAC,CAAC;IAEH,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,MAAM;QACX,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC;QAC3C,CAAC,CAAC,gBAAgB,CACrB,CAAC;IACF,MAAM,CAAC,IAAI,CACT,GAAG,CAAC,MAAM;QACR,CAAC,CAAC,UAAU,CAAC,gBAAgB,EAAE,GAAG,EAAE,QAAQ,CAAC;QAC7C,CAAC,CAAC,wBAAwB,CAC7B,CAAC;IAEF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC9D,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAEpD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { RepoContext } from "../context.js";
2
+ export declare const ISSUE_HELP = "usage: glab-axi issue <subcommand> [flags]\nsubcommands[9]:\n list, view <number>, create, edit <number>, close <number>, reopen <number>, note <number>, subscribe <number>, unsubscribe <number>\nflags{list}:\n --state <opened|closed|all>, --label <name>, --assignee <username>, --author <username>, --milestone <name>, --confidential, --per-page <n> (default 20), --fields <a,b,c>\nflags{view}:\n --comments, --full (show complete description without truncation)\nflags{create}:\n --title <text> (required), --description <text> or --body-file <path>, --label <name> (repeatable), --assignee <username>, --milestone <name>, --confidential\nflags{edit}:\n --title, --description <text> or --body-file <path>, --add-label, --remove-label, --add-assignee, --remove-assignee, --milestone\nflags{note}:\n --body <text> or --body-file <path> (required)\nexamples:\n glab-axi issue list --state closed --label bug\n glab-axi issue view 42 --comments\n glab-axi issue create --title \"Fix login\" --description \"Steps to reproduce...\"\n glab-axi issue note 42 --body-file comment.md\n glab-axi issue close 42";
3
+ export declare function issueCommand(args: string[], ctx?: RepoContext): Promise<string>;
@@ -0,0 +1,364 @@
1
+ import { glabJson, glabExec } from "../glab.js";
2
+ import { AxiError } from "../errors.js";
3
+ import { getSuggestions } from "../suggestions.js";
4
+ import { hasFlag, getFlag, getAllFlags, getPositional, requireNumber, takeFlag, takeBoolFlag, } from "../args.js";
5
+ import { takeBody, truncateBody } from "../body.js";
6
+ import { parseFields } from "../fields.js";
7
+ import { formatCountLine } from "../format.js";
8
+ import { field, pluck, joinArray, relativeTime, lower, custom, renderList, renderDetail, renderHelp, renderError, renderOutput, } from "../toon.js";
9
+ export const ISSUE_HELP = `usage: glab-axi issue <subcommand> [flags]
10
+ subcommands[9]:
11
+ list, view <number>, create, edit <number>, close <number>, reopen <number>, note <number>, subscribe <number>, unsubscribe <number>
12
+ flags{list}:
13
+ --state <opened|closed|all>, --label <name>, --assignee <username>, --author <username>, --milestone <name>, --confidential, --per-page <n> (default 20), --fields <a,b,c>
14
+ flags{view}:
15
+ --comments, --full (show complete description without truncation)
16
+ flags{create}:
17
+ --title <text> (required), --description <text> or --body-file <path>, --label <name> (repeatable), --assignee <username>, --milestone <name>, --confidential
18
+ flags{edit}:
19
+ --title, --description <text> or --body-file <path>, --add-label, --remove-label, --add-assignee, --remove-assignee, --milestone
20
+ flags{note}:
21
+ --body <text> or --body-file <path> (required)
22
+ examples:
23
+ glab-axi issue list --state closed --label bug
24
+ glab-axi issue view 42 --comments
25
+ glab-axi issue create --title "Fix login" --description "Steps to reproduce..."
26
+ glab-axi issue note 42 --body-file comment.md
27
+ glab-axi issue close 42`;
28
+ const listSchema = [
29
+ field("iid", "number"),
30
+ field("title"),
31
+ lower("state"),
32
+ pluck("author", "username", "author"),
33
+ relativeTime("created_at", "created"),
34
+ ];
35
+ const viewSchema = [
36
+ field("iid", "number"),
37
+ field("title"),
38
+ lower("state"),
39
+ pluck("author", "username", "author"),
40
+ relativeTime("created_at", "created"),
41
+ custom("description", (item) => truncateBody(item.description, 500)),
42
+ ];
43
+ const viewSchemaFull = viewSchema.map((f) => "as" in f && f.as === "description"
44
+ ? custom("description", (item) => typeof item.description === "string" ? item.description : "")
45
+ : f);
46
+ const createResultSchema = [
47
+ field("iid", "number"),
48
+ field("title"),
49
+ lower("state"),
50
+ field("web_url", "url"),
51
+ ];
52
+ const editResultSchema = [
53
+ field("iid", "number"),
54
+ field("title"),
55
+ lower("state"),
56
+ joinArray("labels", "name", "labels"),
57
+ joinArray("assignees", "username", "assignees"),
58
+ ];
59
+ const stateResultSchema = [field("iid", "number"), lower("state")];
60
+ const noteResultSchema = [
61
+ field("iid", "issue"),
62
+ pluck("author", "username", "author"),
63
+ relativeTime("created_at", "created"),
64
+ custom("body", (item) => truncateBody(item.body, 800)),
65
+ ];
66
+ const ISSUE_LIST_EXTRA_FIELDS = {
67
+ description: { jsonKey: "description", def: field("description") },
68
+ closed_at: {
69
+ jsonKey: "closed_at",
70
+ def: relativeTime("closed_at", "closed_at"),
71
+ },
72
+ labels: { jsonKey: "labels", def: joinArray("labels", "name", "labels") },
73
+ milestone: {
74
+ jsonKey: "milestone",
75
+ def: pluck("milestone", "title", "milestone"),
76
+ },
77
+ updated_at: {
78
+ jsonKey: "updated_at",
79
+ def: relativeTime("updated_at", "updated_at"),
80
+ },
81
+ url: { jsonKey: "web_url", def: field("web_url", "url") },
82
+ };
83
+ async function listIssues(args, ctx) {
84
+ const fieldsArg = takeFlag(args, "--fields");
85
+ const { extraDefs, extraJsonKeys } = parseFields(fieldsArg, ISSUE_LIST_EXTRA_FIELDS);
86
+ const state = takeFlag(args, "--state");
87
+ const label = takeFlag(args, "--label");
88
+ const assignee = takeFlag(args, "--assignee");
89
+ const author = takeFlag(args, "--author");
90
+ const milestone = takeFlag(args, "--milestone");
91
+ const confidential = takeBoolFlag(args, "--confidential");
92
+ const perPage = takeFlag(args, "--per-page") ?? "20";
93
+ const baseJsonFields = "iid,title,state,author,created_at";
94
+ const jsonFields = extraJsonKeys.length > 0
95
+ ? baseJsonFields + "," + extraJsonKeys.join(",")
96
+ : baseJsonFields;
97
+ const ghArgs = ["issue", "list", "--json", jsonFields, "--per-page", perPage];
98
+ if (state)
99
+ ghArgs.push("--state", state);
100
+ if (label)
101
+ ghArgs.push("--label", label);
102
+ if (assignee)
103
+ ghArgs.push("--assignee", assignee);
104
+ if (author)
105
+ ghArgs.push("--author", author);
106
+ if (milestone)
107
+ ghArgs.push("--milestone", milestone);
108
+ if (confidential)
109
+ ghArgs.push("--confidential");
110
+ const items = await glabJson(ghArgs, ctx);
111
+ const isEmpty = items.length === 0;
112
+ const limitNum = Number(perPage);
113
+ const countLine = formatCountLine({ count: items.length, limit: limitNum });
114
+ const extendedSchema = extraDefs.length > 0 ? [...listSchema, ...extraDefs] : listSchema;
115
+ const blocks = [
116
+ countLine,
117
+ renderList("issues", items, extendedSchema),
118
+ ];
119
+ const help = getSuggestions({
120
+ domain: "issue",
121
+ action: "list",
122
+ isEmpty,
123
+ repo: ctx,
124
+ });
125
+ blocks.push(renderHelp(help));
126
+ return renderOutput(blocks);
127
+ }
128
+ async function viewIssue(args, ctx) {
129
+ const num = requireNumber(getPositional(args, 1), "issue");
130
+ const withNotes = hasFlag(args, "--comments");
131
+ const full = hasFlag(args, "--full");
132
+ const fields = "iid,title,state,author,created_at,description,labels,assignees,milestone" +
133
+ (withNotes ? ",notes" : "");
134
+ const ghArgs = ["issue", "view", String(num), "--json", fields];
135
+ const item = await glabJson(ghArgs, ctx);
136
+ const schema = full ? viewSchemaFull : viewSchema;
137
+ const blocks = [renderDetail("issue", item, schema)];
138
+ if (withNotes && Array.isArray(item.notes)) {
139
+ blocks.push(renderList("notes", item.notes, noteResultSchema.filter((d) => ("key" in d ? d.key !== "iid" : true))));
140
+ }
141
+ return renderOutput(blocks);
142
+ }
143
+ async function createIssue(args, ctx) {
144
+ const title = getFlag(args, "--title");
145
+ if (!title)
146
+ throw new AxiError("--title is required", "VALIDATION_ERROR");
147
+ const description = takeBody(args, {
148
+ inlineFlags: ["--description"],
149
+ fileFlags: ["--body-file"],
150
+ label: "description",
151
+ });
152
+ const labels = getAllFlags(args, "--label");
153
+ const assignee = getFlag(args, "--assignee");
154
+ const milestone = getFlag(args, "--milestone");
155
+ const confidential = takeBoolFlag(args, "--confidential");
156
+ const ghArgs = ["issue", "create", "--title", title];
157
+ if (description !== undefined)
158
+ ghArgs.push("--description", description);
159
+ for (const l of labels)
160
+ ghArgs.push("--label", l);
161
+ if (assignee)
162
+ ghArgs.push("--assignee", assignee);
163
+ if (milestone)
164
+ ghArgs.push("--milestone", milestone);
165
+ if (confidential)
166
+ ghArgs.push("--confidential");
167
+ const output = await glabExec(ghArgs, ctx);
168
+ const urlMatch = output.match(/https:\/\/gitlab\.com\/[^\s]+/);
169
+ const url = urlMatch ? urlMatch[0] : output.trim();
170
+ const numMatch = url.match(/\/-\/issues\/(\d+)/);
171
+ const num = numMatch ? parseInt(numMatch[1], 10) : 0;
172
+ const item = await glabJson(["issue", "view", String(num), "--json", "iid,title,state,web_url"], ctx);
173
+ const blocks = [renderDetail("issue", item, createResultSchema)];
174
+ const help = getSuggestions({
175
+ domain: "issue",
176
+ action: "create",
177
+ id: num,
178
+ repo: ctx,
179
+ });
180
+ blocks.push(renderHelp(help));
181
+ return renderOutput(blocks);
182
+ }
183
+ async function editIssue(args, ctx) {
184
+ const num = requireNumber(getPositional(args, 1), "issue");
185
+ const title = getFlag(args, "--title");
186
+ const description = takeBody(args, {
187
+ inlineFlags: ["--description"],
188
+ fileFlags: ["--body-file"],
189
+ label: "description",
190
+ });
191
+ const addLabel = getFlag(args, "--add-label");
192
+ const removeLabel = getFlag(args, "--remove-label");
193
+ const addAssignee = getFlag(args, "--add-assignee");
194
+ const removeAssignee = getFlag(args, "--remove-assignee");
195
+ const milestone = getFlag(args, "--milestone");
196
+ const ghArgs = ["issue", "edit", String(num)];
197
+ if (title)
198
+ ghArgs.push("--title", title);
199
+ if (description !== undefined)
200
+ ghArgs.push("--description", description);
201
+ if (addLabel)
202
+ ghArgs.push("--add-label", addLabel);
203
+ if (removeLabel)
204
+ ghArgs.push("--remove-label", removeLabel);
205
+ if (addAssignee)
206
+ ghArgs.push("--add-assignee", addAssignee);
207
+ if (removeAssignee)
208
+ ghArgs.push("--remove-assignee", removeAssignee);
209
+ if (milestone)
210
+ ghArgs.push("--milestone", milestone);
211
+ if (ghArgs.length > 3) {
212
+ await glabExec(ghArgs, ctx);
213
+ }
214
+ const item = await glabJson([
215
+ "issue",
216
+ "view",
217
+ String(num),
218
+ "--json",
219
+ "iid,title,state,labels,assignees",
220
+ ], ctx);
221
+ const blocks = [renderDetail("issue", item, editResultSchema)];
222
+ const help = getSuggestions({
223
+ domain: "issue",
224
+ action: "edit",
225
+ id: num,
226
+ repo: ctx,
227
+ });
228
+ blocks.push(renderHelp(help));
229
+ return renderOutput(blocks);
230
+ }
231
+ async function closeIssue(args, ctx) {
232
+ const num = requireNumber(getPositional(args, 1), "issue");
233
+ const current = await glabJson(["issue", "view", String(num), "--json", "state"], ctx);
234
+ if (current.state.toLowerCase() === "closed") {
235
+ const item = await glabJson(["issue", "view", String(num), "--json", "iid,state"], ctx);
236
+ const blocks = [
237
+ renderDetail("issue", { ...item, _message: "Already closed" }, [
238
+ ...stateResultSchema,
239
+ field("_message", "message"),
240
+ ]),
241
+ ];
242
+ const help = getSuggestions({
243
+ domain: "issue",
244
+ action: "close",
245
+ id: num,
246
+ repo: ctx,
247
+ });
248
+ blocks.push(renderHelp(help));
249
+ return renderOutput(blocks);
250
+ }
251
+ await glabExec(["issue", "close", String(num)], ctx);
252
+ const item = await glabJson(["issue", "view", String(num), "--json", "iid,state"], ctx);
253
+ const blocks = [renderDetail("issue", item, stateResultSchema)];
254
+ const help = getSuggestions({
255
+ domain: "issue",
256
+ action: "close",
257
+ id: num,
258
+ repo: ctx,
259
+ });
260
+ blocks.push(renderHelp(help));
261
+ return renderOutput(blocks);
262
+ }
263
+ async function reopenIssue(args, ctx) {
264
+ const num = requireNumber(getPositional(args, 1), "issue");
265
+ const current = await glabJson(["issue", "view", String(num), "--json", "state"], ctx);
266
+ if (current.state.toLowerCase() === "opened") {
267
+ const item = await glabJson(["issue", "view", String(num), "--json", "iid,state"], ctx);
268
+ const blocks = [
269
+ renderDetail("issue", { ...item, _message: "Already open" }, [
270
+ ...stateResultSchema,
271
+ field("_message", "message"),
272
+ ]),
273
+ ];
274
+ const help = getSuggestions({
275
+ domain: "issue",
276
+ action: "reopen",
277
+ id: num,
278
+ repo: ctx,
279
+ });
280
+ blocks.push(renderHelp(help));
281
+ return renderOutput(blocks);
282
+ }
283
+ await glabExec(["issue", "reopen", String(num)], ctx);
284
+ const item = await glabJson(["issue", "view", String(num), "--json", "iid,state"], ctx);
285
+ const blocks = [renderDetail("issue", item, stateResultSchema)];
286
+ const help = getSuggestions({
287
+ domain: "issue",
288
+ action: "reopen",
289
+ id: num,
290
+ repo: ctx,
291
+ });
292
+ blocks.push(renderHelp(help));
293
+ return renderOutput(blocks);
294
+ }
295
+ async function noteOnIssue(args, ctx) {
296
+ const num = requireNumber(getPositional(args, 1), "issue");
297
+ const body = takeBody(args, { required: true });
298
+ await glabExec(["issue", "note", String(num), "--body", body], ctx);
299
+ const issue = await glabJson(["issue", "view", String(num), "--json", "notes"], ctx);
300
+ const lastNote = issue.notes[issue.notes.length - 1];
301
+ const noteItem = { ...lastNote, iid: num };
302
+ const blocks = [renderDetail("note", noteItem, noteResultSchema)];
303
+ const help = getSuggestions({
304
+ domain: "issue",
305
+ action: "note",
306
+ id: num,
307
+ repo: ctx,
308
+ });
309
+ blocks.push(renderHelp(help));
310
+ return renderOutput(blocks);
311
+ }
312
+ async function subscribeIssue(args, ctx) {
313
+ const num = requireNumber(getPositional(args, 1), "issue");
314
+ await glabExec(["issue", "subscribe", String(num)], ctx);
315
+ return renderOutput([
316
+ renderDetail("issue", { number: num, subscribed: true }, [
317
+ field("number"),
318
+ field("subscribed"),
319
+ ]),
320
+ ]);
321
+ }
322
+ async function unsubscribeIssue(args, ctx) {
323
+ const num = requireNumber(getPositional(args, 1), "issue");
324
+ await glabExec(["issue", "unsubscribe", String(num)], ctx);
325
+ return renderOutput([
326
+ renderDetail("issue", { number: num, subscribed: false }, [
327
+ field("number"),
328
+ field("subscribed"),
329
+ ]),
330
+ ]);
331
+ }
332
+ export async function issueCommand(args, ctx) {
333
+ const sub = args[0];
334
+ if (!sub || hasFlag(args, "--help")) {
335
+ const blocks = [ISSUE_HELP];
336
+ const help = getSuggestions({ domain: "issue", action: "help", repo: ctx });
337
+ if (help.length > 0)
338
+ blocks.push(renderHelp(help));
339
+ return renderOutput(blocks);
340
+ }
341
+ switch (sub) {
342
+ case "list":
343
+ return listIssues(args, ctx);
344
+ case "view":
345
+ return viewIssue(args, ctx);
346
+ case "create":
347
+ return createIssue(args, ctx);
348
+ case "edit":
349
+ return editIssue(args, ctx);
350
+ case "close":
351
+ return closeIssue(args, ctx);
352
+ case "reopen":
353
+ return reopenIssue(args, ctx);
354
+ case "note":
355
+ return noteOnIssue(args, ctx);
356
+ case "subscribe":
357
+ return subscribeIssue(args, ctx);
358
+ case "unsubscribe":
359
+ return unsubscribeIssue(args, ctx);
360
+ default:
361
+ return renderError(`Unknown issue subcommand: ${sub}`, "VALIDATION_ERROR", ["Run `glab-axi issue --help` for usage"]);
362
+ }
363
+ }
364
+ //# 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 JOB_HELP = "usage: glab-axi job <subcommand> [flags]\nsubcommands[4]:\n list, view <id>, log <id>, retry <id>\nflags{list}:\n --pipeline <id>, --per-page <n> (default 20)\nexamples:\n glab-axi job list --pipeline 12345\n glab-axi job view 67890\n glab-axi job log 67890\n glab-axi job retry 67890";
3
+ export declare function jobCommand(args: string[], ctx?: RepoContext): Promise<string>;