pipeline-worker 0.1.24 → 0.1.26

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.
Files changed (50) hide show
  1. package/README.md +12 -2
  2. package/dist/cli.js +23 -8
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config/loader.js +7 -0
  5. package/dist/config/loader.js.map +1 -1
  6. package/dist/forge/github.d.ts +8 -0
  7. package/dist/forge/github.js +36 -0
  8. package/dist/forge/github.js.map +1 -1
  9. package/dist/forge/gitlab.js +20 -0
  10. package/dist/forge/gitlab.js.map +1 -1
  11. package/dist/forge/shared.d.ts +22 -2
  12. package/dist/forge/shared.js +61 -13
  13. package/dist/forge/shared.js.map +1 -1
  14. package/dist/forge/types.d.ts +21 -1
  15. package/dist/git/commit.d.ts +18 -0
  16. package/dist/git/commit.js +23 -0
  17. package/dist/git/commit.js.map +1 -1
  18. package/dist/git/diff.d.ts +8 -0
  19. package/dist/git/diff.js +11 -0
  20. package/dist/git/diff.js.map +1 -1
  21. package/dist/git/remote.d.ts +13 -0
  22. package/dist/git/remote.js +37 -1
  23. package/dist/git/remote.js.map +1 -1
  24. package/dist/git/squash.d.ts +8 -0
  25. package/dist/git/squash.js +26 -0
  26. package/dist/git/squash.js.map +1 -0
  27. package/dist/state/runState.js +9 -1
  28. package/dist/state/runState.js.map +1 -1
  29. package/dist/types.d.ts +23 -1
  30. package/dist/ui/sessions.js +4 -3
  31. package/dist/ui/sessions.js.map +1 -1
  32. package/dist/ui/welcome.d.ts +1 -1
  33. package/dist/ui/welcome.js +23 -14
  34. package/dist/ui/welcome.js.map +1 -1
  35. package/dist/workflow/adoptBranch.d.ts +21 -0
  36. package/dist/workflow/adoptBranch.js +90 -0
  37. package/dist/workflow/adoptBranch.js.map +1 -0
  38. package/dist/workflow/captureIntent.d.ts +7 -1
  39. package/dist/workflow/captureIntent.js +8 -2
  40. package/dist/workflow/captureIntent.js.map +1 -1
  41. package/dist/workflow/openMergeRequest.d.ts +2 -2
  42. package/dist/workflow/openMergeRequest.js +35 -3
  43. package/dist/workflow/openMergeRequest.js.map +1 -1
  44. package/dist/workflow/orchestrate.d.ts +13 -1
  45. package/dist/workflow/orchestrate.js +43 -9
  46. package/dist/workflow/orchestrate.js.map +1 -1
  47. package/dist/workflow/watchPipeline.d.ts +48 -5
  48. package/dist/workflow/watchPipeline.js +149 -62
  49. package/dist/workflow/watchPipeline.js.map +1 -1
  50. package/package.json +1 -1
