dsh-mnemon 0.5.36 → 0.5.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bundle.js +1 -1
- package/lib/client.js +571 -125
- package/lib/core.js +1 -1
- package/lib/index.js +628 -84
- package/lib/{runtime-zuuBe8x1.js → runtime-0u6dOiF9.js} +33 -1
- package/lib/{starter-resolution-BVUz3pw4.js → starter-resolution-XVFzvnV0.js} +5 -5
- package/lib/starter.js +1 -1
- package/lib/testing.js +1 -1
- package/lib/types/src/client/extension-sdk.d.ts +1 -0
- package/lib/types/src/client/locales.d.ts +16 -0
- package/lib/types/src/client/page-client.d.ts +3 -1
- package/lib/types/src/client/page-controls.d.ts +5 -0
- package/lib/types/src/client/source-contracts.d.ts +12 -2
- package/lib/types/src/core/contracts/index.d.ts +1 -0
- package/lib/types/src/core/contracts/task-agent-model.d.ts +49 -0
- package/lib/types/src/host/protocol.d.ts +11 -50
- package/package.json +6 -6
package/lib/client.js
CHANGED
|
@@ -303,6 +303,7 @@ window.__ModuleLoader__.load({
|
|
|
303
303
|
const DEFAULT_IDLE_REVIEW = {
|
|
304
304
|
enabled: true,
|
|
305
305
|
runtimeMemory: true,
|
|
306
|
+
persistWatermark: false,
|
|
306
307
|
provider: "spawn",
|
|
307
308
|
fallback: "spawn",
|
|
308
309
|
agentTeams: "pause",
|
|
@@ -1807,10 +1808,10 @@ window.__ModuleLoader__.load({
|
|
|
1807
1808
|
"config.embeddingSaveBeforeTest": "请先保存嵌入配置,再测试实际运行值。",
|
|
1808
1809
|
"config.embeddingTestUnavailable": "当前 DSH Host 不提供嵌入状态检查。",
|
|
1809
1810
|
"config.embeddingCliMissing": "测试需要 Mnemon CLI;向量设置只作用于 Mnemon Native。",
|
|
1810
|
-
"config.embeddingStatusAvailable": "
|
|
1811
|
-
"config.embeddingStatusAvailableWithProtocol": "
|
|
1812
|
-
"config.embeddingStatusUnavailable": "
|
|
1813
|
-
"config.embeddingStatusUnavailableWithProtocol": "
|
|
1811
|
+
"config.embeddingStatusAvailable": "嵌入模型可用 · {model} · 已嵌入 {embedded}/{total}({coverage})",
|
|
1812
|
+
"config.embeddingStatusAvailableWithProtocol": "嵌入模型可用 · {model} · 协议 {protocol} · 已嵌入 {embedded}/{total}({coverage})",
|
|
1813
|
+
"config.embeddingStatusUnavailable": "嵌入模型不可用 · {model} · 已嵌入 {embedded}/{total}({coverage})",
|
|
1814
|
+
"config.embeddingStatusUnavailableWithProtocol": "嵌入模型不可用 · {model} · 协议 {protocol} · 已嵌入 {embedded}/{total}({coverage})",
|
|
1814
1815
|
"config.embeddingStatusFailed": "嵌入状态检查失败:{error}",
|
|
1815
1816
|
"config.embeddingSpaces": "各 Mnemon Native 空间",
|
|
1816
1817
|
"config.embeddingSpaceCounts": "已嵌入 {embedded}/{total}({coverage})",
|
|
@@ -2297,10 +2298,10 @@ window.__ModuleLoader__.load({
|
|
|
2297
2298
|
"config.embeddingSaveBeforeTest": "Save the embedding settings before testing their effective runtime values.",
|
|
2298
2299
|
"config.embeddingTestUnavailable": "This DSH Host does not provide embedding status checks.",
|
|
2299
2300
|
"config.embeddingCliMissing": "Testing needs the Mnemon CLI; these embedding settings only apply to Mnemon Native.",
|
|
2300
|
-
"config.embeddingStatusAvailable": "Embedding
|
|
2301
|
-
"config.embeddingStatusAvailableWithProtocol": "Embedding
|
|
2302
|
-
"config.embeddingStatusUnavailable": "Embedding
|
|
2303
|
-
"config.embeddingStatusUnavailableWithProtocol": "Embedding
|
|
2301
|
+
"config.embeddingStatusAvailable": "Embedding model available · {model} · {embedded}/{total} embedded ({coverage})",
|
|
2302
|
+
"config.embeddingStatusAvailableWithProtocol": "Embedding model available · {model} · protocol {protocol} · {embedded}/{total} embedded ({coverage})",
|
|
2303
|
+
"config.embeddingStatusUnavailable": "Embedding model unavailable · {model} · {embedded}/{total} embedded ({coverage})",
|
|
2304
|
+
"config.embeddingStatusUnavailableWithProtocol": "Embedding model unavailable · {model} · protocol {protocol} · {embedded}/{total} embedded ({coverage})",
|
|
2304
2305
|
"config.embeddingStatusFailed": "Embedding status check failed: {error}",
|
|
2305
2306
|
"config.embeddingSpaces": "Each Mnemon Native space",
|
|
2306
2307
|
"config.embeddingSpaceCounts": "{embedded}/{total} embedded ({coverage})",
|
|
@@ -2362,6 +2363,9 @@ window.__ModuleLoader__.load({
|
|
|
2362
2363
|
"common.showMore": "再显示 {count} 条",
|
|
2363
2364
|
"header.backToConversation": "返回会话",
|
|
2364
2365
|
"header.configure": "配置",
|
|
2366
|
+
"header.noticeSummary": "提示 {count} 条 · {labels}",
|
|
2367
|
+
"header.noticeRemoteReadOnly": "远程只读",
|
|
2368
|
+
"header.noticeIdleReview": "空闲审查",
|
|
2365
2369
|
"header.compositionHint": "点击前往配置调整组合。",
|
|
2366
2370
|
"header.checking": "检查中",
|
|
2367
2371
|
"header.connected": "已连接",
|
|
@@ -2480,6 +2484,13 @@ window.__ModuleLoader__.load({
|
|
|
2480
2484
|
"status.reviewFailedDetail": "本轮记忆检查未完成,不会自动重放。后续审查受冷却时间和会话次数限制。",
|
|
2481
2485
|
"status.reviewPartial": "已有写入提交;请按下列回执核对,未回滚。",
|
|
2482
2486
|
"status.reviewTeamPaused": "Agent Teams 工具在役时按兼容设置暂停空闲审查。如需继续审查,可在“插件 → 可组合记忆”页面的空闲审查中选择“受限任务 Agent 审查”。召回与主动写入设置不变。",
|
|
2487
|
+
"status.reviewToolAccessPaused": "自动审查所需的结果提交工具当前不可用,已跳过本轮,不消耗审查次数。后续符合条件的对话轮次会重新检查。请检查当前会话的工具限制或审批设置。",
|
|
2488
|
+
"status.reviewWatermarkUsage": "本会话审查尝试:{attempts} / {max}(已恢复 {restored} 次)。",
|
|
2489
|
+
"status.reviewWatermarkNext": "下次审查不早于 {time};仍需新的合格对话检查点。",
|
|
2490
|
+
"status.reviewWatermarkPaused": "自动审查已暂停:无法读取或保存持久化限额。",
|
|
2491
|
+
"status.reviewWatermarkRecovery": "停止使用此存储根目录的 Host,检查 state/idle-review 中该会话的状态或锁,然后重新打开会话。删除状态会重置限额;普通对话和手动操作仍可使用。",
|
|
2492
|
+
"config.reviewPersistWatermark": "重新打开会话后保留审查限额",
|
|
2493
|
+
"config.reviewPersistWatermarkHint": "默认关闭;按存储根目录和父会话保留尝试次数与冷却时间,失败或取消也计次",
|
|
2483
2494
|
"status.reviewRun": "审查运行:{id}",
|
|
2484
2495
|
"status.reviewContextWindow": "请切换为有界检查点(spawn),或选择上下文窗口足以覆盖父会话的任务 Agent 模型。",
|
|
2485
2496
|
"config.reviewTitle": "空闲审查",
|
|
@@ -2694,6 +2705,12 @@ window.__ModuleLoader__.load({
|
|
|
2694
2705
|
"config.runtimeUserScopeStorageHint": "与 MEMORY.md 在同一目录",
|
|
2695
2706
|
"config.runtimeUserScopeGlobal": "全局共享",
|
|
2696
2707
|
"config.runtimeUserScopeGlobalHint": "所有工作区共用;MEMORY.md 仍按存储范围",
|
|
2708
|
+
"config.runtimeLimitsTitle": "容量上限",
|
|
2709
|
+
"config.runtimeLimitsHint": "默认用户画像 {user} KiB、工作记忆 {memory} KiB。1 KiB = 1024 字节。",
|
|
2710
|
+
"config.runtime.userLimitBytes": "用户画像上限(字节)",
|
|
2711
|
+
"config.runtime.memoryLimitBytes": "工作记忆上限(字节)",
|
|
2712
|
+
"config.runtimeLimitsApply": "应用后实时生效;调低上限不会删除已有条目",
|
|
2713
|
+
"config.runtimeLimitInvalid": "请将“{field}”设为 1–{max} 之间的整数。",
|
|
2697
2714
|
"config.enhancementsRefreshFailed": "设置已更新,但状态刷新失败;请重新打开此页面。",
|
|
2698
2715
|
"config.strategyTitle": "主策略",
|
|
2699
2716
|
"config.strategyFailed": "无法切换主策略,已保留原设置,请重试。",
|
|
@@ -3156,6 +3173,9 @@ window.__ModuleLoader__.load({
|
|
|
3156
3173
|
"common.showMore": "Show {count} more",
|
|
3157
3174
|
"header.backToConversation": "Back to chat",
|
|
3158
3175
|
"header.configure": "Configure",
|
|
3176
|
+
"header.noticeSummary": "Notices {count} · {labels}",
|
|
3177
|
+
"header.noticeRemoteReadOnly": "Remote read only",
|
|
3178
|
+
"header.noticeIdleReview": "Idle review",
|
|
3159
3179
|
"header.compositionHint": "Select to change the composition in the configuration.",
|
|
3160
3180
|
"header.checking": "Checking",
|
|
3161
3181
|
"header.connected": "Connected",
|
|
@@ -3274,6 +3294,13 @@ window.__ModuleLoader__.load({
|
|
|
3274
3294
|
"status.reviewFailedDetail": "This checkpoint did not complete and will not be replayed automatically. Later reviews respect the cooldown and session limit.",
|
|
3275
3295
|
"status.reviewPartial": "Some writes committed. Reconcile the receipts below; they were not rolled back.",
|
|
3276
3296
|
"status.reviewTeamPaused": "Idle review is paused by the Agent Teams compatibility setting. To keep reviewing, select “Scoped task Agent review” under Idle review on the dsh-mnemon page under Plugins. Recall and writeback settings are unchanged.",
|
|
3297
|
+
"status.reviewToolAccessPaused": "The completion tool required by automatic review is currently unavailable. This checkpoint was skipped without consuming an attempt. Access will be checked again after a later eligible conversation turn. Check this session’s tool restrictions or approval settings.",
|
|
3298
|
+
"status.reviewWatermarkUsage": "Session review attempts: {attempts} / {max} ({restored} restored).",
|
|
3299
|
+
"status.reviewWatermarkNext": "Next review no earlier than {time}; a new eligible conversation checkpoint is still required.",
|
|
3300
|
+
"status.reviewWatermarkPaused": "Automatic review paused: persistent limits are unavailable.",
|
|
3301
|
+
"status.reviewWatermarkRecovery": "Stop Hosts using this storage root, inspect this session’s state or lock under state/idle-review, then reopen the session. Deleting state resets the limit; normal conversation and manual actions remain available.",
|
|
3302
|
+
"config.reviewPersistWatermark": "Keep review limits after reopening",
|
|
3303
|
+
"config.reviewPersistWatermarkHint": "Off by default; retain attempts and cooldown per storage root and parent session, including failed or cancelled attempts",
|
|
3277
3304
|
"status.reviewRun": "Review run: {id}",
|
|
3278
3305
|
"status.reviewContextWindow": "Choose bounded checkpoint review (spawn), or a task Agent model whose context window covers the parent conversation.",
|
|
3279
3306
|
"config.reviewTitle": "Idle review",
|
|
@@ -3488,6 +3515,12 @@ window.__ModuleLoader__.load({
|
|
|
3488
3515
|
"config.runtimeUserScopeStorageHint": "Kept with MEMORY.md",
|
|
3489
3516
|
"config.runtimeUserScopeGlobal": "Shared globally",
|
|
3490
3517
|
"config.runtimeUserScopeGlobalHint": "Shared by every workspace; MEMORY.md still follows the storage scope",
|
|
3518
|
+
"config.runtimeLimitsTitle": "Capacity limits",
|
|
3519
|
+
"config.runtimeLimitsHint": "Defaults: {user} KiB for the user profile and {memory} KiB for working memory. 1 KiB = 1024 bytes.",
|
|
3520
|
+
"config.runtime.userLimitBytes": "User profile limit (bytes)",
|
|
3521
|
+
"config.runtime.memoryLimitBytes": "Working memory limit (bytes)",
|
|
3522
|
+
"config.runtimeLimitsApply": "Applies live; lowering a limit does not delete existing entries",
|
|
3523
|
+
"config.runtimeLimitInvalid": "Set {field} to a whole number from 1 to {max}.",
|
|
3491
3524
|
"config.enhancementsRefreshFailed": "The setting was updated, but its status could not be refreshed. Reopen this page.",
|
|
3492
3525
|
"config.strategyTitle": "Main strategy",
|
|
3493
3526
|
"config.strategyFailed": "Could not switch the main strategy. The previous choice is kept; try again.",
|
|
@@ -3956,7 +3989,7 @@ window.__ModuleLoader__.load({
|
|
|
3956
3989
|
const IconChevronLeftOutline14 = _deepseek_ai_dsh_client_ui_primitives.IconChevronLeftOutlineRegular;
|
|
3957
3990
|
//#endregion
|
|
3958
3991
|
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonView.module.css.mjs
|
|
3959
|
-
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}: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_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}";
|
|
3992
|
+
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}}";
|
|
3960
3993
|
const tagId$13 = "dsh-mnemon/src/client/MnemonView.module.css";
|
|
3961
3994
|
if (typeof document !== "undefined") {
|
|
3962
3995
|
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$13) + "]");
|
|
@@ -4009,6 +4042,7 @@ window.__ModuleLoader__.load({
|
|
|
4009
4042
|
"mnemon-metadata-sweep": "IIa07q_mnemon-metadata-sweep",
|
|
4010
4043
|
"mnemon-sheet-enter": "IIa07q_mnemon-sheet-enter",
|
|
4011
4044
|
"mnemon-spin": "IIa07q_mnemon-spin",
|
|
4045
|
+
"mnemon-workbench": "IIa07q_mnemon-workbench",
|
|
4012
4046
|
"modal": "IIa07q_modal",
|
|
4013
4047
|
"modalBackdrop": "IIa07q_modalBackdrop",
|
|
4014
4048
|
"modalBody": "IIa07q_modalBody",
|
|
@@ -4021,6 +4055,9 @@ window.__ModuleLoader__.load({
|
|
|
4021
4055
|
"modalWide": "IIa07q_modalWide",
|
|
4022
4056
|
"nav": "IIa07q_nav",
|
|
4023
4057
|
"notice": "IIa07q_notice",
|
|
4058
|
+
"noticeContents": "IIa07q_noticeContents",
|
|
4059
|
+
"noticeGroup": "IIa07q_noticeGroup",
|
|
4060
|
+
"noticeToggle": "IIa07q_noticeToggle",
|
|
4024
4061
|
"offline": "IIa07q_offline",
|
|
4025
4062
|
"online": "IIa07q_online",
|
|
4026
4063
|
"page": "IIa07q_page",
|
|
@@ -10185,6 +10222,19 @@ window.__ModuleLoader__.load({
|
|
|
10185
10222
|
};
|
|
10186
10223
|
}
|
|
10187
10224
|
//#endregion
|
|
10225
|
+
//#region plugins/dsh-mnemon-source-runtime/src/defaults.ts
|
|
10226
|
+
const DEFAULT_RUNTIME_MEMORY_LIMIT_BYTES = 10240;
|
|
10227
|
+
const DEFAULT_RUNTIME_USER_LIMIT_BYTES = 4096;
|
|
10228
|
+
const MAX_RUNTIME_MEMORY_LIMIT_BYTES = 1048576;
|
|
10229
|
+
//#endregion
|
|
10230
|
+
//#region plugins/dsh-mnemon-source-runtime/src/contracts.ts
|
|
10231
|
+
const RUNTIME_MEMORY_LIMITS = {
|
|
10232
|
+
memory: DEFAULT_RUNTIME_MEMORY_LIMIT_BYTES,
|
|
10233
|
+
user: DEFAULT_RUNTIME_USER_LIMIT_BYTES
|
|
10234
|
+
};
|
|
10235
|
+
/** The largest limit, in UTF-8 bytes, either target's file may be given. */
|
|
10236
|
+
const RUNTIME_MEMORY_LIMIT_MAX_BYTES = MAX_RUNTIME_MEMORY_LIMIT_BYTES;
|
|
10237
|
+
//#endregion
|
|
10188
10238
|
//#region src/client/source-pages.tsx
|
|
10189
10239
|
const MNEMON_SOURCE_PAGE_SLOT = "mnemon.source.page";
|
|
10190
10240
|
/** Conventional operations used by Mnemon's descriptor-driven Source page. */
|
|
@@ -10293,7 +10343,7 @@ window.__ModuleLoader__.load({
|
|
|
10293
10343
|
}
|
|
10294
10344
|
//#endregion
|
|
10295
10345
|
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/PageControls.module.css.mjs
|
|
10296
|
-
const css$5 = ".Zl-6yW_search{min-width:0}.Zl-6yW_field{gap:6px;min-width:0;display:inline-grid}.Zl-6yW_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:500;line-height:18px}.Zl-6yW_hiddenLabel{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.Zl-6yW_selector{appearance:none;border-radius:var(--dsw-radius-md);min-width:0;max-width:100%;height:36px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform);font:inherit;white-space:nowrap;cursor:pointer;border:0;justify-content:space-between;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.Zl-6yW_selector>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.Zl-6yW_selector>svg{color:var(--dsw-alias-label-tertiary);flex:none}.Zl-6yW_selector:hover:not(:disabled),.Zl-6yW_selector[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover)}.Zl-6yW_selector:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.Zl-6yW_selector:disabled{cursor:default;opacity:.4}.Zl-6yW_menuRoot{min-width:0;display:block}.Zl-6yW_field:not([data-inline]) .Zl-6yW_selector{width:100%}.Zl-6yW_field[data-inline]{align-items:center;gap:8px;display:inline-flex}.Zl-6yW_field[data-inline] .Zl-6yW_menuRoot{display:inline-block}.Zl-6yW_field[data-inline]>.Zl-6yW_fieldLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-weight:400}.Zl-6yW_field[data-size=sm] .Zl-6yW_selector{border-radius:var(--dsw-radius-sm);gap:8px;height:28px;padding:0 10px;font-size:12px;line-height:18px}.Zl-6yW_menu{min-width:200px}.Zl-6yW_option{white-space:normal;gap:1px;min-width:0;display:grid}.Zl-6yW_option>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}.Zl-6yW_receipt{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);flex-wrap:wrap;align-items:flex-start;gap:8px 10px;min-width:0;margin-top:12px;padding:10px 12px;display:flex}.Zl-6yW_receipt>p{min-width:0;color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;flex:240px;margin:0;font-size:13px;line-height:20px}.Zl-6yW_receipt>:first-child{flex:none;margin-top:1px}.Zl-6yW_receiptAction{flex:none;margin-left:auto}.Zl-6yW_receipt>.Zl-6yW_receiptNote{color:var(--dsw-alias-label-tertiary);flex-basis:100%;font-size:12px;line-height:18px}.Zl-6yW_receipt>.Zl-6yW_receiptNote[data-tone=caution]{color:var(--dsw-alias-state-warn-label,var(--dsw-alias-label-secondary))}";
|
|
10346
|
+
const css$5 = ".Zl-6yW_search{min-width:0}.Zl-6yW_field{gap:6px;min-width:0;display:inline-grid}.Zl-6yW_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:500;line-height:18px}.Zl-6yW_hiddenLabel{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.Zl-6yW_selector{appearance:none;border-radius:var(--dsw-radius-md);min-width:0;max-width:100%;height:36px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform);font:inherit;white-space:nowrap;cursor:pointer;border:0;justify-content:space-between;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.Zl-6yW_selector>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.Zl-6yW_selector>svg{color:var(--dsw-alias-label-tertiary);flex:none}.Zl-6yW_selector:hover:not(:disabled),.Zl-6yW_selector[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover)}.Zl-6yW_selector:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.Zl-6yW_selector:disabled{cursor:default;opacity:.4}.Zl-6yW_menuRoot{min-width:0;display:block}.Zl-6yW_field:not([data-inline]) .Zl-6yW_selector{width:100%}.Zl-6yW_field[data-inline]{align-items:center;gap:8px;display:inline-flex}.Zl-6yW_field[data-inline] .Zl-6yW_menuRoot{display:inline-block}.Zl-6yW_field[data-inline]>.Zl-6yW_fieldLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-weight:400}.Zl-6yW_field[data-size=sm] .Zl-6yW_selector{border-radius:var(--dsw-radius-sm);gap:8px;height:28px;padding:0 10px;font-size:12px;line-height:18px}.Zl-6yW_menu{min-width:200px;max-height:var(--dsh-select-menu-max,calc(100vh - 220px))!important}.Zl-6yW_option{white-space:normal;gap:1px;min-width:0;display:grid}.Zl-6yW_option>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}.Zl-6yW_field .Zl-6yW_selector[data-trigger-detail]{white-space:normal;height:auto;min-height:28px;padding:3px 10px}.Zl-6yW_field .Zl-6yW_selector[data-trigger-detail]>span{text-align:left;white-space:normal;gap:1px;min-width:0;display:grid}.Zl-6yW_field .Zl-6yW_selector[data-trigger-detail]>span>span{text-overflow:ellipsis;overflow:hidden}.Zl-6yW_field .Zl-6yW_selector[data-trigger-detail]>span>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}.Zl-6yW_receipt{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);flex-wrap:wrap;align-items:flex-start;gap:8px 10px;min-width:0;margin-top:12px;padding:10px 12px;display:flex}.Zl-6yW_receipt>p{min-width:0;color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;flex:240px;margin:0;font-size:13px;line-height:20px}.Zl-6yW_receipt>:first-child{flex:none;margin-top:1px}.Zl-6yW_receiptAction{flex:none;margin-left:auto}.Zl-6yW_receipt>.Zl-6yW_receiptNote{color:var(--dsw-alias-label-tertiary);flex-basis:100%;font-size:12px;line-height:18px}.Zl-6yW_receipt>.Zl-6yW_receiptNote[data-tone=caution]{color:var(--dsw-alias-state-warn-label,var(--dsw-alias-label-secondary))}";
|
|
10297
10347
|
const tagId$4 = "dsh-mnemon/src/client/PageControls.module.css";
|
|
10298
10348
|
if (typeof document !== "undefined") {
|
|
10299
10349
|
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]");
|
|
@@ -10336,10 +10386,17 @@ window.__ModuleLoader__.load({
|
|
|
10336
10386
|
/** A labelled choice: the DSH selector, opening a menu of the options. */
|
|
10337
10387
|
function SelectField(props) {
|
|
10338
10388
|
const [open, setOpen] = (0, react.useState)(false);
|
|
10389
|
+
/**
|
|
10390
|
+
* Which way the menu opens. A menu taller than the room below its anchor is
|
|
10391
|
+
* pushed up by the portal until it covers the button, so the selector decides
|
|
10392
|
+
* the side itself once it knows how much room is left and how much is above.
|
|
10393
|
+
*/
|
|
10394
|
+
const [side, setSide] = (0, react.useState)("bottom");
|
|
10339
10395
|
const labelId = (0, react.useId)();
|
|
10340
10396
|
const nameId = (0, react.useId)();
|
|
10341
10397
|
const valueId = (0, react.useId)();
|
|
10342
10398
|
const current = props.options.find((option) => option.value === props.value);
|
|
10399
|
+
const detail = props.triggerDetail === true && current?.detail !== void 0;
|
|
10343
10400
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
10344
10401
|
className: [PageControls_module_css_default.field, props.className].filter(Boolean).join(" "),
|
|
10345
10402
|
"data-inline": props.inline === true ? "" : void 0,
|
|
@@ -10361,6 +10418,7 @@ window.__ModuleLoader__.load({
|
|
|
10361
10418
|
open,
|
|
10362
10419
|
onClose: () => setOpen(false),
|
|
10363
10420
|
align: "start",
|
|
10421
|
+
side,
|
|
10364
10422
|
portal: true,
|
|
10365
10423
|
selectedId: props.value,
|
|
10366
10424
|
className: PageControls_module_css_default.menuRoot,
|
|
@@ -10380,12 +10438,25 @@ window.__ModuleLoader__.load({
|
|
|
10380
10438
|
anchor: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
10381
10439
|
type: "button",
|
|
10382
10440
|
className: PageControls_module_css_default.selector,
|
|
10441
|
+
"data-trigger-detail": detail ? "" : void 0,
|
|
10383
10442
|
"aria-haspopup": "menu",
|
|
10384
10443
|
"aria-expanded": open,
|
|
10385
10444
|
"aria-labelledby": `${props.ariaLabel === void 0 ? labelId : nameId} ${valueId}`,
|
|
10386
10445
|
disabled: props.disabled === true,
|
|
10387
|
-
onClick: () =>
|
|
10388
|
-
|
|
10446
|
+
onClick: (event) => {
|
|
10447
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
10448
|
+
const below = Math.floor(window.innerHeight - rect.bottom - 4 - 12);
|
|
10449
|
+
const above = Math.floor(rect.top - 4 - 12);
|
|
10450
|
+
const flip = below < 220 && above > below;
|
|
10451
|
+
document.documentElement.style.setProperty("--dsh-select-menu-max", `${Math.max(160, flip ? above : below)}px`);
|
|
10452
|
+
setSide(flip ? "top" : "bottom");
|
|
10453
|
+
setOpen((value) => !value);
|
|
10454
|
+
},
|
|
10455
|
+
children: [detail ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
10456
|
+
id: valueId,
|
|
10457
|
+
className: PageControls_module_css_default.option,
|
|
10458
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: current.label }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: current.detail })]
|
|
10459
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
10389
10460
|
id: valueId,
|
|
10390
10461
|
children: current?.label ?? props.value
|
|
10391
10462
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 12 })]
|
|
@@ -10500,13 +10571,13 @@ window.__ModuleLoader__.load({
|
|
|
10500
10571
|
let revision = management.revision;
|
|
10501
10572
|
let sequence = 0;
|
|
10502
10573
|
let accepted = 0;
|
|
10503
|
-
async function request(mode, operation, input, confirmed = true) {
|
|
10574
|
+
async function request(mode, operation, input, confirmed = true, options) {
|
|
10504
10575
|
const ticket = ++sequence;
|
|
10505
10576
|
if (mode === "assist" && !management.assistance?.operations.includes(operation)) throw new Error("Host assistance is unavailable for this Source instance: " + operation);
|
|
10506
10577
|
const result = mode === "assist" ? await management.assistance.execute(operation, input, {
|
|
10507
10578
|
expectedRevision: revision,
|
|
10508
10579
|
confirmed
|
|
10509
|
-
}) : mode === "read" ? await management.read(operation, input) : await management.mutate(operation, input, {
|
|
10580
|
+
}) : mode === "read" ? await (options === void 0 ? management.read(operation, input) : management.read(operation, input, options)) : await management.mutate(operation, input, {
|
|
10510
10581
|
confirmed: true,
|
|
10511
10582
|
expectedRevision: revision
|
|
10512
10583
|
});
|
|
@@ -10519,7 +10590,7 @@ window.__ModuleLoader__.load({
|
|
|
10519
10590
|
return {
|
|
10520
10591
|
canAssist: (operation) => management.assistance?.operations.includes(operation) === true,
|
|
10521
10592
|
assist: (operation, input, confirmed) => request("assist", operation, input, confirmed),
|
|
10522
|
-
read: (operation, input = null) => request("read", operation, input),
|
|
10593
|
+
read: (operation, input = null, options) => request("read", operation, input, true, options),
|
|
10523
10594
|
mutate: (operation, input, confirmed) => {
|
|
10524
10595
|
if (confirmed !== true) return Promise.reject(/* @__PURE__ */ new Error("Source page mutation requires explicit confirmation"));
|
|
10525
10596
|
return request("mutate", operation, input);
|
|
@@ -11672,7 +11743,7 @@ window.__ModuleLoader__.load({
|
|
|
11672
11743
|
})]
|
|
11673
11744
|
});
|
|
11674
11745
|
}
|
|
11675
|
-
/**
|
|
11746
|
+
/** Selected-model usability and stored-vector coverage; the protocol appears only when the Host reports one. */
|
|
11676
11747
|
function embeddingStatusText(t, status) {
|
|
11677
11748
|
const coverage = {
|
|
11678
11749
|
embedded: status.embedded,
|
|
@@ -12399,7 +12470,7 @@ window.__ModuleLoader__.load({
|
|
|
12399
12470
|
/**
|
|
12400
12471
|
* Register the settings dsh-mnemon keeps for its shipped components, the way
|
|
12401
12472
|
* an installed component registers its own: Runtime Memory carries where its
|
|
12402
|
-
* user profile lives, the Layered strategy the background tasks it drives.
|
|
12473
|
+
* user profile lives and its capacities, the Layered strategy the background tasks it drives.
|
|
12403
12474
|
* Memory Spaces brings its Providers and embedding itself. Its settings show
|
|
12404
12475
|
* here, as a fallback, whenever its own client registers none: while it is
|
|
12405
12476
|
* off, while its client loads, if that client fails, and beside a Memory
|
|
@@ -12442,7 +12513,13 @@ window.__ModuleLoader__.load({
|
|
|
12442
12513
|
for (const dispose of disposers.reverse()) dispose();
|
|
12443
12514
|
};
|
|
12444
12515
|
}
|
|
12445
|
-
|
|
12516
|
+
const RUNTIME_LIMITS = ["userLimitBytes", "memoryLimitBytes"];
|
|
12517
|
+
function runtimeLimitValue(text) {
|
|
12518
|
+
if (text.trim() === "") return void 0;
|
|
12519
|
+
const value = Number(text);
|
|
12520
|
+
return Number.isInteger(value) && value >= 1 && value <= RUNTIME_MEMORY_LIMIT_MAX_BYTES ? value : void 0;
|
|
12521
|
+
}
|
|
12522
|
+
/** Runtime Memory's scope applies immediately; its byte limits wait for Apply. */
|
|
12446
12523
|
function RuntimeSettings(props) {
|
|
12447
12524
|
const { scope, page, t } = props;
|
|
12448
12525
|
const snapshot = useScope(scope);
|
|
@@ -12454,7 +12531,24 @@ window.__ModuleLoader__.load({
|
|
|
12454
12531
|
}]);
|
|
12455
12532
|
});
|
|
12456
12533
|
const disabled = !page.writable || snapshot.status === "loading" || !snapshot.writable;
|
|
12457
|
-
|
|
12534
|
+
const configured = snapshot.value?.runtimeMemory;
|
|
12535
|
+
const savedLimits = {
|
|
12536
|
+
userLimitBytes: String(configured?.userLimitBytes ?? RUNTIME_MEMORY_LIMITS.user),
|
|
12537
|
+
memoryLimitBytes: String(configured?.memoryLimitBytes ?? RUNTIME_MEMORY_LIMITS.memory)
|
|
12538
|
+
};
|
|
12539
|
+
const limits = useStaged(savedLimits, async (draft) => {
|
|
12540
|
+
const changed = RUNTIME_LIMITS.filter((key) => runtimeLimitValue(draft[key]) !== runtimeLimitValue(savedLimits[key]));
|
|
12541
|
+
if (changed.length > 0) await scope.mutate([{
|
|
12542
|
+
op: "set",
|
|
12543
|
+
path: ["runtimeMemory"],
|
|
12544
|
+
value: {
|
|
12545
|
+
...configured,
|
|
12546
|
+
...Object.fromEntries(changed.map((key) => [key, runtimeLimitValue(draft[key])]))
|
|
12547
|
+
}
|
|
12548
|
+
}]);
|
|
12549
|
+
});
|
|
12550
|
+
const invalid = RUNTIME_LIMITS.find((key) => runtimeLimitValue(limits.draft[key]) === void 0);
|
|
12551
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
12458
12552
|
className: MnemonSettingsCard_module_css_default.panelSection,
|
|
12459
12553
|
"aria-label": t("config.runtimeUserScopeTitle"),
|
|
12460
12554
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
@@ -12479,7 +12573,57 @@ window.__ModuleLoader__.load({
|
|
|
12479
12573
|
error: profile.failed,
|
|
12480
12574
|
t
|
|
12481
12575
|
})]
|
|
12482
|
-
})
|
|
12576
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
12577
|
+
className: MnemonSettingsCard_module_css_default.panelSection,
|
|
12578
|
+
"aria-labelledby": "mnemon-runtime-limits",
|
|
12579
|
+
children: [
|
|
12580
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
12581
|
+
className: MnemonSettingsCard_module_css_default.panelHeading,
|
|
12582
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
|
|
12583
|
+
id: "mnemon-runtime-limits",
|
|
12584
|
+
children: t("config.runtimeLimitsTitle")
|
|
12585
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
12586
|
+
id: "mnemon-runtime-limits-hint",
|
|
12587
|
+
children: t("config.runtimeLimitsHint", {
|
|
12588
|
+
user: RUNTIME_MEMORY_LIMITS.user / 1024,
|
|
12589
|
+
memory: RUNTIME_MEMORY_LIMITS.memory / 1024
|
|
12590
|
+
})
|
|
12591
|
+
})]
|
|
12592
|
+
}),
|
|
12593
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
12594
|
+
className: MnemonSettingsCard_module_css_default.fieldGrid,
|
|
12595
|
+
children: RUNTIME_LIMITS.map((key) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t(`config.runtime.${key}`), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
12596
|
+
type: "number",
|
|
12597
|
+
min: "1",
|
|
12598
|
+
max: RUNTIME_MEMORY_LIMIT_MAX_BYTES,
|
|
12599
|
+
step: "1",
|
|
12600
|
+
inputMode: "numeric",
|
|
12601
|
+
value: limits.draft[key],
|
|
12602
|
+
disabled: disabled || limits.saving,
|
|
12603
|
+
"aria-describedby": "mnemon-runtime-limits-hint",
|
|
12604
|
+
"aria-invalid": runtimeLimitValue(limits.draft[key]) === void 0,
|
|
12605
|
+
onChange: (event) => limits.edit({ [key]: event.target.value })
|
|
12606
|
+
})] }, key))
|
|
12607
|
+
}),
|
|
12608
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PanelActions, {
|
|
12609
|
+
dirty: limits.dirty,
|
|
12610
|
+
saving: limits.saving,
|
|
12611
|
+
applied: limits.applied,
|
|
12612
|
+
failed: limits.failed,
|
|
12613
|
+
disabled,
|
|
12614
|
+
t,
|
|
12615
|
+
note: t("config.runtimeLimitsApply"),
|
|
12616
|
+
invalid: invalid === void 0 ? null : t("config.runtimeLimitInvalid", {
|
|
12617
|
+
field: t(`config.runtime.${invalid}`),
|
|
12618
|
+
max: RUNTIME_MEMORY_LIMIT_MAX_BYTES
|
|
12619
|
+
}),
|
|
12620
|
+
onDiscard: limits.discard,
|
|
12621
|
+
onApply: () => {
|
|
12622
|
+
limits.apply();
|
|
12623
|
+
}
|
|
12624
|
+
})
|
|
12625
|
+
]
|
|
12626
|
+
})] });
|
|
12483
12627
|
}
|
|
12484
12628
|
/** Each limit as the page shows it: the interval in seconds, the others as stored. */
|
|
12485
12629
|
const LIMITS = [
|
|
@@ -12517,6 +12661,7 @@ window.__ModuleLoader__.load({
|
|
|
12517
12661
|
const choiceOf = (review) => ({
|
|
12518
12662
|
enabled: review.enabled,
|
|
12519
12663
|
runtimeMemory: review.runtimeMemory,
|
|
12664
|
+
persistWatermark: review.persistWatermark,
|
|
12520
12665
|
provider: review.provider,
|
|
12521
12666
|
fallback: review.fallback,
|
|
12522
12667
|
agentTeams: review.agentTeams
|
|
@@ -12638,6 +12783,14 @@ window.__ModuleLoader__.load({
|
|
|
12638
12783
|
disabled: props.disabled,
|
|
12639
12784
|
onChange: (enabled) => props.onChoice({ enabled })
|
|
12640
12785
|
}), choice.enabled && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
12786
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleRow, {
|
|
12787
|
+
id: "mnemon-review-persist-watermark",
|
|
12788
|
+
label: t("config.reviewPersistWatermark"),
|
|
12789
|
+
hint: t("config.reviewPersistWatermarkHint"),
|
|
12790
|
+
checked: choice.persistWatermark,
|
|
12791
|
+
disabled: props.disabled,
|
|
12792
|
+
onChange: (persistWatermark) => props.onChoice({ persistWatermark })
|
|
12793
|
+
}),
|
|
12641
12794
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleRow, {
|
|
12642
12795
|
id: "mnemon-review-runtime-memory",
|
|
12643
12796
|
label: t("config.reviewRuntimeMemory"),
|
|
@@ -13127,6 +13280,51 @@ window.__ModuleLoader__.load({
|
|
|
13127
13280
|
});
|
|
13128
13281
|
});
|
|
13129
13282
|
//#endregion
|
|
13283
|
+
//#region src/client/document-visibility.ts
|
|
13284
|
+
const visible = () => typeof document === "undefined" || document.visibilityState !== "hidden";
|
|
13285
|
+
const subscribe = (listener) => {
|
|
13286
|
+
document.addEventListener("visibilitychange", listener);
|
|
13287
|
+
return () => {
|
|
13288
|
+
document.removeEventListener("visibilitychange", listener);
|
|
13289
|
+
};
|
|
13290
|
+
};
|
|
13291
|
+
/** A selected panel in a background browser tab is still an inactive reader. */
|
|
13292
|
+
function useDocumentVisible() {
|
|
13293
|
+
return (0, react.useSyncExternalStore)(subscribe, visible, () => true);
|
|
13294
|
+
}
|
|
13295
|
+
//#endregion
|
|
13296
|
+
//#region src/client/change-signal.ts
|
|
13297
|
+
/**
|
|
13298
|
+
* A revision other surfaces bump when something they cannot observe directly
|
|
13299
|
+
* changed, such as a component switched on DSH's Plugins page. Readers reload
|
|
13300
|
+
* their own data when the revision moves.
|
|
13301
|
+
*/
|
|
13302
|
+
var MnemonChangeSignal = class {
|
|
13303
|
+
settleMs;
|
|
13304
|
+
revision = 0;
|
|
13305
|
+
pending;
|
|
13306
|
+
listeners = /* @__PURE__ */ new Set();
|
|
13307
|
+
constructor(settleMs = 100) {
|
|
13308
|
+
this.settleMs = settleMs;
|
|
13309
|
+
}
|
|
13310
|
+
getSnapshot = () => this.revision;
|
|
13311
|
+
subscribe = (listener) => {
|
|
13312
|
+
this.listeners.add(listener);
|
|
13313
|
+
return () => {
|
|
13314
|
+
this.listeners.delete(listener);
|
|
13315
|
+
};
|
|
13316
|
+
};
|
|
13317
|
+
/** A burst of announcements, such as one per component a write switched, moves the revision once. */
|
|
13318
|
+
bump = () => {
|
|
13319
|
+
if (this.pending !== void 0) return;
|
|
13320
|
+
this.pending = setTimeout(() => {
|
|
13321
|
+
this.pending = void 0;
|
|
13322
|
+
this.revision += 1;
|
|
13323
|
+
for (const listener of [...this.listeners]) listener();
|
|
13324
|
+
}, this.settleMs);
|
|
13325
|
+
};
|
|
13326
|
+
};
|
|
13327
|
+
//#endregion
|
|
13130
13328
|
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/SkillTurnTail.module.css.mjs
|
|
13131
13329
|
const css$2 = ".ebWjsW_root{min-width:0;max-width:100%;height:24px;color:var(--dsw-alias-label-tertiary);align-items:center;gap:6px;margin:2px 0;padding:0 6px;font-size:12px;line-height:18px;display:flex}.ebWjsW_mark{flex:none;display:inline-flex}.ebWjsW_label{flex:none;font-weight:500}.ebWjsW_items{align-items:center;gap:4px;min-width:0;display:inline-flex;overflow:hidden}.ebWjsW_item{border-radius:var(--dsw-radius-sm);cursor:pointer;min-width:0;max-width:220px;color:var(--dsw-alias-label-secondary);font:inherit;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;padding:0 6px;font-size:12px;line-height:20px;overflow:hidden}.ebWjsW_item:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.ebWjsW_item:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:1px}.ebWjsW_item[data-tone=accent]{color:var(--dsw-alias-state-business-primary)}.ebWjsW_state{white-space:nowrap;flex:none;padding:0 6px}.ebWjsW_state[data-tone=error]{color:var(--dsw-alias-label-tertiary)}";
|
|
13132
13330
|
const tagId$2 = "dsh-mnemon/src/client/SkillTurnTail.module.css";
|
|
@@ -13155,6 +13353,7 @@ window.__ModuleLoader__.load({
|
|
|
13155
13353
|
const POLL_MS = 3e3;
|
|
13156
13354
|
/** After a turn ends, the bar looks a few more times for the review it may have earned. */
|
|
13157
13355
|
const SETTLE_CHECKS = 2;
|
|
13356
|
+
const NO_CHANGES = new MnemonChangeSignal();
|
|
13158
13357
|
/** One snapshot per conversation, shared by every bar under its turns. */
|
|
13159
13358
|
const entries = /* @__PURE__ */ new WeakMap();
|
|
13160
13359
|
function entryOf(connection, sessionId) {
|
|
@@ -13167,6 +13366,10 @@ window.__ModuleLoader__.load({
|
|
|
13167
13366
|
if (entry === void 0) {
|
|
13168
13367
|
entry = {
|
|
13169
13368
|
settle: 0,
|
|
13369
|
+
checkedCursor: -1,
|
|
13370
|
+
requestedCursor: -1,
|
|
13371
|
+
revision: 0,
|
|
13372
|
+
componentRevision: 0,
|
|
13170
13373
|
listeners: /* @__PURE__ */ new Set()
|
|
13171
13374
|
};
|
|
13172
13375
|
sessions.set(sessionId, entry);
|
|
@@ -13176,52 +13379,98 @@ window.__ModuleLoader__.load({
|
|
|
13176
13379
|
function waiting(snapshot) {
|
|
13177
13380
|
return snapshot?.reviews.some((review) => review.state === "scheduled" || review.state === "reviewing") === true;
|
|
13178
13381
|
}
|
|
13179
|
-
function
|
|
13180
|
-
|
|
13181
|
-
|
|
13182
|
-
|
|
13183
|
-
|
|
13382
|
+
function cancelScheduled(entry) {
|
|
13383
|
+
entry.cancelScheduled?.();
|
|
13384
|
+
delete entry.cancelScheduled;
|
|
13385
|
+
}
|
|
13386
|
+
function invalidate(entry) {
|
|
13387
|
+
entry.revision += 1;
|
|
13388
|
+
entry.checkedCursor = -1;
|
|
13389
|
+
entry.settle = SETTLE_CHECKS;
|
|
13390
|
+
cancelScheduled(entry);
|
|
13391
|
+
}
|
|
13392
|
+
/** Skills writes may add or remove suggestions without changing the conversation's event cursor. */
|
|
13393
|
+
function invalidateSkillActivity(connection) {
|
|
13394
|
+
for (const [sessionId, entry] of entries.get(connection) ?? []) {
|
|
13395
|
+
invalidate(entry);
|
|
13396
|
+
schedule(connection, sessionId, entry, 0, true);
|
|
13184
13397
|
}
|
|
13398
|
+
}
|
|
13399
|
+
/** History renders before an optional skills scan; all its tails share this job. */
|
|
13400
|
+
function schedule(connection, sessionId, entry, delay = 0, idle = false) {
|
|
13401
|
+
if (entry.loading !== void 0 || entry.cancelScheduled !== void 0 || entry.listeners.size === 0) return;
|
|
13402
|
+
const run = () => {
|
|
13403
|
+
delete entry.cancelScheduled;
|
|
13404
|
+
load(connection, sessionId, entry);
|
|
13405
|
+
};
|
|
13406
|
+
if (idle && typeof requestIdleCallback === "function") {
|
|
13407
|
+
const id = requestIdleCallback(run, { timeout: 1e3 });
|
|
13408
|
+
entry.cancelScheduled = () => cancelIdleCallback(id);
|
|
13409
|
+
} else {
|
|
13410
|
+
const timer = setTimeout(run, delay);
|
|
13411
|
+
entry.cancelScheduled = () => clearTimeout(timer);
|
|
13412
|
+
}
|
|
13413
|
+
}
|
|
13414
|
+
function load(connection, sessionId, entry) {
|
|
13415
|
+
if (entry.loading !== void 0 || entry.listeners.size === 0) return;
|
|
13416
|
+
const cursor = entry.requestedCursor;
|
|
13417
|
+
const revision = entry.revision;
|
|
13418
|
+
let succeeded = false;
|
|
13185
13419
|
entry.loading = new MnemonClient(connection, sessionId).skillActivity().then((snapshot) => {
|
|
13420
|
+
if (revision !== entry.revision) return;
|
|
13186
13421
|
entry.snapshot = snapshot;
|
|
13422
|
+
entry.checkedCursor = snapshot.available ? cursor : -1;
|
|
13423
|
+
succeeded = true;
|
|
13187
13424
|
}, () => void 0).finally(() => {
|
|
13188
13425
|
delete entry.loading;
|
|
13189
13426
|
for (const listener of [...entry.listeners]) listener();
|
|
13190
|
-
if (entry.
|
|
13191
|
-
if (waiting(entry.snapshot)) entry.
|
|
13427
|
+
if (revision !== entry.revision || succeeded && entry.requestedCursor > cursor) entry.nextReadAt = Date.now();
|
|
13428
|
+
else if (waiting(entry.snapshot)) entry.nextReadAt = Date.now() + POLL_MS;
|
|
13192
13429
|
else if (entry.settle > 0) {
|
|
13193
13430
|
entry.settle -= 1;
|
|
13194
|
-
entry.
|
|
13195
|
-
}
|
|
13431
|
+
entry.nextReadAt = Date.now() + POLL_MS;
|
|
13432
|
+
} else delete entry.nextReadAt;
|
|
13433
|
+
if (entry.nextReadAt !== void 0) schedule(connection, sessionId, entry, Math.max(0, entry.nextReadAt - Date.now()));
|
|
13196
13434
|
});
|
|
13197
13435
|
}
|
|
13198
13436
|
/** The conversation's skills activity, read again when a newer turn's bar appears. */
|
|
13199
|
-
function useSkillActivity(connection, sessionId,
|
|
13437
|
+
function useSkillActivity(connection, sessionId, cursor, revision) {
|
|
13438
|
+
const visible = useDocumentVisible();
|
|
13200
13439
|
const entry = sessionId === void 0 ? void 0 : entryOf(connection, sessionId);
|
|
13201
13440
|
const subscribe = (0, react.useCallback)((listener) => {
|
|
13202
|
-
if (entry === void 0) return () => {};
|
|
13441
|
+
if (entry === void 0 || !visible || cursor === void 0) return () => {};
|
|
13203
13442
|
entry.listeners.add(listener);
|
|
13204
13443
|
return () => {
|
|
13205
13444
|
entry.listeners.delete(listener);
|
|
13206
|
-
if (entry.listeners.size === 0
|
|
13207
|
-
clearTimeout(entry.timer);
|
|
13208
|
-
delete entry.timer;
|
|
13209
|
-
}
|
|
13445
|
+
if (entry.listeners.size === 0) cancelScheduled(entry);
|
|
13210
13446
|
};
|
|
13211
|
-
}, [
|
|
13447
|
+
}, [
|
|
13448
|
+
entry,
|
|
13449
|
+
visible,
|
|
13450
|
+
cursor
|
|
13451
|
+
]);
|
|
13212
13452
|
const getSnapshot = (0, react.useCallback)(() => entry?.snapshot, [entry]);
|
|
13213
13453
|
const snapshot = (0, react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
13214
13454
|
(0, react.useEffect)(() => {
|
|
13215
|
-
if (entry === void 0 || sessionId === void 0 ||
|
|
13216
|
-
|
|
13217
|
-
|
|
13218
|
-
|
|
13219
|
-
|
|
13455
|
+
if (entry === void 0 || sessionId === void 0 || cursor === void 0 || !visible) return;
|
|
13456
|
+
if (entry.componentRevision !== revision) {
|
|
13457
|
+
entry.componentRevision = revision;
|
|
13458
|
+
invalidate(entry);
|
|
13459
|
+
}
|
|
13460
|
+
if (cursor > entry.requestedCursor) {
|
|
13461
|
+
entry.requestedCursor = cursor;
|
|
13462
|
+
entry.settle = SETTLE_CHECKS;
|
|
13463
|
+
cancelScheduled(entry);
|
|
13464
|
+
}
|
|
13465
|
+
if (entry.snapshot === void 0 || cursor > entry.checkedCursor) schedule(connection, sessionId, entry, 0, true);
|
|
13466
|
+
else if (entry.nextReadAt !== void 0) schedule(connection, sessionId, entry, Math.max(0, entry.nextReadAt - Date.now()));
|
|
13220
13467
|
}, [
|
|
13221
13468
|
connection,
|
|
13222
13469
|
entry,
|
|
13223
13470
|
sessionId,
|
|
13224
|
-
|
|
13471
|
+
cursor,
|
|
13472
|
+
visible,
|
|
13473
|
+
revision
|
|
13225
13474
|
]);
|
|
13226
13475
|
return snapshot;
|
|
13227
13476
|
}
|
|
@@ -13237,13 +13486,14 @@ window.__ModuleLoader__.load({
|
|
|
13237
13486
|
* on the Skills page, and the review that followed it — waiting or running,
|
|
13238
13487
|
* then the suggestions it left. Hidden when the turn has nothing to say.
|
|
13239
13488
|
*/
|
|
13240
|
-
const SkillTurnTail = (0, react.memo)(function SkillTurnTail({ turn, sessionId, connection, localeRuntime, t }) {
|
|
13489
|
+
const SkillTurnTail = (0, react.memo)(function SkillTurnTail({ turn, seq, sessionId, connection, componentChanges = NO_CHANGES, localeRuntime, t }) {
|
|
13241
13490
|
const subscribeLocale = (0, react.useCallback)((listener) => localeRuntime.subscribe(listener), [localeRuntime]);
|
|
13242
13491
|
const getLocale = (0, react.useCallback)(() => localeRuntime.getSnapshot(), [localeRuntime]);
|
|
13243
13492
|
(0, react.useSyncExternalStore)(subscribeLocale, getLocale, getLocale);
|
|
13244
13493
|
const number = turnNumber(turn);
|
|
13245
13494
|
const closed = isClosedTurn(turn);
|
|
13246
|
-
const
|
|
13495
|
+
const revision = (0, react.useSyncExternalStore)(componentChanges.subscribe, componentChanges.getSnapshot, componentChanges.getSnapshot);
|
|
13496
|
+
const snapshot = useSkillActivity(connection, sessionId, closed && number !== void 0 ? seq : void 0, revision);
|
|
13247
13497
|
if (!closed || number === void 0 || snapshot?.available !== true) return null;
|
|
13248
13498
|
const used = snapshot.turns.find((entry) => entry.turn === number)?.skills ?? [];
|
|
13249
13499
|
const review = snapshot.reviews.find((entry) => entry.turn === number);
|
|
@@ -14225,7 +14475,7 @@ window.__ModuleLoader__.load({
|
|
|
14225
14475
|
* status while the summary still waits for a space or the CLI version. Another view context starts empty, and only
|
|
14226
14476
|
* the latest read answers.
|
|
14227
14477
|
*/
|
|
14228
|
-
function useWorkspaceStatus(client, viewContextKey) {
|
|
14478
|
+
function useWorkspaceStatus(client, viewContextKey, active = true) {
|
|
14229
14479
|
const [statusState, setStatusState] = (0, react.useState)(() => ({
|
|
14230
14480
|
contextKey: viewContextKey,
|
|
14231
14481
|
value: null,
|
|
@@ -14242,12 +14492,31 @@ window.__ModuleLoader__.load({
|
|
|
14242
14492
|
const statusLoading = currentStatusState.loading;
|
|
14243
14493
|
const statusError = currentStatusState.error;
|
|
14244
14494
|
const statusRequest = (0, react.useRef)(0);
|
|
14495
|
+
const current = (0, react.useRef)({
|
|
14496
|
+
client,
|
|
14497
|
+
viewContextKey,
|
|
14498
|
+
active
|
|
14499
|
+
});
|
|
14500
|
+
current.current = {
|
|
14501
|
+
client,
|
|
14502
|
+
viewContextKey,
|
|
14503
|
+
active
|
|
14504
|
+
};
|
|
14505
|
+
const mounted = (0, react.useRef)(true);
|
|
14506
|
+
(0, react.useEffect)(() => {
|
|
14507
|
+
mounted.current = true;
|
|
14508
|
+
return () => {
|
|
14509
|
+
mounted.current = false;
|
|
14510
|
+
};
|
|
14511
|
+
}, []);
|
|
14245
14512
|
return {
|
|
14246
14513
|
status,
|
|
14247
14514
|
statusLoading,
|
|
14248
14515
|
statusError,
|
|
14249
14516
|
loadStatus: (0, react.useCallback)(async () => {
|
|
14517
|
+
if (!mounted.current || !current.current.active || current.current.client !== client || current.current.viewContextKey !== viewContextKey) return;
|
|
14250
14518
|
const request = ++statusRequest.current;
|
|
14519
|
+
const isCurrent = () => request === statusRequest.current && mounted.current && current.current.active && current.current.client === client && current.current.viewContextKey === viewContextKey;
|
|
14251
14520
|
setStatusState((current) => ({
|
|
14252
14521
|
contextKey: viewContextKey,
|
|
14253
14522
|
value: current.contextKey === viewContextKey ? current.value : null,
|
|
@@ -14256,7 +14525,7 @@ window.__ModuleLoader__.load({
|
|
|
14256
14525
|
}));
|
|
14257
14526
|
try {
|
|
14258
14527
|
const summary = await client.statusSummary();
|
|
14259
|
-
if (
|
|
14528
|
+
if (!isCurrent()) return;
|
|
14260
14529
|
const needsDeepStatus = summary.memoryBodies?.some((body) => body.statusLoading === true) === true || summary.commandFound === true && summary.version === void 0;
|
|
14261
14530
|
setStatusState({
|
|
14262
14531
|
contextKey: viewContextKey,
|
|
@@ -14267,14 +14536,14 @@ window.__ModuleLoader__.load({
|
|
|
14267
14536
|
if (!needsDeepStatus) return;
|
|
14268
14537
|
try {
|
|
14269
14538
|
const next = await client.status();
|
|
14270
|
-
if (
|
|
14539
|
+
if (isCurrent()) setStatusState({
|
|
14271
14540
|
contextKey: viewContextKey,
|
|
14272
14541
|
value: next,
|
|
14273
14542
|
loading: false,
|
|
14274
14543
|
error: null
|
|
14275
14544
|
});
|
|
14276
14545
|
} catch (reason) {
|
|
14277
|
-
if (
|
|
14546
|
+
if (isCurrent()) setStatusState({
|
|
14278
14547
|
contextKey: viewContextKey,
|
|
14279
14548
|
value: summary,
|
|
14280
14549
|
loading: false,
|
|
@@ -14282,7 +14551,7 @@ window.__ModuleLoader__.load({
|
|
|
14282
14551
|
});
|
|
14283
14552
|
}
|
|
14284
14553
|
} catch (reason) {
|
|
14285
|
-
if (
|
|
14554
|
+
if (isCurrent()) setStatusState({
|
|
14286
14555
|
contextKey: viewContextKey,
|
|
14287
14556
|
value: null,
|
|
14288
14557
|
loading: false,
|
|
@@ -14294,23 +14563,60 @@ window.__ModuleLoader__.load({
|
|
|
14294
14563
|
}
|
|
14295
14564
|
//#endregion
|
|
14296
14565
|
//#region src/client/use-source-catalog.ts
|
|
14297
|
-
function bindSourceManagementClient(client, instance, taskClient) {
|
|
14566
|
+
function bindSourceManagementClient(client, instance, taskClient, assertCurrent, readEpoch, changed) {
|
|
14567
|
+
const pending = /* @__PURE__ */ new Map();
|
|
14568
|
+
const independent = async (run) => {
|
|
14569
|
+
assertCurrent();
|
|
14570
|
+
pending.clear();
|
|
14571
|
+
try {
|
|
14572
|
+
return await run();
|
|
14573
|
+
} finally {
|
|
14574
|
+
pending.clear();
|
|
14575
|
+
}
|
|
14576
|
+
};
|
|
14577
|
+
const write = async (run) => {
|
|
14578
|
+
const result = await independent(run);
|
|
14579
|
+
changed();
|
|
14580
|
+
return result;
|
|
14581
|
+
};
|
|
14298
14582
|
return {
|
|
14299
14583
|
sourceInstanceKey: instance.sourceInstanceKey,
|
|
14300
14584
|
revision: instance.revision,
|
|
14301
14585
|
...instance.assistance === void 0 || instance.assistance.length === 0 ? {} : { assistance: {
|
|
14302
14586
|
operations: instance.assistance,
|
|
14303
|
-
execute: (operation, input, options) => {
|
|
14304
|
-
|
|
14587
|
+
execute: async (operation, input, options) => {
|
|
14588
|
+
assertCurrent();
|
|
14589
|
+
const task = [
|
|
14305
14590
|
"agent-search",
|
|
14306
14591
|
"supervise",
|
|
14307
14592
|
"body-create",
|
|
14308
14593
|
"body-metadata-maintain"
|
|
14309
|
-
].includes(operation)
|
|
14594
|
+
].includes(operation);
|
|
14595
|
+
return write(() => (task ? taskClient : client).assistSource(instance.sourceInstanceKey, operation, input, options.expectedRevision, options.confirmed));
|
|
14310
14596
|
}
|
|
14311
14597
|
} },
|
|
14312
|
-
read: (operation, input = null) =>
|
|
14313
|
-
|
|
14598
|
+
read: async (operation, input = null, options) => {
|
|
14599
|
+
assertCurrent();
|
|
14600
|
+
if (options?.coalesce !== true) return independent(() => client.readSourceManagement(instance.sourceInstanceKey, operation, input));
|
|
14601
|
+
const key = JSON.stringify([
|
|
14602
|
+
readEpoch(),
|
|
14603
|
+
operation,
|
|
14604
|
+
input
|
|
14605
|
+
]);
|
|
14606
|
+
let request = pending.get(key);
|
|
14607
|
+
if (request === void 0) {
|
|
14608
|
+
request = client.readSourceManagement(instance.sourceInstanceKey, operation, input).finally(() => {
|
|
14609
|
+
if (pending.get(key) === request) pending.delete(key);
|
|
14610
|
+
});
|
|
14611
|
+
pending.set(key, request);
|
|
14612
|
+
}
|
|
14613
|
+
return structuredClone(await request);
|
|
14614
|
+
},
|
|
14615
|
+
mutate: (operation, input, options) => write(() => client.mutateSourceManagement(instance.sourceInstanceKey, operation, input, options.expectedRevision ?? instance.revision, options.confirmed)),
|
|
14616
|
+
models: async () => {
|
|
14617
|
+
assertCurrent();
|
|
14618
|
+
return taskClient.taskAgentModels(true);
|
|
14619
|
+
}
|
|
14314
14620
|
};
|
|
14315
14621
|
}
|
|
14316
14622
|
/**
|
|
@@ -14318,45 +14624,90 @@ window.__ModuleLoader__.load({
|
|
|
14318
14624
|
* bound to each, the registered pages whose Source runs, and the Source types the descriptor-driven management
|
|
14319
14625
|
* page shows, those without a page of their own or with configuration fields.
|
|
14320
14626
|
*/
|
|
14321
|
-
function useSourceCatalog(client, taskClient, revision, viewContextKey, sourcePageEntries) {
|
|
14627
|
+
function useSourceCatalog(client, taskClient, revision, viewContextKey, sourcePageEntries, active = true, onSourceChanged) {
|
|
14322
14628
|
const [sourceCatalogState, setSourceCatalogState] = (0, react.useState)(() => ({
|
|
14323
14629
|
contextKey: viewContextKey,
|
|
14324
14630
|
value: null,
|
|
14325
14631
|
error: null
|
|
14326
14632
|
}));
|
|
14633
|
+
const current = (0, react.useRef)();
|
|
14634
|
+
const previousRead = current.current;
|
|
14635
|
+
const changed = previousRead?.client !== client || previousRead.viewContextKey !== viewContextKey || previousRead.active !== active || previousRead.revision !== revision;
|
|
14636
|
+
current.current = {
|
|
14637
|
+
client,
|
|
14638
|
+
viewContextKey,
|
|
14639
|
+
active,
|
|
14640
|
+
revision,
|
|
14641
|
+
epoch: (previousRead?.epoch ?? 0) + Number(changed)
|
|
14642
|
+
};
|
|
14643
|
+
const mounted = (0, react.useRef)(true);
|
|
14327
14644
|
(0, react.useEffect)(() => {
|
|
14328
|
-
|
|
14645
|
+
mounted.current = true;
|
|
14646
|
+
return () => {
|
|
14647
|
+
mounted.current = false;
|
|
14648
|
+
};
|
|
14649
|
+
}, []);
|
|
14650
|
+
(0, react.useEffect)(() => {
|
|
14651
|
+
if (!active) return;
|
|
14652
|
+
let pending = true;
|
|
14329
14653
|
client.sourceManagementCatalog().then((value) => {
|
|
14330
|
-
if (
|
|
14654
|
+
if (pending) setSourceCatalogState({
|
|
14331
14655
|
contextKey: viewContextKey,
|
|
14332
14656
|
value,
|
|
14333
14657
|
error: null
|
|
14334
14658
|
});
|
|
14335
14659
|
}).catch((reason) => {
|
|
14336
|
-
if (
|
|
14660
|
+
if (pending) setSourceCatalogState({
|
|
14337
14661
|
contextKey: viewContextKey,
|
|
14338
14662
|
value: null,
|
|
14339
14663
|
error: message(reason)
|
|
14340
14664
|
});
|
|
14341
14665
|
});
|
|
14342
14666
|
return () => {
|
|
14343
|
-
|
|
14667
|
+
pending = false;
|
|
14344
14668
|
};
|
|
14345
14669
|
}, [
|
|
14670
|
+
active,
|
|
14346
14671
|
client,
|
|
14347
14672
|
revision,
|
|
14348
14673
|
viewContextKey
|
|
14349
14674
|
]);
|
|
14350
14675
|
const sourceCatalog = sourceCatalogState.contextKey === viewContextKey ? sourceCatalogState.value : null;
|
|
14351
14676
|
const sourceInstances = sourceCatalog?.sources ?? [];
|
|
14677
|
+
const bindings = (0, react.useRef)();
|
|
14352
14678
|
return {
|
|
14353
14679
|
sourceCatalogState,
|
|
14354
14680
|
sourceCatalog,
|
|
14355
14681
|
sourceInstances,
|
|
14356
|
-
sourceManagementClients: (0, react.useMemo)(() =>
|
|
14682
|
+
sourceManagementClients: (0, react.useMemo)(() => {
|
|
14683
|
+
const previous = bindings.current;
|
|
14684
|
+
const reusable = previous?.client === client && previous.taskClient === taskClient && previous.context === viewContextKey && previous.generation === sourceCatalog?.generationId;
|
|
14685
|
+
const values = /* @__PURE__ */ new Map();
|
|
14686
|
+
for (const source of sourceInstances) {
|
|
14687
|
+
const signature = JSON.stringify(source);
|
|
14688
|
+
const prior = reusable ? previous.values.get(source.sourceInstanceKey) : void 0;
|
|
14689
|
+
values.set(source.sourceInstanceKey, prior?.signature === signature ? prior : {
|
|
14690
|
+
signature,
|
|
14691
|
+
management: bindSourceManagementClient(client, source, taskClient, () => {
|
|
14692
|
+
if (!mounted.current || current.current?.client !== client || current.current.viewContextKey !== viewContextKey) throw new Error("Source page is unmounted or its view context changed");
|
|
14693
|
+
}, () => current.current.epoch, () => onSourceChanged?.(source.sourceTypeId))
|
|
14694
|
+
});
|
|
14695
|
+
}
|
|
14696
|
+
bindings.current = {
|
|
14697
|
+
client,
|
|
14698
|
+
taskClient,
|
|
14699
|
+
context: viewContextKey,
|
|
14700
|
+
...sourceCatalog === null ? {} : { generation: sourceCatalog.generationId },
|
|
14701
|
+
values
|
|
14702
|
+
};
|
|
14703
|
+
return new Map([...values].map(([key, value]) => [key, value.management]));
|
|
14704
|
+
}, [
|
|
14357
14705
|
client,
|
|
14706
|
+
onSourceChanged,
|
|
14707
|
+
sourceCatalog,
|
|
14358
14708
|
sourceInstances,
|
|
14359
|
-
taskClient
|
|
14709
|
+
taskClient,
|
|
14710
|
+
viewContextKey
|
|
14360
14711
|
]),
|
|
14361
14712
|
visibleSourcePages: (0, react.useMemo)(() => {
|
|
14362
14713
|
const visibleTypes = new Set(sourceInstances.map((source) => source.sourceTypeId));
|
|
@@ -14399,9 +14750,13 @@ window.__ModuleLoader__.load({
|
|
|
14399
14750
|
* carries its input into a Source page, and a page follows its layer while the layer's Source stops and runs again.
|
|
14400
14751
|
*/
|
|
14401
14752
|
function useWorkspaceNavigation(options) {
|
|
14402
|
-
const { sessionId, viewContextKey, resetViewportScroll, sourceCatalog, sourcePageEntries, visibleSourcePages, managedSourceTypes, stoppedTypes, dashboard, sourceName, showWorkspaceToast, accepts, home = "status" } = options;
|
|
14753
|
+
const { sessionId, viewContextKey, resetViewportScroll, sourceCatalog, sourcePageEntries, visibleSourcePages, managedSourceTypes, stoppedTypes, disabledTypes, dashboard, sourceName, showWorkspaceToast, accepts, home = "status" } = options;
|
|
14403
14754
|
const t = useT();
|
|
14404
14755
|
const [page, setPage] = (0, react.useState)(home);
|
|
14756
|
+
const isDisabled = (0, react.useCallback)((target) => {
|
|
14757
|
+
const type = sourcePageEntryId(target)?.split("/")[0] ?? managedSourceTypeId(target) ?? stoppedSourceTypeId(target);
|
|
14758
|
+
return type !== void 0 && disabledTypes.has(type);
|
|
14759
|
+
}, [disabledTypes]);
|
|
14405
14760
|
(0, react.useEffect)(() => {
|
|
14406
14761
|
if (page === "status" && home !== "status") setPage(home);
|
|
14407
14762
|
}, [home, page]);
|
|
@@ -14467,9 +14822,10 @@ window.__ModuleLoader__.load({
|
|
|
14467
14822
|
glyph: "◇",
|
|
14468
14823
|
primary: true
|
|
14469
14824
|
})));
|
|
14470
|
-
return entries;
|
|
14825
|
+
return entries.filter((entry) => entry.sourceTypeId === void 0 || !disabledTypes.has(entry.sourceTypeId));
|
|
14471
14826
|
}, [
|
|
14472
14827
|
dashboard,
|
|
14828
|
+
disabledTypes,
|
|
14473
14829
|
managedSourceTypes,
|
|
14474
14830
|
sourceName,
|
|
14475
14831
|
sourcePageEntries,
|
|
@@ -14477,6 +14833,11 @@ window.__ModuleLoader__.load({
|
|
|
14477
14833
|
visibleSourcePages
|
|
14478
14834
|
]);
|
|
14479
14835
|
(0, react.useEffect)(() => {
|
|
14836
|
+
if (isDisabled(page)) {
|
|
14837
|
+
setPage(home);
|
|
14838
|
+
setNavigationInput(void 0);
|
|
14839
|
+
return;
|
|
14840
|
+
}
|
|
14480
14841
|
if (sourceCatalog === null) return;
|
|
14481
14842
|
const entryId = sourcePageEntryId(page);
|
|
14482
14843
|
const managedTypeId = managedSourceTypeId(page);
|
|
@@ -14493,6 +14854,7 @@ window.__ModuleLoader__.load({
|
|
|
14493
14854
|
});
|
|
14494
14855
|
}
|
|
14495
14856
|
}, [
|
|
14857
|
+
isDisabled,
|
|
14496
14858
|
managedSourceTypes,
|
|
14497
14859
|
page,
|
|
14498
14860
|
sourcePageEntries,
|
|
@@ -14509,6 +14871,11 @@ window.__ModuleLoader__.load({
|
|
|
14509
14871
|
}, [viewContextKey]);
|
|
14510
14872
|
/** Anchors address Source page ids; no Source component is imported here. */
|
|
14511
14873
|
const applyAnchor = (0, react.useCallback)((anchor) => {
|
|
14874
|
+
if (anchor.page !== "status" && isDisabled(sourcePage(anchor.page))) {
|
|
14875
|
+
setNavigationInput(void 0);
|
|
14876
|
+
selectPage(home);
|
|
14877
|
+
return;
|
|
14878
|
+
}
|
|
14512
14879
|
setNavigationInput({
|
|
14513
14880
|
page: anchor.page,
|
|
14514
14881
|
value: {
|
|
@@ -14517,7 +14884,11 @@ window.__ModuleLoader__.load({
|
|
|
14517
14884
|
}
|
|
14518
14885
|
});
|
|
14519
14886
|
selectPage(anchor.page === "status" ? "status" : sourcePage(anchor.page));
|
|
14520
|
-
}, [
|
|
14887
|
+
}, [
|
|
14888
|
+
home,
|
|
14889
|
+
isDisabled,
|
|
14890
|
+
selectPage
|
|
14891
|
+
]);
|
|
14521
14892
|
(0, react.useEffect)(() => {
|
|
14522
14893
|
const held = consumeMnemonAnchor(sessionId, accepts);
|
|
14523
14894
|
if (held !== null) applyAnchor(held);
|
|
@@ -14528,7 +14899,7 @@ window.__ModuleLoader__.load({
|
|
|
14528
14899
|
accepts
|
|
14529
14900
|
]);
|
|
14530
14901
|
return {
|
|
14531
|
-
page,
|
|
14902
|
+
page: isDisabled(page) ? home : page,
|
|
14532
14903
|
navigationInput,
|
|
14533
14904
|
openTab,
|
|
14534
14905
|
sourceNavigationEntries
|
|
@@ -14669,6 +15040,41 @@ window.__ModuleLoader__.load({
|
|
|
14669
15040
|
})]
|
|
14670
15041
|
});
|
|
14671
15042
|
}
|
|
15043
|
+
/** Only low-frequency guidance folds; errors, composition diagnostics and restart reminders stay visible. */
|
|
15044
|
+
function OrdinaryNotices(props) {
|
|
15045
|
+
const t = useT();
|
|
15046
|
+
const [expanded, setExpanded] = (0, react.useState)(false);
|
|
15047
|
+
const contentsId = (0, react.useId)();
|
|
15048
|
+
const labels = [props.remoteReadOnly ? t("header.noticeRemoteReadOnly") : void 0, props.reviewPaused ? t("header.noticeIdleReview") : void 0].filter((label) => label !== void 0);
|
|
15049
|
+
if (labels.length === 0) return null;
|
|
15050
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
15051
|
+
className: MnemonView_module_css_default.noticeGroup,
|
|
15052
|
+
"data-expanded": expanded || void 0,
|
|
15053
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
15054
|
+
type: "button",
|
|
15055
|
+
className: MnemonView_module_css_default.noticeToggle,
|
|
15056
|
+
"aria-expanded": expanded,
|
|
15057
|
+
"aria-controls": contentsId,
|
|
15058
|
+
onClick: () => setExpanded((value) => !value),
|
|
15059
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("header.noticeSummary", {
|
|
15060
|
+
count: labels.length,
|
|
15061
|
+
labels: labels.join(" / ")
|
|
15062
|
+
}) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronLeftOutline14, { size: 14 })]
|
|
15063
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
15064
|
+
id: contentsId,
|
|
15065
|
+
className: MnemonView_module_css_default.noticeContents,
|
|
15066
|
+
children: [props.remoteReadOnly && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
15067
|
+
className: MnemonView_module_css_default.alert,
|
|
15068
|
+
role: "status",
|
|
15069
|
+
children: t("workspace.remoteReadOnly")
|
|
15070
|
+
}), props.reviewPaused && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
15071
|
+
className: MnemonView_module_css_default.alert,
|
|
15072
|
+
role: "status",
|
|
15073
|
+
children: t(props.reviewPaused === "tool-access" ? "status.reviewToolAccessPaused" : "status.reviewTeamPaused")
|
|
15074
|
+
})]
|
|
15075
|
+
})]
|
|
15076
|
+
});
|
|
15077
|
+
}
|
|
14672
15078
|
function SourceDisabledPage(props) {
|
|
14673
15079
|
const t = useT();
|
|
14674
15080
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -14781,12 +15187,19 @@ window.__ModuleLoader__.load({
|
|
|
14781
15187
|
return t(kind === "runtime" ? "status.storageRuntime" : kind === "memory-bodies" ? "status.storageSpaces" : kind === "documents" ? "status.storageDocuments" : "status.storageState");
|
|
14782
15188
|
}
|
|
14783
15189
|
function MnemonWorkbench(props) {
|
|
15190
|
+
const visible = useDocumentVisible();
|
|
15191
|
+
const active = props.active !== false && visible;
|
|
15192
|
+
const visibleProps = (0, react.useRef)(props);
|
|
15193
|
+
if (active) visibleProps.current = props;
|
|
14784
15194
|
const t = props.t ?? translateZh;
|
|
14785
15195
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(I18nContext.Provider, {
|
|
14786
15196
|
value: t,
|
|
14787
15197
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LocaleContext.Provider, {
|
|
14788
15198
|
value: props.locale ?? "zh",
|
|
14789
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonWorkspace, {
|
|
15199
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonWorkspace, {
|
|
15200
|
+
...visibleProps.current,
|
|
15201
|
+
active
|
|
15202
|
+
})
|
|
14790
15203
|
})
|
|
14791
15204
|
});
|
|
14792
15205
|
}
|
|
@@ -14799,7 +15212,10 @@ window.__ModuleLoader__.load({
|
|
|
14799
15212
|
const componentRevision = (0, react.useSyncExternalStore)(componentSignal.subscribe, componentSignal.getSnapshot, componentSignal.getSnapshot);
|
|
14800
15213
|
const subscribeSettings = (0, react.useCallback)((listener) => settingsScope.subscribe(listener), [settingsScope]);
|
|
14801
15214
|
const getSettingsSnapshot = (0, react.useCallback)(() => settingsScope.getSnapshot(), [settingsScope]);
|
|
14802
|
-
const
|
|
15215
|
+
const liveSettingsSnapshot = (0, react.useSyncExternalStore)(subscribeSettings, getSettingsSnapshot, getSettingsSnapshot);
|
|
15216
|
+
const visibleSettings = (0, react.useRef)(liveSettingsSnapshot);
|
|
15217
|
+
if (active) visibleSettings.current = liveSettingsSnapshot;
|
|
15218
|
+
const settingsSnapshot = visibleSettings.current;
|
|
14803
15219
|
const subscribeSourcePages = (0, react.useCallback)((listener) => sourcePageDirectory.subscribe(listener), [sourcePageDirectory]);
|
|
14804
15220
|
const getSourcePages = (0, react.useCallback)(() => sourcePageDirectory.getSnapshot(), [sourcePageDirectory]);
|
|
14805
15221
|
const allSourcePageEntries = (0, react.useSyncExternalStore)(subscribeSourcePages, getSourcePages, getSourcePages);
|
|
@@ -14822,7 +15238,15 @@ window.__ModuleLoader__.load({
|
|
|
14822
15238
|
surface,
|
|
14823
15239
|
workspaceId
|
|
14824
15240
|
]);
|
|
14825
|
-
const
|
|
15241
|
+
const connectionContext = (0, react.useRef)({
|
|
15242
|
+
connection,
|
|
15243
|
+
revision: 0
|
|
15244
|
+
});
|
|
15245
|
+
if (connectionContext.current.connection !== connection) connectionContext.current = {
|
|
15246
|
+
connection,
|
|
15247
|
+
revision: connectionContext.current.revision + 1
|
|
15248
|
+
};
|
|
15249
|
+
const viewContextKey = `${`${connectionContext.current.revision}\u0000${sessionId ?? ""}\u0000${workspaceId ?? ""}`}\u0000${settingsSnapshot.revision === void 0 ? "loading" : JSON.stringify([
|
|
14826
15250
|
settingsSnapshot.value?.storageScope ?? null,
|
|
14827
15251
|
settingsSnapshot.value?.dataDir ?? null,
|
|
14828
15252
|
settingsSnapshot.value?.runtimeUserScope ?? null
|
|
@@ -14842,9 +15266,11 @@ window.__ModuleLoader__.load({
|
|
|
14842
15266
|
const inset = topInset ?? (header === null ? 0 : header.getBoundingClientRect().height + 12);
|
|
14843
15267
|
canvas.scrollTop = Math.max(0, canvas.scrollTop + element.getBoundingClientRect().top - canvas.getBoundingClientRect().top - inset);
|
|
14844
15268
|
}, []);
|
|
14845
|
-
const { status, statusLoading, statusError, loadStatus } = useWorkspaceStatus(client, viewContextKey);
|
|
15269
|
+
const { status, statusLoading, statusError, loadStatus } = useWorkspaceStatus(client, viewContextKey, active);
|
|
14846
15270
|
const [revision, setRevision] = (0, react.useState)(0);
|
|
14847
|
-
const { sourceCatalogState, sourceCatalog, sourceInstances, sourceManagementClients, visibleSourcePages, managedSourceTypes: allManagedSourceTypes } = useSourceCatalog(client, taskClient, revision, viewContextKey, sourcePageEntries)
|
|
15271
|
+
const { sourceCatalogState, sourceCatalog, sourceInstances, sourceManagementClients, visibleSourcePages, managedSourceTypes: allManagedSourceTypes } = useSourceCatalog(client, taskClient, revision, viewContextKey, sourcePageEntries, active, (0, react.useCallback)((sourceTypeId) => {
|
|
15272
|
+
if (sourceTypeId === "skills") invalidateSkillActivity(connection);
|
|
15273
|
+
}, [connection]));
|
|
14848
15274
|
const managedSourceTypes = (0, react.useMemo)(() => allManagedSourceTypes.filter(([sourceTypeId]) => shows(sourceTypeId)), [allManagedSourceTypes, shows]);
|
|
14849
15275
|
const [selectedSourceInstances, setSelectedSourceInstances] = (0, react.useState)({});
|
|
14850
15276
|
const stoppedLayers = status?.memorySystem?.configuration.layers;
|
|
@@ -14860,6 +15286,7 @@ window.__ModuleLoader__.load({
|
|
|
14860
15286
|
]);
|
|
14861
15287
|
const [dashboard, setDashboard] = (0, react.useState)(null);
|
|
14862
15288
|
(0, react.useEffect)(() => {
|
|
15289
|
+
if (!active) return;
|
|
14863
15290
|
let current = true;
|
|
14864
15291
|
client.viewDashboard().then((value) => {
|
|
14865
15292
|
if (current) setDashboard(Array.isArray(value?.entries) ? value : null);
|
|
@@ -14870,6 +15297,7 @@ window.__ModuleLoader__.load({
|
|
|
14870
15297
|
current = false;
|
|
14871
15298
|
};
|
|
14872
15299
|
}, [
|
|
15300
|
+
active,
|
|
14873
15301
|
client,
|
|
14874
15302
|
revision,
|
|
14875
15303
|
componentRevision
|
|
@@ -14882,8 +15310,25 @@ window.__ModuleLoader__.load({
|
|
|
14882
15310
|
const component = dashboard?.entries.find((entry) => entry.roles.includes("strategy") && entry.typeId === typeId);
|
|
14883
15311
|
return component === void 0 ? typeId : componentCopy(component, locale).label;
|
|
14884
15312
|
};
|
|
14885
|
-
const switchedOff = (0, react.useMemo)(() =>
|
|
14886
|
-
|
|
15313
|
+
const switchedOff = (0, react.useMemo)(() => {
|
|
15314
|
+
const entries = dashboard?.entries ?? [];
|
|
15315
|
+
const enabled = new Set(entries.filter((entry) => entry.enabled).map(layerOf));
|
|
15316
|
+
const managedPackages = new Set(entries.map((entry) => entry.packageName));
|
|
15317
|
+
for (const source of dashboard?.sources ?? []) if (!managedPackages.has(source.packageName)) enabled.add(source.sourceTypeId);
|
|
15318
|
+
return new Set(entries.filter((entry) => !entry.enabled).map(layerOf).filter((id) => id !== void 0 && !enabled.has(id)));
|
|
15319
|
+
}, [dashboard]);
|
|
15320
|
+
const savedLayers = settingsSnapshot.value?.memoryTopology?.layers;
|
|
15321
|
+
const configuredLayers = status?.memorySystem?.configuration.layers;
|
|
15322
|
+
const disabledTypes = (0, react.useMemo)(() => new Set([.../* @__PURE__ */ new Set([
|
|
15323
|
+
...Object.keys(configuredLayers ?? {}),
|
|
15324
|
+
...Object.keys(savedLayers ?? {}),
|
|
15325
|
+
...switchedOff
|
|
15326
|
+
])].filter((id) => (savedLayers?.[id]?.enabled ?? configuredLayers?.[id]?.enabled) === false || switchedOff.has(id))), [
|
|
15327
|
+
configuredLayers,
|
|
15328
|
+
savedLayers,
|
|
15329
|
+
switchedOff
|
|
15330
|
+
]);
|
|
15331
|
+
const focusPage = focusType === void 0 || disabledTypes.has(focusType) ? void 0 : sourcePageEntries.find((entry) => entry.navigation?.primary ?? true);
|
|
14887
15332
|
const home = focusPage === void 0 ? "status" : `source:${focusPage.id}`;
|
|
14888
15333
|
const { page, navigationInput, openTab, sourceNavigationEntries } = useWorkspaceNavigation({
|
|
14889
15334
|
sessionId,
|
|
@@ -14894,6 +15339,7 @@ window.__ModuleLoader__.load({
|
|
|
14894
15339
|
visibleSourcePages,
|
|
14895
15340
|
managedSourceTypes,
|
|
14896
15341
|
stoppedTypes,
|
|
15342
|
+
disabledTypes,
|
|
14897
15343
|
dashboard,
|
|
14898
15344
|
sourceName,
|
|
14899
15345
|
showWorkspaceToast,
|
|
@@ -14901,34 +15347,57 @@ window.__ModuleLoader__.load({
|
|
|
14901
15347
|
home
|
|
14902
15348
|
});
|
|
14903
15349
|
(0, react.useEffect)(() => {
|
|
14904
|
-
loadStatus();
|
|
14905
|
-
}, [loadStatus]);
|
|
15350
|
+
if (active) loadStatus();
|
|
15351
|
+
}, [active, loadStatus]);
|
|
15352
|
+
const currentView = (0, react.useRef)({
|
|
15353
|
+
active,
|
|
15354
|
+
client,
|
|
15355
|
+
viewContextKey
|
|
15356
|
+
});
|
|
15357
|
+
currentView.current = {
|
|
15358
|
+
active,
|
|
15359
|
+
client,
|
|
15360
|
+
viewContextKey
|
|
15361
|
+
};
|
|
15362
|
+
const viewMounted = (0, react.useRef)(true);
|
|
15363
|
+
(0, react.useEffect)(() => {
|
|
15364
|
+
viewMounted.current = true;
|
|
15365
|
+
return () => {
|
|
15366
|
+
viewMounted.current = false;
|
|
15367
|
+
};
|
|
15368
|
+
}, []);
|
|
15369
|
+
const isBoundView = (0, react.useCallback)(() => viewMounted.current && currentView.current.client === client && currentView.current.viewContextKey === viewContextKey, [client, viewContextKey]);
|
|
15370
|
+
const isCurrentView = (0, react.useCallback)(() => currentView.current.active && isBoundView(), [isBoundView]);
|
|
15371
|
+
const assertCurrentView = () => {
|
|
15372
|
+
if (!isBoundView()) throw new Error("Source page is unmounted or its view context changed");
|
|
15373
|
+
};
|
|
14906
15374
|
const mutate = (0, react.useCallback)(() => {
|
|
15375
|
+
if (!isCurrentView()) return;
|
|
14907
15376
|
setRevision((value) => value + 1);
|
|
14908
15377
|
loadStatus();
|
|
14909
|
-
}, [loadStatus]);
|
|
15378
|
+
}, [isCurrentView, loadStatus]);
|
|
14910
15379
|
const refreshAll = mutate;
|
|
14911
15380
|
const [refreshKey, setRefreshKey] = (0, react.useState)(0);
|
|
14912
15381
|
const refreshPage = (0, react.useCallback)(() => {
|
|
14913
15382
|
setRefreshKey((value) => value + 1);
|
|
14914
15383
|
refreshAll();
|
|
14915
15384
|
}, [refreshAll]);
|
|
14916
|
-
const shown = (0, react.useRef)(active);
|
|
14917
|
-
(0, react.useEffect)(() => {
|
|
14918
|
-
if (active && !shown.current) refreshAll();
|
|
14919
|
-
shown.current = active;
|
|
14920
|
-
}, [active, refreshAll]);
|
|
14921
15385
|
const seenComponents = (0, react.useRef)(componentRevision);
|
|
14922
15386
|
(0, react.useEffect)(() => {
|
|
14923
|
-
if (componentRevision === seenComponents.current) return;
|
|
15387
|
+
if (!active || componentRevision === seenComponents.current) return;
|
|
14924
15388
|
seenComponents.current = componentRevision;
|
|
14925
15389
|
refreshPage();
|
|
14926
|
-
}, [
|
|
15390
|
+
}, [
|
|
15391
|
+
active,
|
|
15392
|
+
componentRevision,
|
|
15393
|
+
refreshPage
|
|
15394
|
+
]);
|
|
14927
15395
|
const seenSettings = (0, react.useRef)({
|
|
14928
15396
|
revision: settingsSnapshot.revision,
|
|
14929
15397
|
context: viewContextKey
|
|
14930
15398
|
});
|
|
14931
15399
|
(0, react.useEffect)(() => {
|
|
15400
|
+
if (!active) return;
|
|
14932
15401
|
const seen = seenSettings.current;
|
|
14933
15402
|
seenSettings.current = {
|
|
14934
15403
|
revision: settingsSnapshot.revision,
|
|
@@ -14936,6 +15405,7 @@ window.__ModuleLoader__.load({
|
|
|
14936
15405
|
};
|
|
14937
15406
|
if (seen.revision !== settingsSnapshot.revision && seen.context === viewContextKey) refreshAll();
|
|
14938
15407
|
}, [
|
|
15408
|
+
active,
|
|
14939
15409
|
settingsSnapshot.revision,
|
|
14940
15410
|
viewContextKey,
|
|
14941
15411
|
refreshAll
|
|
@@ -14962,9 +15432,6 @@ window.__ModuleLoader__.load({
|
|
|
14962
15432
|
})),
|
|
14963
15433
|
onChange: workspaceSelection.onSelect
|
|
14964
15434
|
});
|
|
14965
|
-
const savedLayers = settingsSnapshot.value?.memoryTopology?.layers;
|
|
14966
|
-
const configuredLayers = status?.memorySystem?.configuration.layers;
|
|
14967
|
-
const disabledTypes = new Set([.../* @__PURE__ */ new Set([...Object.keys(configuredLayers ?? {}), ...Object.keys(savedLayers ?? {})])].filter((id) => (savedLayers?.[id]?.enabled ?? configuredLayers?.[id]?.enabled) === false || switchedOff.has(id)));
|
|
14968
15435
|
const notice = compositionNotice(status?.memorySystem, t);
|
|
14969
15436
|
const memoryOff = status?.memorySystem !== void 0 && !status.memorySystem.serving;
|
|
14970
15437
|
const composingType = status?.memorySystem?.serving === true ? status.memorySystem.strategyTypeId : void 0;
|
|
@@ -14988,6 +15455,7 @@ window.__ModuleLoader__.load({
|
|
|
14988
15455
|
value: { evolution: skillsSnapshot.value?.evolution ?? DEFAULT_SKILLS_CONFIG.evolution },
|
|
14989
15456
|
writable: skillsSnapshot.writable,
|
|
14990
15457
|
replace: async (value) => {
|
|
15458
|
+
assertCurrentView();
|
|
14991
15459
|
const evolution = jsonRecord(value)?.evolution;
|
|
14992
15460
|
if (typeof evolution !== "boolean") throw new Error("Skills preferences take evolution as a boolean");
|
|
14993
15461
|
await skillsScope.mutate([{
|
|
@@ -15008,6 +15476,7 @@ window.__ModuleLoader__.load({
|
|
|
15008
15476
|
} })),
|
|
15009
15477
|
writable: settingsSnapshot.writable,
|
|
15010
15478
|
replace: async (value) => {
|
|
15479
|
+
assertCurrentView();
|
|
15011
15480
|
const requested = jsonRecord(value)?.persistenceStrategy;
|
|
15012
15481
|
const strategy = requested === void 0 ? void 0 : jsonRecord(requested);
|
|
15013
15482
|
if (strategy === void 0) throw new Error("Persistence strategy preferences must be an object");
|
|
@@ -15033,6 +15502,7 @@ window.__ModuleLoader__.load({
|
|
|
15033
15502
|
sourceInstances: instances,
|
|
15034
15503
|
writable: writeEnabled,
|
|
15035
15504
|
locale,
|
|
15505
|
+
active,
|
|
15036
15506
|
...management === void 0 ? {} : { management },
|
|
15037
15507
|
...sessionId === void 0 ? {} : { sessionId },
|
|
15038
15508
|
...workspaceId === void 0 ? {} : { workspaceId },
|
|
@@ -15239,15 +15709,18 @@ window.__ModuleLoader__.load({
|
|
|
15239
15709
|
children: status?.restartPending !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RestartReminder, { pending: status.restartPending })
|
|
15240
15710
|
}),
|
|
15241
15711
|
workspaceToast.element,
|
|
15242
|
-
|
|
15243
|
-
|
|
15244
|
-
|
|
15245
|
-
children: t("workspace.remoteReadOnly")
|
|
15712
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(OrdinaryNotices, {
|
|
15713
|
+
remoteReadOnly,
|
|
15714
|
+
reviewPaused: focused ? void 0 : status?.lifecycle?.current?.idleReviewBlocked
|
|
15246
15715
|
}),
|
|
15247
|
-
!focused && status?.lifecycle?.current?.
|
|
15716
|
+
!focused && status?.lifecycle?.current?.idleReviewWatermark !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
15248
15717
|
className: MnemonView_module_css_default.alert,
|
|
15249
|
-
role: "status",
|
|
15250
|
-
children: t("status.
|
|
15718
|
+
role: status.lifecycle.current.idleReviewWatermark.state === "error" ? "alert" : "status",
|
|
15719
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("status.reviewWatermarkUsage", {
|
|
15720
|
+
attempts: status.lifecycle.current.idleReviewAttempts ?? 0,
|
|
15721
|
+
max: status.lifecycle.current.idleReviewWatermark.maxPerSession,
|
|
15722
|
+
restored: status.lifecycle.current.idleReviewWatermark.restoredAttempts
|
|
15723
|
+
}) }), status.lifecycle.current.idleReviewWatermark.state === "error" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("status.reviewWatermarkPaused") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("status.reviewWatermarkRecovery") })] }) : status.lifecycle.current.nextReviewAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("status.reviewWatermarkNext", { time: new Date(status.lifecycle.current.nextReviewAt).toLocaleString(locale) }) })]
|
|
15251
15724
|
}),
|
|
15252
15725
|
!focused && status?.lifecycle?.current?.lastError !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
15253
15726
|
className: MnemonView_module_css_default.alert,
|
|
@@ -15285,6 +15758,10 @@ window.__ModuleLoader__.load({
|
|
|
15285
15758
|
"data-testid": "mnemon-canvas",
|
|
15286
15759
|
"data-lock-page-header": activeSourcePage?.navigation?.stickyHeader !== false ? "" : void 0,
|
|
15287
15760
|
children: [
|
|
15761
|
+
page === "status" && focus !== void 0 && disabledTypes.has(focus.sourceTypeId) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SourceDisabledPage, {
|
|
15762
|
+
title: focus.title,
|
|
15763
|
+
onOpenConfiguration: openConfiguration
|
|
15764
|
+
}),
|
|
15288
15765
|
page === "status" && !focused && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WorkbenchStatusContext.Provider, {
|
|
15289
15766
|
value: status,
|
|
15290
15767
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StatusPage, {
|
|
@@ -16370,38 +16847,6 @@ window.__ModuleLoader__.load({
|
|
|
16370
16847
|
}
|
|
16371
16848
|
};
|
|
16372
16849
|
//#endregion
|
|
16373
|
-
//#region src/client/change-signal.ts
|
|
16374
|
-
/**
|
|
16375
|
-
* A revision other surfaces bump when something they cannot observe directly
|
|
16376
|
-
* changed, such as a component switched on DSH's Plugins page. Readers reload
|
|
16377
|
-
* their own data when the revision moves.
|
|
16378
|
-
*/
|
|
16379
|
-
var MnemonChangeSignal = class {
|
|
16380
|
-
settleMs;
|
|
16381
|
-
revision = 0;
|
|
16382
|
-
pending;
|
|
16383
|
-
listeners = /* @__PURE__ */ new Set();
|
|
16384
|
-
constructor(settleMs = 100) {
|
|
16385
|
-
this.settleMs = settleMs;
|
|
16386
|
-
}
|
|
16387
|
-
getSnapshot = () => this.revision;
|
|
16388
|
-
subscribe = (listener) => {
|
|
16389
|
-
this.listeners.add(listener);
|
|
16390
|
-
return () => {
|
|
16391
|
-
this.listeners.delete(listener);
|
|
16392
|
-
};
|
|
16393
|
-
};
|
|
16394
|
-
/** A burst of announcements, such as one per component a write switched, moves the revision once. */
|
|
16395
|
-
bump = () => {
|
|
16396
|
-
if (this.pending !== void 0) return;
|
|
16397
|
-
this.pending = setTimeout(() => {
|
|
16398
|
-
this.pending = void 0;
|
|
16399
|
-
this.revision += 1;
|
|
16400
|
-
for (const listener of [...this.listeners]) listener();
|
|
16401
|
-
}, this.settleMs);
|
|
16402
|
-
};
|
|
16403
|
-
};
|
|
16404
|
-
//#endregion
|
|
16405
16850
|
//#region src/client/settings.ts
|
|
16406
16851
|
var MnemonSettingsScope = class {
|
|
16407
16852
|
connection;
|
|
@@ -17387,6 +17832,7 @@ window.__ModuleLoader__.load({
|
|
|
17387
17832
|
inject: (sessionId) => ({
|
|
17388
17833
|
...typeof sessionId === "string" && sessionId !== "" ? { sessionId } : {},
|
|
17389
17834
|
connection: ctx.connection,
|
|
17835
|
+
componentChanges: seats.components,
|
|
17390
17836
|
localeRuntime: ctx.locale,
|
|
17391
17837
|
t: translate
|
|
17392
17838
|
})
|