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,237 @@
1
+ /**
2
+ * `nlm scope backfill`: derive and stamp scope on legacy corpus rows.
3
+ *
4
+ * Cascade order: sessions -> facts -> exemplars -> signals -> workstreams.
5
+ * --dry-run (default): computes would-change counts and writes nothing.
6
+ * --apply: writes; only fills scope IS NULL rows; idempotent.
7
+ */
8
+ import { open } from "node:fs/promises";
9
+ import Database from "better-sqlite3";
10
+ import { deriveScope } from "../core/scope/derive-scope.js";
11
+ /** Read at most this many bytes from the head of a transcript to find cwd. */
12
+ const HEAD_BYTES = 8_192;
13
+ /**
14
+ * Bounded head-read that matches the claude-code adapter's cwd extraction
15
+ * exactly (src/core/adapters/claude-code.ts:144):
16
+ * if (!projectDir && typeof evt["cwd"] === "string") projectDir = evt["cwd"];
17
+ *
18
+ * Also covers pi-runtime JSONL: the pi adapter reads cwd from the
19
+ * `type: "session"` event on line 1 (src/core/adapters/pi.ts:124-126);
20
+ * taking the first `cwd` field on any line subsumes that shape.
21
+ *
22
+ * Reads at most HEAD_BYTES from the file start, splits into lines, parses
23
+ * each as JSON, and returns the value of the first "cwd" string field found.
24
+ * A first line longer than HEAD_BYTES arrives truncated, fails JSON.parse,
25
+ * and is skipped: fail-closed to NULL, never a mis-parse.
26
+ */
27
+ async function readCwdFromTranscript(transcriptPath) {
28
+ let fd;
29
+ try {
30
+ fd = await open(transcriptPath, "r");
31
+ const buf = Buffer.alloc(HEAD_BYTES);
32
+ const { bytesRead } = await fd.read(buf, 0, HEAD_BYTES, 0);
33
+ const head = buf.toString("utf8", 0, bytesRead);
34
+ for (const line of head.split("\n")) {
35
+ const trimmed = line.trim();
36
+ if (!trimmed)
37
+ continue;
38
+ let evt;
39
+ try {
40
+ evt = JSON.parse(trimmed);
41
+ }
42
+ catch {
43
+ continue;
44
+ }
45
+ if (typeof evt["cwd"] === "string" && evt["cwd"]) {
46
+ return { cwd: evt["cwd"] };
47
+ }
48
+ }
49
+ return { cwd: null };
50
+ }
51
+ catch (err) {
52
+ const code = err.code;
53
+ const skipReason = code === "ENOENT" || code === "EACCES" || code === "EPERM"
54
+ ? "missing"
55
+ : "malformed";
56
+ return { cwd: null, skipReason };
57
+ }
58
+ finally {
59
+ await fd?.close().catch(() => { });
60
+ }
61
+ }
62
+ function inc(counter, scope) {
63
+ counter[scope] = (counter[scope] ?? 0) + 1;
64
+ }
65
+ function emptyTable() {
66
+ return { total: 0, byScope: {} };
67
+ }
68
+ export async function runScopeBackfill(opts) {
69
+ const { db, apply, aliasMap } = opts;
70
+ const sessionRows = db
71
+ .prepare("SELECT id, transcript_path FROM sessions WHERE scope IS NULL AND transcript_path IS NOT NULL")
72
+ .all();
73
+ const derivedScopes = new Map();
74
+ let missingCount = 0;
75
+ let malformedCount = 0;
76
+ let noCwdCount = 0;
77
+ for (const row of sessionRows) {
78
+ const { cwd, skipReason } = await readCwdFromTranscript(row.transcript_path);
79
+ if (skipReason === "missing") {
80
+ missingCount++;
81
+ continue;
82
+ }
83
+ if (skipReason === "malformed") {
84
+ malformedCount++;
85
+ continue;
86
+ }
87
+ if (!cwd) {
88
+ noCwdCount++;
89
+ continue;
90
+ }
91
+ const scope = deriveScope(cwd, aliasMap);
92
+ if (scope === null)
93
+ continue;
94
+ derivedScopes.set(row.id, scope);
95
+ }
96
+ const result = {
97
+ dryRun: !apply,
98
+ sessions: emptyTable(),
99
+ facts: emptyTable(),
100
+ exemplars: emptyTable(),
101
+ signals: emptyTable(),
102
+ workstreams: emptyTable(),
103
+ skipped: { missingTranscript: missingCount, malformed: malformedCount, noCwdFound: noCwdCount },
104
+ };
105
+ for (const scope of derivedScopes.values()) {
106
+ result.sessions.total++;
107
+ inc(result.sessions.byScope, scope);
108
+ }
109
+ const performUpdates = () => {
110
+ const updateSession = db.prepare("UPDATE sessions SET scope = ? WHERE id = ? AND scope IS NULL");
111
+ for (const [id, scope] of derivedScopes) {
112
+ updateSession.run(scope, id);
113
+ }
114
+ const factRows = db
115
+ .prepare(`
116
+ SELECT s.scope, COUNT(f.id) AS n
117
+ FROM facts f
118
+ JOIN sessions s ON f.source_session_id = s.id
119
+ WHERE f.scope IS NULL AND s.scope IS NOT NULL
120
+ GROUP BY s.scope
121
+ `)
122
+ .all();
123
+ for (const { scope, n } of factRows) {
124
+ result.facts.total += n;
125
+ inc(result.facts.byScope, scope);
126
+ }
127
+ db.prepare(`
128
+ UPDATE facts
129
+ SET scope = (SELECT s.scope FROM sessions s WHERE s.id = facts.source_session_id)
130
+ WHERE scope IS NULL
131
+ AND source_session_id IN (SELECT id FROM sessions WHERE scope IS NOT NULL)
132
+ `).run();
133
+ const exemplarRows = db
134
+ .prepare(`
135
+ SELECT s.scope, COUNT(e.id) AS n
136
+ FROM code_exemplars e
137
+ JOIN sessions s ON e.session_id = s.id
138
+ WHERE e.scope IS NULL AND s.scope IS NOT NULL
139
+ GROUP BY s.scope
140
+ `)
141
+ .all();
142
+ for (const { scope, n } of exemplarRows) {
143
+ result.exemplars.total += n;
144
+ inc(result.exemplars.byScope, scope);
145
+ }
146
+ db.prepare(`
147
+ UPDATE code_exemplars
148
+ SET scope = (SELECT s.scope FROM sessions s WHERE s.id = code_exemplars.session_id)
149
+ WHERE scope IS NULL
150
+ AND session_id IN (SELECT id FROM sessions WHERE scope IS NOT NULL)
151
+ `).run();
152
+ const signalRows = db
153
+ .prepare(`
154
+ SELECT s.scope, COUNT(sig.id) AS n
155
+ FROM signals sig
156
+ JOIN sessions s ON sig.session_id = s.id
157
+ WHERE sig.scope IS NULL AND s.scope IS NOT NULL AND s.scope != 'global'
158
+ GROUP BY s.scope
159
+ `)
160
+ .all();
161
+ for (const { scope, n } of signalRows) {
162
+ result.signals.total += n;
163
+ inc(result.signals.byScope, scope);
164
+ }
165
+ db.prepare(`
166
+ UPDATE signals
167
+ SET scope = (SELECT s.scope FROM sessions s WHERE s.id = signals.session_id)
168
+ WHERE scope IS NULL
169
+ AND session_id IS NOT NULL
170
+ AND session_id IN (
171
+ SELECT id FROM sessions WHERE scope IS NOT NULL AND scope != 'global'
172
+ )
173
+ `).run();
174
+ const pendingWorkstreams = db
175
+ .prepare("SELECT id FROM workstreams WHERE scope IS NULL")
176
+ .all();
177
+ const getMemberScopes = db.prepare("SELECT scope FROM sessions WHERE workstream_id = ?");
178
+ const updateWs = db.prepare("UPDATE workstreams SET scope = ? WHERE id = ? AND scope IS NULL");
179
+ for (const ws of pendingWorkstreams) {
180
+ const members = getMemberScopes.all(ws.id);
181
+ if (members.length === 0)
182
+ continue;
183
+ if (members.some((m) => m.scope === null))
184
+ continue;
185
+ const unique = new Set(members.map((m) => m.scope));
186
+ if (unique.size !== 1)
187
+ continue;
188
+ const wsScope = [...unique][0];
189
+ result.workstreams.total++;
190
+ inc(result.workstreams.byScope, wsScope);
191
+ updateWs.run(wsScope, ws.id);
192
+ }
193
+ };
194
+ if (apply) {
195
+ db.transaction(performUpdates)();
196
+ }
197
+ else {
198
+ db.exec("BEGIN");
199
+ try {
200
+ performUpdates();
201
+ }
202
+ finally {
203
+ db.exec("ROLLBACK");
204
+ }
205
+ }
206
+ return result;
207
+ }
208
+ export function formatBackfillResult(result, write) {
209
+ const heading = result.dryRun
210
+ ? "scope backfill (dry run -- no writes):"
211
+ : "scope backfill applied:";
212
+ write(`${heading}\n`);
213
+ const rows = [
214
+ ["sessions", result.dryRun ? "would change" : "stamped", result.sessions],
215
+ ["facts", result.dryRun ? "would cascade" : "cascaded", result.facts],
216
+ ["exemplars", result.dryRun ? "would cascade" : "cascaded", result.exemplars],
217
+ ["signals", result.dryRun ? "would cascade" : "cascaded", result.signals],
218
+ ["workstreams", result.dryRun ? "would cascade" : "cascaded", result.workstreams],
219
+ ];
220
+ for (const [table, verb, data] of rows) {
221
+ const entries = Object.entries(data.byScope);
222
+ const breakdown = entries.length > 0
223
+ ? ` [${entries.map(([s, c]) => `${s}: ${c}`).join(", ")}]`
224
+ : "";
225
+ write(` ${table.padEnd(12)}${String(data.total).padStart(4)} ${verb}${breakdown}\n`);
226
+ }
227
+ const { missingTranscript, malformed, noCwdFound } = result.skipped;
228
+ const skipTotal = missingTranscript + malformed + noCwdFound;
229
+ if (skipTotal > 0) {
230
+ write(` skipped: ${skipTotal}` +
231
+ ` (missing transcript: ${missingTranscript}, malformed: ${malformed}, no cwd found: ${noCwdFound})\n`);
232
+ }
233
+ else {
234
+ write(` skipped: 0\n`);
235
+ }
236
+ }
237
+ //# sourceMappingURL=scope-backfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-backfill.js","sourceRoot":"","sources":["../../src/cli/scope-backfill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * `nlm scope coverage`: per-table and recall-weighted scope coverage fractions.
3
+ *
4
+ * READ-ONLY: opens the DB with { readonly: true }; never writes.
5
+ * No env flags consulted. No recall behavior change.
6
+ */
7
+ export interface TableCoverage {
8
+ total: number;
9
+ stamped: number;
10
+ unstamped: number;
11
+ stamped_fraction: number;
12
+ byScope: Record<string, number>;
13
+ }
14
+ export interface OverallCoverage {
15
+ total: number;
16
+ stamped: number;
17
+ unstamped: number;
18
+ stamped_fraction: number;
19
+ }
20
+ export interface RecallWeightedStats {
21
+ distinctReturnedIds: number;
22
+ foundInDb: number;
23
+ scoped: number;
24
+ fraction: number;
25
+ }
26
+ export interface RecallWeightedCoverage extends RecallWeightedStats {
27
+ bySurface: Record<string, RecallWeightedStats>;
28
+ }
29
+ export interface CoverageResult {
30
+ sessions: TableCoverage;
31
+ facts: TableCoverage;
32
+ code_exemplars: TableCoverage;
33
+ signals: TableCoverage;
34
+ workstreams: TableCoverage;
35
+ overall: OverallCoverage;
36
+ recallWeighted: RecallWeightedCoverage | null;
37
+ queryLogNote: string | null;
38
+ }
39
+ export declare function runScopeCoverage(opts: {
40
+ dbPath: string;
41
+ queryLogPath?: string;
42
+ window?: number;
43
+ }): Promise<CoverageResult>;
44
+ export declare function formatCoverageResult(result: CoverageResult, write: (s: string) => void): void;
@@ -0,0 +1,205 @@
1
+ /**
2
+ * `nlm scope coverage`: per-table and recall-weighted scope coverage fractions.
3
+ *
4
+ * READ-ONLY: opens the DB with { readonly: true }; never writes.
5
+ * No env flags consulted. No recall behavior change.
6
+ */
7
+ import Database from "better-sqlite3";
8
+ import { existsSync } from "node:fs";
9
+ import { homedir } from "node:os";
10
+ import { join } from "node:path";
11
+ import { recentQueryLog } from "../core/recall/recent-log.js";
12
+ function overallOf(tables) {
13
+ let total = 0;
14
+ let stamped = 0;
15
+ for (const t of tables) {
16
+ total += t.total;
17
+ stamped += t.stamped;
18
+ }
19
+ return {
20
+ total,
21
+ stamped,
22
+ unstamped: total - stamped,
23
+ stamped_fraction: total === 0 ? 0 : stamped / total,
24
+ };
25
+ }
26
+ function tableStats(db, table) {
27
+ const agg = db
28
+ .prepare(`SELECT COUNT(*) AS total, SUM(CASE WHEN scope IS NOT NULL THEN 1 ELSE 0 END) AS scoped FROM "${table}"`)
29
+ .get();
30
+ const total = agg.total;
31
+ const scoped = agg.scoped ?? 0;
32
+ const rows = db
33
+ .prepare(`SELECT scope, COUNT(*) AS n FROM "${table}" WHERE scope IS NOT NULL GROUP BY scope`)
34
+ .all();
35
+ const byScope = {};
36
+ for (const { scope, n } of rows) {
37
+ byScope[scope] = n;
38
+ }
39
+ return {
40
+ total,
41
+ stamped: scoped,
42
+ unstamped: total - scoped,
43
+ stamped_fraction: total === 0 ? 0 : scoped / total,
44
+ byScope,
45
+ };
46
+ }
47
+ function defaultQueryLogPath() {
48
+ return process.env["NLM_QUERY_LOG"] ?? join(homedir(), ".nlm", "query_log.jsonl");
49
+ }
50
+ const CHUNK_SIZE = 999;
51
+ export async function runScopeCoverage(opts) {
52
+ const entryWindow = opts.window ?? 200;
53
+ if (!Number.isFinite(entryWindow) || entryWindow <= 0) {
54
+ throw new Error(`invalid --window: ${String(opts.window)} (expected a positive integer)`);
55
+ }
56
+ const db = new Database(opts.dbPath, { readonly: true });
57
+ try {
58
+ const sessions = tableStats(db, "sessions");
59
+ const facts = tableStats(db, "facts");
60
+ const code_exemplars = tableStats(db, "code_exemplars");
61
+ const signals = tableStats(db, "signals");
62
+ const workstreams = tableStats(db, "workstreams");
63
+ const overall = overallOf([sessions, facts, code_exemplars, signals, workstreams]);
64
+ const logPath = opts.queryLogPath ?? defaultQueryLogPath();
65
+ if (!existsSync(logPath)) {
66
+ return {
67
+ sessions,
68
+ facts,
69
+ code_exemplars,
70
+ signals,
71
+ workstreams,
72
+ overall,
73
+ recallWeighted: null,
74
+ queryLogNote: `query log not found at ${logPath}`,
75
+ };
76
+ }
77
+ const entries = recentQueryLog(entryWindow, logPath);
78
+ const idSet = new Set();
79
+ const idsBySurface = new Map();
80
+ for (const entry of entries) {
81
+ let surfaceIds = idsBySurface.get(entry.source);
82
+ if (!surfaceIds) {
83
+ surfaceIds = new Set();
84
+ idsBySurface.set(entry.source, surfaceIds);
85
+ }
86
+ for (const id of entry.returnedIds) {
87
+ idSet.add(id);
88
+ surfaceIds.add(id);
89
+ }
90
+ }
91
+ if (idSet.size === 0) {
92
+ return {
93
+ sessions,
94
+ facts,
95
+ code_exemplars,
96
+ signals,
97
+ workstreams,
98
+ overall,
99
+ recallWeighted: { distinctReturnedIds: 0, foundInDb: 0, scoped: 0, fraction: 0, bySurface: {} },
100
+ queryLogNote: null,
101
+ };
102
+ }
103
+ // Recalled ids span the corpus tables (session recall returns session
104
+ // ids, fact recall fact ids, code recall exemplar ids); resolve each id
105
+ // to its scope across all three, first match wins.
106
+ const scopeById = new Map();
107
+ const ids = [...idSet];
108
+ for (const table of ["sessions", "facts", "code_exemplars"]) {
109
+ for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
110
+ const chunk = ids.slice(i, i + CHUNK_SIZE).filter((id) => !scopeById.has(id));
111
+ if (chunk.length === 0)
112
+ continue;
113
+ const placeholders = chunk.map(() => "?").join(", ");
114
+ const rows = db
115
+ .prepare(`SELECT id, scope FROM "${table}" WHERE id IN (${placeholders})`)
116
+ .all(...chunk);
117
+ for (const row of rows) {
118
+ if (!scopeById.has(row.id))
119
+ scopeById.set(row.id, row.scope);
120
+ }
121
+ }
122
+ }
123
+ const statsFor = (set) => {
124
+ let foundInDb = 0;
125
+ let scoped = 0;
126
+ for (const id of set) {
127
+ const scope = scopeById.get(id);
128
+ if (scope === undefined)
129
+ continue;
130
+ foundInDb++;
131
+ if (scope !== null)
132
+ scoped++;
133
+ }
134
+ return {
135
+ distinctReturnedIds: set.size,
136
+ foundInDb,
137
+ scoped,
138
+ fraction: foundInDb === 0 ? 0 : scoped / foundInDb,
139
+ };
140
+ };
141
+ const bySurface = {};
142
+ for (const [source, surfaceIds] of idsBySurface) {
143
+ if (surfaceIds.size > 0)
144
+ bySurface[source] = statsFor(surfaceIds);
145
+ }
146
+ return {
147
+ sessions,
148
+ facts,
149
+ code_exemplars,
150
+ signals,
151
+ workstreams,
152
+ overall,
153
+ recallWeighted: { ...statsFor(idSet), bySurface },
154
+ queryLogNote: null,
155
+ };
156
+ }
157
+ finally {
158
+ db.close();
159
+ }
160
+ }
161
+ export function formatCoverageResult(result, write) {
162
+ write("scope coverage:\n\n");
163
+ write(" per-table:\n");
164
+ const tables = [
165
+ ["sessions", result.sessions],
166
+ ["facts", result.facts],
167
+ ["code_exemplars", result.code_exemplars],
168
+ ["signals", result.signals],
169
+ ["workstreams", result.workstreams],
170
+ ];
171
+ for (const [name, cov] of tables) {
172
+ const pct = `${(cov.stamped_fraction * 100).toFixed(1)}%`;
173
+ const counts = `${cov.stamped}/${cov.total} stamped (${pct})`;
174
+ const entries = Object.entries(cov.byScope);
175
+ const breakdown = entries.length > 0
176
+ ? ` [${entries.map(([s, c]) => `${s}: ${c}`).join(", ")}]`
177
+ : "";
178
+ write(` ${name.padEnd(15)} ${counts}${breakdown}\n`);
179
+ }
180
+ const o = result.overall;
181
+ const overallPct = `${(o.stamped_fraction * 100).toFixed(1)}%`;
182
+ write(` ${"overall".padEnd(15)} ${o.stamped}/${o.total} stamped (${overallPct})\n`);
183
+ write("\n");
184
+ if (result.queryLogNote !== null) {
185
+ write(` recall-weighted: skipped -- ${result.queryLogNote}\n`);
186
+ }
187
+ else if (result.recallWeighted !== null) {
188
+ const rw = result.recallWeighted;
189
+ const pct = `${(rw.fraction * 100).toFixed(1)}%`;
190
+ write(` recall-weighted (recalled ids from last window):\n`);
191
+ write(` distinct ids: ${rw.distinctReturnedIds}\n`);
192
+ write(` found in db: ${rw.foundInDb}\n`);
193
+ write(` scoped: ${rw.scoped}\n`);
194
+ write(` fraction: ${pct}\n`);
195
+ const surfaces = Object.entries(rw.bySurface);
196
+ if (surfaces.length > 0) {
197
+ write(` per-surface:\n`);
198
+ for (const [source, s] of surfaces) {
199
+ const sPct = `${(s.fraction * 100).toFixed(1)}%`;
200
+ write(` ${source.padEnd(15)} ${s.scoped}/${s.foundInDb} scoped (${sPct}, ${s.distinctReturnedIds} ids)\n`);
201
+ }
202
+ }
203
+ }
204
+ }
205
+ //# sourceMappingURL=scope-coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-coverage.js","sourceRoot":"","sources":["../../src/cli/scope-coverage.ts"],"names":[],"mappings":"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"}
@@ -30,3 +30,17 @@ export declare class ClaudeCodeAdapter implements TranscriptAdapter {
30
30
  private isSubagentPath;
31
31
  private maybeAdd;
32
32
  }