@@ -27,6 +27,14 @@ export interface CapturedDiff {
27
27
  * scan the full (potentially many-MB, base64-laden) `diffText`.
28
28
  */
29
29
  export declare function captureDiff(repoRoot: string): Promise<CapturedDiff>;
30
+ /**
31
+ * Names the files that changed since `ref` (typically a merge-base commit —
32
+ * see git/commit.ts's mergeBase), for the `resume` branch-adoption path
33
+ * (adoptBranch.ts) where the change set is already committed rather than
34
+ * sitting uncommitted in repoRoot. Mirrors captureDiff's own `--name-only`
35
+ * call above, just parameterized on the ref instead of hardcoded `HEAD`.
36
+ */
37
+ export declare function changedFilesSinceRef(worktreePath: string, ref: string): Promise<string[]>;
30
38
  /**
31
39
  * Discards repoRoot's now-redundant uncommitted changes once they're safely
32
40
  * captured on the opened MR/PR: `git reset --hard HEAD` undoes tracked
package/dist/git/diff.js CHANGED
@@ -39,6 +39,17 @@ export async function captureDiff(repoRoot) {
39
39
  .map((line) => line.slice(3).trim());
40
40
  return { diffText, changedFiles, untrackedFiles };
41
41
  }
42
+ /**
43
+ * Names the files that changed since `ref` (typically a merge-base commit —
44
+ * see git/commit.ts's mergeBase), for the `resume` branch-adoption path
45
+ * (adoptBranch.ts) where the change set is already committed rather than
46
+ * sitting uncommitted in repoRoot. Mirrors captureDiff's own `--name-only`
47
+ * call above, just parameterized on the ref instead of hardcoded `HEAD`.
48
+ */
49
+ export async function changedFilesSinceRef(worktreePath, ref) {
50
+ const { stdout } = await execFileAsync('git', ['diff', '--name-only', ref], { cwd: worktreePath, maxBuffer: 64 * 1024 * 1024 });
51
+ return stdout.split('\n').map((line) => line.trim()).filter((line) => line.length > 0);
52
+ }
42
53
  /**
43
54
  * Discards repoRoot's now-redundant uncommitted changes once they're safely
44
55
  * captured on the opened MR/PR: `git reset --hard HEAD` undoes tracked
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/git/diff.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAQ1C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/F,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;QAClH,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;QACrG,aAAa,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;KACnE,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1G,MAAM,cAAc,GAAG,SAAS;SAC7B,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEvC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,cAAwB;IACxE,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3E,KAAK,MAAM,YAAY,IAAI,cAAc,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/git/diff.ts"],"names":[],"mappings":"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"}
@@ -5,3 +5,16 @@
5
5
  */
6
6
  /** Returns the `owner/name` slug for repoRoot's `origin` remote, or undefined if it's missing or not a GitHub remote. */
7
7
  export declare function detectGithubRepo(repoRoot: string): string | undefined;
8
+ /**
9
+ * Auto-detects `origin`'s default branch (e.g. "main"), for `resume`'s
10
+ * branch-adoption path: when it checks out a branch pipeline-worker never
11
+ * created and finds no open PR/MR yet, it needs *some* base branch to open
12
+ * one against, and there's no local repoRoot branch to infer it from (unlike
13
+ * `pipeline-worker run`, which just uses whatever branch the caller was on).
14
+ *
15
+ * Tries the fast, local `refs/remotes/origin/HEAD` symbolic ref first — set
16
+ * whenever a normal `git clone` established it — falling back to asking the
17
+ * remote directly (`git ls-remote --symref`) for repos where it was never
18
+ * set (shallow/single-branch clones, or a worktree-only checkout).
19
+ */
20
+ export declare function detectDefaultBranch(repoRoot: string): Promise<string>;
@@ -3,7 +3,9 @@
3
3
  * remote, so PIPELINE_WORKER_GITHUB_REPO only needs to be set for repos
4
4
  * where that detection doesn't apply (e.g. origin isn't GitHub).
5
5
  */
6
- import { execFileSync } from 'node:child_process';
6
+ import { execFile, execFileSync } from 'node:child_process';
7
+ import { promisify } from 'node:util';
8
+ const execFileAsync = promisify(execFile);
7
9
  const GITHUB_REMOTE = /github\.com[:/]([^/]+\/[^/]+?)(\.git)?$/;
8
10
  /** Returns the `owner/name` slug for repoRoot's `origin` remote, or undefined if it's missing or not a GitHub remote. */
9
11
  export function detectGithubRepo(repoRoot) {
@@ -16,4 +18,38 @@ export function detectGithubRepo(repoRoot) {
16
18
  }
17
19
  return url.match(GITHUB_REMOTE)?.[1];
18
20
  }
