audit-tools 0.32.44 → 0.32.46

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 (204) hide show
  1. package/dist/audit/cli/args.d.ts.map +1 -1
  2. package/dist/audit/cli/args.js +2 -4
  3. package/dist/audit/cli/args.js.map +1 -1
  4. package/dist/audit/cli/auditStep.d.ts +1 -1
  5. package/dist/audit/cli/dispatch.d.ts +1 -0
  6. package/dist/audit/cli/dispatch.d.ts.map +1 -1
  7. package/dist/audit/cli/dispatch.js +39 -18
  8. package/dist/audit/cli/dispatch.js.map +1 -1
  9. package/dist/audit/cli/mergeAndIngestCommand.d.ts +41 -0
  10. package/dist/audit/cli/mergeAndIngestCommand.d.ts.map +1 -1
  11. package/dist/audit/cli/mergeAndIngestCommand.js +105 -18
  12. package/dist/audit/cli/mergeAndIngestCommand.js.map +1 -1
  13. package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
  14. package/dist/audit/cli/nextStepCommand.js +3 -3
  15. package/dist/audit/cli/nextStepCommand.js.map +1 -1
  16. package/dist/audit/cli/nextStepHelpers.d.ts +23 -38
  17. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  18. package/dist/audit/cli/nextStepHelpers.js +130 -89
  19. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  20. package/dist/audit/cli/ownerTokens.d.ts +21 -0
  21. package/dist/audit/cli/ownerTokens.d.ts.map +1 -0
  22. package/dist/audit/cli/ownerTokens.js +86 -0
  23. package/dist/audit/cli/ownerTokens.js.map +1 -0
  24. package/dist/audit/cli/resynthesizeCommand.d.ts.map +1 -1
  25. package/dist/audit/cli/resynthesizeCommand.js +8 -10
  26. package/dist/audit/cli/resynthesizeCommand.js.map +1 -1
  27. package/dist/audit/cli/rollingAuditDispatch.d.ts.map +1 -1
  28. package/dist/audit/cli/rollingAuditDispatch.js +9 -22
  29. package/dist/audit/cli/rollingAuditDispatch.js.map +1 -1
  30. package/dist/audit/contracts/wrapperResponse.d.ts +6 -6
  31. package/dist/audit/extractors/gitHistory.d.ts.map +1 -1
  32. package/dist/audit/extractors/gitHistory.js +3 -0
  33. package/dist/audit/extractors/gitHistory.js.map +1 -1
  34. package/dist/audit/orchestrator/advance.d.ts +4 -1
  35. package/dist/audit/orchestrator/advance.d.ts.map +1 -1
  36. package/dist/audit/orchestrator/advance.js +185 -36
  37. package/dist/audit/orchestrator/advance.js.map +1 -1
  38. package/dist/audit/orchestrator/fileIntegrity.d.ts.map +1 -1
  39. package/dist/audit/orchestrator/fileIntegrity.js +21 -32
  40. package/dist/audit/orchestrator/fileIntegrity.js.map +1 -1
  41. package/dist/audit/orchestrator/reviewPackets.d.ts.map +1 -1
  42. package/dist/audit/orchestrator/reviewPackets.js +31 -36
  43. package/dist/audit/orchestrator/reviewPackets.js.map +1 -1
  44. package/dist/audit/orchestrator/taskBuilder.d.ts.map +1 -1
  45. package/dist/audit/orchestrator/taskBuilder.js +12 -24
  46. package/dist/audit/orchestrator/taskBuilder.js.map +1 -1
  47. package/dist/audit/providers/opencodeProvider.d.ts +1 -4
  48. package/dist/audit/providers/opencodeProvider.d.ts.map +1 -1
  49. package/dist/audit/providers/opencodeProvider.js +6 -9
  50. package/dist/audit/providers/opencodeProvider.js.map +1 -1
  51. package/dist/audit/reporting/mergeFindings.d.ts.map +1 -1
  52. package/dist/audit/reporting/mergeFindings.js +1 -32
  53. package/dist/audit/reporting/mergeFindings.js.map +1 -1
  54. package/dist/audit/reporting/synthesis.d.ts.map +1 -1
  55. package/dist/audit/reporting/synthesis.js +1 -12
  56. package/dist/audit/reporting/synthesis.js.map +1 -1
  57. package/dist/audit/supervisor/operatorHandoff.d.ts.map +1 -1
  58. package/dist/audit/supervisor/operatorHandoff.js +9 -12
  59. package/dist/audit/supervisor/operatorHandoff.js.map +1 -1
  60. package/dist/audit/supervisor/sessionConfig.d.ts.map +1 -1
  61. package/dist/audit/supervisor/sessionConfig.js +25 -35
  62. package/dist/audit/supervisor/sessionConfig.js.map +1 -1
  63. package/dist/audit/types/auditState.d.ts +6 -6
  64. package/dist/remediate/dedup/crossLensDedup.d.ts +2 -1
  65. package/dist/remediate/dedup/crossLensDedup.d.ts.map +1 -1
  66. package/dist/remediate/dedup/crossLensDedup.js +4 -33
  67. package/dist/remediate/dedup/crossLensDedup.js.map +1 -1
  68. package/dist/remediate/index.d.ts +2 -2
  69. package/dist/remediate/index.d.ts.map +1 -1
  70. package/dist/remediate/index.js +5 -8
  71. package/dist/remediate/index.js.map +1 -1
  72. package/dist/remediate/intake.d.ts.map +1 -1
  73. package/dist/remediate/intake.js +9 -5
  74. package/dist/remediate/intake.js.map +1 -1
  75. package/dist/remediate/phases/close.d.ts +59 -1
  76. package/dist/remediate/phases/close.d.ts.map +1 -1
  77. package/dist/remediate/phases/close.js +294 -29
  78. package/dist/remediate/phases/close.js.map +1 -1
  79. package/dist/remediate/phases/plan.d.ts +2 -2
  80. package/dist/remediate/phases/plan.d.ts.map +1 -1
  81. package/dist/remediate/phases/plan.js +31 -23
  82. package/dist/remediate/phases/plan.js.map +1 -1
  83. package/dist/remediate/providers/opencodeProvider.d.ts +1 -4
  84. package/dist/remediate/providers/opencodeProvider.d.ts.map +1 -1
  85. package/dist/remediate/providers/opencodeProvider.js +6 -9
  86. package/dist/remediate/providers/opencodeProvider.js.map +1 -1
  87. package/dist/remediate/state/store.d.ts +54 -11
  88. package/dist/remediate/state/store.d.ts.map +1 -1
  89. package/dist/remediate/state/store.js +37 -64
  90. package/dist/remediate/state/store.js.map +1 -1
  91. package/dist/remediate/state/types.d.ts +22 -0
  92. package/dist/remediate/state/types.d.ts.map +1 -1
  93. package/dist/remediate/state/types.js +8 -0
  94. package/dist/remediate/state/types.js.map +1 -1
  95. package/dist/remediate/steps/dispatch/acceptNode.d.ts +38 -0
  96. package/dist/remediate/steps/dispatch/acceptNode.d.ts.map +1 -1
  97. package/dist/remediate/steps/dispatch/acceptNode.js +70 -24
  98. package/dist/remediate/steps/dispatch/acceptNode.js.map +1 -1
  99. package/dist/remediate/steps/dispatch/marshal.d.ts.map +1 -1
  100. package/dist/remediate/steps/dispatch/marshal.js +30 -0
  101. package/dist/remediate/steps/dispatch/marshal.js.map +1 -1
  102. package/dist/remediate/steps/dispatch/worktreeLifecycle.d.ts.map +1 -1
  103. package/dist/remediate/steps/dispatch/worktreeLifecycle.js +42 -8
  104. package/dist/remediate/steps/dispatch/worktreeLifecycle.js.map +1 -1
  105. package/dist/remediate/steps/finalGate.d.ts +2 -2
  106. package/dist/remediate/steps/finalGate.d.ts.map +1 -1
  107. package/dist/remediate/steps/finalGate.js +8 -9
  108. package/dist/remediate/steps/finalGate.js.map +1 -1
  109. package/dist/remediate/steps/nextStep.d.ts +12 -0
  110. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  111. package/dist/remediate/steps/nextStep.js +57 -35
  112. package/dist/remediate/steps/nextStep.js.map +1 -1
  113. package/dist/remediate/steps/rollingSession.d.ts.map +1 -1
  114. package/dist/remediate/steps/rollingSession.js +27 -1
  115. package/dist/remediate/steps/rollingSession.js.map +1 -1
  116. package/dist/remediate/utils/fileIntegrity.d.ts.map +1 -1
  117. package/dist/remediate/utils/fileIntegrity.js +29 -33
  118. package/dist/remediate/utils/fileIntegrity.js.map +1 -1
  119. package/dist/remediate/utils/hostAssets.d.ts +4 -1
  120. package/dist/remediate/utils/hostAssets.d.ts.map +1 -1
  121. package/dist/remediate/utils/hostAssets.js +4 -1
  122. package/dist/remediate/utils/hostAssets.js.map +1 -1
  123. package/dist/remediate/validation/artifacts.d.ts.map +1 -1
  124. package/dist/remediate/validation/artifacts.js +3 -2
  125. package/dist/remediate/validation/artifacts.js.map +1 -1
  126. package/dist/remediate/validation/contractPipeline.d.ts.map +1 -1
  127. package/dist/remediate/validation/contractPipeline.js +3 -1
  128. package/dist/remediate/validation/contractPipeline.js.map +1 -1
  129. package/dist/shared/chunkByBudget.d.ts +58 -0
  130. package/dist/shared/chunkByBudget.d.ts.map +1 -0
  131. package/dist/shared/chunkByBudget.js +31 -0
  132. package/dist/shared/chunkByBudget.js.map +1 -0
  133. package/dist/shared/countBy.d.ts +19 -0
  134. package/dist/shared/countBy.d.ts.map +1 -0
  135. package/dist/shared/countBy.js +29 -0
  136. package/dist/shared/countBy.js.map +1 -0
  137. package/dist/shared/engine/obligationEngine.d.ts +2 -2
  138. package/dist/shared/fileIntegrity.d.ts +55 -0
  139. package/dist/shared/fileIntegrity.d.ts.map +1 -0
  140. package/dist/shared/fileIntegrity.js +50 -0
  141. package/dist/shared/fileIntegrity.js.map +1 -0
  142. package/dist/shared/findingSimilarity.d.ts +26 -0
  143. package/dist/shared/findingSimilarity.d.ts.map +1 -0
  144. package/dist/shared/findingSimilarity.js +54 -0
  145. package/dist/shared/findingSimilarity.js.map +1 -0
  146. package/dist/shared/friction/stepBoundaryCapture.d.ts +17 -0
  147. package/dist/shared/friction/stepBoundaryCapture.d.ts.map +1 -1
  148. package/dist/shared/friction/stepBoundaryCapture.js +21 -0
  149. package/dist/shared/friction/stepBoundaryCapture.js.map +1 -1
  150. package/dist/shared/git.d.ts +23 -0
  151. package/dist/shared/git.d.ts.map +1 -1
  152. package/dist/shared/git.js +26 -0
  153. package/dist/shared/git.js.map +1 -1
  154. package/dist/shared/index.d.ts +11 -4
  155. package/dist/shared/index.d.ts.map +1 -1
  156. package/dist/shared/index.js +22 -3
  157. package/dist/shared/index.js.map +1 -1
  158. package/dist/shared/io/auditToolsPaths.d.ts +7 -0
  159. package/dist/shared/io/auditToolsPaths.d.ts.map +1 -1
  160. package/dist/shared/io/auditToolsPaths.js +10 -0
  161. package/dist/shared/io/auditToolsPaths.js.map +1 -1
  162. package/dist/shared/io/lockedJsonStore.d.ts +66 -0
  163. package/dist/shared/io/lockedJsonStore.d.ts.map +1 -0
  164. package/dist/shared/io/lockedJsonStore.js +59 -0
  165. package/dist/shared/io/lockedJsonStore.js.map +1 -0
  166. package/dist/shared/loopCorePaths.d.ts.map +1 -1
  167. package/dist/shared/loopCorePaths.js +2 -0
  168. package/dist/shared/loopCorePaths.js.map +1 -1
  169. package/dist/shared/providers/openAiCompatibleProvider.d.ts.map +1 -1
  170. package/dist/shared/providers/openAiCompatibleProvider.js +2 -1
  171. package/dist/shared/providers/openAiCompatibleProvider.js.map +1 -1
  172. package/dist/shared/providers/opencodeProvider.d.ts +8 -0
  173. package/dist/shared/providers/opencodeProvider.d.ts.map +1 -1
  174. package/dist/shared/providers/opencodeProvider.js +10 -0
  175. package/dist/shared/providers/opencodeProvider.js.map +1 -1
  176. package/dist/shared/quota/claimRegistry.d.ts +9 -0
  177. package/dist/shared/quota/claimRegistry.d.ts.map +1 -1
  178. package/dist/shared/quota/claimRegistry.js +20 -0
  179. package/dist/shared/quota/claimRegistry.js.map +1 -1
  180. package/dist/shared/reporting/auditDeliverable.d.ts.map +1 -1
  181. package/dist/shared/reporting/auditDeliverable.js +14 -9
  182. package/dist/shared/reporting/auditDeliverable.js.map +1 -1
  183. package/dist/shared/tooling/exec.d.ts +42 -4
  184. package/dist/shared/tooling/exec.d.ts.map +1 -1
  185. package/dist/shared/tooling/exec.js +90 -12
  186. package/dist/shared/tooling/exec.js.map +1 -1
  187. package/dist/shared/types/contractPipeline/verification.d.ts +17 -3
  188. package/dist/shared/types/contractPipeline/verification.d.ts.map +1 -1
  189. package/dist/shared/types/sessionConfig.d.ts +28 -0
  190. package/dist/shared/types/sessionConfig.d.ts.map +1 -1
  191. package/dist/shared/types/sessionConfig.js +35 -0
  192. package/dist/shared/types/sessionConfig.js.map +1 -1
  193. package/opencode.json +2 -11
  194. package/package.json +2 -1
  195. package/scripts/audit/postinstall.mjs +57 -137
  196. package/scripts/remediate/postinstall.mjs +41 -169
  197. package/scripts/shared/install-host-assets.mjs +188 -0
  198. package/wrapper/audit-code-wrapper-lib.mjs +32 -4
  199. package/wrapper/audit-code-wrapper-opencode.mjs +41 -25
  200. package/wrapper/remediate-code-wrapper-opencode.mjs +43 -21
  201. package/dist/remediate/utils/commands.d.ts +0 -17
  202. package/dist/remediate/utils/commands.d.ts.map +0 -1
  203. package/dist/remediate/utils/commands.js +0 -29
  204. package/dist/remediate/utils/commands.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"countBy.d.ts","sourceRoot":"","sources":["../../src/shared/countBy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAClB,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,GACzC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Generic "count items by a derived key" reducer. Four independent
3
+ * reimplementations of this existed before the extraction: the audit
4
+ * synthesis summary breakdowns (severity/lens/grounding-status/runtime-status
5
+ * — src/audit/reporting/synthesis.ts, 4 call sites sharing one local
6
+ * `countBy`), the shared audit-deliverable renderer's severity/lens
7
+ * breakdowns (src/shared/reporting/auditDeliverable.ts), remediate's
8
+ * outcomes-report close-out (src/remediate/phases/close.ts), and remediate's
9
+ * findings digest (src/remediate/intake.ts). Single-sourced here so a future
10
+ * fifth breakdown doesn't reimplement it a fifth time.
11
+ *
12
+ * A `selectKey` returning `undefined` or `""` skips the item — it is never
13
+ * counted under an empty-string bucket. This matches the original
14
+ * synthesis.ts behavior (its `if (!key) continue;` guard), which some
15
+ * consumers rely on (e.g. the grounding-status breakdown, where most findings
16
+ * have no grounding verdict at all).
17
+ */
18
+ export function countBy(items, selectKey) {
19
+ const breakdown = {};
20
+ for (const item of items) {
21
+ const key = selectKey(item);
22
+ if (!key) {
23
+ continue;
24
+ }
25
+ breakdown[key] = (breakdown[key] ?? 0) + 1;
26
+ }
27
+ return breakdown;
28
+ }
29
+ //# sourceMappingURL=countBy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"countBy.js","sourceRoot":"","sources":["../../src/shared/countBy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,OAAO,CACrB,KAAkB,EAClB,SAA0C;IAE1C,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -31,11 +31,11 @@ export declare const ObligationSchema: z.ZodObject<{
31
31
  reason: z.ZodOptional<z.ZodString>;
32
32
  }, "strict", z.ZodTypeAny, {
33
33
  id: string;
34
- state: "blocked" | "satisfied" | "missing" | "present" | "stale";
34
+ state: "blocked" | "missing" | "satisfied" | "present" | "stale";
35
35
  reason?: string | undefined;
36
36
  }, {
37
37
  id: string;
38
- state: "blocked" | "satisfied" | "missing" | "present" | "stale";
38
+ state: "blocked" | "missing" | "satisfied" | "present" | "stale";
39
39
  reason?: string | undefined;
40
40
  }>;
