dsh-mnemon 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +33 -3
- package/README.md +33 -3
- package/SECURITY.md +89 -0
- package/cordis.patch.yml +1 -0
- package/docs/en/README.md +1 -0
- package/docs/en/configuration.md +17 -7
- package/docs/en/getting-started.md +23 -5
- package/docs/en/interfaces.md +17 -3
- package/docs/en/operations.md +9 -4
- package/docs/en/project-overview.md +3 -1
- package/docs/en/roadmap.md +1 -1
- package/docs/en/storage-model.md +1 -1
- package/docs/zh-CN/README.md +1 -0
- package/docs/zh-CN/configuration.md +17 -7
- package/docs/zh-CN/getting-started.md +23 -5
- package/docs/zh-CN/interfaces.md +17 -3
- package/docs/zh-CN/operations.md +9 -4
- package/docs/zh-CN/project-overview.md +3 -1
- package/docs/zh-CN/roadmap.md +1 -1
- package/docs/zh-CN/storage-model.md +1 -1
- package/lib/client.js +2545 -620
- package/lib/client.js.map +1 -1
- package/lib/index.js +3816 -2481
- package/lib/types/activity.d.ts +32 -0
- package/lib/types/activity.d.ts.map +1 -0
- package/lib/types/activity.js +93 -0
- package/lib/types/activity.js.map +1 -0
- package/lib/types/client/MnemonPackSection.d.ts +11 -0
- package/lib/types/client/MnemonPackSection.d.ts.map +1 -0
- package/lib/types/client/MnemonPackSection.js +136 -0
- package/lib/types/client/MnemonPackSection.js.map +1 -0
- package/lib/types/client/MnemonSaveAction.d.ts +13 -0
- package/lib/types/client/MnemonSaveAction.d.ts.map +1 -0
- package/lib/types/client/MnemonSaveAction.js +141 -0
- package/lib/types/client/MnemonSaveAction.js.map +1 -0
- package/lib/types/client/MnemonSettingsCard.d.ts +9 -3
- package/lib/types/client/MnemonSettingsCard.d.ts.map +1 -1
- package/lib/types/client/MnemonSettingsCard.js +98 -51
- package/lib/types/client/MnemonSettingsCard.js.map +1 -1
- package/lib/types/client/MnemonToolviews.d.ts +19 -0
- package/lib/types/client/MnemonToolviews.d.ts.map +1 -0
- package/lib/types/client/MnemonToolviews.js +172 -0
- package/lib/types/client/MnemonToolviews.js.map +1 -0
- package/lib/types/client/MnemonTurnTail.d.ts +18 -0
- package/lib/types/client/MnemonTurnTail.d.ts.map +1 -0
- package/lib/types/client/MnemonTurnTail.js +44 -0
- package/lib/types/client/MnemonTurnTail.js.map +1 -0
- package/lib/types/client/MnemonView.d.ts +13 -0
- package/lib/types/client/MnemonView.d.ts.map +1 -1
- package/lib/types/client/MnemonView.js +33 -14
- package/lib/types/client/MnemonView.js.map +1 -1
- package/lib/types/client/anchor.d.ts +28 -0
- package/lib/types/client/anchor.d.ts.map +1 -0
- package/lib/types/client/anchor.js +46 -0
- package/lib/types/client/anchor.js.map +1 -0
- package/lib/types/client/api.d.ts +17 -2
- package/lib/types/client/api.d.ts.map +1 -1
- package/lib/types/client/api.js +86 -25
- package/lib/types/client/api.js.map +1 -1
- package/lib/types/client/dsh-compat.d.ts +21 -0
- package/lib/types/client/dsh-compat.d.ts.map +1 -0
- package/lib/types/client/dsh-compat.js +2 -0
- package/lib/types/client/dsh-compat.js.map +1 -0
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/index.js +140 -12
- package/lib/types/client/index.js.map +1 -1
- package/lib/types/client/locales.d.ts +272 -4
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/locales.js +292 -24
- package/lib/types/client/locales.js.map +1 -1
- package/lib/types/client/settings.d.ts +10 -5
- package/lib/types/client/settings.d.ts.map +1 -1
- package/lib/types/client/settings.js +32 -11
- package/lib/types/client/settings.js.map +1 -1
- package/lib/types/client/sidebar-entry.d.ts +6 -0
- package/lib/types/client/sidebar-entry.d.ts.map +1 -0
- package/lib/types/client/sidebar-entry.js +132 -0
- package/lib/types/client/sidebar-entry.js.map +1 -0
- package/lib/types/client/workspace-controller.d.ts +15 -0
- package/lib/types/client/workspace-controller.d.ts.map +1 -0
- package/lib/types/client/workspace-controller.js +21 -0
- package/lib/types/client/workspace-controller.js.map +1 -0
- package/lib/types/client/workspace-mount.d.ts +8 -0
- package/lib/types/client/workspace-mount.d.ts.map +1 -0
- package/lib/types/client/workspace-mount.js +135 -0
- package/lib/types/client/workspace-mount.js.map +1 -0
- package/lib/types/commands.d.ts +10 -2
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +5 -1
- package/lib/types/commands.js.map +1 -1
- package/lib/types/config.d.ts +42 -3
- package/lib/types/config.d.ts.map +1 -1
- package/lib/types/config.js +80 -6
- package/lib/types/config.js.map +1 -1
- package/lib/types/contracts.d.ts +27 -37
- package/lib/types/contracts.d.ts.map +1 -1
- package/lib/types/documents.d.ts.map +1 -1
- package/lib/types/documents.js +6 -14
- package/lib/types/documents.js.map +1 -1
- package/lib/types/guidance.d.ts +5 -2
- package/lib/types/guidance.d.ts.map +1 -1
- package/lib/types/guidance.js +18 -2
- package/lib/types/guidance.js.map +1 -1
- package/lib/types/index.d.ts +4 -2
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +29 -20
- package/lib/types/index.js.map +1 -1
- package/lib/types/lifecycle.d.ts +23 -3
- package/lib/types/lifecycle.d.ts.map +1 -1
- package/lib/types/lifecycle.js +89 -13
- package/lib/types/lifecycle.js.map +1 -1
- package/lib/types/live-runtime.d.ts +66 -0
- package/lib/types/live-runtime.d.ts.map +1 -0
- package/lib/types/live-runtime.js +146 -0
- package/lib/types/live-runtime.js.map +1 -0
- package/lib/types/memory-bodies.d.ts +2 -0
- package/lib/types/memory-bodies.d.ts.map +1 -1
- package/lib/types/memory-bodies.js +29 -10
- package/lib/types/memory-bodies.js.map +1 -1
- package/lib/types/pack.d.ts +74 -0
- package/lib/types/pack.d.ts.map +1 -0
- package/lib/types/pack.js +709 -0
- package/lib/types/pack.js.map +1 -0
- package/lib/types/rpc.d.ts +10 -3
- package/lib/types/rpc.d.ts.map +1 -1
- package/lib/types/rpc.js +158 -19
- package/lib/types/rpc.js.map +1 -1
- package/lib/types/runner.d.ts +3 -1
- package/lib/types/runner.d.ts.map +1 -1
- package/lib/types/runner.js +7 -2
- package/lib/types/runner.js.map +1 -1
- package/lib/types/service.d.ts +16 -0
- package/lib/types/service.d.ts.map +1 -1
- package/lib/types/service.js.map +1 -1
- package/lib/types/settings.d.ts +1 -0
- package/lib/types/settings.d.ts.map +1 -1
- package/lib/types/settings.js +45 -16
- package/lib/types/settings.js.map +1 -1
- package/lib/types/subagent.d.ts +11 -2
- package/lib/types/subagent.d.ts.map +1 -1
- package/lib/types/subagent.js +34 -29
- package/lib/types/subagent.js.map +1 -1
- package/lib/types/tools.d.ts +11 -1
- package/lib/types/tools.d.ts.map +1 -1
- package/lib/types/tools.js +29 -16
- package/lib/types/tools.js.map +1 -1
- package/package.json +23 -12
package/lib/client.js
CHANGED
|
@@ -11,6 +11,7 @@ window.__ModuleLoader__.load({
|
|
|
11
11
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
12
12
|
var __getProtoOf = Object.getPrototypeOf;
|
|
13
13
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
14
15
|
var __copyProps = (to, from, except, desc) => {
|
|
15
16
|
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
16
17
|
key = keys[i];
|
|
@@ -29,38 +30,58 @@ window.__ModuleLoader__.load({
|
|
|
29
30
|
let react = require("react");
|
|
30
31
|
react = __toESM(react, 1);
|
|
31
32
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
32
|
-
//#region
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
|
|
33
|
+
//#region src/settings.ts
|
|
34
|
+
const MNEMON_SETTINGS_CHANNEL = "/dsh-mnemon-settings";
|
|
35
|
+
const MNEMON_SETTINGS_NAMESPACE = "mnemon";
|
|
36
|
+
const MNEMON_UI_SETTINGS_NAMESPACE = "mnemon-ui";
|
|
37
|
+
//#endregion
|
|
38
|
+
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonSettingsCard.module.css.mjs
|
|
39
|
+
const css$5 = ".mNPJPq_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}.mNPJPq_page *,.mNPJPq_page :before,.mNPJPq_page :after{box-sizing:border-box}.mNPJPq_page button,.mNPJPq_page input{color:inherit;font:inherit}.mNPJPq_loading{min-height:140px;color:var(--dsw-alias-label-tertiary);text-align:center;margin:0;font-size:13px;line-height:140px}.mNPJPq_pageHeader h1{color:var(--dsw-alias-label-primary);margin:0;font-size:16px;font-weight:500;line-height:24px}.mNPJPq_pageHeader p{max-width:64ch;color:var(--dsw-alias-label-tertiary);margin:8px 0 0;font-size:14px;line-height:22px}.mNPJPq_section{flex-direction:column;gap:12px;min-width:0;display:flex}.mNPJPq_sectionHeading{justify-content:space-between;align-items:flex-start;gap:18px;min-width:0;display:flex}.mNPJPq_sectionHeading>div{flex:1;min-width:0}.mNPJPq_sectionHeading h2{color:var(--dsw-alias-label-primary);margin:0;font-size:14px;font-weight:500;line-height:22px}.mNPJPq_sectionHeading p{max-width:66ch;color:var(--dsw-alias-label-tertiary);margin:1px 0 0;font-size:12px;line-height:18px}.mNPJPq_choiceGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.mNPJPq_displayGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.mNPJPq_choiceCard{cursor:pointer;min-width:0;display:block}.mNPJPq_choiceCard>input,.mNPJPq_toggleRow>input,.mNPJPq_visuallyHidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.mNPJPq_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}.mNPJPq_choiceFace:hover{background:var(--dsw-alias-interactive-bg-hover)}.mNPJPq_choiceFace strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:21px;overflow:hidden}.mNPJPq_choiceFace small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:17px;overflow:hidden}.mNPJPq_check{font-size:14px;line-height:18px;display:none;position:absolute;top:11px;right:12px}.mNPJPq_choiceCard>input:checked+.mNPJPq_choiceFace{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-hover)}.mNPJPq_choiceCard>input:checked+.mNPJPq_choiceFace .mNPJPq_check{display:block}.mNPJPq_choiceCard>input:disabled+.mNPJPq_choiceFace{cursor:default;opacity:.42}.mNPJPq_choiceCard:has(input:disabled){cursor:default}.mNPJPq_settingRow,.mNPJPq_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}.mNPJPq_settingCopy{flex-direction:column;flex:1;min-width:0;display:flex}.mNPJPq_settingCopy strong{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:21px}.mNPJPq_settingCopy small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:17px}.mNPJPq_settingCopy code{font-family:var(--ds-font-family-code,ui-monospace, monospace)}.mNPJPq_directoryControl{flex:0 420px;align-items:center;gap:8px;min-width:0;max-width:60%;display:flex}.mNPJPq_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}.mNPJPq_directoryInput::placeholder{color:var(--dsw-alias-label-caption)}.mNPJPq_directoryInput:disabled{cursor:default;opacity:.46}.mNPJPq_rowGroup{border-bottom:1px solid var(--dsw-alias-border-l2)}.mNPJPq_toggleRow{cursor:pointer}.mNPJPq_toggleRow:first-child{border-top:1px solid var(--dsw-alias-border-l2)}.mNPJPq_toggleRow:has(input:disabled){cursor:default;opacity:.46}.mNPJPq_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}.mNPJPq_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}.mNPJPq_toggleRow>input:checked+.mNPJPq_switch{background:var(--dsw-alias-label-primary);box-shadow:none}.mNPJPq_toggleRow>input:checked+.mNPJPq_switch i{transform:translate(16px)}.mNPJPq_pillButton,.mNPJPq_primaryPill,.mNPJPq_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}.mNPJPq_pillButton:hover:not(:disabled),.mNPJPq_actions button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.mNPJPq_pillButton:disabled,.mNPJPq_primaryPill:disabled,.mNPJPq_actions button:disabled,.mNPJPq_textButton:disabled{cursor:default;opacity:.4}.mNPJPq_primaryPill,.mNPJPq_save{color:var(--dsw-alias-label-primary-foreground)!important;background:var(--dsw-alias-button-primary-fill)!important;border-color:#0000!important}.mNPJPq_primaryPill:hover:not(:disabled),.mNPJPq_save:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)!important}.mNPJPq_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}.mNPJPq_textButton:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.mNPJPq_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}.mNPJPq_scopeMeta{color:var(--dsw-alias-label-tertiary);margin-top:1px;font-size:10px;font-style:normal;line-height:15px}.mNPJPq_rowActions{flex:none;align-items:center;gap:8px;display:flex}.mNPJPq_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}.mNPJPq_importBar>div{min-width:0;display:grid}.mNPJPq_importBar strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;line-height:18px;overflow:hidden}.mNPJPq_importBar small{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:15px}.mNPJPq_importBar .mNPJPq_textButton{padding:0 10px}.mNPJPq_feedback,.mNPJPq_packFeedback{gap:4px;display:grid}.mNPJPq_feedback:empty,.mNPJPq_packFeedback:empty{display:none}.mNPJPq_feedback p,.mNPJPq_packFeedback p{overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}.mNPJPq_error{color:var(--dsw-alias-state-error-primary)}.mNPJPq_success{color:var(--dsw-alias-state-success-primary)}.mNPJPq_readOnly{color:var(--dsw-alias-label-tertiary)}.mNPJPq_packSuccess{color:var(--dsw-alias-state-success-primary)}.mNPJPq_actions{display:none}.mNPJPq_actionsVisible{border-top:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:16px;padding-top:14px;display:flex}.mNPJPq_actions>span{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.mNPJPq_actions>div{gap:8px;display:flex}.mNPJPq_discard{color:var(--dsw-alias-label-primary);background:0 0;border-color:var(--dsw-alias-border-l2)!important}.mNPJPq_settingsNote{color:var(--dsw-alias-label-tertiary);margin:-14px 0 0;font-size:10px;line-height:16px}.mNPJPq_settingsNote code{color:var(--dsw-alias-label-secondary);font-family:var(--ds-font-family-code,ui-monospace, monospace)}.mNPJPq_choiceCard>input:focus-visible+.mNPJPq_choiceFace,.mNPJPq_toggleRow>input:focus-visible+.mNPJPq_switch,.mNPJPq_directoryInput:focus-visible,.mNPJPq_pillButton:focus-visible,.mNPJPq_primaryPill:focus-visible,.mNPJPq_textButton:focus-visible,.mNPJPq_actions button:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-border-l3);outline:none}@media (width<=620px){.mNPJPq_page{gap:24px}.mNPJPq_choiceGrid{grid-template-columns:minmax(0,1fr)}.mNPJPq_settingRow{flex-direction:column;align-items:stretch;gap:9px}.mNPJPq_directoryControl{justify-content:space-between;max-width:none}.mNPJPq_rowActions{width:100%}.mNPJPq_rowActions button{flex:1}.mNPJPq_importBar{grid-template-columns:minmax(0,1fr) auto}.mNPJPq_importBar .mNPJPq_primaryPill{grid-column:1/-1}.mNPJPq_actionsVisible{flex-direction:column;align-items:stretch}.mNPJPq_actions>div,.mNPJPq_actions button{flex:1}}@media (prefers-reduced-motion:reduce){.mNPJPq_choiceFace,.mNPJPq_switch,.mNPJPq_switch i{transition:none}}";
|
|
40
|
+
const tagId$5 = "dsh-mnemon/MnemonSettingsCard.module.css";
|
|
41
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
|
|
36
42
|
const tag = document.createElement("style");
|
|
37
43
|
tag.dataset.plugin = "dsh-mnemon";
|
|
38
|
-
tag.dataset.pluginCss = tagId$
|
|
39
|
-
tag.textContent = css$
|
|
44
|
+
tag.dataset.pluginCss = tagId$5;
|
|
45
|
+
tag.textContent = css$5;
|
|
40
46
|
document.head.appendChild(tag);
|
|
41
47
|
}
|
|
42
48
|
var MnemonSettingsCard_module_css_default = {
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"feedback": "
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
49
|
+
"check": "mNPJPq_check",
|
|
50
|
+
"settingRow": "mNPJPq_settingRow",
|
|
51
|
+
"feedback": "mNPJPq_feedback",
|
|
52
|
+
"textButton": "mNPJPq_textButton",
|
|
53
|
+
"readOnly": "mNPJPq_readOnly",
|
|
54
|
+
"toggleRow": "mNPJPq_toggleRow",
|
|
55
|
+
"packFeedback": "mNPJPq_packFeedback",
|
|
56
|
+
"pillButton": "mNPJPq_pillButton",
|
|
57
|
+
"settingsNote": "mNPJPq_settingsNote",
|
|
58
|
+
"choiceGrid": "mNPJPq_choiceGrid",
|
|
59
|
+
"save": "mNPJPq_save",
|
|
60
|
+
"page": "mNPJPq_page",
|
|
61
|
+
"switch": "mNPJPq_switch",
|
|
62
|
+
"directoryInput": "mNPJPq_directoryInput",
|
|
63
|
+
"sectionHeading": "mNPJPq_sectionHeading",
|
|
64
|
+
"settingCopy": "mNPJPq_settingCopy",
|
|
65
|
+
"activePath": "mNPJPq_activePath",
|
|
66
|
+
"actions": "mNPJPq_actions",
|
|
67
|
+
"loading": "mNPJPq_loading",
|
|
68
|
+
"displayGrid": "mNPJPq_displayGrid",
|
|
69
|
+
"rowActions": "mNPJPq_rowActions",
|
|
70
|
+
"error": "mNPJPq_error",
|
|
71
|
+
"choiceCard": "mNPJPq_choiceCard",
|
|
72
|
+
"choiceFace": "mNPJPq_choiceFace",
|
|
73
|
+
"rowGroup": "mNPJPq_rowGroup",
|
|
74
|
+
"section": "mNPJPq_section",
|
|
75
|
+
"importBar": "mNPJPq_importBar",
|
|
76
|
+
"success": "mNPJPq_success",
|
|
77
|
+
"packSuccess": "mNPJPq_packSuccess",
|
|
78
|
+
"discard": "mNPJPq_discard",
|
|
79
|
+
"pageHeader": "mNPJPq_pageHeader",
|
|
80
|
+
"visuallyHidden": "mNPJPq_visuallyHidden",
|
|
81
|
+
"primaryPill": "mNPJPq_primaryPill",
|
|
82
|
+
"directoryControl": "mNPJPq_directoryControl",
|
|
83
|
+
"actionsVisible": "mNPJPq_actionsVisible",
|
|
84
|
+
"scopeMeta": "mNPJPq_scopeMeta"
|
|
64
85
|
};
|
|
65
86
|
//#endregion
|
|
66
87
|
//#region src/client/locales.ts
|
|
@@ -116,6 +137,13 @@ window.__ModuleLoader__.load({
|
|
|
116
137
|
"header.directoryPending": "已连接 · 目录待同步",
|
|
117
138
|
"header.unavailable": "不可用",
|
|
118
139
|
"header.notReady": "Mnemon 尚未就绪",
|
|
140
|
+
"workspace.viewing": "查看工作区",
|
|
141
|
+
"workspace.selectorAria": "选择要查看的记忆工作区",
|
|
142
|
+
"workspace.mismatchTitle": "查看目录与当前会话未对齐",
|
|
143
|
+
"workspace.mismatchDescription": "工作台操作面向当前查看目录;Agent、工具和生命周期仍使用当前会话目录。",
|
|
144
|
+
"workspace.selectedRoot": "查看:{root}",
|
|
145
|
+
"workspace.effectiveRoot": "生效:{root}",
|
|
146
|
+
"workspace.align": "对齐当前会话",
|
|
119
147
|
"telemetry.aria": "记忆统计",
|
|
120
148
|
"telemetry.title": "记忆统计",
|
|
121
149
|
"telemetry.memories": "激活记忆",
|
|
@@ -296,6 +324,48 @@ window.__ModuleLoader__.load({
|
|
|
296
324
|
"card.related": "查看关联",
|
|
297
325
|
"card.clone": "基于此新建",
|
|
298
326
|
"card.forget": "忘记",
|
|
327
|
+
"toolview.recallTitle": "记忆召回",
|
|
328
|
+
"toolview.writeTitle": "记忆沉淀",
|
|
329
|
+
"toolview.genericSummary": "Mnemon 工具调用",
|
|
330
|
+
"toolview.running": "处理中…",
|
|
331
|
+
"toolview.recallSummary": "{query} · {count} 条命中",
|
|
332
|
+
"toolview.relatedSummary": "{id} · 关联 {count} 条",
|
|
333
|
+
"toolview.documentSearchSummary": "{query} · {count} 份档案命中",
|
|
334
|
+
"toolview.statusHealthy": "Mnemon 引擎正常",
|
|
335
|
+
"toolview.statusUnhealthy": "Mnemon 引擎异常",
|
|
336
|
+
"toolview.bodiesSummary": "{count} 个记忆体 · {active} 个激活",
|
|
337
|
+
"toolview.runtimeSummary": "{action} {target} 热记忆",
|
|
338
|
+
"toolview.runtimeSummaryWithContent": "{action} {target} 热记忆 · {content}",
|
|
339
|
+
"toolview.documentManageSummary": "{action} 项目档案",
|
|
340
|
+
"toolview.documentManageSummaryWithTitle": "{action} 项目档案 · {title}",
|
|
341
|
+
"toolview.bodyUpdateSummary": "更新记忆体 {id}",
|
|
342
|
+
"toolview.bodyMergeSummary": "合并到 {target} · {count} 个来源",
|
|
343
|
+
"toolview.openView": "在记忆视图中打开",
|
|
344
|
+
"toolview.inspect": "查看轨迹",
|
|
345
|
+
"toolview.args": "参数",
|
|
346
|
+
"toolview.result": "结果",
|
|
347
|
+
"toolview.noResult": "尚无结果",
|
|
348
|
+
"turnTail.label": "本回合记忆",
|
|
349
|
+
"turnTail.recall": "召回 {count}",
|
|
350
|
+
"turnTail.write": "沉淀 {count}",
|
|
351
|
+
"turnTail.documents": "档案检索 {count}",
|
|
352
|
+
"turnTail.inspect": "检查 {count}",
|
|
353
|
+
"turnTail.failed": "失败 {count}",
|
|
354
|
+
"turnTail.toolList": "本回合记忆工具",
|
|
355
|
+
"turnTail.openView": "打开记忆视图",
|
|
356
|
+
"saveAction.button": "存入记忆",
|
|
357
|
+
"saveAction.title": "将这条回复交给记忆子 Agent",
|
|
358
|
+
"saveAction.hint": "子 Agent 会判断是否值得沉淀,并查重、提炼、选择记忆体后写入;不会挤占主对话上下文。",
|
|
359
|
+
"saveAction.fetching": "提取消息文本…",
|
|
360
|
+
"saveAction.missing": "无法从会话记录提取这条消息的文本。",
|
|
361
|
+
"saveAction.candidate": "候选内容(可编辑)",
|
|
362
|
+
"saveAction.truncated": "原回复较长,这里仅载入前 {limit} 个字符。",
|
|
363
|
+
"saveAction.submit": "交给记忆子 Agent 判断",
|
|
364
|
+
"saveAction.submitting": "调度中…",
|
|
365
|
+
"saveAction.result": "记忆子 Agent:{summary}",
|
|
366
|
+
"saveAction.failed": "调度失败:{error}",
|
|
367
|
+
"saveAction.readOnly": "当前部署为只读模式,无法写入记忆。",
|
|
368
|
+
"saveAction.close": "收起",
|
|
299
369
|
"search.title": "检索记忆",
|
|
300
370
|
"search.description": "直连 Mnemon 检索原始证据;需要时可让 Agent 只基于命中内容生成答案。",
|
|
301
371
|
"search.maxResults": "最多 {count} 条",
|
|
@@ -340,7 +410,7 @@ window.__ModuleLoader__.load({
|
|
|
340
410
|
"remember.description": "候选内容会进入隔离的记忆子 Agent,由它选择记忆体、查重、提炼并执行写入,不占用主对话上下文。",
|
|
341
411
|
"remember.worker": "记忆子 Agent",
|
|
342
412
|
"remember.readOnlyTitle": "当前为只读模式",
|
|
343
|
-
"remember.readOnlyText": "当前部署禁止记忆写入;如需调整,请修改 DSH 的 Mnemon
|
|
413
|
+
"remember.readOnlyText": "当前部署禁止记忆写入;如需调整,请修改 DSH 的 Mnemon 配置并保存。",
|
|
344
414
|
"remember.flowTitle": "记忆子 Agent 会完成什么",
|
|
345
415
|
"remember.routeTitle": "判断归属",
|
|
346
416
|
"remember.routeText": "选择既有记忆体,必要时判断是否形成新范围",
|
|
@@ -502,7 +572,7 @@ window.__ModuleLoader__.load({
|
|
|
502
572
|
"status.storageDocumentsDetail": "{active} 份活跃 · {archived} 份归档",
|
|
503
573
|
"status.storageStateReady": "审阅水位已经持久化",
|
|
504
574
|
"status.storageStateVolatile": "当前审阅状态仍由 Host 进程维护",
|
|
505
|
-
"status.storageFootnote": "当前实际读写根:{root}。存储范围只在 DSH「设置 →
|
|
575
|
+
"status.storageFootnote": "当前实际读写根:{root}。存储范围只在 DSH「设置 → 记忆系统」中修改,保存后实时生效;插件不会自动迁移、合并或删除旧内容。",
|
|
506
576
|
"status.flowTitle": "记忆系统流转",
|
|
507
577
|
"status.flowDescription": "按真实执行边界展开每轮注入、确定性文件控制、语义 worker、CLI 数据面、归档与 fork 审查。",
|
|
508
578
|
"status.flowLive": "实时状态",
|
|
@@ -563,31 +633,116 @@ window.__ModuleLoader__.load({
|
|
|
563
633
|
"status.flowLegendReady": "可用 / 已就绪",
|
|
564
634
|
"status.flowLegendRecent": "当前或最近链路",
|
|
565
635
|
"status.flowLegendBoundary": "虚线表示 LLM 判断边界",
|
|
566
|
-
"config.aria": "Mnemon
|
|
567
|
-
"config.
|
|
636
|
+
"config.aria": "Mnemon 记忆系统配置",
|
|
637
|
+
"config.tab": "Mnemon",
|
|
638
|
+
"config.title": "记忆系统设置",
|
|
639
|
+
"config.description": "统一配置运行时记忆、项目档案、记忆体和 DSH 界面;点击保存后立即生效。",
|
|
568
640
|
"config.unsaved": "有未保存修改",
|
|
569
|
-
"config.
|
|
641
|
+
"config.ready": "已保存并实时生效",
|
|
570
642
|
"config.noticeBefore": "配置写入",
|
|
571
|
-
"config.noticeAfter": "
|
|
643
|
+
"config.noticeAfter": ";所有设置点击保存后实时生效。切换范围不会自动迁移旧内容。",
|
|
644
|
+
"config.displayTitle": "展示形态",
|
|
645
|
+
"config.displayDescription": "选择记忆系统在 DSH Web 中的入口位置;切换后立即生效。",
|
|
646
|
+
"config.displayAria": "记忆系统展示形态",
|
|
647
|
+
"config.displaySidebar": "Sidebar",
|
|
648
|
+
"config.displaySidebarHint": "侧边栏中的独立工作台",
|
|
649
|
+
"config.displayBuildin": "Buildin",
|
|
650
|
+
"config.displayBuildinHint": "对话区域的内置标签页",
|
|
651
|
+
"config.storageTitle": "存储位置",
|
|
652
|
+
"config.storageDescription": "决定 Mnemon 的运行时记忆、项目档案与记忆体保存在哪里;保存后原子切换。",
|
|
572
653
|
"config.scope": "存储范围",
|
|
573
|
-
"config.scopeHint": "
|
|
654
|
+
"config.scopeHint": "全局供所有工作区共享;工作区按当前 DSH 会话隔离;自定义使用指定目录。",
|
|
574
655
|
"config.scopeAria": "Mnemon 存储范围",
|
|
575
656
|
"config.global": "全局",
|
|
576
657
|
"config.workspace": "工作区",
|
|
577
|
-
"config.custom": "
|
|
658
|
+
"config.custom": "自定义",
|
|
659
|
+
"config.customHintShort": "填写一个目录",
|
|
660
|
+
"config.customSelected": "已填写目录",
|
|
661
|
+
"config.customPack": "自定义 Pack",
|
|
662
|
+
"config.customPackAria": "选择自定义 Mnemon Pack",
|
|
663
|
+
"config.customPackRequired": "请选择或添加一个自定义 Pack。",
|
|
664
|
+
"config.customDefaultName": "自定义 Pack",
|
|
665
|
+
"config.noCustomPacks": "尚未配置 Pack",
|
|
666
|
+
"config.addPack": "添加 Pack",
|
|
667
|
+
"config.cancelAddPack": "取消添加",
|
|
668
|
+
"config.removePack": "移除",
|
|
669
|
+
"config.customPackNameAria": "新 Pack 名称",
|
|
670
|
+
"config.customPackNamePlaceholder": "例如:项目记忆",
|
|
671
|
+
"config.newPackDirectoryAria": "新 Pack 数据目录",
|
|
672
|
+
"config.confirmAddPack": "加入列表",
|
|
578
673
|
"config.customDirectory": "自定义目录",
|
|
579
|
-
"config.customHint": "
|
|
674
|
+
"config.customHint": "整个 Mnemon 数据域都位于此处。",
|
|
580
675
|
"config.customAria": "Mnemon 自定义数据目录",
|
|
676
|
+
"config.customDirectoryHint": "填写 DSH Host 上的目录路径,只保存这一个目录。",
|
|
677
|
+
"config.customPlaceholder": "例如:/data/mnemon 或 ~/mnemon",
|
|
581
678
|
"config.invalidScope": "存储范围无效。",
|
|
582
679
|
"config.customRequired": "选择自定义存储时必须填写数据目录。",
|
|
583
|
-
"config.customAbsolute": "自定义目录必须是绝对路径或以 ~/
|
|
680
|
+
"config.customAbsolute": "自定义目录必须是绝对路径或以 ~/ 开头;Windows 可填写盘符或 UNC 路径。",
|
|
584
681
|
"config.saveFailed": "保存失败:{error}",
|
|
585
682
|
"config.readOnly": "当前部署的插件设置为只读。",
|
|
586
683
|
"config.discard": "放弃修改",
|
|
587
684
|
"config.saving": "保存中…",
|
|
588
|
-
"config.save": "
|
|
685
|
+
"config.save": "保存",
|
|
589
686
|
"config.overridden": "已覆盖",
|
|
590
|
-
"config.
|
|
687
|
+
"config.interactionTitle": "对话界面",
|
|
688
|
+
"config.interactionLive": "实时生效",
|
|
689
|
+
"config.interactionHint": "保存后实时生效;关闭某项后恢复 DSH 原生呈现。",
|
|
690
|
+
"config.interactionToolviews": "记忆工具卡",
|
|
691
|
+
"config.interactionToolviewsHint": "展示 mnemon_* 工具的状态与摘要",
|
|
692
|
+
"config.interactionTurnBar": "回合记忆条",
|
|
693
|
+
"config.interactionTurnBarHint": "在回合尾部展示召回、沉淀与检索活动",
|
|
694
|
+
"config.interactionSaveAction": "存入记忆按钮",
|
|
695
|
+
"config.interactionSaveActionHint": "在已定稿回复旁提供受监督的记忆沉淀入口",
|
|
696
|
+
"config.interactionOn": "开启",
|
|
697
|
+
"config.packTitle": "备份与迁移",
|
|
698
|
+
"config.packDescription": "整体导出与导入当前生效目录;导入始终落到下方显示的位置。",
|
|
699
|
+
"config.packActiveTarget": "当前生效目录",
|
|
700
|
+
"config.packTargetLoading": "正在读取运行目标…",
|
|
701
|
+
"config.packUnavailable": "当前 DSH 主机不支持 Mnemon ZIP 备份通道。",
|
|
702
|
+
"config.packFull": "整体 Pack",
|
|
703
|
+
"config.packFullHint": "Runtime、Documents 与记忆体",
|
|
704
|
+
"config.packRuntime": "Runtime",
|
|
705
|
+
"config.packRuntimeHint": "热记忆与 USER / MEMORY 投影",
|
|
706
|
+
"config.packDocuments": "Documents",
|
|
707
|
+
"config.packDocumentsHint": "项目文档、归档与索引",
|
|
708
|
+
"config.packMemorySpaces": "记忆体",
|
|
709
|
+
"config.packMemorySpacesHint": "目录清单与 mnemon.db",
|
|
710
|
+
"config.packExport": "导出",
|
|
711
|
+
"config.packImport": "导入",
|
|
712
|
+
"config.packExporting": "导出中…",
|
|
713
|
+
"config.packInspecting": "检查中…",
|
|
714
|
+
"config.packImporting": "导入中…",
|
|
715
|
+
"config.packChooseFile": "选择{component}文件",
|
|
716
|
+
"config.packFormatHint": "统一使用 .mnemonpack(ZIP + manifest + SHA-256);记忆体仍以独立 mnemon.db 保存在包内。",
|
|
717
|
+
"config.packPreviewEyebrow": "导入预览",
|
|
718
|
+
"config.packUnnamed": "未命名 Mnemon Pack",
|
|
719
|
+
"config.packSource": "来源",
|
|
720
|
+
"config.packDestination": "导入到",
|
|
721
|
+
"config.packArchiveSize": "压缩 / 展开",
|
|
722
|
+
"config.packComponents": "选择要导入的组件",
|
|
723
|
+
"config.packComponentSummary": "{items} 项 · {files} 个文件 · {size}",
|
|
724
|
+
"config.packHasData": "目标已有数据",
|
|
725
|
+
"config.packMerge": "安全合并(推荐)",
|
|
726
|
+
"config.packMergeHint": "保留现有内容;冲突项自动去重或生成新 ID。",
|
|
727
|
+
"config.packMergeAction": "合并导入",
|
|
728
|
+
"config.packReplace": "覆盖当前组件?",
|
|
729
|
+
"config.packReplaceHint": "所选组件会被 Pack 内容原子替换;其他组件不受影响。",
|
|
730
|
+
"config.packReplaceAction": "覆盖导入…",
|
|
731
|
+
"config.packConfirmReplace": "确认覆盖",
|
|
732
|
+
"config.packComponentMissing": "这个 Pack 不包含所选组件。",
|
|
733
|
+
"config.packExported": "已导出 {file}({size})。",
|
|
734
|
+
"config.packImported": "已将 {components} 导入 {root}。",
|
|
735
|
+
"config.packFailed": "ZIP 操作失败:{error}",
|
|
736
|
+
"config.packSimpleDescription": "将当前生效目录整体导出为一个 ZIP,或从 ZIP 安全合并恢复。",
|
|
737
|
+
"config.packWholeZip": "当前目录 ZIP",
|
|
738
|
+
"config.packWholeZipHint": "包含 Runtime、Documents 和全部记忆体。",
|
|
739
|
+
"config.packImportZip": "导入 ZIP",
|
|
740
|
+
"config.packExportZip": "导出 ZIP",
|
|
741
|
+
"config.packChooseZip": "选择 Mnemon 备份 ZIP",
|
|
742
|
+
"config.packUnnamedZip": "Mnemon 备份.zip",
|
|
743
|
+
"config.packZipReady": "校验通过 · {components} 个组件 · {items} 项 · {size}",
|
|
744
|
+
"config.packImportZipAction": "安全导入",
|
|
745
|
+
"config.packImportedWhole": "已将 ZIP 安全合并到 {root}。"
|
|
591
746
|
};
|
|
592
747
|
const en = {
|
|
593
748
|
"tab.label": "Memory System",
|
|
@@ -640,6 +795,13 @@ window.__ModuleLoader__.load({
|
|
|
640
795
|
"header.directoryPending": "Connected · directory pending",
|
|
641
796
|
"header.unavailable": "Unavailable",
|
|
642
797
|
"header.notReady": "Mnemon is not ready",
|
|
798
|
+
"workspace.viewing": "Viewing workspace",
|
|
799
|
+
"workspace.selectorAria": "Select a memory workspace to inspect",
|
|
800
|
+
"workspace.mismatchTitle": "The inspected directory is not aligned with this session",
|
|
801
|
+
"workspace.mismatchDescription": "Workbench actions target the inspected directory; agents, tools, and lifecycle hooks continue to use the current session directory.",
|
|
802
|
+
"workspace.selectedRoot": "Viewing: {root}",
|
|
803
|
+
"workspace.effectiveRoot": "Effective: {root}",
|
|
804
|
+
"workspace.align": "Align with session",
|
|
643
805
|
"telemetry.aria": "Memory statistics",
|
|
644
806
|
"telemetry.title": "Memory statistics",
|
|
645
807
|
"telemetry.memories": "Active memories",
|
|
@@ -820,6 +982,48 @@ window.__ModuleLoader__.load({
|
|
|
820
982
|
"card.related": "View related",
|
|
821
983
|
"card.clone": "Create from this",
|
|
822
984
|
"card.forget": "Forget",
|
|
985
|
+
"toolview.recallTitle": "Memory recall",
|
|
986
|
+
"toolview.writeTitle": "Memory write",
|
|
987
|
+
"toolview.genericSummary": "Mnemon tool call",
|
|
988
|
+
"toolview.running": "Working…",
|
|
989
|
+
"toolview.recallSummary": "{query} · {count} hits",
|
|
990
|
+
"toolview.relatedSummary": "{id} · {count} related",
|
|
991
|
+
"toolview.documentSearchSummary": "{query} · {count} documents",
|
|
992
|
+
"toolview.statusHealthy": "Mnemon engine healthy",
|
|
993
|
+
"toolview.statusUnhealthy": "Mnemon engine unhealthy",
|
|
994
|
+
"toolview.bodiesSummary": "{count} spaces · {active} active",
|
|
995
|
+
"toolview.runtimeSummary": "{action} {target} hot memory",
|
|
996
|
+
"toolview.runtimeSummaryWithContent": "{action} {target} hot memory · {content}",
|
|
997
|
+
"toolview.documentManageSummary": "{action} project document",
|
|
998
|
+
"toolview.documentManageSummaryWithTitle": "{action} project document · {title}",
|
|
999
|
+
"toolview.bodyUpdateSummary": "Update Memory Space {id}",
|
|
1000
|
+
"toolview.bodyMergeSummary": "Merge into {target} · {count} sources",
|
|
1001
|
+
"toolview.openView": "Open in Memory view",
|
|
1002
|
+
"toolview.inspect": "Inspect",
|
|
1003
|
+
"toolview.args": "Arguments",
|
|
1004
|
+
"toolview.result": "Result",
|
|
1005
|
+
"toolview.noResult": "No result yet",
|
|
1006
|
+
"turnTail.label": "Turn memory",
|
|
1007
|
+
"turnTail.recall": "recalled {count}",
|
|
1008
|
+
"turnTail.write": "wrote {count}",
|
|
1009
|
+
"turnTail.documents": "document search {count}",
|
|
1010
|
+
"turnTail.inspect": "inspected {count}",
|
|
1011
|
+
"turnTail.failed": "failed {count}",
|
|
1012
|
+
"turnTail.toolList": "Memory tools this turn",
|
|
1013
|
+
"turnTail.openView": "Open Memory view",
|
|
1014
|
+
"saveAction.button": "Save to memory",
|
|
1015
|
+
"saveAction.title": "Send this reply to the memory subagent",
|
|
1016
|
+
"saveAction.hint": "The subagent decides whether it qualifies, then dedupes, distills, chooses a Memory Space, and writes without filling the main conversation context.",
|
|
1017
|
+
"saveAction.fetching": "Extracting message text…",
|
|
1018
|
+
"saveAction.missing": "Could not extract this message text from the session log.",
|
|
1019
|
+
"saveAction.candidate": "Candidate (editable)",
|
|
1020
|
+
"saveAction.truncated": "This reply is long; only the first {limit} characters are loaded here.",
|
|
1021
|
+
"saveAction.submit": "Send to memory subagent",
|
|
1022
|
+
"saveAction.submitting": "Dispatching…",
|
|
1023
|
+
"saveAction.result": "Memory subagent: {summary}",
|
|
1024
|
+
"saveAction.failed": "Dispatch failed: {error}",
|
|
1025
|
+
"saveAction.readOnly": "This deployment is read only; memory writes are disabled.",
|
|
1026
|
+
"saveAction.close": "Collapse",
|
|
823
1027
|
"search.title": "Recall Memory",
|
|
824
1028
|
"search.description": "Query raw Mnemon evidence directly, then optionally ask an Agent to answer from those matches only.",
|
|
825
1029
|
"search.maxResults": "Up to {count} results",
|
|
@@ -864,7 +1068,7 @@ window.__ModuleLoader__.load({
|
|
|
864
1068
|
"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.",
|
|
865
1069
|
"remember.worker": "Memory subagent",
|
|
866
1070
|
"remember.readOnlyTitle": "Read-only mode",
|
|
867
|
-
"remember.readOnlyText": "This deployment disables memory writes. Change the DSH Mnemon configuration
|
|
1071
|
+
"remember.readOnlyText": "This deployment disables memory writes. Change and save the DSH Mnemon configuration to enable them.",
|
|
868
1072
|
"remember.flowTitle": "What the memory subagent does",
|
|
869
1073
|
"remember.routeTitle": "Choose ownership",
|
|
870
1074
|
"remember.routeText": "Select an existing Memory Space or recognize a durable new scope",
|
|
@@ -1026,7 +1230,7 @@ window.__ModuleLoader__.load({
|
|
|
1026
1230
|
"status.storageDocumentsDetail": "{active} active · {archived} archived",
|
|
1027
1231
|
"status.storageStateReady": "Review watermarks are persisted",
|
|
1028
1232
|
"status.storageStateVolatile": "Review state is currently owned by the Host process",
|
|
1029
|
-
"status.storageFootnote": "Current read/write root: {root}. Change the scope only in DSH Settings →
|
|
1233
|
+
"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.",
|
|
1030
1234
|
"status.flowTitle": "Memory System Flow",
|
|
1031
1235
|
"status.flowDescription": "Maps the real execution boundaries across per-turn injection, deterministic file control, semantic workers, the CLI data plane, archive, and fork review.",
|
|
1032
1236
|
"status.flowLive": "Live state",
|
|
@@ -1087,31 +1291,116 @@ window.__ModuleLoader__.load({
|
|
|
1087
1291
|
"status.flowLegendReady": "Available / ready",
|
|
1088
1292
|
"status.flowLegendRecent": "Current or recent path",
|
|
1089
1293
|
"status.flowLegendBoundary": "Dashed lines mark LLM judgment boundaries",
|
|
1090
|
-
"config.aria": "Mnemon
|
|
1091
|
-
"config.
|
|
1294
|
+
"config.aria": "Mnemon memory system configuration",
|
|
1295
|
+
"config.tab": "Mnemon",
|
|
1296
|
+
"config.title": "Memory system settings",
|
|
1297
|
+
"config.description": "Configure runtime memory, project Documents, Memory Spaces, and the DSH interface together. Changes apply immediately after Save.",
|
|
1092
1298
|
"config.unsaved": "Unsaved changes",
|
|
1093
|
-
"config.
|
|
1299
|
+
"config.ready": "Saved and applied live",
|
|
1094
1300
|
"config.noticeBefore": "Configuration is written to",
|
|
1095
|
-
"config.noticeAfter": "
|
|
1301
|
+
"config.noticeAfter": ". All settings apply live after Save. Switching scopes never migrates existing content automatically.",
|
|
1302
|
+
"config.displayTitle": "Display mode",
|
|
1303
|
+
"config.displayDescription": "Choose where the memory system appears in DSH Web. Switching modes applies immediately.",
|
|
1304
|
+
"config.displayAria": "Memory system display mode",
|
|
1305
|
+
"config.displaySidebar": "Sidebar",
|
|
1306
|
+
"config.displaySidebarHint": "Dedicated workspace in the sidebar",
|
|
1307
|
+
"config.displayBuildin": "Buildin",
|
|
1308
|
+
"config.displayBuildinHint": "Built-in tab in the conversation area",
|
|
1309
|
+
"config.storageTitle": "Storage location",
|
|
1310
|
+
"config.storageDescription": "Choose where Mnemon keeps runtime memory, project Documents, and Memory Spaces. Save atomically switches the active root.",
|
|
1096
1311
|
"config.scope": "Storage scope",
|
|
1097
|
-
"config.scopeHint": "Global is shared across workspaces; Workspace
|
|
1312
|
+
"config.scopeHint": "Global is shared across workspaces; Workspace is isolated by the current DSH session; Custom uses the directory below.",
|
|
1098
1313
|
"config.scopeAria": "Mnemon storage scope",
|
|
1099
1314
|
"config.global": "Global",
|
|
1100
1315
|
"config.workspace": "Workspace",
|
|
1101
|
-
"config.custom": "Custom
|
|
1316
|
+
"config.custom": "Custom",
|
|
1317
|
+
"config.customHintShort": "Enter one directory",
|
|
1318
|
+
"config.customSelected": "Directory entered",
|
|
1319
|
+
"config.customPack": "Custom Pack",
|
|
1320
|
+
"config.customPackAria": "Select a custom Mnemon Pack",
|
|
1321
|
+
"config.customPackRequired": "Select or add a custom Pack.",
|
|
1322
|
+
"config.customDefaultName": "Custom Pack",
|
|
1323
|
+
"config.noCustomPacks": "No Packs configured",
|
|
1324
|
+
"config.addPack": "Add Pack",
|
|
1325
|
+
"config.cancelAddPack": "Cancel adding",
|
|
1326
|
+
"config.removePack": "Remove",
|
|
1327
|
+
"config.customPackNameAria": "New Pack name",
|
|
1328
|
+
"config.customPackNamePlaceholder": "For example: Project memory",
|
|
1329
|
+
"config.newPackDirectoryAria": "New Pack data directory",
|
|
1330
|
+
"config.confirmAddPack": "Add to list",
|
|
1102
1331
|
"config.customDirectory": "Custom directory",
|
|
1103
|
-
"config.customHint": "
|
|
1332
|
+
"config.customHint": "The complete Mnemon data domain lives here.",
|
|
1104
1333
|
"config.customAria": "Mnemon custom data directory",
|
|
1334
|
+
"config.customDirectoryHint": "Enter a directory path on the DSH Host; only this one directory is stored.",
|
|
1335
|
+
"config.customPlaceholder": "For example: /data/mnemon or ~/mnemon",
|
|
1105
1336
|
"config.invalidScope": "The storage scope is invalid.",
|
|
1106
1337
|
"config.customRequired": "A data directory is required for custom storage.",
|
|
1107
|
-
"config.customAbsolute": "The custom directory must be absolute or start with ~/.",
|
|
1338
|
+
"config.customAbsolute": "The custom directory must be absolute or start with ~/. Windows drive and UNC paths are supported.",
|
|
1108
1339
|
"config.saveFailed": "Save failed: {error}",
|
|
1109
1340
|
"config.readOnly": "Plugin settings are read-only in this deployment.",
|
|
1110
1341
|
"config.discard": "Discard changes",
|
|
1111
1342
|
"config.saving": "Saving…",
|
|
1112
|
-
"config.save": "Save
|
|
1343
|
+
"config.save": "Save",
|
|
1113
1344
|
"config.overridden": "Overridden",
|
|
1114
|
-
"config.
|
|
1345
|
+
"config.interactionTitle": "Conversation interface",
|
|
1346
|
+
"config.interactionLive": "Live",
|
|
1347
|
+
"config.interactionHint": "Changes apply live after saving. Disabling an item restores DSH's native presentation.",
|
|
1348
|
+
"config.interactionToolviews": "Memory tool cards",
|
|
1349
|
+
"config.interactionToolviewsHint": "Show status and summaries for mnemon_* tools",
|
|
1350
|
+
"config.interactionTurnBar": "Turn memory bar",
|
|
1351
|
+
"config.interactionTurnBarHint": "Show recall, write, and search activity below each turn",
|
|
1352
|
+
"config.interactionSaveAction": "Save to memory action",
|
|
1353
|
+
"config.interactionSaveActionHint": "Add supervised memory distillation beside finalized replies",
|
|
1354
|
+
"config.interactionOn": "Enabled",
|
|
1355
|
+
"config.packTitle": "Backup and migration",
|
|
1356
|
+
"config.packDescription": "Export or import the complete effective directory. Imports always target the location shown below.",
|
|
1357
|
+
"config.packActiveTarget": "Active directory",
|
|
1358
|
+
"config.packTargetLoading": "Loading the running target…",
|
|
1359
|
+
"config.packUnavailable": "This DSH host does not provide the Mnemon ZIP backup channel.",
|
|
1360
|
+
"config.packFull": "Complete Pack",
|
|
1361
|
+
"config.packFullHint": "Runtime, Documents, and Memory Spaces",
|
|
1362
|
+
"config.packRuntime": "Runtime",
|
|
1363
|
+
"config.packRuntimeHint": "Hot memory and USER / MEMORY projections",
|
|
1364
|
+
"config.packDocuments": "Documents",
|
|
1365
|
+
"config.packDocumentsHint": "Project documents, archive, and index",
|
|
1366
|
+
"config.packMemorySpaces": "Memory Spaces",
|
|
1367
|
+
"config.packMemorySpacesHint": "Catalog and mnemon.db databases",
|
|
1368
|
+
"config.packExport": "Export",
|
|
1369
|
+
"config.packImport": "Import",
|
|
1370
|
+
"config.packExporting": "Exporting…",
|
|
1371
|
+
"config.packInspecting": "Inspecting…",
|
|
1372
|
+
"config.packImporting": "Importing…",
|
|
1373
|
+
"config.packChooseFile": "Choose a {component} file",
|
|
1374
|
+
"config.packFormatHint": "Uses .mnemonpack throughout (ZIP + manifest + SHA-256). Each Memory Space remains a separate mnemon.db inside the Pack.",
|
|
1375
|
+
"config.packPreviewEyebrow": "Import preview",
|
|
1376
|
+
"config.packUnnamed": "Unnamed Mnemon Pack",
|
|
1377
|
+
"config.packSource": "Source",
|
|
1378
|
+
"config.packDestination": "Import into",
|
|
1379
|
+
"config.packArchiveSize": "Archive / expanded",
|
|
1380
|
+
"config.packComponents": "Components to import",
|
|
1381
|
+
"config.packComponentSummary": "{items} items · {files} files · {size}",
|
|
1382
|
+
"config.packHasData": "Target has data",
|
|
1383
|
+
"config.packMerge": "Safe merge (recommended)",
|
|
1384
|
+
"config.packMergeHint": "Keeps existing data; conflicting items are deduplicated or assigned new IDs.",
|
|
1385
|
+
"config.packMergeAction": "Merge import",
|
|
1386
|
+
"config.packReplace": "Replace current components?",
|
|
1387
|
+
"config.packReplaceHint": "Selected components are atomically replaced by the Pack; other components are unchanged.",
|
|
1388
|
+
"config.packReplaceAction": "Replace import…",
|
|
1389
|
+
"config.packConfirmReplace": "Confirm replace",
|
|
1390
|
+
"config.packComponentMissing": "This Pack does not contain the selected component.",
|
|
1391
|
+
"config.packExported": "Exported {file} ({size}).",
|
|
1392
|
+
"config.packImported": "Imported {components} into {root}.",
|
|
1393
|
+
"config.packFailed": "ZIP operation failed: {error}",
|
|
1394
|
+
"config.packSimpleDescription": "Export the complete effective directory as one ZIP, or safely merge-restore it from a ZIP.",
|
|
1395
|
+
"config.packWholeZip": "Current directory ZIP",
|
|
1396
|
+
"config.packWholeZipHint": "Includes Runtime, Documents, and every Memory Space.",
|
|
1397
|
+
"config.packImportZip": "Import ZIP",
|
|
1398
|
+
"config.packExportZip": "Export ZIP",
|
|
1399
|
+
"config.packChooseZip": "Choose a Mnemon backup ZIP",
|
|
1400
|
+
"config.packUnnamedZip": "Mnemon backup.zip",
|
|
1401
|
+
"config.packZipReady": "Verified · {components} components · {items} items · {size}",
|
|
1402
|
+
"config.packImportZipAction": "Safe import",
|
|
1403
|
+
"config.packImportedWhole": "Safely merged the ZIP into {root}."
|
|
1115
1404
|
};
|
|
1116
1405
|
function interpolate(dictionary, key, params) {
|
|
1117
1406
|
const template = dictionary[key];
|
|
@@ -1122,20 +1411,446 @@ window.__ModuleLoader__.load({
|
|
|
1122
1411
|
return interpolate(zh, key, params);
|
|
1123
1412
|
}
|
|
1124
1413
|
//#endregion
|
|
1414
|
+
//#region src/rpc.ts
|
|
1415
|
+
const MNEMON_READ_CHANNEL = "/dsh-mnemon-read";
|
|
1416
|
+
const MNEMON_WRITE_CHANNEL = "/dsh-mnemon-write";
|
|
1417
|
+
const MNEMON_PACK_CHANNEL = "/dsh-mnemon-pack";
|
|
1418
|
+
//#endregion
|
|
1419
|
+
//#region src/client/api.ts
|
|
1420
|
+
const turnActivityCache = /* @__PURE__ */ new WeakMap();
|
|
1421
|
+
async function loadTurnActivities(connection, sessionId, requiredCursor) {
|
|
1422
|
+
let sessions = turnActivityCache.get(connection);
|
|
1423
|
+
if (sessions === void 0) {
|
|
1424
|
+
sessions = /* @__PURE__ */ new Map();
|
|
1425
|
+
turnActivityCache.set(connection, sessions);
|
|
1426
|
+
}
|
|
1427
|
+
const key = sessionId ?? "";
|
|
1428
|
+
let entry = sessions.get(key);
|
|
1429
|
+
if (entry === void 0) {
|
|
1430
|
+
entry = {
|
|
1431
|
+
cursor: -1,
|
|
1432
|
+
activities: /* @__PURE__ */ new Map()
|
|
1433
|
+
};
|
|
1434
|
+
sessions.set(key, entry);
|
|
1435
|
+
}
|
|
1436
|
+
if (entry.cursor >= requiredCursor) return {
|
|
1437
|
+
cursor: entry.cursor,
|
|
1438
|
+
activities: [...entry.activities.values()]
|
|
1439
|
+
};
|
|
1440
|
+
if (entry.inFlight !== void 0) {
|
|
1441
|
+
const snapshot = await entry.inFlight;
|
|
1442
|
+
return snapshot.cursor >= requiredCursor ? snapshot : loadTurnActivities(connection, sessionId, requiredCursor);
|
|
1443
|
+
}
|
|
1444
|
+
const request = connection.rpc.call(MNEMON_READ_CHANNEL, "turn-activities", sessionId === void 0 ? {} : { sessionId }).then((response) => {
|
|
1445
|
+
if (!response.ok) throw new Error(response.error.message);
|
|
1446
|
+
const snapshot = response.value;
|
|
1447
|
+
entry.cursor = snapshot.cursor;
|
|
1448
|
+
entry.activities = new Map(snapshot.activities.map((activity) => [activity.turn, activity]));
|
|
1449
|
+
return snapshot;
|
|
1450
|
+
}).finally(() => {
|
|
1451
|
+
delete entry.inFlight;
|
|
1452
|
+
});
|
|
1453
|
+
entry.inFlight = request;
|
|
1454
|
+
return request;
|
|
1455
|
+
}
|
|
1456
|
+
var MnemonClient = class {
|
|
1457
|
+
connection;
|
|
1458
|
+
sessionId;
|
|
1459
|
+
workspaceId;
|
|
1460
|
+
constructor(connection, sessionId, workspaceId) {
|
|
1461
|
+
this.connection = connection;
|
|
1462
|
+
this.sessionId = sessionId;
|
|
1463
|
+
this.workspaceId = workspaceId;
|
|
1464
|
+
}
|
|
1465
|
+
async call(channel, endpoint, payload) {
|
|
1466
|
+
const response = await this.connection.rpc.call(channel, endpoint, payload);
|
|
1467
|
+
if (!response.ok) throw new Error(response.error.message);
|
|
1468
|
+
return response.value;
|
|
1469
|
+
}
|
|
1470
|
+
scoped(payload = {}) {
|
|
1471
|
+
return {
|
|
1472
|
+
...payload,
|
|
1473
|
+
...this.sessionId === void 0 ? {} : { sessionId: this.sessionId },
|
|
1474
|
+
...this.workspaceId === void 0 ? {} : { workspaceId: this.workspaceId }
|
|
1475
|
+
};
|
|
1476
|
+
}
|
|
1477
|
+
status() {
|
|
1478
|
+
return this.call(MNEMON_READ_CHANNEL, "status", this.scoped());
|
|
1479
|
+
}
|
|
1480
|
+
runtimeMemory() {
|
|
1481
|
+
return this.call(MNEMON_READ_CHANNEL, "runtime-memory", this.scoped());
|
|
1482
|
+
}
|
|
1483
|
+
mutateRuntimeMemory(request) {
|
|
1484
|
+
return this.call(MNEMON_WRITE_CHANNEL, "runtime-memory", this.scoped(request));
|
|
1485
|
+
}
|
|
1486
|
+
documents() {
|
|
1487
|
+
return this.call(MNEMON_READ_CHANNEL, "documents", this.scoped());
|
|
1488
|
+
}
|
|
1489
|
+
document(id) {
|
|
1490
|
+
return this.call(MNEMON_READ_CHANNEL, "document", this.scoped({ id }));
|
|
1491
|
+
}
|
|
1492
|
+
searchDocuments(query, includeArchived = false, limit = 50) {
|
|
1493
|
+
return this.call(MNEMON_READ_CHANNEL, "document-search", this.scoped({
|
|
1494
|
+
query,
|
|
1495
|
+
includeArchived,
|
|
1496
|
+
limit
|
|
1497
|
+
}));
|
|
1498
|
+
}
|
|
1499
|
+
mutateDocument(request) {
|
|
1500
|
+
return this.call(MNEMON_WRITE_CHANNEL, "document", this.scoped(request));
|
|
1501
|
+
}
|
|
1502
|
+
archiveDocument(id) {
|
|
1503
|
+
return this.call(MNEMON_WRITE_CHANNEL, "document", this.scoped({
|
|
1504
|
+
action: "archive",
|
|
1505
|
+
id
|
|
1506
|
+
}));
|
|
1507
|
+
}
|
|
1508
|
+
bodies() {
|
|
1509
|
+
return this.call(MNEMON_READ_CHANNEL, "bodies", this.scoped());
|
|
1510
|
+
}
|
|
1511
|
+
graph(memoryBodyIds) {
|
|
1512
|
+
return this.call(MNEMON_READ_CHANNEL, "graph", this.scoped(memoryBodyIds === void 0 ? {} : { memoryBodyIds }));
|
|
1513
|
+
}
|
|
1514
|
+
list(request = {}) {
|
|
1515
|
+
return this.call(MNEMON_READ_CHANNEL, "list", this.scoped(request));
|
|
1516
|
+
}
|
|
1517
|
+
entities(entity, limit) {
|
|
1518
|
+
return this.call(MNEMON_READ_CHANNEL, "entities", this.scoped({
|
|
1519
|
+
...entity === void 0 ? {} : { entity },
|
|
1520
|
+
...limit === void 0 ? {} : { limit }
|
|
1521
|
+
}));
|
|
1522
|
+
}
|
|
1523
|
+
search(request) {
|
|
1524
|
+
return this.call(MNEMON_READ_CHANNEL, "search", this.scoped(request));
|
|
1525
|
+
}
|
|
1526
|
+
agentSearch(request) {
|
|
1527
|
+
return this.call(MNEMON_READ_CHANNEL, "agent-search", this.scoped(request));
|
|
1528
|
+
}
|
|
1529
|
+
related(id, memoryBodyId) {
|
|
1530
|
+
return this.call(MNEMON_READ_CHANNEL, "related", this.scoped({
|
|
1531
|
+
id,
|
|
1532
|
+
depth: 2,
|
|
1533
|
+
...memoryBodyId === void 0 ? {} : { memoryBodyId }
|
|
1534
|
+
}));
|
|
1535
|
+
}
|
|
1536
|
+
/** Settled memory-tool activity of one turn, shared across all mounted tails. */
|
|
1537
|
+
async turnActivity(turn, cursor = 0) {
|
|
1538
|
+
return (await loadTurnActivities(this.connection, this.sessionId, cursor)).activities.find((activity) => activity.turn === turn) ?? null;
|
|
1539
|
+
}
|
|
1540
|
+
/** Plain text of one finalized assistant message; null when absent or empty. */
|
|
1541
|
+
assistantMessageText(messageId) {
|
|
1542
|
+
return this.call(MNEMON_READ_CHANNEL, "assistant-message", {
|
|
1543
|
+
sessionId: this.sessionId,
|
|
1544
|
+
messageId
|
|
1545
|
+
});
|
|
1546
|
+
}
|
|
1547
|
+
remember(request) {
|
|
1548
|
+
return this.call(MNEMON_WRITE_CHANNEL, "remember", this.scoped(request));
|
|
1549
|
+
}
|
|
1550
|
+
supervise(content, idempotencyKey) {
|
|
1551
|
+
return this.call(MNEMON_WRITE_CHANNEL, "supervise", this.scoped({
|
|
1552
|
+
content,
|
|
1553
|
+
...idempotencyKey === void 0 ? {} : { idempotencyKey }
|
|
1554
|
+
}));
|
|
1555
|
+
}
|
|
1556
|
+
forget(id, memoryBodyId) {
|
|
1557
|
+
return this.call(MNEMON_WRITE_CHANNEL, "forget", this.scoped({
|
|
1558
|
+
id,
|
|
1559
|
+
...memoryBodyId === void 0 ? {} : { memoryBodyId }
|
|
1560
|
+
}));
|
|
1561
|
+
}
|
|
1562
|
+
createBody(request) {
|
|
1563
|
+
return this.call(MNEMON_WRITE_CHANNEL, "body-create", this.scoped(request));
|
|
1564
|
+
}
|
|
1565
|
+
updateBody(memoryBodyId, request) {
|
|
1566
|
+
return this.call(MNEMON_WRITE_CHANNEL, "body-update", this.scoped({
|
|
1567
|
+
memoryBodyId,
|
|
1568
|
+
...request
|
|
1569
|
+
}));
|
|
1570
|
+
}
|
|
1571
|
+
packTarget() {
|
|
1572
|
+
return this.call(MNEMON_PACK_CHANNEL, "target", {});
|
|
1573
|
+
}
|
|
1574
|
+
exportPack() {
|
|
1575
|
+
return this.call(MNEMON_PACK_CHANNEL, "export", {});
|
|
1576
|
+
}
|
|
1577
|
+
inspectPack(base64, fileName) {
|
|
1578
|
+
return this.call(MNEMON_PACK_CHANNEL, "inspect", {
|
|
1579
|
+
base64,
|
|
1580
|
+
...fileName === void 0 ? {} : { fileName }
|
|
1581
|
+
});
|
|
1582
|
+
}
|
|
1583
|
+
importPack(base64) {
|
|
1584
|
+
return this.call(MNEMON_PACK_CHANNEL, "import", { base64 });
|
|
1585
|
+
}
|
|
1586
|
+
};
|
|
1587
|
+
//#endregion
|
|
1588
|
+
//#region src/client/MnemonPackSection.tsx
|
|
1589
|
+
const ZIP_ACCEPT = ".zip,application/zip";
|
|
1590
|
+
function fileBase64(file) {
|
|
1591
|
+
return new Promise((resolve, reject) => {
|
|
1592
|
+
const reader = new FileReader();
|
|
1593
|
+
reader.onerror = () => reject(reader.error ?? /* @__PURE__ */ new Error("Could not read ZIP file"));
|
|
1594
|
+
reader.onload = () => {
|
|
1595
|
+
const value = reader.result;
|
|
1596
|
+
if (typeof value !== "string") return reject(/* @__PURE__ */ new Error("Could not read ZIP file"));
|
|
1597
|
+
const separator = value.indexOf(",");
|
|
1598
|
+
if (separator < 0) return reject(/* @__PURE__ */ new Error("ZIP file encoding is invalid"));
|
|
1599
|
+
resolve(value.slice(separator + 1));
|
|
1600
|
+
};
|
|
1601
|
+
reader.readAsDataURL(file);
|
|
1602
|
+
});
|
|
1603
|
+
}
|
|
1604
|
+
function bytesFromBase64(base64) {
|
|
1605
|
+
const binary = atob(base64);
|
|
1606
|
+
const buffer = new ArrayBuffer(binary.length);
|
|
1607
|
+
const bytes = new Uint8Array(buffer);
|
|
1608
|
+
for (let index = 0; index < binary.length; index += 1) bytes[index] = binary.charCodeAt(index);
|
|
1609
|
+
return buffer;
|
|
1610
|
+
}
|
|
1611
|
+
function download(result) {
|
|
1612
|
+
const blob = new Blob([bytesFromBase64(result.base64)], { type: result.mimeType });
|
|
1613
|
+
const url = URL.createObjectURL(blob);
|
|
1614
|
+
const anchor = document.createElement("a");
|
|
1615
|
+
anchor.href = url;
|
|
1616
|
+
anchor.download = result.fileName;
|
|
1617
|
+
anchor.hidden = true;
|
|
1618
|
+
document.body.append(anchor);
|
|
1619
|
+
anchor.click();
|
|
1620
|
+
anchor.remove();
|
|
1621
|
+
window.setTimeout(() => URL.revokeObjectURL(url), 0);
|
|
1622
|
+
}
|
|
1623
|
+
function formatBytes(bytes) {
|
|
1624
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
1625
|
+
if (bytes < 1048576) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
1626
|
+
return `${(bytes / 1048576).toFixed(1)} MB`;
|
|
1627
|
+
}
|
|
1628
|
+
function MnemonPackSection({ connection, refreshKey, t }) {
|
|
1629
|
+
const client = (0, react.useMemo)(() => connection === void 0 ? null : new MnemonClient(connection), [connection]);
|
|
1630
|
+
const input = (0, react.useRef)(null);
|
|
1631
|
+
const [target, setTarget] = (0, react.useState)(null);
|
|
1632
|
+
const [pending, setPending] = (0, react.useState)(null);
|
|
1633
|
+
const [busy, setBusy] = (0, react.useState)(client === null ? null : "target");
|
|
1634
|
+
const [failed, setFailed] = (0, react.useState)(null);
|
|
1635
|
+
const [notice, setNotice] = (0, react.useState)(null);
|
|
1636
|
+
(0, react.useEffect)(() => {
|
|
1637
|
+
let active = true;
|
|
1638
|
+
if (client === null) return;
|
|
1639
|
+
setBusy("target");
|
|
1640
|
+
setFailed(null);
|
|
1641
|
+
client.packTarget().then((value) => {
|
|
1642
|
+
if (active) setTarget(value);
|
|
1643
|
+
}).catch((reason) => {
|
|
1644
|
+
if (active) setFailed(reason instanceof Error ? reason.message : String(reason));
|
|
1645
|
+
}).finally(() => {
|
|
1646
|
+
if (active) setBusy(null);
|
|
1647
|
+
});
|
|
1648
|
+
return () => {
|
|
1649
|
+
active = false;
|
|
1650
|
+
};
|
|
1651
|
+
}, [client, refreshKey]);
|
|
1652
|
+
const scopeLabel = (scope) => scope === "global" ? t("config.global") : scope === "workspace" ? t("config.workspace") : t("config.custom");
|
|
1653
|
+
const exportZip = async () => {
|
|
1654
|
+
if (client === null || busy !== null) return;
|
|
1655
|
+
setBusy("export");
|
|
1656
|
+
setFailed(null);
|
|
1657
|
+
setNotice(null);
|
|
1658
|
+
try {
|
|
1659
|
+
const result = await client.exportPack();
|
|
1660
|
+
download(result);
|
|
1661
|
+
setNotice(t("config.packExported", {
|
|
1662
|
+
file: result.fileName,
|
|
1663
|
+
size: formatBytes(result.bytes)
|
|
1664
|
+
}));
|
|
1665
|
+
} catch (reason) {
|
|
1666
|
+
setFailed(reason instanceof Error ? reason.message : String(reason));
|
|
1667
|
+
} finally {
|
|
1668
|
+
setBusy(null);
|
|
1669
|
+
}
|
|
1670
|
+
};
|
|
1671
|
+
const inspectZip = async (file) => {
|
|
1672
|
+
if (client === null || busy !== null) return;
|
|
1673
|
+
setBusy("inspect");
|
|
1674
|
+
setFailed(null);
|
|
1675
|
+
setNotice(null);
|
|
1676
|
+
setPending(null);
|
|
1677
|
+
try {
|
|
1678
|
+
const base64 = await fileBase64(file);
|
|
1679
|
+
const preview = await client.inspectPack(base64, file.name);
|
|
1680
|
+
setPending({
|
|
1681
|
+
base64,
|
|
1682
|
+
preview
|
|
1683
|
+
});
|
|
1684
|
+
} catch (reason) {
|
|
1685
|
+
setFailed(reason instanceof Error ? reason.message : String(reason));
|
|
1686
|
+
} finally {
|
|
1687
|
+
setBusy(null);
|
|
1688
|
+
}
|
|
1689
|
+
};
|
|
1690
|
+
const chooseFile = (event) => {
|
|
1691
|
+
const file = event.currentTarget.files?.[0];
|
|
1692
|
+
event.currentTarget.value = "";
|
|
1693
|
+
if (file !== void 0) inspectZip(file);
|
|
1694
|
+
};
|
|
1695
|
+
const importZip = async () => {
|
|
1696
|
+
if (client === null || pending === null || busy !== null) return;
|
|
1697
|
+
setBusy("import");
|
|
1698
|
+
setFailed(null);
|
|
1699
|
+
setNotice(null);
|
|
1700
|
+
try {
|
|
1701
|
+
const result = await client.importPack(pending.base64);
|
|
1702
|
+
setNotice(t("config.packImportedWhole", { root: result.targetRoot }));
|
|
1703
|
+
setPending(null);
|
|
1704
|
+
} catch (reason) {
|
|
1705
|
+
setFailed(reason instanceof Error ? reason.message : String(reason));
|
|
1706
|
+
} finally {
|
|
1707
|
+
setBusy(null);
|
|
1708
|
+
}
|
|
1709
|
+
};
|
|
1710
|
+
const items = pending?.preview.manifest.summary.reduce((sum, component) => sum + component.items, 0) ?? 0;
|
|
1711
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1712
|
+
className: MnemonSettingsCard_module_css_default.section,
|
|
1713
|
+
"aria-labelledby": "mnemon-pack-heading",
|
|
1714
|
+
children: [
|
|
1715
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1716
|
+
className: MnemonSettingsCard_module_css_default.sectionHeading,
|
|
1717
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
1718
|
+
id: "mnemon-pack-heading",
|
|
1719
|
+
children: t("config.packTitle")
|
|
1720
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("config.packSimpleDescription") })] })
|
|
1721
|
+
}),
|
|
1722
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1723
|
+
className: MnemonSettingsCard_module_css_default.settingRow,
|
|
1724
|
+
children: [
|
|
1725
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1726
|
+
className: MnemonSettingsCard_module_css_default.settingCopy,
|
|
1727
|
+
children: [
|
|
1728
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("config.packWholeZip") }),
|
|
1729
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.packWholeZipHint") }),
|
|
1730
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
|
|
1731
|
+
className: MnemonSettingsCard_module_css_default.activePath,
|
|
1732
|
+
title: target?.root,
|
|
1733
|
+
children: target?.root ?? t("config.packTargetLoading")
|
|
1734
|
+
}),
|
|
1735
|
+
target !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("em", {
|
|
1736
|
+
className: MnemonSettingsCard_module_css_default.scopeMeta,
|
|
1737
|
+
children: scopeLabel(target.scope)
|
|
1738
|
+
})
|
|
1739
|
+
]
|
|
1740
|
+
}),
|
|
1741
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1742
|
+
className: MnemonSettingsCard_module_css_default.rowActions,
|
|
1743
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1744
|
+
type: "button",
|
|
1745
|
+
className: MnemonSettingsCard_module_css_default.pillButton,
|
|
1746
|
+
disabled: client === null || busy !== null,
|
|
1747
|
+
onClick: () => input.current?.click(),
|
|
1748
|
+
children: busy === "inspect" ? t("config.packInspecting") : t("config.packImportZip")
|
|
1749
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1750
|
+
type: "button",
|
|
1751
|
+
className: MnemonSettingsCard_module_css_default.pillButton,
|
|
1752
|
+
disabled: client === null || busy !== null || target === null,
|
|
1753
|
+
onClick: () => void exportZip(),
|
|
1754
|
+
children: busy === "export" ? t("config.packExporting") : t("config.packExportZip")
|
|
1755
|
+
})]
|
|
1756
|
+
}),
|
|
1757
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
1758
|
+
ref: input,
|
|
1759
|
+
className: MnemonSettingsCard_module_css_default.visuallyHidden,
|
|
1760
|
+
type: "file",
|
|
1761
|
+
accept: ZIP_ACCEPT,
|
|
1762
|
+
"aria-label": t("config.packChooseZip"),
|
|
1763
|
+
onChange: chooseFile
|
|
1764
|
+
})
|
|
1765
|
+
]
|
|
1766
|
+
}),
|
|
1767
|
+
pending !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1768
|
+
className: MnemonSettingsCard_module_css_default.importBar,
|
|
1769
|
+
role: "status",
|
|
1770
|
+
children: [
|
|
1771
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: pending.preview.fileName ?? t("config.packUnnamedZip") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.packZipReady", {
|
|
1772
|
+
components: pending.preview.manifest.components.length,
|
|
1773
|
+
items,
|
|
1774
|
+
size: formatBytes(pending.preview.archiveBytes)
|
|
1775
|
+
}) })] }),
|
|
1776
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1777
|
+
type: "button",
|
|
1778
|
+
className: MnemonSettingsCard_module_css_default.textButton,
|
|
1779
|
+
disabled: busy !== null,
|
|
1780
|
+
onClick: () => setPending(null),
|
|
1781
|
+
children: t("common.cancel")
|
|
1782
|
+
}),
|
|
1783
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1784
|
+
type: "button",
|
|
1785
|
+
className: MnemonSettingsCard_module_css_default.primaryPill,
|
|
1786
|
+
disabled: busy !== null,
|
|
1787
|
+
onClick: () => void importZip(),
|
|
1788
|
+
children: busy === "import" ? t("config.packImporting") : t("config.packImportZipAction")
|
|
1789
|
+
})
|
|
1790
|
+
]
|
|
1791
|
+
}),
|
|
1792
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1793
|
+
className: MnemonSettingsCard_module_css_default.packFeedback,
|
|
1794
|
+
"aria-live": "polite",
|
|
1795
|
+
children: [
|
|
1796
|
+
failed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1797
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
1798
|
+
role: "alert",
|
|
1799
|
+
children: t("config.packFailed", { error: failed })
|
|
1800
|
+
}),
|
|
1801
|
+
notice !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1802
|
+
className: MnemonSettingsCard_module_css_default.packSuccess,
|
|
1803
|
+
children: notice
|
|
1804
|
+
}),
|
|
1805
|
+
client === null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1806
|
+
className: MnemonSettingsCard_module_css_default.readOnly,
|
|
1807
|
+
children: t("config.packUnavailable")
|
|
1808
|
+
})
|
|
1809
|
+
]
|
|
1810
|
+
})
|
|
1811
|
+
]
|
|
1812
|
+
});
|
|
1813
|
+
}
|
|
1814
|
+
//#endregion
|
|
1125
1815
|
//#region src/client/MnemonSettingsCard.tsx
|
|
1126
|
-
const
|
|
1816
|
+
const CORE_FIELDS = [
|
|
1817
|
+
"displayMode",
|
|
1818
|
+
"storageScope",
|
|
1819
|
+
"dataDir"
|
|
1820
|
+
];
|
|
1821
|
+
const INTERACTION_FIELDS = [
|
|
1822
|
+
"toolviews",
|
|
1823
|
+
"turnBar",
|
|
1824
|
+
"saveAction"
|
|
1825
|
+
];
|
|
1127
1826
|
function record(value) {
|
|
1128
1827
|
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : {};
|
|
1129
1828
|
}
|
|
1130
|
-
function
|
|
1829
|
+
function legacyPackDirectory(value) {
|
|
1830
|
+
const packs = value.customPacks ?? [];
|
|
1831
|
+
return packs.find((pack) => pack.id === value.customPackId)?.dataDir?.trim() ?? (packs.length === 1 ? packs[0]?.dataDir?.trim() : void 0) ?? "";
|
|
1832
|
+
}
|
|
1833
|
+
function coreDraft(value) {
|
|
1131
1834
|
const resolved = value ?? {};
|
|
1835
|
+
const dataDir = resolved.dataDir?.trim() || legacyPackDirectory(resolved);
|
|
1836
|
+
return {
|
|
1837
|
+
displayMode: resolved.displayMode ?? "sidebar",
|
|
1838
|
+
storageScope: resolved.storageScope ?? (dataDir === "" ? "global" : "custom"),
|
|
1839
|
+
dataDir
|
|
1840
|
+
};
|
|
1841
|
+
}
|
|
1842
|
+
function interactionDraft(value) {
|
|
1132
1843
|
return {
|
|
1133
|
-
|
|
1134
|
-
|
|
1844
|
+
toolviews: value?.toolviews === true,
|
|
1845
|
+
turnBar: value?.turnBar === true,
|
|
1846
|
+
saveAction: value?.saveAction === true
|
|
1135
1847
|
};
|
|
1136
1848
|
}
|
|
1137
|
-
function
|
|
1138
|
-
return
|
|
1849
|
+
function draftOf(core, interaction) {
|
|
1850
|
+
return {
|
|
1851
|
+
...coreDraft(core),
|
|
1852
|
+
...interactionDraft(interaction)
|
|
1853
|
+
};
|
|
1139
1854
|
}
|
|
1140
1855
|
function validation(t, draft) {
|
|
1141
1856
|
if (![
|
|
@@ -1146,236 +1861,408 @@ window.__ModuleLoader__.load({
|
|
|
1146
1861
|
if (draft.storageScope !== "custom") return null;
|
|
1147
1862
|
const directory = draft.dataDir.trim();
|
|
1148
1863
|
if (directory === "") return t("config.customRequired");
|
|
1149
|
-
|
|
1864
|
+
const posixAbsolute = directory.startsWith("/");
|
|
1865
|
+
const homeRelative = directory === "~" || directory.startsWith("~/");
|
|
1866
|
+
const windowsDriveAbsolute = /^[a-zA-Z]:[\\/]/.test(directory);
|
|
1867
|
+
const windowsUncAbsolute = /^\\\\[^\\/]+[\\/][^\\/]+/.test(directory);
|
|
1868
|
+
if (!posixAbsolute && !homeRelative && !windowsDriveAbsolute && !windowsUncAbsolute) return t("config.customAbsolute");
|
|
1150
1869
|
return null;
|
|
1151
1870
|
}
|
|
1152
|
-
function
|
|
1871
|
+
function useScope(scope) {
|
|
1153
1872
|
const subscribe = (0, react.useMemo)(() => scope.subscribe.bind(scope), [scope]);
|
|
1154
1873
|
const getSnapshot = (0, react.useMemo)(() => scope.getSnapshot.bind(scope), [scope]);
|
|
1155
|
-
|
|
1156
|
-
|
|
1874
|
+
return (0, react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
1875
|
+
}
|
|
1876
|
+
function operations(fields, dirty, draft) {
|
|
1877
|
+
return fields.flatMap((field) => {
|
|
1878
|
+
if (!dirty.has(field)) return [];
|
|
1879
|
+
if (field === "dataDir" && draft.dataDir.trim() === "") return [{
|
|
1880
|
+
op: "unset",
|
|
1881
|
+
path: [field]
|
|
1882
|
+
}];
|
|
1883
|
+
const value = draft[field];
|
|
1884
|
+
return [{
|
|
1885
|
+
op: "set",
|
|
1886
|
+
path: [field],
|
|
1887
|
+
value: typeof value === "string" ? value.trim() : value
|
|
1888
|
+
}];
|
|
1889
|
+
});
|
|
1890
|
+
}
|
|
1891
|
+
async function commit(scope, edits) {
|
|
1892
|
+
if (scope.mutate !== void 0) return scope.mutate(edits);
|
|
1893
|
+
for (const edit of edits) if (edit.path.length === 1) {
|
|
1894
|
+
if (edit.op === "set") await scope.set(edit.path[0], edit.value);
|
|
1895
|
+
else await scope.unset(edit.path[0]);
|
|
1896
|
+
} else if (edit.op === "set") await scope.setPath(edit.path, edit.value);
|
|
1897
|
+
else await scope.unsetPath(edit.path);
|
|
1898
|
+
}
|
|
1899
|
+
/** Dedicated Mnemon page contributed directly to DSH's settings navigation. */
|
|
1900
|
+
function MnemonSettingsCard({ scope, interactionScope: suppliedInteractionScope, connection, t = translateZh }) {
|
|
1901
|
+
const interactionScope = suppliedInteractionScope ?? scope;
|
|
1902
|
+
const coreSnapshot = useScope(scope);
|
|
1903
|
+
const interactionSnapshot = useScope(interactionScope);
|
|
1904
|
+
const [draft, setDraft] = (0, react.useState)(() => draftOf(coreSnapshot.value, interactionSnapshot.value));
|
|
1157
1905
|
const [dirty, setDirty] = (0, react.useState)(() => /* @__PURE__ */ new Set());
|
|
1158
|
-
const [reset, setReset] = (0, react.useState)(() => /* @__PURE__ */ new Set());
|
|
1159
1906
|
const [saving, setSaving] = (0, react.useState)(false);
|
|
1160
1907
|
const [failed, setFailed] = (0, react.useState)(null);
|
|
1908
|
+
const [applied, setApplied] = (0, react.useState)(false);
|
|
1909
|
+
const [targetRevision, setTargetRevision] = (0, react.useState)(0);
|
|
1161
1910
|
(0, react.useEffect)(() => {
|
|
1162
|
-
if (dirty.size === 0) setDraft(draftOf(
|
|
1163
|
-
}, [
|
|
1164
|
-
|
|
1165
|
-
|
|
1911
|
+
if (dirty.size === 0) setDraft(draftOf(coreSnapshot.value, interactionSnapshot.value));
|
|
1912
|
+
}, [
|
|
1913
|
+
dirty.size,
|
|
1914
|
+
coreSnapshot.value,
|
|
1915
|
+
interactionSnapshot.value
|
|
1916
|
+
]);
|
|
1917
|
+
const coreUser = (0, react.useMemo)(() => record(coreSnapshot.user), [coreSnapshot.user]);
|
|
1166
1918
|
const error = validation(t, draft);
|
|
1167
|
-
const
|
|
1168
|
-
|
|
1919
|
+
const loading = coreSnapshot.status === "loading" || interactionSnapshot.status === "loading";
|
|
1920
|
+
const writable = coreSnapshot.writable && interactionSnapshot.writable;
|
|
1921
|
+
if (coreSnapshot.status === "unavailable" && interactionSnapshot.status === "unavailable") return null;
|
|
1169
1922
|
const edit = (field, value) => {
|
|
1170
1923
|
setDraft((current) => ({
|
|
1171
1924
|
...current,
|
|
1172
1925
|
[field]: value
|
|
1173
1926
|
}));
|
|
1174
1927
|
setDirty((current) => new Set(current).add(field));
|
|
1175
|
-
setReset((current) => {
|
|
1176
|
-
const next = new Set(current);
|
|
1177
|
-
next.delete(field);
|
|
1178
|
-
return next;
|
|
1179
|
-
});
|
|
1180
|
-
setFailed(null);
|
|
1181
|
-
};
|
|
1182
|
-
const resetField = (field) => {
|
|
1183
|
-
setDraft((current) => ({
|
|
1184
|
-
...current,
|
|
1185
|
-
[field]: inherited[field]
|
|
1186
|
-
}));
|
|
1187
|
-
setDirty((current) => new Set(current).add(field));
|
|
1188
|
-
setReset((current) => new Set(current).add(field));
|
|
1189
1928
|
setFailed(null);
|
|
1929
|
+
setApplied(false);
|
|
1190
1930
|
};
|
|
1191
1931
|
const discard = () => {
|
|
1192
|
-
setDraft(draftOf(
|
|
1932
|
+
setDraft(draftOf(coreSnapshot.value, interactionSnapshot.value));
|
|
1193
1933
|
setDirty(/* @__PURE__ */ new Set());
|
|
1194
|
-
setReset(/* @__PURE__ */ new Set());
|
|
1195
1934
|
setFailed(null);
|
|
1935
|
+
setApplied(false);
|
|
1196
1936
|
};
|
|
1197
1937
|
const save = async () => {
|
|
1198
|
-
if (error !== null || dirty.size === 0 || saving) return;
|
|
1938
|
+
if (error !== null || dirty.size === 0 || saving || !writable) return;
|
|
1199
1939
|
setSaving(true);
|
|
1200
1940
|
setFailed(null);
|
|
1201
1941
|
try {
|
|
1202
|
-
const
|
|
1203
|
-
|
|
1204
|
-
if (
|
|
1205
|
-
|
|
1206
|
-
|
|
1942
|
+
const coreOps = operations(CORE_FIELDS, dirty, draft);
|
|
1943
|
+
if (coreOps.length > 0) {
|
|
1944
|
+
if (Object.hasOwn(coreUser, "customPackId")) coreOps.push({
|
|
1945
|
+
op: "unset",
|
|
1946
|
+
path: ["customPackId"]
|
|
1947
|
+
});
|
|
1948
|
+
if (Object.hasOwn(coreUser, "customPacks")) coreOps.push({
|
|
1949
|
+
op: "unset",
|
|
1950
|
+
path: ["customPacks"]
|
|
1951
|
+
});
|
|
1207
1952
|
}
|
|
1953
|
+
const interactionOps = operations(INTERACTION_FIELDS, dirty, draft);
|
|
1954
|
+
await Promise.all([...coreOps.length === 0 ? [] : [commit(scope, coreOps)], ...interactionOps.length === 0 ? [] : [commit(interactionScope, interactionOps)]]);
|
|
1208
1955
|
setDirty(/* @__PURE__ */ new Set());
|
|
1209
|
-
|
|
1956
|
+
setApplied(true);
|
|
1957
|
+
if (coreOps.length > 0) setTargetRevision((revision) => revision + 1);
|
|
1210
1958
|
} catch (reason) {
|
|
1211
1959
|
setFailed(reason instanceof Error ? reason.message : String(reason));
|
|
1212
1960
|
} finally {
|
|
1213
1961
|
setSaving(false);
|
|
1214
1962
|
}
|
|
1215
1963
|
};
|
|
1216
|
-
const
|
|
1217
|
-
const
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
className: MnemonSettingsCard_module_css_default.card,
|
|
1964
|
+
const coreDisabled = loading || saving || !coreSnapshot.writable;
|
|
1965
|
+
const interactionDisabled = loading || saving || !interactionSnapshot.writable;
|
|
1966
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("section", {
|
|
1967
|
+
className: MnemonSettingsCard_module_css_default.page,
|
|
1221
1968
|
"aria-label": t("config.aria"),
|
|
1222
1969
|
"aria-busy": saving || loading,
|
|
1223
|
-
children:
|
|
1224
|
-
className: MnemonSettingsCard_module_css_default.
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
className:
|
|
1230
|
-
"
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
"aria-label": t("config.scopeAria"),
|
|
1262
|
-
"aria-describedby": "mnemon-storage-scope-hint",
|
|
1263
|
-
value: draft.storageScope,
|
|
1264
|
-
onChange: (event) => edit("storageScope", event.target.value),
|
|
1265
|
-
disabled: controlsDisabled,
|
|
1266
|
-
children: [
|
|
1267
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("option", {
|
|
1268
|
-
value: "global",
|
|
1269
|
-
children: [t("config.global"), " · ~/.mnemon"]
|
|
1270
|
-
}),
|
|
1271
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("option", {
|
|
1272
|
-
value: "workspace",
|
|
1273
|
-
children: [t("config.workspace"), " · <workspace>/.mnemon"]
|
|
1274
|
-
}),
|
|
1275
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
1276
|
-
value: "custom",
|
|
1277
|
-
children: t("config.custom")
|
|
1278
|
-
})
|
|
1279
|
-
]
|
|
1280
|
-
})
|
|
1281
|
-
}), draft.storageScope === "custom" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingField, {
|
|
1282
|
-
controlId: "mnemon-custom-directory",
|
|
1283
|
-
t,
|
|
1284
|
-
label: t("config.customDirectory"),
|
|
1285
|
-
hint: t("config.customHint"),
|
|
1286
|
-
overridden: fieldMeta("dataDir"),
|
|
1287
|
-
resetDisabled: controlsDisabled,
|
|
1288
|
-
onReset: () => resetField("dataDir"),
|
|
1289
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
1290
|
-
id: "mnemon-custom-directory",
|
|
1291
|
-
"aria-label": t("config.customAria"),
|
|
1292
|
-
"aria-describedby": `mnemon-custom-directory-hint${errorId === void 0 ? "" : ` ${errorId}`}`,
|
|
1293
|
-
"aria-invalid": error !== null,
|
|
1294
|
-
value: draft.dataDir,
|
|
1295
|
-
onChange: (event) => edit("dataDir", event.target.value),
|
|
1296
|
-
placeholder: "~/mnemon-data",
|
|
1297
|
-
spellCheck: false,
|
|
1298
|
-
autoComplete: "off",
|
|
1299
|
-
disabled: controlsDisabled
|
|
1300
|
-
})
|
|
1970
|
+
children: loading ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1971
|
+
className: MnemonSettingsCard_module_css_default.loading,
|
|
1972
|
+
role: "status",
|
|
1973
|
+
children: t("common.loading")
|
|
1974
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
1975
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
1976
|
+
className: MnemonSettingsCard_module_css_default.pageHeader,
|
|
1977
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", { children: t("config.title") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("config.description") })]
|
|
1978
|
+
}),
|
|
1979
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1980
|
+
className: MnemonSettingsCard_module_css_default.section,
|
|
1981
|
+
"aria-labelledby": "mnemon-display-heading",
|
|
1982
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1983
|
+
className: MnemonSettingsCard_module_css_default.sectionHeading,
|
|
1984
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
1985
|
+
id: "mnemon-display-heading",
|
|
1986
|
+
children: t("config.displayTitle")
|
|
1987
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("config.displayDescription") })] })
|
|
1988
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1989
|
+
className: `${MnemonSettingsCard_module_css_default.choiceGrid} ${MnemonSettingsCard_module_css_default.displayGrid}`,
|
|
1990
|
+
role: "radiogroup",
|
|
1991
|
+
"aria-label": t("config.displayAria"),
|
|
1992
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChoiceCard, {
|
|
1993
|
+
id: "mnemon-display-sidebar",
|
|
1994
|
+
name: "mnemon-display",
|
|
1995
|
+
label: t("config.displaySidebar"),
|
|
1996
|
+
detail: t("config.displaySidebarHint"),
|
|
1997
|
+
checked: draft.displayMode === "sidebar",
|
|
1998
|
+
disabled: coreDisabled,
|
|
1999
|
+
onChange: () => edit("displayMode", "sidebar")
|
|
2000
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChoiceCard, {
|
|
2001
|
+
id: "mnemon-display-buildin",
|
|
2002
|
+
name: "mnemon-display",
|
|
2003
|
+
label: t("config.displayBuildin"),
|
|
2004
|
+
detail: t("config.displayBuildinHint"),
|
|
2005
|
+
checked: draft.displayMode === "buildin",
|
|
2006
|
+
disabled: coreDisabled,
|
|
2007
|
+
onChange: () => edit("displayMode", "buildin")
|
|
1301
2008
|
})]
|
|
1302
|
-
})
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
2009
|
+
})]
|
|
2010
|
+
}),
|
|
2011
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2012
|
+
className: MnemonSettingsCard_module_css_default.section,
|
|
2013
|
+
"aria-labelledby": "mnemon-storage-heading",
|
|
2014
|
+
children: [
|
|
2015
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2016
|
+
className: MnemonSettingsCard_module_css_default.sectionHeading,
|
|
2017
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
2018
|
+
id: "mnemon-storage-heading",
|
|
2019
|
+
children: t("config.storageTitle")
|
|
2020
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("config.storageDescription") })] })
|
|
2021
|
+
}),
|
|
2022
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2023
|
+
className: MnemonSettingsCard_module_css_default.choiceGrid,
|
|
2024
|
+
role: "radiogroup",
|
|
2025
|
+
"aria-label": t("config.scopeAria"),
|
|
2026
|
+
children: [
|
|
2027
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChoiceCard, {
|
|
2028
|
+
id: "mnemon-storage-global",
|
|
2029
|
+
name: "mnemon-storage",
|
|
2030
|
+
label: t("config.global"),
|
|
2031
|
+
detail: "~/.mnemon",
|
|
2032
|
+
checked: draft.storageScope === "global",
|
|
2033
|
+
disabled: coreDisabled,
|
|
2034
|
+
onChange: () => edit("storageScope", "global")
|
|
2035
|
+
}),
|
|
2036
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChoiceCard, {
|
|
2037
|
+
id: "mnemon-storage-workspace",
|
|
2038
|
+
name: "mnemon-storage",
|
|
2039
|
+
label: t("config.workspace"),
|
|
2040
|
+
detail: "<workspace>/.mnemon",
|
|
2041
|
+
checked: draft.storageScope === "workspace",
|
|
2042
|
+
disabled: coreDisabled,
|
|
2043
|
+
onChange: () => edit("storageScope", "workspace")
|
|
2044
|
+
}),
|
|
2045
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChoiceCard, {
|
|
2046
|
+
id: "mnemon-storage-custom",
|
|
2047
|
+
name: "mnemon-storage",
|
|
2048
|
+
label: t("config.custom"),
|
|
2049
|
+
detail: draft.dataDir === "" ? t("config.customHintShort") : t("config.customSelected"),
|
|
2050
|
+
checked: draft.storageScope === "custom",
|
|
2051
|
+
disabled: coreDisabled,
|
|
2052
|
+
onChange: () => edit("storageScope", "custom")
|
|
2053
|
+
})
|
|
2054
|
+
]
|
|
2055
|
+
}),
|
|
2056
|
+
draft.storageScope === "custom" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2057
|
+
className: MnemonSettingsCard_module_css_default.settingRow,
|
|
2058
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2059
|
+
className: MnemonSettingsCard_module_css_default.settingCopy,
|
|
2060
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("config.customDirectory") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.customDirectoryHint") })]
|
|
2061
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2062
|
+
className: MnemonSettingsCard_module_css_default.directoryControl,
|
|
2063
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
2064
|
+
id: "mnemon-custom-directory",
|
|
2065
|
+
name: "mnemon-custom-directory",
|
|
2066
|
+
type: "text",
|
|
2067
|
+
className: MnemonSettingsCard_module_css_default.directoryInput,
|
|
2068
|
+
"aria-label": t("config.customAria"),
|
|
2069
|
+
"aria-invalid": error !== null,
|
|
2070
|
+
placeholder: t("config.customPlaceholder"),
|
|
2071
|
+
value: draft.dataDir,
|
|
2072
|
+
disabled: coreDisabled,
|
|
2073
|
+
autoComplete: "off",
|
|
2074
|
+
spellCheck: false,
|
|
2075
|
+
autoCapitalize: "none",
|
|
2076
|
+
autoCorrect: "off",
|
|
2077
|
+
onChange: (event) => edit("dataDir", event.target.value)
|
|
2078
|
+
})
|
|
2079
|
+
})]
|
|
2080
|
+
})
|
|
2081
|
+
]
|
|
2082
|
+
}),
|
|
2083
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
2084
|
+
className: MnemonSettingsCard_module_css_default.section,
|
|
2085
|
+
"aria-labelledby": "mnemon-interaction-heading",
|
|
2086
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2087
|
+
className: MnemonSettingsCard_module_css_default.sectionHeading,
|
|
2088
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
2089
|
+
id: "mnemon-interaction-heading",
|
|
2090
|
+
children: t("config.interactionTitle")
|
|
2091
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("config.interactionHint") })] })
|
|
2092
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2093
|
+
className: MnemonSettingsCard_module_css_default.rowGroup,
|
|
2094
|
+
children: [
|
|
2095
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleRow, {
|
|
2096
|
+
id: "mnemon-interaction-toolviews",
|
|
2097
|
+
label: t("config.interactionToolviews"),
|
|
2098
|
+
hint: t("config.interactionToolviewsHint"),
|
|
2099
|
+
checked: draft.toolviews,
|
|
2100
|
+
disabled: interactionDisabled,
|
|
2101
|
+
onChange: (value) => edit("toolviews", value)
|
|
2102
|
+
}),
|
|
2103
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleRow, {
|
|
2104
|
+
id: "mnemon-interaction-turn-bar",
|
|
2105
|
+
label: t("config.interactionTurnBar"),
|
|
2106
|
+
hint: t("config.interactionTurnBarHint"),
|
|
2107
|
+
checked: draft.turnBar,
|
|
2108
|
+
disabled: interactionDisabled,
|
|
2109
|
+
onChange: (value) => edit("turnBar", value)
|
|
2110
|
+
}),
|
|
2111
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleRow, {
|
|
2112
|
+
id: "mnemon-interaction-save-action",
|
|
2113
|
+
label: t("config.interactionSaveAction"),
|
|
2114
|
+
hint: t("config.interactionSaveActionHint"),
|
|
2115
|
+
checked: draft.saveAction,
|
|
2116
|
+
disabled: interactionDisabled,
|
|
2117
|
+
onChange: (value) => edit("saveAction", value)
|
|
2118
|
+
})
|
|
2119
|
+
]
|
|
2120
|
+
})]
|
|
2121
|
+
}),
|
|
2122
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonPackSection, {
|
|
2123
|
+
...connection === void 0 ? {} : { connection },
|
|
2124
|
+
refreshKey: targetRevision,
|
|
2125
|
+
t
|
|
2126
|
+
}),
|
|
1348
2127
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1349
|
-
className: MnemonSettingsCard_module_css_default.
|
|
2128
|
+
className: MnemonSettingsCard_module_css_default.feedback,
|
|
2129
|
+
"aria-live": "polite",
|
|
1350
2130
|
children: [
|
|
1351
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("
|
|
1352
|
-
className: MnemonSettingsCard_module_css_default.
|
|
1353
|
-
|
|
1354
|
-
children:
|
|
2131
|
+
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2132
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
2133
|
+
role: "alert",
|
|
2134
|
+
children: error
|
|
1355
2135
|
}),
|
|
1356
|
-
|
|
1357
|
-
className: MnemonSettingsCard_module_css_default.
|
|
1358
|
-
|
|
2136
|
+
failed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2137
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
2138
|
+
role: "alert",
|
|
2139
|
+
children: t("config.saveFailed", { error: failed })
|
|
1359
2140
|
}),
|
|
1360
|
-
|
|
1361
|
-
className: MnemonSettingsCard_module_css_default.
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
2141
|
+
applied && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2142
|
+
className: MnemonSettingsCard_module_css_default.success,
|
|
2143
|
+
role: "status",
|
|
2144
|
+
children: t("config.ready")
|
|
2145
|
+
}),
|
|
2146
|
+
!writable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2147
|
+
className: MnemonSettingsCard_module_css_default.readOnly,
|
|
2148
|
+
children: t("config.readOnly")
|
|
1366
2149
|
})
|
|
1367
2150
|
]
|
|
1368
2151
|
}),
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
2152
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("footer", {
|
|
2153
|
+
className: `${MnemonSettingsCard_module_css_default.actions} ${dirty.size > 0 ? MnemonSettingsCard_module_css_default.actionsVisible : ""}`,
|
|
2154
|
+
"aria-live": "polite",
|
|
2155
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("config.unsaved") }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2156
|
+
type: "button",
|
|
2157
|
+
className: MnemonSettingsCard_module_css_default.discard,
|
|
2158
|
+
disabled: saving,
|
|
2159
|
+
onClick: discard,
|
|
2160
|
+
children: t("config.discard")
|
|
2161
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2162
|
+
type: "button",
|
|
2163
|
+
className: MnemonSettingsCard_module_css_default.save,
|
|
2164
|
+
disabled: saving || error !== null || !writable,
|
|
2165
|
+
onClick: () => void save(),
|
|
2166
|
+
children: saving ? t("config.saving") : t("config.save")
|
|
2167
|
+
})] })]
|
|
2168
|
+
}),
|
|
2169
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
2170
|
+
className: MnemonSettingsCard_module_css_default.settingsNote,
|
|
2171
|
+
children: [
|
|
2172
|
+
t("config.noticeBefore"),
|
|
2173
|
+
" ",
|
|
2174
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: ".dsh/settings.yaml" }),
|
|
2175
|
+
t("config.noticeAfter")
|
|
2176
|
+
]
|
|
2177
|
+
})
|
|
2178
|
+
] })
|
|
2179
|
+
});
|
|
2180
|
+
}
|
|
2181
|
+
function ChoiceCard(props) {
|
|
2182
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2183
|
+
className: MnemonSettingsCard_module_css_default.choiceCard,
|
|
2184
|
+
htmlFor: props.id,
|
|
2185
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
2186
|
+
id: props.id,
|
|
2187
|
+
name: props.name,
|
|
2188
|
+
type: "radio",
|
|
2189
|
+
"aria-label": props.label,
|
|
2190
|
+
checked: props.checked,
|
|
2191
|
+
disabled: props.disabled,
|
|
2192
|
+
onChange: props.onChange
|
|
2193
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
2194
|
+
className: MnemonSettingsCard_module_css_default.choiceFace,
|
|
2195
|
+
children: [
|
|
2196
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: props.label }),
|
|
2197
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: props.detail }),
|
|
2198
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2199
|
+
className: MnemonSettingsCard_module_css_default.check,
|
|
2200
|
+
"aria-hidden": "true",
|
|
2201
|
+
children: "✓"
|
|
2202
|
+
})
|
|
2203
|
+
]
|
|
2204
|
+
})]
|
|
2205
|
+
});
|
|
2206
|
+
}
|
|
2207
|
+
function ToggleRow(props) {
|
|
2208
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2209
|
+
className: MnemonSettingsCard_module_css_default.toggleRow,
|
|
2210
|
+
htmlFor: props.id,
|
|
2211
|
+
children: [
|
|
2212
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
2213
|
+
className: MnemonSettingsCard_module_css_default.settingCopy,
|
|
2214
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: props.label }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: props.hint })]
|
|
2215
|
+
}),
|
|
2216
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
2217
|
+
id: props.id,
|
|
2218
|
+
type: "checkbox",
|
|
2219
|
+
"aria-label": props.label,
|
|
2220
|
+
checked: props.checked,
|
|
2221
|
+
disabled: props.disabled,
|
|
2222
|
+
onChange: (event) => props.onChange(event.target.checked)
|
|
2223
|
+
}),
|
|
2224
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2225
|
+
className: MnemonSettingsCard_module_css_default.switch,
|
|
2226
|
+
"aria-hidden": "true",
|
|
2227
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {})
|
|
1374
2228
|
})
|
|
1375
2229
|
]
|
|
1376
2230
|
});
|
|
1377
2231
|
}
|
|
1378
2232
|
//#endregion
|
|
2233
|
+
//#region src/client/anchor.ts
|
|
2234
|
+
const MNEMON_ANCHOR_EVENT = "mnemon:anchor";
|
|
2235
|
+
const pendingBySession = /* @__PURE__ */ new Map();
|
|
2236
|
+
function keyOf(sessionId) {
|
|
2237
|
+
return sessionId === void 0 || sessionId === "" ? "*" : sessionId;
|
|
2238
|
+
}
|
|
2239
|
+
/** Ask the Mnemon view to open a page; held until a matching view consumes it. */
|
|
2240
|
+
function dispatchMnemonAnchor(anchor) {
|
|
2241
|
+
pendingBySession.set(keyOf(anchor.sessionId), anchor);
|
|
2242
|
+
window.dispatchEvent(new CustomEvent(MNEMON_ANCHOR_EVENT, { detail: anchor }));
|
|
2243
|
+
}
|
|
2244
|
+
/** Take the anchor held for this session (usually at mount time), or null. */
|
|
2245
|
+
function consumeMnemonAnchor(sessionId) {
|
|
2246
|
+
const key = keyOf(sessionId);
|
|
2247
|
+
const anchor = pendingBySession.get(key);
|
|
2248
|
+
if (anchor === void 0) return null;
|
|
2249
|
+
pendingBySession.delete(key);
|
|
2250
|
+
return anchor;
|
|
2251
|
+
}
|
|
2252
|
+
/** Subscribe to anchors addressed to this session; returns an unsubscribe. */
|
|
2253
|
+
function subscribeMnemonAnchor(sessionId, onAnchor) {
|
|
2254
|
+
const key = keyOf(sessionId);
|
|
2255
|
+
const handler = (event) => {
|
|
2256
|
+
const anchor = event.detail;
|
|
2257
|
+
if (anchor !== void 0 && keyOf(anchor.sessionId) === key) {
|
|
2258
|
+
if (pendingBySession.get(key) === anchor) pendingBySession.delete(key);
|
|
2259
|
+
onAnchor(anchor);
|
|
2260
|
+
}
|
|
2261
|
+
};
|
|
2262
|
+
window.addEventListener(MNEMON_ANCHOR_EVENT, handler);
|
|
2263
|
+
return () => window.removeEventListener(MNEMON_ANCHOR_EVENT, handler);
|
|
2264
|
+
}
|
|
2265
|
+
//#endregion
|
|
1379
2266
|
//#region node_modules/.pnpm/markdown-to-jsx@7.7.17_react@18.3.1/node_modules/markdown-to-jsx/dist/index.module.js
|
|
1380
2267
|
function n() {
|
|
1381
2268
|
return n = Object.assign ? Object.assign.bind() : function(r) {
|
|
@@ -1465,7 +2352,7 @@ window.__ModuleLoader__.load({
|
|
|
1465
2352
|
var y = /^(?: {4}[^\n]+\n*)+(?:\n *)+\n?/;
|
|
1466
2353
|
var h = /^(`+)((?:\\`|(?!\1)`|[^`])+)\1/;
|
|
1467
2354
|
var g = /^(?:\n *)*\n/;
|
|
1468
|
-
var m = /\r\n?/g;
|
|
2355
|
+
var m$1 = /\r\n?/g;
|
|
1469
2356
|
var k = /^\[\^([^\]]+)](:(.*)((\n+ {4,}.*)|(\n(?!\[\^).+))*)/;
|
|
1470
2357
|
var x = /^\[\^([^\]]+)]/;
|
|
1471
2358
|
var q = /\f/g;
|
|
@@ -2250,7 +3137,7 @@ window.__ModuleLoader__.load({
|
|
|
2250
3137
|
return r[n].i - r[e].i || (n < e ? -1 : 1);
|
|
2251
3138
|
}), function(r, n) {
|
|
2252
3139
|
return e(function(r) {
|
|
2253
|
-
return r.replace(m, "\n").replace(q, "").replace(N, " ");
|
|
3140
|
+
return r.replace(m$1, "\n").replace(q, "").replace(N, " ");
|
|
2254
3141
|
}(r), n);
|
|
2255
3142
|
};
|
|
2256
3143
|
}(lr), dr = function(r, n) {
|
|
@@ -2319,131 +3206,6 @@ window.__ModuleLoader__.load({
|
|
|
2319
3206
|
new RegExp(`\\{id:(${JS_STRING}),label:(${JS_STRING}),title:(${JS_STRING}),color:(${JS_STRING}),font:\\{color:"white"\\}\\}`, "g");
|
|
2320
3207
|
new RegExp(`\\{from:(${JS_STRING}),to:(${JS_STRING}),label:(${JS_STRING}),color:\\{color:(${JS_STRING})\\},arrows:"to"`, "g");
|
|
2321
3208
|
//#endregion
|
|
2322
|
-
//#region src/rpc.ts
|
|
2323
|
-
const MNEMON_READ_CHANNEL = "/dsh-mnemon-read";
|
|
2324
|
-
const MNEMON_WRITE_CHANNEL = "/dsh-mnemon-write";
|
|
2325
|
-
//#endregion
|
|
2326
|
-
//#region src/client/api.ts
|
|
2327
|
-
var MnemonClient = class {
|
|
2328
|
-
connection;
|
|
2329
|
-
sessionId;
|
|
2330
|
-
constructor(connection, sessionId) {
|
|
2331
|
-
this.connection = connection;
|
|
2332
|
-
this.sessionId = sessionId;
|
|
2333
|
-
}
|
|
2334
|
-
async call(channel, endpoint, payload) {
|
|
2335
|
-
const response = await this.connection.rpc.call(channel, endpoint, payload);
|
|
2336
|
-
if (!response.ok) throw new Error(response.error.message);
|
|
2337
|
-
return response.value;
|
|
2338
|
-
}
|
|
2339
|
-
status() {
|
|
2340
|
-
return this.call(MNEMON_READ_CHANNEL, "status", this.sessionId === void 0 ? {} : { sessionId: this.sessionId });
|
|
2341
|
-
}
|
|
2342
|
-
runtimeMemory() {
|
|
2343
|
-
return this.call(MNEMON_READ_CHANNEL, "runtime-memory", {});
|
|
2344
|
-
}
|
|
2345
|
-
mutateRuntimeMemory(request) {
|
|
2346
|
-
return this.call(MNEMON_WRITE_CHANNEL, "runtime-memory", {
|
|
2347
|
-
...request,
|
|
2348
|
-
sessionId: this.sessionId
|
|
2349
|
-
});
|
|
2350
|
-
}
|
|
2351
|
-
documents() {
|
|
2352
|
-
return this.call(MNEMON_READ_CHANNEL, "documents", { sessionId: this.sessionId });
|
|
2353
|
-
}
|
|
2354
|
-
document(id) {
|
|
2355
|
-
return this.call(MNEMON_READ_CHANNEL, "document", {
|
|
2356
|
-
sessionId: this.sessionId,
|
|
2357
|
-
id
|
|
2358
|
-
});
|
|
2359
|
-
}
|
|
2360
|
-
searchDocuments(query, includeArchived = false, limit = 50) {
|
|
2361
|
-
return this.call(MNEMON_READ_CHANNEL, "document-search", {
|
|
2362
|
-
sessionId: this.sessionId,
|
|
2363
|
-
query,
|
|
2364
|
-
includeArchived,
|
|
2365
|
-
limit
|
|
2366
|
-
});
|
|
2367
|
-
}
|
|
2368
|
-
mutateDocument(request) {
|
|
2369
|
-
return this.call(MNEMON_WRITE_CHANNEL, "document", {
|
|
2370
|
-
...request,
|
|
2371
|
-
sessionId: this.sessionId
|
|
2372
|
-
});
|
|
2373
|
-
}
|
|
2374
|
-
archiveDocument(id) {
|
|
2375
|
-
return this.call(MNEMON_WRITE_CHANNEL, "document", {
|
|
2376
|
-
action: "archive",
|
|
2377
|
-
id,
|
|
2378
|
-
sessionId: this.sessionId
|
|
2379
|
-
});
|
|
2380
|
-
}
|
|
2381
|
-
bodies() {
|
|
2382
|
-
return this.call(MNEMON_READ_CHANNEL, "bodies", {});
|
|
2383
|
-
}
|
|
2384
|
-
graph(memoryBodyIds) {
|
|
2385
|
-
return this.call(MNEMON_READ_CHANNEL, "graph", memoryBodyIds === void 0 ? {} : { memoryBodyIds });
|
|
2386
|
-
}
|
|
2387
|
-
list(request = {}) {
|
|
2388
|
-
return this.call(MNEMON_READ_CHANNEL, "list", request);
|
|
2389
|
-
}
|
|
2390
|
-
entities(entity, limit) {
|
|
2391
|
-
return this.call(MNEMON_READ_CHANNEL, "entities", {
|
|
2392
|
-
sessionId: this.sessionId,
|
|
2393
|
-
...entity === void 0 ? {} : { entity },
|
|
2394
|
-
...limit === void 0 ? {} : { limit }
|
|
2395
|
-
});
|
|
2396
|
-
}
|
|
2397
|
-
search(request) {
|
|
2398
|
-
return this.call(MNEMON_READ_CHANNEL, "search", {
|
|
2399
|
-
...request,
|
|
2400
|
-
sessionId: this.sessionId
|
|
2401
|
-
});
|
|
2402
|
-
}
|
|
2403
|
-
agentSearch(request) {
|
|
2404
|
-
return this.call(MNEMON_READ_CHANNEL, "agent-search", {
|
|
2405
|
-
...request,
|
|
2406
|
-
sessionId: this.sessionId
|
|
2407
|
-
});
|
|
2408
|
-
}
|
|
2409
|
-
related(id, memoryBodyId) {
|
|
2410
|
-
return this.call(MNEMON_READ_CHANNEL, "related", {
|
|
2411
|
-
id,
|
|
2412
|
-
depth: 2,
|
|
2413
|
-
sessionId: this.sessionId,
|
|
2414
|
-
...memoryBodyId === void 0 ? {} : { memoryBodyId }
|
|
2415
|
-
});
|
|
2416
|
-
}
|
|
2417
|
-
remember(request) {
|
|
2418
|
-
return this.call(MNEMON_WRITE_CHANNEL, "remember", {
|
|
2419
|
-
...request,
|
|
2420
|
-
sessionId: this.sessionId
|
|
2421
|
-
});
|
|
2422
|
-
}
|
|
2423
|
-
supervise(content) {
|
|
2424
|
-
return this.call(MNEMON_WRITE_CHANNEL, "supervise", {
|
|
2425
|
-
sessionId: this.sessionId,
|
|
2426
|
-
content
|
|
2427
|
-
});
|
|
2428
|
-
}
|
|
2429
|
-
forget(id, memoryBodyId) {
|
|
2430
|
-
return this.call(MNEMON_WRITE_CHANNEL, "forget", {
|
|
2431
|
-
id,
|
|
2432
|
-
sessionId: this.sessionId,
|
|
2433
|
-
...memoryBodyId === void 0 ? {} : { memoryBodyId }
|
|
2434
|
-
});
|
|
2435
|
-
}
|
|
2436
|
-
createBody(request) {
|
|
2437
|
-
return this.call(MNEMON_WRITE_CHANNEL, "body-create", request);
|
|
2438
|
-
}
|
|
2439
|
-
updateBody(memoryBodyId, request) {
|
|
2440
|
-
return this.call(MNEMON_WRITE_CHANNEL, "body-update", {
|
|
2441
|
-
memoryBodyId,
|
|
2442
|
-
...request
|
|
2443
|
-
});
|
|
2444
|
-
}
|
|
2445
|
-
};
|
|
2446
|
-
//#endregion
|
|
2447
3209
|
//#region src/client/MnemonLogo.tsx
|
|
2448
3210
|
/** Official Mnemon mark from mnemon-dev/mnemon (Apache-2.0). */
|
|
2449
3211
|
function MnemonLogo({ className, title = "Mnemon" }) {
|
|
@@ -2499,213 +3261,216 @@ window.__ModuleLoader__.load({
|
|
|
2499
3261
|
});
|
|
2500
3262
|
}
|
|
2501
3263
|
//#endregion
|
|
2502
|
-
//#region \0dsh-mnemon-css:/
|
|
2503
|
-
const css = ".JK_n9q_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);--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-l2);--mn-line-strong:var(--dsw-alias-border-l1);--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:system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;box-sizing:border-box;height:100%;min-height:600px;color:var(--mn-text);background:var(--mn-bg);font:13px/1.55 var(--mn-sans);flex-direction:column;display:flex;overflow:hidden}.JK_n9q_shell *,.JK_n9q_shell :before,.JK_n9q_shell :after{box-sizing:border-box}.JK_n9q_shell button,.JK_n9q_shell input,.JK_n9q_shell select,.JK_n9q_shell textarea{color:inherit;font:inherit}.JK_n9q_shell button,.JK_n9q_shell select{touch-action:manipulation}.JK_n9q_shell button:focus-visible,.JK_n9q_shell input:focus-visible,.JK_n9q_shell select:focus-visible,.JK_n9q_shell textarea:focus-visible,.JK_n9q_shell summary:focus-visible,.JK_n9q_shell [role=button]:focus-visible{outline:2px solid var(--mn-accent);outline-offset:2px}.JK_n9q_masthead{border-bottom:1px solid var(--mn-line);background:radial-gradient(circle at 70% -70%, color-mix(in srgb, var(--mn-accent) 12%, transparent), transparent 42%), var(--mn-bg);flex:none;grid-template-columns:minmax(260px,1fr) auto auto;align-items:center;gap:clamp(14px,2vw,28px);min-height:68px;padding:10px clamp(18px,2.5vw,32px);display:grid}.JK_n9q_brand{align-items:center;gap:11px;min-width:0;display:flex}.JK_n9q_brandLogo{width:38px;height:38px;box-shadow:0 0 0 1px var(--mn-line-strong);border-radius:9px;flex:none;overflow:hidden}.JK_n9q_brand h1{letter-spacing:-.02em;margin:1px 0 0;font-size:17px;line-height:1.15}.JK_n9q_cardKicker,.JK_n9q_sectionHeading>div>span,.JK_n9q_entityHeading>span,.JK_n9q_inspectorHeading>span{color:var(--mn-faint);font:650 9px/1.2 var(--mn-code);letter-spacing:.12em;text-transform:uppercase}.JK_n9q_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}.JK_n9q_statusDot{border-radius:50%;width:6px;height:6px}.JK_n9q_online{background:var(--mn-success);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 15%, transparent)}.JK_n9q_offline{background:var(--mn-danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-danger) 14%, transparent)}.JK_n9q_checking{background:var(--mn-faint);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-faint) 12%, transparent)}.JK_n9q_iconButton{width:32px;height:32px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;display:grid}.JK_n9q_iconButton:hover{color:var(--mn-accent);background:var(--mn-hover)}.JK_n9q_alert,.JK_n9q_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}.JK_n9q_alert{flex-direction:column;flex:none;margin:10px clamp(18px,2.5vw,32px) 0;display:flex}.JK_n9q_telemetry{align-items:center;min-width:0;display:flex}.JK_n9q_telemetryMetric{border-left:1px solid var(--mn-line);gap:2px;min-width:72px;padding:1px 14px;display:grid}.JK_n9q_telemetryMetric span{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9px;overflow:hidden}.JK_n9q_telemetryMetric strong{font:650 13px/1 var(--mn-code);font-variant-numeric:tabular-nums}.JK_n9q_workspace{flex-direction:column;flex:1;min-height:0;display:flex}.JK_n9q_topNavigation{border-bottom:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-1) 72%, var(--mn-bg));flex:none;justify-content:space-between;align-items:stretch;gap:14px;min-width:0;min-height:48px;padding:0 clamp(18px,2.5vw,32px);display:flex}.JK_n9q_nav{overscroll-behavior-inline:contain;scrollbar-width:none;align-items:stretch;gap:10px;min-width:0;display:flex;overflow-x:auto}.JK_n9q_nav::-webkit-scrollbar{display:none}.JK_n9q_navGroup{align-items:stretch;gap:14px;min-width:0;display:flex}.JK_n9q_navGroupDivider{background:var(--mn-line);flex:none;align-self:center;width:1px;height:22px}.JK_n9q_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}.JK_n9q_nav button:hover,.JK_n9q_nav button[aria-current=page]{color:var(--mn-text)}.JK_n9q_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}.JK_n9q_nav button[aria-current=page] .JK_n9q_navGlyph{color:var(--mn-accent)}.JK_n9q_nav button>span:last-child{min-width:0;display:block}.JK_n9q_nav button strong{font-size:12px;font-weight:600}.JK_n9q_nav button small{display:none}.JK_n9q_navGlyph{color:var(--mn-faint);font:600 13px/1 var(--mn-code)}@media (width>=1000px){.JK_n9q_nav button{min-height:50px}.JK_n9q_nav button small{color:var(--mn-faint);margin-top:1px;font-size:9px;line-height:1.3;display:block}}.JK_n9q_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}.JK_n9q_spaceSummary>span{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9px;overflow:hidden}.JK_n9q_spaceSummary code{color:var(--mn-accent);font:650 12px/1 var(--mn-code);grid-row:span 2;align-self:center}.JK_n9q_spaceSummary small{color:var(--mn-faint);font-size:9px}.JK_n9q_canvas{background:var(--mn-bg);flex:1;min-width:0;overflow:auto}.JK_n9q_page{width:min(1320px,100%);min-height:100%;margin:0 auto;padding:clamp(18px,2.2vw,28px) clamp(18px,2.8vw,34px) clamp(150px,18vh,190px)}.JK_n9q_pageHeader{justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:16px;display:flex}.JK_n9q_pageHeader h2{letter-spacing:-.025em;margin:2px 0;font-size:20px;line-height:1.2}.JK_n9q_pageHeader p{max-width:72ch;color:var(--mn-muted);margin:0;font-size:12px;line-height:1.65}.JK_n9q_pageHeaderMeta{flex:none;align-items:center;gap:9px;display:flex}.JK_n9q_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}.JK_n9q_primaryButton,.JK_n9q_secondaryButton,.JK_n9q_ghostButton,.JK_n9q_dangerButton,.JK_n9q_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}.JK_n9q_primaryButton{border:1px solid var(--mn-accent);color:#fff;background:var(--mn-accent)}.JK_n9q_secondaryButton{border:1px solid var(--mn-line-strong);color:var(--mn-text);background:var(--mn-layer-1)}.JK_n9q_ghostButton,.JK_n9q_dangerButton{background:0 0;border:1px solid #0000;min-height:32px;padding:0 9px}.JK_n9q_ghostButton{color:var(--mn-muted)}.JK_n9q_dangerButton{color:var(--mn-danger)}.JK_n9q_dangerSolidButton{border:1px solid var(--mn-danger);color:#fff;background:var(--mn-danger);min-height:29px}.JK_n9q_primaryButton:hover,.JK_n9q_secondaryButton:hover,.JK_n9q_ghostButton:hover,.JK_n9q_dangerButton:hover{filter:brightness(.98);background-color:var(--mn-hover)}.JK_n9q_primaryButton:hover{background-color:var(--mn-accent)}.JK_n9q_shell button:disabled{cursor:not-allowed;opacity:.48}.JK_n9q_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}.JK_n9q_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}.JK_n9q_emptyState h3{margin:0 0 5px;font-size:16px}.JK_n9q_emptyState p{max-width:500px;color:var(--mn-muted);margin:0}.JK_n9q_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}.JK_n9q_inlineError{margin:0 0 14px}.JK_n9q_muted,.JK_n9q_loading{color:var(--mn-faint);padding:16px 0;font-size:12px}.JK_n9q_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}.JK_n9q_bodyDirectoryHeader{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:10px;display:flex}.JK_n9q_bodyDirectoryHeader h3{margin:1px 0;font-size:13px}.JK_n9q_bodyDirectoryHeader p{color:var(--mn-muted);margin:0;font-size:10px}.JK_n9q_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}.JK_n9q_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}.JK_n9q_bodyGrid{grid-template-columns:repeat(auto-fit,minmax(245px,1fr));gap:7px;display:grid}.JK_n9q_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}.JK_n9q_bodyDirectoryEmpty>span{opacity:.6;font-size:28px}.JK_n9q_bodyDirectoryEmpty strong{color:var(--mn-text);display:block}.JK_n9q_bodyDirectoryEmpty p{margin:3px 0 0;font-size:10px}.JK_n9q_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}.JK_n9q_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)}.JK_n9q_bodyCardTop{grid-template-columns:7px minmax(0,1fr) auto;align-items:center;gap:8px;display:grid}.JK_n9q_bodySignal{background:var(--mn-faint);border-radius:50%;width:7px;height:7px}.JK_n9q_bodyCard[data-active] .JK_n9q_bodySignal{background:var(--mn-body-accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--mn-body-accent) 14%, transparent)}.JK_n9q_bodyCard:not([data-healthy]) .JK_n9q_bodySignal{background:var(--mn-danger);box-shadow:0 0 0 4px color-mix(in srgb, var(--mn-danger) 12%, transparent)}.JK_n9q_bodyCardTop>div{min-width:0;display:grid}.JK_n9q_bodyCardTop strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.JK_n9q_bodyCardTop code{color:var(--mn-faint);font:9px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.JK_n9q_bodyHealth{color:var(--mn-success);font:650 8px var(--mn-code);letter-spacing:.07em;text-transform:uppercase}.JK_n9q_bodyCard:not([data-healthy]) .JK_n9q_bodyHealth{color:var(--mn-danger)}.JK_n9q_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}.JK_n9q_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}.JK_n9q_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}.JK_n9q_bodySwitch:hover{color:var(--mn-text)}.JK_n9q_bodySwitch:hover .JK_n9q_bodySwitchTrack{border-color:var(--mn-body-accent)}.JK_n9q_bodySwitch[aria-checked=true]{color:var(--mn-text)}.JK_n9q_bodySwitch[aria-checked=true] .JK_n9q_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))}.JK_n9q_bodySwitch[aria-checked=true] .JK_n9q_bodySwitchTrack i{background:var(--mn-body-accent);transform:translate(12px)}.JK_n9q_bodyCardActions{align-items:center;gap:6px;display:flex}.JK_n9q_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}.JK_n9q_bodyEditButton:hover{color:var(--mn-text);border-color:var(--mn-line);background:var(--mn-hover)}.JK_n9q_bodyEdit{gap:9px;padding-top:2px;display:grid}.JK_n9q_bodyEdit label{color:var(--mn-faint);gap:4px;font-size:9px;display:grid}.JK_n9q_bodyEdit input,.JK_n9q_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}.JK_n9q_bodyEdit textarea{resize:vertical}.JK_n9q_bodyEdit input:focus,.JK_n9q_bodyEdit textarea:focus{border-color:var(--mn-accent)}.JK_n9q_bodyEditActions{justify-content:flex-end;gap:7px;display:flex}.JK_n9q_bodyCard>p{min-height:15px;color:var(--mn-muted);margin:7px 0;font-size:10px;line-height:1.45}.JK_n9q_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}.JK_n9q_bodyCreate{border-top:1px solid var(--mn-line);margin-top:10px;padding-top:8px}.JK_n9q_bodyCreate summary{cursor:pointer;width:max-content;color:var(--mn-accent);font-size:10px;list-style:none}.JK_n9q_bodyCreate summary::-webkit-details-marker{display:none}.JK_n9q_bodyCreate form{grid-template-columns:minmax(130px,.7fr) minmax(150px,.9fr) minmax(230px,1.7fr) auto;gap:7px;margin-top:9px;display:grid}.JK_n9q_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}.JK_n9q_bodyCreate input:focus{border-color:var(--mn-accent)}.JK_n9q_graphLayout{grid-template-columns:minmax(0,1fr) minmax(240px,270px);gap:10px;display:grid}.JK_n9q_graphPanel,.JK_n9q_graphInspector{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px}.JK_n9q_graphPanel{min-width:0;overflow:hidden}.JK_n9q_graphToolbar,.JK_n9q_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}.JK_n9q_graphToolbar{border-bottom:1px solid var(--mn-line)}.JK_n9q_graphToolbar>div:first-child{align-items:center;gap:7px;display:flex}.JK_n9q_graphToolbar small{color:var(--mn-faint)}.JK_n9q_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%}.JK_n9q_graphLegend{flex-wrap:wrap;justify-content:flex-end;gap:5px 10px;display:flex}.JK_n9q_graphLegend span{align-items:center;gap:4px;display:flex}.JK_n9q_graphLegend span:before{content:\"\";background:var(--edge-color);border-radius:2px;width:13px;height:2px}.JK_n9q_graphLegend [data-edge=temporal]{--edge-color:#87909f}.JK_n9q_graphLegend [data-edge=scope]{--edge-color:#708199}.JK_n9q_graphLegend [data-edge=scope]:before{background:repeating-linear-gradient(90deg, var(--edge-color) 0 4px, transparent 4px 7px)}.JK_n9q_graphLegend [data-edge=semantic]{--edge-color:#4d7cfe}.JK_n9q_graphLegend [data-edge=causal]{--edge-color:#ef6b5b}.JK_n9q_graphLegend [data-edge=entity]{--edge-color:#22a879}.JK_n9q_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}.JK_n9q_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}.JK_n9q_graphCanvasControls span{color:var(--mn-faint);font:9px var(--mn-code);align-items:center;gap:5px;padding:0 6px;display:flex}.JK_n9q_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%}.JK_n9q_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}.JK_n9q_graphCanvasControls button:hover,.JK_n9q_graphCanvasControls button[data-active]{border-color:var(--mn-line);color:var(--mn-text);background:var(--mn-hover)}.JK_n9q_graphCanvasControls button[data-active]{color:var(--mn-accent)}.JK_n9q_graphSvg{touch-action:none;user-select:none;width:100%;height:clamp(390px,42vw,560px);display:block}.JK_n9q_graphBackdrop{fill:var(--mn-layer-1)}.JK_n9q_graphGridLine{stroke:var(--mn-line);stroke-width:.6px;opacity:.5}.JK_n9q_graphEdge{fill:none;stroke:#87909f;stroke-width:1px;opacity:.32;vector-effect:non-scaling-stroke}.JK_n9q_graphEdge[data-edge=scope]{stroke:#708199;stroke-dasharray:4 5;opacity:.28}.JK_n9q_graphEdge[data-edge=semantic]{stroke:#4d7cfe;opacity:.48}.JK_n9q_graphEdge[data-edge=causal]{stroke:#ef6b5b;opacity:.52}.JK_n9q_graphEdge[data-edge=entity]{stroke:#22a879;stroke-width:1.45px;opacity:.78}.JK_n9q_graphNode{--node:#8290a8;cursor:grab;outline:none}.JK_n9q_graphNode[data-dragging]{cursor:grabbing}.JK_n9q_graphNode[data-category=decision]{--node:#ef8354}.JK_n9q_graphNode[data-category=preference]{--node:#a879e1}.JK_n9q_graphNode[data-category=fact]{--node:#4d7cfe}.JK_n9q_graphNode[data-category=insight]{--node:#19a77d}.JK_n9q_graphNode[data-category=context]{--node:#d8a624}.JK_n9q_graphNode[data-kind=space]{--node:var(--mn-success)}.JK_n9q_graphNode[data-kind=entity]{--node:#2b9db9}.JK_n9q_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}.JK_n9q_nodeCore{fill:var(--node)}.JK_n9q_nodeLabel{fill:var(--mn-muted);font:10px var(--mn-code);pointer-events:auto}.JK_n9q_nodeBodyLabel{fill:var(--mn-faint);font:650 8px var(--mn-code);letter-spacing:.04em;pointer-events:auto}.JK_n9q_graphSvg[data-density=sparse] .JK_n9q_nodeLabel{font-size:12px}.JK_n9q_graphNode:hover .JK_n9q_nodeHalo,.JK_n9q_graphNode:focus .JK_n9q_nodeHalo,.JK_n9q_graphNode[data-selected] .JK_n9q_nodeHalo{fill:color-mix(in srgb, var(--node) 28%, var(--mn-layer-1));stroke:var(--node)}.JK_n9q_graphNode[data-selected] .JK_n9q_nodeLabel{fill:var(--mn-text);font-weight:650}.JK_n9q_graphFooter{border-top:1px solid var(--mn-line);min-height:38px;color:var(--mn-faint)}.JK_n9q_graphInspector{min-width:0;min-height:calc(clamp(390px,42vw,560px) + 83px);padding:15px;overflow:hidden}.JK_n9q_inspectorEmpty{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;display:flex}.JK_n9q_inspectorLogo{opacity:.72;border-radius:11px;width:54px;height:54px;margin-bottom:15px}.JK_n9q_inspectorEmpty h3{margin:7px 0 3px;font-size:14px}.JK_n9q_inspectorEmpty p{color:var(--mn-faint);margin:0;font-size:11px}.JK_n9q_inspectorHeading{justify-content:space-between;align-items:center;display:flex}.JK_n9q_inspectorHeading button,.JK_n9q_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}.JK_n9q_inspectorHeading button:hover,.JK_n9q_sectionHeading button:hover{background:var(--mn-hover)}.JK_n9q_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}.JK_n9q_inspectorTitleRow{align-items:flex-start;gap:8px;min-width:0;margin:12px 0 20px;display:flex}.JK_n9q_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}.JK_n9q_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}.JK_n9q_inspectorEye:hover{color:var(--mn-accent);border-color:var(--mn-line-strong);background:var(--mn-hover)}.JK_n9q_inspectorMeta{margin:0}.JK_n9q_inspectorMeta>div{border-top:1px solid var(--mn-line);gap:3px;padding:11px 0;display:grid}.JK_n9q_inspectorMeta dt{color:var(--mn-faint);font:9px var(--mn-code);text-transform:uppercase}.JK_n9q_inspectorMeta dd{overflow-wrap:anywhere;color:var(--mn-muted);margin:0;font-size:11px}.JK_n9q_inspectorActions{gap:8px;margin-top:20px;display:grid}.JK_n9q_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}.JK_n9q_previewDialog{border:1px solid var(--mn-line-strong);background:var(--mn-layer-1);width:min(680px,100%);max-height:min(76vh,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}.JK_n9q_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}.JK_n9q_previewHeading>span{color:var(--mn-accent);font:650 9px/1.2 var(--mn-code);letter-spacing:.08em;text-transform:uppercase}.JK_n9q_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}.JK_n9q_previewHeading button:hover{background:var(--mn-hover)}.JK_n9q_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}.JK_n9q_previewBody{min-height:0;padding:14px 16px 18px;overflow:auto}.JK_n9q_previewBody p{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--mn-text);margin:0;font-size:13px;line-height:1.7}.JK_n9q_searchBar{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:13px;margin-bottom:18px;padding:13px}.JK_n9q_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}.JK_n9q_queryField>span{color:var(--mn-accent);font:18px var(--mn-code)}.JK_n9q_queryField input{background:0 0;border:0;outline:0;width:100%;height:42px}.JK_n9q_queryField kbd{color:var(--mn-faint);font:11px var(--mn-code)}.JK_n9q_searchControls{justify-content:flex-end;align-items:flex-end;gap:10px;padding-top:10px;display:flex}.JK_n9q_searchActions{align-items:center;gap:7px;display:flex}.JK_n9q_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}.JK_n9q_agentAnswerHeading{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.JK_n9q_agentAnswerHeading span{color:var(--mn-accent);font:650 9px/1.2 var(--mn-code);letter-spacing:.08em}.JK_n9q_agentAnswerHeading h3{margin:4px 0 0;font-size:15px}.JK_n9q_agentAnswerHeading>code{color:var(--mn-faint);font-size:9px}.JK_n9q_agentAnswer>p{white-space:pre-wrap;color:var(--mn-text);margin:12px 0;font-size:13px;line-height:1.7}.JK_n9q_agentCitations{border-top:1px solid var(--mn-line);flex-wrap:wrap;gap:5px;padding-top:10px;display:flex}.JK_n9q_agentCitations code{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:5px;padding:3px 6px;font-size:9px}.JK_n9q_searchControls label,.JK_n9q_formGrid label,.JK_n9q_fieldWide{color:var(--mn-muted);gap:5px;font-size:11px;display:grid}.JK_n9q_searchControls select,.JK_n9q_formGrid select,.JK_n9q_formGrid input,.JK_n9q_listToolbar input,.JK_n9q_listToolbar select,.JK_n9q_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}.JK_n9q_searchControls select:focus,.JK_n9q_formGrid select:focus,.JK_n9q_formGrid input:focus,.JK_n9q_listToolbar input:focus,.JK_n9q_listToolbar select:focus,.JK_n9q_entitySearch input:focus,.JK_n9q_supervisedForm textarea:focus{border-color:var(--mn-accent)}.JK_n9q_singleColumn{max-width:830px}.JK_n9q_resultLayout{grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);align-items:start;gap:14px;display:grid}.JK_n9q_results,.JK_n9q_relatedPane,.JK_n9q_entityResults{min-width:0}.JK_n9q_sectionHeading{justify-content:space-between;align-items:center;gap:16px;min-height:39px;margin-bottom:8px;display:flex}.JK_n9q_sectionHeading h3{margin:2px 0 0;font-size:15px}.JK_n9q_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}.JK_n9q_relatedPane{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;max-height:calc(100vh - 230px);padding:13px;scroll-margin-top:14px;position:sticky;top:12px;overflow:auto}.JK_n9q_relatedSource{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:8px;margin:0 0 13px;padding:10px;font-size:11px}.JK_n9q_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}.JK_n9q_insightCard:hover{border-color:var(--mn-line-strong);transform:translateY(-1px)}.JK_n9q_cardTop{justify-content:space-between;align-items:center;gap:10px;display:flex}.JK_n9q_badges,.JK_n9q_tags,.JK_n9q_entities{flex-wrap:wrap;gap:5px;display:flex}.JK_n9q_badge{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:999px;padding:2px 6px;font-size:9px}.JK_n9q_id{color:var(--mn-faint);font:9px var(--mn-code)}.JK_n9q_content{white-space:pre-wrap;overflow-wrap:anywhere;margin:10px 0;line-height:1.65}.JK_n9q_tags{color:var(--mn-accent);font-size:10px}.JK_n9q_entities{margin-top:7px}.JK_n9q_entities span{border:1px solid var(--mn-line);color:var(--mn-muted);border-radius:5px;padding:2px 6px;font-size:9px}.JK_n9q_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}.JK_n9q_confirmBar{width:100%;color:var(--mn-danger);justify-content:flex-end;align-items:center;gap:5px;font-size:11px;display:flex}.JK_n9q_confirmBar>span{margin-right:auto}.JK_n9q_entityLayout{grid-template-columns:265px minmax(0,1fr);align-items:start;gap:16px;display:grid}.JK_n9q_entityRail{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;padding:13px;position:sticky;top:0}.JK_n9q_entitySearch{grid-template-columns:minmax(0,1fr) auto;gap:7px;display:grid}.JK_n9q_entitySearch input{min-width:0}.JK_n9q_entityHeading{justify-content:space-between;align-items:center;margin:18px 2px 7px;display:flex}.JK_n9q_entityHeading small{color:var(--mn-faint);font-size:9px}.JK_n9q_entityList{gap:3px;display:grid}.JK_n9q_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}.JK_n9q_entityList button:hover,.JK_n9q_entityList button[aria-pressed=true]{color:var(--mn-text);background:var(--mn-hover)}.JK_n9q_entityList strong{color:var(--mn-faint);font:10px var(--mn-code)}.JK_n9q_entityResults>.JK_n9q_emptyState{min-height:360px}.JK_n9q_runtimeComposer,.JK_n9q_runtimeTarget{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px}.JK_n9q_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}.JK_n9q_runtimeComposerHeading{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:11px;display:flex}.JK_n9q_runtimeComposerHeading h3{margin:0 0 2px;font-size:14px}.JK_n9q_runtimeComposerHeading p{color:var(--mn-muted);margin:0;font-size:10px}.JK_n9q_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}.JK_n9q_runtimeComposer>textarea,.JK_n9q_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}.JK_n9q_runtimeComposer>textarea:focus,.JK_n9q_runtimeEntry textarea:focus{border-color:var(--mn-accent)}.JK_n9q_runtimeComposerActions{justify-content:flex-end;align-items:flex-end;gap:9px;margin-top:10px;display:flex}.JK_n9q_runtimeComposerActions label{color:var(--mn-faint);gap:4px;font-size:9px;display:grid}.JK_n9q_runtimeComposerActions select,.JK_n9q_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}.JK_n9q_runtimeNotice,.JK_n9q_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}.JK_n9q_runtimeReadOnly{color:var(--mn-muted);border-color:var(--mn-line);background:var(--mn-layer-1)}.JK_n9q_runtimeGrid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:12px;display:grid}.JK_n9q_runtimeTarget{min-width:0;overflow:hidden}.JK_n9q_runtimeTargetHeader{justify-content:space-between;align-items:center;gap:14px;padding:14px 15px 9px;display:flex}.JK_n9q_runtimeTargetHeader>div{gap:1px;display:grid}.JK_n9q_runtimeTargetHeader span{color:var(--mn-faint);font:650 9px var(--mn-code);letter-spacing:.08em}.JK_n9q_runtimeTargetHeader h3{margin:0;font-size:15px}.JK_n9q_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}.JK_n9q_capacityLine{align-items:center;gap:9px;padding:0 15px;display:flex}.JK_n9q_capacityLine>div{background:var(--mn-layer-2);border-radius:999px;flex:1;height:4px;overflow:hidden}.JK_n9q_capacityLine i{border-radius:inherit;background:var(--mn-success);height:100%;transition:width .25s;display:block}.JK_n9q_capacityLine>span{min-width:88px;color:var(--mn-faint);font:9px var(--mn-code);text-align:right}.JK_n9q_runtimeTargetDescription{min-height:31px;color:var(--mn-muted);margin:8px 15px 12px;font-size:10px}.JK_n9q_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}.JK_n9q_runtimeEntry{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:9px;padding:11px;position:relative}.JK_n9q_runtimeEntry:before{content:\"\";background:var(--mn-muted);border-radius:0 2px 2px 0;width:2px;position:absolute;top:12px;bottom:12px;left:-1px}.JK_n9q_runtimeEntry[data-importance=critical]:before{background:var(--mn-danger)}.JK_n9q_runtimeEntry[data-importance=low]:before{background:var(--mn-faint);opacity:.45}.JK_n9q_runtimeEntryMeta{justify-content:space-between;align-items:center;gap:12px;display:flex}.JK_n9q_runtimeEntryMeta>span{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:999px;padding:2px 6px;font-size:9px}.JK_n9q_runtimeEntry[data-importance=critical] .JK_n9q_runtimeEntryMeta>span{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent)}.JK_n9q_runtimeEntryMeta time{color:var(--mn-faint);font:8px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.JK_n9q_runtimeEntry>p{white-space:pre-wrap;overflow-wrap:anywhere;min-height:42px;margin:9px 0;font-size:12px;line-height:1.6}.JK_n9q_runtimeEntry>select{margin-top:7px}.JK_n9q_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}.JK_n9q_runtimeEntry footer>span{color:var(--mn-danger);margin-right:auto;font-size:10px}.JK_n9q_runtimeEmpty{min-height:126px;color:var(--mn-faint);text-align:center;align-content:center;place-items:center;gap:5px;display:grid}.JK_n9q_runtimeEmpty>span{font:24px var(--mn-code);opacity:.65}.JK_n9q_runtimeEmpty p{margin:0;font-size:10px}.JK_n9q_runtimeFootnote{color:var(--mn-faint);margin:10px 2px 0;font-size:9px}.JK_n9q_documentSummary{grid-template-columns:.7fr .7fr 1.6fr;gap:9px;margin-bottom:12px;display:grid}.JK_n9q_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}.JK_n9q_documentSummary article>span{color:var(--mn-faint);font-size:9px;display:block}.JK_n9q_documentSummary article>strong{font:650 21px/1 var(--mn-code);margin:7px 0 4px;display:block}.JK_n9q_documentSummary article>small{color:var(--mn-muted);font-size:9px}.JK_n9q_documentCapacity>div{background:var(--mn-layer-2);border-radius:999px;height:4px;margin:7px 0 6px;overflow:hidden}.JK_n9q_documentCapacity>div i{border-radius:inherit;background:var(--mn-accent);height:100%;transition:width .3s;display:block}.JK_n9q_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}.JK_n9q_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}.JK_n9q_documentToolbar form>span{color:var(--mn-faint);font:15px var(--mn-code)}.JK_n9q_documentToolbar input,.JK_n9q_documentEditor input,.JK_n9q_documentEditor textarea{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;width:100%;padding:8px 10px}.JK_n9q_documentToolbar input{background:0 0;border-color:#0000;height:34px}.JK_n9q_documentToolbar input:focus,.JK_n9q_documentEditor input:focus,.JK_n9q_documentEditor textarea:focus{border-color:var(--mn-accent)}.JK_n9q_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}.JK_n9q_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}.JK_n9q_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)}.JK_n9q_documentToolbar>div b{color:var(--mn-faint);font:600 9px var(--mn-code);margin-left:4px}.JK_n9q_documentWorkspace{grid-template-columns:minmax(250px,310px) minmax(0,1fr);gap:10px;min-height:590px;display:grid}.JK_n9q_documentList,.JK_n9q_documentReader{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0;overflow:hidden}.JK_n9q_documentList{align-self:stretch}.JK_n9q_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}.JK_n9q_documentList>header code{color:var(--mn-accent)}.JK_n9q_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}.JK_n9q_documentList>button:hover{background:var(--mn-hover)}.JK_n9q_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)}.JK_n9q_documentList>button>div{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.JK_n9q_documentList>button strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.JK_n9q_documentList>button time{color:var(--mn-faint);font:8px var(--mn-code);flex:none}.JK_n9q_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}.JK_n9q_documentList>button footer{color:var(--mn-faint);align-items:center;gap:8px;font-size:9px;display:flex}.JK_n9q_documentList>button footer code{margin-left:auto}.JK_n9q_documentList>button footer em{color:var(--mn-danger);font-style:normal}.JK_n9q_documentListEmpty{min-height:230px;color:var(--mn-muted);text-align:center;align-content:center;place-items:center;gap:4px;padding:22px;display:grid}.JK_n9q_documentListEmpty>span{color:var(--mn-accent);font:28px var(--mn-code);opacity:.6;margin-bottom:6px}.JK_n9q_documentListEmpty p{color:var(--mn-faint);margin:0;font-size:10px}.JK_n9q_documentReader{padding:clamp(16px,2vw,22px)}.JK_n9q_documentReader>.JK_n9q_emptyState{background:0 0;border:0;height:100%}.JK_n9q_documentDetail>header{border-bottom:1px solid var(--mn-line);justify-content:space-between;align-items:flex-start;gap:18px;padding-bottom:15px;display:flex}.JK_n9q_documentDetail>header span{color:var(--mn-accent);font:650 9px var(--mn-code);letter-spacing:.08em;text-transform:uppercase}.JK_n9q_documentDetail>header h3{margin:5px 0 3px;font-size:18px}.JK_n9q_documentDetail>header p{color:var(--mn-muted);margin:0;font-size:11px}.JK_n9q_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}.JK_n9q_documentDetail>dl>div{border-right:1px solid var(--mn-line);border-bottom:1px solid var(--mn-line);min-width:0;padding:8px 9px}.JK_n9q_documentDetail dt{color:var(--mn-faint);margin-bottom:3px;font-size:8px}.JK_n9q_documentDetail dd{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:9px;overflow:hidden}.JK_n9q_documentSources{flex-wrap:wrap;align-items:center;gap:5px;margin:11px 0;display:flex}.JK_n9q_documentSources>span{color:var(--mn-faint);margin-right:4px;font-size:9px}.JK_n9q_documentSources code,.JK_n9q_documentArchiveReceipt code{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:5px;padding:3px 6px;font-size:8px}.JK_n9q_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}.JK_n9q_markdownBody>:first-child{margin-top:0}.JK_n9q_markdownBody>:last-child{margin-bottom:0}.JK_n9q_markdownBody h1,.JK_n9q_markdownBody h2,.JK_n9q_markdownBody h3,.JK_n9q_markdownBody h4{color:var(--mn-text);letter-spacing:-.015em;margin:1.55em 0 .65em;line-height:1.3}.JK_n9q_markdownBody h1{border-bottom:1px solid var(--mn-line);padding-bottom:.35em;font-size:1.75em}.JK_n9q_markdownBody h2{border-bottom:1px solid var(--mn-line);padding-bottom:.3em;font-size:1.42em}.JK_n9q_markdownBody h3{font-size:1.18em}.JK_n9q_markdownBody p,.JK_n9q_markdownBody ul,.JK_n9q_markdownBody ol,.JK_n9q_markdownBody blockquote,.JK_n9q_markdownBody table,.JK_n9q_markdownBody pre{margin:.85em 0}.JK_n9q_markdownBody ul,.JK_n9q_markdownBody ol{padding-left:1.6em}.JK_n9q_markdownBody li+li{margin-top:.3em}.JK_n9q_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}.JK_n9q_markdownBody code{color:var(--mn-text);background:var(--mn-layer-2);font:.88em/1.55 var(--mn-code);border-radius:5px;padding:.15em .38em}.JK_n9q_markdownBody pre{border:1px solid var(--mn-line);background:var(--mn-layer-2);border-radius:9px;max-width:100%;padding:14px 16px;overflow:auto}.JK_n9q_markdownBody pre code{background:0 0;padding:0;font-size:11px}.JK_n9q_markdownBody a{color:var(--mn-accent);text-underline-offset:3px;text-decoration-thickness:1px}.JK_n9q_markdownBody hr{border:0;border-top:1px solid var(--mn-line);margin:1.8em 0}.JK_n9q_markdownBody table{border-collapse:collapse;max-width:100%;display:block;overflow-x:auto}.JK_n9q_markdownBody th,.JK_n9q_markdownBody td{border:1px solid var(--mn-line);text-align:left;vertical-align:top;padding:8px 10px}.JK_n9q_markdownBody th{background:var(--mn-layer-2);font-weight:600}.JK_n9q_markdownBody img{border-radius:8px;max-width:100%;height:auto}.JK_n9q_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}.JK_n9q_documentArchiveReceipt p{color:var(--mn-muted);margin:4px 0 8px;font-size:10px}.JK_n9q_documentArchiveReceipt div{flex-wrap:wrap;gap:5px;display:flex}.JK_n9q_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}.JK_n9q_documentDanger>div{margin-right:auto}.JK_n9q_documentDanger strong{font-size:11px;display:block}.JK_n9q_documentDanger p{color:var(--mn-faint);margin:2px 0 0;font-size:9px}.JK_n9q_documentDanger>span{color:var(--mn-danger);margin-right:auto;font-size:10px}.JK_n9q_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}.JK_n9q_documentReader>.JK_n9q_documentEditor{background:0 0;border:0;margin:0;padding:0}.JK_n9q_documentEditor>header{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:12px;display:flex}.JK_n9q_documentEditor h3{margin:0;font-size:14px}.JK_n9q_documentEditor header p{color:var(--mn-muted);margin:2px 0 0;font-size:10px}.JK_n9q_documentEditor header>span,.JK_n9q_documentEditor header>code{color:var(--mn-accent);font:650 9px var(--mn-code)}.JK_n9q_documentEditor label{color:var(--mn-faint);gap:4px;margin-top:9px;font-size:9px;display:grid}.JK_n9q_documentEditor textarea{resize:vertical;line-height:1.65}.JK_n9q_documentEditorMeta{grid-template-columns:.8fr 1.2fr;gap:9px;display:grid}.JK_n9q_documentEditorMeta label{margin:0}.JK_n9q_documentEditor footer{justify-content:flex-end;gap:7px;margin-top:11px;display:flex}.JK_n9q_writebackLayout{grid-template-columns:minmax(220px,280px) minmax(0,1fr);align-items:start;gap:15px;display:grid}.JK_n9q_writeGuide,.JK_n9q_supervisedComposer{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px}.JK_n9q_writeGuide{padding:17px}.JK_n9q_writeGuide h3{margin:5px 0 15px;font-size:15px}.JK_n9q_writeGuide ol{counter-reset:gate;gap:13px;margin:0;padding:0;list-style:none;display:grid}.JK_n9q_writeGuide li{counter-increment:gate;grid-template-columns:22px minmax(0,1fr);column-gap:7px;display:grid}.JK_n9q_writeGuide li:before{content:\"0\" counter(gate);color:var(--mn-accent);font:10px var(--mn-code);grid-row:span 2}.JK_n9q_writeGuide li strong{font-size:12px}.JK_n9q_writeGuide li span,.JK_n9q_writeGuide p{color:var(--mn-faint);font-size:10px}.JK_n9q_writeGuide p{border-top:1px solid var(--mn-line);margin:17px 0 0;padding-top:13px}.JK_n9q_supervisedComposer{overflow:hidden}.JK_n9q_supervisedForm{padding:18px}.JK_n9q_supervisedHeading{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.JK_n9q_supervisedHeading h3{margin:4px 0 0;font-size:17px}.JK_n9q_sessionReady,.JK_n9q_sessionMissing{font:650 9px var(--mn-code);border-radius:999px;padding:4px 8px}.JK_n9q_sessionReady{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 10%, transparent)}.JK_n9q_sessionMissing{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 10%, transparent)}.JK_n9q_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}.JK_n9q_sessionHint{color:var(--mn-danger);margin:9px 0 0;font-size:11px}.JK_n9q_formGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:13px;display:grid}.JK_n9q_fieldWide{grid-column:1/-1}.JK_n9q_formGrid select,.JK_n9q_formGrid input{width:100%;min-width:0}.JK_n9q_formActions{align-items:center;gap:12px;margin-top:15px;display:flex}.JK_n9q_formActions span{color:var(--mn-muted);font-size:11px}.JK_n9q_advancedWrite{border-top:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 45%, var(--mn-layer-1))}.JK_n9q_advancedWrite summary{cursor:pointer;justify-content:space-between;align-items:center;gap:16px;min-height:58px;padding:10px 18px;list-style:none;display:flex}.JK_n9q_advancedWrite summary::-webkit-details-marker{display:none}.JK_n9q_advancedWrite summary>span:first-child{gap:2px;display:grid}.JK_n9q_advancedWrite summary strong{font-size:12px}.JK_n9q_advancedWrite summary small{color:var(--mn-faint);font-size:10px}.JK_n9q_advancedWrite summary>span:last-child{color:var(--mn-accent);font:10px var(--mn-code)}.JK_n9q_advancedWrite[open] summary{border-bottom:1px solid var(--mn-line)}.JK_n9q_advancedWrite[open] summary>span:last-child{font-size:0}.JK_n9q_advancedWrite[open] summary>span:last-child:after{content:\"−\";font-size:13px}.JK_n9q_manualForm{padding:3px 18px 18px}.JK_n9q_manualActions{justify-content:space-between;align-items:center;gap:14px;margin-top:15px;display:flex}.JK_n9q_manualActions p{max-width:520px;color:var(--mn-faint);margin:0;font-size:10px}.JK_n9q_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}.JK_n9q_listToolbar input,.JK_n9q_listToolbar select{width:100%;min-width:0}.JK_n9q_listNotice{color:var(--mn-faint);margin:10px 0 16px;font-size:10px}.JK_n9q_listNotice span{color:var(--mn-success);font:650 9px var(--mn-code);letter-spacing:.08em;margin-right:7px}.JK_n9q_memoryList{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:9px;display:grid}.JK_n9q_memoryList .JK_n9q_insightCard{height:100%;margin:0}.JK_n9q_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}.JK_n9q_healthStrip{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;grid-template-columns:repeat(5,minmax(0,1fr));margin-bottom:13px;display:grid;overflow:hidden}.JK_n9q_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}.JK_n9q_healthStrip article>div{min-width:0}.JK_n9q_healthStrip article:last-child{border-right:0}.JK_n9q_healthStrip small{color:var(--mn-faint);font:650 10px var(--mn-code);letter-spacing:.06em;margin-bottom:4px;display:block}.JK_n9q_healthStrip strong{text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;display:block;overflow:hidden}.JK_n9q_healthStrip p{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;margin:3px 0 0;font-size:10.5px;overflow:hidden}.JK_n9q_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}.JK_n9q_healthGood{color:var(--mn-success);background:currentColor}.JK_n9q_healthBad{color:var(--mn-danger);background:currentColor}.JK_n9q_healthMuted{color:var(--mn-faint);background:currentColor}.JK_n9q_memoryFlow{border:1px solid var(--mn-line);background:radial-gradient(circle at 52% 10%, color-mix(in srgb, var(--mn-accent) 5%, transparent), transparent 28%), var(--mn-layer-1);border-radius:12px;margin-bottom:13px;padding:16px;overflow:hidden;container:JK_n9q_mnemon-flow/inline-size}.JK_n9q_memoryFlowCanvas{overscroll-behavior-inline:contain;border:1px solid var(--mn-line);background-image:linear-gradient(color-mix(in srgb, var(--mn-line) 36%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--mn-line) 36%, transparent) 1px, transparent 1px);background-size:24px 24px;background-color:color-mix(in srgb, var(--mn-layer-2) 28%, transparent);scrollbar-color:var(--mn-line-strong) transparent;border-radius:11px;margin-top:13px;overflow:auto hidden}.JK_n9q_flowArchitecture{gap:10px;min-width:840px;padding:10px;display:grid}.JK_n9q_flowLane{border:1px solid color-mix(in srgb, var(--mn-line) 82%, transparent);background:color-mix(in srgb, var(--mn-layer-1) 92%, transparent);min-width:0;box-shadow:inset 3px 0 0 color-mix(in srgb, var(--mn-accent) 34%, transparent);border-radius:10px;overflow:hidden}.JK_n9q_flowLane[data-lane=semantic]{box-shadow:inset 3px 0 #8b6ce77a}.JK_n9q_flowLane[data-lane=maintenance]{box-shadow:inset 3px 0 #d18a3c85}.JK_n9q_flowLane>header{border-bottom:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 42%, transparent);align-items:center;gap:9px;min-height:46px;padding:8px 12px;display:flex}.JK_n9q_flowLane>header>span{color:var(--mn-accent);font:650 9px var(--mn-code)}.JK_n9q_flowLane>header>div{gap:1px;min-width:0;display:grid}.JK_n9q_flowLane>header strong{font-size:12px}.JK_n9q_flowLane>header small{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9.5px;overflow:hidden}.JK_n9q_flowTrack{align-items:stretch;gap:0;min-width:0;padding:11px 12px;display:flex}.JK_n9q_flowTrack+.JK_n9q_flowTrack{padding-top:0}.JK_n9q_flowSecondaryTrack,.JK_n9q_flowReviewTrack,.JK_n9q_flowArchiveTrack{border-top:1px dashed color-mix(in srgb, var(--mn-line) 72%, transparent);padding-top:11px!important}.JK_n9q_flowArchitectureNode{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-1) 96%, transparent);border-radius:9px;flex:1 1 0;grid-template-columns:7px minmax(0,1fr);align-content:center;gap:9px;min-width:0;min-height:84px;padding:11px;transition:border-color .2s,background-color .2s,box-shadow .2s;display:grid;position:relative}.JK_n9q_flowArchitectureNode[data-kind=worker]{border-style:dashed;border-color:color-mix(in srgb, #8b6ce7 46%, var(--mn-line));background:color-mix(in srgb, #8b6ce7 4%, var(--mn-layer-1))}.JK_n9q_flowArchitectureNode[data-kind=store]{background:color-mix(in srgb, var(--mn-success) 3%, var(--mn-layer-1))}.JK_n9q_flowArchitectureNode[data-kind=task]{background:color-mix(in srgb, var(--mn-accent) 3%, var(--mn-layer-1))}.JK_n9q_flowArchitectureNode[data-emphasis=active]{border-color:color-mix(in srgb, var(--mn-accent) 56%, var(--mn-line));box-shadow:0 0 0 2px color-mix(in srgb, var(--mn-accent) 8%, transparent)}.JK_n9q_flowArchitectureNode[data-emphasis=recent]{border-color:color-mix(in srgb, var(--mn-success) 48%, var(--mn-line))}.JK_n9q_flowArchitectureNode[data-emphasis=pending]{border-color:color-mix(in srgb, #d18a3c 55%, var(--mn-line))}.JK_n9q_flowArchitectureSignal{background:var(--mn-faint);width:7px;height:7px;box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-faint) 8%, transparent);border-radius:50%;margin-top:4px}.JK_n9q_flowArchitectureNode[data-state=ready] .JK_n9q_flowArchitectureSignal{background:var(--mn-success);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 10%, transparent)}.JK_n9q_flowArchitectureNode[data-state=error] .JK_n9q_flowArchitectureSignal{background:var(--mn-danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-danger) 10%, transparent)}.JK_n9q_flowArchitectureNode>div{align-content:start;gap:5px;min-width:0;display:grid}.JK_n9q_flowArchitectureNode strong{overflow-wrap:break-word;word-break:normal;font-size:11.5px;line-height:1.35}.JK_n9q_flowArchitectureNode small{color:var(--mn-faint);overflow-wrap:anywhere;font-size:9.5px;line-height:1.45}.JK_n9q_flowConnector{width:clamp(38px,4.2vw,56px);color:var(--mn-faint);text-align:center;flex:none;place-content:center stretch;gap:5px;padding:0 4px;display:grid;position:relative}.JK_n9q_flowConnector span{overflow-wrap:anywhere;min-height:13px;font:8px/1.3 var(--mn-code)}.JK_n9q_flowConnector i{background:color-mix(in srgb, var(--mn-accent) 55%, var(--mn-line));height:1px;display:block;position:relative}.JK_n9q_flowConnector i:after{border-top:1px solid var(--mn-accent);border-right:1px solid var(--mn-accent);content:\"\";width:6px;height:6px;position:absolute;top:-3px;right:-1px;transform:rotate(45deg)}.JK_n9q_flowConnector[data-kind=worker] i{border-top:1px dashed color-mix(in srgb, #8b6ce7 72%, var(--mn-line));background:0 0;height:0}.JK_n9q_flowConnector[data-kind=worker] i:after{border-color:#8b6ce7}.JK_n9q_flowConnector[data-active]{color:var(--mn-text)}.JK_n9q_flowConnector[data-active] i{height:2px}.JK_n9q_flowConnector[data-active] i:before{z-index:1;content:\"\";background:var(--mn-accent);border-radius:50%;width:5px;height:5px;animation:1.9s cubic-bezier(.35,0,.65,1) infinite JK_n9q_flowTrace;position:absolute;top:-2px;left:0}.JK_n9q_flowConnector[data-kind=worker][data-active] i:before{background:#8b6ce7;top:-3px}@keyframes JK_n9q_flowTrace{0%{opacity:0;left:0}12%{opacity:1}88%{opacity:1}to{opacity:0;left:calc(100% - 5px)}}@keyframes JK_n9q_flowTraceVertical{0%{opacity:0;top:0}12%{opacity:1}88%{opacity:1}to{opacity:0;top:calc(100% - 5px)}}.JK_n9q_flowLegend{color:var(--mn-faint);flex-wrap:wrap;gap:9px 18px;margin-top:10px;font-size:9px;display:flex}.JK_n9q_flowLegend span{align-items:center;gap:6px;display:inline-flex}.JK_n9q_flowLegend span:last-child{margin-left:auto}.JK_n9q_flowLegend i{background:var(--mn-accent);width:18px;height:1px}.JK_n9q_flowLegend span:nth-child(2) i{background:0 0;border-top:1px dashed #8b6ce7;height:0}.JK_n9q_flowLegend b{background:var(--mn-success);width:6px;height:6px;box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 10%, transparent);border-radius:50%}@container JK_n9q_mnemon-flow (width<=700px){.JK_n9q_flowArchitecture{min-width:0;padding:8px}.JK_n9q_flowLane>header{align-items:flex-start}.JK_n9q_flowLane>header small{white-space:normal}.JK_n9q_flowTrack{flex-direction:column;padding:10px}.JK_n9q_flowArchitectureNode{flex:none;width:100%;min-height:72px}.JK_n9q_flowConnector{place-content:center;width:100%;height:42px;padding:5px 0}.JK_n9q_flowConnector span{min-height:0}.JK_n9q_flowConnector i{justify-self:center;width:1px;height:18px}.JK_n9q_flowConnector i:after{top:auto;bottom:0;right:-3px;transform:rotate(135deg)}.JK_n9q_flowConnector[data-kind=worker] i{border-top:0;border-left:1px dashed color-mix(in srgb, #8b6ce7 72%, var(--mn-line));width:0;height:18px}.JK_n9q_flowConnector[data-active] i{width:2px;height:18px}.JK_n9q_flowConnector[data-active] i:before{animation:1.9s cubic-bezier(.35,0,.65,1) infinite JK_n9q_flowTraceVertical;top:0;left:-2px}.JK_n9q_flowConnector[data-kind=worker][data-active] i:before{top:0}}.JK_n9q_storageDomains{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;margin-bottom:13px;padding:16px}.JK_n9q_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}.JK_n9q_storageRoot>div:first-child{gap:4px;min-width:0;display:grid}.JK_n9q_storageRoot span,.JK_n9q_storageRoot small{color:var(--mn-faint);font-size:9px}.JK_n9q_storageRoot code{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.JK_n9q_storageRoot>div:last-child{flex:none;justify-items:end;gap:3px;display:grid}.JK_n9q_storageRoot strong{font:650 11px var(--mn-code)}.JK_n9q_storageAreaGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:8px;display:grid}.JK_n9q_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}.JK_n9q_storageAreaGrid article>header{justify-content:space-between;align-items:center;gap:8px;display:flex}.JK_n9q_storageAreaGrid article>header>div{align-items:center;gap:7px;min-width:0;display:flex}.JK_n9q_storageAreaGrid article>header span{background:var(--mn-faint);border-radius:50%;flex:none;width:6px;height:6px}.JK_n9q_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)}.JK_n9q_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)}.JK_n9q_storageAreaGrid article>header strong{text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.JK_n9q_storageAreaGrid article>header em{color:var(--mn-faint);font:normal 8px var(--mn-code);white-space:nowrap}.JK_n9q_storageAreaMetric{align-items:baseline;gap:5px;margin-top:14px;display:flex}.JK_n9q_storageAreaMetric strong{font:650 20px var(--mn-code)}.JK_n9q_storageAreaMetric span{color:var(--mn-faint);font-size:9px}.JK_n9q_storageAreaMetric code{color:var(--mn-muted);margin-left:auto;font-size:9px}.JK_n9q_storageAreaGrid article>p{min-height:28px;color:var(--mn-muted);margin:8px 0;font-size:9px;line-height:1.5}.JK_n9q_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}.JK_n9q_storageAreaGrid article>small{color:var(--mn-danger);margin-top:6px;font-size:8px;line-height:1.4;display:block}.JK_n9q_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}.JK_n9q_storageUnavailable strong{font-size:12px}.JK_n9q_storageUnavailable p{max-width:520px;color:var(--mn-faint);margin:0;font-size:10px}.JK_n9q_storageFootnote{color:var(--mn-faint);margin:11px 0 0;font-size:9px;line-height:1.5}.JK_n9q_lifecyclePanel{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;margin-top:0;padding:16px}.JK_n9q_statusSectionHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.JK_n9q_statusSectionHeader h3{margin:4px 0 0;font-size:15px}.JK_n9q_statusSectionHeader p{max-width:590px;color:var(--mn-muted);margin:5px 0 0;font-size:10px}.JK_n9q_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}.JK_n9q_lifecycleFlow{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 52%, transparent);border-radius:9px;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:15px;display:grid;overflow:hidden}.JK_n9q_lifecycleFlow article{border-right:1px solid var(--mn-line);grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:8px;padding:12px;display:grid}.JK_n9q_lifecycleFlow article:last-child{border-right:0}.JK_n9q_lifecycleFlow article[data-disabled]{opacity:.48}.JK_n9q_lifecycleFlow article>span{color:var(--mn-accent);font:650 9px var(--mn-code)}.JK_n9q_lifecycleFlow strong{font-size:11px;display:block}.JK_n9q_lifecycleFlow p{color:var(--mn-faint);margin:4px 0 0;font-size:9px;line-height:1.45}.JK_n9q_lifecycleFlow code{color:var(--mn-muted);font-size:10px}.JK_n9q_lifecycleFoot{border-top:1px solid var(--mn-line);color:var(--mn-faint);flex-wrap:wrap;gap:8px 18px;margin-top:13px;padding-top:12px;font-size:9px;display:flex}.JK_n9q_lifecycleFoot strong{color:var(--mn-text);margin-left:3px;font-weight:600}.JK_n9q_runtimeBadge{font:650 9px var(--mn-code);border-radius:999px;padding:3px 7px}.JK_n9q_runtimeOnline{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 10%, transparent)}.JK_n9q_runtimeOffline{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 10%, transparent)}.JK_n9q_runtimePending{color:var(--mn-muted);background:var(--mn-layer-2)}@media (width<=1000px){.JK_n9q_graphLayout{display:block;position:relative}.JK_n9q_graphInspector{width:auto;min-height:0;box-shadow:none;margin-top:10px;position:static;overflow:visible}.JK_n9q_graphInspector[data-empty]{display:none}.JK_n9q_resultLayout{grid-template-columns:1fr}.JK_n9q_relatedPane{grid-row:1;max-height:none;position:static}.JK_n9q_memoryList{grid-template-columns:1fr}.JK_n9q_storageAreaGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.JK_n9q_runtimeGrid{grid-template-columns:1fr}.JK_n9q_documentWorkspace{grid-template-columns:minmax(220px,270px) minmax(0,1fr)}.JK_n9q_documentDetail>dl{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.JK_n9q_shell{min-height:500px}.JK_n9q_masthead{grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;min-height:76px;padding:10px 14px}.JK_n9q_brandLogo{width:36px;height:36px}.JK_n9q_statusCluster>span:not(.JK_n9q_statusDot){display:none}.JK_n9q_telemetry{border-top:1px solid var(--mn-line);grid-column:1/-1;justify-content:space-between;padding-top:8px}.JK_n9q_telemetryMetric{text-align:center;flex:1;justify-items:center;gap:3px;min-width:0;padding:0 5px}.JK_n9q_telemetryMetric:first-child{border-left:0}.JK_n9q_topNavigation{padding:0 10px;position:relative}.JK_n9q_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}.JK_n9q_nav{flex:1;padding-right:26px;scroll-padding-inline:10px 34px}.JK_n9q_navGroup{gap:3px}.JK_n9q_navGroupDivider{height:18px}.JK_n9q_nav button{text-align:center;flex-direction:column;justify-content:center;gap:3px;min-width:60px;padding:4px 3px}.JK_n9q_spaceSummary{display:none}.JK_n9q_navGlyph{line-height:1}.JK_n9q_page{padding:18px 13px 170px}.JK_n9q_pageHeader{gap:10px;display:grid}.JK_n9q_pageHeaderMeta{justify-content:space-between}.JK_n9q_entityLayout,.JK_n9q_writebackLayout{grid-template-columns:1fr}.JK_n9q_runtimeComposerHeading,.JK_n9q_runtimeComposerActions{flex-direction:column;align-items:stretch}.JK_n9q_runtimeComposerActions select,.JK_n9q_runtimeComposerActions button{width:100%}.JK_n9q_documentSummary{grid-template-columns:repeat(2,minmax(0,1fr))}.JK_n9q_documentCapacity{grid-column:1/-1}.JK_n9q_documentToolbar{flex-direction:column;align-items:stretch}.JK_n9q_documentToolbar form{min-width:0}.JK_n9q_documentToolbar>div,.JK_n9q_documentToolbar>button{width:100%}.JK_n9q_documentToolbar>div button{flex:1}.JK_n9q_documentWorkspace{grid-template-columns:1fr;min-height:0}.JK_n9q_documentList{max-height:330px;overflow:auto}.JK_n9q_documentReader{min-height:430px}.JK_n9q_documentEditorMeta{grid-template-columns:1fr}.JK_n9q_manualActions{flex-direction:column;align-items:stretch}.JK_n9q_entityRail{position:static}.JK_n9q_searchControls{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.JK_n9q_searchActions{grid-column:1/-1}.JK_n9q_searchActions>button{flex:1}.JK_n9q_searchControls select{width:100%;min-width:0}.JK_n9q_listToolbar{grid-template-columns:1fr}.JK_n9q_bodyDirectoryHeader{display:grid}.JK_n9q_bodyCreate form{grid-template-columns:1fr}.JK_n9q_graphViewport{min-height:360px}.JK_n9q_graphSvg{height:390px}.JK_n9q_graphCanvasControls{top:7px;right:7px}.JK_n9q_graphCanvasControls span{display:none}.JK_n9q_healthStrip,.JK_n9q_lifecycleFlow{grid-template-columns:1fr}.JK_n9q_storageRoot{flex-direction:column;align-items:flex-start}.JK_n9q_storageRoot>div:last-child{justify-items:start}.JK_n9q_storageAreaGrid{grid-template-columns:1fr}.JK_n9q_flowLegend span:last-child{width:100%;margin-left:0}.JK_n9q_healthStrip article,.JK_n9q_lifecycleFlow article{border-right:0;border-bottom:1px solid var(--mn-line)}.JK_n9q_healthStrip article:last-child,.JK_n9q_lifecycleFlow article:last-child{border-bottom:0}}@media (width<=520px){.JK_n9q_masthead{min-height:68px}.JK_n9q_brand h1{font-size:16px}.JK_n9q_telemetryMetric span{font-size:10px}.JK_n9q_nav{scroll-snap-type:x proximity}.JK_n9q_nav button{scroll-snap-align:start;min-width:68px}.JK_n9q_pageHeader h2{font-size:19px}.JK_n9q_pageHeaderMeta{flex-wrap:wrap;align-items:stretch}.JK_n9q_pageHeaderMeta>code{align-items:center;min-height:34px;display:flex}.JK_n9q_pageHeaderMeta>button{flex:1}.JK_n9q_emptyState{text-align:center;flex-direction:column;gap:14px;min-height:190px;padding:24px 18px}.JK_n9q_emptyGlyph{width:62px;height:62px}.JK_n9q_documentDetail>header,.JK_n9q_documentDanger,.JK_n9q_supervisedHeading,.JK_n9q_cardTop{flex-direction:column;align-items:flex-start}.JK_n9q_documentDetail>header>div:last-child,.JK_n9q_documentDetail>header button{width:100%}.JK_n9q_documentDanger>div,.JK_n9q_documentDanger>span{margin-right:0}.JK_n9q_documentDanger>button{width:100%}.JK_n9q_documentDetail>dl{grid-template-columns:1fr}.JK_n9q_markdownBody{padding:16px;font-size:12.5px}.JK_n9q_cardActions,.JK_n9q_confirmBar{flex-wrap:wrap;align-items:stretch}.JK_n9q_cardActions button{flex:1}.JK_n9q_confirmBar>span{width:100%;margin:0 0 4px}.JK_n9q_formActions{flex-direction:column;align-items:stretch}.JK_n9q_formActions button{width:100%}}@media (prefers-reduced-motion:reduce){.JK_n9q_shell *,.JK_n9q_shell :before,.JK_n9q_shell :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.JK_n9q_insightCard:hover{transform:none}.JK_n9q_flowConnector[data-active] i:before{display:none}}";
|
|
2504
|
-
const tagId = "dsh-mnemon/MnemonView.module.css";
|
|
2505
|
-
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
3264
|
+
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonView.module.css.mjs
|
|
3265
|
+
const css$4 = ".Q34gFW_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}.Q34gFW_shell *,.Q34gFW_shell :before,.Q34gFW_shell :after{box-sizing:border-box}.Q34gFW_shell button,.Q34gFW_shell input,.Q34gFW_shell select,.Q34gFW_shell textarea{color:inherit;font:inherit}.Q34gFW_shell button,.Q34gFW_shell select{touch-action:manipulation}.Q34gFW_shell button:focus-visible,.Q34gFW_shell input:focus-visible,.Q34gFW_shell select:focus-visible,.Q34gFW_shell textarea:focus-visible,.Q34gFW_shell summary:focus-visible,.Q34gFW_shell [role=button]:focus-visible{outline:2px solid var(--mn-accent);outline-offset:2px}.Q34gFW_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}.Q34gFW_brand{align-items:center;gap:11px;min-width:0;display:flex}.Q34gFW_brandLogo{width:32px;height:32px;box-shadow:0 0 0 1px var(--mn-line);border-radius:8px;flex:none;overflow:hidden}.Q34gFW_brand h1{letter-spacing:-.02em;margin:1px 0 0;font-size:16px;line-height:1.15}.Q34gFW_cardKicker,.Q34gFW_sectionHeading>div>span,.Q34gFW_entityHeading>span,.Q34gFW_inspectorHeading>span{color:var(--mn-faint);font:650 9px/1.2 var(--mn-code);letter-spacing:.12em;text-transform:uppercase}.Q34gFW_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}.Q34gFW_statusDot{border-radius:50%;width:6px;height:6px}.Q34gFW_online{background:var(--mn-success);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 15%, transparent)}.Q34gFW_offline{background:var(--mn-danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-danger) 14%, transparent)}.Q34gFW_checking{background:var(--mn-faint);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-faint) 12%, transparent)}.Q34gFW_iconButton{width:32px;height:32px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;display:grid}.Q34gFW_iconButton:hover{color:var(--mn-accent);background:var(--mn-hover)}.Q34gFW_headerActions{justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.Q34gFW_workspacePicker{min-width:0;color:var(--mn-faint);align-items:center;gap:7px;font-size:10px;display:flex}.Q34gFW_workspacePicker>span{white-space:nowrap}.Q34gFW_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}.Q34gFW_workspacePicker select:hover{border-color:color-mix(in srgb, var(--mn-accent) 50%, var(--mn-line-strong))}.Q34gFW_alert,.Q34gFW_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}.Q34gFW_alert{flex-direction:column;flex:none;margin:10px clamp(18px,2.5vw,32px) 0;display:flex}.Q34gFW_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}.Q34gFW_workspaceMismatch>div{gap:2px;min-width:0;display:grid}.Q34gFW_workspaceMismatch strong{font-size:12px}.Q34gFW_workspaceMismatch span{color:var(--mn-muted);font-size:10px}.Q34gFW_workspaceMismatch>div>div{flex-wrap:wrap;gap:5px 12px;min-width:0;margin-top:4px;display:flex}.Q34gFW_workspaceMismatch code{color:var(--mn-faint);font:9px/1.4 var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Q34gFW_workspaceMismatch>button{white-space:nowrap;flex:none;min-height:32px}.Q34gFW_telemetry{align-items:center;min-width:0;display:flex}.Q34gFW_telemetryMetric{border-left:1px solid var(--mn-line);gap:2px;min-width:72px;padding:1px 14px;display:grid}.Q34gFW_telemetryMetric span{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9px;overflow:hidden}.Q34gFW_telemetryMetric strong{font:650 13px/1 var(--mn-code);font-variant-numeric:tabular-nums}.Q34gFW_workspace{flex-direction:column;flex:1;min-height:0;display:flex}.Q34gFW_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}.Q34gFW_nav{overscroll-behavior-inline:contain;scrollbar-width:none;align-items:stretch;gap:10px;min-width:0;display:flex;overflow-x:auto}.Q34gFW_nav::-webkit-scrollbar{display:none}.Q34gFW_navGroup{align-items:stretch;gap:14px;min-width:0;display:flex}.Q34gFW_navGroupDivider{background:var(--mn-line);flex:none;align-self:center;width:1px;height:22px}.Q34gFW_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}.Q34gFW_nav button:hover,.Q34gFW_nav button[aria-current=page]{color:var(--mn-text)}.Q34gFW_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}.Q34gFW_nav button[aria-current=page] .Q34gFW_navGlyph{color:var(--mn-accent)}.Q34gFW_nav button>span:last-child{min-width:0;display:block}.Q34gFW_nav button strong{font-size:12px;font-weight:600}.Q34gFW_nav button small{display:none}.Q34gFW_navGlyph{color:var(--mn-faint);font:600 13px/1 var(--mn-code)}@media (width>=1000px){.Q34gFW_nav button{min-height:50px}.Q34gFW_nav button small{color:var(--mn-faint);margin-top:1px;font-size:9px;line-height:1.3;display:block}}.Q34gFW_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}.Q34gFW_spaceSummary>span{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9px;overflow:hidden}.Q34gFW_spaceSummary code{color:var(--mn-accent);font:650 12px/1 var(--mn-code);grid-row:span 2;align-self:center}.Q34gFW_spaceSummary small{color:var(--mn-faint);font-size:9px}.Q34gFW_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}.Q34gFW_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)}.Q34gFW_pageHeader{justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:16px;display:flex}.Q34gFW_pageHeader h2{letter-spacing:-.025em;margin:2px 0;font-size:20px;line-height:1.2}.Q34gFW_pageHeader p{max-width:72ch;color:var(--mn-muted);margin:0;font-size:12px;line-height:1.65}.Q34gFW_pageHeaderMeta{flex:none;align-items:center;gap:9px;display:flex}.Q34gFW_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}.Q34gFW_primaryButton,.Q34gFW_secondaryButton,.Q34gFW_ghostButton,.Q34gFW_dangerButton,.Q34gFW_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}.Q34gFW_primaryButton{border:1px solid var(--mn-accent);color:#fff;background:var(--mn-accent)}.Q34gFW_secondaryButton{border:1px solid var(--mn-line-strong);color:var(--mn-text);background:var(--mn-layer-1)}.Q34gFW_ghostButton,.Q34gFW_dangerButton{background:0 0;border:1px solid #0000;min-height:32px;padding:0 9px}.Q34gFW_ghostButton{color:var(--mn-muted)}.Q34gFW_dangerButton{color:var(--mn-danger)}.Q34gFW_dangerSolidButton{border:1px solid var(--mn-danger);color:#fff;background:var(--mn-danger);min-height:29px}.Q34gFW_primaryButton:hover,.Q34gFW_secondaryButton:hover,.Q34gFW_ghostButton:hover,.Q34gFW_dangerButton:hover{filter:brightness(.98);background-color:var(--mn-hover)}.Q34gFW_primaryButton:hover{background-color:var(--mn-accent)}.Q34gFW_shell button:disabled{cursor:not-allowed;opacity:.48}.Q34gFW_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}.Q34gFW_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}.Q34gFW_emptyState h3{margin:0 0 5px;font-size:16px}.Q34gFW_emptyState p{max-width:500px;color:var(--mn-muted);margin:0}.Q34gFW_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}.Q34gFW_inlineError{margin:0 0 14px}.Q34gFW_muted,.Q34gFW_loading{color:var(--mn-faint);padding:16px 0;font-size:12px}.Q34gFW_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}.Q34gFW_bodyDirectoryHeader{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:10px;display:flex}.Q34gFW_bodyDirectoryHeader h3{margin:1px 0;font-size:13px}.Q34gFW_bodyDirectoryHeader p{color:var(--mn-muted);margin:0;font-size:10px}.Q34gFW_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}.Q34gFW_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}.Q34gFW_bodyGrid{grid-template-columns:repeat(auto-fit,minmax(245px,1fr));gap:7px;display:grid}.Q34gFW_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}.Q34gFW_bodyDirectoryEmpty>span{opacity:.6;font-size:28px}.Q34gFW_bodyDirectoryEmpty strong{color:var(--mn-text);display:block}.Q34gFW_bodyDirectoryEmpty p{margin:3px 0 0;font-size:10px}.Q34gFW_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}.Q34gFW_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)}.Q34gFW_bodyCardTop{grid-template-columns:7px minmax(0,1fr) auto;align-items:center;gap:8px;display:grid}.Q34gFW_bodySignal{background:var(--mn-faint);border-radius:50%;width:7px;height:7px}.Q34gFW_bodyCard[data-active] .Q34gFW_bodySignal{background:var(--mn-body-accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--mn-body-accent) 14%, transparent)}.Q34gFW_bodyCard:not([data-healthy]) .Q34gFW_bodySignal{background:var(--mn-danger);box-shadow:0 0 0 4px color-mix(in srgb, var(--mn-danger) 12%, transparent)}.Q34gFW_bodyCardTop>div{min-width:0;display:grid}.Q34gFW_bodyCardTop strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.Q34gFW_bodyCardTop code{color:var(--mn-faint);font:9px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Q34gFW_bodyHealth{color:var(--mn-success);font:650 8px var(--mn-code);letter-spacing:.07em;text-transform:uppercase}.Q34gFW_bodyCard:not([data-healthy]) .Q34gFW_bodyHealth{color:var(--mn-danger)}.Q34gFW_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}.Q34gFW_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}.Q34gFW_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}.Q34gFW_bodySwitch:hover{color:var(--mn-text)}.Q34gFW_bodySwitch:hover .Q34gFW_bodySwitchTrack{border-color:var(--mn-body-accent)}.Q34gFW_bodySwitch[aria-checked=true]{color:var(--mn-text)}.Q34gFW_bodySwitch[aria-checked=true] .Q34gFW_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))}.Q34gFW_bodySwitch[aria-checked=true] .Q34gFW_bodySwitchTrack i{background:var(--mn-body-accent);transform:translate(12px)}.Q34gFW_bodyCardActions{align-items:center;gap:6px;display:flex}.Q34gFW_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}.Q34gFW_bodyEditButton:hover{color:var(--mn-text);border-color:var(--mn-line);background:var(--mn-hover)}.Q34gFW_bodyEdit{gap:9px;padding-top:2px;display:grid}.Q34gFW_bodyEdit label{color:var(--mn-faint);gap:4px;font-size:9px;display:grid}.Q34gFW_bodyEdit input,.Q34gFW_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}.Q34gFW_bodyEdit textarea{resize:vertical}.Q34gFW_bodyEdit input:focus,.Q34gFW_bodyEdit textarea:focus{border-color:var(--mn-accent)}.Q34gFW_bodyEditActions{justify-content:flex-end;gap:7px;display:flex}.Q34gFW_bodyCard>p{min-height:15px;color:var(--mn-muted);margin:7px 0;font-size:10px;line-height:1.45}.Q34gFW_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}.Q34gFW_bodyCreate{border-top:1px solid var(--mn-line);margin-top:10px;padding-top:8px}.Q34gFW_bodyCreate summary{cursor:pointer;width:max-content;color:var(--mn-accent);font-size:10px;list-style:none}.Q34gFW_bodyCreate summary::-webkit-details-marker{display:none}.Q34gFW_bodyCreate form{grid-template-columns:minmax(130px,.7fr) minmax(150px,.9fr) minmax(230px,1.7fr) auto;gap:7px;margin-top:9px;display:grid}.Q34gFW_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}.Q34gFW_bodyCreate input:focus{border-color:var(--mn-accent)}.Q34gFW_graphLayout{grid-template-columns:minmax(0,1fr) minmax(240px,270px);gap:10px;display:grid}.Q34gFW_graphPanel,.Q34gFW_graphInspector{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px}.Q34gFW_graphPanel{min-width:0;overflow:hidden}.Q34gFW_graphToolbar,.Q34gFW_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}.Q34gFW_graphToolbar{border-bottom:1px solid var(--mn-line)}.Q34gFW_graphToolbar>div:first-child{align-items:center;gap:7px;display:flex}.Q34gFW_graphToolbar small{color:var(--mn-faint)}.Q34gFW_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%}.Q34gFW_graphLegend{flex-wrap:wrap;justify-content:flex-end;gap:5px 10px;display:flex}.Q34gFW_graphLegend span{align-items:center;gap:4px;display:flex}.Q34gFW_graphLegend span:before{content:\"\";background:var(--edge-color);border-radius:2px;width:13px;height:2px}.Q34gFW_graphLegend [data-edge=temporal]{--edge-color:#87909f}.Q34gFW_graphLegend [data-edge=scope]{--edge-color:#708199}.Q34gFW_graphLegend [data-edge=scope]:before{background:repeating-linear-gradient(90deg, var(--edge-color) 0 4px, transparent 4px 7px)}.Q34gFW_graphLegend [data-edge=semantic]{--edge-color:#4d7cfe}.Q34gFW_graphLegend [data-edge=causal]{--edge-color:#ef6b5b}.Q34gFW_graphLegend [data-edge=entity]{--edge-color:#22a879}.Q34gFW_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}.Q34gFW_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}.Q34gFW_graphCanvasControls span{color:var(--mn-faint);font:9px var(--mn-code);align-items:center;gap:5px;padding:0 6px;display:flex}.Q34gFW_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%}.Q34gFW_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}.Q34gFW_graphCanvasControls button:hover,.Q34gFW_graphCanvasControls button[data-active]{border-color:var(--mn-line);color:var(--mn-text);background:var(--mn-hover)}.Q34gFW_graphCanvasControls button[data-active]{color:var(--mn-accent)}.Q34gFW_graphSvg{touch-action:pan-y pinch-zoom;user-select:none;width:100%;height:clamp(390px,42vw,560px);display:block}.Q34gFW_graphBackdrop{fill:var(--mn-layer-1)}.Q34gFW_graphGridLine{stroke:var(--mn-line);stroke-width:.6px;opacity:.5}.Q34gFW_graphEdge{fill:none;stroke:#87909f;stroke-width:1px;opacity:.32;vector-effect:non-scaling-stroke}.Q34gFW_graphEdge[data-edge=scope]{stroke:#708199;stroke-dasharray:4 5;opacity:.28}.Q34gFW_graphEdge[data-edge=semantic]{stroke:#4d7cfe;opacity:.48}.Q34gFW_graphEdge[data-edge=causal]{stroke:#ef6b5b;opacity:.52}.Q34gFW_graphEdge[data-edge=entity]{stroke:#22a879;stroke-width:1.45px;opacity:.78}.Q34gFW_graphNode{--node:#8290a8;cursor:grab;touch-action:none;outline:none}.Q34gFW_graphNode[data-dragging]{cursor:grabbing}.Q34gFW_graphNode[data-category=decision]{--node:#ef8354}.Q34gFW_graphNode[data-category=preference]{--node:#a879e1}.Q34gFW_graphNode[data-category=fact]{--node:#4d7cfe}.Q34gFW_graphNode[data-category=insight]{--node:#19a77d}.Q34gFW_graphNode[data-category=context]{--node:#d8a624}.Q34gFW_graphNode[data-kind=space]{--node:var(--mn-success)}.Q34gFW_graphNode[data-kind=entity]{--node:#2b9db9}.Q34gFW_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}.Q34gFW_nodeCore{fill:var(--node)}.Q34gFW_nodeLabel{fill:var(--mn-muted);font:10px var(--mn-code);pointer-events:auto}.Q34gFW_nodeBodyLabel{fill:var(--mn-faint);font:650 8px var(--mn-code);letter-spacing:.04em;pointer-events:auto}.Q34gFW_graphSvg[data-density=sparse] .Q34gFW_nodeLabel{font-size:12px}.Q34gFW_graphNode:hover .Q34gFW_nodeHalo,.Q34gFW_graphNode:focus .Q34gFW_nodeHalo,.Q34gFW_graphNode[data-selected] .Q34gFW_nodeHalo{fill:color-mix(in srgb, var(--node) 28%, var(--mn-layer-1));stroke:var(--node)}.Q34gFW_graphNode[data-selected] .Q34gFW_nodeLabel{fill:var(--mn-text);font-weight:650}.Q34gFW_graphFooter{border-top:1px solid var(--mn-line);min-height:38px;color:var(--mn-faint)}.Q34gFW_graphInspector{min-width:0;min-height:calc(clamp(390px,42vw,560px) + 83px);padding:15px;overflow:hidden}.Q34gFW_inspectorEmpty{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;display:flex}.Q34gFW_inspectorLogo{opacity:.72;border-radius:11px;width:54px;height:54px;margin-bottom:15px}.Q34gFW_inspectorEmpty h3{margin:7px 0 3px;font-size:14px}.Q34gFW_inspectorEmpty p{color:var(--mn-faint);margin:0;font-size:11px}.Q34gFW_inspectorHeading{justify-content:space-between;align-items:center;display:flex}.Q34gFW_inspectorHeading button,.Q34gFW_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}.Q34gFW_inspectorHeading button:hover,.Q34gFW_sectionHeading button:hover{background:var(--mn-hover)}.Q34gFW_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}.Q34gFW_inspectorTitleRow{align-items:flex-start;gap:8px;min-width:0;margin:12px 0 20px;display:flex}.Q34gFW_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}.Q34gFW_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}.Q34gFW_inspectorEye:hover{color:var(--mn-accent);border-color:var(--mn-line-strong);background:var(--mn-hover)}.Q34gFW_inspectorMeta{margin:0}.Q34gFW_inspectorMeta>div{border-top:1px solid var(--mn-line);gap:3px;padding:11px 0;display:grid}.Q34gFW_inspectorMeta dt{color:var(--mn-faint);font:9px var(--mn-code);text-transform:uppercase}.Q34gFW_inspectorMeta dd{overflow-wrap:anywhere;color:var(--mn-muted);margin:0;font-size:11px}.Q34gFW_inspectorActions{gap:8px;margin-top:20px;display:grid}.Q34gFW_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}.Q34gFW_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}.Q34gFW_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}.Q34gFW_previewHeading>span{color:var(--mn-accent);font:650 9px/1.2 var(--mn-code);letter-spacing:.08em;text-transform:uppercase}.Q34gFW_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}.Q34gFW_previewHeading button:hover{background:var(--mn-hover)}.Q34gFW_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}.Q34gFW_previewBody{-webkit-overflow-scrolling:touch;min-height:0;padding:14px 16px 18px;overflow:auto}.Q34gFW_previewBody p{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--mn-text);margin:0;font-size:13px;line-height:1.7}.Q34gFW_searchBar{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:13px;margin-bottom:18px;padding:13px}.Q34gFW_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}.Q34gFW_queryField>span{color:var(--mn-accent);font:18px var(--mn-code)}.Q34gFW_queryField input{background:0 0;border:0;outline:0;width:100%;height:42px}.Q34gFW_queryField kbd{color:var(--mn-faint);font:11px var(--mn-code)}.Q34gFW_searchControls{justify-content:flex-end;align-items:flex-end;gap:10px;padding-top:10px;display:flex}.Q34gFW_searchActions{align-items:center;gap:7px;display:flex}.Q34gFW_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}.Q34gFW_agentAnswerHeading{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.Q34gFW_agentAnswerHeading span{color:var(--mn-accent);font:650 9px/1.2 var(--mn-code);letter-spacing:.08em}.Q34gFW_agentAnswerHeading h3{margin:4px 0 0;font-size:15px}.Q34gFW_agentAnswerHeading>code{color:var(--mn-faint);font-size:9px}.Q34gFW_agentAnswer>p{white-space:pre-wrap;color:var(--mn-text);margin:12px 0;font-size:13px;line-height:1.7}.Q34gFW_agentCitations{border-top:1px solid var(--mn-line);flex-wrap:wrap;gap:5px;padding-top:10px;display:flex}.Q34gFW_agentCitations code{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:5px;padding:3px 6px;font-size:9px}.Q34gFW_searchControls label,.Q34gFW_formGrid label,.Q34gFW_fieldWide{color:var(--mn-muted);gap:5px;font-size:11px;display:grid}.Q34gFW_searchControls select,.Q34gFW_formGrid select,.Q34gFW_formGrid input,.Q34gFW_listToolbar input,.Q34gFW_listToolbar select,.Q34gFW_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}.Q34gFW_searchControls select:focus,.Q34gFW_formGrid select:focus,.Q34gFW_formGrid input:focus,.Q34gFW_listToolbar input:focus,.Q34gFW_listToolbar select:focus,.Q34gFW_entitySearch input:focus,.Q34gFW_supervisedForm textarea:focus{border-color:var(--mn-accent)}.Q34gFW_singleColumn{max-width:830px}.Q34gFW_resultLayout{grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);align-items:start;gap:14px;display:grid}.Q34gFW_results,.Q34gFW_relatedPane,.Q34gFW_entityResults{min-width:0}.Q34gFW_sectionHeading{justify-content:space-between;align-items:center;gap:16px;min-height:39px;margin-bottom:8px;display:flex}.Q34gFW_sectionHeading h3{margin:2px 0 0;font-size:15px}.Q34gFW_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}.Q34gFW_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}.Q34gFW_relatedSource{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:8px;margin:0 0 13px;padding:10px;font-size:11px}.Q34gFW_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}.Q34gFW_insightCard:hover{border-color:var(--mn-line-strong);transform:translateY(-1px)}.Q34gFW_cardTop{justify-content:space-between;align-items:center;gap:10px;display:flex}.Q34gFW_badges,.Q34gFW_tags,.Q34gFW_entities{flex-wrap:wrap;gap:5px;display:flex}.Q34gFW_badge{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:999px;padding:2px 6px;font-size:9px}.Q34gFW_id{color:var(--mn-faint);font:9px var(--mn-code)}.Q34gFW_content{white-space:pre-wrap;overflow-wrap:anywhere;margin:10px 0;line-height:1.65}.Q34gFW_tags{color:var(--mn-accent);font-size:10px}.Q34gFW_entities{margin-top:7px}.Q34gFW_entities span{border:1px solid var(--mn-line);color:var(--mn-muted);border-radius:5px;padding:2px 6px;font-size:9px}.Q34gFW_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}.Q34gFW_confirmBar{width:100%;color:var(--mn-danger);justify-content:flex-end;align-items:center;gap:5px;font-size:11px;display:flex}.Q34gFW_confirmBar>span{margin-right:auto}.Q34gFW_entityLayout{grid-template-columns:265px minmax(0,1fr);align-items:start;gap:16px;display:grid}.Q34gFW_entityRail{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;padding:13px;position:sticky;top:0}.Q34gFW_entitySearch{grid-template-columns:minmax(0,1fr) auto;gap:7px;display:grid}.Q34gFW_entitySearch input{min-width:0}.Q34gFW_entityHeading{justify-content:space-between;align-items:center;margin:18px 2px 7px;display:flex}.Q34gFW_entityHeading small{color:var(--mn-faint);font-size:9px}.Q34gFW_entityList{gap:3px;display:grid}.Q34gFW_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}.Q34gFW_entityList button:hover,.Q34gFW_entityList button[aria-pressed=true]{color:var(--mn-text);background:var(--mn-hover)}.Q34gFW_entityList strong{color:var(--mn-faint);font:10px var(--mn-code)}.Q34gFW_entityResults>.Q34gFW_emptyState{min-height:360px}.Q34gFW_runtimeComposer,.Q34gFW_runtimeTarget{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px}.Q34gFW_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}.Q34gFW_runtimeComposerHeading{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:11px;display:flex}.Q34gFW_runtimeComposerHeading h3{margin:0 0 2px;font-size:14px}.Q34gFW_runtimeComposerHeading p{color:var(--mn-muted);margin:0;font-size:10px}.Q34gFW_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}.Q34gFW_runtimeComposer>textarea,.Q34gFW_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}.Q34gFW_runtimeComposer>textarea:focus,.Q34gFW_runtimeEntry textarea:focus{border-color:var(--mn-accent)}.Q34gFW_runtimeComposerActions{justify-content:flex-end;align-items:flex-end;gap:9px;margin-top:10px;display:flex}.Q34gFW_runtimeComposerActions label{color:var(--mn-faint);gap:4px;font-size:9px;display:grid}.Q34gFW_runtimeComposerActions select,.Q34gFW_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}.Q34gFW_runtimeNotice,.Q34gFW_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}.Q34gFW_runtimeReadOnly{color:var(--mn-muted);border-color:var(--mn-line);background:var(--mn-layer-1)}.Q34gFW_runtimeGrid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:12px;display:grid}.Q34gFW_runtimeTarget{min-width:0;overflow:hidden}.Q34gFW_runtimeTargetHeader{justify-content:space-between;align-items:center;gap:14px;padding:14px 15px 9px;display:flex}.Q34gFW_runtimeTargetHeader>div{gap:1px;display:grid}.Q34gFW_runtimeTargetHeader span{color:var(--mn-faint);font:650 9px var(--mn-code);letter-spacing:.08em}.Q34gFW_runtimeTargetHeader h3{margin:0;font-size:15px}.Q34gFW_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}.Q34gFW_capacityLine{align-items:center;gap:9px;padding:0 15px;display:flex}.Q34gFW_capacityLine>div{background:var(--mn-layer-2);border-radius:999px;flex:1;height:4px;overflow:hidden}.Q34gFW_capacityLine i{border-radius:inherit;background:var(--mn-success);height:100%;transition:width .25s;display:block}.Q34gFW_capacityLine>span{min-width:88px;color:var(--mn-faint);font:9px var(--mn-code);text-align:right}.Q34gFW_runtimeTargetDescription{min-height:31px;color:var(--mn-muted);margin:8px 15px 12px;font-size:10px}.Q34gFW_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}.Q34gFW_runtimeEntry{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:9px;padding:11px;position:relative}.Q34gFW_runtimeEntry:before{content:\"\";background:var(--mn-muted);border-radius:0 2px 2px 0;width:2px;position:absolute;top:12px;bottom:12px;left:-1px}.Q34gFW_runtimeEntry[data-importance=critical]:before{background:var(--mn-danger)}.Q34gFW_runtimeEntry[data-importance=low]:before{background:var(--mn-faint);opacity:.45}.Q34gFW_runtimeEntryMeta{justify-content:space-between;align-items:center;gap:12px;display:flex}.Q34gFW_runtimeEntryMeta>span{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:999px;padding:2px 6px;font-size:9px}.Q34gFW_runtimeEntry[data-importance=critical] .Q34gFW_runtimeEntryMeta>span{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent)}.Q34gFW_runtimeEntryMeta time{color:var(--mn-faint);font:8px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Q34gFW_runtimeEntry>p{white-space:pre-wrap;overflow-wrap:anywhere;min-height:42px;margin:9px 0;font-size:12px;line-height:1.6}.Q34gFW_runtimeEntry>select{margin-top:7px}.Q34gFW_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}.Q34gFW_runtimeEntry footer>span{color:var(--mn-danger);margin-right:auto;font-size:10px}.Q34gFW_runtimeEmpty{min-height:126px;color:var(--mn-faint);text-align:center;align-content:center;place-items:center;gap:5px;display:grid}.Q34gFW_runtimeEmpty>span{font:24px var(--mn-code);opacity:.65}.Q34gFW_runtimeEmpty p{margin:0;font-size:10px}.Q34gFW_runtimeFootnote{color:var(--mn-faint);margin:10px 2px 0;font-size:9px}.Q34gFW_documentSummary{grid-template-columns:.7fr .7fr 1.6fr;gap:9px;margin-bottom:12px;display:grid}.Q34gFW_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}.Q34gFW_documentSummary article>span{color:var(--mn-faint);font-size:9px;display:block}.Q34gFW_documentSummary article>strong{font:650 21px/1 var(--mn-code);margin:7px 0 4px;display:block}.Q34gFW_documentSummary article>small{color:var(--mn-muted);font-size:9px}.Q34gFW_documentCapacity>div{background:var(--mn-layer-2);border-radius:999px;height:4px;margin:7px 0 6px;overflow:hidden}.Q34gFW_documentCapacity>div i{border-radius:inherit;background:var(--mn-accent);height:100%;transition:width .3s;display:block}.Q34gFW_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}.Q34gFW_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}.Q34gFW_documentToolbar form>span{color:var(--mn-faint);font:15px var(--mn-code)}.Q34gFW_documentToolbar input,.Q34gFW_documentEditor input,.Q34gFW_documentEditor textarea{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;width:100%;padding:8px 10px}.Q34gFW_documentToolbar input{background:0 0;border-color:#0000;height:34px}.Q34gFW_documentToolbar input:focus,.Q34gFW_documentEditor input:focus,.Q34gFW_documentEditor textarea:focus{border-color:var(--mn-accent)}.Q34gFW_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}.Q34gFW_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}.Q34gFW_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)}.Q34gFW_documentToolbar>div b{color:var(--mn-faint);font:600 9px var(--mn-code);margin-left:4px}.Q34gFW_documentWorkspace{grid-template-columns:minmax(250px,310px) minmax(0,1fr);gap:10px;min-height:590px;display:grid}.Q34gFW_documentList,.Q34gFW_documentReader{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0;overflow:hidden}.Q34gFW_documentList{align-self:stretch}.Q34gFW_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}.Q34gFW_documentList>header code{color:var(--mn-accent)}.Q34gFW_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}.Q34gFW_documentList>button:hover{background:var(--mn-hover)}.Q34gFW_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)}.Q34gFW_documentList>button>div{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.Q34gFW_documentList>button strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.Q34gFW_documentList>button time{color:var(--mn-faint);font:8px var(--mn-code);flex:none}.Q34gFW_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}.Q34gFW_documentList>button footer{color:var(--mn-faint);align-items:center;gap:8px;font-size:9px;display:flex}.Q34gFW_documentList>button footer code{margin-left:auto}.Q34gFW_documentList>button footer em{color:var(--mn-danger);font-style:normal}.Q34gFW_documentListEmpty{min-height:230px;color:var(--mn-muted);text-align:center;align-content:center;place-items:center;gap:4px;padding:22px;display:grid}.Q34gFW_documentListEmpty>span{color:var(--mn-accent);font:28px var(--mn-code);opacity:.6;margin-bottom:6px}.Q34gFW_documentListEmpty p{color:var(--mn-faint);margin:0;font-size:10px}.Q34gFW_documentReader{padding:clamp(16px,2vw,22px)}.Q34gFW_documentReader>.Q34gFW_emptyState{background:0 0;border:0;height:100%}.Q34gFW_documentDetail>header{border-bottom:1px solid var(--mn-line);justify-content:space-between;align-items:flex-start;gap:18px;padding-bottom:15px;display:flex}.Q34gFW_documentDetail>header span{color:var(--mn-accent);font:650 9px var(--mn-code);letter-spacing:.08em;text-transform:uppercase}.Q34gFW_documentDetail>header h3{margin:5px 0 3px;font-size:18px}.Q34gFW_documentDetail>header p{color:var(--mn-muted);margin:0;font-size:11px}.Q34gFW_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}.Q34gFW_documentDetail>dl>div{border-right:1px solid var(--mn-line);border-bottom:1px solid var(--mn-line);min-width:0;padding:8px 9px}.Q34gFW_documentDetail dt{color:var(--mn-faint);margin-bottom:3px;font-size:8px}.Q34gFW_documentDetail dd{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:9px;overflow:hidden}.Q34gFW_documentSources{flex-wrap:wrap;align-items:center;gap:5px;margin:11px 0;display:flex}.Q34gFW_documentSources>span{color:var(--mn-faint);margin-right:4px;font-size:9px}.Q34gFW_documentSources code,.Q34gFW_documentArchiveReceipt code{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:5px;padding:3px 6px;font-size:8px}.Q34gFW_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}.Q34gFW_markdownBody>:first-child{margin-top:0}.Q34gFW_markdownBody>:last-child{margin-bottom:0}.Q34gFW_markdownBody h1,.Q34gFW_markdownBody h2,.Q34gFW_markdownBody h3,.Q34gFW_markdownBody h4{color:var(--mn-text);letter-spacing:-.015em;margin:1.55em 0 .65em;line-height:1.3}.Q34gFW_markdownBody h1{border-bottom:1px solid var(--mn-line);padding-bottom:.35em;font-size:1.75em}.Q34gFW_markdownBody h2{border-bottom:1px solid var(--mn-line);padding-bottom:.3em;font-size:1.42em}.Q34gFW_markdownBody h3{font-size:1.18em}.Q34gFW_markdownBody p,.Q34gFW_markdownBody ul,.Q34gFW_markdownBody ol,.Q34gFW_markdownBody blockquote,.Q34gFW_markdownBody table,.Q34gFW_markdownBody pre{margin:.85em 0}.Q34gFW_markdownBody ul,.Q34gFW_markdownBody ol{padding-left:1.6em}.Q34gFW_markdownBody li+li{margin-top:.3em}.Q34gFW_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}.Q34gFW_markdownBody code{color:var(--mn-text);background:var(--mn-layer-2);font:.88em/1.55 var(--mn-code);border-radius:5px;padding:.15em .38em}.Q34gFW_markdownBody pre{border:1px solid var(--mn-line);background:var(--mn-layer-2);border-radius:9px;max-width:100%;padding:14px 16px;overflow:auto}.Q34gFW_markdownBody pre code{background:0 0;padding:0;font-size:11px}.Q34gFW_markdownBody a{color:var(--mn-accent);text-underline-offset:3px;text-decoration-thickness:1px}.Q34gFW_markdownBody hr{border:0;border-top:1px solid var(--mn-line);margin:1.8em 0}.Q34gFW_markdownBody table{border-collapse:collapse;max-width:100%;display:block;overflow-x:auto}.Q34gFW_markdownBody th,.Q34gFW_markdownBody td{border:1px solid var(--mn-line);text-align:left;vertical-align:top;padding:8px 10px}.Q34gFW_markdownBody th{background:var(--mn-layer-2);font-weight:600}.Q34gFW_markdownBody img{border-radius:8px;max-width:100%;height:auto}.Q34gFW_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}.Q34gFW_documentArchiveReceipt p{color:var(--mn-muted);margin:4px 0 8px;font-size:10px}.Q34gFW_documentArchiveReceipt div{flex-wrap:wrap;gap:5px;display:flex}.Q34gFW_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}.Q34gFW_documentDanger>div{margin-right:auto}.Q34gFW_documentDanger strong{font-size:11px;display:block}.Q34gFW_documentDanger p{color:var(--mn-faint);margin:2px 0 0;font-size:9px}.Q34gFW_documentDanger>span{color:var(--mn-danger);margin-right:auto;font-size:10px}.Q34gFW_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}.Q34gFW_documentReader>.Q34gFW_documentEditor{background:0 0;border:0;margin:0;padding:0}.Q34gFW_documentEditor>header{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:12px;display:flex}.Q34gFW_documentEditor h3{margin:0;font-size:14px}.Q34gFW_documentEditor header p{color:var(--mn-muted);margin:2px 0 0;font-size:10px}.Q34gFW_documentEditor header>span,.Q34gFW_documentEditor header>code{color:var(--mn-accent);font:650 9px var(--mn-code)}.Q34gFW_documentEditor label{color:var(--mn-faint);gap:4px;margin-top:9px;font-size:9px;display:grid}.Q34gFW_documentEditor textarea{resize:vertical;line-height:1.65}.Q34gFW_documentEditorMeta{grid-template-columns:.8fr 1.2fr;gap:9px;display:grid}.Q34gFW_documentEditorMeta label{margin:0}.Q34gFW_documentEditor footer{justify-content:flex-end;gap:7px;margin-top:11px;display:flex}.Q34gFW_writebackLayout{grid-template-columns:minmax(220px,280px) minmax(0,1fr);align-items:start;gap:15px;display:grid}.Q34gFW_writeGuide,.Q34gFW_supervisedComposer{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px}.Q34gFW_writeGuide{padding:17px}.Q34gFW_writeGuide h3{margin:5px 0 15px;font-size:15px}.Q34gFW_writeGuide ol{counter-reset:gate;gap:13px;margin:0;padding:0;list-style:none;display:grid}.Q34gFW_writeGuide li{counter-increment:gate;grid-template-columns:22px minmax(0,1fr);column-gap:7px;display:grid}.Q34gFW_writeGuide li:before{content:\"0\" counter(gate);color:var(--mn-accent);font:10px var(--mn-code);grid-row:span 2}.Q34gFW_writeGuide li strong{font-size:12px}.Q34gFW_writeGuide li span,.Q34gFW_writeGuide p{color:var(--mn-faint);font-size:10px}.Q34gFW_writeGuide p{border-top:1px solid var(--mn-line);margin:17px 0 0;padding-top:13px}.Q34gFW_supervisedComposer{overflow:hidden}.Q34gFW_supervisedForm{padding:18px}.Q34gFW_supervisedHeading{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.Q34gFW_supervisedHeading h3{margin:4px 0 0;font-size:17px}.Q34gFW_sessionReady,.Q34gFW_sessionMissing{font:650 9px var(--mn-code);border-radius:999px;padding:4px 8px}.Q34gFW_sessionReady{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 10%, transparent)}.Q34gFW_sessionMissing{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 10%, transparent)}.Q34gFW_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}.Q34gFW_sessionHint{color:var(--mn-danger);margin:9px 0 0;font-size:11px}.Q34gFW_formGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:13px;display:grid}.Q34gFW_fieldWide{grid-column:1/-1}.Q34gFW_formGrid select,.Q34gFW_formGrid input{width:100%;min-width:0}.Q34gFW_formActions{align-items:center;gap:12px;margin-top:15px;display:flex}.Q34gFW_formActions span{color:var(--mn-muted);font-size:11px}.Q34gFW_advancedWrite{border-top:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 45%, var(--mn-layer-1))}.Q34gFW_advancedWrite summary{cursor:pointer;justify-content:space-between;align-items:center;gap:16px;min-height:58px;padding:10px 18px;list-style:none;display:flex}.Q34gFW_advancedWrite summary::-webkit-details-marker{display:none}.Q34gFW_advancedWrite summary>span:first-child{gap:2px;display:grid}.Q34gFW_advancedWrite summary strong{font-size:12px}.Q34gFW_advancedWrite summary small{color:var(--mn-faint);font-size:10px}.Q34gFW_advancedWrite summary>span:last-child{color:var(--mn-accent);font:10px var(--mn-code)}.Q34gFW_advancedWrite[open] summary{border-bottom:1px solid var(--mn-line)}.Q34gFW_advancedWrite[open] summary>span:last-child{font-size:0}.Q34gFW_advancedWrite[open] summary>span:last-child:after{content:\"−\";font-size:13px}.Q34gFW_manualForm{padding:3px 18px 18px}.Q34gFW_manualActions{justify-content:space-between;align-items:center;gap:14px;margin-top:15px;display:flex}.Q34gFW_manualActions p{max-width:520px;color:var(--mn-faint);margin:0;font-size:10px}.Q34gFW_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}.Q34gFW_listToolbar input,.Q34gFW_listToolbar select{width:100%;min-width:0}.Q34gFW_listNotice{color:var(--mn-faint);margin:10px 0 16px;font-size:10px}.Q34gFW_listNotice span{color:var(--mn-success);font:650 9px var(--mn-code);letter-spacing:.08em;margin-right:7px}.Q34gFW_memoryList{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:9px;display:grid}.Q34gFW_memoryList .Q34gFW_insightCard{height:100%;margin:0}.Q34gFW_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}.Q34gFW_healthStrip{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;grid-template-columns:repeat(5,minmax(0,1fr));margin-bottom:13px;display:grid;overflow:hidden}.Q34gFW_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}.Q34gFW_healthStrip article>div{min-width:0}.Q34gFW_healthStrip article:last-child{border-right:0}.Q34gFW_healthStrip small{color:var(--mn-faint);font:650 10px var(--mn-code);letter-spacing:.06em;margin-bottom:4px;display:block}.Q34gFW_healthStrip strong{text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;display:block;overflow:hidden}.Q34gFW_healthStrip p{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;margin:3px 0 0;font-size:10.5px;overflow:hidden}.Q34gFW_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}.Q34gFW_healthGood{color:var(--mn-success);background:currentColor}.Q34gFW_healthBad{color:var(--mn-danger);background:currentColor}.Q34gFW_healthMuted{color:var(--mn-faint);background:currentColor}.Q34gFW_memoryFlow{border:1px solid var(--mn-line);background:radial-gradient(circle at 52% 10%, color-mix(in srgb, var(--mn-accent) 5%, transparent), transparent 28%), var(--mn-layer-1);border-radius:12px;margin-bottom:13px;padding:16px;overflow:hidden;container:Q34gFW_mnemon-flow/inline-size}.Q34gFW_memoryFlowCanvas{overscroll-behavior-inline:contain;border:1px solid var(--mn-line);background-image:linear-gradient(color-mix(in srgb, var(--mn-line) 36%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--mn-line) 36%, transparent) 1px, transparent 1px);background-size:24px 24px;background-color:color-mix(in srgb, var(--mn-layer-2) 28%, transparent);scrollbar-color:var(--mn-line-strong) transparent;border-radius:11px;margin-top:13px;overflow:auto hidden}.Q34gFW_flowArchitecture{gap:10px;min-width:840px;padding:10px;display:grid}.Q34gFW_flowLane{border:1px solid color-mix(in srgb, var(--mn-line) 82%, transparent);background:color-mix(in srgb, var(--mn-layer-1) 92%, transparent);min-width:0;box-shadow:inset 3px 0 0 color-mix(in srgb, var(--mn-accent) 34%, transparent);border-radius:10px;overflow:hidden}.Q34gFW_flowLane[data-lane=semantic]{box-shadow:inset 3px 0 #8b6ce77a}.Q34gFW_flowLane[data-lane=maintenance]{box-shadow:inset 3px 0 #d18a3c85}.Q34gFW_flowLane>header{border-bottom:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 42%, transparent);align-items:center;gap:9px;min-height:46px;padding:8px 12px;display:flex}.Q34gFW_flowLane>header>span{color:var(--mn-accent);font:650 9px var(--mn-code)}.Q34gFW_flowLane>header>div{gap:1px;min-width:0;display:grid}.Q34gFW_flowLane>header strong{font-size:12px}.Q34gFW_flowLane>header small{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9.5px;overflow:hidden}.Q34gFW_flowTrack{align-items:stretch;gap:0;min-width:0;padding:11px 12px;display:flex}.Q34gFW_flowTrack+.Q34gFW_flowTrack{padding-top:0}.Q34gFW_flowSecondaryTrack,.Q34gFW_flowReviewTrack,.Q34gFW_flowArchiveTrack{border-top:1px dashed color-mix(in srgb, var(--mn-line) 72%, transparent);padding-top:11px!important}.Q34gFW_flowArchitectureNode{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-1) 96%, transparent);border-radius:9px;flex:1 1 0;grid-template-columns:7px minmax(0,1fr);align-content:center;gap:9px;min-width:0;min-height:84px;padding:11px;transition:border-color .2s,background-color .2s,box-shadow .2s;display:grid;position:relative}.Q34gFW_flowArchitectureNode[data-kind=worker]{border-style:dashed;border-color:color-mix(in srgb, #8b6ce7 46%, var(--mn-line));background:color-mix(in srgb, #8b6ce7 4%, var(--mn-layer-1))}.Q34gFW_flowArchitectureNode[data-kind=store]{background:color-mix(in srgb, var(--mn-success) 3%, var(--mn-layer-1))}.Q34gFW_flowArchitectureNode[data-kind=task]{background:color-mix(in srgb, var(--mn-accent) 3%, var(--mn-layer-1))}.Q34gFW_flowArchitectureNode[data-emphasis=active]{border-color:color-mix(in srgb, var(--mn-accent) 56%, var(--mn-line));box-shadow:0 0 0 2px color-mix(in srgb, var(--mn-accent) 8%, transparent)}.Q34gFW_flowArchitectureNode[data-emphasis=recent]{border-color:color-mix(in srgb, var(--mn-success) 48%, var(--mn-line))}.Q34gFW_flowArchitectureNode[data-emphasis=pending]{border-color:color-mix(in srgb, #d18a3c 55%, var(--mn-line))}.Q34gFW_flowArchitectureSignal{background:var(--mn-faint);width:7px;height:7px;box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-faint) 8%, transparent);border-radius:50%;margin-top:4px}.Q34gFW_flowArchitectureNode[data-state=ready] .Q34gFW_flowArchitectureSignal{background:var(--mn-success);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 10%, transparent)}.Q34gFW_flowArchitectureNode[data-state=error] .Q34gFW_flowArchitectureSignal{background:var(--mn-danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-danger) 10%, transparent)}.Q34gFW_flowArchitectureNode>div{align-content:start;gap:5px;min-width:0;display:grid}.Q34gFW_flowArchitectureNode strong{overflow-wrap:break-word;word-break:normal;font-size:11.5px;line-height:1.35}.Q34gFW_flowArchitectureNode small{color:var(--mn-faint);overflow-wrap:anywhere;font-size:9.5px;line-height:1.45}.Q34gFW_flowConnector{width:clamp(38px,4.2vw,56px);color:var(--mn-faint);text-align:center;flex:none;place-content:center stretch;gap:5px;padding:0 4px;display:grid;position:relative}.Q34gFW_flowConnector span{overflow-wrap:anywhere;min-height:13px;font:8px/1.3 var(--mn-code)}.Q34gFW_flowConnector i{background:color-mix(in srgb, var(--mn-accent) 55%, var(--mn-line));height:1px;display:block;position:relative}.Q34gFW_flowConnector i:after{border-top:1px solid var(--mn-accent);border-right:1px solid var(--mn-accent);content:\"\";width:6px;height:6px;position:absolute;top:-3px;right:-1px;transform:rotate(45deg)}.Q34gFW_flowConnector[data-kind=worker] i{border-top:1px dashed color-mix(in srgb, #8b6ce7 72%, var(--mn-line));background:0 0;height:0}.Q34gFW_flowConnector[data-kind=worker] i:after{border-color:#8b6ce7}.Q34gFW_flowConnector[data-active]{color:var(--mn-text)}.Q34gFW_flowConnector[data-active] i{height:2px}.Q34gFW_flowConnector[data-active] i:before{z-index:1;content:\"\";background:var(--mn-accent);border-radius:50%;width:5px;height:5px;animation:1.9s cubic-bezier(.35,0,.65,1) infinite Q34gFW_flowTrace;position:absolute;top:-2px;left:0}.Q34gFW_flowConnector[data-kind=worker][data-active] i:before{background:#8b6ce7;top:-3px}@keyframes Q34gFW_flowTrace{0%{opacity:0;left:0}12%{opacity:1}88%{opacity:1}to{opacity:0;left:calc(100% - 5px)}}@keyframes Q34gFW_flowTraceVertical{0%{opacity:0;top:0}12%{opacity:1}88%{opacity:1}to{opacity:0;top:calc(100% - 5px)}}.Q34gFW_flowLegend{color:var(--mn-faint);flex-wrap:wrap;gap:9px 18px;margin-top:10px;font-size:9px;display:flex}.Q34gFW_flowLegend span{align-items:center;gap:6px;display:inline-flex}.Q34gFW_flowLegend span:last-child{margin-left:auto}.Q34gFW_flowLegend i{background:var(--mn-accent);width:18px;height:1px}.Q34gFW_flowLegend span:nth-child(2) i{background:0 0;border-top:1px dashed #8b6ce7;height:0}.Q34gFW_flowLegend b{background:var(--mn-success);width:6px;height:6px;box-shadow:0 0 0 3px color-mix(in srgb, var(--mn-success) 10%, transparent);border-radius:50%}@container Q34gFW_mnemon-flow (width<=700px){.Q34gFW_flowArchitecture{min-width:0;padding:8px}.Q34gFW_flowLane>header{align-items:flex-start}.Q34gFW_flowLane>header small{white-space:normal}.Q34gFW_flowTrack{flex-direction:column;padding:10px}.Q34gFW_flowArchitectureNode{flex:none;width:100%;min-height:72px}.Q34gFW_flowConnector{place-content:center;width:100%;height:42px;padding:5px 0}.Q34gFW_flowConnector span{min-height:0}.Q34gFW_flowConnector i{justify-self:center;width:1px;height:18px}.Q34gFW_flowConnector i:after{top:auto;bottom:0;right:-3px;transform:rotate(135deg)}.Q34gFW_flowConnector[data-kind=worker] i{border-top:0;border-left:1px dashed color-mix(in srgb, #8b6ce7 72%, var(--mn-line));width:0;height:18px}.Q34gFW_flowConnector[data-active] i{width:2px;height:18px}.Q34gFW_flowConnector[data-active] i:before{animation:1.9s cubic-bezier(.35,0,.65,1) infinite Q34gFW_flowTraceVertical;top:0;left:-2px}.Q34gFW_flowConnector[data-kind=worker][data-active] i:before{top:0}}.Q34gFW_storageDomains{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;margin-bottom:13px;padding:16px}.Q34gFW_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}.Q34gFW_storageRoot>div:first-child{gap:4px;min-width:0;display:grid}.Q34gFW_storageRoot span,.Q34gFW_storageRoot small{color:var(--mn-faint);font-size:9px}.Q34gFW_storageRoot code{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.Q34gFW_storageRoot>div:last-child{flex:none;justify-items:end;gap:3px;display:grid}.Q34gFW_storageRoot strong{font:650 11px var(--mn-code)}.Q34gFW_storageAreaGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:8px;display:grid}.Q34gFW_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}.Q34gFW_storageAreaGrid article>header{justify-content:space-between;align-items:center;gap:8px;display:flex}.Q34gFW_storageAreaGrid article>header>div{align-items:center;gap:7px;min-width:0;display:flex}.Q34gFW_storageAreaGrid article>header span{background:var(--mn-faint);border-radius:50%;flex:none;width:6px;height:6px}.Q34gFW_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)}.Q34gFW_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)}.Q34gFW_storageAreaGrid article>header strong{text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.Q34gFW_storageAreaGrid article>header em{color:var(--mn-faint);font:normal 8px var(--mn-code);white-space:nowrap}.Q34gFW_storageAreaMetric{align-items:baseline;gap:5px;margin-top:14px;display:flex}.Q34gFW_storageAreaMetric strong{font:650 20px var(--mn-code)}.Q34gFW_storageAreaMetric span{color:var(--mn-faint);font-size:9px}.Q34gFW_storageAreaMetric code{color:var(--mn-muted);margin-left:auto;font-size:9px}.Q34gFW_storageAreaGrid article>p{min-height:28px;color:var(--mn-muted);margin:8px 0;font-size:9px;line-height:1.5}.Q34gFW_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}.Q34gFW_storageAreaGrid article>small{color:var(--mn-danger);margin-top:6px;font-size:8px;line-height:1.4;display:block}.Q34gFW_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}.Q34gFW_storageUnavailable strong{font-size:12px}.Q34gFW_storageUnavailable p{max-width:520px;color:var(--mn-faint);margin:0;font-size:10px}.Q34gFW_storageFootnote{color:var(--mn-faint);margin:11px 0 0;font-size:9px;line-height:1.5}.Q34gFW_lifecyclePanel{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:12px;margin-top:0;padding:16px}.Q34gFW_statusSectionHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.Q34gFW_statusSectionHeader h3{margin:4px 0 0;font-size:15px}.Q34gFW_statusSectionHeader p{max-width:590px;color:var(--mn-muted);margin:5px 0 0;font-size:10px}.Q34gFW_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}.Q34gFW_lifecycleFlow{border:1px solid var(--mn-line);background:color-mix(in srgb, var(--mn-layer-2) 52%, transparent);border-radius:9px;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:15px;display:grid;overflow:hidden}.Q34gFW_lifecycleFlow article{border-right:1px solid var(--mn-line);grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:8px;padding:12px;display:grid}.Q34gFW_lifecycleFlow article:last-child{border-right:0}.Q34gFW_lifecycleFlow article[data-disabled]{opacity:.48}.Q34gFW_lifecycleFlow article>span{color:var(--mn-accent);font:650 9px var(--mn-code)}.Q34gFW_lifecycleFlow strong{font-size:11px;display:block}.Q34gFW_lifecycleFlow p{color:var(--mn-faint);margin:4px 0 0;font-size:9px;line-height:1.45}.Q34gFW_lifecycleFlow code{color:var(--mn-muted);font-size:10px}.Q34gFW_lifecycleFoot{border-top:1px solid var(--mn-line);color:var(--mn-faint);flex-wrap:wrap;gap:8px 18px;margin-top:13px;padding-top:12px;font-size:9px;display:flex}.Q34gFW_lifecycleFoot strong{color:var(--mn-text);margin-left:3px;font-weight:600}.Q34gFW_runtimeBadge{font:650 9px var(--mn-code);border-radius:999px;padding:3px 7px}.Q34gFW_runtimeOnline{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 10%, transparent)}.Q34gFW_runtimeOffline{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 10%, transparent)}.Q34gFW_runtimePending{color:var(--mn-muted);background:var(--mn-layer-2)}@media (width<=1000px){.Q34gFW_graphLayout{display:block;position:relative}.Q34gFW_graphInspector{width:auto;min-height:0;box-shadow:none;margin-top:10px;position:static;overflow:visible}.Q34gFW_graphInspector[data-empty]{display:none}.Q34gFW_resultLayout{grid-template-columns:1fr}.Q34gFW_relatedPane{grid-row:1;max-height:none;position:static}.Q34gFW_memoryList{grid-template-columns:1fr}.Q34gFW_storageAreaGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.Q34gFW_runtimeGrid{grid-template-columns:1fr}.Q34gFW_documentWorkspace{grid-template-columns:minmax(220px,270px) minmax(0,1fr)}.Q34gFW_documentDetail>dl{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.Q34gFW_shell{min-height:0;overflow:hidden}.Q34gFW_masthead{grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;min-height:76px;padding:10px 14px}.Q34gFW_brandLogo{width:36px;height:36px}.Q34gFW_headerActions{max-width:52vw}.Q34gFW_workspacePicker>span{display:none}.Q34gFW_workspacePicker select{width:min(170px,32vw)}.Q34gFW_statusCluster>span:not(.Q34gFW_statusDot){display:none}.Q34gFW_telemetry{border-top:1px solid var(--mn-line);grid-column:1/-1;justify-content:space-between;padding-top:8px}.Q34gFW_telemetryMetric{text-align:center;flex:1;justify-items:center;gap:3px;min-width:0;padding:0 5px}.Q34gFW_telemetryMetric:first-child{border-left:0}.Q34gFW_topNavigation{padding:0 10px;position:relative}.Q34gFW_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}.Q34gFW_nav{flex:1;padding-right:26px;scroll-padding-inline:10px 34px}.Q34gFW_navGroup{gap:3px}.Q34gFW_navGroupDivider{height:18px}.Q34gFW_nav button{text-align:center;flex-direction:column;justify-content:center;gap:3px;min-width:60px;padding:4px 3px}.Q34gFW_spaceSummary{display:none}.Q34gFW_navGlyph{line-height:1}.Q34gFW_page{padding:18px 13px calc(170px + env(safe-area-inset-bottom,0px))}.Q34gFW_pageHeader{gap:10px;display:grid}.Q34gFW_pageHeaderMeta{justify-content:space-between}.Q34gFW_entityLayout,.Q34gFW_writebackLayout{grid-template-columns:1fr}.Q34gFW_runtimeComposerHeading,.Q34gFW_runtimeComposerActions{flex-direction:column;align-items:stretch}.Q34gFW_runtimeComposerActions select,.Q34gFW_runtimeComposerActions button{width:100%}.Q34gFW_documentSummary{grid-template-columns:repeat(2,minmax(0,1fr))}.Q34gFW_documentCapacity{grid-column:1/-1}.Q34gFW_documentToolbar{flex-direction:column;align-items:stretch}.Q34gFW_documentToolbar form{min-width:0}.Q34gFW_documentToolbar>div,.Q34gFW_documentToolbar>button{width:100%}.Q34gFW_documentToolbar>div button{flex:1}.Q34gFW_documentWorkspace{grid-template-columns:1fr;min-height:0}.Q34gFW_documentList{-webkit-overflow-scrolling:touch;max-height:330px;overflow:auto}.Q34gFW_documentReader{min-height:430px}.Q34gFW_documentEditorMeta{grid-template-columns:1fr}.Q34gFW_manualActions{flex-direction:column;align-items:stretch}.Q34gFW_entityRail{position:static}.Q34gFW_searchControls{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.Q34gFW_searchActions{grid-column:1/-1}.Q34gFW_searchActions>button{flex:1}.Q34gFW_searchControls select{width:100%;min-width:0}.Q34gFW_listToolbar{grid-template-columns:1fr}.Q34gFW_bodyDirectoryHeader{display:grid}.Q34gFW_bodyCreate form{grid-template-columns:1fr}.Q34gFW_graphViewport{min-height:360px}.Q34gFW_graphSvg{height:390px}.Q34gFW_graphCanvasControls{top:7px;right:7px}.Q34gFW_graphCanvasControls span{display:none}.Q34gFW_previewOverlay{padding:10px;padding-bottom:calc(10px + env(safe-area-inset-bottom,0px))}.Q34gFW_previewDialog{max-height:min(84dvh,640px)}.Q34gFW_healthStrip,.Q34gFW_lifecycleFlow{grid-template-columns:1fr}.Q34gFW_storageRoot{flex-direction:column;align-items:flex-start}.Q34gFW_storageRoot>div:last-child{justify-items:start}.Q34gFW_storageAreaGrid{grid-template-columns:1fr}.Q34gFW_flowLegend span:last-child{width:100%;margin-left:0}.Q34gFW_healthStrip article,.Q34gFW_lifecycleFlow article{border-right:0;border-bottom:1px solid var(--mn-line)}.Q34gFW_healthStrip article:last-child,.Q34gFW_lifecycleFlow article:last-child{border-bottom:0}.Q34gFW_workspaceMismatch{flex-direction:column;align-items:stretch;margin-inline:13px}.Q34gFW_workspaceMismatch>button{align-self:flex-start}}@media (width<=520px){.Q34gFW_masthead{min-height:68px}.Q34gFW_brand h1{font-size:16px}.Q34gFW_headerActions{max-width:58vw}.Q34gFW_workspacePicker select{width:min(150px,39vw)}.Q34gFW_telemetryMetric span{font-size:10px}.Q34gFW_nav{scroll-snap-type:x proximity}.Q34gFW_nav button{scroll-snap-align:start;min-width:68px}.Q34gFW_pageHeader h2{font-size:19px}.Q34gFW_pageHeaderMeta{flex-wrap:wrap;align-items:stretch}.Q34gFW_pageHeaderMeta>code{align-items:center;min-height:34px;display:flex}.Q34gFW_pageHeaderMeta>button{flex:1}.Q34gFW_emptyState{text-align:center;flex-direction:column;gap:14px;min-height:190px;padding:24px 18px}.Q34gFW_emptyGlyph{width:62px;height:62px}.Q34gFW_documentDetail>header,.Q34gFW_documentDanger,.Q34gFW_supervisedHeading,.Q34gFW_cardTop{flex-direction:column;align-items:flex-start}.Q34gFW_documentDetail>header>div:last-child,.Q34gFW_documentDetail>header button{width:100%}.Q34gFW_documentDanger>div,.Q34gFW_documentDanger>span{margin-right:0}.Q34gFW_documentDanger>button{width:100%}.Q34gFW_documentDetail>dl{grid-template-columns:1fr}.Q34gFW_markdownBody{padding:16px;font-size:12.5px}.Q34gFW_cardActions,.Q34gFW_confirmBar{flex-wrap:wrap;align-items:stretch}.Q34gFW_cardActions button{flex:1}.Q34gFW_confirmBar>span{width:100%;margin:0 0 4px}.Q34gFW_formActions{flex-direction:column;align-items:stretch}.Q34gFW_formActions button{width:100%}.Q34gFW_formGrid,.Q34gFW_searchControls{grid-template-columns:1fr}}@media (width<=1000px) and (height<=760px){.Q34gFW_shell{min-height:0}.Q34gFW_masthead{min-height:58px}.Q34gFW_telemetryMetric{min-width:0;padding:1px 9px}.Q34gFW_topNavigation{min-height:44px}.Q34gFW_nav button{min-height:42px}.Q34gFW_graphViewport{min-height:300px}.Q34gFW_graphSvg{height:300px}}@media (width<=760px) and (pointer:coarse){.Q34gFW_shell input,.Q34gFW_shell select,.Q34gFW_shell textarea{font-size:16px!important}}@media (prefers-reduced-motion:reduce){.Q34gFW_shell *,.Q34gFW_shell :before,.Q34gFW_shell :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.Q34gFW_insightCard:hover{transform:none}.Q34gFW_flowConnector[data-active] i:before{display:none}}";
|
|
3266
|
+
const tagId$4 = "dsh-mnemon/MnemonView.module.css";
|
|
3267
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
|
|
2506
3268
|
const tag = document.createElement("style");
|
|
2507
3269
|
tag.dataset.plugin = "dsh-mnemon";
|
|
2508
|
-
tag.dataset.pluginCss = tagId;
|
|
2509
|
-
tag.textContent = css;
|
|
3270
|
+
tag.dataset.pluginCss = tagId$4;
|
|
3271
|
+
tag.textContent = css$4;
|
|
2510
3272
|
document.head.appendChild(tag);
|
|
2511
3273
|
}
|
|
2512
3274
|
var MnemonView_module_css_default = {
|
|
2513
|
-
"
|
|
2514
|
-
"
|
|
2515
|
-
"
|
|
2516
|
-
"
|
|
2517
|
-
"
|
|
2518
|
-
"
|
|
2519
|
-
"
|
|
2520
|
-
"
|
|
2521
|
-
"
|
|
2522
|
-
"
|
|
2523
|
-
"
|
|
2524
|
-
"
|
|
2525
|
-
"
|
|
2526
|
-
"
|
|
2527
|
-
"
|
|
2528
|
-
"
|
|
2529
|
-
"
|
|
2530
|
-
"
|
|
2531
|
-
"
|
|
2532
|
-
"
|
|
2533
|
-
"
|
|
2534
|
-
"
|
|
2535
|
-
"
|
|
2536
|
-
"
|
|
2537
|
-
"
|
|
2538
|
-
"
|
|
2539
|
-
"
|
|
2540
|
-
"
|
|
2541
|
-
"
|
|
2542
|
-
"
|
|
2543
|
-
"
|
|
2544
|
-
"
|
|
2545
|
-
"
|
|
2546
|
-
"
|
|
2547
|
-
"
|
|
2548
|
-
"
|
|
2549
|
-
"
|
|
2550
|
-
"
|
|
2551
|
-
"
|
|
2552
|
-
"
|
|
2553
|
-
"
|
|
2554
|
-
"
|
|
2555
|
-
"
|
|
2556
|
-
"
|
|
2557
|
-
"
|
|
2558
|
-
"
|
|
2559
|
-
"
|
|
2560
|
-
"
|
|
2561
|
-
"
|
|
2562
|
-
"
|
|
2563
|
-
"
|
|
2564
|
-
"
|
|
2565
|
-
"
|
|
2566
|
-
"
|
|
2567
|
-
"
|
|
2568
|
-
"
|
|
2569
|
-
"
|
|
2570
|
-
"
|
|
2571
|
-
"
|
|
2572
|
-
"
|
|
2573
|
-
"
|
|
2574
|
-
"
|
|
2575
|
-
"
|
|
2576
|
-
"
|
|
2577
|
-
"
|
|
2578
|
-
"
|
|
2579
|
-
"
|
|
2580
|
-
"
|
|
2581
|
-
"
|
|
2582
|
-
"
|
|
2583
|
-
"
|
|
2584
|
-
"
|
|
2585
|
-
"
|
|
2586
|
-
"
|
|
2587
|
-
"
|
|
2588
|
-
"
|
|
2589
|
-
"
|
|
2590
|
-
"
|
|
2591
|
-
"
|
|
2592
|
-
"
|
|
2593
|
-
"
|
|
2594
|
-
"
|
|
2595
|
-
"
|
|
2596
|
-
"
|
|
2597
|
-
"
|
|
2598
|
-
"
|
|
2599
|
-
"
|
|
2600
|
-
"
|
|
2601
|
-
"
|
|
2602
|
-
"
|
|
2603
|
-
"
|
|
2604
|
-
"
|
|
2605
|
-
"
|
|
2606
|
-
"
|
|
2607
|
-
"
|
|
2608
|
-
"
|
|
2609
|
-
"
|
|
2610
|
-
"
|
|
2611
|
-
"
|
|
2612
|
-
"
|
|
2613
|
-
"
|
|
2614
|
-
"
|
|
2615
|
-
"
|
|
2616
|
-
"
|
|
2617
|
-
"
|
|
2618
|
-
"
|
|
2619
|
-
"
|
|
2620
|
-
"
|
|
2621
|
-
"
|
|
2622
|
-
"
|
|
2623
|
-
"
|
|
2624
|
-
"
|
|
2625
|
-
"
|
|
2626
|
-
"
|
|
2627
|
-
"
|
|
2628
|
-
"
|
|
2629
|
-
"
|
|
2630
|
-
"
|
|
2631
|
-
"
|
|
2632
|
-
"
|
|
2633
|
-
"
|
|
2634
|
-
"
|
|
2635
|
-
"
|
|
2636
|
-
"
|
|
2637
|
-
"
|
|
2638
|
-
"
|
|
2639
|
-
"
|
|
2640
|
-
"
|
|
2641
|
-
"
|
|
2642
|
-
"
|
|
2643
|
-
"
|
|
2644
|
-
"
|
|
2645
|
-
"
|
|
2646
|
-
"
|
|
2647
|
-
"
|
|
2648
|
-
"
|
|
2649
|
-
"
|
|
2650
|
-
"
|
|
2651
|
-
"
|
|
2652
|
-
"
|
|
2653
|
-
"
|
|
2654
|
-
"
|
|
2655
|
-
"
|
|
2656
|
-
"
|
|
2657
|
-
"
|
|
2658
|
-
"
|
|
2659
|
-
"
|
|
2660
|
-
"
|
|
2661
|
-
"
|
|
2662
|
-
"
|
|
2663
|
-
"
|
|
2664
|
-
"
|
|
2665
|
-
"
|
|
2666
|
-
"
|
|
2667
|
-
"
|
|
2668
|
-
"
|
|
2669
|
-
"
|
|
2670
|
-
"
|
|
2671
|
-
"
|
|
2672
|
-
"
|
|
2673
|
-
"
|
|
2674
|
-
"
|
|
2675
|
-
"
|
|
2676
|
-
"
|
|
2677
|
-
"
|
|
2678
|
-
"
|
|
2679
|
-
"
|
|
2680
|
-
"
|
|
2681
|
-
"
|
|
2682
|
-
"
|
|
2683
|
-
"
|
|
2684
|
-
"
|
|
2685
|
-
"
|
|
2686
|
-
"
|
|
2687
|
-
"
|
|
2688
|
-
"
|
|
2689
|
-
"
|
|
2690
|
-
"
|
|
2691
|
-
"
|
|
2692
|
-
"
|
|
2693
|
-
"
|
|
2694
|
-
"
|
|
2695
|
-
"
|
|
2696
|
-
"
|
|
2697
|
-
"
|
|
2698
|
-
"
|
|
2699
|
-
"
|
|
2700
|
-
"
|
|
2701
|
-
"
|
|
2702
|
-
"
|
|
2703
|
-
"
|
|
2704
|
-
"
|
|
2705
|
-
"
|
|
2706
|
-
"
|
|
2707
|
-
"
|
|
2708
|
-
"
|
|
3275
|
+
"documentArchiveReceipt": "Q34gFW_documentArchiveReceipt",
|
|
3276
|
+
"listProgress": "Q34gFW_listProgress",
|
|
3277
|
+
"statusSectionHeader": "Q34gFW_statusSectionHeader",
|
|
3278
|
+
"badge": "Q34gFW_badge",
|
|
3279
|
+
"statusCluster": "Q34gFW_statusCluster",
|
|
3280
|
+
"documentDetail": "Q34gFW_documentDetail",
|
|
3281
|
+
"telemetryMetric": "Q34gFW_telemetryMetric",
|
|
3282
|
+
"previewOverlay": "Q34gFW_previewOverlay",
|
|
3283
|
+
"graphLegend": "Q34gFW_graphLegend",
|
|
3284
|
+
"agentCitations": "Q34gFW_agentCitations",
|
|
3285
|
+
"muted": "Q34gFW_muted",
|
|
3286
|
+
"entityResults": "Q34gFW_entityResults",
|
|
3287
|
+
"nav": "Q34gFW_nav",
|
|
3288
|
+
"bodyDirectoryEmpty": "Q34gFW_bodyDirectoryEmpty",
|
|
3289
|
+
"runtimeTargetHeader": "Q34gFW_runtimeTargetHeader",
|
|
3290
|
+
"writebackLayout": "Q34gFW_writebackLayout",
|
|
3291
|
+
"healthGood": "Q34gFW_healthGood",
|
|
3292
|
+
"inspectorLogo": "Q34gFW_inspectorLogo",
|
|
3293
|
+
"manualForm": "Q34gFW_manualForm",
|
|
3294
|
+
"flowTrace": "Q34gFW_flowTrace",
|
|
3295
|
+
"resultLayout": "Q34gFW_resultLayout",
|
|
3296
|
+
"lifecyclePanel": "Q34gFW_lifecyclePanel",
|
|
3297
|
+
"graphViewport": "Q34gFW_graphViewport",
|
|
3298
|
+
"previewHeading": "Q34gFW_previewHeading",
|
|
3299
|
+
"documentSummary": "Q34gFW_documentSummary",
|
|
3300
|
+
"workspaceMismatch": "Q34gFW_workspaceMismatch",
|
|
3301
|
+
"bodySignal": "Q34gFW_bodySignal",
|
|
3302
|
+
"bodyHealth": "Q34gFW_bodyHealth",
|
|
3303
|
+
"nodeCore": "Q34gFW_nodeCore",
|
|
3304
|
+
"bodyCardActions": "Q34gFW_bodyCardActions",
|
|
3305
|
+
"inspectorActions": "Q34gFW_inspectorActions",
|
|
3306
|
+
"searchControls": "Q34gFW_searchControls",
|
|
3307
|
+
"confirmBar": "Q34gFW_confirmBar",
|
|
3308
|
+
"runtimeGrid": "Q34gFW_runtimeGrid",
|
|
3309
|
+
"writeGuide": "Q34gFW_writeGuide",
|
|
3310
|
+
"runtimeComposerHeading": "Q34gFW_runtimeComposerHeading",
|
|
3311
|
+
"flowConnector": "Q34gFW_flowConnector",
|
|
3312
|
+
"dangerSolidButton": "Q34gFW_dangerSolidButton",
|
|
3313
|
+
"loadingPanel": "Q34gFW_loadingPanel",
|
|
3314
|
+
"alert": "Q34gFW_alert",
|
|
3315
|
+
"supervisedComposer": "Q34gFW_supervisedComposer",
|
|
3316
|
+
"graphPanel": "Q34gFW_graphPanel",
|
|
3317
|
+
"sessionReady": "Q34gFW_sessionReady",
|
|
3318
|
+
"runtimeBadge": "Q34gFW_runtimeBadge",
|
|
3319
|
+
"entityLayout": "Q34gFW_entityLayout",
|
|
3320
|
+
"inspectorEmpty": "Q34gFW_inspectorEmpty",
|
|
3321
|
+
"bodyEdit": "Q34gFW_bodyEdit",
|
|
3322
|
+
"navGroup": "Q34gFW_navGroup",
|
|
3323
|
+
"badges": "Q34gFW_badges",
|
|
3324
|
+
"spaceSummary": "Q34gFW_spaceSummary",
|
|
3325
|
+
"headerActions": "Q34gFW_headerActions",
|
|
3326
|
+
"storageAreaGrid": "Q34gFW_storageAreaGrid",
|
|
3327
|
+
"entities": "Q34gFW_entities",
|
|
3328
|
+
"bodySwitchTrack": "Q34gFW_bodySwitchTrack",
|
|
3329
|
+
"dangerButton": "Q34gFW_dangerButton",
|
|
3330
|
+
"shell": "Q34gFW_shell",
|
|
3331
|
+
"cardKicker": "Q34gFW_cardKicker",
|
|
3332
|
+
"inspectorTitle": "Q34gFW_inspectorTitle",
|
|
3333
|
+
"documentReader": "Q34gFW_documentReader",
|
|
3334
|
+
"iconButton": "Q34gFW_iconButton",
|
|
3335
|
+
"telemetry": "Q34gFW_telemetry",
|
|
3336
|
+
"offline": "Q34gFW_offline",
|
|
3337
|
+
"manualActions": "Q34gFW_manualActions",
|
|
3338
|
+
"runtimePending": "Q34gFW_runtimePending",
|
|
3339
|
+
"bodyDirectoryHeader": "Q34gFW_bodyDirectoryHeader",
|
|
3340
|
+
"phaseBadge": "Q34gFW_phaseBadge",
|
|
3341
|
+
"inlineError": "Q34gFW_inlineError",
|
|
3342
|
+
"bodyCardTop": "Q34gFW_bodyCardTop",
|
|
3343
|
+
"checking": "Q34gFW_checking",
|
|
3344
|
+
"graphGridLine": "Q34gFW_graphGridLine",
|
|
3345
|
+
"emptyState": "Q34gFW_emptyState",
|
|
3346
|
+
"nodeBodyLabel": "Q34gFW_nodeBodyLabel",
|
|
3347
|
+
"canvas": "Q34gFW_canvas",
|
|
3348
|
+
"sectionHeading": "Q34gFW_sectionHeading",
|
|
3349
|
+
"formGrid": "Q34gFW_formGrid",
|
|
3350
|
+
"cardActions": "Q34gFW_cardActions",
|
|
3351
|
+
"runtimeEntry": "Q34gFW_runtimeEntry",
|
|
3352
|
+
"runtimeTargetDescription": "Q34gFW_runtimeTargetDescription",
|
|
3353
|
+
"documentSources": "Q34gFW_documentSources",
|
|
3354
|
+
"graphSvg": "Q34gFW_graphSvg",
|
|
3355
|
+
"runtimeNotice": "Q34gFW_runtimeNotice",
|
|
3356
|
+
"advancedWrite": "Q34gFW_advancedWrite",
|
|
3357
|
+
"flowSecondaryTrack": "Q34gFW_flowSecondaryTrack",
|
|
3358
|
+
"supervisedForm": "Q34gFW_supervisedForm",
|
|
3359
|
+
"runtimeEntries": "Q34gFW_runtimeEntries",
|
|
3360
|
+
"storageUnavailable": "Q34gFW_storageUnavailable",
|
|
3361
|
+
"searchBar": "Q34gFW_searchBar",
|
|
3362
|
+
"sessionMissing": "Q34gFW_sessionMissing",
|
|
3363
|
+
"lifecycleFoot": "Q34gFW_lifecycleFoot",
|
|
3364
|
+
"cardTop": "Q34gFW_cardTop",
|
|
3365
|
+
"tags": "Q34gFW_tags",
|
|
3366
|
+
"runtimeEmpty": "Q34gFW_runtimeEmpty",
|
|
3367
|
+
"storageFootnote": "Q34gFW_storageFootnote",
|
|
3368
|
+
"flowArchiveTrack": "Q34gFW_flowArchiveTrack",
|
|
3369
|
+
"graphLayout": "Q34gFW_graphLayout",
|
|
3370
|
+
"memoryList": "Q34gFW_memoryList",
|
|
3371
|
+
"online": "Q34gFW_online",
|
|
3372
|
+
"inspectorHeading": "Q34gFW_inspectorHeading",
|
|
3373
|
+
"queryField": "Q34gFW_queryField",
|
|
3374
|
+
"healthIndicator": "Q34gFW_healthIndicator",
|
|
3375
|
+
"inspectorTitleRow": "Q34gFW_inspectorTitleRow",
|
|
3376
|
+
"liveDot": "Q34gFW_liveDot",
|
|
3377
|
+
"bodyDirectory": "Q34gFW_bodyDirectory",
|
|
3378
|
+
"markdownBody": "Q34gFW_markdownBody",
|
|
3379
|
+
"sessionHint": "Q34gFW_sessionHint",
|
|
3380
|
+
"memoryFlow": "Q34gFW_memoryFlow",
|
|
3381
|
+
"flowArchitecture": "Q34gFW_flowArchitecture",
|
|
3382
|
+
"entitySearch": "Q34gFW_entitySearch",
|
|
3383
|
+
"storagePath": "Q34gFW_storagePath",
|
|
3384
|
+
"runtimeFootnote": "Q34gFW_runtimeFootnote",
|
|
3385
|
+
"runtimeComposerActions": "Q34gFW_runtimeComposerActions",
|
|
3386
|
+
"storageAreaMetric": "Q34gFW_storageAreaMetric",
|
|
3387
|
+
"graphToolbar": "Q34gFW_graphToolbar",
|
|
3388
|
+
"bodyEditActions": "Q34gFW_bodyEditActions",
|
|
3389
|
+
"flowLegend": "Q34gFW_flowLegend",
|
|
3390
|
+
"topNavigation": "Q34gFW_topNavigation",
|
|
3391
|
+
"agentAnswerHeading": "Q34gFW_agentAnswerHeading",
|
|
3392
|
+
"insightCard": "Q34gFW_insightCard",
|
|
3393
|
+
"entityHeading": "Q34gFW_entityHeading",
|
|
3394
|
+
"searchActions": "Q34gFW_searchActions",
|
|
3395
|
+
"documentToolbar": "Q34gFW_documentToolbar",
|
|
3396
|
+
"workspace": "Q34gFW_workspace",
|
|
3397
|
+
"primaryButton": "Q34gFW_primaryButton",
|
|
3398
|
+
"entityRail": "Q34gFW_entityRail",
|
|
3399
|
+
"healthStrip": "Q34gFW_healthStrip",
|
|
3400
|
+
"navGlyph": "Q34gFW_navGlyph",
|
|
3401
|
+
"bodyCreate": "Q34gFW_bodyCreate",
|
|
3402
|
+
"previewMeta": "Q34gFW_previewMeta",
|
|
3403
|
+
"documentDanger": "Q34gFW_documentDanger",
|
|
3404
|
+
"lifecycleFlow": "Q34gFW_lifecycleFlow",
|
|
3405
|
+
"singleColumn": "Q34gFW_singleColumn",
|
|
3406
|
+
"bodyCard": "Q34gFW_bodyCard",
|
|
3407
|
+
"inspectorEye": "Q34gFW_inspectorEye",
|
|
3408
|
+
"ghostButton": "Q34gFW_ghostButton",
|
|
3409
|
+
"runtimeEntryMeta": "Q34gFW_runtimeEntryMeta",
|
|
3410
|
+
"documentListEmpty": "Q34gFW_documentListEmpty",
|
|
3411
|
+
"relatedPane": "Q34gFW_relatedPane",
|
|
3412
|
+
"brand": "Q34gFW_brand",
|
|
3413
|
+
"id": "Q34gFW_id",
|
|
3414
|
+
"healthMuted": "Q34gFW_healthMuted",
|
|
3415
|
+
"emptyGlyph": "Q34gFW_emptyGlyph",
|
|
3416
|
+
"relatedSource": "Q34gFW_relatedSource",
|
|
3417
|
+
"content": "Q34gFW_content",
|
|
3418
|
+
"capacityLine": "Q34gFW_capacityLine",
|
|
3419
|
+
"graphEdge": "Q34gFW_graphEdge",
|
|
3420
|
+
"formActions": "Q34gFW_formActions",
|
|
3421
|
+
"flowReviewTrack": "Q34gFW_flowReviewTrack",
|
|
3422
|
+
"runtimeComposer": "Q34gFW_runtimeComposer",
|
|
3423
|
+
"flowArchitectureSignal": "Q34gFW_flowArchitectureSignal",
|
|
3424
|
+
"storageDomains": "Q34gFW_storageDomains",
|
|
3425
|
+
"documentEditorMeta": "Q34gFW_documentEditorMeta",
|
|
3426
|
+
"entityList": "Q34gFW_entityList",
|
|
3427
|
+
"graphCanvasControls": "Q34gFW_graphCanvasControls",
|
|
3428
|
+
"storageRoot": "Q34gFW_storageRoot",
|
|
3429
|
+
"pageHeaderMeta": "Q34gFW_pageHeaderMeta",
|
|
3430
|
+
"secondaryButton": "Q34gFW_secondaryButton",
|
|
3431
|
+
"listNotice": "Q34gFW_listNotice",
|
|
3432
|
+
"runtimeOnline": "Q34gFW_runtimeOnline",
|
|
3433
|
+
"previewBody": "Q34gFW_previewBody",
|
|
3434
|
+
"bodyEditButton": "Q34gFW_bodyEditButton",
|
|
3435
|
+
"bodySwitch": "Q34gFW_bodySwitch",
|
|
3436
|
+
"fieldWide": "Q34gFW_fieldWide",
|
|
3437
|
+
"documentWorkspace": "Q34gFW_documentWorkspace",
|
|
3438
|
+
"flowTrack": "Q34gFW_flowTrack",
|
|
3439
|
+
"inspectorMeta": "Q34gFW_inspectorMeta",
|
|
3440
|
+
"navGroupDivider": "Q34gFW_navGroupDivider",
|
|
3441
|
+
"bodyDirectoryPath": "Q34gFW_bodyDirectoryPath",
|
|
3442
|
+
"pageHeader": "Q34gFW_pageHeader",
|
|
3443
|
+
"nodeHalo": "Q34gFW_nodeHalo",
|
|
3444
|
+
"runtimeTarget": "Q34gFW_runtimeTarget",
|
|
3445
|
+
"runtimeReadOnly": "Q34gFW_runtimeReadOnly",
|
|
3446
|
+
"mnemon-flow": "Q34gFW_mnemon-flow",
|
|
3447
|
+
"memoryFlowCanvas": "Q34gFW_memoryFlowCanvas",
|
|
3448
|
+
"workspacePicker": "Q34gFW_workspacePicker",
|
|
3449
|
+
"page": "Q34gFW_page",
|
|
3450
|
+
"flowLane": "Q34gFW_flowLane",
|
|
3451
|
+
"runtimeOffline": "Q34gFW_runtimeOffline",
|
|
3452
|
+
"supervisedHeading": "Q34gFW_supervisedHeading",
|
|
3453
|
+
"listToolbar": "Q34gFW_listToolbar",
|
|
3454
|
+
"flowArchitectureNode": "Q34gFW_flowArchitectureNode",
|
|
3455
|
+
"graphInspector": "Q34gFW_graphInspector",
|
|
3456
|
+
"graphBackdrop": "Q34gFW_graphBackdrop",
|
|
3457
|
+
"statusDot": "Q34gFW_statusDot",
|
|
3458
|
+
"masthead": "Q34gFW_masthead",
|
|
3459
|
+
"documentList": "Q34gFW_documentList",
|
|
3460
|
+
"brandLogo": "Q34gFW_brandLogo",
|
|
3461
|
+
"nodeLabel": "Q34gFW_nodeLabel",
|
|
3462
|
+
"categoryChip": "Q34gFW_categoryChip",
|
|
3463
|
+
"healthBad": "Q34gFW_healthBad",
|
|
3464
|
+
"loading": "Q34gFW_loading",
|
|
3465
|
+
"flowTraceVertical": "Q34gFW_flowTraceVertical",
|
|
3466
|
+
"results": "Q34gFW_results",
|
|
3467
|
+
"agentAnswer": "Q34gFW_agentAnswer",
|
|
3468
|
+
"documentCapacity": "Q34gFW_documentCapacity",
|
|
3469
|
+
"previewDialog": "Q34gFW_previewDialog",
|
|
3470
|
+
"bodyGrid": "Q34gFW_bodyGrid",
|
|
3471
|
+
"graphNode": "Q34gFW_graphNode",
|
|
3472
|
+
"graphFooter": "Q34gFW_graphFooter",
|
|
3473
|
+
"documentEditor": "Q34gFW_documentEditor"
|
|
2709
3474
|
};
|
|
2710
3475
|
//#endregion
|
|
2711
3476
|
//#region src/client/MnemonView.tsx
|
|
@@ -5950,20 +6715,19 @@ window.__ModuleLoader__.load({
|
|
|
5950
6715
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonWorkspace, { ...props })
|
|
5951
6716
|
});
|
|
5952
6717
|
}
|
|
5953
|
-
function MnemonWorkspace({ connection, sessionId }) {
|
|
6718
|
+
function MnemonWorkspace({ connection, sessionId, workspaceId, workspaceSelection }) {
|
|
5954
6719
|
const t = useT();
|
|
5955
|
-
const client = (0, react.useMemo)(() => new MnemonClient(connection, sessionId), [
|
|
6720
|
+
const client = (0, react.useMemo)(() => new MnemonClient(connection, sessionId, workspaceId), [
|
|
6721
|
+
connection,
|
|
6722
|
+
sessionId,
|
|
6723
|
+
workspaceId
|
|
6724
|
+
]);
|
|
5956
6725
|
const [page, setPage] = (0, react.useState)("status");
|
|
5957
6726
|
const canvasRef = (0, react.useRef)(null);
|
|
5958
|
-
/** Pages share one scroll container;
|
|
6727
|
+
/** Pages share one plugin-owned scroll container; never mutate DSH ancestor scrollports. */
|
|
5959
6728
|
const resetViewportScroll = (0, react.useCallback)(() => {
|
|
5960
6729
|
const canvas = canvasRef.current;
|
|
5961
6730
|
if (canvas !== null) canvas.scrollTop = 0;
|
|
5962
|
-
let node = canvas?.parentElement ?? null;
|
|
5963
|
-
while (node !== null && node !== document.body && node !== document.documentElement) {
|
|
5964
|
-
if (node.scrollTop > 0) node.scrollTop = 0;
|
|
5965
|
-
node = node.parentElement;
|
|
5966
|
-
}
|
|
5967
6731
|
}, []);
|
|
5968
6732
|
(0, react.useEffect)(() => {
|
|
5969
6733
|
resetViewportScroll();
|
|
@@ -5975,18 +6739,34 @@ window.__ModuleLoader__.load({
|
|
|
5975
6739
|
const [status, setStatus] = (0, react.useState)(null);
|
|
5976
6740
|
const [statusLoading, setStatusLoading] = (0, react.useState)(true);
|
|
5977
6741
|
const [statusError, setStatusError] = (0, react.useState)(null);
|
|
6742
|
+
const statusRequest = (0, react.useRef)(0);
|
|
5978
6743
|
const [revision, setRevision] = (0, react.useState)(0);
|
|
5979
6744
|
const [searchSeed, setSearchSeed] = (0, react.useState)("");
|
|
5980
6745
|
const [rememberSeed, setRememberSeed] = (0, react.useState)("");
|
|
6746
|
+
/** Conversation surfaces ask this view to open a page (optionally with a seed). */
|
|
6747
|
+
const applyAnchor = (0, react.useCallback)((anchor) => {
|
|
6748
|
+
if (anchor.seed !== void 0 && anchor.seed !== "") {
|
|
6749
|
+
if (anchor.page === "explore") setSearchSeed(anchor.seed);
|
|
6750
|
+
if (anchor.page === "remember") setRememberSeed(anchor.seed);
|
|
6751
|
+
}
|
|
6752
|
+
setPage(anchor.page);
|
|
6753
|
+
}, []);
|
|
6754
|
+
(0, react.useEffect)(() => {
|
|
6755
|
+
const held = consumeMnemonAnchor(sessionId);
|
|
6756
|
+
if (held !== null) applyAnchor(held);
|
|
6757
|
+
return subscribeMnemonAnchor(sessionId, applyAnchor);
|
|
6758
|
+
}, [sessionId, applyAnchor]);
|
|
5981
6759
|
const loadStatus = (0, react.useCallback)(async () => {
|
|
6760
|
+
const request = ++statusRequest.current;
|
|
5982
6761
|
setStatusLoading(true);
|
|
5983
6762
|
setStatusError(null);
|
|
5984
6763
|
try {
|
|
5985
|
-
|
|
6764
|
+
const next = await client.status();
|
|
6765
|
+
if (request === statusRequest.current) setStatus(next);
|
|
5986
6766
|
} catch (reason) {
|
|
5987
|
-
setStatusError(message(reason));
|
|
6767
|
+
if (request === statusRequest.current) setStatusError(message(reason));
|
|
5988
6768
|
} finally {
|
|
5989
|
-
setStatusLoading(false);
|
|
6769
|
+
if (request === statusRequest.current) setStatusLoading(false);
|
|
5990
6770
|
}
|
|
5991
6771
|
}, [client]);
|
|
5992
6772
|
(0, react.useEffect)(() => {
|
|
@@ -6017,6 +6797,8 @@ window.__ModuleLoader__.load({
|
|
|
6017
6797
|
const catalogKnown = status?.memoryBodies !== void 0;
|
|
6018
6798
|
const memoryBodies = (0, react.useMemo)(() => status?.memoryBodies ?? [], [status]);
|
|
6019
6799
|
const activeBodies = memoryBodies.filter((body) => body.active).length;
|
|
6800
|
+
const workspaceContext = status?.workspaceContext;
|
|
6801
|
+
const showWorkspacePicker = workspaceContext?.mode === "workspace" && workspaceSelection !== void 0 && workspaceSelection.options.length > 0;
|
|
6020
6802
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("main", {
|
|
6021
6803
|
className: MnemonView_module_css_default.shell,
|
|
6022
6804
|
children: [
|
|
@@ -6050,19 +6832,33 @@ window.__ModuleLoader__.load({
|
|
|
6050
6832
|
]
|
|
6051
6833
|
}),
|
|
6052
6834
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6053
|
-
className: MnemonView_module_css_default.
|
|
6054
|
-
children: [
|
|
6055
|
-
|
|
6056
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children:
|
|
6057
|
-
|
|
6058
|
-
|
|
6059
|
-
|
|
6060
|
-
|
|
6061
|
-
|
|
6062
|
-
|
|
6063
|
-
|
|
6064
|
-
})
|
|
6065
|
-
|
|
6835
|
+
className: MnemonView_module_css_default.headerActions,
|
|
6836
|
+
children: [showWorkspacePicker && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
6837
|
+
className: MnemonView_module_css_default.workspacePicker,
|
|
6838
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("workspace.viewing") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
|
|
6839
|
+
"aria-label": t("workspace.selectorAria"),
|
|
6840
|
+
value: workspaceSelection.selectedWorkspaceId ?? "",
|
|
6841
|
+
onChange: (event) => workspaceSelection.onSelect(event.target.value),
|
|
6842
|
+
children: workspaceSelection.options.map((workspace) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
6843
|
+
value: workspace.id,
|
|
6844
|
+
children: workspace.title
|
|
6845
|
+
}, workspace.id))
|
|
6846
|
+
})]
|
|
6847
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6848
|
+
className: MnemonView_module_css_default.statusCluster,
|
|
6849
|
+
children: [
|
|
6850
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: `${MnemonView_module_css_default.statusDot} ${statusLoading && status === null ? MnemonView_module_css_default.checking : status?.healthy === true ? MnemonView_module_css_default.online : MnemonView_module_css_default.offline}` }),
|
|
6851
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: statusLoading ? t("header.checking") : status?.healthy === true ? catalogKnown ? t("header.connected", { count: activeBodies }) : t("header.directoryPending") : t("header.unavailable") }),
|
|
6852
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
6853
|
+
type: "button",
|
|
6854
|
+
className: MnemonView_module_css_default.iconButton,
|
|
6855
|
+
disabled: statusLoading,
|
|
6856
|
+
onClick: refreshAll,
|
|
6857
|
+
"aria-label": t("common.refresh"),
|
|
6858
|
+
children: "↻"
|
|
6859
|
+
})
|
|
6860
|
+
]
|
|
6861
|
+
})]
|
|
6066
6862
|
})
|
|
6067
6863
|
]
|
|
6068
6864
|
}),
|
|
@@ -6071,6 +6867,20 @@ window.__ModuleLoader__.load({
|
|
|
6071
6867
|
role: "alert",
|
|
6072
6868
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("header.notReady") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: statusError ?? status?.error })]
|
|
6073
6869
|
}),
|
|
6870
|
+
workspaceContext?.mode === "workspace" && !workspaceContext.aligned && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6871
|
+
className: MnemonView_module_css_default.workspaceMismatch,
|
|
6872
|
+
role: "status",
|
|
6873
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
|
|
6874
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("workspace.mismatchTitle") }),
|
|
6875
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("workspace.mismatchDescription") }),
|
|
6876
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: t("workspace.selectedRoot", { root: workspaceContext.selectedRoot }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: t("workspace.effectiveRoot", { root: workspaceContext.effectiveRoot }) })] })
|
|
6877
|
+
] }), workspaceSelection?.effectiveWorkspaceId !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
6878
|
+
type: "button",
|
|
6879
|
+
className: MnemonView_module_css_default.secondaryButton,
|
|
6880
|
+
onClick: workspaceSelection.onAlign,
|
|
6881
|
+
children: t("workspace.align")
|
|
6882
|
+
})]
|
|
6883
|
+
}),
|
|
6074
6884
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6075
6885
|
className: MnemonView_module_css_default.workspace,
|
|
6076
6886
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -6174,12 +6984,679 @@ window.__ModuleLoader__.load({
|
|
|
6174
6984
|
});
|
|
6175
6985
|
}
|
|
6176
6986
|
//#endregion
|
|
6177
|
-
//#region src/
|
|
6178
|
-
const
|
|
6987
|
+
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonToolviews.module.css.mjs
|
|
6988
|
+
const css$3 = ".KnejfW_root{min-width:0;color:var(--dsw-alias-label-primary);flex-direction:column;display:flex}.KnejfW_row{cursor:pointer;border-radius:6px;align-items:center;gap:6px;height:24px;display:flex;position:relative}.KnejfW_row:hover{background:var(--dsw-alias-interactive-bg-hover)}.KnejfW_row:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.KnejfW_dot{border-radius:50%;flex:none;width:6px;height:6px}.KnejfW_dotRunning{background:var(--dsw-alias-state-info-primary,#4f7cff);animation:1.4s ease-in-out infinite KnejfW_mnemonToolPulse}.KnejfW_dotOk{background:var(--dsw-alias-state-success-primary)}.KnejfW_dotError{background:var(--dsw-alias-state-error-primary)}.KnejfW_dotStopped{background:var(--dsw-alias-state-warn-primary)}@keyframes KnejfW_mnemonToolPulse{0%,to{opacity:1}50%{opacity:.35}}@media (prefers-reduced-motion:reduce){.KnejfW_dotRunning{animation:none}}.KnejfW_leading{opacity:.85;border-radius:3px;flex:none;width:14px;height:14px}.KnejfW_title{flex:none;font-size:12px;font-weight:500;line-height:16px}.KnejfW_summary{white-space:nowrap;text-overflow:ellipsis;min-width:0;color:var(--dsw-alias-label-secondary);flex:auto;font-size:12px;line-height:16px;overflow:hidden}.KnejfW_actions{opacity:0;flex:none;align-items:center;gap:4px;transition:opacity .12s;display:inline-flex}.KnejfW_row:hover .KnejfW_actions,.KnejfW_row:focus-visible .KnejfW_actions,.KnejfW_root[data-open] .KnejfW_actions{opacity:1}.KnejfW_actionButton{cursor:pointer;height:20px;color:var(--dsw-alias-label-secondary);background:0 0;border:none;border-radius:5px;padding:0 8px;font-size:11px;line-height:20px}.KnejfW_actionButton:hover{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary)}.KnejfW_chevron{opacity:.7;flex:none;width:12px;height:12px;transition:transform .12s}.KnejfW_chevron:before{content:\"\";border-bottom:1.5px solid;border-right:1.5px solid;width:6px;height:6px;transition:transform .12s;display:block;transform:translate(2px,1px)rotate(45deg)}.KnejfW_chevronOpen:before{transform:translate(2px,4px)rotate(-135deg)}.KnejfW_details{border-left:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);cursor:default;border-radius:0 8px 8px 0;flex-direction:column;gap:6px;min-width:0;margin:2px 0 4px 26px;padding:8px 10px;display:flex}.KnejfW_detailSection{min-width:0}.KnejfW_detailLabel{color:var(--dsw-alias-label-caption);letter-spacing:.08em;text-transform:uppercase;margin-bottom:2px;font-size:10px;font-weight:650;display:block}.KnejfW_detailCode{white-space:pre-wrap;word-break:break-word;max-height:220px;color:var(--dsw-alias-label-secondary);font-family:var(--ds-font-family-code,Consolas, monospace);margin:0;font-size:11px;line-height:16px;overflow:auto}.KnejfW_detailEmpty{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:16px}";
|
|
6989
|
+
const tagId$3 = "dsh-mnemon/MnemonToolviews.module.css";
|
|
6990
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
|
|
6991
|
+
const tag = document.createElement("style");
|
|
6992
|
+
tag.dataset.plugin = "dsh-mnemon";
|
|
6993
|
+
tag.dataset.pluginCss = tagId$3;
|
|
6994
|
+
tag.textContent = css$3;
|
|
6995
|
+
document.head.appendChild(tag);
|
|
6996
|
+
}
|
|
6997
|
+
var MnemonToolviews_module_css_default = {
|
|
6998
|
+
"root": "KnejfW_root",
|
|
6999
|
+
"dot": "KnejfW_dot",
|
|
7000
|
+
"dotRunning": "KnejfW_dotRunning",
|
|
7001
|
+
"detailSection": "KnejfW_detailSection",
|
|
7002
|
+
"details": "KnejfW_details",
|
|
7003
|
+
"mnemonToolPulse": "KnejfW_mnemonToolPulse",
|
|
7004
|
+
"chevronOpen": "KnejfW_chevronOpen",
|
|
7005
|
+
"leading": "KnejfW_leading",
|
|
7006
|
+
"actions": "KnejfW_actions",
|
|
7007
|
+
"actionButton": "KnejfW_actionButton",
|
|
7008
|
+
"dotOk": "KnejfW_dotOk",
|
|
7009
|
+
"title": "KnejfW_title",
|
|
7010
|
+
"row": "KnejfW_row",
|
|
7011
|
+
"detailEmpty": "KnejfW_detailEmpty",
|
|
7012
|
+
"dotError": "KnejfW_dotError",
|
|
7013
|
+
"detailCode": "KnejfW_detailCode",
|
|
7014
|
+
"dotStopped": "KnejfW_dotStopped",
|
|
7015
|
+
"chevron": "KnejfW_chevron",
|
|
7016
|
+
"summary": "KnejfW_summary",
|
|
7017
|
+
"detailLabel": "KnejfW_detailLabel"
|
|
7018
|
+
};
|
|
7019
|
+
//#endregion
|
|
7020
|
+
//#region src/client/MnemonToolviews.tsx
|
|
7021
|
+
const READ_TOOLS = /* @__PURE__ */ new Set([
|
|
7022
|
+
"mnemon_recall",
|
|
7023
|
+
"mnemon_related",
|
|
7024
|
+
"mnemon_document_search",
|
|
7025
|
+
"mnemon_status",
|
|
7026
|
+
"mnemon_memory_bodies"
|
|
7027
|
+
]);
|
|
7028
|
+
/** Anchor destination per tool: where "open in Memory view" should land. */
|
|
7029
|
+
const ANCHOR_TARGETS = {
|
|
7030
|
+
mnemon_recall: {
|
|
7031
|
+
page: "explore",
|
|
7032
|
+
seed: (args) => typeof args.query === "string" && args.query.trim() !== "" ? args.query.trim() : void 0
|
|
7033
|
+
},
|
|
7034
|
+
mnemon_related: {
|
|
7035
|
+
page: "explore",
|
|
7036
|
+
seed: (args) => typeof args.id === "string" && args.id.trim() !== "" ? args.id.trim() : void 0
|
|
7037
|
+
},
|
|
7038
|
+
mnemon_document_search: { page: "documents" },
|
|
7039
|
+
mnemon_status: { page: "status" },
|
|
7040
|
+
mnemon_memory_bodies: { page: "overview" },
|
|
7041
|
+
mnemon_runtime_memory: { page: "runtime" },
|
|
7042
|
+
mnemon_document_manage: { page: "documents" },
|
|
7043
|
+
mnemon_remember: { page: "overview" },
|
|
7044
|
+
mnemon_forget: { page: "overview" },
|
|
7045
|
+
mnemon_link: { page: "overview" },
|
|
7046
|
+
mnemon_memory_body_create: { page: "overview" },
|
|
7047
|
+
mnemon_memory_body_update: { page: "overview" },
|
|
7048
|
+
mnemon_memory_body_merge: { page: "overview" }
|
|
7049
|
+
};
|
|
7050
|
+
function isSettled(block) {
|
|
7051
|
+
return typeof block === "object" && block !== null && "kind" in block;
|
|
7052
|
+
}
|
|
7053
|
+
/** Parse the call's raw arguments JSON; always returns a plain object. */
|
|
7054
|
+
function argsOf(block) {
|
|
7055
|
+
const record = block;
|
|
7056
|
+
const raw = typeof record?.call?.argsRaw === "string" ? record.call.argsRaw : typeof record?.argsRaw === "string" ? record.argsRaw : "";
|
|
7057
|
+
if (raw === "") return {};
|
|
7058
|
+
try {
|
|
7059
|
+
const parsed = JSON.parse(raw);
|
|
7060
|
+
return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed) ? parsed : {};
|
|
7061
|
+
} catch {
|
|
7062
|
+
return {};
|
|
7063
|
+
}
|
|
7064
|
+
}
|
|
7065
|
+
/** Joined text blocks of a settled result; empty while running. */
|
|
7066
|
+
function resultText(block) {
|
|
7067
|
+
if (!isSettled(block)) return "";
|
|
7068
|
+
const content = block.content;
|
|
7069
|
+
if (!Array.isArray(content)) return "";
|
|
7070
|
+
return content.filter((item) => typeof item === "object" && item !== null && item.type === "text" && typeof item.text === "string").map((item) => String(item.text)).join("");
|
|
7071
|
+
}
|
|
7072
|
+
/** Parsed result JSON when the output is one object; otherwise null. */
|
|
7073
|
+
function outputJson(block) {
|
|
7074
|
+
const text = resultText(block);
|
|
7075
|
+
if (text === "") return null;
|
|
7076
|
+
try {
|
|
7077
|
+
const parsed = JSON.parse(text);
|
|
7078
|
+
return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed) ? parsed : null;
|
|
7079
|
+
} catch {
|
|
7080
|
+
return null;
|
|
7081
|
+
}
|
|
7082
|
+
}
|
|
7083
|
+
function truncateInline(value, max) {
|
|
7084
|
+
const normalized = value.replace(/\s+/g, " ").trim();
|
|
7085
|
+
return normalized.length <= max ? normalized : `${normalized.slice(0, max)}…`;
|
|
7086
|
+
}
|
|
7087
|
+
function truncateBlock(value, max) {
|
|
7088
|
+
const normalized = value.trim();
|
|
7089
|
+
return normalized.length <= max ? normalized : `${normalized.slice(0, max)}\n…`;
|
|
7090
|
+
}
|
|
7091
|
+
function countOf(value) {
|
|
7092
|
+
return Array.isArray(value) ? value.length : void 0;
|
|
7093
|
+
}
|
|
7094
|
+
/** Tool-specific one-line summary from the call args and the settled output. */
|
|
7095
|
+
function summaryFor(toolName, args, out, t) {
|
|
7096
|
+
switch (toolName) {
|
|
7097
|
+
case "mnemon_recall": {
|
|
7098
|
+
const query = typeof args.query === "string" ? truncateInline(args.query, 56) : "";
|
|
7099
|
+
const hits = out === null ? void 0 : countOf(out.results);
|
|
7100
|
+
return hits === void 0 ? query : t("toolview.recallSummary", {
|
|
7101
|
+
query,
|
|
7102
|
+
count: hits
|
|
7103
|
+
});
|
|
7104
|
+
}
|
|
7105
|
+
case "mnemon_related": {
|
|
7106
|
+
const id = typeof args.id === "string" ? args.id : "";
|
|
7107
|
+
const hits = out === null ? void 0 : countOf(out.results);
|
|
7108
|
+
return hits === void 0 ? truncateInline(id, 56) : t("toolview.relatedSummary", {
|
|
7109
|
+
id: truncateInline(id, 28),
|
|
7110
|
+
count: hits
|
|
7111
|
+
});
|
|
7112
|
+
}
|
|
7113
|
+
case "mnemon_document_search": {
|
|
7114
|
+
const query = typeof args.query === "string" ? truncateInline(args.query, 56) : "";
|
|
7115
|
+
const hits = out === null ? void 0 : countOf(out.results);
|
|
7116
|
+
return hits === void 0 ? query : t("toolview.documentSearchSummary", {
|
|
7117
|
+
query,
|
|
7118
|
+
count: hits
|
|
7119
|
+
});
|
|
7120
|
+
}
|
|
7121
|
+
case "mnemon_status": return out === null ? t("toolview.running") : out.healthy === true ? t("toolview.statusHealthy") : t("toolview.statusUnhealthy");
|
|
7122
|
+
case "mnemon_memory_bodies": return out === null ? t("toolview.running") : t("toolview.bodiesSummary", {
|
|
7123
|
+
count: out.total ?? 0,
|
|
7124
|
+
active: out.activeCount ?? 0
|
|
7125
|
+
});
|
|
7126
|
+
case "mnemon_remember": return typeof args.content === "string" ? truncateInline(args.content, 56) : t("toolview.genericSummary");
|
|
7127
|
+
case "mnemon_runtime_memory": {
|
|
7128
|
+
const action = typeof args.action === "string" ? args.action : "";
|
|
7129
|
+
const target = typeof args.target === "string" ? args.target : "";
|
|
7130
|
+
const content = typeof args.content === "string" ? truncateInline(args.content, 40) : "";
|
|
7131
|
+
return content === "" ? t("toolview.runtimeSummary", {
|
|
7132
|
+
action,
|
|
7133
|
+
target
|
|
7134
|
+
}) : t("toolview.runtimeSummaryWithContent", {
|
|
7135
|
+
action,
|
|
7136
|
+
target,
|
|
7137
|
+
content
|
|
7138
|
+
});
|
|
7139
|
+
}
|
|
7140
|
+
case "mnemon_document_manage": {
|
|
7141
|
+
const action = typeof args.action === "string" ? args.action : "";
|
|
7142
|
+
const title = typeof args.title === "string" ? truncateInline(args.title, 40) : "";
|
|
7143
|
+
return title === "" ? t("toolview.documentManageSummary", { action }) : t("toolview.documentManageSummaryWithTitle", {
|
|
7144
|
+
action,
|
|
7145
|
+
title
|
|
7146
|
+
});
|
|
7147
|
+
}
|
|
7148
|
+
case "mnemon_link": return `${typeof args.sourceId === "string" ? truncateInline(args.sourceId, 18) : "?"} → ${typeof args.targetId === "string" ? truncateInline(args.targetId, 18) : "?"}`;
|
|
7149
|
+
case "mnemon_forget": return typeof args.id === "string" ? truncateInline(args.id, 56) : t("toolview.genericSummary");
|
|
7150
|
+
case "mnemon_memory_body_create": return typeof args.name === "string" ? truncateInline(args.name, 56) : t("toolview.genericSummary");
|
|
7151
|
+
case "mnemon_memory_body_update": {
|
|
7152
|
+
const id = typeof args.memoryBodyId === "string" ? truncateInline(args.memoryBodyId, 32) : "";
|
|
7153
|
+
return id === "" ? t("toolview.genericSummary") : t("toolview.bodyUpdateSummary", { id });
|
|
7154
|
+
}
|
|
7155
|
+
case "mnemon_memory_body_merge": return t("toolview.bodyMergeSummary", {
|
|
7156
|
+
target: typeof args.targetMemoryBodyId === "string" ? truncateInline(args.targetMemoryBodyId, 24) : "?",
|
|
7157
|
+
count: countOf(args.sourceMemoryBodyIds) ?? 0
|
|
7158
|
+
});
|
|
7159
|
+
default: return t("toolview.genericSummary");
|
|
7160
|
+
}
|
|
7161
|
+
}
|
|
7162
|
+
/** Render one mnemon_* tool call as a memory-flavoured row with expandable evidence. */
|
|
7163
|
+
const MnemonToolView = (0, react.memo)(function MnemonToolView({ toolName, block, inspect, sessionId, t }) {
|
|
7164
|
+
const [open, setOpen] = (0, react.useState)(false);
|
|
7165
|
+
const settled = isSettled(block);
|
|
7166
|
+
const record = block;
|
|
7167
|
+
const state = !settled ? "running" : record?.error?.code === "interrupted" ? "stopped" : record?.isError === true ? "error" : "ok";
|
|
7168
|
+
const args = (0, react.useMemo)(() => argsOf(block), [block]);
|
|
7169
|
+
const out = (0, react.useMemo)(() => outputJson(block), [block]);
|
|
7170
|
+
const text = (0, react.useMemo)(() => resultText(block), [block]);
|
|
7171
|
+
const title = READ_TOOLS.has(toolName) ? t("toolview.recallTitle") : t("toolview.writeTitle");
|
|
7172
|
+
const summary = summaryFor(toolName, args, out, t);
|
|
7173
|
+
const target = ANCHOR_TARGETS[toolName];
|
|
7174
|
+
const seed = target?.seed?.(args);
|
|
7175
|
+
const toggle = () => setOpen((value) => !value);
|
|
7176
|
+
const openView = (event) => {
|
|
7177
|
+
event.stopPropagation();
|
|
7178
|
+
if (target === void 0) return;
|
|
7179
|
+
dispatchMnemonAnchor({
|
|
7180
|
+
page: target.page,
|
|
7181
|
+
...seed === void 0 ? {} : { seed },
|
|
7182
|
+
...sessionId === void 0 ? {} : { sessionId }
|
|
7183
|
+
});
|
|
7184
|
+
};
|
|
7185
|
+
const inspectCall = (event) => {
|
|
7186
|
+
event.stopPropagation();
|
|
7187
|
+
inspect?.();
|
|
7188
|
+
};
|
|
7189
|
+
const showArgs = Object.keys(args).length > 0;
|
|
7190
|
+
const showResult = text !== "";
|
|
7191
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7192
|
+
className: MnemonToolviews_module_css_default.root,
|
|
7193
|
+
"data-state": state,
|
|
7194
|
+
"data-open": open || void 0,
|
|
7195
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7196
|
+
className: MnemonToolviews_module_css_default.row,
|
|
7197
|
+
role: "button",
|
|
7198
|
+
tabIndex: 0,
|
|
7199
|
+
"aria-expanded": open,
|
|
7200
|
+
"aria-label": `${title}:${summary}`,
|
|
7201
|
+
onClick: toggle,
|
|
7202
|
+
onKeyDown: (event) => {
|
|
7203
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
7204
|
+
event.preventDefault();
|
|
7205
|
+
toggle();
|
|
7206
|
+
}
|
|
7207
|
+
},
|
|
7208
|
+
children: [
|
|
7209
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7210
|
+
className: `${MnemonToolviews_module_css_default.dot} ${state === "running" ? MnemonToolviews_module_css_default.dotRunning : state === "error" ? MnemonToolviews_module_css_default.dotError : state === "stopped" ? MnemonToolviews_module_css_default.dotStopped : MnemonToolviews_module_css_default.dotOk}`,
|
|
7211
|
+
"aria-hidden": "true"
|
|
7212
|
+
}),
|
|
7213
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonLogo, {
|
|
7214
|
+
className: MnemonToolviews_module_css_default.leading,
|
|
7215
|
+
title
|
|
7216
|
+
}),
|
|
7217
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7218
|
+
className: MnemonToolviews_module_css_default.title,
|
|
7219
|
+
children: title
|
|
7220
|
+
}),
|
|
7221
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7222
|
+
className: MnemonToolviews_module_css_default.summary,
|
|
7223
|
+
children: summary
|
|
7224
|
+
}),
|
|
7225
|
+
(inspect !== void 0 || target !== void 0) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
7226
|
+
className: MnemonToolviews_module_css_default.actions,
|
|
7227
|
+
onClick: (event) => event.stopPropagation(),
|
|
7228
|
+
children: [target !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7229
|
+
type: "button",
|
|
7230
|
+
className: MnemonToolviews_module_css_default.actionButton,
|
|
7231
|
+
onClick: openView,
|
|
7232
|
+
title: t("toolview.openView"),
|
|
7233
|
+
children: t("toolview.openView")
|
|
7234
|
+
}), settled && inspect !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7235
|
+
type: "button",
|
|
7236
|
+
className: MnemonToolviews_module_css_default.actionButton,
|
|
7237
|
+
onClick: inspectCall,
|
|
7238
|
+
title: t("toolview.inspect"),
|
|
7239
|
+
children: t("toolview.inspect")
|
|
7240
|
+
})]
|
|
7241
|
+
}),
|
|
7242
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7243
|
+
className: `${MnemonToolviews_module_css_default.chevron} ${open ? MnemonToolviews_module_css_default.chevronOpen : ""}`,
|
|
7244
|
+
"aria-hidden": "true"
|
|
7245
|
+
})
|
|
7246
|
+
]
|
|
7247
|
+
}), open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7248
|
+
className: MnemonToolviews_module_css_default.details,
|
|
7249
|
+
onClick: (event) => event.stopPropagation(),
|
|
7250
|
+
children: [
|
|
7251
|
+
showArgs && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7252
|
+
className: MnemonToolviews_module_css_default.detailSection,
|
|
7253
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7254
|
+
className: MnemonToolviews_module_css_default.detailLabel,
|
|
7255
|
+
children: t("toolview.args")
|
|
7256
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
|
|
7257
|
+
className: MnemonToolviews_module_css_default.detailCode,
|
|
7258
|
+
children: truncateBlock(JSON.stringify(args, null, 2), 2e3)
|
|
7259
|
+
})]
|
|
7260
|
+
}),
|
|
7261
|
+
showResult && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7262
|
+
className: MnemonToolviews_module_css_default.detailSection,
|
|
7263
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7264
|
+
className: MnemonToolviews_module_css_default.detailLabel,
|
|
7265
|
+
children: t("toolview.result")
|
|
7266
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
|
|
7267
|
+
className: MnemonToolviews_module_css_default.detailCode,
|
|
7268
|
+
children: truncateBlock(text, 4e3)
|
|
7269
|
+
})]
|
|
7270
|
+
}),
|
|
7271
|
+
!showArgs && !showResult && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7272
|
+
className: MnemonToolviews_module_css_default.detailEmpty,
|
|
7273
|
+
children: state === "running" ? t("toolview.running") : t("toolview.noResult")
|
|
7274
|
+
})
|
|
7275
|
+
]
|
|
7276
|
+
})]
|
|
7277
|
+
});
|
|
7278
|
+
});
|
|
7279
|
+
/** Tool name → toolview component, registered as keyed `tool.call.toolview` entries. */
|
|
7280
|
+
const MNEMON_TOOLVIEW_NAMES = Object.keys(ANCHOR_TARGETS);
|
|
7281
|
+
//#endregion
|
|
7282
|
+
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonTurnTail.module.css.mjs
|
|
7283
|
+
const css$2 = ".tvtksG_root{min-width:0;margin:2px 0}.tvtksG_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}.tvtksG_bar:hover{border-color:var(--dsw-alias-border-l2);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.tvtksG_bar:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.tvtksG_mark{opacity:.8;flex:none;font-size:10px}.tvtksG_label{flex:none;font-weight:600}.tvtksG_metrics{align-items:center;gap:6px;min-width:0;display:inline-flex;overflow:hidden}.tvtksG_metrics span{white-space:nowrap}.tvtksG_failureMetric{color:var(--dsw-alias-state-error-primary,#d44)}.tvtksG_chevron{opacity:.7;flex:none;width:8px;height:8px;margin-left:auto}.tvtksG_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)}.tvtksG_chevronOpen:before{transform:rotate(-135deg)translate(0)}.tvtksG_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}.tvtksG_detailLabel{color:var(--dsw-alias-label-caption);letter-spacing:.08em;text-transform:uppercase;flex:none;font-size:10px;font-weight:650}.tvtksG_tools{flex-wrap:wrap;flex:auto;gap:4px;min-width:0;display:flex}.tvtksG_toolChip{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-radius:4px;padding:0 6px;font-size:10px;line-height:18px}.tvtksG_viewButton{cursor:pointer;height:20px;color:var(--dsw-alias-state-business-primary);background:0 0;border:none;border-radius:5px;flex:none;padding:0 8px;font-size:11px;line-height:20px}.tvtksG_viewButton:hover{background:var(--dsw-alias-interactive-bg-active)}";
|
|
7284
|
+
const tagId$2 = "dsh-mnemon/MnemonTurnTail.module.css";
|
|
7285
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
|
|
7286
|
+
const tag = document.createElement("style");
|
|
7287
|
+
tag.dataset.plugin = "dsh-mnemon";
|
|
7288
|
+
tag.dataset.pluginCss = tagId$2;
|
|
7289
|
+
tag.textContent = css$2;
|
|
7290
|
+
document.head.appendChild(tag);
|
|
7291
|
+
}
|
|
7292
|
+
var MnemonTurnTail_module_css_default = {
|
|
7293
|
+
"details": "tvtksG_details",
|
|
7294
|
+
"detailLabel": "tvtksG_detailLabel",
|
|
7295
|
+
"root": "tvtksG_root",
|
|
7296
|
+
"metrics": "tvtksG_metrics",
|
|
7297
|
+
"label": "tvtksG_label",
|
|
7298
|
+
"chevron": "tvtksG_chevron",
|
|
7299
|
+
"mark": "tvtksG_mark",
|
|
7300
|
+
"failureMetric": "tvtksG_failureMetric",
|
|
7301
|
+
"bar": "tvtksG_bar",
|
|
7302
|
+
"chevronOpen": "tvtksG_chevronOpen",
|
|
7303
|
+
"tools": "tvtksG_tools",
|
|
7304
|
+
"toolChip": "tvtksG_toolChip",
|
|
7305
|
+
"viewButton": "tvtksG_viewButton"
|
|
7306
|
+
};
|
|
7307
|
+
//#endregion
|
|
7308
|
+
//#region src/client/MnemonTurnTail.tsx
|
|
7309
|
+
function turnNumber(turn) {
|
|
7310
|
+
const value = turn?.turn;
|
|
7311
|
+
return typeof value === "number" ? value : void 0;
|
|
7312
|
+
}
|
|
7313
|
+
/** Whether this entry renders for the owner; chain selectors decline quietly. */
|
|
7314
|
+
function selectMnemonTurnTail(owner) {
|
|
7315
|
+
return owner.turn.status === "closed" ? {} : null;
|
|
7316
|
+
}
|
|
7317
|
+
/** One-line memory-activity bar under a completed turn; hides when the turn touched no memory. */
|
|
7318
|
+
const MnemonTurnTail = (0, react.memo)(function MnemonTurnTail({ turn, seq, sessionId, connection, t }) {
|
|
7319
|
+
const [activity, setActivity] = (0, react.useState)(void 0);
|
|
7320
|
+
const [open, setOpen] = (0, react.useState)(false);
|
|
7321
|
+
const number = turnNumber(turn);
|
|
7322
|
+
(0, react.useEffect)(() => {
|
|
7323
|
+
if (number === void 0) {
|
|
7324
|
+
setActivity(null);
|
|
7325
|
+
return;
|
|
7326
|
+
}
|
|
7327
|
+
let alive = true;
|
|
7328
|
+
new MnemonClient(connection, sessionId).turnActivity(number, seq).then((result) => {
|
|
7329
|
+
if (alive) setActivity(result);
|
|
7330
|
+
}).catch(() => {
|
|
7331
|
+
if (alive) setActivity(null);
|
|
7332
|
+
});
|
|
7333
|
+
return () => {
|
|
7334
|
+
alive = false;
|
|
7335
|
+
};
|
|
7336
|
+
}, [
|
|
7337
|
+
connection,
|
|
7338
|
+
sessionId,
|
|
7339
|
+
number,
|
|
7340
|
+
seq
|
|
7341
|
+
]);
|
|
7342
|
+
if (activity === void 0 || activity === null) return null;
|
|
7343
|
+
if (number === void 0) return null;
|
|
7344
|
+
const openView = (event) => {
|
|
7345
|
+
event.stopPropagation();
|
|
7346
|
+
dispatchMnemonAnchor({
|
|
7347
|
+
page: "status",
|
|
7348
|
+
...sessionId === void 0 ? {} : { sessionId }
|
|
7349
|
+
});
|
|
7350
|
+
};
|
|
7351
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7352
|
+
className: MnemonTurnTail_module_css_default.root,
|
|
7353
|
+
"data-open": open || void 0,
|
|
7354
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
7355
|
+
type: "button",
|
|
7356
|
+
className: MnemonTurnTail_module_css_default.bar,
|
|
7357
|
+
"aria-expanded": open,
|
|
7358
|
+
onClick: () => setOpen((value) => !value),
|
|
7359
|
+
children: [
|
|
7360
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7361
|
+
className: MnemonTurnTail_module_css_default.mark,
|
|
7362
|
+
"aria-hidden": "true",
|
|
7363
|
+
children: "◈"
|
|
7364
|
+
}),
|
|
7365
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7366
|
+
className: MnemonTurnTail_module_css_default.label,
|
|
7367
|
+
children: t("turnTail.label")
|
|
7368
|
+
}),
|
|
7369
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
7370
|
+
className: MnemonTurnTail_module_css_default.metrics,
|
|
7371
|
+
children: [
|
|
7372
|
+
activity.recalls > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("turnTail.recall", { count: activity.recalls }) }),
|
|
7373
|
+
activity.writes > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("turnTail.write", { count: activity.writes }) }),
|
|
7374
|
+
activity.documentSearches > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("turnTail.documents", { count: activity.documentSearches }) }),
|
|
7375
|
+
activity.inspections > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("turnTail.inspect", { count: activity.inspections }) }),
|
|
7376
|
+
activity.failures > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7377
|
+
className: MnemonTurnTail_module_css_default.failureMetric,
|
|
7378
|
+
children: t("turnTail.failed", { count: activity.failures })
|
|
7379
|
+
})
|
|
7380
|
+
]
|
|
7381
|
+
}),
|
|
7382
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7383
|
+
className: `${MnemonTurnTail_module_css_default.chevron} ${open ? MnemonTurnTail_module_css_default.chevronOpen : ""}`,
|
|
7384
|
+
"aria-hidden": "true"
|
|
7385
|
+
})
|
|
7386
|
+
]
|
|
7387
|
+
}), open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7388
|
+
className: MnemonTurnTail_module_css_default.details,
|
|
7389
|
+
children: [
|
|
7390
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7391
|
+
className: MnemonTurnTail_module_css_default.detailLabel,
|
|
7392
|
+
children: t("turnTail.toolList")
|
|
7393
|
+
}),
|
|
7394
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7395
|
+
className: MnemonTurnTail_module_css_default.tools,
|
|
7396
|
+
children: activity.names.map((name, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
|
|
7397
|
+
className: MnemonTurnTail_module_css_default.toolChip,
|
|
7398
|
+
children: name
|
|
7399
|
+
}, `${name}-${index}`))
|
|
7400
|
+
}),
|
|
7401
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7402
|
+
type: "button",
|
|
7403
|
+
className: MnemonTurnTail_module_css_default.viewButton,
|
|
7404
|
+
onClick: openView,
|
|
7405
|
+
children: t("turnTail.openView")
|
|
7406
|
+
})
|
|
7407
|
+
]
|
|
7408
|
+
})]
|
|
7409
|
+
});
|
|
7410
|
+
});
|
|
7411
|
+
//#endregion
|
|
7412
|
+
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonSaveAction.module.css.mjs
|
|
7413
|
+
const css$1 = ".ETdZZG_wrap{display:inline-flex;position:relative}.ETdZZG_button{cursor:pointer;height:22px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:5px;align-items:center;gap:4px;padding:0 7px;font-size:11px;line-height:22px;display:inline-flex}.ETdZZG_button:hover,.ETdZZG_button[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.ETdZZG_button:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.ETdZZG_glyph{opacity:.85;font-size:10px}.ETdZZG_panel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:min(340px,100vw - 32px);color:var(--dsw-alias-label-primary);border-radius:10px;padding:10px 12px;font-size:12px;line-height:18px;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 8px 24px #0000002e}.ETdZZG_panel:popover-open{top:var(--mn-save-panel-top);right:auto;left:var(--mn-save-panel-left);width:var(--mn-save-panel-width);margin:0;position:fixed}.ETdZZG_panelHeader{justify-content:space-between;align-items:center;gap:8px;display:flex}.ETdZZG_panelHeader strong{font-size:12px;font-weight:600}.ETdZZG_close{cursor:pointer;width:20px;height:20px;color:var(--dsw-alias-label-secondary);background:0 0;border:none;border-radius:5px;font-size:14px;line-height:18px}.ETdZZG_close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.ETdZZG_hint{color:var(--dsw-alias-label-secondary);margin:6px 0 0;font-size:11px;line-height:16px}.ETdZZG_status{color:var(--dsw-alias-label-tertiary);margin-top:8px;font-size:11px}.ETdZZG_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}.ETdZZG_candidate{margin-top:8px;display:block}.ETdZZG_candidate>span{color:var(--dsw-alias-label-caption);letter-spacing:.08em;text-transform:uppercase;margin-bottom:4px;font-size:10px;font-weight:650;display:block}.ETdZZG_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%;max-height:160px;color:var(--dsw-alias-label-primary);font:12px/18px var(--ds-font-family-code,Consolas, monospace);border-radius:8px;padding:8px 10px;display:block}.ETdZZG_candidate textarea:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.ETdZZG_truncated{color:var(--dsw-alias-label-tertiary);margin-top:4px;font-size:10px;line-height:14px;display:block}.ETdZZG_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}.ETdZZG_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}.ETdZZG_submit{cursor:pointer;background:var(--dsw-alias-button-primary-fill,var(--dsw-alias-state-business-primary));width:100%;height:28px;color:var(--dsw-alias-button-primary-text,#fff);border:none;border-radius:7px;margin-top:10px;font-size:12px;font-weight:600;line-height:28px}.ETdZZG_submit:hover:not(:disabled){filter:brightness(1.06)}.ETdZZG_submit:disabled{cursor:default;opacity:.5}.ETdZZG_submit:focus-visible{outline:1.5px solid var(--dsw-alias-state-business-primary);outline-offset:2px}";
|
|
7414
|
+
const tagId$1 = "dsh-mnemon/MnemonSaveAction.module.css";
|
|
7415
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
|
|
7416
|
+
const tag = document.createElement("style");
|
|
7417
|
+
tag.dataset.plugin = "dsh-mnemon";
|
|
7418
|
+
tag.dataset.pluginCss = tagId$1;
|
|
7419
|
+
tag.textContent = css$1;
|
|
7420
|
+
document.head.appendChild(tag);
|
|
7421
|
+
}
|
|
7422
|
+
var MnemonSaveAction_module_css_default = {
|
|
7423
|
+
"outcome": "ETdZZG_outcome",
|
|
7424
|
+
"panelHeader": "ETdZZG_panelHeader",
|
|
7425
|
+
"panel": "ETdZZG_panel",
|
|
7426
|
+
"wrap": "ETdZZG_wrap",
|
|
7427
|
+
"status": "ETdZZG_status",
|
|
7428
|
+
"readOnly": "ETdZZG_readOnly",
|
|
7429
|
+
"hint": "ETdZZG_hint",
|
|
7430
|
+
"button": "ETdZZG_button",
|
|
7431
|
+
"failure": "ETdZZG_failure",
|
|
7432
|
+
"submit": "ETdZZG_submit",
|
|
7433
|
+
"glyph": "ETdZZG_glyph",
|
|
7434
|
+
"close": "ETdZZG_close",
|
|
7435
|
+
"candidate": "ETdZZG_candidate",
|
|
7436
|
+
"truncated": "ETdZZG_truncated"
|
|
7437
|
+
};
|
|
7438
|
+
//#endregion
|
|
7439
|
+
//#region src/client/MnemonSaveAction.tsx
|
|
7440
|
+
const PREVIEW_LIMIT = 8e3;
|
|
7441
|
+
/** Save-to-memory action on finalized assistant messages, routed through the supervised writeback gate. */
|
|
7442
|
+
const MnemonSaveAction = (0, react.memo)(function MnemonSaveAction({ messageId, sessionId, connection, t }) {
|
|
7443
|
+
const [open, setOpen] = (0, react.useState)(false);
|
|
7444
|
+
const [writeEnabled, setWriteEnabled] = (0, react.useState)(void 0);
|
|
7445
|
+
const [candidate, setCandidate] = (0, react.useState)(void 0);
|
|
7446
|
+
const [truncated, setTruncated] = (0, react.useState)(false);
|
|
7447
|
+
const [missing, setMissing] = (0, react.useState)(false);
|
|
7448
|
+
const [submitting, setSubmitting] = (0, react.useState)(false);
|
|
7449
|
+
const [outcome, setOutcome] = (0, react.useState)(null);
|
|
7450
|
+
const [failure, setFailure] = (0, react.useState)(null);
|
|
7451
|
+
const textareaRef = (0, react.useRef)(null);
|
|
7452
|
+
const wrapRef = (0, react.useRef)(null);
|
|
7453
|
+
const buttonRef = (0, react.useRef)(null);
|
|
7454
|
+
const panelRef = (0, react.useRef)(null);
|
|
7455
|
+
const openRef = (0, react.useRef)(false);
|
|
7456
|
+
const requestVersionRef = (0, react.useRef)(0);
|
|
7457
|
+
const submitActiveRef = (0, react.useRef)(false);
|
|
7458
|
+
const setPanelOpen = (next) => {
|
|
7459
|
+
requestVersionRef.current += 1;
|
|
7460
|
+
openRef.current = next;
|
|
7461
|
+
setOpen(next);
|
|
7462
|
+
};
|
|
7463
|
+
(0, react.useEffect)(() => {
|
|
7464
|
+
if (!open) {
|
|
7465
|
+
setWriteEnabled(void 0);
|
|
7466
|
+
setCandidate(void 0);
|
|
7467
|
+
setTruncated(false);
|
|
7468
|
+
setMissing(false);
|
|
7469
|
+
setSubmitting(submitActiveRef.current);
|
|
7470
|
+
setOutcome(null);
|
|
7471
|
+
setFailure(null);
|
|
7472
|
+
return;
|
|
7473
|
+
}
|
|
7474
|
+
const requestVersion = ++requestVersionRef.current;
|
|
7475
|
+
let alive = true;
|
|
7476
|
+
setSubmitting(submitActiveRef.current);
|
|
7477
|
+
const client = new MnemonClient(connection, sessionId);
|
|
7478
|
+
client.status().then((status) => {
|
|
7479
|
+
if (alive && requestVersionRef.current === requestVersion) setWriteEnabled(status.writeEnabled);
|
|
7480
|
+
}).catch(() => {
|
|
7481
|
+
if (alive && requestVersionRef.current === requestVersion) setWriteEnabled(false);
|
|
7482
|
+
});
|
|
7483
|
+
client.assistantMessageText(messageId).then((result) => {
|
|
7484
|
+
if (!alive || requestVersionRef.current !== requestVersion) return;
|
|
7485
|
+
if (result === null || result.text === "") setMissing(true);
|
|
7486
|
+
else {
|
|
7487
|
+
setTruncated(result.text.length > PREVIEW_LIMIT);
|
|
7488
|
+
setCandidate(result.text.slice(0, PREVIEW_LIMIT));
|
|
7489
|
+
}
|
|
7490
|
+
}).catch(() => {
|
|
7491
|
+
if (alive && requestVersionRef.current === requestVersion) setMissing(true);
|
|
7492
|
+
});
|
|
7493
|
+
return () => {
|
|
7494
|
+
alive = false;
|
|
7495
|
+
};
|
|
7496
|
+
}, [
|
|
7497
|
+
open,
|
|
7498
|
+
connection,
|
|
7499
|
+
sessionId,
|
|
7500
|
+
messageId
|
|
7501
|
+
]);
|
|
7502
|
+
(0, react.useEffect)(() => {
|
|
7503
|
+
if (!open) return;
|
|
7504
|
+
const closeOnEscape = (event) => {
|
|
7505
|
+
if (event.key === "Escape") setPanelOpen(false);
|
|
7506
|
+
};
|
|
7507
|
+
const closeOutside = (event) => {
|
|
7508
|
+
if (event.target instanceof Node && !wrapRef.current?.contains(event.target)) setPanelOpen(false);
|
|
7509
|
+
};
|
|
7510
|
+
document.addEventListener("keydown", closeOnEscape);
|
|
7511
|
+
document.addEventListener("pointerdown", closeOutside);
|
|
7512
|
+
return () => {
|
|
7513
|
+
document.removeEventListener("keydown", closeOnEscape);
|
|
7514
|
+
document.removeEventListener("pointerdown", closeOutside);
|
|
7515
|
+
};
|
|
7516
|
+
}, [open]);
|
|
7517
|
+
(0, react.useLayoutEffect)(() => {
|
|
7518
|
+
if (!open) return;
|
|
7519
|
+
const panel = panelRef.current;
|
|
7520
|
+
const button = buttonRef.current;
|
|
7521
|
+
if (panel === null || button === null || typeof panel.showPopover !== "function") return;
|
|
7522
|
+
const reposition = () => {
|
|
7523
|
+
const anchor = button.getBoundingClientRect();
|
|
7524
|
+
const padding = 16;
|
|
7525
|
+
const width = Math.min(340, Math.max(240, window.innerWidth - 32));
|
|
7526
|
+
panel.style.setProperty("--mn-save-panel-width", `${width}px`);
|
|
7527
|
+
const left = Math.min(Math.max(padding, anchor.right - width), Math.max(padding, window.innerWidth - width - padding));
|
|
7528
|
+
panel.style.setProperty("--mn-save-panel-left", `${left}px`);
|
|
7529
|
+
const below = anchor.bottom + 4;
|
|
7530
|
+
const above = anchor.top - panel.getBoundingClientRect().height - 4;
|
|
7531
|
+
const top = below + panel.getBoundingClientRect().height <= window.innerHeight - padding || above < padding ? below : above;
|
|
7532
|
+
panel.style.setProperty("--mn-save-panel-top", `${Math.max(padding, top)}px`);
|
|
7533
|
+
};
|
|
7534
|
+
panel.setAttribute("popover", "manual");
|
|
7535
|
+
panel.showPopover();
|
|
7536
|
+
reposition();
|
|
7537
|
+
window.addEventListener("resize", reposition);
|
|
7538
|
+
document.addEventListener("scroll", reposition, true);
|
|
7539
|
+
return () => {
|
|
7540
|
+
window.removeEventListener("resize", reposition);
|
|
7541
|
+
document.removeEventListener("scroll", reposition, true);
|
|
7542
|
+
if (panel.matches(":popover-open")) panel.hidePopover();
|
|
7543
|
+
};
|
|
7544
|
+
}, [open]);
|
|
7545
|
+
const submit = () => {
|
|
7546
|
+
const content = textareaRef.current?.value.trim() ?? "";
|
|
7547
|
+
if (content === "" || writeEnabled !== true || submitActiveRef.current) return;
|
|
7548
|
+
const requestVersion = requestVersionRef.current;
|
|
7549
|
+
submitActiveRef.current = true;
|
|
7550
|
+
setSubmitting(true);
|
|
7551
|
+
setFailure(null);
|
|
7552
|
+
setOutcome(null);
|
|
7553
|
+
new MnemonClient(connection, sessionId).supervise(content, messageId).then((result) => {
|
|
7554
|
+
if (!openRef.current || requestVersionRef.current !== requestVersion) return;
|
|
7555
|
+
setOutcome({
|
|
7556
|
+
summary: result.summary,
|
|
7557
|
+
action: result.action
|
|
7558
|
+
});
|
|
7559
|
+
setCandidate(content);
|
|
7560
|
+
}).catch((reason) => {
|
|
7561
|
+
if (openRef.current && requestVersionRef.current === requestVersion) setFailure(reason instanceof Error ? reason.message : String(reason));
|
|
7562
|
+
}).finally(() => {
|
|
7563
|
+
submitActiveRef.current = false;
|
|
7564
|
+
if (openRef.current) setSubmitting(false);
|
|
7565
|
+
});
|
|
7566
|
+
};
|
|
7567
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7568
|
+
ref: wrapRef,
|
|
7569
|
+
className: MnemonSaveAction_module_css_default.wrap,
|
|
7570
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
7571
|
+
ref: buttonRef,
|
|
7572
|
+
type: "button",
|
|
7573
|
+
className: MnemonSaveAction_module_css_default.button,
|
|
7574
|
+
"aria-expanded": open,
|
|
7575
|
+
title: t("saveAction.button"),
|
|
7576
|
+
onClick: () => setPanelOpen(!openRef.current),
|
|
7577
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7578
|
+
className: MnemonSaveAction_module_css_default.glyph,
|
|
7579
|
+
"aria-hidden": "true",
|
|
7580
|
+
children: "◈"
|
|
7581
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7582
|
+
className: MnemonSaveAction_module_css_default.label,
|
|
7583
|
+
children: t("saveAction.button")
|
|
7584
|
+
})]
|
|
7585
|
+
}), open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7586
|
+
ref: panelRef,
|
|
7587
|
+
className: MnemonSaveAction_module_css_default.panel,
|
|
7588
|
+
role: "dialog",
|
|
7589
|
+
"aria-label": t("saveAction.title"),
|
|
7590
|
+
children: [
|
|
7591
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
7592
|
+
className: MnemonSaveAction_module_css_default.panelHeader,
|
|
7593
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("saveAction.title") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7594
|
+
type: "button",
|
|
7595
|
+
className: MnemonSaveAction_module_css_default.close,
|
|
7596
|
+
"aria-label": t("saveAction.close"),
|
|
7597
|
+
onClick: () => setPanelOpen(false),
|
|
7598
|
+
children: "×"
|
|
7599
|
+
})]
|
|
7600
|
+
}),
|
|
7601
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7602
|
+
className: MnemonSaveAction_module_css_default.hint,
|
|
7603
|
+
children: t("saveAction.hint")
|
|
7604
|
+
}),
|
|
7605
|
+
writeEnabled === false && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7606
|
+
className: MnemonSaveAction_module_css_default.readOnly,
|
|
7607
|
+
role: "status",
|
|
7608
|
+
children: t("saveAction.readOnly")
|
|
7609
|
+
}),
|
|
7610
|
+
candidate === void 0 && !missing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7611
|
+
className: MnemonSaveAction_module_css_default.status,
|
|
7612
|
+
children: t("saveAction.fetching")
|
|
7613
|
+
}),
|
|
7614
|
+
missing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7615
|
+
className: MnemonSaveAction_module_css_default.status,
|
|
7616
|
+
role: "status",
|
|
7617
|
+
children: t("saveAction.missing")
|
|
7618
|
+
}),
|
|
7619
|
+
candidate !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
7620
|
+
className: MnemonSaveAction_module_css_default.candidate,
|
|
7621
|
+
children: [
|
|
7622
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("saveAction.candidate") }),
|
|
7623
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
7624
|
+
ref: textareaRef,
|
|
7625
|
+
rows: 5,
|
|
7626
|
+
defaultValue: candidate
|
|
7627
|
+
}),
|
|
7628
|
+
truncated && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
7629
|
+
className: MnemonSaveAction_module_css_default.truncated,
|
|
7630
|
+
children: t("saveAction.truncated", { limit: PREVIEW_LIMIT })
|
|
7631
|
+
})
|
|
7632
|
+
]
|
|
7633
|
+
}),
|
|
7634
|
+
outcome !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7635
|
+
className: MnemonSaveAction_module_css_default.outcome,
|
|
7636
|
+
role: "status",
|
|
7637
|
+
children: t("saveAction.result", { summary: outcome.summary })
|
|
7638
|
+
}),
|
|
7639
|
+
failure !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7640
|
+
className: MnemonSaveAction_module_css_default.failure,
|
|
7641
|
+
role: "alert",
|
|
7642
|
+
children: t("saveAction.failed", { error: failure })
|
|
7643
|
+
}),
|
|
7644
|
+
candidate !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7645
|
+
type: "button",
|
|
7646
|
+
className: MnemonSaveAction_module_css_default.submit,
|
|
7647
|
+
disabled: submitting || writeEnabled !== true,
|
|
7648
|
+
onClick: submit,
|
|
7649
|
+
children: submitting ? t("saveAction.submitting") : t("saveAction.submit")
|
|
7650
|
+
})
|
|
7651
|
+
]
|
|
7652
|
+
})]
|
|
7653
|
+
});
|
|
7654
|
+
});
|
|
6179
7655
|
//#endregion
|
|
6180
7656
|
//#region src/client/settings.ts
|
|
6181
7657
|
var MnemonSettingsScope = class {
|
|
6182
7658
|
connection;
|
|
7659
|
+
namespace;
|
|
6183
7660
|
snapshot = {
|
|
6184
7661
|
status: "loading",
|
|
6185
7662
|
writable: false,
|
|
@@ -6187,8 +7664,9 @@ window.__ModuleLoader__.load({
|
|
|
6187
7664
|
};
|
|
6188
7665
|
listeners = /* @__PURE__ */ new Set();
|
|
6189
7666
|
tail = Promise.resolve();
|
|
6190
|
-
constructor(connection) {
|
|
7667
|
+
constructor(connection, namespace = MNEMON_SETTINGS_NAMESPACE) {
|
|
6191
7668
|
this.connection = connection;
|
|
7669
|
+
this.namespace = namespace;
|
|
6192
7670
|
this.load();
|
|
6193
7671
|
}
|
|
6194
7672
|
getSnapshot = () => this.snapshot;
|
|
@@ -6197,37 +7675,67 @@ window.__ModuleLoader__.load({
|
|
|
6197
7675
|
return () => this.listeners.delete(listener);
|
|
6198
7676
|
};
|
|
6199
7677
|
set(field, value) {
|
|
6200
|
-
return this.
|
|
7678
|
+
return this.mutate([{
|
|
6201
7679
|
op: "set",
|
|
6202
7680
|
path: [field],
|
|
6203
7681
|
value
|
|
6204
|
-
});
|
|
7682
|
+
}]);
|
|
6205
7683
|
}
|
|
6206
7684
|
unset(field) {
|
|
6207
|
-
return this.
|
|
7685
|
+
return this.mutate([{
|
|
6208
7686
|
op: "unset",
|
|
6209
7687
|
path: [field]
|
|
6210
|
-
});
|
|
7688
|
+
}]);
|
|
7689
|
+
}
|
|
7690
|
+
/** Set a nested field (e.g. ['conversationInteraction', 'toolviews']). */
|
|
7691
|
+
setPath(path, value) {
|
|
7692
|
+
return this.mutate([{
|
|
7693
|
+
op: "set",
|
|
7694
|
+
path,
|
|
7695
|
+
value
|
|
7696
|
+
}]);
|
|
7697
|
+
}
|
|
7698
|
+
/** Unset a nested field, falling back to its schema default. */
|
|
7699
|
+
unsetPath(path) {
|
|
7700
|
+
return this.mutate([{
|
|
7701
|
+
op: "unset",
|
|
7702
|
+
path
|
|
7703
|
+
}]);
|
|
7704
|
+
}
|
|
7705
|
+
mutate(ops) {
|
|
7706
|
+
return this.write(ops);
|
|
6211
7707
|
}
|
|
6212
7708
|
async load() {
|
|
6213
|
-
|
|
6214
|
-
|
|
7709
|
+
try {
|
|
7710
|
+
const response = await this.connection.rpc.call(MNEMON_SETTINGS_CHANNEL, "get", { namespace: this.namespace });
|
|
7711
|
+
if (!response.ok) {
|
|
7712
|
+
this.publish({
|
|
7713
|
+
status: "unavailable",
|
|
7714
|
+
writable: false,
|
|
7715
|
+
mode: "host"
|
|
7716
|
+
});
|
|
7717
|
+
return;
|
|
7718
|
+
}
|
|
7719
|
+
this.publish(response.value);
|
|
7720
|
+
} catch {
|
|
6215
7721
|
this.publish({
|
|
6216
7722
|
status: "unavailable",
|
|
6217
7723
|
writable: false,
|
|
6218
7724
|
mode: "host"
|
|
6219
7725
|
});
|
|
6220
|
-
return;
|
|
6221
7726
|
}
|
|
6222
|
-
this.publish(response.value);
|
|
6223
7727
|
}
|
|
6224
|
-
write(
|
|
7728
|
+
write(ops) {
|
|
6225
7729
|
const task = this.tail.then(async () => {
|
|
6226
7730
|
const response = await this.connection.rpc.call(MNEMON_SETTINGS_CHANNEL, "mutate", {
|
|
6227
|
-
|
|
7731
|
+
namespace: this.namespace,
|
|
7732
|
+
ops,
|
|
6228
7733
|
...this.snapshot.revision === void 0 ? {} : { expectedRevision: this.snapshot.revision }
|
|
6229
7734
|
});
|
|
6230
|
-
if (!response.ok)
|
|
7735
|
+
if (!response.ok) {
|
|
7736
|
+
await this.load();
|
|
7737
|
+
throw new Error(response.error.message);
|
|
7738
|
+
}
|
|
6231
7739
|
this.publish(response.value);
|
|
6232
7740
|
});
|
|
6233
7741
|
this.tail = task.catch(() => {});
|
|
@@ -6239,23 +7747,382 @@ window.__ModuleLoader__.load({
|
|
|
6239
7747
|
}
|
|
6240
7748
|
};
|
|
6241
7749
|
//#endregion
|
|
7750
|
+
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonWorkspace.module.css.mjs
|
|
7751
|
+
var import_client = (/* @__PURE__ */ __commonJSMin(((exports) => {
|
|
7752
|
+
var m = require("react-dom");
|
|
7753
|
+
exports.createRoot = m.createRoot;
|
|
7754
|
+
exports.hydrateRoot = m.hydrateRoot;
|
|
7755
|
+
})))();
|
|
7756
|
+
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}.mqrRpa_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}.mqrRpa_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}.mqrRpa_entry:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-hover)}.mqrRpa_entry[data-active]{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-active);font-weight:600}.mqrRpa_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.mqrRpa_entryLabel{text-overflow:ellipsis;overflow:hidden}[data-dsh-frame][data-sidebar-collapsed] .mqrRpa_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] .mqrRpa_entryLabel{display:none}";
|
|
7757
|
+
const tagId = "dsh-mnemon/MnemonWorkspace.module.css";
|
|
7758
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
7759
|
+
const tag = document.createElement("style");
|
|
7760
|
+
tag.dataset.plugin = "dsh-mnemon";
|
|
7761
|
+
tag.dataset.pluginCss = tagId;
|
|
7762
|
+
tag.textContent = css;
|
|
7763
|
+
document.head.appendChild(tag);
|
|
7764
|
+
}
|
|
7765
|
+
var MnemonWorkspace_module_css_default = {
|
|
7766
|
+
"panelView": "mqrRpa_panelView",
|
|
7767
|
+
"entry": "mqrRpa_entry",
|
|
7768
|
+
"entryIcon": "mqrRpa_entryIcon",
|
|
7769
|
+
"entryLabel": "mqrRpa_entryLabel"
|
|
7770
|
+
};
|
|
7771
|
+
//#endregion
|
|
7772
|
+
//#region src/client/sidebar-entry.ts
|
|
7773
|
+
const FAMILY_SELECTOR = "[data-dsh-taskboard-entry], [data-dsh-ssh-entry], [data-dsh-mnemon-entry]";
|
|
7774
|
+
function sidebarRoot() {
|
|
7775
|
+
const column = document.querySelector("[data-pane=\"sidebar\"], [class*=\"sidebarCol\"]");
|
|
7776
|
+
if (column === null) return void 0;
|
|
7777
|
+
return column.querySelector("[class*=\"logoRow\"]")?.parentElement ?? column.firstElementChild;
|
|
7778
|
+
}
|
|
7779
|
+
function newSessionButton(root) {
|
|
7780
|
+
const nested = root.querySelector("button[class*=\"newSession\"]");
|
|
7781
|
+
if (nested !== null) return nested;
|
|
7782
|
+
for (const child of root.children) if (child.tagName === "BUTTON") return child;
|
|
7783
|
+
}
|
|
7784
|
+
function createIcon() {
|
|
7785
|
+
const namespace = "http://www.w3.org/2000/svg";
|
|
7786
|
+
const icon = document.createElementNS(namespace, "svg");
|
|
7787
|
+
icon.setAttribute("viewBox", "0 0 16 16");
|
|
7788
|
+
icon.setAttribute("width", "14");
|
|
7789
|
+
icon.setAttribute("height", "14");
|
|
7790
|
+
icon.setAttribute("fill", "none");
|
|
7791
|
+
icon.setAttribute("stroke", "currentColor");
|
|
7792
|
+
icon.setAttribute("stroke-width", "1.3");
|
|
7793
|
+
icon.setAttribute("stroke-linecap", "round");
|
|
7794
|
+
icon.setAttribute("stroke-linejoin", "round");
|
|
7795
|
+
icon.setAttribute("aria-hidden", "true");
|
|
7796
|
+
const ellipse = document.createElementNS(namespace, "ellipse");
|
|
7797
|
+
ellipse.setAttribute("cx", "8");
|
|
7798
|
+
ellipse.setAttribute("cy", "3.5");
|
|
7799
|
+
ellipse.setAttribute("rx", "5");
|
|
7800
|
+
ellipse.setAttribute("ry", "2");
|
|
7801
|
+
const path = document.createElementNS(namespace, "path");
|
|
7802
|
+
path.setAttribute("d", "M3 3.5v4c0 1.1 2.2 2 5 2s5-.9 5-2v-4M3 7.5v4c0 1.1 2.2 2 5 2s5-.9 5-2v-4");
|
|
7803
|
+
icon.append(ellipse, path);
|
|
7804
|
+
return icon;
|
|
7805
|
+
}
|
|
7806
|
+
function createEntry(controller) {
|
|
7807
|
+
const entry = document.createElement("button");
|
|
7808
|
+
entry.type = "button";
|
|
7809
|
+
entry.dataset.dshMnemonEntry = "";
|
|
7810
|
+
entry.className = MnemonWorkspace_module_css_default.entry ?? "";
|
|
7811
|
+
const icon = document.createElement("span");
|
|
7812
|
+
icon.className = MnemonWorkspace_module_css_default.entryIcon ?? "";
|
|
7813
|
+
icon.append(createIcon());
|
|
7814
|
+
const label = document.createElement("span");
|
|
7815
|
+
label.className = MnemonWorkspace_module_css_default.entryLabel ?? "";
|
|
7816
|
+
entry.append(icon, label);
|
|
7817
|
+
entry.addEventListener("click", () => {
|
|
7818
|
+
controller.toggle();
|
|
7819
|
+
});
|
|
7820
|
+
return {
|
|
7821
|
+
entry,
|
|
7822
|
+
label
|
|
7823
|
+
};
|
|
7824
|
+
}
|
|
7825
|
+
function placeEntry(root, entry) {
|
|
7826
|
+
const button = newSessionButton(root);
|
|
7827
|
+
if (button === void 0) return false;
|
|
7828
|
+
if (entry.parentElement === root) return true;
|
|
7829
|
+
const row = button.closest("[class*=\"logoRow\"]");
|
|
7830
|
+
const base = row !== null && row.parentElement === root ? row : button;
|
|
7831
|
+
const anchor = Array.from(root.children).filter((element) => element instanceof HTMLElement && element.matches(FAMILY_SELECTOR)).at(-1)?.nextElementSibling ?? base.nextElementSibling;
|
|
7832
|
+
root.insertBefore(entry, anchor);
|
|
7833
|
+
return true;
|
|
7834
|
+
}
|
|
7835
|
+
/** Mount a self-healing official-style entry under the New Session row. */
|
|
7836
|
+
function mountMnemonSidebarEntry(controller, t) {
|
|
7837
|
+
const { entry, label } = createEntry(controller);
|
|
7838
|
+
let root;
|
|
7839
|
+
let placed = false;
|
|
7840
|
+
const syncLabel = () => {
|
|
7841
|
+
const text = t("tab.label");
|
|
7842
|
+
if (entry.getAttribute("aria-label") !== text) entry.setAttribute("aria-label", text);
|
|
7843
|
+
if (entry.title !== text) entry.title = text;
|
|
7844
|
+
if (label.textContent !== text) label.textContent = text;
|
|
7845
|
+
};
|
|
7846
|
+
const rootObserver = new MutationObserver(() => {
|
|
7847
|
+
if (root === void 0 || !root.isConnected) {
|
|
7848
|
+
placed = false;
|
|
7849
|
+
tryPlace();
|
|
7850
|
+
return;
|
|
7851
|
+
}
|
|
7852
|
+
if (!root.contains(entry)) placed = placeEntry(root, entry);
|
|
7853
|
+
});
|
|
7854
|
+
const tryPlace = () => {
|
|
7855
|
+
syncLabel();
|
|
7856
|
+
if (root !== void 0 && !root.isConnected) {
|
|
7857
|
+
rootObserver.disconnect();
|
|
7858
|
+
root = void 0;
|
|
7859
|
+
placed = false;
|
|
7860
|
+
}
|
|
7861
|
+
if (placed && document.body.contains(entry)) return;
|
|
7862
|
+
if (placed) {
|
|
7863
|
+
rootObserver.disconnect();
|
|
7864
|
+
root = void 0;
|
|
7865
|
+
placed = false;
|
|
7866
|
+
}
|
|
7867
|
+
root ??= sidebarRoot();
|
|
7868
|
+
if (root === void 0) return;
|
|
7869
|
+
placed = placeEntry(root, entry);
|
|
7870
|
+
if (placed) rootObserver.observe(root, {
|
|
7871
|
+
childList: true,
|
|
7872
|
+
subtree: true
|
|
7873
|
+
});
|
|
7874
|
+
};
|
|
7875
|
+
const waitObserver = new MutationObserver(tryPlace);
|
|
7876
|
+
waitObserver.observe(document.body, {
|
|
7877
|
+
childList: true,
|
|
7878
|
+
subtree: true
|
|
7879
|
+
});
|
|
7880
|
+
const syncActive = () => {
|
|
7881
|
+
if (controller.getSnapshot().open) entry.dataset.active = "true";
|
|
7882
|
+
else delete entry.dataset.active;
|
|
7883
|
+
};
|
|
7884
|
+
const unsubscribe = controller.subscribe(syncActive);
|
|
7885
|
+
syncActive();
|
|
7886
|
+
tryPlace();
|
|
7887
|
+
return () => {
|
|
7888
|
+
waitObserver.disconnect();
|
|
7889
|
+
rootObserver.disconnect();
|
|
7890
|
+
unsubscribe();
|
|
7891
|
+
entry.remove();
|
|
7892
|
+
};
|
|
7893
|
+
}
|
|
7894
|
+
//#endregion
|
|
7895
|
+
//#region src/client/workspace-controller.ts
|
|
7896
|
+
/** Small framework-neutral state holder shared by the sidebar row and panel. */
|
|
7897
|
+
var MnemonWorkspaceController = class {
|
|
7898
|
+
snapshot = { open: false };
|
|
7899
|
+
listeners = /* @__PURE__ */ new Set();
|
|
7900
|
+
getSnapshot = () => this.snapshot;
|
|
7901
|
+
subscribe = (listener) => {
|
|
7902
|
+
this.listeners.add(listener);
|
|
7903
|
+
return () => {
|
|
7904
|
+
this.listeners.delete(listener);
|
|
7905
|
+
};
|
|
7906
|
+
};
|
|
7907
|
+
open() {
|
|
7908
|
+
this.setOpen(true);
|
|
7909
|
+
}
|
|
7910
|
+
close() {
|
|
7911
|
+
this.setOpen(false);
|
|
7912
|
+
}
|
|
7913
|
+
toggle() {
|
|
7914
|
+
this.setOpen(!this.snapshot.open);
|
|
7915
|
+
}
|
|
7916
|
+
setOpen(open) {
|
|
7917
|
+
if (this.snapshot.open === open) return;
|
|
7918
|
+
this.snapshot = { open };
|
|
7919
|
+
for (const listener of this.listeners) listener();
|
|
7920
|
+
}
|
|
7921
|
+
};
|
|
7922
|
+
//#endregion
|
|
7923
|
+
//#region src/client/workspace-mount.tsx
|
|
7924
|
+
const CONVERSATION_COLUMN_SELECTOR = "[data-pane=\"conversation\"], [class*=\"centerCol\"]";
|
|
7925
|
+
const ACTIVE_ATTR = "data-dsh-mnemon-active";
|
|
7926
|
+
const TASKBOARD_ACTIVE_ATTR = "data-dsh-taskboard-active";
|
|
7927
|
+
const SSH_ACTIVE_ATTR = "data-dsh-ssh-active";
|
|
7928
|
+
const ACTIVATE_EVENT = "dsh-panel-activate";
|
|
7929
|
+
const SIDEBAR_CONTEXT_SELECTOR = "[class*=\"sessionRow\"], [class*=\"projectRow\"], [class*=\"searchResultRow\"], [class*=\"searchResultWorkspace\"], [class*=\"newSession\"]";
|
|
7930
|
+
function MnemonPanel({ ctx, settings, t }) {
|
|
7931
|
+
const sessions = (0, react.useSyncExternalStore)(ctx.sessions.list.subscribe, ctx.sessions.list.getSnapshot, ctx.sessions.list.getSnapshot);
|
|
7932
|
+
const workspaces = (0, react.useSyncExternalStore)(ctx.workspaces.list.subscribe, ctx.workspaces.list.getSnapshot, ctx.workspaces.list.getSnapshot);
|
|
7933
|
+
const [selectedWorkspaceId, setSelectedWorkspaceId] = (0, react.useState)();
|
|
7934
|
+
const currentCwd = sessions.current === void 0 ? void 0 : sessions.byId[sessions.current]?.cwd;
|
|
7935
|
+
const normalizePath = (value) => value.replace(/[\\/]+$/u, "");
|
|
7936
|
+
const effectiveWorkspace = currentCwd === void 0 ? void 0 : workspaces.items.find((workspace) => normalizePath(workspace.path) === normalizePath(currentCwd));
|
|
7937
|
+
const fallbackWorkspace = effectiveWorkspace ?? workspaces.items.find((workspace) => String(workspace.workspaceId) === String(workspaces.recentWorkspaceId)) ?? workspaces.items[0];
|
|
7938
|
+
const resolvedSelectedId = selectedWorkspaceId !== void 0 && workspaces.items.some((workspace) => String(workspace.workspaceId) === selectedWorkspaceId) ? selectedWorkspaceId : fallbackWorkspace === void 0 ? void 0 : String(fallbackWorkspace.workspaceId);
|
|
7939
|
+
(0, react.useEffect)(() => {
|
|
7940
|
+
if (resolvedSelectedId !== selectedWorkspaceId) setSelectedWorkspaceId(resolvedSelectedId);
|
|
7941
|
+
}, [resolvedSelectedId, selectedWorkspaceId]);
|
|
7942
|
+
const selection = (0, react.useMemo)(() => ({
|
|
7943
|
+
options: workspaces.items.map((workspace) => ({
|
|
7944
|
+
id: String(workspace.workspaceId),
|
|
7945
|
+
title: workspace.title,
|
|
7946
|
+
path: workspace.path
|
|
7947
|
+
})),
|
|
7948
|
+
...resolvedSelectedId === void 0 ? {} : { selectedWorkspaceId: resolvedSelectedId },
|
|
7949
|
+
...effectiveWorkspace === void 0 ? {} : { effectiveWorkspaceId: String(effectiveWorkspace.workspaceId) },
|
|
7950
|
+
onSelect: setSelectedWorkspaceId,
|
|
7951
|
+
onAlign: () => {
|
|
7952
|
+
if (effectiveWorkspace !== void 0) setSelectedWorkspaceId(String(effectiveWorkspace.workspaceId));
|
|
7953
|
+
}
|
|
7954
|
+
}), [
|
|
7955
|
+
effectiveWorkspace,
|
|
7956
|
+
resolvedSelectedId,
|
|
7957
|
+
workspaces.items
|
|
7958
|
+
]);
|
|
7959
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonView, {
|
|
7960
|
+
connection: ctx.connection,
|
|
7961
|
+
settingsScope: settings,
|
|
7962
|
+
...sessions.current === void 0 ? {} : { sessionId: sessions.current },
|
|
7963
|
+
...resolvedSelectedId === void 0 ? {} : { workspaceId: resolvedSelectedId },
|
|
7964
|
+
workspaceSelection: selection,
|
|
7965
|
+
t
|
|
7966
|
+
});
|
|
7967
|
+
}
|
|
7968
|
+
function conversationColumn() {
|
|
7969
|
+
return document.querySelector(CONVERSATION_COLUMN_SELECTOR) ?? void 0;
|
|
7970
|
+
}
|
|
7971
|
+
function mountPanel(controller, ctx, settings, t) {
|
|
7972
|
+
let root;
|
|
7973
|
+
let container;
|
|
7974
|
+
const ensure = () => {
|
|
7975
|
+
if (container !== void 0 && container.isConnected) return;
|
|
7976
|
+
if (container !== void 0) {
|
|
7977
|
+
root?.unmount();
|
|
7978
|
+
root = void 0;
|
|
7979
|
+
container = void 0;
|
|
7980
|
+
}
|
|
7981
|
+
const column = conversationColumn();
|
|
7982
|
+
if (column === void 0) return;
|
|
7983
|
+
container = document.createElement("div");
|
|
7984
|
+
container.dataset.dshMnemonView = "";
|
|
7985
|
+
container.className = MnemonWorkspace_module_css_default.panelView ?? "";
|
|
7986
|
+
column.append(container);
|
|
7987
|
+
root = (0, import_client.createRoot)(container);
|
|
7988
|
+
root.render(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonPanel, {
|
|
7989
|
+
ctx,
|
|
7990
|
+
settings,
|
|
7991
|
+
t
|
|
7992
|
+
}));
|
|
7993
|
+
};
|
|
7994
|
+
const waitObserver = new MutationObserver(ensure);
|
|
7995
|
+
waitObserver.observe(document.body, {
|
|
7996
|
+
childList: true,
|
|
7997
|
+
subtree: true
|
|
7998
|
+
});
|
|
7999
|
+
let suppressCompatibilityClose = false;
|
|
8000
|
+
const applyActive = () => {
|
|
8001
|
+
if (!controller.getSnapshot().open) {
|
|
8002
|
+
document.documentElement.removeAttribute(ACTIVE_ATTR);
|
|
8003
|
+
return;
|
|
8004
|
+
}
|
|
8005
|
+
suppressCompatibilityClose = true;
|
|
8006
|
+
document.dispatchEvent(new CustomEvent(ACTIVATE_EVENT, { detail: "ssh" }));
|
|
8007
|
+
document.dispatchEvent(new CustomEvent(ACTIVATE_EVENT, { detail: "taskboard" }));
|
|
8008
|
+
suppressCompatibilityClose = false;
|
|
8009
|
+
document.documentElement.removeAttribute(TASKBOARD_ACTIVE_ATTR);
|
|
8010
|
+
document.documentElement.removeAttribute(SSH_ACTIVE_ATTR);
|
|
8011
|
+
document.documentElement.setAttribute(ACTIVE_ATTR, "");
|
|
8012
|
+
document.dispatchEvent(new CustomEvent(ACTIVATE_EVENT, { detail: "mnemon" }));
|
|
8013
|
+
};
|
|
8014
|
+
const onOtherPanelActivate = (event) => {
|
|
8015
|
+
if (suppressCompatibilityClose || !controller.getSnapshot().open) return;
|
|
8016
|
+
const detail = event.detail;
|
|
8017
|
+
if (detail === "taskboard" || detail === "ssh") controller.close();
|
|
8018
|
+
};
|
|
8019
|
+
const onSidebarContextClick = (event) => {
|
|
8020
|
+
if (!controller.getSnapshot().open) return;
|
|
8021
|
+
const target = event.target;
|
|
8022
|
+
if (target instanceof Element && target.closest(SIDEBAR_CONTEXT_SELECTOR) !== null) controller.close();
|
|
8023
|
+
};
|
|
8024
|
+
const onAnchor = () => {
|
|
8025
|
+
controller.open();
|
|
8026
|
+
};
|
|
8027
|
+
document.addEventListener("click", onSidebarContextClick, true);
|
|
8028
|
+
document.addEventListener(ACTIVATE_EVENT, onOtherPanelActivate);
|
|
8029
|
+
window.addEventListener(MNEMON_ANCHOR_EVENT, onAnchor);
|
|
8030
|
+
const unsubscribe = controller.subscribe(applyActive);
|
|
8031
|
+
applyActive();
|
|
8032
|
+
ensure();
|
|
8033
|
+
return () => {
|
|
8034
|
+
document.removeEventListener("click", onSidebarContextClick, true);
|
|
8035
|
+
document.removeEventListener(ACTIVATE_EVENT, onOtherPanelActivate);
|
|
8036
|
+
window.removeEventListener(MNEMON_ANCHOR_EVENT, onAnchor);
|
|
8037
|
+
waitObserver.disconnect();
|
|
8038
|
+
unsubscribe();
|
|
8039
|
+
document.documentElement.removeAttribute(ACTIVE_ATTR);
|
|
8040
|
+
root?.unmount();
|
|
8041
|
+
root = void 0;
|
|
8042
|
+
container?.remove();
|
|
8043
|
+
container = void 0;
|
|
8044
|
+
};
|
|
8045
|
+
}
|
|
8046
|
+
/** Mount the sidebar row and its stateful center-column workspace as one unit. */
|
|
8047
|
+
function mountMnemonWorkspace(ctx, settings, t) {
|
|
8048
|
+
if (typeof document === "undefined" || typeof window === "undefined") return () => {};
|
|
8049
|
+
const controller = new MnemonWorkspaceController();
|
|
8050
|
+
const disposeEntry = mountMnemonSidebarEntry(controller, t);
|
|
8051
|
+
const disposePanel = mountPanel(controller, ctx, settings, t);
|
|
8052
|
+
return () => {
|
|
8053
|
+
disposePanel();
|
|
8054
|
+
disposeEntry();
|
|
8055
|
+
};
|
|
8056
|
+
}
|
|
8057
|
+
//#endregion
|
|
6242
8058
|
//#region src/client/index.ts
|
|
6243
8059
|
const inject = [
|
|
6244
8060
|
"slots",
|
|
8061
|
+
"sessions",
|
|
8062
|
+
"workspaces",
|
|
6245
8063
|
"connection",
|
|
6246
8064
|
"locale"
|
|
6247
8065
|
];
|
|
6248
|
-
|
|
6249
|
-
|
|
6250
|
-
|
|
6251
|
-
|
|
6252
|
-
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6256
|
-
|
|
6257
|
-
|
|
6258
|
-
|
|
8066
|
+
const INTERACTION_UNITS = {
|
|
8067
|
+
toolviews: {
|
|
8068
|
+
slot: "tool.call.toolview",
|
|
8069
|
+
enabled: (value) => enabledOf(value, "toolviews"),
|
|
8070
|
+
register(ctx, namespace, translate) {
|
|
8071
|
+
const disposers = [];
|
|
8072
|
+
for (const toolName of MNEMON_TOOLVIEW_NAMES) disposers.push(ctx.slots.register({
|
|
8073
|
+
name: "tool.call.toolview",
|
|
8074
|
+
key: toolName,
|
|
8075
|
+
locale: namespace,
|
|
8076
|
+
inject: (sessionId) => ({
|
|
8077
|
+
...typeof sessionId === "string" && sessionId !== "" ? { sessionId } : {},
|
|
8078
|
+
t: translate
|
|
8079
|
+
})
|
|
8080
|
+
}, MnemonToolView));
|
|
8081
|
+
return () => {
|
|
8082
|
+
for (const dispose of disposers.reverse()) dispose();
|
|
8083
|
+
};
|
|
8084
|
+
}
|
|
8085
|
+
},
|
|
8086
|
+
turnBar: {
|
|
8087
|
+
slot: "conversation.chat.turnTail",
|
|
8088
|
+
enabled: (value) => enabledOf(value, "turnBar"),
|
|
8089
|
+
register(ctx, namespace, translate) {
|
|
8090
|
+
return ctx.slots.register({
|
|
8091
|
+
name: "conversation.chat.turnTail",
|
|
8092
|
+
locale: namespace,
|
|
8093
|
+
select: selectMnemonTurnTail,
|
|
8094
|
+
inject: (sessionId) => ({
|
|
8095
|
+
...typeof sessionId === "string" && sessionId !== "" ? { sessionId } : {},
|
|
8096
|
+
connection: ctx.connection,
|
|
8097
|
+
t: translate
|
|
8098
|
+
})
|
|
8099
|
+
}, MnemonTurnTail);
|
|
8100
|
+
}
|
|
8101
|
+
},
|
|
8102
|
+
saveAction: {
|
|
8103
|
+
slot: "conversation.chat.assistant-actions",
|
|
8104
|
+
enabled: (value) => enabledOf(value, "saveAction"),
|
|
8105
|
+
register(ctx, namespace, translate) {
|
|
8106
|
+
return ctx.slots.register({
|
|
8107
|
+
name: "conversation.chat.assistant-actions",
|
|
8108
|
+
id: "mnemon-save",
|
|
8109
|
+
order: 90,
|
|
8110
|
+
locale: namespace,
|
|
8111
|
+
inject: (sessionId) => ({
|
|
8112
|
+
...typeof sessionId === "string" && sessionId !== "" ? { sessionId } : {},
|
|
8113
|
+
connection: ctx.connection,
|
|
8114
|
+
t: translate
|
|
8115
|
+
})
|
|
8116
|
+
}, MnemonSaveAction);
|
|
8117
|
+
}
|
|
8118
|
+
}
|
|
8119
|
+
};
|
|
8120
|
+
/** Interaction surfaces are opt-in: an explicit `true` in settings enables one. */
|
|
8121
|
+
function enabledOf(value, key) {
|
|
8122
|
+
return value?.[key] === true;
|
|
8123
|
+
}
|
|
8124
|
+
function mountBuildinMemoryView(ctx, settings, namespace, translate) {
|
|
8125
|
+
return ctx.slots.inject("conversation.view", () => ctx.slots.register({
|
|
6259
8126
|
name: "conversation.view",
|
|
6260
8127
|
id: "mnemon",
|
|
6261
8128
|
order: 30,
|
|
@@ -6267,16 +8134,74 @@ window.__ModuleLoader__.load({
|
|
|
6267
8134
|
t: translate
|
|
6268
8135
|
})
|
|
6269
8136
|
}, MnemonView));
|
|
6270
|
-
|
|
6271
|
-
|
|
8137
|
+
}
|
|
8138
|
+
/** Mount the memory workspace plus the optional in-conversation interaction surfaces. */
|
|
8139
|
+
function apply(rawContext) {
|
|
8140
|
+
const ctx = rawContext;
|
|
8141
|
+
const settings = new MnemonSettingsScope(ctx.connection, MNEMON_SETTINGS_NAMESPACE);
|
|
8142
|
+
const interactionSettings = new MnemonSettingsScope(ctx.connection, MNEMON_UI_SETTINGS_NAMESPACE);
|
|
8143
|
+
const namespace = "mnemon";
|
|
8144
|
+
ctx.effect(() => ctx.locale.register(namespace, {
|
|
8145
|
+
zh,
|
|
8146
|
+
en
|
|
8147
|
+
}), "dsh-mnemon: locale dictionaries");
|
|
8148
|
+
const translate = ctx.locale.bind(namespace);
|
|
8149
|
+
let activeMemoryWorkspace;
|
|
8150
|
+
const reconcileMemoryWorkspace = () => {
|
|
8151
|
+
const snapshot = settings.getSnapshot();
|
|
8152
|
+
const value = snapshot.value;
|
|
8153
|
+
const mode = snapshot.status === "loading" ? void 0 : value?.tabEnabled === false ? void 0 : value?.displayMode ?? "sidebar";
|
|
8154
|
+
if (activeMemoryWorkspace?.mode === mode) return;
|
|
8155
|
+
activeMemoryWorkspace?.dispose();
|
|
8156
|
+
activeMemoryWorkspace = mode === void 0 ? void 0 : {
|
|
8157
|
+
mode,
|
|
8158
|
+
dispose: mode === "buildin" ? mountBuildinMemoryView(ctx, settings, namespace, translate) : mountMnemonWorkspace(ctx, settings, translate)
|
|
8159
|
+
};
|
|
8160
|
+
};
|
|
8161
|
+
ctx.effect(() => {
|
|
8162
|
+
const unsubscribe = settings.subscribe(reconcileMemoryWorkspace);
|
|
8163
|
+
reconcileMemoryWorkspace();
|
|
8164
|
+
return () => {
|
|
8165
|
+
unsubscribe();
|
|
8166
|
+
activeMemoryWorkspace?.dispose();
|
|
8167
|
+
activeMemoryWorkspace = void 0;
|
|
8168
|
+
};
|
|
8169
|
+
}, "dsh-mnemon: configurable memory workspace");
|
|
8170
|
+
ctx.slots.inject("settings.section", () => ctx.slots.register({
|
|
8171
|
+
name: "settings.section",
|
|
6272
8172
|
id: "mnemon",
|
|
6273
|
-
order:
|
|
8173
|
+
order: 20,
|
|
8174
|
+
label: () => translate("tab.label"),
|
|
6274
8175
|
locale: namespace,
|
|
6275
8176
|
inject: () => ({
|
|
6276
8177
|
scope: settings,
|
|
8178
|
+
interactionScope: interactionSettings,
|
|
8179
|
+
connection: ctx.connection,
|
|
6277
8180
|
t: translate
|
|
6278
8181
|
})
|
|
6279
8182
|
}, MnemonSettingsCard));
|
|
8183
|
+
const active = /* @__PURE__ */ new Map();
|
|
8184
|
+
const reconcile = () => {
|
|
8185
|
+
const value = interactionSettings.getSnapshot().value;
|
|
8186
|
+
for (const key of Object.keys(INTERACTION_UNITS)) {
|
|
8187
|
+
const unit = INTERACTION_UNITS[key];
|
|
8188
|
+
const enabled = unit.enabled(value);
|
|
8189
|
+
if (enabled && !active.has(key)) active.set(key, ctx.slots.inject(unit.slot, () => unit.register(ctx, namespace, translate)));
|
|
8190
|
+
else if (!enabled && active.has(key)) {
|
|
8191
|
+
active.get(key)();
|
|
8192
|
+
active.delete(key);
|
|
8193
|
+
}
|
|
8194
|
+
}
|
|
8195
|
+
};
|
|
8196
|
+
ctx.effect(() => {
|
|
8197
|
+
const unsubscribe = interactionSettings.subscribe(reconcile);
|
|
8198
|
+
reconcile();
|
|
8199
|
+
return () => {
|
|
8200
|
+
unsubscribe();
|
|
8201
|
+
for (const dispose of [...active.values()].reverse()) dispose();
|
|
8202
|
+
active.clear();
|
|
8203
|
+
};
|
|
8204
|
+
}, "dsh-mnemon: interaction surfaces");
|
|
6280
8205
|
}
|
|
6281
8206
|
//#endregion
|
|
6282
8207
|
exports.apply = apply;
|