dsh-mnemon-source-memory-spaces 0.5.2 → 0.5.3
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 +9 -15
- package/lib/client.js +1128 -235
- package/lib/index.d.ts +16 -1
- package/lib/index.js +11 -75
- package/lib/native-cli.d.ts +15 -0
- package/lib/native-cli.js +108 -0
- package/lib/types/client/presentation.d.ts +6 -0
- package/package.json +22 -13
- package/presentation/locales.json +696 -0
- package/presentation/page.module.css +486 -0
- package/presentation/sidebar.module.css +281 -0
package/lib/client.js
CHANGED
|
@@ -7,6 +7,899 @@ window.__ModuleLoader__.load({
|
|
|
7
7
|
let react = require("react");
|
|
8
8
|
let dsh_mnemon_client = require("dsh-mnemon/client");
|
|
9
9
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
|
+
//#region presentation/locales.json
|
|
11
|
+
var zh = {
|
|
12
|
+
"term.space": "记忆体",
|
|
13
|
+
"term.spaces": "记忆体",
|
|
14
|
+
"category.decision": "决策",
|
|
15
|
+
"category.preference": "偏好",
|
|
16
|
+
"category.fact": "事实",
|
|
17
|
+
"category.insight": "洞察",
|
|
18
|
+
"category.context": "上下文",
|
|
19
|
+
"category.general": "通用",
|
|
20
|
+
"nav.memory.aria": "记忆体页面",
|
|
21
|
+
"nav.overview": "概览",
|
|
22
|
+
"nav.bodies": "记忆体",
|
|
23
|
+
"nav.search": "检索",
|
|
24
|
+
"nav.entities": "实体",
|
|
25
|
+
"nav.rememberAction": "沉淀记忆",
|
|
26
|
+
"nav.content": "内容",
|
|
27
|
+
"overview.title": "记忆体",
|
|
28
|
+
"overview.description": "统一管理 Mnemon 记忆体与第三方 Provider 接入的记忆空间;激活后的记忆体共同参与读取、路由与实时快照。",
|
|
29
|
+
"overview.pageDescription": "创建和启停记忆体,查看每个 Provider 的存储状态与实时关联快照。",
|
|
30
|
+
"overview.interval": "进入时全量同步 · 点击卡片按需同步",
|
|
31
|
+
"overview.fullSyncPending": "等待首次全量同步",
|
|
32
|
+
"overview.fullSyncJustNow": "上次全量同步:刚刚",
|
|
33
|
+
"overview.fullSyncSeconds": "上次全量同步:{count} 秒前",
|
|
34
|
+
"overview.fullSyncMinutes": "上次全量同步:{count} 分钟前",
|
|
35
|
+
"overview.fullSyncHours": "上次全量同步:{count} 小时前",
|
|
36
|
+
"overview.fullSyncDays": "上次全量同步:{count} 天前",
|
|
37
|
+
"overview.syncing": "同步中…",
|
|
38
|
+
"overview.syncNow": "立即同步",
|
|
39
|
+
"overview.directory": "记忆体目录",
|
|
40
|
+
"overview.directory.description": "每张卡片对应一个真实记忆空间。第三方 Provider 首次接入时建立映射,之后点击卡片只检测当前记忆体;本地维护的标题与说明不会被重连覆盖。",
|
|
41
|
+
"overview.directory.waiting": "等待目录",
|
|
42
|
+
"overview.directory.unsynced": "目录尚未同步",
|
|
43
|
+
"overview.directory.unsyncedBadge": "目录待同步",
|
|
44
|
+
"overview.directoryLoading": "正在加载记忆体目录",
|
|
45
|
+
"overview.healthLoading": "正在检测各记忆体状态",
|
|
46
|
+
"overview.storageHealthy": "存储正常",
|
|
47
|
+
"overview.storageUnhealthy": "存储异常",
|
|
48
|
+
"overview.storageChecking": "检测中",
|
|
49
|
+
"overview.reconnecting": "重连中",
|
|
50
|
+
"overview.reconnectHint": "点击卡片重新检测并同步这个记忆体",
|
|
51
|
+
"overview.reconnectAria": "重新连接{name}",
|
|
52
|
+
"overview.snapshotLoading": "正在加载多记忆体实时快照",
|
|
53
|
+
"overview.metadataAction": "AI 维护元信息",
|
|
54
|
+
"overview.metadataTitle": "AI 维护记忆体元信息",
|
|
55
|
+
"overview.metadataDescription": "选择一个或多个已激活记忆体。系统会分别通过各 Provider 最快的原生查询路径读取少量样本,再由独立任务 Agent 生成标题与说明。",
|
|
56
|
+
"overview.metadataUnavailable": "暂时无法运行:未找到与当前记忆范围匹配的活跃 Agent",
|
|
57
|
+
"overview.metadataLoading": "正在载入可维护的记忆体…",
|
|
58
|
+
"overview.metadataEmpty": "当前没有可由 AI 维护元信息的已激活记忆体。",
|
|
59
|
+
"overview.metadataSelected": "已选择 {count} 个记忆体",
|
|
60
|
+
"overview.metadataSelectAll": "全选",
|
|
61
|
+
"overview.metadataClear": "清空",
|
|
62
|
+
"overview.metadataSafety": "仅更新本地标题与说明,不会修改、移动或删除记忆内容。Provider 关闭后,这些本地元数据会随映射一起清理。",
|
|
63
|
+
"overview.metadataGenerate": "AI 生成({count})",
|
|
64
|
+
"overview.metadataGenerating": "AI 正在生成…",
|
|
65
|
+
"overview.metadataRunningCount": "{count} 个生成中",
|
|
66
|
+
"overview.metadataTaskRunning": "生成中…",
|
|
67
|
+
"overview.metadataTaskSuccess": "已更新",
|
|
68
|
+
"overview.metadataTaskError": "失败:{error}",
|
|
69
|
+
"overview.metadataTaskUnknown": "未知错误",
|
|
70
|
+
"overview.metadataCompleted": "已更新 {count} 个记忆体的元信息。",
|
|
71
|
+
"overview.mnemonDefault": "Mnemon 默认",
|
|
72
|
+
"overview.toggleAria": "{name}读取开关",
|
|
73
|
+
"overview.toggling": "切换中",
|
|
74
|
+
"overview.noDescription": "尚未提供路由说明。",
|
|
75
|
+
"overview.unsyncedTitle": "记忆体目录尚未同步",
|
|
76
|
+
"overview.unsyncedShort": "当前 Web 客户端与 DSH Host 状态不一致;重启 Host 后会重新登记既有 Store。",
|
|
77
|
+
"overview.unsyncedLong": "当前 Host 仍在使用旧插件契约;重启 DSH 后会重新发现既有 Store,期间不会删除任何 .db。",
|
|
78
|
+
"overview.emptyTitle": "还没有记忆体",
|
|
79
|
+
"overview.emptyShort": "创建第一个记忆体并写入稳定上下文后,它会出现在这里。",
|
|
80
|
+
"overview.emptyLong": "创建一个 Mnemon 记忆体,或在“设置 → 记忆系统”启用第三方 Provider 以同步其已有记忆空间。",
|
|
81
|
+
"overview.noActiveTitle": "没有激活的记忆体",
|
|
82
|
+
"overview.noActiveText": "开启至少一个记忆体的读取开关,即可在这里聚合它的实时图谱。",
|
|
83
|
+
"overview.noContentTitle": "已激活记忆体尚无内容",
|
|
84
|
+
"overview.noContentText": "向任意记忆体沉淀稳定上下文后,这里会聚合呈现节点与关系。",
|
|
85
|
+
"overview.createTitle": "创建记忆体",
|
|
86
|
+
"overview.createDialogHint": "这里定义记忆体用途并选择底层 Provider;服务、凭据和全局数据位置沿用“设置 → 记忆系统”的配置。",
|
|
87
|
+
"overview.createIdentityTitle": "记忆体信息",
|
|
88
|
+
"overview.createIdentityHint": "名称用于识别;描述会帮助 Agent 判断什么内容应写入和召回。",
|
|
89
|
+
"overview.createPlacementTitle": "记忆体 Provider",
|
|
90
|
+
"overview.createPlacementHint": "这是一次明确的手动创建;选择一个已启用 Provider。自动选择由“沉淀策略”统一管理。",
|
|
91
|
+
"overview.createName": "新记忆体名称",
|
|
92
|
+
"overview.createNamePlaceholder": "名称",
|
|
93
|
+
"overview.createDescription": "新记忆体描述",
|
|
94
|
+
"overview.createDescriptionPlaceholder": "说明哪些内容属于它,以及何时应被召回",
|
|
95
|
+
"overview.placementMode": "底层选择方式",
|
|
96
|
+
"overview.placementManual": "手动指定",
|
|
97
|
+
"overview.placementManualHint": "直接选择一个已启用 Provider",
|
|
98
|
+
"overview.placementAutomatic": "智能选择",
|
|
99
|
+
"overview.placementAutomaticHint": "先应用数据边界与能力规则,再由 Agent 在合格候选中选择",
|
|
100
|
+
"overview.placementUnavailable": "需要一个已连接且与当前工作区对齐的对话",
|
|
101
|
+
"overview.recommended": "推荐",
|
|
102
|
+
"overview.placementPolicy": "选择策略",
|
|
103
|
+
"overview.placementPolicyHint": "规则由系统强制执行,Prompt 只影响合格候选之间的判断。",
|
|
104
|
+
"overview.agentDecision": "Agent 决策",
|
|
105
|
+
"overview.placementPrompt": "策略 Prompt(可选)",
|
|
106
|
+
"overview.placementPromptPlaceholder": "例如:这是团队协作知识;在满足精确写入要求时优先本地,否则优先共享。",
|
|
107
|
+
"overview.dataBoundary": "数据边界",
|
|
108
|
+
"overview.dataBoundaryRemote": "允许远程服务",
|
|
109
|
+
"overview.dataBoundaryLocal": "仅限本地",
|
|
110
|
+
"overview.preference": "软偏好",
|
|
111
|
+
"overview.preferenceBalanced": "综合平衡",
|
|
112
|
+
"overview.preferenceLocal": "本地优先",
|
|
113
|
+
"overview.preferenceShared": "共享优先",
|
|
114
|
+
"overview.requiredCapabilities": "必须具备(可多选)",
|
|
115
|
+
"overview.capability.graph": "关系图谱",
|
|
116
|
+
"overview.capability.exact-write": "精确写入",
|
|
117
|
+
"overview.capability.forget": "安全遗忘",
|
|
118
|
+
"overview.candidateNativeReady": "官方原生 · 跟随当前记忆范围",
|
|
119
|
+
"overview.providerServiceRequired": "尚未启用;请先前往“设置 → 记忆系统”完成服务配置",
|
|
120
|
+
"overview.workspaceBinding.automatic": "跟随当前记忆范围",
|
|
121
|
+
"overview.workspaceBinding.optional-override": "跟随当前范围;全局可自定义位置",
|
|
122
|
+
"overview.workspaceBinding.provider-global": "始终使用全局范围",
|
|
123
|
+
"overview.candidateOpenViking": "纳入远程候选并提供连接",
|
|
124
|
+
"overview.candidateLocal": "本地 Provider · 跟随当前记忆范围",
|
|
125
|
+
"overview.candidateRemote": "远程 Provider · 使用全局服务配置",
|
|
126
|
+
"overview.placementByLlm": "Agent 智能选择",
|
|
127
|
+
"overview.placementByRules": "规则自动确定",
|
|
128
|
+
"overview.placementConfidence": "置信度:{confidence}",
|
|
129
|
+
"overview.confidence.high": "高",
|
|
130
|
+
"overview.confidence.medium": "中",
|
|
131
|
+
"overview.confidence.low": "低",
|
|
132
|
+
"overview.providerLabel": "记忆引擎",
|
|
133
|
+
"overview.nativeOfficial": "官方原生",
|
|
134
|
+
"overview.providerNativeHint": "官方原生、本地优先,保留完整图谱与软删除能力",
|
|
135
|
+
"strategy.action": "沉淀策略",
|
|
136
|
+
"strategy.title": "沉淀策略",
|
|
137
|
+
"strategy.description": "定义 Agent 在沉淀过程中需要新建记忆体时,如何选择底层 Provider。已有记忆体仍会优先按名称、描述与能力路由。",
|
|
138
|
+
"strategy.loading": "正在读取 Provider 目录…",
|
|
139
|
+
"strategy.modeTitle": "Provider 选择方式",
|
|
140
|
+
"strategy.modeHint": "该策略只影响 Agent 沉淀时的新记忆体创建;手动点击“创建记忆体”始终由你指定。",
|
|
141
|
+
"strategy.manualHint": "固定使用一个 Provider,Agent 无法改选",
|
|
142
|
+
"strategy.automaticHint": "先执行硬规则,再由任务 Agent 选择合格 Provider",
|
|
143
|
+
"strategy.manualTitle": "固定 Provider",
|
|
144
|
+
"strategy.manualDescription": "当现有记忆体都不适合时,新记忆体固定创建在这个 Provider 中。",
|
|
145
|
+
"strategy.automaticTitle": "智能选择规则",
|
|
146
|
+
"strategy.automaticDescription": "数据边界与能力要求由主机强制执行,Prompt 只影响合格候选之间的判断。",
|
|
147
|
+
"strategy.taskAgentReady": "任务 Agent 就绪",
|
|
148
|
+
"strategy.taskAgentUnavailable": "等待任务 Agent",
|
|
149
|
+
"strategy.save": "保存策略",
|
|
150
|
+
"strategy.saving": "保存中…",
|
|
151
|
+
"overview.providerOpenVikingHint": "连接已有 OpenViking 服务,由记忆体工作流统一调度",
|
|
152
|
+
"overview.providerSummary.mnemon-native": "官方原生、本地优先,保留完整图谱与软删除能力",
|
|
153
|
+
"overview.providerSummary.openviking": "文件系统形态的共享记忆,支持分层读取与自动语义提炼",
|
|
154
|
+
"overview.providerSummary.honcho": "跨会话用户建模、Peer 档案、辩证推理与持久结论",
|
|
155
|
+
"overview.providerSummary.mem0": "自动事实提取、语义召回、重排与去重",
|
|
156
|
+
"overview.providerSummary.hindsight": "知识图谱记忆,具备实体解析、多策略召回与反思",
|
|
157
|
+
"overview.providerSummary.holographic": "本地结构化事实记忆,支持可信度、实体解析与组合召回",
|
|
158
|
+
"overview.providerSummary.retaindb": "云端混合向量/BM25 召回、用户画像与类型化事实",
|
|
159
|
+
"overview.providerSummary.byterover": "通过 brv CLI 使用的本地优先分层知识树",
|
|
160
|
+
"overview.providerSummary.supermemory": "语义记忆、持久画像、会话摄取与多容器召回",
|
|
161
|
+
"overview.providerEndpoint": "服务地址",
|
|
162
|
+
"overview.providerEndpointPlaceholder": "例如:http://127.0.0.1:1933",
|
|
163
|
+
"overview.providerTargetUri": "记忆范围 URI",
|
|
164
|
+
"overview.providerTargetPlaceholder": "例如:viking://user/memories",
|
|
165
|
+
"overview.providerAdvanced": "身份与凭据(可选)",
|
|
166
|
+
"overview.providerApiKey": "API Key",
|
|
167
|
+
"overview.providerApiKeyOptional": "未启用鉴权时可留空",
|
|
168
|
+
"overview.providerApiKeyKeep": "已保存;留空表示保持不变",
|
|
169
|
+
"overview.providerAccount": "Account",
|
|
170
|
+
"overview.providerUser": "User",
|
|
171
|
+
"overview.providerActorPeer": "Actor Peer",
|
|
172
|
+
"overview.providerField.workspace": "工作区",
|
|
173
|
+
"overview.providerField.userId": "用户 ID",
|
|
174
|
+
"overview.providerField.agentId": "Agent ID",
|
|
175
|
+
"overview.providerField.mode": "接入模式",
|
|
176
|
+
"overview.providerField.rerank": "重排检索结果",
|
|
177
|
+
"overview.providerField.bankId": "记忆库",
|
|
178
|
+
"overview.providerField.budget": "召回预算",
|
|
179
|
+
"overview.providerField.dataPath": "事实存储路径",
|
|
180
|
+
"overview.providerField.defaultDirectory": "默认知识目录",
|
|
181
|
+
"overview.providerField.defaultTrust": "默认可信度",
|
|
182
|
+
"overview.providerField.minTrust": "最低召回可信度",
|
|
183
|
+
"overview.providerField.project": "项目标识",
|
|
184
|
+
"overview.providerField.cliPath": "brv 可执行文件",
|
|
185
|
+
"overview.providerField.workingDirectory": "知识目录",
|
|
186
|
+
"overview.providerField.containerTag": "容器标签",
|
|
187
|
+
"overview.providerField.searchMode": "检索模式",
|
|
188
|
+
"overview.providerOption.platform": "Mem0 Platform",
|
|
189
|
+
"overview.providerOption.self-hosted": "自托管服务",
|
|
190
|
+
"overview.providerOption.low": "低",
|
|
191
|
+
"overview.providerOption.mid": "中",
|
|
192
|
+
"overview.providerOption.high": "高",
|
|
193
|
+
"overview.providerOption.hybrid": "混合检索",
|
|
194
|
+
"overview.providerOption.memories": "仅记忆",
|
|
195
|
+
"overview.providerOption.documents": "仅文档",
|
|
196
|
+
"overview.providerKindLocal": "本地引擎",
|
|
197
|
+
"overview.providerKindRemote": "远程服务",
|
|
198
|
+
"overview.providerSecretClear": "清除已保存的凭据",
|
|
199
|
+
"overview.providerWriteExact": "精确写入",
|
|
200
|
+
"overview.providerWriteAsync": "异步语义提炼",
|
|
201
|
+
"overview.providerGraphReady": "支持关系图谱",
|
|
202
|
+
"overview.providerSearchReady": "支持统一检索",
|
|
203
|
+
"overview.providerRemote": "三方远程记忆",
|
|
204
|
+
"overview.providerLocal": "三方本地记忆",
|
|
205
|
+
"overview.creating": "创建中…",
|
|
206
|
+
"overview.createAction": "创建",
|
|
207
|
+
"overview.editBody": "编辑",
|
|
208
|
+
"overview.editBodyAria": "编辑{name}",
|
|
209
|
+
"overview.editName": "名称",
|
|
210
|
+
"overview.editDescription": "路由说明",
|
|
211
|
+
"overview.saveBody": "保存",
|
|
212
|
+
"overview.savingBody": "保存中…",
|
|
213
|
+
"overview.deleteBody": "删除",
|
|
214
|
+
"overview.deleteBodyAria": "删除{name}",
|
|
215
|
+
"overview.deleteTitle": "删除“{name}”?",
|
|
216
|
+
"overview.deleteWarning": "该操作会永久删除这个记忆体及其中的全部记忆与关系,无法撤销。",
|
|
217
|
+
"overview.lastStoreDeleteHint": "Mnemon 需要保留至少一个原生 Store;可将最后一个记忆体设为未激活,但不能删除。",
|
|
218
|
+
"overview.deleteAction": "确认删除",
|
|
219
|
+
"overview.disconnectBody": "断开",
|
|
220
|
+
"overview.disconnectBodyAria": "断开{name}",
|
|
221
|
+
"overview.disconnectTitle": "断开“{name}”?",
|
|
222
|
+
"overview.disconnectWarning": "这里只会从 DSH 记忆体目录移除 {provider} 连接;底层引擎中的记忆不会被删除。",
|
|
223
|
+
"overview.disconnectAction": "确认断开",
|
|
224
|
+
"overview.deletingBody": "删除中…",
|
|
225
|
+
"overview.snapshot": "多记忆体实时快照",
|
|
226
|
+
"overview.snapshotSources": "快照可观察范围",
|
|
227
|
+
"overview.snapshotSourcesHint": "真实关系图、无边内容投影和查询型记忆体分别呈现,不伪造 Provider 不具备的关系。",
|
|
228
|
+
"overview.noVisualTitle": "当前记忆体只支持按需查询",
|
|
229
|
+
"overview.noVisualText": "这些 Provider 不提供可枚举内容或图谱;请前往“检索”输入明确问题。",
|
|
230
|
+
"overview.waitingSnapshot": "等待首个快照",
|
|
231
|
+
"overview.updatedAt": "更新于 {time}",
|
|
232
|
+
"overview.edgeScope": "空间归属",
|
|
233
|
+
"overview.edgeTemporal": "时间",
|
|
234
|
+
"overview.edgeSemantic": "语义",
|
|
235
|
+
"overview.edgeCausal": "因果",
|
|
236
|
+
"overview.edgeEntity": "实体关联",
|
|
237
|
+
"overview.graphComposition": "{spaces} 个空间 · {memories} 条记忆 · {entities} 个实体",
|
|
238
|
+
"overview.graphCount": "展示 {visible} / {total} 个元素",
|
|
239
|
+
"overview.graphEdges": "{count} 条图谱连接",
|
|
240
|
+
"overview.inspector": "记忆详情",
|
|
241
|
+
"overview.inspectorSpace": "记忆体详情",
|
|
242
|
+
"overview.inspectorEntity": "实体详情",
|
|
243
|
+
"overview.selectNode": "选择一个图谱元素",
|
|
244
|
+
"overview.selectNodeText": "查看记忆体、实体或记忆的精确上下文。",
|
|
245
|
+
"overview.closeInspector": "关闭节点详情",
|
|
246
|
+
"overview.memoryId": "记忆 ID",
|
|
247
|
+
"overview.spaceId": "记忆体 ID",
|
|
248
|
+
"overview.containedMemories": "包含记忆",
|
|
249
|
+
"overview.entityMentions": "索引次数",
|
|
250
|
+
"overview.exploreNode": "围绕它检索",
|
|
251
|
+
"overview.previewAria": "查看全文",
|
|
252
|
+
"overview.previewTitle": "内容全文",
|
|
253
|
+
"overview.loading": "正在同步多记忆体实时快照…",
|
|
254
|
+
"graph.layoutAria": "图谱布局",
|
|
255
|
+
"graph.layoutNatural": "自然布局",
|
|
256
|
+
"graph.layoutUniform": "均匀布局",
|
|
257
|
+
"graph.layoutCustom": "自定义布局",
|
|
258
|
+
"graph.layoutStatus": "布局状态:{layout}",
|
|
259
|
+
"graph.draggable": "{layout} · 可拖拽",
|
|
260
|
+
"graph.naturalAction": "自然铺开",
|
|
261
|
+
"graph.uniformAction": "均匀重置",
|
|
262
|
+
"graph.aria": "Mnemon 实时记忆图谱,{nodes} 个元素,{edges} 条连接",
|
|
263
|
+
"graph.kindSpace": "记忆体",
|
|
264
|
+
"graph.kindEntity": "实体",
|
|
265
|
+
"search.title": "检索记忆",
|
|
266
|
+
"search.description": "跨已激活记忆体检索原始证据;每个 Provider 使用自己的原生召回方式并保留来源。",
|
|
267
|
+
"search.maxResults": "最多 {count} 条",
|
|
268
|
+
"search.placeholder": "为什么选用 SQLite?这个项目有哪些发布约定?",
|
|
269
|
+
"search.queryAria": "记忆查询",
|
|
270
|
+
"search.categoryAria": "记忆分类",
|
|
271
|
+
"search.strategy": "策略",
|
|
272
|
+
"search.modeAria": "检索模式",
|
|
273
|
+
"search.modeSmart": "智能召回",
|
|
274
|
+
"search.modeKeyword": "关键词检索",
|
|
275
|
+
"search.modeBasic": "基础匹配",
|
|
276
|
+
"search.searching": "检索中…",
|
|
277
|
+
"search.action": "直接检索",
|
|
278
|
+
"search.agentAction": "Agent 查询",
|
|
279
|
+
"search.agentSearching": "Agent 分析中…",
|
|
280
|
+
"search.agentAnswer": "Agent 查询结果",
|
|
281
|
+
"search.agentAnswerHint": "基于下方召回证据",
|
|
282
|
+
"search.startTitle": "从一个明确问题开始",
|
|
283
|
+
"search.startText": "聚焦实体、决策或时间线,比批量加载整库更可靠。",
|
|
284
|
+
"search.emptyTitle": "没有命中",
|
|
285
|
+
"search.emptyText": "换一个更具体的实体、决策或时间线关键词试试。",
|
|
286
|
+
"search.results": "原始召回内容",
|
|
287
|
+
"search.related": "关联记忆",
|
|
288
|
+
"search.closeRelated": "关闭关联记忆",
|
|
289
|
+
"search.traversing": "正在遍历图谱…",
|
|
290
|
+
"search.noRelated": "没有找到两跳内的关联节点。",
|
|
291
|
+
"search.sourcesTitle": "本次检索范围",
|
|
292
|
+
"entities.title": "实体查阅",
|
|
293
|
+
"entities.description": "只在真正提供实体索引的记忆体中,查阅实体跨越事实、决策与上下文的关系。",
|
|
294
|
+
"entities.sourcesTitle": "实体能力范围",
|
|
295
|
+
"entities.unsupportedTitle": "没有支持实体索引的记忆体",
|
|
296
|
+
"entities.unsupportedText": "当前激活 Provider 仍可通过“检索”召回,但不会在这里伪装成实体图谱。",
|
|
297
|
+
"entities.count": "{count} 个活跃实体",
|
|
298
|
+
"entities.nameAria": "实体名称",
|
|
299
|
+
"entities.placeholder": "输入任意实体…",
|
|
300
|
+
"entities.action": "查阅",
|
|
301
|
+
"entities.top": "高频实体",
|
|
302
|
+
"entities.frequency": "按出现频率",
|
|
303
|
+
"entities.filterHint": "输入时即时过滤左侧列表(按 Esc 清空)",
|
|
304
|
+
"entities.emptyRail": "写入带实体的记忆后,这里会形成入口。",
|
|
305
|
+
"entities.filterEmpty": "本地无匹配。点“查阅”向宿主发起查询。",
|
|
306
|
+
"entities.loading": "正在沿实体关系召回…",
|
|
307
|
+
"entities.selectTitle": "选择或输入一个实体",
|
|
308
|
+
"entities.selectText": "实体视图会聚合与它相关的记忆,而不是只做字面匹配。",
|
|
309
|
+
"entities.emptyTitle": "没有关联记忆",
|
|
310
|
+
"entities.emptyText": "尝试更完整的名称或另一个实体别名。",
|
|
311
|
+
"remember.title": "沉淀记忆",
|
|
312
|
+
"remember.description": "候选内容会进入无会话历史的独立任务 Agent,由它选择记忆体、查重、提炼并执行写入,不占用主对话上下文。",
|
|
313
|
+
"remember.readOnlyTitle": "当前为只读模式",
|
|
314
|
+
"remember.readOnlyText": "当前部署禁止记忆写入;如需调整,请修改 DSH 的 Mnemon 配置并保存。",
|
|
315
|
+
"remember.delegateTitle": "交给独立任务 Agent",
|
|
316
|
+
"remember.noSession": "无可用会话",
|
|
317
|
+
"remember.ready": "独立任务 Agent 就绪",
|
|
318
|
+
"remember.noTaskAgent": "任务 Agent 不可用",
|
|
319
|
+
"remember.taskAgentReady": "任务 Agent 就绪",
|
|
320
|
+
"remember.candidate": "候选内容",
|
|
321
|
+
"remember.candidateAria": "待沉淀内容",
|
|
322
|
+
"remember.placeholder": "输入希望跨任务保留的背景、偏好、决策或洞察。模型会先判断它是否真的值得沉淀。",
|
|
323
|
+
"remember.sessionHint": "当前视图没有可用的模型路由,无法创建独立任务 Agent。",
|
|
324
|
+
"remember.taskAgentHint": "当前 Host 暂时无法创建独立任务 Agent,请刷新状态后重试。",
|
|
325
|
+
"remember.processing": "独立任务 Agent 处理中…",
|
|
326
|
+
"remember.action": "调度独立任务 Agent 判断并沉淀",
|
|
327
|
+
"remember.advanced": "人工高级选项",
|
|
328
|
+
"remember.advancedHint": "为独立任务 Agent 指定目标记忆体与元数据约束",
|
|
329
|
+
"remember.expand": "展开",
|
|
330
|
+
"remember.target": "目标记忆体",
|
|
331
|
+
"remember.asyncProviderHint": "该记忆体会等待远程提炼任务完成后再返回真实写入回执。",
|
|
332
|
+
"remember.entities": "实体(逗号分隔)",
|
|
333
|
+
"remember.tags": "标签(逗号分隔)",
|
|
334
|
+
"remember.advancedText": "高级选项是约束而不是绕过监督;独立任务 Agent 仍会查重并返回结构化回执。",
|
|
335
|
+
"remember.saving": "独立任务 Agent 写入中…",
|
|
336
|
+
"remember.advancedAction": "按高级约束沉淀",
|
|
337
|
+
"remember.skipped": "独立任务 Agent 判断无需写入",
|
|
338
|
+
"remember.completed": "独立任务 Agent 已完成处理",
|
|
339
|
+
"remember.processed": "独立任务 Agent 已处理:{action}",
|
|
340
|
+
"remember.dispatchFailed": "调度失败:{error}",
|
|
341
|
+
"remember.saveFailed": "保存失败:{error}",
|
|
342
|
+
"content.title": "记忆内容",
|
|
343
|
+
"content.description": "按 Provider 的真实浏览契约检查可观察内容;列表型、查询型与不可浏览引擎会明确区分。",
|
|
344
|
+
"content.sourcesTitle": "Provider 内容模型",
|
|
345
|
+
"content.count": "{count} 条记忆",
|
|
346
|
+
"content.filterAria": "筛选记忆内容",
|
|
347
|
+
"content.filterPlaceholder": "按内容或精确 ID 筛选…",
|
|
348
|
+
"content.categoryAria": "记忆分类",
|
|
349
|
+
"content.apply": "应用筛选",
|
|
350
|
+
"content.notice": "内容页直接调用 Provider 的只读浏览契约;查询型引擎仅在输入查询后执行检索。",
|
|
351
|
+
"content.queryRequiredTitle": "查询型记忆体等待问题",
|
|
352
|
+
"content.queryRequiredText": "输入一个明确查询即可读取 ByteRover 等不提供全量列表的 Provider。",
|
|
353
|
+
"content.showing": "当前显示 {visible} / {total}",
|
|
354
|
+
"content.showMore": "再显示 {count} 条",
|
|
355
|
+
"content.emptyTitle": "没有符合条件的记忆",
|
|
356
|
+
"content.emptyText": "清空筛选,或前往“沉淀”写入第一条稳定上下文。"
|
|
357
|
+
};
|
|
358
|
+
var en = {
|
|
359
|
+
"term.space": "Memory Space",
|
|
360
|
+
"term.spaces": "Memory Spaces",
|
|
361
|
+
"category.decision": "Decision",
|
|
362
|
+
"category.preference": "Preference",
|
|
363
|
+
"category.fact": "Fact",
|
|
364
|
+
"category.insight": "Insight",
|
|
365
|
+
"category.context": "Context",
|
|
366
|
+
"category.general": "General",
|
|
367
|
+
"nav.memory.aria": "Memory Space pages",
|
|
368
|
+
"nav.overview": "Overview",
|
|
369
|
+
"nav.bodies": "Memory Spaces",
|
|
370
|
+
"nav.search": "Recall",
|
|
371
|
+
"nav.entities": "Entities",
|
|
372
|
+
"nav.rememberAction": "Remember",
|
|
373
|
+
"nav.content": "Content",
|
|
374
|
+
"overview.title": "Memory Spaces",
|
|
375
|
+
"overview.description": "Manage Mnemon Memory Spaces and third-party provider namespaces together. Active spaces participate in unified reads, routing, and live snapshots.",
|
|
376
|
+
"overview.pageDescription": "Create and activate Memory Spaces, then inspect storage health and live relation snapshots across providers.",
|
|
377
|
+
"overview.interval": "Full sync on entry · Click a card to sync on demand",
|
|
378
|
+
"overview.fullSyncPending": "Waiting for the first full sync",
|
|
379
|
+
"overview.fullSyncJustNow": "Last full sync: just now",
|
|
380
|
+
"overview.fullSyncSeconds": "Last full sync: {count}s ago",
|
|
381
|
+
"overview.fullSyncMinutes": "Last full sync: {count}m ago",
|
|
382
|
+
"overview.fullSyncHours": "Last full sync: {count}h ago",
|
|
383
|
+
"overview.fullSyncDays": "Last full sync: {count}d ago",
|
|
384
|
+
"overview.syncing": "Syncing…",
|
|
385
|
+
"overview.syncNow": "Sync now",
|
|
386
|
+
"overview.directory": "Memory Space Directory",
|
|
387
|
+
"overview.directory.description": "Each card represents a real memory namespace. A third-party Provider creates its projection on first connection; later card clicks check only that space, without overwriting locally maintained titles or descriptions.",
|
|
388
|
+
"overview.directory.waiting": "Waiting for directory",
|
|
389
|
+
"overview.directory.unsynced": "Directory not synchronized",
|
|
390
|
+
"overview.directory.unsyncedBadge": "Directory pending",
|
|
391
|
+
"overview.directoryLoading": "Loading the Memory Space directory",
|
|
392
|
+
"overview.healthLoading": "Checking Memory Space health",
|
|
393
|
+
"overview.storageHealthy": "Storage healthy",
|
|
394
|
+
"overview.storageUnhealthy": "Storage unavailable",
|
|
395
|
+
"overview.storageChecking": "Checking",
|
|
396
|
+
"overview.reconnecting": "Reconnecting",
|
|
397
|
+
"overview.reconnectHint": "Click the card to reconnect and synchronize this Memory Space",
|
|
398
|
+
"overview.reconnectAria": "Reconnect {name}",
|
|
399
|
+
"overview.snapshotLoading": "Loading the multi-space live snapshot",
|
|
400
|
+
"overview.metadataAction": "AI metadata",
|
|
401
|
+
"overview.metadataTitle": "Maintain Memory Space metadata with AI",
|
|
402
|
+
"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.",
|
|
403
|
+
"overview.metadataUnavailable": "Temporarily unavailable: no active Agent matches the current memory scope",
|
|
404
|
+
"overview.metadataLoading": "Loading maintainable Memory Spaces…",
|
|
405
|
+
"overview.metadataEmpty": "There are no active Memory Spaces whose metadata can be maintained by AI.",
|
|
406
|
+
"overview.metadataSelected": "{count} Memory Spaces selected",
|
|
407
|
+
"overview.metadataSelectAll": "Select all",
|
|
408
|
+
"overview.metadataClear": "Clear",
|
|
409
|
+
"overview.metadataSafety": "Only local titles and descriptions are updated. Memory content is never changed, moved, or deleted. Disabling a Provider removes this local metadata with its projection.",
|
|
410
|
+
"overview.metadataGenerate": "Generate with AI ({count})",
|
|
411
|
+
"overview.metadataGenerating": "AI is generating…",
|
|
412
|
+
"overview.metadataRunningCount": "{count} running",
|
|
413
|
+
"overview.metadataTaskRunning": "Generating…",
|
|
414
|
+
"overview.metadataTaskSuccess": "Updated",
|
|
415
|
+
"overview.metadataTaskError": "Failed: {error}",
|
|
416
|
+
"overview.metadataTaskUnknown": "Unknown error",
|
|
417
|
+
"overview.metadataCompleted": "Updated metadata for {count} Memory Spaces.",
|
|
418
|
+
"overview.mnemonDefault": "Mnemon default",
|
|
419
|
+
"overview.toggleAria": "{name} read toggle",
|
|
420
|
+
"overview.toggling": "Switching",
|
|
421
|
+
"overview.noDescription": "No routing description yet.",
|
|
422
|
+
"overview.unsyncedTitle": "Memory Space directory is not synchronized",
|
|
423
|
+
"overview.unsyncedShort": "The Web client and DSH Host are using different contracts. Restart the Host to register existing Stores.",
|
|
424
|
+
"overview.unsyncedLong": "The Host is still using the previous plugin contract. Restart DSH to rediscover existing Stores; no .db file will be deleted.",
|
|
425
|
+
"overview.emptyTitle": "No Memory Spaces yet",
|
|
426
|
+
"overview.emptyShort": "Create the first space and distill durable context into it.",
|
|
427
|
+
"overview.emptyLong": "Create a Mnemon Memory Space, or enable a third-party provider in Settings → Memory System to synchronize its existing namespaces.",
|
|
428
|
+
"overview.noActiveTitle": "No active Memory Spaces",
|
|
429
|
+
"overview.noActiveText": "Enable read access for at least one space to aggregate its live graph here.",
|
|
430
|
+
"overview.noContentTitle": "Active spaces have no content yet",
|
|
431
|
+
"overview.noContentText": "Distill durable context into a space to populate nodes and relations.",
|
|
432
|
+
"overview.createTitle": "Create Memory Space",
|
|
433
|
+
"overview.createDialogHint": "Define this Memory Space and choose its provider here. It reuses services, credentials, and global data locations from Settings → Memory System.",
|
|
434
|
+
"overview.createIdentityTitle": "Memory Space details",
|
|
435
|
+
"overview.createIdentityHint": "The name identifies the space; the description guides when the agent writes and recalls it.",
|
|
436
|
+
"overview.createPlacementTitle": "Memory Space provider",
|
|
437
|
+
"overview.createPlacementHint": "This is an explicit manual creation. Choose one enabled Provider; automatic selection is managed by Distillation Strategy.",
|
|
438
|
+
"overview.createName": "New Memory Space name",
|
|
439
|
+
"overview.createNamePlaceholder": "Name",
|
|
440
|
+
"overview.createDescription": "New Memory Space description",
|
|
441
|
+
"overview.createDescriptionPlaceholder": "Describe what belongs here and when it should be recalled",
|
|
442
|
+
"overview.placementMode": "Engine selection",
|
|
443
|
+
"overview.placementManual": "Choose manually",
|
|
444
|
+
"overview.placementManualHint": "Choose one enabled provider directly",
|
|
445
|
+
"overview.placementAutomatic": "Smart selection",
|
|
446
|
+
"overview.placementAutomaticHint": "Apply data-boundary and capability rules first, then let the agent choose among eligible providers",
|
|
447
|
+
"overview.placementUnavailable": "Requires a connected conversation aligned with this workspace",
|
|
448
|
+
"overview.recommended": "Recommended",
|
|
449
|
+
"overview.placementPolicy": "Selection policy",
|
|
450
|
+
"overview.placementPolicyHint": "The host enforces rules. The prompt only guides judgment among eligible candidates.",
|
|
451
|
+
"overview.agentDecision": "Agent decision",
|
|
452
|
+
"overview.placementPrompt": "Strategy prompt (optional)",
|
|
453
|
+
"overview.placementPromptPlaceholder": "For example: This is collaborative knowledge. Prefer local storage when exact writes are required; otherwise prefer sharing.",
|
|
454
|
+
"overview.dataBoundary": "Data boundary",
|
|
455
|
+
"overview.dataBoundaryRemote": "Remote services allowed",
|
|
456
|
+
"overview.dataBoundaryLocal": "Local only",
|
|
457
|
+
"overview.preference": "Soft preference",
|
|
458
|
+
"overview.preferenceBalanced": "Balanced",
|
|
459
|
+
"overview.preferenceLocal": "Local first",
|
|
460
|
+
"overview.preferenceShared": "Shared first",
|
|
461
|
+
"overview.requiredCapabilities": "Required capabilities (select any)",
|
|
462
|
+
"overview.capability.graph": "Relation graph",
|
|
463
|
+
"overview.capability.exact-write": "Exact writes",
|
|
464
|
+
"overview.capability.forget": "Safe forget",
|
|
465
|
+
"overview.candidateNativeReady": "Official native · follows the active memory scope",
|
|
466
|
+
"overview.providerServiceRequired": "Not enabled; configure the service in Settings → Memory System first",
|
|
467
|
+
"overview.workspaceBinding.automatic": "Follows the active memory scope",
|
|
468
|
+
"overview.workspaceBinding.optional-override": "Follows the active scope; global location can be customized",
|
|
469
|
+
"overview.workspaceBinding.provider-global": "Always uses the global scope",
|
|
470
|
+
"overview.candidateOpenViking": "Include the remote candidate and provide its connection",
|
|
471
|
+
"overview.candidateLocal": "Local provider · follows the active memory scope",
|
|
472
|
+
"overview.candidateRemote": "Remote provider · uses the global service configuration",
|
|
473
|
+
"overview.placementByLlm": "Agent selected",
|
|
474
|
+
"overview.placementByRules": "Rule selected",
|
|
475
|
+
"overview.placementConfidence": "Confidence: {confidence}",
|
|
476
|
+
"overview.confidence.high": "High",
|
|
477
|
+
"overview.confidence.medium": "Medium",
|
|
478
|
+
"overview.confidence.low": "Low",
|
|
479
|
+
"overview.providerLabel": "Memory engine",
|
|
480
|
+
"overview.nativeOfficial": "Official native",
|
|
481
|
+
"overview.providerNativeHint": "Official native, local-first storage with the full graph and soft-delete semantics",
|
|
482
|
+
"strategy.action": "Distillation strategy",
|
|
483
|
+
"strategy.title": "Distillation strategy",
|
|
484
|
+
"strategy.description": "Choose how the Agent selects a Provider when it must create a new Memory Space during distillation. Existing spaces are still routed by name, description, and capabilities first.",
|
|
485
|
+
"strategy.loading": "Loading Provider directory…",
|
|
486
|
+
"strategy.modeTitle": "Provider selection",
|
|
487
|
+
"strategy.modeHint": "This policy applies only to Agent-created spaces during distillation. Manual Create Memory Space always asks you to choose.",
|
|
488
|
+
"strategy.manualHint": "Fix one Provider; the Agent cannot override it",
|
|
489
|
+
"strategy.automaticHint": "Apply hard rules first, then let the task Agent choose an eligible Provider",
|
|
490
|
+
"strategy.manualTitle": "Fixed Provider",
|
|
491
|
+
"strategy.manualDescription": "When no existing space fits, create the new space on this Provider.",
|
|
492
|
+
"strategy.automaticTitle": "Smart selection rules",
|
|
493
|
+
"strategy.automaticDescription": "The host enforces data and capability rules. The prompt only guides judgment among eligible candidates.",
|
|
494
|
+
"strategy.taskAgentReady": "Task Agent ready",
|
|
495
|
+
"strategy.taskAgentUnavailable": "Waiting for task Agent",
|
|
496
|
+
"strategy.save": "Save strategy",
|
|
497
|
+
"strategy.saving": "Saving…",
|
|
498
|
+
"overview.providerOpenVikingHint": "Connect an existing OpenViking service under the same Memory Space workflow",
|
|
499
|
+
"overview.providerSummary.mnemon-native": "Official native, local-first storage with the full graph and soft-delete semantics",
|
|
500
|
+
"overview.providerSummary.openviking": "Filesystem-shaped shared memory with tiered reads and automatic semantic extraction",
|
|
501
|
+
"overview.providerSummary.honcho": "Cross-session user modelling, peer profiles, dialectic reasoning, and persistent conclusions",
|
|
502
|
+
"overview.providerSummary.mem0": "Automatic fact extraction, semantic retrieval, reranking, and deduplication",
|
|
503
|
+
"overview.providerSummary.hindsight": "Knowledge-graph memory with entity resolution, multi-strategy recall, and reflection",
|
|
504
|
+
"overview.providerSummary.holographic": "Local structured fact memory with trust scoring, entity resolution, and compositional retrieval",
|
|
505
|
+
"overview.providerSummary.retaindb": "Cloud hybrid vector/BM25 retrieval, user profiles, and typed durable facts",
|
|
506
|
+
"overview.providerSummary.byterover": "Local-first hierarchical knowledge tree accessed through the brv CLI",
|
|
507
|
+
"overview.providerSummary.supermemory": "Semantic memory, persistent profiles, conversation ingest, and multi-container recall",
|
|
508
|
+
"overview.providerEndpoint": "Service endpoint",
|
|
509
|
+
"overview.providerEndpointPlaceholder": "For example: http://127.0.0.1:1933",
|
|
510
|
+
"overview.providerTargetUri": "Memory scope URI",
|
|
511
|
+
"overview.providerTargetPlaceholder": "For example: viking://user/memories",
|
|
512
|
+
"overview.providerAdvanced": "Identity and credentials (optional)",
|
|
513
|
+
"overview.providerApiKey": "API Key",
|
|
514
|
+
"overview.providerApiKeyOptional": "Leave blank when authentication is disabled",
|
|
515
|
+
"overview.providerApiKeyKeep": "Saved; leave blank to keep unchanged",
|
|
516
|
+
"overview.providerAccount": "Account",
|
|
517
|
+
"overview.providerUser": "User",
|
|
518
|
+
"overview.providerActorPeer": "Actor Peer",
|
|
519
|
+
"overview.providerField.workspace": "Workspace",
|
|
520
|
+
"overview.providerField.userId": "User ID",
|
|
521
|
+
"overview.providerField.agentId": "Agent ID",
|
|
522
|
+
"overview.providerField.mode": "Mode",
|
|
523
|
+
"overview.providerField.rerank": "Rerank search results",
|
|
524
|
+
"overview.providerField.bankId": "Memory bank",
|
|
525
|
+
"overview.providerField.budget": "Recall budget",
|
|
526
|
+
"overview.providerField.dataPath": "Fact store path",
|
|
527
|
+
"overview.providerField.defaultDirectory": "Default knowledge directory",
|
|
528
|
+
"overview.providerField.defaultTrust": "Default trust",
|
|
529
|
+
"overview.providerField.minTrust": "Minimum recall trust",
|
|
530
|
+
"overview.providerField.project": "Project",
|
|
531
|
+
"overview.providerField.cliPath": "brv executable",
|
|
532
|
+
"overview.providerField.workingDirectory": "Knowledge directory",
|
|
533
|
+
"overview.providerField.containerTag": "Container tag",
|
|
534
|
+
"overview.providerField.searchMode": "Search mode",
|
|
535
|
+
"overview.providerOption.platform": "Mem0 Platform",
|
|
536
|
+
"overview.providerOption.self-hosted": "Self-hosted server",
|
|
537
|
+
"overview.providerOption.low": "Low",
|
|
538
|
+
"overview.providerOption.mid": "Medium",
|
|
539
|
+
"overview.providerOption.high": "High",
|
|
540
|
+
"overview.providerOption.hybrid": "Hybrid",
|
|
541
|
+
"overview.providerOption.memories": "Memories",
|
|
542
|
+
"overview.providerOption.documents": "Documents",
|
|
543
|
+
"overview.providerKindLocal": "Local engine",
|
|
544
|
+
"overview.providerKindRemote": "Remote service",
|
|
545
|
+
"overview.providerSecretClear": "Clear the saved credential",
|
|
546
|
+
"overview.providerWriteExact": "Exact writes",
|
|
547
|
+
"overview.providerWriteAsync": "Asynchronous semantic extraction",
|
|
548
|
+
"overview.providerGraphReady": "Relation graph available",
|
|
549
|
+
"overview.providerSearchReady": "Unified search available",
|
|
550
|
+
"overview.providerRemote": "Third-party remote memory",
|
|
551
|
+
"overview.providerLocal": "Third-party local memory",
|
|
552
|
+
"overview.creating": "Creating…",
|
|
553
|
+
"overview.createAction": "Create",
|
|
554
|
+
"overview.editBody": "Edit",
|
|
555
|
+
"overview.editBodyAria": "Edit {name}",
|
|
556
|
+
"overview.editName": "Name",
|
|
557
|
+
"overview.editDescription": "Routing description",
|
|
558
|
+
"overview.saveBody": "Save",
|
|
559
|
+
"overview.savingBody": "Saving…",
|
|
560
|
+
"overview.deleteBody": "Delete",
|
|
561
|
+
"overview.deleteBodyAria": "Delete {name}",
|
|
562
|
+
"overview.deleteTitle": "Delete “{name}”?",
|
|
563
|
+
"overview.deleteWarning": "This permanently deletes the Memory Space and every memory and relation it contains. This cannot be undone.",
|
|
564
|
+
"overview.lastStoreDeleteHint": "Mnemon must retain at least one native Store. The last Memory Space may be inactive, but it cannot be deleted.",
|
|
565
|
+
"overview.deleteAction": "Delete permanently",
|
|
566
|
+
"overview.disconnectBody": "Disconnect",
|
|
567
|
+
"overview.disconnectBodyAria": "Disconnect {name}",
|
|
568
|
+
"overview.disconnectTitle": "Disconnect “{name}”?",
|
|
569
|
+
"overview.disconnectWarning": "This only removes the {provider} connection from the DSH Memory Space directory. Memories in the underlying engine remain untouched.",
|
|
570
|
+
"overview.disconnectAction": "Disconnect",
|
|
571
|
+
"overview.deletingBody": "Deleting…",
|
|
572
|
+
"overview.snapshot": "Live multi-space snapshot",
|
|
573
|
+
"overview.snapshotSources": "Snapshot observability",
|
|
574
|
+
"overview.snapshotSourcesHint": "True relation graphs, edge-free content projections, and query-only spaces remain distinct; missing provider relations are never invented.",
|
|
575
|
+
"overview.noVisualTitle": "Active spaces are query-only",
|
|
576
|
+
"overview.noVisualText": "These providers expose neither enumerable content nor a graph. Open Recall and ask a focused question.",
|
|
577
|
+
"overview.waitingSnapshot": "Waiting for the first snapshot",
|
|
578
|
+
"overview.updatedAt": "Updated at {time}",
|
|
579
|
+
"overview.edgeScope": "Space scope",
|
|
580
|
+
"overview.edgeTemporal": "Temporal",
|
|
581
|
+
"overview.edgeSemantic": "Semantic",
|
|
582
|
+
"overview.edgeCausal": "Causal",
|
|
583
|
+
"overview.edgeEntity": "Entity relation",
|
|
584
|
+
"overview.graphComposition": "{spaces} spaces · {memories} memories · {entities} entities",
|
|
585
|
+
"overview.graphCount": "Showing {visible} / {total} elements",
|
|
586
|
+
"overview.graphEdges": "{count} graph edges",
|
|
587
|
+
"overview.inspector": "Memory details",
|
|
588
|
+
"overview.inspectorSpace": "Memory Space details",
|
|
589
|
+
"overview.inspectorEntity": "Entity details",
|
|
590
|
+
"overview.selectNode": "Select a graph element",
|
|
591
|
+
"overview.selectNodeText": "Inspect the exact context for a Memory Space, entity, or memory.",
|
|
592
|
+
"overview.closeInspector": "Close node details",
|
|
593
|
+
"overview.memoryId": "Memory ID",
|
|
594
|
+
"overview.spaceId": "Memory Space ID",
|
|
595
|
+
"overview.containedMemories": "Contained memories",
|
|
596
|
+
"overview.entityMentions": "Indexed mentions",
|
|
597
|
+
"overview.exploreNode": "Recall around this",
|
|
598
|
+
"overview.previewAria": "View full content",
|
|
599
|
+
"overview.previewTitle": "Full content",
|
|
600
|
+
"overview.loading": "Synchronizing the multi-space live snapshot…",
|
|
601
|
+
"graph.layoutAria": "Graph layout",
|
|
602
|
+
"graph.layoutNatural": "Natural layout",
|
|
603
|
+
"graph.layoutUniform": "Uniform layout",
|
|
604
|
+
"graph.layoutCustom": "Custom layout",
|
|
605
|
+
"graph.layoutStatus": "Layout: {layout}",
|
|
606
|
+
"graph.draggable": "{layout} · draggable",
|
|
607
|
+
"graph.naturalAction": "Natural spread",
|
|
608
|
+
"graph.uniformAction": "Uniform reset",
|
|
609
|
+
"graph.aria": "Mnemon live memory graph with {nodes} elements and {edges} edges",
|
|
610
|
+
"graph.kindSpace": "Memory Space",
|
|
611
|
+
"graph.kindEntity": "Entity",
|
|
612
|
+
"search.title": "Recall Memory",
|
|
613
|
+
"search.description": "Retrieve raw evidence across active Memory Spaces; every provider uses its native recall method and keeps provenance.",
|
|
614
|
+
"search.maxResults": "Up to {count} results",
|
|
615
|
+
"search.placeholder": "Why did we choose SQLite? What release conventions apply?",
|
|
616
|
+
"search.queryAria": "Memory query",
|
|
617
|
+
"search.categoryAria": "Memory category",
|
|
618
|
+
"search.strategy": "Strategy",
|
|
619
|
+
"search.modeAria": "Recall mode",
|
|
620
|
+
"search.modeSmart": "Smart recall",
|
|
621
|
+
"search.modeKeyword": "Keyword search",
|
|
622
|
+
"search.modeBasic": "Basic match",
|
|
623
|
+
"search.searching": "Recalling…",
|
|
624
|
+
"search.action": "Direct search",
|
|
625
|
+
"search.agentAction": "Ask Agent",
|
|
626
|
+
"search.agentSearching": "Agent analyzing…",
|
|
627
|
+
"search.agentAnswer": "Agent answer",
|
|
628
|
+
"search.agentAnswerHint": "Grounded in the recalled evidence below",
|
|
629
|
+
"search.startTitle": "Start with a focused question",
|
|
630
|
+
"search.startText": "A focused entity, decision, or timeline is more reliable than loading the whole database.",
|
|
631
|
+
"search.emptyTitle": "No matches",
|
|
632
|
+
"search.emptyText": "Try a more specific entity, decision, or timeline keyword.",
|
|
633
|
+
"search.results": "Raw recalled evidence",
|
|
634
|
+
"search.related": "Related memories",
|
|
635
|
+
"search.closeRelated": "Close related memories",
|
|
636
|
+
"search.traversing": "Traversing the graph…",
|
|
637
|
+
"search.noRelated": "No related nodes found within two hops.",
|
|
638
|
+
"search.sourcesTitle": "Search coverage",
|
|
639
|
+
"entities.title": "Entity Explorer",
|
|
640
|
+
"entities.description": "Inspect entity connections only in Memory Spaces that expose a real entity index.",
|
|
641
|
+
"entities.sourcesTitle": "Entity capability coverage",
|
|
642
|
+
"entities.unsupportedTitle": "No active space exposes an entity index",
|
|
643
|
+
"entities.unsupportedText": "The active providers remain searchable through Recall, but are not presented here as a fabricated entity graph.",
|
|
644
|
+
"entities.count": "{count} active entities",
|
|
645
|
+
"entities.nameAria": "Entity name",
|
|
646
|
+
"entities.placeholder": "Enter any entity…",
|
|
647
|
+
"entities.action": "Explore",
|
|
648
|
+
"entities.top": "Top entities",
|
|
649
|
+
"entities.frequency": "By frequency",
|
|
650
|
+
"entities.filterHint": "Type to filter the rail locally (Esc to clear).",
|
|
651
|
+
"entities.emptyRail": "Entities appear here after memories with entity metadata are stored.",
|
|
652
|
+
"entities.filterEmpty": "No local match. Press Explore to query the host.",
|
|
653
|
+
"entities.loading": "Recalling entity relations…",
|
|
654
|
+
"entities.selectTitle": "Select or enter an entity",
|
|
655
|
+
"entities.selectText": "The entity view aggregates related memories instead of relying on literal matching.",
|
|
656
|
+
"entities.emptyTitle": "No related memories",
|
|
657
|
+
"entities.emptyText": "Try the full name or another entity alias.",
|
|
658
|
+
"remember.title": "Distill Memory",
|
|
659
|
+
"remember.description": "An independent task Agent with no conversation history selects a Memory Space, checks duplicates, distills the candidate, and completes the write without filling the main conversation context.",
|
|
660
|
+
"remember.readOnlyTitle": "Read-only mode",
|
|
661
|
+
"remember.readOnlyText": "This deployment disables memory writes. Change and save the DSH Mnemon configuration to enable them.",
|
|
662
|
+
"remember.delegateTitle": "Send to independent task Agent",
|
|
663
|
+
"remember.noSession": "No live session",
|
|
664
|
+
"remember.ready": "Independent task Agent ready",
|
|
665
|
+
"remember.noTaskAgent": "Task Agent unavailable",
|
|
666
|
+
"remember.taskAgentReady": "Task Agent ready",
|
|
667
|
+
"remember.candidate": "Candidate",
|
|
668
|
+
"remember.candidateAria": "Memory candidate",
|
|
669
|
+
"remember.placeholder": "Enter background, preferences, decisions, or insights worth retaining across tasks. The model decides whether they qualify.",
|
|
670
|
+
"remember.sessionHint": "No usable model route is available for an independent task Agent.",
|
|
671
|
+
"remember.taskAgentHint": "The Host cannot currently create an isolated task Agent. Refresh status and try again.",
|
|
672
|
+
"remember.processing": "Independent task Agent is working…",
|
|
673
|
+
"remember.action": "Evaluate and distill",
|
|
674
|
+
"remember.advanced": "Advanced human constraints",
|
|
675
|
+
"remember.advancedHint": "Constrain the target Memory Space and metadata",
|
|
676
|
+
"remember.expand": "Expand",
|
|
677
|
+
"remember.target": "Target Memory Space",
|
|
678
|
+
"remember.asyncProviderHint": "This Memory Space waits for remote extraction to settle before returning a truthful write receipt.",
|
|
679
|
+
"remember.entities": "Entities (comma-separated)",
|
|
680
|
+
"remember.tags": "Tags (comma-separated)",
|
|
681
|
+
"remember.advancedText": "Advanced options constrain the independent task Agent; they do not bypass supervision or duplicate checks.",
|
|
682
|
+
"remember.saving": "Independent task Agent is writing…",
|
|
683
|
+
"remember.advancedAction": "Distill with constraints",
|
|
684
|
+
"remember.skipped": "The independent task Agent decided not to write",
|
|
685
|
+
"remember.completed": "The independent task Agent completed processing",
|
|
686
|
+
"remember.processed": "Independent task Agent processed: {action}",
|
|
687
|
+
"remember.dispatchFailed": "Dispatch failed: {error}",
|
|
688
|
+
"remember.saveFailed": "Save failed: {error}",
|
|
689
|
+
"content.title": "Memory Content",
|
|
690
|
+
"content.description": "Inspect observable content through each provider’s real browse contract, with enumerable, query-only, and unavailable engines kept distinct.",
|
|
691
|
+
"content.sourcesTitle": "Provider content models",
|
|
692
|
+
"content.count": "{count} memories",
|
|
693
|
+
"content.filterAria": "Filter memory content",
|
|
694
|
+
"content.filterPlaceholder": "Filter by content or exact ID…",
|
|
695
|
+
"content.categoryAria": "Memory category",
|
|
696
|
+
"content.apply": "Apply filters",
|
|
697
|
+
"content.notice": "Content calls each provider’s read-only browse contract directly; query-only engines run only after you enter a query.",
|
|
698
|
+
"content.queryRequiredTitle": "Query-only spaces are waiting",
|
|
699
|
+
"content.queryRequiredText": "Enter a focused query to inspect providers such as ByteRover that do not expose a complete list.",
|
|
700
|
+
"content.showing": "Showing {visible} / {total}",
|
|
701
|
+
"content.showMore": "Show {count} more",
|
|
702
|
+
"content.emptyTitle": "No matching memories",
|
|
703
|
+
"content.emptyText": "Clear the filters or distill the first durable memory."
|
|
704
|
+
};
|
|
705
|
+
//#endregion
|
|
706
|
+
//#region \0source-css:/home/runner/work/dsh-mnemon/dsh-mnemon/plugins/dsh-mnemon-source-memory-spaces/presentation/page.module.css.mjs
|
|
707
|
+
const css$2 = ".IIa07q_entityHeading>span,.IIa07q_inspectorHeading>span{color:var(--mn-faint);font:650 9px/1.2 var(--mn-code);letter-spacing:.12em;text-transform:uppercase}.IIa07q_memoryHeaderActions{align-items:center;gap:7px;display:flex}.IIa07q_memoryHeaderActions>button{white-space:nowrap}.IIa07q_asyncRegion{min-width:0;position:relative}.IIa07q_asyncResults{min-width:0;min-height:120px;position:relative}.IIa07q_asyncPlaceholder{border:1px solid var(--mn-line);min-height:220px;color:var(--mn-muted);background:var(--mn-layer-1);border-radius:13px;place-items:center;display:grid;position:relative}.IIa07q_muted{color:var(--mn-faint);padding:16px 0;font-size:12px}.IIa07q_readSources{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-1) 72%, transparent);border-radius:11px;gap:8px;margin:0 0 14px;padding:11px 12px;display:grid}.IIa07q_readSources>header{justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.IIa07q_readSources>header>div{gap:2px;display:grid}.IIa07q_readSources>header strong{font-size:11px}.IIa07q_readSources>header p{max-width:92ch;color:var(--mn-muted);margin:0;font-size:9.5px;line-height:1.45}.IIa07q_readSources>header>button{border:1px solid var(--mn-line);min-height:26px;color:var(--mn-muted);background:var(--mn-layer-2);cursor:pointer;border-radius:7px;flex:none;padding:0 8px;font-size:9px}.IIa07q_readSources>header>button[data-selected]{border-color:color-mix(in srgb, var(--mn-accent) 42%, var(--mn-line));color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 7%, var(--mn-layer-2))}.IIa07q_readSources>div{grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:6px;display:grid}.IIa07q_readSourceCard,.IIa07q_bodyCard,.IIa07q_metadataList>label{border:1px solid var(--mn-line);color:var(--mn-text);background:linear-gradient(90deg, color-mix(in srgb, var(--mn-provider-color) 5%, var(--mn-layer-1)), var(--mn-layer-1) 34%);box-shadow:inset 3px 0 0 color-mix(in srgb, var(--mn-provider-color) 68%, transparent);border-radius:8px}.IIa07q_readSourceCard{text-align:left;grid-template-columns:7px minmax(0,1fr) auto;align-items:center;gap:8px;min-width:0;min-height:58px;padding:7px 8px 7px 11px;display:grid}button.IIa07q_readSourceCard{cursor:pointer}button.IIa07q_readSourceCard:hover{border-color:color-mix(in srgb, var(--mn-provider-color) 32%, var(--mn-line-strong));background:linear-gradient(90deg, color-mix(in srgb, var(--mn-provider-color) 8%, var(--mn-hover)), var(--mn-hover) 40%)}.IIa07q_readSourceCard[data-selected]{border-color:color-mix(in srgb, var(--mn-accent) 48%, var(--mn-line));box-shadow:inset 3px 0 0 var(--mn-provider-color), inset 0 0 0 1px color-mix(in srgb, var(--mn-accent) 10%, transparent)}.IIa07q_readSourceSignal{background:var(--mn-success);width:7px;height:7px;box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 12%, transparent);border-radius:50%}.IIa07q_readSourceCard[data-mode=projection] .IIa07q_readSourceSignal,.IIa07q_readSourceCard[data-mode=enumerable] .IIa07q_readSourceSignal{background:#6574d9;box-shadow:0 0 0 3px #6574d924}.IIa07q_readSourceCard[data-mode=query-only] .IIa07q_readSourceSignal{background:#c38a32;box-shadow:0 0 0 3px #c38a3224}.IIa07q_readSourceCard[data-status=unavailable] .IIa07q_readSourceSignal,.IIa07q_readSourceCard[data-status=unsupported] .IIa07q_readSourceSignal{background:var(--mn-danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-danger) 12%, transparent)}.IIa07q_readSourceCard[data-status=empty] .IIa07q_readSourceSignal{background:var(--mn-faint);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-faint) 12%, transparent)}.IIa07q_readSourceIdentity,.IIa07q_readSourceState{gap:1px;min-width:0;display:grid}.IIa07q_readSourceIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}.IIa07q_readSourceMeta{align-items:center;gap:5px;min-width:0;margin-top:3px;display:flex}.IIa07q_readSourceMeta>small{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:8px;overflow:hidden}.IIa07q_readSourceState{text-align:right;justify-items:end}.IIa07q_readSourceState em{width:fit-content;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 8px var(--mn-code);white-space:nowrap;border-radius:999px;padding:2px 5px;font-style:normal}.IIa07q_readSourceState small{color:var(--mn-faint);white-space:nowrap;font-size:8px}.IIa07q_bodyDirectory{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-1) 72%, var(--mn-bg));border-radius:11px;margin-bottom:12px;padding:12px 14px;position:relative}.IIa07q_bodyDirectoryHeader{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:10px;display:flex}.IIa07q_bodyDirectoryHeader h3{margin:1px 0;font-size:13px}.IIa07q_bodyDirectoryHeader p{color:var(--mn-muted);margin:0;font-size:10px}.IIa07q_bodyDirectoryPath{max-width:min(62vw,720px);color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:9px;display:block;overflow:hidden}.IIa07q_bodyDirectoryControls{flex:none;justify-content:flex-end;align-items:center;gap:6px;padding-right:28px;display:flex}.IIa07q_bodyDirectoryControls>strong{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 9px var(--mn-code);border-radius:999px;flex:none;padding:5px 8px}.IIa07q_bodyGrid{grid-template-columns:repeat(auto-fit,minmax(245px,1fr));gap:7px;display:grid}.IIa07q_bodyDirectoryEmpty{border:1px dashed color-mix(in srgb, var(--mn-line) 84%, transparent);min-height:92px;color:var(--mn-muted);border-radius:12px;grid-column:1/-1;justify-content:center;align-items:center;gap:14px;display:flex}.IIa07q_bodyDirectoryEmpty>span{opacity:.6;font-size:28px}.IIa07q_bodyDirectoryEmpty strong{color:var(--mn-text);display:block}.IIa07q_bodyDirectoryEmpty p{margin:3px 0 0;font-size:10px}.IIa07q_bodyCard{--mn-body-accent:var(--mn-success);opacity:.72;min-width:0;padding:9px 10px 9px 13px;transition:opacity .18s,border-color .18s,background-color .18s}.IIa07q_bodyCard[data-active]{opacity:1;box-shadow:inset 3px 0 0 color-mix(in srgb, var(--mn-provider-color) 78%, transparent)}.IIa07q_bodyCard[data-reconnectable]{cursor:pointer}.IIa07q_bodyCard[data-reconnectable]:hover{border-color:color-mix(in srgb, var(--mn-provider-color) 46%, var(--mn-line))}.IIa07q_bodyCard[data-reconnectable]:focus-visible{outline:2px solid color-mix(in srgb, var(--mn-accent) 58%, transparent);outline-offset:2px}.IIa07q_bodySignal{background:var(--mn-faint);border-radius:50%;width:7px;height:7px}.IIa07q_bodyCard[data-active] .IIa07q_bodySignal{background:var(--mn-body-accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--mn-body-accent) 14%, transparent)}.IIa07q_bodyCard:not([data-healthy]) .IIa07q_bodySignal{background:var(--mn-danger);box-shadow:0 0 0 4px color-mix(in srgb, var(--mn-danger) 12%, transparent)}.IIa07q_bodyCard[data-status-loading] .IIa07q_bodySignal{background:var(--mn-faint);box-shadow:0 0 0 4px color-mix(in srgb, var(--mn-faint) 12%, transparent)}.IIa07q_bodyCard[data-reconnecting] .IIa07q_bodySignal{box-sizing:border-box;border:1.5px solid color-mix(in srgb, var(--mn-provider-color) 24%, transparent);border-top-color:var(--mn-provider-color);width:7px;height:7px;box-shadow:none;background:0 0;animation:.72s linear infinite IIa07q_mnemon-spin}.IIa07q_bodyHealth{color:var(--mn-success);font:650 8px var(--mn-code);letter-spacing:.07em;text-transform:uppercase}.IIa07q_bodyCard:not([data-healthy]) .IIa07q_bodyHealth{color:var(--mn-danger)}.IIa07q_bodyCard[data-status-loading] .IIa07q_bodyHealth{color:var(--mn-faint)}.IIa07q_mnemonDefaultBadge{border:1px solid color-mix(in srgb, var(--mn-accent) 24%, var(--mn-line));width:fit-content;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 7%, transparent);font:650 8px var(--mn-code);white-space:nowrap;border-radius:999px;padding:2px 5px}.IIa07q_providerBadge{border:1px solid color-mix(in srgb, var(--mn-provider-color) 34%, var(--mn-line));width:fit-content;max-width:100%;min-height:17px;color:color-mix(in srgb, var(--mn-provider-color) 78%, var(--mn-text));background:color-mix(in srgb, var(--mn-provider-color) 10%, var(--mn-layer-1));font:650 8px/11px var(--mn-code);text-align:center;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap;border-radius:999px;flex:none;justify-content:center;align-items:center;padding:2px 6px;display:inline-flex;overflow:hidden}.IIa07q_providerBadge,.IIa07q_readSourceCard,.IIa07q_bodyCard,.IIa07q_metadataList>label,.IIa07q_graphNode,.IIa07q_providerBadge[data-provider=mnemon-native],.IIa07q_readSourceCard[data-provider=mnemon-native],.IIa07q_bodyCard[data-provider=mnemon-native],.IIa07q_metadataList>label[data-provider=mnemon-native],.IIa07q_graphNode[data-provider=mnemon-native]{--mn-provider-color:#64748b}.IIa07q_providerBadge[data-provider=openviking],.IIa07q_readSourceCard[data-provider=openviking],.IIa07q_bodyCard[data-provider=openviking],.IIa07q_metadataList>label[data-provider=openviking],.IIa07q_graphNode[data-provider=openviking]{--mn-provider-color:#3b82d0}.IIa07q_providerBadge[data-provider=honcho],.IIa07q_readSourceCard[data-provider=honcho],.IIa07q_bodyCard[data-provider=honcho],.IIa07q_metadataList>label[data-provider=honcho],.IIa07q_graphNode[data-provider=honcho]{--mn-provider-color:#c44fcf}.IIa07q_providerBadge[data-provider=mem0],.IIa07q_readSourceCard[data-provider=mem0],.IIa07q_bodyCard[data-provider=mem0],.IIa07q_metadataList>label[data-provider=mem0],.IIa07q_graphNode[data-provider=mem0]{--mn-provider-color:#8b5cf6}.IIa07q_providerBadge[data-provider=hindsight],.IIa07q_readSourceCard[data-provider=hindsight],.IIa07q_bodyCard[data-provider=hindsight],.IIa07q_metadataList>label[data-provider=hindsight],.IIa07q_graphNode[data-provider=hindsight]{--mn-provider-color:#0891b2}.IIa07q_providerBadge[data-provider=holographic],.IIa07q_readSourceCard[data-provider=holographic],.IIa07q_bodyCard[data-provider=holographic],.IIa07q_metadataList>label[data-provider=holographic],.IIa07q_graphNode[data-provider=holographic]{--mn-provider-color:#6366d9}.IIa07q_providerBadge[data-provider=retaindb],.IIa07q_readSourceCard[data-provider=retaindb],.IIa07q_bodyCard[data-provider=retaindb],.IIa07q_metadataList>label[data-provider=retaindb],.IIa07q_graphNode[data-provider=retaindb]{--mn-provider-color:#d08a28}.IIa07q_providerBadge[data-provider=byterover],.IIa07q_readSourceCard[data-provider=byterover],.IIa07q_bodyCard[data-provider=byterover],.IIa07q_metadataList>label[data-provider=byterover],.IIa07q_graphNode[data-provider=byterover]{--mn-provider-color:#0f9a83}.IIa07q_providerBadge[data-provider=supermemory],.IIa07q_readSourceCard[data-provider=supermemory],.IIa07q_bodyCard[data-provider=supermemory],.IIa07q_metadataList>label[data-provider=supermemory],.IIa07q_graphNode[data-provider=supermemory]{--mn-provider-color:#df4d72}.IIa07q_bodySwitch{min-height:32px;color:var(--mn-faint);cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:0 1px;font-size:9.5px;display:flex}.IIa07q_bodySwitchTrack{border:1px solid var(--mn-line-strong);background:var(--mn-layer-2);border-radius:999px;flex:none;width:29px;height:17px;transition:border-color .18s,background-color .18s;position:relative}.IIa07q_bodySwitchTrack i{background:var(--mn-faint);border-radius:50%;width:11px;height:11px;transition:transform .2s cubic-bezier(.2,.8,.2,1),background-color .18s;position:absolute;top:2px;left:2px}.IIa07q_bodySwitch:hover{color:var(--mn-text)}.IIa07q_bodySwitch:hover .IIa07q_bodySwitchTrack{border-color:var(--mn-body-accent)}.IIa07q_bodySwitch[aria-checked=true]{color:var(--mn-text)}.IIa07q_bodySwitch[aria-checked=true] .IIa07q_bodySwitchTrack{border-color:color-mix(in srgb, var(--mn-body-accent) 65%, var(--mn-line));background:color-mix(in srgb, var(--mn-body-accent) 25%, var(--mn-layer-2))}.IIa07q_bodySwitch[aria-checked=true] .IIa07q_bodySwitchTrack i{background:var(--mn-body-accent);transform:translate(12px)}.IIa07q_bodyCardActions{align-items:center;gap:6px;display:flex}.IIa07q_bodyCreateForm{gap:14px;padding-top:0}.IIa07q_createSection{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 42%, var(--mn-layer-1));border-radius:11px;gap:11px;padding:13px;display:grid}.IIa07q_createSectionHeading{align-items:flex-start;gap:9px;display:flex}.IIa07q_createSectionHeading>span{width:25px;height:19px;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 8px var(--mn-code);border-radius:6px;flex:none;place-items:center;display:grid}.IIa07q_createSectionHeading>div{gap:2px;min-width:0;display:grid}.IIa07q_createSectionHeading strong{color:var(--mn-text);font-size:11.5px;line-height:17px}.IIa07q_createSectionHeading small{color:var(--mn-muted);font-size:9px;line-height:1.45}.IIa07q_createIdentityGrid{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:10px;display:grid}.IIa07q_createIdentityGrid>label{align-content:start}.IIa07q_createIdentityGrid textarea{min-height:70px}.IIa07q_strategyForm{gap:14px;padding-top:0}.IIa07q_strategyLoading{border:1px dashed var(--mn-line);min-height:88px;color:var(--mn-muted);border-radius:10px;justify-content:center;align-items:center;font-size:10px;display:flex;position:relative}.IIa07q_strategyLoading .IIa07q_sectionSpinner{top:9px;right:9px}.IIa07q_placementMode{border:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin:0;padding:0;display:grid}.IIa07q_placementMode legend{color:var(--mn-muted);margin-bottom:5px;font-size:10px}.IIa07q_placementMode label{border:1px solid var(--mn-line);cursor:pointer;background:color-mix(in srgb, var(--mn-layer-2) 62%, transparent);border-radius:9px;grid-template-columns:16px minmax(0,1fr);align-items:center;gap:8px;min-width:0;padding:10px;display:grid;position:relative}.IIa07q_placementMode label[data-selected]{border-color:color-mix(in srgb, var(--mn-accent) 52%, var(--mn-line));background:color-mix(in srgb, var(--mn-accent) 5%, var(--mn-layer-2));box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--mn-accent) 12%, transparent)}.IIa07q_placementMode label[data-disabled]{cursor:not-allowed;opacity:.58}.IIa07q_placementMode input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_placementMode span{gap:3px;display:grid}.IIa07q_placementMode strong{color:var(--mn-text);font-size:11px}.IIa07q_placementMode strong em{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 10%, transparent);font:650 8px var(--mn-code);border-radius:999px;margin-left:4px;padding:2px 5px;font-style:normal}.IIa07q_placementMode small{color:var(--mn-muted);font-size:9px;line-height:1.45}.IIa07q_placementPolicy{border:1px solid color-mix(in srgb, var(--mn-accent) 26%, var(--mn-line));background:color-mix(in srgb, var(--mn-accent) 4%, var(--mn-layer-1));border-radius:10px;gap:9px;margin:0;padding:11px;display:grid}.IIa07q_placementPolicyHeading{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_placementPolicyHeading>div{gap:2px;display:grid}.IIa07q_placementPolicyHeading strong{font-size:11px}.IIa07q_placementPolicyHeading small{color:var(--mn-muted);font-size:9px;line-height:1.45}.IIa07q_placementPolicyHeading>span{border:1px solid color-mix(in srgb, var(--mn-accent) 22%, var(--mn-line));color:var(--mn-accent);font:650 8px var(--mn-code);border-radius:999px;flex:none;padding:3px 6px}.IIa07q_placementRuleGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.IIa07q_capabilityRules{border:0;flex-wrap:wrap;gap:6px;margin:0;padding:0;display:flex}.IIa07q_capabilityRules legend{width:100%;color:var(--mn-faint);margin-bottom:1px;font-size:9px}.IIa07q_capabilityRules label{border:1px solid var(--mn-line);width:fit-content;color:var(--mn-muted);background:var(--mn-input);cursor:pointer;border-radius:8px;align-items:center;gap:6px;padding:6px 8px;display:flex;position:relative}.IIa07q_capabilityRules label[data-selected]{border-color:color-mix(in srgb, var(--mn-accent) 42%, var(--mn-line));color:var(--mn-text);background:color-mix(in srgb, var(--mn-accent) 7%, var(--mn-input))}.IIa07q_capabilityRules input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_placementCandidates{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;display:grid}.IIa07q_placementCandidates>span,.IIa07q_placementCandidates>label{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 70%, transparent);border-radius:8px;grid-template-columns:28px minmax(0,1fr) 16px;align-items:center;gap:8px;min-width:0;padding:8px 9px;display:grid;position:relative}.IIa07q_placementCandidates>label{cursor:pointer}.IIa07q_placementCandidates>[data-selected]{border-color:color-mix(in srgb, var(--mn-accent) 38%, var(--mn-line));background:color-mix(in srgb, var(--mn-accent) 7%, transparent)}.IIa07q_placementCandidates>label[data-disabled]{cursor:not-allowed;opacity:.48}.IIa07q_placementCandidates input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_placementCandidates>span>span:not(.IIa07q_candidateIcon),.IIa07q_placementCandidates>label>span:not(.IIa07q_candidateIcon){gap:2px;min-width:0;display:grid}.IIa07q_placementCandidates strong{color:var(--mn-text);font-size:10px}.IIa07q_placementCandidates small{color:var(--mn-muted);font-size:8.5px;line-height:1.4}.IIa07q_providerChoice{border:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:0;padding:0;display:grid}.IIa07q_providerChoice legend{color:var(--mn-muted);margin-bottom:5px;font-size:10px}.IIa07q_providerChoice label{border:1px solid var(--mn-line);cursor:pointer;background:color-mix(in srgb, var(--mn-layer-2) 72%, transparent);border-radius:9px;grid-template-columns:32px minmax(0,1fr) 16px;align-items:center;gap:9px;min-width:0;padding:10px;display:grid;position:relative}.IIa07q_providerChoice label[data-native]{border-color:color-mix(in srgb, var(--mn-accent) 20%, var(--mn-line));grid-column:1/-1}.IIa07q_providerChoice label[data-selected]{border-color:color-mix(in srgb, var(--mn-accent) 48%, var(--mn-line));background:color-mix(in srgb, var(--mn-accent) 5%, var(--mn-layer-2));box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--mn-accent) 12%, transparent)}.IIa07q_providerChoice label[data-disabled]{cursor:not-allowed;opacity:.5}.IIa07q_providerChoice input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_providerChoice span{gap:3px;display:grid}.IIa07q_providerChoice strong{color:var(--mn-text);font-size:11px}.IIa07q_providerChoice strong em{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 10%, transparent);font:650 8px var(--mn-code);border-radius:999px;margin-left:5px;padding:2px 5px;font-style:normal}.IIa07q_providerChoice small{color:var(--mn-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:9px;line-height:1.45;display:-webkit-box;overflow:hidden}.IIa07q_providerChoiceIcon,.IIa07q_candidateIcon,.IIa07q_providerFieldIcon{box-sizing:border-box;border:1px solid var(--mn-line);background:var(--mn-layer-1);place-items:center;display:grid;overflow:hidden}.IIa07q_providerChoiceIcon{border-radius:8px;width:32px;height:32px;padding:3px}.IIa07q_candidateIcon{border-radius:7px;width:28px;height:28px;padding:3px}.IIa07q_providerFieldIcon{border-radius:8px;flex:none;width:30px;height:30px;padding:3px}.IIa07q_providerChoiceIcon>img,.IIa07q_providerChoiceIcon>svg,.IIa07q_candidateIcon>img,.IIa07q_candidateIcon>svg,.IIa07q_providerFieldIcon>img,.IIa07q_providerFieldIcon>svg{object-fit:contain;border-radius:5px;width:100%;height:100%;display:block}.IIa07q_choiceControl{box-sizing:border-box;border:1px solid color-mix(in srgb, var(--mn-muted) 52%, var(--mn-line));background:var(--mn-layer-1);border-radius:5px;flex:none;place-items:center;width:16px;height:16px;display:grid;position:relative}.IIa07q_choiceControl[data-kind=radio]{border-radius:50%}[data-selected]>.IIa07q_choiceControl{border-color:var(--mn-accent);background:var(--mn-accent)}[data-selected]>.IIa07q_choiceControl[data-kind=check]:after{content:\"\";border-bottom:1.5px solid #fff;border-left:1.5px solid #fff;width:7px;height:4px;transform:translateY(-1px)rotate(-45deg)}[data-selected]>.IIa07q_choiceControl[data-kind=radio]:after{content:\"\";background:#fff;border-radius:50%;width:6px;height:6px}.IIa07q_placementMode label:focus-within,.IIa07q_providerChoice label:focus-within,.IIa07q_capabilityRules label:focus-within,.IIa07q_placementCandidates label:focus-within{outline:2px solid color-mix(in srgb, var(--mn-accent) 28%, transparent);outline-offset:1px}.IIa07q_providerFields{border:1px solid color-mix(in srgb, #6574d9 25%, var(--mn-line));background:#6574d90d;border-radius:9px;gap:8px;padding:10px;display:grid}.IIa07q_providerFieldHeading{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_providerFieldIdentity{align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_providerFieldIdentity>div{gap:2px;min-width:0;display:grid}.IIa07q_providerFieldHeading strong{color:var(--mn-text);font-size:11px}.IIa07q_providerFieldHeading small{color:var(--mn-muted);font-size:9px;line-height:1.45}.IIa07q_providerFieldHeading>span{border:1px solid color-mix(in srgb, #6574d9 24%, var(--mn-line));color:color-mix(in srgb, #8793ef 80%, var(--mn-text));font:650 8px var(--mn-code);border-radius:999px;flex:none;padding:3px 6px}.IIa07q_providerFields details{min-width:0}.IIa07q_providerFields summary{width:fit-content;color:var(--mn-accent);cursor:pointer;font-size:9px}.IIa07q_providerAdvancedGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:8px;display:grid}.IIa07q_providerFieldControl .IIa07q_providerSecretClear{color:var(--mn-muted);cursor:pointer;align-items:center;gap:5px;font-size:8.5px;display:flex}.IIa07q_providerWriteHint{color:color-mix(in srgb, #8793ef 72%, var(--mn-muted));margin-top:4px;font-size:9px;line-height:1.45;display:block}.IIa07q_placementReceipt{border:1px solid color-mix(in srgb, var(--mn-accent) 20%, var(--mn-line));min-width:0;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 4%, transparent);border-radius:8px;align-items:flex-start;gap:7px;margin:7px 0;padding:7px 8px;display:flex}.IIa07q_placementReceipt>span{flex:none;font-size:10px}.IIa07q_placementReceipt>div{grid-template-columns:minmax(0,1fr) auto;gap:2px 8px;min-width:0;display:grid}.IIa07q_placementReceipt strong,.IIa07q_placementReceipt small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_placementReceipt strong{font-size:9px}.IIa07q_placementReceipt small{color:var(--mn-muted);font-size:8px}.IIa07q_placementReceipt p{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;grid-column:1/-1;margin:0;font-size:8.5px;line-height:1.4;overflow:hidden}.IIa07q_bodyCard>p{min-height:15px;color:var(--mn-muted);margin:7px 0;font-size:10px;line-height:1.45}.IIa07q_bodyCard footer{border-top:1px solid var(--mn-line);min-width:0;color:var(--mn-faint);flex-wrap:nowrap;gap:5px 11px;padding-top:6px;font-size:9px;display:flex;overflow:hidden}.IIa07q_bodyFooterBlock{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;display:block;overflow:hidden}.IIa07q_bodyFooterGrow{flex:auto}.IIa07q_graphLayout{grid-template-columns:minmax(0,1fr) minmax(240px,270px);gap:10px;display:grid}.IIa07q_graphPanel,.IIa07q_graphInspector{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px}.IIa07q_graphPanel{min-width:0;position:relative;overflow:hidden}.IIa07q_graphToolbar,.IIa07q_graphFooter{min-height:43px;color:var(--mn-muted);justify-content:space-between;align-items:center;gap:14px;padding:0 13px;font-size:10px;display:flex}.IIa07q_graphToolbar{border-bottom:1px solid var(--mn-line)}.IIa07q_graphToolbar>div:first-child{align-items:center;gap:7px;display:flex}.IIa07q_graphToolbar small{color:var(--mn-faint)}.IIa07q_liveDot{background:var(--mn-success);width:6px;height:6px;box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 15%, transparent);border-radius:50%}.IIa07q_graphLegend{flex-wrap:wrap;justify-content:flex-end;gap:5px 10px;display:flex}.IIa07q_graphLegend span{align-items:center;gap:4px;display:flex}.IIa07q_graphLegend span:before{content:\"\";background:var(--edge-color);border-radius:2px;width:13px;height:2px}.IIa07q_graphLegend [data-edge=temporal]{--edge-color:#87909f}.IIa07q_graphLegend [data-edge=scope]{--edge-color:#708199}.IIa07q_graphLegend [data-edge=scope]:before{background:repeating-linear-gradient(90deg, var(--edge-color) 0 4px, transparent 4px 7px)}.IIa07q_graphLegend [data-edge=semantic]{--edge-color:#4d7cfe}.IIa07q_graphLegend [data-edge=causal]{--edge-color:#ef6b5b}.IIa07q_graphLegend [data-edge=entity]{--edge-color:#22a879}.IIa07q_graphViewport{background:radial-gradient(circle at 50% 48%, color-mix(in srgb, var(--mn-accent) 6%, transparent), transparent 47%);min-height:clamp(390px,42vw,560px);position:relative;overflow:hidden}.IIa07q_graphCanvasControls{z-index:2;border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-1) 88%, transparent);box-shadow:0 6px 18px color-mix(in srgb, var(--mn-text) 7%, transparent);backdrop-filter:blur(10px);border-radius:9px;align-items:center;gap:5px;padding:4px;display:flex;position:absolute;top:10px;right:10px}.IIa07q_graphCanvasControls span{color:var(--mn-faint);font:9px var(--mn-code);align-items:center;gap:5px;padding:0 6px;display:flex}.IIa07q_graphCanvasControls span i{background:var(--mn-accent);width:5px;height:5px;box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-accent) 12%, transparent);border-radius:50%}.IIa07q_graphCanvasControls button{min-height:30px;color:var(--mn-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;padding:0 9px;font-size:9.5px}.IIa07q_graphCanvasControls button:hover,.IIa07q_graphCanvasControls button[data-active]{border-color:var(--mn-line);color:var(--mn-text);background:var(--mn-hover)}.IIa07q_graphCanvasControls button[data-active]{color:var(--mn-accent)}.IIa07q_graphSvg{touch-action:pan-y pinch-zoom;user-select:none;width:100%;height:clamp(390px,42vw,560px);display:block}.IIa07q_graphBackdrop{fill:var(--mn-layer-1)}.IIa07q_graphGridLine{stroke:var(--mn-line);stroke-width:.6px;opacity:.5}.IIa07q_graphEdge{fill:none;stroke:#87909f;stroke-width:1px;opacity:.32;vector-effect:non-scaling-stroke}.IIa07q_graphEdge[data-edge=scope]{stroke:#708199;stroke-dasharray:4 5;opacity:.28}.IIa07q_graphEdge[data-edge=semantic]{stroke:#4d7cfe;opacity:.48}.IIa07q_graphEdge[data-edge=causal]{stroke:#ef6b5b;opacity:.52}.IIa07q_graphEdge[data-edge=entity]{stroke:#22a879;stroke-width:1.45px;opacity:.78}.IIa07q_graphNode{--node:#8290a8;cursor:grab;touch-action:none;outline:none}.IIa07q_graphNode[data-dragging]{cursor:grabbing}.IIa07q_graphNode[data-category=decision]{--node:#ef8354}.IIa07q_graphNode[data-category=preference]{--node:#a879e1}.IIa07q_graphNode[data-category=fact]{--node:#4d7cfe}.IIa07q_graphNode[data-category=insight]{--node:#19a77d}.IIa07q_graphNode[data-category=context]{--node:#d8a624}.IIa07q_graphNode[data-kind=space]{--node:var(--mn-provider-color)}.IIa07q_graphNode[data-kind=entity]{--node:#2b9db9}.IIa07q_nodeHalo{fill:color-mix(in srgb, var(--node) 18%, var(--mn-layer-1));stroke:color-mix(in srgb, var(--node) 60%, var(--mn-layer-1));stroke-width:1.5px;transition:r .16s}.IIa07q_nodeCore{fill:var(--node)}.IIa07q_nodeLabel{fill:var(--mn-muted);font:10px var(--mn-code);pointer-events:auto}.IIa07q_nodeBodyLabel{fill:var(--mn-faint);font:650 8px var(--mn-code);letter-spacing:.04em;pointer-events:auto}.IIa07q_graphSvg[data-density=sparse] .IIa07q_nodeLabel{font-size:12px}.IIa07q_graphNode:hover .IIa07q_nodeHalo,.IIa07q_graphNode:focus .IIa07q_nodeHalo,.IIa07q_graphNode[data-selected] .IIa07q_nodeHalo{fill:color-mix(in srgb, var(--node) 28%, var(--mn-layer-1));stroke:var(--node)}.IIa07q_graphNode[data-selected] .IIa07q_nodeLabel{fill:var(--mn-text);font-weight:650}.IIa07q_graphFooter{border-top:1px solid var(--mn-line);min-height:38px;color:var(--mn-faint)}.IIa07q_graphInspector{min-width:0;min-height:calc(clamp(390px,42vw,560px) + 83px);padding:15px;overflow:hidden}.IIa07q_inspectorEmpty{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;display:flex}.IIa07q_inspectorLogo{opacity:.72;border-radius:11px;width:54px;height:54px;margin-bottom:15px}.IIa07q_inspectorEmpty h3{margin:7px 0 3px;font-size:14px}.IIa07q_inspectorEmpty p{color:var(--mn-faint);margin:0;font-size:11px}.IIa07q_inspectorHeading{justify-content:space-between;align-items:center;display:flex}.IIa07q_inspectorHeading button{width:32px;height:32px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;display:grid}.IIa07q_inspectorHeading button:hover{background:var(--mn-hover)}.IIa07q_inspectorChips{flex-wrap:wrap;align-items:center;gap:6px;margin-top:24px;display:flex}.IIa07q_categoryChip{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 10%, transparent);border-radius:999px;padding:3px 8px;font-size:10px;display:inline-flex}.IIa07q_inspectorTitleRow{align-items:flex-start;gap:8px;min-width:0;margin:12px 0 20px;display:flex}.IIa07q_inspectorTitle{overflow-wrap:anywhere;white-space:pre-wrap;-webkit-line-clamp:6;-webkit-box-orient:vertical;flex:1;min-width:0;margin:0;font-size:14px;line-height:1.6;display:-webkit-box;overflow:hidden}.IIa07q_inspectorEye{border:1px solid var(--mn-line);width:27px;height:27px;color:var(--mn-muted);background:var(--mn-layer-1);cursor:pointer;border-radius:7px;flex:none;place-items:center;transition:color .15s,border-color .15s,background-color .15s;display:grid}.IIa07q_inspectorEye:hover{color:var(--mn-accent);border-color:var(--mn-line-strong);background:var(--mn-hover)}.IIa07q_inspectorMeta{margin:0}.IIa07q_inspectorMeta>div{border-top:1px solid var(--mn-line);gap:3px;padding:11px 0;display:grid}.IIa07q_inspectorMeta dt{color:var(--mn-faint);font:9px var(--mn-code);text-transform:uppercase}.IIa07q_inspectorMeta dd{overflow-wrap:anywhere;color:var(--mn-muted);margin:0;font-size:11px}.IIa07q_inspectorActions{gap:8px;margin-top:20px;display:grid}.IIa07q_previewContent{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--mn-text);margin:0;font-size:13px;line-height:1.7}.IIa07q_searchBar{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:13px;margin-bottom:18px;padding:13px}.IIa07q_queryField{border:1px solid var(--mn-line-strong);background:var(--mn-input);border-radius:9px;grid-template-columns:24px minmax(0,1fr) 24px;align-items:center;gap:5px;padding:0 10px;display:grid}.IIa07q_queryField>span{color:var(--mn-accent);font:18px var(--mn-code)}.IIa07q_queryField input{background:0 0;border:0;outline:0;width:100%;height:42px}.IIa07q_queryField kbd{color:var(--mn-faint);font:11px var(--mn-code)}.IIa07q_searchControls{justify-content:flex-end;align-items:flex-end;gap:10px;padding-top:10px;display:flex}.IIa07q_searchActions{align-items:center;gap:7px;display:flex}.IIa07q_agentAnswer{border:1px solid color-mix(in srgb, var(--mn-accent) 30%, var(--mn-line));background:linear-gradient(135deg, color-mix(in srgb, var(--mn-accent) 7%, var(--mn-layer-1)), var(--mn-layer-1) 60%);border-radius:11px;margin-bottom:16px;padding:16px 18px}.IIa07q_agentAnswerHeading{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.IIa07q_agentAnswerHeading span{color:var(--mn-accent);font:650 9px/1.2 var(--mn-code);letter-spacing:.08em}.IIa07q_agentAnswerHeading h3{margin:4px 0 0;font-size:15px}.IIa07q_agentAnswerHeading>code{color:var(--mn-faint);font-size:9px}.IIa07q_agentAnswer>p{white-space:pre-wrap;color:var(--mn-text);margin:12px 0;font-size:13px;line-height:1.7}.IIa07q_agentCitations{border-top:1px solid var(--mn-line);flex-wrap:wrap;gap:5px;padding-top:10px;display:flex}.IIa07q_agentCitations code{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:5px;padding:3px 6px;font-size:9px}.IIa07q_searchControls label,.IIa07q_fieldWide{color:var(--mn-muted);gap:5px;font-size:11px;display:grid}.IIa07q_searchControls select,.IIa07q_listToolbar input,.IIa07q_listToolbar select,.IIa07q_entitySearch input{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;min-width:140px;height:34px;padding:0 9px}.IIa07q_searchControls select:focus,.IIa07q_listToolbar input:focus,.IIa07q_listToolbar select:focus,.IIa07q_entitySearch input:focus,.IIa07q_supervisedForm textarea:focus{border-color:var(--mn-accent)}.IIa07q_singleColumn{max-width:830px}.IIa07q_resultLayout{grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);align-items:start;gap:14px;display:grid}.IIa07q_results,.IIa07q_relatedPane,.IIa07q_entityResults{min-width:0}.IIa07q_relatedPane{border:1px solid var(--mn-line);background:var(--mn-layer-1);-webkit-overflow-scrolling:touch;border-radius:12px;max-height:calc(100dvh - 230px);padding:13px;scroll-margin-top:14px;position:sticky;top:12px;overflow:auto}.IIa07q_relatedSource{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:8px;margin:0 0 13px;padding:10px;font-size:11px}.IIa07q_insightCard{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0;margin-bottom:9px;padding:14px;transition:border-color .15s,transform .15s,box-shadow .15s}.IIa07q_insightCard:hover{border-color:var(--mn-line-strong);transform:translateY(-1px)}.IIa07q_cardTop{justify-content:space-between;align-items:center;gap:10px;display:flex}.IIa07q_badges,.IIa07q_tags,.IIa07q_entities{flex-wrap:wrap;gap:5px;display:flex}.IIa07q_badge{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:999px;padding:2px 6px;font-size:9px}.IIa07q_id{color:var(--mn-faint);font:9px var(--mn-code)}.IIa07q_content{white-space:pre-wrap;overflow-wrap:anywhere;margin:10px 0;line-height:1.65}.IIa07q_tags{color:var(--mn-accent);font-size:10px}.IIa07q_entities{margin-top:7px}.IIa07q_entities span{border:1px solid var(--mn-line);color:var(--mn-muted);border-radius:5px;padding:2px 6px;font-size:9px}.IIa07q_cardActions{border-top:1px solid var(--mn-line);justify-content:flex-end;align-items:center;gap:3px;min-height:30px;margin-top:10px;padding-top:8px;display:flex}.IIa07q_entityLayout{grid-template-columns:265px minmax(0,1fr);align-items:start;gap:16px;display:grid}.IIa07q_entityRail{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;padding:13px;position:sticky;top:0}.IIa07q_entitySearch{grid-template-columns:minmax(0,1fr) auto;gap:7px;display:grid}.IIa07q_entitySearch input{min-width:0}.IIa07q_entityHeading{justify-content:space-between;align-items:center;margin:18px 2px 7px;display:flex}.IIa07q_entityHeading small{color:var(--mn-faint);font-size:9px}.IIa07q_entityList{gap:3px;display:grid}.IIa07q_entityList button{min-height:34px;color:var(--mn-muted);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:7px;justify-content:space-between;align-items:center;gap:10px;padding:0 9px;display:flex}.IIa07q_entityList button:hover,.IIa07q_entityList button[aria-pressed=true]{color:var(--mn-text);background:var(--mn-hover)}.IIa07q_entityList button>span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.IIa07q_entityList strong{color:var(--mn-faint);font:10px var(--mn-code);flex:none}.IIa07q_entityResults>.IIa07q_emptyState{min-height:360px}.IIa07q_supervisedComposer{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;overflow:hidden}.IIa07q_supervisedForm{padding:18px}.IIa07q_supervisedHeading{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.IIa07q_supervisedHeading h3{margin:4px 0 0;font-size:17px}.IIa07q_sessionReady,.IIa07q_sessionMissing{font:650 9px var(--mn-code);border-radius:999px;padding:4px 8px}.IIa07q_sessionReady{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 10%, transparent)}.IIa07q_sessionMissing{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 10%, transparent)}.IIa07q_supervisedForm textarea{resize:vertical;border:1px solid var(--mn-line);width:100%;color:var(--mn-text);background:var(--mn-input);border-radius:9px;outline:0;padding:12px;line-height:1.65}.IIa07q_sessionHint{color:var(--mn-danger);margin:9px 0 0;font-size:11px}.IIa07q_fieldWide{grid-column:1/-1}.IIa07q_advancedWrite{border-top:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 45%, var(--mn-layer-1))}.IIa07q_advancedWrite summary{cursor:pointer;justify-content:space-between;align-items:center;gap:16px;min-height:58px;padding:10px 18px;list-style:none;display:flex}.IIa07q_advancedWrite summary::-webkit-details-marker{display:none}.IIa07q_advancedWrite summary>span:first-child{gap:2px;display:grid}.IIa07q_advancedWrite summary strong{font-size:12px}.IIa07q_advancedWrite summary small{color:var(--mn-faint);font-size:10px}.IIa07q_advancedWrite summary>span:last-child{color:var(--mn-accent);font:10px var(--mn-code)}.IIa07q_advancedWrite[open] summary{border-bottom:1px solid var(--mn-line)}.IIa07q_advancedWrite[open] summary>span:last-child{font-size:0}.IIa07q_advancedWrite[open] summary>span:last-child:after{content:\"−\";font-size:13px}.IIa07q_manualForm{padding:3px 18px 18px}.IIa07q_manualActions{justify-content:space-between;align-items:center;gap:14px;margin-top:15px;display:flex}.IIa07q_manualActions p{max-width:520px;color:var(--mn-faint);margin:0;font-size:10px}.IIa07q_listToolbar{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;grid-template-columns:minmax(0,1fr) 170px auto;gap:9px;padding:12px;display:grid}.IIa07q_listToolbar input,.IIa07q_listToolbar select{width:100%;min-width:0}.IIa07q_listNotice{color:var(--mn-faint);margin:10px 0 16px;font-size:10px}.IIa07q_listNotice span{color:var(--mn-success);font:650 9px var(--mn-code);letter-spacing:.08em;margin-right:7px}.IIa07q_memoryList{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:9px;display:grid}.IIa07q_memoryList .IIa07q_insightCard{height:100%;margin:0}.IIa07q_modalFooterNote{max-width:54ch;color:var(--mn-muted);margin:0 auto 0 0;font-size:9px;line-height:1.5}.IIa07q_modalInlineStatus{color:var(--mn-muted);overflow-wrap:anywhere;margin:12px 0 0;font-size:11px;line-height:1.5}.IIa07q_metadataDialog{gap:12px;display:grid}.IIa07q_metadataToolbar{color:var(--mn-muted);justify-content:space-between;align-items:center;gap:12px;font-size:10px;display:flex}.IIa07q_metadataToolbar>span{align-items:center;gap:7px;min-width:0;display:flex}.IIa07q_metadataToolbar em{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 8px var(--mn-code);border-radius:999px;padding:2px 5px;font-style:normal}.IIa07q_metadataList{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.IIa07q_metadataEmpty{border:1px dashed var(--mn-line);color:var(--mn-muted);background:color-mix(in srgb, var(--mn-layer-2) 76%, transparent);text-align:center;border-radius:8px;grid-column:1/-1;padding:18px;font-size:10px}.IIa07q_metadataList>label{cursor:pointer;grid-template-columns:16px minmax(0,1fr);align-items:start;gap:9px;min-width:0;min-height:76px;padding:10px 10px 10px 13px;display:grid;position:relative}.IIa07q_metadataList>label[data-selected]{border-color:color-mix(in srgb, var(--mn-accent) 48%, var(--mn-line));box-shadow:inset 3px 0 0 var(--mn-provider-color), inset 0 0 0 1px color-mix(in srgb, var(--mn-accent) 10%, transparent)}.IIa07q_metadataList>label[data-refreshing]{overflow:hidden}.IIa07q_metadataList>label[data-refreshing]:after{content:\"\";background:linear-gradient(105deg, transparent 20%, color-mix(in srgb, var(--mn-provider-color) 16%, transparent) 45%, transparent 70%);pointer-events:none;animation:.9s ease-in-out infinite IIa07q_mnemon-metadata-sweep;position:absolute;inset:0;transform:translate(-120%)}.IIa07q_metadataList>label[data-refreshed]{animation:.9s ease-out IIa07q_mnemon-metadata-refreshed}.IIa07q_metadataList>label[data-failed]{border-color:color-mix(in srgb, var(--mn-danger) 42%, var(--mn-line))}.IIa07q_metadataList>label>input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_metadataList>label>span{gap:4px;min-width:0;display:grid}.IIa07q_metadataList strong{text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.IIa07q_metadataList small{color:var(--mn-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:9px;line-height:1.45;display:-webkit-box;overflow:hidden}.IIa07q_metadataList>label>span>span{align-items:center;gap:6px;min-width:0;display:flex}.IIa07q_metadataList code{color:var(--mn-faint);font:8px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_metadataTaskStatus{min-width:0;font:650 8px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_metadataTaskStatus[data-status=running]{color:var(--mn-provider-color)}.IIa07q_metadataTaskStatus[data-status=success]{color:var(--mn-success)}.IIa07q_metadataTaskStatus[data-status=error]{color:var(--mn-danger)}@media (prefers-reduced-motion:reduce){.IIa07q_metadataList>label[data-refreshing]:after,.IIa07q_metadataList>label[data-refreshed]{animation:none}}@media (width<=1000px){.IIa07q_graphLayout{display:block;position:relative}.IIa07q_graphInspector{width:auto;min-height:0;box-shadow:none;margin-top:10px;position:static;overflow:visible}.IIa07q_graphInspector[data-empty]{display:none}.IIa07q_resultLayout{grid-template-columns:1fr}.IIa07q_relatedPane{grid-row:1;max-height:none;position:static}.IIa07q_memoryList{grid-template-columns:1fr}}@media (width<=760px){.IIa07q_metadataList{grid-template-columns:1fr}.IIa07q_modalFooterNote{max-width:none;margin:0;font-size:10px}.IIa07q_modal .IIa07q_supervisedForm textarea{min-height:clamp(130px,30vh,210px)}.IIa07q_entityLayout{grid-template-columns:1fr}.IIa07q_manualActions{flex-direction:column;align-items:stretch}.IIa07q_entityRail{position:static}.IIa07q_searchControls{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.IIa07q_searchActions{grid-column:1/-1}.IIa07q_searchActions>button{flex:1}.IIa07q_searchControls select{width:100%;min-width:0}.IIa07q_listToolbar{grid-template-columns:1fr}.IIa07q_bodyDirectoryHeader{display:grid}.IIa07q_createIdentityGrid,.IIa07q_placementMode,.IIa07q_placementRuleGrid,.IIa07q_placementCandidates,.IIa07q_providerChoice,.IIa07q_providerAdvancedGrid{grid-template-columns:1fr}.IIa07q_graphViewport{min-height:360px}.IIa07q_graphSvg{height:390px}.IIa07q_graphCanvasControls{top:7px;right:7px}.IIa07q_graphCanvasControls span{display:none}}@media (width<=520px){.IIa07q_memoryHeaderActions{width:100%}.IIa07q_memoryHeaderActions>button{flex:1}.IIa07q_supervisedHeading,.IIa07q_cardTop{flex-direction:column;align-items:flex-start}.IIa07q_cardActions{flex-wrap:wrap;align-items:stretch}.IIa07q_cardActions button{flex:1}.IIa07q_searchControls{grid-template-columns:1fr}}@supports (height:100dvh){@media (width<=760px){.IIa07q_modal .IIa07q_supervisedForm textarea{min-height:clamp(130px,30dvh,210px)}}}@media (width<=1000px) and (height<=760px){.IIa07q_graphViewport{min-height:300px}.IIa07q_graphSvg{height:300px}}@media (prefers-reduced-motion:reduce){.IIa07q_insightCard:hover{transform:none}}";
|
|
708
|
+
const id$1 = "dsh-mnemon-source-memory-spaces/presentation/page.module.css";
|
|
709
|
+
if (typeof document !== "undefined") {
|
|
710
|
+
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(id$1) + "]");
|
|
711
|
+
if (!tag) {
|
|
712
|
+
tag = document.createElement("style");
|
|
713
|
+
tag.dataset.pluginCss = id$1;
|
|
714
|
+
document.head.appendChild(tag);
|
|
715
|
+
}
|
|
716
|
+
if (tag.textContent !== css$2) tag.textContent = css$2;
|
|
717
|
+
}
|
|
718
|
+
var page_module_css_default = {
|
|
719
|
+
"advancedWrite": "IIa07q_advancedWrite",
|
|
720
|
+
"agentAnswer": "IIa07q_agentAnswer",
|
|
721
|
+
"agentAnswerHeading": "IIa07q_agentAnswerHeading",
|
|
722
|
+
"agentCitations": "IIa07q_agentCitations",
|
|
723
|
+
"asyncPlaceholder": "IIa07q_asyncPlaceholder",
|
|
724
|
+
"asyncRegion": "IIa07q_asyncRegion",
|
|
725
|
+
"asyncResults": "IIa07q_asyncResults",
|
|
726
|
+
"badge": "IIa07q_badge",
|
|
727
|
+
"badges": "IIa07q_badges",
|
|
728
|
+
"bodyCard": "IIa07q_bodyCard",
|
|
729
|
+
"bodyCardActions": "IIa07q_bodyCardActions",
|
|
730
|
+
"bodyCreateForm": "IIa07q_bodyCreateForm",
|
|
731
|
+
"bodyDirectory": "IIa07q_bodyDirectory",
|
|
732
|
+
"bodyDirectoryControls": "IIa07q_bodyDirectoryControls",
|
|
733
|
+
"bodyDirectoryEmpty": "IIa07q_bodyDirectoryEmpty",
|
|
734
|
+
"bodyDirectoryHeader": "IIa07q_bodyDirectoryHeader",
|
|
735
|
+
"bodyDirectoryPath": "IIa07q_bodyDirectoryPath",
|
|
736
|
+
"bodyFooterBlock": "IIa07q_bodyFooterBlock",
|
|
737
|
+
"bodyFooterGrow": "IIa07q_bodyFooterGrow",
|
|
738
|
+
"bodyGrid": "IIa07q_bodyGrid",
|
|
739
|
+
"bodyHealth": "IIa07q_bodyHealth",
|
|
740
|
+
"bodySignal": "IIa07q_bodySignal",
|
|
741
|
+
"bodySwitch": "IIa07q_bodySwitch",
|
|
742
|
+
"bodySwitchTrack": "IIa07q_bodySwitchTrack",
|
|
743
|
+
"candidateIcon": "IIa07q_candidateIcon",
|
|
744
|
+
"capabilityRules": "IIa07q_capabilityRules",
|
|
745
|
+
"cardActions": "IIa07q_cardActions",
|
|
746
|
+
"cardTop": "IIa07q_cardTop",
|
|
747
|
+
"categoryChip": "IIa07q_categoryChip",
|
|
748
|
+
"choiceControl": "IIa07q_choiceControl",
|
|
749
|
+
"content": "IIa07q_content",
|
|
750
|
+
"createIdentityGrid": "IIa07q_createIdentityGrid",
|
|
751
|
+
"createSection": "IIa07q_createSection",
|
|
752
|
+
"createSectionHeading": "IIa07q_createSectionHeading",
|
|
753
|
+
"emptyState": "IIa07q_emptyState",
|
|
754
|
+
"entities": "IIa07q_entities",
|
|
755
|
+
"entityHeading": "IIa07q_entityHeading",
|
|
756
|
+
"entityLayout": "IIa07q_entityLayout",
|
|
757
|
+
"entityList": "IIa07q_entityList",
|
|
758
|
+
"entityRail": "IIa07q_entityRail",
|
|
759
|
+
"entityResults": "IIa07q_entityResults",
|
|
760
|
+
"entitySearch": "IIa07q_entitySearch",
|
|
761
|
+
"fieldWide": "IIa07q_fieldWide",
|
|
762
|
+
"graphBackdrop": "IIa07q_graphBackdrop",
|
|
763
|
+
"graphCanvasControls": "IIa07q_graphCanvasControls",
|
|
764
|
+
"graphEdge": "IIa07q_graphEdge",
|
|
765
|
+
"graphFooter": "IIa07q_graphFooter",
|
|
766
|
+
"graphGridLine": "IIa07q_graphGridLine",
|
|
767
|
+
"graphInspector": "IIa07q_graphInspector",
|
|
768
|
+
"graphLayout": "IIa07q_graphLayout",
|
|
769
|
+
"graphLegend": "IIa07q_graphLegend",
|
|
770
|
+
"graphNode": "IIa07q_graphNode",
|
|
771
|
+
"graphPanel": "IIa07q_graphPanel",
|
|
772
|
+
"graphSvg": "IIa07q_graphSvg",
|
|
773
|
+
"graphToolbar": "IIa07q_graphToolbar",
|
|
774
|
+
"graphViewport": "IIa07q_graphViewport",
|
|
775
|
+
"id": "IIa07q_id",
|
|
776
|
+
"insightCard": "IIa07q_insightCard",
|
|
777
|
+
"inspectorActions": "IIa07q_inspectorActions",
|
|
778
|
+
"inspectorChips": "IIa07q_inspectorChips",
|
|
779
|
+
"inspectorEmpty": "IIa07q_inspectorEmpty",
|
|
780
|
+
"inspectorEye": "IIa07q_inspectorEye",
|
|
781
|
+
"inspectorHeading": "IIa07q_inspectorHeading",
|
|
782
|
+
"inspectorLogo": "IIa07q_inspectorLogo",
|
|
783
|
+
"inspectorMeta": "IIa07q_inspectorMeta",
|
|
784
|
+
"inspectorTitle": "IIa07q_inspectorTitle",
|
|
785
|
+
"inspectorTitleRow": "IIa07q_inspectorTitleRow",
|
|
786
|
+
"listNotice": "IIa07q_listNotice",
|
|
787
|
+
"listToolbar": "IIa07q_listToolbar",
|
|
788
|
+
"liveDot": "IIa07q_liveDot",
|
|
789
|
+
"manualActions": "IIa07q_manualActions",
|
|
790
|
+
"manualForm": "IIa07q_manualForm",
|
|
791
|
+
"memoryHeaderActions": "IIa07q_memoryHeaderActions",
|
|
792
|
+
"memoryList": "IIa07q_memoryList",
|
|
793
|
+
"metadataDialog": "IIa07q_metadataDialog",
|
|
794
|
+
"metadataEmpty": "IIa07q_metadataEmpty",
|
|
795
|
+
"metadataList": "IIa07q_metadataList",
|
|
796
|
+
"metadataTaskStatus": "IIa07q_metadataTaskStatus",
|
|
797
|
+
"metadataToolbar": "IIa07q_metadataToolbar",
|
|
798
|
+
"mnemon-metadata-refreshed": "IIa07q_mnemon-metadata-refreshed",
|
|
799
|
+
"mnemon-metadata-sweep": "IIa07q_mnemon-metadata-sweep",
|
|
800
|
+
"mnemon-spin": "IIa07q_mnemon-spin",
|
|
801
|
+
"mnemonDefaultBadge": "IIa07q_mnemonDefaultBadge",
|
|
802
|
+
"modal": "IIa07q_modal",
|
|
803
|
+
"modalFooterNote": "IIa07q_modalFooterNote",
|
|
804
|
+
"modalInlineStatus": "IIa07q_modalInlineStatus",
|
|
805
|
+
"muted": "IIa07q_muted",
|
|
806
|
+
"nodeBodyLabel": "IIa07q_nodeBodyLabel",
|
|
807
|
+
"nodeCore": "IIa07q_nodeCore",
|
|
808
|
+
"nodeHalo": "IIa07q_nodeHalo",
|
|
809
|
+
"nodeLabel": "IIa07q_nodeLabel",
|
|
810
|
+
"placementCandidates": "IIa07q_placementCandidates",
|
|
811
|
+
"placementMode": "IIa07q_placementMode",
|
|
812
|
+
"placementPolicy": "IIa07q_placementPolicy",
|
|
813
|
+
"placementPolicyHeading": "IIa07q_placementPolicyHeading",
|
|
814
|
+
"placementReceipt": "IIa07q_placementReceipt",
|
|
815
|
+
"placementRuleGrid": "IIa07q_placementRuleGrid",
|
|
816
|
+
"previewContent": "IIa07q_previewContent",
|
|
817
|
+
"providerAdvancedGrid": "IIa07q_providerAdvancedGrid",
|
|
818
|
+
"providerBadge": "IIa07q_providerBadge",
|
|
819
|
+
"providerChoice": "IIa07q_providerChoice",
|
|
820
|
+
"providerChoiceIcon": "IIa07q_providerChoiceIcon",
|
|
821
|
+
"providerFieldControl": "IIa07q_providerFieldControl",
|
|
822
|
+
"providerFieldHeading": "IIa07q_providerFieldHeading",
|
|
823
|
+
"providerFieldIcon": "IIa07q_providerFieldIcon",
|
|
824
|
+
"providerFieldIdentity": "IIa07q_providerFieldIdentity",
|
|
825
|
+
"providerFields": "IIa07q_providerFields",
|
|
826
|
+
"providerSecretClear": "IIa07q_providerSecretClear",
|
|
827
|
+
"providerWriteHint": "IIa07q_providerWriteHint",
|
|
828
|
+
"queryField": "IIa07q_queryField",
|
|
829
|
+
"readSourceCard": "IIa07q_readSourceCard",
|
|
830
|
+
"readSourceIdentity": "IIa07q_readSourceIdentity",
|
|
831
|
+
"readSourceMeta": "IIa07q_readSourceMeta",
|
|
832
|
+
"readSourceSignal": "IIa07q_readSourceSignal",
|
|
833
|
+
"readSourceState": "IIa07q_readSourceState",
|
|
834
|
+
"readSources": "IIa07q_readSources",
|
|
835
|
+
"relatedPane": "IIa07q_relatedPane",
|
|
836
|
+
"relatedSource": "IIa07q_relatedSource",
|
|
837
|
+
"resultLayout": "IIa07q_resultLayout",
|
|
838
|
+
"results": "IIa07q_results",
|
|
839
|
+
"searchActions": "IIa07q_searchActions",
|
|
840
|
+
"searchBar": "IIa07q_searchBar",
|
|
841
|
+
"searchControls": "IIa07q_searchControls",
|
|
842
|
+
"sectionSpinner": "IIa07q_sectionSpinner",
|
|
843
|
+
"sessionHint": "IIa07q_sessionHint",
|
|
844
|
+
"sessionMissing": "IIa07q_sessionMissing",
|
|
845
|
+
"sessionReady": "IIa07q_sessionReady",
|
|
846
|
+
"singleColumn": "IIa07q_singleColumn",
|
|
847
|
+
"strategyForm": "IIa07q_strategyForm",
|
|
848
|
+
"strategyLoading": "IIa07q_strategyLoading",
|
|
849
|
+
"supervisedComposer": "IIa07q_supervisedComposer",
|
|
850
|
+
"supervisedForm": "IIa07q_supervisedForm",
|
|
851
|
+
"supervisedHeading": "IIa07q_supervisedHeading",
|
|
852
|
+
"tags": "IIa07q_tags"
|
|
853
|
+
};
|
|
854
|
+
//#endregion
|
|
855
|
+
//#region \0source-css:/home/runner/work/dsh-mnemon/dsh-mnemon/plugins/dsh-mnemon-source-memory-spaces/presentation/sidebar.module.css.mjs
|
|
856
|
+
const css$1 = "._Bh55G_shell ._Bh55G_memoryWorkspace{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--mn-surface);flex:none;padding:12px 16px 0}._Bh55G_shell ._Bh55G_memoryWorkspace>[class*=pageHeader]{margin-bottom:8px}._Bh55G_shell ._Bh55G_memoryNavigation{flex:none;align-items:flex-end;gap:12px;min-width:0;padding:0;display:flex}._Bh55G_shell ._Bh55G_memoryTabs{scrollbar-width:none;flex:1;gap:2px;min-width:0;display:flex;overflow-x:auto}._Bh55G_shell ._Bh55G_memoryTabs::-webkit-scrollbar{display:none}._Bh55G_shell ._Bh55G_memoryTabs button{min-width:max-content;min-height:0;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;border-radius:6px 6px 0 0;padding:6px 12px;font-size:13px}._Bh55G_shell ._Bh55G_memoryTabs button:hover{background:var(--dsw-alias-interactive-bg-hover)}._Bh55G_shell ._Bh55G_memoryTabs button[data-active]{border-bottom-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-primary);font-weight:600}._Bh55G_shell ._Bh55G_memoryWriteButton{flex:none}._Bh55G_shell ._Bh55G_modal section[class*=supervisedComposer]{overflow:visible}._Bh55G_shell ._Bh55G_modal form[class*=supervisedForm]{padding:0}._Bh55G_shell ._Bh55G_modal [class*=supervisedHeading]{margin-bottom:10px}._Bh55G_shell ._Bh55G_modal [class*=supervisedHeading] h3{display:none}._Bh55G_shell ._Bh55G_modal details[class*=advancedWrite]{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:10px;margin-top:14px;overflow:hidden}._Bh55G_shell [class*=inspectorEye],._Bh55G_shell [class*=inspectorHeading] button{width:26px;height:26px;min-height:0;color:var(--dsw-alias-label-secondary);background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:13px;display:inline-flex}._Bh55G_shell [class*=inspectorEye]:hover:not(:disabled),._Bh55G_shell [class*=inspectorHeading] button:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover);border:0}._Bh55G_shell [class*=inspectorEye],._Bh55G_shell [class*=inspectorHeading] button{cursor:pointer;transition:background-color .12s,color .12s,border-color .12s,outline-color .12s,box-shadow .12s,transform .12s}._Bh55G_shell [class*=inspectorEye]:active:not(:disabled),._Bh55G_shell [class*=inspectorHeading] button:active:not(:disabled){transform:translateY(1px)}._Bh55G_shell [class*=inspectorEye]:disabled{cursor:default;opacity:.45}._Bh55G_shell [class*=searchControls] label,._Bh55G_shell [class*=fieldWide]{color:var(--dsw-alias-label-secondary);gap:5px;font-size:12px;font-weight:500}._Bh55G_shell [class*=searchControls] select,._Bh55G_shell [class*=listToolbar] input,._Bh55G_shell [class*=listToolbar] select,._Bh55G_shell [class*=entitySearch] input{border:1px solid var(--dsw-alias-border-l2);min-height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border-radius:8px;padding:7px 10px;font-size:13px;font-weight:400}._Bh55G_shell [class*=entityHeading]>span,._Bh55G_shell [class*=inspectorHeading]>span{letter-spacing:.06em;font-size:11px}._Bh55G_shell [class*=bodyDirectoryHeader] p,._Bh55G_shell [class*=bodyCard]>p,._Bh55G_shell [class*=graphToolbar],._Bh55G_shell [class*=graphFooter],._Bh55G_shell [class*=manualActions] p{font-size:12px}._Bh55G_shell [class*=bodyDirectoryPath],._Bh55G_shell [class*=bodyCard] footer,._Bh55G_shell [class*=bodyHealth],._Bh55G_shell [class*=badge],._Bh55G_shell [class*=entities] span{font-size:11px}._Bh55G_shell [class*=bodySwitch],._Bh55G_shell [class*=graphCanvasControls] button,._Bh55G_shell [class*=advancedWrite] summary small{font-size:12px}._Bh55G_shell [class*=inspectorMeta] dd{font-size:13px}._Bh55G_shell [class*=bodyGrid]{grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr))}._Bh55G_shell article[class*=bodyCard]{border-color:var(--mn-line);background:linear-gradient(90deg, color-mix(in srgb, var(--mn-provider-color) 5%, var(--mn-layer-1)), var(--mn-layer-1) 34%);height:100%;box-shadow:inset 3px 0 0 color-mix(in srgb, var(--mn-provider-color) 68%, transparent);border-radius:8px;flex-direction:column;padding:11px 11px 11px 14px;display:flex}._Bh55G_shell article[class*=bodyCard][data-active]{border-color:var(--mn-line);box-shadow:inset 3px 0 0 color-mix(in srgb, var(--mn-provider-color) 78%, transparent)}._Bh55G_shell ._Bh55G_bodyCardHeader{justify-content:space-between;align-items:flex-start;gap:12px;min-width:0;display:flex}._Bh55G_shell ._Bh55G_bodyDirectoryActions{flex:none;align-items:center;gap:8px;display:flex}._Bh55G_shell ._Bh55G_bodyDirectoryActions>strong{color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 8%, transparent);white-space:nowrap;border-radius:999px;padding:5px 8px;font-size:11px;font-weight:600}._Bh55G_shell ._Bh55G_bodyCardIdentity{flex:1;align-items:flex-start;gap:8px;min-width:0;display:flex}._Bh55G_shell ._Bh55G_bodyCardIdentity>[class*=bodySignal]{flex:none;width:6px;height:6px;margin-top:7px}._Bh55G_shell article[class*=bodyCard][data-reconnecting] ._Bh55G_bodyCardIdentity>[class*=bodySignal]{width:6px;height:6px}._Bh55G_shell ._Bh55G_bodyCardIdentity>div{flex:1;gap:2px;min-width:0;display:grid}._Bh55G_shell ._Bh55G_bodyCardIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;line-height:20px;overflow:hidden}._Bh55G_shell ._Bh55G_bodyCardMeta{align-items:center;gap:8px;min-width:0;display:flex}._Bh55G_shell ._Bh55G_bodyCardMeta code{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}._Bh55G_shell ._Bh55G_bodyCardMeta [class*=bodyHealth]{letter-spacing:0;flex:none;font-size:11px}._Bh55G_shell ._Bh55G_bodyCardHeader>[class*=bodySwitch]{flex:none;min-height:24px}._Bh55G_shell article[class*=bodyCard]>p{-webkit-line-clamp:4;-webkit-box-orient:vertical;min-height:6.2em;max-height:6.2em;margin:12px 0;line-height:1.55;display:-webkit-box;overflow:hidden}._Bh55G_shell ._Bh55G_bodyCardFooter{white-space:nowrap;grid-template-columns:minmax(0,1fr) max-content;align-items:center;gap:10px;min-width:0;margin-top:auto;padding-top:9px;display:grid}._Bh55G_shell ._Bh55G_bodyCardStats{flex-wrap:nowrap;align-items:center;gap:10px;min-width:0;display:flex;overflow:hidden}._Bh55G_shell ._Bh55G_bodyCardFooter [class*=bodyCardActions]{flex-wrap:nowrap;flex:none;align-items:center;gap:6px;display:flex}._Bh55G_shell [class*=cardActions]{gap:6px}._Bh55G_shell ._Bh55G_inspectorGlyph{border:1px solid var(--dsw-alias-border-l1);width:44px;height:44px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-1);font:20px/1 var(--mn-code);opacity:1;border-radius:10px;place-items:center;margin-bottom:10px;display:grid}@media (width<=760px){._Bh55G_shell ._Bh55G_memoryNavigation{padding-inline:12px}._Bh55G_shell ._Bh55G_memoryTabs button{padding-inline:10px}}@media (prefers-reduced-motion:reduce){._Bh55G_shell [class*=inspectorEye],._Bh55G_shell [class*=inspectorHeading] button{transition:none}}";
|
|
857
|
+
const id = "dsh-mnemon-source-memory-spaces/presentation/sidebar.module.css";
|
|
858
|
+
if (typeof document !== "undefined") {
|
|
859
|
+
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(id) + "]");
|
|
860
|
+
if (!tag) {
|
|
861
|
+
tag = document.createElement("style");
|
|
862
|
+
tag.dataset.pluginCss = id;
|
|
863
|
+
document.head.appendChild(tag);
|
|
864
|
+
}
|
|
865
|
+
if (tag.textContent !== css$1) tag.textContent = css$1;
|
|
866
|
+
}
|
|
867
|
+
var sidebar_module_css_default = {
|
|
868
|
+
"bodyCardFooter": "_Bh55G_bodyCardFooter",
|
|
869
|
+
"bodyCardHeader": "_Bh55G_bodyCardHeader",
|
|
870
|
+
"bodyCardIdentity": "_Bh55G_bodyCardIdentity",
|
|
871
|
+
"bodyCardMeta": "_Bh55G_bodyCardMeta",
|
|
872
|
+
"bodyCardStats": "_Bh55G_bodyCardStats",
|
|
873
|
+
"bodyDirectoryActions": "_Bh55G_bodyDirectoryActions",
|
|
874
|
+
"inspectorGlyph": "_Bh55G_inspectorGlyph",
|
|
875
|
+
"memoryNavigation": "_Bh55G_memoryNavigation",
|
|
876
|
+
"memoryTabs": "_Bh55G_memoryTabs",
|
|
877
|
+
"memoryWorkspace": "_Bh55G_memoryWorkspace",
|
|
878
|
+
"memoryWriteButton": "_Bh55G_memoryWriteButton",
|
|
879
|
+
"modal": "_Bh55G_modal",
|
|
880
|
+
"shell": "_Bh55G_shell"
|
|
881
|
+
};
|
|
882
|
+
//#endregion
|
|
883
|
+
//#region src/client/presentation.ts
|
|
884
|
+
const css = {
|
|
885
|
+
...dsh_mnemon_client.memoryPageStyles,
|
|
886
|
+
...page_module_css_default
|
|
887
|
+
};
|
|
888
|
+
const sidebarCss = {
|
|
889
|
+
...dsh_mnemon_client.memorySidebarStyles,
|
|
890
|
+
...sidebar_module_css_default
|
|
891
|
+
};
|
|
892
|
+
function useT() {
|
|
893
|
+
const fallback = (0, dsh_mnemon_client.useT)();
|
|
894
|
+
const locale = (0, dsh_mnemon_client.useLocale)();
|
|
895
|
+
return (0, react.useMemo)(() => (key, params) => {
|
|
896
|
+
const dictionary = locale.startsWith("en") ? en : zh;
|
|
897
|
+
if (!Object.hasOwn(dictionary, key)) return fallback(key, params);
|
|
898
|
+
const text = dictionary[key];
|
|
899
|
+
return params === void 0 ? text : text.replace(/\{(\w+)\}/g, (match, name) => name in params ? String(params[name]) : match);
|
|
900
|
+
}, [locale, fallback]);
|
|
901
|
+
}
|
|
902
|
+
//#endregion
|
|
10
903
|
//#region src/contracts.ts
|
|
11
904
|
const CATEGORIES = [
|
|
12
905
|
"preference",
|
|
@@ -106,19 +999,19 @@ window.__ModuleLoader__.load({
|
|
|
106
999
|
}
|
|
107
1000
|
/** Shared memory-level Provider form used by manual creation, editing, and distillation policy. */
|
|
108
1001
|
function ProviderMemoryFields(props) {
|
|
109
|
-
const t =
|
|
1002
|
+
const t = useT();
|
|
110
1003
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
111
|
-
className:
|
|
1004
|
+
className: css.providerFields,
|
|
112
1005
|
"data-provider": props.provider.id,
|
|
113
1006
|
children: [
|
|
114
1007
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
115
|
-
className:
|
|
1008
|
+
className: css.providerFieldHeading,
|
|
116
1009
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
117
|
-
className:
|
|
1010
|
+
className: css.providerFieldIdentity,
|
|
118
1011
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderIcon, {
|
|
119
1012
|
providerId: props.provider.id,
|
|
120
1013
|
icon: props.provider.icon,
|
|
121
|
-
className:
|
|
1014
|
+
className: css.providerFieldIcon
|
|
122
1015
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: props.provider.label }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: providerSummary(t, props.provider) })] })]
|
|
123
1016
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
124
1017
|
props.provider.kind === "local" ? t("overview.providerKindLocal") : t("overview.providerKindRemote"),
|
|
@@ -127,7 +1020,7 @@ window.__ModuleLoader__.load({
|
|
|
127
1020
|
] })]
|
|
128
1021
|
}),
|
|
129
1022
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
130
|
-
className:
|
|
1023
|
+
className: css.providerAdvancedGrid,
|
|
131
1024
|
children: memoryProviderFields(props.provider).map((field) => {
|
|
132
1025
|
const label = providerFieldLabel(t, field);
|
|
133
1026
|
const value = props.connection[field.key] ?? "";
|
|
@@ -163,9 +1056,9 @@ window.__ModuleLoader__.load({
|
|
|
163
1056
|
onChange: (event) => props.onChange(field.key, event.target.value)
|
|
164
1057
|
});
|
|
165
1058
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
166
|
-
className:
|
|
1059
|
+
className: css.providerFieldControl,
|
|
167
1060
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [label, input] }), props.body !== void 0 && field.input === "secret" && savedSecret && props.onClearSecretsChange !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
168
|
-
className:
|
|
1061
|
+
className: css.providerSecretClear,
|
|
169
1062
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
170
1063
|
type: "checkbox",
|
|
171
1064
|
checked: clearingSecret,
|
|
@@ -176,7 +1069,7 @@ window.__ModuleLoader__.load({
|
|
|
176
1069
|
})
|
|
177
1070
|
}),
|
|
178
1071
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("small", {
|
|
179
|
-
className:
|
|
1072
|
+
className: css.providerWriteHint,
|
|
180
1073
|
children: [
|
|
181
1074
|
props.provider.capabilities.writeMode === "exact" ? t("overview.providerWriteExact") : t("overview.providerWriteAsync"),
|
|
182
1075
|
" · ",
|
|
@@ -203,24 +1096,24 @@ window.__ModuleLoader__.load({
|
|
|
203
1096
|
function MemoryProviderBadge(props) {
|
|
204
1097
|
const label = providerDisplayLabel(props.providerId, props.label);
|
|
205
1098
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
206
|
-
className:
|
|
1099
|
+
className: css.providerBadge,
|
|
207
1100
|
"data-provider": props.providerId,
|
|
208
1101
|
title: label,
|
|
209
1102
|
children: label
|
|
210
1103
|
});
|
|
211
1104
|
}
|
|
212
1105
|
function ReadSourcePanel(props) {
|
|
213
|
-
const t =
|
|
1106
|
+
const t = useT();
|
|
214
1107
|
if (props.sources.length === 0) return null;
|
|
215
1108
|
const content = (source) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
216
1109
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
217
|
-
className:
|
|
1110
|
+
className: css.readSourceSignal,
|
|
218
1111
|
"aria-hidden": "true"
|
|
219
1112
|
}),
|
|
220
1113
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
221
|
-
className:
|
|
1114
|
+
className: css.readSourceIdentity,
|
|
222
1115
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: source.memoryBodyName }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
223
|
-
className:
|
|
1116
|
+
className: css.readSourceMeta,
|
|
224
1117
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemoryProviderBadge, {
|
|
225
1118
|
providerId: source.providerId,
|
|
226
1119
|
label: source.providerLabel
|
|
@@ -228,12 +1121,12 @@ window.__ModuleLoader__.load({
|
|
|
228
1121
|
})]
|
|
229
1122
|
}),
|
|
230
1123
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
231
|
-
className:
|
|
1124
|
+
className: css.readSourceState,
|
|
232
1125
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("em", { children: t(`readSources.mode.${source.mode}`) }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("small", { children: [t(`readSources.status.${source.status}`, { count: source.itemCount }), source.edgeCount === void 0 || source.edgeCount === 0 ? "" : ` · ${t("readSources.edges", { count: source.edgeCount })}`] })]
|
|
233
1126
|
})
|
|
234
1127
|
] });
|
|
235
1128
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
236
|
-
className:
|
|
1129
|
+
className: css.readSources,
|
|
237
1130
|
"aria-label": props.title,
|
|
238
1131
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: props.title }), props.hint !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: props.hint })] }), props.onSelect !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
239
1132
|
type: "button",
|
|
@@ -242,7 +1135,7 @@ window.__ModuleLoader__.load({
|
|
|
242
1135
|
onClick: () => props.onSelect?.(void 0),
|
|
243
1136
|
children: t("readSources.all")
|
|
244
1137
|
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: props.sources.map((source) => props.onSelect === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("article", {
|
|
245
|
-
className:
|
|
1138
|
+
className: css.readSourceCard,
|
|
246
1139
|
"data-provider": source.providerId,
|
|
247
1140
|
"data-mode": source.mode,
|
|
248
1141
|
"data-status": source.status,
|
|
@@ -250,7 +1143,7 @@ window.__ModuleLoader__.load({
|
|
|
250
1143
|
children: content(source)
|
|
251
1144
|
}, source.memoryBodyId) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
252
1145
|
type: "button",
|
|
253
|
-
className:
|
|
1146
|
+
className: css.readSourceCard,
|
|
254
1147
|
"data-provider": source.providerId,
|
|
255
1148
|
"data-mode": source.mode,
|
|
256
1149
|
"data-status": source.status,
|
|
@@ -264,7 +1157,7 @@ window.__ModuleLoader__.load({
|
|
|
264
1157
|
}
|
|
265
1158
|
/** Full-text popup for a selected graph node whose inspector preview is clamped. */
|
|
266
1159
|
function ContentPreview(props) {
|
|
267
|
-
const t =
|
|
1160
|
+
const t = useT();
|
|
268
1161
|
const meta = [
|
|
269
1162
|
props.kind,
|
|
270
1163
|
props.node.id,
|
|
@@ -275,18 +1168,18 @@ window.__ModuleLoader__.load({
|
|
|
275
1168
|
description: meta,
|
|
276
1169
|
onClose: props.onClose,
|
|
277
1170
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
278
|
-
className:
|
|
1171
|
+
className: css.previewContent,
|
|
279
1172
|
children: props.node.content
|
|
280
1173
|
})
|
|
281
1174
|
});
|
|
282
1175
|
}
|
|
283
1176
|
function InsightCard(props) {
|
|
284
|
-
const t =
|
|
1177
|
+
const t = useT();
|
|
285
1178
|
const [confirming, setConfirming] = (0, react.useState)(false);
|
|
286
1179
|
const [forgetting, setForgetting] = (0, react.useState)(false);
|
|
287
1180
|
const { insight } = props;
|
|
288
|
-
const neutralActionClass = (0, dsh_mnemon_client.appearanceClass)(
|
|
289
|
-
const forgetActionClass = (0, dsh_mnemon_client.appearanceClass)(
|
|
1181
|
+
const neutralActionClass = (0, dsh_mnemon_client.appearanceClass)(css.ghostButton, sidebarCss.itemActionButton);
|
|
1182
|
+
const forgetActionClass = (0, dsh_mnemon_client.appearanceClass)(css.dangerButton, (0, dsh_mnemon_client.appearanceClass)(sidebarCss.itemActionButton, sidebarCss.itemDangerAction));
|
|
290
1183
|
const providerLabel = insight.memoryProviderLabel ?? insight.memoryProviderId;
|
|
291
1184
|
const supportsRelated = insight.memoryCapabilities?.related === true;
|
|
292
1185
|
const supportsForget = insight.memoryCapabilities?.forget === true;
|
|
@@ -308,36 +1201,36 @@ window.__ModuleLoader__.load({
|
|
|
308
1201
|
}
|
|
309
1202
|
};
|
|
310
1203
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
|
|
311
|
-
className:
|
|
1204
|
+
className: css.insightCard,
|
|
312
1205
|
children: [
|
|
313
1206
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
314
|
-
className:
|
|
1207
|
+
className: css.cardTop,
|
|
315
1208
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
316
|
-
className:
|
|
1209
|
+
className: css.badges,
|
|
317
1210
|
children: meta.map((entry) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
318
|
-
className:
|
|
1211
|
+
className: css.badge,
|
|
319
1212
|
children: entry
|
|
320
1213
|
}, entry))
|
|
321
1214
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
|
|
322
|
-
className:
|
|
1215
|
+
className: css.id,
|
|
323
1216
|
title: insight.id,
|
|
324
1217
|
children: insight.id.slice(0, 8)
|
|
325
1218
|
})]
|
|
326
1219
|
}),
|
|
327
1220
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
328
|
-
className:
|
|
1221
|
+
className: css.content,
|
|
329
1222
|
children: insight.content
|
|
330
1223
|
}),
|
|
331
1224
|
(insight.tags?.length ?? 0) > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
332
|
-
className:
|
|
1225
|
+
className: css.tags,
|
|
333
1226
|
children: insight.tags.map((tag) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: ["#", tag] }, tag))
|
|
334
1227
|
}),
|
|
335
1228
|
(insight.entities?.length ?? 0) > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
336
|
-
className:
|
|
1229
|
+
className: css.entities,
|
|
337
1230
|
children: insight.entities.map((entity) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: entity }, entity))
|
|
338
1231
|
}),
|
|
339
1232
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
340
|
-
className:
|
|
1233
|
+
className: css.cardActions,
|
|
341
1234
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
342
1235
|
props.onRelated !== void 0 && supportsRelated && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
343
1236
|
type: "button",
|
|
@@ -372,29 +1265,29 @@ window.__ModuleLoader__.load({
|
|
|
372
1265
|
busy: forgetting,
|
|
373
1266
|
onClose: () => setConfirming(false),
|
|
374
1267
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
375
|
-
className:
|
|
1268
|
+
className: css.modalFooterActions,
|
|
376
1269
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
377
1270
|
type: "button",
|
|
378
1271
|
"data-dialog-close": true,
|
|
379
1272
|
"data-autofocus": true,
|
|
380
|
-
className:
|
|
1273
|
+
className: css.ghostButton,
|
|
381
1274
|
disabled: forgetting,
|
|
382
1275
|
onClick: () => setConfirming(false),
|
|
383
1276
|
children: t("common.cancel")
|
|
384
1277
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
385
1278
|
type: "button",
|
|
386
|
-
className:
|
|
1279
|
+
className: css.dangerSolidButton,
|
|
387
1280
|
disabled: forgetting,
|
|
388
1281
|
onClick: () => void forget(),
|
|
389
1282
|
children: forgetting ? t("card.processing") : t("card.confirmForget")
|
|
390
1283
|
})]
|
|
391
1284
|
}),
|
|
392
1285
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
393
|
-
className:
|
|
1286
|
+
className: css.bodyDeleteConfirm,
|
|
394
1287
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
395
|
-
className:
|
|
1288
|
+
className: css.bodyDeleteSummary,
|
|
396
1289
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
397
|
-
className:
|
|
1290
|
+
className: css.bodyDeleteContent,
|
|
398
1291
|
children: insight.content
|
|
399
1292
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: meta.join(" · ") })]
|
|
400
1293
|
})
|
|
@@ -688,7 +1581,7 @@ window.__ModuleLoader__.load({
|
|
|
688
1581
|
});
|
|
689
1582
|
}
|
|
690
1583
|
function MemoryGraph(props) {
|
|
691
|
-
const t =
|
|
1584
|
+
const t = useT();
|
|
692
1585
|
const visibleNodes = (0, react.useMemo)(() => {
|
|
693
1586
|
const spaces = props.graph.nodes.filter((node) => graphNodeKind(node) === "space");
|
|
694
1587
|
const entities = props.graph.nodes.filter((node) => graphNodeKind(node) === "entity").slice(0, 20);
|
|
@@ -833,7 +1726,7 @@ window.__ModuleLoader__.load({
|
|
|
833
1726
|
};
|
|
834
1727
|
const layoutLabel = t(layoutMode === "natural" ? "graph.layoutNatural" : layoutMode === "uniform" ? "graph.layoutUniform" : "graph.layoutCustom");
|
|
835
1728
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
836
|
-
className:
|
|
1729
|
+
className: css.graphCanvasControls,
|
|
837
1730
|
role: "toolbar",
|
|
838
1731
|
"aria-label": t("graph.layoutAria"),
|
|
839
1732
|
children: [
|
|
@@ -856,7 +1749,7 @@ window.__ModuleLoader__.load({
|
|
|
856
1749
|
})
|
|
857
1750
|
]
|
|
858
1751
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
859
|
-
className:
|
|
1752
|
+
className: css.graphSvg,
|
|
860
1753
|
viewBox: `0 0 ${GRAPH_WIDTH} ${GRAPH_HEIGHT}`,
|
|
861
1754
|
role: "img",
|
|
862
1755
|
"data-layout": layoutMode,
|
|
@@ -873,7 +1766,7 @@ window.__ModuleLoader__.load({
|
|
|
873
1766
|
patternUnits: "userSpaceOnUse",
|
|
874
1767
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
875
1768
|
d: "M 26 0 L 0 0 0 26",
|
|
876
|
-
className:
|
|
1769
|
+
className: css.graphGridLine,
|
|
877
1770
|
fill: "none"
|
|
878
1771
|
})
|
|
879
1772
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("filter", {
|
|
@@ -890,7 +1783,7 @@ window.__ModuleLoader__.load({
|
|
|
890
1783
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
891
1784
|
width: GRAPH_WIDTH,
|
|
892
1785
|
height: GRAPH_HEIGHT,
|
|
893
|
-
className:
|
|
1786
|
+
className: css.graphBackdrop
|
|
894
1787
|
}),
|
|
895
1788
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
896
1789
|
width: GRAPH_WIDTH,
|
|
@@ -914,7 +1807,7 @@ window.__ModuleLoader__.load({
|
|
|
914
1807
|
const controlY = (source.y + target.y) / 2 + dx / distance * offset * direction;
|
|
915
1808
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
916
1809
|
d: `M ${source.x} ${source.y} Q ${controlX} ${controlY} ${target.x} ${target.y}`,
|
|
917
|
-
className:
|
|
1810
|
+
className: css.graphEdge,
|
|
918
1811
|
"data-edge": edge.type ?? "temporal",
|
|
919
1812
|
"data-source-id": edge.sourceId,
|
|
920
1813
|
"data-target-id": edge.targetId,
|
|
@@ -931,7 +1824,7 @@ window.__ModuleLoader__.load({
|
|
|
931
1824
|
const selected = props.selectedId === nodeKey;
|
|
932
1825
|
const showLabel = selected || visibleNodes.length < 22 || index % 3 === 0;
|
|
933
1826
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("g", {
|
|
934
|
-
className:
|
|
1827
|
+
className: css.graphNode,
|
|
935
1828
|
"data-node-id": nodeKey,
|
|
936
1829
|
"data-provider": node.memoryProviderId,
|
|
937
1830
|
"data-category": node.category ?? "general",
|
|
@@ -971,37 +1864,37 @@ window.__ModuleLoader__.load({
|
|
|
971
1864
|
width: selected ? 40 : 34,
|
|
972
1865
|
height: selected ? 30 : 26,
|
|
973
1866
|
rx: "9",
|
|
974
|
-
className:
|
|
1867
|
+
className: css.nodeHalo,
|
|
975
1868
|
filter: selected ? "url(#mnemon-glow)" : void 0
|
|
976
1869
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
977
1870
|
r: selected ? 6 : 5,
|
|
978
|
-
className:
|
|
1871
|
+
className: css.nodeCore
|
|
979
1872
|
})] }) : graphNodeKind(node) === "entity" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
980
1873
|
d: selected ? "M 0 -18 L 18 0 L 0 18 L -18 0 Z" : "M 0 -14 L 14 0 L 0 14 L -14 0 Z",
|
|
981
|
-
className:
|
|
1874
|
+
className: css.nodeHalo,
|
|
982
1875
|
filter: selected ? "url(#mnemon-glow)" : void 0
|
|
983
1876
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
984
1877
|
r: selected ? 5 : 4,
|
|
985
|
-
className:
|
|
1878
|
+
className: css.nodeCore
|
|
986
1879
|
})] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
987
1880
|
r: selected ? 17 : visibleNodes.length <= 12 ? 14 : 11,
|
|
988
|
-
className:
|
|
1881
|
+
className: css.nodeHalo,
|
|
989
1882
|
filter: selected ? "url(#mnemon-glow)" : void 0
|
|
990
1883
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
991
1884
|
r: selected ? 7 : visibleNodes.length <= 12 ? 6 : 4.5,
|
|
992
|
-
className:
|
|
1885
|
+
className: css.nodeCore
|
|
993
1886
|
})] }),
|
|
994
1887
|
(selected || visibleNodes.length <= 12) && graphNodeKind(node) === "memory" && node.memoryBodyName !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("text", {
|
|
995
1888
|
x: "0",
|
|
996
1889
|
y: "-18",
|
|
997
1890
|
textAnchor: "middle",
|
|
998
|
-
className:
|
|
1891
|
+
className: css.nodeBodyLabel,
|
|
999
1892
|
children: (0, dsh_mnemon_client.short)(node.memoryBodyName, 12)
|
|
1000
1893
|
}),
|
|
1001
1894
|
showLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("text", {
|
|
1002
1895
|
x: visibleNodes.length <= 12 ? 19 : 15,
|
|
1003
1896
|
y: "4",
|
|
1004
|
-
className:
|
|
1897
|
+
className: css.nodeLabel,
|
|
1005
1898
|
children: (0, dsh_mnemon_client.short)(node.content.replace(/\s+/gu, " "), selected ? 34 : visibleNodes.length <= 12 ? 26 : 19)
|
|
1006
1899
|
})
|
|
1007
1900
|
]
|
|
@@ -1011,7 +1904,7 @@ window.__ModuleLoader__.load({
|
|
|
1011
1904
|
})] });
|
|
1012
1905
|
}
|
|
1013
1906
|
function OverviewPage(props) {
|
|
1014
|
-
const t =
|
|
1907
|
+
const t = useT();
|
|
1015
1908
|
const locale = (0, dsh_mnemon_client.useLocale)();
|
|
1016
1909
|
const bodyCreateFormId = (0, react.useId)();
|
|
1017
1910
|
const bodyEditFormId = (0, react.useId)();
|
|
@@ -1349,7 +2242,7 @@ window.__ModuleLoader__.load({
|
|
|
1349
2242
|
}
|
|
1350
2243
|
}));
|
|
1351
2244
|
const placementReceipt = (body) => body.placement === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1352
|
-
className:
|
|
2245
|
+
className: css.placementReceipt,
|
|
1353
2246
|
title: body.placement.reason,
|
|
1354
2247
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1355
2248
|
"aria-hidden": "true",
|
|
@@ -1362,7 +2255,7 @@ window.__ModuleLoader__.load({
|
|
|
1362
2255
|
});
|
|
1363
2256
|
const bodyEditForm = (body) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
1364
2257
|
id: bodyEditFormId,
|
|
1365
|
-
className:
|
|
2258
|
+
className: css.bodyEdit,
|
|
1366
2259
|
onSubmit: (event) => void saveEdit(event, body),
|
|
1367
2260
|
children: [
|
|
1368
2261
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("overview.editName"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
@@ -1397,15 +2290,15 @@ window.__ModuleLoader__.load({
|
|
|
1397
2290
|
});
|
|
1398
2291
|
const bodyCreateForm = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
1399
2292
|
id: bodyCreateFormId,
|
|
1400
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
2293
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.bodyEdit, css.bodyCreateForm),
|
|
1401
2294
|
onSubmit: (event) => void create(event),
|
|
1402
2295
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1403
|
-
className:
|
|
2296
|
+
className: css.createSection,
|
|
1404
2297
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1405
|
-
className:
|
|
2298
|
+
className: css.createSectionHeading,
|
|
1406
2299
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "01" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("overview.createIdentityTitle") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("overview.createIdentityHint") })] })]
|
|
1407
2300
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1408
|
-
className:
|
|
2301
|
+
className: css.createIdentityGrid,
|
|
1409
2302
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("overview.createName"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
1410
2303
|
"data-autofocus": true,
|
|
1411
2304
|
"aria-label": t("overview.createName"),
|
|
@@ -1425,14 +2318,14 @@ window.__ModuleLoader__.load({
|
|
|
1425
2318
|
})] })]
|
|
1426
2319
|
})]
|
|
1427
2320
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1428
|
-
className:
|
|
2321
|
+
className: css.createSection,
|
|
1429
2322
|
children: [
|
|
1430
2323
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1431
|
-
className:
|
|
2324
|
+
className: css.createSectionHeading,
|
|
1432
2325
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "02" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("overview.createPlacementTitle") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("overview.createPlacementHint") })] })]
|
|
1433
2326
|
}),
|
|
1434
2327
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
|
|
1435
|
-
className:
|
|
2328
|
+
className: css.providerChoice,
|
|
1436
2329
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: t("overview.providerLabel") }), providers.map((provider) => {
|
|
1437
2330
|
const serviceMissing = provider.origin !== "native" && provider.serviceConfigured === false;
|
|
1438
2331
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
@@ -1451,11 +2344,11 @@ window.__ModuleLoader__.load({
|
|
|
1451
2344
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderIcon, {
|
|
1452
2345
|
providerId: provider.id,
|
|
1453
2346
|
icon: provider.icon,
|
|
1454
|
-
className:
|
|
2347
|
+
className: css.providerChoiceIcon
|
|
1455
2348
|
}),
|
|
1456
2349
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("strong", { children: [provider.label, provider.origin === "native" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("em", { children: t("overview.nativeOfficial") })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: serviceMissing ? t("overview.providerServiceRequired") : `${t(`overview.workspaceBinding.${provider.workspaceBinding}`)} · ${providerSummary(t, provider)}` })] }),
|
|
1457
2350
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
1458
|
-
className:
|
|
2351
|
+
className: css.choiceControl,
|
|
1459
2352
|
"data-kind": "radio",
|
|
1460
2353
|
"aria-hidden": "true"
|
|
1461
2354
|
})
|
|
@@ -1473,22 +2366,22 @@ window.__ModuleLoader__.load({
|
|
|
1473
2366
|
});
|
|
1474
2367
|
const bodyToggle = (body) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
1475
2368
|
type: "button",
|
|
1476
|
-
className:
|
|
2369
|
+
className: css.bodySwitch,
|
|
1477
2370
|
role: "switch",
|
|
1478
2371
|
"aria-checked": body.active,
|
|
1479
2372
|
"aria-label": t("overview.toggleAria", { name: body.name }),
|
|
1480
2373
|
disabled: !props.activationEnabled || changing === body.id || deletingBody === body.id,
|
|
1481
2374
|
onClick: () => void toggle(body),
|
|
1482
2375
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1483
|
-
className:
|
|
2376
|
+
className: css.bodySwitchTrack,
|
|
1484
2377
|
"aria-hidden": "true",
|
|
1485
2378
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {})
|
|
1486
2379
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: changing === body.id ? t("overview.toggling") : body.active ? t("common.active") : t("common.inactive") })]
|
|
1487
2380
|
});
|
|
1488
|
-
const bodyEditActionClass = (0, dsh_mnemon_client.appearanceClass)(
|
|
1489
|
-
const bodyDeleteActionClass = (0, dsh_mnemon_client.appearanceClass)(
|
|
2381
|
+
const bodyEditActionClass = (0, dsh_mnemon_client.appearanceClass)(css.ghostButton, (0, dsh_mnemon_client.appearanceClass)(sidebarCss.itemActionButton, sidebarCss.itemEditAction));
|
|
2382
|
+
const bodyDeleteActionClass = (0, dsh_mnemon_client.appearanceClass)(css.dangerButton, (0, dsh_mnemon_client.appearanceClass)(sidebarCss.itemActionButton, sidebarCss.itemDangerAction));
|
|
1490
2383
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1491
|
-
className:
|
|
2384
|
+
className: css.page,
|
|
1492
2385
|
children: [
|
|
1493
2386
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.PageHeader, {
|
|
1494
2387
|
title: t("nav.overview"),
|
|
@@ -1497,31 +2390,31 @@ window.__ModuleLoader__.load({
|
|
|
1497
2390
|
...loading ? { loadingLabel: catalogLoading ? t("overview.directoryLoading") : graphLoading ? t("overview.snapshotLoading") : t("overview.healthLoading") } : {},
|
|
1498
2391
|
action: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1499
2392
|
type: "button",
|
|
1500
|
-
className:
|
|
2393
|
+
className: css.secondaryButton,
|
|
1501
2394
|
disabled: loading,
|
|
1502
2395
|
onClick: () => void load(),
|
|
1503
2396
|
children: loading ? t("overview.syncing") : t("overview.syncNow")
|
|
1504
2397
|
})
|
|
1505
2398
|
}),
|
|
1506
2399
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1507
|
-
className:
|
|
2400
|
+
className: css.inlineError,
|
|
1508
2401
|
role: "alert",
|
|
1509
2402
|
children: error
|
|
1510
2403
|
}),
|
|
1511
2404
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1512
|
-
className:
|
|
2405
|
+
className: css.bodyDirectory,
|
|
1513
2406
|
"aria-label": t("overview.directory"),
|
|
1514
2407
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1515
|
-
className:
|
|
2408
|
+
className: css.bodyDirectoryHeader,
|
|
1516
2409
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
|
|
1517
2410
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: t("overview.directory") }),
|
|
1518
2411
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("overview.directory.description") }),
|
|
1519
2412
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
|
|
1520
|
-
className:
|
|
2413
|
+
className: css.bodyDirectoryPath,
|
|
1521
2414
|
children: catalogUnavailable ? t("overview.directory.unsynced") : catalog?.directory || props.fallbackDirectory || t("overview.directory.waiting")
|
|
1522
2415
|
})
|
|
1523
2416
|
] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1524
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
2417
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.bodyDirectoryControls, sidebarCss.bodyDirectoryActions),
|
|
1525
2418
|
children: [
|
|
1526
2419
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: catalogUnavailable ? t("overview.directory.unsyncedBadge") : `${catalog?.activeCount ?? "—"} / ${catalog?.total ?? "—"} ${t("common.active")}` }),
|
|
1527
2420
|
props.writeEnabled && !catalogUnavailable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
@@ -1545,9 +2438,9 @@ window.__ModuleLoader__.load({
|
|
|
1545
2438
|
]
|
|
1546
2439
|
})]
|
|
1547
2440
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1548
|
-
className:
|
|
2441
|
+
className: css.bodyGrid,
|
|
1549
2442
|
children: [catalog?.items.map((body) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("article", {
|
|
1550
|
-
className:
|
|
2443
|
+
className: css.bodyCard,
|
|
1551
2444
|
"data-provider": body.provider.id,
|
|
1552
2445
|
"data-active": body.active || void 0,
|
|
1553
2446
|
"data-healthy": !body.statusLoading && body.healthy || void 0,
|
|
@@ -1570,11 +2463,11 @@ window.__ModuleLoader__.load({
|
|
|
1570
2463
|
},
|
|
1571
2464
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
1572
2465
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1573
|
-
className:
|
|
2466
|
+
className: sidebarCss.bodyCardHeader,
|
|
1574
2467
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1575
|
-
className:
|
|
1576
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
1577
|
-
className:
|
|
2468
|
+
className: sidebarCss.bodyCardIdentity,
|
|
2469
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: css.bodySignal }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: body.name }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2470
|
+
className: sidebarCss.bodyCardMeta,
|
|
1578
2471
|
children: [
|
|
1579
2472
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: body.id }),
|
|
1580
2473
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemoryProviderBadge, {
|
|
@@ -1582,11 +2475,11 @@ window.__ModuleLoader__.load({
|
|
|
1582
2475
|
label: body.provider.label
|
|
1583
2476
|
}),
|
|
1584
2477
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
1585
|
-
className:
|
|
2478
|
+
className: css.bodyHealth,
|
|
1586
2479
|
children: reconnectingBody === body.id ? t("overview.reconnecting") : body.statusLoading ? t("overview.storageChecking") : body.healthy ? t("overview.storageHealthy") : t("overview.storageUnhealthy")
|
|
1587
2480
|
}),
|
|
1588
2481
|
body.mnemonDefault && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
1589
|
-
className:
|
|
2482
|
+
className: css.mnemonDefaultBadge,
|
|
1590
2483
|
children: t("overview.mnemonDefault")
|
|
1591
2484
|
})
|
|
1592
2485
|
]
|
|
@@ -1599,36 +2492,36 @@ window.__ModuleLoader__.load({
|
|
|
1599
2492
|
}),
|
|
1600
2493
|
placementReceipt(body),
|
|
1601
2494
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("footer", {
|
|
1602
|
-
className:
|
|
2495
|
+
className: sidebarCss.bodyCardFooter,
|
|
1603
2496
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1604
|
-
className:
|
|
2497
|
+
className: sidebarCss.bodyCardStats,
|
|
1605
2498
|
children: !nativeBodyProvider(body.provider) ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1606
|
-
className:
|
|
2499
|
+
className: css.bodyFooterBlock,
|
|
1607
2500
|
title: t(body.provider.kind === "remote" ? "overview.providerRemote" : "overview.providerLocal"),
|
|
1608
2501
|
children: t(body.provider.kind === "remote" ? "overview.providerRemote" : "overview.providerLocal")
|
|
1609
2502
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1610
|
-
className: `${
|
|
2503
|
+
className: `${css.bodyFooterBlock} ${css.bodyFooterGrow}`,
|
|
1611
2504
|
title: body.provider.location || body.provider.label,
|
|
1612
2505
|
children: body.provider.location || body.provider.label
|
|
1613
2506
|
})] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
1614
2507
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1615
|
-
className:
|
|
2508
|
+
className: css.bodyFooterBlock,
|
|
1616
2509
|
title: t("common.memories", { count: body.stats?.totalInsights ?? 0 }),
|
|
1617
2510
|
children: t("common.memories", { count: body.stats?.totalInsights ?? 0 })
|
|
1618
2511
|
}),
|
|
1619
2512
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1620
|
-
className:
|
|
2513
|
+
className: css.bodyFooterBlock,
|
|
1621
2514
|
title: t("common.edges", { count: body.stats?.edgeCount ?? 0 }),
|
|
1622
2515
|
children: t("common.edges", { count: body.stats?.edgeCount ?? 0 })
|
|
1623
2516
|
}),
|
|
1624
2517
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1625
|
-
className:
|
|
2518
|
+
className: css.bodyFooterBlock,
|
|
1626
2519
|
title: (0, dsh_mnemon_client.humanBytes)(body.stats?.dbSizeBytes ?? 0),
|
|
1627
2520
|
children: (0, dsh_mnemon_client.humanBytes)(body.stats?.dbSizeBytes ?? 0)
|
|
1628
2521
|
})
|
|
1629
2522
|
] })
|
|
1630
2523
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1631
|
-
className:
|
|
2524
|
+
className: css.bodyCardActions,
|
|
1632
2525
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1633
2526
|
type: "button",
|
|
1634
2527
|
className: bodyEditActionClass,
|
|
@@ -1649,13 +2542,13 @@ window.__ModuleLoader__.load({
|
|
|
1649
2542
|
})
|
|
1650
2543
|
] })
|
|
1651
2544
|
}, body.id)), catalog?.total === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1652
|
-
className:
|
|
2545
|
+
className: css.bodyDirectoryEmpty,
|
|
1653
2546
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "◇" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: catalogUnavailable ? t("overview.unsyncedTitle") : t("overview.emptyTitle") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: catalogUnavailable ? t("overview.unsyncedShort") : t("overview.emptyShort") })] })]
|
|
1654
2547
|
})]
|
|
1655
2548
|
})]
|
|
1656
2549
|
}),
|
|
1657
2550
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1658
|
-
className:
|
|
2551
|
+
className: css.asyncRegion,
|
|
1659
2552
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ReadSourcePanel, {
|
|
1660
2553
|
title: t("overview.snapshotSources"),
|
|
1661
2554
|
hint: t("overview.snapshotSourcesHint"),
|
|
@@ -1669,18 +2562,18 @@ window.__ModuleLoader__.load({
|
|
|
1669
2562
|
wide: true,
|
|
1670
2563
|
onClose: () => setCreatingBodyOpen(false),
|
|
1671
2564
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1672
|
-
className:
|
|
2565
|
+
className: css.modalFooterActions,
|
|
1673
2566
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1674
2567
|
type: "button",
|
|
1675
2568
|
"data-dialog-close": true,
|
|
1676
|
-
className:
|
|
2569
|
+
className: css.ghostButton,
|
|
1677
2570
|
disabled: creating,
|
|
1678
2571
|
onClick: () => setCreatingBodyOpen(false),
|
|
1679
2572
|
children: t("common.cancel")
|
|
1680
2573
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1681
2574
|
type: "submit",
|
|
1682
2575
|
form: bodyCreateFormId,
|
|
1683
|
-
className:
|
|
2576
|
+
className: css.primaryButton,
|
|
1684
2577
|
disabled: creating || bodyName.trim() === "" || bodyDescription.trim() === "" || !providerDraftComplete(selectedProvider, providerDrafts[bodyProviderId]),
|
|
1685
2578
|
children: creating ? t("overview.creating") : t("overview.createAction")
|
|
1686
2579
|
})]
|
|
@@ -1694,20 +2587,20 @@ window.__ModuleLoader__.load({
|
|
|
1694
2587
|
wide: true,
|
|
1695
2588
|
onClose: () => setMetadataOpen(false),
|
|
1696
2589
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1697
|
-
className:
|
|
2590
|
+
className: css.modalFooterNote,
|
|
1698
2591
|
children: t("overview.metadataSafety")
|
|
1699
2592
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1700
|
-
className:
|
|
2593
|
+
className: css.modalFooterActions,
|
|
1701
2594
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1702
2595
|
type: "button",
|
|
1703
2596
|
"data-dialog-close": true,
|
|
1704
|
-
className:
|
|
2597
|
+
className: css.ghostButton,
|
|
1705
2598
|
disabled: metadataBusy,
|
|
1706
2599
|
onClick: () => setMetadataOpen(false),
|
|
1707
2600
|
children: t("common.cancel")
|
|
1708
2601
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1709
2602
|
type: "button",
|
|
1710
|
-
className:
|
|
2603
|
+
className: css.primaryButton,
|
|
1711
2604
|
disabled: !props.agentAvailable || metadataSelection.length === 0,
|
|
1712
2605
|
title: !props.agentAvailable ? t("overview.metadataUnavailable") : void 0,
|
|
1713
2606
|
onClick: maintainMetadata,
|
|
@@ -1715,28 +2608,28 @@ window.__ModuleLoader__.load({
|
|
|
1715
2608
|
})]
|
|
1716
2609
|
})] }),
|
|
1717
2610
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1718
|
-
className:
|
|
2611
|
+
className: css.metadataDialog,
|
|
1719
2612
|
children: [
|
|
1720
2613
|
!props.agentAvailable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1721
|
-
className:
|
|
2614
|
+
className: css.inlineError,
|
|
1722
2615
|
role: "status",
|
|
1723
2616
|
children: t("overview.metadataUnavailable")
|
|
1724
2617
|
}),
|
|
1725
2618
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1726
|
-
className:
|
|
2619
|
+
className: css.metadataToolbar,
|
|
1727
2620
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [t("overview.metadataSelected", { count: metadataSelection.length }), metadataRunningCount > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("em", { children: t("overview.metadataRunningCount", { count: metadataRunningCount }) })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1728
2621
|
type: "button",
|
|
1729
|
-
className:
|
|
2622
|
+
className: css.ghostButton,
|
|
1730
2623
|
disabled: metadataSelectable.length === 0,
|
|
1731
2624
|
onClick: () => setMetadataSelection(metadataAllSelected ? [] : metadataSelectable.map((body) => body.id)),
|
|
1732
2625
|
children: metadataAllSelected ? t("overview.metadataClear") : t("overview.metadataSelectAll")
|
|
1733
2626
|
})]
|
|
1734
2627
|
}),
|
|
1735
2628
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1736
|
-
className:
|
|
2629
|
+
className: css.metadataList,
|
|
1737
2630
|
"aria-live": "polite",
|
|
1738
2631
|
children: [metadataCandidates.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1739
|
-
className:
|
|
2632
|
+
className: css.metadataEmpty,
|
|
1740
2633
|
children: catalogLoading ? t("overview.metadataLoading") : t("overview.metadataEmpty")
|
|
1741
2634
|
}), metadataCandidates.map((body) => {
|
|
1742
2635
|
const selected = metadataSelection.includes(body.id);
|
|
@@ -1755,7 +2648,7 @@ window.__ModuleLoader__.load({
|
|
|
1755
2648
|
onChange: (event) => setMetadataSelection((current) => event.target.checked ? [.../* @__PURE__ */ new Set([...current, body.id])] : current.filter((id) => id !== body.id))
|
|
1756
2649
|
}),
|
|
1757
2650
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
1758
|
-
className:
|
|
2651
|
+
className: css.choiceControl,
|
|
1759
2652
|
"data-kind": "check",
|
|
1760
2653
|
"aria-hidden": "true"
|
|
1761
2654
|
}),
|
|
@@ -1766,7 +2659,7 @@ window.__ModuleLoader__.load({
|
|
|
1766
2659
|
providerId: body.provider.id,
|
|
1767
2660
|
label: body.provider.label
|
|
1768
2661
|
}), task === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: body.id }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
1769
|
-
className:
|
|
2662
|
+
className: css.metadataTaskStatus,
|
|
1770
2663
|
"data-status": task.status,
|
|
1771
2664
|
title: task.error,
|
|
1772
2665
|
children: task.status === "running" ? t("overview.metadataTaskRunning") : task.status === "success" ? t("overview.metadataTaskSuccess") : t("overview.metadataTaskError", { error: task.error ?? t("overview.metadataTaskUnknown") })
|
|
@@ -1785,18 +2678,18 @@ window.__ModuleLoader__.load({
|
|
|
1785
2678
|
busy: savingBody === editingBodyView.id,
|
|
1786
2679
|
onClose: () => setEditingBody(null),
|
|
1787
2680
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1788
|
-
className:
|
|
2681
|
+
className: css.modalFooterActions,
|
|
1789
2682
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1790
2683
|
type: "button",
|
|
1791
2684
|
"data-dialog-close": true,
|
|
1792
|
-
className:
|
|
2685
|
+
className: css.ghostButton,
|
|
1793
2686
|
disabled: savingBody === editingBodyView.id,
|
|
1794
2687
|
onClick: () => setEditingBody(null),
|
|
1795
2688
|
children: t("common.cancel")
|
|
1796
2689
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1797
2690
|
type: "submit",
|
|
1798
2691
|
form: bodyEditFormId,
|
|
1799
|
-
className:
|
|
2692
|
+
className: css.primaryButton,
|
|
1800
2693
|
disabled: savingBody === editingBodyView.id || editName.trim() === "",
|
|
1801
2694
|
children: savingBody === editingBodyView.id ? t("overview.savingBody") : t("overview.saveBody")
|
|
1802
2695
|
})]
|
|
@@ -1809,18 +2702,18 @@ window.__ModuleLoader__.load({
|
|
|
1809
2702
|
busy: deletingBody === deletingBodyView.id,
|
|
1810
2703
|
onClose: () => setConfirmingDeleteBody(null),
|
|
1811
2704
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1812
|
-
className:
|
|
2705
|
+
className: css.modalFooterActions,
|
|
1813
2706
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1814
2707
|
type: "button",
|
|
1815
2708
|
"data-dialog-close": true,
|
|
1816
2709
|
"data-autofocus": true,
|
|
1817
|
-
className:
|
|
2710
|
+
className: css.ghostButton,
|
|
1818
2711
|
disabled: deletingBody === deletingBodyView.id,
|
|
1819
2712
|
onClick: () => setConfirmingDeleteBody(null),
|
|
1820
2713
|
children: t("common.cancel")
|
|
1821
2714
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1822
2715
|
type: "button",
|
|
1823
|
-
className:
|
|
2716
|
+
className: css.dangerSolidButton,
|
|
1824
2717
|
title: canDeleteBody(deletingBodyView) ? void 0 : t("overview.lastStoreDeleteHint"),
|
|
1825
2718
|
disabled: deletingBody === deletingBodyView.id || !canDeleteBody(deletingBodyView),
|
|
1826
2719
|
onClick: () => void deleteBody(deletingBodyView),
|
|
@@ -1828,9 +2721,9 @@ window.__ModuleLoader__.load({
|
|
|
1828
2721
|
})]
|
|
1829
2722
|
}),
|
|
1830
2723
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1831
|
-
className:
|
|
2724
|
+
className: css.bodyDeleteConfirm,
|
|
1832
2725
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t(!nativeBodyProvider(deletingBodyView.provider) ? "overview.disconnectWarning" : "overview.deleteWarning", { provider: deletingBodyView.provider.label }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1833
|
-
className:
|
|
2726
|
+
className: css.bodyDeleteSummary,
|
|
1834
2727
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: deletingBodyView.name }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
1835
2728
|
deletingBodyView.provider.label,
|
|
1836
2729
|
" · ",
|
|
@@ -1840,19 +2733,19 @@ window.__ModuleLoader__.load({
|
|
|
1840
2733
|
})
|
|
1841
2734
|
}),
|
|
1842
2735
|
!catalogUnavailable && graph !== null && graph.nodes.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1843
|
-
className:
|
|
2736
|
+
className: css.graphLayout,
|
|
1844
2737
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1845
|
-
className:
|
|
2738
|
+
className: css.graphPanel,
|
|
1846
2739
|
children: [
|
|
1847
2740
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1848
|
-
className:
|
|
2741
|
+
className: css.graphToolbar,
|
|
1849
2742
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
|
|
1850
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
2743
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: css.liveDot }),
|
|
1851
2744
|
t("overview.snapshot"),
|
|
1852
2745
|
" ",
|
|
1853
2746
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: generated })
|
|
1854
2747
|
] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1855
|
-
className:
|
|
2748
|
+
className: css.graphLegend,
|
|
1856
2749
|
children: [
|
|
1857
2750
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1858
2751
|
"data-edge": "scope",
|
|
@@ -1878,7 +2771,7 @@ window.__ModuleLoader__.load({
|
|
|
1878
2771
|
})]
|
|
1879
2772
|
}),
|
|
1880
2773
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1881
|
-
className:
|
|
2774
|
+
className: css.graphViewport,
|
|
1882
2775
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemoryGraph, {
|
|
1883
2776
|
graph,
|
|
1884
2777
|
selectedId: selected === null ? void 0 : graphNodeKey(selected),
|
|
@@ -1886,7 +2779,7 @@ window.__ModuleLoader__.load({
|
|
|
1886
2779
|
})
|
|
1887
2780
|
}),
|
|
1888
2781
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1889
|
-
className:
|
|
2782
|
+
className: css.graphFooter,
|
|
1890
2783
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("overview.graphComposition", {
|
|
1891
2784
|
spaces: graphSpaces,
|
|
1892
2785
|
memories: graphMemories,
|
|
@@ -1902,13 +2795,13 @@ window.__ModuleLoader__.load({
|
|
|
1902
2795
|
})
|
|
1903
2796
|
]
|
|
1904
2797
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
|
|
1905
|
-
className:
|
|
2798
|
+
className: css.graphInspector,
|
|
1906
2799
|
"data-empty": selected === null || void 0,
|
|
1907
2800
|
children: selected === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1908
|
-
className:
|
|
2801
|
+
className: css.inspectorEmpty,
|
|
1909
2802
|
children: [
|
|
1910
2803
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1911
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
2804
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.inspectorLogo, sidebarCss.inspectorGlyph),
|
|
1912
2805
|
"aria-hidden": "true",
|
|
1913
2806
|
children: "◇"
|
|
1914
2807
|
}),
|
|
@@ -1917,7 +2810,7 @@ window.__ModuleLoader__.load({
|
|
|
1917
2810
|
]
|
|
1918
2811
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
1919
2812
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1920
|
-
className:
|
|
2813
|
+
className: css.inspectorHeading,
|
|
1921
2814
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t(selectedKind === "space" ? "overview.inspectorSpace" : selectedKind === "entity" ? "overview.inspectorEntity" : "overview.inspector") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1922
2815
|
type: "button",
|
|
1923
2816
|
onClick: () => setSelected(null),
|
|
@@ -1926,9 +2819,9 @@ window.__ModuleLoader__.load({
|
|
|
1926
2819
|
})]
|
|
1927
2820
|
}),
|
|
1928
2821
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1929
|
-
className:
|
|
2822
|
+
className: css.inspectorChips,
|
|
1930
2823
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1931
|
-
className:
|
|
2824
|
+
className: css.categoryChip,
|
|
1932
2825
|
children: graphKindLabel(t, selected)
|
|
1933
2826
|
}), selected.memoryProviderId !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemoryProviderBadge, {
|
|
1934
2827
|
providerId: selected.memoryProviderId,
|
|
@@ -1936,13 +2829,13 @@ window.__ModuleLoader__.load({
|
|
|
1936
2829
|
})]
|
|
1937
2830
|
}),
|
|
1938
2831
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1939
|
-
className:
|
|
2832
|
+
className: css.inspectorTitleRow,
|
|
1940
2833
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
|
|
1941
|
-
className:
|
|
2834
|
+
className: css.inspectorTitle,
|
|
1942
2835
|
children: selected.content
|
|
1943
2836
|
}), selectedKind === "memory" && selected.content.length > 140 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1944
2837
|
type: "button",
|
|
1945
|
-
className:
|
|
2838
|
+
className: css.inspectorEye,
|
|
1946
2839
|
onClick: () => setPreview(selected),
|
|
1947
2840
|
"aria-label": t("overview.previewAria"),
|
|
1948
2841
|
title: t("overview.previewAria"),
|
|
@@ -1966,13 +2859,13 @@ window.__ModuleLoader__.load({
|
|
|
1966
2859
|
})]
|
|
1967
2860
|
}),
|
|
1968
2861
|
selectedKind === "space" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dl", {
|
|
1969
|
-
className:
|
|
2862
|
+
className: css.inspectorMeta,
|
|
1970
2863
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("dt", { children: t("overview.spaceId") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dd", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: selected.memoryBodyId ?? selected.id }) })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("dt", { children: t("overview.containedMemories") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dd", { children: selected.occurrenceCount ?? 0 })] })]
|
|
1971
2864
|
}) : selectedKind === "entity" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dl", {
|
|
1972
|
-
className:
|
|
2865
|
+
className: css.inspectorMeta,
|
|
1973
2866
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("dt", { children: t("overview.entityMentions") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dd", { children: selected.occurrenceCount ?? 0 })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("dt", { children: t("term.spaces") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dd", { children: selected.memoryBodyNames?.join(" · ") || "—" })] })]
|
|
1974
2867
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dl", {
|
|
1975
|
-
className:
|
|
2868
|
+
className: css.inspectorMeta,
|
|
1976
2869
|
children: [
|
|
1977
2870
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("dt", { children: t("term.space") }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dd", { children: [
|
|
1978
2871
|
selected.memoryBodyName ?? "—",
|
|
@@ -1984,15 +2877,15 @@ window.__ModuleLoader__.load({
|
|
|
1984
2877
|
]
|
|
1985
2878
|
}),
|
|
1986
2879
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1987
|
-
className:
|
|
2880
|
+
className: css.inspectorActions,
|
|
1988
2881
|
children: [selectedKind !== "space" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1989
2882
|
type: "button",
|
|
1990
|
-
className:
|
|
2883
|
+
className: css.primaryButton,
|
|
1991
2884
|
onClick: () => props.onExplore(selected.content),
|
|
1992
2885
|
children: t("overview.exploreNode")
|
|
1993
2886
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1994
2887
|
type: "button",
|
|
1995
|
-
className:
|
|
2888
|
+
className: css.secondaryButton,
|
|
1996
2889
|
onClick: () => void navigator.clipboard?.writeText(selected.id),
|
|
1997
2890
|
children: t("common.copyId")
|
|
1998
2891
|
})]
|
|
@@ -2016,7 +2909,7 @@ window.__ModuleLoader__.load({
|
|
|
2016
2909
|
title: t(onlyQueryOrUnsupported ? "overview.noVisualTitle" : "overview.noContentTitle"),
|
|
2017
2910
|
children: t(onlyQueryOrUnsupported ? "overview.noVisualText" : "overview.noContentText")
|
|
2018
2911
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2019
|
-
className:
|
|
2912
|
+
className: css.asyncPlaceholder,
|
|
2020
2913
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("overview.loading") })
|
|
2021
2914
|
}),
|
|
2022
2915
|
preview !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ContentPreview, {
|
|
@@ -2028,7 +2921,7 @@ window.__ModuleLoader__.load({
|
|
|
2028
2921
|
});
|
|
2029
2922
|
}
|
|
2030
2923
|
function ExplorePage(props) {
|
|
2031
|
-
const t =
|
|
2924
|
+
const t = useT();
|
|
2032
2925
|
const pageSize = 6;
|
|
2033
2926
|
const [query, setQuery] = (0, react.useState)(props.seed);
|
|
2034
2927
|
const [mode, setMode] = (0, react.useState)("smart");
|
|
@@ -2122,7 +3015,7 @@ window.__ModuleLoader__.load({
|
|
|
2122
3015
|
const visibleResults = results.slice(0, visibleResultLimit);
|
|
2123
3016
|
const visibleRelated = related.slice(0, visibleRelatedLimit);
|
|
2124
3017
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2125
|
-
className:
|
|
3018
|
+
className: css.page,
|
|
2126
3019
|
children: [
|
|
2127
3020
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.PageHeader, {
|
|
2128
3021
|
title: t("search.title"),
|
|
@@ -2130,10 +3023,10 @@ window.__ModuleLoader__.load({
|
|
|
2130
3023
|
meta: t("search.maxResults", { count: props.status?.defaultRecallLimit ?? "—" })
|
|
2131
3024
|
}),
|
|
2132
3025
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
2133
|
-
className:
|
|
3026
|
+
className: css.searchBar,
|
|
2134
3027
|
onSubmit: (event) => void search(event),
|
|
2135
3028
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2136
|
-
className:
|
|
3029
|
+
className: css.queryField,
|
|
2137
3030
|
children: [
|
|
2138
3031
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2139
3032
|
"aria-hidden": "true",
|
|
@@ -2148,7 +3041,7 @@ window.__ModuleLoader__.load({
|
|
|
2148
3041
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("kbd", { children: "↵" })
|
|
2149
3042
|
]
|
|
2150
3043
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2151
|
-
className:
|
|
3044
|
+
className: css.searchControls,
|
|
2152
3045
|
children: [
|
|
2153
3046
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("common.category"), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
2154
3047
|
value: category,
|
|
@@ -2182,15 +3075,15 @@ window.__ModuleLoader__.load({
|
|
|
2182
3075
|
]
|
|
2183
3076
|
})] }),
|
|
2184
3077
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2185
|
-
className:
|
|
3078
|
+
className: css.searchActions,
|
|
2186
3079
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2187
3080
|
type: "submit",
|
|
2188
|
-
className:
|
|
3081
|
+
className: css.secondaryButton,
|
|
2189
3082
|
disabled: searching || query.trim() === "",
|
|
2190
3083
|
children: searchKind === "direct" ? t("search.searching") : t("search.action")
|
|
2191
3084
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2192
3085
|
type: "button",
|
|
2193
|
-
className:
|
|
3086
|
+
className: css.primaryButton,
|
|
2194
3087
|
disabled: searching || query.trim() === "" || !props.agentAvailable,
|
|
2195
3088
|
onClick: () => void runSearch(true),
|
|
2196
3089
|
children: searchKind === "agent" ? t("search.agentSearching") : t("search.agentAction")
|
|
@@ -2204,26 +3097,26 @@ window.__ModuleLoader__.load({
|
|
|
2204
3097
|
sources
|
|
2205
3098
|
}),
|
|
2206
3099
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2207
|
-
className:
|
|
3100
|
+
className: css.asyncResults,
|
|
2208
3101
|
children: [
|
|
2209
3102
|
searching && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SectionSpinner, { label: searchKind === "agent" ? t("search.agentSearching") : t("search.searching") }),
|
|
2210
3103
|
agentAnswer !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2211
|
-
className:
|
|
3104
|
+
className: css.agentAnswer,
|
|
2212
3105
|
"aria-label": t("search.agentAnswer"),
|
|
2213
3106
|
children: [
|
|
2214
3107
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2215
|
-
className:
|
|
3108
|
+
className: css.agentAnswerHeading,
|
|
2216
3109
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("search.agentAnswerHint") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: t("search.agentAnswer") })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: agentAnswer.runId.slice(0, 8) })]
|
|
2217
3110
|
}),
|
|
2218
3111
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: agentAnswer.answer }),
|
|
2219
3112
|
agentAnswer.citations.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2220
|
-
className:
|
|
3113
|
+
className: css.agentCitations,
|
|
2221
3114
|
children: agentAnswer.citations.map((citation) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: citation }, citation))
|
|
2222
3115
|
})
|
|
2223
3116
|
]
|
|
2224
3117
|
}),
|
|
2225
3118
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2226
|
-
className:
|
|
3119
|
+
className: css.inlineError,
|
|
2227
3120
|
role: "alert",
|
|
2228
3121
|
children: error
|
|
2229
3122
|
}),
|
|
@@ -2238,12 +3131,12 @@ window.__ModuleLoader__.load({
|
|
|
2238
3131
|
children: t("search.emptyText")
|
|
2239
3132
|
}),
|
|
2240
3133
|
results.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2241
|
-
className: relatedTo === null ?
|
|
3134
|
+
className: relatedTo === null ? css.singleColumn : css.resultLayout,
|
|
2242
3135
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2243
|
-
className:
|
|
3136
|
+
className: css.results,
|
|
2244
3137
|
children: [
|
|
2245
3138
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2246
|
-
className:
|
|
3139
|
+
className: css.sectionHeading,
|
|
2247
3140
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: t("search.results") }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: results.length })]
|
|
2248
3141
|
}),
|
|
2249
3142
|
visibleResults.map((insight) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InsightCard, {
|
|
@@ -2261,10 +3154,10 @@ window.__ModuleLoader__.load({
|
|
|
2261
3154
|
]
|
|
2262
3155
|
}), relatedTo !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("aside", {
|
|
2263
3156
|
id: "mnemon-related-pane",
|
|
2264
|
-
className:
|
|
3157
|
+
className: css.relatedPane,
|
|
2265
3158
|
children: [
|
|
2266
3159
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2267
|
-
className:
|
|
3160
|
+
className: css.sectionHeading,
|
|
2268
3161
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: t("search.related") }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2269
3162
|
type: "button",
|
|
2270
3163
|
onClick: () => {
|
|
@@ -2277,15 +3170,15 @@ window.__ModuleLoader__.load({
|
|
|
2277
3170
|
})]
|
|
2278
3171
|
}),
|
|
2279
3172
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2280
|
-
className:
|
|
3173
|
+
className: css.relatedSource,
|
|
2281
3174
|
children: relatedTo.content
|
|
2282
3175
|
}),
|
|
2283
3176
|
relatedLoading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2284
|
-
className:
|
|
3177
|
+
className: css.loading,
|
|
2285
3178
|
children: t("search.traversing")
|
|
2286
3179
|
}),
|
|
2287
3180
|
!relatedLoading && related.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2288
|
-
className:
|
|
3181
|
+
className: css.muted,
|
|
2289
3182
|
children: t("search.noRelated")
|
|
2290
3183
|
}),
|
|
2291
3184
|
visibleRelated.map((insight) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InsightCard, {
|
|
@@ -2309,7 +3202,7 @@ window.__ModuleLoader__.load({
|
|
|
2309
3202
|
});
|
|
2310
3203
|
}
|
|
2311
3204
|
function EntitiesPage(props) {
|
|
2312
|
-
const t =
|
|
3205
|
+
const t = useT();
|
|
2313
3206
|
const entityPageSize = 10;
|
|
2314
3207
|
const insightPageSize = 6;
|
|
2315
3208
|
const [view, setView] = (0, react.useState)({
|
|
@@ -2366,7 +3259,7 @@ window.__ModuleLoader__.load({
|
|
|
2366
3259
|
const sources = view.sources ?? [];
|
|
2367
3260
|
const hasEntityProvider = sources.length === 0 || sources.some((source) => source.mode === "entities" && source.status !== "unavailable");
|
|
2368
3261
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2369
|
-
className:
|
|
3262
|
+
className: css.page,
|
|
2370
3263
|
children: [
|
|
2371
3264
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.PageHeader, {
|
|
2372
3265
|
title: t("entities.title"),
|
|
@@ -2382,12 +3275,12 @@ window.__ModuleLoader__.load({
|
|
|
2382
3275
|
title: t("entities.unsupportedTitle"),
|
|
2383
3276
|
children: t("entities.unsupportedText")
|
|
2384
3277
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2385
|
-
className:
|
|
3278
|
+
className: css.entityLayout,
|
|
2386
3279
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("aside", {
|
|
2387
|
-
className:
|
|
3280
|
+
className: css.entityRail,
|
|
2388
3281
|
children: [
|
|
2389
3282
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
2390
|
-
className:
|
|
3283
|
+
className: css.entitySearch,
|
|
2391
3284
|
onSubmit: submit,
|
|
2392
3285
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
2393
3286
|
"aria-label": t("entities.nameAria"),
|
|
@@ -2405,17 +3298,17 @@ window.__ModuleLoader__.load({
|
|
|
2405
3298
|
placeholder: t("entities.placeholder")
|
|
2406
3299
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2407
3300
|
type: "submit",
|
|
2408
|
-
className:
|
|
3301
|
+
className: css.primaryButton,
|
|
2409
3302
|
disabled: loading || entity.trim() === "",
|
|
2410
3303
|
children: t("entities.action")
|
|
2411
3304
|
})]
|
|
2412
3305
|
}),
|
|
2413
3306
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2414
|
-
className:
|
|
3307
|
+
className: css.entityHeading,
|
|
2415
3308
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("entities.top") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: entityFilter === "" ? t("entities.frequency") : t("entities.filterHint") })]
|
|
2416
3309
|
}),
|
|
2417
3310
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2418
|
-
className:
|
|
3311
|
+
className: css.entityList,
|
|
2419
3312
|
children: visibleEntities.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
2420
3313
|
type: "button",
|
|
2421
3314
|
"aria-pressed": view.selected === item.entity,
|
|
@@ -2434,20 +3327,20 @@ window.__ModuleLoader__.load({
|
|
|
2434
3327
|
onMore: () => setVisibleEntityLimit((value) => value + entityPageSize)
|
|
2435
3328
|
}),
|
|
2436
3329
|
!loading && view.items.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2437
|
-
className:
|
|
3330
|
+
className: css.muted,
|
|
2438
3331
|
children: t("entities.emptyRail")
|
|
2439
3332
|
}),
|
|
2440
3333
|
!loading && view.items.length > 0 && visibleEntities.length === 0 && entityFilter !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2441
|
-
className:
|
|
3334
|
+
className: css.muted,
|
|
2442
3335
|
children: t("entities.filterEmpty")
|
|
2443
3336
|
})
|
|
2444
3337
|
]
|
|
2445
3338
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2446
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
3339
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.entityResults, css.asyncResults),
|
|
2447
3340
|
children: [
|
|
2448
3341
|
loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SectionSpinner, { label: t("entities.loading") }),
|
|
2449
3342
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2450
|
-
className:
|
|
3343
|
+
className: css.inlineError,
|
|
2451
3344
|
role: "alert",
|
|
2452
3345
|
children: error
|
|
2453
3346
|
}),
|
|
@@ -2457,7 +3350,7 @@ window.__ModuleLoader__.load({
|
|
|
2457
3350
|
children: t("entities.selectText")
|
|
2458
3351
|
}),
|
|
2459
3352
|
view.selected !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2460
|
-
className:
|
|
3353
|
+
className: css.sectionHeading,
|
|
2461
3354
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: view.selected }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: view.insights.length })]
|
|
2462
3355
|
}), !loading && view.insights.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.EmptyState, {
|
|
2463
3356
|
glyph: "0",
|
|
@@ -2481,7 +3374,7 @@ window.__ModuleLoader__.load({
|
|
|
2481
3374
|
});
|
|
2482
3375
|
}
|
|
2483
3376
|
function PersistenceStrategyDialog(props) {
|
|
2484
|
-
const t =
|
|
3377
|
+
const t = useT();
|
|
2485
3378
|
const strategyFormId = (0, react.useId)();
|
|
2486
3379
|
const configured = props.config?.persistenceStrategy;
|
|
2487
3380
|
const [mode, setMode] = (0, react.useState)(configured?.mode ?? "manual");
|
|
@@ -2559,43 +3452,43 @@ window.__ModuleLoader__.load({
|
|
|
2559
3452
|
wide: true,
|
|
2560
3453
|
onClose: props.onClose,
|
|
2561
3454
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2562
|
-
className:
|
|
3455
|
+
className: css.modalFooterActions,
|
|
2563
3456
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2564
3457
|
type: "button",
|
|
2565
3458
|
"data-dialog-close": true,
|
|
2566
|
-
className:
|
|
3459
|
+
className: css.ghostButton,
|
|
2567
3460
|
disabled: saving,
|
|
2568
3461
|
onClick: props.onClose,
|
|
2569
3462
|
children: t("common.cancel")
|
|
2570
3463
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2571
3464
|
type: "submit",
|
|
2572
3465
|
form: strategyFormId,
|
|
2573
|
-
className:
|
|
3466
|
+
className: css.primaryButton,
|
|
2574
3467
|
disabled: loading || saving || !props.writable || !selectedProvidersValid,
|
|
2575
3468
|
children: saving ? t("strategy.saving") : t("strategy.save")
|
|
2576
3469
|
})]
|
|
2577
3470
|
}),
|
|
2578
3471
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
2579
3472
|
id: strategyFormId,
|
|
2580
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
3473
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.bodyEdit, css.strategyForm),
|
|
2581
3474
|
onSubmit: (event) => void save(event),
|
|
2582
3475
|
children: [
|
|
2583
3476
|
loading && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2584
|
-
className:
|
|
3477
|
+
className: css.strategyLoading,
|
|
2585
3478
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SectionSpinner, { label: t("strategy.loading") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("strategy.loading") })]
|
|
2586
3479
|
}),
|
|
2587
3480
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2588
|
-
className:
|
|
3481
|
+
className: css.inlineError,
|
|
2589
3482
|
role: "alert",
|
|
2590
3483
|
children: error
|
|
2591
3484
|
}),
|
|
2592
3485
|
!loading && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2593
|
-
className:
|
|
3486
|
+
className: css.createSection,
|
|
2594
3487
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2595
|
-
className:
|
|
3488
|
+
className: css.createSectionHeading,
|
|
2596
3489
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "01" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("strategy.modeTitle") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("strategy.modeHint") })] })]
|
|
2597
3490
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
|
|
2598
|
-
className:
|
|
3491
|
+
className: css.placementMode,
|
|
2599
3492
|
children: [
|
|
2600
3493
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: t("overview.placementMode") }),
|
|
2601
3494
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
@@ -2610,7 +3503,7 @@ window.__ModuleLoader__.load({
|
|
|
2610
3503
|
onChange: () => setMode("manual")
|
|
2611
3504
|
}),
|
|
2612
3505
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
2613
|
-
className:
|
|
3506
|
+
className: css.choiceControl,
|
|
2614
3507
|
"data-kind": "radio",
|
|
2615
3508
|
"aria-hidden": "true"
|
|
2616
3509
|
}),
|
|
@@ -2629,7 +3522,7 @@ window.__ModuleLoader__.load({
|
|
|
2629
3522
|
onChange: () => setMode("automatic")
|
|
2630
3523
|
}),
|
|
2631
3524
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
2632
|
-
className:
|
|
3525
|
+
className: css.choiceControl,
|
|
2633
3526
|
"data-kind": "radio",
|
|
2634
3527
|
"aria-hidden": "true"
|
|
2635
3528
|
}),
|
|
@@ -2643,12 +3536,12 @@ window.__ModuleLoader__.load({
|
|
|
2643
3536
|
]
|
|
2644
3537
|
})]
|
|
2645
3538
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2646
|
-
className:
|
|
3539
|
+
className: css.createSection,
|
|
2647
3540
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2648
|
-
className:
|
|
3541
|
+
className: css.createSectionHeading,
|
|
2649
3542
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "02" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t(mode === "manual" ? "strategy.manualTitle" : "strategy.automaticTitle") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t(mode === "manual" ? "strategy.manualDescription" : "strategy.automaticDescription") })] })]
|
|
2650
3543
|
}), mode === "manual" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
|
|
2651
|
-
className:
|
|
3544
|
+
className: css.providerChoice,
|
|
2652
3545
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: t("overview.providerLabel") }), providers.map((provider) => {
|
|
2653
3546
|
const disabled = provider.origin !== "native" && provider.serviceConfigured === false;
|
|
2654
3547
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
@@ -2667,11 +3560,11 @@ window.__ModuleLoader__.load({
|
|
|
2667
3560
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderIcon, {
|
|
2668
3561
|
providerId: provider.id,
|
|
2669
3562
|
icon: provider.icon,
|
|
2670
|
-
className:
|
|
3563
|
+
className: css.providerChoiceIcon
|
|
2671
3564
|
}),
|
|
2672
3565
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("strong", { children: [provider.label, provider.origin === "native" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("em", { children: t("overview.nativeOfficial") })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: disabled ? t("overview.providerServiceRequired") : `${t(`overview.workspaceBinding.${provider.workspaceBinding}`)} · ${providerSummary(t, provider)}` })] }),
|
|
2673
3566
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
2674
|
-
className:
|
|
3567
|
+
className: css.choiceControl,
|
|
2675
3568
|
"data-kind": "radio",
|
|
2676
3569
|
"aria-hidden": "true"
|
|
2677
3570
|
})
|
|
@@ -2683,11 +3576,11 @@ window.__ModuleLoader__.load({
|
|
|
2683
3576
|
connection: providerDrafts[selectedProvider.id] ?? {},
|
|
2684
3577
|
onChange: (key, value) => updateDraft(selectedProvider.id, key, value)
|
|
2685
3578
|
})] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2686
|
-
className:
|
|
3579
|
+
className: css.placementPolicy,
|
|
2687
3580
|
"aria-label": t("overview.placementPolicy"),
|
|
2688
3581
|
children: [
|
|
2689
3582
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2690
|
-
className:
|
|
3583
|
+
className: css.placementPolicyHeading,
|
|
2691
3584
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("overview.placementPolicy") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("overview.placementPolicyHint") })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: props.agentAvailable ? t("strategy.taskAgentReady") : t("strategy.taskAgentUnavailable") })]
|
|
2692
3585
|
}),
|
|
2693
3586
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("overview.placementPrompt"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
@@ -2699,7 +3592,7 @@ window.__ModuleLoader__.load({
|
|
|
2699
3592
|
maxLength: 4e3
|
|
2700
3593
|
})] }),
|
|
2701
3594
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2702
|
-
className:
|
|
3595
|
+
className: css.placementRuleGrid,
|
|
2703
3596
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("overview.dataBoundary"), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
2704
3597
|
"aria-label": t("overview.dataBoundary"),
|
|
2705
3598
|
value: dataBoundary,
|
|
@@ -2736,7 +3629,7 @@ window.__ModuleLoader__.load({
|
|
|
2736
3629
|
})] })]
|
|
2737
3630
|
}),
|
|
2738
3631
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
|
|
2739
|
-
className:
|
|
3632
|
+
className: css.capabilityRules,
|
|
2740
3633
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: t("overview.requiredCapabilities") }), [
|
|
2741
3634
|
"graph",
|
|
2742
3635
|
"exact-write",
|
|
@@ -2752,7 +3645,7 @@ window.__ModuleLoader__.load({
|
|
|
2752
3645
|
onChange: () => toggleCapability(capability)
|
|
2753
3646
|
}),
|
|
2754
3647
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
2755
|
-
className:
|
|
3648
|
+
className: css.choiceControl,
|
|
2756
3649
|
"data-kind": "check",
|
|
2757
3650
|
"aria-hidden": "true"
|
|
2758
3651
|
}),
|
|
@@ -2762,7 +3655,7 @@ window.__ModuleLoader__.load({
|
|
|
2762
3655
|
})]
|
|
2763
3656
|
}),
|
|
2764
3657
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2765
|
-
className:
|
|
3658
|
+
className: css.placementCandidates,
|
|
2766
3659
|
children: providers.map((provider) => {
|
|
2767
3660
|
const disabled = provider.serviceConfigured === false || dataBoundary === "local-only" && provider.kind === "remote";
|
|
2768
3661
|
const selected = automaticProviderIds.includes(provider.id);
|
|
@@ -2779,11 +3672,11 @@ window.__ModuleLoader__.load({
|
|
|
2779
3672
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderIcon, {
|
|
2780
3673
|
providerId: provider.id,
|
|
2781
3674
|
icon: provider.icon,
|
|
2782
|
-
className:
|
|
3675
|
+
className: css.candidateIcon
|
|
2783
3676
|
}),
|
|
2784
3677
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: provider.label }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: provider.serviceConfigured === false ? t("overview.providerServiceRequired") : provider.origin === "native" ? t("overview.candidateNativeReady") : provider.kind === "local" ? t("overview.candidateLocal") : t("overview.candidateRemote") })] }),
|
|
2785
3678
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
2786
|
-
className:
|
|
3679
|
+
className: css.choiceControl,
|
|
2787
3680
|
"data-kind": "check",
|
|
2788
3681
|
"aria-hidden": "true"
|
|
2789
3682
|
})
|
|
@@ -2807,7 +3700,7 @@ window.__ModuleLoader__.load({
|
|
|
2807
3700
|
});
|
|
2808
3701
|
}
|
|
2809
3702
|
function RememberPage(props) {
|
|
2810
|
-
const t =
|
|
3703
|
+
const t = useT();
|
|
2811
3704
|
const rememberFormId = (0, react.useId)();
|
|
2812
3705
|
const [content, setContent] = (0, react.useState)(props.seed);
|
|
2813
3706
|
const [category, setCategory] = (0, react.useState)("general");
|
|
@@ -2876,21 +3769,21 @@ window.__ModuleLoader__.load({
|
|
|
2876
3769
|
}
|
|
2877
3770
|
};
|
|
2878
3771
|
const composer = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2879
|
-
className:
|
|
3772
|
+
className: css.supervisedComposer,
|
|
2880
3773
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
2881
3774
|
id: rememberFormId,
|
|
2882
|
-
className:
|
|
3775
|
+
className: css.supervisedForm,
|
|
2883
3776
|
onSubmit: (event) => void supervise(event),
|
|
2884
3777
|
children: [
|
|
2885
3778
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2886
|
-
className:
|
|
3779
|
+
className: css.supervisedHeading,
|
|
2887
3780
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: t("remember.delegateTitle") }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2888
|
-
className: !props.agentAvailable ?
|
|
3781
|
+
className: !props.agentAvailable ? css.sessionMissing : css.sessionReady,
|
|
2889
3782
|
children: !props.agentAvailable ? t("remember.noTaskAgent") : t("remember.taskAgentReady")
|
|
2890
3783
|
})]
|
|
2891
3784
|
}),
|
|
2892
3785
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2893
|
-
className:
|
|
3786
|
+
className: css.fieldWide,
|
|
2894
3787
|
children: [t("remember.candidate"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
2895
3788
|
"aria-label": t("remember.candidateAria"),
|
|
2896
3789
|
value: content,
|
|
@@ -2901,25 +3794,25 @@ window.__ModuleLoader__.load({
|
|
|
2901
3794
|
})]
|
|
2902
3795
|
}),
|
|
2903
3796
|
!props.agentAvailable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2904
|
-
className:
|
|
3797
|
+
className: css.sessionHint,
|
|
2905
3798
|
children: t("remember.taskAgentHint")
|
|
2906
3799
|
}),
|
|
2907
3800
|
result !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2908
|
-
className:
|
|
3801
|
+
className: css.modalInlineStatus,
|
|
2909
3802
|
role: "status",
|
|
2910
3803
|
children: result
|
|
2911
3804
|
})
|
|
2912
3805
|
]
|
|
2913
3806
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
|
|
2914
|
-
className:
|
|
3807
|
+
className: css.advancedWrite,
|
|
2915
3808
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("summary", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("remember.advanced") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("remember.advancedHint") })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("remember.expand") })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
2916
|
-
className:
|
|
3809
|
+
className: css.manualForm,
|
|
2917
3810
|
onSubmit: (event) => void manualSave(event),
|
|
2918
3811
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2919
|
-
className:
|
|
3812
|
+
className: css.formGrid,
|
|
2920
3813
|
children: [
|
|
2921
3814
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2922
|
-
className:
|
|
3815
|
+
className: css.fieldWide,
|
|
2923
3816
|
children: [
|
|
2924
3817
|
t("remember.target"),
|
|
2925
3818
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
|
|
@@ -2937,7 +3830,7 @@ window.__ModuleLoader__.load({
|
|
|
2937
3830
|
}, body.id))
|
|
2938
3831
|
}),
|
|
2939
3832
|
selectedMemoryBody?.provider.capabilities.writeMode === "async-extracting" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
2940
|
-
className:
|
|
3833
|
+
className: css.providerWriteHint,
|
|
2941
3834
|
children: t("remember.asyncProviderHint")
|
|
2942
3835
|
})
|
|
2943
3836
|
]
|
|
@@ -2965,7 +3858,7 @@ window.__ModuleLoader__.load({
|
|
|
2965
3858
|
}, value))
|
|
2966
3859
|
})] }),
|
|
2967
3860
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2968
|
-
className:
|
|
3861
|
+
className: css.fieldWide,
|
|
2969
3862
|
children: [t("remember.entities"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
2970
3863
|
value: entities,
|
|
2971
3864
|
onChange: (event) => setEntities(event.target.value),
|
|
@@ -2973,7 +3866,7 @@ window.__ModuleLoader__.load({
|
|
|
2973
3866
|
})]
|
|
2974
3867
|
}),
|
|
2975
3868
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2976
|
-
className:
|
|
3869
|
+
className: css.fieldWide,
|
|
2977
3870
|
children: [t("remember.tags"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
2978
3871
|
value: tags,
|
|
2979
3872
|
onChange: (event) => setTags(event.target.value),
|
|
@@ -2982,10 +3875,10 @@ window.__ModuleLoader__.load({
|
|
|
2982
3875
|
})
|
|
2983
3876
|
]
|
|
2984
3877
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2985
|
-
className:
|
|
3878
|
+
className: css.manualActions,
|
|
2986
3879
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("remember.advancedText") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2987
3880
|
type: "submit",
|
|
2988
|
-
className:
|
|
3881
|
+
className: css.secondaryButton,
|
|
2989
3882
|
disabled: saving || content.trim() === "" || memoryBodyId === "",
|
|
2990
3883
|
children: saving ? t("remember.saving") : t("remember.advancedAction")
|
|
2991
3884
|
})]
|
|
@@ -2999,18 +3892,18 @@ window.__ModuleLoader__.load({
|
|
|
2999
3892
|
busy: supervising || saving,
|
|
3000
3893
|
onClose: props.onClose,
|
|
3001
3894
|
footer: props.writeEnabled ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3002
|
-
className:
|
|
3895
|
+
className: css.modalFooterActions,
|
|
3003
3896
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3004
3897
|
type: "button",
|
|
3005
3898
|
"data-dialog-close": true,
|
|
3006
|
-
className:
|
|
3899
|
+
className: css.ghostButton,
|
|
3007
3900
|
disabled: supervising || saving,
|
|
3008
3901
|
onClick: props.onClose,
|
|
3009
3902
|
children: t("common.cancel")
|
|
3010
3903
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3011
3904
|
type: "submit",
|
|
3012
3905
|
form: rememberFormId,
|
|
3013
|
-
className:
|
|
3906
|
+
className: css.primaryButton,
|
|
3014
3907
|
disabled: supervising || content.trim() === "" || !props.agentAvailable,
|
|
3015
3908
|
children: supervising ? t("remember.processing") : t("remember.action")
|
|
3016
3909
|
})]
|
|
@@ -3023,7 +3916,7 @@ window.__ModuleLoader__.load({
|
|
|
3023
3916
|
});
|
|
3024
3917
|
}
|
|
3025
3918
|
function ListPage(props) {
|
|
3026
|
-
const t =
|
|
3919
|
+
const t = useT();
|
|
3027
3920
|
const pageSize = 12;
|
|
3028
3921
|
const [query, setQuery] = (0, react.useState)("");
|
|
3029
3922
|
const [category, setCategory] = (0, react.useState)("");
|
|
@@ -3077,7 +3970,7 @@ window.__ModuleLoader__.load({
|
|
|
3077
3970
|
setVisibleLimit(pageSize);
|
|
3078
3971
|
};
|
|
3079
3972
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3080
|
-
className:
|
|
3973
|
+
className: css.page,
|
|
3081
3974
|
children: [
|
|
3082
3975
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.PageHeader, {
|
|
3083
3976
|
title: t("content.title"),
|
|
@@ -3085,7 +3978,7 @@ window.__ModuleLoader__.load({
|
|
|
3085
3978
|
meta: t("content.count", { count: view === null ? "—" : selectedBodyId === void 0 ? view.total : filteredItems.length })
|
|
3086
3979
|
}),
|
|
3087
3980
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
3088
|
-
className:
|
|
3981
|
+
className: css.listToolbar,
|
|
3089
3982
|
onSubmit: submit,
|
|
3090
3983
|
children: [
|
|
3091
3984
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
@@ -3108,14 +4001,14 @@ window.__ModuleLoader__.load({
|
|
|
3108
4001
|
}),
|
|
3109
4002
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3110
4003
|
type: "submit",
|
|
3111
|
-
className:
|
|
4004
|
+
className: css.primaryButton,
|
|
3112
4005
|
disabled: loading,
|
|
3113
4006
|
children: loading ? t("common.loading") : t("content.apply")
|
|
3114
4007
|
})
|
|
3115
4008
|
]
|
|
3116
4009
|
}),
|
|
3117
4010
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3118
|
-
className:
|
|
4011
|
+
className: css.listNotice,
|
|
3119
4012
|
children: t("content.notice")
|
|
3120
4013
|
}),
|
|
3121
4014
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ReadSourcePanel, {
|
|
@@ -3125,12 +4018,12 @@ window.__ModuleLoader__.load({
|
|
|
3125
4018
|
onSelect: selectBody
|
|
3126
4019
|
}),
|
|
3127
4020
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3128
|
-
className:
|
|
4021
|
+
className: css.inlineError,
|
|
3129
4022
|
role: "alert",
|
|
3130
4023
|
children: error
|
|
3131
4024
|
}),
|
|
3132
4025
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3133
|
-
className:
|
|
4026
|
+
className: css.asyncResults,
|
|
3134
4027
|
children: [
|
|
3135
4028
|
loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SectionSpinner, { label: t("common.loading") }),
|
|
3136
4029
|
!loading && filteredItems.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.EmptyState, {
|
|
@@ -3139,7 +4032,7 @@ window.__ModuleLoader__.load({
|
|
|
3139
4032
|
children: t(waitingForQuery ? "content.queryRequiredText" : "content.emptyText")
|
|
3140
4033
|
}),
|
|
3141
4034
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3142
|
-
className:
|
|
4035
|
+
className: css.memoryList,
|
|
3143
4036
|
children: visibleItems.map((insight) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InsightCard, {
|
|
3144
4037
|
insight,
|
|
3145
4038
|
writeEnabled: props.writeEnabled,
|
|
@@ -3224,7 +4117,7 @@ window.__ModuleLoader__.load({
|
|
|
3224
4117
|
}
|
|
3225
4118
|
];
|
|
3226
4119
|
function MemorySpacesSourceView(props) {
|
|
3227
|
-
const t =
|
|
4120
|
+
const t = useT();
|
|
3228
4121
|
const client = (0, react.useMemo)(() => props.management === void 0 ? void 0 : memorySpacesPageClient(props.management), [props.management]);
|
|
3229
4122
|
const [revision, setRevision] = (0, react.useState)(0);
|
|
3230
4123
|
const [status, setStatus] = (0, react.useState)(null);
|
|
@@ -3278,35 +4171,35 @@ window.__ModuleLoader__.load({
|
|
|
3278
4171
|
const preferences = props.preferences;
|
|
3279
4172
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
3280
4173
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3281
|
-
className:
|
|
4174
|
+
className: css.inlineError,
|
|
3282
4175
|
role: "alert",
|
|
3283
4176
|
children: error
|
|
3284
4177
|
}),
|
|
3285
4178
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
3286
|
-
className:
|
|
4179
|
+
className: sidebarCss.memoryWorkspace,
|
|
3287
4180
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.PageHeader, {
|
|
3288
4181
|
title: t("nav.bodies"),
|
|
3289
4182
|
description: t("overview.description"),
|
|
3290
4183
|
meta: writable ? t("common.agentSupervised") : activationEnabled ? t("common.activationOnly") : t("common.readOnly"),
|
|
3291
4184
|
action: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3292
|
-
className:
|
|
4185
|
+
className: css.memoryHeaderActions,
|
|
3293
4186
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3294
4187
|
type: "button",
|
|
3295
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
4188
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.primaryButton, sidebarCss.memoryWriteButton),
|
|
3296
4189
|
disabled: !writable,
|
|
3297
4190
|
onClick: () => remember(),
|
|
3298
4191
|
children: t("nav.rememberAction")
|
|
3299
4192
|
}), preferences !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3300
4193
|
type: "button",
|
|
3301
|
-
className:
|
|
4194
|
+
className: css.secondaryButton,
|
|
3302
4195
|
onClick: () => setStrategyOpen(true),
|
|
3303
4196
|
children: t("strategy.action")
|
|
3304
4197
|
})]
|
|
3305
4198
|
})
|
|
3306
4199
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3307
|
-
className:
|
|
4200
|
+
className: sidebarCss.memoryNavigation,
|
|
3308
4201
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3309
|
-
className:
|
|
4202
|
+
className: sidebarCss.memoryTabs,
|
|
3310
4203
|
role: "tablist",
|
|
3311
4204
|
"aria-label": t("nav.memory.aria"),
|
|
3312
4205
|
children: TABS.map((tab) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|