21
+ const SYMREF_LINE = /ref:\s+refs\/heads\/(\S+)\s+HEAD/;
22
+ /**
23
+ * Auto-detects `origin`'s default branch (e.g. "main"), for `resume`'s
24
+ * branch-adoption path: when it checks out a branch pipeline-worker never
25
+ * created and finds no open PR/MR yet, it needs *some* base branch to open
26
+ * one against, and there's no local repoRoot branch to infer it from (unlike
27
+ * `pipeline-worker run`, which just uses whatever branch the caller was on).
28
+ *
29
+ * Tries the fast, local `refs/remotes/origin/HEAD` symbolic ref first — set
30
+ * whenever a normal `git clone` established it — falling back to asking the
31
+ * remote directly (`git ls-remote --symref`) for repos where it was never
32
+ * set (shallow/single-branch clones, or a worktree-only checkout).
33
+ */
34
+ export async function detectDefaultBranch(repoRoot) {
35
+ try {
36
+ const { stdout } = await execFileAsync('git', ['symbolic-ref', '--short', 'refs/remotes/origin/HEAD'], { cwd: repoRoot });
37
+ return stdout.trim().replace(/^origin\//, '');
38
+ }
39
+ catch {
40
+ // origin/HEAD not set locally — fall through to asking the remote.
41
+ }
42
+ let stdout;
43
+ try {
44
+ ({ stdout } = await execFileAsync('git', ['ls-remote', '--symref', 'origin', 'HEAD'], { cwd: repoRoot }));
45
+ }
46
+ catch {
47
+ throw new Error("pipeline-worker: could not auto-detect origin's default branch — pass --target <branch> explicitly.");
48
+ }
49
+ const match = SYMREF_LINE.exec(stdout);
50
+ if (!match) {
51
+ throw new Error("pipeline-worker: could not auto-detect origin's default branch — pass --target <branch> explicitly.");
52
+ }
53
+ return match[1];
54
+ }
19
55
  //# sourceMappingURL=remote.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/git/remote.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,aAAa,GAAG,yCAAyC,CAAC;AAEhE,yHAAyH;AACzH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/I,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/git/remote.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,aAAa,GAAG,yCAAyC,CAAC;AAEhE,yHAAyH;AACzH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/I,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,WAAW,GAAG,kCAAkC,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,0BAA0B,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1H,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;IAED,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5G,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,qGAAqG,CAAC,CAAC;IACzH,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,qGAAqG,CAAC,CAAC;IACzH,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Collapses every commit on `worktreePath`'s current branch since it
3
+ * diverged from `origin/targetBranch` into a single commit titled
4
+ * `commitMessage` — the mechanics behind the opt-in `squashOnMerge` config
5
+ * flag (see orchestrate.ts's finalizeRun). Preserves tree content exactly;
6
+ * `git reset --soft` only rewrites history, never the working tree.
7
+ */
8
+ export declare function squashCommitsSinceMergeBase(worktreePath: string, targetBranch: string, commitMessage: string): Promise<void>;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Collapses every commit on `worktreePath`'s current branch since it
3
+ * diverged from `origin/targetBranch` into a single commit titled
4
+ * `commitMessage` — the mechanics behind the opt-in `squashOnMerge` config
5
+ * flag (see orchestrate.ts's finalizeRun). Preserves tree content exactly;
6
+ * `git reset --soft` only rewrites history, never the working tree.
7
+ */
8
+ import { execFile } from 'node:child_process';
9
+ import { promisify } from 'node:util';
10
+ import { mergeBase, commit } from './commit.js';
11
+ const execFileAsync = promisify(execFile);
12
+ async function currentHeadSha(worktreePath) {
13
+ const { stdout } = await execFileAsync('git', ['rev-parse', 'HEAD'], { cwd: worktreePath });
14
+ return stdout.trim();
15
+ }
16
+ export async function squashCommitsSinceMergeBase(worktreePath, targetBranch, commitMessage) {
17
+ await execFileAsync('git', ['fetch', 'origin', targetBranch], { cwd: worktreePath });
18
+ const base = await mergeBase(worktreePath, `origin/${targetBranch}`);
19
+ const head = await currentHeadSha(worktreePath);
20
+ if (head === base) {
21
+ throw new Error(`nothing to squash — HEAD is already at the merge-base with origin/${targetBranch}`);
22
+ }
23
+ await execFileAsync('git', ['reset', '--soft', base], { cwd: worktreePath });
24
+ await commit(worktreePath, commitMessage);
25
+ }
26
+ //# sourceMappingURL=squash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"squash.js","sourceRoot":"","sources":["../../src/git/squash.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,KAAK,UAAU,cAAc,CAAC,YAAoB;IAChD,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,2BAA2B,CAAC,YAAoB,EAAE,YAAoB,EAAE,aAAqB;IACjH,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IACrF,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,UAAU,YAAY,EAAE,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,qEAAqE,YAAY,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IAC7E,MAAM,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAC5C,CAAC"}
@@ -35,12 +35,20 @@ export function saveRunState(repoRoot, state) {
35
35
  console.error(`Warning: failed to persist run state for branch ${state.branch}: ${message}`);
36
36
  }
37
37
  }
38
+ function migrateRunState(raw) {
39
+ if (raw.ciFixAttempt === undefined || raw.conflictAttempt === undefined) {
40
+ const legacy = raw.attempt ?? 0;
41
+ raw.ciFixAttempt ??= legacy;
42
+ raw.conflictAttempt ??= legacy;
43
+ }
44
+ return raw;
45
+ }
38
46
  export function loadRunState(repoRoot, branch) {
39
47
  const path = statePath(repoRoot, branch);
40
48
  if (!existsSync(path))
41
49
  return undefined;
42
50
  try {
43
- return JSON.parse(readFileSync(path, 'utf-8'));
51
+ return migrateRunState(JSON.parse(readFileSync(path, 'utf-8')));
44
52
  }
45
53
  catch (error) {
46
54
  const message = error instanceof Error ? error.message : String(error);
@@ -1 +1 @@
1
- {"version":3,"file":"runState.js","sourceRoot":"","sources":["../../src/state/runState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runState.js","sourceRoot":"","sources":["../../src/state/runState.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /** Single source of truth for pipeline-worker's cross-module data shapes. */
2
2
  export type AgentName = 'claude' | 'copilot' | 'pi';
3
3
  export type ForgeName = 'gitlab' | 'github';
4
+ export type MergeMethod = 'merge' | 'squash' | 'rebase';
4
5
  export interface PipelineWorkerConfig {
5
6
  agent: AgentName;
6
7
  forge: ForgeName;
@@ -31,6 +32,20 @@ export interface PipelineWorkerConfig {
31
32
  runLintAndTest: boolean;
32
33
  /** Once checks pass, add a bullet for this change under CHANGELOG.md's [Unreleased] section (creating the file if absent) and include it in the commit. Off by default: not every consuming repo keeps a changelog. */
33
34
  updateChangelog: boolean;
35
+ /** Once the MR/PR opens, ask the forge to merge it automatically as soon as CI (and any required approvals) allow — best-effort, never fails the run if the forge rejects it. Off by default: merging is a policy decision, not something to turn on silently. */
36
+ autoMergeOnGreen: boolean;
37
+ /** Merge strategy passed to enableAutoMerge. Defaults to 'squash'. GitLab has no per-request rebase option — 'rebase' there silently falls back to the project's own default merge method. */
38
+ mergeMethod: MergeMethod;
39
+ /**
40
+ * Once CI is green, collapse every commit this run made on the branch
41
+ * since it diverged from targetBranch into one (titled from the captured
42
+ * intent) and force-push — keeps history clean regardless of the target
43
+ * repo's merge-strategy setting. Off by default: unlike every other write
44
+ * this tool makes, this rewrites already-pushed history (force-push), a
45
+ * materially different risk. Only reliable with autoMergeOnGreen off — the
46
+ * forge may already have merged (and deleted) the branch before this runs.
47
+ */
48
+ squashOnMerge: boolean;
34
49
  }
35
50
  export type RunPhase = 'diff' | 'intent' | 'checks' | 'mr' | 'watch' | 'done' | 'escalated';
36
51
  /** One entry in RunState.history — a timestamped narration of what happened during the run, for `pipeline-worker sessions`. */
@@ -46,7 +61,10 @@ export interface RunState {
46
61
  worktreePath: string;
47
62
  mrIid?: number;
48
63
  pipelineId?: number;
49
- attempt: number;
64
+ /** Automated-fix attempts spent on a real CI failure (watchPipeline.ts's runCiFixAttempt); bounded by config.maxFixAttempts independently of conflictAttempt. */
65
+ ciFixAttempt: number;
66
+ /** Automated-fix attempts spent resolving merge conflicts with the target branch (watchPipeline.ts's tryResolveConflicts); bounded by config.maxFixAttempts independently of ciFixAttempt, so a long-lived PR needing several trivial rebases can't exhaust the budget meant for real bug-fixing. */
67
+ conflictAttempt: number;
50
68
  phase: RunPhase;
51
69
  /** ISO 8601 timestamp of when this run was first created. Absent on state files written before this field existed. */
52
70
  startedAt?: string;
@@ -55,6 +73,10 @@ export interface RunState {
55
73
  /** Chronological log of phase transitions, escalations, and errors. Absent on state files written before this field existed. */
56
74
  history?: RunHistoryEntry[];
57
75
  }
76
+ /** RunState with mrIid narrowed to present — the shape `pipeline-worker resume` operates on, once an MR/PR is known to exist. */
77
+ export type ResumableRunState = RunState & {
78
+ mrIid: number;
79
+ };
58
80
  export type RiskLevel = 'low' | 'medium' | 'high';
59
81
  export type ChangeType = 'feature' | 'bugfix' | 'chore';
60
82
  export interface FileChangeSummary {
@@ -29,7 +29,8 @@ function formatSessionRow(session) {
29
29
  const { state } = session;
30
30
  const branch = formatBranchColumn(state.branch);
31
31
  const mr = formatMrColumn(state.mrIid);
32
- return `${branch} ${formatPhase(state.phase)} ${String(state.attempt).padEnd(8)} ${mr.padEnd(7)} ${formatTimestamp(state.updatedAt)}`;
32
+ const attempts = `${String(state.ciFixAttempt).padEnd(6)} ${String(state.conflictAttempt).padEnd(8)}`;
33
+ return `${branch} ${formatPhase(state.phase)} ${attempts} ${mr.padEnd(7)} ${formatTimestamp(state.updatedAt)}`;
33
34
  }
34
35
  /** `pipeline-worker sessions` with no --branch: one line per persisted run, most recently updated first. */
35
36
  export function printSessionList(sessions) {
@@ -37,7 +38,7 @@ export function printSessionList(sessions) {
37
38
  console.log('pipeline-worker: no sessions found in this repo (.pipeline-worker/state/ is empty).');
38
39
  return;
39
40
  }
40
- console.log(styleText('bold', `${'BRANCH'.padEnd(40)} ${'PHASE'.padEnd(9)} ATTEMPT MR/PR UPDATED`));
41
+ console.log(styleText('bold', `${'BRANCH'.padEnd(40)} ${'PHASE'.padEnd(9)} CI-FIX CONFLICT MR/PR UPDATED`));
41
42
  for (const session of sessions) {
42
43
  console.log(formatSessionRow(session));
43
44
  }
@@ -62,7 +63,7 @@ export function printSessionDetail(session) {
62
63
  console.log(styleText('bold', `Session: ${state.branch}`));
63
64
  console.log(styleText('dim', ` target: ${state.targetBranch}`));
64
65
  console.log(styleText('dim', ` worktree: ${state.worktreePath}`));
65
- console.log(styleText('dim', ` phase: ${state.phase} attempt: ${state.attempt}${mrPart}${pipelinePart}`));
66
+ console.log(styleText('dim', ` phase: ${state.phase} ci-fix: ${state.ciFixAttempt} conflict: ${state.conflictAttempt}${mrPart}${pipelinePart}`));
66
67
  console.log(styleText('dim', ` started: ${formatTimestamp(state.startedAt)} updated: ${formatTimestamp(state.updatedAt)}`));
67
68
  const history = state.history ?? [];
68
69
  if (history.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/ui/sessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/ui/sessions.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /** Prints a one-time banner summarizing this run's configuration before any workflow stage starts. */
2
- import type { PipelineWorkerConfig } from '../types.js';
2
+ import type { PipelineWorkerConfig } from "../types.js";
3
3
  export declare function repositoryUrl(config: PipelineWorkerConfig): string;
4
4
  export declare function agentDescription(config: PipelineWorkerConfig): string;
5
5
  export declare function printWelcome(config: PipelineWorkerConfig, repoRoot: string): Promise<void>;
@@ -1,35 +1,44 @@
1
1
  /** Prints a one-time banner summarizing this run's configuration before any workflow stage starts. */
2
- import { styleText } from 'node:util';
3
- import { getGitUser } from '../git/commit.js';
2
+ import { styleText } from "node:util";
3
+ import { getGitUser } from "../git/commit.js";
4
4
  const RULE_WIDTH = 60;
5
5
  export function repositoryUrl(config) {
6
- if (config.forge === 'github') {
7
- return config.github.repo ? `https://github.com/${config.github.repo}` : '(not configured)';
6
+ if (config.forge === "github") {
7
+ return config.github.repo
8
+ ? `https://github.com/${config.github.repo}`
9
+ : "(not configured)";
8
10
  }
9
- return config.gitlab.host ? `${config.gitlab.host} (project ${config.gitlab.projectId})` : '(not configured)';
11
+ return config.gitlab.host
12
+ ? `${config.gitlab.host} (project ${config.gitlab.projectId})`
13
+ : "(not configured)";
10
14
  }
11
15
  export function agentDescription(config) {
12
16
  // claude and pi support per-invocation model selection; copilot does not.
13
- if (config.agent === 'claude' || config.agent === 'pi') {
17
+ if (config.agent === "claude" || config.agent === "pi") {
14
18
  return `${config.agent} (${config.intentModel} for intent capture, default model for CI fixes)`;
15
19
  }
16
- return 'copilot';
20
+ return "copilot";
17
21
  }
18
22
  export async function printWelcome(config, repoRoot) {
19
23
  const user = await getGitUser(repoRoot);
20
24
  const rows = [
21
- ['Agent', agentDescription(config)],
22
- ['Forge', config.forge],
23
- ['Repository', repositoryUrl(config)],
24
- ['Git user', user.name && user.email ? `${user.name} <${user.email}>` : '(not configured)'],
25
+ ["Agent", agentDescription(config)],
26
+ ["Forge", config.forge],
27
+ ["Repository", repositoryUrl(config)],
28
+ [
29
+ "Git user",
30
+ user.name && user.email
31
+ ? `${user.name} <${user.email}>`
32
+ : "(not configured)",
33
+ ],
25
34
  ];
26
35
  const labelWidth = Math.max(...rows.map(([label]) => label.length));
27
- const rule = styleText('cyan', ''.repeat(RULE_WIDTH));
36
+ const rule = styleText("cyan", "".repeat(RULE_WIDTH));
28
37
  console.log(rule);
29
- console.log(styleText(['bold', 'cyan'], ' 🚀 pipeline-worker'));
38
+ console.log(styleText(["bold", "cyan"], " 🚀 pipeline-worker - By Mohan Talkad:"));
30
39
  console.log(rule);
31
40
  for (const [label, value] of rows) {
32
- console.log(` ${styleText('cyan', label.padEnd(labelWidth))} ${value}`);
41
+ console.log(` ${styleText("cyan", label.padEnd(labelWidth))} ${value}`);
33
42
  }
34
43
  console.log(rule);
35
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/ui/welcome.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAEtG,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,MAAM,UAAU,aAAa,CAAC,MAA4B;IACxD,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC9F,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC;AAChH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA4B;IAC3D,0EAA0E;IAC1E,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,WAAW,kDAAkD,CAAC;IAClG,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAA4B,EAAE,QAAgB;IAC/E,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,IAAI,GAA4B;QACpC,CAAC,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;QACvB,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC;KAC5F,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/ui/welcome.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAEtG,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,MAAM,UAAU,aAAa,CAAC,MAA4B;IACxD,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI;YACvB,CAAC,CAAC,sBAAsB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YAC5C,CAAC,CAAC,kBAAkB,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI;QACvB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG;QAC9D,CAAC,CAAC,kBAAkB,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA4B;IAC3D,0EAA0E;IAC1E,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,WAAW,kDAAkD,CAAC;IAClG,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAA4B,EAC5B,QAAgB;IAEhB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,IAAI,GAA4B;QACpC,CAAC,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;QACvB,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC;YACE,UAAU;YACV,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK;gBACrB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,GAAG;gBAChC,CAAC,CAAC,kBAAkB;SACvB;KACF,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,CACT,SAAS,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,yCAAyC,CAAC,CACvE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `pipeline-worker resume --branch <name>`'s branch-adoption path: handles a
3
+ * branch pipeline-worker has no recorded state for at all (typically: a user
4
+ * committed and pushed it by hand, never running `pipeline-worker run` on
5
+ * it). Checks out the branch, checks the forge for an already-open PR/MR, and:
6
+ *
7
+ * - No PR/MR yet: runs it like a fresh `pipeline-worker run` from this point
8
+ * on — checks, capture intent, open the MR/PR — against `targetOverride` or
9
+ * the auto-detected remote default branch.
10
+ * - PR/MR already exists: re-captures intent from the branch's actual diff
11
+ * and overwrites the PR/MR description with it, using the MR/PR's own
12
+ * target branch (no guessing needed).
13
+ *
14
+ * Either way, returns a ResumableRunState so cli.ts's `resume` command can
15
+ * hand off to the same watchPipeline() tail it already runs for a crash-
16
+ * recovered run.
17
+ */
18
+ import type { ForgeClient } from '../forge/types.js';
19
+ import type { AgentAdapter } from '../agent/types.js';
20
+ import type { PipelineWorkerConfig, ResumableRunState } from '../types.js';
21
+ export declare function adoptBranch(repoRoot: string, config: PipelineWorkerConfig, forge: ForgeClient, agent: AgentAdapter, branch: string, targetOverride: string | undefined): Promise<ResumableRunState>;
@@ -0,0 +1,90 @@
1
+ /**
2
+ * `pipeline-worker resume --branch <name>`'s branch-adoption path: handles a
3
+ * branch pipeline-worker has no recorded state for at all (typically: a user
4
+ * committed and pushed it by hand, never running `pipeline-worker run` on
5
+ * it). Checks out the branch, checks the forge for an already-open PR/MR, and:
6
+ *
7
+ * - No PR/MR yet: runs it like a fresh `pipeline-worker run` from this point
8
+ * on — checks, capture intent, open the MR/PR — against `targetOverride` or
9
+ * the auto-detected remote default branch.
10
+ * - PR/MR already exists: re-captures intent from the branch's actual diff
11
+ * and overwrites the PR/MR description with it, using the MR/PR's own
12
+ * target branch (no guessing needed).
13
+ *
14
+ * Either way, returns a ResumableRunState so cli.ts's `resume` command can
15
+ * hand off to the same watchPipeline() tail it already runs for a crash-
16
+ * recovered run.
17
+ */
18
+ import { execFile } from 'node:child_process';
19
+ import { promisify } from 'node:util';
20
+ import { checkoutExistingBranch } from '../git/worktree.js';
21
+ import { commit, hasChanges, mergeBase, stageAll } from '../git/commit.js';
22
+ import { changedFilesSinceRef } from '../git/diff.js';
23
+ import { detectDefaultBranch } from '../git/remote.js';
24
+ import { recordEvent } from '../state/runState.js';
25
+ import { captureIntent } from './captureIntent.js';
26
+ import { runAndReportChecks, maybeUpdateChangelog } from './orchestrate.js';
27
+ import { openMergeRequest, buildDescription } from './openMergeRequest.js';
28
+ import { runStep, note, step } from '../ui/steps.js';
29
+ const execFileAsync = promisify(execFile);
30
+ async function fetchBranch(worktreePath, branch) {
31
+ await execFileAsync('git', ['fetch', 'origin', branch], { cwd: worktreePath });
32
+ }
33
+ /** The list of files this branch changed relative to `targetBranch`, and the fixed commit that comparison is pinned to (see git/commit.ts's mergeBase). */
34
+ async function diffSinceTarget(worktreePath, targetBranch) {
35
+ await fetchBranch(worktreePath, targetBranch);
36
+ const baseRef = await mergeBase(worktreePath, `origin/${targetBranch}`);
37
+ const files = await changedFilesSinceRef(worktreePath, baseRef);
38
+ return { files, baseRef };
39
+ }
40
+ /** An MR/PR already exists for this branch: refresh its description from a fresh intent capture, using the MR's own target branch. */
41
+ async function adoptWithExistingMr(agent, config, forge, worktreePath, state, repoRoot, existingMr, targetOverride) {
42
+ if (targetOverride) {
43
+ note(`--target ${targetOverride} ignored — MR/PR ${existingMr.webUrl} already targets ${existingMr.targetBranch}`);
44
+ }
45
+ state.targetBranch = existingMr.targetBranch;
46
+ const { files, baseRef } = await runStep('A.2', '🔍', "Diffing the branch's changes", `comparing against origin/${existingMr.targetBranch}`, () => diffSinceTarget(worktreePath, existingMr.targetBranch));
47
+ const intent = await runStep('5', '🧠', 'Understanding the branch\'s changes', `ask ${config.agent} to infer a summary, risk, and file-by-file breakdown`, () => captureIntent(agent, files, worktreePath, config.intentModel, baseRef));
48
+ note(`${config.agent} says: ${intent.summary}`);
49
+ await runStep('11', '📝', 'Overwriting merge request description', `MR/PR ${existingMr.webUrl}`, () => forge.updateMrDescription(existingMr.iid, buildDescription(intent, config.agent, [])));
50
+ state.mrIid = existingMr.iid;
51
+ state.phase = 'mr';
52
+ recordEvent(repoRoot, state, `Overwrote description for existing MR/PR ${existingMr.webUrl}`);
53
+ return state;
54
+ }
55
+ /** No MR/PR exists yet for this branch: run it like a fresh `pipeline-worker run` from checks onward. */
56
+ async function adoptWithoutMr(agent, config, forge, worktreePath, state, repoRoot, branch, targetOverride) {
57
+ const targetBranch = targetOverride ?? (await detectDefaultBranch(repoRoot));
58
+ state.targetBranch = targetBranch;
59
+ recordEvent(repoRoot, state, `No existing MR/PR found; targeting ${targetBranch}`);
60
+ const { files, baseRef } = await runStep('A.2', '🔍', "Diffing the branch's changes", `comparing against origin/${targetBranch}`, () => diffSinceTarget(worktreePath, targetBranch));
61
+ const checks = await runAndReportChecks(config, worktreePath, state, repoRoot);
62
+ if (!checks) {
63
+ throw new Error(`pipeline-worker: local checks failed for branch ${branch} — aborting before opening a merge request.`);
64
+ }
65
+ const intent = await runStep('5', '🧠', 'Understanding the branch\'s changes', `ask ${config.agent} to infer a summary, risk, and file-by-file breakdown`, () => captureIntent(agent, files, worktreePath, config.intentModel, baseRef));
66
+ note(`${config.agent} says: ${intent.summary}`);
67
+ await maybeUpdateChangelog(config, worktreePath, intent);
68
+ if (await hasChanges(worktreePath)) {
69
+ await stageAll(worktreePath);
70
+ await commit(worktreePath, 'chore: update changelog');
71
+ }
72
+ const mr = await openMergeRequest(forge, worktreePath, branch, targetBranch, intent, config.agent, checks, config.autoMergeOnGreen, config.mergeMethod);
73
+ state.mrIid = mr.iid;
74
+ state.phase = 'mr';
75
+ recordEvent(repoRoot, state, `Opened MR/PR ${mr.webUrl} for adopted branch ${branch}`);
76
+ return state;
77
+ }
78
+ export async function adoptBranch(repoRoot, config, forge, agent, branch, targetOverride) {
79
+ step('🌱', 'Adopting external branch', `${branch} has no pipeline-worker run recorded for it — checking it out`);
80
+ const worktreePath = await runStep('A.1', '🌳', 'Checking out branch', `fetch + checkout origin/${branch}`, () => checkoutExistingBranch(repoRoot, branch));
81
+ const state = { branch, targetBranch: '', worktreePath, ciFixAttempt: 0, conflictAttempt: 0, phase: 'intent' };
82
+ recordEvent(repoRoot, state, `Adopted external branch ${branch} into worktree ${worktreePath}`);
83
+ const existingMr = await forge.findExistingMr(branch);
84
+ if (existingMr) {
85
+ note(`found existing MR/PR ${existingMr.webUrl}`);
86
+ return adoptWithExistingMr(agent, config, forge, worktreePath, state, repoRoot, existingMr, targetOverride);
87
+ }
88
+ return adoptWithoutMr(agent, config, forge, worktreePath, state, repoRoot, branch, targetOverride);
89
+ }
90
+ //# sourceMappingURL=adoptBranch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adoptBranch.js","sourceRoot":"","sources":["../../src/workflow/adoptBranch.ts"],"names":[],"mappings":"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"}
@@ -18,5 +18,11 @@ import type { CapturedIntent } from '../types.js';
18
18
  * Adapters with no per-invocation model selection (e.g. copilot) ignore it.
19
19
  * The CI-fix path (watchPipeline.ts) deliberately never sets a model override
20
20
  * — fixing a real failing build needs the stronger default model.
21
+ *
22
+ * `baseRef` defaults to `HEAD`, matching a normal run's uncommitted diff. The
23
+ * `resume` branch-adoption path (adoptBranch.ts) passes a fixed merge-base
24
+ * commit instead (see git/commit.ts's mergeBase), since there the change set
25
+ * is already committed on the branch — `git diff HEAD` there would show
26
+ * nothing.
21
27
  */
22
- export declare function captureIntent(agent: AgentAdapter, files: string[], worktreePath: string, model: string): Promise<CapturedIntent>;
28
+ export declare function captureIntent(agent: AgentAdapter, files: string[], worktreePath: string, model: string, baseRef?: string): Promise<CapturedIntent>;
@@ -105,11 +105,17 @@ const IntentShape = z.object({
105
105
  * Adapters with no per-invocation model selection (e.g. copilot) ignore it.
106
106
  * The CI-fix path (watchPipeline.ts) deliberately never sets a model override
107
107
  * — fixing a real failing build needs the stronger default model.
108
+ *
109
+ * `baseRef` defaults to `HEAD`, matching a normal run's uncommitted diff. The
110
+ * `resume` branch-adoption path (adoptBranch.ts) passes a fixed merge-base
111
+ * commit instead (see git/commit.ts's mergeBase), since there the change set
112
+ * is already committed on the branch — `git diff HEAD` there would show
113
+ * nothing.
108
114
  */
109
- export async function captureIntent(agent, files, worktreePath, model) {
115
+ export async function captureIntent(agent, files, worktreePath, model, baseRef = 'HEAD') {
110
116
  const prompt = 'The following files changed in this git worktree (which is your current working directory):\n' +
111
117
  files.map((file) => `- ${file}`).join('\n') +
112
- '\n\nUse your tools to inspect what changed: `git diff HEAD -- <file>` (or `git diff HEAD` for everything at ' +
118
+ `\n\nUse your tools to inspect what changed: \`git diff ${baseRef} -- <file>\` (or \`git diff ${baseRef}\` for everything at ` +
113
119
  "once) for a file that already existed, or Read it directly if it's a new file git diff won't show. " +
114
120
  'Then determine the intent behind the change as a whole. ' +
115
121
  'Respond with a JSON object matching the given schema: why this change exists, a short summary of what changed, ' +
@@ -1 +1 @@
1
- {"version":3,"file":"captureIntent.js","sourceRoot":"","sources":["../../src/workflow/captureIntent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"captureIntent.js","sourceRoot":"","sources":["../../src/workflow/captureIntent.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /** Stages 10-11: push the branch and open (or reuse) an MR/PR describing the workflow that produced it. */
2
2
  import type { ForgeClient } from '../forge/types.js';
3
- import type { CapturedIntent, CheckResult, MergeRequest } from '../types.js';
3
+ import type { CapturedIntent, CheckResult, MergeMethod, MergeRequest } from '../types.js';
4
4
  /** Renders the MR/PR description as: Intent, Summary, per-file changes, Risk, Checks, Test Scenarios. */
5
5
  export declare function buildDescription(intent: CapturedIntent, agentName: string, checks: CheckResult[]): string;
6
- export declare function openMergeRequest(forge: ForgeClient, worktreePath: string, branch: string, targetBranch: string, intent: CapturedIntent, agentName: string, checks: CheckResult[]): Promise<MergeRequest>;
6
+ export declare function openMergeRequest(forge: ForgeClient, worktreePath: string, branch: string, targetBranch: string, intent: CapturedIntent, agentName: string, checks: CheckResult[], autoMergeOnGreen?: boolean, mergeMethod?: MergeMethod): Promise<MergeRequest>;