@phamvuhoang/otto-core 0.32.0 → 0.33.1

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/dist/codebase-memory-adapter.d.ts +99 -0
  2. package/dist/codebase-memory-adapter.d.ts.map +1 -0
  3. package/dist/codebase-memory-adapter.js +127 -0
  4. package/dist/codebase-memory-adapter.js.map +1 -0
  5. package/dist/compression-survival.d.ts +46 -0
  6. package/dist/compression-survival.d.ts.map +1 -0
  7. package/dist/compression-survival.js +81 -0
  8. package/dist/compression-survival.js.map +1 -0
  9. package/dist/context-compressor.d.ts +20 -0
  10. package/dist/context-compressor.d.ts.map +1 -1
  11. package/dist/context-compressor.js +46 -0
  12. package/dist/context-compressor.js.map +1 -1
  13. package/dist/eval.d.ts +30 -0
  14. package/dist/eval.d.ts.map +1 -1
  15. package/dist/eval.js +42 -1
  16. package/dist/eval.js.map +1 -1
  17. package/dist/extension-profiles.d.ts.map +1 -1
  18. package/dist/extension-profiles.js +11 -0
  19. package/dist/extension-profiles.js.map +1 -1
  20. package/dist/fanout.d.ts +48 -1
  21. package/dist/fanout.d.ts.map +1 -1
  22. package/dist/fanout.js +121 -11
  23. package/dist/fanout.js.map +1 -1
  24. package/dist/handoff.d.ts +32 -0
  25. package/dist/handoff.d.ts.map +1 -0
  26. package/dist/handoff.js +58 -0
  27. package/dist/handoff.js.map +1 -0
  28. package/dist/index.d.ts +9 -6
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +9 -6
  31. package/dist/index.js.map +1 -1
  32. package/dist/inspect.d.ts.map +1 -1
  33. package/dist/inspect.js +1 -1
  34. package/dist/inspect.js.map +1 -1
  35. package/dist/loop.d.ts.map +1 -1
  36. package/dist/loop.js +77 -4
  37. package/dist/loop.js.map +1 -1
  38. package/dist/panel.d.ts +10 -0
  39. package/dist/panel.d.ts.map +1 -1
  40. package/dist/panel.js +29 -4
  41. package/dist/panel.js.map +1 -1
  42. package/dist/plan-rubric.d.ts +1 -1
  43. package/dist/plan-rubric.d.ts.map +1 -1
  44. package/dist/plan-rubric.js +19 -0
  45. package/dist/plan-rubric.js.map +1 -1
  46. package/dist/plan-tasks.d.ts +39 -5
  47. package/dist/plan-tasks.d.ts.map +1 -1
  48. package/dist/plan-tasks.js +85 -12
  49. package/dist/plan-tasks.js.map +1 -1
  50. package/dist/report-finalize.d.ts +9 -0
  51. package/dist/report-finalize.d.ts.map +1 -1
  52. package/dist/report-finalize.js +32 -4
  53. package/dist/report-finalize.js.map +1 -1
  54. package/dist/run-bin.d.ts.map +1 -1
  55. package/dist/run-bin.js +5 -0
  56. package/dist/run-bin.js.map +1 -1
  57. package/dist/run-report.d.ts +49 -1
  58. package/dist/run-report.d.ts.map +1 -1
  59. package/dist/run-report.js +18 -0
  60. package/dist/run-report.js.map +1 -1
  61. package/dist/stage-exec.d.ts.map +1 -1
  62. package/dist/stage-exec.js +5 -1
  63. package/dist/stage-exec.js.map +1 -1
  64. package/dist/tools.d.ts +17 -0
  65. package/dist/tools.d.ts.map +1 -1
  66. package/dist/tools.js +48 -0
  67. package/dist/tools.js.map +1 -1
  68. package/dist/verification-evidence.d.ts +4 -0
  69. package/dist/verification-evidence.d.ts.map +1 -1
  70. package/dist/verification-evidence.js +33 -4
  71. package/dist/verification-evidence.js.map +1 -1
  72. package/dist/verification-matrix.d.ts +31 -4
  73. package/dist/verification-matrix.d.ts.map +1 -1
  74. package/dist/verification-matrix.js +44 -5
  75. package/dist/verification-matrix.js.map +1 -1
  76. package/package.json +1 -1
  77. package/templates/plan.md +5 -0
  78. package/templates/subtask.md +17 -0
package/dist/eval.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { tokenUsageTotal } from "./tokens.js";
2
+ import { assessFactSurvival } from "./compression-survival.js";
2
3
  const SUCCESS_REASONS = new Set(["complete", "done"]);
