pipeline-worker 0.1.21 → 0.1.23

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 (57) hide show
  1. package/dist/agent/claude.js +87 -65
  2. package/dist/agent/claude.js.map +1 -1
  3. package/dist/agent/copilot.js +19 -14
  4. package/dist/agent/copilot.js.map +1 -1
  5. package/dist/cli.js +45 -39
  6. package/dist/cli.js.map +1 -1
  7. package/dist/config/detectChecks.js +30 -15
  8. package/dist/config/detectChecks.js.map +1 -1
  9. package/dist/config/loader.js +30 -15
  10. package/dist/config/loader.js.map +1 -1
  11. package/dist/forge/github.d.ts +0 -7
  12. package/dist/forge/github.js +13 -19
  13. package/dist/forge/github.js.map +1 -1
  14. package/dist/forge/gitlab.d.ts +0 -6
  15. package/dist/forge/gitlab.js +8 -17
  16. package/dist/forge/gitlab.js.map +1 -1
  17. package/dist/forge/shared.d.ts +9 -0
  18. package/dist/forge/shared.js +27 -0
  19. package/dist/forge/shared.js.map +1 -0
  20. package/dist/git/commit.d.ts +0 -1
  21. package/dist/git/commit.js +0 -4
  22. package/dist/git/commit.js.map +1 -1
  23. package/dist/git/resolveProjectPath.d.ts +0 -6
  24. package/dist/git/resolveProjectPath.js +1 -1
  25. package/dist/git/resolveProjectPath.js.map +1 -1
  26. package/dist/git/worktree.d.ts +0 -7
  27. package/dist/git/worktree.js +42 -25
  28. package/dist/git/worktree.js.map +1 -1
  29. package/dist/mcp/server.js +8 -6
  30. package/dist/mcp/server.js.map +1 -1
  31. package/dist/process/signalCleanup.d.ts +15 -0
  32. package/dist/process/signalCleanup.js +19 -0
  33. package/dist/process/signalCleanup.js.map +1 -0
  34. package/dist/state/lock.d.ts +0 -6
  35. package/dist/state/lock.js +36 -21
  36. package/dist/state/lock.js.map +1 -1
  37. package/dist/state/runState.js +1 -0
  38. package/dist/state/runState.js.map +1 -1
  39. package/dist/toon/envelope.js +30 -17
  40. package/dist/toon/envelope.js.map +1 -1
  41. package/dist/ui/sessions.js +26 -8
  42. package/dist/ui/sessions.js.map +1 -1
  43. package/dist/ui/steps.d.ts +8 -11
  44. package/dist/ui/steps.js +24 -2
  45. package/dist/ui/steps.js.map +1 -1
  46. package/dist/version/autoUpdate.js +23 -15
  47. package/dist/version/autoUpdate.js.map +1 -1
  48. package/dist/workflow/orchestrate.js +130 -96
  49. package/dist/workflow/orchestrate.js.map +1 -1
  50. package/dist/workflow/runChecks.js +2 -0
  51. package/dist/workflow/runChecks.js.map +1 -1
  52. package/dist/workflow/updateChangelog.js +43 -28
  53. package/dist/workflow/updateChangelog.js.map +1 -1
  54. package/dist/workflow/watchPipeline.d.ts +0 -19
  55. package/dist/workflow/watchPipeline.js +115 -87
  56. package/dist/workflow/watchPipeline.js.map +1 -1
  57. package/package.json +1 -1
@@ -28,36 +28,37 @@ function removeIfPresent(path) {
28
28
  // Already gone (e.g. a concurrent process reclaimed it first) — fine.
29
29
  }
30
30
  }
