@generacy-ai/orchestrator 0.5.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/config/loader.d.ts.map +1 -1
  2. package/dist/config/loader.js +25 -0
  3. package/dist/config/loader.js.map +1 -1
  4. package/dist/config/schema.d.ts +54 -7
  5. package/dist/config/schema.d.ts.map +1 -1
  6. package/dist/index.d.ts +3 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +4 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/routes/health.d.ts.map +1 -1
  11. package/dist/routes/health.js +5 -0
  12. package/dist/routes/health.js.map +1 -1
  13. package/dist/server.d.ts.map +1 -1
  14. package/dist/server.js +130 -26
  15. package/dist/server.js.map +1 -1
  16. package/dist/services/base-advance-monitor-service.d.ts +78 -0
  17. package/dist/services/base-advance-monitor-service.d.ts.map +1 -0
  18. package/dist/services/base-advance-monitor-service.js +233 -0
  19. package/dist/services/base-advance-monitor-service.js.map +1 -0
  20. package/dist/services/boot-resume-service.d.ts +19 -0
  21. package/dist/services/boot-resume-service.d.ts.map +1 -0
  22. package/dist/services/boot-resume-service.js +87 -0
  23. package/dist/services/boot-resume-service.js.map +1 -0
  24. package/dist/services/epic-completion-monitor-service.d.ts.map +1 -1
  25. package/dist/services/epic-completion-monitor-service.js +2 -0
  26. package/dist/services/epic-completion-monitor-service.js.map +1 -1
  27. package/dist/services/in-memory-queue-adapter.d.ts +4 -0
  28. package/dist/services/in-memory-queue-adapter.d.ts.map +1 -1
  29. package/dist/services/in-memory-queue-adapter.js +30 -3
  30. package/dist/services/in-memory-queue-adapter.js.map +1 -1
  31. package/dist/services/label-monitor-service.d.ts +3 -3
  32. package/dist/services/label-monitor-service.d.ts.map +1 -1
  33. package/dist/services/label-monitor-service.js +58 -41
  34. package/dist/services/label-monitor-service.js.map +1 -1
  35. package/dist/services/label-sync-service.d.ts.map +1 -1
  36. package/dist/services/label-sync-service.js +45 -10
  37. package/dist/services/label-sync-service.js.map +1 -1
  38. package/dist/services/merge-conflict-monitor-service.d.ts +73 -0
  39. package/dist/services/merge-conflict-monitor-service.d.ts.map +1 -0
  40. package/dist/services/merge-conflict-monitor-service.js +295 -0
  41. package/dist/services/merge-conflict-monitor-service.js.map +1 -0
  42. package/dist/services/orchestrator-version.d.ts +2 -0
  43. package/dist/services/orchestrator-version.d.ts.map +1 -0
  44. package/dist/services/orchestrator-version.js +23 -0
  45. package/dist/services/orchestrator-version.js.map +1 -0
  46. package/dist/services/phase-tracker-service.d.ts +10 -0
  47. package/dist/services/phase-tracker-service.d.ts.map +1 -1
  48. package/dist/services/phase-tracker-service.js +38 -0
  49. package/dist/services/phase-tracker-service.js.map +1 -1
  50. package/dist/services/post-activation-dispatch.d.ts +18 -0
  51. package/dist/services/post-activation-dispatch.d.ts.map +1 -0
  52. package/dist/services/post-activation-dispatch.js +30 -0
  53. package/dist/services/post-activation-dispatch.js.map +1 -0
  54. package/dist/services/pr-feedback-monitor-service.d.ts +13 -4
  55. package/dist/services/pr-feedback-monitor-service.d.ts.map +1 -1
  56. package/dist/services/pr-feedback-monitor-service.js +212 -26
  57. package/dist/services/pr-feedback-monitor-service.js.map +1 -1
  58. package/dist/services/redis-queue-adapter.d.ts +4 -0
  59. package/dist/services/redis-queue-adapter.d.ts.map +1 -1
  60. package/dist/services/redis-queue-adapter.js +90 -10
  61. package/dist/services/redis-queue-adapter.js.map +1 -1
  62. package/dist/services/worker-dispatcher.d.ts +14 -2
  63. package/dist/services/worker-dispatcher.d.ts.map +1 -1
  64. package/dist/services/worker-dispatcher.js +55 -2
  65. package/dist/services/worker-dispatcher.js.map +1 -1
  66. package/dist/types/api.d.ts +3 -0
  67. package/dist/types/api.d.ts.map +1 -1
  68. package/dist/types/api.js +1 -0
  69. package/dist/types/api.js.map +1 -1
  70. package/dist/types/index.d.ts +1 -1
  71. package/dist/types/index.d.ts.map +1 -1
  72. package/dist/types/index.js.map +1 -1
  73. package/dist/types/monitor.d.ts +72 -4
  74. package/dist/types/monitor.d.ts.map +1 -1
  75. package/dist/worker/base-merge.d.ts +54 -0
  76. package/dist/worker/base-merge.d.ts.map +1 -0
  77. package/dist/worker/base-merge.js +99 -0
  78. package/dist/worker/base-merge.js.map +1 -0
  79. package/dist/worker/clarification-markers.d.ts +29 -0
  80. package/dist/worker/clarification-markers.d.ts.map +1 -0
  81. package/dist/worker/clarification-markers.js +44 -0
  82. package/dist/worker/clarification-markers.js.map +1 -0
  83. package/dist/worker/clarification-poster.d.ts.map +1 -1
  84. package/dist/worker/clarification-poster.js +266 -25
  85. package/dist/worker/clarification-poster.js.map +1 -1
  86. package/dist/worker/claude-cli-worker.d.ts +21 -2
  87. package/dist/worker/claude-cli-worker.d.ts.map +1 -1
  88. package/dist/worker/claude-cli-worker.js +149 -4
  89. package/dist/worker/claude-cli-worker.js.map +1 -1
  90. package/dist/worker/cli-spawner.d.ts +4 -0
  91. package/dist/worker/cli-spawner.d.ts.map +1 -1
  92. package/dist/worker/cli-spawner.js +51 -7
  93. package/dist/worker/cli-spawner.js.map +1 -1
  94. package/dist/worker/config.d.ts +101 -9
  95. package/dist/worker/config.d.ts.map +1 -1
  96. package/dist/worker/config.js +75 -4
  97. package/dist/worker/config.js.map +1 -1
  98. package/dist/worker/evidence-hash.d.ts +32 -0
  99. package/dist/worker/evidence-hash.d.ts.map +1 -0
  100. package/dist/worker/evidence-hash.js +139 -0
  101. package/dist/worker/evidence-hash.js.map +1 -0
  102. package/dist/worker/handler-outcome-assertion.d.ts +38 -0
  103. package/dist/worker/handler-outcome-assertion.d.ts.map +1 -0
  104. package/dist/worker/handler-outcome-assertion.js +58 -0
  105. package/dist/worker/handler-outcome-assertion.js.map +1 -0
  106. package/dist/worker/handler-outcome.d.ts +50 -0
  107. package/dist/worker/handler-outcome.d.ts.map +1 -0
  108. package/dist/worker/handler-outcome.js +2 -0
  109. package/dist/worker/handler-outcome.js.map +1 -0
  110. package/dist/worker/label-manager.d.ts +58 -2
  111. package/dist/worker/label-manager.d.ts.map +1 -1
  112. package/dist/worker/label-manager.js +225 -27
  113. package/dist/worker/label-manager.js.map +1 -1
  114. package/dist/worker/merge-conflict-handler.d.ts +141 -0
  115. package/dist/worker/merge-conflict-handler.d.ts.map +1 -0
  116. package/dist/worker/merge-conflict-handler.js +642 -0
  117. package/dist/worker/merge-conflict-handler.js.map +1 -0
  118. package/dist/worker/merge-conflict-prompt.d.ts +35 -0
  119. package/dist/worker/merge-conflict-prompt.d.ts.map +1 -0
  120. package/dist/worker/merge-conflict-prompt.js +71 -0
  121. package/dist/worker/merge-conflict-prompt.js.map +1 -0
  122. package/dist/worker/merge-conflict-remedy.d.ts +42 -0
  123. package/dist/worker/merge-conflict-remedy.d.ts.map +1 -0
  124. package/dist/worker/merge-conflict-remedy.js +28 -0
  125. package/dist/worker/merge-conflict-remedy.js.map +1 -0
  126. package/dist/worker/output-tail-synthesis.d.ts +15 -0
  127. package/dist/worker/output-tail-synthesis.d.ts.map +1 -0
  128. package/dist/worker/output-tail-synthesis.js +25 -0
  129. package/dist/worker/output-tail-synthesis.js.map +1 -0
  130. package/dist/worker/output-tail.d.ts +13 -0
  131. package/dist/worker/output-tail.d.ts.map +1 -0
  132. package/dist/worker/output-tail.js +31 -0
  133. package/dist/worker/output-tail.js.map +1 -0
  134. package/dist/worker/pause-context.d.ts +30 -0
  135. package/dist/worker/pause-context.d.ts.map +1 -0
  136. package/dist/worker/pause-context.js +98 -0
  137. package/dist/worker/pause-context.js.map +1 -0
  138. package/dist/worker/phase-loop.d.ts +66 -0
  139. package/dist/worker/phase-loop.d.ts.map +1 -1
  140. package/dist/worker/phase-loop.js +299 -31
  141. package/dist/worker/phase-loop.js.map +1 -1
  142. package/dist/worker/pr-feedback-handler.d.ts +46 -46
  143. package/dist/worker/pr-feedback-handler.d.ts.map +1 -1
  144. package/dist/worker/pr-feedback-handler.js +276 -105
  145. package/dist/worker/pr-feedback-handler.js.map +1 -1
  146. package/dist/worker/pr-manager.d.ts +5 -0
  147. package/dist/worker/pr-manager.d.ts.map +1 -1
  148. package/dist/worker/pr-manager.js +7 -0
  149. package/dist/worker/pr-manager.js.map +1 -1
  150. package/dist/worker/product-diff.d.ts +39 -0
  151. package/dist/worker/product-diff.d.ts.map +1 -0
  152. package/dist/worker/product-diff.js +43 -0
  153. package/dist/worker/product-diff.js.map +1 -0
  154. package/dist/worker/provisioning-failure.d.ts +14 -0
  155. package/dist/worker/provisioning-failure.d.ts.map +1 -0
  156. package/dist/worker/provisioning-failure.js +2 -0
  157. package/dist/worker/provisioning-failure.js.map +1 -0
  158. package/dist/worker/repo-checkout.d.ts +14 -0
  159. package/dist/worker/repo-checkout.d.ts.map +1 -1
  160. package/dist/worker/repo-checkout.js +19 -1
  161. package/dist/worker/repo-checkout.js.map +1 -1
  162. package/dist/worker/stage-comment-manager.d.ts +42 -1
  163. package/dist/worker/stage-comment-manager.d.ts.map +1 -1
  164. package/dist/worker/stage-comment-manager.js +205 -1
  165. package/dist/worker/stage-comment-manager.js.map +1 -1
  166. package/dist/worker/terminal-label-op-error.d.ts +23 -0
  167. package/dist/worker/terminal-label-op-error.d.ts.map +1 -0
  168. package/dist/worker/terminal-label-op-error.js +27 -0
  169. package/dist/worker/terminal-label-op-error.js.map +1 -0
  170. package/dist/worker/types.d.ts +161 -2
  171. package/dist/worker/types.d.ts.map +1 -1
  172. package/dist/worker/types.js +11 -0
  173. package/dist/worker/types.js.map +1 -1
  174. package/dist/worker/validate-fix-handler.d.ts +79 -0
  175. package/dist/worker/validate-fix-handler.d.ts.map +1 -0
  176. package/dist/worker/validate-fix-handler.js +320 -0
  177. package/dist/worker/validate-fix-handler.js.map +1 -0
  178. package/dist/worker/worker-result.d.ts +39 -0
  179. package/dist/worker/worker-result.d.ts.map +1 -0
  180. package/dist/worker/worker-result.js +10 -0
  181. package/dist/worker/worker-result.js.map +1 -0
  182. package/package.json +7 -6