41
41
  export type Obligation = z.infer<typeof ObligationSchema>;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Generic file-integrity check loop — the common core of audit-code's
3
+ * `checkFileIntegrity` (flat repo-manifest scope) and remediate-code's
4
+ * `checkAffectedFileIntegrity` (finding-affected-files scope). Both iterate a
5
+ * list of records carrying a stored/expected hash, resolve each to an absolute
6
+ * path, classify it as unchanged / changed / missing / an I/O error, and derive
7
+ * `is_clean` from the three buckets. What genuinely differs per side — the
8
+ * record shape, path resolution, how a file/directory is actually hashed, and
9
+ * the I/O-error reporting format — stays with the caller via the injected
10
+ * `resolveAbsolute` / `exists` / `hash` hooks; this module owns only the shared
11
+ * classify-and-bucket loop.
12
+ */
13
+ export interface FileIntegrityBuckets {
14
+ changed: string[];
15
+ missing: string[];
16
+ ioErrors: string[];
17
+ isClean: boolean;
18
+ }
19
+ /**
20
+ * Outcome of hashing one record's resolved path, reported back to the loop:
21
+ * - `ok` — the file was read; compare `hash` against the record's expected hash.
22
+ * - `missing` — the path turned out to be absent (e.g. a race between the
23
+ * caller's `exists` pre-check and the actual read).
24
+ * - `io_error` — a real read failure (not "absent"). The caller is responsible
25
+ * for reporting/logging it in its own format before returning this outcome.
26
+ */
27
+ export type FileIntegrityHashOutcome = {
28
+ kind: "ok";
29
+ hash: string;
30
+ } | {
31
+ kind: "missing";
32
+ } | {
33
+ kind: "io_error";
34
+ };
35
+ export interface FileIntegrityCheckOptions<T> {
36
+ /** Records to check (already scoped/deduped by the caller). */
37
+ records: Iterable<T>;
38
+ /** Display path recorded into the changed/missing/io_errors buckets. */
39
+ getPath: (record: T) => string;
40
+ /** The record's stored/expected hash. Records without one are skipped entirely. */
41
+ getExpectedHash: (record: T) => string | undefined;
42
+ /** Resolve the record's display path to an absolute filesystem path. */
43
+ resolveAbsolute: (path: string) => string;
44
+ /** Synchronous existence check, run before attempting to hash. */
45
+ exists: (absolutePath: string) => boolean;
46
+ /** Hash the resolved path, classifying any failure per {@link FileIntegrityHashOutcome}. */
47
+ hash: (absolutePath: string, record: T) => Promise<FileIntegrityHashOutcome>;
48
+ }
49
+ /**
50
+ * Iterate `records`, classify each into changed / missing / io_errors against
51
+ * its expected hash, and derive `isClean`. Ordering follows iteration order of
52
+ * `records` (callers are responsible for any stable pre-sort/dedup).
53
+ */
54
+ export declare function checkFileIntegrityRecords<T>(options: FileIntegrityCheckOptions<T>): Promise<FileIntegrityBuckets>;
55
+ //# sourceMappingURL=fileIntegrity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileIntegrity.d.ts","sourceRoot":"","sources":["../../src/shared/fileIntegrity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzB,MAAM,WAAW,yBAAyB,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,wEAAwE;IACxE,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,mFAAmF;IACnF,eAAe,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IACnD,wEAAwE;IACxE,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,kEAAkE;IAClE,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,4FAA4F;IAC5F,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC9E;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,oBAAoB,CAAC,CAgC/B"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Generic file-integrity check loop — the common core of audit-code's
3
+ * `checkFileIntegrity` (flat repo-manifest scope) and remediate-code's
4
+ * `checkAffectedFileIntegrity` (finding-affected-files scope). Both iterate a
5
+ * list of records carrying a stored/expected hash, resolve each to an absolute
6
+ * path, classify it as unchanged / changed / missing / an I/O error, and derive
7
+ * `is_clean` from the three buckets. What genuinely differs per side — the
8
+ * record shape, path resolution, how a file/directory is actually hashed, and
9
+ * the I/O-error reporting format — stays with the caller via the injected
10
+ * `resolveAbsolute` / `exists` / `hash` hooks; this module owns only the shared
11
+ * classify-and-bucket loop.
12
+ */
13
+ /**
14
+ * Iterate `records`, classify each into changed / missing / io_errors against
15
+ * its expected hash, and derive `isClean`. Ordering follows iteration order of
16
+ * `records` (callers are responsible for any stable pre-sort/dedup).
17
+ */
18
+ export async function checkFileIntegrityRecords(options) {
19
+ const changed = [];
20
+ const missing = [];
21
+ const ioErrors = [];
22
+ for (const record of options.records) {
23
+ const expectedHash = options.getExpectedHash(record);
24
+ if (!expectedHash)
25
+ continue;
26
+ const path = options.getPath(record);
27
+ const absolute = options.resolveAbsolute(path);
28
+ if (!options.exists(absolute)) {
29
+ missing.push(path);
30
+ continue;
31
+ }
32
+ const outcome = await options.hash(absolute, record);
33
+ if (outcome.kind === "missing") {
34
+ missing.push(path);
35
+ }
36
+ else if (outcome.kind === "io_error") {
37
+ ioErrors.push(path);
38
+ }
39
+ else if (outcome.hash !== expectedHash) {
40
+ changed.push(path);
41
+ }
42
+ }
43
+ return {
44
+ changed,
45
+ missing,
46
+ ioErrors,
47
+ isClean: changed.length === 0 && missing.length === 0 && ioErrors.length === 0,
48
+ };
49
+ }
50
+ //# sourceMappingURL=fileIntegrity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileIntegrity.js","sourceRoot":"","sources":["../../src/shared/fileIntegrity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqCH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAqC;IAErC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO;QACP,OAAO;QACP,QAAQ;QACR,OAAO,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;KAC/E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Text/file-similarity primitives for the fuzzy ("similar enough to merge")
3
+ * dedup tier. Byte-identical copies of these four helpers lived in both
4
+ * halves of the pipeline — the auditor's same-lens/cross-lens merge passes
5
+ * (src/audit/reporting/mergeFindings.ts) and the remediator's cross-lens
6
+ * dedup (src/remediate/dedup/crossLensDedup.ts) — sitting right alongside
7
+ * the severityRank/confidenceRank/findingIdentityKey imports both already
8
+ * pulled from `audit-tools/shared`. Single-sourced here so the two fuzzy
9
+ * layers can never silently drift on what "similar enough" means.
10
+ *
11
+ * Deliberately separate from findingIdentitySignature.ts: that module owns
12
+ * the deterministic EXACT-match identity ladder; this one is the fuzzy layer
13
+ * consulted only when the exact-match signature does not already collapse
14
+ * two findings.
15
+ */
16
+ import type { Finding } from "./types/finding.js";
17
+ /**
18
+ * Jaccard similarity (0..1) of the whitespace-tokenized, case-folded,
19
+ * punctuation-stripped word sets of `a` and `b`.
20
+ */
21
+ export declare function wordJaccard(a: string, b: string): number;
22
+ /** Jaccard overlap (0..1) of two findings' affected-file path sets. */
23
+ export declare function filePathOverlap(a: Finding, b: Finding): number;
24
+ /** A finding's primary (first-listed) affected-file path, or "" when none. */
25
+ export declare function primaryPath(finding: Finding): string;
26
+ //# sourceMappingURL=findingSimilarity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findingSimilarity.d.ts","sourceRoot":"","sources":["../../src/shared/findingSimilarity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAYlD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CASxD;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAS9D;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Text/file-similarity primitives for the fuzzy ("similar enough to merge")
3
+ * dedup tier. Byte-identical copies of these four helpers lived in both
4
+ * halves of the pipeline — the auditor's same-lens/cross-lens merge passes
5
+ * (src/audit/reporting/mergeFindings.ts) and the remediator's cross-lens
6
+ * dedup (src/remediate/dedup/crossLensDedup.ts) — sitting right alongside
7
+ * the severityRank/confidenceRank/findingIdentityKey imports both already
8
+ * pulled from `audit-tools/shared`. Single-sourced here so the two fuzzy
9
+ * layers can never silently drift on what "similar enough" means.
10
+ *
11
+ * Deliberately separate from findingIdentitySignature.ts: that module owns
12
+ * the deterministic EXACT-match identity ladder; this one is the fuzzy layer
13
+ * consulted only when the exact-match signature does not already collapse
14
+ * two findings.
15
+ */
16
+ function wordSet(text) {
17
+ return new Set(text
18
+ .toLowerCase()
19
+ .replace(/[^a-z0-9\s]/g, " ")
20
+ .split(/\s+/)
21
+ .filter(Boolean));
22
+ }
23
+ /**
24
+ * Jaccard similarity (0..1) of the whitespace-tokenized, case-folded,
25
+ * punctuation-stripped word sets of `a` and `b`.
26
+ */
27
+ export function wordJaccard(a, b) {
28
+ const sa = wordSet(a);
29
+ const sb = wordSet(b);
30
+ let intersection = 0;
31
+ for (const w of sa) {
32
+ if (sb.has(w))
33
+ intersection++;
34
+ }
35
+ const union = sa.size + sb.size - intersection;
36
+ return union === 0 ? 0 : intersection / union;
37
+ }
38
+ /** Jaccard overlap (0..1) of two findings' affected-file path sets. */
39
+ export function filePathOverlap(a, b) {
40
+ const setA = new Set(a.affected_files.map((f) => f.path));
41
+ const setB = new Set(b.affected_files.map((f) => f.path));
42
+ let intersection = 0;
43
+ for (const path of setA) {
44
+ if (setB.has(path))
45
+ intersection++;
46
+ }
47
+ const union = setA.size + setB.size - intersection;
48
+ return union === 0 ? 0 : intersection / union;
49
+ }
50
+ /** A finding's primary (first-listed) affected-file path, or "" when none. */
51
+ export function primaryPath(finding) {
52
+ return finding.affected_files[0]?.path ?? "";
53
+ }
54
+ //# sourceMappingURL=findingSimilarity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findingSimilarity.js","sourceRoot":"","sources":["../../src/shared/findingSimilarity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,GAAG,CACZ,IAAI;SACD,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,OAAO,CAAC,CACnB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,CAAS;IAC9C,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,YAAY,EAAE,CAAC;IAChC,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,YAAY,CAAC;IAC/C,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC;AAChD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,eAAe,CAAC,CAAU,EAAE,CAAU;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,YAAY,EAAE,CAAC;IACrC,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IACnD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC;AAChD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;AAC/C,CAAC"}
@@ -99,4 +99,21 @@ export interface StepBoundaryFriction {
99
99
  * retry, re-derive) never double-count the same fact (INV-O1-6).
