dsh-mnemon 0.5.43 → 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/bin/repair-legacy-session.mjs +18 -2
- package/lib/bundle.js +1 -1
- package/lib/client.js +448 -84
- package/lib/index.js +270 -76
- package/lib/{starter-resolution-CTY14Exj.js → starter-resolution-LTLQsJPW.js} +2 -2
- package/lib/starter.js +1 -1
- package/lib/types/src/client/locales.d.ts +15 -0
- package/lib/types/src/host/protocol.d.ts +6 -0
- package/locale/detail.en.md +7 -0
- package/locale/detail.zh.md +7 -0
- package/locale/en.json +3 -1
- package/locale/zh.json +2 -1
- package/package.json +3 -3
package/lib/client.js
CHANGED
|
@@ -319,6 +319,8 @@ window.__ModuleLoader__.load({
|
|
|
319
319
|
targetScope: "user",
|
|
320
320
|
autoBacktest: true,
|
|
321
321
|
autoAdopt: false,
|
|
322
|
+
autoAdoptDailyLimit: 2,
|
|
323
|
+
autoAdoptTimeZone: "local",
|
|
322
324
|
draftMaxTokens: 32768,
|
|
323
325
|
draftRetryMaxTokens: 65536,
|
|
324
326
|
hints: true,
|
|
@@ -331,6 +333,17 @@ window.__ModuleLoader__.load({
|
|
|
331
333
|
maxPendingPerSession: 5,
|
|
332
334
|
casesPerRun: 8
|
|
333
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
|
+
}
|
|
334
347
|
/** The Sources that keep their data in Mnemon's data directory, in the order a backup lists them. */
|
|
335
348
|
const MNEMON_PACK_COMPONENTS = [
|
|
336
349
|
"runtime",
|
|
@@ -1829,7 +1842,7 @@ window.__ModuleLoader__.load({
|
|
|
1829
1842
|
"config.embeddingProtocolInvalid": "协议必须是 自动 / Ollama / OpenAI 兼容 之一。",
|
|
1830
1843
|
"config.embeddingEndpointInvalid": "嵌入 Endpoint 必须是不含凭据、查询参数或片段的 HTTP(S) 绝对 URL。",
|
|
1831
1844
|
"config.embeddingModelInvalid": "嵌入模型必须包含 1–200 个字符,且不能包含控制字符。",
|
|
1832
|
-
"config.embeddingSecurity": "Mnemon
|
|
1845
|
+
"config.embeddingSecurity": "Mnemon 会把记忆与查询正文发送到此 Endpoint。新密钥由 DSH 凭据库保管,设置中仅存引用;也可使用 Host 环境变量。留空保留已有密钥,移除引用不会删除凭据库中的记录。远程服务请使用 HTTPS。",
|
|
1833
1846
|
"config.embeddingTest": "测试状态",
|
|
1834
1847
|
"config.embeddingNotTested": "尚未检查嵌入服务的连接与各 Mnemon Native 空间的覆盖率。",
|
|
1835
1848
|
"config.embeddingTesting": "正在通过 Mnemon 检查嵌入服务与覆盖率…",
|
|
@@ -1880,7 +1893,15 @@ window.__ModuleLoader__.load({
|
|
|
1880
1893
|
"config.loadingProviders": "正在读取 Provider 配置…",
|
|
1881
1894
|
"config.providerLoadFailed": "读取 Provider 配置失败:{error}",
|
|
1882
1895
|
"config.retryProviders": "重试",
|
|
1883
|
-
"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 后即可管理凭据。现有连接仍可使用;此处暂不接受新的密钥。"
|
|
1884
1905
|
};
|
|
1885
1906
|
var en$1 = {
|
|
1886
1907
|
"term.space": "Memory Space",
|
|
@@ -2319,7 +2340,7 @@ window.__ModuleLoader__.load({
|
|
|
2319
2340
|
"config.embeddingProtocolInvalid": "The protocol must be one of Auto / Ollama / OpenAI-compatible.",
|
|
2320
2341
|
"config.embeddingEndpointInvalid": "The embedding endpoint must be an absolute HTTP(S) URL without credentials, a query, or a fragment.",
|
|
2321
2342
|
"config.embeddingModelInvalid": "The embedding model must contain 1–200 characters and no control characters.",
|
|
2322
|
-
"config.embeddingSecurity": "Mnemon sends memory and query text to this endpoint
|
|
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.",
|
|
2323
2344
|
"config.embeddingTest": "Test status",
|
|
2324
2345
|
"config.embeddingNotTested": "The embedding connection and the coverage of each Mnemon Native space have not been checked.",
|
|
2325
2346
|
"config.embeddingTesting": "Checking the embedding server and coverage through Mnemon…",
|
|
@@ -2370,7 +2391,15 @@ window.__ModuleLoader__.load({
|
|
|
2370
2391
|
"config.loadingProviders": "Loading provider configurations…",
|
|
2371
2392
|
"config.providerLoadFailed": "Could not load provider configurations: {error}",
|
|
2372
2393
|
"config.retryProviders": "Retry",
|
|
2373
|
-
"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."
|
|
2374
2403
|
};
|
|
2375
2404
|
//#endregion
|
|
2376
2405
|
//#region src/client/locales.ts
|
|
@@ -2379,6 +2408,9 @@ window.__ModuleLoader__.load({
|
|
|
2379
2408
|
...zh$3,
|
|
2380
2409
|
...zh$2,
|
|
2381
2410
|
...zh$1,
|
|
2411
|
+
"composer.expand": "展开输入框",
|
|
2412
|
+
"composer.collapse": "收起输入框",
|
|
2413
|
+
"composer.collapsed": "输入框已收起",
|
|
2382
2414
|
"tab.label": "记忆系统",
|
|
2383
2415
|
"nav.aria": "Mnemon 页面",
|
|
2384
2416
|
"nav.status": "状态",
|
|
@@ -3172,6 +3204,10 @@ window.__ModuleLoader__.load({
|
|
|
3172
3204
|
"skills.targetScope.project": "项目",
|
|
3173
3205
|
"skills.targetScope.storage": "跟随存储范围",
|
|
3174
3206
|
"skills.evolutionHint": "后台复盘并建议改进技能;会创建落盘的任务及子代理会话,Mnemon 不自动删除这些记录",
|
|
3207
|
+
"skills.autoAdoptDailyLimit": "每日自动处理候选数",
|
|
3208
|
+
"skills.autoAdoptTimeZone": "每日额度时区",
|
|
3209
|
+
"skills.autoBudgetHint": "默认每天 2 个候选,按所选时区的自然日计数;local 使用 Host 时区。同一存储目录共享额度,重启不会清零,失败与取消仍占用候选名额。0 暂停自动处理,手动起草与采纳不受限制。",
|
|
3210
|
+
"skills.autoBudgetInvalid": "候选数须为 0–100 的整数;时区须为有效 IANA 名称或 local。",
|
|
3175
3211
|
"skills.autoAdopt": "自动采纳新建议",
|
|
3176
3212
|
"skills.autoAdoptHint": "默认关闭。需要自动回测:仅处理新的空闲审查建议,全部启用的文本用例不退步才采纳,最多重写两次;未测出或超出每轮用例上限时转人工审查。回测是文本模拟,不验证真实外部操作。",
|
|
3177
3213
|
"skills.autoBacktest": "草案自动回测",
|
|
@@ -3208,6 +3244,9 @@ window.__ModuleLoader__.load({
|
|
|
3208
3244
|
...en$3,
|
|
3209
3245
|
...en$2,
|
|
3210
3246
|
...en$1,
|
|
3247
|
+
"composer.expand": "Show message input",
|
|
3248
|
+
"composer.collapse": "Collapse message input",
|
|
3249
|
+
"composer.collapsed": "Message input collapsed",
|
|
3211
3250
|
"tab.label": "Memory System",
|
|
3212
3251
|
"nav.aria": "Mnemon pages",
|
|
3213
3252
|
"nav.status": "Status",
|
|
@@ -4001,6 +4040,10 @@ window.__ModuleLoader__.load({
|
|
|
4001
4040
|
"skills.targetScope.project": "Project",
|
|
4002
4041
|
"skills.targetScope.storage": "Follow storage",
|
|
4003
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.",
|
|
4004
4047
|
"skills.autoAdopt": "Automatically adopt new suggestions",
|
|
4005
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.",
|
|
4006
4049
|
"skills.autoBacktest": "Backtest drafts",
|
|
@@ -4055,7 +4098,7 @@ window.__ModuleLoader__.load({
|
|
|
4055
4098
|
const IconChevronLeftOutline14 = _deepseek_ai_dsh_client_ui_primitives.IconChevronLeftOutlineRegular;
|
|
4056
4099
|
//#endregion
|
|
4057
4100
|
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonView.module.css.mjs
|
|
4058
|
-
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)}";
|
|
4059
4102
|
const tagId$13 = "dsh-mnemon/src/client/MnemonView.module.css";
|
|
4060
4103
|
if (typeof document !== "undefined") {
|
|
4061
4104
|
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$13) + "]");
|
|
@@ -4078,6 +4121,8 @@ window.__ModuleLoader__.load({
|
|
|
4078
4121
|
"canvas": "IIa07q_canvas",
|
|
4079
4122
|
"checking": "IIa07q_checking",
|
|
4080
4123
|
"compactListProgress": "IIa07q_compactListProgress",
|
|
4124
|
+
"composerNotice": "IIa07q_composerNotice",
|
|
4125
|
+
"composerToggle": "IIa07q_composerToggle",
|
|
4081
4126
|
"compositionHint": "IIa07q_compositionHint",
|
|
4082
4127
|
"compositionLayers": "IIa07q_compositionLayers",
|
|
4083
4128
|
"compositionStatus": "IIa07q_compositionStatus",
|
|
@@ -10817,6 +10862,7 @@ window.__ModuleLoader__.load({
|
|
|
10817
10862
|
"ollama",
|
|
10818
10863
|
"openai"
|
|
10819
10864
|
];
|
|
10865
|
+
const EMBEDDING_ENVIRONMENT_NAME = /^[A-Za-z_][A-Za-z0-9_]{0,127}$/u;
|
|
10820
10866
|
//#endregion
|
|
10821
10867
|
//#region plugins/dsh-mnemon-source-memory-spaces/src/client/ProviderIcon.tsx
|
|
10822
10868
|
function GenericProviderMark() {
|
|
@@ -11508,7 +11554,9 @@ window.__ModuleLoader__.load({
|
|
|
11508
11554
|
return {
|
|
11509
11555
|
endpoint: embedding?.endpoint?.trim() || "http://localhost:11434",
|
|
11510
11556
|
model: embedding?.model?.trim() || "nomic-embed-text",
|
|
11511
|
-
apiKey:
|
|
11557
|
+
apiKey: "",
|
|
11558
|
+
apiKeyEnv: embedding?.apiKeyEnv ?? "",
|
|
11559
|
+
clearApiKey: false,
|
|
11512
11560
|
protocol: embedding?.protocol ?? "auto"
|
|
11513
11561
|
};
|
|
11514
11562
|
}
|
|
@@ -11535,25 +11583,32 @@ window.__ModuleLoader__.load({
|
|
|
11535
11583
|
if (!validEmbeddingEndpoint(draft.endpoint)) return t("config.embeddingEndpointInvalid");
|
|
11536
11584
|
if (!validEmbeddingModel(draft.model)) return t("config.embeddingModelInvalid");
|
|
11537
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");
|
|
11538
11588
|
if (!validProtocol(draft.protocol)) return t("config.embeddingProtocolInvalid");
|
|
11539
11589
|
return null;
|
|
11540
11590
|
}
|
|
11541
11591
|
/** The stored value: a switched-off override keeps only the fields that are valid. */
|
|
11542
|
-
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 };
|
|
11543
11598
|
const endpoint = draft.endpoint.trim().replace(/\/+$/u, "");
|
|
11544
11599
|
if (enabled) return {
|
|
11545
11600
|
enabled: true,
|
|
11546
11601
|
endpoint,
|
|
11547
11602
|
model: draft.model.trim(),
|
|
11548
11603
|
protocol: draft.protocol,
|
|
11549
|
-
|
|
11604
|
+
...auth
|
|
11550
11605
|
};
|
|
11551
11606
|
return {
|
|
11552
11607
|
enabled: false,
|
|
11553
11608
|
...validEmbeddingEndpoint(draft.endpoint) ? { endpoint } : {},
|
|
11554
11609
|
...validEmbeddingModel(draft.model) ? { model: draft.model.trim() } : {},
|
|
11555
11610
|
...validProtocol(draft.protocol) ? { protocol: draft.protocol } : {},
|
|
11556
|
-
...validEmbeddingApiKey(draft.apiKey) ?
|
|
11611
|
+
...validEmbeddingApiKey(draft.apiKey) ? auth : {}
|
|
11557
11612
|
};
|
|
11558
11613
|
}
|
|
11559
11614
|
/**
|
|
@@ -11604,12 +11659,19 @@ window.__ModuleLoader__.load({
|
|
|
11604
11659
|
const value = snapshot.value;
|
|
11605
11660
|
const client = (0, react.useMemo)(() => host.operations === void 0 ? void 0 : memorySpacesSettingsClient(host.operations), [host.operations]);
|
|
11606
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);
|
|
11607
11665
|
const managedSaved = value?.embedding?.enabled === true;
|
|
11608
11666
|
const managed = useLive(managedSaved, async (enabled) => {
|
|
11609
|
-
await configuration.set("embedding",
|
|
11667
|
+
await configuration.set("embedding", connectionValue(enabled, saved));
|
|
11610
11668
|
});
|
|
11611
11669
|
const form = useStaged(saved, async (draft) => {
|
|
11612
|
-
await configuration.set("embedding",
|
|
11670
|
+
await configuration.set("embedding", connectionValue(managedSaved, draft));
|
|
11671
|
+
form.edit({
|
|
11672
|
+
apiKey: "",
|
|
11673
|
+
clearApiKey: false
|
|
11674
|
+
});
|
|
11613
11675
|
});
|
|
11614
11676
|
const [nativeCliFound, setNativeCliFound] = (0, react.useState)(() => retained.get(RETAINED_CLI)?.commandFound);
|
|
11615
11677
|
const [status, setStatus] = (0, react.useState)({ state: "idle" });
|
|
@@ -11733,6 +11795,8 @@ window.__ModuleLoader__.load({
|
|
|
11733
11795
|
cliMissing,
|
|
11734
11796
|
t,
|
|
11735
11797
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EmbeddingEditor, {
|
|
11798
|
+
secure,
|
|
11799
|
+
credentialSaved: value?.embedding?.apiKeyStorage === "credentials",
|
|
11736
11800
|
managed: managed.value,
|
|
11737
11801
|
draft: form.draft,
|
|
11738
11802
|
disabled,
|
|
@@ -11753,22 +11817,34 @@ window.__ModuleLoader__.load({
|
|
|
11753
11817
|
if (!on) form.discard();
|
|
11754
11818
|
managed.set(on);
|
|
11755
11819
|
},
|
|
11756
|
-
actions: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
11757
|
-
|
|
11758
|
-
|
|
11759
|
-
|
|
11760
|
-
|
|
11761
|
-
|
|
11762
|
-
|
|
11763
|
-
|
|
11764
|
-
|
|
11765
|
-
|
|
11766
|
-
|
|
11767
|
-
|
|
11768
|
-
|
|
11769
|
-
|
|
11770
|
-
|
|
11771
|
-
|
|
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
|
+
] })
|
|
11772
11848
|
})
|
|
11773
11849
|
})
|
|
11774
11850
|
})]
|
|
@@ -11844,7 +11920,7 @@ window.__ModuleLoader__.load({
|
|
|
11844
11920
|
"aria-label": label,
|
|
11845
11921
|
"aria-invalid": !valid,
|
|
11846
11922
|
value: draft[field],
|
|
11847
|
-
disabled: props.disabled,
|
|
11923
|
+
disabled: props.disabled || (field === "apiKey" || field === "apiKeyEnv") && (!props.secure || draft.clearApiKey),
|
|
11848
11924
|
autoComplete: "off",
|
|
11849
11925
|
spellCheck: false,
|
|
11850
11926
|
autoCapitalize: "none",
|
|
@@ -11871,37 +11947,60 @@ window.__ModuleLoader__.load({
|
|
|
11871
11947
|
disabled: props.disabled,
|
|
11872
11948
|
onChange: props.onManaged
|
|
11873
11949
|
}),
|
|
11874
|
-
props.managed && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
11875
|
-
|
|
11876
|
-
|
|
11877
|
-
|
|
11878
|
-
|
|
11879
|
-
|
|
11880
|
-
|
|
11881
|
-
|
|
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,
|
|
11882
11988
|
disabled: props.disabled,
|
|
11883
|
-
|
|
11884
|
-
|
|
11885
|
-
|
|
11886
|
-
|
|
11887
|
-
|
|
11888
|
-
|
|
11889
|
-
|
|
11890
|
-
|
|
11891
|
-
|
|
11892
|
-
|
|
11893
|
-
|
|
11894
|
-
|
|
11895
|
-
|
|
11896
|
-
|
|
11897
|
-
|
|
11898
|
-
}),
|
|
11899
|
-
text("apiKey", "password", t("config.embeddingApiKey"), validEmbeddingApiKey(draft.apiKey), "sk-…")
|
|
11900
|
-
]
|
|
11901
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
11902
|
-
className: css.editorNote,
|
|
11903
|
-
children: t("config.embeddingSecurity")
|
|
11904
|
-
})] }),
|
|
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
|
+
] }),
|
|
11905
12004
|
props.actions,
|
|
11906
12005
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
11907
12006
|
className: css.embeddingTest,
|
|
@@ -12145,6 +12244,17 @@ window.__ModuleLoader__.load({
|
|
|
12145
12244
|
const changed = DRAFT_PARAMETERS.filter((field) => parameterValue(field, draft[field.key]) !== saved[field.key]);
|
|
12146
12245
|
if (changed.length > 0) await scope.mutate(changed.map((field) => set(field.key, parameterValue(field, draft[field.key]))));
|
|
12147
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());
|
|
12148
12258
|
const disabled = !page.writable || snapshot.status === "loading" || !snapshot.writable;
|
|
12149
12259
|
const invalid = PARAMETERS.find((field) => parameterValue(field, parameters.draft[field.key]) === void 0);
|
|
12150
12260
|
const invalidDraft = DRAFT_PARAMETERS.find((field) => parameterValue(field, draftBudgets.draft[field.key]) === void 0);
|
|
@@ -12264,6 +12374,43 @@ window.__ModuleLoader__.load({
|
|
|
12264
12374
|
disabled: disabled || !autoBacktest.value,
|
|
12265
12375
|
onChange: autoAdopt.set
|
|
12266
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
|
+
] }),
|
|
12267
12414
|
evolution.value && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
|
|
12268
12415
|
className: MnemonSettingsCard_module_css_default.advanced,
|
|
12269
12416
|
children: [
|
|
@@ -13767,6 +13914,205 @@ window.__ModuleLoader__.load({
|
|
|
13767
13914
|
});
|
|
13768
13915
|
});
|
|
13769
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
|
|
13770
14116
|
//#region src/client/starter-update.ts
|
|
13771
14117
|
const STORAGE_KEY = "dsh-mnemon.starter-update";
|
|
13772
14118
|
/** An older record belongs to an earlier visit, not to an update this page just ran. */
|
|
@@ -15426,7 +15772,9 @@ window.__ModuleLoader__.load({
|
|
|
15426
15772
|
})
|
|
15427
15773
|
});
|
|
15428
15774
|
}
|
|
15429
|
-
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");
|
|
15430
15778
|
const t = useT();
|
|
15431
15779
|
const locale = useLocale();
|
|
15432
15780
|
const configurationSeat = configuration ?? NO_ACTION_SEAT;
|
|
@@ -15834,6 +16182,7 @@ window.__ModuleLoader__.load({
|
|
|
15834
16182
|
};
|
|
15835
16183
|
const focused = focusType !== void 0;
|
|
15836
16184
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("main", {
|
|
16185
|
+
ref: shellRef,
|
|
15837
16186
|
className: appearanceClass(MnemonView_module_css_default.shell, MnemonSidebarView_module_css_default.shell),
|
|
15838
16187
|
"data-dsh-plugin": "dsh-mnemon",
|
|
15839
16188
|
"data-dsh-part": "mnemon-view",
|
|
@@ -15875,31 +16224,35 @@ window.__ModuleLoader__.load({
|
|
|
15875
16224
|
}),
|
|
15876
16225
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
15877
16226
|
className: appearanceClass(MnemonView_module_css_default.headerActions, MnemonSidebarView_module_css_default.headerActions),
|
|
15878
|
-
children: [
|
|
15879
|
-
|
|
15880
|
-
|
|
15881
|
-
|
|
15882
|
-
|
|
15883
|
-
|
|
15884
|
-
|
|
15885
|
-
|
|
15886
|
-
|
|
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", {
|
|
15887
16248
|
type: "button",
|
|
15888
16249
|
className: MnemonView_module_css_default.iconButton,
|
|
15889
|
-
|
|
15890
|
-
|
|
15891
|
-
|
|
15892
|
-
|
|
15893
|
-
|
|
15894
|
-
|
|
15895
|
-
}), openSettings !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
15896
|
-
type: "button",
|
|
15897
|
-
className: MnemonView_module_css_default.iconButton,
|
|
15898
|
-
onClick: openSettings,
|
|
15899
|
-
"aria-label": t("header.configure"),
|
|
15900
|
-
title: t("header.configure"),
|
|
15901
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 16 })
|
|
15902
|
-
})]
|
|
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
|
+
]
|
|
15903
16256
|
})
|
|
15904
16257
|
]
|
|
15905
16258
|
}),
|
|
@@ -16092,6 +16445,7 @@ window.__ModuleLoader__.load({
|
|
|
16092
16445
|
}
|
|
16093
16446
|
/** Builtin follows its DSH slot session, never the Sidebar's workspace picker. */
|
|
16094
16447
|
function MnemonBuiltinWorkspaceHost(props) {
|
|
16448
|
+
(0, react.useEffect)(() => props.composer?.mount(props.sessionId), [props.composer, props.sessionId]);
|
|
16095
16449
|
const subscribeLocale = (0, react.useCallback)((listener) => props.localeRuntime.subscribe(listener), [props.localeRuntime]);
|
|
16096
16450
|
const getLocale = (0, react.useCallback)(() => props.localeRuntime.getSnapshot(), [props.localeRuntime]);
|
|
16097
16451
|
const locale = (0, react.useSyncExternalStore)(subscribeLocale, getLocale, getLocale);
|
|
@@ -16103,6 +16457,10 @@ window.__ModuleLoader__.load({
|
|
|
16103
16457
|
...hiddenSourceTypes === void 0 ? {} : { hiddenSourceTypes },
|
|
16104
16458
|
...props.skillsScope === void 0 ? {} : { skillsScope: props.skillsScope },
|
|
16105
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
|
+
}),
|
|
16106
16464
|
t: props.t,
|
|
16107
16465
|
locale: locale.active,
|
|
16108
16466
|
sourcePageDirectory: props.sourcePageDirectory,
|
|
@@ -17807,6 +18165,7 @@ window.__ModuleLoader__.load({
|
|
|
17807
18165
|
}
|
|
17808
18166
|
/** DSH supplies the owning session; Source pages retain the same render contract. */
|
|
17809
18167
|
function mountBuiltinMemoryView(ctx, settings, namespace, translate, seats) {
|
|
18168
|
+
const composer = installMemoryComposer(ctx, translate);
|
|
17810
18169
|
const sourcePageDirectory = createMemorySourcePageDirectory(ctx);
|
|
17811
18170
|
const disposeView = ctx.slots.inject("conversation.view", () => ctx.slots.register({
|
|
17812
18171
|
name: "conversation.view",
|
|
@@ -17828,6 +18187,7 @@ window.__ModuleLoader__.load({
|
|
|
17828
18187
|
connection: ctx.connection,
|
|
17829
18188
|
settingsScope: settings,
|
|
17830
18189
|
sessionId,
|
|
18190
|
+
composer: composer.composer,
|
|
17831
18191
|
localeRuntime: ctx.locale,
|
|
17832
18192
|
sourcePageDirectory,
|
|
17833
18193
|
configuration: seats.configuration,
|
|
@@ -17837,7 +18197,11 @@ window.__ModuleLoader__.load({
|
|
|
17837
18197
|
t: translate
|
|
17838
18198
|
})
|
|
17839
18199
|
}, MnemonBuiltinWorkspaceHost));
|
|
17840
|
-
|
|
18200
|
+
const dispose = () => {
|
|
18201
|
+
disposeView();
|
|
18202
|
+
composer.dispose();
|
|
18203
|
+
};
|
|
18204
|
+
if (typeof window === "undefined" || typeof document === "undefined") return dispose;
|
|
17841
18205
|
const selectMemoryTab = () => {
|
|
17842
18206
|
const label = translate("tab.label").trim();
|
|
17843
18207
|
const eligible = (candidate) => !candidate.hasAttribute("disabled") && candidate.getAttribute("aria-disabled") !== "true" && candidate.closest("[hidden], [aria-hidden=\"true\"]") === null;
|
|
@@ -17889,7 +18253,7 @@ window.__ModuleLoader__.load({
|
|
|
17889
18253
|
withdrawWorkspace?.();
|
|
17890
18254
|
if (frame !== void 0) cancelAnimationFrame(frame);
|
|
17891
18255
|
window.removeEventListener(MNEMON_ANCHOR_EVENT, openView);
|
|
17892
|
-
|
|
18256
|
+
dispose();
|
|
17893
18257
|
};
|
|
17894
18258
|
}
|
|
17895
18259
|
/** Mount the memory workspace plus the optional in-conversation interaction surfaces. */
|