@bretwardjames/ghp-cli 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 (94) hide show
  1. package/README.md +176 -0
  2. package/dist/branch-linker.d.ts +15 -0
  3. package/dist/branch-linker.d.ts.map +1 -0
  4. package/dist/branch-linker.js +60 -0
  5. package/dist/branch-linker.js.map +1 -0
  6. package/dist/commands/add-issue.d.ts +11 -0
  7. package/dist/commands/add-issue.d.ts.map +1 -0
  8. package/dist/commands/add-issue.js +228 -0
  9. package/dist/commands/add-issue.js.map +1 -0
  10. package/dist/commands/assign.d.ts +6 -0
  11. package/dist/commands/assign.d.ts.map +1 -0
  12. package/dist/commands/assign.js +44 -0
  13. package/dist/commands/assign.js.map +1 -0
  14. package/dist/commands/auth.d.ts +6 -0
  15. package/dist/commands/auth.d.ts.map +1 -0
  16. package/dist/commands/auth.js +31 -0
  17. package/dist/commands/auth.js.map +1 -0
  18. package/dist/commands/comment.d.ts +6 -0
  19. package/dist/commands/comment.d.ts.map +1 -0
  20. package/dist/commands/comment.js +83 -0
  21. package/dist/commands/comment.js.map +1 -0
  22. package/dist/commands/config.d.ts +5 -0
  23. package/dist/commands/config.d.ts.map +1 -0
  24. package/dist/commands/config.js +94 -0
  25. package/dist/commands/config.js.map +1 -0
  26. package/dist/commands/done.d.ts +2 -0
  27. package/dist/commands/done.d.ts.map +1 -0
  28. package/dist/commands/done.js +54 -0
  29. package/dist/commands/done.js.map +1 -0
  30. package/dist/commands/link-branch.d.ts +2 -0
  31. package/dist/commands/link-branch.d.ts.map +1 -0
  32. package/dist/commands/link-branch.js +44 -0
  33. package/dist/commands/link-branch.js.map +1 -0
  34. package/dist/commands/move.d.ts +2 -0
  35. package/dist/commands/move.d.ts.map +1 -0
  36. package/dist/commands/move.js +53 -0
  37. package/dist/commands/move.js.map +1 -0
  38. package/dist/commands/open.d.ts +6 -0
  39. package/dist/commands/open.d.ts.map +1 -0
  40. package/dist/commands/open.js +189 -0
  41. package/dist/commands/open.js.map +1 -0
  42. package/dist/commands/plan.d.ts +2 -0
  43. package/dist/commands/plan.d.ts.map +1 -0
  44. package/dist/commands/plan.js +403 -0
  45. package/dist/commands/plan.js.map +1 -0
  46. package/dist/commands/pr.d.ts +7 -0
  47. package/dist/commands/pr.d.ts.map +1 -0
  48. package/dist/commands/pr.js +102 -0
  49. package/dist/commands/pr.js.map +1 -0
  50. package/dist/commands/set-field.d.ts +2 -0
  51. package/dist/commands/set-field.d.ts.map +1 -0
  52. package/dist/commands/set-field.js +69 -0
  53. package/dist/commands/set-field.js.map +1 -0
  54. package/dist/commands/slice.d.ts +8 -0
  55. package/dist/commands/slice.d.ts.map +1 -0
  56. package/dist/commands/slice.js +85 -0
  57. package/dist/commands/slice.js.map +1 -0
  58. package/dist/commands/start.d.ts +7 -0
  59. package/dist/commands/start.d.ts.map +1 -0
  60. package/dist/commands/start.js +153 -0
  61. package/dist/commands/start.js.map +1 -0
  62. package/dist/commands/switch.d.ts +2 -0
  63. package/dist/commands/switch.d.ts.map +1 -0
  64. package/dist/commands/switch.js +44 -0
  65. package/dist/commands/switch.js.map +1 -0
  66. package/dist/commands/unlink-branch.d.ts +2 -0
  67. package/dist/commands/unlink-branch.d.ts.map +1 -0
  68. package/dist/commands/unlink-branch.js +28 -0
  69. package/dist/commands/unlink-branch.js.map +1 -0
  70. package/dist/commands/work.d.ts +9 -0
  71. package/dist/commands/work.d.ts.map +1 -0
  72. package/dist/commands/work.js +118 -0
  73. package/dist/commands/work.js.map +1 -0
  74. package/dist/config.d.ts +44 -0
  75. package/dist/config.d.ts.map +1 -0
  76. package/dist/config.js +88 -0
  77. package/dist/config.js.map +1 -0
  78. package/dist/git-utils.d.ts +55 -0
  79. package/dist/git-utils.d.ts.map +1 -0
  80. package/dist/git-utils.js +140 -0
  81. package/dist/git-utils.js.map +1 -0
  82. package/dist/github-api.d.ts +110 -0
  83. package/dist/github-api.d.ts.map +1 -0
  84. package/dist/github-api.js +579 -0
  85. package/dist/github-api.js.map +1 -0
  86. package/dist/index.d.ts +3 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +149 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/types.d.ts +37 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +2 -0
  93. package/dist/types.js.map +1 -0
  94. package/package.json +48 -0