100
100
  */
101
101
  export declare function captureStepBoundaryFriction(artifactsDir: string, runId: string, fact: StepBoundaryFriction, tool: FrictionCaptureArtifact["tool"]): Promise<void>;
102
+ /** Reactive cost-drift facts routed through {@link captureCostDriftFriction}. */
103
+ export interface CostDriftInfo {
104
+ poolId: string;
105
+ observedCostUsd: number;
106
+ declaredCostPerMtok: number;
107
+ }
108
+ /**
109
+ * Route a reactive cost-drift demotion (a dispatch pool declared free —
110
+ * `cost_per_mtok:0` — that started reporting a positive cost, so the rolling
111
+ * engine demoted it out of free-first ordering) through the step-boundary
112
+ * chokepoint as a `declared_cost_drift` fact. Both orchestrators' rolling
113
+ * dispatch wiring (`onCostDrift`) is byte-identical apart from the trailing
114
+ * `source` tool tag; this single-sources the eventType/note/severity/area
115
+ * template so they cannot drift. Fire-and-forget, like the call sites it
116
+ * replaces — never awaited by the caller.
117
+ */
118
+ export declare function captureCostDriftFriction(artifactsDir: string, runId: string, info: CostDriftInfo, source: FrictionCaptureArtifact["tool"]): void;
102
119
  //# sourceMappingURL=stepBoundaryCapture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stepBoundaryCapture.d.ts","sourceRoot":"","sources":["../../../src/shared/friction/stepBoundaryCapture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,MAAM,qBAAqB,GAC7B,cAAc,GACd,mBAAmB,GACnB,cAAc,GACd,sBAAsB,GACtB,iBAAiB,GACjB,sBAAsB,GACtB,kBAAkB,GAClB,+BAA+B,GAC/B,iBAAiB,GACjB,qBAAqB,GACrB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAmClB;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,qBAAqB,GAC/B,gBAAgB,CAElB;AAgBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,qBAAqB,EAChC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,MAAM,CAIR;AAED,kEAAkE;AAClE,MAAM,WAAW,oBAAoB;IACnC,8EAA8E;IAC9E,SAAS,EAAE,qBAAqB,CAAC;IACjC;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,oBAAoB,EAC1B,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