31
+ function readLockHolderPid(path) {
32
+ const heldPid = Number.parseInt(readFileSync(path, 'utf-8').trim(), 10);
33
+ return Number.isInteger(heldPid) ? heldPid : undefined;
34
+ }
31
35
  /**
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.
36
+ * Throws if the lock is held by a still-alive process; otherwise removes a
37
+ * stale lock left by one that's no longer running (crash, kill -9). This is
38
+ * only a fast path for a clear "who's holding it" error message — it's
39
+ * inherently racy against another process doing the same check concurrently,
40
+ * so writeLockFileExclusive below is the actual mutual-exclusion guard.
42
41
  */
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);
42
+ function assertLockNotHeld(path) {
43
+ if (!existsSync(path))
44
+ return;
45
+ const heldPid = readLockHolderPid(path);
46
+ if (heldPid !== undefined && isProcessAlive(heldPid)) {
47
+ throw new Error(`pipeline-worker: another run (pid ${heldPid}) is already in progress in this repo. ` +
48
+ 'Wait for it to finish, or if it crashed without cleaning up, remove .pipeline-worker/run.lock.');
54
49
  }
50
+ removeIfPresent(path);
51
+ }
52
+ /** The 'wx' flag fails with EEXIST if the path already exists — this, not assertLockNotHeld's check above, is what actually closes the race between two concurrent acquirers. */
53
+ function writeLockFileExclusive(path) {
55
54
  try {
56
55
  writeFileSync(path, String(process.pid), { flag: 'wx' });
57
56
  }
58
57
  catch {
59
58
  throw new Error('pipeline-worker: another run just started in this repo — try again.');
60
59
  }
60
+ }
61
+ function makeIdempotentReleaser(path) {
61
62
  let released = false;
62
63
  return () => {
63
64
  if (released)
@@ -66,4 +67,18 @@ export function acquireLock(repoRoot) {
66
67
  removeIfPresent(path);
67
68
  };
68
69
  }
70
+ /**
71
+ * Acquires the lock, throwing if another live process already holds it. A
72
+ * lock left behind by a process that's no longer running (crash, kill -9) is
73
+ * treated as stale and reclaimed. Returns a release function; safe to call
74
+ * more than once.
75
+ */
76
+ export function acquireLock(repoRoot) {
77
+ const dir = join(repoRoot, '.pipeline-worker');
78
+ mkdirSync(dir, { recursive: true });
79
+ const path = lockPath(repoRoot);
80
+ assertLockNotHeld(path);
81
+ writeLockFileExclusive(path);
82
+ return makeIdempotentReleaser(path);
83
+ }
69
84
  //# sourceMappingURL=lock.js.map
@@ -1 +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"}
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,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,OAAO,KAAK,SAAS,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,qCAAqC,OAAO,yCAAyC;YACnF,gGAAgG,CACnG,CAAC;IACJ,CAAC;IACD,eAAe,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,iLAAiL;AACjL,SAAS,sBAAsB,CAAC,IAAY;IAC1C,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;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,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;AAED;;;;;GAKG;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,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE7B,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
@@ -68,6 +68,7 @@ export function recordEvent(repoRoot, state, message, level = 'info') {
68
68
  * than failing the whole listing — `pipeline-worker sessions` should show
69
69
  * what it can even if one run's file is damaged.
70
70
  */
71
+ // fallow-ignore-next-line complexity
71
72
  export function listRunStates(repoRoot) {
72
73
  const dir = stateDir(repoRoot);
73
74
  if (!existsSync(dir))
@@ -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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"}
@@ -9,25 +9,38 @@
9
9
  */
10
10
  import { encode } from '@toon-format/toon';
11
11
  const DEFAULT_MAX_CHARS = 8000;
12
- export function buildEnvelope(env, opts = {}) {
13
- const maxChars = opts.maxChars ?? DEFAULT_MAX_CHARS;
14
- const body = env.data !== undefined ? encode(env.data) : '';
15
- const truncated = !opts.full && body.length > maxChars;
16
- const lines = [`status: ${env.status}`];
17
- if (env.counts) {
18
- for (const [key, value] of Object.entries(env.counts)) {
19
- lines.push(`${key}: ${value}`);
20
- }
21
- }
22
- if (body) {
23
- lines.push(`chars: ${body.length}`, '---', truncated ? body.slice(0, maxChars) : body, '---');
24
- }
12
+ function encodeBody(data, full, maxChars) {
13
+ const body = data !== undefined ? encode(data) : '';
14
+ const truncated = !full && body.length > maxChars;
15
+ return { body, truncated };
16
+ }
17
+ function renderCountsLines(counts) {
18
+ if (!counts)
19
+ return [];
20
+ return Object.entries(counts).map(([key, value]) => `${key}: ${value}`);
21
+ }
22
+ function renderBodyBlock(body, truncated, maxChars) {
23
+ if (!body)
24
+ return [];
25
+ return [`chars: ${body.length}`, '---', truncated ? body.slice(0, maxChars) : body, '---'];
26
+ }
27
+ function renderTrailer(truncated, maxChars, bodyLength, next) {
25
28
  if (truncated) {
26
- lines.push(`note: truncated to ${maxChars} of ${body.length} chars`, 'next: call again with full=true to see the rest');
27
- }
28
- else if (env.next) {
29
- lines.push(`next: ${env.next}`);
29
+ return [`note: truncated to ${maxChars} of ${bodyLength} chars`, 'next: call again with full=true to see the rest'];
30
30
  }
31
+ if (next)
32
+ return [`next: ${next}`];
33
+ return [];
34
+ }
35
+ export function buildEnvelope(env, opts = {}) {
36
+ const maxChars = opts.maxChars ?? DEFAULT_MAX_CHARS;
37
+ const { body, truncated } = encodeBody(env.data, opts.full, maxChars);
38
+ const lines = [
39
+ `status: ${env.status}`,
40
+ ...renderCountsLines(env.counts),
41
+ ...renderBodyBlock(body, truncated, maxChars),
42
+ ...renderTrailer(truncated, maxChars, body.length, env.next),
43
+ ];
31
44
  return lines.join('\n');
32
45
  }
33
46
  export function errorEnvelope(kind, message) {
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/toon/envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAc/B,MAAM,UAAU,aAAa,CAAC,GAAa,EAAE,OAAwB,EAAE;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACpD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IAEvD,MAAM,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAExC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChG,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,sBAAsB,QAAQ,OAAO,IAAI,CAAC,MAAM,QAAQ,EAAE,iDAAiD,CAAC,CAAC;IAC1H,CAAC;SAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe;IACzD,OAAO,wBAAwB,IAAI,cAAc,OAAO,EAAE,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/toon/envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAc/B,SAAS,UAAU,CAAC,IAAa,EAAE,IAAyB,EAAE,QAAgB;IAC5E,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IAClD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA0C;IACnE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,SAAkB,EAAE,QAAgB;IACzE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,aAAa,CAAC,SAAkB,EAAE,QAAgB,EAAE,UAAkB,EAAE,IAAwB;IACvG,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,sBAAsB,QAAQ,OAAO,UAAU,QAAQ,EAAE,iDAAiD,CAAC,CAAC;IACtH,CAAC;IACD,IAAI,IAAI;QAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAa,EAAE,OAAwB,EAAE;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACpD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEtE,MAAM,KAAK,GAAG;QACZ,WAAW,GAAG,CAAC,MAAM,EAAE;QACvB,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;QAChC,GAAG,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC;QAC7C,GAAG,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;KAC7D,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe;IACzD,OAAO,wBAAwB,IAAI,cAAc,OAAO,EAAE,CAAC;AAC7D,CAAC"}
@@ -19,6 +19,18 @@ function formatPhase(phase) {
19
19
  function formatTimestamp(iso) {
20
20
  return iso ? new Date(iso).toLocaleString() : 'unknown';
21
21
  }
22
+ function formatBranchColumn(branch) {
23
+ return branch.length > 40 ? `${branch.slice(0, 37)}...` : branch.padEnd(40);
24
+ }
25
+ function formatMrColumn(mrIid) {
26
+ return mrIid !== undefined ? `#${mrIid}` : '-';
27
+ }
28
+ function formatSessionRow(session) {
29
+ const { state } = session;
30
+ const branch = formatBranchColumn(state.branch);
31
+ const mr = formatMrColumn(state.mrIid);
32
+ return `${branch} ${formatPhase(state.phase)} ${String(state.attempt).padEnd(8)} ${mr.padEnd(7)} ${formatTimestamp(state.updatedAt)}`;
33
+ }
22
34
  /** `pipeline-worker sessions` with no --branch: one line per persisted run, most recently updated first. */
23
35
  export function printSessionList(sessions) {
24
36
  if (sessions.length === 0) {
@@ -26,20 +38,27 @@ export function printSessionList(sessions) {
26
38
  return;
27
39
  }
28
40
  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)}`);
41
+ for (const session of sessions) {
42
+ console.log(formatSessionRow(session));
33
43
  }
34
44
  console.log();
35
45
  console.log(styleText('dim', "Run `pipeline-worker sessions --branch <name>` for a run's full timeline."));
36
46
  }
37
47
  const LEVEL_ICON = { info: 'ℹ️ ', error: '❌' };
48
+ function formatOptionalMetaParts(state) {
49
+ return {
50
+ mrPart: state.mrIid !== undefined ? ` mr/pr: #${state.mrIid}` : '',
51
+ pipelinePart: state.pipelineId !== undefined ? ` pipeline: ${state.pipelineId}` : '',
52
+ };
53
+ }
54
+ function formatHistoryEntry(entry) {
55
+ const message = entry.level === 'error' ? styleText('red', entry.message) : entry.message;
56
+ return ` ${LEVEL_ICON[entry.level]} ${styleText('dim', formatTimestamp(entry.at))} ${styleText('dim', `[${entry.phase}]`)} ${message}`;
57
+ }
38
58
  /** `pipeline-worker sessions --branch <name>`: one run's metadata plus its full step-by-step history. */
39
59
  export function printSessionDetail(session) {
40
60
  const { state } = session;
41
- const mrPart = state.mrIid !== undefined ? ` mr/pr: #${state.mrIid}` : '';
42
- const pipelinePart = state.pipelineId !== undefined ? ` pipeline: ${state.pipelineId}` : '';
61
+ const { mrPart, pipelinePart } = formatOptionalMetaParts(state);
43
62
  console.log(styleText('bold', `Session: ${state.branch}`));
44
63
  console.log(styleText('dim', ` target: ${state.targetBranch}`));
45
64
  console.log(styleText('dim', ` worktree: ${state.worktreePath}`));
@@ -54,8 +73,7 @@ export function printSessionDetail(session) {
54
73
  console.log();
55
74
  console.log(styleText('bold', 'Timeline:'));
56
75
  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}`);
76
+ console.log(formatHistoryEntry(entry));
59
77
  }
60
78
  }
61
79
  //# sourceMappingURL=sessions.js.map
@@ -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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"}
@@ -8,18 +8,13 @@
8
8
  import type { RiskLevel } from '../types.js';
9
9
  import type { AgentInvokeResult } from '../agent/types.js';
10
10
  /**
11
- * The workflow always runs stages 1-13 in order. Some stages are opt-in or
12
- * conditional on runtime state and are announced via skipStep() with a
13
- * reason instead of running when their condition isn't met (stage 8:
14
- * config.updateChangelog; stage 11: reused when an MR/PR already exists;
15
- * stage 13: config.cleanupOnSuccess) so the numbering stays sequential and
16
- * a skipped stage is still visible instead of silently vanishing.
17
- *
18
- * Stage 12 (watching the pipeline, and fixing/escalating on failure) loops
19
- * and branches internally, so its sub-steps are numbered 12.1-12.7 (see
20
- * watchPipeline.ts) rather than each claiming the bare "12".
11
+ * Keeps a spinner redraw to a single physical row. Without this, a line
12
+ * longer than the terminal's column count auto-wraps, and the `\r\x1b[K`
13
+ * redraw in runStep() below only rewinds/clears the row the cursor is on —
14
+ * not the wrapped continuation from the previous frame — so each tick
15
+ * appends a new line instead of animating in place.
21
16
  */
22
- export declare const TOTAL_STAGES = 13;
17
+ export declare function truncateToWidth(text: string, width: number): string;
23
18
  /** A one-off status line with no associated work to wait on (e.g. a final summary). */
24
19
  export declare function step(icon: string, title: string, detail?: string): void;
25
20
  /**
@@ -53,6 +48,8 @@ export declare function skipStep(stage: number | string, icon: string, title: st
53
48
  * didn't return a sessionId, which keeps this safe to call unconditionally.
54
49
  */
55
50
  export declare function noteSession(result: AgentInvokeResult, worktreePath: string): void;
51
+ /** Prints an agent's response (truncated) followed by its resumable session info — the shared tail of every conflict/CI-fix agent invocation. */
52
+ export declare function reportAgentInvocation(result: AgentInvokeResult, worktreePath: string): void;
56
53
  /**
57
54
  * Runs one numbered workflow stage with a colored, iconed title, then a live
58
55
  * status line beneath it while `task` runs: a spinner plus a counting-up
package/dist/ui/steps.js CHANGED
@@ -19,12 +19,26 @@ const RISK_COLOR = { low: 'green', medium: 'yellow', high: 'red' };
19
19
  * and branches internally, so its sub-steps are numbered 12.1-12.7 (see
20
20
  * watchPipeline.ts) rather than each claiming the bare "12".
21
21
  */
22
- export const TOTAL_STAGES = 13;
22
+ const TOTAL_STAGES = 13;
23
23
  const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
24
24
  const SPINNER_INTERVAL_MS = 80;
25
25
  function formatElapsed(ms) {
26
26
  return `${(ms / 1000).toFixed(1)}s`;
27
27
  }
28
+ /**
29
+ * Keeps a spinner redraw to a single physical row. Without this, a line
30
+ * longer than the terminal's column count auto-wraps, and the `\r\x1b[K`
31
+ * redraw in runStep() below only rewinds/clears the row the cursor is on —
32
+ * not the wrapped continuation from the previous frame — so each tick
33
+ * appends a new line instead of animating in place.
34
+ */
35
+ export function truncateToWidth(text, width) {
36
+ if (width <= 0 || text.length <= width)
37
+ return text;
38
+ if (width === 1)
39
+ return text.slice(0, 1);
40
+ return `${text.slice(0, width - 1)}…`;
41
+ }
28
42
  /** stage accepts a decimal string (e.g. "12.3") for a sub-step of a numbered stage — see TOTAL_STAGES. */
29
43
  function stageHeader(stage, icon, title) {
30
44
  return styleText(['bold', 'cyan'], `[${stage}/${TOTAL_STAGES}] ${icon} ${title}`);
@@ -80,6 +94,12 @@ export function noteSession(result, worktreePath) {
80
94
  const duration = result.durationMs !== undefined ? ` — ${(result.durationMs / 1000).toFixed(1)}s` : '';
81
95
  note(`agent session: ${result.sessionId}${duration} — cd ${worktreePath} to resume it there`);
82
96
  }
97
+ /** Prints an agent's response (truncated) followed by its resumable session info — the shared tail of every conflict/CI-fix agent invocation. */
98
+ export function reportAgentInvocation(result, worktreePath) {
99
+ const text = result.text;
100
+ note(`agent: ${text.slice(0, 300).trim()}${text.length > 300 ? '…' : ''}`);
101
+ noteSession(result, worktreePath);
102
+ }
83
103
  /**
84
104
  * Runs one numbered workflow stage with a colored, iconed title, then a live
85
105
  * status line beneath it while `task` runs: a spinner plus a counting-up
@@ -98,7 +118,9 @@ export async function runStep(stage, icon, title, detail, task) {
98
118
  const start = Date.now();
99
119
  let frame = 0;
100
120
  const render = (glyph, color = 'dim') => {
101
- process.stdout.write(`\r\x1b[K${styleText(color, ` ${glyph} ${detail} (${formatElapsed(Date.now() - start)})`)}`);
121
+ const line = ` ${glyph} ${detail} (${formatElapsed(Date.now() - start)})`;
122
+ const width = process.stdout.columns ?? line.length;
123
+ process.stdout.write(`\r\x1b[K${styleText(color, truncateToWidth(line, width))}`);
102
124
  };
103
125
  render(SPINNER_FRAMES[0]);
104
126
  const timer = setInterval(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/ui/steps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/ui/steps.ts"],"names":[],"mappings":"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"}
@@ -32,35 +32,43 @@ export function fetchLatestVersion(pkgName) {
32
32
  export function installVersion(pkgName, versionOrTag) {
33
33
  return runNpm(['install', '-g', `${pkgName}@${versionOrTag}`], 'inherit').then(() => undefined);
34
34
  }
35
- /**
36
- * Checks npm for the latest published version of `pkgName` and installs it
37
- * globally if it differs from `currentVersion`. Returns the newly installed
38
- * version, or `undefined` when already current, offline, or the install
39
- * itself failed — those cases are logged to the console and swallowed
40
- * rather than thrown, since a failed update check must never stop the
41
- * workflow that's about to start.
42
- */
43
- export async function ensureLatestVersion(pkgName, currentVersion) {
44
- let latest;
35
+ async function tryFetchLatestVersion(pkgName, currentVersion) {
45
36
  try {
46
- latest = await fetchLatestVersion(pkgName);
37
+ return await fetchLatestVersion(pkgName);
47
38
  }
48
39
  catch (error) {
49
40
  const message = error instanceof Error ? error.message : String(error);
50
41
  console.error(`Warning: could not check npm for a newer ${pkgName} version (${message}). Continuing with v${currentVersion}.`);
51
42
  return undefined;
52
43
  }
53
- if (latest === currentVersion)
54
- return undefined;
55
- console.log(`pipeline-worker: v${currentVersion} installed, v${latest} available on npm — installing...`);
44
+ }
45
+ async function tryInstallVersion(pkgName, latest, currentVersion) {
56
46
  try {
57
47
  await installVersion(pkgName, latest);
48
+ return true;
58
49
  }
59
50
  catch (error) {
60
51
  const message = error instanceof Error ? error.message : String(error);
61
52
  console.error(`Warning: failed to auto-update ${pkgName} to v${latest} (${message}). Continuing with v${currentVersion}.`);
62
- return undefined;
53
+ return false;
63
54
  }
55
+ }
56
+ /**
57
+ * Checks npm for the latest published version of `pkgName` and installs it
58
+ * globally if it differs from `currentVersion`. Returns the newly installed
59
+ * version, or `undefined` when already current, offline, or the install
60
+ * itself failed — those cases are logged to the console and swallowed
61
+ * rather than thrown, since a failed update check must never stop the
62
+ * workflow that's about to start.
63
+ */
64
+ export async function ensureLatestVersion(pkgName, currentVersion) {
65
+ const latest = await tryFetchLatestVersion(pkgName, currentVersion);
66
+ if (latest === undefined || latest === currentVersion)
67
+ return undefined;
68
+ console.log(`pipeline-worker: v${currentVersion} installed, v${latest} available on npm — installing...`);
69
+ const installed = await tryInstallVersion(pkgName, latest, currentVersion);
70
+ if (!installed)
71
+ return undefined;
64
72
  console.log(`pipeline-worker: updated to v${latest} (takes effect on the next run) — continuing this run with v${currentVersion}.`);
65
73
  return latest;
66
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"autoUpdate.js","sourceRoot":"","sources":["../../src/version/autoUpdate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autoUpdate.js","sourceRoot":"","sources":["../../src/version/autoUpdate.ts"],"names":[],"mappings":"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"}