nlm-memory 0.20.1 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/README.md +2 -0
  2. package/dist/cli/digest.js +39 -1
  3. package/dist/cli/digest.js.map +1 -1
  4. package/dist/cli/nlm.js +106 -6
  5. package/dist/cli/nlm.js.map +1 -1
  6. package/dist/cli/scope-backfill.d.ts +34 -0
  7. package/dist/cli/scope-backfill.js +237 -0
  8. package/dist/cli/scope-backfill.js.map +1 -0
  9. package/dist/cli/scope-coverage.d.ts +44 -0
  10. package/dist/cli/scope-coverage.js +205 -0
  11. package/dist/cli/scope-coverage.js.map +1 -0
  12. package/dist/core/adapters/claude-code.d.ts +14 -0
  13. package/dist/core/adapters/claude-code.js +30 -0
  14. package/dist/core/adapters/claude-code.js.map +1 -1
  15. package/dist/core/dataset/build-dataset.js +1 -0
  16. package/dist/core/dataset/build-dataset.js.map +1 -1
  17. package/dist/core/digest/compose.d.ts +3 -3
  18. package/dist/core/digest/compose.js +16 -17
  19. package/dist/core/digest/compose.js.map +1 -1
  20. package/dist/core/digest/hook-injection.d.ts +43 -0
  21. package/dist/core/digest/hook-injection.js +79 -0
  22. package/dist/core/digest/hook-injection.js.map +1 -0
  23. package/dist/core/exemplars/capture-from-session.d.ts +1 -0
  24. package/dist/core/exemplars/capture-from-session.js +1 -1
  25. package/dist/core/exemplars/capture-from-session.js.map +1 -1
  26. package/dist/core/exemplars/extract-exemplar.d.ts +2 -0
  27. package/dist/core/exemplars/extract-exemplar.js +7 -1
  28. package/dist/core/exemplars/extract-exemplar.js.map +1 -1
  29. package/dist/core/exemplars/ingest-exemplar.d.ts +1 -0
  30. package/dist/core/exemplars/ingest-exemplar.js +1 -0
  31. package/dist/core/exemplars/ingest-exemplar.js.map +1 -1
  32. package/dist/core/hook/claude-settings.d.ts +1 -1
  33. package/dist/core/hook/claude-settings.js +0 -1
  34. package/dist/core/hook/claude-settings.js.map +1 -1
  35. package/dist/core/ingest/backfill-derivables.d.ts +92 -0
  36. package/dist/core/ingest/backfill-derivables.js +175 -0
  37. package/dist/core/ingest/backfill-derivables.js.map +1 -0
  38. package/dist/core/ingest/ingest-session.js +20 -0
  39. package/dist/core/ingest/ingest-session.js.map +1 -1
  40. package/dist/core/ingest/reclassify-oversized.js +6 -0
  41. package/dist/core/ingest/reclassify-oversized.js.map +1 -1
  42. package/dist/core/ingest/reprocess.js +5 -0
  43. package/dist/core/ingest/reprocess.js.map +1 -1
  44. package/dist/core/ingest/transcript-derivables.d.ts +27 -0
  45. package/dist/core/ingest/transcript-derivables.js +138 -0
  46. package/dist/core/ingest/transcript-derivables.js.map +1 -0
  47. package/dist/core/outcome/coverage.d.ts +33 -0
  48. package/dist/core/outcome/coverage.js +46 -0
  49. package/dist/core/outcome/coverage.js.map +1 -0
  50. package/dist/core/outcome/rollup.d.ts +33 -0
  51. package/dist/core/outcome/rollup.js +113 -0
  52. package/dist/core/outcome/rollup.js.map +1 -0
  53. package/dist/core/recall/hook-recall-log.d.ts +2 -2
  54. package/dist/core/recall/hook-recall-log.js +2 -2
  55. package/dist/core/recall-facts/fact-recall-service.js +1 -0
  56. package/dist/core/recall-facts/fact-recall-service.js.map +1 -1
  57. package/dist/core/scheduler/scan-once.js +2 -0
  58. package/dist/core/scheduler/scan-once.js.map +1 -1
  59. package/dist/core/scheduler/scheduler.js +34 -3
  60. package/dist/core/scheduler/scheduler.js.map +1 -1
  61. package/dist/core/scope/alias-map.d.ts +10 -0
  62. package/dist/core/scope/alias-map.js +41 -0
  63. package/dist/core/scope/alias-map.js.map +1 -0
  64. package/dist/core/scope/derive-scope.d.ts +8 -0
  65. package/dist/core/scope/derive-scope.js +54 -0
  66. package/dist/core/scope/derive-scope.js.map +1 -0
  67. package/dist/core/scope/scope-clause.d.ts +16 -0
  68. package/dist/core/scope/scope-clause.js +21 -0
  69. package/dist/core/scope/scope-clause.js.map +1 -0
  70. package/dist/core/scope/stamp-flag.d.ts +1 -0
  71. package/dist/core/scope/stamp-flag.js +4 -0
  72. package/dist/core/scope/stamp-flag.js.map +1 -0
  73. package/dist/core/signals/code-signal.d.ts +1 -0
  74. package/dist/core/signals/code-signal.js +1 -0
  75. package/dist/core/signals/code-signal.js.map +1 -1
  76. package/dist/core/signals/ingest-signal.d.ts +1 -1
  77. package/dist/core/signals/ingest-signal.js +3 -1
  78. package/dist/core/signals/ingest-signal.js.map +1 -1
  79. package/dist/core/signals/stamp-scope.d.ts +18 -0
  80. package/dist/core/signals/stamp-scope.js +28 -0
  81. package/dist/core/signals/stamp-scope.js.map +1 -0
  82. package/dist/core/storage/pg-code-exemplar-store.js +6 -2
  83. package/dist/core/storage/pg-code-exemplar-store.js.map +1 -1
  84. package/dist/core/storage/pg-fact-ingest.d.ts +1 -1
  85. package/dist/core/storage/pg-fact-ingest.js +4 -4
  86. package/dist/core/storage/pg-fact-ingest.js.map +1 -1
  87. package/dist/core/storage/pg-session-store.d.ts +2 -2
  88. package/dist/core/storage/pg-session-store.js +31 -31
  89. package/dist/core/storage/pg-session-store.js.map +1 -1
  90. package/dist/core/storage/pg-signal-store.js +4 -3
  91. package/dist/core/storage/pg-signal-store.js.map +1 -1
  92. package/dist/core/storage/pg-workstream-store.d.ts +1 -0
  93. package/dist/core/storage/pg-workstream-store.js +2 -1
  94. package/dist/core/storage/pg-workstream-store.js.map +1 -1
  95. package/dist/core/storage/sqlite-code-exemplar-store.js +4 -2
  96. package/dist/core/storage/sqlite-code-exemplar-store.js.map +1 -1
  97. package/dist/core/storage/sqlite-fact-store.d.ts +1 -1
  98. package/dist/core/storage/sqlite-fact-store.js +8 -5
  99. package/dist/core/storage/sqlite-fact-store.js.map +1 -1
  100. package/dist/core/storage/sqlite-outcome-store.d.ts +89 -0
  101. package/dist/core/storage/sqlite-outcome-store.js +158 -0
  102. package/dist/core/storage/sqlite-outcome-store.js.map +1 -0
  103. package/dist/core/storage/sqlite-session-store.d.ts +22 -2
  104. package/dist/core/storage/sqlite-session-store.js +33 -35
  105. package/dist/core/storage/sqlite-session-store.js.map +1 -1
  106. package/dist/core/storage/sqlite-signal-store.js +4 -2
  107. package/dist/core/storage/sqlite-signal-store.js.map +1 -1
  108. package/dist/core/storage/sqlite-workstream-store.d.ts +1 -0
  109. package/dist/core/storage/sqlite-workstream-store.js +2 -1
  110. package/dist/core/storage/sqlite-workstream-store.js.map +1 -1
  111. package/dist/core/storage/supersedence-log.js +2 -0
  112. package/dist/core/storage/supersedence-log.js.map +1 -1
  113. package/dist/core/telemetry/probe-filter.d.ts +35 -0
  114. package/dist/core/telemetry/probe-filter.js +56 -0
  115. package/dist/core/telemetry/probe-filter.js.map +1 -0
  116. package/dist/core/update-check/check.d.ts +6 -0
  117. package/dist/core/update-check/check.js +35 -0
  118. package/dist/core/update-check/check.js.map +1 -1
  119. package/dist/core/workstream/bind.d.ts +2 -1
  120. package/dist/core/workstream/bind.js +28 -9
  121. package/dist/core/workstream/bind.js.map +1 -1
  122. package/dist/core/workstream/model.d.ts +1 -0
  123. package/dist/core/workstream/model.js.map +1 -1
  124. package/dist/hook/pre-compact-hook.js +2 -1
  125. package/dist/hook/pre-compact-hook.js.map +1 -1
  126. package/dist/hook/prompt-recall-hook.d.ts +3 -2
  127. package/dist/hook/prompt-recall-hook.js +8 -4
  128. package/dist/hook/prompt-recall-hook.js.map +1 -1
  129. package/dist/hook/recall-over-http.d.ts +2 -1
  130. package/dist/hook/recall-over-http.js +15 -2
  131. package/dist/hook/recall-over-http.js.map +1 -1
  132. package/dist/hook/session-start-hook.js +2 -1
  133. package/dist/hook/session-start-hook.js.map +1 -1
  134. package/dist/hook/stop-hook.js +2 -1
  135. package/dist/hook/stop-hook.js.map +1 -1
  136. package/dist/http/app.d.ts +6 -0
  137. package/dist/http/app.js +26 -38
  138. package/dist/http/app.js.map +1 -1
  139. package/dist/mcp/server.d.ts +22 -0
  140. package/dist/mcp/server.js +101 -1
  141. package/dist/mcp/server.js.map +1 -1
  142. package/dist/ports/outcome.d.ts +85 -0
  143. package/dist/ports/outcome.js +11 -0
  144. package/dist/ports/outcome.js.map +1 -0
  145. package/dist/ports/session-store.d.ts +0 -6
  146. package/dist/ports/workstream-store.d.ts +1 -0
  147. package/dist/shared/net.d.ts +3 -0
  148. package/dist/shared/net.js +4 -0
  149. package/dist/shared/net.js.map +1 -0
  150. package/dist/shared/types.d.ts +33 -0
  151. package/dist/shared/types.js +4 -1
  152. package/dist/shared/types.js.map +1 -1
  153. package/dist/ui/assets/{index-CMpQkbQy.js → index-CSaBtgXD.js} +1 -1
  154. package/dist/ui/index.html +1 -1
  155. package/migrations/029_project_scope.sql +21 -0
  156. package/migrations/032_session_derivables.sql +11 -0
  157. package/migrations/pg/030_project_scope.sql +23 -0
  158. package/migrations/pg/031_widen_session_edges_kind.sql +11 -0
  159. package/migrations/pg/032_session_derivables.sql +17 -0
  160. package/nlm/index.js +14 -6
  161. package/package.json +1 -1
  162. package/plugin/.codex-plugin/plugin.json +2 -2
  163. package/plugin/scripts/prompt-recall-hook.mjs +15 -6
  164. package/plugin/scripts/session-start-hook.mjs +11 -3
  165. package/plugin/scripts/stop-hook.mjs +4 -1
  166. package/dist/hook/subagent-start-hook.d.ts +0 -28
  167. package/dist/hook/subagent-start-hook.js +0 -81
  168. package/dist/hook/subagent-start-hook.js.map +0 -1
