dsh-mnemon-source-memory-spaces 0.5.2 → 0.5.4
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 +11 -15
- package/lib/client.js +1264 -348
- package/lib/contracts.d.ts +44 -22
- package/lib/{definitions-CEpa-tvm.d.ts → definitions-C5y84OE6.d.ts} +22 -17
- package/lib/index.d.ts +18 -3
- package/lib/index.js +260 -280
- package/lib/native-cli.d.ts +15 -0
- package/lib/native-cli.js +108 -0
- package/lib/provider-sdk.d.ts +11 -9
- package/lib/provider-sdk.js +7 -4
- package/lib/testing.d.ts +3 -3
- package/lib/types/client/api.d.ts +13 -9
- package/lib/types/client/pages.d.ts +8 -6
- package/lib/types/client/presentation.d.ts +6 -0
- package/lib/types/contracts.d.ts +49 -22
- package/package.json +22 -13
- package/presentation/locales.json +716 -0
- package/presentation/page.module.css +489 -0
- package/presentation/sidebar.module.css +286 -0
package/lib/client.js
CHANGED
|
@@ -7,6 +7,919 @@ 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 Native 或第三方 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
|
+
"nav.spaces": "记忆空间",
|
|
358
|
+
"overview.editSpace": "编辑",
|
|
359
|
+
"overview.editSpaceAria": "编辑{name}",
|
|
360
|
+
"overview.saveSpace": "保存",
|
|
361
|
+
"overview.savingSpace": "保存中…",
|
|
362
|
+
"overview.deleteSpace": "删除",
|
|
363
|
+
"overview.deleteSpaceAria": "删除{name}",
|
|
364
|
+
"overview.disconnectSpace": "断开",
|
|
365
|
+
"overview.disconnectSpaceAria": "断开{name}",
|
|
366
|
+
"overview.deletingSpace": "删除中…"
|
|
367
|
+
};
|
|
368
|
+
var en = {
|
|
369
|
+
"term.space": "Memory Space",
|
|
370
|
+
"term.spaces": "Memory Spaces",
|
|
371
|
+
"category.decision": "Decision",
|
|
372
|
+
"category.preference": "Preference",
|
|
373
|
+
"category.fact": "Fact",
|
|
374
|
+
"category.insight": "Insight",
|
|
375
|
+
"category.context": "Context",
|
|
376
|
+
"category.general": "General",
|
|
377
|
+
"nav.memory.aria": "Memory Space pages",
|
|
378
|
+
"nav.overview": "Overview",
|
|
379
|
+
"nav.bodies": "Memory Spaces",
|
|
380
|
+
"nav.search": "Recall",
|
|
381
|
+
"nav.entities": "Entities",
|
|
382
|
+
"nav.rememberAction": "Remember",
|
|
383
|
+
"nav.content": "Content",
|
|
384
|
+
"overview.title": "Memory Spaces",
|
|
385
|
+
"overview.description": "Manage memory spaces backed by Mnemon Native or third-party Providers. Active spaces participate in reads, routing, and live snapshots.",
|
|
386
|
+
"overview.pageDescription": "Create and activate Memory Spaces, then inspect storage health and live relation snapshots across providers.",
|
|
387
|
+
"overview.interval": "Full sync on entry · Click a card to sync on demand",
|
|
388
|
+
"overview.fullSyncPending": "Waiting for the first full sync",
|
|
389
|
+
"overview.fullSyncJustNow": "Last full sync: just now",
|
|
390
|
+
"overview.fullSyncSeconds": "Last full sync: {count}s ago",
|
|
391
|
+
"overview.fullSyncMinutes": "Last full sync: {count}m ago",
|
|
392
|
+
"overview.fullSyncHours": "Last full sync: {count}h ago",
|
|
393
|
+
"overview.fullSyncDays": "Last full sync: {count}d ago",
|
|
394
|
+
"overview.syncing": "Syncing…",
|
|
395
|
+
"overview.syncNow": "Sync now",
|
|
396
|
+
"overview.directory": "Memory Space Directory",
|
|
397
|
+
"overview.directory.description": "Each card represents a memory space. A third-party Provider creates its mapping on first connection; later card clicks check only that space, without overwriting locally maintained titles or descriptions.",
|
|
398
|
+
"overview.directory.waiting": "Waiting for directory",
|
|
399
|
+
"overview.directory.unsynced": "Directory not synchronized",
|
|
400
|
+
"overview.directory.unsyncedBadge": "Directory pending",
|
|
401
|
+
"overview.directoryLoading": "Loading the Memory Space directory",
|
|
402
|
+
"overview.healthLoading": "Checking Memory Space health",
|
|
403
|
+
"overview.storageHealthy": "Storage healthy",
|
|
404
|
+
"overview.storageUnhealthy": "Storage unavailable",
|
|
405
|
+
"overview.storageChecking": "Checking",
|
|
406
|
+
"overview.reconnecting": "Reconnecting",
|
|
407
|
+
"overview.reconnectHint": "Click the card to reconnect and synchronize this Memory Space",
|
|
408
|
+
"overview.reconnectAria": "Reconnect {name}",
|
|
409
|
+
"overview.snapshotLoading": "Loading the multi-space live snapshot",
|
|
410
|
+
"overview.metadataAction": "AI metadata",
|
|
411
|
+
"overview.metadataTitle": "Maintain Memory Space metadata with AI",
|
|
412
|
+
"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.",
|
|
413
|
+
"overview.metadataUnavailable": "Temporarily unavailable: no active Agent matches the current memory scope",
|
|
414
|
+
"overview.metadataLoading": "Loading maintainable Memory Spaces…",
|
|
415
|
+
"overview.metadataEmpty": "There are no active Memory Spaces whose metadata can be maintained by AI.",
|
|
416
|
+
"overview.metadataSelected": "{count} Memory Spaces selected",
|
|
417
|
+
"overview.metadataSelectAll": "Select all",
|
|
418
|
+
"overview.metadataClear": "Clear",
|
|
419
|
+
"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.",
|
|
420
|
+
"overview.metadataGenerate": "Generate with AI ({count})",
|
|
421
|
+
"overview.metadataGenerating": "AI is generating…",
|
|
422
|
+
"overview.metadataRunningCount": "{count} running",
|
|
423
|
+
"overview.metadataTaskRunning": "Generating…",
|
|
424
|
+
"overview.metadataTaskSuccess": "Updated",
|
|
425
|
+
"overview.metadataTaskError": "Failed: {error}",
|
|
426
|
+
"overview.metadataTaskUnknown": "Unknown error",
|
|
427
|
+
"overview.metadataCompleted": "Updated metadata for {count} Memory Spaces.",
|
|
428
|
+
"overview.mnemonDefault": "Mnemon default",
|
|
429
|
+
"overview.toggleAria": "{name} read toggle",
|
|
430
|
+
"overview.toggling": "Switching",
|
|
431
|
+
"overview.noDescription": "No routing description yet.",
|
|
432
|
+
"overview.unsyncedTitle": "Memory Space directory is not synchronized",
|
|
433
|
+
"overview.unsyncedShort": "The Web client and DSH Host are using different contracts. Restart the Host to register existing Stores.",
|
|
434
|
+
"overview.unsyncedLong": "The Host is still using the previous plugin contract. Restart DSH to rediscover existing Stores; no .db file will be deleted.",
|
|
435
|
+
"overview.emptyTitle": "No Memory Spaces yet",
|
|
436
|
+
"overview.emptyShort": "Create the first space and distill durable context into it.",
|
|
437
|
+
"overview.emptyLong": "Create a Mnemon Memory Space, or enable a third-party provider in Settings → Memory System to synchronize its existing namespaces.",
|
|
438
|
+
"overview.noActiveTitle": "No active Memory Spaces",
|
|
439
|
+
"overview.noActiveText": "Enable read access for at least one space to aggregate its live graph here.",
|
|
440
|
+
"overview.noContentTitle": "Active spaces have no content yet",
|
|
441
|
+
"overview.noContentText": "Distill durable context into a space to populate nodes and relations.",
|
|
442
|
+
"overview.createTitle": "Create Memory Space",
|
|
443
|
+
"overview.createDialogHint": "Define this Memory Space and choose its provider here. It reuses services, credentials, and global data locations from Settings → Memory System.",
|
|
444
|
+
"overview.createIdentityTitle": "Memory Space details",
|
|
445
|
+
"overview.createIdentityHint": "The name identifies the space; the description guides when the agent writes and recalls it.",
|
|
446
|
+
"overview.createPlacementTitle": "Memory Space provider",
|
|
447
|
+
"overview.createPlacementHint": "This is an explicit manual creation. Choose one enabled Provider; automatic selection is managed by Distillation Strategy.",
|
|
448
|
+
"overview.createName": "New Memory Space name",
|
|
449
|
+
"overview.createNamePlaceholder": "Name",
|
|
450
|
+
"overview.createDescription": "New Memory Space description",
|
|
451
|
+
"overview.createDescriptionPlaceholder": "Describe what belongs here and when it should be recalled",
|
|
452
|
+
"overview.placementMode": "Engine selection",
|
|
453
|
+
"overview.placementManual": "Choose manually",
|
|
454
|
+
"overview.placementManualHint": "Choose one enabled provider directly",
|
|
455
|
+
"overview.placementAutomatic": "Smart selection",
|
|
456
|
+
"overview.placementAutomaticHint": "Apply data-boundary and capability rules first, then let the agent choose among eligible providers",
|
|
457
|
+
"overview.placementUnavailable": "Requires a connected conversation aligned with this workspace",
|
|
458
|
+
"overview.recommended": "Recommended",
|
|
459
|
+
"overview.placementPolicy": "Selection policy",
|
|
460
|
+
"overview.placementPolicyHint": "The host enforces rules. The prompt only guides judgment among eligible candidates.",
|
|
461
|
+
"overview.agentDecision": "Agent decision",
|
|
462
|
+
"overview.placementPrompt": "Strategy prompt (optional)",
|
|
463
|
+
"overview.placementPromptPlaceholder": "For example: This is collaborative knowledge. Prefer local storage when exact writes are required; otherwise prefer sharing.",
|
|
464
|
+
"overview.dataBoundary": "Data boundary",
|
|
465
|
+
"overview.dataBoundaryRemote": "Remote services allowed",
|
|
466
|
+
"overview.dataBoundaryLocal": "Local only",
|
|
467
|
+
"overview.preference": "Soft preference",
|
|
468
|
+
"overview.preferenceBalanced": "Balanced",
|
|
469
|
+
"overview.preferenceLocal": "Local first",
|
|
470
|
+
"overview.preferenceShared": "Shared first",
|
|
471
|
+
"overview.requiredCapabilities": "Required capabilities (select any)",
|
|
472
|
+
"overview.capability.graph": "Relation graph",
|
|
473
|
+
"overview.capability.exact-write": "Exact writes",
|
|
474
|
+
"overview.capability.forget": "Safe forget",
|
|
475
|
+
"overview.candidateNativeReady": "Official native · follows the active memory scope",
|
|
476
|
+
"overview.providerServiceRequired": "Not enabled; configure the service in Settings → Memory System first",
|
|
477
|
+
"overview.workspaceBinding.automatic": "Follows the active memory scope",
|
|
478
|
+
"overview.workspaceBinding.optional-override": "Follows the active scope; global location can be customized",
|
|
479
|
+
"overview.workspaceBinding.provider-global": "Always uses the global scope",
|
|
480
|
+
"overview.candidateOpenViking": "Include the remote candidate and provide its connection",
|
|
481
|
+
"overview.candidateLocal": "Local provider · follows the active memory scope",
|
|
482
|
+
"overview.candidateRemote": "Remote provider · uses the global service configuration",
|
|
483
|
+
"overview.placementByLlm": "Agent selected",
|
|
484
|
+
"overview.placementByRules": "Rule selected",
|
|
485
|
+
"overview.placementConfidence": "Confidence: {confidence}",
|
|
486
|
+
"overview.confidence.high": "High",
|
|
487
|
+
"overview.confidence.medium": "Medium",
|
|
488
|
+
"overview.confidence.low": "Low",
|
|
489
|
+
"overview.providerLabel": "Memory engine",
|
|
490
|
+
"overview.nativeOfficial": "Official native",
|
|
491
|
+
"overview.providerNativeHint": "Official native, local-first storage with the full graph and soft-delete semantics",
|
|
492
|
+
"strategy.action": "Distillation strategy",
|
|
493
|
+
"strategy.title": "Distillation strategy",
|
|
494
|
+
"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.",
|
|
495
|
+
"strategy.loading": "Loading Provider directory…",
|
|
496
|
+
"strategy.modeTitle": "Provider selection",
|
|
497
|
+
"strategy.modeHint": "This policy applies only to Agent-created spaces during distillation. Manual Create Memory Space always asks you to choose.",
|
|
498
|
+
"strategy.manualHint": "Fix one Provider; the Agent cannot override it",
|
|
499
|
+
"strategy.automaticHint": "Apply hard rules first, then let the task Agent choose an eligible Provider",
|
|
500
|
+
"strategy.manualTitle": "Fixed Provider",
|
|
501
|
+
"strategy.manualDescription": "When no existing space fits, create the new space on this Provider.",
|
|
502
|
+
"strategy.automaticTitle": "Smart selection rules",
|
|
503
|
+
"strategy.automaticDescription": "The host enforces data and capability rules. The prompt only guides judgment among eligible candidates.",
|
|
504
|
+
"strategy.taskAgentReady": "Task Agent ready",
|
|
505
|
+
"strategy.taskAgentUnavailable": "Waiting for task Agent",
|
|
506
|
+
"strategy.save": "Save strategy",
|
|
507
|
+
"strategy.saving": "Saving…",
|
|
508
|
+
"overview.providerOpenVikingHint": "Connect an existing OpenViking service under the same Memory Space workflow",
|
|
509
|
+
"overview.providerSummary.mnemon-native": "Official native, local-first storage with the full graph and soft-delete semantics",
|
|
510
|
+
"overview.providerSummary.openviking": "Filesystem-shaped shared memory with tiered reads and automatic semantic extraction",
|
|
511
|
+
"overview.providerSummary.honcho": "Cross-session user modelling, peer profiles, dialectic reasoning, and persistent conclusions",
|
|
512
|
+
"overview.providerSummary.mem0": "Automatic fact extraction, semantic retrieval, reranking, and deduplication",
|
|
513
|
+
"overview.providerSummary.hindsight": "Knowledge-graph memory with entity resolution, multi-strategy recall, and reflection",
|
|
514
|
+
"overview.providerSummary.holographic": "Local structured fact memory with trust scoring, entity resolution, and compositional retrieval",
|
|
515
|
+
"overview.providerSummary.retaindb": "Cloud hybrid vector/BM25 retrieval, user profiles, and typed durable facts",
|
|
516
|
+
"overview.providerSummary.byterover": "Local-first hierarchical knowledge tree accessed through the brv CLI",
|
|
517
|
+
"overview.providerSummary.supermemory": "Semantic memory, persistent profiles, conversation ingest, and multi-container recall",
|
|
518
|
+
"overview.providerEndpoint": "Service endpoint",
|
|
519
|
+
"overview.providerEndpointPlaceholder": "For example: http://127.0.0.1:1933",
|
|
520
|
+
"overview.providerTargetUri": "Memory scope URI",
|
|
521
|
+
"overview.providerTargetPlaceholder": "For example: viking://user/memories",
|
|
522
|
+
"overview.providerAdvanced": "Identity and credentials (optional)",
|
|
523
|
+
"overview.providerApiKey": "API Key",
|
|
524
|
+
"overview.providerApiKeyOptional": "Leave blank when authentication is disabled",
|
|
525
|
+
"overview.providerApiKeyKeep": "Saved; leave blank to keep unchanged",
|
|
526
|
+
"overview.providerAccount": "Account",
|
|
527
|
+
"overview.providerUser": "User",
|
|
528
|
+
"overview.providerActorPeer": "Actor Peer",
|
|
529
|
+
"overview.providerField.workspace": "Workspace",
|
|
530
|
+
"overview.providerField.userId": "User ID",
|
|
531
|
+
"overview.providerField.agentId": "Agent ID",
|
|
532
|
+
"overview.providerField.mode": "Mode",
|
|
533
|
+
"overview.providerField.rerank": "Rerank search results",
|
|
534
|
+
"overview.providerField.bankId": "Memory bank",
|
|
535
|
+
"overview.providerField.budget": "Recall budget",
|
|
536
|
+
"overview.providerField.dataPath": "Fact store path",
|
|
537
|
+
"overview.providerField.defaultDirectory": "Default knowledge directory",
|
|
538
|
+
"overview.providerField.defaultTrust": "Default trust",
|
|
539
|
+
"overview.providerField.minTrust": "Minimum recall trust",
|
|
540
|
+
"overview.providerField.project": "Project",
|
|
541
|
+
"overview.providerField.cliPath": "brv executable",
|
|
542
|
+
"overview.providerField.workingDirectory": "Knowledge directory",
|
|
543
|
+
"overview.providerField.containerTag": "Container tag",
|
|
544
|
+
"overview.providerField.searchMode": "Search mode",
|
|
545
|
+
"overview.providerOption.platform": "Mem0 Platform",
|
|
546
|
+
"overview.providerOption.self-hosted": "Self-hosted server",
|
|
547
|
+
"overview.providerOption.low": "Low",
|
|
548
|
+
"overview.providerOption.mid": "Medium",
|
|
549
|
+
"overview.providerOption.high": "High",
|
|
550
|
+
"overview.providerOption.hybrid": "Hybrid",
|
|
551
|
+
"overview.providerOption.memories": "Memories",
|
|
552
|
+
"overview.providerOption.documents": "Documents",
|
|
553
|
+
"overview.providerKindLocal": "Local engine",
|
|
554
|
+
"overview.providerKindRemote": "Remote service",
|
|
555
|
+
"overview.providerSecretClear": "Clear the saved credential",
|
|
556
|
+
"overview.providerWriteExact": "Exact writes",
|
|
557
|
+
"overview.providerWriteAsync": "Asynchronous semantic extraction",
|
|
558
|
+
"overview.providerGraphReady": "Relation graph available",
|
|
559
|
+
"overview.providerSearchReady": "Unified search available",
|
|
560
|
+
"overview.providerRemote": "Third-party remote memory",
|
|
561
|
+
"overview.providerLocal": "Third-party local memory",
|
|
562
|
+
"overview.creating": "Creating…",
|
|
563
|
+
"overview.createAction": "Create",
|
|
564
|
+
"overview.editBody": "Edit",
|
|
565
|
+
"overview.editBodyAria": "Edit {name}",
|
|
566
|
+
"overview.editName": "Name",
|
|
567
|
+
"overview.editDescription": "Routing description",
|
|
568
|
+
"overview.saveBody": "Save",
|
|
569
|
+
"overview.savingBody": "Saving…",
|
|
570
|
+
"overview.deleteBody": "Delete",
|
|
571
|
+
"overview.deleteBodyAria": "Delete {name}",
|
|
572
|
+
"overview.deleteTitle": "Delete “{name}”?",
|
|
573
|
+
"overview.deleteWarning": "This permanently deletes the Memory Space and every memory and relation it contains. This cannot be undone.",
|
|
574
|
+
"overview.lastStoreDeleteHint": "Mnemon must retain at least one native Store. The last Memory Space may be inactive, but it cannot be deleted.",
|
|
575
|
+
"overview.deleteAction": "Delete permanently",
|
|
576
|
+
"overview.disconnectBody": "Disconnect",
|
|
577
|
+
"overview.disconnectBodyAria": "Disconnect {name}",
|
|
578
|
+
"overview.disconnectTitle": "Disconnect “{name}”?",
|
|
579
|
+
"overview.disconnectWarning": "This only removes the {provider} connection from the DSH Memory Space directory. Memories in the underlying engine remain untouched.",
|
|
580
|
+
"overview.disconnectAction": "Disconnect",
|
|
581
|
+
"overview.deletingBody": "Deleting…",
|
|
582
|
+
"overview.snapshot": "Live multi-space snapshot",
|
|
583
|
+
"overview.snapshotSources": "Snapshot observability",
|
|
584
|
+
"overview.snapshotSourcesHint": "True relation graphs, edge-free content projections, and query-only spaces remain distinct; missing provider relations are never invented.",
|
|
585
|
+
"overview.noVisualTitle": "Active spaces are query-only",
|
|
586
|
+
"overview.noVisualText": "These providers expose neither enumerable content nor a graph. Open Recall and ask a focused question.",
|
|
587
|
+
"overview.waitingSnapshot": "Waiting for the first snapshot",
|
|
588
|
+
"overview.updatedAt": "Updated at {time}",
|
|
589
|
+
"overview.edgeScope": "Space scope",
|
|
590
|
+
"overview.edgeTemporal": "Temporal",
|
|
591
|
+
"overview.edgeSemantic": "Semantic",
|
|
592
|
+
"overview.edgeCausal": "Causal",
|
|
593
|
+
"overview.edgeEntity": "Entity relation",
|
|
594
|
+
"overview.graphComposition": "{spaces} spaces · {memories} memories · {entities} entities",
|
|
595
|
+
"overview.graphCount": "Showing {visible} / {total} elements",
|
|
596
|
+
"overview.graphEdges": "{count} graph edges",
|
|
597
|
+
"overview.inspector": "Memory details",
|
|
598
|
+
"overview.inspectorSpace": "Memory Space details",
|
|
599
|
+
"overview.inspectorEntity": "Entity details",
|
|
600
|
+
"overview.selectNode": "Select a graph element",
|
|
601
|
+
"overview.selectNodeText": "Inspect the exact context for a Memory Space, entity, or memory.",
|
|
602
|
+
"overview.closeInspector": "Close node details",
|
|
603
|
+
"overview.memoryId": "Memory ID",
|
|
604
|
+
"overview.spaceId": "Memory Space ID",
|
|
605
|
+
"overview.containedMemories": "Contained memories",
|
|
606
|
+
"overview.entityMentions": "Indexed mentions",
|
|
607
|
+
"overview.exploreNode": "Recall around this",
|
|
608
|
+
"overview.previewAria": "View full content",
|
|
609
|
+
"overview.previewTitle": "Full content",
|
|
610
|
+
"overview.loading": "Synchronizing the multi-space live snapshot…",
|
|
611
|
+
"graph.layoutAria": "Graph layout",
|
|
612
|
+
"graph.layoutNatural": "Natural layout",
|
|
613
|
+
"graph.layoutUniform": "Uniform layout",
|
|
614
|
+
"graph.layoutCustom": "Custom layout",
|
|
615
|
+
"graph.layoutStatus": "Layout: {layout}",
|
|
616
|
+
"graph.draggable": "{layout} · draggable",
|
|
617
|
+
"graph.naturalAction": "Natural spread",
|
|
618
|
+
"graph.uniformAction": "Uniform reset",
|
|
619
|
+
"graph.aria": "Mnemon live memory graph with {nodes} elements and {edges} edges",
|
|
620
|
+
"graph.kindSpace": "Memory Space",
|
|
621
|
+
"graph.kindEntity": "Entity",
|
|
622
|
+
"search.title": "Recall Memory",
|
|
623
|
+
"search.description": "Retrieve raw evidence across active Memory Spaces; every provider uses its native recall method and keeps provenance.",
|
|
624
|
+
"search.maxResults": "Up to {count} results",
|
|
625
|
+
"search.placeholder": "Why did we choose SQLite? What release conventions apply?",
|
|
626
|
+
"search.queryAria": "Memory query",
|
|
627
|
+
"search.categoryAria": "Memory category",
|
|
628
|
+
"search.strategy": "Strategy",
|
|
629
|
+
"search.modeAria": "Recall mode",
|
|
630
|
+
"search.modeSmart": "Smart recall",
|
|
631
|
+
"search.modeKeyword": "Keyword search",
|
|
632
|
+
"search.modeBasic": "Basic match",
|
|
633
|
+
"search.searching": "Recalling…",
|
|
634
|
+
"search.action": "Direct search",
|
|
635
|
+
"search.agentAction": "Ask Agent",
|
|
636
|
+
"search.agentSearching": "Agent analyzing…",
|
|
637
|
+
"search.agentAnswer": "Agent answer",
|
|
638
|
+
"search.agentAnswerHint": "Grounded in the recalled evidence below",
|
|
639
|
+
"search.startTitle": "Start with a focused question",
|
|
640
|
+
"search.startText": "A focused entity, decision, or timeline is more reliable than loading the whole database.",
|
|
641
|
+
"search.emptyTitle": "No matches",
|
|
642
|
+
"search.emptyText": "Try a more specific entity, decision, or timeline keyword.",
|
|
643
|
+
"search.results": "Raw recalled evidence",
|
|
644
|
+
"search.related": "Related memories",
|
|
645
|
+
"search.closeRelated": "Close related memories",
|
|
646
|
+
"search.traversing": "Traversing the graph…",
|
|
647
|
+
"search.noRelated": "No related nodes found within two hops.",
|
|
648
|
+
"search.sourcesTitle": "Search coverage",
|
|
649
|
+
"entities.title": "Entity Explorer",
|
|
650
|
+
"entities.description": "Inspect entity connections only in Memory Spaces that expose a real entity index.",
|
|
651
|
+
"entities.sourcesTitle": "Entity capability coverage",
|
|
652
|
+
"entities.unsupportedTitle": "No active space exposes an entity index",
|
|
653
|
+
"entities.unsupportedText": "The active providers remain searchable through Recall, but are not presented here as a fabricated entity graph.",
|
|
654
|
+
"entities.count": "{count} active entities",
|
|
655
|
+
"entities.nameAria": "Entity name",
|
|
656
|
+
"entities.placeholder": "Enter any entity…",
|
|
657
|
+
"entities.action": "Explore",
|
|
658
|
+
"entities.top": "Top entities",
|
|
659
|
+
"entities.frequency": "By frequency",
|
|
660
|
+
"entities.filterHint": "Type to filter the rail locally (Esc to clear).",
|
|
661
|
+
"entities.emptyRail": "Entities appear here after memories with entity metadata are stored.",
|
|
662
|
+
"entities.filterEmpty": "No local match. Press Explore to query the host.",
|
|
663
|
+
"entities.loading": "Recalling entity relations…",
|
|
664
|
+
"entities.selectTitle": "Select or enter an entity",
|
|
665
|
+
"entities.selectText": "The entity view aggregates related memories instead of relying on literal matching.",
|
|
666
|
+
"entities.emptyTitle": "No related memories",
|
|
667
|
+
"entities.emptyText": "Try the full name or another entity alias.",
|
|
668
|
+
"remember.title": "Distill Memory",
|
|
669
|
+
"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.",
|
|
670
|
+
"remember.readOnlyTitle": "Read-only mode",
|
|
671
|
+
"remember.readOnlyText": "This deployment disables memory writes. Change and save the DSH Mnemon configuration to enable them.",
|
|
672
|
+
"remember.delegateTitle": "Send to independent task Agent",
|
|
673
|
+
"remember.noSession": "No live session",
|
|
674
|
+
"remember.ready": "Independent task Agent ready",
|
|
675
|
+
"remember.noTaskAgent": "Task Agent unavailable",
|
|
676
|
+
"remember.taskAgentReady": "Task Agent ready",
|
|
677
|
+
"remember.candidate": "Candidate",
|
|
678
|
+
"remember.candidateAria": "Memory candidate",
|
|
679
|
+
"remember.placeholder": "Enter background, preferences, decisions, or insights worth retaining across tasks. The model decides whether they qualify.",
|
|
680
|
+
"remember.sessionHint": "No usable model route is available for an independent task Agent.",
|
|
681
|
+
"remember.taskAgentHint": "The Host cannot currently create an isolated task Agent. Refresh status and try again.",
|
|
682
|
+
"remember.processing": "Independent task Agent is working…",
|
|
683
|
+
"remember.action": "Evaluate and distill",
|
|
684
|
+
"remember.advanced": "Advanced human constraints",
|
|
685
|
+
"remember.advancedHint": "Constrain the target Memory Space and metadata",
|
|
686
|
+
"remember.expand": "Expand",
|
|
687
|
+
"remember.target": "Target Memory Space",
|
|
688
|
+
"remember.asyncProviderHint": "This Memory Space waits for remote extraction to settle before returning a truthful write receipt.",
|
|
689
|
+
"remember.entities": "Entities (comma-separated)",
|
|
690
|
+
"remember.tags": "Tags (comma-separated)",
|
|
691
|
+
"remember.advancedText": "Advanced options constrain the independent task Agent; they do not bypass supervision or duplicate checks.",
|
|
692
|
+
"remember.saving": "Independent task Agent is writing…",
|
|
693
|
+
"remember.advancedAction": "Distill with constraints",
|
|
694
|
+
"remember.skipped": "The independent task Agent decided not to write",
|
|
695
|
+
"remember.completed": "The independent task Agent completed processing",
|
|
696
|
+
"remember.processed": "Independent task Agent processed: {action}",
|
|
697
|
+
"remember.dispatchFailed": "Dispatch failed: {error}",
|
|
698
|
+
"remember.saveFailed": "Save failed: {error}",
|
|
699
|
+
"content.title": "Memory Content",
|
|
700
|
+
"content.description": "Inspect observable content through each provider’s real browse contract, with enumerable, query-only, and unavailable engines kept distinct.",
|
|
701
|
+
"content.sourcesTitle": "Provider content models",
|
|
702
|
+
"content.count": "{count} memories",
|
|
703
|
+
"content.filterAria": "Filter memory content",
|
|
704
|
+
"content.filterPlaceholder": "Filter by content or exact ID…",
|
|
705
|
+
"content.categoryAria": "Memory category",
|
|
706
|
+
"content.apply": "Apply filters",
|
|
707
|
+
"content.notice": "Content calls each provider’s read-only browse contract directly; query-only engines run only after you enter a query.",
|
|
708
|
+
"content.queryRequiredTitle": "Query-only spaces are waiting",
|
|
709
|
+
"content.queryRequiredText": "Enter a focused query to inspect providers such as ByteRover that do not expose a complete list.",
|
|
710
|
+
"content.showing": "Showing {visible} / {total}",
|
|
711
|
+
"content.showMore": "Show {count} more",
|
|
712
|
+
"content.emptyTitle": "No matching memories",
|
|
713
|
+
"content.emptyText": "Clear the filters or distill the first durable memory.",
|
|
714
|
+
"nav.spaces": "Memory Spaces",
|
|
715
|
+
"overview.editSpace": "Edit",
|
|
716
|
+
"overview.editSpaceAria": "Edit {name}",
|
|
717
|
+
"overview.saveSpace": "Save",
|
|
718
|
+
"overview.savingSpace": "Saving…",
|
|
719
|
+
"overview.deleteSpace": "Delete",
|
|
720
|
+
"overview.deleteSpaceAria": "Delete {name}",
|
|
721
|
+
"overview.disconnectSpace": "Disconnect",
|
|
722
|
+
"overview.disconnectSpaceAria": "Disconnect {name}",
|
|
723
|
+
"overview.deletingSpace": "Deleting…"
|
|
724
|
+
};
|
|
725
|
+
//#endregion
|
|
726
|
+
//#region \0source-css:/home/runner/work/dsh-mnemon/dsh-mnemon/plugins/dsh-mnemon-source-memory-spaces/presentation/page.module.css.mjs
|
|
727
|
+
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{grid-template-columns:minmax(0,1fr);display:grid}.IIa07q_bodyDirectoryHeader>div{min-width:0}.IIa07q_bodyDirectoryPath{max-width:100%}.IIa07q_bodyDirectoryControls{flex-wrap:wrap;justify-content:flex-start;padding-right:0}.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}}";
|
|
728
|
+
const id$1 = "dsh-mnemon-source-memory-spaces/presentation/page.module.css";
|
|
729
|
+
if (typeof document !== "undefined") {
|
|
730
|
+
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(id$1) + "]");
|
|
731
|
+
if (!tag) {
|
|
732
|
+
tag = document.createElement("style");
|
|
733
|
+
tag.dataset.pluginCss = id$1;
|
|
734
|
+
document.head.appendChild(tag);
|
|
735
|
+
}
|
|
736
|
+
if (tag.textContent !== css$2) tag.textContent = css$2;
|
|
737
|
+
}
|
|
738
|
+
var page_module_css_default = {
|
|
739
|
+
"advancedWrite": "IIa07q_advancedWrite",
|
|
740
|
+
"agentAnswer": "IIa07q_agentAnswer",
|
|
741
|
+
"agentAnswerHeading": "IIa07q_agentAnswerHeading",
|
|
742
|
+
"agentCitations": "IIa07q_agentCitations",
|
|
743
|
+
"asyncPlaceholder": "IIa07q_asyncPlaceholder",
|
|
744
|
+
"asyncRegion": "IIa07q_asyncRegion",
|
|
745
|
+
"asyncResults": "IIa07q_asyncResults",
|
|
746
|
+
"badge": "IIa07q_badge",
|
|
747
|
+
"badges": "IIa07q_badges",
|
|
748
|
+
"bodyCard": "IIa07q_bodyCard",
|
|
749
|
+
"bodyCardActions": "IIa07q_bodyCardActions",
|
|
750
|
+
"bodyCreateForm": "IIa07q_bodyCreateForm",
|
|
751
|
+
"bodyDirectory": "IIa07q_bodyDirectory",
|
|
752
|
+
"bodyDirectoryControls": "IIa07q_bodyDirectoryControls",
|
|
753
|
+
"bodyDirectoryEmpty": "IIa07q_bodyDirectoryEmpty",
|
|
754
|
+
"bodyDirectoryHeader": "IIa07q_bodyDirectoryHeader",
|
|
755
|
+
"bodyDirectoryPath": "IIa07q_bodyDirectoryPath",
|
|
756
|
+
"bodyFooterBlock": "IIa07q_bodyFooterBlock",
|
|
757
|
+
"bodyFooterGrow": "IIa07q_bodyFooterGrow",
|
|
758
|
+
"bodyGrid": "IIa07q_bodyGrid",
|
|
759
|
+
"bodyHealth": "IIa07q_bodyHealth",
|
|
760
|
+
"bodySignal": "IIa07q_bodySignal",
|
|
761
|
+
"bodySwitch": "IIa07q_bodySwitch",
|
|
762
|
+
"bodySwitchTrack": "IIa07q_bodySwitchTrack",
|
|
763
|
+
"candidateIcon": "IIa07q_candidateIcon",
|
|
764
|
+
"capabilityRules": "IIa07q_capabilityRules",
|
|
765
|
+
"cardActions": "IIa07q_cardActions",
|
|
766
|
+
"cardTop": "IIa07q_cardTop",
|
|
767
|
+
"categoryChip": "IIa07q_categoryChip",
|
|
768
|
+
"choiceControl": "IIa07q_choiceControl",
|
|
769
|
+
"content": "IIa07q_content",
|
|
770
|
+
"createIdentityGrid": "IIa07q_createIdentityGrid",
|
|
771
|
+
"createSection": "IIa07q_createSection",
|
|
772
|
+
"createSectionHeading": "IIa07q_createSectionHeading",
|
|
773
|
+
"emptyState": "IIa07q_emptyState",
|
|
774
|
+
"entities": "IIa07q_entities",
|
|
775
|
+
"entityHeading": "IIa07q_entityHeading",
|
|
776
|
+
"entityLayout": "IIa07q_entityLayout",
|
|
777
|
+
"entityList": "IIa07q_entityList",
|
|
778
|
+
"entityRail": "IIa07q_entityRail",
|
|
779
|
+
"entityResults": "IIa07q_entityResults",
|
|
780
|
+
"entitySearch": "IIa07q_entitySearch",
|
|
781
|
+
"fieldWide": "IIa07q_fieldWide",
|
|
782
|
+
"graphBackdrop": "IIa07q_graphBackdrop",
|
|
783
|
+
"graphCanvasControls": "IIa07q_graphCanvasControls",
|
|
784
|
+
"graphEdge": "IIa07q_graphEdge",
|
|
785
|
+
"graphFooter": "IIa07q_graphFooter",
|
|
786
|
+
"graphGridLine": "IIa07q_graphGridLine",
|
|
787
|
+
"graphInspector": "IIa07q_graphInspector",
|
|
788
|
+
"graphLayout": "IIa07q_graphLayout",
|
|
789
|
+
"graphLegend": "IIa07q_graphLegend",
|
|
790
|
+
"graphNode": "IIa07q_graphNode",
|
|
791
|
+
"graphPanel": "IIa07q_graphPanel",
|
|
792
|
+
"graphSvg": "IIa07q_graphSvg",
|
|
793
|
+
"graphToolbar": "IIa07q_graphToolbar",
|
|
794
|
+
"graphViewport": "IIa07q_graphViewport",
|
|
795
|
+
"id": "IIa07q_id",
|
|
796
|
+
"insightCard": "IIa07q_insightCard",
|
|
797
|
+
"inspectorActions": "IIa07q_inspectorActions",
|
|
798
|
+
"inspectorChips": "IIa07q_inspectorChips",
|
|
799
|
+
"inspectorEmpty": "IIa07q_inspectorEmpty",
|
|
800
|
+
"inspectorEye": "IIa07q_inspectorEye",
|
|
801
|
+
"inspectorHeading": "IIa07q_inspectorHeading",
|
|
802
|
+
"inspectorLogo": "IIa07q_inspectorLogo",
|
|
803
|
+
"inspectorMeta": "IIa07q_inspectorMeta",
|
|
804
|
+
"inspectorTitle": "IIa07q_inspectorTitle",
|
|
805
|
+
"inspectorTitleRow": "IIa07q_inspectorTitleRow",
|
|
806
|
+
"listNotice": "IIa07q_listNotice",
|
|
807
|
+
"listToolbar": "IIa07q_listToolbar",
|
|
808
|
+
"liveDot": "IIa07q_liveDot",
|
|
809
|
+
"manualActions": "IIa07q_manualActions",
|
|
810
|
+
"manualForm": "IIa07q_manualForm",
|
|
811
|
+
"memoryHeaderActions": "IIa07q_memoryHeaderActions",
|
|
812
|
+
"memoryList": "IIa07q_memoryList",
|
|
813
|
+
"metadataDialog": "IIa07q_metadataDialog",
|
|
814
|
+
"metadataEmpty": "IIa07q_metadataEmpty",
|
|
815
|
+
"metadataList": "IIa07q_metadataList",
|
|
816
|
+
"metadataTaskStatus": "IIa07q_metadataTaskStatus",
|
|
817
|
+
"metadataToolbar": "IIa07q_metadataToolbar",
|
|
818
|
+
"mnemon-metadata-refreshed": "IIa07q_mnemon-metadata-refreshed",
|
|
819
|
+
"mnemon-metadata-sweep": "IIa07q_mnemon-metadata-sweep",
|
|
820
|
+
"mnemon-spin": "IIa07q_mnemon-spin",
|
|
821
|
+
"mnemonDefaultBadge": "IIa07q_mnemonDefaultBadge",
|
|
822
|
+
"modal": "IIa07q_modal",
|
|
823
|
+
"modalFooterNote": "IIa07q_modalFooterNote",
|
|
824
|
+
"modalInlineStatus": "IIa07q_modalInlineStatus",
|
|
825
|
+
"muted": "IIa07q_muted",
|
|
826
|
+
"nodeBodyLabel": "IIa07q_nodeBodyLabel",
|
|
827
|
+
"nodeCore": "IIa07q_nodeCore",
|
|
828
|
+
"nodeHalo": "IIa07q_nodeHalo",
|
|
829
|
+
"nodeLabel": "IIa07q_nodeLabel",
|
|
830
|
+
"placementCandidates": "IIa07q_placementCandidates",
|
|
831
|
+
"placementMode": "IIa07q_placementMode",
|
|
832
|
+
"placementPolicy": "IIa07q_placementPolicy",
|
|
833
|
+
"placementPolicyHeading": "IIa07q_placementPolicyHeading",
|
|
834
|
+
"placementReceipt": "IIa07q_placementReceipt",
|
|
835
|
+
"placementRuleGrid": "IIa07q_placementRuleGrid",
|
|
836
|
+
"previewContent": "IIa07q_previewContent",
|
|
837
|
+
"providerAdvancedGrid": "IIa07q_providerAdvancedGrid",
|
|
838
|
+
"providerBadge": "IIa07q_providerBadge",
|
|
839
|
+
"providerChoice": "IIa07q_providerChoice",
|
|
840
|
+
"providerChoiceIcon": "IIa07q_providerChoiceIcon",
|
|
841
|
+
"providerFieldControl": "IIa07q_providerFieldControl",
|
|
842
|
+
"providerFieldHeading": "IIa07q_providerFieldHeading",
|
|
843
|
+
"providerFieldIcon": "IIa07q_providerFieldIcon",
|
|
844
|
+
"providerFieldIdentity": "IIa07q_providerFieldIdentity",
|
|
845
|
+
"providerFields": "IIa07q_providerFields",
|
|
846
|
+
"providerSecretClear": "IIa07q_providerSecretClear",
|
|
847
|
+
"providerWriteHint": "IIa07q_providerWriteHint",
|
|
848
|
+
"queryField": "IIa07q_queryField",
|
|
849
|
+
"readSourceCard": "IIa07q_readSourceCard",
|
|
850
|
+
"readSourceIdentity": "IIa07q_readSourceIdentity",
|
|
851
|
+
"readSourceMeta": "IIa07q_readSourceMeta",
|
|
852
|
+
"readSourceSignal": "IIa07q_readSourceSignal",
|
|
853
|
+
"readSourceState": "IIa07q_readSourceState",
|
|
854
|
+
"readSources": "IIa07q_readSources",
|
|
855
|
+
"relatedPane": "IIa07q_relatedPane",
|
|
856
|
+
"relatedSource": "IIa07q_relatedSource",
|
|
857
|
+
"resultLayout": "IIa07q_resultLayout",
|
|
858
|
+
"results": "IIa07q_results",
|
|
859
|
+
"searchActions": "IIa07q_searchActions",
|
|
860
|
+
"searchBar": "IIa07q_searchBar",
|
|
861
|
+
"searchControls": "IIa07q_searchControls",
|
|
862
|
+
"sectionSpinner": "IIa07q_sectionSpinner",
|
|
863
|
+
"sessionHint": "IIa07q_sessionHint",
|
|
864
|
+
"sessionMissing": "IIa07q_sessionMissing",
|
|
865
|
+
"sessionReady": "IIa07q_sessionReady",
|
|
866
|
+
"singleColumn": "IIa07q_singleColumn",
|
|
867
|
+
"strategyForm": "IIa07q_strategyForm",
|
|
868
|
+
"strategyLoading": "IIa07q_strategyLoading",
|
|
869
|
+
"supervisedComposer": "IIa07q_supervisedComposer",
|
|
870
|
+
"supervisedForm": "IIa07q_supervisedForm",
|
|
871
|
+
"supervisedHeading": "IIa07q_supervisedHeading",
|
|
872
|
+
"tags": "IIa07q_tags"
|
|
873
|
+
};
|
|
874
|
+
//#endregion
|
|
875
|
+
//#region \0source-css:/home/runner/work/dsh-mnemon/dsh-mnemon/plugins/dsh-mnemon-source-memory-spaces/presentation/sidebar.module.css.mjs
|
|
876
|
+
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{flex-wrap:wrap;align-items:center;gap:4px 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 (width<=520px){._Bh55G_shell ._Bh55G_memoryTabs button{padding-inline:8px;font-size:12px}}@media (prefers-reduced-motion:reduce){._Bh55G_shell [class*=inspectorEye],._Bh55G_shell [class*=inspectorHeading] button{transition:none}}";
|
|
877
|
+
const id = "dsh-mnemon-source-memory-spaces/presentation/sidebar.module.css";
|
|
878
|
+
if (typeof document !== "undefined") {
|
|
879
|
+
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(id) + "]");
|
|
880
|
+
if (!tag) {
|
|
881
|
+
tag = document.createElement("style");
|
|
882
|
+
tag.dataset.pluginCss = id;
|
|
883
|
+
document.head.appendChild(tag);
|
|
884
|
+
}
|
|
885
|
+
if (tag.textContent !== css$1) tag.textContent = css$1;
|
|
886
|
+
}
|
|
887
|
+
var sidebar_module_css_default = {
|
|
888
|
+
"bodyCardFooter": "_Bh55G_bodyCardFooter",
|
|
889
|
+
"bodyCardHeader": "_Bh55G_bodyCardHeader",
|
|
890
|
+
"bodyCardIdentity": "_Bh55G_bodyCardIdentity",
|
|
891
|
+
"bodyCardMeta": "_Bh55G_bodyCardMeta",
|
|
892
|
+
"bodyCardStats": "_Bh55G_bodyCardStats",
|
|
893
|
+
"bodyDirectoryActions": "_Bh55G_bodyDirectoryActions",
|
|
894
|
+
"inspectorGlyph": "_Bh55G_inspectorGlyph",
|
|
895
|
+
"memoryNavigation": "_Bh55G_memoryNavigation",
|
|
896
|
+
"memoryTabs": "_Bh55G_memoryTabs",
|
|
897
|
+
"memoryWorkspace": "_Bh55G_memoryWorkspace",
|
|
898
|
+
"memoryWriteButton": "_Bh55G_memoryWriteButton",
|
|
899
|
+
"modal": "_Bh55G_modal",
|
|
900
|
+
"shell": "_Bh55G_shell"
|
|
901
|
+
};
|
|
902
|
+
//#endregion
|
|
903
|
+
//#region src/client/presentation.ts
|
|
904
|
+
const css = {
|
|
905
|
+
...dsh_mnemon_client.memoryPageStyles,
|
|
906
|
+
...page_module_css_default
|
|
907
|
+
};
|
|
908
|
+
const sidebarCss = {
|
|
909
|
+
...dsh_mnemon_client.memorySidebarStyles,
|
|
910
|
+
...sidebar_module_css_default
|
|
911
|
+
};
|
|
912
|
+
function useT() {
|
|
913
|
+
const fallback = (0, dsh_mnemon_client.useT)();
|
|
914
|
+
const locale = (0, dsh_mnemon_client.useLocale)();
|
|
915
|
+
return (0, react.useMemo)(() => (key, params) => {
|
|
916
|
+
const dictionary = locale.startsWith("en") ? en : zh;
|
|
917
|
+
if (!Object.hasOwn(dictionary, key)) return fallback(key, params);
|
|
918
|
+
const text = dictionary[key];
|
|
919
|
+
return params === void 0 ? text : text.replace(/\{(\w+)\}/g, (match, name) => name in params ? String(params[name]) : match);
|
|
920
|
+
}, [locale, fallback]);
|
|
921
|
+
}
|
|
922
|
+
//#endregion
|
|
10
923
|
//#region src/contracts.ts
|
|
11
924
|
const CATEGORIES = [
|
|
12
925
|
"preference",
|
|
@@ -101,24 +1014,24 @@ window.__ModuleLoader__.load({
|
|
|
101
1014
|
if (provider === void 0 || provider.origin === "native") return true;
|
|
102
1015
|
return provider.serviceConfigured !== false && memoryProviderFields(provider).every((field) => !field.required || String(connection?.[field.key] ?? "").trim() !== "");
|
|
103
1016
|
}
|
|
104
|
-
function
|
|
1017
|
+
function nativeSpaceProvider(provider) {
|
|
105
1018
|
return provider.origin === "native";
|
|
106
1019
|
}
|
|
107
1020
|
/** Shared memory-level Provider form used by manual creation, editing, and distillation policy. */
|
|
108
1021
|
function ProviderMemoryFields(props) {
|
|
109
|
-
const t =
|
|
1022
|
+
const t = useT();
|
|
110
1023
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
111
|
-
className:
|
|
1024
|
+
className: css.providerFields,
|
|
112
1025
|
"data-provider": props.provider.id,
|
|
113
1026
|
children: [
|
|
114
1027
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
115
|
-
className:
|
|
1028
|
+
className: css.providerFieldHeading,
|
|
116
1029
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
117
|
-
className:
|
|
1030
|
+
className: css.providerFieldIdentity,
|
|
118
1031
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderIcon, {
|
|
119
1032
|
providerId: props.provider.id,
|
|
120
1033
|
icon: props.provider.icon,
|
|
121
|
-
className:
|
|
1034
|
+
className: css.providerFieldIcon
|
|
122
1035
|
}), /* @__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
1036
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
124
1037
|
props.provider.kind === "local" ? t("overview.providerKindLocal") : t("overview.providerKindRemote"),
|
|
@@ -127,7 +1040,7 @@ window.__ModuleLoader__.load({
|
|
|
127
1040
|
] })]
|
|
128
1041
|
}),
|
|
129
1042
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
130
|
-
className:
|
|
1043
|
+
className: css.providerAdvancedGrid,
|
|
131
1044
|
children: memoryProviderFields(props.provider).map((field) => {
|
|
132
1045
|
const label = providerFieldLabel(t, field);
|
|
133
1046
|
const value = props.connection[field.key] ?? "";
|
|
@@ -163,9 +1076,9 @@ window.__ModuleLoader__.load({
|
|
|
163
1076
|
onChange: (event) => props.onChange(field.key, event.target.value)
|
|
164
1077
|
});
|
|
165
1078
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
166
|
-
className:
|
|
1079
|
+
className: css.providerFieldControl,
|
|
167
1080
|
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:
|
|
1081
|
+
className: css.providerSecretClear,
|
|
169
1082
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
170
1083
|
type: "checkbox",
|
|
171
1084
|
checked: clearingSecret,
|
|
@@ -176,7 +1089,7 @@ window.__ModuleLoader__.load({
|
|
|
176
1089
|
})
|
|
177
1090
|
}),
|
|
178
1091
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("small", {
|
|
179
|
-
className:
|
|
1092
|
+
className: css.providerWriteHint,
|
|
180
1093
|
children: [
|
|
181
1094
|
props.provider.capabilities.writeMode === "exact" ? t("overview.providerWriteExact") : t("overview.providerWriteAsync"),
|
|
182
1095
|
" · ",
|
|
@@ -203,24 +1116,24 @@ window.__ModuleLoader__.load({
|
|
|
203
1116
|
function MemoryProviderBadge(props) {
|
|
204
1117
|
const label = providerDisplayLabel(props.providerId, props.label);
|
|
205
1118
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
206
|
-
className:
|
|
1119
|
+
className: css.providerBadge,
|
|
207
1120
|
"data-provider": props.providerId,
|
|
208
1121
|
title: label,
|
|
209
1122
|
children: label
|
|
210
1123
|
});
|
|
211
1124
|
}
|
|
212
1125
|
function ReadSourcePanel(props) {
|
|
213
|
-
const t =
|
|
1126
|
+
const t = useT();
|
|
214
1127
|
if (props.sources.length === 0) return null;
|
|
215
1128
|
const content = (source) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
216
1129
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
217
|
-
className:
|
|
1130
|
+
className: css.readSourceSignal,
|
|
218
1131
|
"aria-hidden": "true"
|
|
219
1132
|
}),
|
|
220
1133
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
221
|
-
className:
|
|
1134
|
+
className: css.readSourceIdentity,
|
|
222
1135
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: source.memoryBodyName }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
223
|
-
className:
|
|
1136
|
+
className: css.readSourceMeta,
|
|
224
1137
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemoryProviderBadge, {
|
|
225
1138
|
providerId: source.providerId,
|
|
226
1139
|
label: source.providerLabel
|
|
@@ -228,12 +1141,12 @@ window.__ModuleLoader__.load({
|
|
|
228
1141
|
})]
|
|
229
1142
|
}),
|
|
230
1143
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
231
|
-
className:
|
|
1144
|
+
className: css.readSourceState,
|
|
232
1145
|
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
1146
|
})
|
|
234
1147
|
] });
|
|
235
1148
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
236
|
-
className:
|
|
1149
|
+
className: css.readSources,
|
|
237
1150
|
"aria-label": props.title,
|
|
238
1151
|
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
1152
|
type: "button",
|
|
@@ -242,7 +1155,7 @@ window.__ModuleLoader__.load({
|
|
|
242
1155
|
onClick: () => props.onSelect?.(void 0),
|
|
243
1156
|
children: t("readSources.all")
|
|
244
1157
|
})] }), /* @__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:
|
|
1158
|
+
className: css.readSourceCard,
|
|
246
1159
|
"data-provider": source.providerId,
|
|
247
1160
|
"data-mode": source.mode,
|
|
248
1161
|
"data-status": source.status,
|
|
@@ -250,7 +1163,7 @@ window.__ModuleLoader__.load({
|
|
|
250
1163
|
children: content(source)
|
|
251
1164
|
}, source.memoryBodyId) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
252
1165
|
type: "button",
|
|
253
|
-
className:
|
|
1166
|
+
className: css.readSourceCard,
|
|
254
1167
|
"data-provider": source.providerId,
|
|
255
1168
|
"data-mode": source.mode,
|
|
256
1169
|
"data-status": source.status,
|
|
@@ -264,7 +1177,7 @@ window.__ModuleLoader__.load({
|
|
|
264
1177
|
}
|
|
265
1178
|
/** Full-text popup for a selected graph node whose inspector preview is clamped. */
|
|
266
1179
|
function ContentPreview(props) {
|
|
267
|
-
const t =
|
|
1180
|
+
const t = useT();
|
|
268
1181
|
const meta = [
|
|
269
1182
|
props.kind,
|
|
270
1183
|
props.node.id,
|
|
@@ -275,18 +1188,18 @@ window.__ModuleLoader__.load({
|
|
|
275
1188
|
description: meta,
|
|
276
1189
|
onClose: props.onClose,
|
|
277
1190
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
278
|
-
className:
|
|
1191
|
+
className: css.previewContent,
|
|
279
1192
|
children: props.node.content
|
|
280
1193
|
})
|
|
281
1194
|
});
|
|
282
1195
|
}
|
|
283
1196
|
function InsightCard(props) {
|
|
284
|
-
const t =
|
|
1197
|
+
const t = useT();
|
|
285
1198
|
const [confirming, setConfirming] = (0, react.useState)(false);
|
|
286
1199
|
const [forgetting, setForgetting] = (0, react.useState)(false);
|
|
287
1200
|
const { insight } = props;
|
|
288
|
-
const neutralActionClass = (0, dsh_mnemon_client.appearanceClass)(
|
|
289
|
-
const forgetActionClass = (0, dsh_mnemon_client.appearanceClass)(
|
|
1201
|
+
const neutralActionClass = (0, dsh_mnemon_client.appearanceClass)(css.ghostButton, sidebarCss.itemActionButton);
|
|
1202
|
+
const forgetActionClass = (0, dsh_mnemon_client.appearanceClass)(css.dangerButton, (0, dsh_mnemon_client.appearanceClass)(sidebarCss.itemActionButton, sidebarCss.itemDangerAction));
|
|
290
1203
|
const providerLabel = insight.memoryProviderLabel ?? insight.memoryProviderId;
|
|
291
1204
|
const supportsRelated = insight.memoryCapabilities?.related === true;
|
|
292
1205
|
const supportsForget = insight.memoryCapabilities?.forget === true;
|
|
@@ -308,36 +1221,36 @@ window.__ModuleLoader__.load({
|
|
|
308
1221
|
}
|
|
309
1222
|
};
|
|
310
1223
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
|
|
311
|
-
className:
|
|
1224
|
+
className: css.insightCard,
|
|
312
1225
|
children: [
|
|
313
1226
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
314
|
-
className:
|
|
1227
|
+
className: css.cardTop,
|
|
315
1228
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
316
|
-
className:
|
|
1229
|
+
className: css.badges,
|
|
317
1230
|
children: meta.map((entry) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
318
|
-
className:
|
|
1231
|
+
className: css.badge,
|
|
319
1232
|
children: entry
|
|
320
1233
|
}, entry))
|
|
321
1234
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
|
|
322
|
-
className:
|
|
1235
|
+
className: css.id,
|
|
323
1236
|
title: insight.id,
|
|
324
1237
|
children: insight.id.slice(0, 8)
|
|
325
1238
|
})]
|
|
326
1239
|
}),
|
|
327
1240
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
328
|
-
className:
|
|
1241
|
+
className: css.content,
|
|
329
1242
|
children: insight.content
|
|
330
1243
|
}),
|
|
331
1244
|
(insight.tags?.length ?? 0) > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
332
|
-
className:
|
|
1245
|
+
className: css.tags,
|
|
333
1246
|
children: insight.tags.map((tag) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: ["#", tag] }, tag))
|
|
334
1247
|
}),
|
|
335
1248
|
(insight.entities?.length ?? 0) > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
336
|
-
className:
|
|
1249
|
+
className: css.entities,
|
|
337
1250
|
children: insight.entities.map((entity) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: entity }, entity))
|
|
338
1251
|
}),
|
|
339
1252
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
340
|
-
className:
|
|
1253
|
+
className: css.cardActions,
|
|
341
1254
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
342
1255
|
props.onRelated !== void 0 && supportsRelated && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
343
1256
|
type: "button",
|
|
@@ -372,29 +1285,29 @@ window.__ModuleLoader__.load({
|
|
|
372
1285
|
busy: forgetting,
|
|
373
1286
|
onClose: () => setConfirming(false),
|
|
374
1287
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
375
|
-
className:
|
|
1288
|
+
className: css.modalFooterActions,
|
|
376
1289
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
377
1290
|
type: "button",
|
|
378
1291
|
"data-dialog-close": true,
|
|
379
1292
|
"data-autofocus": true,
|
|
380
|
-
className:
|
|
1293
|
+
className: css.ghostButton,
|
|
381
1294
|
disabled: forgetting,
|
|
382
1295
|
onClick: () => setConfirming(false),
|
|
383
1296
|
children: t("common.cancel")
|
|
384
1297
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
385
1298
|
type: "button",
|
|
386
|
-
className:
|
|
1299
|
+
className: css.dangerSolidButton,
|
|
387
1300
|
disabled: forgetting,
|
|
388
1301
|
onClick: () => void forget(),
|
|
389
1302
|
children: forgetting ? t("card.processing") : t("card.confirmForget")
|
|
390
1303
|
})]
|
|
391
1304
|
}),
|
|
392
1305
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
393
|
-
className:
|
|
1306
|
+
className: css.bodyDeleteConfirm,
|
|
394
1307
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
395
|
-
className:
|
|
1308
|
+
className: css.bodyDeleteSummary,
|
|
396
1309
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
397
|
-
className:
|
|
1310
|
+
className: css.bodyDeleteContent,
|
|
398
1311
|
children: insight.content
|
|
399
1312
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: meta.join(" · ") })]
|
|
400
1313
|
})
|
|
@@ -442,13 +1355,13 @@ window.__ModuleLoader__.load({
|
|
|
442
1355
|
...node,
|
|
443
1356
|
kind: "memory"
|
|
444
1357
|
}));
|
|
445
|
-
const
|
|
1358
|
+
const memoriesBySpace = /* @__PURE__ */ new Map();
|
|
446
1359
|
for (const node of memories) {
|
|
447
1360
|
if (node.memoryBodyId === void 0) continue;
|
|
448
|
-
|
|
1361
|
+
memoriesBySpace.set(node.memoryBodyId, [...memoriesBySpace.get(node.memoryBodyId) ?? [], node]);
|
|
449
1362
|
}
|
|
450
|
-
const
|
|
451
|
-
const spaceNodes =
|
|
1363
|
+
const activeSpaces = bodies.filter((body) => body.active && ((memoriesBySpace.get(body.id)?.length ?? 0) > 0 || (body.stats?.topEntities.length ?? 0) > 0));
|
|
1364
|
+
const spaceNodes = activeSpaces.map((body) => ({
|
|
452
1365
|
id: body.id,
|
|
453
1366
|
graphId: spaceGraphId(body.id),
|
|
454
1367
|
kind: "space",
|
|
@@ -458,20 +1371,20 @@ window.__ModuleLoader__.load({
|
|
|
458
1371
|
memoryBodyId: body.id,
|
|
459
1372
|
memoryBodyName: body.name,
|
|
460
1373
|
memoryProviderId: body.provider.id,
|
|
461
|
-
occurrenceCount: body.stats?.totalInsights ??
|
|
1374
|
+
occurrenceCount: body.stats?.totalInsights ?? memoriesBySpace.get(body.id)?.length ?? 0
|
|
462
1375
|
}));
|
|
463
1376
|
const edges = graph.edges.filter((edge) => edge.type !== "entity");
|
|
464
|
-
for (const body of
|
|
1377
|
+
for (const body of activeSpaces) for (const memory of memoriesBySpace.get(body.id) ?? []) edges.push({
|
|
465
1378
|
sourceId: spaceGraphId(body.id),
|
|
466
1379
|
targetId: graphNodeKey(memory),
|
|
467
1380
|
label: "scope",
|
|
468
1381
|
color: "#708199",
|
|
469
1382
|
type: "scope"
|
|
470
1383
|
});
|
|
471
|
-
const
|
|
1384
|
+
const spacesById = new Map(activeSpaces.map((body) => [body.id, body]));
|
|
472
1385
|
const indexedEntities = /* @__PURE__ */ new Map();
|
|
473
1386
|
for (const memory of memories) {
|
|
474
|
-
const body = memory.memoryBodyId === void 0 ? void 0 :
|
|
1387
|
+
const body = memory.memoryBodyId === void 0 ? void 0 : spacesById.get(memory.memoryBodyId);
|
|
475
1388
|
if (body === void 0) continue;
|
|
476
1389
|
const seen = /* @__PURE__ */ new Set();
|
|
477
1390
|
for (const rawEntity of memory.entities ?? []) {
|
|
@@ -688,7 +1601,7 @@ window.__ModuleLoader__.load({
|
|
|
688
1601
|
});
|
|
689
1602
|
}
|
|
690
1603
|
function MemoryGraph(props) {
|
|
691
|
-
const t =
|
|
1604
|
+
const t = useT();
|
|
692
1605
|
const visibleNodes = (0, react.useMemo)(() => {
|
|
693
1606
|
const spaces = props.graph.nodes.filter((node) => graphNodeKind(node) === "space");
|
|
694
1607
|
const entities = props.graph.nodes.filter((node) => graphNodeKind(node) === "entity").slice(0, 20);
|
|
@@ -833,7 +1746,7 @@ window.__ModuleLoader__.load({
|
|
|
833
1746
|
};
|
|
834
1747
|
const layoutLabel = t(layoutMode === "natural" ? "graph.layoutNatural" : layoutMode === "uniform" ? "graph.layoutUniform" : "graph.layoutCustom");
|
|
835
1748
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
836
|
-
className:
|
|
1749
|
+
className: css.graphCanvasControls,
|
|
837
1750
|
role: "toolbar",
|
|
838
1751
|
"aria-label": t("graph.layoutAria"),
|
|
839
1752
|
children: [
|
|
@@ -856,7 +1769,7 @@ window.__ModuleLoader__.load({
|
|
|
856
1769
|
})
|
|
857
1770
|
]
|
|
858
1771
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
859
|
-
className:
|
|
1772
|
+
className: css.graphSvg,
|
|
860
1773
|
viewBox: `0 0 ${GRAPH_WIDTH} ${GRAPH_HEIGHT}`,
|
|
861
1774
|
role: "img",
|
|
862
1775
|
"data-layout": layoutMode,
|
|
@@ -873,7 +1786,7 @@ window.__ModuleLoader__.load({
|
|
|
873
1786
|
patternUnits: "userSpaceOnUse",
|
|
874
1787
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
875
1788
|
d: "M 26 0 L 0 0 0 26",
|
|
876
|
-
className:
|
|
1789
|
+
className: css.graphGridLine,
|
|
877
1790
|
fill: "none"
|
|
878
1791
|
})
|
|
879
1792
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("filter", {
|
|
@@ -890,7 +1803,7 @@ window.__ModuleLoader__.load({
|
|
|
890
1803
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
891
1804
|
width: GRAPH_WIDTH,
|
|
892
1805
|
height: GRAPH_HEIGHT,
|
|
893
|
-
className:
|
|
1806
|
+
className: css.graphBackdrop
|
|
894
1807
|
}),
|
|
895
1808
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
896
1809
|
width: GRAPH_WIDTH,
|
|
@@ -914,7 +1827,7 @@ window.__ModuleLoader__.load({
|
|
|
914
1827
|
const controlY = (source.y + target.y) / 2 + dx / distance * offset * direction;
|
|
915
1828
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
916
1829
|
d: `M ${source.x} ${source.y} Q ${controlX} ${controlY} ${target.x} ${target.y}`,
|
|
917
|
-
className:
|
|
1830
|
+
className: css.graphEdge,
|
|
918
1831
|
"data-edge": edge.type ?? "temporal",
|
|
919
1832
|
"data-source-id": edge.sourceId,
|
|
920
1833
|
"data-target-id": edge.targetId,
|
|
@@ -931,7 +1844,7 @@ window.__ModuleLoader__.load({
|
|
|
931
1844
|
const selected = props.selectedId === nodeKey;
|
|
932
1845
|
const showLabel = selected || visibleNodes.length < 22 || index % 3 === 0;
|
|
933
1846
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("g", {
|
|
934
|
-
className:
|
|
1847
|
+
className: css.graphNode,
|
|
935
1848
|
"data-node-id": nodeKey,
|
|
936
1849
|
"data-provider": node.memoryProviderId,
|
|
937
1850
|
"data-category": node.category ?? "general",
|
|
@@ -971,37 +1884,37 @@ window.__ModuleLoader__.load({
|
|
|
971
1884
|
width: selected ? 40 : 34,
|
|
972
1885
|
height: selected ? 30 : 26,
|
|
973
1886
|
rx: "9",
|
|
974
|
-
className:
|
|
1887
|
+
className: css.nodeHalo,
|
|
975
1888
|
filter: selected ? "url(#mnemon-glow)" : void 0
|
|
976
1889
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
977
1890
|
r: selected ? 6 : 5,
|
|
978
|
-
className:
|
|
1891
|
+
className: css.nodeCore
|
|
979
1892
|
})] }) : graphNodeKind(node) === "entity" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
980
1893
|
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:
|
|
1894
|
+
className: css.nodeHalo,
|
|
982
1895
|
filter: selected ? "url(#mnemon-glow)" : void 0
|
|
983
1896
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
984
1897
|
r: selected ? 5 : 4,
|
|
985
|
-
className:
|
|
1898
|
+
className: css.nodeCore
|
|
986
1899
|
})] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
987
1900
|
r: selected ? 17 : visibleNodes.length <= 12 ? 14 : 11,
|
|
988
|
-
className:
|
|
1901
|
+
className: css.nodeHalo,
|
|
989
1902
|
filter: selected ? "url(#mnemon-glow)" : void 0
|
|
990
1903
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
991
1904
|
r: selected ? 7 : visibleNodes.length <= 12 ? 6 : 4.5,
|
|
992
|
-
className:
|
|
1905
|
+
className: css.nodeCore
|
|
993
1906
|
})] }),
|
|
994
1907
|
(selected || visibleNodes.length <= 12) && graphNodeKind(node) === "memory" && node.memoryBodyName !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("text", {
|
|
995
1908
|
x: "0",
|
|
996
1909
|
y: "-18",
|
|
997
1910
|
textAnchor: "middle",
|
|
998
|
-
className:
|
|
1911
|
+
className: css.nodeBodyLabel,
|
|
999
1912
|
children: (0, dsh_mnemon_client.short)(node.memoryBodyName, 12)
|
|
1000
1913
|
}),
|
|
1001
1914
|
showLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("text", {
|
|
1002
1915
|
x: visibleNodes.length <= 12 ? 19 : 15,
|
|
1003
1916
|
y: "4",
|
|
1004
|
-
className:
|
|
1917
|
+
className: css.nodeLabel,
|
|
1005
1918
|
children: (0, dsh_mnemon_client.short)(node.content.replace(/\s+/gu, " "), selected ? 34 : visibleNodes.length <= 12 ? 26 : 19)
|
|
1006
1919
|
})
|
|
1007
1920
|
]
|
|
@@ -1011,10 +1924,10 @@ window.__ModuleLoader__.load({
|
|
|
1011
1924
|
})] });
|
|
1012
1925
|
}
|
|
1013
1926
|
function OverviewPage(props) {
|
|
1014
|
-
const t =
|
|
1927
|
+
const t = useT();
|
|
1015
1928
|
const locale = (0, dsh_mnemon_client.useLocale)();
|
|
1016
|
-
const
|
|
1017
|
-
const
|
|
1929
|
+
const spaceCreateFormId = (0, react.useId)();
|
|
1930
|
+
const spaceEditFormId = (0, react.useId)();
|
|
1018
1931
|
const [graph, setGraph] = (0, react.useState)(null);
|
|
1019
1932
|
const [catalog, setCatalog] = (0, react.useState)(null);
|
|
1020
1933
|
const [selected, setSelected] = (0, react.useState)(null);
|
|
@@ -1023,22 +1936,22 @@ window.__ModuleLoader__.load({
|
|
|
1023
1936
|
const [graphLoading, setGraphLoading] = (0, react.useState)(true);
|
|
1024
1937
|
const [error, setError] = (0, react.useState)(null);
|
|
1025
1938
|
const [changing, setChanging] = (0, react.useState)(null);
|
|
1026
|
-
const [
|
|
1939
|
+
const [reconnectingSpace, setReconnectingSpace] = (0, react.useState)(null);
|
|
1027
1940
|
const [creating, setCreating] = (0, react.useState)(false);
|
|
1028
|
-
const [
|
|
1029
|
-
const [
|
|
1030
|
-
const [
|
|
1031
|
-
const [
|
|
1941
|
+
const [creatingSpaceOpen, setCreatingSpaceOpen] = (0, react.useState)(false);
|
|
1942
|
+
const [spaceName, setSpaceName] = (0, react.useState)("");
|
|
1943
|
+
const [spaceDescription, setSpaceDescription] = (0, react.useState)("");
|
|
1944
|
+
const [spaceProviderId, setSpaceProviderId] = (0, react.useState)("mnemon-native");
|
|
1032
1945
|
const [providerDrafts, setProviderDrafts] = (0, react.useState)({});
|
|
1033
1946
|
const [catalogUnavailable, setCatalogUnavailable] = (0, react.useState)(false);
|
|
1034
|
-
const [
|
|
1947
|
+
const [editingSpace, setEditingSpace] = (0, react.useState)(null);
|
|
1035
1948
|
const [editName, setEditName] = (0, react.useState)("");
|
|
1036
1949
|
const [editDescription, setEditDescription] = (0, react.useState)("");
|
|
1037
1950
|
const [editConnection, setEditConnection] = (0, react.useState)({});
|
|
1038
1951
|
const [editClearSecrets, setEditClearSecrets] = (0, react.useState)([]);
|
|
1039
|
-
const [
|
|
1040
|
-
const [
|
|
1041
|
-
const [
|
|
1952
|
+
const [savingSpace, setSavingSpace] = (0, react.useState)(null);
|
|
1953
|
+
const [confirmingDeleteSpace, setConfirmingDeleteSpace] = (0, react.useState)(null);
|
|
1954
|
+
const [deletingSpace, setDeletingSpace] = (0, react.useState)(null);
|
|
1042
1955
|
const [preview, setPreview] = (0, react.useState)(null);
|
|
1043
1956
|
const [metadataOpen, setMetadataOpen] = (0, react.useState)(false);
|
|
1044
1957
|
const [metadataSelection, setMetadataSelection] = (0, react.useState)([]);
|
|
@@ -1151,8 +2064,8 @@ window.__ModuleLoader__.load({
|
|
|
1151
2064
|
}
|
|
1152
2065
|
};
|
|
1153
2066
|
const reconnect = async (body) => {
|
|
1154
|
-
if (
|
|
1155
|
-
|
|
2067
|
+
if (reconnectingSpace !== null || editingSpace !== null || deletingSpace !== null) return;
|
|
2068
|
+
setReconnectingSpace(body.id);
|
|
1156
2069
|
setError(null);
|
|
1157
2070
|
setCatalog((current) => current === null ? current : {
|
|
1158
2071
|
...current,
|
|
@@ -1181,21 +2094,21 @@ window.__ModuleLoader__.load({
|
|
|
1181
2094
|
});
|
|
1182
2095
|
setError(failure);
|
|
1183
2096
|
} finally {
|
|
1184
|
-
|
|
2097
|
+
setReconnectingSpace(null);
|
|
1185
2098
|
}
|
|
1186
2099
|
};
|
|
1187
2100
|
const beginEdit = (body) => {
|
|
1188
|
-
|
|
2101
|
+
setEditingSpace(body.id);
|
|
1189
2102
|
setEditName(body.name);
|
|
1190
2103
|
setEditDescription(body.description ?? "");
|
|
1191
2104
|
setError(null);
|
|
1192
|
-
setEditConnection(
|
|
2105
|
+
setEditConnection(nativeSpaceProvider(body.provider) ? {} : { ...body.provider.settings });
|
|
1193
2106
|
setEditClearSecrets([]);
|
|
1194
2107
|
};
|
|
1195
2108
|
const saveEdit = async (event, body) => {
|
|
1196
2109
|
event.preventDefault();
|
|
1197
2110
|
if (editName.trim() === "") return;
|
|
1198
|
-
|
|
2111
|
+
setSavingSpace(body.id);
|
|
1199
2112
|
setError(null);
|
|
1200
2113
|
try {
|
|
1201
2114
|
const descriptor = catalog?.providers.find((provider) => provider.id === body.provider.id);
|
|
@@ -1205,39 +2118,39 @@ window.__ModuleLoader__.load({
|
|
|
1205
2118
|
await props.client.updateBody(body.id, {
|
|
1206
2119
|
name: editName,
|
|
1207
2120
|
description: editDescription,
|
|
1208
|
-
...
|
|
2121
|
+
...nativeSpaceProvider(body.provider) ? {} : {
|
|
1209
2122
|
connection,
|
|
1210
2123
|
...editClearSecrets.length === 0 ? {} : { clearSecrets: editClearSecrets }
|
|
1211
2124
|
}
|
|
1212
2125
|
});
|
|
1213
|
-
|
|
2126
|
+
setEditingSpace(null);
|
|
1214
2127
|
await load(true);
|
|
1215
2128
|
props.onMutate();
|
|
1216
2129
|
} catch (reason) {
|
|
1217
2130
|
setError((0, dsh_mnemon_client.message)(reason));
|
|
1218
2131
|
} finally {
|
|
1219
|
-
|
|
2132
|
+
setSavingSpace(null);
|
|
1220
2133
|
}
|
|
1221
2134
|
};
|
|
1222
2135
|
const create = async (event) => {
|
|
1223
2136
|
event.preventDefault();
|
|
1224
2137
|
const providers = catalog?.providers ?? [];
|
|
1225
|
-
const manualProvider = providers.find((provider) => provider.id ===
|
|
1226
|
-
if (
|
|
2138
|
+
const manualProvider = providers.find((provider) => provider.id === spaceProviderId);
|
|
2139
|
+
if (spaceName.trim() === "" || spaceDescription.trim() === "" || !providerDraftComplete(manualProvider, providerDrafts[spaceProviderId])) return;
|
|
1227
2140
|
setCreating(true);
|
|
1228
2141
|
setError(null);
|
|
1229
2142
|
try {
|
|
1230
2143
|
await props.client.createBody({
|
|
1231
|
-
name:
|
|
1232
|
-
description:
|
|
1233
|
-
providerId:
|
|
1234
|
-
...manualProvider?.origin === "native" ? {} : { connection: providerDrafts[
|
|
2144
|
+
name: spaceName,
|
|
2145
|
+
description: spaceDescription,
|
|
2146
|
+
providerId: spaceProviderId,
|
|
2147
|
+
...manualProvider?.origin === "native" ? {} : { connection: providerDrafts[spaceProviderId] ?? {} }
|
|
1235
2148
|
});
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
2149
|
+
setSpaceName("");
|
|
2150
|
+
setSpaceDescription("");
|
|
2151
|
+
setSpaceProviderId(providers.find((provider) => provider.origin === "native")?.id ?? providers[0]?.id ?? "mnemon-native");
|
|
1239
2152
|
setProviderDrafts((current) => Object.fromEntries(providers.map((provider) => [provider.id, Object.fromEntries(Object.entries(current[provider.id] ?? {}).map(([key, value]) => [key, provider.fields.some((field) => field.key === key && field.input === "secret") ? "" : value]))])));
|
|
1240
|
-
|
|
2153
|
+
setCreatingSpaceOpen(false);
|
|
1241
2154
|
await load(true);
|
|
1242
2155
|
props.onMutate();
|
|
1243
2156
|
} catch (reason) {
|
|
@@ -1247,17 +2160,17 @@ window.__ModuleLoader__.load({
|
|
|
1247
2160
|
}
|
|
1248
2161
|
};
|
|
1249
2162
|
const deleteBody = async (body) => {
|
|
1250
|
-
|
|
2163
|
+
setDeletingSpace(body.id);
|
|
1251
2164
|
setError(null);
|
|
1252
2165
|
try {
|
|
1253
2166
|
await props.client.deleteBody(body.id);
|
|
1254
|
-
|
|
2167
|
+
setConfirmingDeleteSpace(null);
|
|
1255
2168
|
await load(true);
|
|
1256
2169
|
props.onMutate();
|
|
1257
2170
|
} catch (reason) {
|
|
1258
2171
|
setError((0, dsh_mnemon_client.message)(reason));
|
|
1259
2172
|
} finally {
|
|
1260
|
-
|
|
2173
|
+
setDeletingSpace(null);
|
|
1261
2174
|
}
|
|
1262
2175
|
};
|
|
1263
2176
|
const maintainMetadata = () => {
|
|
@@ -1307,8 +2220,8 @@ window.__ModuleLoader__.load({
|
|
|
1307
2220
|
const graphSources = graph?.sources ?? [];
|
|
1308
2221
|
const onlyQueryOrUnsupported = graphSources.length > 0 && graphSources.every((source) => source.mode === "query-only" || source.mode === "unsupported" || source.status === "unavailable");
|
|
1309
2222
|
const selectedKind = selected === null ? null : graphNodeKind(selected);
|
|
1310
|
-
const
|
|
1311
|
-
const
|
|
2223
|
+
const editingSpaceView = editingSpace === null ? void 0 : catalog?.items.find((body) => body.id === editingSpace);
|
|
2224
|
+
const deletingSpaceView = confirmingDeleteSpace === null ? void 0 : catalog?.items.find((body) => body.id === confirmingDeleteSpace);
|
|
1312
2225
|
const providers = catalog?.providers ?? [];
|
|
1313
2226
|
const metadataCandidates = (catalog?.items ?? props.fallbackBodies).filter((body) => body.active && body.providerEnabled !== false);
|
|
1314
2227
|
const metadataRunningCount = Object.values(metadataTasks).filter((task) => task.status === "running").length;
|
|
@@ -1338,9 +2251,9 @@ window.__ModuleLoader__.load({
|
|
|
1338
2251
|
if (hours < 24) return t("overview.fullSyncHours", { count: hours });
|
|
1339
2252
|
return t("overview.fullSyncDays", { count: Math.floor(hours / 24) });
|
|
1340
2253
|
})();
|
|
1341
|
-
const selectedProvider = providers.find((provider) => provider.id ===
|
|
1342
|
-
const
|
|
1343
|
-
const
|
|
2254
|
+
const selectedProvider = providers.find((provider) => provider.id === spaceProviderId);
|
|
2255
|
+
const nativeSpaceCount = catalog?.items.filter((body) => nativeSpaceProvider(body.provider)).length ?? 0;
|
|
2256
|
+
const canDeleteSpace = (body) => !nativeSpaceProvider(body.provider) || nativeSpaceCount > 1;
|
|
1344
2257
|
const updateProviderDraft = (providerId, key, value) => setProviderDrafts((current) => ({
|
|
1345
2258
|
...current,
|
|
1346
2259
|
[providerId]: {
|
|
@@ -1349,7 +2262,7 @@ window.__ModuleLoader__.load({
|
|
|
1349
2262
|
}
|
|
1350
2263
|
}));
|
|
1351
2264
|
const placementReceipt = (body) => body.placement === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1352
|
-
className:
|
|
2265
|
+
className: css.placementReceipt,
|
|
1353
2266
|
title: body.placement.reason,
|
|
1354
2267
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1355
2268
|
"aria-hidden": "true",
|
|
@@ -1360,9 +2273,9 @@ window.__ModuleLoader__.load({
|
|
|
1360
2273
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: body.placement.reason })
|
|
1361
2274
|
] })]
|
|
1362
2275
|
});
|
|
1363
|
-
const
|
|
1364
|
-
id:
|
|
1365
|
-
className:
|
|
2276
|
+
const spaceEditForm = (body) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
2277
|
+
id: spaceEditFormId,
|
|
2278
|
+
className: css.bodyEdit,
|
|
1366
2279
|
onSubmit: (event) => void saveEdit(event, body),
|
|
1367
2280
|
children: [
|
|
1368
2281
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("overview.editName"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
@@ -1379,7 +2292,7 @@ window.__ModuleLoader__.load({
|
|
|
1379
2292
|
rows: 4,
|
|
1380
2293
|
maxLength: 1e3
|
|
1381
2294
|
})] }),
|
|
1382
|
-
!
|
|
2295
|
+
!nativeSpaceProvider(body.provider) && (() => {
|
|
1383
2296
|
const descriptor = providers.find((provider) => provider.id === body.provider.id);
|
|
1384
2297
|
return descriptor === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderMemoryFields, {
|
|
1385
2298
|
provider: descriptor,
|
|
@@ -1395,29 +2308,29 @@ window.__ModuleLoader__.load({
|
|
|
1395
2308
|
})()
|
|
1396
2309
|
]
|
|
1397
2310
|
});
|
|
1398
|
-
const
|
|
1399
|
-
id:
|
|
1400
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
2311
|
+
const spaceCreateForm = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
2312
|
+
id: spaceCreateFormId,
|
|
2313
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.bodyEdit, css.spaceCreateForm),
|
|
1401
2314
|
onSubmit: (event) => void create(event),
|
|
1402
2315
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1403
|
-
className:
|
|
2316
|
+
className: css.createSection,
|
|
1404
2317
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1405
|
-
className:
|
|
2318
|
+
className: css.createSectionHeading,
|
|
1406
2319
|
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
2320
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1408
|
-
className:
|
|
2321
|
+
className: css.createIdentityGrid,
|
|
1409
2322
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("overview.createName"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
1410
2323
|
"data-autofocus": true,
|
|
1411
2324
|
"aria-label": t("overview.createName"),
|
|
1412
|
-
value:
|
|
1413
|
-
onChange: (event) =>
|
|
2325
|
+
value: spaceName,
|
|
2326
|
+
onChange: (event) => setSpaceName(event.target.value),
|
|
1414
2327
|
placeholder: t("overview.createNamePlaceholder"),
|
|
1415
2328
|
maxLength: 100,
|
|
1416
2329
|
required: true
|
|
1417
2330
|
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("overview.createDescription"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
1418
2331
|
"aria-label": t("overview.createDescription"),
|
|
1419
|
-
value:
|
|
1420
|
-
onChange: (event) =>
|
|
2332
|
+
value: spaceDescription,
|
|
2333
|
+
onChange: (event) => setSpaceDescription(event.target.value),
|
|
1421
2334
|
placeholder: t("overview.createDescriptionPlaceholder"),
|
|
1422
2335
|
rows: 3,
|
|
1423
2336
|
maxLength: 1e3,
|
|
@@ -1425,18 +2338,18 @@ window.__ModuleLoader__.load({
|
|
|
1425
2338
|
})] })]
|
|
1426
2339
|
})]
|
|
1427
2340
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1428
|
-
className:
|
|
2341
|
+
className: css.createSection,
|
|
1429
2342
|
children: [
|
|
1430
2343
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1431
|
-
className:
|
|
2344
|
+
className: css.createSectionHeading,
|
|
1432
2345
|
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
2346
|
}),
|
|
1434
2347
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
|
|
1435
|
-
className:
|
|
2348
|
+
className: css.providerChoice,
|
|
1436
2349
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: t("overview.providerLabel") }), providers.map((provider) => {
|
|
1437
2350
|
const serviceMissing = provider.origin !== "native" && provider.serviceConfigured === false;
|
|
1438
2351
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
1439
|
-
"data-selected":
|
|
2352
|
+
"data-selected": spaceProviderId === provider.id || void 0,
|
|
1440
2353
|
"data-native": provider.origin === "native" || void 0,
|
|
1441
2354
|
"data-disabled": serviceMissing || void 0,
|
|
1442
2355
|
children: [
|
|
@@ -1444,18 +2357,18 @@ window.__ModuleLoader__.load({
|
|
|
1444
2357
|
type: "radio",
|
|
1445
2358
|
name: "memory-provider",
|
|
1446
2359
|
value: provider.id,
|
|
1447
|
-
checked:
|
|
2360
|
+
checked: spaceProviderId === provider.id,
|
|
1448
2361
|
disabled: serviceMissing,
|
|
1449
|
-
onChange: () =>
|
|
2362
|
+
onChange: () => setSpaceProviderId(provider.id)
|
|
1450
2363
|
}),
|
|
1451
2364
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderIcon, {
|
|
1452
2365
|
providerId: provider.id,
|
|
1453
2366
|
icon: provider.icon,
|
|
1454
|
-
className:
|
|
2367
|
+
className: css.providerChoiceIcon
|
|
1455
2368
|
}),
|
|
1456
2369
|
/* @__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
2370
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
1458
|
-
className:
|
|
2371
|
+
className: css.choiceControl,
|
|
1459
2372
|
"data-kind": "radio",
|
|
1460
2373
|
"aria-hidden": "true"
|
|
1461
2374
|
})
|
|
@@ -1471,24 +2384,24 @@ window.__ModuleLoader__.load({
|
|
|
1471
2384
|
]
|
|
1472
2385
|
})]
|
|
1473
2386
|
});
|
|
1474
|
-
const
|
|
2387
|
+
const spaceToggle = (body) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
1475
2388
|
type: "button",
|
|
1476
|
-
className:
|
|
2389
|
+
className: css.bodySwitch,
|
|
1477
2390
|
role: "switch",
|
|
1478
2391
|
"aria-checked": body.active,
|
|
1479
2392
|
"aria-label": t("overview.toggleAria", { name: body.name }),
|
|
1480
|
-
disabled: !props.activationEnabled || changing === body.id ||
|
|
2393
|
+
disabled: !props.activationEnabled || changing === body.id || deletingSpace === body.id,
|
|
1481
2394
|
onClick: () => void toggle(body),
|
|
1482
2395
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1483
|
-
className:
|
|
2396
|
+
className: css.bodySwitchTrack,
|
|
1484
2397
|
"aria-hidden": "true",
|
|
1485
2398
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {})
|
|
1486
2399
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: changing === body.id ? t("overview.toggling") : body.active ? t("common.active") : t("common.inactive") })]
|
|
1487
2400
|
});
|
|
1488
|
-
const
|
|
1489
|
-
const
|
|
2401
|
+
const spaceEditActionClass = (0, dsh_mnemon_client.appearanceClass)(css.ghostButton, (0, dsh_mnemon_client.appearanceClass)(sidebarCss.itemActionButton, sidebarCss.itemEditAction));
|
|
2402
|
+
const spaceDeleteActionClass = (0, dsh_mnemon_client.appearanceClass)(css.dangerButton, (0, dsh_mnemon_client.appearanceClass)(sidebarCss.itemActionButton, sidebarCss.itemDangerAction));
|
|
1490
2403
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1491
|
-
className:
|
|
2404
|
+
className: css.page,
|
|
1492
2405
|
children: [
|
|
1493
2406
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.PageHeader, {
|
|
1494
2407
|
title: t("nav.overview"),
|
|
@@ -1497,36 +2410,36 @@ window.__ModuleLoader__.load({
|
|
|
1497
2410
|
...loading ? { loadingLabel: catalogLoading ? t("overview.directoryLoading") : graphLoading ? t("overview.snapshotLoading") : t("overview.healthLoading") } : {},
|
|
1498
2411
|
action: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1499
2412
|
type: "button",
|
|
1500
|
-
className:
|
|
2413
|
+
className: css.secondaryButton,
|
|
1501
2414
|
disabled: loading,
|
|
1502
2415
|
onClick: () => void load(),
|
|
1503
2416
|
children: loading ? t("overview.syncing") : t("overview.syncNow")
|
|
1504
2417
|
})
|
|
1505
2418
|
}),
|
|
1506
2419
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1507
|
-
className:
|
|
2420
|
+
className: css.inlineError,
|
|
1508
2421
|
role: "alert",
|
|
1509
2422
|
children: error
|
|
1510
2423
|
}),
|
|
1511
2424
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1512
|
-
className:
|
|
2425
|
+
className: css.bodyDirectory,
|
|
1513
2426
|
"aria-label": t("overview.directory"),
|
|
1514
2427
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1515
|
-
className:
|
|
2428
|
+
className: css.bodyDirectoryHeader,
|
|
1516
2429
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
|
|
1517
2430
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: t("overview.directory") }),
|
|
1518
2431
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("overview.directory.description") }),
|
|
1519
2432
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
|
|
1520
|
-
className:
|
|
2433
|
+
className: css.bodyDirectoryPath,
|
|
1521
2434
|
children: catalogUnavailable ? t("overview.directory.unsynced") : catalog?.directory || props.fallbackDirectory || t("overview.directory.waiting")
|
|
1522
2435
|
})
|
|
1523
2436
|
] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1524
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
2437
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.bodyDirectoryControls, sidebarCss.bodyDirectoryActions),
|
|
1525
2438
|
children: [
|
|
1526
2439
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: catalogUnavailable ? t("overview.directory.unsyncedBadge") : `${catalog?.activeCount ?? "—"} / ${catalog?.total ?? "—"} ${t("common.active")}` }),
|
|
1527
2440
|
props.writeEnabled && !catalogUnavailable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1528
2441
|
type: "button",
|
|
1529
|
-
className:
|
|
2442
|
+
className: spaceEditActionClass,
|
|
1530
2443
|
title: !props.agentAvailable ? t("overview.metadataUnavailable") : void 0,
|
|
1531
2444
|
onClick: () => {
|
|
1532
2445
|
setMetadataSelection([]);
|
|
@@ -1538,27 +2451,27 @@ window.__ModuleLoader__.load({
|
|
|
1538
2451
|
}),
|
|
1539
2452
|
props.writeEnabled && !catalogUnavailable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1540
2453
|
type: "button",
|
|
1541
|
-
className:
|
|
1542
|
-
onClick: () =>
|
|
2454
|
+
className: spaceEditActionClass,
|
|
2455
|
+
onClick: () => setCreatingSpaceOpen(true),
|
|
1543
2456
|
children: t("overview.createTitle")
|
|
1544
2457
|
})
|
|
1545
2458
|
]
|
|
1546
2459
|
})]
|
|
1547
2460
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1548
|
-
className:
|
|
2461
|
+
className: css.bodyGrid,
|
|
1549
2462
|
children: [catalog?.items.map((body) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("article", {
|
|
1550
|
-
className:
|
|
2463
|
+
className: css.bodyCard,
|
|
1551
2464
|
"data-provider": body.provider.id,
|
|
1552
2465
|
"data-active": body.active || void 0,
|
|
1553
2466
|
"data-healthy": !body.statusLoading && body.healthy || void 0,
|
|
1554
2467
|
"data-status-loading": body.statusLoading || void 0,
|
|
1555
2468
|
"data-reconnectable": "",
|
|
1556
|
-
"data-reconnecting":
|
|
2469
|
+
"data-reconnecting": reconnectingSpace === body.id || void 0,
|
|
1557
2470
|
"data-mnemon-default": body.mnemonDefault || void 0,
|
|
1558
2471
|
"data-editing": void 0,
|
|
1559
2472
|
tabIndex: 0,
|
|
1560
2473
|
"aria-label": t("overview.reconnectAria", { name: body.name }),
|
|
1561
|
-
title:
|
|
2474
|
+
title: reconnectingSpace === body.id ? t("overview.reconnecting") : body.error ?? t("overview.reconnectHint"),
|
|
1562
2475
|
onClick: (event) => {
|
|
1563
2476
|
if (event.target instanceof Element && event.target.closest("button, input, textarea, select, label, a, [role=\"switch\"]") !== null) return;
|
|
1564
2477
|
reconnect(body);
|
|
@@ -1570,11 +2483,11 @@ window.__ModuleLoader__.load({
|
|
|
1570
2483
|
},
|
|
1571
2484
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
1572
2485
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1573
|
-
className:
|
|
2486
|
+
className: sidebarCss.bodyCardHeader,
|
|
1574
2487
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1575
|
-
className:
|
|
1576
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
1577
|
-
className:
|
|
2488
|
+
className: sidebarCss.bodyCardIdentity,
|
|
2489
|
+
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", {
|
|
2490
|
+
className: sidebarCss.bodyCardMeta,
|
|
1578
2491
|
children: [
|
|
1579
2492
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: body.id }),
|
|
1580
2493
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemoryProviderBadge, {
|
|
@@ -1582,16 +2495,16 @@ window.__ModuleLoader__.load({
|
|
|
1582
2495
|
label: body.provider.label
|
|
1583
2496
|
}),
|
|
1584
2497
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
1585
|
-
className:
|
|
1586
|
-
children:
|
|
2498
|
+
className: css.bodyHealth,
|
|
2499
|
+
children: reconnectingSpace === body.id ? t("overview.reconnecting") : body.statusLoading ? t("overview.storageChecking") : body.healthy ? t("overview.storageHealthy") : t("overview.storageUnhealthy")
|
|
1587
2500
|
}),
|
|
1588
2501
|
body.mnemonDefault && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
1589
|
-
className:
|
|
2502
|
+
className: css.mnemonDefaultBadge,
|
|
1590
2503
|
children: t("overview.mnemonDefault")
|
|
1591
2504
|
})
|
|
1592
2505
|
]
|
|
1593
2506
|
})] })]
|
|
1594
|
-
}),
|
|
2507
|
+
}), spaceToggle(body)]
|
|
1595
2508
|
}),
|
|
1596
2509
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1597
2510
|
title: body.description || t("overview.noDescription"),
|
|
@@ -1599,93 +2512,93 @@ window.__ModuleLoader__.load({
|
|
|
1599
2512
|
}),
|
|
1600
2513
|
placementReceipt(body),
|
|
1601
2514
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("footer", {
|
|
1602
|
-
className:
|
|
2515
|
+
className: sidebarCss.bodyCardFooter,
|
|
1603
2516
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1604
|
-
className:
|
|
1605
|
-
children: !
|
|
1606
|
-
className:
|
|
2517
|
+
className: sidebarCss.bodyCardStats,
|
|
2518
|
+
children: !nativeSpaceProvider(body.provider) ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2519
|
+
className: css.bodyFooterBlock,
|
|
1607
2520
|
title: t(body.provider.kind === "remote" ? "overview.providerRemote" : "overview.providerLocal"),
|
|
1608
2521
|
children: t(body.provider.kind === "remote" ? "overview.providerRemote" : "overview.providerLocal")
|
|
1609
2522
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1610
|
-
className: `${
|
|
2523
|
+
className: `${css.bodyFooterBlock} ${css.bodyFooterGrow}`,
|
|
1611
2524
|
title: body.provider.location || body.provider.label,
|
|
1612
2525
|
children: body.provider.location || body.provider.label
|
|
1613
2526
|
})] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
1614
2527
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1615
|
-
className:
|
|
2528
|
+
className: css.bodyFooterBlock,
|
|
1616
2529
|
title: t("common.memories", { count: body.stats?.totalInsights ?? 0 }),
|
|
1617
2530
|
children: t("common.memories", { count: body.stats?.totalInsights ?? 0 })
|
|
1618
2531
|
}),
|
|
1619
2532
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1620
|
-
className:
|
|
2533
|
+
className: css.bodyFooterBlock,
|
|
1621
2534
|
title: t("common.edges", { count: body.stats?.edgeCount ?? 0 }),
|
|
1622
2535
|
children: t("common.edges", { count: body.stats?.edgeCount ?? 0 })
|
|
1623
2536
|
}),
|
|
1624
2537
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1625
|
-
className:
|
|
2538
|
+
className: css.bodyFooterBlock,
|
|
1626
2539
|
title: (0, dsh_mnemon_client.humanBytes)(body.stats?.dbSizeBytes ?? 0),
|
|
1627
2540
|
children: (0, dsh_mnemon_client.humanBytes)(body.stats?.dbSizeBytes ?? 0)
|
|
1628
2541
|
})
|
|
1629
2542
|
] })
|
|
1630
2543
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1631
|
-
className:
|
|
2544
|
+
className: css.bodyCardActions,
|
|
1632
2545
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1633
2546
|
type: "button",
|
|
1634
|
-
className:
|
|
1635
|
-
"aria-label": t("overview.
|
|
1636
|
-
disabled: !props.writeEnabled ||
|
|
2547
|
+
className: spaceEditActionClass,
|
|
2548
|
+
"aria-label": t("overview.editSpaceAria", { name: body.name }),
|
|
2549
|
+
disabled: !props.writeEnabled || deletingSpace === body.id,
|
|
1637
2550
|
onClick: () => beginEdit(body),
|
|
1638
|
-
children: t("overview.
|
|
2551
|
+
children: t("overview.editSpace")
|
|
1639
2552
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1640
2553
|
type: "button",
|
|
1641
|
-
className:
|
|
1642
|
-
"aria-label": t(!
|
|
1643
|
-
title:
|
|
1644
|
-
disabled: !props.writeEnabled ||
|
|
1645
|
-
onClick: () =>
|
|
1646
|
-
children: !
|
|
2554
|
+
className: spaceDeleteActionClass,
|
|
2555
|
+
"aria-label": t(!nativeSpaceProvider(body.provider) ? "overview.disconnectSpaceAria" : "overview.deleteSpaceAria", { name: body.name }),
|
|
2556
|
+
title: canDeleteSpace(body) ? void 0 : t("overview.lastStoreDeleteHint"),
|
|
2557
|
+
disabled: !props.writeEnabled || deletingSpace === body.id || !canDeleteSpace(body),
|
|
2558
|
+
onClick: () => setConfirmingDeleteSpace(body.id),
|
|
2559
|
+
children: !nativeSpaceProvider(body.provider) ? t("overview.disconnectSpace") : t("overview.deleteSpace")
|
|
1647
2560
|
})]
|
|
1648
2561
|
})]
|
|
1649
2562
|
})
|
|
1650
2563
|
] })
|
|
1651
2564
|
}, body.id)), catalog?.total === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1652
|
-
className:
|
|
2565
|
+
className: css.bodyDirectoryEmpty,
|
|
1653
2566
|
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
2567
|
})]
|
|
1655
2568
|
})]
|
|
1656
2569
|
}),
|
|
1657
2570
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1658
|
-
className:
|
|
2571
|
+
className: css.asyncRegion,
|
|
1659
2572
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ReadSourcePanel, {
|
|
1660
2573
|
title: t("overview.snapshotSources"),
|
|
1661
2574
|
hint: t("overview.snapshotSourcesHint"),
|
|
1662
2575
|
sources: graphSources
|
|
1663
2576
|
})
|
|
1664
2577
|
}),
|
|
1665
|
-
|
|
2578
|
+
creatingSpaceOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SidebarModal, {
|
|
1666
2579
|
title: t("overview.createTitle"),
|
|
1667
2580
|
description: t("overview.createDialogHint"),
|
|
1668
2581
|
busy: creating,
|
|
1669
2582
|
wide: true,
|
|
1670
|
-
onClose: () =>
|
|
2583
|
+
onClose: () => setCreatingSpaceOpen(false),
|
|
1671
2584
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1672
|
-
className:
|
|
2585
|
+
className: css.modalFooterActions,
|
|
1673
2586
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1674
2587
|
type: "button",
|
|
1675
2588
|
"data-dialog-close": true,
|
|
1676
|
-
className:
|
|
2589
|
+
className: css.ghostButton,
|
|
1677
2590
|
disabled: creating,
|
|
1678
|
-
onClick: () =>
|
|
2591
|
+
onClick: () => setCreatingSpaceOpen(false),
|
|
1679
2592
|
children: t("common.cancel")
|
|
1680
2593
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1681
2594
|
type: "submit",
|
|
1682
|
-
form:
|
|
1683
|
-
className:
|
|
1684
|
-
disabled: creating ||
|
|
2595
|
+
form: spaceCreateFormId,
|
|
2596
|
+
className: css.primaryButton,
|
|
2597
|
+
disabled: creating || spaceName.trim() === "" || spaceDescription.trim() === "" || !providerDraftComplete(selectedProvider, providerDrafts[spaceProviderId]),
|
|
1685
2598
|
children: creating ? t("overview.creating") : t("overview.createAction")
|
|
1686
2599
|
})]
|
|
1687
2600
|
}),
|
|
1688
|
-
children:
|
|
2601
|
+
children: spaceCreateForm
|
|
1689
2602
|
}),
|
|
1690
2603
|
metadataOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SidebarModal, {
|
|
1691
2604
|
title: t("overview.metadataTitle"),
|
|
@@ -1694,20 +2607,20 @@ window.__ModuleLoader__.load({
|
|
|
1694
2607
|
wide: true,
|
|
1695
2608
|
onClose: () => setMetadataOpen(false),
|
|
1696
2609
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1697
|
-
className:
|
|
2610
|
+
className: css.modalFooterNote,
|
|
1698
2611
|
children: t("overview.metadataSafety")
|
|
1699
2612
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1700
|
-
className:
|
|
2613
|
+
className: css.modalFooterActions,
|
|
1701
2614
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1702
2615
|
type: "button",
|
|
1703
2616
|
"data-dialog-close": true,
|
|
1704
|
-
className:
|
|
2617
|
+
className: css.ghostButton,
|
|
1705
2618
|
disabled: metadataBusy,
|
|
1706
2619
|
onClick: () => setMetadataOpen(false),
|
|
1707
2620
|
children: t("common.cancel")
|
|
1708
2621
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1709
2622
|
type: "button",
|
|
1710
|
-
className:
|
|
2623
|
+
className: css.primaryButton,
|
|
1711
2624
|
disabled: !props.agentAvailable || metadataSelection.length === 0,
|
|
1712
2625
|
title: !props.agentAvailable ? t("overview.metadataUnavailable") : void 0,
|
|
1713
2626
|
onClick: maintainMetadata,
|
|
@@ -1715,28 +2628,28 @@ window.__ModuleLoader__.load({
|
|
|
1715
2628
|
})]
|
|
1716
2629
|
})] }),
|
|
1717
2630
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1718
|
-
className:
|
|
2631
|
+
className: css.metadataDialog,
|
|
1719
2632
|
children: [
|
|
1720
2633
|
!props.agentAvailable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1721
|
-
className:
|
|
2634
|
+
className: css.inlineError,
|
|
1722
2635
|
role: "status",
|
|
1723
2636
|
children: t("overview.metadataUnavailable")
|
|
1724
2637
|
}),
|
|
1725
2638
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1726
|
-
className:
|
|
2639
|
+
className: css.metadataToolbar,
|
|
1727
2640
|
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
2641
|
type: "button",
|
|
1729
|
-
className:
|
|
2642
|
+
className: css.ghostButton,
|
|
1730
2643
|
disabled: metadataSelectable.length === 0,
|
|
1731
2644
|
onClick: () => setMetadataSelection(metadataAllSelected ? [] : metadataSelectable.map((body) => body.id)),
|
|
1732
2645
|
children: metadataAllSelected ? t("overview.metadataClear") : t("overview.metadataSelectAll")
|
|
1733
2646
|
})]
|
|
1734
2647
|
}),
|
|
1735
2648
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1736
|
-
className:
|
|
2649
|
+
className: css.metadataList,
|
|
1737
2650
|
"aria-live": "polite",
|
|
1738
2651
|
children: [metadataCandidates.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1739
|
-
className:
|
|
2652
|
+
className: css.metadataEmpty,
|
|
1740
2653
|
children: catalogLoading ? t("overview.metadataLoading") : t("overview.metadataEmpty")
|
|
1741
2654
|
}), metadataCandidates.map((body) => {
|
|
1742
2655
|
const selected = metadataSelection.includes(body.id);
|
|
@@ -1755,7 +2668,7 @@ window.__ModuleLoader__.load({
|
|
|
1755
2668
|
onChange: (event) => setMetadataSelection((current) => event.target.checked ? [.../* @__PURE__ */ new Set([...current, body.id])] : current.filter((id) => id !== body.id))
|
|
1756
2669
|
}),
|
|
1757
2670
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
1758
|
-
className:
|
|
2671
|
+
className: css.choiceControl,
|
|
1759
2672
|
"data-kind": "check",
|
|
1760
2673
|
"aria-hidden": "true"
|
|
1761
2674
|
}),
|
|
@@ -1766,7 +2679,7 @@ window.__ModuleLoader__.load({
|
|
|
1766
2679
|
providerId: body.provider.id,
|
|
1767
2680
|
label: body.provider.label
|
|
1768
2681
|
}), task === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: body.id }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
1769
|
-
className:
|
|
2682
|
+
className: css.metadataTaskStatus,
|
|
1770
2683
|
"data-status": task.status,
|
|
1771
2684
|
title: task.error,
|
|
1772
2685
|
children: task.status === "running" ? t("overview.metadataTaskRunning") : task.status === "success" ? t("overview.metadataTaskSuccess") : t("overview.metadataTaskError", { error: task.error ?? t("overview.metadataTaskUnknown") })
|
|
@@ -1779,80 +2692,80 @@ window.__ModuleLoader__.load({
|
|
|
1779
2692
|
]
|
|
1780
2693
|
})
|
|
1781
2694
|
}),
|
|
1782
|
-
|
|
1783
|
-
title: t("overview.
|
|
1784
|
-
description:
|
|
1785
|
-
busy:
|
|
1786
|
-
onClose: () =>
|
|
2695
|
+
editingSpaceView !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SidebarModal, {
|
|
2696
|
+
title: t("overview.editSpaceAria", { name: editingSpaceView.name }),
|
|
2697
|
+
description: editingSpaceView.id,
|
|
2698
|
+
busy: savingSpace === editingSpaceView.id,
|
|
2699
|
+
onClose: () => setEditingSpace(null),
|
|
1787
2700
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1788
|
-
className:
|
|
2701
|
+
className: css.modalFooterActions,
|
|
1789
2702
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1790
2703
|
type: "button",
|
|
1791
2704
|
"data-dialog-close": true,
|
|
1792
|
-
className:
|
|
1793
|
-
disabled:
|
|
1794
|
-
onClick: () =>
|
|
2705
|
+
className: css.ghostButton,
|
|
2706
|
+
disabled: savingSpace === editingSpaceView.id,
|
|
2707
|
+
onClick: () => setEditingSpace(null),
|
|
1795
2708
|
children: t("common.cancel")
|
|
1796
2709
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1797
2710
|
type: "submit",
|
|
1798
|
-
form:
|
|
1799
|
-
className:
|
|
1800
|
-
disabled:
|
|
1801
|
-
children:
|
|
2711
|
+
form: spaceEditFormId,
|
|
2712
|
+
className: css.primaryButton,
|
|
2713
|
+
disabled: savingSpace === editingSpaceView.id || editName.trim() === "",
|
|
2714
|
+
children: savingSpace === editingSpaceView.id ? t("overview.savingSpace") : t("overview.saveSpace")
|
|
1802
2715
|
})]
|
|
1803
2716
|
}),
|
|
1804
|
-
children:
|
|
2717
|
+
children: spaceEditForm(editingSpaceView)
|
|
1805
2718
|
}),
|
|
1806
|
-
|
|
1807
|
-
title: t(!
|
|
1808
|
-
description:
|
|
1809
|
-
busy:
|
|
1810
|
-
onClose: () =>
|
|
2719
|
+
deletingSpaceView !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SidebarModal, {
|
|
2720
|
+
title: t(!nativeSpaceProvider(deletingSpaceView.provider) ? "overview.disconnectTitle" : "overview.deleteTitle", { name: deletingSpaceView.name }),
|
|
2721
|
+
description: deletingSpaceView.id,
|
|
2722
|
+
busy: deletingSpace === deletingSpaceView.id,
|
|
2723
|
+
onClose: () => setConfirmingDeleteSpace(null),
|
|
1811
2724
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1812
|
-
className:
|
|
2725
|
+
className: css.modalFooterActions,
|
|
1813
2726
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1814
2727
|
type: "button",
|
|
1815
2728
|
"data-dialog-close": true,
|
|
1816
2729
|
"data-autofocus": true,
|
|
1817
|
-
className:
|
|
1818
|
-
disabled:
|
|
1819
|
-
onClick: () =>
|
|
2730
|
+
className: css.ghostButton,
|
|
2731
|
+
disabled: deletingSpace === deletingSpaceView.id,
|
|
2732
|
+
onClick: () => setConfirmingDeleteSpace(null),
|
|
1820
2733
|
children: t("common.cancel")
|
|
1821
2734
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1822
2735
|
type: "button",
|
|
1823
|
-
className:
|
|
1824
|
-
title:
|
|
1825
|
-
disabled:
|
|
1826
|
-
onClick: () => void deleteBody(
|
|
1827
|
-
children:
|
|
2736
|
+
className: css.dangerSolidButton,
|
|
2737
|
+
title: canDeleteSpace(deletingSpaceView) ? void 0 : t("overview.lastStoreDeleteHint"),
|
|
2738
|
+
disabled: deletingSpace === deletingSpaceView.id || !canDeleteSpace(deletingSpaceView),
|
|
2739
|
+
onClick: () => void deleteBody(deletingSpaceView),
|
|
2740
|
+
children: deletingSpace === deletingSpaceView.id ? t("overview.deletingSpace") : t(!nativeSpaceProvider(deletingSpaceView.provider) ? "overview.disconnectAction" : "overview.deleteAction")
|
|
1828
2741
|
})]
|
|
1829
2742
|
}),
|
|
1830
2743
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1831
|
-
className:
|
|
1832
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t(!
|
|
1833
|
-
className:
|
|
1834
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children:
|
|
1835
|
-
|
|
2744
|
+
className: css.bodyDeleteConfirm,
|
|
2745
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t(!nativeSpaceProvider(deletingSpaceView.provider) ? "overview.disconnectWarning" : "overview.deleteWarning", { provider: deletingSpaceView.provider.label }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2746
|
+
className: css.bodyDeleteSummary,
|
|
2747
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: deletingSpaceView.name }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
2748
|
+
deletingSpaceView.provider.label,
|
|
1836
2749
|
" · ",
|
|
1837
|
-
|
|
2750
|
+
deletingSpaceView.provider.location || t("common.memories", { count: deletingSpaceView.stats?.totalInsights ?? 0 })
|
|
1838
2751
|
] })]
|
|
1839
2752
|
})]
|
|
1840
2753
|
})
|
|
1841
2754
|
}),
|
|
1842
2755
|
!catalogUnavailable && graph !== null && graph.nodes.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1843
|
-
className:
|
|
2756
|
+
className: css.graphLayout,
|
|
1844
2757
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1845
|
-
className:
|
|
2758
|
+
className: css.graphPanel,
|
|
1846
2759
|
children: [
|
|
1847
2760
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1848
|
-
className:
|
|
2761
|
+
className: css.graphToolbar,
|
|
1849
2762
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
|
|
1850
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
2763
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: css.liveDot }),
|
|
1851
2764
|
t("overview.snapshot"),
|
|
1852
2765
|
" ",
|
|
1853
2766
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: generated })
|
|
1854
2767
|
] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1855
|
-
className:
|
|
2768
|
+
className: css.graphLegend,
|
|
1856
2769
|
children: [
|
|
1857
2770
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1858
2771
|
"data-edge": "scope",
|
|
@@ -1878,7 +2791,7 @@ window.__ModuleLoader__.load({
|
|
|
1878
2791
|
})]
|
|
1879
2792
|
}),
|
|
1880
2793
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1881
|
-
className:
|
|
2794
|
+
className: css.graphViewport,
|
|
1882
2795
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemoryGraph, {
|
|
1883
2796
|
graph,
|
|
1884
2797
|
selectedId: selected === null ? void 0 : graphNodeKey(selected),
|
|
@@ -1886,7 +2799,7 @@ window.__ModuleLoader__.load({
|
|
|
1886
2799
|
})
|
|
1887
2800
|
}),
|
|
1888
2801
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1889
|
-
className:
|
|
2802
|
+
className: css.graphFooter,
|
|
1890
2803
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("overview.graphComposition", {
|
|
1891
2804
|
spaces: graphSpaces,
|
|
1892
2805
|
memories: graphMemories,
|
|
@@ -1902,13 +2815,13 @@ window.__ModuleLoader__.load({
|
|
|
1902
2815
|
})
|
|
1903
2816
|
]
|
|
1904
2817
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
|
|
1905
|
-
className:
|
|
2818
|
+
className: css.graphInspector,
|
|
1906
2819
|
"data-empty": selected === null || void 0,
|
|
1907
2820
|
children: selected === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1908
|
-
className:
|
|
2821
|
+
className: css.inspectorEmpty,
|
|
1909
2822
|
children: [
|
|
1910
2823
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1911
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
2824
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.inspectorLogo, sidebarCss.inspectorGlyph),
|
|
1912
2825
|
"aria-hidden": "true",
|
|
1913
2826
|
children: "◇"
|
|
1914
2827
|
}),
|
|
@@ -1917,7 +2830,7 @@ window.__ModuleLoader__.load({
|
|
|
1917
2830
|
]
|
|
1918
2831
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
1919
2832
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1920
|
-
className:
|
|
2833
|
+
className: css.inspectorHeading,
|
|
1921
2834
|
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
2835
|
type: "button",
|
|
1923
2836
|
onClick: () => setSelected(null),
|
|
@@ -1926,9 +2839,9 @@ window.__ModuleLoader__.load({
|
|
|
1926
2839
|
})]
|
|
1927
2840
|
}),
|
|
1928
2841
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1929
|
-
className:
|
|
2842
|
+
className: css.inspectorChips,
|
|
1930
2843
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1931
|
-
className:
|
|
2844
|
+
className: css.categoryChip,
|
|
1932
2845
|
children: graphKindLabel(t, selected)
|
|
1933
2846
|
}), selected.memoryProviderId !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemoryProviderBadge, {
|
|
1934
2847
|
providerId: selected.memoryProviderId,
|
|
@@ -1936,13 +2849,13 @@ window.__ModuleLoader__.load({
|
|
|
1936
2849
|
})]
|
|
1937
2850
|
}),
|
|
1938
2851
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1939
|
-
className:
|
|
2852
|
+
className: css.inspectorTitleRow,
|
|
1940
2853
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
|
|
1941
|
-
className:
|
|
2854
|
+
className: css.inspectorTitle,
|
|
1942
2855
|
children: selected.content
|
|
1943
2856
|
}), selectedKind === "memory" && selected.content.length > 140 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1944
2857
|
type: "button",
|
|
1945
|
-
className:
|
|
2858
|
+
className: css.inspectorEye,
|
|
1946
2859
|
onClick: () => setPreview(selected),
|
|
1947
2860
|
"aria-label": t("overview.previewAria"),
|
|
1948
2861
|
title: t("overview.previewAria"),
|
|
@@ -1966,13 +2879,13 @@ window.__ModuleLoader__.load({
|
|
|
1966
2879
|
})]
|
|
1967
2880
|
}),
|
|
1968
2881
|
selectedKind === "space" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dl", {
|
|
1969
|
-
className:
|
|
2882
|
+
className: css.inspectorMeta,
|
|
1970
2883
|
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
2884
|
}) : selectedKind === "entity" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dl", {
|
|
1972
|
-
className:
|
|
2885
|
+
className: css.inspectorMeta,
|
|
1973
2886
|
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
2887
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dl", {
|
|
1975
|
-
className:
|
|
2888
|
+
className: css.inspectorMeta,
|
|
1976
2889
|
children: [
|
|
1977
2890
|
/* @__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
2891
|
selected.memoryBodyName ?? "—",
|
|
@@ -1984,15 +2897,15 @@ window.__ModuleLoader__.load({
|
|
|
1984
2897
|
]
|
|
1985
2898
|
}),
|
|
1986
2899
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1987
|
-
className:
|
|
2900
|
+
className: css.inspectorActions,
|
|
1988
2901
|
children: [selectedKind !== "space" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1989
2902
|
type: "button",
|
|
1990
|
-
className:
|
|
2903
|
+
className: css.primaryButton,
|
|
1991
2904
|
onClick: () => props.onExplore(selected.content),
|
|
1992
2905
|
children: t("overview.exploreNode")
|
|
1993
2906
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1994
2907
|
type: "button",
|
|
1995
|
-
className:
|
|
2908
|
+
className: css.secondaryButton,
|
|
1996
2909
|
onClick: () => void navigator.clipboard?.writeText(selected.id),
|
|
1997
2910
|
children: t("common.copyId")
|
|
1998
2911
|
})]
|
|
@@ -2016,7 +2929,7 @@ window.__ModuleLoader__.load({
|
|
|
2016
2929
|
title: t(onlyQueryOrUnsupported ? "overview.noVisualTitle" : "overview.noContentTitle"),
|
|
2017
2930
|
children: t(onlyQueryOrUnsupported ? "overview.noVisualText" : "overview.noContentText")
|
|
2018
2931
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2019
|
-
className:
|
|
2932
|
+
className: css.asyncPlaceholder,
|
|
2020
2933
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("overview.loading") })
|
|
2021
2934
|
}),
|
|
2022
2935
|
preview !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ContentPreview, {
|
|
@@ -2028,7 +2941,7 @@ window.__ModuleLoader__.load({
|
|
|
2028
2941
|
});
|
|
2029
2942
|
}
|
|
2030
2943
|
function ExplorePage(props) {
|
|
2031
|
-
const t =
|
|
2944
|
+
const t = useT();
|
|
2032
2945
|
const pageSize = 6;
|
|
2033
2946
|
const [query, setQuery] = (0, react.useState)(props.seed);
|
|
2034
2947
|
const [mode, setMode] = (0, react.useState)("smart");
|
|
@@ -2122,7 +3035,7 @@ window.__ModuleLoader__.load({
|
|
|
2122
3035
|
const visibleResults = results.slice(0, visibleResultLimit);
|
|
2123
3036
|
const visibleRelated = related.slice(0, visibleRelatedLimit);
|
|
2124
3037
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2125
|
-
className:
|
|
3038
|
+
className: css.page,
|
|
2126
3039
|
children: [
|
|
2127
3040
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.PageHeader, {
|
|
2128
3041
|
title: t("search.title"),
|
|
@@ -2130,10 +3043,10 @@ window.__ModuleLoader__.load({
|
|
|
2130
3043
|
meta: t("search.maxResults", { count: props.status?.defaultRecallLimit ?? "—" })
|
|
2131
3044
|
}),
|
|
2132
3045
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
2133
|
-
className:
|
|
3046
|
+
className: css.searchBar,
|
|
2134
3047
|
onSubmit: (event) => void search(event),
|
|
2135
3048
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2136
|
-
className:
|
|
3049
|
+
className: css.queryField,
|
|
2137
3050
|
children: [
|
|
2138
3051
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2139
3052
|
"aria-hidden": "true",
|
|
@@ -2148,7 +3061,7 @@ window.__ModuleLoader__.load({
|
|
|
2148
3061
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("kbd", { children: "↵" })
|
|
2149
3062
|
]
|
|
2150
3063
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2151
|
-
className:
|
|
3064
|
+
className: css.searchControls,
|
|
2152
3065
|
children: [
|
|
2153
3066
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("common.category"), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
2154
3067
|
value: category,
|
|
@@ -2182,15 +3095,15 @@ window.__ModuleLoader__.load({
|
|
|
2182
3095
|
]
|
|
2183
3096
|
})] }),
|
|
2184
3097
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2185
|
-
className:
|
|
3098
|
+
className: css.searchActions,
|
|
2186
3099
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2187
3100
|
type: "submit",
|
|
2188
|
-
className:
|
|
3101
|
+
className: css.secondaryButton,
|
|
2189
3102
|
disabled: searching || query.trim() === "",
|
|
2190
3103
|
children: searchKind === "direct" ? t("search.searching") : t("search.action")
|
|
2191
3104
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2192
3105
|
type: "button",
|
|
2193
|
-
className:
|
|
3106
|
+
className: css.primaryButton,
|
|
2194
3107
|
disabled: searching || query.trim() === "" || !props.agentAvailable,
|
|
2195
3108
|
onClick: () => void runSearch(true),
|
|
2196
3109
|
children: searchKind === "agent" ? t("search.agentSearching") : t("search.agentAction")
|
|
@@ -2204,26 +3117,26 @@ window.__ModuleLoader__.load({
|
|
|
2204
3117
|
sources
|
|
2205
3118
|
}),
|
|
2206
3119
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2207
|
-
className:
|
|
3120
|
+
className: css.asyncResults,
|
|
2208
3121
|
children: [
|
|
2209
3122
|
searching && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SectionSpinner, { label: searchKind === "agent" ? t("search.agentSearching") : t("search.searching") }),
|
|
2210
3123
|
agentAnswer !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2211
|
-
className:
|
|
3124
|
+
className: css.agentAnswer,
|
|
2212
3125
|
"aria-label": t("search.agentAnswer"),
|
|
2213
3126
|
children: [
|
|
2214
3127
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2215
|
-
className:
|
|
3128
|
+
className: css.agentAnswerHeading,
|
|
2216
3129
|
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
3130
|
}),
|
|
2218
3131
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: agentAnswer.answer }),
|
|
2219
3132
|
agentAnswer.citations.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2220
|
-
className:
|
|
3133
|
+
className: css.agentCitations,
|
|
2221
3134
|
children: agentAnswer.citations.map((citation) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: citation }, citation))
|
|
2222
3135
|
})
|
|
2223
3136
|
]
|
|
2224
3137
|
}),
|
|
2225
3138
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2226
|
-
className:
|
|
3139
|
+
className: css.inlineError,
|
|
2227
3140
|
role: "alert",
|
|
2228
3141
|
children: error
|
|
2229
3142
|
}),
|
|
@@ -2238,12 +3151,12 @@ window.__ModuleLoader__.load({
|
|
|
2238
3151
|
children: t("search.emptyText")
|
|
2239
3152
|
}),
|
|
2240
3153
|
results.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2241
|
-
className: relatedTo === null ?
|
|
3154
|
+
className: relatedTo === null ? css.singleColumn : css.resultLayout,
|
|
2242
3155
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2243
|
-
className:
|
|
3156
|
+
className: css.results,
|
|
2244
3157
|
children: [
|
|
2245
3158
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2246
|
-
className:
|
|
3159
|
+
className: css.sectionHeading,
|
|
2247
3160
|
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
3161
|
}),
|
|
2249
3162
|
visibleResults.map((insight) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InsightCard, {
|
|
@@ -2261,10 +3174,10 @@ window.__ModuleLoader__.load({
|
|
|
2261
3174
|
]
|
|
2262
3175
|
}), relatedTo !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("aside", {
|
|
2263
3176
|
id: "mnemon-related-pane",
|
|
2264
|
-
className:
|
|
3177
|
+
className: css.relatedPane,
|
|
2265
3178
|
children: [
|
|
2266
3179
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2267
|
-
className:
|
|
3180
|
+
className: css.sectionHeading,
|
|
2268
3181
|
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
3182
|
type: "button",
|
|
2270
3183
|
onClick: () => {
|
|
@@ -2277,15 +3190,15 @@ window.__ModuleLoader__.load({
|
|
|
2277
3190
|
})]
|
|
2278
3191
|
}),
|
|
2279
3192
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2280
|
-
className:
|
|
3193
|
+
className: css.relatedSource,
|
|
2281
3194
|
children: relatedTo.content
|
|
2282
3195
|
}),
|
|
2283
3196
|
relatedLoading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2284
|
-
className:
|
|
3197
|
+
className: css.loading,
|
|
2285
3198
|
children: t("search.traversing")
|
|
2286
3199
|
}),
|
|
2287
3200
|
!relatedLoading && related.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2288
|
-
className:
|
|
3201
|
+
className: css.muted,
|
|
2289
3202
|
children: t("search.noRelated")
|
|
2290
3203
|
}),
|
|
2291
3204
|
visibleRelated.map((insight) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InsightCard, {
|
|
@@ -2309,7 +3222,7 @@ window.__ModuleLoader__.load({
|
|
|
2309
3222
|
});
|
|
2310
3223
|
}
|
|
2311
3224
|
function EntitiesPage(props) {
|
|
2312
|
-
const t =
|
|
3225
|
+
const t = useT();
|
|
2313
3226
|
const entityPageSize = 10;
|
|
2314
3227
|
const insightPageSize = 6;
|
|
2315
3228
|
const [view, setView] = (0, react.useState)({
|
|
@@ -2366,7 +3279,7 @@ window.__ModuleLoader__.load({
|
|
|
2366
3279
|
const sources = view.sources ?? [];
|
|
2367
3280
|
const hasEntityProvider = sources.length === 0 || sources.some((source) => source.mode === "entities" && source.status !== "unavailable");
|
|
2368
3281
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2369
|
-
className:
|
|
3282
|
+
className: css.page,
|
|
2370
3283
|
children: [
|
|
2371
3284
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.PageHeader, {
|
|
2372
3285
|
title: t("entities.title"),
|
|
@@ -2382,12 +3295,12 @@ window.__ModuleLoader__.load({
|
|
|
2382
3295
|
title: t("entities.unsupportedTitle"),
|
|
2383
3296
|
children: t("entities.unsupportedText")
|
|
2384
3297
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2385
|
-
className:
|
|
3298
|
+
className: css.entityLayout,
|
|
2386
3299
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("aside", {
|
|
2387
|
-
className:
|
|
3300
|
+
className: css.entityRail,
|
|
2388
3301
|
children: [
|
|
2389
3302
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
2390
|
-
className:
|
|
3303
|
+
className: css.entitySearch,
|
|
2391
3304
|
onSubmit: submit,
|
|
2392
3305
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
2393
3306
|
"aria-label": t("entities.nameAria"),
|
|
@@ -2405,17 +3318,17 @@ window.__ModuleLoader__.load({
|
|
|
2405
3318
|
placeholder: t("entities.placeholder")
|
|
2406
3319
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2407
3320
|
type: "submit",
|
|
2408
|
-
className:
|
|
3321
|
+
className: css.primaryButton,
|
|
2409
3322
|
disabled: loading || entity.trim() === "",
|
|
2410
3323
|
children: t("entities.action")
|
|
2411
3324
|
})]
|
|
2412
3325
|
}),
|
|
2413
3326
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2414
|
-
className:
|
|
3327
|
+
className: css.entityHeading,
|
|
2415
3328
|
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
3329
|
}),
|
|
2417
3330
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2418
|
-
className:
|
|
3331
|
+
className: css.entityList,
|
|
2419
3332
|
children: visibleEntities.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
2420
3333
|
type: "button",
|
|
2421
3334
|
"aria-pressed": view.selected === item.entity,
|
|
@@ -2434,20 +3347,20 @@ window.__ModuleLoader__.load({
|
|
|
2434
3347
|
onMore: () => setVisibleEntityLimit((value) => value + entityPageSize)
|
|
2435
3348
|
}),
|
|
2436
3349
|
!loading && view.items.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2437
|
-
className:
|
|
3350
|
+
className: css.muted,
|
|
2438
3351
|
children: t("entities.emptyRail")
|
|
2439
3352
|
}),
|
|
2440
3353
|
!loading && view.items.length > 0 && visibleEntities.length === 0 && entityFilter !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2441
|
-
className:
|
|
3354
|
+
className: css.muted,
|
|
2442
3355
|
children: t("entities.filterEmpty")
|
|
2443
3356
|
})
|
|
2444
3357
|
]
|
|
2445
3358
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2446
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
3359
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.entityResults, css.asyncResults),
|
|
2447
3360
|
children: [
|
|
2448
3361
|
loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SectionSpinner, { label: t("entities.loading") }),
|
|
2449
3362
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2450
|
-
className:
|
|
3363
|
+
className: css.inlineError,
|
|
2451
3364
|
role: "alert",
|
|
2452
3365
|
children: error
|
|
2453
3366
|
}),
|
|
@@ -2457,7 +3370,7 @@ window.__ModuleLoader__.load({
|
|
|
2457
3370
|
children: t("entities.selectText")
|
|
2458
3371
|
}),
|
|
2459
3372
|
view.selected !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2460
|
-
className:
|
|
3373
|
+
className: css.sectionHeading,
|
|
2461
3374
|
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
3375
|
}), !loading && view.insights.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.EmptyState, {
|
|
2463
3376
|
glyph: "0",
|
|
@@ -2481,7 +3394,7 @@ window.__ModuleLoader__.load({
|
|
|
2481
3394
|
});
|
|
2482
3395
|
}
|
|
2483
3396
|
function PersistenceStrategyDialog(props) {
|
|
2484
|
-
const t =
|
|
3397
|
+
const t = useT();
|
|
2485
3398
|
const strategyFormId = (0, react.useId)();
|
|
2486
3399
|
const configured = props.config?.persistenceStrategy;
|
|
2487
3400
|
const [mode, setMode] = (0, react.useState)(configured?.mode ?? "manual");
|
|
@@ -2559,43 +3472,43 @@ window.__ModuleLoader__.load({
|
|
|
2559
3472
|
wide: true,
|
|
2560
3473
|
onClose: props.onClose,
|
|
2561
3474
|
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2562
|
-
className:
|
|
3475
|
+
className: css.modalFooterActions,
|
|
2563
3476
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2564
3477
|
type: "button",
|
|
2565
3478
|
"data-dialog-close": true,
|
|
2566
|
-
className:
|
|
3479
|
+
className: css.ghostButton,
|
|
2567
3480
|
disabled: saving,
|
|
2568
3481
|
onClick: props.onClose,
|
|
2569
3482
|
children: t("common.cancel")
|
|
2570
3483
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2571
3484
|
type: "submit",
|
|
2572
3485
|
form: strategyFormId,
|
|
2573
|
-
className:
|
|
3486
|
+
className: css.primaryButton,
|
|
2574
3487
|
disabled: loading || saving || !props.writable || !selectedProvidersValid,
|
|
2575
3488
|
children: saving ? t("strategy.saving") : t("strategy.save")
|
|
2576
3489
|
})]
|
|
2577
3490
|
}),
|
|
2578
3491
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
2579
3492
|
id: strategyFormId,
|
|
2580
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
3493
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.bodyEdit, css.strategyForm),
|
|
2581
3494
|
onSubmit: (event) => void save(event),
|
|
2582
3495
|
children: [
|
|
2583
3496
|
loading && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2584
|
-
className:
|
|
3497
|
+
className: css.strategyLoading,
|
|
2585
3498
|
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
3499
|
}),
|
|
2587
3500
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2588
|
-
className:
|
|
3501
|
+
className: css.inlineError,
|
|
2589
3502
|
role: "alert",
|
|
2590
3503
|
children: error
|
|
2591
3504
|
}),
|
|
2592
3505
|
!loading && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2593
|
-
className:
|
|
3506
|
+
className: css.createSection,
|
|
2594
3507
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2595
|
-
className:
|
|
3508
|
+
className: css.createSectionHeading,
|
|
2596
3509
|
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
3510
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
|
|
2598
|
-
className:
|
|
3511
|
+
className: css.placementMode,
|
|
2599
3512
|
children: [
|
|
2600
3513
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: t("overview.placementMode") }),
|
|
2601
3514
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
@@ -2610,7 +3523,7 @@ window.__ModuleLoader__.load({
|
|
|
2610
3523
|
onChange: () => setMode("manual")
|
|
2611
3524
|
}),
|
|
2612
3525
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
2613
|
-
className:
|
|
3526
|
+
className: css.choiceControl,
|
|
2614
3527
|
"data-kind": "radio",
|
|
2615
3528
|
"aria-hidden": "true"
|
|
2616
3529
|
}),
|
|
@@ -2629,7 +3542,7 @@ window.__ModuleLoader__.load({
|
|
|
2629
3542
|
onChange: () => setMode("automatic")
|
|
2630
3543
|
}),
|
|
2631
3544
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
2632
|
-
className:
|
|
3545
|
+
className: css.choiceControl,
|
|
2633
3546
|
"data-kind": "radio",
|
|
2634
3547
|
"aria-hidden": "true"
|
|
2635
3548
|
}),
|
|
@@ -2643,12 +3556,12 @@ window.__ModuleLoader__.load({
|
|
|
2643
3556
|
]
|
|
2644
3557
|
})]
|
|
2645
3558
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2646
|
-
className:
|
|
3559
|
+
className: css.createSection,
|
|
2647
3560
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2648
|
-
className:
|
|
3561
|
+
className: css.createSectionHeading,
|
|
2649
3562
|
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
3563
|
}), mode === "manual" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
|
|
2651
|
-
className:
|
|
3564
|
+
className: css.providerChoice,
|
|
2652
3565
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: t("overview.providerLabel") }), providers.map((provider) => {
|
|
2653
3566
|
const disabled = provider.origin !== "native" && provider.serviceConfigured === false;
|
|
2654
3567
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
@@ -2667,11 +3580,11 @@ window.__ModuleLoader__.load({
|
|
|
2667
3580
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderIcon, {
|
|
2668
3581
|
providerId: provider.id,
|
|
2669
3582
|
icon: provider.icon,
|
|
2670
|
-
className:
|
|
3583
|
+
className: css.providerChoiceIcon
|
|
2671
3584
|
}),
|
|
2672
3585
|
/* @__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
3586
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
2674
|
-
className:
|
|
3587
|
+
className: css.choiceControl,
|
|
2675
3588
|
"data-kind": "radio",
|
|
2676
3589
|
"aria-hidden": "true"
|
|
2677
3590
|
})
|
|
@@ -2683,11 +3596,11 @@ window.__ModuleLoader__.load({
|
|
|
2683
3596
|
connection: providerDrafts[selectedProvider.id] ?? {},
|
|
2684
3597
|
onChange: (key, value) => updateDraft(selectedProvider.id, key, value)
|
|
2685
3598
|
})] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2686
|
-
className:
|
|
3599
|
+
className: css.placementPolicy,
|
|
2687
3600
|
"aria-label": t("overview.placementPolicy"),
|
|
2688
3601
|
children: [
|
|
2689
3602
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2690
|
-
className:
|
|
3603
|
+
className: css.placementPolicyHeading,
|
|
2691
3604
|
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
3605
|
}),
|
|
2693
3606
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("overview.placementPrompt"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
@@ -2699,7 +3612,7 @@ window.__ModuleLoader__.load({
|
|
|
2699
3612
|
maxLength: 4e3
|
|
2700
3613
|
})] }),
|
|
2701
3614
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2702
|
-
className:
|
|
3615
|
+
className: css.placementRuleGrid,
|
|
2703
3616
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("overview.dataBoundary"), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
2704
3617
|
"aria-label": t("overview.dataBoundary"),
|
|
2705
3618
|
value: dataBoundary,
|
|
@@ -2736,7 +3649,7 @@ window.__ModuleLoader__.load({
|
|
|
2736
3649
|
})] })]
|
|
2737
3650
|
}),
|
|
2738
3651
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
|
|
2739
|
-
className:
|
|
3652
|
+
className: css.capabilityRules,
|
|
2740
3653
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: t("overview.requiredCapabilities") }), [
|
|
2741
3654
|
"graph",
|
|
2742
3655
|
"exact-write",
|
|
@@ -2752,7 +3665,7 @@ window.__ModuleLoader__.load({
|
|
|
2752
3665
|
onChange: () => toggleCapability(capability)
|
|
2753
3666
|
}),
|
|
2754
3667
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
2755
|
-
className:
|
|
3668
|
+
className: css.choiceControl,
|
|
2756
3669
|
"data-kind": "check",
|
|
2757
3670
|
"aria-hidden": "true"
|
|
2758
3671
|
}),
|
|
@@ -2762,7 +3675,7 @@ window.__ModuleLoader__.load({
|
|
|
2762
3675
|
})]
|
|
2763
3676
|
}),
|
|
2764
3677
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2765
|
-
className:
|
|
3678
|
+
className: css.placementCandidates,
|
|
2766
3679
|
children: providers.map((provider) => {
|
|
2767
3680
|
const disabled = provider.serviceConfigured === false || dataBoundary === "local-only" && provider.kind === "remote";
|
|
2768
3681
|
const selected = automaticProviderIds.includes(provider.id);
|
|
@@ -2779,11 +3692,11 @@ window.__ModuleLoader__.load({
|
|
|
2779
3692
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderIcon, {
|
|
2780
3693
|
providerId: provider.id,
|
|
2781
3694
|
icon: provider.icon,
|
|
2782
|
-
className:
|
|
3695
|
+
className: css.candidateIcon
|
|
2783
3696
|
}),
|
|
2784
3697
|
/* @__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
3698
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
|
|
2786
|
-
className:
|
|
3699
|
+
className: css.choiceControl,
|
|
2787
3700
|
"data-kind": "check",
|
|
2788
3701
|
"aria-hidden": "true"
|
|
2789
3702
|
})
|
|
@@ -2807,7 +3720,7 @@ window.__ModuleLoader__.load({
|
|
|
2807
3720
|
});
|
|
2808
3721
|
}
|
|
2809
3722
|
function RememberPage(props) {
|
|
2810
|
-
const t =
|
|
3723
|
+
const t = useT();
|
|
2811
3724
|
const rememberFormId = (0, react.useId)();
|
|
2812
3725
|
const [content, setContent] = (0, react.useState)(props.seed);
|
|
2813
3726
|
const [category, setCategory] = (0, react.useState)("general");
|
|
@@ -2876,21 +3789,21 @@ window.__ModuleLoader__.load({
|
|
|
2876
3789
|
}
|
|
2877
3790
|
};
|
|
2878
3791
|
const composer = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2879
|
-
className:
|
|
3792
|
+
className: css.supervisedComposer,
|
|
2880
3793
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
2881
3794
|
id: rememberFormId,
|
|
2882
|
-
className:
|
|
3795
|
+
className: css.supervisedForm,
|
|
2883
3796
|
onSubmit: (event) => void supervise(event),
|
|
2884
3797
|
children: [
|
|
2885
3798
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2886
|
-
className:
|
|
3799
|
+
className: css.supervisedHeading,
|
|
2887
3800
|
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 ?
|
|
3801
|
+
className: !props.agentAvailable ? css.sessionMissing : css.sessionReady,
|
|
2889
3802
|
children: !props.agentAvailable ? t("remember.noTaskAgent") : t("remember.taskAgentReady")
|
|
2890
3803
|
})]
|
|
2891
3804
|
}),
|
|
2892
3805
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2893
|
-
className:
|
|
3806
|
+
className: css.fieldWide,
|
|
2894
3807
|
children: [t("remember.candidate"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
2895
3808
|
"aria-label": t("remember.candidateAria"),
|
|
2896
3809
|
value: content,
|
|
@@ -2901,25 +3814,25 @@ window.__ModuleLoader__.load({
|
|
|
2901
3814
|
})]
|
|
2902
3815
|
}),
|
|
2903
3816
|
!props.agentAvailable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2904
|
-
className:
|
|
3817
|
+
className: css.sessionHint,
|
|
2905
3818
|
children: t("remember.taskAgentHint")
|
|
2906
3819
|
}),
|
|
2907
3820
|
result !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2908
|
-
className:
|
|
3821
|
+
className: css.modalInlineStatus,
|
|
2909
3822
|
role: "status",
|
|
2910
3823
|
children: result
|
|
2911
3824
|
})
|
|
2912
3825
|
]
|
|
2913
3826
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
|
|
2914
|
-
className:
|
|
3827
|
+
className: css.advancedWrite,
|
|
2915
3828
|
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:
|
|
3829
|
+
className: css.manualForm,
|
|
2917
3830
|
onSubmit: (event) => void manualSave(event),
|
|
2918
3831
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2919
|
-
className:
|
|
3832
|
+
className: css.formGrid,
|
|
2920
3833
|
children: [
|
|
2921
3834
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2922
|
-
className:
|
|
3835
|
+
className: css.fieldWide,
|
|
2923
3836
|
children: [
|
|
2924
3837
|
t("remember.target"),
|
|
2925
3838
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
|
|
@@ -2937,7 +3850,7 @@ window.__ModuleLoader__.load({
|
|
|
2937
3850
|
}, body.id))
|
|
2938
3851
|
}),
|
|
2939
3852
|
selectedMemoryBody?.provider.capabilities.writeMode === "async-extracting" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
2940
|
-
className:
|
|
3853
|
+
className: css.providerWriteHint,
|
|
2941
3854
|
children: t("remember.asyncProviderHint")
|
|
2942
3855
|
})
|
|
2943
3856
|
]
|
|
@@ -2965,7 +3878,7 @@ window.__ModuleLoader__.load({
|
|
|
2965
3878
|
}, value))
|
|
2966
3879
|
})] }),
|
|
2967
3880
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2968
|
-
className:
|
|
3881
|
+
className: css.fieldWide,
|
|
2969
3882
|
children: [t("remember.entities"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
2970
3883
|
value: entities,
|
|
2971
3884
|
onChange: (event) => setEntities(event.target.value),
|
|
@@ -2973,7 +3886,7 @@ window.__ModuleLoader__.load({
|
|
|
2973
3886
|
})]
|
|
2974
3887
|
}),
|
|
2975
3888
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2976
|
-
className:
|
|
3889
|
+
className: css.fieldWide,
|
|
2977
3890
|
children: [t("remember.tags"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
2978
3891
|
value: tags,
|
|
2979
3892
|
onChange: (event) => setTags(event.target.value),
|
|
@@ -2982,10 +3895,10 @@ window.__ModuleLoader__.load({
|
|
|
2982
3895
|
})
|
|
2983
3896
|
]
|
|
2984
3897
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2985
|
-
className:
|
|
3898
|
+
className: css.manualActions,
|
|
2986
3899
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("remember.advancedText") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2987
3900
|
type: "submit",
|
|
2988
|
-
className:
|
|
3901
|
+
className: css.secondaryButton,
|
|
2989
3902
|
disabled: saving || content.trim() === "" || memoryBodyId === "",
|
|
2990
3903
|
children: saving ? t("remember.saving") : t("remember.advancedAction")
|
|
2991
3904
|
})]
|
|
@@ -2999,18 +3912,18 @@ window.__ModuleLoader__.load({
|
|
|
2999
3912
|
busy: supervising || saving,
|
|
3000
3913
|
onClose: props.onClose,
|
|
3001
3914
|
footer: props.writeEnabled ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3002
|
-
className:
|
|
3915
|
+
className: css.modalFooterActions,
|
|
3003
3916
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3004
3917
|
type: "button",
|
|
3005
3918
|
"data-dialog-close": true,
|
|
3006
|
-
className:
|
|
3919
|
+
className: css.ghostButton,
|
|
3007
3920
|
disabled: supervising || saving,
|
|
3008
3921
|
onClick: props.onClose,
|
|
3009
3922
|
children: t("common.cancel")
|
|
3010
3923
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3011
3924
|
type: "submit",
|
|
3012
3925
|
form: rememberFormId,
|
|
3013
|
-
className:
|
|
3926
|
+
className: css.primaryButton,
|
|
3014
3927
|
disabled: supervising || content.trim() === "" || !props.agentAvailable,
|
|
3015
3928
|
children: supervising ? t("remember.processing") : t("remember.action")
|
|
3016
3929
|
})]
|
|
@@ -3023,7 +3936,7 @@ window.__ModuleLoader__.load({
|
|
|
3023
3936
|
});
|
|
3024
3937
|
}
|
|
3025
3938
|
function ListPage(props) {
|
|
3026
|
-
const t =
|
|
3939
|
+
const t = useT();
|
|
3027
3940
|
const pageSize = 12;
|
|
3028
3941
|
const [query, setQuery] = (0, react.useState)("");
|
|
3029
3942
|
const [category, setCategory] = (0, react.useState)("");
|
|
@@ -3077,7 +3990,7 @@ window.__ModuleLoader__.load({
|
|
|
3077
3990
|
setVisibleLimit(pageSize);
|
|
3078
3991
|
};
|
|
3079
3992
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3080
|
-
className:
|
|
3993
|
+
className: css.page,
|
|
3081
3994
|
children: [
|
|
3082
3995
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.PageHeader, {
|
|
3083
3996
|
title: t("content.title"),
|
|
@@ -3085,7 +3998,7 @@ window.__ModuleLoader__.load({
|
|
|
3085
3998
|
meta: t("content.count", { count: view === null ? "—" : selectedBodyId === void 0 ? view.total : filteredItems.length })
|
|
3086
3999
|
}),
|
|
3087
4000
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
3088
|
-
className:
|
|
4001
|
+
className: css.listToolbar,
|
|
3089
4002
|
onSubmit: submit,
|
|
3090
4003
|
children: [
|
|
3091
4004
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
@@ -3108,14 +4021,14 @@ window.__ModuleLoader__.load({
|
|
|
3108
4021
|
}),
|
|
3109
4022
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3110
4023
|
type: "submit",
|
|
3111
|
-
className:
|
|
4024
|
+
className: css.primaryButton,
|
|
3112
4025
|
disabled: loading,
|
|
3113
4026
|
children: loading ? t("common.loading") : t("content.apply")
|
|
3114
4027
|
})
|
|
3115
4028
|
]
|
|
3116
4029
|
}),
|
|
3117
4030
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3118
|
-
className:
|
|
4031
|
+
className: css.listNotice,
|
|
3119
4032
|
children: t("content.notice")
|
|
3120
4033
|
}),
|
|
3121
4034
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ReadSourcePanel, {
|
|
@@ -3125,12 +4038,12 @@ window.__ModuleLoader__.load({
|
|
|
3125
4038
|
onSelect: selectBody
|
|
3126
4039
|
}),
|
|
3127
4040
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3128
|
-
className:
|
|
4041
|
+
className: css.inlineError,
|
|
3129
4042
|
role: "alert",
|
|
3130
4043
|
children: error
|
|
3131
4044
|
}),
|
|
3132
4045
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3133
|
-
className:
|
|
4046
|
+
className: css.asyncResults,
|
|
3134
4047
|
children: [
|
|
3135
4048
|
loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SectionSpinner, { label: t("common.loading") }),
|
|
3136
4049
|
!loading && filteredItems.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.EmptyState, {
|
|
@@ -3139,7 +4052,7 @@ window.__ModuleLoader__.load({
|
|
|
3139
4052
|
children: t(waitingForQuery ? "content.queryRequiredText" : "content.emptyText")
|
|
3140
4053
|
}),
|
|
3141
4054
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3142
|
-
className:
|
|
4055
|
+
className: css.memoryList,
|
|
3143
4056
|
children: visibleItems.map((insight) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InsightCard, {
|
|
3144
4057
|
insight,
|
|
3145
4058
|
writeEnabled: props.writeEnabled,
|
|
@@ -3159,6 +4072,8 @@ window.__ModuleLoader__.load({
|
|
|
3159
4072
|
]
|
|
3160
4073
|
});
|
|
3161
4074
|
}
|
|
4075
|
+
/** @deprecated Use nativeSpaceProvider. */
|
|
4076
|
+
const nativeBodyProvider = nativeSpaceProvider;
|
|
3162
4077
|
//#endregion
|
|
3163
4078
|
//#region src/client/ui.tsx
|
|
3164
4079
|
/** The adapter never gets a transport or chooses another Source instance. */
|
|
@@ -3224,7 +4139,7 @@ window.__ModuleLoader__.load({
|
|
|
3224
4139
|
}
|
|
3225
4140
|
];
|
|
3226
4141
|
function MemorySpacesSourceView(props) {
|
|
3227
|
-
const t =
|
|
4142
|
+
const t = useT();
|
|
3228
4143
|
const client = (0, react.useMemo)(() => props.management === void 0 ? void 0 : memorySpacesPageClient(props.management), [props.management]);
|
|
3229
4144
|
const [revision, setRevision] = (0, react.useState)(0);
|
|
3230
4145
|
const [status, setStatus] = (0, react.useState)(null);
|
|
@@ -3278,35 +4193,35 @@ window.__ModuleLoader__.load({
|
|
|
3278
4193
|
const preferences = props.preferences;
|
|
3279
4194
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
3280
4195
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3281
|
-
className:
|
|
4196
|
+
className: css.inlineError,
|
|
3282
4197
|
role: "alert",
|
|
3283
4198
|
children: error
|
|
3284
4199
|
}),
|
|
3285
4200
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
3286
|
-
className:
|
|
4201
|
+
className: sidebarCss.memoryWorkspace,
|
|
3287
4202
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.PageHeader, {
|
|
3288
|
-
title: t("nav.
|
|
4203
|
+
title: t("nav.spaces"),
|
|
3289
4204
|
description: t("overview.description"),
|
|
3290
4205
|
meta: writable ? t("common.agentSupervised") : activationEnabled ? t("common.activationOnly") : t("common.readOnly"),
|
|
3291
4206
|
action: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3292
|
-
className:
|
|
4207
|
+
className: css.memoryHeaderActions,
|
|
3293
4208
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3294
4209
|
type: "button",
|
|
3295
|
-
className: (0, dsh_mnemon_client.appearanceClass)(
|
|
4210
|
+
className: (0, dsh_mnemon_client.appearanceClass)(css.primaryButton, sidebarCss.memoryWriteButton),
|
|
3296
4211
|
disabled: !writable,
|
|
3297
4212
|
onClick: () => remember(),
|
|
3298
4213
|
children: t("nav.rememberAction")
|
|
3299
4214
|
}), preferences !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3300
4215
|
type: "button",
|
|
3301
|
-
className:
|
|
4216
|
+
className: css.secondaryButton,
|
|
3302
4217
|
onClick: () => setStrategyOpen(true),
|
|
3303
4218
|
children: t("strategy.action")
|
|
3304
4219
|
})]
|
|
3305
4220
|
})
|
|
3306
4221
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3307
|
-
className:
|
|
4222
|
+
className: sidebarCss.memoryNavigation,
|
|
3308
4223
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3309
|
-
className:
|
|
4224
|
+
className: sidebarCss.memoryTabs,
|
|
3310
4225
|
role: "tablist",
|
|
3311
4226
|
"aria-label": t("nav.memory.aria"),
|
|
3312
4227
|
children: TABS.map((tab) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
@@ -3395,7 +4310,7 @@ window.__ModuleLoader__.load({
|
|
|
3395
4310
|
pages: [
|
|
3396
4311
|
{
|
|
3397
4312
|
id: "spaces",
|
|
3398
|
-
key: "nav.
|
|
4313
|
+
key: "nav.spaces",
|
|
3399
4314
|
order: 300,
|
|
3400
4315
|
glyph: "◇"
|
|
3401
4316
|
},
|
|
@@ -3457,6 +4372,7 @@ window.__ModuleLoader__.load({
|
|
|
3457
4372
|
exports.installMemorySpacesUI = installMemorySpacesUI;
|
|
3458
4373
|
exports.memorySpacesPageClient = memorySpacesPageClient;
|
|
3459
4374
|
exports.nativeBodyProvider = nativeBodyProvider;
|
|
4375
|
+
exports.nativeSpaceProvider = nativeSpaceProvider;
|
|
3460
4376
|
return module.exports;
|
|
3461
4377
|
}
|
|
3462
4378
|
});
|