sensorium-mcp 3.0.25 → 3.0.27

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 (129) hide show
  1. package/README.md +1 -0
  2. package/dist/config.d.ts +2 -2
  3. package/dist/config.js +3 -3
  4. package/dist/daily-session.d.ts.map +1 -1
  5. package/dist/daily-session.js +15 -2
  6. package/dist/daily-session.js.map +1 -1
  7. package/dist/dashboard/routes/data.d.ts +0 -1
  8. package/dist/dashboard/routes/data.d.ts.map +1 -1
  9. package/dist/dashboard/routes/data.js +1 -13
  10. package/dist/dashboard/routes/data.js.map +1 -1
  11. package/dist/dashboard/routes/snapshots.d.ts.map +1 -1
  12. package/dist/dashboard/routes/snapshots.js +29 -5
  13. package/dist/dashboard/routes/snapshots.js.map +1 -1
  14. package/dist/dashboard/spa.html +10 -10
  15. package/dist/data/memory/bootstrap.d.ts +0 -4
  16. package/dist/data/memory/bootstrap.d.ts.map +1 -1
  17. package/dist/data/memory/bootstrap.js +2 -30
  18. package/dist/data/memory/bootstrap.js.map +1 -1
  19. package/dist/data/memory/consolidation.d.ts +7 -0
  20. package/dist/data/memory/consolidation.d.ts.map +1 -1
  21. package/dist/data/memory/consolidation.js +19 -1
  22. package/dist/data/memory/consolidation.js.map +1 -1
  23. package/dist/data/memory/index.d.ts +1 -2
  24. package/dist/data/memory/index.d.ts.map +1 -1
  25. package/dist/data/memory/index.js +1 -2
  26. package/dist/data/memory/index.js.map +1 -1
  27. package/dist/data/memory/migration-runner.d.ts +1 -1
  28. package/dist/data/memory/migration-runner.d.ts.map +1 -1
  29. package/dist/data/memory/migration-runner.js +11 -1
  30. package/dist/data/memory/migration-runner.js.map +1 -1
  31. package/dist/data/memory/narrative.d.ts.map +1 -1
  32. package/dist/data/memory/narrative.js +49 -22
  33. package/dist/data/memory/narrative.js.map +1 -1
  34. package/dist/data/memory/reflection.d.ts +1 -1
  35. package/dist/data/memory/reflection.d.ts.map +1 -1
  36. package/dist/data/memory/reflection.js +88 -17
  37. package/dist/data/memory/reflection.js.map +1 -1
  38. package/dist/data/memory/schema-ddl.d.ts +1 -1
  39. package/dist/data/memory/schema-ddl.d.ts.map +1 -1
  40. package/dist/data/memory/schema-ddl.js +1 -22
  41. package/dist/data/memory/schema-ddl.js.map +1 -1
  42. package/dist/data/memory/schema.d.ts.map +1 -1
  43. package/dist/data/memory/schema.js +4 -0
  44. package/dist/data/memory/schema.js.map +1 -1
  45. package/dist/data/memory/semantic.d.ts +7 -2
  46. package/dist/data/memory/semantic.d.ts.map +1 -1
  47. package/dist/data/memory/semantic.js +26 -12
  48. package/dist/data/memory/semantic.js.map +1 -1
  49. package/dist/data/memory/synthesis.d.ts +3 -1
  50. package/dist/data/memory/synthesis.d.ts.map +1 -1
  51. package/dist/data/memory/synthesis.js +75 -25
  52. package/dist/data/memory/synthesis.js.map +1 -1
  53. package/dist/data/memory/thread-registry.d.ts +6 -0
  54. package/dist/data/memory/thread-registry.d.ts.map +1 -1
  55. package/dist/data/memory/thread-registry.js +33 -0
  56. package/dist/data/memory/thread-registry.js.map +1 -1
  57. package/dist/data/memory/topic-shift.d.ts +1 -1
  58. package/dist/data/memory/topic-shift.js +1 -1
  59. package/dist/data/memory/utils.d.ts +1 -1
  60. package/dist/data/memory/utils.js +1 -1
  61. package/dist/http-server.d.ts.map +1 -1
  62. package/dist/http-server.js +26 -1
  63. package/dist/http-server.js.map +1 -1
  64. package/dist/index.js +4 -0
  65. package/dist/index.js.map +1 -1
  66. package/dist/server/factory.js +6 -3
  67. package/dist/server/factory.js.map +1 -1
  68. package/dist/services/agent-spawn.service.d.ts.map +1 -1
  69. package/dist/services/agent-spawn.service.js +38 -10
  70. package/dist/services/agent-spawn.service.js.map +1 -1
  71. package/dist/services/consolidation.service.d.ts.map +1 -1
  72. package/dist/services/consolidation.service.js +148 -70
  73. package/dist/services/consolidation.service.js.map +1 -1
  74. package/dist/services/keeper.service.d.ts.map +1 -1
  75. package/dist/services/keeper.service.js +17 -3
  76. package/dist/services/keeper.service.js.map +1 -1
  77. package/dist/services/memory-briefing.service.d.ts.map +1 -1
  78. package/dist/services/memory-briefing.service.js +7 -16
  79. package/dist/services/memory-briefing.service.js.map +1 -1
  80. package/dist/services/process.service.d.ts.map +1 -1
  81. package/dist/services/process.service.js +10 -3
  82. package/dist/services/process.service.js.map +1 -1
  83. package/dist/services/thread-health.service.d.ts +2 -1
  84. package/dist/services/thread-health.service.d.ts.map +1 -1
  85. package/dist/services/thread-health.service.js +4 -5
  86. package/dist/services/thread-health.service.js.map +1 -1
  87. package/dist/services/thread-lifecycle.service.d.ts.map +1 -1
  88. package/dist/services/thread-lifecycle.service.js +7 -0
  89. package/dist/services/thread-lifecycle.service.js.map +1 -1
  90. package/dist/sessions.d.ts +2 -0
  91. package/dist/sessions.d.ts.map +1 -1
  92. package/dist/sessions.js +12 -0
  93. package/dist/sessions.js.map +1 -1
  94. package/dist/tools/defs/memory-defs.js +7 -7
  95. package/dist/tools/defs/memory-defs.js.map +1 -1
  96. package/dist/tools/defs/session-defs.d.ts.map +1 -1
  97. package/dist/tools/defs/session-defs.js +3 -2
  98. package/dist/tools/defs/session-defs.js.map +1 -1
  99. package/dist/tools/delegate-tool.d.ts.map +1 -1
  100. package/dist/tools/delegate-tool.js +3 -1
  101. package/dist/tools/delegate-tool.js.map +1 -1
  102. package/dist/tools/memory-tools.d.ts.map +1 -1
  103. package/dist/tools/memory-tools.js +25 -27
  104. package/dist/tools/memory-tools.js.map +1 -1
  105. package/dist/tools/session-tools.d.ts +1 -0
  106. package/dist/tools/session-tools.d.ts.map +1 -1
  107. package/dist/tools/session-tools.js +2 -1
  108. package/dist/tools/session-tools.js.map +1 -1
  109. package/dist/tools/start-session-tool.d.ts.map +1 -1
  110. package/dist/tools/start-session-tool.js +22 -11
  111. package/dist/tools/start-session-tool.js.map +1 -1
  112. package/dist/tools/wait/media-processor.d.ts.map +1 -1
  113. package/dist/tools/wait/media-processor.js +6 -2
  114. package/dist/tools/wait/media-processor.js.map +1 -1
  115. package/dist/tools/wait/message-delivery.d.ts.map +1 -1
  116. package/dist/tools/wait/message-delivery.js +27 -6
  117. package/dist/tools/wait/message-delivery.js.map +1 -1
  118. package/dist/tools/wait/message-processing.d.ts.map +1 -1
  119. package/dist/tools/wait/message-processing.js +17 -2
  120. package/dist/tools/wait/message-processing.js.map +1 -1
  121. package/dist/tools/wait/poll-loop.d.ts +1 -0
  122. package/dist/tools/wait/poll-loop.d.ts.map +1 -1
  123. package/dist/tools/wait/poll-loop.js +27 -10
  124. package/dist/tools/wait/poll-loop.js.map +1 -1
  125. package/package.json +1 -1
  126. package/dist/data/memory/procedures.d.ts +0 -51
  127. package/dist/data/memory/procedures.d.ts.map +0 -1
  128. package/dist/data/memory/procedures.js +0 -140
  129. package/dist/data/memory/procedures.js.map +0 -1