1
+ {"version":3,"file":"stepBoundaryCapture.d.ts","sourceRoot":"","sources":["../../../src/shared/friction/stepBoundaryCapture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,MAAM,qBAAqB,GAC7B,cAAc,GACd,mBAAmB,GACnB,cAAc,GACd,sBAAsB,GACtB,iBAAiB,GACjB,sBAAsB,GACtB,kBAAkB,GAClB,+BAA+B,GAC/B,iBAAiB,GACjB,qBAAqB,GACrB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAmClB;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,qBAAqB,GAC/B,gBAAgB,CAElB;AAgBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,qBAAqB,EAChC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,MAAM,CAIR;AAED,kEAAkE;AAClE,MAAM,WAAW,oBAAoB;IACnC,8EAA8E;IAC9E,SAAS,EAAE,qBAAqB,CAAC;IACjC;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,oBAAoB,EAC1B,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,uBAAuB,CAAC,MAAM,CAAC,GACtC,IAAI,CAgBN"}
@@ -88,4 +88,25 @@ export async function captureStepBoundaryFriction(artifactsDir, runId, fact, too
88
88
  };
89
89
  await captureFrictionEvent(artifactsDir, runId, event, tool);
90
90
  }
91
+ /**
92
+ * Route a reactive cost-drift demotion (a dispatch pool declared free —
93
+ * `cost_per_mtok:0` — that started reporting a positive cost, so the rolling
94
+ * engine demoted it out of free-first ordering) through the step-boundary
95
+ * chokepoint as a `declared_cost_drift` fact. Both orchestrators' rolling
96
+ * dispatch wiring (`onCostDrift`) is byte-identical apart from the trailing
97
+ * `source` tool tag; this single-sources the eventType/note/severity/area
98
+ * template so they cannot drift. Fire-and-forget, like the call sites it
99
+ * replaces — never awaited by the caller.
100
+ */
101
+ export function captureCostDriftFriction(artifactsDir, runId, info, source) {
102
+ void captureStepBoundaryFriction(artifactsDir, runId, {
103
+ eventType: "declared_cost_drift",
104
+ discriminator: info.poolId,
105
+ note: `pool "${info.poolId}" was declared free (cost_per_mtok=${info.declaredCostPerMtok}) ` +
106
+ `but reported cost=${info.observedCostUsd} — demoted out of free-first ordering; ` +
107
+ `reconcile the source's declared cost.`,
108
+ severity: "medium",
109
+ area: "dispatch/cost",
110
+ }, source);
111
+ }
91
112
  //# sourceMappingURL=stepBoundaryCapture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stepBoundaryCapture.js","sourceRoot":"","sources":["../../../src/shared/friction/stepBoundaryCapture.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAsB,MAAM,2BAA2B,CAAC;AAqErF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,sBAAsB,GAAqC;IAC/D,YAAY,EAAE,qBAAqB;IACnC,YAAY,EAAE,qBAAqB;IACnC,oBAAoB,EAAE,qBAAqB;IAC3C,eAAe,EAAE,qBAAqB;IACtC,gBAAgB,EAAE,qBAAqB;IACvC,6BAA6B,EAAE,qBAAqB;IACpD,iBAAiB,EAAE,oBAAoB;IACvC,oBAAoB,EAAE,oBAAoB;IAC1C,eAAe,EAAE,oBAAoB;IACrC,iFAAiF;IACjF,+EAA+E;IAC/E,mBAAmB,EAAE,oBAAoB;CAC1C,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,SAAgC;IAEhC,OAAO,sBAAsB,CAAC,SAAS,CAAC,IAAI,qBAAqB,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CACtC,OAAO,EACP,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CACxD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAgC,EAChC,KAAa,EACb,aAAqB;IAErB,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC;SACrC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SACtC,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AA0BD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,YAAoB,EACpB,KAAa,EACb,IAA0B,EAC1B,IAAqC;IAErC,MAAM,KAAK,GAAkB;QAC3B,EAAE,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC;QAClE,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,0EAA0E;QAC1E,8EAA8E;QAC9E,6EAA6E;QAC7E,8EAA8E;QAC9E,8EAA8E;QAC9E,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM;QACjC,gBAAgB,EAAE,4BAA4B,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9D,8EAA8E;QAC9E,8EAA8E;QAC9E,iFAAiF;QACjF,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa;QAC1D,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;IACF,MAAM,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"stepBoundaryCapture.js","sourceRoot":"","sources":["../../../src/shared/friction/stepBoundaryCapture.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAsB,MAAM,2BAA2B,CAAC;AAqErF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,sBAAsB,GAAqC;IAC/D,YAAY,EAAE,qBAAqB;IACnC,YAAY,EAAE,qBAAqB;IACnC,oBAAoB,EAAE,qBAAqB;IAC3C,eAAe,EAAE,qBAAqB;IACtC,gBAAgB,EAAE,qBAAqB;IACvC,6BAA6B,EAAE,qBAAqB;IACpD,iBAAiB,EAAE,oBAAoB;IACvC,oBAAoB,EAAE,oBAAoB;IAC1C,eAAe,EAAE,oBAAoB;IACrC,iFAAiF;IACjF,+EAA+E;IAC/E,mBAAmB,EAAE,oBAAoB;CAC1C,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,SAAgC;IAEhC,OAAO,sBAAsB,CAAC,SAAS,CAAC,IAAI,qBAAqB,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CACtC,OAAO,EACP,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CACxD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAgC,EAChC,KAAa,EACb,aAAqB;IAErB,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC;SACrC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SACtC,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AA0BD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,YAAoB,EACpB,KAAa,EACb,IAA0B,EAC1B,IAAqC;IAErC,MAAM,KAAK,GAAkB;QAC3B,EAAE,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC;QAClE,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,0EAA0E;QAC1E,8EAA8E;QAC9E,6EAA6E;QAC7E,8EAA8E;QAC9E,8EAA8E;QAC9E,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM;QACjC,gBAAgB,EAAE,4BAA4B,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9D,8EAA8E;QAC9E,8EAA8E;QAC9E,iFAAiF;QACjF,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa;QAC1D,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;IACF,MAAM,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC;AASD;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CACtC,YAAoB,EACpB,KAAa,EACb,IAAmB,EACnB,MAAuC;IAEvC,KAAK,2BAA2B,CAC9B,YAAY,EACZ,KAAK,EACL;QACE,SAAS,EAAE,qBAAqB;QAChC,aAAa,EAAE,IAAI,CAAC,MAAM;QAC1B,IAAI,EACF,SAAS,IAAI,CAAC,MAAM,sCAAsC,IAAI,CAAC,mBAAmB,IAAI;YACtF,qBAAqB,IAAI,CAAC,eAAe,yCAAyC;YAClF,uCAAuC;QACzC,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,eAAe;KACtB,EACD,MAAM,CACP,CAAC;AACJ,CAAC"}