3
4
  /**
4
5
  * Derive {@link EvalSignals} from a recorded run trajectory. Pure: no I/O, no
@@ -23,8 +24,28 @@ export function scoreTrajectory(manifest, stages, opts = {}) {
23
24
  stages.reduce((n, s) => n + (s.skillsUsed?.length ?? 0), 0),
24
25
  planQualityRatio: opts.planScore ? opts.planScore.ratio : null,
25
26
  reportLegibilityRatio: opts.reportScore ? opts.reportScore.ratio : null,
27
+ toolCallCount: (manifest.toolsUsed?.length ?? 0) +
28
+ stages.reduce((n, s) => n + (s.toolsUsed?.length ?? 0), 0),
29
+ tokensAvoided: (manifest.toolsUsed?.reduce((n, t) => n + (t.tokensAvoided ?? 0), 0) ??
30
+ 0) +
31
+ stages.reduce((n, s) => n +
32
+ (s.toolsUsed?.reduce((m, t) => m + (t.tokensAvoided ?? 0), 0) ?? 0), 0),
33
+ impactRecall: 0,
34
+ indexingOverheadMs: (manifest.codebaseMemory?.buildMs ?? 0) +
35
+ (manifest.codebaseMemory?.refreshMs ?? 0),
26
36
  };
27
37
  }
38
+ /**
39
+ * Score how many `knownImpactedFiles` a run's answer text surfaced — a thin
40
+ * wrapper over {@link assessFactSurvival} treating each impacted file path as
41
+ * a "fact" that must survive into the answer (P26 codebase-memory spike).
42
+ * Vacuously `1` for an empty impact list. Pure.
43
+ */
44
+ export function scoreImpactRecall(knownImpactedFiles, answerText) {
45
+ if (knownImpactedFiles.length === 0)
46
+ return 1;
47
+ return assessFactSurvival(knownImpactedFiles, answerText).survivalRate;
48
+ }
28
49
  function elapsedMs(startedAt, finishedAt) {
29
50
  if (finishedAt == null)
30
51
  return null;
@@ -43,7 +64,7 @@ const COMPARE_COLUMNS = [
43
64
  { header: "Exit", cell: (s) => s.exitReason ?? "—" },
44
65
  {
45
66
  header: "Iterations",
46
- cell: (s) => (s.completedIterations == null ? "—" : String(s.completedIterations)),
67
+ cell: (s) => s.completedIterations == null ? "—" : String(s.completedIterations),
47
68
  },
48
69
  { header: "Stages", cell: (s) => String(s.stageCount) },
49
70
  {
@@ -87,6 +108,26 @@ const COMPARE_COLUMNS = [
87
108
  : `${Math.round(s.reportLegibilityRatio * 100)}%`,
88
109
  rank: { value: (s) => s.reportLegibilityRatio, better: "higher" },
89
110
  },
111
+ {
112
+ header: "Tool calls",
113
+ cell: (s) => String(s.toolCallCount),
114
+ rank: { value: (s) => s.toolCallCount, better: "lower" },
115
+ },
116
+ {
117
+ header: "Tokens avoided",
118
+ cell: (s) => String(s.tokensAvoided),
119
+ rank: { value: (s) => s.tokensAvoided, better: "higher" },
120
+ },
121
+ {
122
+ header: "Impact recall",
123
+ cell: (s) => `${Math.round(s.impactRecall * 100)}%`,
124
+ rank: { value: (s) => s.impactRecall, better: "higher" },
125
+ },
126
+ {
127
+ header: "Indexing overhead (ms)",
128
+ cell: (s) => String(s.indexingOverheadMs),
129
+ rank: { value: (s) => s.indexingOverheadMs, better: "lower" },
130
+ },
90
131
  ];
91
132
  /**
92
133
  * Render a stable markdown comparison table across labelled runs — one row per
package/dist/eval.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"eval.js","sourceRoot":"","sources":["../src/eval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../src/eval.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"extension-profiles.d.ts","sourceRoot":"","sources":["../src/extension-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AAEH,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,mDAAmD;IACnD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,iFAAiF;IACjF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAoFF,kDAAkD;AAClD,wBAAgB,YAAY,IAAI,gBAAgB,EAAE,CAEjD;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAEhE;AAED,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CACL,CAAC"}
1
+ {"version":3,"file":"extension-profiles.d.ts","sourceRoot":"","sources":["../src/extension-profiles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AAEH,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,mDAAmD;IACnD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,iFAAiF;IACjF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AA+FF,kDAAkD;AAClD,wBAAgB,YAAY,IAAI,gBAAgB,EAAE,CAEjD;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAEhE;AAED,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CACL,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { codebaseMemoryToolDefinition } from "./codebase-memory-adapter.js";
1
2
  import { headroomToolDefinition } from "./headroom-adapter.js";
2
3
  /**
3
4
  * Pinned upstream refs for the external sources. Tags, never branches, so a
@@ -70,6 +71,16 @@ const PROFILES = [
70
71
  requires: [],
71
72
  followUp: "Next: pair with otto-afk --review-panel; review .otto/policy.json and tighten further as needed.",
72
73
  },
74
+ {
75
+ name: "codebase-intelligence",
76
+ description: "Local code-knowledge graph (Codebase Memory) via an Otto-owned MCP stdio child. Off by default; no live prompt injection in the spike.",
77
+ sources: [],
78
+ tools: [codebaseMemoryToolDefinition()],
79
+ config: { tools: { "codebase-memory": { enabled: true, stages: [] } } },
80
+ policy: { allowedWriteRoots: [".codebase-memory"] },
81
+ requires: ["codebase-memory"],
82
+ followUp: "Next: otto-tools health && otto-tools why plan",
83
+ },
73
84
  ];
74
85
  /** All curated profiles, sorted by name. Pure. */
75
86
  export function listProfiles() {
@@ -1 +1 @@
1
- {"version":3,"file":"extension-profiles.js","sourceRoot":"","sources":["../src/extension-profiles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAsC/D;;;;GAIG;AACH,MAAM,eAAe,GAAG,QAAQ,CAAC;AACjC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAE/B,MAAM,QAAQ,GAAuB;IACnC;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,iFAAiF;QACnF,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,qCAAqC;gBAC/C,GAAG,EAAE,eAAe;aACrB;SACF;QACD,KAAK,EAAE,EAAE;QACT,4EAA4E;QAC5E,+EAA+E;QAC/E,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACpE,QAAQ,EAAE,CAAC,KAAK,CAAC;QACjB,QAAQ,EACN,wGAAwG;KAC3G;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,yFAAyF;QAC3F,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,sDAAsD;gBAChE,GAAG,EAAE,aAAa;aACnB;SACF;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC/D,QAAQ,EAAE,CAAC,KAAK,CAAC;QACjB,QAAQ,EACN,qFAAqF;KACxF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,mFAAmF;QACrF,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,CAAC,sBAAsB,EAAE,CAAC;QACjC,MAAM,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE;QACzC,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC;QACxC,QAAQ,EACN,4IAA4I;KAC/I;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,4FAA4F;QAC9F,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACnD,0EAA0E;QAC1E,+EAA+E;QAC/E,wEAAwE;QACxE,MAAM,EAAE;YACN,eAAe,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC;YACzD,cAAc,EAAE;gBACd,kBAAkB;gBAClB,8CAA8C;aAC/C;YACD,uBAAuB,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;SAClE;QACD,QAAQ,EAAE,EAAE;QACZ,QAAQ,EACN,kGAAkG;KACrG;CACF,CAAC;AAEF,kDAAkD;AAClD,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;AACvD,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"extension-profiles.js","sourceRoot":"","sources":["../src/extension-profiles.ts"],"names":[],"mappings":"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"}
package/dist/fanout.d.ts CHANGED
@@ -8,20 +8,49 @@
8
8
  * sequential loop — fan-out never leaves the tree conflicted or half-merged.
9
9
  */
10
10
  import type { AgentRuntimeId } from "./agent-runtime.js";
11
+ import type { CbmIndexIdentity } from "./codebase-memory-adapter.js";
12
+ import type { RetrievalStore } from "./context-compressor.js";
13
+ import { type SubAgentHandoff } from "./handoff.js";
11
14
  import type { TierLadder } from "./model-tier.js";
12
- import { type PlanTask } from "./plan-tasks.js";
15
+ import { type ConflictPrediction, type PlanTask } from "./plan-tasks.js";
13
16
  import type { StageResult } from "./runner.js";
14
17
  export type FanoutTaskStatus = "landed" | "deferred";
15
18
  export type FanoutTaskOutcome = {
16
19
  task: PlanTask;
17
20
  status: FanoutTaskStatus;
18
21
  reason?: string;
22
+ /** The sub-agent's structured handoff, when one could be read (or derived). */
23
+ handoff?: SubAgentHandoff;
19
24
  };
20
25
  export type FanoutResult = {
21
26
  outcomes: FanoutTaskOutcome[];
22
27
  /** Tasks that did not land cleanly and must be re-run sequentially. */
23
28
  deferred: PlanTask[];
29
+ /** Cross-task interaction notes (shared files, out-of-scope touches,
30
+ * deferrals) surfaced by the synthesizer; `""` when nothing noteworthy. */
31
+ crossTaskSummary: string;
24
32
  };
33
+ /**
34
+ * Reorder `tasks` by ascending conflict risk (safest first): highest scope
35
+ * confidence, fewest predicted overlaps. Pure — the caller decides how to use
36
+ * the order (P25 Task 3: Phase B merges the lowest-risk worktrees first).
37
+ */
38
+ export declare function orderByConflictRisk(tasks: PlanTask[], predictions: ConflictPrediction[]): PlanTask[];
39
+ /**
40
+ * Summarize cross-task interactions worth a human's attention: out-of-scope
41
+ * touches reported by a sub-agent's handoff, and deferrals with their reason.
42
+ * `""` when no outcome has anything noteworthy to report.
43
+ */
44
+ export declare function buildCrossTaskSummary(outcomes: FanoutTaskOutcome[]): string;
45
+ /**
46
+ * Per-worktree retrieval identity (P25 Task 7, the seam for P26): stamps a
47
+ * fan-out worktree with the workspace it lives in and the sha it was built
48
+ * from, so a codebase-memory index built inside one worktree is never
49
+ * mistaken for another's (or trusted once the worktree's HEAD has moved on).
50
+ * Pure. Only computed when `bindWorktreeIdentity` is on; otherwise unused —
51
+ * P26 is the only consumer.
52
+ */
53
+ export declare function worktreeIndexIdentity(dir: string, before: string): Pick<CbmIndexIdentity, "workspace" | "sourceRevision" | "worktreeDirty">;
25
54
  export type RunFanoutOptions = {
26
55
  tasks: PlanTask[];
27
56
  workspaceDir: string;
@@ -34,6 +63,14 @@ export type RunFanoutOptions = {
34
63
  routing: boolean;
35
64
  runtimeId: AgentRuntimeId;
36
65
  signal?: AbortSignal;
66
+ /**
67
+ * Real paths named in the plan doc (spec.md + plan.md), from
68
+ * {@link extractPlanFileMap}. Threaded into Phase B's conflict prediction so
69
+ * `scopeConfidence` varies per task and merge order is non-inert (P25 Task
70
+ * 3). Optional; `[]` (fan-out without `--plan`) reproduces prior uniform-
71
+ * confidence ordering.
72
+ */
73
+ planFileMap?: string[];
37
74
  /**
38
75
  * The parallel per-task work: implement `task` inside `worktreeDir` and commit
39
76
  * there. Injectable so tests don't spawn a model; defaults to the
@@ -44,6 +81,16 @@ export type RunFanoutOptions = {
44
81
  * tokens into the run total (budget/pacing). Not called for an injected
45
82
  * `runSubAgent`. */
46
83
  onSubAgent?: (sr: StageResult) => void;
84
+ /** The run's retrieval store (issue #112 P20's `runRetrievalStore`), passed
85
+ * through to each sub-agent's `executeStage` call exactly as the
86
+ * sequential loop already does. Optional; absent ⇒ no retrieval store is
87
+ * threaded (today's behavior — fan-out never passed one). */
88
+ retrievalStore?: RetrievalStore;
89
+ /** P25/P26 seam: when true, stamp each built worktree with a
90
+ * {@link worktreeIndexIdentity} so a codebase-memory index built inside
91
+ * one worktree can't be mistaken for another's. Default false ⇒ inert;
92
+ * only meaningful once the `codebase-memory` tool is enabled. */
93
+ bindWorktreeIdentity?: boolean;
47
94
  };
48
95
  /**
49
96
  * Run the plan's tasks wave-by-wave. Phase A (parallel, bounded by
@@ -1 +1 @@
1
- {"version":3,"file":"fanout.d.ts","sourceRoot":"","sources":["../src/fanout.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE;;yBAEqB;IACrB,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;CACxC,CAAC;AA6DF;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CA2D7E"}
1
+ {"version":3,"file":"fanout.d.ts","sourceRoot":"","sources":["../src/fanout.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB;gFAC4E;IAC5E,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,EAAE,EACjB,WAAW,EAAE,kBAAkB,EAAE,GAChC,QAAQ,EAAE,CAMZ;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAU3E;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,gBAAgB,GAAG,eAAe,CAAC,CAE1E;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE;;yBAEqB;IACrB,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC;;;kEAG8D;IAC9D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;sEAGkE;IAClE,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAoGF;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAyG7E"}
package/dist/fanout.js CHANGED
@@ -7,11 +7,53 @@
7
7
  * conflict, empty commit, or sub-agent error defers the task to the normal
8
8
  * sequential loop — fan-out never leaves the tree conflicted or half-merged.
9
9
  */
10
- import { git, headSha } from "./git.js";
11
- import { planParallelGroups } from "./plan-tasks.js";
10
+ import { readFileSync } from "node:fs";
11
+ import { join } from "node:path";
12
+ import { changedFilesSince, git, headSha } from "./git.js";
13
+ import { computeOutOfScope, parseHandoff, } from "./handoff.js";
14
+ import { planParallelGroups, predictConflicts, } from "./plan-tasks.js";
12
15
  import { executeStage } from "./stage-exec.js";
13
16
  import { STAGES } from "./stages.js";
14
17
  import { createWorktree } from "./worktree.js";
18
+ /**
19
+ * Reorder `tasks` by ascending conflict risk (safest first): highest scope
20
+ * confidence, fewest predicted overlaps. Pure — the caller decides how to use
21
+ * the order (P25 Task 3: Phase B merges the lowest-risk worktrees first).
22
+ */
23
+ export function orderByConflictRisk(tasks, predictions) {
24
+ const score = (id) => {
25
+ const p = predictions.find((x) => x.taskId === id);
26
+ return p ? p.confidence - p.overlapsWith.length : 1;
27
+ };
28
+ return [...tasks].sort((a, b) => score(b.id) - score(a.id));
29
+ }
30
+ /**
31
+ * Summarize cross-task interactions worth a human's attention: out-of-scope
32
+ * touches reported by a sub-agent's handoff, and deferrals with their reason.
33
+ * `""` when no outcome has anything noteworthy to report.
34
+ */
35
+ export function buildCrossTaskSummary(outcomes) {
36
+ const lines = [];
37
+ for (const o of outcomes) {
38
+ const oos = o.handoff?.outOfScopeFiles ?? [];
39
+ if (oos.length)
40
+ lines.push(`- ${o.task.id} touched out-of-scope: ${oos.join(", ")}`);
41
+ if (o.status === "deferred")
42
+ lines.push(`- ${o.task.id} deferred: ${o.reason ?? "unknown"}`);
43
+ }
44
+ return lines.length ? `Cross-task interactions:\n${lines.join("\n")}` : "";
45
+ }
46
+ /**
47
+ * Per-worktree retrieval identity (P25 Task 7, the seam for P26): stamps a
48
+ * fan-out worktree with the workspace it lives in and the sha it was built
49
+ * from, so a codebase-memory index built inside one worktree is never
50
+ * mistaken for another's (or trusted once the worktree's HEAD has moved on).
51
+ * Pure. Only computed when `bindWorktreeIdentity` is on; otherwise unused —
52
+ * P26 is the only consumer.
53
+ */
54
+ export function worktreeIndexIdentity(dir, before) {
55
+ return { workspace: dir, sourceRevision: before, worktreeDirty: false };
56
+ }
15
57
  /** Bounded-concurrency map: at most `limit` promises in flight at once. */
16
58
  async function mapPool(items, limit, fn) {
17
59
  const out = new Array(items.length);
@@ -49,10 +91,39 @@ function defaultRunSubAgent(opts) {
49
91
  // worktree dir — allow writes there so `git commit` works under the
50
92
  // sandbox runner (issue #66 P11).
51
93
  sandboxWriteRoots: [opts.workspaceDir],
94
+ // Absent unless the caller threads one (P25 Task 7); undefined here
95
+ // reproduces today's behavior exactly.
96
+ retrievalStore: opts.retrievalStore,
52
97
  });
53
98
  opts.onSubAgent?.(sr);
54
99
  };
55
100
  }
101
+ /**
102
+ * Read a built worktree's `handoff.json` (written by the subtask template)
103
+ * and parse it. Throws-free: a missing/unreadable file degrades to `""`,
104
+ * which `parseHandoff` turns into its fallback (the worktree's git-diff file
105
+ * list since `before`) — never blocks the merge on a malformed handoff.
106
+ *
107
+ * `outOfScopeFiles` is always harness-computed (never trusted from the
108
+ * sub-agent's self-report, which the template doesn't even ask for): it's
109
+ * `changedFiles` reconciled against the task's declared `fileScope` via
110
+ * {@link computeOutOfScope}, so the cross-task summary's out-of-scope line
111
+ * and the P25 Task 6 structural-lens binding actually fire.
112
+ */
113
+ function readSubAgentHandoff(b) {
114
+ let raw = "";
115
+ try {
116
+ raw = readFileSync(join(b.dir, "handoff.json"), "utf8");
117
+ }
118
+ catch {
119
+ raw = "";
120
+ }
121
+ const handoff = parseHandoff(raw, b.task.id, changedFilesSince(b.dir, b.before));
122
+ return {
123
+ ...handoff,
124
+ outOfScopeFiles: computeOutOfScope(handoff.changedFiles, b.task.fileScope),
125
+ };
126
+ }
56
127
  /**
57
128
  * Run the plan's tasks wave-by-wave. Phase A (parallel, bounded by
58
129
  * `concurrency`): each task runs its sub-agent in a fresh worktree. Phase B
@@ -62,7 +133,7 @@ function defaultRunSubAgent(opts) {
62
133
  */
63
134
  export async function runFanout(opts) {
64
135
  const runSubAgent = opts.runSubAgent ?? defaultRunSubAgent(opts);
65
- const waves = planParallelGroups(opts.tasks);
136
+ const waves = planParallelGroups(opts.tasks, opts.planFileMap ?? []);
66
137
  const outcomes = [];
67
138
  for (const wave of waves) {
68
139
  if (opts.signal?.aborted) {
@@ -74,7 +145,16 @@ export async function runFanout(opts) {
74
145
  // .git), then run the sub-agents concurrently inside them.
75
146
  const built = wave.map((task) => {
76
147
  const wt = createWorktree(opts.workspaceDir, `${opts.iteration}-${task.id}`);
77
- return { task, dir: wt.dir, before: headSha(wt.dir), cleanup: wt.cleanup };
148
+ const before = headSha(wt.dir);
149
+ return {
150
+ task,
151
+ dir: wt.dir,
152
+ before,
153
+ cleanup: wt.cleanup,
154
+ identity: opts.bindWorktreeIdentity
155
+ ? worktreeIndexIdentity(wt.dir, before ?? "")
156
+ : undefined,
157
+ };
78
158
  });
79
159
  try {
80
160
  // Phase A — parallel sub-agents.
@@ -86,24 +166,51 @@ export async function runFanout(opts) {
86
166
  b.failure = `sub-agent error: ${err.message}`;
87
167
  }
88
168
  });
89
- // Phase B — serial cherry-pick onto the workspace HEAD.
90
- for (const b of built) {
169
+ // Phase B — serial cherry-pick onto the workspace HEAD. Merge
170
+ // lowest-conflict-risk tasks first (P25 Task 3): predicted overlaps are
171
+ // computed from the wave's own declared scopes, reconciled against the
172
+ // caller's plan file map — when one is supplied, `scopeConfidence`
173
+ // varies per task and actually drives the merge order; `[]` degrades to
174
+ // uniform confidence (fewest-overlaps ordering only).
175
+ const predictions = predictConflicts(wave, opts.planFileMap ?? []);
176
+ const orderedTasks = orderByConflictRisk(wave, predictions);
177
+ const orderedBuilt = orderedTasks.map((t) => built.find((b) => b.task.id === t.id));
178
+ for (const b of orderedBuilt) {
179
+ const handoff = readSubAgentHandoff(b);
91
180
  if (b.failure) {
92
- outcomes.push({ task: b.task, status: "deferred", reason: b.failure });
181
+ outcomes.push({
182
+ task: b.task,
183
+ status: "deferred",
184
+ reason: b.failure,
185
+ handoff,
186
+ });
93
187
  continue;
94
188
  }
95
189
  const after = headSha(b.dir);
96
190
  if (!after || after === b.before) {
97
- outcomes.push({ task: b.task, status: "deferred", reason: "no commit produced" });
191
+ outcomes.push({
192
+ task: b.task,
193
+ status: "deferred",
194
+ reason: "no commit produced",
195
+ handoff,
196
+ });
98
197
  continue;
99
198
  }
100
199
  const picked = git(["cherry-pick", `${b.before}..${after}`], opts.workspaceDir);
101
200
  if (picked == null) {
102
201
  git(["cherry-pick", "--abort"], opts.workspaceDir);
103
- outcomes.push({ task: b.task, status: "deferred", reason: "cherry-pick conflict" });
202
+ const riskNote = handoff.risks.length
203
+ ? `; risks: ${handoff.risks.join(", ")}`
204
+ : "";
205
+ outcomes.push({
206
+ task: b.task,
207
+ status: "deferred",
208
+ reason: `cherry-pick conflict${riskNote}`,
209
+ handoff,
210
+ });
104
211
  continue;
105
212
  }
106
- outcomes.push({ task: b.task, status: "landed" });
213
+ outcomes.push({ task: b.task, status: "landed", handoff });
107
214
  }
108
215
  }
109
216
  finally {
@@ -113,7 +220,10 @@ export async function runFanout(opts) {
113
220
  }
114
221
  return {
115
222
  outcomes,
116
- deferred: outcomes.filter((o) => o.status === "deferred").map((o) => o.task),
223
+ deferred: outcomes
224
+ .filter((o) => o.status === "deferred")
225
+ .map((o) => o.task),
226
+ crossTaskSummary: buildCrossTaskSummary(outcomes),
117
227
  };
118
228
  }
119
229
  //# sourceMappingURL=fanout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fanout.js","sourceRoot":"","sources":["../src/fanout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fanout.js","sourceRoot":"","sources":["../src/fanout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /** One test invocation reported by a sub-agent, and whether it passed. */
2
+ export type TestRun = {
3
+ command: string;
4
+ passed: boolean;
5
+ };
6
+ /**
7
+ * Structured handoff a fan-out sub-agent reports back to the orchestrator:
8
+ * what it touched, what it ran, what's risky or deferred, and (once computed)
9
+ * which changed files fell outside its declared file scope.
10
+ */
11
+ export type SubAgentHandoff = {
12
+ taskId: string;
13
+ changedFiles: string[];
14
+ testsRun: TestRun[];
15
+ risks: string[];
16
+ deferred: string[];
17
+ outOfScopeFiles: string[];
18
+ };
19
+ /**
20
+ * Changed files not covered by any `fileScope` entry (via {@link pathsCollide}).
21
+ * Empty `fileScope` means no scope was declared, so nothing is flagged.
22
+ */
23
+ export declare function computeOutOfScope(changedFiles: string[], fileScope: string[]): string[];
24
+ /**
25
+ * Parse a sub-agent's `handoff.json` payload. Throws-free: valid JSON is
26
+ * normalized field-by-field (wrong-typed or missing fields degrade to safe
27
+ * defaults); anything that isn't a JSON object (parse failure, `null`, an
28
+ * array, a primitive) falls back to a minimal handoff built from
29
+ * `changedFilesFallback` (e.g. the actual worktree diff).
30
+ */
31
+ export declare function parseHandoff(raw: string, taskId: string, changedFilesFallback: string[]): SubAgentHandoff;
32
+ //# sourceMappingURL=handoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,MAAM,MAAM,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3D;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAKF;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,MAAM,EAAE,GAClB,MAAM,EAAE,CAGV;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,MAAM,EAAE,GAC7B,eAAe,CAuCjB"}
@@ -0,0 +1,58 @@
1
+ import { pathsCollide } from "./plan-tasks.js";
2
+ const strArr = (v) => Array.isArray(v) ? v.filter((x) => typeof x === "string") : [];
3
+ /**
4
+ * Changed files not covered by any `fileScope` entry (via {@link pathsCollide}).
5
+ * Empty `fileScope` means no scope was declared, so nothing is flagged.
6
+ */
7
+ export function computeOutOfScope(changedFiles, fileScope) {
8
+ if (fileScope.length === 0)
9
+ return [];
10
+ return changedFiles.filter((f) => !fileScope.some((s) => pathsCollide(f, s)));
11
+ }
12
+ /**
13
+ * Parse a sub-agent's `handoff.json` payload. Throws-free: valid JSON is
14
+ * normalized field-by-field (wrong-typed or missing fields degrade to safe
15
+ * defaults); anything that isn't a JSON object (parse failure, `null`, an
16
+ * array, a primitive) falls back to a minimal handoff built from
17
+ * `changedFilesFallback` (e.g. the actual worktree diff).
18
+ */
19
+ export function parseHandoff(raw, taskId, changedFilesFallback) {
20
+ const minimal = {
21
+ taskId,
22
+ changedFiles: changedFilesFallback,
23
+ testsRun: [],
24
+ risks: [],
25
+ deferred: [],
26
+ outOfScopeFiles: [],
27
+ };
28
+ let obj;
29
+ try {
30
+ obj = JSON.parse(raw);
31
+ }
32
+ catch {
33
+ return minimal;
34
+ }
35
+ if (!obj || typeof obj !== "object" || Array.isArray(obj))
36
+ return minimal;
37
+ const o = obj;
38
+ const parsedChangedFiles = strArr(o.changedFiles);
39
+ const changedFiles = parsedChangedFiles.length
40
+ ? parsedChangedFiles
41
+ : changedFilesFallback;
42
+ const testsRun = Array.isArray(o.testsRun)
43
+ ? o.testsRun
44
+ .filter((t) => !!t &&
45
+ typeof t === "object" &&
46
+ typeof t.command === "string")
47
+ .map((t) => ({ command: t.command, passed: t.passed === true }))
48
+ : [];
49
+ return {
50
+ taskId,
51
+ changedFiles,
52
+ testsRun,
53
+ risks: strArr(o.risks),
54
+ deferred: strArr(o.deferred),
55
+ outOfScopeFiles: strArr(o.outOfScopeFiles),
56
+ };
57
+ }
58
+ //# sourceMappingURL=handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAmB/C,MAAM,MAAM,GAAG,CAAC,CAAU,EAAY,EAAE,CACtC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAE9E;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAsB,EACtB,SAAmB;IAEnB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAW,EACX,MAAc,EACd,oBAA8B;IAE9B,MAAM,OAAO,GAAoB;QAC/B,MAAM;QACN,YAAY,EAAE,oBAAoB;QAClC,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,eAAe,EAAE,EAAE;KACpB,CAAC;IACF,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1E,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,kBAAkB,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM;QAC5C,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,oBAAoB,CAAC;IACzB,MAAM,QAAQ,GAAc,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QACnD,CAAC,CAAC,CAAC,CAAC,QAAQ;aACP,MAAM,CACL,CAAC,CAAC,EAA8C,EAAE,CAChD,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,QAAQ;YACrB,OAAQ,CAAS,CAAC,OAAO,KAAK,QAAQ,CACzC;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL,MAAM;QACN,YAAY;QACZ,QAAQ;QACR,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC;KAC3C,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -16,13 +16,15 @@ export { DEFAULT_CONTEXT_BUDGET_FRACTION, DEFAULT_CONTEXT_WINDOW_TOKENS, assessC
16
16
  export { emptyReadLedger, fingerprintContent, formatReadReference, recordRead, summarizeReads, type DedupResult, type DedupSummary, type ReadFingerprint, type ReadLedger, type ReadStatus, } from "./read-dedup.js";
17
17
  export { allocateRunId, hasRunReport, listRunIds, readManifest, readRunReport, readStageRecords, runReportDir, runsDir, writeManifest, writeRunReport, writeStageRecord, type RunArtifact, type RunManifest, type SafetyEvent, type SkillUsage, type StageRecord, type ToolUsage, } from "./run-report.js";
18
18
  export { formatRunReport, runInspect, type InspectDeps } from "./inspect.js";
19
- export { formatVerificationCoverageGate, formatVerificationMatrix, formatVisualEvidence, isValidArtifactReference, parseVerificationMatrix, parseVerificationMatrixWithDiagnostics, scoreVerificationCoverage, summarizeVerification, type VerificationCoverageGate, type VerificationConfidence, type VerificationEntry, type VerificationMethod, type VerificationParseResult, type VerificationResult, type VerificationSummary, } from "./verification-matrix.js";
19
+ export { formatVerificationCoverageGate, formatVerificationMatrix, formatVisualEvidence, isValidArtifactReference, parseVerificationMatrix, parseVerificationMatrixWithDiagnostics, reconcileMatrixWithPlan, scoreVerificationCoverage, summarizeVerification, type PlanReconciliation, type VerificationCoverageGate, type VerificationConfidence, type VerificationEntry, type VerificationMethod, type VerificationParseResult, type VerificationResult, type VerificationSummary, } from "./verification-matrix.js";
20
20
  export { artifactReferenceExists, validateVerificationEvidence, type EvidenceDeps, } from "./verification-evidence.js";
21
21
  export { formatPlainReport, runExplain, type ExplainDeps, } from "./report-explain.js";
22
22
  export { formatRunsList, runRuns, summarizeManifest, type RunsDeps, type RunSummary, } from "./runs-cli.js";
23
23
  export { formatContextReportRun, runContextReport, type ContextReportDeps, } from "./context-report-cli.js";
24
- export { compressContent, compressContentSync, compressionToolUsage, formatCompressionSummary, readCompressorMode, resolveCompressorMode, runRetrievalStore, summarizeCompression, summarizeToolCompression, type CompressInput, type CompressOutput, type CompressionCategory, type CompressionSummary, type CompressorMode, type ContextCompressor, type RetrievalStore, type SyncContextCompressor, } from "./context-compressor.js";
24
+ export { compressContent, compressContentSync, compressionToolUsage, formatCompressionSummary, isCompressibleCategory, readCompressorMode, resolveCompressorMode, runRetrievalStore, summarizeCompression, summarizeToolCompression, type CompressInput, type CompressOutput, type CompressionCategory, type CompressionSummary, type CompressorMode, type ContextCompressor, type RetrievalStore, type SyncContextCompressor, } from "./context-compressor.js";
25
+ export { assessFactSurvival, extractAnchors, formatFactSurvival, type FactSurvival, } from "./compression-survival.js";
25
26
  export { HEADROOM_BRIDGE, HEADROOM_VERSION, authorizeCompressor, createHeadroomCompressor, createHeadroomSyncCompressor, defaultHeadroomRunner, headroomCommands, headroomNetworkDomains, headroomOffline, headroomToolDefinition, libraryHeadroomRunner, resolveHeadroomRunner, type CompressorAuthorization, type HeadroomRunner, } from "./headroom-adapter.js";
27
+ export { codebaseMemoryToolDefinition, createStdioCbmRunner, classifyIndexFreshness, diffWriteInventory, type CbmRequest, type CbmResponse, type CbmRunner, type CbmIndexIdentity, type IndexFreshness, type WriteInventory, } from "./codebase-memory-adapter.js";
26
28
  export { formatPlanReport, readTaskPlans, runPlanReport, type PlanReportDeps, type TaskPlanScore, } from "./plan-report-cli.js";
27
29
  export { formatAuditReport, runMemory, type MemoryDeps } from "./memory-cli.js";
28
30
  export { allocateMemoryId, auditMemory, boundLearnings, detectConflicts, DEFAULT_FREQUENT_USE, DEFAULT_LEARNINGS_BUDGET_CHARS, formatBoundedLearnings, listMemoryIds, memoryDir, memoryRecordPath, memoryStatus, parseMemoryRecord, projectLearnings, readMemoryRecord, readMemoryRecords, selectRelevantMemory, supersede, touchMemory, writeMemoryRecord, type AuditReport, type BoundedMemory, type MemoryRecord, type MemorySelectionContext, type MemoryStatus, type MemoryTrust, type Supersession, } from "./memory.js";
@@ -32,7 +34,7 @@ export { deriveProgress, type IterationObservation, type ProgressSignals, } from
32
34
  export { decide, type PolicyAction, type PolicyContext, type PolicyDecision, } from "./policy.js";
33
35
  export { checkApprovalRequired, checkCommand, checkNetworkDomain, checkWritePath, DEFAULT_POLICY, parseSafetyPolicy, readSafetyPolicy, type PolicyViolation, type PolicyViolationKind, type SafetyPolicy, } from "./safety-policy.js";
34
36
  export { TAINT_SOURCES, UNTRUSTED_WARNING, wrapUntrusted, type TaintSource, } from "./taint.js";
35
- export { authorizeToolInvocation, parseTool, readToolConfig, readTools, selectToolsForStage, toolEnabledForStage, toolPath, toolsDir, type ToolAuthorization, type ToolConfig, type ToolDefinition, type ToolInvocation, type ToolKind, type ToolOverride, type ToolResult, type ToolSelection, } from "./tools.js";
37
+ export { authorizeToolInvocation, authorizeToolOperation, parseTool, readToolConfig, readTools, selectToolsForStage, toolEnabledForStage, toolPath, toolsDir, type ToolAuthorization, type ToolConfig, type ToolDefinition, type ToolInvocation, type ToolKind, type ToolOperation, type ToolOverride, type ToolResult, type ToolSelection, } from "./tools.js";
36
38
  export { auditTools, auditToolPolicyConflicts, formatToolsAudit, formatToolsList, formatToolsWhy, runTools, type ToolAuditFinding, type ToolsDeps, } from "./tools-cli.js";
37
39
  export { findSkillCandidates, globMatch, listSkillIds, parseSkill, readSkill, readSkills, recordStaticValidation, recordValidation, selectSkills, skillDir, skillExists, skillInstructionsPath, skillManifestPath, skillsDir, skillStatus, toSkillName, writeSkill, type CandidateRun, type Skill, type SkillCandidate, type SkillMatch, type SkillMatchContext, type ImportedSkillProvenance, type SkillCompatibility, type SkillStatus, type SkillTrust, type SkillValidation, type StaticValidationOutcome, } from "./skills.js";
38
40
  export { addSource, applySync, auditExternal, discoverPackages, importedChecksum, lockPath, normalizePackage, parseFrontmatter, parseSource, planSync, readLock, readSources, removeSource, sourcesPath, writeLock, writeSources, type DiscoveredPackage, type ExternalAuditFinding, type ExternalSkillLock, type ExternalSkillLockEntry, type ExternalSkillSource, type ExternalSourceType, type SyncAction, type SyncPlan, type SyncPlanItem, } from "./external-skills.js";
@@ -42,7 +44,7 @@ export { boundExcerpt, formatSkillInjection, routeSkillsForStage, stageFamily, t
42
44
  export { EXTENSION_PROFILES, getProfile, listProfiles, type ExtensionProfile, } from "./extension-profiles.js";
43
45
  export { applyProfile, formatProfileList, formatProfilePlan, planProfile, runExtensions, type ExtensionsDeps, type ProfilePlan, type ProfilePlanItem, } from "./extensions-cli.js";
44
46
  export { checkProvenance, classifyCompatibility, extractCapabilities, lintManifest, scanInstructionRisks, skillChecksum, validateSkill, type SkillCheckFinding, type SkillCheckKind, type SkillCheckSeverity, type SkillValidationReport, } from "./skill-validation.js";
45
- export { compareTrajectories, scoreTrajectory, type EvalSignals, type LabelledSignals, } from "./eval.js";
47
+ export { compareTrajectories, scoreImpactRecall, scoreTrajectory, type EvalSignals, type LabelledSignals, } from "./eval.js";
46
48
  export { PLAN_CRITERIA, detectScopeDrift, extractPlanFileMap, formatPlanDepthRubric, formatPlanRubric, scorePlanDepth, scorePlanQuality, type PlanDepthCriterion, type PlanDepthCriterionResult, type PlanDepthScore, type PlanCriterion, type PlanCriterionResult, type PlanRubricScore, type ScopeDriftResult, } from "./plan-rubric.js";
47
49
  export { buildFallbackRunReport, extractRunReport, finalizeReportText, summarizeReviewSeverity, type FinalizeReportContext, type ReviewSeveritySummary, type ScopeDriftSummary, } from "./report-finalize.js";
48
50
  export { REPORT_CRITERIA, formatReportRubric, scoreReportLegibility, type ReportCriterion, type ReportCriterionResult, type ReportRubricScore, } from "./report-rubric.js";
@@ -55,11 +57,12 @@ export { parseLinearRef, parseLinearIssueArg, resolveLinearAuth, resolveDoneStat
55
57
  export { runLinearAuth, defaultLinearAuthDeps, type LinearAuthCliDeps, } from "./linear-auth.js";
56
58
  export { runLinear, defaultLinearCliDeps, type LinearCliDeps, } from "./linear-cli.js";
57
59
  export { parsePlanProgress, type PlanProgress, type PlanProgressItem, } from "./plan-progress.js";
58
- export { parsePlanTasks, planParallelGroups, readPlanTasks, type PlanTask, } from "./plan-tasks.js";
60
+ export { parsePlanTasks, planParallelGroups, readPlanTasks, pathsCollide, scopesOverlap, scopeConfidence, predictConflicts, type PlanTask, type ConflictPrediction, } from "./plan-tasks.js";
59
61
  export { reviewsFanoutInsteadOfReplan } from "./plan-fanout.js";
62
+ export { parseHandoff, computeOutOfScope, type TestRun, type SubAgentHandoff, } from "./handoff.js";
60
63
  export { INPUT_DIMENSIONS, formatInputSharpness, formatSharpeningGuidance, scoreInputSharpness, type InputDimension, type InputDimensionResult, type InputSharpnessScore, } from "./input-sharpness.js";
61
64
  export { createWorktree, reapWorktrees } from "./worktree.js";
62
- export { runFanout, type FanoutResult, type FanoutTaskOutcome, type FanoutTaskStatus, type RunFanoutOptions, } from "./fanout.js";
65
+ export { buildCrossTaskSummary, orderByConflictRisk, runFanout, type FanoutResult, type FanoutTaskOutcome, type FanoutTaskStatus, type RunFanoutOptions, } from "./fanout.js";
63
66
  export { buildRunView, formatDoneCard, formatLiveTree, type RunView, type RunViewStage, } from "./run-view.js";
64
67
  export { runTail, type TailDeps } from "./tail.js";
65
68
  export { appendAudit, screenEntry, screenGate1, screenGate2, MAX_ENTRY_CHARS, MIN_ENTRY_CHARS, type Gate3Judge, type GateContext, type GateResult, } from "./journal-gate.js";