@seanhogg/builderforce-memory-mcp 2026.9.34 → 2026.10.2

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.
package/README.md CHANGED
@@ -134,7 +134,7 @@ default, so ordinary coding-agent installs never carry them in their tool list.
134
134
  | `episode_save` / `_list` / `_get` / `_forget` | Demonstrations. Screenshots go in `episodes/<id>/` and are deleted with the episode. |
135
135
  | `skill_preview` / `_compile` / `_list` / `_get` / `_forget` / `_schedule`, `skills_due` | Train Once and routines. |
136
136
  | `run_start` / `_step` / `_finish` / `_list` / `_get` | Runs and their audit trail (newest 500 kept). |
137
- | `experience_train` | Adapt the private model (`BUILDERFORCE_MEMORY_MODEL`) on every procedure it has not learned, through the engine's one adaptation recipe. The previous model is kept as `<model>.prev`. |
137
+ | `experience_train` | Adapt the private model (`BUILDERFORCE_MEMORY_MODEL`) on every procedure it has not learned, through the engine's one adaptation recipe. The previous model is kept as `<model>.prev`. Opt-in `curate: true` first leaves out procedures whose runs mostly fail and near-copies (of each other, or of the 200 most recently learned), listing each one dropped; it is reconsidered next time. |
138
138
 
139
139
  Stored beside the memory snapshot as `experience.json` (shared across processes exactly
140
140
  like `memory.json`) plus `episodes/`. Never served to a token-selected tenant of the
@@ -84,7 +84,32 @@ export interface LocalBackendOptions {
84
84
  * see {@link DiskPersistedBackend} for the loop guard.
85
85
  */
86
86
  persistFile?: string;
87
+ /**
88
+ * Hard cap on stored facts. Each write evicts the lowest-value entries
89
+ * (expired first, then lowest importance, then oldest).
90
+ *
91
+ * This was left unset by the local backend, which passed only `dbName` to
92
+ * `MemoryStore` — and `maxEntries` is undefined-by-default there, so the store
93
+ * grew without bound: every `memory_remember` added a fact that was never
94
+ * evicted, and the mirror file grew forever. Unbounded is fine for a
95
+ * short-lived test, not for the long-lived MCP server this is the default
96
+ * backend for. Defaults to {@link DEFAULT_MAX_ENTRIES} rather than requiring
97
+ * every caller to remember to pass one.
98
+ */
99
+ maxEntries?: number;
100
+ /**
101
+ * Set false to keep recall lexical even when a model is configured. The local
102
+ * store otherwise wires in {@link createRecallEmbedder}, which only resolves
103
+ * when `BUILDERFORCE_MEMORY_MODEL` is set, so this is mostly for tests.
104
+ */
105
+ semanticRecall?: false;
87
106
  }
107
+ /**
108
+ * Default cap on locally-stored facts. Large enough that a normal workspace never
109
+ * notices eviction, small enough that the IndexedDB shim, the embedding cache and
110
+ * the mirrored JSON file stay bounded on a host with no eviction policy of its own.
111
+ */
112
+ export declare const DEFAULT_MAX_ENTRIES = 10000;
88
113
  /**
89
114
  * Builds a MemoryStoreBackend over a fresh MemoryStore, wiring fake-indexeddb in
90
115
  * Node exactly as SsmMemoryService does. @seanhogg/builderforce-memory and fake-indexeddb
@@ -1 +1 @@
1
- {"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/backends/memory-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAM3F,UAAU,eAAe;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,eAAe;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAC1D,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACxC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACrD,kFAAkF;IAClF,YAAY,CACR,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,eAAe,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IACxG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAaD,qBAAa,kBAAmB,YAAW,aAAa;IAEhD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAFR,KAAK,EAAE,eAAe;IACvC,wEAAwE;IACvD,OAAO,CAAC,EAAE,OAAO,YAAA;IAGtC,oFAAoF;IAC9E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAIzD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAKhE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAKhD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAK7D,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,qFAAqF;IAC/E,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3C;AAED,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAChC,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAsID;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CA6B1G"}
1
+ {"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/backends/memory-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAM3F,UAAU,eAAe;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,eAAe;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAC1D,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACxC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACrD,kFAAkF;IAClF,YAAY,CACR,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,eAAe,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IACxG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAaD,qBAAa,kBAAmB,YAAW,aAAa;IAEhD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAFR,KAAK,EAAE,eAAe;IACvC,wEAAwE;IACvD,OAAO,CAAC,EAAE,OAAO,YAAA;IAGtC,oFAAoF;IAC9E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAIzD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAKhE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAKhD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAK7D,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,qFAAqF;IAC/E,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3C;AAED,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAChC,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC;CAC1B;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAsI1C;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CA6C1G"}
@@ -66,6 +66,12 @@ export class MemoryStoreBackend {
66
66
  await this.store.forget(key);
67
67
  }
68
68
  }
69
+ /**
70
+ * Default cap on locally-stored facts. Large enough that a normal workspace never
71
+ * notices eviction, small enough that the IndexedDB shim, the embedding cache and
72
+ * the mirrored JSON file stay bounded on a host with no eviction policy of its own.
73
+ */
74
+ export const DEFAULT_MAX_ENTRIES = 10_000;
69
75
  /** Parse a snapshot's text into its durable entries, or null when unusable. */
