nlm-memory 0.5.20 → 0.5.22

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 (75) hide show
  1. package/README.md +34 -14
  2. package/dist/cli/nlm.js +46 -34
  3. package/dist/cli/nlm.js.map +1 -1
  4. package/dist/cli/restart-helpers.d.ts +21 -0
  5. package/dist/cli/restart-helpers.js +38 -0
  6. package/dist/cli/restart-helpers.js.map +1 -1
  7. package/dist/cli/upgrade-helpers.d.ts +14 -0
  8. package/dist/cli/upgrade-helpers.js +22 -0
  9. package/dist/cli/upgrade-helpers.js.map +1 -0
  10. package/dist/core/actions/overlay.d.ts +22 -0
  11. package/dist/core/actions/overlay.js +56 -0
  12. package/dist/core/actions/overlay.js.map +1 -1
  13. package/dist/core/dataset/build-dataset.d.ts +14 -1
  14. package/dist/core/dataset/build-dataset.js +68 -11
  15. package/dist/core/dataset/build-dataset.js.map +1 -1
  16. package/dist/core/hook/miss-detect.d.ts +32 -0
  17. package/dist/core/hook/miss-detect.js +67 -0
  18. package/dist/core/hook/miss-detect.js.map +1 -0
  19. package/dist/core/recall/miss-log.d.ts +47 -0
  20. package/dist/core/recall/miss-log.js +112 -0
  21. package/dist/core/recall/miss-log.js.map +1 -0
  22. package/dist/core/recall/query-log.d.ts +3 -0
  23. package/dist/core/recall/query-log.js +1 -0
  24. package/dist/core/recall/query-log.js.map +1 -1
  25. package/dist/core/recall/recency.d.ts +52 -0
  26. package/dist/core/recall/recency.js +98 -0
  27. package/dist/core/recall/recency.js.map +1 -0
  28. package/dist/core/recall/recent-log.d.ts +1 -0
  29. package/dist/core/recall/recent-log.js +1 -0
  30. package/dist/core/recall/recent-log.js.map +1 -1
  31. package/dist/core/recall/related-facts.d.ts +30 -0
  32. package/dist/core/recall/related-facts.js +134 -0
  33. package/dist/core/recall/related-facts.js.map +1 -0
  34. package/dist/core/recall/rewrite-cache.d.ts +25 -0
  35. package/dist/core/recall/rewrite-cache.js +60 -0
  36. package/dist/core/recall/rewrite-cache.js.map +1 -0
  37. package/dist/core/recall/rewrite-prompt.d.ts +23 -0
  38. package/dist/core/recall/rewrite-prompt.js +81 -0
  39. package/dist/core/recall/rewrite-prompt.js.map +1 -0
  40. package/dist/core/storage/pg-session-store.js +16 -1
  41. package/dist/core/storage/pg-session-store.js.map +1 -1
  42. package/dist/core/storage/sqlite-session-store.d.ts +3 -0
  43. package/dist/core/storage/sqlite-session-store.js +21 -1
  44. package/dist/core/storage/sqlite-session-store.js.map +1 -1
  45. package/dist/hook/pi-extension.d.ts +3 -1
  46. package/dist/hook/pi-extension.js +4 -2
  47. package/dist/hook/pi-extension.js.map +1 -1
  48. package/dist/hook/prompt-recall-hook.js +1 -1
  49. package/dist/hook/prompt-recall-hook.js.map +1 -1
  50. package/dist/hook/recall-over-http.d.ts +1 -1
  51. package/dist/hook/recall-over-http.js +5 -2
  52. package/dist/hook/recall-over-http.js.map +1 -1
  53. package/dist/hook/session-start-hook.js +4 -1
  54. package/dist/hook/session-start-hook.js.map +1 -1
  55. package/dist/http/app.js +2 -0
  56. package/dist/http/app.js.map +1 -1
  57. package/dist/install/rules-content.d.ts +51 -0
  58. package/dist/install/rules-content.js +140 -0
  59. package/dist/install/rules-content.js.map +1 -0
  60. package/dist/install/rules-install.d.ts +35 -0
  61. package/dist/install/rules-install.js +79 -0
  62. package/dist/install/rules-install.js.map +1 -0
  63. package/dist/mcp/server.js +1 -0
  64. package/dist/mcp/server.js.map +1 -1
  65. package/dist/ui/assets/index-BR1BHwew.js +69 -0
  66. package/dist/ui/assets/index-CgHq6xeZ.css +1 -0
  67. package/dist/ui/index.html +2 -2
  68. package/nlm/index.js +6 -4
  69. package/package.json +3 -1
  70. package/plugin/scripts/prompt-recall-hook.mjs +5 -3
  71. package/plugin-hermes-agent/README.md +49 -0
  72. package/plugin-hermes-agent/__init__.py +75 -0
  73. package/plugin-hermes-agent/plugin.yaml +15 -0
  74. package/dist/ui/assets/index-B7j5U42U.css +0 -1
  75. package/dist/ui/assets/index-CmY9CBuo.js +0 -69