33
+ /**
34
+ * Re-derives subagent persona + parent link from a claude-code chunk's
35
+ * already-computed `runtimeSessionId` and `label` — the same two fields the
36
+ * ingest stamp site has on hand, without re-reading the raw transcript.
37
+ * Reverse of the encoding parseSession performs above: id has no slash ->
38
+ * top-level session ("orchestrator", no parent); id matches
39
+ * `<parent>/agent-<id>` -> parent + persona parsed from the label's
40
+ * `[subagent <slug>]` prefix. Any other shape is treated as malformed and
41
+ * returns nulls rather than throwing.
42
+ */
43
+ export declare function deriveSubagentMeta(runtimeSessionId: string, label: string): {
44
+ persona: string | null;
45
+ parentSessionId: string | null;
46
+ };
@@ -207,6 +207,36 @@ export class ClaudeCodeAdapter {
207
207
  out.push({ mtime: st.mtimeMs, path });
208
208
  }
209
209
  }
210
+ // ── subagent metadata derivation ─────────────────────────────────────────
211
+ // Matches the `<parent>/agent-<id>` shape parseSession stamps onto
212
+ // runtimeSessionId for subagent chunks (see the isSubagent branch above).
213
+ const SUBAGENT_ID_PATTERN = /^(.+)\/agent-([^/]+)$/;
214
+ // Matches the `[subagent <slug>] ...` prefix parseSession stamps onto label
215
+ // for the same chunks.
216
+ const SUBAGENT_LABEL_PATTERN = /^\[subagent ([^\]]+)\]/;
217
+ /**
218
+ * Re-derives subagent persona + parent link from a claude-code chunk's
219
+ * already-computed `runtimeSessionId` and `label` — the same two fields the
220
+ * ingest stamp site has on hand, without re-reading the raw transcript.
221
+ * Reverse of the encoding parseSession performs above: id has no slash ->
222
+ * top-level session ("orchestrator", no parent); id matches
223
+ * `<parent>/agent-<id>` -> parent + persona parsed from the label's
224
+ * `[subagent <slug>]` prefix. Any other shape is treated as malformed and
225
+ * returns nulls rather than throwing.
226
+ */
227
+ export function deriveSubagentMeta(runtimeSessionId, label) {
228
+ if (!runtimeSessionId.includes("/")) {
229
+ return { persona: "orchestrator", parentSessionId: null };
230
+ }
231
+ const idMatch = SUBAGENT_ID_PATTERN.exec(runtimeSessionId);
232
+ if (!idMatch) {
233
+ return { persona: null, parentSessionId: null };
234
+ }
235
+ const parentSessionId = idMatch[1];
236
+ const labelMatch = SUBAGENT_LABEL_PATTERN.exec(label);
237
+ const persona = labelMatch ? labelMatch[1].trim() || null : null;
238
+ return { persona, parentSessionId };
239
+ }
210
240
  // ── content extraction ───────────────────────────────────────────────────
211
241
  function extractText(content) {
212
242
  if (typeof content === "string")
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/core/adapters/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/core/adapters/claude-code.ts"],"names":[],"mappings":"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"}
@@ -407,6 +407,7 @@ function computeIntegrityAlerts(db) {
407
407
  }));
408
408
  }
409
409
  catch {
410
+ // Integrity checks fail gracefully - no alerts surface on DB errors.
410
411
  return [];
411
412
  }
412
413
  }