@kenz1117/dsh-engram 0.7.12 → 0.7.13
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 +2 -0
- package/README.md +2 -0
- package/lib/client.js +1 -1
- package/lib/index.js +8 -14
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -197,6 +197,8 @@ Since v0.7.10 the entity layer arrives (first batch of the temporal fact graph).
|
|
|
197
197
|
|
|
198
198
|
Since v0.7.12 the plugin integrates **Jev System-One adjudication** (off by default, the `jev` block in yml) and adds an eighth panel view, **"Jev"**: the DEFER fuzzy-band three-way ruling and contradiction-edge confirmation can be delegated to Jev, and when Jev is unavailable (network failure, timeout, or a missing key) it silently falls back to the pure-rule four-way behavior without blocking writes. The panel overrides five yml fields — the switch, API key, endpoint, model, and timeout — stored at `<dbDir>/jev-config.json` (0600 file inside a 0700 directory) and effective immediately on save: the judge re-reads the override at every assembly point, no restart needed; the three thresholds stay yml-only advanced settings, shown read-only in the panel. Key safety: GET responses return only a mask (last 4 characters when longer than 8), the plaintext never leaves the process, and the input field is never back-filled. Turning the switch on without any key degrades to off automatically; a corrupted override file heals as an empty override, fixed by the next panel save. The Jev tab also gains a "Test connection" action (verify endpoint and model reachability right after filling in the key — unsaved input is tested as typed and never written to the override file) and a "Recent adjudications" card (the last 50 adjudications in this process: verdict, whether Jev took part, elapsed time, and the fallback reason; cleared on restart), so "why was this one deferred" no longer needs guesswork.
|
|
199
199
|
|
|
200
|
+
v0.7.13 fixes the every-turn failure on DSH 0.1.7 (native session format v4) ([#5](https://github.com/kenz1117/dsh-engram/issues/5)): v4 retired the `kind: "plugin"` message-source wrapper (it is only rewritten to `plugin:<package>` when migrating historical v3 sessions; a native v4 event carrying it is refused by `assertV4MessageSources`), and the two injection sites (profile snapshot and assess reminder) used exactly that retired shape — with engram enabled, every new turn failed with `format v4 message requires a producer-owned source kind`. The sources are now producer-owned (`plugin:<package>`, matching what DSH's own v3→v4 migration produces; the other attribution fields are unchanged), and the internal auxiliary-call message source is unified the same way. The three read sites that skip our own injected snapshots relaxed from exact equality to a `plugin` prefix match, so both the v3 historical shape and the v4 shape are recognized and the plugin never ingests its own injections (self-pollution). 0.1.5 (v3 sessions) is unaffected; on 0.1.7 keep engram disabled until you upgrade to 0.7.13.
|
|
201
|
+
|
|
200
202
|
## Development
|
|
201
203
|
|
|
202
204
|
```sh
|
package/README.md
CHANGED
|
@@ -198,6 +198,8 @@ v0.7.10 起建实体层(时序事实图谱第一批)。① **实体抽取并
|
|
|
198
198
|
|
|
199
199
|
v0.7.12 起接入 **Jev 系统一裁决**(默认关闭,yml `jev` 子配置)并给面板加第八个视图**「裁决」**:DEFER 模糊带的三路判定与矛盾边确认可交 Jev 判决,Jev 不可用(网络失败/超时/未配密钥)时静默回落纯规则四态,不阻断写入。面板可覆盖 yml 的开关、密钥、端点、模型、超时五项(存 `<dbDir>/jev-config.json`,0600 文件 + 0700 目录双保护),保存即时生效——judge 每次装配即时读覆盖,无需重启;三阈值保持 yml 高级配置、面板只读展示。密钥安全:GET 响应只回掩码(长度 > 8 显尾 4 位),明文不出进程,输入框不回填。合并后开了开关但没有密钥时自动降级为关闭;覆盖文件损坏按空覆盖自愈,面板重新保存即修复。裁决 tab 另配「测试连接」按钮(填完密钥即时验证端点与模型可达性,未保存的输入按当前输入测、不落覆盖文件)与「近期裁决」卡(本进程内最近 50 条裁决:判定结果、Jev 是否参与、耗时与回落原因,重启清空),排查「为什么这条被搁置」不必再猜。
|
|
200
200
|
|
|
201
|
+
v0.7.13 修复 DSH 0.1.7(原生会话格式 v4)下的每回合失败([#5](https://github.com/kenz1117/dsh-engram/issues/5)):v4 退役了消息源的 `kind: "plugin"` 包装(只在迁移历史 v3 会话时改写为 `plugin:<包名>`,原生 v4 事件携带即被 `assertV4MessageSources` 拒收),而画像注入与 assess 提醒两处恰好用这个旧形状——启用后每个新回合都报 `format v4 message requires a producer-owned source kind`。现改为 producer-owned 形状 `plugin:<包名>`(与 DSH 自身 v3→v4 迁移产物一致,其余来源字段原样保留),内部辅助调用的消息源同步统一;三处「跳过自己注入快照」的读判断从精确等值放宽为 `plugin` 前缀匹配,v3 历史形状与 v4 新形状都识别,避免插件摄取自己注入的内容(自污染)。0.1.5(v3 会话)不受影响;0.7.12 及更早在 0.1.7 上请保持 engram 关闭,升级到 0.7.13 即可。
|
|
202
|
+
|
|
201
203
|
## 开发
|
|
202
204
|
|
|
203
205
|
```sh
|
package/lib/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
window.__ModuleLoader__.load({id:`@kenz1117/dsh-engram`,factory:e=>{var t={exports:{}},n=t.exports;Object.defineProperty(n,Symbol.toStringTag,{value:`Module`});let r=e("react"),i=e("react/jsx-runtime"),a=`@kenz1117/dsh-engram/panel.module.css`;if(typeof document<`u`&&document.querySelector(`style[data-plugin-css=`+JSON.stringify(a)+`]`)===null){let e=document.createElement(`style`);e.dataset.plugin=`@kenz1117/dsh-engram`,e.dataset.pluginCss=a,e.textContent=`:root{--ease-spring:cubic-bezier(.32, .72, 0, 1);--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--dur-fast:.14s;--dur-base:.22s;--dur-slow:.36s;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--radius-control:8px;--radius-card:12px;--fs-micro:11px;--fs-body:12px;--fs-ctrl:13px;--fs-display:14px;--fs-tag:10px}.bWwFiW_panel{max-width:1240px;animation:bWwFiW_panelIn var(--dur-slow) var(--ease-out) both;margin:0 auto;position:relative}@keyframes bWwFiW_panelIn{0%{opacity:0;filter:blur(2px);transform:translateY(6px)}to{opacity:1;filter:blur();transform:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.bWwFiW_header{justify-content:space-between;align-items:center;gap:var(--space-5);row-gap:var(--space-2);margin-bottom:var(--space-5);flex-wrap:wrap;display:flex}.bWwFiW_headerBrand{align-items:center;gap:var(--space-3);flex:260px;min-width:min(260px,100%);display:flex}.bWwFiW_headerLogo{border-radius:var(--radius-control);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, var(--dsw-alias-bg-layer-1));border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 30%, var(--dsw-alias-border-l2));width:36px;height:36px;color:var(--dsw-alias-brand-primary);transition:transform var(--dur-base) var(--ease-spring), background var(--dur-base) var(--ease-spring);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.bWwFiW_headerLogo:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 18%, var(--dsw-alias-bg-layer-1));transform:rotate(-6deg)}.bWwFiW_headerLogo svg{transition:transform var(--dur-slow) var(--ease-spring);display:block}.bWwFiW_headerLogo:hover svg{transform:rotate(6deg)}.bWwFiW_headerTitle{gap:var(--space-1);flex-direction:column;min-width:0;display:flex}.bWwFiW_headerTitle h2{letter-spacing:-.01em;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:16px;font-weight:600;overflow:hidden}.bWwFiW_headerTitle p{font-size:var(--fs-body);color:var(--dsw-alias-label-tertiary);margin:0;line-height:1.5}.bWwFiW_headerActions{gap:var(--space-2);flex-shrink:0;align-items:center;display:flex}.bWwFiW_wsBar{align-items:center;gap:var(--space-2);flex-wrap:wrap;flex-basis:100%;min-width:0;display:flex}.bWwFiW_wsChip{max-width:220px;height:28px;padding:0 var(--space-3);border-radius:var(--radius-control);border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);font-size:var(--fs-micro);white-space:nowrap;text-overflow:ellipsis;transition:border-color var(--dur-fast) var(--ease-spring), color var(--dur-fast) var(--ease-spring);align-items:center;line-height:1;display:inline-flex;overflow:hidden}.bWwFiW_wsChip.bWwFiW_wsFollow{border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 38%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, var(--dsw-alias-bg-layer-1));color:var(--dsw-alias-brand-primary)}.bWwFiW_wsChip.bWwFiW_wsMuted{color:var(--dsw-alias-label-tertiary)}.bWwFiW_wsSelect{max-width:240px}.bWwFiW_dueBadge{height:28px;padding:0 var(--space-3);border-radius:var(--radius-control);border:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 38%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, var(--dsw-alias-bg-layer-1));color:var(--dsw-alias-label-primary);font-size:var(--fs-body);font-variant-numeric:tabular-nums;cursor:pointer;transition:background var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring), transform 80ms var(--ease-spring);align-items:center;gap:5px;line-height:1;display:inline-flex}.bWwFiW_dueBadge:hover{border-color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 14%, var(--dsw-alias-bg-layer-1))}.bWwFiW_dueBadge:active{transform:scale(.96)}.bWwFiW_dueDot{background:var(--dsw-alias-state-error-primary);border-radius:50%;flex:none;width:6px;height:6px}.bWwFiW_tabs{align-items:flex-end;gap:var(--space-5);border-bottom:1px solid var(--dsw-alias-border-l2);margin-bottom:var(--space-4);display:flex;position:relative}.bWwFiW_tabs:after{content:"";background:var(--dsw-alias-border-l2);height:1px;position:absolute;bottom:-1px;left:0;right:0}.bWwFiW_tabItem{padding:var(--space-2) 0 var(--space-3);color:var(--dsw-alias-label-tertiary);font-size:var(--fs-ctrl);cursor:pointer;transition:color var(--dur-fast) var(--ease-spring);background:0 0;border:0;font-weight:500;position:relative}.bWwFiW_tabItem:hover{color:var(--dsw-alias-label-secondary)}.bWwFiW_tabItem.bWwFiW_on{color:var(--dsw-alias-label-primary)}.bWwFiW_tabItem.bWwFiW_on:after{content:"";background:var(--dsw-alias-brand-primary);height:2px;animation:bWwFiW_tabUnderline var(--dur-base) var(--ease-spring) both;border-radius:2px 2px 0 0;position:absolute;bottom:-1px;left:0;right:0}@keyframes bWwFiW_tabUnderline{0%{opacity:0;transform:scaleX(.4)}to{opacity:1;transform:scaleX(1)}}.bWwFiW_tabItem small{margin-left:var(--space-2);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums}.bWwFiW_tabPanel{animation:bWwFiW_fadeSoft var(--dur-base) var(--ease-spring) both}.bWwFiW_drawerScrim{background:color-mix(in srgb, var(--dsw-alias-label-primary) 18%, transparent);border-radius:inherit;z-index:40;animation:bWwFiW_scrimIn var(--dur-base) var(--ease-spring) both;position:absolute;inset:0}@keyframes bWwFiW_scrimIn{0%{opacity:0}to{opacity:1}}.bWwFiW_drawer{background:var(--dsw-alias-bg-base);border-left:1px solid var(--dsw-alias-border-l2);width:100%;max-height:100%;box-shadow:-16px 0 40px -16px color-mix(in srgb, var(--dsw-alias-label-primary) 25%, transparent);z-index:41;animation:bWwFiW_drawerIn var(--dur-slow) var(--ease-spring) both;border-radius:inherit;flex-direction:column;display:flex;position:absolute;top:0;bottom:auto;right:0;overflow:hidden}@keyframes bWwFiW_drawerIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:none}}.bWwFiW_drawerHead{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--dsw-alias-border-l2);flex-shrink:0;display:flex}.bWwFiW_drawerTitle{align-items:baseline;gap:var(--space-2);flex:1;min-width:0;display:flex}.bWwFiW_drawerTitle h3{font-size:var(--fs-display);color:var(--dsw-alias-label-primary);margin:0;font-weight:600}.bWwFiW_drawerTitle span{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;max-width:240px;font-family:ui-monospace,SF Mono,Menlo,monospace;overflow:hidden}.bWwFiW_drawerClose{border-radius:var(--radius-control);width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--dur-fast) var(--ease-spring), color var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;display:inline-flex}.bWwFiW_drawerClose:hover{background:var(--dsw-alias-fill-tsp-secondary);border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary)}.bWwFiW_drawerClose svg{display:block}.bWwFiW_drawerBody{min-height:0;padding:var(--space-4);scrollbar-width:none;flex:1;overflow-y:auto}.bWwFiW_drawerBody::-webkit-scrollbar{display:none}.bWwFiW_reviewGrid{gap:var(--space-5);grid-template-columns:minmax(0,1fr) minmax(0,1fr);display:grid}@media (width<=720px){.bWwFiW_reviewGrid{grid-template-columns:1fr}}.bWwFiW_button{height:28px;padding:0 var(--space-3);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);border:1px solid var(--dsw-alias-border-l2);border-radius:var(--radius-control);cursor:pointer;font-size:var(--fs-body);transition:color var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring), background var(--dur-fast) var(--ease-spring), transform 80ms var(--ease-spring);justify-content:center;align-items:center;gap:5px;line-height:1;display:inline-flex}.bWwFiW_button:hover{color:var(--dsw-alias-label-primary);border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 55%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 5%, var(--dsw-alias-bg-layer-1))}.bWwFiW_button:active{transform:scale(.96)}.bWwFiW_button:disabled{opacity:.45;cursor:default;transform:none}.bWwFiW_button.bWwFiW_danger{color:var(--dsw-alias-state-error-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-error-primary) 35%, var(--dsw-alias-border-l2))}.bWwFiW_button.bWwFiW_danger:hover{color:var(--dsw-alias-state-error-primary);border-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))}.bWwFiW_button.bWwFiW_primary{background:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-label-primary-foreground)}.bWwFiW_button.bWwFiW_primary:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 88%, transparent);border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 88%, transparent);color:var(--dsw-alias-label-primary-foreground);filter:brightness(1.05)}.bWwFiW_button.bWwFiW_primary:disabled{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);opacity:.6;border-color:#0000}.bWwFiW_input{background:var(--dsw-alias-bg-layer-1);height:28px;color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);transition:border-color var(--dur-fast) var(--ease-spring), box-shadow var(--dur-fast) var(--ease-spring);border-radius:8px;padding:0 10px;font-size:12px;line-height:1}.bWwFiW_input::placeholder{color:var(--dsw-alias-label-tertiary)}.bWwFiW_input:hover{border-color:color-mix(in srgb, var(--dsw-alias-label-primary) 22%, var(--dsw-alias-border-l2))}.bWwFiW_input:focus-visible{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--dsw-alias-brand-primary) 18%, transparent);outline:none}.bWwFiW_search{flex:1;min-width:120px}select.bWwFiW_input{appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--dsw-alias-label-tertiary) 50%), linear-gradient(135deg, var(--dsw-alias-label-tertiary) 50%, transparent 50%);transition:background-position var(--dur-fast) var(--ease-spring);background-position:calc(100% - 13px) 12px,calc(100% - 8px) 12px;background-repeat:no-repeat;background-size:5px 5px;padding-right:24px}.bWwFiW_segGroup{background:var(--dsw-alias-fill-tsp-secondary);border-radius:9px;gap:2px;padding:2px;display:inline-flex;position:relative}.bWwFiW_segItem{height:24px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font-size:var(--fs-body);transition:color var(--dur-fast) var(--ease-spring), transform 80ms var(--ease-spring);z-index:1;white-space:nowrap;background:0 0;border:0;border-radius:7px;align-items:center;padding:0 12px;line-height:1;display:inline-flex;position:relative}.bWwFiW_segItem:hover{color:var(--dsw-alias-label-secondary)}.bWwFiW_segItem:active{transform:scale(.96)}.bWwFiW_segItem.bWwFiW_on{color:var(--dsw-alias-label-primary)}.bWwFiW_segIndicator{z-index:0;background:var(--dsw-alias-bg-layer-1);box-shadow:0 1px 2px color-mix(in srgb, var(--dsw-alias-label-primary) 10%, transparent), inset 0 0 0 1px color-mix(in srgb, var(--dsw-alias-border-l2) 60%, transparent);transition:left var(--dur-base) var(--ease-spring), width var(--dur-base) var(--ease-spring), opacity var(--dur-fast) var(--ease-spring);pointer-events:none;border-radius:7px;position:absolute;top:2px;bottom:2px}.bWwFiW_segScope{border-radius:10px;padding:3px}.bWwFiW_layout{gap:var(--space-5);margin-top:var(--space-5);grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);align-items:start;display:grid}.bWwFiW_mainCol{gap:var(--space-5);flex-direction:column;min-width:0;display:flex}.bWwFiW_sideCol{gap:var(--space-5);min-width:0;top:var(--space-3);flex-direction:column;display:flex;position:sticky}@media (width<=960px){.bWwFiW_layout{gap:var(--space-4);grid-template-columns:1fr}.bWwFiW_sideCol{position:static}}.bWwFiW_toolbarRow{gap:var(--space-2);margin-bottom:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.bWwFiW_toolbarRow .bWwFiW_search{flex:1;min-width:180px}.bWwFiW_chipRow{gap:var(--space-1);flex-wrap:wrap;display:flex}.bWwFiW_toolbarRow+.bWwFiW_chipRow{margin-bottom:var(--space-3)}.bWwFiW_chip{padding:3px var(--space-3);border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);font-size:var(--fs-micro);letter-spacing:.02em;cursor:pointer;transition:background var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring), color var(--dur-fast) var(--ease-spring);background:0 0;border-radius:999px}.bWwFiW_chip:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 6%, var(--dsw-alias-bg-layer-1));color:var(--dsw-alias-label-secondary)}.bWwFiW_chipOn{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, var(--dsw-alias-bg-layer-1));border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, var(--dsw-alias-border-l2));color:var(--dsw-alias-label-primary)}.bWwFiW_chipOn:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 20%, var(--dsw-alias-bg-layer-1))}.bWwFiW_exportWrap{display:inline-flex;position:relative}.bWwFiW_exportCaret{opacity:.7;transition:transform var(--dur-fast) var(--ease-spring);margin-left:4px;font-size:9px}.bWwFiW_exportWrap button[aria-expanded=true] .bWwFiW_exportCaret{transform:rotate(180deg)}.bWwFiW_exportMenu{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);min-width:220px;box-shadow:0 8px 24px -10px color-mix(in srgb, var(--dsw-alias-label-primary) 30%, transparent);z-index:30;animation:bWwFiW_drawerIn var(--dur-base) var(--ease-spring) both;border-radius:10px;padding:4px;position:absolute;top:calc(100% + 4px);right:0}.bWwFiW_exportItem{color:var(--dsw-alias-label-primary);transition:background var(--dur-fast) var(--ease-spring);border-radius:7px;flex-direction:column;gap:2px;padding:8px 10px;text-decoration:none;display:flex}.bWwFiW_exportItem:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, var(--dsw-alias-bg-layer-1))}.bWwFiW_exportItemLabel{font-size:13px;font-weight:500;line-height:1.2}.bWwFiW_exportItemHint{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.3}.bWwFiW_batchBar{bottom:var(--space-3);z-index:5;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 88%, transparent);-webkit-backdrop-filter:blur(10px);border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, var(--dsw-alias-border-l2));border-radius:var(--radius-card);box-shadow:0 8px 24px -12px color-mix(in srgb, var(--dsw-alias-label-primary) 30%, transparent);animation:bWwFiW_barUp var(--dur-base) var(--ease-spring) both;flex-wrap:wrap;align-items:center;display:flex;position:sticky}@keyframes bWwFiW_barUp{0%{opacity:0;transform:translateY(12px)scale(.98)}to{opacity:1;transform:none}}.bWwFiW_batchBar>span{color:var(--dsw-alias-label-primary);font-size:var(--fs-body);font-variant-numeric:tabular-nums;margin-right:auto}.bWwFiW_batchBar .bWwFiW_button{height:26px;padding:0 var(--space-2);font-size:var(--fs-micro)}.bWwFiW_itemList{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;display:flex}.bWwFiW_item{gap:var(--space-3);padding:var(--space-3) var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l1);border-radius:var(--radius-control);transition:background var(--dur-fast) var(--ease-spring);animation:bWwFiW_itemIn var(--dur-base) var(--ease-spring) both;grid-template-columns:20px minmax(0,1fr) auto;align-items:start;display:grid}.bWwFiW_itemList>.bWwFiW_item:last-child{border-bottom:0}@keyframes bWwFiW_itemIn{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}.bWwFiW_item:hover{background:var(--dsw-alias-bg-layer-1)}.bWwFiW_item.bWwFiW_selected{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 6%, var(--dsw-alias-bg-layer-1));box-shadow:inset 2px 0 0 var(--dsw-alias-brand-primary)}.bWwFiW_itemCheck{width:14px;height:14px;accent-color:var(--dsw-alias-brand-primary);cursor:pointer;transition:transform 80ms var(--ease-spring);margin-top:3px}.bWwFiW_itemCheck:active{transform:scale(.85)}.bWwFiW_itemBody{flex-direction:column;gap:4px;min-width:0;display:flex}.bWwFiW_itemTags{gap:var(--space-1);flex-wrap:wrap;align-items:center;display:flex}.bWwFiW_itemStamp{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);white-space:nowrap;margin-left:auto}.bWwFiW_content{white-space:pre-wrap;word-break:break-word;color:var(--dsw-alias-label-primary);font-size:var(--fs-body);-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.6;display:-webkit-box;overflow:hidden}.bWwFiW_itemMeta{gap:var(--space-3);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;display:flex}.bWwFiW_itemMeta b{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-weight:500}.bWwFiW_itemOps{gap:var(--space-1);opacity:0;visibility:hidden;transition:opacity var(--dur-fast) var(--ease-spring), visibility var(--dur-fast) var(--ease-spring);flex-shrink:0;align-items:center;display:flex}.bWwFiW_item:hover .bWwFiW_itemOps,.bWwFiW_item.bWwFiW_selected .bWwFiW_itemOps,.bWwFiW_item:focus-within .bWwFiW_itemOps{opacity:1;visibility:visible}.bWwFiW_itemOps .bWwFiW_button{height:24px;padding:0 var(--space-2);font-size:var(--fs-micro)}@media (hover:none){.bWwFiW_itemOps{opacity:1;visibility:visible}}@media (width<=720px){.bWwFiW_item{grid-template-columns:20px minmax(0,1fr)}.bWwFiW_itemOps{grid-column:2;justify-content:flex-end}}.bWwFiW_pill{height:18px;font-size:var(--fs-tag);background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 14%, transparent);color:var(--dsw-alias-label-secondary);white-space:nowrap;animation:bWwFiW_pillIn var(--dur-base) var(--ease-spring) both;transition:transform var(--dur-fast) var(--ease-spring), background var(--dur-fast) var(--ease-spring);border-radius:999px;align-items:center;padding:0 7px;line-height:1;display:inline-flex}@keyframes bWwFiW_pillIn{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:none}}.bWwFiW_pill:hover{transform:translateY(-1px)}.bWwFiW_pill.bWwFiW_kind{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent);color:var(--dsw-alias-brand-primary)}.bWwFiW_pill.bWwFiW_statusActive{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent);color:var(--dsw-alias-state-success-primary)}.bWwFiW_pill.bWwFiW_statusArchived{background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);color:var(--dsw-alias-state-warn-primary)}.bWwFiW_pill.bWwFiW_statusForgotten{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);color:var(--dsw-alias-state-error-primary)}.bWwFiW_pill.bWwFiW_outcomeSuccess{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent);color:var(--dsw-alias-state-success-primary)}.bWwFiW_pill.bWwFiW_outcomeFailure{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);color:var(--dsw-alias-state-error-primary)}.bWwFiW_pill.bWwFiW_redacted{background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);color:var(--dsw-alias-state-warn-primary)}.bWwFiW_expand{border-top:1px dashed var(--dsw-alias-border-l2);animation:bWwFiW_expandIn var(--dur-slow) var(--ease-spring) both;grid-column:1/-1;margin-top:4px;padding-top:10px;overflow:hidden}@keyframes bWwFiW_expandIn{0%{opacity:0;max-height:0;transform:translateY(-4px)}to{opacity:1;max-height:1200px;transform:none}}.bWwFiW_expandLoading{color:var(--dsw-alias-label-tertiary);animation:bWwFiW_fadeSoft var(--dur-base) var(--ease-spring) both;padding:6px 0;font-size:12px}@keyframes bWwFiW_fadeSoft{0%{opacity:0}to{opacity:1}}.bWwFiW_attrGrid{grid-template-columns:max-content 1fr;align-items:center;gap:6px 14px;font-size:12px;display:grid}.bWwFiW_attrGrid>dt{color:var(--dsw-alias-label-tertiary);margin:0;font-size:11px}.bWwFiW_attrGrid>dd{color:var(--dsw-alias-label-primary);flex-wrap:wrap;align-items:center;gap:6px;margin:0;display:flex}.bWwFiW_relBlock{margin-top:10px}.bWwFiW_relBlock>h5{color:var(--dsw-alias-label-tertiary);letter-spacing:.04em;text-transform:uppercase;margin:0 0 4px;font-size:11px;font-weight:500}.bWwFiW_relChips{flex-wrap:wrap;gap:4px;display:flex}.bWwFiW_relChip{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-base);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;max-width:100%;padding:2px 6px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:10px;overflow:hidden}.bWwFiW_timeline{margin:var(--space-2) 0 0;padding:0 0 0 var(--space-3);list-style:none;position:relative}.bWwFiW_timeline:before{background:var(--dsw-alias-border-l2);content:"";width:1px;position:absolute;top:6px;bottom:6px;left:3px}.bWwFiW_timeline li{padding:var(--space-1) 0 var(--space-1) var(--space-3);font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);line-height:1.55;position:relative}.bWwFiW_timeline li:before{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-brand-primary);content:"";border-radius:50%;width:6px;height:6px;position:absolute;top:8px;left:-10px}.bWwFiW_editForm{flex-direction:column;gap:10px;display:flex}.bWwFiW_editForm .bWwFiW_input{box-sizing:border-box;width:100%}.bWwFiW_editForm textarea.bWwFiW_input{resize:vertical;height:auto;min-height:64px;padding:8px 10px;line-height:1.55}.bWwFiW_fieldLabel{color:var(--dsw-alias-label-secondary);margin-bottom:4px;font-size:11px;display:block}.bWwFiW_fieldRow{flex-wrap:wrap;align-items:flex-start;gap:12px;display:flex}.bWwFiW_fieldRow .bWwFiW_fieldLabel{flex:1;min-width:120px}.bWwFiW_fieldRow input[type=range]{accent-color:var(--dsw-alias-brand-primary);width:100%}.bWwFiW_modalFoot{justify-content:flex-end;gap:8px;margin-top:6px;display:flex}.bWwFiW_pager{gap:var(--space-3);margin-top:var(--space-4);padding:var(--space-1) 0;color:var(--dsw-alias-label-secondary);font-size:var(--fs-body);font-variant-numeric:tabular-nums;animation:bWwFiW_fadeSoft var(--dur-base) var(--ease-spring) both;justify-content:center;align-items:center;display:flex}.bWwFiW_pager .bWwFiW_button{width:28px;transition:transform var(--dur-fast) var(--ease-spring), opacity var(--dur-fast) var(--ease-spring), background var(--dur-fast) var(--ease-spring);padding:0}.bWwFiW_pager .bWwFiW_button:not(:disabled):hover{transform:translateY(-1px)}.bWwFiW_pager .bWwFiW_button:disabled{opacity:.3}.bWwFiW_skeletonList{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;display:flex}.bWwFiW_skeleton{padding:var(--space-3) var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l1);gap:var(--space-2);animation:bWwFiW_itemIn var(--dur-base) var(--ease-spring) both;flex-direction:column;display:flex}.bWwFiW_skeleton i{background:linear-gradient(90deg, color-mix(in srgb, var(--dsw-alias-label-tertiary) 10%, transparent) 25%, color-mix(in srgb, var(--dsw-alias-label-tertiary) 22%, transparent) 50%, color-mix(in srgb, var(--dsw-alias-label-tertiary) 10%, transparent) 75%);background-size:200% 100%;border-radius:4px;height:10px;animation:1.6s linear infinite bWwFiW_shimmer;display:block}.bWwFiW_skeleton i:first-child{width:30%}.bWwFiW_skeleton i:nth-child(2){width:80%;animation-delay:80ms}.bWwFiW_skeleton i:last-child{width:55%;animation-delay:.16s}@keyframes bWwFiW_shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.bWwFiW_empty{text-align:center;color:var(--dsw-alias-label-secondary);font-size:var(--fs-ctrl);animation:bWwFiW_fadeSoft var(--dur-slow) var(--ease-spring) both;padding:56px 16px}.bWwFiW_empty b{color:var(--dsw-alias-label-primary);font-size:var(--fs-display);margin-bottom:var(--space-1);font-weight:500;display:block}.bWwFiW_empty span{color:var(--dsw-alias-label-tertiary);font-size:var(--fs-body)}.bWwFiW_empty:before{content:"";border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 35%, var(--dsw-alias-border-l2));background:linear-gradient(135deg, color-mix(in srgb, var(--dsw-alias-brand-primary) 18%, transparent), transparent 70%);border-radius:10px;width:36px;height:36px;margin:0 auto 14px;display:block}.bWwFiW_panelCard{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:var(--radius-card);padding:var(--space-4);animation:bWwFiW_cardIn var(--dur-slow) var(--ease-spring) both;position:relative}@keyframes bWwFiW_cardIn{0%{opacity:0;transform:scale(.99)}to{opacity:1;transform:none}}.bWwFiW_panelCard+.bWwFiW_panelCard{animation-delay:60ms}.bWwFiW_benchBar{gap:var(--space-2);margin-bottom:var(--space-3);display:flex}.bWwFiW_benchBar .bWwFiW_search{flex:1;min-width:0}.bWwFiW_benchBar .bWwFiW_button{flex:none}.bWwFiW_benchMeta{gap:var(--space-3);margin-bottom:var(--space-2);color:var(--dsw-alias-label-tertiary);font-size:var(--fs-micro);flex-wrap:wrap;align-items:baseline;display:flex}.bWwFiW_degradedNote{color:var(--dsw-alias-state-warn-primary)}.bWwFiW_benchEmpty{color:var(--dsw-alias-label-tertiary);font-size:var(--fs-body);padding:var(--space-2) 0}.bWwFiW_benchList{margin-top:var(--space-2);border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;display:flex}.bWwFiW_benchRow{padding:var(--space-3) var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l1);transition:background var(--dur-fast) var(--ease-spring);animation:bWwFiW_itemIn var(--dur-base) var(--ease-spring) both}.bWwFiW_benchList>.bWwFiW_benchRow:last-child{border-bottom:0}.bWwFiW_benchRow:hover{background:var(--dsw-alias-bg-layer-1)}.bWwFiW_benchHead{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.bWwFiW_viaChip{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-fill-tsp-secondary);font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:var(--fs-tag);border-radius:4px;height:16px;padding:0 6px;line-height:16px}.bWwFiW_benchScore{color:var(--dsw-alias-label-tertiary);font-size:var(--fs-micro);font-variant-numeric:tabular-nums;margin-left:auto}.bWwFiW_benchContent{margin:var(--space-2) 0;color:var(--dsw-alias-label-primary);font-size:var(--fs-body);word-break:break-word;-webkit-line-clamp:3;-webkit-box-orient:vertical;line-height:1.55;display:-webkit-box;overflow:hidden}.bWwFiW_benchId{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.bWwFiW_mapWrap{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_map{background:color-mix(in srgb, var(--dsw-alias-bg-base) 70%, transparent);border-radius:var(--radius-control);border:1px solid var(--dsw-alias-border-l2);user-select:none;width:100%;height:auto;display:block}.bWwFiW_node{cursor:grab;transition:transform var(--dur-fast) var(--ease-spring)}.bWwFiW_node:active{cursor:grabbing}.bWwFiW_tooltip{pointer-events:none}.bWwFiW_legend{gap:var(--space-3);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;display:flex}.bWwFiW_legendItem{align-items:center;gap:var(--space-1);display:inline-flex}.bWwFiW_legendDot{border-radius:50%;width:8px;height:8px;display:inline-block}.bWwFiW_node,.bWwFiW_edgeFade{animation:bWwFiW_corridorFadeIn var(--dur-slow) var(--ease-spring) backwards}@keyframes bWwFiW_corridorFadeIn{0%{opacity:0;filter:blur(2px)}to{opacity:1;filter:none}}.bWwFiW_progressBar{background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 18%, transparent);border-radius:2px;height:4px;overflow:hidden}.bWwFiW_progressBar i{background:var(--dsw-alias-brand-primary);height:100%;transition:width var(--dur-slow) var(--ease-out);border-radius:2px;display:block}.bWwFiW_telePrivacy{align-items:center;gap:var(--space-1);border-radius:var(--radius-control);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);cursor:help;transition:background var(--dur-fast) var(--ease-spring), color var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring);background:0 0;border:1px solid #0000;outline:none;align-self:center;padding:4px 8px;display:inline-flex;position:relative}.bWwFiW_telePrivacy:hover,.bWwFiW_telePrivacy:focus-visible{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-fill-tsp-secondary);border-color:var(--dsw-alias-border-l2)}.bWwFiW_telePrivacy svg{opacity:.85;flex:none}.bWwFiW_telePrivacyHint{white-space:nowrap}.bWwFiW_telePrivacyTip{min-width:260px;max-width:320px;padding:var(--space-2) var(--space-3);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:var(--radius-control);box-shadow:0 6px 18px -8px color-mix(in srgb, var(--dsw-alias-label-primary) 24%, transparent);font-size:var(--fs-body);color:var(--dsw-alias-label-primary);white-space:normal;pointer-events:none;opacity:0;transition:opacity var(--dur-fast) var(--ease-spring), transform var(--dur-fast) var(--ease-spring);z-index:5;text-align:left;line-height:1.5;position:absolute;top:calc(100% + 6px);right:0;transform:translateY(-2px)}.bWwFiW_telePrivacy:hover .bWwFiW_telePrivacyTip,.bWwFiW_telePrivacy:focus-visible .bWwFiW_telePrivacyTip{opacity:1;transform:translateY(0)}.bWwFiW_timeline li{animation:bWwFiW_itemIn var(--dur-base) var(--ease-spring) both}.bWwFiW_timeline li:nth-child(2){animation-delay:40ms}.bWwFiW_timeline li:nth-child(3){animation-delay:80ms}.bWwFiW_timeline li:nth-child(4){animation-delay:.12s}.bWwFiW_timeline li:nth-child(5){animation-delay:.16s}.bWwFiW_timeline li:nth-child(n+6){animation-delay:.2s}.bWwFiW_tourProposal{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_tourGreeting{font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);margin:0;line-height:1.55}.bWwFiW_tourStops{gap:var(--space-2);counter-reset:tour;flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.bWwFiW_tourStops li{animation:bWwFiW_tourItemIn var(--dur-base) var(--ease-spring) backwards}.bWwFiW_tourStops li:nth-child(2){animation-delay:40ms}.bWwFiW_tourStops li:nth-child(3){animation-delay:80ms}.bWwFiW_tourStops li:nth-child(4){animation-delay:.12s}.bWwFiW_tourStops li:nth-child(n+5){animation-delay:.16s}.bWwFiW_tourStop{align-items:center;gap:var(--space-2);width:100%;padding:var(--space-2);border-radius:var(--radius-control);color:inherit;text-align:left;cursor:pointer;transition:background var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring), transform var(--dur-fast) var(--ease-spring);background:0 0;border:1px solid #0000;display:flex}.bWwFiW_tourStop:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 6%, var(--dsw-alias-bg-layer-1));border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 28%, var(--dsw-alias-border-l2));transform:translate(2px)}.bWwFiW_tourStop:active{transform:translate(2px)scale(.99)}@keyframes bWwFiW_tourItemIn{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}.bWwFiW_tourStopIndex{width:20px;height:20px;font-size:var(--fs-micro);color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-brand-primary);font-variant-numeric:tabular-nums;border-radius:50%;flex:none;justify-content:center;align-items:center;font-weight:600;display:inline-flex}.bWwFiW_tourStopBody{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.bWwFiW_tourStopKind{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);letter-spacing:.04em;text-transform:uppercase}.bWwFiW_tourStopText{font-size:var(--fs-body);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;line-height:1.4;overflow:hidden}.bWwFiW_tourHint{margin:var(--space-1) 0 0;font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);line-height:1.4}.bWwFiW_refurb{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_refurbHead{justify-content:space-between;align-items:center;gap:var(--space-2);padding-bottom:var(--space-2);display:flex}.bWwFiW_refurbHead .bWwFiW_button{height:24px;padding:0 var(--space-2);font-size:var(--fs-micro)}.bWwFiW_refurbCount{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums}.bWwFiW_refurbList{border-top:1px solid var(--dsw-alias-border-l1);animation:bWwFiW_refurbReflow var(--dur-slow) var(--ease-spring) backwards;flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.bWwFiW_refurbItem{align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l1);font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);animation:bWwFiW_refurbItemIn var(--dur-base) var(--ease-spring) backwards;flex-wrap:wrap;display:flex}.bWwFiW_refurbList>.bWwFiW_refurbItem:last-child{border-bottom:0}.bWwFiW_refurbItem:nth-child(2){animation-delay:40ms}.bWwFiW_refurbItem:nth-child(3){animation-delay:80ms}.bWwFiW_refurbItem:nth-child(4){animation-delay:.12s}.bWwFiW_refurbItem:nth-child(n+5){animation-delay:.16s}@keyframes bWwFiW_refurbReflow{0%{opacity:0;filter:blur(2px)}to{opacity:1;filter:none}}@keyframes bWwFiW_refurbItemIn{0%{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}.bWwFiW_refurbBadge{padding:2px var(--space-2);font-size:var(--fs-micro);letter-spacing:.04em;background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, var(--dsw-alias-bg-layer-1));border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 30%, var(--dsw-alias-border-l2));color:var(--dsw-alias-label-primary);cursor:pointer;transition:background var(--dur-fast) var(--ease-spring);border-radius:999px;flex:none;font-weight:600}.bWwFiW_refurbBadge:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, var(--dsw-alias-bg-layer-1))}.bWwFiW_refurbReason{text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical;flex:1;min-width:120px;line-height:1.45;display:-webkit-box;overflow:hidden}.bWwFiW_refurbConfidence{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none}.bWwFiW_refurbExec{height:24px;padding:0 var(--space-2);font-size:var(--fs-micro);flex:none;line-height:1}.bWwFiW_backfill{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_backfillIntro{font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);margin:0;line-height:1.6}.bWwFiW_backfillRules{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));display:grid}.bWwFiW_backfillRule{gap:var(--space-1);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);flex-direction:column;display:flex}.bWwFiW_backfillToggles{gap:var(--space-4);padding-top:var(--space-2);flex-wrap:wrap;display:flex}.bWwFiW_backfillToggle{align-items:center;gap:var(--space-2);font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);cursor:pointer;display:inline-flex}.bWwFiW_backfillEstimate{gap:var(--space-2);padding-top:var(--space-4);border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;display:flex}.bWwFiW_backfillNumbers{gap:var(--space-5);flex-wrap:wrap;display:flex}.bWwFiW_backfillMetric{font-size:var(--fs-body);color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums}.bWwFiW_backfillMuted{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);line-height:1.5}.bWwFiW_backfillActions{gap:var(--space-2);padding-top:var(--space-4);border-top:1px solid var(--dsw-alias-border-l1);flex-wrap:wrap;display:flex}.bWwFiW_backfillProgress{gap:var(--space-2);flex-direction:column;display:flex}.bWwFiW_backfillProgressHead{justify-content:space-between;align-items:baseline;gap:var(--space-2);font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;display:flex}.bWwFiW_backfillMeta{gap:var(--space-4);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex-wrap:wrap;display:flex}.bWwFiW_backfillFailures{font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);flex-direction:column;gap:2px;margin:0;padding:0;font-family:ui-monospace,SF Mono,Menlo,monospace;list-style:none;display:flex}.bWwFiW_jev{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_jevIntro{font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);margin:0;line-height:1.6}.bWwFiW_jevToggleRow{align-items:center;gap:var(--space-4);padding-top:var(--space-2);flex-wrap:wrap;display:flex}.bWwFiW_jevToggle{align-items:center;gap:var(--space-2);font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);cursor:pointer;display:inline-flex}.bWwFiW_jevStatus{font-size:var(--fs-micro);color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.bWwFiW_jevForm{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.bWwFiW_jevField{gap:var(--space-1);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);flex-direction:column;display:flex}.bWwFiW_jevMuted{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);line-height:1.5}.bWwFiW_jevActions{gap:var(--space-2);padding-top:var(--space-4);border-top:1px solid var(--dsw-alias-border-l1);flex-wrap:wrap;display:flex}.bWwFiW_jevObs{gap:var(--space-2);padding-top:var(--space-4);border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;display:flex}.bWwFiW_jevObsHead{font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);font-weight:600}.bWwFiW_jevObsItem{align-items:baseline;gap:var(--space-3);font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex-wrap:wrap;display:flex}.bWwFiW_jevObsTime{color:var(--dsw-alias-label-tertiary)}.bWwFiW_jevObsBadge{padding:0 var(--space-2);background:color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);color:var(--dsw-alias-label-primary);border-radius:3px;font-weight:600}.bWwFiW_jevObsBadgeGood{background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#2da44e) 14%, transparent);color:var(--dsw-alias-state-success-primary,#2da44e)}.bWwFiW_jevObsBadgeWarn{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);color:var(--dsw-alias-state-error-primary)}.bWwFiW_jevObsError{color:var(--dsw-alias-state-error-primary);word-break:break-all}.bWwFiW_toastViewport{top:var(--space-4);right:var(--space-4);z-index:9999;gap:var(--space-2);pointer-events:none;flex-direction:column;max-width:min(360px,100vw - 32px);display:flex;position:fixed}.bWwFiW_toast{align-items:flex-start;gap:var(--space-2);padding:var(--space-3);border-radius:var(--radius-card);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);box-shadow:0 6px 18px -8px color-mix(in srgb, var(--dsw-alias-label-primary) 24%, transparent);font-size:var(--fs-body);color:var(--dsw-alias-label-primary);pointer-events:auto;animation:bWwFiW_toastIn var(--dur-base) var(--ease-spring) both;line-height:1.5;display:flex}.bWwFiW_toastBody{word-break:break-word;flex:1;min-width:0}.bWwFiW_toastDismiss{color:var(--dsw-alias-label-tertiary);cursor:pointer;padding:0 var(--space-1);transition:color var(--dur-fast) var(--ease-spring);background:0 0;border:none;font-size:16px;line-height:1}.bWwFiW_toastDismiss:hover{color:var(--dsw-alias-label-primary)}.bWwFiW_toastInfo{border-left:3px solid var(--dsw-alias-brand-primary)}.bWwFiW_toastSuccess{border-left:3px solid color-mix(in srgb, var(--dsw-alias-state-success-primary,#2da44e) 80%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#2da44e) 6%, var(--dsw-alias-bg-layer-1))}.bWwFiW_toastError{border-left:3px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 80%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 6%, var(--dsw-alias-bg-layer-1))}.bWwFiW_toastWarning{border-left:3px solid color-mix(in srgb, #d4a017 80%, var(--dsw-alias-border-l2));background:color-mix(in srgb, #d4a017 6%, var(--dsw-alias-bg-layer-1))}@keyframes bWwFiW_toastIn{0%{opacity:0;transform:translate(8px)scale(.98)}to{opacity:1;transform:none}}.bWwFiW_section{min-width:0}.bWwFiW_sectionHead{align-items:baseline;gap:var(--space-3);margin-bottom:var(--space-3);display:flex}.bWwFiW_sectionTitle{font-size:var(--fs-ctrl);color:var(--dsw-alias-label-primary);margin:0;font-weight:600}.bWwFiW_sectionHint{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);line-height:1.4}.bWwFiW_sectionAction{align-self:center;margin-left:auto}.bWwFiW_hero{gap:var(--space-5);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.bWwFiW_heroMetrics{gap:var(--space-6);flex-wrap:wrap;min-width:0;display:flex}.bWwFiW_heroSide{align-items:center;gap:var(--space-4);min-width:0;display:flex}.bWwFiW_heroFoot{justify-content:space-between;align-items:center;gap:var(--space-3);margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--dsw-alias-border-l1);flex-wrap:wrap;display:flex}.bWwFiW_metric{flex-direction:column;gap:2px;min-width:0;display:flex}.bWwFiW_metricLabel{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);white-space:nowrap}.bWwFiW_metricValue{letter-spacing:-.02em;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:28px;font-weight:600;line-height:1.1}.bWwFiW_metricValueSecondary{font-size:20px}.bWwFiW_metricTail{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);white-space:nowrap}.bWwFiW_ring{flex-shrink:0;width:56px;height:56px;position:relative}.bWwFiW_ring svg{display:block;transform:rotate(-90deg)}.bWwFiW_ring b{font-size:var(--fs-display);font-variant-numeric:tabular-nums;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}:root{--room-fact:#3b6ef5;--room-preference:#a45cf0;--room-decision:#16a394;--room-episode:#e08a2e;--room-skill:#d94f8a}@media (prefers-color-scheme:dark){:root{--room-fact:#6b96ff;--room-preference:#bb86f7;--room-decision:#3fc7b5;--room-episode:#f0a95a;--room-skill:#f077a9}}.bWwFiW_pill.bWwFiW_roomFact{background:color-mix(in srgb, var(--room-fact) 12%, transparent);color:var(--room-fact)}.bWwFiW_pill.bWwFiW_roomPreference{background:color-mix(in srgb, var(--room-preference) 12%, transparent);color:var(--room-preference)}.bWwFiW_pill.bWwFiW_roomDecision{background:color-mix(in srgb, var(--room-decision) 12%, transparent);color:var(--room-decision)}.bWwFiW_pill.bWwFiW_roomEpisode{background:color-mix(in srgb, var(--room-episode) 12%, transparent);color:var(--room-episode)}.bWwFiW_pill.bWwFiW_roomSkill{background:color-mix(in srgb, var(--room-skill) 12%, transparent);color:var(--room-skill)}.bWwFiW_roomList{flex-direction:column;display:flex}.bWwFiW_roomRow{gap:var(--space-3);padding:var(--space-2) 0;font-size:var(--fs-body);grid-template-columns:10px minmax(0,1fr) auto;align-items:center;display:grid}.bWwFiW_roomSwatch{background:var(--room-fact);border-radius:3px;width:10px;height:10px}.bWwFiW_roomSwatch.bWwFiW_roomFact{background:var(--room-fact)}.bWwFiW_roomSwatch.bWwFiW_roomPreference{background:var(--room-preference)}.bWwFiW_roomSwatch.bWwFiW_roomDecision{background:var(--room-decision)}.bWwFiW_roomSwatch.bWwFiW_roomEpisode{background:var(--room-episode)}.bWwFiW_roomSwatch.bWwFiW_roomSkill{background:var(--room-skill)}.bWwFiW_roomCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums}.bWwFiW_logToolbar{align-items:center;gap:var(--space-3);margin-bottom:var(--space-3);flex-wrap:wrap;display:flex}.bWwFiW_logToolbar .bWwFiW_segGroup{margin-left:auto}.bWwFiW_logCounts{align-items:center;gap:var(--space-4);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);display:flex}.bWwFiW_logCounts>span{align-items:center;gap:6px;display:inline-flex}.bWwFiW_logCounts b{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.bWwFiW_logDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;flex:none;width:6px;height:6px}.bWwFiW_logDotWrite{background:var(--dsw-alias-brand-primary)}.bWwFiW_logDotIngest{background:var(--dsw-alias-state-success-primary)}.bWwFiW_logDotRetrieve{background:var(--dsw-alias-state-warn-primary)}.bWwFiW_logDotOrganize{background:var(--room-decision)}.bWwFiW_logList{flex-direction:column;padding:0;display:flex}.bWwFiW_logRow{gap:var(--space-3);padding:var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l1);font-size:var(--fs-body);grid-template-columns:8px 76px 96px 60px minmax(0,1fr);align-items:center;display:grid}.bWwFiW_logRow:last-child{border-bottom:0}.bWwFiW_logRow:hover{background:var(--dsw-alias-bg-layer-1)}.bWwFiW_logTime{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap}.bWwFiW_logOp{color:var(--dsw-alias-label-primary);font-weight:500}.bWwFiW_logScope{color:var(--dsw-alias-label-tertiary)}.bWwFiW_logDetail{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bWwFiW_profileCard{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_profileHeading{font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);margin:0;font-weight:600}.bWwFiW_profileContent{padding:var(--space-3);border:1px solid var(--dsw-alias-border-l1);border-radius:var(--radius-control);background:var(--dsw-alias-bg-layer-1);font-family:inherit;font-size:var(--fs-body);white-space:pre-wrap;word-break:break-word;max-height:200px;margin:0;line-height:1.6;overflow-y:auto}.bWwFiW_profilePickerRow{gap:var(--space-4);flex-wrap:wrap;display:flex}.bWwFiW_profilePickerRow label{gap:var(--space-1);flex-direction:column;display:flex}.bWwFiW_profileSelect{padding:var(--space-1) var(--space-2);border:1px solid var(--dsw-alias-border-l1);border-radius:var(--radius-control);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font-size:var(--fs-micro)}.bWwFiW_profileDiff{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--radius-control);font-size:var(--fs-micro);max-height:220px;line-height:1.6;overflow-y:auto}.bWwFiW_profileDiffAdd{padding:0 var(--space-2);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent);color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word}.bWwFiW_profileDiffDel{padding:0 var(--space-2);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);color:var(--dsw-alias-label-tertiary);white-space:pre-wrap;word-break:break-word;text-decoration:line-through}.bWwFiW_profileDiffSame{padding:0 var(--space-2);color:var(--dsw-alias-label-tertiary);white-space:pre-wrap;word-break:break-word}.bWwFiW_episodeRangeSep{color:var(--dsw-alias-label-tertiary);font-size:var(--fs-body)}.bWwFiW_episodeAround{border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 35%, var(--dsw-alias-border-l2))}.bWwFiW_episodeAroundHead{margin-bottom:var(--space-2);font-size:var(--fs-ctrl);color:var(--dsw-alias-label-primary);justify-content:space-between;align-items:center;display:flex}.bWwFiW_episodeHead{gap:var(--space-1);padding-bottom:var(--space-2);margin-bottom:var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l2);flex-direction:column;display:flex}.bWwFiW_episodeSummary{font-size:var(--fs-ctrl);color:var(--dsw-alias-label-primary);margin:0;font-weight:500;line-height:1.5}.bWwFiW_episodeSummaryMissing{color:var(--dsw-alias-label-tertiary);font-weight:400}.bWwFiW_episodeHeadMeta{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary)}.bWwFiW_episodeRow{align-items:baseline;gap:var(--space-2);padding:var(--space-1) 0;font-size:var(--fs-body);display:flex}.bWwFiW_episodeRow+.bWwFiW_episodeRow{border-top:1px solid color-mix(in srgb, var(--dsw-alias-border-l2) 55%, transparent)}.bWwFiW_episodeRowTime{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none}.bWwFiW_episodeRowKind{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);flex:none}.bWwFiW_episodeRowText{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.bWwFiW_episodeRow .bWwFiW_button{height:22px;font-size:var(--fs-micro);flex:none;padding:0 8px}@media (width<=960px){.bWwFiW_hero{grid-template-columns:1fr}.bWwFiW_heroMetrics{gap:var(--space-5)}.bWwFiW_logRow{grid-template-columns:8px 64px 88px minmax(0,1fr)}.bWwFiW_logScope{display:none}}@media (width<=720px){.bWwFiW_metricValue{font-size:22px}}`,document.head.appendChild(e)}var o={benchList:`bWwFiW_benchList`,tourProposal:`bWwFiW_tourProposal`,roomCount:`bWwFiW_roomCount`,map:`bWwFiW_map`,telePrivacyTip:`bWwFiW_telePrivacyTip`,backfill:`bWwFiW_backfill`,backfillActions:`bWwFiW_backfillActions`,tourGreeting:`bWwFiW_tourGreeting`,expandIn:`bWwFiW_expandIn`,tourStopText:`bWwFiW_tourStopText`,shimmer:`bWwFiW_shimmer`,backfillProgressHead:`bWwFiW_backfillProgressHead`,logDetail:`bWwFiW_logDetail`,roomFact:`bWwFiW_roomFact`,viaChip:`bWwFiW_viaChip`,episodeRangeSep:`bWwFiW_episodeRangeSep`,sectionHint:`bWwFiW_sectionHint`,mainCol:`bWwFiW_mainCol`,fieldLabel:`bWwFiW_fieldLabel`,corridorFadeIn:`bWwFiW_corridorFadeIn`,exportItemLabel:`bWwFiW_exportItemLabel`,toastInfo:`bWwFiW_toastInfo`,dueDot:`bWwFiW_dueDot`,expand:`bWwFiW_expand`,jevToggle:`bWwFiW_jevToggle`,toastIn:`bWwFiW_toastIn`,toastWarning:`bWwFiW_toastWarning`,toastDismiss:`bWwFiW_toastDismiss`,refurb:`bWwFiW_refurb`,headerLogo:`bWwFiW_headerLogo`,drawerBody:`bWwFiW_drawerBody`,headerActions:`bWwFiW_headerActions`,backfillToggle:`bWwFiW_backfillToggle`,segItem:`bWwFiW_segItem`,jev:`bWwFiW_jev`,logList:`bWwFiW_logList`,itemOps:`bWwFiW_itemOps`,episodeAround:`bWwFiW_episodeAround`,panelCard:`bWwFiW_panelCard`,outcomeFailure:`bWwFiW_outcomeFailure`,refurbConfidence:`bWwFiW_refurbConfidence`,backfillNumbers:`bWwFiW_backfillNumbers`,jevObsError:`bWwFiW_jevObsError`,kind:`bWwFiW_kind`,jevForm:`bWwFiW_jevForm`,logDotOrganize:`bWwFiW_logDotOrganize`,heroSide:`bWwFiW_heroSide`,profileDiff:`bWwFiW_profileDiff`,metric:`bWwFiW_metric`,chipRow:`bWwFiW_chipRow`,tooltip:`bWwFiW_tooltip`,jevMuted:`bWwFiW_jevMuted`,benchHead:`bWwFiW_benchHead`,outcomeSuccess:`bWwFiW_outcomeSuccess`,content:`bWwFiW_content`,expandLoading:`bWwFiW_expandLoading`,backfillMuted:`bWwFiW_backfillMuted`,exportMenu:`bWwFiW_exportMenu`,sectionAction:`bWwFiW_sectionAction`,backfillRule:`bWwFiW_backfillRule`,toastViewport:`bWwFiW_toastViewport`,metricLabel:`bWwFiW_metricLabel`,scrimIn:`bWwFiW_scrimIn`,drawerClose:`bWwFiW_drawerClose`,danger:`bWwFiW_danger`,progressBar:`bWwFiW_progressBar`,logDotWrite:`bWwFiW_logDotWrite`,exportItemHint:`bWwFiW_exportItemHint`,toastBody:`bWwFiW_toastBody`,benchMeta:`bWwFiW_benchMeta`,tabItem:`bWwFiW_tabItem`,tourStopKind:`bWwFiW_tourStopKind`,benchEmpty:`bWwFiW_benchEmpty`,tourStop:`bWwFiW_tourStop`,logDot:`bWwFiW_logDot`,logDotRetrieve:`bWwFiW_logDotRetrieve`,dueBadge:`bWwFiW_dueBadge`,heroMetrics:`bWwFiW_heroMetrics`,pill:`bWwFiW_pill`,backfillIntro:`bWwFiW_backfillIntro`,refurbReflow:`bWwFiW_refurbReflow`,refurbReason:`bWwFiW_refurbReason`,logOp:`bWwFiW_logOp`,roomEpisode:`bWwFiW_roomEpisode`,toast:`bWwFiW_toast`,benchRow:`bWwFiW_benchRow`,headerBrand:`bWwFiW_headerBrand`,primary:`bWwFiW_primary`,cardIn:`bWwFiW_cardIn`,pager:`bWwFiW_pager`,logRow:`bWwFiW_logRow`,statusForgotten:`bWwFiW_statusForgotten`,itemStamp:`bWwFiW_itemStamp`,benchScore:`bWwFiW_benchScore`,profileSelect:`bWwFiW_profileSelect`,wsFollow:`bWwFiW_wsFollow`,barUp:`bWwFiW_barUp`,fieldRow:`bWwFiW_fieldRow`,relChip:`bWwFiW_relChip`,jevObsBadgeGood:`bWwFiW_jevObsBadgeGood`,jevObsBadge:`bWwFiW_jevObsBadge`,episodeSummaryMissing:`bWwFiW_episodeSummaryMissing`,search:`bWwFiW_search`,logDotIngest:`bWwFiW_logDotIngest`,backfillRules:`bWwFiW_backfillRules`,wsBar:`bWwFiW_wsBar`,drawerIn:`bWwFiW_drawerIn`,tourStops:`bWwFiW_tourStops`,skeleton:`bWwFiW_skeleton`,degradedNote:`bWwFiW_degradedNote`,heroFoot:`bWwFiW_heroFoot`,profileCard:`bWwFiW_profileCard`,edgeFade:`bWwFiW_edgeFade`,refurbHead:`bWwFiW_refurbHead`,refurbCount:`bWwFiW_refurbCount`,modalFoot:`bWwFiW_modalFoot`,attrGrid:`bWwFiW_attrGrid`,itemBody:`bWwFiW_itemBody`,relBlock:`bWwFiW_relBlock`,roomDecision:`bWwFiW_roomDecision`,button:`bWwFiW_button`,backfillFailures:`bWwFiW_backfillFailures`,drawerHead:`bWwFiW_drawerHead`,exportCaret:`bWwFiW_exportCaret`,editForm:`bWwFiW_editForm`,jevObsBadgeWarn:`bWwFiW_jevObsBadgeWarn`,logTime:`bWwFiW_logTime`,exportItem:`bWwFiW_exportItem`,selected:`bWwFiW_selected`,legendItem:`bWwFiW_legendItem`,benchId:`bWwFiW_benchId`,wsMuted:`bWwFiW_wsMuted`,backfillToggles:`bWwFiW_backfillToggles`,jevIntro:`bWwFiW_jevIntro`,toastError:`bWwFiW_toastError`,episodeAroundHead:`bWwFiW_episodeAroundHead`,itemList:`bWwFiW_itemList`,tabPanel:`bWwFiW_tabPanel`,pillIn:`bWwFiW_pillIn`,backfillMeta:`bWwFiW_backfillMeta`,roomList:`bWwFiW_roomList`,mapWrap:`bWwFiW_mapWrap`,metricTail:`bWwFiW_metricTail`,episodeRowTime:`bWwFiW_episodeRowTime`,layout:`bWwFiW_layout`,benchBar:`bWwFiW_benchBar`,telePrivacyHint:`bWwFiW_telePrivacyHint`,itemTags:`bWwFiW_itemTags`,tabUnderline:`bWwFiW_tabUnderline`,input:`bWwFiW_input`,sideCol:`bWwFiW_sideCol`,segIndicator:`bWwFiW_segIndicator`,segScope:`bWwFiW_segScope`,legend:`bWwFiW_legend`,jevObsTime:`bWwFiW_jevObsTime`,jevObs:`bWwFiW_jevObs`,telePrivacy:`bWwFiW_telePrivacy`,tourStopBody:`bWwFiW_tourStopBody`,roomSkill:`bWwFiW_roomSkill`,exportWrap:`bWwFiW_exportWrap`,section:`bWwFiW_section`,profilePickerRow:`bWwFiW_profilePickerRow`,profileDiffSame:`bWwFiW_profileDiffSame`,jevField:`bWwFiW_jevField`,node:`bWwFiW_node`,toolbarRow:`bWwFiW_toolbarRow`,tabs:`bWwFiW_tabs`,backfillMetric:`bWwFiW_backfillMetric`,refurbItem:`bWwFiW_refurbItem`,legendDot:`bWwFiW_legendDot`,batchBar:`bWwFiW_batchBar`,toastSuccess:`bWwFiW_toastSuccess`,roomRow:`bWwFiW_roomRow`,headerTitle:`bWwFiW_headerTitle`,tourHint:`bWwFiW_tourHint`,relChips:`bWwFiW_relChips`,logToolbar:`bWwFiW_logToolbar`,benchContent:`bWwFiW_benchContent`,tourStopIndex:`bWwFiW_tourStopIndex`,profileContent:`bWwFiW_profileContent`,timeline:`bWwFiW_timeline`,itemIn:`bWwFiW_itemIn`,panel:`bWwFiW_panel`,chip:`bWwFiW_chip`,jevToggleRow:`bWwFiW_jevToggleRow`,itemMeta:`bWwFiW_itemMeta`,backfillProgress:`bWwFiW_backfillProgress`,episodeSummary:`bWwFiW_episodeSummary`,itemCheck:`bWwFiW_itemCheck`,statusArchived:`bWwFiW_statusArchived`,jevActions:`bWwFiW_jevActions`,statusActive:`bWwFiW_statusActive`,wsSelect:`bWwFiW_wsSelect`,profileHeading:`bWwFiW_profileHeading`,episodeHead:`bWwFiW_episodeHead`,metricValue:`bWwFiW_metricValue`,refurbList:`bWwFiW_refurbList`,hero:`bWwFiW_hero`,logCounts:`bWwFiW_logCounts`,refurbExec:`bWwFiW_refurbExec`,episodeRow:`bWwFiW_episodeRow`,on:`bWwFiW_on`,refurbItemIn:`bWwFiW_refurbItemIn`,redacted:`bWwFiW_redacted`,jevStatus:`bWwFiW_jevStatus`,metricValueSecondary:`bWwFiW_metricValueSecondary`,jevObsHead:`bWwFiW_jevObsHead`,refurbBadge:`bWwFiW_refurbBadge`,item:`bWwFiW_item`,backfillEstimate:`bWwFiW_backfillEstimate`,profileDiffAdd:`bWwFiW_profileDiffAdd`,header:`bWwFiW_header`,drawer:`bWwFiW_drawer`,drawerTitle:`bWwFiW_drawerTitle`,jevObsItem:`bWwFiW_jevObsItem`,fadeSoft:`bWwFiW_fadeSoft`,panelIn:`bWwFiW_panelIn`,drawerScrim:`bWwFiW_drawerScrim`,empty:`bWwFiW_empty`,roomSwatch:`bWwFiW_roomSwatch`,episodeRowText:`bWwFiW_episodeRowText`,skeletonList:`bWwFiW_skeletonList`,reviewGrid:`bWwFiW_reviewGrid`,episodeHeadMeta:`bWwFiW_episodeHeadMeta`,wsChip:`bWwFiW_wsChip`,episodeRowKind:`bWwFiW_episodeRowKind`,sectionHead:`bWwFiW_sectionHead`,roomPreference:`bWwFiW_roomPreference`,ring:`bWwFiW_ring`,logScope:`bWwFiW_logScope`,chipOn:`bWwFiW_chipOn`,segGroup:`bWwFiW_segGroup`,tourItemIn:`bWwFiW_tourItemIn`,sectionTitle:`bWwFiW_sectionTitle`,profileDiffDel:`bWwFiW_profileDiffDel`};let s=`engram`,c={fact:`kindFact`,preference:`kindPreference`,decision:`kindDecision`,episode:`kindEpisode`,skill:`kindSkill`},l={nav:`记忆宫殿`,scopeUser:`私人宫殿`,scopeProject:`项目宫殿`,scopeShared:`共享宫殿`,projectFollow:`跟随当前工作区`,projectFollowNamed:`项目 · 跟随 {name}`,projectFollowHint:`项目宫殿跟随 GUI 当前选中的工作区(按会话归属判定)`,projectPinned:`项目 · {name}`,projectUnregistered:`未注册工作区`,projectNoWorkspace:`无工作区信息(进程默认)`,projectSwitch:`项目宫殿来源`,projectMemories:`{n} 条记忆`,projectProcessDefault:`进程默认目录`,refresh:`重访`,exportMd:`导出 MD`,exportJson:`导出 JSON`,export:`导出`,exportMirror:`镜像目录`,exportMdHint:`单文件,可直接分享`,exportJsonHint:`结构化全文,便于程序处理`,exportMirrorHint:`每条记忆一个 .md,可用 Obsidian 漫游`,allStatuses:`全部状态`,allKinds:`全部房间`,redactedAll:`全部铭牌`,redactedOnly:`含涂改`,redactedNone:`无涂改`,tagRedacted:`已涂改`,tagOutcomeSuccess:`管家验证·有效`,tagOutcomeFailure:`管家验证·失效`,searchPlaceholder:`在宫殿里寻找…`,statusActive:`对外开放`,statusArchived:`展厅陈列`,statusForgotten:`已闭馆`,kindFact:`事实厅`,kindPreference:`偏好阁`,kindDecision:`决策堂`,kindEpisode:`往事廊`,kindSkill:`技法坊`,labelContent:`铭牌`,labelKind:`房间`,labelStatus:`状态`,labelScope:`宫殿归属`,importance:`地标亮度`,confidence:`考据可靠度`,accessCount:`参观 {n} 人次`,labelCreated:`开馆时间`,timeJustNow:`方才`,timeMinutesAgo:`{n} 分钟前`,timeHoursAgo:`{n} 小时前`,timeDaysAgo:`{n} 天前`,sourceExplicit:`管理员添置`,sourceSession:`发掘地 {id}`,round:`第 {n} 趟`,cardRedacted:`涂改 {n}`,detail:`参观`,edit:`修缮`,forget:`封门`,restore:`重开`,empty:`宫殿暂无可陈展的记忆`,emptyHint:`试试调整房间筛选,或新添一条`,loadFailed:`访客受挫:{msg}`,loading:`导览中…`,pagerInfo:`第 {page} / {pages} 页 · 共 {total} 条`,prevPage:`上一页`,nextPage:`下一页`,cancel:`作罢`,saveWithHint:`修缮(旧铭牌归展厅)`,detailAttributes:`铭牌`,detailSource:`发掘地`,detailRelations:`邻接走廊`,detailOperations:`管家日志`,relSupersededBy:`被替代`,relSupersedes:`替代`,relContradicts:`互斥`,relRelated:`相邻`,headerTitle:`记忆宫殿`,headerSubtitle:`跨会话长期记忆宫殿`,tabToday:`今日`,tabLibrary:`陈展`,tabCorridor:`走廊`,tabLog:`日志`,tabLibraryCount:`{n} 条`,roomsTitle:`房间目录`,roomsHint:`每间满 9 个桩位后开新间`,healthEvaluatedAt:`诊脉于 {time}`,logFilterAll:`全部`,logFilterWrite:`落成类`,logFilterIngest:`发掘`,logFilterRetrieve:`检索`,logFilterOrganize:`整理`,logCount:`{n} 条 · 两库合并倒序`,benchTitle:`检索实验台`,drawerClose:`归殿`,drawerTitle:`记忆铭牌`,kpiTotal:`记忆`,kpiActive:`开放`,kpiForgotten:`闭馆`,kpiSignal:`清晰度`,opWrite:`落成`,opWriteMerge:`落成·并入`,opUpdate:`修缮`,opForget:`封门`,opRestore:`重开`,opDecay:`闭门陈列`,opSuperseded:`被替代`,opIngestRequest:`发掘请求`,opIngestDone:`发掘完成`,opOutcomeReport:`管家验证`,opAssess:`证据判定`,opConsolidation:`闭馆整理`,opReviewAnswer:`复习答题`,opSlotAssign:`排桩`,opSlotBackfill:`批量排桩`,opRoomOpen:`开新房`,consolidateArchived:`归档 {n}`,consolidateMerged:`合并 {n}`,consolidateSkipped:`跳过 {n}`,decayArchived:`归档 {n}`,slotBackfilled:`新排 {n} 个桩位`,roomOpened:`开新房 {room}`,reviewAnswered:`评分 {grade} · 下次 {days} 天后`,assessAdequate:`证据充足`,assessInadequate:`证据不足`,assessRefs:`{n} 条证据`,opSearchRewrite:`路线改写`,opCompressRequest:`导览压缩`,opDistillRequest:`合并房间`,selectAll:`本页全选`,deselectAll:`取消全选`,selectedCount:`已选 {n} 条`,batchForget:`批量封门({n})`,batchForgetConfirm:`确认封门 {n} 条?`,batchRestore:`批量重开({n})`,clearSelection:`清空所选`,sectionCorridor:`走廊鸟瞰`,corridorEmpty:`走廊空空如也,落成几条记忆后这里会出现鸟瞰图。`,corridorFailed:`走廊加载失败`,corridorLoad:`加载走廊鸟瞰…`,corridorAria:`走廊鸟瞰图`,corridorSummary:`{nodes} 条记忆 · {edges} 条走廊`,edgeSupersedes:`推陈出新`,edgeContradicts:`互斥`,edgeOther:`相邻 / 支持 / 提炼`,healthLoading:`正在诊脉…`,teleFailed:`遥测加载失败`,teleLoading:`聚合管家记录中…`,teleGroupRecent:`近 7 天`,telePrivacyHint:`数据仅在本机聚合 · 不外传`,telePrivacyTip:`所有 op_log 与遥测计数只在当前进程的 SQLite 里聚合,从未发送至任何外部服务;本机重启或卸载插件即清空。`,teleWrites:`落成`,teleIngest:`发掘`,teleConsolidate:`整理`,benchPlaceholder:`说出要找的房间关键词或语义…`,benchRun:`出发`,benchScopeAll:`全部宫殿`,benchHits:`到访 {n} 间`,benchDegraded:`语义灯熄,仅关键词引路`,benchEmpty:`此路不通`,benchNote:`试走与正式导览共用同一张地图,会计入参观人次`,viaFts:`关键词`,viaVec:`语义`,viaBoth:`双路`,viaEdgeLabel:`邻接走廊`,benchRewrite:`路线改写为 {n} 段`,benchCompress:`铭牌压缩 {n} 条`,activityEmpty:`暂无管家活动`,detailRevisions:`陈展沿革`,tourProposalTitle:`入殿导航`,tourProposalEmpty:`宫殿尚空,建议先放第一段记忆(调用 engram_save)`,tourProposalHint:`点击记忆可展开抽屉查看铭牌`,tourFocusAll:`全部`,refurbTitle:`翻新清单`,refurbEmpty:`所有房间状态健康,无翻新建议`,refurbRun:`重新扫描`,refurbActionDemote:`降级`,refurbActionMerge:`合并`,refurbActionReview:`复习`,refurbActionSplit:`拆分`,refurbCount:`{n} 条建议`,refurbExecute:`执行`,refurbConfirmDemote:`确认降级这条记忆?执行后状态转 archived,可在统计页恢复。`,refurbConfirmMerge:`确认合并 {n} 条相似记忆?将触发 engram_distill 把它们归纳为 1 条高层规律。`,refurbDemoteDone:`已降级`,refurbMergeDone:`合并任务已派发`,refurbActionFailed:`执行失败:{msg}`,refurbMergeEmpty:`无可合并的候选条目`,heroDue:`今日到期`,filterDueToday:`今日到期`,sortTime:`按时间`,sortTour:`按巡游路线`,dueBadgeLabel:`今日到期 {n} 条,点击在陈展中筛选`,tabBackfill:`回填`,backfillIntro:`把 dsh 的历史会话逐轮提炼进宫殿:每条会话写进它自己 cwd 对应的项目库;已摄取过的轮次按幂等键自动跳过,中断后再次开始即可续做。回填的条目不会进入今日复习队列。`,backfillRulesTitle:`导入规则`,backfillDays:`时间窗`,backfillDaysAll:`不限`,backfillDaysUnit:`{n} 天`,backfillMaxTurns:`单会话最多轮数`,backfillMaxTotal:`本次总轮数上限`,backfillModel:`辅助模型`,backfillModelAuto:`自动(用当前在用的模型)`,backfillIncludeSubagents:`包含子代理会话`,backfillIncludeSeeded:`包含种子会话`,backfillIncludeNoCwd:`包含无 cwd 会话(只能进私人宫殿)`,backfillReestimate:`重新估算`,backfillEstimateTitle:`估算`,backfillCandidates:`候选会话 {n}`,backfillPendingTurns:`待处理 {n} 轮`,backfillAlready:`已摄取跳过 {n} 轮`,backfillSkippedDetail:`已排除:子代理 {subagent} · 种子 {seeded} · 无 cwd {noCwd} · 超时间窗 {tooOld} · 日志不可读 {unreadable}`,backfillTruncated:`候选超出总轮数上限:本次只处理最近的一部分会话,可调大上限或分几次跑`,backfillStart:`开始回填`,backfillPause:`暂停`,backfillStateRunning:`回填中…`,backfillStateDone:`已完成`,backfillStateCancelled:`已中止(可再次开始续做)`,backfillStateFailed:`失败`,backfillProgressSessions:`会话 {done}/{total}`,backfillProgressTurns:`轮次 {done}/{total}`,backfillWritten:`写入 {n} 条`,backfillTurnsSkipped:`跳过 {n} 轮`,backfillTurnsFailed:`失败 {n} 轮`,backfillFailures:`失败明细`,backfillEstimating:`正在估算…`,backfillSkipReasons:`跳过原因`,backfillRouteHint:`失败多半是因为历史会话当时用的模型在当前环境不可用:可在 cordis.yml 配置 provider/model,或先用目标模型跑一轮会话(回填会复用当前在用的模型)再重试——已完成的轮次会自动跳过。`,skipLowActivity:`低活动轮`,skipChitchat:`寒暄轮`,skipForbidden:`显式禁记`,skipNoContent:`无用户内容`,skipAlready:`已摄取`,skipNoTurn:`无此轮`,skipNoRoute:`日志无路由`,skipUnparsable:`提炼输出不可解析`,opProfileEdit:`画像修订`,profileOpCreate:`创建 v{to} · {chars} 字`,profileOpEdit:`编辑 v{from}→v{to} · {chars} 字`,profileOpRollback:`回滚 v{from}→v{to}(还原 v{restored})· {chars} 字`,profileTitle:`画像 curated block`,profileEmpty:`尚无 curated 画像`,profileEmptyHint:`在会话里让 agent 调 engram_profile_edit 创建;创建后会话开始时优先于自动派生画像注入。`,profileCurrent:`当前内容 · v{n}`,profileHistory:`版本历史(新→旧)`,profileSourceEdit:`编辑`,profileSourceRollback:`回滚`,profileDiffBase:`基准版本`,profileDiffTarget:`对比版本`,profileDiffNone:`两个版本内容相同`,profileLoadFailed:`画像加载失败`,tabEpisodes:`往事`,episodeSince:`开始日期`,episodeUntil:`结束日期`,episodeSessionId:`会话 id(可选)`,episodeApply:`应用`,episodeReset:`重置`,episodeHint:`按会话分组浏览经历;组头是摄取时生成的一句话摘要,点条目的「邻近」看当时前后还发生了什么`,episodeNoGroups:`该范围内没有情景记忆`,episodeNoSession:`无会话来源`,episodeSummaryMissing:`(该会话尚未生成摘要:跑一次历史回填即可补上)`,episodeEntries:`{n} 条情景`,episodeNearby:`邻近`,episodeAroundTitle:`时间邻近扩展`,episodeAroundEmpty:`邻近窗口内没有其他情景`,episodeClose:`收起`,tabEntities:`实体`,entityHint:`从记忆中抽取的人物、项目、工具与概念;点「查看」看一条实体牵出的所有记忆`,entityKindAll:`全部类别`,entityKindPerson:`人物`,entityKindProject:`项目`,entityKindTool:`工具`,entityKindConcept:`概念`,entityKindOther:`其他`,entitySearchPlaceholder:`搜索实体名或别名`,entityCount:`{n} 个实体`,entityMemories:`{n} 条关联记忆`,entityOpen:`查看`,entityAliases:`别名`,entityNoMemories:`暂无关联记忆`,entityEmpty:`该宫殿还没有实体;保存带实体提及的记忆后会自动出现`,factSection:`事实链({n} 条)`,factEmpty:`暂无事实;摄取时从记忆抽取的实体事实会出现在这里`,factValid:`生效`,factInvalid:`已失效`,tabJev:`裁决`,jevIntro:`Jev 系统一裁决:写入落库前对模糊记忆做三路判定(合并 / 接受 / 搁置)并确认矛盾边。密钥保存在本机数据目录(0600 文件),保存后立即生效,无需重启;Jev 不可用时自动回落纯规则四态。`,jevEnabled:`启用 Jev 裁决`,jevStatusOn:`Jev 裁决已生效`,jevStatusOff:`Jev 裁决未生效(纯规则四态)`,jevApiKey:`API 密钥`,jevApiKeyHint:`留空表示保留现有密钥;要清除已存密钥(回落 cordis.yml 配置)点「清除已存密钥」。`,jevApiKeyUnset:`未配置`,jevClearKey:`清除已存密钥`,jevKeyCleared:`已清除面板密钥,回落部署配置`,jevBaseUrl:`端点`,jevModel:`判决模型`,jevTimeoutMs:`超时(毫秒,1000-60000)`,jevThresholdsTitle:`裁决阈值(cordis.yml 高级配置,此处只读)`,jevThresholdLine:`判同一条 ≥{merge} · 判不同条 ≤{accept} · 矛盾确认 ≥{contradict}`,jevSave:`保存`,jevSaved:`已保存,配置即时生效`,jevLoadFailed:`加载失败`,jevTest:`测试连接`,jevTestOk:`连接正常:{ms} 毫秒,ping 概率 {p}`,jevTestFail:`连接失败:{error}`,jevObsTitle:`近期裁决(本进程,最多 50 条,重启清空)`,jevObsEmpty:`暂无记录;启用 Jev 后发生写入裁决时出现`,jevObsLoadFailed:`裁决记录加载失败`,jevObsSiteBand:`模糊带`,jevObsSiteContradiction:`矛盾确认`,jevObsVerdictMerge:`并入`,jevObsVerdictAccept:`放行`,jevObsVerdictDefer:`搁置`,jevObsVerdictConfirm:`确认矛盾`,jevObsVerdictReject:`非矛盾`,jevObsVerdictFallback:`回落`,jevObsNoAnswer:`无答案`,jevObsErrorLine:`错误:{error}`},u={nav:`Memory Palace`,scopeUser:`Private Palace`,scopeProject:`Project Palace`,scopeShared:`Shared Palace`,projectFollow:`Follow the active workspace`,projectFollowNamed:`Project · following {name}`,projectFollowHint:`The project palace follows the workspace selected in the GUI (by session ownership)`,projectPinned:`Project · {name}`,projectUnregistered:`unregistered workspace`,projectNoWorkspace:`No workspace info (process default)`,projectSwitch:`Project palace source`,projectMemories:`{n} memories`,projectProcessDefault:`Process default directory`,refresh:`Revisit`,exportMd:`Export MD`,exportJson:`Export JSON`,export:`Export`,exportMirror:`Mirror tree`,exportMdHint:`Single file, easy to share`,exportJsonHint:`Structured full dump for scripts`,exportMirrorHint:`One .md per memory, roamable in Obsidian`,allStatuses:`All statuses`,allKinds:`All rooms`,redactedAll:`All placards`,redactedOnly:`Redacted`,redactedNone:`Unredacted`,tagRedacted:`redacted`,tagOutcomeSuccess:`curator: worked`,tagOutcomeFailure:`curator: failed`,searchPlaceholder:`Wander the palace…`,statusActive:`open to public`,statusArchived:`on display`,statusForgotten:`closed`,kindFact:`Fact Hall`,kindPreference:`Preference Pavilion`,kindDecision:`Decision Chamber`,kindEpisode:`Episode Gallery`,kindSkill:`Skill Workshop`,labelContent:`Placard`,labelKind:`Room`,labelStatus:`Status`,labelScope:`Palace`,importance:`Beacon`,confidence:`Provenance`,accessCount:`{n} visits`,labelCreated:`Opened`,timeJustNow:`just now`,timeMinutesAgo:`{n} min ago`,timeHoursAgo:`{n} hr ago`,timeDaysAgo:`{n} d ago`,sourceExplicit:`Curator placed`,sourceSession:`Excavated at {id}`,round:`pass {n}`,cardRedacted:`{n} redacted`,detail:`Tour`,edit:`Renovate`,forget:`Close`,restore:`Reopen`,empty:`No memories to display`,emptyHint:`Adjust the rooms above, or place a new memory`,loadFailed:`Tour halted: {msg}`,loading:`Guiding…`,pagerInfo:`Page {page} / {pages} · {total} memories`,prevPage:`Previous page`,nextPage:`Next page`,cancel:`Cancel`,saveWithHint:`Renovate (archive old placard)`,detailAttributes:`Placard`,detailSource:`Excavation`,detailRelations:`Corridors`,detailOperations:`Curator log`,relSupersededBy:`Superseded by`,relSupersedes:`Supersedes`,relContradicts:`Contradicts`,relRelated:`Adjacent`,headerTitle:`Memory Palace`,headerSubtitle:`Cross-session long-term memory palace`,tabToday:`Today`,tabLibrary:`Palace`,tabCorridor:`Corridor`,tabLog:`Log`,tabLibraryCount:`{n} memories`,roomsTitle:`Room directory`,roomsHint:`A new room opens once 9 slots fill`,healthEvaluatedAt:`Scored {time}`,logFilterAll:`All`,logFilterWrite:`Writes`,logFilterIngest:`Capture`,logFilterRetrieve:`Retrieval`,logFilterOrganize:`Organize`,logCount:`{n} entries · both stores merged, newest first`,benchTitle:`Retrieval bench`,drawerClose:`Return`,drawerTitle:`Memory placard`,kpiTotal:`Memories`,kpiActive:`Open`,kpiForgotten:`Closed`,kpiSignal:`Clarity`,opWrite:`opened`,opWriteMerge:`merged in`,opUpdate:`renovated`,opForget:`closed`,opRestore:`reopened`,opDecay:`archived`,opSuperseded:`superseded`,opIngestRequest:`excavation requested`,opIngestDone:`excavated`,opOutcomeReport:`curator report`,opAssess:`evidence check`,opConsolidation:`consolidation`,opReviewAnswer:`review answer`,opSlotAssign:`slot assigned`,opSlotBackfill:`slots backfilled`,opRoomOpen:`room opened`,consolidateArchived:`archived {n}`,consolidateMerged:`merged {n}`,consolidateSkipped:`skipped {n}`,decayArchived:`archived {n}`,slotBackfilled:`{n} slots assigned`,roomOpened:`opened room {room}`,reviewAnswered:`grade {grade} · next in {days}d`,assessAdequate:`evidence adequate`,assessInadequate:`evidence insufficient`,assessRefs:`{n} refs`,opSearchRewrite:`route rewritten`,opCompressRequest:`placard compressed`,opDistillRequest:`rooms merged`,selectAll:`Select all on page`,deselectAll:`Deselect all`,selectedCount:`{n} memories`,batchForget:`Close selected ({n})`,batchForgetConfirm:`Close {n} memories?`,batchRestore:`Reopen selected ({n})`,clearSelection:`Clear selection`,sectionCorridor:`Corridor overview`,corridorEmpty:`No memories yet — the bird’s-eye view appears after a few memories arrive.`,corridorFailed:`Failed to load corridor`,corridorLoad:`Loading corridor overview…`,corridorAria:`Corridor overview map`,corridorSummary:`{nodes} memories · {edges} corridors`,edgeSupersedes:`supersedes`,edgeContradicts:`contradicts`,edgeOther:`related / supports / refines`,healthLoading:`Taking pulse…`,teleFailed:`Telemetry failed`,teleLoading:`Aggregating curator events…`,teleGroupRecent:`Last 7 days`,telePrivacyHint:`Local aggregation only · never transmitted`,telePrivacyTip:`All op_log and telemetry counters are aggregated in this process’s SQLite only; nothing is sent to any external service. Clearing the plugin or restarting the host wipes the data.`,teleWrites:`Opened`,teleIngest:`Excavated`,teleConsolidate:`Consolidated`,benchPlaceholder:`Name a room by keyword or meaning…`,benchRun:`Walk`,benchScopeAll:`All palaces`,benchHits:`{n} rooms found`,benchDegraded:`Beacon dark · keyword lane only`,benchEmpty:`No route found`,benchNote:`Walk uses the same map as the guided tour and counts as a visit`,viaFts:`keyword`,viaVec:`semantic`,viaBoth:`dual`,viaEdgeLabel:`corridor`,benchRewrite:`route split into {n}`,benchCompress:`compressed {n} overflow placards`,activityEmpty:`No curator activity yet`,detailRevisions:`Exhibit history`,tourProposalTitle:`Tour proposal`,tourProposalEmpty:`The palace is empty — place a first memory via engram_save`,tourProposalHint:`Click a memory to open its placard`,tourFocusAll:`All`,refurbTitle:`Refurb suggestions`,refurbEmpty:`All rooms are healthy — no suggestions`,refurbRun:`Re-scan`,refurbActionDemote:`demote`,refurbActionMerge:`merge`,refurbActionReview:`review`,refurbActionSplit:`split`,refurbCount:`{n} suggestions`,refurbExecute:`Apply`,refurbConfirmDemote:`Demote this memory? Status will become archived; you can reopen it later.`,refurbConfirmMerge:`Merge {n} similar memories? This triggers engram_distill to fold them into one higher-level pattern.`,refurbDemoteDone:`Demoted`,refurbMergeDone:`Merge dispatched`,refurbActionFailed:`Action failed: {msg}`,refurbMergeEmpty:`No merge candidates`,heroDue:`Due today`,filterDueToday:`Due today`,sortTime:`By time`,sortTour:`By tour route`,dueBadgeLabel:`{n} due today — click to filter in the library`,tabBackfill:`Backfill`,backfillIntro:`Distils past dsh sessions into the palace, turn by turn: each session is written into the project store matching its own cwd. Turns already captured are skipped by idempotency key, so starting again resumes where it stopped. Backfilled memories never enter the due-today queue.`,backfillRulesTitle:`Import rules`,backfillDays:`Time window`,backfillDaysAll:`All`,backfillDaysUnit:`{n} days`,backfillMaxTurns:`Max turns per session`,backfillMaxTotal:`Total turn budget`,backfillModel:`Auxiliary model`,backfillModelAuto:`Auto (model currently in use)`,backfillIncludeSubagents:`Include subagent sessions`,backfillIncludeSeeded:`Include seeded sessions`,backfillIncludeNoCwd:`Include sessions without cwd (private palace only)`,backfillReestimate:`Re-estimate`,backfillEstimateTitle:`Estimate`,backfillCandidates:`{n} candidate sessions`,backfillPendingTurns:`{n} turns pending`,backfillAlready:`{n} turns already captured`,backfillSkippedDetail:`Excluded: subagent {subagent} · seeded {seeded} · no cwd {noCwd} · outside window {tooOld} · unreadable {unreadable}`,backfillTruncated:`Candidates exceed the total turn budget: only the most recent sessions run this time — raise the budget or run in batches`,backfillStart:`Start backfill`,backfillPause:`Pause`,backfillStateRunning:`Running…`,backfillStateDone:`Finished`,backfillStateCancelled:`Stopped (start again to resume)`,backfillStateFailed:`Failed`,backfillProgressSessions:`Sessions {done}/{total}`,backfillProgressTurns:`Turns {done}/{total}`,backfillWritten:`{n} memories written`,backfillTurnsSkipped:`{n} turns skipped`,backfillTurnsFailed:`{n} turns failed`,backfillFailures:`Failures`,backfillEstimating:`Estimating…`,backfillSkipReasons:`Skipped`,backfillRouteHint:`Failures are usually because the model a past session used is not available here: set provider/model in cordis.yml, or run one turn with the target model first (backfill reuses the model currently in use) and retry — finished turns are skipped automatically.`,skipLowActivity:`low activity`,skipChitchat:`chitchat`,skipForbidden:`capture forbidden`,skipNoContent:`no user content`,skipAlready:`already captured`,skipNoTurn:`no such turn`,skipNoRoute:`no route in log`,skipUnparsable:`unparsable output`,opProfileEdit:`profile revised`,profileOpCreate:`created v{to} · {chars} chars`,profileOpEdit:`edited v{from}→v{to} · {chars} chars`,profileOpRollback:`rolled back v{from}→v{to} (restored v{restored}) · {chars} chars`,profileTitle:`Curated profile block`,profileEmpty:`No curated profile yet`,profileEmptyHint:`Ask the agent to call engram_profile_edit in a session; once created it is injected ahead of the derived profile at session start.`,profileCurrent:`Current content · v{n}`,profileHistory:`Version history (newest first)`,profileSourceEdit:`edited`,profileSourceRollback:`rollback`,profileDiffBase:`Base version`,profileDiffTarget:`Compare version`,profileDiffNone:`The two versions are identical`,profileLoadFailed:`Failed to load profile`,tabEpisodes:`Episodes`,episodeSince:`From date`,episodeUntil:`To date`,episodeSessionId:`Session id (optional)`,episodeApply:`Apply`,episodeReset:`Reset`,episodeHint:`Browse experiences grouped by session; group heads carry a one-line summary generated at ingest. Click "Nearby" on an entry to see what else happened around that moment`,episodeNoGroups:`No episodes in this range`,episodeNoSession:`No session origin`,episodeSummaryMissing:`(No summary yet for this session: run a history backfill to add one)`,episodeEntries:`{n} episodes`,episodeNearby:`Nearby`,episodeAroundTitle:`Time proximity expansion`,episodeAroundEmpty:`No other episodes within the proximity window`,episodeClose:`Collapse`,tabEntities:`Entities`,entityHint:`People, projects, tools and concepts extracted from memories; open one to see every memory that mentions it`,entityKindAll:`All kinds`,entityKindPerson:`People`,entityKindProject:`Projects`,entityKindTool:`Tools`,entityKindConcept:`Concepts`,entityKindOther:`Other`,entitySearchPlaceholder:`Search names or aliases`,entityCount:`{n} entities`,entityMemories:`{n} linked memories`,entityOpen:`View`,entityAliases:`Aliases`,entityNoMemories:`No linked memories`,entityEmpty:`No entities in this palace yet; they appear after you save memories that mention them`,factSection:`Facts ({n})`,factEmpty:`No facts yet; facts extracted from memories during ingestion will appear here`,factValid:`active`,factInvalid:`superseded`,tabJev:`Jev`,jevIntro:`Jev System-One adjudication: three-way ruling (merge / accept / defer) for ambiguous memories before they are written, plus contradiction confirmation. The key is stored in the local data directory (0600 file) and takes effect immediately after saving, no restart; when Jev is unavailable the plugin falls back to the pure four-rule disposition.`,jevEnabled:`Enable Jev adjudication`,jevStatusOn:`Jev adjudication active`,jevStatusOff:`Jev adjudication inactive (pure rule-based dispositions)`,jevApiKey:`API key`,jevApiKeyHint:`Leave empty to keep the stored key; click "Clear stored key" to remove it (falls back to cordis.yml).`,jevApiKeyUnset:`not configured`,jevClearKey:`Clear stored key`,jevKeyCleared:`Panel key cleared; falling back to deployment config`,jevBaseUrl:`Endpoint`,jevModel:`Adjudication model`,jevTimeoutMs:`Timeout (ms, 1000-60000)`,jevThresholdsTitle:`Adjudication thresholds (advanced cordis.yml config, read-only here)`,jevThresholdLine:`same memory ≥{merge} · new memory ≤{accept} · contradiction ≥{contradict}`,jevSave:`Save`,jevSaved:`Saved; config takes effect immediately`,jevLoadFailed:`Failed to load`,jevTest:`Test connection`,jevTestOk:`Connection OK: {ms} ms, ping probability {p}`,jevTestFail:`Connection failed: {error}`,jevObsTitle:`Recent adjudications (this process, up to 50, cleared on restart)`,jevObsEmpty:`No records yet; they appear when Jev adjudicates a write after being enabled`,jevObsLoadFailed:`Failed to load adjudication records`,jevObsSiteBand:`band`,jevObsSiteContradiction:`contradiction`,jevObsVerdictMerge:`merge`,jevObsVerdictAccept:`accept`,jevObsVerdictDefer:`defer`,jevObsVerdictConfirm:`confirm`,jevObsVerdictReject:`reject`,jevObsVerdictFallback:`fallback`,jevObsNoAnswer:`no answer`,jevObsErrorLine:`error: {error}`};function d(e,t){let n=c[t];return n===void 0?t:e(n)}let f={fact:`#5b8def`,preference:`#f0a85c`,decision:`#9b6bd9`,episode:`#3cb489`,skill:`#e26b86`},p={related:{color:`rgba(120, 130, 150, 0.6)`,dash:void 0,width:1},refines:{color:`rgba(120, 130, 150, 0.6)`,dash:void 0,width:1},supports:{color:`rgba(120, 130, 150, 0.6)`,dash:void 0,width:1},supersedes:{color:`rgba(91, 141, 239, 0.85)`,dash:void 0,width:1.8},contradicts:{color:`rgba(226, 107, 134, 0.9)`,dash:`4 4`,width:1.4}};function m(e){return Math.max(4,Math.min(14,4+10*e.importance*e.confidence))}function h(e,t,n,r,i){let a=.003;for(let t=0;t<e.length;t+=1){let n=e[t];for(let r=t+1;r<e.length;r+=1){let t=e[r],a=n.x-t.x,o=n.y-t.y,s=Math.sqrt(a*a+o*o)+.01,c=4800*i/(s*s),l=a/s*c,u=o/s*c;n.vx+=l,n.vy+=u,t.vx-=l,t.vy-=u}}let o=new Map(e.map(e=>[e.id,e]));for(let e of t){let t=o.get(e.from),n=o.get(e.to);if(t===void 0||n===void 0)continue;let r=n.x-t.x,a=n.y-t.y,s=Math.sqrt(r*r+a*a)+.01,c=(s-64)*.04*i,l=r/s*c,u=a/s*c;t.vx+=l,t.vy+=u,n.vx-=l,n.vy-=u}let s=[...new Set(e.map(e=>e.kind))],c=n/Math.max(s.length,1);for(let t of e){if(t.fixed)continue;t.vx+=(n/2-t.x)*a*i,t.vy+=(r/2-t.y)*a*i;let e=s.indexOf(t.kind);if(e>=0){let n=c*(e+.5);t.vx+=(n-t.x)*.005*i}}let l=.82;for(let t of e){if(t.fixed){t.vx=0,t.vy=0;continue}t.vx*=l,t.vy*=l,t.x=Math.max(20,Math.min(n-20,t.x+t.vx)),t.y=Math.max(20,Math.min(r-20,t.y+t.vy))}}function g(e){let{scope:t,nodes:n,edges:a,onSelect:s,selectedId:c,t:l}=e,u=(0,r.useMemo)(()=>{let e=new Map;for(let t of n)e.set(t.id,new Set);for(let t of a)e.has(t.from)||e.set(t.from,new Set),e.has(t.to)||e.set(t.to,new Set),e.get(t.from).add(t.to),e.get(t.to).add(t.from);return e},[n,a]),g=(0,r.useMemo)(()=>{let e=[...new Set(n.map(e=>e.kind))],t=560/Math.max(e.length,1);return n.map((n,r)=>({...n,x:e.indexOf(n.kind)>=0?t*(e.indexOf(n.kind)+.5):280,y:30+r*47%260,vx:0,vy:0,r:m(n),fixed:!1}))},[n,560,320]),_=(0,r.useRef)(g.map(e=>({...e}))),[,v]=(0,r.useState)(0),y=(0,r.useRef)(null),b=(0,r.useRef)(0);(0,r.useEffect)(()=>{_.current=g.map(e=>({...e})),b.current=0,v(e=>e+1)},[g]),(0,r.useEffect)(()=>{let e=()=>{let t=_.current;b.current+=1;let n=Math.max(.1,1-b.current/280*.9);h(t,a,560,320,n),_.current=t.map(e=>({...e})),v(e=>e+1),b.current<280&&(y.current=requestAnimationFrame(e))};return y.current=requestAnimationFrame(e),()=>{y.current!==null&&cancelAnimationFrame(y.current)}},[g,a]);let x=_.current,S=(0,r.useMemo)(()=>new Map(x.map(e=>[e.id,e])),[x]),C=(0,r.useMemo)(()=>[...new Set(n.map(e=>e.kind))],[n]),[w,T]=(0,r.useState)(null),E=(0,r.useMemo)(()=>w===null?null:u.get(w)??new Set,[w,u]),D=e=>w!==null&&e!==w&&!(E?.has(e)??!1),O=e=>w===null?!1:e.from===w||e.to===w,k=(0,r.useRef)(null),A=(0,r.useRef)(null),j=(e,t)=>{let n=k.current;if(n===null)return null;let r=n.getBoundingClientRect(),i=560/r.width,a=320/r.height;return{x:(e-r.left)*i,y:(t-r.top)*a}},M=(e,t)=>{e.preventDefault(),A.current=t;let n=_.current.find(e=>e.id===t);n!==void 0&&(n.fixed=!0)};return(0,r.useEffect)(()=>{let e=e=>{let t=A.current;if(t===null)return;let n=j(e.clientX,e.clientY);if(n===null)return;let r=_.current.find(e=>e.id===t);r!==void 0&&(r.x=Math.max(20,Math.min(540,n.x)),r.y=Math.max(20,Math.min(300,n.y)),r.vx=0,r.vy=0,v(e=>e+1))},t=()=>{let e=A.current;if(e===null)return;let t=_.current.find(t=>t.id===e);t!==void 0&&(t.fixed=!1),A.current=null};return window.addEventListener(`mousemove`,e),window.addEventListener(`mouseup`,t),()=>{window.removeEventListener(`mousemove`,e),window.removeEventListener(`mouseup`,t)}},[]),n.length===0?(0,i.jsx)(`div`,{className:o.empty,children:l(`corridorEmpty`)}):(0,i.jsxs)(`div`,{className:o.mapWrap,children:[(0,i.jsxs)(`svg`,{ref:k,viewBox:`0 0 560 320`,className:o.map,preserveAspectRatio:`xMidYMid meet`,role:`img`,"aria-label":l(`corridorAria`),children:[C.map((e,t)=>{let n=560/Math.max(C.length,1);return(0,i.jsx)(`rect`,{x:n*t,y:0,width:n,height:320,fill:t%2==0?`rgba(127,127,127,0.04)`:`transparent`},e)}),C.map((e,t)=>{let n=560/Math.max(C.length,1);return(0,i.jsx)(`text`,{x:n*(t+.5),y:14,textAnchor:`middle`,fill:`rgba(127,127,127,0.7)`,fontSize:`10`,fontFamily:`ui-sans-serif, system-ui`,children:d(l,e)},`${e}-label`)}),a.map((e,t)=>{let n=S.get(e.from),r=S.get(e.to);if(n===void 0||r===void 0)return null;let a=p[e.type]??p.related,s=O(e),c=w!==null&&!s;if(s){let t=(n.x+r.x)/2,o=(n.y+r.y)/2,s=r.x-n.x,c=r.y-n.y,l=Math.sqrt(s*s+c*c)||1,u=-c/l*6,d=s/l*6;return(0,i.jsx)(`path`,{d:`M ${String(n.x)} ${String(n.y)} Q ${String(t+u)} ${String(o+d)} ${String(r.x)} ${String(r.y)}`,fill:`none`,stroke:a.color,strokeWidth:a.width+1.2,strokeDasharray:a.dash,style:{transition:`stroke-width 200ms ease, d 240ms ease`},children:(0,i.jsx)(`title`,{children:`${n.title} --${e.type}--> ${r.title}`})},e.id)}return(0,i.jsx)(`line`,{x1:n.x,y1:n.y,x2:r.x,y2:r.y,stroke:a.color,strokeWidth:a.width,strokeDasharray:a.dash,opacity:c?.1:1,className:o.edgeFade,style:{transition:`opacity 200ms ease, stroke-width 200ms ease`,animationDelay:`${String(Math.min(t,24)*24)}ms`},children:(0,i.jsx)(`title`,{children:`${n.title} --${e.type}--> ${r.title}`})},e.id)}),x.map((e,t)=>{let n=f[e.kind]??`#7d8590`,r=c===e.id,a=w===e.id,l=D(e.id);return(0,i.jsxs)(`g`,{className:o.node,transform:`translate(${String(e.x)} ${String(e.y)})`,style:{cursor:A.current===e.id?`grabbing`:`grab`,opacity:l?.15:1,transition:`opacity 200ms ease`,animationDelay:`${String(Math.min(t,24)*24)}ms`},onMouseEnter:()=>{T(e.id)},onMouseLeave:()=>{T(t=>t===e.id?null:t)},onMouseDown:t=>M(t,e.id),onClick:()=>s?.(e.id),children:[(a||r)&&(0,i.jsx)(`circle`,{r:String(e.r+6),fill:n,fillOpacity:.18}),(0,i.jsx)(`circle`,{r:String(e.r),fill:n,fillOpacity:e.status===`active`?.88:.42,stroke:r?`var(--dsw-alias-brand-primary)`:a?n:`rgba(255,255,255,0.9)`,strokeWidth:r?2:a?1.5:1,style:{transition:`stroke 160ms ease, stroke-width 160ms ease`},children:(0,i.jsx)(`title`,{children:`${e.title}(${e.kind}/${e.status})`})}),r&&(0,i.jsx)(`circle`,{r:String(e.r+4),fill:`none`,stroke:n,strokeOpacity:.4,strokeWidth:1})]},e.id)}),w!==null&&(()=>{let e=S.get(w);if(e===void 0)return null;let t=Math.min(380,Math.max(8,e.x+14)),n=Math.min(260,Math.max(28,e.y-16)),r=(e.content??e.title).slice(0,120);return(0,i.jsxs)(`g`,{className:o.tooltip,transform:`translate(${String(t)} ${String(n)})`,children:[(0,i.jsx)(`rect`,{x:0,y:0,width:176,height:48,rx:6,ry:6,fill:`var(--dsw-alias-bg-base)`,stroke:`var(--dsw-alias-border-l2)`,strokeWidth:1,opacity:.96}),(0,i.jsx)(`text`,{x:8,y:16,fill:`var(--dsw-alias-label-primary)`,fontSize:`11`,fontWeight:600,fontFamily:`ui-sans-serif, system-ui`,children:d(l,e.kind)}),(0,i.jsx)(`text`,{x:8,y:32,fill:`var(--dsw-alias-label-secondary)`,fontSize:`10`,fontFamily:`ui-sans-serif, system-ui`,children:`${r}${(e.content??e.title).length>120?`…`:``}`})]})})()]},t),(0,i.jsxs)(`div`,{className:o.legend,children:[C.map(e=>(0,i.jsxs)(`span`,{className:o.legendItem,children:[(0,i.jsx)(`span`,{className:o.legendDot,style:{background:f[e]??`#7d8590`}}),d(l,e)]},e)),(0,i.jsx)(`span`,{className:o.legendItem,children:l(`corridorSummary`,{nodes:n.length,edges:a.length})})]}),(0,i.jsx)(`div`,{className:o.legend,style:{marginTop:2},children:Object.entries(p).map(([e,t])=>(0,i.jsxs)(`span`,{className:o.legendItem,children:[(0,i.jsx)(`svg`,{width:20,height:6,"aria-hidden":`true`,children:(0,i.jsx)(`line`,{x1:0,y1:3,x2:20,y2:3,stroke:t.color,strokeWidth:t.width,strokeDasharray:t.dash})}),(0,i.jsx)(`span`,{children:l(e===`supersedes`?`edgeSupersedes`:e===`contradicts`?`edgeContradicts`:`edgeOther`)})]},e))})]})}let _={info:3e3,success:3e3,warning:5e3,error:5e3},v=0;function y({items:e,onDismiss:t}){return(0,i.jsx)(`div`,{className:o.toastViewport,role:`region`,"aria-live":`polite`,"aria-label":`notifications`,children:e.map(e=>{let n=e.kind===`success`?o.toastSuccess:e.kind===`error`?o.toastError:e.kind===`warning`?o.toastWarning:o.toastInfo;return(0,i.jsxs)(`div`,{className:`${o.toast} ${n}`,role:e.kind===`error`||e.kind===`warning`?`alert`:`status`,children:[(0,i.jsx)(`span`,{className:o.toastBody,children:e.message}),(0,i.jsx)(`button`,{type:`button`,className:o.toastDismiss,"aria-label":`dismiss`,onClick:()=>{t(e.id)},children:`×`})]},e.id)})})}function b(){let[e,t]=(0,r.useState)([]),n=(0,r.useRef)(new Map),a=(0,r.useCallback)(e=>{t(t=>t.filter(t=>t.id!==e));let r=n.current.get(e);r!==void 0&&(clearTimeout(r),n.current.delete(e))},[]),o=(0,r.useCallback)((e,r,i)=>{v+=1;let o=v,s=i??_[e],c={id:o,kind:e,message:r,duration:s};t(e=>[...e,c]);let l=setTimeout(()=>{a(o)},s);n.current.set(o,l)},[a]);return(0,r.useEffect)(()=>()=>{for(let e of n.current.values())clearTimeout(e);n.current.clear()},[]),{toasts:e,push:o,dismiss:a,viewport:(0,i.jsx)(y,{items:e,onDismiss:a})}}let x=`dsh-engram.ui`;function S(e){try{return window.localStorage.getItem(e)??void 0}catch{return}}function C(e,t){try{window.localStorage.setItem(e,t)}catch{}}function w(e,t){return e!==void 0&&t.includes(e)}function T(e,t,n){let i=`${x}.${e}`,[a,o]=(0,r.useState)(()=>{let e=S(i);return w(e,n)?e:t});return(0,r.useEffect)(()=>{C(i,a)},[i,a]),[a,(0,r.useCallback)(e=>{o(e)},[])]}function E(e,t){let n=`${x}.${e}`,[i,a]=(0,r.useState)(()=>S(n)??t);return(0,r.useEffect)(()=>{C(n,i)},[n,i]),[i,(0,r.useCallback)(e=>{a(e)},[])]}let D=[`fact`,`preference`,`decision`,`episode`,`skill`],O={active:`statusActive`,archived:`statusArchived`,forgotten:`statusForgotten`},k={user:`scopeUser`,project:`scopeProject`,shared:`scopeShared`},A={fact:`roomFact`,preference:`roomPreference`,decision:`roomDecision`,episode:`roomEpisode`,skill:`roomSkill`},j={write:`opWrite`,"write-merge":`opWriteMerge`,update:`opUpdate`,forget:`opForget`,restore:`opRestore`,decay:`opDecay`,superseded:`opSuperseded`,"ingest-request":`opIngestRequest`,"ingest-done":`opIngestDone`,"outcome-report":`opOutcomeReport`,assess:`opAssess`,consolidation:`opConsolidation`,"review-answer":`opReviewAnswer`,"slot-assign":`opSlotAssign`,"slot-backfill":`opSlotBackfill`,"room-open":`opRoomOpen`,"search-rewrite-request":`opSearchRewrite`,"compress-request":`opCompressRequest`,"distill-request":`opDistillRequest`,"profile-edit":`opProfileEdit`},M={supersededBy:`relSupersededBy`,supersedes:`relSupersedes`,contradicts:`relContradicts`,related:`relRelated`},N={kind:`labelKind`,scope:`labelScope`,status:`labelStatus`};function P(e,t){let n=c[t];return n===void 0?t:e(n)}function ee(e){return`${o.pill} ${o[A[e]??`kind`]??``}`}function F(e,t){let n=j[t];return n===void 0?t:e(n)}function te(e,t,n){if(n===null)return``;if(t===`profile-edit`){try{let t=JSON.parse(n),r=Number(t.toVersion),i=Number(t.chars);if(t.action===`edit`&&t.fromVersion===null)return` `+e(`profileOpCreate`,{to:r,chars:i});let a=Number(t.fromVersion);if(t.action===`edit`)return` `+e(`profileOpEdit`,{from:a,to:r,chars:i});let o=Number(t.restoredFrom);if(t.action===`rollback`&&Number.isInteger(a)&&Number.isInteger(r)&&Number.isInteger(o))return` `+e(`profileOpRollback`,{from:a,to:r,restored:o,chars:i})}catch{}return` ${n}`}if(t!==`write`&&t!==`update`&&t!==`superseded`)return` ${n}`;try{let t=JSON.parse(n),r=Object.entries(t);return r.length===0?` ${n}`:` `+r.map(([t,n])=>{let r=N[t];return r===void 0?`${t}=${String(n)}`:t===`kind`&&typeof n==`string`?`${e(r)}=${P(e,n)}`:t===`scope`&&(n===`user`||n===`project`)?`${e(r)}=${e(k[n])}`:`${e(r)}=${String(n)}`}).join(` · `)}catch{return` ${n}`}}function ne(e,t){if(t.sourceSessionId===null)return e(`sourceExplicit`);let n=`${t.sourceSessionId.slice(0,16)}…`;return e(`sourceSession`,{id:t.sourceRound===null?n:`${n} ${e(`round`,{n:t.sourceRound})}`})}let re=null,ie=null;function I(e,t){if(/(?:^|[?&])scope=project(?:&|$)/.test(e))return!0;let n=t?.body;if(typeof n!=`string`||n===``)return!1;try{let e=JSON.parse(n);return typeof e==`object`&&!!e&&e.scope===`project`}catch{return!1}}function L(e,t){try{let n=JSON.parse(e);return typeof n!=`object`||!n||Array.isArray(n)?void 0:JSON.stringify({...n,project:t})}catch{return}}function R(e,t){return`${e}${e.includes(`?`)?`&`:`?`}project=${encodeURIComponent(t)}`}async function z(e,t,n=!1){let r=re,i=e,a=t,o=r!==null&&(n||I(e,t));if(o){let n=t?.body,o=typeof n==`string`&&n!==``?L(n,r):void 0;o!==void 0&&t!==void 0?a={...t,body:o}:i=R(e,r)}let s=await fetch(`/api/engram/${i}`,a),c=await s.json();if(!s.ok)throw o&&s.status===404&&c.error===`unknown project`&&ie?.(),Error(c.error??`HTTP ${String(s.status)}`);return c}let ae=[];function B(){}function V(e,t){if(e===void 0)return B;let n=e.subscribe(t);return typeof n==`function`?n:B}function oe(e,t){let n=(0,r.useCallback)(t=>V(e?.list,t),[e]),i=(0,r.useCallback)(e=>V(t?.list,e),[t]),a=(0,r.useSyncExternalStore)(i,()=>t?.list.getSnapshot().current??null),o=(0,r.useSyncExternalStore)(n,()=>e?.list.getSnapshot().items??ae),s=e!==void 0&&t!==void 0;return!s||a===null?{workspace:null,available:s}:{workspace:o.find(e=>e.sessionIds.includes(a))??null,available:s}}function H(e){return e.replace(/\//g,`\\`).replace(/\\+$/,``).toLowerCase()}function se(e){let t=e.replace(/[/\\]+$/,``),n=Math.max(t.lastIndexOf(`\\`),t.lastIndexOf(`/`));return n<0?t:t.slice(n+1)}function ce(e){let t=/^project-([0-9a-f]+)\.db$/i.exec(e);return t===null?e.slice(0,14):`project-${t[1].slice(0,8)}…`}function U(e){if(typeof e.path!=`string`||e.path===``)return{name:ce(e.dbName),unregistered:!0};let t=e.title?.trim()??``;return t===``?{name:se(e.path),unregistered:e.kind!==`workspace`}:{name:t,unregistered:e.kind!==`workspace`}}function le(e,t){let n=U(t),r=[n.unregistered?`${n.name} · ${e(`projectUnregistered`)}`:n.name];return r.push(t.memories===null?`—`:e(`projectMemories`,{n:t.memories})),r.join(` · `)}function ue(e,t){if(e===null||t===null)return;let n=e.items.find(e=>e.workspaceId===t.workspaceId);if(n!==void 0)return n;let r=H(t.path);return e.items.find(e=>typeof e.path==`string`&&H(e.path)===r)}function de(e,t){if(t.mode!==`follow`){let n=t.items.find(e=>e.dbName===t.mode);if(n===void 0)return{label:e(`projectPinned`,{name:`${ce(t.mode)} · ${e(`projectUnregistered`)}`}),title:t.mode,tone:`pinned`};let r=U(n);return{label:e(`projectPinned`,{name:r.unregistered?`${r.name} · ${e(`projectUnregistered`)}`:r.name}),title:n.path??n.dbName,tone:`pinned`}}if(!t.available)return{label:e(`projectNoWorkspace`),title:e(`projectFollowHint`),tone:`muted`};if(t.followed===void 0)return{label:e(`projectPinned`,{name:e(`projectProcessDefault`)}),title:t.processDefaultPath??e(`projectFollowHint`),tone:`pinned`};let n=U(t.followed);return{label:e(`projectFollowNamed`,{name:n.unregistered?`${n.name} · ${e(`projectUnregistered`)}`:n.name}),title:t.followed.path??e(`projectFollowHint`),tone:`follow`}}function W(e){return new Date(e).toLocaleString(navigator.language||`zh-CN`,{hour12:!1})}function fe(e,t){let n=Math.max(0,Date.now()-t),r=Math.floor(n/6e4);if(r<1)return e(`timeJustNow`);if(r<60)return e(`timeMinutesAgo`,{n:r});let i=Math.floor(r/60);return i<48?e(`timeHoursAgo`,{n:i}):e(`timeDaysAgo`,{n:Math.floor(i/24)})}function G({label:e,value:t,tail:n,secondary:r}){return(0,i.jsxs)(`div`,{className:o.metric,children:[(0,i.jsx)(`span`,{className:o.metricLabel,children:e}),(0,i.jsx)(`b`,{className:r===!0?`${o.metricValue} ${o.metricValueSecondary}`:o.metricValue,children:t}),n!==void 0&&(0,i.jsx)(`span`,{className:o.metricTail,children:n})]})}function K({score:e}){let t=2*Math.PI*24,n=Math.min(100,Math.max(0,e))/100*t,r=e>=80?`var(--dsw-alias-state-success-primary)`:e>=50?`var(--dsw-alias-state-warn-primary)`:`var(--dsw-alias-state-error-primary)`;return(0,i.jsxs)(`div`,{className:o.ring,role:`meter`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":e,children:[(0,i.jsxs)(`svg`,{width:`56`,height:`56`,viewBox:`0 0 56 56`,"aria-hidden":`true`,children:[(0,i.jsx)(`circle`,{cx:`28`,cy:`28`,r:24,fill:`none`,stroke:`var(--dsw-alias-border-l2)`,strokeWidth:`4`}),(0,i.jsx)(`circle`,{cx:`28`,cy:`28`,r:24,fill:`none`,stroke:r,strokeWidth:`4`,strokeLinecap:`round`,strokeDasharray:`${n.toFixed(1)} ${t.toFixed(1)}`})]}),(0,i.jsx)(`b`,{children:e})]})}function pe({value:e,conf:t}){return(0,i.jsx)(`span`,{className:t===!0?`${o.meter} ${o.conf}`:o.meter,children:(0,i.jsx)(`i`,{style:{width:`${String(Math.round(Math.min(1,Math.max(0,e))*100))}%`}})})}function me({ids:e}){return(0,i.jsx)(`div`,{className:o.relChips,children:e.map(e=>(0,i.jsx)(`span`,{className:o.relChip,title:e,children:e.slice(0,18)},e))})}function he({t:e,recordId:t,scope:n,project:a}){let[s,c]=(0,r.useState)(null),[l,u]=(0,r.useState)(null);if((0,r.useEffect)(()=>{let e=!1;return z(`review?scope=${n}&id=${encodeURIComponent(t)}`).then(t=>{e||c(t)}).catch(t=>{e||u(t.message)}),()=>{e=!0}},[t,n,a,e]),l!==null)return(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loadFailed`,{msg:l})});if(s===null)return(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loading`)});let{record:d}=s,f=[`supersededBy`,`supersedes`,`contradicts`,`related`].map(e=>({key:e,label:M[e],ids:s[e]??[]})).filter(e=>e.ids.length>0),p=s.operations??[];return(0,i.jsxs)(`div`,{className:o.reviewGrid,children:[(0,i.jsxs)(`div`,{children:[(0,i.jsxs)(`dl`,{className:o.attrGrid,children:[(0,i.jsx)(`dt`,{children:e(`labelContent`)}),(0,i.jsx)(`dd`,{children:d.content}),(0,i.jsx)(`dt`,{children:e(`labelKind`)}),(0,i.jsx)(`dd`,{children:(0,i.jsx)(`span`,{className:ee(d.kind),children:P(e,d.kind)})}),(0,i.jsx)(`dt`,{children:e(`labelStatus`)}),(0,i.jsx)(`dd`,{children:(0,i.jsx)(`span`,{className:`${o.pill} ${o[`status${d.status.charAt(0).toUpperCase()}${d.status.slice(1)}`]??``}`,children:e(O[d.status])})}),(0,i.jsx)(`dt`,{children:e(`importance`)}),(0,i.jsxs)(`dd`,{children:[d.importance.toFixed(2),(0,i.jsx)(pe,{value:d.importance})]}),(0,i.jsx)(`dt`,{children:e(`confidence`)}),(0,i.jsxs)(`dd`,{children:[d.confidence.toFixed(2),(0,i.jsx)(pe,{value:d.confidence,conf:!0})]}),(0,i.jsx)(`dt`,{children:e(`detailSource`)}),(0,i.jsx)(`dd`,{children:ne(e,d)}),(0,i.jsx)(`dt`,{children:e(`labelCreated`)}),(0,i.jsx)(`dd`,{children:W(d.createdAt)})]}),f.map(({key:t,label:n,ids:r})=>(0,i.jsxs)(`div`,{className:o.relBlock,children:[(0,i.jsx)(`h5`,{children:n===void 0?t:e(n)}),(0,i.jsx)(me,{ids:r})]},t))]}),(0,i.jsxs)(`div`,{children:[(s.revisions??[]).length>0&&(0,i.jsxs)(`div`,{className:o.relBlock,children:[(0,i.jsx)(`h5`,{children:e(`detailRevisions`)}),(0,i.jsx)(`ul`,{className:o.timeline,children:s.revisions.map((t,n)=>(0,i.jsxs)(`li`,{children:[(0,i.jsx)(`time`,{children:W(t.supersededAt)}),(0,i.jsx)(`b`,{children:P(e,t.kind)}),` `,t.content]},n))})]}),p.length>0&&(0,i.jsxs)(`div`,{className:o.relBlock,children:[(0,i.jsx)(`h5`,{children:e(`detailOperations`)}),(0,i.jsx)(`ul`,{className:o.timeline,children:p.map((t,n)=>(0,i.jsxs)(`li`,{children:[(0,i.jsx)(`time`,{children:W(t.at)}),(0,i.jsx)(`b`,{children:F(e,t.op)}),te(e,t.op,t.detail)]},n))})]})]})]})}function ge({t:e,record:t,onClose:n,onSaved:a,toast:s}){let[c,l]=(0,r.useState)(t.content),[u,d]=(0,r.useState)(t.kind),[f,p]=(0,r.useState)(t.importance);return(0,i.jsxs)(`div`,{className:o.editForm,children:[(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`label`,{className:o.fieldLabel,children:e(`labelContent`)}),(0,i.jsx)(`textarea`,{className:o.input,rows:3,value:c,onChange:e=>l(e.target.value)})]}),(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`label`,{className:o.fieldLabel,children:e(`labelKind`)}),(0,i.jsx)(`select`,{className:o.input,value:u,onChange:e=>d(e.target.value),children:D.map(t=>(0,i.jsx)(`option`,{value:t,children:P(e,t)},t))})]}),(0,i.jsx)(`div`,{className:o.fieldRow,children:(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`label`,{className:o.fieldLabel,children:`${e(`importance`)} ${f.toFixed(2)}`}),(0,i.jsx)(`input`,{type:`range`,min:0,max:1,step:.05,value:f,onChange:e=>p(Number(e.target.value))})]})}),(0,i.jsxs)(`div`,{className:o.modalFoot,children:[(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:n,children:e(`cancel`)}),(0,i.jsx)(`button`,{type:`button`,className:`${o.button} ${o.primary}`,onClick:()=>{z(`update`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:t.id,scope:t.scope,content:c,kind:u,importance:f})}).then(a).catch(e=>{s.push(`error`,e.message)})},children:e(`saveWithHint`)})]})]})}let q={fts:`viaFts`,vec:`viaVec`,both:`viaBoth`};function _e({t:e,scope:t}){let[n,a]=(0,r.useState)(``),[s,c]=(0,r.useState)(t),[l,u]=(0,r.useState)(null),[d,f]=(0,r.useState)(!1),[p,m]=(0,r.useState)(null);(0,r.useEffect)(()=>{c(t)},[t]);let h=()=>{n.trim()===``||d||(f(!0),z(`search-test?q=${encodeURIComponent(n.trim())}&scope=${s}`,void 0,!0).then(e=>{u(e),m(null)}).catch(e=>m(e.message)).finally(()=>f(!1)))},g=l?.hits??[];return(0,i.jsxs)(`div`,{children:[(0,i.jsxs)(`div`,{className:o.benchBar,children:[(0,i.jsx)(`input`,{className:`${o.input} ${o.search}`,placeholder:e(`benchPlaceholder`),value:n,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&h()}}),(0,i.jsxs)(`select`,{className:o.input,value:s,onChange:e=>c(e.target.value),children:[(0,i.jsx)(`option`,{value:`all`,children:e(`benchScopeAll`)}),(0,i.jsx)(`option`,{value:`user`,children:e(`scopeUser`)}),(0,i.jsx)(`option`,{value:`project`,children:e(`scopeProject`)}),(0,i.jsx)(`option`,{value:`shared`,children:e(`scopeShared`)})]}),(0,i.jsx)(`button`,{type:`button`,className:`${o.button} ${o.primary}`,disabled:d||n.trim()===``,onClick:h,children:e(`benchRun`)})]}),p!==null&&(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loadFailed`,{msg:p})}),l!==null&&p===null&&(0,i.jsxs)(`div`,{className:o.benchMeta,children:[(0,i.jsx)(`span`,{children:e(`benchHits`,{n:g.length})}),l.degraded&&(0,i.jsx)(`span`,{className:o.degradedNote,children:e(`benchDegraded`)})]}),(0,i.jsx)(`div`,{className:o.benchList,children:g.map(t=>(0,i.jsxs)(`div`,{className:o.benchRow,children:[(0,i.jsxs)(`div`,{className:o.benchHead,children:[(0,i.jsx)(`span`,{className:o.viaChip,children:e(q[t.via])}),t.viaEdge!==void 0&&(0,i.jsxs)(`span`,{className:o.viaChip,title:`${t.viaEdge.type} ${t.viaEdge.from}`,children:[e(`viaEdgeLabel`),` · `,t.viaEdge.type]}),(0,i.jsx)(`span`,{className:ee(t.kind),children:P(e,t.kind)}),(0,i.jsx)(`span`,{className:o.benchScore,children:t.score.toFixed(4)})]}),(0,i.jsx)(`div`,{className:o.benchContent,children:t.content}),(0,i.jsx)(`span`,{className:o.benchId,title:t.id,children:t.id})]},t.id))}),l!==null&&g.length===0&&p===null&&(0,i.jsx)(`div`,{className:o.benchEmpty,children:e(`benchEmpty`)})]})}function ve(e,t){if(t===null)return``;try{let n=JSON.parse(t);if(typeof n.round==`number`&&typeof n.userText==`string`){let t=typeof n.mode==`string`?` · ${n.mode}`:``;return`${e(`round`,{n:n.round})}${t} · ${n.userText.slice(0,48)}`}if(typeof n.query==`string`&&Array.isArray(n.queries))return`${e(`benchRewrite`,{n:n.queries.length})} · ${n.query.slice(0,36)}`;if(typeof n.count==`number`&&Object.keys(n).length===1)return e(`benchCompress`,{n:n.count});if(typeof n.batchId==`string`&&typeof n.sufficient==`boolean`){let t=Array.isArray(n.refs)?n.refs.length:0;return`${n.batchId} · ${e(n.sufficient?`assessAdequate`:`assessInadequate`)} · ${e(`assessRefs`,{n:t})}`}if(typeof n.archived==`number`&&typeof n.merged==`number`&&typeof n.skipped==`number`)return`${n.scope===`project`?e(`scopeProject`):e(`scopeUser`)} · ${e(`consolidateArchived`,{n:n.archived})} · ${e(`consolidateMerged`,{n:n.merged})} · ${e(`consolidateSkipped`,{n:n.skipped})}`;if(typeof n.archived==`number`&&n.merged===void 0)return e(`decayArchived`,{n:n.archived});if(typeof n.assigned==`number`)return e(`slotBackfilled`,{n:n.assigned});if(typeof n.room==`string`)return e(`roomOpened`,{room:n.room});if(typeof n.grade==`number`&&typeof n.nextIntervalDays==`number`)return e(`reviewAnswered`,{grade:n.grade,days:n.nextIntervalDays})}catch{}return t.length>56?`${t.slice(0,56)}…`:t}let ye={all:null,write:[`write`,`update`,`forget`,`restore`,`decay`,`superseded`,`outcome-report`],ingest:[`ingest-request`,`ingest-done`],retrieve:[`search-rewrite-request`,`compress-request`,`assess`],organize:[`distill-request`,`consolidation`,`slot-assign`,`slot-backfill`,`room-open`,`review-answer`,`profile-edit`]},be={all:`logFilterAll`,write:`logFilterWrite`,ingest:`logFilterIngest`,retrieve:`logFilterRetrieve`,organize:`logFilterOrganize`},J={write:`logDotWrite`,ingest:`logDotIngest`,retrieve:`logDotRetrieve`,organize:`logDotOrganize`};function Y(e){for(let t of[`write`,`ingest`,`retrieve`,`organize`])if(ye[t]?.includes(e)===!0)return t;return`all`}function xe(e){let t=Y(e),n=o.logDot??``;return t===`all`?n:`${n} ${o[J[t]]??``}`}function Se(e,t){let n=e.split(`
|
|
1
|
+
window.__ModuleLoader__.load({id:`@kenz1117/dsh-engram`,factory:e=>{var t={exports:{}},n=t.exports;Object.defineProperty(n,Symbol.toStringTag,{value:`Module`});let r=e("react"),i=e("react/jsx-runtime"),a=`@kenz1117/dsh-engram/panel.module.css`;if(typeof document<`u`&&document.querySelector(`style[data-plugin-css=`+JSON.stringify(a)+`]`)===null){let e=document.createElement(`style`);e.dataset.plugin=`@kenz1117/dsh-engram`,e.dataset.pluginCss=a,e.textContent=`:root{--ease-spring:cubic-bezier(.32, .72, 0, 1);--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--dur-fast:.14s;--dur-base:.22s;--dur-slow:.36s;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--radius-control:8px;--radius-card:12px;--fs-micro:11px;--fs-body:12px;--fs-ctrl:13px;--fs-display:14px;--fs-tag:10px}.bWwFiW_panel{max-width:1240px;animation:bWwFiW_panelIn var(--dur-slow) var(--ease-out) both;margin:0 auto;position:relative}@keyframes bWwFiW_panelIn{0%{opacity:0;filter:blur(2px);transform:translateY(6px)}to{opacity:1;filter:blur();transform:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.bWwFiW_header{justify-content:space-between;align-items:center;gap:var(--space-5);row-gap:var(--space-2);margin-bottom:var(--space-5);flex-wrap:wrap;display:flex}.bWwFiW_headerBrand{align-items:center;gap:var(--space-3);flex:260px;min-width:min(260px,100%);display:flex}.bWwFiW_headerLogo{border-radius:var(--radius-control);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, var(--dsw-alias-bg-layer-1));border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 30%, var(--dsw-alias-border-l2));width:36px;height:36px;color:var(--dsw-alias-brand-primary);transition:transform var(--dur-base) var(--ease-spring), background var(--dur-base) var(--ease-spring);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.bWwFiW_headerLogo:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 18%, var(--dsw-alias-bg-layer-1));transform:rotate(-6deg)}.bWwFiW_headerLogo svg{transition:transform var(--dur-slow) var(--ease-spring);display:block}.bWwFiW_headerLogo:hover svg{transform:rotate(6deg)}.bWwFiW_headerTitle{gap:var(--space-1);flex-direction:column;min-width:0;display:flex}.bWwFiW_headerTitle h2{letter-spacing:-.01em;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:16px;font-weight:600;overflow:hidden}.bWwFiW_headerTitle p{font-size:var(--fs-body);color:var(--dsw-alias-label-tertiary);margin:0;line-height:1.5}.bWwFiW_headerActions{gap:var(--space-2);flex-shrink:0;align-items:center;display:flex}.bWwFiW_wsBar{align-items:center;gap:var(--space-2);flex-wrap:wrap;flex-basis:100%;min-width:0;display:flex}.bWwFiW_wsChip{max-width:220px;height:28px;padding:0 var(--space-3);border-radius:var(--radius-control);border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);font-size:var(--fs-micro);white-space:nowrap;text-overflow:ellipsis;transition:border-color var(--dur-fast) var(--ease-spring), color var(--dur-fast) var(--ease-spring);align-items:center;line-height:1;display:inline-flex;overflow:hidden}.bWwFiW_wsChip.bWwFiW_wsFollow{border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 38%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, var(--dsw-alias-bg-layer-1));color:var(--dsw-alias-brand-primary)}.bWwFiW_wsChip.bWwFiW_wsMuted{color:var(--dsw-alias-label-tertiary)}.bWwFiW_wsSelect{max-width:240px}.bWwFiW_dueBadge{height:28px;padding:0 var(--space-3);border-radius:var(--radius-control);border:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 38%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, var(--dsw-alias-bg-layer-1));color:var(--dsw-alias-label-primary);font-size:var(--fs-body);font-variant-numeric:tabular-nums;cursor:pointer;transition:background var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring), transform 80ms var(--ease-spring);align-items:center;gap:5px;line-height:1;display:inline-flex}.bWwFiW_dueBadge:hover{border-color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 14%, var(--dsw-alias-bg-layer-1))}.bWwFiW_dueBadge:active{transform:scale(.96)}.bWwFiW_dueDot{background:var(--dsw-alias-state-error-primary);border-radius:50%;flex:none;width:6px;height:6px}.bWwFiW_tabs{align-items:flex-end;gap:var(--space-5);border-bottom:1px solid var(--dsw-alias-border-l2);margin-bottom:var(--space-4);display:flex;position:relative}.bWwFiW_tabs:after{content:"";background:var(--dsw-alias-border-l2);height:1px;position:absolute;bottom:-1px;left:0;right:0}.bWwFiW_tabItem{padding:var(--space-2) 0 var(--space-3);color:var(--dsw-alias-label-tertiary);font-size:var(--fs-ctrl);cursor:pointer;transition:color var(--dur-fast) var(--ease-spring);background:0 0;border:0;font-weight:500;position:relative}.bWwFiW_tabItem:hover{color:var(--dsw-alias-label-secondary)}.bWwFiW_tabItem.bWwFiW_on{color:var(--dsw-alias-label-primary)}.bWwFiW_tabItem.bWwFiW_on:after{content:"";background:var(--dsw-alias-brand-primary);height:2px;animation:bWwFiW_tabUnderline var(--dur-base) var(--ease-spring) both;border-radius:2px 2px 0 0;position:absolute;bottom:-1px;left:0;right:0}@keyframes bWwFiW_tabUnderline{0%{opacity:0;transform:scaleX(.4)}to{opacity:1;transform:scaleX(1)}}.bWwFiW_tabItem small{margin-left:var(--space-2);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums}.bWwFiW_tabPanel{animation:bWwFiW_fadeSoft var(--dur-base) var(--ease-spring) both}.bWwFiW_drawerScrim{background:color-mix(in srgb, var(--dsw-alias-label-primary) 18%, transparent);border-radius:inherit;z-index:40;animation:bWwFiW_scrimIn var(--dur-base) var(--ease-spring) both;position:absolute;inset:0}@keyframes bWwFiW_scrimIn{0%{opacity:0}to{opacity:1}}.bWwFiW_drawer{background:var(--dsw-alias-bg-base);border-left:1px solid var(--dsw-alias-border-l2);width:100%;max-height:100%;box-shadow:-16px 0 40px -16px color-mix(in srgb, var(--dsw-alias-label-primary) 25%, transparent);z-index:41;animation:bWwFiW_drawerIn var(--dur-slow) var(--ease-spring) both;border-radius:inherit;flex-direction:column;display:flex;position:absolute;top:0;bottom:auto;right:0;overflow:hidden}@keyframes bWwFiW_drawerIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:none}}.bWwFiW_drawerHead{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--dsw-alias-border-l2);flex-shrink:0;display:flex}.bWwFiW_drawerTitle{align-items:baseline;gap:var(--space-2);flex:1;min-width:0;display:flex}.bWwFiW_drawerTitle h3{font-size:var(--fs-display);color:var(--dsw-alias-label-primary);margin:0;font-weight:600}.bWwFiW_drawerTitle span{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;max-width:240px;font-family:ui-monospace,SF Mono,Menlo,monospace;overflow:hidden}.bWwFiW_drawerClose{border-radius:var(--radius-control);width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--dur-fast) var(--ease-spring), color var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;display:inline-flex}.bWwFiW_drawerClose:hover{background:var(--dsw-alias-fill-tsp-secondary);border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary)}.bWwFiW_drawerClose svg{display:block}.bWwFiW_drawerBody{min-height:0;padding:var(--space-4);scrollbar-width:none;flex:1;overflow-y:auto}.bWwFiW_drawerBody::-webkit-scrollbar{display:none}.bWwFiW_reviewGrid{gap:var(--space-5);grid-template-columns:minmax(0,1fr) minmax(0,1fr);display:grid}@media (width<=720px){.bWwFiW_reviewGrid{grid-template-columns:1fr}}.bWwFiW_button{height:28px;padding:0 var(--space-3);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);border:1px solid var(--dsw-alias-border-l2);border-radius:var(--radius-control);cursor:pointer;font-size:var(--fs-body);transition:color var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring), background var(--dur-fast) var(--ease-spring), transform 80ms var(--ease-spring);justify-content:center;align-items:center;gap:5px;line-height:1;display:inline-flex}.bWwFiW_button:hover{color:var(--dsw-alias-label-primary);border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 55%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 5%, var(--dsw-alias-bg-layer-1))}.bWwFiW_button:active{transform:scale(.96)}.bWwFiW_button:disabled{opacity:.45;cursor:default;transform:none}.bWwFiW_button.bWwFiW_danger{color:var(--dsw-alias-state-error-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-error-primary) 35%, var(--dsw-alias-border-l2))}.bWwFiW_button.bWwFiW_danger:hover{color:var(--dsw-alias-state-error-primary);border-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))}.bWwFiW_button.bWwFiW_primary{background:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-label-primary-foreground)}.bWwFiW_button.bWwFiW_primary:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 88%, transparent);border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 88%, transparent);color:var(--dsw-alias-label-primary-foreground);filter:brightness(1.05)}.bWwFiW_button.bWwFiW_primary:disabled{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);opacity:.6;border-color:#0000}.bWwFiW_input{background:var(--dsw-alias-bg-layer-1);height:28px;color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);transition:border-color var(--dur-fast) var(--ease-spring), box-shadow var(--dur-fast) var(--ease-spring);border-radius:8px;padding:0 10px;font-size:12px;line-height:1}.bWwFiW_input::placeholder{color:var(--dsw-alias-label-tertiary)}.bWwFiW_input:hover{border-color:color-mix(in srgb, var(--dsw-alias-label-primary) 22%, var(--dsw-alias-border-l2))}.bWwFiW_input:focus-visible{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--dsw-alias-brand-primary) 18%, transparent);outline:none}.bWwFiW_search{flex:1;min-width:120px}select.bWwFiW_input{appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--dsw-alias-label-tertiary) 50%), linear-gradient(135deg, var(--dsw-alias-label-tertiary) 50%, transparent 50%);transition:background-position var(--dur-fast) var(--ease-spring);background-position:calc(100% - 13px) 12px,calc(100% - 8px) 12px;background-repeat:no-repeat;background-size:5px 5px;padding-right:24px}.bWwFiW_segGroup{background:var(--dsw-alias-fill-tsp-secondary);border-radius:9px;gap:2px;padding:2px;display:inline-flex;position:relative}.bWwFiW_segItem{height:24px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font-size:var(--fs-body);transition:color var(--dur-fast) var(--ease-spring), transform 80ms var(--ease-spring);z-index:1;white-space:nowrap;background:0 0;border:0;border-radius:7px;align-items:center;padding:0 12px;line-height:1;display:inline-flex;position:relative}.bWwFiW_segItem:hover{color:var(--dsw-alias-label-secondary)}.bWwFiW_segItem:active{transform:scale(.96)}.bWwFiW_segItem.bWwFiW_on{color:var(--dsw-alias-label-primary)}.bWwFiW_segIndicator{z-index:0;background:var(--dsw-alias-bg-layer-1);box-shadow:0 1px 2px color-mix(in srgb, var(--dsw-alias-label-primary) 10%, transparent), inset 0 0 0 1px color-mix(in srgb, var(--dsw-alias-border-l2) 60%, transparent);transition:left var(--dur-base) var(--ease-spring), width var(--dur-base) var(--ease-spring), opacity var(--dur-fast) var(--ease-spring);pointer-events:none;border-radius:7px;position:absolute;top:2px;bottom:2px}.bWwFiW_segScope{border-radius:10px;padding:3px}.bWwFiW_layout{gap:var(--space-5);margin-top:var(--space-5);grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);align-items:start;display:grid}.bWwFiW_mainCol{gap:var(--space-5);flex-direction:column;min-width:0;display:flex}.bWwFiW_sideCol{gap:var(--space-5);min-width:0;top:var(--space-3);flex-direction:column;display:flex;position:sticky}@media (width<=960px){.bWwFiW_layout{gap:var(--space-4);grid-template-columns:1fr}.bWwFiW_sideCol{position:static}}.bWwFiW_toolbarRow{gap:var(--space-2);margin-bottom:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.bWwFiW_toolbarRow .bWwFiW_search{flex:1;min-width:180px}.bWwFiW_chipRow{gap:var(--space-1);flex-wrap:wrap;display:flex}.bWwFiW_toolbarRow+.bWwFiW_chipRow{margin-bottom:var(--space-3)}.bWwFiW_chip{padding:3px var(--space-3);border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);font-size:var(--fs-micro);letter-spacing:.02em;cursor:pointer;transition:background var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring), color var(--dur-fast) var(--ease-spring);background:0 0;border-radius:999px}.bWwFiW_chip:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 6%, var(--dsw-alias-bg-layer-1));color:var(--dsw-alias-label-secondary)}.bWwFiW_chipOn{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, var(--dsw-alias-bg-layer-1));border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, var(--dsw-alias-border-l2));color:var(--dsw-alias-label-primary)}.bWwFiW_chipOn:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 20%, var(--dsw-alias-bg-layer-1))}.bWwFiW_exportWrap{display:inline-flex;position:relative}.bWwFiW_exportCaret{opacity:.7;transition:transform var(--dur-fast) var(--ease-spring);margin-left:4px;font-size:9px}.bWwFiW_exportWrap button[aria-expanded=true] .bWwFiW_exportCaret{transform:rotate(180deg)}.bWwFiW_exportMenu{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);min-width:220px;box-shadow:0 8px 24px -10px color-mix(in srgb, var(--dsw-alias-label-primary) 30%, transparent);z-index:30;animation:bWwFiW_drawerIn var(--dur-base) var(--ease-spring) both;border-radius:10px;padding:4px;position:absolute;top:calc(100% + 4px);right:0}.bWwFiW_exportItem{color:var(--dsw-alias-label-primary);transition:background var(--dur-fast) var(--ease-spring);border-radius:7px;flex-direction:column;gap:2px;padding:8px 10px;text-decoration:none;display:flex}.bWwFiW_exportItem:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, var(--dsw-alias-bg-layer-1))}.bWwFiW_exportItemLabel{font-size:13px;font-weight:500;line-height:1.2}.bWwFiW_exportItemHint{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.3}.bWwFiW_batchBar{bottom:var(--space-3);z-index:5;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 88%, transparent);-webkit-backdrop-filter:blur(10px);border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, var(--dsw-alias-border-l2));border-radius:var(--radius-card);box-shadow:0 8px 24px -12px color-mix(in srgb, var(--dsw-alias-label-primary) 30%, transparent);animation:bWwFiW_barUp var(--dur-base) var(--ease-spring) both;flex-wrap:wrap;align-items:center;display:flex;position:sticky}@keyframes bWwFiW_barUp{0%{opacity:0;transform:translateY(12px)scale(.98)}to{opacity:1;transform:none}}.bWwFiW_batchBar>span{color:var(--dsw-alias-label-primary);font-size:var(--fs-body);font-variant-numeric:tabular-nums;margin-right:auto}.bWwFiW_batchBar .bWwFiW_button{height:26px;padding:0 var(--space-2);font-size:var(--fs-micro)}.bWwFiW_itemList{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;display:flex}.bWwFiW_item{gap:var(--space-3);padding:var(--space-3) var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l1);border-radius:var(--radius-control);transition:background var(--dur-fast) var(--ease-spring);animation:bWwFiW_itemIn var(--dur-base) var(--ease-spring) both;grid-template-columns:20px minmax(0,1fr) auto;align-items:start;display:grid}.bWwFiW_itemList>.bWwFiW_item:last-child{border-bottom:0}@keyframes bWwFiW_itemIn{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}.bWwFiW_item:hover{background:var(--dsw-alias-bg-layer-1)}.bWwFiW_item.bWwFiW_selected{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 6%, var(--dsw-alias-bg-layer-1));box-shadow:inset 2px 0 0 var(--dsw-alias-brand-primary)}.bWwFiW_itemCheck{width:14px;height:14px;accent-color:var(--dsw-alias-brand-primary);cursor:pointer;transition:transform 80ms var(--ease-spring);margin-top:3px}.bWwFiW_itemCheck:active{transform:scale(.85)}.bWwFiW_itemBody{flex-direction:column;gap:4px;min-width:0;display:flex}.bWwFiW_itemTags{gap:var(--space-1);flex-wrap:wrap;align-items:center;display:flex}.bWwFiW_itemStamp{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);white-space:nowrap;margin-left:auto}.bWwFiW_content{white-space:pre-wrap;word-break:break-word;color:var(--dsw-alias-label-primary);font-size:var(--fs-body);-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.6;display:-webkit-box;overflow:hidden}.bWwFiW_itemMeta{gap:var(--space-3);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;display:flex}.bWwFiW_itemMeta b{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-weight:500}.bWwFiW_itemOps{gap:var(--space-1);opacity:0;visibility:hidden;transition:opacity var(--dur-fast) var(--ease-spring), visibility var(--dur-fast) var(--ease-spring);flex-shrink:0;align-items:center;display:flex}.bWwFiW_item:hover .bWwFiW_itemOps,.bWwFiW_item.bWwFiW_selected .bWwFiW_itemOps,.bWwFiW_item:focus-within .bWwFiW_itemOps{opacity:1;visibility:visible}.bWwFiW_itemOps .bWwFiW_button{height:24px;padding:0 var(--space-2);font-size:var(--fs-micro)}@media (hover:none){.bWwFiW_itemOps{opacity:1;visibility:visible}}@media (width<=720px){.bWwFiW_item{grid-template-columns:20px minmax(0,1fr)}.bWwFiW_itemOps{grid-column:2;justify-content:flex-end}}.bWwFiW_pill{height:18px;font-size:var(--fs-tag);background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 14%, transparent);color:var(--dsw-alias-label-secondary);white-space:nowrap;animation:bWwFiW_pillIn var(--dur-base) var(--ease-spring) both;transition:transform var(--dur-fast) var(--ease-spring), background var(--dur-fast) var(--ease-spring);border-radius:999px;align-items:center;padding:0 7px;line-height:1;display:inline-flex}@keyframes bWwFiW_pillIn{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:none}}.bWwFiW_pill:hover{transform:translateY(-1px)}.bWwFiW_pill.bWwFiW_kind{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent);color:var(--dsw-alias-brand-primary)}.bWwFiW_pill.bWwFiW_statusActive{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent);color:var(--dsw-alias-state-success-primary)}.bWwFiW_pill.bWwFiW_statusArchived{background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);color:var(--dsw-alias-state-warn-primary)}.bWwFiW_pill.bWwFiW_statusForgotten{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);color:var(--dsw-alias-state-error-primary)}.bWwFiW_pill.bWwFiW_outcomeSuccess{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent);color:var(--dsw-alias-state-success-primary)}.bWwFiW_pill.bWwFiW_outcomeFailure{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);color:var(--dsw-alias-state-error-primary)}.bWwFiW_pill.bWwFiW_redacted{background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);color:var(--dsw-alias-state-warn-primary)}.bWwFiW_expand{border-top:1px dashed var(--dsw-alias-border-l2);animation:bWwFiW_expandIn var(--dur-slow) var(--ease-spring) both;grid-column:1/-1;margin-top:4px;padding-top:10px;overflow:hidden}@keyframes bWwFiW_expandIn{0%{opacity:0;max-height:0;transform:translateY(-4px)}to{opacity:1;max-height:1200px;transform:none}}.bWwFiW_expandLoading{color:var(--dsw-alias-label-tertiary);animation:bWwFiW_fadeSoft var(--dur-base) var(--ease-spring) both;padding:6px 0;font-size:12px}@keyframes bWwFiW_fadeSoft{0%{opacity:0}to{opacity:1}}.bWwFiW_attrGrid{grid-template-columns:max-content 1fr;align-items:center;gap:6px 14px;font-size:12px;display:grid}.bWwFiW_attrGrid>dt{color:var(--dsw-alias-label-tertiary);margin:0;font-size:11px}.bWwFiW_attrGrid>dd{color:var(--dsw-alias-label-primary);flex-wrap:wrap;align-items:center;gap:6px;margin:0;display:flex}.bWwFiW_relBlock{margin-top:10px}.bWwFiW_relBlock>h5{color:var(--dsw-alias-label-tertiary);letter-spacing:.04em;text-transform:uppercase;margin:0 0 4px;font-size:11px;font-weight:500}.bWwFiW_relChips{flex-wrap:wrap;gap:4px;display:flex}.bWwFiW_relChip{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-base);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;max-width:100%;padding:2px 6px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:10px;overflow:hidden}.bWwFiW_timeline{margin:var(--space-2) 0 0;padding:0 0 0 var(--space-3);list-style:none;position:relative}.bWwFiW_timeline:before{background:var(--dsw-alias-border-l2);content:"";width:1px;position:absolute;top:6px;bottom:6px;left:3px}.bWwFiW_timeline li{padding:var(--space-1) 0 var(--space-1) var(--space-3);font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);line-height:1.55;position:relative}.bWwFiW_timeline li:before{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-brand-primary);content:"";border-radius:50%;width:6px;height:6px;position:absolute;top:8px;left:-10px}.bWwFiW_editForm{flex-direction:column;gap:10px;display:flex}.bWwFiW_editForm .bWwFiW_input{box-sizing:border-box;width:100%}.bWwFiW_editForm textarea.bWwFiW_input{resize:vertical;height:auto;min-height:64px;padding:8px 10px;line-height:1.55}.bWwFiW_fieldLabel{color:var(--dsw-alias-label-secondary);margin-bottom:4px;font-size:11px;display:block}.bWwFiW_fieldRow{flex-wrap:wrap;align-items:flex-start;gap:12px;display:flex}.bWwFiW_fieldRow .bWwFiW_fieldLabel{flex:1;min-width:120px}.bWwFiW_fieldRow input[type=range]{accent-color:var(--dsw-alias-brand-primary);width:100%}.bWwFiW_modalFoot{justify-content:flex-end;gap:8px;margin-top:6px;display:flex}.bWwFiW_pager{gap:var(--space-3);margin-top:var(--space-4);padding:var(--space-1) 0;color:var(--dsw-alias-label-secondary);font-size:var(--fs-body);font-variant-numeric:tabular-nums;animation:bWwFiW_fadeSoft var(--dur-base) var(--ease-spring) both;justify-content:center;align-items:center;display:flex}.bWwFiW_pager .bWwFiW_button{width:28px;transition:transform var(--dur-fast) var(--ease-spring), opacity var(--dur-fast) var(--ease-spring), background var(--dur-fast) var(--ease-spring);padding:0}.bWwFiW_pager .bWwFiW_button:not(:disabled):hover{transform:translateY(-1px)}.bWwFiW_pager .bWwFiW_button:disabled{opacity:.3}.bWwFiW_skeletonList{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;display:flex}.bWwFiW_skeleton{padding:var(--space-3) var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l1);gap:var(--space-2);animation:bWwFiW_itemIn var(--dur-base) var(--ease-spring) both;flex-direction:column;display:flex}.bWwFiW_skeleton i{background:linear-gradient(90deg, color-mix(in srgb, var(--dsw-alias-label-tertiary) 10%, transparent) 25%, color-mix(in srgb, var(--dsw-alias-label-tertiary) 22%, transparent) 50%, color-mix(in srgb, var(--dsw-alias-label-tertiary) 10%, transparent) 75%);background-size:200% 100%;border-radius:4px;height:10px;animation:1.6s linear infinite bWwFiW_shimmer;display:block}.bWwFiW_skeleton i:first-child{width:30%}.bWwFiW_skeleton i:nth-child(2){width:80%;animation-delay:80ms}.bWwFiW_skeleton i:last-child{width:55%;animation-delay:.16s}@keyframes bWwFiW_shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.bWwFiW_empty{text-align:center;color:var(--dsw-alias-label-secondary);font-size:var(--fs-ctrl);animation:bWwFiW_fadeSoft var(--dur-slow) var(--ease-spring) both;padding:56px 16px}.bWwFiW_empty b{color:var(--dsw-alias-label-primary);font-size:var(--fs-display);margin-bottom:var(--space-1);font-weight:500;display:block}.bWwFiW_empty span{color:var(--dsw-alias-label-tertiary);font-size:var(--fs-body)}.bWwFiW_empty:before{content:"";border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 35%, var(--dsw-alias-border-l2));background:linear-gradient(135deg, color-mix(in srgb, var(--dsw-alias-brand-primary) 18%, transparent), transparent 70%);border-radius:10px;width:36px;height:36px;margin:0 auto 14px;display:block}.bWwFiW_panelCard{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:var(--radius-card);padding:var(--space-4);animation:bWwFiW_cardIn var(--dur-slow) var(--ease-spring) both;position:relative}@keyframes bWwFiW_cardIn{0%{opacity:0;transform:scale(.99)}to{opacity:1;transform:none}}.bWwFiW_panelCard+.bWwFiW_panelCard{animation-delay:60ms}.bWwFiW_benchBar{gap:var(--space-2);margin-bottom:var(--space-3);display:flex}.bWwFiW_benchBar .bWwFiW_search{flex:1;min-width:0}.bWwFiW_benchBar .bWwFiW_button{flex:none}.bWwFiW_benchMeta{gap:var(--space-3);margin-bottom:var(--space-2);color:var(--dsw-alias-label-tertiary);font-size:var(--fs-micro);flex-wrap:wrap;align-items:baseline;display:flex}.bWwFiW_degradedNote{color:var(--dsw-alias-state-warn-primary)}.bWwFiW_benchEmpty{color:var(--dsw-alias-label-tertiary);font-size:var(--fs-body);padding:var(--space-2) 0}.bWwFiW_benchList{margin-top:var(--space-2);border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;display:flex}.bWwFiW_benchRow{padding:var(--space-3) var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l1);transition:background var(--dur-fast) var(--ease-spring);animation:bWwFiW_itemIn var(--dur-base) var(--ease-spring) both}.bWwFiW_benchList>.bWwFiW_benchRow:last-child{border-bottom:0}.bWwFiW_benchRow:hover{background:var(--dsw-alias-bg-layer-1)}.bWwFiW_benchHead{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.bWwFiW_viaChip{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-fill-tsp-secondary);font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:var(--fs-tag);border-radius:4px;height:16px;padding:0 6px;line-height:16px}.bWwFiW_benchScore{color:var(--dsw-alias-label-tertiary);font-size:var(--fs-micro);font-variant-numeric:tabular-nums;margin-left:auto}.bWwFiW_benchContent{margin:var(--space-2) 0;color:var(--dsw-alias-label-primary);font-size:var(--fs-body);word-break:break-word;-webkit-line-clamp:3;-webkit-box-orient:vertical;line-height:1.55;display:-webkit-box;overflow:hidden}.bWwFiW_benchId{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.bWwFiW_mapWrap{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_map{background:color-mix(in srgb, var(--dsw-alias-bg-base) 70%, transparent);border-radius:var(--radius-control);border:1px solid var(--dsw-alias-border-l2);user-select:none;width:100%;height:auto;display:block}.bWwFiW_node{cursor:grab;transition:transform var(--dur-fast) var(--ease-spring)}.bWwFiW_node:active{cursor:grabbing}.bWwFiW_tooltip{pointer-events:none}.bWwFiW_legend{gap:var(--space-3);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;display:flex}.bWwFiW_legendItem{align-items:center;gap:var(--space-1);display:inline-flex}.bWwFiW_legendDot{border-radius:50%;width:8px;height:8px;display:inline-block}.bWwFiW_node,.bWwFiW_edgeFade{animation:bWwFiW_corridorFadeIn var(--dur-slow) var(--ease-spring) backwards}@keyframes bWwFiW_corridorFadeIn{0%{opacity:0;filter:blur(2px)}to{opacity:1;filter:none}}.bWwFiW_progressBar{background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 18%, transparent);border-radius:2px;height:4px;overflow:hidden}.bWwFiW_progressBar i{background:var(--dsw-alias-brand-primary);height:100%;transition:width var(--dur-slow) var(--ease-out);border-radius:2px;display:block}.bWwFiW_telePrivacy{align-items:center;gap:var(--space-1);border-radius:var(--radius-control);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);cursor:help;transition:background var(--dur-fast) var(--ease-spring), color var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring);background:0 0;border:1px solid #0000;outline:none;align-self:center;padding:4px 8px;display:inline-flex;position:relative}.bWwFiW_telePrivacy:hover,.bWwFiW_telePrivacy:focus-visible{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-fill-tsp-secondary);border-color:var(--dsw-alias-border-l2)}.bWwFiW_telePrivacy svg{opacity:.85;flex:none}.bWwFiW_telePrivacyHint{white-space:nowrap}.bWwFiW_telePrivacyTip{min-width:260px;max-width:320px;padding:var(--space-2) var(--space-3);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:var(--radius-control);box-shadow:0 6px 18px -8px color-mix(in srgb, var(--dsw-alias-label-primary) 24%, transparent);font-size:var(--fs-body);color:var(--dsw-alias-label-primary);white-space:normal;pointer-events:none;opacity:0;transition:opacity var(--dur-fast) var(--ease-spring), transform var(--dur-fast) var(--ease-spring);z-index:5;text-align:left;line-height:1.5;position:absolute;top:calc(100% + 6px);right:0;transform:translateY(-2px)}.bWwFiW_telePrivacy:hover .bWwFiW_telePrivacyTip,.bWwFiW_telePrivacy:focus-visible .bWwFiW_telePrivacyTip{opacity:1;transform:translateY(0)}.bWwFiW_timeline li{animation:bWwFiW_itemIn var(--dur-base) var(--ease-spring) both}.bWwFiW_timeline li:nth-child(2){animation-delay:40ms}.bWwFiW_timeline li:nth-child(3){animation-delay:80ms}.bWwFiW_timeline li:nth-child(4){animation-delay:.12s}.bWwFiW_timeline li:nth-child(5){animation-delay:.16s}.bWwFiW_timeline li:nth-child(n+6){animation-delay:.2s}.bWwFiW_tourProposal{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_tourGreeting{font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);margin:0;line-height:1.55}.bWwFiW_tourStops{gap:var(--space-2);counter-reset:tour;flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.bWwFiW_tourStops li{animation:bWwFiW_tourItemIn var(--dur-base) var(--ease-spring) backwards}.bWwFiW_tourStops li:nth-child(2){animation-delay:40ms}.bWwFiW_tourStops li:nth-child(3){animation-delay:80ms}.bWwFiW_tourStops li:nth-child(4){animation-delay:.12s}.bWwFiW_tourStops li:nth-child(n+5){animation-delay:.16s}.bWwFiW_tourStop{align-items:center;gap:var(--space-2);width:100%;padding:var(--space-2);border-radius:var(--radius-control);color:inherit;text-align:left;cursor:pointer;transition:background var(--dur-fast) var(--ease-spring), border-color var(--dur-fast) var(--ease-spring), transform var(--dur-fast) var(--ease-spring);background:0 0;border:1px solid #0000;display:flex}.bWwFiW_tourStop:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 6%, var(--dsw-alias-bg-layer-1));border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 28%, var(--dsw-alias-border-l2));transform:translate(2px)}.bWwFiW_tourStop:active{transform:translate(2px)scale(.99)}@keyframes bWwFiW_tourItemIn{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}.bWwFiW_tourStopIndex{width:20px;height:20px;font-size:var(--fs-micro);color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-brand-primary);font-variant-numeric:tabular-nums;border-radius:50%;flex:none;justify-content:center;align-items:center;font-weight:600;display:inline-flex}.bWwFiW_tourStopBody{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.bWwFiW_tourStopKind{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);letter-spacing:.04em;text-transform:uppercase}.bWwFiW_tourStopText{font-size:var(--fs-body);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;line-height:1.4;overflow:hidden}.bWwFiW_tourHint{margin:var(--space-1) 0 0;font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);line-height:1.4}.bWwFiW_refurb{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_refurbHead{justify-content:space-between;align-items:center;gap:var(--space-2);padding-bottom:var(--space-2);display:flex}.bWwFiW_refurbHead .bWwFiW_button{height:24px;padding:0 var(--space-2);font-size:var(--fs-micro)}.bWwFiW_refurbCount{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums}.bWwFiW_refurbList{border-top:1px solid var(--dsw-alias-border-l1);animation:bWwFiW_refurbReflow var(--dur-slow) var(--ease-spring) backwards;flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.bWwFiW_refurbItem{align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l1);font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);animation:bWwFiW_refurbItemIn var(--dur-base) var(--ease-spring) backwards;flex-wrap:wrap;display:flex}.bWwFiW_refurbList>.bWwFiW_refurbItem:last-child{border-bottom:0}.bWwFiW_refurbItem:nth-child(2){animation-delay:40ms}.bWwFiW_refurbItem:nth-child(3){animation-delay:80ms}.bWwFiW_refurbItem:nth-child(4){animation-delay:.12s}.bWwFiW_refurbItem:nth-child(n+5){animation-delay:.16s}@keyframes bWwFiW_refurbReflow{0%{opacity:0;filter:blur(2px)}to{opacity:1;filter:none}}@keyframes bWwFiW_refurbItemIn{0%{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}.bWwFiW_refurbBadge{padding:2px var(--space-2);font-size:var(--fs-micro);letter-spacing:.04em;background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, var(--dsw-alias-bg-layer-1));border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 30%, var(--dsw-alias-border-l2));color:var(--dsw-alias-label-primary);cursor:pointer;transition:background var(--dur-fast) var(--ease-spring);border-radius:999px;flex:none;font-weight:600}.bWwFiW_refurbBadge:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, var(--dsw-alias-bg-layer-1))}.bWwFiW_refurbReason{text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical;flex:1;min-width:120px;line-height:1.45;display:-webkit-box;overflow:hidden}.bWwFiW_refurbConfidence{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none}.bWwFiW_refurbExec{height:24px;padding:0 var(--space-2);font-size:var(--fs-micro);flex:none;line-height:1}.bWwFiW_backfill{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_backfillIntro{font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);margin:0;line-height:1.6}.bWwFiW_backfillRules{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));display:grid}.bWwFiW_backfillRule{gap:var(--space-1);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);flex-direction:column;display:flex}.bWwFiW_backfillToggles{gap:var(--space-4);padding-top:var(--space-2);flex-wrap:wrap;display:flex}.bWwFiW_backfillToggle{align-items:center;gap:var(--space-2);font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);cursor:pointer;display:inline-flex}.bWwFiW_backfillEstimate{gap:var(--space-2);padding-top:var(--space-4);border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;display:flex}.bWwFiW_backfillNumbers{gap:var(--space-5);flex-wrap:wrap;display:flex}.bWwFiW_backfillMetric{font-size:var(--fs-body);color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums}.bWwFiW_backfillMuted{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);line-height:1.5}.bWwFiW_backfillActions{gap:var(--space-2);padding-top:var(--space-4);border-top:1px solid var(--dsw-alias-border-l1);flex-wrap:wrap;display:flex}.bWwFiW_backfillProgress{gap:var(--space-2);flex-direction:column;display:flex}.bWwFiW_backfillProgressHead{justify-content:space-between;align-items:baseline;gap:var(--space-2);font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;display:flex}.bWwFiW_backfillMeta{gap:var(--space-4);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex-wrap:wrap;display:flex}.bWwFiW_backfillFailures{font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);flex-direction:column;gap:2px;margin:0;padding:0;font-family:ui-monospace,SF Mono,Menlo,monospace;list-style:none;display:flex}.bWwFiW_jev{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_jevIntro{font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);margin:0;line-height:1.6}.bWwFiW_jevToggleRow{align-items:center;gap:var(--space-4);padding-top:var(--space-2);flex-wrap:wrap;display:flex}.bWwFiW_jevToggle{align-items:center;gap:var(--space-2);font-size:var(--fs-body);color:var(--dsw-alias-label-secondary);cursor:pointer;display:inline-flex}.bWwFiW_jevStatus{font-size:var(--fs-micro);color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.bWwFiW_jevForm{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.bWwFiW_jevField{gap:var(--space-1);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);flex-direction:column;display:flex}.bWwFiW_jevMuted{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);line-height:1.5}.bWwFiW_jevActions{gap:var(--space-2);padding-top:var(--space-4);border-top:1px solid var(--dsw-alias-border-l1);flex-wrap:wrap;display:flex}.bWwFiW_jevObs{gap:var(--space-2);padding-top:var(--space-4);border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;display:flex}.bWwFiW_jevObsHead{font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);font-weight:600}.bWwFiW_jevObsItem{align-items:baseline;gap:var(--space-3);font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex-wrap:wrap;display:flex}.bWwFiW_jevObsTime{color:var(--dsw-alias-label-tertiary)}.bWwFiW_jevObsBadge{padding:0 var(--space-2);background:color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);color:var(--dsw-alias-label-primary);border-radius:3px;font-weight:600}.bWwFiW_jevObsBadgeGood{background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#2da44e) 14%, transparent);color:var(--dsw-alias-state-success-primary,#2da44e)}.bWwFiW_jevObsBadgeWarn{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);color:var(--dsw-alias-state-error-primary)}.bWwFiW_jevObsError{color:var(--dsw-alias-state-error-primary);word-break:break-all}.bWwFiW_toastViewport{top:var(--space-4);right:var(--space-4);z-index:9999;gap:var(--space-2);pointer-events:none;flex-direction:column;max-width:min(360px,100vw - 32px);display:flex;position:fixed}.bWwFiW_toast{align-items:flex-start;gap:var(--space-2);padding:var(--space-3);border-radius:var(--radius-card);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);box-shadow:0 6px 18px -8px color-mix(in srgb, var(--dsw-alias-label-primary) 24%, transparent);font-size:var(--fs-body);color:var(--dsw-alias-label-primary);pointer-events:auto;animation:bWwFiW_toastIn var(--dur-base) var(--ease-spring) both;line-height:1.5;display:flex}.bWwFiW_toastBody{word-break:break-word;flex:1;min-width:0}.bWwFiW_toastDismiss{color:var(--dsw-alias-label-tertiary);cursor:pointer;padding:0 var(--space-1);transition:color var(--dur-fast) var(--ease-spring);background:0 0;border:none;font-size:16px;line-height:1}.bWwFiW_toastDismiss:hover{color:var(--dsw-alias-label-primary)}.bWwFiW_toastInfo{border-left:3px solid var(--dsw-alias-brand-primary)}.bWwFiW_toastSuccess{border-left:3px solid color-mix(in srgb, var(--dsw-alias-state-success-primary,#2da44e) 80%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-state-success-primary,#2da44e) 6%, var(--dsw-alias-bg-layer-1))}.bWwFiW_toastError{border-left:3px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 80%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 6%, var(--dsw-alias-bg-layer-1))}.bWwFiW_toastWarning{border-left:3px solid color-mix(in srgb, #d4a017 80%, var(--dsw-alias-border-l2));background:color-mix(in srgb, #d4a017 6%, var(--dsw-alias-bg-layer-1))}@keyframes bWwFiW_toastIn{0%{opacity:0;transform:translate(8px)scale(.98)}to{opacity:1;transform:none}}.bWwFiW_section{min-width:0}.bWwFiW_sectionHead{align-items:baseline;gap:var(--space-3);margin-bottom:var(--space-3);display:flex}.bWwFiW_sectionTitle{font-size:var(--fs-ctrl);color:var(--dsw-alias-label-primary);margin:0;font-weight:600}.bWwFiW_sectionHint{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);line-height:1.4}.bWwFiW_sectionAction{align-self:center;margin-left:auto}.bWwFiW_hero{gap:var(--space-5);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.bWwFiW_heroMetrics{gap:var(--space-6);flex-wrap:wrap;min-width:0;display:flex}.bWwFiW_heroSide{align-items:center;gap:var(--space-4);min-width:0;display:flex}.bWwFiW_heroFoot{justify-content:space-between;align-items:center;gap:var(--space-3);margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--dsw-alias-border-l1);flex-wrap:wrap;display:flex}.bWwFiW_metric{flex-direction:column;gap:2px;min-width:0;display:flex}.bWwFiW_metricLabel{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);white-space:nowrap}.bWwFiW_metricValue{letter-spacing:-.02em;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:28px;font-weight:600;line-height:1.1}.bWwFiW_metricValueSecondary{font-size:20px}.bWwFiW_metricTail{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);white-space:nowrap}.bWwFiW_ring{flex-shrink:0;width:56px;height:56px;position:relative}.bWwFiW_ring svg{display:block;transform:rotate(-90deg)}.bWwFiW_ring b{font-size:var(--fs-display);font-variant-numeric:tabular-nums;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}:root{--room-fact:#3b6ef5;--room-preference:#a45cf0;--room-decision:#16a394;--room-episode:#e08a2e;--room-skill:#d94f8a}@media (prefers-color-scheme:dark){:root{--room-fact:#6b96ff;--room-preference:#bb86f7;--room-decision:#3fc7b5;--room-episode:#f0a95a;--room-skill:#f077a9}}.bWwFiW_pill.bWwFiW_roomFact{background:color-mix(in srgb, var(--room-fact) 12%, transparent);color:var(--room-fact)}.bWwFiW_pill.bWwFiW_roomPreference{background:color-mix(in srgb, var(--room-preference) 12%, transparent);color:var(--room-preference)}.bWwFiW_pill.bWwFiW_roomDecision{background:color-mix(in srgb, var(--room-decision) 12%, transparent);color:var(--room-decision)}.bWwFiW_pill.bWwFiW_roomEpisode{background:color-mix(in srgb, var(--room-episode) 12%, transparent);color:var(--room-episode)}.bWwFiW_pill.bWwFiW_roomSkill{background:color-mix(in srgb, var(--room-skill) 12%, transparent);color:var(--room-skill)}.bWwFiW_roomList{flex-direction:column;display:flex}.bWwFiW_roomRow{gap:var(--space-3);padding:var(--space-2) 0;font-size:var(--fs-body);grid-template-columns:10px minmax(0,1fr) auto;align-items:center;display:grid}.bWwFiW_roomSwatch{background:var(--room-fact);border-radius:3px;width:10px;height:10px}.bWwFiW_roomSwatch.bWwFiW_roomFact{background:var(--room-fact)}.bWwFiW_roomSwatch.bWwFiW_roomPreference{background:var(--room-preference)}.bWwFiW_roomSwatch.bWwFiW_roomDecision{background:var(--room-decision)}.bWwFiW_roomSwatch.bWwFiW_roomEpisode{background:var(--room-episode)}.bWwFiW_roomSwatch.bWwFiW_roomSkill{background:var(--room-skill)}.bWwFiW_roomCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums}.bWwFiW_logToolbar{align-items:center;gap:var(--space-3);margin-bottom:var(--space-3);flex-wrap:wrap;display:flex}.bWwFiW_logToolbar .bWwFiW_segGroup{margin-left:auto}.bWwFiW_logCounts{align-items:center;gap:var(--space-4);font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);display:flex}.bWwFiW_logCounts>span{align-items:center;gap:6px;display:inline-flex}.bWwFiW_logCounts b{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.bWwFiW_logDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;flex:none;width:6px;height:6px}.bWwFiW_logDotWrite{background:var(--dsw-alias-brand-primary)}.bWwFiW_logDotIngest{background:var(--dsw-alias-state-success-primary)}.bWwFiW_logDotRetrieve{background:var(--dsw-alias-state-warn-primary)}.bWwFiW_logDotOrganize{background:var(--room-decision)}.bWwFiW_logList{flex-direction:column;padding:0;display:flex}.bWwFiW_logRow{gap:var(--space-3);padding:var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l1);font-size:var(--fs-body);grid-template-columns:8px 76px 96px 60px minmax(0,1fr);align-items:center;display:grid}.bWwFiW_logRow:last-child{border-bottom:0}.bWwFiW_logRow:hover{background:var(--dsw-alias-bg-layer-1)}.bWwFiW_logTime{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap}.bWwFiW_logOp{color:var(--dsw-alias-label-primary);font-weight:500}.bWwFiW_logScope{color:var(--dsw-alias-label-tertiary)}.bWwFiW_logDetail{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bWwFiW_profileCard{gap:var(--space-3);flex-direction:column;display:flex}.bWwFiW_profileHeading{font-size:var(--fs-micro);color:var(--dsw-alias-label-secondary);margin:0;font-weight:600}.bWwFiW_profileContent{padding:var(--space-3);border:1px solid var(--dsw-alias-border-l1);border-radius:var(--radius-control);background:var(--dsw-alias-bg-layer-1);font-family:inherit;font-size:var(--fs-body);white-space:pre-wrap;word-break:break-word;max-height:200px;margin:0;line-height:1.6;overflow-y:auto}.bWwFiW_profilePickerRow{gap:var(--space-4);flex-wrap:wrap;display:flex}.bWwFiW_profilePickerRow label{gap:var(--space-1);flex-direction:column;display:flex}.bWwFiW_profileSelect{padding:var(--space-1) var(--space-2);border:1px solid var(--dsw-alias-border-l1);border-radius:var(--radius-control);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font-size:var(--fs-micro)}.bWwFiW_profileDiff{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--radius-control);font-size:var(--fs-micro);max-height:220px;line-height:1.6;overflow-y:auto}.bWwFiW_profileDiffAdd{padding:0 var(--space-2);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent);color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word}.bWwFiW_profileDiffDel{padding:0 var(--space-2);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);color:var(--dsw-alias-label-tertiary);white-space:pre-wrap;word-break:break-word;text-decoration:line-through}.bWwFiW_profileDiffSame{padding:0 var(--space-2);color:var(--dsw-alias-label-tertiary);white-space:pre-wrap;word-break:break-word}.bWwFiW_episodeRangeSep{color:var(--dsw-alias-label-tertiary);font-size:var(--fs-body)}.bWwFiW_episodeAround{border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 35%, var(--dsw-alias-border-l2))}.bWwFiW_episodeAroundHead{margin-bottom:var(--space-2);font-size:var(--fs-ctrl);color:var(--dsw-alias-label-primary);justify-content:space-between;align-items:center;display:flex}.bWwFiW_episodeHead{gap:var(--space-1);padding-bottom:var(--space-2);margin-bottom:var(--space-2);border-bottom:1px solid var(--dsw-alias-border-l2);flex-direction:column;display:flex}.bWwFiW_episodeSummary{font-size:var(--fs-ctrl);color:var(--dsw-alias-label-primary);margin:0;font-weight:500;line-height:1.5}.bWwFiW_episodeSummaryMissing{color:var(--dsw-alias-label-tertiary);font-weight:400}.bWwFiW_episodeHeadMeta{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary)}.bWwFiW_episodeRow{align-items:baseline;gap:var(--space-2);padding:var(--space-1) 0;font-size:var(--fs-body);display:flex}.bWwFiW_episodeRow+.bWwFiW_episodeRow{border-top:1px solid color-mix(in srgb, var(--dsw-alias-border-l2) 55%, transparent)}.bWwFiW_episodeRowTime{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none}.bWwFiW_episodeRowKind{font-size:var(--fs-micro);color:var(--dsw-alias-label-tertiary);flex:none}.bWwFiW_episodeRowText{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.bWwFiW_episodeRow .bWwFiW_button{height:22px;font-size:var(--fs-micro);flex:none;padding:0 8px}@media (width<=960px){.bWwFiW_hero{grid-template-columns:1fr}.bWwFiW_heroMetrics{gap:var(--space-5)}.bWwFiW_logRow{grid-template-columns:8px 64px 88px minmax(0,1fr)}.bWwFiW_logScope{display:none}}@media (width<=720px){.bWwFiW_metricValue{font-size:22px}}`,document.head.appendChild(e)}var o={section:`bWwFiW_section`,jevIntro:`bWwFiW_jevIntro`,exportWrap:`bWwFiW_exportWrap`,itemBody:`bWwFiW_itemBody`,metricLabel:`bWwFiW_metricLabel`,drawerHead:`bWwFiW_drawerHead`,itemMeta:`bWwFiW_itemMeta`,backfillEstimate:`bWwFiW_backfillEstimate`,toastError:`bWwFiW_toastError`,heroFoot:`bWwFiW_heroFoot`,statusActive:`bWwFiW_statusActive`,node:`bWwFiW_node`,wsBar:`bWwFiW_wsBar`,jevForm:`bWwFiW_jevForm`,roomRow:`bWwFiW_roomRow`,skeletonList:`bWwFiW_skeletonList`,profileHeading:`bWwFiW_profileHeading`,legend:`bWwFiW_legend`,toastSuccess:`bWwFiW_toastSuccess`,roomFact:`bWwFiW_roomFact`,backfillMetric:`bWwFiW_backfillMetric`,episodeRowKind:`bWwFiW_episodeRowKind`,pager:`bWwFiW_pager`,mainCol:`bWwFiW_mainCol`,refurb:`bWwFiW_refurb`,refurbExec:`bWwFiW_refurbExec`,profileDiffSame:`bWwFiW_profileDiffSame`,hero:`bWwFiW_hero`,itemIn:`bWwFiW_itemIn`,benchRow:`bWwFiW_benchRow`,backfillProgressHead:`bWwFiW_backfillProgressHead`,backfillNumbers:`bWwFiW_backfillNumbers`,tourStop:`bWwFiW_tourStop`,tabItem:`bWwFiW_tabItem`,headerTitle:`bWwFiW_headerTitle`,jevActions:`bWwFiW_jevActions`,toastBody:`bWwFiW_toastBody`,tourStops:`bWwFiW_tourStops`,sectionHead:`bWwFiW_sectionHead`,backfillActions:`bWwFiW_backfillActions`,sideCol:`bWwFiW_sideCol`,tourGreeting:`bWwFiW_tourGreeting`,layout:`bWwFiW_layout`,episodeHeadMeta:`bWwFiW_episodeHeadMeta`,danger:`bWwFiW_danger`,tabPanel:`bWwFiW_tabPanel`,backfillRules:`bWwFiW_backfillRules`,jevObsBadgeWarn:`bWwFiW_jevObsBadgeWarn`,toastIn:`bWwFiW_toastIn`,toastInfo:`bWwFiW_toastInfo`,benchMeta:`bWwFiW_benchMeta`,outcomeFailure:`bWwFiW_outcomeFailure`,toastDismiss:`bWwFiW_toastDismiss`,benchHead:`bWwFiW_benchHead`,jevObsTime:`bWwFiW_jevObsTime`,episodeRowTime:`bWwFiW_episodeRowTime`,relChip:`bWwFiW_relChip`,profilePickerRow:`bWwFiW_profilePickerRow`,fadeSoft:`bWwFiW_fadeSoft`,search:`bWwFiW_search`,benchEmpty:`bWwFiW_benchEmpty`,jevField:`bWwFiW_jevField`,empty:`bWwFiW_empty`,jevStatus:`bWwFiW_jevStatus`,primary:`bWwFiW_primary`,logDotOrganize:`bWwFiW_logDotOrganize`,selected:`bWwFiW_selected`,profileDiffDel:`bWwFiW_profileDiffDel`,item:`bWwFiW_item`,refurbConfidence:`bWwFiW_refurbConfidence`,tourStopIndex:`bWwFiW_tourStopIndex`,jev:`bWwFiW_jev`,statusForgotten:`bWwFiW_statusForgotten`,benchBar:`bWwFiW_benchBar`,sectionHint:`bWwFiW_sectionHint`,content:`bWwFiW_content`,logScope:`bWwFiW_logScope`,segItem:`bWwFiW_segItem`,backfillToggles:`bWwFiW_backfillToggles`,modalFoot:`bWwFiW_modalFoot`,logDetail:`bWwFiW_logDetail`,toolbarRow:`bWwFiW_toolbarRow`,jevObsItem:`bWwFiW_jevObsItem`,outcomeSuccess:`bWwFiW_outcomeSuccess`,on:`bWwFiW_on`,tourStopBody:`bWwFiW_tourStopBody`,statusArchived:`bWwFiW_statusArchived`,benchScore:`bWwFiW_benchScore`,roomSwatch:`bWwFiW_roomSwatch`,corridorFadeIn:`bWwFiW_corridorFadeIn`,wsSelect:`bWwFiW_wsSelect`,refurbList:`bWwFiW_refurbList`,backfillMeta:`bWwFiW_backfillMeta`,metricTail:`bWwFiW_metricTail`,jevObsBadge:`bWwFiW_jevObsBadge`,exportItem:`bWwFiW_exportItem`,refurbBadge:`bWwFiW_refurbBadge`,header:`bWwFiW_header`,toastWarning:`bWwFiW_toastWarning`,barUp:`bWwFiW_barUp`,refurbReason:`bWwFiW_refurbReason`,panelIn:`bWwFiW_panelIn`,tabs:`bWwFiW_tabs`,timeline:`bWwFiW_timeline`,sectionTitle:`bWwFiW_sectionTitle`,segScope:`bWwFiW_segScope`,benchContent:`bWwFiW_benchContent`,logDotIngest:`bWwFiW_logDotIngest`,degradedNote:`bWwFiW_degradedNote`,tourStopKind:`bWwFiW_tourStopKind`,map:`bWwFiW_map`,segGroup:`bWwFiW_segGroup`,logRow:`bWwFiW_logRow`,telePrivacyTip:`bWwFiW_telePrivacyTip`,profileDiffAdd:`bWwFiW_profileDiffAdd`,headerActions:`bWwFiW_headerActions`,exportCaret:`bWwFiW_exportCaret`,button:`bWwFiW_button`,skeleton:`bWwFiW_skeleton`,benchList:`bWwFiW_benchList`,refurbItem:`bWwFiW_refurbItem`,episodeRangeSep:`bWwFiW_episodeRangeSep`,backfill:`bWwFiW_backfill`,roomCount:`bWwFiW_roomCount`,jevMuted:`bWwFiW_jevMuted`,telePrivacy:`bWwFiW_telePrivacy`,expand:`bWwFiW_expand`,episodeRow:`bWwFiW_episodeRow`,chipRow:`bWwFiW_chipRow`,chipOn:`bWwFiW_chipOn`,drawerScrim:`bWwFiW_drawerScrim`,pillIn:`bWwFiW_pillIn`,attrGrid:`bWwFiW_attrGrid`,legendItem:`bWwFiW_legendItem`,backfillIntro:`bWwFiW_backfillIntro`,logList:`bWwFiW_logList`,exportMenu:`bWwFiW_exportMenu`,headerBrand:`bWwFiW_headerBrand`,legendDot:`bWwFiW_legendDot`,progressBar:`bWwFiW_progressBar`,roomDecision:`bWwFiW_roomDecision`,kind:`bWwFiW_kind`,benchId:`bWwFiW_benchId`,shimmer:`bWwFiW_shimmer`,jevObs:`bWwFiW_jevObs`,wsFollow:`bWwFiW_wsFollow`,wsMuted:`bWwFiW_wsMuted`,tourProposal:`bWwFiW_tourProposal`,itemTags:`bWwFiW_itemTags`,wsChip:`bWwFiW_wsChip`,episodeAroundHead:`bWwFiW_episodeAroundHead`,jevToggle:`bWwFiW_jevToggle`,refurbHead:`bWwFiW_refurbHead`,refurbReflow:`bWwFiW_refurbReflow`,ring:`bWwFiW_ring`,logDotWrite:`bWwFiW_logDotWrite`,backfillFailures:`bWwFiW_backfillFailures`,expandIn:`bWwFiW_expandIn`,edgeFade:`bWwFiW_edgeFade`,drawerIn:`bWwFiW_drawerIn`,relChips:`bWwFiW_relChips`,metricValueSecondary:`bWwFiW_metricValueSecondary`,pill:`bWwFiW_pill`,jevObsError:`bWwFiW_jevObsError`,telePrivacyHint:`bWwFiW_telePrivacyHint`,redacted:`bWwFiW_redacted`,logOp:`bWwFiW_logOp`,roomList:`bWwFiW_roomList`,roomSkill:`bWwFiW_roomSkill`,cardIn:`bWwFiW_cardIn`,tooltip:`bWwFiW_tooltip`,roomPreference:`bWwFiW_roomPreference`,itemStamp:`bWwFiW_itemStamp`,tourHint:`bWwFiW_tourHint`,profileCard:`bWwFiW_profileCard`,fieldRow:`bWwFiW_fieldRow`,expandLoading:`bWwFiW_expandLoading`,dueDot:`bWwFiW_dueDot`,profileSelect:`bWwFiW_profileSelect`,relBlock:`bWwFiW_relBlock`,input:`bWwFiW_input`,backfillProgress:`bWwFiW_backfillProgress`,sectionAction:`bWwFiW_sectionAction`,drawer:`bWwFiW_drawer`,editForm:`bWwFiW_editForm`,jevObsBadgeGood:`bWwFiW_jevObsBadgeGood`,episodeAround:`bWwFiW_episodeAround`,drawerClose:`bWwFiW_drawerClose`,reviewGrid:`bWwFiW_reviewGrid`,jevObsHead:`bWwFiW_jevObsHead`,mapWrap:`bWwFiW_mapWrap`,metricValue:`bWwFiW_metricValue`,refurbCount:`bWwFiW_refurbCount`,headerLogo:`bWwFiW_headerLogo`,logTime:`bWwFiW_logTime`,episodeSummary:`bWwFiW_episodeSummary`,jevToggleRow:`bWwFiW_jevToggleRow`,chip:`bWwFiW_chip`,backfillToggle:`bWwFiW_backfillToggle`,heroMetrics:`bWwFiW_heroMetrics`,drawerTitle:`bWwFiW_drawerTitle`,itemList:`bWwFiW_itemList`,logDotRetrieve:`bWwFiW_logDotRetrieve`,profileContent:`bWwFiW_profileContent`,episodeHead:`bWwFiW_episodeHead`,itemOps:`bWwFiW_itemOps`,batchBar:`bWwFiW_batchBar`,segIndicator:`bWwFiW_segIndicator`,tabUnderline:`bWwFiW_tabUnderline`,panelCard:`bWwFiW_panelCard`,dueBadge:`bWwFiW_dueBadge`,drawerBody:`bWwFiW_drawerBody`,panel:`bWwFiW_panel`,exportItemLabel:`bWwFiW_exportItemLabel`,refurbItemIn:`bWwFiW_refurbItemIn`,toast:`bWwFiW_toast`,tourItemIn:`bWwFiW_tourItemIn`,viaChip:`bWwFiW_viaChip`,logDot:`bWwFiW_logDot`,episodeSummaryMissing:`bWwFiW_episodeSummaryMissing`,scrimIn:`bWwFiW_scrimIn`,profileDiff:`bWwFiW_profileDiff`,logToolbar:`bWwFiW_logToolbar`,toastViewport:`bWwFiW_toastViewport`,metric:`bWwFiW_metric`,logCounts:`bWwFiW_logCounts`,itemCheck:`bWwFiW_itemCheck`,heroSide:`bWwFiW_heroSide`,backfillMuted:`bWwFiW_backfillMuted`,backfillRule:`bWwFiW_backfillRule`,roomEpisode:`bWwFiW_roomEpisode`,exportItemHint:`bWwFiW_exportItemHint`,tourStopText:`bWwFiW_tourStopText`,episodeRowText:`bWwFiW_episodeRowText`,fieldLabel:`bWwFiW_fieldLabel`};let s=`engram`,c={fact:`kindFact`,preference:`kindPreference`,decision:`kindDecision`,episode:`kindEpisode`,skill:`kindSkill`},l={nav:`记忆宫殿`,scopeUser:`私人宫殿`,scopeProject:`项目宫殿`,scopeShared:`共享宫殿`,projectFollow:`跟随当前工作区`,projectFollowNamed:`项目 · 跟随 {name}`,projectFollowHint:`项目宫殿跟随 GUI 当前选中的工作区(按会话归属判定)`,projectPinned:`项目 · {name}`,projectUnregistered:`未注册工作区`,projectNoWorkspace:`无工作区信息(进程默认)`,projectSwitch:`项目宫殿来源`,projectMemories:`{n} 条记忆`,projectProcessDefault:`进程默认目录`,refresh:`重访`,exportMd:`导出 MD`,exportJson:`导出 JSON`,export:`导出`,exportMirror:`镜像目录`,exportMdHint:`单文件,可直接分享`,exportJsonHint:`结构化全文,便于程序处理`,exportMirrorHint:`每条记忆一个 .md,可用 Obsidian 漫游`,allStatuses:`全部状态`,allKinds:`全部房间`,redactedAll:`全部铭牌`,redactedOnly:`含涂改`,redactedNone:`无涂改`,tagRedacted:`已涂改`,tagOutcomeSuccess:`管家验证·有效`,tagOutcomeFailure:`管家验证·失效`,searchPlaceholder:`在宫殿里寻找…`,statusActive:`对外开放`,statusArchived:`展厅陈列`,statusForgotten:`已闭馆`,kindFact:`事实厅`,kindPreference:`偏好阁`,kindDecision:`决策堂`,kindEpisode:`往事廊`,kindSkill:`技法坊`,labelContent:`铭牌`,labelKind:`房间`,labelStatus:`状态`,labelScope:`宫殿归属`,importance:`地标亮度`,confidence:`考据可靠度`,accessCount:`参观 {n} 人次`,labelCreated:`开馆时间`,timeJustNow:`方才`,timeMinutesAgo:`{n} 分钟前`,timeHoursAgo:`{n} 小时前`,timeDaysAgo:`{n} 天前`,sourceExplicit:`管理员添置`,sourceSession:`发掘地 {id}`,round:`第 {n} 趟`,cardRedacted:`涂改 {n}`,detail:`参观`,edit:`修缮`,forget:`封门`,restore:`重开`,empty:`宫殿暂无可陈展的记忆`,emptyHint:`试试调整房间筛选,或新添一条`,loadFailed:`访客受挫:{msg}`,loading:`导览中…`,pagerInfo:`第 {page} / {pages} 页 · 共 {total} 条`,prevPage:`上一页`,nextPage:`下一页`,cancel:`作罢`,saveWithHint:`修缮(旧铭牌归展厅)`,detailAttributes:`铭牌`,detailSource:`发掘地`,detailRelations:`邻接走廊`,detailOperations:`管家日志`,relSupersededBy:`被替代`,relSupersedes:`替代`,relContradicts:`互斥`,relRelated:`相邻`,headerTitle:`记忆宫殿`,headerSubtitle:`跨会话长期记忆宫殿`,tabToday:`今日`,tabLibrary:`陈展`,tabCorridor:`走廊`,tabLog:`日志`,tabLibraryCount:`{n} 条`,roomsTitle:`房间目录`,roomsHint:`每间满 9 个桩位后开新间`,healthEvaluatedAt:`诊脉于 {time}`,logFilterAll:`全部`,logFilterWrite:`落成类`,logFilterIngest:`发掘`,logFilterRetrieve:`检索`,logFilterOrganize:`整理`,logCount:`{n} 条 · 两库合并倒序`,benchTitle:`检索实验台`,drawerClose:`归殿`,drawerTitle:`记忆铭牌`,kpiTotal:`记忆`,kpiActive:`开放`,kpiForgotten:`闭馆`,kpiSignal:`清晰度`,opWrite:`落成`,opWriteMerge:`落成·并入`,opUpdate:`修缮`,opForget:`封门`,opRestore:`重开`,opDecay:`闭门陈列`,opSuperseded:`被替代`,opIngestRequest:`发掘请求`,opIngestDone:`发掘完成`,opOutcomeReport:`管家验证`,opAssess:`证据判定`,opConsolidation:`闭馆整理`,opReviewAnswer:`复习答题`,opSlotAssign:`排桩`,opSlotBackfill:`批量排桩`,opRoomOpen:`开新房`,consolidateArchived:`归档 {n}`,consolidateMerged:`合并 {n}`,consolidateSkipped:`跳过 {n}`,decayArchived:`归档 {n}`,slotBackfilled:`新排 {n} 个桩位`,roomOpened:`开新房 {room}`,reviewAnswered:`评分 {grade} · 下次 {days} 天后`,assessAdequate:`证据充足`,assessInadequate:`证据不足`,assessRefs:`{n} 条证据`,opSearchRewrite:`路线改写`,opCompressRequest:`导览压缩`,opDistillRequest:`合并房间`,selectAll:`本页全选`,deselectAll:`取消全选`,selectedCount:`已选 {n} 条`,batchForget:`批量封门({n})`,batchForgetConfirm:`确认封门 {n} 条?`,batchRestore:`批量重开({n})`,clearSelection:`清空所选`,sectionCorridor:`走廊鸟瞰`,corridorEmpty:`走廊空空如也,落成几条记忆后这里会出现鸟瞰图。`,corridorFailed:`走廊加载失败`,corridorLoad:`加载走廊鸟瞰…`,corridorAria:`走廊鸟瞰图`,corridorSummary:`{nodes} 条记忆 · {edges} 条走廊`,edgeSupersedes:`推陈出新`,edgeContradicts:`互斥`,edgeOther:`相邻 / 支持 / 提炼`,healthLoading:`正在诊脉…`,teleFailed:`遥测加载失败`,teleLoading:`聚合管家记录中…`,teleGroupRecent:`近 7 天`,telePrivacyHint:`数据仅在本机聚合 · 不外传`,telePrivacyTip:`所有 op_log 与遥测计数只在当前进程的 SQLite 里聚合,从未发送至任何外部服务;本机重启或卸载插件即清空。`,teleWrites:`落成`,teleIngest:`发掘`,teleConsolidate:`整理`,benchPlaceholder:`说出要找的房间关键词或语义…`,benchRun:`出发`,benchScopeAll:`全部宫殿`,benchHits:`到访 {n} 间`,benchDegraded:`语义灯熄,仅关键词引路`,benchEmpty:`此路不通`,benchNote:`试走与正式导览共用同一张地图,会计入参观人次`,viaFts:`关键词`,viaVec:`语义`,viaBoth:`双路`,viaEdgeLabel:`邻接走廊`,benchRewrite:`路线改写为 {n} 段`,benchCompress:`铭牌压缩 {n} 条`,activityEmpty:`暂无管家活动`,detailRevisions:`陈展沿革`,tourProposalTitle:`入殿导航`,tourProposalEmpty:`宫殿尚空,建议先放第一段记忆(调用 engram_save)`,tourProposalHint:`点击记忆可展开抽屉查看铭牌`,tourFocusAll:`全部`,refurbTitle:`翻新清单`,refurbEmpty:`所有房间状态健康,无翻新建议`,refurbRun:`重新扫描`,refurbActionDemote:`降级`,refurbActionMerge:`合并`,refurbActionReview:`复习`,refurbActionSplit:`拆分`,refurbCount:`{n} 条建议`,refurbExecute:`执行`,refurbConfirmDemote:`确认降级这条记忆?执行后状态转 archived,可在统计页恢复。`,refurbConfirmMerge:`确认合并 {n} 条相似记忆?将触发 engram_distill 把它们归纳为 1 条高层规律。`,refurbDemoteDone:`已降级`,refurbMergeDone:`合并任务已派发`,refurbActionFailed:`执行失败:{msg}`,refurbMergeEmpty:`无可合并的候选条目`,heroDue:`今日到期`,filterDueToday:`今日到期`,sortTime:`按时间`,sortTour:`按巡游路线`,dueBadgeLabel:`今日到期 {n} 条,点击在陈展中筛选`,tabBackfill:`回填`,backfillIntro:`把 dsh 的历史会话逐轮提炼进宫殿:每条会话写进它自己 cwd 对应的项目库;已摄取过的轮次按幂等键自动跳过,中断后再次开始即可续做。回填的条目不会进入今日复习队列。`,backfillRulesTitle:`导入规则`,backfillDays:`时间窗`,backfillDaysAll:`不限`,backfillDaysUnit:`{n} 天`,backfillMaxTurns:`单会话最多轮数`,backfillMaxTotal:`本次总轮数上限`,backfillModel:`辅助模型`,backfillModelAuto:`自动(用当前在用的模型)`,backfillIncludeSubagents:`包含子代理会话`,backfillIncludeSeeded:`包含种子会话`,backfillIncludeNoCwd:`包含无 cwd 会话(只能进私人宫殿)`,backfillReestimate:`重新估算`,backfillEstimateTitle:`估算`,backfillCandidates:`候选会话 {n}`,backfillPendingTurns:`待处理 {n} 轮`,backfillAlready:`已摄取跳过 {n} 轮`,backfillSkippedDetail:`已排除:子代理 {subagent} · 种子 {seeded} · 无 cwd {noCwd} · 超时间窗 {tooOld} · 日志不可读 {unreadable}`,backfillTruncated:`候选超出总轮数上限:本次只处理最近的一部分会话,可调大上限或分几次跑`,backfillStart:`开始回填`,backfillPause:`暂停`,backfillStateRunning:`回填中…`,backfillStateDone:`已完成`,backfillStateCancelled:`已中止(可再次开始续做)`,backfillStateFailed:`失败`,backfillProgressSessions:`会话 {done}/{total}`,backfillProgressTurns:`轮次 {done}/{total}`,backfillWritten:`写入 {n} 条`,backfillTurnsSkipped:`跳过 {n} 轮`,backfillTurnsFailed:`失败 {n} 轮`,backfillFailures:`失败明细`,backfillEstimating:`正在估算…`,backfillSkipReasons:`跳过原因`,backfillRouteHint:`失败多半是因为历史会话当时用的模型在当前环境不可用:可在 cordis.yml 配置 provider/model,或先用目标模型跑一轮会话(回填会复用当前在用的模型)再重试——已完成的轮次会自动跳过。`,skipLowActivity:`低活动轮`,skipChitchat:`寒暄轮`,skipForbidden:`显式禁记`,skipNoContent:`无用户内容`,skipAlready:`已摄取`,skipNoTurn:`无此轮`,skipNoRoute:`日志无路由`,skipUnparsable:`提炼输出不可解析`,opProfileEdit:`画像修订`,profileOpCreate:`创建 v{to} · {chars} 字`,profileOpEdit:`编辑 v{from}→v{to} · {chars} 字`,profileOpRollback:`回滚 v{from}→v{to}(还原 v{restored})· {chars} 字`,profileTitle:`画像 curated block`,profileEmpty:`尚无 curated 画像`,profileEmptyHint:`在会话里让 agent 调 engram_profile_edit 创建;创建后会话开始时优先于自动派生画像注入。`,profileCurrent:`当前内容 · v{n}`,profileHistory:`版本历史(新→旧)`,profileSourceEdit:`编辑`,profileSourceRollback:`回滚`,profileDiffBase:`基准版本`,profileDiffTarget:`对比版本`,profileDiffNone:`两个版本内容相同`,profileLoadFailed:`画像加载失败`,tabEpisodes:`往事`,episodeSince:`开始日期`,episodeUntil:`结束日期`,episodeSessionId:`会话 id(可选)`,episodeApply:`应用`,episodeReset:`重置`,episodeHint:`按会话分组浏览经历;组头是摄取时生成的一句话摘要,点条目的「邻近」看当时前后还发生了什么`,episodeNoGroups:`该范围内没有情景记忆`,episodeNoSession:`无会话来源`,episodeSummaryMissing:`(该会话尚未生成摘要:跑一次历史回填即可补上)`,episodeEntries:`{n} 条情景`,episodeNearby:`邻近`,episodeAroundTitle:`时间邻近扩展`,episodeAroundEmpty:`邻近窗口内没有其他情景`,episodeClose:`收起`,tabEntities:`实体`,entityHint:`从记忆中抽取的人物、项目、工具与概念;点「查看」看一条实体牵出的所有记忆`,entityKindAll:`全部类别`,entityKindPerson:`人物`,entityKindProject:`项目`,entityKindTool:`工具`,entityKindConcept:`概念`,entityKindOther:`其他`,entitySearchPlaceholder:`搜索实体名或别名`,entityCount:`{n} 个实体`,entityMemories:`{n} 条关联记忆`,entityOpen:`查看`,entityAliases:`别名`,entityNoMemories:`暂无关联记忆`,entityEmpty:`该宫殿还没有实体;保存带实体提及的记忆后会自动出现`,factSection:`事实链({n} 条)`,factEmpty:`暂无事实;摄取时从记忆抽取的实体事实会出现在这里`,factValid:`生效`,factInvalid:`已失效`,tabJev:`裁决`,jevIntro:`Jev 系统一裁决:写入落库前对模糊记忆做三路判定(合并 / 接受 / 搁置)并确认矛盾边。密钥保存在本机数据目录(0600 文件),保存后立即生效,无需重启;Jev 不可用时自动回落纯规则四态。`,jevEnabled:`启用 Jev 裁决`,jevStatusOn:`Jev 裁决已生效`,jevStatusOff:`Jev 裁决未生效(纯规则四态)`,jevApiKey:`API 密钥`,jevApiKeyHint:`留空表示保留现有密钥;要清除已存密钥(回落 cordis.yml 配置)点「清除已存密钥」。`,jevApiKeyUnset:`未配置`,jevClearKey:`清除已存密钥`,jevKeyCleared:`已清除面板密钥,回落部署配置`,jevBaseUrl:`端点`,jevModel:`判决模型`,jevTimeoutMs:`超时(毫秒,1000-60000)`,jevThresholdsTitle:`裁决阈值(cordis.yml 高级配置,此处只读)`,jevThresholdLine:`判同一条 ≥{merge} · 判不同条 ≤{accept} · 矛盾确认 ≥{contradict}`,jevSave:`保存`,jevSaved:`已保存,配置即时生效`,jevLoadFailed:`加载失败`,jevTest:`测试连接`,jevTestOk:`连接正常:{ms} 毫秒,ping 概率 {p}`,jevTestFail:`连接失败:{error}`,jevObsTitle:`近期裁决(本进程,最多 50 条,重启清空)`,jevObsEmpty:`暂无记录;启用 Jev 后发生写入裁决时出现`,jevObsLoadFailed:`裁决记录加载失败`,jevObsSiteBand:`模糊带`,jevObsSiteContradiction:`矛盾确认`,jevObsVerdictMerge:`并入`,jevObsVerdictAccept:`放行`,jevObsVerdictDefer:`搁置`,jevObsVerdictConfirm:`确认矛盾`,jevObsVerdictReject:`非矛盾`,jevObsVerdictFallback:`回落`,jevObsNoAnswer:`无答案`,jevObsErrorLine:`错误:{error}`},u={nav:`Memory Palace`,scopeUser:`Private Palace`,scopeProject:`Project Palace`,scopeShared:`Shared Palace`,projectFollow:`Follow the active workspace`,projectFollowNamed:`Project · following {name}`,projectFollowHint:`The project palace follows the workspace selected in the GUI (by session ownership)`,projectPinned:`Project · {name}`,projectUnregistered:`unregistered workspace`,projectNoWorkspace:`No workspace info (process default)`,projectSwitch:`Project palace source`,projectMemories:`{n} memories`,projectProcessDefault:`Process default directory`,refresh:`Revisit`,exportMd:`Export MD`,exportJson:`Export JSON`,export:`Export`,exportMirror:`Mirror tree`,exportMdHint:`Single file, easy to share`,exportJsonHint:`Structured full dump for scripts`,exportMirrorHint:`One .md per memory, roamable in Obsidian`,allStatuses:`All statuses`,allKinds:`All rooms`,redactedAll:`All placards`,redactedOnly:`Redacted`,redactedNone:`Unredacted`,tagRedacted:`redacted`,tagOutcomeSuccess:`curator: worked`,tagOutcomeFailure:`curator: failed`,searchPlaceholder:`Wander the palace…`,statusActive:`open to public`,statusArchived:`on display`,statusForgotten:`closed`,kindFact:`Fact Hall`,kindPreference:`Preference Pavilion`,kindDecision:`Decision Chamber`,kindEpisode:`Episode Gallery`,kindSkill:`Skill Workshop`,labelContent:`Placard`,labelKind:`Room`,labelStatus:`Status`,labelScope:`Palace`,importance:`Beacon`,confidence:`Provenance`,accessCount:`{n} visits`,labelCreated:`Opened`,timeJustNow:`just now`,timeMinutesAgo:`{n} min ago`,timeHoursAgo:`{n} hr ago`,timeDaysAgo:`{n} d ago`,sourceExplicit:`Curator placed`,sourceSession:`Excavated at {id}`,round:`pass {n}`,cardRedacted:`{n} redacted`,detail:`Tour`,edit:`Renovate`,forget:`Close`,restore:`Reopen`,empty:`No memories to display`,emptyHint:`Adjust the rooms above, or place a new memory`,loadFailed:`Tour halted: {msg}`,loading:`Guiding…`,pagerInfo:`Page {page} / {pages} · {total} memories`,prevPage:`Previous page`,nextPage:`Next page`,cancel:`Cancel`,saveWithHint:`Renovate (archive old placard)`,detailAttributes:`Placard`,detailSource:`Excavation`,detailRelations:`Corridors`,detailOperations:`Curator log`,relSupersededBy:`Superseded by`,relSupersedes:`Supersedes`,relContradicts:`Contradicts`,relRelated:`Adjacent`,headerTitle:`Memory Palace`,headerSubtitle:`Cross-session long-term memory palace`,tabToday:`Today`,tabLibrary:`Palace`,tabCorridor:`Corridor`,tabLog:`Log`,tabLibraryCount:`{n} memories`,roomsTitle:`Room directory`,roomsHint:`A new room opens once 9 slots fill`,healthEvaluatedAt:`Scored {time}`,logFilterAll:`All`,logFilterWrite:`Writes`,logFilterIngest:`Capture`,logFilterRetrieve:`Retrieval`,logFilterOrganize:`Organize`,logCount:`{n} entries · both stores merged, newest first`,benchTitle:`Retrieval bench`,drawerClose:`Return`,drawerTitle:`Memory placard`,kpiTotal:`Memories`,kpiActive:`Open`,kpiForgotten:`Closed`,kpiSignal:`Clarity`,opWrite:`opened`,opWriteMerge:`merged in`,opUpdate:`renovated`,opForget:`closed`,opRestore:`reopened`,opDecay:`archived`,opSuperseded:`superseded`,opIngestRequest:`excavation requested`,opIngestDone:`excavated`,opOutcomeReport:`curator report`,opAssess:`evidence check`,opConsolidation:`consolidation`,opReviewAnswer:`review answer`,opSlotAssign:`slot assigned`,opSlotBackfill:`slots backfilled`,opRoomOpen:`room opened`,consolidateArchived:`archived {n}`,consolidateMerged:`merged {n}`,consolidateSkipped:`skipped {n}`,decayArchived:`archived {n}`,slotBackfilled:`{n} slots assigned`,roomOpened:`opened room {room}`,reviewAnswered:`grade {grade} · next in {days}d`,assessAdequate:`evidence adequate`,assessInadequate:`evidence insufficient`,assessRefs:`{n} refs`,opSearchRewrite:`route rewritten`,opCompressRequest:`placard compressed`,opDistillRequest:`rooms merged`,selectAll:`Select all on page`,deselectAll:`Deselect all`,selectedCount:`{n} memories`,batchForget:`Close selected ({n})`,batchForgetConfirm:`Close {n} memories?`,batchRestore:`Reopen selected ({n})`,clearSelection:`Clear selection`,sectionCorridor:`Corridor overview`,corridorEmpty:`No memories yet — the bird’s-eye view appears after a few memories arrive.`,corridorFailed:`Failed to load corridor`,corridorLoad:`Loading corridor overview…`,corridorAria:`Corridor overview map`,corridorSummary:`{nodes} memories · {edges} corridors`,edgeSupersedes:`supersedes`,edgeContradicts:`contradicts`,edgeOther:`related / supports / refines`,healthLoading:`Taking pulse…`,teleFailed:`Telemetry failed`,teleLoading:`Aggregating curator events…`,teleGroupRecent:`Last 7 days`,telePrivacyHint:`Local aggregation only · never transmitted`,telePrivacyTip:`All op_log and telemetry counters are aggregated in this process’s SQLite only; nothing is sent to any external service. Clearing the plugin or restarting the host wipes the data.`,teleWrites:`Opened`,teleIngest:`Excavated`,teleConsolidate:`Consolidated`,benchPlaceholder:`Name a room by keyword or meaning…`,benchRun:`Walk`,benchScopeAll:`All palaces`,benchHits:`{n} rooms found`,benchDegraded:`Beacon dark · keyword lane only`,benchEmpty:`No route found`,benchNote:`Walk uses the same map as the guided tour and counts as a visit`,viaFts:`keyword`,viaVec:`semantic`,viaBoth:`dual`,viaEdgeLabel:`corridor`,benchRewrite:`route split into {n}`,benchCompress:`compressed {n} overflow placards`,activityEmpty:`No curator activity yet`,detailRevisions:`Exhibit history`,tourProposalTitle:`Tour proposal`,tourProposalEmpty:`The palace is empty — place a first memory via engram_save`,tourProposalHint:`Click a memory to open its placard`,tourFocusAll:`All`,refurbTitle:`Refurb suggestions`,refurbEmpty:`All rooms are healthy — no suggestions`,refurbRun:`Re-scan`,refurbActionDemote:`demote`,refurbActionMerge:`merge`,refurbActionReview:`review`,refurbActionSplit:`split`,refurbCount:`{n} suggestions`,refurbExecute:`Apply`,refurbConfirmDemote:`Demote this memory? Status will become archived; you can reopen it later.`,refurbConfirmMerge:`Merge {n} similar memories? This triggers engram_distill to fold them into one higher-level pattern.`,refurbDemoteDone:`Demoted`,refurbMergeDone:`Merge dispatched`,refurbActionFailed:`Action failed: {msg}`,refurbMergeEmpty:`No merge candidates`,heroDue:`Due today`,filterDueToday:`Due today`,sortTime:`By time`,sortTour:`By tour route`,dueBadgeLabel:`{n} due today — click to filter in the library`,tabBackfill:`Backfill`,backfillIntro:`Distils past dsh sessions into the palace, turn by turn: each session is written into the project store matching its own cwd. Turns already captured are skipped by idempotency key, so starting again resumes where it stopped. Backfilled memories never enter the due-today queue.`,backfillRulesTitle:`Import rules`,backfillDays:`Time window`,backfillDaysAll:`All`,backfillDaysUnit:`{n} days`,backfillMaxTurns:`Max turns per session`,backfillMaxTotal:`Total turn budget`,backfillModel:`Auxiliary model`,backfillModelAuto:`Auto (model currently in use)`,backfillIncludeSubagents:`Include subagent sessions`,backfillIncludeSeeded:`Include seeded sessions`,backfillIncludeNoCwd:`Include sessions without cwd (private palace only)`,backfillReestimate:`Re-estimate`,backfillEstimateTitle:`Estimate`,backfillCandidates:`{n} candidate sessions`,backfillPendingTurns:`{n} turns pending`,backfillAlready:`{n} turns already captured`,backfillSkippedDetail:`Excluded: subagent {subagent} · seeded {seeded} · no cwd {noCwd} · outside window {tooOld} · unreadable {unreadable}`,backfillTruncated:`Candidates exceed the total turn budget: only the most recent sessions run this time — raise the budget or run in batches`,backfillStart:`Start backfill`,backfillPause:`Pause`,backfillStateRunning:`Running…`,backfillStateDone:`Finished`,backfillStateCancelled:`Stopped (start again to resume)`,backfillStateFailed:`Failed`,backfillProgressSessions:`Sessions {done}/{total}`,backfillProgressTurns:`Turns {done}/{total}`,backfillWritten:`{n} memories written`,backfillTurnsSkipped:`{n} turns skipped`,backfillTurnsFailed:`{n} turns failed`,backfillFailures:`Failures`,backfillEstimating:`Estimating…`,backfillSkipReasons:`Skipped`,backfillRouteHint:`Failures are usually because the model a past session used is not available here: set provider/model in cordis.yml, or run one turn with the target model first (backfill reuses the model currently in use) and retry — finished turns are skipped automatically.`,skipLowActivity:`low activity`,skipChitchat:`chitchat`,skipForbidden:`capture forbidden`,skipNoContent:`no user content`,skipAlready:`already captured`,skipNoTurn:`no such turn`,skipNoRoute:`no route in log`,skipUnparsable:`unparsable output`,opProfileEdit:`profile revised`,profileOpCreate:`created v{to} · {chars} chars`,profileOpEdit:`edited v{from}→v{to} · {chars} chars`,profileOpRollback:`rolled back v{from}→v{to} (restored v{restored}) · {chars} chars`,profileTitle:`Curated profile block`,profileEmpty:`No curated profile yet`,profileEmptyHint:`Ask the agent to call engram_profile_edit in a session; once created it is injected ahead of the derived profile at session start.`,profileCurrent:`Current content · v{n}`,profileHistory:`Version history (newest first)`,profileSourceEdit:`edited`,profileSourceRollback:`rollback`,profileDiffBase:`Base version`,profileDiffTarget:`Compare version`,profileDiffNone:`The two versions are identical`,profileLoadFailed:`Failed to load profile`,tabEpisodes:`Episodes`,episodeSince:`From date`,episodeUntil:`To date`,episodeSessionId:`Session id (optional)`,episodeApply:`Apply`,episodeReset:`Reset`,episodeHint:`Browse experiences grouped by session; group heads carry a one-line summary generated at ingest. Click "Nearby" on an entry to see what else happened around that moment`,episodeNoGroups:`No episodes in this range`,episodeNoSession:`No session origin`,episodeSummaryMissing:`(No summary yet for this session: run a history backfill to add one)`,episodeEntries:`{n} episodes`,episodeNearby:`Nearby`,episodeAroundTitle:`Time proximity expansion`,episodeAroundEmpty:`No other episodes within the proximity window`,episodeClose:`Collapse`,tabEntities:`Entities`,entityHint:`People, projects, tools and concepts extracted from memories; open one to see every memory that mentions it`,entityKindAll:`All kinds`,entityKindPerson:`People`,entityKindProject:`Projects`,entityKindTool:`Tools`,entityKindConcept:`Concepts`,entityKindOther:`Other`,entitySearchPlaceholder:`Search names or aliases`,entityCount:`{n} entities`,entityMemories:`{n} linked memories`,entityOpen:`View`,entityAliases:`Aliases`,entityNoMemories:`No linked memories`,entityEmpty:`No entities in this palace yet; they appear after you save memories that mention them`,factSection:`Facts ({n})`,factEmpty:`No facts yet; facts extracted from memories during ingestion will appear here`,factValid:`active`,factInvalid:`superseded`,tabJev:`Jev`,jevIntro:`Jev System-One adjudication: three-way ruling (merge / accept / defer) for ambiguous memories before they are written, plus contradiction confirmation. The key is stored in the local data directory (0600 file) and takes effect immediately after saving, no restart; when Jev is unavailable the plugin falls back to the pure four-rule disposition.`,jevEnabled:`Enable Jev adjudication`,jevStatusOn:`Jev adjudication active`,jevStatusOff:`Jev adjudication inactive (pure rule-based dispositions)`,jevApiKey:`API key`,jevApiKeyHint:`Leave empty to keep the stored key; click "Clear stored key" to remove it (falls back to cordis.yml).`,jevApiKeyUnset:`not configured`,jevClearKey:`Clear stored key`,jevKeyCleared:`Panel key cleared; falling back to deployment config`,jevBaseUrl:`Endpoint`,jevModel:`Adjudication model`,jevTimeoutMs:`Timeout (ms, 1000-60000)`,jevThresholdsTitle:`Adjudication thresholds (advanced cordis.yml config, read-only here)`,jevThresholdLine:`same memory ≥{merge} · new memory ≤{accept} · contradiction ≥{contradict}`,jevSave:`Save`,jevSaved:`Saved; config takes effect immediately`,jevLoadFailed:`Failed to load`,jevTest:`Test connection`,jevTestOk:`Connection OK: {ms} ms, ping probability {p}`,jevTestFail:`Connection failed: {error}`,jevObsTitle:`Recent adjudications (this process, up to 50, cleared on restart)`,jevObsEmpty:`No records yet; they appear when Jev adjudicates a write after being enabled`,jevObsLoadFailed:`Failed to load adjudication records`,jevObsSiteBand:`band`,jevObsSiteContradiction:`contradiction`,jevObsVerdictMerge:`merge`,jevObsVerdictAccept:`accept`,jevObsVerdictDefer:`defer`,jevObsVerdictConfirm:`confirm`,jevObsVerdictReject:`reject`,jevObsVerdictFallback:`fallback`,jevObsNoAnswer:`no answer`,jevObsErrorLine:`error: {error}`};function d(e,t){let n=c[t];return n===void 0?t:e(n)}let f={fact:`#5b8def`,preference:`#f0a85c`,decision:`#9b6bd9`,episode:`#3cb489`,skill:`#e26b86`},p={related:{color:`rgba(120, 130, 150, 0.6)`,dash:void 0,width:1},refines:{color:`rgba(120, 130, 150, 0.6)`,dash:void 0,width:1},supports:{color:`rgba(120, 130, 150, 0.6)`,dash:void 0,width:1},supersedes:{color:`rgba(91, 141, 239, 0.85)`,dash:void 0,width:1.8},contradicts:{color:`rgba(226, 107, 134, 0.9)`,dash:`4 4`,width:1.4}};function m(e){return Math.max(4,Math.min(14,4+10*e.importance*e.confidence))}function h(e,t,n,r,i){let a=.003;for(let t=0;t<e.length;t+=1){let n=e[t];for(let r=t+1;r<e.length;r+=1){let t=e[r],a=n.x-t.x,o=n.y-t.y,s=Math.sqrt(a*a+o*o)+.01,c=4800*i/(s*s),l=a/s*c,u=o/s*c;n.vx+=l,n.vy+=u,t.vx-=l,t.vy-=u}}let o=new Map(e.map(e=>[e.id,e]));for(let e of t){let t=o.get(e.from),n=o.get(e.to);if(t===void 0||n===void 0)continue;let r=n.x-t.x,a=n.y-t.y,s=Math.sqrt(r*r+a*a)+.01,c=(s-64)*.04*i,l=r/s*c,u=a/s*c;t.vx+=l,t.vy+=u,n.vx-=l,n.vy-=u}let s=[...new Set(e.map(e=>e.kind))],c=n/Math.max(s.length,1);for(let t of e){if(t.fixed)continue;t.vx+=(n/2-t.x)*a*i,t.vy+=(r/2-t.y)*a*i;let e=s.indexOf(t.kind);if(e>=0){let n=c*(e+.5);t.vx+=(n-t.x)*.005*i}}let l=.82;for(let t of e){if(t.fixed){t.vx=0,t.vy=0;continue}t.vx*=l,t.vy*=l,t.x=Math.max(20,Math.min(n-20,t.x+t.vx)),t.y=Math.max(20,Math.min(r-20,t.y+t.vy))}}function g(e){let{scope:t,nodes:n,edges:a,onSelect:s,selectedId:c,t:l}=e,u=(0,r.useMemo)(()=>{let e=new Map;for(let t of n)e.set(t.id,new Set);for(let t of a)e.has(t.from)||e.set(t.from,new Set),e.has(t.to)||e.set(t.to,new Set),e.get(t.from).add(t.to),e.get(t.to).add(t.from);return e},[n,a]),g=(0,r.useMemo)(()=>{let e=[...new Set(n.map(e=>e.kind))],t=560/Math.max(e.length,1);return n.map((n,r)=>({...n,x:e.indexOf(n.kind)>=0?t*(e.indexOf(n.kind)+.5):280,y:30+r*47%260,vx:0,vy:0,r:m(n),fixed:!1}))},[n,560,320]),_=(0,r.useRef)(g.map(e=>({...e}))),[,v]=(0,r.useState)(0),y=(0,r.useRef)(null),b=(0,r.useRef)(0);(0,r.useEffect)(()=>{_.current=g.map(e=>({...e})),b.current=0,v(e=>e+1)},[g]),(0,r.useEffect)(()=>{let e=()=>{let t=_.current;b.current+=1;let n=Math.max(.1,1-b.current/280*.9);h(t,a,560,320,n),_.current=t.map(e=>({...e})),v(e=>e+1),b.current<280&&(y.current=requestAnimationFrame(e))};return y.current=requestAnimationFrame(e),()=>{y.current!==null&&cancelAnimationFrame(y.current)}},[g,a]);let x=_.current,S=(0,r.useMemo)(()=>new Map(x.map(e=>[e.id,e])),[x]),C=(0,r.useMemo)(()=>[...new Set(n.map(e=>e.kind))],[n]),[w,T]=(0,r.useState)(null),E=(0,r.useMemo)(()=>w===null?null:u.get(w)??new Set,[w,u]),D=e=>w!==null&&e!==w&&!(E?.has(e)??!1),O=e=>w===null?!1:e.from===w||e.to===w,k=(0,r.useRef)(null),A=(0,r.useRef)(null),j=(e,t)=>{let n=k.current;if(n===null)return null;let r=n.getBoundingClientRect(),i=560/r.width,a=320/r.height;return{x:(e-r.left)*i,y:(t-r.top)*a}},M=(e,t)=>{e.preventDefault(),A.current=t;let n=_.current.find(e=>e.id===t);n!==void 0&&(n.fixed=!0)};return(0,r.useEffect)(()=>{let e=e=>{let t=A.current;if(t===null)return;let n=j(e.clientX,e.clientY);if(n===null)return;let r=_.current.find(e=>e.id===t);r!==void 0&&(r.x=Math.max(20,Math.min(540,n.x)),r.y=Math.max(20,Math.min(300,n.y)),r.vx=0,r.vy=0,v(e=>e+1))},t=()=>{let e=A.current;if(e===null)return;let t=_.current.find(t=>t.id===e);t!==void 0&&(t.fixed=!1),A.current=null};return window.addEventListener(`mousemove`,e),window.addEventListener(`mouseup`,t),()=>{window.removeEventListener(`mousemove`,e),window.removeEventListener(`mouseup`,t)}},[]),n.length===0?(0,i.jsx)(`div`,{className:o.empty,children:l(`corridorEmpty`)}):(0,i.jsxs)(`div`,{className:o.mapWrap,children:[(0,i.jsxs)(`svg`,{ref:k,viewBox:`0 0 560 320`,className:o.map,preserveAspectRatio:`xMidYMid meet`,role:`img`,"aria-label":l(`corridorAria`),children:[C.map((e,t)=>{let n=560/Math.max(C.length,1);return(0,i.jsx)(`rect`,{x:n*t,y:0,width:n,height:320,fill:t%2==0?`rgba(127,127,127,0.04)`:`transparent`},e)}),C.map((e,t)=>{let n=560/Math.max(C.length,1);return(0,i.jsx)(`text`,{x:n*(t+.5),y:14,textAnchor:`middle`,fill:`rgba(127,127,127,0.7)`,fontSize:`10`,fontFamily:`ui-sans-serif, system-ui`,children:d(l,e)},`${e}-label`)}),a.map((e,t)=>{let n=S.get(e.from),r=S.get(e.to);if(n===void 0||r===void 0)return null;let a=p[e.type]??p.related,s=O(e),c=w!==null&&!s;if(s){let t=(n.x+r.x)/2,o=(n.y+r.y)/2,s=r.x-n.x,c=r.y-n.y,l=Math.sqrt(s*s+c*c)||1,u=-c/l*6,d=s/l*6;return(0,i.jsx)(`path`,{d:`M ${String(n.x)} ${String(n.y)} Q ${String(t+u)} ${String(o+d)} ${String(r.x)} ${String(r.y)}`,fill:`none`,stroke:a.color,strokeWidth:a.width+1.2,strokeDasharray:a.dash,style:{transition:`stroke-width 200ms ease, d 240ms ease`},children:(0,i.jsx)(`title`,{children:`${n.title} --${e.type}--> ${r.title}`})},e.id)}return(0,i.jsx)(`line`,{x1:n.x,y1:n.y,x2:r.x,y2:r.y,stroke:a.color,strokeWidth:a.width,strokeDasharray:a.dash,opacity:c?.1:1,className:o.edgeFade,style:{transition:`opacity 200ms ease, stroke-width 200ms ease`,animationDelay:`${String(Math.min(t,24)*24)}ms`},children:(0,i.jsx)(`title`,{children:`${n.title} --${e.type}--> ${r.title}`})},e.id)}),x.map((e,t)=>{let n=f[e.kind]??`#7d8590`,r=c===e.id,a=w===e.id,l=D(e.id);return(0,i.jsxs)(`g`,{className:o.node,transform:`translate(${String(e.x)} ${String(e.y)})`,style:{cursor:A.current===e.id?`grabbing`:`grab`,opacity:l?.15:1,transition:`opacity 200ms ease`,animationDelay:`${String(Math.min(t,24)*24)}ms`},onMouseEnter:()=>{T(e.id)},onMouseLeave:()=>{T(t=>t===e.id?null:t)},onMouseDown:t=>M(t,e.id),onClick:()=>s?.(e.id),children:[(a||r)&&(0,i.jsx)(`circle`,{r:String(e.r+6),fill:n,fillOpacity:.18}),(0,i.jsx)(`circle`,{r:String(e.r),fill:n,fillOpacity:e.status===`active`?.88:.42,stroke:r?`var(--dsw-alias-brand-primary)`:a?n:`rgba(255,255,255,0.9)`,strokeWidth:r?2:a?1.5:1,style:{transition:`stroke 160ms ease, stroke-width 160ms ease`},children:(0,i.jsx)(`title`,{children:`${e.title}(${e.kind}/${e.status})`})}),r&&(0,i.jsx)(`circle`,{r:String(e.r+4),fill:`none`,stroke:n,strokeOpacity:.4,strokeWidth:1})]},e.id)}),w!==null&&(()=>{let e=S.get(w);if(e===void 0)return null;let t=Math.min(380,Math.max(8,e.x+14)),n=Math.min(260,Math.max(28,e.y-16)),r=(e.content??e.title).slice(0,120);return(0,i.jsxs)(`g`,{className:o.tooltip,transform:`translate(${String(t)} ${String(n)})`,children:[(0,i.jsx)(`rect`,{x:0,y:0,width:176,height:48,rx:6,ry:6,fill:`var(--dsw-alias-bg-base)`,stroke:`var(--dsw-alias-border-l2)`,strokeWidth:1,opacity:.96}),(0,i.jsx)(`text`,{x:8,y:16,fill:`var(--dsw-alias-label-primary)`,fontSize:`11`,fontWeight:600,fontFamily:`ui-sans-serif, system-ui`,children:d(l,e.kind)}),(0,i.jsx)(`text`,{x:8,y:32,fill:`var(--dsw-alias-label-secondary)`,fontSize:`10`,fontFamily:`ui-sans-serif, system-ui`,children:`${r}${(e.content??e.title).length>120?`…`:``}`})]})})()]},t),(0,i.jsxs)(`div`,{className:o.legend,children:[C.map(e=>(0,i.jsxs)(`span`,{className:o.legendItem,children:[(0,i.jsx)(`span`,{className:o.legendDot,style:{background:f[e]??`#7d8590`}}),d(l,e)]},e)),(0,i.jsx)(`span`,{className:o.legendItem,children:l(`corridorSummary`,{nodes:n.length,edges:a.length})})]}),(0,i.jsx)(`div`,{className:o.legend,style:{marginTop:2},children:Object.entries(p).map(([e,t])=>(0,i.jsxs)(`span`,{className:o.legendItem,children:[(0,i.jsx)(`svg`,{width:20,height:6,"aria-hidden":`true`,children:(0,i.jsx)(`line`,{x1:0,y1:3,x2:20,y2:3,stroke:t.color,strokeWidth:t.width,strokeDasharray:t.dash})}),(0,i.jsx)(`span`,{children:l(e===`supersedes`?`edgeSupersedes`:e===`contradicts`?`edgeContradicts`:`edgeOther`)})]},e))})]})}let _={info:3e3,success:3e3,warning:5e3,error:5e3},v=0;function y({items:e,onDismiss:t}){return(0,i.jsx)(`div`,{className:o.toastViewport,role:`region`,"aria-live":`polite`,"aria-label":`notifications`,children:e.map(e=>{let n=e.kind===`success`?o.toastSuccess:e.kind===`error`?o.toastError:e.kind===`warning`?o.toastWarning:o.toastInfo;return(0,i.jsxs)(`div`,{className:`${o.toast} ${n}`,role:e.kind===`error`||e.kind===`warning`?`alert`:`status`,children:[(0,i.jsx)(`span`,{className:o.toastBody,children:e.message}),(0,i.jsx)(`button`,{type:`button`,className:o.toastDismiss,"aria-label":`dismiss`,onClick:()=>{t(e.id)},children:`×`})]},e.id)})})}function b(){let[e,t]=(0,r.useState)([]),n=(0,r.useRef)(new Map),a=(0,r.useCallback)(e=>{t(t=>t.filter(t=>t.id!==e));let r=n.current.get(e);r!==void 0&&(clearTimeout(r),n.current.delete(e))},[]),o=(0,r.useCallback)((e,r,i)=>{v+=1;let o=v,s=i??_[e],c={id:o,kind:e,message:r,duration:s};t(e=>[...e,c]);let l=setTimeout(()=>{a(o)},s);n.current.set(o,l)},[a]);return(0,r.useEffect)(()=>()=>{for(let e of n.current.values())clearTimeout(e);n.current.clear()},[]),{toasts:e,push:o,dismiss:a,viewport:(0,i.jsx)(y,{items:e,onDismiss:a})}}let x=`dsh-engram.ui`;function S(e){try{return window.localStorage.getItem(e)??void 0}catch{return}}function C(e,t){try{window.localStorage.setItem(e,t)}catch{}}function w(e,t){return e!==void 0&&t.includes(e)}function T(e,t,n){let i=`${x}.${e}`,[a,o]=(0,r.useState)(()=>{let e=S(i);return w(e,n)?e:t});return(0,r.useEffect)(()=>{C(i,a)},[i,a]),[a,(0,r.useCallback)(e=>{o(e)},[])]}function E(e,t){let n=`${x}.${e}`,[i,a]=(0,r.useState)(()=>S(n)??t);return(0,r.useEffect)(()=>{C(n,i)},[n,i]),[i,(0,r.useCallback)(e=>{a(e)},[])]}let D=[`fact`,`preference`,`decision`,`episode`,`skill`],O={active:`statusActive`,archived:`statusArchived`,forgotten:`statusForgotten`},k={user:`scopeUser`,project:`scopeProject`,shared:`scopeShared`},A={fact:`roomFact`,preference:`roomPreference`,decision:`roomDecision`,episode:`roomEpisode`,skill:`roomSkill`},j={write:`opWrite`,"write-merge":`opWriteMerge`,update:`opUpdate`,forget:`opForget`,restore:`opRestore`,decay:`opDecay`,superseded:`opSuperseded`,"ingest-request":`opIngestRequest`,"ingest-done":`opIngestDone`,"outcome-report":`opOutcomeReport`,assess:`opAssess`,consolidation:`opConsolidation`,"review-answer":`opReviewAnswer`,"slot-assign":`opSlotAssign`,"slot-backfill":`opSlotBackfill`,"room-open":`opRoomOpen`,"search-rewrite-request":`opSearchRewrite`,"compress-request":`opCompressRequest`,"distill-request":`opDistillRequest`,"profile-edit":`opProfileEdit`},M={supersededBy:`relSupersededBy`,supersedes:`relSupersedes`,contradicts:`relContradicts`,related:`relRelated`},N={kind:`labelKind`,scope:`labelScope`,status:`labelStatus`};function P(e,t){let n=c[t];return n===void 0?t:e(n)}function ee(e){return`${o.pill} ${o[A[e]??`kind`]??``}`}function F(e,t){let n=j[t];return n===void 0?t:e(n)}function te(e,t,n){if(n===null)return``;if(t===`profile-edit`){try{let t=JSON.parse(n),r=Number(t.toVersion),i=Number(t.chars);if(t.action===`edit`&&t.fromVersion===null)return` `+e(`profileOpCreate`,{to:r,chars:i});let a=Number(t.fromVersion);if(t.action===`edit`)return` `+e(`profileOpEdit`,{from:a,to:r,chars:i});let o=Number(t.restoredFrom);if(t.action===`rollback`&&Number.isInteger(a)&&Number.isInteger(r)&&Number.isInteger(o))return` `+e(`profileOpRollback`,{from:a,to:r,restored:o,chars:i})}catch{}return` ${n}`}if(t!==`write`&&t!==`update`&&t!==`superseded`)return` ${n}`;try{let t=JSON.parse(n),r=Object.entries(t);return r.length===0?` ${n}`:` `+r.map(([t,n])=>{let r=N[t];return r===void 0?`${t}=${String(n)}`:t===`kind`&&typeof n==`string`?`${e(r)}=${P(e,n)}`:t===`scope`&&(n===`user`||n===`project`)?`${e(r)}=${e(k[n])}`:`${e(r)}=${String(n)}`}).join(` · `)}catch{return` ${n}`}}function ne(e,t){if(t.sourceSessionId===null)return e(`sourceExplicit`);let n=`${t.sourceSessionId.slice(0,16)}…`;return e(`sourceSession`,{id:t.sourceRound===null?n:`${n} ${e(`round`,{n:t.sourceRound})}`})}let re=null,ie=null;function I(e,t){if(/(?:^|[?&])scope=project(?:&|$)/.test(e))return!0;let n=t?.body;if(typeof n!=`string`||n===``)return!1;try{let e=JSON.parse(n);return typeof e==`object`&&!!e&&e.scope===`project`}catch{return!1}}function L(e,t){try{let n=JSON.parse(e);return typeof n!=`object`||!n||Array.isArray(n)?void 0:JSON.stringify({...n,project:t})}catch{return}}function R(e,t){return`${e}${e.includes(`?`)?`&`:`?`}project=${encodeURIComponent(t)}`}async function z(e,t,n=!1){let r=re,i=e,a=t,o=r!==null&&(n||I(e,t));if(o){let n=t?.body,o=typeof n==`string`&&n!==``?L(n,r):void 0;o!==void 0&&t!==void 0?a={...t,body:o}:i=R(e,r)}let s=await fetch(`/api/engram/${i}`,a),c=await s.json();if(!s.ok)throw o&&s.status===404&&c.error===`unknown project`&&ie?.(),Error(c.error??`HTTP ${String(s.status)}`);return c}let ae=[];function B(){}function V(e,t){if(e===void 0)return B;let n=e.subscribe(t);return typeof n==`function`?n:B}function oe(e,t){let n=(0,r.useCallback)(t=>V(e?.list,t),[e]),i=(0,r.useCallback)(e=>V(t?.list,e),[t]),a=(0,r.useSyncExternalStore)(i,()=>t?.list.getSnapshot().current??null),o=(0,r.useSyncExternalStore)(n,()=>e?.list.getSnapshot().items??ae),s=e!==void 0&&t!==void 0;return!s||a===null?{workspace:null,available:s}:{workspace:o.find(e=>e.sessionIds.includes(a))??null,available:s}}function H(e){return e.replace(/\//g,`\\`).replace(/\\+$/,``).toLowerCase()}function se(e){let t=e.replace(/[/\\]+$/,``),n=Math.max(t.lastIndexOf(`\\`),t.lastIndexOf(`/`));return n<0?t:t.slice(n+1)}function ce(e){let t=/^project-([0-9a-f]+)\.db$/i.exec(e);return t===null?e.slice(0,14):`project-${t[1].slice(0,8)}…`}function U(e){if(typeof e.path!=`string`||e.path===``)return{name:ce(e.dbName),unregistered:!0};let t=e.title?.trim()??``;return t===``?{name:se(e.path),unregistered:e.kind!==`workspace`}:{name:t,unregistered:e.kind!==`workspace`}}function le(e,t){let n=U(t),r=[n.unregistered?`${n.name} · ${e(`projectUnregistered`)}`:n.name];return r.push(t.memories===null?`—`:e(`projectMemories`,{n:t.memories})),r.join(` · `)}function ue(e,t){if(e===null||t===null)return;let n=e.items.find(e=>e.workspaceId===t.workspaceId);if(n!==void 0)return n;let r=H(t.path);return e.items.find(e=>typeof e.path==`string`&&H(e.path)===r)}function de(e,t){if(t.mode!==`follow`){let n=t.items.find(e=>e.dbName===t.mode);if(n===void 0)return{label:e(`projectPinned`,{name:`${ce(t.mode)} · ${e(`projectUnregistered`)}`}),title:t.mode,tone:`pinned`};let r=U(n);return{label:e(`projectPinned`,{name:r.unregistered?`${r.name} · ${e(`projectUnregistered`)}`:r.name}),title:n.path??n.dbName,tone:`pinned`}}if(!t.available)return{label:e(`projectNoWorkspace`),title:e(`projectFollowHint`),tone:`muted`};if(t.followed===void 0)return{label:e(`projectPinned`,{name:e(`projectProcessDefault`)}),title:t.processDefaultPath??e(`projectFollowHint`),tone:`pinned`};let n=U(t.followed);return{label:e(`projectFollowNamed`,{name:n.unregistered?`${n.name} · ${e(`projectUnregistered`)}`:n.name}),title:t.followed.path??e(`projectFollowHint`),tone:`follow`}}function W(e){return new Date(e).toLocaleString(navigator.language||`zh-CN`,{hour12:!1})}function fe(e,t){let n=Math.max(0,Date.now()-t),r=Math.floor(n/6e4);if(r<1)return e(`timeJustNow`);if(r<60)return e(`timeMinutesAgo`,{n:r});let i=Math.floor(r/60);return i<48?e(`timeHoursAgo`,{n:i}):e(`timeDaysAgo`,{n:Math.floor(i/24)})}function G({label:e,value:t,tail:n,secondary:r}){return(0,i.jsxs)(`div`,{className:o.metric,children:[(0,i.jsx)(`span`,{className:o.metricLabel,children:e}),(0,i.jsx)(`b`,{className:r===!0?`${o.metricValue} ${o.metricValueSecondary}`:o.metricValue,children:t}),n!==void 0&&(0,i.jsx)(`span`,{className:o.metricTail,children:n})]})}function K({score:e}){let t=2*Math.PI*24,n=Math.min(100,Math.max(0,e))/100*t,r=e>=80?`var(--dsw-alias-state-success-primary)`:e>=50?`var(--dsw-alias-state-warn-primary)`:`var(--dsw-alias-state-error-primary)`;return(0,i.jsxs)(`div`,{className:o.ring,role:`meter`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":e,children:[(0,i.jsxs)(`svg`,{width:`56`,height:`56`,viewBox:`0 0 56 56`,"aria-hidden":`true`,children:[(0,i.jsx)(`circle`,{cx:`28`,cy:`28`,r:24,fill:`none`,stroke:`var(--dsw-alias-border-l2)`,strokeWidth:`4`}),(0,i.jsx)(`circle`,{cx:`28`,cy:`28`,r:24,fill:`none`,stroke:r,strokeWidth:`4`,strokeLinecap:`round`,strokeDasharray:`${n.toFixed(1)} ${t.toFixed(1)}`})]}),(0,i.jsx)(`b`,{children:e})]})}function pe({value:e,conf:t}){return(0,i.jsx)(`span`,{className:t===!0?`${o.meter} ${o.conf}`:o.meter,children:(0,i.jsx)(`i`,{style:{width:`${String(Math.round(Math.min(1,Math.max(0,e))*100))}%`}})})}function me({ids:e}){return(0,i.jsx)(`div`,{className:o.relChips,children:e.map(e=>(0,i.jsx)(`span`,{className:o.relChip,title:e,children:e.slice(0,18)},e))})}function he({t:e,recordId:t,scope:n,project:a}){let[s,c]=(0,r.useState)(null),[l,u]=(0,r.useState)(null);if((0,r.useEffect)(()=>{let e=!1;return z(`review?scope=${n}&id=${encodeURIComponent(t)}`).then(t=>{e||c(t)}).catch(t=>{e||u(t.message)}),()=>{e=!0}},[t,n,a,e]),l!==null)return(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loadFailed`,{msg:l})});if(s===null)return(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loading`)});let{record:d}=s,f=[`supersededBy`,`supersedes`,`contradicts`,`related`].map(e=>({key:e,label:M[e],ids:s[e]??[]})).filter(e=>e.ids.length>0),p=s.operations??[];return(0,i.jsxs)(`div`,{className:o.reviewGrid,children:[(0,i.jsxs)(`div`,{children:[(0,i.jsxs)(`dl`,{className:o.attrGrid,children:[(0,i.jsx)(`dt`,{children:e(`labelContent`)}),(0,i.jsx)(`dd`,{children:d.content}),(0,i.jsx)(`dt`,{children:e(`labelKind`)}),(0,i.jsx)(`dd`,{children:(0,i.jsx)(`span`,{className:ee(d.kind),children:P(e,d.kind)})}),(0,i.jsx)(`dt`,{children:e(`labelStatus`)}),(0,i.jsx)(`dd`,{children:(0,i.jsx)(`span`,{className:`${o.pill} ${o[`status${d.status.charAt(0).toUpperCase()}${d.status.slice(1)}`]??``}`,children:e(O[d.status])})}),(0,i.jsx)(`dt`,{children:e(`importance`)}),(0,i.jsxs)(`dd`,{children:[d.importance.toFixed(2),(0,i.jsx)(pe,{value:d.importance})]}),(0,i.jsx)(`dt`,{children:e(`confidence`)}),(0,i.jsxs)(`dd`,{children:[d.confidence.toFixed(2),(0,i.jsx)(pe,{value:d.confidence,conf:!0})]}),(0,i.jsx)(`dt`,{children:e(`detailSource`)}),(0,i.jsx)(`dd`,{children:ne(e,d)}),(0,i.jsx)(`dt`,{children:e(`labelCreated`)}),(0,i.jsx)(`dd`,{children:W(d.createdAt)})]}),f.map(({key:t,label:n,ids:r})=>(0,i.jsxs)(`div`,{className:o.relBlock,children:[(0,i.jsx)(`h5`,{children:n===void 0?t:e(n)}),(0,i.jsx)(me,{ids:r})]},t))]}),(0,i.jsxs)(`div`,{children:[(s.revisions??[]).length>0&&(0,i.jsxs)(`div`,{className:o.relBlock,children:[(0,i.jsx)(`h5`,{children:e(`detailRevisions`)}),(0,i.jsx)(`ul`,{className:o.timeline,children:s.revisions.map((t,n)=>(0,i.jsxs)(`li`,{children:[(0,i.jsx)(`time`,{children:W(t.supersededAt)}),(0,i.jsx)(`b`,{children:P(e,t.kind)}),` `,t.content]},n))})]}),p.length>0&&(0,i.jsxs)(`div`,{className:o.relBlock,children:[(0,i.jsx)(`h5`,{children:e(`detailOperations`)}),(0,i.jsx)(`ul`,{className:o.timeline,children:p.map((t,n)=>(0,i.jsxs)(`li`,{children:[(0,i.jsx)(`time`,{children:W(t.at)}),(0,i.jsx)(`b`,{children:F(e,t.op)}),te(e,t.op,t.detail)]},n))})]})]})]})}function ge({t:e,record:t,onClose:n,onSaved:a,toast:s}){let[c,l]=(0,r.useState)(t.content),[u,d]=(0,r.useState)(t.kind),[f,p]=(0,r.useState)(t.importance);return(0,i.jsxs)(`div`,{className:o.editForm,children:[(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`label`,{className:o.fieldLabel,children:e(`labelContent`)}),(0,i.jsx)(`textarea`,{className:o.input,rows:3,value:c,onChange:e=>l(e.target.value)})]}),(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`label`,{className:o.fieldLabel,children:e(`labelKind`)}),(0,i.jsx)(`select`,{className:o.input,value:u,onChange:e=>d(e.target.value),children:D.map(t=>(0,i.jsx)(`option`,{value:t,children:P(e,t)},t))})]}),(0,i.jsx)(`div`,{className:o.fieldRow,children:(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`label`,{className:o.fieldLabel,children:`${e(`importance`)} ${f.toFixed(2)}`}),(0,i.jsx)(`input`,{type:`range`,min:0,max:1,step:.05,value:f,onChange:e=>p(Number(e.target.value))})]})}),(0,i.jsxs)(`div`,{className:o.modalFoot,children:[(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:n,children:e(`cancel`)}),(0,i.jsx)(`button`,{type:`button`,className:`${o.button} ${o.primary}`,onClick:()=>{z(`update`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:t.id,scope:t.scope,content:c,kind:u,importance:f})}).then(a).catch(e=>{s.push(`error`,e.message)})},children:e(`saveWithHint`)})]})]})}let q={fts:`viaFts`,vec:`viaVec`,both:`viaBoth`};function _e({t:e,scope:t}){let[n,a]=(0,r.useState)(``),[s,c]=(0,r.useState)(t),[l,u]=(0,r.useState)(null),[d,f]=(0,r.useState)(!1),[p,m]=(0,r.useState)(null);(0,r.useEffect)(()=>{c(t)},[t]);let h=()=>{n.trim()===``||d||(f(!0),z(`search-test?q=${encodeURIComponent(n.trim())}&scope=${s}`,void 0,!0).then(e=>{u(e),m(null)}).catch(e=>m(e.message)).finally(()=>f(!1)))},g=l?.hits??[];return(0,i.jsxs)(`div`,{children:[(0,i.jsxs)(`div`,{className:o.benchBar,children:[(0,i.jsx)(`input`,{className:`${o.input} ${o.search}`,placeholder:e(`benchPlaceholder`),value:n,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&h()}}),(0,i.jsxs)(`select`,{className:o.input,value:s,onChange:e=>c(e.target.value),children:[(0,i.jsx)(`option`,{value:`all`,children:e(`benchScopeAll`)}),(0,i.jsx)(`option`,{value:`user`,children:e(`scopeUser`)}),(0,i.jsx)(`option`,{value:`project`,children:e(`scopeProject`)}),(0,i.jsx)(`option`,{value:`shared`,children:e(`scopeShared`)})]}),(0,i.jsx)(`button`,{type:`button`,className:`${o.button} ${o.primary}`,disabled:d||n.trim()===``,onClick:h,children:e(`benchRun`)})]}),p!==null&&(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loadFailed`,{msg:p})}),l!==null&&p===null&&(0,i.jsxs)(`div`,{className:o.benchMeta,children:[(0,i.jsx)(`span`,{children:e(`benchHits`,{n:g.length})}),l.degraded&&(0,i.jsx)(`span`,{className:o.degradedNote,children:e(`benchDegraded`)})]}),(0,i.jsx)(`div`,{className:o.benchList,children:g.map(t=>(0,i.jsxs)(`div`,{className:o.benchRow,children:[(0,i.jsxs)(`div`,{className:o.benchHead,children:[(0,i.jsx)(`span`,{className:o.viaChip,children:e(q[t.via])}),t.viaEdge!==void 0&&(0,i.jsxs)(`span`,{className:o.viaChip,title:`${t.viaEdge.type} ${t.viaEdge.from}`,children:[e(`viaEdgeLabel`),` · `,t.viaEdge.type]}),(0,i.jsx)(`span`,{className:ee(t.kind),children:P(e,t.kind)}),(0,i.jsx)(`span`,{className:o.benchScore,children:t.score.toFixed(4)})]}),(0,i.jsx)(`div`,{className:o.benchContent,children:t.content}),(0,i.jsx)(`span`,{className:o.benchId,title:t.id,children:t.id})]},t.id))}),l!==null&&g.length===0&&p===null&&(0,i.jsx)(`div`,{className:o.benchEmpty,children:e(`benchEmpty`)})]})}function ve(e,t){if(t===null)return``;try{let n=JSON.parse(t);if(typeof n.round==`number`&&typeof n.userText==`string`){let t=typeof n.mode==`string`?` · ${n.mode}`:``;return`${e(`round`,{n:n.round})}${t} · ${n.userText.slice(0,48)}`}if(typeof n.query==`string`&&Array.isArray(n.queries))return`${e(`benchRewrite`,{n:n.queries.length})} · ${n.query.slice(0,36)}`;if(typeof n.count==`number`&&Object.keys(n).length===1)return e(`benchCompress`,{n:n.count});if(typeof n.batchId==`string`&&typeof n.sufficient==`boolean`){let t=Array.isArray(n.refs)?n.refs.length:0;return`${n.batchId} · ${e(n.sufficient?`assessAdequate`:`assessInadequate`)} · ${e(`assessRefs`,{n:t})}`}if(typeof n.archived==`number`&&typeof n.merged==`number`&&typeof n.skipped==`number`)return`${n.scope===`project`?e(`scopeProject`):e(`scopeUser`)} · ${e(`consolidateArchived`,{n:n.archived})} · ${e(`consolidateMerged`,{n:n.merged})} · ${e(`consolidateSkipped`,{n:n.skipped})}`;if(typeof n.archived==`number`&&n.merged===void 0)return e(`decayArchived`,{n:n.archived});if(typeof n.assigned==`number`)return e(`slotBackfilled`,{n:n.assigned});if(typeof n.room==`string`)return e(`roomOpened`,{room:n.room});if(typeof n.grade==`number`&&typeof n.nextIntervalDays==`number`)return e(`reviewAnswered`,{grade:n.grade,days:n.nextIntervalDays})}catch{}return t.length>56?`${t.slice(0,56)}…`:t}let ye={all:null,write:[`write`,`update`,`forget`,`restore`,`decay`,`superseded`,`outcome-report`],ingest:[`ingest-request`,`ingest-done`],retrieve:[`search-rewrite-request`,`compress-request`,`assess`],organize:[`distill-request`,`consolidation`,`slot-assign`,`slot-backfill`,`room-open`,`review-answer`,`profile-edit`]},be={all:`logFilterAll`,write:`logFilterWrite`,ingest:`logFilterIngest`,retrieve:`logFilterRetrieve`,organize:`logFilterOrganize`},J={write:`logDotWrite`,ingest:`logDotIngest`,retrieve:`logDotRetrieve`,organize:`logDotOrganize`};function Y(e){for(let t of[`write`,`ingest`,`retrieve`,`organize`])if(ye[t]?.includes(e)===!0)return t;return`all`}function xe(e){let t=Y(e),n=o.logDot??``;return t===`all`?n:`${n} ${o[J[t]]??``}`}function Se(e,t){let n=e.split(`
|
|
2
2
|
`),r=t.split(`
|
|
3
3
|
`),i=n.length,a=r.length,o=Array.from({length:i+1},()=>Array(a+1).fill(0));for(let e=i-1;e>=0;e--)for(let t=a-1;t>=0;t--)o[e][t]=n[e]===r[t]?o[e+1][t+1]+1:Math.max(o[e+1][t],o[e][t+1]);let s=[],c=0,l=0;for(;c<i&&l<a;)n[c]===r[l]?(s.push({kind:`same`,text:n[c]}),c+=1,l+=1):o[c+1][l]>=o[c][l+1]?(s.push({kind:`del`,text:n[c]}),c+=1):(s.push({kind:`add`,text:r[l]}),l+=1);for(;c<i;)s.push({kind:`del`,text:n[c]}),c+=1;for(;l<a;)s.push({kind:`add`,text:r[l]}),l+=1;return s}function Ce({t:e,scope:t,project:n}){let[a,s]=(0,r.useState)(null),[c,l]=(0,r.useState)(!1),[u,d]=(0,r.useState)(null),[f,p]=(0,r.useState)(null);if((0,r.useEffect)(()=>{let e=!1;return z(`profile-block?scope=${t}`,void 0,!0).then(t=>{e||(s(t),l(!1),d(t.versions.length>1?t.versions[1].version:null),p(t.versions.length>0?t.versions[0].version:null))}).catch(()=>{e||l(!0)}),()=>{e=!0}},[t,n]),c)return(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`profileLoadFailed`)});if(a===null)return(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loading`)});if(a.block===null)return(0,i.jsxs)(`div`,{className:o.expandLoading,children:[(0,i.jsx)(`p`,{children:e(`profileEmpty`)}),(0,i.jsx)(`p`,{className:o.sectionHint,children:e(`profileEmptyHint`)})]});let m=a.versions,h=new Map(m.map(e=>[e.version,e])),g=u===null?void 0:h.get(u),_=f===null?void 0:h.get(f),v=g!==void 0&&_!==void 0?Se(g.content,_.content):[],y=v.some(e=>e.kind!==`same`);return(0,i.jsxs)(`div`,{className:o.profileCard,children:[(0,i.jsx)(`h5`,{className:o.profileHeading,children:e(`profileCurrent`,{n:a.block.version})}),(0,i.jsx)(`pre`,{className:o.profileContent,children:a.block.content}),m.length>1&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`h5`,{className:o.profileHeading,children:e(`profileHistory`)}),(0,i.jsxs)(`div`,{className:o.profilePickerRow,children:[(0,i.jsxs)(`label`,{children:[(0,i.jsx)(`span`,{className:o.sectionHint,children:e(`profileDiffBase`)}),(0,i.jsx)(`select`,{className:o.profileSelect,value:u??void 0,onChange:e=>{d(Number(e.target.value))},children:m.map(t=>(0,i.jsxs)(`option`,{value:t.version,children:[`v`,t.version,` · `,t.source===`rollback`?e(`profileSourceRollback`):e(`profileSourceEdit`)]},t.version))})]}),(0,i.jsxs)(`label`,{children:[(0,i.jsx)(`span`,{className:o.sectionHint,children:e(`profileDiffTarget`)}),(0,i.jsx)(`select`,{className:o.profileSelect,value:f??void 0,onChange:e=>{p(Number(e.target.value))},children:m.map(t=>(0,i.jsxs)(`option`,{value:t.version,children:[`v`,t.version,` · `,t.source===`rollback`?e(`profileSourceRollback`):e(`profileSourceEdit`)]},t.version))})]})]}),g!==void 0&&_!==void 0&&(0,i.jsx)(`div`,{className:o.profileDiff,children:y?v.map((e,t)=>(0,i.jsxs)(`div`,{className:e.kind===`add`?o.profileDiffAdd:e.kind===`del`?o.profileDiffDel:o.profileDiffSame,children:[e.kind===`add`?`+ `:e.kind===`del`?`- `:` `,e.text]},t)):(0,i.jsx)(`div`,{className:o.sectionHint,children:e(`profileDiffNone`)})})]})]})}function we({t:e,telemetry:t,project:n}){let[a,s]=(0,r.useState)(null),[c,l]=(0,r.useState)(`all`);(0,r.useEffect)(()=>{let e=!1;return z(`activity?limit=50`,void 0,!0).then(t=>{e||s(t.operations)}).catch(()=>{e||s([])}),()=>{e=!0}},[n]);let u=ye[c],d=(a??[]).filter(e=>u===null||u.includes(e.op)),f=t?.counts;return(0,i.jsxs)(`section`,{className:o.section,children:[(0,i.jsxs)(`div`,{className:o.logToolbar,children:[(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`tabLog`)}),(0,i.jsx)(`span`,{className:o.sectionHint,children:e(`logCount`,{n:d.length})}),(0,i.jsxs)(`span`,{className:o.logCounts,children:[(0,i.jsxs)(`span`,{children:[(0,i.jsx)(`i`,{className:`${o.logDot} ${o.logDotWrite}`,"aria-hidden":`true`}),e(`teleWrites`),` `,(0,i.jsx)(`b`,{children:f?.writes??0})]}),(0,i.jsxs)(`span`,{children:[(0,i.jsx)(`i`,{className:`${o.logDot} ${o.logDotIngest}`,"aria-hidden":`true`}),e(`teleIngest`),` `,(0,i.jsx)(`b`,{children:f?.ingestDones??0})]}),(0,i.jsxs)(`span`,{children:[(0,i.jsx)(`i`,{className:`${o.logDot} ${o.logDotOrganize}`,"aria-hidden":`true`}),e(`teleConsolidate`),` `,(0,i.jsx)(`b`,{children:f?.consolidations??0})]})]}),(0,i.jsx)(`div`,{className:o.segGroup,role:`tablist`,children:[`all`,`write`,`ingest`,`retrieve`,`organize`].map(t=>(0,i.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":c===t,className:c===t?`${o.segItem} ${o.on}`:o.segItem,onClick:()=>{l(t)},children:e(be[t])},t))})]}),(0,i.jsx)(`div`,{className:o.panelCard,children:a===null?(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loading`)}):d.length===0?(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`activityEmpty`)}):(0,i.jsx)(`div`,{className:o.logList,children:d.map((t,n)=>(0,i.jsxs)(`div`,{className:o.logRow,children:[(0,i.jsx)(`i`,{className:xe(t.op),"aria-hidden":`true`}),(0,i.jsx)(`span`,{className:o.logTime,children:fe(e,t.at)}),(0,i.jsx)(`span`,{className:o.logOp,children:F(e,t.op)}),(0,i.jsx)(`span`,{className:o.logScope,children:t.scope===`user`?e(`scopeUser`):e(`scopeProject`)}),(0,i.jsx)(`span`,{className:o.logDetail,title:t.detail??``,children:ve(e,t.detail)})]},n))})})]})}function Te({t:e,scope:t,project:n,onSelect:a}){let s=[``,`fact`,`preference`,`decision`,`episode`,`skill`],[l,u]=T(`tour.focusKind`,``,s),[d,f]=(0,r.useState)(null);(0,r.useEffect)(()=>{let n=!1;return z(l===``?`tour-proposal?scope=${t}`:`tour-proposal?scope=${t}&focusKind=${l}`).then(e=>{n||f(e)}).catch(()=>{n||f({greeting:e(`tourProposalEmpty`),activeCount:0,empty:!0,suggestedStops:[]})}),()=>{n=!0}},[e,t,n,l]);let p=t=>{if(t===``)return e(`tourFocusAll`);let n=c[t];return n===void 0?t:e(n)};return d===null?(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loading`)}):(0,i.jsxs)(`div`,{className:o.tourProposal,children:[(0,i.jsx)(`div`,{className:o.chipRow,role:`tablist`,"aria-label":`focus-kind`,children:s.map(e=>(0,i.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":l===e,className:l===e?`${o.chip} ${o.chipOn}`:o.chip,onClick:()=>{u(e)},children:p(e)},e||`all`))}),d.empty?(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`tourProposalEmpty`)}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`p`,{className:o.tourGreeting,children:d.greeting}),(0,i.jsx)(`ol`,{className:o.tourStops,children:d.suggestedStops.map((t,n)=>(0,i.jsx)(`li`,{children:(0,i.jsxs)(`button`,{type:`button`,className:o.tourStop,onClick:()=>{a(t.id)},children:[(0,i.jsx)(`span`,{className:o.tourStopIndex,children:n+1}),(0,i.jsxs)(`span`,{className:o.tourStopBody,children:[(0,i.jsx)(`span`,{className:o.tourStopKind,children:P(e,t.kind)}),(0,i.jsx)(`span`,{className:o.tourStopText,children:t.content.length>60?`${t.content.slice(0,60)}…`:t.content})]})]})},t.id))}),(0,i.jsx)(`p`,{className:o.tourHint,children:e(`tourProposalHint`)})]})]})}function Ee({t:e,scope:t,project:n,onSelect:a,onAfterAction:s,toast:c}){let[l,u]=(0,r.useState)(null),[d,f]=(0,r.useState)(!1),p=(0,r.useCallback)(()=>{f(!0),z(`refurb?scope=${t}`).then(e=>{u(e)}).catch(()=>{u({count:0,suggestions:[]})}).finally(()=>{f(!1)})},[t,n]);(0,r.useEffect)(()=>{p()},[p]);let m=t=>{switch(t){case`demote`:return e(`refurbActionDemote`);case`merge`:return e(`refurbActionMerge`);case`review`:return e(`refurbActionReview`);case`split`:return e(`refurbActionSplit`)}},h=(0,r.useCallback)(n=>{if(n.action===`review`||n.action===`split`){a(n.primaryId);return}if(n.action===`demote`){if(!window.confirm(e(`refurbConfirmDemote`)))return;f(!0),z(`forget`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:n.primaryId,scope:t,reason:`翻新清单降级`,affects:`无`,stillUseful:`可经 engram_restore 复原`})}).then(()=>{p(),s(),c.push(`success`,e(`refurbDemoteDone`))}).catch(t=>{c.push(`error`,e(`refurbActionFailed`,{msg:t.message}))}).finally(()=>{f(!1)});return}if(n.action===`merge`){let r=n.candidates.length+1;if(r<2){c.push(`warning`,e(`refurbMergeEmpty`));return}if(!window.confirm(e(`refurbConfirmMerge`,{n:r})))return;f(!0);let i=[n.primaryId,...n.candidates];z(`consolidate`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({scope:t,candidates:i})}).then(()=>{p(),s(),c.push(`success`,e(`refurbMergeDone`))}).catch(t=>{c.push(`error`,e(`refurbActionFailed`,{msg:t.message}))}).finally(()=>{f(!1)})}},[p,a,s,c,e,t]);return l===null?(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loading`)}):(0,i.jsxs)(`div`,{className:o.refurb,children:[(0,i.jsxs)(`div`,{className:o.refurbHead,children:[(0,i.jsx)(`span`,{className:o.refurbCount,children:e(`refurbCount`,{n:l.count})}),(0,i.jsx)(`button`,{type:`button`,className:o.button,disabled:d,onClick:p,children:e(`refurbRun`)})]}),l.count===0?(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`refurbEmpty`)}):(0,i.jsx)(`ul`,{className:o.refurbList,children:l.suggestions.map((t,n)=>(0,i.jsxs)(`li`,{className:o.refurbItem,children:[(0,i.jsx)(`button`,{type:`button`,className:o.refurbBadge,onClick:()=>{a(t.primaryId)},children:m(t.action)}),(0,i.jsx)(`div`,{className:o.refurbReason,children:t.reason}),(0,i.jsxs)(`span`,{className:o.refurbConfidence,children:[(t.confidence*100).toFixed(0),`%`]}),(0,i.jsx)(`button`,{type:`button`,className:`${o.refurbExec} ${o.button}`,disabled:d,onClick:()=>{h(t)},children:e(`refurbExecute`)})]},`${t.action}-${t.primaryId}-${n}`))})]})}function De({t:e,scope:t,project:n,onSelect:a}){let[s,c]=(0,r.useState)(null),[l,u]=(0,r.useState)(null);return(0,r.useEffect)(()=>{let e=!1;return z(`corridor?status=active,archived&scope=${t}`).then(t=>{e||c(t),u(null)}).catch(t=>{e||u(t.message)}),()=>{e=!0}},[t,n]),l===null?s===null?(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`corridorLoad`)}):s.nodes.length===0?(0,i.jsx)(`div`,{className:o.empty,children:e(`corridorEmpty`)}):(0,i.jsx)(g,{scope:t,nodes:s.nodes,edges:s.edges,onSelect:a,t:e}):(0,i.jsxs)(`div`,{className:o.expandLoading,children:[e(`corridorFailed`),`:`,l]})}function Oe({t:e,scope:t,project:n,reloadTick:a}){let[s,c]=(0,r.useState)(``),[l,u]=(0,r.useState)(``),[d,f]=(0,r.useState)(``),[p,m]=(0,r.useState)({since:``,until:``,sessionId:``}),[h,g]=(0,r.useState)(null),[_,v]=(0,r.useState)(null),[y,b]=(0,r.useState)(null),[x,S]=(0,r.useState)(!1);(0,r.useEffect)(()=>{let e=!1,n=new URLSearchParams({scope:t});return p.since!==``&&n.set(`since`,String(new Date(`${p.since}T00:00:00`).getTime())),p.until!==``&&n.set(`until`,String(new Date(`${p.until}T23:59:59.999`).getTime())),p.sessionId!==``&&n.set(`sessionId`,p.sessionId),z(`episode-timeline?${n.toString()}`).then(t=>{e||(g(t),v(null))}).catch(t=>{e||v(t.message)}),()=>{e=!0}},[t,n,p,a]);let C=e=>{S(!0),z(`episode-timeline?scope=${t}&around=${encodeURIComponent(e)}`).then(e=>{b(e),S(!1),v(null)}).catch(e=>{v(e.message),S(!1)})},w=t=>(0,i.jsxs)(`div`,{className:o.episodeRow,title:t.id,children:[(0,i.jsx)(`time`,{className:o.episodeRowTime,children:W(t.createdAt)}),(0,i.jsx)(`span`,{className:o.episodeRowKind,children:P(e,t.kind)}),(0,i.jsx)(`span`,{className:o.episodeRowText,children:t.content}),(0,i.jsx)(`button`,{type:`button`,className:o.button,disabled:x,onClick:()=>{C(t.id)},children:e(`episodeNearby`)})]},t.id);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(`div`,{className:o.toolbarRow,children:[(0,i.jsx)(`input`,{type:`date`,className:o.input,value:s,"aria-label":e(`episodeSince`),onChange:e=>{c(e.target.value)}}),(0,i.jsx)(`span`,{className:o.episodeRangeSep,"aria-hidden":`true`,children:`–`}),(0,i.jsx)(`input`,{type:`date`,className:o.input,value:l,"aria-label":e(`episodeUntil`),onChange:e=>{u(e.target.value)}}),(0,i.jsx)(`input`,{className:`${o.input} ${o.search}`,placeholder:e(`episodeSessionId`),value:d,onChange:e=>{f(e.target.value)}}),(0,i.jsx)(`button`,{type:`button`,className:`${o.button} ${o.primary}`,onClick:()=>{m({since:s,until:l,sessionId:d.trim()}),b(null)},children:e(`episodeApply`)}),(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:()=>{c(``),u(``),f(``),m({since:``,until:``,sessionId:``}),b(null)},children:e(`episodeReset`)})]}),_!==null&&(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loadFailed`,{msg:_})}),y!==null&&(0,i.jsxs)(`section`,{className:`${o.panelCard} ${o.episodeAround}`,children:[(0,i.jsxs)(`header`,{className:o.episodeAroundHead,children:[(0,i.jsx)(`b`,{children:e(`episodeAroundTitle`)}),(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:()=>{b(null)},children:e(`episodeClose`)})]}),w(y.anchor),y.neighbors.length===0?(0,i.jsx)(`p`,{className:o.sectionHint,children:e(`episodeAroundEmpty`)}):y.neighbors.map(w)]}),h===null&&_===null&&(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loading`)}),h!==null&&h.groups.length===0&&(0,i.jsx)(`div`,{className:o.empty,children:e(`episodeNoGroups`)}),h?.groups.map(t=>(0,i.jsxs)(`section`,{className:o.panelCard,children:[(0,i.jsxs)(`header`,{className:o.episodeHead,children:[t.summary===void 0?(0,i.jsx)(`p`,{className:`${o.episodeSummary} ${o.episodeSummaryMissing}`,children:e(`episodeSummaryMissing`)}):(0,i.jsx)(`p`,{className:o.episodeSummary,children:t.summary}),(0,i.jsxs)(`span`,{className:o.episodeHeadMeta,children:[t.sessionId===null?e(`episodeNoSession`):`#${t.sessionId}`,` · `,new Date(t.startedAt).toLocaleDateString(),` ~ `,new Date(t.endedAt).toLocaleDateString(),` · `,e(`episodeEntries`,{n:t.episodes.length})]})]}),(0,i.jsx)(`div`,{children:t.episodes.map(w)})]},t.sessionId??`none`))]})}let X={person:`entityKindPerson`,project:`entityKindProject`,tool:`entityKindTool`,concept:`entityKindConcept`,other:`entityKindOther`},ke=[`person`,`project`,`tool`,`concept`,`other`];function Z(e,t){return e(X[t]??`entityKindOther`)}function Ae({t:e,scope:t,project:n,reloadTick:a}){let[s,c]=(0,r.useState)(`all`),[l,u]=(0,r.useState)(``),[d,f]=(0,r.useState)(null),[p,m]=(0,r.useState)(null),[h,g]=(0,r.useState)(null),[_,v]=(0,r.useState)(null),[y,b]=(0,r.useState)(!1);(0,r.useEffect)(()=>{let e=!1,n=new URLSearchParams({scope:t});return s!==`all`&&n.set(`kind`,s),l!==``&&n.set(`q`,l),z(`entities?${n.toString()}`).then(t=>{e||(f(t),m(null))}).catch(t=>{e||m(t.message)}),()=>{e=!0}},[t,n,s,l,a]);let x=e=>{b(!0),Promise.all([z(`entity?scope=${t}&id=${encodeURIComponent(e)}`),z(`facts?scope=${t}&entityId=${encodeURIComponent(e)}&includeInvalid=1`)]).then(([e,t])=>{g(e),v(t),b(!1),m(null)}).catch(e=>{m(e.message),b(!1)})},S=t=>(0,i.jsxs)(`div`,{className:o.episodeRow,title:t.id,children:[(0,i.jsx)(`time`,{className:o.episodeRowTime,children:W(t.createdAt)}),(0,i.jsx)(`span`,{className:o.episodeRowKind,children:P(e,t.kind)}),(0,i.jsx)(`span`,{className:o.episodeRowText,children:t.content})]},t.id),C=t=>(0,i.jsxs)(`div`,{className:o.episodeRow,title:t.id,children:[(0,i.jsx)(`time`,{className:o.episodeRowTime,children:new Date(t.validAt).toLocaleDateString()}),(0,i.jsx)(`span`,{className:o.episodeRowKind,children:t.invalidAt===null?e(`factValid`):e(`factInvalid`)}),(0,i.jsx)(`span`,{className:o.episodeRowText,children:t.content})]},t.id);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`div`,{className:o.chipRow,children:[[`all`,e(`entityKindAll`)],...ke.map(t=>[t,e(X[t]??`entityKindOther`)])].map(([e,t])=>(0,i.jsx)(`button`,{type:`button`,"aria-pressed":s===e,className:s===e?`${o.chip} ${o.chipOn}`:o.chip,onClick:()=>{c(e),g(null),v(null)},children:t},e))}),(0,i.jsxs)(`div`,{className:o.toolbarRow,children:[(0,i.jsx)(`input`,{className:`${o.input} ${o.search}`,placeholder:e(`entitySearchPlaceholder`),value:l,onChange:e=>{u(e.target.value.trim()),g(null),v(null)}}),d!==null&&(0,i.jsx)(`span`,{className:o.sectionHint,children:e(`entityCount`,{n:d.total})})]}),p!==null&&(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loadFailed`,{msg:p})}),h!==null&&(0,i.jsxs)(`section`,{className:`${o.panelCard} ${o.episodeAround}`,children:[(0,i.jsxs)(`header`,{className:o.episodeAroundHead,children:[(0,i.jsx)(`b`,{children:h.entity.name}),(0,i.jsx)(`span`,{className:o.episodeRowKind,children:Z(e,h.entity.kind)}),(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:()=>{g(null),v(null)},children:e(`episodeClose`)})]}),h.entity.aliases.length>0&&(0,i.jsx)(`p`,{className:o.sectionHint,children:`${e(`entityAliases`)}:${h.entity.aliases.join(`、`)}`}),h.memories.length===0?(0,i.jsx)(`p`,{className:o.sectionHint,children:e(`entityNoMemories`)}):(0,i.jsx)(`div`,{children:h.memories.map(S)}),_!==null&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`p`,{className:o.sectionHint,children:e(`factSection`,{n:_.total})}),_.items.length===0?(0,i.jsx)(`p`,{className:o.sectionHint,children:e(`factEmpty`)}):(0,i.jsx)(`div`,{children:_.items.map(C)})]})]}),d===null&&p===null&&(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`loading`)}),d!==null&&d.items.length===0&&(0,i.jsx)(`div`,{className:o.empty,children:e(`entityEmpty`)}),d!==null&&d.items.map(t=>(0,i.jsxs)(`div`,{className:o.episodeRow,title:t.entity.id,children:[(0,i.jsx)(`span`,{className:o.episodeRowKind,children:Z(e,t.entity.kind)}),(0,i.jsxs)(`span`,{className:o.episodeRowText,children:[t.entity.name,t.entity.aliases.length>0&&(0,i.jsx)(`small`,{className:o.sectionHint,children:`(${t.entity.aliases.join(`、`)})`})]}),(0,i.jsx)(`span`,{className:o.episodeRowTime,children:e(`entityMemories`,{n:t.memoryCount})}),(0,i.jsx)(`button`,{type:`button`,className:o.button,disabled:y,onClick:()=>{x(t.entity.id)},children:e(`entityOpen`)})]},t.entity.id))]})}function je({t:e,byKind:t}){return(0,i.jsx)(`div`,{className:o.roomList,children:D.map(n=>(0,i.jsxs)(`div`,{className:o.roomRow,children:[(0,i.jsx)(`span`,{className:`${o.roomSwatch} ${o[A[n]??``]??``}`,"aria-hidden":`true`}),(0,i.jsx)(`span`,{children:P(e,n)}),(0,i.jsx)(`b`,{className:o.roomCount,children:t[n]??0})]},n))})}function Me(e,t){let[n,i]=(0,r.useState)({stats:null,byKind:{},telemetry:null,health:null,failed:null});return(0,r.useEffect)(()=>{let t=!1;return Promise.all([z(`stats?scope=${e}`),z(`telemetry?days=7&scope=${e}`),z(`health?scope=${e}`)]).then(([n,r,a])=>{if(t)return;let o=n.parts.find(t=>t.scope===e)?.stats??null;i({stats:o,byKind:o?.byKind??{},telemetry:r,health:a,failed:null})}).catch(e=>{t||i(t=>({...t,failed:e.message}))}),()=>{t=!0}},[e,t]),n}function Ne({t:e,overview:t,dueCount:n}){let{stats:r,telemetry:a,health:s,failed:c}=t;if(c!==null)return(0,i.jsx)(`section`,{className:o.panelCard,children:(0,i.jsxs)(`div`,{className:o.expandLoading,children:[e(`teleFailed`),`:`,c]})});if(a===null)return(0,i.jsx)(`section`,{className:o.panelCard,children:(0,i.jsx)(`div`,{className:o.expandLoading,children:e(`teleLoading`)})});let l=a.counts;return(0,i.jsxs)(`section`,{className:o.panelCard,children:[(0,i.jsxs)(`div`,{className:o.hero,children:[(0,i.jsxs)(`div`,{className:o.heroMetrics,children:[(0,i.jsx)(G,{label:e(`kpiTotal`),value:r?.total??0,tail:`${e(`teleGroupRecent`)} +${String(l.writes)}`}),(0,i.jsx)(G,{label:e(`kpiActive`),value:r?.active??0,tail:`${e(`kpiForgotten`)} ${String(r?.forgotten??0)}`}),(0,i.jsx)(G,{label:e(`kpiSignal`),value:`${String(Math.round((r?.signalRatio??0)*100))}%`,tail:e(`cardRedacted`,{n:r?.redacted??0})})]}),(0,i.jsxs)(`div`,{className:o.heroSide,children:[(0,i.jsx)(G,{label:e(`teleWrites`),value:l.writes,secondary:!0}),(0,i.jsx)(G,{label:e(`teleIngest`),value:l.ingestRequests,secondary:!0}),(0,i.jsx)(G,{label:e(`teleConsolidate`),value:l.consolidations,secondary:!0}),(0,i.jsx)(G,{label:e(`heroDue`),value:n,secondary:!0}),(0,i.jsx)(K,{score:s?.overall??0})]})]}),(0,i.jsxs)(`div`,{className:o.heroFoot,children:[(0,i.jsx)(`span`,{className:o.sectionHint,children:s===null?e(`healthLoading`):e(`healthEvaluatedAt`,{time:fe(e,s.evaluatedAt)})}),(0,i.jsxs)(`span`,{className:o.telePrivacy,role:`note`,"aria-label":e(`telePrivacyHint`),tabIndex:0,children:[(0,i.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 14 14`,fill:`none`,"aria-hidden":`true`,children:[(0,i.jsx)(`circle`,{cx:`7`,cy:`7`,r:`5.5`,stroke:`currentColor`,strokeWidth:`1.2`}),(0,i.jsx)(`line`,{x1:`7`,y1:`6`,x2:`7`,y2:`10.5`,stroke:`currentColor`,strokeWidth:`1.4`,strokeLinecap:`round`}),(0,i.jsx)(`circle`,{cx:`7`,cy:`4.2`,r:`0.7`,fill:`currentColor`})]}),(0,i.jsx)(`span`,{className:o.telePrivacyHint,children:e(`telePrivacyHint`)}),(0,i.jsx)(`span`,{className:o.telePrivacyTip,role:`tooltip`,children:e(`telePrivacyTip`)})]})]})]})}let Pe={"low-activity":`skipLowActivity`,chitchat:`skipChitchat`,"capture-forbidden":`skipForbidden`,"no-user-content":`skipNoContent`,"already-ingested":`skipAlready`,"no-such-turn":`skipNoTurn`,"no-previous-turn":`skipNoTurn`,"no-route-in-log":`skipNoRoute`,unparsable:`skipUnparsable`};function Fe(e,t){let n=Pe[t];return n===void 0?t:e(n)}function Ie({t:e,toast:t}){let[n,a]=T(`backfill.days`,`7`,[`7`,`30`,`90`,`0`]),[s,c]=E(`backfill.maxTurns`,`20`),[l,u]=E(`backfill.maxTotal`,`200`),[d,f]=T(`backfill.subagents`,`false`,[`false`,`true`]),[p,m]=T(`backfill.seeded`,`false`,[`false`,`true`]),[h,g]=T(`backfill.noCwd`,`false`,[`false`,`true`]),[_,v]=E(`backfill.model`,``),[y,b]=(0,r.useState)(null),[x,S]=(0,r.useState)(null),[C,w]=(0,r.useState)(null),[D,O]=(0,r.useState)(!1);(0,r.useEffect)(()=>{let e=!1;return z(`models`).then(t=>{e||b(t)}).catch(()=>{e||b({providers:[],failures:[]})}),()=>{e=!0}},[]);let k=(()=>{if(_===``)return;let e=_.indexOf(`::`);if(!(e<=0))return{provider:_.slice(0,e),model:_.slice(e+2)}})(),A=new URLSearchParams({days:n,maxTurnsPerSession:s,maxTotalTurns:l,includeSubagents:d,includeSeeded:p,includeNoCwd:h});k!==void 0&&(A.set(`provider`,k.provider),A.set(`model`,k.model));let j=A.toString(),M=(0,r.useCallback)(()=>{O(!0),z(`history-backfill?${j}`).then(e=>{S(e.estimate)}).catch(e=>{t.push(`error`,e.message)}).finally(()=>{O(!1)})},[j,t]);(0,r.useEffect)(()=>{M()},[M]);let N=C?.progress.state===`running`;(0,r.useEffect)(()=>{let e=!1,t=()=>{z(`history-backfill/status`).then(t=>{e||w(t)}).catch(()=>{})};if(t(),!N)return()=>{e=!0};let n=window.setInterval(t,1500);return()=>{e=!0,window.clearInterval(n)}},[N]);let P=()=>{O(!0),z(`history-backfill/start`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({days:Number(n),maxTurnsPerSession:Number(s),maxTotalTurns:Number(l),includeSubagents:d===`true`,includeSeeded:p===`true`,includeNoCwd:h===`true`,...k===void 0?{}:{provider:k.provider,model:k.model}})}).then(e=>{w(e.status)}).catch(e=>{t.push(`error`,e.message)}).finally(()=>{O(!1)})},ee=()=>{z(`history-backfill/cancel`,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`}).then(e=>{w(e.status)}).catch(e=>{t.push(`error`,e.message)})},F=C?.progress,te=F===void 0?``:F.state===`running`?e(`backfillStateRunning`):F.state===`done`?e(`backfillStateDone`):F.state===`cancelled`?e(`backfillStateCancelled`):e(`backfillStateFailed`),ne=F===void 0||F.turnsPlanned===0?0:Math.min(100,Math.round(F.turnsDone/F.turnsPlanned*100));return(0,i.jsxs)(`div`,{className:o.backfill,children:[(0,i.jsx)(`p`,{className:o.backfillIntro,children:e(`backfillIntro`)}),(0,i.jsxs)(`div`,{className:o.backfillRules,children:[(0,i.jsxs)(`label`,{className:o.backfillRule,children:[(0,i.jsx)(`span`,{children:e(`backfillDays`)}),(0,i.jsxs)(`select`,{className:o.input,value:n,onChange:e=>{a(e.target.value)},children:[(0,i.jsx)(`option`,{value:`7`,children:e(`backfillDaysUnit`,{n:7})}),(0,i.jsx)(`option`,{value:`30`,children:e(`backfillDaysUnit`,{n:30})}),(0,i.jsx)(`option`,{value:`90`,children:e(`backfillDaysUnit`,{n:90})}),(0,i.jsx)(`option`,{value:`0`,children:e(`backfillDaysAll`)})]})]}),(0,i.jsxs)(`label`,{className:o.backfillRule,children:[(0,i.jsx)(`span`,{children:e(`backfillMaxTurns`)}),(0,i.jsx)(`input`,{className:o.input,type:`number`,min:1,max:500,value:s,onChange:e=>{c(e.target.value)}})]}),(0,i.jsxs)(`label`,{className:o.backfillRule,children:[(0,i.jsx)(`span`,{children:e(`backfillMaxTotal`)}),(0,i.jsx)(`input`,{className:o.input,type:`number`,min:1,max:5e3,value:l,onChange:e=>{u(e.target.value)}})]}),(0,i.jsxs)(`label`,{className:o.backfillRule,children:[(0,i.jsx)(`span`,{children:e(`backfillModel`)}),(0,i.jsxs)(`select`,{className:o.input,value:_,onChange:e=>{v(e.target.value)},children:[(0,i.jsx)(`option`,{value:``,children:e(`backfillModelAuto`)}),(y?.providers??[]).map(e=>(0,i.jsx)(`optgroup`,{label:e.name,children:e.models.map(t=>(0,i.jsx)(`option`,{value:`${e.id}::${t.id}`,children:t.name},`${e.id}::${t.id}`))},e.id))]})]})]}),(0,i.jsxs)(`div`,{className:o.backfillToggles,children:[(0,i.jsxs)(`label`,{className:o.backfillToggle,children:[(0,i.jsx)(`input`,{type:`checkbox`,checked:d===`true`,onChange:e=>{f(e.target.checked?`true`:`false`)}}),e(`backfillIncludeSubagents`)]}),(0,i.jsxs)(`label`,{className:o.backfillToggle,children:[(0,i.jsx)(`input`,{type:`checkbox`,checked:p===`true`,onChange:e=>{m(e.target.checked?`true`:`false`)}}),e(`backfillIncludeSeeded`)]}),(0,i.jsxs)(`label`,{className:o.backfillToggle,children:[(0,i.jsx)(`input`,{type:`checkbox`,checked:h===`true`,onChange:e=>{g(e.target.checked?`true`:`false`)}}),e(`backfillIncludeNoCwd`)]})]}),(0,i.jsx)(`div`,{className:o.backfillEstimate,children:x===null?(0,i.jsx)(`span`,{className:o.backfillMuted,children:e(`backfillEstimating`)}):x.unavailable===void 0?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(`div`,{className:o.backfillNumbers,children:[(0,i.jsx)(`span`,{className:o.backfillMetric,children:e(`backfillCandidates`,{n:x.candidates})}),(0,i.jsx)(`span`,{className:o.backfillMetric,children:e(`backfillPendingTurns`,{n:x.pendingTurns})}),(0,i.jsx)(`span`,{className:o.backfillMetric,children:e(`backfillAlready`,{n:x.alreadyIngested})})]}),(0,i.jsx)(`div`,{className:o.backfillMuted,children:e(`backfillSkippedDetail`,{subagent:x.skipped.subagent,seeded:x.skipped.seeded,noCwd:x.skipped.noCwd,tooOld:x.skipped.tooOld,unreadable:x.skipped.unreadable})}),x.truncated&&(0,i.jsx)(`div`,{className:o.backfillMuted,children:e(`backfillTruncated`)})]}):(0,i.jsx)(`span`,{className:o.backfillMuted,children:x.unavailable})}),(0,i.jsxs)(`div`,{className:o.backfillActions,children:[(0,i.jsx)(`button`,{type:`button`,className:o.button,disabled:D,onClick:M,children:e(`backfillReestimate`)}),(0,i.jsx)(`button`,{type:`button`,className:`${o.button} ${o.primary}`,disabled:D||N||x===null||x.unavailable!==void 0||x.pendingTurns===0,onClick:P,children:e(`backfillStart`)}),(0,i.jsx)(`button`,{type:`button`,className:o.button,disabled:!N,onClick:ee,children:e(`backfillPause`)})]}),F!==void 0&&(0,i.jsxs)(`div`,{className:o.backfillProgress,children:[(0,i.jsxs)(`div`,{className:o.backfillProgressHead,children:[(0,i.jsx)(`span`,{children:te}),(0,i.jsx)(`span`,{children:e(`backfillProgressTurns`,{done:F.turnsDone,total:F.turnsPlanned})})]}),(0,i.jsx)(`div`,{className:o.progressBar,children:(0,i.jsx)(`i`,{style:{width:`${String(ne)}%`}})}),(0,i.jsxs)(`div`,{className:o.backfillMeta,children:[(0,i.jsx)(`span`,{children:e(`backfillProgressSessions`,{done:F.sessionsDone,total:F.sessionsTotal})}),(0,i.jsx)(`span`,{children:e(`backfillWritten`,{n:F.memoriesWritten})}),(0,i.jsx)(`span`,{children:e(`backfillTurnsSkipped`,{n:F.turnsSkipped})}),(0,i.jsx)(`span`,{children:e(`backfillTurnsFailed`,{n:F.turnsFailed})})]}),Object.keys(F.skipReasons).length>0&&(0,i.jsxs)(`div`,{className:o.backfillMeta,children:[(0,i.jsx)(`span`,{children:e(`backfillSkipReasons`)}),Object.entries(F.skipReasons).sort(([,e],[,t])=>t-e).map(([t,n])=>(0,i.jsx)(`span`,{children:`${Fe(e,t)} ${String(n)}`},t))]}),(C?.failures??[]).length>0&&(0,i.jsxs)(`ul`,{className:o.backfillFailures,children:[(0,i.jsx)(`li`,{className:o.backfillMuted,children:e(`backfillFailures`)}),C.failures.slice(0,3).map((e,t)=>(0,i.jsx)(`li`,{children:`${e.sessionId.slice(-12)} · ${String(e.turn)} · ${e.reason}`},`${e.sessionId}-${String(e.turn)}-${String(t)}`))]}),(C?.failures??[]).length>0&&(0,i.jsx)(`div`,{className:o.backfillMuted,children:e(`backfillRouteHint`)}),C?.error!==void 0&&(0,i.jsx)(`div`,{className:o.backfillMuted,children:C.error})]})]})}function Le({t:e,toast:t}){let[n,a]=(0,r.useState)(null),[s,c]=(0,r.useState)(!1),[l,u]=(0,r.useState)(``),[d,f]=(0,r.useState)(``),[p,m]=(0,r.useState)(``),[h,g]=(0,r.useState)(`3000`),[_,v]=(0,r.useState)(!1),[y,b]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{let n=!1;return z(`jev-config`).then(e=>{n||(a(e),c(e.enabled),f(e.baseUrl),m(e.model),g(String(e.timeoutMs)))}).catch(r=>{n||t.push(`error`,`${e(`jevLoadFailed`)}: ${r.message}`)}),()=>{n=!0}},[e,t]),n===null?(0,i.jsx)(`span`,{className:o.jevMuted,children:e(`loading`)}):(0,i.jsxs)(`div`,{className:o.jev,children:[(0,i.jsx)(`p`,{className:o.jevIntro,children:e(`jevIntro`)}),(0,i.jsxs)(`div`,{className:o.jevToggleRow,children:[(0,i.jsxs)(`label`,{className:o.jevToggle,children:[(0,i.jsx)(`input`,{type:`checkbox`,checked:s,onChange:e=>c(e.target.checked)}),e(`jevEnabled`)]}),(0,i.jsx)(`span`,{className:o.jevStatus,children:n.enabled?e(`jevStatusOn`):e(`jevStatusOff`)})]}),(0,i.jsxs)(`div`,{className:o.jevForm,children:[(0,i.jsxs)(`label`,{className:o.jevField,children:[(0,i.jsx)(`span`,{children:e(`jevApiKey`)}),(0,i.jsx)(`input`,{className:o.input,type:`password`,value:l,autoComplete:`off`,placeholder:n.apiKeyMask??e(`jevApiKeyUnset`),onChange:e=>u(e.target.value)}),(0,i.jsx)(`span`,{className:o.jevMuted,children:e(`jevApiKeyHint`)})]}),(0,i.jsxs)(`label`,{className:o.jevField,children:[(0,i.jsx)(`span`,{children:e(`jevBaseUrl`)}),(0,i.jsx)(`input`,{className:o.input,value:d,onChange:e=>f(e.target.value)})]}),(0,i.jsxs)(`label`,{className:o.jevField,children:[(0,i.jsx)(`span`,{children:e(`jevModel`)}),(0,i.jsx)(`input`,{className:o.input,value:p,onChange:e=>m(e.target.value)})]}),(0,i.jsxs)(`label`,{className:o.jevField,children:[(0,i.jsx)(`span`,{children:e(`jevTimeoutMs`)}),(0,i.jsx)(`input`,{className:o.input,type:`number`,min:1e3,max:6e4,value:h,onChange:e=>g(e.target.value)})]})]}),(0,i.jsx)(`div`,{className:o.jevMuted,children:e(`jevThresholdsTitle`)}),(0,i.jsx)(`div`,{className:o.jevMuted,children:e(`jevThresholdLine`,{merge:n.deferMergeAbove,accept:n.deferAcceptBelow,contradict:n.contradictMinProbability})}),(0,i.jsxs)(`div`,{className:o.jevActions,children:[(0,i.jsx)(`button`,{type:`button`,className:`${o.button} ${o.primary}`,disabled:_,onClick:()=>{v(!0),z(`jev-config`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:s,baseUrl:d.trim(),model:p.trim(),timeoutMs:Number(h),...l.trim()===``?{}:{apiKey:l.trim()}})}).then(n=>{a(n.view),u(``),t.push(`success`,e(`jevSaved`))}).catch(e=>{t.push(`error`,e.message)}).finally(()=>{v(!1)})},children:e(`jevSave`)}),(0,i.jsx)(`button`,{type:`button`,className:o.button,disabled:_||y,onClick:()=>{b(!0),z(`jev-test`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({baseUrl:d.trim(),model:p.trim(),...l.trim()===``?{}:{apiKey:l.trim()}})}).then(n=>{n.ok?t.push(`success`,e(`jevTestOk`,{ms:n.elapsedMs,p:n.probability})):t.push(`error`,e(`jevTestFail`,{error:n.error??``}))}).catch(e=>{t.push(`error`,e.message)}).finally(()=>{b(!1)})},children:e(`jevTest`)}),n.apiKeySet&&(0,i.jsx)(`button`,{type:`button`,className:o.button,disabled:_,onClick:()=>{v(!0),z(`jev-config`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({apiKey:``})}).then(n=>{a(n.view),t.push(`success`,e(`jevKeyCleared`))}).catch(e=>{t.push(`error`,e.message)}).finally(()=>{v(!1)})},children:e(`jevClearKey`)})]})]})}let Re={merge:`jevObsVerdictMerge`,accept:`jevObsVerdictAccept`,defer:`jevObsVerdictDefer`,confirm:`jevObsVerdictConfirm`,reject:`jevObsVerdictReject`,fallback:`jevObsVerdictFallback`};function ze({t:e,toast:t}){let[n,a]=(0,r.useState)(null);return(0,r.useEffect)(()=>{let n=!1,r=r=>{z(`jev-observations`).then(e=>{n||a(e.items)}).catch(i=>{n||(a(e=>e??[]),r&&t.push(`error`,`${e(`jevObsLoadFailed`)}: ${i.message}`))})};r(!0);let i=window.setInterval(()=>r(!1),1500);return()=>{n=!0,window.clearInterval(i)}},[e,t]),n===null?(0,i.jsx)(`span`,{className:o.jevMuted,children:e(`loading`)}):n.length===0?(0,i.jsx)(`span`,{className:o.jevMuted,children:e(`jevObsEmpty`)}):(0,i.jsxs)(`div`,{className:o.jevObs,children:[(0,i.jsx)(`div`,{className:o.jevObsHead,children:e(`jevObsTitle`)}),n.map((t,n)=>(0,i.jsxs)(`div`,{className:o.jevObsItem,children:[(0,i.jsx)(`span`,{className:o.jevObsTime,children:new Date(t.at).toLocaleTimeString()}),(0,i.jsx)(`span`,{children:t.site===`band`?e(`jevObsSiteBand`):e(`jevObsSiteContradiction`)}),(0,i.jsx)(`span`,{className:t.verdict===`fallback`?o.jevObsBadgeWarn:t.verdict===`confirm`||t.verdict===`merge`?o.jevObsBadgeGood:o.jevObsBadge,children:e(Re[t.verdict])}),(0,i.jsx)(`span`,{children:t.answered?`p=${t.probability?.toFixed(3)}`:e(`jevObsNoAnswer`)}),(0,i.jsxs)(`span`,{children:[t.elapsedMs,`ms`]}),t.error!==void 0&&(0,i.jsx)(`span`,{className:o.jevObsError,children:e(`jevObsErrorLine`,{error:t.error})})]},`${t.at}-${t.site}-${n}`))]})}function Be({t:e,scope:t,project:n}){let[a,s]=(0,r.useState)(!1),c=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(!a)return;let e=e=>{(c.current===null||!c.current.contains(e.target))&&s(!1)};return window.addEventListener(`mousedown`,e),()=>{window.removeEventListener(`mousedown`,e)}},[a]);let l=t===`project`&&n!==null?`&project=${encodeURIComponent(n)}`:``,u=[{label:e(`exportMd`),hint:e(`exportMdHint`),href:`/api/engram/export?scope=${t}${l}&format=markdown`},{label:e(`exportJson`),hint:e(`exportJsonHint`),href:`/api/engram/export?scope=${t}${l}&format=json`},{label:e(`exportMirror`),hint:e(`exportMirrorHint`),href:`/api/engram/mirror?scope=${t}${l}`}];return(0,i.jsxs)(`div`,{className:o.exportWrap,ref:c,children:[(0,i.jsxs)(`button`,{type:`button`,className:o.button,"aria-haspopup":`menu`,"aria-expanded":a,onClick:()=>{s(e=>!e)},children:[e(`export`),(0,i.jsx)(`span`,{className:o.exportCaret,"aria-hidden":`true`,children:`▾`})]}),a&&(0,i.jsx)(`div`,{className:o.exportMenu,role:`menu`,children:u.map(e=>(0,i.jsxs)(`a`,{role:`menuitem`,className:o.exportItem,href:e.href,onClick:()=>{s(!1)},children:[(0,i.jsx)(`span`,{className:o.exportItemLabel,children:e.label}),(0,i.jsx)(`span`,{className:o.exportItemHint,children:e.hint})]},e.href))})]})}function Ve({t:e,workspaces:t,sessions:n}){let a=b(),[s,c]=T(`library.scope`,`user`,[`user`,`project`,`shared`]),[l,u]=T(`library.status`,`all`,[`all`,`active`,`archived`,`forgotten`]),[d,f]=T(`library.kind`,`all`,[`all`,`fact`,`preference`,`decision`,`episode`,`skill`]),[p,m]=E(`library.q`,``),[h,g]=T(`library.sort`,`time`,[`time`,`tour`]),[_,v]=(0,r.useState)(0),[y,x]=(0,r.useState)(new Set),[S,C]=(0,r.useState)(!1),[w]=(0,r.useState)(`all`),[A,j]=(0,r.useState)(0),[M,N]=(0,r.useState)(null),[F,te]=(0,r.useState)(null),[I,L]=(0,r.useState)(null),[R,ae]=(0,r.useState)(0),[B,V]=(0,r.useState)(new Set),[H,se]=(0,r.useState)(!1),[U,G]=(0,r.useState)(`today`),[K,pe]=E(`library.project`,`follow`),me=oe(t,n),[q,ve]=(0,r.useState)(null),ye=me.workspace?.workspaceId??``;(0,r.useEffect)(()=>{let e=!1;return z(`workspaces`).then(t=>{e||ve(t)}).catch(()=>{}),()=>{e=!0}},[ye,K,R]);let be=ue(q,me.workspace),J=K===`follow`?be?.dbName??null:K;re=J;let Y=de(e,{mode:K,available:me.available,items:q?.items??[],followed:be,processDefaultPath:q?.processDefault?.path??null}),xe=K!==`follow`&&!(q?.items??[]).some(e=>e.dbName===K),Se=Me(s,J),X=(0,r.useCallback)(()=>{ae(e=>e+1)},[]),ke=(0,r.useRef)(!1);(0,r.useEffect)(()=>(ie=()=>{ke.current||K===`follow`||(ke.current=!0,pe(`follow`),j(0),L(null),V(new Set),X())},()=>{ie=null}),[K,X]),(0,r.useEffect)(()=>{K===`follow`&&(ke.current=!1)},[K]);let Z=(0,r.useCallback)(()=>{z(`review-due?scope=${s}&limit=50`).then(e=>{v(e.items.length),x(new Set(e.items.map(e=>e.id)))}).catch(()=>{v(0),x(new Set)})},[s,J]);(0,r.useEffect)(()=>{Z()},[Z]);let Pe=()=>{G(`library`),C(!0)},Fe=(0,r.useCallback)(e=>{let t=M?.records.find(t=>t.id===e);L({kind:`review`,record:t??{id:e,scope:s,kind:`fact`,content:``,importance:.5,confidence:.5,status:`active`,createdAt:Date.now(),accessCount:0,sourceSessionId:null,sourceRound:null}})},[M,s]);(0,r.useEffect)(()=>{let e=!1,t=new URLSearchParams({scope:s,status:l,kind:d,redacted:w,limit:`20`,offset:String(A)});return p!==``&&t.set(`q`,p),h===`tour`&&t.set(`sort`,`tour`),z(`list?${t.toString()}`).then(t=>{e||(N(t),te(null))}).catch(t=>{e||te(t.message)}),()=>{e=!0}},[s,l,d,w,p,h,A,R,J]);let Re=(0,r.useRef)(J);(0,r.useEffect)(()=>{Re.current!==J&&(Re.current=J,j(0),L(null),V(new Set))},[J]);let Ve=(e,t)=>{z(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:t.id,scope:t.scope})}).then(X).catch(e=>{a.push(`error`,e.message)})},He=(e,t)=>{L(n=>n!==null&&n.kind===e&&n.record.id===t.id?null:{kind:e,record:t})},Ue=M?.records??[],Q=S?Ue.filter(e=>y.has(e.id)):Ue,We=Q.filter(e=>B.has(e.id)),Ge=We.filter(e=>e.status===`active`).length,Ke=We.length-Ge,qe=Q.length>0&&Q.every(e=>B.has(e.id)),Je=e=>{V(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},$=()=>{V(new Set),se(!1)},Ye=()=>{V(e=>{let t=new Set(e);return qe?Q.forEach(e=>t.delete(e.id)):Q.forEach(e=>t.add(e.id)),t})},Xe=e=>{let t=e===`forget`?We.filter(e=>e.status===`active`):We.filter(e=>e.status!==`active`);t.length!==0&&Promise.allSettled(t.map(t=>z(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:t.id,scope:t.scope})}))).then(()=>{$(),X()})},Ze=()=>{if(H){Xe(`forget`);return}se(!0)},Qe=Math.floor(A/20)+1,$e=M===null?1:Math.max(1,Math.ceil(M.total/20)),et=(0,r.useRef)(new Map),[tt,nt]=(0,r.useState)({left:0,width:0,opacity:0}),rt=(0,r.useCallback)(()=>{let e=et.current.get(s);e!=null&&nt({left:e.offsetLeft,width:e.offsetWidth,opacity:1})},[s]);return(0,r.useEffect)(()=>{rt();let e=()=>rt();return window.addEventListener(`resize`,e),()=>{window.removeEventListener(`resize`,e)}},[rt]),(0,i.jsxs)(`div`,{className:o.panel,children:[(0,i.jsxs)(`div`,{className:o.header,children:[(0,i.jsxs)(`div`,{className:o.headerBrand,children:[(0,i.jsx)(`span`,{className:o.headerLogo,"aria-hidden":`true`,children:(0,i.jsxs)(`svg`,{width:`18`,height:`18`,viewBox:`0 0 48 48`,fill:`none`,children:[(0,i.jsx)(`path`,{d:`M6 20 L24 7 L42 20 Z`,fill:`currentColor`,fillOpacity:`0.9`}),(0,i.jsx)(`rect`,{x:`9`,y:`20`,width:`30`,height:`18`,rx:`1.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`}),(0,i.jsx)(`rect`,{x:`13`,y:`24`,width:`6`,height:`6`,rx:`1`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`}),(0,i.jsx)(`line`,{x1:`16`,y1:`24`,x2:`16`,y2:`30`,stroke:`currentColor`,strokeWidth:`1.2`}),(0,i.jsx)(`line`,{x1:`13`,y1:`27`,x2:`19`,y2:`27`,stroke:`currentColor`,strokeWidth:`1.2`}),(0,i.jsx)(`path`,{d:`M21 38 L21 28 Q21 25 24 25 Q27 25 27 28 L27 38`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`}),(0,i.jsx)(`rect`,{x:`29`,y:`24`,width:`6`,height:`6`,rx:`1`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`}),(0,i.jsx)(`line`,{x1:`32`,y1:`24`,x2:`32`,y2:`30`,stroke:`currentColor`,strokeWidth:`1.2`}),(0,i.jsx)(`line`,{x1:`29`,y1:`27`,x2:`35`,y2:`27`,stroke:`currentColor`,strokeWidth:`1.2`})]})}),(0,i.jsxs)(`div`,{className:o.headerTitle,children:[(0,i.jsx)(`h2`,{children:e(`headerTitle`)}),(0,i.jsx)(`p`,{children:e(`headerSubtitle`)})]})]}),(0,i.jsxs)(`div`,{className:o.headerActions,children:[(0,i.jsxs)(`div`,{className:`${o.segGroup} ${o.segScope}`,children:[(0,i.jsx)(`span`,{className:o.segIndicator,style:{left:`${String(tt.left)}px`,width:`${String(tt.width)}px`,opacity:tt.opacity}}),[`user`,`project`,`shared`].map(t=>(0,i.jsx)(`button`,{type:`button`,ref:e=>{et.current.set(t,e)},className:s===t?`${o.segItem} ${o.on}`:o.segItem,onClick:()=>{c(t),j(0),L(null),$()},children:e(k[t])},t))]}),_>0&&(0,i.jsxs)(`button`,{type:`button`,className:o.dueBadge,title:e(`dueBadgeLabel`,{n:_}),"aria-label":e(`dueBadgeLabel`,{n:_}),onClick:Pe,children:[(0,i.jsx)(`span`,{className:o.dueDot,"aria-hidden":`true`}),_]}),(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:()=>{X(),Z()},children:e(`refresh`)}),(0,i.jsx)(Be,{t:e,scope:s,project:J})]}),s===`project`&&(0,i.jsxs)(`div`,{className:o.wsBar,children:[(0,i.jsx)(`span`,{className:`${o.wsChip}${Y.tone===`follow`?` ${o.wsFollow}`:Y.tone===`muted`?` ${o.wsMuted}`:``}`,title:Y.title,children:Y.label}),(0,i.jsxs)(`select`,{className:`${o.input} ${o.wsSelect}`,value:K,"aria-label":e(`projectSwitch`),title:e(`projectSwitch`),onChange:e=>{pe(e.target.value),j(0),L(null),$()},children:[(0,i.jsx)(`option`,{value:`follow`,children:e(`projectFollow`)}),(q?.items??[]).map(t=>(0,i.jsx)(`option`,{value:t.dbName,children:le(e,t)},t.dbName)),xe&&(0,i.jsx)(`option`,{value:K,children:`${ce(K)} · ${e(`projectUnregistered`)}`})]})]})]}),(0,i.jsxs)(`div`,{className:o.tabs,role:`tablist`,children:[(0,i.jsx)(`button`,{type:`button`,role:`tab`,className:U===`today`?`${o.tabItem} ${o.on}`:o.tabItem,"aria-selected":U===`today`,onClick:()=>{G(`today`)},children:e(`tabToday`)}),(0,i.jsxs)(`button`,{type:`button`,role:`tab`,className:U===`library`?`${o.tabItem} ${o.on}`:o.tabItem,"aria-selected":U===`library`,onClick:()=>{G(`library`)},children:[e(`tabLibrary`),(0,i.jsx)(`small`,{children:e(`tabLibraryCount`,{n:M?.total??0})})]}),(0,i.jsx)(`button`,{type:`button`,role:`tab`,className:U===`corridor`?`${o.tabItem} ${o.on}`:o.tabItem,"aria-selected":U===`corridor`,onClick:()=>{G(`corridor`)},children:e(`tabCorridor`)}),(0,i.jsx)(`button`,{type:`button`,role:`tab`,className:U===`episodes`?`${o.tabItem} ${o.on}`:o.tabItem,"aria-selected":U===`episodes`,onClick:()=>{G(`episodes`)},children:e(`tabEpisodes`)}),(0,i.jsx)(`button`,{type:`button`,role:`tab`,className:U===`entities`?`${o.tabItem} ${o.on}`:o.tabItem,"aria-selected":U===`entities`,onClick:()=>{G(`entities`)},children:e(`tabEntities`)}),(0,i.jsx)(`button`,{type:`button`,role:`tab`,className:U===`log`?`${o.tabItem} ${o.on}`:o.tabItem,"aria-selected":U===`log`,onClick:()=>{G(`log`)},children:e(`tabLog`)}),(0,i.jsx)(`button`,{type:`button`,role:`tab`,className:U===`backfill`?`${o.tabItem} ${o.on}`:o.tabItem,"aria-selected":U===`backfill`,onClick:()=>{G(`backfill`)},children:e(`tabBackfill`)}),(0,i.jsx)(`button`,{type:`button`,role:`tab`,className:U===`jev`?`${o.tabItem} ${o.on}`:o.tabItem,"aria-selected":U===`jev`,onClick:()=>{G(`jev`)},children:e(`tabJev`)})]}),U===`library`&&(0,i.jsxs)(`div`,{className:o.tabPanel,children:[(0,i.jsx)(`div`,{className:o.sectionHead,children:(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`tabLibrary`)})}),(0,i.jsxs)(`div`,{className:o.toolbarRow,children:[(0,i.jsx)(`input`,{className:`${o.input} ${o.search}`,placeholder:e(`searchPlaceholder`),value:p,onChange:e=>{m(e.target.value.trim()),j(0),L(null),$()}}),(0,i.jsx)(`div`,{className:o.segGroup,children:[[`all`,e(`allStatuses`)],[`active`,e(`statusActive`)],[`archived`,e(`statusArchived`)],[`forgotten`,e(`statusForgotten`)]].map(([e,t])=>(0,i.jsx)(`button`,{type:`button`,className:l===e?`${o.segItem} ${o.on}`:o.segItem,onClick:()=>{u(e),j(0),L(null),$()},children:t},e))}),(0,i.jsx)(`div`,{className:o.segGroup,children:(0,i.jsx)(`button`,{type:`button`,"aria-pressed":S,className:S?`${o.segItem} ${o.on}`:o.segItem,onClick:()=>{C(!S),j(0),L(null),$()},children:e(`filterDueToday`)})}),(0,i.jsx)(`div`,{className:o.segGroup,children:[[`time`,e(`sortTime`)],[`tour`,e(`sortTour`)]].map(([e,t])=>(0,i.jsx)(`button`,{type:`button`,className:h===e?`${o.segItem} ${o.on}`:o.segItem,onClick:()=>{g(e),j(0),L(null),$()},children:t},e))})]}),(0,i.jsx)(`div`,{className:o.chipRow,children:[[`all`,e(`allKinds`)],...D.map(t=>[t,P(e,t)])].map(([e,t])=>(0,i.jsx)(`button`,{type:`button`,"aria-pressed":d===e,className:d===e?`${o.chip} ${o.chipOn}`:o.chip,onClick:()=>{f(e),j(0),L(null),$()},children:t},e))}),B.size>0&&(0,i.jsxs)(`div`,{className:o.batchBar,children:[(0,i.jsx)(`span`,{children:e(`selectedCount`,{n:B.size})}),(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:Ye,children:e(qe?`deselectAll`:`selectAll`)}),(0,i.jsx)(`button`,{type:`button`,className:o.button,disabled:Ke===0,onClick:()=>Xe(`restore`),children:e(`batchRestore`,{n:Ke})}),(0,i.jsx)(`button`,{type:`button`,className:H?`${o.button} ${o.danger}`:o.button,disabled:Ge===0,onClick:Ze,children:e(H?`batchForgetConfirm`:`batchForget`,{n:Ge})}),(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:$,children:e(`clearSelection`)})]}),F!==null&&(0,i.jsxs)(`div`,{className:o.empty,children:[(0,i.jsx)(`b`,{children:e(`loadFailed`,{msg:F})}),(0,i.jsx)(`span`,{children:e(`emptyHint`)})]}),F===null&&M===null&&(0,i.jsx)(`div`,{className:o.skeletonList,children:[0,1,2,3].map(e=>(0,i.jsxs)(`div`,{className:o.skeleton,style:{animationDelay:`${String(e*60)}ms`},children:[(0,i.jsx)(`i`,{}),(0,i.jsx)(`i`,{}),(0,i.jsx)(`i`,{})]},e))}),F===null&&M!==null&&Q.length===0&&(0,i.jsxs)(`div`,{className:o.empty,children:[(0,i.jsx)(`b`,{children:e(`empty`)}),(0,i.jsx)(`span`,{children:e(`emptyHint`)})]}),Q.length>0&&(0,i.jsx)(`div`,{className:o.itemList,children:Q.map((t,n)=>(0,i.jsxs)(`div`,{className:B.has(t.id)?`${o.item} ${o.selected}`:o.item,style:{animationDelay:`${String(Math.min(n,12)*36)}ms`},children:[(0,i.jsx)(`input`,{type:`checkbox`,className:o.itemCheck,checked:B.has(t.id),"aria-label":t.content.slice(0,24),onChange:()=>Je(t.id)}),(0,i.jsxs)(`div`,{className:o.itemBody,children:[(0,i.jsxs)(`div`,{className:o.itemTags,children:[(0,i.jsx)(`span`,{className:`${o.pill} ${o[`status${t.status.charAt(0).toUpperCase()}${t.status.slice(1)}`]??``}`,children:e(O[t.status])}),(0,i.jsx)(`span`,{className:ee(t.kind),children:P(e,t.kind)}),t.slot!==void 0&&(0,i.jsxs)(`span`,{className:o.pill,children:[t.slot.room,`#`,t.slot.index]}),t.content.includes(`[REDACTED:`)&&(0,i.jsx)(`span`,{className:`${o.pill} ${o.redacted}`,children:e(`tagRedacted`)}),t.outcome!==void 0&&(0,i.jsx)(`span`,{className:`${o.pill} ${t.outcome===`success`?o.outcomeSuccess:o.outcomeFailure}`,children:t.outcome===`success`?e(`tagOutcomeSuccess`):e(`tagOutcomeFailure`)}),(0,i.jsxs)(`span`,{className:o.itemStamp,title:W(t.createdAt),children:[e(k[t.scope]),` · `,fe(e,t.createdAt)]})]}),(0,i.jsx)(`div`,{className:o.content,children:t.content}),(0,i.jsxs)(`div`,{className:o.itemMeta,children:[(0,i.jsxs)(`span`,{children:[(0,i.jsx)(`b`,{children:e(`importance`)}),` `,t.importance.toFixed(2)]}),(0,i.jsxs)(`span`,{children:[(0,i.jsx)(`b`,{children:e(`confidence`)}),` `,t.confidence.toFixed(2)]}),(0,i.jsx)(`span`,{children:e(`accessCount`,{n:t.accessCount})}),(0,i.jsx)(`span`,{children:ne(e,t)})]})]}),(0,i.jsxs)(`div`,{className:o.itemOps,children:[(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:()=>{He(`review`,t)},children:e(`detail`)}),(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:()=>{He(`edit`,t)},children:e(`edit`)}),t.status===`active`?(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:()=>{Ve(`forget`,t)},children:e(`forget`)}):(0,i.jsx)(`button`,{type:`button`,className:o.button,onClick:()=>{Ve(`restore`,t)},children:e(`restore`)})]})]},t.id))}),(0,i.jsxs)(`div`,{className:o.pager,children:[(0,i.jsx)(`button`,{type:`button`,className:o.button,disabled:A===0,"aria-label":e(`prevPage`),onClick:()=>{j(Math.max(0,A-20)),L(null),$()},children:`‹`}),(0,i.jsx)(`span`,{children:e(`pagerInfo`,{page:Qe,pages:$e,total:M?.total??0})}),(0,i.jsx)(`button`,{type:`button`,className:o.button,disabled:M===null||A+20>=M.total,"aria-label":e(`nextPage`),onClick:()=>{j(A+20),L(null),$()},children:`›`})]})]}),U===`today`&&(0,i.jsxs)(`div`,{className:o.tabPanel,children:[(0,i.jsx)(Ne,{t:e,overview:Se,dueCount:_}),(0,i.jsxs)(`div`,{className:o.layout,children:[(0,i.jsx)(`div`,{className:o.mainCol,children:(0,i.jsxs)(`section`,{className:o.section,children:[(0,i.jsx)(`div`,{className:o.sectionHead,children:(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`tourProposalTitle`)})}),(0,i.jsx)(`div`,{className:o.panelCard,children:(0,i.jsx)(Te,{t:e,scope:s,project:J,onSelect:Fe})})]})}),(0,i.jsxs)(`aside`,{className:o.sideCol,children:[(0,i.jsxs)(`section`,{className:o.section,children:[(0,i.jsx)(`div`,{className:o.sectionHead,children:(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`profileTitle`)})}),(0,i.jsx)(`div`,{className:o.panelCard,children:(0,i.jsx)(Ce,{t:e,scope:s,project:J})})]}),(0,i.jsxs)(`section`,{className:o.section,children:[(0,i.jsxs)(`div`,{className:o.sectionHead,children:[(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`roomsTitle`)}),(0,i.jsx)(`span`,{className:o.sectionHint,children:e(`roomsHint`)})]}),(0,i.jsx)(`div`,{className:o.panelCard,children:(0,i.jsx)(je,{t:e,byKind:Se.byKind})})]}),(0,i.jsxs)(`section`,{className:o.section,children:[(0,i.jsx)(`div`,{className:o.sectionHead,children:(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`refurbTitle`)})}),(0,i.jsx)(`div`,{className:o.panelCard,children:(0,i.jsx)(Ee,{t:e,scope:s,project:J,onSelect:Fe,onAfterAction:X,toast:a})})]})]})]})]}),U===`corridor`&&(0,i.jsx)(`div`,{className:o.tabPanel,children:(0,i.jsxs)(`div`,{className:o.mainCol,children:[(0,i.jsxs)(`section`,{className:o.section,children:[(0,i.jsx)(`div`,{className:o.sectionHead,children:(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`sectionCorridor`)})}),(0,i.jsx)(`div`,{className:o.panelCard,children:(0,i.jsx)(De,{t:e,scope:s,project:J,onSelect:Fe})})]}),(0,i.jsxs)(`section`,{className:o.section,children:[(0,i.jsxs)(`div`,{className:o.sectionHead,children:[(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`benchTitle`)}),(0,i.jsx)(`span`,{className:o.sectionHint,children:e(`benchNote`)})]}),(0,i.jsx)(`div`,{className:o.panelCard,children:(0,i.jsx)(_e,{t:e,scope:s})})]})]})}),U===`episodes`&&(0,i.jsx)(`div`,{className:o.tabPanel,children:(0,i.jsxs)(`section`,{className:o.section,children:[(0,i.jsxs)(`div`,{className:o.sectionHead,children:[(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`tabEpisodes`)}),(0,i.jsx)(`span`,{className:o.sectionHint,children:e(`episodeHint`)})]}),(0,i.jsx)(Oe,{t:e,scope:s,project:J,reloadTick:R})]})}),U===`entities`&&(0,i.jsx)(`div`,{className:o.tabPanel,children:(0,i.jsxs)(`section`,{className:o.section,children:[(0,i.jsxs)(`div`,{className:o.sectionHead,children:[(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`tabEntities`)}),(0,i.jsx)(`span`,{className:o.sectionHint,children:e(`entityHint`)})]}),(0,i.jsx)(Ae,{t:e,scope:s,project:J,reloadTick:R})]})}),U===`log`&&(0,i.jsx)(`div`,{className:o.tabPanel,children:(0,i.jsx)(we,{t:e,telemetry:Se.telemetry,project:J})}),U===`backfill`&&(0,i.jsx)(`div`,{className:o.tabPanel,children:(0,i.jsxs)(`section`,{className:o.section,children:[(0,i.jsx)(`div`,{className:o.sectionHead,children:(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`backfillRulesTitle`)})}),(0,i.jsx)(`div`,{className:o.panelCard,children:(0,i.jsx)(Ie,{t:e,toast:a})})]})}),U===`jev`&&(0,i.jsxs)(`div`,{className:o.tabPanel,children:[(0,i.jsxs)(`section`,{className:o.section,children:[(0,i.jsx)(`div`,{className:o.sectionHead,children:(0,i.jsx)(`h4`,{className:o.sectionTitle,children:e(`tabJev`)})}),(0,i.jsx)(`div`,{className:o.panelCard,children:(0,i.jsx)(Le,{t:e,toast:a})})]}),(0,i.jsx)(`section`,{className:o.section,children:(0,i.jsx)(`div`,{className:o.panelCard,children:(0,i.jsx)(ze,{t:e,toast:a})})})]}),I!==null&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`div`,{className:o.drawerScrim,onClick:()=>{L(null)}}),(0,i.jsxs)(`aside`,{className:o.drawer,role:`dialog`,"aria-label":e(`drawerTitle`),children:[(0,i.jsxs)(`header`,{className:o.drawerHead,children:[(0,i.jsxs)(`div`,{className:o.drawerTitle,children:[(0,i.jsx)(`h3`,{children:e(`drawerTitle`)}),(0,i.jsx)(`span`,{title:I.record.id,children:`#${I.record.id.slice(0,8)}…`})]}),(0,i.jsx)(`button`,{type:`button`,className:o.drawerClose,"aria-label":e(`drawerClose`),onClick:()=>{L(null)},children:(0,i.jsx)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 14 14`,fill:`none`,"aria-hidden":`true`,children:(0,i.jsx)(`path`,{d:`M2 2 L12 12 M12 2 L2 12`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`})})})]}),(0,i.jsx)(`div`,{className:o.drawerBody,children:I.kind===`review`?(0,i.jsx)(he,{t:e,recordId:I.record.id,scope:I.record.scope,project:J}):(0,i.jsx)(ge,{t:e,record:I.record,onClose:()=>{L(null)},onSaved:()=>{L(null),X()},toast:a})})]})]}),a.viewport]})}function He(e){return function(t){return(0,i.jsx)(Ve,{...t,workspaces:e.workspaces(),sessions:e.sessions()})}}let Ue=[`slots`,`locale`];function Q(e){e.effect(()=>e.locale.register(s,{zh:l,en:u}),`dsh-engram: dictionaries`);let t=e.locale.bind(s),n=()=>e.get(`workspaces`),r=()=>e.get(`sessions`);e.slots.inject(`settings.section`,()=>e.slots.register({name:`settings.section`,id:`engram`,order:20,label:()=>t(`nav`),locale:s},He({workspaces:n,sessions:r})))}return n.apply=Q,n.inject=Ue,t.exports}});
|
|
4
4
|
//# sourceMappingURL=client.js.map
|
package/lib/index.js
CHANGED
|
@@ -314,17 +314,13 @@ function finishError(finish) {
|
|
|
314
314
|
* @returns 模型输出全文。
|
|
315
315
|
*/
|
|
316
316
|
async function streamText(ctx, params) {
|
|
317
|
-
const messages = [{
|
|
318
|
-
role: "user",
|
|
317
|
+
const messages = [createUserMessage({
|
|
319
318
|
content: [{
|
|
320
319
|
type: "text",
|
|
321
320
|
text: params.userText
|
|
322
321
|
}],
|
|
323
|
-
source: {
|
|
324
|
-
|
|
325
|
-
plugin: "dsh-engram"
|
|
326
|
-
}
|
|
327
|
-
}];
|
|
322
|
+
source: { kind: "plugin:dsh-engram" }
|
|
323
|
+
})];
|
|
328
324
|
const options = {
|
|
329
325
|
provider: params.route.provider,
|
|
330
326
|
model: params.route.model,
|
|
@@ -823,7 +819,7 @@ function collectTexts(events, includeAssistant) {
|
|
|
823
819
|
let minSeq = null;
|
|
824
820
|
for (const event of events) if (event.type === "user/message") {
|
|
825
821
|
const data = event.data;
|
|
826
|
-
if (data?.source?.kind === "plugin") continue;
|
|
822
|
+
if (typeof data?.source?.kind === "string" && data.source.kind.startsWith("plugin")) continue;
|
|
827
823
|
const segments = (data?.content ?? []).filter((block) => block?.type === "text" && typeof block.text === "string").map((block) => block.text);
|
|
828
824
|
if (segments.length > 0) {
|
|
829
825
|
texts.push(...segments);
|
|
@@ -871,7 +867,7 @@ function turnSignals(events) {
|
|
|
871
867
|
const toolNames = /* @__PURE__ */ new Set();
|
|
872
868
|
for (const event of events) if (event.type === "user/message") {
|
|
873
869
|
const data = event.data;
|
|
874
|
-
if (data?.source?.kind === "plugin") continue;
|
|
870
|
+
if (typeof data?.source?.kind === "string" && data.source.kind.startsWith("plugin")) continue;
|
|
875
871
|
for (const block of data?.content ?? []) if (block?.type === "text" && typeof block.text === "string") userChars += block.text.length;
|
|
876
872
|
} else if (event.type === "assistant/message") {
|
|
877
873
|
if ((event.data?.content ?? []).some((block) => block?.type === "text" && typeof block.text === "string" && block.text !== "")) completedTurns = 1;
|
|
@@ -1182,7 +1178,7 @@ function collectSessionText(events) {
|
|
|
1182
1178
|
const texts = [];
|
|
1183
1179
|
for (const event of events) if (event.type === "user/message") {
|
|
1184
1180
|
const data = event.data;
|
|
1185
|
-
if (data?.source?.kind === "plugin") continue;
|
|
1181
|
+
if (typeof data?.source?.kind === "string" && data.source.kind.startsWith("plugin")) continue;
|
|
1186
1182
|
const segments = (data?.content ?? []).filter((block) => block?.type === "text" && typeof block.text === "string").map((block) => block.text);
|
|
1187
1183
|
if (segments.length > 0) texts.push(...segments);
|
|
1188
1184
|
} else if (event.type === "assistant/message") {
|
|
@@ -7882,8 +7878,7 @@ async function preStep(ctx, openStore, openStoreForProjectCwd, resolved, embedde
|
|
|
7882
7878
|
text: reminder
|
|
7883
7879
|
}],
|
|
7884
7880
|
source: {
|
|
7885
|
-
kind:
|
|
7886
|
-
plugin: name,
|
|
7881
|
+
kind: `plugin:${name}`,
|
|
7887
7882
|
form: "snapshot",
|
|
7888
7883
|
sections: [{
|
|
7889
7884
|
name,
|
|
@@ -7938,8 +7933,7 @@ async function preStep(ctx, openStore, openStoreForProjectCwd, resolved, embedde
|
|
|
7938
7933
|
text: packet
|
|
7939
7934
|
}],
|
|
7940
7935
|
source: {
|
|
7941
|
-
kind:
|
|
7942
|
-
plugin: name,
|
|
7936
|
+
kind: `plugin:${name}`,
|
|
7943
7937
|
form: "snapshot",
|
|
7944
7938
|
sections: [{
|
|
7945
7939
|
name,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kenz1117/dsh-engram",
|
|
3
3
|
"description": "Cross-session long-term memory for DeepSeek Harness (memory palace · AGI Architecture Exploration on dsh-market): dual-scope SQLite memory graph, hybrid retrieval, provenance audit, and a knowledge flywheel.",
|
|
4
|
-
"version": "0.7.
|
|
4
|
+
"version": "0.7.13",
|
|
5
5
|
"icon": "icon.svg",
|
|
6
6
|
"logo": "icon-256.svg",
|
|
7
7
|
"publishConfig": {
|