@seanhogg/builderforce-memory-mcp 2026.10.3 → 2026.10.23

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 (72) hide show
  1. package/README.md +22 -5
  2. package/dist/backend.d.ts +26 -0
  3. package/dist/backend.d.ts.map +1 -1
  4. package/dist/backends/memory-store.d.ts +50 -2
  5. package/dist/backends/memory-store.d.ts.map +1 -1
  6. package/dist/backends/memory-store.js +88 -10
  7. package/dist/backends/memory-store.js.map +1 -1
  8. package/dist/bin/http.js +7 -1
  9. package/dist/bin/http.js.map +1 -1
  10. package/dist/bin/install.js +6 -3
  11. package/dist/bin/install.js.map +1 -1
  12. package/dist/bin/stdio.d.ts +9 -4
  13. package/dist/bin/stdio.d.ts.map +1 -1
  14. package/dist/bin/stdio.js +20 -5
  15. package/dist/bin/stdio.js.map +1 -1
  16. package/dist/compaction-tools.d.ts +15 -0
  17. package/dist/compaction-tools.d.ts.map +1 -0
  18. package/dist/compaction-tools.js +192 -0
  19. package/dist/compaction-tools.js.map +1 -0
  20. package/dist/compaction.d.ts +114 -8
  21. package/dist/compaction.d.ts.map +1 -1
  22. package/dist/compaction.js +161 -7
  23. package/dist/compaction.js.map +1 -1
  24. package/dist/index.d.ts +13 -6
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +11 -7
  27. package/dist/index.js.map +1 -1
  28. package/dist/install/claude-hooks.d.ts +5 -0
  29. package/dist/install/claude-hooks.d.ts.map +1 -1
  30. package/dist/install/claude-hooks.js +99 -13
  31. package/dist/install/claude-hooks.js.map +1 -1
  32. package/dist/install/server-spec.d.ts +33 -7
  33. package/dist/install/server-spec.d.ts.map +1 -1
  34. package/dist/install/server-spec.js +59 -9
  35. package/dist/install/server-spec.js.map +1 -1
  36. package/dist/model/recall-probe.d.ts +29 -0
  37. package/dist/model/recall-probe.d.ts.map +1 -0
  38. package/dist/model/recall-probe.js +72 -0
  39. package/dist/model/recall-probe.js.map +1 -0
  40. package/dist/persistence/fact-archive.d.ts +47 -0
  41. package/dist/persistence/fact-archive.d.ts.map +1 -0
  42. package/dist/persistence/fact-archive.js +85 -0
  43. package/dist/persistence/fact-archive.js.map +1 -0
  44. package/dist/persistence/shared-json-file.d.ts +24 -1
  45. package/dist/persistence/shared-json-file.d.ts.map +1 -1
  46. package/dist/persistence/shared-json-file.js +46 -1
  47. package/dist/persistence/shared-json-file.js.map +1 -1
  48. package/dist/restore.d.ts +56 -0
  49. package/dist/restore.d.ts.map +1 -0
  50. package/dist/restore.js +118 -0
  51. package/dist/restore.js.map +1 -0
  52. package/dist/tools.d.ts +13 -0
  53. package/dist/tools.d.ts.map +1 -1
  54. package/dist/tools.js +11 -90
  55. package/dist/tools.js.map +1 -1
  56. package/package.json +6 -6
  57. package/server.json +2 -2
  58. package/src/backend.ts +29 -0
  59. package/src/backends/memory-store.ts +141 -11
  60. package/src/bin/http.ts +7 -1
  61. package/src/bin/install.ts +7 -3
  62. package/src/bin/stdio.ts +20 -5
  63. package/src/compaction-tools.ts +206 -0
  64. package/src/compaction.ts +228 -9
  65. package/src/index.ts +55 -10
  66. package/src/install/claude-hooks.ts +102 -13
  67. package/src/install/server-spec.ts +74 -8
  68. package/src/model/recall-probe.ts +81 -0
  69. package/src/persistence/fact-archive.ts +101 -0
  70. package/src/persistence/shared-json-file.ts +54 -1
  71. package/src/restore.ts +144 -0
  72. package/src/tools.ts +24 -93
package/README.md CHANGED
@@ -20,9 +20,14 @@ your whole memory file into every prompt. That only pays off if recall is
20
20
  - `memory_recall` returns a **ranked top-K** (default 5, hard-capped), never the store.
21
21
  - Each entry's content is **truncated** (default 500 chars) before it hits context.
22
22
  - There is **no "return everything" tool** — a dump-all is more expensive than inlining.
23
- - `memory_compact` shrinks a fact that something durable has already ABSORBED down to a
24
- one-line pointer stub, so it stops being recalled in full. It writes **through the live
25
- store**, which is what keeps memory and the on-disk snapshot in agreement — see below.
23
+ - `memory_compact` shrinks a fact the local Evermind has already ABSORBED down to a
24
+ one-line pointer stub, so it stops filling context. It is **lossless**: a recall probe
25
+ must pass first, and the original is archived (recall still returns it) — see below.
26
+ It writes **through the live store**, which keeps memory and the on-disk snapshot in
27
+ agreement.
28
+ - Recall ranks by hybrid fusion (BM25 ⊕ optional CPU SSM embedding, RRF, MMR) and then
29
+ weights by importance (×(0.5+importance)) and a 90-day half-life recency decay —
30
+ `createLocalMemoryStoreBackend({ ranking: false })` turns the signals off.
26
31
 
27
32
  Tool descriptions are prescriptive ("call this *before* answering when…") because
28
33
  recent Claude models reach for tools more conservatively; the trigger condition in
