@cleocode/core 2026.6.14 → 2026.6.15

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 (114) hide show
  1. package/dist/check/pr-gate.d.ts +6 -2
  2. package/dist/check/pr-gate.d.ts.map +1 -1
  3. package/dist/check/pr-gate.js +14 -32
  4. package/dist/check/pr-gate.js.map +1 -1
  5. package/dist/config/config-repair.d.ts +70 -0
  6. package/dist/config/config-repair.d.ts.map +1 -0
  7. package/dist/config/config-repair.js +248 -0
  8. package/dist/config/config-repair.js.map +1 -0
  9. package/dist/config/registry.d.ts.map +1 -1
  10. package/dist/config/registry.js +4 -4
  11. package/dist/config/registry.js.map +1 -1
  12. package/dist/config.d.ts.map +1 -1
  13. package/dist/config.js +11 -10
  14. package/dist/config.js.map +1 -1
  15. package/dist/docs/export-document.js +17 -16
  16. package/dist/docs/export-document.js.map +2 -2
  17. package/dist/gc/cleanup.d.ts +23 -8
  18. package/dist/gc/cleanup.d.ts.map +1 -1
  19. package/dist/gc/cleanup.js +287 -22
  20. package/dist/gc/cleanup.js.map +1 -1
  21. package/dist/llm/cli-ops.d.ts +16 -0
  22. package/dist/llm/cli-ops.d.ts.map +1 -1
  23. package/dist/llm/cli-ops.js +32 -5
  24. package/dist/llm/cli-ops.js.map +1 -1
  25. package/dist/llm/cross-provider-selector.d.ts +249 -0
  26. package/dist/llm/cross-provider-selector.d.ts.map +1 -0
  27. package/dist/llm/cross-provider-selector.js +572 -0
  28. package/dist/llm/cross-provider-selector.js.map +1 -0
  29. package/dist/llm/index.d.ts +2 -0
  30. package/dist/llm/index.d.ts.map +1 -1
  31. package/dist/llm/index.js +1 -0
  32. package/dist/llm/index.js.map +1 -1
  33. package/dist/llm/local-model-fit.d.ts +260 -0
  34. package/dist/llm/local-model-fit.d.ts.map +1 -0
  35. package/dist/llm/local-model-fit.js +563 -0
  36. package/dist/llm/local-model-fit.js.map +1 -0
  37. package/dist/llm/plugin-facade.js +761 -230
  38. package/dist/llm/plugin-facade.js.map +3 -3
  39. package/dist/llm/provider-registry/builtin/ollama.d.ts +18 -0
  40. package/dist/llm/provider-registry/builtin/ollama.d.ts.map +1 -1
  41. package/dist/llm/provider-registry/builtin/ollama.js +20 -2
  42. package/dist/llm/provider-registry/builtin/ollama.js.map +1 -1
  43. package/dist/llm/role-resolver.d.ts.map +1 -1
  44. package/dist/llm/role-resolver.js +45 -10
  45. package/dist/llm/role-resolver.js.map +1 -1
  46. package/dist/llm/transports/codex-responses.d.ts +111 -88
  47. package/dist/llm/transports/codex-responses.d.ts.map +1 -1
  48. package/dist/llm/transports/codex-responses.js +456 -258
  49. package/dist/llm/transports/codex-responses.js.map +1 -1
  50. package/dist/release/index.d.ts +2 -2
  51. package/dist/release/index.d.ts.map +1 -1
  52. package/dist/release/index.js +1 -1
  53. package/dist/release/index.js.map +1 -1
  54. package/dist/release/reconcile.d.ts +97 -0
  55. package/dist/release/reconcile.d.ts.map +1 -1
  56. package/dist/release/reconcile.js +412 -5
  57. package/dist/release/reconcile.js.map +1 -1
  58. package/dist/resources/backend.d.ts +155 -0
  59. package/dist/resources/backend.d.ts.map +1 -0
  60. package/dist/resources/backend.js +23 -0
  61. package/dist/resources/backend.js.map +1 -0
  62. package/dist/resources/linux-backend.d.ts +167 -0
  63. package/dist/resources/linux-backend.d.ts.map +1 -0
  64. package/dist/resources/linux-backend.js +259 -0
  65. package/dist/resources/linux-backend.js.map +1 -0
  66. package/dist/resources/monitor.d.ts +230 -0
  67. package/dist/resources/monitor.d.ts.map +1 -0
  68. package/dist/resources/monitor.js +255 -0
  69. package/dist/resources/monitor.js.map +1 -0
  70. package/dist/resources/spawn-wrapper.d.ts +265 -0
  71. package/dist/resources/spawn-wrapper.d.ts.map +1 -0
  72. package/dist/resources/spawn-wrapper.js +304 -0
  73. package/dist/resources/spawn-wrapper.js.map +1 -0
  74. package/dist/selfimprove/budget.d.ts +11 -2
  75. package/dist/selfimprove/budget.d.ts.map +1 -1
  76. package/dist/selfimprove/budget.js +11 -2
  77. package/dist/selfimprove/budget.js.map +1 -1
  78. package/dist/selfimprove/fix-gen.d.ts +229 -0
  79. package/dist/selfimprove/fix-gen.d.ts.map +1 -0
  80. package/dist/selfimprove/fix-gen.js +266 -0
  81. package/dist/selfimprove/fix-gen.js.map +1 -0
  82. package/dist/selfimprove/run-loop.d.ts +44 -4
  83. package/dist/selfimprove/run-loop.d.ts.map +1 -1
  84. package/dist/selfimprove/run-loop.js +73 -6
  85. package/dist/selfimprove/run-loop.js.map +1 -1
  86. package/dist/sentient/cross-project-hygiene.d.ts +11 -2
  87. package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
  88. package/dist/sentient/cross-project-hygiene.js +73 -10
  89. package/dist/sentient/cross-project-hygiene.js.map +1 -1
  90. package/dist/sentient/daemon.d.ts.map +1 -1
  91. package/dist/sentient/daemon.js +7 -2
  92. package/dist/sentient/daemon.js.map +1 -1
  93. package/dist/sentient/worktree-dispatch.d.ts.map +1 -1
  94. package/dist/sentient/worktree-dispatch.js +8 -1
  95. package/dist/sentient/worktree-dispatch.js.map +1 -1
  96. package/dist/spawn/branch-lock.d.ts.map +1 -1
  97. package/dist/spawn/branch-lock.js +7 -1
  98. package/dist/spawn/branch-lock.js.map +1 -1
  99. package/dist/store/attachment-repair.d.ts +110 -0
  100. package/dist/store/attachment-repair.d.ts.map +1 -0
  101. package/dist/store/attachment-repair.js +326 -0
  102. package/dist/store/attachment-repair.js.map +1 -0
  103. package/dist/store/attachment-store.d.ts.map +1 -1
  104. package/dist/store/attachment-store.js +24 -7
  105. package/dist/store/attachment-store.js.map +1 -1
  106. package/dist/tasks/evidence.d.ts +34 -2
  107. package/dist/tasks/evidence.d.ts.map +1 -1
  108. package/dist/tasks/evidence.js +293 -35
  109. package/dist/tasks/evidence.js.map +1 -1
  110. package/dist/verification/verify-tools.d.ts.map +1 -1
  111. package/dist/verification/verify-tools.js +5 -6
  112. package/dist/verification/verify-tools.js.map +1 -1
  113. package/package.json +22 -12
  114. package/templates/workflows/release-prepare.yml.tmpl +48 -2
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Fix-generation stage for the self-improvement loop (T11889 · T11975).
3
+ *
4
+ * This is the missing autonomous link the v1 loop explicitly stubbed out
5
+ * ("NO autonomous fix-gen in v1", see {@link "./run-loop.js"}): given a detected
6
+ * regression (an open `selfimprove_dhq` + its envelope-diff) plus minimal repo
7
+ * context, it asks the LLM to PROPOSE a unified-diff patch and writes that patch
8
+ * to the path the draft-PR egress ({@link "./draft-pr.js".openDraftPr}) already
9
+ * `existsSync`-checks: `<cwd>/selfimprove-<scenario>.patch`. Once the patch is on
10
+ * disk the existing egress guard opens ONE DRAFT PR — closing the
11
+ * DHQ → fix → draft-PR pipeline end-to-end.
12
+ *
13
+ * ## Hard safety posture (unchanged from v1 — P5 spec §B.7)
14
+ *
15
+ * - **LLM ONLY via the E9 chokepoint.** The real generator
16
+ * ({@link createLlmFixGenerator}) resolves its model strictly through
17
+ * {@link "../llm/system-resolver.js".resolveLLMForSystem} → {@link ModelRunner}
18
+ * (Gate-13). It constructs NO raw provider client, reads NO `*_API_KEY` env,
19
+ * and hardcodes no model id — the resolver/registry is the SSoT. The
20
+ * plaintext token is materialized only at the wire boundary (E10).
21
+ * - **Draft-PR-ONLY, never auto-merge.** This module produces a PATCH FILE only;
22
+ * the egress that consumes it always opens a `--draft` PR against a feature
23
+ * branch (never `main`). This module performs NO git/gh action.
24
+ * - **Graceful degrade, never a rogue mutation.** Every failure (no credential,
25
+ * LLM error, empty / non-unified-diff output) returns a typed
26
+ * {@link FixGenResult} of kind `'skipped'` and writes NO patch file — so the
27
+ * existing egress guard (`existsSync` on the patch path) simply skips the PR.
28
+ * This function NEVER throws.
29
+ * - **Injectable seam.** The LLM dependency is the {@link FixGenerator} port;
30
+ * unit tests inject a deterministic fake that returns a canned patch, so NO
31
+ * real LLM is reached in tests.
32
+ *
33
+ * CORE-first: this engine lives in `core` and owns the `FixGenerator` port TYPE.
34
+ * Import-time side-effect-free.
35
+ *
36
+ * @module @cleocode/core/selfimprove/fix-gen
37
+ * @epic T11889
38
+ * @task T11975
39
+ */
40
+ import { writeFileSync } from 'node:fs';
41
+ import { resolve as resolvePath } from 'node:path';
42
+ import { cwd as processCwd } from 'node:process';
43
+ /**
44
+ * The E9 system-of-use label the fix-generator resolves its model under. Maps to
45
+ * the `judgement` role (see `SYSTEM_ROLE_MAP`) — the closest standing role for
46
+ * "reason about a regression and propose a code change".
47
+ */
48
+ const FIXGEN_SYSTEM = 'task-executor';
49
+ /** A leading marker every unified-diff hunk header / file header carries. */
50
+ const UNIFIED_DIFF_MARKERS = ['diff --git ', '--- ', '+++ ', '@@ '];
51
+ /**
52
+ * Compute the patch path the draft-PR egress expects for a scenario:
53
+ * `<cwd>/selfimprove-<scenario>.patch`. The scenario is sanitized to a safe file
54
+ * stem so a hostile scenario name cannot escape the cwd.
55
+ *
56
+ * @param scenario - The scenario name.
57
+ * @param cwd - The working directory to resolve against (defaults to `process.cwd`).
58
+ * @returns The absolute patch path.
59
+ */
60
+ export function fixPatchPath(scenario, cwd) {
61
+ const safeScenario = scenario.replace(/[^a-z0-9-]/gi, '-');
62
+ return resolvePath(cwd ?? processCwd(), `selfimprove-${safeScenario}.patch`);
63
+ }
64
+ /**
65
+ * Is `text` a plausible unified diff?
66
+ *
67
+ * A real `git apply`-able patch always carries at least one of the canonical
68
+ * unified-diff markers ({@link UNIFIED_DIFF_MARKERS}). An LLM that returns prose,
69
+ * an apology, or an empty string fails this guard, so the loop degrades to "no
70
+ * patch" rather than writing junk the egress would then fail to `git apply`.
71
+ *
72
+ * This is a cheap structural sniff, NOT a full parse — the authoritative
73
+ * applicability check is `git apply` inside the egress (which fails the PR cut on
74
+ * a bad patch, never `main`).
75
+ *
76
+ * @param text - Candidate patch text.
77
+ * @returns `true` when the text looks like a unified diff.
78
+ */
79
+ export function looksLikeUnifiedDiff(text) {
80
+ if (text.trim().length === 0)
81
+ return false;
82
+ return UNIFIED_DIFF_MARKERS.some((marker) => text.includes(marker));
83
+ }
84
+ /**
85
+ * Build the system + user prompt the real generator sends to the LLM. Pure
86
+ * (no IO) so it is unit-testable in isolation. The prompt is deliberately strict:
87
+ * "respond with ONLY a unified diff" — anything else fails
88
+ * {@link looksLikeUnifiedDiff} downstream and degrades to "no patch".
89
+ *
90
+ * @param request - The fix-generation request.
91
+ * @returns The `{ system, user }` prompt pair.
92
+ */
93
+ export function buildFixGenPrompt(request) {
94
+ const system = 'You are an autonomous software-maintenance agent. You are given a detected ' +
95
+ 'regression in a TypeScript monorepo (a divergence between a replayed scenario ' +
96
+ 'and its golden expected output). Produce a MINIMAL fix as a single unified diff ' +
97
+ '(`git diff` format, with `diff --git`, `---`, `+++`, and `@@` hunk headers). ' +
98
+ 'Respond with ONLY the unified diff and NOTHING else — no prose, no code fences, ' +
99
+ 'no explanation. If you cannot propose a safe fix, respond with the single token ' +
100
+ 'NO_PATCH.';
101
+ const lines = request.regressions.map((r) => `- op ${r.opCoord} (#${r.opIndex}) at path \`${r.path}\`: ` +
102
+ `actual=${JSON.stringify(r.actual)} expected=${JSON.stringify(r.expected)}`);
103
+ const user = `Regression ${request.dhqId} in scenario \`${request.scenario}\` ` +
104
+ `(${request.regressions.length} diverging path(s)).\n` +
105
+ (request.repoContext.summary ? `Scenario summary: ${request.repoContext.summary}\n` : '') +
106
+ `Project root: ${request.repoContext.projectRoot}\n\n` +
107
+ `Diverging paths:\n${lines.join('\n')}\n\n` +
108
+ 'Produce the unified diff that resolves these divergences.';
109
+ return { system, user };
110
+ }
111
+ /**
112
+ * Lazily-resolved module logger (import-time side-effect-free).
113
+ */
114
+ let cachedLogger;
115
+ async function getModuleLogger() {
116
+ if (cachedLogger === undefined) {
117
+ const { getLogger } = await import('../logger.js');
118
+ cachedLogger = getLogger('selfimprove-fix-gen');
119
+ }
120
+ return cachedLogger;
121
+ }
122
+ /**
123
+ * Run the fix-generation stage: ask the injected {@link FixGenerator} for a patch,
124
+ * validate it as a unified diff, and write it to the egress-expected patch path.
125
+ *
126
+ * This function NEVER throws and NEVER mutates anything but the single patch file.
127
+ * On ANY degrade path — generator returns `'none'`, the generator throws, or the
128
+ * returned text is not a unified diff — it writes NO file and returns
129
+ * `{ kind: 'skipped', reason }`, so the downstream `existsSync` egress guard
130
+ * simply skips the PR. The caller records the `reason` on the DHQ evidence.
131
+ *
132
+ * @param opts - See {@link GenerateFixPatchOptions}.
133
+ * @returns A {@link FixGenResult}.
134
+ *
135
+ * @example
136
+ * ```ts
137
+ * const res = await generateFixPatch({
138
+ * request: { dhqId: 'DHQ-abcd1234', scenario, questionHash, regressions, repoContext },
139
+ * generator: createLlmFixGenerator(),
140
+ * cwd: projectRoot,
141
+ * });
142
+ * if (res.kind === 'written') { // openDraftPr will now find selfimprove-<scenario>.patch }
143
+ * ```
144
+ */
145
+ export async function generateFixPatch(opts) {
146
+ const logger = opts.logger ?? (await getModuleLogger());
147
+ const { request, generator } = opts;
148
+ const patchPath = fixPatchPath(request.scenario, opts.cwd);
149
+ let output;
150
+ try {
151
+ output = await generator.propose(request);
152
+ }
153
+ catch (err) {
154
+ const reason = `fixgen-threw:${err instanceof Error ? err.message : String(err)}`;
155
+ logger.warn({ dhqId: request.dhqId, scenario: request.scenario, reason }, 'fix-gen degraded');
156
+ return { kind: 'skipped', reason };
157
+ }
158
+ if (output.kind === 'none') {
159
+ logger.info({ dhqId: request.dhqId, scenario: request.scenario, reason: output.reason }, 'fix-gen produced no patch (graceful skip — no PR)');
160
+ return { kind: 'skipped', reason: `fixgen-none:${output.reason}` };
161
+ }
162
+ if (!looksLikeUnifiedDiff(output.diff)) {
163
+ logger.warn({ dhqId: request.dhqId, scenario: request.scenario }, 'fix-gen output is not a unified diff (graceful skip — no PR)');
164
+ return { kind: 'skipped', reason: 'fixgen-not-a-diff' };
165
+ }
166
+ // Normalize a trailing newline so `git apply` accepts the hunk.
167
+ const diff = output.diff.endsWith('\n') ? output.diff : `${output.diff}\n`;
168
+ writeFileSync(patchPath, diff, 'utf8');
169
+ const bytes = Buffer.byteLength(diff, 'utf8');
170
+ logger.info({ dhqId: request.dhqId, scenario: request.scenario, patchPath, bytes, model: output.model }, 'fix-gen wrote candidate patch — egress will open a DRAFT PR');
171
+ return { kind: 'written', patchPath, bytes, model: output.model };
172
+ }
173
+ /**
174
+ * Construct the REAL fix generator — the one that drives the E9 LLM chokepoint.
175
+ *
176
+ * Resolution funnels through {@link resolveLLMForSystem}(`'task-executor'`) →
177
+ * {@link ModelRunner.build} → `session.send` (ONE non-streaming completion).
178
+ * It constructs NO raw provider client, reads NO API-key env, and hardcodes no
179
+ * model id (Gate-13). The plaintext credential is materialized ONLY at the
180
+ * `ModelRunner` wire boundary (E10) via the sealed handle. When no credential is
181
+ * reachable it returns `{ kind: 'none' }` — the loop degrades to "no patch", no
182
+ * PR. This function constructs nothing at call time (lazy dynamic imports keep the
183
+ * module import-time side-effect-free + the E9 deps off the hot import path).
184
+ *
185
+ * @param opts - Optional project root threaded into the resolver.
186
+ * @returns A {@link FixGenerator} backed by the E9 chokepoint.
187
+ *
188
+ * @example
189
+ * ```ts
190
+ * const gen = createLlmFixGenerator({ projectRoot });
191
+ * const out = await gen.propose(request); // resolves model via E9, never raw client
192
+ * ```
193
+ */
194
+ export function createLlmFixGenerator(opts = {}) {
195
+ return {
196
+ async propose(request) {
197
+ const logger = await getModuleLogger();
198
+ // Lazy imports: keep E9 deps off the module import path + side-effect-free.
199
+ const { resolveLLMForSystem } = await import('../llm/system-resolver.js');
200
+ const { ModelRunner } = await import('../llm/model-runner.js');
201
+ // 1. E9 resolution chokepoint. Never throws (resolver contract).
202
+ const projectRoot = opts.projectRoot ?? request.repoContext.projectRoot;
203
+ const resolved = await resolveLLMForSystem(FIXGEN_SYSTEM, { projectRoot });
204
+ if (!resolved.sealedCredential && resolved.authType !== 'aws_sdk') {
205
+ return { kind: 'none', reason: 'no-credential-resolved' };
206
+ }
207
+ // 2. Materialize the plaintext ONLY at the wire boundary (E10), build a
208
+ // clean descriptor, and construct the transport inside ModelRunner.
209
+ const apiKey = resolved.sealedCredential
210
+ ? (await resolved.sealedCredential.fetch()).value
211
+ : null;
212
+ const built = await ModelRunner.build({
213
+ provider: resolved.provider,
214
+ model: resolved.model,
215
+ credential: resolved.credential
216
+ ? {
217
+ provider: resolved.credential.provider,
218
+ apiKey,
219
+ source: resolved.credential.source,
220
+ authType: resolved.credential.authType,
221
+ }
222
+ : null,
223
+ source: resolved.source,
224
+ ...(resolved.credentialLabel !== undefined
225
+ ? { credentialLabel: resolved.credentialLabel }
226
+ : {}),
227
+ apiMode: resolved.apiMode,
228
+ baseUrl: resolved.baseUrl,
229
+ authType: resolved.authType,
230
+ ...(resolved.capabilities !== undefined ? { capabilities: resolved.capabilities } : {}),
231
+ });
232
+ // 3. ONE non-streaming completion. The system prompt is threaded onto the
233
+ // request via `systemSuffix` (ConcreteSession maps it to
234
+ // `TransportRequest.system`); the user turn carries the regression detail.
235
+ const { system, user } = buildFixGenPrompt(request);
236
+ try {
237
+ const response = await built.session.send([{ role: 'user', content: user }], {
238
+ systemSuffix: system,
239
+ });
240
+ const text = (response.content ?? '').trim();
241
+ if (text.length === 0 || text === 'NO_PATCH') {
242
+ return { kind: 'none', reason: 'model-declined' };
243
+ }
244
+ return { kind: 'patch', diff: stripCodeFences(text), model: response.model };
245
+ }
246
+ catch (err) {
247
+ logger.warn({ system: FIXGEN_SYSTEM, err: err instanceof Error ? err.message : String(err) }, 'fix-gen LLM call failed — degrading to no-patch');
248
+ return { kind: 'none', reason: 'llm-call-failed' };
249
+ }
250
+ },
251
+ };
252
+ }
253
+ /**
254
+ * Strip a single surrounding markdown code fence (```diff … ```), if present, so a
255
+ * model that wraps its diff still yields an applyable patch. A bare diff passes
256
+ * through untouched.
257
+ *
258
+ * @param text - Candidate patch text (already trimmed).
259
+ * @returns The fence-stripped text.
260
+ */
261
+ export function stripCodeFences(text) {
262
+ const fence = /^```[a-z]*\n([\s\S]*?)\n```$/i;
263
+ const m = text.match(fence);
264
+ return m?.[1] !== undefined ? m[1].trim() : text;
265
+ }
266
+ //# sourceMappingURL=fix-gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-gen.js","sourceRoot":"","sources":["../../src/selfimprove/fix-gen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,GAAG,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAIjD;;;;GAIG;AACH,MAAM,aAAa,GAAG,eAAwB,CAAC;AAE/C,6EAA6E;AAC7E,MAAM,oBAAoB,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AAuG7E;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,GAAY;IACzD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAC3D,OAAO,WAAW,CAAC,GAAG,IAAI,UAAU,EAAE,EAAE,eAAe,YAAY,QAAQ,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,MAAM,MAAM,GACV,6EAA6E;QAC7E,gFAAgF;QAChF,kFAAkF;QAClF,+EAA+E;QAC/E,kFAAkF;QAClF,kFAAkF;QAClF,WAAW,CAAC;IACd,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CACnC,CAAC,CAAC,EAAE,EAAE,CACJ,QAAQ,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,IAAI,MAAM;QAC3D,UAAU,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAC9E,CAAC;IACF,MAAM,IAAI,GACR,cAAc,OAAO,CAAC,KAAK,kBAAkB,OAAO,CAAC,QAAQ,KAAK;QAClE,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,wBAAwB;QACtD,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,OAAO,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,iBAAiB,OAAO,CAAC,WAAW,CAAC,WAAW,MAAM;QACtD,qBAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;QAC3C,2DAA2D,CAAC;IAC9D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,IAAI,YAAgC,CAAC;AACrC,KAAK,UAAU,eAAe;IAC5B,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,YAAY,GAAG,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA6B;IAClE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC;IACxD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACpC,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAE3D,IAAI,MAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,gBAAgB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAC9F,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CACT,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAC3E,mDAAmD,CACpD,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;IACrE,CAAC;IAED,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CACT,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EACpD,8DAA8D,CAC/D,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC1D,CAAC;IAED,gEAAgE;IAChE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC;IAC3E,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,CAAC,IAAI,CACT,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAC3F,6DAA6D,CAC9D,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAiC,EAAE;IACvE,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,OAAsB;YAClC,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;YACvC,4EAA4E;YAC5E,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAC1E,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;YAE/D,iEAAiE;YACjE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC;YACxE,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAClE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;YAC5D,CAAC;YAED,wEAAwE;YACxE,uEAAuE;YACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB;gBACtC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK;gBACjD,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC;gBACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC7B,CAAC,CAAC;wBACE,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ;wBACtC,MAAM;wBACN,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM;wBAClC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ;qBACvC;oBACH,CAAC,CAAC,IAAI;gBACR,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,GAAG,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS;oBACxC,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE;oBAC/C,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxF,CAAC,CAAC;YAEH,0EAA0E;YAC1E,4DAA4D;YAC5D,8EAA8E;YAC9E,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;oBAC3E,YAAY,EAAE,MAAM;iBACrB,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;gBACpD,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC/E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CACT,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAChF,iDAAiD,CAClD,CAAC;gBACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;YACrD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,+BAA+B,CAAC;IAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC"}
@@ -17,8 +17,15 @@
17
17
  * 4. on a regression, **emit ONE DHQ** row via the leased