@@ -14,8 +14,13 @@ export const EMPTY_OVERLAY = {
14
14
  retiredEntities: new Set(),
15
15
  snoozedEntities: new Map(),
16
16
  labeledEntities: new Map(),
17
+ renamedEntities: new Map(),
17
18
  resolvedOpens: new Set(),
18
19
  promotedOpens: new Map(),
20
+ dismissedDecisions: new Set(),
21
+ revisedDecisions: new Map(),
22
+ coherenceOverrides: new Map(),
23
+ mergedEntities: new Map(),
19
24
  };
20
25
  export function loadActionOverlay(db) {
21
26
  const hasActions = db
@@ -29,14 +34,22 @@ export function loadActionOverlay(db) {
29
34
  retiredEntities: new Set(),
30
35
  snoozedEntities: new Map(),
31
36
  labeledEntities: new Map(),
37
+ renamedEntities: new Map(),
32
38
  resolvedOpens: new Set(),
33
39
  promotedOpens: new Map(),
40
+ dismissedDecisions: new Set(),
41
+ revisedDecisions: new Map(),
42
+ coherenceOverrides: new Map(),
43
+ mergedEntities: new Map(),
34
44
  };
45
+ // ORDER BY id keeps reducer deterministic: later writes overwrite earlier
46
+ // ones, so the latest non-reverted rename per subject wins.
35
47
  const rows = db
36
48
  .prepare(`
37
49
  SELECT kind, subject_type, subject_id, payload
38
50
  FROM actions
39
51
  WHERE reverted_by IS NULL
52
+ ORDER BY id
40
53
  `)
41
54
  .all();
42
55
  const now = new Date().toISOString();
@@ -63,6 +76,13 @@ export function loadActionOverlay(db) {
63
76
  if (newType)
64
77
  overlay.labeledEntities.set(r.subject_id, newType);
65
78
  }
79
+ else if (r.kind === "rename_entity" && r.subject_type === "entity") {
80
+ const to = typeof payload?.["to"] === "string" ? payload["to"].trim() : "";
81
+ if (to && to !== r.subject_id)
82
+ overlay.renamedEntities.set(r.subject_id, to);
83
+ else
84
+ overlay.renamedEntities.delete(r.subject_id);
85
+ }
66
86
  else if (r.kind === "resolve_open" && r.subject_type === "open_question") {
67
87
  overlay.resolvedOpens.add(r.subject_id);
68
88
  }
@@ -71,6 +91,33 @@ export function loadActionOverlay(db) {
71
91
  if (resolution)
72
92
  overlay.promotedOpens.set(r.subject_id, resolution);
73
93
  }
94
+ else if (r.kind === "dismiss_decision" && r.subject_type === "decision") {
95
+ overlay.dismissedDecisions.add(r.subject_id);
96
+ }
97
+ else if (r.kind === "revise_decision" && r.subject_type === "decision") {
98
+ const to = typeof payload?.["to"] === "string" ? payload["to"].trim() : "";
99
+ if (to)
100
+ overlay.revisedDecisions.set(r.subject_id, to);
101
+ else
102
+ overlay.revisedDecisions.delete(r.subject_id);
103
+ }
104
+ else if (r.kind === "merge_entity" && r.subject_type === "entity") {
105
+ const into = typeof payload?.["into"] === "string" ? payload["into"].trim() : "";
106
+ if (into)
107
+ overlay.mergedEntities.set(r.subject_id, into);
108
+ else
109
+ overlay.mergedEntities.delete(r.subject_id);
110
+ }
111
+ else if (r.kind === "set_coherence" && r.subject_type === "entity") {
112
+ const state = typeof payload?.["state"] === "string" ? payload["state"] : "";
113
+ if (state === "active" || state === "sparse" || state === "stale") {
114
+ overlay.coherenceOverrides.set(r.subject_id, state);
115
+ }
116
+ else {
117
+ // Empty payload reverts to the computed bucket.
118
+ overlay.coherenceOverrides.delete(r.subject_id);
119
+ }
120
+ }
74
121
  }