@@ -153,7 +158,9 @@ npx -y -p @seanhogg/builderforce-memory-mcp builderforce-memory-install --host=c
153
158
  Writes the stdio server entry into each host's own config, idempotently and with
154
159
  `.bak` backups. Supported hosts: **Claude Code, Claude Desktop, Cursor, Windsurf,
155
160
  VS Code, Cline, Gemini CLI, Codex CLI**. Every agent points at one shared store
156
- (`~/.builderforce-memory/memory.json` by default, override with `--memory-file`),
161
+ (`resolveMemoryFile()`: `~/.builderforce-memory/memory.json`, or the legacy
162
+ `~/.claude/builderforce-memory/memory.json` when that is where the live store is; override
163
+ with `--memory-file` / `BUILDERFORCE_MEMORY_FILE`; the hook script resolves the same way),
157
164
  so a fact remembered in one agent is recalled in another. `--readonly` drops the
158
165
  write tools; `--local=<dist/bin/stdio.js>` runs a checkout for development.
159
166
 
@@ -230,7 +237,17 @@ const server = await createMemoryMcpServer(remote);
230
237
 
231
238
  ## Compaction rules (`@seanhogg/builderforce-memory-mcp/compaction`)
232
239
 
233
- The stub format that `memory_compact` writes (`[absorbed→Evermind vN] <first line>`) is published as a dependency-free subpath. An external compactor imports `planCompaction`, `memoryStub` and `isStub` from it, so its stubs are byte-identical to the server's and neither re-stubs the other.
240
+ The stub format that `memory_compact` writes (`[absorbed→Evermind vN] <first line>`) is published as a dependency-free subpath. An external compactor imports its rules from it, so its stubs are byte-identical to the server's and neither re-stubs the other.
241
+
242
+ **Lossless contract** (what every compactor must do, in order):
243
+
244
+ 1. `planLosslessCompaction(candidates, { probe, version })` — the structural rules (`planCompaction`: skip stubs, never grow an entry) **plus a recall probe**: `probeQuestionFor(key, content)` blanks the fact's most identifying token and the local Evermind must supply it (`probePasses`). No probe, or a wrong answer, leaves the fact uncompacted (`no_probe` / `probe_failed`).
245
+ 2. Archive every write's `archive` row (`mergeArchive` into `defaultArchiveFile(memoryFile)` → `memory.archive.json`) — durably, **before** any stub is written. The archive sits outside the snapshot, is only merged into and never pruned, so it survives snapshot rewrites, `forget`, and the 10,000-entry cap.
246
+ 3. Write the stubs.
247
+
248
+ Reads resolve a stub to its archived original (`RecallHit.content` = full text, `RecallHit.stub` = the stored stub). A stub with **no** archive is `contentLost`: tools and the Claude Code hooks label it `CONTENT_LOST_LABEL` — *"(content lost — re-verify before relying on it)"* — and the hooks importance-demote it. `memory_restore` (`file` on the stdio bin, inline `json` everywhere) brings the text back from `[{key, content}]` or the Evermind coordinator's `[{id, text}]` `mem:` dump: matched by key (an `id` loses its `mem:` prefix), else uniquely by first line against the stub's pointer; the text is archived beside the stub, so the token saving stays.
249
+
250
+ Every overwrite of a shared store file (`SharedJsonFile`: the snapshot, the archive, `experience.json`) first rotates the previous version into `<file>.bak.1` … `.bak.3`.
234
251
 
235
252
  ## Dependencies
236
253
 
package/dist/backend.d.ts CHANGED
@@ -7,6 +7,7 @@
7
7
  * networked builderforce.ai adapter later with zero changes to the tools or
8
8
  * transports.
9
9
  */
10
+ import type { ArchivedFact } from "./compaction.js";
10
11
  /** A single recalled memory, normalised across backends. */
11
12
  export interface RecallHit {
12
13
  /** Stable identifier for the memory. */
@@ -25,6 +26,18 @@ export interface RecallHit {
25
26
  importance?: number;
26
27
  /** Unix-ms write time. */
27
28
  timestamp?: number;
29
+ /**
30
+ * Set when the stored body is a compaction stub that was resolved to its
31
+ * archived original: `content` is then the FULL original and this is the stub
32
+ * actually stored. Absent for an ordinary (uncompacted) memory.
33
+ */
34
+ stub?: string;
35
+ /**
36
+ * True when the stored body is a compaction stub with NO archived original — the
37
+ * text is gone and only the one-line pointer remains. Readers must label it
38
+ * (`CONTENT_LOST_LABEL`) and treat it as unverified; `memory_restore` clears it.
39
+ */
40
+ contentLost?: boolean;
28
41
  }
29
42
  /**
30
43
  * Which ranker produced a recall ordering.
@@ -88,5 +101,18 @@ export interface MemoryBackend {
88
101
  rememberMany?(inputs: RememberInput[]): Promise<void>;
89
102
  /** Delete a memory by key. Optional — read-only backends omit it. */
90
103
  forget?(key: string): Promise<void>;
104
+ /**
105
+ * Durably store the full originals of facts about to be compacted. Optional —
106
+ * but `memory_compact` stubs NOTHING on a backend without it, because a stub
107
+ * whose original was never kept is lost content. Must be durable before it
108
+ * resolves: the compactor writes the stubs only afterwards.
109
+ */
110
+ archive?(facts: ArchivedFact[]): Promise<void>;
111
+ /**
112
+ * Keys whose stored body is a compaction stub with no archived original
113
+ * (`contentLost`). Optional; `memory_restore` uses it to match restore records
114
+ * by text, and falls back to key-only matching without it.
115
+ */
116
+ lostKeys?(): Promise<string[]>;
91
117
  }
