monomind 1.15.6 → 1.16.0
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/.claude/agents/github/repo-architect.md +1 -1
- package/.claude/agents/specialists/integration-architect.md +6 -6
- package/.claude/commands/hive-mind/hive-mind-init.md +1 -1
- package/.claude/commands/hive-mind/hive-mind-memory.md +1 -1
- package/.claude/commands/mastermind/brain.md +11 -11
- package/.claude/commands/mastermind/master.md +4 -4
- package/.claude/commands/mastermind/memory.md +6 -6
- package/.claude/commands/memory/README.md +4 -4
- package/.claude/commands/truth/start.md +3 -3
- package/.claude/helpers/extras-registry.json +2 -2
- package/.claude/helpers/skill-registry.json +26 -26
- package/.claude/helpers/statusline.cjs +8 -8
- package/.claude/skills/agentic-jujutsu/SKILL.md +3 -3
- package/.claude/skills/mastermind/_protocol.md +8 -8
- package/README.md +6 -6
- package/package.json +2 -2
- package/packages/@monomind/cli/README.md +6 -6
- package/packages/@monomind/cli/dist/src/__tests__/browse-analyzer.test.js +18 -1
- package/packages/@monomind/cli/dist/src/commands/agent.js +2 -2
- package/packages/@monomind/cli/dist/src/commands/autopilot.js +1 -1
- package/packages/@monomind/cli/dist/src/commands/completions.js +2 -21
- package/packages/@monomind/cli/dist/src/commands/config.js +1 -1
- package/packages/@monomind/cli/dist/src/commands/hive-mind.js +1 -1
- package/packages/@monomind/cli/dist/src/commands/hooks-coverage-commands.js +31 -31
- package/packages/@monomind/cli/dist/src/commands/hooks-routing-commands.js +1 -1
- package/packages/@monomind/cli/dist/src/commands/hooks.js +1 -1
- package/packages/@monomind/cli/dist/src/commands/index.d.ts +0 -1
- package/packages/@monomind/cli/dist/src/commands/index.js +0 -4
- package/packages/@monomind/cli/dist/src/commands/init.js +8 -8
- package/packages/@monomind/cli/dist/src/commands/memory.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/commands/memory.js +138 -28
- package/packages/@monomind/cli/dist/src/commands/migrate.js +2 -2
- package/packages/@monomind/cli/dist/src/commands/neural.js +1 -1
- package/packages/@monomind/cli/dist/src/commands/swarm.js +1 -1
- package/packages/@monomind/cli/dist/src/config-adapter.js +8 -8
- package/packages/@monomind/cli/dist/src/index.js +1 -1
- package/packages/@monomind/cli/dist/src/init/claudemd-generator.js +2 -2
- package/packages/@monomind/cli/dist/src/init/executor.js +16 -16
- package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.js +1 -1
- package/packages/@monomind/cli/dist/src/init/statusline-generator.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/init/statusline-generator.js +8 -8
- package/packages/@monomind/cli/dist/src/init/types.d.ts +3 -3
- package/packages/@monomind/cli/dist/src/init/types.js +3 -3
- package/packages/@monomind/cli/dist/src/mcp-client.js +1 -8
- package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.js +3 -3
- package/packages/@monomind/cli/dist/src/mcp-tools/daa-tools.js +13 -13
- package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +4 -4
- package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +4 -4
- package/packages/@monomind/cli/dist/src/mcp-tools/hooks-intelligence.js +1 -0
- package/packages/@monomind/cli/dist/src/mcp-tools/hooks-routing.js +23 -23
- package/packages/@monomind/cli/dist/src/mcp-tools/index.d.ts +0 -1
- package/packages/@monomind/cli/dist/src/mcp-tools/index.js +0 -2
- package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.d.ts +22 -6
- package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +553 -505
- package/packages/@monomind/cli/dist/src/mcp-tools/progress-tools.js +1 -1
- package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +5 -5
- package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +1 -156
- package/packages/@monomind/cli/dist/src/memory/embedding-operations.js +3 -3
- package/packages/@monomind/cli/dist/src/memory/hnsw-operations.js +5 -5
- package/packages/@monomind/cli/dist/src/memory/intelligence.js +2 -2
- package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +86 -234
- package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +455 -1702
- package/packages/@monomind/cli/dist/src/memory/memory-crud.js +3 -3
- package/packages/@monomind/cli/dist/src/memory/memory-initializer.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +5 -5
- package/packages/@monomind/cli/dist/src/memory/memory-read.js +4 -4
- package/packages/@monomind/cli/dist/src/suggest.js +0 -1
- package/packages/@monomind/cli/dist/src/types.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/ui/dashboard.html +41 -5
- package/packages/@monomind/cli/dist/src/ui/orgs.html +91 -5
- package/packages/@monomind/cli/dist/src/ui/server.mjs +44 -0
- package/packages/@monomind/cli/dist/src/update/validator.js +1 -3
- package/packages/@monomind/cli/package.json +4 -4
- package/scripts/verify-appliance.sh +1 -1
- package/packages/@monomind/cli/dist/src/commands/plugins.d.ts +0 -11
- package/packages/@monomind/cli/dist/src/commands/plugins.js +0 -799
- package/packages/@monomind/cli/dist/src/plugins/manager.d.ts +0 -133
- package/packages/@monomind/cli/dist/src/plugins/manager.js +0 -498
- package/packages/@monomind/cli/dist/src/plugins/store/discovery.d.ts +0 -88
- package/packages/@monomind/cli/dist/src/plugins/store/discovery.js +0 -650
- package/packages/@monomind/cli/dist/src/plugins/store/index.d.ts +0 -76
- package/packages/@monomind/cli/dist/src/plugins/store/index.js +0 -141
- package/packages/@monomind/cli/dist/src/plugins/store/search.d.ts +0 -46
- package/packages/@monomind/cli/dist/src/plugins/store/search.js +0 -231
- package/packages/@monomind/cli/dist/src/plugins/store/types.d.ts +0 -274
- package/packages/@monomind/cli/dist/src/plugins/store/types.js +0 -7
- package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.d.ts +0 -7
- package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.js +0 -126
- package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.d.ts +0 -12
- package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.js +0 -188
- package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.d.ts +0 -7
- package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.js +0 -206
- package/packages/@monomind/cli/dist/src/services/registry-api.d.ts +0 -58
- package/packages/@monomind/cli/dist/src/services/registry-api.js +0 -199
|
@@ -20,7 +20,7 @@ const PROJECT_ROOT = join(PACKAGES_DIR, '..');
|
|
|
20
20
|
// Utility/service packages follow DDD differently - their services ARE the application layer
|
|
21
21
|
const UTILITY_PACKAGES = new Set([
|
|
22
22
|
'cli', 'hooks', 'mcp', 'shared', 'testing', 'agents', 'integration',
|
|
23
|
-
'embeddings', 'deployment', 'performance', '
|
|
23
|
+
'embeddings', 'deployment', 'performance', 'providers'
|
|
24
24
|
]);
|
|
25
25
|
// Target metrics for 100% completion
|
|
26
26
|
const TARGETS = {
|
|
@@ -138,11 +138,11 @@ export const systemTools = [
|
|
|
138
138
|
const cpus = os.cpus();
|
|
139
139
|
const totalMem = os.totalmem();
|
|
140
140
|
const freeMem = os.freemem();
|
|
141
|
-
// Read real agent/task counts — try
|
|
141
|
+
// Read real agent/task counts — try memory backend first, fallback to JSON stores
|
|
142
142
|
let agentCounts = { active: 0, total: 0 };
|
|
143
143
|
let taskCounts = { pending: 0, completed: 0, failed: 0 };
|
|
144
144
|
let _metricsSource = 'none';
|
|
145
|
-
// Primary:
|
|
145
|
+
// Primary: LanceDB bridge
|
|
146
146
|
try {
|
|
147
147
|
const bridge = await import('../memory/memory-bridge.js');
|
|
148
148
|
const agentResults = await bridge.bridgeListEntries({ namespace: 'agents', limit: 10000 });
|
|
@@ -158,7 +158,7 @@ export const systemTools = [
|
|
|
158
158
|
catch { /* skip unparseable */ }
|
|
159
159
|
}
|
|
160
160
|
agentCounts = { total: agentEntries.length, active };
|
|
161
|
-
_metricsSource = '
|
|
161
|
+
_metricsSource = 'lancedb';
|
|
162
162
|
}
|
|
163
163
|
const taskResults = await bridge.bridgeListEntries({ namespace: 'tasks', limit: 10000 });
|
|
164
164
|
const taskEntries = taskResults?.entries;
|
|
@@ -177,10 +177,10 @@ export const systemTools = [
|
|
|
177
177
|
catch { /* skip */ }
|
|
178
178
|
}
|
|
179
179
|
taskCounts = { pending, completed, failed };
|
|
180
|
-
_metricsSource = '
|
|
180
|
+
_metricsSource = 'lancedb';
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
|
-
catch { /*
|
|
183
|
+
catch { /* memory backend unavailable, try JSON fallback */ }
|
|
184
184
|
// Fallback: JSON store files (backward compatibility)
|
|
185
185
|
if (_metricsSource === 'none') {
|
|
186
186
|
try {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Transfer MCP Tools
|
|
3
|
-
* Pattern
|
|
3
|
+
* Pattern sharing via IPFS-based decentralized registry
|
|
4
4
|
*
|
|
5
5
|
* @module @monomind/cli/mcp-tools/transfer-tools
|
|
6
6
|
* @version 3.0.0
|
|
@@ -274,161 +274,6 @@ export const transferTools = [
|
|
|
274
274
|
}
|
|
275
275
|
},
|
|
276
276
|
},
|
|
277
|
-
// ═══════════════════════════════════════════════════════════════
|
|
278
|
-
// PLUGIN STORE TOOLS
|
|
279
|
-
// ═══════════════════════════════════════════════════════════════
|
|
280
|
-
{
|
|
281
|
-
name: 'transfer_plugin-search',
|
|
282
|
-
description: 'Search the plugin store',
|
|
283
|
-
category: 'transfer',
|
|
284
|
-
version: '1.0.0',
|
|
285
|
-
inputSchema: {
|
|
286
|
-
type: 'object',
|
|
287
|
-
properties: {
|
|
288
|
-
query: {
|
|
289
|
-
type: 'string',
|
|
290
|
-
description: 'Search query',
|
|
291
|
-
},
|
|
292
|
-
category: {
|
|
293
|
-
type: 'string',
|
|
294
|
-
description: 'Filter by category',
|
|
295
|
-
},
|
|
296
|
-
type: {
|
|
297
|
-
type: 'string',
|
|
298
|
-
description: 'Filter by plugin type',
|
|
299
|
-
},
|
|
300
|
-
verified: {
|
|
301
|
-
type: 'boolean',
|
|
302
|
-
description: 'Only show verified plugins',
|
|
303
|
-
},
|
|
304
|
-
minRating: {
|
|
305
|
-
type: 'number',
|
|
306
|
-
description: 'Minimum rating',
|
|
307
|
-
},
|
|
308
|
-
limit: {
|
|
309
|
-
type: 'number',
|
|
310
|
-
description: 'Maximum results',
|
|
311
|
-
},
|
|
312
|
-
},
|
|
313
|
-
},
|
|
314
|
-
handler: async (input) => {
|
|
315
|
-
try {
|
|
316
|
-
const { createPluginDiscoveryService, searchPlugins } = await import('../plugins/store/index.js');
|
|
317
|
-
const discovery = createPluginDiscoveryService();
|
|
318
|
-
const result = await discovery.discoverRegistry();
|
|
319
|
-
if (!result.success || !result.registry) {
|
|
320
|
-
return createResult({ error: result.error || 'Failed to discover registry' }, true);
|
|
321
|
-
}
|
|
322
|
-
// Cap query and limit before forwarding to searchPlugins.
|
|
323
|
-
const MAX_PLUGIN_QUERY_LEN = 4 * 1024;
|
|
324
|
-
const MAX_PLUGIN_LIMIT = 500;
|
|
325
|
-
const rawOpts = input;
|
|
326
|
-
const opts = {
|
|
327
|
-
...rawOpts,
|
|
328
|
-
query: typeof rawOpts.query === 'string' && rawOpts.query.length > MAX_PLUGIN_QUERY_LEN
|
|
329
|
-
? rawOpts.query.slice(0, MAX_PLUGIN_QUERY_LEN) : rawOpts.query,
|
|
330
|
-
limit: typeof rawOpts.limit === 'number' && Number.isFinite(rawOpts.limit)
|
|
331
|
-
? Math.min(Math.floor(Math.max(rawOpts.limit, 1)), MAX_PLUGIN_LIMIT) : rawOpts.limit,
|
|
332
|
-
};
|
|
333
|
-
const searchResult = searchPlugins(result.registry, opts);
|
|
334
|
-
return createResult(searchResult);
|
|
335
|
-
}
|
|
336
|
-
catch (error) {
|
|
337
|
-
return createResult({ error: error.message }, true);
|
|
338
|
-
}
|
|
339
|
-
},
|
|
340
|
-
},
|
|
341
|
-
{
|
|
342
|
-
name: 'transfer_plugin-info',
|
|
343
|
-
description: 'Get detailed info about a plugin',
|
|
344
|
-
category: 'transfer',
|
|
345
|
-
version: '1.0.0',
|
|
346
|
-
inputSchema: {
|
|
347
|
-
type: 'object',
|
|
348
|
-
properties: {
|
|
349
|
-
name: {
|
|
350
|
-
type: 'string',
|
|
351
|
-
description: 'Plugin name or ID',
|
|
352
|
-
},
|
|
353
|
-
},
|
|
354
|
-
required: ['name'],
|
|
355
|
-
},
|
|
356
|
-
handler: async (input) => {
|
|
357
|
-
try {
|
|
358
|
-
const { createPluginDiscoveryService } = await import('../plugins/store/index.js');
|
|
359
|
-
const discovery = createPluginDiscoveryService();
|
|
360
|
-
const result = await discovery.discoverRegistry();
|
|
361
|
-
if (!result.success || !result.registry) {
|
|
362
|
-
return createResult({ error: result.error || 'Failed to discover registry' }, true);
|
|
363
|
-
}
|
|
364
|
-
const name = input.name;
|
|
365
|
-
const plugin = result.registry.plugins.find((p) => p.id === name || p.name === name);
|
|
366
|
-
if (!plugin) {
|
|
367
|
-
return createResult({ error: 'Plugin not found' }, true);
|
|
368
|
-
}
|
|
369
|
-
return createResult(plugin);
|
|
370
|
-
}
|
|
371
|
-
catch (error) {
|
|
372
|
-
return createResult({ error: error.message }, true);
|
|
373
|
-
}
|
|
374
|
-
},
|
|
375
|
-
},
|
|
376
|
-
{
|
|
377
|
-
name: 'transfer_plugin-featured',
|
|
378
|
-
description: 'Get featured plugins from the store',
|
|
379
|
-
category: 'transfer',
|
|
380
|
-
version: '1.0.0',
|
|
381
|
-
inputSchema: {
|
|
382
|
-
type: 'object',
|
|
383
|
-
properties: {
|
|
384
|
-
limit: {
|
|
385
|
-
type: 'number',
|
|
386
|
-
description: 'Maximum results',
|
|
387
|
-
},
|
|
388
|
-
},
|
|
389
|
-
},
|
|
390
|
-
handler: async (input) => {
|
|
391
|
-
try {
|
|
392
|
-
const { createPluginDiscoveryService, getFeaturedPlugins } = await import('../plugins/store/index.js');
|
|
393
|
-
const discovery = createPluginDiscoveryService();
|
|
394
|
-
const result = await discovery.discoverRegistry();
|
|
395
|
-
if (!result.success || !result.registry) {
|
|
396
|
-
return createResult({ error: result.error || 'Failed to discover registry' }, true);
|
|
397
|
-
}
|
|
398
|
-
const featured = getFeaturedPlugins(result.registry);
|
|
399
|
-
const limit = input.limit || 10;
|
|
400
|
-
return createResult(featured.slice(0, limit));
|
|
401
|
-
}
|
|
402
|
-
catch (error) {
|
|
403
|
-
return createResult({ error: error.message }, true);
|
|
404
|
-
}
|
|
405
|
-
},
|
|
406
|
-
},
|
|
407
|
-
{
|
|
408
|
-
name: 'transfer_plugin-official',
|
|
409
|
-
description: 'Get official plugins from the store',
|
|
410
|
-
category: 'transfer',
|
|
411
|
-
version: '1.0.0',
|
|
412
|
-
inputSchema: {
|
|
413
|
-
type: 'object',
|
|
414
|
-
properties: {},
|
|
415
|
-
},
|
|
416
|
-
handler: async () => {
|
|
417
|
-
try {
|
|
418
|
-
const { createPluginDiscoveryService, getOfficialPlugins } = await import('../plugins/store/index.js');
|
|
419
|
-
const discovery = createPluginDiscoveryService();
|
|
420
|
-
const result = await discovery.discoverRegistry();
|
|
421
|
-
if (!result.success || !result.registry) {
|
|
422
|
-
return createResult({ error: result.error || 'Failed to discover registry' }, true);
|
|
423
|
-
}
|
|
424
|
-
const official = getOfficialPlugins(result.registry);
|
|
425
|
-
return createResult(official);
|
|
426
|
-
}
|
|
427
|
-
catch (error) {
|
|
428
|
-
return createResult({ error: error.message }, true);
|
|
429
|
-
}
|
|
430
|
-
},
|
|
431
|
-
},
|
|
432
277
|
];
|
|
433
278
|
export default transferTools;
|
|
434
279
|
//# sourceMappingURL=transfer-tools.js.map
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module v1/cli/embedding-operations
|
|
7
7
|
*/
|
|
8
|
-
// ADR-053: Lazy import of
|
|
8
|
+
// ADR-053: Lazy import of memory bridge
|
|
9
9
|
let _bridge;
|
|
10
10
|
async function getBridge() {
|
|
11
11
|
if (_bridge === null)
|
|
@@ -38,7 +38,7 @@ export async function loadEmbeddingModel(options) {
|
|
|
38
38
|
loadTime: 0
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
|
-
// ADR-053: Try
|
|
41
|
+
// ADR-053: Try LanceDB bridge first
|
|
42
42
|
const bridge = await getBridge();
|
|
43
43
|
if (bridge) {
|
|
44
44
|
const bridgeResult = await bridge.bridgeLoadEmbeddingModel();
|
|
@@ -185,7 +185,7 @@ export async function generateEmbedding(text) {
|
|
|
185
185
|
text = String(text ?? '');
|
|
186
186
|
if (text.length > 16 * 1024)
|
|
187
187
|
text = text.slice(0, 16 * 1024);
|
|
188
|
-
// ADR-053: Try
|
|
188
|
+
// ADR-053: Try LanceDB bridge first
|
|
189
189
|
const bridge = await getBridge();
|
|
190
190
|
if (bridge) {
|
|
191
191
|
const bridgeResult = await bridge.bridgeGenerateEmbedding(text);
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import * as fs from 'fs';
|
|
8
8
|
import * as path from 'path';
|
|
9
|
-
// ADR-053: Lazy import of
|
|
9
|
+
// ADR-053: Lazy import of LanceDB memory bridge
|
|
10
10
|
let _bridge;
|
|
11
11
|
async function getBridge() {
|
|
12
12
|
if (_bridge === null)
|
|
@@ -53,7 +53,7 @@ export async function getHNSWIndex(options) {
|
|
|
53
53
|
// Native @monoes/core HNSW (WASM VectorDb) was removed in the lean teardown.
|
|
54
54
|
// This function is kept for callers that check its return value — all callers
|
|
55
55
|
// already handle null by falling back to the pure-JS / brute-force path.
|
|
56
|
-
// The
|
|
56
|
+
// The memory bridge (memory-bridge.ts) provides ANN search via LanceDB.
|
|
57
57
|
// Native backend removed — return null so callers use the pure-JS fallback.
|
|
58
58
|
hnswInitializing = false;
|
|
59
59
|
return null;
|
|
@@ -85,7 +85,7 @@ function saveHNSWMetadata() {
|
|
|
85
85
|
* Add entry to HNSW index (with automatic persistence)
|
|
86
86
|
*/
|
|
87
87
|
export async function addToHNSWIndex(id, embedding, entry) {
|
|
88
|
-
// ADR-053: Try
|
|
88
|
+
// ADR-053: Try LanceDB memory bridge first
|
|
89
89
|
const bridge = await getBridge();
|
|
90
90
|
if (bridge) {
|
|
91
91
|
const bridgeResult = await bridge.bridgeAddToHNSW(id, embedding, entry);
|
|
@@ -115,7 +115,7 @@ export async function addToHNSWIndex(id, embedding, entry) {
|
|
|
115
115
|
* Returns results sorted by similarity (highest first)
|
|
116
116
|
*/
|
|
117
117
|
export async function searchHNSWIndex(queryEmbedding, options) {
|
|
118
|
-
// ADR-053: Try
|
|
118
|
+
// ADR-053: Try LanceDB memory bridge first
|
|
119
119
|
const bridge = await getBridge();
|
|
120
120
|
if (bridge) {
|
|
121
121
|
const bridgeResult = await bridge.bridgeSearchHNSW(queryEmbedding, options);
|
|
@@ -166,7 +166,7 @@ export async function searchHNSWIndex(queryEmbedding, options) {
|
|
|
166
166
|
export function getHNSWStatus() {
|
|
167
167
|
// ADR-053: If bridge was previously loaded, report availability
|
|
168
168
|
if (_bridge && _bridge !== null) {
|
|
169
|
-
// Bridge is loaded — HNSW-equivalent is available via
|
|
169
|
+
// Bridge is loaded — HNSW-equivalent is available via LanceDB
|
|
170
170
|
return {
|
|
171
171
|
available: true,
|
|
172
172
|
initialized: true,
|
|
@@ -729,7 +729,7 @@ export async function recordStep(step) {
|
|
|
729
729
|
}
|
|
730
730
|
try {
|
|
731
731
|
// Generate embedding if not provided
|
|
732
|
-
// ADR-053: Try
|
|
732
|
+
// ADR-053: Try LanceDB bridge embedder first
|
|
733
733
|
let embedding = step.embedding;
|
|
734
734
|
if (!embedding) {
|
|
735
735
|
try {
|
|
@@ -830,7 +830,7 @@ export async function findSimilarPatterns(query, options) {
|
|
|
830
830
|
return [];
|
|
831
831
|
}
|
|
832
832
|
try {
|
|
833
|
-
// ADR-053: Try
|
|
833
|
+
// ADR-053: Try LanceDB bridge embedder first
|
|
834
834
|
let queryEmbedding = null;
|
|
835
835
|
try {
|
|
836
836
|
const bridge = await import('./memory-bridge.js');
|