@@ -42,17 +42,40 @@ export interface GitHistory {
42
42
  co_change: CoChangePair[];
43
43
  churn: ChurnEntry[];
44
44
  authorship: AuthorshipEntry[];
45
+ /**
46
+ * Count of in-window commits whose file count exceeded
47
+ * `maxCoChangeFilesPerCommit` and were therefore SKIPPED for co-change pair
48
+ * expansion (churn/authorship still counted them — only pairing was
49
+ * skipped). Optional so existing `GitHistory` literals built by other
50
+ * callers (e.g. the audit extractor's in-scope filter, the no-root
51
+ * fallback) remain valid without updating — this field is additive.
52
+ * Absent/`undefined` means "no commit was skipped" (equivalent to `0`).
53
+ */
54
+ skipped_cochange_commits?: number;
45
55
  }
46
56
  export interface MineGitHistoryOptions {
47
57
  /** Cap on commits scanned, newest first (bounds cost on large repos). */
48
58
  maxCommits?: number;
49
59
  /** Minimum shared-commit count for a co-change pair to be reported. */
50
60
  minCoChangeCommits?: number;
61
+ /**
62
+ * Cap on files touched by a single commit before it is skipped for
63
+ * co-change pair expansion (bounds the O(files^2) blow-up a single wide
64
+ * commit — a vendor/format/rename sweep — would otherwise cause). A commit
65
+ * touching more files than this carries almost no per-pair signal anyway
66
+ * (any two files it "explains" are also very likely explained by other,
67
+ * narrower commits), so skipping it loses little while capping cost.
68
+ */
69
+ maxCoChangeFilesPerCommit?: number;
51
70
  }