92
118
  //# sourceMappingURL=backend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,4DAA4D;AAC5D,MAAM,WAAW,SAAS;IACtB,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAEnD,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACxB;AAED,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC1B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE1D;;;;;;;;OAQG;IACH,YAAY,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAElE,qEAAqE;IACrE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAEjD,iEAAiE;IACjE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE9D,0EAA0E;IAC1E,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;;;;;OAOG;IACH,YAAY,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD,qEAAqE;IACrE,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,4DAA4D;AAC5D,MAAM,WAAW,SAAS;IACtB,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAEnD,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACxB;AAED,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC1B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE1D;;;;;;;;OAQG;IACH,YAAY,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAElE,qEAAqE;IACrE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAEjD,iEAAiE;IACjE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE9D,0EAA0E;IAC1E,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;;;;;OAOG;IACH,YAAY,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD,qEAAqE;IACrE,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC;;;;;OAKG;IACH,OAAO,CAAC,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;;OAIG;IACH,QAAQ,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAClC"}
@@ -12,8 +12,18 @@
12
12
  * The embedder does NOT have to be a GPU runtime: `EvermindTextEmbedder` from the
13
13
  * engine is a pure-CPU `EvermindLM`, which is what lets the headless stdio server
14
14
  * rank recall semantically (see ./evermind-embedder.ts).