@@ -0,0 +1,403 @@
1
+ import chalk from 'chalk';
2
+ import { api } from '../github-api.js';
3
+ import { detectRepository } from '../git-utils.js';
4
+ import { getShortcut, getPlanDefaults, listShortcuts } from '../config.js';
5
+ export async function planCommand(shortcut, command) {
6
+ // Commander passes (shortcut, options) for optional positional args
7
+ // The options object is passed directly, not as command.opts()
8
+ const cliOpts = command?.opts?.() || command || {};
9
+ let options;
10
+ let shortcutName = shortcut;
11
+ // Load defaults first
12
+ const defaults = getPlanDefaults();
13
+ // If shortcut specified, load and merge it
14
+ if (shortcutName) {
15
+ const shortcut = getShortcut(shortcutName);
16
+ if (!shortcut) {
17
+ console.error(chalk.red('Unknown shortcut:'), shortcutName);
18
+ console.log();
19
+ const shortcuts = listShortcuts();
20
+ if (Object.keys(shortcuts).length > 0) {
21
+ console.log(chalk.dim('Available shortcuts:'));
22
+ for (const [name, sc] of Object.entries(shortcuts)) {
23
+ const parts = [];
24
+ if (sc.project)
25
+ parts.push(`--project ${sc.project}`);
26
+ if (sc.status)
27
+ parts.push(`--status ${sc.status}`);
28
+ if (sc.mine)
29
+ parts.push('--mine');
30
+ if (sc.unassigned)
31
+ parts.push('--unassigned');
32
+ if (sc.slice)
33
+ parts.push(...sc.slice.map(s => `--slice ${s}`));
34
+ if (sc.sort)
35
+ parts.push(`--sort ${sc.sort}`);
36
+ console.log(` ${chalk.cyan(name)}: ${parts.join(' ')}`);
37
+ }
38
+ }
39
+ else {
40
+ console.log(chalk.dim('No shortcuts configured. Add them to ~/.config/ghp-cli/config.json'));
41
+ }
42
+ process.exit(1);
43
+ }
44
+ // Merge: defaults < shortcut < CLI options
45
+ options = {
46
+ ...defaults,
47
+ ...shortcut,
48
+ ...cliOpts,
49
+ // Merge slice arrays
50
+ slice: [...(defaults.slice || []), ...(shortcut.slice || []), ...(cliOpts.slice || [])],
51
+ };
52
+ }
53
+ else {
54
+ // Merge: defaults < CLI options
55
+ options = {
56
+ ...defaults,
57
+ ...cliOpts,
58
+ slice: [...(defaults.slice || []), ...(cliOpts.slice || [])],
59
+ };
60
+ }
61
+ // Remove duplicate slices
62
+ if (options.slice) {
63
+ options.slice = [...new Set(options.slice)];
64
+ }
65
+ const repo = await detectRepository();
66
+ if (!repo) {
67
+ console.error(chalk.red('Error:'), 'Not in a git repository with a GitHub remote');
68
+ process.exit(1);
69
+ }
70
+ const authenticated = await api.authenticate();
71
+ if (!authenticated) {
72
+ console.error(chalk.red('Error:'), 'Not authenticated. Run', chalk.cyan('ghp auth'));
73
+ process.exit(1);
74
+ }
75
+ const projects = await api.getProjects(repo);
76
+ if (projects.length === 0) {
77
+ console.log(chalk.yellow('No GitHub Projects found for this repository.'));
78
+ return;
79
+ }
80
+ // Filter by project if specified
81
+ const targetProjects = options.project
82
+ ? projects.filter(p => p.title.toLowerCase().includes(options.project.toLowerCase()))
83
+ : projects;
84
+ if (targetProjects.length === 0) {
85
+ console.log(chalk.yellow(`No project matching "${options.project}" found.`));
86
+ return;
87
+ }
88
+ // Collect all items from target projects
89
+ let allItems = [];
90
+ for (const project of targetProjects) {
91
+ const items = await api.getProjectItems(project.id, project.title);
92
+ allItems = allItems.concat(items);
93
+ }
94
+ // Apply filters
95
+ let filteredItems = allItems;
96
+ // --mine: filter to current user
97
+ if (options.mine) {
98
+ filteredItems = filteredItems.filter(item => item.assignees.includes(api.username || ''));
99
+ }
100
+ // --unassigned: filter to items with no assignees
101
+ if (options.unassigned) {
102
+ filteredItems = filteredItems.filter(item => item.assignees.length === 0);
103
+ }
104
+ // --status: filter by status
105
+ if (options.status) {
106
+ filteredItems = filteredItems.filter(item => item.status?.toLowerCase() === options.status.toLowerCase());
107
+ }
108
+ // --slice: filter by field=value pairs
109
+ if (options.slice && options.slice.length > 0) {
110
+ for (const slice of options.slice) {
111
+ const [field, value] = slice.split('=');
112
+ if (!field || !value) {
113
+ console.error(chalk.red('Invalid slice format:'), slice);
114
+ console.log(chalk.dim('Use: --slice field=value'));
115
+ continue;
116
+ }
117
+ const fieldLower = field.toLowerCase();
118
+ const valueLower = value.toLowerCase();
119
+ filteredItems = filteredItems.filter(item => {
120
+ // Check built-in fields
121
+ if (fieldLower === 'assignee' || fieldLower === 'user') {
122
+ return item.assignees.some(a => a.toLowerCase().includes(valueLower));
123
+ }
124
+ if (fieldLower === 'label') {
125
+ return item.labels.some(l => l.name.toLowerCase().includes(valueLower));
126
+ }
127
+ if (fieldLower === 'type' || fieldLower === 'issuetype' || fieldLower === 'issue-type') {
128
+ return item.issueType?.toLowerCase().includes(valueLower) || false;
129
+ }
130
+ if (fieldLower === 'repo' || fieldLower === 'repository') {
131
+ return item.repository?.toLowerCase().includes(valueLower);
132
+ }
133
+ if (fieldLower === 'project') {
134
+ return item.projectTitle.toLowerCase().includes(valueLower);
135
+ }
136
+ // Check custom project fields
137
+ const fieldValue = item.fields[field] || item.fields[fieldLower];
138
+ if (fieldValue) {
139
+ return fieldValue.toLowerCase().includes(valueLower);
140
+ }
141
+ // Check with case-insensitive field name match
142
+ const matchingField = Object.entries(item.fields).find(([k]) => k.toLowerCase() === fieldLower);
143
+ if (matchingField) {
144
+ return matchingField[1].toLowerCase().includes(valueLower);
145
+ }
146
+ return false;
147
+ });
148
+ }
149
+ }
150
+ // Sort items if requested
151
+ if (options.sort) {
152
+ const sortFields = options.sort.split(',').map(f => f.trim());
153
+ filteredItems.sort((a, b) => {
154
+ for (const field of sortFields) {
155
+ const ascending = field.startsWith('-');
156
+ const fieldName = ascending ? field.slice(1) : field;
157
+ // Get field values (handle special fields and custom fields)
158
+ let aVal = getFieldValue(a, fieldName);
159
+ let bVal = getFieldValue(b, fieldName);
160
+ // Compare
161
+ if (aVal === bVal)
162
+ continue;
163
+ if (aVal === null || aVal === undefined)
164
+ return ascending ? -1 : 1;
165
+ if (bVal === null || bVal === undefined)
166
+ return ascending ? 1 : -1;
167
+ // String comparison
168
+ if (typeof aVal === 'string' && typeof bVal === 'string') {
169
+ const cmp = aVal.localeCompare(bVal);
170
+ return ascending ? cmp : -cmp;
171
+ }
172
+ // Number comparison
173
+ if (aVal < bVal)
174
+ return ascending ? -1 : 1;
175
+ if (aVal > bVal)
176
+ return ascending ? 1 : -1;
177
+ }
178
+ return 0;
179
+ });
180
+ }
181
+ // Display based on mode
182
+ if (options.list) {
183
+ // Simple list view (one item per line, for pickers)
184
+ displaySimpleList(filteredItems);
185
+ }
186
+ else if (options.status) {
187
+ // List view for single status
188
+ displayListView(filteredItems, options.status, options);
189
+ }
190
+ else {
191
+ // Board view
192
+ displayBoardView(filteredItems, targetProjects, options);
193
+ }
194
+ }
195
+ function getFieldValue(item, fieldName) {
196
+ const lower = fieldName.toLowerCase();
197
+ // Built-in fields
198
+ switch (lower) {
199
+ case 'number':
200
+ return item.number;
201
+ case 'title':
202
+ return item.title;
203
+ case 'status':
204
+ return item.status;
205
+ case 'type':
206
+ return item.type;
207
+ case 'issuetype':
208
+ case 'issue-type':
209
+ case 'issue_type':
210
+ return item.issueType;
211
+ case 'assignee':
212
+ case 'assignees':
213
+ case 'user':
214
+ // Return first assignee for sorting, or empty string if none
215
+ return item.assignees[0] || '';
216
+ case 'repo':
217
+ case 'repository':
218
+ return item.repository;
219
+ case 'label':
220
+ case 'labels':
221
+ // Return first label name for sorting
222
+ return item.labels[0]?.name || '';
223
+ case 'project':
224
+ return item.projectTitle;
225
+ default:
226
+ // Check custom fields (exact match first, then case-insensitive)
227
+ if (item.fields[fieldName]) {
228
+ return item.fields[fieldName];
229
+ }
230
+ const customField = Object.entries(item.fields || {}).find(([k]) => k.toLowerCase() === lower);
231
+ return customField ? customField[1] : null;
232
+ }
233
+ }
234
+ function displaySimpleList(items) {
235
+ for (const item of items) {
236
+ const num = item.number ? `#${item.number}` : '';
237
+ const status = item.status ? `[${item.status}]` : '';
238
+ console.log(`${num} ${item.title} ${status}`);
239
+ }
240
+ }
241
+ function displayListView(items, status, opts) {
242
+ const label = opts.mine ? `My ${status}` : opts.unassigned ? `Unassigned ${status}` : status;
243
+ console.log(chalk.bold(label), chalk.dim(`(${items.length} items)`));
244
+ console.log();
245
+ if (items.length === 0) {
246
+ console.log(chalk.dim('No items found.'));
247
+ return;
248
+ }
249
+ // Build rows with raw data for width calculation
250
+ const rows = items.map(item => ({
251
+ num: item.number ? `#${item.number}` : 'draft',
252
+ type: item.issueType || '',
253
+ title: item.title,
254
+ assignees: item.assignees.map(a => '@' + a).join(' '),
255
+ priority: item.fields['Priority'] || item.fields['priority'] || '',
256
+ size: item.fields['Size'] || item.fields['size'] || item.fields['Estimate'] || item.fields['estimate'] || '',
257
+ labels: item.labels,
258
+ }));
259
+ // Calculate column widths
260
+ const numWidth = Math.max(...rows.map(r => r.num.length), 5);
261
+ const typeWidth = Math.max(...rows.map(r => r.type.length), 0);
262
+ const assigneeWidth = Math.max(...rows.map(r => r.assignees.length), 0);
263
+ const priorityWidth = Math.max(...rows.map(r => r.priority.length), 0);
264
+ const sizeWidth = Math.max(...rows.map(r => r.size.length), 0);
265
+ // Calculate title width (remaining space, min 20, max 60)
266
+ const termWidth = process.stdout.columns || 120;
267
+ const fixedWidth = numWidth + typeWidth + assigneeWidth + priorityWidth + sizeWidth + 12; // spacing
268
+ const titleWidth = Math.max(20, Math.min(60, termWidth - fixedWidth - 4));
269
+ // Print header row
270
+ const headerParts = [];
271
+ headerParts.push(chalk.dim('#'.padEnd(numWidth)));
272
+ if (typeWidth > 0) {
273
+ headerParts.push(chalk.dim('Type'.padEnd(typeWidth)));
274
+ }
275
+ headerParts.push(chalk.dim('Title'.padEnd(titleWidth)));
276
+ if (assigneeWidth > 0) {
277
+ headerParts.push(chalk.dim('Assignee'.padEnd(assigneeWidth)));
278
+ }
279
+ if (priorityWidth > 0) {
280
+ headerParts.push(chalk.dim('Priority'.padEnd(priorityWidth)));
281
+ }
282
+ if (sizeWidth > 0) {
283
+ headerParts.push(chalk.dim('Size'.padEnd(sizeWidth)));
284
+ }
285
+ const hasLabels = rows.some(r => r.labels.length > 0);
286
+ if (hasLabels) {
287
+ headerParts.push(chalk.dim('Labels'));
288
+ }
289
+ console.log(` ${headerParts.join(' ')}`);
290
+ console.log(chalk.dim(' ' + '─'.repeat(Math.min(termWidth - 4, fixedWidth + titleWidth + 10))));
291
+ // Print rows
292
+ for (const row of rows) {
293
+ const parts = [];
294
+ // Number
295
+ parts.push(row.num === 'draft'
296
+ ? chalk.dim(row.num.padEnd(numWidth))
297
+ : chalk.cyan(row.num.padEnd(numWidth)));
298
+ // Issue Type
299
+ if (typeWidth > 0) {
300
+ parts.push(chalk.yellow(row.type.padEnd(typeWidth)));
301
+ }
302
+ // Title (truncated if needed)
303
+ const truncTitle = row.title.length > titleWidth
304
+ ? row.title.substring(0, titleWidth - 1) + '…'
305
+ : row.title.padEnd(titleWidth);
306
+ parts.push(truncTitle);
307
+ // Assignees
308
+ if (assigneeWidth > 0) {
309
+ parts.push(chalk.cyan(row.assignees.padEnd(assigneeWidth)));
310
+ }
311
+ // Priority
312
+ if (priorityWidth > 0) {
313
+ parts.push(chalk.magenta(row.priority.padEnd(priorityWidth)));
314
+ }
315
+ // Size
316
+ if (sizeWidth > 0) {
317
+ parts.push(chalk.blue(row.size.padEnd(sizeWidth)));
318
+ }
319
+ // Labels (not padded, at the end)
320
+ if (row.labels.length > 0) {
321
+ const labelStr = row.labels.map(l => {
322
+ const bg = hexToChalk(l.color);
323
+ return bg(` ${l.name} `);
324
+ }).join(' ');
325
+ parts.push(labelStr);
326
+ }
327
+ console.log(` ${parts.join(' ')}`);
328
+ }
329
+ console.log();
330
+ }
331
+ function hexToChalk(hex) {
332
+ const r = parseInt(hex.slice(0, 2), 16);
333
+ const g = parseInt(hex.slice(2, 4), 16);
334
+ const b = parseInt(hex.slice(4, 6), 16);
335
+ const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
336
+ const textColor = luminance > 0.5 ? chalk.black : chalk.white;
337
+ return (text) => textColor.bgRgb(r, g, b)(text);
338
+ }
339
+ async function displayBoardView(items, projects, opts) {
340
+ for (const project of projects) {
341
+ const projectItems = items.filter(i => i.projectId === project.id);
342
+ console.log(chalk.bold.underline(project.title));
343
+ if (opts.mine) {
344
+ console.log(chalk.dim('Filtered to: my items'));
345
+ }
346
+ console.log();
347
+ const statusField = await api.getStatusField(project.id);
348
+ if (!statusField) {
349
+ console.log(chalk.yellow('No Status field found in this project.'));
350
+ continue;
351
+ }
352
+ // Group items by status
353
+ const byStatus = new Map();
354
+ for (const status of statusField.options) {
355
+ byStatus.set(status.name, []);
356
+ }
357
+ byStatus.set('No Status', []);
358
+ for (const item of projectItems) {
359
+ const status = item.status || 'No Status';
360
+ if (!byStatus.has(status)) {
361
+ byStatus.set(status, []);
362
+ }
363
+ byStatus.get(status).push(item);
364
+ }
365
+ // Calculate column widths
366
+ const termWidth = process.stdout.columns || 120;
367
+ const numColumns = statusField.options.length;
368
+ const colWidth = Math.floor((termWidth - 4) / Math.min(numColumns, 4)) - 2;
369
+ const statuses = statusField.options.map((o) => o.name);
370
+ // Print headers with counts
371
+ const headers = statuses.map(s => {
372
+ const statusItems = byStatus.get(s) || [];
373
+ const header = `${s} (${statusItems.length})`;
374
+ return chalk.bold(header.padEnd(colWidth).substring(0, colWidth));
375
+ });
376
+ console.log(headers.join(' '));
377
+ console.log(chalk.dim('─'.repeat(termWidth - 4)));
378
+ // Find max items in any column
379
+ const maxItems = Math.max(...statuses.map(s => (byStatus.get(s) || []).length), 1);
380
+ // Print rows
381
+ for (let i = 0; i < Math.min(maxItems, 15); i++) {
382
+ const row = statuses.map(s => {
383
+ const statusItems = byStatus.get(s) || [];
384
+ if (i < statusItems.length) {
385
+ const item = statusItems[i];
386
+ const num = item.number ? `#${item.number}` : '';
387
+ const text = `${num} ${item.title}`.substring(0, colWidth - 1);
388
+ const color = item.assignees.includes(api.username || '')
389
+ ? chalk.cyan
390
+ : chalk.white;
391
+ return color(text.padEnd(colWidth));
392
+ }
393
+ return ' '.repeat(colWidth);
394
+ });
395
+ console.log(row.join(' '));
396
+ }
397
+ if (maxItems > 15) {
398
+ console.log(chalk.dim(`... and ${maxItems - 15} more items`));
399
+ }
400
+ console.log();
401
+ }
402
+ }
403
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface PrOptions {
2
+ create?: boolean;
3
+ open?: boolean;
4
+ }
5
+ export declare function prCommand(issue: string | undefined, options: PrOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=pr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"AAUA,UAAU,SAAS;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC5F"}
@@ -0,0 +1,102 @@
1
+ import chalk from 'chalk';
2
+ import { exec } from 'child_process';
3
+ import { promisify } from 'util';
4
+ import { api } from '../github-api.js';
5
+ import { detectRepository, getCurrentBranch } from '../git-utils.js';
6
+ import { getIssueForBranch } from '../branch-linker.js';
7
+ import { getConfig } from '../config.js';
8
+ const execAsync = promisify(exec);
9
+ export async function prCommand(issue, options) {
10
+ // Detect repository
11
+ const repo = await detectRepository();
12
+ if (!repo) {
13
+ console.error(chalk.red('Error:'), 'Not in a git repository with a GitHub remote');
14
+ process.exit(1);
15
+ }
16
+ const currentBranch = await getCurrentBranch();
17
+ if (!currentBranch) {
18
+ console.error(chalk.red('Error:'), 'Could not determine current branch');
19
+ process.exit(1);
20
+ }
21
+ // If issue not specified, try to find linked issue for current branch
22
+ let issueNumber = null;
23
+ let linkedIssue = getIssueForBranch(repo.fullName, currentBranch);
24
+ if (issue) {
25
+ issueNumber = parseInt(issue, 10);
26
+ if (isNaN(issueNumber)) {
27
+ console.error(chalk.red('Error:'), 'Issue must be a number');
28
+ process.exit(1);
29
+ }
30
+ }
31
+ else if (linkedIssue) {
32
+ issueNumber = linkedIssue.issueNumber;
33
+ console.log(chalk.dim(`Using linked issue #${issueNumber}: ${linkedIssue.issueTitle}`));
34
+ }
35
+ if (options.create) {
36
+ await createPr(repo.fullName, issueNumber, linkedIssue?.issueTitle);
37
+ }
38
+ else if (options.open) {
39
+ await openPr();
40
+ }
41
+ else {
42
+ // Default: show PR status
43
+ await showPrStatus(issueNumber);
44
+ }
45
+ }
46
+ async function createPr(repoFullName, issueNumber, issueTitle) {
47
+ try {
48
+ // Build title from issue if available
49
+ let title = '';
50
+ let body = '';
51
+ if (issueNumber && issueTitle) {
52
+ title = issueTitle;
53
+ body = `Related to #${issueNumber}`;
54
+ }
55
+ // Use gh CLI to create PR
56
+ const titleArg = title ? `--title "${title}"` : '';
57
+ const bodyArg = body ? `--body "${body}"` : '';
58
+ console.log(chalk.dim('Creating PR...'));
59
+ const { stdout } = await execAsync(`gh pr create ${titleArg} ${bodyArg} --web`);
60
+ console.log(stdout);
61
+ // Update issue status if configured
62
+ if (issueNumber) {
63
+ const authenticated = await api.authenticate();
64
+ if (authenticated) {
65
+ const prOpenedStatus = getConfig('startWorkingStatus'); // TODO: add prOpenedStatus to config
66
+ // Could update status here
67
+ }
68
+ }
69
+ }
70
+ catch (error) {
71
+ const err = error;
72
+ if (err.stderr?.includes('already exists')) {
73
+ console.log(chalk.yellow('PR already exists for this branch.'));
74
+ await openPr();
75
+ }
76
+ else {
77
+ console.error(chalk.red('Error creating PR:'), err.stderr || error);
78
+ process.exit(1);
79
+ }
80
+ }
81
+ }
82
+ async function openPr() {
83
+ try {
84
+ await execAsync('gh pr view --web');
85
+ }
86
+ catch {
87
+ console.error(chalk.red('Error:'), 'No PR found for current branch');
88
+ process.exit(1);
89
+ }
90
+ }
91
+ async function showPrStatus(issueNumber) {
92
+ try {
93
+ const { stdout } = await execAsync('gh pr status');
94
+ console.log(stdout);
95
+ }
96
+ catch (error) {
97
+ const err = error;
98
+ console.error(chalk.red('Error:'), err.stderr || 'Failed to get PR status');
99
+ process.exit(1);
100
+ }
101
+ }
102
+ //# sourceMappingURL=pr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAOlC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAyB,EAAE,OAAkB;IACzE,oBAAoB;IACpB,MAAM,IAAI,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,8CAA8C,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,oCAAoC,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,sEAAsE;IACtE,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,IAAI,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAElE,IAAI,KAAK,EAAE,CAAC;QACR,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACrB,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,WAAW,KAAK,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,MAAM,EAAE,CAAC;IACnB,CAAC;SAAM,CAAC;QACJ,0BAA0B;QAC1B,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,QAAQ,CACnB,YAAoB,EACpB,WAA0B,EAC1B,UAA8B;IAE9B,IAAI,CAAC;QACD,sCAAsC;QACtC,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;YAC5B,KAAK,GAAG,UAAU,CAAC;YACnB,IAAI,GAAG,eAAe,WAAW,EAAE,CAAC;QACxC,CAAC;QAED,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAE/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEzC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,gBAAgB,QAAQ,IAAI,OAAO,QAAQ,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,oCAAoC;QACpC,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;YAC/C,IAAI,aAAa,EAAE,CAAC;gBAChB,MAAM,cAAc,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,qCAAqC;gBAC7F,2BAA2B;YAC/B,CAAC;QACL,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,KAA4B,CAAC;QACzC,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAChE,MAAM,MAAM,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;AACL,CAAC;AAED,KAAK,UAAU,MAAM;IACjB,IAAI,CAAC;QACD,MAAM,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,gCAAgC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,WAA0B;IAClD,IAAI,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,KAA4B,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,IAAI,yBAAyB,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function setFieldCommand(issue: string, field: string, value: string): Promise<void>;
2
+ //# sourceMappingURL=set-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-field.d.ts","sourceRoot":"","sources":["../../src/commands/set-field.ts"],"names":[],"mappings":"AAIA,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEhG"}
@@ -0,0 +1,69 @@
1
+ import chalk from 'chalk';
2
+ import { api } from '../github-api.js';
3
+ import { detectRepository } from '../git-utils.js';
4
+ export async function setFieldCommand(issue, field, value) {
5
+ const issueNumber = parseInt(issue, 10);
6
+ if (isNaN(issueNumber)) {
7
+ console.error(chalk.red('Error:'), 'Issue must be a number');
8
+ process.exit(1);
9
+ }
10
+ const repo = await detectRepository();
11
+ if (!repo) {
12
+ console.error(chalk.red('Error:'), 'Not in a git repository with a GitHub remote');
13
+ process.exit(1);
14
+ }
15
+ const authenticated = await api.authenticate();
16
+ if (!authenticated) {
17
+ console.error(chalk.red('Error:'), 'Not authenticated. Run', chalk.cyan('ghp auth'));
18
+ process.exit(1);
19
+ }
20
+ // Find the item
21
+ const item = await api.findItemByNumber(repo, issueNumber);
22
+ if (!item) {
23
+ console.error(chalk.red('Error:'), `Issue #${issueNumber} not found in any project`);
24
+ process.exit(1);
25
+ }
26
+ // Get project fields
27
+ const fields = await api.getProjectFields(item.projectId);
28
+ const targetField = fields.find(f => f.name.toLowerCase() === field.toLowerCase());
29
+ if (!targetField) {
30
+ console.error(chalk.red('Error:'), `Field "${field}" not found`);
31
+ console.log('Available fields:', fields.map(f => f.name).join(', '));
32
+ process.exit(1);
33
+ }
34
+ // Build the value object based on field type
35
+ let fieldValue;
36
+ if (targetField.type === 'SingleSelect' && targetField.options) {
37
+ const option = targetField.options.find(o => o.name.toLowerCase() === value.toLowerCase());
38
+ if (!option) {
39
+ console.error(chalk.red('Error:'), `Invalid value "${value}" for field "${field}"`);
40
+ console.log('Available options:', targetField.options.map(o => o.name).join(', '));
41
+ process.exit(1);
42
+ }
43
+ fieldValue = { singleSelectOptionId: option.id };
44
+ }
45
+ else if (targetField.type === '' || targetField.type === 'Text') {
46
+ fieldValue = { text: value };
47
+ }
48
+ else if (targetField.type === 'Number') {
49
+ const num = parseFloat(value);
50
+ if (isNaN(num)) {
51
+ console.error(chalk.red('Error:'), 'Value must be a number for this field');
52
+ process.exit(1);
53
+ }
54
+ fieldValue = { number: num };
55
+ }
56
+ else {
57
+ console.error(chalk.red('Error:'), `Unsupported field type: ${targetField.type}`);
58
+ process.exit(1);
59
+ }
60
+ const success = await api.setFieldValue(item.projectId, item.id, targetField.id, fieldValue);
61
+ if (success) {
62
+ console.log(chalk.green('Updated:'), `#${issueNumber} ${targetField.name} = ${value}`);
63
+ }
64
+ else {
65
+ console.error(chalk.red('Error:'), 'Failed to update field');
66
+ process.exit(1);
67
+ }
68
+ }
69
+ //# sourceMappingURL=set-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-field.js","sourceRoot":"","sources":["../../src/commands/set-field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface SliceOptions {
2
+ field?: string;
3
+ value?: string;
4
+ listFields?: boolean;
5
+ }
6
+ export declare function sliceCommand(options: SliceOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=slice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"AAKA,UAAU,YAAY;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FvE"}