52
71
  /**
53
72
  * Mine deterministic git-history signals from `root`'s commit log:
54
73
  * - **co_change**: file pairs that changed in the same commit, counted across
55
74
  * history (a temporal-coupling signal), filtered by `minCoChangeCommits`.
75
+ * A commit touching more than `maxCoChangeFilesPerCommit` files is SKIPPED
76
+ * for pair expansion entirely (churn/authorship still see it) — bounds the
77
+ * per-commit O(files^2) cost; `skipped_cochange_commits` on the result
78
+ * counts how many commits this affected.
56
79
  * - **churn**: per-file commit-touch frequency.
57
80
  * - **authorship**: per-file distinct-author count (a bus-factor signal).
58
81
  *
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/shared/git.ts"],"names":[],"mappings":"AAmBA,qDAAqD;AACrD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAM/D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQtD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAElE;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAEnE;AA8CD,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,qBAA0B,GAClC,UAAU,CAiFZ;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAazD"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/shared/git.ts"],"names":[],"mappings":"AAmBA,qDAAqD;AACrD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAM/D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQtD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAElE;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAEnE;AA8CD,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B;;;;;;;;OAQG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;OAOG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC;AAaD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,qBAA0B,GAClC,UAAU,CAgGZ;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAazD"}
@@ -99,10 +99,22 @@ function parseCommitRecords(stdout) {
99
99
  }
100
100
  const DEFAULT_MAX_COMMITS = 1000;
101
101
  const DEFAULT_MIN_CO_CHANGE_COMMITS = 2;
102
+ /**
103
+ * See `MineGitHistoryOptions.maxCoChangeFilesPerCommit` for rationale. 100 is
104
+ * generous for ordinary commits (which touch a handful of files) while
105
+ * cutting off the O(n^2) pair count (100^2 = 10_000 pairs) well before a
106
+ * repo-wide reformat/vendor-drop commit (which can touch thousands of files,
107
+ * i.e. millions of pairs) turns co-change mining into a memory/CPU cliff.
108
+ */
109
+ const DEFAULT_MAX_COCHANGE_FILES_PER_COMMIT = 100;
102
110
  /**
103
111
  * Mine deterministic git-history signals from `root`'s commit log:
104
112
  * - **co_change**: file pairs that changed in the same commit, counted across
105
113
  * history (a temporal-coupling signal), filtered by `minCoChangeCommits`.
114
+ * A commit touching more than `maxCoChangeFilesPerCommit` files is SKIPPED
115
+ * for pair expansion entirely (churn/authorship still see it) — bounds the
116
+ * per-commit O(files^2) cost; `skipped_cochange_commits` on the result
117
+ * counts how many commits this affected.
106
118
  * - **churn**: per-file commit-touch frequency.
107
119
  * - **authorship**: per-file distinct-author count (a bus-factor signal).
108
120
  *
@@ -117,6 +129,7 @@ export function mineGitHistory(root, options = {}) {
117
129
  return empty;
118
130
  const maxCommits = options.maxCommits ?? DEFAULT_MAX_COMMITS;
119
131
  const minCoChange = options.minCoChangeCommits ?? DEFAULT_MIN_CO_CHANGE_COMMITS;
132
+ const maxCoChangeFiles = options.maxCoChangeFilesPerCommit ?? DEFAULT_MAX_COCHANGE_FILES_PER_COMMIT;
120
133
  const result = runTracked([
121
134
  "git",
122
135
  "log",
@@ -139,6 +152,7 @@ export function mineGitHistory(root, options = {}) {
139
152
  const churn = new Map();
140
153
  const authors = new Map();
141
154
  const coChange = new Map();
155
+ let skippedCoChangeCommits = 0;
142
156
  for (const record of records) {
143
157
  // Dedup files within a commit so a rename/edit pair cannot double-count.
144
158
  const files = [...new Set(record.files)].sort();
@@ -152,6 +166,15 @@ export function mineGitHistory(root, options = {}) {
152
166
  if (record.author.length > 0)
153
167
  authorSet.add(record.author);
154
168
  }
169
+ // Pair expansion is O(files^2); a commit touching more than
170
+ // maxCoChangeFiles is SKIPPED ENTIRELY for pairing (never a truncated
171
+ // subset — a biased subset of an oversized commit's files would produce
172
+ // arbitrary, order-dependent pairs, which is worse than reporting none).
173
+ // Churn/authorship above are unaffected: every touched file still counts.
174
+ if (files.length > maxCoChangeFiles) {
175
+ skippedCoChangeCommits += 1;
176
+ continue;
177
+ }
155
178
  for (let i = 0; i < files.length; i += 1) {
156
179
  for (let j = i + 1; j < files.length; j += 1) {
157
180
  // a < b guaranteed by the sort above, so the pair key is canonical.
@@ -179,6 +202,9 @@ export function mineGitHistory(root, options = {}) {
179
202
  co_change: coChangeList,
180
203
  churn: churnList,
181
204
  authorship: authorshipList,
205
+ ...(skippedCoChangeCommits > 0
206
+ ? { skipped_cochange_commits: skippedCoChangeCommits }
207
+ : {}),
182
208
  };
183
209
  }
184
210
  /** Working-tree changes vs HEAD plus untracked (non-ignored) files. */
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/shared/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/shared/git.ts"],"names":[],"mappings":"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"}
@@ -49,7 +49,7 @@ export { detectRepoConventions, formatRepoConventions, } from "./tooling/repoCon
49
49
  export type { StepStatus, DispatchModelTier, DispatchModelHint, } from "./types/stepContract.js";
