@cleocode/core 2026.9.3 → 2026.9.4

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 (41) hide show
  1. package/dist/dispatch/suggested-next.d.ts.map +1 -1
  2. package/dist/dispatch/suggested-next.js +7 -1
  3. package/dist/dispatch/suggested-next.js.map +1 -1
  4. package/dist/docs/export-document.js +84 -0
  5. package/dist/docs/export-document.js.map +2 -2
  6. package/dist/hygiene/validate-spawn-readiness.d.ts +88 -4
  7. package/dist/hygiene/validate-spawn-readiness.d.ts.map +1 -1
  8. package/dist/hygiene/validate-spawn-readiness.js +138 -16
  9. package/dist/hygiene/validate-spawn-readiness.js.map +1 -1
  10. package/dist/injection.d.ts.map +1 -1
  11. package/dist/injection.js +10 -2
  12. package/dist/injection.js.map +1 -1
  13. package/dist/internal.d.ts +1 -1
  14. package/dist/internal.d.ts.map +1 -1
  15. package/dist/internal.js +1 -1
  16. package/dist/internal.js.map +1 -1
  17. package/dist/llm/plugin-facade.js +84 -0
  18. package/dist/llm/plugin-facade.js.map +2 -2
  19. package/dist/release/open.d.ts +11 -18
  20. package/dist/release/open.d.ts.map +1 -1
  21. package/dist/release/open.js +135 -7
  22. package/dist/release/open.js.map +1 -1
  23. package/dist/selfimprove/fix-gen.js +84 -0
  24. package/dist/selfimprove/fix-gen.js.map +2 -2
  25. package/dist/setup/sections/brain.d.ts +1 -1
  26. package/dist/setup/sections/brain.js +1 -1
  27. package/dist/system/bridge-mode.d.ts +1 -1
  28. package/dist/system/bridge-mode.js +1 -1
  29. package/dist/tasks/index.d.ts +1 -1
  30. package/dist/tasks/index.d.ts.map +1 -1
  31. package/dist/tasks/index.js +1 -1
  32. package/dist/tasks/index.js.map +1 -1
  33. package/dist/tasks/tool-cache.d.ts +134 -9
  34. package/dist/tasks/tool-cache.d.ts.map +1 -1
  35. package/dist/tasks/tool-cache.js +188 -68
  36. package/dist/tasks/tool-cache.js.map +1 -1
  37. package/package.json +13 -13
  38. package/templates/CLEO-INJECTION.md +6 -6
  39. package/templates/workflows/release-prepare.yml.tmpl +67 -2
  40. package/templates/workflows/release-publish.yml.tmpl +1 -1
  41. package/templates/workflows/release-rollback.yml.tmpl +18 -2
@@ -4,7 +4,7 @@
4
4
  * Controls how BRAIN context is surfaced inside AGENTS.md by toggling
5
5
  * `brain.memoryBridge.mode` across three operator-visible values:
6
6
  *
7
- * - `'digest'` — AGENTS.md gets a `cleo memory digest --brief` directive
7
+ * - `'digest'` — AGENTS.md gets a `cleo memory digest` directive
8
8
  * (no `.cleo/memory-bridge.md` written). Wire value stays
9
9
  * `'cli'` so existing project configs continue to resolve
10
10
  * correctly; the wizard label was renamed to "digest" to
@@ -4,7 +4,7 @@
4
4
  * Controls how BRAIN context is surfaced inside AGENTS.md by toggling
5
5
  * `brain.memoryBridge.mode` across three operator-visible values:
6
6
  *
7
- * - `'digest'` — AGENTS.md gets a `cleo memory digest --brief` directive
7
+ * - `'digest'` — AGENTS.md gets a `cleo memory digest` directive
8
8
  * (no `.cleo/memory-bridge.md` written). Wire value stays
9
9
  * `'cli'` so existing project configs continue to resolve
10
10
  * correctly; the wizard label was renamed to "digest" to
@@ -7,7 +7,7 @@
7
7
  * where one sibling silently ignored the gate.
8
8
  *
9
9
  * Behaviour:
10
- * - `'cli'` — AGENTS.md gets a `cleo memory digest --brief` directive; no `.md` files written.
10
+ * - `'cli'` — AGENTS.md gets a `cleo memory digest` directive; no `.md` files written.
11
11
  * - `'file'` — legacy `@.cleo/memory-bridge.md` + `@.cleo/nexus-bridge.md` injection.
12
12
  *
13
13
  * The resolver never throws. On any read/parse failure it returns the safe
@@ -7,7 +7,7 @@
7
7
  * where one sibling silently ignored the gate.
8
8
  *
9
9
  * Behaviour:
