pi-smart-compact 8.0.8 → 9.0.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 (78) hide show
  1. package/ARCHITECTURE.md +47 -37
  2. package/CHANGELOG.md +28 -2
  3. package/README.md +52 -30
  4. package/SECURITY.md +1 -1
  5. package/dist/app/native-continuity-bridge.d.ts.map +1 -1
  6. package/dist/app/preflight.d.ts +2 -1
  7. package/dist/app/preflight.d.ts.map +1 -1
  8. package/dist/app/run-context.d.ts +10 -10
  9. package/dist/app/run-context.d.ts.map +1 -1
  10. package/dist/app/run-smart-compact.d.ts +18 -2
  11. package/dist/app/run-smart-compact.d.ts.map +1 -1
  12. package/dist/app/smart-compact-input.d.ts +23 -0
  13. package/dist/app/smart-compact-input.d.ts.map +1 -0
  14. package/dist/app/steps/extract.d.ts.map +1 -1
  15. package/dist/app/steps/metrics.d.ts.map +1 -1
  16. package/dist/app/steps/persist.d.ts +2 -3
  17. package/dist/app/steps/persist.d.ts.map +1 -1
  18. package/dist/app/steps/prepare.d.ts +4 -6
  19. package/dist/app/steps/prepare.d.ts.map +1 -1
  20. package/dist/app/steps/recover.d.ts +1 -1
  21. package/dist/app/steps/recover.d.ts.map +1 -1
  22. package/dist/app/steps/state.d.ts.map +1 -1
  23. package/dist/app/steps/synthesize.d.ts.map +1 -1
  24. package/dist/app/steps/verify.d.ts.map +1 -1
  25. package/dist/app/steps/window.d.ts +5 -1
  26. package/dist/app/steps/window.d.ts.map +1 -1
  27. package/dist/constants.d.ts +21 -4
  28. package/dist/constants.d.ts.map +1 -1
  29. package/dist/domain/scrub.d.ts.map +1 -1
  30. package/dist/domain/summary-parse.d.ts +1 -1
  31. package/dist/domain/summary-parse.d.ts.map +1 -1
  32. package/dist/domain/summary-schema.d.ts +1 -1
  33. package/dist/domain/summary-schema.d.ts.map +1 -1
  34. package/dist/domain/tool-semantics.d.ts +9 -0
  35. package/dist/domain/tool-semantics.d.ts.map +1 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +2082 -1128
  38. package/dist/infra/context-graph.d.ts.map +1 -1
  39. package/dist/infra/fs.d.ts +11 -15
  40. package/dist/infra/fs.d.ts.map +1 -1
  41. package/dist/infra/git.d.ts +5 -11
  42. package/dist/infra/git.d.ts.map +1 -1
  43. package/dist/infra/llm-client.d.ts +2 -0
  44. package/dist/infra/llm-client.d.ts.map +1 -1
  45. package/dist/infra/paths.d.ts +4 -2
  46. package/dist/infra/paths.d.ts.map +1 -1
  47. package/dist/infra/session-identity.d.ts +11 -0
  48. package/dist/infra/session-identity.d.ts.map +1 -1
  49. package/dist/infra/synthesis-cache.d.ts.map +1 -1
  50. package/dist/phases/explore.d.ts.map +1 -1
  51. package/dist/phases/synthesize.d.ts +4 -1
  52. package/dist/phases/synthesize.d.ts.map +1 -1
  53. package/dist/phases/verify.d.ts +10 -3
  54. package/dist/phases/verify.d.ts.map +1 -1
  55. package/dist/provider-eval.js +113 -43
  56. package/dist/provider-scenario-eval.js +206 -53
  57. package/dist/telemetry-report.js +113 -43
  58. package/dist/types.d.ts +45 -0
  59. package/dist/types.d.ts.map +1 -1
  60. package/dist/ui/overlays.d.ts +2 -1
  61. package/dist/ui/overlays.d.ts.map +1 -1
  62. package/dist/utils/backups.d.ts +31 -0
  63. package/dist/utils/backups.d.ts.map +1 -0
  64. package/dist/utils/cache.d.ts +1 -0
  65. package/dist/utils/cache.d.ts.map +1 -1
  66. package/dist/utils/damage.d.ts.map +1 -1
  67. package/dist/utils/extraction.d.ts +6 -0
  68. package/dist/utils/extraction.d.ts.map +1 -1
  69. package/dist/utils/fingerprint.d.ts +5 -1
  70. package/dist/utils/fingerprint.d.ts.map +1 -1
  71. package/dist/utils/helpers.d.ts +1 -35
  72. package/dist/utils/helpers.d.ts.map +1 -1
  73. package/dist/utils/pruning.d.ts.map +1 -1
  74. package/dist/utils/session-log.d.ts +10 -18
  75. package/dist/utils/session-log.d.ts.map +1 -1
  76. package/dist/utils/state.d.ts +2 -2
  77. package/dist/utils/state.d.ts.map +1 -1
  78. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"context-graph.d.ts","sourceRoot":"","sources":["../../src/infra/context-graph.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAsB,MAAM,aAAa,CAAC;AAavE,MAAM,MAAM,iBAAiB,GACzB,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,GACrD,aAAa,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAC7C,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;IACjH,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAsVD,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAmFvF;AAqBD,uFAAuF;AACvF,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAa/F;AAED,gEAAgE;AAChE,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,GAAG,YAAY,GAChC,MAAM,CAsBR;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,kBAAkB,CAkDtH;AA4ED,kGAAkG;AAClG,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,EAAE,CAuEhI;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,EAAE,EAAE,QAAQ,SAAQ,GAAG,MAAM,CAyB5F;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAsBzE"}
