@seanhogg/builderforce-memory-mcp 2026.9.28 → 2026.9.29
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 +25 -0
- package/dist/backends/memory-store.d.ts.map +1 -1
- package/dist/backends/memory-store.js +15 -68
- package/dist/backends/memory-store.js.map +1 -1
- package/dist/bin/http.d.ts +1 -0
- package/dist/bin/http.d.ts.map +1 -1
- package/dist/bin/http.js +9 -0
- package/dist/bin/http.js.map +1 -1
- package/dist/bin/stdio.d.ts +4 -0
- package/dist/bin/stdio.d.ts.map +1 -1
- package/dist/bin/stdio.js +7 -0
- package/dist/bin/stdio.js.map +1 -1
- package/dist/dynamic-import.d.ts +10 -0
- package/dist/dynamic-import.d.ts.map +1 -0
- package/dist/dynamic-import.js +13 -0
- package/dist/dynamic-import.js.map +1 -0
- package/dist/embedding/evermind-embedder.d.ts +0 -1
- package/dist/embedding/evermind-embedder.d.ts.map +1 -1
- package/dist/embedding/evermind-embedder.js +8 -44
- package/dist/embedding/evermind-embedder.js.map +1 -1
- package/dist/experience/file-store.d.ts +52 -0
- package/dist/experience/file-store.d.ts.map +1 -0
- package/dist/experience/file-store.js +119 -0
- package/dist/experience/file-store.js.map +1 -0
- package/dist/experience/host.d.ts +46 -0
- package/dist/experience/host.d.ts.map +1 -0
- package/dist/experience/host.js +57 -0
- package/dist/experience/host.js.map +1 -0
- package/dist/experience/tools.d.ts +16 -0
- package/dist/experience/tools.d.ts.map +1 -0
- package/dist/experience/tools.js +279 -0
- package/dist/experience/tools.js.map +1 -0
- package/dist/experience/train.d.ts +48 -0
- package/dist/experience/train.d.ts.map +1 -0
- package/dist/experience/train.js +72 -0
- package/dist/experience/train.js.map +1 -0
- package/dist/gateway-tools.d.ts +8 -0
- package/dist/gateway-tools.d.ts.map +1 -0
- package/dist/gateway-tools.js +71 -0
- package/dist/gateway-tools.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/model/evermind-package.d.ts +55 -0
- package/dist/model/evermind-package.d.ts.map +1 -0
- package/dist/model/evermind-package.js +86 -0
- package/dist/model/evermind-package.js.map +1 -0
- package/dist/persistence/shared-json-file.d.ts +65 -0
- package/dist/persistence/shared-json-file.d.ts.map +1 -0
- package/dist/persistence/shared-json-file.js +110 -0
- package/dist/persistence/shared-json-file.js.map +1 -0
- package/dist/tool-core.d.ts +28 -0
- package/dist/tool-core.d.ts.map +1 -0
- package/dist/tool-core.js +19 -0
- package/dist/tool-core.js.map +1 -0
- package/dist/tools.d.ts +9 -17
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +5 -73
- package/dist/tools.js.map +1 -1
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +8 -1
- package/dist/transports/http.js.map +1 -1
- package/dist/transports/sdk.d.ts.map +1 -1
- package/dist/transports/sdk.js +2 -4
- package/dist/transports/sdk.js.map +1 -1
- package/package.json +6 -6
- package/server.json +3 -3
- package/src/backends/memory-store.ts +16 -85
- package/src/bin/http.ts +12 -0
- package/src/bin/stdio.ts +7 -0
- package/src/dynamic-import.ts +12 -0
- package/src/embedding/evermind-embedder.ts +11 -61
- package/src/experience/file-store.ts +143 -0
- package/src/experience/host.ts +113 -0
- package/src/experience/tools.ts +363 -0
- package/src/experience/train.ts +96 -0
- package/src/gateway-tools.ts +97 -0
- package/src/index.ts +8 -1
- package/src/model/evermind-package.ts +127 -0
- package/src/persistence/shared-json-file.ts +131 -0
- package/src/tool-core.ts +39 -0
- package/src/tools.ts +13 -116
- package/src/transports/http.ts +8 -1
- package/src/transports/sdk.ts +2 -5
package/README.md
CHANGED
|
@@ -115,6 +115,31 @@ const backend = await createLocalMemoryStoreBackend({ runtime: ssmMemoryService.
|
|
|
115
115
|
|
|
116
116
|
Either way, recall quality improves automatically as that model is adapted/distilled.
|
|
117
117
|
|
|
118
|
+
## Experience — what Evermind has done (opt-in)
|
|
119
|
+
|
|
120
|
+
Facts are one kind of learned item; **experience** is another. An *episode* is a
|
|
121
|
+
recorded demonstration (a program and the UI steps a person took in it), a *skill* is
|
|
122
|
+
what Train Once compiles from one (typed values become parameters, secrets never stored,
|
|
123
|
+
irreversible clicks gated for approval), and a *run* is one execution with its audit
|
|
124
|
+
trail. The domain lives in `@seanhogg/builderforce-memory-engine`; this server keeps it
|
|
125
|
+
durable and exposes it.
|
|
126
|
+
|
|
127
|
+
Set `BUILDERFORCE_MEMORY_EXPERIENCE=1` to register the tools (Synapse does). Off by
|
|
128
|
+
default, so ordinary coding-agent installs never carry them in their tool list.
|
|
129
|
+
|
|
130
|
+
| Tools | |
|
|
131
|
+
|---|---|
|
|
132
|
+
| `experience_info` | Snapshot file, screenshot folder, model path, counts. |
|
|
133
|
+
| `experience_forget_all` | Delete every episode, screenshot, skill and run (`confirm: true`). Memories and the model are untouched. |
|
|
134
|
+
| `episode_save` / `_list` / `_get` / `_forget` | Demonstrations. Screenshots go in `episodes/<id>/` and are deleted with the episode. |
|
|
135
|
+
| `skill_preview` / `_compile` / `_list` / `_get` / `_forget` / `_schedule`, `skills_due` | Train Once and routines. |
|
|
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`. |
|
|
138
|
+
|
|
139
|
+
Stored beside the memory snapshot as `experience.json` (shared across processes exactly
|
|
140
|
+
like `memory.json`) plus `episodes/`. Never served to a token-selected tenant of the
|
|
141
|
+
HTTP handler.
|
|
142
|
+
|
|
118
143
|
## One-shot install into any MCP host (not just Claude)
|
|
119
144
|
|
|
120
145
|
```bash
|
|
@@ -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;
|
|
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"}
|
|
@@ -13,6 +13,8 @@
|
|
|
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
15
|
*/
|
|
16
|
+
import { dynamicImport } from "../dynamic-import.js";
|
|
17
|
+
import { SharedJsonFile } from "../persistence/shared-json-file.js";
|
|
16
18
|
function toHit(e, score) {
|
|
17
19
|
return {
|
|
18
20
|
key: e.key,
|
|
@@ -64,20 +66,6 @@ export class MemoryStoreBackend {
|
|
|
64
66
|
await this.store.forget(key);
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
|
-
/**
|
|
68
|
-
* FNV-1a over the snapshot text. Non-cryptographic on purpose: this only has to
|
|
69
|
-
* separate "someone rewrote the file" from "the mtime moved but the bytes are
|
|
70
|
-
* ours", and node:crypto is deliberately not imported here (this module must stay
|
|
71
|
-
* bundleable for the browser, where the disk path is never taken).
|
|
72
|
-
*/
|
|
73
|
-
function contentHash(text) {
|
|
74
|
-
let h = 0x811c9dc5;
|
|
75
|
-
for (let i = 0; i < text.length; i++) {
|
|
76
|
-
h ^= text.charCodeAt(i);
|
|
77
|
-
h = Math.imul(h, 0x01000193);
|
|
78
|
-
}
|
|
79
|
-
return (h >>> 0).toString(16);
|
|
80
|
-
}
|
|
81
69
|
/** Parse a snapshot's text into its durable entries, or null when unusable. */
|
|
82
70
|
function parseSnapshot(text) {
|
|
83
71
|
let parsed;
|
|
@@ -106,22 +94,17 @@ function parseSnapshot(text) {
|
|
|
106
94
|
* {@link DiskPersistedBackend.ensureFresh}, which re-hydrates the store from disk
|
|
107
95
|
* when — and only when — the file changed underneath us.
|
|
108
96
|
*
|
|
109
|
-
* The loop guard
|
|
110
|
-
*
|
|
111
|
-
* without reading a byte. A stat per call is the entire steady-state cost.
|
|
97
|
+
* The freshness check and the loop guard are {@link SharedJsonFile}'s — the one
|
|
98
|
+
* implementation every shared local store (memory, experience) uses.
|
|
112
99
|
*/
|
|
113
100
|
class DiskPersistedBackend {
|
|
114
101
|
inner;
|
|
115
102
|
store;
|
|
116
103
|
file;
|
|
117
|
-
|
|
118
|
-
/** How the file looked when this process last wrote or read it. */
|
|
119
|
-
stamp = null;
|
|
120
|
-
constructor(inner, store, file, fs) {
|
|
104
|
+
constructor(inner, store, file) {
|
|
121
105
|
this.inner = inner;
|
|
122
106
|
this.store = store;
|
|
123
107
|
this.file = file;
|
|
124
|
-
this.fs = fs;
|
|
125
108
|
}
|
|
126
109
|
async recall(query, topK) {
|
|
127
110
|
await this.ensureFresh();
|
|
@@ -162,39 +145,17 @@ class DiskPersistedBackend {
|
|
|
162
145
|
* two different paths.
|
|
163
146
|
*/
|
|
164
147
|
async ensureFresh() {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
let st;
|
|
168
|
-
try {
|
|
169
|
-
st = this.fs.statSync(this.file);
|
|
170
|
-
}
|
|
171
|
-
catch {
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
// Fast path: byte-for-byte what we last wrote. No read, no parse, no writes.
|
|
175
|
-
if (this.stamp && st.mtimeMs === this.stamp.mtimeMs && st.size === this.stamp.size)
|
|
148
|
+
const changed = this.file.readIfChanged();
|
|
149
|
+
if (!changed)
|
|
176
150
|
return;
|
|
177
|
-
|
|
178
|
-
try {
|
|
179
|
-
text = this.fs.readFileSync(this.file, "utf8");
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
const hash = contentHash(text);
|
|
185
|
-
// Touched (mtime moved) but identical content — re-stamp, don't re-hydrate.
|
|
186
|
-
if (this.stamp && hash === this.stamp.hash) {
|
|
187
|
-
this.stamp = { mtimeMs: st.mtimeMs, size: st.size, hash };
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
const entries = parseSnapshot(text);
|
|
151
|
+
const entries = parseSnapshot(changed.text);
|
|
191
152
|
// Corrupt/partial snapshot (a half-written file, say): keep what we have
|
|
192
153
|
// rather than wiping the live store, and leave the stamp alone so the next
|
|
193
154
|
// call re-checks.
|
|
194
155
|
if (!entries)
|
|
195
156
|
return;
|
|
196
157
|
await this.replaceStore(entries);
|
|
197
|
-
|
|
158
|
+
changed.accept();
|
|
198
159
|
}
|
|
199
160
|
/**
|
|
200
161
|
* Make the in-memory store equal the snapshot: drop keys the file no longer has,
|
|
@@ -220,17 +181,7 @@ class DiskPersistedBackend {
|
|
|
220
181
|
tags: e.tags,
|
|
221
182
|
importance: e.importance,
|
|
222
183
|
}));
|
|
223
|
-
|
|
224
|
-
this.fs.writeFileSync(this.file, json);
|
|
225
|
-
// Stamp OUR write immediately — this is what stops the watch above from
|
|
226
|
-
// treating our own output as an external edit (and looping).
|
|
227
|
-
try {
|
|
228
|
-
const st = this.fs.statSync(this.file);
|
|
229
|
-
this.stamp = { mtimeMs: st.mtimeMs, size: st.size, hash: contentHash(json) };
|
|
230
|
-
}
|
|
231
|
-
catch {
|
|
232
|
-
this.stamp = null;
|
|
233
|
-
}
|
|
184
|
+
this.file.write(JSON.stringify(out, null, 2));
|
|
234
185
|
}
|
|
235
186
|
}
|
|
236
187
|
/**
|
|
@@ -240,16 +191,12 @@ class DiskPersistedBackend {
|
|
|
240
191
|
* wants a custom backend (or the HTTP thin-client) never has to install them.
|
|
241
192
|
*/
|
|
242
193
|
export async function createLocalMemoryStoreBackend(opts = {}) {
|
|
243
|
-
|
|
244
|
-
const _import = (m) =>
|
|
245
|
-
// eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func
|
|
246
|
-
new Function("m", "return import(m)")(m);
|
|
247
|
-
const memoryMod = (await _import("@seanhogg/builderforce-memory"));
|
|
194
|
+
const memoryMod = (await dynamicImport("@seanhogg/builderforce-memory"));
|
|
248
195
|
const { MemoryStore } = memoryMod;
|
|
249
196
|
// IndexedDB shim for Node. In the browser the global is used automatically.
|
|
250
197
|
let idbFactory;
|
|
251
198
|
try {
|
|
252
|
-
const fake = (await
|
|
199
|
+
const fake = (await dynamicImport("fake-indexeddb"));
|
|
253
200
|
idbFactory = new fake.IDBFactory();
|
|
254
201
|
}
|
|
255
202
|
catch {
|
|
@@ -261,12 +208,12 @@ export async function createLocalMemoryStoreBackend(opts = {}) {
|
|
|
261
208
|
return backend;
|
|
262
209
|
// Disk-mirror requested. node:fs/path are loaded indirectly so a browser
|
|
263
210
|
// bundle of this module never statically pulls in Node builtins.
|
|
264
|
-
const fs = (await
|
|
265
|
-
const path = (await
|
|
211
|
+
const fs = (await dynamicImport("node:fs"));
|
|
212
|
+
const path = (await dynamicImport("node:path"));
|
|
266
213
|
const dir = path.dirname(opts.persistFile);
|
|
267
214
|
if (dir && !fs.existsSync(dir))
|
|
268
215
|
fs.mkdirSync(dir, { recursive: true });
|
|
269
|
-
const persisted = new DiskPersistedBackend(backend, store, opts.persistFile, fs);
|
|
216
|
+
const persisted = new DiskPersistedBackend(backend, store, new SharedJsonFile(opts.persistFile, fs));
|
|
270
217
|
// Boot hydration IS the freshness check with no stamp yet — see ensureFresh().
|
|
271
218
|
await persisted.ensureFresh();
|
|
272
219
|
return persisted;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/backends/memory-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/backends/memory-store.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/http.d.ts
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* BUILDERFORCE_MEMORY_VECTORS Persistent vector-cache path.
|
|
17
17
|
* BUILDERFORCE_GATEWAY_URL Gateway base URL (default https://api.builderforce.ai).
|
|
18
18
|
* BUILDERFORCE_API_KEY `bfk_*` tenant key. When set, exposes the cost tools.
|
|
19
|
+
* BUILDERFORCE_MEMORY_EXPERIENCE '1' to expose the experience tools.
|
|
19
20
|
*/
|
|
20
21
|
export {};
|
|
21
22
|
//# sourceMappingURL=http.d.ts.map
|
package/dist/bin/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/bin/http.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/bin/http.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;GAkBG"}
|
package/dist/bin/http.js
CHANGED
|
@@ -16,15 +16,20 @@
|
|
|
16
16
|
* BUILDERFORCE_MEMORY_VECTORS Persistent vector-cache path.
|
|
17
17
|
* BUILDERFORCE_GATEWAY_URL Gateway base URL (default https://api.builderforce.ai).
|
|
18
18
|
* BUILDERFORCE_API_KEY `bfk_*` tenant key. When set, exposes the cost tools.
|
|
19
|
+
* BUILDERFORCE_MEMORY_EXPERIENCE '1' to expose the experience tools.
|
|
19
20
|
*/
|
|
20
21
|
import http from "node:http";
|
|
21
22
|
import { createLocalMemoryStoreBackend } from "../backends/memory-store.js";
|
|
22
23
|
import { createRecallEmbedder } from "../embedding/index.js";
|
|
24
|
+
import { createExperienceHost } from "../experience/host.js";
|
|
23
25
|
import { resolveMemoryFile } from "../install/server-spec.js";
|
|
24
26
|
import { createMemoryHttpHandler } from "../transports/http.js";
|
|
25
27
|
const memoryFile = resolveMemoryFile();
|
|
26
28
|
const backend = await createLocalMemoryStoreBackend({
|
|
27
29
|
dbName: process.env["BUILDERFORCE_MEMORY_DB"],
|
|
30
|
+
// Durable like the stdio bin — without it every restart of this server lost the
|
|
31
|
+
// store even though BUILDERFORCE_MEMORY_FILE was documented as its snapshot.
|
|
32
|
+
persistFile: memoryFile,
|
|
28
33
|
// Same embedder decision as the stdio bin, from the same helper — the two
|
|
29
34
|
// servers must not rank recall differently.
|
|
30
35
|
runtime: (await createRecallEmbedder({ memoryFile })) ?? undefined,
|
|
@@ -36,7 +41,11 @@ const handler = createMemoryHttpHandler(backend, {
|
|
|
36
41
|
// exposed when an API key is present; URL defaults to the public gateway.
|
|
37
42
|
gatewayUrl: process.env["BUILDERFORCE_GATEWAY_URL"] ?? "https://api.builderforce.ai",
|
|
38
43
|
gatewayApiKey: process.env["BUILDERFORCE_API_KEY"],
|
|
44
|
+
experience: await createExperienceHost({ memoryFile }),
|
|
39
45
|
});
|
|
46
|
+
if (process.env["BUILDERFORCE_MEMORY_EXPERIENCE"] === "1" && !process.env["BUILDERFORCE_MEMORY_TOKEN"]) {
|
|
47
|
+
process.stderr.write("[builderforce-memory-mcp-http] experience tools stay off: they are served only to callers holding BUILDERFORCE_MEMORY_TOKEN\n");
|
|
48
|
+
}
|
|
40
49
|
const port = Number(process.env["PORT"] ?? 8787);
|
|
41
50
|
http.createServer((req, res) => {
|
|
42
51
|
void handler(req, res).catch((err) => {
|
package/dist/bin/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/bin/http.ts"],"names":[],"mappings":";AACA
|
|
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"}
|
package/dist/bin/stdio.d.ts
CHANGED
|
@@ -23,6 +23,10 @@
|
|
|
23
23
|
* BUILDERFORCE_GATEWAY_URL Gateway base URL (default https://api.builderforce.ai).
|
|
24
24
|
* BUILDERFORCE_API_KEY `bfk_*` tenant key. When set, exposes the cost tools
|
|
25
25
|
* (token_usage, model_efficiency).
|
|
26
|
+
* BUILDERFORCE_MEMORY_EXPERIENCE '1' to expose the experience tools (episodes, Train
|
|
27
|
+
* Once skills, runs, experience_train). Kept beside the
|
|
28
|
+
* snapshot in experience.json + episodes/; trains the
|
|
29
|
+
* BUILDERFORCE_MEMORY_MODEL package.
|
|
26
30
|
*
|
|
27
31
|
* With no model configured recall ranks lexically (BM25) and the tool result SAYS
|
|
28
32
|
* so ("Ranked by: lexical recall (fallback …)"), so a degrade is never silent.
|
package/dist/bin/stdio.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/bin/stdio.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/bin/stdio.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG"}
|
package/dist/bin/stdio.js
CHANGED
|
@@ -23,12 +23,17 @@
|
|
|
23
23
|
* BUILDERFORCE_GATEWAY_URL Gateway base URL (default https://api.builderforce.ai).
|
|
24
24
|
* BUILDERFORCE_API_KEY `bfk_*` tenant key. When set, exposes the cost tools
|
|
25
25
|
* (token_usage, model_efficiency).
|
|
26
|
+
* BUILDERFORCE_MEMORY_EXPERIENCE '1' to expose the experience tools (episodes, Train
|
|
27
|
+
* Once skills, runs, experience_train). Kept beside the
|
|
28
|
+
* snapshot in experience.json + episodes/; trains the
|
|
29
|
+
* BUILDERFORCE_MEMORY_MODEL package.
|
|
26
30
|
*
|
|
27
31
|
* With no model configured recall ranks lexically (BM25) and the tool result SAYS
|
|
28
32
|
* so ("Ranked by: lexical recall (fallback …)"), so a degrade is never silent.
|
|
29
33
|
*/
|
|
30
34
|
import { createLocalMemoryStoreBackend } from "../backends/memory-store.js";
|
|
31
35
|
import { createRecallEmbedder } from "../embedding/index.js";
|
|
36
|
+
import { createExperienceHost } from "../experience/host.js";
|
|
32
37
|
import { resolveMemoryFile } from "../install/server-spec.js";
|
|
33
38
|
import { runStdio } from "../transports/stdio.js";
|
|
34
39
|
const memoryFile = resolveMemoryFile();
|
|
@@ -45,5 +50,7 @@ await runStdio(backend, {
|
|
|
45
50
|
// exposed when an API key is present; URL defaults to the public gateway.
|
|
46
51
|
gatewayUrl: process.env["BUILDERFORCE_GATEWAY_URL"] ?? "https://api.builderforce.ai",
|
|
47
52
|
gatewayApiKey: process.env["BUILDERFORCE_API_KEY"],
|
|
53
|
+
// Null unless BUILDERFORCE_MEMORY_EXPERIENCE=1 — Synapse's opt-in.
|
|
54
|
+
experience: await createExperienceHost({ memoryFile }),
|
|
48
55
|
});
|
|
49
56
|
//# sourceMappingURL=stdio.js.map
|
package/dist/bin/stdio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/bin/stdio.ts"],"names":[],"mappings":";AACA
|
|
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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load a module by name at run time without the bundler or tsc resolving it.
|
|
3
|
+
*
|
|
4
|
+
* The optional peers (the memory runtime, the engine, fake-indexeddb, the Claude
|
|
5
|
+
* Agent SDK) and Node builtins are reached through this, so a consumer that never
|
|
6
|
+
* takes those paths — a browser bundle, a custom backend, the HTTP thin client —
|
|
7
|
+
* never has to install or ship them.
|
|
8
|
+
*/
|
|
9
|
+
export declare function dynamicImport(m: string): Promise<unknown>;
|
|
10
|
+
//# sourceMappingURL=dynamic-import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-import.d.ts","sourceRoot":"","sources":["../src/dynamic-import.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGzD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load a module by name at run time without the bundler or tsc resolving it.
|
|
3
|
+
*
|
|
4
|
+
* The optional peers (the memory runtime, the engine, fake-indexeddb, the Claude
|
|
5
|
+
* Agent SDK) and Node builtins are reached through this, so a consumer that never
|
|
6
|
+
* takes those paths — a browser bundle, a custom backend, the HTTP thin client —
|
|
7
|
+
* never has to install or ship them.
|
|
8
|
+
*/
|
|
9
|
+
export function dynamicImport(m) {
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func
|
|
11
|
+
return new Function("m", "return import(m)")(m);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=dynamic-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-import.js","sourceRoot":"","sources":["../src/dynamic-import.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS;IACnC,2EAA2E;IAC3E,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAqB,CAAC;AACxE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evermind-embedder.d.ts","sourceRoot":"","sources":["../../src/embedding/evermind-embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"evermind-embedder.d.ts","sourceRoot":"","sources":["../../src/embedding/evermind-embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C,oBAAoB;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAChC;AAED,yDAAyD;AACzD,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC5D,sEAAsE;IACtE,KAAK,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACpC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,KAAK,MAAM,GAAG;IACV,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAChD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACrC,CAAC;AAaF;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CACxC,IAAI,EAAE,uBAAuB,GAC9B,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAcxC;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,sBAAsB;IAazD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAbvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IACzD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAA8C;gBAGtC,KAAK,EAAE,gBAAgB,EACvB,EAAE,EAAE,MAAM,EAC3B,IAAI,EAAE,IAAI,CAAC,uBAAuB,EAAE,WAAW,GAAG,YAAY,GAAG,cAAc,CAAC;IAU9E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAahD,iEAAiE;IACjE,KAAK,IAAI,IAAI;IAmBb,OAAO,CAAC,GAAG;IAUX;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAUhB;;;;OAIG;IACH,OAAO,CAAC,OAAO;CAelB"}
|
|
@@ -20,26 +20,10 @@
|
|
|
20
20
|
* memory snapshot, written by the process that owns it, tolerant of a corrupt or
|
|
21
21
|
* absent file (drop it and recompute — a cache is never the source of truth).
|
|
22
22
|
*/
|
|
23
|
+
import { dynamicImport } from "../dynamic-import.js";
|
|
24
|
+
import { loadEvermindPackage } from "../model/evermind-package.js";
|
|
23
25
|
const DEFAULT_MAX_ENTRIES = 4000;
|
|
24
26
|
const DEFAULT_FLUSH_DELAY_MS = 500;
|
|
25
|
-
/** Indirect import so the optional engine peer is never statically resolved. */
|
|
26
|
-
function dynamicImport(m) {
|
|
27
|
-
// eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func
|
|
28
|
-
return new Function("m", "return import(m)")(m);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Load the tokenizer spec from `file`, accepting either `BPETokenizer.toObject()`
|
|
32
|
-
* output or a Hugging Face `tokenizer.json`.
|
|
33
|
-
*/
|
|
34
|
-
function loadCodec(engine, fs, file) {
|
|
35
|
-
const spec = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
36
|
-
const tok = new engine.BPETokenizer();
|
|
37
|
-
if (spec.vocab && spec.merges)
|
|
38
|
-
tok.loadFromSpec(spec);
|
|
39
|
-
else
|
|
40
|
-
tok.loadHuggingFace(spec);
|
|
41
|
-
return tok;
|
|
42
|
-
}
|
|
43
27
|
/**
|
|
44
28
|
* Build a CPU text embedder from a `.evermind` package + its tokenizer, wrapped in
|
|
45
29
|
* a persistent vector cache.
|
|
@@ -52,34 +36,14 @@ function loadCodec(engine, fs, file) {
|
|
|
52
36
|
*/
|
|
53
37
|
export async function createEvermindEmbedder(opts) {
|
|
54
38
|
try {
|
|
55
|
-
const
|
|
56
|
-
if (!
|
|
39
|
+
const loaded = await loadEvermindPackage(opts.modelFile, opts.tokenizerFile);
|
|
40
|
+
if (!loaded)
|
|
57
41
|
return null;
|
|
58
|
-
const
|
|
59
|
-
if (!
|
|
60
|
-
return null;
|
|
61
|
-
const bytes = fs.readFileSync(opts.modelFile);
|
|
62
|
-
const blob = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
|
|
63
|
-
const pkg = engine.EvermindModelPackage.fromBlob(blob);
|
|
64
|
-
if (pkg.manifest.modelType !== "evermind-lm")
|
|
42
|
+
const engine = (await dynamicImport("@seanhogg/builderforce-memory-engine"));
|
|
43
|
+
if (!engine?.EvermindTextEmbedder)
|
|
65
44
|
return null;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
// wrong vocabulary — which a separate file silently can be. Falling back to a
|
|
69
|
-
// file keeps every package written before the section existed working.
|
|
70
|
-
const embedded = pkg.loadTokenizer?.() ?? null;
|
|
71
|
-
let codec;
|
|
72
|
-
if (embedded) {
|
|
73
|
-
codec = embedded;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
const tokenizerFile = opts.tokenizerFile ?? `${opts.modelFile}.tokenizer.json`;
|
|
77
|
-
if (!fs.existsSync(tokenizerFile))
|
|
78
|
-
return null;
|
|
79
|
-
codec = loadCodec(engine, fs, tokenizerFile);
|
|
80
|
-
}
|
|
81
|
-
const inner = new engine.EvermindTextEmbedder(pkg.loadLM(), codec);
|
|
82
|
-
return new CachedTextEmbedder(inner, fs, opts);
|
|
45
|
+
const inner = new engine.EvermindTextEmbedder(loaded.pkg.loadLM(), loaded.codec);
|
|
46
|
+
return new CachedTextEmbedder(inner, loaded.fs, opts);
|
|
83
47
|
}
|
|
84
48
|
catch {
|
|
85
49
|
// Any failure to stand the model up is a degrade, not a fault.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evermind-embedder.js","sourceRoot":"","sources":["../../src/embedding/evermind-embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"evermind-embedder.js","sourceRoot":"","sources":["../../src/embedding/evermind-embedder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The engine's experience store, made durable on disk.
|
|
3
|
+
*
|
|
4
|
+
* The engine owns experience — the types, Train Once, the snapshot format and the
|
|
5
|
+
* reference `InMemoryExperienceStore`. This host adds only what a pure package
|
|
6
|
+
* cannot: the snapshot lives in `experience.json` beside `memory.json`, shared by
|
|
7
|
+
* every process on the machine the same way memories are (one {@link SharedJsonFile}
|
|
8
|
+
* implementation, so the freshness check and the loop guard are the memory store's),
|
|
9
|
+
* and each episode's screenshots live in `episodes/<id>/`, removed when it is forgotten.
|
|
10
|
+
*/
|
|
11
|
+
import type { Adaptation, Episode, EpisodeSummary, ExperienceSnapshot, ExperienceStore, InMemoryExperienceStore, Run, RunStepLog, Skill } from "@seanhogg/builderforce-memory-engine";
|
|
12
|
+
import type { SharedJsonFile } from "../persistence/shared-json-file.js";
|
|
13
|
+
/** The filesystem calls the store makes besides the snapshot's own. */
|
|
14
|
+
export interface EpisodeFolders {
|
|
15
|
+
/**
|
|
16
|
+
* Delete one episode's screenshot folder, if it exists. Only ever called with a safe
|
|
17
|
+
* id. Forgetting everything calls this once per KNOWN episode — never a recursive
|
|
18
|
+
* delete of the parent, which sits beside a user-chosen memory file.
|
|
19
|
+
*/
|
|
20
|
+
remove(episodeId: string): void;
|
|
21
|
+
}
|
|
22
|
+
/** Episode ids are also folder names — anything that could leave the folder is refused. */
|
|
23
|
+
export declare function isSafeExperienceId(id: string): boolean;
|
|
24
|
+
export declare class FileExperienceStore implements ExperienceStore {
|
|
25
|
+
private readonly inner;
|
|
26
|
+
private readonly file;
|
|
27
|
+
private readonly parse;
|
|
28
|
+
private readonly folders;
|
|
29
|
+
constructor(inner: InMemoryExperienceStore, file: SharedJsonFile, parse: (raw: unknown) => ExperienceSnapshot, folders: EpisodeFolders);
|
|
30
|
+
/**
|
|
31
|
+
* Absorb the file when another process rewrote it. Also the boot hydration. A file
|
|
32
|
+
* that does not parse is left unabsorbed (a half-written snapshot): the store keeps
|
|
33
|
+
* what it has and the next call looks again.
|
|
34
|
+
*/
|
|
35
|
+
private fresh;
|
|
36
|
+
putEpisode(episode: Episode): Promise<void>;
|
|
37
|
+
getEpisode(id: string): Promise<Episode | undefined>;
|
|
38
|
+
listEpisodes(): Promise<EpisodeSummary[]>;
|
|
39
|
+
deleteEpisode(id: string): Promise<boolean>;
|
|
40
|
+
putSkill(skill: Skill): Promise<void>;
|
|
41
|
+
getSkill(id: string): Promise<Skill | undefined>;
|
|
42
|
+
listSkills(): Promise<Skill[]>;
|
|
43
|
+
deleteSkill(id: string): Promise<boolean>;
|
|
44
|
+
putRun(run: Run): Promise<void>;
|
|
45
|
+
appendRunStep(runId: string, step: RunStepLog): Promise<boolean>;
|
|
46
|
+
getRun(id: string): Promise<Run | undefined>;
|
|
47
|
+
listRuns(limit: number): Promise<Run[]>;
|
|
48
|
+
recordAdaptation(adaptation: Adaptation): Promise<void>;
|
|
49
|
+
snapshot(): Promise<ExperienceSnapshot>;
|
|
50
|
+
clear(): Promise<void>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=file-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-store.d.ts","sourceRoot":"","sources":["../../src/experience/file-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACR,UAAU,EACV,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,GAAG,EACH,UAAU,EACV,KAAK,EACR,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC3B;;;;OAIG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,qBAAa,mBAAoB,YAAW,eAAe;IAEnD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHP,KAAK,EAAE,uBAAuB,EAC9B,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,kBAAkB,EAC3C,OAAO,EAAE,cAAc;IAG5C;;;;OAIG;IACH,OAAO,CAAC,KAAK;IAsBP,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAIpD,YAAY,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIzC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO3C,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAIhD,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAI9B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKzC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAI5C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAKvC,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD,QAAQ,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAIvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B"}
|