50
50
  export { StepStatusSchema, DispatchModelTierSchema, } from "./types/stepContract.js";
51
51
  export type { ProviderName, ResolvedProviderName, SessionUiMode, SubprocessTemplateConfig, ClaudeCodeConfig, CodexConfig, OpenCodeConfig, OpenAiCompatibleConfig, DispatchableSource, DispatchableSourceProvider, VSCodeTaskConfig, AntigravityConfig, BlockQuotaConfig, QuotaModelLimits, QuotaConfig, ObservabilityConfig, SynthesisConfig, GraphConfig, DispatchRoutingTiers, DispatchConfig, DesignReviewConfig, AnalyzerSetting, SessionConfig, } from "./types/sessionConfig.js";
52
- export { PROVIDER_NAMES, SESSION_UI_MODES, PROVIDER_SECTION_KEYS, DISPATCHABLE_SOURCE_PROVIDERS, ANALYZER_SETTINGS, AnalyzerSettingSchema, resolveHostDispatchCapability, } from "./types/sessionConfig.js";
52
+ export { PROVIDER_NAMES, SESSION_UI_MODES, PROVIDER_SECTION_KEYS, DISPATCHABLE_SOURCE_PROVIDERS, ANALYZER_SETTINGS, AnalyzerSettingSchema, resolveHostDispatchCapability, resolveRollingEngineFlag, assertHostProviderName, } from "./types/sessionConfig.js";
53
53
  export { AUDITOR_REPORT_MARKER } from "./contracts.js";
54
54
  export { OPENCODE_MANAGED_BROAD_VALUE, withoutOpenCodeWildcard, mergeOpenCodeAgentPermissionRule, mergeOpenCodeGlobalPermissionRule, migrateOpenCodeGlobalExternalDirectory, unionOpenCodeBashCeiling, composeOpenCodeBashCeiling, verifyOpenCodeBashCeiling, } from "./opencodePermissions.js";
55
55
  export type { OpenCodeCeilingViolation } from "./opencodePermissions.js";
@@ -60,12 +60,17 @@ export type { AuditDeliverablePair } from "./reporting/auditDeliverable.js";
60
60
  export { buildAuditFindingsDeliverable, renderAuditDeliverableMarkdown, buildAuditDeliverablePair, } from "./reporting/auditDeliverable.js";
61
61
  export { AGENT_FEEDBACK_FILENAME, parseReflectionsNdjson, aggregateReflections, renderProcessFeedbackSection, ReflectionClaritySchema, ReflectionSeveritySchema, AgentReflectionSchema, } from "./agentReflections.js";
62
62
  export { DEFAULT_CONTEXT_TOKENS, DEFAULT_OUTPUT_TOKENS, BLOCK_SAFETY_MARGIN, BYTES_PER_TOKEN, ESTIMATED_TOKENS_PER_LINE, ESTIMATED_PROMPT_OVERHEAD_TOKENS, ESTIMATED_ITEM_OVERHEAD_TOKENS, estimateTokensFromBytes, resolveContextBudget, } from "./tokens.js";