70
76
  function parseSnapshot(text) {
71
77
  let parsed;
@@ -202,8 +208,22 @@ export async function createLocalMemoryStoreBackend(opts = {}) {
202
208
  catch {
203
209
  // Browser or a host that provides global indexedDB — MemoryStore handles it.
204
210
  }
205
- const store = new MemoryStore({ idbFactory, dbName: opts.dbName });
206
- const backend = new MemoryStoreBackend(store, opts.runtime);
211
+ const maxEntries = opts.maxEntries ?? DEFAULT_MAX_ENTRIES;
212
+ // A local store with no embedder degrades to lexical-only recall, which is why
213
+ // recall stopped finding paraphrases on a headless host. Wire the CPU Evermind
214
+ // embedder in when the caller supplied no runtime and a model is configured.
215
+ // `createRecallEmbedder` returns null when no model is set, or when the model
216
+ // fails to stand up — both are correct degrades, not failures to boot.
217
+ let runtime = opts.runtime;
218
+ if (runtime === undefined && opts.semanticRecall !== false) {
219
+ const embed = await import("../embedding/index.js");
220
+ runtime =
221
+ (await embed.createRecallEmbedder({
222
+ memoryFile: opts.persistFile ?? opts.dbName ?? "",
223
+ })) ?? undefined;
224
+ }
225
+ const store = new MemoryStore({ idbFactory, dbName: opts.dbName, maxEntries });
226
+ const backend = new MemoryStoreBackend(store, runtime);
207
227
  if (!opts.persistFile)
208
228
  return backend;
209
229
  // Disk-mirror requested. node:fs/path are loaded indirectly so a browser
@@ -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;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAqB,MAAM,oCAAoC,CAAC;AA0BvF,SAAS,KAAK,CAAC,CAAkB,EAAE,KAAc;IAC7C,OAAO;QACH,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;AACN,CAAC;AAED,MAAM,OAAO,kBAAkB;IAEN;IAEA;IAHrB,YACqB,KAAsB;IACvC,wEAAwE;IACvD,OAAiB;QAFjB,UAAK,GAAL,KAAK,CAAiB;QAEtB,YAAO,GAAP,OAAO,CAAU;IACnC,CAAC;IAEJ,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,CAAC,CAAC;QACxE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC5F,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,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAW,EAAE,KAAa;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9C,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;AAkDD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAa1C,+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,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACpG,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,QAAQ;QAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC7C,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;SAC3B,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,OAAO,GAAG,IAAI,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEvD,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,OAAO,CAAC;IAEtC,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,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;IAC9B,OAAO,SAAS,CAAC;AACrB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/experience/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,OAAO,EAA0D,MAAM,sCAAsC,CAAC;AAC5H,OAAO,EAAgB,KAAK,UAAU,EAAmB,MAAM,iBAAiB,CAAC;AAEjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA+ChD,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,CA6B7E;AA8BD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,EAAE,CAiPvE"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/experience/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,OAAO,EAA0D,MAAM,sCAAsC,CAAC;AAC5H,OAAO,EAAgB,KAAK,UAAU,EAAmB,MAAM,iBAAiB,CAAC;AAEjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA+ChD,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,CA6B7E;AA8BD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,EAAE,CAsPvE"}
@@ -10,7 +10,7 @@
10
10
  import { z } from "zod";
11
11
  import { fail, okJson } from "../tool-core.js";
12
12
  import { isSafeExperienceId } from "./file-store.js";
13
- import { experienceIndex, pendingDocuments, trainExperience } from "./train.js";
13
+ import { CURATION_UNSUPPORTED, experienceIndex, pendingDocuments, trainExperience } from "./train.js";
14
14
  const DEFAULT_RUNS = 50;
15
15
  const MAX_RUNS_RETURNED = 500;
16
16
  const editsShape = z
@@ -260,7 +260,10 @@ export function buildExperienceTools(host) {
260
260
  }),
261
261
  ];
