pipeline-worker 0.1.14 â 0.1.16
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 +1 -0
- package/dist/agent/claude.d.ts +1 -1
- package/dist/agent/claude.js +2 -2
- package/dist/agent/claude.js.map +1 -1
- package/dist/agent/copilot.d.ts +1 -1
- package/dist/agent/copilot.js +2 -2
- package/dist/agent/copilot.js.map +1 -1
- package/dist/agent/types.d.ts +9 -0
- package/dist/agent/types.js +9 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli.js +25 -2
- package/dist/cli.js.map +1 -1
- package/dist/git/worktree.d.ts +8 -2
- package/dist/git/worktree.js +24 -2
- package/dist/git/worktree.js.map +1 -1
- package/dist/state/lock.d.ts +19 -0
- package/dist/state/lock.js +69 -0
- package/dist/state/lock.js.map +1 -0
- package/dist/state/runState.d.ts +18 -0
- package/dist/state/runState.js +56 -4
- package/dist/state/runState.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/ui/sessions.d.ts +10 -0
- package/dist/ui/sessions.js +61 -0
- package/dist/ui/sessions.js.map +1 -0
- package/dist/workflow/orchestrate.d.ts +10 -0
- package/dist/workflow/orchestrate.js +122 -78
- package/dist/workflow/orchestrate.js.map +1 -1
- package/dist/workflow/watchPipeline.js +8 -8
- package/dist/workflow/watchPipeline.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -117,6 +117,7 @@ A stage with no command (`â`) is skipped. If no toolchain is detected and no c
|
|
|
117
117
|
| `pipeline-worker serve` | Start the forge MCP server over stdio (used by the agent during fix runs) |
|
|
118
118
|
| `pipeline-worker resume --branch <name>` | Resume watching/fixing a run after a crash |
|
|
119
119
|
| `pipeline-worker status --branch <name>` | Print the persisted state of a run |
|
|
120
|
+
| `pipeline-worker sessions [--branch <name>]` | List every persisted run in this repo, or show one run's full step-by-step timeline |
|
|
120
121
|
|
|
121
122
|
## How the fix loop stays bounded
|
|
122
123
|
|
package/dist/agent/claude.d.ts
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* surfaces the command line + stderr, so without this the most useful failure
|
|
21
21
|
* information is silently dropped.
|
|
22
22
|
*/
|
|
23
|
-
import type
|
|
23
|
+
import { type AgentAdapter } from './types.js';
|
|
24
24
|
/** Subset of the rejection shape Node's promisified execFile produces. */
|
|
25
25
|
interface ExecErrorShape {
|
|
26
26
|
code?: number | string | null;
|
package/dist/agent/claude.js
CHANGED
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
*/
|
|
23
23
|
import { execFile } from 'node:child_process';
|
|
24
24
|
import { promisify } from 'node:util';
|
|
25
|
+
import { AGENT_INVOKE_TIMEOUT_MS } from './types.js';
|
|
25
26
|
import { writePromptToStdin } from './stdinPrompt.js';
|
|
26
27
|
const execFileAsync = promisify(execFile);
|
|
27
|
-
const INVOKE_TIMEOUT_MS = 300_000;
|
|
28
28
|
/**
|
|
29
29
|
* Tail-truncation cap for stdout/stderr in the rejection message. Mirrors
|
|
30
30
|
* `watchPipeline.ts`'s `.slice(-4000)` so a verbose agent failure (e.g. an
|
|
@@ -104,7 +104,7 @@ export const claudeAdapter = {
|
|
|
104
104
|
try {
|
|
105
105
|
const invocation = execFileAsync('claude', args, {
|
|
106
106
|
cwd: opts.cwd,
|
|
107
|
-
timeout:
|
|
107
|
+
timeout: AGENT_INVOKE_TIMEOUT_MS,
|
|
108
108
|
maxBuffer: 64 * 1024 * 1024,
|
|
109
109
|
});
|
|
110
110
|
// stdin is always a pipe here since stdio isn't overridden in execFileAsync's options.
|
package/dist/agent/claude.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agent/claude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agent/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/copilot.d.ts
CHANGED
package/dist/agent/copilot.js
CHANGED
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
*/
|
|
31
31
|
import { execFile } from 'node:child_process';
|
|
32
32
|
import { promisify } from 'node:util';
|
|
33
|
+
import { AGENT_INVOKE_TIMEOUT_MS } from './types.js';
|
|
33
34
|
import { writePromptToStdin } from './stdinPrompt.js';
|
|
34
35
|
const execFileAsync = promisify(execFile);
|
|
35
|
-
const INVOKE_TIMEOUT_MS = 300_000;
|
|
36
36
|
/** Pulls the outermost JSON object out of a text answer that may have prose around it. */
|
|
37
37
|
function extractJsonObject(text) {
|
|
38
38
|
const start = text.indexOf('{');
|
|
@@ -57,7 +57,7 @@ export const copilotAdapter = {
|
|
|
57
57
|
}
|
|
58
58
|
const invocation = execFileAsync('copilot', ['-s', '--no-ask-user', '--allow-all-tools', '--allow-all-paths'], {
|
|
59
59
|
cwd: opts.cwd,
|
|
60
|
-
timeout:
|
|
60
|
+
timeout: AGENT_INVOKE_TIMEOUT_MS,
|
|
61
61
|
maxBuffer: 64 * 1024 * 1024,
|
|
62
62
|
});
|
|
63
63
|
// stdin is always a pipe here since stdio isn't overridden in execFileAsync's options.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../src/agent/copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../src/agent/copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAsE,MAAM,YAAY,CAAC;AACzH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,0FAA0F;AAC1F,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,KAAK,CAAC,MAAM,CAAC,IAAwB;QACnC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM;gBACJ,oGAAoG;oBACpG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CACX,mFAAmF;gBACjF,iFAAiF,CACpF,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,iGAAiG,IAAI,CAAC,KAAK,KAAK;gBAC9G,sEAAsE,CACzE,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,CAC9B,SAAS,EACT,CAAC,IAAI,EAAE,eAAe,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,EACjE;YACE,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,uBAAuB;YAChC,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC5B,CACF,CAAC;QACF,uFAAuF;QACvF,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAM,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC;QAEpC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IAC/E,CAAC;CACF,CAAC"}
|
package/dist/agent/types.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
/** Common interface both the Claude Code and Copilot CLI adapters implement. */
|
|
2
|
+
/**
|
|
3
|
+
* Hard ceiling on a single headless agent invocation, shared by both
|
|
4
|
+
* adapters. Conflict resolution and CI-fix turns run under acceptEdits with
|
|
5
|
+
* full tool access (reading/editing multiple files, sometimes re-running
|
|
6
|
+
* build/test commands), so they can legitimately take much longer than a
|
|
7
|
+
* plain completion â 15 minutes gives that room while still bounding a hung
|
|
8
|
+
* unattended run.
|
|
9
|
+
*/
|
|
10
|
+
export declare const AGENT_INVOKE_TIMEOUT_MS = 900000;
|
|
2
11
|
export interface AgentInvokeOptions {
|
|
3
12
|
/** The instruction given to the agent for this turn. */
|
|
4
13
|
prompt: string;
|
package/dist/agent/types.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
/** Common interface both the Claude Code and Copilot CLI adapters implement. */
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Hard ceiling on a single headless agent invocation, shared by both
|
|
4
|
+
* adapters. Conflict resolution and CI-fix turns run under acceptEdits with
|
|
5
|
+
* full tool access (reading/editing multiple files, sometimes re-running
|
|
6
|
+
* build/test commands), so they can legitimately take much longer than a
|
|
7
|
+
* plain completion â 15 minutes gives that room while still bounding a hung
|
|
8
|
+
* unattended run.
|
|
9
|
+
*/
|
|
10
|
+
export const AGENT_INVOKE_TIMEOUT_MS = 900_000;
|
|
3
11
|
//# sourceMappingURL=types.js.map
|
package/dist/agent/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAAA,gFAAgF"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -9,7 +9,8 @@ import { startServer } from './mcp/server.js';
|
|
|
9
9
|
import { loadConfig } from './config/loader.js';
|
|
10
10
|
import { createForge } from './forge/index.js';
|
|
11
11
|
import { selectAgent } from './agent/index.js';
|
|
12
|
-
import { loadRunState,
|
|
12
|
+
import { loadRunState, listRunStates, recordEvent } from './state/runState.js';
|
|
13
|
+
import { printSessionList, printSessionDetail } from './ui/sessions.js';
|
|
13
14
|
import { isWorktreeOnBranch, checkoutExistingBranch, removeWorktree } from './git/worktree.js';
|
|
14
15
|
import { buildEnvelope, errorEnvelope } from './toon/envelope.js';
|
|
15
16
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
@@ -67,7 +68,7 @@ program
|
|
|
67
68
|
: await checkoutExistingBranch(repoRoot, state.branch);
|
|
68
69
|
if (worktreePath !== state.worktreePath) {
|
|
69
70
|
state.worktreePath = worktreePath;
|
|
70
|
-
|
|
71
|
+
recordEvent(repoRoot, state, `Recreated worktree at ${worktreePath}`);
|
|
71
72
|
}
|
|
72
73
|
let cleanedUp = false;
|
|
73
74
|
const cleanup = async () => {
|
|
@@ -84,6 +85,11 @@ program
|
|
|
84
85
|
try {
|
|
85
86
|
await watchPipeline(forge, config, agent, worktreePath, state.branch, state.targetBranch, state.mrIid, state, repoRoot);
|
|
86
87
|
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
90
|
+
recordEvent(repoRoot, state, `Resume failed: ${message}`, 'error');
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
87
93
|
finally {
|
|
88
94
|
await cleanup();
|
|
89
95
|
}
|
|
@@ -107,6 +113,23 @@ program
|
|
|
107
113
|
}
|
|
108
114
|
console.log(buildEnvelope({ status: 'success', data: state }));
|
|
109
115
|
});
|
|
116
|
+
program
|
|
117
|
+
.command('sessions')
|
|
118
|
+
.description("List this repo's persisted pipeline-worker runs, or inspect one run's full timeline")
|
|
119
|
+
.option('--branch <name>', 'show the full step-by-step timeline for one run instead of listing all')
|
|
120
|
+
.action((opts) => {
|
|
121
|
+
const repoRoot = process.cwd();
|
|
122
|
+
if (opts.branch) {
|
|
123
|
+
const state = loadRunState(repoRoot, opts.branch);
|
|
124
|
+
if (!state) {
|
|
125
|
+
console.error(`pipeline-worker: no session found for branch ${opts.branch}.`);
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
printSessionDetail({ branch: state.branch, state });
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
printSessionList(listRunStates(repoRoot));
|
|
132
|
+
});
|
|
110
133
|
program.parseAsync(process.argv).catch((error) => {
|
|
111
134
|
console.error('pipeline-worker: unexpected error:', error instanceof Error ? error.message : error);
|
|
112
135
|
process.exit(1);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/git/worktree.d.ts
CHANGED
|
@@ -54,8 +54,14 @@ export interface ApplyDiffResult {
|
|
|
54
54
|
* failure â the caller resolves them the same way as any other conflict.
|
|
55
55
|
*/
|
|
56
56
|
export declare function applyDiffToWorktree(worktreePath: string, diffText: string, untrackedFiles: string[], repoRoot: string): Promise<ApplyDiffResult>;
|
|
57
|
-
/**
|
|
58
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Renames the worktree's current branch (used once the agent has proposed a
|
|
59
|
+
* real name), returning the branch name actually applied. If newBranchName
|
|
60
|
+
* collides with a branch that already exists locally (e.g. two runs both
|
|
61
|
+
* inferring the same descriptive slug), retries with a short random suffix
|
|
62
|
+
* appended instead of failing the run outright.
|
|
63
|
+
*/
|
|
64
|
+
export declare function renameBranch(worktreePath: string, newBranchName: string): Promise<string>;
|
|
59
65
|
/**
|
|
60
66
|
* Removes the worktree and the mkdtemp parent directory createWorktree put it
|
|
61
67
|
* in. Tolerates its own failures (logs + continues) so a cleanup problem
|
package/dist/git/worktree.js
CHANGED
|
@@ -143,9 +143,31 @@ export async function applyDiffToWorktree(worktreePath, diffText, untrackedFiles
|
|
|
143
143
|
linkNodeModules(repoRoot, worktreePath);
|
|
144
144
|
return { conflicted: conflictedFiles.length > 0, conflictedFiles };
|
|
145
145
|
}
|
|
146
|
-
/**
|
|
146
|
+
/** How many collision retries renameBranch attempts before giving up. */
|
|
147
|
+
const RENAME_BRANCH_MAX_ATTEMPTS = 5;
|
|
148
|
+
/**
|
|
149
|
+
* Renames the worktree's current branch (used once the agent has proposed a
|
|
150
|
+
* real name), returning the branch name actually applied. If newBranchName
|
|
151
|
+
* collides with a branch that already exists locally (e.g. two runs both
|
|
152
|
+
* inferring the same descriptive slug), retries with a short random suffix
|
|
153
|
+
* appended instead of failing the run outright.
|
|
154
|
+
*/
|
|
147
155
|
export async function renameBranch(worktreePath, newBranchName) {
|
|
148
|
-
|
|
156
|
+
let candidate = newBranchName;
|
|
157
|
+
for (let attempt = 1; attempt <= RENAME_BRANCH_MAX_ATTEMPTS; attempt++) {
|
|
158
|
+
try {
|
|
159
|
+
await execFileAsync('git', ['branch', '-m', candidate], { cwd: worktreePath });
|
|
160
|
+
return candidate;
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
const stderr = error.stderr ?? '';
|
|
164
|
+
if (!/already exists/.test(stderr) || attempt === RENAME_BRANCH_MAX_ATTEMPTS)
|
|
165
|
+
throw error;
|
|
166
|
+
candidate = `${newBranchName}-${randomUUID().slice(0, 6)}`;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Unreachable: the loop above always returns or throws.
|
|
170
|
+
throw new Error(`pipeline-worker: could not rename branch to a variant of "${newBranchName}"`);
|
|
149
171
|
}
|
|
150
172
|
/**
|
|
151
173
|
* Removes the worktree and the mkdtemp parent directory createWorktree put it
|
package/dist/git/worktree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/git/worktree.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/git/worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A per-repo lockfile at <repoRoot>/.pipeline-worker/run.lock, preventing two
|
|
3
|
+
* `pipeline-worker run` invocations from racing against the same working
|
|
4
|
+
* tree â e.g. one instance's `resetRepo` (`git reset --hard`) wiping out
|
|
5
|
+
* uncommitted changes another instance's `captureDiff` hasn't processed yet.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Acquires the lock, throwing if another live process already holds it. A
|
|
9
|
+
* lock left behind by a process that's no longer running (crash, kill -9) is
|
|
10
|
+
* treated as stale and reclaimed. Returns a release function; safe to call
|
|
11
|
+
* more than once.
|
|
12
|
+
*
|
|
13
|
+
* The final write uses the 'wx' flag (fails with EEXIST if the path already
|
|
14
|
+
* exists) as the actual mutual-exclusion guard â the existsSync/liveness
|
|
15
|
+
* check above is only a fast path to produce a clear "who's holding it"
|
|
16
|
+
* error message, since it's inherently racy against another process doing
|
|
17
|
+
* the same check concurrently.
|
|
18
|
+
*/
|
|
19
|
+
export declare function acquireLock(repoRoot: string): () => void;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A per-repo lockfile at <repoRoot>/.pipeline-worker/run.lock, preventing two
|
|
3
|
+
* `pipeline-worker run` invocations from racing against the same working
|
|
4
|
+
* tree â e.g. one instance's `resetRepo` (`git reset --hard`) wiping out
|
|
5
|
+
* uncommitted changes another instance's `captureDiff` hasn't processed yet.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
function lockPath(repoRoot) {
|
|
10
|
+
return join(repoRoot, '.pipeline-worker', 'run.lock');
|
|
11
|
+
}
|
|
12
|
+
function isProcessAlive(pid) {
|
|
13
|
+
try {
|
|
14
|
+
// Signal 0 sends nothing but still validates the pid exists/is
|
|
15
|
+
// accessible â the standard liveness check on POSIX and Windows.
|
|
16
|
+
process.kill(pid, 0);
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function removeIfPresent(path) {
|
|
24
|
+
try {
|
|
25
|
+
unlinkSync(path);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// Already gone (e.g. a concurrent process reclaimed it first) â fine.
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Acquires the lock, throwing if another live process already holds it. A
|
|
33
|
+
* lock left behind by a process that's no longer running (crash, kill -9) is
|
|
34
|
+
* treated as stale and reclaimed. Returns a release function; safe to call
|
|
35
|
+
* more than once.
|
|
36
|
+
*
|
|
37
|
+
* The final write uses the 'wx' flag (fails with EEXIST if the path already
|
|
38
|
+
* exists) as the actual mutual-exclusion guard â the existsSync/liveness
|
|
39
|
+
* check above is only a fast path to produce a clear "who's holding it"
|
|
40
|
+
* error message, since it's inherently racy against another process doing
|
|
41
|
+
* the same check concurrently.
|
|
42
|
+
*/
|
|
43
|
+
export function acquireLock(repoRoot) {
|
|
44
|
+
const dir = join(repoRoot, '.pipeline-worker');
|
|
45
|
+
mkdirSync(dir, { recursive: true });
|
|
46
|
+
const path = lockPath(repoRoot);
|
|
47
|
+
if (existsSync(path)) {
|
|
48
|
+
const heldPid = Number.parseInt(readFileSync(path, 'utf-8').trim(), 10);
|
|
49
|
+
if (Number.isInteger(heldPid) && isProcessAlive(heldPid)) {
|
|
50
|
+
throw new Error(`pipeline-worker: another run (pid ${heldPid}) is already in progress in this repo. ` +
|
|
51
|
+
'Wait for it to finish, or if it crashed without cleaning up, remove .pipeline-worker/run.lock.');
|
|
52
|
+
}
|
|
53
|
+
removeIfPresent(path);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
writeFileSync(path, String(process.pid), { flag: 'wx' });
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
throw new Error('pipeline-worker: another run just started in this repo â try again.');
|
|
60
|
+
}
|
|
61
|
+
let released = false;
|
|
62
|
+
return () => {
|
|
63
|
+
if (released)
|
|
64
|
+
return;
|
|
65
|
+
released = true;
|
|
66
|
+
removeIfPresent(path);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/state/lock.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,SAAS,QAAQ,CAAC,QAAgB;IAChC,OAAO,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,+DAA+D;QAC/D,iEAAiE;QACjE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;IACxE,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IAC/C,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEhC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,qCAAqC,OAAO,yCAAyC;gBACnF,gGAAgG,CACnG,CAAC;QACJ,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,CAAC;QACH,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,eAAe,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/state/runState.d.ts
CHANGED
|
@@ -7,3 +7,21 @@
|
|
|
7
7
|
import type { RunState } from '../types.js';
|
|
8
8
|
export declare function saveRunState(repoRoot: string, state: RunState): void;
|
|
9
9
|
export declare function loadRunState(repoRoot: string, branch: string): RunState | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Appends a timestamped entry to state.history and persists it â this is the
|
|
12
|
+
* narration `pipeline-worker sessions --branch <name>` renders. Mutates
|
|
13
|
+
* `state` in place, matching how saveRunState is already called throughout
|
|
14
|
+
* orchestrate.ts/watchPipeline.ts.
|
|
15
|
+
*/
|
|
16
|
+
export declare function recordEvent(repoRoot: string, state: RunState, message: string, level?: 'info' | 'error'): void;
|
|
17
|
+
export interface RunSession {
|
|
18
|
+
branch: string;
|
|
19
|
+
state: RunState;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Lists every persisted run in this repo (one per state file), most
|
|
23
|
+
* recently updated first. A corrupt/partial state file is skipped rather
|
|
24
|
+
* than failing the whole listing â `pipeline-worker sessions` should show
|
|
25
|
+
* what it can even if one run's file is damaged.
|
|
26
|
+
*/
|
|
27
|
+
export declare function listRunStates(repoRoot: string): RunSession[];
|
package/dist/state/runState.js
CHANGED
|
@@ -4,17 +4,31 @@
|
|
|
4
4
|
* lost state file only degrades `resume`/`status`, it never corrupts GitLab
|
|
5
5
|
* state (the forge client's findExistingMr is the real idempotency guard).
|
|
6
6
|
*/
|
|
7
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, writeFileSync } from 'node:fs';
|
|
8
|
+
import { randomUUID } from 'node:crypto';
|
|
8
9
|
import { join } from 'node:path';
|
|
10
|
+
/** Caps state.history so a long-running CI-fix loop can't grow the state file unboundedly. */
|
|
11
|
+
const MAX_HISTORY_ENTRIES = 200;
|
|
12
|
+
function stateDir(repoRoot) {
|
|
13
|
+
return join(repoRoot, '.pipeline-worker', 'state');
|
|
14
|
+
}
|
|
9
15
|
function statePath(repoRoot, branch) {
|
|
10
16
|
const safeName = branch.replace(/\//g, '_');
|
|
11
|
-
return join(repoRoot,
|
|
17
|
+
return join(stateDir(repoRoot), `${safeName}.json`);
|
|
12
18
|
}
|
|
13
19
|
export function saveRunState(repoRoot, state) {
|
|
14
20
|
try {
|
|
21
|
+
const dir = stateDir(repoRoot);
|
|
22
|
+
mkdirSync(dir, { recursive: true });
|
|
15
23
|
const path = statePath(repoRoot, state.branch);
|
|
16
|
-
|
|
17
|
-
|
|
24
|
+
// Write to a temp file in the same directory, then rename over the real
|
|
25
|
+
// path. A same-directory rename is atomic on POSIX and Windows, so a
|
|
26
|
+
// process kill mid-write can never leave a truncated/corrupt state file
|
|
27
|
+
// at `path` â a reader always sees either the previous complete write or
|
|
28
|
+
// the new one, never a partial one.
|
|
29
|
+
const tmpPath = join(dir, `.${randomUUID()}.tmp`);
|
|
30
|
+
writeFileSync(tmpPath, JSON.stringify(state, null, 2), 'utf-8');
|
|
31
|
+
renameSync(tmpPath, path);
|
|
18
32
|
}
|
|
19
33
|
catch (error) {
|
|
20
34
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -34,4 +48,42 @@ export function loadRunState(repoRoot, branch) {
|
|
|
34
48
|
return undefined;
|
|
35
49
|
}
|
|
36
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Appends a timestamped entry to state.history and persists it â this is the
|
|
53
|
+
* narration `pipeline-worker sessions --branch <name>` renders. Mutates
|
|
54
|
+
* `state` in place, matching how saveRunState is already called throughout
|
|
55
|
+
* orchestrate.ts/watchPipeline.ts.
|
|
56
|
+
*/
|
|
57
|
+
export function recordEvent(repoRoot, state, message, level = 'info') {
|
|
58
|
+
const now = new Date().toISOString();
|
|
59
|
+
state.startedAt ??= now;
|
|
60
|
+
state.updatedAt = now;
|
|
61
|
+
const history = [...(state.history ?? []), { at: now, phase: state.phase, level, message }];
|
|
62
|
+
state.history = history.length > MAX_HISTORY_ENTRIES ? history.slice(history.length - MAX_HISTORY_ENTRIES) : history;
|
|
63
|
+
saveRunState(repoRoot, state);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Lists every persisted run in this repo (one per state file), most
|
|
67
|
+
* recently updated first. A corrupt/partial state file is skipped rather
|
|
68
|
+
* than failing the whole listing â `pipeline-worker sessions` should show
|
|
69
|
+
* what it can even if one run's file is damaged.
|
|
70
|
+
*/
|
|
71
|
+
export function listRunStates(repoRoot) {
|
|
72
|
+
const dir = stateDir(repoRoot);
|
|
73
|
+
if (!existsSync(dir))
|
|
74
|
+
return [];
|
|
75
|
+
const sessions = [];
|
|
76
|
+
for (const entry of readdirSync(dir)) {
|
|
77
|
+
if (!entry.endsWith('.json'))
|
|
78
|
+
continue;
|
|
79
|
+
try {
|
|
80
|
+
const state = JSON.parse(readFileSync(join(dir, entry), 'utf-8'));
|
|
81
|
+
sessions.push({ branch: state.branch, state });
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return sessions.sort((a, b) => (b.state.updatedAt ?? '').localeCompare(a.state.updatedAt ?? ''));
|
|
88
|
+
}
|
|
37
89
|
//# sourceMappingURL=runState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runState.js","sourceRoot":"","sources":["../../src/state/runState.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"runState.js","sourceRoot":"","sources":["../../src/state/runState.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -29,6 +29,13 @@ export interface PipelineWorkerConfig {
|
|
|
29
29
|
runLintAndTest: boolean;
|
|
30
30
|
}
|
|
31
31
|
export type RunPhase = 'diff' | 'intent' | 'checks' | 'mr' | 'watch' | 'done' | 'escalated';
|
|
32
|
+
/** One entry in RunState.history â a timestamped narration of what happened during the run, for `pipeline-worker sessions`. */
|
|
33
|
+
export interface RunHistoryEntry {
|
|
34
|
+
at: string;
|
|
35
|
+
phase: RunPhase;
|
|
36
|
+
level: 'info' | 'error';
|
|
37
|
+
message: string;
|
|
38
|
+
}
|
|
32
39
|
export interface RunState {
|
|
33
40
|
branch: string;
|
|
34
41
|
targetBranch: string;
|
|
@@ -37,6 +44,12 @@ export interface RunState {
|
|
|
37
44
|
pipelineId?: number;
|
|
38
45
|
attempt: number;
|
|
39
46
|
phase: RunPhase;
|
|
47
|
+
/** ISO 8601 timestamp of when this run was first created. Absent on state files written before this field existed. */
|
|
48
|
+
startedAt?: string;
|
|
49
|
+
/** ISO 8601 timestamp of the most recent state write. Absent on state files written before this field existed. */
|
|
50
|
+
updatedAt?: string;
|
|
51
|
+
/** Chronological log of phase transitions, escalations, and errors. Absent on state files written before this field existed. */
|
|
52
|
+
history?: RunHistoryEntry[];
|
|
40
53
|
}
|
|
41
54
|
export type RiskLevel = 'low' | 'medium' | 'high';
|
|
42
55
|
export type ChangeType = 'feature' | 'bugfix' | 'chore';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-facing rendering for `pipeline-worker sessions` â lists and inspects
|
|
3
|
+
* runs persisted under .pipeline-worker/state/, mirroring the emoji/color
|
|
4
|
+
* narration style ui/steps.ts uses for a live run.
|
|
5
|
+
*/
|
|
6
|
+
import type { RunSession } from '../state/runState.js';
|
|
7
|
+
/** `pipeline-worker sessions` with no --branch: one line per persisted run, most recently updated first. */
|
|
8
|
+
export declare function printSessionList(sessions: RunSession[]): void;
|
|
9
|
+
/** `pipeline-worker sessions --branch <name>`: one run's metadata plus its full step-by-step history. */
|
|
10
|
+
export declare function printSessionDetail(session: RunSession): void;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-facing rendering for `pipeline-worker sessions` â lists and inspects
|
|
3
|
+
* runs persisted under .pipeline-worker/state/, mirroring the emoji/color
|
|
4
|
+
* narration style ui/steps.ts uses for a live run.
|
|
5
|
+
*/
|
|
6
|
+
import { styleText } from 'node:util';
|
|
7
|
+
const PHASE_COLOR = {
|
|
8
|
+
diff: 'dim',
|
|
9
|
+
intent: 'dim',
|
|
10
|
+
checks: 'cyan',
|
|
11
|
+
mr: 'cyan',
|
|
12
|
+
watch: 'yellow',
|
|
13
|
+
done: 'green',
|
|
14
|
+
escalated: 'red',
|
|
15
|
+
};
|
|
16
|
+
function formatPhase(phase) {
|
|
17
|
+
return styleText(PHASE_COLOR[phase], phase.padEnd(9));
|
|
18
|
+
}
|
|
19
|
+
function formatTimestamp(iso) {
|
|
20
|
+
return iso ? new Date(iso).toLocaleString() : 'unknown';
|
|
21
|
+
}
|
|
22
|
+
/** `pipeline-worker sessions` with no --branch: one line per persisted run, most recently updated first. */
|
|
23
|
+
export function printSessionList(sessions) {
|
|
24
|
+
if (sessions.length === 0) {
|
|
25
|
+
console.log('pipeline-worker: no sessions found in this repo (.pipeline-worker/state/ is empty).');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
console.log(styleText('bold', `${'BRANCH'.padEnd(40)} ${'PHASE'.padEnd(9)} ATTEMPT MR/PR UPDATED`));
|
|
29
|
+
for (const { state } of sessions) {
|
|
30
|
+
const branch = state.branch.length > 40 ? `${state.branch.slice(0, 37)}...` : state.branch.padEnd(40);
|
|
31
|
+
const mr = state.mrIid !== undefined ? `#${state.mrIid}` : '-';
|
|
32
|
+
console.log(`${branch} ${formatPhase(state.phase)} ${String(state.attempt).padEnd(8)} ${mr.padEnd(7)} ${formatTimestamp(state.updatedAt)}`);
|
|
33
|
+
}
|
|
34
|
+
console.log();
|
|
35
|
+
console.log(styleText('dim', "Run `pipeline-worker sessions --branch <name>` for a run's full timeline."));
|
|
36
|
+
}
|
|
37
|
+
const LEVEL_ICON = { info: 'âšī¸ ', error: 'â' };
|
|
38
|
+
/** `pipeline-worker sessions --branch <name>`: one run's metadata plus its full step-by-step history. */
|
|
39
|
+
export function printSessionDetail(session) {
|
|
40
|
+
const { state } = session;
|
|
41
|
+
const mrPart = state.mrIid !== undefined ? ` mr/pr: #${state.mrIid}` : '';
|
|
42
|
+
const pipelinePart = state.pipelineId !== undefined ? ` pipeline: ${state.pipelineId}` : '';
|
|
43
|
+
console.log(styleText('bold', `Session: ${state.branch}`));
|
|
44
|
+
console.log(styleText('dim', ` target: ${state.targetBranch}`));
|
|
45
|
+
console.log(styleText('dim', ` worktree: ${state.worktreePath}`));
|
|
46
|
+
console.log(styleText('dim', ` phase: ${state.phase} attempt: ${state.attempt}${mrPart}${pipelinePart}`));
|
|
47
|
+
console.log(styleText('dim', ` started: ${formatTimestamp(state.startedAt)} updated: ${formatTimestamp(state.updatedAt)}`));
|
|
48
|
+
const history = state.history ?? [];
|
|
49
|
+
if (history.length === 0) {
|
|
50
|
+
console.log();
|
|
51
|
+
console.log(styleText('dim', " (no step history recorded for this run â it predates pipeline-worker's session history feature)"));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
console.log();
|
|
55
|
+
console.log(styleText('bold', 'Timeline:'));
|
|
56
|
+
for (const entry of history) {
|
|
57
|
+
const message = entry.level === 'error' ? styleText('red', entry.message) : entry.message;
|
|
58
|
+
console.log(` ${LEVEL_ICON[entry.level]} ${styleText('dim', formatTimestamp(entry.at))} ${styleText('dim', `[${entry.phase}]`)} ${message}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/ui/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
/** Top-level control flow wiring the user's 8-step workflow together. */
|
|
2
|
+
import type { RunPhase } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* True once the run has an open MR/PR â from that point, `pipeline-worker
|
|
5
|
+
* resume` needs the worktree to still exist to keep pushing CI-fix/conflict
|
|
6
|
+
* resolution commits, so an interrupt must leave it in place instead of
|
|
7
|
+
* deleting it. Before that point (still capturing/applying/checking the
|
|
8
|
+
* diff), there is no MR to resume against, so the worktree is safe â and
|
|
9
|
+
* meant â to remove on interrupt. Exported for unit testing.
|
|
10
|
+
*/
|
|
11
|
+
export declare function shouldPreserveWorktreeOnInterrupt(phase: RunPhase): boolean;
|
|
2
12
|
export interface RunWorkflowOptions {
|
|
3
13
|
/** Ticket/issue id to interpolate into config.branchPattern's {ticket} placeholder, if it has one. */
|
|
4
14
|
ticket?: string;
|
|
@@ -10,13 +10,27 @@ import { captureIntent } from './captureIntent.js';
|
|
|
10
10
|
import { runChecks } from './runChecks.js';
|
|
11
11
|
import { openMergeRequest } from './openMergeRequest.js';
|
|
12
12
|
import { watchPipeline } from './watchPipeline.js';
|
|
13
|
-
import {
|
|
13
|
+
import { recordEvent } from '../state/runState.js';
|
|
14
|
+
import { acquireLock } from '../state/lock.js';
|
|
14
15
|
import { step, runStep, note, noteRisk } from '../ui/steps.js';
|
|
15
16
|
import { printWelcome } from '../ui/welcome.js';
|
|
16
17
|
/** Function-boundary read so TS reports the declared RunPhase union, not a narrowed literal. */
|
|
17
18
|
function readPhase(state) {
|
|
18
19
|
return state.phase;
|
|
19
20
|
}
|
|
21
|
+
/** Phases from 'mr' onward have an open MR/PR that `resume` continues pushing fixes to. */
|
|
22
|
+
const RESUMABLE_PHASES = ['mr', 'watch'];
|
|
23
|
+
/**
|
|
24
|
+
* True once the run has an open MR/PR â from that point, `pipeline-worker
|
|
25
|
+
* resume` needs the worktree to still exist to keep pushing CI-fix/conflict
|
|
26
|
+
* resolution commits, so an interrupt must leave it in place instead of
|
|
27
|
+
* deleting it. Before that point (still capturing/applying/checking the
|
|
28
|
+
* diff), there is no MR to resume against, so the worktree is safe â and
|
|
29
|
+
* meant â to remove on interrupt. Exported for unit testing.
|
|
30
|
+
*/
|
|
31
|
+
export function shouldPreserveWorktreeOnInterrupt(phase) {
|
|
32
|
+
return RESUMABLE_PHASES.includes(phase);
|
|
33
|
+
}
|
|
20
34
|
function buildApplyConflictPrompt(conflictedFiles) {
|
|
21
35
|
return (`Applying your diff produced merge conflicts (the target branch moved since the diff was captured) in: ${conflictedFiles.join(', ')}. ` +
|
|
22
36
|
'Resolve the conflict markers (<<<<<<<, =======, >>>>>>>) in each file by choosing the correct combined content ' +
|
|
@@ -43,91 +57,121 @@ export async function runWorkflow(repoRoot, options = {}) {
|
|
|
43
57
|
if (config.forge === 'gitlab' && !options.ticket) {
|
|
44
58
|
throw new Error('forge is gitlab, which requires a ticket id â pass one with --ticket <id>.');
|
|
45
59
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
if (diffText.trim().length === 0 && untrackedFiles.length === 0) {
|
|
51
|
-
console.log('pipeline-worker: no changes to process.');
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
note(`${untrackedFiles.length} new file(s), ${diffText.split('\n').length} line(s) of diff`);
|
|
55
|
-
const targetBranch = await currentBranch(repoRoot);
|
|
56
|
-
const tempBranch = generateTempBranchName();
|
|
57
|
-
const worktreePath = await runStep(2, 'đŗ', 'Creating worktree', `create worktree with name ${tempBranch}`, () => createWorktree(repoRoot, tempBranch));
|
|
58
|
-
let state = { branch: tempBranch, targetBranch, worktreePath, attempt: 0, phase: 'diff' };
|
|
59
|
-
saveRunState(repoRoot, state);
|
|
60
|
-
let cleanedUp = false;
|
|
61
|
-
const cleanup = async () => {
|
|
62
|
-
if (cleanedUp)
|
|
63
|
-
return;
|
|
64
|
-
cleanedUp = true;
|
|
65
|
-
await removeWorktree(repoRoot, worktreePath);
|
|
66
|
-
};
|
|
67
|
-
const onSignal = (exitCode) => {
|
|
68
|
-
void cleanup().then(() => process.exit(exitCode));
|
|
69
|
-
};
|
|
70
|
-
process.once('SIGINT', () => onSignal(130));
|
|
71
|
-
process.once('SIGTERM', () => onSignal(143));
|
|
60
|
+
// Held for the whole run so a second `pipeline-worker run` in this repo
|
|
61
|
+
// fails fast instead of racing this one's captureDiff/resetRepo against
|
|
62
|
+
// the same working tree.
|
|
63
|
+
const releaseLock = acquireLock(repoRoot);
|
|
72
64
|
try {
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const checks = await runStep(5, 'â
', 'Running checks', 'build, lint, and test â whichever your repo has configured', () => runChecks(config, worktreePath));
|
|
80
|
-
for (const check of checks)
|
|
81
|
-
note(`${check.name}: ${check.ok ? 'passed' : 'failed'} (${(check.durationMs / 1000).toFixed(1)}s)`);
|
|
82
|
-
const failedCheck = checks.find((c) => !c.ok);
|
|
83
|
-
if (failedCheck) {
|
|
84
|
-
console.error(`pipeline-worker: ${failedCheck.name} failed, aborting before opening a merge request.\n${failedCheck.stderr}`);
|
|
85
|
-
process.exitCode = 1;
|
|
65
|
+
const forge = createForge(config);
|
|
66
|
+
const agent = selectAgent(config);
|
|
67
|
+
await printWelcome(config, repoRoot);
|
|
68
|
+
const { diffText, changedFiles, untrackedFiles } = await runStep(1, 'đ¸', 'Capturing your changes', 'reading uncommitted edits and untracked files from your repo', () => captureDiff(repoRoot));
|
|
69
|
+
if (diffText.trim().length === 0 && untrackedFiles.length === 0) {
|
|
70
|
+
console.log('pipeline-worker: no changes to process.');
|
|
86
71
|
return;
|
|
87
72
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (finalPhase === 'done') {
|
|
114
|
-
const detail = state.pipelineId !== undefined ? `MR ${mr.webUrl} passed CI` : `MR ${mr.webUrl} opened â no CI pipeline found, nothing to watch`;
|
|
115
|
-
step('đ', 'Done', detail);
|
|
116
|
-
if (config.cleanupOnSuccess) {
|
|
117
|
-
// The captured changes now live safely on state.branch (pushed and,
|
|
118
|
-
// per finalPhase === 'done', either merged-clean or CI-verified) â
|
|
119
|
-
// repoRoot's copy is redundant, so reset it back to HEAD regardless
|
|
120
|
-
// of what branch it's currently on.
|
|
121
|
-
await runStep(11, 'đ§š', 'Cleaning up your repo', `reset to HEAD â your changes are now safely on ${state.branch}`, () => resetRepo(repoRoot, untrackedFiles));
|
|
73
|
+
note(`${untrackedFiles.length} new file(s), ${diffText.split('\n').length} line(s) of diff`);
|
|
74
|
+
const targetBranch = await currentBranch(repoRoot);
|
|
75
|
+
const tempBranch = generateTempBranchName();
|
|
76
|
+
const worktreePath = await runStep(2, 'đŗ', 'Creating worktree', `create worktree with name ${tempBranch}`, () => createWorktree(repoRoot, tempBranch));
|
|
77
|
+
let state = { branch: tempBranch, targetBranch, worktreePath, attempt: 0, phase: 'diff' };
|
|
78
|
+
recordEvent(repoRoot, state, `Created worktree at ${worktreePath} (temp branch ${tempBranch})`);
|
|
79
|
+
let cleanedUp = false;
|
|
80
|
+
const cleanup = async () => {
|
|
81
|
+
if (cleanedUp)
|
|
82
|
+
return;
|
|
83
|
+
cleanedUp = true;
|
|
84
|
+
await removeWorktree(repoRoot, worktreePath);
|
|
85
|
+
};
|
|
86
|
+
const onSignal = (exitCode) => {
|
|
87
|
+
// process.exit() below terminates immediately without unwinding the
|
|
88
|
+
// suspended runWorkflow() call stack, so the outer `finally { releaseLock() }`
|
|
89
|
+
// never runs â release it explicitly here first in both branches.
|
|
90
|
+
if (shouldPreserveWorktreeOnInterrupt(state.phase)) {
|
|
91
|
+
// MR is already open â leave the worktree so `pipeline-worker resume`
|
|
92
|
+
// can keep pushing CI-fix/conflict-resolution commits to it instead
|
|
93
|
+
// of finding a dead path.
|
|
94
|
+
cleanedUp = true;
|
|
95
|
+
releaseLock();
|
|
96
|
+
process.exit(exitCode);
|
|
97
|
+
return;
|
|
122
98
|
}
|
|
99
|
+
void cleanup().then(() => {
|
|
100
|
+
releaseLock();
|
|
101
|
+
process.exit(exitCode);
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
process.once('SIGINT', () => onSignal(130));
|
|
105
|
+
process.once('SIGTERM', () => onSignal(143));
|
|
106
|
+
try {
|
|
107
|
+
await runStep(3, 'đ', 'Syncing worktree with origin', `pull --rebase origin ${targetBranch}, so the diff lands on the latest base`, () => syncWithOrigin(worktreePath, targetBranch));
|
|
108
|
+
const applyResult = await runStep(4, 'đĻ', 'Applying your changes', 'replay your diff and untracked files into the new worktree', () => applyDiffToWorktree(worktreePath, diffText, untrackedFiles, repoRoot));
|
|
109
|
+
if (applyResult.conflicted) {
|
|
110
|
+
note(`conflict in: ${applyResult.conflictedFiles.join(', ')}`);
|
|
111
|
+
await resolveApplyConflicts(agent, worktreePath, applyResult.conflictedFiles);
|
|
112
|
+
}
|
|
113
|
+
const intent = await runStep(5, 'đ§ ', 'Understanding your changes', `ask ${config.agent} to infer a change type, branch slug, commit message, and summary`, () => captureIntent(agent, [...changedFiles, ...untrackedFiles], worktreePath, config.intentModel));
|
|
114
|
+
note(`${config.agent} says: ${intent.summary}`);
|
|
115
|
+
noteRisk(intent.risk, intent.riskReason);
|
|
116
|
+
const branchName = buildBranchName(config.branchPattern, { type: intent.changeType, ticket: options.ticket, name: intent.branchSlug });
|
|
117
|
+
const actualBranchName = await runStep(6, 'đŋ', 'Checkout feature branch', `switch to feature branch ${branchName}`, () => renameBranch(worktreePath, branchName));
|
|
118
|
+
if (actualBranchName !== branchName) {
|
|
119
|
+
note(`"${branchName}" already exists locally â using "${actualBranchName}" instead`);
|
|
120
|
+
}
|
|
121
|
+
state = { ...state, branch: actualBranchName, phase: 'intent' };
|
|
122
|
+
recordEvent(repoRoot, state, `Captured intent; renamed to feature branch ${actualBranchName}`);
|
|
123
|
+
const checks = await runStep(7, 'â
', 'Running checks', 'build, lint, and test â whichever your repo has configured', () => runChecks(config, worktreePath));
|
|
124
|
+
for (const check of checks)
|
|
125
|
+
note(`${check.name}: ${check.ok ? 'passed' : 'failed'} (${(check.durationMs / 1000).toFixed(1)}s)`);
|
|
126
|
+
const failedCheck = checks.find((c) => !c.ok);
|
|
127
|
+
if (failedCheck) {
|
|
128
|
+
console.error(`pipeline-worker: ${failedCheck.name} failed, aborting before opening a merge request.\n${failedCheck.stderr}`);
|
|
129
|
+
recordEvent(repoRoot, state, `${failedCheck.name} check failed, aborted before opening a merge request`, 'error');
|
|
130
|
+
process.exitCode = 1;
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
state.phase = 'checks';
|
|
134
|
+
recordEvent(repoRoot, state, `Checks passed (${checks.map((c) => c.name).join(', ')})`);
|
|
135
|
+
await runStep(8, 'đž', 'Committing changes', `commit message: "${intent.commitMessage}"`,
|
|
136
|
+
// applyDiffToWorktree left everything staged; without this commit the
|
|
137
|
+
// push would carry no changes and the MR would be empty.
|
|
138
|
+
() => commit(worktreePath, intent.commitMessage));
|
|
139
|
+
const mr = await openMergeRequest(forge, worktreePath, state.branch, targetBranch, intent, config.agent, checks);
|
|
140
|
+
state.mrIid = mr.iid;
|
|
141
|
+
state.phase = 'mr';
|
|
142
|
+
recordEvent(repoRoot, state, `Opened MR/PR ${mr.webUrl}`);
|
|
143
|
+
await watchPipeline(forge, config, agent, worktreePath, state.branch, targetBranch, mr.iid, state, repoRoot);
|
|
144
|
+
// watchPipeline mutates state.phase in place; go through a function
|
|
145
|
+
// boundary so TS uses the declared RunPhase return type instead of the
|
|
146
|
+
// 'mr' literal it narrowed state.phase to just before the call.
|
|
147
|
+
const finalPhase = readPhase(state);
|
|
148
|
+
if (finalPhase === 'done') {
|
|
149
|
+
const detail = state.pipelineId !== undefined ? `MR ${mr.webUrl} passed CI` : `MR ${mr.webUrl} opened â no CI pipeline found, nothing to watch`;
|
|
150
|
+
step('đ', 'Done', detail);
|
|
151
|
+
if (config.cleanupOnSuccess) {
|
|
152
|
+
// The captured changes now live safely on state.branch (pushed and,
|
|
153
|
+
// per finalPhase === 'done', either merged-clean or CI-verified) â
|
|
154
|
+
// repoRoot's copy is redundant, so reset it back to HEAD regardless
|
|
155
|
+
// of what branch it's currently on.
|
|
156
|
+
await runStep(11, 'đ§š', 'Cleaning up your repo', `reset to HEAD â your changes are now safely on ${state.branch}`, () => resetRepo(repoRoot, untrackedFiles));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else if (finalPhase === 'escalated') {
|
|
160
|
+
step('đ¨', 'Stopped for human review', `see ${mr.webUrl} for what was tried and why`);
|
|
161
|
+
process.exitCode = 1;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
166
|
+
recordEvent(repoRoot, state, `Run failed: ${message}`, 'error');
|
|
167
|
+
throw error;
|
|
123
168
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
process.exitCode = 1;
|
|
169
|
+
finally {
|
|
170
|
+
await cleanup();
|
|
127
171
|
}
|
|
128
172
|
}
|
|
129
173
|
finally {
|
|
130
|
-
|
|
174
|
+
releaseLock();
|
|
131
175
|
}
|
|
132
176
|
}
|
|
133
177
|
//# sourceMappingURL=orchestrate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../src/workflow/orchestrate.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC/I,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../src/workflow/orchestrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ import { randomUUID } from 'node:crypto';
|
|
|
29
29
|
import { tmpdir } from 'node:os';
|
|
30
30
|
import { promisify } from 'node:util';
|
|
31
31
|
import { stageAll, commit, push, hasChanges, listConflictedFiles, findUnresolvedConflictMarkers } from '../git/commit.js';
|
|
32
|
-
import {
|
|
32
|
+
import { recordEvent } from '../state/runState.js';
|
|
33
33
|
import { step, runStep, note } from '../ui/steps.js';
|
|
34
34
|
const execFileAsync = promisify(execFile);
|
|
35
35
|
const MAX_POLL_WINDOW_MS = 2 * 60 * 60 * 1000; // per pipeline attempt, as a safety net
|
|
@@ -154,7 +154,7 @@ async function escalate(forge, mrIid, message, state, repoRoot) {
|
|
|
154
154
|
const detail = message.replace(/\s*\n\s*/g, ' ');
|
|
155
155
|
await runStep(11, 'đ¨', 'Escalating to a human', detail, () => forge.createMrNote(mrIid, message));
|
|
156
156
|
state.phase = 'escalated';
|
|
157
|
-
|
|
157
|
+
recordEvent(repoRoot, state, detail, 'error');
|
|
158
158
|
}
|
|
159
159
|
/**
|
|
160
160
|
* Merges origin/targetBranch into the worktree's branch to clear a confirmed
|
|
@@ -166,7 +166,7 @@ async function escalate(forge, mrIid, message, state, repoRoot) {
|
|
|
166
166
|
*/
|
|
167
167
|
async function tryResolveConflicts(forge, agent, config, worktreePath, branch, targetBranch, mrIid, state, repoRoot) {
|
|
168
168
|
state.attempt += 1;
|
|
169
|
-
|
|
169
|
+
recordEvent(repoRoot, state, `Merge conflicts detected; attempt ${state.attempt}/${config.maxFixAttempts} â merging origin/${targetBranch} into ${branch}`);
|
|
170
170
|
step('â ī¸', 'Merge conflicts detected', `attempt ${state.attempt}/${config.maxFixAttempts} â merging origin/${targetBranch} into ${branch}`);
|
|
171
171
|
if (state.attempt > config.maxFixAttempts) {
|
|
172
172
|
await escalate(forge, mrIid, formatEscalationNote(`Automated fix attempts exhausted (${state.attempt - 1} attempt(s))`, [`â Merge conflicts with \`origin/${targetBranch}\` could not be resolved automatically`], 'This MR/PR needs a human to resolve them.'), state, repoRoot);
|
|
@@ -212,7 +212,7 @@ export async function watchPipeline(forge, config, agent, worktreePath, branch,
|
|
|
212
212
|
const intervalMs = config.pollIntervalSeconds * 1000;
|
|
213
213
|
const ciConfigured = hasCiConfig(worktreePath, config.forge);
|
|
214
214
|
state.phase = 'watch';
|
|
215
|
-
|
|
215
|
+
recordEvent(repoRoot, state, 'Started watching pipeline');
|
|
216
216
|
let previousPipelineId;
|
|
217
217
|
for (;;) {
|
|
218
218
|
const outcome = await runStep(11, 'đ', 'Watching pipeline', `poll CI every ${config.pollIntervalSeconds}s until it finishes`, () => pollForNextAction(forge, mrIid, intervalMs, previousPipelineId, NO_PIPELINE_GRACE_MS, ciConfigured));
|
|
@@ -228,16 +228,16 @@ export async function watchPipeline(forge, config, agent, worktreePath, branch,
|
|
|
228
228
|
// 2-hour safety window would otherwise time out.
|
|
229
229
|
step('âšī¸', 'No CI pipeline found', `no pipeline was detected for the MR/PR within ${NO_PIPELINE_GRACE_MS / 1000}s â nothing to watch`);
|
|
230
230
|
state.phase = 'done';
|
|
231
|
-
|
|
231
|
+
recordEvent(repoRoot, state, 'No CI pipeline found for this MR/PR â nothing to watch');
|
|
232
232
|
return;
|
|
233
233
|
}
|
|
234
234
|
const pipeline = outcome.pipeline;
|
|
235
235
|
note(`pipeline ${pipeline.id}: ${pipeline.status} â ${pipeline.webUrl}`);
|
|
236
236
|
state.pipelineId = pipeline.id;
|
|
237
|
-
|
|
237
|
+
recordEvent(repoRoot, state, `Pipeline ${pipeline.id}: ${pipeline.status} â ${pipeline.webUrl}`);
|
|
238
238
|
if (pipeline.status === 'success') {
|
|
239
239
|
state.phase = 'done';
|
|
240
|
-
|
|
240
|
+
recordEvent(repoRoot, state, 'Pipeline succeeded');
|
|
241
241
|
return;
|
|
242
242
|
}
|
|
243
243
|
if (pipeline.status !== 'failed') {
|
|
@@ -246,7 +246,7 @@ export async function watchPipeline(forge, config, agent, worktreePath, branch,
|
|
|
246
246
|
return;
|
|
247
247
|
}
|
|
248
248
|
state.attempt += 1;
|
|
249
|
-
|
|
249
|
+
recordEvent(repoRoot, state, `Pipeline failed; attempt ${state.attempt}/${config.maxFixAttempts} â ${pipeline.webUrl}`);
|
|
250
250
|
step('đĨ', 'Pipeline failed', `attempt ${state.attempt}/${config.maxFixAttempts} â ${pipeline.webUrl}`);
|
|
251
251
|
if (state.attempt > config.maxFixAttempts) {
|
|
252
252
|
await escalate(forge, mrIid, formatEscalationNote(`Automated fix attempts exhausted (${state.attempt - 1} attempt(s))`, [`â CI pipeline: still failing â ${pipeline.webUrl}`], 'Needs a human to take over.'), state, repoRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watchPipeline.js","sourceRoot":"","sources":["../../src/workflow/watchPipeline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"watchPipeline.js","sourceRoot":"","sources":["../../src/workflow/watchPipeline.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pipeline-worker",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"description": "Automated git-worktree workflow: captures intent from a diff via Claude Code or GitHub Copilot CLI, runs build/lint/test, opens a GitLab MR or GitHub PR, and auto-fixes failing pipelines â with a companion forge MCP server (TOON-encoded responses).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Mohan TN <mohan.tn100@gmail.com>",
|