@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,85 @@
1
+ import chalk from 'chalk';
2
+ import { api } from '../github-api.js';
3
+ import { detectRepository } from '../git-utils.js';
4
+ export async function sliceCommand(options) {
5
+ const repo = await detectRepository();
6
+ if (!repo) {
7
+ console.error(chalk.red('Error:'), 'Not in a git repository with a GitHub remote');
8
+ process.exit(1);
9
+ }
10
+ const authenticated = await api.authenticate();
11
+ if (!authenticated) {
12
+ console.error(chalk.red('Error:'), 'Not authenticated. Run', chalk.cyan('ghp auth'));
13
+ process.exit(1);
14
+ }
15
+ const projects = await api.getProjects(repo);
16
+ if (projects.length === 0) {
17
+ console.log(chalk.yellow('No GitHub Projects found for this repository.'));
18
+ return;
19
+ }
20
+ // List available fields
21
+ if (options.listFields) {
22
+ console.log(chalk.bold('Available Fields:'));
23
+ console.log();
24
+ for (const project of projects) {
25
+ console.log(chalk.cyan(project.title));
26
+ const fields = await api.getProjectFields(project.id);
27
+ for (const field of fields) {
28
+ if (field.options) {
29
+ console.log(` ${field.name}: ${field.options.map(o => o.name).join(', ')}`);
30
+ }
31
+ else {
32
+ console.log(` ${field.name} (${field.type || 'text'})`);
33
+ }
34
+ }
35
+ console.log();
36
+ }
37
+ return;
38
+ }
39
+ // Need both field and value for filtering
40
+ if (!options.field || !options.value) {
41
+ console.log(chalk.yellow('Usage:'), 'ghp slice -f <field> -v <value>');
42
+ console.log(chalk.dim('Use --list-fields to see available fields'));
43
+ return;
44
+ }
45
+ console.log(chalk.bold('Filtered Items'), chalk.dim(`(${options.field} = ${options.value})`));
46
+ console.log();
47
+ // Collect and filter items
48
+ let allItems = [];
49
+ for (const project of projects) {
50
+ const items = await api.getProjectItems(project.id, project.title);
51
+ allItems = allItems.concat(items);
52
+ }
53
+ // For status field, filter directly
54
+ const fieldLower = options.field.toLowerCase();
55
+ const valueLower = options.value.toLowerCase();
56
+ const filtered = allItems.filter(item => {
57
+ if (fieldLower === 'status') {
58
+ return item.status?.toLowerCase() === valueLower;
59
+ }
60
+ if (fieldLower === 'assignee' || fieldLower === 'assigned') {
61
+ return item.assignees.some(a => a.toLowerCase() === valueLower);
62
+ }
63
+ if (fieldLower === 'type') {
64
+ return item.type === valueLower;
65
+ }
66
+ if (fieldLower === 'project') {
67
+ return item.projectTitle.toLowerCase().includes(valueLower);
68
+ }
69
+ // For other fields, we'd need to fetch field values - not implemented yet
70
+ return true;
71
+ });
72
+ if (filtered.length === 0) {
73
+ console.log(chalk.yellow('No items match the filter.'));
74
+ return;
75
+ }
76
+ // Display results
77
+ for (const item of filtered) {
78
+ const num = item.number ? chalk.cyan(`#${item.number}`) : chalk.dim('draft');
79
+ const status = item.status ? chalk.dim(`[${item.status}]`) : '';
80
+ console.log(` ${num} ${item.title} ${status}`);
81
+ }
82
+ console.log();
83
+ console.log(chalk.dim(`${filtered.length} item(s) found`));
84
+ }
85
+ //# sourceMappingURL=slice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slice.js","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface StartOptions {
2
+ branch?: boolean;
3
+ status?: boolean;
4
+ }
5
+ export declare function startCommand(issue: string, options: StartOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAUA,UAAU,YAAY;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAeD,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgJtF"}
@@ -0,0 +1,153 @@
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, hasUncommittedChanges, branchExists, createBranch, checkoutBranch, getCommitsBehind, pullLatest, generateBranchName } from '../git-utils.js';
6
+ import { getConfig } from '../config.js';
7
+ import * as readline from 'readline';
8
+ const execAsync = promisify(exec);
9
+ function prompt(question) {
10
+ const rl = readline.createInterface({
11
+ input: process.stdin,
12
+ output: process.stdout,
13
+ });
14
+ return new Promise(resolve => {
15
+ rl.question(question, answer => {
16
+ rl.close();
17
+ resolve(answer.trim().toLowerCase());
18
+ });
19
+ });
20
+ }
21
+ export async function startCommand(issue, options) {
22
+ const issueNumber = parseInt(issue, 10);
23
+ if (isNaN(issueNumber)) {
24
+ console.error(chalk.red('Error:'), 'Issue must be a number');
25
+ process.exit(1);
26
+ }
27
+ // Detect repository
28
+ const repo = await detectRepository();
29
+ if (!repo) {
30
+ console.error(chalk.red('Error:'), 'Not in a git repository with a GitHub remote');
31
+ process.exit(1);
32
+ }
33
+ // Authenticate
34
+ const authenticated = await api.authenticate();
35
+ if (!authenticated) {
36
+ console.error(chalk.red('Error:'), 'Not authenticated. Run', chalk.cyan('ghp auth'));
37
+ process.exit(1);
38
+ }
39
+ // Find the item
40
+ console.log(chalk.dim(`Looking for issue #${issueNumber}...`));
41
+ const item = await api.findItemByNumber(repo, issueNumber);
42
+ if (!item) {
43
+ console.error(chalk.red('Error:'), `Issue #${issueNumber} not found in any project`);
44
+ process.exit(1);
45
+ }
46
+ console.log(chalk.green('Found:'), item.title);
47
+ console.log(chalk.dim(`Project: ${item.projectTitle} | Status: ${item.status || 'None'}`));
48
+ console.log();
49
+ // Branch creation (unless --no-branch)
50
+ if (options.branch !== false) {
51
+ const mainBranch = getConfig('mainBranch') || 'main';
52
+ const branchPattern = getConfig('branchPattern') || '{user}/{number}-{title}';
53
+ // Check for uncommitted changes
54
+ if (await hasUncommittedChanges()) {
55
+ console.log(chalk.yellow('Warning:'), 'You have uncommitted changes.');
56
+ const answer = await prompt('Continue anyway? (y/N) ');
57
+ if (answer !== 'y' && answer !== 'yes') {
58
+ console.log('Aborted.');
59
+ process.exit(0);
60
+ }
61
+ }
62
+ // Check current branch
63
+ const currentBranch = await getCurrentBranch();
64
+ if (currentBranch !== mainBranch) {
65
+ console.log(chalk.yellow('Warning:'), `You're on '${currentBranch}' instead of '${mainBranch}'.`);
66
+ const answer = await prompt(`Switch to ${mainBranch}? (Y/n) `);
67
+ if (answer !== 'n' && answer !== 'no') {
68
+ try {
69
+ await checkoutBranch(mainBranch);
70
+ console.log(chalk.green('✓'), `Switched to ${mainBranch}`);
71
+ }
72
+ catch (error) {
73
+ console.error(chalk.red('Error:'), `Failed to switch to ${mainBranch}:`, error);
74
+ process.exit(1);
75
+ }
76
+ }
77
+ }
78
+ // Check if behind origin
79
+ const behind = await getCommitsBehind(mainBranch);
80
+ if (behind > 0) {
81
+ console.log(chalk.yellow('Warning:'), `${mainBranch} is ${behind} commit(s) behind origin.`);
82
+ const answer = await prompt('Pull latest? (Y/n) ');
83
+ if (answer !== 'n' && answer !== 'no') {
84
+ try {
85
+ await pullLatest();
86
+ console.log(chalk.green('✓'), 'Pulled latest changes');
87
+ }
88
+ catch (error) {
89
+ console.error(chalk.red('Error:'), 'Failed to pull:', error);
90
+ process.exit(1);
91
+ }
92
+ }
93
+ }
94
+ // Generate branch name
95
+ const branchName = generateBranchName(branchPattern, {
96
+ user: api.username || 'user',
97
+ number: item.number,
98
+ title: item.title,
99
+ repo: repo.name,
100
+ });
101
+ // Check if branch exists
102
+ if (await branchExists(branchName)) {
103
+ console.log(chalk.yellow('Branch already exists:'), branchName);
104
+ const answer = await prompt('Checkout existing branch? (Y/n) ');
105
+ if (answer !== 'n' && answer !== 'no') {
106
+ await checkoutBranch(branchName);
107
+ console.log(chalk.green('✓'), `Switched to ${branchName}`);
108
+ }
109
+ }
110
+ else {
111
+ // Create branch
112
+ try {
113
+ await createBranch(branchName);
114
+ console.log(chalk.green('✓'), `Created branch: ${branchName}`);
115
+ // Create empty commit linking to issue and push
116
+ const commitMsg = `Start work on #${item.number}\n\n${item.title}`;
117
+ await execAsync(`git commit --allow-empty -m "${commitMsg.replace(/"/g, '\\"')}"`);
118
+ console.log(chalk.green('✓'), `Created linking commit for #${item.number}`);
119
+ await execAsync(`git push -u origin ${branchName}`);
120
+ console.log(chalk.green('✓'), `Pushed branch to origin`);
121
+ }
122
+ catch (error) {
123
+ console.error(chalk.red('Error:'), 'Failed to create branch:', error);
124
+ process.exit(1);
125
+ }
126
+ }
127
+ }
128
+ // Status update (unless --no-status)
129
+ if (options.status !== false) {
130
+ const targetStatus = getConfig('startWorkingStatus');
131
+ if (targetStatus && item.status !== targetStatus) {
132
+ const statusField = await api.getStatusField(item.projectId);
133
+ if (statusField) {
134
+ const option = statusField.options.find(o => o.name === targetStatus);
135
+ if (option) {
136
+ const success = await api.updateItemStatus(item.projectId, item.id, statusField.fieldId, option.id);
137
+ if (success) {
138
+ console.log(chalk.green('✓'), `Moved to "${targetStatus}"`);
139
+ }
140
+ else {
141
+ console.log(chalk.yellow('Warning:'), `Failed to update status to "${targetStatus}"`);
142
+ }
143
+ }
144
+ else {
145
+ console.log(chalk.yellow('Warning:'), `Status "${targetStatus}" not found in project`);
146
+ }
147
+ }
148
+ }
149
+ }
150
+ console.log();
151
+ console.log(chalk.green.bold('Ready to work on:'), item.title);
152
+ }
153
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function switchCommand(issue: string): Promise<void>;
2
+ //# sourceMappingURL=switch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../src/commands/switch.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ChE"}
@@ -0,0 +1,44 @@
1
+ import chalk from 'chalk';
2
+ import { detectRepository, checkoutBranch, branchExists, getCurrentBranch } from '../git-utils.js';
3
+ import { getBranchForIssue } from '../branch-linker.js';
4
+ export async function switchCommand(issue) {
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
+ // 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
+ // Find linked branch
17
+ const branchName = getBranchForIssue(repo.fullName, issueNumber);
18
+ if (!branchName) {
19
+ console.error(chalk.red('Error:'), `No branch linked to issue #${issueNumber}`);
20
+ console.log(chalk.dim('Use'), chalk.cyan(`ghp link-branch ${issueNumber}`), chalk.dim('to link a branch'));
21
+ process.exit(1);
22
+ }
23
+ // Check if branch exists
24
+ if (!(await branchExists(branchName))) {
25
+ console.error(chalk.red('Error:'), `Branch "${branchName}" no longer exists`);
26
+ process.exit(1);
27
+ }
28
+ // Check if already on that branch
29
+ const currentBranch = await getCurrentBranch();
30
+ if (currentBranch === branchName) {
31
+ console.log(chalk.yellow('Already on branch:'), branchName);
32
+ return;
33
+ }
34
+ // Switch to branch
35
+ try {
36
+ await checkoutBranch(branchName);
37
+ console.log(chalk.green('✓'), `Switched to branch: ${branchName}`);
38
+ }
39
+ catch (error) {
40
+ console.error(chalk.red('Error:'), 'Failed to switch branch:', error);
41
+ process.exit(1);
42
+ }
43
+ }
44
+ //# sourceMappingURL=switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../src/commands/switch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa;IAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,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,qBAAqB;IACrB,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACjE,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,8BAA8B,WAAW,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,WAAW,UAAU,oBAAoB,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,kCAAkC;IAClC,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC/C,IAAI,aAAa,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,UAAU,CAAC,CAAC;QAC5D,OAAO;IACX,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC;QACD,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,uBAAuB,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function unlinkBranchCommand(issue: string): Promise<void>;
2
+ //# sourceMappingURL=unlink-branch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlink-branch.d.ts","sourceRoot":"","sources":["../../src/commands/unlink-branch.ts"],"names":[],"mappings":"AAIA,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BtE"}
@@ -0,0 +1,28 @@
1
+ import chalk from 'chalk';
2
+ import { detectRepository } from '../git-utils.js';
3
+ import { unlinkBranch, getBranchForIssue } from '../branch-linker.js';
4
+ export async function unlinkBranchCommand(issue) {
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
+ // 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
+ // Check if linked
17
+ const branchName = getBranchForIssue(repo.fullName, issueNumber);
18
+ if (!branchName) {
19
+ console.log(chalk.yellow('No branch linked to issue'), `#${issueNumber}`);
20
+ return;
21
+ }
22
+ // Unlink
23
+ const removed = unlinkBranch(repo.fullName, issueNumber);
24
+ if (removed) {
25
+ console.log(chalk.green('✓'), `Unlinked "${branchName}" from #${issueNumber}`);
26
+ }
27
+ }
28
+ //# sourceMappingURL=unlink-branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlink-branch.js","sourceRoot":"","sources":["../../src/commands/unlink-branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEtE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAa;IACnD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,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,kBAAkB;IAClB,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACjE,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,EAAE,IAAI,WAAW,EAAE,CAAC,CAAC;QAC1E,OAAO;IACX,CAAC;IAED,SAAS;IACT,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACzD,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,aAAa,UAAU,WAAW,WAAW,EAAE,CAAC,CAAC;IACnF,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface WorkOptions {
2
+ all?: boolean;
3
+ status?: string;
4
+ hideDone?: boolean;
5
+ list?: boolean;
6
+ }
7
+ export declare function workCommand(options: WorkOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=work.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work.d.ts","sourceRoot":"","sources":["../../src/commands/work.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiHrE"}
@@ -0,0 +1,118 @@
1
+ import chalk from 'chalk';
2
+ import { api } from '../github-api.js';
3
+ import { detectRepository } from '../git-utils.js';
4
+ export async function workCommand(options) {
5
+ // Detect repository
6
+ const repo = await detectRepository();
7
+ if (!repo) {
8
+ console.error(chalk.red('Error:'), 'Not in a git repository with a GitHub remote');
9
+ process.exit(1);
10
+ }
11
+ // Authenticate
12
+ const authenticated = await api.authenticate();
13
+ if (!authenticated) {
14
+ console.error(chalk.red('Error:'), 'Not authenticated. Run', chalk.cyan('ghp auth'));
15
+ process.exit(1);
16
+ }
17
+ console.log(chalk.bold('My Work'), chalk.dim(`(${repo.fullName})`));
18
+ console.log();
19
+ // Get projects
20
+ const projects = await api.getProjects(repo);
21
+ if (projects.length === 0) {
22
+ console.log(chalk.yellow('No GitHub Projects found for this repository.'));
23
+ return;
24
+ }
25
+ // Collect all items
26
+ let allItems = [];
27
+ for (const project of projects) {
28
+ const items = await api.getProjectItems(project.id, project.title);
29
+ allItems = allItems.concat(items);
30
+ }
31
+ // Filter items
32
+ let filteredItems = allItems;
33
+ // Filter to assigned to me (default unless --all)
34
+ if (!options.all) {
35
+ filteredItems = filteredItems.filter(item => item.assignees.includes(api.username || ''));
36
+ }
37
+ // Filter by status
38
+ if (options.status) {
39
+ filteredItems = filteredItems.filter(item => item.status?.toLowerCase() === options.status?.toLowerCase());
40
+ }
41
+ // Hide done items
42
+ if (options.hideDone) {
43
+ filteredItems = filteredItems.filter(item => !['Done', 'Closed', 'Completed'].includes(item.status || ''));
44
+ }
45
+ if (filteredItems.length === 0) {
46
+ if (options.all) {
47
+ console.log(chalk.yellow('No items found.'));
48
+ }
49
+ else {
50
+ console.log(chalk.yellow('No items assigned to you.'));
51
+ console.log(chalk.dim('Use --all to see all items.'));
52
+ }
53
+ return;
54
+ }
55
+ // Group by status with priority ordering
56
+ const statusOrder = ['In Progress', 'Todo', 'Backlog', 'In Review', 'Done', 'Closed'];
57
+ const byStatus = new Map();
58
+ for (const item of filteredItems) {
59
+ const status = item.status || 'No Status';
60
+ if (!byStatus.has(status)) {
61
+ byStatus.set(status, []);
62
+ }
63
+ byStatus.get(status).push(item);
64
+ }
65
+ // Sort statuses
66
+ const sortedStatuses = [...byStatus.keys()].sort((a, b) => {
67
+ const aIdx = statusOrder.indexOf(a);
68
+ const bIdx = statusOrder.indexOf(b);
69
+ if (aIdx === -1 && bIdx === -1)
70
+ return a.localeCompare(b);
71
+ if (aIdx === -1)
72
+ return 1;
73
+ if (bIdx === -1)
74
+ return -1;
75
+ return aIdx - bIdx;
76
+ });
77
+ // Simple list output for pickers
78
+ if (options.list) {
79
+ for (const status of sortedStatuses) {
80
+ const items = byStatus.get(status);
81
+ for (const item of items) {
82
+ const num = item.number ? `#${item.number}` : '';
83
+ console.log(`${num} ${item.title} [${status}]`);
84
+ }
85
+ }
86
+ return;
87
+ }
88
+ // Display
89
+ for (const status of sortedStatuses) {
90
+ const items = byStatus.get(status);
91
+ const statusColor = getStatusColor(status);
92
+ console.log(statusColor(`■ ${status}`) + chalk.dim(` (${items.length})`));
93
+ for (const item of items) {
94
+ const num = item.number ? chalk.cyan(`#${item.number}`) : chalk.dim('draft');
95
+ const typeIcon = item.type === 'pull_request' ? chalk.magenta('⎇') : ' ';
96
+ console.log(` ${typeIcon} ${num} ${item.title}`);
97
+ }
98
+ console.log();
99
+ }
100
+ }
101
+ function getStatusColor(status) {
102
+ switch (status.toLowerCase()) {
103
+ case 'in progress':
104
+ return chalk.yellow;
105
+ case 'todo':
106
+ case 'backlog':
107
+ return chalk.blue;
108
+ case 'in review':
109
+ return chalk.magenta;
110
+ case 'done':
111
+ case 'closed':
112
+ case 'completed':
113
+ return chalk.green;
114
+ default:
115
+ return chalk.white;
116
+ }
117
+ }
118
+ //# sourceMappingURL=work.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work.js","sourceRoot":"","sources":["../../src/commands/work.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ export interface PlanShortcut {
2
+ status?: string;
3
+ mine?: boolean;
4
+ unassigned?: boolean;
5
+ slice?: string[];
6
+ project?: string;
7
+ sort?: string;
8
+ }
9
+ export interface Config {
10
+ mainBranch: string;
11
+ branchPattern: string;
12
+ startWorkingStatus: string;
13
+ doneStatus: string;
14
+ defaults?: {
15
+ plan?: PlanShortcut;
16
+ addIssue?: {
17
+ template?: string;
18
+ project?: string;
19
+ status?: string;
20
+ };
21
+ };
22
+ shortcuts?: {
23
+ [name: string]: PlanShortcut;
24
+ };
25
+ }
26
+ export declare function loadConfig(): Config;
27
+ export declare function saveConfig(config: Partial<Config>): void;
28
+ export declare function getConfig<K extends keyof Config>(key: K): Config[K];
29
+ export declare function setConfig<K extends keyof Config>(key: K, value: Config[K]): void;
30
+ export declare function getShortcut(name: string): PlanShortcut | undefined;
31
+ export declare function setShortcut(name: string, shortcut: PlanShortcut): void;
32
+ export declare function deleteShortcut(name: string): void;
33
+ export declare function listShortcuts(): Record<string, PlanShortcut>;
34
+ export declare function getPlanDefaults(): PlanShortcut;
35
+ export declare function setPlanDefaults(defaults: PlanShortcut): void;
36
+ export declare function getConfigPath(): string;
37
+ export declare function getAddIssueDefaults(): {
38
+ template?: string;
39
+ project?: string;
40
+ status?: string;
41
+ };
42
+ export declare const CONFIG_KEYS: readonly ["mainBranch", "branchPattern", "startWorkingStatus", "doneStatus"];
43
+ export declare function listConfig(): Record<string, string | undefined>;
44
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IAEnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IAGnB,QAAQ,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,YAAY,CAAC;QACpB,QAAQ,CAAC,EAAE;YACP,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,MAAM,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;KACL,CAAC;IAGF,SAAS,CAAC,EAAE;QACR,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;KAChC,CAAC;CACL;AAWD,wBAAgB,UAAU,IAAI,MAAM,CAUnC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CASxD;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAGnE;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAEhF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAGlE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAItE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMjD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAG5D;AAED,wBAAgB,eAAe,IAAI,YAAY,CAG9C;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAK5D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,mBAAmB,IAAI;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAG9F;AAED,eAAO,MAAM,WAAW,8EAA+E,CAAC;AAExG,wBAAgB,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAQ/D"}