18
18
  * {@link "./dhq-adapter.js".DhqAdapter} (UPSERT under
19
19
  * `withWriterLease('project','bulk',…)`) — ONLY when `execute` is set;
20
+ * 4b. **generate a fix** ({@link "./fix-gen.js".generateFixPatch}, T11975) — ONLY
21
+ * when `execute` AND `CLEO_PI_RUNNER_ENABLED=1`. Drives the LLM strictly via
22
+ * the E9 chokepoint to produce a unified-diff patch at the path the egress
23
+ * expects (`<cwd>/selfimprove-<scenario>.patch`). Degrades gracefully (no
24
+ * patch ⇒ the egress guard skips the PR); the outcome is recorded back onto
25
+ * the DHQ row. NEVER throws a rogue mutation, NEVER auto-merges;
20
26
  * 5. **open ONE DRAFT PR** ({@link "./draft-pr.js".openDraftPr}, dry-run unless
21
- * `execute`) and record its URL back on the DHQ row.
27
+ * `execute`) and record its URL back on the DHQ row — fires only when the
28
+ * fix-gen stage wrote a patch file (the existing `existsSync` egress guard).
22
29
  *
23
30
  * Self-dogfooding guardrails (NON-NEGOTIABLE, P5 spec §B.7):
24
31
  * - **Default OFF.** Mutation + egress require `opts.execute === true`. Without
