@fingerskier/augment 0.1.9 → 0.2.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 (52) hide show
  1. package/README.md +20 -2
  2. package/dist/cli.d.ts +6 -0
  3. package/dist/cli.js +43 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/constants.d.ts +6 -0
  6. package/dist/constants.js +46 -6
  7. package/dist/constants.js.map +1 -1
  8. package/dist/daemon/client.d.ts +5 -0
  9. package/dist/daemon/client.js +15 -6
  10. package/dist/daemon/client.js.map +1 -1
  11. package/dist/daemon/http.d.ts +1 -1
  12. package/dist/daemon/http.js +159 -53
  13. package/dist/daemon/http.js.map +1 -1
  14. package/dist/daemon/main.js +15 -1
  15. package/dist/daemon/main.js.map +1 -1
  16. package/dist/daemon/scheduler.d.ts +17 -0
  17. package/dist/daemon/scheduler.js +77 -0
  18. package/dist/daemon/scheduler.js.map +1 -0
  19. package/dist/daemon/single-instance.d.ts +32 -0
  20. package/dist/daemon/single-instance.js +131 -0
  21. package/dist/daemon/single-instance.js.map +1 -0
  22. package/dist/db.d.ts +13 -1
  23. package/dist/db.js +166 -105
  24. package/dist/db.js.map +1 -1
  25. package/dist/embeddings.js +8 -0
  26. package/dist/embeddings.js.map +1 -1
  27. package/dist/hooks.js +28 -3
  28. package/dist/hooks.js.map +1 -1
  29. package/dist/install.d.ts +2 -0
  30. package/dist/install.js +41 -7
  31. package/dist/install.js.map +1 -1
  32. package/dist/mcp/server.js +30 -4
  33. package/dist/mcp/server.js.map +1 -1
  34. package/dist/recall.d.ts +2 -0
  35. package/dist/recall.js +1 -0
  36. package/dist/recall.js.map +1 -1
  37. package/dist/service.d.ts +64 -1
  38. package/dist/service.js +298 -38
  39. package/dist/service.js.map +1 -1
  40. package/dist/sleep.d.ts +43 -0
  41. package/dist/sleep.js +129 -0
  42. package/dist/sleep.js.map +1 -0
  43. package/dist/tally.d.ts +46 -0
  44. package/dist/tally.js +94 -0
  45. package/dist/tally.js.map +1 -0
  46. package/dist/types.d.ts +6 -0
  47. package/dist/util/text.d.ts +3 -0
  48. package/dist/util/text.js +26 -2
  49. package/dist/util/text.js.map +1 -1
  50. package/docs/FEATURES.md +161 -51
  51. package/docs/verify-memory-flow.md +28 -9
  52. package/package.json +2 -1