75
122
  return overlay;
76
123
  }
@@ -82,6 +129,15 @@ export function loadActionOverlay(db) {
82
129
  export function openQuestionId(sessionId, text) {
83
130
  return `${sessionId}::${stableHash12(text)}`;
84
131
  }
132
+ /**
133
+ * Stable id for a decision: `${sessionId}::dec::${hash12(text)}`. Same
134
+ * deterministic-hash trick as open questions; the `dec::` infix keeps the
135
+ * two ID spaces disjoint so a decision and an open question with the same
136
+ * text in the same session don't collide.
137
+ */
138
+ export function decisionId(sessionId, text) {
139
+ return `${sessionId}::dec::${stableHash12(text)}`;
140
+ }
85
141
  function stableHash12(text) {
86
142
  let h = 0xcbf29ce484222325n;
87
143
  for (let i = 0; i < text.length; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../src/core/actions/overlay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../src/core/actions/overlay.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,9 @@ export interface DatasetSession {
17
17
  readonly summary: string;
18
18
  readonly entities: ReadonlyArray<string>;
19
19
  readonly decisions: ReadonlyArray<string>;
20
+ /** Stable ids parallel to `decisions[]`. Same length and order; use to
21
+ * target overlay actions (dismiss_decision, revise_decision). */
22
+ readonly decision_ids: ReadonlyArray<string>;
20
23
  readonly open: ReadonlyArray<string>;
21
24
  readonly open_questions: ReadonlyArray<{
22
25
  id: string;
@@ -29,12 +32,20 @@ export interface DatasetSession {
29
32
  readonly supersedes?: string;
30
33
  readonly superseded_by?: string;
31
34
  }
35
+ export type TopicCoherence = "active" | "sparse" | "stale";
32
36
  export interface DatasetEntity {
33
37
  readonly canonical: string;
34
38
  readonly type: string;
35
39
  readonly status: string;
36
40
  readonly session_count: number;
37
41
  readonly last_seen_session: string | null;
42
+ /** Renamed display label from the action overlay; absent if not renamed. */
43
+ readonly display?: string;
44
+ /** Effective coherence bucket (override if user set one, else computed). */
45
+ readonly coherence: TopicCoherence;
46
+ /** Computed bucket from session_count + age, ignoring any override. Lets
47
+ * the UI show "would naturally be X" alongside the user assertion. */
48
+ readonly coherence_computed: TopicCoherence;
38
49
  }
39
50
  export interface DatasetResponse {
40
51
  readonly meta: {
@@ -49,6 +60,8 @@ export interface DatasetResponse {
49
60
  readonly entity_colors: Record<string, string>;
50
61
  readonly entity_type: Record<string, string>;
51
62
  readonly entity_status: Record<string, string>;
63
+ /** canonical → display label; only canonicals with an active rename appear. */
64
+ readonly entity_display: Record<string, string>;
52
65
  readonly metrics: {
53
66
  readonly this_week: number;
54
67
  readonly last_week: number;
@@ -61,7 +74,7 @@ export interface DatasetResponse {
61
74
  readonly alerts: ReadonlyArray<{
62
75
  readonly id: string;
63
76
  readonly type: "stale";
64
- readonly severity: "high" | "medium";
77
+ readonly severity: "high" | "medium" | "low";
65
78
  readonly entity: string;
66
79
  readonly summary: string;
67
80
  readonly sessions: ReadonlyArray<string>;
@@ -11,7 +11,7 @@ import { existsSync } from "node:fs";
11
11
  import Database from "better-sqlite3";
12
12
  import * as sqliteVec from "sqlite-vec";
13
13
  import { liveSessionStatus } from "../storage/live-status.js";
14
- import { loadActionOverlay, openQuestionId } from "../actions/overlay.js";
14
+ import { loadActionOverlay, openQuestionId, decisionId } from "../actions/overlay.js";
15
15
  const EMPTY_DATASET = (dbPath, present) => ({
16
16
  meta: {
17
17
  last_sync: new Date().toISOString(),
@@ -25,6 +25,7 @@ const EMPTY_DATASET = (dbPath, present) => ({
25
25
  entity_colors: {},
26
26
  entity_type: {},
27
27
  entity_status: {},
28
+ entity_display: {},
28
29
  metrics: { this_week: 0, last_week: 0, sparkline: [0, 0, 0, 0, 0, 0, 0], healthy: 0, sparse: 0, stale: 0, closed_decisions: 0 },
29
30
  alerts: [],
30
31
  runtimes: [],
@@ -130,14 +131,32 @@ function projectFromDb(db, dbPath, includePaths) {
130
131
  `)
131
132
  .all();
132
133
  const overlay = loadActionOverlay(db);
134
+ // Count-folding pass (Option B): runs before coherence computation so the
135
+ // target entity's bucket reflects the absorbed session count.
136
+ if (overlay.mergedEntities.size > 0) {
137
+ const byCanonical = new Map(allEntityRows.map((e) => [e.canonical, e]));
138
+ for (const [source, into] of overlay.mergedEntities) {
139
+ const src = byCanonical.get(source);
140
+ const tgt = byCanonical.get(into);
141
+ if (src && tgt)
142
+ tgt.session_count += src.session_count;
143
+ }
144
+ }
145
+ const sessionStartByIdForCoherence = new Map(sessionRows.map((s) => [s.id, s.started_at]));
146
+ const nowMs = Date.now();
133
147
  for (const e of allEntityRows) {
134
- if (overlay.retiredEntities.has(e.canonical))
148
+ if (overlay.retiredEntities.has(e.canonical) || overlay.mergedEntities.has(e.canonical))
135
149
  e.status = "retired";
136
150
  else if (overlay.snoozedEntities.has(e.canonical))
137
151
  e.status = "snoozed";
138
152
  const newType = overlay.labeledEntities.get(e.canonical);
139
153
  if (newType)
140
154
  e.type = newType;
155
+ const newDisplay = overlay.renamedEntities.get(e.canonical);
156
+ if (newDisplay)
157
+ e.display = newDisplay;
158
+ e.coherence_computed = computeCoherence(e, sessionStartByIdForCoherence, nowMs);
159
+ e.coherence = overlay.coherenceOverrides.get(e.canonical) ?? e.coherence_computed;
141
160
  }
142
161
  const entityRows = includePaths
143
162
  ? allEntityRows
@@ -153,6 +172,24 @@ function projectFromDb(db, dbPath, includePaths) {
153
172
  const promotedDecisions = rawOpen
154
173
  .filter((o) => overlay.promotedOpens.has(o.id))
155
174
  .map((o) => overlay.promotedOpens.get(o.id));
175
+ // Project decision overlays: dismissed lines drop out; revised lines
176
+ // show the corrected text. Promoted-from-open lines pass through as-is
177
+ // (the open-question id already governs them).
178
+ const rawDecisions = decisionsBySession.get(s.id) ?? [];
179
+ const projectedDecisions = [];
180
+ const projectedDecisionIds = [];
181
+ for (const text of rawDecisions) {
182
+ const id = decisionId(s.id, text);
183
+ if (overlay.dismissedDecisions.has(id))
184
+ continue;
185
+ const revised = overlay.revisedDecisions.get(id);
186
+ projectedDecisions.push(revised ?? text);
187
+ projectedDecisionIds.push(id);
188
+ }
189
+ for (const text of promotedDecisions) {
190
+ projectedDecisions.push(text);
191
+ projectedDecisionIds.push(decisionId(s.id, text));
192
+ }
156
193
  return {
157
194
  id: s.id,
158
195
  date: (s.started_at ?? "").slice(0, 10),
@@ -161,7 +198,8 @@ function projectFromDb(db, dbPath, includePaths) {
161
198
  label: s.label,
162
199
  summary: s.summary,
163
200
  entities: includePaths ? rawEntities : rawEntities.filter((name) => keptEntities.has(name)),
164
- decisions: [...(decisionsBySession.get(s.id) ?? []), ...promotedDecisions],
201
+ decisions: projectedDecisions,
202
+ decision_ids: projectedDecisionIds,
165
203
  open: activeOpen.map((o) => o.text),
166
204
  open_questions: activeOpen.map((o) => ({ id: o.id, text: o.text, resolved: false })),
167
205
  status,
@@ -176,10 +214,13 @@ function projectFromDb(db, dbPath, includePaths) {
176
214
  const entityColors = {};
177
215
  const entityType = {};
178
216
  const entityStatus = {};
217
+ const entityDisplay = {};
179
218
  for (const e of entityRows) {
180
219
  entityColors[e.canonical] = stableColor(e.canonical);
181
220
  entityType[e.canonical] = e.type;
182
221
  entityStatus[e.canonical] = e.status;
222
+ if (e.display)
223
+ entityDisplay[e.canonical] = e.display;
183
224
  }
184
225
  const metrics = computeMetrics(sessions, entityRows);
185
226
  const alerts = computeStaleAlerts(sessions, entityRows, overlay);
@@ -197,6 +238,7 @@ function projectFromDb(db, dbPath, includePaths) {
197
238
  entity_colors: entityColors,
198
239
  entity_type: entityType,
199
240
  entity_status: entityStatus,
241
+ entity_display: entityDisplay,
200
242
  metrics,
201
243
  alerts,
202
244
  runtimes,
@@ -263,19 +305,18 @@ function computeMetrics(sessions, entityRows) {
263
305
  lastWeek += 1;
264
306
  }
265
307
  }
266
- const sessionsById = new Map(sessions.map((s) => [s.id, s]));
308
+ // Aggregate by the effective coherence (override wins, else computed) so
309
+ // the headline bars match what the user sees after asserting a bucket.
267
310
  let healthy = 0;
268
311
  let sparse = 0;
269
312
  let stale = 0;
270
313
  for (const e of entityRows) {
271
314
  if (e.session_count === 0)
272
315
  continue;
273
- const last = sessionsById.get(e.last_seen_session ?? "");
274
- const lastT = last?.started_at ? Date.parse(last.started_at) : NaN;
275
- const ageDays = Number.isFinite(lastT) ? (now - lastT) / 86_400_000 : 999;
276
- if (ageDays > 30)
316
+ const bucket = e.coherence ?? "sparse";
317
+ if (bucket === "stale")
277
318
  stale += 1;
278
- else if (e.session_count >= 3)
319
+ else if (bucket === "active")
279
320
  healthy += 1;
280
321
  else
281
322
  sparse += 1;
@@ -283,6 +324,20 @@ function computeMetrics(sessions, entityRows) {
283
324
  const closedDecisions = sessions.reduce((sum, s) => sum + (s.status === "superseded" ? 0 : s.decisions.length), 0);
284
325
  return { this_week: thisWeek, last_week: lastWeek, sparkline, healthy, sparse, stale, closed_decisions: closedDecisions };
285
326
  }
327
+ /** Natural coherence bucket for an entity, ignoring overlay overrides.
328
+ * Stale dominates: any topic last touched >30d is stale regardless of count. */
329
+ function computeCoherence(e, startedAtBySession, nowMs) {
330
+ if (e.session_count === 0)
331
+ return "sparse";
332
+ const startedAt = startedAtBySession.get(e.last_seen_session ?? "") ?? null;
333
+ const lastT = startedAt ? Date.parse(startedAt) : NaN;
334
+ const ageDays = Number.isFinite(lastT) ? (nowMs - lastT) / 86_400_000 : 999;
335
+ if (ageDays > 30)
336
+ return "stale";
337
+ if (e.session_count >= 3)
338
+ return "active";
339
+ return "sparse";
340
+ }
286
341
  function computeStaleAlerts(sessions, entityRows, overlay) {
287
342
  const now = Date.now();
288
343
  const sessionsById = new Map(sessions.map((s) => [s.id, s]));
@@ -313,7 +368,7 @@ function computeStaleAlerts(sessions, entityRows, overlay) {
313
368
  alerts.push({
314
369
  id: alertId,
315
370
  type: "stale",
316
- severity: ageDays > 60 ? "high" : "medium",
371
+ severity: ageDays > 60 ? "high" : ageDays > 45 ? "medium" : "low",
317
372
  entity: e.canonical,
318
373
  summary,
319
374
  sessions: last ? [last.id] : [],
@@ -321,7 +376,9 @@ function computeStaleAlerts(sessions, entityRows, overlay) {
321
376
  last_touch_at: last?.started_at ?? null,
322
377
  });
323
378
  }
324
- alerts.sort((a, b) => (a.severity === "high" ? 0 : 1) - (b.severity === "high" ? 0 : 1));
379
+ // high → medium → low, then secondary by age desc so older items surface first within a tier.
380
+ const severityRank = { high: 0, medium: 1, low: 2 };
381
+ alerts.sort((a, b) => severityRank[a.severity] - severityRank[b.severity] || b.age_days - a.age_days);
325
382
  return alerts;
326
383
  }
327
384
  const HUES = [200, 270, 320, 30, 90, 150, 220, 290, 340, 50, 110, 170];
@@ -1 +1 @@
1
- {"version":3,"file":"build-dataset.js","sourceRoot":"","sources":["../../../src/core/dataset/build-dataset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-dataset.js","sourceRoot":"","sources":["../../../src/core/dataset/build-dataset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Detect "recall misses" — sessions the agent explicitly fetched or cited
3
+ * in its response but which the hook's pre-prompt recall never surfaced
4
+ * in this conversation.
5
+ *
6
+ * A miss is the inverse signal of a citation:
7
+ * - Citation = surfaced id appeared in the agent's tool calls / prose
8
+ * - Miss = id appeared in a get_session(id) or cite_session(id) call
9
+ * but was NOT surfaced
10
+ *
11
+ * Only explicit-id tool_use calls count. We don't scan recall_sessions
12
+ * results — those are exploratory and don't mean the agent thought any
13
+ * specific returned id was the right answer. get_session and cite_session,
14
+ * by contrast, are deterministic single-id signals: "I want this session
15
+ * specifically" or "I am citing this exact session."
16
+ *
17
+ * Aggregated miss data shows where the hook's selection gate is wrong —
18
+ * sessions that were relevant but didn't score high enough to fire. Spec E
19
+ * v1 is passive: just log, surface via the `nlm misses` CLI for review.
20
+ * Future specs may consume this data to retrain reranking or trigger
21
+ * targeted reclassification.
22
+ */
23
+ import type { ToolUseBlock } from "./transcript.js";
24
+ export interface DetectedMiss {
25
+ readonly id: string;
26
+ readonly kind: "get_session" | "cite_session";
27
+ }
28
+ export interface MissDetectInput {
29
+ readonly toolUses: ReadonlyArray<ToolUseBlock>;
30
+ readonly surfacedIds: Iterable<string>;
31
+ }
32
+ export declare function detectMisses(input: MissDetectInput): DetectedMiss[];
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Detect "recall misses" — sessions the agent explicitly fetched or cited
3
+ * in its response but which the hook's pre-prompt recall never surfaced
4
+ * in this conversation.
5
+ *
6
+ * A miss is the inverse signal of a citation:
7
+ * - Citation = surfaced id appeared in the agent's tool calls / prose
8
+ * - Miss = id appeared in a get_session(id) or cite_session(id) call
9
+ * but was NOT surfaced
10
+ *
11
+ * Only explicit-id tool_use calls count. We don't scan recall_sessions
12
+ * results — those are exploratory and don't mean the agent thought any
13
+ * specific returned id was the right answer. get_session and cite_session,
14
+ * by contrast, are deterministic single-id signals: "I want this session
15
+ * specifically" or "I am citing this exact session."
16
+ *
17
+ * Aggregated miss data shows where the hook's selection gate is wrong —
18
+ * sessions that were relevant but didn't score high enough to fire. Spec E
19
+ * v1 is passive: just log, surface via the `nlm misses` CLI for review.
20
+ * Future specs may consume this data to retrain reranking or trigger
21
+ * targeted reclassification.
22
+ */
23
+ const MIN_ID_LEN = 6;
24
+ export function detectMisses(input) {
25
+ const surfaced = new Set();
26
+ for (const id of input.surfacedIds) {
27
+ if (id.length >= MIN_ID_LEN)
28
+ surfaced.add(id);
29
+ }
30
+ const seenMissed = new Set();
31
+ const misses = [];
32
+ for (const tu of input.toolUses) {
33
+ if (!isNlmTool(tu.name))
34
+ continue;
35
+ const kind = explicitIdKind(tu.name);
36
+ if (!kind)
37
+ continue;
38
+ const id = extractId(tu.input);
39
+ if (!id || id.length < MIN_ID_LEN)
40
+ continue;
41
+ if (surfaced.has(id))
42
+ continue;
43
+ if (seenMissed.has(id))
44
+ continue;
45
+ seenMissed.add(id);
46
+ misses.push({ id, kind });
47
+ }
48
+ return misses;
49
+ }
50
+ function isNlmTool(name) {
51
+ return /^mcp__[^_]*nlm[^_]*__/.test(name);
52
+ }
53
+ function explicitIdKind(name) {
54
+ if (name.endsWith("__get_session"))
55
+ return "get_session";
56
+ if (name.endsWith("__cite_session"))
57
+ return "cite_session";
58
+ return null;
59
+ }
60
+ function extractId(input) {
61
+ if (input === null || typeof input !== "object")
62
+ return null;
63
+ const obj = input;
64
+ const candidate = obj["id"];
65
+ return typeof candidate === "string" ? candidate : null;
66
+ }
67
+ //# sourceMappingURL=miss-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"miss-detect.js","sourceRoot":"","sources":["../../../src/core/hook/miss-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAcH,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB,MAAM,UAAU,YAAY,CAAC,KAAsB;IACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,MAAM,IAAI,UAAU;YAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC;YAAE,SAAS;QAClC,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,UAAU;YAAE,SAAS;QAC5C,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAC/B,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QACjC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,aAAa,CAAC;IACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAAE,OAAO,cAAc,CAAC;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Append-only JSONL miss log. One line per session the agent explicitly
3
+ * fetched or cited but which the hook's pre-prompt recall never surfaced
4
+ * in this conversation. Source: Stop hook's miss-detection pass (spec E).
5
+ *
6
+ * Default path ~/.nlm/miss-log.jsonl, overridable via NLM_MISS_LOG.
7
+ * Disable emission entirely with NLM_MISS_LOG_ENABLED=0 — used by
8
+ * deployments that want recall but not telemetry. Telemetry path — never
9
+ * raises; failure to write is silently swallowed.
10
+ */
11
+ export type MissKind = "get_session" | "cite_session";
12
+ export interface MissEntry {
13
+ readonly conversationId: string;
14
+ readonly missedId: string;
15
+ readonly kind: MissKind;
16
+ /**
17
+ * Count of how many sessions WERE surfaced this conversation. Helps
18
+ * distinguish "hook never fired" (surfacedCount=0) from "hook fired but
19
+ * missed this one" (surfacedCount>0). Aggregation can filter accordingly.
20
+ */
21
+ readonly surfacedCount: number;
22
+ }
23
+ export interface MissStats {
24
+ readonly days: number;
25
+ readonly total: number;
26
+ readonly distinctIds: number;
27
+ /** Top missed sessions ordered by miss count, with diagnostic context. */
28
+ readonly topIds: ReadonlyArray<{
29
+ readonly id: string;
30
+ readonly count: number;
31
+ readonly conversations: number;
32
+ }>;
33
+ readonly logPresent: boolean;
34
+ }
35
+ export declare function appendMiss(entry: MissEntry, logPath?: string): Promise<void>;
36
+ /**
37
+ * Append multiple misses in one call. Each gets the same timestamp.
38
+ * Quieter than appendMiss × N when several misses fire in a single Stop
39
+ * hook invocation (which is the common case).
40
+ */
41
+ export declare function appendMisses(entries: ReadonlyArray<MissEntry>, logPath?: string): Promise<void>;
42
+ /**
43
+ * Read the miss log and aggregate by missedId. Used by the `nlm misses`
44
+ * CLI. Days filter applied at parse time. Bad lines (non-JSON or missing
45
+ * fields) are skipped silently.
46
+ */
47
+ export declare function missStats(days: number, logPath?: string): Promise<MissStats>;