@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.
- package/README.md +176 -0
- package/dist/branch-linker.d.ts +15 -0
- package/dist/branch-linker.d.ts.map +1 -0
- package/dist/branch-linker.js +60 -0
- package/dist/branch-linker.js.map +1 -0
- package/dist/commands/add-issue.d.ts +11 -0
- package/dist/commands/add-issue.d.ts.map +1 -0
- package/dist/commands/add-issue.js +228 -0
- package/dist/commands/add-issue.js.map +1 -0
- package/dist/commands/assign.d.ts +6 -0
- package/dist/commands/assign.d.ts.map +1 -0
- package/dist/commands/assign.js +44 -0
- package/dist/commands/assign.js.map +1 -0
- package/dist/commands/auth.d.ts +6 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +31 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/comment.d.ts +6 -0
- package/dist/commands/comment.d.ts.map +1 -0
- package/dist/commands/comment.js +83 -0
- package/dist/commands/comment.js.map +1 -0
- package/dist/commands/config.d.ts +5 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +94 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/done.d.ts +2 -0
- package/dist/commands/done.d.ts.map +1 -0
- package/dist/commands/done.js +54 -0
- package/dist/commands/done.js.map +1 -0
- package/dist/commands/link-branch.d.ts +2 -0
- package/dist/commands/link-branch.d.ts.map +1 -0
- package/dist/commands/link-branch.js +44 -0
- package/dist/commands/link-branch.js.map +1 -0
- package/dist/commands/move.d.ts +2 -0
- package/dist/commands/move.d.ts.map +1 -0
- package/dist/commands/move.js +53 -0
- package/dist/commands/move.js.map +1 -0
- package/dist/commands/open.d.ts +6 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +189 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/plan.d.ts +2 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +403 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/pr.d.ts +7 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +102 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/set-field.d.ts +2 -0
- package/dist/commands/set-field.d.ts.map +1 -0
- package/dist/commands/set-field.js +69 -0
- package/dist/commands/set-field.js.map +1 -0
- package/dist/commands/slice.d.ts +8 -0
- package/dist/commands/slice.d.ts.map +1 -0
- package/dist/commands/slice.js +85 -0
- package/dist/commands/slice.js.map +1 -0
- package/dist/commands/start.d.ts +7 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +153 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/switch.d.ts +2 -0
- package/dist/commands/switch.d.ts.map +1 -0
- package/dist/commands/switch.js +44 -0
- package/dist/commands/switch.js.map +1 -0
- package/dist/commands/unlink-branch.d.ts +2 -0
- package/dist/commands/unlink-branch.d.ts.map +1 -0
- package/dist/commands/unlink-branch.js +28 -0
- package/dist/commands/unlink-branch.js.map +1 -0
- package/dist/commands/work.d.ts +9 -0
- package/dist/commands/work.d.ts.map +1 -0
- package/dist/commands/work.js +118 -0
- package/dist/commands/work.js.map +1 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +88 -0
- package/dist/config.js.map +1 -0
- package/dist/git-utils.d.ts +55 -0
- package/dist/git-utils.d.ts.map +1 -0
- package/dist/git-utils.js +140 -0
- package/dist/git-utils.js.map +1 -0
- package/dist/github-api.d.ts +110 -0
- package/dist/github-api.d.ts.map +1 -0
- package/dist/github-api.js +579 -0
- package/dist/github-api.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +149 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +37 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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"}
|