dsh-mnemon-source-runtime 0.5.8 → 0.5.10

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.md CHANGED
@@ -19,6 +19,8 @@ Choose an existing data authority deliberately. Without `dataDir`, each stable S
19
19
 
20
20
  Disabling participation does not delete stored entries. Source data remains separate from the current turn's projection and access grants.
21
21
 
22
+ Model projections annotate each entry with its recorded importance and elapsed whole-day ages, for example `[importance=critical; created=14d; updated=2d]`, followed by the exact content. Future timestamps show `future`; unparseable ones show `unknown`. Ages are captured once per projection and remain fixed for that turn. Annotations count toward the Strategy's projection budget, but do not change stored JSON/Markdown, content matching or storage capacity. For replacement/removal, use only the entry content. Current instructions retain priority.
23
+
22
24
  ## Source-owned UI and tests
23
25
 
24
26
  The optional `./client` entry is an ordinary DSH Client plugin. This package owns its pages and `presentation/` resources and uses `dsh-mnemon/client` for the shared frame and scoped management client. It never receives a Host Context, credentials or another Source's controller.
package/lib/client.js CHANGED
@@ -104,7 +104,7 @@ window.__ModuleLoader__.load({
104
104
  };
105
105
  //#endregion
106
106
  //#region \0source-css:/home/runner/work/dsh-mnemon/dsh-mnemon/plugins/dsh-mnemon-source-runtime/presentation/page.module.css.mjs
107
- const css$2 = ".IIa07q_runtimeComposer{border:1px solid var(--mn-line);background:var(--mn-layer-1);background:linear-gradient(135deg, color-mix(in srgb, var(--mn-accent) 5%, var(--mn-layer-1)), var(--mn-layer-1) 55%);border-radius:12px;margin-bottom:13px;padding:15px}.IIa07q_runtimeComposerHeading{justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:11px;display:flex}.IIa07q_runtimeComposerHeading h3{margin:0 0 2px;font-size:14px}.IIa07q_runtimeComposerHeading p{color:var(--mn-muted);margin:0;font-size:10px}.IIa07q_runtimeComposerHeading>span{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 9px var(--mn-code);border-radius:999px;flex:none;padding:4px 8px}.IIa07q_runtimeComposer>textarea,.IIa07q_runtimeEntry textarea{resize:vertical;border:1px solid var(--mn-line);width:100%;color:var(--mn-text);background:var(--mn-input);border-radius:9px;outline:0;padding:10px 11px;line-height:1.6}.IIa07q_runtimeComposer>textarea:focus,.IIa07q_runtimeEntry textarea:focus{border-color:var(--mn-accent)}.IIa07q_runtimeComposerActions{justify-content:flex-end;align-items:flex-end;gap:9px;margin-top:10px;display:flex}.IIa07q_runtimeComposerActions label{color:var(--mn-faint);gap:4px;font-size:9px;display:grid}.IIa07q_runtimeComposerActions select,.IIa07q_runtimeEntry select{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;outline:0;min-width:135px;height:34px;padding:0 8px}.IIa07q_runtimeReadOnly{border:1px solid color-mix(in srgb, var(--mn-success) 28%, var(--mn-line));color:var(--mn-muted);background:color-mix(in srgb, var(--mn-success) 6%, var(--mn-layer-1));border-color:var(--mn-line);background:var(--mn-layer-1);border-radius:9px;margin-bottom:13px;padding:9px 12px;font-size:11px}.IIa07q_runtimeSummaryGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:10px;display:grid}.IIa07q_runtimeSummaryCard{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;min-width:0}.IIa07q_runtimeBrowser{border:1px solid var(--mn-line);background:var(--mn-layer-1);border-radius:11px;overflow:hidden}.IIa07q_runtimeBrowserToolbar{border-bottom:1px solid var(--mn-line);justify-content:space-between;align-items:center;gap:12px;padding:10px;display:flex}.IIa07q_runtimeScopeFilter{flex-wrap:wrap;align-items:center;gap:3px;display:flex}.IIa07q_runtimeScopeFilter button{min-height:32px;color:var(--mn-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:7px;padding:0 10px}.IIa07q_runtimeScopeFilter button:hover{background:var(--mn-hover)}.IIa07q_runtimeScopeFilter button[data-active]{border-color:var(--mn-line);color:var(--mn-text);background:var(--mn-layer-2)}.IIa07q_runtimeScopeFilter b{color:var(--mn-faint);font:600 10px var(--mn-code);margin-left:4px}.IIa07q_runtimeFilterQuery{border:1px solid var(--mn-line);background:var(--mn-input);border-radius:8px;align-items:center;gap:7px;width:min(320px,42%);min-width:210px;padding:0 9px;display:flex}.IIa07q_runtimeFilterQuery>span{color:var(--mn-faint)}.IIa07q_runtimeFilterQuery input{width:100%;min-width:0;height:32px;color:var(--mn-text);background:0 0;border:0;outline:0}.IIa07q_runtimeUnifiedList{background:color-mix(in srgb, var(--mn-layer-2) 30%, var(--mn-layer-1));grid-template-columns:1fr;gap:8px;padding:10px;display:grid}.IIa07q_runtimeEntryBadges{flex-wrap:wrap;align-items:center;gap:5px;display:flex}.IIa07q_runtimeEntryMeta .IIa07q_runtimeEntryTarget{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 8%, var(--mn-layer-2));font-family:var(--mn-code)}.IIa07q_runtimeEntryMeta .IIa07q_runtimeEntryBranch{text-overflow:ellipsis;white-space:nowrap;max-width:140px;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 8%, var(--mn-layer-2));font-family:var(--mn-code);overflow:hidden}.IIa07q_runtimeComposerBranch{color:var(--mn-faint);gap:4px;font-size:9px;display:grid}.IIa07q_runtimeComposerBranch input{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}.IIa07q_runtimeComposerBranch input:focus{border-color:var(--mn-accent)}.IIa07q_bodyEditBranch{color:var(--mn-faint);gap:4px;font-size:9px;display:grid}.IIa07q_bodyEditBranch input{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}.IIa07q_bodyEditBranch input:focus{border-color:var(--mn-accent)}.IIa07q_bodyEditBranch small{color:var(--mn-faint);font-size:9px}.IIa07q_runtimeTargetHeader{justify-content:space-between;align-items:center;gap:14px;padding:14px 15px 9px;display:flex}.IIa07q_runtimeTargetHeader>div{gap:1px;display:grid}.IIa07q_runtimeTargetHeader span{color:var(--mn-faint);font:650 9px var(--mn-code);letter-spacing:.08em}.IIa07q_runtimeTargetHeader h3{margin:0;font-size:15px}.IIa07q_runtimeTargetHeader>strong{min-width:28px;height:28px;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 9%, transparent);font:650 11px var(--mn-code);border-radius:8px;place-items:center;display:grid}.IIa07q_capacityLine{align-items:center;gap:9px;padding:0 15px;display:flex}.IIa07q_capacityLine>div{background:var(--mn-layer-2);border-radius:999px;flex:1;height:4px;overflow:hidden}.IIa07q_capacityLine i{border-radius:inherit;background:var(--mn-success);height:100%;transition:width .25s;display:block}.IIa07q_capacityLine>span{min-width:88px;color:var(--mn-faint);font:9px var(--mn-code);text-align:right}.IIa07q_runtimeTargetDescription{min-height:31px;color:var(--mn-muted);margin:8px 15px 12px;font-size:10px}.IIa07q_runtimeEntry{--mn-provider-color:var(--mn-accent);border:1px solid var(--mn-line);background:linear-gradient(90deg, color-mix(in srgb, var(--mn-provider-color) 5%, var(--mn-layer-1)), var(--mn-layer-1) 34%);box-shadow:inset 3px 0 0 color-mix(in srgb, var(--mn-provider-color) 68%, transparent);border-radius:8px;padding:11px 12px 10px;position:relative}.IIa07q_runtimeEntry[data-importance=critical]{--mn-provider-color:var(--mn-priority)}.IIa07q_runtimeEntry[data-importance=low]{--mn-provider-color:var(--mn-faint)}.IIa07q_runtimeEntryMeta{justify-content:space-between;align-items:center;gap:12px;display:flex}.IIa07q_runtimeEntryMeta>span,.IIa07q_runtimeEntryBadges>span{color:var(--mn-muted);background:var(--mn-layer-2);border-radius:999px;padding:2px 6px;font-size:9px}.IIa07q_runtimeEntry[data-importance=critical] .IIa07q_runtimeEntryMeta>span,.IIa07q_runtimeEntry[data-importance=critical] .IIa07q_runtimeEntryBadges>span:not(.IIa07q_runtimeEntryTarget){color:var(--mn-priority);background:color-mix(in srgb, var(--mn-priority) 9%, transparent)}.IIa07q_runtimeEntryMeta time{color:var(--mn-faint);font:8px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_runtimeEntry>p{white-space:pre-wrap;overflow-wrap:anywhere;min-height:42px;margin:9px 0;font-size:12px;line-height:1.6}.IIa07q_runtimeEntry>select{margin-top:7px}.IIa07q_runtimeEntry footer{border-top:1px solid var(--mn-line);justify-content:flex-end;align-items:center;gap:4px;min-height:30px;margin-top:7px;padding-top:7px;display:flex}.IIa07q_runtimeEntry footer>span{color:var(--mn-danger);margin-right:auto;font-size:10px}.IIa07q_runtimeEmpty{min-height:126px;color:var(--mn-faint);text-align:center;align-content:center;place-items:center;gap:5px;display:grid}.IIa07q_runtimeEmpty>span{font:24px var(--mn-code);opacity:.65}.IIa07q_runtimeEmpty p{margin:0;font-size:10px}@media (width<=1000px){.IIa07q_runtimeSummaryGrid{grid-template-columns:1fr}}@media (width<=760px){.IIa07q_runtimeComposerHeading,.IIa07q_runtimeComposerActions{flex-direction:column;align-items:stretch}.IIa07q_runtimeComposerActions select,.IIa07q_runtimeComposerActions button{width:100%}.IIa07q_runtimeBrowserToolbar{flex-direction:column;align-items:stretch}.IIa07q_runtimeFilterQuery{width:100%;min-width:0}}";
107
+ const css$2 = ".IIa07q_runtimeComposer{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:12px;padding:16px}.IIa07q_runtimeComposerHeading{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:12px;display:flex}.IIa07q_runtimeComposerHeading h3{margin:0 0 2px;font-size:14px;font-weight:500;line-height:22px}.IIa07q_runtimeComposerHeading p{color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_runtimeComposerHeading>span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_runtimeComposer>textarea,.IIa07q_runtimeEntry textarea{resize:vertical;border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;color:var(--mn-text);background:var(--mn-input);outline:0;padding:8px 10px;font-size:13px;line-height:20px}.IIa07q_runtimeComposer>textarea:focus,.IIa07q_runtimeEntry textarea:focus{border-color:var(--mn-accent)}.IIa07q_runtimeComposerActions{justify-content:flex-end;align-items:flex-end;gap:8px;margin-top:12px;display:flex}.IIa07q_runtimeComposerActions label{color:var(--mn-muted);gap:6px;font-size:12px;font-weight:500;line-height:18px;display:grid}.IIa07q_runtimeComposerActions select,.IIa07q_runtimeEntry select{border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);min-width:136px;height:32px;color:var(--mn-text);background:var(--mn-input);outline:0;padding:0 10px;font-size:13px}.IIa07q_runtimeReadOnly{border-radius:var(--dsw-radius-md);color:var(--mn-muted);background:var(--mn-fill);margin-bottom:12px;padding:8px 12px;font-size:12px;line-height:18px}.IIa07q_runtimeSummaryGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:12px;display:grid}.IIa07q_runtimeSummaryCard{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);min-width:0}.IIa07q_runtimeBrowser{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);overflow:hidden}.IIa07q_runtimeBrowserToolbar{border-bottom:.5px solid var(--mn-line);justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}.IIa07q_runtimeScopeFilter{border-radius:var(--dsw-radius-md);background:var(--mn-hover);flex-wrap:wrap;align-items:center;gap:2px;padding:3px;display:inline-flex}.IIa07q_runtimeScopeFilter button{border-radius:var(--dsw-radius-sm);min-height:28px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;padding:0 12px;font-size:13px;font-weight:500;line-height:20px}.IIa07q_runtimeScopeFilter button:hover{color:var(--mn-text)}.IIa07q_runtimeScopeFilter button[data-active]{color:var(--mn-text);background:var(--mn-layer-1);box-shadow:var(--dsw-elevation-soft)}.IIa07q_runtimeScopeFilter b{color:var(--mn-faint);font-variant-numeric:tabular-nums;margin-left:6px;font-size:12px;font-weight:400}.IIa07q_runtimeFilterQuery{border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);background:var(--mn-input);align-items:center;gap:6px;width:min(320px,42%);min-width:210px;padding:0 10px;display:flex}.IIa07q_runtimeFilterQuery:focus-within{border-color:var(--mn-accent)}.IIa07q_runtimeFilterQuery>span{color:var(--mn-faint)}.IIa07q_runtimeFilterQuery input{width:100%;min-width:0;height:32px;color:var(--mn-text);background:0 0;border:0;outline:0;font-size:13px}.IIa07q_runtimeFilterQuery input::placeholder{color:var(--dsw-alias-label-dimmed)}.IIa07q_runtimeUnifiedList{grid-template-columns:1fr;gap:8px;padding:12px;display:grid}.IIa07q_runtimeEntryBadges{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.IIa07q_runtimeEntryMeta .IIa07q_runtimeEntryTarget{color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 10%, transparent)}.IIa07q_runtimeEntryMeta .IIa07q_runtimeEntryBranch{text-overflow:ellipsis;white-space:nowrap;max-width:140px;color:var(--mn-muted);background:var(--mn-fill);font-family:var(--mn-code);overflow:hidden}.IIa07q_runtimeComposerBranch{color:var(--mn-muted);gap:6px;font-size:12px;font-weight:500;line-height:18px;display:grid}.IIa07q_runtimeComposerBranch input{border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;height:32px;color:var(--mn-text);background:var(--mn-input);outline:0;padding:0 10px;font-size:13px;font-weight:400}.IIa07q_runtimeComposerBranch input:focus{border-color:var(--mn-accent)}.IIa07q_bodyEditBranch{color:var(--mn-muted);gap:6px;font-size:12px;font-weight:500;line-height:18px;display:grid}.IIa07q_bodyEditBranch input{border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;height:32px;color:var(--mn-text);background:var(--mn-input);outline:0;padding:0 10px;font-size:13px;font-weight:400}.IIa07q_bodyEditBranch input:focus{border-color:var(--mn-accent)}.IIa07q_bodyEditBranch small{color:var(--mn-faint);font-size:12px;font-weight:400}.IIa07q_runtimeTargetHeader{justify-content:space-between;align-items:center;gap:16px;padding:14px 16px 8px;display:flex}.IIa07q_runtimeTargetHeader>div{gap:0;display:grid}.IIa07q_runtimeTargetHeader span{color:var(--mn-faint);font-family:var(--mn-code);font-size:11px;line-height:16px}.IIa07q_runtimeTargetHeader h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_runtimeTargetHeader>strong{color:var(--mn-muted);background:var(--mn-fill);font-variant-numeric:tabular-nums;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_capacityLine{align-items:center;gap:10px;padding:0 16px;display:flex}.IIa07q_capacityLine>div{background:var(--mn-fill);border-radius:999px;flex:1;height:4px;overflow:hidden}.IIa07q_capacityLine i{border-radius:inherit;background:var(--dsw-alias-brand-primary);height:100%;transition:width .25s;display:block}.IIa07q_capacityLine>span{min-width:88px;color:var(--mn-faint);text-align:right;font-variant-numeric:tabular-nums;font-size:11px}.IIa07q_runtimeTargetDescription{min-height:36px;color:var(--mn-faint);margin:8px 16px 14px;font-size:12px;line-height:18px}.IIa07q_runtimeEntry{--mn-provider-color:var(--mn-accent);border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-md);padding:12px 14px 10px;position:relative}.IIa07q_runtimeEntry[data-importance=critical]{--mn-provider-color:var(--mn-priority)}.IIa07q_runtimeEntry[data-importance=low]{--mn-provider-color:var(--mn-faint)}.IIa07q_runtimeEntryMeta{justify-content:space-between;align-items:center;gap:12px;display:flex}.IIa07q_runtimeEntryMeta>span,.IIa07q_runtimeEntryBadges>span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_runtimeEntry[data-importance=critical] .IIa07q_runtimeEntryMeta>span,.IIa07q_runtimeEntry[data-importance=critical] .IIa07q_runtimeEntryBadges>span:not(.IIa07q_runtimeEntryTarget){color:var(--mn-warn);background:color-mix(in srgb, var(--mn-warn) 12%, transparent)}.IIa07q_runtimeEntryMeta time{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;font-size:11px;overflow:hidden}.IIa07q_runtimeEntry>p{white-space:pre-wrap;overflow-wrap:anywhere;min-height:40px;margin:8px 0;font-size:14px;line-height:22px}.IIa07q_runtimeEntry>select{margin-top:8px}.IIa07q_runtimeEntry footer{border-top:.5px solid var(--mn-line);justify-content:flex-end;align-items:center;gap:8px;min-height:32px;margin-top:8px;padding-top:8px;display:flex}.IIa07q_runtimeEntry footer>span{color:var(--mn-danger);margin-right:auto;font-size:12px}.IIa07q_runtimeEmpty{min-height:128px;color:var(--mn-faint);text-align:center;align-content:center;place-items:center;gap:6px;display:grid}.IIa07q_runtimeEmpty>span{font-size:20px;line-height:1}.IIa07q_runtimeEmpty p{margin:0;font-size:13px;line-height:20px}@media (width<=1000px){.IIa07q_runtimeSummaryGrid{grid-template-columns:1fr}}@media (width<=760px){.IIa07q_runtimeComposerHeading,.IIa07q_runtimeComposerActions{flex-direction:column;align-items:stretch}.IIa07q_runtimeComposerActions select,.IIa07q_runtimeComposerActions button{width:100%}.IIa07q_runtimeBrowserToolbar{flex-direction:column;align-items:stretch}.IIa07q_runtimeFilterQuery{width:100%;min-width:0}}";
108
108
  const id$1 = "dsh-mnemon-source-runtime/presentation/page.module.css";
109
109
  if (typeof document !== "undefined") {
110
110
  let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(id$1) + "]");
@@ -141,7 +141,7 @@ window.__ModuleLoader__.load({
141
141
  };
142
142
  //#endregion
143
143
  //#region \0source-css:/home/runner/work/dsh-mnemon/dsh-mnemon/plugins/dsh-mnemon-source-runtime/presentation/sidebar.module.css.mjs
144
- const css$1 = "._Bh55G_shell ._Bh55G_modal form[class*=runtimeComposer]{background:0 0;border:0;border-radius:0;margin:0;padding:0}._Bh55G_shell ._Bh55G_modal form[class*=runtimeComposer]>[class*=runtimeComposerHeading]{display:none}._Bh55G_shell [class*=runtimeComposerActions] label{color:var(--dsw-alias-label-secondary);gap:5px;font-size:12px;font-weight:500}._Bh55G_shell [class*=runtimeComposer]>textarea,._Bh55G_shell [class*=runtimeComposerActions] select,._Bh55G_shell [class*=runtimeEntry] select{border:1px solid var(--dsw-alias-border-l2);min-height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border-radius:8px;padding:7px 10px;font-size:13px;font-weight:400}._Bh55G_shell [class*=runtimeTargetDescription]{font-size:12px}._Bh55G_shell [class*=runtimeEntryMeta]>span,._Bh55G_shell [class*=runtimeEntryBadges]>span,._Bh55G_shell [class*=runtimeEntryMeta] time{font-size:11px}._Bh55G_shell [class*=runtimeEntry]>p{font-size:13px}._Bh55G_shell [class*=runtimeEntryBadges]>span{border:1px solid var(--dsw-alias-border-l1);min-height:22px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-radius:999px;align-items:center;padding:0 8px;font-size:11px;font-weight:400;line-height:20px;display:inline-flex}._Bh55G_shell [class*=runtimeEntryBadges]>[class*=runtimeEntryTarget]{border-color:color-mix(in srgb, var(--dsw-alias-state-business-primary) 30%, var(--dsw-alias-border-l1));color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 7%, var(--dsw-alias-bg-layer-1));font-family:var(--dsw-font-family);font-weight:500}._Bh55G_shell [class*=runtimeEntry][data-importance=critical] [class*=runtimeEntryBadges]>span:last-child{border-color:color-mix(in srgb, var(--dsw-alias-state-error-primary) 24%, var(--dsw-alias-border-l1));color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 6%, var(--dsw-alias-bg-layer-1))}._Bh55G_shell [class*=runtimeEntry] footer{gap:6px}";
144
+ const css$1 = "._Bh55G_shell ._Bh55G_modal form[class*=runtimeComposer]{background:0 0;border:0;border-radius:0;margin:0;padding:0}._Bh55G_shell ._Bh55G_modal form[class*=runtimeComposer]>[class*=runtimeComposerHeading]{display:none}._Bh55G_shell [class*=runtimeEntryBadges]>span{border-radius:999px;align-items:center;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex}._Bh55G_shell [class*=runtimeEntryBadges]>[class*=runtimeEntryTarget]{color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 10%, transparent);font-family:var(--dsw-font-family)}._Bh55G_shell [class*=runtimeEntry][data-importance=critical] [class*=runtimeEntryBadges]>span:last-child{color:var(--dsw-alias-state-warn-primary);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent)}";
145
145
  const id = "dsh-mnemon-source-runtime/presentation/sidebar.module.css";
146
146
  if (typeof document !== "undefined") {
147
147
  let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(id) + "]");
@@ -746,7 +746,7 @@ window.__ModuleLoader__.load({
746
746
  }
747
747
  const inject = ["slots", "locale"];
748
748
  function apply(ctx) {
749
- installRuntimeMemoryUI(ctx, ctx.locale?.bind("mnemon") ?? dsh_mnemon_client.translateEn);
749
+ installRuntimeMemoryUI(ctx, ctx.locale.bind("mnemon"));
750
750
  }
751
751
  //#endregion
752
752
  exports.RuntimePage = RuntimePage;
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { RUNTIME_ENTRY_DELIMITER, RUNTIME_MEMORY_LIMITS, RUNTIME_MEMORY_VERSION, RuntimeMemoryAction, RuntimeMemoryCompactedEntry, RuntimeMemoryEntry, RuntimeMemoryImportance, RuntimeMemoryLimits, RuntimeMemoryMaintenancePlan, RuntimeMemoryMutation, RuntimeMemoryMutationResult, RuntimeMemorySnapshot, RuntimeMemoryTarget, RuntimeMemoryTargetView, RuntimeMemoryUsage } from "./contracts.js";
2
- import z from "schemastery";
2
+ import z from "@deepseek-ai/schemastery";
3
3
  import { MemorySourceDefinition } from "dsh-mnemon/contracts";
4
4
  import { Context } from "@deepseek-ai/cordis";
5
5
  //#region src/config.d.ts
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@ import { n as RUNTIME_MEMORY_LIMITS, o as MAX_RUNTIME_MEMORY_LIMIT_BYTES, t as R
2
2
  import { createMemoryMutationReceipt, defineMemoryPlugin, defineMemorySource, installMemory, memoryConfigurationDigest, memoryInputRecord, memoryInputStringArray, memoryInputText, truncateMemoryText } from "dsh-mnemon/extension-sdk";
3
3
  import { homedir } from "node:os";
4
4
  import { basename, isAbsolute, join } from "node:path";
5
- import z from "schemastery";
5
+ import z from "@deepseek-ai/schemastery";
6
6
  import { COMPOSABLE_MEMORY_API_VERSION } from "dsh-mnemon/contracts";
7
7
  import { execFileSync } from "node:child_process";
8
8
  import { closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -162,6 +162,16 @@ function markdown(entries, target) {
162
162
  const content = entries.filter((entry) => entry.target === target).map((entry) => entry.content).join(RUNTIME_ENTRY_DELIMITER);
163
163
  return content === "" ? "" : `${content}\n`;
164
164
  }
165
+ function age(timestamp, projectedAt) {
166
+ const time = Date.parse(timestamp);
167
+ if (!Number.isFinite(time)) return "unknown";
168
+ if (time > projectedAt) return "future";
169
+ return `${Math.floor((projectedAt - time) / 864e5)}d`;
170
+ }
171
+ /** Prompt-only annotations; stored content, matching and capacity stay unchanged. */
172
+ function contextMarkdown(entries, target, projectedAt) {
173
+ return entries.filter((entry) => entry.target === target).map((entry) => `[importance=${entry.importance}; created=${age(entry.created_at, projectedAt)}; updated=${age(entry.updated_at, projectedAt)}]\n${entry.content}`).join(RUNTIME_ENTRY_DELIMITER);
174
+ }
165
175
  function revision(file) {
166
176
  return createHash("sha256").update(JSON.stringify(file)).digest("hex");
167
177
  }
@@ -299,7 +309,7 @@ function sleepSync(milliseconds) {
299
309
  }
300
310
  /**
301
311
  * Single authority for hot memory. JSON is the durable source of truth;
302
- * Markdown files are deterministic projections consumed by prompt assembly.
312
+ * Markdown files retain plain content; prompt projections add recorded metadata.
303
313
  */
304
314
  var RuntimeMemoryController = class RuntimeMemoryController {
305
315
  now;
@@ -340,9 +350,6 @@ var RuntimeMemoryController = class RuntimeMemoryController {
340
350
  entries: [...global.entries.filter((entry) => entry.target === "user"), ...local.entries.filter((entry) => entry.target === "memory")]
341
351
  });
342
352
  }
343
- contextText(branch) {
344
- return this.contextProjection(branch).text;
345
- }
346
353
  /**
347
354
  * Read the exact Runtime revision and its prompt projection from each
348
355
  * configured authority root.
@@ -352,8 +359,9 @@ var RuntimeMemoryController = class RuntimeMemoryController {
352
359
  */
353
360
  contextProjection(branch) {
354
361
  const branchScope = scopeBranch(branch);
355
- const local = this.localContextProjection(branchScope);
356
- const global = this.userController?.localContextProjection();
362
+ const projectedAt = this.now().getTime();
363
+ const local = this.localContextProjection(projectedAt, branchScope);
364
+ const global = this.userController?.localContextProjection(projectedAt);
357
365
  const user = global?.user ?? local.user;
358
366
  const memory = local.memory;
359
367
  const entries = global === void 0 ? local.snapshot.entries : [...global.snapshot.entries.filter((entry) => entry.target === "user"), ...local.snapshot.entries.filter((entry) => entry.target === "memory")];
@@ -366,7 +374,7 @@ var RuntimeMemoryController = class RuntimeMemoryController {
366
374
  version: 1,
367
375
  entries
368
376
  }),
369
- generatedAt: this.now().toISOString(),
377
+ generatedAt: new Date(projectedAt).toISOString(),
370
378
  entries,
371
379
  targets: {
372
380
  memory: {
@@ -392,6 +400,7 @@ var RuntimeMemoryController = class RuntimeMemoryController {
392
400
  totalEntries: entries.length,
393
401
  text: `MNEMON RUNTIME MEMORY SNAPSHOT
394
402
  Revision: ${snapshot.revision}${branchLine}
403
+ Metadata lines are annotations; created/updated are ages at projection in whole days (future/unknown for future/invalid timestamps). Current instructions win. For old_text/oldText, use entry content only.
395
404
 
396
405
  Contents of USER.md (user profile; entries: ${visibleUser.entryCount}; UTF-8 bytes: ${storeUser.used}/${storeUser.limit})
397
406
  <runtime-memory-file name="USER.md">
@@ -404,7 +413,7 @@ ${memory || "(empty)"}
404
413
  </runtime-memory-file>`
405
414
  };
406
415
  }
407
- localContextProjection(branch) {
416
+ localContextProjection(projectedAt, branch) {
408
417
  const branchScope = scopeBranch(branch);
409
418
  return this.withLock(() => {
410
419
  const file = this.readSource();
@@ -416,15 +425,15 @@ ${memory || "(empty)"}
416
425
  directory: this.directory,
417
426
  sourcePath: this.sourcePath,
418
427
  revision: revision(file),
419
- generatedAt: this.now().toISOString(),
428
+ generatedAt: new Date(projectedAt).toISOString(),
420
429
  entries,
421
430
  targets: {
422
431
  memory: this.targetView(visible, "memory"),
423
432
  user: this.targetView(visible, "user")
424
433
  }
425
434
  },
426
- user: readFileSync(this.localUserPath, "utf8").trimEnd(),
427
- memory: branchScope === void 0 ? readFileSync(this.memoryPath, "utf8").trimEnd() : markdown(visible, "memory").trimEnd(),
435
+ user: contextMarkdown(visible, "user", projectedAt),
436
+ memory: contextMarkdown(visible, "memory", projectedAt),
428
437
  hidden: branchScope === void 0 ? 0 : entries.length - visible.length
429
438
  };
430
439
  });
@@ -492,32 +501,6 @@ ${memory || "(empty)"}
492
501
  this.queue = operation.catch(() => void 0);
493
502
  return operation;
494
503
  }
495
- /** Apply an LLM-produced compaction only to the exact snapshot it reviewed. */
496
- compactTarget(expectedRevision, target, compacted, maxBytes) {
497
- if (target === "user" && this.userController !== void 0) return this.userController.compactTarget(expectedRevision, target, compacted, maxBytes).then(() => this.snapshot());
498
- const operation = this.queue.then(() => this.withLock(() => {
499
- const file = this.readSource();
500
- if (revision(file) !== expectedRevision) throw new RuntimeMemoryConflictError();
501
- const byteBudget = maxBytes ?? this.limits[target];
502
- if (!Number.isInteger(byteBudget) || byteBudget < 0 || byteBudget > this.limits[target]) throw new Error("compaction byte budget is invalid");
503
- const now = this.now().toISOString();
504
- const fitted = packCompactionCandidates(compactionCandidates(compacted, file.entries.filter((entry) => entry.target === target), target, now), target, byteBudget);
505
- const entries = [...file.entries.filter((entry) => entry.target !== target), ...fitted];
506
- const used = byteCount(entries, target);
507
- const limit = this.limits[target];
508
- if (used > limit) throw new RuntimeMemoryCapacityError(target, byteCount(file.entries, target), used, limit);
509
- this.persist({
510
- version: 1,
511
- entries
512
- });
513
- return this.snapshotUnlocked({
514
- version: 1,
515
- entries
516
- });
517
- }));
518
- this.queue = operation.catch(() => void 0);
519
- return this.userController === void 0 ? operation : operation.then(() => this.snapshot());
520
- }
521
504
  initialize() {
522
505
  mkdirSync(this.directory, {
523
506
  recursive: true,
@@ -737,7 +720,7 @@ function createRuntimeMemorySource(config = {}) {
737
720
  content: { type: "string" },
738
721
  oldText: {
739
722
  type: "string",
740
- description: "Full content of the existing entry, or a unique substring. A unique full-content match takes precedence within the selected target. Required for replace and remove."
723
+ description: "Full content of the existing entry, or a unique substring, excluding the generated metadata line. A unique full-content match takes precedence within the selected target. Required for replace and remove."
741
724
  },
742
725
  importance: {
743
726
  type: "string",
@@ -879,8 +862,8 @@ const memoryPlugin = defineMemoryPlugin({
879
862
  "zh-CN": "运行时记忆"
880
863
  },
881
864
  description: {
882
- en: "Working context for the current runtime and task.",
883
- "zh-CN": "当前运行环境与任务使用的工作上下文。"
865
+ en: "Bounded, deterministic hot memory injected directly into every eligible turn.",
866
+ "zh-CN": "有界且确定的热记忆,在每个符合条件的回合中直接注入。"
884
867
  },
885
868
  roles: ["source"],
886
869
  provides: [{ id: "source" }, { id: "source.working-context" }]
package/locale/en.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Runtime memory",
4
+ "description": "Bounded, deterministic hot memory injected directly into every eligible turn."
5
+ }
6
+ }
package/locale/zh.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "运行时记忆",
4
+ "description": "有界且确定的热记忆,在每个符合条件的回合中直接注入。"
5
+ }
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-mnemon-source-runtime",
3
- "version": "0.5.8",
3
+ "version": "0.5.10",
4
4
  "description": "Self-contained runtime Source for Composable View Memory.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -13,6 +13,7 @@
13
13
  "default": "./lib/index.js"
14
14
  },
15
15
  "./package.json": "./package.json",
16
+ "./locale/*.json": "./locale/*.json",
16
17
  "./client": {
17
18
  "types": "./lib/types/client.d.ts",
18
19
  "default": "./lib/client.js"
@@ -27,14 +28,12 @@
27
28
  },
28
29
  "files": [
29
30
  "lib",
31
+ "locale",
30
32
  "README.md",
31
33
  "presentation"
32
34
  ],
33
35
  "dsh": {
34
36
  "client": {
35
- "inject": [
36
- "slots"
37
- ],
38
37
  "platform": "web",
39
38
  "external": [
40
39
  "dsh-mnemon/client"
@@ -48,7 +47,7 @@
48
47
  "verify": "pnpm typecheck && pnpm test && pnpm build"
49
48
  },
50
49
  "dependencies": {
51
- "schemastery": "^3.18.0"
50
+ "@deepseek-ai/schemastery": "^3.18.4"
52
51
  },
53
52
  "peerDependencies": {
54
53
  "@deepseek-ai/cordis": "^4.0.1",
@@ -56,12 +55,12 @@
56
55
  "react": "^18.2.0"
57
56
  },
58
57
  "devDependencies": {
59
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.5-rc.1",
58
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.2",
60
59
  "@testing-library/react": "^16.3.0",
61
60
  "@types/node": "^22.0.0",
62
61
  "@types/react": "^18.3.0",
63
62
  "@types/react-dom": "^18.3.0",
64
- "dsh-mnemon": "^0.5.11",
63
+ "dsh-mnemon": "^0.5.17",
65
64
  "jsdom": "^26.0.0",
66
65
  "react": "^18.2.0",
67
66
  "react-dom": "^18.2.0",
@@ -84,7 +83,14 @@
84
83
  "micromark-util-classify-character": "^2.0.1",
85
84
  "micromark-util-sanitize-uri": "^2.0.1",
86
85
  "micromark-util-symbol": "^2.0.1",
87
- "shiki": "^4.3.1"
86
+ "shiki": "^4.3.1",
87
+ "@deepseek-ai/dsh-client-store": "0.1.7-rc.2",
88
+ "@deepseek-ai/dsh-util-code-language": "0.1.7-rc.2",
89
+ "@deepseek-ai/dsh-util-workspace-path": "0.1.7-rc.2",
90
+ "diff": "^9.0.0",
91
+ "immer": "^10.1.1",
92
+ "simple-icons": "16.31.0",
93
+ "zustand": "~4.4.7"
88
94
  },
89
95
  "peerDependenciesMeta": {
90
96
  "react": {
@@ -1,68 +1,70 @@
1
- .runtimeComposer { border: 1px solid var(--mn-line); border-radius: 12px; background: var(--mn-layer-1); }
2
- .runtimeComposer { margin-bottom: 13px; padding: 15px; background: linear-gradient(135deg, color-mix(in srgb, var(--mn-accent) 5%, var(--mn-layer-1)), var(--mn-layer-1) 55%); }
3
- .runtimeComposerHeading { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; margin-bottom: 11px; }
4
- .runtimeComposerHeading h3 { margin: 0 0 2px; font-size: 14px; }
5
- .runtimeComposerHeading p { margin: 0; color: var(--mn-muted); font-size: 10px; }
6
- .runtimeComposerHeading > span { flex: 0 0 auto; padding: 4px 8px; border-radius: 999px; color: var(--mn-accent); background: color-mix(in srgb, var(--mn-accent) 9%, transparent); font: 650 9px var(--mn-code); }
1
+ .runtimeComposer { border: .5px solid var(--mn-card-line); border-radius: var(--dsw-radius-lg); }
2
+ .runtimeComposer { margin-bottom: 12px; padding: 16px; }
3
+ .runtimeComposerHeading { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 12px; }
4
+ .runtimeComposerHeading h3 { margin: 0 0 2px; font-size: 14px; font-weight: 500; line-height: 22px; }
5
+ .runtimeComposerHeading p { margin: 0; color: var(--mn-faint); font-size: 12px; line-height: 18px; }
6
+ .runtimeComposerHeading > span { flex: 0 0 auto; padding: 1px 8px; border-radius: 999px; color: var(--mn-muted); background: var(--mn-fill); font-size: 11px; font-weight: 500; line-height: 17px; }
7
7
  .runtimeComposer > textarea,
8
- .runtimeEntry textarea { width: 100%; resize: vertical; border: 1px solid var(--mn-line); border-radius: 9px; outline: 0; padding: 10px 11px; color: var(--mn-text); background: var(--mn-input); line-height: 1.6; }
8
+ .runtimeEntry textarea { width: 100%; resize: vertical; border: .5px solid var(--mn-field-line); border-radius: var(--dsw-radius-md); outline: 0; padding: 8px 10px; color: var(--mn-text); background: var(--mn-input); font-size: 13px; line-height: 20px; }
9
9
  .runtimeComposer > textarea:focus,
10
10
  .runtimeEntry textarea:focus { border-color: var(--mn-accent); }
11
- .runtimeComposerActions { display: flex; align-items: flex-end; justify-content: flex-end; gap: 9px; margin-top: 10px; }
12
- .runtimeComposerActions label { display: grid; gap: 4px; color: var(--mn-faint); font-size: 9px; }
11
+ .runtimeComposerActions { display: flex; align-items: flex-end; justify-content: flex-end; gap: 8px; margin-top: 12px; }
12
+ .runtimeComposerActions label { display: grid; gap: 6px; color: var(--mn-muted); font-size: 12px; font-weight: 500; line-height: 18px; }
13
13
  .runtimeComposerActions select,
14
- .runtimeEntry select { min-width: 135px; height: 34px; border: 1px solid var(--mn-line); border-radius: 8px; outline: 0; padding: 0 8px; background: var(--mn-input); }
15
- .runtimeReadOnly { margin-bottom: 13px; padding: 9px 12px; border: 1px solid color-mix(in srgb, var(--mn-success) 28%, var(--mn-line)); border-radius: 9px; color: var(--mn-success); background: color-mix(in srgb, var(--mn-success) 6%, var(--mn-layer-1)); font-size: 11px; }
16
- .runtimeReadOnly { color: var(--mn-muted); border-color: var(--mn-line); background: var(--mn-layer-1); }
17
- .runtimeSummaryGrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-bottom: 10px; }
18
- .runtimeSummaryCard { min-width: 0; border: 1px solid var(--mn-line); border-radius: 11px; background: var(--mn-layer-1); }
19
- .runtimeBrowser { overflow: hidden; border: 1px solid var(--mn-line); border-radius: 11px; background: var(--mn-layer-1); }
20
- .runtimeBrowserToolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px; border-bottom: 1px solid var(--mn-line); }
21
- .runtimeScopeFilter { display: flex; flex-wrap: wrap; align-items: center; gap: 3px; }
22
- .runtimeScopeFilter button { min-height: 32px; border: 1px solid transparent; border-radius: 7px; padding: 0 10px; color: var(--mn-muted); background: transparent; cursor: pointer; }
23
- .runtimeScopeFilter button:hover { background: var(--mn-hover); }
24
- .runtimeScopeFilter button[data-active] { border-color: var(--mn-line); color: var(--mn-text); background: var(--mn-layer-2); }
25
- .runtimeScopeFilter b { margin-left: 4px; color: var(--mn-faint); font: 600 10px var(--mn-code); }
26
- .runtimeFilterQuery { display: flex; width: min(320px, 42%); min-width: 210px; align-items: center; gap: 7px; border: 1px solid var(--mn-line); border-radius: 8px; padding: 0 9px; background: var(--mn-input); }
14
+ .runtimeEntry select { min-width: 136px; height: 32px; border: .5px solid var(--mn-field-line); border-radius: var(--dsw-radius-md); outline: 0; padding: 0 10px; color: var(--mn-text); background: var(--mn-input); font-size: 13px; }
15
+ .runtimeReadOnly { margin-bottom: 12px; padding: 8px 12px; border-radius: var(--dsw-radius-md); color: var(--mn-muted); background: var(--mn-fill); font-size: 12px; line-height: 18px; }
16
+ .runtimeSummaryGrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-bottom: 12px; }
17
+ .runtimeSummaryCard { min-width: 0; border: .5px solid var(--mn-card-line); border-radius: var(--dsw-radius-lg); }
18
+ .runtimeBrowser { overflow: hidden; border: .5px solid var(--mn-card-line); border-radius: var(--dsw-radius-lg); }
19
+ .runtimeBrowserToolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 12px; border-bottom: .5px solid var(--mn-line); }
20
+ /* Scope filter, as the DSH SegmentedControl. */
21
+ .runtimeScopeFilter { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 2px; padding: 3px; border-radius: var(--dsw-radius-md); background: var(--mn-hover); }
22
+ .runtimeScopeFilter button { min-height: 28px; border: 0; border-radius: var(--dsw-radius-sm); padding: 0 12px; color: var(--mn-muted); background: transparent; font-size: 13px; font-weight: 500; line-height: 20px; cursor: pointer; }
23
+ .runtimeScopeFilter button:hover { color: var(--mn-text); }
24
+ .runtimeScopeFilter button[data-active] { color: var(--mn-text); background: var(--mn-layer-1); box-shadow: var(--dsw-elevation-soft); }
25
+ .runtimeScopeFilter b { margin-left: 6px; color: var(--mn-faint); font-size: 12px; font-weight: 400; font-variant-numeric: tabular-nums; }
26
+ .runtimeFilterQuery { display: flex; width: min(320px, 42%); min-width: 210px; align-items: center; gap: 6px; border: .5px solid var(--mn-field-line); border-radius: var(--dsw-radius-md); padding: 0 10px; background: var(--mn-input); }
27
+ .runtimeFilterQuery:focus-within { border-color: var(--mn-accent); }
27
28
  .runtimeFilterQuery > span { color: var(--mn-faint); }
28
- .runtimeFilterQuery input { width: 100%; min-width: 0; height: 32px; border: 0; outline: 0; color: var(--mn-text); background: transparent; }
29
- .runtimeUnifiedList { display: grid; grid-template-columns: 1fr; gap: 8px; padding: 10px; background: color-mix(in srgb, var(--mn-layer-2) 30%, var(--mn-layer-1)); }
30
- .runtimeEntryBadges { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; }
31
- .runtimeEntryMeta .runtimeEntryTarget { color: var(--mn-accent); background: color-mix(in srgb, var(--mn-accent) 8%, var(--mn-layer-2)); font-family: var(--mn-code); }
32
- .runtimeEntryMeta .runtimeEntryBranch { max-width: 140px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--mn-accent); background: color-mix(in srgb, var(--mn-accent) 8%, var(--mn-layer-2)); font-family: var(--mn-code); }
33
- .runtimeComposerBranch { display: grid; gap: 4px; color: var(--mn-faint); font-size: 9px; }
34
- .runtimeComposerBranch input { width: 100%; border: 1px solid var(--mn-line); border-radius: 8px; outline: 0; padding: 7px 9px; color: var(--mn-text); background: var(--mn-input); font-size: 12px; }
29
+ .runtimeFilterQuery input { width: 100%; min-width: 0; height: 32px; border: 0; outline: 0; color: var(--mn-text); background: transparent; font-size: 13px; }
30
+ .runtimeFilterQuery input::placeholder { color: var(--dsw-alias-label-dimmed); }
31
+ .runtimeUnifiedList { display: grid; grid-template-columns: 1fr; gap: 8px; padding: 12px; }
32
+ .runtimeEntryBadges { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
33
+ .runtimeEntryMeta .runtimeEntryTarget { color: var(--mn-accent); background: color-mix(in srgb, var(--mn-accent) 10%, transparent); }
34
+ .runtimeEntryMeta .runtimeEntryBranch { max-width: 140px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--mn-muted); background: var(--mn-fill); font-family: var(--mn-code); }
35
+ .runtimeComposerBranch { display: grid; gap: 6px; color: var(--mn-muted); font-size: 12px; font-weight: 500; line-height: 18px; }
36
+ .runtimeComposerBranch input { width: 100%; height: 32px; border: .5px solid var(--mn-field-line); border-radius: var(--dsw-radius-md); outline: 0; padding: 0 10px; color: var(--mn-text); background: var(--mn-input); font-size: 13px; font-weight: 400; }
35
37
  .runtimeComposerBranch input:focus { border-color: var(--mn-accent); }
36
- .bodyEditBranch { display: grid; gap: 4px; color: var(--mn-faint); font-size: 9px; }
37
- .bodyEditBranch input { width: 100%; border: 1px solid var(--mn-line); border-radius: 8px; outline: 0; padding: 7px 9px; color: var(--mn-text); background: var(--mn-input); font-size: 12px; }
38
+ .bodyEditBranch { display: grid; gap: 6px; color: var(--mn-muted); font-size: 12px; font-weight: 500; line-height: 18px; }
39
+ .bodyEditBranch input { width: 100%; height: 32px; border: .5px solid var(--mn-field-line); border-radius: var(--dsw-radius-md); outline: 0; padding: 0 10px; color: var(--mn-text); background: var(--mn-input); font-size: 13px; font-weight: 400; }
38
40
  .bodyEditBranch input:focus { border-color: var(--mn-accent); }
39
- .bodyEditBranch small { color: var(--mn-faint); font-size: 9px; }
40
- .runtimeTargetHeader { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 14px 15px 9px; }
41
- .runtimeTargetHeader > div { display: grid; gap: 1px; }
42
- .runtimeTargetHeader span { color: var(--mn-faint); font: 650 9px var(--mn-code); letter-spacing: .08em; }
43
- .runtimeTargetHeader h3 { margin: 0; font-size: 15px; }
44
- .runtimeTargetHeader > strong { display: grid; min-width: 28px; height: 28px; place-items: center; border-radius: 8px; color: var(--mn-accent); background: color-mix(in srgb, var(--mn-accent) 9%, transparent); font: 650 11px var(--mn-code); }
45
- .capacityLine { display: flex; align-items: center; gap: 9px; padding: 0 15px; }
46
- .capacityLine > div { height: 4px; flex: 1; overflow: hidden; border-radius: 999px; background: var(--mn-layer-2); }
47
- .capacityLine i { display: block; height: 100%; border-radius: inherit; background: var(--mn-success); transition: width .25s ease; }
48
- .capacityLine > span { min-width: 88px; color: var(--mn-faint); font: 9px var(--mn-code); text-align: right; }
49
- .runtimeTargetDescription { min-height: 31px; margin: 8px 15px 12px; color: var(--mn-muted); font-size: 10px; }
50
- .runtimeEntry { --mn-provider-color: var(--mn-accent); position: relative; padding: 11px 12px 10px; border: 1px solid var(--mn-line); border-radius: 8px; background: linear-gradient(90deg, color-mix(in srgb, var(--mn-provider-color) 5%, var(--mn-layer-1)), var(--mn-layer-1) 34%); box-shadow: inset 3px 0 0 color-mix(in srgb, var(--mn-provider-color) 68%, transparent); }
41
+ .bodyEditBranch small { color: var(--mn-faint); font-size: 12px; font-weight: 400; }
42
+ .runtimeTargetHeader { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px 16px 8px; }
43
+ .runtimeTargetHeader > div { display: grid; gap: 0; }
44
+ .runtimeTargetHeader span { color: var(--mn-faint); font-family: var(--mn-code); font-size: 11px; line-height: 16px; }
45
+ .runtimeTargetHeader h3 { margin: 0; font-size: 14px; font-weight: 500; line-height: 22px; }
46
+ .runtimeTargetHeader > strong { padding: 1px 8px; border-radius: 999px; color: var(--mn-muted); background: var(--mn-fill); font-size: 11px; font-weight: 500; line-height: 17px; font-variant-numeric: tabular-nums; }
47
+ .capacityLine { display: flex; align-items: center; gap: 10px; padding: 0 16px; }
48
+ .capacityLine > div { height: 4px; flex: 1; overflow: hidden; border-radius: 999px; background: var(--mn-fill); }
49
+ .capacityLine i { display: block; height: 100%; border-radius: inherit; background: var(--dsw-alias-brand-primary); transition: width .25s ease; }
50
+ .capacityLine > span { min-width: 88px; color: var(--mn-faint); font-size: 11px; text-align: right; font-variant-numeric: tabular-nums; }
51
+ .runtimeTargetDescription { min-height: 36px; margin: 8px 16px 14px; color: var(--mn-faint); font-size: 12px; line-height: 18px; }
52
+ .runtimeEntry { --mn-provider-color: var(--mn-accent); position: relative; padding: 12px 14px 10px; border: .5px solid var(--mn-card-line); border-radius: var(--dsw-radius-md); }
51
53
  .runtimeEntry[data-importance="critical"] { --mn-provider-color: var(--mn-priority); }
52
54
  .runtimeEntry[data-importance="low"] { --mn-provider-color: var(--mn-faint); }
53
55
  .runtimeEntryMeta { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
54
56
  .runtimeEntryMeta > span,
55
- .runtimeEntryBadges > span { padding: 2px 6px; border-radius: 999px; color: var(--mn-muted); background: var(--mn-layer-2); font-size: 9px; }
57
+ .runtimeEntryBadges > span { padding: 1px 8px; border-radius: 999px; color: var(--mn-muted); background: var(--mn-fill); font-size: 11px; font-weight: 500; line-height: 17px; }
56
58
  .runtimeEntry[data-importance="critical"] .runtimeEntryMeta > span,
57
- .runtimeEntry[data-importance="critical"] .runtimeEntryBadges > span:not(.runtimeEntryTarget) { color: var(--mn-priority); background: color-mix(in srgb, var(--mn-priority) 9%, transparent); }
58
- .runtimeEntryMeta time { overflow: hidden; color: var(--mn-faint); font: 8px var(--mn-code); text-overflow: ellipsis; white-space: nowrap; }
59
- .runtimeEntry > p { min-height: 42px; margin: 9px 0; white-space: pre-wrap; overflow-wrap: anywhere; font-size: 12px; line-height: 1.6; }
60
- .runtimeEntry > select { margin-top: 7px; }
61
- .runtimeEntry footer { display: flex; min-height: 30px; align-items: center; justify-content: flex-end; gap: 4px; margin-top: 7px; padding-top: 7px; border-top: 1px solid var(--mn-line); }
62
- .runtimeEntry footer > span { margin-right: auto; color: var(--mn-danger); font-size: 10px; }
63
- .runtimeEmpty { display: grid; min-height: 126px; place-items: center; align-content: center; gap: 5px; color: var(--mn-faint); text-align: center; }
64
- .runtimeEmpty > span { font: 24px var(--mn-code); opacity: .65; }
65
- .runtimeEmpty p { margin: 0; font-size: 10px; }
59
+ .runtimeEntry[data-importance="critical"] .runtimeEntryBadges > span:not(.runtimeEntryTarget) { color: var(--mn-warn); background: color-mix(in srgb, var(--mn-warn) 12%, transparent); }
60
+ .runtimeEntryMeta time { overflow: hidden; color: var(--mn-faint); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; font-variant-numeric: tabular-nums; }
61
+ .runtimeEntry > p { min-height: 40px; margin: 8px 0; white-space: pre-wrap; overflow-wrap: anywhere; font-size: 14px; line-height: 22px; }
62
+ .runtimeEntry > select { margin-top: 8px; }
63
+ .runtimeEntry footer { display: flex; min-height: 32px; align-items: center; justify-content: flex-end; gap: 8px; margin-top: 8px; padding-top: 8px; border-top: .5px solid var(--mn-line); }
64
+ .runtimeEntry footer > span { margin-right: auto; color: var(--mn-danger); font-size: 12px; }
65
+ .runtimeEmpty { display: grid; min-height: 128px; place-items: center; align-content: center; gap: 6px; color: var(--mn-faint); text-align: center; }
66
+ .runtimeEmpty > span { font-size: 20px; line-height: 1; }
67
+ .runtimeEmpty p { margin: 0; font-size: 13px; line-height: 20px; }
66
68
 
67
69
  @media (max-width: 1000px) {
68
70
  .runtimeSummaryGrid { grid-template-columns: 1fr; }
@@ -7,56 +7,22 @@
7
7
  }
8
8
  .shell .modal form[class*='runtimeComposer'] > [class*='runtimeComposerHeading'] { display: none; }
9
9
 
10
- .shell [class*='runtimeComposerActions'] label {
11
- gap: 5px;
12
- color: var(--dsw-alias-label-secondary);
13
- font-size: 12px;
14
- font-weight: 500;
15
- }
16
-
17
- .shell [class*='runtimeComposer'] > textarea,
18
- .shell [class*='runtimeComposerActions'] select,
19
- .shell [class*='runtimeEntry'] select {
20
- min-height: 34px;
21
- border: 1px solid var(--dsw-alias-border-l2);
22
- border-radius: 8px;
23
- padding: 7px 10px;
24
- color: var(--dsw-alias-label-primary);
25
- background: var(--dsw-specific-input-major);
26
- font-size: 13px;
27
- font-weight: 400;
28
- }
29
-
30
- .shell [class*='runtimeTargetDescription'] { font-size: 12px; }
31
-
32
- .shell [class*='runtimeEntryMeta'] > span,
33
- .shell [class*='runtimeEntryBadges'] > span,
34
- .shell [class*='runtimeEntryMeta'] time { font-size: 11px; }
35
-
36
- .shell [class*='runtimeEntry'] > p { font-size: 13px; }
10
+ /* Runtime metadata reads as DSH Tags; the target is the one informational tone. */
37
11
  .shell [class*='runtimeEntryBadges'] > span {
38
12
  display: inline-flex;
39
- min-height: 22px;
40
13
  align-items: center;
41
- border: 1px solid var(--dsw-alias-border-l1);
42
14
  border-radius: 999px;
43
- padding: 0 8px;
44
- color: var(--dsw-alias-label-secondary);
45
- background: var(--dsw-alias-bg-layer-1);
15
+ padding: 1px 8px;
46
16
  font-size: 11px;
47
- font-weight: 400;
48
- line-height: 20px;
17
+ font-weight: 500;
18
+ line-height: 17px;
49
19
  }
50
20
  .shell [class*='runtimeEntryBadges'] > [class*='runtimeEntryTarget'] {
51
- border-color: color-mix(in srgb, var(--dsw-alias-state-business-primary) 30%, var(--dsw-alias-border-l1));
52
21
  color: var(--dsw-alias-state-business-primary);
53
- background: color-mix(in srgb, var(--dsw-alias-state-business-primary) 7%, var(--dsw-alias-bg-layer-1));
22
+ background: color-mix(in srgb, var(--dsw-alias-state-business-primary) 10%, transparent);
54
23
  font-family: var(--dsw-font-family);
55
- font-weight: 500;
56
24
  }
57
25
  .shell [class*='runtimeEntry'][data-importance='critical'] [class*='runtimeEntryBadges'] > span:last-child {
58
- border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 24%, var(--dsw-alias-border-l1));
59
- color: var(--dsw-alias-state-error-primary);
60
- background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 6%, var(--dsw-alias-bg-layer-1));
26
+ color: var(--dsw-alias-state-warn-primary);
27
+ background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);
61
28
  }
62
- .shell [class*='runtimeEntry'] footer { gap: 6px; }