@seanhogg/builderforce-memory-mcp 2026.10.1 → 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 +1 -1
- package/dist/experience/tools.d.ts.map +1 -1
- package/dist/experience/tools.js +9 -3
- package/dist/experience/tools.js.map +1 -1
- package/dist/experience/train.d.ts +21 -6
- package/dist/experience/train.d.ts.map +1 -1
- package/dist/experience/train.js +43 -11
- package/dist/experience/train.js.map +1 -1
- package/package.json +5 -5
- package/server.json +2 -2
- package/src/experience/tools.ts +9 -4
- package/src/experience/train.ts +169 -116
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
|
|
@@ -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,
|
|
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"}
|
package/dist/experience/tools.js
CHANGED
|
@@ -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.", {
|
|
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
|
-
|
|
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, ExperienceDocument, 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,10 +37,12 @@ export type TrainOutcome = {
|
|
|
30
37
|
status: "no_window";
|
|
31
38
|
pending: number;
|
|
32
39
|
version: string;
|
|
40
|
+
curation?: CurationReport;
|
|
33
41
|
} | {
|
|
34
42
|
status: "curated_out";
|
|
35
43
|
pending: number;
|
|
36
44
|
version: string;
|
|
45
|
+
curation: CurationReport;
|
|
37
46
|
} | {
|
|
38
47
|
status: "trained";
|
|
39
48
|
learned: number;
|
|
@@ -41,6 +50,7 @@ export type TrainOutcome = {
|
|
|
41
50
|
loss: number;
|
|
42
51
|
version: string;
|
|
43
52
|
previousModel: string;
|
|
53
|
+
curation?: CurationReport;
|
|
44
54
|
};
|
|
45
55
|
/** The version an adaptation writes: `<base>+exp1`, then `+exp2`, … */
|
|
46
56
|
export declare function nextExperienceVersion(version: string): string;
|
|
@@ -50,12 +60,17 @@ export declare function experienceIndex(version: string): number;
|
|
|
50
60
|
export declare function pendingDocuments(store: ExperienceStore, engine: TrainEngine, modelVersion: string): Promise<ExperienceDocument[]>;
|
|
51
61
|
export interface TrainExperienceOptions {
|
|
52
62
|
/**
|
|
53
|
-
* Opt-in curation between "what is new" and the adaptation passes
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
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.
|
|
57
70
|
*/
|
|
58
|
-
curate?:
|
|
71
|
+
curate?: boolean;
|
|
59
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.";
|
|
60
75
|
export declare function trainExperience(store: ExperienceStore, engine: TrainEngine, model: LoadedEvermind, modelFile: string, opts?: TrainExperienceOptions): Promise<TrainOutcome>;
|
|
61
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,EACR,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,kBAAkB,
|
|
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"}
|
package/dist/experience/train.js
CHANGED
|
@@ -24,24 +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
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
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
|
-
|
|
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
|
}
|
|
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.";
|
|
37
56
|
export async function trainExperience(store, engine, model, modelFile, opts = {}) {
|
|
38
57
|
const version = model.pkg.manifest.version ?? "0";
|
|
39
|
-
const
|
|
58
|
+
const snap = await store.snapshot();
|
|
59
|
+
const { pending, known } = splitDocuments(snap, engine, version);
|
|
40
60
|
if (pending.length === 0)
|
|
41
61
|
return { status: "nothing_new", pending: 0, version };
|
|
42
|
-
|
|
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
|
+
}
|
|
43
75
|
if (docs.length === 0)
|
|
44
|
-
return { status: "curated_out", pending: pending.length, version };
|
|
76
|
+
return { status: "curated_out", pending: pending.length, version, curation: curation ?? { dropped: [] } };
|
|
45
77
|
const next = nextExperienceVersion(version);
|
|
46
78
|
// The engine's package type; the structural view is what was loaded from disk.
|
|
47
79
|
let pkg = model.pkg;
|
|
@@ -58,7 +90,7 @@ export async function trainExperience(store, engine, model, modelFile, opts = {}
|
|
|
58
90
|
learned.push(...pass.map((d) => d.id));
|
|
59
91
|
}
|
|
60
92
|
if (passes === 0)
|
|
61
|
-
return { status: "no_window", pending: docs.length, version };
|
|
93
|
+
return { status: "no_window", pending: docs.length, version, ...(curation ? { curation } : {}) };
|
|
62
94
|
const loss = lossSum / passes;
|
|
63
95
|
// Keep the model this pass started from, so one bad adaptation is one rename away
|
|
64
96
|
// from undone. The new model is written beside the old one and renamed into place,
|
|
@@ -70,6 +102,6 @@ export async function trainExperience(store, engine, model, modelFile, opts = {}
|
|
|
70
102
|
model.fs.writeFileSync(staged, new Uint8Array(pkg.toBlob()));
|
|
71
103
|
model.fs.renameSync(staged, modelFile);
|
|
72
104
|
await store.recordAdaptation({ index: experienceIndex(next), version: next, learned, passes, loss, at: Date.now() });
|
|
73
|
-
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 } : {}) };
|
|
74
106
|
}
|
|
75
107
|
//# sourceMappingURL=train.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"train.js","sourceRoot":"","sources":["../../src/experience/train.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
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.10.
|
|
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.10.
|
|
60
|
-
"@seanhogg/builderforce-memory-engine": "^2026.10.
|
|
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
|
|
87
|
-
"@seanhogg/builderforce-memory": "2026.10.
|
|
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.10.
|
|
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.10.
|
|
18
|
+
"version": "2026.10.2",
|
|
19
19
|
"transport": {
|
|
20
20
|
"type": "stdio"
|
|
21
21
|
},
|
package/src/experience/tools.ts
CHANGED
|
@@ -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
|
-
{
|
|
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
|
-
|
|
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
|
];
|
package/src/experience/train.ts
CHANGED
|
@@ -1,116 +1,169 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Teach the person's private Evermind what they have done.
|
|
3
|
-
*
|
|
4
|
-
* Experience becomes text through the engine (`experienceDocuments`: each skill or
|
|
5
|
-
* uncompiled demonstration as a written procedure), and the text becomes weights
|
|
6
|
-
* through the engine's ONE adaptation recipe (`adaptPackage`). This module only
|
|
7
|
-
* decides what is new, runs the passes over the local model file and writes the
|
|
8
|
-
* result back, keeping the previous model beside it.
|
|
9
|
-
*
|
|
10
|
-
* "What is new" is the store's learned ledger. Every adaptation writes `<base>+expN`
|
|
11
|
-
* and records N against each procedure it learned, so a loaded model trusts exactly
|
|
12
|
-
* the entries at or below its own N: rolling back to `<model>.prev` (+exp N-1)
|
|
13
|
-
* re-teaches what the discarded version had learned, and a fresh base (no suffix,
|
|
14
|
-
* N = 0) — a newly downloaded Evermind — gets every procedure again.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import type {
|
|
18
|
-
adaptPackage,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const pending =
|
|
84
|
-
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Teach the person's private Evermind what they have done.
|
|
3
|
+
*
|
|
4
|
+
* Experience becomes text through the engine (`experienceDocuments`: each skill or
|
|
5
|
+
* uncompiled demonstration as a written procedure), and the text becomes weights
|
|
6
|
+
* through the engine's ONE adaptation recipe (`adaptPackage`). This module only
|
|
7
|
+
* decides what is new, runs the passes over the local model file and writes the
|
|
8
|
+
* result back, keeping the previous model beside it.
|
|
9
|
+
*
|
|
10
|
+
* "What is new" is the store's learned ledger. Every adaptation writes `<base>+expN`
|
|
11
|
+
* and records N against each procedure it learned, so a loaded model trusts exactly
|
|
12
|
+
* the entries at or below its own N: rolling back to `<model>.prev` (+exp N-1)
|
|
13
|
+
* re-teaches what the discarded version had learned, and a fresh base (no suffix,
|
|
14
|
+
* N = 0) — a newly downloaded Evermind — gets every procedure again.
|
|
15
|
+
*/
|
|
16
|
+
|
|
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";
|
|
28
|
+
import type { LoadedEvermind } from "../model/evermind-package.js";
|
|
29
|
+
|
|
30
|
+
/** The engine functions training needs, passed in so the peer stays optional. */
|
|
31
|
+
export interface TrainEngine {
|
|
32
|
+
experienceDocuments: typeof experienceDocuments;
|
|
33
|
+
packDocuments: typeof packDocuments;
|
|
34
|
+
adaptPackage: typeof adaptPackage;
|
|
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;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** What curation left out of a pass, when it ran. */
|
|
42
|
+
export type CurationReport = { dropped: CurationResult["dropped"] };
|
|
43
|
+
|
|
44
|
+
export type TrainOutcome =
|
|
45
|
+
| { status: "nothing_new"; pending: 0; version: 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
|
+
};
|
|
57
|
+
|
|
58
|
+
const EXP_SUFFIX = /\+exp(\d+)$/;
|
|
59
|
+
|
|
60
|
+
/** The version an adaptation writes: `<base>+exp1`, then `+exp2`, … */
|
|
61
|
+
export function nextExperienceVersion(version: string): string {
|
|
62
|
+
const m = EXP_SUFFIX.exec(version);
|
|
63
|
+
return m ? version.replace(EXP_SUFFIX, `+exp${Number(m[1]) + 1}`) : `${version}+exp1`;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Which adaptation produced this model: N for `+expN`, 0 for a base that has none. */
|
|
67
|
+
export function experienceIndex(version: string): number {
|
|
68
|
+
const m = EXP_SUFFIX.exec(version);
|
|
69
|
+
return m ? Number(m[1]) : 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
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) {
|
|
78
|
+
const current = experienceIndex(modelVersion);
|
|
79
|
+
const learnedAt = (id: string): number | null => {
|
|
80
|
+
const n = snap.learned[id];
|
|
81
|
+
return typeof n === "number" && n >= 1 && n <= current ? n : null;
|
|
82
|
+
};
|
|
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) };
|
|
92
|
+
}
|
|
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
|
+
|
|
115
|
+
export async function trainExperience(
|
|
116
|
+
store: ExperienceStore,
|
|
117
|
+
engine: TrainEngine,
|
|
118
|
+
model: LoadedEvermind,
|
|
119
|
+
modelFile: string,
|
|
120
|
+
opts: TrainExperienceOptions = {},
|
|
121
|
+
): Promise<TrainOutcome> {
|
|
122
|
+
const version = model.pkg.manifest.version ?? "0";
|
|
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: [] } };
|
|
140
|
+
|
|
141
|
+
const next = nextExperienceVersion(version);
|
|
142
|
+
// The engine's package type; the structural view is what was loaded from disk.
|
|
143
|
+
let pkg = model.pkg as unknown as Parameters<typeof adaptPackage>[0];
|
|
144
|
+
const learned: string[] = [];
|
|
145
|
+
let lossSum = 0;
|
|
146
|
+
let passes = 0;
|
|
147
|
+
for (const pass of engine.packDocuments(docs, engine.EVERMIND_ADAPT_MAX_CHARS)) {
|
|
148
|
+
const r = engine.adaptPackage(pkg, model.codec, pass.map((d) => d.text).join("\n\n"), next);
|
|
149
|
+
if (!r) continue;
|
|
150
|
+
pkg = r.pkg;
|
|
151
|
+
lossSum += r.loss;
|
|
152
|
+
passes++;
|
|
153
|
+
learned.push(...pass.map((d) => d.id));
|
|
154
|
+
}
|
|
155
|
+
if (passes === 0) return { status: "no_window", pending: docs.length, version, ...(curation ? { curation } : {}) };
|
|
156
|
+
|
|
157
|
+
const loss = lossSum / passes;
|
|
158
|
+
// Keep the model this pass started from, so one bad adaptation is one rename away
|
|
159
|
+
// from undone. The new model is written beside the old one and renamed into place,
|
|
160
|
+
// so a crash mid-write never leaves a truncated model. The ledger is written only
|
|
161
|
+
// after the new model is on disk.
|
|
162
|
+
const previousModel = `${modelFile}.prev`;
|
|
163
|
+
model.fs.copyFileSync(modelFile, previousModel);
|
|
164
|
+
const staged = `${modelFile}.next`;
|
|
165
|
+
model.fs.writeFileSync(staged, new Uint8Array(pkg.toBlob()));
|
|
166
|
+
model.fs.renameSync(staged, modelFile);
|
|
167
|
+
await store.recordAdaptation({ index: experienceIndex(next), version: next, learned, passes, loss, at: Date.now() });
|
|
168
|
+
return { status: "trained", learned: learned.length, passes, loss, version: next, previousModel, ...(curation ? { curation } : {}) };
|
|
169
|
+
}
|