package/dist/service.js CHANGED
@@ -1,16 +1,37 @@
1
- import { DEFAULT_MEMORY_HARD_LIMIT_CHARS, DEFAULT_SEARCH_LIMIT, DEFAULT_SEARCH_MAX_CHARS, DEFAULT_SEARCH_MIN_SCORE, } from "./constants.js";
1
+ import { stat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { DEFAULT_MEMORY_HARD_LIMIT_CHARS, DEFAULT_SEARCH_LIMIT, DEFAULT_SEARCH_MAX_CHARS, DEFAULT_SEARCH_MIN_SCORE, SEMANTIC_COSINE_BASELINE, SEMANTIC_COSINE_MATCH, SLEEP_MAX_CLUSTERS, SLEEP_MIN_AGE_DAYS, SLEEP_MIN_COSINE, } from "./constants.js";
2
4
  import { ensureConfigDirs } from "./config.js";
3
5
  import { AugmentDatabase } from "./db.js";
4
6
  import { TransformersEmbeddingProvider } from "./embeddings.js";
5
- import { deleteMemoryFile, normalizeKind, normalizeLinkType, memoryRelativePath, readMemory, writeMemory } from "./memory/files.js";
7
+ import { deleteMemoryFile, normalizeKind, normalizeLinkType, normalizeRelativePath, memoryRelativePath, readMemory, writeMemory } from "./memory/files.js";
6
8
  import { inferProjectName } from "./memory/project.js";
7
9
  import { findMemoryFiles } from "./memory/scan.js";
8
- import { clamp01, cosineSimilarity, lexicalScore } from "./util/text.js";
10
+ import { clusterSleepCandidates, renderSleepCandidatesText } from "./sleep.js";
11
+ import { clamp01, cosineSimilarity, lexicalScoreWith, tokens } from "./util/text.js";
12
+ /** How long a self-write marker stays claimable. Long enough to cover the watcher's
13
+ * write-settle debounce; short enough that a marker the watcher never consumed (missed
14
+ * event) cannot mask a genuine external edit much later. */
15
+ const SELF_WRITE_TTL_MS = 30_000;
16
+ /** Repeated queries (hooks re-fire the same file path) skip the model entirely;
17
+ * beyond this many distinct queries the least recently used vector is evicted. */
18
+ const QUERY_EMBEDDING_CACHE_MAX = 128;
9
19
  export class AugmentService {
10
20
  config;
11
21
  embeddingProvider;
12
22
  db;
13
23
  initialized = false;
24
+ /** relative_path → timestamp of the service's own most recent write/delete of that file. */
25
+ selfWrites = new Map();
26
+ /** The daemon is the corpus's only writer, so between writes this stays valid.
27
+ * Every mutation path clears it (in a finally, so failed writes can't leave a
28
+ * stale snapshot serving deleted or outdated rows). Held as a promise assigned
29
+ * synchronously in {@link corpus}: a mutation completing while a build is
30
+ * mid-read clears THIS field, so the late-finishing build's pre-mutation data
31
+ * is only ever seen by requests already awaiting it — never cached for later
32
+ * searches. */
33
+ corpusPromise;
34
+ queryEmbeddingCache = new Map();
14
35
  constructor(config, embeddingProvider = new TransformersEmbeddingProvider()) {
15
36
  this.config = config;
16
37
  this.embeddingProvider = embeddingProvider;
@@ -40,21 +61,98 @@ export class AugmentService {
40
61
  return this.db.listProjects(name);
41
62
  }
42
63
  async rebuildIndex() {
64
+ try {
65
+ return await this.rebuildIndexCore();
66
+ }
67
+ finally {
68
+ this.invalidateCorpusSnapshot();
69
+ }
70
+ }
71
+ async rebuildIndexCore() {
43
72
  await ensureConfigDirs(this.config);
44
73
  await this.db.init();
45
74
  const relativePaths = await findMemoryFiles(this.config.memoryRoot);
75
+ const known = await this.db.listMemoryFileStats();
76
+ let indexed = 0;
77
+ let skipped = 0;
46
78
  for (const relativePath of relativePaths) {
79
+ // mtime short-circuit: an unchanged file needs no re-read, re-upsert, or re-embed.
80
+ // Any real write (editor, Dropbox sync, our own upsert) advances the file's mtime.
81
+ const stats = await stat(path.join(this.config.memoryRoot, relativePath)).catch(() => undefined);
82
+ if (stats && known.get(relativePath) === stats.mtimeMs) {
83
+ skipped += 1;
84
+ continue;
85
+ }
47
86
  const parsed = await readMemory(this.config.memoryRoot, relativePath);
48
87
  const record = await this.db.upsertMemory(parsed);
49
88
  await this.ensureEmbedding(record).catch((error) => {
50
89
  console.error(`Embedding failed for ${relativePath}:`, error);
51
90
  });
91
+ indexed += 1;
92
+ }
93
+ const removed = await this.db.removeMissingMemories(relativePaths);
94
+ if (indexed > 0 || removed > 0) {
95
+ await this.db.rebuildLinks();
96
+ }
97
+ return { indexed, skipped };
98
+ }
99
+ /**
100
+ * Incremental single-file (re)index — the watcher's per-event path. Re-reads just the changed
101
+ * file, preserves its row id (path-keyed upsert), and repairs only the link subgraph touching
102
+ * it. A path whose file no longer exists is dropped from the index (cascade cleans its
103
+ * embeddings and link rows); the file's frontmatter in OTHER memories is left alone — external
104
+ * deletion is not authorization to rewrite other files (unlike {@link deleteMemory}).
105
+ */
106
+ async indexPath(relativePath) {
107
+ try {
108
+ await this.indexPathCore(relativePath);
109
+ }
110
+ finally {
111
+ this.invalidateCorpusSnapshot();
112
+ }
113
+ }
114
+ async indexPathCore(relativePath) {
115
+ await this.init();
116
+ const normalized = normalizeRelativePath(relativePath);
117
+ const stats = await stat(path.join(this.config.memoryRoot, normalized)).catch(() => undefined);
118
+ if (!stats) {
119
+ await this.db.deleteMemoryByPath(normalized);
120
+ return;
52
121
  }
53
- await this.db.removeMissingMemories(relativePaths);
54
- await this.db.rebuildLinks();
55
- return { indexed: relativePaths.length };
122
+ const parsed = await readMemory(this.config.memoryRoot, normalized);
123
+ const record = await this.db.upsertMemory(parsed);
124
+ await this.ensureEmbedding(record).catch((error) => {
125
+ console.error(`Embedding failed for ${normalized}:`, error);
126
+ });
127
+ await this.db.rebuildLinksForMemory(record);
128
+ }
129
+ /**
130
+ * Claims a pending self-write marker for `relativePath`. The watcher calls this on every
131
+ * filesystem event: `true` means the service itself just wrote/deleted that file (its index
132
+ * work is already done inline) and the event should be ignored; `false` means the edit came
133
+ * from outside (editor, Dropbox sync) and must be re-indexed. Markers are one-shot and expire.
134
+ */
135
+ consumeSelfWrite(relativePath) {
136
+ const normalized = normalizeRelativePath(relativePath);
137
+ const recorded = this.selfWrites.get(normalized);
138
+ if (recorded === undefined) {
139
+ return false;
140
+ }
141
+ this.selfWrites.delete(normalized);
142
+ return Date.now() - recorded < SELF_WRITE_TTL_MS;
143
+ }
144
+ recordSelfWrite(relativePath) {
145
+ this.selfWrites.set(normalizeRelativePath(relativePath), Date.now());
56
146
  }
57
147
  async upsert(input) {
148
+ try {
149
+ return await this.upsertCore(input);
150
+ }
151
+ finally {
152
+ this.invalidateCorpusSnapshot();
153
+ }
154
+ }
155
+ async upsertCore(input) {
58
156
  await this.init();
59
157
  if (input.content.length > DEFAULT_MEMORY_HARD_LIMIT_CHARS) {
60
158
  throw new Error(`Memory content exceeds hard maximum of ${DEFAULT_MEMORY_HARD_LIMIT_CHARS} characters`);
@@ -83,9 +181,23 @@ export class AugmentService {
83
181
  action = "updated";
84
182
  }
85
183
  else {
86
- existing = await this.findSimilarMemory(project.id, kind, input.content);
87
- if (existing) {
88
- relativePath = existing.relative_path;
184
+ const similar = await this.findSimilarMemory(project.id, kind, input.content);
185
+ // Conservation guard. A >=0.92 lexical match means most of the NEW
186
+ // content's tokens already live in `similar`, but that is directional:
187
+ // it does not guarantee the new content carries everything the prior
188
+ // body held. Folding in place is only lossless when the new content
189
+ // SUBSUMES the existing body -- every distinct token of `similar.body`
190
+ // survives in `input.content` (lexicalScore(existing, new) === 1). When
191
+ // the prior body holds a token the new content drops (a contradiction
192
+ // like ROT-THIRTY->ROT-NINETY, or an omission of an AUDIT-LOGGING
193
+ // clause), an in-place merge would silently destroy that information, so
194
+ // we keep the prior memory intact and store the new content as its own
195
+ // memory at its deterministic path instead. Both versions stay
196
+ // recoverable from the store and the prior body never pollutes the new
197
+ // memory's embedding/lexical document.
198
+ if (similar && lexicalScoreWith(new Set(tokens(similar.body)), input.content) >= 1) {
199
+ existing = similar;
200
+ relativePath = similar.relative_path;
89
201
  action = "similar-updated";
90
202
  }
91
203
  }
@@ -110,10 +222,13 @@ export class AugmentService {
110
222
  updated_at: now,
111
223
  };
112
224
  await writeMemory(this.config.memoryRoot, relativePath, normalizeMemoryFrontmatter(metadata), input.content);
225
+ this.recordSelfWrite(relativePath);
113
226
  const parsed = await readMemory(this.config.memoryRoot, relativePath);
114
227
  const memory = await this.db.upsertMemory(parsed);
115
228
  await this.ensureEmbedding(memory);
116
- await this.db.rebuildLinks();
229
+ // Repair only this memory's link subgraph: a truncate-all rebuild would
230
+ // reassign every links.id, invalidating ids other callers are holding.
231
+ await this.db.rebuildLinksForMemory(memory);
117
232
  return {
118
233
  memory,
119
234
  action,
@@ -145,16 +260,27 @@ export class AugmentService {
145
260
  return { project, memories, links };
146
261
  }
147
262
  async deleteMemory(id) {
263
+ try {
264
+ return await this.deleteMemoryCore(id);
265
+ }
266
+ finally {
267
+ this.invalidateCorpusSnapshot();
268
+ }
269
+ }
270
+ async deleteMemoryCore(id) {
148
271
  await this.init();
149
272
  const memory = await this.read(id);
150
273
  await deleteMemoryFile(this.config.memoryRoot, memory.relative_path);
274
+ this.recordSelfWrite(memory.relative_path);
151
275
  await this.db.deleteMemory(id);
152
276
  // Scrub inbound frontmatter references in other memories so a future memory
153
277
  // recreated at this deterministic path can't silently inherit links that were
154
278
  // pointing at the now-deleted one. `unlink` rewrites source frontmatter for the
155
279
  // same reason; deletion needs the analogous cleanup.
280
+ // No link-table repair needed here: ON DELETE CASCADE already dropped every
281
+ // row touching the deleted memory, and the scrub only removes frontmatter
282
+ // entries whose rows that cascade just deleted.
156
283
  await this.scrubInboundLinks(memory.relative_path);
157
- await this.db.rebuildLinks();
158
284
  return { id, relative_path: memory.relative_path, text: `deleted memory ${id} at ${memory.relative_path}` };
159
285
  }
160
286
  /** Remove every frontmatter link pointing at `targetPath` from all other memories. */
@@ -173,14 +299,42 @@ export class AugmentService {
173
299
  updated_at: new Date().toISOString(),
174
300
  });
175
301
  await writeMemory(this.config.memoryRoot, memory.relative_path, frontmatter, memory.body);
302
+ this.recordSelfWrite(memory.relative_path);
176
303
  const parsed = await readMemory(this.config.memoryRoot, memory.relative_path);
177
304
  await this.db.upsertMemory(parsed);
178
305
  }
179
306
  }
180
- async link(fromMemoryId, toMemoryId, typeInput) {
307
+ /** Resolve a memory by numeric id or by relative path. Ids churn whenever the
308
+ * index rebuilds; the relative path is the durable identity, so link callers
309
+ * may pass either. */
310
+ async resolveMemoryRef(ref) {
311
+ if (typeof ref === "number") {
312
+ return this.read(ref);
313
+ }
314
+ // JSON/query-string plumbing has always delivered ids as strings; a valid
315
+ // relative path (org/repo/KIND/name.md) can never be all digits.
316
+ if (/^\d+$/.test(ref)) {
317
+ return this.read(Number(ref));
318
+ }
319
+ const normalized = normalizeRelativePath(ref);
320
+ const memory = await this.db.getMemoryByPath(normalized);
321
+ if (!memory) {
322
+ throw new Error(`Unknown memory path: ${ref}`);
323
+ }
324
+ return memory;
325
+ }
326
+ async link(fromRef, toRef, typeInput) {
327
+ try {
328
+ return await this.linkCore(fromRef, toRef, typeInput);
329
+ }
330
+ finally {
331
+ this.invalidateCorpusSnapshot();
332
+ }
333
+ }
334
+ async linkCore(fromRef, toRef, typeInput) {
181
335
  await this.init();
182
- const from = await this.read(fromMemoryId);
183
- const to = await this.read(toMemoryId);
336
+ const from = await this.resolveMemoryRef(fromRef);
337
+ const to = await this.resolveMemoryRef(toRef);
184
338
  const type = normalizeLinkType(typeInput);
185
339
  const frontmatter = normalizeMemoryFrontmatter({
186
340
  project: from.project_name,
@@ -192,9 +346,10 @@ export class AugmentService {
192
346
  updated_at: new Date().toISOString(),
193
347
  });
194
348
  await writeMemory(this.config.memoryRoot, from.relative_path, frontmatter, from.body);
349
+ this.recordSelfWrite(from.relative_path);
195
350
  const parsed = await readMemory(this.config.memoryRoot, from.relative_path);
196
- await this.db.upsertMemory(parsed);
197
- await this.db.rebuildLinks();
351
+ const record = await this.db.upsertMemory(parsed);
352
+ await this.db.rebuildLinksForMemory(record);
198
353
  const links = await this.db.listLinks(from.id);
199
354
  const link = links.find((candidate) => candidate.to_memory_id === to.id && candidate.type === type);
200
355
  if (!link) {
@@ -210,6 +365,14 @@ export class AugmentService {
210
365
  return this.db.listLinks(memoryId);
211
366
  }
212
367
  async unlink(linkId) {
368
+ try {
369
+ return await this.unlinkCore(linkId);
370
+ }
371
+ finally {
372
+ this.invalidateCorpusSnapshot();
373
+ }
374
+ }
375
+ async unlinkCore(linkId) {
213
376
  await this.init();
214
377
  const link = await this.db.getLinkById(linkId);
215
378
  if (!link) {
@@ -226,25 +389,69 @@ export class AugmentService {
226
389
  updated_at: new Date().toISOString(),
227
390
  });
228
391
  await writeMemory(this.config.memoryRoot, from.relative_path, frontmatter, from.body);
392
+ this.recordSelfWrite(from.relative_path);
229
393
  const parsed = await readMemory(this.config.memoryRoot, from.relative_path);
230
- await this.db.upsertMemory(parsed);
231
- await this.db.rebuildLinks();
394
+ const record = await this.db.upsertMemory(parsed);
395
+ await this.db.rebuildLinksForMemory(record);
232
396
  return { text: `removed link ${linkId}` };
233
397
  }
398
+ invalidateCorpusSnapshot() {
399
+ this.corpusPromise = undefined;
400
+ }
401
+ corpus() {
402
+ if (!this.corpusPromise) {
403
+ const build = (async () => ({
404
+ memories: await this.db.listMemories(),
405
+ embeddings: await this.db.getAllEmbeddings(),
406
+ links: await this.db.getAllLinks(),
407
+ }))();
408
+ this.corpusPromise = build;
409
+ // A failed build must not stay cached as the corpus.
410
+ build.catch(() => {
411
+ if (this.corpusPromise === build) {
412
+ this.corpusPromise = undefined;
413
+ }
414
+ });
415
+ }
416
+ return this.corpusPromise;
417
+ }
418
+ /** Query vectors depend only on the query text and the (process-pinned) model,
419
+ * so unlike the corpus snapshot they never need invalidating on writes. */
420
+ async embedQuery(query) {
421
+ const cached = this.queryEmbeddingCache.get(query);
422
+ if (cached) {
423
+ this.queryEmbeddingCache.delete(query);
424
+ this.queryEmbeddingCache.set(query, cached);
425
+ return cached;
426
+ }
427
+ const vector = await this.embeddingProvider.embed(query).catch(() => undefined);
428
+ if (vector) {
429
+ this.queryEmbeddingCache.set(query, vector);
430
+ if (this.queryEmbeddingCache.size > QUERY_EMBEDDING_CACHE_MAX) {
431
+ const oldest = this.queryEmbeddingCache.keys().next().value;
432
+ if (oldest !== undefined) {
433
+ this.queryEmbeddingCache.delete(oldest);
434
+ }
435
+ }
436
+ }
437
+ return vector;
438
+ }
234
439
  async search(input) {
235
440
  await this.init();
236
441
  const limit = input.limit ?? DEFAULT_SEARCH_LIMIT;
237
442
  const maxChars = input.max_chars ?? DEFAULT_SEARCH_MAX_CHARS;
238
443
  const minScore = clamp01(input.min_score ?? DEFAULT_SEARCH_MIN_SCORE);
239
444
  const includeLinked = input.include_linked ?? true;
240
- const memories = (await this.db.listMemories()).filter((memory) => !input.kinds || input.kinds.includes(memory.kind));
241
- const embeddings = await this.db.getAllEmbeddings();
242
- const queryEmbedding = await this.embeddingProvider.embed(input.query).catch(() => undefined);
243
- const links = includeLinked ? await this.db.getAllLinks() : [];
445
+ const snapshot = await this.corpus();
446
+ const memories = snapshot.memories.filter((memory) => !input.kinds || input.kinds.includes(memory.kind));
447
+ const embeddings = snapshot.embeddings;
448
+ const queryEmbedding = await this.embedQuery(input.query);
449
+ const links = includeLinked ? snapshot.links : [];
450
+ const queryTokens = new Set(tokens(input.query));
244
451
  const direct = new Map();
245
452
  for (const memory of memories) {
246
453
  const semanticScore = queryEmbedding ? normalizedCosine(queryEmbedding, embeddings.get(memory.id)) : 0;
247
- const lexScore = lexicalScore(input.query, searchDocument(memory));
454
+ const lexScore = lexicalScoreWith(queryTokens, searchDocument(memory));
248
455
  const metadataScore = metadataScoreFor(input.project_name, memory);
249
456
  const score = clamp01(semanticScore * 0.55 + lexScore * 0.25 + metadataScore * 0.1);
250
457
  direct.set(memory.id, {
@@ -284,11 +491,39 @@ export class AugmentService {
284
491
  text: renderSearchText(input.query, input.project_name, results, maxChars),
285
492
  };
286
493
  }
494
+ /**
495
+ * READ-ONLY sleep preview: which settled WORK memories WOULD consolidate.
496
+ * Performs zero writes — the actual write-back (`sleep_apply`) is deferred
497
+ * behind the Phase-2 go/no-go and does not exist.
498
+ */
499
+ async sleepCandidates(input = {}, now = Date.now()) {
500
+ await this.init();
501
+ const minCosine = clamp01(input.min_cosine ?? SLEEP_MIN_COSINE);
502
+ const minAgeDays = input.min_age_days ?? SLEEP_MIN_AGE_DAYS;
503
+ const limit = input.limit ?? SLEEP_MAX_CLUSTERS;
504
+ const snapshot = await this.corpus();
505
+ const cutoff = now - minAgeDays * 86_400_000;
506
+ const eligible = snapshot.memories.filter((memory) => memory.kind === "WORK" &&
507
+ (!input.project_name || memory.project_name === input.project_name) &&
508
+ Date.parse(memory.updated_at) <= cutoff);
509
+ const clusters = clusterSleepCandidates({
510
+ memories: eligible,
511
+ embeddings: snapshot.embeddings,
512
+ links: snapshot.links,
513
+ minCosine,
514
+ }).slice(0, limit);
515
+ return {
516
+ clusters,
517
+ eligible: eligible.length,
518
+ text: renderSleepCandidatesText(clusters, eligible.length, minCosine, minAgeDays),
519
+ };
520
+ }
287
521
  async findSimilarMemory(projectId, kind, content) {
288
522
  const candidates = await this.db.listMemoriesForProject(projectId, kind);
523
+ const contentTokens = new Set(tokens(content));
289
524
  let best;
290
525
  for (const memory of candidates) {
291
- const score = lexicalScore(content, memory.body);
526
+ const score = lexicalScoreWith(contentTokens, memory.body);
292
527
  if (!best || score > best.score) {
293
528
  best = { memory, score };
294
529
  }
@@ -331,11 +566,23 @@ function searchDocument(memory) {
331
566
  memory.body,
332
567
  ].join("\n");
333
568
  }
569
+ // Empirically-anchored rescale of cosine similarity into a [0,1] semantic score.
570
+ // The old `(cos+1)/2` assumed cosine spans a symmetric [-1,1], but
571
+ // bge-small-en-v1.5 on raw text does not: measured pairwise cosines cluster in
572
+ // ~[0.33, 1.0] (cross-domain/unrelated ~0.330, same-domain-unrelated ~0.485,
573
+ // paraphrase ~0.882, identical 1.000 -- see constants.ts). Under `(cos+1)/2` an
574
+ // unrelated note already scored ~0.40 from semantics alone, so the relevance
575
+ // floor could never abstain on the real model (Finding 2). Mapping the real band
576
+ // [SEMANTIC_COSINE_BASELINE, SEMANTIC_COSINE_MATCH] onto [0,1] sends cross-domain
577
+ // noise to ~0 while preserving genuine matches near 1. clamp01 keeps the
578
+ // synthetic one-hot providers exact: orthogonal cos 0 -> 0 (abstain), identical
579
+ // cos 1 -> 1 (recall).
334
580
  function normalizedCosine(queryEmbedding, memoryEmbedding) {
335
581
  if (!memoryEmbedding) {
336
582
  return 0;
337
583
  }
338
- return clamp01((cosineSimilarity(queryEmbedding, memoryEmbedding) + 1) / 2);
584
+ const cos = cosineSimilarity(queryEmbedding, memoryEmbedding);
585
+ return clamp01((cos - SEMANTIC_COSINE_BASELINE) / (SEMANTIC_COSINE_MATCH - SEMANTIC_COSINE_BASELINE));
339
586
  }
340
587
  // Marks a result that did not originate in the querying project so the consuming
341
588
  // agent can discount injected memory it didn't author. Because AUGMENT_MEMORY_ROOT
@@ -378,27 +625,40 @@ function linkWeight(type) {
378
625
  return 0.3;
379
626
  }
380
627
  }
628
+ // A truncated body shorter than this carries no usable context — skip the
629
+ // result instead so a smaller one can use the space.
630
+ const MIN_TRUNCATED_BODY_CHARS = 80;
631
+ const TRUNCATION_MARKER = "\n[truncated]";
381
632
  function renderSearchText(query, projectName, results, maxChars) {
382
633
  if (results.length === 0) {
383
634
  return `No memory met the relevance threshold for \`${query}\`. Nothing injected.\n`;
384
635
  }
385
- const parts = [`Relevant memories for \`${query}\`:\n`];
386
- let used = parts[0].length;
387
- for (const result of results) {
636
+ let out = `Relevant memories for \`${query}\`:\n`;
637
+ let rendered = 0;
638
+ for (let index = 0; index < results.length; index += 1) {
639
+ const result = results[index];
388
640
  const memory = result.memory;
389
641
  const provenance = provenanceLabel(projectName, memory.project_name);
390
642
  const linkAnnotation = result.linkedFrom && result.linkType ? ` link:${result.linkType} linked_from:${result.linkedFrom}` : "";
391
- const header = `[memory:${memory.id} kind:${memory.kind} project:${memory.project_name}${provenance} path:${memory.relative_path} score:${result.score.toFixed(2)}${linkAnnotation}]\n`;
392
- const block = `${header}${memory.body.trim()}\n`;
393
- if (used + block.length > maxChars) {
394
- if (parts.length === 1) {
395
- parts.push(`${header}[omitted: memory exceeds max_chars]\n`);
396
- }
397
- break;
643
+ const header = `\n[memory:${memory.id} kind:${memory.kind} project:${memory.project_name}${provenance} path:${memory.relative_path} score:${result.score.toFixed(2)}${linkAnnotation}]\n`;
644
+ const body = memory.body.trim();
645
+ // Fair-share budget: an oversized result may take at most an even split of
646
+ // what remains, so it cannot starve the results ranked below it. Unused
647
+ // share rolls forward to the next result.
648
+ const allowance = Math.floor((maxChars - out.length) / (results.length - index));
649
+ if (header.length + body.length + 1 <= allowance) {
650
+ out += `${header}${body}\n`;
651
+ rendered += 1;
652
+ continue;
653
+ }
654
+ const bodyRoom = allowance - header.length - TRUNCATION_MARKER.length - 1;
655
+ if (bodyRoom >= MIN_TRUNCATED_BODY_CHARS) {
656
+ out += `${header}${body.slice(0, bodyRoom)}${TRUNCATION_MARKER}\n`;
657
+ rendered += 1;
398
658
  }
399
- parts.push(block);
400
- used += block.length;
659
+ // Either way, keep going: a smaller result further down may still fit.
401
660
  }
402
- return parts.join("\n");
661
+ // Nothing carried any body text — inject nothing rather than bare headers.
662
+ return rendered === 0 ? "" : out;
403
663
  }
404
664
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { LinkRecord, MemoryRecord } from "./types.js";
2
+ /**
3
+ * READ-ONLY preview of sleep consolidation (SPEC/sleep-consolidation-work-to-spec-arch):
4
+ * cluster settled WORK memories so a human can eyeball what a future `sleep`
5
+ * pass WOULD fold together. This module mutates nothing and must stay that way
6
+ * until the Phase-2 go/no-go — the write-back (`sleep_apply`) is a separate,
7
+ * gated feature with its own invariant harness.
8
+ *
9
+ * Edges: an existing link of any type, or raw cosine >= minCosine. The
10
+ * threshold is raw cosine, NOT the blended recall score — council 2026-06-30:
11
+ * clustering must use a semantic-only floor above the band where unrelated
12
+ * same-domain memories land (~0.485 raw on bge-small; paraphrase ~0.882).
13
+ * Clusters never span projects: cross-project cosine is indistinguishable from
14
+ * same-project noise and provenance collapses under synthesis.
15
+ */
16
+ export interface SleepClusterMember {
17
+ id: number;
18
+ /** The durable identity — ids churn on index rebuilds, paths do not. */
19
+ relative_path: string;
20
+ name: string;
21
+ updated_at: string;
22
+ size: number;
23
+ }
24
+ export interface SleepCluster {
25
+ project_name: string;
26
+ /** Ordered oldest-first by updated_at. */
27
+ members: SleepClusterMember[];
28
+ /** Mean pairwise raw cosine over member pairs that both have embeddings. */
29
+ mean_cosine: number;
30
+ link_edges: number;
31
+ cosine_edges: number;
32
+ oldest: string;
33
+ newest: string;
34
+ }
35
+ export interface ClusterInput {
36
+ /** Eligible memories (already filtered to kind WORK and settled age). */
37
+ memories: MemoryRecord[];
38
+ embeddings: Map<number, number[]>;
39
+ links: LinkRecord[];
40
+ minCosine: number;
41
+ }
42
+ export declare function clusterSleepCandidates(input: ClusterInput): SleepCluster[];
43
+ export declare function renderSleepCandidatesText(clusters: SleepCluster[], eligible: number, minCosine: number, minAgeDays: number): string;