@@ -19,7 +19,7 @@ interface ReflectionResult {
19
19
  processedEpisodeCount: number;
20
20
  duration: number;
21
21
  }
22
- /** Check if an insight passes the quality gate (actionable, specific, non-vague). */
22
+ /** Check if an insight passes the quality gate (actionable, specific, non-vague, non-meta). */
23
23
  export declare function passesQualityGate(content: string, confidence: number): {
24
24
  pass: boolean;
25
25
  reason?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"reflection.d.ts","sourceRoot":"","sources":["../../../src/data/memory/reflection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAgB5C,UAAU,iBAAiB;IACzB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAqLD,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAazG;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAgBP;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CA4BrC;AA+DD;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,OAAO,CAAC,gBAAgB,CAAC,CAkB3B"}
1
+ {"version":3,"file":"reflection.d.ts","sourceRoot":"","sources":["../../../src/data/memory/reflection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAiB5C,UAAU,iBAAiB;IACzB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AA6OD,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAkBzG;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAgBP;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CA4BrC;AA+DD;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,OAAO,CAAC,gBAAgB,CAAC,CAkB3B"}
@@ -12,17 +12,19 @@ import { saveSemanticNote, searchByEmbedding, saveNoteEmbedding } from "./semant
12
12
  import { nowISO, repairAndParseJSON } from "./utils.js";
13
13
  import { log } from "../../logger.js";
14
14
  import { resolveKnowledgeThreadId } from "../../config.js";
15
+ import { getThread } from "./thread-registry.js";
15
16
  import { chatCompletion, generateEmbedding, } from "../../integrations/openai/chat.js";
16
17
  import { errorMessage } from "../../utils.js";
17
18
  // ─── Rate-limiting ───────────────────────────────────────────────────────────
18
19
  const REFLECTION_COOLDOWN_MS = 4 * 60 * 60 * 1000; // 4 hours
19
20
  const MIN_EPISODES_FOR_REFLECTION = 20;
20
21
  // ─── Buffer cap & quality gate ───────────────────────────────────────────────
21
- const MAX_ACTIVE_REFLECTIONS = 150;
22
+ const MAX_ACTIVE_REFLECTIONS = 75;
22
23
  const STALE_REFLECTION_DAYS = 30;
23
24
  const MIN_INSIGHT_LENGTH = 50;
24
25
  const VAGUE_PATTERNS = [
25
26
  /\bthe agent tends to\b/i,
27
+ /\bI tend to\b/i,
26
28
  /\bthe agent demonstrates\b/i,
27
29
  /\bthe agent frequently\b/i,
28
30
  /\bshould consider\b/i,
@@ -31,12 +33,26 @@ const VAGUE_PATTERNS = [
31
33
  /\boverall\b.*\b(good|well|effective)\b/i,
32
34
  /\bthe key (insight|takeaway|lesson) is\b/i,
33
35
  /\bit('s| is) important to\b/i,
34
- /\bthis (led|leads) to\b(?!\s+\w{4,})/i, // only vague when not followed by a concrete noun
36
+ /\bthis (led|leads) to\b(?!\s+\w{4,})/i,
35
37
  /\bgoing forward\b/i,
36
38
  /\bmoving forward\b/i,
37
39
  /\ba? ?valuable (lesson|experience|insight)\b/i,
38
40
  /\bI (learned|realized|recognized|acknowledged) that\b/i,
39
41
  /\bthis (highlights|underscores|demonstrates)\b/i,
42
+ /\bsignificant (progress|strides|developments?|evolution)\b/i,
43
+ /\bnotable improvements?\b/i,
44
+ /\bvarious features\b/i,
45
+ /\bseveral enhancements\b/i,
46
+ /\bI regularly (review|conduct|perform|check)\b/i,
47
+ /\bI frequently (create|manage|handle)\b/i,
48
+ ];
49
+ const BANNED_TOPIC_PATTERNS = [
50
+ /\bmemory (system|audit|cleanup|quality|consolidat)/i,
51
+ /\bconsolidation (process|pipeline|prompt)\b/i,
52
+ /\breflection (quality|pipeline|system)\b/i,
53
+ /\bdeduplication\b/i,
54
+ /\bnote (archival|cleanup|expir)/i,
55
+ /\bI (conducted|scheduled|implemented) a (memory|cleanup|audit)\b/i,
40
56
  ];
41
57
  // Domain tags are freeform short labels (1-2 words) generated by the LLM.
42
58
  /** Per-thread timestamp of the last successful reflection run. */
@@ -126,21 +142,31 @@ Respond in JSON format:
126
142
 
127
143
  ## Anti-patterns (your output WILL BE REJECTED if it contains these):
128
144
 
129
- - "The agent tends to..." — vague observation, not actionable
145
+ - "The agent tends to..." / "I tend to..." — vague observation, not actionable
130
146
  - "Should consider..." — wishy-washy, not a concrete instruction
131
- - "In general..." / "Overall..." — too abstract
147
+ - "In general..." / "Overall..." / "significant progress" / "notable improvements" — too abstract
148
+ - "various features" / "several enhancements" / "multiple improvements" — unspecific
132
149
  - Restating the outcome as the root cause
133
150
  - Lesson that doesn't start with a verb
134
151
  - Any field shorter than 10 characters
135
152
 
153
+ ## BANNED topics — do NOT generate insights about:
154
+
155
+ - The memory system, consolidation, audits, cleanup, deduplication, or memory quality
156
+ - The agent's own internal operations or meta-processes
157
+ - How the agent manages its own notes, reflections, or knowledge base
158
+ - These are implementation internals. Only reflect on EXTERNAL work: the project, codebase, operator interactions, technical decisions.
159
+
136
160
  Rules:
137
- - Minimum 3, maximum 10 insights
161
+ - Minimum 1, maximum 5 insights — prefer fewer, deeper insights
138
162
  - Each insight must reference specific episodes by their ID
139
163
  - Confidence should reflect how well-supported the insight is by evidence
140
164
  - Causal insights are most valuable — prioritize cause-and-effect
141
- - Quality over quantity: 3 deep insights beat 10 shallow ones`;
165
+ - Quality over quantity: 2 deep insights beat 5 shallow ones
166
+ - Return {"insights": []} if no episodes warrant deep reflection`;
142
167
  // ─── De-duplication ──────────────────────────────────────────────────────────
143
168
  const DEDUP_SIMILARITY_THRESHOLD = 0.90;
169
+ const LESSON_DEDUP_THRESHOLD = 0.82;
144
170
  async function checkDuplicate(db, content, apiKey, threadId) {
145
171
  try {
146
172
  const embedding = await generateEmbedding(content, apiKey);
@@ -158,8 +184,33 @@ async function checkDuplicate(db, content, apiKey, threadId) {
158
184
  return { isDuplicate: false, embedding: null };
159
185
  }
160
186
  }
187
+ /**
188
+ * Lesson-level dedup: checks if a semantically similar lesson already exists
189
+ * among reflection notes using a lower similarity threshold (0.82).
190
+ * Catches generic lessons like "Always do comprehensive code reviews" that are
191
+ * worded differently but carry the same meaning.
192
+ */
193
+ async function checkLessonDuplicate(db, lesson, apiKey, knowledgeThreadId) {
194
+ try {
195
+ const embedding = await generateEmbedding(lesson, apiKey);
196
+ const matches = searchByEmbedding(db, embedding, {
197
+ maxResults: 3,
198
+ minSimilarity: LESSON_DEDUP_THRESHOLD,
199
+ skipAccessTracking: true,
200
+ threadId: knowledgeThreadId,
201
+ });
202
+ if (matches.some((m) => m.similarity >= LESSON_DEDUP_THRESHOLD && m.content.startsWith("[REFLECTION]"))) {
203
+ return true;
204
+ }
205
+ return false;
206
+ }
207
+ catch {
208
+ // Embedding lookup failed — allow through to avoid data loss
209
+ return false;
210
+ }
211
+ }
161
212
  // ─── Quality gate ────────────────────────────────────────────────────────────
162
- /** Check if an insight passes the quality gate (actionable, specific, non-vague). */
213
+ /** Check if an insight passes the quality gate (actionable, specific, non-vague, non-meta). */
163
214
  export function passesQualityGate(content, confidence) {
164
215
  if (content.length < MIN_INSIGHT_LENGTH) {
165
216
  return { pass: false, reason: "too short" };
@@ -172,6 +223,11 @@ export function passesQualityGate(content, confidence) {
172
223
  return { pass: false, reason: `matches vague pattern: ${pattern.source}` };
173
224
  }
174
225
  }
226
+ for (const pattern of BANNED_TOPIC_PATTERNS) {
227
+ if (pattern.test(content)) {
228
+ return { pass: false, reason: `banned topic: ${pattern.source}` };
229
+ }
230
+ }
175
231
  return { pass: true };
176
232
  }
177
233
  /** Parse reflection content into structured fields. Returns null if parsing fails. */
@@ -301,6 +357,12 @@ export async function runReflection(db, threadId, options) {
301
357
  }
302
358
  }
303
359
  async function runReflectionInner(db, threadId, startMs, maxRecent, oldSampleSize) {
360
+ // ── Gate: worker thread ───────────────────────────────────────────────────
361
+ const threadEntry = getThread(db, threadId);
362
+ if (threadEntry?.type === "worker") {
363
+ log.info(`[reflection] Skipping — thread ${threadId} is a worker thread`);
364
+ return { insights: [], processedEpisodeCount: 0, duration: Date.now() - startMs };
365
+ }
304
366
  // ── Gate: environment ─────────────────────────────────────────────────────
305
367
  const apiKey = process.env.OPENAI_API_KEY;
306
368
  if (!apiKey) {
@@ -319,6 +381,7 @@ async function runReflectionInner(db, threadId, startMs, maxRecent, oldSampleSiz
319
381
  log.info(`[reflection] Skipped — only ${countRow.c} consolidated episodes (need ${MIN_EPISODES_FOR_REFLECTION})`);
320
382
  return { insights: [], processedEpisodeCount: 0, duration: Date.now() - startMs };
321
383
  }
384
+ const knowledgeThreadId = resolveKnowledgeThreadId(threadId);
322
385
  // ── Step 0: Buffer maintenance — expire stale, enforce cap ─────────────
323
386
  enforceReflectionCap(db, threadId);
324
387
  // ── Step 1: Gather episodes ───────────────────────────────────────────────
@@ -336,7 +399,7 @@ async function runReflectionInner(db, threadId, startMs, maxRecent, oldSampleSiz
336
399
  let raw;
337
400
  try {
338
401
  raw = await chatCompletion(messages, apiKey, {
339
- model: process.env.REFLECTION_MODEL ?? process.env.CONSOLIDATION_MODEL ?? "gpt-4o-mini",
402
+ model: process.env.REFLECTION_MODEL ?? process.env.CONSOLIDATION_MODEL ?? "gpt-4o",
340
403
  maxTokens: 4096,
341
404
  temperature: 0.4, // slightly creative for deeper reasoning
342
405
  responseFormat: { type: "json_object" },
@@ -369,13 +432,16 @@ async function runReflectionInner(db, threadId, startMs, maxRecent, oldSampleSiz
369
432
  log.info(`[reflection] Skipped — incomplete template fields`);
370
433
  continue;
371
434
  }
372
- // Compile structured fields into a single rich content string
435
+ // Compile structured fields into a single rich content string.
436
+ // Strip trailing punctuation from each field so the ". " separator doesn't
437
+ // produce double periods when the LLM ends a field with its own period.
438
+ const stripTrailing = (s) => s.trim().replace(/[.!?]+$/, "");
373
439
  const content = [
374
- `Decision: ${ins.decision.trim()}`,
375
- `Context: ${ins.context.trim()}`,
376
- `Outcome: ${ins.outcome.trim()}`,
377
- `Root cause: ${ins.root_cause.trim()}`,
378
- `Lesson: ${ins.lesson.trim()}`,
440
+ `Decision: ${stripTrailing(ins.decision)}`,
441
+ `Context: ${stripTrailing(ins.context)}`,
442
+ `Outcome: ${stripTrailing(ins.outcome)}`,
443
+ `Root cause: ${stripTrailing(ins.root_cause)}`,
444
+ `Lesson: ${stripTrailing(ins.lesson)}`,
379
445
  ].join(". ");
380
446
  const insightType = validTypes.has(ins.type) ? ins.type : "pattern";
381
447
  const confidence = Math.max(0, Math.min(1, ins.confidence ?? 0.5));
@@ -404,11 +470,17 @@ async function runReflectionInner(db, threadId, startMs, maxRecent, oldSampleSiz
404
470
  }
405
471
  // De-duplicate against existing reflections (embedding is cached for reuse)
406
472
  const prefixedContent = `[REFLECTION] [${insightType.toUpperCase()}] [${domain}] ${content}`;
407
- const { isDuplicate: duplicate, embedding: cachedEmbedding } = await checkDuplicate(db, prefixedContent, apiKey, threadId);
473
+ const { isDuplicate: duplicate, embedding: cachedEmbedding } = await checkDuplicate(db, prefixedContent, apiKey, knowledgeThreadId);
408
474
  if (duplicate) {
409
475
  log.info(`[reflection] Skipped duplicate insight: ${content.slice(0, 60)}…`);
410
476
  continue;
411
477
  }
478
+ // Lesson-level dedup — catches semantically similar lessons at a lower threshold
479
+ const lessonDuplicate = await checkLessonDuplicate(db, ins.lesson, apiKey, knowledgeThreadId);
480
+ if (lessonDuplicate) {
481
+ log.info(`[reflection] Skipped lesson-level duplicate: "${ins.lesson.slice(0, 60)}…"`);
482
+ continue;
483
+ }
412
484
  // Generate keywords from content + add domain as keyword
413
485
  const keywords = extractKeywords(content);
414
486
  // Save as a semantic note of type "pattern" (reflection insights are patterns)
@@ -418,7 +490,7 @@ async function runReflectionInner(db, threadId, startMs, maxRecent, oldSampleSiz
418
490
  keywords: ["reflection", insightType, domain, ...keywords],
419
491
  confidence,
420
492
  priority: confidence >= 0.8 ? 1 : 0,
421
- threadId: resolveKnowledgeThreadId(threadId),
493
+ threadId: knowledgeThreadId,
422
494
  sourceEpisodes: refs,
423
495
  });
424
496
  // Reuse the embedding from dedup check — avoids a second API call
@@ -449,7 +521,6 @@ async function runReflectionInner(db, threadId, startMs, maxRecent, oldSampleSiz
449
521
  });
450
522
  lastReflectionAt.set(threadId, Date.now());
451
523
  log.info(`[reflection] Completed: ${episodes.length} episodes → ${savedInsights.length} insights (${Date.now() - startMs}ms)`);
452
- // TODO: Step 6 — procedural generation from reflections (not yet implemented)
453
524
  return {
454
525
  insights: savedInsights,
455
526
  processedEpisodeCount: episodes.length,
@@ -1 +1 @@
1
- {"version":3,"file":"reflection.js","sourceRoot":"","sources":["../../../src/data/memory/reflection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reflection.js","sourceRoot":"","sources":["../../../src/data/memory/reflection.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { Database } from "./schema.js";
2
- export declare const SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS episodes (\n episode_id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n thread_id INTEGER NOT NULL,\n timestamp TEXT NOT NULL,\n type TEXT NOT NULL CHECK(type IN ('operator_message','agent_action','system_event','operator_reaction')),\n modality TEXT NOT NULL CHECK(modality IN ('text','voice','photo','video_note','document','mixed','reaction')),\n content TEXT NOT NULL,\n topic_tags TEXT,\n importance REAL NOT NULL DEFAULT 0.5,\n consolidated INTEGER DEFAULT 0,\n accessed_count INTEGER DEFAULT 0,\n last_accessed TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_ep_thread_time ON episodes(thread_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_ep_importance ON episodes(importance DESC);\nCREATE INDEX IF NOT EXISTS idx_ep_uncons ON episodes(consolidated) WHERE consolidated = 0;\n\nCREATE TABLE IF NOT EXISTS semantic_notes (\n note_id TEXT PRIMARY KEY,\n type TEXT NOT NULL CHECK(type IN ('fact','preference','pattern','entity','relationship')),\n content TEXT NOT NULL,\n keywords TEXT NOT NULL,\n confidence REAL NOT NULL DEFAULT 0.5,\n source_episodes TEXT,\n linked_notes TEXT,\n link_reasons TEXT,\n valid_from TEXT NOT NULL,\n valid_to TEXT,\n superseded_by TEXT,\n access_count INTEGER DEFAULT 0,\n last_accessed TEXT,\n priority INTEGER NOT NULL DEFAULT 0,\n thread_id INTEGER,\n is_guardrail INTEGER NOT NULL DEFAULT 0,\n pinned INTEGER NOT NULL DEFAULT 0,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_sem_type ON semantic_notes(type);\nCREATE INDEX IF NOT EXISTS idx_sem_conf ON semantic_notes(confidence DESC);\nCREATE INDEX IF NOT EXISTS idx_sem_valid ON semantic_notes(valid_to) WHERE valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_priority ON semantic_notes(priority DESC) WHERE valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_thread ON semantic_notes(thread_id) WHERE valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_guardrail ON semantic_notes(is_guardrail) WHERE is_guardrail = 1 AND valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_pinned ON semantic_notes(pinned) WHERE pinned = 1 AND valid_to IS NULL;\n\nCREATE TABLE IF NOT EXISTS procedures (\n procedure_id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n type TEXT NOT NULL CHECK(type IN ('workflow','habit','tool_pattern','template')),\n description TEXT NOT NULL,\n steps TEXT,\n trigger_conditions TEXT,\n success_rate REAL DEFAULT 0.5,\n times_executed INTEGER DEFAULT 0,\n last_executed_at TEXT,\n learned_from TEXT,\n corrections TEXT,\n related_procedures TEXT,\n confidence REAL DEFAULT 0.5,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_proc_name ON procedures(name);\nCREATE INDEX IF NOT EXISTS idx_proc_type ON procedures(type);\n\nCREATE TABLE IF NOT EXISTS meta_topic_index (\n topic TEXT PRIMARY KEY,\n semantic_count INTEGER DEFAULT 0,\n procedural_count INTEGER DEFAULT 0,\n last_updated TEXT,\n avg_confidence REAL DEFAULT 0.5,\n total_accesses INTEGER DEFAULT 0\n);\n\nCREATE TABLE IF NOT EXISTS meta_consolidation_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n run_at TEXT NOT NULL,\n episodes_processed INTEGER,\n notes_created INTEGER,\n duration_ms INTEGER\n);\n\nCREATE TABLE IF NOT EXISTS voice_signatures (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n episode_id TEXT NOT NULL,\n emotion TEXT,\n arousal REAL,\n dominance REAL,\n valence REAL,\n speech_rate REAL,\n mean_pitch_hz REAL,\n pitch_std_hz REAL,\n jitter REAL,\n shimmer REAL,\n hnr_db REAL,\n audio_events TEXT,\n duration_sec REAL,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_voice_ep ON voice_signatures(episode_id);\nCREATE INDEX IF NOT EXISTS idx_voice_time ON voice_signatures(created_at DESC);\n\nCREATE TABLE IF NOT EXISTS note_embeddings (\n note_id TEXT PRIMARY KEY,\n embedding BLOB NOT NULL,\n model TEXT NOT NULL DEFAULT 'text-embedding-3-small',\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_emb_note ON note_embeddings(note_id);\n\nCREATE TABLE IF NOT EXISTS sent_messages (\n message_id INTEGER PRIMARY KEY,\n thread_id INTEGER NOT NULL,\n created_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_sent_messages_thread ON sent_messages(thread_id);\n\nCREATE TABLE IF NOT EXISTS topic_registry (\n chat_id TEXT NOT NULL,\n name TEXT NOT NULL COLLATE NOCASE,\n thread_id INTEGER NOT NULL,\n registered_at TEXT NOT NULL DEFAULT (datetime('now')),\n PRIMARY KEY (chat_id, name)\n);\n\nCREATE TABLE IF NOT EXISTS temporal_narratives (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n thread_id INTEGER NOT NULL,\n resolution TEXT NOT NULL CHECK(resolution IN ('day', 'week', 'month', 'quarter', 'half_year')),\n period_start TEXT NOT NULL,\n period_end TEXT NOT NULL,\n narrative TEXT NOT NULL,\n source_episode_count INTEGER NOT NULL DEFAULT 0,\n source_note_count INTEGER NOT NULL DEFAULT 0,\n model TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n UNIQUE(thread_id, resolution, period_start)\n);\nCREATE INDEX IF NOT EXISTS idx_narrative_thread_res ON temporal_narratives(thread_id, resolution, created_at DESC);\n\nCREATE TABLE IF NOT EXISTS thread_registry (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n thread_id INTEGER NOT NULL UNIQUE,\n name TEXT NOT NULL,\n type TEXT NOT NULL CHECK(type IN ('root','daily','branch','worker')),\n root_thread_id INTEGER,\n badge TEXT NOT NULL DEFAULT 'root',\n client TEXT DEFAULT 'claude',\n max_retries INTEGER DEFAULT 5,\n cooldown_ms INTEGER DEFAULT 300000,\n keep_alive INTEGER DEFAULT 0,\n created_at TEXT NOT NULL,\n last_active_at TEXT,\n session_reset_at TEXT,\n status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active','archived','expired','exited')),\n daily_rotation INTEGER NOT NULL DEFAULT 0,\n autonomous_mode INTEGER NOT NULL DEFAULT 0,\n telegram_topic_id INTEGER,\n identity_prompt TEXT,\n working_directory TEXT,\n pid INTEGER\n);\nCREATE INDEX IF NOT EXISTS idx_thread_reg_type ON thread_registry(type);\nCREATE INDEX IF NOT EXISTS idx_thread_reg_root ON thread_registry(root_thread_id);\nCREATE INDEX IF NOT EXISTS idx_thread_reg_status ON thread_registry(status);\n\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL\n);\n";
2
+ export declare const SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS episodes (\n episode_id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n thread_id INTEGER NOT NULL,\n timestamp TEXT NOT NULL,\n type TEXT NOT NULL CHECK(type IN ('operator_message','agent_action','system_event','operator_reaction')),\n modality TEXT NOT NULL CHECK(modality IN ('text','voice','photo','video_note','document','mixed','reaction')),\n content TEXT NOT NULL,\n topic_tags TEXT,\n importance REAL NOT NULL DEFAULT 0.5,\n consolidated INTEGER DEFAULT 0,\n accessed_count INTEGER DEFAULT 0,\n last_accessed TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_ep_thread_time ON episodes(thread_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_ep_importance ON episodes(importance DESC);\nCREATE INDEX IF NOT EXISTS idx_ep_uncons ON episodes(consolidated) WHERE consolidated = 0;\n\nCREATE TABLE IF NOT EXISTS semantic_notes (\n note_id TEXT PRIMARY KEY,\n type TEXT NOT NULL CHECK(type IN ('fact','preference','pattern','entity','relationship')),\n content TEXT NOT NULL,\n keywords TEXT NOT NULL,\n confidence REAL NOT NULL DEFAULT 0.5,\n source_episodes TEXT,\n linked_notes TEXT,\n link_reasons TEXT,\n valid_from TEXT NOT NULL,\n valid_to TEXT,\n superseded_by TEXT,\n access_count INTEGER DEFAULT 0,\n last_accessed TEXT,\n priority INTEGER NOT NULL DEFAULT 0,\n thread_id INTEGER,\n is_guardrail INTEGER NOT NULL DEFAULT 0,\n pinned INTEGER NOT NULL DEFAULT 0,\n quality_score INTEGER,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_sem_type ON semantic_notes(type);\nCREATE INDEX IF NOT EXISTS idx_sem_conf ON semantic_notes(confidence DESC);\nCREATE INDEX IF NOT EXISTS idx_sem_valid ON semantic_notes(valid_to) WHERE valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_priority ON semantic_notes(priority DESC) WHERE valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_thread ON semantic_notes(thread_id) WHERE valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_guardrail ON semantic_notes(is_guardrail) WHERE is_guardrail = 1 AND valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_pinned ON semantic_notes(pinned) WHERE pinned = 1 AND valid_to IS NULL;\n\nCREATE TABLE IF NOT EXISTS meta_topic_index (\n topic TEXT PRIMARY KEY,\n semantic_count INTEGER DEFAULT 0,\n last_updated TEXT,\n avg_confidence REAL DEFAULT 0.5,\n total_accesses INTEGER DEFAULT 0\n);\n\nCREATE TABLE IF NOT EXISTS meta_consolidation_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n run_at TEXT NOT NULL,\n episodes_processed INTEGER,\n notes_created INTEGER,\n duration_ms INTEGER\n);\n\nCREATE TABLE IF NOT EXISTS voice_signatures (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n episode_id TEXT NOT NULL,\n emotion TEXT,\n arousal REAL,\n dominance REAL,\n valence REAL,\n speech_rate REAL,\n mean_pitch_hz REAL,\n pitch_std_hz REAL,\n jitter REAL,\n shimmer REAL,\n hnr_db REAL,\n audio_events TEXT,\n duration_sec REAL,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_voice_ep ON voice_signatures(episode_id);\nCREATE INDEX IF NOT EXISTS idx_voice_time ON voice_signatures(created_at DESC);\n\nCREATE TABLE IF NOT EXISTS note_embeddings (\n note_id TEXT PRIMARY KEY,\n embedding BLOB NOT NULL,\n model TEXT NOT NULL DEFAULT 'text-embedding-3-small',\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_emb_note ON note_embeddings(note_id);\n\nCREATE TABLE IF NOT EXISTS sent_messages (\n message_id INTEGER PRIMARY KEY,\n thread_id INTEGER NOT NULL,\n created_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_sent_messages_thread ON sent_messages(thread_id);\n\nCREATE TABLE IF NOT EXISTS topic_registry (\n chat_id TEXT NOT NULL,\n name TEXT NOT NULL COLLATE NOCASE,\n thread_id INTEGER NOT NULL,\n registered_at TEXT NOT NULL DEFAULT (datetime('now')),\n PRIMARY KEY (chat_id, name)\n);\n\nCREATE TABLE IF NOT EXISTS temporal_narratives (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n thread_id INTEGER NOT NULL,\n resolution TEXT NOT NULL CHECK(resolution IN ('day', 'week', 'month', 'quarter', 'half_year')),\n period_start TEXT NOT NULL,\n period_end TEXT NOT NULL,\n narrative TEXT NOT NULL,\n source_episode_count INTEGER NOT NULL DEFAULT 0,\n source_note_count INTEGER NOT NULL DEFAULT 0,\n model TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n UNIQUE(thread_id, resolution, period_start)\n);\nCREATE INDEX IF NOT EXISTS idx_narrative_thread_res ON temporal_narratives(thread_id, resolution, created_at DESC);\n\nCREATE TABLE IF NOT EXISTS thread_registry (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n thread_id INTEGER NOT NULL UNIQUE,\n name TEXT NOT NULL,\n type TEXT NOT NULL CHECK(type IN ('root','daily','branch','worker')),\n root_thread_id INTEGER,\n badge TEXT NOT NULL DEFAULT 'root',\n client TEXT DEFAULT 'claude',\n max_retries INTEGER DEFAULT 5,\n cooldown_ms INTEGER DEFAULT 300000,\n keep_alive INTEGER DEFAULT 0,\n created_at TEXT NOT NULL,\n last_active_at TEXT,\n session_reset_at TEXT,\n status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active','archived','expired','exited')),\n daily_rotation INTEGER NOT NULL DEFAULT 0,\n autonomous_mode INTEGER NOT NULL DEFAULT 0,\n telegram_topic_id INTEGER,\n identity_prompt TEXT,\n working_directory TEXT,\n pid INTEGER\n);\nCREATE INDEX IF NOT EXISTS idx_thread_reg_type ON thread_registry(type);\nCREATE INDEX IF NOT EXISTS idx_thread_reg_root ON thread_registry(root_thread_id);\nCREATE INDEX IF NOT EXISTS idx_thread_reg_status ON thread_registry(status);\n\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL\n);\n";
3
3
  export declare function cleanupOldSentMessages(db: Database): void;
4
4
  //# sourceMappingURL=schema-ddl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-ddl.d.ts","sourceRoot":"","sources":["../../../src/data/memory/schema-ddl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,eAAO,MAAM,UAAU,wvNAoLtB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAWzD"}
1
+ {"version":3,"file":"schema-ddl.d.ts","sourceRoot":"","sources":["../../../src/data/memory/schema-ddl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,eAAO,MAAM,UAAU,+/LA+JtB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAWzD"}
@@ -39,6 +39,7 @@ CREATE TABLE IF NOT EXISTS semantic_notes (
39
39
  thread_id INTEGER,
40
40
  is_guardrail INTEGER NOT NULL DEFAULT 0,
41
41
  pinned INTEGER NOT NULL DEFAULT 0,
42
+ quality_score INTEGER,
42
43
  created_at TEXT NOT NULL,
43
44
  updated_at TEXT NOT NULL
44
45
  );
@@ -51,31 +52,9 @@ CREATE INDEX IF NOT EXISTS idx_sem_thread ON semantic_notes(thread_id) WHERE val
51
52
  CREATE INDEX IF NOT EXISTS idx_sem_guardrail ON semantic_notes(is_guardrail) WHERE is_guardrail = 1 AND valid_to IS NULL;
52
53
  CREATE INDEX IF NOT EXISTS idx_sem_pinned ON semantic_notes(pinned) WHERE pinned = 1 AND valid_to IS NULL;
53
54
 
54
- CREATE TABLE IF NOT EXISTS procedures (
55
- procedure_id TEXT PRIMARY KEY,
56
- name TEXT NOT NULL,
57
- type TEXT NOT NULL CHECK(type IN ('workflow','habit','tool_pattern','template')),
58
- description TEXT NOT NULL,
59
- steps TEXT,
60
- trigger_conditions TEXT,
61
- success_rate REAL DEFAULT 0.5,
62
- times_executed INTEGER DEFAULT 0,
63
- last_executed_at TEXT,
64
- learned_from TEXT,
65
- corrections TEXT,
66
- related_procedures TEXT,
67
- confidence REAL DEFAULT 0.5,
68
- created_at TEXT NOT NULL,
69
- updated_at TEXT NOT NULL
70
- );
71
-
72
- CREATE INDEX IF NOT EXISTS idx_proc_name ON procedures(name);
73
- CREATE INDEX IF NOT EXISTS idx_proc_type ON procedures(type);
74
-
75
55
  CREATE TABLE IF NOT EXISTS meta_topic_index (
76
56
  topic TEXT PRIMARY KEY,
77
57
  semantic_count INTEGER DEFAULT 0,
78
- procedural_count INTEGER DEFAULT 0,
79
58
  last_updated TEXT,
80
59
  avg_confidence REAL DEFAULT 0.5,
81
60
  total_accesses INTEGER DEFAULT 0
@@ -1 +1 @@
1
- {"version":3,"file":"schema-ddl.js","sourceRoot":"","sources":["../../../src/data/memory/schema-ddl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoLzB,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,EAAY;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB,yEAAyE,CAC1E,CAAC,GAAG,EAAE,CAAC;QACR,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,0CAA0C,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"schema-ddl.js","sourceRoot":"","sources":["../../../src/data/memory/schema-ddl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+JzB,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,EAAY;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB,yEAAyE,CAC1E,CAAC,GAAG,EAAE,CAAC;QACR,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,0CAA0C,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/data/memory/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAK3C,OAAO,EAAc,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAKrE,MAAM,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAuBlC,wBAAgB,YAAY,IAAI,QAAQ,CAkCvC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/data/memory/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAK3C,OAAO,EAAc,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAKrE,MAAM,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAyBlC,wBAAgB,YAAY,IAAI,QAAQ,CAqCvC"}
@@ -33,7 +33,10 @@ function migrateExistingRootThreads(db) {
33
33
  txn();
34
34
  log.info(`Migrated ${rows.length} existing threads as roots`);
35
35
  }
36
+ let _singletonDb = null;
36
37
  export function initMemoryDb() {
38
+ if (_singletonDb)
39
+ return _singletonDb;
37
40
  const dbDir = join(homedir(), ".remote-copilot-mcp");
38
41
  mkdirSync(dbDir, { recursive: true });
39
42
  const dbPath = join(dbDir, "memory.db");
@@ -59,6 +62,7 @@ export function initMemoryDb() {
59
62
  WHERE (thread_registry.name IS NULL OR thread_registry.name = '')`).run();
60
63
  }
61
64
  catch { }
65
+ _singletonDb = db;
62
66
  return db;
63
67
  }
64
68
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/data/memory/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGpC,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAElC,SAAS,0BAA0B,CAAC,EAAY;IAC9C,MAAM,KAAK,GAAI,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,EAA8B,CAAC,GAAa,CAAC;IACzH,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO;IAEtB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAC,GAAG,EAA+B,CAAC;IACzH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE9B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,sKAAsK,CACvK,CAAC;IACF,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAmB,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,GAAG,EAAE,CAAC;IACN,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,4BAA4B,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACrD,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAErC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACjC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEpB,MAAM,YAAY,GAAI,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAAsB,CAAC,GAAG,CAAC;IAC7G,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1B,0BAA0B,CAAC,EAAE,CAAC,CAAC;IAE/B,IAAI,CAAC;QACH,EAAE,CAAC,OAAO,CACR;;;;;;yEAMmE,CACpE,CAAC,GAAG,EAAE,CAAC;IACV,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/data/memory/schema.ts"],"names":[],"mappings":"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"}
@@ -22,16 +22,18 @@ export interface SemanticNote {
22
22
  lastAccessed: string | null;
23
23
  isGuardrail: boolean;
24
24
  pinned: boolean;
25
+ qualityScore: number | null;
25
26
  createdAt: string;
26
27
  updatedAt: string;
27
28
  }
28
- export declare function updateTopicIndexForKeywords(db: Database, keywords: string[], layer: "semantic" | "procedural"): void;
29
- export declare function decrementTopicIndexForKeywords(db: Database, keywords: string[], layer: "semantic" | "procedural"): void;
29
+ export declare function updateTopicIndexForKeywords(db: Database, keywords: string[]): void;
30
+ export declare function decrementTopicIndexForKeywords(db: Database, keywords: string[]): void;
30
31
  /** Look up a single semantic note by ID (returns type + keywords only, or undefined). */
31
32
  export declare function getSemanticNoteById(db: Database, noteId: string): {
32
33
  type: string;
33
34
  keywords: string[];
34
35
  } | undefined;
36
+ export declare function getSemanticNotesByIds(db: Database, noteIds: string[]): SemanticNote[];
35
37
  export declare function saveSemanticNote(db: Database, note: {
36
38
  type: "fact" | "preference" | "pattern" | "entity" | "relationship";
37
39
  content: string;
@@ -42,6 +44,9 @@ export declare function saveSemanticNote(db: Database, note: {
42
44
  isGuardrail?: boolean;
43
45
  pinned?: boolean;
44
46
  sourceEpisodes?: string[];
47
+ qualityScore?: number | null;
48
+ linkedNotes?: string[];
49
+ linkReasons?: Record<string, string>;
45
50
  }): string;
46
51
  export declare function searchSemanticNotes(db: Database, query: string, options?: {
47
52
  types?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../../src/data/memory/semantic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../../src/data/memory/semantic.ts"],"names":[],"mappings":"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"}
@@ -45,18 +45,18 @@ function rowToSemanticNote(row) {
45
45
  lastAccessed: row.last_accessed ?? null,
46
46
  isGuardrail: row.is_guardrail === 1,
47
47
  pinned: row.pinned === 1,
48
+ qualityScore: row.quality_score ?? null,
48
49
  createdAt: row.created_at,
49
50
  updatedAt: row.updated_at,
50
51
  };
51
52
  }
52
53
  // ─── Topic Index ─────────────────────────────────────────────────────────────
53
- export function updateTopicIndexForKeywords(db, keywords, layer) {
54
+ export function updateTopicIndexForKeywords(db, keywords) {
54
55
  const now = nowISO();
55
- const col = layer === "semantic" ? "semantic_count" : "procedural_count";
56
- const upsertStmt = db.prepare(`INSERT INTO meta_topic_index (topic, ${col}, last_updated)
56
+ const upsertStmt = db.prepare(`INSERT INTO meta_topic_index (topic, semantic_count, last_updated)
57
57
  VALUES (?, 1, ?)
58
58
  ON CONFLICT(topic) DO UPDATE SET
59
- ${col} = ${col} + 1,
59
+ semantic_count = semantic_count + 1,
60
60
  last_updated = ?,
61
61
  total_accesses = total_accesses + 1`);
62
62
  const txn = db.transaction(() => {
@@ -69,10 +69,9 @@ export function updateTopicIndexForKeywords(db, keywords, layer) {
69
69
  });
70
70
  txn();
71
71
  }
72
- export function decrementTopicIndexForKeywords(db, keywords, layer) {
73
- const col = layer === "semantic" ? "semantic_count" : "procedural_count";
74
- const decrementStmt = db.prepare(`UPDATE meta_topic_index SET ${col} = MAX(${col} - 1, 0) WHERE topic = ?`);
75
- const deleteStmt = db.prepare(`DELETE FROM meta_topic_index WHERE topic = ? AND semantic_count <= 0 AND procedural_count <= 0`);
72
+ export function decrementTopicIndexForKeywords(db, keywords) {
73
+ const decrementStmt = db.prepare(`UPDATE meta_topic_index SET semantic_count = MAX(semantic_count - 1, 0) WHERE topic = ?`);
74
+ const deleteStmt = db.prepare(`DELETE FROM meta_topic_index WHERE topic = ? AND semantic_count <= 0`);
76
75
  const txn = db.transaction(() => {
77
76
  for (const kw of keywords) {
78
77
  const normalised = kw.toLowerCase().trim();
@@ -92,14 +91,29 @@ export function getSemanticNoteById(db, noteId) {
92
91
  return undefined;
93
92
  return { type: row.type, keywords: parseJsonArray(row.keywords) };
94
93
  }
94
+ export function getSemanticNotesByIds(db, noteIds) {
95
+ if (noteIds.length === 0)
96
+ return [];
97
+ const placeholders = noteIds.map(() => "?").join(",");
98
+ const rows = db.prepare(`SELECT * FROM semantic_notes WHERE note_id IN (${placeholders}) AND valid_to IS NULL AND superseded_by IS NULL`).all(...noteIds);
99
+ return rows.map(rowToSemanticNote);
100
+ }
95
101
  export function saveSemanticNote(db, note) {
102
+ const validTypes = new Set(["fact", "preference", "pattern", "entity", "relationship"]);
103
+ if (!validTypes.has(note.type)) {
104
+ log.warn(`[semantic] Saving note with non-standard type "${note.type}" — consider using fact/preference/pattern/entity/relationship`);
105
+ }
96
106
  const id = generateId("sn");
97
107
  const now = nowISO();
108
+ const qualityScore = note.qualityScore != null ? Math.max(1, Math.min(5, Math.round(note.qualityScore))) : null;
109
+ if (qualityScore !== null && qualityScore < 3) {
110
+ log.warn(`[semantic] Low-quality note (score ${qualityScore}/5): ${note.content.slice(0, 120)}`);
111
+ }
98
112
  db.prepare(`INSERT INTO semantic_notes
99
- (note_id, type, content, keywords, confidence, priority, thread_id, is_guardrail, pinned, source_episodes, linked_notes, link_reasons, valid_from, access_count, created_at, updated_at)
100
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, ?, ?)`).run(id, note.type, note.content, JSON.stringify(note.keywords), Math.max(0, Math.min(1, note.confidence ?? 0.5)), Math.max(0, Math.min(2, note.priority ?? 0)), note.threadId ?? null, note.isGuardrail ? 1 : 0, note.pinned ? 1 : 0, jsonOrNull(note.sourceEpisodes), null, null, now, now, now);
113
+ (note_id, type, content, keywords, confidence, priority, thread_id, is_guardrail, pinned, source_episodes, linked_notes, link_reasons, valid_from, access_count, quality_score, created_at, updated_at)
114
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, ?, ?, ?)`).run(id, note.type, note.content, JSON.stringify(note.keywords), Math.max(0, Math.min(1, note.confidence ?? 0.5)), Math.max(0, Math.min(2, note.priority ?? 0)), note.threadId ?? null, note.isGuardrail ? 1 : 0, note.pinned ? 1 : 0, jsonOrNull(note.sourceEpisodes), jsonOrNull(note.linkedNotes), note.linkReasons ? JSON.stringify(note.linkReasons) : null, now, qualityScore, now, now);
101
115
  // Update topic index for each keyword
102
- updateTopicIndexForKeywords(db, note.keywords, "semantic");
116
+ updateTopicIndexForKeywords(db, note.keywords);
103
117
  return id;
104
118
  }
105
119
  export function searchSemanticNotes(db, query, options) {
@@ -447,7 +461,7 @@ export function archiveNotesForThread(db, threadId) {
447
461
  for (const note of notes) {
448
462
  expireStmt.run(now, now, note.noteId);
449
463
  if (note.keywords.length > 0) {
450
- decrementTopicIndexForKeywords(db, note.keywords, "semantic");
464
+ decrementTopicIndexForKeywords(db, note.keywords);
451
465
  }
452
466
  }
453
467
  })();