15
+ *
16
+ * Ranking signals: recall also weights each fused score by the fact's importance
17
+ * (x(0.5+importance), the cloud recall's factor) and a half-life recency decay —
18
+ * both ON by default here ({@link DEFAULT_RECALL_RANKING}).
19
+ *
20
+ * Compaction stubs: a stored body that is an `[absorbed→Evermind …]` stub is
21
+ * resolved to its ARCHIVED original (../persistence/fact-archive.ts) on every read,
22
+ * so recall returns the full text; a stub with no archive is flagged `contentLost`.
15
23
  */
16
24
  import type { MemoryBackend, RankedRecall, RecallHit, RememberInput } from "../backend.js";
25
+ import { type ArchivedFact } from "../compaction.js";
26
+ import { type FactArchive } from "../persistence/fact-archive.js";
17
27
  interface MemoryEntryLike {
18
28
  key: string;
19
29
  content: string;
@@ -21,17 +31,30 @@ interface MemoryEntryLike {
21
31
  tags?: string[];
22
32
  importance?: number;
23
33
  }
34
+ /**
35
+ * Recall ranking signals — the subset of the store's `HybridRetrieveOptions` this
36
+ * backend sets. Structural, so this package needs no type import from the runtime.
37
+ */
38
+ export interface RecallRanking {
39
+ /** Weight each fused score by `0.5 + importance`. */
40
+ importanceWeight?: boolean;
41
+ /** Half-life (days) of the recency decay over each fact's write time; 0 = off. */
42
+ recencyHalfLifeDays?: number;
43
+ }
44
+ /** Recall ranking defaults: importance ON, 90-day half-life recency decay ON. */
45
+ export declare const DEFAULT_RECALL_RANKING: Readonly<Required<RecallRanking>>;
24
46
  interface MemoryStoreLike {
25
47
  remember(key: string, content: string, opts?: {
26
48
  ttlMs?: number;
27
49
  tags?: string[];
28
50
  importance?: number;
51
+ timestamp?: number;
29
52
  }): Promise<void>;
30
53
  recall(key: string): Promise<MemoryEntryLike | undefined>;
31
54
  recallAll(): Promise<MemoryEntryLike[]>;
32
55
  recallByTag(tag: string): Promise<MemoryEntryLike[]>;
33
56
  /** Hybrid (dense⊕BM25) recall with each hit's fused score and the ranker used. */
34
- recallRanked(query: string, topK: number, runtime?: unknown): Promise<{
57
+ recallRanked(query: string, topK: number, runtime?: unknown, opts?: RecallRanking): Promise<{
35
58
  hits: Array<{
36
59
  entry: MemoryEntryLike;
37
60
  score: number;
@@ -40,18 +63,31 @@ interface MemoryStoreLike {
40
63
  }>;
41
64
  forget(key: string): Promise<void>;
42
65
  }
66
+ export interface MemoryStoreBackendOptions {
67
+ /** Where compacted originals are kept. Default: an in-process archive. */
68
+ archive?: FactArchive;
69
+ /** Recall ranking signals. Default {@link DEFAULT_RECALL_RANKING}; `false` = fusion alone. */
70
+ ranking?: RecallRanking | false;
71
+ }
43
72
  export declare class MemoryStoreBackend implements MemoryBackend {
44
73
  private readonly store;
45
74
  /** Optional SSMRuntime; enables embedding-based recall when present. */
46
75
  private readonly runtime?;
76
+ private readonly facts;
77
+ private readonly ranking;
47
78
  constructor(store: MemoryStoreLike,
48
79
  /** Optional SSMRuntime; enables embedding-based recall when present. */
49
- runtime?: unknown | undefined);
80
+ runtime?: unknown | undefined, opts?: MemoryStoreBackendOptions);
50
81
  /** Plain recall — {@link recallRanked} with the ranker's name dropped. ONE path. */
51
82
  recall(query: string, topK: number): Promise<RecallHit[]>;
52
83
  recallRanked(query: string, topK: number): Promise<RankedRecall>;
53
84
  get(key: string): Promise<RecallHit | undefined>;
54
85
  recallByTag(tag: string, limit: number): Promise<RecallHit[]>;
86
+ archive(facts: ArchivedFact[]): Promise<void>;
87
+ /** Keys whose stored body is a stub with no archived original. */
88
+ lostKeys(): Promise<string[]>;
89
+ /** Every archived row, read once — the snapshot writer's `contentLost` source. */
90
+ archivedRows(): Readonly<Record<string, ArchivedFact>>;
55
91
  remember(input: RememberInput): Promise<void>;
56
92
  /** The store has no batch write; sequencing here keeps ONE definition of a write. */
57
93
  rememberMany(inputs: RememberInput[]): Promise<void>;
@@ -103,6 +139,18 @@ export interface LocalBackendOptions {
103
139
  * when `BUILDERFORCE_MEMORY_MODEL` is set, so this is mostly for tests.
104
140
  */
105
141
  semanticRecall?: false;
142
+ /**
143
+ * Recall ranking signals (importance weighting, half-life recency decay).
144
+ * Default {@link DEFAULT_RECALL_RANKING} — both on; `false` ranks by fusion alone.
145
+ */
146
+ ranking?: RecallRanking | false;
147
+ /**
148
+ * Where compacted originals are archived. Default: beside `persistFile`
149
+ * (`memory.archive.json`) when there is one, else in-process.
150
+ */
151
+ archiveFile?: string;
152
+ /** Diagnostic sink (stderr by default — stdout is the MCP stdio channel). */
153
+ log?: (line: string) => void;
106
154
  }
107
155
  /**
108
156
  * Default cap on locally-stored facts. Large enough that a normal workspace never
@@ -1 +1 @@
1
- {"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/backends/memory-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/backends/memory-store.ts"],"names":[],"mappings":"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"}
@@ -12,11 +12,31 @@
12
12
  * The embedder does NOT have to be a GPU runtime: `EvermindTextEmbedder` from the
13
13
  * engine is a pure-CPU `EvermindLM`, which is what lets the headless stdio server
14
14
  * rank recall semantically (see ./evermind-embedder.ts).
15
+ *
16
+ * Ranking signals: recall also weights each fused score by the fact's importance
17
+ * (x(0.5+importance), the cloud recall's factor) and a half-life recency decay —
18
+ * both ON by default here ({@link DEFAULT_RECALL_RANKING}).
19
+ *
20
+ * Compaction stubs: a stored body that is an `[absorbed→Evermind …]` stub is
21
+ * resolved to its ARCHIVED original (../persistence/fact-archive.ts) on every read,
22
+ * so recall returns the full text; a stub with no archive is flagged `contentLost`.
15
23
  */
24
+ import { defaultArchiveFile, isContentLost, isStub } from "../compaction.js";
16
25
  import { dynamicImport } from "../dynamic-import.js";
26
+ import { FileFactArchive, MemoryFactArchive } from "../persistence/fact-archive.js";
17
27
  import { SharedJsonFile } from "../persistence/shared-json-file.js";
18
- function toHit(e, score) {
19
- return {
28
+ /** Recall ranking defaults: importance ON, 90-day half-life recency decay ON. */
29
+ export const DEFAULT_RECALL_RANKING = Object.freeze({
30
+ importanceWeight: true,
31
+ recencyHalfLifeDays: 90,
32
+ });
33
+ /**
34
+ * Normalise a stored entry into a hit, resolving a compaction stub: with an archived
35
+ * original the hit carries the FULL text (and the stored stub in `stub`); without one
36
+ * it keeps the stub and is flagged `contentLost`.
37
+ */
38
+ function toHit(e, archived, score) {
39
+ const base = {
20
40
  key: e.key,
21
41
  content: e.content,
22
42
  ...(score === undefined ? {} : { score }),
@@ -24,31 +44,54 @@ function toHit(e, score) {
24
44
  importance: e.importance,
25
45
  timestamp: e.timestamp,
26
46
  };
47
+ if (!isStub(e.content))
48
+ return base;
49
+ if (archived)
50
+ return { ...base, content: archived.content, stub: e.content };
51
+ return { ...base, contentLost: true };
27
52
  }
28
53
  export class MemoryStoreBackend {
29
54
  store;
30
55
  runtime;
56
+ facts;
57
+ ranking;
31
58
  constructor(store,
32
59
  /** Optional SSMRuntime; enables embedding-based recall when present. */
33
- runtime) {
60
+ runtime, opts = {}) {
34
61
  this.store = store;
35
62
  this.runtime = runtime;
63
+ this.facts = opts.archive ?? new MemoryFactArchive();
64
+ this.ranking = opts.ranking === false ? undefined : { ...DEFAULT_RECALL_RANKING, ...opts.ranking };
36
65
  }
37
66
  /** Plain recall — {@link recallRanked} with the ranker's name dropped. ONE path. */
38
67
  async recall(query, topK) {
39
68
  return (await this.recallRanked(query, topK)).hits;
40
69
  }
41
70
  async recallRanked(query, topK) {
42
- const ranked = await this.store.recallRanked(query, topK, this.runtime);
43
- return { hits: ranked.hits.map((h) => toHit(h.entry, h.score)), method: ranked.method };
71
+ const ranked = await this.store.recallRanked(query, topK, this.runtime, this.ranking);
72
+ const rows = this.facts.all();
73
+ return { hits: ranked.hits.map((h) => toHit(h.entry, rows[h.entry.key], h.score)), method: ranked.method };
44
74
  }
45
75
  async get(key) {
46
76
  const e = await this.store.recall(key);
47
- return e ? toHit(e) : undefined;
77
+ return e ? toHit(e, this.facts.get(key)) : undefined;
48
78
  }
49
79
  async recallByTag(tag, limit) {
50
80
  const entries = await this.store.recallByTag(tag);
51
- return entries.slice(0, limit).map(toHit);
81
+ const rows = this.facts.all();
82
+ return entries.slice(0, limit).map((e) => toHit(e, rows[e.key]));
83
+ }
84
+ async archive(facts) {
85
+ this.facts.putMany(facts);
86
+ }
87
+ /** Keys whose stored body is a stub with no archived original. */
88
+ async lostKeys() {
89
+ const rows = this.facts.all();
90
+ return (await this.store.recallAll()).filter((e) => isContentLost(e.content, rows[e.key])).map((e) => e.key);
91
+ }
92
+ /** Every archived row, read once — the snapshot writer's `contentLost` source. */
93
+ archivedRows() {
94
+ return this.facts.all();
52
95
  }
53
96
  async remember(input) {
54
97
  await this.store.remember(input.key, input.content, {
@@ -176,16 +219,39 @@ class DiskPersistedBackend {
176
219
  await this.store.forget(existing.key);
177
220
  }
178
221
  for (const raw of entries) {
179
- await this.store.remember(raw.key, raw.content, { tags: raw.tags, importance: raw.importance });
222
+ await this.store.remember(raw.key, raw.content, {
223
+ tags: raw.tags,
224
+ importance: raw.importance,
225
+ ...(typeof raw.timestamp === "number" && Number.isFinite(raw.timestamp) ? { timestamp: raw.timestamp } : {}),
226
+ });
180
227
  }
181
228
  }
229
+ /**
230
+ * Archive first — durable before the caller writes the stubs. When the rows
231
+ * RESTORE lost stubs (memory_restore), the snapshot is rewritten too, so its
232
+ * derived `contentLost` flags stop naming them.
233
+ */
234
+ async archive(facts) {
235
+ await this.ensureFresh();
236
+ const lostBefore = new Set(await this.inner.lostKeys());
237
+ await this.inner.archive(facts);
238
+ if (facts.some((f) => lostBefore.has(f.key)))
239
+ await this.snapshot();
240
+ }
241
+ async lostKeys() {
242
+ await this.ensureFresh();
243
+ return this.inner.lostKeys();
244
+ }
182
245
  async snapshot() {
183
246
  const entries = await this.store.recallAll();
247
+ const rows = this.inner.archivedRows();
184
248
  const out = entries.map((e) => ({
185
249
  key: e.key,
186
250
  content: e.content,
187
251
  tags: e.tags,
188
252
  importance: e.importance,
253
+ timestamp: e.timestamp,
254
+ ...(isContentLost(e.content, rows[e.key]) ? { contentLost: true } : {}),
189
255
  }));
190
256
  this.file.write(JSON.stringify(out, null, 2));
191
257
  }
@@ -223,9 +289,9 @@ export async function createLocalMemoryStoreBackend(opts = {}) {
223
289
  })) ?? undefined;
224
290
  }
225
291
  const store = new MemoryStore({ idbFactory, dbName: opts.dbName, maxEntries });
226
- const backend = new MemoryStoreBackend(store, runtime);
292
+ const log = opts.log ?? ((line) => void globalThis.process?.stderr?.write(`${line}\n`));
227
293
  if (!opts.persistFile)
228
- return backend;
294
+ return new MemoryStoreBackend(store, runtime, { ranking: opts.ranking });
229
295
  // Disk-mirror requested. node:fs/path are loaded indirectly so a browser
230
296
  // bundle of this module never statically pulls in Node builtins.
231
297
  const fs = (await dynamicImport("node:fs"));
@@ -233,9 +299,21 @@ export async function createLocalMemoryStoreBackend(opts = {}) {
233
299
  const dir = path.dirname(opts.persistFile);
234
300
  if (dir && !fs.existsSync(dir))
235
301
  fs.mkdirSync(dir, { recursive: true });
302
+ // The archive sits beside the snapshot, OUTSIDE it: it must survive the snapshot
303
+ // being rebuilt, rewritten by another process, or capped — see fact-archive.ts.
304
+ const archive = new FileFactArchive(opts.archiveFile ?? defaultArchiveFile(opts.persistFile), fs);
305
+ const backend = new MemoryStoreBackend(store, runtime, { archive, ranking: opts.ranking });
236
306
  const persisted = new DiskPersistedBackend(backend, store, new SharedJsonFile(opts.persistFile, fs));
237
307
  // Boot hydration IS the freshness check with no stamp yet — see ensureFresh().
238
308
  await persisted.ensureFresh();
309
+ // Facts compacted before archiving existed are stubs whose text is gone. Every
310
+ // read flags them `contentLost` (and so does the next snapshot); say so once at
311
+ // boot so the loss is visible, with the way back.
312
+ const lost = await persisted.lostKeys();
313
+ if (lost.length > 0) {
314
+ log(`[builderforce-memory] ${lost.length} memory(ies) are compaction stubs with no archived original ` +
315
+ `(content lost — re-verify before relying on them). Recover the text with memory_restore.`);
316
+ }
239
317
  return persisted;
240
318
  }
241
319
  //# sourceMappingURL=memory-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/backends/memory-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/backends/memory-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,EAAqB,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAoB,MAAM,gCAAgC,CAAC;AACtG,OAAO,EAAE,cAAc,EAAqB,MAAM,oCAAoC,CAAC;AAuBvF,iFAAiF;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAAsC,MAAM,CAAC,MAAM,CAAC;IACnF,gBAAgB,EAAE,IAAI;IACtB,mBAAmB,EAAE,EAAE;CAC1B,CAAC,CAAC;AAqBH;;;;GAIG;AACH,SAAS,KAAK,CAAC,CAAkB,EAAE,QAAkC,EAAE,KAAc;IACjF,MAAM,IAAI,GAAc;QACpB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACzC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,SAAS,EAAE,CAAC,CAAC,SAAS;KACzB,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,QAAQ;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7E,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AASD,MAAM,OAAO,kBAAkB;IAKN;IAEA;IANJ,KAAK,CAAc;IACnB,OAAO,CAA4B;IAEpD,YACqB,KAAsB;IACvC,wEAAwE;IACvD,OAAiB,EAClC,OAAkC,EAAE;QAHnB,UAAK,GAAL,KAAK,CAAiB;QAEtB,YAAO,GAAP,OAAO,CAAU;QAGlC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,sBAAsB,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACvG,CAAC;IAED,oFAAoF;IACpF,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAAY;QACpC,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,IAAY;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC/G,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACjB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAW,EAAE,KAAa;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAqB;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,QAAQ;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjH,CAAC;IAED,kFAAkF;IAClF,YAAY;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAoB;QAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE;YAChD,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC/B,CAAC,CAAC;IACP,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,YAAY,CAAC,MAAuB;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACpB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;CACJ;AA8DD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAqB1C,+EAA+E;AAC/E,SAAS,aAAa,CAAC,IAAY;IAC/B,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAQ,MAA0B,CAAC,MAAM,CACrC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CACnF,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,oBAAoB;IAED;IACA;IACA;IAHrB,YACqB,KAAyB,EACzB,KAAsB,EACtB,IAAoB;QAFpB,UAAK,GAAL,KAAK,CAAoB;QACzB,UAAK,GAAL,KAAK,CAAiB;QACtB,SAAI,GAAJ,IAAI,CAAgB;IACtC,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAAY;QACpC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,IAAY;QAC1C,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,GAAW;QACjB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,CAAC,WAAW,CAAC,GAAW,EAAE,KAAa;QACxC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAoB;QAC/B,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,iGAAiG;IACjG,KAAK,CAAC,YAAY,CAAC,MAAuB;QACtC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACpB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5C,yEAAyE;QACzE,2EAA2E;QAC3E,kBAAkB;QAClB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,YAAY,CAAC,OAAwB;QAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,KAAK,MAAM,QAAQ,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE;gBAC5C,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,GAAG,CAAC,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/G,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,KAAqB;QAC/B,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,QAAQ;QAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAoB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7C,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnF,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;CACJ;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,OAA4B,EAAE;IAC9E,MAAM,SAAS,GAAG,CAAC,MAAM,aAAa,CAAC,+BAA+B,CAAC,CAAyD,CAAC;IACjI,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;IAElC,4EAA4E;IAC5E,IAAI,UAAmB,CAAC;IACxB,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,aAAa,CAAC,gBAAgB,CAAC,CAAsC,CAAC;QAC1F,UAAU,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACL,6EAA6E;IACjF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAE1D,+EAA+E;IAC/E,+EAA+E;IAC/E,6EAA6E;IAC7E,8EAA8E;IAC9E,uEAAuE;IACvE,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC3B,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACpD,OAAO;YACH,CAAC,MAAM,KAAK,CAAC,oBAAoB,CAAC;gBAC9B,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE;aACpD,CAAC,CAAC,IAAI,SAAS,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;IAEhG,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAEhG,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,EAAE,GAAG,CAAC,MAAM,aAAa,CAAC,SAAS,CAAC,CAAW,CAAC;IACtD,MAAM,IAAI,GAAG,CAAC,MAAM,aAAa,CAAC,WAAW,CAAC,CAAa,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvE,iFAAiF;IACjF,gFAAgF;IAChF,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,IAAI,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;IAClG,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3F,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IACrG,+EAA+E;IAC/E,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;IAE9B,+EAA+E;IAC/E,gFAAgF;IAChF,kDAAkD;IAClD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,GAAG,CACC,yBAAyB,IAAI,CAAC,MAAM,8DAA8D;YAC9F,0FAA0F,CACjG,CAAC;IACN,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC"}
package/dist/bin/http.js CHANGED
@@ -23,8 +23,11 @@ import { createLocalMemoryStoreBackend } from "../backends/memory-store.js";
23
23
  import { createRecallEmbedder } from "../embedding/index.js";
24
24
  import { createExperienceHost } from "../experience/host.js";
25
25
  import { resolveMemoryFile } from "../install/server-spec.js";
26
+ import { lazyRecallProbe } from "../model/recall-probe.js";
26
27
  import { createMemoryHttpHandler } from "../transports/http.js";
27
- const memoryFile = resolveMemoryFile();
28
+ const memoryFile = resolveMemoryFile(process.env, undefined, {
29
+ log: (line) => void process.stderr.write(`${line}\n`),
30
+ });
28
31
  const backend = await createLocalMemoryStoreBackend({
29
32
  dbName: process.env["BUILDERFORCE_MEMORY_DB"],
30
33
  // Durable like the stdio bin — without it every restart of this server lost the
@@ -42,6 +45,9 @@ const handler = createMemoryHttpHandler(backend, {
42
45
  gatewayUrl: process.env["BUILDERFORCE_GATEWAY_URL"] ?? "https://api.builderforce.ai",
43
46
  gatewayApiKey: process.env["BUILDERFORCE_API_KEY"],
44
47
  experience: await createExperienceHost({ memoryFile }),
48
+ recallProbe: lazyRecallProbe(),
49
+ // No readRestoreFile: a networked server never reads a caller-named path —
50
+ // memory_restore takes the export inline.
45
51
  });
46
52
  if (process.env["BUILDERFORCE_MEMORY_EXPERIENCE"] === "1" && !process.env["BUILDERFORCE_MEMORY_TOKEN"]) {
47
53
  process.stderr.write("[builderforce-memory-mcp-http] experience tools stay off: they are served only to callers holding BUILDERFORCE_MEMORY_TOKEN\n");
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/bin/http.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;AAEvC,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAC7C,gFAAgF;IAChF,6EAA6E;IAC7E,WAAW,EAAE,UAAU;IACvB,0EAA0E;IAC1E,4CAA4C;IAC5C,OAAO,EAAE,CAAC,MAAM,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,SAAS;CACrE,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,EAAE;IAC7C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IACnD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,KAAK,GAAG;IAC7D,2EAA2E;IAC3E,0EAA0E;IAC1E,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,6BAA6B;IACpF,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAClD,UAAU,EAAE,MAAM,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC;CACzD,CAAC,CAAC;AAEH,IAAI,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,CAAC;IACrG,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,+HAA+H,CAClI,CAAC;AACN,CAAC;AAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;AAEjD,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC3B,KAAK,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACjC,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACjF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,IAAI,IAAI,CAAC,CAAC;AACnF,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/bin/http.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE;IACzD,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;CACxD,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAC7C,gFAAgF;IAChF,6EAA6E;IAC7E,WAAW,EAAE,UAAU;IACvB,0EAA0E;IAC1E,4CAA4C;IAC5C,OAAO,EAAE,CAAC,MAAM,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,SAAS;CACrE,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,EAAE;IAC7C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IACnD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,KAAK,GAAG;IAC7D,2EAA2E;IAC3E,0EAA0E;IAC1E,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,6BAA6B;IACpF,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAClD,UAAU,EAAE,MAAM,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC;IACtD,WAAW,EAAE,eAAe,EAAE;IAC9B,2EAA2E;IAC3E,0CAA0C;CAC7C,CAAC,CAAC;AAEH,IAAI,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,CAAC;IACrG,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,+HAA+H,CAClI,CAAC;AACN,CAAC;AAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;AAEjD,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC3B,KAAK,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACjC,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACjF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,IAAI,IAAI,CAAC,CAAC;AACnF,CAAC,CAAC,CAAC"}
@@ -21,7 +21,7 @@ import nodeFs from "node:fs";
21
21
  import { HOSTS } from "../install/hosts.js";
22
22
  import { installMemoryServer } from "../install/install.js";
23
23
  import { installClaudeCombo } from "../install/claude-hooks.js";
24
- import { defaultMemoryFile } from "../install/server-spec.js";
24
+ import { resolveMemoryFile } from "../install/server-spec.js";
25
25
  function argValue(name) {
26
26
  const hit = process.argv.find((a) => a.startsWith(`--${name}=`));
27
27
  return hit ? hit.slice(name.length + 3) : undefined;
@@ -47,7 +47,10 @@ const hosts = hostArg === undefined || hostArg === "auto"
47
47
  : hostArg === "all"
48
48
  ? "all"
49
49
  : hostArg.split(",").map((s) => s.trim()).filter(Boolean);
50
- const memoryFile = argValue("memory-file") ?? defaultMemoryFile();
50
+ // The SAME resolver the servers and the hook use — so an install on a machine whose
51
+ // live store sits at a legacy location bakes THAT path, not an empty new one.
52
+ const memoryFile = argValue("memory-file") ??
53
+ resolveMemoryFile(process.env, undefined, { log: (line) => process.stderr.write(`${line}\n`) });
51
54
  let results;
52
55
  try {
53
56
  results = installMemoryServer({
@@ -100,6 +103,6 @@ if (results.length === 0) {
100
103
  process.stdout.write("No MCP hosts detected. Pass --host=all to write configs anyway, or --host=cursor (etc.).\n");
101
104
  }
102
105
  else {
103
- process.stdout.write(`\nDone — ${wrote} config(s) written. Store: ${memoryFile}\nRestart the agent(s) to connect. Tools: memory_recall · memory_remember · memory_get · memory_recall_by_tag · memory_forget · memory_compact\n`);
106
+ process.stdout.write(`\nDone — ${wrote} config(s) written. Store: ${memoryFile}\nRestart the agent(s) to connect. Tools: memory_recall · memory_remember · memory_get · memory_recall_by_tag · memory_forget · memory_compact · memory_restore\n`);
104
107
  }
105
108
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/bin/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/bin/install.ts"],"names":[],"mappings":"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"}
@@ -6,15 +6,20 @@
6
6
  * BUILDERFORCE_MEMORY_DB IndexedDB database name (default: MemoryStore default).
7
7
  * BUILDERFORCE_MEMORY_READONLY '1' to disable remember/forget tools.
8
8
  * BUILDERFORCE_MEMORY_FILE Absolute path to a JSON snapshot. Defaults to the
9
- * shared per-machine store (~/.builderforce-memory/
10
- * memory.json) so memory survives the respawn every
11
- * MCP client does between sessions — without a
12
- * snapshot fake-indexeddb loses everything on exit.
9
+ * shared per-machine store — resolveMemoryFile():
10
+ * ~/.builderforce-memory/memory.json, or the legacy
11
+ * ~/.claude/builderforce-memory/memory.json when that
12
+ * is where the live memory.json is — so memory
13
+ * survives the respawn every MCP client does between
14
+ * sessions. Compacted originals are archived beside it
15
+ * (memory.archive.json); each overwrite keeps .bak.1-3.
13
16
  * BUILDERFORCE_MEMORY_MODEL Absolute path to a `.evermind` package (an
14
17
  * `evermind-lm`). When set, recall is ranked by SSM
15
18
  * embedding cosine FUSED with the lexical ranking
16
19
  * instead of lexically alone. Pure CPU — no GPU is
17
20
  * involved; see src/embedding/evermind-embedder.ts.
21
+ * Also the model memory_compact's recall probe asks
22
+ * before stubbing a fact; unset = nothing is compacted.
18
23
  * BUILDERFORCE_MEMORY_TOKENIZER Tokenizer JSON matching that checkpoint. Defaults
19
24
  * to `<model>.tokenizer.json`.
20
25
  * BUILDERFORCE_MEMORY_VECTORS Persistent vector-cache path. Defaults beside the
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/bin/stdio.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG"}
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/bin/stdio.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG"}
package/dist/bin/stdio.js CHANGED
@@ -6,15 +6,20 @@
6
6
  * BUILDERFORCE_MEMORY_DB IndexedDB database name (default: MemoryStore default).
7
7
  * BUILDERFORCE_MEMORY_READONLY '1' to disable remember/forget tools.
8
8
  * BUILDERFORCE_MEMORY_FILE Absolute path to a JSON snapshot. Defaults to the
9
- * shared per-machine store (~/.builderforce-memory/
10
- * memory.json) so memory survives the respawn every
11
- * MCP client does between sessions — without a
12
- * snapshot fake-indexeddb loses everything on exit.
9
+ * shared per-machine store — resolveMemoryFile():
10
+ * ~/.builderforce-memory/memory.json, or the legacy
11
+ * ~/.claude/builderforce-memory/memory.json when that
12
+ * is where the live memory.json is — so memory
13
+ * survives the respawn every MCP client does between
14
+ * sessions. Compacted originals are archived beside it
15
+ * (memory.archive.json); each overwrite keeps .bak.1-3.
13
16
  * BUILDERFORCE_MEMORY_MODEL Absolute path to a `.evermind` package (an
14
17
  * `evermind-lm`). When set, recall is ranked by SSM
15
18
  * embedding cosine FUSED with the lexical ranking
16
19
  * instead of lexically alone. Pure CPU — no GPU is
17
20
  * involved; see src/embedding/evermind-embedder.ts.
21
+ * Also the model memory_compact's recall probe asks
22
+ * before stubbing a fact; unset = nothing is compacted.
18
23
  * BUILDERFORCE_MEMORY_TOKENIZER Tokenizer JSON matching that checkpoint. Defaults
19
24
  * to `<model>.tokenizer.json`.
20
25
  * BUILDERFORCE_MEMORY_VECTORS Persistent vector-cache path. Defaults beside the
@@ -33,10 +38,15 @@
33
38
  */
34
39
  import { createLocalMemoryStoreBackend } from "../backends/memory-store.js";
35
40
  import { createRecallEmbedder } from "../embedding/index.js";
41
+ import { readFile } from "node:fs/promises";
36
42
  import { createExperienceHost } from "../experience/host.js";
37
43
  import { resolveMemoryFile } from "../install/server-spec.js";
44
+ import { lazyRecallProbe } from "../model/recall-probe.js";
38
45
  import { runStdio } from "../transports/stdio.js";
39
- const memoryFile = resolveMemoryFile();
46
+ const log = (line) => void process.stderr.write(`${line}\n`);
47
+ // ONE resolver for installer, servers and hook: env, else whichever location holds
48
+ // the live memory.json (logged when there is a choice), else the canonical default.
49
+ const memoryFile = resolveMemoryFile(process.env, undefined, { log });
40
50
  const backend = await createLocalMemoryStoreBackend({
41
51
  dbName: process.env["BUILDERFORCE_MEMORY_DB"],
42
52
  persistFile: memoryFile,
@@ -52,5 +62,10 @@ await runStdio(backend, {
52
62
  gatewayApiKey: process.env["BUILDERFORCE_API_KEY"],
53
63
  // Null unless BUILDERFORCE_MEMORY_EXPERIENCE=1 — Synapse's opt-in.
54
64
  experience: await createExperienceHost({ memoryFile }),
65
+ // memory_compact proves absorption with the configured Evermind before stubbing;
66
+ // no model → nothing is compacted (and the tool says so).
67
+ recallProbe: lazyRecallProbe(),
68
+ // A local subprocess may read the user's own export file for memory_restore.
69
+ readRestoreFile: (path) => readFile(path, "utf8"),
55
70
  });
56
71
  //# sourceMappingURL=stdio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/bin/stdio.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;AAEvC,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAC7C,WAAW,EAAE,UAAU;IACvB,6EAA6E;IAC7E,2EAA2E;IAC3E,OAAO,EAAE,CAAC,MAAM,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,SAAS;CACrE,CAAC,CAAC;AAEH,MAAM,QAAQ,CAAC,OAAO,EAAE;IACpB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,KAAK,GAAG;IAC7D,2EAA2E;IAC3E,0EAA0E;IAC1E,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,6BAA6B;IACpF,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAClD,mEAAmE;IACnE,UAAU,EAAE,MAAM,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC;CACzD,CAAC,CAAC"}
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/bin/stdio.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACrE,mFAAmF;AACnF,oFAAoF;AACpF,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AAEtE,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAC7C,WAAW,EAAE,UAAU;IACvB,6EAA6E;IAC7E,2EAA2E;IAC3E,OAAO,EAAE,CAAC,MAAM,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,SAAS;CACrE,CAAC,CAAC;AAEH,MAAM,QAAQ,CAAC,OAAO,EAAE;IACpB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,KAAK,GAAG;IAC7D,2EAA2E;IAC3E,0EAA0E;IAC1E,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,6BAA6B;IACpF,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAClD,mEAAmE;IACnE,UAAU,EAAE,MAAM,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC;IACtD,iFAAiF;IACjF,0DAA0D;IAC1D,WAAW,EAAE,eAAe,EAAE;IAC9B,6EAA6E;IAC7E,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACpD,CAAC,CAAC"}