dsh-mnemon-source-memory-spaces 0.5.12 → 0.5.13
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/lib/client.js +306 -305
- package/lib/index.js +21 -2
- package/lib/types/client/pages.d.ts +2 -1
- package/package.json +5 -5
- package/presentation/locales.json +62 -88
- package/presentation/page.module.css +10 -28
- package/presentation/sidebar.module.css +3 -3
package/lib/index.js
CHANGED
|
@@ -1374,6 +1374,17 @@ var MemorySpacesService = class {
|
|
|
1374
1374
|
recallQualityPolicy;
|
|
1375
1375
|
spacesInFlight;
|
|
1376
1376
|
providersDisposed = false;
|
|
1377
|
+
/** The CLI version a full status last read, and the binary it read it from. */
|
|
1378
|
+
cliVersion;
|
|
1379
|
+
/** The CLI binary as the file system has it; another value after an update replaces it. */
|
|
1380
|
+
cliBinary() {
|
|
1381
|
+
try {
|
|
1382
|
+
const stat = statSync(this.runner.command);
|
|
1383
|
+
return `${this.runner.command}\0${stat.mtimeMs}\0${stat.size}`;
|
|
1384
|
+
} catch {
|
|
1385
|
+
return;
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1377
1388
|
providerTypeId(providerId) {
|
|
1378
1389
|
const catalog = this.providerCatalog;
|
|
1379
1390
|
if (!catalog.has(providerId)) return providerId;
|
|
@@ -1524,6 +1535,7 @@ var MemorySpacesService = class {
|
|
|
1524
1535
|
/** Return a usable system snapshot without waiting for any Provider I/O. */
|
|
1525
1536
|
statusSummary() {
|
|
1526
1537
|
const catalog = this.spaceDirectory();
|
|
1538
|
+
const version = this.cliVersion !== void 0 && this.cliBinary() === this.cliVersion.binary ? this.cliVersion.version : void 0;
|
|
1527
1539
|
const dshActiveStores = catalog.items.filter((body) => body.active && body.providerEnabled !== false).map((body) => body.id);
|
|
1528
1540
|
const providerServices = this.memorySpaces.providerServices().items.map((service) => {
|
|
1529
1541
|
const descriptor = this.providerCatalog.descriptor(service.providerId);
|
|
@@ -1554,7 +1566,8 @@ var MemorySpacesService = class {
|
|
|
1554
1566
|
recallQuality: this.config.recallQuality,
|
|
1555
1567
|
memoryBodyDirectory: catalog.directory,
|
|
1556
1568
|
memoryBodies: catalog.items,
|
|
1557
|
-
providerServices
|
|
1569
|
+
providerServices,
|
|
1570
|
+
...version === void 0 ? {} : { version }
|
|
1558
1571
|
};
|
|
1559
1572
|
}
|
|
1560
1573
|
/** Probe the effective Mnemon embedding runtime and its default Store coverage. */
|
|
@@ -1620,6 +1633,12 @@ var MemorySpacesService = class {
|
|
|
1620
1633
|
memoryBodies: catalog.items,
|
|
1621
1634
|
providerServices
|
|
1622
1635
|
};
|
|
1636
|
+
const version = rawVersion === void 0 ? void 0 : rawVersion.trim().replace(/^mnemon version\s+/i, "");
|
|
1637
|
+
const binary = version === void 0 ? void 0 : this.cliBinary();
|
|
1638
|
+
this.cliVersion = version === void 0 || binary === void 0 ? void 0 : {
|
|
1639
|
+
binary,
|
|
1640
|
+
version
|
|
1641
|
+
};
|
|
1623
1642
|
try {
|
|
1624
1643
|
const healthySpaces = active.filter((body) => body.healthy && body.stats !== void 0);
|
|
1625
1644
|
const topEntities = /* @__PURE__ */ new Map();
|
|
@@ -1645,7 +1664,7 @@ var MemorySpacesService = class {
|
|
|
1645
1664
|
return {
|
|
1646
1665
|
healthy: true,
|
|
1647
1666
|
...base,
|
|
1648
|
-
...
|
|
1667
|
+
...version === void 0 ? {} : { version },
|
|
1649
1668
|
stats,
|
|
1650
1669
|
...errors.length === 0 ? {} : { error: errors.join("; ") }
|
|
1651
1670
|
};
|
|
@@ -16,6 +16,7 @@ export declare function OverviewPage(props: {
|
|
|
16
16
|
client: MemorySpacesPageClient;
|
|
17
17
|
metadataClient: MemorySpacesPageClient;
|
|
18
18
|
revision: number;
|
|
19
|
+
reloadKey?: number;
|
|
19
20
|
activationEnabled: boolean;
|
|
20
21
|
writeEnabled: boolean;
|
|
21
22
|
agentAvailable: boolean;
|
|
@@ -61,7 +62,7 @@ export declare function RememberPage(props: {
|
|
|
61
62
|
seed: string;
|
|
62
63
|
onMutate: () => void;
|
|
63
64
|
onClose: () => void;
|
|
64
|
-
|
|
65
|
+
onView?: () => void;
|
|
65
66
|
}): JSX.Element;
|
|
66
67
|
export declare function ListPage(props: {
|
|
67
68
|
client: MemorySpacesPageClient;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-mnemon-source-memory-spaces",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.13",
|
|
4
4
|
"description": "Memory Spaces Source and its private Provider SDK.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
57
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
58
|
-
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-rc.2",
|
|
59
|
-
"dsh-mnemon": "^0.5.
|
|
58
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-rc.2 || ^0.2.0-rc.1",
|
|
59
|
+
"dsh-mnemon": "^0.5.19",
|
|
60
60
|
"react": "^18.2.0"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
@@ -65,13 +65,13 @@
|
|
|
65
65
|
"@types/node": "^22.0.0",
|
|
66
66
|
"@types/react": "^18.3.0",
|
|
67
67
|
"@types/react-dom": "^18.3.0",
|
|
68
|
-
"dsh-mnemon": "^0.5.
|
|
68
|
+
"dsh-mnemon": "^0.5.19",
|
|
69
69
|
"dsh-mnemon-provider-byterover": "^0.5.5",
|
|
70
70
|
"dsh-mnemon-provider-hindsight": "^0.5.5",
|
|
71
71
|
"dsh-mnemon-provider-holographic": "^0.5.5",
|
|
72
72
|
"dsh-mnemon-provider-honcho": "^0.5.5",
|
|
73
73
|
"dsh-mnemon-provider-mem0": "^0.5.5",
|
|
74
|
-
"dsh-mnemon-provider-mnemon-native": "^0.5.
|
|
74
|
+
"dsh-mnemon-provider-mnemon-native": "^0.5.7",
|
|
75
75
|
"dsh-mnemon-provider-openviking": "^0.5.7",
|
|
76
76
|
"dsh-mnemon-provider-retaindb": "^0.5.5",
|
|
77
77
|
"dsh-mnemon-provider-supermemory": "^0.5.5",
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
"nav.bodies": "记忆空间",
|
|
14
14
|
"nav.search": "检索",
|
|
15
15
|
"nav.entities": "实体",
|
|
16
|
-
"nav.rememberAction": "
|
|
16
|
+
"nav.rememberAction": "存入记忆",
|
|
17
17
|
"nav.content": "内容",
|
|
18
18
|
"overview.title": "记忆空间",
|
|
19
|
-
"overview.description": "
|
|
19
|
+
"overview.description": "由 Mnemon Native 或第三方 Provider 承载的长期记忆;已激活的空间参与召回。",
|
|
20
20
|
"overview.pageDescription": "创建和启停记忆空间,查看每个 Provider 的存储状态与实时关联快照。",
|
|
21
21
|
"overview.interval": "进入时全量同步 · 点击卡片按需同步",
|
|
22
22
|
"overview.fullSyncPending": "等待首次全量同步",
|
|
@@ -25,11 +25,8 @@
|
|
|
25
25
|
"overview.fullSyncMinutes": "上次全量同步:{count} 分钟前",
|
|
26
26
|
"overview.fullSyncHours": "上次全量同步:{count} 小时前",
|
|
27
27
|
"overview.fullSyncDays": "上次全量同步:{count} 天前",
|
|
28
|
-
"overview.syncing": "同步中…",
|
|
29
|
-
"overview.syncNow": "立即同步",
|
|
30
28
|
"overview.directory": "记忆空间目录",
|
|
31
|
-
"overview.directory.description": "
|
|
32
|
-
"overview.directory.waiting": "等待目录",
|
|
29
|
+
"overview.directory.description": "每张卡片是一个记忆空间;点击卡片检查连接,开关决定它是否参与召回。",
|
|
33
30
|
"overview.directory.unsynced": "目录尚未同步",
|
|
34
31
|
"overview.directory.unsyncedBadge": "目录待同步",
|
|
35
32
|
"overview.directoryLoading": "正在加载记忆空间目录",
|
|
@@ -41,7 +38,7 @@
|
|
|
41
38
|
"overview.reconnectHint": "点击卡片重新检测并同步这个记忆空间",
|
|
42
39
|
"overview.reconnectAria": "重新连接{name}",
|
|
43
40
|
"overview.snapshotLoading": "正在加载多记忆空间实时快照",
|
|
44
|
-
"overview.metadataAction": "
|
|
41
|
+
"overview.metadataAction": "整理名称与说明",
|
|
45
42
|
"overview.metadataTitle": "AI 维护记忆空间元信息",
|
|
46
43
|
"overview.metadataDescription": "选择一个或多个已激活记忆空间。系统会分别通过各 Provider 最快的原生查询路径读取少量样本,再由独立任务 Agent 生成标题与说明。",
|
|
47
44
|
"overview.metadataUnavailable": "暂时无法运行:未找到与当前记忆范围匹配的活跃 Agent",
|
|
@@ -72,13 +69,13 @@
|
|
|
72
69
|
"overview.noActiveTitle": "没有激活的记忆空间",
|
|
73
70
|
"overview.noActiveText": "开启至少一个记忆空间的读取开关,即可在这里聚合它的实时图谱。",
|
|
74
71
|
"overview.noContentTitle": "已激活记忆空间尚无内容",
|
|
75
|
-
"overview.noContentText": "
|
|
72
|
+
"overview.noContentText": "存入记忆后,这里会显示节点与关系。",
|
|
76
73
|
"overview.createTitle": "创建记忆空间",
|
|
77
74
|
"overview.createDialogHint": "这里定义记忆空间用途并选择底层 Provider;服务、凭据和全局数据位置沿用“插件 → 可组合记忆”页面中的配置。",
|
|
78
75
|
"overview.createIdentityTitle": "记忆空间信息",
|
|
79
76
|
"overview.createIdentityHint": "名称用于识别;描述会帮助 Agent 判断什么内容应写入和召回。",
|
|
80
77
|
"overview.createPlacementTitle": "记忆空间 Provider",
|
|
81
|
-
"overview.createPlacementHint": "这是一次明确的手动创建;选择一个已启用 Provider
|
|
78
|
+
"overview.createPlacementHint": "这是一次明确的手动创建;选择一个已启用 Provider。任务 Agent 新建空间时的选择在“新空间的 Provider”中设置。",
|
|
82
79
|
"overview.createName": "新记忆空间名称",
|
|
83
80
|
"overview.createNamePlaceholder": "名称",
|
|
84
81
|
"overview.createDescription": "新记忆空间描述",
|
|
@@ -107,7 +104,7 @@
|
|
|
107
104
|
"overview.capability.exact-write": "精确写入",
|
|
108
105
|
"overview.capability.forget": "安全遗忘",
|
|
109
106
|
"overview.candidateNativeReady": "官方原生 · 跟随当前记忆范围",
|
|
110
|
-
"overview.providerServiceRequired": "
|
|
107
|
+
"overview.providerServiceRequired": "未启用",
|
|
111
108
|
"overview.nativeCliRequired": "需要在本机安装 Mnemon CLI;其他 Provider 不受影响",
|
|
112
109
|
"overview.workspaceBinding.automatic": "跟随当前记忆范围",
|
|
113
110
|
"overview.workspaceBinding.optional-override": "跟随当前范围;全局可自定义位置",
|
|
@@ -124,21 +121,19 @@
|
|
|
124
121
|
"overview.providerLabel": "记忆引擎",
|
|
125
122
|
"overview.nativeOfficial": "官方原生",
|
|
126
123
|
"overview.providerNativeHint": "官方原生、本地优先,保留完整图谱与软删除能力",
|
|
127
|
-
"strategy.action": "
|
|
128
|
-
"strategy.title": "
|
|
129
|
-
"strategy.description": "
|
|
124
|
+
"strategy.action": "新空间的 Provider",
|
|
125
|
+
"strategy.title": "新空间的 Provider",
|
|
126
|
+
"strategy.description": "任务 Agent 需要新建记忆空间时,如何选择 Provider;已有空间仍按名称与说明路由。",
|
|
130
127
|
"strategy.loading": "正在读取 Provider 目录…",
|
|
131
128
|
"strategy.modeTitle": "Provider 选择方式",
|
|
132
|
-
"strategy.modeHint": "
|
|
129
|
+
"strategy.modeHint": "只影响任务 Agent 新建的记忆空间;手动创建时始终由你指定。",
|
|
133
130
|
"strategy.manualHint": "固定使用一个 Provider,Agent 无法改选",
|
|
134
131
|
"strategy.automaticHint": "先执行硬规则,再由任务 Agent 选择合格 Provider",
|
|
135
132
|
"strategy.manualTitle": "固定 Provider",
|
|
136
133
|
"strategy.manualDescription": "当现有记忆空间都不适合时,新记忆空间固定创建在这个 Provider 中。",
|
|
137
134
|
"strategy.automaticTitle": "智能选择规则",
|
|
138
135
|
"strategy.automaticDescription": "数据边界与能力要求由主机强制执行,Prompt 只影响合格候选之间的判断。",
|
|
139
|
-
"strategy.
|
|
140
|
-
"strategy.taskAgentUnavailable": "等待任务 Agent",
|
|
141
|
-
"strategy.save": "保存策略",
|
|
136
|
+
"strategy.save": "保存",
|
|
142
137
|
"strategy.saving": "保存中…",
|
|
143
138
|
"overview.providerOpenVikingHint": "连接已有 OpenViking 服务,由记忆空间工作流统一调度",
|
|
144
139
|
"overview.providerSummary.mnemon-native": "官方原生、本地优先,保留完整图谱与软删除能力",
|
|
@@ -256,7 +251,7 @@
|
|
|
256
251
|
"graph.kindSpace": "记忆空间",
|
|
257
252
|
"graph.kindEntity": "实体",
|
|
258
253
|
"search.title": "检索记忆",
|
|
259
|
-
"search.description": "
|
|
254
|
+
"search.description": "在已激活的记忆空间中检索:直接检索返回原文,Agent 查询给出带引用的回答。",
|
|
260
255
|
"search.maxResults": "最多 {count} 条",
|
|
261
256
|
"search.placeholder": "为什么选用 SQLite?这个项目有哪些发布约定?",
|
|
262
257
|
"search.queryAria": "记忆查询",
|
|
@@ -283,7 +278,7 @@
|
|
|
283
278
|
"search.noRelated": "没有找到两跳内的关联节点。",
|
|
284
279
|
"search.sourcesTitle": "本次检索范围",
|
|
285
280
|
"entities.title": "实体查阅",
|
|
286
|
-
"entities.description": "
|
|
281
|
+
"entities.description": "查看实体在事实、决策与上下文之间的关联。",
|
|
287
282
|
"entities.sourcesTitle": "实体能力范围",
|
|
288
283
|
"entities.unsupportedTitle": "没有支持实体索引的记忆空间",
|
|
289
284
|
"entities.unsupportedText": "当前激活 Provider 仍可通过“检索”召回,但不会在这里伪装成实体图谱。",
|
|
@@ -301,52 +296,41 @@
|
|
|
301
296
|
"entities.selectText": "实体视图会聚合与它相关的记忆,而不是只做字面匹配。",
|
|
302
297
|
"entities.emptyTitle": "没有关联记忆",
|
|
303
298
|
"entities.emptyText": "尝试更完整的名称或另一个实体别名。",
|
|
304
|
-
"remember.title": "
|
|
305
|
-
"remember.description": "
|
|
299
|
+
"remember.title": "存入记忆",
|
|
300
|
+
"remember.description": "任务 Agent 会判断是否值得保存,去重、提炼后写入合适的记忆空间,不占用当前对话。",
|
|
306
301
|
"remember.readOnlyTitle": "当前为只读模式",
|
|
307
302
|
"remember.readOnlyText": "当前部署禁止记忆写入;如需调整,请修改 DSH 的 Mnemon 配置并保存。",
|
|
308
|
-
"remember.delegateTitle": "交给独立任务 Agent",
|
|
309
|
-
"remember.noSession": "无可用会话",
|
|
310
|
-
"remember.ready": "独立任务 Agent 就绪",
|
|
311
|
-
"remember.noTaskAgent": "任务 Agent 不可用",
|
|
312
|
-
"remember.taskAgentReady": "任务 Agent 就绪",
|
|
313
303
|
"remember.candidate": "候选内容",
|
|
314
|
-
"remember.
|
|
315
|
-
"remember.placeholder": "输入希望跨任务保留的背景、偏好、决策或洞察。模型会先判断它是否真的值得沉淀。",
|
|
304
|
+
"remember.placeholder": "输入希望长期保留的背景、偏好、决策或结论。",
|
|
316
305
|
"remember.sessionHint": "当前视图没有可用的模型路由,无法创建独立任务 Agent。",
|
|
317
306
|
"remember.taskAgentHint": "当前 Host 暂时无法创建独立任务 Agent,请刷新状态后重试。",
|
|
318
|
-
"remember.processing": "
|
|
319
|
-
"remember.action": "
|
|
320
|
-
"remember.advanced": "
|
|
321
|
-
"remember.advancedHint": "
|
|
307
|
+
"remember.processing": "任务 Agent 处理中…",
|
|
308
|
+
"remember.action": "交给任务 Agent",
|
|
309
|
+
"remember.advanced": "高级选项",
|
|
310
|
+
"remember.advancedHint": "指定目标记忆空间、分类与重要性",
|
|
322
311
|
"remember.expand": "展开",
|
|
323
312
|
"remember.target": "目标记忆空间",
|
|
324
313
|
"remember.asyncProviderHint": "该记忆空间会等待远程提炼任务完成后再返回真实写入回执。",
|
|
325
314
|
"remember.entities": "实体(逗号分隔)",
|
|
326
315
|
"remember.tags": "标签(逗号分隔)",
|
|
327
|
-
"remember.advancedText": "
|
|
328
|
-
"remember.saving": "
|
|
329
|
-
"remember.advancedAction": "
|
|
330
|
-
"remember.skipped": "独立任务 Agent 判断无需写入",
|
|
331
|
-
"remember.completed": "独立任务 Agent 已完成处理",
|
|
332
|
-
"remember.processed": "独立任务 Agent 已处理:{action}",
|
|
333
|
-
"remember.dispatchFailed": "调度失败:{error}",
|
|
334
|
-
"remember.saveFailed": "保存失败:{error}",
|
|
316
|
+
"remember.advancedText": "这些约束同样经过任务 Agent 的去重与回执。",
|
|
317
|
+
"remember.saving": "任务 Agent 处理中…",
|
|
318
|
+
"remember.advancedAction": "按约束交给任务 Agent",
|
|
335
319
|
"content.title": "记忆内容",
|
|
336
|
-
"content.description": "
|
|
320
|
+
"content.description": "浏览各记忆空间保存的内容。",
|
|
337
321
|
"content.sourcesTitle": "Provider 内容模型",
|
|
338
322
|
"content.count": "{count} 条记忆",
|
|
339
323
|
"content.filterAria": "筛选记忆内容",
|
|
340
324
|
"content.filterPlaceholder": "按内容或精确 ID 筛选…",
|
|
341
325
|
"content.categoryAria": "记忆分类",
|
|
342
326
|
"content.apply": "应用筛选",
|
|
343
|
-
"content.notice": "
|
|
327
|
+
"content.notice": "查询型 Provider 需要输入关键词后才显示内容。",
|
|
344
328
|
"content.queryRequiredTitle": "查询型记忆空间等待问题",
|
|
345
329
|
"content.queryRequiredText": "输入一个明确查询即可读取 ByteRover 等不提供全量列表的 Provider。",
|
|
346
330
|
"content.showing": "当前显示 {visible} / {total}",
|
|
347
331
|
"content.showMore": "再显示 {count} 条",
|
|
348
332
|
"content.emptyTitle": "没有符合条件的记忆",
|
|
349
|
-
"content.emptyText": "
|
|
333
|
+
"content.emptyText": "清空筛选,或先存入第一条记忆。",
|
|
350
334
|
"nav.spaces": "记忆空间",
|
|
351
335
|
"overview.editSpace": "编辑",
|
|
352
336
|
"overview.editSpaceAria": "编辑{name}",
|
|
@@ -356,7 +340,10 @@
|
|
|
356
340
|
"overview.deleteSpaceAria": "删除{name}",
|
|
357
341
|
"overview.disconnectSpace": "断开",
|
|
358
342
|
"overview.disconnectSpaceAria": "断开{name}",
|
|
359
|
-
"overview.deletingSpace": "删除中…"
|
|
343
|
+
"overview.deletingSpace": "删除中…",
|
|
344
|
+
"common.score": "相关度 {value}",
|
|
345
|
+
"overview.providerEnableHint": "未启用的 Provider 可在“插件 → 可组合记忆”的“记忆空间”页面中启用。",
|
|
346
|
+
"search.citations": "引用"
|
|
360
347
|
},
|
|
361
348
|
"en": {
|
|
362
349
|
"term.space": "Memory Space",
|
|
@@ -372,10 +359,10 @@
|
|
|
372
359
|
"nav.bodies": "Memory Spaces",
|
|
373
360
|
"nav.search": "Recall",
|
|
374
361
|
"nav.entities": "Entities",
|
|
375
|
-
"nav.rememberAction": "
|
|
362
|
+
"nav.rememberAction": "Save to memory",
|
|
376
363
|
"nav.content": "Content",
|
|
377
364
|
"overview.title": "Memory Spaces",
|
|
378
|
-
"overview.description": "
|
|
365
|
+
"overview.description": "Long-term memory held by Mnemon Native or third-party Providers; active spaces take part in recall.",
|
|
379
366
|
"overview.pageDescription": "Create and activate Memory Spaces, then inspect storage health and live relation snapshots across providers.",
|
|
380
367
|
"overview.interval": "Full sync on entry · Click a card to sync on demand",
|
|
381
368
|
"overview.fullSyncPending": "Waiting for the first full sync",
|
|
@@ -384,11 +371,8 @@
|
|
|
384
371
|
"overview.fullSyncMinutes": "Last full sync: {count}m ago",
|
|
385
372
|
"overview.fullSyncHours": "Last full sync: {count}h ago",
|
|
386
373
|
"overview.fullSyncDays": "Last full sync: {count}d ago",
|
|
387
|
-
"overview.syncing": "Syncing…",
|
|
388
|
-
"overview.syncNow": "Sync now",
|
|
389
374
|
"overview.directory": "Memory Space Directory",
|
|
390
|
-
"overview.directory.description": "Each card
|
|
391
|
-
"overview.directory.waiting": "Waiting for directory",
|
|
375
|
+
"overview.directory.description": "Each card is one Memory Space; click it to check the connection, and use its switch to include it in recall.",
|
|
392
376
|
"overview.directory.unsynced": "Directory not synchronized",
|
|
393
377
|
"overview.directory.unsyncedBadge": "Directory pending",
|
|
394
378
|
"overview.directoryLoading": "Loading the Memory Space directory",
|
|
@@ -400,7 +384,7 @@
|
|
|
400
384
|
"overview.reconnectHint": "Click the card to reconnect and synchronize this Memory Space",
|
|
401
385
|
"overview.reconnectAria": "Reconnect {name}",
|
|
402
386
|
"overview.snapshotLoading": "Loading the multi-space live snapshot",
|
|
403
|
-
"overview.metadataAction": "
|
|
387
|
+
"overview.metadataAction": "Tidy names and descriptions",
|
|
404
388
|
"overview.metadataTitle": "Maintain Memory Space metadata with AI",
|
|
405
389
|
"overview.metadataDescription": "Select one or more active Memory Spaces. The system reads a small sample through each Provider’s fastest native path, then gives each space to an independent task Agent for its title and description.",
|
|
406
390
|
"overview.metadataUnavailable": "Temporarily unavailable: no active Agent matches the current memory scope",
|
|
@@ -431,13 +415,13 @@
|
|
|
431
415
|
"overview.noActiveTitle": "No active Memory Spaces",
|
|
432
416
|
"overview.noActiveText": "Enable read access for at least one space to aggregate its live graph here.",
|
|
433
417
|
"overview.noContentTitle": "Active spaces have no content yet",
|
|
434
|
-
"overview.noContentText": "
|
|
418
|
+
"overview.noContentText": "Save memories to see their nodes and relations here.",
|
|
435
419
|
"overview.createTitle": "Create Memory Space",
|
|
436
420
|
"overview.createDialogHint": "Define this Memory Space and choose its provider here. It reuses services, credentials, and global data locations configured on the dsh-mnemon page under Plugins.",
|
|
437
421
|
"overview.createIdentityTitle": "Memory Space details",
|
|
438
422
|
"overview.createIdentityHint": "The name identifies the space; the description guides when the agent writes and recalls it.",
|
|
439
423
|
"overview.createPlacementTitle": "Memory Space provider",
|
|
440
|
-
"overview.createPlacementHint": "This is an explicit manual creation
|
|
424
|
+
"overview.createPlacementHint": "This is an explicit manual creation; choose one enabled Provider. What a task Agent chooses for new spaces is set in Provider for new spaces.",
|
|
441
425
|
"overview.createName": "New Memory Space name",
|
|
442
426
|
"overview.createNamePlaceholder": "Name",
|
|
443
427
|
"overview.createDescription": "New Memory Space description",
|
|
@@ -466,7 +450,7 @@
|
|
|
466
450
|
"overview.capability.exact-write": "Exact writes",
|
|
467
451
|
"overview.capability.forget": "Safe forget",
|
|
468
452
|
"overview.candidateNativeReady": "Official native · follows the active memory scope",
|
|
469
|
-
"overview.providerServiceRequired": "
|
|
453
|
+
"overview.providerServiceRequired": "Off",
|
|
470
454
|
"overview.nativeCliRequired": "Needs the Mnemon CLI on this machine; other providers work without it",
|
|
471
455
|
"overview.workspaceBinding.automatic": "Follows the active memory scope",
|
|
472
456
|
"overview.workspaceBinding.optional-override": "Follows the active scope; global location can be customized",
|
|
@@ -483,21 +467,19 @@
|
|
|
483
467
|
"overview.providerLabel": "Memory engine",
|
|
484
468
|
"overview.nativeOfficial": "Official native",
|
|
485
469
|
"overview.providerNativeHint": "Official native, local-first storage with the full graph and soft-delete semantics",
|
|
486
|
-
"strategy.action": "
|
|
487
|
-
"strategy.title": "
|
|
488
|
-
"strategy.description": "
|
|
470
|
+
"strategy.action": "Provider for new spaces",
|
|
471
|
+
"strategy.title": "Provider for new spaces",
|
|
472
|
+
"strategy.description": "How a task Agent picks a Provider when it creates a Memory Space; existing spaces are still chosen by name and description.",
|
|
489
473
|
"strategy.loading": "Loading Provider directory…",
|
|
490
474
|
"strategy.modeTitle": "Provider selection",
|
|
491
|
-
"strategy.modeHint": "
|
|
475
|
+
"strategy.modeHint": "Applies only to spaces a task Agent creates; you always choose when you create one yourself.",
|
|
492
476
|
"strategy.manualHint": "Fix one Provider; the Agent cannot override it",
|
|
493
477
|
"strategy.automaticHint": "Apply hard rules first, then let the task Agent choose an eligible Provider",
|
|
494
478
|
"strategy.manualTitle": "Fixed Provider",
|
|
495
479
|
"strategy.manualDescription": "When no existing space fits, create the new space on this Provider.",
|
|
496
480
|
"strategy.automaticTitle": "Smart selection rules",
|
|
497
481
|
"strategy.automaticDescription": "The host enforces data and capability rules. The prompt only guides judgment among eligible candidates.",
|
|
498
|
-
"strategy.
|
|
499
|
-
"strategy.taskAgentUnavailable": "Waiting for task Agent",
|
|
500
|
-
"strategy.save": "Save strategy",
|
|
482
|
+
"strategy.save": "Save",
|
|
501
483
|
"strategy.saving": "Saving…",
|
|
502
484
|
"overview.providerOpenVikingHint": "Connect an existing OpenViking service under the same Memory Space workflow",
|
|
503
485
|
"overview.providerSummary.mnemon-native": "Official native, local-first storage with the full graph and soft-delete semantics",
|
|
@@ -615,7 +597,7 @@
|
|
|
615
597
|
"graph.kindSpace": "Memory Space",
|
|
616
598
|
"graph.kindEntity": "Entity",
|
|
617
599
|
"search.title": "Recall Memory",
|
|
618
|
-
"search.description": "
|
|
600
|
+
"search.description": "Search the active Memory Spaces: direct search returns the stored text, an Agent query answers with citations.",
|
|
619
601
|
"search.maxResults": "Up to {count} results",
|
|
620
602
|
"search.placeholder": "Why did we choose SQLite? What release conventions apply?",
|
|
621
603
|
"search.queryAria": "Memory query",
|
|
@@ -642,7 +624,7 @@
|
|
|
642
624
|
"search.noRelated": "No related nodes found within two hops.",
|
|
643
625
|
"search.sourcesTitle": "Search coverage",
|
|
644
626
|
"entities.title": "Entity Explorer",
|
|
645
|
-
"entities.description": "
|
|
627
|
+
"entities.description": "See how entities connect facts, decisions and context.",
|
|
646
628
|
"entities.sourcesTitle": "Entity capability coverage",
|
|
647
629
|
"entities.unsupportedTitle": "No active space exposes an entity index",
|
|
648
630
|
"entities.unsupportedText": "The active providers remain searchable through Recall, but are not presented here as a fabricated entity graph.",
|
|
@@ -660,52 +642,41 @@
|
|
|
660
642
|
"entities.selectText": "The entity view aggregates related memories instead of relying on literal matching.",
|
|
661
643
|
"entities.emptyTitle": "No related memories",
|
|
662
644
|
"entities.emptyText": "Try the full name or another entity alias.",
|
|
663
|
-
"remember.title": "
|
|
664
|
-
"remember.description": "
|
|
645
|
+
"remember.title": "Save to memory",
|
|
646
|
+
"remember.description": "A task Agent decides whether this is worth keeping, removes duplicates, distills it and writes it to the right Memory Space, outside this conversation.",
|
|
665
647
|
"remember.readOnlyTitle": "Read-only mode",
|
|
666
648
|
"remember.readOnlyText": "This deployment disables memory writes. Change and save the DSH Mnemon configuration to enable them.",
|
|
667
|
-
"remember.delegateTitle": "Send to independent task Agent",
|
|
668
|
-
"remember.noSession": "No live session",
|
|
669
|
-
"remember.ready": "Independent task Agent ready",
|
|
670
|
-
"remember.noTaskAgent": "Task Agent unavailable",
|
|
671
|
-
"remember.taskAgentReady": "Task Agent ready",
|
|
672
649
|
"remember.candidate": "Candidate",
|
|
673
|
-
"remember.
|
|
674
|
-
"remember.placeholder": "Enter background, preferences, decisions, or insights worth retaining across tasks. The model decides whether they qualify.",
|
|
650
|
+
"remember.placeholder": "Background, preferences, decisions or conclusions worth keeping.",
|
|
675
651
|
"remember.sessionHint": "No usable model route is available for an independent task Agent.",
|
|
676
652
|
"remember.taskAgentHint": "The Host cannot currently create an isolated task Agent. Refresh status and try again.",
|
|
677
|
-
"remember.processing": "
|
|
678
|
-
"remember.action": "
|
|
679
|
-
"remember.advanced": "Advanced
|
|
680
|
-
"remember.advancedHint": "
|
|
653
|
+
"remember.processing": "Task Agent working…",
|
|
654
|
+
"remember.action": "Send to task Agent",
|
|
655
|
+
"remember.advanced": "Advanced options",
|
|
656
|
+
"remember.advancedHint": "Choose the target space, category and importance",
|
|
681
657
|
"remember.expand": "Expand",
|
|
682
658
|
"remember.target": "Target Memory Space",
|
|
683
659
|
"remember.asyncProviderHint": "This Memory Space waits for remote extraction to settle before returning a truthful write receipt.",
|
|
684
660
|
"remember.entities": "Entities (comma-separated)",
|
|
685
661
|
"remember.tags": "Tags (comma-separated)",
|
|
686
|
-
"remember.advancedText": "
|
|
687
|
-
"remember.saving": "
|
|
688
|
-
"remember.advancedAction": "
|
|
689
|
-
"remember.skipped": "The independent task Agent decided not to write",
|
|
690
|
-
"remember.completed": "The independent task Agent completed processing",
|
|
691
|
-
"remember.processed": "Independent task Agent processed: {action}",
|
|
692
|
-
"remember.dispatchFailed": "Dispatch failed: {error}",
|
|
693
|
-
"remember.saveFailed": "Save failed: {error}",
|
|
662
|
+
"remember.advancedText": "Constraints still go through the task Agent’s duplicate check and receipt.",
|
|
663
|
+
"remember.saving": "Task Agent working…",
|
|
664
|
+
"remember.advancedAction": "Send with constraints",
|
|
694
665
|
"content.title": "Memory Content",
|
|
695
|
-
"content.description": "
|
|
666
|
+
"content.description": "Browse what each Memory Space holds.",
|
|
696
667
|
"content.sourcesTitle": "Provider content models",
|
|
697
668
|
"content.count": "{count} memories",
|
|
698
669
|
"content.filterAria": "Filter memory content",
|
|
699
670
|
"content.filterPlaceholder": "Filter by content or exact ID…",
|
|
700
671
|
"content.categoryAria": "Memory category",
|
|
701
672
|
"content.apply": "Apply filters",
|
|
702
|
-
"content.notice": "
|
|
673
|
+
"content.notice": "Query-only Providers show content once you enter a query.",
|
|
703
674
|
"content.queryRequiredTitle": "Query-only spaces are waiting",
|
|
704
675
|
"content.queryRequiredText": "Enter a focused query to inspect providers such as ByteRover that do not expose a complete list.",
|
|
705
676
|
"content.showing": "Showing {visible} / {total}",
|
|
706
677
|
"content.showMore": "Show {count} more",
|
|
707
678
|
"content.emptyTitle": "No matching memories",
|
|
708
|
-
"content.emptyText": "Clear the filters or
|
|
679
|
+
"content.emptyText": "Clear the filters or save a first memory.",
|
|
709
680
|
"nav.spaces": "Memory Spaces",
|
|
710
681
|
"overview.editSpace": "Edit",
|
|
711
682
|
"overview.editSpaceAria": "Edit {name}",
|
|
@@ -715,6 +686,9 @@
|
|
|
715
686
|
"overview.deleteSpaceAria": "Delete {name}",
|
|
716
687
|
"overview.disconnectSpace": "Disconnect",
|
|
717
688
|
"overview.disconnectSpaceAria": "Disconnect {name}",
|
|
718
|
-
"overview.deletingSpace": "Deleting…"
|
|
689
|
+
"overview.deletingSpace": "Deleting…",
|
|
690
|
+
"common.score": "Score {value}",
|
|
691
|
+
"overview.providerEnableHint": "Turn on more Providers on Memory Spaces’ page under Plugins → dsh-mnemon.",
|
|
692
|
+
"search.citations": "Cites"
|
|
719
693
|
}
|
|
720
694
|
}
|
|
@@ -232,6 +232,7 @@ button.readSourceCard:hover { background: var(--mn-hover); }
|
|
|
232
232
|
.providerFields details { min-width: 0; }
|
|
233
233
|
.providerFields summary { width: fit-content; color: var(--mn-muted); cursor: pointer; font-size: 12px; line-height: 18px; }
|
|
234
234
|
.providerFields summary:hover { color: var(--mn-text); }
|
|
235
|
+
.providerEnableHint { display: block; margin-top: 8px; color: var(--mn-faint); font-size: 12px; line-height: 18px; }
|
|
235
236
|
.providerAdvancedGrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-top: 8px; }
|
|
236
237
|
.providerFieldControl .providerSecretClear { display: flex; align-items: center; gap: 6px; color: var(--mn-muted); cursor: pointer; font-size: 12px; font-weight: 400; }
|
|
237
238
|
.providerWriteHint { display: block; margin-top: 4px; color: var(--mn-faint); font-size: 12px; line-height: 18px; }
|
|
@@ -324,12 +325,8 @@ button.readSourceCard:hover { background: var(--mn-hover); }
|
|
|
324
325
|
|
|
325
326
|
/* Search: a DSH Input-style query field over the controls. */
|
|
326
327
|
.searchBar { margin-bottom: 16px; padding: 14px; border: .5px solid var(--mn-card-line); border-radius: var(--dsw-radius-lg); }
|
|
327
|
-
.queryField {
|
|
328
|
-
.
|
|
329
|
-
.queryField > span { color: var(--mn-faint); font-size: 15px; line-height: 1; }
|
|
330
|
-
.queryField input { width: 100%; height: 40px; border: 0; outline: 0; background: transparent; font-size: 14px; }
|
|
331
|
-
.queryField input::placeholder { color: var(--dsw-alias-label-dimmed); }
|
|
332
|
-
.queryField kbd { color: var(--mn-caption); font: 12px var(--mn-sans); }
|
|
328
|
+
.queryField { width: 100%; height: 40px; }
|
|
329
|
+
.searchChoice { min-width: 160px; }
|
|
333
330
|
.searchControls { display: flex; align-items: flex-end; justify-content: flex-end; gap: 12px; padding-top: 12px; }
|
|
334
331
|
.searchActions { display: flex; align-items: center; gap: 8px; }
|
|
335
332
|
.agentAnswer { margin-bottom: 16px; padding: 16px; border: .5px solid var(--mn-card-line); border-radius: var(--dsw-radius-lg); }
|
|
@@ -338,18 +335,10 @@ button.readSourceCard:hover { background: var(--mn-hover); }
|
|
|
338
335
|
.agentAnswerHeading h3 { margin: 2px 0 0; font-size: 14px; font-weight: 500; line-height: 22px; }
|
|
339
336
|
.agentAnswerHeading > code { color: var(--mn-faint); font-size: 11px; }
|
|
340
337
|
.agentAnswer > p { margin: 12px 0; white-space: pre-wrap; color: var(--mn-text); font-size: 14px; line-height: 22px; }
|
|
341
|
-
.agentCitations { display: flex; flex-wrap: wrap; gap: 6px; padding-top: 10px; border-top: .5px solid var(--mn-line); }
|
|
342
|
-
.agentCitations
|
|
343
|
-
.
|
|
338
|
+
.agentCitations { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding-top: 10px; border-top: .5px solid var(--mn-line); }
|
|
339
|
+
.agentCitations small { color: var(--mn-faint); font-size: 12px; line-height: 18px; }
|
|
340
|
+
.agentCitations span { max-width: 100%; overflow: hidden; padding: 1px 8px; border-radius: 999px; color: var(--mn-muted); background: var(--mn-fill); font-size: 12px; line-height: 18px; text-overflow: ellipsis; white-space: nowrap; }
|
|
344
341
|
.fieldWide { display: grid; gap: 6px; color: var(--mn-muted); font-size: 12px; font-weight: 500; line-height: 18px; }
|
|
345
|
-
.searchControls select,
|
|
346
|
-
.listToolbar input,
|
|
347
|
-
.listToolbar select,
|
|
348
|
-
.entitySearch input { min-width: 140px; height: 32px; border: .5px solid var(--mn-field-line); border-radius: var(--dsw-radius-md); outline: 0; padding: 0 10px; color: var(--mn-text); background: var(--mn-input); font-size: 13px; font-weight: 400; }
|
|
349
|
-
.searchControls select:focus,
|
|
350
|
-
.listToolbar input:focus,
|
|
351
|
-
.listToolbar select:focus,
|
|
352
|
-
.entitySearch input:focus,
|
|
353
342
|
.supervisedForm textarea:focus { border-color: var(--mn-accent); }
|
|
354
343
|
.singleColumn { max-width: 830px; }
|
|
355
344
|
.resultLayout { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(300px, .85fr); gap: 16px; align-items: start; }
|
|
@@ -391,12 +380,8 @@ button.readSourceCard:hover { background: var(--mn-hover); }
|
|
|
391
380
|
.supervisedComposer { border: .5px solid var(--mn-card-line); border-radius: var(--dsw-radius-lg); }
|
|
392
381
|
.supervisedComposer { overflow: hidden; }
|
|
393
382
|
.supervisedForm { padding: 16px; }
|
|
394
|
-
.
|
|
395
|
-
.
|
|
396
|
-
.sessionReady,
|
|
397
|
-
.sessionMissing { padding: 1px 8px; border-radius: 999px; font-size: 11px; font-weight: 500; line-height: 17px; }
|
|
398
|
-
.sessionReady { color: var(--mn-success); background: color-mix(in srgb, var(--mn-success) 10%, transparent); }
|
|
399
|
-
.sessionMissing { color: var(--mn-danger); background: color-mix(in srgb, var(--mn-danger) 10%, transparent); }
|
|
383
|
+
.candidateHeading { display: flex; min-width: 0; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
|
|
384
|
+
.candidateHeading > label { color: var(--mn-text); font-size: 13px; font-weight: 500; line-height: 20px; }
|
|
400
385
|
.supervisedForm textarea { width: 100%; resize: vertical; border: .5px solid var(--mn-field-line); border-radius: var(--dsw-radius-md); outline: 0; padding: 10px 12px; color: var(--mn-text); background: var(--mn-input); font-size: 14px; line-height: 22px; }
|
|
401
386
|
.sessionHint { margin: 8px 0 0; color: var(--mn-danger); font-size: 12px; line-height: 18px; }
|
|
402
387
|
.fieldWide { grid-column: 1 / -1; }
|
|
@@ -416,8 +401,7 @@ button.readSourceCard:hover { background: var(--mn-hover); }
|
|
|
416
401
|
.manualActions p { max-width: 520px; margin: 0; color: var(--mn-faint); font-size: 12px; line-height: 18px; }
|
|
417
402
|
|
|
418
403
|
.listToolbar { display: grid; grid-template-columns: minmax(0, 1fr) 180px auto; gap: 8px; padding: 12px; border: .5px solid var(--mn-card-line); border-radius: var(--dsw-radius-lg); }
|
|
419
|
-
.listToolbar
|
|
420
|
-
.listToolbar select { width: 100%; min-width: 0; }
|
|
404
|
+
.listToolbar > * { min-width: 0; }
|
|
421
405
|
.listNotice { margin: 10px 2px 16px; color: var(--mn-faint); font-size: 12px; line-height: 18px; }
|
|
422
406
|
.listNotice span { margin-right: 8px; padding: 1px 8px; border-radius: 999px; color: var(--mn-success); background: color-mix(in srgb, var(--mn-success) 10%, transparent); font-size: 11px; font-weight: 500; line-height: 17px; }
|
|
423
407
|
.memoryList { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; align-items: start; }
|
|
@@ -469,7 +453,6 @@ button.readSourceCard:hover { background: var(--mn-hover); }
|
|
|
469
453
|
.searchControls { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
470
454
|
.searchActions { grid-column: 1 / -1; }
|
|
471
455
|
.searchActions > button { flex: 1; }
|
|
472
|
-
.searchControls select { width: 100%; min-width: 0; }
|
|
473
456
|
.listToolbar { grid-template-columns: 1fr; }
|
|
474
457
|
.bodyDirectoryHeader { display: grid; grid-template-columns: minmax(0, 1fr); }
|
|
475
458
|
.bodyDirectoryHeader > div { min-width: 0; }
|
|
@@ -490,8 +473,7 @@ button.readSourceCard:hover { background: var(--mn-hover); }
|
|
|
490
473
|
@media (max-width: 520px) {
|
|
491
474
|
.memoryHeaderActions { width: 100%; }
|
|
492
475
|
.memoryHeaderActions > button { flex: 1; }
|
|
493
|
-
.
|
|
494
|
-
.cardTop { align-items: flex-start; flex-direction: column; }
|
|
476
|
+
.cardTop { align-items: flex-start; flex-direction: column; }
|
|
495
477
|
.cardActions { align-items: stretch; flex-wrap: wrap; }
|
|
496
478
|
.cardActions button { flex: 1; }
|
|
497
479
|
.searchControls { grid-template-columns: 1fr; }
|
|
@@ -160,12 +160,12 @@
|
|
|
160
160
|
.shell .bodyCardHeader > [class*='bodySwitch'] { flex: 0 0 auto; }
|
|
161
161
|
.shell article[class*='bodyCard'] > p {
|
|
162
162
|
display: -webkit-box;
|
|
163
|
-
min-height:
|
|
164
|
-
max-height:
|
|
163
|
+
min-height: 40px;
|
|
164
|
+
max-height: 40px;
|
|
165
165
|
margin: 10px 0;
|
|
166
166
|
overflow: hidden;
|
|
167
167
|
-webkit-box-orient: vertical;
|
|
168
|
-
-webkit-line-clamp:
|
|
168
|
+
-webkit-line-clamp: 2;
|
|
169
169
|
}
|
|
170
170
|
.shell .bodyCardFooter {
|
|
171
171
|
display: grid;
|