@bretwardjames/ghp-cli 0.13.0 → 0.14.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/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +3 -6
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/dashboard-pipeline.d.ts +13 -0
- package/dist/commands/dashboard-pipeline.d.ts.map +1 -0
- package/dist/commands/dashboard-pipeline.js +475 -0
- package/dist/commands/dashboard-pipeline.js.map +1 -0
- package/dist/commands/pipeline-commands.d.ts +11 -0
- package/dist/commands/pipeline-commands.d.ts.map +1 -0
- package/dist/commands/pipeline-commands.js +101 -0
- package/dist/commands/pipeline-commands.js.map +1 -0
- package/dist/commands/start.d.ts +2 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +31 -9
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts +28 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +90 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/worktree-swap-state.d.ts +19 -0
- package/dist/commands/worktree-swap-state.d.ts.map +1 -0
- package/dist/commands/worktree-swap-state.js +29 -0
- package/dist/commands/worktree-swap-state.js.map +1 -0
- package/dist/commands/worktree-swap.d.ts +48 -0
- package/dist/commands/worktree-swap.d.ts.map +1 -0
- package/dist/commands/worktree-swap.js +456 -0
- package/dist/commands/worktree-swap.js.map +1 -0
- package/dist/config.d.ts +8 -42
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -4
- package/dist/config.js.map +1 -1
- package/dist/exit.d.ts +5 -0
- package/dist/exit.d.ts.map +1 -1
- package/dist/exit.js +7 -0
- package/dist/exit.js.map +1 -1
- package/dist/git-utils.d.ts +9 -0
- package/dist/git-utils.d.ts.map +1 -1
- package/dist/git-utils.js +19 -0
- package/dist/git-utils.js.map +1 -1
- package/dist/index.js +57 -23
- package/dist/index.js.map +1 -1
- package/dist/pipeline-registry.d.ts +50 -0
- package/dist/pipeline-registry.d.ts.map +1 -0
- package/dist/pipeline-registry.js +186 -0
- package/dist/pipeline-registry.js.map +1 -0
- package/dist/terminal-utils.d.ts +21 -27
- package/dist/terminal-utils.d.ts.map +1 -1
- package/dist/terminal-utils.js +53 -135
- package/dist/terminal-utils.js.map +1 -1
- package/dist/worktree-utils.d.ts.map +1 -1
- package/dist/worktree-utils.js +3 -39
- package/dist/worktree-utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worktree branch-swapping commands for ghp CLI.
|
|
3
|
+
*
|
|
4
|
+
* Enables "move-to" testing workflow:
|
|
5
|
+
* ghp wt move-to <issue> — detach worktree HEAD, checkout branch in main repo
|
|
6
|
+
* ghp wt clean — reverse the swap, restore both repos to original state
|
|
7
|
+
*/
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { execFile } from 'child_process';
|
|
10
|
+
import { promisify } from 'util';
|
|
11
|
+
import { api } from '../github-api.js';
|
|
12
|
+
import { readSwapState, writeSwapState, clearSwapState, } from './worktree-swap-state.js';
|
|
13
|
+
import { detectRepository, listWorktrees, getMainWorktreeRoot, getCurrentBranch, hasUncommittedChanges } from '../git-utils.js';
|
|
14
|
+
import { getBranchForIssue } from '../branch-linker.js';
|
|
15
|
+
import { exit } from '../exit.js';
|
|
16
|
+
import { advanceWorktreeStage, setWorktreeStage, getReadyWorktrees, getPipelineEntry, getIntegrationTriggerStage, } from '../pipeline-registry.js';
|
|
17
|
+
const execFileAsync = promisify(execFile);
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Git helpers (use execFile to avoid shell injection via branch names)
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
/** Detach HEAD in a specific worktree directory. */
|
|
22
|
+
async function detachWorktreeHead(worktreePath) {
|
|
23
|
+
await execFileAsync('git', ['checkout', '--detach'], { cwd: worktreePath });
|
|
24
|
+
}
|
|
25
|
+
/** Re-attach a worktree to a branch (checkout the branch inside it). */
|
|
26
|
+
async function reattachWorktree(worktreePath, branch) {
|
|
27
|
+
await execFileAsync('git', ['checkout', branch], { cwd: worktreePath });
|
|
28
|
+
}
|
|
29
|
+
/** Checkout a branch in the main repo. */
|
|
30
|
+
async function checkoutInMain(branch, repoRoot) {
|
|
31
|
+
await execFileAsync('git', ['checkout', branch], { cwd: repoRoot });
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Determine how main's HEAD relates to the worktree branch.
|
|
35
|
+
*
|
|
36
|
+
* During a swap the worktree branch pointer has not moved since move-to, so
|
|
37
|
+
* the only realistic outcomes are:
|
|
38
|
+
* 'same' — HEAD matches branch tip (no commits made while testing)
|
|
39
|
+
* 'behind' — branch advanced elsewhere (e.g. a push from the worktree)
|
|
40
|
+
* 'diverged' — unrelated commits on both sides
|
|
41
|
+
*
|
|
42
|
+
* 'ahead' is theoretically possible only if the user committed directly on top
|
|
43
|
+
* of the branch in main during the swap (unusual). We keep the check for
|
|
44
|
+
* correctness but document it as the uncommon path.
|
|
45
|
+
*/
|
|
46
|
+
async function headRelationToBranch(branch, repoRoot) {
|
|
47
|
+
let branchSha;
|
|
48
|
+
let headSha;
|
|
49
|
+
try {
|
|
50
|
+
branchSha = (await execFileAsync('git', ['rev-parse', branch], { cwd: repoRoot })).stdout.trim();
|
|
51
|
+
headSha = (await execFileAsync('git', ['rev-parse', 'HEAD'], { cwd: repoRoot })).stdout.trim();
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return 'diverged';
|
|
55
|
+
}
|
|
56
|
+
if (headSha === branchSha)
|
|
57
|
+
return 'same';
|
|
58
|
+
// Is branch an ancestor of HEAD? (HEAD is ahead of branch — user committed during swap)
|
|
59
|
+
try {
|
|
60
|
+
await execFileAsync('git', ['merge-base', '--is-ancestor', branch, 'HEAD'], { cwd: repoRoot });
|
|
61
|
+
return 'ahead';
|
|
62
|
+
}
|
|
63
|
+
catch { /* not an ancestor */ }
|
|
64
|
+
// Is HEAD an ancestor of branch? (branch moved forward elsewhere)
|
|
65
|
+
try {
|
|
66
|
+
await execFileAsync('git', ['merge-base', '--is-ancestor', 'HEAD', branch], { cwd: repoRoot });
|
|
67
|
+
return 'behind';
|
|
68
|
+
}
|
|
69
|
+
catch { /* not an ancestor */ }
|
|
70
|
+
return 'diverged';
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Swap a worktree's branch into the main repo for live testing.
|
|
74
|
+
*
|
|
75
|
+
* Steps:
|
|
76
|
+
* 1. Verify we're in the main worktree (not a linked one)
|
|
77
|
+
* 2. Verify no swap already in progress
|
|
78
|
+
* 3. Locate the worktree for the given issue
|
|
79
|
+
* 4. Save current state (main branch, worktree path/branch)
|
|
80
|
+
* 5. Detach worktree HEAD (so git allows main to check out the branch)
|
|
81
|
+
* 6. Checkout the branch in main
|
|
82
|
+
* 7. On failure at step 6: automatically re-attach worktree and abort
|
|
83
|
+
*/
|
|
84
|
+
export async function worktreeMoveToCommand(issue, options) {
|
|
85
|
+
const issueNumber = parseInt(issue, 10);
|
|
86
|
+
if (isNaN(issueNumber)) {
|
|
87
|
+
console.error(chalk.red('Error:'), 'Issue must be a number');
|
|
88
|
+
exit(1);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const repo = await detectRepository();
|
|
92
|
+
if (!repo) {
|
|
93
|
+
console.error(chalk.red('Error:'), 'Not in a git repository with a GitHub remote');
|
|
94
|
+
exit(1);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Resolve the main worktree root (not the cwd, which may be a linked worktree)
|
|
98
|
+
const repoRoot = await getMainWorktreeRoot();
|
|
99
|
+
if (!repoRoot) {
|
|
100
|
+
console.error(chalk.red('Error:'), 'Could not determine repository root');
|
|
101
|
+
exit(1);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Guard: must be run from the main worktree, not a linked one
|
|
105
|
+
const cwd = process.cwd();
|
|
106
|
+
if (!cwd.startsWith(repoRoot) || cwd !== repoRoot) {
|
|
107
|
+
// Allow subdirectories of main repo, but not linked worktrees
|
|
108
|
+
const worktrees = await listWorktrees();
|
|
109
|
+
const isLinked = worktrees.some(wt => !wt.isMain && cwd.startsWith(wt.path));
|
|
110
|
+
if (isLinked) {
|
|
111
|
+
console.error(chalk.red('Error:'), 'Run this command from the main repository, not from a linked worktree.');
|
|
112
|
+
exit(1);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Guard: swap already in progress
|
|
117
|
+
const existing = readSwapState(repoRoot);
|
|
118
|
+
if (existing) {
|
|
119
|
+
console.error(chalk.red('Error:'), 'A worktree swap is already in progress.');
|
|
120
|
+
console.error(` Branch: ${chalk.cyan(existing.worktreeBranch)}`);
|
|
121
|
+
console.error(` Since: ${chalk.dim(existing.swappedAt)}`);
|
|
122
|
+
console.error(`Run ${chalk.cyan('ghp wt clean')} to finish or undo the current swap.`);
|
|
123
|
+
exit(1);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Check for uncommitted changes in main
|
|
127
|
+
if (!options.force && await hasUncommittedChanges()) {
|
|
128
|
+
console.error(chalk.red('Error:'), 'Main repo has uncommitted changes.');
|
|
129
|
+
console.error('Commit or stash them first, or use --force to proceed anyway.');
|
|
130
|
+
exit(1);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const authenticated = await api.authenticate();
|
|
134
|
+
if (!authenticated) {
|
|
135
|
+
console.error(chalk.red('Error:'), 'Not authenticated. Run', chalk.cyan('ghp auth'));
|
|
136
|
+
exit(1);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// Find branch for the issue
|
|
140
|
+
const branchName = await getBranchForIssue(repo, issueNumber);
|
|
141
|
+
if (!branchName) {
|
|
142
|
+
console.error(chalk.red('Error:'), `No branch linked to issue #${issueNumber}`);
|
|
143
|
+
exit(1);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// Find the worktree for this branch
|
|
147
|
+
const worktrees = await listWorktrees();
|
|
148
|
+
const worktree = worktrees.find(wt => wt.branch === branchName && !wt.isMain);
|
|
149
|
+
if (!worktree) {
|
|
150
|
+
console.error(chalk.red('Error:'), `No worktree found for issue #${issueNumber} (branch: ${branchName})`);
|
|
151
|
+
console.error(`Create one with ${chalk.cyan(`ghp start ${issueNumber} --parallel`)}`);
|
|
152
|
+
exit(1);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const mainBranch = await getCurrentBranch();
|
|
156
|
+
if (!mainBranch) {
|
|
157
|
+
console.error(chalk.red('Error:'), 'Could not determine current branch');
|
|
158
|
+
exit(1);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
console.log(chalk.dim(`Swapping ${chalk.cyan(branchName)} into main repo...`));
|
|
162
|
+
console.log(chalk.dim(` Worktree: ${worktree.path}`));
|
|
163
|
+
// Step 1: Detach worktree HEAD
|
|
164
|
+
try {
|
|
165
|
+
await detachWorktreeHead(worktree.path);
|
|
166
|
+
console.log(chalk.dim(` Detached HEAD in worktree`));
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
console.error(chalk.red('Error:'), 'Failed to detach worktree HEAD:', error instanceof Error ? error.message : String(error));
|
|
170
|
+
exit(1);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
// Step 2: Checkout the branch in main (with rollback on failure)
|
|
174
|
+
try {
|
|
175
|
+
await checkoutInMain(branchName, repoRoot);
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
console.error(chalk.red('Error:'), 'Failed to checkout branch in main repo:', error instanceof Error ? error.message : String(error));
|
|
179
|
+
console.log(chalk.yellow('Rolling back:'), 're-attaching worktree...');
|
|
180
|
+
try {
|
|
181
|
+
await reattachWorktree(worktree.path, branchName);
|
|
182
|
+
console.log(chalk.dim(' Worktree re-attached.'));
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
console.error(chalk.yellow('Warning:'), 'Could not re-attach worktree automatically.');
|
|
186
|
+
console.error(` Run manually: ${chalk.cyan(`git -C "${worktree.path}" checkout "${branchName}"`)}`);
|
|
187
|
+
}
|
|
188
|
+
exit(1);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// Step 3: Save state and advance pipeline to stage 2
|
|
192
|
+
writeSwapState(repoRoot, {
|
|
193
|
+
mainBranch,
|
|
194
|
+
worktreePath: worktree.path,
|
|
195
|
+
worktreeBranch: branchName,
|
|
196
|
+
swappedAt: new Date().toISOString(),
|
|
197
|
+
});
|
|
198
|
+
advanceWorktreeStage(repoRoot, issueNumber);
|
|
199
|
+
console.log(chalk.green('✓'), `Now on ${chalk.cyan(branchName)} in main repo`);
|
|
200
|
+
console.log(chalk.dim(` Main was on: ${mainBranch}`));
|
|
201
|
+
console.log(chalk.dim(` Worktree HEAD detached at: ${worktree.path}`));
|
|
202
|
+
console.log();
|
|
203
|
+
console.log(`When done testing, run ${chalk.cyan('ghp wt clean')} to restore both repos.`);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Reverse a worktree swap: restore main to its previous branch and re-attach
|
|
207
|
+
* the worktree. If main accumulated new commits during testing, safely advances
|
|
208
|
+
* the branch pointer before switching away.
|
|
209
|
+
*/
|
|
210
|
+
export async function worktreeCleanCommand(options) {
|
|
211
|
+
const repoRoot = await getMainWorktreeRoot();
|
|
212
|
+
if (!repoRoot) {
|
|
213
|
+
console.error(chalk.red('Error:'), 'Could not determine repository root');
|
|
214
|
+
exit(1);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const state = readSwapState(repoRoot);
|
|
218
|
+
if (!state) {
|
|
219
|
+
console.error(chalk.red('Error:'), 'No worktree swap in progress.');
|
|
220
|
+
console.error(`Use ${chalk.cyan('ghp wt move-to <issue>')} to start a swap.`);
|
|
221
|
+
exit(1);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
// Check for uncommitted changes before switching away
|
|
225
|
+
if (!options.force && await hasUncommittedChanges()) {
|
|
226
|
+
console.error(chalk.red('Error:'), 'Main repo has uncommitted changes.');
|
|
227
|
+
console.error('Commit or stash them first, or use --force to restore anyway.');
|
|
228
|
+
exit(1);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
console.log(chalk.dim(`Cleaning up swap for ${chalk.cyan(state.worktreeBranch)}...`));
|
|
232
|
+
// Check if main accumulated commits during testing
|
|
233
|
+
const relation = await headRelationToBranch(state.worktreeBranch, repoRoot);
|
|
234
|
+
if (relation === 'ahead') {
|
|
235
|
+
// Uncommon: user committed directly on the branch in main during the swap.
|
|
236
|
+
// Advance branch pointer so the worktree picks them up.
|
|
237
|
+
console.log(chalk.dim(` Main has new commits — advancing ${state.worktreeBranch} branch pointer`));
|
|
238
|
+
try {
|
|
239
|
+
await execFileAsync('git', ['branch', '-f', state.worktreeBranch, 'HEAD'], { cwd: repoRoot });
|
|
240
|
+
console.log(chalk.green('✓'), `Advanced ${chalk.cyan(state.worktreeBranch)} to current HEAD`);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
console.error(chalk.red('Error:'), 'Failed to advance branch pointer:', error instanceof Error ? error.message : String(error));
|
|
244
|
+
if (!options.force) {
|
|
245
|
+
exit(1);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
else if (relation === 'diverged') {
|
|
251
|
+
console.log(chalk.yellow('Warning:'), `${state.worktreeBranch} and current HEAD have diverged.`);
|
|
252
|
+
console.log(chalk.dim(' The branch pointer will NOT be moved. Resolve the divergence manually.'));
|
|
253
|
+
if (!options.force) {
|
|
254
|
+
console.error(`Use --force to restore repos anyway (branch pointer will be left as-is).`);
|
|
255
|
+
exit(1);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else if (relation === 'same') {
|
|
260
|
+
console.log(chalk.dim(' No new commits in main — branch pointer unchanged'));
|
|
261
|
+
}
|
|
262
|
+
// Restore main to its previous branch
|
|
263
|
+
try {
|
|
264
|
+
await checkoutInMain(state.mainBranch, repoRoot);
|
|
265
|
+
console.log(chalk.dim(` Restored main to ${state.mainBranch}`));
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
console.error(chalk.red('Error:'), 'Failed to restore main branch:', error instanceof Error ? error.message : String(error));
|
|
269
|
+
exit(1);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
// Re-attach worktree
|
|
273
|
+
try {
|
|
274
|
+
await reattachWorktree(state.worktreePath, state.worktreeBranch);
|
|
275
|
+
console.log(chalk.dim(` Re-attached worktree to ${state.worktreeBranch}`));
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
console.error(chalk.red('Error:'), 'Failed to re-attach worktree:', error instanceof Error ? error.message : String(error));
|
|
279
|
+
console.error(` Run manually: ${chalk.cyan(`git -C "${state.worktreePath}" checkout "${state.worktreeBranch}"`)}`);
|
|
280
|
+
// Still clear state since main was restored
|
|
281
|
+
}
|
|
282
|
+
clearSwapState(repoRoot);
|
|
283
|
+
// Advance worktree to stage 3 (polish)
|
|
284
|
+
const issueNum = extractIssueFromBranch(state.worktreeBranch);
|
|
285
|
+
if (issueNum) {
|
|
286
|
+
advanceWorktreeStage(repoRoot, issueNum);
|
|
287
|
+
}
|
|
288
|
+
console.log();
|
|
289
|
+
console.log(chalk.green('✓'), 'Swap reversed');
|
|
290
|
+
console.log(chalk.dim(` Main: back on ${state.mainBranch}`));
|
|
291
|
+
console.log(chalk.dim(` Worktree: ${state.worktreePath} re-attached to ${state.worktreeBranch}`));
|
|
292
|
+
// Prompt about next ready worktrees
|
|
293
|
+
const ready = getReadyWorktrees(repoRoot);
|
|
294
|
+
if (ready.length > 0) {
|
|
295
|
+
console.log();
|
|
296
|
+
console.log(chalk.bold(`${ready.length} worktree(s) ready for integration testing:`));
|
|
297
|
+
for (const entry of ready) {
|
|
298
|
+
const age = entry.stageEnteredAt ? formatAge(entry.stageEnteredAt) : '';
|
|
299
|
+
console.log(` ${chalk.cyan(`#${entry.issueNumber}`)} ${entry.issueTitle.substring(0, 40).padEnd(40)} ${chalk.dim(age)}`);
|
|
300
|
+
}
|
|
301
|
+
console.log();
|
|
302
|
+
console.log(`Run ${chalk.cyan('ghp wt next')} to swap in the next one.`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
function extractIssueFromBranch(branch) {
|
|
306
|
+
const match = branch.match(/\/(\d+)[-_]/);
|
|
307
|
+
if (match)
|
|
308
|
+
return parseInt(match[1], 10);
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
function formatAge(isoTimestamp) {
|
|
312
|
+
const ms = Date.now() - new Date(isoTimestamp).getTime();
|
|
313
|
+
const minutes = Math.floor(ms / 60000);
|
|
314
|
+
if (minutes < 60)
|
|
315
|
+
return `ready ${minutes}m ago`;
|
|
316
|
+
const hours = Math.floor(minutes / 60);
|
|
317
|
+
return `ready ${hours}h ago`;
|
|
318
|
+
}
|
|
319
|
+
// ---------------------------------------------------------------------------
|
|
320
|
+
// status
|
|
321
|
+
// ---------------------------------------------------------------------------
|
|
322
|
+
/**
|
|
323
|
+
* Show the current swap state, if any.
|
|
324
|
+
*/
|
|
325
|
+
export async function worktreeSwapStatusCommand() {
|
|
326
|
+
const repoRoot = await getMainWorktreeRoot();
|
|
327
|
+
if (!repoRoot) {
|
|
328
|
+
console.error(chalk.red('Error:'), 'Could not determine repository root');
|
|
329
|
+
exit(1);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
const state = readSwapState(repoRoot);
|
|
333
|
+
if (!state) {
|
|
334
|
+
console.log(chalk.dim('No worktree swap in progress.'));
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
console.log(chalk.bold('Active worktree swap:'));
|
|
338
|
+
console.log(` Branch: ${chalk.cyan(state.worktreeBranch)}`);
|
|
339
|
+
console.log(` Worktree: ${chalk.dim(state.worktreePath)}`);
|
|
340
|
+
console.log(` Main was: ${chalk.dim(state.mainBranch)}`);
|
|
341
|
+
console.log(` Since: ${chalk.dim(new Date(state.swappedAt).toLocaleString())}`);
|
|
342
|
+
console.log();
|
|
343
|
+
console.log(`Run ${chalk.cyan('ghp wt clean')} to restore both repos.`);
|
|
344
|
+
}
|
|
345
|
+
// ---------------------------------------------------------------------------
|
|
346
|
+
// ready
|
|
347
|
+
// ---------------------------------------------------------------------------
|
|
348
|
+
/**
|
|
349
|
+
* Mark the current worktree's stage as complete — ready for integration testing.
|
|
350
|
+
* Auto-detects the issue from the current branch if not specified.
|
|
351
|
+
*/
|
|
352
|
+
export async function worktreeReadyCommand(issueArg) {
|
|
353
|
+
const repoRoot = await getMainWorktreeRoot();
|
|
354
|
+
if (!repoRoot) {
|
|
355
|
+
console.error(chalk.red('Error:'), 'Could not determine repository root');
|
|
356
|
+
exit(1);
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
let issueNumber;
|
|
360
|
+
if (issueArg) {
|
|
361
|
+
issueNumber = parseInt(issueArg, 10);
|
|
362
|
+
if (isNaN(issueNumber)) {
|
|
363
|
+
console.error(chalk.red('Error:'), 'Issue must be a number');
|
|
364
|
+
exit(1);
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
// Auto-detect from cwd branch
|
|
370
|
+
const { execFile } = await import('child_process');
|
|
371
|
+
const { promisify } = await import('util');
|
|
372
|
+
const execFileAsync = promisify(execFile);
|
|
373
|
+
try {
|
|
374
|
+
const { stdout } = await execFileAsync('git', ['branch', '--show-current'], { cwd: process.cwd() });
|
|
375
|
+
const branch = stdout.trim();
|
|
376
|
+
const detected = extractIssueFromBranch(branch);
|
|
377
|
+
if (!detected) {
|
|
378
|
+
console.error(chalk.red('Error:'), `Could not detect issue number from branch: ${branch}`);
|
|
379
|
+
console.error('Pass the issue number explicitly: ghp wt ready <issue>');
|
|
380
|
+
exit(1);
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
issueNumber = detected;
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
console.error(chalk.red('Error:'), 'Could not determine current branch');
|
|
387
|
+
exit(1);
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
const triggerStage = getIntegrationTriggerStage();
|
|
392
|
+
const entry = setWorktreeStage(repoRoot, issueNumber, triggerStage);
|
|
393
|
+
if (!entry) {
|
|
394
|
+
console.error(chalk.red('Error:'), `Issue #${issueNumber} is not registered in the pipeline.`);
|
|
395
|
+
console.error('It may not have been started with --parallel, or the pipeline registry is missing.');
|
|
396
|
+
exit(1);
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
console.log(chalk.green('✓'), `#${issueNumber} marked ${chalk.cyan(triggerStage)}`);
|
|
400
|
+
console.log(chalk.dim(` Branch: ${entry.branch}`));
|
|
401
|
+
console.log(chalk.dim(` Worktree: ${entry.worktreePath}`));
|
|
402
|
+
console.log();
|
|
403
|
+
console.log(`From the main repo, run ${chalk.cyan('ghp wt next')} to swap it in.`);
|
|
404
|
+
}
|
|
405
|
+
// ---------------------------------------------------------------------------
|
|
406
|
+
// next
|
|
407
|
+
// ---------------------------------------------------------------------------
|
|
408
|
+
/**
|
|
409
|
+
* Swap the next ready worktree into the main repo.
|
|
410
|
+
* Picks FIFO by stageEnteredAt unless a specific issue is given.
|
|
411
|
+
*/
|
|
412
|
+
export async function worktreeNextCommand(issueArg) {
|
|
413
|
+
const repoRoot = await getMainWorktreeRoot();
|
|
414
|
+
if (!repoRoot) {
|
|
415
|
+
console.error(chalk.red('Error:'), 'Could not determine repository root');
|
|
416
|
+
exit(1);
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
let entry;
|
|
420
|
+
if (issueArg) {
|
|
421
|
+
const issueNumber = parseInt(issueArg, 10);
|
|
422
|
+
if (isNaN(issueNumber)) {
|
|
423
|
+
console.error(chalk.red('Error:'), 'Issue must be a number');
|
|
424
|
+
exit(1);
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
const found = getPipelineEntry(repoRoot, issueNumber);
|
|
428
|
+
if (!found) {
|
|
429
|
+
console.error(chalk.red('Error:'), `Issue #${issueNumber} is not in the pipeline.`);
|
|
430
|
+
exit(1);
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
const triggerStage = getIntegrationTriggerStage();
|
|
434
|
+
if (found.stage !== triggerStage) {
|
|
435
|
+
console.error(chalk.red('Error:'), `Issue #${issueNumber} is not ready (stage: ${found.stage}, need: ${triggerStage}).`);
|
|
436
|
+
exit(1);
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
439
|
+
entry = found;
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
const ready = getReadyWorktrees(repoRoot);
|
|
443
|
+
if (ready.length === 0) {
|
|
444
|
+
console.log(chalk.dim('No worktrees are ready for integration testing.'));
|
|
445
|
+
console.log(chalk.dim('Agents signal readiness with: ghp wt ready'));
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
entry = ready[0];
|
|
449
|
+
if (ready.length > 1) {
|
|
450
|
+
console.log(chalk.dim(`${ready.length} worktrees ready — picking oldest: #${entry.issueNumber}`));
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
// Delegate to move-to logic
|
|
454
|
+
await worktreeMoveToCommand(String(entry.issueNumber), {});
|
|
455
|
+
}
|
|
456
|
+
//# sourceMappingURL=worktree-swap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-swap.js","sourceRoot":"","sources":["../../src/commands/worktree-swap.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -28,21 +28,7 @@ export interface WorkDefaults {
|
|
|
28
28
|
* - 'nvim-claude': Open nvim with coder/claudecode.nvim plugin
|
|
29
29
|
* - 'terminal': Just open terminal, no Claude
|
|
30
30
|
*/
|
|
31
|
-
export type TerminalMode = 'claude' | 'nvim-claude' | 'terminal'
|
|
32
|
-
/**
|
|
33
|
-
* A single pane definition for the 'custom' terminal mode.
|
|
34
|
-
* Supports template variables: {worktreePath}, {issueNumber}, {issueTitle}, {claudeCommand}
|
|
35
|
-
*/
|
|
36
|
-
export interface CustomLayoutPane {
|
|
37
|
-
/** Command to run in this pane */
|
|
38
|
-
command: string;
|
|
39
|
-
/** How to split from the previous pane (omit for the first/main pane) */
|
|
40
|
-
split?: 'horizontal' | 'vertical';
|
|
41
|
-
/** Size of this pane as a percentage of the pane being split (default: 50) */
|
|
42
|
-
size?: number;
|
|
43
|
-
/** Whether to focus this pane after layout is built (default: first pane) */
|
|
44
|
-
focus?: boolean;
|
|
45
|
-
}
|
|
31
|
+
export type TerminalMode = 'claude' | 'nvim-claude' | 'terminal';
|
|
46
32
|
export interface ParallelWorkConfig {
|
|
47
33
|
/** Terminal emulator to use (e.g., 'ghostty', 'gnome-terminal', 'tmux') */
|
|
48
34
|
terminal?: string;
|
|
@@ -54,35 +40,16 @@ export interface ParallelWorkConfig {
|
|
|
54
40
|
claudeCommand?: string;
|
|
55
41
|
/** Whether to auto-resume previous Claude sessions when switching to worktree (default: true) */
|
|
56
42
|
autoResume?: boolean;
|
|
57
|
-
/** Terminal mode: 'claude' (default), 'nvim-claude',
|
|
43
|
+
/** Terminal mode: 'claude' (default), 'nvim-claude', or 'terminal' */
|
|
58
44
|
terminalMode?: TerminalMode;
|
|
59
45
|
/** Neovim command to use (default: 'nvim') */
|
|
60
46
|
nvimCommand?: string;
|
|
61
|
-
/**
|
|
62
|
-
* Pane layout for 'custom' terminal mode.
|
|
63
|
-
* First entry is the main window; subsequent entries are splits.
|
|
64
|
-
* Commands support template vars: {worktreePath}, {issueNumber}, {issueTitle}, {claudeCommand}
|
|
65
|
-
*/
|
|
66
|
-
customLayout?: CustomLayoutPane[];
|
|
67
47
|
/** Tmux-specific configuration (used when terminal is 'tmux' or auto-detected inside tmux) */
|
|
68
48
|
tmux?: {
|
|
69
49
|
/** Whether to spawn a new window or split the current window into a pane */
|
|
70
50
|
mode?: 'window' | 'pane';
|
|
71
51
|
/** Direction to split when mode is 'pane' */
|
|
72
52
|
paneDirection?: 'horizontal' | 'vertical';
|
|
73
|
-
/**
|
|
74
|
-
* Template for the initial window name when spawning a parallel worktree.
|
|
75
|
-
* Supports {issueNumber}, {issueTitle}, {branch}.
|
|
76
|
-
* Default: "ghp-{issueNumber}"
|
|
77
|
-
*/
|
|
78
|
-
windowName?: string;
|
|
79
|
-
/**
|
|
80
|
-
* Named title templates. Claude (or any pane) can apply one with:
|
|
81
|
-
* ghp tmux rename --template <name>
|
|
82
|
-
* Template vars: {issueNumber}, {issueTitle}, {branch}
|
|
83
|
-
* Example: { "waiting": "⏳ {issueNumber}", "working": "⚙️ {issueNumber}" }
|
|
84
|
-
*/
|
|
85
|
-
titleTemplates?: Record<string, string>;
|
|
86
53
|
};
|
|
87
54
|
}
|
|
88
55
|
/**
|
|
@@ -148,13 +115,18 @@ export interface Config {
|
|
|
148
115
|
columns?: string;
|
|
149
116
|
worktreePath?: string;
|
|
150
117
|
worktreeCopyFiles?: string[];
|
|
151
|
-
worktreeLinkFiles?: string[];
|
|
152
118
|
worktreeSetupCommand?: string;
|
|
153
119
|
worktreeAutoSetup?: boolean;
|
|
154
120
|
parallelWork?: ParallelWorkConfig;
|
|
155
121
|
mcp?: McpConfig;
|
|
156
122
|
claude?: ClaudeConfig;
|
|
157
123
|
hooks?: HooksConfig;
|
|
124
|
+
pipeline?: {
|
|
125
|
+
/** Ordered list of pipeline stage names */
|
|
126
|
+
stages?: string[];
|
|
127
|
+
/** Stage name after which integration testing is triggered */
|
|
128
|
+
integrationAfter?: string;
|
|
129
|
+
};
|
|
158
130
|
defaults?: {
|
|
159
131
|
plan?: PlanShortcut;
|
|
160
132
|
work?: WorkDefaults;
|
|
@@ -277,7 +249,6 @@ export declare function listConfig(): Record<string, string | string[] | boolean
|
|
|
277
249
|
export interface WorktreeConfig {
|
|
278
250
|
path: string;
|
|
279
251
|
copyFiles: string[];
|
|
280
|
-
linkFiles: string[];
|
|
281
252
|
setupCommand: string;
|
|
282
253
|
autoSetup: boolean;
|
|
283
254
|
}
|
|
@@ -293,11 +264,6 @@ export interface ResolvedParallelWorkConfig {
|
|
|
293
264
|
autoResume: boolean;
|
|
294
265
|
terminalMode: TerminalMode;
|
|
295
266
|
nvimCommand: string;
|
|
296
|
-
customLayout: CustomLayoutPane[];
|
|
297
|
-
/** Resolved tmux window name template (default: "ghp-{issueNumber}") */
|
|
298
|
-
tmuxWindowName: string;
|
|
299
|
-
/** Named title templates for `ghp tmux rename --template <name>` */
|
|
300
|
-
tmuxTitleTemplates: Record<string, string>;
|
|
301
267
|
}
|
|
302
268
|
/**
|
|
303
269
|
* Get the parallel work configuration with defaults applied
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAG1B,MAAM,yBAAyB,CAAC;AAUjC,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,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;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,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;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -407,7 +407,6 @@ export function getWorktreeConfig() {
|
|
|
407
407
|
return {
|
|
408
408
|
path: config.worktreePath ?? DEFAULT_CONFIG.worktreePath,
|
|
409
409
|
copyFiles: config.worktreeCopyFiles ?? DEFAULT_CONFIG.worktreeCopyFiles,
|
|
410
|
-
linkFiles: config.worktreeLinkFiles ?? [],
|
|
411
410
|
setupCommand: config.worktreeSetupCommand ?? DEFAULT_CONFIG.worktreeSetupCommand,
|
|
412
411
|
autoSetup: config.worktreeAutoSetup ?? DEFAULT_CONFIG.worktreeAutoSetup,
|
|
413
412
|
};
|
|
@@ -426,9 +425,6 @@ export function getParallelWorkConfig() {
|
|
|
426
425
|
autoResume: parallelWork.autoResume ?? true,
|
|
427
426
|
terminalMode: parallelWork.terminalMode ?? 'claude',
|
|
428
427
|
nvimCommand: parallelWork.nvimCommand ?? 'nvim',
|
|
429
|
-
customLayout: parallelWork.customLayout ?? [],
|
|
430
|
-
tmuxWindowName: parallelWork.tmux?.windowName ?? 'ghp-{issueNumber}',
|
|
431
|
-
tmuxTitleTemplates: parallelWork.tmux?.titleTemplates ?? {},
|
|
432
428
|
};
|
|
433
429
|
}
|
|
434
430
|
/**
|