dsh-mnemon 0.5.37 → 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 +436 -110
- package/lib/core.js +1 -1
- package/lib/index.js +570 -66
- package/lib/{runtime-zuuBe8x1.js → runtime-0u6dOiF9.js} +33 -1
- package/lib/{starter-resolution-DYeYvfwr.js → starter-resolution-XVFzvnV0.js} +5 -5
- package/lib/starter.js +1 -1
- package/lib/testing.js +1 -1
- package/lib/types/src/client/locales.d.ts +10 -0
- package/lib/types/src/client/page-client.d.ts +3 -1
- package/lib/types/src/client/source-contracts.d.ts +6 -1
- package/lib/types/src/host/protocol.d.ts +10 -1
- 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",
|
|
@@ -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": "空闲审查",
|
|
@@ -3162,6 +3173,9 @@ window.__ModuleLoader__.load({
|
|
|
3162
3173
|
"common.showMore": "Show {count} more",
|
|
3163
3174
|
"header.backToConversation": "Back to chat",
|
|
3164
3175
|
"header.configure": "Configure",
|
|
3176
|
+
"header.noticeSummary": "Notices {count} · {labels}",
|
|
3177
|
+
"header.noticeRemoteReadOnly": "Remote read only",
|
|
3178
|
+
"header.noticeIdleReview": "Idle review",
|
|
3165
3179
|
"header.compositionHint": "Select to change the composition in the configuration.",
|
|
3166
3180
|
"header.checking": "Checking",
|
|
3167
3181
|
"header.connected": "Connected",
|
|
@@ -3280,6 +3294,13 @@ window.__ModuleLoader__.load({
|
|
|
3280
3294
|
"status.reviewFailedDetail": "This checkpoint did not complete and will not be replayed automatically. Later reviews respect the cooldown and session limit.",
|
|
3281
3295
|
"status.reviewPartial": "Some writes committed. Reconcile the receipts below; they were not rolled back.",
|
|
3282
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",
|
|
3283
3304
|
"status.reviewRun": "Review run: {id}",
|
|
3284
3305
|
"status.reviewContextWindow": "Choose bounded checkpoint review (spawn), or a task Agent model whose context window covers the parent conversation.",
|
|
3285
3306
|
"config.reviewTitle": "Idle review",
|
|
@@ -3968,7 +3989,7 @@ window.__ModuleLoader__.load({
|
|
|
3968
3989
|
const IconChevronLeftOutline14 = _deepseek_ai_dsh_client_ui_primitives.IconChevronLeftOutlineRegular;
|
|
3969
3990
|
//#endregion
|
|
3970
3991
|
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonView.module.css.mjs
|
|
3971
|
-
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}}";
|
|
3972
3993
|
const tagId$13 = "dsh-mnemon/src/client/MnemonView.module.css";
|
|
3973
3994
|
if (typeof document !== "undefined") {
|
|
3974
3995
|
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$13) + "]");
|
|
@@ -4021,6 +4042,7 @@ window.__ModuleLoader__.load({
|
|
|
4021
4042
|
"mnemon-metadata-sweep": "IIa07q_mnemon-metadata-sweep",
|
|
4022
4043
|
"mnemon-sheet-enter": "IIa07q_mnemon-sheet-enter",
|
|
4023
4044
|
"mnemon-spin": "IIa07q_mnemon-spin",
|
|
4045
|
+
"mnemon-workbench": "IIa07q_mnemon-workbench",
|
|
4024
4046
|
"modal": "IIa07q_modal",
|
|
4025
4047
|
"modalBackdrop": "IIa07q_modalBackdrop",
|
|
4026
4048
|
"modalBody": "IIa07q_modalBody",
|
|
@@ -4033,6 +4055,9 @@ window.__ModuleLoader__.load({
|
|
|
4033
4055
|
"modalWide": "IIa07q_modalWide",
|
|
4034
4056
|
"nav": "IIa07q_nav",
|
|
4035
4057
|
"notice": "IIa07q_notice",
|
|
4058
|
+
"noticeContents": "IIa07q_noticeContents",
|
|
4059
|
+
"noticeGroup": "IIa07q_noticeGroup",
|
|
4060
|
+
"noticeToggle": "IIa07q_noticeToggle",
|
|
4036
4061
|
"offline": "IIa07q_offline",
|
|
4037
4062
|
"online": "IIa07q_online",
|
|
4038
4063
|
"page": "IIa07q_page",
|
|
@@ -10546,13 +10571,13 @@ window.__ModuleLoader__.load({
|
|
|
10546
10571
|
let revision = management.revision;
|
|
10547
10572
|
let sequence = 0;
|
|
10548
10573
|
let accepted = 0;
|
|
10549
|
-
async function request(mode, operation, input, confirmed = true) {
|
|
10574
|
+
async function request(mode, operation, input, confirmed = true, options) {
|
|
10550
10575
|
const ticket = ++sequence;
|
|
10551
10576
|
if (mode === "assist" && !management.assistance?.operations.includes(operation)) throw new Error("Host assistance is unavailable for this Source instance: " + operation);
|
|
10552
10577
|
const result = mode === "assist" ? await management.assistance.execute(operation, input, {
|
|
10553
10578
|
expectedRevision: revision,
|
|
10554
10579
|
confirmed
|
|
10555
|
-
}) : 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, {
|
|
10556
10581
|
confirmed: true,
|
|
10557
10582
|
expectedRevision: revision
|
|
10558
10583
|
});
|
|
@@ -10565,7 +10590,7 @@ window.__ModuleLoader__.load({
|
|
|
10565
10590
|
return {
|
|
10566
10591
|
canAssist: (operation) => management.assistance?.operations.includes(operation) === true,
|
|
10567
10592
|
assist: (operation, input, confirmed) => request("assist", operation, input, confirmed),
|
|
10568
|
-
read: (operation, input = null) => request("read", operation, input),
|
|
10593
|
+
read: (operation, input = null, options) => request("read", operation, input, true, options),
|
|
10569
10594
|
mutate: (operation, input, confirmed) => {
|
|
10570
10595
|
if (confirmed !== true) return Promise.reject(/* @__PURE__ */ new Error("Source page mutation requires explicit confirmation"));
|
|
10571
10596
|
return request("mutate", operation, input);
|
|
@@ -12636,6 +12661,7 @@ window.__ModuleLoader__.load({
|
|
|
12636
12661
|
const choiceOf = (review) => ({
|
|
12637
12662
|
enabled: review.enabled,
|
|
12638
12663
|
runtimeMemory: review.runtimeMemory,
|
|
12664
|
+
persistWatermark: review.persistWatermark,
|
|
12639
12665
|
provider: review.provider,
|
|
12640
12666
|
fallback: review.fallback,
|
|
12641
12667
|
agentTeams: review.agentTeams
|
|
@@ -12757,6 +12783,14 @@ window.__ModuleLoader__.load({
|
|
|
12757
12783
|
disabled: props.disabled,
|
|
12758
12784
|
onChange: (enabled) => props.onChoice({ enabled })
|
|
12759
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
|
+
}),
|
|
12760
12794
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleRow, {
|
|
12761
12795
|
id: "mnemon-review-runtime-memory",
|
|
12762
12796
|
label: t("config.reviewRuntimeMemory"),
|
|
@@ -13246,6 +13280,51 @@ window.__ModuleLoader__.load({
|
|
|
13246
13280
|
});
|
|
13247
13281
|
});
|
|
13248
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
|
|
13249
13328
|
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/SkillTurnTail.module.css.mjs
|
|
13250
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)}";
|
|
13251
13330
|
const tagId$2 = "dsh-mnemon/src/client/SkillTurnTail.module.css";
|
|
@@ -13274,6 +13353,7 @@ window.__ModuleLoader__.load({
|
|
|
13274
13353
|
const POLL_MS = 3e3;
|
|
13275
13354
|
/** After a turn ends, the bar looks a few more times for the review it may have earned. */
|
|
13276
13355
|
const SETTLE_CHECKS = 2;
|
|
13356
|
+
const NO_CHANGES = new MnemonChangeSignal();
|
|
13277
13357
|
/** One snapshot per conversation, shared by every bar under its turns. */
|
|
13278
13358
|
const entries = /* @__PURE__ */ new WeakMap();
|
|
13279
13359
|
function entryOf(connection, sessionId) {
|
|
@@ -13286,6 +13366,10 @@ window.__ModuleLoader__.load({
|
|
|
13286
13366
|
if (entry === void 0) {
|
|
13287
13367
|
entry = {
|
|
13288
13368
|
settle: 0,
|
|
13369
|
+
checkedCursor: -1,
|
|
13370
|
+
requestedCursor: -1,
|
|
13371
|
+
revision: 0,
|
|
13372
|
+
componentRevision: 0,
|
|
13289
13373
|
listeners: /* @__PURE__ */ new Set()
|
|
13290
13374
|
};
|
|
13291
13375
|
sessions.set(sessionId, entry);
|
|
@@ -13295,52 +13379,98 @@ window.__ModuleLoader__.load({
|
|
|
13295
13379
|
function waiting(snapshot) {
|
|
13296
13380
|
return snapshot?.reviews.some((review) => review.state === "scheduled" || review.state === "reviewing") === true;
|
|
13297
13381
|
}
|
|
13298
|
-
function
|
|
13299
|
-
|
|
13300
|
-
|
|
13301
|
-
|
|
13302
|
-
|
|
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);
|
|
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);
|
|
13303
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;
|
|
13304
13419
|
entry.loading = new MnemonClient(connection, sessionId).skillActivity().then((snapshot) => {
|
|
13420
|
+
if (revision !== entry.revision) return;
|
|
13305
13421
|
entry.snapshot = snapshot;
|
|
13422
|
+
entry.checkedCursor = snapshot.available ? cursor : -1;
|
|
13423
|
+
succeeded = true;
|
|
13306
13424
|
}, () => void 0).finally(() => {
|
|
13307
13425
|
delete entry.loading;
|
|
13308
13426
|
for (const listener of [...entry.listeners]) listener();
|
|
13309
|
-
if (entry.
|
|
13310
|
-
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;
|
|
13311
13429
|
else if (entry.settle > 0) {
|
|
13312
13430
|
entry.settle -= 1;
|
|
13313
|
-
entry.
|
|
13314
|
-
}
|
|
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()));
|
|
13315
13434
|
});
|
|
13316
13435
|
}
|
|
13317
13436
|
/** The conversation's skills activity, read again when a newer turn's bar appears. */
|
|
13318
|
-
function useSkillActivity(connection, sessionId,
|
|
13437
|
+
function useSkillActivity(connection, sessionId, cursor, revision) {
|
|
13438
|
+
const visible = useDocumentVisible();
|
|
13319
13439
|
const entry = sessionId === void 0 ? void 0 : entryOf(connection, sessionId);
|
|
13320
13440
|
const subscribe = (0, react.useCallback)((listener) => {
|
|
13321
|
-
if (entry === void 0) return () => {};
|
|
13441
|
+
if (entry === void 0 || !visible || cursor === void 0) return () => {};
|
|
13322
13442
|
entry.listeners.add(listener);
|
|
13323
13443
|
return () => {
|
|
13324
13444
|
entry.listeners.delete(listener);
|
|
13325
|
-
if (entry.listeners.size === 0
|
|
13326
|
-
clearTimeout(entry.timer);
|
|
13327
|
-
delete entry.timer;
|
|
13328
|
-
}
|
|
13445
|
+
if (entry.listeners.size === 0) cancelScheduled(entry);
|
|
13329
13446
|
};
|
|
13330
|
-
}, [
|
|
13447
|
+
}, [
|
|
13448
|
+
entry,
|
|
13449
|
+
visible,
|
|
13450
|
+
cursor
|
|
13451
|
+
]);
|
|
13331
13452
|
const getSnapshot = (0, react.useCallback)(() => entry?.snapshot, [entry]);
|
|
13332
13453
|
const snapshot = (0, react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
13333
13454
|
(0, react.useEffect)(() => {
|
|
13334
|
-
if (entry === void 0 || sessionId === void 0 ||
|
|
13335
|
-
|
|
13336
|
-
|
|
13337
|
-
|
|
13338
|
-
|
|
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()));
|
|
13339
13467
|
}, [
|
|
13340
13468
|
connection,
|
|
13341
13469
|
entry,
|
|
13342
13470
|
sessionId,
|
|
13343
|
-
|
|
13471
|
+
cursor,
|
|
13472
|
+
visible,
|
|
13473
|
+
revision
|
|
13344
13474
|
]);
|
|
13345
13475
|
return snapshot;
|
|
13346
13476
|
}
|
|
@@ -13356,13 +13486,14 @@ window.__ModuleLoader__.load({
|
|
|
13356
13486
|
* on the Skills page, and the review that followed it — waiting or running,
|
|
13357
13487
|
* then the suggestions it left. Hidden when the turn has nothing to say.
|
|
13358
13488
|
*/
|
|
13359
|
-
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 }) {
|
|
13360
13490
|
const subscribeLocale = (0, react.useCallback)((listener) => localeRuntime.subscribe(listener), [localeRuntime]);
|
|
13361
13491
|
const getLocale = (0, react.useCallback)(() => localeRuntime.getSnapshot(), [localeRuntime]);
|
|
13362
13492
|
(0, react.useSyncExternalStore)(subscribeLocale, getLocale, getLocale);
|
|
13363
13493
|
const number = turnNumber(turn);
|
|
13364
13494
|
const closed = isClosedTurn(turn);
|
|
13365
|
-
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);
|
|
13366
13497
|
if (!closed || number === void 0 || snapshot?.available !== true) return null;
|
|
13367
13498
|
const used = snapshot.turns.find((entry) => entry.turn === number)?.skills ?? [];
|
|
13368
13499
|
const review = snapshot.reviews.find((entry) => entry.turn === number);
|
|
@@ -14344,7 +14475,7 @@ window.__ModuleLoader__.load({
|
|
|
14344
14475
|
* status while the summary still waits for a space or the CLI version. Another view context starts empty, and only
|
|
14345
14476
|
* the latest read answers.
|
|
14346
14477
|
*/
|
|
14347
|
-
function useWorkspaceStatus(client, viewContextKey) {
|
|
14478
|
+
function useWorkspaceStatus(client, viewContextKey, active = true) {
|
|
14348
14479
|
const [statusState, setStatusState] = (0, react.useState)(() => ({
|
|
14349
14480
|
contextKey: viewContextKey,
|
|
14350
14481
|
value: null,
|
|
@@ -14361,12 +14492,31 @@ window.__ModuleLoader__.load({
|
|
|
14361
14492
|
const statusLoading = currentStatusState.loading;
|
|
14362
14493
|
const statusError = currentStatusState.error;
|
|
14363
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
|
+
}, []);
|
|
14364
14512
|
return {
|
|
14365
14513
|
status,
|
|
14366
14514
|
statusLoading,
|
|
14367
14515
|
statusError,
|
|
14368
14516
|
loadStatus: (0, react.useCallback)(async () => {
|
|
14517
|
+
if (!mounted.current || !current.current.active || current.current.client !== client || current.current.viewContextKey !== viewContextKey) return;
|
|
14369
14518
|
const request = ++statusRequest.current;
|
|
14519
|
+
const isCurrent = () => request === statusRequest.current && mounted.current && current.current.active && current.current.client === client && current.current.viewContextKey === viewContextKey;
|
|
14370
14520
|
setStatusState((current) => ({
|
|
14371
14521
|
contextKey: viewContextKey,
|
|
14372
14522
|
value: current.contextKey === viewContextKey ? current.value : null,
|
|
@@ -14375,7 +14525,7 @@ window.__ModuleLoader__.load({
|
|
|
14375
14525
|
}));
|
|
14376
14526
|
try {
|
|
14377
14527
|
const summary = await client.statusSummary();
|
|
14378
|
-
if (
|
|
14528
|
+
if (!isCurrent()) return;
|
|
14379
14529
|
const needsDeepStatus = summary.memoryBodies?.some((body) => body.statusLoading === true) === true || summary.commandFound === true && summary.version === void 0;
|
|
14380
14530
|
setStatusState({
|
|
14381
14531
|
contextKey: viewContextKey,
|
|
@@ -14386,14 +14536,14 @@ window.__ModuleLoader__.load({
|
|
|
14386
14536
|
if (!needsDeepStatus) return;
|
|
14387
14537
|
try {
|
|
14388
14538
|
const next = await client.status();
|
|
14389
|
-
if (
|
|
14539
|
+
if (isCurrent()) setStatusState({
|
|
14390
14540
|
contextKey: viewContextKey,
|
|
14391
14541
|
value: next,
|
|
14392
14542
|
loading: false,
|
|
14393
14543
|
error: null
|
|
14394
14544
|
});
|
|
14395
14545
|
} catch (reason) {
|
|
14396
|
-
if (
|
|
14546
|
+
if (isCurrent()) setStatusState({
|
|
14397
14547
|
contextKey: viewContextKey,
|
|
14398
14548
|
value: summary,
|
|
14399
14549
|
loading: false,
|
|
@@ -14401,7 +14551,7 @@ window.__ModuleLoader__.load({
|
|
|
14401
14551
|
});
|
|
14402
14552
|
}
|
|
14403
14553
|
} catch (reason) {
|
|
14404
|
-
if (
|
|
14554
|
+
if (isCurrent()) setStatusState({
|
|
14405
14555
|
contextKey: viewContextKey,
|
|
14406
14556
|
value: null,
|
|
14407
14557
|
loading: false,
|
|
@@ -14413,24 +14563,60 @@ window.__ModuleLoader__.load({
|
|
|
14413
14563
|
}
|
|
14414
14564
|
//#endregion
|
|
14415
14565
|
//#region src/client/use-source-catalog.ts
|
|
14416
|
-
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
|
+
};
|
|
14417
14582
|
return {
|
|
14418
14583
|
sourceInstanceKey: instance.sourceInstanceKey,
|
|
14419
14584
|
revision: instance.revision,
|
|
14420
14585
|
...instance.assistance === void 0 || instance.assistance.length === 0 ? {} : { assistance: {
|
|
14421
14586
|
operations: instance.assistance,
|
|
14422
|
-
execute: (operation, input, options) => {
|
|
14423
|
-
|
|
14587
|
+
execute: async (operation, input, options) => {
|
|
14588
|
+
assertCurrent();
|
|
14589
|
+
const task = [
|
|
14424
14590
|
"agent-search",
|
|
14425
14591
|
"supervise",
|
|
14426
14592
|
"body-create",
|
|
14427
14593
|
"body-metadata-maintain"
|
|
14428
|
-
].includes(operation)
|
|
14594
|
+
].includes(operation);
|
|
14595
|
+
return write(() => (task ? taskClient : client).assistSource(instance.sourceInstanceKey, operation, input, options.expectedRevision, options.confirmed));
|
|
14429
14596
|
}
|
|
14430
14597
|
} },
|
|
14431
|
-
read: (operation, input = null) =>
|
|
14432
|
-
|
|
14433
|
-
|
|
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
|
+
}
|
|
14434
14620
|
};
|
|
14435
14621
|
}
|
|
14436
14622
|
/**
|
|
@@ -14438,45 +14624,90 @@ window.__ModuleLoader__.load({
|
|
|
14438
14624
|
* bound to each, the registered pages whose Source runs, and the Source types the descriptor-driven management
|
|
14439
14625
|
* page shows, those without a page of their own or with configuration fields.
|
|
14440
14626
|
*/
|
|
14441
|
-
function useSourceCatalog(client, taskClient, revision, viewContextKey, sourcePageEntries) {
|
|
14627
|
+
function useSourceCatalog(client, taskClient, revision, viewContextKey, sourcePageEntries, active = true, onSourceChanged) {
|
|
14442
14628
|
const [sourceCatalogState, setSourceCatalogState] = (0, react.useState)(() => ({
|
|
14443
14629
|
contextKey: viewContextKey,
|
|
14444
14630
|
value: null,
|
|
14445
14631
|
error: null
|
|
14446
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);
|
|
14447
14644
|
(0, react.useEffect)(() => {
|
|
14448
|
-
|
|
14645
|
+
mounted.current = true;
|
|
14646
|
+
return () => {
|
|
14647
|
+
mounted.current = false;
|
|
14648
|
+
};
|
|
14649
|
+
}, []);
|
|
14650
|
+
(0, react.useEffect)(() => {
|
|
14651
|
+
if (!active) return;
|
|
14652
|
+
let pending = true;
|
|
14449
14653
|
client.sourceManagementCatalog().then((value) => {
|
|
14450
|
-
if (
|
|
14654
|
+
if (pending) setSourceCatalogState({
|
|
14451
14655
|
contextKey: viewContextKey,
|
|
14452
14656
|
value,
|
|
14453
14657
|
error: null
|
|
14454
14658
|
});
|
|
14455
14659
|
}).catch((reason) => {
|
|
14456
|
-
if (
|
|
14660
|
+
if (pending) setSourceCatalogState({
|
|
14457
14661
|
contextKey: viewContextKey,
|
|
14458
14662
|
value: null,
|
|
14459
14663
|
error: message(reason)
|
|
14460
14664
|
});
|
|
14461
14665
|
});
|
|
14462
14666
|
return () => {
|
|
14463
|
-
|
|
14667
|
+
pending = false;
|
|
14464
14668
|
};
|
|
14465
14669
|
}, [
|
|
14670
|
+
active,
|
|
14466
14671
|
client,
|
|
14467
14672
|
revision,
|
|
14468
14673
|
viewContextKey
|
|
14469
14674
|
]);
|
|
14470
14675
|
const sourceCatalog = sourceCatalogState.contextKey === viewContextKey ? sourceCatalogState.value : null;
|
|
14471
14676
|
const sourceInstances = sourceCatalog?.sources ?? [];
|
|
14677
|
+
const bindings = (0, react.useRef)();
|
|
14472
14678
|
return {
|
|
14473
14679
|
sourceCatalogState,
|
|
14474
14680
|
sourceCatalog,
|
|
14475
14681
|
sourceInstances,
|
|
14476
|
-
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
|
+
}, [
|
|
14477
14705
|
client,
|
|
14706
|
+
onSourceChanged,
|
|
14707
|
+
sourceCatalog,
|
|
14478
14708
|
sourceInstances,
|
|
14479
|
-
taskClient
|
|
14709
|
+
taskClient,
|
|
14710
|
+
viewContextKey
|
|
14480
14711
|
]),
|
|
14481
14712
|
visibleSourcePages: (0, react.useMemo)(() => {
|
|
14482
14713
|
const visibleTypes = new Set(sourceInstances.map((source) => source.sourceTypeId));
|
|
@@ -14519,9 +14750,13 @@ window.__ModuleLoader__.load({
|
|
|
14519
14750
|
* carries its input into a Source page, and a page follows its layer while the layer's Source stops and runs again.
|
|
14520
14751
|
*/
|
|
14521
14752
|
function useWorkspaceNavigation(options) {
|
|
14522
|
-
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;
|
|
14523
14754
|
const t = useT();
|
|
14524
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]);
|
|
14525
14760
|
(0, react.useEffect)(() => {
|
|
14526
14761
|
if (page === "status" && home !== "status") setPage(home);
|
|
14527
14762
|
}, [home, page]);
|
|
@@ -14587,9 +14822,10 @@ window.__ModuleLoader__.load({
|
|
|
14587
14822
|
glyph: "◇",
|
|
14588
14823
|
primary: true
|
|
14589
14824
|
})));
|
|
14590
|
-
return entries;
|
|
14825
|
+
return entries.filter((entry) => entry.sourceTypeId === void 0 || !disabledTypes.has(entry.sourceTypeId));
|
|
14591
14826
|
}, [
|
|
14592
14827
|
dashboard,
|
|
14828
|
+
disabledTypes,
|
|
14593
14829
|
managedSourceTypes,
|
|
14594
14830
|
sourceName,
|
|
14595
14831
|
sourcePageEntries,
|
|
@@ -14597,6 +14833,11 @@ window.__ModuleLoader__.load({
|
|
|
14597
14833
|
visibleSourcePages
|
|
14598
14834
|
]);
|
|
14599
14835
|
(0, react.useEffect)(() => {
|
|
14836
|
+
if (isDisabled(page)) {
|
|
14837
|
+
setPage(home);
|
|
14838
|
+
setNavigationInput(void 0);
|
|
14839
|
+
return;
|
|
14840
|
+
}
|
|
14600
14841
|
if (sourceCatalog === null) return;
|
|
14601
14842
|
const entryId = sourcePageEntryId(page);
|
|
14602
14843
|
const managedTypeId = managedSourceTypeId(page);
|
|
@@ -14613,6 +14854,7 @@ window.__ModuleLoader__.load({
|
|
|
14613
14854
|
});
|
|
14614
14855
|
}
|
|
14615
14856
|
}, [
|
|
14857
|
+
isDisabled,
|
|
14616
14858
|
managedSourceTypes,
|
|
14617
14859
|
page,
|
|
14618
14860
|
sourcePageEntries,
|
|
@@ -14629,6 +14871,11 @@ window.__ModuleLoader__.load({
|
|
|
14629
14871
|
}, [viewContextKey]);
|
|
14630
14872
|
/** Anchors address Source page ids; no Source component is imported here. */
|
|
14631
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
|
+
}
|
|
14632
14879
|
setNavigationInput({
|
|
14633
14880
|
page: anchor.page,
|
|
14634
14881
|
value: {
|
|
@@ -14637,7 +14884,11 @@ window.__ModuleLoader__.load({
|
|
|
14637
14884
|
}
|
|
14638
14885
|
});
|
|
14639
14886
|
selectPage(anchor.page === "status" ? "status" : sourcePage(anchor.page));
|
|
14640
|
-
}, [
|
|
14887
|
+
}, [
|
|
14888
|
+
home,
|
|
14889
|
+
isDisabled,
|
|
14890
|
+
selectPage
|
|
14891
|
+
]);
|
|
14641
14892
|
(0, react.useEffect)(() => {
|
|
14642
14893
|
const held = consumeMnemonAnchor(sessionId, accepts);
|
|
14643
14894
|
if (held !== null) applyAnchor(held);
|
|
@@ -14648,7 +14899,7 @@ window.__ModuleLoader__.load({
|
|
|
14648
14899
|
accepts
|
|
14649
14900
|
]);
|
|
14650
14901
|
return {
|
|
14651
|
-
page,
|
|
14902
|
+
page: isDisabled(page) ? home : page,
|
|
14652
14903
|
navigationInput,
|
|
14653
14904
|
openTab,
|
|
14654
14905
|
sourceNavigationEntries
|
|
@@ -14789,6 +15040,41 @@ window.__ModuleLoader__.load({
|
|
|
14789
15040
|
})]
|
|
14790
15041
|
});
|
|
14791
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
|
+
}
|
|
14792
15078
|
function SourceDisabledPage(props) {
|
|
14793
15079
|
const t = useT();
|
|
14794
15080
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -14901,12 +15187,19 @@ window.__ModuleLoader__.load({
|
|
|
14901
15187
|
return t(kind === "runtime" ? "status.storageRuntime" : kind === "memory-bodies" ? "status.storageSpaces" : kind === "documents" ? "status.storageDocuments" : "status.storageState");
|
|
14902
15188
|
}
|
|
14903
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;
|
|
14904
15194
|
const t = props.t ?? translateZh;
|
|
14905
15195
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(I18nContext.Provider, {
|
|
14906
15196
|
value: t,
|
|
14907
15197
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LocaleContext.Provider, {
|
|
14908
15198
|
value: props.locale ?? "zh",
|
|
14909
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonWorkspace, {
|
|
15199
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonWorkspace, {
|
|
15200
|
+
...visibleProps.current,
|
|
15201
|
+
active
|
|
15202
|
+
})
|
|
14910
15203
|
})
|
|
14911
15204
|
});
|
|
14912
15205
|
}
|
|
@@ -14919,7 +15212,10 @@ window.__ModuleLoader__.load({
|
|
|
14919
15212
|
const componentRevision = (0, react.useSyncExternalStore)(componentSignal.subscribe, componentSignal.getSnapshot, componentSignal.getSnapshot);
|
|
14920
15213
|
const subscribeSettings = (0, react.useCallback)((listener) => settingsScope.subscribe(listener), [settingsScope]);
|
|
14921
15214
|
const getSettingsSnapshot = (0, react.useCallback)(() => settingsScope.getSnapshot(), [settingsScope]);
|
|
14922
|
-
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;
|
|
14923
15219
|
const subscribeSourcePages = (0, react.useCallback)((listener) => sourcePageDirectory.subscribe(listener), [sourcePageDirectory]);
|
|
14924
15220
|
const getSourcePages = (0, react.useCallback)(() => sourcePageDirectory.getSnapshot(), [sourcePageDirectory]);
|
|
14925
15221
|
const allSourcePageEntries = (0, react.useSyncExternalStore)(subscribeSourcePages, getSourcePages, getSourcePages);
|
|
@@ -14942,7 +15238,15 @@ window.__ModuleLoader__.load({
|
|
|
14942
15238
|
surface,
|
|
14943
15239
|
workspaceId
|
|
14944
15240
|
]);
|
|
14945
|
-
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([
|
|
14946
15250
|
settingsSnapshot.value?.storageScope ?? null,
|
|
14947
15251
|
settingsSnapshot.value?.dataDir ?? null,
|
|
14948
15252
|
settingsSnapshot.value?.runtimeUserScope ?? null
|
|
@@ -14962,9 +15266,11 @@ window.__ModuleLoader__.load({
|
|
|
14962
15266
|
const inset = topInset ?? (header === null ? 0 : header.getBoundingClientRect().height + 12);
|
|
14963
15267
|
canvas.scrollTop = Math.max(0, canvas.scrollTop + element.getBoundingClientRect().top - canvas.getBoundingClientRect().top - inset);
|
|
14964
15268
|
}, []);
|
|
14965
|
-
const { status, statusLoading, statusError, loadStatus } = useWorkspaceStatus(client, viewContextKey);
|
|
15269
|
+
const { status, statusLoading, statusError, loadStatus } = useWorkspaceStatus(client, viewContextKey, active);
|
|
14966
15270
|
const [revision, setRevision] = (0, react.useState)(0);
|
|
14967
|
-
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]));
|
|
14968
15274
|
const managedSourceTypes = (0, react.useMemo)(() => allManagedSourceTypes.filter(([sourceTypeId]) => shows(sourceTypeId)), [allManagedSourceTypes, shows]);
|
|
14969
15275
|
const [selectedSourceInstances, setSelectedSourceInstances] = (0, react.useState)({});
|
|
14970
15276
|
const stoppedLayers = status?.memorySystem?.configuration.layers;
|
|
@@ -14980,6 +15286,7 @@ window.__ModuleLoader__.load({
|
|
|
14980
15286
|
]);
|
|
14981
15287
|
const [dashboard, setDashboard] = (0, react.useState)(null);
|
|
14982
15288
|
(0, react.useEffect)(() => {
|
|
15289
|
+
if (!active) return;
|
|
14983
15290
|
let current = true;
|
|
14984
15291
|
client.viewDashboard().then((value) => {
|
|
14985
15292
|
if (current) setDashboard(Array.isArray(value?.entries) ? value : null);
|
|
@@ -14990,6 +15297,7 @@ window.__ModuleLoader__.load({
|
|
|
14990
15297
|
current = false;
|
|
14991
15298
|
};
|
|
14992
15299
|
}, [
|
|
15300
|
+
active,
|
|
14993
15301
|
client,
|
|
14994
15302
|
revision,
|
|
14995
15303
|
componentRevision
|
|
@@ -15002,8 +15310,25 @@ window.__ModuleLoader__.load({
|
|
|
15002
15310
|
const component = dashboard?.entries.find((entry) => entry.roles.includes("strategy") && entry.typeId === typeId);
|
|
15003
15311
|
return component === void 0 ? typeId : componentCopy(component, locale).label;
|
|
15004
15312
|
};
|
|
15005
|
-
const switchedOff = (0, react.useMemo)(() =>
|
|
15006
|
-
|
|
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);
|
|
15007
15332
|
const home = focusPage === void 0 ? "status" : `source:${focusPage.id}`;
|
|
15008
15333
|
const { page, navigationInput, openTab, sourceNavigationEntries } = useWorkspaceNavigation({
|
|
15009
15334
|
sessionId,
|
|
@@ -15014,6 +15339,7 @@ window.__ModuleLoader__.load({
|
|
|
15014
15339
|
visibleSourcePages,
|
|
15015
15340
|
managedSourceTypes,
|
|
15016
15341
|
stoppedTypes,
|
|
15342
|
+
disabledTypes,
|
|
15017
15343
|
dashboard,
|
|
15018
15344
|
sourceName,
|
|
15019
15345
|
showWorkspaceToast,
|
|
@@ -15021,34 +15347,57 @@ window.__ModuleLoader__.load({
|
|
|
15021
15347
|
home
|
|
15022
15348
|
});
|
|
15023
15349
|
(0, react.useEffect)(() => {
|
|
15024
|
-
loadStatus();
|
|
15025
|
-
}, [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
|
+
};
|
|
15026
15374
|
const mutate = (0, react.useCallback)(() => {
|
|
15375
|
+
if (!isCurrentView()) return;
|
|
15027
15376
|
setRevision((value) => value + 1);
|
|
15028
15377
|
loadStatus();
|
|
15029
|
-
}, [loadStatus]);
|
|
15378
|
+
}, [isCurrentView, loadStatus]);
|
|
15030
15379
|
const refreshAll = mutate;
|
|
15031
15380
|
const [refreshKey, setRefreshKey] = (0, react.useState)(0);
|
|
15032
15381
|
const refreshPage = (0, react.useCallback)(() => {
|
|
15033
15382
|
setRefreshKey((value) => value + 1);
|
|
15034
15383
|
refreshAll();
|
|
15035
15384
|
}, [refreshAll]);
|
|
15036
|
-
const shown = (0, react.useRef)(active);
|
|
15037
|
-
(0, react.useEffect)(() => {
|
|
15038
|
-
if (active && !shown.current) refreshAll();
|
|
15039
|
-
shown.current = active;
|
|
15040
|
-
}, [active, refreshAll]);
|
|
15041
15385
|
const seenComponents = (0, react.useRef)(componentRevision);
|
|
15042
15386
|
(0, react.useEffect)(() => {
|
|
15043
|
-
if (componentRevision === seenComponents.current) return;
|
|
15387
|
+
if (!active || componentRevision === seenComponents.current) return;
|
|
15044
15388
|
seenComponents.current = componentRevision;
|
|
15045
15389
|
refreshPage();
|
|
15046
|
-
}, [
|
|
15390
|
+
}, [
|
|
15391
|
+
active,
|
|
15392
|
+
componentRevision,
|
|
15393
|
+
refreshPage
|
|
15394
|
+
]);
|
|
15047
15395
|
const seenSettings = (0, react.useRef)({
|
|
15048
15396
|
revision: settingsSnapshot.revision,
|
|
15049
15397
|
context: viewContextKey
|
|
15050
15398
|
});
|
|
15051
15399
|
(0, react.useEffect)(() => {
|
|
15400
|
+
if (!active) return;
|
|
15052
15401
|
const seen = seenSettings.current;
|
|
15053
15402
|
seenSettings.current = {
|
|
15054
15403
|
revision: settingsSnapshot.revision,
|
|
@@ -15056,6 +15405,7 @@ window.__ModuleLoader__.load({
|
|
|
15056
15405
|
};
|
|
15057
15406
|
if (seen.revision !== settingsSnapshot.revision && seen.context === viewContextKey) refreshAll();
|
|
15058
15407
|
}, [
|
|
15408
|
+
active,
|
|
15059
15409
|
settingsSnapshot.revision,
|
|
15060
15410
|
viewContextKey,
|
|
15061
15411
|
refreshAll
|
|
@@ -15082,9 +15432,6 @@ window.__ModuleLoader__.load({
|
|
|
15082
15432
|
})),
|
|
15083
15433
|
onChange: workspaceSelection.onSelect
|
|
15084
15434
|
});
|
|
15085
|
-
const savedLayers = settingsSnapshot.value?.memoryTopology?.layers;
|
|
15086
|
-
const configuredLayers = status?.memorySystem?.configuration.layers;
|
|
15087
|
-
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)));
|
|
15088
15435
|
const notice = compositionNotice(status?.memorySystem, t);
|
|
15089
15436
|
const memoryOff = status?.memorySystem !== void 0 && !status.memorySystem.serving;
|
|
15090
15437
|
const composingType = status?.memorySystem?.serving === true ? status.memorySystem.strategyTypeId : void 0;
|
|
@@ -15108,6 +15455,7 @@ window.__ModuleLoader__.load({
|
|
|
15108
15455
|
value: { evolution: skillsSnapshot.value?.evolution ?? DEFAULT_SKILLS_CONFIG.evolution },
|
|
15109
15456
|
writable: skillsSnapshot.writable,
|
|
15110
15457
|
replace: async (value) => {
|
|
15458
|
+
assertCurrentView();
|
|
15111
15459
|
const evolution = jsonRecord(value)?.evolution;
|
|
15112
15460
|
if (typeof evolution !== "boolean") throw new Error("Skills preferences take evolution as a boolean");
|
|
15113
15461
|
await skillsScope.mutate([{
|
|
@@ -15128,6 +15476,7 @@ window.__ModuleLoader__.load({
|
|
|
15128
15476
|
} })),
|
|
15129
15477
|
writable: settingsSnapshot.writable,
|
|
15130
15478
|
replace: async (value) => {
|
|
15479
|
+
assertCurrentView();
|
|
15131
15480
|
const requested = jsonRecord(value)?.persistenceStrategy;
|
|
15132
15481
|
const strategy = requested === void 0 ? void 0 : jsonRecord(requested);
|
|
15133
15482
|
if (strategy === void 0) throw new Error("Persistence strategy preferences must be an object");
|
|
@@ -15153,6 +15502,7 @@ window.__ModuleLoader__.load({
|
|
|
15153
15502
|
sourceInstances: instances,
|
|
15154
15503
|
writable: writeEnabled,
|
|
15155
15504
|
locale,
|
|
15505
|
+
active,
|
|
15156
15506
|
...management === void 0 ? {} : { management },
|
|
15157
15507
|
...sessionId === void 0 ? {} : { sessionId },
|
|
15158
15508
|
...workspaceId === void 0 ? {} : { workspaceId },
|
|
@@ -15359,15 +15709,18 @@ window.__ModuleLoader__.load({
|
|
|
15359
15709
|
children: status?.restartPending !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RestartReminder, { pending: status.restartPending })
|
|
15360
15710
|
}),
|
|
15361
15711
|
workspaceToast.element,
|
|
15362
|
-
|
|
15363
|
-
|
|
15364
|
-
|
|
15365
|
-
children: t("workspace.remoteReadOnly")
|
|
15712
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(OrdinaryNotices, {
|
|
15713
|
+
remoteReadOnly,
|
|
15714
|
+
reviewPaused: focused ? void 0 : status?.lifecycle?.current?.idleReviewBlocked
|
|
15366
15715
|
}),
|
|
15367
|
-
!focused && status?.lifecycle?.current?.
|
|
15716
|
+
!focused && status?.lifecycle?.current?.idleReviewWatermark !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
15368
15717
|
className: MnemonView_module_css_default.alert,
|
|
15369
|
-
role: "status",
|
|
15370
|
-
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) }) })]
|
|
15371
15724
|
}),
|
|
15372
15725
|
!focused && status?.lifecycle?.current?.lastError !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
15373
15726
|
className: MnemonView_module_css_default.alert,
|
|
@@ -15405,6 +15758,10 @@ window.__ModuleLoader__.load({
|
|
|
15405
15758
|
"data-testid": "mnemon-canvas",
|
|
15406
15759
|
"data-lock-page-header": activeSourcePage?.navigation?.stickyHeader !== false ? "" : void 0,
|
|
15407
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
|
+
}),
|
|
15408
15765
|
page === "status" && !focused && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WorkbenchStatusContext.Provider, {
|
|
15409
15766
|
value: status,
|
|
15410
15767
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StatusPage, {
|
|
@@ -16490,38 +16847,6 @@ window.__ModuleLoader__.load({
|
|
|
16490
16847
|
}
|
|
16491
16848
|
};
|
|
16492
16849
|
//#endregion
|
|
16493
|
-
//#region src/client/change-signal.ts
|
|
16494
|
-
/**
|
|
16495
|
-
* A revision other surfaces bump when something they cannot observe directly
|
|
16496
|
-
* changed, such as a component switched on DSH's Plugins page. Readers reload
|
|
16497
|
-
* their own data when the revision moves.
|
|
16498
|
-
*/
|
|
16499
|
-
var MnemonChangeSignal = class {
|
|
16500
|
-
settleMs;
|
|
16501
|
-
revision = 0;
|
|
16502
|
-
pending;
|
|
16503
|
-
listeners = /* @__PURE__ */ new Set();
|
|
16504
|
-
constructor(settleMs = 100) {
|
|
16505
|
-
this.settleMs = settleMs;
|
|
16506
|
-
}
|
|
16507
|
-
getSnapshot = () => this.revision;
|
|
16508
|
-
subscribe = (listener) => {
|
|
16509
|
-
this.listeners.add(listener);
|
|
16510
|
-
return () => {
|
|
16511
|
-
this.listeners.delete(listener);
|
|
16512
|
-
};
|
|
16513
|
-
};
|
|
16514
|
-
/** A burst of announcements, such as one per component a write switched, moves the revision once. */
|
|
16515
|
-
bump = () => {
|
|
16516
|
-
if (this.pending !== void 0) return;
|
|
16517
|
-
this.pending = setTimeout(() => {
|
|
16518
|
-
this.pending = void 0;
|
|
16519
|
-
this.revision += 1;
|
|
16520
|
-
for (const listener of [...this.listeners]) listener();
|
|
16521
|
-
}, this.settleMs);
|
|
16522
|
-
};
|
|
16523
|
-
};
|
|
16524
|
-
//#endregion
|
|
16525
16850
|
//#region src/client/settings.ts
|
|
16526
16851
|
var MnemonSettingsScope = class {
|
|
16527
16852
|
connection;
|
|
@@ -17507,6 +17832,7 @@ window.__ModuleLoader__.load({
|
|
|
17507
17832
|
inject: (sessionId) => ({
|
|
17508
17833
|
...typeof sessionId === "string" && sessionId !== "" ? { sessionId } : {},
|
|
17509
17834
|
connection: ctx.connection,
|
|
17835
|
+
componentChanges: seats.components,
|
|
17510
17836
|
localeRuntime: ctx.locale,
|
|
17511
17837
|
t: translate
|
|
17512
17838
|
})
|