10
- * - `'cli'` — AGENTS.md gets a `cleo memory digest --brief` directive; no `.md` files written.
10
+ * - `'cli'` — AGENTS.md gets a `cleo memory digest` directive; no `.md` files written.
11
11
  * - `'file'` — legacy `@.cleo/memory-bridge.md` + `@.cleo/nexus-bridge.md` injection.
12
12
  *
13
13
  * The resolver never throws. On any read/parse failure it returns the safe
@@ -32,7 +32,7 @@ export { type AppendSeverityAttestationOptions, appendSignedSeverityAttestation,
32
32
  export { showTask, type TaskDetail, taskExists, taskShow, taskShowIvtrHistory, taskShowOperation, taskShowWithHistory, } from './show.js';
33
33
  export { taskSyncLinks, taskSyncLinksRemove, taskSyncReconcile } from './sync-ops.js';
34
34
  export { taskAnalyze, taskBatchValidate, taskBlockers, taskCancel, taskClaim, taskComplexityEstimate, taskDepends, taskDeps, taskDepsCycles, taskDepsOverview, taskDepsTree, taskDepsValidate, taskExport, taskHistory, taskImpact, taskImport, taskLint, taskNext, taskPromote, taskRelates, taskRelatesAdd, taskRelatesFind, taskRelatesRemove, taskReopen, taskReorder, taskReparent, taskRestore, taskSlice, taskStats, taskTree, taskUnarchive, taskUnclaim, } from './task-ops.js';
35
- export { cacheEntryPath, captureDirtyFingerprint, captureHead, clearToolCache, computeCacheKey, type RunToolOptions, readCacheEntry, runToolCached, type ToolCacheEntry, type ToolRunResult, writeCacheEntry, } from './tool-cache.js';
35
+ export { cacheEntryPath, captureDirtyFingerprint, captureHead, clearToolCache, computeCacheKey, isEntryUsable, type RunToolOptions, readCacheEntry, runToolCached, TOOL_RUN_IDENTITY_FIELDS, type ToolCacheEntry, type ToolRunIdentity, type ToolRunResult, writeCacheEntry, } from './tool-cache.js';
36
36
  export { type CanonicalTool, listValidToolNames, type ResolutionSource, type ResolvedToolCommand, type ResolveToolResult, resolveToolCommand, } from './tool-resolver.js';
37
37
  export { type AcquireSlotOptions, acquireGlobalSlot, defaultMaxConcurrent, isHolderAlive, listSlotHolders, type ReleaseSlotFn, readHolder, reapOrphanedSlots, reapSlotIfOrphaned, resolveMaxConcurrent, type SlotHolder, semaphoreDir, } from './tool-semaphore.js';
38
38
  export { taskUpdate, type UpdateTaskOptions, type UpdateTaskResult, updateTask } from './update.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"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"}
@@ -42,7 +42,7 @@ export { showTask, taskExists, taskShow, taskShowIvtrHistory, taskShowOperation,
42
42
  export { taskSyncLinks, taskSyncLinksRemove, taskSyncReconcile } from './sync-ops.js';
43
43
  export { taskAnalyze, taskBatchValidate, taskBlockers, taskCancel, taskClaim, taskComplexityEstimate, taskDepends, taskDeps, taskDepsCycles, taskDepsOverview, taskDepsTree, taskDepsValidate, taskExport, taskHistory, taskImpact, taskImport, taskLint, taskNext, taskPromote, taskRelates, taskRelatesAdd, taskRelatesFind, taskRelatesRemove, taskReopen, taskReorder, taskReparent, taskRestore, taskSlice, taskStats, taskTree, taskUnarchive, taskUnclaim, } from './task-ops.js';
44
44
  // Tool result cache + cross-process semaphore (T1534 / ADR-061)
45
- export { cacheEntryPath, captureDirtyFingerprint, captureHead, clearToolCache, computeCacheKey, readCacheEntry, runToolCached, writeCacheEntry, } from './tool-cache.js';
45
+ export { cacheEntryPath, captureDirtyFingerprint, captureHead, clearToolCache, computeCacheKey, isEntryUsable, readCacheEntry, runToolCached, TOOL_RUN_IDENTITY_FIELDS, writeCacheEntry, } from './tool-cache.js';
46
46
  // Project-agnostic tool resolution (T1534 / ADR-061)
47
47
  export { listValidToolNames, resolveToolCommand, } from './tool-resolver.js';
48
48
  // Cross-process global per-tool concurrency semaphore (T1534 / ADR-061)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"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"}
@@ -37,8 +37,24 @@ import { type AcquireSlotOptions } from './tool-semaphore.js';
37
37
  * @task T1534
38
38
  */
39
39
  export interface ToolCacheEntry {
40
- /** Schema version for forwards compatibility. */
41
- schemaVersion: 1;
40
+ /**
41
+ * Schema version for forwards compatibility.
42
+ *
43
+ * Bumped 1 -> 2 by gh#1419, which added {@link ToolCacheEntry.executionRoot}
44
+ * to the run's identity. Every entry written before that field existed is
45
+ * refused wholesale by {@link readCacheEntry} on this one comparison.
46
+ *
47
+ * That is the mechanism gh#1380 and gh#1404 each rebuilt by hand. Both
48
+ * needed to retire entries already on disk in consumers' caches, and both
49
+ * did it with a bespoke null-check on the field they had just added —
50
+ * `exitCode === null`, then `head === null` — while this field, whose entire
51
+ * purpose is to retire incompatible entries, stayed at 1 through both.
52
+ * Two defects, two hand-written retirement clauses, one unused version
53
+ * counter sitting between them.
54
+ *
55
+ * @task T12190 (gh#1419)
56
+ */
57
+ schemaVersion: 2;
42
58
  /** Cache key (also encoded in the filename). */
43
59
  key: string;
44
60
  /** Canonical tool name from the resolver. */
@@ -55,6 +71,26 @@ export interface ToolCacheEntry {
55
71
  head: string | null;
56
72
  /** sha256 of `git status --porcelain` (uncommitted tree fingerprint). */
57
73
  dirtyFingerprint: string | null;
74
+ /**
75
+ * Absolute, symlink-resolved path of the tree the tool actually ran in.
76
+ *
77
+ * Part of the run's IDENTITY (see {@link TOOL_RUN_IDENTITY_FIELDS}), so it
78
+ * is in the cache key: two clean worktrees at the same HEAD no longer
79
+ * collide. They used to by construction — a clean tree's
80
+ * `dirtyFingerprint` is the empty-input hash in every worktree, so the old
81
+ * key `{canonical, cmd, args, head, dirtyFingerprint}` was byte-identical
82
+ * across them.
83
+ *
84
+ * Stored as well as keyed, so a hit can be AUDITED. Before this field,
85
+ * `ToolCacheEntry` carried no directory at all: a field survey of 259 tool
86
+ * entries found 0 that could say which tree produced them, and 8 that had
87
+ * been produced in worktrees since deleted — every one `exitCode: 0` and
88
+ * still servable, which makes the evidence unfalsifiable rather than merely
89
+ * stale. Nobody can go and look.
90
+ *
91
+ * @task T12190 (gh#1419)
92
+ */
93
+ executionRoot: string;
58
94
  /** Process exit code. */
59
95
  exitCode: number | null;
60
96
  /**
@@ -290,21 +326,110 @@ export declare function defaultSpawnTimeoutMs(canonical: string): number;
290
326
  * @task T12105 (gh#1193)
291
327
  */
292
328
  export declare function resolveSpawnTimeoutMs(canonical: string, env?: NodeJS.ProcessEnv): number;
329
+ /**
330
+ * The fields that establish WHICH RUN a cache entry describes.
331
+ *
332
+ * This list is the single source of truth for three things that must agree
333
+ * and previously did not, because each was maintained by hand:
334
+ *
335
+ * 1. what {@link computeCacheKey} hashes,
336
+ * 2. what {@link readCacheEntry} requires before serving an entry,
337
+ * 3. what `runToolCached` requires before persisting one.
338
+ *
339
+ * ## Why this exists rather than a fourth guard clause
340
+ *
341
+ * Three defects in three releases, each invisible to the detector written for
342
+ * the one before it:
343
+ *
344
+ * | | gh#1380 (2026.9.2) | gh#1404 (2026.9.3) | gh#1419 (this) |
345
+ * |---|---|---|---|
346
+ * | signature | `exitCode: null` | real code, `head: null` | well-formed, genuinely succeeded |
347
+ * | wrong how | never ran | key cannot rotate | ran, on the wrong tree |
348
+ * | detector | all-null | real code + null head | neither matches |
349
+ *
350
+ * Each fix added one `if` naming one field, to two separate guards — the read
351
+ * path and the write path — that encode the same rule in different code with
352
+ * nothing asserting they agree. A fourth defect means a fourth pair of `if`s,
353
+ * and the pair for defect five is the one somebody edits only half of.
354
+ *
355
+ * The recurring mistake is not any of the three fields. It is that a field
356
+ * could be added to {@link ToolCacheEntry} without being added to the key:
357
+ * `executionRoot` was threaded all the way through execution by T12112 and
358
+ * never reached `computeCacheKey`, so the tool correctly ran in worktree A
359
+ * and its result was then served to worktree B under an identical key. The
360
+ * execution half of that fix landed; the caching half did not.
361
+ *
362
+ * Deriving all three consumers from this one array makes that specific
363
+ * mistake unavailable: a field added here is keyed, required on read, and
364
+ * required on write, together or not at all.
365
+ *
366
+ * ## What is deliberately NOT here
367
+ *
368
+ * `exitCode` is a RESULT, not an identity — it is what the run produced, not
369
+ * which run it was. It has its own non-null requirement in
370
+ * {@link isEntryUsable} (gh#1380: an unknown outcome must never be cached).
371
+ * Putting it here would key the cache on its own answer.
372
+ *
373
+ * @task T12190 (gh#1419)
374
+ */
375
+ export declare const TOOL_RUN_IDENTITY_FIELDS: readonly ["canonical", "cmd", "args", "head", "dirtyFingerprint", "executionRoot"];
376
+ /**
377
+ * The identity half of a {@link ToolCacheEntry} — the inputs that determine
378
+ * which run it is, independent of what that run produced.
379
+ *
380
+ * @task T12190 (gh#1419)
381
+ */
382
+ export type ToolRunIdentity = Pick<ToolCacheEntry, (typeof TOOL_RUN_IDENTITY_FIELDS)[number]>;
293
383
  /**
294
384
  * Compute the cache key for a resolved tool command + repo state.
295
385
  *
296
- * Key includes:
297
- * - Canonical tool name
298
- * - Resolved command + args (sensitive to project-context updates)
299
- * - Git HEAD sha (so a new commit invalidates everything)
300
- * - Dirty-tree fingerprint (so an uncommitted edit invalidates everything)
386
+ * The key covers exactly {@link TOOL_RUN_IDENTITY_FIELDS} — canonical tool
387
+ * name, resolved command and args, git HEAD, dirty-tree fingerprint, and the
388
+ * normalised execution root. Fields are projected in the order that array
389
+ * declares, so the hashed payload is a function of the array and adding a
390
+ * field there changes every key by construction.
391
+ *
392
+ * `executionRoot` is a REQUIRED parameter, deliberately. A defaulted one
393
+ * would let every callsite that was not updated keep computing the old,
394
+ * colliding key while the type-checker reported success — which is the exact
395
+ * shape of the defect this fixes, since `executionRoot` already existed and
396
+ * already reached this function's caller.
301
397
  *
302
398
  * Using `createHash('sha256')` makes the key collision-resistant and bounded
303
- * to 64 hex chars regardless of input size.
399
+ * to 32 hex chars regardless of input size.
304
400
  *
305
401
  * @task T1534
402
+ * @task T12190 (gh#1419)
403
+ */
404
+ export declare function computeCacheKey(command: ResolvedToolCommand, head: string | null, dirtyFingerprint: string | null, executionRoot: string): string;
405
+ /**
406
+ * Whether a cache entry may be SERVED or PERSISTED as a real result.
407
+ *
408
+ * One predicate, used by both {@link readCacheEntry} and the persist guard in
409
+ * `runToolCached`, so the two cannot drift apart. Two rules:
410
+ *
411
+ * 1. every field in {@link TOOL_RUN_IDENTITY_FIELDS} is present and
412
+ * non-null — an entry that cannot say which run it describes is not
413
+ * evidence of anything;
414
+ * 2. `exitCode` is non-null — a run that produced no exit code records that
415
+ * we do not know what happened, and an unknown must never be cached
416
+ * (gh#1380).
417
+ *
418
+ * Rule 1 subsumes gh#1404's `head === null` clause without naming `head`:
419
+ * when the tool runs off a non-git root both git fields are null on EVERY
420
+ * run, so the key is a function of the command alone and nothing a developer
421
+ * does to the source can rotate it. That is not a cache, it is a hardcoded
422
+ * answer with a filename — and unlike gh#1380 it holds a real exit code,
423
+ * which can be a PASS. A poisoned red is investigated within minutes; nobody
424
+ * debugs a passing gate.
425
+ *
426
+ * The cost is stated rather than hidden: a project whose CLEO root is not a
427
+ * git checkout gets no tool-result caching at all. Such projects are not
428
+ * getting valid caching today — they are getting one answer forever.
429
+ *
430
+ * @task T12190 (gh#1419)
306
431
  */
307
- export declare function computeCacheKey(command: ResolvedToolCommand, head: string | null, dirtyFingerprint: string | null): string;
432
+ export declare function isEntryUsable(entry: Partial<ToolCacheEntry>): boolean;
308
433
  /**
309
434
  * Capture the repo's git HEAD sha. Returns `null` when the directory is not
310
435
  * a git checkout or the command fails.
@@ -1 +1 @@
1
- {"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../src/tasks/tool-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../src/tasks/tool-cache.ts"],"names":[],"mappings":"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"}