@bretwardjames/ghp-cli 0.16.2 → 0.17.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 +12 -18
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/dashboard-pipeline.d.ts.map +1 -1
- package/dist/commands/dashboard-pipeline.js +167 -17
- package/dist/commands/dashboard-pipeline.js.map +1 -1
- package/dist/commands/done.d.ts.map +1 -1
- package/dist/commands/done.js +10 -1
- package/dist/commands/done.js.map +1 -1
- package/dist/commands/pipeline-commands.d.ts +75 -3
- package/dist/commands/pipeline-commands.d.ts.map +1 -1
- package/dist/commands/pipeline-commands.js +342 -5
- package/dist/commands/pipeline-commands.js.map +1 -1
- package/dist/commands/pipeline-setup.d.ts +23 -0
- package/dist/commands/pipeline-setup.d.ts.map +1 -0
- package/dist/commands/pipeline-setup.js +740 -0
- package/dist/commands/pipeline-setup.js.map +1 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +6 -4
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +10 -1
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/worktree.d.ts.map +1 -1
- package/dist/commands/worktree.js +10 -0
- package/dist/commands/worktree.js.map +1 -1
- package/dist/config.d.ts +33 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +20 -0
- package/dist/config.js.map +1 -1
- package/dist/index.js +44 -1
- package/dist/index.js.map +1 -1
- package/dist/pipeline-registry.d.ts +1 -1
- package/dist/pipeline-registry.d.ts.map +1 -1
- package/dist/pipeline-registry.js +3 -24
- package/dist/pipeline-registry.js.map +1 -1
- package/dist/terminal-utils.d.ts +19 -5
- package/dist/terminal-utils.d.ts.map +1 -1
- package/dist/terminal-utils.js +61 -30
- package/dist/terminal-utils.js.map +1 -1
- package/dist/worktree-utils.d.ts.map +1 -1
- package/dist/worktree-utils.js +22 -7
- package/dist/worktree-utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,83 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pipeline stage management commands.
|
|
3
3
|
*
|
|
4
|
-
* ghp pipeline advance [issue]
|
|
5
|
-
* ghp pipeline set <stage> [issue]
|
|
6
|
-
* ghp pipeline stages
|
|
4
|
+
* ghp pipeline advance [issue] — advance to next stage
|
|
5
|
+
* ghp pipeline set <stage> [issue] — jump to specific stage
|
|
6
|
+
* ghp pipeline stages — list configured stages
|
|
7
|
+
* ghp pipeline agent-active — set agent to working + fire user hooks (PostToolUse)
|
|
8
|
+
* ghp pipeline agent-stopped — set agent to stopped + fire user hooks (Stop)
|
|
9
|
+
* ghp pipeline agent-focused <issue> — fire user hooks (dashboard pull)
|
|
10
|
+
* ghp pipeline agent-unfocused <issue>— fire user hooks (dashboard release)
|
|
7
11
|
*/
|
|
12
|
+
/**
|
|
13
|
+
* Resolve a hook script path with mode-aware dot-suffix convention.
|
|
14
|
+
*
|
|
15
|
+
* When mode is set (and not 'default'):
|
|
16
|
+
* 1. Try `.ghp/hooks/<hookName>.<mode>` (mode-specific)
|
|
17
|
+
* 2. Fall back to `.ghp/hooks/<hookName>` (generic)
|
|
18
|
+
*
|
|
19
|
+
* When mode is unset or 'default', only the unsuffixed script is checked.
|
|
20
|
+
* Returns the full path if found, or null.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveHookScript(repoRoot: string, hookName: string, mode?: string | null): string | null;
|
|
23
|
+
/**
|
|
24
|
+
* Run a user hook script from `.ghp/hooks/<hookName>` if it exists.
|
|
25
|
+
* Spawns fire-and-forget with stdinData piped to the script's stdin.
|
|
26
|
+
* Silent on errors. Supports mode-aware dot-suffix resolution.
|
|
27
|
+
*/
|
|
28
|
+
export declare function runUserHookScript(hookName: string, stdinData: string, cwd: string, mode?: string | null): Promise<void>;
|
|
8
29
|
export declare function pipelineAdvanceCommand(issueArg?: string): Promise<void>;
|
|
9
30
|
export declare function pipelineSetCommand(stage: string, issueArg?: string): Promise<void>;
|
|
31
|
+
export declare function pipelineRemoveCommand(issueArg?: string): Promise<void>;
|
|
10
32
|
export declare function pipelineStagesCommand(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* ghp pipeline agent-active
|
|
35
|
+
*
|
|
36
|
+
* Called from Claude Code PostToolUse hook. Sets pipeline stage to 'working'
|
|
37
|
+
* (idempotent) and runs user scripts from .ghp/hooks/agent-active.
|
|
38
|
+
*/
|
|
39
|
+
export declare function pipelineAgentActiveCommand(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* ghp pipeline agent-stopped
|
|
42
|
+
*
|
|
43
|
+
* Called from Claude Code Stop hook. Sets pipeline stage to 'stopped'
|
|
44
|
+
* and runs user scripts from .ghp/hooks/agent-stopped.
|
|
45
|
+
*/
|
|
46
|
+
export declare function pipelineAgentStoppedCommand(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* ghp pipeline agent-focused <issue> [--mode <mode>]
|
|
49
|
+
*
|
|
50
|
+
* Called from the dashboard's pullAgentPane(). Runs user scripts
|
|
51
|
+
* from .ghp/hooks/agent-focused (with mode-aware resolution).
|
|
52
|
+
*/
|
|
53
|
+
export declare function pipelineAgentFocusedCommand(issueArg: string, options?: {
|
|
54
|
+
mode?: string;
|
|
55
|
+
}): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* ghp pipeline agent-unfocused <issue> [--mode <mode>]
|
|
58
|
+
*
|
|
59
|
+
* Called from the dashboard's sendPaneBack(). Runs user scripts
|
|
60
|
+
* from .ghp/hooks/agent-unfocused (with mode-aware resolution).
|
|
61
|
+
*/
|
|
62
|
+
export declare function pipelineAgentUnfocusedCommand(issueArg: string, options?: {
|
|
63
|
+
mode?: string;
|
|
64
|
+
}): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* ghp pipeline agent-swapped <oldIssue> <newIssue> [--mode <mode>]
|
|
67
|
+
*
|
|
68
|
+
* Called from the dashboard when switching directly from one focused agent
|
|
69
|
+
* to another. Fires a single `agent-swapped` hook (with mode suffix if
|
|
70
|
+
* applicable). Falls back to sequential unfocus→focus if no swapped hook exists.
|
|
71
|
+
*/
|
|
72
|
+
export declare function pipelineAgentSwappedCommand(oldIssueArg: string, newIssueArg: string, options?: {
|
|
73
|
+
mode?: string;
|
|
74
|
+
}): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* ghp pipeline mode [name]
|
|
77
|
+
*
|
|
78
|
+
* Get or set the current hook mode. Without args, prints current mode.
|
|
79
|
+
* With a name, validates against configured hookModes and prints the new mode.
|
|
80
|
+
* (Runtime mode changes happen in the dashboard; this command is for scripting.)
|
|
81
|
+
*/
|
|
82
|
+
export declare function pipelineModeCommand(modeName?: string): Promise<void>;
|
|
11
83
|
//# sourceMappingURL=pipeline-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-commands.d.ts","sourceRoot":"","sources":["../../src/commands/pipeline-commands.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pipeline-commands.d.ts","sourceRoot":"","sources":["../../src/commands/pipeline-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA0DH;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAQzG;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB7H;AA8BD,wBAAsB,sBAAsB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B7E;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BxF;AAED,wBAAsB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB5E;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB3D;AAMD;;;;;GAKG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CA2BhE;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CA2BjE;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9G;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhH;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC7C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CA6Df;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B1E"}
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pipeline stage management commands.
|
|
3
3
|
*
|
|
4
|
-
* ghp pipeline advance [issue]
|
|
5
|
-
* ghp pipeline set <stage> [issue]
|
|
6
|
-
* ghp pipeline stages
|
|
4
|
+
* ghp pipeline advance [issue] — advance to next stage
|
|
5
|
+
* ghp pipeline set <stage> [issue] — jump to specific stage
|
|
6
|
+
* ghp pipeline stages — list configured stages
|
|
7
|
+
* ghp pipeline agent-active — set agent to working + fire user hooks (PostToolUse)
|
|
8
|
+
* ghp pipeline agent-stopped — set agent to stopped + fire user hooks (Stop)
|
|
9
|
+
* ghp pipeline agent-focused <issue> — fire user hooks (dashboard pull)
|
|
10
|
+
* ghp pipeline agent-unfocused <issue>— fire user hooks (dashboard release)
|
|
7
11
|
*/
|
|
8
12
|
import chalk from 'chalk';
|
|
9
|
-
import { execFileSync } from 'child_process';
|
|
13
|
+
import { execFileSync, spawn } from 'child_process';
|
|
14
|
+
import { existsSync } from 'fs';
|
|
15
|
+
import { join } from 'path';
|
|
10
16
|
import { getMainWorktreeRoot } from '../git-utils.js';
|
|
11
|
-
import {
|
|
17
|
+
import { getConfig } from '../config.js';
|
|
18
|
+
import { advanceWorktreeStage, setWorktreeStage, deregisterWorktree, getPipelineEntry, getPipelineStages, getIntegrationTriggerStage, getStageEmoji, } from '../pipeline-registry.js';
|
|
12
19
|
import { exit } from '../exit.js';
|
|
13
20
|
function extractIssueFromBranch(branch) {
|
|
14
21
|
const match = branch.match(/\/(\d+)-/);
|
|
@@ -28,6 +35,100 @@ async function resolveIssueNumber(issueArg) {
|
|
|
28
35
|
return null;
|
|
29
36
|
}
|
|
30
37
|
}
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Shared helpers
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/** Read all of stdin as a string (with a safety timeout). */
|
|
42
|
+
async function readStdin() {
|
|
43
|
+
try {
|
|
44
|
+
return await new Promise((resolve, reject) => {
|
|
45
|
+
const chunks = [];
|
|
46
|
+
process.stdin.on('data', (chunk) => chunks.push(chunk));
|
|
47
|
+
process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
|
|
48
|
+
process.stdin.on('error', reject);
|
|
49
|
+
// Safety timeout — don't hang forever if stdin never closes
|
|
50
|
+
setTimeout(() => resolve(Buffer.concat(chunks).toString('utf-8')), 2000);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return '';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Resolve a hook script path with mode-aware dot-suffix convention.
|
|
59
|
+
*
|
|
60
|
+
* When mode is set (and not 'default'):
|
|
61
|
+
* 1. Try `.ghp/hooks/<hookName>.<mode>` (mode-specific)
|
|
62
|
+
* 2. Fall back to `.ghp/hooks/<hookName>` (generic)
|
|
63
|
+
*
|
|
64
|
+
* When mode is unset or 'default', only the unsuffixed script is checked.
|
|
65
|
+
* Returns the full path if found, or null.
|
|
66
|
+
*/
|
|
67
|
+
export function resolveHookScript(repoRoot, hookName, mode) {
|
|
68
|
+
if (mode && mode !== 'default') {
|
|
69
|
+
const modedPath = join(repoRoot, '.ghp', 'hooks', `${hookName}.${mode}`);
|
|
70
|
+
if (existsSync(modedPath))
|
|
71
|
+
return modedPath;
|
|
72
|
+
}
|
|
73
|
+
const genericPath = join(repoRoot, '.ghp', 'hooks', hookName);
|
|
74
|
+
if (existsSync(genericPath))
|
|
75
|
+
return genericPath;
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Run a user hook script from `.ghp/hooks/<hookName>` if it exists.
|
|
80
|
+
* Spawns fire-and-forget with stdinData piped to the script's stdin.
|
|
81
|
+
* Silent on errors. Supports mode-aware dot-suffix resolution.
|
|
82
|
+
*/
|
|
83
|
+
export async function runUserHookScript(hookName, stdinData, cwd, mode) {
|
|
84
|
+
// Find the main worktree root (where .ghp/ lives)
|
|
85
|
+
const repoRoot = await getMainWorktreeRoot();
|
|
86
|
+
if (!repoRoot)
|
|
87
|
+
return;
|
|
88
|
+
const scriptPath = resolveHookScript(repoRoot, hookName, mode);
|
|
89
|
+
if (!scriptPath)
|
|
90
|
+
return;
|
|
91
|
+
try {
|
|
92
|
+
const child = spawn(scriptPath, [], {
|
|
93
|
+
cwd,
|
|
94
|
+
stdio: ['pipe', 'ignore', 'ignore'],
|
|
95
|
+
detached: true,
|
|
96
|
+
});
|
|
97
|
+
child.stdin.write(stdinData);
|
|
98
|
+
child.stdin.end();
|
|
99
|
+
child.unref();
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Silent — user scripts failing should never break the pipeline
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Resolve repo root and issue number from a cwd (extracted from hook JSON).
|
|
107
|
+
* Returns null if either cannot be determined.
|
|
108
|
+
*/
|
|
109
|
+
async function resolveFromCwd(cwd) {
|
|
110
|
+
const repoRoot = await getMainWorktreeRoot();
|
|
111
|
+
if (!repoRoot)
|
|
112
|
+
return null;
|
|
113
|
+
let issueNumber = null;
|
|
114
|
+
try {
|
|
115
|
+
const branch = execFileSync('git', ['branch', '--show-current'], {
|
|
116
|
+
encoding: 'utf-8',
|
|
117
|
+
cwd,
|
|
118
|
+
stdio: ['pipe', 'pipe', 'ignore'],
|
|
119
|
+
}).trim();
|
|
120
|
+
issueNumber = extractIssueFromBranch(branch);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
if (!issueNumber)
|
|
126
|
+
return null;
|
|
127
|
+
return { repoRoot, issueNumber };
|
|
128
|
+
}
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
// Existing commands (advance, set, remove, stages)
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
31
132
|
export async function pipelineAdvanceCommand(issueArg) {
|
|
32
133
|
const repoRoot = await getMainWorktreeRoot();
|
|
33
134
|
if (!repoRoot) {
|
|
@@ -82,6 +183,28 @@ export async function pipelineSetCommand(stage, issueArg) {
|
|
|
82
183
|
}
|
|
83
184
|
console.log(chalk.green('✓'), `#${issueNumber} → ${chalk.cyan(stage)}`);
|
|
84
185
|
}
|
|
186
|
+
export async function pipelineRemoveCommand(issueArg) {
|
|
187
|
+
const repoRoot = await getMainWorktreeRoot();
|
|
188
|
+
if (!repoRoot) {
|
|
189
|
+
console.error(chalk.red('Error:'), 'Could not determine repository root');
|
|
190
|
+
exit(1);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const issueNumber = await resolveIssueNumber(issueArg);
|
|
194
|
+
if (!issueNumber) {
|
|
195
|
+
console.error(chalk.red('Error:'), 'Could not determine issue number. Pass it explicitly: ghp pipeline remove <issue>');
|
|
196
|
+
exit(1);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const entry = getPipelineEntry(repoRoot, issueNumber);
|
|
200
|
+
if (!entry) {
|
|
201
|
+
console.error(chalk.red('Error:'), `Issue #${issueNumber} is not in the pipeline.`);
|
|
202
|
+
exit(1);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
deregisterWorktree(repoRoot, issueNumber);
|
|
206
|
+
console.log(chalk.green('✓'), `Removed #${issueNumber} from pipeline`);
|
|
207
|
+
}
|
|
85
208
|
export async function pipelineStagesCommand() {
|
|
86
209
|
const stages = getPipelineStages();
|
|
87
210
|
const triggerStage = getIntegrationTriggerStage();
|
|
@@ -100,4 +223,218 @@ export async function pipelineStagesCommand() {
|
|
|
100
223
|
console.log(chalk.dim('Configure with: ghp config pipeline.stages \'["stage1", "stage2", ...]\''));
|
|
101
224
|
console.log(chalk.dim('Integration trigger: ghp config pipeline.integrationAfter "<stage>"'));
|
|
102
225
|
}
|
|
226
|
+
// ---------------------------------------------------------------------------
|
|
227
|
+
// New agent-* commands
|
|
228
|
+
// ---------------------------------------------------------------------------
|
|
229
|
+
/**
|
|
230
|
+
* ghp pipeline agent-active
|
|
231
|
+
*
|
|
232
|
+
* Called from Claude Code PostToolUse hook. Sets pipeline stage to 'working'
|
|
233
|
+
* (idempotent) and runs user scripts from .ghp/hooks/agent-active.
|
|
234
|
+
*/
|
|
235
|
+
export async function pipelineAgentActiveCommand() {
|
|
236
|
+
const input = await readStdin();
|
|
237
|
+
if (!input.trim())
|
|
238
|
+
return;
|
|
239
|
+
let hookData;
|
|
240
|
+
try {
|
|
241
|
+
hookData = JSON.parse(input);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const { cwd } = hookData;
|
|
247
|
+
if (!cwd)
|
|
248
|
+
return;
|
|
249
|
+
const resolved = await resolveFromCwd(cwd);
|
|
250
|
+
if (!resolved)
|
|
251
|
+
return;
|
|
252
|
+
const { repoRoot, issueNumber } = resolved;
|
|
253
|
+
// Set to 'working' — idempotent, no-op if already 'working'
|
|
254
|
+
const entry = getPipelineEntry(repoRoot, issueNumber);
|
|
255
|
+
if (entry && entry.stage !== 'working') {
|
|
256
|
+
setWorktreeStage(repoRoot, issueNumber, 'working');
|
|
257
|
+
}
|
|
258
|
+
// Fire user hook script (fire-and-forget)
|
|
259
|
+
runUserHookScript('agent-active', input, cwd);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* ghp pipeline agent-stopped
|
|
263
|
+
*
|
|
264
|
+
* Called from Claude Code Stop hook. Sets pipeline stage to 'stopped'
|
|
265
|
+
* and runs user scripts from .ghp/hooks/agent-stopped.
|
|
266
|
+
*/
|
|
267
|
+
export async function pipelineAgentStoppedCommand() {
|
|
268
|
+
const input = await readStdin();
|
|
269
|
+
if (!input.trim())
|
|
270
|
+
return;
|
|
271
|
+
let hookData;
|
|
272
|
+
try {
|
|
273
|
+
hookData = JSON.parse(input);
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
const { cwd } = hookData;
|
|
279
|
+
if (!cwd)
|
|
280
|
+
return;
|
|
281
|
+
const resolved = await resolveFromCwd(cwd);
|
|
282
|
+
if (!resolved)
|
|
283
|
+
return;
|
|
284
|
+
const { repoRoot, issueNumber } = resolved;
|
|
285
|
+
// Set to 'stopped'
|
|
286
|
+
const entry = getPipelineEntry(repoRoot, issueNumber);
|
|
287
|
+
if (entry && entry.stage !== 'stopped') {
|
|
288
|
+
setWorktreeStage(repoRoot, issueNumber, 'stopped');
|
|
289
|
+
}
|
|
290
|
+
// Fire user hook script (fire-and-forget)
|
|
291
|
+
runUserHookScript('agent-stopped', input, cwd);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* ghp pipeline agent-focused <issue> [--mode <mode>]
|
|
295
|
+
*
|
|
296
|
+
* Called from the dashboard's pullAgentPane(). Runs user scripts
|
|
297
|
+
* from .ghp/hooks/agent-focused (with mode-aware resolution).
|
|
298
|
+
*/
|
|
299
|
+
export async function pipelineAgentFocusedCommand(issueArg, options) {
|
|
300
|
+
const issueNumber = parseInt(issueArg, 10);
|
|
301
|
+
if (isNaN(issueNumber))
|
|
302
|
+
return;
|
|
303
|
+
const repoRoot = await getMainWorktreeRoot();
|
|
304
|
+
if (!repoRoot)
|
|
305
|
+
return;
|
|
306
|
+
const entry = getPipelineEntry(repoRoot, issueNumber);
|
|
307
|
+
if (!entry)
|
|
308
|
+
return;
|
|
309
|
+
const payload = JSON.stringify({
|
|
310
|
+
issueNumber,
|
|
311
|
+
worktreePath: entry.worktreePath,
|
|
312
|
+
branch: entry.branch,
|
|
313
|
+
});
|
|
314
|
+
runUserHookScript('agent-focused', payload, entry.worktreePath, options?.mode);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* ghp pipeline agent-unfocused <issue> [--mode <mode>]
|
|
318
|
+
*
|
|
319
|
+
* Called from the dashboard's sendPaneBack(). Runs user scripts
|
|
320
|
+
* from .ghp/hooks/agent-unfocused (with mode-aware resolution).
|
|
321
|
+
*/
|
|
322
|
+
export async function pipelineAgentUnfocusedCommand(issueArg, options) {
|
|
323
|
+
const issueNumber = parseInt(issueArg, 10);
|
|
324
|
+
if (isNaN(issueNumber))
|
|
325
|
+
return;
|
|
326
|
+
const repoRoot = await getMainWorktreeRoot();
|
|
327
|
+
if (!repoRoot)
|
|
328
|
+
return;
|
|
329
|
+
const entry = getPipelineEntry(repoRoot, issueNumber);
|
|
330
|
+
if (!entry)
|
|
331
|
+
return;
|
|
332
|
+
const payload = JSON.stringify({
|
|
333
|
+
issueNumber,
|
|
334
|
+
worktreePath: entry.worktreePath,
|
|
335
|
+
branch: entry.branch,
|
|
336
|
+
});
|
|
337
|
+
runUserHookScript('agent-unfocused', payload, entry.worktreePath, options?.mode);
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* ghp pipeline agent-swapped <oldIssue> <newIssue> [--mode <mode>]
|
|
341
|
+
*
|
|
342
|
+
* Called from the dashboard when switching directly from one focused agent
|
|
343
|
+
* to another. Fires a single `agent-swapped` hook (with mode suffix if
|
|
344
|
+
* applicable). Falls back to sequential unfocus→focus if no swapped hook exists.
|
|
345
|
+
*/
|
|
346
|
+
export async function pipelineAgentSwappedCommand(oldIssueArg, newIssueArg, options) {
|
|
347
|
+
const oldIssue = parseInt(oldIssueArg, 10);
|
|
348
|
+
const newIssue = parseInt(newIssueArg, 10);
|
|
349
|
+
if (isNaN(oldIssue) || isNaN(newIssue))
|
|
350
|
+
return;
|
|
351
|
+
const repoRoot = await getMainWorktreeRoot();
|
|
352
|
+
if (!repoRoot)
|
|
353
|
+
return;
|
|
354
|
+
const oldEntry = getPipelineEntry(repoRoot, oldIssue);
|
|
355
|
+
const newEntry = getPipelineEntry(repoRoot, newIssue);
|
|
356
|
+
if (!oldEntry || !newEntry)
|
|
357
|
+
return;
|
|
358
|
+
const mode = options?.mode;
|
|
359
|
+
// Check if agent-swapped hook exists (with mode resolution)
|
|
360
|
+
const swapScript = resolveHookScript(repoRoot, 'agent-swapped', mode);
|
|
361
|
+
if (swapScript) {
|
|
362
|
+
// Fire atomic agent-swapped hook
|
|
363
|
+
const payload = JSON.stringify({
|
|
364
|
+
old: { issueNumber: oldIssue, worktreePath: oldEntry.worktreePath, branch: oldEntry.branch },
|
|
365
|
+
new: { issueNumber: newIssue, worktreePath: newEntry.worktreePath, branch: newEntry.branch },
|
|
366
|
+
});
|
|
367
|
+
try {
|
|
368
|
+
const child = spawn(swapScript, [], {
|
|
369
|
+
cwd: newEntry.worktreePath,
|
|
370
|
+
stdio: ['pipe', 'ignore', 'ignore'],
|
|
371
|
+
detached: true,
|
|
372
|
+
});
|
|
373
|
+
child.stdin.write(payload);
|
|
374
|
+
child.stdin.end();
|
|
375
|
+
child.unref();
|
|
376
|
+
}
|
|
377
|
+
catch {
|
|
378
|
+
// Silent
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
// Fallback: sequential unfocus→focus (respecting hookModeSwapOrder)
|
|
383
|
+
const pipelineConfig = getConfig('pipeline');
|
|
384
|
+
const swapOrder = pipelineConfig?.hookModeSwapOrder ?? 'unfocus-first';
|
|
385
|
+
const unfocusPayload = JSON.stringify({
|
|
386
|
+
issueNumber: oldIssue,
|
|
387
|
+
worktreePath: oldEntry.worktreePath,
|
|
388
|
+
branch: oldEntry.branch,
|
|
389
|
+
});
|
|
390
|
+
const focusPayload = JSON.stringify({
|
|
391
|
+
issueNumber: newIssue,
|
|
392
|
+
worktreePath: newEntry.worktreePath,
|
|
393
|
+
branch: newEntry.branch,
|
|
394
|
+
});
|
|
395
|
+
// Await the first to guarantee ordering; second is fire-and-forget
|
|
396
|
+
if (swapOrder === 'focus-first') {
|
|
397
|
+
await runUserHookScript('agent-focused', focusPayload, newEntry.worktreePath, mode);
|
|
398
|
+
runUserHookScript('agent-unfocused', unfocusPayload, oldEntry.worktreePath, mode);
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
await runUserHookScript('agent-unfocused', unfocusPayload, oldEntry.worktreePath, mode);
|
|
402
|
+
runUserHookScript('agent-focused', focusPayload, newEntry.worktreePath, mode);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* ghp pipeline mode [name]
|
|
408
|
+
*
|
|
409
|
+
* Get or set the current hook mode. Without args, prints current mode.
|
|
410
|
+
* With a name, validates against configured hookModes and prints the new mode.
|
|
411
|
+
* (Runtime mode changes happen in the dashboard; this command is for scripting.)
|
|
412
|
+
*/
|
|
413
|
+
export async function pipelineModeCommand(modeName) {
|
|
414
|
+
const pipelineConfig = getConfig('pipeline');
|
|
415
|
+
const hookModes = pipelineConfig?.hookModes ?? [];
|
|
416
|
+
if (!modeName) {
|
|
417
|
+
// Print available modes
|
|
418
|
+
if (hookModes.length === 0) {
|
|
419
|
+
console.log(chalk.dim('No hook modes configured.'));
|
|
420
|
+
console.log(chalk.dim('Configure with: ghp config pipeline.hookModes \'["planning","testing"]\''));
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
const defaultMode = pipelineConfig?.defaultHookMode;
|
|
424
|
+
console.log(chalk.bold('Hook Modes'));
|
|
425
|
+
for (const mode of hookModes) {
|
|
426
|
+
const marker = mode === defaultMode ? chalk.green(' (default)') : '';
|
|
427
|
+
console.log(` ${chalk.cyan(mode)}${marker}`);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
if (!hookModes.includes(modeName)) {
|
|
433
|
+
console.error(chalk.red('Error:'), `Unknown mode: ${modeName}`);
|
|
434
|
+
console.error('Available modes:', hookModes.join(', ') || '(none configured)');
|
|
435
|
+
exit(1);
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
console.log(chalk.green('✓'), `Mode: ${chalk.cyan(modeName)}`);
|
|
439
|
+
}
|
|
103
440
|
//# sourceMappingURL=pipeline-commands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-commands.js","sourceRoot":"","sources":["../../src/commands/pipeline-commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pipeline-commands.js","sourceRoot":"","sources":["../../src/commands/pipeline-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ghp pipeline setup — Agent-friendly setup wizard for pipeline configuration.
|
|
3
|
+
*
|
|
4
|
+
* Three modes:
|
|
5
|
+
* --questions Output JSON question schema (no side effects)
|
|
6
|
+
* --apply Read answers JSON from stdin, write config + hook scripts
|
|
7
|
+
* (no flags) Interactive CLI wizard
|
|
8
|
+
*
|
|
9
|
+
* Flavors (saved presets):
|
|
10
|
+
* --save <name> Save answers from stdin as a named flavor
|
|
11
|
+
* --flavor <name> Load and apply a saved flavor
|
|
12
|
+
* --flavors List saved flavors
|
|
13
|
+
* --delete-flavor <n> Delete a saved flavor
|
|
14
|
+
*/
|
|
15
|
+
export declare function pipelineSetupCommand(options: {
|
|
16
|
+
questions?: boolean;
|
|
17
|
+
apply?: boolean;
|
|
18
|
+
save?: string;
|
|
19
|
+
flavor?: string;
|
|
20
|
+
flavors?: boolean;
|
|
21
|
+
deleteFlavor?: string;
|
|
22
|
+
}): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=pipeline-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-setup.d.ts","sourceRoot":"","sources":["../../src/commands/pipeline-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgtBH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAChD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2FhB"}
|