@@ -0,0 +1,141 @@
1
+ import type { QueueItem } from '../types/index.js';
2
+ import type { Logger } from './types.js';
3
+ import type { WorkerConfig } from './config.js';
4
+ import type { SSEEventEmitter } from './output-capture.js';
5
+ import type { AgentLauncher } from '../launcher/agent-launcher.js';
6
+ import type { HandlerOutcome } from './handler-outcome.js';
7
+ /**
8
+ * Evidence emitted when the agent-CLI attempt fails to produce a conflict-
9
+ * free committed merge (FR-009).
10
+ */
11
+ export interface BlockedStuckMergeConflictsEvidence {
12
+ /** Paths that still had conflict markers after the agent-CLI attempt. */
13
+ unresolvedPaths: string[];
14
+ /**
15
+ * Paths the agent successfully resolved (staged, no markers).
16
+ * Empty if the agent produced no diff at all.
17
+ */
18
+ partiallyResolvedPaths: string[];
19
+ /** Base ref that was being merged. */
20
+ baseRef: string;
21
+ /** Short SHA of the branch tip at attempt time. */
22
+ branchTipSha: string;
23
+ /** ISO timestamp of the attempt. */
24
+ attemptedAt: string;
25
+ /** Optional short human-readable reason (e.g., "no linked PR"). */
26
+ reason?: string;
27
+ }
28
+ /**
29
+ * Handles the `resolve-merge-conflicts` command per #898.
30
+ *
31
+ * Processing flow (see `handler-contract.md` §"Flow"):
32
+ * 1-3. Parse item, create GitHub client, resolve PR via PrLinker.
33
+ * 4. switchBranch with 3× retry.
34
+ * 5. resolveBaseBranch (reuses #864 helper).
35
+ * 6-7. fetch + merge origin/<base> with 3× retry. No-op merge → immediate success.
36
+ * 8. Enumerate conflicted paths.
37
+ * 9-10.Enumerate open PRs targeting same base, cache file lists.
38
+ * 11. Build MergeConflictIntent prompt via buildMergeConflictPrompt.
39
+ * 12. agentLauncher.launch EXACTLY ONCE.
40
+ * 13. Success predicate: no MERGE_HEAD, no unresolved paths, no conflict markers.
41
+ * 14. git push origin <branch> with 3× retry (network only; NFF is a hard fail).
42
+ * 15. On success: apply completed:merge-conflicts + remove waiting-for + agent:paused.
43
+ * 17. On block: apply blocked:stuck-merge-conflicts, leave waiting-for in place,
44
+ * emit evidence block, return normally.
45
+ */
46
+ export declare class MergeConflictHandler {
47
+ private readonly config;
48
+ private readonly logger;
49
+ private readonly agentLauncher;
50
+ private readonly sseEmitter?;
51
+ private readonly repoCheckout;
52
+ private readonly prLinker;
53
+ constructor(config: WorkerConfig, logger: Logger, agentLauncher: AgentLauncher, sseEmitter?: SSEEventEmitter | undefined);
54
+ /**
55
+ * Process a merge-conflict resolution task (#902 FR-005 return type).
56
+ *
57
+ * Returns a `HandlerOutcome` — the dispatcher (via `ClaudeCliWorker.handle`)
58
+ * routes on the discriminant to decide re-arm vs failed-terminal.
59
+ *
60
+ * Success/no-op/push-succeeded → `re-armed` with `startPhase` from
61
+ * `metadata.phase`. Blocked branches → `failed` with evidence. Missing
62
+ * `metadata.phase` at a would-be `re-armed` return → fail-loud path
63
+ * (FR-004): applies `blocked:stuck-merge-conflicts`, returns `failed` with
64
+ * evidence citing the missing pause-context.
65
+ */
66
+ handle(item: QueueItem, checkoutPath: string): Promise<HandlerOutcome>;
67
+ /**
68
+ * Enumerate open PRs targeting `baseName` (excluding the target issue's own PR)
69
+ * and build a Map<path, prNumber[]> of files each sibling PR touches.
70
+ *
71
+ * Uses `gh pr view <number> --json files` per sibling (call site is bounded
72
+ * to the poll cycle, per handler-contract §Observability). Missing files
73
+ * data is treated as an empty set.
74
+ */
75
+ private enumerateSiblingFileMap;
76
+ /**
77
+ * `gh pr view <number> --json files` on the local checkout. Called
78
+ * per-sibling; failures are non-fatal (the scope guard degrades to
79
+ * "no siblings" for that PR, which is safer than throwing).
80
+ */
81
+ private fetchPrFiles;
82
+ /**
83
+ * Success predicate (handler-contract §"Success predicate"):
84
+ * - `.git/MERGE_HEAD` does NOT exist (merge is complete)
85
+ * - `git diff --name-only --diff-filter=U` is empty (no unresolved paths)
86
+ * - No file in the tree contains `<<<<<<< ` at line-start (belt & suspenders)
87
+ */
88
+ private verifyMergeResolved;
89
+ private listUnresolvedPaths;
90
+ /**
91
+ * Best-effort scan for the `<<<<<<< ` conflict marker at line start across
92
+ * tracked files. Uses `git ls-files` to enumerate, then reads each file
93
+ * synchronously (bounded — small worker workloads).
94
+ */
95
+ private scanForConflictMarkers;
96
+ /**
97
+ * `git push origin <branch>` with 3× retry on transient network errors.
98
+ * Non-fast-forward rejection does NOT retry — it escalates to blocked.
99
+ * On success, applies the combined label cleanup and returns re-armed.
100
+ */
101
+ private pushAndSucceed;
102
+ /**
103
+ * Success-terminal branch (#902 FR-001, FR-004, FR-007).
104
+ *
105
+ * - FR-001: consume `completed:merge-conflicts` and clear `agent:in-progress` /
106
+ * `agent:paused` residue so the next natural conflict pause is not
107
+ * insta-resumed by the generic pair path.
108
+ * - FR-004: fail-loud if `metadata.phase` is missing — never re-derive from
109
+ * labels. Applies `blocked:stuck-merge-conflicts`, returns `failed` with
110
+ * evidence citing the missing pause-context.
111
+ * - FR-007: one combined `gh issue edit --remove-label …` invocation (via
112
+ * `github.removeLabels` which already batches removes into a single call).
113
+ */
114
+ private finishSuccess;
115
+ /**
116
+ * #902 FR-007: single combined `gh issue edit --remove-label …` for all four
117
+ * ownership-transition removes. No adds — re-arm is direct enqueue, not a
118
+ * resume-pair, so no `waiting-for:<gate>` / `completed:<gate>` labels are
119
+ * needed. The next `continue` item's normal in-progress labels are applied
120
+ * by `LabelManager.onResumeStart` when the phase loop enters.
121
+ *
122
+ * `github.removeLabels` batches all four `--remove-label` flags into one
123
+ * `gh issue edit` invocation — one HTTP round-trip, atomic at the label-set
124
+ * level (per contracts/handler-outcome.md §"Label edit shape").
125
+ */
126
+ private applySuccessDisposition;
127
+ private applyBlockedDisposition;
128
+ /**
129
+ * Spawn the agent CLI with a MergeConflictIntent. Runs at most once
130
+ * (Q4 → D). Returns true if the CLI exited 0, false otherwise.
131
+ */
132
+ private spawnAgentForConflict;
133
+ private retry;
134
+ private isTransientGitError;
135
+ private isTransientNetworkError;
136
+ private isNonFastForward;
137
+ private baseIsAncestor;
138
+ private getBranchTipSha;
139
+ private sleep;
140
+ }
141
+ //# sourceMappingURL=merge-conflict-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-conflict-handler.d.ts","sourceRoot":"","sources":["../../src/worker/merge-conflict-handler.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,SAAS,EAAiC,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA8B3D;;;GAGG;AACH,MAAM,WAAW,kCAAkC;IACjD,yEAAyE;IACzE,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,oBAAoB;IAK7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAP9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;gBAGjB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,UAAU,CAAC,EAAE,eAAe,YAAA;IAM/C;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAiQ5E;;;;;;;OAOG;YACW,uBAAuB;IA8CrC;;;;OAIG;YACW,YAAY;IAoB1B;;;;;OAKG;YACW,mBAAmB;YAgCnB,mBAAmB;IAgBjC;;;;OAIG;YACW,sBAAsB;IAwBpC;;;;OAIG;YACW,cAAc;IA0D5B;;;;;;;;;;;OAWG;YACW,aAAa;IA+B3B;;;;;;;;;;OAUG;YACW,uBAAuB;YAyBvB,uBAAuB;IA8BrC;;;OAGG;YACW,qBAAqB;YAkFrB,KAAK;IAqBnB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,gBAAgB;YAMV,cAAc;YAad,eAAe;IAW7B,OAAO,CAAC,KAAK;CAGd"}