1
+ {"version":3,"file":"context-graph.d.ts","sourceRoot":"","sources":["../../src/infra/context-graph.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAsB,MAAM,aAAa,CAAC;AAcvE,MAAM,MAAM,iBAAiB,GACzB,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,GACrD,aAAa,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAC7C,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;IACjH,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAsVD,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAmFvF;AAqBD,uFAAuF;AACvF,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAY/F;AAED,gEAAgE;AAChE,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,GAAG,YAAY,GAChC,MAAM,CAsBR;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,kBAAkB,CAkDtH;AA4ED,kGAAkG;AAClG,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,EAAE,CAuEhI;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,EAAE,EAAE,QAAQ,SAAQ,GAAG,MAAM,CAyB5F;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAsBzE"}
@@ -38,27 +38,23 @@ export declare function ensureDirAsync(dir: string): Promise<void>;
38
38
  */
39
39
  export declare function atomicWriteFileSync(target: string, data: string | Uint8Array): void;
40
40
  export declare function atomicWriteFile(target: string, data: string | Uint8Array): Promise<void>;
41
- /**
42
- * Acquire a coarse-grained lock by creating a `<file>.lock` directory.
43
- * `mkdir` is atomic on every reasonable filesystem, which is exactly what we
44
- * need for a multi-process advisory lock without depending on `flock`.
45
- *
46
- * If it stays held for longer than LOCK_STALE_MS we assume the owning process
47
- * crashed and reclaim it. Acquisition errors/timeouts throw, so callers never
48
- * proceed unlocked. Callers should always release through the returned function.
49
- */
41
+ /** Immediate lock attempt for synchronous best-effort paths; never parks JS. */
50
42
  export declare function acquireLockSync(target: string): () => void;
43
+ /** Cooperative multi-process lock for durable read-modify-write operations. */
44
+ export declare function acquireLock(target: string): Promise<() => void>;
51
45
  /**
52
- * Append a single line of text under a coarse lock. The newline is appended if
53
- * `line` does not already end with one.
46
+ * Append one complete line while enforcing an optional tail-retention cap.
47
+ *
48
+ * Append and trim share the same advisory lock. This matters because O_APPEND
49
+ * only serializes writes to one inode; it does not protect a concurrent
50
+ * temp-file rename from replacing an append that landed after the trim read.
51
+ * Retention therefore happens synchronously, but only when the cap is crossed.
54
52
  */
55
- export declare function appendLineLocked(target: string, line: string): void;
53
+ export declare function appendLineLocked(target: string, line: string, maxBytes?: number): void;
56
54
  /** Read the newest valid JSONL records without loading an entire bounded log. */
57
55
  export declare function readJsonlTail<T>(target: string, limit: number, maxBytes?: number): T[];
58
56
  /** Keep only complete trailing lines that fit within `maxBytes`. */
59
- export declare function trimFileTailLocked(target: string, maxBytes: number): void;
60
- /** Defer disk retention work to a later event-loop turn and coalesce writers. */
61
- export declare function scheduleFileTailTrim(target: string, maxBytes: number): void;
57
+ export declare function trimFileTailLocked(target: string, maxBytes: number): Promise<void>;
62
58
  export declare function readJsonSync<T>(target: string): T | null;
63
59
  export declare function writeJsonSync(target: string, value: unknown, pretty?: boolean): void;
64
60
  //# sourceMappingURL=fs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/infra/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAYH,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG3C;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/D;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAYnF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAW9F;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,CAgD1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAUnE;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAa,GAAG,CAAC,EAAE,CAoB1F;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAgBzE;AAID,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ3E;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CASxD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAQ,GAAG,IAAI,CAElF"}
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/infra/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAYH,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG3C;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/D;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAYnF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAW9F;AAmCD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,CAI1D;AAYD,+EAA+E;AAC/E,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CASrE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAoCtF;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAa,GAAG,CAAC,EAAE,CAoB1F;AAED,oEAAoE;AACpE,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBxF;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CASxD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAQ,GAAG,IAAI,CAElF"}
@@ -1,17 +1,11 @@
1
1
  /**
2
- * Git root resolver with a cwd-keyed cache.
2
+ * Git root resolver with a bounded, expiring cwd cache.
3
3
  *
4
- * `runSmartCompact` calls `findGitRoot(ctx.cwd)` once per run. Each call shells
5
- * out via `execSync("git rev-parse --show-toplevel")`, which blocks the event
6
- * loop for ~5-25ms on typical machines. Under auto-trigger this fires on every
7
- * compaction. Caching by cwd is safe because the git root for a given cwd
8
- * never changes within an extension process lifetime, and the cache only holds
9
- * a few entries per session.
10
- *
11
- * Non-git directories are also cached (null result) so we don't re-shell out
12
- * for every single invocation in a non-repo directory.
4
+ * Positive entries avoid repeated synchronous `git rev-parse` calls during
5
+ * compaction. Negative entries use a short TTL because a directory may become
6
+ * a repository while the extension process is still running.
13
7
  */
14
- export declare function findGitRoot(cwd: string): string | null;
8
+ export declare function findGitRoot(cwd: string, now?: number): string | null;
15
9
  /** Test helper — clears the cache between runs. */
16
10
  export declare function _resetGitRootCacheForTests(): void;
17
11
  //# sourceMappingURL=git.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/infra/git.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAetD;AAED,mDAAmD;AACnD,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/infra/git.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,GAAG,IAAI,CA6BxE;AAED,mDAAmD;AACnD,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
@@ -33,6 +33,8 @@ export declare function isChatGptCodex(model: Model<Api>): boolean;
33
33
  /** ChatGPT rejects wire token caps; OpenAI-compatible custom Codex endpoints may accept them. */
34
34
  export declare function withCodexWireLimit(model: Model<Api>, opts: LlmCompleteOptions): LlmCompleteOptions;
35
35
  export declare function resolveCodexWatchdogMs(maxTokens: number | undefined, configuredMs?: number): number;
36
+ /** @internal Test seam for the transport deadline used by every provider. */
37
+ export declare function withProviderDeadline(opts: LlmCompleteOptions, invoke: (bounded: LlmCompleteOptions) => Promise<AssistantMessage>): Promise<AssistantMessage>;
36
38
  /** Raw client — map generic reasoning only when explicitly configured. */
37
39
  export declare const rawLlmClient: LlmClient;
38
40
  /** Production default: never replay an expensive compaction request automatically. */
@@ -1 +1 @@
1
- {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/infra/llm-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EACV,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAC5B,OAAO,EAAyB,mBAAmB,EACpD,MAAM,uBAAuB,CAAC;AAiB/B,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG;IAAE,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAyCpF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACjG;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAGzD;AAED,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,CAalG;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,SAAI,GAAG,MAAM,CAG9F;AA6DD,0EAA0E;AAC1E,eAAO,MAAM,YAAY,EAAE,SAS1B,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,EAAE,SAAwB,CAAC;AAIxD,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEpD;AAED,wFAAwF;AACxF,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
1
+ {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/infra/llm-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EACV,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAC5B,OAAO,EAAyB,mBAAmB,EACpD,MAAM,uBAAuB,CAAC;AAiB/B,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG;IAAE,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAyCpF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACjG;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAGzD;AAED,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,CAalG;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,SAAI,GAAG,MAAM,CAG9F;AAeD,6EAA6E;AAC7E,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,gBAAgB,CAAC,GACjE,OAAO,CAAC,gBAAgB,CAAC,CA0B3B;AAgDD,0EAA0E;AAC1E,eAAO,MAAM,YAAY,EAAE,SAW1B,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,EAAE,SAAwB,CAAC;AAIxD,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEpD;AAED,wFAAwF;AACxF,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
@@ -47,8 +47,10 @@ export declare function extractionCacheFile(sessionId: string): string;
47
47
  export declare function projectFingerprintFile(projectId: string): string;
48
48
  /** Legacy project-wide compaction state file (v1). */
49
49
  export declare function compactionStateFile(projectId: string): string;
50
- /** Session-scoped state file; branch ancestry is validated inside the envelope. */
51
- export declare function scopedCompactionStateFile(projectId: string, sessionId: string): string;
50
+ /** Pre-v8.1 session-only path, retained solely for one-time branch migration. */
51
+ export declare function legacyScopedCompactionStateFile(projectId: string, sessionId: string): string;
52
+ /** Immutable branch snapshot; descendants find it through their ancestry IDs. */
53
+ export declare function scopedCompactionStateFile(projectId: string, sessionId: string, branchHeadId: string): string;
52
54
  /** Remediation hints file — files to re-preserve after a damage event. */
53
55
  export declare function remediationHintsFile(projectId: string): string;
54
56
  /** HTML metrics dashboard file. */
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/infra/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,+CAA+C;AAC/C,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,gDAAgD;AAChD,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,qCAAqC;AACrC,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,kCAAkC;AAClC,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,qCAAqC;AACrC,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,gCAAgC;AAChC,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,yBAAyB;AACzB,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,qEAAqE;AACrE,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,gCAAgC;AAChC,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,iDAAiD;AACjD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAItF;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,mCAAmC;AACnC,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/infra/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,+CAA+C;AAC/C,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,gDAAgD;AAChD,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,qCAAqC;AACrC,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,kCAAkC;AAClC,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,qCAAqC;AACrC,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,gCAAgC;AAChC,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,yBAAyB;AACzB,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,qEAAqE;AACrE,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,gCAAgC;AAChC,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,iDAAiD;AACjD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,iFAAiF;AACjF,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAI5F;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAK5G;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,mCAAmC;AACnC,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
@@ -36,6 +36,17 @@ export type SessionIdentityContext = Pick<ExtensionContext, "sessionManager">;
36
36
  export declare function branchEntryIds(branch: Iterable<{
37
37
  id?: unknown;
38
38
  }>): string[];
39
+ export declare const MAX_BRANCH_LINEAGE_IDS = 512;
40
+ /**
41
+ * Bound persisted/queried lineage while retaining the leaves immediately
42
+ * preceding compaction entries. Those parent IDs are the branch heads used by
43
+ * scoped state snapshots and can otherwise fall far outside a recent tail.
44
+ */
45
+ export declare function boundedBranchLineageIds(branch: Iterable<{
46
+ id?: unknown;
47
+ parentId?: unknown;
48
+ type?: unknown;
49
+ }>, maxEntries?: number): string[];
39
50
  /**
40
51
  * Resolve the current pi session id, or mint a per-call sentinel that can
41
52
  * never compare equal to another caller's sentinel.
@@ -1 +1 @@
1
- {"version":3,"file":"session-identity.d.ts","sourceRoot":"","sources":["../../src/infra/session-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE;;;;;;;GAOG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;AAI9E,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG,MAAM,EAAE,CAE3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,CAQpE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEzD"}
1
+ {"version":3,"file":"session-identity.d.ts","sourceRoot":"","sources":["../../src/infra/session-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE;;;;;;;GAOG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;AAI9E,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG,MAAM,EAAE,CAE3E;AAED,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,CAAC;IAAE,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EACtE,UAAU,SAAyB,GAClC,MAAM,EAAE,CAcV;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,CAQpE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"synthesis-cache.d.ts","sourceRoot":"","sources":["../../src/infra/synthesis-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC;IAC7C,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CA2BzD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,eAAe,GAAG,IAAI,CAOxF;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,SAAa,GAAG,IAAI,CAQ9F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,YAAY,EAAE,GAAG,IAAI,CAOnF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,GAAG,SAAa,GAAG,IAAI,CAQzF;AAMD,wBAAgB,mBAAmB,IAAI,IAAI,CAAuC;AAClF,wBAAgB,kBAAkB,IAAI,MAAM,CAAyC"}
1
+ {"version":3,"file":"synthesis-cache.d.ts","sourceRoot":"","sources":["../../src/infra/synthesis-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC;IAC7C,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAsCD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CAuCzD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,eAAe,GAAG,IAAI,CAOxF;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,SAAa,GAAG,IAAI,CAQ9F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,YAAY,EAAE,GAAG,IAAI,CAOnF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,GAAG,SAAa,GAAG,IAAI,CAQzF;AAMD,wBAAgB,mBAAmB,IAAI,IAAI,CAAuC;AAClF,wBAAgB,kBAAkB,IAAI,MAAM,CAAyC"}
@@ -1 +1 @@
1
- {"version":3,"file":"explore.d.ts","sourceRoot":"","sources":["../../src/phases/explore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAwC,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/G,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,iBAAiB,EAAiB,MAAM,aAAa,CAAC;AAQtG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAkBjE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,oBAAoB,GAAG,OAAO,CAcvE;AAoCD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAsFpI;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAmCjG;AA0CD,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,iBAAiB,CA2B9G;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAOtF;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAC3D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EACtE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC7D,MAAM,CAAC,EAAE,WAAW,EAAE,SAAS,SAAyB,EACxD,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,KAAK,IAAI,EAC/E,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAAC,CA6IhF;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EACtE,WAAW,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAC3D,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC7D,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAiB5B;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAC3D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EACtE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC7D,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAsB5B"}
1
+ {"version":3,"file":"explore.d.ts","sourceRoot":"","sources":["../../src/phases/explore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAwC,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/G,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,iBAAiB,EAAiB,MAAM,aAAa,CAAC;AAQtG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAmBjE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,oBAAoB,GAAG,OAAO,CAcvE;AAoCD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CA8FpI;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAmCjG;AA+CD,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,iBAAiB,CA2B9G;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAOtF;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAC3D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EACtE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC7D,MAAM,CAAC,EAAE,WAAW,EAAE,SAAS,SAAyB,EACxD,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,KAAK,IAAI,EAC/E,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAAC,CAyJhF;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EACtE,WAAW,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAC3D,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC7D,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAiB5B;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAC3D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EACtE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC7D,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAsB5B"}
@@ -23,7 +23,10 @@ export declare function assembleLLM(summaries: ChunkSummary[], extraction: Struc
23
23
  apiKey: string;
24
24
  headers?: ProviderHeaders;
25
25
  }, budget: number, prevContext: string, signal?: AbortSignal, services?: SmartCompactServices, focus?: string): Promise<string>;
26
- export declare function assembleFallback(summaries: ChunkSummary[], extraction: StructuredExtraction): string;
26
+ export declare function assembleFallback(summaries: ChunkSummary[], extraction: StructuredExtraction, steering?: {
27
+ focus?: string;
28
+ note?: string;
29
+ }): string;
27
30
  /**
28
31
  * Build a placeholder {@link ChunkSummary} when a batch's LLM call failed, so the
29
32
  * assembly step still has something deterministic to merge rather than
@@ -1 +1 @@
1
- {"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../src/phases/synthesize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EACV,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,oBAAoB,EACxD,iBAAiB,EAAE,aAAa,EACjC,MAAM,aAAa,CAAC;AAErB,OAAO,EAAuC,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAK9F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAWjE,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAM9D;AA+BD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAAE,EAClB,UAAU,EAAE,OAAO,aAAa,EAAE,aAAa,EAAE,EACjD,EAAE,EAAE,aAAa,EACjB,SAAS,GAAE,cAAqC,EAChD,KAAK,CAAC,EAAE,MAAM,GACb,QAAQ,EAAE,CAqEZ;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,EACpF,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAClH,QAAQ,CAAC,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,MAAM,GAC9C,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAA;CAAE,CAAC,CAuB3C;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,oBAAoB,EACnD,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,WAAW,EAC5F,QAAQ,CAAC,EAAE,oBAAoB,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAC7E,OAAO,CAAC,YAAY,EAAE,CAAC,CAqEzB;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAC7F,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EAAE,MAAM,EAAE,MAAM,EACtF,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,MAAM,GACzF,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAuCpG;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,YAAY,CAM7D"}
1
+ {"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../src/phases/synthesize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EACV,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,oBAAoB,EACxD,iBAAiB,EAAE,aAAa,EACjC,MAAM,aAAa,CAAC;AAErB,OAAO,EAAuC,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAK9F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAWjE,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAO9D;AA6ED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAAE,EAClB,UAAU,EAAE,OAAO,aAAa,EAAE,aAAa,EAAE,EACjD,EAAE,EAAE,aAAa,EACjB,SAAS,GAAE,cAAqC,EAChD,KAAK,CAAC,EAAE,MAAM,GACb,QAAQ,EAAE,CA2EZ;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,EACpF,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAClH,QAAQ,CAAC,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,MAAM,GAC9C,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAA;CAAE,CAAC,CAuB3C;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,oBAAoB,EACnD,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,WAAW,EAC5F,QAAQ,CAAC,EAAE,oBAAoB,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAC7E,OAAO,CAAC,YAAY,EAAE,CAAC,CAsEzB;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAC7F,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EAAE,MAAM,EAAE,MAAM,EACtF,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,MAAM,GACzF,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,YAAY,EAAE,EACzB,UAAU,EAAE,oBAAoB,EAChC,QAAQ,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,MAAM,CAkDR;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,YAAY,CAM7D"}
@@ -5,8 +5,15 @@
5
5
  * boundary; repair logic switches on `kind` and never reparses its own prose.
6
6
  */
7
7
  import type { Model, Api, ProviderHeaders } from "@earendil-works/pi-ai";
8
- import type { CompactionState, StructuredExtraction, VerificationGap, VerificationResult } from "../types.ts";
8
+ import type { CompactionState, StructuredExtraction, VerificationGap, VerificationResult, LlmMessage } from "../types.ts";
9
9
  import type { SmartCompactServices } from "../infra/services.ts";
10
+ export interface VerificationEvidence {
11
+ sourceMessages?: readonly LlmMessage[];
12
+ steering?: {
13
+ focus?: string;
14
+ note?: string;
15
+ };
16
+ }
10
17
  export declare function formatVerificationGap(gap: VerificationGap): string;
11
18
  export declare function verificationFailureMessage(result: VerificationResult): string | null;
12
19
  /** Content-free diagnostics survive the throw without leaking evidence to telemetry. */
@@ -19,12 +26,12 @@ export declare class VerificationGateError extends Error {
19
26
  }
20
27
  export declare function isDeterministicallyPatchable(gap: VerificationGap): boolean;
21
28
  /** Apply safe repairs to a fixed point; newly introduced patchable gaps get another bounded pass. */
22
- export declare function repairSummaryDeterministically(summary: string, result: VerificationResult, extraction: StructuredExtraction, continuity?: CompactionState | null, maxRounds?: number): {
29
+ export declare function repairSummaryDeterministically(summary: string, result: VerificationResult, extraction: StructuredExtraction, continuity?: CompactionState | null, evidence?: VerificationEvidence, maxRounds?: number): {
23
30
  summary: string;
24
31
  result: VerificationResult;
25
32
  patched: VerificationGap[];
26
33
  };
27
- export declare function verifySummary(summary: string, extraction: StructuredExtraction, continuity?: CompactionState | null): VerificationResult;
34
+ export declare function verifySummary(summary: string, extraction: StructuredExtraction, continuity?: CompactionState | null, evidence?: VerificationEvidence): VerificationResult;
28
35
  /** Apply every safe, deterministic repair. Hallucination/inconsistency gaps stay visible for LLM/user review. */
29
36
  export declare function patchDeterministic(summary: string, gaps: VerificationGap[], extraction: StructuredExtraction, continuity?: CompactionState | null): string;
30
37
  export declare function patchSummary(summary: string, gaps: VerificationGap[], model: Model<Api>, auth: {
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/phases/verify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAW9G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAYlE;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAOpF;AAED,wFAAwF;AACxF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YAAY,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,EAO3D;CACF;AAqID,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAI1E;AAED,qGAAqG;AACrG,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,EACzC,SAAS,SAAI,GACZ;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,CAgB7E;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,GACxC,kBAAkB,CAgKpB;AAED,iHAAiH;AACjH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,eAAe,EAAE,EACvB,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,GACxC,MAAM,CAwFR;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,EACxC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,WAAW,EAC5F,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/phases/verify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAW1H,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAsED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAelE;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAOpF;AAED,wFAAwF;AACxF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YAAY,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,EAO3D;CACF;AAqID,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAI1E;AAED,qGAAqG;AACrG,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,EACzC,QAAQ,GAAE,oBAAyB,EACnC,SAAS,SAAI,GACZ;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,CAgB7E;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,EACzC,QAAQ,GAAE,oBAAyB,GAClC,kBAAkB,CAkMpB;AAED,iHAAiH;AACjH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,eAAe,EAAE,EACvB,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,GACxC,MAAM,CAqGR;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,EACxC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,WAAW,EAC5F,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
@@ -156,7 +156,7 @@ function formatProviderEvaluation(report) {
156
156
  import fs2 from "fs";
157
157
 
158
158
  // src/constants.ts
159
- var VERSION = "8.0.8";
159
+ var VERSION = "9.0.0";
160
160
  var COMPACT_SYSTEM_PREFIX = "You are an expert conversation summarizer for a coding agent. " + "Produce structured markdown summaries. " + "Follow output format exactly. " + "Use EXACT names \u2014 never paraphrase code identifiers. " + "Trust deterministic extraction data over intuition.";
161
161
  var PROFILES = {
162
162
  light: {
@@ -198,7 +198,7 @@ var DEFAULT_CONFIG = {
198
198
  backupEnabled: true,
199
199
  backupDir: "",
200
200
  minContextPercent: 60,
201
- requireApproval: false,
201
+ requireApproval: true,
202
202
  scrubSecrets: true,
203
203
  scrubPii: false,
204
204
  maxLlmCalls: 8,
@@ -238,6 +238,8 @@ Output EXACTLY this format:
238
238
  - **[Decision]**: [Rationale]
239
239
  ` + `## Files Modified
240
240
  - [Verified list from deterministic extraction]
241
+ ` + `## Files Deleted
242
+ - [Verified deleted paths from deterministic extraction]
241
243
  ` + `## Files Read
242
244
  - [Verified list from deterministic extraction]
243
245
  ` + `## Next Steps
@@ -261,6 +263,7 @@ Rules for Accuracy:
261
263
  ` + `**Summary**: [2-4 sentences: what happened, errors, code changes with paths]
262
264
  ` + `**Decisions**: [comma-separated, or "None"]
263
265
  ` + `**Modified**: [comma-separated paths, or "None"]
266
+ ` + `**Deleted**: [comma-separated paths, or "None"]
264
267
  ` + `**Read**: [comma-separated paths, or "None"]
265
268
  `;
266
269
  var ASSEMBLY_PROMPT_PREFIX = `Merge these topic summaries into ONE coherent summary.
@@ -292,6 +295,8 @@ var ASSEMBLY_PROMPT_PREFIX = `Merge these topic summaries into ONE coherent summ
292
295
  - **[Decision]**: [Rationale]
293
296
  ` + `## Files Modified
294
297
  - [Verified deterministic list]
298
+ ` + `## Files Deleted
299
+ - [Verified deterministic deleted paths]
295
300
  ` + `## Files Read
296
301
  - [Verified deterministic list]
297
302
  ` + `## Next Steps
@@ -346,6 +351,7 @@ var TRUNC = {
346
351
  BACKUP_PREVIEW_LINES: 5,
347
352
  FINGERPRINT_SEG: 2
348
353
  };
354
+ var LIKELY_ERROR_RE = /(?:command not found|no such file|permission denied|syntax error|cannot find|module not found|compilation error|build failed|test failed|^FAIL\b|ERROR:)/i;
349
355
  var METRICS_BUFFER_MAX = 200;
350
356
  var RUNTIME_LOG_MAX_BYTES = 5 * 1024 * 1024;
351
357
  var EXPLORER_SYSTEM_PROMPT = `You are a conversation analyst. You have deterministic extraction data and can query the raw conversation using tools.
@@ -421,6 +427,9 @@ function calibrationKey(provider, model) {
421
427
  }
422
428
 
423
429
  // src/utils/type-guards.ts
430
+ function isTextBlock(c) {
431
+ return typeof c === "object" && c !== null && c.type === "text" && typeof c.text === "string";
432
+ }
424
433
  var KNOWN_METHODS = new Set(["eesv", "single-pass", "heuristic"]);
425
434
  var KNOWN_PROFILES = new Set(["light", "balanced", "aggressive"]);
426
435
  var KNOWN_MODES = new Set(["balanced", "aggressive", "fast", "thorough"]);
@@ -440,37 +449,9 @@ var GENERIC_BASENAMES = new Set([
440
449
  "lib.rs",
441
450
  "__init__.py"
442
451
  ]);
443
- var MIN_BARE_BASENAME_LEN = 5;
444
452
  function normalizePath(filePath) {
445
453
  return filePath.replace(/\\/g, "/").replace(/^\.\//, "").toLowerCase();
446
454
  }
447
- function buildPathNeedles(filePath) {
448
- const parts = normalizePath(filePath).split("/").filter(Boolean);
449
- if (parts.length === 0)
450
- return [];
451
- const needles = [];
452
- const basename = parts[parts.length - 1];
453
- if (!GENERIC_BASENAMES.has(basename) && basename.length >= MIN_BARE_BASENAME_LEN) {
454
- needles.push(basename);
455
- }
456
- for (let j = parts.length - 2;j >= 0; j--) {
457
- needles.push(parts.slice(j).join("/"));
458
- }
459
- return needles;
460
- }
461
- function buildUniquePathNeedles(filePath, allPaths) {
462
- const normalized = allPaths.map(normalizePath);
463
- return buildPathNeedles(filePath).filter((needle) => {
464
- let owners = 0;
465
- for (const candidate of normalized) {
466
- if (candidate === needle || candidate.endsWith("/" + needle))
467
- owners++;
468
- if (owners > 1)
469
- return false;
470
- }
471
- return owners === 1;
472
- });
473
- }
474
455
  function isKnownPathReference(ref, knownPaths) {
475
456
  const normalizedRef = normalizePath(ref);
476
457
  return knownPaths.some((path) => {
@@ -514,6 +495,8 @@ function classifyHeading(raw) {
514
495
  return "files-modified";
515
496
  if (text.includes("file") && (text.includes("read") || text.includes("viewed")))
516
497
  return "files-read";
498
+ if (text.includes("file") && (text.includes("delet") || text.includes("remov")))
499
+ return "files-deleted";
517
500
  if (text.includes("next step") || text === "next actions")
518
501
  return "next-steps";
519
502
  if (text.includes("critical context") || text === "important context")
@@ -584,12 +567,25 @@ function findSection(summary, kind) {
584
567
  }
585
568
 
586
569
  // src/utils/extraction.ts
570
+ function extractText(content) {
571
+ if (typeof content === "string")
572
+ return content;
573
+ if (!Array.isArray(content))
574
+ return "";
575
+ return content.map((b) => {
576
+ if (typeof b === "string")
577
+ return b;
578
+ if (isTextBlock(b))
579
+ return b.text;
580
+ return "";
581
+ }).join("");
582
+ }
587
583
  var CONSTRAINT_PATTERNS = [
588
584
  { re: /\b(?:must|need|require|has to|important)\b.*\b(?:be|use|have|include|support)\b/i, cat: "requirement", conf: TUNING.CONFIDENCE_HIGH },
589
585
  { re: /\b(?:don't|never|avoid|shouldn't|must not|do not|no\s+(?:need|want))\b/i, cat: "prohibition", conf: TUNING.CONFIDENCE_MEDIUM },
590
586
  { re: /\b(?:prefer|like|want|would rather|should)\b.*\b(?:use|be|have|with)\b/i, cat: "preference", conf: TUNING.CONFIDENCE_LOW },
591
- { re: /(?<![A-Za-z0-9_])(?:kritik|kritikal|\u00F6nemli|onemli|\u015Fart|sart|zorunlu|\u015Fart ko\u015Ful|\u00F6nemli \u015Fart|kesinlikle|kesinlikle \u015Fart|asla|sak\u0131n|sak\u0131nha|bunu yapma|b\u00F6yle olsun|b\u00F6yle yap\u0131n|\u015F\u00F6yle olsun|\u015F\u00F6yle yap\u0131n)(?![A-Za-z0-9_])/iu, cat: "requirement", conf: TUNING.CONFIDENCE_MEDIUM },
592
- { re: /(?<![A-Za-z0-9_])(?:yapma|kullanma|sak\u0131n|asla\s+(?:kullanma|yapma|getirme))(?![A-Za-z0-9_])/iu, cat: "prohibition", conf: TUNING.CONFIDENCE_MEDIUM },
587
+ { re: /(?<![A-Za-z0-9_])(?:yapma|kullanma|sak\u0131n|sak\u0131nha|asla(?:\s+(?:kullanma|yapma|getirme))?|bunu yapma)(?![A-Za-z0-9_])/iu, cat: "prohibition", conf: TUNING.CONFIDENCE_MEDIUM },
588
+ { re: /(?<![A-Za-z0-9_])(?:kritik|kritikal|\u00F6nemli|onemli|\u015Fart|sart|zorunlu|\u015Fart ko\u015Ful|\u00F6nemli \u015Fart|kesinlikle|kesinlikle \u015Fart|b\u00F6yle olsun|b\u00F6yle yap\u0131n|\u015F\u00F6yle olsun|\u015F\u00F6yle yap\u0131n)(?![A-Za-z0-9_])/iu, cat: "requirement", conf: TUNING.CONFIDENCE_MEDIUM },
593
589
  { re: /(?<![A-Za-z0-9_])(?:tercih|isterim|olsun|kullanal\u0131m|yapal\u0131m|istiyorum)(?![A-Za-z0-9_])/iu, cat: "preference", conf: TUNING.CONFIDENCE_LOW }
594
590
  ];
595
591
  function isDiagnosticConstraintText(text) {
@@ -656,7 +652,6 @@ function readJsonlTail(target, limit, maxBytes = 512 * 1024) {
656
652
  }
657
653
  return values.slice(-limit);
658
654
  }
659
- var scheduledTailTrims = new Set;
660
655
 
661
656
  // src/infra/clock.ts
662
657
  var systemClock = {
@@ -741,6 +736,35 @@ function assertSuccessful(message) {
741
736
  }
742
737
  return message;
743
738
  }
739
+ async function withProviderDeadline(opts, invoke) {
740
+ if (opts.signal?.aborted)
741
+ throw new Error("LLM request aborted before dispatch");
742
+ const controller = new AbortController;
743
+ const watchdogMs = resolveCodexWatchdogMs(opts.maxTokens, opts.codexWatchdogMs);
744
+ const abort = Promise.withResolvers();
745
+ const abortFromCaller = () => {
746
+ controller.abort(opts.signal?.reason);
747
+ abort.reject(new Error("LLM request aborted by caller"));
748
+ };
749
+ opts.signal?.addEventListener("abort", abortFromCaller, { once: true });
750
+ const timeout = Promise.withResolvers();
751
+ const timer = setTimeout(() => {
752
+ controller.abort("provider-watchdog");
753
+ timeout.reject(new Error("Provider watchdog stopped generation after " + watchdogMs + "ms"));
754
+ }, watchdogMs);
755
+ if (typeof timer === "object" && "unref" in timer)
756
+ timer.unref();
757
+ try {
758
+ return await Promise.race([
759
+ invoke({ ...opts, signal: controller.signal }),
760
+ abort.promise,
761
+ timeout.promise
762
+ ]);
763
+ } finally {
764
+ clearTimeout(timer);
765
+ opts.signal?.removeEventListener("abort", abortFromCaller);
766
+ }
767
+ }
744
768
  async function completeChatGptCodex(model, body, opts) {
745
769
  const controller = new AbortController;
746
770
  const watchdogMs = resolveCodexWatchdogMs(opts.maxTokens, opts.codexWatchdogMs);
@@ -784,10 +808,12 @@ async function completeChatGptCodex(model, body, opts) {
784
808
  var rawLlmClient = {
785
809
  complete: async (model, body, originalOpts) => {
786
810
  const opts = withCodexWireLimit(model, originalOpts);
787
- if (isChatGptCodex(model))
788
- return completeChatGptCodex(model, body, opts);
789
- const response = opts.reasoning === undefined ? await (await resolveComplete())(model, body, opts) : await (await resolveCompleteSimple())(model, body, opts);
790
- return assertSuccessful(response);
811
+ return withProviderDeadline(opts, async (bounded) => {
812
+ if (isChatGptCodex(model))
813
+ return completeChatGptCodex(model, body, bounded);
814
+ const response = bounded.reasoning === undefined ? await (await resolveComplete())(model, body, bounded) : await (await resolveCompleteSimple())(model, body, bounded);
815
+ return assertSuccessful(response);
816
+ });
791
817
  }
792
818
  };
793
819
  var defaultLlmClient = rawLlmClient;
@@ -803,14 +829,23 @@ import crypto from "crypto";
803
829
  var SECRET_PATTERNS = [
804
830
  { kind: "private-key", regex: /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g },
805
831
  { kind: "aws-access-key", regex: /\bAKIA[0-9A-Z]{16}\b/g },
806
- { kind: "github-token", regex: /\bgh[pousr]_[A-Za-z0-9]{30,}\b/g },
832
+ { kind: "google-api-key", regex: /\bAIza[0-9A-Za-z_-]{30,}\b/g },
833
+ { kind: "stripe-key", regex: /\b[rs]k_(?:live|test)_[0-9A-Za-z]{16,}\b/g },
834
+ { kind: "gitlab-token", regex: /\bglpat-[0-9A-Za-z_-]{20,}\b/g },
835
+ { kind: "npm-token", regex: /\bnpm_[0-9A-Za-z]{30,}\b/g },
836
+ { kind: "github-token", regex: /\bgh[pousr]_[A-Za-z0-9]{20,}\b/g },
807
837
  { kind: "api-key", regex: /\bsk-(?:ant-)?[A-Za-z0-9_-]{20,}\b/g },
808
- { kind: "slack-token", regex: /\bxox[baprs]-[A-Za-z0-9-]{20,}\b/g },
838
+ { kind: "slack-token", regex: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g },
809
839
  { kind: "jwt", regex: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g },
810
- { kind: "bearer-token", regex: /\bBearer\s+[A-Za-z0-9._~+\/-]{24,}/gi, replacement: () => "Bearer [REDACTED:bearer-token]" },
840
+ { kind: "bearer-token", regex: /\bBearer\s+[A-Za-z0-9._~+\/-]{12,}=*/gi, replacement: () => "Bearer [REDACTED:bearer-token]" },
841
+ {
842
+ kind: "connection-password",
843
+ regex: /\b([a-z][a-z0-9+.-]*:\/\/[^:\s/@]+:)[^@\s/]+(@)/gi,
844
+ replacement: (prefix, suffix) => prefix + "[REDACTED:password]" + suffix
845
+ },
811
846
  {
812
847
  kind: "credential",
813
- regex: /\b(api[_-]?key|access[_-]?token|auth[_-]?token|token|password|passwd|secret)\s*([:=])\s*["']?([A-Za-z0-9._~+\/-]{16,})["']?/gi,
848
+ regex: /\b((?:[A-Za-z0-9]+[_-])*(?:api[_-]?key|access[_-]?token|auth[_-]?token|token|password|passwd|secret(?:[_-]?(?:access)?[_-]?key)?|client[_-]?secret)(?:[_-][A-Za-z0-9]+)*)\s*([:=])\s*["']?([^\s"']{16,})["']?/gi,
814
849
  replacement: (name, separator) => name + separator + "[REDACTED:credential]"
815
850
  }
816
851
  ];
@@ -838,6 +873,31 @@ function mergeFindings(target, findings) {
838
873
  for (const finding of findings)
839
874
  target.set(finding.kind, (target.get(finding.kind) ?? 0) + finding.count);
840
875
  }
876
+ var SECRET_KEY_NAMES = new Set([
877
+ "api_key",
878
+ "apikey",
879
+ "access_token",
880
+ "auth_token",
881
+ "authorization",
882
+ "password",
883
+ "passwd",
884
+ "secret",
885
+ "secret_key",
886
+ "secret_access_key",
887
+ "client_secret",
888
+ "private_key",
889
+ "database_url",
890
+ "connection_string"
891
+ ]);
892
+ function normalizeObjectKey(key) {
893
+ return key.replace(/([a-z0-9])([A-Z])/g, "$1_$2").toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
894
+ }
895
+ function isSecretBearingKey(key) {
896
+ const normalized = normalizeObjectKey(key);
897
+ if (SECRET_KEY_NAMES.has(normalized))
898
+ return true;
899
+ return /(?:^|_)(?:api_key|access_token|auth_token|password|passwd|secret_access_key|client_secret|private_key)(?:_|$)/.test(normalized);
900
+ }
841
901
 
842
902
  class SecretScrubber {
843
903
  secretsEnabled;
@@ -867,6 +927,10 @@ class SecretScrubber {
867
927
  scrubValue(input) {
868
928
  const findings = new Map;
869
929
  const seen = new WeakMap;
930
+ const recordCredential = () => {
931
+ findings.set("credential", (findings.get("credential") ?? 0) + 1);
932
+ this.total++;
933
+ };
870
934
  const visit = (value2) => {
871
935
  if (typeof value2 === "string") {
872
936
  const result = this.scrubText(value2);
@@ -887,8 +951,14 @@ class SecretScrubber {
887
951
  }
888
952
  const output = {};
889
953
  seen.set(value2, output);
890
- for (const [key, item] of Object.entries(value2))
891
- output[key] = visit(item);
954
+ for (const [key, item] of Object.entries(value2)) {
955
+ if (this.secretsEnabled && isSecretBearingKey(key) && typeof item === "string" && item.length > 0) {
956
+ output[key] = "[REDACTED:credential]";
957
+ recordCredential();
958
+ } else {
959
+ output[key] = visit(item);
960
+ }
961
+ }
892
962
  return output;
893
963
  };
894
964
  const value = visit(input);