From c2c5946a12e59b52a8ff33c083dd5d2e94ca83a7 Mon Sep 17 00:00:00 2001 From: Grivn Date: Sun, 16 Aug 2026 14:30:01 +0800 Subject: [PATCH 01/11] build: make generated client bundle deterministic --- lib/client.js | 492 ++++++++++++------------- package.json | 3 +- scripts/verify-deterministic-build.mjs | 42 +++ tsdown.config.ts | 3 +- 4 files changed, 292 insertions(+), 248 deletions(-) create mode 100644 scripts/verify-deterministic-build.mjs diff --git a/lib/client.js b/lib/client.js index b297f9f..64d1544 100644 --- a/lib/client.js +++ b/lib/client.js @@ -47,42 +47,42 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonSettingsCard_module_css_default = { - "sectionHeading": "pDTviq_sectionHeading", + "actions": "pDTviq_actions", + "actionsVisible": "pDTviq_actionsVisible", + "activePath": "pDTviq_activePath", + "check": "pDTviq_check", + "choiceCard": "pDTviq_choiceCard", + "choiceFace": "pDTviq_choiceFace", "choiceGrid": "pDTviq_choiceGrid", - "error": "pDTviq_error", - "pillButton": "pDTviq_pillButton", - "scopeMeta": "pDTviq_scopeMeta", - "rowGroup": "pDTviq_rowGroup", + "directoryControl": "pDTviq_directoryControl", + "directoryInput": "pDTviq_directoryInput", + "discard": "pDTviq_discard", "displayGrid": "pDTviq_displayGrid", + "error": "pDTviq_error", "feedback": "pDTviq_feedback", - "success": "pDTviq_success", - "actionsVisible": "pDTviq_actionsVisible", - "page": "pDTviq_page", - "loading": "pDTviq_loading", - "rowActions": "pDTviq_rowActions", "importBar": "pDTviq_importBar", - "choiceFace": "pDTviq_choiceFace", - "switch": "pDTviq_switch", - "activePath": "pDTviq_activePath", - "directoryControl": "pDTviq_directoryControl", + "loading": "pDTviq_loading", "packFeedback": "pDTviq_packFeedback", - "toggleRow": "pDTviq_toggleRow", - "primaryPill": "pDTviq_primaryPill", - "textButton": "pDTviq_textButton", - "section": "pDTviq_section", "packSuccess": "pDTviq_packSuccess", - "settingsNote": "pDTviq_settingsNote", - "directoryInput": "pDTviq_directoryInput", - "settingCopy": "pDTviq_settingCopy", + "page": "pDTviq_page", + "pageHeader": "pDTviq_pageHeader", + "pillButton": "pDTviq_pillButton", + "primaryPill": "pDTviq_primaryPill", "readOnly": "pDTviq_readOnly", - "discard": "pDTviq_discard", - "choiceCard": "pDTviq_choiceCard", + "rowActions": "pDTviq_rowActions", + "rowGroup": "pDTviq_rowGroup", "save": "pDTviq_save", - "actions": "pDTviq_actions", - "check": "pDTviq_check", + "scopeMeta": "pDTviq_scopeMeta", + "section": "pDTviq_section", + "sectionHeading": "pDTviq_sectionHeading", + "settingCopy": "pDTviq_settingCopy", "settingRow": "pDTviq_settingRow", - "visuallyHidden": "pDTviq_visuallyHidden", - "pageHeader": "pDTviq_pageHeader" + "settingsNote": "pDTviq_settingsNote", + "success": "pDTviq_success", + "switch": "pDTviq_switch", + "textButton": "pDTviq_textButton", + "toggleRow": "pDTviq_toggleRow", + "visuallyHidden": "pDTviq_visuallyHidden" }; //#endregion //#region src/client/locales.ts @@ -3090,33 +3090,33 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonSidebarView_module_css_default = { + "bodyCardFooter": "P5oC1W_bodyCardFooter", + "bodyCardHeader": "P5oC1W_bodyCardHeader", + "bodyCardIdentity": "P5oC1W_bodyCardIdentity", + "bodyCardMeta": "P5oC1W_bodyCardMeta", + "bodyCardStats": "P5oC1W_bodyCardStats", + "bodyDirectoryActions": "P5oC1W_bodyDirectoryActions", + "brand": "P5oC1W_brand", + "canvas": "P5oC1W_canvas", + "headerActions": "P5oC1W_headerActions", + "inspectorGlyph": "P5oC1W_inspectorGlyph", + "itemActionButton": "P5oC1W_itemActionButton", + "itemDangerAction": "P5oC1W_itemDangerAction", + "itemEditAction": "P5oC1W_itemEditAction", "masthead": "P5oC1W_masthead", - "workspaceMismatch": "P5oC1W_workspaceMismatch", "memoryNavigation": "P5oC1W_memoryNavigation", "memoryTabs": "P5oC1W_memoryTabs", - "shell": "P5oC1W_shell", - "itemActionButton": "P5oC1W_itemActionButton", + "memoryWorkspace": "P5oC1W_memoryWorkspace", + "memoryWriteButton": "P5oC1W_memoryWriteButton", "modal": "P5oC1W_modal", - "bodyCardIdentity": "P5oC1W_bodyCardIdentity", - "itemEditAction": "P5oC1W_itemEditAction", "modalBackdrop": "P5oC1W_modalBackdrop", "nav": "P5oC1W_nav", - "bodyCardMeta": "P5oC1W_bodyCardMeta", - "headerActions": "P5oC1W_headerActions", - "bodyCardFooter": "P5oC1W_bodyCardFooter", - "bodyCardStats": "P5oC1W_bodyCardStats", - "canvas": "P5oC1W_canvas", - "itemDangerAction": "P5oC1W_itemDangerAction", - "workspacePicker": "P5oC1W_workspacePicker", - "inspectorGlyph": "P5oC1W_inspectorGlyph", + "pageHeader": "P5oC1W_pageHeader", + "shell": "P5oC1W_shell", "statusCluster": "P5oC1W_statusCluster", "topNavigation": "P5oC1W_topNavigation", - "bodyDirectoryActions": "P5oC1W_bodyDirectoryActions", - "bodyCardHeader": "P5oC1W_bodyCardHeader", - "brand": "P5oC1W_brand", - "memoryWorkspace": "P5oC1W_memoryWorkspace", - "memoryWriteButton": "P5oC1W_memoryWriteButton", - "pageHeader": "P5oC1W_pageHeader" + "workspaceMismatch": "P5oC1W_workspaceMismatch", + "workspacePicker": "P5oC1W_workspacePicker" }; //#endregion //#region src/client/MnemonViewAppearance.tsx @@ -3195,212 +3195,212 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonView_module_css_default = { - "previewMeta": "OkhtbG_previewMeta", - "pageHeaderMeta": "OkhtbG_pageHeaderMeta", - "searchActions": "OkhtbG_searchActions", - "statusSectionHeader": "OkhtbG_statusSectionHeader", - "checking": "OkhtbG_checking", - "pageHeader": "OkhtbG_pageHeader", - "modal": "OkhtbG_modal", - "storageAreaMetric": "OkhtbG_storageAreaMetric", - "bodyGrid": "OkhtbG_bodyGrid", - "categoryChip": "OkhtbG_categoryChip", + "advancedWrite": "OkhtbG_advancedWrite", + "agentAnswer": "OkhtbG_agentAnswer", + "agentAnswerHeading": "OkhtbG_agentAnswerHeading", + "agentCitations": "OkhtbG_agentCitations", + "alert": "OkhtbG_alert", + "backButton": "OkhtbG_backButton", "badge": "OkhtbG_badge", - "offline": "OkhtbG_offline", - "modalBackdrop": "OkhtbG_modalBackdrop", - "topNavigation": "OkhtbG_topNavigation", - "bodyDirectoryHeader": "OkhtbG_bodyDirectoryHeader", - "graphSvg": "OkhtbG_graphSvg", - "manualForm": "OkhtbG_manualForm", - "writebackLayout": "OkhtbG_writebackLayout", - "relatedPane": "OkhtbG_relatedPane", - "formActions": "OkhtbG_formActions", - "iconButton": "OkhtbG_iconButton", - "cardKicker": "OkhtbG_cardKicker", - "relatedSource": "OkhtbG_relatedSource", - "nodeLabel": "OkhtbG_nodeLabel", - "results": "OkhtbG_results", - "supervisedForm": "OkhtbG_supervisedForm", - "supervisedComposer": "OkhtbG_supervisedComposer", - "previewBody": "OkhtbG_previewBody", - "supervisedHeading": "OkhtbG_supervisedHeading", - "entities": "OkhtbG_entities", - "versionNumbers": "OkhtbG_versionNumbers", - "inspectorTitle": "OkhtbG_inspectorTitle", - "formGrid": "OkhtbG_formGrid", - "headerActions": "OkhtbG_headerActions", + "badges": "OkhtbG_badges", + "bodyCard": "OkhtbG_bodyCard", + "bodyCardActions": "OkhtbG_bodyCardActions", + "bodyCardTop": "OkhtbG_bodyCardTop", + "bodyCreate": "OkhtbG_bodyCreate", "bodyDeleteConfirm": "OkhtbG_bodyDeleteConfirm", - "id": "OkhtbG_id", - "dangerSolidButton": "OkhtbG_dangerSolidButton", - "runtimeFootnote": "OkhtbG_runtimeFootnote", + "bodyDeleteContent": "OkhtbG_bodyDeleteContent", + "bodyDeleteSummary": "OkhtbG_bodyDeleteSummary", + "bodyDirectory": "OkhtbG_bodyDirectory", + "bodyDirectoryEmpty": "OkhtbG_bodyDirectoryEmpty", + "bodyDirectoryHeader": "OkhtbG_bodyDirectoryHeader", + "bodyDirectoryPath": "OkhtbG_bodyDirectoryPath", + "bodyEdit": "OkhtbG_bodyEdit", + "bodyEditActions": "OkhtbG_bodyEditActions", + "bodyEditButton": "OkhtbG_bodyEditButton", + "bodyGrid": "OkhtbG_bodyGrid", "bodyHealth": "OkhtbG_bodyHealth", - "liveDot": "OkhtbG_liveDot", - "documentCapacity": "OkhtbG_documentCapacity", - "loadingPanel": "OkhtbG_loadingPanel", - "versionList": "OkhtbG_versionList", - "tags": "OkhtbG_tags", - "runtimeTarget": "OkhtbG_runtimeTarget", - "sectionHeading": "OkhtbG_sectionHeading", - "runtimeUnifiedList": "OkhtbG_runtimeUnifiedList", - "masthead": "OkhtbG_masthead", - "graphInspector": "OkhtbG_graphInspector", - "documentReader": "OkhtbG_documentReader", - "listNotice": "OkhtbG_listNotice", - "versionLocation": "OkhtbG_versionLocation", - "statusCluster": "OkhtbG_statusCluster", - "graphEdge": "OkhtbG_graphEdge", - "runtimeEntry": "OkhtbG_runtimeEntry", - "canvas": "OkhtbG_canvas", - "manualActions": "OkhtbG_manualActions", - "runtimeSummaryCard": "OkhtbG_runtimeSummaryCard", - "runtimeBrowserToolbar": "OkhtbG_runtimeBrowserToolbar", - "resultLayout": "OkhtbG_resultLayout", - "entityLayout": "OkhtbG_entityLayout", + "bodySignal": "OkhtbG_bodySignal", + "bodySwitch": "OkhtbG_bodySwitch", "bodySwitchTrack": "OkhtbG_bodySwitchTrack", - "inspectorActions": "OkhtbG_inspectorActions", - "versionResult": "OkhtbG_versionResult", - "graphLegend": "OkhtbG_graphLegend", - "telemetry": "OkhtbG_telemetry", - "emptyGlyph": "OkhtbG_emptyGlyph", - "bodyDirectoryPath": "OkhtbG_bodyDirectoryPath", - "runtimeEntryTarget": "OkhtbG_runtimeEntryTarget", + "brand": "OkhtbG_brand", + "brandLogo": "OkhtbG_brandLogo", + "canvas": "OkhtbG_canvas", "capacityLine": "OkhtbG_capacityLine", - "singleColumn": "OkhtbG_singleColumn", - "agentAnswer": "OkhtbG_agentAnswer", - "bodySignal": "OkhtbG_bodySignal", - "emptyState": "OkhtbG_emptyState", - "runtimeBrowser": "OkhtbG_runtimeBrowser", - "phaseBadge": "OkhtbG_phaseBadge", - "agentAnswerHeading": "OkhtbG_agentAnswerHeading", - "sessionReady": "OkhtbG_sessionReady", - "muted": "OkhtbG_muted", - "inspectorHeading": "OkhtbG_inspectorHeading", - "confirmBar": "OkhtbG_confirmBar", - "secondaryButton": "OkhtbG_secondaryButton", - "bodyCreate": "OkhtbG_bodyCreate", - "navGroup": "OkhtbG_navGroup", + "cardActions": "OkhtbG_cardActions", + "cardKicker": "OkhtbG_cardKicker", "cardTop": "OkhtbG_cardTop", - "listToolbar": "OkhtbG_listToolbar", - "ghostButton": "OkhtbG_ghostButton", - "runtimeEntries": "OkhtbG_runtimeEntries", + "categoryChip": "OkhtbG_categoryChip", + "checking": "OkhtbG_checking", + "compactListProgress": "OkhtbG_compactListProgress", + "confirmBar": "OkhtbG_confirmBar", + "content": "OkhtbG_content", + "dangerButton": "OkhtbG_dangerButton", + "dangerSolidButton": "OkhtbG_dangerSolidButton", + "documentArchiveReceipt": "OkhtbG_documentArchiveReceipt", + "documentCapacity": "OkhtbG_documentCapacity", + "documentDanger": "OkhtbG_documentDanger", + "documentDetail": "OkhtbG_documentDetail", + "documentEditor": "OkhtbG_documentEditor", "documentEditorMeta": "OkhtbG_documentEditorMeta", - "navGroupDivider": "OkhtbG_navGroupDivider", - "previewOverlay": "OkhtbG_previewOverlay", - "entitySearch": "OkhtbG_entitySearch", - "inspectorTitleRow": "OkhtbG_inspectorTitleRow", - "online": "OkhtbG_online", - "bodyEditActions": "OkhtbG_bodyEditActions", - "graphPanel": "OkhtbG_graphPanel", - "previewHeading": "OkhtbG_previewHeading", - "workspacePicker": "OkhtbG_workspacePicker", - "sessionHint": "OkhtbG_sessionHint", - "workspace": "OkhtbG_workspace", - "documentSummary": "OkhtbG_documentSummary", - "markdownBody": "OkhtbG_markdownBody", - "bodyDeleteSummary": "OkhtbG_bodyDeleteSummary", - "graphGridLine": "OkhtbG_graphGridLine", - "bodyDeleteContent": "OkhtbG_bodyDeleteContent", - "writeGuide": "OkhtbG_writeGuide", - "bodyDirectoryEmpty": "OkhtbG_bodyDirectoryEmpty", - "runtimeScopeFilter": "OkhtbG_runtimeScopeFilter", - "runtimeEntryMeta": "OkhtbG_runtimeEntryMeta", - "spaceSummary": "OkhtbG_spaceSummary", + "documentList": "OkhtbG_documentList", "documentListEmpty": "OkhtbG_documentListEmpty", - "healthIndicator": "OkhtbG_healthIndicator", - "healthBad": "OkhtbG_healthBad", + "documentReader": "OkhtbG_documentReader", + "documentSources": "OkhtbG_documentSources", + "documentSummary": "OkhtbG_documentSummary", + "documentToolbar": "OkhtbG_documentToolbar", + "documentWorkspace": "OkhtbG_documentWorkspace", + "emptyGlyph": "OkhtbG_emptyGlyph", + "emptyState": "OkhtbG_emptyState", + "entities": "OkhtbG_entities", "entityHeading": "OkhtbG_entityHeading", - "loading": "OkhtbG_loading", - "bodyEditButton": "OkhtbG_bodyEditButton", - "page": "OkhtbG_page", - "bodyEdit": "OkhtbG_bodyEdit", - "inspectorMeta": "OkhtbG_inspectorMeta", - "entityResults": "OkhtbG_entityResults", + "entityLayout": "OkhtbG_entityLayout", "entityList": "OkhtbG_entityList", - "sessionMissing": "OkhtbG_sessionMissing", - "advancedWrite": "OkhtbG_advancedWrite", - "alert": "OkhtbG_alert", + "entityRail": "OkhtbG_entityRail", + "entityResults": "OkhtbG_entityResults", + "entitySearch": "OkhtbG_entitySearch", + "fieldWide": "OkhtbG_fieldWide", + "flowConnector": "OkhtbG_flowConnector", + "flowLegend": "OkhtbG_flowLegend", + "formActions": "OkhtbG_formActions", + "formGrid": "OkhtbG_formGrid", + "ghostButton": "OkhtbG_ghostButton", "graphBackdrop": "OkhtbG_graphBackdrop", - "documentSources": "OkhtbG_documentSources", - "content": "OkhtbG_content", - "storageRoot": "OkhtbG_storageRoot", - "storagePath": "OkhtbG_storagePath", - "statusHeaderActions": "OkhtbG_statusHeaderActions", - "mnemon-spin": "OkhtbG_mnemon-spin", - "bodyCardActions": "OkhtbG_bodyCardActions", - "runtimeNotice": "OkhtbG_runtimeNotice", - "bodyCard": "OkhtbG_bodyCard", - "shell": "OkhtbG_shell", - "badges": "OkhtbG_badges", + "graphCanvasControls": "OkhtbG_graphCanvasControls", + "graphEdge": "OkhtbG_graphEdge", + "graphFooter": "OkhtbG_graphFooter", + "graphGridLine": "OkhtbG_graphGridLine", + "graphInspector": "OkhtbG_graphInspector", + "graphLayout": "OkhtbG_graphLayout", + "graphLegend": "OkhtbG_graphLegend", + "graphNode": "OkhtbG_graphNode", + "graphPanel": "OkhtbG_graphPanel", + "graphSvg": "OkhtbG_graphSvg", + "graphToolbar": "OkhtbG_graphToolbar", + "graphViewport": "OkhtbG_graphViewport", + "headerActions": "OkhtbG_headerActions", + "healthBad": "OkhtbG_healthBad", + "healthGood": "OkhtbG_healthGood", + "healthIndicator": "OkhtbG_healthIndicator", "healthMuted": "OkhtbG_healthMuted", + "healthStrip": "OkhtbG_healthStrip", + "iconButton": "OkhtbG_iconButton", + "id": "OkhtbG_id", + "inlineError": "OkhtbG_inlineError", "insightCard": "OkhtbG_insightCard", - "workspaceMismatch": "OkhtbG_workspaceMismatch", - "flowLegend": "OkhtbG_flowLegend", - "bodyCardTop": "OkhtbG_bodyCardTop", - "runtimeComposerActions": "OkhtbG_runtimeComposerActions", - "documentDetail": "OkhtbG_documentDetail", - "flowConnector": "OkhtbG_flowConnector", - "agentCitations": "OkhtbG_agentCitations", - "documentToolbar": "OkhtbG_documentToolbar", - "statusDot": "OkhtbG_statusDot", - "storageFootnote": "OkhtbG_storageFootnote", - "documentEditor": "OkhtbG_documentEditor", - "nodeHalo": "OkhtbG_nodeHalo", - "graphToolbar": "OkhtbG_graphToolbar", - "versionDialogBody": "OkhtbG_versionDialogBody", - "brand": "OkhtbG_brand", - "versionError": "OkhtbG_versionError", + "inspectorActions": "OkhtbG_inspectorActions", "inspectorEmpty": "OkhtbG_inspectorEmpty", - "bodySwitch": "OkhtbG_bodySwitch", - "runtimeSummaryGrid": "OkhtbG_runtimeSummaryGrid", - "memoryList": "OkhtbG_memoryList", - "bodyDirectory": "OkhtbG_bodyDirectory", - "brandLogo": "OkhtbG_brandLogo", - "healthGood": "OkhtbG_healthGood", - "searchBar": "OkhtbG_searchBar", "inspectorEye": "OkhtbG_inspectorEye", - "fieldWide": "OkhtbG_fieldWide", - "telemetryMetric": "OkhtbG_telemetryMetric", - "backButton": "OkhtbG_backButton", - "nodeCore": "OkhtbG_nodeCore", - "inlineError": "OkhtbG_inlineError", - "documentWorkspace": "OkhtbG_documentWorkspace", - "graphFooter": "OkhtbG_graphFooter", - "documentDanger": "OkhtbG_documentDanger", - "dangerButton": "OkhtbG_dangerButton", - "compactListProgress": "OkhtbG_compactListProgress", - "runtimeEmpty": "OkhtbG_runtimeEmpty", + "inspectorHeading": "OkhtbG_inspectorHeading", + "inspectorLogo": "OkhtbG_inspectorLogo", + "inspectorMeta": "OkhtbG_inspectorMeta", + "inspectorTitle": "OkhtbG_inspectorTitle", + "inspectorTitleRow": "OkhtbG_inspectorTitleRow", + "listNotice": "OkhtbG_listNotice", + "listProgress": "OkhtbG_listProgress", + "listToolbar": "OkhtbG_listToolbar", + "liveDot": "OkhtbG_liveDot", + "loading": "OkhtbG_loading", + "loadingPanel": "OkhtbG_loadingPanel", + "manualActions": "OkhtbG_manualActions", + "manualForm": "OkhtbG_manualForm", + "markdownBody": "OkhtbG_markdownBody", + "masthead": "OkhtbG_masthead", + "memoryList": "OkhtbG_memoryList", + "mnemon-spin": "OkhtbG_mnemon-spin", + "modal": "OkhtbG_modal", + "modalBackdrop": "OkhtbG_modalBackdrop", + "muted": "OkhtbG_muted", "nav": "OkhtbG_nav", - "primaryButton": "OkhtbG_primaryButton", - "runtimeTargetDescription": "OkhtbG_runtimeTargetDescription", - "storageAreaGrid": "OkhtbG_storageAreaGrid", - "graphViewport": "OkhtbG_graphViewport", - "runtimeGrid": "OkhtbG_runtimeGrid", - "graphCanvasControls": "OkhtbG_graphCanvasControls", + "navGlyph": "OkhtbG_navGlyph", + "navGroup": "OkhtbG_navGroup", + "navGroupDivider": "OkhtbG_navGroupDivider", "nodeBodyLabel": "OkhtbG_nodeBodyLabel", - "searchControls": "OkhtbG_searchControls", - "cardActions": "OkhtbG_cardActions", + "nodeCore": "OkhtbG_nodeCore", + "nodeHalo": "OkhtbG_nodeHalo", + "nodeLabel": "OkhtbG_nodeLabel", + "offline": "OkhtbG_offline", + "online": "OkhtbG_online", + "page": "OkhtbG_page", + "pageHeader": "OkhtbG_pageHeader", + "pageHeaderMeta": "OkhtbG_pageHeaderMeta", + "phaseBadge": "OkhtbG_phaseBadge", + "previewBody": "OkhtbG_previewBody", + "previewDialog": "OkhtbG_previewDialog", + "previewHeading": "OkhtbG_previewHeading", + "previewMeta": "OkhtbG_previewMeta", + "previewOverlay": "OkhtbG_previewOverlay", + "primaryButton": "OkhtbG_primaryButton", + "queryField": "OkhtbG_queryField", + "relatedPane": "OkhtbG_relatedPane", + "relatedSource": "OkhtbG_relatedSource", + "resultLayout": "OkhtbG_resultLayout", + "results": "OkhtbG_results", + "runtimeBrowser": "OkhtbG_runtimeBrowser", + "runtimeBrowserToolbar": "OkhtbG_runtimeBrowserToolbar", + "runtimeComposer": "OkhtbG_runtimeComposer", + "runtimeComposerActions": "OkhtbG_runtimeComposerActions", "runtimeComposerHeading": "OkhtbG_runtimeComposerHeading", - "inspectorLogo": "OkhtbG_inspectorLogo", + "runtimeEmpty": "OkhtbG_runtimeEmpty", + "runtimeEntries": "OkhtbG_runtimeEntries", + "runtimeEntry": "OkhtbG_runtimeEntry", "runtimeEntryBadges": "OkhtbG_runtimeEntryBadges", - "queryField": "OkhtbG_queryField", - "documentList": "OkhtbG_documentList", - "storageUnavailable": "OkhtbG_storageUnavailable", - "versionChecking": "OkhtbG_versionChecking", - "documentArchiveReceipt": "OkhtbG_documentArchiveReceipt", - "runtimeReadOnly": "OkhtbG_runtimeReadOnly", + "runtimeEntryMeta": "OkhtbG_runtimeEntryMeta", + "runtimeEntryTarget": "OkhtbG_runtimeEntryTarget", "runtimeFilterQuery": "OkhtbG_runtimeFilterQuery", - "listProgress": "OkhtbG_listProgress", - "navGlyph": "OkhtbG_navGlyph", - "versionDialogActions": "OkhtbG_versionDialogActions", - "graphLayout": "OkhtbG_graphLayout", - "graphNode": "OkhtbG_graphNode", + "runtimeFootnote": "OkhtbG_runtimeFootnote", + "runtimeGrid": "OkhtbG_runtimeGrid", + "runtimeNotice": "OkhtbG_runtimeNotice", + "runtimeReadOnly": "OkhtbG_runtimeReadOnly", + "runtimeScopeFilter": "OkhtbG_runtimeScopeFilter", + "runtimeSummaryCard": "OkhtbG_runtimeSummaryCard", + "runtimeSummaryGrid": "OkhtbG_runtimeSummaryGrid", + "runtimeTarget": "OkhtbG_runtimeTarget", + "runtimeTargetDescription": "OkhtbG_runtimeTargetDescription", "runtimeTargetHeader": "OkhtbG_runtimeTargetHeader", - "healthStrip": "OkhtbG_healthStrip", + "runtimeUnifiedList": "OkhtbG_runtimeUnifiedList", + "searchActions": "OkhtbG_searchActions", + "searchBar": "OkhtbG_searchBar", + "searchControls": "OkhtbG_searchControls", + "secondaryButton": "OkhtbG_secondaryButton", + "sectionHeading": "OkhtbG_sectionHeading", + "sessionHint": "OkhtbG_sessionHint", + "sessionMissing": "OkhtbG_sessionMissing", + "sessionReady": "OkhtbG_sessionReady", + "shell": "OkhtbG_shell", + "singleColumn": "OkhtbG_singleColumn", + "spaceSummary": "OkhtbG_spaceSummary", + "statusCluster": "OkhtbG_statusCluster", + "statusDot": "OkhtbG_statusDot", + "statusHeaderActions": "OkhtbG_statusHeaderActions", + "statusSectionHeader": "OkhtbG_statusSectionHeader", + "storageAreaGrid": "OkhtbG_storageAreaGrid", + "storageAreaMetric": "OkhtbG_storageAreaMetric", "storageDomains": "OkhtbG_storageDomains", + "storageFootnote": "OkhtbG_storageFootnote", "storageMode": "OkhtbG_storageMode", - "entityRail": "OkhtbG_entityRail", - "runtimeComposer": "OkhtbG_runtimeComposer", - "previewDialog": "OkhtbG_previewDialog" + "storagePath": "OkhtbG_storagePath", + "storageRoot": "OkhtbG_storageRoot", + "storageUnavailable": "OkhtbG_storageUnavailable", + "supervisedComposer": "OkhtbG_supervisedComposer", + "supervisedForm": "OkhtbG_supervisedForm", + "supervisedHeading": "OkhtbG_supervisedHeading", + "tags": "OkhtbG_tags", + "telemetry": "OkhtbG_telemetry", + "telemetryMetric": "OkhtbG_telemetryMetric", + "topNavigation": "OkhtbG_topNavigation", + "versionChecking": "OkhtbG_versionChecking", + "versionDialogActions": "OkhtbG_versionDialogActions", + "versionDialogBody": "OkhtbG_versionDialogBody", + "versionError": "OkhtbG_versionError", + "versionList": "OkhtbG_versionList", + "versionLocation": "OkhtbG_versionLocation", + "versionNumbers": "OkhtbG_versionNumbers", + "versionResult": "OkhtbG_versionResult", + "workspace": "OkhtbG_workspace", + "workspaceMismatch": "OkhtbG_workspaceMismatch", + "workspacePicker": "OkhtbG_workspacePicker", + "writeGuide": "OkhtbG_writeGuide", + "writebackLayout": "OkhtbG_writebackLayout" }; //#endregion //#region src/client/MnemonView.tsx @@ -7772,18 +7772,18 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonTurnTail_module_css_default = { - "label": "t5hXpG_label", "bar": "t5hXpG_bar", - "metrics": "t5hXpG_metrics", "chevron": "t5hXpG_chevron", + "chevronOpen": "t5hXpG_chevronOpen", + "detailLabel": "t5hXpG_detailLabel", "details": "t5hXpG_details", - "tools": "t5hXpG_tools", + "failureMetric": "t5hXpG_failureMetric", + "label": "t5hXpG_label", "mark": "t5hXpG_mark", + "metrics": "t5hXpG_metrics", "root": "t5hXpG_root", - "detailLabel": "t5hXpG_detailLabel", "toolChip": "t5hXpG_toolChip", - "failureMetric": "t5hXpG_failureMetric", - "chevronOpen": "t5hXpG_chevronOpen" + "tools": "t5hXpG_tools" }; //#endregion //#region src/client/MnemonTurnTail.tsx @@ -7903,18 +7903,18 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonSaveAction_module_css_default = { - "truncated": "FDcGda_truncated", - "modalAction": "FDcGda_modalAction", - "modal": "FDcGda_modal", - "readOnly": "FDcGda_readOnly", - "modalContent": "FDcGda_modalContent", + "button": "FDcGda_button", "candidate": "FDcGda_candidate", "failure": "FDcGda_failure", "icon": "FDcGda_icon", - "wrap": "FDcGda_wrap", - "button": "FDcGda_button", + "modal": "FDcGda_modal", + "modalAction": "FDcGda_modalAction", + "modalContent": "FDcGda_modalContent", + "outcome": "FDcGda_outcome", + "readOnly": "FDcGda_readOnly", "status": "FDcGda_status", - "outcome": "FDcGda_outcome" + "truncated": "FDcGda_truncated", + "wrap": "FDcGda_wrap" }; //#endregion //#region src/client/MnemonSaveAction.tsx @@ -8194,10 +8194,10 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonWorkspace_module_css_default = { - "entryIcon": "MrFkOq_entryIcon", "entry": "MrFkOq_entry", - "panelView": "MrFkOq_panelView", - "entryLabel": "MrFkOq_entryLabel" + "entryIcon": "MrFkOq_entryIcon", + "entryLabel": "MrFkOq_entryLabel", + "panelView": "MrFkOq_panelView" }; //#endregion //#region src/client/sidebar-entry.ts diff --git a/package.json b/package.json index 51b3e36..2eeec58 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,8 @@ "prepublishOnly": "pnpm run verify", "typecheck": "tsc -p tsconfig.json --noEmit", "test": "vitest run", - "verify": "pnpm run typecheck && pnpm run test && pnpm run build" + "verify:build": "node scripts/verify-deterministic-build.mjs", + "verify": "pnpm run typecheck && pnpm run test && pnpm run verify:build" }, "dependencies": { "fflate": "^0.8.3", diff --git a/scripts/verify-deterministic-build.mjs b/scripts/verify-deterministic-build.mjs new file mode 100644 index 0000000..5031f21 --- /dev/null +++ b/scripts/verify-deterministic-build.mjs @@ -0,0 +1,42 @@ +import { createHash } from 'node:crypto' +import { readdir, readFile } from 'node:fs/promises' +import { join, relative, resolve } from 'node:path' +import { spawnSync } from 'node:child_process' + +const root = resolve(import.meta.dirname, '..') +const outputRoot = join(root, 'lib') + +function build() { + const npmExecPath = process.env.npm_execpath + if (npmExecPath === undefined) throw new Error('Run this check through the package manager') + const result = spawnSync(process.execPath, [npmExecPath, 'run', 'build'], { cwd: root, stdio: 'inherit' }) + if (result.status !== 0) process.exit(result.status ?? 1) +} + +async function outputHashes(directory = outputRoot) { + const hashes = new Map() + for (const entry of await readdir(directory, { withFileTypes: true })) { + const path = join(directory, entry.name) + if (entry.isDirectory()) { + for (const [name, hash] of await outputHashes(path)) hashes.set(name, hash) + } else if (entry.isFile()) { + const name = relative(outputRoot, path).replaceAll('\\', '/') + hashes.set(name, createHash('sha256').update(await readFile(path)).digest('hex')) + } + } + return hashes +} + +build() +const first = await outputHashes() +build() +const second = await outputHashes() + +const names = [...new Set([...first.keys(), ...second.keys()])].sort() +const changed = names.filter(name => first.get(name) !== second.get(name)) +if (changed.length > 0) { + console.error(`Build output is not deterministic:\n${changed.map(name => `- ${name}`).join('\n')}`) + process.exit(1) +} + +console.log(`Verified deterministic output for ${names.length} files.`) diff --git a/tsdown.config.ts b/tsdown.config.ts index f832d07..e184113 100644 --- a/tsdown.config.ts +++ b/tsdown.config.ts @@ -58,7 +58,8 @@ const client: UserConfig = { minify: true, }) const classMap: Record = {} - for (const [local, exported] of Object.entries(cssExports ?? {})) classMap[local] = exported.name + const entries = Object.entries(cssExports ?? {}).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0) + for (const [local, exported] of entries) classMap[local] = exported.name const tagId = `${PLUGIN_ID}/${basename(fileId)}` return [ `const css = ${JSON.stringify(code.toString())};`, From 07e295dbde49001286de43034e6149b39e154789 Mon Sep 17 00:00:00 2001 From: Grivn Date: Sun, 16 Aug 2026 14:33:09 +0800 Subject: [PATCH 02/11] build: stabilize client asset and dependency boundaries --- lib/client.js | 631 ++++++++++++------------- lib/client.js.map | 2 +- scripts/verify-deterministic-build.mjs | 5 +- tests/build-config.spec.ts | 16 + tsdown.config.ts | 35 +- 5 files changed, 359 insertions(+), 330 deletions(-) create mode 100644 tests/build-config.spec.ts diff --git a/lib/client.js b/lib/client.js index 64d1544..eefef54 100644 --- a/lib/client.js +++ b/lib/client.js @@ -11,7 +11,6 @@ window.__ModuleLoader__.load({ var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; - var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports); var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { key = keys[i]; @@ -31,14 +30,15 @@ window.__ModuleLoader__.load({ react = __toESM(react, 1); let react_jsx_runtime = require("react/jsx-runtime"); let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives"); + let react_dom_client = require("react-dom/client"); //#region src/settings.ts const MNEMON_SETTINGS_CHANNEL = "/dsh-mnemon-settings"; const MNEMON_SETTINGS_NAMESPACE = "mnemon"; const MNEMON_UI_SETTINGS_NAMESPACE = "mnemon-ui"; //#endregion //#region \0dsh-mnemon-css:/Users/grivn/github.com/omdsh-dev/dsh-mnemon/src/client/MnemonSettingsCard.module.css.mjs - const css$5 = ".pDTviq_page{box-sizing:border-box;width:100%;min-width:0;max-width:720px;color:var(--dsw-alias-label-primary);flex-direction:column;gap:28px;padding-bottom:28px;font-family:inherit;display:flex}.pDTviq_page *,.pDTviq_page :before,.pDTviq_page :after{box-sizing:border-box}.pDTviq_page button,.pDTviq_page input{color:inherit;font:inherit}.pDTviq_loading{min-height:140px;color:var(--dsw-alias-label-tertiary);text-align:center;margin:0;font-size:13px;line-height:140px}.pDTviq_pageHeader h1{color:var(--dsw-alias-label-primary);margin:0;font-size:16px;font-weight:500;line-height:24px}.pDTviq_pageHeader p{max-width:64ch;color:var(--dsw-alias-label-tertiary);margin:8px 0 0;font-size:14px;line-height:22px}.pDTviq_section{flex-direction:column;gap:12px;min-width:0;display:flex}.pDTviq_sectionHeading{justify-content:space-between;align-items:flex-start;gap:18px;min-width:0;display:flex}.pDTviq_sectionHeading>div{flex:1;min-width:0}.pDTviq_sectionHeading h2{color:var(--dsw-alias-label-primary);margin:0;font-size:14px;font-weight:500;line-height:22px}.pDTviq_sectionHeading p{max-width:66ch;color:var(--dsw-alias-label-tertiary);margin:1px 0 0;font-size:12px;line-height:18px}.pDTviq_choiceGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.pDTviq_displayGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.pDTviq_choiceCard{cursor:pointer;min-width:0;display:block}.pDTviq_choiceCard>input,.pDTviq_toggleRow>input,.pDTviq_visuallyHidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.pDTviq_choiceFace{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;flex-direction:column;justify-content:center;gap:1px;min-width:0;min-height:66px;padding:10px 34px 10px 13px;transition:border-color .14s,background-color .14s;display:flex;position:relative}.pDTviq_choiceFace:hover{background:var(--dsw-alias-interactive-bg-hover)}.pDTviq_choiceFace strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:21px;overflow:hidden}.pDTviq_choiceFace small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:17px;overflow:hidden}.pDTviq_check{font-size:14px;line-height:18px;display:none;position:absolute;top:11px;right:12px}.pDTviq_choiceCard>input:checked+.pDTviq_choiceFace{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-hover)}.pDTviq_choiceCard>input:checked+.pDTviq_choiceFace .pDTviq_check{display:block}.pDTviq_choiceCard>input:disabled+.pDTviq_choiceFace{cursor:default;opacity:.42}.pDTviq_choiceCard:has(input:disabled){cursor:default}.pDTviq_settingRow,.pDTviq_toggleRow{border-top:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:18px;min-width:0;min-height:62px;padding:11px 0;display:flex}.pDTviq_settingCopy{flex-direction:column;flex:1;min-width:0;display:flex}.pDTviq_settingCopy strong{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:21px}.pDTviq_settingCopy small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:17px}.pDTviq_settingCopy code{font-family:var(--ds-font-family-code,ui-monospace, monospace)}.pDTviq_directoryControl{flex:0 420px;align-items:center;gap:8px;min-width:0;max-width:60%;display:flex}.pDTviq_directoryInput{border:1px solid var(--dsw-alias-border-l2);width:100%;min-width:0;height:38px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);font-family:var(--ds-font-family-code,ui-monospace, monospace);border-radius:10px;outline:none;padding:0 11px;font-size:12px;line-height:20px}.pDTviq_directoryInput::placeholder{color:var(--dsw-alias-label-caption)}.pDTviq_directoryInput:disabled{cursor:default;opacity:.46}.pDTviq_rowGroup{border-bottom:1px solid var(--dsw-alias-border-l2)}.pDTviq_toggleRow{cursor:pointer}.pDTviq_toggleRow:first-child{border-top:1px solid var(--dsw-alias-border-l2)}.pDTviq_toggleRow:has(input:disabled){cursor:default;opacity:.46}.pDTviq_switch{background:var(--dsw-alias-bg-layer-2);width:40px;height:24px;box-shadow:inset 0 0 0 1px var(--dsw-alias-border-l2);border-radius:999px;flex:none;transition:background-color .14s;display:block;position:relative}.pDTviq_switch i{background:var(--dsw-alias-bg-layer-3);width:18px;height:18px;box-shadow:0 1px 3px color-mix(in srgb, var(--dsw-alias-label-primary) 22%, transparent);border-radius:50%;transition:transform .14s;position:absolute;top:3px;left:3px}.pDTviq_toggleRow>input:checked+.pDTviq_switch{background:var(--dsw-alias-label-primary);box-shadow:none}.pDTviq_toggleRow>input:checked+.pDTviq_switch i{transform:translate(16px)}.pDTviq_pillButton,.pDTviq_primaryPill,.pDTviq_actions button{appearance:none;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);height:36px;color:var(--dsw-alias-label-primary);cursor:pointer;white-space:nowrap;background:0 0;border-radius:18px;justify-content:center;align-items:center;gap:4px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.pDTviq_pillButton:hover:not(:disabled),.pDTviq_actions button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.pDTviq_pillButton:disabled,.pDTviq_primaryPill:disabled,.pDTviq_actions button:disabled,.pDTviq_textButton:disabled{cursor:default;opacity:.4}.pDTviq_primaryPill,.pDTviq_save{color:var(--dsw-alias-label-primary-foreground)!important;background:var(--dsw-alias-button-primary-fill)!important;border-color:#0000!important}.pDTviq_primaryPill:hover:not(:disabled),.pDTviq_save:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)!important}.pDTviq_textButton{appearance:none;box-sizing:border-box;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:14px;flex:none;justify-content:center;align-items:center;padding:0 10px;font-size:12px;line-height:18px;display:inline-flex}.pDTviq_textButton:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.pDTviq_activePath{width:fit-content;max-width:100%;color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:11px;line-height:17px;overflow:hidden}.pDTviq_scopeMeta{color:var(--dsw-alias-label-tertiary);margin-top:1px;font-size:10px;font-style:normal;line-height:15px}.pDTviq_rowActions{flex:none;align-items:center;gap:8px;display:flex}.pDTviq_importBar{background:var(--dsw-alias-bg-layer-2);border-radius:12px;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:10px;min-width:0;padding:10px 12px;display:grid}.pDTviq_importBar>div{min-width:0;display:grid}.pDTviq_importBar strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;line-height:18px;overflow:hidden}.pDTviq_importBar small{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:15px}.pDTviq_importBar .pDTviq_textButton{padding:0 10px}.pDTviq_feedback,.pDTviq_packFeedback{gap:4px;display:grid}.pDTviq_feedback:empty,.pDTviq_packFeedback:empty{display:none}.pDTviq_feedback p,.pDTviq_packFeedback p{overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}.pDTviq_error{color:var(--dsw-alias-state-error-primary)}.pDTviq_success{color:var(--dsw-alias-state-success-primary)}.pDTviq_readOnly{color:var(--dsw-alias-label-tertiary)}.pDTviq_packSuccess{color:var(--dsw-alias-state-success-primary)}.pDTviq_actions{display:none}.pDTviq_actionsVisible{border-top:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:16px;padding-top:14px;display:flex}.pDTviq_actions>span{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.pDTviq_actions>div{gap:8px;display:flex}.pDTviq_discard{color:var(--dsw-alias-label-primary);background:0 0;border-color:var(--dsw-alias-border-l2)!important}.pDTviq_settingsNote{color:var(--dsw-alias-label-tertiary);margin:-14px 0 0;font-size:10px;line-height:16px}.pDTviq_settingsNote code{color:var(--dsw-alias-label-secondary);font-family:var(--ds-font-family-code,ui-monospace, monospace)}.pDTviq_choiceCard>input:focus-visible+.pDTviq_choiceFace,.pDTviq_toggleRow>input:focus-visible+.pDTviq_switch,.pDTviq_directoryInput:focus-visible,.pDTviq_pillButton:focus-visible,.pDTviq_primaryPill:focus-visible,.pDTviq_textButton:focus-visible,.pDTviq_actions button:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-border-l3);outline:none}@media (width<=620px){.pDTviq_page{gap:24px}.pDTviq_choiceGrid{grid-template-columns:minmax(0,1fr)}.pDTviq_settingRow{flex-direction:column;align-items:stretch;gap:9px}.pDTviq_directoryControl{justify-content:space-between;max-width:none}.pDTviq_rowActions{width:100%}.pDTviq_rowActions button{flex:1}.pDTviq_importBar{grid-template-columns:minmax(0,1fr) auto}.pDTviq_importBar .pDTviq_primaryPill{grid-column:1/-1}.pDTviq_actionsVisible{flex-direction:column;align-items:stretch}.pDTviq_actions>div,.pDTviq_actions button{flex:1}}@media (prefers-reduced-motion:reduce){.pDTviq_choiceFace,.pDTviq_switch,.pDTviq_switch i{transition:none}}"; - const tagId$5 = "dsh-mnemon/MnemonSettingsCard.module.css"; + const css$5 = "._v_wrq_page{box-sizing:border-box;width:100%;min-width:0;max-width:720px;color:var(--dsw-alias-label-primary);flex-direction:column;gap:28px;padding-bottom:28px;font-family:inherit;display:flex}._v_wrq_page *,._v_wrq_page :before,._v_wrq_page :after{box-sizing:border-box}._v_wrq_page button,._v_wrq_page input{color:inherit;font:inherit}._v_wrq_loading{min-height:140px;color:var(--dsw-alias-label-tertiary);text-align:center;margin:0;font-size:13px;line-height:140px}._v_wrq_pageHeader h1{color:var(--dsw-alias-label-primary);margin:0;font-size:16px;font-weight:500;line-height:24px}._v_wrq_pageHeader p{max-width:64ch;color:var(--dsw-alias-label-tertiary);margin:8px 0 0;font-size:14px;line-height:22px}._v_wrq_section{flex-direction:column;gap:12px;min-width:0;display:flex}._v_wrq_sectionHeading{justify-content:space-between;align-items:flex-start;gap:18px;min-width:0;display:flex}._v_wrq_sectionHeading>div{flex:1;min-width:0}._v_wrq_sectionHeading h2{color:var(--dsw-alias-label-primary);margin:0;font-size:14px;font-weight:500;line-height:22px}._v_wrq_sectionHeading p{max-width:66ch;color:var(--dsw-alias-label-tertiary);margin:1px 0 0;font-size:12px;line-height:18px}._v_wrq_choiceGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}._v_wrq_displayGrid{grid-template-columns:repeat(2,minmax(0,1fr))}._v_wrq_choiceCard{cursor:pointer;min-width:0;display:block}._v_wrq_choiceCard>input,._v_wrq_toggleRow>input,._v_wrq_visuallyHidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}._v_wrq_choiceFace{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;flex-direction:column;justify-content:center;gap:1px;min-width:0;min-height:66px;padding:10px 34px 10px 13px;transition:border-color .14s,background-color .14s;display:flex;position:relative}._v_wrq_choiceFace:hover{background:var(--dsw-alias-interactive-bg-hover)}._v_wrq_choiceFace strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:21px;overflow:hidden}._v_wrq_choiceFace small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:17px;overflow:hidden}._v_wrq_check{font-size:14px;line-height:18px;display:none;position:absolute;top:11px;right:12px}._v_wrq_choiceCard>input:checked+._v_wrq_choiceFace{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-hover)}._v_wrq_choiceCard>input:checked+._v_wrq_choiceFace ._v_wrq_check{display:block}._v_wrq_choiceCard>input:disabled+._v_wrq_choiceFace{cursor:default;opacity:.42}._v_wrq_choiceCard:has(input:disabled){cursor:default}._v_wrq_settingRow,._v_wrq_toggleRow{border-top:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:18px;min-width:0;min-height:62px;padding:11px 0;display:flex}._v_wrq_settingCopy{flex-direction:column;flex:1;min-width:0;display:flex}._v_wrq_settingCopy strong{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:21px}._v_wrq_settingCopy small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:17px}._v_wrq_settingCopy code{font-family:var(--ds-font-family-code,ui-monospace, monospace)}._v_wrq_directoryControl{flex:0 420px;align-items:center;gap:8px;min-width:0;max-width:60%;display:flex}._v_wrq_directoryInput{border:1px solid var(--dsw-alias-border-l2);width:100%;min-width:0;height:38px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);font-family:var(--ds-font-family-code,ui-monospace, monospace);border-radius:10px;outline:none;padding:0 11px;font-size:12px;line-height:20px}._v_wrq_directoryInput::placeholder{color:var(--dsw-alias-label-caption)}._v_wrq_directoryInput:disabled{cursor:default;opacity:.46}._v_wrq_rowGroup{border-bottom:1px solid var(--dsw-alias-border-l2)}._v_wrq_toggleRow{cursor:pointer}._v_wrq_toggleRow:first-child{border-top:1px solid var(--dsw-alias-border-l2)}._v_wrq_toggleRow:has(input:disabled){cursor:default;opacity:.46}._v_wrq_switch{background:var(--dsw-alias-bg-layer-2);width:40px;height:24px;box-shadow:inset 0 0 0 1px var(--dsw-alias-border-l2);border-radius:999px;flex:none;transition:background-color .14s;display:block;position:relative}._v_wrq_switch i{background:var(--dsw-alias-bg-layer-3);width:18px;height:18px;box-shadow:0 1px 3px color-mix(in srgb, var(--dsw-alias-label-primary) 22%, transparent);border-radius:50%;transition:transform .14s;position:absolute;top:3px;left:3px}._v_wrq_toggleRow>input:checked+._v_wrq_switch{background:var(--dsw-alias-label-primary);box-shadow:none}._v_wrq_toggleRow>input:checked+._v_wrq_switch i{transform:translate(16px)}._v_wrq_pillButton,._v_wrq_primaryPill,._v_wrq_actions button{appearance:none;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);height:36px;color:var(--dsw-alias-label-primary);cursor:pointer;white-space:nowrap;background:0 0;border-radius:18px;justify-content:center;align-items:center;gap:4px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}._v_wrq_pillButton:hover:not(:disabled),._v_wrq_actions button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}._v_wrq_pillButton:disabled,._v_wrq_primaryPill:disabled,._v_wrq_actions button:disabled,._v_wrq_textButton:disabled{cursor:default;opacity:.4}._v_wrq_primaryPill,._v_wrq_save{color:var(--dsw-alias-label-primary-foreground)!important;background:var(--dsw-alias-button-primary-fill)!important;border-color:#0000!important}._v_wrq_primaryPill:hover:not(:disabled),._v_wrq_save:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)!important}._v_wrq_textButton{appearance:none;box-sizing:border-box;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:14px;flex:none;justify-content:center;align-items:center;padding:0 10px;font-size:12px;line-height:18px;display:inline-flex}._v_wrq_textButton:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}._v_wrq_activePath{width:fit-content;max-width:100%;color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:11px;line-height:17px;overflow:hidden}._v_wrq_scopeMeta{color:var(--dsw-alias-label-tertiary);margin-top:1px;font-size:10px;font-style:normal;line-height:15px}._v_wrq_rowActions{flex:none;align-items:center;gap:8px;display:flex}._v_wrq_importBar{background:var(--dsw-alias-bg-layer-2);border-radius:12px;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:10px;min-width:0;padding:10px 12px;display:grid}._v_wrq_importBar>div{min-width:0;display:grid}._v_wrq_importBar strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;line-height:18px;overflow:hidden}._v_wrq_importBar small{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:15px}._v_wrq_importBar ._v_wrq_textButton{padding:0 10px}._v_wrq_feedback,._v_wrq_packFeedback{gap:4px;display:grid}._v_wrq_feedback:empty,._v_wrq_packFeedback:empty{display:none}._v_wrq_feedback p,._v_wrq_packFeedback p{overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._v_wrq_error{color:var(--dsw-alias-state-error-primary)}._v_wrq_success{color:var(--dsw-alias-state-success-primary)}._v_wrq_readOnly{color:var(--dsw-alias-label-tertiary)}._v_wrq_packSuccess{color:var(--dsw-alias-state-success-primary)}._v_wrq_actions{display:none}._v_wrq_actionsVisible{border-top:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:16px;padding-top:14px;display:flex}._v_wrq_actions>span{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}._v_wrq_actions>div{gap:8px;display:flex}._v_wrq_discard{color:var(--dsw-alias-label-primary);background:0 0;border-color:var(--dsw-alias-border-l2)!important}._v_wrq_settingsNote{color:var(--dsw-alias-label-tertiary);margin:-14px 0 0;font-size:10px;line-height:16px}._v_wrq_settingsNote code{color:var(--dsw-alias-label-secondary);font-family:var(--ds-font-family-code,ui-monospace, monospace)}._v_wrq_choiceCard>input:focus-visible+._v_wrq_choiceFace,._v_wrq_toggleRow>input:focus-visible+._v_wrq_switch,._v_wrq_directoryInput:focus-visible,._v_wrq_pillButton:focus-visible,._v_wrq_primaryPill:focus-visible,._v_wrq_textButton:focus-visible,._v_wrq_actions button:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-border-l3);outline:none}@media (width<=620px){._v_wrq_page{gap:24px}._v_wrq_choiceGrid{grid-template-columns:minmax(0,1fr)}._v_wrq_settingRow{flex-direction:column;align-items:stretch;gap:9px}._v_wrq_directoryControl{justify-content:space-between;max-width:none}._v_wrq_rowActions{width:100%}._v_wrq_rowActions button{flex:1}._v_wrq_importBar{grid-template-columns:minmax(0,1fr) auto}._v_wrq_importBar ._v_wrq_primaryPill{grid-column:1/-1}._v_wrq_actionsVisible{flex-direction:column;align-items:stretch}._v_wrq_actions>div,._v_wrq_actions button{flex:1}}@media (prefers-reduced-motion:reduce){._v_wrq_choiceFace,._v_wrq_switch,._v_wrq_switch i{transition:none}}"; + const tagId$5 = "dsh-mnemon/src/client/MnemonSettingsCard.module.css"; if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) { const tag = document.createElement("style"); tag.dataset.plugin = "dsh-mnemon"; @@ -47,42 +47,42 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonSettingsCard_module_css_default = { - "actions": "pDTviq_actions", - "actionsVisible": "pDTviq_actionsVisible", - "activePath": "pDTviq_activePath", - "check": "pDTviq_check", - "choiceCard": "pDTviq_choiceCard", - "choiceFace": "pDTviq_choiceFace", - "choiceGrid": "pDTviq_choiceGrid", - "directoryControl": "pDTviq_directoryControl", - "directoryInput": "pDTviq_directoryInput", - "discard": "pDTviq_discard", - "displayGrid": "pDTviq_displayGrid", - "error": "pDTviq_error", - "feedback": "pDTviq_feedback", - "importBar": "pDTviq_importBar", - "loading": "pDTviq_loading", - "packFeedback": "pDTviq_packFeedback", - "packSuccess": "pDTviq_packSuccess", - "page": "pDTviq_page", - "pageHeader": "pDTviq_pageHeader", - "pillButton": "pDTviq_pillButton", - "primaryPill": "pDTviq_primaryPill", - "readOnly": "pDTviq_readOnly", - "rowActions": "pDTviq_rowActions", - "rowGroup": "pDTviq_rowGroup", - "save": "pDTviq_save", - "scopeMeta": "pDTviq_scopeMeta", - "section": "pDTviq_section", - "sectionHeading": "pDTviq_sectionHeading", - "settingCopy": "pDTviq_settingCopy", - "settingRow": "pDTviq_settingRow", - "settingsNote": "pDTviq_settingsNote", - "success": "pDTviq_success", - "switch": "pDTviq_switch", - "textButton": "pDTviq_textButton", - "toggleRow": "pDTviq_toggleRow", - "visuallyHidden": "pDTviq_visuallyHidden" + "actions": "_v_wrq_actions", + "actionsVisible": "_v_wrq_actionsVisible", + "activePath": "_v_wrq_activePath", + "check": "_v_wrq_check", + "choiceCard": "_v_wrq_choiceCard", + "choiceFace": "_v_wrq_choiceFace", + "choiceGrid": "_v_wrq_choiceGrid", + "directoryControl": "_v_wrq_directoryControl", + "directoryInput": "_v_wrq_directoryInput", + "discard": "_v_wrq_discard", + "displayGrid": "_v_wrq_displayGrid", + "error": "_v_wrq_error", + "feedback": "_v_wrq_feedback", + "importBar": "_v_wrq_importBar", + "loading": "_v_wrq_loading", + "packFeedback": "_v_wrq_packFeedback", + "packSuccess": "_v_wrq_packSuccess", + "page": "_v_wrq_page", + "pageHeader": "_v_wrq_pageHeader", + "pillButton": "_v_wrq_pillButton", + "primaryPill": "_v_wrq_primaryPill", + "readOnly": "_v_wrq_readOnly", + "rowActions": "_v_wrq_rowActions", + "rowGroup": "_v_wrq_rowGroup", + "save": "_v_wrq_save", + "scopeMeta": "_v_wrq_scopeMeta", + "section": "_v_wrq_section", + "sectionHeading": "_v_wrq_sectionHeading", + "settingCopy": "_v_wrq_settingCopy", + "settingRow": "_v_wrq_settingRow", + "settingsNote": "_v_wrq_settingsNote", + "success": "_v_wrq_success", + "switch": "_v_wrq_switch", + "textButton": "_v_wrq_textButton", + "toggleRow": "_v_wrq_toggleRow", + "visuallyHidden": "_v_wrq_visuallyHidden" }; //#endregion //#region src/client/locales.ts @@ -2188,7 +2188,7 @@ window.__ModuleLoader__.load({ var y = /^(?: {4}[^\n]+\n*)+(?:\n *)+\n?/; var h = /^(`+)((?:\\`|(?!\1)`|[^`])+)\1/; var g = /^(?:\n *)*\n/; - var m$1 = /\r\n?/g; + var m = /\r\n?/g; var k = /^\[\^([^\]]+)](:(.*)((\n+ {4,}.*)|(\n(?!\[\^).+))*)/; var x = /^\[\^([^\]]+)]/; var q = /\f/g; @@ -2973,7 +2973,7 @@ window.__ModuleLoader__.load({ return r[n].i - r[e].i || (n < e ? -1 : 1); }), function(r, n) { return e(function(r) { - return r.replace(m$1, "\n").replace(q, "").replace(N, " "); + return r.replace(m, "\n").replace(q, "").replace(N, " "); }(r), n); }; }(lr), dr = function(r, n) { @@ -3080,8 +3080,8 @@ window.__ModuleLoader__.load({ } //#endregion //#region \0dsh-mnemon-css:/Users/grivn/github.com/omdsh-dev/dsh-mnemon/src/client/MnemonSidebarView.module.css.mjs - const css$4 = ".P5oC1W_shell.P5oC1W_shell{background:var(--dsw-alias-bg-base);font-family:var(--dsw-font-family)}.P5oC1W_shell .P5oC1W_masthead{background:var(--dsw-alias-bg-base);border-bottom:0;align-items:center;gap:12px;min-height:50px;padding:10px 16px 6px;display:flex}.P5oC1W_shell .P5oC1W_brand{flex:auto;gap:8px;overflow:hidden}.P5oC1W_shell .P5oC1W_brand h1{letter-spacing:0;flex:none;margin:0;font-size:16px;font-weight:700;line-height:24px}.P5oC1W_shell [class*=storageMode]{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);gap:5px;min-width:96px;min-height:32px;padding:0 9px}.P5oC1W_shell [class*=storageMode]>span{color:var(--dsw-alias-label-tertiary);font-size:11px}.P5oC1W_shell [class*=storageMode]>strong{color:var(--dsw-alias-label-primary);font-size:12px}.P5oC1W_shell .P5oC1W_headerActions{flex:0 auto;gap:6px}.P5oC1W_shell .P5oC1W_workspacePicker{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:8px;flex:0 auto;gap:7px;min-height:32px;padding-left:9px}.P5oC1W_shell .P5oC1W_workspacePicker>span{color:var(--dsw-alias-label-tertiary);font-size:11px;display:block}.P5oC1W_shell .P5oC1W_workspacePicker select{border:0;border-left:1px solid var(--dsw-alias-border-l1);background:var(--dsw-specific-input-major);border-radius:0 7px 7px 0;width:min(190px,20vw);height:30px;padding:0 28px 0 10px;font-size:13px}.P5oC1W_shell .P5oC1W_statusCluster{background:0 0;border:0;border-radius:8px;gap:7px;min-height:30px;padding:0 2px 0 8px;font-size:12px}.P5oC1W_shell .P5oC1W_statusCluster>span:not([class*=statusDot]){min-width:56px}.P5oC1W_shell .P5oC1W_workspaceMismatch{border-color:color-mix(in srgb, var(--dsw-alias-state-business-primary) 34%, var(--dsw-alias-border-l1));background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 6%, var(--dsw-alias-bg-layer-1));white-space:nowrap;border-radius:8px;flex:none;justify-content:flex-start;gap:6px;min-height:32px;margin:0;padding:0 3px 0 9px}.P5oC1W_shell .P5oC1W_workspaceMismatch>span{color:var(--dsw-alias-label-secondary);font-size:11px}.P5oC1W_shell .P5oC1W_workspaceMismatch>button{border:1px solid color-mix(in srgb, var(--dsw-alias-state-business-primary) 55%, var(--dsw-alias-border-l2));min-height:26px;color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-bg-base);cursor:pointer;border-radius:6px;padding:0 8px;font-size:11px}.P5oC1W_shell .P5oC1W_workspaceMismatch>button:hover{background:var(--dsw-alias-interactive-bg-hover)}.P5oC1W_shell .P5oC1W_topNavigation{background:var(--dsw-alias-bg-base);border-bottom:0;gap:0;min-height:0;padding:0 16px}.P5oC1W_shell .P5oC1W_topNavigation:after{display:none}.P5oC1W_shell .P5oC1W_nav{border-bottom:1px solid var(--dsw-alias-border-l1);flex:1;gap:2px;padding-right:0}.P5oC1W_shell .P5oC1W_nav button{border-bottom:2px solid #0000;border-radius:6px 6px 0 0;gap:0;min-height:0;padding:7px 14px;font-size:13px;font-weight:400}.P5oC1W_shell .P5oC1W_nav button:hover{background:var(--dsw-alias-interactive-bg-hover)}.P5oC1W_shell .P5oC1W_nav button[data-active]{color:var(--dsw-alias-label-primary);border-bottom-color:var(--dsw-alias-state-business-primary);font-weight:600}.P5oC1W_shell .P5oC1W_memoryWorkspace{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);flex:none;padding:12px 16px 0}.P5oC1W_shell .P5oC1W_memoryWorkspace>[class*=pageHeader]{margin-bottom:8px}.P5oC1W_shell .P5oC1W_memoryNavigation{flex:none;align-items:flex-end;gap:12px;min-width:0;padding:0;display:flex}.P5oC1W_shell .P5oC1W_memoryTabs{scrollbar-width:none;flex:1;gap:2px;min-width:0;display:flex;overflow-x:auto}.P5oC1W_shell .P5oC1W_memoryTabs::-webkit-scrollbar{display:none}.P5oC1W_shell .P5oC1W_memoryTabs button{min-width:max-content;min-height:0;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;border-radius:6px 6px 0 0;padding:6px 12px;font-size:13px}.P5oC1W_shell .P5oC1W_memoryTabs button:hover{background:var(--dsw-alias-interactive-bg-hover)}.P5oC1W_shell .P5oC1W_memoryTabs button[data-active]{border-bottom-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-primary);font-weight:600}.P5oC1W_shell .P5oC1W_memoryWriteButton{flex:none}.P5oC1W_shell .P5oC1W_modalBackdrop{z-index:1300;overscroll-behavior:contain;background:var(--dsw-alias-bg-mask-1);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.P5oC1W_shell .P5oC1W_modal{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);width:min(680px,100vw - 48px);max-height:calc(100vh - 96px);box-shadow:var(--dsw-shadow-lv3);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}.P5oC1W_shell .P5oC1W_modal>header{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:space-between;align-items:flex-start;gap:18px;padding:15px 18px;display:flex}.P5oC1W_shell .P5oC1W_modal>header h2{margin:0;font-size:15px;line-height:22px}.P5oC1W_shell .P5oC1W_modal>header p{max-width:64ch;color:var(--dsw-alias-label-secondary);margin:3px 0 0;font-size:12px;line-height:1.5}.P5oC1W_shell .P5oC1W_modal>div:last-child{min-height:0;padding:18px;overflow-y:auto}.P5oC1W_shell .P5oC1W_modal form[class*=runtimeComposer],.P5oC1W_shell .P5oC1W_modal form[class*=documentEditor]{background:0 0;border:0;border-radius:0;margin:0;padding:0}.P5oC1W_shell .P5oC1W_modal form[class*=runtimeComposer]>[class*=runtimeComposerHeading],.P5oC1W_shell .P5oC1W_modal form[class*=documentEditor]>header{display:none}.P5oC1W_shell .P5oC1W_modal section[class*=supervisedComposer]{overflow:visible}.P5oC1W_shell .P5oC1W_modal form[class*=supervisedForm]{padding:0}.P5oC1W_shell .P5oC1W_modal [class*=supervisedHeading]{margin-bottom:10px}.P5oC1W_shell .P5oC1W_modal [class*=supervisedHeading] h3{display:none}.P5oC1W_shell .P5oC1W_modal [class*=formActions]{justify-content:flex-end}.P5oC1W_shell .P5oC1W_modal details[class*=advancedWrite]{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:10px;margin-top:14px;overflow:hidden}.P5oC1W_shell [class*=primaryButton]{min-height:32px;color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-info-fill);white-space:nowrap;border:0;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}.P5oC1W_shell [class*=primaryButton]:hover:not(:disabled){filter:none;background:var(--dsw-alias-button-info-hover)}.P5oC1W_shell [class*=secondaryButton],.P5oC1W_shell [class*=ghostButton]{border:1px solid var(--dsw-alias-border-l2);min-height:32px;color:var(--dsw-alias-label-primary);white-space:nowrap;background:0 0;border-radius:8px;padding:5px 12px;font-size:12px;font-weight:400}.P5oC1W_shell [class*=secondaryButton]:hover:not(:disabled),.P5oC1W_shell [class*=ghostButton]:hover:not(:disabled){filter:none;background:var(--dsw-alias-interactive-bg-hover)}.P5oC1W_shell [class*=dangerButton]{min-height:0;color:var(--dsw-alias-state-error-primary);white-space:nowrap;background:0 0;border:0;border-radius:0;padding:0;font-size:12px;font-weight:400}.P5oC1W_shell [class*=dangerButton]:hover:not(:disabled){filter:none;background:0 0;text-decoration:underline}.P5oC1W_shell [class*=dangerSolidButton]{color:#fff;background:var(--dsw-alias-state-error-primary);white-space:nowrap;border:0;border-radius:8px;min-height:32px;padding:6px 14px;font-size:13px;font-weight:600}.P5oC1W_shell [class*=dangerSolidButton]:hover:not(:disabled){filter:brightness(1.08)}.P5oC1W_shell [class*=iconButton],.P5oC1W_shell [class*=bodyEditButton],.P5oC1W_shell [class*=inspectorEye],.P5oC1W_shell [class*=inspectorHeading] button,.P5oC1W_shell [class*=sectionHeading] button,.P5oC1W_shell [class*=previewHeading] button{width:26px;height:26px;min-height:0;color:var(--dsw-alias-label-secondary);background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:13px;display:inline-flex}.P5oC1W_shell [class*=iconButton]:hover:not(:disabled),.P5oC1W_shell [class*=bodyEditButton]:hover:not(:disabled),.P5oC1W_shell [class*=inspectorEye]:hover:not(:disabled),.P5oC1W_shell [class*=inspectorHeading] button:hover:not(:disabled),.P5oC1W_shell [class*=sectionHeading] button:hover:not(:disabled),.P5oC1W_shell [class*=previewHeading] button:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover);border:0}.P5oC1W_shell [class*=primaryButton],.P5oC1W_shell [class*=secondaryButton],.P5oC1W_shell [class*=ghostButton],.P5oC1W_shell [class*=dangerButton],.P5oC1W_shell [class*=dangerSolidButton],.P5oC1W_shell [class*=iconButton],.P5oC1W_shell [class*=bodyEditButton],.P5oC1W_shell [class*=inspectorEye],.P5oC1W_shell [class*=inspectorHeading] button,.P5oC1W_shell [class*=sectionHeading] button,.P5oC1W_shell [class*=previewHeading] button{cursor:pointer;transition:background-color .12s,color .12s,border-color .12s,outline-color .12s,box-shadow .12s,transform .12s}.P5oC1W_shell [class*=primaryButton]:active:not(:disabled),.P5oC1W_shell [class*=secondaryButton]:active:not(:disabled),.P5oC1W_shell [class*=ghostButton]:active:not(:disabled),.P5oC1W_shell [class*=dangerButton]:active:not(:disabled),.P5oC1W_shell [class*=dangerSolidButton]:active:not(:disabled),.P5oC1W_shell [class*=iconButton]:active:not(:disabled),.P5oC1W_shell [class*=bodyEditButton]:active:not(:disabled),.P5oC1W_shell [class*=inspectorEye]:active:not(:disabled),.P5oC1W_shell [class*=inspectorHeading] button:active:not(:disabled),.P5oC1W_shell [class*=sectionHeading] button:active:not(:disabled),.P5oC1W_shell [class*=previewHeading] button:active:not(:disabled){transform:translateY(1px)}.P5oC1W_shell [class*=primaryButton]:disabled,.P5oC1W_shell [class*=secondaryButton]:disabled,.P5oC1W_shell [class*=ghostButton]:disabled,.P5oC1W_shell [class*=dangerButton]:disabled,.P5oC1W_shell [class*=dangerSolidButton]:disabled,.P5oC1W_shell [class*=iconButton]:disabled,.P5oC1W_shell [class*=bodyEditButton]:disabled,.P5oC1W_shell [class*=inspectorEye]:disabled{cursor:default;opacity:.45}.P5oC1W_shell .P5oC1W_canvas{background:var(--dsw-alias-bg-base)}.P5oC1W_shell button,.P5oC1W_shell input,.P5oC1W_shell select,.P5oC1W_shell textarea{font-family:var(--dsw-font-family)}.P5oC1W_shell button:focus-visible,.P5oC1W_shell input:focus-visible,.P5oC1W_shell select:focus-visible,.P5oC1W_shell textarea:focus-visible,.P5oC1W_shell summary:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.P5oC1W_shell .P5oC1W_canvas>div{width:100%;padding:14px 16px clamp(96px,14vh,150px)}.P5oC1W_shell .P5oC1W_pageHeader{margin-bottom:12px}.P5oC1W_shell .P5oC1W_pageHeader h2{letter-spacing:0;margin-top:0;font-size:16px;line-height:1.35}.P5oC1W_shell .P5oC1W_pageHeader p{font-size:13px;line-height:1.55}.P5oC1W_shell .P5oC1W_canvas[data-lock-page-header] [class*=pageHeader]{z-index:12;border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);margin:-14px -16px 12px;padding:14px 16px 10px;position:sticky;top:0}.P5oC1W_shell input,.P5oC1W_shell select,.P5oC1W_shell textarea{font-family:var(--dsw-font-family);font-size:13px;font-weight:400}.P5oC1W_shell [class*=bodyEdit] label,.P5oC1W_shell [class*=runtimeComposerActions] label,.P5oC1W_shell [class*=documentEditor] label,.P5oC1W_shell [class*=searchControls] label,.P5oC1W_shell [class*=formGrid] label,.P5oC1W_shell [class*=fieldWide]{color:var(--dsw-alias-label-secondary);gap:5px;font-size:12px;font-weight:500}.P5oC1W_shell [class*=bodyEdit] input,.P5oC1W_shell [class*=bodyEdit] select,.P5oC1W_shell [class*=bodyEdit] textarea,.P5oC1W_shell [class*=runtimeComposer]>textarea,.P5oC1W_shell [class*=runtimeComposerActions] select,.P5oC1W_shell [class*=runtimeEntry] select,.P5oC1W_shell [class*=documentEditor] input,.P5oC1W_shell [class*=documentEditor] textarea,.P5oC1W_shell [class*=searchControls] select,.P5oC1W_shell [class*=formGrid] select,.P5oC1W_shell [class*=formGrid] input,.P5oC1W_shell [class*=listToolbar] input,.P5oC1W_shell [class*=listToolbar] select,.P5oC1W_shell [class*=entitySearch] input,.P5oC1W_shell [class*=bodyCreate] input{border:1px solid var(--dsw-alias-border-l2);min-height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border-radius:8px;padding:7px 10px;font-size:13px;font-weight:400}.P5oC1W_shell select{cursor:pointer;font-weight:400}.P5oC1W_shell textarea{font-weight:400;line-height:1.55}.P5oC1W_shell [class*=cardKicker],.P5oC1W_shell [class*=sectionHeading]>div>span,.P5oC1W_shell [class*=entityHeading]>span,.P5oC1W_shell [class*=inspectorHeading]>span{letter-spacing:.06em;font-size:11px}.P5oC1W_shell [class*=bodyDirectoryHeader] p,.P5oC1W_shell [class*=bodyCard]>p,.P5oC1W_shell [class*=graphToolbar],.P5oC1W_shell [class*=graphFooter],.P5oC1W_shell [class*=runtimeTargetDescription],.P5oC1W_shell [class*=documentList]>button p,.P5oC1W_shell [class*=documentDetail]>header p,.P5oC1W_shell [class*=documentArchiveReceipt] p,.P5oC1W_shell [class*=healthStrip] p,.P5oC1W_shell [class*=storageAreaGrid] article>p,.P5oC1W_shell [class*=statusSectionHeader] p,.P5oC1W_shell [class*=writeGuide] li span,.P5oC1W_shell [class*=writeGuide]>p,.P5oC1W_shell [class*=manualActions] p{font-size:12px}.P5oC1W_shell [class*=bodyDirectoryPath],.P5oC1W_shell [class*=bodyCard] footer,.P5oC1W_shell [class*=bodyHealth],.P5oC1W_shell [class*=badge],.P5oC1W_shell [class*=entities] span,.P5oC1W_shell [class*=runtimeEntryMeta]>span,.P5oC1W_shell [class*=runtimeEntryBadges]>span,.P5oC1W_shell [class*=runtimeEntryMeta] time,.P5oC1W_shell [class*=runtimeFootnote],.P5oC1W_shell [class*=documentSummary] article>span,.P5oC1W_shell [class*=documentSummary] article>small,.P5oC1W_shell [class*=documentList]>header,.P5oC1W_shell [class*=documentList]>button time,.P5oC1W_shell [class*=documentList]>button footer,.P5oC1W_shell [class*=documentDetail] dt,.P5oC1W_shell [class*=documentSources]>span,.P5oC1W_shell [class*=storageRoot] span,.P5oC1W_shell [class*=storageRoot] small,.P5oC1W_shell [class*=storageAreaMetric] span,.P5oC1W_shell [class*=storageAreaMetric] code,.P5oC1W_shell [class*=storagePath],.P5oC1W_shell [class*=storageAreaGrid] article>small,.P5oC1W_shell [class*=storageFootnote]{font-size:11px}.P5oC1W_shell [class*=bodySwitch],.P5oC1W_shell [class*=graphCanvasControls] button,.P5oC1W_shell [class*=documentToolbar]>div button,.P5oC1W_shell [class*=documentDetail] dd,.P5oC1W_shell [class*=documentDanger] p,.P5oC1W_shell [class*=advancedWrite] summary small{font-size:12px}.P5oC1W_shell [class*=documentList]>button strong,.P5oC1W_shell [class*=runtimeEntry]>p,.P5oC1W_shell [class*=inspectorMeta] dd{font-size:13px}.P5oC1W_shell [class*=runtimeEntryBadges]>span{border:1px solid var(--dsw-alias-border-l1);min-height:22px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-radius:999px;align-items:center;padding:0 8px;font-size:11px;font-weight:400;line-height:20px;display:inline-flex}.P5oC1W_shell [class*=runtimeEntryBadges]>[class*=runtimeEntryTarget]{border-color:color-mix(in srgb, var(--dsw-alias-state-business-primary) 30%, var(--dsw-alias-border-l1));color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 7%, var(--dsw-alias-bg-layer-1));font-family:var(--dsw-font-family);font-weight:500}.P5oC1W_shell [class*=runtimeEntry][data-importance=critical] [class*=runtimeEntryBadges]>span:last-child{border-color:color-mix(in srgb, var(--dsw-alias-state-error-primary) 24%, var(--dsw-alias-border-l1));color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 6%, var(--dsw-alias-bg-layer-1))}.P5oC1W_shell [class*=listProgress],.P5oC1W_shell [class*=compactListProgress]{color:var(--dsw-alias-label-tertiary);font-size:12px}.P5oC1W_shell [class*=documentWorkspace]{align-items:stretch;height:clamp(520px,100dvh - 220px,760px);min-height:520px}.P5oC1W_shell [class*=documentList],.P5oC1W_shell [class*=documentReader]{overscroll-behavior:contain;scrollbar-gutter:stable;min-height:0;overflow-y:auto}.P5oC1W_shell [class*=bodyGrid]{grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr))}.P5oC1W_shell article[class*=bodyCard]{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);height:100%;box-shadow:none;opacity:1;flex-direction:column;padding:12px;display:flex}.P5oC1W_shell article[class*=bodyCard][data-active]{border-color:var(--dsw-alias-border-l1);box-shadow:none}.P5oC1W_shell .P5oC1W_bodyCardHeader{justify-content:space-between;align-items:flex-start;gap:12px;min-width:0;display:flex}.P5oC1W_shell .P5oC1W_bodyDirectoryActions{flex:none;align-items:center;gap:8px;display:flex}.P5oC1W_shell .P5oC1W_bodyDirectoryActions>strong{color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 8%, transparent);white-space:nowrap;border-radius:999px;padding:5px 8px;font-size:11px;font-weight:600}.P5oC1W_shell .P5oC1W_bodyCardIdentity{flex:1;align-items:flex-start;gap:8px;min-width:0;display:flex}.P5oC1W_shell .P5oC1W_bodyCardIdentity>[class*=bodySignal]{flex:none;width:6px;height:6px;margin-top:7px}.P5oC1W_shell .P5oC1W_bodyCardIdentity>div{flex:1;gap:2px;min-width:0;display:grid}.P5oC1W_shell .P5oC1W_bodyCardIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;line-height:20px;overflow:hidden}.P5oC1W_shell .P5oC1W_bodyCardMeta{align-items:center;gap:8px;min-width:0;display:flex}.P5oC1W_shell .P5oC1W_bodyCardMeta code{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.P5oC1W_shell .P5oC1W_bodyCardMeta [class*=bodyHealth]{letter-spacing:0;flex:none;font-size:11px}.P5oC1W_shell .P5oC1W_bodyCardHeader>[class*=bodySwitch]{flex:none;min-height:24px}.P5oC1W_shell article[class*=bodyCard]>p{-webkit-line-clamp:4;-webkit-box-orient:vertical;min-height:6.2em;max-height:6.2em;margin:12px 0;line-height:1.55;display:-webkit-box;overflow:hidden}.P5oC1W_shell .P5oC1W_bodyCardFooter{white-space:nowrap;grid-template-columns:minmax(max-content,1fr) max-content;align-items:center;gap:10px;min-width:0;margin-top:auto;padding-top:9px;display:grid}.P5oC1W_shell .P5oC1W_bodyCardStats{flex-wrap:nowrap;align-items:center;gap:10px;min-width:max-content;display:flex}.P5oC1W_shell .P5oC1W_bodyCardFooter [class*=bodyCardActions]{flex-wrap:nowrap;flex:none;align-items:center;gap:6px;display:flex}.P5oC1W_shell .P5oC1W_itemActionButton{border:1px solid;border-radius:7px;min-height:28px;padding:4px 9px;font-size:12px;line-height:18px}.P5oC1W_shell [class*=runtimeEntry] footer,.P5oC1W_shell [class*=cardActions]{gap:6px}.P5oC1W_shell .P5oC1W_itemEditAction{color:var(--dsw-alias-state-business-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-business-primary) 38%, var(--dsw-alias-border-l2));background:0 0}.P5oC1W_shell .P5oC1W_itemEditAction:hover:not(:disabled){color:var(--dsw-alias-state-business-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-business-primary) 58%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 8%, transparent)}.P5oC1W_shell .P5oC1W_itemDangerAction{color:var(--dsw-alias-state-error-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-error-primary) 34%, var(--dsw-alias-border-l2));background:0 0;padding:4px 9px}.P5oC1W_shell .P5oC1W_itemDangerAction:hover:not(:disabled){border-color:color-mix(in srgb, var(--dsw-alias-state-error-primary) 54%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);text-decoration:none}.P5oC1W_shell [class*=bodyDeleteConfirm]>p{font-size:13px}.P5oC1W_shell [class*=pageHeaderMeta]>code{text-align:center;font-variant-numeric:tabular-nums;min-width:72px;font-size:11px}.P5oC1W_shell .P5oC1W_inspectorGlyph{border:1px solid var(--dsw-alias-border-l1);width:44px;height:44px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-1);font:20px/1 var(--mn-code);opacity:1;border-radius:10px;place-items:center;margin-bottom:10px;display:grid}@media (width<=760px){.P5oC1W_shell .P5oC1W_masthead{min-height:48px;padding:8px 12px 4px}.P5oC1W_shell .P5oC1W_headerActions{max-width:none}.P5oC1W_shell .P5oC1W_statusCluster>span:not([class*=statusDot]){display:inline}.P5oC1W_shell [class*=storageMode]{min-width:0}.P5oC1W_shell [class*=storageMode]>span,.P5oC1W_shell .P5oC1W_workspacePicker>span,.P5oC1W_shell .P5oC1W_workspaceMismatch>span{display:none}.P5oC1W_shell .P5oC1W_workspacePicker{gap:0;padding-left:0}.P5oC1W_shell .P5oC1W_workspacePicker select{border-left:0;width:min(160px,31vw)}.P5oC1W_shell .P5oC1W_topNavigation{padding:0 12px}.P5oC1W_shell .P5oC1W_memoryNavigation{padding-inline:12px}.P5oC1W_shell .P5oC1W_memoryTabs button{padding-inline:10px}.P5oC1W_shell .P5oC1W_nav button{text-align:left;flex-direction:row;min-width:max-content;padding:7px 12px}.P5oC1W_shell .P5oC1W_canvas>div{padding:14px 12px calc(170px + env(safe-area-inset-bottom,0px))}.P5oC1W_shell .P5oC1W_canvas[data-lock-page-header] [class*=pageHeader]{margin-inline:-12px;padding-inline:12px}.P5oC1W_shell .P5oC1W_modalBackdrop{padding:12px}.P5oC1W_shell .P5oC1W_modal{width:calc(100vw - 24px);max-height:calc(100vh - 24px)}.P5oC1W_shell .P5oC1W_modal>div:last-child{padding:14px}.P5oC1W_shell [class*=documentWorkspace]{height:auto;min-height:0}.P5oC1W_shell [class*=documentList]{scrollbar-gutter:auto;overflow-y:auto}.P5oC1W_shell [class*=documentReader]{scrollbar-gutter:auto;overflow:visible}}@media (width<=520px){.P5oC1W_shell .P5oC1W_masthead{min-height:46px}.P5oC1W_shell .P5oC1W_brand h1{font-size:16px}.P5oC1W_shell .P5oC1W_headerActions{max-width:62vw}.P5oC1W_shell [class*=storageMode]{padding-inline:7px}.P5oC1W_shell .P5oC1W_workspacePicker select{width:min(118px,30vw);padding-left:8px}.P5oC1W_shell .P5oC1W_workspaceMismatch>button{padding-inline:6px}.P5oC1W_shell .P5oC1W_statusCluster [class*=iconButton]{display:none}}@media (prefers-reduced-motion:reduce){.P5oC1W_shell [class*=primaryButton],.P5oC1W_shell [class*=secondaryButton],.P5oC1W_shell [class*=ghostButton],.P5oC1W_shell [class*=dangerButton],.P5oC1W_shell [class*=dangerSolidButton],.P5oC1W_shell [class*=iconButton],.P5oC1W_shell [class*=bodyEditButton],.P5oC1W_shell [class*=inspectorEye],.P5oC1W_shell [class*=inspectorHeading] button,.P5oC1W_shell [class*=sectionHeading] button,.P5oC1W_shell [class*=previewHeading] button{transition:none}}"; - const tagId$4 = "dsh-mnemon/MnemonSidebarView.module.css"; + const css$4 = "._Bh55G_shell._Bh55G_shell{background:var(--dsw-alias-bg-base);font-family:var(--dsw-font-family)}._Bh55G_shell ._Bh55G_masthead{background:var(--dsw-alias-bg-base);border-bottom:0;align-items:center;gap:12px;min-height:50px;padding:10px 16px 6px;display:flex}._Bh55G_shell ._Bh55G_brand{flex:auto;gap:8px;overflow:hidden}._Bh55G_shell ._Bh55G_brand h1{letter-spacing:0;flex:none;margin:0;font-size:16px;font-weight:700;line-height:24px}._Bh55G_shell [class*=storageMode]{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);gap:5px;min-width:96px;min-height:32px;padding:0 9px}._Bh55G_shell [class*=storageMode]>span{color:var(--dsw-alias-label-tertiary);font-size:11px}._Bh55G_shell [class*=storageMode]>strong{color:var(--dsw-alias-label-primary);font-size:12px}._Bh55G_shell ._Bh55G_headerActions{flex:0 auto;gap:6px}._Bh55G_shell ._Bh55G_workspacePicker{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:8px;flex:0 auto;gap:7px;min-height:32px;padding-left:9px}._Bh55G_shell ._Bh55G_workspacePicker>span{color:var(--dsw-alias-label-tertiary);font-size:11px;display:block}._Bh55G_shell ._Bh55G_workspacePicker select{border:0;border-left:1px solid var(--dsw-alias-border-l1);background:var(--dsw-specific-input-major);border-radius:0 7px 7px 0;width:min(190px,20vw);height:30px;padding:0 28px 0 10px;font-size:13px}._Bh55G_shell ._Bh55G_statusCluster{background:0 0;border:0;border-radius:8px;gap:7px;min-height:30px;padding:0 2px 0 8px;font-size:12px}._Bh55G_shell ._Bh55G_statusCluster>span:not([class*=statusDot]){min-width:56px}._Bh55G_shell ._Bh55G_workspaceMismatch{border-color:color-mix(in srgb, var(--dsw-alias-state-business-primary) 34%, var(--dsw-alias-border-l1));background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 6%, var(--dsw-alias-bg-layer-1));white-space:nowrap;border-radius:8px;flex:none;justify-content:flex-start;gap:6px;min-height:32px;margin:0;padding:0 3px 0 9px}._Bh55G_shell ._Bh55G_workspaceMismatch>span{color:var(--dsw-alias-label-secondary);font-size:11px}._Bh55G_shell ._Bh55G_workspaceMismatch>button{border:1px solid color-mix(in srgb, var(--dsw-alias-state-business-primary) 55%, var(--dsw-alias-border-l2));min-height:26px;color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-bg-base);cursor:pointer;border-radius:6px;padding:0 8px;font-size:11px}._Bh55G_shell ._Bh55G_workspaceMismatch>button:hover{background:var(--dsw-alias-interactive-bg-hover)}._Bh55G_shell ._Bh55G_topNavigation{background:var(--dsw-alias-bg-base);border-bottom:0;gap:0;min-height:0;padding:0 16px}._Bh55G_shell ._Bh55G_topNavigation:after{display:none}._Bh55G_shell ._Bh55G_nav{border-bottom:1px solid var(--dsw-alias-border-l1);flex:1;gap:2px;padding-right:0}._Bh55G_shell ._Bh55G_nav button{border-bottom:2px solid #0000;border-radius:6px 6px 0 0;gap:0;min-height:0;padding:7px 14px;font-size:13px;font-weight:400}._Bh55G_shell ._Bh55G_nav button:hover{background:var(--dsw-alias-interactive-bg-hover)}._Bh55G_shell ._Bh55G_nav button[data-active]{color:var(--dsw-alias-label-primary);border-bottom-color:var(--dsw-alias-state-business-primary);font-weight:600}._Bh55G_shell ._Bh55G_memoryWorkspace{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);flex:none;padding:12px 16px 0}._Bh55G_shell ._Bh55G_memoryWorkspace>[class*=pageHeader]{margin-bottom:8px}._Bh55G_shell ._Bh55G_memoryNavigation{flex:none;align-items:flex-end;gap:12px;min-width:0;padding:0;display:flex}._Bh55G_shell ._Bh55G_memoryTabs{scrollbar-width:none;flex:1;gap:2px;min-width:0;display:flex;overflow-x:auto}._Bh55G_shell ._Bh55G_memoryTabs::-webkit-scrollbar{display:none}._Bh55G_shell ._Bh55G_memoryTabs button{min-width:max-content;min-height:0;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;border-radius:6px 6px 0 0;padding:6px 12px;font-size:13px}._Bh55G_shell ._Bh55G_memoryTabs button:hover{background:var(--dsw-alias-interactive-bg-hover)}._Bh55G_shell ._Bh55G_memoryTabs button[data-active]{border-bottom-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-primary);font-weight:600}._Bh55G_shell ._Bh55G_memoryWriteButton{flex:none}._Bh55G_shell ._Bh55G_modalBackdrop{z-index:1300;overscroll-behavior:contain;background:var(--dsw-alias-bg-mask-1);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}._Bh55G_shell ._Bh55G_modal{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);width:min(680px,100vw - 48px);max-height:calc(100vh - 96px);box-shadow:var(--dsw-shadow-lv3);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}._Bh55G_shell ._Bh55G_modal>header{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:space-between;align-items:flex-start;gap:18px;padding:15px 18px;display:flex}._Bh55G_shell ._Bh55G_modal>header h2{margin:0;font-size:15px;line-height:22px}._Bh55G_shell ._Bh55G_modal>header p{max-width:64ch;color:var(--dsw-alias-label-secondary);margin:3px 0 0;font-size:12px;line-height:1.5}._Bh55G_shell ._Bh55G_modal>div:last-child{min-height:0;padding:18px;overflow-y:auto}._Bh55G_shell ._Bh55G_modal form[class*=runtimeComposer],._Bh55G_shell ._Bh55G_modal form[class*=documentEditor]{background:0 0;border:0;border-radius:0;margin:0;padding:0}._Bh55G_shell ._Bh55G_modal form[class*=runtimeComposer]>[class*=runtimeComposerHeading],._Bh55G_shell ._Bh55G_modal form[class*=documentEditor]>header{display:none}._Bh55G_shell ._Bh55G_modal section[class*=supervisedComposer]{overflow:visible}._Bh55G_shell ._Bh55G_modal form[class*=supervisedForm]{padding:0}._Bh55G_shell ._Bh55G_modal [class*=supervisedHeading]{margin-bottom:10px}._Bh55G_shell ._Bh55G_modal [class*=supervisedHeading] h3{display:none}._Bh55G_shell ._Bh55G_modal [class*=formActions]{justify-content:flex-end}._Bh55G_shell ._Bh55G_modal details[class*=advancedWrite]{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:10px;margin-top:14px;overflow:hidden}._Bh55G_shell [class*=primaryButton]{min-height:32px;color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-info-fill);white-space:nowrap;border:0;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}._Bh55G_shell [class*=primaryButton]:hover:not(:disabled){filter:none;background:var(--dsw-alias-button-info-hover)}._Bh55G_shell [class*=secondaryButton],._Bh55G_shell [class*=ghostButton]{border:1px solid var(--dsw-alias-border-l2);min-height:32px;color:var(--dsw-alias-label-primary);white-space:nowrap;background:0 0;border-radius:8px;padding:5px 12px;font-size:12px;font-weight:400}._Bh55G_shell [class*=secondaryButton]:hover:not(:disabled),._Bh55G_shell [class*=ghostButton]:hover:not(:disabled){filter:none;background:var(--dsw-alias-interactive-bg-hover)}._Bh55G_shell [class*=dangerButton]{min-height:0;color:var(--dsw-alias-state-error-primary);white-space:nowrap;background:0 0;border:0;border-radius:0;padding:0;font-size:12px;font-weight:400}._Bh55G_shell [class*=dangerButton]:hover:not(:disabled){filter:none;background:0 0;text-decoration:underline}._Bh55G_shell [class*=dangerSolidButton]{color:#fff;background:var(--dsw-alias-state-error-primary);white-space:nowrap;border:0;border-radius:8px;min-height:32px;padding:6px 14px;font-size:13px;font-weight:600}._Bh55G_shell [class*=dangerSolidButton]:hover:not(:disabled){filter:brightness(1.08)}._Bh55G_shell [class*=iconButton],._Bh55G_shell [class*=bodyEditButton],._Bh55G_shell [class*=inspectorEye],._Bh55G_shell [class*=inspectorHeading] button,._Bh55G_shell [class*=sectionHeading] button,._Bh55G_shell [class*=previewHeading] button{width:26px;height:26px;min-height:0;color:var(--dsw-alias-label-secondary);background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:13px;display:inline-flex}._Bh55G_shell [class*=iconButton]:hover:not(:disabled),._Bh55G_shell [class*=bodyEditButton]:hover:not(:disabled),._Bh55G_shell [class*=inspectorEye]:hover:not(:disabled),._Bh55G_shell [class*=inspectorHeading] button:hover:not(:disabled),._Bh55G_shell [class*=sectionHeading] button:hover:not(:disabled),._Bh55G_shell [class*=previewHeading] button:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover);border:0}._Bh55G_shell [class*=primaryButton],._Bh55G_shell [class*=secondaryButton],._Bh55G_shell [class*=ghostButton],._Bh55G_shell [class*=dangerButton],._Bh55G_shell [class*=dangerSolidButton],._Bh55G_shell [class*=iconButton],._Bh55G_shell [class*=bodyEditButton],._Bh55G_shell [class*=inspectorEye],._Bh55G_shell [class*=inspectorHeading] button,._Bh55G_shell [class*=sectionHeading] button,._Bh55G_shell [class*=previewHeading] button{cursor:pointer;transition:background-color .12s,color .12s,border-color .12s,outline-color .12s,box-shadow .12s,transform .12s}._Bh55G_shell [class*=primaryButton]:active:not(:disabled),._Bh55G_shell [class*=secondaryButton]:active:not(:disabled),._Bh55G_shell [class*=ghostButton]:active:not(:disabled),._Bh55G_shell [class*=dangerButton]:active:not(:disabled),._Bh55G_shell [class*=dangerSolidButton]:active:not(:disabled),._Bh55G_shell [class*=iconButton]:active:not(:disabled),._Bh55G_shell [class*=bodyEditButton]:active:not(:disabled),._Bh55G_shell [class*=inspectorEye]:active:not(:disabled),._Bh55G_shell [class*=inspectorHeading] button:active:not(:disabled),._Bh55G_shell [class*=sectionHeading] button:active:not(:disabled),._Bh55G_shell [class*=previewHeading] button:active:not(:disabled){transform:translateY(1px)}._Bh55G_shell [class*=primaryButton]:disabled,._Bh55G_shell [class*=secondaryButton]:disabled,._Bh55G_shell [class*=ghostButton]:disabled,._Bh55G_shell [class*=dangerButton]:disabled,._Bh55G_shell [class*=dangerSolidButton]:disabled,._Bh55G_shell [class*=iconButton]:disabled,._Bh55G_shell [class*=bodyEditButton]:disabled,._Bh55G_shell [class*=inspectorEye]:disabled{cursor:default;opacity:.45}._Bh55G_shell ._Bh55G_canvas{background:var(--dsw-alias-bg-base)}._Bh55G_shell button,._Bh55G_shell input,._Bh55G_shell select,._Bh55G_shell textarea{font-family:var(--dsw-font-family)}._Bh55G_shell button:focus-visible,._Bh55G_shell input:focus-visible,._Bh55G_shell select:focus-visible,._Bh55G_shell textarea:focus-visible,._Bh55G_shell summary:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}._Bh55G_shell ._Bh55G_canvas>div{width:100%;padding:14px 16px clamp(96px,14vh,150px)}._Bh55G_shell ._Bh55G_pageHeader{margin-bottom:12px}._Bh55G_shell ._Bh55G_pageHeader h2{letter-spacing:0;margin-top:0;font-size:16px;line-height:1.35}._Bh55G_shell ._Bh55G_pageHeader p{font-size:13px;line-height:1.55}._Bh55G_shell ._Bh55G_canvas[data-lock-page-header] [class*=pageHeader]{z-index:12;border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);margin:-14px -16px 12px;padding:14px 16px 10px;position:sticky;top:0}._Bh55G_shell input,._Bh55G_shell select,._Bh55G_shell textarea{font-family:var(--dsw-font-family);font-size:13px;font-weight:400}._Bh55G_shell [class*=bodyEdit] label,._Bh55G_shell [class*=runtimeComposerActions] label,._Bh55G_shell [class*=documentEditor] label,._Bh55G_shell [class*=searchControls] label,._Bh55G_shell [class*=formGrid] label,._Bh55G_shell [class*=fieldWide]{color:var(--dsw-alias-label-secondary);gap:5px;font-size:12px;font-weight:500}._Bh55G_shell [class*=bodyEdit] input,._Bh55G_shell [class*=bodyEdit] select,._Bh55G_shell [class*=bodyEdit] textarea,._Bh55G_shell [class*=runtimeComposer]>textarea,._Bh55G_shell [class*=runtimeComposerActions] select,._Bh55G_shell [class*=runtimeEntry] select,._Bh55G_shell [class*=documentEditor] input,._Bh55G_shell [class*=documentEditor] textarea,._Bh55G_shell [class*=searchControls] select,._Bh55G_shell [class*=formGrid] select,._Bh55G_shell [class*=formGrid] input,._Bh55G_shell [class*=listToolbar] input,._Bh55G_shell [class*=listToolbar] select,._Bh55G_shell [class*=entitySearch] input,._Bh55G_shell [class*=bodyCreate] input{border:1px solid var(--dsw-alias-border-l2);min-height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border-radius:8px;padding:7px 10px;font-size:13px;font-weight:400}._Bh55G_shell select{cursor:pointer;font-weight:400}._Bh55G_shell textarea{font-weight:400;line-height:1.55}._Bh55G_shell [class*=cardKicker],._Bh55G_shell [class*=sectionHeading]>div>span,._Bh55G_shell [class*=entityHeading]>span,._Bh55G_shell [class*=inspectorHeading]>span{letter-spacing:.06em;font-size:11px}._Bh55G_shell [class*=bodyDirectoryHeader] p,._Bh55G_shell [class*=bodyCard]>p,._Bh55G_shell [class*=graphToolbar],._Bh55G_shell [class*=graphFooter],._Bh55G_shell [class*=runtimeTargetDescription],._Bh55G_shell [class*=documentList]>button p,._Bh55G_shell [class*=documentDetail]>header p,._Bh55G_shell [class*=documentArchiveReceipt] p,._Bh55G_shell [class*=healthStrip] p,._Bh55G_shell [class*=storageAreaGrid] article>p,._Bh55G_shell [class*=statusSectionHeader] p,._Bh55G_shell [class*=writeGuide] li span,._Bh55G_shell [class*=writeGuide]>p,._Bh55G_shell [class*=manualActions] p{font-size:12px}._Bh55G_shell [class*=bodyDirectoryPath],._Bh55G_shell [class*=bodyCard] footer,._Bh55G_shell [class*=bodyHealth],._Bh55G_shell [class*=badge],._Bh55G_shell [class*=entities] span,._Bh55G_shell [class*=runtimeEntryMeta]>span,._Bh55G_shell [class*=runtimeEntryBadges]>span,._Bh55G_shell [class*=runtimeEntryMeta] time,._Bh55G_shell [class*=runtimeFootnote],._Bh55G_shell [class*=documentSummary] article>span,._Bh55G_shell [class*=documentSummary] article>small,._Bh55G_shell [class*=documentList]>header,._Bh55G_shell [class*=documentList]>button time,._Bh55G_shell [class*=documentList]>button footer,._Bh55G_shell [class*=documentDetail] dt,._Bh55G_shell [class*=documentSources]>span,._Bh55G_shell [class*=storageRoot] span,._Bh55G_shell [class*=storageRoot] small,._Bh55G_shell [class*=storageAreaMetric] span,._Bh55G_shell [class*=storageAreaMetric] code,._Bh55G_shell [class*=storagePath],._Bh55G_shell [class*=storageAreaGrid] article>small,._Bh55G_shell [class*=storageFootnote]{font-size:11px}._Bh55G_shell [class*=bodySwitch],._Bh55G_shell [class*=graphCanvasControls] button,._Bh55G_shell [class*=documentToolbar]>div button,._Bh55G_shell [class*=documentDetail] dd,._Bh55G_shell [class*=documentDanger] p,._Bh55G_shell [class*=advancedWrite] summary small{font-size:12px}._Bh55G_shell [class*=documentList]>button strong,._Bh55G_shell [class*=runtimeEntry]>p,._Bh55G_shell [class*=inspectorMeta] dd{font-size:13px}._Bh55G_shell [class*=runtimeEntryBadges]>span{border:1px solid var(--dsw-alias-border-l1);min-height:22px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-radius:999px;align-items:center;padding:0 8px;font-size:11px;font-weight:400;line-height:20px;display:inline-flex}._Bh55G_shell [class*=runtimeEntryBadges]>[class*=runtimeEntryTarget]{border-color:color-mix(in srgb, var(--dsw-alias-state-business-primary) 30%, var(--dsw-alias-border-l1));color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 7%, var(--dsw-alias-bg-layer-1));font-family:var(--dsw-font-family);font-weight:500}._Bh55G_shell [class*=runtimeEntry][data-importance=critical] [class*=runtimeEntryBadges]>span:last-child{border-color:color-mix(in srgb, var(--dsw-alias-state-error-primary) 24%, var(--dsw-alias-border-l1));color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 6%, var(--dsw-alias-bg-layer-1))}._Bh55G_shell [class*=listProgress],._Bh55G_shell [class*=compactListProgress]{color:var(--dsw-alias-label-tertiary);font-size:12px}._Bh55G_shell [class*=documentWorkspace]{align-items:stretch;height:clamp(520px,100dvh - 220px,760px);min-height:520px}._Bh55G_shell [class*=documentList],._Bh55G_shell [class*=documentReader]{overscroll-behavior:contain;scrollbar-gutter:stable;min-height:0;overflow-y:auto}._Bh55G_shell [class*=bodyGrid]{grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr))}._Bh55G_shell article[class*=bodyCard]{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);height:100%;box-shadow:none;opacity:1;flex-direction:column;padding:12px;display:flex}._Bh55G_shell article[class*=bodyCard][data-active]{border-color:var(--dsw-alias-border-l1);box-shadow:none}._Bh55G_shell ._Bh55G_bodyCardHeader{justify-content:space-between;align-items:flex-start;gap:12px;min-width:0;display:flex}._Bh55G_shell ._Bh55G_bodyDirectoryActions{flex:none;align-items:center;gap:8px;display:flex}._Bh55G_shell ._Bh55G_bodyDirectoryActions>strong{color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 8%, transparent);white-space:nowrap;border-radius:999px;padding:5px 8px;font-size:11px;font-weight:600}._Bh55G_shell ._Bh55G_bodyCardIdentity{flex:1;align-items:flex-start;gap:8px;min-width:0;display:flex}._Bh55G_shell ._Bh55G_bodyCardIdentity>[class*=bodySignal]{flex:none;width:6px;height:6px;margin-top:7px}._Bh55G_shell ._Bh55G_bodyCardIdentity>div{flex:1;gap:2px;min-width:0;display:grid}._Bh55G_shell ._Bh55G_bodyCardIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;line-height:20px;overflow:hidden}._Bh55G_shell ._Bh55G_bodyCardMeta{align-items:center;gap:8px;min-width:0;display:flex}._Bh55G_shell ._Bh55G_bodyCardMeta code{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}._Bh55G_shell ._Bh55G_bodyCardMeta [class*=bodyHealth]{letter-spacing:0;flex:none;font-size:11px}._Bh55G_shell ._Bh55G_bodyCardHeader>[class*=bodySwitch]{flex:none;min-height:24px}._Bh55G_shell article[class*=bodyCard]>p{-webkit-line-clamp:4;-webkit-box-orient:vertical;min-height:6.2em;max-height:6.2em;margin:12px 0;line-height:1.55;display:-webkit-box;overflow:hidden}._Bh55G_shell ._Bh55G_bodyCardFooter{white-space:nowrap;grid-template-columns:minmax(max-content,1fr) max-content;align-items:center;gap:10px;min-width:0;margin-top:auto;padding-top:9px;display:grid}._Bh55G_shell ._Bh55G_bodyCardStats{flex-wrap:nowrap;align-items:center;gap:10px;min-width:max-content;display:flex}._Bh55G_shell ._Bh55G_bodyCardFooter [class*=bodyCardActions]{flex-wrap:nowrap;flex:none;align-items:center;gap:6px;display:flex}._Bh55G_shell ._Bh55G_itemActionButton{border:1px solid;border-radius:7px;min-height:28px;padding:4px 9px;font-size:12px;line-height:18px}._Bh55G_shell [class*=runtimeEntry] footer,._Bh55G_shell [class*=cardActions]{gap:6px}._Bh55G_shell ._Bh55G_itemEditAction{color:var(--dsw-alias-state-business-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-business-primary) 38%, var(--dsw-alias-border-l2));background:0 0}._Bh55G_shell ._Bh55G_itemEditAction:hover:not(:disabled){color:var(--dsw-alias-state-business-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-business-primary) 58%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 8%, transparent)}._Bh55G_shell ._Bh55G_itemDangerAction{color:var(--dsw-alias-state-error-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-error-primary) 34%, var(--dsw-alias-border-l2));background:0 0;padding:4px 9px}._Bh55G_shell ._Bh55G_itemDangerAction:hover:not(:disabled){border-color:color-mix(in srgb, var(--dsw-alias-state-error-primary) 54%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);text-decoration:none}._Bh55G_shell [class*=bodyDeleteConfirm]>p{font-size:13px}._Bh55G_shell [class*=pageHeaderMeta]>code{text-align:center;font-variant-numeric:tabular-nums;min-width:72px;font-size:11px}._Bh55G_shell ._Bh55G_inspectorGlyph{border:1px solid var(--dsw-alias-border-l1);width:44px;height:44px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-1);font:20px/1 var(--mn-code);opacity:1;border-radius:10px;place-items:center;margin-bottom:10px;display:grid}@media (width<=760px){._Bh55G_shell ._Bh55G_masthead{min-height:48px;padding:8px 12px 4px}._Bh55G_shell ._Bh55G_headerActions{max-width:none}._Bh55G_shell ._Bh55G_statusCluster>span:not([class*=statusDot]){display:inline}._Bh55G_shell [class*=storageMode]{min-width:0}._Bh55G_shell [class*=storageMode]>span,._Bh55G_shell ._Bh55G_workspacePicker>span,._Bh55G_shell ._Bh55G_workspaceMismatch>span{display:none}._Bh55G_shell ._Bh55G_workspacePicker{gap:0;padding-left:0}._Bh55G_shell ._Bh55G_workspacePicker select{border-left:0;width:min(160px,31vw)}._Bh55G_shell ._Bh55G_topNavigation{padding:0 12px}._Bh55G_shell ._Bh55G_memoryNavigation{padding-inline:12px}._Bh55G_shell ._Bh55G_memoryTabs button{padding-inline:10px}._Bh55G_shell ._Bh55G_nav button{text-align:left;flex-direction:row;min-width:max-content;padding:7px 12px}._Bh55G_shell ._Bh55G_canvas>div{padding:14px 12px calc(170px + env(safe-area-inset-bottom,0px))}._Bh55G_shell ._Bh55G_canvas[data-lock-page-header] [class*=pageHeader]{margin-inline:-12px;padding-inline:12px}._Bh55G_shell ._Bh55G_modalBackdrop{padding:12px}._Bh55G_shell ._Bh55G_modal{width:calc(100vw - 24px);max-height:calc(100vh - 24px)}._Bh55G_shell ._Bh55G_modal>div:last-child{padding:14px}._Bh55G_shell [class*=documentWorkspace]{height:auto;min-height:0}._Bh55G_shell [class*=documentList]{scrollbar-gutter:auto;overflow-y:auto}._Bh55G_shell [class*=documentReader]{scrollbar-gutter:auto;overflow:visible}}@media (width<=520px){._Bh55G_shell ._Bh55G_masthead{min-height:46px}._Bh55G_shell ._Bh55G_brand h1{font-size:16px}._Bh55G_shell ._Bh55G_headerActions{max-width:62vw}._Bh55G_shell [class*=storageMode]{padding-inline:7px}._Bh55G_shell ._Bh55G_workspacePicker select{width:min(118px,30vw);padding-left:8px}._Bh55G_shell ._Bh55G_workspaceMismatch>button{padding-inline:6px}._Bh55G_shell ._Bh55G_statusCluster [class*=iconButton]{display:none}}@media (prefers-reduced-motion:reduce){._Bh55G_shell [class*=primaryButton],._Bh55G_shell [class*=secondaryButton],._Bh55G_shell [class*=ghostButton],._Bh55G_shell [class*=dangerButton],._Bh55G_shell [class*=dangerSolidButton],._Bh55G_shell [class*=iconButton],._Bh55G_shell [class*=bodyEditButton],._Bh55G_shell [class*=inspectorEye],._Bh55G_shell [class*=inspectorHeading] button,._Bh55G_shell [class*=sectionHeading] button,._Bh55G_shell [class*=previewHeading] button{transition:none}}"; + const tagId$4 = "dsh-mnemon/src/client/MnemonSidebarView.module.css"; if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) { const tag = document.createElement("style"); tag.dataset.plugin = "dsh-mnemon"; @@ -3090,33 +3090,33 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonSidebarView_module_css_default = { - "bodyCardFooter": "P5oC1W_bodyCardFooter", - "bodyCardHeader": "P5oC1W_bodyCardHeader", - "bodyCardIdentity": "P5oC1W_bodyCardIdentity", - "bodyCardMeta": "P5oC1W_bodyCardMeta", - "bodyCardStats": "P5oC1W_bodyCardStats", - "bodyDirectoryActions": "P5oC1W_bodyDirectoryActions", - "brand": "P5oC1W_brand", - "canvas": "P5oC1W_canvas", - "headerActions": "P5oC1W_headerActions", - "inspectorGlyph": "P5oC1W_inspectorGlyph", - "itemActionButton": "P5oC1W_itemActionButton", - "itemDangerAction": "P5oC1W_itemDangerAction", - "itemEditAction": "P5oC1W_itemEditAction", - "masthead": "P5oC1W_masthead", - "memoryNavigation": "P5oC1W_memoryNavigation", - "memoryTabs": "P5oC1W_memoryTabs", - "memoryWorkspace": "P5oC1W_memoryWorkspace", - "memoryWriteButton": "P5oC1W_memoryWriteButton", - "modal": "P5oC1W_modal", - "modalBackdrop": "P5oC1W_modalBackdrop", - "nav": "P5oC1W_nav", - "pageHeader": "P5oC1W_pageHeader", - "shell": "P5oC1W_shell", - "statusCluster": "P5oC1W_statusCluster", - "topNavigation": "P5oC1W_topNavigation", - "workspaceMismatch": "P5oC1W_workspaceMismatch", - "workspacePicker": "P5oC1W_workspacePicker" + "bodyCardFooter": "_Bh55G_bodyCardFooter", + "bodyCardHeader": "_Bh55G_bodyCardHeader", + "bodyCardIdentity": "_Bh55G_bodyCardIdentity", + "bodyCardMeta": "_Bh55G_bodyCardMeta", + "bodyCardStats": "_Bh55G_bodyCardStats", + "bodyDirectoryActions": "_Bh55G_bodyDirectoryActions", + "brand": "_Bh55G_brand", + "canvas": "_Bh55G_canvas", + "headerActions": "_Bh55G_headerActions", + "inspectorGlyph": "_Bh55G_inspectorGlyph", + "itemActionButton": "_Bh55G_itemActionButton", + "itemDangerAction": "_Bh55G_itemDangerAction", + "itemEditAction": "_Bh55G_itemEditAction", + "masthead": "_Bh55G_masthead", + "memoryNavigation": "_Bh55G_memoryNavigation", + "memoryTabs": "_Bh55G_memoryTabs", + "memoryWorkspace": "_Bh55G_memoryWorkspace", + "memoryWriteButton": "_Bh55G_memoryWriteButton", + "modal": "_Bh55G_modal", + "modalBackdrop": "_Bh55G_modalBackdrop", + "nav": "_Bh55G_nav", + "pageHeader": "_Bh55G_pageHeader", + "shell": "_Bh55G_shell", + "statusCluster": "_Bh55G_statusCluster", + "topNavigation": "_Bh55G_topNavigation", + "workspaceMismatch": "_Bh55G_workspaceMismatch", + "workspacePicker": "_Bh55G_workspacePicker" }; //#endregion //#region src/client/MnemonViewAppearance.tsx @@ -3185,8 +3185,8 @@ window.__ModuleLoader__.load({ } //#endregion //#region \0dsh-mnemon-css:/Users/grivn/github.com/omdsh-dev/dsh-mnemon/src/client/MnemonView.module.css.mjs - const css$3 = ".OkhtbG_shell{--mn-bg:var(--dsw-alias-bg-base);--mn-layer-1:var(--dsw-alias-bg-layer-1);--mn-layer-2:var(--dsw-alias-bg-layer-2);--mn-input:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-2));--mn-text:var(--dsw-alias-label-primary);--mn-muted:var(--dsw-alias-label-secondary);--mn-faint:var(--dsw-alias-label-tertiary);--mn-line:var(--dsw-alias-border-l1);--mn-line-strong:var(--dsw-alias-border-l2);--mn-accent:var(--dsw-alias-state-business-primary);--mn-hover:var(--dsw-alias-interactive-bg-hover);--mn-danger:var(--dsw-alias-state-error-primary);--mn-success:var(--dsw-alias-state-success-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-bg);font:13px/1.55 var(--mn-sans);-webkit-tap-highlight-color:transparent;flex-direction:column;display:flex;overflow:hidden}.OkhtbG_shell *,.OkhtbG_shell :before,.OkhtbG_shell :after{box-sizing:border-box}.OkhtbG_shell button,.OkhtbG_shell input,.OkhtbG_shell select,.OkhtbG_shell textarea{color:inherit;font:inherit}.OkhtbG_shell button,.OkhtbG_shell select{touch-action:manipulation}.OkhtbG_shell button:focus-visible,.OkhtbG_shell input:focus-visible,.OkhtbG_shell select:focus-visible,.OkhtbG_shell textarea:focus-visible,.OkhtbG_shell summary:focus-visible,.OkhtbG_shell [role=button]:focus-visible{outline:2px solid var(--mn-accent);outline-offset:2px}.OkhtbG_masthead{border-bottom:1px solid var(--mn-line);background:var(--mn-bg);flex:none;grid-template-columns:minmax(220px,1fr) auto auto;align-items:center;gap:clamp(12px,2vw,24px);min-height:56px;padding:8px 16px;display:grid}.OkhtbG_backButton{flex:none;align-items:center;gap:4px;min-width:max-content;display:inline-flex}.OkhtbG_backButton>svg{flex:none}.OkhtbG_brand{align-items:center;gap:11px;min-width:0;display:flex}.OkhtbG_brandLogo{width:32px;height:32px;box-shadow:0 0 0 1px var(--mn-line);border-radius:8px;flex:none;overflow:hidden}.OkhtbG_brand h1{letter-spacing:-.02em;margin:1px 0 0;font-size:16px;line-height:1.15}.OkhtbG_storageMode{border:1px solid var(--mn-line-strong);min-height:32px;color:var(--mn-muted);background:var(--mn-layer-1);white-space:nowrap;border-radius:8px;flex:none;align-items:center;gap:6px;padding:0 9px;display:flex}.OkhtbG_storageMode>span{font-size:10px}.OkhtbG_storageMode>strong{color:var(--mn-text);font-size:11px;font-weight:600}.OkhtbG_cardKicker,.OkhtbG_sectionHeading>div>span,.OkhtbG_entityHeading>span,.OkhtbG_inspectorHeading>span{color:var(--mn-faint);font:650 9px/1.2 var(--mn-code);letter-spacing:.12em;text-transform:uppercase}.OkhtbG_statusCluster{border:1px solid var(--mn-line-strong);min-height:34px;color:var(--mn-muted);background:var(--mn-layer-1);border-radius:9px;flex:none;align-items:center;gap:8px;padding:0 4px 0 11px;font-size:11px;display:flex}.OkhtbG_statusDot{border-radius:50%;width:6px;height:6px}.OkhtbG_online{background:var(--mn-success);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 15%, transparent)}.OkhtbG_offline{background:var(--mn-danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-danger) 14%, transparent)}.OkhtbG_checking{background:var(--mn-faint);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-faint) 12%, transparent)}.OkhtbG_iconButton{width:32px;height:32px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;display:grid}.OkhtbG_iconButton:hover{color:var(--mn-accent);background:var(--mn-hover)}.OkhtbG_headerActions{justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.OkhtbG_workspacePicker{min-width:0;color:var(--mn-faint);align-items:center;gap:7px;font-size:10px;display:flex}.OkhtbG_workspacePicker>span{white-space:nowrap}.OkhtbG_workspacePicker select{border:1px solid var(--mn-line-strong);width:min(190px,22vw);min-width:112px;height:34px;color:var(--mn-text);background:var(--mn-input);cursor:pointer;border-radius:9px;outline:0;padding:0 28px 0 9px;font-size:11px}.OkhtbG_workspacePicker select:hover{border-color:color-mix(in srgb, var(--mn-accent) 50%, var(--mn-line-strong))}.OkhtbG_alert,.OkhtbG_inlineError{border:1px solid color-mix(in srgb, var(--mn-danger) 32%, transparent);color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 7%, var(--mn-layer-1));border-radius:9px;padding:10px 13px;font-size:12px}.OkhtbG_alert{flex-direction:column;flex:none;margin:10px clamp(18px,2.5vw,32px) 0;display:flex}.OkhtbG_workspaceMismatch{border:1px solid color-mix(in srgb, var(--mn-accent) 36%, var(--mn-line));background:color-mix(in srgb, var(--mn-accent) 7%, var(--mn-layer-1));border-radius:10px;flex:none;justify-content:space-between;align-items:center;gap:18px;min-width:0;margin:10px clamp(18px,2.5vw,32px) 0;padding:11px 12px 11px 14px;display:flex}.OkhtbG_workspaceMismatch>div{gap:2px;min-width:0;display:grid}.OkhtbG_workspaceMismatch strong{font-size:12px}.OkhtbG_workspaceMismatch span{color:var(--mn-muted);font-size:10px}.OkhtbG_workspaceMismatch>div>div{flex-wrap:wrap;gap:5px 12px;min-width:0;margin-top:4px;display:flex}.OkhtbG_workspaceMismatch code{color:var(--mn-faint);font:9px/1.4 var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.OkhtbG_workspaceMismatch>button{white-space:nowrap;flex:none;min-height:32px}.OkhtbG_telemetry{align-items:center;min-width:0;display:flex}.OkhtbG_telemetryMetric{border-left:1px solid var(--mn-line);gap:2px;min-width:72px;padding:1px 14px;display:grid}.OkhtbG_telemetryMetric span{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9px;overflow:hidden}.OkhtbG_telemetryMetric strong{font:650 13px/1 var(--mn-code);font-variant-numeric:tabular-nums}.OkhtbG_workspace{flex-direction:column;flex:1;min-height:0;display:flex}.OkhtbG_topNavigation{border-bottom:1px solid var(--mn-line);background:var(--mn-layer-1);flex:none;justify-content:space-between;align-items:stretch;gap:14px;min-width:0;min-height:46px;padding:0 16px;display:flex}.OkhtbG_nav{overscroll-behavior-inline:contain;scrollbar-width:none;align-items:stretch;gap:10px;min-width:0;display:flex;overflow-x:auto}.OkhtbG_nav::-webkit-scrollbar{display:none}.OkhtbG_navGroup{align-items:stretch;gap:14px;min-width:0;display:flex}.OkhtbG_navGroupDivider{background:var(--mn-line);flex:none;align-self:center;width:1px;height:22px}.OkhtbG_nav button{min-width:max-content;min-height:44px;color:var(--mn-muted);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:7px;padding:0 3px;display:flex;position:relative}.OkhtbG_nav button:hover,.OkhtbG_nav button[aria-current=page]{color:var(--mn-text)}.OkhtbG_nav button[aria-current=page]:after{content:\"\";background:var(--mn-accent);border-radius:2px 2px 0 0;height:2px;position:absolute;bottom:-1px;left:0;right:0}.OkhtbG_nav button[aria-current=page] .OkhtbG_navGlyph{color:var(--mn-accent)}.OkhtbG_nav button>span:last-child{min-width:0;display:block}.OkhtbG_nav button strong{font-size:12px;font-weight:600}.OkhtbG_nav button small{display:none}.OkhtbG_navGlyph{color:var(--mn-faint);font:600 13px/1 var(--mn-code)}@media (width>=1000px){.OkhtbG_nav button{min-height:50px}.OkhtbG_nav button small{color:var(--mn-faint);margin-top:1px;font-size:9px;line-height:1.3;display:block}}.OkhtbG_spaceSummary{border-left:1px solid var(--mn-line);flex:none;grid-template-columns:minmax(0,1fr) auto;align-content:center;gap:1px 9px;min-width:142px;padding:0 0 0 14px;display:grid}.OkhtbG_spaceSummary>span{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9px;overflow:hidden}.OkhtbG_spaceSummary code{color:var(--mn-accent);font:650 12px/1 var(--mn-code);grid-row:span 2;align-self:center}.OkhtbG_spaceSummary small{color:var(--mn-faint);font-size:9px}.OkhtbG_canvas{overscroll-behavior-x:contain;overscroll-behavior-y:auto;scroll-behavior:auto;-webkit-overflow-scrolling:touch;background:var(--mn-bg);flex:1;min-width:0;overflow:auto}.OkhtbG_page{width:min(1320px,100%);min-height:100%;margin:0 auto;padding:clamp(16px,2vw,24px) clamp(16px,2.4vw,28px) clamp(96px,14vh,150px)}.OkhtbG_pageHeader{justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:16px;display:flex}.OkhtbG_pageHeader h2{letter-spacing:-.025em;margin:2px 0;font-size:20px;line-height:1.2}.OkhtbG_pageHeader p{max-width:72ch;color:var(--mn-muted);margin:0;font-size:12px;line-height:1.65}.OkhtbG_pageHeaderMeta{flex:none;align-items:center;gap:9px;display:flex}.OkhtbG_pageHeaderMeta>code{border:1px solid var(--mn-line);color:var(--mn-faint);background:var(--mn-layer-1);font:600 9px/1 var(--mn-code);letter-spacing:.06em;border-radius:7px;padding:6px 8px}.OkhtbG_primaryButton,.OkhtbG_secondaryButton,.OkhtbG_ghostButton,.OkhtbG_dangerButton,.OkhtbG_dangerSolidButton{cursor:pointer;border-radius:8px;min-height:36px;padding:0 13px;font-size:12px;transition:border-color .14s,background-color .14s,color .14s,transform .14s}.OkhtbG_primaryButton{border:1px solid var(--mn-accent);color:#fff;background:var(--mn-accent)}.OkhtbG_secondaryButton{border:1px solid var(--mn-line-strong);color:var(--mn-text);background:var(--mn-layer-1)}.OkhtbG_ghostButton,.OkhtbG_dangerButton{background:0 0;border:1px solid #0000;min-height:32px;padding:0 9px}.OkhtbG_ghostButton{color:var(--mn-muted)}.OkhtbG_dangerButton{color:var(--mn-danger)}.OkhtbG_dangerSolidButton{border:1px solid var(--mn-danger);color:#fff;background:var(--mn-danger);min-height:29px}.OkhtbG_primaryButton:hover,.OkhtbG_secondaryButton:hover,.OkhtbG_ghostButton:hover,.OkhtbG_dangerButton:hover{filter:brightness(.98);background-color:var(--mn-hover)}.OkhtbG_primaryButton:hover{background-color:var(--mn-accent)}.OkhtbG_shell button:disabled{cursor:not-allowed;opacity:.48}.OkhtbG_emptyState{border:1px dashed var(--mn-line-strong);background:color-mix(in srgb, var(--mn-layer-1) 50%, transparent);border-radius:13px;justify-content:center;align-items:center;gap:22px;min-height:220px;padding:30px;display:flex}.OkhtbG_emptyGlyph{border:1px solid color-mix(in srgb, var(--mn-accent) 35%, var(--mn-line));width:76px;height:76px;color:var(--mn-accent);background:radial-gradient(circle, color-mix(in srgb, var(--mn-accent) 12%, transparent), transparent 65%);font:500 26px/1 var(--mn-code);border-radius:50%;flex:none;place-items:center;display:grid}.OkhtbG_emptyState h3{margin:0 0 5px;font-size:16px}.OkhtbG_emptyState p{max-width:500px;color:var(--mn-muted);margin:0}.OkhtbG_loadingPanel{border:1px solid var(--mn-line);min-height:220px;color:var(--mn-muted);background:var(--mn-layer-1);border-radius:13px;place-items:center;display:grid}.OkhtbG_inlineError{margin:0 0 14px}.OkhtbG_muted,.OkhtbG_loading{color:var(--mn-faint);padding:16px 0;font-size:12px}.OkhtbG_bodyDirectory{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-1) 72%, var(--mn-bg));border-radius:11px;margin-bottom:12px;padding:12px 14px}.OkhtbG_bodyDirectoryHeader{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:10px;display:flex}.OkhtbG_bodyDirectoryHeader h3{margin:1px 0;font-size:13px}.OkhtbG_bodyDirectoryHeader p{color:var(--mn-muted);margin:0;font-size:10px}.OkhtbG_bodyDirectoryPath{max-width:min(62vw,720px);color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:9px;display:block;overflow:hidden}.OkhtbG_bodyDirectoryHeader>strong{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 9px var(--mn-code);border-radius:999px;flex:none;padding:5px 8px}.OkhtbG_bodyGrid{grid-template-columns:repeat(auto-fit,minmax(245px,1fr));gap:7px;display:grid}.OkhtbG_bodyDirectoryEmpty{border:1px dashed color-mix(in srgb, var(--mn-line) 84%, transparent);min-height:92px;color:var(--mn-muted);border-radius:12px;grid-column:1/-1;justify-content:center;align-items:center;gap:14px;display:flex}.OkhtbG_bodyDirectoryEmpty>span{opacity:.6;font-size:28px}.OkhtbG_bodyDirectoryEmpty strong{color:var(--mn-text);display:block}.OkhtbG_bodyDirectoryEmpty p{margin:3px 0 0;font-size:10px}.OkhtbG_bodyCard{--mn-body-accent:var(--mn-success);border:1px solid var(--mn-line);background:var(--mn-layer-1);opacity:.7;border-radius:9px;min-width:0;padding:9px 10px;transition:opacity .18s,border-color .18s}.OkhtbG_bodyCard[data-active]{border-color:color-mix(in srgb, var(--mn-body-accent) 42%, var(--mn-line));opacity:1;box-shadow:inset 0 1px 0 color-mix(in srgb, var(--mn-body-accent) 10%, transparent)}.OkhtbG_bodyCardTop{grid-template-columns:7px minmax(0,1fr) auto;align-items:center;gap:8px;display:grid}.OkhtbG_bodySignal{background:var(--mn-faint);border-radius:50%;width:7px;height:7px}.OkhtbG_bodyCard[data-active] .OkhtbG_bodySignal{background:var(--mn-body-accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--mn-body-accent) 14%, transparent)}.OkhtbG_bodyCard:not([data-healthy]) .OkhtbG_bodySignal{background:var(--mn-danger);box-shadow:0 0 0 4px color-mix(in srgb, var(--mn-danger) 12%, transparent)}.OkhtbG_bodyCardTop>div{min-width:0;display:grid}.OkhtbG_bodyCardTop strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.OkhtbG_bodyCardTop code{color:var(--mn-faint);font:9px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.OkhtbG_bodyHealth{color:var(--mn-success);font:650 8px var(--mn-code);letter-spacing:.07em;text-transform:uppercase}.OkhtbG_bodyCard:not([data-healthy]) .OkhtbG_bodyHealth{color:var(--mn-danger)}.OkhtbG_bodySwitch{min-height:32px;color:var(--mn-faint);cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:0 1px;font-size:9.5px;display:flex}.OkhtbG_bodySwitchTrack{border:1px solid var(--mn-line-strong);background:var(--mn-layer-2);border-radius:999px;flex:none;width:29px;height:17px;transition:border-color .18s,background-color .18s;position:relative}.OkhtbG_bodySwitchTrack i{background:var(--mn-faint);border-radius:50%;width:11px;height:11px;transition:transform .2s cubic-bezier(.2,.8,.2,1),background-color .18s;position:absolute;top:2px;left:2px}.OkhtbG_bodySwitch:hover{color:var(--mn-text)}.OkhtbG_bodySwitch:hover .OkhtbG_bodySwitchTrack{border-color:var(--mn-body-accent)}.OkhtbG_bodySwitch[aria-checked=true]{color:var(--mn-text)}.OkhtbG_bodySwitch[aria-checked=true] .OkhtbG_bodySwitchTrack{border-color:color-mix(in srgb, var(--mn-body-accent) 65%, var(--mn-line));background:color-mix(in srgb, var(--mn-body-accent) 25%, var(--mn-layer-2))}.OkhtbG_bodySwitch[aria-checked=true] .OkhtbG_bodySwitchTrack i{background:var(--mn-body-accent);transform:translate(12px)}.OkhtbG_bodyCardActions{align-items:center;gap:6px;display:flex}.OkhtbG_bodyEditButton{width:28px;height:28px;color:var(--mn-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:7px;place-items:center;font-size:12px;display:grid}.OkhtbG_bodyEditButton:hover{color:var(--mn-text);border-color:var(--mn-line);background:var(--mn-hover)}.OkhtbG_bodyEdit{gap:9px;padding-top:2px;display:grid}.OkhtbG_bodyEdit label{color:var(--mn-faint);gap:4px;font-size:9px;display:grid}.OkhtbG_bodyEdit input,.OkhtbG_bodyEdit textarea{border:1px solid var(--mn-line);width:100%;color:var(--mn-text);background:var(--mn-input);border-radius:8px;outline:0;padding:7px 9px;font-size:12px;line-height:1.5}.OkhtbG_bodyEdit textarea{resize:vertical}.OkhtbG_bodyEdit input:focus,.OkhtbG_bodyEdit textarea:focus{border-color:var(--mn-accent)}.OkhtbG_bodyEditActions{justify-content:flex-end;gap:7px;display:flex}.OkhtbG_bodyDeleteConfirm{gap:16px;display:grid}.OkhtbG_bodyDeleteConfirm>p{color:var(--mn-muted);margin:0;font-size:12px;line-height:1.6}.OkhtbG_bodyDeleteSummary{border:1px solid color-mix(in srgb, var(--mn-danger) 22%, var(--mn-line));background:color-mix(in srgb, var(--mn-danger) 5%, var(--mn-layer-1));border-radius:8px;gap:3px;padding:12px;display:grid}.OkhtbG_bodyDeleteSummary strong{font-size:13px}.OkhtbG_bodyDeleteContent{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;font-weight:400;line-height:1.55}.OkhtbG_bodyDeleteSummary span{color:var(--mn-muted);font-size:11px}.OkhtbG_bodyCard>p{min-height:15px;color:var(--mn-muted);margin:7px 0;font-size:10px;line-height:1.45}.OkhtbG_bodyCard footer{border-top:1px solid var(--mn-line);color:var(--mn-faint);flex-wrap:wrap;gap:5px 11px;padding-top:6px;font-size:9px;display:flex}.OkhtbG_bodyCreate{border-top:1px solid var(--mn-line);margin-top:10px;padding-top:8px}.OkhtbG_bodyCreate summary{cursor:pointer;width:max-content;color:var(--mn-accent);font-size:10px;list-style:none}.OkhtbG_bodyCreate summary::-webkit-details-marker{display:none}.OkhtbG_bodyCreate form{grid-template-columns:minmax(130px,.7fr) minmax(150px,.9fr) minmax(230px,1.7fr) auto;gap:7px;margin-top:9px;display:grid}.OkhtbG_bodyCreate input{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;min-width:0;height:34px;padding:0 9px}.OkhtbG_bodyCreate input:focus{border-color:var(--mn-accent)}.OkhtbG_graphLayout{grid-template-columns:minmax(0,1fr) minmax(240px,270px);gap:10px;display:grid}.OkhtbG_graphPanel,.OkhtbG_graphInspector{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px}.OkhtbG_graphPanel{min-width:0;overflow:hidden}.OkhtbG_graphToolbar,.OkhtbG_graphFooter{min-height:43px;color:var(--mn-muted);justify-content:space-between;align-items:center;gap:14px;padding:0 13px;font-size:10px;display:flex}.OkhtbG_graphToolbar{border-bottom:1px solid var(--mn-line)}.OkhtbG_graphToolbar>div:first-child{align-items:center;gap:7px;display:flex}.OkhtbG_graphToolbar small{color:var(--mn-faint)}.OkhtbG_liveDot{background:var(--mn-success);width:6px;height:6px;box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 15%, transparent);border-radius:50%}.OkhtbG_graphLegend{flex-wrap:wrap;justify-content:flex-end;gap:5px 10px;display:flex}.OkhtbG_graphLegend span{align-items:center;gap:4px;display:flex}.OkhtbG_graphLegend span:before{content:\"\";background:var(--edge-color);border-radius:2px;width:13px;height:2px}.OkhtbG_graphLegend [data-edge=temporal]{--edge-color:#87909f}.OkhtbG_graphLegend [data-edge=scope]{--edge-color:#708199}.OkhtbG_graphLegend [data-edge=scope]:before{background:repeating-linear-gradient(90deg, var(--edge-color) 0 4px, transparent 4px 7px)}.OkhtbG_graphLegend [data-edge=semantic]{--edge-color:#4d7cfe}.OkhtbG_graphLegend [data-edge=causal]{--edge-color:#ef6b5b}.OkhtbG_graphLegend [data-edge=entity]{--edge-color:#22a879}.OkhtbG_graphViewport{background:radial-gradient(circle at 50% 48%, color-mix(in srgb, var(--mn-accent) 6%, transparent), transparent 47%);min-height:clamp(390px,42vw,560px);position:relative;overflow:hidden}.OkhtbG_graphCanvasControls{z-index:2;border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-1) 88%, transparent);box-shadow:0 6px 18px color-mix(in srgb, var(--mn-text) 7%, transparent);backdrop-filter:blur(10px);border-radius:9px;align-items:center;gap:5px;padding:4px;display:flex;position:absolute;top:10px;right:10px}.OkhtbG_graphCanvasControls span{color:var(--mn-faint);font:9px var(--mn-code);align-items:center;gap:5px;padding:0 6px;display:flex}.OkhtbG_graphCanvasControls span i{background:var(--mn-accent);width:5px;height:5px;box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-accent) 12%, transparent);border-radius:50%}.OkhtbG_graphCanvasControls button{min-height:30px;color:var(--mn-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;padding:0 9px;font-size:9.5px}.OkhtbG_graphCanvasControls button:hover,.OkhtbG_graphCanvasControls button[data-active]{border-color:var(--mn-line);color:var(--mn-text);background:var(--mn-hover)}.OkhtbG_graphCanvasControls button[data-active]{color:var(--mn-accent)}.OkhtbG_graphSvg{touch-action:pan-y pinch-zoom;user-select:none;width:100%;height:clamp(390px,42vw,560px);display:block}.OkhtbG_graphBackdrop{fill:var(--mn-layer-1)}.OkhtbG_graphGridLine{stroke:var(--mn-line);stroke-width:.6px;opacity:.5}.OkhtbG_graphEdge{fill:none;stroke:#87909f;stroke-width:1px;opacity:.32;vector-effect:non-scaling-stroke}.OkhtbG_graphEdge[data-edge=scope]{stroke:#708199;stroke-dasharray:4 5;opacity:.28}.OkhtbG_graphEdge[data-edge=semantic]{stroke:#4d7cfe;opacity:.48}.OkhtbG_graphEdge[data-edge=causal]{stroke:#ef6b5b;opacity:.52}.OkhtbG_graphEdge[data-edge=entity]{stroke:#22a879;stroke-width:1.45px;opacity:.78}.OkhtbG_graphNode{--node:#8290a8;cursor:grab;touch-action:none;outline:none}.OkhtbG_graphNode[data-dragging]{cursor:grabbing}.OkhtbG_graphNode[data-category=decision]{--node:#ef8354}.OkhtbG_graphNode[data-category=preference]{--node:#a879e1}.OkhtbG_graphNode[data-category=fact]{--node:#4d7cfe}.OkhtbG_graphNode[data-category=insight]{--node:#19a77d}.OkhtbG_graphNode[data-category=context]{--node:#d8a624}.OkhtbG_graphNode[data-kind=space]{--node:var(--mn-success)}.OkhtbG_graphNode[data-kind=entity]{--node:#2b9db9}.OkhtbG_nodeHalo{fill:color-mix(in srgb, var(--node) 18%, var(--mn-layer-1));stroke:color-mix(in srgb, var(--node) 60%, var(--mn-layer-1));stroke-width:1.5px;transition:r .16s}.OkhtbG_nodeCore{fill:var(--node)}.OkhtbG_nodeLabel{fill:var(--mn-muted);font:10px var(--mn-code);pointer-events:auto}.OkhtbG_nodeBodyLabel{fill:var(--mn-faint);font:650 8px var(--mn-code);letter-spacing:.04em;pointer-events:auto}.OkhtbG_graphSvg[data-density=sparse] .OkhtbG_nodeLabel{font-size:12px}.OkhtbG_graphNode:hover .OkhtbG_nodeHalo,.OkhtbG_graphNode:focus .OkhtbG_nodeHalo,.OkhtbG_graphNode[data-selected] .OkhtbG_nodeHalo{fill:color-mix(in srgb, var(--node) 28%, var(--mn-layer-1));stroke:var(--node)}.OkhtbG_graphNode[data-selected] .OkhtbG_nodeLabel{fill:var(--mn-text);font-weight:650}.OkhtbG_graphFooter{border-top:1px solid var(--mn-line);min-height:38px;color:var(--mn-faint)}.OkhtbG_graphInspector{min-width:0;min-height:calc(clamp(390px,42vw,560px) + 83px);padding:15px;overflow:hidden}.OkhtbG_inspectorEmpty{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;display:flex}.OkhtbG_inspectorLogo{opacity:.72;border-radius:11px;width:54px;height:54px;margin-bottom:15px}.OkhtbG_inspectorEmpty h3{margin:7px 0 3px;font-size:14px}.OkhtbG_inspectorEmpty p{color:var(--mn-faint);margin:0;font-size:11px}.OkhtbG_inspectorHeading{justify-content:space-between;align-items:center;display:flex}.OkhtbG_inspectorHeading button,.OkhtbG_sectionHeading button{width:32px;height:32px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;display:grid}.OkhtbG_inspectorHeading button:hover,.OkhtbG_sectionHeading button:hover{background:var(--mn-hover)}.OkhtbG_categoryChip{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 10%, transparent);border-radius:999px;margin-top:24px;padding:3px 8px;font-size:10px;display:inline-flex}.OkhtbG_inspectorTitleRow{align-items:flex-start;gap:8px;min-width:0;margin:12px 0 20px;display:flex}.OkhtbG_inspectorTitle{overflow-wrap:anywhere;white-space:pre-wrap;-webkit-line-clamp:6;-webkit-box-orient:vertical;flex:1;min-width:0;margin:0;font-size:14px;line-height:1.6;display:-webkit-box;overflow:hidden}.OkhtbG_inspectorEye{border:1px solid var(--mn-line);width:27px;height:27px;color:var(--mn-muted);background:var(--mn-layer-1);cursor:pointer;border-radius:7px;flex:none;place-items:center;transition:color .15s,border-color .15s,background-color .15s;display:grid}.OkhtbG_inspectorEye:hover{color:var(--mn-accent);border-color:var(--mn-line-strong);background:var(--mn-hover)}.OkhtbG_inspectorMeta{margin:0}.OkhtbG_inspectorMeta>div{border-top:1px solid var(--mn-line);gap:3px;padding:11px 0;display:grid}.OkhtbG_inspectorMeta dt{color:var(--mn-faint);font:9px var(--mn-code);text-transform:uppercase}.OkhtbG_inspectorMeta dd{overflow-wrap:anywhere;color:var(--mn-muted);margin:0;font-size:11px}.OkhtbG_inspectorActions{gap:8px;margin-top:20px;display:grid}.OkhtbG_previewOverlay{z-index:40;background:color-mix(in srgb, var(--mn-bg) 58%, transparent);backdrop-filter:blur(4px);place-items:center;padding:clamp(16px,4vw,48px);display:grid;position:fixed;inset:0}.OkhtbG_previewDialog{border:1px solid var(--mn-line-strong);background:var(--mn-layer-1);width:min(680px,100%);max-height:min(76dvh,640px);box-shadow:0 24px 64px color-mix(in srgb, var(--mn-text) 20%, transparent);border-radius:13px;flex-direction:column;display:flex;overflow:hidden}.OkhtbG_previewHeading{border-bottom:1px solid var(--mn-line);flex:none;justify-content:space-between;align-items:center;gap:12px;min-height:46px;padding:0 14px 0 16px;display:flex}.OkhtbG_previewHeading>span{color:var(--mn-accent);font:650 9px/1.2 var(--mn-code);letter-spacing:.08em;text-transform:uppercase}.OkhtbG_previewHeading button{width:32px;height:32px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;font-size:15px;display:grid}.OkhtbG_previewHeading button:hover{background:var(--mn-hover)}.OkhtbG_previewMeta{border-bottom:1px solid var(--mn-line);color:var(--mn-faint);font:9px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;flex:none;padding:8px 16px;overflow:hidden}.OkhtbG_previewBody{-webkit-overflow-scrolling:touch;min-height:0;padding:14px 16px 18px;overflow:auto}.OkhtbG_previewBody p{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--mn-text);margin:0;font-size:13px;line-height:1.7}.OkhtbG_searchBar{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:13px;margin-bottom:18px;padding:13px}.OkhtbG_queryField{border:1px solid var(--mn-line-strong);background:var(--mn-input);border-radius:9px;grid-template-columns:24px minmax(0,1fr) 24px;align-items:center;gap:5px;padding:0 10px;display:grid}.OkhtbG_queryField>span{color:var(--mn-accent);font:18px var(--mn-code)}.OkhtbG_queryField input{background:0 0;border:0;outline:0;width:100%;height:42px}.OkhtbG_queryField kbd{color:var(--mn-faint);font:11px var(--mn-code)}.OkhtbG_searchControls{justify-content:flex-end;align-items:flex-end;gap:10px;padding-top:10px;display:flex}.OkhtbG_searchActions{align-items:center;gap:7px;display:flex}.OkhtbG_agentAnswer{border:1px solid color-mix(in srgb, var(--mn-accent) 30%, var(--mn-line));background:linear-gradient(135deg, color-mix(in srgb, var(--mn-accent) 7%, var(--mn-layer-1)), var(--mn-layer-1) 60%);border-radius:11px;margin-bottom:16px;padding:16px 18px}.OkhtbG_agentAnswerHeading{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.OkhtbG_agentAnswerHeading span{color:var(--mn-accent);font:650 9px/1.2 var(--mn-code);letter-spacing:.08em}.OkhtbG_agentAnswerHeading h3{margin:4px 0 0;font-size:15px}.OkhtbG_agentAnswerHeading>code{color:var(--mn-faint);font-size:9px}.OkhtbG_agentAnswer>p{white-space:pre-wrap;color:var(--mn-text);margin:12px 0;font-size:13px;line-height:1.7}.OkhtbG_agentCitations{border-top:1px solid var(--mn-line);flex-wrap:wrap;gap:5px;padding-top:10px;display:flex}.OkhtbG_agentCitations code{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:5px;padding:3px 6px;font-size:9px}.OkhtbG_searchControls label,.OkhtbG_formGrid label,.OkhtbG_fieldWide{color:var(--mn-muted);gap:5px;font-size:11px;display:grid}.OkhtbG_searchControls select,.OkhtbG_formGrid select,.OkhtbG_formGrid input,.OkhtbG_listToolbar input,.OkhtbG_listToolbar select,.OkhtbG_entitySearch input{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;min-width:140px;height:34px;padding:0 9px}.OkhtbG_searchControls select:focus,.OkhtbG_formGrid select:focus,.OkhtbG_formGrid input:focus,.OkhtbG_listToolbar input:focus,.OkhtbG_listToolbar select:focus,.OkhtbG_entitySearch input:focus,.OkhtbG_supervisedForm textarea:focus{border-color:var(--mn-accent)}.OkhtbG_singleColumn{max-width:830px}.OkhtbG_resultLayout{grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);align-items:start;gap:14px;display:grid}.OkhtbG_results,.OkhtbG_relatedPane,.OkhtbG_entityResults{min-width:0}.OkhtbG_sectionHeading{justify-content:space-between;align-items:center;gap:16px;min-height:39px;margin-bottom:8px;display:flex}.OkhtbG_sectionHeading h3{margin:2px 0 0;font-size:15px}.OkhtbG_sectionHeading>strong{min-width:27px;height:27px;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 11px var(--mn-code);border-radius:7px;place-items:center;display:grid}.OkhtbG_relatedPane{border:1px solid var(--mn-line);background:var(--mn-layer-1);-webkit-overflow-scrolling:touch;border-radius:12px;max-height:calc(100dvh - 230px);padding:13px;scroll-margin-top:14px;position:sticky;top:12px;overflow:auto}.OkhtbG_relatedSource{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:8px;margin:0 0 13px;padding:10px;font-size:11px}.OkhtbG_insightCard{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0;margin-bottom:9px;padding:14px;transition:border-color .15s,transform .15s,box-shadow .15s}.OkhtbG_insightCard:hover{border-color:var(--mn-line-strong);transform:translateY(-1px)}.OkhtbG_cardTop{justify-content:space-between;align-items:center;gap:10px;display:flex}.OkhtbG_badges,.OkhtbG_tags,.OkhtbG_entities{flex-wrap:wrap;gap:5px;display:flex}.OkhtbG_badge{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:999px;padding:2px 6px;font-size:9px}.OkhtbG_id{color:var(--mn-faint);font:9px var(--mn-code)}.OkhtbG_content{white-space:pre-wrap;overflow-wrap:anywhere;margin:10px 0;line-height:1.65}.OkhtbG_tags{color:var(--mn-accent);font-size:10px}.OkhtbG_entities{margin-top:7px}.OkhtbG_entities span{border:1px solid var(--mn-line);color:var(--mn-muted);border-radius:5px;padding:2px 6px;font-size:9px}.OkhtbG_cardActions{border-top:1px solid var(--mn-line);justify-content:flex-end;align-items:center;gap:3px;min-height:30px;margin-top:10px;padding-top:8px;display:flex}.OkhtbG_confirmBar{width:100%;color:var(--mn-danger);justify-content:flex-end;align-items:center;gap:5px;font-size:11px;display:flex}.OkhtbG_confirmBar>span{margin-right:auto}.OkhtbG_entityLayout{grid-template-columns:265px minmax(0,1fr);align-items:start;gap:16px;display:grid}.OkhtbG_entityRail{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;padding:13px;position:sticky;top:0}.OkhtbG_entitySearch{grid-template-columns:minmax(0,1fr) auto;gap:7px;display:grid}.OkhtbG_entitySearch input{min-width:0}.OkhtbG_entityHeading{justify-content:space-between;align-items:center;margin:18px 2px 7px;display:flex}.OkhtbG_entityHeading small{color:var(--mn-faint);font-size:9px}.OkhtbG_entityList{gap:3px;display:grid}.OkhtbG_entityList button{min-height:34px;color:var(--mn-muted);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:7px;justify-content:space-between;align-items:center;gap:10px;padding:0 9px;display:flex}.OkhtbG_entityList button:hover,.OkhtbG_entityList button[aria-pressed=true]{color:var(--mn-text);background:var(--mn-hover)}.OkhtbG_entityList strong{color:var(--mn-faint);font:10px var(--mn-code)}.OkhtbG_entityResults>.OkhtbG_emptyState{min-height:360px}.OkhtbG_runtimeComposer,.OkhtbG_runtimeTarget{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px}.OkhtbG_runtimeComposer{background:linear-gradient(135deg, color-mix(in srgb, var(--mn-accent) 5%, var(--mn-layer-1)), var(--mn-layer-1) 55%);margin-bottom:13px;padding:15px}.OkhtbG_runtimeComposerHeading{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:11px;display:flex}.OkhtbG_runtimeComposerHeading h3{margin:0 0 2px;font-size:14px}.OkhtbG_runtimeComposerHeading p{color:var(--mn-muted);margin:0;font-size:10px}.OkhtbG_runtimeComposerHeading>span{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 9px var(--mn-code);border-radius:999px;flex:none;padding:4px 8px}.OkhtbG_runtimeComposer>textarea,.OkhtbG_runtimeEntry textarea{resize:vertical;border:1px solid var(--mn-line);width:100%;color:var(--mn-text);background:var(--mn-input);border-radius:9px;outline:0;padding:10px 11px;line-height:1.6}.OkhtbG_runtimeComposer>textarea:focus,.OkhtbG_runtimeEntry textarea:focus{border-color:var(--mn-accent)}.OkhtbG_runtimeComposerActions{justify-content:flex-end;align-items:flex-end;gap:9px;margin-top:10px;display:flex}.OkhtbG_runtimeComposerActions label{color:var(--mn-faint);gap:4px;font-size:9px;display:grid}.OkhtbG_runtimeComposerActions select,.OkhtbG_runtimeEntry select{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;min-width:135px;height:34px;padding:0 8px}.OkhtbG_runtimeNotice,.OkhtbG_runtimeReadOnly{border:1px solid color-mix(in srgb, var(--mn-success) 28%, var(--mn-line));color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 6%, var(--mn-layer-1));border-radius:9px;margin-bottom:13px;padding:9px 12px;font-size:11px}.OkhtbG_runtimeReadOnly{color:var(--mn-muted);border-color:var(--mn-line);background:var(--mn-layer-1)}.OkhtbG_runtimeGrid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:12px;display:grid}.OkhtbG_runtimeSummaryGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:10px;display:grid}.OkhtbG_runtimeSummaryCard{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0}.OkhtbG_runtimeBrowser{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;overflow:hidden}.OkhtbG_runtimeBrowserToolbar{border-bottom:1px solid var(--mn-line);justify-content:space-between;align-items:center;gap:12px;padding:10px;display:flex}.OkhtbG_runtimeScopeFilter{flex-wrap:wrap;align-items:center;gap:3px;display:flex}.OkhtbG_runtimeScopeFilter button{min-height:32px;color:var(--mn-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:7px;padding:0 10px}.OkhtbG_runtimeScopeFilter button:hover{background:var(--mn-hover)}.OkhtbG_runtimeScopeFilter button[data-active]{border-color:var(--mn-line);color:var(--mn-text);background:var(--mn-layer-2)}.OkhtbG_runtimeScopeFilter b{color:var(--mn-faint);font:600 10px var(--mn-code);margin-left:4px}.OkhtbG_runtimeFilterQuery{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;align-items:center;gap:7px;width:min(320px,42%);min-width:210px;padding:0 9px;display:flex}.OkhtbG_runtimeFilterQuery>span{color:var(--mn-faint)}.OkhtbG_runtimeFilterQuery input{width:100%;min-width:0;height:32px;color:var(--mn-text);background:0 0;border:0;outline:0}.OkhtbG_runtimeUnifiedList{background:color-mix(in srgb, var(--mn-layer-2) 30%, var(--mn-layer-1));grid-template-columns:1fr;gap:8px;padding:10px;display:grid}.OkhtbG_runtimeEntryBadges{flex-wrap:wrap;align-items:center;gap:5px;display:flex}.OkhtbG_runtimeEntryMeta .OkhtbG_runtimeEntryTarget{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 8%, var(--mn-layer-2));font-family:var(--mn-code)}.OkhtbG_runtimeTarget{min-width:0;overflow:hidden}.OkhtbG_runtimeTargetHeader{justify-content:space-between;align-items:center;gap:14px;padding:14px 15px 9px;display:flex}.OkhtbG_runtimeTargetHeader>div{gap:1px;display:grid}.OkhtbG_runtimeTargetHeader span{color:var(--mn-faint);font:650 9px var(--mn-code);letter-spacing:.08em}.OkhtbG_runtimeTargetHeader h3{margin:0;font-size:15px}.OkhtbG_runtimeTargetHeader>strong{min-width:28px;height:28px;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 11px var(--mn-code);border-radius:8px;place-items:center;display:grid}.OkhtbG_capacityLine{align-items:center;gap:9px;padding:0 15px;display:flex}.OkhtbG_capacityLine>div{background:var(--mn-layer-2);border-radius:999px;flex:1;height:4px;overflow:hidden}.OkhtbG_capacityLine i{border-radius:inherit;background:var(--mn-success);height:100%;transition:width .25s;display:block}.OkhtbG_capacityLine>span{min-width:88px;color:var(--mn-faint);font:9px var(--mn-code);text-align:right}.OkhtbG_runtimeTargetDescription{min-height:31px;color:var(--mn-muted);margin:8px 15px 12px;font-size:10px}.OkhtbG_runtimeEntries{border-top:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 36%, var(--mn-layer-1));gap:7px;padding:10px;display:grid}.OkhtbG_runtimeEntry{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:9px;padding:11px;position:relative}.OkhtbG_runtimeEntry:before{content:\"\";background:var(--mn-muted);border-radius:0 2px 2px 0;width:2px;position:absolute;top:12px;bottom:12px;left:-1px}.OkhtbG_runtimeEntry[data-importance=critical]:before{background:var(--mn-danger)}.OkhtbG_runtimeEntry[data-importance=low]:before{background:var(--mn-faint);opacity:.45}.OkhtbG_runtimeEntryMeta{justify-content:space-between;align-items:center;gap:12px;display:flex}.OkhtbG_runtimeEntryMeta>span{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:999px;padding:2px 6px;font-size:9px}.OkhtbG_runtimeEntry[data-importance=critical] .OkhtbG_runtimeEntryMeta>span{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent)}.OkhtbG_runtimeEntryMeta time{color:var(--mn-faint);font:8px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.OkhtbG_runtimeEntry>p{white-space:pre-wrap;overflow-wrap:anywhere;min-height:42px;margin:9px 0;font-size:12px;line-height:1.6}.OkhtbG_runtimeEntry>select{margin-top:7px}.OkhtbG_runtimeEntry footer{border-top:1px solid var(--mn-line);justify-content:flex-end;align-items:center;gap:4px;min-height:30px;margin-top:7px;padding-top:7px;display:flex}.OkhtbG_runtimeEntry footer>span{color:var(--mn-danger);margin-right:auto;font-size:10px}.OkhtbG_runtimeEmpty{min-height:126px;color:var(--mn-faint);text-align:center;align-content:center;place-items:center;gap:5px;display:grid}.OkhtbG_runtimeEmpty>span{font:24px var(--mn-code);opacity:.65}.OkhtbG_runtimeEmpty p{margin:0;font-size:10px}.OkhtbG_runtimeFootnote{color:var(--mn-faint);margin:10px 2px 0;font-size:9px}.OkhtbG_documentSummary{grid-template-columns:.7fr .7fr 1.6fr;gap:9px;margin-bottom:12px;display:grid}.OkhtbG_documentSummary article{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0;min-height:91px;padding:13px 14px}.OkhtbG_documentSummary article>span{color:var(--mn-faint);font-size:9px;display:block}.OkhtbG_documentSummary article>strong{font:650 21px/1 var(--mn-code);margin:7px 0 4px;display:block}.OkhtbG_documentSummary article>small{color:var(--mn-muted);font-size:9px}.OkhtbG_documentCapacity>div{background:var(--mn-layer-2);border-radius:999px;height:4px;margin:7px 0 6px;overflow:hidden}.OkhtbG_documentCapacity>div i{border-radius:inherit;background:var(--mn-accent);height:100%;transition:width .3s;display:block}.OkhtbG_documentToolbar{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;align-items:center;gap:9px;margin-bottom:12px;padding:9px;display:flex}.OkhtbG_documentToolbar form{flex:1;grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:5px;min-width:260px;padding-left:8px;display:grid}.OkhtbG_documentToolbar form>span{color:var(--mn-faint);font:15px var(--mn-code)}.OkhtbG_documentToolbar input,.OkhtbG_documentEditor input,.OkhtbG_documentEditor textarea{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;width:100%;padding:8px 10px}.OkhtbG_documentToolbar input{background:0 0;border-color:#0000;height:34px}.OkhtbG_documentToolbar input:focus,.OkhtbG_documentEditor input:focus,.OkhtbG_documentEditor textarea:focus{border-color:var(--mn-accent)}.OkhtbG_documentToolbar>div{border:1px solid var(--mn-line);background:var(--mn-layer-2);border-radius:8px;align-items:center;gap:3px;padding:3px;display:flex}.OkhtbG_documentToolbar>div button{min-height:32px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:0 10px;font-size:10.5px}.OkhtbG_documentToolbar>div button[data-active]{color:var(--mn-text);background:var(--mn-layer-1);box-shadow:0 1px 3px color-mix(in srgb, var(--mn-text) 8%, transparent)}.OkhtbG_documentToolbar>div b{color:var(--mn-faint);font:600 9px var(--mn-code);margin-left:4px}.OkhtbG_documentWorkspace{grid-template-columns:minmax(250px,310px) minmax(0,1fr);gap:10px;min-height:590px;display:grid}.OkhtbG_documentList,.OkhtbG_documentReader{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0;overflow:hidden}.OkhtbG_documentList{align-self:stretch}.OkhtbG_documentList>header{border-bottom:1px solid var(--mn-line);min-height:42px;color:var(--mn-faint);justify-content:space-between;align-items:center;padding:0 12px;font-size:9px;display:flex}.OkhtbG_documentList>header code{color:var(--mn-accent)}.OkhtbG_documentList>button{border:0;border-bottom:1px solid var(--mn-line);width:100%;color:var(--mn-text);text-align:left;cursor:pointer;background:0 0;padding:12px;transition:background-color .15s,box-shadow .15s;display:block}.OkhtbG_documentList>button:hover{background:var(--mn-hover)}.OkhtbG_documentList>button[data-selected]{background:color-mix(in srgb, var(--mn-accent) 7%, var(--mn-layer-1));box-shadow:inset 2px 0 var(--mn-accent)}.OkhtbG_documentList>button>div{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.OkhtbG_documentList>button strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.OkhtbG_documentList>button time{color:var(--mn-faint);font:8px var(--mn-code);flex:none}.OkhtbG_documentList>button p{min-height:30px;color:var(--mn-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:6px 0 9px;font-size:10px;line-height:1.5;display:-webkit-box;overflow:hidden}.OkhtbG_documentList>button footer{color:var(--mn-faint);align-items:center;gap:8px;font-size:9px;display:flex}.OkhtbG_documentList>button footer code{margin-left:auto}.OkhtbG_documentList>button footer em{color:var(--mn-danger);font-style:normal}.OkhtbG_documentListEmpty{min-height:230px;color:var(--mn-muted);text-align:center;align-content:center;place-items:center;gap:4px;padding:22px;display:grid}.OkhtbG_documentListEmpty>span{color:var(--mn-accent);font:28px var(--mn-code);opacity:.6;margin-bottom:6px}.OkhtbG_documentListEmpty p{color:var(--mn-faint);margin:0;font-size:10px}.OkhtbG_documentReader{padding:clamp(16px,2vw,22px)}.OkhtbG_documentReader>.OkhtbG_emptyState{background:0 0;border:0;height:100%}.OkhtbG_documentDetail>header{border-bottom:1px solid var(--mn-line);justify-content:space-between;align-items:flex-start;gap:18px;padding-bottom:15px;display:flex}.OkhtbG_documentDetail>header span{color:var(--mn-accent);font:650 9px var(--mn-code);letter-spacing:.08em;text-transform:uppercase}.OkhtbG_documentDetail>header h3{margin:5px 0 3px;font-size:18px}.OkhtbG_documentDetail>header p{color:var(--mn-muted);margin:0;font-size:11px}.OkhtbG_documentDetail>dl{border-top:1px solid var(--mn-line);border-left:1px solid var(--mn-line);grid-template-columns:2fr .45fr .8fr .55fr;margin:13px 0;display:grid}.OkhtbG_documentDetail>dl>div{border-right:1px solid var(--mn-line);border-bottom:1px solid var(--mn-line);min-width:0;padding:8px 9px}.OkhtbG_documentDetail dt{color:var(--mn-faint);margin-bottom:3px;font-size:8px}.OkhtbG_documentDetail dd{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:9px;overflow:hidden}.OkhtbG_documentSources{flex-wrap:wrap;align-items:center;gap:5px;margin:11px 0;display:flex}.OkhtbG_documentSources>span{color:var(--mn-faint);margin-right:4px;font-size:9px}.OkhtbG_documentSources code,.OkhtbG_documentArchiveReceipt code{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:5px;padding:3px 6px;font-size:8px}.OkhtbG_markdownBody{overflow-wrap:anywhere;border:1px solid var(--mn-line);min-height:310px;color:var(--mn-text);background:color-mix(in srgb, var(--mn-layer-2) 30%, var(--mn-layer-1));border-radius:10px;margin:16px 0 0;padding:clamp(18px,2.5vw,28px);font-size:13px;line-height:1.78}.OkhtbG_markdownBody>:first-child{margin-top:0}.OkhtbG_markdownBody>:last-child{margin-bottom:0}.OkhtbG_markdownBody h1,.OkhtbG_markdownBody h2,.OkhtbG_markdownBody h3,.OkhtbG_markdownBody h4{color:var(--mn-text);letter-spacing:-.015em;margin:1.55em 0 .65em;line-height:1.3}.OkhtbG_markdownBody h1{border-bottom:1px solid var(--mn-line);padding-bottom:.35em;font-size:1.75em}.OkhtbG_markdownBody h2{border-bottom:1px solid var(--mn-line);padding-bottom:.3em;font-size:1.42em}.OkhtbG_markdownBody h3{font-size:1.18em}.OkhtbG_markdownBody p,.OkhtbG_markdownBody ul,.OkhtbG_markdownBody ol,.OkhtbG_markdownBody blockquote,.OkhtbG_markdownBody table,.OkhtbG_markdownBody pre{margin:.85em 0}.OkhtbG_markdownBody ul,.OkhtbG_markdownBody ol{padding-left:1.6em}.OkhtbG_markdownBody li+li{margin-top:.3em}.OkhtbG_markdownBody blockquote{border-left:3px solid var(--mn-accent);color:var(--mn-muted);background:color-mix(in srgb, var(--mn-accent) 4%, transparent);margin-inline:0;padding:.15em 1em}.OkhtbG_markdownBody code{color:var(--mn-text);background:var(--mn-layer-2);font:.88em/1.55 var(--mn-code);border-radius:5px;padding:.15em .38em}.OkhtbG_markdownBody pre{border:1px solid var(--mn-line);background:var(--mn-layer-2);border-radius:9px;max-width:100%;padding:14px 16px;overflow:auto}.OkhtbG_markdownBody pre code{background:0 0;padding:0;font-size:11px}.OkhtbG_markdownBody a{color:var(--mn-accent);text-underline-offset:3px;text-decoration-thickness:1px}.OkhtbG_markdownBody hr{border:0;border-top:1px solid var(--mn-line);margin:1.8em 0}.OkhtbG_markdownBody table{border-collapse:collapse;max-width:100%;display:block;overflow-x:auto}.OkhtbG_markdownBody th,.OkhtbG_markdownBody td{border:1px solid var(--mn-line);text-align:left;vertical-align:top;padding:8px 10px}.OkhtbG_markdownBody th{background:var(--mn-layer-2);font-weight:600}.OkhtbG_markdownBody img{border-radius:8px;max-width:100%;height:auto}.OkhtbG_documentArchiveReceipt{border:1px solid color-mix(in srgb, var(--mn-success) 28%, var(--mn-line));background:color-mix(in srgb, var(--mn-success) 5%, transparent);border-radius:9px;margin:12px 0;padding:11px 12px}.OkhtbG_documentArchiveReceipt p{color:var(--mn-muted);margin:4px 0 8px;font-size:10px}.OkhtbG_documentArchiveReceipt div{flex-wrap:wrap;gap:5px;display:flex}.OkhtbG_documentDanger{border-top:1px solid var(--mn-line);justify-content:flex-end;align-items:center;gap:7px;min-height:57px;margin-top:13px;padding-top:12px;display:flex}.OkhtbG_documentDanger>div{margin-right:auto}.OkhtbG_documentDanger strong{font-size:11px;display:block}.OkhtbG_documentDanger p{color:var(--mn-faint);margin:2px 0 0;font-size:9px}.OkhtbG_documentDanger>span{color:var(--mn-danger);margin-right:auto;font-size:10px}.OkhtbG_documentEditor{border:1px solid var(--mn-line);background:linear-gradient(135deg, color-mix(in srgb, var(--mn-accent) 5%, var(--mn-layer-1)), var(--mn-layer-1) 55%);border-radius:11px;margin-bottom:12px;padding:15px}.OkhtbG_documentReader>.OkhtbG_documentEditor{background:0 0;border:0;margin:0;padding:0}.OkhtbG_documentEditor>header{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:12px;display:flex}.OkhtbG_documentEditor h3{margin:0;font-size:14px}.OkhtbG_documentEditor header p{color:var(--mn-muted);margin:2px 0 0;font-size:10px}.OkhtbG_documentEditor header>span,.OkhtbG_documentEditor header>code{color:var(--mn-accent);font:650 9px var(--mn-code)}.OkhtbG_documentEditor label{color:var(--mn-faint);gap:4px;margin-top:9px;font-size:9px;display:grid}.OkhtbG_documentEditor textarea{resize:vertical;line-height:1.65}.OkhtbG_documentEditorMeta{grid-template-columns:.8fr 1.2fr;gap:9px;display:grid}.OkhtbG_documentEditorMeta label{margin:0}.OkhtbG_documentEditor footer{justify-content:flex-end;gap:7px;margin-top:11px;display:flex}.OkhtbG_writebackLayout{grid-template-columns:minmax(220px,280px) minmax(0,1fr);align-items:start;gap:15px;display:grid}.OkhtbG_writeGuide,.OkhtbG_supervisedComposer{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px}.OkhtbG_writeGuide{padding:17px}.OkhtbG_writeGuide h3{margin:5px 0 15px;font-size:15px}.OkhtbG_writeGuide ol{counter-reset:gate;gap:13px;margin:0;padding:0;list-style:none;display:grid}.OkhtbG_writeGuide li{counter-increment:gate;grid-template-columns:22px minmax(0,1fr);column-gap:7px;display:grid}.OkhtbG_writeGuide li:before{content:\"0\" counter(gate);color:var(--mn-accent);font:10px var(--mn-code);grid-row:span 2}.OkhtbG_writeGuide li strong{font-size:12px}.OkhtbG_writeGuide li span,.OkhtbG_writeGuide p{color:var(--mn-faint);font-size:10px}.OkhtbG_writeGuide p{border-top:1px solid var(--mn-line);margin:17px 0 0;padding-top:13px}.OkhtbG_supervisedComposer{overflow:hidden}.OkhtbG_supervisedForm{padding:18px}.OkhtbG_supervisedHeading{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.OkhtbG_supervisedHeading h3{margin:4px 0 0;font-size:17px}.OkhtbG_sessionReady,.OkhtbG_sessionMissing{font:650 9px var(--mn-code);border-radius:999px;padding:4px 8px}.OkhtbG_sessionReady{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 10%, transparent)}.OkhtbG_sessionMissing{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 10%, transparent)}.OkhtbG_supervisedForm textarea{resize:vertical;border:1px solid var(--mn-line);width:100%;color:var(--mn-text);background:var(--mn-input);border-radius:9px;outline:0;padding:12px;line-height:1.65}.OkhtbG_sessionHint{color:var(--mn-danger);margin:9px 0 0;font-size:11px}.OkhtbG_formGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:13px;display:grid}.OkhtbG_fieldWide{grid-column:1/-1}.OkhtbG_formGrid select,.OkhtbG_formGrid input{width:100%;min-width:0}.OkhtbG_formActions{align-items:center;gap:12px;margin-top:15px;display:flex}.OkhtbG_formActions span{color:var(--mn-muted);font-size:11px}.OkhtbG_advancedWrite{border-top:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 45%, var(--mn-layer-1))}.OkhtbG_advancedWrite summary{cursor:pointer;justify-content:space-between;align-items:center;gap:16px;min-height:58px;padding:10px 18px;list-style:none;display:flex}.OkhtbG_advancedWrite summary::-webkit-details-marker{display:none}.OkhtbG_advancedWrite summary>span:first-child{gap:2px;display:grid}.OkhtbG_advancedWrite summary strong{font-size:12px}.OkhtbG_advancedWrite summary small{color:var(--mn-faint);font-size:10px}.OkhtbG_advancedWrite summary>span:last-child{color:var(--mn-accent);font:10px var(--mn-code)}.OkhtbG_advancedWrite[open] summary{border-bottom:1px solid var(--mn-line)}.OkhtbG_advancedWrite[open] summary>span:last-child{font-size:0}.OkhtbG_advancedWrite[open] summary>span:last-child:after{content:\"−\";font-size:13px}.OkhtbG_manualForm{padding:3px 18px 18px}.OkhtbG_manualActions{justify-content:space-between;align-items:center;gap:14px;margin-top:15px;display:flex}.OkhtbG_manualActions p{max-width:520px;color:var(--mn-faint);margin:0;font-size:10px}.OkhtbG_listToolbar{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;grid-template-columns:minmax(0,1fr) 170px auto;gap:9px;padding:12px;display:grid}.OkhtbG_listToolbar input,.OkhtbG_listToolbar select{width:100%;min-width:0}.OkhtbG_listNotice{color:var(--mn-faint);margin:10px 0 16px;font-size:10px}.OkhtbG_listNotice span{color:var(--mn-success);font:650 9px var(--mn-code);letter-spacing:.08em;margin-right:7px}.OkhtbG_memoryList{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:9px;display:grid}.OkhtbG_memoryList .OkhtbG_insightCard{height:100%;margin:0}.OkhtbG_listProgress{border-top:1px solid var(--mn-line);min-height:58px;color:var(--mn-faint);justify-content:center;align-items:center;gap:13px;margin-top:12px;padding:10px;font-size:10px;display:flex}.OkhtbG_compactListProgress{border-top:1px solid var(--mn-line);color:var(--mn-faint);text-align:center;justify-items:stretch;gap:7px;margin-top:8px;padding:10px 2px 2px;font-size:10px;display:grid}.OkhtbG_compactListProgress button{width:100%}.OkhtbG_modalBackdrop{z-index:1300;background:#0206178a;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.OkhtbG_modal{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:14px;flex-direction:column;width:min(680px,100vw - 48px);max-height:calc(100vh - 96px);display:flex;overflow:hidden;box-shadow:0 22px 60px #02061738}.OkhtbG_modal>header{border-bottom:1px solid var(--mn-line);flex:none;justify-content:space-between;align-items:flex-start;gap:18px;padding:15px 18px;display:flex}.OkhtbG_modal>header h2{margin:0;font-size:15px;line-height:22px}.OkhtbG_modal>header p{max-width:64ch;color:var(--mn-muted);margin:3px 0 0;font-size:12px;line-height:1.5}.OkhtbG_modal>div:last-child{min-height:0;padding:18px;overflow-y:auto}.OkhtbG_healthStrip{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:13px;display:grid;overflow:hidden}.OkhtbG_healthStrip article{box-sizing:border-box;border-right:1px solid var(--mn-line);align-items:flex-start;gap:10px;min-width:0;min-height:78px;padding:14px 15px;display:flex}.OkhtbG_healthStrip article>div{min-width:0}.OkhtbG_healthStrip article:last-child{border-right:0}.OkhtbG_healthStrip small{color:var(--mn-faint);font:650 10px var(--mn-code);letter-spacing:.06em;margin-bottom:4px;display:block}.OkhtbG_healthStrip strong{text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;display:block;overflow:hidden}.OkhtbG_healthStrip p{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;margin:3px 0 0;font-size:10.5px;overflow:hidden}.OkhtbG_healthIndicator{width:7px;height:7px;box-shadow:0 0 0 4px color-mix(in srgb, currentColor 9%, transparent);border-radius:50%;flex:none;margin-top:3px}.OkhtbG_healthGood{color:var(--mn-success);background:currentColor}.OkhtbG_healthBad{color:var(--mn-danger);background:currentColor}.OkhtbG_healthMuted{color:var(--mn-faint);background:currentColor}.OkhtbG_storageDomains{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;margin-bottom:13px;padding:16px}.OkhtbG_storageRoot{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 45%, transparent);border-radius:9px;justify-content:space-between;align-items:center;gap:18px;min-width:0;margin-top:12px;padding:11px 12px;display:flex}.OkhtbG_storageRoot>div:first-child{gap:4px;min-width:0;display:grid}.OkhtbG_storageRoot span,.OkhtbG_storageRoot small{color:var(--mn-faint);font-size:9px}.OkhtbG_storageRoot code{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.OkhtbG_storageRoot>div:last-child{flex:none;justify-items:end;gap:3px;display:grid}.OkhtbG_storageRoot strong{font:650 11px var(--mn-code)}.OkhtbG_storageAreaGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:8px;display:grid}.OkhtbG_storageAreaGrid article{box-sizing:border-box;border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 30%, var(--mn-layer-1));border-radius:9px;flex-direction:column;min-width:0;min-height:150px;padding:12px;display:flex}.OkhtbG_storageAreaGrid article>header{justify-content:space-between;align-items:center;gap:8px;display:flex}.OkhtbG_storageAreaGrid article>header>div{align-items:center;gap:7px;min-width:0;display:flex}.OkhtbG_storageAreaGrid article>header span{background:var(--mn-faint);border-radius:50%;flex:none;width:6px;height:6px}.OkhtbG_storageAreaGrid article[data-status=ready]>header span{background:var(--mn-success);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 9%, transparent)}.OkhtbG_storageAreaGrid article[data-status=invalid]>header span{background:var(--mn-danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-danger) 9%, transparent)}.OkhtbG_storageAreaGrid article>header strong{text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.OkhtbG_storageAreaGrid article>header em{color:var(--mn-faint);font:normal 8px var(--mn-code);white-space:nowrap}.OkhtbG_storageAreaMetric{align-items:baseline;gap:5px;margin-top:14px;display:flex}.OkhtbG_storageAreaMetric strong{font:650 20px var(--mn-code)}.OkhtbG_storageAreaMetric span{color:var(--mn-faint);font-size:9px}.OkhtbG_storageAreaMetric code{color:var(--mn-muted);margin-left:auto;font-size:9px}.OkhtbG_storageAreaGrid article>p{min-height:28px;color:var(--mn-muted);margin:8px 0;font-size:9px;line-height:1.5}.OkhtbG_storagePath{border-top:1px solid var(--mn-line);color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:auto;padding-top:8px;font-size:8px;display:block;overflow:hidden}.OkhtbG_storageAreaGrid article>small{color:var(--mn-danger);margin-top:6px;font-size:8px;line-height:1.4;display:block}.OkhtbG_storageUnavailable{border:1px dashed var(--mn-line);min-height:126px;color:var(--mn-muted);text-align:center;border-radius:9px;place-content:center;gap:5px;margin-top:12px;display:grid}.OkhtbG_storageUnavailable strong{font-size:12px}.OkhtbG_storageUnavailable p{max-width:520px;color:var(--mn-faint);margin:0;font-size:10px}.OkhtbG_storageFootnote{color:var(--mn-faint);margin:11px 0 0;font-size:9px;line-height:1.5}.OkhtbG_statusSectionHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.OkhtbG_statusSectionHeader h3{margin:4px 0 0;font-size:15px}.OkhtbG_statusSectionHeader p{max-width:590px;color:var(--mn-muted);margin:5px 0 0;font-size:10px}.OkhtbG_phaseBadge{border:1px solid color-mix(in srgb, var(--mn-accent) 25%, var(--mn-line));color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 7%, transparent);font:650 9px var(--mn-code);border-radius:999px;padding:4px 8px}.OkhtbG_statusHeaderActions{align-items:center;gap:8px;display:flex}.OkhtbG_versionDialogBody{gap:12px;display:grid}.OkhtbG_versionChecking{min-height:112px;color:var(--mn-muted);justify-content:center;align-items:center;gap:10px;font-size:12px;display:flex}.OkhtbG_versionChecking span{border:2px solid var(--mn-line);border-top-color:var(--mn-accent);border-radius:50%;width:14px;height:14px;animation:.8s linear infinite OkhtbG_mnemon-spin}@keyframes OkhtbG_mnemon-spin{to{transform:rotate(360deg)}}.OkhtbG_versionError,.OkhtbG_versionResult{border:1px solid color-mix(in srgb, var(--mn-danger) 28%, var(--mn-line));color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 6%, transparent);border-radius:9px;padding:11px 12px}.OkhtbG_versionResult{border-color:color-mix(in srgb, var(--mn-success) 28%, var(--mn-line));color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 6%, transparent)}.OkhtbG_versionError strong,.OkhtbG_versionResult strong{font-size:12px}.OkhtbG_versionError p,.OkhtbG_versionResult p{color:var(--mn-muted);margin:3px 0 0;font-size:11px;line-height:1.5}.OkhtbG_versionList{gap:9px;display:grid}.OkhtbG_versionList article{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 34%, var(--mn-layer-1));border-radius:10px;padding:13px}.OkhtbG_versionList article[data-outdated]{border-color:color-mix(in srgb, var(--mn-accent) 30%, var(--mn-line))}.OkhtbG_versionList article>header{justify-content:space-between;align-items:center;gap:12px;display:flex}.OkhtbG_versionList article>header>div{align-items:center;gap:8px;min-width:0;display:flex}.OkhtbG_versionList article>header strong{font-size:13px}.OkhtbG_versionList article>header span{border:1px solid var(--mn-line);color:var(--mn-muted);font:500 9px var(--mn-code);border-radius:999px;padding:3px 7px}.OkhtbG_versionList article>header em{color:var(--mn-success);font:normal 10px var(--mn-code);white-space:nowrap}.OkhtbG_versionList article[data-outdated]>header em{color:var(--mn-accent)}.OkhtbG_versionNumbers{grid-template-columns:1fr auto 1fr;align-items:end;gap:10px;margin-top:13px;display:grid}.OkhtbG_versionNumbers>div{gap:3px;display:grid}.OkhtbG_versionNumbers small{color:var(--mn-faint);font-size:9px}.OkhtbG_versionNumbers code{font-size:12px}.OkhtbG_versionNumbers>span{color:var(--mn-faint);padding-bottom:1px}.OkhtbG_versionLocation{min-width:0;color:var(--mn-faint);gap:6px;margin-top:9px;font-size:9px;display:flex}.OkhtbG_versionLocation>span{flex:none}.OkhtbG_versionLocation>code{min-width:0;color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:inherit;overflow:hidden}.OkhtbG_versionList article>footer{border-top:1px solid var(--mn-line);justify-content:space-between;align-items:flex-end;gap:16px;margin-top:10px;padding-top:10px;display:flex}.OkhtbG_versionList article>footer p{max-width:470px;color:var(--mn-muted);margin:0;font-size:10.5px;line-height:1.5}.OkhtbG_versionList article>footer button{flex:none}.OkhtbG_versionDialogActions{justify-content:space-between;align-items:center;gap:12px;padding-top:2px;display:flex}.OkhtbG_versionDialogActions>span{color:var(--mn-faint);font-size:9px}.OkhtbG_versionDialogActions>div{gap:8px;display:flex}@media (width<=1000px){.OkhtbG_graphLayout{display:block;position:relative}.OkhtbG_graphInspector{width:auto;min-height:0;box-shadow:none;margin-top:10px;position:static;overflow:visible}.OkhtbG_graphInspector[data-empty]{display:none}.OkhtbG_resultLayout{grid-template-columns:1fr}.OkhtbG_relatedPane{grid-row:1;max-height:none;position:static}.OkhtbG_memoryList{grid-template-columns:1fr}.OkhtbG_storageAreaGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.OkhtbG_runtimeGrid,.OkhtbG_runtimeSummaryGrid{grid-template-columns:1fr}.OkhtbG_documentWorkspace{grid-template-columns:minmax(220px,270px) minmax(0,1fr)}.OkhtbG_documentDetail>dl{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.OkhtbG_shell{min-height:0;overflow:hidden}.OkhtbG_masthead{grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;min-height:76px;padding:10px 14px}.OkhtbG_brandLogo{width:36px;height:36px}.OkhtbG_headerActions{max-width:52vw}.OkhtbG_workspacePicker>span{display:none}.OkhtbG_workspacePicker select{width:min(170px,32vw)}.OkhtbG_statusCluster>span:not(.OkhtbG_statusDot){display:none}.OkhtbG_modalBackdrop{padding:12px}.OkhtbG_modal{width:calc(100vw - 24px);max-height:calc(100vh - 24px)}.OkhtbG_versionList article>footer,.OkhtbG_versionDialogActions{flex-direction:column;align-items:stretch}.OkhtbG_versionDialogActions>div{justify-content:flex-end}.OkhtbG_telemetry{border-top:1px solid var(--mn-line);grid-column:1/-1;justify-content:space-between;padding-top:8px}.OkhtbG_telemetryMetric{text-align:center;flex:1;justify-items:center;gap:3px;min-width:0;padding:0 5px}.OkhtbG_telemetryMetric:first-child{border-left:0}.OkhtbG_topNavigation{padding:0 10px;position:relative}.OkhtbG_topNavigation:after{z-index:2;pointer-events:none;content:\"›\";width:34px;color:var(--mn-faint);background:linear-gradient(90deg, transparent, var(--mn-layer-1) 72%);font:16px var(--mn-code);place-items:center end;padding-right:5px;display:grid;position:absolute;top:0;bottom:0;right:0}.OkhtbG_nav{flex:1;padding-right:26px;scroll-padding-inline:10px 34px}.OkhtbG_navGroup{gap:3px}.OkhtbG_navGroupDivider{height:18px}.OkhtbG_nav button{text-align:center;flex-direction:column;justify-content:center;gap:3px;min-width:60px;padding:4px 3px}.OkhtbG_spaceSummary{display:none}.OkhtbG_navGlyph{line-height:1}.OkhtbG_page{padding:18px 13px calc(170px + env(safe-area-inset-bottom,0px))}.OkhtbG_pageHeader{gap:10px;display:grid}.OkhtbG_pageHeaderMeta{justify-content:space-between}.OkhtbG_entityLayout,.OkhtbG_writebackLayout{grid-template-columns:1fr}.OkhtbG_runtimeComposerHeading,.OkhtbG_runtimeComposerActions{flex-direction:column;align-items:stretch}.OkhtbG_runtimeComposerActions select,.OkhtbG_runtimeComposerActions button{width:100%}.OkhtbG_runtimeBrowserToolbar{flex-direction:column;align-items:stretch}.OkhtbG_runtimeFilterQuery{width:100%;min-width:0}.OkhtbG_documentSummary{grid-template-columns:repeat(2,minmax(0,1fr))}.OkhtbG_documentCapacity{grid-column:1/-1}.OkhtbG_documentToolbar{flex-direction:column;align-items:stretch}.OkhtbG_documentToolbar form{min-width:0}.OkhtbG_documentToolbar>div,.OkhtbG_documentToolbar>button{width:100%}.OkhtbG_documentToolbar>div button{flex:1}.OkhtbG_documentWorkspace{grid-template-columns:1fr;min-height:0}.OkhtbG_documentList{-webkit-overflow-scrolling:touch;max-height:330px;overflow:auto}.OkhtbG_documentReader{min-height:430px}.OkhtbG_documentEditorMeta{grid-template-columns:1fr}.OkhtbG_manualActions{flex-direction:column;align-items:stretch}.OkhtbG_entityRail{position:static}.OkhtbG_searchControls{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.OkhtbG_searchActions{grid-column:1/-1}.OkhtbG_searchActions>button{flex:1}.OkhtbG_searchControls select{width:100%;min-width:0}.OkhtbG_listToolbar{grid-template-columns:1fr}.OkhtbG_bodyDirectoryHeader{display:grid}.OkhtbG_bodyCreate form{grid-template-columns:1fr}.OkhtbG_graphViewport{min-height:360px}.OkhtbG_graphSvg{height:390px}.OkhtbG_graphCanvasControls{top:7px;right:7px}.OkhtbG_graphCanvasControls span{display:none}.OkhtbG_previewOverlay{padding:10px;padding-bottom:calc(10px + env(safe-area-inset-bottom,0px))}.OkhtbG_previewDialog{max-height:min(84dvh,640px)}.OkhtbG_healthStrip{grid-template-columns:1fr}.OkhtbG_storageRoot{flex-direction:column;align-items:flex-start}.OkhtbG_storageRoot>div:last-child{justify-items:start}.OkhtbG_storageAreaGrid{grid-template-columns:1fr}.OkhtbG_flowLegend span:last-child{width:100%;margin-left:0}.OkhtbG_healthStrip article{border-right:0;border-bottom:1px solid var(--mn-line)}.OkhtbG_healthStrip article:last-child{border-bottom:0}.OkhtbG_workspaceMismatch{flex-direction:column;align-items:stretch;margin-inline:13px}.OkhtbG_workspaceMismatch>button{align-self:flex-start}}@media (width<=520px){.OkhtbG_masthead{min-height:68px}.OkhtbG_brand h1{font-size:16px}.OkhtbG_headerActions{max-width:58vw}.OkhtbG_workspacePicker select{width:min(150px,39vw)}.OkhtbG_telemetryMetric span{font-size:10px}.OkhtbG_nav{scroll-snap-type:x proximity}.OkhtbG_nav button{scroll-snap-align:start;min-width:68px}.OkhtbG_pageHeader h2{font-size:19px}.OkhtbG_pageHeaderMeta{flex-wrap:wrap;align-items:stretch}.OkhtbG_pageHeaderMeta>code{align-items:center;min-height:34px;display:flex}.OkhtbG_pageHeaderMeta>button{flex:1}.OkhtbG_emptyState{text-align:center;flex-direction:column;gap:14px;min-height:190px;padding:24px 18px}.OkhtbG_emptyGlyph{width:62px;height:62px}.OkhtbG_documentDetail>header,.OkhtbG_documentDanger,.OkhtbG_supervisedHeading,.OkhtbG_cardTop{flex-direction:column;align-items:flex-start}.OkhtbG_documentDetail>header>div:last-child,.OkhtbG_documentDetail>header button{width:100%}.OkhtbG_documentDanger>div,.OkhtbG_documentDanger>span{margin-right:0}.OkhtbG_documentDanger>button{width:100%}.OkhtbG_documentDetail>dl{grid-template-columns:1fr}.OkhtbG_markdownBody{padding:16px;font-size:12.5px}.OkhtbG_cardActions,.OkhtbG_confirmBar{flex-wrap:wrap;align-items:stretch}.OkhtbG_cardActions button{flex:1}.OkhtbG_confirmBar>span{width:100%;margin:0 0 4px}.OkhtbG_formActions{flex-direction:column;align-items:stretch}.OkhtbG_formActions button{width:100%}.OkhtbG_formGrid,.OkhtbG_searchControls{grid-template-columns:1fr}}@media (width<=1000px) and (height<=760px){.OkhtbG_shell{min-height:0}.OkhtbG_masthead{min-height:58px}.OkhtbG_telemetryMetric{min-width:0;padding:1px 9px}.OkhtbG_topNavigation{min-height:44px}.OkhtbG_nav button{min-height:42px}.OkhtbG_graphViewport{min-height:300px}.OkhtbG_graphSvg{height:300px}}@media (width<=760px) and (pointer:coarse){.OkhtbG_shell input,.OkhtbG_shell select,.OkhtbG_shell textarea{font-size:16px!important}}@media (prefers-reduced-motion:reduce){.OkhtbG_shell *,.OkhtbG_shell :before,.OkhtbG_shell :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.OkhtbG_insightCard:hover{transform:none}.OkhtbG_flowConnector[data-active] i:before{display:none}}"; - const tagId$3 = "dsh-mnemon/MnemonView.module.css"; + const css$3 = ".IIa07q_shell{--mn-bg:var(--dsw-alias-bg-base);--mn-layer-1:var(--dsw-alias-bg-layer-1);--mn-layer-2:var(--dsw-alias-bg-layer-2);--mn-input:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-2));--mn-text:var(--dsw-alias-label-primary);--mn-muted:var(--dsw-alias-label-secondary);--mn-faint:var(--dsw-alias-label-tertiary);--mn-line:var(--dsw-alias-border-l1);--mn-line-strong:var(--dsw-alias-border-l2);--mn-accent:var(--dsw-alias-state-business-primary);--mn-hover:var(--dsw-alias-interactive-bg-hover);--mn-danger:var(--dsw-alias-state-error-primary);--mn-success:var(--dsw-alias-state-success-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-bg);font:13px/1.55 var(--mn-sans);-webkit-tap-highlight-color:transparent;flex-direction:column;display:flex;overflow:hidden}.IIa07q_shell *,.IIa07q_shell :before,.IIa07q_shell :after{box-sizing:border-box}.IIa07q_shell button,.IIa07q_shell input,.IIa07q_shell select,.IIa07q_shell textarea{color:inherit;font:inherit}.IIa07q_shell button,.IIa07q_shell 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:2px solid var(--mn-accent);outline-offset:2px}.IIa07q_masthead{border-bottom:1px solid var(--mn-line);background:var(--mn-bg);flex:none;grid-template-columns:minmax(220px,1fr) auto auto;align-items:center;gap:clamp(12px,2vw,24px);min-height:56px;padding:8px 16px;display:grid}.IIa07q_backButton{flex:none;align-items:center;gap:4px;min-width:max-content;display:inline-flex}.IIa07q_backButton>svg{flex:none}.IIa07q_brand{align-items:center;gap:11px;min-width:0;display:flex}.IIa07q_brandLogo{width:32px;height:32px;box-shadow:0 0 0 1px var(--mn-line);border-radius:8px;flex:none;overflow:hidden}.IIa07q_brand h1{letter-spacing:-.02em;margin:1px 0 0;font-size:16px;line-height:1.15}.IIa07q_storageMode{border:1px solid var(--mn-line-strong);min-height:32px;color:var(--mn-muted);background:var(--mn-layer-1);white-space:nowrap;border-radius:8px;flex:none;align-items:center;gap:6px;padding:0 9px;display:flex}.IIa07q_storageMode>span{font-size:10px}.IIa07q_storageMode>strong{color:var(--mn-text);font-size:11px;font-weight:600}.IIa07q_cardKicker,.IIa07q_sectionHeading>div>span,.IIa07q_entityHeading>span,.IIa07q_inspectorHeading>span{color:var(--mn-faint);font:650 9px/1.2 var(--mn-code);letter-spacing:.12em;text-transform:uppercase}.IIa07q_statusCluster{border:1px solid var(--mn-line-strong);min-height:34px;color:var(--mn-muted);background:var(--mn-layer-1);border-radius:9px;flex:none;align-items:center;gap:8px;padding:0 4px 0 11px;font-size:11px;display:flex}.IIa07q_statusDot{border-radius:50%;width:6px;height:6px}.IIa07q_online{background:var(--mn-success);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 15%, transparent)}.IIa07q_offline{background:var(--mn-danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-danger) 14%, transparent)}.IIa07q_checking{background:var(--mn-faint);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-faint) 12%, transparent)}.IIa07q_iconButton{width:32px;height:32px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;display:grid}.IIa07q_iconButton:hover{color:var(--mn-accent);background:var(--mn-hover)}.IIa07q_headerActions{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:7px;font-size:10px;display:flex}.IIa07q_workspacePicker>span{white-space:nowrap}.IIa07q_workspacePicker select{border:1px solid var(--mn-line-strong);width:min(190px,22vw);min-width:112px;height:34px;color:var(--mn-text);background:var(--mn-input);cursor:pointer;border-radius:9px;outline:0;padding:0 28px 0 9px;font-size:11px}.IIa07q_workspacePicker select:hover{border-color:color-mix(in srgb, var(--mn-accent) 50%, var(--mn-line-strong))}.IIa07q_alert,.IIa07q_inlineError{border:1px solid color-mix(in srgb, var(--mn-danger) 32%, transparent);color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 7%, var(--mn-layer-1));border-radius:9px;padding:10px 13px;font-size:12px}.IIa07q_alert{flex-direction:column;flex:none;margin:10px clamp(18px,2.5vw,32px) 0;display:flex}.IIa07q_workspaceMismatch{border:1px solid color-mix(in srgb, var(--mn-accent) 36%, var(--mn-line));background:color-mix(in srgb, var(--mn-accent) 7%, var(--mn-layer-1));border-radius:10px;flex:none;justify-content:space-between;align-items:center;gap:18px;min-width:0;margin:10px clamp(18px,2.5vw,32px) 0;padding:11px 12px 11px 14px;display:flex}.IIa07q_workspaceMismatch>div{gap:2px;min-width:0;display:grid}.IIa07q_workspaceMismatch strong{font-size:12px}.IIa07q_workspaceMismatch span{color:var(--mn-muted);font-size:10px}.IIa07q_workspaceMismatch>div>div{flex-wrap:wrap;gap:5px 12px;min-width:0;margin-top:4px;display:flex}.IIa07q_workspaceMismatch code{color:var(--mn-faint);font:9px/1.4 var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_workspaceMismatch>button{white-space:nowrap;flex:none;min-height:32px}.IIa07q_telemetry{align-items:center;min-width:0;display:flex}.IIa07q_telemetryMetric{border-left:1px solid var(--mn-line);gap:2px;min-width:72px;padding:1px 14px;display:grid}.IIa07q_telemetryMetric span{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9px;overflow:hidden}.IIa07q_telemetryMetric strong{font:650 13px/1 var(--mn-code);font-variant-numeric:tabular-nums}.IIa07q_workspace{flex-direction:column;flex:1;min-height:0;display:flex}.IIa07q_topNavigation{border-bottom:1px solid var(--mn-line);background:var(--mn-layer-1);flex:none;justify-content:space-between;align-items:stretch;gap:14px;min-width:0;min-height:46px;padding:0 16px;display:flex}.IIa07q_nav{overscroll-behavior-inline:contain;scrollbar-width:none;align-items:stretch;gap:10px;min-width:0;display:flex;overflow-x:auto}.IIa07q_nav::-webkit-scrollbar{display:none}.IIa07q_navGroup{align-items:stretch;gap:14px;min-width:0;display:flex}.IIa07q_navGroupDivider{background:var(--mn-line);flex:none;align-self:center;width:1px;height:22px}.IIa07q_nav button{min-width:max-content;min-height:44px;color:var(--mn-muted);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:7px;padding:0 3px;display:flex;position:relative}.IIa07q_nav button:hover,.IIa07q_nav button[aria-current=page]{color:var(--mn-text)}.IIa07q_nav button[aria-current=page]:after{content:\"\";background:var(--mn-accent);border-radius:2px 2px 0 0;height:2px;position:absolute;bottom:-1px;left:0;right:0}.IIa07q_nav button[aria-current=page] .IIa07q_navGlyph{color:var(--mn-accent)}.IIa07q_nav button>span:last-child{min-width:0;display:block}.IIa07q_nav button strong{font-size:12px;font-weight:600}.IIa07q_nav button small{display:none}.IIa07q_navGlyph{color:var(--mn-faint);font:600 13px/1 var(--mn-code)}@media (width>=1000px){.IIa07q_nav button{min-height:50px}.IIa07q_nav button small{color:var(--mn-faint);margin-top:1px;font-size:9px;line-height:1.3;display:block}}.IIa07q_spaceSummary{border-left:1px solid var(--mn-line);flex:none;grid-template-columns:minmax(0,1fr) auto;align-content:center;gap:1px 9px;min-width:142px;padding:0 0 0 14px;display:grid}.IIa07q_spaceSummary>span{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9px;overflow:hidden}.IIa07q_spaceSummary code{color:var(--mn-accent);font:650 12px/1 var(--mn-code);grid-row:span 2;align-self:center}.IIa07q_spaceSummary small{color:var(--mn-faint);font-size:9px}.IIa07q_canvas{overscroll-behavior-x:contain;overscroll-behavior-y:auto;scroll-behavior:auto;-webkit-overflow-scrolling:touch;background:var(--mn-bg);flex:1;min-width:0;overflow:auto}.IIa07q_page{width:min(1320px,100%);min-height:100%;margin:0 auto;padding:clamp(16px,2vw,24px) clamp(16px,2.4vw,28px) clamp(96px,14vh,150px)}.IIa07q_pageHeader{justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:16px;display:flex}.IIa07q_pageHeader h2{letter-spacing:-.025em;margin:2px 0;font-size:20px;line-height:1.2}.IIa07q_pageHeader p{max-width:72ch;color:var(--mn-muted);margin:0;font-size:12px;line-height:1.65}.IIa07q_pageHeaderMeta{flex:none;align-items:center;gap:9px;display:flex}.IIa07q_pageHeaderMeta>code{border:1px solid var(--mn-line);color:var(--mn-faint);background:var(--mn-layer-1);font:600 9px/1 var(--mn-code);letter-spacing:.06em;border-radius:7px;padding:6px 8px}.IIa07q_primaryButton,.IIa07q_secondaryButton,.IIa07q_ghostButton,.IIa07q_dangerButton,.IIa07q_dangerSolidButton{cursor:pointer;border-radius:8px;min-height:36px;padding:0 13px;font-size:12px;transition:border-color .14s,background-color .14s,color .14s,transform .14s}.IIa07q_primaryButton{border:1px solid var(--mn-accent);color:#fff;background:var(--mn-accent)}.IIa07q_secondaryButton{border:1px solid var(--mn-line-strong);color:var(--mn-text);background:var(--mn-layer-1)}.IIa07q_ghostButton,.IIa07q_dangerButton{background:0 0;border:1px solid #0000;min-height:32px;padding:0 9px}.IIa07q_ghostButton{color:var(--mn-muted)}.IIa07q_dangerButton{color:var(--mn-danger)}.IIa07q_dangerSolidButton{border:1px solid var(--mn-danger);color:#fff;background:var(--mn-danger);min-height:29px}.IIa07q_primaryButton:hover,.IIa07q_secondaryButton:hover,.IIa07q_ghostButton:hover,.IIa07q_dangerButton:hover{filter:brightness(.98);background-color:var(--mn-hover)}.IIa07q_primaryButton:hover{background-color:var(--mn-accent)}.IIa07q_shell button:disabled{cursor:not-allowed;opacity:.48}.IIa07q_emptyState{border:1px dashed var(--mn-line-strong);background:color-mix(in srgb, var(--mn-layer-1) 50%, transparent);border-radius:13px;justify-content:center;align-items:center;gap:22px;min-height:220px;padding:30px;display:flex}.IIa07q_emptyGlyph{border:1px solid color-mix(in srgb, var(--mn-accent) 35%, var(--mn-line));width:76px;height:76px;color:var(--mn-accent);background:radial-gradient(circle, color-mix(in srgb, var(--mn-accent) 12%, transparent), transparent 65%);font:500 26px/1 var(--mn-code);border-radius:50%;flex:none;place-items:center;display:grid}.IIa07q_emptyState h3{margin:0 0 5px;font-size:16px}.IIa07q_emptyState p{max-width:500px;color:var(--mn-muted);margin:0}.IIa07q_loadingPanel{border:1px solid var(--mn-line);min-height:220px;color:var(--mn-muted);background:var(--mn-layer-1);border-radius:13px;place-items:center;display:grid}.IIa07q_inlineError{margin:0 0 14px}.IIa07q_muted,.IIa07q_loading{color:var(--mn-faint);padding:16px 0;font-size:12px}.IIa07q_bodyDirectory{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-1) 72%, var(--mn-bg));border-radius:11px;margin-bottom:12px;padding:12px 14px}.IIa07q_bodyDirectoryHeader{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:10px;display:flex}.IIa07q_bodyDirectoryHeader h3{margin:1px 0;font-size:13px}.IIa07q_bodyDirectoryHeader p{color:var(--mn-muted);margin:0;font-size:10px}.IIa07q_bodyDirectoryPath{max-width:min(62vw,720px);color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:9px;display:block;overflow:hidden}.IIa07q_bodyDirectoryHeader>strong{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 9px var(--mn-code);border-radius:999px;flex:none;padding:5px 8px}.IIa07q_bodyGrid{grid-template-columns:repeat(auto-fit,minmax(245px,1fr));gap:7px;display:grid}.IIa07q_bodyDirectoryEmpty{border:1px dashed color-mix(in srgb, var(--mn-line) 84%, transparent);min-height:92px;color:var(--mn-muted);border-radius:12px;grid-column:1/-1;justify-content:center;align-items:center;gap:14px;display:flex}.IIa07q_bodyDirectoryEmpty>span{opacity:.6;font-size:28px}.IIa07q_bodyDirectoryEmpty strong{color:var(--mn-text);display:block}.IIa07q_bodyDirectoryEmpty p{margin:3px 0 0;font-size:10px}.IIa07q_bodyCard{--mn-body-accent:var(--mn-success);border:1px solid var(--mn-line);background:var(--mn-layer-1);opacity:.7;border-radius:9px;min-width:0;padding:9px 10px;transition:opacity .18s,border-color .18s}.IIa07q_bodyCard[data-active]{border-color:color-mix(in srgb, var(--mn-body-accent) 42%, var(--mn-line));opacity:1;box-shadow:inset 0 1px 0 color-mix(in srgb, var(--mn-body-accent) 10%, transparent)}.IIa07q_bodyCardTop{grid-template-columns:7px minmax(0,1fr) auto;align-items:center;gap:8px;display:grid}.IIa07q_bodySignal{background:var(--mn-faint);border-radius:50%;width:7px;height:7px}.IIa07q_bodyCard[data-active] .IIa07q_bodySignal{background:var(--mn-body-accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--mn-body-accent) 14%, transparent)}.IIa07q_bodyCard:not([data-healthy]) .IIa07q_bodySignal{background:var(--mn-danger);box-shadow:0 0 0 4px color-mix(in srgb, var(--mn-danger) 12%, transparent)}.IIa07q_bodyCardTop>div{min-width:0;display:grid}.IIa07q_bodyCardTop strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.IIa07q_bodyCardTop code{color:var(--mn-faint);font:9px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_bodyHealth{color:var(--mn-success);font:650 8px var(--mn-code);letter-spacing:.07em;text-transform:uppercase}.IIa07q_bodyCard:not([data-healthy]) .IIa07q_bodyHealth{color:var(--mn-danger)}.IIa07q_bodySwitch{min-height:32px;color:var(--mn-faint);cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:0 1px;font-size:9.5px;display:flex}.IIa07q_bodySwitchTrack{border:1px solid var(--mn-line-strong);background:var(--mn-layer-2);border-radius:999px;flex:none;width:29px;height:17px;transition:border-color .18s,background-color .18s;position:relative}.IIa07q_bodySwitchTrack i{background:var(--mn-faint);border-radius:50%;width:11px;height:11px;transition:transform .2s cubic-bezier(.2,.8,.2,1),background-color .18s;position:absolute;top:2px;left:2px}.IIa07q_bodySwitch:hover{color:var(--mn-text)}.IIa07q_bodySwitch:hover .IIa07q_bodySwitchTrack{border-color:var(--mn-body-accent)}.IIa07q_bodySwitch[aria-checked=true]{color:var(--mn-text)}.IIa07q_bodySwitch[aria-checked=true] .IIa07q_bodySwitchTrack{border-color:color-mix(in srgb, var(--mn-body-accent) 65%, var(--mn-line));background:color-mix(in srgb, var(--mn-body-accent) 25%, var(--mn-layer-2))}.IIa07q_bodySwitch[aria-checked=true] .IIa07q_bodySwitchTrack i{background:var(--mn-body-accent);transform:translate(12px)}.IIa07q_bodyCardActions{align-items:center;gap:6px;display:flex}.IIa07q_bodyEditButton{width:28px;height:28px;color:var(--mn-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:7px;place-items:center;font-size:12px;display:grid}.IIa07q_bodyEditButton:hover{color:var(--mn-text);border-color:var(--mn-line);background:var(--mn-hover)}.IIa07q_bodyEdit{gap:9px;padding-top:2px;display:grid}.IIa07q_bodyEdit label{color:var(--mn-faint);gap:4px;font-size:9px;display:grid}.IIa07q_bodyEdit input,.IIa07q_bodyEdit textarea{border:1px solid var(--mn-line);width:100%;color:var(--mn-text);background:var(--mn-input);border-radius:8px;outline:0;padding:7px 9px;font-size:12px;line-height:1.5}.IIa07q_bodyEdit textarea{resize:vertical}.IIa07q_bodyEdit input:focus,.IIa07q_bodyEdit textarea:focus{border-color:var(--mn-accent)}.IIa07q_bodyEditActions{justify-content:flex-end;gap:7px;display:flex}.IIa07q_bodyDeleteConfirm{gap:16px;display:grid}.IIa07q_bodyDeleteConfirm>p{color:var(--mn-muted);margin:0;font-size:12px;line-height:1.6}.IIa07q_bodyDeleteSummary{border:1px solid color-mix(in srgb, var(--mn-danger) 22%, var(--mn-line));background:color-mix(in srgb, var(--mn-danger) 5%, var(--mn-layer-1));border-radius:8px;gap:3px;padding:12px;display:grid}.IIa07q_bodyDeleteSummary strong{font-size:13px}.IIa07q_bodyDeleteContent{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;font-weight:400;line-height:1.55}.IIa07q_bodyDeleteSummary span{color:var(--mn-muted);font-size:11px}.IIa07q_bodyCard>p{min-height:15px;color:var(--mn-muted);margin:7px 0;font-size:10px;line-height:1.45}.IIa07q_bodyCard footer{border-top:1px solid var(--mn-line);color:var(--mn-faint);flex-wrap:wrap;gap:5px 11px;padding-top:6px;font-size:9px;display:flex}.IIa07q_bodyCreate{border-top:1px solid var(--mn-line);margin-top:10px;padding-top:8px}.IIa07q_bodyCreate summary{cursor:pointer;width:max-content;color:var(--mn-accent);font-size:10px;list-style:none}.IIa07q_bodyCreate summary::-webkit-details-marker{display:none}.IIa07q_bodyCreate form{grid-template-columns:minmax(130px,.7fr) minmax(150px,.9fr) minmax(230px,1.7fr) auto;gap:7px;margin-top:9px;display:grid}.IIa07q_bodyCreate input{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;min-width:0;height:34px;padding:0 9px}.IIa07q_bodyCreate input:focus{border-color:var(--mn-accent)}.IIa07q_graphLayout{grid-template-columns:minmax(0,1fr) minmax(240px,270px);gap:10px;display:grid}.IIa07q_graphPanel,.IIa07q_graphInspector{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px}.IIa07q_graphPanel{min-width:0;overflow:hidden}.IIa07q_graphToolbar,.IIa07q_graphFooter{min-height:43px;color:var(--mn-muted);justify-content:space-between;align-items:center;gap:14px;padding:0 13px;font-size:10px;display:flex}.IIa07q_graphToolbar{border-bottom:1px solid var(--mn-line)}.IIa07q_graphToolbar>div:first-child{align-items:center;gap:7px;display:flex}.IIa07q_graphToolbar small{color:var(--mn-faint)}.IIa07q_liveDot{background:var(--mn-success);width:6px;height:6px;box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 15%, transparent);border-radius:50%}.IIa07q_graphLegend{flex-wrap:wrap;justify-content:flex-end;gap:5px 10px;display:flex}.IIa07q_graphLegend span{align-items:center;gap:4px;display:flex}.IIa07q_graphLegend span:before{content:\"\";background:var(--edge-color);border-radius:2px;width:13px;height:2px}.IIa07q_graphLegend [data-edge=temporal]{--edge-color:#87909f}.IIa07q_graphLegend [data-edge=scope]{--edge-color:#708199}.IIa07q_graphLegend [data-edge=scope]:before{background:repeating-linear-gradient(90deg, var(--edge-color) 0 4px, transparent 4px 7px)}.IIa07q_graphLegend [data-edge=semantic]{--edge-color:#4d7cfe}.IIa07q_graphLegend [data-edge=causal]{--edge-color:#ef6b5b}.IIa07q_graphLegend [data-edge=entity]{--edge-color:#22a879}.IIa07q_graphViewport{background:radial-gradient(circle at 50% 48%, color-mix(in srgb, var(--mn-accent) 6%, transparent), transparent 47%);min-height:clamp(390px,42vw,560px);position:relative;overflow:hidden}.IIa07q_graphCanvasControls{z-index:2;border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-1) 88%, transparent);box-shadow:0 6px 18px color-mix(in srgb, var(--mn-text) 7%, transparent);backdrop-filter:blur(10px);border-radius:9px;align-items:center;gap:5px;padding:4px;display:flex;position:absolute;top:10px;right:10px}.IIa07q_graphCanvasControls span{color:var(--mn-faint);font:9px var(--mn-code);align-items:center;gap:5px;padding:0 6px;display:flex}.IIa07q_graphCanvasControls span i{background:var(--mn-accent);width:5px;height:5px;box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-accent) 12%, transparent);border-radius:50%}.IIa07q_graphCanvasControls button{min-height:30px;color:var(--mn-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;padding:0 9px;font-size:9.5px}.IIa07q_graphCanvasControls button:hover,.IIa07q_graphCanvasControls button[data-active]{border-color:var(--mn-line);color:var(--mn-text);background:var(--mn-hover)}.IIa07q_graphCanvasControls button[data-active]{color:var(--mn-accent)}.IIa07q_graphSvg{touch-action:pan-y pinch-zoom;user-select:none;width:100%;height:clamp(390px,42vw,560px);display:block}.IIa07q_graphBackdrop{fill:var(--mn-layer-1)}.IIa07q_graphGridLine{stroke:var(--mn-line);stroke-width:.6px;opacity:.5}.IIa07q_graphEdge{fill:none;stroke:#87909f;stroke-width:1px;opacity:.32;vector-effect:non-scaling-stroke}.IIa07q_graphEdge[data-edge=scope]{stroke:#708199;stroke-dasharray:4 5;opacity:.28}.IIa07q_graphEdge[data-edge=semantic]{stroke:#4d7cfe;opacity:.48}.IIa07q_graphEdge[data-edge=causal]{stroke:#ef6b5b;opacity:.52}.IIa07q_graphEdge[data-edge=entity]{stroke:#22a879;stroke-width:1.45px;opacity:.78}.IIa07q_graphNode{--node:#8290a8;cursor:grab;touch-action:none;outline:none}.IIa07q_graphNode[data-dragging]{cursor:grabbing}.IIa07q_graphNode[data-category=decision]{--node:#ef8354}.IIa07q_graphNode[data-category=preference]{--node:#a879e1}.IIa07q_graphNode[data-category=fact]{--node:#4d7cfe}.IIa07q_graphNode[data-category=insight]{--node:#19a77d}.IIa07q_graphNode[data-category=context]{--node:#d8a624}.IIa07q_graphNode[data-kind=space]{--node:var(--mn-success)}.IIa07q_graphNode[data-kind=entity]{--node:#2b9db9}.IIa07q_nodeHalo{fill:color-mix(in srgb, var(--node) 18%, var(--mn-layer-1));stroke:color-mix(in srgb, var(--node) 60%, var(--mn-layer-1));stroke-width:1.5px;transition:r .16s}.IIa07q_nodeCore{fill:var(--node)}.IIa07q_nodeLabel{fill:var(--mn-muted);font:10px var(--mn-code);pointer-events:auto}.IIa07q_nodeBodyLabel{fill:var(--mn-faint);font:650 8px var(--mn-code);letter-spacing:.04em;pointer-events:auto}.IIa07q_graphSvg[data-density=sparse] .IIa07q_nodeLabel{font-size:12px}.IIa07q_graphNode:hover .IIa07q_nodeHalo,.IIa07q_graphNode:focus .IIa07q_nodeHalo,.IIa07q_graphNode[data-selected] .IIa07q_nodeHalo{fill:color-mix(in srgb, var(--node) 28%, var(--mn-layer-1));stroke:var(--node)}.IIa07q_graphNode[data-selected] .IIa07q_nodeLabel{fill:var(--mn-text);font-weight:650}.IIa07q_graphFooter{border-top:1px solid var(--mn-line);min-height:38px;color:var(--mn-faint)}.IIa07q_graphInspector{min-width:0;min-height:calc(clamp(390px,42vw,560px) + 83px);padding:15px;overflow:hidden}.IIa07q_inspectorEmpty{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;display:flex}.IIa07q_inspectorLogo{opacity:.72;border-radius:11px;width:54px;height:54px;margin-bottom:15px}.IIa07q_inspectorEmpty h3{margin:7px 0 3px;font-size:14px}.IIa07q_inspectorEmpty p{color:var(--mn-faint);margin:0;font-size:11px}.IIa07q_inspectorHeading{justify-content:space-between;align-items:center;display:flex}.IIa07q_inspectorHeading button,.IIa07q_sectionHeading button{width:32px;height:32px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;display:grid}.IIa07q_inspectorHeading button:hover,.IIa07q_sectionHeading button:hover{background:var(--mn-hover)}.IIa07q_categoryChip{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 10%, transparent);border-radius:999px;margin-top:24px;padding:3px 8px;font-size:10px;display:inline-flex}.IIa07q_inspectorTitleRow{align-items:flex-start;gap:8px;min-width:0;margin:12px 0 20px;display:flex}.IIa07q_inspectorTitle{overflow-wrap:anywhere;white-space:pre-wrap;-webkit-line-clamp:6;-webkit-box-orient:vertical;flex:1;min-width:0;margin:0;font-size:14px;line-height:1.6;display:-webkit-box;overflow:hidden}.IIa07q_inspectorEye{border:1px solid var(--mn-line);width:27px;height:27px;color:var(--mn-muted);background:var(--mn-layer-1);cursor:pointer;border-radius:7px;flex:none;place-items:center;transition:color .15s,border-color .15s,background-color .15s;display:grid}.IIa07q_inspectorEye:hover{color:var(--mn-accent);border-color:var(--mn-line-strong);background:var(--mn-hover)}.IIa07q_inspectorMeta{margin:0}.IIa07q_inspectorMeta>div{border-top:1px solid var(--mn-line);gap:3px;padding:11px 0;display:grid}.IIa07q_inspectorMeta dt{color:var(--mn-faint);font:9px var(--mn-code);text-transform:uppercase}.IIa07q_inspectorMeta dd{overflow-wrap:anywhere;color:var(--mn-muted);margin:0;font-size:11px}.IIa07q_inspectorActions{gap:8px;margin-top:20px;display:grid}.IIa07q_previewOverlay{z-index:40;background:color-mix(in srgb, var(--mn-bg) 58%, transparent);backdrop-filter:blur(4px);place-items:center;padding:clamp(16px,4vw,48px);display:grid;position:fixed;inset:0}.IIa07q_previewDialog{border:1px solid var(--mn-line-strong);background:var(--mn-layer-1);width:min(680px,100%);max-height:min(76dvh,640px);box-shadow:0 24px 64px color-mix(in srgb, var(--mn-text) 20%, transparent);border-radius:13px;flex-direction:column;display:flex;overflow:hidden}.IIa07q_previewHeading{border-bottom:1px solid var(--mn-line);flex:none;justify-content:space-between;align-items:center;gap:12px;min-height:46px;padding:0 14px 0 16px;display:flex}.IIa07q_previewHeading>span{color:var(--mn-accent);font:650 9px/1.2 var(--mn-code);letter-spacing:.08em;text-transform:uppercase}.IIa07q_previewHeading button{width:32px;height:32px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;font-size:15px;display:grid}.IIa07q_previewHeading button:hover{background:var(--mn-hover)}.IIa07q_previewMeta{border-bottom:1px solid var(--mn-line);color:var(--mn-faint);font:9px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;flex:none;padding:8px 16px;overflow:hidden}.IIa07q_previewBody{-webkit-overflow-scrolling:touch;min-height:0;padding:14px 16px 18px;overflow:auto}.IIa07q_previewBody p{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--mn-text);margin:0;font-size:13px;line-height:1.7}.IIa07q_searchBar{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:13px;margin-bottom:18px;padding:13px}.IIa07q_queryField{border:1px solid var(--mn-line-strong);background:var(--mn-input);border-radius:9px;grid-template-columns:24px minmax(0,1fr) 24px;align-items:center;gap:5px;padding:0 10px;display:grid}.IIa07q_queryField>span{color:var(--mn-accent);font:18px var(--mn-code)}.IIa07q_queryField input{background:0 0;border:0;outline:0;width:100%;height:42px}.IIa07q_queryField kbd{color:var(--mn-faint);font:11px var(--mn-code)}.IIa07q_searchControls{justify-content:flex-end;align-items:flex-end;gap:10px;padding-top:10px;display:flex}.IIa07q_searchActions{align-items:center;gap:7px;display:flex}.IIa07q_agentAnswer{border:1px solid color-mix(in srgb, var(--mn-accent) 30%, var(--mn-line));background:linear-gradient(135deg, color-mix(in srgb, var(--mn-accent) 7%, var(--mn-layer-1)), var(--mn-layer-1) 60%);border-radius:11px;margin-bottom:16px;padding:16px 18px}.IIa07q_agentAnswerHeading{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.IIa07q_agentAnswerHeading span{color:var(--mn-accent);font:650 9px/1.2 var(--mn-code);letter-spacing:.08em}.IIa07q_agentAnswerHeading h3{margin:4px 0 0;font-size:15px}.IIa07q_agentAnswerHeading>code{color:var(--mn-faint);font-size:9px}.IIa07q_agentAnswer>p{white-space:pre-wrap;color:var(--mn-text);margin:12px 0;font-size:13px;line-height:1.7}.IIa07q_agentCitations{border-top:1px solid var(--mn-line);flex-wrap:wrap;gap:5px;padding-top:10px;display:flex}.IIa07q_agentCitations code{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:5px;padding:3px 6px;font-size:9px}.IIa07q_searchControls label,.IIa07q_formGrid label,.IIa07q_fieldWide{color:var(--mn-muted);gap:5px;font-size:11px;display:grid}.IIa07q_searchControls select,.IIa07q_formGrid select,.IIa07q_formGrid input,.IIa07q_listToolbar input,.IIa07q_listToolbar select,.IIa07q_entitySearch input{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;min-width:140px;height:34px;padding:0 9px}.IIa07q_searchControls select:focus,.IIa07q_formGrid select:focus,.IIa07q_formGrid input:focus,.IIa07q_listToolbar input:focus,.IIa07q_listToolbar select:focus,.IIa07q_entitySearch input:focus,.IIa07q_supervisedForm textarea:focus{border-color:var(--mn-accent)}.IIa07q_singleColumn{max-width:830px}.IIa07q_resultLayout{grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);align-items:start;gap:14px;display:grid}.IIa07q_results,.IIa07q_relatedPane,.IIa07q_entityResults{min-width:0}.IIa07q_sectionHeading{justify-content:space-between;align-items:center;gap:16px;min-height:39px;margin-bottom:8px;display:flex}.IIa07q_sectionHeading h3{margin:2px 0 0;font-size:15px}.IIa07q_sectionHeading>strong{min-width:27px;height:27px;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 11px var(--mn-code);border-radius:7px;place-items:center;display:grid}.IIa07q_relatedPane{border:1px solid var(--mn-line);background:var(--mn-layer-1);-webkit-overflow-scrolling:touch;border-radius:12px;max-height:calc(100dvh - 230px);padding:13px;scroll-margin-top:14px;position:sticky;top:12px;overflow:auto}.IIa07q_relatedSource{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:8px;margin:0 0 13px;padding:10px;font-size:11px}.IIa07q_insightCard{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0;margin-bottom:9px;padding:14px;transition:border-color .15s,transform .15s,box-shadow .15s}.IIa07q_insightCard:hover{border-color:var(--mn-line-strong);transform:translateY(-1px)}.IIa07q_cardTop{justify-content:space-between;align-items:center;gap:10px;display:flex}.IIa07q_badges,.IIa07q_tags,.IIa07q_entities{flex-wrap:wrap;gap:5px;display:flex}.IIa07q_badge{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:999px;padding:2px 6px;font-size:9px}.IIa07q_id{color:var(--mn-faint);font:9px var(--mn-code)}.IIa07q_content{white-space:pre-wrap;overflow-wrap:anywhere;margin:10px 0;line-height:1.65}.IIa07q_tags{color:var(--mn-accent);font-size:10px}.IIa07q_entities{margin-top:7px}.IIa07q_entities span{border:1px solid var(--mn-line);color:var(--mn-muted);border-radius:5px;padding:2px 6px;font-size:9px}.IIa07q_cardActions{border-top:1px solid var(--mn-line);justify-content:flex-end;align-items:center;gap:3px;min-height:30px;margin-top:10px;padding-top:8px;display:flex}.IIa07q_confirmBar{width:100%;color:var(--mn-danger);justify-content:flex-end;align-items:center;gap:5px;font-size:11px;display:flex}.IIa07q_confirmBar>span{margin-right:auto}.IIa07q_entityLayout{grid-template-columns:265px minmax(0,1fr);align-items:start;gap:16px;display:grid}.IIa07q_entityRail{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;padding:13px;position:sticky;top:0}.IIa07q_entitySearch{grid-template-columns:minmax(0,1fr) auto;gap:7px;display:grid}.IIa07q_entitySearch input{min-width:0}.IIa07q_entityHeading{justify-content:space-between;align-items:center;margin:18px 2px 7px;display:flex}.IIa07q_entityHeading small{color:var(--mn-faint);font-size:9px}.IIa07q_entityList{gap:3px;display:grid}.IIa07q_entityList button{min-height:34px;color:var(--mn-muted);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:7px;justify-content:space-between;align-items:center;gap:10px;padding:0 9px;display:flex}.IIa07q_entityList button:hover,.IIa07q_entityList button[aria-pressed=true]{color:var(--mn-text);background:var(--mn-hover)}.IIa07q_entityList strong{color:var(--mn-faint);font:10px var(--mn-code)}.IIa07q_entityResults>.IIa07q_emptyState{min-height:360px}.IIa07q_runtimeComposer,.IIa07q_runtimeTarget{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px}.IIa07q_runtimeComposer{background:linear-gradient(135deg, color-mix(in srgb, var(--mn-accent) 5%, var(--mn-layer-1)), var(--mn-layer-1) 55%);margin-bottom:13px;padding:15px}.IIa07q_runtimeComposerHeading{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:11px;display:flex}.IIa07q_runtimeComposerHeading h3{margin:0 0 2px;font-size:14px}.IIa07q_runtimeComposerHeading p{color:var(--mn-muted);margin:0;font-size:10px}.IIa07q_runtimeComposerHeading>span{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 9px var(--mn-code);border-radius:999px;flex:none;padding:4px 8px}.IIa07q_runtimeComposer>textarea,.IIa07q_runtimeEntry textarea{resize:vertical;border:1px solid var(--mn-line);width:100%;color:var(--mn-text);background:var(--mn-input);border-radius:9px;outline:0;padding:10px 11px;line-height:1.6}.IIa07q_runtimeComposer>textarea:focus,.IIa07q_runtimeEntry textarea:focus{border-color:var(--mn-accent)}.IIa07q_runtimeComposerActions{justify-content:flex-end;align-items:flex-end;gap:9px;margin-top:10px;display:flex}.IIa07q_runtimeComposerActions label{color:var(--mn-faint);gap:4px;font-size:9px;display:grid}.IIa07q_runtimeComposerActions select,.IIa07q_runtimeEntry select{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;min-width:135px;height:34px;padding:0 8px}.IIa07q_runtimeNotice,.IIa07q_runtimeReadOnly{border:1px solid color-mix(in srgb, var(--mn-success) 28%, var(--mn-line));color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 6%, var(--mn-layer-1));border-radius:9px;margin-bottom:13px;padding:9px 12px;font-size:11px}.IIa07q_runtimeReadOnly{color:var(--mn-muted);border-color:var(--mn-line);background:var(--mn-layer-1)}.IIa07q_runtimeGrid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:12px;display:grid}.IIa07q_runtimeSummaryGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:10px;display:grid}.IIa07q_runtimeSummaryCard{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0}.IIa07q_runtimeBrowser{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;overflow:hidden}.IIa07q_runtimeBrowserToolbar{border-bottom:1px solid var(--mn-line);justify-content:space-between;align-items:center;gap:12px;padding:10px;display:flex}.IIa07q_runtimeScopeFilter{flex-wrap:wrap;align-items:center;gap:3px;display:flex}.IIa07q_runtimeScopeFilter button{min-height:32px;color:var(--mn-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:7px;padding:0 10px}.IIa07q_runtimeScopeFilter button:hover{background:var(--mn-hover)}.IIa07q_runtimeScopeFilter button[data-active]{border-color:var(--mn-line);color:var(--mn-text);background:var(--mn-layer-2)}.IIa07q_runtimeScopeFilter b{color:var(--mn-faint);font:600 10px var(--mn-code);margin-left:4px}.IIa07q_runtimeFilterQuery{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;align-items:center;gap:7px;width:min(320px,42%);min-width:210px;padding:0 9px;display:flex}.IIa07q_runtimeFilterQuery>span{color:var(--mn-faint)}.IIa07q_runtimeFilterQuery input{width:100%;min-width:0;height:32px;color:var(--mn-text);background:0 0;border:0;outline:0}.IIa07q_runtimeUnifiedList{background:color-mix(in srgb, var(--mn-layer-2) 30%, var(--mn-layer-1));grid-template-columns:1fr;gap:8px;padding:10px;display:grid}.IIa07q_runtimeEntryBadges{flex-wrap:wrap;align-items:center;gap:5px;display:flex}.IIa07q_runtimeEntryMeta .IIa07q_runtimeEntryTarget{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 8%, var(--mn-layer-2));font-family:var(--mn-code)}.IIa07q_runtimeTarget{min-width:0;overflow:hidden}.IIa07q_runtimeTargetHeader{justify-content:space-between;align-items:center;gap:14px;padding:14px 15px 9px;display:flex}.IIa07q_runtimeTargetHeader>div{gap:1px;display:grid}.IIa07q_runtimeTargetHeader span{color:var(--mn-faint);font:650 9px var(--mn-code);letter-spacing:.08em}.IIa07q_runtimeTargetHeader h3{margin:0;font-size:15px}.IIa07q_runtimeTargetHeader>strong{min-width:28px;height:28px;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 11px var(--mn-code);border-radius:8px;place-items:center;display:grid}.IIa07q_capacityLine{align-items:center;gap:9px;padding:0 15px;display:flex}.IIa07q_capacityLine>div{background:var(--mn-layer-2);border-radius:999px;flex:1;height:4px;overflow:hidden}.IIa07q_capacityLine i{border-radius:inherit;background:var(--mn-success);height:100%;transition:width .25s;display:block}.IIa07q_capacityLine>span{min-width:88px;color:var(--mn-faint);font:9px var(--mn-code);text-align:right}.IIa07q_runtimeTargetDescription{min-height:31px;color:var(--mn-muted);margin:8px 15px 12px;font-size:10px}.IIa07q_runtimeEntries{border-top:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 36%, var(--mn-layer-1));gap:7px;padding:10px;display:grid}.IIa07q_runtimeEntry{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:9px;padding:11px;position:relative}.IIa07q_runtimeEntry:before{content:\"\";background:var(--mn-muted);border-radius:0 2px 2px 0;width:2px;position:absolute;top:12px;bottom:12px;left:-1px}.IIa07q_runtimeEntry[data-importance=critical]:before{background:var(--mn-danger)}.IIa07q_runtimeEntry[data-importance=low]:before{background:var(--mn-faint);opacity:.45}.IIa07q_runtimeEntryMeta{justify-content:space-between;align-items:center;gap:12px;display:flex}.IIa07q_runtimeEntryMeta>span{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:999px;padding:2px 6px;font-size:9px}.IIa07q_runtimeEntry[data-importance=critical] .IIa07q_runtimeEntryMeta>span{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent)}.IIa07q_runtimeEntryMeta time{color:var(--mn-faint);font:8px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_runtimeEntry>p{white-space:pre-wrap;overflow-wrap:anywhere;min-height:42px;margin:9px 0;font-size:12px;line-height:1.6}.IIa07q_runtimeEntry>select{margin-top:7px}.IIa07q_runtimeEntry footer{border-top:1px solid var(--mn-line);justify-content:flex-end;align-items:center;gap:4px;min-height:30px;margin-top:7px;padding-top:7px;display:flex}.IIa07q_runtimeEntry footer>span{color:var(--mn-danger);margin-right:auto;font-size:10px}.IIa07q_runtimeEmpty{min-height:126px;color:var(--mn-faint);text-align:center;align-content:center;place-items:center;gap:5px;display:grid}.IIa07q_runtimeEmpty>span{font:24px var(--mn-code);opacity:.65}.IIa07q_runtimeEmpty p{margin:0;font-size:10px}.IIa07q_runtimeFootnote{color:var(--mn-faint);margin:10px 2px 0;font-size:9px}.IIa07q_documentSummary{grid-template-columns:.7fr .7fr 1.6fr;gap:9px;margin-bottom:12px;display:grid}.IIa07q_documentSummary article{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0;min-height:91px;padding:13px 14px}.IIa07q_documentSummary article>span{color:var(--mn-faint);font-size:9px;display:block}.IIa07q_documentSummary article>strong{font:650 21px/1 var(--mn-code);margin:7px 0 4px;display:block}.IIa07q_documentSummary article>small{color:var(--mn-muted);font-size:9px}.IIa07q_documentCapacity>div{background:var(--mn-layer-2);border-radius:999px;height:4px;margin:7px 0 6px;overflow:hidden}.IIa07q_documentCapacity>div i{border-radius:inherit;background:var(--mn-accent);height:100%;transition:width .3s;display:block}.IIa07q_documentToolbar{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;align-items:center;gap:9px;margin-bottom:12px;padding:9px;display:flex}.IIa07q_documentToolbar form{flex:1;grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:5px;min-width:260px;padding-left:8px;display:grid}.IIa07q_documentToolbar form>span{color:var(--mn-faint);font:15px var(--mn-code)}.IIa07q_documentToolbar input,.IIa07q_documentEditor input,.IIa07q_documentEditor textarea{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;width:100%;padding:8px 10px}.IIa07q_documentToolbar input{background:0 0;border-color:#0000;height:34px}.IIa07q_documentToolbar input:focus,.IIa07q_documentEditor input:focus,.IIa07q_documentEditor textarea:focus{border-color:var(--mn-accent)}.IIa07q_documentToolbar>div{border:1px solid var(--mn-line);background:var(--mn-layer-2);border-radius:8px;align-items:center;gap:3px;padding:3px;display:flex}.IIa07q_documentToolbar>div button{min-height:32px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:0 10px;font-size:10.5px}.IIa07q_documentToolbar>div button[data-active]{color:var(--mn-text);background:var(--mn-layer-1);box-shadow:0 1px 3px color-mix(in srgb, var(--mn-text) 8%, transparent)}.IIa07q_documentToolbar>div b{color:var(--mn-faint);font:600 9px var(--mn-code);margin-left:4px}.IIa07q_documentWorkspace{grid-template-columns:minmax(250px,310px) minmax(0,1fr);gap:10px;min-height:590px;display:grid}.IIa07q_documentList,.IIa07q_documentReader{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0;overflow:hidden}.IIa07q_documentList{align-self:stretch}.IIa07q_documentList>header{border-bottom:1px solid var(--mn-line);min-height:42px;color:var(--mn-faint);justify-content:space-between;align-items:center;padding:0 12px;font-size:9px;display:flex}.IIa07q_documentList>header code{color:var(--mn-accent)}.IIa07q_documentList>button{border:0;border-bottom:1px solid var(--mn-line);width:100%;color:var(--mn-text);text-align:left;cursor:pointer;background:0 0;padding:12px;transition:background-color .15s,box-shadow .15s;display:block}.IIa07q_documentList>button:hover{background:var(--mn-hover)}.IIa07q_documentList>button[data-selected]{background:color-mix(in srgb, var(--mn-accent) 7%, var(--mn-layer-1));box-shadow:inset 2px 0 var(--mn-accent)}.IIa07q_documentList>button>div{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.IIa07q_documentList>button strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.IIa07q_documentList>button time{color:var(--mn-faint);font:8px var(--mn-code);flex:none}.IIa07q_documentList>button p{min-height:30px;color:var(--mn-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:6px 0 9px;font-size:10px;line-height:1.5;display:-webkit-box;overflow:hidden}.IIa07q_documentList>button footer{color:var(--mn-faint);align-items:center;gap:8px;font-size:9px;display:flex}.IIa07q_documentList>button footer code{margin-left:auto}.IIa07q_documentList>button footer em{color:var(--mn-danger);font-style:normal}.IIa07q_documentListEmpty{min-height:230px;color:var(--mn-muted);text-align:center;align-content:center;place-items:center;gap:4px;padding:22px;display:grid}.IIa07q_documentListEmpty>span{color:var(--mn-accent);font:28px var(--mn-code);opacity:.6;margin-bottom:6px}.IIa07q_documentListEmpty p{color:var(--mn-faint);margin:0;font-size:10px}.IIa07q_documentReader{padding:clamp(16px,2vw,22px)}.IIa07q_documentReader>.IIa07q_emptyState{background:0 0;border:0;height:100%}.IIa07q_documentDetail>header{border-bottom:1px solid var(--mn-line);justify-content:space-between;align-items:flex-start;gap:18px;padding-bottom:15px;display:flex}.IIa07q_documentDetail>header span{color:var(--mn-accent);font:650 9px var(--mn-code);letter-spacing:.08em;text-transform:uppercase}.IIa07q_documentDetail>header h3{margin:5px 0 3px;font-size:18px}.IIa07q_documentDetail>header p{color:var(--mn-muted);margin:0;font-size:11px}.IIa07q_documentDetail>dl{border-top:1px solid var(--mn-line);border-left:1px solid var(--mn-line);grid-template-columns:2fr .45fr .8fr .55fr;margin:13px 0;display:grid}.IIa07q_documentDetail>dl>div{border-right:1px solid var(--mn-line);border-bottom:1px solid var(--mn-line);min-width:0;padding:8px 9px}.IIa07q_documentDetail dt{color:var(--mn-faint);margin-bottom:3px;font-size:8px}.IIa07q_documentDetail dd{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:9px;overflow:hidden}.IIa07q_documentSources{flex-wrap:wrap;align-items:center;gap:5px;margin:11px 0;display:flex}.IIa07q_documentSources>span{color:var(--mn-faint);margin-right:4px;font-size:9px}.IIa07q_documentSources code,.IIa07q_documentArchiveReceipt code{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:5px;padding:3px 6px;font-size:8px}.IIa07q_markdownBody{overflow-wrap:anywhere;border:1px solid var(--mn-line);min-height:310px;color:var(--mn-text);background:color-mix(in srgb, var(--mn-layer-2) 30%, var(--mn-layer-1));border-radius:10px;margin:16px 0 0;padding:clamp(18px,2.5vw,28px);font-size:13px;line-height:1.78}.IIa07q_markdownBody>:first-child{margin-top:0}.IIa07q_markdownBody>:last-child{margin-bottom:0}.IIa07q_markdownBody h1,.IIa07q_markdownBody h2,.IIa07q_markdownBody h3,.IIa07q_markdownBody h4{color:var(--mn-text);letter-spacing:-.015em;margin:1.55em 0 .65em;line-height:1.3}.IIa07q_markdownBody h1{border-bottom:1px solid var(--mn-line);padding-bottom:.35em;font-size:1.75em}.IIa07q_markdownBody h2{border-bottom:1px solid var(--mn-line);padding-bottom:.3em;font-size:1.42em}.IIa07q_markdownBody h3{font-size:1.18em}.IIa07q_markdownBody p,.IIa07q_markdownBody ul,.IIa07q_markdownBody ol,.IIa07q_markdownBody blockquote,.IIa07q_markdownBody table,.IIa07q_markdownBody pre{margin:.85em 0}.IIa07q_markdownBody ul,.IIa07q_markdownBody ol{padding-left:1.6em}.IIa07q_markdownBody li+li{margin-top:.3em}.IIa07q_markdownBody blockquote{border-left:3px solid var(--mn-accent);color:var(--mn-muted);background:color-mix(in srgb, var(--mn-accent) 4%, transparent);margin-inline:0;padding:.15em 1em}.IIa07q_markdownBody code{color:var(--mn-text);background:var(--mn-layer-2);font:.88em/1.55 var(--mn-code);border-radius:5px;padding:.15em .38em}.IIa07q_markdownBody pre{border:1px solid var(--mn-line);background:var(--mn-layer-2);border-radius:9px;max-width:100%;padding:14px 16px;overflow:auto}.IIa07q_markdownBody pre code{background:0 0;padding:0;font-size:11px}.IIa07q_markdownBody a{color:var(--mn-accent);text-underline-offset:3px;text-decoration-thickness:1px}.IIa07q_markdownBody hr{border:0;border-top:1px solid var(--mn-line);margin:1.8em 0}.IIa07q_markdownBody table{border-collapse:collapse;max-width:100%;display:block;overflow-x:auto}.IIa07q_markdownBody th,.IIa07q_markdownBody td{border:1px solid var(--mn-line);text-align:left;vertical-align:top;padding:8px 10px}.IIa07q_markdownBody th{background:var(--mn-layer-2);font-weight:600}.IIa07q_markdownBody img{border-radius:8px;max-width:100%;height:auto}.IIa07q_documentArchiveReceipt{border:1px solid color-mix(in srgb, var(--mn-success) 28%, var(--mn-line));background:color-mix(in srgb, var(--mn-success) 5%, transparent);border-radius:9px;margin:12px 0;padding:11px 12px}.IIa07q_documentArchiveReceipt p{color:var(--mn-muted);margin:4px 0 8px;font-size:10px}.IIa07q_documentArchiveReceipt div{flex-wrap:wrap;gap:5px;display:flex}.IIa07q_documentDanger{border-top:1px solid var(--mn-line);justify-content:flex-end;align-items:center;gap:7px;min-height:57px;margin-top:13px;padding-top:12px;display:flex}.IIa07q_documentDanger>div{margin-right:auto}.IIa07q_documentDanger strong{font-size:11px;display:block}.IIa07q_documentDanger p{color:var(--mn-faint);margin:2px 0 0;font-size:9px}.IIa07q_documentDanger>span{color:var(--mn-danger);margin-right:auto;font-size:10px}.IIa07q_documentEditor{border:1px solid var(--mn-line);background:linear-gradient(135deg, color-mix(in srgb, var(--mn-accent) 5%, var(--mn-layer-1)), var(--mn-layer-1) 55%);border-radius:11px;margin-bottom:12px;padding:15px}.IIa07q_documentReader>.IIa07q_documentEditor{background:0 0;border:0;margin:0;padding:0}.IIa07q_documentEditor>header{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:12px;display:flex}.IIa07q_documentEditor h3{margin:0;font-size:14px}.IIa07q_documentEditor header p{color:var(--mn-muted);margin:2px 0 0;font-size:10px}.IIa07q_documentEditor header>span,.IIa07q_documentEditor header>code{color:var(--mn-accent);font:650 9px var(--mn-code)}.IIa07q_documentEditor label{color:var(--mn-faint);gap:4px;margin-top:9px;font-size:9px;display:grid}.IIa07q_documentEditor textarea{resize:vertical;line-height:1.65}.IIa07q_documentEditorMeta{grid-template-columns:.8fr 1.2fr;gap:9px;display:grid}.IIa07q_documentEditorMeta label{margin:0}.IIa07q_documentEditor footer{justify-content:flex-end;gap:7px;margin-top:11px;display:flex}.IIa07q_writebackLayout{grid-template-columns:minmax(220px,280px) minmax(0,1fr);align-items:start;gap:15px;display:grid}.IIa07q_writeGuide,.IIa07q_supervisedComposer{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px}.IIa07q_writeGuide{padding:17px}.IIa07q_writeGuide h3{margin:5px 0 15px;font-size:15px}.IIa07q_writeGuide ol{counter-reset:gate;gap:13px;margin:0;padding:0;list-style:none;display:grid}.IIa07q_writeGuide li{counter-increment:gate;grid-template-columns:22px minmax(0,1fr);column-gap:7px;display:grid}.IIa07q_writeGuide li:before{content:\"0\" counter(gate);color:var(--mn-accent);font:10px var(--mn-code);grid-row:span 2}.IIa07q_writeGuide li strong{font-size:12px}.IIa07q_writeGuide li span,.IIa07q_writeGuide p{color:var(--mn-faint);font-size:10px}.IIa07q_writeGuide p{border-top:1px solid var(--mn-line);margin:17px 0 0;padding-top:13px}.IIa07q_supervisedComposer{overflow:hidden}.IIa07q_supervisedForm{padding:18px}.IIa07q_supervisedHeading{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.IIa07q_supervisedHeading h3{margin:4px 0 0;font-size:17px}.IIa07q_sessionReady,.IIa07q_sessionMissing{font:650 9px var(--mn-code);border-radius:999px;padding:4px 8px}.IIa07q_sessionReady{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 10%, transparent)}.IIa07q_sessionMissing{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 10%, transparent)}.IIa07q_supervisedForm textarea{resize:vertical;border:1px solid var(--mn-line);width:100%;color:var(--mn-text);background:var(--mn-input);border-radius:9px;outline:0;padding:12px;line-height:1.65}.IIa07q_sessionHint{color:var(--mn-danger);margin:9px 0 0;font-size:11px}.IIa07q_formGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:13px;display:grid}.IIa07q_fieldWide{grid-column:1/-1}.IIa07q_formGrid select,.IIa07q_formGrid input{width:100%;min-width:0}.IIa07q_formActions{align-items:center;gap:12px;margin-top:15px;display:flex}.IIa07q_formActions span{color:var(--mn-muted);font-size:11px}.IIa07q_advancedWrite{border-top:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 45%, var(--mn-layer-1))}.IIa07q_advancedWrite summary{cursor:pointer;justify-content:space-between;align-items:center;gap:16px;min-height:58px;padding:10px 18px;list-style:none;display:flex}.IIa07q_advancedWrite summary::-webkit-details-marker{display:none}.IIa07q_advancedWrite summary>span:first-child{gap:2px;display:grid}.IIa07q_advancedWrite summary strong{font-size:12px}.IIa07q_advancedWrite summary small{color:var(--mn-faint);font-size:10px}.IIa07q_advancedWrite summary>span:last-child{color:var(--mn-accent);font:10px var(--mn-code)}.IIa07q_advancedWrite[open] summary{border-bottom:1px solid var(--mn-line)}.IIa07q_advancedWrite[open] summary>span:last-child{font-size:0}.IIa07q_advancedWrite[open] summary>span:last-child:after{content:\"−\";font-size:13px}.IIa07q_manualForm{padding:3px 18px 18px}.IIa07q_manualActions{justify-content:space-between;align-items:center;gap:14px;margin-top:15px;display:flex}.IIa07q_manualActions p{max-width:520px;color:var(--mn-faint);margin:0;font-size:10px}.IIa07q_listToolbar{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;grid-template-columns:minmax(0,1fr) 170px auto;gap:9px;padding:12px;display:grid}.IIa07q_listToolbar input,.IIa07q_listToolbar select{width:100%;min-width:0}.IIa07q_listNotice{color:var(--mn-faint);margin:10px 0 16px;font-size:10px}.IIa07q_listNotice span{color:var(--mn-success);font:650 9px var(--mn-code);letter-spacing:.08em;margin-right:7px}.IIa07q_memoryList{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:9px;display:grid}.IIa07q_memoryList .IIa07q_insightCard{height:100%;margin:0}.IIa07q_listProgress{border-top:1px solid var(--mn-line);min-height:58px;color:var(--mn-faint);justify-content:center;align-items:center;gap:13px;margin-top:12px;padding:10px;font-size:10px;display:flex}.IIa07q_compactListProgress{border-top:1px solid var(--mn-line);color:var(--mn-faint);text-align:center;justify-items:stretch;gap:7px;margin-top:8px;padding:10px 2px 2px;font-size:10px;display:grid}.IIa07q_compactListProgress button{width:100%}.IIa07q_modalBackdrop{z-index:1300;background:#0206178a;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.IIa07q_modal{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:14px;flex-direction:column;width:min(680px,100vw - 48px);max-height:calc(100vh - 96px);display:flex;overflow:hidden;box-shadow:0 22px 60px #02061738}.IIa07q_modal>header{border-bottom:1px solid var(--mn-line);flex:none;justify-content:space-between;align-items:flex-start;gap:18px;padding:15px 18px;display:flex}.IIa07q_modal>header h2{margin:0;font-size:15px;line-height:22px}.IIa07q_modal>header p{max-width:64ch;color:var(--mn-muted);margin:3px 0 0;font-size:12px;line-height:1.5}.IIa07q_modal>div:last-child{min-height:0;padding:18px;overflow-y:auto}.IIa07q_healthStrip{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:13px;display:grid;overflow:hidden}.IIa07q_healthStrip article{box-sizing:border-box;border-right:1px solid var(--mn-line);align-items:flex-start;gap:10px;min-width:0;min-height:78px;padding:14px 15px;display:flex}.IIa07q_healthStrip article>div{min-width:0}.IIa07q_healthStrip article:last-child{border-right:0}.IIa07q_healthStrip small{color:var(--mn-faint);font:650 10px var(--mn-code);letter-spacing:.06em;margin-bottom:4px;display:block}.IIa07q_healthStrip strong{text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;display:block;overflow:hidden}.IIa07q_healthStrip p{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;margin:3px 0 0;font-size:10.5px;overflow:hidden}.IIa07q_healthIndicator{width:7px;height:7px;box-shadow:0 0 0 4px color-mix(in srgb, currentColor 9%, transparent);border-radius:50%;flex:none;margin-top:3px}.IIa07q_healthGood{color:var(--mn-success);background:currentColor}.IIa07q_healthBad{color:var(--mn-danger);background:currentColor}.IIa07q_healthMuted{color:var(--mn-faint);background:currentColor}.IIa07q_storageDomains{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;margin-bottom:13px;padding:16px}.IIa07q_storageRoot{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 45%, transparent);border-radius:9px;justify-content:space-between;align-items:center;gap:18px;min-width:0;margin-top:12px;padding:11px 12px;display:flex}.IIa07q_storageRoot>div:first-child{gap:4px;min-width:0;display:grid}.IIa07q_storageRoot span,.IIa07q_storageRoot small{color:var(--mn-faint);font-size:9px}.IIa07q_storageRoot code{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.IIa07q_storageRoot>div:last-child{flex:none;justify-items:end;gap:3px;display:grid}.IIa07q_storageRoot strong{font:650 11px var(--mn-code)}.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:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 30%, var(--mn-layer-1));border-radius:9px;flex-direction:column;min-width:0;min-height:150px;padding:12px;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:7px;min-width:0;display:flex}.IIa07q_storageAreaGrid article>header span{background:var(--mn-faint);border-radius:50%;flex:none;width:6px;height:6px}.IIa07q_storageAreaGrid article[data-status=ready]>header span{background:var(--mn-success);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 9%, transparent)}.IIa07q_storageAreaGrid article[data-status=invalid]>header span{background:var(--mn-danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-danger) 9%, transparent)}.IIa07q_storageAreaGrid article>header strong{text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.IIa07q_storageAreaGrid article>header em{color:var(--mn-faint);font:normal 8px var(--mn-code);white-space:nowrap}.IIa07q_storageAreaMetric{align-items:baseline;gap:5px;margin-top:14px;display:flex}.IIa07q_storageAreaMetric strong{font:650 20px var(--mn-code)}.IIa07q_storageAreaMetric span{color:var(--mn-faint);font-size:9px}.IIa07q_storageAreaMetric code{color:var(--mn-muted);margin-left:auto;font-size:9px}.IIa07q_storageAreaGrid article>p{min-height:28px;color:var(--mn-muted);margin:8px 0;font-size:9px;line-height:1.5}.IIa07q_storagePath{border-top:1px solid var(--mn-line);color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:auto;padding-top:8px;font-size:8px;display:block;overflow:hidden}.IIa07q_storageAreaGrid article>small{color:var(--mn-danger);margin-top:6px;font-size:8px;line-height:1.4;display:block}.IIa07q_storageUnavailable{border:1px dashed var(--mn-line);min-height:126px;color:var(--mn-muted);text-align:center;border-radius:9px;place-content:center;gap:5px;margin-top:12px;display:grid}.IIa07q_storageUnavailable strong{font-size:12px}.IIa07q_storageUnavailable p{max-width:520px;color:var(--mn-faint);margin:0;font-size:10px}.IIa07q_storageFootnote{color:var(--mn-faint);margin:11px 0 0;font-size:9px;line-height:1.5}.IIa07q_statusSectionHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_statusSectionHeader h3{margin:4px 0 0;font-size:15px}.IIa07q_statusSectionHeader p{max-width:590px;color:var(--mn-muted);margin:5px 0 0;font-size:10px}.IIa07q_phaseBadge{border:1px solid color-mix(in srgb, var(--mn-accent) 25%, var(--mn-line));color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 7%, transparent);font:650 9px var(--mn-code);border-radius:999px;padding:4px 8px}.IIa07q_statusHeaderActions{align-items:center;gap:8px;display:flex}.IIa07q_versionDialogBody{gap:12px;display:grid}.IIa07q_versionChecking{min-height:112px;color:var(--mn-muted);justify-content:center;align-items:center;gap:10px;font-size:12px;display:flex}.IIa07q_versionChecking span{border:2px solid var(--mn-line);border-top-color:var(--mn-accent);border-radius:50%;width:14px;height:14px;animation:.8s linear infinite IIa07q_mnemon-spin}@keyframes IIa07q_mnemon-spin{to{transform:rotate(360deg)}}.IIa07q_versionError,.IIa07q_versionResult{border:1px solid color-mix(in srgb, var(--mn-danger) 28%, var(--mn-line));color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 6%, transparent);border-radius:9px;padding:11px 12px}.IIa07q_versionResult{border-color:color-mix(in srgb, var(--mn-success) 28%, var(--mn-line));color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 6%, transparent)}.IIa07q_versionError strong,.IIa07q_versionResult strong{font-size:12px}.IIa07q_versionError p,.IIa07q_versionResult p{color:var(--mn-muted);margin:3px 0 0;font-size:11px;line-height:1.5}.IIa07q_versionList{gap:9px;display:grid}.IIa07q_versionList article{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 34%, var(--mn-layer-1));border-radius:10px;padding:13px}.IIa07q_versionList article[data-outdated]{border-color:color-mix(in srgb, var(--mn-accent) 30%, var(--mn-line))}.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:13px}.IIa07q_versionList article>header span{border:1px solid var(--mn-line);color:var(--mn-muted);font:500 9px var(--mn-code);border-radius:999px;padding:3px 7px}.IIa07q_versionList article>header em{color:var(--mn-success);font:normal 10px var(--mn-code);white-space:nowrap}.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:13px;display:grid}.IIa07q_versionNumbers>div{gap:3px;display:grid}.IIa07q_versionNumbers small{color:var(--mn-faint);font-size:9px}.IIa07q_versionNumbers code{font-size:12px}.IIa07q_versionNumbers>span{color:var(--mn-faint);padding-bottom:1px}.IIa07q_versionLocation{min-width:0;color:var(--mn-faint);gap:6px;margin-top:9px;font-size:9px;display:flex}.IIa07q_versionLocation>span{flex:none}.IIa07q_versionLocation>code{min-width:0;color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:inherit;overflow:hidden}.IIa07q_versionList article>footer{border-top:1px 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:10.5px;line-height:1.5}.IIa07q_versionList article>footer button{flex:none}.IIa07q_versionDialogActions{justify-content:space-between;align-items:center;gap:12px;padding-top:2px;display:flex}.IIa07q_versionDialogActions>span{color:var(--mn-faint);font-size:9px}.IIa07q_versionDialogActions>div{gap:8px;display:flex}@media (width<=1000px){.IIa07q_graphLayout{display:block;position:relative}.IIa07q_graphInspector{width:auto;min-height:0;box-shadow:none;margin-top:10px;position:static;overflow:visible}.IIa07q_graphInspector[data-empty]{display:none}.IIa07q_resultLayout{grid-template-columns:1fr}.IIa07q_relatedPane{grid-row:1;max-height:none;position:static}.IIa07q_memoryList{grid-template-columns:1fr}.IIa07q_storageAreaGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.IIa07q_runtimeGrid,.IIa07q_runtimeSummaryGrid{grid-template-columns:1fr}.IIa07q_documentWorkspace{grid-template-columns:minmax(220px,270px) minmax(0,1fr)}.IIa07q_documentDetail>dl{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.IIa07q_shell{min-height:0;overflow:hidden}.IIa07q_masthead{grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;min-height:76px;padding:10px 14px}.IIa07q_brandLogo{width:36px;height:36px}.IIa07q_headerActions{max-width:52vw}.IIa07q_workspacePicker>span{display:none}.IIa07q_workspacePicker select{width:min(170px,32vw)}.IIa07q_statusCluster>span:not(.IIa07q_statusDot){display:none}.IIa07q_modalBackdrop{padding:12px}.IIa07q_modal{width:calc(100vw - 24px);max-height:calc(100vh - 24px)}.IIa07q_versionList article>footer,.IIa07q_versionDialogActions{flex-direction:column;align-items:stretch}.IIa07q_versionDialogActions>div{justify-content:flex-end}.IIa07q_telemetry{border-top:1px solid var(--mn-line);grid-column:1/-1;justify-content:space-between;padding-top:8px}.IIa07q_telemetryMetric{text-align:center;flex:1;justify-items:center;gap:3px;min-width:0;padding:0 5px}.IIa07q_telemetryMetric:first-child{border-left:0}.IIa07q_topNavigation{padding:0 10px;position:relative}.IIa07q_topNavigation:after{z-index:2;pointer-events:none;content:\"›\";width:34px;color:var(--mn-faint);background:linear-gradient(90deg, transparent, var(--mn-layer-1) 72%);font:16px var(--mn-code);place-items:center end;padding-right:5px;display:grid;position:absolute;top:0;bottom:0;right:0}.IIa07q_nav{flex:1;padding-right:26px;scroll-padding-inline:10px 34px}.IIa07q_navGroup{gap:3px}.IIa07q_navGroupDivider{height:18px}.IIa07q_nav button{text-align:center;flex-direction:column;justify-content:center;gap:3px;min-width:60px;padding:4px 3px}.IIa07q_spaceSummary{display:none}.IIa07q_navGlyph{line-height:1}.IIa07q_page{padding:18px 13px calc(170px + env(safe-area-inset-bottom,0px))}.IIa07q_pageHeader{gap:10px;display:grid}.IIa07q_pageHeaderMeta{justify-content:space-between}.IIa07q_entityLayout,.IIa07q_writebackLayout{grid-template-columns:1fr}.IIa07q_runtimeComposerHeading,.IIa07q_runtimeComposerActions{flex-direction:column;align-items:stretch}.IIa07q_runtimeComposerActions select,.IIa07q_runtimeComposerActions button{width:100%}.IIa07q_runtimeBrowserToolbar{flex-direction:column;align-items:stretch}.IIa07q_runtimeFilterQuery{width:100%;min-width:0}.IIa07q_documentSummary{grid-template-columns:repeat(2,minmax(0,1fr))}.IIa07q_documentCapacity{grid-column:1/-1}.IIa07q_documentToolbar{flex-direction:column;align-items:stretch}.IIa07q_documentToolbar form{min-width:0}.IIa07q_documentToolbar>div,.IIa07q_documentToolbar>button{width:100%}.IIa07q_documentToolbar>div button{flex:1}.IIa07q_documentWorkspace{grid-template-columns:1fr;min-height:0}.IIa07q_documentList{-webkit-overflow-scrolling:touch;max-height:330px;overflow:auto}.IIa07q_documentReader{min-height:430px}.IIa07q_documentEditorMeta{grid-template-columns:1fr}.IIa07q_manualActions{flex-direction:column;align-items:stretch}.IIa07q_entityRail{position:static}.IIa07q_searchControls{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.IIa07q_searchActions{grid-column:1/-1}.IIa07q_searchActions>button{flex:1}.IIa07q_searchControls select{width:100%;min-width:0}.IIa07q_listToolbar{grid-template-columns:1fr}.IIa07q_bodyDirectoryHeader{display:grid}.IIa07q_bodyCreate form{grid-template-columns:1fr}.IIa07q_graphViewport{min-height:360px}.IIa07q_graphSvg{height:390px}.IIa07q_graphCanvasControls{top:7px;right:7px}.IIa07q_graphCanvasControls span{display:none}.IIa07q_previewOverlay{padding:10px;padding-bottom:calc(10px + env(safe-area-inset-bottom,0px))}.IIa07q_previewDialog{max-height:min(84dvh,640px)}.IIa07q_healthStrip{grid-template-columns:1fr}.IIa07q_storageRoot{flex-direction:column;align-items:flex-start}.IIa07q_storageRoot>div:last-child{justify-items:start}.IIa07q_storageAreaGrid{grid-template-columns:1fr}.IIa07q_flowLegend span:last-child{width:100%;margin-left:0}.IIa07q_healthStrip article{border-right:0;border-bottom:1px solid var(--mn-line)}.IIa07q_healthStrip article:last-child{border-bottom:0}.IIa07q_workspaceMismatch{flex-direction:column;align-items:stretch;margin-inline:13px}.IIa07q_workspaceMismatch>button{align-self:flex-start}}@media (width<=520px){.IIa07q_masthead{min-height:68px}.IIa07q_brand h1{font-size:16px}.IIa07q_headerActions{max-width:58vw}.IIa07q_workspacePicker select{width:min(150px,39vw)}.IIa07q_telemetryMetric span{font-size:10px}.IIa07q_nav{scroll-snap-type:x proximity}.IIa07q_nav button{scroll-snap-align:start;min-width:68px}.IIa07q_pageHeader h2{font-size:19px}.IIa07q_pageHeaderMeta{flex-wrap:wrap;align-items:stretch}.IIa07q_pageHeaderMeta>code{align-items:center;min-height:34px;display:flex}.IIa07q_pageHeaderMeta>button{flex:1}.IIa07q_emptyState{text-align:center;flex-direction:column;gap:14px;min-height:190px;padding:24px 18px}.IIa07q_emptyGlyph{width:62px;height:62px}.IIa07q_documentDetail>header,.IIa07q_documentDanger,.IIa07q_supervisedHeading,.IIa07q_cardTop{flex-direction:column;align-items:flex-start}.IIa07q_documentDetail>header>div:last-child,.IIa07q_documentDetail>header button{width:100%}.IIa07q_documentDanger>div,.IIa07q_documentDanger>span{margin-right:0}.IIa07q_documentDanger>button{width:100%}.IIa07q_documentDetail>dl{grid-template-columns:1fr}.IIa07q_markdownBody{padding:16px;font-size:12.5px}.IIa07q_cardActions,.IIa07q_confirmBar{flex-wrap:wrap;align-items:stretch}.IIa07q_cardActions button{flex:1}.IIa07q_confirmBar>span{width:100%;margin:0 0 4px}.IIa07q_formActions{flex-direction:column;align-items:stretch}.IIa07q_formActions button{width:100%}.IIa07q_formGrid,.IIa07q_searchControls{grid-template-columns:1fr}}@media (width<=1000px) and (height<=760px){.IIa07q_shell{min-height:0}.IIa07q_masthead{min-height:58px}.IIa07q_telemetryMetric{min-width:0;padding:1px 9px}.IIa07q_topNavigation{min-height:44px}.IIa07q_nav button{min-height:42px}.IIa07q_graphViewport{min-height:300px}.IIa07q_graphSvg{height:300px}}@media (width<=760px) and (pointer:coarse){.IIa07q_shell input,.IIa07q_shell select,.IIa07q_shell textarea{font-size:16px!important}}@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_insightCard:hover{transform:none}.IIa07q_flowConnector[data-active] i:before{display:none}}"; + const tagId$3 = "dsh-mnemon/src/client/MnemonView.module.css"; if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) { const tag = document.createElement("style"); tag.dataset.plugin = "dsh-mnemon"; @@ -3195,212 +3195,212 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonView_module_css_default = { - "advancedWrite": "OkhtbG_advancedWrite", - "agentAnswer": "OkhtbG_agentAnswer", - "agentAnswerHeading": "OkhtbG_agentAnswerHeading", - "agentCitations": "OkhtbG_agentCitations", - "alert": "OkhtbG_alert", - "backButton": "OkhtbG_backButton", - "badge": "OkhtbG_badge", - "badges": "OkhtbG_badges", - "bodyCard": "OkhtbG_bodyCard", - "bodyCardActions": "OkhtbG_bodyCardActions", - "bodyCardTop": "OkhtbG_bodyCardTop", - "bodyCreate": "OkhtbG_bodyCreate", - "bodyDeleteConfirm": "OkhtbG_bodyDeleteConfirm", - "bodyDeleteContent": "OkhtbG_bodyDeleteContent", - "bodyDeleteSummary": "OkhtbG_bodyDeleteSummary", - "bodyDirectory": "OkhtbG_bodyDirectory", - "bodyDirectoryEmpty": "OkhtbG_bodyDirectoryEmpty", - "bodyDirectoryHeader": "OkhtbG_bodyDirectoryHeader", - "bodyDirectoryPath": "OkhtbG_bodyDirectoryPath", - "bodyEdit": "OkhtbG_bodyEdit", - "bodyEditActions": "OkhtbG_bodyEditActions", - "bodyEditButton": "OkhtbG_bodyEditButton", - "bodyGrid": "OkhtbG_bodyGrid", - "bodyHealth": "OkhtbG_bodyHealth", - "bodySignal": "OkhtbG_bodySignal", - "bodySwitch": "OkhtbG_bodySwitch", - "bodySwitchTrack": "OkhtbG_bodySwitchTrack", - "brand": "OkhtbG_brand", - "brandLogo": "OkhtbG_brandLogo", - "canvas": "OkhtbG_canvas", - "capacityLine": "OkhtbG_capacityLine", - "cardActions": "OkhtbG_cardActions", - "cardKicker": "OkhtbG_cardKicker", - "cardTop": "OkhtbG_cardTop", - "categoryChip": "OkhtbG_categoryChip", - "checking": "OkhtbG_checking", - "compactListProgress": "OkhtbG_compactListProgress", - "confirmBar": "OkhtbG_confirmBar", - "content": "OkhtbG_content", - "dangerButton": "OkhtbG_dangerButton", - "dangerSolidButton": "OkhtbG_dangerSolidButton", - "documentArchiveReceipt": "OkhtbG_documentArchiveReceipt", - "documentCapacity": "OkhtbG_documentCapacity", - "documentDanger": "OkhtbG_documentDanger", - "documentDetail": "OkhtbG_documentDetail", - "documentEditor": "OkhtbG_documentEditor", - "documentEditorMeta": "OkhtbG_documentEditorMeta", - "documentList": "OkhtbG_documentList", - "documentListEmpty": "OkhtbG_documentListEmpty", - "documentReader": "OkhtbG_documentReader", - "documentSources": "OkhtbG_documentSources", - "documentSummary": "OkhtbG_documentSummary", - "documentToolbar": "OkhtbG_documentToolbar", - "documentWorkspace": "OkhtbG_documentWorkspace", - "emptyGlyph": "OkhtbG_emptyGlyph", - "emptyState": "OkhtbG_emptyState", - "entities": "OkhtbG_entities", - "entityHeading": "OkhtbG_entityHeading", - "entityLayout": "OkhtbG_entityLayout", - "entityList": "OkhtbG_entityList", - "entityRail": "OkhtbG_entityRail", - "entityResults": "OkhtbG_entityResults", - "entitySearch": "OkhtbG_entitySearch", - "fieldWide": "OkhtbG_fieldWide", - "flowConnector": "OkhtbG_flowConnector", - "flowLegend": "OkhtbG_flowLegend", - "formActions": "OkhtbG_formActions", - "formGrid": "OkhtbG_formGrid", - "ghostButton": "OkhtbG_ghostButton", - "graphBackdrop": "OkhtbG_graphBackdrop", - "graphCanvasControls": "OkhtbG_graphCanvasControls", - "graphEdge": "OkhtbG_graphEdge", - "graphFooter": "OkhtbG_graphFooter", - "graphGridLine": "OkhtbG_graphGridLine", - "graphInspector": "OkhtbG_graphInspector", - "graphLayout": "OkhtbG_graphLayout", - "graphLegend": "OkhtbG_graphLegend", - "graphNode": "OkhtbG_graphNode", - "graphPanel": "OkhtbG_graphPanel", - "graphSvg": "OkhtbG_graphSvg", - "graphToolbar": "OkhtbG_graphToolbar", - "graphViewport": "OkhtbG_graphViewport", - "headerActions": "OkhtbG_headerActions", - "healthBad": "OkhtbG_healthBad", - "healthGood": "OkhtbG_healthGood", - "healthIndicator": "OkhtbG_healthIndicator", - "healthMuted": "OkhtbG_healthMuted", - "healthStrip": "OkhtbG_healthStrip", - "iconButton": "OkhtbG_iconButton", - "id": "OkhtbG_id", - "inlineError": "OkhtbG_inlineError", - "insightCard": "OkhtbG_insightCard", - "inspectorActions": "OkhtbG_inspectorActions", - "inspectorEmpty": "OkhtbG_inspectorEmpty", - "inspectorEye": "OkhtbG_inspectorEye", - "inspectorHeading": "OkhtbG_inspectorHeading", - "inspectorLogo": "OkhtbG_inspectorLogo", - "inspectorMeta": "OkhtbG_inspectorMeta", - "inspectorTitle": "OkhtbG_inspectorTitle", - "inspectorTitleRow": "OkhtbG_inspectorTitleRow", - "listNotice": "OkhtbG_listNotice", - "listProgress": "OkhtbG_listProgress", - "listToolbar": "OkhtbG_listToolbar", - "liveDot": "OkhtbG_liveDot", - "loading": "OkhtbG_loading", - "loadingPanel": "OkhtbG_loadingPanel", - "manualActions": "OkhtbG_manualActions", - "manualForm": "OkhtbG_manualForm", - "markdownBody": "OkhtbG_markdownBody", - "masthead": "OkhtbG_masthead", - "memoryList": "OkhtbG_memoryList", - "mnemon-spin": "OkhtbG_mnemon-spin", - "modal": "OkhtbG_modal", - "modalBackdrop": "OkhtbG_modalBackdrop", - "muted": "OkhtbG_muted", - "nav": "OkhtbG_nav", - "navGlyph": "OkhtbG_navGlyph", - "navGroup": "OkhtbG_navGroup", - "navGroupDivider": "OkhtbG_navGroupDivider", - "nodeBodyLabel": "OkhtbG_nodeBodyLabel", - "nodeCore": "OkhtbG_nodeCore", - "nodeHalo": "OkhtbG_nodeHalo", - "nodeLabel": "OkhtbG_nodeLabel", - "offline": "OkhtbG_offline", - "online": "OkhtbG_online", - "page": "OkhtbG_page", - "pageHeader": "OkhtbG_pageHeader", - "pageHeaderMeta": "OkhtbG_pageHeaderMeta", - "phaseBadge": "OkhtbG_phaseBadge", - "previewBody": "OkhtbG_previewBody", - "previewDialog": "OkhtbG_previewDialog", - "previewHeading": "OkhtbG_previewHeading", - "previewMeta": "OkhtbG_previewMeta", - "previewOverlay": "OkhtbG_previewOverlay", - "primaryButton": "OkhtbG_primaryButton", - "queryField": "OkhtbG_queryField", - "relatedPane": "OkhtbG_relatedPane", - "relatedSource": "OkhtbG_relatedSource", - "resultLayout": "OkhtbG_resultLayout", - "results": "OkhtbG_results", - "runtimeBrowser": "OkhtbG_runtimeBrowser", - "runtimeBrowserToolbar": "OkhtbG_runtimeBrowserToolbar", - "runtimeComposer": "OkhtbG_runtimeComposer", - "runtimeComposerActions": "OkhtbG_runtimeComposerActions", - "runtimeComposerHeading": "OkhtbG_runtimeComposerHeading", - "runtimeEmpty": "OkhtbG_runtimeEmpty", - "runtimeEntries": "OkhtbG_runtimeEntries", - "runtimeEntry": "OkhtbG_runtimeEntry", - "runtimeEntryBadges": "OkhtbG_runtimeEntryBadges", - "runtimeEntryMeta": "OkhtbG_runtimeEntryMeta", - "runtimeEntryTarget": "OkhtbG_runtimeEntryTarget", - "runtimeFilterQuery": "OkhtbG_runtimeFilterQuery", - "runtimeFootnote": "OkhtbG_runtimeFootnote", - "runtimeGrid": "OkhtbG_runtimeGrid", - "runtimeNotice": "OkhtbG_runtimeNotice", - "runtimeReadOnly": "OkhtbG_runtimeReadOnly", - "runtimeScopeFilter": "OkhtbG_runtimeScopeFilter", - "runtimeSummaryCard": "OkhtbG_runtimeSummaryCard", - "runtimeSummaryGrid": "OkhtbG_runtimeSummaryGrid", - "runtimeTarget": "OkhtbG_runtimeTarget", - "runtimeTargetDescription": "OkhtbG_runtimeTargetDescription", - "runtimeTargetHeader": "OkhtbG_runtimeTargetHeader", - "runtimeUnifiedList": "OkhtbG_runtimeUnifiedList", - "searchActions": "OkhtbG_searchActions", - "searchBar": "OkhtbG_searchBar", - "searchControls": "OkhtbG_searchControls", - "secondaryButton": "OkhtbG_secondaryButton", - "sectionHeading": "OkhtbG_sectionHeading", - "sessionHint": "OkhtbG_sessionHint", - "sessionMissing": "OkhtbG_sessionMissing", - "sessionReady": "OkhtbG_sessionReady", - "shell": "OkhtbG_shell", - "singleColumn": "OkhtbG_singleColumn", - "spaceSummary": "OkhtbG_spaceSummary", - "statusCluster": "OkhtbG_statusCluster", - "statusDot": "OkhtbG_statusDot", - "statusHeaderActions": "OkhtbG_statusHeaderActions", - "statusSectionHeader": "OkhtbG_statusSectionHeader", - "storageAreaGrid": "OkhtbG_storageAreaGrid", - "storageAreaMetric": "OkhtbG_storageAreaMetric", - "storageDomains": "OkhtbG_storageDomains", - "storageFootnote": "OkhtbG_storageFootnote", - "storageMode": "OkhtbG_storageMode", - "storagePath": "OkhtbG_storagePath", - "storageRoot": "OkhtbG_storageRoot", - "storageUnavailable": "OkhtbG_storageUnavailable", - "supervisedComposer": "OkhtbG_supervisedComposer", - "supervisedForm": "OkhtbG_supervisedForm", - "supervisedHeading": "OkhtbG_supervisedHeading", - "tags": "OkhtbG_tags", - "telemetry": "OkhtbG_telemetry", - "telemetryMetric": "OkhtbG_telemetryMetric", - "topNavigation": "OkhtbG_topNavigation", - "versionChecking": "OkhtbG_versionChecking", - "versionDialogActions": "OkhtbG_versionDialogActions", - "versionDialogBody": "OkhtbG_versionDialogBody", - "versionError": "OkhtbG_versionError", - "versionList": "OkhtbG_versionList", - "versionLocation": "OkhtbG_versionLocation", - "versionNumbers": "OkhtbG_versionNumbers", - "versionResult": "OkhtbG_versionResult", - "workspace": "OkhtbG_workspace", - "workspaceMismatch": "OkhtbG_workspaceMismatch", - "workspacePicker": "OkhtbG_workspacePicker", - "writeGuide": "OkhtbG_writeGuide", - "writebackLayout": "OkhtbG_writebackLayout" + "advancedWrite": "IIa07q_advancedWrite", + "agentAnswer": "IIa07q_agentAnswer", + "agentAnswerHeading": "IIa07q_agentAnswerHeading", + "agentCitations": "IIa07q_agentCitations", + "alert": "IIa07q_alert", + "backButton": "IIa07q_backButton", + "badge": "IIa07q_badge", + "badges": "IIa07q_badges", + "bodyCard": "IIa07q_bodyCard", + "bodyCardActions": "IIa07q_bodyCardActions", + "bodyCardTop": "IIa07q_bodyCardTop", + "bodyCreate": "IIa07q_bodyCreate", + "bodyDeleteConfirm": "IIa07q_bodyDeleteConfirm", + "bodyDeleteContent": "IIa07q_bodyDeleteContent", + "bodyDeleteSummary": "IIa07q_bodyDeleteSummary", + "bodyDirectory": "IIa07q_bodyDirectory", + "bodyDirectoryEmpty": "IIa07q_bodyDirectoryEmpty", + "bodyDirectoryHeader": "IIa07q_bodyDirectoryHeader", + "bodyDirectoryPath": "IIa07q_bodyDirectoryPath", + "bodyEdit": "IIa07q_bodyEdit", + "bodyEditActions": "IIa07q_bodyEditActions", + "bodyEditButton": "IIa07q_bodyEditButton", + "bodyGrid": "IIa07q_bodyGrid", + "bodyHealth": "IIa07q_bodyHealth", + "bodySignal": "IIa07q_bodySignal", + "bodySwitch": "IIa07q_bodySwitch", + "bodySwitchTrack": "IIa07q_bodySwitchTrack", + "brand": "IIa07q_brand", + "brandLogo": "IIa07q_brandLogo", + "canvas": "IIa07q_canvas", + "capacityLine": "IIa07q_capacityLine", + "cardActions": "IIa07q_cardActions", + "cardKicker": "IIa07q_cardKicker", + "cardTop": "IIa07q_cardTop", + "categoryChip": "IIa07q_categoryChip", + "checking": "IIa07q_checking", + "compactListProgress": "IIa07q_compactListProgress", + "confirmBar": "IIa07q_confirmBar", + "content": "IIa07q_content", + "dangerButton": "IIa07q_dangerButton", + "dangerSolidButton": "IIa07q_dangerSolidButton", + "documentArchiveReceipt": "IIa07q_documentArchiveReceipt", + "documentCapacity": "IIa07q_documentCapacity", + "documentDanger": "IIa07q_documentDanger", + "documentDetail": "IIa07q_documentDetail", + "documentEditor": "IIa07q_documentEditor", + "documentEditorMeta": "IIa07q_documentEditorMeta", + "documentList": "IIa07q_documentList", + "documentListEmpty": "IIa07q_documentListEmpty", + "documentReader": "IIa07q_documentReader", + "documentSources": "IIa07q_documentSources", + "documentSummary": "IIa07q_documentSummary", + "documentToolbar": "IIa07q_documentToolbar", + "documentWorkspace": "IIa07q_documentWorkspace", + "emptyGlyph": "IIa07q_emptyGlyph", + "emptyState": "IIa07q_emptyState", + "entities": "IIa07q_entities", + "entityHeading": "IIa07q_entityHeading", + "entityLayout": "IIa07q_entityLayout", + "entityList": "IIa07q_entityList", + "entityRail": "IIa07q_entityRail", + "entityResults": "IIa07q_entityResults", + "entitySearch": "IIa07q_entitySearch", + "fieldWide": "IIa07q_fieldWide", + "flowConnector": "IIa07q_flowConnector", + "flowLegend": "IIa07q_flowLegend", + "formActions": "IIa07q_formActions", + "formGrid": "IIa07q_formGrid", + "ghostButton": "IIa07q_ghostButton", + "graphBackdrop": "IIa07q_graphBackdrop", + "graphCanvasControls": "IIa07q_graphCanvasControls", + "graphEdge": "IIa07q_graphEdge", + "graphFooter": "IIa07q_graphFooter", + "graphGridLine": "IIa07q_graphGridLine", + "graphInspector": "IIa07q_graphInspector", + "graphLayout": "IIa07q_graphLayout", + "graphLegend": "IIa07q_graphLegend", + "graphNode": "IIa07q_graphNode", + "graphPanel": "IIa07q_graphPanel", + "graphSvg": "IIa07q_graphSvg", + "graphToolbar": "IIa07q_graphToolbar", + "graphViewport": "IIa07q_graphViewport", + "headerActions": "IIa07q_headerActions", + "healthBad": "IIa07q_healthBad", + "healthGood": "IIa07q_healthGood", + "healthIndicator": "IIa07q_healthIndicator", + "healthMuted": "IIa07q_healthMuted", + "healthStrip": "IIa07q_healthStrip", + "iconButton": "IIa07q_iconButton", + "id": "IIa07q_id", + "inlineError": "IIa07q_inlineError", + "insightCard": "IIa07q_insightCard", + "inspectorActions": "IIa07q_inspectorActions", + "inspectorEmpty": "IIa07q_inspectorEmpty", + "inspectorEye": "IIa07q_inspectorEye", + "inspectorHeading": "IIa07q_inspectorHeading", + "inspectorLogo": "IIa07q_inspectorLogo", + "inspectorMeta": "IIa07q_inspectorMeta", + "inspectorTitle": "IIa07q_inspectorTitle", + "inspectorTitleRow": "IIa07q_inspectorTitleRow", + "listNotice": "IIa07q_listNotice", + "listProgress": "IIa07q_listProgress", + "listToolbar": "IIa07q_listToolbar", + "liveDot": "IIa07q_liveDot", + "loading": "IIa07q_loading", + "loadingPanel": "IIa07q_loadingPanel", + "manualActions": "IIa07q_manualActions", + "manualForm": "IIa07q_manualForm", + "markdownBody": "IIa07q_markdownBody", + "masthead": "IIa07q_masthead", + "memoryList": "IIa07q_memoryList", + "mnemon-spin": "IIa07q_mnemon-spin", + "modal": "IIa07q_modal", + "modalBackdrop": "IIa07q_modalBackdrop", + "muted": "IIa07q_muted", + "nav": "IIa07q_nav", + "navGlyph": "IIa07q_navGlyph", + "navGroup": "IIa07q_navGroup", + "navGroupDivider": "IIa07q_navGroupDivider", + "nodeBodyLabel": "IIa07q_nodeBodyLabel", + "nodeCore": "IIa07q_nodeCore", + "nodeHalo": "IIa07q_nodeHalo", + "nodeLabel": "IIa07q_nodeLabel", + "offline": "IIa07q_offline", + "online": "IIa07q_online", + "page": "IIa07q_page", + "pageHeader": "IIa07q_pageHeader", + "pageHeaderMeta": "IIa07q_pageHeaderMeta", + "phaseBadge": "IIa07q_phaseBadge", + "previewBody": "IIa07q_previewBody", + "previewDialog": "IIa07q_previewDialog", + "previewHeading": "IIa07q_previewHeading", + "previewMeta": "IIa07q_previewMeta", + "previewOverlay": "IIa07q_previewOverlay", + "primaryButton": "IIa07q_primaryButton", + "queryField": "IIa07q_queryField", + "relatedPane": "IIa07q_relatedPane", + "relatedSource": "IIa07q_relatedSource", + "resultLayout": "IIa07q_resultLayout", + "results": "IIa07q_results", + "runtimeBrowser": "IIa07q_runtimeBrowser", + "runtimeBrowserToolbar": "IIa07q_runtimeBrowserToolbar", + "runtimeComposer": "IIa07q_runtimeComposer", + "runtimeComposerActions": "IIa07q_runtimeComposerActions", + "runtimeComposerHeading": "IIa07q_runtimeComposerHeading", + "runtimeEmpty": "IIa07q_runtimeEmpty", + "runtimeEntries": "IIa07q_runtimeEntries", + "runtimeEntry": "IIa07q_runtimeEntry", + "runtimeEntryBadges": "IIa07q_runtimeEntryBadges", + "runtimeEntryMeta": "IIa07q_runtimeEntryMeta", + "runtimeEntryTarget": "IIa07q_runtimeEntryTarget", + "runtimeFilterQuery": "IIa07q_runtimeFilterQuery", + "runtimeFootnote": "IIa07q_runtimeFootnote", + "runtimeGrid": "IIa07q_runtimeGrid", + "runtimeNotice": "IIa07q_runtimeNotice", + "runtimeReadOnly": "IIa07q_runtimeReadOnly", + "runtimeScopeFilter": "IIa07q_runtimeScopeFilter", + "runtimeSummaryCard": "IIa07q_runtimeSummaryCard", + "runtimeSummaryGrid": "IIa07q_runtimeSummaryGrid", + "runtimeTarget": "IIa07q_runtimeTarget", + "runtimeTargetDescription": "IIa07q_runtimeTargetDescription", + "runtimeTargetHeader": "IIa07q_runtimeTargetHeader", + "runtimeUnifiedList": "IIa07q_runtimeUnifiedList", + "searchActions": "IIa07q_searchActions", + "searchBar": "IIa07q_searchBar", + "searchControls": "IIa07q_searchControls", + "secondaryButton": "IIa07q_secondaryButton", + "sectionHeading": "IIa07q_sectionHeading", + "sessionHint": "IIa07q_sessionHint", + "sessionMissing": "IIa07q_sessionMissing", + "sessionReady": "IIa07q_sessionReady", + "shell": "IIa07q_shell", + "singleColumn": "IIa07q_singleColumn", + "spaceSummary": "IIa07q_spaceSummary", + "statusCluster": "IIa07q_statusCluster", + "statusDot": "IIa07q_statusDot", + "statusHeaderActions": "IIa07q_statusHeaderActions", + "statusSectionHeader": "IIa07q_statusSectionHeader", + "storageAreaGrid": "IIa07q_storageAreaGrid", + "storageAreaMetric": "IIa07q_storageAreaMetric", + "storageDomains": "IIa07q_storageDomains", + "storageFootnote": "IIa07q_storageFootnote", + "storageMode": "IIa07q_storageMode", + "storagePath": "IIa07q_storagePath", + "storageRoot": "IIa07q_storageRoot", + "storageUnavailable": "IIa07q_storageUnavailable", + "supervisedComposer": "IIa07q_supervisedComposer", + "supervisedForm": "IIa07q_supervisedForm", + "supervisedHeading": "IIa07q_supervisedHeading", + "tags": "IIa07q_tags", + "telemetry": "IIa07q_telemetry", + "telemetryMetric": "IIa07q_telemetryMetric", + "topNavigation": "IIa07q_topNavigation", + "versionChecking": "IIa07q_versionChecking", + "versionDialogActions": "IIa07q_versionDialogActions", + "versionDialogBody": "IIa07q_versionDialogBody", + "versionError": "IIa07q_versionError", + "versionList": "IIa07q_versionList", + "versionLocation": "IIa07q_versionLocation", + "versionNumbers": "IIa07q_versionNumbers", + "versionResult": "IIa07q_versionResult", + "workspace": "IIa07q_workspace", + "workspaceMismatch": "IIa07q_workspaceMismatch", + "workspacePicker": "IIa07q_workspacePicker", + "writeGuide": "IIa07q_writeGuide", + "writebackLayout": "IIa07q_writebackLayout" }; //#endregion //#region src/client/MnemonView.tsx @@ -7762,8 +7762,8 @@ window.__ModuleLoader__.load({ } //#endregion //#region \0dsh-mnemon-css:/Users/grivn/github.com/omdsh-dev/dsh-mnemon/src/client/MnemonTurnTail.module.css.mjs - const css$2 = ".t5hXpG_root{min-width:0;margin:2px 0}.t5hXpG_bar{cursor:pointer;min-width:0;max-width:100%;height:22px;color:var(--dsw-alias-label-tertiary);background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:6px;padding:0 8px 0 6px;font-size:11px;line-height:22px;display:flex}.t5hXpG_bar:hover{border-color:var(--dsw-alias-border-l2);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.t5hXpG_bar:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.t5hXpG_mark{opacity:.8;flex:none;font-size:10px}.t5hXpG_label{flex:none;font-weight:600}.t5hXpG_metrics{align-items:center;gap:6px;min-width:0;display:inline-flex;overflow:hidden}.t5hXpG_metrics span{white-space:nowrap}.t5hXpG_failureMetric{color:var(--dsw-alias-state-error-primary,#d44)}.t5hXpG_chevron{opacity:.7;flex:none;width:8px;height:8px;margin-left:auto}.t5hXpG_chevron:before{content:\"\";border-bottom:1.5px solid;border-right:1.5px solid;width:5px;height:5px;transition:transform .12s;display:block;transform:rotate(45deg)translate(-1px,-1px)}.t5hXpG_chevronOpen:before{transform:rotate(-135deg)translate(0)}.t5hXpG_details{border-left:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);border-radius:0 8px 8px 0;align-items:center;gap:10px;min-width:0;margin:2px 0 4px;padding:6px 8px;display:flex}.t5hXpG_detailLabel{color:var(--dsw-alias-label-caption);letter-spacing:.08em;text-transform:uppercase;flex:none;font-size:10px;font-weight:650}.t5hXpG_tools{flex-wrap:wrap;flex:auto;gap:4px;min-width:0;display:flex}.t5hXpG_toolChip{cursor:pointer;background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);font-family:var(--ds-font-family-code,Consolas, monospace);white-space:nowrap;border:none;border-radius:4px;padding:0 6px;font-size:10px;line-height:18px}.t5hXpG_toolChip:hover{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-state-business-primary)}.t5hXpG_toolChip:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:1px}"; - const tagId$2 = "dsh-mnemon/MnemonTurnTail.module.css"; + const css$2 = "._3g7pq_root{min-width:0;margin:2px 0}._3g7pq_bar{cursor:pointer;min-width:0;max-width:100%;height:22px;color:var(--dsw-alias-label-tertiary);background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:6px;padding:0 8px 0 6px;font-size:11px;line-height:22px;display:flex}._3g7pq_bar:hover{border-color:var(--dsw-alias-border-l2);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}._3g7pq_bar:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:2px}._3g7pq_mark{opacity:.8;flex:none;font-size:10px}._3g7pq_label{flex:none;font-weight:600}._3g7pq_metrics{align-items:center;gap:6px;min-width:0;display:inline-flex;overflow:hidden}._3g7pq_metrics span{white-space:nowrap}._3g7pq_failureMetric{color:var(--dsw-alias-state-error-primary,#d44)}._3g7pq_chevron{opacity:.7;flex:none;width:8px;height:8px;margin-left:auto}._3g7pq_chevron:before{content:\"\";border-bottom:1.5px solid;border-right:1.5px solid;width:5px;height:5px;transition:transform .12s;display:block;transform:rotate(45deg)translate(-1px,-1px)}._3g7pq_chevronOpen:before{transform:rotate(-135deg)translate(0)}._3g7pq_details{border-left:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);border-radius:0 8px 8px 0;align-items:center;gap:10px;min-width:0;margin:2px 0 4px;padding:6px 8px;display:flex}._3g7pq_detailLabel{color:var(--dsw-alias-label-caption);letter-spacing:.08em;text-transform:uppercase;flex:none;font-size:10px;font-weight:650}._3g7pq_tools{flex-wrap:wrap;flex:auto;gap:4px;min-width:0;display:flex}._3g7pq_toolChip{cursor:pointer;background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);font-family:var(--ds-font-family-code,Consolas, monospace);white-space:nowrap;border:none;border-radius:4px;padding:0 6px;font-size:10px;line-height:18px}._3g7pq_toolChip:hover{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-state-business-primary)}._3g7pq_toolChip:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:1px}"; + const tagId$2 = "dsh-mnemon/src/client/MnemonTurnTail.module.css"; if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) { const tag = document.createElement("style"); tag.dataset.plugin = "dsh-mnemon"; @@ -7772,18 +7772,18 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonTurnTail_module_css_default = { - "bar": "t5hXpG_bar", - "chevron": "t5hXpG_chevron", - "chevronOpen": "t5hXpG_chevronOpen", - "detailLabel": "t5hXpG_detailLabel", - "details": "t5hXpG_details", - "failureMetric": "t5hXpG_failureMetric", - "label": "t5hXpG_label", - "mark": "t5hXpG_mark", - "metrics": "t5hXpG_metrics", - "root": "t5hXpG_root", - "toolChip": "t5hXpG_toolChip", - "tools": "t5hXpG_tools" + "bar": "_3g7pq_bar", + "chevron": "_3g7pq_chevron", + "chevronOpen": "_3g7pq_chevronOpen", + "detailLabel": "_3g7pq_detailLabel", + "details": "_3g7pq_details", + "failureMetric": "_3g7pq_failureMetric", + "label": "_3g7pq_label", + "mark": "_3g7pq_mark", + "metrics": "_3g7pq_metrics", + "root": "_3g7pq_root", + "toolChip": "_3g7pq_toolChip", + "tools": "_3g7pq_tools" }; //#endregion //#region src/client/MnemonTurnTail.tsx @@ -7893,8 +7893,8 @@ window.__ModuleLoader__.load({ }); //#endregion //#region \0dsh-mnemon-css:/Users/grivn/github.com/omdsh-dev/dsh-mnemon/src/client/MnemonSaveAction.module.css.mjs - const css$1 = ".FDcGda_wrap{display:inline-flex;position:relative}.FDcGda_button{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:6px;display:inline-flex}.FDcGda_button:hover,.FDcGda_button[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.FDcGda_button:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.FDcGda_icon{flex:none;width:16px;height:16px}.FDcGda_modal{width:min(640px,100%);max-height:calc(100vh - 48px)}.FDcGda_modalContent{overscroll-behavior:contain;min-height:0;overflow-y:auto}.FDcGda_modalAction{min-width:96px}.FDcGda_status{color:var(--dsw-alias-label-tertiary);margin:0;font-size:13px;line-height:20px}.FDcGda_readOnly{background:var(--dsw-alias-state-warn-bg,transparent);color:var(--dsw-alias-state-warn-primary);border-radius:6px;margin-top:8px;padding:6px 8px;font-size:11px}.FDcGda_candidate{display:block}.FDcGda_candidate>span{color:var(--dsw-alias-label-caption);margin-bottom:8px;font-size:12px;font-weight:650;line-height:18px;display:block}.FDcGda_candidate textarea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);resize:vertical;background:var(--dsw-specific-input-major,var(--dsw-alias-bg-base));width:100%;min-height:260px;max-height:50vh;color:var(--dsw-alias-label-primary);font:13px/20px var(--ds-font-family-code,Consolas, monospace);border-radius:8px;padding:8px 10px;display:block}.FDcGda_candidate textarea:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.FDcGda_truncated{color:var(--dsw-alias-label-tertiary);margin-top:4px;font-size:10px;line-height:14px;display:block}.FDcGda_outcome{background:var(--dsw-alias-state-success-bg,transparent);color:var(--dsw-alias-state-success-primary);border-radius:6px;margin-top:8px;padding:6px 8px;font-size:11px}.FDcGda_failure{background:var(--dsw-alias-state-error-bg,transparent);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;border-radius:6px;margin-top:8px;padding:6px 8px;font-size:11px}@supports (height:100dvh){.FDcGda_modal{max-height:calc(100dvh - 48px)}}"; - const tagId$1 = "dsh-mnemon/MnemonSaveAction.module.css"; + const css$1 = ".ypSjoa_wrap{display:inline-flex;position:relative}.ypSjoa_button{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:6px;display:inline-flex}.ypSjoa_button:hover,.ypSjoa_button[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.ypSjoa_button:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.ypSjoa_icon{flex:none;width:16px;height:16px}.ypSjoa_modal{width:min(640px,100%);max-height:calc(100vh - 48px)}.ypSjoa_modalContent{overscroll-behavior:contain;min-height:0;overflow-y:auto}.ypSjoa_modalAction{min-width:96px}.ypSjoa_status{color:var(--dsw-alias-label-tertiary);margin:0;font-size:13px;line-height:20px}.ypSjoa_readOnly{background:var(--dsw-alias-state-warn-bg,transparent);color:var(--dsw-alias-state-warn-primary);border-radius:6px;margin-top:8px;padding:6px 8px;font-size:11px}.ypSjoa_candidate{display:block}.ypSjoa_candidate>span{color:var(--dsw-alias-label-caption);margin-bottom:8px;font-size:12px;font-weight:650;line-height:18px;display:block}.ypSjoa_candidate textarea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);resize:vertical;background:var(--dsw-specific-input-major,var(--dsw-alias-bg-base));width:100%;min-height:260px;max-height:50vh;color:var(--dsw-alias-label-primary);font:13px/20px var(--ds-font-family-code,Consolas, monospace);border-radius:8px;padding:8px 10px;display:block}.ypSjoa_candidate textarea:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.ypSjoa_truncated{color:var(--dsw-alias-label-tertiary);margin-top:4px;font-size:10px;line-height:14px;display:block}.ypSjoa_outcome{background:var(--dsw-alias-state-success-bg,transparent);color:var(--dsw-alias-state-success-primary);border-radius:6px;margin-top:8px;padding:6px 8px;font-size:11px}.ypSjoa_failure{background:var(--dsw-alias-state-error-bg,transparent);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;border-radius:6px;margin-top:8px;padding:6px 8px;font-size:11px}@supports (height:100dvh){.ypSjoa_modal{max-height:calc(100dvh - 48px)}}"; + const tagId$1 = "dsh-mnemon/src/client/MnemonSaveAction.module.css"; if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) { const tag = document.createElement("style"); tag.dataset.plugin = "dsh-mnemon"; @@ -7903,18 +7903,18 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonSaveAction_module_css_default = { - "button": "FDcGda_button", - "candidate": "FDcGda_candidate", - "failure": "FDcGda_failure", - "icon": "FDcGda_icon", - "modal": "FDcGda_modal", - "modalAction": "FDcGda_modalAction", - "modalContent": "FDcGda_modalContent", - "outcome": "FDcGda_outcome", - "readOnly": "FDcGda_readOnly", - "status": "FDcGda_status", - "truncated": "FDcGda_truncated", - "wrap": "FDcGda_wrap" + "button": "ypSjoa_button", + "candidate": "ypSjoa_candidate", + "failure": "ypSjoa_failure", + "icon": "ypSjoa_icon", + "modal": "ypSjoa_modal", + "modalAction": "ypSjoa_modalAction", + "modalContent": "ypSjoa_modalContent", + "outcome": "ypSjoa_outcome", + "readOnly": "ypSjoa_readOnly", + "status": "ypSjoa_status", + "truncated": "ypSjoa_truncated", + "wrap": "ypSjoa_wrap" }; //#endregion //#region src/client/MnemonSaveAction.tsx @@ -8179,13 +8179,8 @@ window.__ModuleLoader__.load({ }; //#endregion //#region \0dsh-mnemon-css:/Users/grivn/github.com/omdsh-dev/dsh-mnemon/src/client/MnemonWorkspace.module.css.mjs - var import_client = (/* @__PURE__ */ __commonJSMin(((exports) => { - var m = require("react-dom"); - exports.createRoot = m.createRoot; - exports.hydrateRoot = m.hydrateRoot; - })))(); - const css = "[data-pane=conversation]{position:relative}[data-dsh-mnemon-view]{z-index:60;background:var(--dsw-alias-bg-base);min-width:0;min-height:0;display:none;position:absolute;inset:0;overflow:hidden}.MrFkOq_panelView{isolation:isolate}html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-mnemon-view]{display:block}html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-mnemon-view]),html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-mnemon-view]){display:none!important}.MrFkOq_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}.MrFkOq_entry:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-hover)}.MrFkOq_entry[data-active]{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-active);font-weight:600}.MrFkOq_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.MrFkOq_entryLabel{text-overflow:ellipsis;overflow:hidden}[data-dsh-frame][data-sidebar-collapsed] .MrFkOq_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] .MrFkOq_entryLabel{display:none}"; - const tagId = "dsh-mnemon/MnemonWorkspace.module.css"; + const css = "[data-pane=conversation]{position:relative}[data-dsh-mnemon-view]{z-index:60;background:var(--dsw-alias-bg-base);min-width:0;min-height:0;display:none;position:absolute;inset:0;overflow:hidden}.NS3bAW_panelView{isolation:isolate}html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-mnemon-view]{display:block}html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-mnemon-view]),html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-mnemon-view]){display:none!important}.NS3bAW_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}.NS3bAW_entry:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-hover)}.NS3bAW_entry[data-active]{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-active);font-weight:600}.NS3bAW_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.NS3bAW_entryLabel{text-overflow:ellipsis;overflow:hidden}[data-dsh-frame][data-sidebar-collapsed] .NS3bAW_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] .NS3bAW_entryLabel{display:none}"; + const tagId = "dsh-mnemon/src/client/MnemonWorkspace.module.css"; if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) { const tag = document.createElement("style"); tag.dataset.plugin = "dsh-mnemon"; @@ -8194,10 +8189,10 @@ window.__ModuleLoader__.load({ document.head.appendChild(tag); } var MnemonWorkspace_module_css_default = { - "entry": "MrFkOq_entry", - "entryIcon": "MrFkOq_entryIcon", - "entryLabel": "MrFkOq_entryLabel", - "panelView": "MrFkOq_panelView" + "entry": "NS3bAW_entry", + "entryIcon": "NS3bAW_entryIcon", + "entryLabel": "NS3bAW_entryLabel", + "panelView": "NS3bAW_panelView" }; //#endregion //#region src/client/sidebar-entry.ts @@ -8423,7 +8418,7 @@ window.__ModuleLoader__.load({ container.dataset.dshMnemonView = ""; container.className = MnemonWorkspace_module_css_default.panelView ?? ""; column.append(container); - root = (0, import_client.createRoot)(container); + root = (0, react_dom_client.createRoot)(container); root.render(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonPanel, { ctx, settings, diff --git a/lib/client.js.map b/lib/client.js.map index 324254f..1d76d3b 100644 --- a/lib/client.js.map +++ b/lib/client.js.map @@ -1 +1 @@ -{"version":3,"file":"client.js","names":["useMemo","useRef","useState","css","useMemo","useSyncExternalStore","useState","css","m","r","sidebarCss","createContext","useContext","createContext","useContext","css","useRef","useCallback","Fragment","Markdown","useState","useMemo","useSyncExternalStore","IconChevronLeftOutline14","memo","useState","css","memo","useState","useRef","css","Tooltip","IconDataOutline16","Modal","Button","css","useCallback","useSyncExternalStore","useState","useMemo","css","createRoot"],"sources":["../src/settings.ts","../src/client/locales.ts","../src/channels.ts","../src/client/api.ts","../src/client/MnemonPackSection.tsx","../src/client/MnemonSettingsCard.tsx","../src/client/anchor.ts","../node_modules/.pnpm/markdown-to-jsx@7.7.17_react@18.3.1/node_modules/markdown-to-jsx/dist/index.module.js","../src/service.ts","../src/client/MnemonLogo.tsx","../src/client/MnemonViewAppearance.tsx","../src/client/MnemonView.tsx","../src/client/MnemonTurnTail.tsx","../src/client/MnemonSaveAction.tsx","../src/client/settings.ts","../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/client.js","../src/client/sidebar-entry.ts","../src/client/workspace-controller.ts","../src/client/workspace-mount.tsx","../src/client/index.ts"],"sourcesContent":["import type { HostConnectionHandle, HostRpcHandler, HostSettingsService, RpcResult } from './contracts.ts'\n\nexport const MNEMON_SETTINGS_CHANNEL = '/dsh-mnemon-settings'\nexport const MNEMON_SETTINGS_NAMESPACE = 'mnemon'\nexport const MNEMON_UI_SETTINGS_NAMESPACE = 'mnemon-ui'\n\nfunction success(value: unknown): RpcResult {\n return { ok: true, value }\n}\n\nfunction failure(error: unknown, namespace: string): RpcResult {\n return {\n ok: false,\n error: {\n code: 'settings-rejected',\n message: error instanceof Error ? error.message : String(error),\n details: { ns: namespace },\n },\n }\n}\n\nfunction badRequest(message: string): RpcResult {\n return { ok: false, error: { code: 'bad-request', message, details: { issues: [] } } }\n}\n\nfunction descriptor(settings: HostSettingsService, namespace: string) {\n const view = settings.describe({ redactSecrets: true }).find(candidate => candidate.ns === namespace)\n if (view === undefined) throw new Error(`${namespace} settings namespace is unavailable`)\n return {\n status: 'ready' as const,\n value: view.value,\n base: view.base,\n user: view.user,\n revision: view.revision,\n writable: settings.writable,\n mode: 'host' as const,\n applies: view.applies,\n }\n}\n\nfunction object(value: unknown): Record {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) throw new Error('payload must be an object')\n return value as Record\n}\n\nconst MUTABLE_FIELDS = [\n 'storageScope', 'cliPath', 'dataDir', 'customPackId', 'customPacks', 'store', 'timeoutMs', 'defaultRecallLimit',\n 'routingGuidance', 'lifecycleEnabled', 'recallMode', 'writebackMode', 'idleReviewMs',\n 'displayMode', 'tabEnabled', 'writeEnabled',\n]\n\n/** Nested paths of the live in-conversation interaction toggles. */\nconst INTERACTION_PATHS: string[][] = [\n ['conversationInteraction', 'turnBar'],\n ['conversationInteraction', 'saveAction'],\n]\n\nconst UI_FIELDS = ['turnBar', 'saveAction']\n\nfunction namespaceOf(payload: Record): string {\n const namespace = payload.namespace === undefined ? MNEMON_SETTINGS_NAMESPACE : String(payload.namespace)\n if (namespace !== MNEMON_SETTINGS_NAMESPACE && namespace !== MNEMON_UI_SETTINGS_NAMESPACE) throw new Error(`unsupported Mnemon settings namespace: ${namespace}`)\n return namespace\n}\n\n/** Whether one mutation path targets a supported Mnemon settings field. */\nfunction mutablePath(namespace: string, path: string[]): boolean {\n if (namespace === MNEMON_UI_SETTINGS_NAMESPACE) return path.length === 1 && UI_FIELDS.includes(path[0]!)\n if (path.length === 1) return MUTABLE_FIELDS.includes(path[0]!)\n // Accepted only for legacy clients; the current UI writes `mnemon-ui`.\n return INTERACTION_PATHS.some(allowed => allowed.length === path.length && allowed.every((segment, index) => segment === path[index]))\n}\n\nexport function createSettingsHandler(settings: HostSettingsService): HostRpcHandler {\n return async (endpoint, rawPayload) => {\n let namespace = MNEMON_SETTINGS_NAMESPACE\n try {\n const payload = object(rawPayload)\n namespace = namespaceOf(payload)\n if (endpoint === 'get') return success(descriptor(settings, namespace))\n if (endpoint !== 'mutate') return badRequest(`unknown settings endpoint: ${endpoint}`)\n if (!settings.writable) throw new Error('DSH settings are read-only')\n if (!Array.isArray(payload.ops) || payload.ops.length === 0 || payload.ops.length > 16) throw new Error('ops must contain 1..16 settings edits')\n const ops = payload.ops.map((raw) => {\n const op = object(raw)\n const path = Array.isArray(op.path) && op.path.length > 0 ? op.path.map(segment => String(segment)) : []\n if (!mutablePath(namespace, path)) throw new Error(`unsupported ${namespace} settings field: ${path.join('.')}`)\n if (op.op === 'unset') return { op: 'unset' as const, path }\n if (op.op !== 'set') throw new Error(`unsupported settings operation: ${String(op.op)}`)\n return { op: 'set' as const, path, value: op.value }\n })\n const revision = payload.expectedRevision === undefined ? undefined : Number(payload.expectedRevision)\n await settings.mutate(namespace, ops, revision)\n return success(descriptor(settings, namespace))\n } catch (error) {\n return failure(error, namespace)\n }\n }\n}\n\nexport function registerSettingsRpc(connection: HostConnectionHandle, settings: HostSettingsService): void {\n connection.rpc.handle(MNEMON_SETTINGS_CHANNEL, createSettingsHandler(settings), { authority: 'loopback' })\n}\n","/** Mnemon workspace copy, synchronized with DSH's global locale service. */\nexport const zh = {\n 'tab.label': '记忆系统',\n 'term.space': '记忆体',\n 'term.spaces': '记忆体',\n 'category.decision': '决策',\n 'category.preference': '偏好',\n 'category.fact': '事实',\n 'category.insight': '洞察',\n 'category.context': '上下文',\n 'category.general': '通用',\n 'nav.aria': 'Mnemon 页面',\n 'nav.group.system': '系统',\n 'nav.group.storage': '三层记忆',\n 'nav.group.tools': '读写工具',\n 'nav.memory.aria': '记忆体页面',\n 'nav.overview': '概览',\n 'nav.bodies': '记忆体',\n 'nav.bodies.detail': '记忆体目录与实时图谱',\n 'nav.runtime': '运行时',\n 'nav.runtime.detail': '热记忆与上下文',\n 'nav.documents': '档案',\n 'nav.documents.detail': '项目知识与归档',\n 'nav.search': '检索',\n 'nav.search.detail': '意图增强召回',\n 'nav.entities': '实体',\n 'nav.entities.detail': '关系与上下文',\n 'nav.remember': '沉淀',\n 'nav.rememberAction': '沉淀记忆',\n 'nav.remember.detail': 'LLM 监督写回',\n 'nav.content': '内容',\n 'nav.content.detail': '浏览与维护',\n 'nav.status': '状态',\n 'nav.status.detail': '运行与诊断',\n 'common.refresh': '刷新状态',\n 'common.loading': '载入中…',\n 'common.cancel': '取消',\n 'common.copyId': '复制 ID',\n 'common.readOnly': '只读模式',\n 'common.agentSupervised': '子 Agent 监督',\n 'common.active': '已激活',\n 'common.inactive': '未激活',\n 'common.category': '分类',\n 'common.importanceLabel': '重要性',\n 'common.importance': '重要性 {value}',\n 'common.hops': '{count} 跳',\n 'common.allCategories': '全部分类',\n 'common.memories': '{count} 条记忆',\n 'common.edges': '{count} 条连接',\n 'common.count': '{count} 个',\n 'common.showing': '当前显示 {visible} / {total}',\n 'common.showMore': '再显示 {count} 条',\n 'header.backToConversation': '返回会话',\n 'header.checking': '检查中',\n 'header.connected': '已连接',\n 'header.connectedWithCount': '已连接 · {count} 个已激活',\n 'header.directoryPending': '已连接 · 目录待同步',\n 'header.unavailable': '不可用',\n 'header.notReady': 'Mnemon 尚未就绪',\n 'workspace.viewing': '查看工作区',\n 'workspace.selectorAria': '选择要查看的记忆工作区',\n 'workspace.storageMode': '存储位置',\n 'workspace.storageModeAria': '存储位置模式:{mode}',\n 'workspace.mismatchTitle': '查看目录与当前会话未对齐',\n 'workspace.mismatchShort': '非对话工作区',\n 'workspace.mismatchDescription': '工作台操作面向当前查看目录;Agent、工具和生命周期仍使用当前会话目录。',\n 'workspace.selectedRoot': '查看:{root}',\n 'workspace.effectiveRoot': '生效:{root}',\n 'workspace.align': '对齐对话',\n 'telemetry.aria': '记忆统计',\n 'telemetry.title': '记忆统计',\n 'telemetry.memories': '激活记忆',\n 'telemetry.graph': '激活图谱',\n 'telemetry.entities': '激活实体',\n 'telemetry.spaces': '记忆体',\n 'sidebar.activeSpaces': '已激活记忆体',\n 'overview.title': '记忆体',\n 'overview.description': '管理全局记忆体的读取边界,并在一张实时四图快照中观察所有已激活记忆体。',\n 'overview.pageDescription': '查看目录配置、存储状态以及所有已激活记忆体的实时关联图谱。',\n 'overview.interval': '每 15 秒',\n 'overview.syncing': '同步中…',\n 'overview.syncNow': '立即同步',\n 'overview.directory': '记忆体目录',\n 'overview.directory.description': '开关只控制读取;写入可选择任意记忆体,写入未激活记忆体后会自动激活。',\n 'overview.directory.waiting': '等待目录',\n 'overview.directory.unsynced': '目录尚未同步',\n 'overview.directory.unsyncedBadge': '目录待同步',\n 'overview.storageHealthy': '存储正常',\n 'overview.storageUnhealthy': '存储异常',\n 'overview.toggleAria': '{name}读取开关',\n 'overview.toggling': '切换中',\n 'overview.noDescription': '尚未提供路由说明。',\n 'overview.unsyncedTitle': '记忆体目录尚未同步',\n 'overview.unsyncedShort': '当前 Web 客户端与 DSH Host 状态不一致;重启 Host 后会重新登记既有 Store。',\n 'overview.unsyncedLong': '当前 Host 仍在使用旧插件契约;重启 DSH 后会重新发现既有 Store,期间不会删除任何 .db。',\n 'overview.emptyTitle': '还没有记忆体',\n 'overview.emptyShort': '创建第一个记忆体并写入稳定上下文后,它会出现在这里。',\n 'overview.emptyLong': '先在上方创建一个记忆体;首次写入后,它会自动激活并出现在实时快照中。',\n 'overview.noActiveTitle': '没有激活的记忆体',\n 'overview.noActiveText': '开启至少一个记忆体的读取开关,即可在这里聚合它的实时图谱。',\n 'overview.noContentTitle': '已激活记忆体尚无内容',\n 'overview.noContentText': '向任意记忆体沉淀稳定上下文后,这里会聚合呈现节点与关系。',\n 'overview.create': '+ 创建空白记忆体',\n 'overview.createTitle': '创建记忆体',\n 'overview.createName': '新记忆体名称',\n 'overview.createNamePlaceholder': '名称',\n 'overview.createDescription': '新记忆体描述',\n 'overview.createDescriptionPlaceholder': '说明哪些内容属于它,以及何时应被召回',\n 'overview.creating': '创建中…',\n 'overview.createAction': '创建',\n 'overview.editBody': '编辑',\n 'overview.editBodyAria': '编辑{name}',\n 'overview.editName': '名称',\n 'overview.editDescription': '路由说明',\n 'overview.saveBody': '保存',\n 'overview.savingBody': '保存中…',\n 'overview.deleteBody': '删除',\n 'overview.deleteBodyAria': '删除{name}',\n 'overview.deleteTitle': '删除“{name}”?',\n 'overview.deleteWarning': '该操作会永久删除这个记忆体及其中的全部记忆与关系,无法撤销。',\n 'overview.deleteAction': '确认删除',\n 'overview.deletingBody': '删除中…',\n 'overview.snapshot': '多记忆体实时快照',\n 'overview.waitingSnapshot': '等待首个快照',\n 'overview.updatedAt': '更新于 {time}',\n 'overview.edgeScope': '空间归属',\n 'overview.edgeTemporal': '时间',\n 'overview.edgeSemantic': '语义',\n 'overview.edgeCausal': '因果',\n 'overview.edgeEntity': '实体关联',\n 'overview.graphComposition': '{spaces} 个空间 · {memories} 条记忆 · {entities} 个实体',\n 'overview.graphCount': '展示 {visible} / {total} 个元素',\n 'overview.graphEdges': '{count} 条图谱连接',\n 'overview.inspector': '记忆详情',\n 'overview.inspectorSpace': '记忆体详情',\n 'overview.inspectorEntity': '实体详情',\n 'overview.selectNode': '选择一个图谱元素',\n 'overview.selectNodeText': '查看记忆体、实体或记忆的精确上下文。',\n 'overview.closeInspector': '关闭节点详情',\n 'overview.memoryId': '记忆 ID',\n 'overview.spaceId': '记忆体 ID',\n 'overview.containedMemories': '包含记忆',\n 'overview.entityMentions': '索引次数',\n 'overview.exploreNode': '围绕它检索',\n 'overview.previewAria': '查看全文',\n 'overview.previewTitle': '内容全文',\n 'overview.loading': '正在同步记忆体目录与多库图谱…',\n 'runtime.title': '运行时记忆',\n 'runtime.description': '管理每轮随上下文加载的紧凑热记忆。结构化数据由统一控制层维护,并自动投影为 USER.md 与 MEMORY.md。',\n 'runtime.total': '{count} 条热记忆',\n 'runtime.entriesAria': '运行时记忆列表',\n 'runtime.scopeAria': '运行时记忆范围',\n 'runtime.scopeAll': '全部',\n 'runtime.filterAria': '筛选运行时记忆',\n 'runtime.filterPlaceholder': '按内容筛选…',\n 'runtime.noMatch': '没有符合当前范围与查询条件的热记忆。',\n 'runtime.refresh': '刷新',\n 'runtime.hotContext': '每轮上下文',\n 'runtime.addTitle': '添加热记忆',\n 'runtime.addDescription': '稳定但仍需频繁使用的信息优先留在这里,长期归档由 Mnemon 记忆体承接。',\n 'runtime.content': '运行时记忆内容',\n 'runtime.placeholder': '输入一条简洁、独立、未来仍然有用的信息…',\n 'runtime.target': '分类',\n 'runtime.importance': '重要性',\n 'runtime.saving': '处理中…',\n 'runtime.addButton': '添加记忆',\n 'runtime.addAction': '添加',\n 'runtime.target.user': '用户画像',\n 'runtime.target.user.description': '身份、角色、习惯、表达偏好与明确的协作要求;容量整理始终留在本地,不进入记忆体。',\n 'runtime.target.memory': '工作记忆',\n 'runtime.target.memory.description': '项目、环境、决策、约定、工具特性与可复用经验;容量达到上限时按主题归档到一个或多个记忆体。',\n 'runtime.importance.critical': '关键',\n 'runtime.importance.normal': '普通',\n 'runtime.importance.low': '低',\n 'runtime.empty': '这个分类还没有热记忆。',\n 'runtime.editContent': '编辑运行时记忆',\n 'runtime.editAction': '编辑',\n 'runtime.saveEdit': '保存修改',\n 'runtime.removeAction': '移除',\n 'runtime.removeConfirm': '确认移除这条热记忆?',\n 'runtime.removeTitle': '移除运行时记忆?',\n 'runtime.removeWarning': '移除后,这条内容将不再随每轮上下文加载。该操作无法撤销。',\n 'runtime.result.add': '已添加到{target} · 当前 {count} 条',\n 'runtime.result.replace': '已更新{target} · 当前 {count} 条',\n 'runtime.result.remove': '已从{target}移除 · 当前 {count} 条',\n 'runtime.result.maintenance': '容量整理完成:已先归档到记忆体 {spaces},再更新{target} · 当前 {count} 条',\n 'runtime.result.localCompaction': '本地画像整理完成:未写入记忆体,已更新{target} · 当前 {count} 条',\n 'runtime.readOnly': '当前部署为只读模式;热记忆仍会进入上下文,但不能在此修改。',\n 'runtime.footnote': 'memories.json 是唯一事实源;两个 Markdown 文件由控制层生成,不应直接编辑。',\n 'documents.title': '项目档案',\n 'documents.description': '在当前工作区维护结构化的项目文档。活跃档案参与近场检索;达到 10 MB 上限前,最久未使用的档案会先在 Mnemon 中建立索引,再迁入归档。',\n 'documents.capacity': '{used} / {limit}',\n 'documents.refresh': '刷新',\n 'documents.summary': '档案存储摘要',\n 'documents.active': '活跃档案',\n 'documents.activeHint': '近场检索范围',\n 'documents.archivedCount': '归档',\n 'documents.archivedHint': '不占活跃容量',\n 'documents.activeCapacity': '活跃容量',\n 'documents.capacityHint': '按实际 UTF-8 文件大小计算',\n 'documents.searchAria': '检索项目档案',\n 'documents.searchPlaceholder': '搜索设计、调查、流程或交接记录…',\n 'documents.search': '检索',\n 'documents.scope': '档案范围',\n 'documents.new': '新建档案',\n 'documents.newTitle': '创建托管档案',\n 'documents.editTitle': '编辑活跃档案',\n 'documents.editorHint': '控制层会生成 frontmatter、哈希与修订号;原项目文件始终只读。',\n 'documents.managedCopy': '托管副本',\n 'documents.name': '标题',\n 'documents.routing': '检索说明',\n 'documents.sources': '来源路径',\n 'documents.sourcesPlaceholder': 'src/index.ts, docs/architecture.md',\n 'documents.markdown': 'Markdown 内容',\n 'documents.saving': '保存中…',\n 'documents.create': '创建档案',\n 'documents.save': '保存修订',\n 'documents.created': '已创建活跃档案。',\n 'documents.createdAfterArchive': '已先迁移 {count} 份旧档案,再创建活跃档案。',\n 'documents.updated': '已保存新的档案修订。',\n 'documents.updatedAfterArchive': '已先迁移 {count} 份旧档案,再保存修订。',\n 'documents.archived': '已建立 Mnemon 冷索引并归档;关联记忆体:{spaces}',\n 'documents.list': '项目档案列表',\n 'documents.activeList': '活跃目录',\n 'documents.archiveList': '归档目录',\n 'documents.noDescription': '暂无检索说明。',\n 'documents.missing': '文件缺失',\n 'documents.emptyActive': '还没有活跃档案',\n 'documents.emptyActiveText': '复杂对话达到活动评分门槛后会自动审阅并整理档案,也可以在上方手动创建。',\n 'documents.emptyArchived': '还没有归档',\n 'documents.emptyArchivedText': '只有完成 Mnemon 索引的档案才会迁移到这里。',\n 'documents.reader': '档案阅读器',\n 'documents.selectTitle': '选择一份档案',\n 'documents.selectText': '在左侧查看活跃项目知识或沿 Mnemon 引用打开归档原文。',\n 'documents.coldArchive': '归档原文',\n 'documents.edit': '编辑',\n 'documents.path': '托管路径',\n 'documents.revision': '修订',\n 'documents.hash': '内容哈希',\n 'documents.size': '文件大小',\n 'documents.archiveReceipt': 'Mnemon 冷索引回执',\n 'documents.archiveTitle': '迁入归档',\n 'documents.archiveDescription': '先由受限子 Agent 写入可检索的 Mnemon 摘要和精确路径,成功后才移动原文。',\n 'documents.archive': '归档',\n 'documents.archiveConfirm': '确认建立 Mnemon 索引并迁移这份档案?',\n 'documents.archiving': '索引并迁移中…',\n 'documents.archiveNow': '确认归档',\n 'documents.footnote': '`.mnemon/documents/index.json` 是控制面事实源;active 总量固定不超过 10 MB,archived 不计入上限,项目源文件不会被修改。',\n 'graph.layoutAria': '图谱布局',\n 'graph.layoutNatural': '自然布局',\n 'graph.layoutUniform': '均匀布局',\n 'graph.layoutCustom': '自定义布局',\n 'graph.layoutStatus': '布局状态:{layout}',\n 'graph.draggable': '{layout} · 可拖拽',\n 'graph.naturalAction': '自然铺开',\n 'graph.uniformAction': '均匀重置',\n 'graph.aria': 'Mnemon 实时记忆图谱,{nodes} 个元素,{edges} 条连接',\n 'graph.kindSpace': '记忆体',\n 'graph.kindEntity': '实体',\n 'card.confirmAria': '确认忘记记忆',\n 'card.confirmText': '软删除这条记忆?',\n 'card.processing': '处理中…',\n 'card.confirmForget': '确认忘记',\n 'card.related': '查看关联',\n 'card.clone': '基于此新建',\n 'card.forget': '忘记',\n 'turnTail.label': '本回合记忆',\n 'turnTail.recall': '召回 {count}',\n 'turnTail.write': '沉淀 {count}',\n 'turnTail.documents': '档案检索 {count}',\n 'turnTail.inspect': '检查 {count}',\n 'turnTail.failed': '失败 {count}',\n 'turnTail.toolList': '本回合记忆工具',\n 'turnTail.openTool': '打开 {tool} 对应的记忆页面',\n 'saveAction.button': '存入记忆',\n 'saveAction.tooltip': '将这条回复存入记忆',\n 'saveAction.title': '确认存入记忆',\n 'saveAction.hint': '子 Agent 会判断是否值得沉淀,并查重、提炼、选择记忆体后写入;不会挤占主对话上下文。',\n 'saveAction.fetching': '提取消息文本…',\n 'saveAction.missing': '无法从会话记录提取这条消息的文本。',\n 'saveAction.candidate': '候选内容(可编辑)',\n 'saveAction.truncated': '原回复较长,这里仅载入前 {limit} 个字符。',\n 'saveAction.submit': '确认并交给记忆子 Agent',\n 'saveAction.submitting': '调度中…',\n 'saveAction.result': '记忆子 Agent:{summary}',\n 'saveAction.failed': '调度失败:{error}',\n 'saveAction.readOnly': '当前部署为只读模式,无法写入记忆。',\n 'saveAction.close': '关闭',\n 'search.title': '检索记忆',\n 'search.description': '直连 Mnemon 检索原始证据;需要时可让 Agent 只基于命中内容生成答案。',\n 'search.maxResults': '最多 {count} 条',\n 'search.placeholder': '为什么选用 SQLite?这个项目有哪些发布约定?',\n 'search.queryAria': '记忆查询',\n 'search.categoryAria': '记忆分类',\n 'search.strategy': '策略',\n 'search.modeAria': '检索模式',\n 'search.modeSmart': '图增强召回',\n 'search.modeKeyword': '关键词检索',\n 'search.modeBasic': '基础匹配',\n 'search.searching': '检索中…',\n 'search.action': '直接检索',\n 'search.agentAction': 'Agent 查询',\n 'search.agentSearching': 'Agent 分析中…',\n 'search.agentAnswer': 'Agent 查询结果',\n 'search.agentAnswerHint': '基于下方召回证据',\n 'search.startTitle': '从一个明确问题开始',\n 'search.startText': '聚焦实体、决策或时间线,比批量加载整库更可靠。',\n 'search.emptyTitle': '没有命中',\n 'search.emptyText': '换一个更具体的实体、决策或时间线关键词试试。',\n 'search.results': '原始召回内容',\n 'search.related': '关联记忆',\n 'search.closeRelated': '关闭关联记忆',\n 'search.traversing': '正在遍历图谱…',\n 'search.noRelated': '没有找到两跳内的关联节点。',\n 'entities.title': '实体查阅',\n 'entities.description': '直连 Mnemon 查阅实体跨越事实、决策与上下文的关系。',\n 'entities.count': '{count} 个活跃实体',\n 'entities.nameAria': '实体名称',\n 'entities.placeholder': '输入任意实体…',\n 'entities.action': '查阅',\n 'entities.top': '高频实体',\n 'entities.frequency': '按出现频率',\n 'entities.emptyRail': '写入带实体的记忆后,这里会形成入口。',\n 'entities.loading': '正在沿实体关系召回…',\n 'entities.selectTitle': '选择或输入一个实体',\n 'entities.selectText': '实体视图会聚合与它相关的记忆,而不是只做字面匹配。',\n 'entities.emptyTitle': '没有关联记忆',\n 'entities.emptyText': '尝试更完整的名称或另一个实体别名。',\n 'remember.title': '沉淀记忆',\n 'remember.description': '候选内容会进入隔离的记忆子 Agent,由它选择记忆体、查重、提炼并执行写入,不占用主对话上下文。',\n 'remember.worker': '记忆子 Agent',\n 'remember.readOnlyTitle': '当前为只读模式',\n 'remember.readOnlyText': '当前部署禁止记忆写入;如需调整,请修改 DSH 的 Mnemon 配置并保存。',\n 'remember.flowTitle': '记忆子 Agent 会完成什么',\n 'remember.routeTitle': '判断归属',\n 'remember.routeText': '选择既有记忆体,必要时判断是否形成新范围',\n 'remember.dedupeTitle': '检索查重',\n 'remember.dedupeText': '识别重复、补充或冲突的旧记忆',\n 'remember.writeTitle': '结构化写入',\n 'remember.writeText': '提炼内容、元数据与必要关系并返回回执',\n 'remember.flowText': '子 Agent 只拥有 Mnemon 工具,原始目录和检索过程不会挤占主对话上下文。',\n 'remember.delegateTitle': '交给记忆子 Agent',\n 'remember.noSession': '无可用会话',\n 'remember.ready': '子 Agent 就绪',\n 'remember.candidate': '候选内容',\n 'remember.candidateAria': '待沉淀内容',\n 'remember.placeholder': '输入希望跨任务保留的背景、偏好、决策或洞察。模型会先判断它是否真的值得沉淀。',\n 'remember.sessionHint': '当前视图没有绑定活动会话,无法创建记忆子 Agent。',\n 'remember.processing': '记忆子 Agent 处理中…',\n 'remember.action': '调度子 Agent 判断并沉淀',\n 'remember.advanced': '人工高级选项',\n 'remember.advancedHint': '为记忆子 Agent 指定目标记忆体与元数据约束',\n 'remember.expand': '展开',\n 'remember.target': '目标记忆体',\n 'remember.entities': '实体(逗号分隔)',\n 'remember.tags': '标签(逗号分隔)',\n 'remember.advancedText': '高级选项是约束而不是绕过监督;记忆子 Agent 仍会查重并返回结构化回执。',\n 'remember.saving': '子 Agent 写入中…',\n 'remember.advancedAction': '按高级约束沉淀',\n 'remember.skipped': '记忆子 Agent 判断无需写入',\n 'remember.completed': '记忆子 Agent 已完成处理',\n 'remember.processed': '记忆子 Agent 已处理:{action}',\n 'remember.dispatchFailed': '调度失败:{error}',\n 'remember.saveFailed': '保存失败:{error}',\n 'content.title': '记忆内容',\n 'content.description': '无副作用浏览所有已激活记忆体;每条内容都会标明所属记忆体,可继续查阅或维护。',\n 'content.count': '{count} 条记忆',\n 'content.filterAria': '筛选记忆内容',\n 'content.filterPlaceholder': '按内容或精确 ID 筛选…',\n 'content.categoryAria': '记忆分类',\n 'content.apply': '应用筛选',\n 'content.notice': '内容列表读取已激活记忆体的图谱快照,不会增加 recall 访问计数。',\n 'content.showing': '当前显示 {visible} / {total}',\n 'content.showMore': '再显示 {count} 条',\n 'content.emptyTitle': '没有符合条件的记忆',\n 'content.emptyText': '清空筛选,或前往“沉淀”写入第一条稳定上下文。',\n 'status.title': '系统状态',\n 'status.description': '聚焦 Mnemon 引擎、三层存储和当前读写目录;连接配置由 DSH 部署统一管理。',\n 'status.nominal': '系统正常',\n 'status.checkRequired': '需要检查',\n 'status.rechecking': '检查中…',\n 'status.recheck': '重新检查',\n 'status.aria': 'Mnemon 运行状态',\n 'status.engine': '记忆引擎',\n 'status.engineConnected': 'Mnemon 已连接',\n 'status.engineUnavailable': 'Mnemon 不可用',\n 'status.engineChecking': '正在检查本地引擎',\n 'status.versionWaiting': '等待版本信息',\n 'versions.checkAction': '检查版本',\n 'versions.title': '检查与更新版本',\n 'versions.description': '检查 Mnemon CLI 与 dsh-mnemon;只有识别到受支持的安装方式时才会提供更新操作。',\n 'versions.checking': '正在检查远程仓库中的新版本…',\n 'versions.checkingShort': '检查中…',\n 'versions.recheck': '重新检查',\n 'versions.failed': '版本操作失败',\n 'versions.timeout': '版本检查超时,请检查网络后重试。',\n 'versions.current': '已是最新',\n 'versions.available': '可更新',\n 'versions.unknown': '无法确认',\n 'versions.installed': '当前版本',\n 'versions.latest': '最新版本',\n 'versions.executable': '可执行文件',\n 'versions.profileLocation': 'Profile · {name}',\n 'versions.sourceLocation': '源码',\n 'versions.linkSourceLocation': '源码 · Profile {name}',\n 'versions.packageLocation': '包目录',\n 'versions.update': '更新',\n 'versions.updating': '更新中…',\n 'versions.updated': '{name} 已更新',\n 'versions.alreadyCurrent': '当前已经是最新版本',\n 'versions.restartRequired': '请重启 dsh web,以加载新的 dsh-mnemon 插件代码。',\n 'versions.checkedAt': '检查于 {time}',\n 'versions.latestUnavailable': '暂时无法读取远程最新版本;请检查网络后重试。',\n 'versions.modeHomebrew': 'Homebrew',\n 'versions.modeGo': 'Go 安装',\n 'versions.modeNpm': 'DSH Profile',\n 'versions.modeLink': '本地 Link',\n 'versions.modeManual': '手工安装',\n 'versions.modeMissing': '未安装',\n 'versions.hintHomebrew': '由 Homebrew 管理;发现新版本时可在此安全更新。',\n 'versions.hintBrewMissing': '检测到 Homebrew 安装,但当前找不到 brew 命令。',\n 'versions.hintGo': '由 go install 管理;发现新版本时可在此安全更新。',\n 'versions.hintPnpm': '由当前 DSH Profile 管理;更新后需要重启 dsh web。',\n 'versions.hintPnpmMissing': '检测到 DSH Profile 安装,但当前找不到 pnpm 命令。',\n 'versions.hintLink': '当前为本地 Link 开发版本;请在源码目录拉取并构建,避免覆盖本地修改。',\n 'versions.hintInstall': '未找到 Mnemon CLI;请先安装并确保 mnemon 位于 PATH,或设置 MNEMON_CLI_PATH / mnemon.cliPath。',\n 'versions.hintManual': '无法安全识别安装来源;请沿用原安装方式手工更新。',\n 'status.spaces': '记忆体',\n 'status.activeRatio': '{active} / {total} 已激活',\n 'status.runtime': '运行时',\n 'status.runtimeRatio': '{user} 用户 · {memory} 项目',\n 'status.runtimeBytes': '{bytes} 已使用',\n 'status.runtimeWaiting': '等待同步',\n 'status.runtimeWaitingDetail': '宿主存储清单待返回',\n 'status.directoryUnsynced': '目录尚未同步',\n 'status.activeMemories': '{count} 条激活记忆',\n 'status.documents': '项目档案',\n 'status.documentsWaiting': '等待工作区',\n 'status.documentsSession': '绑定活动会话后可用',\n 'status.documentRatio': '{active} 份活跃 · {archived} 份归档',\n 'status.documentUsage': '{used} / {limit} 活跃容量',\n 'status.storageDomains': '存储域',\n 'status.storageDomainsText': '当前选择决定热记忆、记忆体和项目档案共同使用的目录边界。',\n 'status.storageBrowseOnly': '查看不会切换写入',\n 'status.storageScopeAria': '选择要查看的存储域',\n 'status.storageGlobal': '全局',\n 'status.storageWorkspace': '工作区',\n 'status.storageCustom': '自定义',\n 'status.storageCurrent': '当前读写',\n 'status.storageWaiting': '正在读取存储域目录…',\n 'status.storageCustomUnset': '尚未配置自定义目录。当前只展示已经由 DSH 配置并启用的自定义根。',\n 'status.storageWorkspaceUnavailable': '当前会话没有可用的工作区目录。',\n 'status.storageActiveRoot': '当前读写根',\n 'status.storageViewedRoot': '查看根',\n 'status.storageAvailable': '目录可用',\n 'status.storageNotCreated': '目录尚未创建',\n 'status.storageRuntime': '运行时记忆',\n 'status.storageBodies': '记忆体',\n 'status.storageDocuments': '项目档案',\n 'status.storageState': '后台状态',\n 'status.storageReady': '正常',\n 'status.storageEmpty': '空',\n 'status.storageMissing': '未创建',\n 'status.storageInvalid': '需修复',\n 'status.storageItems': '项',\n 'status.storageRuntimeDetail': 'USER {user} · MEMORY {memory}',\n 'status.storageBodiesDetail': '{active} 个激活 · {databases} 个数据库',\n 'status.storageDocumentsDetail': '{active} 份活跃 · {archived} 份归档',\n 'status.storageStateReady': '审阅水位已经持久化',\n 'status.storageStateVolatile': '当前审阅状态仍由 Host 进程维护',\n 'status.storageFootnote': '当前实际读写根:{root}。存储范围只在 DSH「设置 → 记忆系统」中修改,保存后实时生效;插件不会自动迁移、合并或删除旧内容。',\n 'config.aria': 'Mnemon 记忆系统配置',\n 'config.tab': 'Mnemon',\n 'config.title': '记忆系统设置',\n 'config.description': '统一配置运行时记忆、项目档案、记忆体和 DSH 界面;点击保存后立即生效。',\n 'config.unsaved': '有未保存修改',\n 'config.ready': '已保存并实时生效',\n 'config.noticeBefore': '配置写入',\n 'config.noticeAfter': ';所有设置点击保存后实时生效。切换范围不会自动迁移旧内容。',\n 'config.displayTitle': '展示形态',\n 'config.displayDescription': '选择记忆系统在 DSH Web 中的入口位置;切换后立即生效。',\n 'config.displayAria': '记忆系统展示形态',\n 'config.displaySidebar': 'Sidebar',\n 'config.displaySidebarHint': '侧边栏中的独立工作台',\n 'config.displayBuildin': 'Buildin',\n 'config.displayBuildinHint': '对话区域的内置标签页',\n 'config.storageTitle': '存储位置',\n 'config.storageDescription': '决定 Mnemon 的运行时记忆、项目档案与记忆体保存在哪里;保存后原子切换。',\n 'config.scope': '存储范围',\n 'config.scopeHint': '全局供所有工作区共享;工作区按当前 DSH 会话隔离;自定义使用指定目录。',\n 'config.scopeAria': 'Mnemon 存储范围',\n 'config.global': '全局',\n 'config.workspace': '工作区',\n 'config.custom': '自定义',\n 'config.customHintShort': '填写一个目录',\n 'config.customSelected': '已填写目录',\n 'config.customPack': '自定义 Pack',\n 'config.customPackAria': '选择自定义 Mnemon Pack',\n 'config.customPackRequired': '请选择或添加一个自定义 Pack。',\n 'config.customDefaultName': '自定义 Pack',\n 'config.noCustomPacks': '尚未配置 Pack',\n 'config.addPack': '添加 Pack',\n 'config.cancelAddPack': '取消添加',\n 'config.removePack': '移除',\n 'config.customPackNameAria': '新 Pack 名称',\n 'config.customPackNamePlaceholder': '例如:项目记忆',\n 'config.newPackDirectoryAria': '新 Pack 数据目录',\n 'config.confirmAddPack': '加入列表',\n 'config.customDirectory': '自定义目录',\n 'config.customHint': '整个 Mnemon 数据域都位于此处。',\n 'config.customAria': 'Mnemon 自定义数据目录',\n 'config.customDirectoryHint': '填写 DSH Host 上的目录路径,只保存这一个目录。',\n 'config.customPlaceholder': '例如:/data/mnemon 或 ~/mnemon',\n 'config.invalidScope': '存储范围无效。',\n 'config.customRequired': '选择自定义存储时必须填写数据目录。',\n 'config.customAbsolute': '自定义目录必须是绝对路径或以 ~/ 开头;Windows 可填写盘符或 UNC 路径。',\n 'config.saveFailed': '保存失败:{error}',\n 'config.readOnly': '当前部署的插件设置为只读。',\n 'config.discard': '放弃修改',\n 'config.saving': '保存中…',\n 'config.save': '保存',\n 'config.overridden': '已覆盖',\n 'config.interactionTitle': '对话界面',\n 'config.interactionLive': '实时生效',\n 'config.interactionHint': '保存后实时生效;关闭某项后恢复 DSH 原生呈现。',\n 'config.interactionTurnBar': '回合记忆条',\n 'config.interactionTurnBarHint': '在回合尾部展示召回、沉淀与检索活动',\n 'config.interactionSaveAction': '存入记忆按钮',\n 'config.interactionSaveActionHint': '在已定稿回复旁提供受监督的记忆沉淀入口',\n 'config.interactionOn': '开启',\n 'config.packTitle': '备份与迁移',\n 'config.packDescription': '整体导出与导入当前生效目录;导入始终落到下方显示的位置。',\n 'config.packActiveTarget': '当前生效目录',\n 'config.packTargetLoading': '正在读取运行目标…',\n 'config.packUnavailable': '当前 DSH 主机不支持 Mnemon ZIP 备份通道。',\n 'config.packFull': '整体 Pack',\n 'config.packFullHint': 'Runtime、Documents 与记忆体',\n 'config.packRuntime': 'Runtime',\n 'config.packRuntimeHint': '热记忆与 USER / MEMORY 投影',\n 'config.packDocuments': 'Documents',\n 'config.packDocumentsHint': '项目文档、归档与索引',\n 'config.packMemorySpaces': '记忆体',\n 'config.packMemorySpacesHint': '目录清单与 mnemon.db',\n 'config.packExport': '导出',\n 'config.packImport': '导入',\n 'config.packExporting': '导出中…',\n 'config.packInspecting': '检查中…',\n 'config.packImporting': '导入中…',\n 'config.packChooseFile': '选择{component}文件',\n 'config.packFormatHint': '统一使用 .mnemonpack(ZIP + manifest + SHA-256);记忆体仍以独立 mnemon.db 保存在包内。',\n 'config.packPreviewEyebrow': '导入预览',\n 'config.packUnnamed': '未命名 Mnemon Pack',\n 'config.packSource': '来源',\n 'config.packDestination': '导入到',\n 'config.packArchiveSize': '压缩 / 展开',\n 'config.packComponents': '选择要导入的组件',\n 'config.packComponentSummary': '{items} 项 · {files} 个文件 · {size}',\n 'config.packHasData': '目标已有数据',\n 'config.packMerge': '安全合并(推荐)',\n 'config.packMergeHint': '保留现有内容;冲突项自动去重或生成新 ID。',\n 'config.packMergeAction': '合并导入',\n 'config.packReplace': '覆盖当前组件?',\n 'config.packReplaceHint': '所选组件会被 Pack 内容原子替换;其他组件不受影响。',\n 'config.packReplaceAction': '覆盖导入…',\n 'config.packConfirmReplace': '确认覆盖',\n 'config.packComponentMissing': '这个 Pack 不包含所选组件。',\n 'config.packExported': '已导出 {file}({size})。',\n 'config.packImported': '已将 {components} 导入 {root}。',\n 'config.packFailed': 'ZIP 操作失败:{error}',\n 'config.packSimpleDescription': '将当前生效目录整体导出为一个 ZIP,或从 ZIP 安全合并恢复。',\n 'config.packWholeZip': '当前目录 ZIP',\n 'config.packWholeZipHint': '包含 Runtime、Documents 和全部记忆体。',\n 'config.packImportZip': '导入 ZIP',\n 'config.packExportZip': '导出 ZIP',\n 'config.packChooseZip': '选择 Mnemon 备份 ZIP',\n 'config.packUnnamedZip': 'Mnemon 备份.zip',\n 'config.packZipReady': '校验通过 · {components} 个组件 · {items} 项 · {size}',\n 'config.packImportZipAction': '安全导入',\n 'config.packImportedWhole': '已将 ZIP 安全合并到 {root}。',\n} satisfies Record\n\nexport type MnemonKey = keyof typeof zh\n\nexport const en = {\n 'tab.label': 'Memory System',\n 'term.space': 'Memory Space',\n 'term.spaces': 'Memory Spaces',\n 'category.decision': 'Decision',\n 'category.preference': 'Preference',\n 'category.fact': 'Fact',\n 'category.insight': 'Insight',\n 'category.context': 'Context',\n 'category.general': 'General',\n 'nav.aria': 'Mnemon pages',\n 'nav.group.system': 'System',\n 'nav.group.storage': 'Memory tiers',\n 'nav.group.tools': 'Read and write',\n 'nav.memory.aria': 'Memory Space pages',\n 'nav.overview': 'Overview',\n 'nav.bodies': 'Memory Spaces',\n 'nav.bodies.detail': 'Directory and live graph',\n 'nav.runtime': 'Runtime',\n 'nav.runtime.detail': 'Hot memory and context',\n 'nav.documents': 'Documents',\n 'nav.documents.detail': 'Project knowledge and archive',\n 'nav.search': 'Recall',\n 'nav.search.detail': 'Intent-aware retrieval',\n 'nav.entities': 'Entities',\n 'nav.entities.detail': 'Relations and context',\n 'nav.remember': 'Distill',\n 'nav.rememberAction': 'Remember',\n 'nav.remember.detail': 'LLM-supervised writeback',\n 'nav.content': 'Content',\n 'nav.content.detail': 'Browse and maintain',\n 'nav.status': 'Status',\n 'nav.status.detail': 'Runtime and diagnostics',\n 'common.refresh': 'Refresh status',\n 'common.loading': 'Loading…',\n 'common.cancel': 'Cancel',\n 'common.copyId': 'Copy ID',\n 'common.readOnly': 'Read only',\n 'common.agentSupervised': 'Subagent supervised',\n 'common.active': 'Active',\n 'common.inactive': 'Inactive',\n 'common.category': 'Category',\n 'common.importanceLabel': 'Importance',\n 'common.importance': 'Importance {value}',\n 'common.hops': '{count} hops',\n 'common.allCategories': 'All categories',\n 'common.memories': '{count} memories',\n 'common.edges': '{count} edges',\n 'common.count': '{count}',\n 'common.showing': 'Showing {visible} / {total}',\n 'common.showMore': 'Show {count} more',\n 'header.backToConversation': 'Back to chat',\n 'header.checking': 'Checking',\n 'header.connected': 'Connected',\n 'header.connectedWithCount': 'Connected · {count} active',\n 'header.directoryPending': 'Connected · directory pending',\n 'header.unavailable': 'Unavailable',\n 'header.notReady': 'Mnemon is not ready',\n 'workspace.viewing': 'Viewing workspace',\n 'workspace.selectorAria': 'Select a memory workspace to inspect',\n 'workspace.storageMode': 'Storage',\n 'workspace.storageModeAria': 'Storage location mode: {mode}',\n 'workspace.mismatchTitle': 'The inspected directory is not aligned with this session',\n 'workspace.mismatchShort': 'Not conversation workspace',\n 'workspace.mismatchDescription': 'Workbench actions target the inspected directory; agents, tools, and lifecycle hooks continue to use the current session directory.',\n 'workspace.selectedRoot': 'Viewing: {root}',\n 'workspace.effectiveRoot': 'Effective: {root}',\n 'workspace.align': 'Align to conversation',\n 'telemetry.aria': 'Memory statistics',\n 'telemetry.title': 'Memory statistics',\n 'telemetry.memories': 'Active memories',\n 'telemetry.graph': 'Active graph',\n 'telemetry.entities': 'Active entities',\n 'telemetry.spaces': 'Spaces',\n 'sidebar.activeSpaces': 'Active Memory Spaces',\n 'overview.title': 'Memory Spaces',\n 'overview.description': 'Control the global read boundary and inspect all active Memory Spaces in one live four-graph snapshot.',\n 'overview.pageDescription': 'Inspect directory settings, storage health, and the live relation graph for every active Memory Space.',\n 'overview.interval': 'Every 15 seconds',\n 'overview.syncing': 'Syncing…',\n 'overview.syncNow': 'Sync now',\n 'overview.directory': 'Memory Space Directory',\n 'overview.directory.description': 'Activation controls reads only. Writes may target any space and automatically activate an inactive target.',\n 'overview.directory.waiting': 'Waiting for directory',\n 'overview.directory.unsynced': 'Directory not synchronized',\n 'overview.directory.unsyncedBadge': 'Directory pending',\n 'overview.storageHealthy': 'Storage healthy',\n 'overview.storageUnhealthy': 'Storage unavailable',\n 'overview.toggleAria': '{name} read toggle',\n 'overview.toggling': 'Switching',\n 'overview.noDescription': 'No routing description yet.',\n 'overview.unsyncedTitle': 'Memory Space directory is not synchronized',\n 'overview.unsyncedShort': 'The Web client and DSH Host are using different contracts. Restart the Host to register existing Stores.',\n 'overview.unsyncedLong': 'The Host is still using the previous plugin contract. Restart DSH to rediscover existing Stores; no .db file will be deleted.',\n 'overview.emptyTitle': 'No Memory Spaces yet',\n 'overview.emptyShort': 'Create the first space and distill durable context into it.',\n 'overview.emptyLong': 'Create a Memory Space above. Its first write will activate it and add it to the live snapshot.',\n 'overview.noActiveTitle': 'No active Memory Spaces',\n 'overview.noActiveText': 'Enable read access for at least one space to aggregate its live graph here.',\n 'overview.noContentTitle': 'Active spaces have no content yet',\n 'overview.noContentText': 'Distill durable context into a space to populate nodes and relations.',\n 'overview.create': '+ Create empty Memory Space',\n 'overview.createTitle': 'Create Memory Space',\n 'overview.createName': 'New Memory Space name',\n 'overview.createNamePlaceholder': 'Name',\n 'overview.createDescription': 'New Memory Space description',\n 'overview.createDescriptionPlaceholder': 'Describe what belongs here and when it should be recalled',\n 'overview.creating': 'Creating…',\n 'overview.createAction': 'Create',\n 'overview.editBody': 'Edit',\n 'overview.editBodyAria': 'Edit {name}',\n 'overview.editName': 'Name',\n 'overview.editDescription': 'Routing description',\n 'overview.saveBody': 'Save',\n 'overview.savingBody': 'Saving…',\n 'overview.deleteBody': 'Delete',\n 'overview.deleteBodyAria': 'Delete {name}',\n 'overview.deleteTitle': 'Delete “{name}”?',\n 'overview.deleteWarning': 'This permanently deletes the Memory Space and every memory and relation it contains. This cannot be undone.',\n 'overview.deleteAction': 'Delete permanently',\n 'overview.deletingBody': 'Deleting…',\n 'overview.snapshot': 'Live multi-space snapshot',\n 'overview.waitingSnapshot': 'Waiting for the first snapshot',\n 'overview.updatedAt': 'Updated at {time}',\n 'overview.edgeScope': 'Space scope',\n 'overview.edgeTemporal': 'Temporal',\n 'overview.edgeSemantic': 'Semantic',\n 'overview.edgeCausal': 'Causal',\n 'overview.edgeEntity': 'Entity relation',\n 'overview.graphComposition': '{spaces} spaces · {memories} memories · {entities} entities',\n 'overview.graphCount': 'Showing {visible} / {total} elements',\n 'overview.graphEdges': '{count} graph edges',\n 'overview.inspector': 'Memory details',\n 'overview.inspectorSpace': 'Memory Space details',\n 'overview.inspectorEntity': 'Entity details',\n 'overview.selectNode': 'Select a graph element',\n 'overview.selectNodeText': 'Inspect the exact context for a Memory Space, entity, or memory.',\n 'overview.closeInspector': 'Close node details',\n 'overview.memoryId': 'Memory ID',\n 'overview.spaceId': 'Memory Space ID',\n 'overview.containedMemories': 'Contained memories',\n 'overview.entityMentions': 'Indexed mentions',\n 'overview.exploreNode': 'Recall around this',\n 'overview.previewAria': 'View full content',\n 'overview.previewTitle': 'Full content',\n 'overview.loading': 'Synchronizing the directory and multi-space graph…',\n 'runtime.title': 'Runtime Memory',\n 'runtime.description': 'Manage compact hot memory loaded into every turn. A single control plane owns structured data and projects USER.md and MEMORY.md.',\n 'runtime.total': '{count} hot memories',\n 'runtime.entriesAria': 'Runtime memory list',\n 'runtime.scopeAria': 'Runtime memory scope',\n 'runtime.scopeAll': 'All',\n 'runtime.filterAria': 'Filter runtime memory',\n 'runtime.filterPlaceholder': 'Filter by content…',\n 'runtime.noMatch': 'No hot memory matches the current scope and query.',\n 'runtime.refresh': 'Refresh',\n 'runtime.hotContext': 'Every-turn context',\n 'runtime.addTitle': 'Add hot memory',\n 'runtime.addDescription': 'Keep stable, frequently useful information here; Mnemon Memory Spaces remain the durable archive.',\n 'runtime.content': 'Runtime memory content',\n 'runtime.placeholder': 'Enter one compact, self-contained fact that will remain useful…',\n 'runtime.target': 'Target',\n 'runtime.importance': 'Importance',\n 'runtime.saving': 'Working…',\n 'runtime.addButton': 'Add memory',\n 'runtime.addAction': 'Add',\n 'runtime.target.user': 'User Profile',\n 'runtime.target.user.description': 'Identity, role, habits, communication preferences, and explicit collaboration requirements. Capacity maintenance stays local and never enters a Memory Space.',\n 'runtime.target.memory': 'Working Memory',\n 'runtime.target.memory.description': 'Projects, environment, decisions, conventions, tool behavior, and reusable lessons. At capacity, entries are routed into one or more topic-specific Memory Spaces.',\n 'runtime.importance.critical': 'Critical',\n 'runtime.importance.normal': 'Normal',\n 'runtime.importance.low': 'Low',\n 'runtime.empty': 'No hot memory in this target yet.',\n 'runtime.editContent': 'Edit runtime memory',\n 'runtime.editAction': 'Edit',\n 'runtime.saveEdit': 'Save change',\n 'runtime.removeAction': 'Remove',\n 'runtime.removeConfirm': 'Remove this hot-memory entry?',\n 'runtime.removeTitle': 'Remove runtime memory?',\n 'runtime.removeWarning': 'After removal, this content will no longer load with every turn. This action cannot be undone.',\n 'runtime.result.add': 'Added to {target} · {count} entries',\n 'runtime.result.replace': 'Updated {target} · {count} entries',\n 'runtime.result.remove': 'Removed from {target} · {count} entries',\n 'runtime.result.maintenance': 'Capacity maintenance complete: archived to {spaces}, then updated {target} · {count} entries',\n 'runtime.result.localCompaction': 'Local profile compaction complete: no Memory Space write; updated {target} · {count} entries',\n 'runtime.readOnly': 'This deployment is read only. Hot memory still enters context but cannot be changed here.',\n 'runtime.footnote': 'memories.json is the only source of truth. The control plane generates both Markdown files; do not edit them directly.',\n 'documents.title': 'Project Documents',\n 'documents.description': 'Maintain structured project documents in the current workspace. Active documents support near-field search; before the 10 MB limit is exceeded, the least-recently-used document is indexed in Mnemon and moved to the archive.',\n 'documents.capacity': '{used} / {limit}',\n 'documents.refresh': 'Refresh',\n 'documents.summary': 'Document storage summary',\n 'documents.active': 'Active',\n 'documents.activeHint': 'Near-field search scope',\n 'documents.archivedCount': 'Archive',\n 'documents.archivedHint': 'Excluded from active capacity',\n 'documents.activeCapacity': 'Active capacity',\n 'documents.capacityHint': 'Measured from actual UTF-8 files',\n 'documents.searchAria': 'Search project documents',\n 'documents.searchPlaceholder': 'Search designs, investigations, procedures, or handoffs…',\n 'documents.search': 'Search',\n 'documents.scope': 'Document scope',\n 'documents.new': 'New document',\n 'documents.newTitle': 'Create managed document',\n 'documents.editTitle': 'Edit active document',\n 'documents.editorHint': 'The control plane generates frontmatter, hashes, and revisions. Project source files stay read only.',\n 'documents.managedCopy': 'Managed copy',\n 'documents.name': 'Title',\n 'documents.routing': 'Retrieval description',\n 'documents.sources': 'Source paths',\n 'documents.sourcesPlaceholder': 'src/index.ts, docs/architecture.md',\n 'documents.markdown': 'Markdown content',\n 'documents.saving': 'Saving…',\n 'documents.create': 'Create document',\n 'documents.save': 'Save revision',\n 'documents.created': 'Active document created.',\n 'documents.createdAfterArchive': 'Archived {count} older document(s), then created the active document.',\n 'documents.updated': 'New document revision saved.',\n 'documents.updatedAfterArchive': 'Archived {count} older document(s), then saved the revision.',\n 'documents.archived': 'Mnemon cold index created and document archived; Memory Spaces: {spaces}',\n 'documents.list': 'Project document list',\n 'documents.activeList': 'Active directory',\n 'documents.archiveList': 'Archive directory',\n 'documents.noDescription': 'No retrieval description.',\n 'documents.missing': 'File missing',\n 'documents.emptyActive': 'No active documents yet',\n 'documents.emptyActiveText': 'Complex work is reviewed after it reaches the activity-score gate, or you can create a Document above.',\n 'documents.emptyArchived': 'No archives yet',\n 'documents.emptyArchivedText': 'Only documents with a completed Mnemon index are moved here.',\n 'documents.reader': 'Document reader',\n 'documents.selectTitle': 'Select a document',\n 'documents.selectText': 'Read active project knowledge or follow a Mnemon reference to an archived original.',\n 'documents.coldArchive': 'Archived original',\n 'documents.edit': 'Edit',\n 'documents.path': 'Managed path',\n 'documents.revision': 'Revision',\n 'documents.hash': 'Content hash',\n 'documents.size': 'File size',\n 'documents.archiveReceipt': 'Mnemon cold-index receipt',\n 'documents.archiveTitle': 'Move to archive',\n 'documents.archiveDescription': 'A restricted subagent first stores a searchable Mnemon summary and exact path. The original moves only after that succeeds.',\n 'documents.archive': 'Archive',\n 'documents.archiveConfirm': 'Create the Mnemon index and archive this document?',\n 'documents.archiving': 'Indexing and moving…',\n 'documents.archiveNow': 'Confirm archive',\n 'documents.footnote': '`.mnemon/documents/index.json` is the control-plane source of truth. active stays at or below 10 MB, archived is excluded, and project source files are never modified.',\n 'graph.layoutAria': 'Graph layout',\n 'graph.layoutNatural': 'Natural layout',\n 'graph.layoutUniform': 'Uniform layout',\n 'graph.layoutCustom': 'Custom layout',\n 'graph.layoutStatus': 'Layout: {layout}',\n 'graph.draggable': '{layout} · draggable',\n 'graph.naturalAction': 'Natural spread',\n 'graph.uniformAction': 'Uniform reset',\n 'graph.aria': 'Mnemon live memory graph with {nodes} elements and {edges} edges',\n 'graph.kindSpace': 'Memory Space',\n 'graph.kindEntity': 'Entity',\n 'card.confirmAria': 'Confirm forgetting memory',\n 'card.confirmText': 'Soft-delete this memory?',\n 'card.processing': 'Processing…',\n 'card.confirmForget': 'Confirm forget',\n 'card.related': 'View related',\n 'card.clone': 'Create from this',\n 'card.forget': 'Forget',\n 'turnTail.label': 'Turn memory',\n 'turnTail.recall': 'recalled {count}',\n 'turnTail.write': 'wrote {count}',\n 'turnTail.documents': 'document search {count}',\n 'turnTail.inspect': 'inspected {count}',\n 'turnTail.failed': 'failed {count}',\n 'turnTail.toolList': 'Memory tools this turn',\n 'turnTail.openTool': 'Open the Memory page for {tool}',\n 'saveAction.button': 'Save to memory',\n 'saveAction.tooltip': 'Save this reply to memory',\n 'saveAction.title': 'Confirm save to memory',\n 'saveAction.hint': 'The subagent decides whether it qualifies, then dedupes, distills, chooses a Memory Space, and writes without filling the main conversation context.',\n 'saveAction.fetching': 'Extracting message text…',\n 'saveAction.missing': 'Could not extract this message text from the session log.',\n 'saveAction.candidate': 'Candidate (editable)',\n 'saveAction.truncated': 'This reply is long; only the first {limit} characters are loaded here.',\n 'saveAction.submit': 'Confirm and send to memory subagent',\n 'saveAction.submitting': 'Dispatching…',\n 'saveAction.result': 'Memory subagent: {summary}',\n 'saveAction.failed': 'Dispatch failed: {error}',\n 'saveAction.readOnly': 'This deployment is read only; memory writes are disabled.',\n 'saveAction.close': 'Close',\n 'search.title': 'Recall Memory',\n 'search.description': 'Query raw Mnemon evidence directly, then optionally ask an Agent to answer from those matches only.',\n 'search.maxResults': 'Up to {count} results',\n 'search.placeholder': 'Why did we choose SQLite? What release conventions apply?',\n 'search.queryAria': 'Memory query',\n 'search.categoryAria': 'Memory category',\n 'search.strategy': 'Strategy',\n 'search.modeAria': 'Recall mode',\n 'search.modeSmart': 'Graph-enhanced recall',\n 'search.modeKeyword': 'Keyword search',\n 'search.modeBasic': 'Basic match',\n 'search.searching': 'Recalling…',\n 'search.action': 'Direct search',\n 'search.agentAction': 'Ask Agent',\n 'search.agentSearching': 'Agent analyzing…',\n 'search.agentAnswer': 'Agent answer',\n 'search.agentAnswerHint': 'Grounded in the recalled evidence below',\n 'search.startTitle': 'Start with a focused question',\n 'search.startText': 'A focused entity, decision, or timeline is more reliable than loading the whole database.',\n 'search.emptyTitle': 'No matches',\n 'search.emptyText': 'Try a more specific entity, decision, or timeline keyword.',\n 'search.results': 'Raw recalled evidence',\n 'search.related': 'Related memories',\n 'search.closeRelated': 'Close related memories',\n 'search.traversing': 'Traversing the graph…',\n 'search.noRelated': 'No related nodes found within two hops.',\n 'entities.title': 'Entity Explorer',\n 'entities.description': 'Query Mnemon directly for an entity\\'s facts, decisions, and context.',\n 'entities.count': '{count} active entities',\n 'entities.nameAria': 'Entity name',\n 'entities.placeholder': 'Enter any entity…',\n 'entities.action': 'Explore',\n 'entities.top': 'Top entities',\n 'entities.frequency': 'By frequency',\n 'entities.emptyRail': 'Entities appear here after memories with entity metadata are stored.',\n 'entities.loading': 'Recalling entity relations…',\n 'entities.selectTitle': 'Select or enter an entity',\n 'entities.selectText': 'The entity view aggregates related memories instead of relying on literal matching.',\n 'entities.emptyTitle': 'No related memories',\n 'entities.emptyText': 'Try the full name or another entity alias.',\n 'remember.title': 'Distill Memory',\n 'remember.description': 'An isolated memory subagent selects a Memory Space, checks duplicates, distills the candidate, and completes the write without filling the main conversation context.',\n 'remember.worker': 'Memory subagent',\n 'remember.readOnlyTitle': 'Read-only mode',\n 'remember.readOnlyText': 'This deployment disables memory writes. Change and save the DSH Mnemon configuration to enable them.',\n 'remember.flowTitle': 'What the memory subagent does',\n 'remember.routeTitle': 'Choose ownership',\n 'remember.routeText': 'Select an existing Memory Space or recognize a durable new scope',\n 'remember.dedupeTitle': 'Search and deduplicate',\n 'remember.dedupeText': 'Identify duplicates, additions, or conflicts with existing memories',\n 'remember.writeTitle': 'Write structured memory',\n 'remember.writeText': 'Distill content and metadata, create useful relations, and return a receipt',\n 'remember.flowText': 'The subagent only receives Mnemon tools, keeping the raw directory and retrieval process out of the main context.',\n 'remember.delegateTitle': 'Send to memory subagent',\n 'remember.noSession': 'No live session',\n 'remember.ready': 'Subagent ready',\n 'remember.candidate': 'Candidate',\n 'remember.candidateAria': 'Memory candidate',\n 'remember.placeholder': 'Enter background, preferences, decisions, or insights worth retaining across tasks. The model decides whether they qualify.',\n 'remember.sessionHint': 'This view is not bound to a live session, so it cannot start a memory subagent.',\n 'remember.processing': 'Memory subagent is working…',\n 'remember.action': 'Evaluate and distill',\n 'remember.advanced': 'Advanced human constraints',\n 'remember.advancedHint': 'Constrain the target Memory Space and metadata',\n 'remember.expand': 'Expand',\n 'remember.target': 'Target Memory Space',\n 'remember.entities': 'Entities (comma-separated)',\n 'remember.tags': 'Tags (comma-separated)',\n 'remember.advancedText': 'Advanced options constrain the subagent; they do not bypass supervision or duplicate checks.',\n 'remember.saving': 'Subagent is writing…',\n 'remember.advancedAction': 'Distill with constraints',\n 'remember.skipped': 'The memory subagent decided not to write',\n 'remember.completed': 'The memory subagent completed processing',\n 'remember.processed': 'Memory subagent processed: {action}',\n 'remember.dispatchFailed': 'Dispatch failed: {error}',\n 'remember.saveFailed': 'Save failed: {error}',\n 'content.title': 'Memory Content',\n 'content.description': 'Browse active Memory Spaces without recall side effects. Every item identifies its owning space and remains maintainable.',\n 'content.count': '{count} memories',\n 'content.filterAria': 'Filter memory content',\n 'content.filterPlaceholder': 'Filter by content or exact ID…',\n 'content.categoryAria': 'Memory category',\n 'content.apply': 'Apply filters',\n 'content.notice': 'The list reads active graph snapshots without increasing recall access counts.',\n 'content.showing': 'Showing {visible} / {total}',\n 'content.showMore': 'Show {count} more',\n 'content.emptyTitle': 'No matching memories',\n 'content.emptyText': 'Clear the filters or distill the first durable memory.',\n 'status.title': 'System Status',\n 'status.description': 'Mnemon engine, three-tier storage, and the current read/write root. DSH deployment owns connection configuration.',\n 'status.nominal': 'System nominal',\n 'status.checkRequired': 'Check required',\n 'status.rechecking': 'Checking…',\n 'status.recheck': 'Check again',\n 'status.aria': 'Mnemon runtime status',\n 'status.engine': 'Memory engine',\n 'status.engineConnected': 'Mnemon connected',\n 'status.engineUnavailable': 'Mnemon unavailable',\n 'status.engineChecking': 'Checking the local engine',\n 'status.versionWaiting': 'Waiting for version',\n 'versions.checkAction': 'Check versions',\n 'versions.title': 'Check and update versions',\n 'versions.description': 'Check Mnemon CLI and dsh-mnemon. Updates are offered only for a recognized, supported installation.',\n 'versions.checking': 'Checking remote repositories for new versions…',\n 'versions.checkingShort': 'Checking…',\n 'versions.recheck': 'Check again',\n 'versions.failed': 'Version operation failed',\n 'versions.timeout': 'The version check timed out. Check the network and try again.',\n 'versions.current': 'Up to date',\n 'versions.available': 'Update available',\n 'versions.unknown': 'Cannot verify',\n 'versions.installed': 'Installed',\n 'versions.latest': 'Latest',\n 'versions.executable': 'Executable',\n 'versions.profileLocation': 'Profile · {name}',\n 'versions.sourceLocation': 'Source',\n 'versions.linkSourceLocation': 'Source · Profile {name}',\n 'versions.packageLocation': 'Package directory',\n 'versions.update': 'Update',\n 'versions.updating': 'Updating…',\n 'versions.updated': '{name} updated',\n 'versions.alreadyCurrent': 'Already on the latest version',\n 'versions.restartRequired': 'Restart dsh web to load the new dsh-mnemon plugin code.',\n 'versions.checkedAt': 'Checked at {time}',\n 'versions.latestUnavailable': 'The remote latest version is unavailable. Check the network and try again.',\n 'versions.modeHomebrew': 'Homebrew',\n 'versions.modeGo': 'Go install',\n 'versions.modeNpm': 'DSH Profile',\n 'versions.modeLink': 'Local link',\n 'versions.modeManual': 'Manual',\n 'versions.modeMissing': 'Missing',\n 'versions.hintHomebrew': 'Managed by Homebrew; an available release can be safely updated here.',\n 'versions.hintBrewMissing': 'A Homebrew installation was detected, but the brew command is unavailable.',\n 'versions.hintGo': 'Managed by go install; an available release can be safely updated here.',\n 'versions.hintPnpm': 'Managed by the current DSH Profile; restart dsh web after updating.',\n 'versions.hintPnpmMissing': 'A DSH Profile installation was detected, but the pnpm command is unavailable.',\n 'versions.hintLink': 'This is a local linked development build. Pull and build in the source directory to preserve local changes.',\n 'versions.hintInstall': 'Mnemon CLI was not found. Install it and place mnemon on PATH, or set MNEMON_CLI_PATH / mnemon.cliPath.',\n 'versions.hintManual': 'The installation source cannot be identified safely. Update it using the original installation method.',\n 'status.spaces': 'Memory Spaces',\n 'status.activeRatio': '{active} / {total} active',\n 'status.runtime': 'Runtime',\n 'status.runtimeRatio': '{user} user · {memory} project',\n 'status.runtimeBytes': '{bytes} used',\n 'status.runtimeWaiting': 'Waiting',\n 'status.runtimeWaitingDetail': 'Awaiting the Host storage inventory',\n 'status.directoryUnsynced': 'Directory not synchronized',\n 'status.activeMemories': '{count} active memories',\n 'status.documents': 'Project Documents',\n 'status.documentsWaiting': 'Waiting for workspace',\n 'status.documentsSession': 'Available after binding a live session',\n 'status.documentRatio': '{active} active · {archived} archived',\n 'status.documentUsage': '{used} / {limit} active capacity',\n 'status.storageDomains': 'Storage Domains',\n 'status.storageDomainsText': 'The current selection is the shared directory boundary for runtime memory, Memory Spaces, and project Documents.',\n 'status.storageBrowseOnly': 'Browsing does not switch writes',\n 'status.storageScopeAria': 'Select a storage domain to inspect',\n 'status.storageGlobal': 'Global',\n 'status.storageWorkspace': 'Workspace',\n 'status.storageCustom': 'Custom',\n 'status.storageCurrent': 'Current read/write',\n 'status.storageWaiting': 'Reading storage-domain directories…',\n 'status.storageCustomUnset': 'No custom directory is configured. This view exposes only a custom root already configured and active in DSH.',\n 'status.storageWorkspaceUnavailable': 'The current session has no available workspace directory.',\n 'status.storageActiveRoot': 'Current read/write root',\n 'status.storageViewedRoot': 'Viewed root',\n 'status.storageAvailable': 'Directory available',\n 'status.storageNotCreated': 'Directory not created',\n 'status.storageRuntime': 'Runtime Memory',\n 'status.storageBodies': 'Memory Spaces',\n 'status.storageDocuments': 'Project Documents',\n 'status.storageState': 'Background State',\n 'status.storageReady': 'Ready',\n 'status.storageEmpty': 'Empty',\n 'status.storageMissing': 'Not created',\n 'status.storageInvalid': 'Repair needed',\n 'status.storageItems': 'items',\n 'status.storageRuntimeDetail': 'USER {user} · MEMORY {memory}',\n 'status.storageBodiesDetail': '{active} active · {databases} databases',\n 'status.storageDocumentsDetail': '{active} active · {archived} archived',\n 'status.storageStateReady': 'Review watermarks are persisted',\n 'status.storageStateVolatile': 'Review state is currently owned by the Host process',\n 'status.storageFootnote': 'Current read/write root: {root}. Change the scope only in DSH Settings → Memory System; it applies live after Save and never auto-migrates, merges, or deletes old content.',\n 'config.aria': 'Mnemon memory system configuration',\n 'config.tab': 'Mnemon',\n 'config.title': 'Memory system settings',\n 'config.description': 'Configure runtime memory, project Documents, Memory Spaces, and the DSH interface together. Changes apply immediately after Save.',\n 'config.unsaved': 'Unsaved changes',\n 'config.ready': 'Saved and applied live',\n 'config.noticeBefore': 'Configuration is written to',\n 'config.noticeAfter': '. All settings apply live after Save. Switching scopes never migrates existing content automatically.',\n 'config.displayTitle': 'Display mode',\n 'config.displayDescription': 'Choose where the memory system appears in DSH Web. Switching modes applies immediately.',\n 'config.displayAria': 'Memory system display mode',\n 'config.displaySidebar': 'Sidebar',\n 'config.displaySidebarHint': 'Dedicated workspace in the sidebar',\n 'config.displayBuildin': 'Buildin',\n 'config.displayBuildinHint': 'Built-in tab in the conversation area',\n 'config.storageTitle': 'Storage location',\n 'config.storageDescription': 'Choose where Mnemon keeps runtime memory, project Documents, and Memory Spaces. Save atomically switches the active root.',\n 'config.scope': 'Storage scope',\n 'config.scopeHint': 'Global is shared across workspaces; Workspace is isolated by the current DSH session; Custom uses the directory below.',\n 'config.scopeAria': 'Mnemon storage scope',\n 'config.global': 'Global',\n 'config.workspace': 'Workspace',\n 'config.custom': 'Custom',\n 'config.customHintShort': 'Enter one directory',\n 'config.customSelected': 'Directory entered',\n 'config.customPack': 'Custom Pack',\n 'config.customPackAria': 'Select a custom Mnemon Pack',\n 'config.customPackRequired': 'Select or add a custom Pack.',\n 'config.customDefaultName': 'Custom Pack',\n 'config.noCustomPacks': 'No Packs configured',\n 'config.addPack': 'Add Pack',\n 'config.cancelAddPack': 'Cancel adding',\n 'config.removePack': 'Remove',\n 'config.customPackNameAria': 'New Pack name',\n 'config.customPackNamePlaceholder': 'For example: Project memory',\n 'config.newPackDirectoryAria': 'New Pack data directory',\n 'config.confirmAddPack': 'Add to list',\n 'config.customDirectory': 'Custom directory',\n 'config.customHint': 'The complete Mnemon data domain lives here.',\n 'config.customAria': 'Mnemon custom data directory',\n 'config.customDirectoryHint': 'Enter a directory path on the DSH Host; only this one directory is stored.',\n 'config.customPlaceholder': 'For example: /data/mnemon or ~/mnemon',\n 'config.invalidScope': 'The storage scope is invalid.',\n 'config.customRequired': 'A data directory is required for custom storage.',\n 'config.customAbsolute': 'The custom directory must be absolute or start with ~/. Windows drive and UNC paths are supported.',\n 'config.saveFailed': 'Save failed: {error}',\n 'config.readOnly': 'Plugin settings are read-only in this deployment.',\n 'config.discard': 'Discard changes',\n 'config.saving': 'Saving…',\n 'config.save': 'Save',\n 'config.overridden': 'Overridden',\n 'config.interactionTitle': 'Conversation interface',\n 'config.interactionLive': 'Live',\n 'config.interactionHint': 'Changes apply live after saving. Disabling an item restores DSH\\'s native presentation.',\n 'config.interactionTurnBar': 'Turn memory bar',\n 'config.interactionTurnBarHint': 'Show recall, write, and search activity below each turn',\n 'config.interactionSaveAction': 'Save to memory action',\n 'config.interactionSaveActionHint': 'Add supervised memory distillation beside finalized replies',\n 'config.interactionOn': 'Enabled',\n 'config.packTitle': 'Backup and migration',\n 'config.packDescription': 'Export or import the complete effective directory. Imports always target the location shown below.',\n 'config.packActiveTarget': 'Active directory',\n 'config.packTargetLoading': 'Loading the running target…',\n 'config.packUnavailable': 'This DSH host does not provide the Mnemon ZIP backup channel.',\n 'config.packFull': 'Complete Pack',\n 'config.packFullHint': 'Runtime, Documents, and Memory Spaces',\n 'config.packRuntime': 'Runtime',\n 'config.packRuntimeHint': 'Hot memory and USER / MEMORY projections',\n 'config.packDocuments': 'Documents',\n 'config.packDocumentsHint': 'Project documents, archive, and index',\n 'config.packMemorySpaces': 'Memory Spaces',\n 'config.packMemorySpacesHint': 'Catalog and mnemon.db databases',\n 'config.packExport': 'Export',\n 'config.packImport': 'Import',\n 'config.packExporting': 'Exporting…',\n 'config.packInspecting': 'Inspecting…',\n 'config.packImporting': 'Importing…',\n 'config.packChooseFile': 'Choose a {component} file',\n 'config.packFormatHint': 'Uses .mnemonpack throughout (ZIP + manifest + SHA-256). Each Memory Space remains a separate mnemon.db inside the Pack.',\n 'config.packPreviewEyebrow': 'Import preview',\n 'config.packUnnamed': 'Unnamed Mnemon Pack',\n 'config.packSource': 'Source',\n 'config.packDestination': 'Import into',\n 'config.packArchiveSize': 'Archive / expanded',\n 'config.packComponents': 'Components to import',\n 'config.packComponentSummary': '{items} items · {files} files · {size}',\n 'config.packHasData': 'Target has data',\n 'config.packMerge': 'Safe merge (recommended)',\n 'config.packMergeHint': 'Keeps existing data; conflicting items are deduplicated or assigned new IDs.',\n 'config.packMergeAction': 'Merge import',\n 'config.packReplace': 'Replace current components?',\n 'config.packReplaceHint': 'Selected components are atomically replaced by the Pack; other components are unchanged.',\n 'config.packReplaceAction': 'Replace import…',\n 'config.packConfirmReplace': 'Confirm replace',\n 'config.packComponentMissing': 'This Pack does not contain the selected component.',\n 'config.packExported': 'Exported {file} ({size}).',\n 'config.packImported': 'Imported {components} into {root}.',\n 'config.packFailed': 'ZIP operation failed: {error}',\n 'config.packSimpleDescription': 'Export the complete effective directory as one ZIP, or safely merge-restore it from a ZIP.',\n 'config.packWholeZip': 'Current directory ZIP',\n 'config.packWholeZipHint': 'Includes Runtime, Documents, and every Memory Space.',\n 'config.packImportZip': 'Import ZIP',\n 'config.packExportZip': 'Export ZIP',\n 'config.packChooseZip': 'Choose a Mnemon backup ZIP',\n 'config.packUnnamedZip': 'Mnemon backup.zip',\n 'config.packZipReady': 'Verified · {components} components · {items} items · {size}',\n 'config.packImportZipAction': 'Safe import',\n 'config.packImportedWhole': 'Safely merged the ZIP into {root}.',\n} satisfies Record\n\nexport type MnemonTranslate = (key: MnemonKey, params?: Record) => string\n\nfunction interpolate(dictionary: Record, key: MnemonKey, params?: Record): string {\n const template = dictionary[key]\n if (params === undefined) return template\n return template.replace(/\\{(\\w+)\\}/g, (match, name: string) => name in params ? String(params[name]) : match)\n}\n\nexport function translateZh(key: MnemonKey, params?: Record): string {\n return interpolate(zh, key, params)\n}\n\nexport function translateEn(key: MnemonKey, params?: Record): string {\n return interpolate(en, key, params)\n}\n","export const MNEMON_READ_CHANNEL = '/dsh-mnemon-read'\nexport const MNEMON_WRITE_CHANNEL = '/dsh-mnemon-write'\nexport const MNEMON_PACK_CHANNEL = '/dsh-mnemon-pack'\n","import type { ClientConnectionHandle } from '../contracts.ts'\nimport { MNEMON_PACK_CHANNEL, MNEMON_READ_CHANNEL, MNEMON_WRITE_CHANNEL } from '../channels.ts'\nimport type { MemoryBody } from '../memory-bodies.ts'\nimport type { DocumentMutation, DocumentMutationResult, DocumentSearchResult, DocumentSnapshot, DocumentView } from '../documents.ts'\nimport type { RuntimeMemoryImportance, RuntimeMemoryMutationResult, RuntimeMemorySnapshot, RuntimeMemoryTarget } from '../runtime-memory.ts'\nimport type { EntityView, Insight, MemoryBodyCatalog, MemoryGraphSnapshot, MemoryListRequest, MemoryListView, RememberRequest, SearchRequest, StatusView } from '../service.ts'\nimport type { AssistantMessageText, TurnMemoryActivity, TurnMemoryActivitySnapshot } from '../lifecycle.ts'\nimport type { MnemonPackExport, MnemonPackImportResult, MnemonPackPreview } from '../pack.ts'\nimport type { VersionComponentId, VersionStatus, VersionUpdateResult } from '../version-updates.ts'\n\ninterface TurnActivityCacheEntry {\n cursor: number\n activities: Map\n inFlight?: Promise\n}\n\nconst turnActivityCache = new WeakMap>()\n\nasync function loadTurnActivities(connection: ClientConnectionHandle, sessionId: string | undefined, requiredCursor: number): Promise {\n let sessions = turnActivityCache.get(connection)\n if (sessions === undefined) {\n sessions = new Map()\n turnActivityCache.set(connection, sessions)\n }\n const key = sessionId ?? ''\n let entry = sessions.get(key)\n if (entry === undefined) {\n entry = { cursor: -1, activities: new Map() }\n sessions.set(key, entry)\n }\n if (entry.cursor >= requiredCursor) return { cursor: entry.cursor, activities: [...entry.activities.values()] }\n if (entry.inFlight !== undefined) {\n const snapshot = await entry.inFlight\n return snapshot.cursor >= requiredCursor ? snapshot : loadTurnActivities(connection, sessionId, requiredCursor)\n }\n\n const request = connection.rpc.call(MNEMON_READ_CHANNEL, 'turn-activities', sessionId === undefined ? {} : { sessionId })\n .then(response => {\n if (!response.ok) throw new Error(response.error.message)\n const snapshot = response.value as TurnMemoryActivitySnapshot\n entry!.cursor = snapshot.cursor\n entry!.activities = new Map(snapshot.activities.map(activity => [activity.turn, activity]))\n return snapshot\n })\n .finally(() => { delete entry!.inFlight })\n entry.inFlight = request\n return request\n}\n\nexport interface SearchResponse {\n query: string\n mode: string\n results: Insight[]\n hint?: string\n}\n\nexport interface AgentSearchResponse extends SearchResponse {\n answer: string\n citations: string[]\n delegation: { runId: string; provider: string }\n}\n\nexport class MnemonClient {\n constructor(private readonly connection: ClientConnectionHandle, private readonly sessionId?: string, private readonly workspaceId?: string) {}\n\n private async call(channel: string, endpoint: string, payload: unknown): Promise {\n const response = await this.connection.rpc.call(channel, endpoint, payload)\n if (!response.ok) throw new Error(response.error.message)\n return response.value as T\n }\n\n private scoped>(payload: T = {} as T): T & { sessionId?: string; workspaceId?: string } {\n return {\n ...payload,\n ...(this.sessionId === undefined ? {} : { sessionId: this.sessionId }),\n ...(this.workspaceId === undefined ? {} : { workspaceId: this.workspaceId }),\n }\n }\n\n status(): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'status', this.scoped())\n }\n\n versions(): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'versions', {})\n }\n\n updateVersion(component: VersionComponentId): Promise {\n return this.call(MNEMON_WRITE_CHANNEL, 'version-update', { component })\n }\n\n runtimeMemory(): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'runtime-memory', this.scoped())\n }\n\n mutateRuntimeMemory(request: {\n action: 'add' | 'replace' | 'remove'\n target: RuntimeMemoryTarget\n content?: string\n old_text?: string\n importance?: RuntimeMemoryImportance\n }): Promise {\n return this.call(MNEMON_WRITE_CHANNEL, 'runtime-memory', this.scoped(request))\n }\n\n documents(): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'documents', this.scoped())\n }\n\n document(id: string): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'document', this.scoped({ id }))\n }\n\n searchDocuments(query: string, includeArchived = false, limit = 50): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'document-search', this.scoped({ query, includeArchived, limit }))\n }\n\n mutateDocument(request: DocumentMutation): Promise {\n return this.call(MNEMON_WRITE_CHANNEL, 'document', this.scoped(request))\n }\n\n archiveDocument(id: string): Promise {\n return this.call(MNEMON_WRITE_CHANNEL, 'document', this.scoped({ action: 'archive', id }))\n }\n\n bodies(): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'bodies', this.scoped())\n }\n\n graph(memoryBodyIds?: string[]): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'graph', this.scoped(memoryBodyIds === undefined ? {} : { memoryBodyIds }))\n }\n\n list(request: MemoryListRequest = {}): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'list', this.scoped(request))\n }\n\n entities(entity?: string, limit?: number): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'entities', this.scoped({\n ...(entity === undefined ? {} : { entity }),\n ...(limit === undefined ? {} : { limit }),\n }))\n }\n\n search(request: SearchRequest): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'search', this.scoped(request))\n }\n\n agentSearch(request: SearchRequest): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'agent-search', this.scoped(request))\n }\n\n related(id: string, memoryBodyId?: string): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'related', this.scoped({ id, depth: 2, ...(memoryBodyId === undefined ? {} : { memoryBodyId }) }))\n }\n\n /** Settled memory-tool activity of one turn, shared across all mounted tails. */\n async turnActivity(turn: number, cursor = 0): Promise {\n const snapshot = await loadTurnActivities(this.connection, this.sessionId, cursor)\n return snapshot.activities.find(activity => activity.turn === turn) ?? null\n }\n\n /** Plain text of one finalized assistant message; null when absent or empty. */\n assistantMessageText(messageId: string): Promise {\n return this.call(MNEMON_READ_CHANNEL, 'assistant-message', { sessionId: this.sessionId, messageId })\n }\n\n remember(request: RememberRequest): Promise> {\n return this.call(MNEMON_WRITE_CHANNEL, 'remember', this.scoped(request))\n }\n\n supervise(content: string, idempotencyKey?: string): Promise<{ delegated: true; sessionId: string; runId: string; provider: string; summary: string; action: string; memoryBodyIds: string[] }> {\n return this.call(MNEMON_WRITE_CHANNEL, 'supervise', this.scoped({ content, ...(idempotencyKey === undefined ? {} : { idempotencyKey }) }))\n }\n\n forget(id: string, memoryBodyId?: string): Promise> {\n return this.call(MNEMON_WRITE_CHANNEL, 'forget', this.scoped({ id, ...(memoryBodyId === undefined ? {} : { memoryBodyId }) }))\n }\n\n createBody(request: { name: string; description: string; active?: boolean }): Promise {\n return this.call(MNEMON_WRITE_CHANNEL, 'body-create', this.scoped(request))\n }\n\n updateBody(memoryBodyId: string, request: { name?: string; description?: string; active?: boolean }): Promise {\n return this.call(MNEMON_WRITE_CHANNEL, 'body-update', this.scoped({ memoryBodyId, ...request }))\n }\n\n deleteBody(memoryBodyId: string): Promise {\n return this.call(MNEMON_WRITE_CHANNEL, 'body-delete', this.scoped({ memoryBodyId }))\n }\n\n packTarget(): Promise<{ root: string; scope: 'global' | 'workspace' | 'custom' }> {\n return this.call(MNEMON_PACK_CHANNEL, 'target', {})\n }\n\n exportPack(): Promise {\n return this.call(MNEMON_PACK_CHANNEL, 'export', {})\n }\n\n inspectPack(base64: string, fileName?: string): Promise {\n return this.call(MNEMON_PACK_CHANNEL, 'inspect', { base64, ...(fileName === undefined ? {} : { fileName }) })\n }\n\n importPack(base64: string): Promise {\n return this.call(MNEMON_PACK_CHANNEL, 'import', { base64 })\n }\n}\n","import { useEffect, useMemo, useRef, useState, type ChangeEvent, type JSX } from 'react'\nimport type { ClientConnectionHandle } from '../contracts.ts'\nimport type { MnemonPackExport, MnemonPackPreview } from '../pack.ts'\nimport { MnemonClient } from './api.ts'\nimport type { MnemonTranslate } from './locales.ts'\nimport css from './MnemonSettingsCard.module.css'\n\ninterface MnemonPackSectionProps {\n connection?: ClientConnectionHandle\n refreshKey: number\n t: MnemonTranslate\n}\n\ninterface PendingZip {\n base64: string\n preview: MnemonPackPreview\n}\n\nconst ZIP_ACCEPT = '.zip,application/zip'\n\nfunction fileBase64(file: File): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.onerror = () => reject(reader.error ?? new Error('Could not read ZIP file'))\n reader.onload = () => {\n const value = reader.result\n if (typeof value !== 'string') return reject(new Error('Could not read ZIP file'))\n const separator = value.indexOf(',')\n if (separator < 0) return reject(new Error('ZIP file encoding is invalid'))\n resolve(value.slice(separator + 1))\n }\n reader.readAsDataURL(file)\n })\n}\n\nfunction bytesFromBase64(base64: string): ArrayBuffer {\n const binary = atob(base64)\n const buffer = new ArrayBuffer(binary.length)\n const bytes = new Uint8Array(buffer)\n for (let index = 0; index < binary.length; index += 1) bytes[index] = binary.charCodeAt(index)\n return buffer\n}\n\nfunction download(result: MnemonPackExport): void {\n const blob = new Blob([bytesFromBase64(result.base64)], { type: result.mimeType })\n const url = URL.createObjectURL(blob)\n const anchor = document.createElement('a')\n anchor.href = url; anchor.download = result.fileName; anchor.hidden = true\n document.body.append(anchor); anchor.click(); anchor.remove()\n window.setTimeout(() => URL.revokeObjectURL(url), 0)\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\nexport function MnemonPackSection({ connection, refreshKey, t }: MnemonPackSectionProps): JSX.Element {\n const client = useMemo(() => connection === undefined ? null : new MnemonClient(connection), [connection])\n const input = useRef(null)\n const [target, setTarget] = useState<{ root: string; scope: 'global' | 'workspace' | 'custom' } | null>(null)\n const [pending, setPending] = useState(null)\n const [busy, setBusy] = useState<'target' | 'export' | 'inspect' | 'import' | null>(client === null ? null : 'target')\n const [failed, setFailed] = useState(null)\n const [notice, setNotice] = useState(null)\n\n useEffect(() => {\n let active = true\n if (client === null) return\n setBusy('target'); setFailed(null)\n void client.packTarget().then(value => { if (active) setTarget(value) }).catch(reason => {\n if (active) setFailed(reason instanceof Error ? reason.message : String(reason))\n }).finally(() => { if (active) setBusy(null) })\n return () => { active = false }\n }, [client, refreshKey])\n\n const scopeLabel = (scope: string): string => scope === 'global' ? t('config.global') : scope === 'workspace' ? t('config.workspace') : t('config.custom')\n\n const exportZip = async (): Promise => {\n if (client === null || busy !== null) return\n setBusy('export'); setFailed(null); setNotice(null)\n try {\n const result = await client.exportPack()\n download(result)\n setNotice(t('config.packExported', { file: result.fileName, size: formatBytes(result.bytes) }))\n } catch (reason) {\n setFailed(reason instanceof Error ? reason.message : String(reason))\n } finally { setBusy(null) }\n }\n\n const inspectZip = async (file: File): Promise => {\n if (client === null || busy !== null) return\n setBusy('inspect'); setFailed(null); setNotice(null); setPending(null)\n try {\n const base64 = await fileBase64(file)\n const preview = await client.inspectPack(base64, file.name)\n setPending({ base64, preview })\n } catch (reason) {\n setFailed(reason instanceof Error ? reason.message : String(reason))\n } finally { setBusy(null) }\n }\n\n const chooseFile = (event: ChangeEvent): void => {\n const file = event.currentTarget.files?.[0]\n event.currentTarget.value = ''\n if (file !== undefined) void inspectZip(file)\n }\n\n const importZip = async (): Promise => {\n if (client === null || pending === null || busy !== null) return\n setBusy('import'); setFailed(null); setNotice(null)\n try {\n const result = await client.importPack(pending.base64)\n setNotice(t('config.packImportedWhole', { root: result.targetRoot }))\n setPending(null)\n } catch (reason) {\n setFailed(reason instanceof Error ? reason.message : String(reason))\n } finally { setBusy(null) }\n }\n\n const items = pending?.preview.manifest.summary.reduce((sum, component) => sum + component.items, 0) ?? 0\n\n return
\n

{t('config.packTitle')}

{t('config.packSimpleDescription')}

\n
\n
\n {t('config.packWholeZip')}\n {t('config.packWholeZipHint')}\n {target?.root ?? t('config.packTargetLoading')}\n {target !== null && {scopeLabel(target.scope)}}\n
\n
\n \n \n
\n \n
\n {pending !== null &&
\n
{pending.preview.fileName ?? t('config.packUnnamedZip')}{t('config.packZipReady', { components: pending.preview.manifest.components.length, items, size: formatBytes(pending.preview.archiveBytes) })}
\n \n \n
}\n
\n {failed !== null &&

{t('config.packFailed', { error: failed })}

}\n {notice !== null &&

{notice}

}\n {client === null &&

{t('config.packUnavailable')}

}\n
\n
\n}\n","import { useEffect, useMemo, useState, useSyncExternalStore, type JSX } from 'react'\nimport type { Config, InteractionConfig } from '../config.ts'\nimport type { ClientConnectionHandle, ClientSettingsScope, ClientSettingsSnapshot, SettingsOperation } from '../contracts.ts'\nimport css from './MnemonSettingsCard.module.css'\nimport { translateZh, type MnemonTranslate } from './locales.ts'\nimport { MnemonPackSection } from './MnemonPackSection.tsx'\n\nexport interface MnemonSettingsCardProps {\n scope: ClientSettingsScope\n /** Separate live namespace; falls back to the core scope for older hosts. */\n interactionScope?: ClientSettingsScope\n /** Loopback RPC used for whole-directory ZIP backup and restore. */\n connection?: ClientConnectionHandle\n t?: MnemonTranslate\n}\n\ntype CoreField = 'displayMode' | 'storageScope' | 'dataDir'\ntype InteractionField = 'turnBar' | 'saveAction'\ntype Field = CoreField | InteractionField\ninterface Draft extends Record {\n displayMode: 'sidebar' | 'buildin'\n storageScope: string\n dataDir: string\n}\n\nconst CORE_FIELDS: CoreField[] = ['displayMode', 'storageScope', 'dataDir']\nconst INTERACTION_FIELDS: InteractionField[] = ['turnBar', 'saveAction']\n\nfunction record(value: unknown): Record {\n return typeof value === 'object' && value !== null && !Array.isArray(value) ? value as Record : {}\n}\n\nfunction legacyPackDirectory(value: Config): string {\n const packs = value.customPacks ?? []\n return packs.find(pack => pack.id === value.customPackId)?.dataDir?.trim()\n ?? (packs.length === 1 ? packs[0]?.dataDir?.trim() : undefined)\n ?? ''\n}\n\nfunction coreDraft(value: Config | undefined): Pick {\n const resolved = value ?? {}\n const dataDir = resolved.dataDir?.trim() || legacyPackDirectory(resolved)\n return {\n displayMode: resolved.displayMode ?? 'sidebar',\n storageScope: resolved.storageScope ?? (dataDir === '' ? 'global' : 'custom'),\n dataDir,\n }\n}\n\nfunction interactionDraft(value: InteractionConfig | undefined): Pick {\n return {\n turnBar: value?.turnBar !== false,\n saveAction: value?.saveAction !== false,\n }\n}\n\nfunction draftOf(core: Config | undefined, interaction: InteractionConfig | undefined): Draft {\n return { ...coreDraft(core), ...interactionDraft(interaction) }\n}\n\nfunction validation(t: MnemonTranslate, draft: Draft): string | null {\n if (!['global', 'workspace', 'custom'].includes(draft.storageScope)) return t('config.invalidScope')\n if (draft.storageScope !== 'custom') return null\n const directory = draft.dataDir.trim()\n if (directory === '') return t('config.customRequired')\n const posixAbsolute = directory.startsWith('/')\n const homeRelative = directory === '~' || directory.startsWith('~/')\n const windowsDriveAbsolute = /^[a-zA-Z]:[\\\\/]/.test(directory)\n const windowsUncAbsolute = /^\\\\\\\\[^\\\\/]+[\\\\/][^\\\\/]+/.test(directory)\n if (!posixAbsolute && !homeRelative && !windowsDriveAbsolute && !windowsUncAbsolute) return t('config.customAbsolute')\n return null\n}\n\nfunction useScope(scope: ClientSettingsScope): ClientSettingsSnapshot {\n const subscribe = useMemo(() => scope.subscribe.bind(scope), [scope])\n const getSnapshot = useMemo(() => scope.getSnapshot.bind(scope), [scope])\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n}\n\nfunction operations(fields: readonly Field[], dirty: ReadonlySet, draft: Draft): SettingsOperation[] {\n return fields.flatMap((field): SettingsOperation[] => {\n if (!dirty.has(field)) return []\n if (field === 'dataDir' && draft.dataDir.trim() === '') return [{ op: 'unset', path: [field] }]\n const value = draft[field]\n return [{ op: 'set', path: [field], value: typeof value === 'string' ? value.trim() : value }]\n })\n}\n\nasync function commit(scope: ClientSettingsScope, edits: SettingsOperation[]): Promise {\n if (scope.mutate !== undefined) return scope.mutate(edits)\n for (const edit of edits) {\n if (edit.path.length === 1) {\n if (edit.op === 'set') await scope.set(edit.path[0]!, edit.value)\n else await scope.unset(edit.path[0]!)\n } else if (edit.op === 'set') await scope.setPath(edit.path, edit.value)\n else await scope.unsetPath(edit.path)\n }\n}\n\n/** Dedicated Mnemon page contributed directly to DSH's settings navigation. */\nexport function MnemonSettingsCard({ scope, interactionScope: suppliedInteractionScope, connection, t = translateZh }: MnemonSettingsCardProps): JSX.Element | null {\n const interactionScope = suppliedInteractionScope ?? scope as unknown as ClientSettingsScope\n const coreSnapshot = useScope(scope)\n const interactionSnapshot = useScope(interactionScope)\n const [draft, setDraft] = useState(() => draftOf(coreSnapshot.value, interactionSnapshot.value))\n const [dirty, setDirty] = useState>(() => new Set())\n const [saving, setSaving] = useState(false)\n const [failed, setFailed] = useState(null)\n const [applied, setApplied] = useState(false)\n const [targetRevision, setTargetRevision] = useState(0)\n\n useEffect(() => {\n if (dirty.size === 0) setDraft(draftOf(coreSnapshot.value, interactionSnapshot.value))\n }, [dirty.size, coreSnapshot.value, interactionSnapshot.value])\n\n const coreUser = useMemo(() => record(coreSnapshot.user), [coreSnapshot.user])\n const error = validation(t, draft)\n const loading = coreSnapshot.status === 'loading' || interactionSnapshot.status === 'loading'\n const writable = coreSnapshot.writable && interactionSnapshot.writable\n\n if (coreSnapshot.status === 'unavailable' && interactionSnapshot.status === 'unavailable') return null\n\n const edit = (field: Field, value: string | boolean): void => {\n setDraft(current => ({ ...current, [field]: value }))\n setDirty(current => new Set(current).add(field))\n setFailed(null)\n setApplied(false)\n }\n\n const discard = (): void => {\n setDraft(draftOf(coreSnapshot.value, interactionSnapshot.value))\n setDirty(new Set()); setFailed(null); setApplied(false)\n }\n\n const save = async (): Promise => {\n if (error !== null || dirty.size === 0 || saving || !writable) return\n setSaving(true); setFailed(null)\n try {\n const coreOps = operations(CORE_FIELDS, dirty, draft)\n if (coreOps.length > 0) {\n if (Object.hasOwn(coreUser, 'customPackId')) coreOps.push({ op: 'unset', path: ['customPackId'] })\n if (Object.hasOwn(coreUser, 'customPacks')) coreOps.push({ op: 'unset', path: ['customPacks'] })\n }\n const interactionOps = operations(INTERACTION_FIELDS, dirty, draft)\n await Promise.all([\n ...(coreOps.length === 0 ? [] : [commit(scope, coreOps)]),\n ...(interactionOps.length === 0 ? [] : [commit(interactionScope, interactionOps)]),\n ])\n setDirty(new Set())\n setApplied(true)\n if (coreOps.length > 0) setTargetRevision(revision => revision + 1)\n } catch (reason) {\n setFailed(reason instanceof Error ? reason.message : String(reason))\n } finally {\n setSaving(false)\n }\n }\n\n const coreDisabled = loading || saving || !coreSnapshot.writable\n const interactionDisabled = loading || saving || !interactionSnapshot.writable\n return (\n
\n {loading ?

{t('common.loading')}

: <>\n
\n

{t('config.title')}

\n

{t('config.description')}

\n
\n\n
\n
\n

{t('config.displayTitle')}

{t('config.displayDescription')}

\n
\n
\n edit('displayMode', 'sidebar')} />\n edit('displayMode', 'buildin')} />\n
\n
\n\n
\n
\n

{t('config.storageTitle')}

{t('config.storageDescription')}

\n
\n
\n edit('storageScope', 'global')} />\n /.mnemon\" checked={draft.storageScope === 'workspace'} disabled={coreDisabled} onChange={() => edit('storageScope', 'workspace')} />\n edit('storageScope', 'custom')} />\n
\n {draft.storageScope === 'custom' &&
\n
{t('config.customDirectory')}{t('config.customDirectoryHint')}
\n
\n edit('dataDir', event.target.value)}\n />\n
\n
}\n
\n\n
\n
\n

{t('config.interactionTitle')}

{t('config.interactionHint')}

\n
\n
\n edit('turnBar', value)} />\n edit('saveAction', value)} />\n
\n
\n\n \n\n
\n {error !== null &&

{error}

}\n {failed !== null &&

{t('config.saveFailed', { error: failed })}

}\n {applied &&

{t('config.ready')}

}\n {!writable &&

{t('config.readOnly')}

}\n
\n\n
0 ? css.actionsVisible : ''}`} aria-live=\"polite\">\n {t('config.unsaved')}\n
\n
\n

{t('config.noticeBefore')} .dsh/settings.yaml{t('config.noticeAfter')}

\n }\n
\n )\n}\n\nfunction ChoiceCard(props: { id: string; name: string; label: string; detail: string; checked: boolean; disabled: boolean; onChange: () => void }): JSX.Element {\n return \n}\n\nfunction ToggleRow(props: { id: string; label: string; hint: string; checked: boolean; disabled: boolean; onChange: (value: boolean) => void }): JSX.Element {\n return \n}\n","/**\n * Lightweight anchor channel between conversation-scoped Mnemon surfaces\n * (turnTail bar and assistant actions) and the Mnemon workspace view.\n *\n * A dispatch asks the Mnemon view to open a page (optionally with a seed) in\n * the session the dispatch came from. The view may not be mounted when the\n * user clicks — the dispatch is then held per session and consumed the next\n * time that session's Mnemon view mounts, so switching to the Memory System\n * tab afterwards still lands on the requested page.\n */\n\n/** Pages of the Mnemon workspace, mirroring MnemonView's internal Page union. */\nexport type MnemonAnchorPage = 'overview' | 'runtime' | 'documents' | 'explore' | 'entities' | 'remember' | 'list' | 'status'\n\nexport interface MnemonAnchor {\n /** Target workspace page. */\n page: MnemonAnchorPage\n /** Optional context seed (recall query for explore, candidate text for remember). */\n seed?: string\n /** Session the dispatch belongs to; omitted dispatches address every session. */\n sessionId?: string\n}\n\nexport const MNEMON_ANCHOR_EVENT = 'mnemon:anchor'\n\nconst pendingBySession = new Map()\n\nfunction keyOf(sessionId?: string): string {\n return sessionId === undefined || sessionId === '' ? '*' : sessionId\n}\n\n/** Ask the Mnemon view to open a page; held until a matching view consumes it. */\nexport function dispatchMnemonAnchor(anchor: MnemonAnchor): void {\n pendingBySession.set(keyOf(anchor.sessionId), anchor)\n window.dispatchEvent(new CustomEvent(MNEMON_ANCHOR_EVENT, { detail: anchor }))\n}\n\n/** Take the anchor held for this session (usually at mount time), or null. */\nexport function consumeMnemonAnchor(sessionId?: string): MnemonAnchor | null {\n const key = keyOf(sessionId)\n const anchor = pendingBySession.get(key)\n if (anchor === undefined) return null\n pendingBySession.delete(key)\n return anchor\n}\n\n/** Subscribe to anchors addressed to this session; returns an unsubscribe. */\nexport function subscribeMnemonAnchor(sessionId: string | undefined, onAnchor: (anchor: MnemonAnchor) => void): () => void {\n const key = keyOf(sessionId)\n const handler = (event: Event): void => {\n const anchor = (event as CustomEvent).detail\n if (anchor !== undefined && keyOf(anchor.sessionId) === key) {\n // A mounted view consumes the event immediately. Clear only this exact\n // dispatch so a newer anchor cannot be lost if listeners navigate again.\n if (pendingBySession.get(key) === anchor) pendingBySession.delete(key)\n onAnchor(anchor)\n }\n }\n window.addEventListener(MNEMON_ANCHOR_EVENT, handler)\n return () => window.removeEventListener(MNEMON_ANCHOR_EVENT, handler)\n}\n","import*as r from\"react\";function n(){return n=Object.assign?Object.assign.bind():function(r){for(var n=1;n\",lt:\"<\",nbsp:\" \",quot:\"“\"},i=[\"style\",\"script\",\"pre\"],o=[\"src\",\"href\",\"data\",\"formAction\",\"srcDoc\",\"action\"],c=/([-A-Z0-9_:]+)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|(?:\\{((?:\\\\.|{[^}]*?}|[^}])*)\\})))?/gi,f=/\\n{2,}$/,l=/^(\\s*>[\\s\\S]*?)(?=\\n\\n|$)/,_=/^ *> ?/gm,d=/^(?:\\[!([^\\]]*)\\]\\n)?([\\s\\S]*)/,s=/^ {2,}\\n/,v=/^(?:([-*_])( *\\1){2,}) *(?:\\n *)+\\n/,p=/^(?: {1,3})?(`{3,}|~{3,}) *(\\S+)? *([^\\n]*?)?\\n([\\s\\S]*?)(?:\\1\\n?|$)/,y=/^(?: {4}[^\\n]+\\n*)+(?:\\n *)+\\n?/,h=/^(`+)((?:\\\\`|(?!\\1)`|[^`])+)\\1/,g=/^(?:\\n *)*\\n/,m=/\\r\\n?/g,k=/^\\[\\^([^\\]]+)](:(.*)((\\n+ {4,}.*)|(\\n(?!\\[\\^).+))*)/,x=/^\\[\\^([^\\]]+)]/,q=/\\f/g,b=/^---[ \\t]*\\n(.|\\n)*\\n---[ \\t]*\\n/,S=/^\\s*?\\[(x|\\s)\\]/,z=/^ *(#{1,6}) *([^\\n]+?)(?: +#*)?(?:\\n *)*(?:\\n|$)/,$=/^ *(#{1,6}) +([^\\n]+?)(?: +#*)?(?:\\n *)*(?:\\n|$)/,E=/^([^\\n]+)\\n *(=|-)\\2{2,} *\\n/,A=/^ *(?!<[a-z][^ >/]* ?\\/>)<([a-z][^ >/]*) ?((?:[^>]*[^/])?)>\\n?(\\s*(?:<\\1[^>]*?>[\\s\\S]*?<\\/\\1>|(?!<\\1\\b)[\\s\\S])*?)<\\/\\1>(?!<\\/\\1>)\\n*/i,R=/&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});/gi,B=/^)/,L=/^(data|aria|x)-[a-z_][a-z\\d_.-]*$/,O=/^ *<([a-z][a-z0-9:]*)(?:\\s+((?:<.*?>|[^>])*))?\\/?>(?!<\\/\\1>)(\\s*\\n)?/i,j=/^\\{.*\\}$/,C=/^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/,I=/^<([^ >]+[:@\\/][^ >]+)>/,T=/-([a-z])?/gi,M=/^(\\|.*)\\n(?: *(\\|? *[-:]+ *\\|[-| :]*)\\n((?:.*\\|.*\\n)*))?\\n?/,w=/^[^\\n]+(?: \\n|\\n{2,})/,D=/^\\[([^\\]]*)\\]:\\s+]+)>?\\s*(\"([^\"]*)\")?/,F=/^!\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/,P=/^\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/,Z=/(\\n|^[-*]\\s|^#|^ {2,}|^-{2,}|^>\\s)/,N=/\\t/g,G=/(^ *\\||\\| *$)/g,U=/^ *:-+: *$/,V=/^ *:-+ *$/,H=/^ *-+: *$/,Q=function(r){return\"(?=[\\\\s\\\\S]+?\\\\1\"+(r?\"\\\\1\":\"\")+\")\"},W=\"((?:\\\\[.*?\\\\][([].*?[)\\\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|\\\\\\\\\\\\1|[\\\\s\\\\S])+?)\",J=RegExp(\"^([*_])\\\\1\"+Q(1)+W+\"\\\\1\\\\1(?!\\\\1)\"),K=RegExp(\"^([*_])\"+Q(0)+W+\"\\\\1(?!\\\\1)\"),X=RegExp(\"^(==)\"+Q(0)+W+\"\\\\1\"),Y=RegExp(\"^(~~)\"+Q(0)+W+\"\\\\1\"),rr=/^(:[a-zA-Z0-9-_]+:)/,nr=/^\\\\([^0-9A-Za-z\\s])/,er=/\\\\([^0-9A-Za-z\\s])/g,tr=/^[\\s\\S](?:(?! \\n|[0-9]\\.|http)[^=*_~\\-\\n:<`\\\\\\[!])*/,ur=/^\\n+/,ar=/^([ \\t]*)/,ir=/(?:^|\\n)( *)$/,or=\"(?:\\\\d+\\\\.)\",cr=\"(?:[*+-])\";function fr(r){return\"( *)(\"+(1===r?or:cr)+\") +\"}var lr=fr(1),_r=fr(2);function dr(r){return RegExp(\"^\"+(1===r?lr:_r))}var sr=dr(1),vr=dr(2);function pr(r){return RegExp(\"^\"+(1===r?lr:_r)+\"[^\\\\n]*(?:\\\\n(?!\\\\1\"+(1===r?or:cr)+\" )[^\\\\n]*)*(\\\\n|$)\",\"gm\")}var yr=pr(1),hr=pr(2);function gr(r){var n=1===r?or:cr;return RegExp(\"^( *)(\"+n+\") [\\\\s\\\\S]+?(?:\\\\n{2,}(?! )(?!\\\\1\"+n+\" (?!\"+n+\" ))\\\\n*|\\\\s*\\\\n*$)\")}var mr=gr(1),kr=gr(2);function xr(r,n){var e=1===n,t=e?mr:kr,u=e?yr:hr,a=e?sr:vr;return{t:function(r){return a.test(r)},u:jr(function(r,n){var e=ir.exec(n.prevCapture);return e&&(n.list||!n.inline&&!n.simple)?t.exec(r=e[1]+r):null}),i:1,o:function(r,n,t){var i=e?+r[2]:void 0,o=r[0].replace(f,\"\\n\").match(u),c=!1;return{items:o.map(function(r,e){var u=a.exec(r)[0].length,i=RegExp(\"^ {1,\"+u+\"}\",\"gm\"),f=r.replace(i,\"\").replace(a,\"\"),l=e===o.length-1,_=-1!==f.indexOf(\"\\n\\n\")||l&&c;c=_;var d,s=t.inline,v=t.list;t.list=!0,_?(t.inline=!1,d=zr(f)+\"\\n\\n\"):(t.inline=!0,d=zr(f));var p=n(d,t);return t.inline=s,t.list=v,p}),ordered:e,start:i}},l:function(n,e,t){return r(n.ordered?\"ol\":\"ul\",{key:t.key,start:\"20\"===n.type?n.start:void 0},n.items.map(function(n,u){return r(\"li\",{key:u},e(n,t))}))}}}var qr=RegExp(\"^\\\\[((?:\\\\[[^\\\\[\\\\]]*(?:\\\\[[^\\\\[\\\\]]*\\\\][^\\\\[\\\\]]*)*\\\\]|[^\\\\[\\\\]])*)\\\\]\\\\(\\\\s*?(?:\\\\s+['\\\"]([\\\\s\\\\S]*?)['\\\"])?\\\\s*\\\\)\"),br=/^!\\[(.*?)\\]\\( *((?:\\([^)]*\\)|[^() ])*) *\"?([^)\"]*)?\"?\\)/;function Sr(r){return\"string\"==typeof r}function zr(r){for(var n=r.length;n>0&&r[n-1]<=\" \";)n--;return r.slice(0,n)}function $r(r,n){return r.startsWith(n)}function Er(r,n,e){if(Array.isArray(e)){for(var t=0;t1||t.forceWrapper)u=e;else{if(1===e.length)return\"string\"==typeof(u=e[0])?er(\"span\",{key:\"outer\"},u):u;u=null}return V(a,{key:\"outer\"},u)}function or(r,n){if(!n||!n.trim())return null;var e=n.match(c);return e?e.reduce(function(n,e){var t=e.indexOf(\"=\");if(-1!==t){var a=function(r){return-1!==r.indexOf(\"-\")&&null===r.match(L)&&(r=r.replace(T,function(r,n){return n.toUpperCase()})),r}(e.slice(0,t)).trim(),i=function(r){var n=r[0];return('\"'===n||\"'\"===n)&&r.length>=2&&r[r.length-1]===n?r.slice(1,-1):r}(e.slice(t+1).trim()),c=u[a]||a;if(\"ref\"===c)return n;var f=n[c]=function(r,n,e,t){return\"style\"===n?function(r){var n=[],e=\"\",t=!1,u=!1,a=\"\";if(!r)return n;for(var i=0;i0){var l=c.slice(0,f).trim(),_=c.slice(f+1).trim();n.push([l,_])}}e=\"\"}}var d=e.trim();if(d){var s=d.indexOf(\":\");if(s>0){var v=d.slice(0,s).trim(),p=d.slice(s+1).trim();n.push([v,p])}}return n}(e).reduce(function(n,e){var u=e[0],a=e[1];return n[u.replace(/(-[a-z])/g,function(r){return r[1].toUpperCase()})]=t(a,r,u),n},{}):-1!==o.indexOf(n)?t(Fr(e),r,n):(e.match(j)&&(e=Fr(e.slice(1,e.length-1))),\"true\"===e||\"false\"!==e&&e)}(r,a,i,U);\"string\"==typeof f&&(A.test(f)||O.test(f))&&(n[c]=ir(f.trim()))}else\"style\"!==e&&(n[u[e]||e]=!0);return n},{}):null}var cr=[],fr={},lr=((f={})[0]={t:[\">\"],u:Tr(l),i:1,o:function(r,n,e){var t=r[0].replace(_,\"\").match(d);return{alert:t[1],children:n(t[2],e)}},l:function(r,n,e){var t={key:e.key};return r.alert&&(t.className=\"markdown-alert-\"+G(r.alert.toLowerCase(),Ar),r.children.unshift({attrs:{},children:[{type:\"27\",text:r.alert}],noInnerParse:!0,type:\"11\",tag:\"header\"})),er(\"blockquote\",t,n(r.children,e))}},f[1]={t:[\" \"],u:Mr(s),i:1,o:Ur,l:function(r,n,e){return er(\"br\",{key:e.key})}},f[2]={t:[\"--\",\"__\",\"**\",\"- \",\"* \",\"_ \"],u:Tr(v),i:1,o:Ur,l:function(r,n,e){return er(\"hr\",{key:e.key})}},f[3]={t:[\" \"],u:Tr(y),i:0,o:function(r){return{lang:void 0,text:Fr(zr(r[0].replace(/^ {4}/gm,\"\")))}},l:function(r,e,t){return er(\"pre\",{key:t.key},er(\"code\",n({},r.attrs,{className:r.lang?\"lang-\"+r.lang:\"\"}),r.text))}},f[4]={t:[\"```\",\"~~~\"],u:Tr(p),i:0,o:function(r){return{attrs:or(\"code\",r[3]||\"\"),lang:r[2]||void 0,text:r[4],type:\"3\"}}},f[5]={t:[\"`\"],u:Ir(h),i:3,o:function(r){return{text:Fr(r[2])}},l:function(r,n,e){return er(\"code\",{key:e.key},r.text)}},f[6]={t:[\"[^\"],u:Tr(k),i:0,o:function(r){return cr.push({footnote:r[2],identifier:r[1]}),{}},l:Vr},f[7]={t:[\"[^\"],u:Cr(x),i:1,o:function(r){return{target:\"#\"+G(r[1],Ar),text:r[1]}},l:function(r,n,e){return er(\"a\",{key:e.key,href:U(r.target,\"a\",\"href\")},er(\"sup\",{key:e.key},r.text))}},f[8]={t:[\"[ ]\",\"[x]\"],u:Cr(S),i:1,o:function(r){return{completed:\"x\"===r[1].toLowerCase()}},l:function(r,n,e){return er(\"input\",{checked:r.completed,key:e.key,readOnly:!0,type:\"checkbox\"})}},f[9]={t:[\"#\"],u:Tr(t.enforceAtxHeadings?$:z),i:1,o:function(r,n,e){return{children:Pr(n,r[2],e),id:G(r[2],Ar),level:r[1].length}},l:function(r,n,e){return er(\"h\"+r.level,{id:r.id,key:e.key},n(r.children,e))}},f[10]={t:function(r){var n=r.indexOf(\"\\n\");return n>0&&n=0||(u[e]=r[e]);return u}(n,e);return r.cloneElement(Jr(null==t?\"\":t,u),a)}export{t as RuleType,Jr as compiler,Dr as sanitizer,Ar as slugify};\n//# sourceMappingURL=index.module.js.map\n","import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { join } from 'node:path'\nimport type { JsonValue } from './contracts.ts'\nimport type { ResolvedConfig } from './config.ts'\nimport {\n MemoryBodyRegistry,\n type CreateMemoryBodyRequest,\n type MemoryBody,\n type UpdateMemoryBodyRequest,\n} from './memory-bodies.ts'\nimport type { MnemonRunner } from './runner.ts'\nimport type { LifecycleSnapshot } from './lifecycle.ts'\nimport type { DocumentSnapshot } from './documents.ts'\nimport type { StorageScopeCatalog } from './storage-scope.ts'\n\nexport const CATEGORIES = ['preference', 'decision', 'fact', 'insight', 'context', 'general'] as const\nexport type Category = typeof CATEGORIES[number]\nexport const SOURCES = ['user', 'agent', 'external'] as const\nexport type Source = typeof SOURCES[number]\nexport const EDGE_TYPES = ['temporal', 'semantic', 'causal', 'entity'] as const\nexport type EdgeType = typeof EDGE_TYPES[number]\nexport const INTENTS = ['WHY', 'WHEN', 'ENTITY', 'GENERAL'] as const\nexport type Intent = typeof INTENTS[number]\n\nexport interface Insight {\n id: string\n content: string\n category?: string\n importance?: number\n tags?: string[]\n entities?: string[]\n source?: string\n score?: number\n confidence?: string\n intent?: string\n matchedVia?: string\n createdAt?: string\n depth?: number\n edgeType?: string\n memoryBodyId?: string\n memoryBodyName?: string\n}\n\nexport interface SearchRequest {\n query: string\n mode?: 'smart' | 'keyword' | 'basic'\n limit?: number\n category?: Category\n source?: Source\n intent?: Intent\n memoryBodyIds?: string[]\n}\n\nexport interface RememberRequest {\n content: string\n category?: Category\n importance?: number\n tags?: string[]\n entities?: string[]\n source?: Source\n memoryBodyId?: string\n}\n\nexport interface MemoryBodyStats {\n totalInsights: number\n deletedInsights: number\n edgeCount: number\n oplogCount: number\n dbSizeBytes: number\n byCategory: Record\n topEntities: Array<{ entity: string; count: number }>\n}\n\nexport interface MemoryBodyView extends MemoryBody {\n healthy: boolean\n error?: string\n stats?: MemoryBodyStats\n}\n\nexport interface MemoryBodyCatalog {\n items: MemoryBodyView[]\n total: number\n activeCount: number\n directory: string\n generatedAt: string\n}\n\nexport interface StatusView {\n healthy: boolean\n error?: string\n version?: string\n dshMnemonVersion?: string\n cliPath: string\n commandFound: boolean\n dataDir: string\n store: string\n writeEnabled: boolean\n timeoutMs: number\n defaultRecallLimit: number\n memoryBodyDirectory: string\n memoryBodies: MemoryBodyView[]\n lifecycle?: LifecycleSnapshot\n documents?: DocumentSnapshot\n storage?: StorageScopeCatalog\n workspaceContext?: {\n mode: 'global' | 'workspace' | 'custom'\n selectedRoot: string\n effectiveRoot: string\n aligned: boolean\n selectedWorkspace?: { id: string; title: string; path: string }\n effectiveWorkspace?: { id: string; title: string; path: string }\n }\n stats?: MemoryBodyStats & { dbPath?: string }\n}\n\nexport interface MemoryGraphNode extends Insight {\n color: string\n graphId?: string\n kind?: 'memory' | 'entity' | 'space'\n memoryBodyIds?: string[]\n memoryBodyNames?: string[]\n occurrenceCount?: number\n}\n\nexport interface MemoryGraphEdge {\n sourceId: string\n targetId: string\n label: string\n color: string\n type?: EdgeType | 'scope'\n}\n\nexport interface MemoryGraphSnapshot {\n nodes: MemoryGraphNode[]\n edges: MemoryGraphEdge[]\n generatedAt: string\n memoryBodies?: Array>\n}\n\nexport interface MemoryListRequest {\n query?: string\n category?: Category\n limit?: number\n memoryBodyIds?: string[]\n}\n\nexport interface MemoryListView {\n items: MemoryGraphNode[]\n total: number\n generatedAt: string\n}\n\nexport interface EntityView {\n items: Array<{ entity: string; count: number }>\n insights: Insight[]\n selected?: string\n}\n\nfunction record(value: JsonValue | undefined): Record | undefined {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? value as Record\n : undefined\n}\n\nfunction text(value: JsonValue | undefined): string | undefined {\n return typeof value === 'string' ? value : undefined\n}\n\nfunction number(value: JsonValue | undefined): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\nfunction stringArray(value: JsonValue | undefined): string[] | undefined {\n if (!Array.isArray(value)) return undefined\n return value.filter((entry): entry is string => typeof entry === 'string')\n}\n\nfunction normalizeInsight(value: JsonValue): Insight | undefined {\n const item = record(value)\n if (item === undefined) return undefined\n // Mnemon <=0.1.2 returns full recall rows as\n // `{ insight: { id, content, ... }, score, intent, via, signals }`; newer\n // builds default to a compact flat row. Accept both without version gates.\n const nested = record(item.insight)\n const core = nested ?? item\n const id = text(core.id)\n const content = text(core.content)\n if (id === undefined || content === undefined) return undefined\n const insight: Insight = { id, content }\n const optionalText = {\n category: text(core.category),\n source: text(core.source),\n confidence: text(item.confidence),\n intent: text(item.intent),\n matchedVia: text(item.matched_via ?? item.via ?? item.via_edge_type),\n createdAt: text(core.created_at),\n edgeType: text(item.via_edge_type),\n }\n for (const [key, value] of Object.entries(optionalText)) if (value !== undefined) Object.assign(insight, { [key]: value })\n const optionalNumbers = {\n importance: number(core.importance),\n score: number(item.score),\n depth: number(item.depth),\n }\n for (const [key, value] of Object.entries(optionalNumbers)) if (value !== undefined) Object.assign(insight, { [key]: value })\n const tags = stringArray(core.tags)\n const entities = stringArray(core.entities)\n if (tags !== undefined) insight.tags = tags\n if (entities !== undefined) insight.entities = entities\n return insight\n}\n\nconst JS_STRING = '\"(?:\\\\\\\\.|[^\"\\\\\\\\])*\"'\nconst VIZ_NODE_PATTERN = new RegExp(`\\\\{id:(${JS_STRING}),label:(${JS_STRING}),title:(${JS_STRING}),color:(${JS_STRING}),font:\\\\{color:\"white\"\\\\}\\\\}`, 'g')\nconst VIZ_EDGE_PATTERN = new RegExp(`\\\\{from:(${JS_STRING}),to:(${JS_STRING}),label:(${JS_STRING}),color:\\\\{color:(${JS_STRING})\\\\},arrows:\"to\"`, 'g')\nconst EDGE_COLORS: Record = {\n '#aaaaaa': 'temporal',\n '#3498db': 'semantic',\n '#e74c3c': 'causal',\n '#2ecc71': 'entity',\n}\n\nfunction decodeJsString(value: string): string {\n const decoded = JSON.parse(value) as unknown\n if (typeof decoded !== 'string') throw new Error('Mnemon viz contained an invalid string')\n return decoded\n}\n\n/** Parse the official Mnemon vis.js export without executing its HTML or loading its CDN script. */\nexport function parseMemoryGraph(html: string, now = new Date()): MemoryGraphSnapshot {\n const nodes: MemoryGraphNode[] = []\n const edges: MemoryGraphEdge[] = []\n for (const match of html.matchAll(VIZ_NODE_PATTERN)) {\n const id = decodeJsString(match[1]!)\n const label = decodeJsString(match[2]!)\n const content = decodeJsString(match[3]!).replaceAll('\\\\n', '\\n')\n const color = decodeJsString(match[4]!)\n const category = /\\[([a-z_]+)\\]/i.exec(label)?.[1] ?? 'general'\n nodes.push({ id, content, category, color })\n }\n for (const match of html.matchAll(VIZ_EDGE_PATTERN)) {\n const color = decodeJsString(match[4]!)\n const type = EDGE_COLORS[color.toLowerCase()]\n edges.push({\n sourceId: decodeJsString(match[1]!),\n targetId: decodeJsString(match[2]!),\n label: decodeJsString(match[3]!),\n color,\n ...(type === undefined ? {} : { type }),\n })\n }\n if (!html.includes('var nodes = new vis.DataSet([')) throw new Error('Mnemon viz returned an unexpected HTML payload')\n return { nodes, edges, generatedAt: now.toISOString() }\n}\n\nfunction boundedInteger(value: number | undefined, fallback: number, min: number, max: number): number {\n if (value === undefined) return fallback\n if (!Number.isInteger(value) || value < min || value > max) throw new Error(`value must be an integer within ${min}..${max}`)\n return value\n}\n\nfunction required(value: string, label: string, max: number): string {\n const normalized = value.trim()\n if (normalized === '') throw new Error(`${label} is required`)\n if (normalized.length > max) throw new Error(`${label} is too long (max ${max} characters)`)\n return normalized\n}\n\nfunction allowed(value: T | undefined, values: readonly T[], label: string): T | undefined {\n if (value !== undefined && !values.includes(value)) {\n throw new Error(`${label} must be one of: ${values.join(', ')}`)\n }\n return value\n}\n\nfunction commaList(values: string[] | undefined, label: string, limit: number): string | undefined {\n if (values === undefined) return undefined\n const normalized = values.map(value => value.trim()).filter(value => value !== '')\n if (normalized.length > limit) throw new Error(`${label} accepts at most ${limit} values`)\n if (normalized.some(value => value.includes(','))) throw new Error(`${label} values cannot contain commas`)\n return normalized.length === 0 ? undefined : normalized.join(',')\n}\n\nexport class MnemonService {\n readonly memoryBodies: MemoryBodyRegistry\n\n constructor(readonly runner: MnemonRunner, readonly config: ResolvedConfig, memoryBodies?: MemoryBodyRegistry) {\n this.memoryBodies = memoryBodies ?? new MemoryBodyRegistry(runner)\n }\n\n async bodies(signal?: AbortSignal): Promise {\n const items: MemoryBodyView[] = []\n for (const body of this.memoryBodies.list()) items.push(await this.bodyStatus(body, signal))\n return {\n items,\n total: items.length,\n activeCount: items.filter(body => body.active).length,\n directory: this.memoryBodies.directory,\n generatedAt: new Date().toISOString(),\n }\n }\n\n async status(signal?: AbortSignal): Promise {\n const catalog = await this.bodies(signal)\n const active = catalog.items.filter(body => body.active)\n const base = {\n cliPath: this.runner.command,\n commandFound: this.runner.commandFound,\n dataDir: this.runner.effectiveDataDir(),\n store: active.map(body => body.id).join(', ') || 'none',\n writeEnabled: this.config.writeEnabled,\n timeoutMs: this.config.timeoutMs,\n defaultRecallLimit: this.config.defaultRecallLimit,\n memoryBodyDirectory: catalog.directory,\n memoryBodies: catalog.items,\n }\n try {\n const rawVersion = await this.runner.runText(['--version'], signal === undefined ? { globalFlags: false } : { signal, globalFlags: false })\n const healthyBodies = active.filter(body => body.healthy && body.stats !== undefined)\n const topEntities = new Map()\n const byCategory: Record = {}\n for (const body of healthyBodies) {\n for (const [category, count] of Object.entries(body.stats!.byCategory)) byCategory[category] = (byCategory[category] ?? 0) + count\n for (const entity of body.stats!.topEntities) topEntities.set(entity.entity, (topEntities.get(entity.entity) ?? 0) + entity.count)\n }\n const stats: StatusView['stats'] = {\n totalInsights: healthyBodies.reduce((total, body) => total + body.stats!.totalInsights, 0),\n deletedInsights: healthyBodies.reduce((total, body) => total + body.stats!.deletedInsights, 0),\n edgeCount: healthyBodies.reduce((total, body) => total + body.stats!.edgeCount, 0),\n oplogCount: healthyBodies.reduce((total, body) => total + body.stats!.oplogCount, 0),\n dbSizeBytes: healthyBodies.reduce((total, body) => total + body.stats!.dbSizeBytes, 0),\n byCategory,\n topEntities: [...topEntities].map(([entity, count]) => ({ entity, count })).sort((left, right) => right.count - left.count),\n ...(active.length === 1 ? { dbPath: active[0]!.dbPath } : {}),\n }\n const failed = active.filter(body => !body.healthy)\n return {\n healthy: failed.length === 0,\n ...base,\n version: rawVersion.trim().replace(/^mnemon version\\s+/i, ''),\n stats,\n ...(failed.length === 0 ? {} : { error: failed.map(body => `${body.name}: ${body.error ?? 'unavailable'}`).join('; ') }),\n }\n } catch (error) {\n return { healthy: false, ...base, error: error instanceof Error ? error.message : String(error) }\n }\n }\n\n async search(request: SearchRequest, signal?: AbortSignal): Promise<{ query: string; mode: string; results: Insight[]; hint?: string }> {\n const query = required(request.query, 'query', 2000)\n const limit = boundedInteger(request.limit, this.config.defaultRecallLimit, 1, 50)\n const mode = allowed(request.mode, ['smart', 'keyword', 'basic'] as const, 'mode') ?? 'smart'\n const category = allowed(request.category, CATEGORIES, 'category')\n const source = allowed(request.source, SOURCES, 'source')\n const intent = allowed(request.intent, INTENTS, 'intent')\n const bodies = this.readBodies(request.memoryBodyIds)\n const results: Insight[] = []\n const hints: string[] = []\n for (const body of bodies) {\n const args = mode === 'keyword'\n ? ['search', query, '--limit', String(limit)]\n : ['recall', query, '--limit', String(limit)]\n if (mode === 'basic') args.push('--basic')\n if (mode !== 'keyword') {\n if (category !== undefined) args.push('--cat', category)\n if (source !== undefined) args.push('--source', source)\n if (intent !== undefined) args.push('--intent', intent)\n }\n const payload = await this.runner.runJson(args, { ...(signal === undefined ? {} : { signal }), store: body.id })\n const wrapper = record(payload)\n const values = Array.isArray(payload) ? payload : Array.isArray(wrapper?.results) ? wrapper.results : []\n results.push(...values.map(normalizeInsight).filter((entry): entry is Insight => entry !== undefined).map(entry => this.annotate(entry, body)))\n const hint = text(wrapper?.hint)\n if (hint !== undefined) hints.push(`${body.name}: ${hint}`)\n }\n results.sort((left, right) => (right.score ?? 0) - (left.score ?? 0))\n return { query, mode, results: results.slice(0, limit), ...(hints.length === 0 ? {} : { hint: hints.join('\\n') }) }\n }\n\n async graph(signal?: AbortSignal, memoryBodyIds?: string[]): Promise {\n const bodies = this.readBodies(memoryBodyIds)\n const nodes: MemoryGraphNode[] = []\n const edges: MemoryGraphEdge[] = []\n for (const body of bodies) {\n const snapshot = await this.graphForBody(body, signal)\n const graphId = (id: string): string => `${body.id}:${id}`\n nodes.push(...snapshot.nodes.map(node => ({ ...this.annotate(node, body), color: node.color, graphId: graphId(node.id) })))\n edges.push(...snapshot.edges.map(edge => ({ ...edge, sourceId: graphId(edge.sourceId), targetId: graphId(edge.targetId) })))\n }\n return {\n nodes,\n edges,\n generatedAt: new Date().toISOString(),\n memoryBodies: bodies.map(({ id, name, active }) => ({ id, name, active })),\n }\n }\n\n async list(request: MemoryListRequest = {}, signal?: AbortSignal): Promise {\n const query = request.query?.trim().toLocaleLowerCase() ?? ''\n if (query.length > 500) throw new Error('query is too long (max 500 characters)')\n const category = allowed(request.category, CATEGORIES, 'category')\n const limit = boundedInteger(request.limit, 200, 1, 1000)\n const graph = await this.graph(signal, request.memoryBodyIds)\n const matches = graph.nodes.filter(node =>\n (category === undefined || node.category === category)\n && (query === '' || node.content.toLocaleLowerCase().includes(query) || node.id.toLocaleLowerCase().includes(query)),\n )\n return { items: matches.slice(0, limit), total: matches.length, generatedAt: graph.generatedAt }\n }\n\n async entities(entity?: string, limit?: number, signal?: AbortSignal): Promise {\n const status = await this.status(signal)\n const items = status.stats?.topEntities ?? []\n const selected = entity?.trim() ?? ''\n if (selected === '') return { items, insights: [] }\n if (selected.length > 200) throw new Error('entity is too long (max 200 characters)')\n const response = await this.search({ query: selected, intent: 'ENTITY', limit: boundedInteger(limit, 20, 1, 50) }, signal)\n return { items, selected, insights: response.results }\n }\n\n async remember(request: RememberRequest, signal?: AbortSignal): Promise {\n this.assertWritable()\n const body = this.writeBody(request.memoryBodyId)\n const content = required(request.content, 'content', 8000)\n const importance = boundedInteger(request.importance, 3, 1, 5)\n const category = allowed(request.category, CATEGORIES, 'category') ?? 'general'\n const source = allowed(request.source, SOURCES, 'source') ?? 'user'\n const args = ['remember', content, '--cat', category, '--imp', String(importance), '--source', source]\n const tags = commaList(request.tags, 'tags', 20)\n const entities = commaList(request.entities, 'entities', 50)\n if (tags !== undefined) args.push('--tags', tags)\n if (entities !== undefined) args.push('--entities', entities)\n const result = await this.runner.runJson(args, { ...(signal === undefined ? {} : { signal }), store: body.id })\n this.activateAfterWrite(body)\n return this.annotateResult(result, body)\n }\n\n async related(id: string, depth = 2, edge?: EdgeType, signal?: AbortSignal, memoryBodyId?: string): Promise {\n const body = this.readBody(memoryBodyId)\n const args = ['related', required(id, 'id', 200), '--depth', String(boundedInteger(depth, 2, 1, 5))]\n const selectedEdge = allowed(edge, EDGE_TYPES, 'edge')\n if (selectedEdge !== undefined) args.push('--edge', selectedEdge)\n const payload = await this.runner.runJson(args, { ...(signal === undefined ? {} : { signal }), store: body.id })\n if (!Array.isArray(payload)) return []\n return payload.map(normalizeInsight).filter((entry): entry is Insight => entry !== undefined).map(entry => this.annotate(entry, body))\n }\n\n async link(sourceId: string, targetId: string, type: EdgeType = 'semantic', weight = 0.5, reason?: string, signal?: AbortSignal, memoryBodyId?: string): Promise {\n this.assertWritable()\n const body = this.writeBody(memoryBodyId)\n if (!Number.isFinite(weight) || weight < 0 || weight > 1) throw new Error('weight must be within 0..1')\n const selectedType = allowed(type, EDGE_TYPES, 'type') ?? 'semantic'\n const args = ['link', required(sourceId, 'sourceId', 200), required(targetId, 'targetId', 200), '--type', selectedType, '--weight', String(weight)]\n if (reason !== undefined && reason.trim() !== '') args.push('--meta', JSON.stringify({ reason: required(reason, 'reason', 1000) }))\n const result = await this.runner.runJson(args, { ...(signal === undefined ? {} : { signal }), store: body.id })\n this.activateAfterWrite(body)\n return this.annotateResult(result, body)\n }\n\n async forget(id: string, signal?: AbortSignal, memoryBodyId?: string): Promise {\n this.assertWritable()\n const body = this.writeBody(memoryBodyId)\n const result = await this.runner.runJson(['forget', required(id, 'id', 200)], { ...(signal === undefined ? {} : { signal }), store: body.id })\n this.activateAfterWrite(body)\n return this.annotateResult(result, body)\n }\n\n async createBody(request: CreateMemoryBodyRequest, signal?: AbortSignal): Promise {\n this.assertWritable()\n return this.memoryBodies.create(request, signal)\n }\n\n updateBody(id: string, request: UpdateMemoryBodyRequest): MemoryBody {\n this.assertWritable()\n return this.memoryBodies.update(id, request)\n }\n\n async deleteBody(id: string, signal?: AbortSignal): Promise {\n this.assertWritable()\n return this.memoryBodies.remove(id, signal)\n }\n\n async mergeBodies(targetBodyId: string, sourceBodyIds: string[], deactivateSources = true, signal?: AbortSignal): Promise {\n this.assertWritable()\n const target = this.memoryBodies.get(targetBodyId)\n const sourceIds = [...new Set(sourceBodyIds.map(id => id.trim()).filter(id => id !== ''))]\n if (sourceIds.length === 0) throw new Error('sourceMemoryBodyIds requires at least one memory body')\n if (sourceIds.includes(target.id)) throw new Error('target memory body cannot also be a merge source')\n const sources = sourceIds.map(id => this.memoryBodies.get(id))\n const insights: Array> = []\n const edges: Array> = []\n for (const source of sources) {\n const offset = insights.length\n const sourceInsights = await this.allInsights(source, signal)\n const indexById = new Map(sourceInsights.map((insight, index) => [insight.id, offset + index]))\n for (const insight of sourceInsights) {\n insights.push({\n content: insight.content,\n ...(insight.category === undefined ? {} : { category: insight.category }),\n ...(insight.importance === undefined ? {} : { importance: insight.importance }),\n ...(insight.tags === undefined ? {} : { tags: insight.tags }),\n ...(insight.entities === undefined ? {} : { entities: insight.entities }),\n ...(insight.source === undefined ? {} : { source: insight.source }),\n ...(insight.createdAt === undefined ? {} : { created_at: insight.createdAt }),\n })\n }\n const graph = await this.graphForBody(source, signal)\n for (const edge of graph.edges) {\n const sourceIndex = indexById.get(edge.sourceId)\n const targetIndex = indexById.get(edge.targetId)\n if (sourceIndex === undefined || targetIndex === undefined || edge.type === undefined) continue\n edges.push({ source_index: sourceIndex, target_index: targetIndex, edge_type: edge.type, weight: 0.5, reason: edge.label })\n }\n }\n if (insights.length === 0) {\n this.activateAfterWrite(target)\n if (deactivateSources) for (const source of sources) this.memoryBodies.setActive(source.id, false)\n return { imported: 0, updated: 0, skipped: 0, edges_inserted: 0, targetMemoryBodyId: target.id }\n }\n const temporary = mkdtempSync(join(tmpdir(), 'dsh-mnemon-merge-'))\n const draftPath = join(temporary, 'memory-draft.json')\n try {\n writeFileSync(draftPath, JSON.stringify({ schema_version: '1', source: 'dsh-mnemon-merge', insights, edges }), { encoding: 'utf8', mode: 0o600 })\n const result = await this.runner.runJson(['import', draftPath], { ...(signal === undefined ? {} : { signal }), store: target.id })\n this.activateAfterWrite(target)\n if (deactivateSources) for (const source of sources) this.memoryBodies.setActive(source.id, false)\n return this.annotateResult(result, target)\n } finally {\n rmSync(temporary, { recursive: true, force: true })\n }\n }\n\n private async bodyStatus(body: MemoryBody, signal?: AbortSignal): Promise {\n try {\n const raw = await this.runner.runJson(['status'], { ...(signal === undefined ? {} : { signal }), store: body.id })\n const status = record(raw)\n if (status === undefined) throw new Error('mnemon status returned an unexpected payload')\n return { ...body, healthy: true, stats: this.parseStats(status) }\n } catch (error) {\n return { ...body, healthy: false, error: error instanceof Error ? error.message : String(error) }\n }\n }\n\n private parseStats(status: Record): MemoryBodyStats {\n const byCategoryRecord = record(status.by_category) ?? {}\n const byCategory: Record = {}\n for (const [category, count] of Object.entries(byCategoryRecord)) if (typeof count === 'number') byCategory[category] = count\n const topEntities = Array.isArray(status.top_entities)\n ? status.top_entities.flatMap((entry) => {\n const entity = record(entry)\n const name = text(entity?.entity)\n const count = number(entity?.count)\n return name === undefined || count === undefined ? [] : [{ entity: name, count }]\n })\n : []\n return {\n totalInsights: number(status.total_insights) ?? 0,\n deletedInsights: number(status.deleted_insights) ?? 0,\n edgeCount: number(status.edge_count) ?? 0,\n oplogCount: number(status.oplog_count) ?? 0,\n dbSizeBytes: number(status.db_size_bytes) ?? 0,\n byCategory,\n topEntities,\n }\n }\n\n private async graphForBody(body: MemoryBody, signal?: AbortSignal): Promise {\n const [html, insights] = await Promise.all([\n this.runner.runText(['viz', '--format', 'html', '--output', '-'], { ...(signal === undefined ? {} : { signal }), store: body.id }),\n // Mnemon's HTML visualization omits tags and entities. A readonly recall\n // supplies that metadata without incrementing access counters.\n this.allInsights(body, signal, true),\n ])\n const snapshot = parseMemoryGraph(html)\n const metadata = new Map(insights.map(insight => [insight.id, insight]))\n return {\n ...snapshot,\n nodes: snapshot.nodes.map(node => {\n const insight = metadata.get(node.id)\n return insight === undefined\n ? node\n : { ...node, ...insight, id: node.id, content: node.content, color: node.color }\n }),\n }\n }\n\n private async allInsights(body: MemoryBody, signal?: AbortSignal, readonly = false): Promise {\n const payload = await this.runner.runJson([\n ...(readonly ? ['--readonly'] : []),\n 'recall', '', '--basic', '--limit', '100000',\n ], { ...(signal === undefined ? {} : { signal }), store: body.id })\n const values = Array.isArray(payload) ? payload : Array.isArray(record(payload)?.results) ? record(payload)!.results as JsonValue[] : []\n return values.map(normalizeInsight).filter((entry): entry is Insight => entry !== undefined)\n }\n\n private readBodies(ids?: string[]): MemoryBody[] {\n const active = this.memoryBodies.active()\n if (ids === undefined || ids.length === 0) return active\n const requested = [...new Set(ids.map(id => id.trim()).filter(id => id !== ''))]\n return requested.map(id => {\n const body = this.memoryBodies.get(id)\n if (!body.active) throw new Error(`memory body is not active for reading: ${id}`)\n return body\n })\n }\n\n private readBody(id?: string): MemoryBody {\n if (id !== undefined && id.trim() !== '') {\n const body = this.memoryBodies.get(id)\n if (!body.active) throw new Error(`memory body is not active for reading: ${body.id}`)\n return body\n }\n const active = this.memoryBodies.active()\n if (active.length !== 1) throw new Error('memoryBodyId is required when the number of active memory bodies is not exactly one')\n return active[0]!\n }\n\n private writeBody(id?: string): MemoryBody {\n if (id !== undefined && id.trim() !== '') return this.memoryBodies.get(id)\n const active = this.memoryBodies.active()\n if (active.length !== 1) throw new Error('memoryBodyId is required when the number of active memory bodies is not exactly one')\n return active[0]!\n }\n\n private annotate(insight: T, body: MemoryBody): T {\n return { ...insight, memoryBodyId: body.id, memoryBodyName: body.name }\n }\n\n private annotateResult(result: JsonValue, body: MemoryBody): JsonValue {\n const value = record(result)\n return value === undefined ? result : { ...value, memoryBodyId: body.id, memoryBodyName: body.name }\n }\n\n private activateAfterWrite(body: MemoryBody): void {\n if (!body.active) this.memoryBodies.setActive(body.id, true)\n }\n\n private assertWritable(): void {\n if (!this.config.writeEnabled) throw new Error('dsh-mnemon is configured read-only (writeEnabled: false)')\n }\n}\n","export interface MnemonLogoProps {\n className?: string | undefined\n title?: string\n}\n\n/** Official Mnemon mark from mnemon-dev/mnemon (Apache-2.0). */\nexport function MnemonLogo({ className, title = 'Mnemon' }: MnemonLogoProps): JSX.Element {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { createContext, useContext } from 'react'\nimport type { MnemonTranslate } from './locales.ts'\nimport sidebarCss from './MnemonSidebarView.module.css'\n\nexport type MnemonViewSurface = 'buildin' | 'sidebar'\n\ntype AppearanceSlot =\n | 'shell'\n | 'masthead'\n | 'brand'\n | 'headerActions'\n | 'workspacePicker'\n | 'statusCluster'\n | 'workspaceMismatch'\n | 'topNavigation'\n | 'nav'\n | 'navGroup'\n | 'memoryWorkspace'\n | 'memoryNavigation'\n | 'memoryTabs'\n | 'memoryWriteButton'\n | 'bodyCardHeader'\n | 'bodyDirectoryActions'\n | 'bodyCardIdentity'\n | 'bodyCardMeta'\n | 'bodyCardFooter'\n | 'bodyCardStats'\n | 'itemActionButton'\n | 'itemEditAction'\n | 'itemDangerAction'\n | 'modalBackdrop'\n | 'modal'\n | 'canvas'\n | 'pageHeader'\n | 'inspectorGlyph'\n\nexport interface MnemonViewAppearance {\n surface: MnemonViewSurface\n title: string\n showLogo: boolean\n showTelemetry: boolean\n showNavigationGlyphs: boolean\n showNavigationDetails: boolean\n showNavigationDividers: boolean\n showSpaceSummary: boolean\n classes: Partial>\n}\n\nconst buildinAppearance: MnemonViewAppearance = {\n surface: 'buildin',\n title: 'Mnemon',\n showLogo: true,\n showTelemetry: true,\n showNavigationGlyphs: true,\n showNavigationDetails: true,\n showNavigationDividers: true,\n showSpaceSummary: true,\n classes: {},\n}\n\n/** Appearance is a surface concern; every data flow and workspace action stays shared. */\nexport function resolveMnemonViewAppearance(surface: MnemonViewSurface, t: MnemonTranslate): MnemonViewAppearance {\n if (surface === 'buildin') return buildinAppearance\n return {\n surface: 'sidebar',\n title: t('tab.label'),\n showLogo: false,\n showTelemetry: false,\n showNavigationGlyphs: false,\n showNavigationDetails: false,\n showNavigationDividers: false,\n showSpaceSummary: false,\n classes: {\n shell: sidebarCss.shell,\n masthead: sidebarCss.masthead,\n brand: sidebarCss.brand,\n headerActions: sidebarCss.headerActions,\n workspacePicker: sidebarCss.workspacePicker,\n statusCluster: sidebarCss.statusCluster,\n workspaceMismatch: sidebarCss.workspaceMismatch,\n topNavigation: sidebarCss.topNavigation,\n nav: sidebarCss.nav,\n navGroup: sidebarCss.navGroup,\n memoryWorkspace: sidebarCss.memoryWorkspace,\n memoryNavigation: sidebarCss.memoryNavigation,\n memoryTabs: sidebarCss.memoryTabs,\n memoryWriteButton: sidebarCss.memoryWriteButton,\n bodyCardHeader: sidebarCss.bodyCardHeader,\n bodyDirectoryActions: sidebarCss.bodyDirectoryActions,\n bodyCardIdentity: sidebarCss.bodyCardIdentity,\n bodyCardMeta: sidebarCss.bodyCardMeta,\n bodyCardFooter: sidebarCss.bodyCardFooter,\n bodyCardStats: sidebarCss.bodyCardStats,\n itemActionButton: sidebarCss.itemActionButton,\n itemEditAction: sidebarCss.itemEditAction,\n itemDangerAction: sidebarCss.itemDangerAction,\n modalBackdrop: sidebarCss.modalBackdrop,\n modal: sidebarCss.modal,\n canvas: sidebarCss.canvas,\n pageHeader: sidebarCss.pageHeader,\n inspectorGlyph: sidebarCss.inspectorGlyph,\n },\n }\n}\n\nconst AppearanceContext = createContext(buildinAppearance)\n\nexport const MnemonViewAppearanceProvider = AppearanceContext.Provider\n\nexport function useMnemonViewAppearance(): MnemonViewAppearance {\n return useContext(AppearanceContext)\n}\n\nexport function appearanceClass(base: string | undefined, variant: string | undefined): string {\n return [base, variant].filter((value): value is string => value !== undefined && value !== '').join(' ')\n}\n","import { createContext, Fragment, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore, type FormEvent, type PointerEvent as ReactPointerEvent, type ReactNode } from 'react'\nimport { IconChevronLeftOutline14 } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { consumeMnemonAnchor, subscribeMnemonAnchor, type MnemonAnchor } from './anchor.ts'\nimport Markdown from 'markdown-to-jsx'\nimport type { ClientConnectionHandle, ClientSettingsScope } from '../contracts.ts'\nimport type { Config } from '../config.ts'\nimport type { DocumentRecord, DocumentSnapshot, DocumentView } from '../documents.ts'\nimport type { RuntimeMemoryEntry, RuntimeMemoryImportance, RuntimeMemorySnapshot, RuntimeMemoryTarget } from '../runtime-memory.ts'\nimport type { StorageAreaInventory, StorageScopeInventory, StorageScopeKind } from '../storage-scope.ts'\nimport type { VersionComponentStatus, VersionInstallMode, VersionStatus, VersionUpdateResult } from '../version-updates.ts'\nimport {\n CATEGORIES,\n type Category,\n type EntityView,\n type Insight,\n type MemoryGraphNode,\n type MemoryGraphSnapshot,\n type MemoryListView,\n type MemoryBodyCatalog,\n type MemoryBodyView,\n type StatusView,\n} from '../service.ts'\nimport { MnemonClient } from './api.ts'\nimport { translateZh, type MnemonKey, type MnemonTranslate } from './locales.ts'\nimport { MnemonLogo } from './MnemonLogo.tsx'\nimport {\n appearanceClass,\n MnemonViewAppearanceProvider,\n resolveMnemonViewAppearance,\n useMnemonViewAppearance,\n type MnemonViewSurface,\n} from './MnemonViewAppearance.tsx'\nimport css from './MnemonView.module.css'\n\nexport interface MnemonViewProps {\n connection: ClientConnectionHandle\n settingsScope: ClientSettingsScope\n sessionId?: string\n workspaceId?: string\n workspaceSelection?: MnemonWorkspaceSelection\n surface?: MnemonViewSurface\n t?: MnemonTranslate\n locale?: 'zh' | 'en'\n onClose?: () => void\n}\n\nexport interface MnemonWorkspaceSelection {\n options: Array<{ id: string; title: string; path: string }>\n selectedWorkspaceId?: string\n effectiveWorkspaceId?: string\n onSelect(workspaceId: string): void\n onAlign(): void\n}\n\ntype Page = 'overview' | 'runtime' | 'documents' | 'explore' | 'entities' | 'remember' | 'list' | 'status'\ntype SidebarMemoryPage = Extract\n\ntype NavEntry = { id: Page; label: MnemonKey; detail: MnemonKey; glyph: string }\ntype NavGroup = { aria: MnemonKey; entries: NavEntry[] }\n\n/** 系统 → 三层存储 → 读写工具;组间以分隔线呈现。 */\nconst PAGE_NAV: NavGroup[] = [\n {\n aria: 'nav.group.system',\n entries: [\n { id: 'status', label: 'nav.status', detail: 'nav.status.detail', glyph: '⌘' },\n ],\n },\n {\n aria: 'nav.group.storage',\n entries: [\n { id: 'runtime', label: 'nav.runtime', detail: 'nav.runtime.detail', glyph: '◫' },\n { id: 'overview', label: 'nav.bodies', detail: 'nav.bodies.detail', glyph: '◇' },\n { id: 'documents', label: 'nav.documents', detail: 'nav.documents.detail', glyph: '▤' },\n ],\n },\n {\n aria: 'nav.group.tools',\n entries: [\n { id: 'remember', label: 'nav.remember', detail: 'nav.remember.detail', glyph: '+' },\n { id: 'explore', label: 'nav.search', detail: 'nav.search.detail', glyph: '⌕' },\n { id: 'entities', label: 'nav.entities', detail: 'nav.entities.detail', glyph: '◎' },\n { id: 'list', label: 'nav.content', detail: 'nav.content.detail', glyph: '≡' },\n ],\n },\n]\n\nconst SIDEBAR_PAGE_TABS: NavEntry[] = [\n { id: 'status', label: 'nav.status', detail: 'nav.status.detail', glyph: '⌘' },\n { id: 'runtime', label: 'nav.runtime', detail: 'nav.runtime.detail', glyph: '◫' },\n { id: 'overview', label: 'nav.bodies', detail: 'nav.bodies.detail', glyph: '◇' },\n { id: 'documents', label: 'nav.documents', detail: 'nav.documents.detail', glyph: '▤' },\n]\n\nconst MEMORY_PAGE_TABS: Array<{ id: SidebarMemoryPage; label: MnemonKey }> = [\n { id: 'overview', label: 'nav.overview' },\n { id: 'explore', label: 'nav.search' },\n { id: 'list', label: 'nav.content' },\n { id: 'entities', label: 'nav.entities' },\n]\n\nconst MEMORY_PAGES = new Set(MEMORY_PAGE_TABS.map(item => item.id))\n\nfunction isMemoryPage(page: Page): page is SidebarMemoryPage {\n return MEMORY_PAGES.has(page)\n}\n\nconst CATEGORY_KEYS: Record = {\n decision: 'category.decision',\n preference: 'category.preference',\n fact: 'category.fact',\n insight: 'category.insight',\n context: 'category.context',\n general: 'category.general',\n}\n\nconst I18nContext = createContext(translateZh)\nconst LocaleContext = createContext<'zh' | 'en'>('zh')\nfunction useT(): MnemonTranslate { return useContext(I18nContext) }\nfunction useLocale(): string { return useContext(LocaleContext) === 'en' ? 'en-US' : 'zh-CN' }\nfunction categoryLabel(t: MnemonTranslate, category: string): string { return CATEGORY_KEYS[category] === undefined ? category : t(CATEGORY_KEYS[category]!) }\n\nfunction humanBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`\n}\n\nfunction message(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\nfunction short(value: string, max: number): string {\n return value.length <= max ? value : `${value.slice(0, max - 1)}…`\n}\n\nfunction insightKey(insight: Insight): string {\n return `${insight.memoryBodyId ?? 'memory'}:${insight.id}`\n}\n\nfunction PageHeader(props: { title: string; description: string; meta?: string; action?: JSX.Element }): JSX.Element {\n const appearance = useMnemonViewAppearance()\n return (\n
\n

{props.title}

{props.description}

\n
{props.meta !== undefined && {props.meta}}{props.action}
\n
\n )\n}\n\nfunction ProgressiveFooter(props: { visible: number; total: number; pageSize: number; compact?: boolean; onMore: () => void }): JSX.Element | null {\n const t = useT()\n if (props.total === 0) return null\n const remaining = Math.max(0, props.total - props.visible)\n return
{t('common.showing', { visible: props.visible, total: props.total })}{remaining > 0 && }
\n}\n\n/** DSH-style action dialog shared by Sidebar add/write flows. */\nfunction SidebarModal(props: { title: string; description?: string; busy?: boolean; onClose: () => void; children: ReactNode }): JSX.Element {\n const t = useT()\n const appearance = useMnemonViewAppearance()\n const dialogRef = useRef(null)\n const returnFocusRef = useRef(null)\n const close = useCallback(() => { if (props.busy !== true) props.onClose() }, [props.busy, props.onClose])\n useLayoutEffect(() => {\n returnFocusRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : null\n const firstControl = dialogRef.current?.querySelector('[data-autofocus]')\n ?? dialogRef.current?.querySelector('input:not(:disabled), textarea:not(:disabled), select:not(:disabled)')\n ?? dialogRef.current?.querySelector('div:last-child button:not(:disabled)')\n firstControl?.focus({ preventScroll: true })\n return () => { if (returnFocusRef.current?.isConnected === true) returnFocusRef.current.focus({ preventScroll: true }) }\n }, [])\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n close()\n return\n }\n if (event.key !== 'Tab') return\n const controls = Array.from(dialogRef.current?.querySelectorAll('button:not(:disabled), input:not(:disabled), textarea:not(:disabled), select:not(:disabled), a[href], [tabindex]:not([tabindex=\"-1\"])') ?? []).filter(control => control.getAttribute('aria-hidden') !== 'true')\n const first = controls[0]\n const last = controls.at(-1)\n if (first === undefined || last === undefined) {\n event.preventDefault()\n return\n }\n const active = document.activeElement\n if (event.shiftKey && (active === first || !dialogRef.current?.contains(active))) {\n event.preventDefault(); last.focus()\n } else if (!event.shiftKey && (active === last || !dialogRef.current?.contains(active))) {\n event.preventDefault(); first.focus()\n }\n }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [close])\n return (\n
{ if (event.target === event.currentTarget) close() }}>\n
\n

{props.title}

{props.description !== undefined &&

{props.description}

}
\n
{props.children}
\n
\n
\n )\n}\n\nfunction EmptyState(props: { glyph: string; title: string; children: string }): JSX.Element {\n return (\n
\n
{props.glyph}
\n

{props.title}

{props.children}

\n
\n )\n}\n\n/** Sidebar mirrors the SSH panel's flat tab model; Buildin keeps the grouped navigation unchanged. */\nfunction WorkspaceNavigation(props: { page: Page; onSelect: (page: Page) => void; activeBodies: number; bodyCount: number; catalogKnown: boolean; writeEnabled: boolean }): JSX.Element {\n const t = useT()\n const appearance = useMnemonViewAppearance()\n return (\n
\n {appearance.surface === 'sidebar'\n ?
\n {SIDEBAR_PAGE_TABS.map(item => {\n const active = item.id === 'overview' ? isMemoryPage(props.page) : props.page === item.id\n return \n })}\n
\n : }\n {appearance.showSpaceSummary &&
{t('sidebar.activeSpaces')}{props.catalogKnown ? `${props.activeBodies} / ${props.bodyCount}` : '— / —'}{props.writeEnabled ? t('common.agentSupervised') : t('common.readOnly')}
}\n
\n )\n}\n\n/** Memory tools become a focused second-level tab set on the Sidebar surface. */\nfunction MemoryNavigation(props: { page: Page; writeEnabled: boolean; onSelect: (page: SidebarMemoryPage) => void; onRemember: () => void }): JSX.Element | null {\n const t = useT()\n const appearance = useMnemonViewAppearance()\n if (appearance.surface !== 'sidebar' || !isMemoryPage(props.page)) return null\n return (\n
\n {t('nav.rememberAction')}} />\n
\n
\n {MEMORY_PAGE_TABS.map(item => {\n const active = props.page === item.id\n return \n })}\n
\n
\n
\n )\n}\n\n/** Full-text popup for a selected graph node whose inspector preview is clamped. */\nfunction ContentPreview(props: { node: MemoryGraphNode; kind: string; onClose: () => void }): JSX.Element {\n const t = useT()\n const close = useCallback(() => props.onClose(), [props])\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => { if (event.key === 'Escape') props.onClose() }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [props])\n const meta = [props.kind, props.node.id, props.node.memoryBodyName].filter((entry): entry is string => entry !== undefined).join(' · ')\n return (\n
{ if (event.target === event.currentTarget) props.onClose() }}>\n
\n
{t('overview.previewTitle')}
\n
{meta}
\n

{props.node.content}

\n
\n
\n )\n}\n\nconst SAFE_LINK_PATTERN = /^(?:https?:|mailto:|#|\\/)/iu\n\nfunction safeLink(href: string | null | undefined): string | undefined {\n if (href == null) return undefined\n const value = href.trim()\n return SAFE_LINK_PATTERN.test(value) ? value : undefined\n}\n\n/** Render managed Markdown without raw HTML and with a deliberately small link surface. */\nfunction DocumentMarkdown(props: { content: string }): JSX.Element {\n return (\n
\n {\n const target = safeLink(href)\n return target === undefined\n ? {children}\n : {children}\n },\n },\n },\n }}>{props.content}\n
\n )\n}\n\nfunction InsightCard(props: {\n insight: Insight\n writeEnabled: boolean\n onForget: (insight: Insight) => Promise\n onRelated?: (insight: Insight) => void\n onClone?: (insight: Insight) => void\n}): JSX.Element {\n const t = useT()\n const appearance = useMnemonViewAppearance()\n const [confirming, setConfirming] = useState(false)\n const [forgetting, setForgetting] = useState(false)\n const { insight } = props\n const neutralActionClass = appearance.surface === 'sidebar'\n ? appearanceClass(css.ghostButton, appearance.classes.itemActionButton)\n : css.ghostButton\n const forgetActionClass = appearance.surface === 'sidebar'\n ? appearanceClass(css.dangerButton, appearanceClass(appearance.classes.itemActionButton, appearance.classes.itemDangerAction))\n : css.dangerButton\n const inlineConfirming = appearance.surface === 'buildin' && confirming\n const meta = [\n insight.memoryBodyName,\n insight.category !== undefined ? categoryLabel(t, insight.category) : undefined,\n insight.importance !== undefined ? t('common.importance', { value: insight.importance }) : undefined,\n insight.score !== undefined ? `score ${insight.score.toFixed(3)}` : undefined,\n insight.depth !== undefined ? t('common.hops', { count: insight.depth }) : undefined,\n ].filter((entry): entry is string => entry !== undefined)\n\n const forget = async () => {\n setForgetting(true)\n try {\n await props.onForget(insight)\n } finally {\n setForgetting(false)\n setConfirming(false)\n }\n }\n\n return (\n <>\n
\n
\n
{meta.map(entry => {entry})}
\n {insight.id.slice(0, 8)}\n
\n

{insight.content}

\n {(insight.tags?.length ?? 0) > 0 &&
{insight.tags!.map(tag => #{tag})}
}\n {(insight.entities?.length ?? 0) > 0 &&
{insight.entities!.map(entity => {entity})}
}\n
\n {inlineConfirming ? (\n
\n {t('card.confirmText')}\n \n \n
\n ) : (\n <>\n {props.onRelated !== undefined && }\n {props.onClone !== undefined && }\n \n {props.writeEnabled && }\n \n )}\n
\n
\n {appearance.surface === 'sidebar' && confirming && setConfirming(false)}>

{insight.content}

{meta.join(' · ')}
}\n \n )\n}\n\nconst GRAPH_WIDTH = 930\nconst GRAPH_HEIGHT = 520\nconst GRAPH_MARGIN_X = 58\nconst GRAPH_MARGIN_Y = 58\nconst CATEGORY_ORDER = ['space', 'entity', 'preference', 'decision', 'fact', 'insight', 'context', 'general']\n\ninterface GraphPosition { x: number; y: number }\ntype GraphPositions = Map\ntype GraphLayoutMode = 'natural' | 'uniform' | 'custom'\n\nfunction hash(value: string): number {\n let result = 2166136261\n for (const char of value) result = Math.imul(result ^ char.charCodeAt(0), 16777619)\n return result >>> 0\n}\n\nfunction graphNodeKey(node: MemoryGraphNode): string {\n return node.graphId ?? node.id\n}\n\nfunction graphNodeKind(node: MemoryGraphNode): NonNullable {\n return node.kind ?? 'memory'\n}\n\nfunction spaceGraphId(id: string): string {\n return `space:${id}`\n}\n\nfunction entityGraphId(entity: string): string {\n return `entity:${encodeURIComponent(normalizeEntity(entity))}`\n}\n\nfunction normalizeEntity(entity: string): string {\n return entity.normalize('NFKC').trim().toLocaleLowerCase()\n}\n\n/** Add routing scopes and entity indexes without issuing another recall. */\nfunction enrichMultiSpaceGraph(graph: MemoryGraphSnapshot, bodies: MemoryBodyView[]): MemoryGraphSnapshot {\n if (graph.nodes.length === 0) return graph\n const memories = graph.nodes.map(node => ({ ...node, kind: 'memory' as const }))\n const memoriesByBody = new Map()\n for (const node of memories) {\n if (node.memoryBodyId === undefined) continue\n memoriesByBody.set(node.memoryBodyId, [...(memoriesByBody.get(node.memoryBodyId) ?? []), node])\n }\n\n const activeBodies = bodies.filter(body => body.active && ((memoriesByBody.get(body.id)?.length ?? 0) > 0 || (body.stats?.topEntities.length ?? 0) > 0))\n const spaceNodes: MemoryGraphNode[] = activeBodies.map(body => ({\n id: body.id,\n graphId: spaceGraphId(body.id),\n kind: 'space',\n category: 'space',\n content: body.name,\n color: '#22a879',\n memoryBodyId: body.id,\n memoryBodyName: body.name,\n occurrenceCount: body.stats?.totalInsights ?? memoriesByBody.get(body.id)?.length ?? 0,\n }))\n\n // Native Mnemon entity edges connect two memories. This overview renders\n // entities as first-class nodes, so retaining those edges would falsely make\n // a memory-to-memory edge look like an entity-to-memory association.\n const edges: MemoryGraphSnapshot['edges'] = graph.edges.filter(edge => edge.type !== 'entity')\n for (const body of activeBodies) {\n for (const memory of memoriesByBody.get(body.id) ?? []) {\n edges.push({ sourceId: spaceGraphId(body.id), targetId: graphNodeKey(memory), label: 'scope', color: '#708199', type: 'scope' })\n }\n }\n\n const bodiesById = new Map(activeBodies.map(body => [body.id, body]))\n const indexedEntities = new Map()\n for (const memory of memories) {\n const body = memory.memoryBodyId === undefined ? undefined : bodiesById.get(memory.memoryBodyId)\n if (body === undefined) continue\n const seen = new Set()\n for (const rawEntity of memory.entities ?? []) {\n const entity = rawEntity.trim()\n const key = normalizeEntity(entity)\n if (key === '' || seen.has(key)) continue\n seen.add(key)\n const current = indexedEntities.get(key)\n if (current === undefined) indexedEntities.set(key, { entity, memories: [memory], bodies: [body] })\n else {\n current.memories.push(memory)\n if (!current.bodies.some(candidate => candidate.id === body.id)) current.bodies.push(body)\n }\n }\n }\n const entities = [...indexedEntities.values()].sort((left, right) => right.memories.length - left.memories.length || left.entity.localeCompare(right.entity)).slice(0, 24)\n const entityNodes: MemoryGraphNode[] = entities.map(item => ({\n id: item.entity,\n graphId: entityGraphId(item.entity),\n kind: 'entity',\n category: 'entity',\n content: item.entity,\n color: '#2b9db9',\n occurrenceCount: item.memories.length,\n memoryBodyIds: item.bodies.map(body => body.id),\n memoryBodyNames: item.bodies.map(body => body.name),\n }))\n for (const item of entities) {\n const key = entityGraphId(item.entity)\n for (const memory of item.memories) edges.push({ sourceId: key, targetId: graphNodeKey(memory), label: item.entity, color: '#22a879', type: 'entity' })\n }\n\n return { ...graph, nodes: [...spaceNodes, ...entityNodes, ...memories], edges }\n}\n\nfunction graphKindLabel(t: MnemonTranslate, node: MemoryGraphNode): string {\n const kind = graphNodeKind(node)\n return kind === 'space' ? t('graph.kindSpace') : kind === 'entity' ? t('graph.kindEntity') : categoryLabel(t, node.category ?? 'general')\n}\n\nfunction activeCategoryAnchors(grouped: Map): Map {\n const categories = [...grouped.keys()].sort((left, right) => {\n const leftIndex = CATEGORY_ORDER.indexOf(left)\n const rightIndex = CATEGORY_ORDER.indexOf(right)\n return (leftIndex < 0 ? CATEGORY_ORDER.length : leftIndex) - (rightIndex < 0 ? CATEGORY_ORDER.length : rightIndex)\n })\n const anchors = new Map()\n if (categories.length === 1) {\n anchors.set(categories[0]!, { x: GRAPH_WIDTH / 2, y: GRAPH_HEIGHT / 2 })\n return anchors\n }\n categories.forEach((category, index) => {\n const angle = -Math.PI / 2 + (index / categories.length) * Math.PI * 2\n anchors.set(category, {\n x: GRAPH_WIDTH / 2 + Math.cos(angle) * Math.min(250, 115 + categories.length * 23),\n y: GRAPH_HEIGHT / 2 + Math.sin(angle) * Math.min(165, 78 + categories.length * 15),\n })\n })\n return anchors\n}\n\nfunction clampGraphPosition(position: GraphPosition): GraphPosition {\n return {\n x: Math.min(GRAPH_WIDTH - GRAPH_MARGIN_X, Math.max(GRAPH_MARGIN_X, position.x)),\n y: Math.min(GRAPH_HEIGHT - GRAPH_MARGIN_Y, Math.max(GRAPH_MARGIN_Y, position.y)),\n }\n}\n\nfunction naturalGraphPositions(nodes: MemoryGraphNode[], edges: MemoryGraphSnapshot['edges']): GraphPositions {\n const positions: GraphPositions = new Map()\n const grouped = new Map()\n for (const node of nodes) {\n const category = node.category ?? 'general'\n grouped.set(category, [...(grouped.get(category) ?? []), node])\n }\n const anchors = activeCategoryAnchors(grouped)\n for (const [category, items] of grouped) {\n const anchor = anchors.get(category) ?? { x: GRAPH_WIDTH / 2, y: GRAPH_HEIGHT / 2 }\n items.forEach((node, index) => {\n const seed = hash(graphNodeKey(node))\n const angle = index * 2.399963 + ((seed % 37) / 37) * .4\n const radius = items.length === 1 ? 0 : 24 + Math.sqrt(index + 1) * 35\n positions.set(graphNodeKey(node), clampGraphPosition({ x: anchor.x + Math.cos(angle) * radius, y: anchor.y + Math.sin(angle) * radius }))\n })\n }\n\n const velocities = new Map(nodes.map(node => [graphNodeKey(node), { x: 0, y: 0 }]))\n const visibleIds = new Set(nodes.map(graphNodeKey))\n const visibleEdges = edges.filter(edge => visibleIds.has(edge.sourceId) && visibleIds.has(edge.targetId))\n for (let iteration = 0; iteration < 150; iteration += 1) {\n const cooling = 1 - iteration / 180\n for (let leftIndex = 0; leftIndex < nodes.length; leftIndex += 1) {\n const left = nodes[leftIndex]!\n const leftPosition = positions.get(graphNodeKey(left))!\n const leftVelocity = velocities.get(graphNodeKey(left))!\n for (let rightIndex = leftIndex + 1; rightIndex < nodes.length; rightIndex += 1) {\n const right = nodes[rightIndex]!\n const rightPosition = positions.get(graphNodeKey(right))!\n const rightVelocity = velocities.get(graphNodeKey(right))!\n let dx = leftPosition.x - rightPosition.x\n let dy = leftPosition.y - rightPosition.y\n if (dx === 0 && dy === 0) { dx = ((hash(graphNodeKey(left)) % 13) - 6) || 1; dy = ((hash(graphNodeKey(right)) % 11) - 5) || -1 }\n const distanceSquared = Math.max(100, dx * dx + dy * dy)\n const distance = Math.sqrt(distanceSquared)\n const repulsion = Math.min(9, 18_000 / distanceSquared) * cooling\n const collision = distance < 66 ? (66 - distance) * .08 : 0\n const force = repulsion + collision\n const forceX = (dx / distance) * force\n const forceY = (dy / distance) * force\n leftVelocity.x += forceX; leftVelocity.y += forceY\n rightVelocity.x -= forceX; rightVelocity.y -= forceY\n }\n }\n for (const edge of visibleEdges) {\n const source = positions.get(edge.sourceId)!\n const target = positions.get(edge.targetId)!\n const sourceVelocity = velocities.get(edge.sourceId)!\n const targetVelocity = velocities.get(edge.targetId)!\n const dx = target.x - source.x\n const dy = target.y - source.y\n const distance = Math.max(1, Math.hypot(dx, dy))\n const sparseScale = nodes.length <= 3 ? 2 : nodes.length <= 8 ? 1.45 : 1\n const desired = (edge.type === 'scope' ? 138 : edge.type === 'entity' ? 94 : edge.type === 'semantic' ? 118 : 106) * sparseScale\n const spring = (distance - desired) * .018 * cooling\n const forceX = (dx / distance) * spring\n const forceY = (dy / distance) * spring\n sourceVelocity.x += forceX; sourceVelocity.y += forceY\n targetVelocity.x -= forceX; targetVelocity.y -= forceY\n }\n for (const node of nodes) {\n const key = graphNodeKey(node)\n const position = positions.get(key)!\n const velocity = velocities.get(key)!\n const anchor = anchors.get(node.category ?? 'general') ?? { x: GRAPH_WIDTH / 2, y: GRAPH_HEIGHT / 2 }\n velocity.x += (anchor.x - position.x) * .0035 * cooling + (GRAPH_WIDTH / 2 - position.x) * .0008\n velocity.y += (anchor.y - position.y) * .0035 * cooling + (GRAPH_HEIGHT / 2 - position.y) * .0008\n velocity.x = Math.max(-12, Math.min(12, velocity.x * .76))\n velocity.y = Math.max(-12, Math.min(12, velocity.y * .76))\n positions.set(key, clampGraphPosition({ x: position.x + velocity.x, y: position.y + velocity.y }))\n }\n }\n return positions\n}\n\nfunction uniformGraphPositions(nodes: MemoryGraphNode[]): GraphPositions {\n const positions: GraphPositions = new Map()\n const ordered = [...nodes].sort((left, right) => {\n const categoryDifference = CATEGORY_ORDER.indexOf(left.category ?? 'general') - CATEGORY_ORDER.indexOf(right.category ?? 'general')\n return categoryDifference === 0 ? left.id.localeCompare(right.id) : categoryDifference\n })\n const columns = Math.max(1, Math.ceil(Math.sqrt(ordered.length * 1.65)))\n const rows = Math.max(1, Math.ceil(ordered.length / columns))\n const cellWidth = (GRAPH_WIDTH - GRAPH_MARGIN_X * 2) / columns\n const cellHeight = (GRAPH_HEIGHT - GRAPH_MARGIN_Y * 2) / rows\n ordered.forEach((node, index) => {\n const row = Math.floor(index / columns)\n const column = index % columns\n const rowLength = Math.min(columns, ordered.length - row * columns)\n const rowOffset = (columns - rowLength) * cellWidth / 2\n positions.set(graphNodeKey(node), {\n x: GRAPH_MARGIN_X + rowOffset + cellWidth * (column + .5),\n y: GRAPH_MARGIN_Y + cellHeight * (row + .5),\n })\n })\n return positions\n}\n\nfunction graphPoint(svg: SVGSVGElement, clientX: number, clientY: number): GraphPosition {\n const matrix = svg.getScreenCTM?.()\n if (matrix !== null && matrix !== undefined && typeof svg.createSVGPoint === 'function') {\n const point = svg.createSVGPoint()\n point.x = clientX; point.y = clientY\n return clampGraphPosition(point.matrixTransform(matrix.inverse()))\n }\n const bounds = svg.getBoundingClientRect()\n const width = bounds.width || GRAPH_WIDTH\n const height = bounds.height || GRAPH_HEIGHT\n return clampGraphPosition({ x: (clientX - bounds.left) * GRAPH_WIDTH / width, y: (clientY - bounds.top) * GRAPH_HEIGHT / height })\n}\n\nfunction MemoryGraph(props: { graph: MemoryGraphSnapshot; selectedId?: string | undefined; onSelect: (node: MemoryGraphNode) => void }): JSX.Element {\n const t = useT()\n const visibleNodes = useMemo(() => {\n const spaces = props.graph.nodes.filter(node => graphNodeKind(node) === 'space')\n const entities = props.graph.nodes.filter(node => graphNodeKind(node) === 'entity').slice(0, 20)\n const memories = props.graph.nodes.filter(node => graphNodeKind(node) === 'memory').slice(0, Math.max(0, 60 - spaces.length - entities.length))\n return [...spaces, ...entities, ...memories].slice(0, 60)\n }, [props.graph.nodes])\n const visibleIds = useMemo(() => new Set(visibleNodes.map(graphNodeKey)), [visibleNodes])\n const visibleKinds = useMemo(() => new Map(visibleNodes.map(node => [graphNodeKey(node), graphNodeKind(node)])), [visibleNodes])\n const edges = useMemo(() => {\n const priority = new Map([['entity', 0], ['scope', 1], ['causal', 2], ['semantic', 3], ['temporal', 4]])\n return props.graph.edges\n .filter(edge => visibleIds.has(edge.sourceId) && visibleIds.has(edge.targetId))\n .map((edge, index) => ({ edge, index }))\n .sort((left, right) => (priority.get(left.edge.type ?? 'temporal') ?? 5) - (priority.get(right.edge.type ?? 'temporal') ?? 5) || left.index - right.index)\n .slice(0, 180)\n .map(({ edge }) => edge)\n }, [props.graph.edges, visibleIds])\n const curvedEdges = useMemo(() => {\n const groups = new Map()\n edges.forEach((edge, index) => {\n const key = [edge.sourceId, edge.targetId].sort().join('::')\n groups.set(key, [...(groups.get(key) ?? []), index])\n })\n return edges.map((edge, index) => {\n const key = [edge.sourceId, edge.targetId].sort().join('::')\n const group = groups.get(key) ?? [index]\n const groupIndex = group.indexOf(index)\n return { edge, offset: (groupIndex - (group.length - 1) / 2) * 12 }\n })\n }, [edges])\n const layoutKey = `${visibleNodes.map(node => `${graphNodeKey(node)}:${graphNodeKind(node)}:${node.category ?? 'general'}`).join('|')}::${edges.map(edge => `${edge.sourceId}>${edge.targetId}:${edge.type ?? 'temporal'}`).join('|')}`\n const naturalLayout = useMemo(() => naturalGraphPositions(visibleNodes, edges), [layoutKey])\n const [positions, setPositions] = useState(() => naturalLayout)\n const [layoutMode, setLayoutMode] = useState('natural')\n const positionsRef = useRef(positions)\n const animationRef = useRef(null)\n const dragRef = useRef<{ nodeId: string; pointerId: number; startX: number; startY: number; moved: boolean } | null>(null)\n\n const commitPositions = useCallback((next: GraphPositions) => {\n positionsRef.current = next\n setPositions(next)\n }, [])\n\n const cancelAnimation = useCallback(() => {\n if (animationRef.current !== null && typeof window.cancelAnimationFrame === 'function') window.cancelAnimationFrame(animationRef.current)\n animationRef.current = null\n }, [])\n\n const animateTo = useCallback((target: GraphPositions, mode: Exclude) => {\n cancelAnimation()\n setLayoutMode(mode)\n if (typeof window.requestAnimationFrame !== 'function') { commitPositions(target); return }\n const start = new Map(positionsRef.current)\n const startedAt = performance.now()\n const tick = (time: number) => {\n const progress = Math.min(1, (time - startedAt) / 620)\n const eased = 1 - Math.pow(1 - progress, 3)\n const next: GraphPositions = new Map()\n for (const [id, destination] of target) {\n const origin = start.get(id) ?? { x: GRAPH_WIDTH / 2, y: GRAPH_HEIGHT / 2 }\n next.set(id, { x: origin.x + (destination.x - origin.x) * eased, y: origin.y + (destination.y - origin.y) * eased })\n }\n commitPositions(next)\n if (progress < 1) animationRef.current = window.requestAnimationFrame(tick)\n else animationRef.current = null\n }\n animationRef.current = window.requestAnimationFrame(tick)\n }, [cancelAnimation, commitPositions])\n\n useEffect(() => { animateTo(naturalLayout, 'natural') }, [layoutKey])\n useEffect(() => () => cancelAnimation(), [cancelAnimation])\n\n const beginDrag = (event: ReactPointerEvent, nodeId: string) => {\n cancelAnimation()\n dragRef.current = { nodeId, pointerId: event.pointerId, startX: event.clientX, startY: event.clientY, moved: false }\n event.currentTarget.setPointerCapture?.(event.pointerId)\n }\n const moveDrag = (event: ReactPointerEvent) => {\n const drag = dragRef.current\n const svg = event.currentTarget.ownerSVGElement\n if (drag === null || svg === null || drag.pointerId !== event.pointerId) return\n if (!drag.moved && Math.hypot(event.clientX - drag.startX, event.clientY - drag.startY) < 4) return\n drag.moved = true\n const point = graphPoint(svg, event.clientX, event.clientY)\n const next = new Map(positionsRef.current)\n next.set(drag.nodeId, point)\n commitPositions(next)\n setLayoutMode('custom')\n }\n const endDrag = (event: ReactPointerEvent) => {\n const drag = dragRef.current\n if (drag === null || drag.pointerId !== event.pointerId) return\n const svg = event.currentTarget.ownerSVGElement\n if (drag.moved && svg !== null) {\n const next = new Map(positionsRef.current)\n next.set(drag.nodeId, graphPoint(svg, event.clientX, event.clientY))\n commitPositions(next)\n }\n dragRef.current = null\n event.currentTarget.releasePointerCapture?.(event.pointerId)\n if (!drag.moved) {\n const node = visibleNodes.find(candidate => graphNodeKey(candidate) === drag.nodeId)\n if (node !== undefined) props.onSelect(node)\n }\n }\n const cancelDrag = (event: ReactPointerEvent) => {\n if (dragRef.current?.pointerId === event.pointerId) dragRef.current = null\n }\n const nudge = (nodeId: string, dx: number, dy: number) => {\n cancelAnimation()\n const current = positionsRef.current.get(nodeId)\n if (current === undefined) return\n const next = new Map(positionsRef.current)\n next.set(nodeId, clampGraphPosition({ x: current.x + dx, y: current.y + dy }))\n commitPositions(next)\n setLayoutMode('custom')\n }\n const layoutLabel = t(layoutMode === 'natural' ? 'graph.layoutNatural' : layoutMode === 'uniform' ? 'graph.layoutUniform' : 'graph.layoutCustom')\n return (\n <>\n
\n {t('graph.draggable', { layout: layoutLabel })}\n \n \n
\n \n \n \n \n \n \n \n {curvedEdges.map(({ edge, offset }, index) => {\n const source = positions.get(edge.sourceId) ?? naturalLayout.get(edge.sourceId) ?? { x: GRAPH_WIDTH / 2, y: GRAPH_HEIGHT / 2 }\n const target = positions.get(edge.targetId) ?? naturalLayout.get(edge.targetId) ?? { x: GRAPH_WIDTH / 2, y: GRAPH_HEIGHT / 2 }\n const dx = target.x - source.x\n const dy = target.y - source.y\n const distance = Math.max(1, Math.hypot(dx, dy))\n const direction = edge.sourceId.localeCompare(edge.targetId) <= 0 ? 1 : -1\n const controlX = (source.x + target.x) / 2 - (dy / distance) * offset * direction\n const controlY = (source.y + target.y) / 2 + (dx / distance) * offset * direction\n return \n })}\n {visibleNodes.map((node, index) => {\n const nodeKey = graphNodeKey(node)\n const position = positions.get(nodeKey) ?? naturalLayout.get(nodeKey) ?? { x: GRAPH_WIDTH / 2, y: GRAPH_HEIGHT / 2 }\n const selected = props.selectedId === nodeKey\n const showLabel = selected || visibleNodes.length < 22 || index % 3 === 0\n return (\n beginDrag(event, nodeKey)} onPointerMove={moveDrag} onPointerUp={endDrag} onPointerCancel={cancelDrag} onLostPointerCapture={cancelDrag}\n onClick={() => props.onSelect(node)}\n onKeyDown={event => {\n if (event.key === 'Enter' || event.key === ' ') props.onSelect(node)\n else if (event.key === 'ArrowLeft') { event.preventDefault(); nudge(nodeKey, -12, 0) }\n else if (event.key === 'ArrowRight') { event.preventDefault(); nudge(nodeKey, 12, 0) }\n else if (event.key === 'ArrowUp') { event.preventDefault(); nudge(nodeKey, 0, -12) }\n else if (event.key === 'ArrowDown') { event.preventDefault(); nudge(nodeKey, 0, 12) }\n }}>\n {graphNodeKind(node) === 'space'\n ? <>\n : graphNodeKind(node) === 'entity'\n ? <>\n : <>}\n {(selected || visibleNodes.length <= 12) && graphNodeKind(node) === 'memory' && node.memoryBodyName !== undefined && {short(node.memoryBodyName, 12)}}\n {showLabel && {short(node.content.replace(/\\s+/gu, ' '), selected ? 34 : visibleNodes.length <= 12 ? 26 : 19)}}\n \n )\n })}\n \n \n )\n}\n\nfunction OverviewPage(props: { client: MnemonClient; revision: number; writeEnabled: boolean; fallbackBodies: MemoryBodyView[]; fallbackDirectory: string | undefined; catalogKnown: boolean; onMutate: () => void; onExplore: (query: string) => void }): JSX.Element {\n const t = useT()\n const locale = useLocale()\n const appearance = useMnemonViewAppearance()\n const [graph, setGraph] = useState(null)\n const [catalog, setCatalog] = useState(null)\n const [selected, setSelected] = useState(null)\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(null)\n const [changing, setChanging] = useState(null)\n const [creating, setCreating] = useState(false)\n const [creatingBodyOpen, setCreatingBodyOpen] = useState(false)\n const [bodyName, setBodyName] = useState('')\n const [bodyDescription, setBodyDescription] = useState('')\n const [catalogUnavailable, setCatalogUnavailable] = useState(false)\n const [editingBody, setEditingBody] = useState(null)\n const [editName, setEditName] = useState('')\n const [editDescription, setEditDescription] = useState('')\n const [savingBody, setSavingBody] = useState(null)\n const [confirmingDeleteBody, setConfirmingDeleteBody] = useState(null)\n const [deletingBody, setDeletingBody] = useState(null)\n const [preview, setPreview] = useState(null)\n\n const load = useCallback(async (quiet = false) => {\n if (!quiet) setLoading(true)\n setError(null)\n try {\n const [nextCatalog, next] = await Promise.all([\n props.client.bodies().then(next => { setCatalogUnavailable(false); return next }).catch(() => {\n setCatalogUnavailable(!props.catalogKnown)\n return {\n items: props.fallbackBodies,\n total: props.fallbackBodies.length,\n activeCount: props.fallbackBodies.filter(body => body.active).length,\n directory: props.fallbackDirectory ?? '',\n generatedAt: new Date().toISOString(),\n }\n }),\n props.client.graph(),\n ])\n const enriched = enrichMultiSpaceGraph(next, nextCatalog.items)\n setCatalog(nextCatalog)\n setGraph(enriched)\n setSelected(current => current === null ? null : enriched.nodes.find(node => graphNodeKey(node) === graphNodeKey(current)) ?? null)\n } catch (reason) {\n setError(message(reason))\n } finally {\n setLoading(false)\n }\n }, [props.catalogKnown, props.client, props.fallbackBodies, props.fallbackDirectory])\n\n useEffect(() => {\n void load()\n const timer = window.setInterval(() => void load(true), 15_000)\n return () => window.clearInterval(timer)\n }, [load, props.revision])\n\n const toggle = async (body: MemoryBodyView) => {\n setChanging(body.id); setError(null)\n try {\n await props.client.updateBody(body.id, { active: !body.active })\n await load(true)\n props.onMutate()\n } catch (reason) { setError(message(reason)) } finally { setChanging(null) }\n }\n\n const beginEdit = (body: MemoryBodyView) => {\n setEditingBody(body.id); setEditName(body.name); setEditDescription(body.description ?? ''); setError(null)\n }\n\n const saveEdit = async (event: FormEvent, body: MemoryBodyView) => {\n event.preventDefault()\n if (editName.trim() === '') return\n setSavingBody(body.id); setError(null)\n try {\n await props.client.updateBody(body.id, { name: editName, description: editDescription })\n setEditingBody(null)\n await load(true)\n props.onMutate()\n } catch (reason) { setError(message(reason)) } finally { setSavingBody(null) }\n }\n\n const create = async (event: FormEvent) => {\n event.preventDefault()\n if (bodyName.trim() === '' || bodyDescription.trim() === '') return\n setCreating(true); setError(null)\n try {\n await props.client.createBody({ name: bodyName, description: bodyDescription })\n setBodyName(''); setBodyDescription('')\n if (appearance.surface === 'sidebar') setCreatingBodyOpen(false)\n await load(true)\n props.onMutate()\n } catch (reason) { setError(message(reason)) } finally { setCreating(false) }\n }\n\n const deleteBody = async (body: MemoryBodyView) => {\n setDeletingBody(body.id); setError(null)\n try {\n await props.client.deleteBody(body.id)\n setConfirmingDeleteBody(null)\n await load(true)\n props.onMutate()\n } catch (reason) { setError(message(reason)) } finally { setDeletingBody(null) }\n }\n\n const generated = graph === null ? t('overview.waitingSnapshot') : t('overview.updatedAt', { time: new Date(graph.generatedAt).toLocaleTimeString(locale, { hour: '2-digit', minute: '2-digit', second: '2-digit' }) })\n const graphSpaces = graph?.nodes.filter(node => graphNodeKind(node) === 'space').length ?? 0\n const graphEntities = graph?.nodes.filter(node => graphNodeKind(node) === 'entity').length ?? 0\n const graphMemories = graph?.nodes.filter(node => graphNodeKind(node) === 'memory').length ?? 0\n const selectedKind = selected === null ? null : graphNodeKind(selected)\n const editingBodyView = editingBody === null ? undefined : catalog?.items.find(body => body.id === editingBody)\n const deletingBodyView = confirmingDeleteBody === null ? undefined : catalog?.items.find(body => body.id === confirmingDeleteBody)\n const bodyEditForm = (body: MemoryBodyView) =>
void saveEdit(event, body)}>\n \n