@@ -0,0 +1,175 @@
1
+ /**
2
+ * backfill-derivables — one-time retroactive stamp of agent_persona +
3
+ * parent_session_id (#352 phase 2) onto sessions ingested before the
4
+ * scheduler started stamping them at classify time (see
5
+ * src/core/scheduler/scheduler.ts, commit 34968a8).
6
+ *
7
+ * Mirrors the live stamp site exactly so backfilled rows match
8
+ * freshly-ingested ones: claude-code rows go through deriveSubagentMeta
9
+ * (reversing the `<parent>/agent-<id>` runtimeSessionId + `[subagent <slug>]`
10
+ * label encoding); every other runtime has no subagent concept, so persona
11
+ * is just the runtime name and parent is null.
12
+ *
13
+ * Idempotent: selection is WHERE agent_persona IS NULL, so a re-run only
14
+ * touches rows a prior run (or live ingest) hasn't stamped yet.
15
+ *
16
+ * Known data quirk (Task 2 review): some subagent transcripts encode a
17
+ * literal `unknown` parent (`unknown/agent-<id>`), which derives
18
+ * parentSessionId = "unknown" — a non-joining placeholder, not a real
19
+ * session id. The backfill still writes it, for consistency with live
20
+ * stamping, but counts it separately (`unknownParent`) so operators can see
21
+ * how much of the corpus has an unresolvable parent link.
22
+ *
23
+ * Persona is frequently unrecoverable for pre-existing subagent rows: the
24
+ * live stamp site derives persona from the transient pre-classification
25
+ * chunk.label (which carries the `[subagent <slug>]` prefix), but the
26
+ * `label` column this backfill reads is the classifier's generated title —
27
+ * that prefix is already gone by the time a row lands in `sessions`. In
28
+ * practice this means most historical subagent rows get parent_session_id
29
+ * populated but agent_persona stays NULL. Only genuinely new ingests (which
30
+ * derive from the live chunk before classification overwrites it) get both.
31
+ * Such rows stay selectable (agent_persona IS NULL) forever, so the run
32
+ * compares derived values against stored ones and counts a row `updated`
33
+ * only when the write would change something; a re-run over a fully
34
+ * backfilled corpus reports updated=0 with the unrecoverable rows under
35
+ * `skippedNoop`.
36
+ *
37
+ * Task 5 addition: `--with-transcript-scan` optionally also re-scans each
38
+ * candidate's transcript file for primary_model/total_tokens/skill via
39
+ * scanTranscriptDerivables. Off by default — scanning streams every
40
+ * candidate's transcript off disk and is far slower than the persona/parent
41
+ * derivation above, which only touches already-loaded columns. When the
42
+ * flag is set, candidacy widens beyond WHERE agent_persona IS NULL with an
43
+ * OR arm keyed on the scan's own columns (claude-code-jsonl rows with a
44
+ * transcript_path and all three scan columns still NULL) — otherwise a row
45
+ * whose persona was stamped by an earlier flagless run would never be
46
+ * scannable, leaving the flag shipped but effectively unwired for exactly
47
+ * the rows Task 3 already processed. Rows selected only via that arm get a
48
+ * scan-only write (persona/parent untouched); either way the scan columns
49
+ * COALESCE-preserve, and a re-run reports updated=0: a stamped scan column
50
+ * excludes the row from the OR arm on the next pass, and rows that stay
51
+ * selectable via the persona arm (persona-unrecoverable subagent rows) skip
52
+ * the re-scan once any scan column is stamped and count as no-op when the
53
+ * scan cannot change the row (all-null result, or derivables already
54
+ * stored).
55
+ */
56
+ import { deriveSubagentMeta } from "../adapters/claude-code.js";
57
+ import { scanTranscriptDerivables } from "./transcript-derivables.js";
58
+ const BATCH_SIZE = 500;
59
+ const NULL_TRANSCRIPT_DERIVABLES = {
60
+ primaryModel: null,
61
+ totalTokens: null,
62
+ skill: null,
63
+ };
64
+ // Widened OR arm for --with-transcript-scan: rows already persona-stamped
65
+ // (e.g. by an earlier flagless Task 3 run) but never transcript-scanned.
66
+ // Scoped to claude-code-jsonl since scanTranscriptDerivables derives nothing
67
+ // for any other kind; requires ALL three scan columns NULL so any stamped
68
+ // scan column excludes the row on the next pass (re-run idempotency).
69
+ const SCAN_CANDIDATE_ARM = " OR (transcript_path IS NOT NULL AND transcript_kind = 'claude-code-jsonl'" +
70
+ " AND primary_model IS NULL AND total_tokens IS NULL AND skill IS NULL)";
71
+ function selectCandidates(db, withTranscriptScan) {
72
+ return db
73
+ .prepare("SELECT id, runtime, runtime_session_id, label, agent_persona, parent_session_id, transcript_path, transcript_kind, primary_model, total_tokens, skill" +
74
+ " FROM sessions WHERE agent_persona IS NULL" +
75
+ (withTranscriptScan ? SCAN_CANDIDATE_ARM : ""))
76
+ .all();
77
+ }
78
+ // The sessions.runtime column stores the adapter's versioned runtime string
79
+ // (e.g. "claude-code/1.0", "hermes/1.0" — see each adapter's runtimeVersion
80
+ // field), but the live stamp site in scheduler.ts branches on the bare
81
+ // adapter name ("claude-code", "hermes", ...). Strip the version suffix so
82
+ // the backfill branches identically to a fresh ingest.
83
+ function bareRuntimeName(runtime) {
84
+ const slash = runtime.indexOf("/");
85
+ return slash === -1 ? runtime : runtime.slice(0, slash);
86
+ }
87
+ function deriveMeta(row) {
88
+ const runtimeName = bareRuntimeName(row.runtime);
89
+ if (runtimeName === "claude-code") {
90
+ return deriveSubagentMeta(row.runtime_session_id ?? "", row.label);
91
+ }
92
+ return { persona: runtimeName, parentSessionId: null };
93
+ }
94
+ export async function backfillDerivables(db, opts = {}) {
95
+ const total = db.prepare("SELECT COUNT(*) AS n FROM sessions").get().n;
96
+ const candidates = selectCandidates(db, Boolean(opts.withTranscriptScan));
97
+ const skippedAlreadyStamped = total - candidates.length;
98
+ let subagentCandidates = 0;
99
+ let unknownParent = 0;
100
+ let skippedNoop = 0;
101
+ let transcriptScanned = 0;
102
+ const toWrite = [];
103
+ for (const row of candidates) {
104
+ const meta = row.agent_persona === null ? deriveMeta(row) : null;
105
+ if (meta) {
106
+ if (meta.parentSessionId !== null)
107
+ subagentCandidates++;
108
+ if (meta.parentSessionId === "unknown")
109
+ unknownParent++;
110
+ }
111
+ // Any non-null stored scan column means a completed prior scan already
112
+ // stamped every field this transcript can derive (all three co-derive
113
+ // from the same pass, at ingest and here) - re-scanning would only
114
+ // re-derive values COALESCE discards. Skipping is what keeps
115
+ // persona-unrecoverable rows (agent_persona NULL forever, re-selected
116
+ // every run via the persona arm) from re-streaming their transcript and
117
+ // churning as "updated" on every pass.
118
+ const scanAlreadyRan = row.primary_model !== null || row.total_tokens !== null || row.skill !== null;
119
+ let transcript = NULL_TRANSCRIPT_DERIVABLES;
120
+ if (opts.withTranscriptScan && row.transcript_path && !scanAlreadyRan) {
121
+ transcript = await scanTranscriptDerivables(row.transcript_path, row.transcript_kind ?? "");
122
+ if (transcript.primaryModel !== null || transcript.totalTokens !== null || transcript.skill !== null) {
123
+ transcriptScanned++;
124
+ }
125
+ }
126
+ // Persona-null rows: the meta write is a no-op exactly when the derived
127
+ // persona is also NULL and the derived parent matches what a prior run
128
+ // already stamped (or is equally NULL). Scan-only rows have nothing to
129
+ // write for meta by definition.
130
+ const metaIsNoop = meta === null || (meta.persona === null && meta.parentSessionId === row.parent_session_id);
131
+ // The scan write is COALESCE-guarded, so it changes the row only where a
132
+ // stored column is NULL and the scan derived a value for it. An all-null
133
+ // scan (missing/unreadable transcript) or a scan whose derivables are
134
+ // already stored is a no-op - counting those as "updated" was the run-N
135
+ // churn bug (updated=N repeating forever with byte-identical results).
136
+ const transcriptWrites = (row.primary_model === null && transcript.primaryModel !== null) ||
137
+ (row.total_tokens === null && transcript.totalTokens !== null) ||
138
+ (row.skill === null && transcript.skill !== null);
139
+ if (metaIsNoop && !transcriptWrites) {
140
+ skippedNoop++;
141
+ continue;
142
+ }
143
+ toWrite.push({ id: row.id, meta, transcript });
144
+ }
145
+ if (opts.dryRun) {
146
+ return { total, updated: toWrite.length, skippedAlreadyStamped, skippedNoop, subagentCandidates, unknownParent, transcriptScanned };
147
+ }
148
+ const metaAndScanStmt = db.prepare(`UPDATE sessions SET
149
+ agent_persona = ?, parent_session_id = ?,
150
+ primary_model = COALESCE(primary_model, ?),
151
+ total_tokens = COALESCE(total_tokens, ?),
152
+ skill = COALESCE(skill, ?)
153
+ WHERE id = ? AND agent_persona IS NULL`);
154
+ const scanOnlyStmt = db.prepare(`UPDATE sessions SET
155
+ primary_model = COALESCE(primary_model, ?),
156
+ total_tokens = COALESCE(total_tokens, ?),
157
+ skill = COALESCE(skill, ?)
158
+ WHERE id = ?`);
159
+ for (let i = 0; i < toWrite.length; i += BATCH_SIZE) {
160
+ const batch = toWrite.slice(i, i + BATCH_SIZE);
161
+ const runBatch = db.transaction((rows) => {
162
+ for (const row of rows) {
163
+ if (row.meta) {
164
+ metaAndScanStmt.run(row.meta.persona, row.meta.parentSessionId, row.transcript.primaryModel, row.transcript.totalTokens, row.transcript.skill, row.id);
165
+ }
166
+ else {
167
+ scanOnlyStmt.run(row.transcript.primaryModel, row.transcript.totalTokens, row.transcript.skill, row.id);
168
+ }
169
+ }
170
+ });
171
+ runBatch(batch);
172
+ }
173
+ return { total, updated: toWrite.length, skippedAlreadyStamped, skippedNoop, subagentCandidates, unknownParent, transcriptScanned };
174
+ }
175
+ //# sourceMappingURL=backfill-derivables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backfill-derivables.js","sourceRoot":"","sources":["../../../src/core/ingest/backfill-derivables.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import { createHash } from "node:crypto";
10
10
  import { extractFacts } from "../facts/extract-facts.js";
