dsh-mnemon 0.5.42 → 0.5.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -318,6 +318,9 @@ window.__ModuleLoader__.load({
318
318
  allowUpdate: true,
319
319
  targetScope: "user",
320
320
  autoBacktest: true,
321
+ autoAdopt: false,
322
+ autoAdoptDailyLimit: 2,
323
+ autoAdoptTimeZone: "local",
321
324
  draftMaxTokens: 32768,
322
325
  draftRetryMaxTokens: 65536,
323
326
  hints: true,
@@ -330,6 +333,17 @@ window.__ModuleLoader__.load({
330
333
  maxPendingPerSession: 5,
331
334
  casesPerRun: 8
332
335
  });
336
+ /** Shared validation without exposing Host environment values to the browser. */
337
+ function validSkillsTimeZone(value) {
338
+ if (value === "local") return true;
339
+ if (!value || value.length > 100) return false;
340
+ try {
341
+ new Intl.DateTimeFormat("en", { timeZone: value }).format(0);
342
+ return true;
343
+ } catch {
344
+ return false;
345
+ }
346
+ }
333
347
  /** The Sources that keep their data in Mnemon's data directory, in the order a backup lists them. */
334
348
  const MNEMON_PACK_COMPONENTS = [
335
349
  "runtime",
@@ -1188,7 +1202,13 @@ window.__ModuleLoader__.load({
1188
1202
  "runtime.result.localCompaction": "本地画像整理完成:未写入记忆空间,已更新{target} · 当前 {count} 条",
1189
1203
  "runtime.result.localArchive": "容量整理完成:没有可写的记忆空间,已先把 {archived} 条移入本地归档,再更新{target} · 当前 {count} 条",
1190
1204
  "runtime.readOnly": "当前为只读模式;运行时记忆仍会进入上下文,但不能在此修改。",
1191
- "runtime.footnote": "memories.json 是唯一事实源;两个 Markdown 文件由控制层生成,不应直接编辑。"
1205
+ "runtime.footnote": "memories.json 是唯一事实源;两个 Markdown 文件由控制层生成,不应直接编辑。",
1206
+ "runtime.pinned": "已固定",
1207
+ "runtime.pin": "固定",
1208
+ "runtime.unpin": "取消固定",
1209
+ "runtime.pinnedNotice": "条目已固定,容量整理时会保留在运行时记忆中。",
1210
+ "runtime.unpinnedNotice": "已取消固定,恢复通常的容量维护规则。",
1211
+ "runtime.pinBudget": "固定:{count} 条 · 投影字符 {used} / {limit}"
1192
1212
  };
1193
1213
  var en$3 = {
1194
1214
  "nav.runtime": "Runtime",
@@ -1235,7 +1255,13 @@ window.__ModuleLoader__.load({
1235
1255
  "runtime.result.localCompaction": "Local profile compaction complete: no Memory Space write; updated {target} · {count} entries",
1236
1256
  "runtime.result.localArchive": "Capacity maintenance complete: with no Memory Space to write to, moved {archived} entries to the local archive, then updated {target} · {count} entries",
1237
1257
  "runtime.readOnly": "Read only here: runtime memory still enters context but cannot be changed on this page.",
1238
- "runtime.footnote": "memories.json is the only source of truth. The control plane generates both Markdown files; do not edit them directly."
1258
+ "runtime.footnote": "memories.json is the only source of truth. The control plane generates both Markdown files; do not edit them directly.",
1259
+ "runtime.pinned": "Pinned",
1260
+ "runtime.pin": "Pin",
1261
+ "runtime.unpin": "Unpin",
1262
+ "runtime.pinnedNotice": "Entry pinned. It stays in hot memory during capacity maintenance.",
1263
+ "runtime.unpinnedNotice": "Entry unpinned. Normal capacity rules apply.",
1264
+ "runtime.pinBudget": "Pinned: {count} entries · {used} / {limit} projection characters"
1239
1265
  };
1240
1266
  //#endregion
1241
1267
  //#region plugins/dsh-mnemon-source-documents/presentation/locales.json
@@ -1816,7 +1842,7 @@ window.__ModuleLoader__.load({
1816
1842
  "config.embeddingProtocolInvalid": "协议必须是 自动 / Ollama / OpenAI 兼容 之一。",
1817
1843
  "config.embeddingEndpointInvalid": "嵌入 Endpoint 必须是不含凭据、查询参数或片段的 HTTP(S) 绝对 URL。",
1818
1844
  "config.embeddingModelInvalid": "嵌入模型必须包含 1–200 个字符,且不能包含控制字符。",
1819
- "config.embeddingSecurity": "Mnemon 会把记忆与查询正文发送到该 Endpoint;API Key 与其他设置一样保存在 DSH 设置文件中。远程 HTTP 会明文传输,请仅使用受信任的本地地址,或为远程服务配置 HTTPS。",
1845
+ "config.embeddingSecurity": "Mnemon 会把记忆与查询正文发送到此 Endpoint。新密钥由 DSH 凭据库保管,设置中仅存引用;也可使用 Host 环境变量。留空保留已有密钥,移除引用不会删除凭据库中的记录。远程服务请使用 HTTPS。",
1820
1846
  "config.embeddingTest": "测试状态",
1821
1847
  "config.embeddingNotTested": "尚未检查嵌入服务的连接与各 Mnemon Native 空间的覆盖率。",
1822
1848
  "config.embeddingTesting": "正在通过 Mnemon 检查嵌入服务与覆盖率…",
@@ -1867,7 +1893,15 @@ window.__ModuleLoader__.load({
1867
1893
  "config.loadingProviders": "正在读取 Provider 配置…",
1868
1894
  "config.providerLoadFailed": "读取 Provider 配置失败:{error}",
1869
1895
  "config.retryProviders": "重试",
1870
- "config.saving": "保存中…"
1896
+ "config.saving": "保存中…",
1897
+ "config.embeddingApiKeyEnv": "API Key 环境变量(可选)",
1898
+ "config.embeddingEnvInvalid": "请输入有效的 Host 环境变量名,例如 MY_EMBEDDING_API_KEY。",
1899
+ "config.embeddingAuthChoice": "请填写 API Key 或环境变量名,二选一。",
1900
+ "config.embeddingKeyPlaceholder": "留空保留已有密钥",
1901
+ "config.embeddingCredentialSaved": "已保存 DSH 凭据引用;密钥不会回传到此页面。",
1902
+ "config.embeddingClearKey": "移除本连接的密钥和环境变量引用",
1903
+ "config.embeddingMigrateKey": "将已有明文密钥迁入 DSH 凭据库",
1904
+ "config.embeddingUpgradeHost": "升级 dsh-mnemon Starter 后即可管理凭据。现有连接仍可使用;此处暂不接受新的密钥。"
1871
1905
  };
1872
1906
  var en$1 = {
1873
1907
  "term.space": "Memory Space",
@@ -2306,7 +2340,7 @@ window.__ModuleLoader__.load({
2306
2340
  "config.embeddingProtocolInvalid": "The protocol must be one of Auto / Ollama / OpenAI-compatible.",
2307
2341
  "config.embeddingEndpointInvalid": "The embedding endpoint must be an absolute HTTP(S) URL without credentials, a query, or a fragment.",
2308
2342
  "config.embeddingModelInvalid": "The embedding model must contain 1–200 characters and no control characters.",
2309
- "config.embeddingSecurity": "Mnemon sends memory and query text to this endpoint; the API key is stored in the DSH settings file like other settings. Remote HTTP is unencrypted; use a trusted local address or HTTPS for a remote service.",
2343
+ "config.embeddingSecurity": "Mnemon sends memory and query text to this endpoint. New keys are held by DSH credentials; settings contain only references. Host environment variables are also supported. Blank keeps the existing key; removing a reference does not delete stored records. Use HTTPS for remote services.",
2310
2344
  "config.embeddingTest": "Test status",
2311
2345
  "config.embeddingNotTested": "The embedding connection and the coverage of each Mnemon Native space have not been checked.",
2312
2346
  "config.embeddingTesting": "Checking the embedding server and coverage through Mnemon…",
@@ -2357,7 +2391,15 @@ window.__ModuleLoader__.load({
2357
2391
  "config.loadingProviders": "Loading provider configurations…",
2358
2392
  "config.providerLoadFailed": "Could not load provider configurations: {error}",
2359
2393
  "config.retryProviders": "Retry",
2360
- "config.saving": "Saving…"
2394
+ "config.saving": "Saving…",
2395
+ "config.embeddingApiKeyEnv": "API key environment variable (optional)",
2396
+ "config.embeddingEnvInvalid": "Enter a valid Host environment variable name, such as MY_EMBEDDING_API_KEY.",
2397
+ "config.embeddingAuthChoice": "Provide an API key or an environment variable name, not both.",
2398
+ "config.embeddingKeyPlaceholder": "Leave blank to keep the existing key",
2399
+ "config.embeddingCredentialSaved": "A DSH credential reference is saved; the key is never returned to this page.",
2400
+ "config.embeddingClearKey": "Remove this connection's key and environment variable references",
2401
+ "config.embeddingMigrateKey": "Move the existing plaintext key to DSH credentials",
2402
+ "config.embeddingUpgradeHost": "Upgrade dsh-mnemon Starter to manage credentials. The existing connection still works; new keys cannot be entered here yet."
2361
2403
  };
2362
2404
  //#endregion
2363
2405
  //#region src/client/locales.ts
@@ -2366,6 +2408,9 @@ window.__ModuleLoader__.load({
2366
2408
  ...zh$3,
2367
2409
  ...zh$2,
2368
2410
  ...zh$1,
2411
+ "composer.expand": "展开输入框",
2412
+ "composer.collapse": "收起输入框",
2413
+ "composer.collapsed": "输入框已收起",
2369
2414
  "tab.label": "记忆系统",
2370
2415
  "nav.aria": "Mnemon 页面",
2371
2416
  "nav.status": "状态",
@@ -2720,6 +2765,8 @@ window.__ModuleLoader__.load({
2720
2765
  "config.workspaceScopeHint": "每个工作区自己的 .mnemon 目录",
2721
2766
  "config.dataDirectory": "数据目录",
2722
2767
  "config.runtimeUserScopeTitle": "用户画像范围",
2768
+ "config.runtimeInheritance": "子 Agent 自动继承 Runtime 记忆",
2769
+ "config.runtimeInheritanceHint": "默认关闭。开启后,新建子 Agent 自动获得用户画像和工作记忆。已派发任务沿用原设置;任务明确提供的上下文和记忆工具不受影响。",
2723
2770
  "config.runtimeUserScopeStorage": "跟随存储范围",
2724
2771
  "config.runtimeUserScopeStorageHint": "与 MEMORY.md 在同一目录",
2725
2772
  "config.runtimeUserScopeGlobal": "全局共享",
@@ -3157,6 +3204,12 @@ window.__ModuleLoader__.load({
3157
3204
  "skills.targetScope.project": "项目",
3158
3205
  "skills.targetScope.storage": "跟随存储范围",
3159
3206
  "skills.evolutionHint": "后台复盘并建议改进技能;会创建落盘的任务及子代理会话,Mnemon 不自动删除这些记录",
3207
+ "skills.autoAdoptDailyLimit": "每日自动处理候选数",
3208
+ "skills.autoAdoptTimeZone": "每日额度时区",
3209
+ "skills.autoBudgetHint": "默认每天 2 个候选,按所选时区的自然日计数;local 使用 Host 时区。同一存储目录共享额度,重启不会清零,失败与取消仍占用候选名额。0 暂停自动处理,手动起草与采纳不受限制。",
3210
+ "skills.autoBudgetInvalid": "候选数须为 0–100 的整数;时区须为有效 IANA 名称或 local。",
3211
+ "skills.autoAdopt": "自动采纳新建议",
3212
+ "skills.autoAdoptHint": "默认关闭。需要自动回测:仅处理新的空闲审查建议,全部启用的文本用例不退步才采纳,最多重写两次;未测出或超出每轮用例上限时转人工审查。回测是文本模拟,不验证真实外部操作。",
3160
3213
  "skills.autoBacktest": "草案自动回测",
3161
3214
  "skills.autoBacktestHint": "草案写好后,用测试用例与当前版本对比",
3162
3215
  "skills.parameters": "复盘参数",
@@ -3191,6 +3244,9 @@ window.__ModuleLoader__.load({
3191
3244
  ...en$3,
3192
3245
  ...en$2,
3193
3246
  ...en$1,
3247
+ "composer.expand": "Show message input",
3248
+ "composer.collapse": "Collapse message input",
3249
+ "composer.collapsed": "Message input collapsed",
3194
3250
  "tab.label": "Memory System",
3195
3251
  "nav.aria": "Mnemon pages",
3196
3252
  "nav.status": "Status",
@@ -3545,6 +3601,8 @@ window.__ModuleLoader__.load({
3545
3601
  "config.workspaceScopeHint": "Each workspace keeps its own .mnemon directory",
3546
3602
  "config.dataDirectory": "Data directory",
3547
3603
  "config.runtimeUserScopeTitle": "User profile scope",
3604
+ "config.runtimeInheritance": "Automatically share Runtime memory with subagents",
3605
+ "config.runtimeInheritanceHint": "Off by default. New subagents receive the user profile and working memory when enabled. Existing tasks keep their setting; explicit task context and memory tools are unaffected.",
3548
3606
  "config.runtimeUserScopeStorage": "Follow storage scope",
3549
3607
  "config.runtimeUserScopeStorageHint": "Kept with MEMORY.md",
3550
3608
  "config.runtimeUserScopeGlobal": "Shared globally",
@@ -3982,6 +4040,12 @@ window.__ModuleLoader__.load({
3982
4040
  "skills.targetScope.project": "Project",
3983
4041
  "skills.targetScope.storage": "Follow storage",
3984
4042
  "skills.evolutionHint": "Review conversations and suggest skills. Task and subagent sessions are saved locally; Mnemon does not automatically delete them.",
4043
+ "skills.autoAdoptDailyLimit": "Automatic candidates per day",
4044
+ "skills.autoAdoptTimeZone": "Daily quota time zone",
4045
+ "skills.autoBudgetHint": "Default: 2 candidates per calendar day in this time zone; local uses the Host time zone. The storage root shares a persistent quota. Failed or cancelled candidates still count. 0 pauses automatic processing; manual drafting and adoption remain available.",
4046
+ "skills.autoBudgetInvalid": "Use an integer from 0 to 100 and a valid IANA time zone or local.",
4047
+ "skills.autoAdopt": "Automatically adopt new suggestions",
4048
+ "skills.autoAdoptHint": "Off by default; requires automatic backtests. Draft new idle-review suggestions and adopt only with no regression on all enabled text cases, retrying at most twice. Unmeasured or over-limit cases need manual review. Text simulations do not verify real external actions.",
3985
4049
  "skills.autoBacktest": "Backtest drafts",
3986
4050
  "skills.autoBacktestHint": "Compare a new draft with the current version on its test cases",
3987
4051
  "skills.parameters": "Review parameters",
@@ -4034,7 +4098,7 @@ window.__ModuleLoader__.load({
4034
4098
  const IconChevronLeftOutline14 = _deepseek_ai_dsh_client_ui_primitives.IconChevronLeftOutlineRegular;
4035
4099
  //#endregion
4036
4100
  //#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonView.module.css.mjs
4037
- const css$14 = ".IIa07q_shell{--mn-bg:var(--dsw-alias-bg-base);--mn-backdrop:var(--dsw-alias-bg-overlay,var(--mn-bg));--mn-surface:linear-gradient(var(--mn-bg), var(--mn-bg)), linear-gradient(var(--mn-backdrop), var(--mn-backdrop)) var(--mn-bg);--mn-layer-1:var(--dsw-alias-bg-layer-1);--mn-layer-2:var(--dsw-alias-bg-layer-2);--mn-fill:var(--dsw-alias-bg-module-platform);--mn-block-fill:var(--mn-fill);--mn-input:var(--dsw-alias-bg-layer-1);--mn-text:var(--dsw-alias-label-primary);--mn-muted:var(--dsw-alias-label-secondary);--mn-faint:var(--dsw-alias-label-tertiary);--mn-caption:var(--dsw-alias-label-caption);--mn-line:var(--dsw-alias-border-l2);--mn-line-strong:var(--dsw-alias-border-l3);--mn-field-line:var(--dsw-alias-border-l4);--mn-card-line:var(--dsw-alias-settings-card-stroke);--mn-accent:var(--dsw-alias-state-business-primary);--mn-hover:var(--dsw-alias-interactive-bg-hover);--mn-pressed:var(--dsw-alias-interactive-bg-active);--mn-danger:var(--dsw-alias-state-error-primary);--mn-success:var(--dsw-alias-state-success-primary);--mn-warn:var(--dsw-alias-state-warn-primary);--mn-idle:var(--dsw-alias-state-idle-primary);--mn-priority:var(--dsw-alias-state-warn-primary);--mn-focus:var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));--mn-code:var(--ds-font-family-code,\"SFMono-Regular\", Consolas, monospace);--mn-sans:var(--dsw-font-family,-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);box-sizing:border-box;min-width:0;height:100%;min-height:0;color:var(--mn-text);background:var(--mn-surface);font:13px/20px var(--mn-sans);-webkit-tap-highlight-color:transparent;flex-direction:column;display:flex;overflow:hidden;container:IIa07q_mnemon-workbench/inline-size}:has(>[data-conversation-scroll]>[data-slot=conversation\\.session]>*>[data-slot=conversation\\.view]>.IIa07q_shell[data-mnemon-surface=builtin])>[data-width-handle]{visibility:hidden;pointer-events:none}.IIa07q_shell *,.IIa07q_shell :before,.IIa07q_shell :after{box-sizing:border-box}:where(.IIa07q_shell) :where(button,input,select,textarea){color:inherit;font:inherit}:where(.IIa07q_shell) :where(button,select){touch-action:manipulation}.IIa07q_shell button:focus-visible,.IIa07q_shell input:focus-visible,.IIa07q_shell select:focus-visible,.IIa07q_shell textarea:focus-visible,.IIa07q_shell summary:focus-visible,.IIa07q_shell [role=button]:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--mn-focus);outline-offset:2px}.IIa07q_shell :is(textarea,input:not([type=checkbox],[type=radio],[type=file])):focus-visible{outline:none}.IIa07q_shell code{font-family:var(--mn-code);font-size:.92em}.IIa07q_masthead{background:var(--mn-surface);flex:none;align-items:center;gap:12px;min-height:48px;padding:10px 24px 4px;display:flex}.IIa07q_backButton{flex:none;align-items:center;gap:4px;min-width:max-content;display:inline-flex}.IIa07q_backButton>svg{flex:none}.IIa07q_brand{flex-wrap:wrap;flex:auto;align-items:center;gap:4px 10px;min-width:0;display:flex}.IIa07q_brand h1{flex:none;margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_storageMode{color:var(--mn-faint);background:var(--mn-fill);white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:1px 8px;font-size:11px;line-height:17px;display:inline-flex}.IIa07q_storageMode>strong{color:var(--mn-muted);font-weight:500}.IIa07q_statusCluster{color:var(--mn-faint);white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:13px;line-height:20px;display:inline-flex}.IIa07q_statusDot{background:var(--mn-idle);border-radius:50%;flex:none;width:6px;height:6px}.IIa07q_online{background:var(--mn-success)}.IIa07q_offline{background:var(--mn-danger)}.IIa07q_checking{background:var(--mn-idle)}.IIa07q_iconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-caption);cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.IIa07q_iconButton:hover:not(:disabled){color:var(--mn-muted);background:var(--mn-hover)}.IIa07q_iconButton>svg{flex:none}.IIa07q_headerActions{flex:none;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_workspacePicker{min-width:0;color:var(--mn-faint);align-items:center;gap:6px;font-size:12px;line-height:18px;display:inline-flex}.IIa07q_workspacePicker>[data-part=label]{white-space:nowrap}.IIa07q_workspacePicker button{width:min(200px,22vw);min-width:112px}.IIa07q_alert,.IIa07q_inlineError{border-radius:var(--dsw-radius-md);color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent);padding:8px 12px;font-size:12px;line-height:18px}.IIa07q_alert{flex-direction:column;flex:none;gap:2px;margin:8px 24px 0;display:flex}.IIa07q_alert ul{margin:4px 0 0;padding-left:18px}.IIa07q_alert[role=status]{color:var(--dsw-alias-state-warn-label,var(--mn-text));background:var(--dsw-alias-state-warn-tertiary,color-mix(in srgb, var(--mn-warn) 12%, transparent))}.IIa07q_noticeGroup,.IIa07q_noticeContents{flex-direction:column;flex:none;display:flex}.IIa07q_noticeToggle{display:none}.IIa07q_notice{flex:none;margin:8px 24px 0}.IIa07q_compositionStatus{border-radius:var(--dsw-radius-sm);min-width:0;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:2px 6px;display:inline-flex}.IIa07q_compositionStatus:hover:not(:disabled){background:var(--mn-hover)}.IIa07q_compositionStatus:disabled{cursor:default}.IIa07q_compositionStrategy{color:var(--mn-muted)}.IIa07q_compositionStrategy:before{content:\"·\";color:var(--mn-faint);margin-right:6px}.IIa07q_compositionStatusWrap{min-width:0;display:inline-flex;position:relative}.IIa07q_compositionSummary{z-index:20;border:.5px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-2);width:max-content;max-width:min(320px,100vw - 32px);box-shadow:var(--dsw-elevation-prominent);color:var(--mn-muted);white-space:normal;opacity:0;pointer-events:none;flex-direction:column;align-items:flex-start;gap:8px;padding:12px;font-size:12px;line-height:18px;transition:opacity .14s ease-out,transform .14s ease-out;display:flex;position:absolute;top:calc(100% + 6px);right:0;transform:translateY(-4px)}.IIa07q_compositionStatusWrap:hover .IIa07q_compositionSummary,.IIa07q_compositionStatusWrap:focus-within .IIa07q_compositionSummary{opacity:1;transition-delay:.2s;transform:none}.IIa07q_compositionSummary>strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_compositionLayers{flex-wrap:wrap;gap:6px;display:flex}.IIa07q_compositionHint{color:var(--mn-faint)}@media (prefers-reduced-motion:reduce){.IIa07q_compositionSummary{transition:none}}.IIa07q_workspaceMismatch{border:.5px solid color-mix(in srgb, var(--dsw-alias-state-warn-label,var(--mn-warn)) 20%, transparent);border-radius:var(--dsw-radius-sm);min-width:0;min-height:28px;color:var(--dsw-alias-state-warn-label,var(--mn-text));background:var(--dsw-alias-state-warn-tertiary,color-mix(in srgb, var(--mn-warn) 12%, transparent));white-space:nowrap;flex:none;align-items:center;gap:6px;padding:0 3px 0 10px;font-size:12px;font-weight:500;line-height:18px;display:inline-flex}.IIa07q_workspaceMismatch>button{border-radius:var(--dsw-radius-xs);min-height:22px;color:inherit;background:color-mix(in srgb, currentColor 10%, transparent);cursor:pointer;border:0;padding:0 8px;font-size:12px}.IIa07q_workspaceMismatch>button:hover{background:color-mix(in srgb, currentColor 16%, transparent)}.IIa07q_workspace{flex-direction:column;flex:1;min-height:0;display:flex}.IIa07q_topNavigation{border-bottom:.5px solid var(--mn-line-strong);background:var(--mn-surface);flex:none;align-items:flex-end;min-width:0;padding:0 24px;display:flex}.IIa07q_nav{overscroll-behavior-inline:contain;scrollbar-width:none;flex:1;align-items:flex-end;gap:28px;min-width:0;display:flex;overflow-x:auto}.IIa07q_nav::-webkit-scrollbar{display:none}.IIa07q_nav button{min-width:max-content;color:var(--mn-faint);text-align:left;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-.5px;padding:10px 0 9px;font-size:13px;font-weight:500;line-height:16px;display:flex;position:relative}.IIa07q_nav button:hover{color:var(--mn-muted)}.IIa07q_nav button[data-active]{color:var(--mn-accent)}.IIa07q_nav button[data-layer-disabled]:not([data-active]){color:var(--mn-caption)}.IIa07q_nav .IIa07q_layerDisabledBadge{border:.5px solid var(--mn-field-line);color:var(--mn-faint);border-radius:999px;align-items:center;padding:0 6px;font-size:11px;font-style:normal;font-weight:500;line-height:15px;display:inline-flex}.IIa07q_canvas{overscroll-behavior-x:contain;overscroll-behavior-y:auto;scroll-behavior:auto;-webkit-overflow-scrolling:touch;background:var(--mn-surface);flex:1;min-width:0;overflow:auto}.IIa07q_page{width:100%;min-height:100%;margin:0 auto;padding:20px 24px clamp(96px,14vh,150px)}.IIa07q_pageHeader{justify-content:space-between;align-items:flex-start;gap:16px 24px;margin-bottom:16px;display:flex}.IIa07q_pageHeader>div:first-child{min-width:0}.IIa07q_pageHeader h2{margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_pageHeader p{max-width:72ch;color:var(--mn-muted);margin:2px 0 0;font-size:13px;line-height:20px}.IIa07q_pageHeaderMeta{flex-wrap:wrap;flex:none;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_pageHeaderMeta>code{border:.5px solid var(--mn-field-line);color:var(--mn-faint);font:500 11px/17px var(--mn-sans);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;padding:1px 8px}.IIa07q_pageSpinner{width:20px;height:20px;color:var(--mn-faint);flex:none;place-items:center;display:inline-grid}.IIa07q_pageSpinner>i{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}.IIa07q_primaryButton,.IIa07q_secondaryButton,.IIa07q_ghostButton,.IIa07q_dangerButton,.IIa07q_dangerSolidButton{border-radius:var(--dsw-radius-md);min-height:32px;color:var(--mn-text);white-space:nowrap;cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;gap:4px;padding:0 12px;font-size:13px;font-weight:400;line-height:20px;transition:background-color .12s,color .12s,border-color .12s;display:inline-flex}.IIa07q_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-primary-fill)}.IIa07q_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.IIa07q_secondaryButton{border:.5px solid var(--mn-line-strong)}.IIa07q_secondaryButton:hover:not(:disabled),.IIa07q_ghostButton:hover:not(:disabled){background:var(--mn-hover)}.IIa07q_secondaryButton:active:not(:disabled),.IIa07q_ghostButton:active:not(:disabled){background:var(--mn-pressed)}.IIa07q_dangerButton{color:var(--mn-danger)}.IIa07q_dangerButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger,color-mix(in srgb, var(--mn-danger) 8%, transparent))}.IIa07q_dangerSolidButton{color:var(--dsw-static-neutral-00,#fff);background:var(--mn-danger)}.IIa07q_dangerSolidButton:hover:not(:disabled){background:color-mix(in srgb, var(--mn-danger), black 8%)}.IIa07q_shell :where(button:disabled){cursor:not-allowed;opacity:.4}.IIa07q_emptyState{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:200px;padding:32px 24px;display:flex}.IIa07q_emptyGlyph{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-lg);width:48px;height:48px;color:var(--mn-faint);flex:none;place-items:center;font-size:20px;line-height:1;display:grid}.IIa07q_emptyState h3{margin:0 0 4px;font-size:14px;font-weight:500;line-height:22px}.IIa07q_emptyState p{max-width:480px;color:var(--mn-faint);margin:0;font-size:13px;line-height:20px}.IIa07q_sourceManagementSummary{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);grid-template-columns:minmax(220px,1.2fr) minmax(260px,1fr) minmax(220px,1fr);gap:16px;margin-top:12px;padding:16px;display:grid}.IIa07q_sourceManagementIdentity{grid-template-columns:6px minmax(0,1fr);align-items:center;gap:10px;min-width:0;display:grid}.IIa07q_sourceManagementIdentity>span{background:var(--mn-success);border-radius:50%;width:6px;height:6px}.IIa07q_sourceManagementSummary[data-availability=degraded] .IIa07q_sourceManagementIdentity>span{background:var(--mn-warn)}.IIa07q_sourceManagementSummary[data-availability=unavailable] .IIa07q_sourceManagementIdentity>span{background:var(--mn-danger)}.IIa07q_sourceManagementIdentity>div{gap:2px;min-width:0;display:grid}.IIa07q_sourceManagementIdentity small,.IIa07q_sourceManagementCapabilities>small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sourceManagementIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_sourceManagementIdentity code{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.IIa07q_sourceManagementSummary dl{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;display:grid}.IIa07q_sourceManagementSummary dl>div{border-radius:var(--dsw-radius-sm);background:var(--mn-block-fill);align-content:center;gap:2px;min-width:0;padding:8px 10px;display:grid}.IIa07q_sourceManagementSummary dt{color:var(--mn-faint);font-size:11px;line-height:14px}.IIa07q_sourceManagementSummary dd{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:13px;line-height:20px;overflow:hidden}.IIa07q_sourceManagementSummary dd code{font-size:12px}.IIa07q_sourceManagementCapabilities{align-content:center;gap:6px;min-width:0;display:grid}.IIa07q_sourceManagementCapabilities>div{flex-wrap:wrap;gap:4px;display:flex}.IIa07q_sourceManagementCapabilities span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_sourceManagementDiagnostics,.IIa07q_sourceManagementForm{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-top:12px;padding:16px}.IIa07q_sourceManagementDiagnostics h3,.IIa07q_sourceManagementForm h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_sourceManagementDiagnostics ul{color:var(--mn-muted);gap:4px;margin:8px 0 0;padding-left:18px;font-size:12px;line-height:18px;display:grid}.IIa07q_sourceManagementForm>div:first-child p{color:var(--mn-faint);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_sourceManagementForm .IIa07q_formGrid label>small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sourceManagementForm .IIa07q_formGrid input[type=checkbox]{width:16px;min-width:0;height:16px;min-height:0;accent-color:var(--dsw-alias-brand-primary)}.IIa07q_sectionSpinner{z-index:6;width:20px;height:20px;color:var(--mn-faint);place-items:center;display:grid;position:absolute;top:10px;right:10px}.IIa07q_sectionSpinner>i{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}@keyframes IIa07q_mnemon-spin{to{transform:rotate(360deg)}}.IIa07q_inlineError{margin:0 0 12px}.IIa07q_loading{color:var(--mn-faint);padding:16px 0;font-size:13px}.IIa07q_bodyEdit{gap:12px;padding-top:2px;display:grid}.IIa07q_bodyEdit label,.IIa07q_formGrid label{color:var(--mn-muted);gap:6px;font-size:12px;font-weight:500;line-height:18px;display:grid}.IIa07q_bodyEdit input,.IIa07q_bodyEdit select,.IIa07q_bodyEdit textarea,.IIa07q_formGrid select,.IIa07q_formGrid input{border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;min-width:0;min-height:32px;color:var(--mn-text);background:var(--mn-input);outline:0;padding:5px 10px;font-size:13px;font-weight:400;line-height:20px}.IIa07q_bodyEdit textarea{resize:vertical}.IIa07q_bodyEdit input::placeholder,.IIa07q_bodyEdit textarea::placeholder,.IIa07q_formGrid input::placeholder{color:var(--dsw-alias-label-dimmed)}.IIa07q_bodyEdit input:focus,.IIa07q_bodyEdit select:focus,.IIa07q_bodyEdit textarea:focus,.IIa07q_formGrid select:focus,.IIa07q_formGrid input:focus{border-color:var(--mn-accent)}.IIa07q_providerFieldControl{gap:4px;min-width:0;display:grid}.IIa07q_providerFieldControl input[type=checkbox]{width:16px;height:16px;min-height:0;accent-color:var(--dsw-alias-brand-primary);margin:2px 0;padding:0}.IIa07q_bodyDeleteConfirm{gap:16px;display:grid}.IIa07q_bodyDeleteConfirm>p{color:var(--mn-muted);margin:0;font-size:13px;line-height:20px}.IIa07q_bodyDeleteSummary{border-radius:var(--dsw-radius-md);background:color-mix(in srgb, var(--mn-danger) 6%, transparent);gap:4px;padding:12px;display:grid}.IIa07q_bodyDeleteSummary strong{font-size:13px;font-weight:500}.IIa07q_bodyDeleteContent{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;font-weight:400;line-height:20px}.IIa07q_bodyDeleteSummary span{color:var(--mn-muted);font-size:12px;line-height:18px}.IIa07q_sectionHeading{justify-content:space-between;align-items:center;gap:16px;min-height:36px;margin-bottom:8px;display:flex}.IIa07q_sectionHeading h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_sectionHeading>div>span{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sectionHeading>strong{color:var(--mn-muted);background:var(--mn-fill);font-variant-numeric:tabular-nums;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_sectionHeading button{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-caption);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.IIa07q_sectionHeading button:hover:not(:disabled){color:var(--mn-muted);background:var(--mn-hover)}.IIa07q_runtimeNotice{border-radius:var(--dsw-radius-md);color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 8%, transparent);margin-bottom:12px;padding:8px 12px;font-size:12px;line-height:18px}.IIa07q_runtimeFootnote{color:var(--mn-faint);margin:12px 2px 0;font-size:12px;line-height:18px}.IIa07q_formGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:12px;display:grid}.IIa07q_listProgress{border-top:.5px solid var(--mn-line);min-height:56px;color:var(--mn-faint);justify-content:center;align-items:center;gap:12px;margin-top:12px;padding:10px;font-size:12px;line-height:18px;display:flex}.IIa07q_compactListProgress{border-top:.5px solid var(--mn-line);color:var(--mn-faint);text-align:center;justify-items:stretch;gap:8px;margin-top:8px;padding:10px 2px 2px;font-size:12px;line-height:18px;display:grid}.IIa07q_compactListProgress button{width:100%}.IIa07q_modalPortal{z-index:1000;isolation:isolate;pointer-events:none;position:fixed;inset:0}.IIa07q_modalTheme.IIa07q_modalTheme.IIa07q_modalTheme{width:auto;min-width:0;height:auto;min-height:0;color:var(--mn-text);pointer-events:none;background:0 0;display:block;position:absolute;inset:0;overflow:visible}.IIa07q_modalBackdrop{z-index:0;overscroll-behavior:contain;padding:max(24px, var(--dsh-frame-top-clearance,24px)) 24px;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);touch-action:none;pointer-events:auto;justify-content:center;align-items:center;animation:.18s ease-out both IIa07q_mnemon-dialog-backdrop-enter;display:flex;position:fixed;inset:0;overflow:hidden}.IIa07q_modal{box-sizing:border-box;border-radius:var(--dsw-radius-panel);background:linear-gradient(var(--mn-layer-2), var(--mn-layer-2)), var(--mn-surface);width:min(640px,100%);min-height:0;max-height:100%;box-shadow:var(--dsw-elevation-prominent);touch-action:auto;transform-origin:50% 100%;backface-visibility:hidden;will-change:transform, opacity;border:0;flex-direction:column;animation:.2s cubic-bezier(.2,.75,.2,1) both IIa07q_mnemon-dialog-enter;display:flex;overflow:hidden}.IIa07q_modalBackdrop[data-closing],.IIa07q_modal[data-closing]{pointer-events:none}.IIa07q_modalDragHandle{display:none}.IIa07q_modalWide{width:min(760px,100%)}.IIa07q_modal>header{flex:none;justify-content:space-between;align-items:flex-start;gap:8px;padding:22px 14px 12px 24px;display:flex}.IIa07q_modal>header>div{min-width:0;padding-top:2px}.IIa07q_modal>header h2{margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_modal>header p{overflow-wrap:anywhere;max-width:64ch;color:var(--mn-muted);margin:4px 0 0;font-size:13px;line-height:20px}.IIa07q_modal>header .IIa07q_iconButton{color:var(--mn-muted);flex:none}.IIa07q_modalBody{overscroll-behavior:contain;scrollbar-gutter:stable;touch-action:pan-y;-webkit-overflow-scrolling:touch;min-height:0;padding:8px 24px 20px;overflow:hidden auto}.IIa07q_modalFooter{background:0 0;flex:none;justify-content:flex-end;align-items:center;gap:12px;padding:4px 24px 24px;display:flex}.IIa07q_modalFooter button{min-height:36px;padding-inline:14px}.IIa07q_modalFooterMeta{color:var(--mn-faint);margin-right:auto;font-size:12px;line-height:18px}.IIa07q_modalFooterActions{justify-content:flex-end;align-items:center;gap:8px;min-width:0;margin-left:auto;display:flex}@keyframes IIa07q_mnemon-dialog-backdrop-enter{0%{opacity:0}}@keyframes IIa07q_mnemon-dialog-enter{0%{opacity:0;transform:translateY(8px)scale(.985)}}@keyframes IIa07q_mnemon-sheet-enter{0%{transform:translateY(calc(100% + 32px))}to{transform:translate3d(0, var(--mn-modal-drag-y,0px), 0)}}@keyframes IIa07q_mnemon-metadata-sweep{to{transform:translate(120%)}}@keyframes IIa07q_mnemon-metadata-refreshed{0%{border-color:color-mix(in srgb, var(--mn-accent) 60%, var(--mn-card-line));box-shadow:0 0 0 2px color-mix(in srgb, var(--mn-accent) 14%, transparent)}to{border-color:var(--mn-card-line);box-shadow:0 0 #0000}}.IIa07q_healthStrip{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);flex-wrap:wrap;margin-bottom:16px;display:flex;position:relative;overflow:hidden}.IIa07q_asyncStatusBlock{min-width:0;min-height:36px;position:relative}.IIa07q_healthStrip article{box-sizing:border-box;border-top:.5px solid var(--mn-line);border-left:.5px solid var(--mn-line);flex:150px;align-items:flex-start;gap:10px;min-width:0;min-height:76px;margin:-.5px 0 0 -.5px;padding:14px 16px;display:flex}.IIa07q_healthStrip article>div{min-width:0}.IIa07q_healthStrip small{color:var(--mn-faint);margin-bottom:2px;font-size:12px;line-height:18px;display:block}.IIa07q_healthStrip strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:22px;display:block;overflow:hidden}.IIa07q_healthStrip p{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin:2px 0 0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_healthIndicator{border-radius:50%;flex:none;width:6px;height:6px;margin-top:6px}.IIa07q_healthGood{background:var(--mn-success)}.IIa07q_healthBad{background:var(--mn-danger)}.IIa07q_healthMuted{background:var(--mn-idle)}.IIa07q_providerHealth{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:16px}.IIa07q_providerHealthList{margin-top:8px}.IIa07q_providerHealthList article{align-items:center;gap:12px;min-width:0;min-height:56px;padding:8px 0;display:flex}.IIa07q_providerHealthList article+article{border-top:.5px solid var(--mn-line)}.IIa07q_providerHealthOff{border-top:.5px solid var(--mn-line);min-width:0;color:var(--mn-faint);justify-content:space-between;align-items:center;gap:12px;margin-top:4px;padding-top:10px;font-size:12px;line-height:18px;display:flex}.IIa07q_providerHealthMark{box-sizing:border-box;border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-md);flex:none;place-items:center;width:36px;height:36px;padding:6px;display:grid;overflow:hidden}.IIa07q_providerHealthMark>img,.IIa07q_providerHealthMark>svg{object-fit:contain;border-radius:4px;width:100%;height:100%;display:block}.IIa07q_providerHealthCopy{flex:1;gap:0;min-width:0;display:grid}.IIa07q_providerHealthCopy strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_providerHealthCopy small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_providerHealthCopy p{color:var(--mn-danger);text-overflow:ellipsis;white-space:nowrap;margin:2px 0 0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_providerHealthMeta{flex:none;align-items:center;gap:6px;display:flex}.IIa07q_providerHealthMeta small{color:var(--mn-faint);font-variant-numeric:tabular-nums;font-size:12px;line-height:18px}.IIa07q_providerHealthSignal{background:var(--mn-idle);border-radius:50%;width:6px;height:6px}.IIa07q_providerHealthList article[data-status=healthy] .IIa07q_providerHealthSignal{background:var(--mn-success)}.IIa07q_providerHealthList article[data-status=unhealthy] .IIa07q_providerHealthSignal{background:var(--mn-danger)}.IIa07q_providerHealthList article[data-status=idle] .IIa07q_providerHealthSignal{background:var(--mn-idle)}.IIa07q_storageDomains{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:16px}.IIa07q_storageRoot{border-radius:var(--dsw-radius-md);background:var(--mn-block-fill);justify-content:space-between;align-items:center;gap:16px;min-width:0;margin-top:12px;padding:10px 12px;display:flex}.IIa07q_storageRoot>div:first-child{gap:2px;min-width:0;display:grid}.IIa07q_storageRoot span,.IIa07q_storageRoot small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_storageRoot code{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.IIa07q_storageRoot>div:last-child{flex:none;justify-items:end;gap:2px;display:grid}.IIa07q_storageRoot strong{font-variant-numeric:tabular-nums;font-size:13px;font-weight:500}.IIa07q_storageAreaGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:8px;display:grid}.IIa07q_storageAreaGrid article{box-sizing:border-box;border:.5px solid var(--mn-line);border-radius:var(--dsw-radius-md);flex-direction:column;min-width:0;min-height:148px;padding:12px 14px;display:flex}.IIa07q_storageAreaGrid article>header{justify-content:space-between;align-items:center;gap:8px;display:flex}.IIa07q_storageAreaGrid article>header>div{align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_storageAreaGrid article>header span{background:var(--mn-idle);border-radius:50%;flex:none;width:6px;height:6px}.IIa07q_storageAreaGrid article[data-status=ready]>header span{background:var(--mn-success)}.IIa07q_storageAreaGrid article[data-status=invalid]>header span{background:var(--mn-danger)}.IIa07q_storageAreaGrid article>header strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;overflow:hidden}.IIa07q_storageAreaGrid article>header em{color:var(--mn-faint);white-space:nowrap;font-size:11px;font-style:normal;line-height:14px}.IIa07q_storageAreaMetric{align-items:baseline;gap:6px;margin-top:12px;display:flex}.IIa07q_storageAreaMetric strong{font-variant-numeric:tabular-nums;font-size:20px;font-weight:500;line-height:28px}.IIa07q_storageAreaMetric span{color:var(--mn-faint);font-size:12px}.IIa07q_storageAreaMetric code{color:var(--mn-faint);margin-left:auto;font-size:11px}.IIa07q_storageAreaGrid article>p{min-height:36px;color:var(--mn-faint);margin:6px 0 8px;font-size:12px;line-height:18px}.IIa07q_storagePath{border-top:.5px solid var(--mn-line);color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:auto;padding-top:8px;font-size:11px;line-height:16px;display:block;overflow:hidden}.IIa07q_storageAreaGrid article>small{color:var(--mn-danger);margin-top:6px;font-size:12px;line-height:18px;display:block}.IIa07q_storageUnavailable{border-radius:var(--dsw-radius-md);min-height:120px;color:var(--mn-muted);background:var(--mn-block-fill);text-align:center;place-content:center;gap:4px;margin-top:12px;display:grid}.IIa07q_storageUnavailable strong{font-size:13px;font-weight:500}.IIa07q_storageUnavailable p{max-width:520px;color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_storageFootnote{color:var(--mn-faint);margin:12px 0 0;font-size:12px;line-height:18px}.IIa07q_statusSectionHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_statusSectionHeader h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_statusSectionHeader p{max-width:640px;color:var(--mn-faint);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_phaseBadge{color:var(--mn-muted);background:var(--mn-fill);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_statusHeaderActions{align-items:center;gap:8px;display:flex}.IIa07q_versionDialogBody{grid-template-columns:minmax(0,1fr);gap:12px;display:grid}.IIa07q_versionChecking{min-height:112px;color:var(--mn-muted);justify-content:center;align-items:center;gap:10px;font-size:13px;display:flex}.IIa07q_versionChecking span{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}.IIa07q_versionError,.IIa07q_versionResult{border-radius:var(--dsw-radius-md);color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent);padding:10px 12px}.IIa07q_versionResult{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 8%, transparent)}.IIa07q_versionError strong,.IIa07q_versionResult strong{font-size:13px;font-weight:500}.IIa07q_versionError p,.IIa07q_versionResult p{color:var(--mn-muted);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_versionList{grid-template-columns:minmax(0,1fr);gap:8px;display:grid}.IIa07q_versionList article{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);padding:12px 14px}.IIa07q_versionList article>header{justify-content:space-between;align-items:center;gap:12px;display:flex}.IIa07q_versionList article>header>div{align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_versionList article>header strong{font-size:14px;font-weight:500;line-height:22px}.IIa07q_versionList article>header span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_versionList article>header em{color:var(--mn-success);white-space:nowrap;font-size:12px;font-style:normal;line-height:18px}.IIa07q_versionList article[data-outdated]>header em{color:var(--mn-accent)}.IIa07q_versionNumbers{grid-template-columns:1fr auto 1fr;align-items:end;gap:10px;margin-top:10px;display:grid}.IIa07q_versionNumbers>div{gap:2px;display:grid}.IIa07q_versionNumbers small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_versionNumbers code{font-size:13px}.IIa07q_versionNumbers>span{color:var(--mn-faint);padding-bottom:1px}.IIa07q_versionLocation{min-width:0;color:var(--mn-faint);gap:6px;margin-top:8px;font-size:12px;line-height:18px;display:flex}.IIa07q_versionLocation>span{flex:none}.IIa07q_versionLocation>code{min-width:0;color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.IIa07q_versionList article>footer{border-top:.5px solid var(--mn-line);justify-content:space-between;align-items:flex-end;gap:16px;margin-top:10px;padding-top:10px;display:flex}.IIa07q_versionList article>footer p{max-width:470px;color:var(--mn-muted);margin:0;font-size:12px;line-height:18px}.IIa07q_versionList article>footer button{flex:none}.IIa07q_versionList article>header em[data-state=unknown],.IIa07q_versionList article>header em[data-state=local],.IIa07q_versionList article>header em[data-state=missing]{color:var(--mn-faint)}.IIa07q_versionList article>header em[data-state=restart]{color:var(--mn-accent)}.IIa07q_versionNotice{color:var(--mn-muted);margin:8px 0 0;font-size:12px;line-height:18px}.IIa07q_versionGuidance{border-radius:var(--dsw-radius-md);background:var(--mn-block-fill);gap:6px;min-width:0;margin-top:10px;padding:10px 12px;display:grid}.IIa07q_versionGuidance>strong{font-size:13px;font-weight:500}.IIa07q_versionGuidance>p{color:var(--mn-muted);margin:0;font-size:12px;line-height:18px}.IIa07q_versionGuidance>a{color:var(--dsw-alias-link,var(--mn-accent));justify-self:start;font-size:12px}.IIa07q_versionGuidanceDetails{min-width:0;color:var(--mn-muted);font-size:12px;line-height:18px}.IIa07q_versionGuidanceDetails>summary{cursor:pointer}.IIa07q_versionGuidanceDetails>p{margin:8px 0}.IIa07q_versionGuidanceDetails>a{color:var(--dsw-alias-link,var(--mn-accent))}.IIa07q_versionCommand{border-radius:var(--dsw-radius-sm);background:var(--mn-layer-1);flex-wrap:wrap;align-items:center;gap:8px;min-width:0;padding:8px 10px;display:flex}.IIa07q_versionCommand>code{overflow-wrap:anywhere;white-space:pre-wrap;user-select:text;flex:1;min-width:0;font-size:12px}.IIa07q_versionCommand>button{flex:none}.IIa07q_versionCommand>small{color:var(--mn-faint);flex-basis:100%;font-size:12px}.IIa07q_versionPackages{border-top:.5px solid var(--mn-line);min-width:0;margin-top:12px}.IIa07q_versionPackagesToggle{width:100%;min-height:44px;color:var(--mn-text);text-align:start;cursor:pointer;background:0 0;border:0;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 0 0;display:flex}.IIa07q_versionPackagesToggle>strong{font-size:13px;font-weight:500}.IIa07q_versionPackagesToggle>small{color:var(--mn-faint);margin-left:auto;font-size:12px}.IIa07q_versionPackages h4{color:var(--mn-faint);margin:16px 0 8px;font-size:12px;font-weight:500;line-height:18px}.IIa07q_versionPackages ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.IIa07q_versionPackage{border:.5px solid var(--mn-line);border-radius:var(--dsw-radius-md);min-width:0;padding:10px 12px}.IIa07q_versionPackageHeader{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 12px;display:flex}.IIa07q_versionPackageHeader strong{overflow-wrap:anywhere;min-width:0;font-size:13px;font-weight:500}.IIa07q_versionPackageHeader em{color:var(--mn-faint);font-size:12px;font-style:normal}.IIa07q_versionPackageHeader em[data-state=available],.IIa07q_versionPackageHeader em[data-state=restart]{color:var(--mn-accent)}.IIa07q_versionPackageHeader em[data-state=current]{color:var(--mn-success)}.IIa07q_versionPackageMeta,.IIa07q_versionPackageNumbers{color:var(--mn-faint);flex-wrap:wrap;gap:6px 14px;margin-top:6px;font-size:12px;line-height:18px;display:flex}.IIa07q_versionPackageNumbers code{color:var(--mn-text)}.IIa07q_versionPackageAction{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-top:8px;display:flex}.IIa07q_versionPackageAction p{min-width:150px;color:var(--mn-muted);flex:1;margin:0;font-size:12px;line-height:18px}.IIa07q_versionPackageAction button{flex:none}@media (width<=1000px){.IIa07q_sourceManagementSummary{grid-template-columns:1fr 1fr}.IIa07q_sourceManagementCapabilities{grid-column:1/-1}.IIa07q_storageAreaGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.IIa07q_shell{min-height:0;overflow:hidden}.IIa07q_sourceManagementSummary{grid-template-columns:1fr}.IIa07q_sourceManagementSummary dl,.IIa07q_sourceManagementCapabilities{grid-column:auto}.IIa07q_masthead{padding:8px 16px 2px}.IIa07q_alert,.IIa07q_notice{margin-inline:16px}.IIa07q_topNavigation{padding:0 16px}.IIa07q_workspacePicker>[data-part=label]{display:none}.IIa07q_workspacePicker button{width:min(170px,32vw)}.IIa07q_modalBackdrop{padding:max(10px, env(safe-area-inset-top,0px)) 0 0;align-items:flex-end}.IIa07q_modal,.IIa07q_modalWide{width:100vw;max-height:calc(100vh - max(10px, env(safe-area-inset-top,0px)));border-radius:var(--dsw-radius-xl) var(--dsw-radius-xl) 0 0;transform:translate3d(0, var(--mn-modal-drag-y,0px), 0);animation-name:IIa07q_mnemon-sheet-enter;animation-duration:.34s;animation-timing-function:cubic-bezier(.2,.82,.2,1)}.IIa07q_modalDragHandle{cursor:grab;touch-action:none;user-select:none;flex:none;place-items:center;width:100%;height:28px;display:grid}.IIa07q_modalDragHandle span{background:var(--mn-line-strong);border-radius:999px;width:36px;height:4px;transition:width .14s,background-color .14s}.IIa07q_modal[data-dragging] .IIa07q_modalDragHandle{cursor:grabbing}.IIa07q_modal[data-dragging] .IIa07q_modalDragHandle span{background:var(--dsw-alias-border-l4);width:44px}.IIa07q_modal>header{padding:10px max(14px, env(safe-area-inset-right,0px)) 12px max(14px, env(safe-area-inset-left,0px));gap:12px}.IIa07q_modal>header p{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.IIa07q_modal>header .IIa07q_iconButton{width:44px;height:44px;margin:-4px -5px -4px 0}.IIa07q_modalBody{padding:14px max(14px, env(safe-area-inset-right,0px)) 18px max(14px, env(safe-area-inset-left,0px));scrollbar-gutter:auto;scroll-padding-bottom:12px}.IIa07q_modalBody button{min-height:44px}.IIa07q_modalFooter{padding:10px max(14px, env(safe-area-inset-right,0px)) calc(10px + env(safe-area-inset-bottom,0px)) max(14px, env(safe-area-inset-left,0px));flex-direction:column;align-items:stretch;gap:8px}.IIa07q_modalFooterMeta{max-width:none;margin:0}.IIa07q_modalFooterActions{grid-template-columns:minmax(82px,.55fr) minmax(0,1.45fr);gap:8px;width:100%;margin:0;display:grid}.IIa07q_modalFooterActions button{white-space:normal;min-width:0;min-height:44px;padding-block:8px}.IIa07q_versionList article>footer{flex-direction:column;align-items:stretch}.IIa07q_nav{gap:22px}.IIa07q_page{padding:16px 16px calc(170px + env(safe-area-inset-bottom,0px))}.IIa07q_pageHeader{gap:10px;display:grid}.IIa07q_pageHeaderMeta{justify-content:flex-start}.IIa07q_healthStrip article{flex-basis:100%}.IIa07q_providerHealthMeta{flex-direction:column;align-items:flex-end;gap:4px}.IIa07q_storageRoot{flex-direction:column;align-items:flex-start}.IIa07q_storageRoot>div:last-child{justify-items:start}.IIa07q_storageAreaGrid{grid-template-columns:1fr}}@media (width<=520px){.IIa07q_workspacePicker select{width:min(150px,39vw)}.IIa07q_nav{scroll-snap-type:x proximity;gap:18px}.IIa07q_nav button{scroll-snap-align:start}.IIa07q_pageHeaderMeta{align-items:stretch}.IIa07q_pageHeaderMeta>code{align-items:center;display:inline-flex}.IIa07q_pageHeaderMeta>button{flex:1}.IIa07q_emptyState{min-height:180px;padding:24px 16px}.IIa07q_formGrid{grid-template-columns:1fr}}@media (width<=360px){.IIa07q_modalFooterActions{grid-template-columns:1fr}}@media (height<=420px){.IIa07q_modal>header p{white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}}@media (width>=761px) and (height<=560px){.IIa07q_modalBackdrop{padding:8px}}@supports (height:100dvh){@media (width<=760px){.IIa07q_modal,.IIa07q_modalWide{max-height:calc(100dvh - max(10px, env(safe-area-inset-top,0px)))}}}@media (width<=1000px) and (height<=760px){.IIa07q_shell{min-height:0}.IIa07q_masthead{min-height:44px}}@media (width<=760px) and (pointer:coarse){.IIa07q_shell input,.IIa07q_shell select,.IIa07q_shell textarea{font-size:16px!important}}@media (pointer:coarse){.IIa07q_modal>header .IIa07q_iconButton{width:44px;min-width:44px;height:44px;min-height:44px}.IIa07q_modalBody button,.IIa07q_modalFooter button{min-height:44px}}@media (prefers-reduced-motion:reduce){.IIa07q_shell *,.IIa07q_shell :before,.IIa07q_shell :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.IIa07q_modalBackdrop,.IIa07q_modal{animation:none!important}}.IIa07q_page[data-source-page]>.IIa07q_workspacePicker{margin-bottom:16px}.IIa07q_page[data-source-page] .IIa07q_page{width:100%;min-height:0;margin:0;padding:0}@container IIa07q_mnemon-workbench (width<=520px){.IIa07q_masthead{flex-wrap:wrap;gap:4px 8px;min-height:0;padding:8px 16px 2px}.IIa07q_shell .IIa07q_brand{display:contents}.IIa07q_brand h1{text-overflow:ellipsis;white-space:nowrap;flex:1 1 0;min-width:0;overflow:hidden}.IIa07q_backButton>span,.IIa07q_storageMode{display:none}.IIa07q_backButton{min-width:28px;padding-inline:4px}.IIa07q_shell .IIa07q_masthead .IIa07q_headerActions{margin-left:auto}.IIa07q_shell .IIa07q_masthead .IIa07q_compositionStatus>span:not([data-state]){display:none}.IIa07q_shell .IIa07q_masthead .IIa07q_statusCluster>.IIa07q_iconButton{display:inline-flex}.IIa07q_shell .IIa07q_masthead .IIa07q_workspacePicker{flex:1 0 100%;order:1}.IIa07q_shell .IIa07q_masthead .IIa07q_workspacePicker>[data-part=label]{display:none}.IIa07q_shell .IIa07q_masthead .IIa07q_workspacePicker>:last-child{flex:1;min-width:0}.IIa07q_shell .IIa07q_masthead .IIa07q_workspacePicker button{width:100%;min-width:0}.IIa07q_shell .IIa07q_masthead .IIa07q_workspaceMismatch{flex:1 0 100%;order:2}.IIa07q_shell .IIa07q_masthead .IIa07q_workspaceMismatch>span{display:inline}.IIa07q_alert,.IIa07q_notice{margin-inline:16px}.IIa07q_topNavigation{padding-inline:16px}.IIa07q_noticeToggle{border-radius:var(--dsw-radius-md);min-width:0;min-height:28px;color:var(--dsw-alias-state-warn-label,var(--mn-text));background:var(--dsw-alias-state-warn-tertiary,color-mix(in srgb, var(--mn-warn) 12%, transparent));text-align:left;cursor:pointer;border:0;justify-content:space-between;align-items:center;gap:8px;margin:8px 16px 0;padding:4px 12px;font-size:12px;line-height:18px;display:flex}.IIa07q_noticeToggle>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_noticeToggle>svg{flex:none;transform:rotate(-90deg)}.IIa07q_noticeContents{display:none}.IIa07q_noticeGroup[data-expanded] .IIa07q_noticeContents{display:flex}.IIa07q_noticeGroup[data-expanded] .IIa07q_noticeToggle>svg{transform:rotate(90deg)}}@media (pointer:coarse){.IIa07q_masthead :is(button,select),.IIa07q_noticeToggle,.IIa07q_nav button{min-height:44px}.IIa07q_sectionHeading button{min-width:44px;min-height:44px}.IIa07q_primaryButton,.IIa07q_secondaryButton,.IIa07q_ghostButton,.IIa07q_dangerButton,.IIa07q_dangerSolidButton,.IIa07q_page :is(input:not([type=checkbox]):not([type=radio]),select,textarea){min-height:44px}.IIa07q_canvas{overscroll-behavior:contain}}";
4101
+ const css$14 = ".IIa07q_shell{--mn-bg:var(--dsw-alias-bg-base);--mn-backdrop:var(--dsw-alias-bg-overlay,var(--mn-bg));--mn-surface:linear-gradient(var(--mn-bg), var(--mn-bg)), linear-gradient(var(--mn-backdrop), var(--mn-backdrop)) var(--mn-bg);--mn-layer-1:var(--dsw-alias-bg-layer-1);--mn-layer-2:var(--dsw-alias-bg-layer-2);--mn-fill:var(--dsw-alias-bg-module-platform);--mn-block-fill:var(--mn-fill);--mn-input:var(--dsw-alias-bg-layer-1);--mn-text:var(--dsw-alias-label-primary);--mn-muted:var(--dsw-alias-label-secondary);--mn-faint:var(--dsw-alias-label-tertiary);--mn-caption:var(--dsw-alias-label-caption);--mn-line:var(--dsw-alias-border-l2);--mn-line-strong:var(--dsw-alias-border-l3);--mn-field-line:var(--dsw-alias-border-l4);--mn-card-line:var(--dsw-alias-settings-card-stroke);--mn-accent:var(--dsw-alias-state-business-primary);--mn-hover:var(--dsw-alias-interactive-bg-hover);--mn-pressed:var(--dsw-alias-interactive-bg-active);--mn-danger:var(--dsw-alias-state-error-primary);--mn-success:var(--dsw-alias-state-success-primary);--mn-warn:var(--dsw-alias-state-warn-primary);--mn-idle:var(--dsw-alias-state-idle-primary);--mn-priority:var(--dsw-alias-state-warn-primary);--mn-focus:var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));--mn-code:var(--ds-font-family-code,\"SFMono-Regular\", Consolas, monospace);--mn-sans:var(--dsw-font-family,-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);box-sizing:border-box;min-width:0;height:100%;min-height:0;color:var(--mn-text);background:var(--mn-surface);font:13px/20px var(--mn-sans);-webkit-tap-highlight-color:transparent;flex-direction:column;display:flex;overflow:hidden;container:IIa07q_mnemon-workbench/inline-size}:has(>[data-conversation-scroll]>[data-slot=conversation\\.session]>*>[data-slot=conversation\\.view]>.IIa07q_shell[data-mnemon-surface=builtin])>[data-width-handle]{visibility:hidden;pointer-events:none}.IIa07q_shell *,.IIa07q_shell :before,.IIa07q_shell :after{box-sizing:border-box}:where(.IIa07q_shell) :where(button,input,select,textarea){color:inherit;font:inherit}:where(.IIa07q_shell) :where(button,select){touch-action:manipulation}.IIa07q_shell button:focus-visible,.IIa07q_shell input:focus-visible,.IIa07q_shell select:focus-visible,.IIa07q_shell textarea:focus-visible,.IIa07q_shell summary:focus-visible,.IIa07q_shell [role=button]:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--mn-focus);outline-offset:2px}.IIa07q_shell :is(textarea,input:not([type=checkbox],[type=radio],[type=file])):focus-visible{outline:none}.IIa07q_shell code{font-family:var(--mn-code);font-size:.92em}.IIa07q_masthead{background:var(--mn-surface);flex:none;align-items:center;gap:12px;min-height:48px;padding:10px 24px 4px;display:flex}.IIa07q_backButton{flex:none;align-items:center;gap:4px;min-width:max-content;display:inline-flex}.IIa07q_backButton>svg{flex:none}.IIa07q_brand{flex-wrap:wrap;flex:auto;align-items:center;gap:4px 10px;min-width:0;display:flex}.IIa07q_brand h1{flex:none;margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_storageMode{color:var(--mn-faint);background:var(--mn-fill);white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:1px 8px;font-size:11px;line-height:17px;display:inline-flex}.IIa07q_storageMode>strong{color:var(--mn-muted);font-weight:500}.IIa07q_statusCluster{color:var(--mn-faint);white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:13px;line-height:20px;display:inline-flex}.IIa07q_statusDot{background:var(--mn-idle);border-radius:50%;flex:none;width:6px;height:6px}.IIa07q_online{background:var(--mn-success)}.IIa07q_offline{background:var(--mn-danger)}.IIa07q_checking{background:var(--mn-idle)}.IIa07q_iconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-caption);cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.IIa07q_iconButton:hover:not(:disabled){color:var(--mn-muted);background:var(--mn-hover)}.IIa07q_iconButton>svg{flex:none}.IIa07q_headerActions{flex:none;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_workspacePicker{min-width:0;color:var(--mn-faint);align-items:center;gap:6px;font-size:12px;line-height:18px;display:inline-flex}.IIa07q_workspacePicker>[data-part=label]{white-space:nowrap}.IIa07q_workspacePicker button{width:min(200px,22vw);min-width:112px}.IIa07q_alert,.IIa07q_inlineError{border-radius:var(--dsw-radius-md);color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent);padding:8px 12px;font-size:12px;line-height:18px}.IIa07q_alert{flex-direction:column;flex:none;gap:2px;margin:8px 24px 0;display:flex}.IIa07q_alert ul{margin:4px 0 0;padding-left:18px}.IIa07q_alert[role=status]{color:var(--dsw-alias-state-warn-label,var(--mn-text));background:var(--dsw-alias-state-warn-tertiary,color-mix(in srgb, var(--mn-warn) 12%, transparent))}.IIa07q_noticeGroup,.IIa07q_noticeContents{flex-direction:column;flex:none;display:flex}.IIa07q_noticeToggle{display:none}.IIa07q_notice{flex:none;margin:8px 24px 0}.IIa07q_compositionStatus{border-radius:var(--dsw-radius-sm);min-width:0;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:2px 6px;display:inline-flex}.IIa07q_compositionStatus:hover:not(:disabled){background:var(--mn-hover)}.IIa07q_compositionStatus:disabled{cursor:default}.IIa07q_compositionStrategy{color:var(--mn-muted)}.IIa07q_compositionStrategy:before{content:\"·\";color:var(--mn-faint);margin-right:6px}.IIa07q_compositionStatusWrap{min-width:0;display:inline-flex;position:relative}.IIa07q_compositionSummary{z-index:20;border:.5px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-2);width:max-content;max-width:min(320px,100vw - 32px);box-shadow:var(--dsw-elevation-prominent);color:var(--mn-muted);white-space:normal;opacity:0;pointer-events:none;flex-direction:column;align-items:flex-start;gap:8px;padding:12px;font-size:12px;line-height:18px;transition:opacity .14s ease-out,transform .14s ease-out;display:flex;position:absolute;top:calc(100% + 6px);right:0;transform:translateY(-4px)}.IIa07q_compositionStatusWrap:hover .IIa07q_compositionSummary,.IIa07q_compositionStatusWrap:focus-within .IIa07q_compositionSummary{opacity:1;transition-delay:.2s;transform:none}.IIa07q_compositionSummary>strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_compositionLayers{flex-wrap:wrap;gap:6px;display:flex}.IIa07q_compositionHint{color:var(--mn-faint)}@media (prefers-reduced-motion:reduce){.IIa07q_compositionSummary{transition:none}}.IIa07q_workspaceMismatch{border:.5px solid color-mix(in srgb, var(--dsw-alias-state-warn-label,var(--mn-warn)) 20%, transparent);border-radius:var(--dsw-radius-sm);min-width:0;min-height:28px;color:var(--dsw-alias-state-warn-label,var(--mn-text));background:var(--dsw-alias-state-warn-tertiary,color-mix(in srgb, var(--mn-warn) 12%, transparent));white-space:nowrap;flex:none;align-items:center;gap:6px;padding:0 3px 0 10px;font-size:12px;font-weight:500;line-height:18px;display:inline-flex}.IIa07q_workspaceMismatch>button{border-radius:var(--dsw-radius-xs);min-height:22px;color:inherit;background:color-mix(in srgb, currentColor 10%, transparent);cursor:pointer;border:0;padding:0 8px;font-size:12px}.IIa07q_workspaceMismatch>button:hover{background:color-mix(in srgb, currentColor 16%, transparent)}.IIa07q_workspace{flex-direction:column;flex:1;min-height:0;display:flex}.IIa07q_topNavigation{border-bottom:.5px solid var(--mn-line-strong);background:var(--mn-surface);flex:none;align-items:flex-end;min-width:0;padding:0 24px;display:flex}.IIa07q_nav{overscroll-behavior-inline:contain;scrollbar-width:none;flex:1;align-items:flex-end;gap:28px;min-width:0;display:flex;overflow-x:auto}.IIa07q_nav::-webkit-scrollbar{display:none}.IIa07q_nav button{min-width:max-content;color:var(--mn-faint);text-align:left;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-.5px;padding:10px 0 9px;font-size:13px;font-weight:500;line-height:16px;display:flex;position:relative}.IIa07q_nav button:hover{color:var(--mn-muted)}.IIa07q_nav button[data-active]{color:var(--mn-accent)}.IIa07q_nav button[data-layer-disabled]:not([data-active]){color:var(--mn-caption)}.IIa07q_nav .IIa07q_layerDisabledBadge{border:.5px solid var(--mn-field-line);color:var(--mn-faint);border-radius:999px;align-items:center;padding:0 6px;font-size:11px;font-style:normal;font-weight:500;line-height:15px;display:inline-flex}.IIa07q_canvas{overscroll-behavior-x:contain;overscroll-behavior-y:auto;scroll-behavior:auto;-webkit-overflow-scrolling:touch;background:var(--mn-surface);flex:1;min-width:0;overflow:auto}.IIa07q_page{width:100%;min-height:100%;margin:0 auto;padding:20px 24px clamp(96px,14vh,150px)}.IIa07q_pageHeader{justify-content:space-between;align-items:flex-start;gap:16px 24px;margin-bottom:16px;display:flex}.IIa07q_pageHeader>div:first-child{min-width:0}.IIa07q_pageHeader h2{margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_pageHeader p{max-width:72ch;color:var(--mn-muted);margin:2px 0 0;font-size:13px;line-height:20px}.IIa07q_pageHeaderMeta{flex-wrap:wrap;flex:none;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_pageHeaderMeta>code{border:.5px solid var(--mn-field-line);color:var(--mn-faint);font:500 11px/17px var(--mn-sans);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;padding:1px 8px}.IIa07q_pageSpinner{width:20px;height:20px;color:var(--mn-faint);flex:none;place-items:center;display:inline-grid}.IIa07q_pageSpinner>i{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}.IIa07q_primaryButton,.IIa07q_secondaryButton,.IIa07q_ghostButton,.IIa07q_dangerButton,.IIa07q_dangerSolidButton{border-radius:var(--dsw-radius-md);min-height:32px;color:var(--mn-text);white-space:nowrap;cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;gap:4px;padding:0 12px;font-size:13px;font-weight:400;line-height:20px;transition:background-color .12s,color .12s,border-color .12s;display:inline-flex}.IIa07q_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-primary-fill)}.IIa07q_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.IIa07q_secondaryButton{border:.5px solid var(--mn-line-strong)}.IIa07q_secondaryButton:hover:not(:disabled),.IIa07q_ghostButton:hover:not(:disabled){background:var(--mn-hover)}.IIa07q_secondaryButton:active:not(:disabled),.IIa07q_ghostButton:active:not(:disabled){background:var(--mn-pressed)}.IIa07q_dangerButton{color:var(--mn-danger)}.IIa07q_dangerButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger,color-mix(in srgb, var(--mn-danger) 8%, transparent))}.IIa07q_dangerSolidButton{color:var(--dsw-static-neutral-00,#fff);background:var(--mn-danger)}.IIa07q_dangerSolidButton:hover:not(:disabled){background:color-mix(in srgb, var(--mn-danger), black 8%)}.IIa07q_shell :where(button:disabled){cursor:not-allowed;opacity:.4}.IIa07q_emptyState{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:200px;padding:32px 24px;display:flex}.IIa07q_emptyGlyph{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-lg);width:48px;height:48px;color:var(--mn-faint);flex:none;place-items:center;font-size:20px;line-height:1;display:grid}.IIa07q_emptyState h3{margin:0 0 4px;font-size:14px;font-weight:500;line-height:22px}.IIa07q_emptyState p{max-width:480px;color:var(--mn-faint);margin:0;font-size:13px;line-height:20px}.IIa07q_sourceManagementSummary{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);grid-template-columns:minmax(220px,1.2fr) minmax(260px,1fr) minmax(220px,1fr);gap:16px;margin-top:12px;padding:16px;display:grid}.IIa07q_sourceManagementIdentity{grid-template-columns:6px minmax(0,1fr);align-items:center;gap:10px;min-width:0;display:grid}.IIa07q_sourceManagementIdentity>span{background:var(--mn-success);border-radius:50%;width:6px;height:6px}.IIa07q_sourceManagementSummary[data-availability=degraded] .IIa07q_sourceManagementIdentity>span{background:var(--mn-warn)}.IIa07q_sourceManagementSummary[data-availability=unavailable] .IIa07q_sourceManagementIdentity>span{background:var(--mn-danger)}.IIa07q_sourceManagementIdentity>div{gap:2px;min-width:0;display:grid}.IIa07q_sourceManagementIdentity small,.IIa07q_sourceManagementCapabilities>small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sourceManagementIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_sourceManagementIdentity code{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.IIa07q_sourceManagementSummary dl{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;display:grid}.IIa07q_sourceManagementSummary dl>div{border-radius:var(--dsw-radius-sm);background:var(--mn-block-fill);align-content:center;gap:2px;min-width:0;padding:8px 10px;display:grid}.IIa07q_sourceManagementSummary dt{color:var(--mn-faint);font-size:11px;line-height:14px}.IIa07q_sourceManagementSummary dd{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:13px;line-height:20px;overflow:hidden}.IIa07q_sourceManagementSummary dd code{font-size:12px}.IIa07q_sourceManagementCapabilities{align-content:center;gap:6px;min-width:0;display:grid}.IIa07q_sourceManagementCapabilities>div{flex-wrap:wrap;gap:4px;display:flex}.IIa07q_sourceManagementCapabilities span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_sourceManagementDiagnostics,.IIa07q_sourceManagementForm{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-top:12px;padding:16px}.IIa07q_sourceManagementDiagnostics h3,.IIa07q_sourceManagementForm h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_sourceManagementDiagnostics ul{color:var(--mn-muted);gap:4px;margin:8px 0 0;padding-left:18px;font-size:12px;line-height:18px;display:grid}.IIa07q_sourceManagementForm>div:first-child p{color:var(--mn-faint);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_sourceManagementForm .IIa07q_formGrid label>small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sourceManagementForm .IIa07q_formGrid input[type=checkbox]{width:16px;min-width:0;height:16px;min-height:0;accent-color:var(--dsw-alias-brand-primary)}.IIa07q_sectionSpinner{z-index:6;width:20px;height:20px;color:var(--mn-faint);place-items:center;display:grid;position:absolute;top:10px;right:10px}.IIa07q_sectionSpinner>i{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}@keyframes IIa07q_mnemon-spin{to{transform:rotate(360deg)}}.IIa07q_inlineError{margin:0 0 12px}.IIa07q_loading{color:var(--mn-faint);padding:16px 0;font-size:13px}.IIa07q_bodyEdit{gap:12px;padding-top:2px;display:grid}.IIa07q_bodyEdit label,.IIa07q_formGrid label{color:var(--mn-muted);gap:6px;font-size:12px;font-weight:500;line-height:18px;display:grid}.IIa07q_bodyEdit input,.IIa07q_bodyEdit select,.IIa07q_bodyEdit textarea,.IIa07q_formGrid select,.IIa07q_formGrid input{border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;min-width:0;min-height:32px;color:var(--mn-text);background:var(--mn-input);outline:0;padding:5px 10px;font-size:13px;font-weight:400;line-height:20px}.IIa07q_bodyEdit textarea{resize:vertical}.IIa07q_bodyEdit input::placeholder,.IIa07q_bodyEdit textarea::placeholder,.IIa07q_formGrid input::placeholder{color:var(--dsw-alias-label-dimmed)}.IIa07q_bodyEdit input:focus,.IIa07q_bodyEdit select:focus,.IIa07q_bodyEdit textarea:focus,.IIa07q_formGrid select:focus,.IIa07q_formGrid input:focus{border-color:var(--mn-accent)}.IIa07q_providerFieldControl{gap:4px;min-width:0;display:grid}.IIa07q_providerFieldControl input[type=checkbox]{width:16px;height:16px;min-height:0;accent-color:var(--dsw-alias-brand-primary);margin:2px 0;padding:0}.IIa07q_bodyDeleteConfirm{gap:16px;display:grid}.IIa07q_bodyDeleteConfirm>p{color:var(--mn-muted);margin:0;font-size:13px;line-height:20px}.IIa07q_bodyDeleteSummary{border-radius:var(--dsw-radius-md);background:color-mix(in srgb, var(--mn-danger) 6%, transparent);gap:4px;padding:12px;display:grid}.IIa07q_bodyDeleteSummary strong{font-size:13px;font-weight:500}.IIa07q_bodyDeleteContent{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;font-weight:400;line-height:20px}.IIa07q_bodyDeleteSummary span{color:var(--mn-muted);font-size:12px;line-height:18px}.IIa07q_sectionHeading{justify-content:space-between;align-items:center;gap:16px;min-height:36px;margin-bottom:8px;display:flex}.IIa07q_sectionHeading h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_sectionHeading>div>span{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sectionHeading>strong{color:var(--mn-muted);background:var(--mn-fill);font-variant-numeric:tabular-nums;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_sectionHeading button{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-caption);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.IIa07q_sectionHeading button:hover:not(:disabled){color:var(--mn-muted);background:var(--mn-hover)}.IIa07q_runtimeNotice{border-radius:var(--dsw-radius-md);color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 8%, transparent);margin-bottom:12px;padding:8px 12px;font-size:12px;line-height:18px}.IIa07q_runtimeFootnote{color:var(--mn-faint);margin:12px 2px 0;font-size:12px;line-height:18px}.IIa07q_formGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:12px;display:grid}.IIa07q_listProgress{border-top:.5px solid var(--mn-line);min-height:56px;color:var(--mn-faint);justify-content:center;align-items:center;gap:12px;margin-top:12px;padding:10px;font-size:12px;line-height:18px;display:flex}.IIa07q_compactListProgress{border-top:.5px solid var(--mn-line);color:var(--mn-faint);text-align:center;justify-items:stretch;gap:8px;margin-top:8px;padding:10px 2px 2px;font-size:12px;line-height:18px;display:grid}.IIa07q_compactListProgress button{width:100%}.IIa07q_modalPortal{z-index:1000;isolation:isolate;pointer-events:none;position:fixed;inset:0}.IIa07q_modalTheme.IIa07q_modalTheme.IIa07q_modalTheme{width:auto;min-width:0;height:auto;min-height:0;color:var(--mn-text);pointer-events:none;background:0 0;display:block;position:absolute;inset:0;overflow:visible}.IIa07q_modalBackdrop{z-index:0;overscroll-behavior:contain;padding:max(24px, var(--dsh-frame-top-clearance,24px)) 24px;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);touch-action:none;pointer-events:auto;justify-content:center;align-items:center;animation:.18s ease-out both IIa07q_mnemon-dialog-backdrop-enter;display:flex;position:fixed;inset:0;overflow:hidden}.IIa07q_modal{box-sizing:border-box;border-radius:var(--dsw-radius-panel);background:linear-gradient(var(--mn-layer-2), var(--mn-layer-2)), var(--mn-surface);width:min(640px,100%);min-height:0;max-height:100%;box-shadow:var(--dsw-elevation-prominent);touch-action:auto;transform-origin:50% 100%;backface-visibility:hidden;will-change:transform, opacity;border:0;flex-direction:column;animation:.2s cubic-bezier(.2,.75,.2,1) both IIa07q_mnemon-dialog-enter;display:flex;overflow:hidden}.IIa07q_modalBackdrop[data-closing],.IIa07q_modal[data-closing]{pointer-events:none}.IIa07q_modalDragHandle{display:none}.IIa07q_modalWide{width:min(760px,100%)}.IIa07q_modal>header{flex:none;justify-content:space-between;align-items:flex-start;gap:8px;padding:22px 14px 12px 24px;display:flex}.IIa07q_modal>header>div{min-width:0;padding-top:2px}.IIa07q_modal>header h2{margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_modal>header p{overflow-wrap:anywhere;max-width:64ch;color:var(--mn-muted);margin:4px 0 0;font-size:13px;line-height:20px}.IIa07q_modal>header .IIa07q_iconButton{color:var(--mn-muted);flex:none}.IIa07q_modalBody{overscroll-behavior:contain;scrollbar-gutter:stable;touch-action:pan-y;-webkit-overflow-scrolling:touch;min-height:0;padding:8px 24px 20px;overflow:hidden auto}.IIa07q_modalFooter{background:0 0;flex:none;justify-content:flex-end;align-items:center;gap:12px;padding:4px 24px 24px;display:flex}.IIa07q_modalFooter button{min-height:36px;padding-inline:14px}.IIa07q_modalFooterMeta{color:var(--mn-faint);margin-right:auto;font-size:12px;line-height:18px}.IIa07q_modalFooterActions{justify-content:flex-end;align-items:center;gap:8px;min-width:0;margin-left:auto;display:flex}@keyframes IIa07q_mnemon-dialog-backdrop-enter{0%{opacity:0}}@keyframes IIa07q_mnemon-dialog-enter{0%{opacity:0;transform:translateY(8px)scale(.985)}}@keyframes IIa07q_mnemon-sheet-enter{0%{transform:translateY(calc(100% + 32px))}to{transform:translate3d(0, var(--mn-modal-drag-y,0px), 0)}}@keyframes IIa07q_mnemon-metadata-sweep{to{transform:translate(120%)}}@keyframes IIa07q_mnemon-metadata-refreshed{0%{border-color:color-mix(in srgb, var(--mn-accent) 60%, var(--mn-card-line));box-shadow:0 0 0 2px color-mix(in srgb, var(--mn-accent) 14%, transparent)}to{border-color:var(--mn-card-line);box-shadow:0 0 #0000}}.IIa07q_healthStrip{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);flex-wrap:wrap;margin-bottom:16px;display:flex;position:relative;overflow:hidden}.IIa07q_asyncStatusBlock{min-width:0;min-height:36px;position:relative}.IIa07q_healthStrip article{box-sizing:border-box;border-top:.5px solid var(--mn-line);border-left:.5px solid var(--mn-line);flex:150px;align-items:flex-start;gap:10px;min-width:0;min-height:76px;margin:-.5px 0 0 -.5px;padding:14px 16px;display:flex}.IIa07q_healthStrip article>div{min-width:0}.IIa07q_healthStrip small{color:var(--mn-faint);margin-bottom:2px;font-size:12px;line-height:18px;display:block}.IIa07q_healthStrip strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:22px;display:block;overflow:hidden}.IIa07q_healthStrip p{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin:2px 0 0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_healthIndicator{border-radius:50%;flex:none;width:6px;height:6px;margin-top:6px}.IIa07q_healthGood{background:var(--mn-success)}.IIa07q_healthBad{background:var(--mn-danger)}.IIa07q_healthMuted{background:var(--mn-idle)}.IIa07q_providerHealth{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:16px}.IIa07q_providerHealthList{margin-top:8px}.IIa07q_providerHealthList article{align-items:center;gap:12px;min-width:0;min-height:56px;padding:8px 0;display:flex}.IIa07q_providerHealthList article+article{border-top:.5px solid var(--mn-line)}.IIa07q_providerHealthOff{border-top:.5px solid var(--mn-line);min-width:0;color:var(--mn-faint);justify-content:space-between;align-items:center;gap:12px;margin-top:4px;padding-top:10px;font-size:12px;line-height:18px;display:flex}.IIa07q_providerHealthMark{box-sizing:border-box;border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-md);flex:none;place-items:center;width:36px;height:36px;padding:6px;display:grid;overflow:hidden}.IIa07q_providerHealthMark>img,.IIa07q_providerHealthMark>svg{object-fit:contain;border-radius:4px;width:100%;height:100%;display:block}.IIa07q_providerHealthCopy{flex:1;gap:0;min-width:0;display:grid}.IIa07q_providerHealthCopy strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_providerHealthCopy small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_providerHealthCopy p{color:var(--mn-danger);text-overflow:ellipsis;white-space:nowrap;margin:2px 0 0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_providerHealthMeta{flex:none;align-items:center;gap:6px;display:flex}.IIa07q_providerHealthMeta small{color:var(--mn-faint);font-variant-numeric:tabular-nums;font-size:12px;line-height:18px}.IIa07q_providerHealthSignal{background:var(--mn-idle);border-radius:50%;width:6px;height:6px}.IIa07q_providerHealthList article[data-status=healthy] .IIa07q_providerHealthSignal{background:var(--mn-success)}.IIa07q_providerHealthList article[data-status=unhealthy] .IIa07q_providerHealthSignal{background:var(--mn-danger)}.IIa07q_providerHealthList article[data-status=idle] .IIa07q_providerHealthSignal{background:var(--mn-idle)}.IIa07q_storageDomains{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:16px}.IIa07q_storageRoot{border-radius:var(--dsw-radius-md);background:var(--mn-block-fill);justify-content:space-between;align-items:center;gap:16px;min-width:0;margin-top:12px;padding:10px 12px;display:flex}.IIa07q_storageRoot>div:first-child{gap:2px;min-width:0;display:grid}.IIa07q_storageRoot span,.IIa07q_storageRoot small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_storageRoot code{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.IIa07q_storageRoot>div:last-child{flex:none;justify-items:end;gap:2px;display:grid}.IIa07q_storageRoot strong{font-variant-numeric:tabular-nums;font-size:13px;font-weight:500}.IIa07q_storageAreaGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:8px;display:grid}.IIa07q_storageAreaGrid article{box-sizing:border-box;border:.5px solid var(--mn-line);border-radius:var(--dsw-radius-md);flex-direction:column;min-width:0;min-height:148px;padding:12px 14px;display:flex}.IIa07q_storageAreaGrid article>header{justify-content:space-between;align-items:center;gap:8px;display:flex}.IIa07q_storageAreaGrid article>header>div{align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_storageAreaGrid article>header span{background:var(--mn-idle);border-radius:50%;flex:none;width:6px;height:6px}.IIa07q_storageAreaGrid article[data-status=ready]>header span{background:var(--mn-success)}.IIa07q_storageAreaGrid article[data-status=invalid]>header span{background:var(--mn-danger)}.IIa07q_storageAreaGrid article>header strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;overflow:hidden}.IIa07q_storageAreaGrid article>header em{color:var(--mn-faint);white-space:nowrap;font-size:11px;font-style:normal;line-height:14px}.IIa07q_storageAreaMetric{align-items:baseline;gap:6px;margin-top:12px;display:flex}.IIa07q_storageAreaMetric strong{font-variant-numeric:tabular-nums;font-size:20px;font-weight:500;line-height:28px}.IIa07q_storageAreaMetric span{color:var(--mn-faint);font-size:12px}.IIa07q_storageAreaMetric code{color:var(--mn-faint);margin-left:auto;font-size:11px}.IIa07q_storageAreaGrid article>p{min-height:36px;color:var(--mn-faint);margin:6px 0 8px;font-size:12px;line-height:18px}.IIa07q_storagePath{border-top:.5px solid var(--mn-line);color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:auto;padding-top:8px;font-size:11px;line-height:16px;display:block;overflow:hidden}.IIa07q_storageAreaGrid article>small{color:var(--mn-danger);margin-top:6px;font-size:12px;line-height:18px;display:block}.IIa07q_storageUnavailable{border-radius:var(--dsw-radius-md);min-height:120px;color:var(--mn-muted);background:var(--mn-block-fill);text-align:center;place-content:center;gap:4px;margin-top:12px;display:grid}.IIa07q_storageUnavailable strong{font-size:13px;font-weight:500}.IIa07q_storageUnavailable p{max-width:520px;color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_storageFootnote{color:var(--mn-faint);margin:12px 0 0;font-size:12px;line-height:18px}.IIa07q_statusSectionHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_statusSectionHeader h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_statusSectionHeader p{max-width:640px;color:var(--mn-faint);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_phaseBadge{color:var(--mn-muted);background:var(--mn-fill);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_statusHeaderActions{align-items:center;gap:8px;display:flex}.IIa07q_versionDialogBody{grid-template-columns:minmax(0,1fr);gap:12px;display:grid}.IIa07q_versionChecking{min-height:112px;color:var(--mn-muted);justify-content:center;align-items:center;gap:10px;font-size:13px;display:flex}.IIa07q_versionChecking span{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}.IIa07q_versionError,.IIa07q_versionResult{border-radius:var(--dsw-radius-md);color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent);padding:10px 12px}.IIa07q_versionResult{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 8%, transparent)}.IIa07q_versionError strong,.IIa07q_versionResult strong{font-size:13px;font-weight:500}.IIa07q_versionError p,.IIa07q_versionResult p{color:var(--mn-muted);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_versionList{grid-template-columns:minmax(0,1fr);gap:8px;display:grid}.IIa07q_versionList article{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);padding:12px 14px}.IIa07q_versionList article>header{justify-content:space-between;align-items:center;gap:12px;display:flex}.IIa07q_versionList article>header>div{align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_versionList article>header strong{font-size:14px;font-weight:500;line-height:22px}.IIa07q_versionList article>header span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_versionList article>header em{color:var(--mn-success);white-space:nowrap;font-size:12px;font-style:normal;line-height:18px}.IIa07q_versionList article[data-outdated]>header em{color:var(--mn-accent)}.IIa07q_versionNumbers{grid-template-columns:1fr auto 1fr;align-items:end;gap:10px;margin-top:10px;display:grid}.IIa07q_versionNumbers>div{gap:2px;display:grid}.IIa07q_versionNumbers small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_versionNumbers code{font-size:13px}.IIa07q_versionNumbers>span{color:var(--mn-faint);padding-bottom:1px}.IIa07q_versionLocation{min-width:0;color:var(--mn-faint);gap:6px;margin-top:8px;font-size:12px;line-height:18px;display:flex}.IIa07q_versionLocation>span{flex:none}.IIa07q_versionLocation>code{min-width:0;color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.IIa07q_versionList article>footer{border-top:.5px solid var(--mn-line);justify-content:space-between;align-items:flex-end;gap:16px;margin-top:10px;padding-top:10px;display:flex}.IIa07q_versionList article>footer p{max-width:470px;color:var(--mn-muted);margin:0;font-size:12px;line-height:18px}.IIa07q_versionList article>footer button{flex:none}.IIa07q_versionList article>header em[data-state=unknown],.IIa07q_versionList article>header em[data-state=local],.IIa07q_versionList article>header em[data-state=missing]{color:var(--mn-faint)}.IIa07q_versionList article>header em[data-state=restart]{color:var(--mn-accent)}.IIa07q_versionNotice{color:var(--mn-muted);margin:8px 0 0;font-size:12px;line-height:18px}.IIa07q_versionGuidance{border-radius:var(--dsw-radius-md);background:var(--mn-block-fill);gap:6px;min-width:0;margin-top:10px;padding:10px 12px;display:grid}.IIa07q_versionGuidance>strong{font-size:13px;font-weight:500}.IIa07q_versionGuidance>p{color:var(--mn-muted);margin:0;font-size:12px;line-height:18px}.IIa07q_versionGuidance>a{color:var(--dsw-alias-link,var(--mn-accent));justify-self:start;font-size:12px}.IIa07q_versionGuidanceDetails{min-width:0;color:var(--mn-muted);font-size:12px;line-height:18px}.IIa07q_versionGuidanceDetails>summary{cursor:pointer}.IIa07q_versionGuidanceDetails>p{margin:8px 0}.IIa07q_versionGuidanceDetails>a{color:var(--dsw-alias-link,var(--mn-accent))}.IIa07q_versionCommand{border-radius:var(--dsw-radius-sm);background:var(--mn-layer-1);flex-wrap:wrap;align-items:center;gap:8px;min-width:0;padding:8px 10px;display:flex}.IIa07q_versionCommand>code{overflow-wrap:anywhere;white-space:pre-wrap;user-select:text;flex:1;min-width:0;font-size:12px}.IIa07q_versionCommand>button{flex:none}.IIa07q_versionCommand>small{color:var(--mn-faint);flex-basis:100%;font-size:12px}.IIa07q_versionPackages{border-top:.5px solid var(--mn-line);min-width:0;margin-top:12px}.IIa07q_versionPackagesToggle{width:100%;min-height:44px;color:var(--mn-text);text-align:start;cursor:pointer;background:0 0;border:0;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 0 0;display:flex}.IIa07q_versionPackagesToggle>strong{font-size:13px;font-weight:500}.IIa07q_versionPackagesToggle>small{color:var(--mn-faint);margin-left:auto;font-size:12px}.IIa07q_versionPackages h4{color:var(--mn-faint);margin:16px 0 8px;font-size:12px;font-weight:500;line-height:18px}.IIa07q_versionPackages ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.IIa07q_versionPackage{border:.5px solid var(--mn-line);border-radius:var(--dsw-radius-md);min-width:0;padding:10px 12px}.IIa07q_versionPackageHeader{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 12px;display:flex}.IIa07q_versionPackageHeader strong{overflow-wrap:anywhere;min-width:0;font-size:13px;font-weight:500}.IIa07q_versionPackageHeader em{color:var(--mn-faint);font-size:12px;font-style:normal}.IIa07q_versionPackageHeader em[data-state=available],.IIa07q_versionPackageHeader em[data-state=restart]{color:var(--mn-accent)}.IIa07q_versionPackageHeader em[data-state=current]{color:var(--mn-success)}.IIa07q_versionPackageMeta,.IIa07q_versionPackageNumbers{color:var(--mn-faint);flex-wrap:wrap;gap:6px 14px;margin-top:6px;font-size:12px;line-height:18px;display:flex}.IIa07q_versionPackageNumbers code{color:var(--mn-text)}.IIa07q_versionPackageAction{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-top:8px;display:flex}.IIa07q_versionPackageAction p{min-width:150px;color:var(--mn-muted);flex:1;margin:0;font-size:12px;line-height:18px}.IIa07q_versionPackageAction button{flex:none}@media (width<=1000px){.IIa07q_sourceManagementSummary{grid-template-columns:1fr 1fr}.IIa07q_sourceManagementCapabilities{grid-column:1/-1}.IIa07q_storageAreaGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.IIa07q_shell{min-height:0;overflow:hidden}.IIa07q_sourceManagementSummary{grid-template-columns:1fr}.IIa07q_sourceManagementSummary dl,.IIa07q_sourceManagementCapabilities{grid-column:auto}.IIa07q_masthead{padding:8px 16px 2px}.IIa07q_alert,.IIa07q_notice{margin-inline:16px}.IIa07q_topNavigation{padding:0 16px}.IIa07q_workspacePicker>[data-part=label]{display:none}.IIa07q_workspacePicker button{width:min(170px,32vw)}.IIa07q_modalBackdrop{padding:max(10px, env(safe-area-inset-top,0px)) 0 0;align-items:flex-end}.IIa07q_modal,.IIa07q_modalWide{width:100vw;max-height:calc(100vh - max(10px, env(safe-area-inset-top,0px)));border-radius:var(--dsw-radius-xl) var(--dsw-radius-xl) 0 0;transform:translate3d(0, var(--mn-modal-drag-y,0px), 0);animation-name:IIa07q_mnemon-sheet-enter;animation-duration:.34s;animation-timing-function:cubic-bezier(.2,.82,.2,1)}.IIa07q_modalDragHandle{cursor:grab;touch-action:none;user-select:none;flex:none;place-items:center;width:100%;height:28px;display:grid}.IIa07q_modalDragHandle span{background:var(--mn-line-strong);border-radius:999px;width:36px;height:4px;transition:width .14s,background-color .14s}.IIa07q_modal[data-dragging] .IIa07q_modalDragHandle{cursor:grabbing}.IIa07q_modal[data-dragging] .IIa07q_modalDragHandle span{background:var(--dsw-alias-border-l4);width:44px}.IIa07q_modal>header{padding:10px max(14px, env(safe-area-inset-right,0px)) 12px max(14px, env(safe-area-inset-left,0px));gap:12px}.IIa07q_modal>header p{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.IIa07q_modal>header .IIa07q_iconButton{width:44px;height:44px;margin:-4px -5px -4px 0}.IIa07q_modalBody{padding:14px max(14px, env(safe-area-inset-right,0px)) 18px max(14px, env(safe-area-inset-left,0px));scrollbar-gutter:auto;scroll-padding-bottom:12px}.IIa07q_modalBody button{min-height:44px}.IIa07q_modalFooter{padding:10px max(14px, env(safe-area-inset-right,0px)) calc(10px + env(safe-area-inset-bottom,0px)) max(14px, env(safe-area-inset-left,0px));flex-direction:column;align-items:stretch;gap:8px}.IIa07q_modalFooterMeta{max-width:none;margin:0}.IIa07q_modalFooterActions{grid-template-columns:minmax(82px,.55fr) minmax(0,1.45fr);gap:8px;width:100%;margin:0;display:grid}.IIa07q_modalFooterActions button{white-space:normal;min-width:0;min-height:44px;padding-block:8px}.IIa07q_versionList article>footer{flex-direction:column;align-items:stretch}.IIa07q_nav{gap:22px}.IIa07q_page{padding:16px 16px calc(170px + env(safe-area-inset-bottom,0px))}.IIa07q_pageHeader{gap:10px;display:grid}.IIa07q_pageHeaderMeta{justify-content:flex-start}.IIa07q_healthStrip article{flex-basis:100%}.IIa07q_providerHealthMeta{flex-direction:column;align-items:flex-end;gap:4px}.IIa07q_storageRoot{flex-direction:column;align-items:flex-start}.IIa07q_storageRoot>div:last-child{justify-items:start}.IIa07q_storageAreaGrid{grid-template-columns:1fr}}@media (width<=520px){.IIa07q_workspacePicker select{width:min(150px,39vw)}.IIa07q_nav{scroll-snap-type:x proximity;gap:18px}.IIa07q_nav button{scroll-snap-align:start}.IIa07q_pageHeaderMeta{align-items:stretch}.IIa07q_pageHeaderMeta>code{align-items:center;display:inline-flex}.IIa07q_pageHeaderMeta>button{flex:1}.IIa07q_emptyState{min-height:180px;padding:24px 16px}.IIa07q_formGrid{grid-template-columns:1fr}}@media (width<=360px){.IIa07q_modalFooterActions{grid-template-columns:1fr}}@media (height<=420px){.IIa07q_modal>header p{white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}}@media (width>=761px) and (height<=560px){.IIa07q_modalBackdrop{padding:8px}}@supports (height:100dvh){@media (width<=760px){.IIa07q_modal,.IIa07q_modalWide{max-height:calc(100dvh - max(10px, env(safe-area-inset-top,0px)))}}}@media (width<=1000px) and (height<=760px){.IIa07q_shell{min-height:0}.IIa07q_masthead{min-height:44px}}@media (width<=760px) and (pointer:coarse){.IIa07q_shell input,.IIa07q_shell select,.IIa07q_shell textarea{font-size:16px!important}}@media (pointer:coarse){.IIa07q_modal>header .IIa07q_iconButton{width:44px;min-width:44px;height:44px;min-height:44px}.IIa07q_modalBody button,.IIa07q_modalFooter button{min-height:44px}}@media (prefers-reduced-motion:reduce){.IIa07q_shell *,.IIa07q_shell :before,.IIa07q_shell :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.IIa07q_modalBackdrop,.IIa07q_modal{animation:none!important}}.IIa07q_page[data-source-page]>.IIa07q_workspacePicker{margin-bottom:16px}.IIa07q_page[data-source-page] .IIa07q_page{width:100%;min-height:0;margin:0;padding:0}@container IIa07q_mnemon-workbench (width<=520px){.IIa07q_masthead{flex-wrap:wrap;gap:4px 8px;min-height:0;padding:8px 16px 2px}.IIa07q_shell .IIa07q_brand{display:contents}.IIa07q_brand h1{text-overflow:ellipsis;white-space:nowrap;flex:1 1 0;min-width:0;overflow:hidden}.IIa07q_backButton>span,.IIa07q_storageMode{display:none}.IIa07q_backButton{min-width:28px;padding-inline:4px}.IIa07q_shell .IIa07q_masthead .IIa07q_headerActions{margin-left:auto}.IIa07q_shell .IIa07q_masthead .IIa07q_compositionStatus>span:not([data-state]){display:none}.IIa07q_shell .IIa07q_masthead .IIa07q_statusCluster>.IIa07q_iconButton{display:inline-flex}.IIa07q_shell .IIa07q_masthead .IIa07q_workspacePicker{flex:1 0 100%;order:1}.IIa07q_shell .IIa07q_masthead .IIa07q_workspacePicker>[data-part=label]{display:none}.IIa07q_shell .IIa07q_masthead .IIa07q_workspacePicker>:last-child{flex:1;min-width:0}.IIa07q_shell .IIa07q_masthead .IIa07q_workspacePicker button{width:100%;min-width:0}.IIa07q_shell .IIa07q_masthead .IIa07q_workspaceMismatch{flex:1 0 100%;order:2}.IIa07q_shell .IIa07q_masthead .IIa07q_workspaceMismatch>span{display:inline}.IIa07q_alert,.IIa07q_notice{margin-inline:16px}.IIa07q_topNavigation{padding-inline:16px}.IIa07q_noticeToggle{border-radius:var(--dsw-radius-md);min-width:0;min-height:28px;color:var(--dsw-alias-state-warn-label,var(--mn-text));background:var(--dsw-alias-state-warn-tertiary,color-mix(in srgb, var(--mn-warn) 12%, transparent));text-align:left;cursor:pointer;border:0;justify-content:space-between;align-items:center;gap:8px;margin:8px 16px 0;padding:4px 12px;font-size:12px;line-height:18px;display:flex}.IIa07q_noticeToggle>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_noticeToggle>svg{flex:none;transform:rotate(-90deg)}.IIa07q_noticeContents{display:none}.IIa07q_noticeGroup[data-expanded] .IIa07q_noticeContents{display:flex}.IIa07q_noticeGroup[data-expanded] .IIa07q_noticeToggle>svg{transform:rotate(90deg)}}@media (pointer:coarse){.IIa07q_masthead :is(button,select),.IIa07q_noticeToggle,.IIa07q_nav button{min-height:44px}.IIa07q_sectionHeading button{min-width:44px;min-height:44px}.IIa07q_primaryButton,.IIa07q_secondaryButton,.IIa07q_ghostButton,.IIa07q_dangerButton,.IIa07q_dangerSolidButton,.IIa07q_page :is(input:not([type=checkbox]):not([type=radio]),select,textarea){min-height:44px}.IIa07q_canvas{overscroll-behavior:contain}}.IIa07q_composerNotice{color:var(--dsw-alias-label-secondary);justify-content:center;align-items:center;gap:12px;padding:8px 16px;font-size:12px;display:flex}.IIa07q_composerToggle{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-base);font:inherit;cursor:pointer;flex:none;padding:5px 9px;font-size:12px}.IIa07q_composerToggle:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}:where(.IIa07q_shell[data-mnemon-composer]) .IIa07q_page{padding-bottom:var(--mn-composer-inset)}";
4038
4102
  const tagId$13 = "dsh-mnemon/src/client/MnemonView.module.css";
4039
4103
  if (typeof document !== "undefined") {
4040
4104
  let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$13) + "]");
@@ -4057,6 +4121,8 @@ window.__ModuleLoader__.load({
4057
4121
  "canvas": "IIa07q_canvas",
4058
4122
  "checking": "IIa07q_checking",
4059
4123
  "compactListProgress": "IIa07q_compactListProgress",
4124
+ "composerNotice": "IIa07q_composerNotice",
4125
+ "composerToggle": "IIa07q_composerToggle",
4060
4126
  "compositionHint": "IIa07q_compositionHint",
4061
4127
  "compositionLayers": "IIa07q_compositionLayers",
4062
4128
  "compositionStatus": "IIa07q_compositionStatus",
@@ -10796,6 +10862,7 @@ window.__ModuleLoader__.load({
10796
10862
  "ollama",
10797
10863
  "openai"
10798
10864
  ];
10865
+ const EMBEDDING_ENVIRONMENT_NAME = /^[A-Za-z_][A-Za-z0-9_]{0,127}$/u;
10799
10866
  //#endregion
10800
10867
  //#region plugins/dsh-mnemon-source-memory-spaces/src/client/ProviderIcon.tsx
10801
10868
  function GenericProviderMark() {
@@ -11487,7 +11554,9 @@ window.__ModuleLoader__.load({
11487
11554
  return {
11488
11555
  endpoint: embedding?.endpoint?.trim() || "http://localhost:11434",
11489
11556
  model: embedding?.model?.trim() || "nomic-embed-text",
11490
- apiKey: embedding?.apiKey?.trim() ?? "",
11557
+ apiKey: "",
11558
+ apiKeyEnv: embedding?.apiKeyEnv ?? "",
11559
+ clearApiKey: false,
11491
11560
  protocol: embedding?.protocol ?? "auto"
11492
11561
  };
11493
11562
  }
@@ -11514,25 +11583,32 @@ window.__ModuleLoader__.load({
11514
11583
  if (!validEmbeddingEndpoint(draft.endpoint)) return t("config.embeddingEndpointInvalid");
11515
11584
  if (!validEmbeddingModel(draft.model)) return t("config.embeddingModelInvalid");
11516
11585
  if (!validEmbeddingApiKey(draft.apiKey)) return t("config.embeddingApiKeyInvalid");
11586
+ if (draft.apiKeyEnv.trim() && !EMBEDDING_ENVIRONMENT_NAME.test(draft.apiKeyEnv.trim())) return t("config.embeddingEnvInvalid");
11587
+ if (draft.apiKey.trim() && draft.apiKeyEnv.trim()) return t("config.embeddingAuthChoice");
11517
11588
  if (!validProtocol(draft.protocol)) return t("config.embeddingProtocolInvalid");
11518
11589
  return null;
11519
11590
  }
11520
11591
  /** The stored value: a switched-off override keeps only the fields that are valid. */
11521
- function embeddingValue(enabled, draft) {
11592
+ function embeddingValue(enabled, draft, secure, legacyKey = "") {
11593
+ const auth = secure ? {
11594
+ apiKey: draft.apiKey.trim(),
11595
+ apiKeyEnv: draft.apiKeyEnv.trim(),
11596
+ ...draft.clearApiKey ? { clearApiKey: true } : {}
11597
+ } : { apiKey: legacyKey };
11522
11598
  const endpoint = draft.endpoint.trim().replace(/\/+$/u, "");
11523
11599
  if (enabled) return {
11524
11600
  enabled: true,
11525
11601
  endpoint,
11526
11602
  model: draft.model.trim(),
11527
11603
  protocol: draft.protocol,
11528
- apiKey: draft.apiKey.trim()
11604
+ ...auth
11529
11605
  };
11530
11606
  return {
11531
11607
  enabled: false,
11532
11608
  ...validEmbeddingEndpoint(draft.endpoint) ? { endpoint } : {},
11533
11609
  ...validEmbeddingModel(draft.model) ? { model: draft.model.trim() } : {},
11534
11610
  ...validProtocol(draft.protocol) ? { protocol: draft.protocol } : {},
11535
- ...validEmbeddingApiKey(draft.apiKey) ? { apiKey: draft.apiKey.trim() } : {}
11611
+ ...validEmbeddingApiKey(draft.apiKey) ? auth : {}
11536
11612
  };
11537
11613
  }
11538
11614
  /**
@@ -11583,12 +11659,19 @@ window.__ModuleLoader__.load({
11583
11659
  const value = snapshot.value;
11584
11660
  const client = (0, react.useMemo)(() => host.operations === void 0 ? void 0 : memorySpacesSettingsClient(host.operations), [host.operations]);
11585
11661
  const saved = embeddingDraft(value);
11662
+ const secure = value?.embedding?.apiKeyStorage !== void 0;
11663
+ const legacy = value?.embedding?.apiKeyStorage === "legacy";
11664
+ const connectionValue = (enabled, draft) => embeddingValue(enabled, draft, secure, value?.embedding?.apiKey);
11586
11665
  const managedSaved = value?.embedding?.enabled === true;
11587
11666
  const managed = useLive(managedSaved, async (enabled) => {
11588
- await configuration.set("embedding", embeddingValue(enabled, saved));
11667
+ await configuration.set("embedding", connectionValue(enabled, saved));
11589
11668
  });
11590
11669
  const form = useStaged(saved, async (draft) => {
11591
- await configuration.set("embedding", embeddingValue(managedSaved, draft));
11670
+ await configuration.set("embedding", connectionValue(managedSaved, draft));
11671
+ form.edit({
11672
+ apiKey: "",
11673
+ clearApiKey: false
11674
+ });
11592
11675
  });
11593
11676
  const [nativeCliFound, setNativeCliFound] = (0, react.useState)(() => retained.get(RETAINED_CLI)?.commandFound);
11594
11677
  const [status, setStatus] = (0, react.useState)({ state: "idle" });
@@ -11712,6 +11795,8 @@ window.__ModuleLoader__.load({
11712
11795
  cliMissing,
11713
11796
  t,
11714
11797
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EmbeddingEditor, {
11798
+ secure,
11799
+ credentialSaved: value?.embedding?.apiKeyStorage === "credentials",
11715
11800
  managed: managed.value,
11716
11801
  draft: form.draft,
11717
11802
  disabled,
@@ -11732,22 +11817,34 @@ window.__ModuleLoader__.load({
11732
11817
  if (!on) form.discard();
11733
11818
  managed.set(on);
11734
11819
  },
11735
- actions: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(WriteFailure, {
11736
- error: managed.failed,
11737
- t
11738
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PanelActions, {
11739
- dirty: form.dirty,
11740
- saving: form.saving,
11741
- invalid: embeddingProblem(form.draft, t),
11742
- failed: form.failed,
11743
- applied: form.applied,
11744
- disabled,
11745
- t,
11746
- onDiscard: form.discard,
11747
- onApply: () => {
11748
- form.apply();
11749
- }
11750
- })] })
11820
+ actions: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
11821
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WriteFailure, {
11822
+ error: managed.failed,
11823
+ t
11824
+ }),
11825
+ legacy && !form.dirty && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
11826
+ variant: "outline",
11827
+ size: "sm",
11828
+ disabled: disabled || form.saving,
11829
+ onClick: () => {
11830
+ form.apply();
11831
+ },
11832
+ children: t("config.embeddingMigrateKey")
11833
+ }),
11834
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PanelActions, {
11835
+ dirty: form.dirty,
11836
+ saving: form.saving,
11837
+ invalid: embeddingProblem(form.draft, t),
11838
+ failed: form.failed,
11839
+ applied: form.applied,
11840
+ disabled,
11841
+ t,
11842
+ onDiscard: form.discard,
11843
+ onApply: () => {
11844
+ form.apply();
11845
+ }
11846
+ })
11847
+ ] })
11751
11848
  })
11752
11849
  })
11753
11850
  })]
@@ -11823,7 +11920,7 @@ window.__ModuleLoader__.load({
11823
11920
  "aria-label": label,
11824
11921
  "aria-invalid": !valid,
11825
11922
  value: draft[field],
11826
- disabled: props.disabled,
11923
+ disabled: props.disabled || (field === "apiKey" || field === "apiKeyEnv") && (!props.secure || draft.clearApiKey),
11827
11924
  autoComplete: "off",
11828
11925
  spellCheck: false,
11829
11926
  autoCapitalize: "none",
@@ -11850,37 +11947,60 @@ window.__ModuleLoader__.load({
11850
11947
  disabled: props.disabled,
11851
11948
  onChange: props.onManaged
11852
11949
  }),
11853
- props.managed && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11854
- className: css.fieldGrid,
11855
- children: [
11856
- text("endpoint", "url", t("config.embeddingEndpoint"), validEmbeddingEndpoint(draft.endpoint), "http://localhost:11434"),
11857
- text("model", "text", t("config.embeddingModel"), validEmbeddingModel(draft.model), "nomic-embed-text"),
11858
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SelectField, {
11859
- label: t("config.embeddingProtocol"),
11860
- value: draft.protocol,
11950
+ props.managed && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
11951
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11952
+ className: css.fieldGrid,
11953
+ children: [
11954
+ text("endpoint", "url", t("config.embeddingEndpoint"), validEmbeddingEndpoint(draft.endpoint), "http://localhost:11434"),
11955
+ text("model", "text", t("config.embeddingModel"), validEmbeddingModel(draft.model), "nomic-embed-text"),
11956
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SelectField, {
11957
+ label: t("config.embeddingProtocol"),
11958
+ value: draft.protocol,
11959
+ disabled: props.disabled,
11960
+ options: [
11961
+ {
11962
+ value: "auto",
11963
+ label: t("config.embeddingProtocolAuto")
11964
+ },
11965
+ {
11966
+ value: "ollama",
11967
+ label: t("config.embeddingProtocolOllama")
11968
+ },
11969
+ {
11970
+ value: "openai",
11971
+ label: t("config.embeddingProtocolOpenai")
11972
+ }
11973
+ ],
11974
+ onChange: (protocol) => props.onEdit({ protocol })
11975
+ }),
11976
+ text("apiKey", "password", t("config.embeddingApiKey"), validEmbeddingApiKey(draft.apiKey), t("config.embeddingKeyPlaceholder")),
11977
+ props.secure && text("apiKeyEnv", "text", t("config.embeddingApiKeyEnv"), !draft.apiKeyEnv.trim() || EMBEDDING_ENVIRONMENT_NAME.test(draft.apiKeyEnv.trim()), "MY_EMBEDDING_API_KEY")
11978
+ ]
11979
+ }),
11980
+ props.secure ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [props.credentialSaved && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
11981
+ className: css.editorNote,
11982
+ children: t("config.embeddingCredentialSaved")
11983
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
11984
+ className: css.providerBoolean,
11985
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
11986
+ type: "checkbox",
11987
+ checked: draft.clearApiKey,
11861
11988
  disabled: props.disabled,
11862
- options: [
11863
- {
11864
- value: "auto",
11865
- label: t("config.embeddingProtocolAuto")
11866
- },
11867
- {
11868
- value: "ollama",
11869
- label: t("config.embeddingProtocolOllama")
11870
- },
11871
- {
11872
- value: "openai",
11873
- label: t("config.embeddingProtocolOpenai")
11874
- }
11875
- ],
11876
- onChange: (protocol) => props.onEdit({ protocol })
11877
- }),
11878
- text("apiKey", "password", t("config.embeddingApiKey"), validEmbeddingApiKey(draft.apiKey), "sk-…")
11879
- ]
11880
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
11881
- className: css.editorNote,
11882
- children: t("config.embeddingSecurity")
11883
- })] }),
11989
+ onChange: (event) => props.onEdit({
11990
+ clearApiKey: event.target.checked,
11991
+ apiKey: "",
11992
+ apiKeyEnv: ""
11993
+ })
11994
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("config.embeddingClearKey") })]
11995
+ })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
11996
+ className: css.editorNote,
11997
+ children: t("config.embeddingUpgradeHost")
11998
+ }),
11999
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
12000
+ className: css.editorNote,
12001
+ children: t("config.embeddingSecurity")
12002
+ })
12003
+ ] }),
11884
12004
  props.actions,
11885
12005
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11886
12006
  className: css.embeddingTest,
@@ -12107,6 +12227,7 @@ window.__ModuleLoader__.load({
12107
12227
  const allowCreate = useLive(saved.allowCreate, write("allowCreate"));
12108
12228
  const allowUpdate = useLive(saved.allowUpdate, write("allowUpdate"));
12109
12229
  const autoBacktest = useLive(saved.autoBacktest, write("autoBacktest"));
12230
+ const autoAdopt = useLive(saved.autoAdopt, write("autoAdopt"));
12110
12231
  const hints = useLive(saved.hints, write("hints"));
12111
12232
  const sidebar = useLive(saved.sidebar, write("sidebar"));
12112
12233
  const destination = useStaged({ targetScope: saved.targetScope }, async (draft) => {
@@ -12123,6 +12244,17 @@ window.__ModuleLoader__.load({
12123
12244
  const changed = DRAFT_PARAMETERS.filter((field) => parameterValue(field, draft[field.key]) !== saved[field.key]);
12124
12245
  if (changed.length > 0) await scope.mutate(changed.map((field) => set(field.key, parameterValue(field, draft[field.key]))));
12125
12246
  });
12247
+ const adoptionBudget = useStaged({
12248
+ limit: String(saved.autoAdoptDailyLimit),
12249
+ timeZone: saved.autoAdoptTimeZone
12250
+ }, async (draft) => {
12251
+ await scope.mutate([set("autoAdoptDailyLimit", Number(draft.limit)), set("autoAdoptTimeZone", draft.timeZone.trim())]);
12252
+ });
12253
+ const invalidAdoption = parameterValue({
12254
+ min: 0,
12255
+ max: 100,
12256
+ integer: true
12257
+ }, adoptionBudget.draft.limit) === void 0 || !validSkillsTimeZone(adoptionBudget.draft.timeZone.trim());
12126
12258
  const disabled = !page.writable || snapshot.status === "loading" || !snapshot.writable;
12127
12259
  const invalid = PARAMETERS.find((field) => parameterValue(field, parameters.draft[field.key]) === void 0);
12128
12260
  const invalidDraft = DRAFT_PARAMETERS.find((field) => parameterValue(field, draftBudgets.draft[field.key]) === void 0);
@@ -12234,6 +12366,51 @@ window.__ModuleLoader__.load({
12234
12366
  disabled,
12235
12367
  onChange: autoBacktest.set
12236
12368
  }),
12369
+ evolution.value && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleRow, {
12370
+ id: "mnemon-skills-auto-adopt",
12371
+ label: t("skills.autoAdopt"),
12372
+ hint: t("skills.autoAdoptHint"),
12373
+ checked: autoAdopt.value,
12374
+ disabled: disabled || !autoBacktest.value,
12375
+ onChange: autoAdopt.set
12376
+ }),
12377
+ evolution.value && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
12378
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
12379
+ className: MnemonSettingsCard_module_css_default.panelNote,
12380
+ children: t("skills.autoBudgetHint")
12381
+ }),
12382
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
12383
+ className: MnemonSettingsCard_module_css_default.fieldGrid,
12384
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("skills.autoAdoptDailyLimit"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
12385
+ type: "number",
12386
+ min: 0,
12387
+ max: 100,
12388
+ step: 1,
12389
+ value: adoptionBudget.draft.limit,
12390
+ disabled: disabled || adoptionBudget.saving,
12391
+ onChange: (event) => adoptionBudget.edit({ limit: event.target.value })
12392
+ })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("skills.autoAdoptTimeZone"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
12393
+ type: "text",
12394
+ value: adoptionBudget.draft.timeZone,
12395
+ placeholder: "local / Asia/Shanghai",
12396
+ disabled: disabled || adoptionBudget.saving,
12397
+ onChange: (event) => adoptionBudget.edit({ timeZone: event.target.value })
12398
+ })] })]
12399
+ }),
12400
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PanelActions, {
12401
+ dirty: adoptionBudget.dirty,
12402
+ saving: adoptionBudget.saving,
12403
+ applied: adoptionBudget.applied,
12404
+ failed: adoptionBudget.failed,
12405
+ disabled,
12406
+ t,
12407
+ invalid: invalidAdoption ? t("skills.autoBudgetInvalid") : null,
12408
+ onDiscard: adoptionBudget.discard,
12409
+ onApply: () => {
12410
+ adoptionBudget.apply();
12411
+ }
12412
+ })
12413
+ ] }),
12237
12414
  evolution.value && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
12238
12415
  className: MnemonSettingsCard_module_css_default.advanced,
12239
12416
  children: [
@@ -12287,7 +12464,7 @@ window.__ModuleLoader__.load({
12287
12464
  })
12288
12465
  ]
12289
12466
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WriteFailure, {
12290
- error: evolution.failed ?? allowCreate.failed ?? allowUpdate.failed ?? autoBacktest.failed ?? hints.failed ?? sidebar.failed,
12467
+ error: evolution.failed ?? allowCreate.failed ?? allowUpdate.failed ?? autoBacktest.failed ?? autoAdopt.failed ?? hints.failed ?? sidebar.failed,
12291
12468
  t
12292
12469
  })]
12293
12470
  });
@@ -12678,6 +12855,16 @@ window.__ModuleLoader__.load({
12678
12855
  });
12679
12856
  const disabled = !page.writable || snapshot.status === "loading" || !snapshot.writable;
12680
12857
  const configured = snapshot.value?.runtimeMemory;
12858
+ const inheritance = useLive(configured?.inheritToSubagents === true, async (value) => {
12859
+ await scope.mutate([{
12860
+ op: "set",
12861
+ path: ["runtimeMemory"],
12862
+ value: {
12863
+ ...configured,
12864
+ inheritToSubagents: value
12865
+ }
12866
+ }]);
12867
+ });
12681
12868
  const savedLimits = {
12682
12869
  userLimitBytes: String(configured?.userLimitBytes ?? RUNTIME_MEMORY_LIMITS.user),
12683
12870
  memoryLimitBytes: String(configured?.memoryLimitBytes ?? RUNTIME_MEMORY_LIMITS.memory)
@@ -12694,82 +12881,103 @@ window.__ModuleLoader__.load({
12694
12881
  }]);
12695
12882
  });
12696
12883
  const invalid = RUNTIME_LIMITS.find((key) => runtimeLimitValue(limits.draft[key]) === void 0);
12697
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
12698
- className: MnemonSettingsCard_module_css_default.panelSection,
12699
- "aria-label": t("config.runtimeUserScopeTitle"),
12700
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
12701
- className: MnemonSettingsCard_module_css_default.rows,
12702
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SelectRow, {
12703
- id: "mnemon-runtime-user-scope",
12704
- label: t("config.runtimeUserScopeTitle"),
12705
- value: profile.value,
12706
- disabled,
12707
- onChange: profile.set,
12708
- options: [{
12709
- value: "storage",
12710
- label: t("config.runtimeUserScopeStorage"),
12711
- detail: t("config.runtimeUserScopeStorageHint")
12712
- }, {
12713
- value: "global",
12714
- label: t("config.runtimeUserScopeGlobal"),
12715
- detail: t("config.runtimeUserScopeGlobalHint")
12716
- }]
12717
- })
12718
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WriteFailure, {
12719
- error: profile.failed,
12720
- t
12721
- })]
12722
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
12723
- className: MnemonSettingsCard_module_css_default.panelSection,
12724
- "aria-labelledby": "mnemon-runtime-limits",
12725
- children: [
12726
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
12727
- className: MnemonSettingsCard_module_css_default.panelHeading,
12728
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
12729
- id: "mnemon-runtime-limits",
12730
- children: t("config.runtimeLimitsTitle")
12731
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
12732
- id: "mnemon-runtime-limits-hint",
12733
- children: t("config.runtimeLimitsHint", {
12734
- user: RUNTIME_MEMORY_LIMITS.user / 1024,
12735
- memory: RUNTIME_MEMORY_LIMITS.memory / 1024
12736
- })
12737
- })]
12738
- }),
12739
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
12740
- className: MnemonSettingsCard_module_css_default.fieldGrid,
12741
- children: RUNTIME_LIMITS.map((key) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t(`config.runtime.${key}`), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
12742
- type: "number",
12743
- min: "1",
12744
- max: RUNTIME_MEMORY_LIMIT_MAX_BYTES,
12745
- step: "1",
12746
- inputMode: "numeric",
12747
- value: limits.draft[key],
12748
- disabled: disabled || limits.saving,
12749
- "aria-describedby": "mnemon-runtime-limits-hint",
12750
- "aria-invalid": runtimeLimitValue(limits.draft[key]) === void 0,
12751
- onChange: (event) => limits.edit({ [key]: event.target.value })
12752
- })] }, key))
12753
- }),
12754
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PanelActions, {
12755
- dirty: limits.dirty,
12756
- saving: limits.saving,
12757
- applied: limits.applied,
12758
- failed: limits.failed,
12759
- disabled,
12760
- t,
12761
- note: t("config.runtimeLimitsApply"),
12762
- invalid: invalid === void 0 ? null : t("config.runtimeLimitInvalid", {
12763
- field: t(`config.runtime.${invalid}`),
12764
- max: RUNTIME_MEMORY_LIMIT_MAX_BYTES
12884
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
12885
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
12886
+ className: MnemonSettingsCard_module_css_default.panelSection,
12887
+ "aria-label": t("config.runtimeUserScopeTitle"),
12888
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
12889
+ className: MnemonSettingsCard_module_css_default.rows,
12890
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SelectRow, {
12891
+ id: "mnemon-runtime-user-scope",
12892
+ label: t("config.runtimeUserScopeTitle"),
12893
+ value: profile.value,
12894
+ disabled,
12895
+ onChange: profile.set,
12896
+ options: [{
12897
+ value: "storage",
12898
+ label: t("config.runtimeUserScopeStorage"),
12899
+ detail: t("config.runtimeUserScopeStorageHint")
12900
+ }, {
12901
+ value: "global",
12902
+ label: t("config.runtimeUserScopeGlobal"),
12903
+ detail: t("config.runtimeUserScopeGlobalHint")
12904
+ }]
12905
+ })
12906
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WriteFailure, {
12907
+ error: profile.failed,
12908
+ t
12909
+ })]
12910
+ }),
12911
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
12912
+ className: MnemonSettingsCard_module_css_default.panelSection,
12913
+ "aria-label": t("config.runtimeInheritance"),
12914
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
12915
+ className: MnemonSettingsCard_module_css_default.rows,
12916
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleRow, {
12917
+ id: "mnemon-runtime-inherit-subagents",
12918
+ label: t("config.runtimeInheritance"),
12919
+ hint: t("config.runtimeInheritanceHint"),
12920
+ checked: inheritance.value,
12921
+ disabled,
12922
+ onChange: inheritance.set
12923
+ })
12924
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WriteFailure, {
12925
+ error: inheritance.failed,
12926
+ t
12927
+ })]
12928
+ }),
12929
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
12930
+ className: MnemonSettingsCard_module_css_default.panelSection,
12931
+ "aria-labelledby": "mnemon-runtime-limits",
12932
+ children: [
12933
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
12934
+ className: MnemonSettingsCard_module_css_default.panelHeading,
12935
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
12936
+ id: "mnemon-runtime-limits",
12937
+ children: t("config.runtimeLimitsTitle")
12938
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
12939
+ id: "mnemon-runtime-limits-hint",
12940
+ children: t("config.runtimeLimitsHint", {
12941
+ user: RUNTIME_MEMORY_LIMITS.user / 1024,
12942
+ memory: RUNTIME_MEMORY_LIMITS.memory / 1024
12943
+ })
12944
+ })]
12765
12945
  }),
12766
- onDiscard: limits.discard,
12767
- onApply: () => {
12768
- limits.apply();
12769
- }
12770
- })
12771
- ]
12772
- })] });
12946
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
12947
+ className: MnemonSettingsCard_module_css_default.fieldGrid,
12948
+ children: RUNTIME_LIMITS.map((key) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t(`config.runtime.${key}`), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
12949
+ type: "number",
12950
+ min: "1",
12951
+ max: RUNTIME_MEMORY_LIMIT_MAX_BYTES,
12952
+ step: "1",
12953
+ inputMode: "numeric",
12954
+ value: limits.draft[key],
12955
+ disabled: disabled || limits.saving,
12956
+ "aria-describedby": "mnemon-runtime-limits-hint",
12957
+ "aria-invalid": runtimeLimitValue(limits.draft[key]) === void 0,
12958
+ onChange: (event) => limits.edit({ [key]: event.target.value })
12959
+ })] }, key))
12960
+ }),
12961
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PanelActions, {
12962
+ dirty: limits.dirty,
12963
+ saving: limits.saving,
12964
+ applied: limits.applied,
12965
+ failed: limits.failed,
12966
+ disabled,
12967
+ t,
12968
+ note: t("config.runtimeLimitsApply"),
12969
+ invalid: invalid === void 0 ? null : t("config.runtimeLimitInvalid", {
12970
+ field: t(`config.runtime.${invalid}`),
12971
+ max: RUNTIME_MEMORY_LIMIT_MAX_BYTES
12972
+ }),
12973
+ onDiscard: limits.discard,
12974
+ onApply: () => {
12975
+ limits.apply();
12976
+ }
12977
+ })
12978
+ ]
12979
+ })
12980
+ ] });
12773
12981
  }
12774
12982
  /** Each limit as the page shows it: the interval in seconds, the others as stored. */
12775
12983
  const LIMITS = [
@@ -13706,6 +13914,205 @@ window.__ModuleLoader__.load({
13706
13914
  });
13707
13915
  });
13708
13916
  //#endregion
13917
+ //#region src/client/memory-composer.tsx
13918
+ const MEMORY_COMPOSER_PREFERENCE = "dsh-mnemon:memory-composer";
13919
+ /** Register only while a Memory view owns the session; selectors read owner props only. */
13920
+ var MemoryComposer = class {
13921
+ listeners = /* @__PURE__ */ new Set();
13922
+ views = /* @__PURE__ */ new Map();
13923
+ entries = /* @__PURE__ */ new Map();
13924
+ register;
13925
+ multiplePanes = false;
13926
+ state = {
13927
+ available: false,
13928
+ collapsed: this.savedPreference()
13929
+ };
13930
+ savedPreference() {
13931
+ try {
13932
+ return localStorage.getItem(MEMORY_COMPOSER_PREFERENCE) !== "expanded";
13933
+ } catch {
13934
+ return true;
13935
+ }
13936
+ }
13937
+ getSnapshot = () => this.state;
13938
+ subscribe = (listener) => {
13939
+ this.listeners.add(listener);
13940
+ return () => {
13941
+ this.listeners.delete(listener);
13942
+ };
13943
+ };
13944
+ changed() {
13945
+ for (const listener of this.listeners) listener();
13946
+ }
13947
+ connect(register) {
13948
+ for (const stop of this.entries.values()) stop();
13949
+ this.entries.clear();
13950
+ this.register = register;
13951
+ this.state = {
13952
+ ...this.state,
13953
+ available: register !== void 0 && !this.multiplePanes
13954
+ };
13955
+ this.sync();
13956
+ this.changed();
13957
+ }
13958
+ setMultiplePanes(multiple) {
13959
+ if (this.multiplePanes === multiple) return;
13960
+ this.multiplePanes = multiple;
13961
+ this.state = {
13962
+ ...this.state,
13963
+ available: this.register !== void 0 && !multiple
13964
+ };
13965
+ this.sync();
13966
+ this.changed();
13967
+ }
13968
+ sync() {
13969
+ for (const [id, stop] of this.entries) if (!this.state.available || !this.state.collapsed || !this.views.has(id)) {
13970
+ stop();
13971
+ this.entries.delete(id);
13972
+ }
13973
+ if (this.state.available && this.state.collapsed && this.register !== void 0) {
13974
+ for (const id of this.views.keys()) if (!this.entries.has(id)) this.entries.set(id, this.register(id));
13975
+ }
13976
+ }
13977
+ mount(sessionId) {
13978
+ this.views.set(sessionId, (this.views.get(sessionId) ?? 0) + 1);
13979
+ this.sync();
13980
+ let live = true;
13981
+ return () => {
13982
+ if (!live) return;
13983
+ live = false;
13984
+ const count = this.views.get(sessionId) ?? 0;
13985
+ if (count <= 1) this.views.delete(sessionId);
13986
+ else this.views.set(sessionId, count - 1);
13987
+ this.sync();
13988
+ };
13989
+ }
13990
+ setCollapsed(collapsed, persist = true) {
13991
+ if (this.state.collapsed === collapsed) return;
13992
+ this.state = {
13993
+ ...this.state,
13994
+ collapsed
13995
+ };
13996
+ if (persist) try {
13997
+ localStorage.setItem(MEMORY_COMPOSER_PREFERENCE, collapsed ? "collapsed" : "expanded");
13998
+ } catch {}
13999
+ this.sync();
14000
+ this.changed();
14001
+ }
14002
+ revealSkill(event) {
14003
+ const detail = event.detail;
14004
+ if (typeof detail !== "object" || detail === null || !("sessionId" in detail) || typeof detail.sessionId !== "string" || !this.views.has(detail.sessionId)) return;
14005
+ this.setCollapsed(false);
14006
+ }
14007
+ };
14008
+ function MemoryComposerToggle({ composer, t }) {
14009
+ const state = (0, react.useSyncExternalStore)(composer.subscribe, composer.getSnapshot, composer.getSnapshot);
14010
+ if (!state.available) return null;
14011
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
14012
+ type: "button",
14013
+ className: MnemonView_module_css_default.composerToggle,
14014
+ "aria-expanded": !state.collapsed,
14015
+ onClick: () => composer.setCollapsed(!state.collapsed),
14016
+ children: t(state.collapsed ? "composer.expand" : "composer.collapse")
14017
+ });
14018
+ }
14019
+ function CollapsedComposer({ composer, t }) {
14020
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
14021
+ className: MnemonView_module_css_default.composerNotice,
14022
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("composer.collapsed") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemoryComposerToggle, {
14023
+ composer,
14024
+ t
14025
+ })]
14026
+ });
14027
+ }
14028
+ /** DSH's overlay chain retains the resident editor, attachments and draft DOM. */
14029
+ function installMemoryComposer(ctx, t) {
14030
+ const composer = new MemoryComposer();
14031
+ const stop = ctx.slots.inject("conversation.composer", () => {
14032
+ if (ctx.slots.spec?.("conversation.composer")?.kind !== "chain") return () => {};
14033
+ composer.connect((sessionId) => ctx.slots.register({
14034
+ name: "conversation.composer",
14035
+ priority: Number.MAX_SAFE_INTEGER,
14036
+ select: (owner) => owner.sessionId === sessionId && owner.pendingInteraction === void 0 ? true : null,
14037
+ locale: "mnemon",
14038
+ inject: () => ({
14039
+ composer,
14040
+ t
14041
+ })
14042
+ }, CollapsedComposer));
14043
+ return () => composer.connect(void 0);
14044
+ });
14045
+ const panes = typeof document === "undefined" ? void 0 : new MutationObserver((records) => {
14046
+ if (records.some((record) => [...record.addedNodes, ...record.removedNodes].some((node) => node instanceof Element && (node.matches("[data-composer-seat]") || node.querySelector("[data-composer-seat]") !== null)))) composer.setMultiplePanes(document.querySelectorAll("[data-composer-seat]").length > 1);
14047
+ });
14048
+ if (typeof document !== "undefined") {
14049
+ composer.setMultiplePanes(document.querySelectorAll("[data-composer-seat]").length > 1);
14050
+ panes?.observe(document.body, {
14051
+ childList: true,
14052
+ subtree: true
14053
+ });
14054
+ }
14055
+ const skill = (event) => composer.revealSkill(event);
14056
+ const preference = (event) => {
14057
+ if (event.key === "dsh-mnemon:memory-composer") composer.setCollapsed(event.newValue !== "expanded", false);
14058
+ };
14059
+ if (typeof window !== "undefined") {
14060
+ window.addEventListener("dsh-mnemon:skill-use", skill);
14061
+ window.addEventListener("storage", preference);
14062
+ }
14063
+ return {
14064
+ composer,
14065
+ dispose: () => {
14066
+ if (typeof window !== "undefined") {
14067
+ window.removeEventListener("dsh-mnemon:skill-use", skill);
14068
+ window.removeEventListener("storage", preference);
14069
+ }
14070
+ panes?.disconnect();
14071
+ stop();
14072
+ composer.connect(void 0);
14073
+ }
14074
+ };
14075
+ }
14076
+ /** Reserve the actual owning composer height, including multiline drafts and approvals. */
14077
+ function useMemoryComposerInset(root, enabled) {
14078
+ (0, react.useEffect)(() => {
14079
+ const shell = root.current;
14080
+ const scroll = enabled ? shell?.closest("[data-conversation-scroll]") : void 0;
14081
+ if (shell === null || scroll === void 0 || scroll === null) return;
14082
+ let seat = null;
14083
+ const update = () => {
14084
+ if (seat !== null) {
14085
+ shell.dataset.mnemonComposer = "";
14086
+ shell.style.setProperty("--mn-composer-inset", `${Math.ceil(seat.getBoundingClientRect().height) + 16}px`);
14087
+ }
14088
+ };
14089
+ const resize = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(update);
14090
+ const connect = () => {
14091
+ const next = scroll.querySelector(":scope > [data-composer-seat]");
14092
+ if (seat !== next) {
14093
+ if (seat !== null) resize?.unobserve(seat);
14094
+ seat = next;
14095
+ if (seat !== null) resize?.observe(seat);
14096
+ }
14097
+ if (seat === null) {
14098
+ delete shell.dataset.mnemonComposer;
14099
+ shell.style.removeProperty("--mn-composer-inset");
14100
+ } else update();
14101
+ };
14102
+ connect();
14103
+ const children = new MutationObserver(connect);
14104
+ children.observe(scroll, { childList: true });
14105
+ window.addEventListener("resize", update);
14106
+ return () => {
14107
+ children.disconnect();
14108
+ resize?.disconnect();
14109
+ window.removeEventListener("resize", update);
14110
+ delete shell.dataset.mnemonComposer;
14111
+ shell.style.removeProperty("--mn-composer-inset");
14112
+ };
14113
+ }, [root, enabled]);
14114
+ }
14115
+ //#endregion
13709
14116
  //#region src/client/starter-update.ts
13710
14117
  const STORAGE_KEY = "dsh-mnemon.starter-update";
13711
14118
  /** An older record belongs to an earlier visit, not to an update this page just ran. */
@@ -15365,7 +15772,9 @@ window.__ModuleLoader__.load({
15365
15772
  })
15366
15773
  });
15367
15774
  }
15368
- function MnemonWorkspace({ connection, settingsScope, sessionId, workspaceId, workspaceSelection, surface = "sidebar", active = true, titleBar = false, onClose, configuration, componentChanges, sourcePageDirectory = EMPTY_SOURCE_PAGE_DIRECTORY, renderSlot, focus, hiddenSourceTypes, skillsScope }) {
15775
+ function MnemonWorkspace({ connection, settingsScope, sessionId, workspaceId, workspaceSelection, surface = "sidebar", active = true, titleBar = false, headerActions, onClose, configuration, componentChanges, sourcePageDirectory = EMPTY_SOURCE_PAGE_DIRECTORY, renderSlot, focus, hiddenSourceTypes, skillsScope }) {
15776
+ const shellRef = (0, react.useRef)(null);
15777
+ useMemoryComposerInset(shellRef, surface === "builtin");
15369
15778
  const t = useT();
15370
15779
  const locale = useLocale();
15371
15780
  const configurationSeat = configuration ?? NO_ACTION_SEAT;
@@ -15773,6 +16182,7 @@ window.__ModuleLoader__.load({
15773
16182
  };
15774
16183
  const focused = focusType !== void 0;
15775
16184
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("main", {
16185
+ ref: shellRef,
15776
16186
  className: appearanceClass(MnemonView_module_css_default.shell, MnemonSidebarView_module_css_default.shell),
15777
16187
  "data-dsh-plugin": "dsh-mnemon",
15778
16188
  "data-dsh-part": "mnemon-view",
@@ -15814,31 +16224,35 @@ window.__ModuleLoader__.load({
15814
16224
  }),
15815
16225
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
15816
16226
  className: appearanceClass(MnemonView_module_css_default.headerActions, MnemonSidebarView_module_css_default.headerActions),
15817
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
15818
- className: appearanceClass(MnemonView_module_css_default.statusCluster, MnemonSidebarView_module_css_default.statusCluster),
15819
- children: [!focused && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CompositionStatus, {
15820
- tone: statusTone,
15821
- label: connectionLabel,
15822
- strategy: composingLabel,
15823
- layers: headerLayers,
15824
- onOpen: openConfiguration
15825
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
16227
+ children: [
16228
+ headerActions,
16229
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
16230
+ className: appearanceClass(MnemonView_module_css_default.statusCluster, MnemonSidebarView_module_css_default.statusCluster),
16231
+ children: [!focused && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CompositionStatus, {
16232
+ tone: statusTone,
16233
+ label: connectionLabel,
16234
+ strategy: composingLabel,
16235
+ layers: headerLayers,
16236
+ onOpen: openConfiguration
16237
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
16238
+ type: "button",
16239
+ className: MnemonView_module_css_default.iconButton,
16240
+ disabled: statusLoading,
16241
+ onClick: refreshPage,
16242
+ "aria-label": t("common.refresh"),
16243
+ title: t("common.refresh"),
16244
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 16 })
16245
+ })]
16246
+ }),
16247
+ openSettings !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
15826
16248
  type: "button",
15827
16249
  className: MnemonView_module_css_default.iconButton,
15828
- disabled: statusLoading,
15829
- onClick: refreshPage,
15830
- "aria-label": t("common.refresh"),
15831
- title: t("common.refresh"),
15832
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 16 })
15833
- })]
15834
- }), openSettings !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
15835
- type: "button",
15836
- className: MnemonView_module_css_default.iconButton,
15837
- onClick: openSettings,
15838
- "aria-label": t("header.configure"),
15839
- title: t("header.configure"),
15840
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 16 })
15841
- })]
16250
+ onClick: openSettings,
16251
+ "aria-label": t("header.configure"),
16252
+ title: t("header.configure"),
16253
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 16 })
16254
+ })
16255
+ ]
15842
16256
  })
15843
16257
  ]
15844
16258
  }),
@@ -16031,6 +16445,7 @@ window.__ModuleLoader__.load({
16031
16445
  }
16032
16446
  /** Builtin follows its DSH slot session, never the Sidebar's workspace picker. */
16033
16447
  function MnemonBuiltinWorkspaceHost(props) {
16448
+ (0, react.useEffect)(() => props.composer?.mount(props.sessionId), [props.composer, props.sessionId]);
16034
16449
  const subscribeLocale = (0, react.useCallback)((listener) => props.localeRuntime.subscribe(listener), [props.localeRuntime]);
16035
16450
  const getLocale = (0, react.useCallback)(() => props.localeRuntime.getSnapshot(), [props.localeRuntime]);
16036
16451
  const locale = (0, react.useSyncExternalStore)(subscribeLocale, getLocale, getLocale);
@@ -16042,6 +16457,10 @@ window.__ModuleLoader__.load({
16042
16457
  ...hiddenSourceTypes === void 0 ? {} : { hiddenSourceTypes },
16043
16458
  ...props.skillsScope === void 0 ? {} : { skillsScope: props.skillsScope },
16044
16459
  surface: "builtin",
16460
+ headerActions: props.composer === void 0 ? void 0 : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemoryComposerToggle, {
16461
+ composer: props.composer,
16462
+ t: props.t
16463
+ }),
16045
16464
  t: props.t,
16046
16465
  locale: locale.active,
16047
16466
  sourcePageDirectory: props.sourcePageDirectory,
@@ -17746,6 +18165,7 @@ window.__ModuleLoader__.load({
17746
18165
  }
17747
18166
  /** DSH supplies the owning session; Source pages retain the same render contract. */
17748
18167
  function mountBuiltinMemoryView(ctx, settings, namespace, translate, seats) {
18168
+ const composer = installMemoryComposer(ctx, translate);
17749
18169
  const sourcePageDirectory = createMemorySourcePageDirectory(ctx);
17750
18170
  const disposeView = ctx.slots.inject("conversation.view", () => ctx.slots.register({
17751
18171
  name: "conversation.view",
@@ -17767,6 +18187,7 @@ window.__ModuleLoader__.load({
17767
18187
  connection: ctx.connection,
17768
18188
  settingsScope: settings,
17769
18189
  sessionId,
18190
+ composer: composer.composer,
17770
18191
  localeRuntime: ctx.locale,
17771
18192
  sourcePageDirectory,
17772
18193
  configuration: seats.configuration,
@@ -17776,7 +18197,11 @@ window.__ModuleLoader__.load({
17776
18197
  t: translate
17777
18198
  })
17778
18199
  }, MnemonBuiltinWorkspaceHost));
17779
- if (typeof window === "undefined" || typeof document === "undefined") return disposeView;
18200
+ const dispose = () => {
18201
+ disposeView();
18202
+ composer.dispose();
18203
+ };
18204
+ if (typeof window === "undefined" || typeof document === "undefined") return dispose;
17780
18205
  const selectMemoryTab = () => {
17781
18206
  const label = translate("tab.label").trim();
17782
18207
  const eligible = (candidate) => !candidate.hasAttribute("disabled") && candidate.getAttribute("aria-disabled") !== "true" && candidate.closest("[hidden], [aria-hidden=\"true\"]") === null;
@@ -17828,7 +18253,7 @@ window.__ModuleLoader__.load({
17828
18253
  withdrawWorkspace?.();
17829
18254
  if (frame !== void 0) cancelAnimationFrame(frame);
17830
18255
  window.removeEventListener(MNEMON_ANCHOR_EVENT, openView);
17831
- disposeView();
18256
+ dispose();
17832
18257
  };
17833
18258
  }
17834
18259
  /** Mount the memory workspace plus the optional in-conversation interaction surfaces. */