63
+ export { countBy } from "./countBy.js";
64
+ export { chunkByBudget } from "./chunkByBudget.js";
63
65
  export { mapWithConcurrency } from "./concurrency.js";
64
66
  export { mintUniqueId } from "./ids.js";
65
67
  export type { FindingIdentityFields } from "./findingIdentitySignature.js";
66
68
  export { normalizeAnchorPath, normalizeTitle, findingIdentitySignature, findingIdentityFields, findingIdentityKey, } from "./findingIdentitySignature.js";
69
+ export { wordJaccard, filePathOverlap, primaryPath, } from "./findingSimilarity.js";
67
70
  export type { HashContentOptions } from "./hash.js";
68
71
  export { hashContent } from "./hash.js";
72
+ export type { FileIntegrityBuckets, FileIntegrityHashOutcome, FileIntegrityCheckOptions, } from "./fileIntegrity.js";
73
+ export { checkFileIntegrityRecords } from "./fileIntegrity.js";
69
74
  export { stableStringify } from "./stableStringify.js";
70
75
  export type { IdentityKeyInput, TaskContentSignatureInput, ResultEmitSource, ResultContentDiscriminatorInput, IdempotencyKeyInput, ContentKeyInput, } from "./contentKey.js";
71
76
  export { buildTaskContentSignature, buildResultContentDiscriminator, resultDiscriminatorForEmit, canonicalSplitDiscriminator, splitDiscriminatorFromTaskId, identityKey, idempotencyKey, contentKey, newInstanceId, } from "./contentKey.js";
@@ -84,14 +89,16 @@ export type { GitHistory, CoChangePair, ChurnEntry, AuthorshipEntry, MineGitHist
84
89
  export type { RunLogEvent, RunLoggerOptions } from "./observability/runLog.js";
85
90
  export { RunLogger } from "./observability/runLog.js";
86
91
  export { isFileMissingError, isTransientFsError, withFsRetry, readJsonFile, writeJsonFile, readJsonStringScalar, readJsonStringScalarChunks, appendNdjsonFile, readNdjsonFile, readOptionalJsonFile, readOptionalNdjsonFile, writeNdjsonFile, readOptionalTextFile, writeTextFile, } from "./io/json.js";
92
+ export type { LockedJsonStore, LockedJsonStoreOptions, } from "./io/lockedJsonStore.js";
93
+ export { createLockedJsonStore, SKIP_WRITE, LOCKED_JSON_STORE_TIMEOUT_MS, } from "./io/lockedJsonStore.js";
87
94
  export { auditToolsDir, auditArtifactsDir, remediationArtifactsDir, stepsDir, artifactTreeLockPath, nodeClaimsPath, taskClaimsPath, incomingDir, outputDirFor, auditReportPath, auditFindingsPath, promotedAuditReportPath, promotedAuditFindingsPath, AUDIT_REPORT_FILENAME, AUDIT_FINDINGS_FILENAME, REMEDIATION_REPORT_FILENAME, REMEDIATION_OUTCOMES_FILENAME, } from "./io/auditToolsPaths.js";
88
95
  export { resolveRepoRoot, climbOutOfAuditTools } from "./io/repoRoot.js";
89
96
  export type { FrictionItem, FrictionCaptureArtifact, } from "./io/frictionCapture.js";
90
97
  export { FRICTION_CAPTURE_SCHEMA_VERSION, FRICTION_CAPTURE_DIRNAME, frictionCaptureDir, frictionCapturePath, frictionCaptured, persistFrictionCapture, sanitizeRunId, } from "./io/frictionCapture.js";
91
98
  export type { FrictionEvent, CapturedFrictionItem, } from "./friction/captureFrictionEvent.js";
92
99
  export { captureFrictionEvent } from "./friction/captureFrictionEvent.js";
93
- export type { StepBoundaryEventType, StepBoundaryFriction, } from "./friction/stepBoundaryCapture.js";
94
- export { captureStepBoundaryFriction, stepBoundaryEventId, } from "./friction/stepBoundaryCapture.js";
100
+ export type { StepBoundaryEventType, StepBoundaryFriction, CostDriftInfo, } from "./friction/stepBoundaryCapture.js";
101
+ export { captureStepBoundaryFriction, stepBoundaryEventId, captureCostDriftFriction, } from "./friction/stepBoundaryCapture.js";
95
102
  export type { FrictionDisposition, FrictionDispositionRecord, TriageSubject, FrictionTriageDecision, FrictionOpenObservation, FrictionCategoryAttestation, FrictionCategory, TriagedFrictionArtifact, } from "./friction/triage.js";
96
103
  export { FRICTION_DISPOSITIONS, FRICTION_NAMED_DIMENSIONS, FRICTION_CATEGORIES, FRICTION_CATEGORY_LABELS, isFrictionCategory, isFrictionDisposition, reflectionKey, frictionLockPath, collectTriageSubjects, decideFrictionTriage, buildFrictionTriageBlock, appendFrictionUnderLock, recordFrictionDisposition, } from "./friction/triage.js";
97
104
  export type { RepairValidationError, RepairValidationResult, RepairCoercion, RepairCoercionResult, RepairPatcher, RepairContract, RepairStatus, RepairStage, RepairRedispatch, RepairOutcome, RunEmitValidateRepairOptions, } from "./repair/index.js";
@@ -125,7 +132,7 @@ export { OpenAiCompatibleProvider, OPENAI_COMPATIBLE_PROVIDER_NAME, parseJsonLoo
125
132
  export type { OpenAiCompatibleProviderDeps } from "./providers/openAiCompatibleProvider.js";
126
133
  export type { ClaudeCodeProviderOptions } from "./providers/claudeCodeProvider.js";
127
134
  export { ClaudeCodeProvider, CLAUDE_CODE_PROVIDER_NAME, buildActiveClaudeCodeSessionMessage, } from "./providers/claudeCodeProvider.js";
128
- export { OpenCodeProvider, OPENCODE_PROVIDER_NAME, } from "./providers/opencodeProvider.js";
135
+ export { OpenCodeProvider, OPENCODE_PROVIDER_NAME, createOpenCodeProvider, } from "./providers/opencodeProvider.js";
129
136
  export type { AutoProviderContext, FreshSessionProviderDeps, } from "./providers/providerFactory.js";
130
137
  export { resolveFreshSessionProviderName, createFreshSessionProvider, hasConfiguredOpenAiCompatible, discoverOutputConstraintCapability, } from "./providers/providerFactory.js";
131
138
  export type { CapabilityTier, DiscoveredProvider, ConfirmedProviderPool, } from "./providers/providerConfirmation.js";