11
+ import { scanTranscriptDerivables } from "../ingest/transcript-derivables.js";
11
12
  import { PgSessionStore } from "../storage/pg-session-store.js";
12
13
  const BODY_CAP = 200_000;
13
14
  const CONFIDENCE_FLOOR = 0.3;
@@ -44,6 +45,14 @@ export async function ingestSession(input, deps) {
44
45
  confidence: classification.confidence,
45
46
  };
46
47
  }
48
+ // Task #352 phase 2 (Task 5): scan the transcript file (if any) for
49
+ // primary_model/total_tokens/skill. Webhook pushes carry transcriptKind
50
+ // "webhook", not "claude-code-jsonl", so this always resolves all-null
51
+ // today -- wired for parity with the scheduler stamp site and any future
52
+ // webhook kind that does carry a scannable transcript.
53
+ const transcriptDerivables = input.transcriptPath
54
+ ? await scanTranscriptDerivables(input.transcriptPath, "webhook")
55
+ : { primaryModel: null, totalTokens: null, skill: null };
47
56
  const record = {
48
57
  id,
49
58
  runtime: input.runtime,
@@ -62,6 +71,17 @@ export async function ingestSession(input, deps) {
62
71
  entities: classification.entities,
63
72
  decisions: classification.decisions,
64
73
  openQuestions: classification.open,
74
+ // Push ingest carries no project directory; the scope backfill command
75
+ // derives it later from the transcript when evidence exists.
76
+ scope: null,
77
+ // Webhook pushes have no adapter chunk to derive subagent lineage from;
78
+ // stamp the runtime name as persona, matching every non-claude-code
79
+ // adapter at the scheduler stamp site (#352 phase 2).
80
+ agentPersona: input.runtime,
81
+ parentSessionId: null,
82
+ primaryModel: transcriptDerivables.primaryModel,
83
+ totalTokens: transcriptDerivables.totalTokens,
84
+ skill: transcriptDerivables.skill,
65
85
  ...(deps.classifierDescriptor !== undefined
66
86
  ? { classifier: { ...deps.classifierDescriptor, confidence: classification.confidence } }
67
87
  : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"ingest-session.js","sourceRoot":"","sources":["../../../src/core/ingest/ingest-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ingest-session.js","sourceRoot":"","sources":["../../../src/core/ingest/ingest-session.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import { classifyAdaptive } from "../classifier/hierarchical-classify.js";
2
2
  import { extractFacts } from "../facts/extract-facts.js";
3
+ import { deriveScope } from "../scope/derive-scope.js";
4
+ import { loadAliasMap } from "../scope/alias-map.js";
5
+ import { scopeStampEnabled } from "../scope/stamp-flag.js";
3
6
  const BODY_CAP = 200_000;
4
7
  const CONFIDENCE_FLOOR = 0.3;
5
8
  export function selectOversizedFailures(db, limit) {
@@ -78,6 +81,9 @@ export async function reclassifyOversized(deps, opts = {}) {
78
81
  entities: classification.entities,
79
82
  decisions: classification.decisions,
80
83
  openQuestions: classification.open,
84
+ scope: scopeStampEnabled() && chunk.projectDir
85
+ ? deriveScope(chunk.projectDir, loadAliasMap())
86
+ : null,
81
87
  ...(deps.classifierDescriptor !== undefined
82
88
  ? { classifier: { ...deps.classifierDescriptor, confidence: classification.confidence } }
83
89
  : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"reclassify-oversized.js","sourceRoot":"","sources":["../../../src/core/ingest/reclassify-oversized.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reclassify-oversized.js","sourceRoot":"","sources":["../../../src/core/ingest/reclassify-oversized.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,7 @@ function loadState(path, lane) {
47
47
  return new Set();
48
48
  }
49
49
  catch {
50
+ // Malformed state file: restart reprocessing from scratch.
50
51
  return new Set();
51
52
  }
52
53
  }
@@ -237,6 +238,10 @@ export async function reprocess(deps, opts = {}) {
237
238
  entities: classification.entities,
238
239
  decisions: classification.decisions,
239
240
  openQuestions: classification.open,
241
+ // Reprocess rebuilds from the stored row, which carries no project
242
+ // directory evidence; the scope backfill command re-derives from the
243
+ // transcript, so a NULL here is recoverable.
244
+ scope: null,
240
245
  classifier: { ...classifierDescriptor, confidence: classification.confidence },
241
246
  };
242
247
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"reprocess.js","sourceRoot":"","sources":["../../../src/core/ingest/reprocess.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reprocess.js","sourceRoot":"","sources":["../../../src/core/ingest/reprocess.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAO5D,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACtE,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAwE7B,SAAS,cAAc,CAAC,IAAmB;IACzC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACjC,IAAI,IAAI,GAAG,GAAG;QAAE,OAAO,MAAM,CAAC;IAC9B,IAAI,IAAI,GAAG,GAAG;QAAE,OAAO,SAAS,CAAC;IACjC,IAAI,IAAI,GAAG,GAAG;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,IAAkB;IACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAGhD,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3E,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;QAC3D,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,IAAiB,EAAE,IAAkB;IACpE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,EAAY,EACZ,KAAa,EACb,aAAsB,EACtB,IAAuD;IAEvD,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,IAAI,gBAAwB,CAAC;IAC7B,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;QACnB,gBAAgB,GAAG,0BAA0B,CAAC;IAChD,CAAC;SAAM,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,gBAAgB,GAAG,kFAAkF,CAAC;QACtG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,gBAAgB,GAAG,qDAAqD,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,EAAE,CAAC;IAChD,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,aAAa,GAAG,8DAA8D,YAAY,IAAI,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,GAAG,GACP,8EAA8E;QAC9E,4DAA4D;QAC5D,wCAAwC;QACxC,+DAA+D;QAC/D,gBAAgB;QAChB,8CAA8C;QAC9C,MAAM;QACN,gBAAgB;QAChB,aAAa;QACb,GAAG;QACH,0BAA0B,CAAC;IAE7B,OAAO,EAAE,CAAC,OAAO,CAA2C,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAmB,EACnB,OAAyB,EAAE;IAE3B,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAClF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACvD,MAAM,IAAI,GAAiB;QACzB,QAAQ,EAAE,oBAAoB,CAAC,QAAQ;QACvC,KAAK,EAAE,oBAAoB,CAAC,KAAK;KAClC,CAAC;IAEF,MAAM,aAAa,GAAG,yBAAyB,CAAC,EAAE,EAAE,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE;QAClG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,mBAAmB,IAAI,EAAE,SAAS,GAAG,CAAC,gBAAgB,IAAI,EAAE,SAAS,cAAc,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACpI,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE;oBAChB,kBAAkB,EAAE,GAAG,CAAC,mBAAmB;oBAC3C,eAAe,EAAE,GAAG,CAAC,gBAAgB;oBACrC,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,qBAAqB,CAAC;oBACzD,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAExE,IAAI,SAA6B,CAAC;QAClC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC;YAC1C,SAAS,GAAG,uBAAuB,CAAC,iDAAiD,CAAC;QACxF,CAAC;QAED,OAAO;YACL,aAAa,EAAE,aAAa,CAAC,MAAM;YACnC,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC;YACT,kBAAkB,EAAE,CAAC;YACrB,YAAY,EAAE,CAAC;YACf,oBAAoB,EAAE,CAAC;YACvB,iBAAiB,EAAE,IAAI;YACvB,iBAAiB,EAAE,IAAI;YACvB,MAAM;YACN,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,GAAG,GAAkB,IAAI,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC/D,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,iDAAiD;YACnD,CAAC;YACD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,MAAM,QAAQ,GACZ,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,kBAAkB,CAAC,QAAQ;oBACpD,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK;oBAC9C,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC;gBACrB,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBACjC,MAAM,GAAG,GACP,oDAAoD,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,EAAE;wBACnG,eAAe,IAAI,CAAC,kBAAkB,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,IAAI,GAAG,GAAG;wBAC1F,2FAA2F;wBAC3F,qCAAqC,CAAC;oBACxC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACT,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CACzB,wCAAwC,CACzC,CAAC;IAEF,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAExC,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACrF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IAE1B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAElB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;YACnB,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,GAAG,CAAC,0BAA0B,GAAG,YAAY,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAE1B,IAAI,cAAc,CAAC;QACnB,IAAI,CAAC;YACH,cAAc,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE;gBACxD,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,GAAG,CAAC,+BAA+B,GAAG,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzF,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,qBAAqB,KAAK,IAAI,EAAE,CAAC;YACvC,gBAAgB,IAAI,GAAG,CAAC,qBAAqB,CAAC;YAC9C,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,gBAAgB,IAAI,cAAc,CAAC,UAAU,CAAC;QAC9C,QAAQ,EAAE,CAAC;QAEX,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,GAAG,gBAAgB,CAAC;QAChE,IAAI,UAAU,EAAE,CAAC;YACf,oBAAoB,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,GAAG,CACD,2BAA2B,GAAG,SAAS,GAAG,CAAC,qBAAqB,IAAI,MAAM,QAAQ,cAAc,CAAC,UAAU,EAAE,CAC9G,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,GAAG,CACD,eAAe,GAAG,SAAS,GAAG,CAAC,qBAAqB,IAAI,MAAM,QAAQ,cAAc,CAAC,UAAU,EAAE,CAClG,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAiB;YAC3B,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,gBAAgB,EAAE,GAAG,CAAC,kBAAkB;YACxC,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,OAAO,EAAE,cAAc,CAAC,OAAO;YAC/B,IAAI;YACJ,MAAM,EAAE,GAAG,CAAC,MAAuB;YACnC,cAAc,EAAE,GAAG,CAAC,eAAe;YACnC,cAAc,EAAE,GAAG,CAAC,eAAe;YACnC,gBAAgB,EAAE,GAAG,CAAC,iBAAiB;YACvC,gBAAgB,EAAE,GAAG,CAAC,iBAAiB;YACvC,QAAQ,EAAE,cAAc,CAAC,QAAQ;YACjC,SAAS,EAAE,cAAc,CAAC,SAAS;YACnC,aAAa,EAAE,cAAc,CAAC,IAAI;YAClC,mEAAmE;YACnE,qEAAqE;YACrE,6CAA6C;YAC7C,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,EAAE,GAAG,oBAAoB,EAAE,UAAU,EAAE,cAAc,CAAC,UAAU,EAAE;SAC/E,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,UAAU;gBAC5B,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5E,MAAM,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC/D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACzC,IAAI,SAAS,GAAG,UAAU,KAAK,CAAC;gBAAE,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,GAAG,CAAC,6BAA6B,GAAG,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAEjC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,OAAO;QACL,aAAa,EAAE,aAAa,CAAC,MAAM;QACnC,SAAS;QACT,SAAS;QACT,MAAM;QACN,kBAAkB,EAAE,cAAc;QAClC,YAAY;QACZ,oBAAoB;QACpB,iBAAiB,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI;QACpE,iBAAiB,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI;KACrE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * transcript-derivables — post-classify scan of the raw transcript file for
3
+ * primary_model/total_tokens/skill (#352 phase 2, Task 5). Complements
4
+ * deriveSubagentMeta (Task 2), which derives persona/parent from the chunk's
5
+ * already-parsed runtimeSessionId + label; this scan needs the per-message
6
+ * `model` + `usage` + `tool_use` blocks the chunk parser summarizes away, so
7
+ * it re-reads the transcript file directly.
8
+ *
9
+ * v1 supports claude-code-jsonl only: assistant events carry `message.model`
10
+ * and `message.usage.{input,output}_tokens` (same fields
11
+ * claude-code.ts's parseSession already reads for `lastModel`); a Skill-tool
12
+ * invocation is a `content` block with `type: "tool_use"`, `name: "Skill"`,
13
+ * and `input.skill` holding the slug (e.g. "superpowers:brainstorming").
14
+ * Every other transcript kind returns all-null — no per-runtime scanner
15
+ * exists yet.
16
+ *
17
+ * Streamed line-by-line (readline over a ReadStream), never readFileSync:
18
+ * transcripts reach tens of MB and this runs on the ingest write path, not
19
+ * just backfill. A missing, unreadable, or rotated-away file resolves nulls
20
+ * rather than rejecting — never throws.
21
+ */
22
+ export interface TranscriptDerivables {
23
+ readonly primaryModel: string | null;
24
+ readonly totalTokens: number | null;
25
+ readonly skill: string | null;
26
+ }
27
+ export declare function scanTranscriptDerivables(path: string, kind: string): Promise<TranscriptDerivables>;
@@ -0,0 +1,138 @@
1
+ /**
2
+ * transcript-derivables — post-classify scan of the raw transcript file for
3
+ * primary_model/total_tokens/skill (#352 phase 2, Task 5). Complements
4
+ * deriveSubagentMeta (Task 2), which derives persona/parent from the chunk's
5
+ * already-parsed runtimeSessionId + label; this scan needs the per-message
6
+ * `model` + `usage` + `tool_use` blocks the chunk parser summarizes away, so
7
+ * it re-reads the transcript file directly.
8
+ *
9
+ * v1 supports claude-code-jsonl only: assistant events carry `message.model`
10
+ * and `message.usage.{input,output}_tokens` (same fields
11
+ * claude-code.ts's parseSession already reads for `lastModel`); a Skill-tool
12
+ * invocation is a `content` block with `type: "tool_use"`, `name: "Skill"`,
13
+ * and `input.skill` holding the slug (e.g. "superpowers:brainstorming").
14
+ * Every other transcript kind returns all-null — no per-runtime scanner
15
+ * exists yet.
16
+ *
17
+ * Streamed line-by-line (readline over a ReadStream), never readFileSync:
18
+ * transcripts reach tens of MB and this runs on the ingest write path, not
19
+ * just backfill. A missing, unreadable, or rotated-away file resolves nulls
20
+ * rather than rejecting — never throws.
21
+ */
22
+ import { createReadStream } from "node:fs";
23
+ import { createInterface } from "node:readline";
24
+ const CLAUDE_CODE_JSONL_KIND = "claude-code-jsonl";
25
+ const NULL_DERIVABLES = {
26
+ primaryModel: null,
27
+ totalTokens: null,
28
+ skill: null,
29
+ };
30
+ export function scanTranscriptDerivables(path, kind) {
31
+ if (kind !== CLAUDE_CODE_JSONL_KIND)
32
+ return Promise.resolve(NULL_DERIVABLES);
33
+ return new Promise((resolve) => {
34
+ const modelCounts = new Map();
35
+ const modelLastSeenAt = new Map();
36
+ let lineNumber = 0;
37
+ let inputTokens = 0;
38
+ let outputTokens = 0;
39
+ let sawUsage = false;
40
+ let skill = null;
41
+ let settled = false;
42
+ const finish = (result) => {
43
+ if (settled)
44
+ return;
45
+ settled = true;
46
+ resolve(result);
47
+ };
48
+ let stream;
49
+ try {
50
+ stream = createReadStream(path, { encoding: "utf8" });
51
+ }
52
+ catch {
53
+ // Synchronous throw (e.g. malformed path) — most fs errors surface via
54
+ // the 'error' event below instead.
55
+ finish(NULL_DERIVABLES);
56
+ return;
57
+ }
58
+ // Missing/unreadable/rotated-away file — resolve nulls, never throw.
59
+ stream.on("error", () => finish(NULL_DERIVABLES));
60
+ const rl = createInterface({ input: stream, crlfDelay: Infinity });
61
+ rl.on("error", () => finish(NULL_DERIVABLES));
62
+ rl.on("line", (line) => {
63
+ const trimmed = line.trim();
64
+ if (!trimmed)
65
+ return;
66
+ lineNumber += 1;
67
+ let evt;
68
+ try {
69
+ evt = JSON.parse(trimmed);
70
+ }
71
+ catch {
72
+ return;
73
+ }
74
+ if (evt["type"] !== "assistant")
75
+ return;
76
+ const msg = evt["message"] ?? {};
77
+ const model = msg["model"];
78
+ if (typeof model === "string" && model) {
79
+ modelCounts.set(model, (modelCounts.get(model) ?? 0) + 1);
80
+ modelLastSeenAt.set(model, lineNumber);
81
+ }
82
+ const usage = msg["usage"];
83
+ if (usage && typeof usage === "object") {
84
+ const input = usage["input_tokens"];
85
+ const output = usage["output_tokens"];
86
+ if (typeof input === "number") {
87
+ inputTokens += input;
88
+ sawUsage = true;
89
+ }
90
+ if (typeof output === "number") {
91
+ outputTokens += output;
92
+ sawUsage = true;
93
+ }
94
+ }
95
+ if (skill === null) {
96
+ const content = msg["content"];
97
+ if (Array.isArray(content)) {
98
+ for (const block of content) {
99
+ if (!block || typeof block !== "object")
100
+ continue;
101
+ const b = block;
102
+ if (b["type"] === "tool_use" && b["name"] === "Skill") {
103
+ const toolInput = b["input"];
104
+ const slug = toolInput?.["skill"];
105
+ if (typeof slug === "string" && slug)
106
+ skill = slug;
107
+ break;
108
+ }
109
+ }
110
+ }
111
+ }
112
+ });
113
+ rl.on("close", () => {
114
+ finish({
115
+ primaryModel: majorityModel(modelCounts, modelLastSeenAt),
116
+ totalTokens: sawUsage ? inputTokens + outputTokens : null,
117
+ skill,
118
+ });
119
+ });
120
+ });
121
+ }
122
+ /** Majority wins by occurrence count; ties break to whichever model's last
123
+ * occurrence is chronologically latest in the transcript. */
124
+ function majorityModel(counts, lastSeenAt) {
125
+ let best = null;
126
+ let bestCount = -1;
127
+ let bestLastSeenAt = -1;
128
+ for (const [model, count] of counts) {
129
+ const lastSeen = lastSeenAt.get(model) ?? -1;
130
+ if (count > bestCount || (count === bestCount && lastSeen > bestLastSeenAt)) {
131
+ best = model;
132
+ bestCount = count;
133
+ bestLastSeenAt = lastSeen;
134
+ }
135
+ }
136
+ return best;
137
+ }
138
+ //# sourceMappingURL=transcript-derivables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-derivables.js","sourceRoot":"","sources":["../../../src/core/ingest/transcript-derivables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Corpus-level Tier-B outcome coverage (#352 phase 2, Task 8).
3
+ *
4
+ * The digest's coverage block needs verdict counts across every session
5
+ * ended in a window (hundreds of sessions), not one session at a time.
6
+ * Calling `deriveOutcome` in a loop with per-session reader ports would mean
7
+ * one round trip per evidence type *per session*. Instead, the caller
8
+ * batches each evidence type into one query across the whole id set
9
+ * (`OutcomeCoverageInput`'s maps), and this module wraps those maps into the
10
+ * same narrow per-session reader shape `deriveOutcome` already expects — so
11
+ * the precedence logic itself is never duplicated, only its I/O is batched.
12
+ */
13
+ import type { OutcomeCitation, OutcomeEdge, OutcomeSession, OutcomeSignal } from "../../ports/outcome.js";
14
+ import type { ReDerivationPair } from "../metrics/re-derivation.js";
15
+ export interface OutcomeCoverageInput {
16
+ readonly sessions: ReadonlyArray<OutcomeSession>;
17
+ readonly signalsBySession: ReadonlyMap<string, ReadonlyArray<OutcomeSignal>>;
18
+ readonly edgesBySession: ReadonlyMap<string, ReadonlyArray<OutcomeEdge>>;
19
+ readonly citationsBySession: ReadonlyMap<string, ReadonlyArray<OutcomeCitation>>;
20
+ readonly reDerivationPairs: ReadonlyArray<ReDerivationPair>;
21
+ /** Injected clock, forwarded to `deriveOutcome`. Defaults to `Date.now()`. */
22
+ readonly now?: () => Date;
23
+ readonly heldAfterDays?: number;
24
+ }
25
+ export interface OutcomeCoverage {
26
+ readonly total: number;
27
+ readonly held: number;
28
+ readonly overturned: number;
29
+ readonly builtUpon: number;
30
+ readonly reDerivedLater: number;
31
+ readonly unobserved: number;
32
+ }
33
+ export declare function computeOutcomeCoverage(input: OutcomeCoverageInput): Promise<OutcomeCoverage>;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Corpus-level Tier-B outcome coverage (#352 phase 2, Task 8).
3
+ *
4
+ * The digest's coverage block needs verdict counts across every session
5
+ * ended in a window (hundreds of sessions), not one session at a time.
6
+ * Calling `deriveOutcome` in a loop with per-session reader ports would mean
7
+ * one round trip per evidence type *per session*. Instead, the caller
8
+ * batches each evidence type into one query across the whole id set
9
+ * (`OutcomeCoverageInput`'s maps), and this module wraps those maps into the
10
+ * same narrow per-session reader shape `deriveOutcome` already expects — so
11
+ * the precedence logic itself is never duplicated, only its I/O is batched.
12
+ */
13
+ import { deriveOutcome } from "./rollup.js";
14
+ export async function computeOutcomeCoverage(input) {
15
+ const counts = { held: 0, overturned: 0, builtUpon: 0, reDerivedLater: 0, unobserved: 0 };
16
+ for (const session of input.sessions) {
17
+ const verdict = await deriveOutcome(session.id, {
18
+ sessions: { getById: async () => session },
19
+ signals: { listForSession: async () => input.signalsBySession.get(session.id) ?? [] },
20
+ edges: { listForSession: async () => input.edgesBySession.get(session.id) ?? [] },
21
+ citations: { listForSession: async () => input.citationsBySession.get(session.id) ?? [] },
22
+ reDerivationPairs: input.reDerivationPairs,
23
+ ...(input.now ? { now: input.now } : {}),
24
+ ...(input.heldAfterDays !== undefined ? { heldAfterDays: input.heldAfterDays } : {}),
25
+ });
26
+ switch (verdict.verdict) {
27
+ case "held":
28
+ counts.held++;
29
+ break;
30
+ case "overturned":
31
+ counts.overturned++;
32
+ break;
33
+ case "built-upon":
34
+ counts.builtUpon++;
35
+ break;
36
+ case "re-derived-later":
37
+ counts.reDerivedLater++;
38
+ break;
39
+ case "unobserved":
40
+ counts.unobserved++;
41
+ break;
42
+ }
43
+ }
44
+ return { total: input.sessions.length, ...counts };
45
+ }
46
+ //# sourceMappingURL=coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/core/outcome/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA6B5C,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAA2B;IACtE,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAE1F,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;YAC9C,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO,EAAE;YAC1C,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;YACrF,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;YACjF,SAAS,EAAE,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;YACzF,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrF,CAAC,CAAC;QAEH,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,KAAK,MAAM;gBACT,MAAM,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM;YACR,KAAK,kBAAkB;gBACrB,MAAM,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AACrD,CAAC"}