@@ -30,8 +37,12 @@
30
37
  * - **Budget caps** (in-code): `maxTokens` / `maxUsd` / `maxPrs = 1` /
31
38
  * `maxWorktrees = 1`, checked PRE-FLIGHT before each costed step. `MemoryMax=32G`
32
39
  * is an operational launch-wrapper, not an in-code cap.
33
- * - **NO autonomous fix-gen, NO auto-merge, NO end-user mode in v1.** The loop
34
- * surfaces regressions as DHQs + draft PRs; a human drives the fix.
40
+ * - **Fix-gen is GATED + DRAFT-PR-ONLY (T11975).** The autonomous fix-generation
41
+ * stage runs ONLY behind BOTH `execute` AND `CLEO_PI_RUNNER_ENABLED=1` (the
42
+ * same gates guarding the rest of the loop). It produces a candidate patch via
43
+ * the E9 LLM chokepoint and lets the EXISTING egress open a DRAFT PR — NEVER
44
+ * an auto-merge, NEVER an end-user mode, NEVER a `main` push. A failed or empty
45
+ * fix-gen degrades to "no patch" and the egress simply skips the PR.
35
46
  *
36
47
  * CORE-first: this engine lives in `core` and owns the `ReplayDispatch` port TYPE;
37
48
  * the cleo dispatch handler supplies the concrete adapter (dependency inversion —
@@ -45,8 +56,9 @@ import { type ExecutionEnvBackend } from '../llm/pi/resolve-execution-env.js';
45
56
  import { type ToolGuard } from '../tools/guard.js';
46
57
  import { type CircuitBreakerState, DEFAULT_BUDGET, type SelfImproveBudget } from './budget.js';
47
58
  import { type DhqAdapter } from './dhq-adapter.js';
48
- import { type DraftPrResult } from './draft-pr.js';
59
+ import { type CommandRunner, type DraftPrResult } from './draft-pr.js';
49
60
  import { type DiffEntry } from './envelope-diff.js';
61
+ import { type FixGenerator, type FixGenResult } from './fix-gen.js';
50
62
  import { type ReplayDispatch } from './replay.js';
51
63
  /** Options for {@link runSelfImprove}. */
52
64
  export interface RunSelfImproveOptions {
@@ -87,6 +99,27 @@ export interface RunSelfImproveOptions {
87
99
  readonly gateRedCheck?: () => Promise<boolean>;
88
100
  /** Test seam: inject a DHQ adapter (defaults to the real leased adapter). */
89
101
  readonly adapter?: DhqAdapter;
102
+ /**
103
+ * Test seam: inject the fix generator (the LLM dependency). Defaults to the real
104
+ * {@link "./fix-gen.js".createLlmFixGenerator} backed by the E9 chokepoint — unit
105
+ * tests inject a deterministic fake returning a canned patch so NO real LLM is
106
+ * reached. The fix-gen stage only runs when BOTH `execute` is set AND the
107
+ * Pi-runner gate (`CLEO_PI_RUNNER_ENABLED=1`) is on, unless `piRunnerEnabled` is
108
+ * supplied (test seam) to override the env read.
109
+ */
110
+ readonly fixGenerator?: FixGenerator;
111
+ /**
112
+ * Test seam: override the `CLEO_PI_RUNNER_ENABLED` env gate that arms fix-gen.
113
+ * Defaults to `process.env.CLEO_PI_RUNNER_ENABLED === '1'`. Supplied explicitly
114
+ * by tests so the deterministic fake runs without mutating process env.
115
+ */
116
+ readonly piRunnerEnabled?: boolean;
117
+ /**
118
+ * Test seam: inject the draft-PR egress command runner (captures the git/gh
119
+ * shell-out). Defaults to the real `execFileSync`-backed runner. Supplied by
120
+ * tests so the capstone proves the egress WITHOUT a real `gh`/`git` invocation.
121
+ */
122
+ readonly draftPrRun?: CommandRunner;
90
123
  /** Test seam: inject the guard backing the in-process fallback env. */
91
124
  readonly guard?: ToolGuard;
92
125
  /** Test seam: inject the run id (defaults to a timestamped id). */
@@ -120,6 +153,13 @@ export interface SelfImproveResult {
120
153
  readonly questionHash: string | null;
121
154
  /** The draft-PR egress result, or `null` when none fired (green / dry-run-no-egress). */
122
155
  readonly draftPr: DraftPrResult | null;
156
+ /**
157
+ * The fix-generation outcome (T11975), or `null` when the stage did not run
158
+ * (green run, dry-run, gate off, or breaker tripped before persist). `'written'`
159
+ * means a candidate patch was produced and the egress was armed; `'skipped'`
160
+ * means fix-gen degraded gracefully (no patch ⇒ no PR).
161
+ */
162
+ readonly fixGen: FixGenResult | null;
123
163
  /** The final circuit-breaker state. */
124
164
  readonly breaker: CircuitBreakerState;
125
165
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-loop.d.ts","sourceRoot":"","sources":["../../src/selfimprove/run-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,oCAAoC,CAAC;AAGnG,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAGL,KAAK,mBAAmB,EACxB,cAAc,EAEd,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,KAAK,aAAa,EAAe,MAAM,eAAe,CAAC;AAChE,OAAO,EAAuB,KAAK,SAAS,EAAiB,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,aAAa,CAAC;AAGlE,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IACvC,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7C;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED,qDAAqD;AACrD,MAAM,MAAM,UAAU;AACpB,gEAAgE;AAC9D,OAAO;AACT,4DAA4D;GAC1D,oBAAoB;AACtB,sEAAsE;GACpE,kBAAkB;AACpB,0CAA0C;GACxC,QAAQ,CAAC;AAEb,gEAAgE;AAChE,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3C,oFAAoF;IACpF,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACvC,uCAAuC;IACvC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;CACvC;AAcD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8J5F;AA2CD,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"run-loop.d.ts","sourceRoot":"","sources":["../../src/selfimprove/run-loop.ts"],"names":[],"mappings":"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"}
@@ -17,8 +17,15 @@
17
17
  * 4. on a regression, **emit ONE DHQ** row via the leased
18
18
  * {@link "./dhq-adapter.js".DhqAdapter} (UPSERT under
19
19
  * `withWriterLease('project','bulk',…)`) — ONLY when `execute` is set;
20
+ * 4b. **generate a fix** ({@link "./fix-gen.js".generateFixPatch}, T11975) — ONLY
21
+ * when `execute` AND `CLEO_PI_RUNNER_ENABLED=1`. Drives the LLM strictly via
22
+ * the E9 chokepoint to produce a unified-diff patch at the path the egress
23
+ * expects (`<cwd>/selfimprove-<scenario>.patch`). Degrades gracefully (no
24
+ * patch ⇒ the egress guard skips the PR); the outcome is recorded back onto
25
+ * the DHQ row. NEVER throws a rogue mutation, NEVER auto-merges;
20
26
  * 5. **open ONE DRAFT PR** ({@link "./draft-pr.js".openDraftPr}, dry-run unless
21
- * `execute`) and record its URL back on the DHQ row.
27
+ * `execute`) and record its URL back on the DHQ row — fires only when the
28
+ * fix-gen stage wrote a patch file (the existing `existsSync` egress guard).
22
29
  *
23
30
  * Self-dogfooding guardrails (NON-NEGOTIABLE, P5 spec §B.7):
24
31
  * - **Default OFF.** Mutation + egress require `opts.execute === true`. Without
@@ -30,8 +37,12 @@
30
37
  * - **Budget caps** (in-code): `maxTokens` / `maxUsd` / `maxPrs = 1` /
31
38
  * `maxWorktrees = 1`, checked PRE-FLIGHT before each costed step. `MemoryMax=32G`
32
39
  * is an operational launch-wrapper, not an in-code cap.
33
- * - **NO autonomous fix-gen, NO auto-merge, NO end-user mode in v1.** The loop
34
- * surfaces regressions as DHQs + draft PRs; a human drives the fix.
40
+ * - **Fix-gen is GATED + DRAFT-PR-ONLY (T11975).** The autonomous fix-generation
41
+ * stage runs ONLY behind BOTH `execute` AND `CLEO_PI_RUNNER_ENABLED=1` (the
42
+ * same gates guarding the rest of the loop). It produces a candidate patch via
43
+ * the E9 LLM chokepoint and lets the EXISTING egress open a DRAFT PR — NEVER
44
+ * an auto-merge, NEVER an end-user mode, NEVER a `main` push. A failed or empty
45
+ * fix-gen degrades to "no patch" and the egress simply skips the PR.
35
46
  *
36
47
  * CORE-first: this engine lives in `core` and owns the `ReplayDispatch` port TYPE;
37
48
  * the cleo dispatch handler supplies the concrete adapter (dependency inversion —
@@ -49,6 +60,7 @@ import { CircuitBreaker, DEFAULT_BUDGET, resolveBudget, } from './budget.js';
49
60
  import { createDhqAdapter } from './dhq-adapter.js';
50
61
  import { openDraftPr } from './draft-pr.js';
51
62
  import { computeQuestionHash, diffEnvelopes } from './envelope-diff.js';
63
+ import { createLlmFixGenerator, fixPatchPath, generateFixPatch, } from './fix-gen.js';
52
64
  import { replayScenario } from './replay.js';
53
65
  import { loadScenario } from './scenario.js';
54
66
  /**
@@ -99,6 +111,7 @@ export async function runSelfImprove(opts) {
99
111
  regressions,
100
112
  questionHash,
101
113
  draftPr: null,
114
+ fixGen: null,
102
115
  breaker: breaker.state,
103
116
  });
104
117
  // ── 1. boot ONE sandbox (counts against maxWorktrees=1) ─────────────────────
@@ -133,6 +146,7 @@ export async function runSelfImprove(opts) {
133
146
  regressions: [],
134
147
  questionHash: null,
135
148
  draftPr: null,
149
+ fixGen: null,
136
150
  breaker: breaker.state,
137
151
  };
138
152
  }
@@ -154,16 +168,19 @@ export async function runSelfImprove(opts) {
154
168
  regressions: diff.regressions,
155
169
  questionHash,
156
170
  draftPr: null,
171
+ fixGen: null,
157
172
  breaker: breaker.state,
158
173
  };
159
174
  }
160
175
  // ── 4. emit ONE leased DHQ (require-mode lease throw ⇒ breaker trip) ────────
176
+ const dhqId = `DHQ-${questionHash.slice(0, 8)}`;
177
+ const dhqTitle = `selfimprove regression in '${opts.scenario}' (${diff.regressions.length} path(s))`;
161
178
  try {
162
179
  await adapter.upsertOpenDhq({
163
- dhqId: `DHQ-${questionHash.slice(0, 8)}`,
180
+ dhqId,
164
181
  scenario: opts.scenario,
165
182
  questionHash,
166
- title: `selfimprove regression in '${opts.scenario}' (${diff.regressions.length} path(s))`,
183
+ title: dhqTitle,
167
184
  regressionJson: JSON.stringify(diff),
168
185
  severity: null,
169
186
  runId,
@@ -172,17 +189,65 @@ export async function runSelfImprove(opts) {
172
189
  catch (err) {
173
190
  return tripFromError(breaker, err, logger, opts.scenario, runId, execute, diff.regressions, questionHash);
174
191
  }
192
+ // ── 4b. AUTONOMOUS FIX-GENERATION (T11975) — gated, DRAFT-PR-ONLY ───────────
193
+ // Runs ONLY behind BOTH `execute` AND the Pi-runner gate. Produces a candidate
194
+ // unified-diff patch via the E9 LLM chokepoint at the exact path the egress
195
+ // below `existsSync`-checks. Degrades gracefully (no patch ⇒ the egress guard
196
+ // skips the PR) and NEVER throws a rogue mutation. The outcome is folded back
197
+ // onto the DHQ row (refresh-UPSERT — same leased, idempotent path).
198
+ const piRunnerEnabled = opts.piRunnerEnabled ?? process.env.CLEO_PI_RUNNER_ENABLED === '1';
199
+ let fixGen = null;
200
+ if (piRunnerEnabled) {
201
+ const generator = opts.fixGenerator ?? createLlmFixGenerator({ projectRoot: workspaceRoot });
202
+ fixGen = await generateFixPatch({
203
+ request: {
204
+ dhqId,
205
+ scenario: opts.scenario,
206
+ questionHash,
207
+ regressions: diff.regressions,
208
+ repoContext: {
209
+ projectRoot: workspaceRoot,
210
+ summary: loaded.scenario.description,
211
+ },
212
+ },
213
+ generator,
214
+ ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
215
+ logger,
216
+ });
217
+ // Record the fix-gen outcome back onto the open DHQ row (leased, idempotent).
218
+ // A throw here trips the breaker exactly like the initial emit (lease-denial).
219
+ try {
220
+ await adapter.upsertOpenDhq({
221
+ dhqId,
222
+ scenario: opts.scenario,
223
+ questionHash,
224
+ title: dhqTitle,
225
+ regressionJson: JSON.stringify({ diff, fixGen }),
226
+ severity: null,
227
+ runId,
228
+ });
229
+ }
230
+ catch (err) {
231
+ return tripFromError(breaker, err, logger, opts.scenario, runId, execute, diff.regressions, questionHash);
232
+ }
233
+ }
234
+ else {
235
+ logger.info({ scenario: opts.scenario, runId }, 'self-improve fix-gen SKIPPED (CLEO_PI_RUNNER_ENABLED!=1) — DHQ emitted, no patch generated');
236
+ }
175
237
  // ── 5. open ONE DRAFT PR (counts against maxPrs=1) + record url back ────────
176
238
  let draftPr = null;
177
239
  try {
178
240
  breaker.chargeOrTrip({ prs: 1 });
179
241
  draftPr = await openDraftPr({
180
242
  scenario: opts.scenario,
181
- diffPath: `selfimprove-${opts.scenario}.patch`,
243
+ // SAME path fix-gen writes to (sanitized, resolved against cwd) so the
244
+ // egress `existsSync` guard finds exactly the file 4b produced.
245
+ diffPath: fixPatchPath(opts.scenario, opts.cwd),
182
246
  title: `fix(selfimprove): ${opts.scenario} regression`,
183
247
  body: `Auto-detected regression in the \`${opts.scenario}\` dogfood scenario (run ${runId}).`,
184
248
  execute,
185
249
  ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
250
+ ...(opts.draftPrRun !== undefined ? { run: opts.draftPrRun } : {}),
186
251
  });
187
252
  if (draftPr.kind === 'ok') {
188
253
  await adapter.recordPrUrl(questionHash, draftPr.prUrl);
@@ -199,6 +264,7 @@ export async function runSelfImprove(opts) {
199
264
  regressions: diff.regressions,
200
265
  questionHash,
201
266
  draftPr,
267
+ fixGen,
202
268
  breaker: breaker.state,
203
269
  };
204
270
  }
@@ -233,6 +299,7 @@ function tripFromError(breaker, err, logger, scenario, runId, executed, regressi
233
299
  regressions,
234
300
  questionHash,
235
301
  draftPr: null,
302
+ fixGen: null,
236
303
  breaker: breaker.state,
237
304
  };
238
305
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-loop.js","sourceRoot":"","sources":["../../src/selfimprove/run-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-loop.js","sourceRoot":"","sources":["../../src/selfimprove/run-loop.ts"],"names":[],"mappings":"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"}
@@ -183,8 +183,17 @@ export declare function runDuplicateEpicDetection(): Promise<DuplicateEpicResult
183
183
  * `packages/core/src/spawn/branch-lock.ts` so there is zero duplication
184
184
  * of the worktree-management logic (DRY).
185
185
  *
186
- * Active task IDs are resolved from each project's tasks.db before calling
187
- * pruneOrphanedWorktrees so in-flight worktrees are never removed.
186
+ * Preserve set (T11996 Amendment 1 — PREDICATE BLOCKER fix):
187
+ * Any task whose status is NOT terminal (i.e. not `done`, `cancelled`, or
188
+ * `archived`) must be preserved. Querying only `status: 'active'` was the
189
+ * original bug — it silently removed worktrees for `pending`, `blocked`, and
190
+ * `proposed` tasks. We now query all non-terminal statuses and build the
191
+ * preserve set from their union.
192
+ *
193
+ * Fail-closed (T11996 Amendment 2):
194
+ * If the task store is unreadable for a project, skip pruning for that
195
+ * project and write a structured audit warning. If ALL projects fail to
196
+ * load tasks, return with zero pruning.
188
197
  *
189
198
  * Never throws.
190
199
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cross-project-hygiene.d.ts","sourceRoot":"","sources":["../../src/sentient/cross-project-hygiene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cross-project-hygiene.d.ts","sourceRoot":"","sources":["../../src/sentient/cross-project-hygiene.ts"],"names":[],"mappings":"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"}