@cleocode/core 2026.6.19 → 2026.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/export-document.js +1160 -329
- package/dist/docs/export-document.js.map +3 -3
- package/dist/llm/plugin-facade.js +1211 -383
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/memory/brain-writer-handlers.d.ts.map +1 -1
- package/dist/memory/brain-writer-handlers.js +39 -0
- package/dist/memory/brain-writer-handlers.js.map +1 -1
- package/dist/orchestrate/admission.d.ts +65 -0
- package/dist/orchestrate/admission.d.ts.map +1 -0
- package/dist/orchestrate/admission.js +54 -0
- package/dist/orchestrate/admission.js.map +1 -0
- package/dist/orchestrate/query-ops.d.ts.map +1 -1
- package/dist/orchestrate/query-ops.js +37 -8
- package/dist/orchestrate/query-ops.js.map +1 -1
- package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
- package/dist/orchestrate/spawn-ops.js +24 -0
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/resources/governor.d.ts +133 -0
- package/dist/resources/governor.d.ts.map +1 -0
- package/dist/resources/governor.js +377 -0
- package/dist/resources/governor.js.map +1 -0
- package/dist/resources/supervisor-admit.d.ts +42 -0
- package/dist/resources/supervisor-admit.d.ts.map +1 -0
- package/dist/resources/supervisor-admit.js +136 -0
- package/dist/resources/supervisor-admit.js.map +1 -0
- package/dist/selfimprove/draft-pr.d.ts +93 -9
- package/dist/selfimprove/draft-pr.d.ts.map +1 -1
- package/dist/selfimprove/draft-pr.js +164 -23
- package/dist/selfimprove/draft-pr.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +1209 -381
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/selfimprove/run-loop.d.ts +9 -1
- package/dist/selfimprove/run-loop.d.ts.map +1 -1
- package/dist/selfimprove/run-loop.js +7 -1
- package/dist/selfimprove/run-loop.js.map +1 -1
- package/dist/sentient/tick.d.ts.map +1 -1
- package/dist/sentient/tick.js +29 -0
- package/dist/sentient/tick.js.map +1 -1
- package/dist/store/agent-registry-store.d.ts.map +1 -1
- package/dist/store/agent-registry-store.js +17 -2
- package/dist/store/agent-registry-store.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +35 -0
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +15 -0
- package/dist/store/sqlite.js.map +1 -1
- package/dist/tasks/tool-semaphore.d.ts +25 -0
- package/dist/tasks/tool-semaphore.d.ts.map +1 -1
- package/dist/tasks/tool-semaphore.js +68 -1
- package/dist/tasks/tool-semaphore.js.map +1 -1
- package/package.json +12 -12
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* PR against the cleocode repo (ADR-065 — PRs target `main` via the Merge Queue;
|
|
6
6
|
* NEVER a direct push to `main`, NEVER an auto-merge, NEVER a publish). This module
|
|
7
7
|
* is the egress primitive, modeled on `propose-patch.ts` (the closest "agent
|
|
8
|
-
* proposes a fix PR" exemplar) with
|
|
8
|
+
* proposes a fix PR" exemplar) with four self-dogfooding hardenings:
|
|
9
9
|
*
|
|
10
10
|
* 1. **`--draft` is ALWAYS appended** to `gh pr create` — the PR is never
|
|
11
11
|
* ready-for-merge; a human reviews and undrafts it.
|
|
@@ -14,6 +14,13 @@
|
|
|
14
14
|
* side-effect-free at egress by default.
|
|
15
15
|
* 3. **Branch `feat/T11889-selfimprove-<scenario>-<ts>`** — a feature branch
|
|
16
16
|
* (ADR-065); no main mutation path exists in this module.
|
|
17
|
+
* 4. **Workspace isolation (T12007).** The patch is applied inside an
|
|
18
|
+
* *ephemeral transient worktree* cut fresh off `origin/main` — NEVER the
|
|
19
|
+
* invoking checkout — and ONLY the paths the patch names are staged
|
|
20
|
+
* (`git add -- <paths>`, never `git add -A`). This closes a P1 data-safety
|
|
21
|
+
* defect where the egress swept the orchestrator's entire dirty working
|
|
22
|
+
* tree (untracked owner scratch notes, uncommitted edits) into the public
|
|
23
|
+
* branch and deleted them locally. The invoking repo is never mutated.
|
|
17
24
|
*
|
|
18
25
|
* The live path wraps the git/gh shell-out in
|
|
19
26
|
* {@link "../sentient/skill-provenance.js".withProvenance}`('pr-generator', …)`
|
|
@@ -26,11 +33,15 @@
|
|
|
26
33
|
* @module @cleocode/core/selfimprove/draft-pr
|
|
27
34
|
* @epic T11889
|
|
28
35
|
* @task T11913
|
|
36
|
+
* @task T12007
|
|
29
37
|
*/
|
|
30
38
|
import { execFileSync } from 'node:child_process';
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
39
|
+
import { randomBytes } from 'node:crypto';
|
|
40
|
+
import { existsSync, readFileSync, rmSync } from 'node:fs';
|
|
41
|
+
import { tmpdir } from 'node:os';
|
|
42
|
+
import { join, resolve as resolvePath } from 'node:path';
|
|
33
43
|
import { cwd as processCwd } from 'node:process';
|
|
44
|
+
import { addTransientWorktree, removeTransientWorktree } from '@cleocode/worktree';
|
|
34
45
|
import { withProvenance } from '../sentient/skill-provenance.js';
|
|
35
46
|
/**
|
|
36
47
|
* The required Claude Code trailer every self-improvement PR body ends with.
|
|
@@ -38,7 +49,15 @@ import { withProvenance } from '../sentient/skill-provenance.js';
|
|
|
38
49
|
*/
|
|
39
50
|
const PR_BODY_TRAILER = '\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)';
|
|
40
51
|
/** Default command runner — wraps `execFileSync` with stdout-piped semantics. */
|
|
41
|
-
const defaultRun = (file, args) => execFileSync(file, [...args], { stdio: 'pipe' }).toString('utf8');
|
|
52
|
+
const defaultRun = (file, args, cwd) => execFileSync(file, [...args], { cwd, stdio: 'pipe' }).toString('utf8');
|
|
53
|
+
/**
|
|
54
|
+
* Sanitize a scenario name into a filesystem/ref-safe stem.
|
|
55
|
+
*
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
function safeStem(scenario) {
|
|
59
|
+
return scenario.replace(/[^a-z0-9-]/gi, '-');
|
|
60
|
+
}
|
|
42
61
|
/**
|
|
43
62
|
* Compute the feature branch name for a scenario's draft PR (ADR-065 feature
|
|
44
63
|
* branch — `feat/T11889-selfimprove-<scenario>-<ts>`). The timestamp is
|
|
@@ -49,19 +68,89 @@ const defaultRun = (file, args) => execFileSync(file, [...args], { stdio: 'pipe'
|
|
|
49
68
|
* @returns The branch name.
|
|
50
69
|
*/
|
|
51
70
|
export function draftPrBranchName(scenario, ts) {
|
|
52
|
-
const safeScenario = scenario
|
|
71
|
+
const safeScenario = safeStem(scenario);
|
|
53
72
|
const safeTs = ts.replace(/[:.]/g, '-');
|
|
54
73
|
return `feat/T11889-selfimprove-${safeScenario}-${safeTs}`;
|
|
55
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Extract the set of repo-relative paths a unified diff touches — the SSoT for
|
|
77
|
+
* "which paths may be staged" (T12007).
|
|
78
|
+
*
|
|
79
|
+
* Parses the `diff --git a/<old> b/<new>` header (the authoritative per-file
|
|
80
|
+
* boundary in a git-format diff), collecting BOTH the pre-image (`a/`) and
|
|
81
|
+
* post-image (`b/`) paths so renames stage their old path too and deletions
|
|
82
|
+
* stage the removed path. `/dev/null` sentinels (pure add / pure delete) are
|
|
83
|
+
* skipped. Also parses bare `--- ` / `+++ ` headers as a fallback for
|
|
84
|
+
* non-`diff --git` unified diffs. The result is de-duplicated and stable
|
|
85
|
+
* ordered by first appearance.
|
|
86
|
+
*
|
|
87
|
+
* The egress stages ONLY these paths (`git add -- <paths>`), so the isolated
|
|
88
|
+
* worktree can never sweep anything the patch did not name.
|
|
89
|
+
*
|
|
90
|
+
* @param diffText - The unified-diff text.
|
|
91
|
+
* @returns The de-duplicated repo-relative paths the diff touches.
|
|
92
|
+
*/
|
|
93
|
+
export function parseUnifiedDiffPaths(diffText) {
|
|
94
|
+
const paths = [];
|
|
95
|
+
const seen = new Set();
|
|
96
|
+
const push = (raw) => {
|
|
97
|
+
// Strip surrounding double-quotes git adds for paths with special chars,
|
|
98
|
+
// then drop a leading `a/` or `b/` prefix and any trailing tab-timestamp.
|
|
99
|
+
let p = raw.trim();
|
|
100
|
+
if (p.startsWith('"') && p.endsWith('"') && p.length >= 2)
|
|
101
|
+
p = p.slice(1, -1);
|
|
102
|
+
p = p.replace(/\t.*$/, '');
|
|
103
|
+
if (p === '/dev/null' || p.length === 0)
|
|
104
|
+
return;
|
|
105
|
+
const rel = p.replace(/^[ab]\//, '');
|
|
106
|
+
if (rel.length === 0 || rel === '/dev/null' || seen.has(rel))
|
|
107
|
+
return;
|
|
108
|
+
seen.add(rel);
|
|
109
|
+
paths.push(rel);
|
|
110
|
+
};
|
|
111
|
+
for (const line of diffText.split('\n')) {
|
|
112
|
+
const trimmed = line.replace(/\r$/, '');
|
|
113
|
+
const gitHeader = /^diff --git (\S+) (\S+)\s*$/.exec(trimmed);
|
|
114
|
+
if (gitHeader) {
|
|
115
|
+
push(gitHeader[1]);
|
|
116
|
+
push(gitHeader[2]);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const minus = /^--- (.+)$/.exec(trimmed);
|
|
120
|
+
if (minus) {
|
|
121
|
+
push(minus[1]);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const plus = /^\+\+\+ (.+)$/.exec(trimmed);
|
|
125
|
+
if (plus)
|
|
126
|
+
push(plus[1]);
|
|
127
|
+
}
|
|
128
|
+
return paths;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Build a unique ephemeral worktree path under `os.tmpdir()` for a scenario.
|
|
132
|
+
* The random suffix keeps concurrent self-improve runs from colliding.
|
|
133
|
+
*
|
|
134
|
+
* @internal
|
|
135
|
+
*/
|
|
136
|
+
function tempWorktreeDir(scenario) {
|
|
137
|
+
return join(tmpdir(), `cleo-selfimprove-${safeStem(scenario)}-${randomBytes(4).toString('hex')}`);
|
|
138
|
+
}
|
|
56
139
|
/**
|
|
57
140
|
* Open ONE DRAFT PR carrying a proposed self-improvement fix.
|
|
58
141
|
*
|
|
59
142
|
* DRY-RUN by default ({@link OpenDraftPrArgs.execute} falsey): returns the planned
|
|
60
143
|
* `steps[]` (the `gh pr create` step ALWAYS carries `--draft`) WITHOUT touching
|
|
61
144
|
* git/gh — so the loop is egress-side-effect-free unless `--execute` is threaded
|
|
62
|
-
* through.
|
|
63
|
-
*
|
|
64
|
-
*
|
|
145
|
+
* through.
|
|
146
|
+
*
|
|
147
|
+
* The live path (`execute: true`) never mutates the invoking checkout (T12007).
|
|
148
|
+
* It cuts an EPHEMERAL transient worktree fresh off `origin/main`, applies the
|
|
149
|
+
* diff there, stages ONLY the paths the patch names (`git add -- <paths>` — NEVER
|
|
150
|
+
* `git add -A`), commits, pushes the FEATURE branch (NEVER `main`), runs
|
|
151
|
+
* `gh pr create --base main --head <branch> --draft`, and tears the worktree
|
|
152
|
+
* down in a `finally`. The orchestrator's untracked/uncommitted files are never
|
|
153
|
+
* staged, pushed, or deleted.
|
|
65
154
|
*
|
|
66
155
|
* NEVER pushes `main`, NEVER auto-merges, NEVER publishes — the only egress is a
|
|
67
156
|
* draft PR against a feature branch.
|
|
@@ -73,7 +162,7 @@ export function draftPrBranchName(scenario, ts) {
|
|
|
73
162
|
* ```ts
|
|
74
163
|
* // dry-run (default): no side effects, steps include `--draft`
|
|
75
164
|
* const plan = await openDraftPr({ scenario: 'x', diffPath: 'fix.patch', title, body });
|
|
76
|
-
* // live: cuts
|
|
165
|
+
* // live: cuts an isolated worktree + opens draft PR (invoking repo untouched)
|
|
77
166
|
* const res = await openDraftPr({ scenario: 'x', diffPath: 'fix.patch', title, body, execute: true });
|
|
78
167
|
* ```
|
|
79
168
|
*/
|
|
@@ -100,6 +189,16 @@ export async function openDraftPr(args) {
|
|
|
100
189
|
message: `Patch file '${resolvedDiff}' is empty`,
|
|
101
190
|
};
|
|
102
191
|
}
|
|
192
|
+
// The authoritative "what may be staged" set. A patch that names no files is
|
|
193
|
+
// treated as empty — staging nothing would produce an empty PR.
|
|
194
|
+
const patchPaths = parseUnifiedDiffPaths(diffBytes);
|
|
195
|
+
if (patchPaths.length === 0) {
|
|
196
|
+
return {
|
|
197
|
+
kind: 'error',
|
|
198
|
+
code: 'E_PATCH_EMPTY',
|
|
199
|
+
message: `Patch file '${resolvedDiff}' names no files (no unified-diff headers)`,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
103
202
|
if (execute) {
|
|
104
203
|
try {
|
|
105
204
|
run('gh', ['--version']);
|
|
@@ -113,24 +212,50 @@ export async function openDraftPr(args) {
|
|
|
113
212
|
}
|
|
114
213
|
}
|
|
115
214
|
const branchName = draftPrBranchName(args.scenario, isoNow);
|
|
215
|
+
const worktreePath = args.worktreeDir ?? tempWorktreeDir(args.scenario);
|
|
216
|
+
// Planned steps reflect the ISOLATED flow: every git mutation runs inside the
|
|
217
|
+
// ephemeral worktree (`<worktree>`), and staging is scoped to the patch paths.
|
|
116
218
|
const steps = [
|
|
117
|
-
`git
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
`git
|
|
121
|
-
`git
|
|
219
|
+
`git fetch origin ${base}`,
|
|
220
|
+
`# provision ephemeral worktree at ${worktreePath} off origin/${base} (via @cleocode/worktree)`,
|
|
221
|
+
`git -C <worktree> apply ${resolvedDiff}`,
|
|
222
|
+
`git -C <worktree> add -- ${patchPaths.join(' ')}`,
|
|
223
|
+
`git -C <worktree> commit -m "fix(selfimprove): ${args.scenario} regression"`,
|
|
224
|
+
`git -C <worktree> push -u origin ${branchName}`,
|
|
122
225
|
`gh pr create --base ${base} --head ${branchName} --draft --title "${args.title}" --body <stdin>`,
|
|
226
|
+
'# remove ephemeral worktree (finally)',
|
|
123
227
|
];
|
|
124
228
|
if (!execute) {
|
|
125
|
-
return { kind: 'dry-run', scenario: args.scenario, branchName, steps };
|
|
229
|
+
return { kind: 'dry-run', scenario: args.scenario, branchName, steps, patchPaths };
|
|
126
230
|
}
|
|
231
|
+
const provision = args.provisionWorktree ??
|
|
232
|
+
((o) => addTransientWorktree({
|
|
233
|
+
projectRoot: o.projectRoot,
|
|
234
|
+
worktreePath: o.worktreePath,
|
|
235
|
+
branch: o.branch,
|
|
236
|
+
baseRef: o.baseRef,
|
|
237
|
+
resetBranch: true,
|
|
238
|
+
}));
|
|
239
|
+
const teardown = args.removeWorktree ?? ((projectRoot, p) => removeTransientWorktree(projectRoot, p));
|
|
127
240
|
try {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
241
|
+
// Freshen origin/<base> so the isolated worktree branches off the true tip.
|
|
242
|
+
run('git', ['fetch', 'origin', base], cwd);
|
|
243
|
+
// Provision the ephemeral worktree OFF origin/<base> — NEVER the invoking
|
|
244
|
+
// tree. All subsequent git mutations target `worktreePath`.
|
|
245
|
+
await provision({
|
|
246
|
+
projectRoot: cwd,
|
|
247
|
+
worktreePath,
|
|
248
|
+
branch: branchName,
|
|
249
|
+
baseRef: `origin/${base}`,
|
|
250
|
+
});
|
|
251
|
+
const prUrl = await withProvenance('pr-generator', async () => {
|
|
252
|
+
// Apply the patch INSIDE the isolated worktree (its working tree only).
|
|
253
|
+
run('git', ['apply', resolvedDiff], worktreePath);
|
|
254
|
+
// Stage ONLY the paths the patch names — never `git add -A`, never the
|
|
255
|
+
// invoking checkout. This is the crux of the T12007 fix.
|
|
256
|
+
run('git', ['add', '--', ...patchPaths], worktreePath);
|
|
257
|
+
run('git', ['commit', '-m', `fix(selfimprove): ${args.scenario} regression`], worktreePath);
|
|
258
|
+
run('git', ['push', '-u', 'origin', branchName], worktreePath);
|
|
134
259
|
return run('gh', [
|
|
135
260
|
'pr',
|
|
136
261
|
'create',
|
|
@@ -143,9 +268,9 @@ export async function openDraftPr(args) {
|
|
|
143
268
|
args.title,
|
|
144
269
|
'--body',
|
|
145
270
|
body,
|
|
146
|
-
]).trim();
|
|
271
|
+
], worktreePath).trim();
|
|
147
272
|
});
|
|
148
|
-
return { kind: 'ok', scenario: args.scenario, branchName, prUrl };
|
|
273
|
+
return { kind: 'ok', scenario: args.scenario, branchName, prUrl, patchPaths };
|
|
149
274
|
}
|
|
150
275
|
catch (err) {
|
|
151
276
|
return {
|
|
@@ -154,5 +279,21 @@ export async function openDraftPr(args) {
|
|
|
154
279
|
message: `draft-pr failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
155
280
|
};
|
|
156
281
|
}
|
|
282
|
+
finally {
|
|
283
|
+
// Best-effort teardown — the invoking checkout is never touched, only the
|
|
284
|
+
// ephemeral worktree registration + its tmpdir directory.
|
|
285
|
+
try {
|
|
286
|
+
await teardown(cwd, worktreePath);
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
/* best-effort */
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
rmSync(worktreePath, { recursive: true, force: true });
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
/* best-effort */
|
|
296
|
+
}
|
|
297
|
+
}
|
|
157
298
|
}
|
|
158
299
|
//# sourceMappingURL=draft-pr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft-pr.js","sourceRoot":"","sources":["../../src/selfimprove/draft-pr.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"draft-pr.js","sourceRoot":"","sources":["../../src/selfimprove/draft-pr.ts"],"names":[],"mappings":"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"}
|