262
262
  const learnTools = [
263
- tool("experience_train", "Teach the private Evermind model the procedures it has not learned yet (each skill, and each demonstration not yet compiled into one). Pass dryRun to only count them. The previous model is kept beside the new one.", { dryRun: z.boolean().optional() }, async (args) => {
263
+ tool("experience_train", "Teach the private Evermind model the procedures it has not learned yet (each skill, and each demonstration not yet compiled into one). Pass dryRun to only count them. Pass curate to first leave out procedures whose runs mostly fail and near-copies of each other or of recently learned ones (each one left out is listed, and reconsidered next time). The previous model is kept beside the new one.", {
264
+ dryRun: z.boolean().optional(),
265
+ curate: z.boolean().optional().describe("Opt-in: filter by run quality and drop near-duplicates before training. Default false."),
266
+ }, async (args) => {
264
267
  if (!host.modelFile)
265
268
  return fail("No private Evermind model is configured (set BUILDERFORCE_MEMORY_MODEL).");
266
269
  const model = await host.loadModel();
@@ -271,7 +274,10 @@ export function buildExperienceTools(host) {
271
274
  const pending = (await pendingDocuments(store, engine, version)).length;
272
275
  return okJson({ status: "dry_run", pending, version });
273
276
  }
274
- return okJson(await trainExperience(store, engine, model, host.modelFile));
277
+ const curate = args["curate"] === true;
278
+ if (curate && (!engine.curatePendingExperience || !engine.EvermindTextEmbedder))
279
+ return fail(CURATION_UNSUPPORTED);
280
+ return okJson(await trainExperience(store, engine, model, host.modelFile, { curate }));
275
281
  }),
276
282
  ];
277
283
  return [...episodeTools, ...skillTools, ...runTools, ...learnTools];
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/experience/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/experience/tools.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@
13
13
  * re-teaches what the discarded version had learned, and a fresh base (no suffix,
14
14
  * N = 0) — a newly downloaded Evermind — gets every procedure again.
15
15
  */
16
- import type { adaptPackage, experienceDocuments, packDocuments, ExperienceStore } from "@seanhogg/builderforce-memory-engine";
16
+ import type { adaptPackage, curatePendingExperience, experienceDocuments, packDocuments, CurationResult, EvermindTextEmbedder, ExperienceDocument, ExperienceStore } from "@seanhogg/builderforce-memory-engine";
17
17
  import type { LoadedEvermind } from "../model/evermind-package.js";
18
18
  /** The engine functions training needs, passed in so the peer stays optional. */
19
19
  export interface TrainEngine {
@@ -21,7 +21,14 @@ export interface TrainEngine {
21
21
  packDocuments: typeof packDocuments;
22
22
  adaptPackage: typeof adaptPackage;
23
23
  EVERMIND_ADAPT_MAX_CHARS: number;
24
+ /** The opt-in curation step and the CPU embedder it scores with (engine ≥ 2026.10.2). */
25
+ curatePendingExperience?: typeof curatePendingExperience;
26
+ EvermindTextEmbedder?: typeof EvermindTextEmbedder;
24
27
  }
28
+ /** What curation left out of a pass, when it ran. */
29
+ export type CurationReport = {
30
+ dropped: CurationResult["dropped"];
31
+ };
25
32
  export type TrainOutcome = {
26
33
  status: "nothing_new";
27
34
  pending: 0;
@@ -30,6 +37,12 @@ export type TrainOutcome = {
30
37
  status: "no_window";
31
38
  pending: number;
32
39
  version: string;
40
+ curation?: CurationReport;
41
+ } | {
42
+ status: "curated_out";
43
+ pending: number;
44
+ version: string;
45
+ curation: CurationReport;
33
46
  } | {
34
47
  status: "trained";
35
48
  learned: number;
@@ -37,12 +50,27 @@ export type TrainOutcome = {
37
50
  loss: number;
38
51
  version: string;
39
52
  previousModel: string;
53
+ curation?: CurationReport;
40
54
  };
41
55
  /** The version an adaptation writes: `<base>+exp1`, then `+exp2`, … */
42
56
  export declare function nextExperienceVersion(version: string): string;
43
57
  /** Which adaptation produced this model: N for `+expN`, 0 for a base that has none. */
44
58
  export declare function experienceIndex(version: string): number;
45
59
  /** Procedures the model has not learned yet. */
46
- export declare function pendingDocuments(store: ExperienceStore, engine: TrainEngine, modelVersion: string): Promise<import("@seanhogg/builderforce-memory-engine").ExperienceDocument[]>;
47
- export declare function trainExperience(store: ExperienceStore, engine: TrainEngine, model: LoadedEvermind, modelFile: string): Promise<TrainOutcome>;
60
+ export declare function pendingDocuments(store: ExperienceStore, engine: TrainEngine, modelVersion: string): Promise<ExperienceDocument[]>;
61
+ export interface TrainExperienceOptions {
62
+ /**
63
+ * Opt-in curation between "what is new" and the adaptation passes: the engine's
64
+ * `curatePendingExperience` (the `experience.quality` filter, trained on this
65
+ * store's run outcomes, + near-duplicate removal against the batch AND the
66
+ * recently learned procedures — docs/ml-task-catalog.md §4.2), scoring with the
67
+ * model's own CPU embedder. Default false ⇒ every pending procedure is learned,
68
+ * exactly as before. A procedure curation drops is NOT recorded as learned, so a
69
+ * later pass reconsiders it.
70
+ */
71
+ curate?: boolean;
72
+ }
73
+ /** The message when curation is asked of an engine that predates it. */
74
+ export declare const CURATION_UNSUPPORTED = "Curation needs @seanhogg/builderforce-memory-engine 2026.10.2 or newer.";
75
+ export declare function trainExperience(store: ExperienceStore, engine: TrainEngine, model: LoadedEvermind, modelFile: string, opts?: TrainExperienceOptions): Promise<TrainOutcome>;
48
76
  //# sourceMappingURL=train.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"train.d.ts","sourceRoot":"","sources":["../../src/experience/train.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC9H,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,iFAAiF;AACjF,MAAM,WAAW,WAAW;IACxB,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,wBAAwB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,MAAM,YAAY,GAClB;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAInH,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,gDAAgD;AAChD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gFAQvG;AAED,wBAAsB,eAAe,CACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAiCvB"}
1
+ {"version":3,"file":"train.d.ts","sourceRoot":"","sources":["../../src/experience/train.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACR,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAElB,eAAe,EAClB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,iFAAiF;AACjF,MAAM,WAAW,WAAW;IACxB,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,wBAAwB,EAAE,MAAM,CAAC;IACjC,yFAAyF;IACzF,uBAAuB,CAAC,EAAE,OAAO,uBAAuB,CAAC;IACzD,oBAAoB,CAAC,EAAE,OAAO,oBAAoB,CAAC;CACtD;AAED,qDAAqD;AACrD,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,YAAY,GAClB;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAAE,GACpF;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAA;CAAE,GACrF;IACI,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC7B,CAAC;AAIR,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGvD;AAwBD,gDAAgD;AAChD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iCAEvG;AAED,MAAM,WAAW,sBAAsB;IACnC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,4EAA4E,CAAC;AAE9G,wBAAsB,eAAe,CACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,sBAA2B,GAClC,OAAO,CAAC,YAAY,CAAC,CAgDvB"}
@@ -24,21 +24,56 @@ export function experienceIndex(version) {
24
24
  const m = EXP_SUFFIX.exec(version);
25
25
  return m ? Number(m[1]) : 0;
26
26
  }
27
- /** Procedures the model has not learned yet. */
28
- export async function pendingDocuments(store, engine, modelVersion) {
29
- const snap = await store.snapshot();
27
+ /**
28
+ * Split the procedures by what the model at `modelVersion` has learned: `pending` in
29
+ * corpus order, `known` most recently learned first (what curation de-duplicates
30
+ * against — the engine embeds only the most recent `CURATION_KNOWN_LIMIT` of them).
31
+ */
32
+ function splitDocuments(snap, engine, modelVersion) {
30
33
  const current = experienceIndex(modelVersion);
31
- const known = (id) => {
34
+ const learnedAt = (id) => {
32
35
  const n = snap.learned[id];
33
- return typeof n === "number" && n >= 1 && n <= current;
36
+ return typeof n === "number" && n >= 1 && n <= current ? n : null;
34
37
  };
35
- return engine.experienceDocuments(snap.episodes, snap.skills).filter((d) => !known(d.id));
38
+ const pending = [];
39
+ const known = [];
40
+ for (const doc of engine.experienceDocuments(snap.episodes, snap.skills)) {
41
+ const at = learnedAt(doc.id);
42
+ if (at == null)
43
+ pending.push(doc);
44
+ else
45
+ known.push({ doc, at });
46
+ }
47
+ known.sort((a, b) => b.at - a.at);
48
+ return { pending, known: known.map((k) => k.doc) };
36
49
  }
37
- export async function trainExperience(store, engine, model, modelFile) {
50
+ /** Procedures the model has not learned yet. */
51
+ export async function pendingDocuments(store, engine, modelVersion) {
52
+ return splitDocuments(await store.snapshot(), engine, modelVersion).pending;
53
+ }
54
+ /** The message when curation is asked of an engine that predates it. */
55
+ export const CURATION_UNSUPPORTED = "Curation needs @seanhogg/builderforce-memory-engine 2026.10.2 or newer.";
56
+ export async function trainExperience(store, engine, model, modelFile, opts = {}) {
38
57
  const version = model.pkg.manifest.version ?? "0";
39
- const docs = await pendingDocuments(store, engine, version);
40
- if (docs.length === 0)
58
+ const snap = await store.snapshot();
59
+ const { pending, known } = splitDocuments(snap, engine, version);
60
+ if (pending.length === 0)
41
61
  return { status: "nothing_new", pending: 0, version };
62
+ let docs = pending;
63
+ let curation;
64
+ if (opts.curate) {
65
+ if (!engine.curatePendingExperience || !engine.EvermindTextEmbedder)
66
+ throw new Error(CURATION_UNSUPPORTED);
67
+ // The model being trained embeds for curation: its own notion of "the same procedure".
68
+ const lm = model.pkg.loadLM();
69
+ const codec = model.codec;
70
+ const embedder = new engine.EvermindTextEmbedder(lm, codec);
71
+ const r = await engine.curatePendingExperience(pending, snap, { embedder, known });
72
+ docs = r.kept;
73
+ curation = { dropped: r.dropped };
74
+ }
75
+ if (docs.length === 0)
76
+ return { status: "curated_out", pending: pending.length, version, curation: curation ?? { dropped: [] } };
42
77
  const next = nextExperienceVersion(version);
43
78
  // The engine's package type; the structural view is what was loaded from disk.
44
79
  let pkg = model.pkg;
@@ -55,7 +90,7 @@ export async function trainExperience(store, engine, model, modelFile) {
55
90
  learned.push(...pass.map((d) => d.id));
56
91
  }
57
92
  if (passes === 0)
58
- return { status: "no_window", pending: docs.length, version };
93
+ return { status: "no_window", pending: docs.length, version, ...(curation ? { curation } : {}) };
59
94
  const loss = lossSum / passes;
60
95
  // Keep the model this pass started from, so one bad adaptation is one rename away
61
96
  // from undone. The new model is written beside the old one and renamed into place,
@@ -67,6 +102,6 @@ export async function trainExperience(store, engine, model, modelFile) {
67
102
  model.fs.writeFileSync(staged, new Uint8Array(pkg.toBlob()));
68
103
  model.fs.renameSync(staged, modelFile);
69
104
  await store.recordAdaptation({ index: experienceIndex(next), version: next, learned, passes, loss, at: Date.now() });
70
- return { status: "trained", learned: learned.length, passes, loss, version: next, previousModel };
105
+ return { status: "trained", learned: learned.length, passes, loss, version: next, previousModel, ...(curation ? { curation } : {}) };
71
106
  }
72
107
  //# sourceMappingURL=train.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"train.js","sourceRoot":"","sources":["../../src/experience/train.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"train.js","sourceRoot":"","sources":["../../src/experience/train.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seanhogg/builderforce-memory-mcp",
3
- "version": "2026.9.34",
3
+ "version": "2026.10.2",
4
4
  "mcpName": "io.github.SeanHogg/builderforce-memory",
5
5
  "description": "BuilderForce Agent Memory — MCP transport. Exposes @seanhogg/builderforce-memory to any MCP client (Claude Agent SDK in-process, stdio, or HTTP) over a pluggable MemoryBackend, with token-saving fetch-on-demand recall.",
6
6
  "type": "module",
@@ -56,8 +56,8 @@
56
56
  },
57
57
  "peerDependencies": {
58
58
  "@anthropic-ai/claude-agent-sdk": ">=0.1.0",
59
- "@seanhogg/builderforce-memory": "^2026.9.34",
60
- "@seanhogg/builderforce-memory-engine": "^2026.9.34",
59
+ "@seanhogg/builderforce-memory": "^2026.10.2",
60
+ "@seanhogg/builderforce-memory-engine": "^2026.10.2",
61
61
  "fake-indexeddb": "^6.0.0"
62
62
  },
63
63
  "peerDependenciesMeta": {
@@ -83,8 +83,8 @@
83
83
  "fake-indexeddb": "^6.0.0",
84
84
  "typescript": "^6.0.3",
85
85
  "@typescript/native-preview": "7.0.0-dev.20260627.2",
86
- "@seanhogg/builderforce-memory-engine": "2026.9.34",
87
- "@seanhogg/builderforce-memory": "2026.9.34"
86
+ "@seanhogg/builderforce-memory": "2026.10.2",
87
+ "@seanhogg/builderforce-memory-engine": "2026.10.2"
88
88
  },
89
89
  "engines": {
90
90
  "node": ">=18.0.0"
package/server.json CHANGED
@@ -8,14 +8,14 @@
8
8
  "source": "github",
9
9
  "subfolder": "packages/memory-mcp"
10
10
  },
11
- "version": "2026.9.34",
11
+ "version": "2026.10.2",
12
12
  "websiteUrl": "https://builderforce.ai",
13
13
  "packages": [
14
14
  {
15
15
  "registryType": "npm",
16
16
  "registryBaseUrl": "https://registry.npmjs.org",
17
17
  "identifier": "@seanhogg/builderforce-memory-mcp",
18
- "version": "2026.9.34",
18
+ "version": "2026.10.2",
19
19
  "transport": {
20
20
  "type": "stdio"
21
21
  },
@@ -125,8 +125,34 @@ export interface LocalBackendOptions {
125
125
  * see {@link DiskPersistedBackend} for the loop guard.
126
126
  */
127
127
  persistFile?: string;
128
+ /**
129
+ * Hard cap on stored facts. Each write evicts the lowest-value entries
130
+ * (expired first, then lowest importance, then oldest).
131
+ *
132
+ * This was left unset by the local backend, which passed only `dbName` to
133
+ * `MemoryStore` — and `maxEntries` is undefined-by-default there, so the store
134
+ * grew without bound: every `memory_remember` added a fact that was never
135
+ * evicted, and the mirror file grew forever. Unbounded is fine for a
136
+ * short-lived test, not for the long-lived MCP server this is the default
137
+ * backend for. Defaults to {@link DEFAULT_MAX_ENTRIES} rather than requiring
138
+ * every caller to remember to pass one.
139
+ */
140
+ maxEntries?: number;
141
+ /**
142
+ * Set false to keep recall lexical even when a model is configured. The local
143
+ * store otherwise wires in {@link createRecallEmbedder}, which only resolves
144
+ * when `BUILDERFORCE_MEMORY_MODEL` is set, so this is mostly for tests.
145
+ */
146
+ semanticRecall?: false;
128
147
  }
129
148
 
149
+ /**
150
+ * Default cap on locally-stored facts. Large enough that a normal workspace never
151
+ * notices eviction, small enough that the IndexedDB shim, the embedding cache and
152
+ * the mirrored JSON file stay bounded on a host with no eviction policy of its own.
153
+ */
154
+ export const DEFAULT_MAX_ENTRIES = 10_000;
155
+
130
156
  /** The on-disk snapshot shape — a flat array of durable entries. */
131
157
  interface SnapshotEntry {
132
158
  key: string;
@@ -278,8 +304,24 @@ export async function createLocalMemoryStoreBackend(opts: LocalBackendOptions =
278
304
  // Browser or a host that provides global indexedDB — MemoryStore handles it.
279
305
  }
280
306
 
281
- const store = new MemoryStore({ idbFactory, dbName: opts.dbName });
282
- const backend = new MemoryStoreBackend(store, opts.runtime);
307
+ const maxEntries = opts.maxEntries ?? DEFAULT_MAX_ENTRIES;
308
+
309
+ // A local store with no embedder degrades to lexical-only recall, which is why
310
+ // recall stopped finding paraphrases on a headless host. Wire the CPU Evermind
311
+ // embedder in when the caller supplied no runtime and a model is configured.
312
+ // `createRecallEmbedder` returns null when no model is set, or when the model
313
+ // fails to stand up — both are correct degrades, not failures to boot.
314
+ let runtime = opts.runtime;
315
+ if (runtime === undefined && opts.semanticRecall !== false) {
316
+ const embed = await import("../embedding/index.js");
317
+ runtime =
318
+ (await embed.createRecallEmbedder({
319
+ memoryFile: opts.persistFile ?? opts.dbName ?? "",
320
+ })) ?? undefined;
321
+ }
322
+
323
+ const store = new MemoryStore({ idbFactory, dbName: opts.dbName, maxEntries });
324
+ const backend = new MemoryStoreBackend(store, runtime);
283
325
 
284
326
  if (!opts.persistFile) return backend;
285
327
 
@@ -13,7 +13,7 @@ import type { Episode, ReviewEdits, Run, RunStatus, SkillRoutine, StepOutcome }
13
13
  import { fail, okJson, type MemoryTool, type ToolResult } from "../tool-core.js";
14
14
  import { isSafeExperienceId } from "./file-store.js";
15
15
  import type { ExperienceHost } from "./host.js";
16
- import { experienceIndex, pendingDocuments, trainExperience } from "./train.js";
16
+ import { CURATION_UNSUPPORTED, experienceIndex, pendingDocuments, trainExperience } from "./train.js";
17
17
 
18
18
  const DEFAULT_RUNS = 50;
19
19
  const MAX_RUNS_RETURNED = 500;
@@ -343,8 +343,11 @@ export function buildExperienceTools(host: ExperienceHost): MemoryTool[] {
343
343
  const learnTools = [
344
344
  tool(
345
345
  "experience_train",
346
- "Teach the private Evermind model the procedures it has not learned yet (each skill, and each demonstration not yet compiled into one). Pass dryRun to only count them. The previous model is kept beside the new one.",
347
- { dryRun: z.boolean().optional() },
346
+ "Teach the private Evermind model the procedures it has not learned yet (each skill, and each demonstration not yet compiled into one). Pass dryRun to only count them. Pass curate to first leave out procedures whose runs mostly fail and near-copies of each other or of recently learned ones (each one left out is listed, and reconsidered next time). The previous model is kept beside the new one.",
347
+ {
348
+ dryRun: z.boolean().optional(),
349
+ curate: z.boolean().optional().describe("Opt-in: filter by run quality and drop near-duplicates before training. Default false."),
350
+ },
348
351
  async (args) => {
349
352
  if (!host.modelFile) return fail("No private Evermind model is configured (set BUILDERFORCE_MEMORY_MODEL).");
350
353
  const model = await host.loadModel();
@@ -354,7 +357,9 @@ export function buildExperienceTools(host: ExperienceHost): MemoryTool[] {
354
357
  const pending = (await pendingDocuments(store, engine, version)).length;
355
358
  return okJson({ status: "dry_run", pending, version });
356
359
  }
357
- return okJson(await trainExperience(store, engine, model, host.modelFile));
360
+ const curate = args["curate"] === true;
361
+ if (curate && (!engine.curatePendingExperience || !engine.EvermindTextEmbedder)) return fail(CURATION_UNSUPPORTED);
362
+ return okJson(await trainExperience(store, engine, model, host.modelFile, { curate }));
358
363
  },
359
364
  ),
360
365
  ];
@@ -14,7 +14,17 @@
14
14
  * N = 0) — a newly downloaded Evermind — gets every procedure again.
15
15
  */
16
16
 
17
- import type { adaptPackage, experienceDocuments, packDocuments, ExperienceStore } from "@seanhogg/builderforce-memory-engine";
17
+ import type {
18
+ adaptPackage,
19
+ curatePendingExperience,
20
+ experienceDocuments,
21
+ packDocuments,
22
+ CurationResult,
23
+ EvermindTextEmbedder,
24
+ ExperienceDocument,
25
+ ExperienceSnapshot,
26
+ ExperienceStore,
27
+ } from "@seanhogg/builderforce-memory-engine";
18
28
  import type { LoadedEvermind } from "../model/evermind-package.js";
19
29
 
20
30
  /** The engine functions training needs, passed in so the peer stays optional. */
@@ -23,12 +33,27 @@ export interface TrainEngine {
23
33
  packDocuments: typeof packDocuments;
24
34
  adaptPackage: typeof adaptPackage;
25
35
  EVERMIND_ADAPT_MAX_CHARS: number;
36
+ /** The opt-in curation step and the CPU embedder it scores with (engine ≥ 2026.10.2). */
37
+ curatePendingExperience?: typeof curatePendingExperience;
38
+ EvermindTextEmbedder?: typeof EvermindTextEmbedder;
26
39
  }
27
40
 
41
+ /** What curation left out of a pass, when it ran. */
42
+ export type CurationReport = { dropped: CurationResult["dropped"] };
43
+
28
44
  export type TrainOutcome =
29
45
  | { status: "nothing_new"; pending: 0; version: string }
30
- | { status: "no_window"; pending: number; version: string }
31
- | { status: "trained"; learned: number; passes: number; loss: number; version: string; previousModel: string };
46
+ | { status: "no_window"; pending: number; version: string; curation?: CurationReport }
47
+ | { status: "curated_out"; pending: number; version: string; curation: CurationReport }
48
+ | {
49
+ status: "trained";
50
+ learned: number;
51
+ passes: number;
52
+ loss: number;
53
+ version: string;
54
+ previousModel: string;
55
+ curation?: CurationReport;
56
+ };
32
57
 
33
58
  const EXP_SUFFIX = /\+exp(\d+)$/;
34
59
 
@@ -44,26 +69,74 @@ export function experienceIndex(version: string): number {
44
69
  return m ? Number(m[1]) : 0;
45
70
  }
46
71
 
47
- /** Procedures the model has not learned yet. */
48
- export async function pendingDocuments(store: ExperienceStore, engine: TrainEngine, modelVersion: string) {
49
- const snap = await store.snapshot();
72
+ /**
73
+ * Split the procedures by what the model at `modelVersion` has learned: `pending` in
74
+ * corpus order, `known` most recently learned first (what curation de-duplicates
75
+ * against — the engine embeds only the most recent `CURATION_KNOWN_LIMIT` of them).
76
+ */
77
+ function splitDocuments(snap: ExperienceSnapshot, engine: TrainEngine, modelVersion: string) {
50
78
  const current = experienceIndex(modelVersion);
51
- const known = (id: string) => {
79
+ const learnedAt = (id: string): number | null => {
52
80
  const n = snap.learned[id];
53
- return typeof n === "number" && n >= 1 && n <= current;
81
+ return typeof n === "number" && n >= 1 && n <= current ? n : null;
54
82
  };
55
- return engine.experienceDocuments(snap.episodes, snap.skills).filter((d) => !known(d.id));
83
+ const pending: ExperienceDocument[] = [];
84
+ const known: { doc: ExperienceDocument; at: number }[] = [];
85
+ for (const doc of engine.experienceDocuments(snap.episodes, snap.skills)) {
86
+ const at = learnedAt(doc.id);
87
+ if (at == null) pending.push(doc);
88
+ else known.push({ doc, at });
89
+ }
90
+ known.sort((a, b) => b.at - a.at);
91
+ return { pending, known: known.map((k) => k.doc) };
56
92
  }
57
93
 
94
+ /** Procedures the model has not learned yet. */
95
+ export async function pendingDocuments(store: ExperienceStore, engine: TrainEngine, modelVersion: string) {
96
+ return splitDocuments(await store.snapshot(), engine, modelVersion).pending;
97
+ }
98
+
99
+ export interface TrainExperienceOptions {
100
+ /**
101
+ * Opt-in curation between "what is new" and the adaptation passes: the engine's
102
+ * `curatePendingExperience` (the `experience.quality` filter, trained on this
103
+ * store's run outcomes, + near-duplicate removal against the batch AND the
104
+ * recently learned procedures — docs/ml-task-catalog.md §4.2), scoring with the
105
+ * model's own CPU embedder. Default false ⇒ every pending procedure is learned,
106
+ * exactly as before. A procedure curation drops is NOT recorded as learned, so a
107
+ * later pass reconsiders it.
108
+ */
109
+ curate?: boolean;
110
+ }
111
+
112
+ /** The message when curation is asked of an engine that predates it. */
113
+ export const CURATION_UNSUPPORTED = "Curation needs @seanhogg/builderforce-memory-engine 2026.10.2 or newer.";
114
+
58
115
  export async function trainExperience(
59
116
  store: ExperienceStore,
60
117
  engine: TrainEngine,
61
118
  model: LoadedEvermind,
62
119
  modelFile: string,
120
+ opts: TrainExperienceOptions = {},
63
121
  ): Promise<TrainOutcome> {
64
122
  const version = model.pkg.manifest.version ?? "0";
65
- const docs = await pendingDocuments(store, engine, version);
66
- if (docs.length === 0) return { status: "nothing_new", pending: 0, version };
123
+ const snap = await store.snapshot();
124
+ const { pending, known } = splitDocuments(snap, engine, version);
125
+ if (pending.length === 0) return { status: "nothing_new", pending: 0, version };
126
+
127
+ let docs = pending;
128
+ let curation: CurationReport | undefined;
129
+ if (opts.curate) {
130
+ if (!engine.curatePendingExperience || !engine.EvermindTextEmbedder) throw new Error(CURATION_UNSUPPORTED);
131
+ // The model being trained embeds for curation: its own notion of "the same procedure".
132
+ const lm = model.pkg.loadLM() as ConstructorParameters<typeof EvermindTextEmbedder>[0];
133
+ const codec = model.codec as ConstructorParameters<typeof EvermindTextEmbedder>[1];
134
+ const embedder = new engine.EvermindTextEmbedder(lm, codec);
135
+ const r = await engine.curatePendingExperience(pending, snap, { embedder, known });
136
+ docs = r.kept;
137
+ curation = { dropped: r.dropped };
138
+ }
139
+ if (docs.length === 0) return { status: "curated_out", pending: pending.length, version, curation: curation ?? { dropped: [] } };
67
140
 
68
141
  const next = nextExperienceVersion(version);
69
142
  // The engine's package type; the structural view is what was loaded from disk.
@@ -79,7 +152,7 @@ export async function trainExperience(
79
152
  passes++;
80
153
  learned.push(...pass.map((d) => d.id));
81
154
  }
82
- if (passes === 0) return { status: "no_window", pending: docs.length, version };
155
+ if (passes === 0) return { status: "no_window", pending: docs.length, version, ...(curation ? { curation } : {}) };
83
156
 
84
157
  const loss = lossSum / passes;
85
158
  // Keep the model this pass started from, so one bad adaptation is one rename away
@@ -92,5 +165,5 @@ export async function trainExperience(
92
165
  model.fs.writeFileSync(staged, new Uint8Array(pkg.toBlob()));
93
166
  model.fs.renameSync(staged, modelFile);
94
167
  await store.recordAdaptation({ index: experienceIndex(next), version: next, learned, passes, loss, at: Date.now() });
95
- return { status: "trained", learned: learned.length, passes, loss, version: next, previousModel };
168
+ return { status: "trained", learned: learned.length, passes, loss, version: next, previousModel, ...(curation ? { curation } : {}) };
96
169
  }