pipeline-worker 0.1.0 → 0.1.1
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 +3 -1
- package/dist/agent/claude.d.ts +17 -0
- package/dist/agent/claude.js +79 -5
- package/dist/agent/claude.js.map +1 -1
- package/dist/agent/types.d.ts +2 -0
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/config/detectChecks.js +51 -2
- package/dist/config/detectChecks.js.map +1 -1
- package/dist/config/loader.js +26 -3
- package/dist/config/loader.js.map +1 -1
- package/dist/forge/github.js +12 -1
- package/dist/forge/github.js.map +1 -1
- package/dist/forge/gitlab.d.ts +1 -1
- package/dist/forge/gitlab.js +18 -5
- package/dist/forge/gitlab.js.map +1 -1
- package/dist/forge/types.d.ts +9 -0
- package/dist/git/commit.d.ts +20 -0
- package/dist/git/commit.js +37 -0
- package/dist/git/commit.js.map +1 -1
- package/dist/git/diff.d.ts +6 -0
- package/dist/git/diff.js +7 -1
- package/dist/git/diff.js.map +1 -1
- package/dist/git/resolveProjectPath.d.ts +22 -0
- package/dist/git/resolveProjectPath.js +37 -0
- package/dist/git/resolveProjectPath.js.map +1 -0
- package/dist/git/worktree.d.ts +24 -1
- package/dist/git/worktree.js +63 -3
- package/dist/git/worktree.js.map +1 -1
- package/dist/types.d.ts +16 -1
- package/dist/ui/steps.d.ts +34 -0
- package/dist/ui/steps.js +83 -0
- package/dist/ui/steps.js.map +1 -0
- package/dist/ui/welcome.d.ts +5 -0
- package/dist/ui/welcome.js +34 -0
- package/dist/ui/welcome.js.map +1 -0
- package/dist/workflow/captureIntent.js +71 -8
- package/dist/workflow/captureIntent.js.map +1 -1
- package/dist/workflow/openMergeRequest.d.ts +2 -0
- package/dist/workflow/openMergeRequest.js +24 -13
- package/dist/workflow/openMergeRequest.js.map +1 -1
- package/dist/workflow/orchestrate.js +48 -13
- package/dist/workflow/orchestrate.js.map +1 -1
- package/dist/workflow/runChecks.d.ts +6 -0
- package/dist/workflow/runChecks.js +33 -5
- package/dist/workflow/runChecks.js.map +1 -1
- package/dist/workflow/watchPipeline.d.ts +8 -1
- package/dist/workflow/watchPipeline.js +112 -22
- package/dist/workflow/watchPipeline.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
# pipeline-worker
|
|
2
2
|
|
|
3
|
-
[](https://github.com/MohanTn/pipeline_worker/actions/workflows/ci.yml)
|
|
4
4
|
[](https://www.npmjs.com/package/pipeline-worker)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
7
|
Automate the last mile of your local changes: pipeline-worker takes the uncommitted diff in your repo and drives it — unattended — to a green merge request.
|
|
8
8
|
|
|
9
|
+

|
|
10
|
+
|
|
9
11
|
1. Captures your staged + unstaged changes (your working tree is never touched).
|
|
10
12
|
2. Replays them in a disposable git worktree.
|
|
11
13
|
3. Asks a coding agent (Claude Code or GitHub Copilot CLI) to infer the intent: branch name, commit message, summary.
|
package/dist/agent/claude.d.ts
CHANGED
|
@@ -3,6 +3,23 @@
|
|
|
3
3
|
* `claude` CLI: `-p/--print`, `--output-format json`, `--permission-mode`,
|
|
4
4
|
* `--json-schema`, `--mcp-config`. There is no `--cwd` flag — working
|
|
5
5
|
* directory is controlled by the spawned process's `cwd` option.
|
|
6
|
+
*
|
|
7
|
+
* When the spawned CLI exits non-zero, the rejection we throw includes
|
|
8
|
+
* **stdout in addition to stderr**. Under `--output-format json` Claude
|
|
9
|
+
* frequently writes a structured `is_error: true` envelope to stdout, which
|
|
10
|
+
* is where the real diagnostic lives; Node's default execFile rejection only
|
|
11
|
+
* surfaces the command line + stderr, so without this the most useful failure
|
|
12
|
+
* information is silently dropped.
|
|
6
13
|
*/
|
|
7
14
|
import type { AgentAdapter } from './types.js';
|
|
15
|
+
/** Subset of the rejection shape Node's promisified execFile produces. */
|
|
16
|
+
interface ExecErrorShape {
|
|
17
|
+
code?: number | string | null;
|
|
18
|
+
signal?: NodeJS.Signals | null;
|
|
19
|
+
stdout?: string;
|
|
20
|
+
stderr?: string;
|
|
21
|
+
message?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function formatProcessError(err: ExecErrorShape): string;
|
|
8
24
|
export declare const claudeAdapter: AgentAdapter;
|
|
25
|
+
export {};
|
package/dist/agent/claude.js
CHANGED
|
@@ -3,11 +3,74 @@
|
|
|
3
3
|
* `claude` CLI: `-p/--print`, `--output-format json`, `--permission-mode`,
|
|
4
4
|
* `--json-schema`, `--mcp-config`. There is no `--cwd` flag — working
|
|
5
5
|
* directory is controlled by the spawned process's `cwd` option.
|
|
6
|
+
*
|
|
7
|
+
* When the spawned CLI exits non-zero, the rejection we throw includes
|
|
8
|
+
* **stdout in addition to stderr**. Under `--output-format json` Claude
|
|
9
|
+
* frequently writes a structured `is_error: true` envelope to stdout, which
|
|
10
|
+
* is where the real diagnostic lives; Node's default execFile rejection only
|
|
11
|
+
* surfaces the command line + stderr, so without this the most useful failure
|
|
12
|
+
* information is silently dropped.
|
|
6
13
|
*/
|
|
7
14
|
import { execFile } from 'node:child_process';
|
|
8
15
|
import { promisify } from 'node:util';
|
|
9
16
|
const execFileAsync = promisify(execFile);
|
|
10
17
|
const INVOKE_TIMEOUT_MS = 300_000;
|
|
18
|
+
/**
|
|
19
|
+
* Tail-truncation cap for stdout/stderr in the rejection message. Mirrors
|
|
20
|
+
* `watchPipeline.ts`'s `.slice(-4000)` so a verbose agent failure (e.g. an
|
|
21
|
+
* error envelope that re-echoes the input diff) doesn't blow up the error
|
|
22
|
+
* text that propagates through captureIntent and ultimately lands in the
|
|
23
|
+
* CLI's stderr.
|
|
24
|
+
*/
|
|
25
|
+
const MAX_ERROR_OUTPUT_CHARS = 4000;
|
|
26
|
+
/**
|
|
27
|
+
* Composes a human-readable message naming the cause (exit code or signal)
|
|
28
|
+
* and including both stdout and stderr streams. Exported for unit testing so
|
|
29
|
+
* callers building on top of this adapter can pin its behavior.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Renders one captured stream (`stdout` or `stderr`) as a single block, with
|
|
33
|
+
* tail-truncation and a visible marker when the stream exceeded the cap.
|
|
34
|
+
* Returns the empty string when there is nothing meaningful to show so the
|
|
35
|
+
* caller can skip the block entirely.
|
|
36
|
+
*/
|
|
37
|
+
function formatStreamBlock(label, raw) {
|
|
38
|
+
if (!raw || raw.trim().length === 0)
|
|
39
|
+
return '';
|
|
40
|
+
const trimmed = raw.trim();
|
|
41
|
+
if (trimmed.length <= MAX_ERROR_OUTPUT_CHARS) {
|
|
42
|
+
return `--- ${label} ---\n${trimmed}`;
|
|
43
|
+
}
|
|
44
|
+
const dropped = trimmed.length - MAX_ERROR_OUTPUT_CHARS;
|
|
45
|
+
return `--- ${label} ---\n[... ${dropped} chars truncated, showing last ${MAX_ERROR_OUTPUT_CHARS} ...]\n${trimmed.slice(-MAX_ERROR_OUTPUT_CHARS)}`;
|
|
46
|
+
}
|
|
47
|
+
export function formatProcessError(err) {
|
|
48
|
+
let cause;
|
|
49
|
+
if (err.signal) {
|
|
50
|
+
cause = `killed by signal ${err.signal}`;
|
|
51
|
+
}
|
|
52
|
+
else if (err.code !== undefined && err.code !== null) {
|
|
53
|
+
cause = `exited with code ${err.code}`;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
cause = 'failed with no exit code or signal reported';
|
|
57
|
+
}
|
|
58
|
+
const lines = [`claude ${cause}.`];
|
|
59
|
+
for (const [label, raw] of [['stdout', err.stdout], ['stderr', err.stderr]]) {
|
|
60
|
+
const block = formatStreamBlock(label, raw);
|
|
61
|
+
if (block)
|
|
62
|
+
lines.push(block);
|
|
63
|
+
}
|
|
64
|
+
// Only fall through to the underlying Node error message when neither
|
|
65
|
+
// captured stream has content — typical of spawn-time failures like
|
|
66
|
+
// ENOENT, where the message is the only context we have.
|
|
67
|
+
const hasStdout = !!(err.stdout && err.stdout.trim().length > 0);
|
|
68
|
+
const hasStderr = !!(err.stderr && err.stderr.trim().length > 0);
|
|
69
|
+
if (err.message && err.message.trim().length > 0 && !hasStdout && !hasStderr) {
|
|
70
|
+
lines.push(`(underlying: ${err.message.trim()})`);
|
|
71
|
+
}
|
|
72
|
+
return lines.join('\n');
|
|
73
|
+
}
|
|
11
74
|
export const claudeAdapter = {
|
|
12
75
|
async invoke(opts) {
|
|
13
76
|
const args = [
|
|
@@ -21,11 +84,22 @@ export const claudeAdapter = {
|
|
|
21
84
|
if (opts.mcpConfigPath) {
|
|
22
85
|
args.push('--mcp-config', opts.mcpConfigPath);
|
|
23
86
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
87
|
+
if (opts.model) {
|
|
88
|
+
args.push('--model', opts.model);
|
|
89
|
+
}
|
|
90
|
+
let stdout;
|
|
91
|
+
try {
|
|
92
|
+
const result = await execFileAsync('claude', args, {
|
|
93
|
+
cwd: opts.cwd,
|
|
94
|
+
timeout: INVOKE_TIMEOUT_MS,
|
|
95
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
96
|
+
});
|
|
97
|
+
stdout = result.stdout;
|
|
98
|
+
}
|
|
99
|
+
catch (rawErr) {
|
|
100
|
+
const err = rawErr;
|
|
101
|
+
throw new Error(formatProcessError(err));
|
|
102
|
+
}
|
|
29
103
|
try {
|
|
30
104
|
const parsed = JSON.parse(stdout);
|
|
31
105
|
return { text: parsed.result ?? stdout, raw: parsed };
|
package/dist/agent/claude.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agent/claude.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agent/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/types.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export interface AgentInvokeOptions {
|
|
|
10
10
|
mcpConfigPath?: string;
|
|
11
11
|
/** Optional permission mode override; adapters default to an auto-accept mode suitable for unattended runs. */
|
|
12
12
|
permissionMode?: string;
|
|
13
|
+
/** Optional model override (e.g. "haiku"), for adapters that support per-invocation model selection. */
|
|
14
|
+
model?: string;
|
|
13
15
|
}
|
|
14
16
|
export interface AgentInvokeResult {
|
|
15
17
|
/** The agent's final text answer (or, when jsonSchema was supplied, its raw JSON string). */
|
package/dist/cli.js
CHANGED
|
@@ -49,7 +49,7 @@ program
|
|
|
49
49
|
const config = loadConfig(repoRoot);
|
|
50
50
|
const forge = createForge(config);
|
|
51
51
|
const agent = selectAgent(config);
|
|
52
|
-
await watchPipeline(forge, config, agent, state.worktreePath, state.branch, state.mrIid, state, repoRoot);
|
|
52
|
+
await watchPipeline(forge, config, agent, state.worktreePath, state.branch, state.targetBranch, state.mrIid, state, repoRoot);
|
|
53
53
|
console.log(`pipeline-worker: resumed run finished with phase "${state.phase}".`);
|
|
54
54
|
}
|
|
55
55
|
catch (error) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,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,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,kEAAkE,CAAC,CAAC;AAEhH,OAAO;KACJ,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACnC,WAAW,CAAC,8EAA8E,CAAC;KAC3F,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uEAAuE,CAAC;KACpF,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,cAAc,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;KACrE,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,EAAE;IACzC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,sDAAsD,IAAI,CAAC,MAAM,mCAAmC,CAAC,CAAC;YACpH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
9
9
|
import { join } from 'node:path';
|
|
10
|
-
const
|
|
10
|
+
const DOTNET_SOLUTION_SUFFIXES = ['.sln', '.slnx'];
|
|
11
|
+
const DOTNET_PROJECT_SUFFIXES = [...DOTNET_SOLUTION_SUFFIXES, '.csproj', '.fsproj', '.vbproj'];
|
|
11
12
|
const PYTHON_MARKERS = ['pyproject.toml', 'setup.py', 'requirements.txt'];
|
|
12
13
|
/** Maps each stage to `npm run <script>` only for scripts the repo declares. */
|
|
13
14
|
function detectNode(repoRoot) {
|
|
@@ -28,6 +29,40 @@ function detectNode(repoRoot) {
|
|
|
28
29
|
test: 'test' in scripts ? 'npm test' : '',
|
|
29
30
|
};
|
|
30
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns true when the repo uses CSharpier as its formatter.
|
|
34
|
+
* Detected via a .csharpierignore file at the root OR a 'csharpier' entry
|
|
35
|
+
* in .config/dotnet-tools.json (the standard local tools manifest).
|
|
36
|
+
*/
|
|
37
|
+
function hasCsharpier(repoRoot) {
|
|
38
|
+
if (existsSync(join(repoRoot, '.csharpierignore')))
|
|
39
|
+
return true;
|
|
40
|
+
const toolsManifest = join(repoRoot, '.config', 'dotnet-tools.json');
|
|
41
|
+
if (!existsSync(toolsManifest))
|
|
42
|
+
return false;
|
|
43
|
+
try {
|
|
44
|
+
const manifest = JSON.parse(readFileSync(toolsManifest, 'utf-8'));
|
|
45
|
+
return 'csharpier' in (manifest.tools ?? {});
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Builds the DetectedChecks for a .NET repo.
|
|
53
|
+
* @param repoRoot - absolute path to the repo root
|
|
54
|
+
* @param slnSubdir - relative subdirectory containing the .sln (e.g. 'src'), or undefined if at root
|
|
55
|
+
*/
|
|
56
|
+
function detectDotnet(repoRoot, slnSubdir) {
|
|
57
|
+
const build = slnSubdir ? `dotnet build ${slnSubdir}` : 'dotnet build';
|
|
58
|
+
const lint = hasCsharpier(repoRoot)
|
|
59
|
+
? 'dotnet tool restore && dotnet csharpier check .'
|
|
60
|
+
: 'dotnet format --verify-no-changes';
|
|
61
|
+
// A `run-tests` script is a common pattern for repos that wrap dotnet test
|
|
62
|
+
// with coverage reporting; prefer it over the bare dotnet test command.
|
|
63
|
+
const test = existsSync(join(repoRoot, 'run-tests')) ? './run-tests Unit' : 'dotnet test';
|
|
64
|
+
return { language: 'dotnet', build, lint, test };
|
|
65
|
+
}
|
|
31
66
|
export function detectChecks(repoRoot) {
|
|
32
67
|
if (existsSync(join(repoRoot, 'package.json')))
|
|
33
68
|
return detectNode(repoRoot);
|
|
@@ -38,8 +73,22 @@ export function detectChecks(repoRoot) {
|
|
|
38
73
|
catch {
|
|
39
74
|
// Unreadable root: fall through to unknown, honoring loader.ts's never-throw contract.
|
|
40
75
|
}
|
|
76
|
+
// .sln/.csproj at the repo root
|
|
41
77
|
if (rootEntries.some((name) => DOTNET_PROJECT_SUFFIXES.some((suffix) => name.endsWith(suffix)))) {
|
|
42
|
-
return
|
|
78
|
+
return detectDotnet(repoRoot);
|
|
79
|
+
}
|
|
80
|
+
// .sln in a src/ subdirectory — a common layout where source lives one level down
|
|
81
|
+
const srcDir = join(repoRoot, 'src');
|
|
82
|
+
if (existsSync(srcDir)) {
|
|
83
|
+
try {
|
|
84
|
+
const srcEntries = readdirSync(srcDir);
|
|
85
|
+
if (srcEntries.some((name) => DOTNET_SOLUTION_SUFFIXES.some((suffix) => name.endsWith(suffix)))) {
|
|
86
|
+
return detectDotnet(repoRoot, 'src');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Ignore readdir errors on the src/ subdirectory.
|
|
91
|
+
}
|
|
43
92
|
}
|
|
44
93
|
if (existsSync(join(repoRoot, 'go.mod'))) {
|
|
45
94
|
return { language: 'go', build: 'go build ./...', lint: 'go vet ./...', test: 'go test ./...' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectChecks.js","sourceRoot":"","sources":["../../src/config/detectChecks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,MAAM,
|
|
1
|
+
{"version":3,"file":"detectChecks.js","sourceRoot":"","sources":["../../src/config/detectChecks.ts"],"names":[],"mappings":"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"}
|
package/dist/config/loader.js
CHANGED
|
@@ -12,6 +12,7 @@ import { join } from 'node:path';
|
|
|
12
12
|
import { parseEnv } from 'node:util';
|
|
13
13
|
import { load } from 'js-yaml';
|
|
14
14
|
import { detectChecks } from './detectChecks.js';
|
|
15
|
+
import { deriveProjectPath } from '../git/resolveProjectPath.js';
|
|
15
16
|
const CONFIG_FILE_NAME = '.pipeline-worker.yml';
|
|
16
17
|
const AGENT_NAMES = ['claude', 'copilot'];
|
|
17
18
|
const FORGE_NAMES = ['gitlab', 'github'];
|
|
@@ -78,15 +79,37 @@ export function loadConfig(repoRoot, override) {
|
|
|
78
79
|
}
|
|
79
80
|
// Each tier is validated independently: an invalid env value falls back to
|
|
80
81
|
// a valid yaml value, not straight to the built-in default.
|
|
82
|
+
// Resolve the repoBase: env var wins over YAML value
|
|
83
|
+
const repoBase = process.env.PIPELINE_WORKER_GITLAB_REPO_BASE || parsed.gitlab?.repoBase;
|
|
84
|
+
// Resolve projectId: YAML value is authoritative; when unset, fall back to
|
|
85
|
+
// auto-detecting a string path from repoBase. projectId can legitimately be
|
|
86
|
+
// a string (a 'group/subgroup/project' path), so it is kept as-is below
|
|
87
|
+
// rather than coerced through positiveNumber, which is number-only.
|
|
88
|
+
let resolvedProjectId = parsed.gitlab?.projectId ?? DEFAULT_CONFIG.gitlab.projectId;
|
|
89
|
+
if (!resolvedProjectId && repoBase) {
|
|
90
|
+
try {
|
|
91
|
+
resolvedProjectId = deriveProjectPath(repoBase, repoRoot);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
95
|
+
console.error(`Warning: ${message}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// The env var override is numeric-only (GitLab numeric project IDs); an
|
|
99
|
+
// unset or invalid value falls back to the yaml/auto-detected resolution
|
|
100
|
+
// above, which may be a string path.
|
|
101
|
+
const envProjectId = positiveNumber(process.env.PIPELINE_WORKER_GITLAB_PROJECT_ID, NaN);
|
|
102
|
+
const projectId = Number.isNaN(envProjectId) ? resolvedProjectId : envProjectId;
|
|
81
103
|
return {
|
|
82
104
|
agent: pickName(process.env.PIPELINE_WORKER_AGENT, AGENT_NAMES, pickName(parsed.agent, AGENT_NAMES, DEFAULT_CONFIG.agent)),
|
|
83
105
|
forge: pickName(process.env.PIPELINE_WORKER_FORGE, FORGE_NAMES, pickName(parsed.forge, FORGE_NAMES, DEFAULT_CONFIG.forge)),
|
|
84
106
|
gitlab: {
|
|
85
|
-
host: parsed.gitlab?.host
|
|
86
|
-
projectId
|
|
107
|
+
host: process.env.PIPELINE_WORKER_GITLAB_HOST || parsed.gitlab?.host || DEFAULT_CONFIG.gitlab.host,
|
|
108
|
+
projectId,
|
|
109
|
+
repoBase,
|
|
87
110
|
},
|
|
88
111
|
github: {
|
|
89
|
-
repo: parsed.github?.repo
|
|
112
|
+
repo: process.env.PIPELINE_WORKER_GITHUB_REPO || parsed.github?.repo || DEFAULT_CONFIG.github.repo,
|
|
90
113
|
},
|
|
91
114
|
build: parsed.build ?? detected.build,
|
|
92
115
|
lint: parsed.lint ?? detected.lint,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/forge/github.js
CHANGED
|
@@ -6,8 +6,11 @@
|
|
|
6
6
|
* environment variable — never from `.pipeline-worker.yml`.
|
|
7
7
|
*/
|
|
8
8
|
export function resolveGithubAuth(config) {
|
|
9
|
+
// config.github.repo is already env/.env/yaml-resolved by config/loader.ts;
|
|
10
|
+
// only the token (never read from yaml) and the API URL override are read
|
|
11
|
+
// directly from the environment here.
|
|
9
12
|
const apiUrl = process.env.PIPELINE_WORKER_GITHUB_API_URL || 'https://api.github.com';
|
|
10
|
-
const repo =
|
|
13
|
+
const repo = config.github.repo;
|
|
11
14
|
const token = process.env.PIPELINE_WORKER_GITHUB_TOKEN || process.env.GITHUB_TOKEN;
|
|
12
15
|
if (!/^[^/\s]+\/[^/\s]+$/.test(repo)) {
|
|
13
16
|
throw new Error('GitHub repo is not configured (set github.repo to "owner/name" in .pipeline-worker.yml or PIPELINE_WORKER_GITHUB_REPO).');
|
|
@@ -129,6 +132,14 @@ export function createGithubForge(config) {
|
|
|
129
132
|
const note = (await res.json());
|
|
130
133
|
return { id: note.id };
|
|
131
134
|
},
|
|
135
|
+
async hasMergeConflicts(mrIid) {
|
|
136
|
+
const res = await githubRequest(auth, `/pulls/${mrIid}`);
|
|
137
|
+
const pr = (await res.json());
|
|
138
|
+
// "dirty" is GitHub's specific state for real merge conflicts; other
|
|
139
|
+
// non-mergeable states (unstable, blocked, behind, draft, unknown) are
|
|
140
|
+
// not conflicts and must not trigger conflict resolution.
|
|
141
|
+
return pr.mergeable_state === 'dirty';
|
|
142
|
+
},
|
|
132
143
|
};
|
|
133
144
|
}
|
|
134
145
|
//# sourceMappingURL=github.js.map
|
package/dist/forge/github.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/forge/github.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,MAAM,UAAU,iBAAiB,CAAC,MAA4B;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,wBAAwB,CAAC;IACtF,MAAM,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/forge/github.ts"],"names":[],"mappings":"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"}
|
package/dist/forge/gitlab.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type { PipelineWorkerConfig } from '../types.js';
|
|
|
8
8
|
import type { ForgeClient } from './types.js';
|
|
9
9
|
export interface GitlabAuth {
|
|
10
10
|
host: string;
|
|
11
|
-
projectId: number;
|
|
11
|
+
projectId: number | string;
|
|
12
12
|
token: string;
|
|
13
13
|
}
|
|
14
14
|
export declare function resolveGitlabAuth(config: PipelineWorkerConfig): GitlabAuth;
|
package/dist/forge/gitlab.js
CHANGED
|
@@ -5,20 +5,25 @@
|
|
|
5
5
|
* so there is exactly one place that knows how to talk to GitLab.
|
|
6
6
|
*/
|
|
7
7
|
export function resolveGitlabAuth(config) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
// config.gitlab.host/projectId are already env/.env/yaml-resolved by
|
|
9
|
+
// config/loader.ts; only the token (never read from yaml) is read
|
|
10
|
+
// directly from the environment here.
|
|
11
|
+
const host = config.gitlab.host;
|
|
12
|
+
const projectId = config.gitlab.projectId;
|
|
11
13
|
const token = process.env.PIPELINE_WORKER_GITLAB_TOKEN;
|
|
12
14
|
if (!host)
|
|
13
15
|
throw new Error('GitLab host is not configured (set gitlab.host in .pipeline-worker.yml or PIPELINE_WORKER_GITLAB_HOST).');
|
|
14
16
|
if (!projectId)
|
|
15
|
-
throw new Error('GitLab projectId is not configured (set gitlab.projectId in .pipeline-worker.yml or
|
|
17
|
+
throw new Error('GitLab projectId is not configured (set gitlab.projectId in .pipeline-worker.yml, PIPELINE_WORKER_GITLAB_PROJECT_ID, or PIPELINE_WORKER_GITLAB_REPO_BASE for auto-detection).');
|
|
16
18
|
if (!token)
|
|
17
19
|
throw new Error('PIPELINE_WORKER_GITLAB_TOKEN environment variable is not set.');
|
|
18
20
|
return { host, projectId, token };
|
|
19
21
|
}
|
|
20
22
|
async function gitlabRequest(auth, path, init) {
|
|
21
|
-
|
|
23
|
+
// String project paths (e.g. 'group/subgroup/project') must be URL-encoded
|
|
24
|
+
// so slashes don't collide with the API route structure.
|
|
25
|
+
const projectSegment = typeof auth.projectId === 'string' ? encodeURIComponent(auth.projectId) : auth.projectId;
|
|
26
|
+
const url = `${auth.host.replace(/\/$/, '')}/api/v4/projects/${projectSegment}${path}`;
|
|
22
27
|
const res = await fetch(url, {
|
|
23
28
|
...init,
|
|
24
29
|
headers: {
|
|
@@ -94,6 +99,14 @@ export function createGitlabForge(config) {
|
|
|
94
99
|
const note = (await res.json());
|
|
95
100
|
return { id: note.id };
|
|
96
101
|
},
|
|
102
|
+
async hasMergeConflicts(mrIid) {
|
|
103
|
+
const res = await gitlabRequest(auth, `/merge_requests/${mrIid}`);
|
|
104
|
+
const mr = (await res.json());
|
|
105
|
+
// "cannot_be_merged" is GitLab's confirmed-conflict state; "unchecked"/
|
|
106
|
+
// "checking"/"cannot_be_merged_recheck" mean it hasn't finished
|
|
107
|
+
// computing yet and must not be treated as a conflict.
|
|
108
|
+
return mr.merge_status === 'cannot_be_merged';
|
|
109
|
+
},
|
|
97
110
|
};
|
|
98
111
|
}
|
|
99
112
|
//# sourceMappingURL=gitlab.js.map
|
package/dist/forge/gitlab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/forge/gitlab.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,UAAU,iBAAiB,CAAC,MAA4B;IAC5D,
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/forge/gitlab.ts"],"names":[],"mappings":"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"}
|
package/dist/forge/types.d.ts
CHANGED
|
@@ -22,4 +22,13 @@ export interface ForgeClient {
|
|
|
22
22
|
createMrNote(mrIid: number, body: string): Promise<{
|
|
23
23
|
id: number;
|
|
24
24
|
}>;
|
|
25
|
+
/**
|
|
26
|
+
* True only when the forge has *confirmed* the MR/PR has real merge
|
|
27
|
+
* conflicts against its target branch (GitHub's `mergeable_state: "dirty"`,
|
|
28
|
+
* GitLab's `merge_status: "cannot_be_merged"`). Both forges compute this
|
|
29
|
+
* asynchronously after a push, so a not-yet-known state must read as
|
|
30
|
+
* false here — treating "unknown" as "conflicted" would trigger conflict
|
|
31
|
+
* resolution on every push, before the forge has even checked.
|
|
32
|
+
*/
|
|
33
|
+
hasMergeConflicts(mrIid: number): Promise<boolean>;
|
|
25
34
|
}
|
package/dist/git/commit.d.ts
CHANGED
|
@@ -4,5 +4,25 @@ export declare function commit(worktreePath: string, message: string): Promise<v
|
|
|
4
4
|
export declare function push(worktreePath: string, remote: string, branch: string): Promise<void>;
|
|
5
5
|
/** True when the worktree has staged, unstaged, or untracked changes. */
|
|
6
6
|
export declare function hasChanges(worktreePath: string): Promise<boolean>;
|
|
7
|
+
/** Files git still reports as unmerged — conflict markers from a `git apply --3way` or `git merge` not yet resolved and staged. */
|
|
8
|
+
export declare function listConflictedFiles(worktreePath: string): Promise<string[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Which of `files` still literally contain an unresolved `<<<<<<<`/`>>>>>>>`
|
|
11
|
+
* conflict marker line. Deliberately reads file content rather than reusing
|
|
12
|
+
* listConflictedFiles: git's index keeps a file flagged "unmerged" until
|
|
13
|
+
* `git add` re-stages it, regardless of whether its content still has
|
|
14
|
+
* markers — so checking the index right after an editor (human or agent)
|
|
15
|
+
* fixes the content, but before staging, would always report "still
|
|
16
|
+
* conflicted" even when it's actually resolved. Checking content directly
|
|
17
|
+
* also catches the opposite mistake: `git add` doesn't validate content, so
|
|
18
|
+
* staging first and then checking the index would silently accept a file
|
|
19
|
+
* that still has markers in it.
|
|
20
|
+
*/
|
|
21
|
+
export declare function findUnresolvedConflictMarkers(worktreePath: string, files: string[]): string[];
|
|
7
22
|
export declare function currentSha(worktreePath: string): Promise<string>;
|
|
8
23
|
export declare function currentBranch(cwd: string): Promise<string>;
|
|
24
|
+
/** Reads git config user.name/user.email for display purposes; never throws — unset config just reads as ''. */
|
|
25
|
+
export declare function getGitUser(cwd: string): Promise<{
|
|
26
|
+
name: string;
|
|
27
|
+
email: string;
|
|
28
|
+
}>;
|
package/dist/git/commit.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** Thin git plumbing wrappers used against the isolated worktree. */
|
|
2
2
|
import { execFile } from 'node:child_process';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
3
5
|
import { promisify } from 'node:util';
|
|
4
6
|
const execFileAsync = promisify(execFile);
|
|
5
7
|
export async function stageAll(worktreePath) {
|
|
@@ -16,6 +18,27 @@ export async function hasChanges(worktreePath) {
|
|
|
16
18
|
const { stdout } = await execFileAsync('git', ['status', '--porcelain'], { cwd: worktreePath });
|
|
17
19
|
return stdout.trim().length > 0;
|
|
18
20
|
}
|
|
21
|
+
/** Files git still reports as unmerged — conflict markers from a `git apply --3way` or `git merge` not yet resolved and staged. */
|
|
22
|
+
export async function listConflictedFiles(worktreePath) {
|
|
23
|
+
const { stdout } = await execFileAsync('git', ['diff', '--name-only', '--diff-filter=U'], { cwd: worktreePath });
|
|
24
|
+
return stdout.trim().split('\n').filter(Boolean);
|
|
25
|
+
}
|
|
26
|
+
const CONFLICT_MARKER = /^(<{7} |>{7} )/m;
|
|
27
|
+
/**
|
|
28
|
+
* Which of `files` still literally contain an unresolved `<<<<<<<`/`>>>>>>>`
|
|
29
|
+
* conflict marker line. Deliberately reads file content rather than reusing
|
|
30
|
+
* listConflictedFiles: git's index keeps a file flagged "unmerged" until
|
|
31
|
+
* `git add` re-stages it, regardless of whether its content still has
|
|
32
|
+
* markers — so checking the index right after an editor (human or agent)
|
|
33
|
+
* fixes the content, but before staging, would always report "still
|
|
34
|
+
* conflicted" even when it's actually resolved. Checking content directly
|
|
35
|
+
* also catches the opposite mistake: `git add` doesn't validate content, so
|
|
36
|
+
* staging first and then checking the index would silently accept a file
|
|
37
|
+
* that still has markers in it.
|
|
38
|
+
*/
|
|
39
|
+
export function findUnresolvedConflictMarkers(worktreePath, files) {
|
|
40
|
+
return files.filter((file) => CONFLICT_MARKER.test(readFileSync(join(worktreePath, file), 'utf-8')));
|
|
41
|
+
}
|
|
19
42
|
export async function currentSha(worktreePath) {
|
|
20
43
|
const { stdout } = await execFileAsync('git', ['rev-parse', 'HEAD'], { cwd: worktreePath });
|
|
21
44
|
return stdout.trim();
|
|
@@ -24,4 +47,18 @@ export async function currentBranch(cwd) {
|
|
|
24
47
|
const { stdout } = await execFileAsync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd });
|
|
25
48
|
return stdout.trim();
|
|
26
49
|
}
|
|
50
|
+
/** Reads git config user.name/user.email for display purposes; never throws — unset config just reads as ''. */
|
|
51
|
+
export async function getGitUser(cwd) {
|
|
52
|
+
async function readConfig(key) {
|
|
53
|
+
try {
|
|
54
|
+
const { stdout } = await execFileAsync('git', ['config', key], { cwd });
|
|
55
|
+
return stdout.trim();
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return '';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const [name, email] = await Promise.all([readConfig('user.name'), readConfig('user.email')]);
|
|
62
|
+
return { name, email };
|
|
63
|
+
}
|
|
27
64
|
//# sourceMappingURL=commit.js.map
|
package/dist/git/commit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/git/commit.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,YAAoB;IACjD,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,YAAoB,EAAE,OAAe;IAChE,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,YAAoB,EAAE,MAAc,EAAE,MAAc;IAC7E,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;AAChG,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,YAAoB;IACnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IAChG,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,YAAoB;IACnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5F,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9F,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/git/commit.ts"],"names":[],"mappings":"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"}
|
package/dist/git/diff.d.ts
CHANGED
|
@@ -7,5 +7,11 @@ export interface CapturedDiff {
|
|
|
7
7
|
* Captures staged+unstaged changes (`git diff HEAD`) plus the list of
|
|
8
8
|
* untracked files (which `git diff` never includes) so both can be carried
|
|
9
9
|
* into an isolated worktree.
|
|
10
|
+
*
|
|
11
|
+
* `--full-index` records full (not abbreviated) blob hashes, which
|
|
12
|
+
* worktree.ts's `git apply --3way` needs to reliably locate each blob's
|
|
13
|
+
* common ancestor when the worktree has since been rebased onto a newer
|
|
14
|
+
* origin — otherwise a 3-way merge could fail to resolve an otherwise
|
|
15
|
+
* legitimate abbreviated hash.
|
|
10
16
|
*/
|
|
11
17
|
export declare function captureDiff(repoRoot: string): Promise<CapturedDiff>;
|