dsh-mnemon 0.2.16 → 0.3.1
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 +16 -8
- package/README.zh-CN.md +16 -8
- package/SECURITY.md +12 -5
- package/lib/client.js +294 -33
- package/lib/contracts.js +36 -0
- package/lib/extension-sdk.js +238 -0
- package/lib/index.js +1944 -2865
- package/lib/kernel.js +1126 -0
- package/lib/layers/documents.js +31 -0
- package/lib/layers/memory-spaces.js +34 -0
- package/lib/layers/runtime.js +27 -0
- package/lib/provider-sdk.js +2 -0
- package/lib/registry-B9SdBRLo.js +2423 -0
- package/lib/strategy-default-three-tier.js +99 -0
- package/lib/strategy-sdk.js +56 -0
- package/lib/types/packages/contracts/src/index.d.ts +221 -0
- package/lib/types/packages/extension-sdk/src/index.d.ts +54 -0
- package/lib/types/packages/kernel/src/access.d.ts +14 -0
- package/lib/types/packages/kernel/src/catalog.d.ts +42 -0
- package/lib/types/packages/kernel/src/index.d.ts +5 -0
- package/lib/types/packages/kernel/src/kernel.d.ts +46 -0
- package/lib/types/packages/kernel/src/topology.d.ts +25 -0
- package/lib/types/packages/kernel/src/view.d.ts +78 -0
- package/lib/types/packages/layer-documents/src/index.d.ts +4 -0
- package/lib/types/packages/layer-memory-spaces/src/index.d.ts +4 -0
- package/lib/types/packages/layer-runtime/src/index.d.ts +4 -0
- package/lib/types/packages/provider-sdk/src/index.d.ts +19 -0
- package/lib/types/packages/strategy-default-three-tier/src/index.d.ts +7 -0
- package/lib/types/packages/strategy-sdk/src/index.d.ts +35 -0
- package/lib/types/{client → src/client}/api.d.ts +2 -1
- package/lib/types/{client → src/client}/locales.d.ts +38 -0
- package/lib/types/{contracts.d.ts → src/contracts.d.ts} +3 -0
- package/lib/types/{documents.d.ts → src/documents.d.ts} +7 -2
- package/lib/types/src/guidance.d.ts +23 -0
- package/lib/types/{index.d.ts → src/index.d.ts} +3 -1
- package/lib/types/{lifecycle.d.ts → src/lifecycle.d.ts} +5 -9
- package/lib/types/{live-runtime.d.ts → src/live-runtime.d.ts} +30 -3
- package/lib/types/{memory-bodies.d.ts → src/memory-bodies.d.ts} +3 -0
- package/lib/types/src/memory-receipts.d.ts +21 -0
- package/lib/types/src/memory-system/access.d.ts +2 -0
- package/lib/types/src/memory-system/catalog.d.ts +2 -0
- package/lib/types/src/memory-system/contracts.d.ts +2 -0
- package/lib/types/src/memory-system/defaults.d.ts +6 -0
- package/lib/types/src/memory-system/index.d.ts +7 -0
- package/lib/types/src/memory-system/kernel.d.ts +2 -0
- package/lib/types/src/memory-system/topology.d.ts +2 -0
- package/lib/types/src/memory-system/view.d.ts +2 -0
- package/lib/types/src/memory-view.d.ts +15 -0
- package/lib/types/src/provider-sdk.d.ts +4 -0
- package/lib/types/src/providers/memory-system.d.ts +6 -0
- package/lib/types/src/providers/registry.d.ts +23 -0
- package/lib/types/{runtime-memory.d.ts → src/runtime-memory.d.ts} +14 -5
- package/lib/types/src/search-tokens.d.ts +5 -0
- package/lib/types/{service.d.ts → src/service.d.ts} +9 -1
- package/lib/types/{shared → src/shared}/contracts.d.ts +25 -0
- package/lib/types/{subagent.d.ts → src/subagent.d.ts} +29 -21
- package/lib/types/{tools.d.ts → src/tools.d.ts} +2 -9
- package/package.json +42 -6
- package/lib/types/guidance.d.ts +0 -11
- /package/lib/types/{activity.d.ts → src/activity.d.ts} +0 -0
- /package/lib/types/{channels.d.ts → src/channels.d.ts} +0 -0
- /package/lib/types/{client → src/client}/GlobalLocationSetting.d.ts +0 -0
- /package/lib/types/{client → src/client}/MnemonDialog.d.ts +0 -0
- /package/lib/types/{client → src/client}/MnemonLogo.d.ts +0 -0
- /package/lib/types/{client → src/client}/MnemonPackSection.d.ts +0 -0
- /package/lib/types/{client → src/client}/MnemonSaveAction.d.ts +0 -0
- /package/lib/types/{client → src/client}/MnemonSettingsCard.d.ts +0 -0
- /package/lib/types/{client → src/client}/MnemonTurnTail.d.ts +0 -0
- /package/lib/types/{client → src/client}/MnemonView.d.ts +0 -0
- /package/lib/types/{client → src/client}/MnemonViewAppearance.d.ts +0 -0
- /package/lib/types/{client → src/client}/ProviderIcon.d.ts +0 -0
- /package/lib/types/{client → src/client}/ProviderSettingsSection.d.ts +0 -0
- /package/lib/types/{client → src/client}/anchor.d.ts +0 -0
- /package/lib/types/{client → src/client}/dsh-compat.d.ts +0 -0
- /package/lib/types/{client → src/client}/index.d.ts +0 -0
- /package/lib/types/{client → src/client}/settings.d.ts +0 -0
- /package/lib/types/{client → src/client}/sidebar-entry.d.ts +0 -0
- /package/lib/types/{client → src/client}/use-request-version.d.ts +0 -0
- /package/lib/types/{client → src/client}/workspace-controller.d.ts +0 -0
- /package/lib/types/{client → src/client}/workspace-mount.d.ts +0 -0
- /package/lib/types/{commands.d.ts → src/commands.d.ts} +0 -0
- /package/lib/types/{config-values.d.ts → src/config-values.d.ts} +0 -0
- /package/lib/types/{config.d.ts → src/config.d.ts} +0 -0
- /package/lib/types/{pack.d.ts → src/pack.d.ts} +0 -0
- /package/lib/types/{process.d.ts → src/process.d.ts} +0 -0
- /package/lib/types/{provider-placement.d.ts → src/provider-placement.d.ts} +0 -0
- /package/lib/types/{providers → src/providers}/byterover.d.ts +0 -0
- /package/lib/types/{providers → src/providers}/catalog.d.ts +0 -0
- /package/lib/types/{providers → src/providers}/hindsight.d.ts +0 -0
- /package/lib/types/{providers → src/providers}/holographic.d.ts +0 -0
- /package/lib/types/{providers → src/providers}/honcho.d.ts +0 -0
- /package/lib/types/{providers → src/providers}/http.d.ts +0 -0
- /package/lib/types/{providers → src/providers}/mem0.d.ts +0 -0
- /package/lib/types/{providers → src/providers}/openviking.d.ts +0 -0
- /package/lib/types/{providers → src/providers}/provider.d.ts +0 -0
- /package/lib/types/{providers → src/providers}/retaindb.d.ts +0 -0
- /package/lib/types/{providers → src/providers}/supermemory.d.ts +0 -0
- /package/lib/types/{recall-quality → src/recall-quality}/contracts.d.ts +0 -0
- /package/lib/types/{recall-quality → src/recall-quality}/engine.d.ts +0 -0
- /package/lib/types/{recall-quality → src/recall-quality}/index.d.ts +0 -0
- /package/lib/types/{recall-quality → src/recall-quality}/policies.d.ts +0 -0
- /package/lib/types/{recall-quality → src/recall-quality}/registry.d.ts +0 -0
- /package/lib/types/{review-activity.d.ts → src/review-activity.d.ts} +0 -0
- /package/lib/types/{rpc.d.ts → src/rpc.d.ts} +0 -0
- /package/lib/types/{runner.d.ts → src/runner.d.ts} +0 -0
- /package/lib/types/{settings.d.ts → src/settings.d.ts} +0 -0
- /package/lib/types/{storage-scope.d.ts → src/storage-scope.d.ts} +0 -0
- /package/lib/types/{version-updates.d.ts → src/version-updates.d.ts} +0 -0
package/lib/contracts.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region packages/contracts/src/index.ts
|
|
2
|
+
const BUILTIN_MEMORY_LAYER_IDS = [
|
|
3
|
+
"runtime",
|
|
4
|
+
"documents",
|
|
5
|
+
"memory-spaces"
|
|
6
|
+
];
|
|
7
|
+
const MEMORY_CAPABILITIES = [
|
|
8
|
+
"status",
|
|
9
|
+
"project",
|
|
10
|
+
"recall",
|
|
11
|
+
"search",
|
|
12
|
+
"read",
|
|
13
|
+
"browse",
|
|
14
|
+
"write",
|
|
15
|
+
"archive",
|
|
16
|
+
"graph",
|
|
17
|
+
"related",
|
|
18
|
+
"link",
|
|
19
|
+
"forget",
|
|
20
|
+
"maintain",
|
|
21
|
+
"export",
|
|
22
|
+
"import"
|
|
23
|
+
];
|
|
24
|
+
const MEMORY_STRATEGY_HOOKS = [
|
|
25
|
+
"admission",
|
|
26
|
+
"placement",
|
|
27
|
+
"retrieval-planning",
|
|
28
|
+
"quality-fusion",
|
|
29
|
+
"projection",
|
|
30
|
+
"promotion-demotion",
|
|
31
|
+
"retention",
|
|
32
|
+
"maintenance"
|
|
33
|
+
];
|
|
34
|
+
const MEMORY_SOURCE_MODES = ["eager", "routed"];
|
|
35
|
+
//#endregion
|
|
36
|
+
export { BUILTIN_MEMORY_LAYER_IDS, MEMORY_CAPABILITIES, MEMORY_SOURCE_MODES, MEMORY_STRATEGY_HOOKS };
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
//#region packages/extension-sdk/src/index.ts
|
|
2
|
+
const EXTENSION_ID = /^[a-z][a-z0-9-]{0,127}$/u;
|
|
3
|
+
function reverseDispose(disposers) {
|
|
4
|
+
for (const dispose of disposers.reverse()) dispose();
|
|
5
|
+
}
|
|
6
|
+
function deepFreeze(value) {
|
|
7
|
+
if (typeof value !== "object" || value === null || Object.isFrozen(value)) return value;
|
|
8
|
+
for (const child of Object.values(value)) deepFreeze(child);
|
|
9
|
+
return Object.freeze(value);
|
|
10
|
+
}
|
|
11
|
+
function captureExtension(extension, id) {
|
|
12
|
+
const layers = extension.layers?.map((registration) => Object.freeze({
|
|
13
|
+
descriptor: deepFreeze(structuredClone(registration.descriptor)),
|
|
14
|
+
...registration.execute === void 0 ? {} : { execute: registration.execute }
|
|
15
|
+
}));
|
|
16
|
+
const adapters = extension.adapters?.map((registration) => Object.freeze({ descriptor: deepFreeze(structuredClone(registration.descriptor)) }));
|
|
17
|
+
const strategies = extension.strategies?.map((registration) => Object.freeze({
|
|
18
|
+
descriptor: deepFreeze(structuredClone(registration.descriptor)),
|
|
19
|
+
propose: registration.propose
|
|
20
|
+
}));
|
|
21
|
+
const sources = extension.sources?.map((source) => Object.freeze({
|
|
22
|
+
layerId: source.layerId,
|
|
23
|
+
mode: source.mode,
|
|
24
|
+
snapshot: source.snapshot
|
|
25
|
+
}));
|
|
26
|
+
const guards = extension.guards?.map((guard) => Object.freeze({
|
|
27
|
+
id: guard.id,
|
|
28
|
+
decide: guard.decide
|
|
29
|
+
}));
|
|
30
|
+
return Object.freeze({
|
|
31
|
+
descriptor: deepFreeze({
|
|
32
|
+
...structuredClone(extension.descriptor),
|
|
33
|
+
id
|
|
34
|
+
}),
|
|
35
|
+
...layers === void 0 ? {} : { layers: Object.freeze(layers) },
|
|
36
|
+
...adapters === void 0 ? {} : { adapters: Object.freeze(adapters) },
|
|
37
|
+
...strategies === void 0 ? {} : { strategies: Object.freeze(strategies) },
|
|
38
|
+
...sources === void 0 ? {} : { sources: Object.freeze(sources) },
|
|
39
|
+
...guards === void 0 ? {} : { guards: Object.freeze(guards) }
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Minimal Boot assembler for one Host. It applies the same captured extension
|
|
44
|
+
* set to every runtime graph while each graph owns its Catalog, Kernel, and
|
|
45
|
+
* TurnView state. Cordis remains responsible for lifecycle and isolation.
|
|
46
|
+
*/
|
|
47
|
+
var MemoryBoot = class {
|
|
48
|
+
extensions = /* @__PURE__ */ new Map();
|
|
49
|
+
targets = /* @__PURE__ */ new Set();
|
|
50
|
+
register(extension) {
|
|
51
|
+
const id = extension.descriptor.id.trim();
|
|
52
|
+
if (!EXTENSION_ID.test(id)) throw new Error("memory extension id must match [a-z][a-z0-9-]{0,127}");
|
|
53
|
+
if (this.extensions.has(id)) throw new Error(`memory extension is already registered: ${id}`);
|
|
54
|
+
const normalized = captureExtension(extension, id);
|
|
55
|
+
const applied = [];
|
|
56
|
+
try {
|
|
57
|
+
for (const target of this.targets) {
|
|
58
|
+
target.releases.set(id, this.applyChecked(normalized, target));
|
|
59
|
+
applied.push(target);
|
|
60
|
+
}
|
|
61
|
+
} catch (error) {
|
|
62
|
+
for (const target of applied.reverse()) {
|
|
63
|
+
target.releases.get(id)?.();
|
|
64
|
+
target.releases.delete(id);
|
|
65
|
+
}
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
this.extensions.set(id, normalized);
|
|
69
|
+
let active = true;
|
|
70
|
+
return () => {
|
|
71
|
+
if (!active) return;
|
|
72
|
+
if (this.extensions.get(id) !== normalized) {
|
|
73
|
+
active = false;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this.unregister(normalized);
|
|
77
|
+
active = false;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
attach(catalog) {
|
|
81
|
+
const target = {
|
|
82
|
+
catalog,
|
|
83
|
+
releases: /* @__PURE__ */ new Map(),
|
|
84
|
+
released: false
|
|
85
|
+
};
|
|
86
|
+
try {
|
|
87
|
+
for (const extension of this.extensions.values()) target.releases.set(extension.descriptor.id, this.apply(extension, target));
|
|
88
|
+
} catch (error) {
|
|
89
|
+
reverseDispose([...target.releases.values()]);
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
this.targets.add(target);
|
|
93
|
+
return {
|
|
94
|
+
bindKernel: (kernel) => {
|
|
95
|
+
if (target.released) throw new Error("memory extension attachment is released");
|
|
96
|
+
if (target.kernel !== void 0) throw new Error("memory extension attachment already has a kernel");
|
|
97
|
+
target.kernel = kernel;
|
|
98
|
+
const guardReleases = /* @__PURE__ */ new Map();
|
|
99
|
+
try {
|
|
100
|
+
for (const extension of this.extensions.values()) {
|
|
101
|
+
const disposers = [];
|
|
102
|
+
try {
|
|
103
|
+
for (const guard of extension.guards ?? []) disposers.push(kernel.registerGuard(guard));
|
|
104
|
+
guardReleases.set(extension.descriptor.id, () => reverseDispose(disposers));
|
|
105
|
+
} catch (error) {
|
|
106
|
+
reverseDispose(disposers);
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const [id, releaseGuards] of guardReleases) {
|
|
111
|
+
const releaseCatalog = target.releases.get(id) ?? (() => {});
|
|
112
|
+
target.releases.set(id, () => {
|
|
113
|
+
releaseGuards();
|
|
114
|
+
releaseCatalog();
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
} catch (error) {
|
|
118
|
+
reverseDispose([...guardReleases.values()]);
|
|
119
|
+
delete target.kernel;
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
bindTurnViews: (manager) => {
|
|
124
|
+
if (target.released) throw new Error("memory extension attachment is released");
|
|
125
|
+
if (target.viewManager !== void 0) throw new Error("memory Boot attachment already has a TurnView manager");
|
|
126
|
+
target.viewManager = manager;
|
|
127
|
+
const sourceReleases = /* @__PURE__ */ new Map();
|
|
128
|
+
try {
|
|
129
|
+
for (const extension of this.extensions.values()) {
|
|
130
|
+
const disposers = [];
|
|
131
|
+
try {
|
|
132
|
+
for (const source of extension.sources ?? []) {
|
|
133
|
+
if (target.catalog.layer(source.layerId) === void 0) throw new Error(`MemorySource layer is unavailable: ${source.layerId}`);
|
|
134
|
+
disposers.push(manager.registerSource(source));
|
|
135
|
+
}
|
|
136
|
+
sourceReleases.set(extension.descriptor.id, () => reverseDispose(disposers));
|
|
137
|
+
} catch (error) {
|
|
138
|
+
reverseDispose(disposers);
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
manager.assertSourcesReady();
|
|
143
|
+
for (const [id, releaseSources] of sourceReleases) {
|
|
144
|
+
const releasePrevious = target.releases.get(id) ?? (() => {});
|
|
145
|
+
target.releases.set(id, () => {
|
|
146
|
+
releaseSources();
|
|
147
|
+
releasePrevious();
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
} catch (error) {
|
|
151
|
+
reverseDispose([...sourceReleases.values()]);
|
|
152
|
+
delete target.viewManager;
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
dispose: () => {
|
|
157
|
+
if (target.released) return;
|
|
158
|
+
target.released = true;
|
|
159
|
+
this.targets.delete(target);
|
|
160
|
+
reverseDispose([...target.releases.values()]);
|
|
161
|
+
target.releases.clear();
|
|
162
|
+
},
|
|
163
|
+
release: () => {
|
|
164
|
+
if (target.released) return;
|
|
165
|
+
target.released = true;
|
|
166
|
+
this.targets.delete(target);
|
|
167
|
+
target.releases.clear();
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
descriptors() {
|
|
172
|
+
return [...this.extensions.values()].map((extension) => ({ ...extension.descriptor })).sort((left, right) => left.id.localeCompare(right.id));
|
|
173
|
+
}
|
|
174
|
+
apply(extension, target) {
|
|
175
|
+
const disposers = [];
|
|
176
|
+
try {
|
|
177
|
+
for (const layer of extension.layers ?? []) disposers.push(target.catalog.registerLayer(layer));
|
|
178
|
+
for (const adapter of extension.adapters ?? []) disposers.push(target.catalog.registerAdapter(adapter));
|
|
179
|
+
for (const strategy of extension.strategies ?? []) disposers.push(target.catalog.registerStrategy(strategy));
|
|
180
|
+
if (target.kernel !== void 0) for (const guard of extension.guards ?? []) disposers.push(target.kernel.registerGuard(guard));
|
|
181
|
+
if (target.viewManager !== void 0) for (const source of extension.sources ?? []) {
|
|
182
|
+
if (target.catalog.layer(source.layerId) === void 0) throw new Error(`MemorySource layer is unavailable: ${source.layerId}`);
|
|
183
|
+
disposers.push(target.viewManager.registerSource(source));
|
|
184
|
+
}
|
|
185
|
+
return () => reverseDispose(disposers);
|
|
186
|
+
} catch (error) {
|
|
187
|
+
reverseDispose(disposers);
|
|
188
|
+
throw error;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
applyChecked(extension, target) {
|
|
192
|
+
const release = this.apply(extension, target);
|
|
193
|
+
try {
|
|
194
|
+
target.viewManager?.assertSourcesReady();
|
|
195
|
+
return release;
|
|
196
|
+
} catch (error) {
|
|
197
|
+
release();
|
|
198
|
+
throw error;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/** Remove one global extension from every live graph, or restore it everywhere. */
|
|
202
|
+
unregister(extension) {
|
|
203
|
+
const id = extension.descriptor.id;
|
|
204
|
+
const removed = [];
|
|
205
|
+
try {
|
|
206
|
+
for (const target of this.targets) {
|
|
207
|
+
const release = target.releases.get(id);
|
|
208
|
+
if (release === void 0) continue;
|
|
209
|
+
release();
|
|
210
|
+
target.releases.delete(id);
|
|
211
|
+
removed.push(target);
|
|
212
|
+
target.viewManager?.assertSourcesReady();
|
|
213
|
+
}
|
|
214
|
+
} catch (error) {
|
|
215
|
+
const rollbackFailures = [];
|
|
216
|
+
for (const target of removed.reverse()) try {
|
|
217
|
+
target.releases.set(id, this.applyChecked(extension, target));
|
|
218
|
+
} catch (rollbackError) {
|
|
219
|
+
rollbackFailures.push(rollbackError);
|
|
220
|
+
}
|
|
221
|
+
if (rollbackFailures.length > 0) throw new AggregateError([error, ...rollbackFailures], `memory extension ${id} unload failed and could not be fully rolled back`);
|
|
222
|
+
throw error;
|
|
223
|
+
}
|
|
224
|
+
this.extensions.delete(id);
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
function defineMemoryExtension(extension) {
|
|
228
|
+
return extension;
|
|
229
|
+
}
|
|
230
|
+
/** Process-global Boot, allowing extensions to contribute before the DSH Host mounts. */
|
|
231
|
+
const memoryBoot = new MemoryBoot();
|
|
232
|
+
/** Compatibility name for the v0.3 pre-release API. */
|
|
233
|
+
const memoryExtensions = memoryBoot;
|
|
234
|
+
function registerMemoryExtension(extension) {
|
|
235
|
+
return memoryBoot.register(extension);
|
|
236
|
+
}
|
|
237
|
+
//#endregion
|
|
238
|
+
export { MemoryBoot, MemoryBoot as MemoryExtensionHost, defineMemoryExtension, memoryBoot, memoryExtensions, registerMemoryExtension };
|