@wudao-org/web 0.4.20 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -85
- package/dist/assets/index-D7AJ4Xgr.css +1 -0
- package/dist/assets/{index-Dy-Ll1qR.js → index-WzeXy0_Q.js} +1 -1
- package/dist/assets/pet-BU92wkeg.js +3 -0
- package/dist/assets/pet-DyljS8EY.css +1 -0
- package/dist/assets/{tokens-D-f0h-_m.js → tokens-Cd73jvpR.js} +1 -1
- package/dist/index.html +3 -3
- package/dist/pet/skin-power.png +0 -0
- package/dist/pet.html +3 -3
- package/package.json +1 -1
- package/dist/assets/index-DILA5KBt.css +0 -1
- package/dist/assets/pet-CmLZS41k.js +0 -3
- package/dist/assets/pet-GasEBuc7.css +0 -1
package/README.md
CHANGED
|
@@ -1,88 +1,7 @@
|
|
|
1
|
-
# @wudao-org/web
|
|
1
|
+
# @wudao-org/web
|
|
2
2
|
|
|
3
|
-
The
|
|
4
|
-
protocol — a pure protocol consumer with zero agent logic. The contract is
|
|
5
|
-
[`packages/server/PROTOCOL.md`](../server/PROTOCOL.md); its types are
|
|
6
|
-
hand-mirrored into [`src/protocol.ts`](src/protocol.ts), the only file that
|
|
7
|
-
knows the server exists.
|
|
3
|
+
The web frontend of [wudao-harness](https://github.com/feiniaojin/wudao-harness) — `wudao ui`: chat with your agent, browse files, manage sessions and memory, and watch the monitoring dashboard (model calls, tool traffic, thinking, token flow).
|
|
8
4
|
|
|
9
|
-
|
|
5
|
+
A prebuilt static bundle, served by `@wudao-org/server`. You don't install this directly — install the app: `npm install -g wudao-harness`, then run `wudao ui`.
|
|
10
6
|
|
|
11
|
-
|
|
12
|
-
pnpm --filter @wudao-org/web build # → dist/ (also part of the root build chain)
|
|
13
|
-
wudao ui # serves dist/ at the printed loopback URL
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
`wudao ui` prints `http://127.0.0.1:<port>/#<token>`; the token rides the URL
|
|
17
|
-
fragment (never a request line) and is sent as the first WS frame. Dev loop:
|
|
18
|
-
`pnpm --filter @wudao-org/web dev` (vite on :5173) against a running server.
|
|
19
|
-
|
|
20
|
-
## Surface (the TUI parity checklist)
|
|
21
|
-
|
|
22
|
-
- **Conversation** — streaming markdown (the TUI's block/inline grammar) with
|
|
23
|
-
a zero-dep per-line code highlighter, collapsible reasoning (head-of-thought
|
|
24
|
-
summary), ⏺/↳ tool cards (⏹ + `[error]` on failures), ✏️ red/green inline
|
|
25
|
-
diffs (context runs collapse), 📋 todo board (☑/◐/☐), `── dividers ──`,
|
|
26
|
-
resume history, warn notices, err errors.
|
|
27
|
-
- **Input** — multi-line (Enter send · Shift+Enter newline · `\`+Enter
|
|
28
|
-
continuation), ↑/↓ submitted-prompt history at the buffer's first/last line,
|
|
29
|
-
`/` suggestion menu (live `listSlashCommands` data, ≤7-row scrolled window,
|
|
30
|
-
Tab/Enter complete, Esc dismisses per token), `@` mention hint.
|
|
31
|
-
- **Controls** — steering (submit while busy → ⏳ queue), interrupt (Esc /
|
|
32
|
-
button), mode cycling (shift+tab / chip: ask → auto → read-only, live in
|
|
33
|
-
the status bar), permission modal (y/a/N + typed deny reason; policy-file
|
|
34
|
-
asks degrade to y/N; git-risk warning + sidecar reason render), plan review
|
|
35
|
-
(ok / 改 …), `/resume` picker, `/rewind` (text-routed, list lands as a
|
|
36
|
-
notice), `/clear` confirm, `/help` from the live command list.
|
|
37
|
-
- **Status bar** — `wudao · <session8> │ mode │ ctx N/M ⚠ │ cache % │ ▣ d/t │
|
|
38
|
-
bg n/m │ sidecar N │ 🛡✕` (absent segments omitted). The server-side
|
|
39
|
-
shutdown path terminates sockets and aborts the in-flight run, so Ctrl+C
|
|
40
|
-
exits `wudao ui` promptly even with a connected tab and a live run (the
|
|
41
|
-
browser then shows the reconnect flow instead of a hung 1006).
|
|
42
|
-
- **Connection** — reconnect banner with capped backoff (1s → 2s → 4s → 8s →
|
|
43
|
-
16s → 30s, **8 attempts max**); the re-run auth replays the full history
|
|
44
|
-
(`reset:true`) and restores the surface. 4401 stops (bad token); 4000
|
|
45
|
-
retries (the other tab may close). Past the cap the banner turns terminal —
|
|
46
|
-
`连接已断开 — server 可能已退出,重启 wudao ui 后点击重连` — with a manual
|
|
47
|
-
重连 button. While offline the send control disables (the draft is kept)
|
|
48
|
-
and mode clicks queue client-side (latest wins) and flush on reconnect — a
|
|
49
|
-
click on a dead socket never surfaces an error toast.
|
|
50
|
-
|
|
51
|
-
Terminal-dark theme keyed by the TUI's ink names (`cli/src/tui/theme.ts`),
|
|
52
|
-
monospace, responsive (hints/status shrink under 640px).
|
|
53
|
-
|
|
54
|
-
## Layout
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
src/
|
|
58
|
-
protocol.ts PROTOCOL.md mirror + WudaoClient (store + reconnect)
|
|
59
|
-
use-ui.ts useSyncExternalStore adapter
|
|
60
|
-
input-state.ts the reused M44 input-machine rules (history, Enter, caret)
|
|
61
|
-
slash.ts slash menu + /help rules (TUI mirror)
|
|
62
|
-
frontend-commands.ts the frontend-owned command router (exit/clear/help/resume)
|
|
63
|
-
markdown.tsx block/inline grammar + fenced-code render
|
|
64
|
-
highlight.ts zero-dep per-line tokenizer (why: highlight.js ~1MB vs a
|
|
65
|
-
fenced-code contract the TUI itself serves per-line)
|
|
66
|
-
diff.ts / board.ts / log.ts hunk math, ☑◐☐ marks, display helpers
|
|
67
|
-
components/ App, HistoryList, LiveArea, StatusBar, InputBox,
|
|
68
|
-
PermissionModal, AskUserCards, PlanReview, ResumePicker,
|
|
69
|
-
ClearConfirm
|
|
70
|
-
tests/ fake-WS protocol round-trips, input-machine/slash rules,
|
|
71
|
-
jsdom component + App interaction suites
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Known v1 gaps (protocol, not UI)
|
|
75
|
-
|
|
76
|
-
- **No model label** — the state snapshot has no model field, so the status
|
|
77
|
-
head is `wudao · <session8>` (the TUI shows the provider label).
|
|
78
|
-
- **`/clear` is view-level** — protocol v1 has no driver-clear op; the saved
|
|
79
|
-
session persists (a reconnect replay or `/resume` restores it).
|
|
80
|
-
- **`a` (allow-this-session) answers allow-once** — answerPermission carries
|
|
81
|
-
only `{allow, reason}`; the TUI's client-side session-allowlist rule has no
|
|
82
|
-
op counterpart.
|
|
83
|
-
- **ask_user has no trigger** — `wudao ui` leaves the tool fail-closed
|
|
84
|
-
unwired and the protocol has no ask frame; `AskUserCards` is component-
|
|
85
|
-
complete and tested for the v1.1 seam.
|
|
86
|
-
- **Plugin/extension commands** — a `"frontend"` submit outcome (their
|
|
87
|
-
execution is caller-owned) shows an honest notice; the templates cannot be
|
|
88
|
-
expanded over v1.
|
|
7
|
+
- MIT license.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{color-scheme:dark}[data-theme=light]{color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%}html,body{overflow:hidden}body{margin:0;background:var(--bg);color:var(--text-1);transition:background-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease);font-family:var(--font);font-size:14px;line-height:1.65}:focus-visible{outline:1.5px solid var(--accent);outline-offset:2px}:focus:not(:focus-visible){outline:none}html.input-pointer :focus-visible{outline:none;box-shadow:none}button,.sb-i,.sb-search,.chip,.icobtn,a{transition:background-color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease),opacity var(--dur-fast) var(--ease)}.app{display:flex;flex-direction:column;height:100%}.topbar{height:34px;flex:none;display:flex;align-items:center;gap:var(--sp-1);padding-left:var(--sp-3);padding-right:var(--sp-3);border-bottom:1px solid var(--hair-1);background:none;-webkit-app-region:drag}[data-shell=desktop] .topbar{padding-left:84px}.topbar .sp{flex:1;min-width:0;display:flex;align-items:center;gap:var(--sp-2)}.tb-name{font-size:var(--fs-ui);color:var(--text-1);font-weight:var(--fw-medium);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tb-run{display:inline-flex;align-items:center;flex:none;gap:var(--sp-1);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3);white-space:nowrap}.tb-run .ok{color:var(--ok)}.icobtn{width:26px;height:26px;flex:none;border-radius:var(--radius-sm);border:0;background:transparent;color:var(--text-3);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-ui);line-height:1;padding:0;-webkit-app-region:no-drag}.icobtn:hover{background:var(--surface);color:var(--text-1)}.ic{display:inline-block;vertical-align:-.14em;flex:none}.ic-warn{color:var(--warn)}.ic-danger{color:var(--danger)}.chat{max-width:calc(var(--content-max) + 32px);width:100%;margin:0 auto;flex:1;overflow-y:auto;padding:var(--sp-2) var(--sp-4);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:var(--sp-2)}.entry{white-space:normal}.entry-gap{min-height:var(--sp-2)}.history-hydrate-sentinel{display:block;padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-2);border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);text-align:center;cursor:pointer;user-select:none}.history-hydrate-sentinel:hover,.history-hydrate-sentinel:focus-visible{background:var(--hover);outline:none}.msg-user{display:flex;justify-content:flex-end;margin-top:var(--sp-3)}.msg-user .bub{background:var(--bubble-user-bg);color:var(--bubble-user-ink);border-radius:var(--radius-bubble);padding:10px 14px;max-width:78%;font-size:var(--fs-body);line-height:var(--lh-body);overflow-wrap:anywhere}.msg-a{display:flex;flex-direction:column}.msg-sig{display:flex;align-items:center;gap:var(--sp-1);margin-bottom:var(--sp-1);font-size:var(--fs-ui);font-weight:var(--fw-strong);color:var(--text-2)}.sig-glyph{width:16px;height:16px;border-radius:var(--radius-sm);background:var(--surface-2);color:var(--accent);display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-caption);font-weight:var(--fw-strong)}.sig-avatar{flex:0 0 auto;width:16px;height:16px;background-size:200% auto;background-position:0 center;background-repeat:no-repeat}[data-pet-skin=default] .sig-avatar{background-image:url(/pet/skin-default.png)}[data-pet-skin=sakura] .sig-avatar{background-image:url(/pet/skin-sakura.png)}[data-pet-skin=lake] .sig-avatar{background-image:url(/pet/skin-lake.png)}[data-pet-skin=honey] .sig-avatar{background-image:url(/pet/skin-honey.png)}[data-pet-skin=power] .sig-avatar{background-image:url(/pet/skin-power.png)}.hero .logo,.connect-card .logo{width:64px;height:40px;background-size:200% auto;background-position:0 center;background-repeat:no-repeat;background-image:url(/pet/skin-default.png)}[data-pet-skin=default] .hero .logo,[data-pet-skin=default] .connect-card .logo{background-image:url(/pet/skin-default.png)}[data-pet-skin=sakura] .hero .logo,[data-pet-skin=sakura] .connect-card .logo{background-image:url(/pet/skin-sakura.png)}[data-pet-skin=lake] .hero .logo,[data-pet-skin=lake] .connect-card .logo{background-image:url(/pet/skin-lake.png)}[data-pet-skin=honey] .hero .logo,[data-pet-skin=honey] .connect-card .logo{background-image:url(/pet/skin-honey.png)}[data-pet-skin=power] .hero .logo,[data-pet-skin=power] .connect-card .logo{width:40px;background-image:url(/pet/skin-power.png)}.reply-card{background:none;border:0;border-radius:0;padding:0;font-size:var(--fs-body);line-height:var(--lh-body);color:var(--text-1)}.reply-card .reply-meta{margin-top:var(--sp-3);padding-top:var(--sp-2);border-top:1px solid var(--hair-1);font-size:var(--fs-caption);color:var(--text-3)}.msg-user{flex-wrap:wrap}.msg-user .img-rail{display:flex;justify-content:flex-end;gap:var(--sp-2);width:100%}.img-bub{width:132px;height:88px;object-fit:cover;border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--surface-2);display:inline-block}.img-bub.pending{opacity:.5}.img-bub.err{display:inline-grid;place-items:center;color:var(--danger);font-size:var(--fs-ui)}.entry-notice{display:flex;flex-direction:column;align-items:center}.notice-bub{display:inline-flex;align-items:center;gap:var(--sp-1);background:var(--surface-2);color:var(--text-2);border-radius:var(--radius-md);padding:var(--sp-1) var(--sp-3);font-size:var(--fs-caption);line-height:var(--lh-caption);max-width:78%;overflow-wrap:anywhere;text-align:center;white-space:pre-wrap}.notice-bub[data-variant=warn]{color:var(--warn)}.notice-bub[data-variant=ok]{color:var(--ok)}.notice-exp{display:inline-flex;padding:0;border:0;background:none;color:var(--text-3);cursor:pointer;flex:none}.notice-detail{background:var(--surface-2);color:var(--text-2);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-ui);line-height:var(--lh-ui);max-width:78%;max-height:220px;overflow-y:auto;margin-top:var(--sp-1);white-space:pre-wrap;overflow-wrap:anywhere;text-align:left}.msg-inject .sig-glyph{color:var(--text-2)}.inject-head{display:flex;align-items:center;gap:var(--sp-1);width:100%;border:0;background:none;padding:0;text-align:left;font:inherit}button.inject-head{cursor:pointer}.inject-head .inject-line{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);font-size:var(--fs-ui);line-height:var(--lh-ui)}.inject-head .inject-chev{display:inline-flex;flex:none;color:var(--text-3)}.reply-card .notice-detail{margin-top:var(--sp-2);max-width:none}.entry-error{color:var(--danger);white-space:pre-wrap}.entry-error-hint{color:var(--text-3);font-size:var(--fs-ui);margin-top:var(--sp-1);display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.entry-divider{color:var(--text-2);user-select:none}.md{display:flex;flex-direction:column;gap:.35rem;overflow-wrap:anywhere}.md-heading{font-weight:var(--fw-strong)}.md-heading[data-level="1"],.md-heading[data-level="2"]{font-size:var(--fs-title)}.md-table{display:block;overflow-x:auto;border-collapse:collapse;font-size:var(--fs-ui)}.md-table th,.md-table td{border-width:1px 0 0 1px;border-style:solid;border-color:var(--hair-1);padding:var(--sp-1) var(--sp-2);text-align:left;white-space:nowrap}.md-table th{background:var(--surface-2);color:var(--text-1);font-weight:var(--fw-strong)}.md-table td{color:var(--text-2)}.md-list{display:flex;flex-direction:column;gap:.1rem;padding-left:1.1rem}.md-quote{color:var(--text-2);padding-left:.8rem;border-left:2px solid var(--hair-1);white-space:pre-wrap}.md-para{white-space:pre-wrap}.md code.inline,.msg-a code.inline{background-color:var(--surface-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:1px 5px;font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);color:var(--tok-str)}.md .bold{font-weight:700}.md a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.pre{position:relative;background:var(--surface);border:1px solid var(--hair-1);border-radius:var(--radius-md);overflow:hidden}.pre-head{display:flex;justify-content:space-between;padding:var(--sp-1) var(--sp-3);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3);border-bottom:1px solid var(--hair-1)}.pre-file{overflow-wrap:anywhere}.pre pre{margin:0;overflow-x:auto}.pre code{display:block;padding:var(--sp-2) var(--sp-3);font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);line-height:1.6;color:var(--text-1)}.pre-copy{position:absolute;top:6px;right:6px;border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-3);font-family:var(--mono);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-2);cursor:pointer;opacity:0;transition:opacity var(--dur-fast) var(--ease)}.pre:hover .pre-copy,.pre-copy:focus-visible,.pre-copy.done{opacity:1}.pre-copy.done{color:var(--ok)}.pre.has-pre-head .pre-copy{top:var(--sp-8)}.tok-key{color:var(--tok-key)}.tok-str{color:var(--tok-str)}.tok-com{color:var(--tok-com);font-style:italic}.tok-num{color:var(--tok-num)}.tok-fn{color:var(--tok-fn)}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes sweep{0%{transform:translate(-100%)}to{transform:translate(300%)}}.shimmer{background:linear-gradient(100deg,var(--text-3) 40%,var(--text-1) 50%,var(--text-3) 60%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shimmer var(--dur-shimmer) var(--ease) infinite}.sweep-line{position:relative;overflow:hidden}.sweep-line:after{content:"";position:absolute;inset:0;width:33%;background:linear-gradient(90deg,transparent,transparent 0%,var(--hair-1) 50%,transparent 100%);animation:sweep var(--dur-sweep) var(--ease) infinite}html.glass body{background:transparent}html.glass .sb,html.glass .ide-cell.ide-left,html.glass .set-nav{background-color:transparent;background-image:linear-gradient(180deg,rgb(var(--accent-rgb) / .08),transparent 60%)}html.glass .chat,html.glass .ide-cell.ide-center,html.glass .set-body{background:var(--bg)}.toolcard{display:flex;flex-direction:column;font-family:var(--mono);border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.toolcard .head{display:flex;align-items:center;gap:var(--sp-2);min-height:32px;padding:0 var(--sp-2);border:0;background:none;color:var(--text-2);font:inherit;font-size:var(--fs-ui);font-family:var(--mono);text-align:left;width:100%;cursor:pointer}.toolcard .head:hover{background:var(--surface-2);color:var(--text-1)}.toolcard .mark{color:var(--text-1);flex:none}.toolcard[data-status=ok] .mark{color:var(--ok)}.toolcard[data-status=run] .mark{color:var(--accent)}.toolcard[data-status=err] .mark{color:var(--danger)}.toolcard .name{font-weight:var(--fw-strong);min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toolcard .args{flex:1;color:var(--text-3);font-size:var(--fs-caption);overflow-wrap:anywhere}.toolcard .chev{margin-left:auto;color:var(--text-3);flex:none}.toolcard .result{color:var(--text-2);white-space:pre-wrap;overflow-wrap:anywhere;padding:var(--sp-2) var(--sp-3);border-top:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-caption);line-height:1.6;max-height:132px;overflow-y:auto;animation:fade var(--dur-fast) var(--ease)}.toolcard .result.err{color:var(--danger)}.toolcard.err{border-color:rgb(var(--danger-rgb) / .4)}.toolcard.err .head{color:var(--danger)}.toolgroup{display:flex;flex-direction:column;font-family:var(--mono);border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.toolgroup>.grp-head{color:var(--text-1)}.toolgroup .mark{color:var(--ok)}.toolgroup .name{font-weight:var(--fw-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toolgroup .count,.toolgroup .exp{color:var(--text-2)}.toolgroup .toolcard{border-width:0;border-radius:0;border-top:1px solid var(--hair-1)}.noticegroup{display:flex;flex-direction:column;gap:0;align-items:center}.noticegroup>.grp-head{display:inline-flex;align-items:center;gap:var(--sp-1);width:fit-content;padding:var(--sp-1) var(--sp-3);border:0;background:var(--surface-2);color:var(--text-2);cursor:pointer;font-size:var(--fs-caption);line-height:var(--lh-caption);border-radius:var(--radius-md);max-width:78%;white-space:pre-wrap;overflow-wrap:anywhere;text-align:center}.noticegroup>.grp-head[data-variant=warn] .text{color:var(--warn)}.noticegroup>.grp-head[data-variant=ok] .text{color:var(--ok)}.diff{display:flex;flex-direction:column;font-family:var(--mono)}.diff .path{color:var(--text-1);font-weight:var(--fw-strong);margin-bottom:var(--sp-1)}.diff .del{color:var(--danger);background:rgb(var(--danger-rgb) / .1);white-space:pre-wrap}.diff .add{color:var(--ok);background:rgb(var(--ok-rgb) / .1);white-space:pre-wrap}.diff .ctx{color:var(--text-2);white-space:pre-wrap}.diff .del .wchg{background:rgb(var(--danger-rgb) / .3);border-radius:var(--radius-sm)}.diff .add .wchg{background:rgb(var(--ok-rgb) / .3);border-radius:var(--radius-sm)}.fv-chip{border:none;background:transparent;padding:0;font:inherit;color:var(--accent);cursor:pointer;text-decoration:underline dotted}.fv-chip:hover{color:var(--text-1)}.fv-btn{border:1px solid var(--hair-2);border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-2);cursor:pointer}.fv-btn:hover:not(:disabled){color:var(--text-1);background:var(--surface-2)}.fv-btn:disabled{opacity:.5;cursor:default}.fv-btn.primary{color:var(--accent);border-color:var(--accent)}.fv-btn.primary:hover:not(:disabled){color:var(--accent)}.editor-root{flex:1;min-height:0;display:flex;flex-direction:column}.fv-edit{flex:none;display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-3);border-bottom:1px solid var(--hair-1)}.fv-edit .grow{flex:1}.fv-edit-path{color:var(--text-3);font-size:var(--fs-caption)}.fv-conflict{flex:none;display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-3);color:var(--warn);background:rgb(var(--warn-rgb) / .08);border-bottom:1px solid var(--hair-1)}.fileviewer .fv-saved{flex:none;padding:var(--sp-1) var(--sp-3);color:var(--ok);border-bottom:1px solid var(--hair-1)}.editor-wrap{flex:1;min-height:0;display:flex;overflow:hidden}.editor-gutter{flex:none;overflow:hidden;min-width:3ch;text-align:right;color:var(--text-3);font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);line-height:1.6;padding:var(--sp-1) var(--sp-2) 0 var(--sp-3);user-select:none}.editor-stack{position:relative;flex:1;min-width:0;overflow:hidden}.editor-hl,.editor-ta{font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);line-height:1.6;tab-size:2;margin:0;padding:var(--sp-1) var(--sp-2) var(--sp-2) 0;white-space:pre;word-break:normal;overflow-wrap:normal}.editor-hl{position:absolute;inset:0;overflow:hidden;color:var(--text-1);pointer-events:none}.editor-ta{position:absolute;inset:0;overflow:auto;resize:none;border:none;outline:none;background:transparent;color:transparent;caret-color:var(--text-1)}.board{display:flex;flex-direction:column}.board .head{color:var(--text-2);margin-bottom:var(--sp-1)}.board .done{color:var(--ok)}.board .wip{color:var(--warn)}.board .todo{color:var(--text-2)}.todo{display:flex;flex-direction:column;gap:var(--sp-1)}.todo-bar{height:2px;background:var(--ok);transition:width var(--dur-med) var(--ease)}.todo-item{display:flex;align-items:center;gap:var(--sp-2);min-width:0;font-size:var(--fs-ui);color:var(--text-2)}.todo-item>span:last-child{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.todo-box{flex:none;width:16px;height:16px;border-radius:var(--radius-sm);border-width:1px;border-style:solid;border-color:var(--hair-2);display:inline-flex;align-items:center;justify-content:center;color:var(--ok);background:none}.todo-box.done{background:rgb(var(--ok-rgb) / .12);border-color:rgb(var(--ok-rgb) / .3)}.statusline{height:28px;flex:none;display:flex;align-items:center;gap:var(--sp-4);padding:0 var(--sp-4);border-top:1px solid var(--hair-1);font-size:var(--fs-caption);font-family:var(--mono);color:var(--text-3);user-select:none;white-space:nowrap;overflow:hidden}.statusline .warn{color:var(--warn)}.statusline .board,.statusline .cache{color:var(--ok)}.statusline .seg-branch{flex:none;border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);color:var(--text-3)}.statusline .seg-goal{min-width:0;overflow:hidden;text-overflow:ellipsis}.statusline .seg-busy{margin-left:auto;color:var(--accent);flex:none}.statusline[data-stale]{opacity:.55}.banner{padding:var(--sp-1) var(--sp-4);background:rgb(var(--warn-rgb) / .12);color:var(--warn);border-bottom:1px solid var(--hair-1);font-size:var(--fs-ui)}.banner .action{margin-left:var(--sp-2)}.banner.quiet{padding:var(--sp-1) var(--sp-3);background:none;color:var(--text-3);font-size:var(--fs-caption);font-family:var(--mono)}.btnrow{display:flex;gap:var(--sp-2);flex-wrap:wrap}button.wudao{font:inherit;background:var(--surface);color:var(--text-1);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:var(--sp-1) var(--sp-3);cursor:pointer}button.wudao:hover{border-color:var(--hair-2);color:var(--text-1)}button.wudao.primary{border-color:transparent;background:var(--accent);color:var(--accent-ink)}button.wudao.primary:hover:not(:disabled){filter:brightness(1.08)}button.wudao.primary:disabled{background:var(--accent);color:var(--accent-ink)}button.wudao.danger{border-color:var(--danger);color:var(--danger)}button.wudao:disabled{opacity:.45;cursor:default}.optioncards{display:flex;flex-direction:column;gap:var(--sp-2);overflow-y:auto}.optioncard{text-align:left;font:inherit;background:var(--surface);color:var(--text-1);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-3);cursor:pointer}.optioncard:hover{border-color:var(--hair-2)}.optioncard .desc{color:var(--text-2);display:block}.picker{display:flex;flex-direction:column;gap:var(--sp-1);max-height:50vh;overflow-y:auto}.pickrow{display:flex;gap:var(--sp-2);align-items:baseline;text-align:left;font-family:var(--mono);color:var(--text-1);background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);padding:var(--sp-1) var(--sp-2);cursor:pointer}.pickrow:hover{background:var(--surface)}.pickrow.cur{border-color:var(--accent);background:var(--surface)}.pickrow .rank,.pickrow .meta{color:var(--text-2)}.pickrow:disabled{cursor:not-allowed;opacity:.55}.pop-in{animation:pop var(--dur-med) var(--ease)}.scrim{position:fixed;inset:0;background:var(--overlay);display:flex;align-items:center;justify-content:center;padding:var(--sp-4);animation:fade var(--dur-med) var(--ease)}@keyframes fade{0%{opacity:0}}.modal-card{background:var(--surface);border:0;box-shadow:var(--elev-3);border-radius:var(--radius-lg);max-width:480px;width:calc(100% - var(--sp-8));overflow:hidden}.menu{background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;box-shadow:var(--elev-2);border-radius:var(--radius-lg);padding:var(--sp-1);min-width:180px}.menu-item{display:flex;align-items:center;height:26px;padding:0 var(--sp-2);border-radius:var(--radius-sm);font-size:var(--fs-ui);color:var(--text-2)}.menu-item:hover{background:var(--surface-2);color:var(--text-1)}.menu-kbd{margin-left:auto;font-family:var(--mono);font-size:var(--fs-caption);color:var(--text-3)}.scrim{z-index:var(--z-modal)}.modal-card{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-4);max-height:calc(100dvh - var(--sp-8))}.modal-card h3{margin:0;font-size:var(--fs-title)}.modal-card .warn{color:var(--warn)}.modal-card .muted{color:var(--text-2)}.menu.ctx{--ctx-cap: 180px;--ctx-w: 224px;position:fixed;z-index:var(--z-ctx-menu);display:flex;flex-direction:column;min-width:var(--ctx-w);max-width:var(--ctx-w);left:min(var(--ctx-x, 0px),calc(100vw - var(--ctx-w) - var(--sp-4)));top:min(var(--ctx-y, 0px),calc(100dvh - var(--ctx-cap) - var(--sp-4)));max-height:var(--ctx-cap);overflow-y:auto;animation:pop var(--dur-fast) var(--ease)}button.menu-item{border:0;background:transparent;font:inherit;font-size:var(--fs-ui);text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;width:100%;flex:none}.planboard{border:1px solid rgb(var(--accent-rgb) / .35);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3)}.planboard .label{color:var(--accent);font-weight:var(--fw-strong)}.planboard .body{white-space:pre-wrap;margin:var(--sp-1) 0 var(--sp-2)}.inputarea{flex:none;display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) 0 var(--sp-1)}.composer{max-width:calc(var(--content-max) + 32px);width:100%;margin:0 auto;background:var(--surface);border:0;border-radius:var(--radius-md);box-shadow:var(--elev-2);padding:var(--sp-2) var(--sp-3) var(--sp-2);display:flex;flex-direction:column}.composer-ta{width:100%;font-family:var(--font);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--text-1);padding:var(--sp-2) 0 var(--sp-1);background:none;border:0;outline:0;resize:none;min-height:22px;max-height:40vh}.composer-ta::placeholder{color:var(--text-3)}.composer-tools{display:flex;align-items:center;gap:var(--sp-1);flex-wrap:wrap}.composer-right{margin-left:auto;display:flex;align-items:center;gap:var(--sp-2)}.chip{display:inline-flex;align-items:center;gap:var(--sp-1);height:24px;padding:0 calc(var(--sp-2) + 1px);border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--bg);font-family:var(--font);font-weight:var(--fw-strong);font-size:calc(var(--fs-ui) - 1px);color:var(--text-2);cursor:pointer;white-space:nowrap;transition:opacity var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}.chip:hover:not(:disabled):not(.on):not(.sel){border-color:var(--hair-2);color:var(--text-1)}.chip.on,.chip.sel{background:var(--surface-2);border-color:var(--hair-2);color:var(--text-1)}.chip:disabled{opacity:.5;cursor:default}.chip.model{max-width:12rem}.chip.model .chip-label{min-width:0;overflow:hidden;text-overflow:ellipsis}.chip.model .caret{flex:none}.composer .chip{background:transparent;border-color:transparent}.composer .chip:hover:not(:disabled):not(.on):not(.sel){background:var(--surface-2);border-color:transparent;color:var(--text-1)}.composer .chip.on,.composer .chip.sel{background:var(--surface-2);border-color:var(--hair-2);color:var(--text-1)}.composer .chip.interrupt{color:var(--danger)}.composer .chip.interrupt:hover:not(:disabled){background:rgb(var(--danger-rgb) / .1);border-color:rgb(var(--danger-rgb) / .35);color:var(--danger)}.send{width:34px;height:34px;flex:none;border-radius:50%;border:0;background:var(--accent);color:var(--accent-ink);display:inline-flex;align-items:center;justify-content:center;padding:0;cursor:pointer}.send:hover:not(:disabled){filter:brightness(1.08)}.send.off{opacity:.4;pointer-events:none}.send:disabled{cursor:default}.pop{position:relative;display:inline-flex}.pop .menu{position:absolute;bottom:40px;left:0;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;border-radius:var(--radius-lg);padding:var(--sp-2);min-width:224px;display:flex;flex-direction:column;gap:var(--sp-1);z-index:var(--z-float);box-shadow:var(--elev-2);animation:pop var(--dur-fast) var(--ease)}.pop .mi{display:flex;gap:var(--sp-2);align-items:center;padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-sm);font-family:var(--font);font-size:var(--fs-ui);color:var(--text-2);background:transparent;border:0;cursor:pointer;text-align:left;white-space:nowrap}.pop .mi:hover{background:var(--surface-2)}.pop .mi.on{background:var(--accent-weak);color:var(--accent);font-weight:var(--fw-strong)}.pop .mi .confirm{color:var(--warn);font-size:var(--fs-caption);white-space:normal}.pop .mi .warned{font-size:var(--fs-caption);color:var(--danger);margin-left:var(--sp-1);border:1px solid rgb(var(--danger-rgb) / .35);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.pop .mi .msub{margin-left:auto;font-size:var(--fs-caption);color:var(--text-2)}.pop .menu.model-menu{min-width:max-content;max-width:min(40rem,92vw);padding:0;gap:0;overflow:hidden;display:flex;flex-direction:row;align-items:stretch}.pop .menu.model-menu .mroot,.pop .menu.model-menu .mpane{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-2);max-height:min(24rem,60vh);overflow-y:auto;overscroll-behavior:contain}.pop .menu.model-menu .mroot{min-width:11rem;max-width:13rem;border-right:1px solid var(--hair-1)}.pop .menu.model-menu .mpane{min-width:12rem}.pop.down .menu{bottom:auto;top:calc(100% + 4px)}.pop .menu.model-menu .mgroup{padding:var(--sp-1) var(--sp-3);font-size:var(--fs-caption);letter-spacing:.04em;text-transform:uppercase;color:var(--text-3)}.pop .menu.model-menu .mgroup:not(:first-child){margin-top:var(--sp-1);padding-top:var(--sp-1);border-top:1px solid var(--hair-1)}.pop .menu.model-menu .mi.mprov .mlabel{font-weight:var(--fw-strong)}.pop .menu.model-menu .mi.mprov.mfoc:not(.on){background:var(--surface-2)}.pop .menu.model-menu .mi.mrec{border-bottom:1px solid var(--hair-1);border-bottom-left-radius:0;border-bottom-right-radius:0}.pop .menu .menu-sep{height:1px;background:var(--hair-1);margin:var(--sp-1) 0}.pop .mf{display:flex;align-items:center;width:100%;padding:var(--sp-1) var(--sp-3);border:0;border-top:1px solid var(--hair-1);margin-top:var(--sp-1);border-radius:var(--radius-sm);font-family:var(--font);font-size:var(--fs-caption);color:var(--text-2);background:transparent;cursor:pointer;text-align:left;white-space:nowrap}.pop .mf:hover{background:var(--surface-2);color:var(--text-1)}.pop .menu.lang-menu{min-width:max-content}.pop .lang-head{padding:var(--sp-1) var(--sp-3);font-size:var(--fs-caption);letter-spacing:.04em;color:var(--text-3);user-select:none}.pop .lang-head+.mi{margin-top:0}textarea.wudao-input:focus{border-color:var(--accent)}.hint{color:var(--text-2);font-size:var(--fs-ui);user-select:none}.inputarea>.hint{text-align:center}.composer:focus-within{box-shadow:0 0 0 1px rgb(var(--accent-rgb) / .55),var(--elev-2-soft)}.composer.dragover{box-shadow:0 0 0 1px rgb(var(--accent-rgb) / .8),var(--elev-2-soft)}.composer .img-rail{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-2)}.img-thumb{position:relative;width:48px;height:48px;flex:none;border-radius:var(--radius-sm);border:1px solid var(--hair-1);overflow:hidden;background:var(--surface-2)}.img-thumb img{width:100%;height:100%;object-fit:cover;display:block}.img-thumb .rm{position:absolute;top:0;right:0;width:16px;height:16px;display:grid;place-items:center;padding:0;border:0;border-radius:0 0 0 var(--radius-sm);background:rgb(var(--bg-rgb) / .72);color:var(--text-1);cursor:pointer}.img-thumb .rm:hover{color:var(--danger)}.img-thumb .rm:disabled{cursor:default;opacity:.6}.chip.attach .n{font-size:var(--fs-caption);color:var(--text-1)}.img-notice{color:var(--warn)}.composer .file-rail{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-2)}.file-card{display:flex;align-items:center;gap:var(--sp-2);max-width:260px;min-height:48px;padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--surface-2)}.file-card .glyph{flex:none;font-size:16px;line-height:1}.file-card .meta{display:flex;flex-direction:column;min-width:0}.file-card .name{font-size:var(--fs-ui);color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-card .size{font-size:var(--fs-caption);color:var(--text-3)}.file-card .rm{flex:none;width:16px;height:16px;display:grid;place-items:center;padding:0;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-2);cursor:pointer}.file-card .rm:hover{color:var(--danger)}.file-card .rm:disabled{cursor:default;opacity:.6}.chip.attachfile .n{font-size:var(--fs-caption);color:var(--text-1)}.hist-file-rail{display:flex;flex-wrap:wrap;gap:var(--sp-1);justify-content:flex-end;margin-bottom:var(--sp-1)}.hist-file-chip{display:inline-flex;align-items:center;gap:var(--sp-1);max-width:240px;padding:0 var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--surface-2);font-size:var(--fs-caption);color:var(--text-2)}.hist-file-chip .name{color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hist-file-chip .size{color:var(--text-3);flex:none}.slashmenu{background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:1px solid var(--hair-1);border-radius:var(--radius-lg);padding:var(--sp-1) 0;max-height:12rem;overflow-y:auto;animation:pop var(--dur-fast) var(--ease)}.slashmenu .row{padding:0 var(--sp-2);white-space:pre;font-family:var(--mono)}.slashmenu .row.sel{color:var(--accent)}.slashmenu .row .args,.slashmenu .row .desc{color:var(--text-2)}.slashmenu .row.sel .args,.slashmenu .row.sel .desc{color:var(--accent);opacity:.8}.slashmenu .more{color:var(--text-2);padding:0 var(--sp-2)}.connect-shell{flex:1;display:grid;place-items:center;padding:var(--sp-4)}.connect-card{display:flex;flex-direction:column;align-items:center;gap:var(--sp-3);background:var(--surface);border:0;border-radius:var(--radius-lg);box-shadow:var(--elev-2);padding:var(--sp-8) var(--sp-6);text-align:center;max-width:400px}.connect-card .connect-title{color:var(--text-1);font-size:var(--fs-title)}.connect-card .connect-row{display:flex;align-items:center;gap:var(--sp-2)}.connect-card .connect-row .spin{color:var(--text-2);flex:none}.connect-card .connect-msg{color:var(--text-2);font-size:var(--fs-ui)}.connect-card .connect-msg.err{color:var(--danger)}.connect-card .connect-meta{color:var(--text-3);font-family:var(--mono);font-size:var(--fs-caption)}.simple{display:flex;flex-direction:column;flex:1;min-height:0;padding:var(--sp-3) var(--sp-8) var(--sp-4)}.simple .chat{flex:1;padding-inline:0}.simple .chat{max-width:none;margin:0;width:100%}.simple .simple-composer{width:100%}.simple .inputarea{width:100%;padding-inline:0}.simple .composer{max-width:none;margin:0;width:100%;margin-top:var(--sp-3)}.simple .chat{scrollbar-width:none}.simple .chat::-webkit-scrollbar{display:none}.act{border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.act-row{display:flex;align-items:center;gap:var(--sp-2);height:32px;padding:0 var(--sp-2);border:0;background:none;color:var(--text-2);font:inherit;font-size:var(--fs-ui);text-align:left;width:100%;cursor:pointer}.act-row:hover{background:var(--surface-2);color:var(--text-1)}.act-row[data-status=ok] .act-st{color:var(--ok)}.act-row[data-status=run] .act-st{color:var(--accent)}.act-row[data-status=err] .act-st,.act-row[data-status=err],.act-row[data-status=err] .act-tail{color:var(--danger)}.act-verb,.act-file,.act-tail{font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px}.act-file{color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.act-tail{margin-left:auto;color:var(--text-3);min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.act-tail-line{padding:var(--sp-1) var(--sp-3) var(--sp-1) calc(var(--sp-3) + var(--sp-4));font-family:var(--mono);font-size:var(--fs-caption);color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.act-chev{color:var(--text-3);flex:none;transition:transform var(--dur-fast) var(--ease)}.act[data-open=true] .act-chev{transform:rotate(180deg)}.act-file-card{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-top:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--text-2)}.act-file-icon{flex:none;user-select:none;color:var(--text-2)}.act-file-name{color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.act-file-size{color:var(--text-3);flex:none}.act-file-reveal{margin-left:auto;flex:none;border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-3);cursor:pointer}.act-file-reveal:hover{border-color:var(--hair-2);color:var(--text-1)}.act-body{border-top:1px solid var(--hair-1);padding:var(--sp-2) var(--sp-3);font-family:var(--mono);font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--text-2);max-height:13.2em;overflow-y:auto;animation:fade var(--dur-fast) var(--ease)}.act .act-body .block{display:flex;flex-direction:column;gap:0}.act .act-body .blocklabel{color:var(--text-3);font-size:var(--fs-caption);user-select:none}.act .act-body .block.err .blocktext{color:var(--danger)}.act .act-body .blocktext{white-space:pre-wrap;overflow-wrap:anywhere}.activity-foot{color:var(--text-3);font-size:var(--fs-caption);user-select:none}.activity-toggle{display:block;margin-top:var(--sp-1);border:0;background:transparent;color:var(--text-3);font-size:var(--fs-caption);padding:0;cursor:pointer;user-select:none}.activity-toggle:hover{color:var(--accent)}.act.err{border-color:rgb(var(--danger-rgb) / .4)}.spin{animation:spin var(--dur-slow) linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.panel{display:flex;flex-direction:column;border-left-width:1px;border-left-style:solid;border-left-color:var(--hair-1)}.panel-head{display:flex;align-items:center;justify-content:space-between;height:34px;padding-left:var(--sp-3);padding-right:var(--sp-3);border-bottom:1px solid var(--hair-1)}.panel-title{font-size:var(--fs-ui);font-weight:var(--fw-medium);color:var(--text-1)}.panel-count{font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.panel-list{overflow-y:auto}.panel-list>*+*{border-top:1px solid var(--hair-1)}.panel-list>.act{border-width:0;border-radius:0;background:none}.panel-list .act-row{cursor:default}.panel-list>details.reasoning,.panel-list>.steer{padding:var(--sp-1) var(--sp-2)}.panel-list .act-tail.gating{color:var(--warn)}.live-answer{margin-top:var(--sp-2)}.live-answer .caret{color:var(--accent);animation:blink 1s steps(1) infinite}@keyframes blink{50%{opacity:0}}details.reasoning{color:var(--text-2)}details.reasoning>summary{cursor:pointer;user-select:none;list-style:none}details.reasoning>summary::-webkit-details-marker{display:none}details.reasoning>summary:hover{color:var(--text-1)}details.reasoning>summary:before{content:"▸ "}details.reasoning[open]>summary:before{content:"▾ "}details.reasoning .body{white-space:pre-wrap;border-left:2px solid var(--hair-1);padding-left:var(--sp-2);margin-top:var(--sp-1);max-height:220px;overflow-y:auto}.reply-card>details.reasoning{margin-bottom:var(--sp-2)}.steer{color:var(--text-2)}.simple-error{display:flex;flex-direction:column;gap:var(--sp-1);border-width:1px;border-style:solid;border-color:rgb(var(--danger-rgb) / .4);border-radius:var(--radius-md);padding:var(--sp-2)}.simple-error .err-head{color:var(--danger);font-weight:700}.simple-error .err-text{color:var(--text-1);white-space:pre-wrap;overflow-wrap:anywhere}.simple-error .err-recovery{display:flex;gap:var(--sp-2);align-items:baseline;flex-wrap:wrap;color:var(--warn)}.simple-error .err-recovery .label{font-weight:var(--fw-strong);user-select:none}.approval{width:min(calc(var(--content-max) + 32px),calc(100% - 2.5rem));margin:var(--sp-2) auto var(--sp-4);background:rgb(var(--warn-rgb) / .07);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-md);padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;max-height:calc(100% - 3.5rem);overflow:hidden}.simple .approval{width:calc(100% - 2.5rem);margin-left:var(--sp-2);margin-right:var(--sp-2)}.approval .ap-scroll{display:flex;flex-direction:column;min-height:0;overflow-y:auto}.approval .strip,.permission-card .strip{font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-caption);color:var(--warn);letter-spacing:.3px;margin-bottom:var(--sp-2)}.approval .why{font-size:var(--fs-ui);font-weight:var(--fw-strong);color:var(--text-1);margin-bottom:var(--sp-1);overflow-wrap:anywhere}.approval .warn,.approval .sidecar{color:var(--warn);font-size:var(--fs-ui);overflow-wrap:anywhere}.approval .btns{display:flex;gap:var(--sp-3);justify-content:flex-end}.approval .btns button{font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-ui);padding:var(--sp-2) var(--sp-4);border-radius:var(--radius-sm);cursor:pointer}.approval .btns button:disabled{opacity:.5;cursor:default}.approval .deny{border:1px solid var(--hair-2);background:var(--surface);color:var(--text-2)}.approval .deny:hover:not(:disabled){color:var(--danger);border-color:var(--danger)}.approval .allow{border:0;background:var(--accent);color:var(--accent-ink)}.approval .allow:hover:not(:disabled){filter:brightness(1.08)}.approval-note{text-align:center;font-size:var(--fs-caption);color:var(--text-3);margin-top:var(--sp-2)}.approval.agent-root{background:rgb(var(--accent-rgb) / .06);border-color:rgb(var(--accent-rgb) / .3)}.approval.agent-root .strip{color:var(--accent)}.approval.agent-root .deny:hover:not(:disabled){color:var(--text-1);border-color:var(--text-3)}.permission-card{width:min(calc(var(--content-max) + 32px),calc(100% - 2.5rem));margin:var(--sp-2) auto var(--sp-4);background:rgb(var(--warn-rgb) / .07);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-md);padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2);max-height:calc(100dvh - var(--sp-8))}.simple .permission-card{width:calc(100% - 2.5rem);margin-left:var(--sp-2);margin-right:var(--sp-2)}.permission-card h3{margin:0;font-size:var(--fs-title)}.permission-card .warn{color:var(--warn);overflow-wrap:anywhere}.permission-card .muted{color:var(--text-2)}.permission-card .pc-scroll{display:flex;flex-direction:column;gap:var(--sp-2);min-height:0;overflow-y:auto}.approval .cmd,.permission-card .cmd{font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-2);background:var(--surface-2);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);max-height:76px;overflow:auto;margin:var(--sp-2) 0;white-space:pre-wrap;overflow-wrap:anywhere}.approval .spoof,.permission-card .spoof{display:flex;flex-direction:column;gap:var(--sp-1);font-size:var(--fs-ui);border-top:1px dashed rgb(var(--warn-rgb) / .35);padding-top:var(--sp-2)}.approval .spoof-title,.permission-card .spoof-title{color:var(--warn);font-weight:var(--fw-strong)}.approval .spoof-row,.permission-card .spoof-row{display:flex;flex-wrap:wrap;gap:var(--sp-1);align-items:baseline}.approval .spoof-key,.permission-card .spoof-key{font-family:var(--mono);color:var(--text-2);overflow-wrap:anywhere}.approval .spoof-badge,.permission-card .spoof-badge{font-family:var(--mono);font-size:var(--fs-caption);color:var(--warn);background:rgb(var(--warn-rgb) / .08);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-sm);padding:0 var(--sp-2);white-space:nowrap}.approval .spoof-more,.permission-card .spoof-more{color:var(--text-3)}.approval .spoof-url,.permission-card .spoof-url{overflow-wrap:anywhere}.approval .spoof-target,.permission-card .spoof-target{font-family:var(--mono);color:var(--warn);overflow-wrap:anywhere}.approval .spoof-note,.permission-card .spoof-note{color:var(--text-3);font-size:var(--fs-caption);padding-left:var(--sp-3)}.permission-card .btnrow{justify-content:flex-end}.permission-card .btnrow button{font-weight:var(--fw-strong);border-radius:var(--radius-sm)}.permission-card .btnrow button.wudao.primary{background:var(--accent);color:var(--accent-ink)}.hero{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-2);flex:1;text-align:center;padding:calc(var(--sp-8) + var(--sp-2)) var(--sp-4);color:var(--text-1)}.hero h1{margin:var(--sp-2) 0 0;font-size:var(--fs-head)}.hero p{margin:0;color:var(--text-3);font-size:var(--fs-ui)}.hero .hero-hint{margin-top:var(--sp-3)}.hero .hero-await{margin-top:var(--sp-3);color:var(--text-2)}.hero .hero-await-name{padding:0;border:none;background:none;color:var(--accent);font:inherit;cursor:pointer}.hero .hero-await-name:hover{text-decoration:underline}.hero .hero-await-name:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}.hero .hero-actions{margin-top:var(--sp-4);display:flex;gap:var(--sp-2)}.hero .hero-act{padding:var(--sp-1) var(--sp-3);border:1px solid var(--hair-2);background:transparent;color:var(--text-2);font:inherit;font-size:var(--fs-ui);border-radius:var(--radius-sm);cursor:pointer;white-space:nowrap}.hero .hero-act:hover{color:var(--accent);border-color:var(--accent)}.hero .hero-act:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap}.recall{font-family:var(--font);font-size:var(--fs-caption);color:var(--text-3);background:none;border:0;padding:0 var(--sp-1);margin-left:var(--sp-2);cursor:pointer;border-radius:var(--radius-sm)}.recall:hover{color:var(--danger)}.recall:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.act-row .detach{font-family:var(--font);font-size:var(--fs-caption);color:var(--text-3);background:none;border:0;padding:0 var(--sp-1);margin-left:auto;cursor:pointer;border-radius:var(--radius-sm);white-space:nowrap}.act-row .detach:hover{color:var(--accent)}.act-row .detach:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ask-card{width:min(calc(var(--content-max) + 32px),calc(100% - 2.5rem));margin:var(--sp-2) auto var(--sp-4);background:rgb(var(--accent-rgb) / .06);border:1px solid rgb(var(--accent-rgb) / .3);border-radius:var(--radius-md);padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2);max-height:calc(100dvh - var(--sp-8))}.ask-card h3{margin:0;font-size:var(--fs-title)}.ask-card .muted{color:var(--text-2)}.turnlive{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) 0}.turnlive .act-row{cursor:default}.turnstatus{display:flex;flex-direction:column;gap:var(--sp-1);color:var(--text-1)}.turnstatus .ts-head{display:flex;align-items:center;gap:var(--sp-2);min-height:16px}.turnstatus .label{font-weight:var(--fw-strong)}.turnstatus .clock{color:var(--text-3)}.turnstatus .queue-line{color:var(--text-2);font-size:var(--fs-ui)}.simple-composer{display:flex;flex-direction:column}.lane-toggle{display:inline-flex;align-items:center;gap:var(--sp-1)}.parked-row{display:inline-flex;gap:var(--sp-1);flex-wrap:wrap}.parked-chip{display:inline-flex;align-items:center;gap:var(--sp-1);height:26px;padding:0 var(--sp-3);color:var(--warn);background:rgb(var(--warn-rgb) / .1);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-sm);font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-caption);max-width:100%}.parked-chip .drop{font:inherit;color:var(--text-3);background:transparent;border:none;padding:0;cursor:pointer}.parked-chip .drop:hover{color:var(--danger)}.composer-right .ctx{position:relative;display:inline-flex;align-items:center;gap:var(--sp-1);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.ctx-btn{font:inherit;background:none;border:0;padding:0;cursor:pointer;display:inline-flex;align-items:center;gap:var(--sp-1)}.ctx-btn:hover{color:var(--text-1)}.ctxmeter-backdrop{position:fixed;inset:0;z-index:calc(var(--z-legend) - 1)}.ctxmeter-legend{position:absolute;bottom:calc(100% + var(--sp-1));right:0;z-index:var(--z-legend);display:flex;flex-direction:column;gap:0;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;box-shadow:var(--elev-1);border-radius:var(--radius-lg);padding:var(--sp-1) var(--sp-2);font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-2);white-space:nowrap}.ctxmeter-legend .warn{color:var(--warn)}.settings-page{flex:1;min-height:0;display:flex;position:relative}.set{display:flex;height:100%;flex:1;min-width:0}.set-nav{width:180px;flex:none;border-right:1px solid var(--hair-1);padding:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-2)}.settings-head{display:flex;align-items:center;justify-content:space-between}.settings-head h3{margin:0;font-size:var(--fs-title)}.settings-receipts{color:var(--warn);display:flex;flex-direction:column;gap:var(--sp-1);white-space:pre-wrap}.settings-receipts>div{display:flex;align-items:flex-start;gap:var(--sp-1)}.settings-receipts>div[data-variant=ok]{color:var(--ok)}.settings-receipts>div[data-variant=info]{color:var(--text-2)}.settings-receipts .ic{flex:none;margin-top:calc(var(--sp-1) / 2)}.set-body{flex:1;min-width:0;overflow-y:auto;scrollbar-gutter:stable;padding:var(--sp-6) var(--sp-8);max-width:calc(var(--content-max) + 32px);margin:0 auto}.set-body>.entry-error,.set-body>.hint{margin-bottom:var(--sp-4)}.settings-pending-ask{margin-bottom:var(--sp-4);padding:var(--sp-2) var(--sp-3);border:1px solid rgb(var(--warn-rgb) / .35);border-radius:var(--radius-sm);background:rgb(var(--warn-rgb) / .1);color:var(--warn);font-size:var(--fs-ui);line-height:var(--lh-ui)}.settings-toasts{position:absolute;right:var(--sp-4);bottom:var(--sp-4);z-index:var(--z-float);display:flex;flex-direction:column;gap:var(--sp-2);max-width:min(420px,calc(100% - var(--sp-8)))}.settings-toast{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border:0;border-radius:var(--radius-lg);background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));box-shadow:var(--elev-2);color:var(--text-1);font-size:var(--fs-ui);line-height:var(--lh-ui);white-space:pre-wrap;animation:toast-in var(--dur-med) var(--ease)}.settings-toast[data-variant=warn]{color:var(--warn)}.settings-toast[data-variant=ok]{color:var(--ok)}.settings-toast .ic{flex:none;margin-top:calc(var(--sp-1) / 2)}.settings-toast-close{flex:none;border:none;background:none;padding:0;font:inherit;font-size:var(--fs-ui);line-height:inherit;color:var(--text-3);cursor:pointer}.settings-toast-close:hover{color:var(--text-1)}@keyframes toast-in{0%{opacity:0;transform:translateY(4px)}}.settings-section{display:flex;flex-direction:column;gap:var(--sp-3)}.set-sec+.set-sec{margin-top:var(--sp-8)}.set-title{font-size:var(--fs-title);font-weight:var(--fw-strong);line-height:var(--lh-title);letter-spacing:-.2px;color:var(--text-1);margin:0 0 var(--sp-3)}.ctl{height:28px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1);font-family:inherit;font-size:var(--fs-ui)}.ctl:hover{border-color:var(--hair-2)}.ctl:disabled{opacity:.5;cursor:default}.segctl{display:inline-flex;align-items:center;gap:calc(var(--sp-1) / 2);padding:var(--sp-1);border-radius:var(--radius-md);background:var(--surface-2)}.segctl-opt{height:28px;padding:0 var(--sp-3);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-family:inherit;font-size:var(--fs-ui);line-height:1;white-space:nowrap;cursor:pointer;display:inline-flex;align-items:center;gap:var(--sp-1);transition:color var(--dur-fast) var(--ease),background-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}.segctl-opt:hover:not(:disabled):not(.on){color:var(--text-1)}.segctl-opt.on{background:var(--surface);color:var(--text-1);font-weight:var(--fw-strong);box-shadow:var(--elev-1)}.segctl-opt:disabled{opacity:.45;cursor:default}.segctl-dot{width:10px;height:10px;flex:none;border-radius:50%}.segctl-opt[data-swatch=black] .segctl-dot{background:rgb(var(--swatch-ink-rgb))}.segctl-opt[data-swatch=blue] .segctl-dot{background:rgb(var(--swatch-royal-rgb))}.segctl-opt[data-swatch=green] .segctl-dot{background:rgb(var(--swatch-jade-rgb))}input.wudao-switch{appearance:none;-webkit-appearance:none;flex:none;position:relative;width:36px;height:20px;margin:0;padding:0;border:0;border-radius:var(--radius-sm);background:var(--hair-3);cursor:pointer;transition:background-color var(--dur-fast) var(--ease)}input.wudao-switch:before{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:var(--surface);box-shadow:var(--elev-1);transition:transform var(--dur-fast) var(--ease)}input.wudao-switch:checked{background:var(--accent)}input.wudao-switch:checked:before{transform:translate(16px);background:var(--accent-ink)}input.wudao-switch:disabled{opacity:.45;cursor:default}.setrow{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding:var(--sp-3) 0;cursor:default}.setrow+.setrow{border-top:1px solid var(--hair-1)}.setrow-main{display:flex;flex-direction:column;gap:calc(var(--sp-1) / 2);min-width:0;flex:1}.setrow-title{color:var(--text-1);font-size:var(--fs-ui);line-height:1.5}.setrow-note{color:var(--text-3);font-size:var(--fs-caption);line-height:1.5}label.setrow{cursor:pointer}label.setrow:active input.wudao-switch{filter:brightness(.96)}.provider-cards{display:flex;flex-direction:column;gap:var(--sp-2)}.provider-card{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-1)}.provider-card .card-head{display:flex;align-items:baseline;gap:var(--sp-2)}.provider-card .card-name{font-weight:var(--fw-strong)}.provider-card .meta{color:var(--text-2);font-size:var(--fs-ui)}.provider-card .card-endpoint{color:var(--text-2);font-size:var(--fs-ui);overflow-wrap:anywhere;font-family:var(--mono)}.provider-card .card-models{display:flex;gap:var(--sp-1);flex-wrap:wrap}.dot{display:inline-block;width:8px;height:8px;border-radius:50%}.dot.ready{background:var(--ok)}.dot.missing-key{background:var(--danger)}.dot.missing-endpoint{background:var(--warn)}.card-status{font-size:var(--fs-ui);color:var(--text-2)}.model-chip{font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-1);background:var(--surface);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-2);cursor:pointer}.model-chip:hover:not(:disabled){border-color:var(--hair-2)}.keyrow{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:wrap}.keyrow .key-input{flex:1;min-width:14rem}input.wudao-input.key-input{font-family:var(--mono)}input.wudao-input.key-input:focus{border-color:var(--accent)}.test-result{font-size:var(--fs-ui)}.test-result.ok{color:var(--ok)}.test-result.fail{color:var(--danger)}.test-result.fail.network,.test-result.fail.no-endpoint{color:var(--warn)}.prefrow{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.pref-label{color:var(--text-2)}.hint .short{display:none}@media (max-width: 640px){.hint .long{display:none}.hint .short{display:inline}}.settings-tabs{display:flex;flex-direction:column;gap:var(--sp-1)}.settings-tabs .sb-i.on{box-shadow:none;font-weight:var(--fw-strong)}.plugin-tab{display:flex;flex-direction:column;gap:var(--sp-3)}.plugin-tab .market-source-input{flex:1;min-width:14rem;font-size:var(--fs-ui);padding:var(--sp-1) var(--sp-2);border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1)}.plugin-pending{color:var(--text-3);font-size:var(--fs-ui)}.market-list,.plugin-list{display:flex;flex-direction:column;gap:var(--sp-2)}.market-row{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2) var(--sp-2);display:flex;align-items:center;gap:var(--sp-1) var(--sp-2);flex-wrap:wrap}.market-name{font-weight:var(--fw-strong)}.market-source{flex:1;min-width:12rem;color:var(--text-2);font-size:var(--fs-ui);font-family:var(--mono);overflow-wrap:anywhere}.plugin-entry{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2) var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-1)}.plugin-head{display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap}.plugin-name{font-weight:var(--fw-strong);font-family:var(--mono)}.plugin-desc{color:var(--text-2);font-size:var(--fs-ui)}.plugin-detail{color:var(--text-2);font-size:var(--fs-ui);font-family:var(--mono)}.plugin-actions{display:flex;gap:var(--sp-1)}.installed-group{display:flex;flex-direction:column;gap:var(--sp-1)}.installed-group .group-title{color:var(--text-2);font-size:var(--fs-ui);font-weight:var(--fw-strong)}.installed-row{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2) var(--sp-2);display:flex;align-items:center;gap:var(--sp-1) var(--sp-2);flex-wrap:wrap}.installed-row .state.on{color:var(--ok)}.installed-row .state.off{color:var(--warn)}.no-key-banner{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);padding:var(--sp-1) var(--sp-4);color:var(--warn);background:rgb(var(--warn-rgb) / .1);border-bottom:1px solid var(--hair-1);font-size:var(--fs-ui)}.wizard-overlay{position:fixed;inset:0;z-index:var(--z-wizard);display:flex;align-items:center;justify-content:center;background:rgb(var(--bg-rgb) / .86);backdrop-filter:blur(2px)}.wiz{width:min(40rem,calc(100vw - 2rem));max-height:calc(100vh - 2rem);display:flex;flex-direction:column;background:var(--surface);border:0;box-shadow:var(--elev-3);border-radius:var(--radius-lg);overflow:hidden}@keyframes pop{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}.wiz-bar{height:2px;background:var(--accent);transition:width var(--dur-med) var(--ease)}.wiz-head{display:flex;align-items:baseline;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--hair-1)}.wiz-step{font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.wiz-title{font-size:var(--fs-title);font-weight:var(--fw-strong);color:var(--text-1)}.wiz-body{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-4)}.wiz-body h2{margin:0;font-size:var(--fs-head)}.wiz-body h3{margin:0;font-size:var(--fs-title)}.wizard-sub{margin:0;color:var(--text-2)}.wizard-points{margin:0;padding-left:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-1)}.wizard-cards{display:flex;flex-direction:column;gap:var(--sp-2)}.wizard-empty{color:var(--text-2);font-size:var(--fs-ui);padding:var(--sp-2)}.wizard-provider-card{display:flex;align-items:baseline;gap:var(--sp-2);text-align:left;font:inherit;color:var(--text-1);background:var(--bg);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-2);cursor:pointer}.wizard-provider-card .card-name{font-weight:var(--fw-strong)}.wizard-provider-card .meta{color:var(--text-2);font-size:var(--fs-ui);font-family:var(--mono)}.wizard-provider-card:hover{border-color:var(--hair-2)}.wizard-provider-card.sel{border-color:var(--accent)}.wizard-provider-card.sel .card-name{color:var(--accent)}.wizard-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);border-top:1px solid var(--hair-1);padding:var(--sp-3) var(--sp-4)}.wizard-skip{font:inherit;font-size:var(--fs-ui);color:var(--text-2);background:none;border:none;cursor:pointer;text-decoration:underline;padding:var(--sp-1)}.wizard-skip:hover{color:var(--text-1)}.wizard-badge{font-family:var(--mono);font-size:var(--fs-caption);color:var(--warn);background:rgb(var(--warn-rgb) / .12);border:1px solid rgb(var(--warn-rgb) / .35);border-radius:var(--radius-sm);padding:0 var(--sp-1);white-space:nowrap}.wizard-nav{display:flex;align-items:center;gap:var(--sp-2)}.scrim.wizard-confirm{z-index:calc(var(--z-wizard) + 1)}.ide{flex:1;min-height:0;display:grid;grid-template-columns:var(--tree-w, 220px) var(--mid-w, 1fr) var(--chat-w, 360px);justify-content:space-between;position:relative;transition:grid-template-columns var(--dur-med) var(--ease)}.ide-cell{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.ide-cell.ide-right{border-left:1px solid var(--hair-1)}.ide-cell.ide-right>.chat{flex:1;min-height:0}.ide-toggle{position:absolute;top:10px;width:16px;height:16px;z-index:var(--z-toggle);display:flex;align-items:center;justify-content:center;border:1px solid var(--hair-2);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-3);cursor:pointer;padding:0;font-size:var(--fs-caption);line-height:1}.ide-toggle:hover{background:var(--surface-2);color:var(--text-1)}.ide-toggle[data-side=left]{left:max(calc(var(--tree-w, 240px) - 8px),0px)}.ide-toggle[data-side=right]{right:max(calc(var(--chat-w, 400px) - 8px),0px)}.ide-toggle[data-side=center]{left:max(calc(var(--tree-w, 240px) + 12px),12px)}.ide-drag{position:absolute;top:0;bottom:0;width:4px;z-index:var(--z-float);cursor:col-resize}.ide-drag[data-side=left]{left:max(calc(var(--tree-w, 240px) - 2px),0px)}.ide-drag[data-side=right]{right:max(calc(var(--chat-w, 400px) - 2px),0px)}.ide-drag:hover{background:var(--hover)}.buddy{flex:1;min-height:0;display:grid;grid-template-columns:var(--buddy-w, 260px) 1fr;position:relative;transition:grid-template-columns var(--dur-med) var(--ease)}.buddy-cell{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.buddy-cell.buddy-left>.sb{flex:1 1 auto;min-height:0}.buddy-cell.buddy-main>.chat{flex:1;min-height:0}.buddy-cell.buddy-main{position:relative}.buddy-toggle{left:max(calc(var(--buddy-w, 260px) - 8px),0px)}.sb{width:100%;display:flex;flex-direction:column;background:var(--bg);border-right:1px solid var(--hair-1)}.sb-new{display:flex;align-items:center;gap:var(--sp-1);height:28px;margin:var(--sp-3) var(--sp-2) 0;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-2);font-family:inherit;font-size:var(--fs-ui);cursor:pointer}.sb-new:hover{border-color:var(--hair-2);color:var(--text-1);background:var(--surface-2)}.sb-search{display:flex;align-items:center;gap:var(--sp-1);height:26px;margin:var(--sp-1) var(--sp-2) 0;padding:0 var(--sp-2);border:1px solid transparent;border-radius:var(--radius-sm);color:var(--text-3);font-size:calc(var(--fs-ui) - .5px);cursor:pointer}.sb-search:hover{background:var(--surface);border-color:var(--hair-1)}.sb-list{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;padding:var(--sp-1) var(--sp-2) var(--sp-2);gap:calc(var(--sp-1) / 2)}.sb-g{font-size:var(--fs-caption);font-family:var(--mono);letter-spacing:.4px;color:var(--text-3);padding:var(--sp-3) var(--sp-2) var(--sp-1);flex-shrink:0}.buddy .sb-list{scrollbar-width:thin}.buddy .sb-list::-webkit-scrollbar{width:6px}.buddy .sb-list::-webkit-scrollbar-thumb{background:var(--hair-3);border-radius:var(--radius-sm)}.buddy .sb-list::-webkit-scrollbar-track{background:transparent}.buddy .chat{scrollbar-width:thin}.buddy .chat::-webkit-scrollbar{width:6px}.buddy .chat::-webkit-scrollbar-thumb{background:var(--hair-3);border-radius:var(--radius-sm)}.buddy .chat::-webkit-scrollbar-track{background:transparent}.sb-i{display:flex;align-items:center;height:32px;padding:0 var(--sp-2);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-2);font-family:inherit;font-size:var(--fs-ui);text-align:left;white-space:nowrap;overflow:hidden;cursor:pointer;flex-shrink:0}.sb-i:hover{background:var(--surface);color:var(--text-1)}.sb-i.on{background:var(--accent-weak);color:var(--text-1);box-shadow:inset 2px 0 0 var(--accent)}.sb-i .sb-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.sb-i .sb-when{flex:none;color:var(--text-3);font-size:var(--fs-caption)}.sb-i .sb-main{display:flex;align-items:center;flex:1;min-width:0}.sb-i .sb-rename{flex:none;color:var(--text-3);opacity:0;padding:1px var(--sp-1);border:0;background:transparent;font:inherit;cursor:pointer;transition:opacity var(--dur-fast) var(--ease)}.sb-i:hover .sb-rename,.sb-i.on .sb-rename,.sb-i .sb-rename:focus-visible{opacity:1}.sb-i .sb-rename:hover{color:var(--text-1)}.sb-i input.sb-rename-in{flex:1;min-width:0;height:20px;font-family:inherit;font-size:var(--fs-ui);color:var(--text-1);background:var(--bg);border:1px solid var(--hair-2);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.sb-i input.sb-rename-in:focus{outline:none;border-color:var(--accent)}.sb-i .sb-act,.sb-arch-i .sb-act{flex:none;color:var(--text-3);opacity:0;padding:1px var(--sp-1);border:0;background:transparent;font-family:inherit;border-radius:var(--radius-sm);font-size:var(--fs-caption);white-space:nowrap;cursor:pointer;transition:opacity var(--dur-fast) var(--ease)}.sb-i:hover .sb-act,.sb-arch-i:hover .sb-act,.sb-i .sb-act:focus-visible,.sb-arch-i .sb-act:focus-visible{opacity:1}.sb-i .sb-act:hover,.sb-arch-i .sb-act:hover{color:var(--text-1);background:var(--surface-2)}.sb-i .sb-follow{flex:none;color:var(--text-3);opacity:0;padding:1px var(--sp-1);border:0;background:transparent;font-family:inherit;border-radius:var(--radius-sm);font-size:var(--fs-caption);white-space:nowrap;cursor:pointer;transition:opacity var(--dur-fast) var(--ease)}.sb-i:hover .sb-follow,.sb-i.on .sb-follow,.sb-i .sb-follow:focus-visible{opacity:1}.sb-i .sb-follow:hover{color:var(--text-1);background:var(--surface-2)}.sb-arch{flex:none;display:flex;flex-direction:column;margin:0 var(--sp-2);padding:0 0 var(--sp-1);border-top:1px solid var(--hair-1)}.sb-arch-h{display:flex;align-items:center;gap:var(--sp-1);height:24px;padding:0 var(--sp-1);border:0;background:transparent;color:var(--text-3);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;white-space:nowrap;overflow:hidden;cursor:pointer}.sb-arch-h:hover{color:var(--text-1)}.sb-arch-h .sb-arch-caret,.sb-arch-h .sb-arch-t{flex:none}.sb-arch-h .sb-arch-hint{flex:1;min-width:0;text-align:right}.sb-arch-list{display:flex;flex-direction:column;gap:calc(var(--sp-1) / 2);padding:0 var(--sp-1) var(--sp-1);max-height:160px;overflow-y:auto}.sb-arch-i{display:flex;align-items:center;height:28px;padding:0 var(--sp-1);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-family:inherit;font-size:var(--fs-ui);text-align:left;white-space:nowrap;overflow:hidden;cursor:pointer;flex-shrink:0}.sb-arch-i:hover{background:var(--surface);color:var(--text-1)}.sb-arch-i .sb-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.sb-arch-i .sb-when{flex:none;color:var(--text-3);font-size:var(--fs-caption)}.sb-i .sb-unread,.sb-i .sb-await{flex:none;margin-left:var(--sp-1);display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-ink);font-size:var(--fs-caption);font-weight:var(--fw-strong);line-height:1;white-space:nowrap}.sb-i .sb-sched{flex:none;margin-left:var(--sp-1);font-size:var(--fs-caption);line-height:1;color:var(--text-2)}.sb-i .sb-run{flex:none;margin-left:var(--sp-1);display:inline-flex;align-items:center;line-height:1;color:var(--text-2)}.sb-toast{flex:none;margin:var(--sp-1) var(--sp-2);padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);text-align:center}.sb-f{flex:none;display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-1);border-top:1px solid var(--hair-1);padding:var(--sp-1) var(--sp-2);color:var(--text-3)}.sb-f .sb-note{flex:none;color:var(--text-3);font-size:var(--fs-caption)}.sb-f .settings-link{width:26px;height:26px;flex:none;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);padding:0;cursor:pointer}.sb-f .settings-link:hover{background:var(--surface);color:var(--text-1)}.dash{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:var(--sp-4);gap:var(--sp-3)}.dash-head{display:flex;align-items:center;gap:var(--sp-2);flex:none}.dash-head h2{margin:0;font-size:var(--fs-title);font-weight:var(--fw-strong)}.dash-head .spacer{flex:1}.dash-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--sp-2);flex:none}.dash-kpi{border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}.dash-kpi .k{color:var(--text-2);font-size:var(--fs-caption)}.dash-kpi .v{font-size:var(--fs-title);font-weight:var(--fw-strong);font-variant-numeric:tabular-nums}.dash-kpi .s{color:var(--text-2);font-size:var(--fs-caption);font-variant-numeric:tabular-nums}.dash-chart{border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);flex:none;display:flex;flex-direction:column;gap:var(--sp-1)}.dash-chart svg{width:100%;height:44px;display:block}.dash-chart .k{color:var(--text-2);font-size:var(--fs-caption)}.dash-cols{display:grid;grid-template-columns:minmax(260px,5fr) minmax(300px,7fr);gap:var(--sp-3);min-height:0;flex:1}@media (max-width: 900px){.dash-cols{grid-template-columns:1fr}}.dash-panel{border:1px solid var(--hair-1);border-radius:var(--radius-md);display:flex;flex-direction:column;min-height:0;overflow:hidden}.dash-panel-head{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--hair-1);font-size:var(--fs-ui);color:var(--text-2);flex:none}.dash-panel-head .spacer{flex:1}.dash-scroll{overflow-y:auto;min-height:0}table.dash-tools{width:100%;border-collapse:collapse;font-size:var(--fs-caption);font-variant-numeric:tabular-nums}table.dash-tools th,table.dash-tools td{text-align:right;padding-block:var(--sp-1);padding-inline:var(--sp-3);border-bottom:1px solid var(--hair-1);white-space:nowrap}table.dash-tools th:first-child,table.dash-tools td:first-child{text-align:left}table.dash-tools th{color:var(--text-2);position:sticky;top:0;background:var(--bg-1)}.dash-cat-chips{display:flex;gap:var(--sp-1)}.dash-cat-chips button{border:1px solid var(--hair-1);background:none;color:var(--text-2);border-radius:var(--radius-sm);padding-block:var(--sp-1);padding-inline:var(--sp-2);font-size:var(--fs-caption);cursor:pointer}.dash-cat-chips button.on{color:var(--text-1);border-color:var(--acc, currentColor)}.dash-stream{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--fs-caption);line-height:1.7;padding:var(--sp-1) 0}.dash-row{display:flex;gap:var(--sp-2);padding:0 var(--sp-3);white-space:nowrap}.dash-row .t{color:var(--text-2);flex:none}.dash-row .c{flex:none;width:52px}.dash-row .n{color:var(--text-1);flex:none}.dash-row .d{color:var(--text-2);overflow:hidden;text-overflow:ellipsis}.dash-empty{color:var(--text-2);padding:var(--sp-3);font-size:var(--fs-caption)}.dash-banner{display:flex;align-items:center;gap:var(--sp-2);border:1px solid var(--hair-1);border-left:2px solid var(--warn, currentColor);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-caption);color:var(--text-2);flex:none}.dash-banner button{border:1px solid var(--hair-1);background:none;color:var(--text-1);border-radius:var(--radius-sm);padding-block:var(--sp-1);padding-inline:var(--sp-2);cursor:pointer}.dash-anatomy{grid-template-columns:minmax(300px,1fr) minmax(300px,1fr)}.dash-prompt{border-bottom:1px solid var(--hair-1)}.dash-prompt summary{cursor:pointer;padding:var(--sp-2) var(--sp-3);color:var(--text-2);font-size:var(--fs-caption);user-select:none}.dash-prompt pre{margin:0;padding:0 var(--sp-3) var(--sp-2);white-space:pre-wrap;word-break:break-word;font-size:var(--fs-caption);line-height:1.6;max-height:300px;overflow-y:auto}.dash-msg{border-bottom:1px solid var(--hair-1);padding:var(--sp-1) 0}.dash-msg-head{display:flex;gap:var(--sp-2);align-items:center;padding:0 var(--sp-3)}.dash-msg-head .role{font-size:var(--fs-caption);color:var(--text-2);font-weight:var(--fw-strong)}.dash-msg-head .err{font-size:var(--fs-caption);color:var(--danger)}.dash-detail{margin-block:var(--sp-1);margin-inline:0 var(--sp-3)}.dash-detail summary{cursor:pointer;font-size:var(--fs-caption);color:var(--text-2);user-select:none;padding:1px 0}.dash-detail pre{margin-block:var(--sp-1) var(--sp-1);white-space:pre-wrap;word-break:break-word;font-size:var(--fs-caption);line-height:1.6;max-height:260px;overflow-y:auto;background:color-mix(in srgb,var(--hair-1) 30%,transparent);padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm)}.dash-row .dash-detail{flex:1;min-width:0}.filetree{height:100%;min-width:0;display:flex;flex-direction:column;background:var(--bg);border-right:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.filetree .tree-top{flex:none;display:flex;align-items:center;gap:var(--sp-1);padding:var(--sp-1) var(--sp-1) var(--sp-1) var(--sp-2);border-bottom:1px solid var(--hair-1);position:relative}.filetree .ws-switcher{flex:1;min-width:0;display:flex;align-items:center;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-2);font:inherit;text-align:left;padding:1px 4px;cursor:pointer}.filetree .ws-switcher:hover{background:var(--surface);color:var(--text-1)}.filetree .tree-root{flex:1;min-width:0;color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ws-backdrop{position:fixed;inset:0;z-index:calc(var(--z-ws-menu) - 1)}.ws-menu{position:absolute;top:100%;left:0;right:0;z-index:var(--z-ws-menu);margin-top:var(--sp-1);display:flex;flex-direction:column;max-height:220px;overflow-y:auto;background:var(--surface);border:0;border-radius:var(--radius-lg);padding:var(--sp-1);box-shadow:var(--elev-2);animation:pop var(--dur-fast) var(--ease)}.ws-item{display:block;width:100%;flex:none;border:0;background:transparent;color:var(--text-2);font:inherit;text-align:left;padding:var(--sp-1) var(--sp-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.ws-item:hover{background:var(--surface-2);color:var(--text-1)}.ws-open-other{border-top:1px solid var(--hair-1);border-radius:0 0 var(--radius-lg) var(--radius-lg);color:var(--text-3)}.ws-loading{flex:none;padding:var(--sp-1) var(--sp-2);color:var(--text-3)}.composer-tools{position:relative}.composer-tools .ws-menu{inset:auto auto 100% 0;min-width:220px;margin-top:0;margin-bottom:var(--sp-1)}.ctx-backdrop{position:fixed;inset:0;z-index:calc(var(--z-ctx-menu) - 1)}.filetree .tree-toggle,.filetree .tree-refresh{flex:none;width:22px;height:22px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-ui);line-height:1;padding:0;cursor:pointer}.filetree .tree-toggle:hover,.filetree .tree-refresh:hover{background:var(--surface);color:var(--text-1)}.filetree .tree-toggle[aria-pressed=true]{color:var(--accent)}.filetree .tree-body{flex:1;overflow-y:auto;padding:var(--sp-1) 0}.filetree .tree-node{min-width:0}.ft-row{display:flex;align-items:center;gap:var(--sp-1);height:24px;font-size:var(--fs-ui);color:var(--text-2);border-radius:var(--radius-sm);padding-right:var(--sp-2);cursor:pointer}.ft-row:hover{background:var(--surface);color:var(--text-1)}.ft-row.on{background:var(--accent-weak);color:var(--text-1)}.ft-row .ft-indent{width:var(--sp-3);flex:none}.ft-row .caret{flex:none;width:10px;color:var(--text-3);user-select:none}.ft-row .ico{flex:none;font-size:var(--fs-caption)}.ft-row .name{flex:1;min-width:0;color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.filetree .tree-node.file>.ft-row .name{font-weight:var(--fw-regular)}.filetree .tree-node.dir>.ft-row .name{font-weight:var(--fw-strong)}.filetree .tree-node.file.modified>.ft-row{box-shadow:inset 2px 0 0 var(--ok)}.filetree .tree-node.file.modified>.ft-row .name{color:var(--ok)}.filetree .at-btn{flex:none;visibility:hidden;width:16px;height:16px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:0;cursor:pointer}.filetree .ft-row:hover .at-btn,.filetree .at-btn:focus-visible{visibility:visible}.filetree .at-btn:hover{color:var(--accent);background:var(--surface-2)}.filetree .tree-loading,.filetree .tree-empty,.filetree .tree-err{color:var(--text-3);padding:1px 8px}.sb .tree-empty{flex:1;display:grid;place-items:center;text-align:center}.sb-skels{display:flex;flex-direction:column;gap:calc(var(--sp-1) / 2);padding:var(--sp-1) 0}.sb-skeleton{height:32px;border-radius:var(--radius-sm);background:var(--surface);animation:tree-spin-pulse 1s ease-in-out infinite}.sb-skeleton:nth-child(2){width:78%}.sb-skeleton:nth-child(3){width:56%}.sb .tree-err{color:var(--text-3);padding:1px 8px}.sb .tree-err[role=button]{cursor:pointer;width:fit-content;border-radius:var(--radius-sm)}.sb .tree-err[role=button]:hover{color:var(--text-1);background:var(--surface)}.filetree .tree-spin{display:inline-block;width:7px;height:7px;margin-right:var(--sp-2);border-radius:50%;background:var(--text-3);vertical-align:middle;animation:tree-spin-pulse 1s ease-in-out infinite}@keyframes tree-spin-pulse{0%,to{opacity:.25}50%{opacity:1}}.filetree .tree-err[role=button]{cursor:pointer;width:fit-content;border-radius:var(--radius-sm)}.filetree .tree-err[role=button]:hover{color:var(--text-1);background:var(--surface)}.tabbar{flex:none;height:32px;display:flex;align-items:stretch;background:var(--bg);border-bottom:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.tabbar .tab{display:flex;align-items:center;gap:var(--sp-2);min-width:0;max-width:200px;padding:0 var(--sp-2) 0 var(--sp-3);border-right:1px solid var(--hair-1);color:var(--text-2);cursor:pointer;position:relative;user-select:none}.tabbar .tab:hover{background:var(--surface);color:var(--text-1)}.tabbar .tab .tname{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabbar .tab.active{color:var(--text-1);background:var(--bg)}.tabbar .tab:after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--accent);opacity:0;transition:opacity var(--dur-fast) var(--ease)}.tabbar .tab.active:after{opacity:1}.tabbar .tab .tclose{flex:none;visibility:hidden;width:16px;height:16px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-ui);line-height:1;padding:0;cursor:pointer}.tabbar .tab:hover .tclose,.tabbar .tab .tclose:focus-visible{visibility:visible}.tabbar .tab .tclose:hover{color:var(--text-1);background:var(--surface-2)}.tabbar .tab-empty{flex:1;display:flex;align-items:center;justify-content:center;color:var(--text-3)}.tabbar .tabbar-collapse{flex:none;margin-left:auto;width:26px;border:0;border-left:1px solid var(--hair-1);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:0;cursor:pointer}.tabbar .tabbar-collapse:hover{background:var(--surface);color:var(--text-1)}.fileviewer .breadcrumb{flex:none;height:24px;display:flex;align-items:center;gap:var(--sp-1);padding:0 var(--sp-3);border-bottom:1px solid var(--hair-1);background:var(--bg);color:var(--text-2);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.fileviewer .crumb-sep{color:var(--text-3);user-select:none}.fileviewer .crumb{white-space:nowrap;color:var(--text-2)}.fileviewer .crumb[role=button]{cursor:pointer;border-radius:var(--radius-sm);padding:0 var(--sp-1)}.fileviewer .crumb[role=button]:hover{color:var(--text-1);background:var(--surface)}.fileviewer .crumb.current{color:var(--accent)}.fileviewer .md-toggle{margin-left:auto;display:flex;gap:var(--sp-1)}.fileviewer .mdmode{border:1px solid var(--hair-2);border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-2);cursor:pointer}.fileviewer .mdmode:hover{color:var(--text-1);background:var(--surface)}.fileviewer .mdmode[aria-pressed=true]{color:var(--text-1);border-color:var(--hair-2);background:var(--surface-2)}.fileviewer .viewer-md{flex:1;min-height:0;overflow:auto;padding:var(--sp-2) var(--sp-4);font-family:var(--font);font-size:14px}.fileviewer{height:100%;min-width:0;display:flex;flex-direction:column;background:var(--bg);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.ide-cell.ide-center>.fileviewer{flex:1;min-height:0}.fv-head{flex:none;display:flex;align-items:center;gap:var(--sp-2);height:34px;padding-left:var(--sp-3);padding-right:var(--sp-2);border-bottom:1px solid var(--hair-1)}.fv-file{min-width:0;font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fv-close{margin-left:auto;width:26px;height:26px;border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;color:var(--text-3);background:none;border:0;padding:0;cursor:pointer}.fv-close:hover{background:var(--surface);color:var(--text-1)}.fileviewer .viewer-code{flex:1;overflow:auto;padding:var(--sp-1) 0}.fileviewer .viewer-line{display:flex;align-items:flex-start}.fileviewer .viewer-gutter{flex:none;min-width:3ch;text-align:right;color:var(--text-3);padding:0 var(--sp-2) 0 var(--sp-3);user-select:none}.fileviewer .viewer-src{white-space:pre}.fv-selchip{position:fixed;z-index:var(--z-ctx-menu);padding:1px var(--sp-1);border:0;border-radius:var(--radius-sm);font-family:var(--mono);font-size:var(--fs-caption);color:var(--accent-ink);background:var(--accent);box-shadow:var(--elev-1);cursor:pointer}.fileviewer .viewer-empty{flex:1;display:flex;align-items:center;justify-content:center;color:var(--text-3)}.fileviewer .viewer-binary{margin:auto;padding:var(--sp-4) var(--sp-6);border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);color:var(--text-2);text-align:center}.fileviewer .viewer-truncated{flex:none;padding:var(--sp-1) var(--sp-3);border-top:1px solid var(--hair-1);color:var(--warn);background:rgb(var(--warn-rgb) / .08)}.fileviewer .viewer-dirwrap{flex:1;overflow:auto}.fileviewer .viewer-dir{width:100%;border-collapse:collapse;color:var(--text-2)}.fileviewer .viewer-dir th{text-align:left;font-weight:var(--fw-strong);color:var(--text-3);padding:var(--sp-1) var(--sp-3);border-bottom:1px solid var(--hair-1);position:sticky;top:0;background:var(--bg)}.fileviewer .viewer-dir td{padding:var(--sp-1) var(--sp-3);border-bottom:1px solid var(--hair-1)}.fileviewer .viewer-err{margin:var(--sp-6) auto;padding:var(--sp-3) var(--sp-5);color:var(--danger);border:1px solid var(--danger);border-radius:var(--radius-md)}.filetree .tree-filter{flex:none;padding:var(--sp-1) var(--sp-2);border-bottom:1px solid var(--hair-1)}.filetree .tree-filter input{width:100%;box-sizing:border-box;border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--bg);color:var(--text-1);font:inherit;padding:var(--sp-1) var(--sp-2)}.filetree .tree-filter input:focus{border-color:var(--accent);outline:none}.filetree .tree-filter input::placeholder{color:var(--text-3)}.search-scrim{position:fixed;inset:0;z-index:var(--z-palette);background:var(--overlay);display:flex;justify-content:center;align-items:flex-start;padding-top:20vh;padding-left:var(--sp-4);padding-right:var(--sp-4)}.search-pop{width:400px;max-width:100%;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;box-shadow:var(--elev-3);border-radius:var(--radius-lg);display:flex;flex-direction:column;overflow:hidden}.search-pop .search-input{border:0;border-bottom:1px solid var(--hair-1);background:transparent;color:var(--text-1);font-family:var(--mono);font-size:var(--fs-ui);padding:var(--sp-2) var(--sp-3)}.search-pop .search-input::placeholder{color:var(--text-3)}.search-pop .search-results{max-height:320px;overflow-y:auto;padding:var(--sp-1) 0;font-family:var(--mono);font-size:var(--fs-ui)}.search-pop .search-item{padding:var(--sp-1) var(--sp-3);color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.search-pop .search-item:hover{background:var(--surface-2)}.search-pop .search-item.sel{background:var(--accent-weak);color:var(--text-1)}.search-pop .search-item .hit{color:var(--accent);font-weight:var(--fw-strong)}.search-pop .search-empty{padding:var(--sp-2) var(--sp-3);color:var(--text-3)}.search-pop .session-head{padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--hair-1);color:var(--text-3);font-size:var(--fs-ui);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-pop .session-item{display:block;padding:var(--sp-2);font-size:var(--fs-ui);border-radius:var(--radius-md);font-family:var(--font);margin:0 var(--sp-1) calc(var(--sp-1) / 2)}.search-pop .session-item .session-row1{display:flex;justify-content:space-between;gap:var(--sp-2)}.search-pop .session-item .session-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-1);font-weight:var(--fw-strong)}.search-pop .session-item .session-time{color:var(--text-3);flex:none;font-size:var(--fs-caption)}.search-pop .session-item .session-preview{color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--font);line-height:1.45}.search-pop .session-pg{padding:var(--sp-3) var(--sp-3) var(--sp-1);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.search-pop .session-results{max-height:min(420px,60vh)}@media (max-width: 440px){.search-pop .session-item .session-preview{display:none}}.search-pop .session-q{border:0;border-bottom:1px solid var(--hair-1);background:transparent;color:var(--text-1);font-family:var(--font);font-size:var(--fs-ui);padding:var(--sp-2) var(--sp-3);outline:none}.search-pop .session-q:focus{border-bottom-color:var(--accent)}.search-pop .session-q::placeholder{color:var(--text-3)}.search-pop .session-item .session-kind{flex:none;font-size:var(--fs-caption);line-height:1;padding:calc(var(--sp-1) / 2) calc(var(--sp-1));border-radius:var(--radius-sm);background:var(--bubble-user-bg);color:var(--bubble-user-ink);font-weight:var(--fw-strong)}.search-pop .session-item .session-kind.ans{background:var(--surface-2);color:var(--text-1)}.search-pop .session-item .session-hit-mark{color:var(--accent);font-weight:var(--fw-strong)}.search-pop .session-item .session-del{flex:none;border:0;background:transparent;color:var(--text-3);padding:1px var(--sp-1);font-size:var(--fs-caption);line-height:1;border-radius:var(--radius-sm);cursor:pointer;opacity:0;transition:opacity var(--dur-fast) var(--ease)}.search-pop .session-item:hover .session-del,.search-pop .session-item.sel .session-del,.search-pop .session-item .session-del:focus-visible{opacity:1}.search-pop .session-item .session-del:hover{color:var(--danger)}.search-pop .session-item .session-confirm-actions{flex:none;display:flex;gap:var(--sp-1);align-items:center}.search-pop .session-item .session-confirm-actions button{border:1px solid var(--hair-1);background:transparent;color:var(--text-1);font-family:var(--font);font-size:var(--fs-caption);line-height:1;padding:calc(var(--sp-1) / 2) var(--sp-2);border-radius:var(--radius-sm);cursor:pointer}.search-pop .session-item .session-del-ok{border-color:rgb(var(--danger-rgb) / .35);color:var(--danger)}.search-pop .session-item .session-del-ok:hover{background:rgb(var(--danger-rgb) / .1)}.search-pop .session-item .session-del-cancel:hover{background:var(--surface-2)}.ide-cell.ide-right,.simple{position:relative}.jump-bottom{position:absolute;right:18px;bottom:132px;z-index:var(--z-jump);width:36px;height:36px;border:0;border-radius:50%;background:var(--accent);color:var(--accent-ink);font-size:16px;line-height:1;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}.jump-bottom:hover{filter:brightness(1.08)}.send:active:not(:disabled),.jump-bottom:active,.approval .allow:active:not(:disabled),.approval .deny:active:not(:disabled),button.wudao:active:not(:disabled),.icobtn:active,.tb-changes:active{filter:brightness(.88)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}textarea.wudao-input:focus-visible{outline:none;box-shadow:none}.msg-a{animation:msg-ai-fade var(--dur-fast) var(--ease)}@keyframes msg-ai-fade{0%{opacity:.6}to{opacity:1}}@media (pointer: coarse){.ide-toggle,.filetree .at-btn,.tabbar .tab .tclose{width:24px;height:24px}}.provider-toolbar{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-2)}.provider-toolbar .provider-search{flex:1;min-width:12rem}.provider-master{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-3);align-items:start}.provider-master .provider-cards{max-height:30rem;overflow-y:auto;padding-right:var(--sp-1)}.provider-card[aria-current=true]{border-color:var(--accent)}.provider-card button.card-name{background:none;border:none;padding:0;font:inherit;font-weight:var(--fw-strong);color:inherit;text-align:left;cursor:pointer}.provider-card button.card-name:hover:not(:disabled){color:var(--text-1)}.provider-card button.card-name:disabled{cursor:default}.provider-card[data-invalid=true]{opacity:.55}.provider-card .card-id{font-family:var(--mono)}.invalid-reason{color:var(--danger);font-size:var(--fs-ui);overflow-wrap:anywhere}.provider-card[data-draft=true]{border-style:dashed;border-color:var(--hair-2)}.provider-cards .provider-card[data-draft=true]{cursor:default}.provider-card[data-draft=true] .card-head .ctl{margin-left:auto}.dot.draft{background:var(--text-3)}.provider-detail{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-2);position:sticky;top:0}.provider-detail .detail-head{display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap}.provider-detail .detail-head .meta{color:var(--text-2);font-size:var(--fs-ui)}.provider-detail .detail-field{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-ui);color:var(--text-2)}.provider-detail .detail-field .detail-field-label{white-space:nowrap}.provider-detail .detail-field .ctl{flex:1;min-width:8rem}.provider-detail .detail-field .card-endpoint{flex:1}.model-manager{display:flex;flex-direction:column;gap:var(--sp-1)}.model-manager-head{display:flex;align-items:baseline;gap:var(--sp-2);font-size:var(--fs-ui);color:var(--text-2)}.model-badge{color:var(--accent);font-size:var(--fs-ui);white-space:nowrap;text-align:center}.model-badge.live{color:var(--text-2)}.detail-actions{display:flex;gap:var(--sp-2);flex-wrap:wrap}.provider-detail .detail-del{color:var(--danger)}.provider-empty{color:var(--text-2);font-size:var(--fs-ui);padding:var(--sp-2)}.modal-card.pvd{max-width:min(46rem,calc(100vw - var(--sp-8)));width:100%}.pvd-head{display:flex;align-items:center;gap:var(--sp-2)}.pvd-head h3{margin:0;flex:1 1 auto;overflow-wrap:anywhere}.pvd-body{overflow-y:auto;min-height:0;display:flex;flex-direction:column}.pvd-body .provider-detail{border:0;background:transparent;position:static;padding:0}.pvd-body .persona-form{border:0;background:transparent;padding:0}.provider-load-error{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}@media (max-width: 640px){.provider-master{grid-template-columns:1fr}.provider-master .provider-cards{max-height:none}.provider-detail{position:static}}.chip .wire-count{margin-left:var(--sp-1);font-size:var(--fs-caption);color:var(--text-1)}.chip .wire-count.zero{color:var(--text-3)}.provider-detail .detail-field .detail-persona-layer{flex:0 0 9.5rem;min-width:9.5rem}.persona-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--sp-1) var(--sp-2);padding:var(--sp-1) var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);color:var(--text-1);font:inherit;font-size:var(--fs-ui);text-align:left;cursor:pointer}.persona-row:hover{border-color:var(--hair-2)}.persona-row[aria-current=true]{border-color:var(--accent);box-shadow:inset 2px 0 0 var(--accent)}.persona-row .persona-name{flex-basis:100%;font-weight:var(--fw-strong)}.persona-row .meta{color:var(--text-2)}.persona-row .persona-id{font-family:var(--mono)}.persona-row .persona-layers{color:var(--text-3)}.persona-row .persona-src{margin-left:auto;border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);font-size:var(--fs-caption);line-height:1.5;color:var(--text-2)}.settings-section>button.ctl.persona-add{align-self:flex-start;border-style:dashed;color:var(--text-2)}.settings-section>button.ctl.persona-add:hover{border-color:var(--hair-2);color:var(--text-1)}.prefrow.persona-default .pref-label{white-space:nowrap}.prefrow.persona-default .persona-pick{min-width:13rem}.prefrow.persona-default .persona-pick-layer{flex:0 0 9.5rem}.persona-form{display:flex;flex-direction:column;gap:var(--sp-2)}.persona-form .prefrow{align-items:center}.persona-form .prefrow .pref-label{min-width:5.5rem;white-space:nowrap}.persona-form textarea.persona-prompt{border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1);font-family:inherit;font-size:var(--fs-ui);line-height:var(--lh-body);padding:var(--sp-1) var(--sp-2);resize:vertical}.persona-form textarea.persona-prompt:focus{border-color:var(--accent)}.persona-form textarea.persona-prompt:disabled{opacity:.5;cursor:default}.persona-wire-tabs{display:flex;gap:calc(var(--sp-1) / 2);flex-wrap:wrap;padding:var(--sp-1);border-radius:var(--radius-md);background:var(--surface-2);width:max-content}.persona-wire-tabs .segctl-opt{font-family:var(--mono)}.persona-layer{display:flex;flex-direction:column;gap:var(--sp-1)}.persona-layer>.pref-label{font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-2);border-bottom:1px solid var(--hair-1);padding-bottom:var(--sp-1)}.persona-form .row.keyrow{display:grid;grid-template-columns:minmax(9rem,14rem) minmax(0,1fr) auto;gap:var(--sp-2);align-items:center}.persona-form .row.keyrow .entry-error{grid-column:1 / -1;font-size:var(--fs-ui)}.persona-form .row.keyrow.error>.ctl{border-color:var(--danger)}.persona-layer>button.ctl{align-self:flex-start;border-style:dashed;color:var(--text-2)}.persona-layer>button.ctl:hover:not(:disabled){border-color:var(--hair-2);color:var(--text-1)}button.ctl.persona-save{border-color:var(--accent);color:var(--accent)}button.ctl.persona-del{border-color:var(--danger);color:var(--danger)}.persona-form>.entry-error{border:1px solid rgb(var(--danger-rgb) / .35);border-radius:var(--radius-sm);padding:var(--sp-1) var(--sp-2);font-size:var(--fs-ui)}.persona-delete-confirm{border:1px solid rgb(var(--danger-rgb) / .35);background:rgb(var(--danger-rgb) / .06);border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-2);font-size:var(--fs-ui)}.persona-delete-confirm ul{margin:var(--sp-1) 0;padding-left:var(--sp-5);color:var(--text-2)}.persona-delete-confirm li{margin:1px 0}.persona-delete-confirm .keyrow{margin-top:var(--sp-1)}select.ctl{appearance:none;-webkit-appearance:none;padding-right:calc(var(--sp-2) + var(--sp-4));background-image:conic-gradient(from 135deg at 50% 30%,var(--text-2) 0 90deg,transparent 90deg);background-repeat:no-repeat;background-position:right var(--sp-2) center;background-size:10px 6px;cursor:pointer}select.ctl:disabled{cursor:default}.provider-detail .detail-field{flex-wrap:wrap}.provider-detail .detail-field .ctl{max-width:100%}.provider-detail .detail-field .detail-persona-layer{flex-shrink:1;min-width:0;max-width:100%}.provider-card:not([data-invalid=true]){cursor:pointer}.provider-card[aria-current=true]{box-shadow:inset 2px 0 0 var(--accent)}button.ctl.card-apply{border-color:var(--accent);color:var(--accent)}.provider-card .key-badge{border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);font-size:var(--fs-caption);line-height:1.5;color:var(--text-2)}.provider-card .key-badge.on{color:var(--ok);border-color:rgb(var(--ok-rgb) / .35)}.provider-card .key-badge.off{color:var(--text-3);border-style:dashed}.provider-detail .detail-field .keyrow{flex:1;min-width:12rem;flex-wrap:wrap}.provider-detail .detail-field .keyrow .ctl{flex:none;min-width:0}.provider-detail .detail-field .keyrow .key-input{flex:1 1 8rem;min-width:0;max-width:100%}.provider-detail{padding:var(--sp-3)}.provider-detail .detail-head{padding-bottom:var(--sp-1);border-bottom:1px solid var(--hair-1)}.provider-detail .detail-field{display:grid;grid-template-columns:6.5rem minmax(0,1fr);flex-wrap:nowrap}.provider-detail .detail-field.pair{grid-template-columns:6.5rem minmax(0,1fr) 9.5rem}.provider-detail .detail-field .ctl,.provider-detail .detail-field .detail-persona-layer,.provider-detail .detail-field .keyrow{min-width:0}.model-manager{gap:var(--sp-2)}.provider-detail .detail-actions{padding-top:var(--sp-1);border-top:1px solid var(--hair-1)}button.ctl.detail-save{border-color:var(--accent);color:var(--accent)}@media (max-width: 720px){.provider-detail .detail-field,.provider-detail .detail-field.pair{grid-template-columns:minmax(0,1fr)}.provider-detail .detail-field .detail-field-label{color:var(--text-3)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.shimmer{animation:none;color:var(--text-2);background:none}.sweep-line:after{content:none}}.provider-card{padding:var(--sp-3);gap:var(--sp-1);cursor:pointer;transition:border-color var(--dur-fast) var(--ease)}.provider-card:hover{border-color:var(--hair-2)}.provider-card[aria-current=true]{border-color:var(--accent);box-shadow:inset 2px 0 0 var(--accent)}.provider-card .card-head{align-items:center}.provider-card .card-name{font-size:var(--fs-ui)}.provider-card .meta.tag-default{color:var(--accent);font-weight:var(--fw-strong)}.provider-card .key-badge{margin-left:auto}.provider-card .card-status{display:flex;align-items:baseline;gap:var(--sp-2)}.provider-card .card-endpoint{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.provider-card .card-actions{display:flex;justify-content:flex-end}.provider-card button.card-apply{padding:1px var(--sp-3);font-size:var(--fs-caption);color:var(--text-2)}.provider-card button.card-apply:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.provider-cards .provider-card[data-draft=true],.provider-card[data-invalid=true]{cursor:default}.provider-detail{padding:var(--sp-3);gap:var(--sp-2)}.provider-detail .detail-head{padding-bottom:var(--sp-2);border-bottom:1px solid var(--hair-1);align-items:center}.provider-detail .detail-head strong{font-size:var(--fs-body)}.provider-detail .detail-group{display:flex;flex-direction:column;gap:var(--sp-2);padding-top:var(--sp-2);border-top:1px solid var(--hair-1)}.provider-detail .detail-group .detail-group-title{font-size:var(--fs-caption);color:var(--text-3);letter-spacing:.08em}.provider-detail .detail-group .detail-field-label{min-width:4.5rem;color:var(--text-2)}.provider-detail .detail-field.pair .detail-field-label{min-width:0}.provider-toolbar .ctl:last-child{border-style:dashed;color:var(--text-2)}.provider-toolbar .ctl:last-child:hover{border-color:var(--hair-2);color:var(--text-1)}.provider-detail .detail-head{justify-content:space-between;gap:var(--sp-2)}.provider-detail .detail-head-id{display:flex;align-items:center;gap:var(--sp-2);min-width:0}.provider-detail .detail-head-id strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.provider-detail .detail-head-tags{display:flex;align-items:center;gap:var(--sp-1);flex:none}.provider-detail .detail-head-tags .meta.mono-id{font-family:var(--mono);font-size:var(--fs-caption);color:var(--text-3)}.provider-detail .detail-head-tags .meta.tag{font-size:var(--fs-caption);color:var(--text-2);border:1px solid var(--hair-2);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.provider-detail .model-row-state{display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-1);min-width:0}.provider-detail .test-result{padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm);background:var(--surface-2);border-left:2px solid var(--text-3)}.provider-detail .test-result.ok{border-left-color:var(--ok)}.provider-detail .test-result.fail{border-left-color:var(--danger)}.provider-detail .test-result.fail.network,.provider-detail .test-result.fail.no-endpoint{border-left-color:var(--warn)}.provider-detail .model-row .model-use{opacity:0;transition:opacity var(--dur-fast) var(--ease)}.provider-detail .model-row:hover .model-use,.provider-detail .model-row:focus-within .model-use,.provider-detail .model-row .model-use:focus-visible{opacity:1}.provider-detail .model-row .model-use{padding:1px var(--sp-2);font-size:var(--fs-caption);color:var(--text-3)}.provider-detail .model-row .model-use:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.provider-detail .detail-unsaved{margin-right:auto;align-self:center;color:var(--warn);font-size:var(--fs-caption)}.provider-detail .detail-actions{justify-content:flex-end}.provider-master{align-items:stretch}.provider-master .provider-cards{max-height:none;overflow-y:visible}.provider-card .card-model-count{color:var(--text-3);font-size:var(--fs-caption)}.provider-detail .detail-read-text{color:var(--text-1);overflow-wrap:anywhere;min-width:0}.provider-detail .detail-field .key-badge{border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);font-size:var(--fs-caption);line-height:1.5;color:var(--text-2)}.provider-detail .detail-field .key-badge.on{color:var(--ok);border-color:rgb(var(--ok-rgb) / .35)}.provider-detail .detail-field .key-badge.off{color:var(--text-3);border-style:dashed}.provider-detail .model-row-name{font-family:var(--mono);color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.provider-detail .model-row-ctx{text-align:right;color:var(--text-2);font-variant-numeric:tabular-nums;font-size:var(--fs-ui)}.provider-detail .model-read-row.live{box-shadow:inset 2px 0 0 var(--accent);background:rgb(var(--accent-rgb) / .06);padding-left:var(--sp-2)}.provider-detail .model-row .model-star{width:1.9rem;padding-inline:0;text-align:center;color:var(--text-3)}.provider-detail .model-row .model-star:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.provider-detail .model-row .model-star{opacity:0;transition:opacity var(--dur-fast) var(--ease)}.provider-detail .model-row:hover .model-star,.provider-detail .model-row:focus-within .model-star,.provider-detail .model-row .model-star:focus-visible,.provider-detail .model-row .model-star:disabled{opacity:1}.provider-detail .model-read-row .model-star:disabled{color:var(--accent);border:none;background:none}.provider-detail .model-manager-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2)}.provider-detail .model-config{font-size:var(--fs-ui);padding:var(--sp-1) var(--sp-3)}.provider-detail .model-read-row{display:grid;grid-template-columns:minmax(0,1fr) 8rem max-content;align-items:center;column-gap:var(--sp-2);padding:var(--sp-1) 0;border-bottom:1px solid var(--hair-1)}.provider-detail .model-empty{padding:var(--sp-2) 0;font-size:var(--fs-ui);color:var(--text-3)}@media (max-width: 720px){.provider-detail .model-read-row{grid-template-columns:minmax(0,1fr) max-content}.provider-detail .model-read-row .model-row-ctx{grid-column:2}.provider-detail .model-read-row .model-row-state{grid-column:1 / -1;justify-content:flex-start}}.modal-card.mcm{max-width:620px;width:min(620px,calc(100vw - var(--sp-8)));gap:var(--sp-2)}.modal-card.changes-panel,.modal-card.computer-panel,.modal-card.schedules-panel{max-width:620px;width:min(620px,calc(100vw - var(--sp-8)))}.mcm-head{display:flex;align-items:center;gap:var(--sp-2)}.mcm-head h3{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mcm-close{flex:none;color:var(--text-3)}.mcm-close:hover:not(:disabled){color:var(--text-1);border-color:var(--hair-2)}.mcm-add{display:grid;grid-template-columns:minmax(0,1fr) 8rem max-content;align-items:center;column-gap:var(--sp-2)}.mcm-add-name{position:relative;display:flex;align-items:center;gap:var(--sp-1);min-width:0}.mcm-add-name input.mcm-name{flex:1;min-width:0}.mcm-drop-toggle{flex:none;padding-inline:var(--sp-1);white-space:nowrap;color:var(--text-2)}.mcm-refresh{flex:none;width:1.9rem;padding-inline:0;text-align:center;color:var(--text-2)}.mcm-drop-toggle:disabled,.mcm-refresh:disabled{color:var(--text-3)}.mcm-drop-toggle:not(:disabled):hover,.mcm-refresh:not(:disabled):hover{color:var(--text-1);border-color:var(--hair-2)}.mcm-drop{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:var(--z-float);max-height:12rem;overflow-y:auto;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;border-radius:var(--radius-lg);box-shadow:var(--elev-2)}.mcm-opt{display:flex;align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-1) var(--sp-2);text-align:left;background:none;border:none;border-radius:0;cursor:pointer;color:var(--text-1)}.mcm-opt:not(:disabled):hover{background:var(--surface-2)}.mcm-opt:disabled{color:var(--text-3);cursor:default}.mcm-opt-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono)}.mcm-opt-ctx{color:var(--text-2);font-variant-numeric:tabular-nums;font-size:var(--fs-caption)}.mcm-opt-tag{color:var(--text-3);font-size:var(--fs-caption);white-space:nowrap}.mcm-drop-empty{padding:var(--sp-2);color:var(--text-3);font-size:var(--fs-ui)}.mcm-pulling{font-size:var(--fs-caption)}.mcm-pull-error{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);font-size:var(--fs-ui)}.mcm-list-head{font-size:var(--fs-caption);color:var(--text-3);letter-spacing:.04em;padding-bottom:var(--sp-1);border-bottom:1px solid var(--hair-1)}.mcm-rows{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) 0}.mcm-row{display:grid;grid-template-columns:minmax(0,1fr) 8rem 1.9rem;align-items:center;column-gap:var(--sp-2)}.mcm-row input.mcm-name{width:100%;min-width:0;font-family:var(--mono)}.mcm-row input.mcm-ctx,.mcm-add input.mcm-ctx{width:100%;min-width:0;text-align:right;color:var(--text-2);font-variant-numeric:tabular-nums}.mcm-del{width:1.9rem;padding-inline:0;text-align:center;color:var(--text-3)}.mcm-row .mcm-del:hover:not(:disabled){color:var(--danger);border-color:var(--danger)}.mcm-empty{padding:var(--sp-3) 0;text-align:center}.mcm-foot{justify-content:flex-end}.recap-banner{margin:var(--sp-3) var(--sp-4) var(--sp-1);padding:var(--sp-3) var(--sp-4);border:1px solid var(--hair-1);border-left:3px solid var(--accent);border-radius:var(--radius-md);background:var(--surface);display:flex;flex-direction:column;gap:var(--sp-2);animation:fade var(--dur-med) var(--ease)}.recap-title{font-size:var(--fs-body);font-weight:var(--fw-strong)}.recap-segment{font-size:var(--fs-body);line-height:var(--lh-body)}.recap-label{color:var(--text-2);margin-right:var(--sp-1)}.recap-stats{font-size:var(--fs-caption);color:var(--text-2)}.recap-close{align-self:flex-end;margin-top:var(--sp-1)}.recovery-banner{margin:var(--sp-1) var(--sp-4);padding:var(--sp-1) var(--sp-3);border:1px solid var(--hair-1);border-left:3px solid var(--accent);border-radius:var(--radius-md);background:var(--surface)}.recovery-title{font-size:var(--fs-caption);color:var(--text-2)}.tb-changes{flex:none;display:inline-flex;align-items:center;height:22px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:transparent;color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer;-webkit-app-region:no-drag;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.tb-changes:hover{background:var(--surface);color:var(--text-1)}.changes-panel .chg-head{flex:none;font-size:var(--fs-ui)}.changes-panel .chg-runs{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-3)}.chg-run{display:flex;flex-direction:column;gap:var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-3)}.chg-run-h{flex:none;color:var(--text-2);font-size:var(--fs-ui);font-weight:var(--fw-strong)}.chg-files{display:flex;flex-direction:column;gap:var(--sp-1)}.chg-file{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2)}.chg-file-wrap{display:flex;align-items:center;gap:var(--sp-1)}.chg-file-wrap>.chg-file{flex:1 1 auto;min-width:0}.chg-revert{flex:none;display:inline-flex;align-items:center;height:18px;padding:0 var(--sp-2);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer;user-select:none}.chg-revert:hover{color:var(--text-1);background:var(--hover)}.chg-revert:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.revert-warn{margin-top:var(--sp-2);padding:var(--sp-2);border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-ui);line-height:1.6}.chg-path{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-1)}.chg-badge{flex:none;display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.chg-badge[data-op=created]{background:rgb(var(--ok-rgb) / .12);color:var(--text-1)}.chg-cmdgroup{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-2);border-radius:var(--radius-md);background:var(--surface-2)}.chg-cmdgroup .chg-file-wrap{padding:0 var(--sp-1)}.chg-cmd-h{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1.4}.chg-cmd-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chg-cmd-badge{flex:none;display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);margin-left:var(--sp-1);border-radius:var(--radius-sm);background:rgb(var(--ok-rgb) / .12);color:var(--text-1);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.chg-cmd-undo{flex:none;display:inline-flex;align-items:center;height:18px;padding:0 var(--sp-2);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer;user-select:none}.chg-cmd-undo:hover{color:var(--text-1);background:var(--hover)}.chg-cmd-undo:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.chg-cmd-undo[aria-disabled=true]{opacity:.5;cursor:not-allowed}.chg-cmd-undo[aria-disabled=true]:hover{color:var(--text-2);background:var(--surface)}.chg-exp{align-self:flex-start;display:inline-flex;align-items:center;gap:var(--sp-1);padding:0;border:0;background:none;font-size:var(--fs-caption);color:var(--text-2);cursor:pointer}.chg-exp:hover{color:var(--text-1)}.chg-detail{margin:0;max-height:220px;overflow-y:auto;background:var(--surface-2);color:var(--text-2);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);font-family:var(--mono);font-size:var(--fs-ui);line-height:var(--lh-ui);white-space:pre-wrap;overflow-wrap:anywhere;text-align:left}.dtx-add{color:var(--ok);background:rgb(var(--ok-rgb) / .1)}.dtx-del{color:var(--danger);background:rgb(var(--danger-rgb) / .1)}.dtx-hunk{color:var(--text-3)}.dtx-file{color:var(--text-2);background:var(--surface);border-radius:var(--radius-sm);padding:0 var(--sp-1);margin:0 calc(var(--sp-1) * -1)}.chg-cnt-plus{color:var(--ok)}.chg-cnt-minus{color:var(--danger)}button.chg-file{border:0;background:none;padding:0;font:inherit;text-align:left;color:inherit;cursor:pointer}button.chg-file:hover .chg-path{text-decoration:underline dotted}.computer-panel .cap-head{flex:none;font-size:var(--fs-ui)}.computer-panel .cap-runs{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-3)}.cap-run{display:flex;flex-direction:column;gap:var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-3)}.cap-run-h{flex:none;color:var(--text-2);font-size:var(--fs-ui);font-weight:var(--fw-strong)}.cap-acts{display:flex;flex-direction:column;gap:var(--sp-1)}.cap-act{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--sp-1);font-size:var(--fs-ui);color:var(--text-1)}.cap-act[data-err=true]{color:var(--danger)}.cap-verb{color:var(--text-2)}.cap-act[data-err=true] .cap-verb{color:var(--danger)}.cap-text{min-width:0;overflow-wrap:anywhere;white-space:pre-wrap}.cap-badge{flex:none;display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.cap-dur{flex:none;color:var(--text-2);font-size:var(--fs-caption)}.cap-preview{flex:1 0 100%;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);font-family:var(--mono);font-size:var(--fs-caption)}.fork-act{flex:none;align-self:center;height:20px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;opacity:0;transition:opacity var(--dur-fast) var(--ease);cursor:pointer}.entry:hover .fork-act,.fork-act:focus-visible{opacity:1}.fork-act:hover{border-color:var(--hair-2);color:var(--text-1)}.fork-badge{flex:none;align-self:center;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);background:rgb(var(--accent-rgb) / .14);color:var(--accent);font-size:var(--fs-caption);line-height:1}.armed-branch{display:flex;align-items:center;gap:var(--sp-2);margin:var(--sp-2) var(--sp-3);padding:var(--sp-2) var(--sp-3);max-width:100%;overflow-wrap:anywhere;flex-wrap:wrap;border:1px solid rgb(var(--accent-rgb) / .45);border-radius:var(--radius-md);background:rgb(var(--accent-rgb) / .07)}.armed-text{flex:1 1 auto;min-width:0;font-size:var(--fs-caption);color:var(--text-1);line-height:1.5}.branch-bar{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) var(--sp-3) 0}.branch-chip{align-self:flex-start;height:20px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer}.branch-chip:hover{border-color:var(--hair-2);color:var(--text-1)}.branch-chip[aria-expanded=true]{border-color:var(--accent);color:var(--accent)}.branch-panel{display:flex;flex-direction:column;border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.branch-row{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--hair-1);font-size:var(--fs-caption)}.branch-row:last-of-type{border-bottom:none}.branch-row.cur{background:rgb(var(--accent-rgb) / .07)}.branch-row .row-n{flex:none;color:var(--text-2);font-family:var(--mono)}.branch-row .row-main{flex:1;color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.branch-row .row-count{flex:none;color:var(--text-2)}.branch-row .row-cur{flex:none;color:var(--accent)}.branch-note{padding:var(--sp-2) var(--sp-3);color:var(--text-2);font-size:var(--fs-caption);border-top:1px solid var(--hair-1)}.branch-note[data-variant=warn]{color:var(--warn)}.branch-note[data-variant=ok]{color:var(--ok)}.memory-review-card{display:flex;flex-direction:column;gap:var(--sp-1);margin:var(--sp-1) var(--sp-3) 0;padding:var(--sp-2) var(--sp-3);border:1px solid rgb(var(--accent-rgb) / .3);border-left:3px solid var(--accent);border-radius:var(--radius-md);background:var(--surface)}.memory-review-head{display:flex;align-items:center;gap:var(--sp-2)}.memory-review-title{flex:1;font-size:var(--fs-caption);color:var(--text-1);font-weight:var(--fw-strong)}.memory-review-card .hint{margin:0}.mem-row{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) 0;font-size:var(--fs-caption)}.mem-badge{flex:none;height:18px;padding:0 var(--sp-2);border:1px solid var(--warn);border-radius:var(--radius-sm);color:var(--warn);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.mem-badge.ok{border-color:var(--ok);color:var(--ok)}.mem-main{flex:1;display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}.mem-kind{color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mem-content{color:var(--text-1);overflow-wrap:anywhere}.mem-acts{flex:none;display:flex;gap:var(--sp-1)}.mem-note{color:var(--text-2);font-size:var(--fs-caption);border-top:1px solid var(--hair-1);padding-top:var(--sp-1)}.mem-note[data-variant=warn]{color:var(--warn)}.mem-note[data-variant=ok]{color:var(--ok)}.mem-empty{color:var(--text-2);font-size:var(--fs-caption);padding:var(--sp-1) 0}.memory-manage .mem-row{padding:var(--sp-2) 0;border-bottom:1px solid var(--hair-1)}.memory-manage .mem-row:last-of-type{border-bottom:none}.mem-edit textarea{border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1);font-family:inherit;font-size:var(--fs-caption);line-height:var(--lh-body);padding:var(--sp-1) var(--sp-2);resize:vertical;min-height:3.2em;width:100%;overflow-wrap:anywhere}.mem-edit textarea:focus{border-color:var(--accent)}.mem-edit textarea:disabled{opacity:.5;cursor:default}.mem-edit .mem-acts{justify-content:flex-end;padding-top:var(--sp-1)}.tb-changes.tb-sched{white-space:nowrap}.schedules-panel .sch-head{flex:none;font-size:var(--fs-ui)}.schedules-panel .sch-rows{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-2)}.sch-row{display:flex;flex-direction:column;gap:var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-3)}.sch-row[data-state=breaker]{border-color:rgb(var(--danger-rgb) / .4)}.sch-main{display:flex;align-items:baseline;gap:var(--sp-2)}.sch-prompt{flex:1 1 auto;min-width:0;overflow-wrap:anywhere;font-size:var(--fs-ui);color:var(--text-1)}.sch-badge{flex:none;font-size:var(--fs-caption);border-radius:var(--radius-sm);padding:1px var(--sp-2);color:var(--text-2);background:var(--surface-2)}.sch-badge[data-state=active]{color:var(--ok);background:rgb(var(--ok-rgb) / .1)}.sch-badge[data-state=breaker]{color:var(--danger);background:rgb(var(--danger-rgb) / .1)}.sch-meta{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:var(--sp-2);row-gap:var(--sp-1);font-size:var(--fs-caption);color:var(--text-2)}.sch-trig{color:var(--text-1)}.sch-last{color:var(--text-3)}.sch-last[data-ok=true]{color:var(--ok)}.sch-row[data-state=breaker] .sch-last{color:var(--danger)}.sch-session{color:var(--accent);background:rgb(var(--accent-rgb) / .08);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.sch-acts{display:flex;align-items:center;gap:var(--sp-1)}.sch-act{font-size:var(--fs-caption);color:var(--text-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:none;padding:1px var(--sp-2);cursor:pointer}.sch-act:hover{background:var(--surface);color:var(--text-1);border-color:var(--hair-2)}.sch-act.sch-del:hover{color:var(--danger);border-color:rgb(var(--danger-rgb) / .4)}.chip.sideqa.on{color:var(--accent-ink);background:rgb(var(--accent-rgb) / .85);border-color:rgb(var(--accent-rgb) / .9)}.sideqa-lane{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-2) 0}.sideqa{border:1px dashed rgb(var(--accent-rgb) / .45);border-radius:var(--radius-md);background:rgb(var(--accent-rgb) / .05);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-caption);line-height:var(--lh-body)}.sideqa-tag{font-weight:var(--fw-strong);color:var(--accent);font-size:var(--fs-caption);letter-spacing:.04em;margin-bottom:var(--sp-1)}.sideqa-q{color:var(--text-2);font-weight:var(--fw-strong);margin-bottom:var(--sp-1)}.sideqa-a{overflow-wrap:anywhere;white-space:pre-wrap}.sideqa-foot{display:flex;align-items:center;gap:var(--sp-2);margin-top:var(--sp-2)}.sideqa-rounds{color:var(--text-3);opacity:.7}.sideqa-promote{height:24px;padding:0 var(--sp-3);border-radius:var(--radius-sm);font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-caption);color:var(--accent);background:rgb(var(--accent-rgb) / .1);border:1px solid rgb(var(--accent-rgb) / .35);cursor:pointer}.sideqa-promote:hover{background:rgb(var(--accent-rgb) / .18)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as gr,a as To,W as Ao,r as i,j as e,i as He,b as Fe,c as qe,d as jr,R as ce,g as In,p as Do,e as Oo,s as Io,E as Lo,f as Qt,h as ns,k as ea,l as Po,m as _o,n as Fo,o as zo,I as Bo,q as Ko,u as Uo,v as Wo,w as Ho,x as qo,y as Go,P as Vo,z as Yo,A as dl,B as Xo,C as br,D as Jo,F as Qo,G as Zo}from"./tokens-D-f0h-_m.js";const gn=1;function ec(t){const s=new WebSocket(t);return{get readyState(){return s.readyState},send:n=>s.send(n),close:(n,a)=>s.close(n,a),addEventListener:(n,a)=>s.addEventListener(n,a)}}function tc(){return`L-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`}function sc(t,s){if(s==null)return t;let n=t===void 0||Object.keys(t).length!==Object.keys(s).length;const a={};for(const[l,r]of Object.entries(s)){if(r===null||typeof r!="object"){n=!0;continue}const o=r.busy===!0,c=typeof r.sessionId=="string"?r.sessionId:"",d=t?.[l];d===void 0||d.busy!==o||d.sessionId!==c?(a[l]={busy:o,sessionId:c,history:d?.history??[],historyEpoch:d?.historyEpoch??0},n=!0):a[l]=d}return n?a:t}function nc(t,s,n,a){const l=t?.[s];return{...t??{},[s]:{busy:l?.busy??!1,sessionId:l?.sessionId??"",history:a?[...n]:[...l?.history??[],...n],historyEpoch:(l?.historyEpoch??0)+(a?1:0)}}}function ac(t=window.location){return decodeURIComponent(t.hash.replace(/^#/,""))}function Ln(t=window.location){return new URLSearchParams(t.search).get("shell")==="desktop"?"desktop":null}function lc(t=window.location){return`${t.protocol==="https:"?"wss:":"ws:"}//${t.host}`}function rc(t){return[1e3,2e3,4e3,8e3,16e3,3e4][Math.min(t-1,5)]??3e4}const Pn=8;function ic(){const t=globalThis.crypto;return typeof t?.randomUUID=="function"?t.randomUUID():`c-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function oc(t){switch(t.op){case"submit":case"interrupt":case"setMode":case"answerPermission":case"recallSteer":case"answerAskUser":case"detachToolCall":case"resume":case"rewind":case"edit":case"settingsSaveKey":case"settingsSet":case"settingsSaveProvider":case"switchWorkspace":case"panelRootSet":case"agentRootSwitch":case"attachmentSave":case"fileSave":case"pluginMarketAdd":case"pluginMarketUpdate":case"pluginMarketRemove":case"pluginInstall":case"pluginInstallSpec":case"longtermMemoryForget":case"pluginUninstall":case"pluginEnable":case"pluginDisable":case"personaSave":case"personaDelete":case"petSubmit":case"petInterrupt":case"petAnswerPermission":case"memoryDecide":case"memoryEdit":case"fileRevert":case"schedulesSetEnabled":case"schedulesRunNow":return!0;case"improvementFace":return t.action!=="list";case"switch":return t.n!==void 0;case"recentWorkspaces":return t.add!==void 0;default:return!1}}function zs(t,s){return s===void 0||s===""||s===t.provider}function yr(t,s){return zs(t,s)?`/model ${t.model}`:`/provider ${t.provider}`}function ul(t){return t==="reply"?"language.reply":"language.reasoning"}function _n(t){return t==="workspace"?"accept":t}function cc(t){return t==="workspace"?"ask":t==="ask"?"auto":t==="auto"?"plan":"workspace"}function Nr(t){if(t<100)return"<0.1s";const s=t/1e3;if(s<60)return`${s.toFixed(1)}s`;const n=Math.floor(s);return n<3600?`${Math.floor(n/60)}m${String(n%60).padStart(2,"0")}s`:`${Math.floor(n/3600)}h${String(Math.floor(n%3600/60)).padStart(2,"0")}m`}function dc(t,s){const n=t.models.map(a=>a.contextLength!=null?{name:a.name,contextLength:a.contextLength}:{name:a.name});return t.custom?{...t.label!==""?{label:t.label}:{},baseUrl:t.baseUrl??"",...t.defaultModel!==""?{defaultModel:t.defaultModel}:{},...t.defaultContextLength!=null?{defaultContextLength:t.defaultContextLength}:{},...t.reasoningFormat!==void 0?{reasoningFormat:t.reasoningFormat}:{},...t.wire!==void 0?{wire:t.wire}:{},...t.persona!==void 0?{persona:t.persona}:{},models:n,effort:s}:{models:n,...t.reasoningFormat!==void 0?{reasoningFormat:t.reasoningFormat}:{},...t.wire!==void 0?{wire:t.wire}:{},...t.persona!==void 0?{persona:t.persona}:{},effort:s}}class uc{opts;probeListeners=new Set;loopListeners=new Set;ws=null;nextId=1;pendingOps=new Map;replayQueue=[];listeners=new Set;snap;userClosed=!1;reconnectAttempt=0;timer=null;clientId=ic();queuedSetMode=null;constructor(s){this.opts={...s,wsFactory:s.wsFactory??ec,reconnect:s.reconnect??!0,backoff:s.backoff??rc,maxReconnectAttempts:s.maxReconnectAttempts??Pn,setTimeout:s.setTimeout??((n,a)=>setTimeout(n,a)),clearTimeout:s.clearTimeout??(n=>clearTimeout(n))},this.snap={connection:"connecting",reconnectAttempt:0,lastClose:null,status:null,history:[],historyEpoch:0}}subscribe=s=>(this.listeners.add(s),()=>this.listeners.delete(s));getSnapshot=()=>this.snap;notify(){for(const s of this.listeners)s()}connect(){if(this.userClosed)return;this.opts.clearTimeout(this.timer),this.timer=null;const s=this.opts.wsFactory(this.opts.url);this.ws=s,this.snap.connection!=="reconnecting"&&(this.snap={...this.snap,connection:"connecting"},this.notify());const n=()=>this.ws===s;s.addEventListener("open",()=>{n()&&(s.send(JSON.stringify({t:"auth",token:this.opts.token})),this.snap={...this.snap,connection:"authenticating"},this.notify())}),s.addEventListener("message",a=>{n()&&this.onMessage(a.data)}),s.addEventListener("close",a=>{this.ws!==s&&this.ws!==null||this.onClose(a.code,a.reason??"")}),s.addEventListener("error",()=>{})}close(){this.userClosed=!0,this.opts.clearTimeout(this.timer),this.timer=null,this.failPending(new Error("client closed")),this.replayQueue=[],this.queuedSetMode=null,this.ws?.close(1e3,"client closed"),this.ws=null,this.snap={...this.snap,connection:"closed",reconnectAttempt:0},this.notify()}reconnect(){this.userClosed||(this.opts.clearTimeout(this.timer),this.timer=null,this.reconnectAttempt=0,this.snap={...this.snap,connection:"connecting",reconnectAttempt:0},this.notify(),this.connect())}clearView(){this.snap={...this.snap,history:[],historyEpoch:this.snap.historyEpoch+1},this.notify()}onClose(s,n){const a=new Error(`connection closed (${s})`);if(this.ws=null,this.snap={...this.snap,lastClose:{code:s,reason:n}},this.userClosed||this.opts.reconnect===!1||s===4401){this.failPending(a),this.replayQueue=[],this.snap={...this.snap,connection:s===4401?"auth-failed":"closed",reconnectAttempt:0},this.notify();return}if(this.reconnectAttempt>=this.opts.maxReconnectAttempts){this.failPending(a),this.replayQueue=[],this.snap={...this.snap,connection:"gave-up",reconnectAttempt:this.reconnectAttempt},this.notify();return}this.replayQueue=[];for(const[r,o]of this.pendingOps)o.replay!==void 0?this.replayQueue.push({id:r,op:o.replay}):(this.pendingOps.delete(r),o.reject(a));this.reconnectAttempt+=1,this.snap={...this.snap,connection:"reconnecting",reconnectAttempt:this.reconnectAttempt},this.notify();const l=this.opts.backoff(this.reconnectAttempt);this.timer=this.opts.setTimeout(()=>{this.timer=null,this.connect()},l)}onMessage(s){let n;try{n=JSON.parse(String(s))}catch{return}if(typeof n!="object"||n===null)return;const a=n;if(a.t==="state"){const l=this.snap.connection==="connected";this.snap={...this.snap,connection:"connected",reconnectAttempt:0,status:a.state,pet:a.pet,lanes:sc(this.snap.lanes,a.lanes)},this.reconnectAttempt=0,l||(this.snap={...this.snap,lastClose:null},this.flushReplayOps(),this.flushQueuedSetMode()),this.notify();return}if(a.t==="history"){const l=a;if(typeof l.sid=="string"&&l.sid!==""){this.snap={...this.snap,lanes:nc(this.snap.lanes,l.sid,l.entries,l.reset===!0)},this.notify();return}const r=l.reset===!0?[...l.entries]:[...this.snap.history,...l.entries];this.snap={...this.snap,connection:"connected",history:r,...l.reset===!0?{historyEpoch:this.snap.historyEpoch+1}:{}},this.notify();return}if(a.t==="event"){const l=a;if(l.event!==void 0)for(const r of[...this.loopListeners])r(l.event,typeof l.at=="number"?l.at:Date.now());return}if(a.t==="probe"){const l=a.event;if(l!==void 0)for(const r of[...this.probeListeners])r(l);return}if(a.t==="result"){const l=a,r=this.pendingOps.get(l.id);if(r===void 0)return;this.pendingOps.delete(l.id),typeof l.err=="string"?r.reject(new Error(l.err)):r.resolve(l.ok);return}}failPending(s){for(const[,n]of this.pendingOps)n.reject(s);this.pendingOps.clear()}sendOp(s){return new Promise((n,a)=>{if(this.ws===null||this.ws.readyState!==gn){a(new Error("not connected"));return}const l=this.nextId++;this.pendingOps.set(l,{resolve:n,reject:a,...oc(s)?{replay:s}:{}}),this.ws.send(JSON.stringify({t:"op",id:l,op:s,cid:this.clientId}))})}flushReplayOps(){for(;this.replayQueue.length>0;){const s=this.replayQueue[0];if(s===void 0||this.ws===null||this.ws.readyState!==gn)return;this.replayQueue.shift(),this.ws.send(JSON.stringify({t:"op",id:s.id,op:s.op,cid:this.clientId}))}}submit(s,n){return this.sendOp({op:"submit",text:s,...n?.plan===!0?{plan:!0}:{},...n?.expand===!1?{expand:!1}:{},...n?.images!==void 0&&n.images.length>0?{images:n.images}:{},...n?.files!==void 0&&n.files.length>0?{files:n.files}:{},...n?.sid!==void 0?{sid:n.sid}:{}})}interrupt(s){return this.sendOp({op:"interrupt",...s!==void 0?{sid:s}:{}})}setMode(s,n){return n===void 0&&(this.ws===null||this.ws.readyState!==gn||this.snap.connection!=="connected")?(this.queuedSetMode=s,Promise.resolve(!0)):this.sendOp({op:"setMode",mode:s,...n!==void 0?{sid:n}:{}})}flushQueuedSetMode(){if(this.queuedSetMode===null)return;const s=this.queuedSetMode;this.queuedSetMode=null,this.sendOp({op:"setMode",mode:s}).catch(()=>{})}answerPermission(s,n,a){return this.sendOp({op:"answerPermission",allow:s,...n!==void 0?{reason:n}:{},...a!==void 0?{scope:a}:{}})}recallSteer(s,n){return this.sendOp({op:"recallSteer",index:s,text:n})}answerAskUser(s){return this.sendOp({op:"answerAskUser",...s!==void 0?{answer:s}:{}})}detachToolCall(s){return this.sendOp({op:"detachToolCall",...s!==void 0?{callId:s}:{}})}petSubmit(s){return this.sendOp({op:"petSubmit",text:s})}petInterrupt(){return this.sendOp({op:"petInterrupt"})}petAnswerPermission(s,n,a){return this.sendOp({op:"petAnswerPermission",allow:s,...n!==void 0?{reason:n}:{},...a!==void 0?{scope:a}:{}})}petHistory(){return this.sendOp({op:"petHistory"})}listSlashCommands(){return this.sendOp({op:"listSlashCommands"})}sessions(){return this.sendOp({op:"sessions"})}sessionSearch(s){return this.sendOp({op:"sessionSearch",q:s})}sessionDelete(s){return this.sendOp({op:"sessionDelete",id:s})}sessionTrashList(){return this.sendOp({op:"sessionTrashList"})}sessionRestore(s){return this.sendOp({op:"sessionRestore",id:s})}sessionContinue(s){return this.sendOp({op:"sessionContinue",id:s})}schedulesList(){return this.sendOp({op:"schedulesList"})}schedulesSetEnabled(s,n){return this.sendOp({op:"schedulesSetEnabled",id:s,enabled:n})}schedulesRemove(s){return this.sendOp({op:"schedulesRemove",id:s})}schedulesRunNow(s,n){return this.sendOp({op:"schedulesRunNow",id:s,...n?.resetBreaker===!0?{resetBreaker:!0}:{}})}resume(s,n){return this.sendOp({op:"resume",id:s,...n!==void 0?{sid:n}:{}})}resumeFork(s){return this.sendOp({op:"resume",id:s,fork:!0})}rewind(s){return this.sendOp({op:"rewind",target:s})}edit(s){return this.sendOp({op:"edit",n:s})}tree(){return this.sendOp({op:"tree"})}switchBranch(s){return this.sendOp({op:"switch",...s!==void 0?{n:s}:{}})}disarmEdit(){return this.sendOp({op:"edit",n:0})}branchLeaves(){return this.sendOp({op:"branchLeaves"})}memoryList(){return this.sendOp({op:"memoryList"})}memoryDecide(s,n){return this.sendOp({op:"memoryDecide",id:s,action:n})}memoryEdit(s,n){return this.sendOp({op:"memoryEdit",id:s,content:n})}improvementFace(s,n){return this.sendOp({op:"improvementFace",action:s,...n!==void 0?{id:n}:{}})}settingsStatus(){return this.sendOp({op:"settingsStatus"})}settingsSaveKey(s,n){return this.sendOp({op:"settingsSaveKey",provider:s,key:n})}settingsTestConnection(s,n){return this.sendOp({op:"settingsTestConnection",provider:s,...n?.key!==void 0?{key:n.key}:{},...n?.model!==void 0?{model:n.model}:{}})}settingsSet(s,n){return this.sendOp({op:"settingsSet",key:s,value:n})}settingsSaveProvider(s,n){return this.sendOp({op:"settingsSaveProvider",id:s,config:n})}settingsDeleteProvider(s){return this.sendOp({op:"settingsDeleteProvider",id:s})}settingsListModels(s,n){return this.sendOp({op:"settingsListModels",provider:s,...n?.key!==void 0?{key:n.key}:{}})}recentWorkspaces(s){return this.sendOp({op:"recentWorkspaces",...s!==void 0?{add:s}:{}})}switchWorkspace(s){return this.sendOp({op:"switchWorkspace",path:s})}fileTree(s){return this.sendOp({op:"fileTree",path:s})}fileRead(s){return this.sendOp({op:"fileRead",path:s})}fileWrite(s,n,a){return this.sendOp({op:"fileWrite",path:s,content:n,base:a})}fileRevert(s,n){return this.sendOp({op:"fileRevert",path:s,sha:n})}sideQuestion(s,n){return this.sendOp({op:"sideQuestion",sessionId:s,text:n})}panelRootSet(s){return this.sendOp({op:"panelRootSet",path:s})}agentRootStatus(){return this.sendOp({op:"agentRootStatus"})}probeStream(s){return this.sendOp({op:"probeStream",...s!==void 0?{cat:s}:{}})}probeRecent(s,n){return this.sendOp({op:"probeRecent",...s!==void 0?{cat:s}:{},...n!==void 0?{limit:n}:{}})}probeStats(){return this.sendOp({op:"probeStats"})}probeEnable(s){return this.sendOp({op:"probeEnable",on:s})}onProbe(s){return this.probeListeners.add(s),()=>this.probeListeners.delete(s)}sessionAnatomy(){return this.sendOp({op:"sessionAnatomy"})}onLoopEvent(s){return this.loopListeners.add(s),()=>this.loopListeners.delete(s)}agentRootSwitch(s){return this.sendOp({op:"agentRootSwitch",path:s})}ctxInfo(){return this.sendOp({op:"ctxInfo"})}recap(s,n,a){return this.sendOp({op:"recap",sessionId:s,sinceMark:n,...a!==void 0?{sinceTs:a}:{}})}recoveryStatus(){return this.sendOp({op:"recoveryStatus"})}attachmentSave(s){return this.sendOp({op:"attachmentSave",inputs:s})}attachmentGet(s){return this.sendOp({op:"attachmentGet",ref:s})}fileSave(s){return this.sendOp({op:"fileSave",inputs:s})}pluginList(){return this.sendOp({op:"pluginList"})}mcpList(){return this.sendOp({op:"mcpList"})}pluginMarketList(){return this.sendOp({op:"pluginMarketList"})}pluginMarketAdd(s,n){return this.sendOp({op:"pluginMarketAdd",source:s,...n!==void 0?{name:n}:{}})}pluginMarketUpdate(s){return this.sendOp({op:"pluginMarketUpdate",name:s})}pluginMarketRemove(s){return this.sendOp({op:"pluginMarketRemove",name:s})}pluginInstall(s,n,a){return this.sendOp({op:"pluginInstall",name:s,market:n,scope:a})}longtermMemoryList(){return this.sendOp({op:"longtermMemoryList"})}longtermMemoryForget(s){return this.sendOp({op:"longtermMemoryForget",id:s})}pluginInstallSpec(s,n){return this.sendOp({op:"pluginInstallSpec",spec:s,...n===!0?{preview:!0}:{}})}pluginUninstall(s){return this.sendOp({op:"pluginUninstall",id:s})}pluginEnable(s){return this.sendOp({op:"pluginEnable",id:s})}pluginDisable(s){return this.sendOp({op:"pluginDisable",id:s})}personaList(){return this.sendOp({op:"personaList"})}personaGet(s){return this.sendOp({op:"personaGet",id:s})}personaSave(s){return this.sendOp({op:"personaSave",definition:s})}personaDelete(s){return this.sendOp({op:"personaDelete",id:s.id,...s.unbind===!0?{unbind:!0}:{}})}}function hc(t,s){return n=>{t.detachToolCall(n).then(a=>{a.kind==="refused"&&s(a.reason==="not_detachable"?`⏳ ${a.toolName??"该工具"} 不可转后台(不可中断族)——等待其结束,或停止整个运行`:"(这条调用刚好已结束——无需转后台)")}).catch(()=>{})}}function Bs(){return document.documentElement.dataset.theme==="light"?"light":"dark"}function vt(t){document.documentElement.dataset.theme=t,localStorage.setItem("wudao.ui.theme",t),gr(Ao,{theme:t}),document.documentElement.classList.contains("glass")&&To(t)}function Fn(){const t=document.documentElement.dataset.accent;return t==="black"||t==="blue"||t==="green"?t:"green"}function Zt(t){document.documentElement.dataset.accent=t,localStorage.setItem("wudao.ui.accent",t)}function mc(){return localStorage.getItem("wudao.ui.theme")==="light"?"light":"dark"}function pc(){const t=localStorage.getItem("wudao.ui.accent");return t==="black"||t==="blue"||t==="green"?t:"green"}function fc(){vt(mc()),Zt(pc())}const Ms="─",xc=" │ ",zn=1;function kr(t){return(t??[]).some(s=>s.status==="ready")}function vc(t){return kr(t.providers)?!1:t.wizardCompletedVersion<(t.copyVersion??zn)}function gc(t){return i.useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot)}const hl=16,wr=8,jc=6,bc=4,Sr=8,yc=3,Nc=1,kc=64,wc=4,Sc=1e3,Cc=.95,Ec=t=>t===47||t===92||t===45||t===95||t===46||t===32,$c=t=>t>=97&&t<=122,Rc=t=>t>=65&&t<=90;function ml(t,s,n){if(s===0)return n?Sr:0;const a=t.charCodeAt(s-1);return Ec(a)?wr:$c(a)&&Rc(t.charCodeAt(s))?jc:0}function Mc(t,s){const n=t.paths[s].toLowerCase();t.lowerPaths[s]=n;let a=0;for(let l=0;l<n.length;l++){const r=n.charCodeAt(l);r>=97&&r<=122&&(a|=1<<r-97)}t.charBits[s]=a}const Cr=new WeakMap;function Tc(t,s={}){const n=s.chunkMs??wc,a=s.now??(()=>performance.now()),l=s.schedule??(async()=>{await new Promise(p=>setTimeout(p,0))}),r={paths:[],lowerPaths:[],charBits:new Int32Array(0),ready:0},o={get size(){return r.ready}};Cr.set(o,r);let c=()=>{};const d=new Promise(p=>{c=p}),m=(async()=>{const p=new Set,v=[];let x=a();for(let N=0;N<t.length;N++){const M=t[N];M.length>0&&!p.has(M)&&(p.add(M),v.push(M)),(N&255)===255&&a()-x>n&&(await l(),x=a())}r.paths=v,r.lowerPaths=new Array(v.length),r.charBits=new Int32Array(v.length),x=a();let j=!0;for(let N=0;N<v.length;N++)Mc(r,N),(N&255)===255&&a()-x>n&&(r.ready=N+1,j&&(c(),j=!1),await l(),x=a());r.ready=v.length,c()})();return{index:o,queryable:d,done:m,readyCount:()=>r.ready}}function Ac(t,s,n){if(s.length===0)return[];const a=Cr.get(t),l=a.ready,r=s!==s.toLowerCase(),o=r?s:s.toLowerCase(),c=Math.min(o.length,kc);let d=0;for(let v=0;v<c;v++){const x=o.charCodeAt(v);x>=97&&x<=122&&(d|=1<<x-97)}const m=[];let p=-1/0;e:for(let v=0;v<l;v++){if((a.charBits[v]&d)!==d)continue;const x=r?a.paths[v]:a.lowerPaths[v];let j=x.indexOf(o.charAt(0));if(j===-1)continue;const N=[j];let M=0,y=0,g=j;for(let T=1;T<c;T++){if(j=x.indexOf(o.charAt(T),g+1),j===-1)continue e;N.push(j);const V=j-g-1;V===0?y+=bc:M+=yc+V*Nc,g=j}const O=c*(hl+wr)+Sr+32;if(m.length===n&&O+y-M<=p)continue;const $=a.paths[v];let k=c*hl+y-M;k+=ml($,N[0],!0);for(let T=1;T<c;T++)k+=ml($,N[T],!1);k+=Math.max(0,32-($.length>>2)),N[0]<$.lastIndexOf("/")+1&&(k-=Sc),$.includes("test")&&(k*=Cc),m.length<n?(m.push({path:$,hits:new Set(N),fuzzScore:k}),m.length===n&&(m.sort((T,V)=>V.fuzzScore-T.fuzzScore||(T.path<V.path?-1:1)),p=m[m.length-1].fuzzScore)):k>p&&(m.push({path:$,hits:new Set(N),fuzzScore:k}),m.sort((T,V)=>V.fuzzScore-T.fuzzScore||(T.path<V.path?-1:1)),m.pop(),p=m[m.length-1].fuzzScore)}return m.sort((v,x)=>x.fuzzScore-v.fuzzScore||(v.path<x.path?-1:1)),m.map(({path:v,hits:x,fuzzScore:j})=>({path:v,hits:x,score:j}))}function st(){i.useEffect(()=>{const t=document.activeElement;return()=>{t?.focus?.()}},[])}const Dc=200,Oc=80;function Ic(){try{return typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}function Er(t){const[s,n]=i.useState(!1),a=i.useRef(!0),l=i.useCallback(()=>{const o=t.current;if(o===null)return;const c=o.scrollHeight-o.scrollTop-o.clientHeight;a.current=c<Oc,n(c>Dc)},[t]);i.useEffect(()=>{const o=t.current;a.current&&o!==null&&typeof o.scrollTo=="function"&&o.scrollTo({top:o.scrollHeight})});const r=i.useCallback(()=>{const o=t.current;o!==null&&(typeof o.scrollTo=="function"&&o.scrollTo({top:o.scrollHeight,behavior:Ic()?"auto":"smooth"}),n(!1))},[t]);return{onScroll:l,jump:r,show:s}}function $r({show:t,onJump:s}){return t?e.jsx("button",{type:"button",className:"jump-bottom","aria-label":"回到底部",title:"回到底部",onClick:s,children:"↓"}):null}const pl="(该命令由插件/扩展实现 —— WS 协议 v1 无法在此展开;请使用 TUI 或 /help)",Lc="工作区",jn=()=>typeof window<"u"&&window.innerWidth<900,bn=["描述任务,或 /help 查看命令","@ 可引用文件","拖入图片直接发送","shift+tab 切换权限档"];let fl=0;function xl(t){return t==="ask"?"ask(每个工具执行前都会确认)":t==="workspace"?"accept(默认:工作区内读写与只读命令放行,其余命令/网络/MCP 仍确认)":t==="auto"?"auto(全自动:全部放行,不再询问)":"plan(只读探查:只放行读取与只读命令;完成方案后切回 accept/auto 执行)"}function Pc(){const t=bn[fl%bn.length]??bn[0];return fl+=1,t}const yn=()=>typeof window<"u"&&window.innerWidth<700,_c=260,Os=180,Is=()=>Math.floor(window.innerWidth*.4);function ct(t){return Math.min(Math.max(t,Os),Is())}const vl=220,gl=360,Fc=320,Bn=10;function Yt(t){return t.split("/").filter(s=>s!=="").slice(-1)[0]??t}function zc(t){return t.kind==="tool"&&(t.name==="write_file"||t.name==="edit_file")}const Bc=50,Kc=20;function Uc(t,s){const n=[];let a=0;for(const l of t)n.push({ch:l,hit:s.has(a)}),a+=l.length;return n}const jl=50,Wc=/^(.*) ×(\d+)$/;function Hc(t,s,n,a){const l=t[t.length-1];if(l!==void 0){const o=Wc.exec(l.text),c=o!==null?o[1]??"":l.text;if(c===s){const d=o!==null?Number(o[2]??"1")+1:2;return[...t.slice(0,-1),{text:`${c} ×${d}`,after:n,epoch:l.epoch}]}}const r=[...t,{text:s,after:n,epoch:a}];return r.length>jl?r.slice(r.length-jl):r}function qc(t,s){if(s.length===0)return t;const n=[];let a=0;for(let l=0;l<t.length;l++){for(;a<s.length;){const o=s[a];if(o===void 0||o.after>l)break;n.push({kind:"notice",text:o.text}),a+=1}const r=t[l];r!==void 0&&n.push(r)}for(;a<s.length;a++){const l=s[a];l!==void 0&&n.push({kind:"notice",text:l.text})}return n}const Rr="wudao.ui.v1";function Gc(){try{const t=window.localStorage.getItem(Rr);if(t===null)return{};const s=JSON.parse(t);return typeof s=="object"&&s!==null?s:{}}catch{return{}}}function bl(t){return Array.isArray(t.tabs)?t.tabs.filter(s=>typeof s=="object"&&s!==null&&typeof s.path=="string"&&s.path!==""&&typeof s.isDir=="boolean").slice(0,Bn).map(s=>({path:s.path,name:Yt(s.path),isDir:s.isDir})):[]}function Vc({getAllKnownPaths:t,onOpenPath:s,onClose:n}){const[a,l]=i.useState(""),[r,o]=i.useState(0),c=i.useRef(null),d=i.useRef({composing:!1,endedAt:0}),[m,p]=i.useState(0),v=i.useRef(null),x=()=>{const y=t(),g=v.current;if(g!==null&&g.source===y)return g.build;const O=Tc(y);return v.current={source:y,build:O},O.readyCount()<y.length&&(O.queryable.then(()=>p($=>$+1)),O.done.then(()=>p($=>$+1))),O},j=i.useId();st(),i.useEffect(()=>{c.current?.focus()},[]);const N=i.useMemo(()=>{const y=a.trim();return y===""?t().slice(0,Bc).map(g=>({path:g,hits:new Set})):Ac(x().index,y,Kc)},[a,m]),M=y=>{l(y),o(0)};return e.jsx("div",{className:"search-scrim",onClick:n,children:e.jsxs("div",{className:"search-pop",role:"dialog","aria-label":"文件搜索",onClick:y=>y.stopPropagation(),children:[e.jsx("div",{className:"session-head",children:"文件搜索 — ↑↓ 选择 · Enter 打开 · Esc 关闭"}),e.jsx("input",{ref:c,className:"search-input",type:"text",placeholder:"搜索文件…","aria-label":"搜索文件",value:a,onChange:y=>M(y.target.value),onCompositionStart:()=>{d.current=qe(d.current)},onCompositionEnd:()=>{d.current=Fe(d.current,Date.now())},onKeyDown:y=>{if(!He(y.nativeEvent,d.current,Date.now())){if(y.key==="Escape"){y.preventDefault(),n();return}if(y.key==="ArrowDown"){y.preventDefault(),o(g=>Math.min(g+1,N.length-1));return}if(y.key==="ArrowUp"){y.preventDefault(),o(g=>Math.max(g-1,0));return}if(y.key==="Enter"){y.preventDefault();const g=N[r];g!==void 0&&s(g.path)}}}}),e.jsx("div",{className:"search-results",role:"listbox","aria-activedescendant":N[r]!==void 0?`${j}-opt-${r}`:void 0,children:N.length===0?e.jsx("div",{className:"search-empty",children:"无匹配文件"}):N.map((y,g)=>e.jsx("div",{id:`${j}-opt-${g}`,className:`search-item${g===r?" sel":""}`,role:"option","aria-selected":g===r,"data-path":y.path,onClick:()=>s(y.path),children:Uc(y.path,y.hits).map(({ch:O,hit:$},k)=>$?e.jsx("span",{className:"hit",children:O},k):e.jsx("span",{children:O},k))},y.path))})]})})}function Yc(t){const[s,n]=i.useState(null),a=t.lanes,l=s!==null&&a!==void 0?a[s]:void 0,r=l===void 0,o=t.status;return{view:{capable:a!==void 0,viewingMain:r,sid:r?null:s,key:r?o?.sessionId??"":l.sessionId,sessionId:r?o?.sessionId??null:l.sessionId,busy:r?o?.busy??!1:l.busy,history:r?t.history:l.history,historyEpoch:r?t.historyEpoch:l.historyEpoch},viewLane:s,setViewLane:n}}const yl={notes:[],armedEdit:null,forkBadges:new Set,forkEcho:null};function Xc(){const[t,s]=i.useState({}),n=i.useCallback((m,p)=>{m!==""&&s(v=>({...v,[m]:p(v[m]??yl)}))},[]),a=i.useCallback(m=>t[m]??yl,[t]),l=i.useCallback((m,p,v,x)=>{n(m,j=>({...j,notes:Hc(j.notes,p,v,x)}))},[n]),r=i.useCallback((m,p)=>{n(m,v=>({...v,notes:v.notes.filter(p)}))},[n]),o=i.useCallback((m,p)=>{n(m,v=>({...v,armedEdit:p}))},[n]),c=i.useCallback((m,p)=>{n(m,v=>({...v,forkBadges:p}))},[n]),d=i.useCallback((m,p)=>{n(m,v=>({...v,forkEcho:p}))},[n]);return i.useMemo(()=>({slots:t,slot:a,stampNote:l,filterNotes:r,setArmedEdit:o,setForkBadges:c,setForkEcho:d}),[t,a,l,r,o,c,d])}function Jc(t,s){if(s===void 0)return;const n=new Set;t!==null&&t.busy&&t.sessionId!==""&&n.add(t.sessionId);for(const a of Object.values(s))a.busy&&a.sessionId!==""&&n.add(a.sessionId);return n}function Qc(t,s,n){if(n===(t?.sessionId??null))return{kind:"view-main"};if(s!==void 0){for(const[a,l]of Object.entries(s))if(l.sessionId===n)return{kind:"view-lane",laneId:a}}return{kind:"open-lane",laneId:tc()}}const Nl=.9,ve=t=>({width:(t.size??16)*Nl,height:(t.size??16)*Nl,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,...t.className!==void 0?{className:t.className}:{}});function es(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2.5h8a2 2 0 0 1 2 2V17a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"})})}function Zc(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2.5h8a2 2 0 0 1 2 2V17a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),e.jsx("path",{d:"M3 17l2-6h16l-2 6",opacity:"0.5"})]})}function ta(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"}),e.jsx("path",{d:"M14 3v5h5"})]})}function Mr(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"}),e.jsx("path",{d:"M14 3v5h5"}),e.jsx("path",{d:"M9 13h6M9 17h4"})]})}function bt(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M9 6l6 6-6 6"})})}function tt(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M6 9l6 6 6-6"})})}function Tr(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M12 5v14M5 12h14"})})}function ed(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M3 20h18"}),e.jsx("path",{d:"M4 16l5-6 4 3 7-9"})]})}function Ar(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M21 12a9 9 0 1 1-2.64-6.36"}),e.jsx("path",{d:"M21 3v6h-6"})]})}function ts(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M18 6L6 18M6 6l12 12"})})}function Dr(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("circle",{cx:"12",cy:"12",r:"3"}),e.jsx("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"})]})}function td(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("circle",{cx:"12",cy:"12",r:"9"}),e.jsx("path",{d:"M12 3a9 9 0 0 0 0 18z",fill:"currentColor",stroke:"none"})]})}function sd(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M9 6h12M9 12h12M9 18h12"}),e.jsx("path",{d:"M4 6h.01M4 12h.01M4 18h.01"})]})}function nd(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.2-9.19a4 4 0 0 1 5.65 5.66l-9.2 9.19a2 2 0 0 1-2.82-2.83l8.49-8.48"})})}function ad(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M4 6h16M4 12h16M4 18h16"})})}function ld(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("circle",{cx:"11",cy:"11",r:"7"}),e.jsx("path",{d:"M16.5 16.5 21 21"})]})}function rd(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M12 19V5M5.5 11.5 12 5l6.5 6.5"})})}function id(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M5 19 19 5"}),e.jsx("circle",{cx:"12",cy:"12",r:"9.5"})]})}function ht(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M4.5 12.5 9.5 17.5 19.5 7"})})}function Vs(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M12 3a9 9 0 1 0 9 9"})})}function od(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"})})}function cd(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M4 4.5h16v15H4z"}),e.jsx("path",{d:"M9.5 4.5v15"})]})}function dd(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("circle",{cx:"12",cy:"12",r:"9"}),e.jsx("path",{d:"M3 12h18"}),e.jsx("path",{d:"M12 3a14.5 14.5 0 0 1 0 18a14.5 14.5 0 0 1 0-18z"})]})}function ud(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M3 6h18"}),e.jsx("path",{d:"M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2"}),e.jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),e.jsx("path",{d:"M10 11v6"}),e.jsx("path",{d:"M14 11v6"})]})}function hd(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M12 20h9"}),e.jsx("path",{d:"M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z"})]})}const md=`<!-- @license lucide-static v1.48.0 - ISC -->
|
|
1
|
+
import{t as gr,a as To,W as Ao,r as i,j as e,i as He,b as Fe,c as qe,d as jr,R as ce,g as In,p as Do,e as Oo,s as Io,E as Lo,f as Qt,h as ns,k as ea,l as Po,m as _o,n as Fo,o as zo,I as Bo,q as Ko,u as Uo,v as Wo,w as Ho,x as qo,y as Go,P as Vo,z as Yo,A as dl,B as Xo,C as br,D as Jo,F as Qo,G as Zo}from"./tokens-Cd73jvpR.js";const gn=1;function ec(t){const s=new WebSocket(t);return{get readyState(){return s.readyState},send:n=>s.send(n),close:(n,a)=>s.close(n,a),addEventListener:(n,a)=>s.addEventListener(n,a)}}function tc(){return`L-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`}function sc(t,s){if(s==null)return t;let n=t===void 0||Object.keys(t).length!==Object.keys(s).length;const a={};for(const[l,r]of Object.entries(s)){if(r===null||typeof r!="object"){n=!0;continue}const o=r.busy===!0,c=typeof r.sessionId=="string"?r.sessionId:"",d=t?.[l];d===void 0||d.busy!==o||d.sessionId!==c?(a[l]={busy:o,sessionId:c,history:d?.history??[],historyEpoch:d?.historyEpoch??0},n=!0):a[l]=d}return n?a:t}function nc(t,s,n,a){const l=t?.[s];return{...t??{},[s]:{busy:l?.busy??!1,sessionId:l?.sessionId??"",history:a?[...n]:[...l?.history??[],...n],historyEpoch:(l?.historyEpoch??0)+(a?1:0)}}}function ac(t=window.location){return decodeURIComponent(t.hash.replace(/^#/,""))}function Ln(t=window.location){return new URLSearchParams(t.search).get("shell")==="desktop"?"desktop":null}function lc(t=window.location){return`${t.protocol==="https:"?"wss:":"ws:"}//${t.host}`}function rc(t){return[1e3,2e3,4e3,8e3,16e3,3e4][Math.min(t-1,5)]??3e4}const Pn=8;function ic(){const t=globalThis.crypto;return typeof t?.randomUUID=="function"?t.randomUUID():`c-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function oc(t){switch(t.op){case"submit":case"interrupt":case"setMode":case"answerPermission":case"recallSteer":case"answerAskUser":case"detachToolCall":case"resume":case"rewind":case"edit":case"settingsSaveKey":case"settingsSet":case"settingsSaveProvider":case"switchWorkspace":case"panelRootSet":case"agentRootSwitch":case"attachmentSave":case"fileSave":case"pluginMarketAdd":case"pluginMarketUpdate":case"pluginMarketRemove":case"pluginInstall":case"pluginInstallSpec":case"longtermMemoryForget":case"pluginUninstall":case"pluginEnable":case"pluginDisable":case"personaSave":case"personaDelete":case"petSubmit":case"petInterrupt":case"petAnswerPermission":case"memoryDecide":case"memoryEdit":case"fileRevert":case"schedulesSetEnabled":case"schedulesRunNow":return!0;case"improvementFace":return t.action!=="list";case"switch":return t.n!==void 0;case"recentWorkspaces":return t.add!==void 0;default:return!1}}function zs(t,s){return s===void 0||s===""||s===t.provider}function yr(t,s){return zs(t,s)?`/model ${t.model}`:`/provider ${t.provider}`}function ul(t){return t==="reply"?"language.reply":"language.reasoning"}function _n(t){return t==="workspace"?"accept":t}function cc(t){return t==="workspace"?"ask":t==="ask"?"auto":t==="auto"?"plan":"workspace"}function Nr(t){if(t<100)return"<0.1s";const s=t/1e3;if(s<60)return`${s.toFixed(1)}s`;const n=Math.floor(s);return n<3600?`${Math.floor(n/60)}m${String(n%60).padStart(2,"0")}s`:`${Math.floor(n/3600)}h${String(Math.floor(n%3600/60)).padStart(2,"0")}m`}function dc(t,s){const n=t.models.map(a=>a.contextLength!=null?{name:a.name,contextLength:a.contextLength}:{name:a.name});return t.custom?{...t.label!==""?{label:t.label}:{},baseUrl:t.baseUrl??"",...t.defaultModel!==""?{defaultModel:t.defaultModel}:{},...t.defaultContextLength!=null?{defaultContextLength:t.defaultContextLength}:{},...t.reasoningFormat!==void 0?{reasoningFormat:t.reasoningFormat}:{},...t.wire!==void 0?{wire:t.wire}:{},...t.persona!==void 0?{persona:t.persona}:{},models:n,effort:s}:{models:n,...t.reasoningFormat!==void 0?{reasoningFormat:t.reasoningFormat}:{},...t.wire!==void 0?{wire:t.wire}:{},...t.persona!==void 0?{persona:t.persona}:{},effort:s}}class uc{opts;probeListeners=new Set;loopListeners=new Set;ws=null;nextId=1;pendingOps=new Map;replayQueue=[];listeners=new Set;snap;userClosed=!1;reconnectAttempt=0;timer=null;clientId=ic();queuedSetMode=null;constructor(s){this.opts={...s,wsFactory:s.wsFactory??ec,reconnect:s.reconnect??!0,backoff:s.backoff??rc,maxReconnectAttempts:s.maxReconnectAttempts??Pn,setTimeout:s.setTimeout??((n,a)=>setTimeout(n,a)),clearTimeout:s.clearTimeout??(n=>clearTimeout(n))},this.snap={connection:"connecting",reconnectAttempt:0,lastClose:null,status:null,history:[],historyEpoch:0}}subscribe=s=>(this.listeners.add(s),()=>this.listeners.delete(s));getSnapshot=()=>this.snap;notify(){for(const s of this.listeners)s()}connect(){if(this.userClosed)return;this.opts.clearTimeout(this.timer),this.timer=null;const s=this.opts.wsFactory(this.opts.url);this.ws=s,this.snap.connection!=="reconnecting"&&(this.snap={...this.snap,connection:"connecting"},this.notify());const n=()=>this.ws===s;s.addEventListener("open",()=>{n()&&(s.send(JSON.stringify({t:"auth",token:this.opts.token})),this.snap={...this.snap,connection:"authenticating"},this.notify())}),s.addEventListener("message",a=>{n()&&this.onMessage(a.data)}),s.addEventListener("close",a=>{this.ws!==s&&this.ws!==null||this.onClose(a.code,a.reason??"")}),s.addEventListener("error",()=>{})}close(){this.userClosed=!0,this.opts.clearTimeout(this.timer),this.timer=null,this.failPending(new Error("client closed")),this.replayQueue=[],this.queuedSetMode=null,this.ws?.close(1e3,"client closed"),this.ws=null,this.snap={...this.snap,connection:"closed",reconnectAttempt:0},this.notify()}reconnect(){this.userClosed||(this.opts.clearTimeout(this.timer),this.timer=null,this.reconnectAttempt=0,this.snap={...this.snap,connection:"connecting",reconnectAttempt:0},this.notify(),this.connect())}clearView(){this.snap={...this.snap,history:[],historyEpoch:this.snap.historyEpoch+1},this.notify()}onClose(s,n){const a=new Error(`connection closed (${s})`);if(this.ws=null,this.snap={...this.snap,lastClose:{code:s,reason:n}},this.userClosed||this.opts.reconnect===!1||s===4401){this.failPending(a),this.replayQueue=[],this.snap={...this.snap,connection:s===4401?"auth-failed":"closed",reconnectAttempt:0},this.notify();return}if(this.reconnectAttempt>=this.opts.maxReconnectAttempts){this.failPending(a),this.replayQueue=[],this.snap={...this.snap,connection:"gave-up",reconnectAttempt:this.reconnectAttempt},this.notify();return}this.replayQueue=[];for(const[r,o]of this.pendingOps)o.replay!==void 0?this.replayQueue.push({id:r,op:o.replay}):(this.pendingOps.delete(r),o.reject(a));this.reconnectAttempt+=1,this.snap={...this.snap,connection:"reconnecting",reconnectAttempt:this.reconnectAttempt},this.notify();const l=this.opts.backoff(this.reconnectAttempt);this.timer=this.opts.setTimeout(()=>{this.timer=null,this.connect()},l)}onMessage(s){let n;try{n=JSON.parse(String(s))}catch{return}if(typeof n!="object"||n===null)return;const a=n;if(a.t==="state"){const l=this.snap.connection==="connected";this.snap={...this.snap,connection:"connected",reconnectAttempt:0,status:a.state,pet:a.pet,lanes:sc(this.snap.lanes,a.lanes)},this.reconnectAttempt=0,l||(this.snap={...this.snap,lastClose:null},this.flushReplayOps(),this.flushQueuedSetMode()),this.notify();return}if(a.t==="history"){const l=a;if(typeof l.sid=="string"&&l.sid!==""){this.snap={...this.snap,lanes:nc(this.snap.lanes,l.sid,l.entries,l.reset===!0)},this.notify();return}const r=l.reset===!0?[...l.entries]:[...this.snap.history,...l.entries];this.snap={...this.snap,connection:"connected",history:r,...l.reset===!0?{historyEpoch:this.snap.historyEpoch+1}:{}},this.notify();return}if(a.t==="event"){const l=a;if(l.event!==void 0)for(const r of[...this.loopListeners])r(l.event,typeof l.at=="number"?l.at:Date.now());return}if(a.t==="probe"){const l=a.event;if(l!==void 0)for(const r of[...this.probeListeners])r(l);return}if(a.t==="result"){const l=a,r=this.pendingOps.get(l.id);if(r===void 0)return;this.pendingOps.delete(l.id),typeof l.err=="string"?r.reject(new Error(l.err)):r.resolve(l.ok);return}}failPending(s){for(const[,n]of this.pendingOps)n.reject(s);this.pendingOps.clear()}sendOp(s){return new Promise((n,a)=>{if(this.ws===null||this.ws.readyState!==gn){a(new Error("not connected"));return}const l=this.nextId++;this.pendingOps.set(l,{resolve:n,reject:a,...oc(s)?{replay:s}:{}}),this.ws.send(JSON.stringify({t:"op",id:l,op:s,cid:this.clientId}))})}flushReplayOps(){for(;this.replayQueue.length>0;){const s=this.replayQueue[0];if(s===void 0||this.ws===null||this.ws.readyState!==gn)return;this.replayQueue.shift(),this.ws.send(JSON.stringify({t:"op",id:s.id,op:s.op,cid:this.clientId}))}}submit(s,n){return this.sendOp({op:"submit",text:s,...n?.plan===!0?{plan:!0}:{},...n?.expand===!1?{expand:!1}:{},...n?.images!==void 0&&n.images.length>0?{images:n.images}:{},...n?.files!==void 0&&n.files.length>0?{files:n.files}:{},...n?.sid!==void 0?{sid:n.sid}:{}})}interrupt(s){return this.sendOp({op:"interrupt",...s!==void 0?{sid:s}:{}})}setMode(s,n){return n===void 0&&(this.ws===null||this.ws.readyState!==gn||this.snap.connection!=="connected")?(this.queuedSetMode=s,Promise.resolve(!0)):this.sendOp({op:"setMode",mode:s,...n!==void 0?{sid:n}:{}})}flushQueuedSetMode(){if(this.queuedSetMode===null)return;const s=this.queuedSetMode;this.queuedSetMode=null,this.sendOp({op:"setMode",mode:s}).catch(()=>{})}answerPermission(s,n,a){return this.sendOp({op:"answerPermission",allow:s,...n!==void 0?{reason:n}:{},...a!==void 0?{scope:a}:{}})}recallSteer(s,n){return this.sendOp({op:"recallSteer",index:s,text:n})}answerAskUser(s){return this.sendOp({op:"answerAskUser",...s!==void 0?{answer:s}:{}})}detachToolCall(s){return this.sendOp({op:"detachToolCall",...s!==void 0?{callId:s}:{}})}petSubmit(s){return this.sendOp({op:"petSubmit",text:s})}petInterrupt(){return this.sendOp({op:"petInterrupt"})}petAnswerPermission(s,n,a){return this.sendOp({op:"petAnswerPermission",allow:s,...n!==void 0?{reason:n}:{},...a!==void 0?{scope:a}:{}})}petHistory(){return this.sendOp({op:"petHistory"})}listSlashCommands(){return this.sendOp({op:"listSlashCommands"})}sessions(){return this.sendOp({op:"sessions"})}sessionSearch(s){return this.sendOp({op:"sessionSearch",q:s})}sessionDelete(s){return this.sendOp({op:"sessionDelete",id:s})}sessionTrashList(){return this.sendOp({op:"sessionTrashList"})}sessionRestore(s){return this.sendOp({op:"sessionRestore",id:s})}sessionContinue(s){return this.sendOp({op:"sessionContinue",id:s})}schedulesList(){return this.sendOp({op:"schedulesList"})}schedulesSetEnabled(s,n){return this.sendOp({op:"schedulesSetEnabled",id:s,enabled:n})}schedulesRemove(s){return this.sendOp({op:"schedulesRemove",id:s})}schedulesRunNow(s,n){return this.sendOp({op:"schedulesRunNow",id:s,...n?.resetBreaker===!0?{resetBreaker:!0}:{}})}resume(s,n){return this.sendOp({op:"resume",id:s,...n!==void 0?{sid:n}:{}})}resumeFork(s){return this.sendOp({op:"resume",id:s,fork:!0})}rewind(s){return this.sendOp({op:"rewind",target:s})}edit(s){return this.sendOp({op:"edit",n:s})}tree(){return this.sendOp({op:"tree"})}switchBranch(s){return this.sendOp({op:"switch",...s!==void 0?{n:s}:{}})}disarmEdit(){return this.sendOp({op:"edit",n:0})}branchLeaves(){return this.sendOp({op:"branchLeaves"})}memoryList(){return this.sendOp({op:"memoryList"})}memoryDecide(s,n){return this.sendOp({op:"memoryDecide",id:s,action:n})}memoryEdit(s,n){return this.sendOp({op:"memoryEdit",id:s,content:n})}improvementFace(s,n){return this.sendOp({op:"improvementFace",action:s,...n!==void 0?{id:n}:{}})}settingsStatus(){return this.sendOp({op:"settingsStatus"})}settingsSaveKey(s,n){return this.sendOp({op:"settingsSaveKey",provider:s,key:n})}settingsTestConnection(s,n){return this.sendOp({op:"settingsTestConnection",provider:s,...n?.key!==void 0?{key:n.key}:{},...n?.model!==void 0?{model:n.model}:{}})}settingsSet(s,n){return this.sendOp({op:"settingsSet",key:s,value:n})}settingsSaveProvider(s,n){return this.sendOp({op:"settingsSaveProvider",id:s,config:n})}settingsDeleteProvider(s){return this.sendOp({op:"settingsDeleteProvider",id:s})}settingsListModels(s,n){return this.sendOp({op:"settingsListModels",provider:s,...n?.key!==void 0?{key:n.key}:{}})}recentWorkspaces(s){return this.sendOp({op:"recentWorkspaces",...s!==void 0?{add:s}:{}})}switchWorkspace(s){return this.sendOp({op:"switchWorkspace",path:s})}fileTree(s){return this.sendOp({op:"fileTree",path:s})}fileRead(s){return this.sendOp({op:"fileRead",path:s})}fileWrite(s,n,a){return this.sendOp({op:"fileWrite",path:s,content:n,base:a})}fileRevert(s,n){return this.sendOp({op:"fileRevert",path:s,sha:n})}sideQuestion(s,n){return this.sendOp({op:"sideQuestion",sessionId:s,text:n})}panelRootSet(s){return this.sendOp({op:"panelRootSet",path:s})}agentRootStatus(){return this.sendOp({op:"agentRootStatus"})}probeStream(s){return this.sendOp({op:"probeStream",...s!==void 0?{cat:s}:{}})}probeRecent(s,n){return this.sendOp({op:"probeRecent",...s!==void 0?{cat:s}:{},...n!==void 0?{limit:n}:{}})}probeStats(){return this.sendOp({op:"probeStats"})}probeEnable(s){return this.sendOp({op:"probeEnable",on:s})}onProbe(s){return this.probeListeners.add(s),()=>this.probeListeners.delete(s)}sessionAnatomy(){return this.sendOp({op:"sessionAnatomy"})}onLoopEvent(s){return this.loopListeners.add(s),()=>this.loopListeners.delete(s)}agentRootSwitch(s){return this.sendOp({op:"agentRootSwitch",path:s})}ctxInfo(){return this.sendOp({op:"ctxInfo"})}recap(s,n,a){return this.sendOp({op:"recap",sessionId:s,sinceMark:n,...a!==void 0?{sinceTs:a}:{}})}recoveryStatus(){return this.sendOp({op:"recoveryStatus"})}attachmentSave(s){return this.sendOp({op:"attachmentSave",inputs:s})}attachmentGet(s){return this.sendOp({op:"attachmentGet",ref:s})}fileSave(s){return this.sendOp({op:"fileSave",inputs:s})}pluginList(){return this.sendOp({op:"pluginList"})}mcpList(){return this.sendOp({op:"mcpList"})}pluginMarketList(){return this.sendOp({op:"pluginMarketList"})}pluginMarketAdd(s,n){return this.sendOp({op:"pluginMarketAdd",source:s,...n!==void 0?{name:n}:{}})}pluginMarketUpdate(s){return this.sendOp({op:"pluginMarketUpdate",name:s})}pluginMarketRemove(s){return this.sendOp({op:"pluginMarketRemove",name:s})}pluginInstall(s,n,a){return this.sendOp({op:"pluginInstall",name:s,market:n,scope:a})}longtermMemoryList(){return this.sendOp({op:"longtermMemoryList"})}longtermMemoryForget(s){return this.sendOp({op:"longtermMemoryForget",id:s})}pluginInstallSpec(s,n){return this.sendOp({op:"pluginInstallSpec",spec:s,...n===!0?{preview:!0}:{}})}pluginUninstall(s){return this.sendOp({op:"pluginUninstall",id:s})}pluginEnable(s){return this.sendOp({op:"pluginEnable",id:s})}pluginDisable(s){return this.sendOp({op:"pluginDisable",id:s})}personaList(){return this.sendOp({op:"personaList"})}personaGet(s){return this.sendOp({op:"personaGet",id:s})}personaSave(s){return this.sendOp({op:"personaSave",definition:s})}personaDelete(s){return this.sendOp({op:"personaDelete",id:s.id,...s.unbind===!0?{unbind:!0}:{}})}}function hc(t,s){return n=>{t.detachToolCall(n).then(a=>{a.kind==="refused"&&s(a.reason==="not_detachable"?`⏳ ${a.toolName??"该工具"} 不可转后台(不可中断族)——等待其结束,或停止整个运行`:"(这条调用刚好已结束——无需转后台)")}).catch(()=>{})}}function Bs(){return document.documentElement.dataset.theme==="light"?"light":"dark"}function vt(t){document.documentElement.dataset.theme=t,localStorage.setItem("wudao.ui.theme",t),gr(Ao,{theme:t}),document.documentElement.classList.contains("glass")&&To(t)}function Fn(){const t=document.documentElement.dataset.accent;return t==="black"||t==="blue"||t==="green"?t:"green"}function Zt(t){document.documentElement.dataset.accent=t,localStorage.setItem("wudao.ui.accent",t)}function mc(){return localStorage.getItem("wudao.ui.theme")==="light"?"light":"dark"}function pc(){const t=localStorage.getItem("wudao.ui.accent");return t==="black"||t==="blue"||t==="green"?t:"green"}function fc(){vt(mc()),Zt(pc())}const Ms="─",xc=" │ ",zn=1;function kr(t){return(t??[]).some(s=>s.status==="ready")}function vc(t){return kr(t.providers)?!1:t.wizardCompletedVersion<(t.copyVersion??zn)}function gc(t){return i.useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot)}const hl=16,wr=8,jc=6,bc=4,Sr=8,yc=3,Nc=1,kc=64,wc=4,Sc=1e3,Cc=.95,Ec=t=>t===47||t===92||t===45||t===95||t===46||t===32,$c=t=>t>=97&&t<=122,Rc=t=>t>=65&&t<=90;function ml(t,s,n){if(s===0)return n?Sr:0;const a=t.charCodeAt(s-1);return Ec(a)?wr:$c(a)&&Rc(t.charCodeAt(s))?jc:0}function Mc(t,s){const n=t.paths[s].toLowerCase();t.lowerPaths[s]=n;let a=0;for(let l=0;l<n.length;l++){const r=n.charCodeAt(l);r>=97&&r<=122&&(a|=1<<r-97)}t.charBits[s]=a}const Cr=new WeakMap;function Tc(t,s={}){const n=s.chunkMs??wc,a=s.now??(()=>performance.now()),l=s.schedule??(async()=>{await new Promise(p=>setTimeout(p,0))}),r={paths:[],lowerPaths:[],charBits:new Int32Array(0),ready:0},o={get size(){return r.ready}};Cr.set(o,r);let c=()=>{};const d=new Promise(p=>{c=p}),m=(async()=>{const p=new Set,v=[];let x=a();for(let N=0;N<t.length;N++){const M=t[N];M.length>0&&!p.has(M)&&(p.add(M),v.push(M)),(N&255)===255&&a()-x>n&&(await l(),x=a())}r.paths=v,r.lowerPaths=new Array(v.length),r.charBits=new Int32Array(v.length),x=a();let j=!0;for(let N=0;N<v.length;N++)Mc(r,N),(N&255)===255&&a()-x>n&&(r.ready=N+1,j&&(c(),j=!1),await l(),x=a());r.ready=v.length,c()})();return{index:o,queryable:d,done:m,readyCount:()=>r.ready}}function Ac(t,s,n){if(s.length===0)return[];const a=Cr.get(t),l=a.ready,r=s!==s.toLowerCase(),o=r?s:s.toLowerCase(),c=Math.min(o.length,kc);let d=0;for(let v=0;v<c;v++){const x=o.charCodeAt(v);x>=97&&x<=122&&(d|=1<<x-97)}const m=[];let p=-1/0;e:for(let v=0;v<l;v++){if((a.charBits[v]&d)!==d)continue;const x=r?a.paths[v]:a.lowerPaths[v];let j=x.indexOf(o.charAt(0));if(j===-1)continue;const N=[j];let M=0,y=0,g=j;for(let T=1;T<c;T++){if(j=x.indexOf(o.charAt(T),g+1),j===-1)continue e;N.push(j);const V=j-g-1;V===0?y+=bc:M+=yc+V*Nc,g=j}const O=c*(hl+wr)+Sr+32;if(m.length===n&&O+y-M<=p)continue;const $=a.paths[v];let k=c*hl+y-M;k+=ml($,N[0],!0);for(let T=1;T<c;T++)k+=ml($,N[T],!1);k+=Math.max(0,32-($.length>>2)),N[0]<$.lastIndexOf("/")+1&&(k-=Sc),$.includes("test")&&(k*=Cc),m.length<n?(m.push({path:$,hits:new Set(N),fuzzScore:k}),m.length===n&&(m.sort((T,V)=>V.fuzzScore-T.fuzzScore||(T.path<V.path?-1:1)),p=m[m.length-1].fuzzScore)):k>p&&(m.push({path:$,hits:new Set(N),fuzzScore:k}),m.sort((T,V)=>V.fuzzScore-T.fuzzScore||(T.path<V.path?-1:1)),m.pop(),p=m[m.length-1].fuzzScore)}return m.sort((v,x)=>x.fuzzScore-v.fuzzScore||(v.path<x.path?-1:1)),m.map(({path:v,hits:x,fuzzScore:j})=>({path:v,hits:x,score:j}))}function st(){i.useEffect(()=>{const t=document.activeElement;return()=>{t?.focus?.()}},[])}const Dc=200,Oc=80;function Ic(){try{return typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}function Er(t){const[s,n]=i.useState(!1),a=i.useRef(!0),l=i.useCallback(()=>{const o=t.current;if(o===null)return;const c=o.scrollHeight-o.scrollTop-o.clientHeight;a.current=c<Oc,n(c>Dc)},[t]);i.useEffect(()=>{const o=t.current;a.current&&o!==null&&typeof o.scrollTo=="function"&&o.scrollTo({top:o.scrollHeight})});const r=i.useCallback(()=>{const o=t.current;o!==null&&(typeof o.scrollTo=="function"&&o.scrollTo({top:o.scrollHeight,behavior:Ic()?"auto":"smooth"}),n(!1))},[t]);return{onScroll:l,jump:r,show:s}}function $r({show:t,onJump:s}){return t?e.jsx("button",{type:"button",className:"jump-bottom","aria-label":"回到底部",title:"回到底部",onClick:s,children:"↓"}):null}const pl="(该命令由插件/扩展实现 —— WS 协议 v1 无法在此展开;请使用 TUI 或 /help)",Lc="工作区",jn=()=>typeof window<"u"&&window.innerWidth<900,bn=["描述任务,或 /help 查看命令","@ 可引用文件","拖入图片直接发送","shift+tab 切换权限档"];let fl=0;function xl(t){return t==="ask"?"ask(每个工具执行前都会确认)":t==="workspace"?"accept(默认:工作区内读写与只读命令放行,其余命令/网络/MCP 仍确认)":t==="auto"?"auto(全自动:全部放行,不再询问)":"plan(只读探查:只放行读取与只读命令;完成方案后切回 accept/auto 执行)"}function Pc(){const t=bn[fl%bn.length]??bn[0];return fl+=1,t}const yn=()=>typeof window<"u"&&window.innerWidth<700,_c=260,Os=180,Is=()=>Math.floor(window.innerWidth*.4);function ct(t){return Math.min(Math.max(t,Os),Is())}const vl=220,gl=360,Fc=320,Bn=10;function Yt(t){return t.split("/").filter(s=>s!=="").slice(-1)[0]??t}function zc(t){return t.kind==="tool"&&(t.name==="write_file"||t.name==="edit_file")}const Bc=50,Kc=20;function Uc(t,s){const n=[];let a=0;for(const l of t)n.push({ch:l,hit:s.has(a)}),a+=l.length;return n}const jl=50,Wc=/^(.*) ×(\d+)$/;function Hc(t,s,n,a){const l=t[t.length-1];if(l!==void 0){const o=Wc.exec(l.text),c=o!==null?o[1]??"":l.text;if(c===s){const d=o!==null?Number(o[2]??"1")+1:2;return[...t.slice(0,-1),{text:`${c} ×${d}`,after:n,epoch:l.epoch}]}}const r=[...t,{text:s,after:n,epoch:a}];return r.length>jl?r.slice(r.length-jl):r}function qc(t,s){if(s.length===0)return t;const n=[];let a=0;for(let l=0;l<t.length;l++){for(;a<s.length;){const o=s[a];if(o===void 0||o.after>l)break;n.push({kind:"notice",text:o.text}),a+=1}const r=t[l];r!==void 0&&n.push(r)}for(;a<s.length;a++){const l=s[a];l!==void 0&&n.push({kind:"notice",text:l.text})}return n}const Rr="wudao.ui.v1";function Gc(){try{const t=window.localStorage.getItem(Rr);if(t===null)return{};const s=JSON.parse(t);return typeof s=="object"&&s!==null?s:{}}catch{return{}}}function bl(t){return Array.isArray(t.tabs)?t.tabs.filter(s=>typeof s=="object"&&s!==null&&typeof s.path=="string"&&s.path!==""&&typeof s.isDir=="boolean").slice(0,Bn).map(s=>({path:s.path,name:Yt(s.path),isDir:s.isDir})):[]}function Vc({getAllKnownPaths:t,onOpenPath:s,onClose:n}){const[a,l]=i.useState(""),[r,o]=i.useState(0),c=i.useRef(null),d=i.useRef({composing:!1,endedAt:0}),[m,p]=i.useState(0),v=i.useRef(null),x=()=>{const y=t(),g=v.current;if(g!==null&&g.source===y)return g.build;const O=Tc(y);return v.current={source:y,build:O},O.readyCount()<y.length&&(O.queryable.then(()=>p($=>$+1)),O.done.then(()=>p($=>$+1))),O},j=i.useId();st(),i.useEffect(()=>{c.current?.focus()},[]);const N=i.useMemo(()=>{const y=a.trim();return y===""?t().slice(0,Bc).map(g=>({path:g,hits:new Set})):Ac(x().index,y,Kc)},[a,m]),M=y=>{l(y),o(0)};return e.jsx("div",{className:"search-scrim",onClick:n,children:e.jsxs("div",{className:"search-pop",role:"dialog","aria-label":"文件搜索",onClick:y=>y.stopPropagation(),children:[e.jsx("div",{className:"session-head",children:"文件搜索 — ↑↓ 选择 · Enter 打开 · Esc 关闭"}),e.jsx("input",{ref:c,className:"search-input",type:"text",placeholder:"搜索文件…","aria-label":"搜索文件",value:a,onChange:y=>M(y.target.value),onCompositionStart:()=>{d.current=qe(d.current)},onCompositionEnd:()=>{d.current=Fe(d.current,Date.now())},onKeyDown:y=>{if(!He(y.nativeEvent,d.current,Date.now())){if(y.key==="Escape"){y.preventDefault(),n();return}if(y.key==="ArrowDown"){y.preventDefault(),o(g=>Math.min(g+1,N.length-1));return}if(y.key==="ArrowUp"){y.preventDefault(),o(g=>Math.max(g-1,0));return}if(y.key==="Enter"){y.preventDefault();const g=N[r];g!==void 0&&s(g.path)}}}}),e.jsx("div",{className:"search-results",role:"listbox","aria-activedescendant":N[r]!==void 0?`${j}-opt-${r}`:void 0,children:N.length===0?e.jsx("div",{className:"search-empty",children:"无匹配文件"}):N.map((y,g)=>e.jsx("div",{id:`${j}-opt-${g}`,className:`search-item${g===r?" sel":""}`,role:"option","aria-selected":g===r,"data-path":y.path,onClick:()=>s(y.path),children:Uc(y.path,y.hits).map(({ch:O,hit:$},k)=>$?e.jsx("span",{className:"hit",children:O},k):e.jsx("span",{children:O},k))},y.path))})]})})}function Yc(t){const[s,n]=i.useState(null),a=t.lanes,l=s!==null&&a!==void 0?a[s]:void 0,r=l===void 0,o=t.status;return{view:{capable:a!==void 0,viewingMain:r,sid:r?null:s,key:r?o?.sessionId??"":l.sessionId,sessionId:r?o?.sessionId??null:l.sessionId,busy:r?o?.busy??!1:l.busy,history:r?t.history:l.history,historyEpoch:r?t.historyEpoch:l.historyEpoch},viewLane:s,setViewLane:n}}const yl={notes:[],armedEdit:null,forkBadges:new Set,forkEcho:null};function Xc(){const[t,s]=i.useState({}),n=i.useCallback((m,p)=>{m!==""&&s(v=>({...v,[m]:p(v[m]??yl)}))},[]),a=i.useCallback(m=>t[m]??yl,[t]),l=i.useCallback((m,p,v,x)=>{n(m,j=>({...j,notes:Hc(j.notes,p,v,x)}))},[n]),r=i.useCallback((m,p)=>{n(m,v=>({...v,notes:v.notes.filter(p)}))},[n]),o=i.useCallback((m,p)=>{n(m,v=>({...v,armedEdit:p}))},[n]),c=i.useCallback((m,p)=>{n(m,v=>({...v,forkBadges:p}))},[n]),d=i.useCallback((m,p)=>{n(m,v=>({...v,forkEcho:p}))},[n]);return i.useMemo(()=>({slots:t,slot:a,stampNote:l,filterNotes:r,setArmedEdit:o,setForkBadges:c,setForkEcho:d}),[t,a,l,r,o,c,d])}function Jc(t,s){if(s===void 0)return;const n=new Set;t!==null&&t.busy&&t.sessionId!==""&&n.add(t.sessionId);for(const a of Object.values(s))a.busy&&a.sessionId!==""&&n.add(a.sessionId);return n}function Qc(t,s,n){if(n===(t?.sessionId??null))return{kind:"view-main"};if(s!==void 0){for(const[a,l]of Object.entries(s))if(l.sessionId===n)return{kind:"view-lane",laneId:a}}return{kind:"open-lane",laneId:tc()}}const Nl=.9,ve=t=>({width:(t.size??16)*Nl,height:(t.size??16)*Nl,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,...t.className!==void 0?{className:t.className}:{}});function es(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2.5h8a2 2 0 0 1 2 2V17a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"})})}function Zc(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2.5h8a2 2 0 0 1 2 2V17a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),e.jsx("path",{d:"M3 17l2-6h16l-2 6",opacity:"0.5"})]})}function ta(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"}),e.jsx("path",{d:"M14 3v5h5"})]})}function Mr(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"}),e.jsx("path",{d:"M14 3v5h5"}),e.jsx("path",{d:"M9 13h6M9 17h4"})]})}function bt(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M9 6l6 6-6 6"})})}function tt(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M6 9l6 6 6-6"})})}function Tr(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M12 5v14M5 12h14"})})}function ed(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M3 20h18"}),e.jsx("path",{d:"M4 16l5-6 4 3 7-9"})]})}function Ar(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M21 12a9 9 0 1 1-2.64-6.36"}),e.jsx("path",{d:"M21 3v6h-6"})]})}function ts(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M18 6L6 18M6 6l12 12"})})}function Dr(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("circle",{cx:"12",cy:"12",r:"3"}),e.jsx("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"})]})}function td(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("circle",{cx:"12",cy:"12",r:"9"}),e.jsx("path",{d:"M12 3a9 9 0 0 0 0 18z",fill:"currentColor",stroke:"none"})]})}function sd(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M9 6h12M9 12h12M9 18h12"}),e.jsx("path",{d:"M4 6h.01M4 12h.01M4 18h.01"})]})}function nd(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.2-9.19a4 4 0 0 1 5.65 5.66l-9.2 9.19a2 2 0 0 1-2.82-2.83l8.49-8.48"})})}function ad(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M4 6h16M4 12h16M4 18h16"})})}function ld(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("circle",{cx:"11",cy:"11",r:"7"}),e.jsx("path",{d:"M16.5 16.5 21 21"})]})}function rd(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M12 19V5M5.5 11.5 12 5l6.5 6.5"})})}function id(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M5 19 19 5"}),e.jsx("circle",{cx:"12",cy:"12",r:"9.5"})]})}function ht(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M4.5 12.5 9.5 17.5 19.5 7"})})}function Vs(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M12 3a9 9 0 1 0 9 9"})})}function od(t){return e.jsx("svg",{...ve(t),children:e.jsx("path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"})})}function cd(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M4 4.5h16v15H4z"}),e.jsx("path",{d:"M9.5 4.5v15"})]})}function dd(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("circle",{cx:"12",cy:"12",r:"9"}),e.jsx("path",{d:"M3 12h18"}),e.jsx("path",{d:"M12 3a14.5 14.5 0 0 1 0 18a14.5 14.5 0 0 1 0-18z"})]})}function ud(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M3 6h18"}),e.jsx("path",{d:"M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2"}),e.jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),e.jsx("path",{d:"M10 11v6"}),e.jsx("path",{d:"M14 11v6"})]})}function hd(t){return e.jsxs("svg",{...ve(t),children:[e.jsx("path",{d:"M12 20h9"}),e.jsx("path",{d:"M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z"})]})}const md=`<!-- @license lucide-static v1.48.0 - ISC -->
|
|
2
2
|
<svg
|
|
3
3
|
xmlns="http://www.w3.org/2000/svg"
|
|
4
4
|
viewBox="0 0 24 24"
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{j as n,H as F,R as me,g as Ee,p as ge,r,b as ie,c as le,J as we,K as Te,L as Se,M as je,f as Z,t as W,N as Ne,u as _e,i as re,q as Pe,w as Ae,O as De,Q as Ce,h as M,S as Re,T as Le,U as Oe,V as Ie,C as ae,G as Me,X as Fe,z as Ke,Y as qe,y as Ue,W as Ve,A as He,x as We,Z as Be,n as Xe,_ as Ye,F as $e}from"./tokens-Cd73jvpR.js";const Qe=1500;function ze(){return{display:"idle",busy:!1,doneAt:null}}function Ge(e){return e.pendingPermission!=null?"waiting-user":e.live.busyTools.length>0?"working":e.live.reasoning!==""?"thinking":e.live.answer!==""?"answering":"idle"}function Je(e,t,i){const s=Ge(t);let l,a=e.doneAt;return t.busy||s==="waiting-user"?l=s:e.busy&&!t.busy?(l="done",a=i):e.display==="done"&&e.doneAt!==null&&i-e.doneAt<Qe?l="done":l=s,l!=="done"&&(a=null),{display:l,busy:t.busy,doneAt:a}}function K(e){return function(i){return n.jsx("div",{className:"pet-figure",children:n.jsx("div",{className:"pet-sprite-img",style:{backgroundImage:`url(${e})`}})})}}const Ze=K("/pet/skin-default.png");function et({display:e,skinId:t="default",figure:i=Ze,paused:s=!1,pokeEpoch:l,poked:a,onPointerDown:o}){return n.jsx("div",{className:"pet-root","data-pet-root":"","data-skin":t,"data-pet-state":e,"data-paused":s?"":void 0,title:"wudao pet",onPointerDown:o,children:n.jsx("div",{className:"pet-poke-layer","data-poked":a?"":void 0,children:n.jsx(i,{display:e})},l??0)})}const V=["idle","thinking","working","answering","waiting-user","done","drag"],tt=K(F.sakura),nt=K(F.lake),st=K(F.honey),it=K(F.power),lt={default:{component:K(F.default),states:V},sakura:{component:tt,states:V},lake:{component:nt,states:V},honey:{component:st,states:V},power:{component:it,states:V}},rt={turns:[]};function G(e){const t=Array.from(e);return t.length<=24?e:`${t.slice(0,24).join("")}…`}function at(e,t){return{turns:[...e.turns.map(s=>s.live?{...s,live:!1}:s),{q:t,a:"",live:!0}]}}function ut(e,t){const i=e.turns.length>0?e.turns[e.turns.length-1]:void 0;if(i===void 0)return t.answerTail===""?e:{turns:[{q:"",a:t.answerTail,live:!0}]};if(i.live){if(t.answerTail!==""){if(i.a===t.answerTail)return e;const s=e.turns.slice();return s[s.length-1]={...i,a:t.answerTail},{turns:s}}if(!t.busy){const s=e.turns.slice();return s[s.length-1]={...i,live:!1},{turns:s}}return e}return t.answerTail!==""?{turns:[...e.turns,{q:"",a:t.answerTail,live:!0}]}:e}function ot(e,t){const i=e.map(o=>({q:o.q,a:o.a,live:!1})),s=[];let l=t.turns.length-1,a=i.length-1;for(;l>=0||a>=0;){const o=l>=0?t.turns[l]:void 0,d=a>=0?i[a]:void 0;o!==void 0&&d!==void 0&&o.q!==""&&o.q===G(d.q)?(s.push({q:d.q,a:d.a,live:o.live}),l-=1,a-=1):o!==void 0?(s.push(o),l-=1):(s.push(d),a-=1)}return{turns:s.reverse()}}function H({s:e}){return n.jsx(n.Fragment,{children:ge(e).map((t,i)=>t.code?n.jsx("code",{className:"pet-md-code",children:t.text},i):t.bold?n.jsx("span",{className:"pet-md-bold",children:t.text},i):n.jsx("span",{children:t.text},i))})}function ct(e){return e.map((t,i)=>t.kind==="code"?n.jsx("div",{className:"pet-md-pre",children:n.jsx("code",{children:t.lines.join(`
|
|
2
|
+
`)})},i):t.kind==="heading"?n.jsx("div",{className:"pet-md-heading","data-level":t.level,children:n.jsx(H,{s:t.text})},i):t.kind==="list"?n.jsx("div",{className:"pet-md-list",children:t.items.map((s,l)=>n.jsxs("div",{children:["• ",n.jsx(H,{s})]},l))},i):t.kind==="quote"?n.jsx("div",{className:"pet-md-quote",children:t.lines.map((s,l)=>n.jsx("div",{children:`| ${s}`},l))},i):t.kind==="table"?n.jsxs("table",{className:"pet-md-table",children:[n.jsx("thead",{children:n.jsx("tr",{children:t.header.map((s,l)=>n.jsx("th",{children:n.jsx(H,{s})},l))})}),n.jsx("tbody",{children:t.rows.map((s,l)=>n.jsx("tr",{children:s.map((a,o)=>n.jsx("td",{children:n.jsx(H,{s:a})},o))},l))})]},i):n.jsx("div",{className:"pet-md-para",children:t.lines.map((s,l)=>n.jsxs(me.Fragment,{children:[l>0?`
|
|
3
|
+
`:null,n.jsx(H,{s})]},l))},i))}const be=me.memo(function({source:t}){return n.jsx("div",{className:"pet-md",children:ct(Ee(t))})}),ue=2500,dt=250,ft=3e4,mt=600,oe=100;function bt(e,t){const i=e.ask??null;if(i!==null)return{kind:"ask",ask:i};const s=e.selection??null;if(s!==null)return{kind:"selection",selection:s};if(e.inputOpen)return{kind:"input"};if(e.waitingUser)return{kind:"hint"};const l=e.busyNarration??null;return l!==null&&l!==""?{kind:"narration",text:l}:e.livePending?{kind:"thinking"}:e.answerTail!==""&&e.answerTail!==t?{kind:"stream",text:e.answerTail}:e.delivery!==null?{kind:"delivery",delivery:e.delivery}:null}function vt(e,t){return e!==null&&e.kind==="stream"&&e.text===t}function ht(e,t,i,s){const l=o=>o!==null&&!vt(o,s)?o:null,a=l(t)??l(i);return a===null?"compact":a.kind==="stream"||a.kind==="thinking"||a.kind==="input"||e==="answer"?"answer":"bubble"}function yt(e){const[t,i]=r.useState(!0),[s,l]=r.useState(!0),a=e.turn.q.length>oe,o=!e.turn.live&&e.turn.a.length>oe;return n.jsxs("div",{className:"pet-turn",children:[e.turn.q!==""&&n.jsx("div",{className:"pet-msg pet-msg-user",children:n.jsxs("div",{className:"pet-bubble-q","data-folded":a&&t?"":void 0,children:[n.jsx("div",{className:"pet-bubble-body",children:e.turn.q}),a&&n.jsx("button",{type:"button",className:"pet-bubble-fold","data-bubble-fold":"",onClick:()=>i(d=>!d),children:t?"查看全文":"收起"})]})}),(e.thinking||e.turn.a!=="")&&n.jsxs("div",{className:"pet-row pet-row-pet","data-pet-msg":"",children:[n.jsx("div",{className:"pet-avatar","data-pet-avatar":"",style:{backgroundImage:`url(${e.avatarSheet})`}}),e.thinking&&n.jsx("div",{className:"pet-bubble-thinking",children:"思考中…"}),!e.thinking&&e.turn.a!==""&&n.jsxs("div",{className:"pet-bubble-a","data-folded":o&&s?"":void 0,children:[n.jsx("div",{className:"pet-bubble-body",children:n.jsx(be,{source:e.turn.a})}),o&&n.jsx("button",{type:"button",className:"pet-bubble-fold","data-bubble-fold":"",onClick:()=>l(d=>!d),children:s?"查看全文":"收起"})]})]})]})}function kt(e){const{inputOpen:t,answerTail:i,waitingUser:s,onInputClose:l,delivery:a}=e,[o,d]=r.useState(""),[S,j]=r.useState(""),[C,D]=r.useState(!1),b=bt(e,S);r.useEffect(()=>{i===""&&(j(""),D(!1))},[i]);const y=r.useRef(null);b===null||(b.kind==="input"||b.kind==="delivery"||b.kind==="ask"||b.kind==="selection"?y.current=null:y.current=b);const[N,x]=r.useState(b!==null),[E,k]=r.useState(!1),g=b!==null;r.useEffect(()=>{if(g){x(!0),k(!1);return}if(!N)return;const u=y.current?.kind;if(u===void 0||u==="stream")return;const T=setTimeout(()=>k(!0),ue),se=setTimeout(()=>x(!1),ue+dt);return()=>{clearTimeout(T),clearTimeout(se)}},[g,N]);const _=r.useRef("compact"),q=r.useRef(e.onLayoutMode);q.current=e.onLayoutMode;const h=r.useRef(e.onDeliveryClose);h.current=e.onDeliveryClose,r.useEffect(()=>{if(a===null)return;const u=setTimeout(()=>h.current(),ft);return()=>clearTimeout(u)},[a]),r.useEffect(()=>{if(a===null||t||(e.ask??null)!==null||(e.selection??null)!==null)return;const u=T=>{T.key==="Escape"&&(T.preventDefault(),h.current())};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[a,t,e.ask,e.selection]);const f=r.useRef(e.onSelectionClose);f.current=e.onSelectionClose,r.useEffect(()=>{if((e.selection??null)===null||(e.ask??null)!==null)return;const u=T=>{T.key==="Escape"&&(T.preventDefault(),f.current())};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[e.selection,e.ask]);const[v,A]=r.useState(!1),w=e.ask??null,U=w===null?"":`${w.toolName} ${w.summary} ${String(w.canAlways)}`;r.useEffect(()=>{A(!1)},[U]);const R=(u,T)=>{A(!0),W(_e,T===void 0?{allow:u}:{allow:u,scope:T})},P=e.selection??null,B=P===null?"":`${P.granted}|${P.truncated}|${P.text}`,[L,O]=r.useState(!1),[I,X]=r.useState(""),m=r.useRef({composing:!1,endedAt:0}),p=r.useRef({composing:!1,endedAt:0});r.useEffect(()=>{O(!1),X("")},[B]);const Y=u=>{L||(O(!0),W(Ae,{text:u}),e.onPetTurn(G(u)),f.current())},ee=()=>{if(P===null)return;const u=I.trim();Y(u===""?De(P.text):Ce(P.text,u))},ve=u=>{re(u.nativeEvent,p.current,Date.now())||u.key==="Enter"&&(u.preventDefault(),ee())},te=()=>{const u=o.trim();u!==""&&(d(""),e.onPetTurn(G(u)),W(Pe,{text:u}))},he=u=>{if(!re(u.nativeEvent,m.current,Date.now())){if(u.key==="Escape"){u.preventDefault(),l();return}u.key==="Enter"&&(u.preventDefault(),te())}},c=b??y.current,ye=()=>{c===null||c.kind!=="stream"||(j(c.text),y.current=null)},$=ht(_.current,b,N?c:null,S);r.useEffect(()=>{$!==_.current&&(_.current=$,q.current?.($))},[$]);const ne=r.useRef(null);r.useEffect(()=>{const u=ne.current;u!==null&&(u.scrollTop=u.scrollHeight)},[e.transcript,e.answerTail,e.livePending]);const ke=F[e.skinId??"default"];if(!N||c===null)return null;const xe=()=>{h.current(),W(Ne,null)};return n.jsxs("div",{className:"pet-bubble","data-bubble":"","data-bubble-state":c.kind,"data-bubble-fading":E&&b===null?"":void 0,"data-bubble-held":b===null&&c.kind==="stream"?"":void 0,onClick:c.kind==="delivery"?xe:void 0,style:c.kind==="delivery"?{cursor:"pointer"}:void 0,children:[c.kind==="ask"&&n.jsxs("div",{className:"pet-bubble-ask","data-ask-card":"",children:[n.jsx("div",{className:"pet-bubble-ask-tool","data-ask-tool":"",children:c.ask.toolName}),n.jsx("div",{className:"pet-bubble-ask-summary","data-ask-summary":"",children:c.ask.summary}),n.jsxs("div",{className:"pet-bubble-ask-actions","data-ask-actions":"",children:[n.jsx("button",{type:"button","data-ask-allow":"",disabled:v,onClick:()=>R(!0),children:"允许"}),c.ask.canAlways&&n.jsx("button",{type:"button","data-ask-always":"",disabled:v,onClick:()=>R(!0,"always"),children:"总是允许"}),n.jsx("button",{type:"button","data-ask-deny":"",disabled:v,onClick:()=>R(!1),children:"拒绝"})]})]}),c.kind==="input"&&n.jsxs("div",{className:"pet-bubble-chat",children:[n.jsx("div",{className:"pet-bubble-transcript","data-bubble-transcript":"",ref:ne,children:e.transcript.map((u,T)=>{const pe=T===e.transcript.length-1&&u.live&&u.a==="";return n.jsx(yt,{turn:u,thinking:pe,avatarSheet:ke},T)})}),n.jsxs("div",{className:"pet-bubble-input",children:[n.jsx("textarea",{"data-bubble-input":"",placeholder:"问点什么…",rows:1,autoFocus:!0,value:o,onChange:u=>d(u.target.value),onCompositionStart:()=>{m.current=le(m.current)},onCompositionEnd:()=>{m.current=ie(m.current,Date.now())},onKeyDown:he}),n.jsxs("div",{className:"pet-bubble-input-row","data-bubble-actions":"",children:[n.jsx("button",{type:"button","data-bubble-cancel":"",className:"pet-bubble-cancel",onClick:l,children:"取消"}),n.jsx("button",{type:"button","data-bubble-send":"",className:"pet-bubble-send",onClick:te,children:"发送"})]})]})]}),c.kind==="selection"&&c.selection.granted&&c.selection.text!==""&&n.jsxs("div",{className:"pet-bubble-selection","data-selection-card":"",children:[n.jsx("div",{className:"pet-bubble-selection-text","data-selection-text":"",children:c.selection.text}),n.jsxs("div",{className:"pet-bubble-selection-actions","data-selection-actions":"",children:[n.jsx("button",{type:"button","data-selection-translate":"",disabled:L,onClick:()=>Y(we(c.selection.text)),children:"翻译"}),n.jsx("button",{type:"button","data-selection-explain":"",disabled:L,onClick:()=>Y(Te(c.selection.text)),children:"解释"}),Se(c.selection.text)&&n.jsx("button",{type:"button","data-selection-url":"",disabled:L,onClick:()=>Y(je(c.selection.text)),children:"读这个网页"})]}),n.jsxs("div",{className:"pet-bubble-selection-row","data-selection-row":"",children:[n.jsx("input",{"data-selection-question":"",placeholder:"想问它什么?",value:I,onChange:u=>X(u.target.value),onCompositionStart:()=>{p.current=le(p.current)},onCompositionEnd:()=>{p.current=ie(p.current,Date.now())},onKeyDown:ve}),n.jsx("button",{type:"button","data-selection-send":"",disabled:L,onClick:ee,children:"发送"}),n.jsx("button",{type:"button","data-selection-cancel":"",onClick:()=>f.current(),children:"取消"})]})]}),c.kind==="selection"&&c.selection.granted&&c.selection.text===""&&n.jsxs("div",{className:"pet-bubble-selection","data-selection-empty":"",children:[n.jsx("div",{className:"pet-bubble-selection-text",children:"没划到文字"}),n.jsx("div",{className:"pet-bubble-selection-actions",children:n.jsx("button",{type:"button","data-selection-cancel":"",onClick:()=>f.current(),children:"取消"})})]}),c.kind==="selection"&&!c.selection.granted&&n.jsxs("div",{className:"pet-bubble-selection","data-selection-guide":"",children:[n.jsx("div",{className:"pet-bubble-selection-text",children:"需要辅助功能权限"}),n.jsxs("div",{className:"pet-bubble-selection-actions",children:[n.jsx("button",{type:"button","data-selection-open-settings":"",onClick:()=>void Z("open_accessibility_settings",{}),children:"去系统设置打开"}),n.jsx("button",{type:"button","data-selection-cancel":"",onClick:()=>f.current(),children:"取消"})]})]}),c.kind==="hint"&&n.jsx("div",{className:"pet-bubble-hint",children:"在等你确认操作"}),c.kind==="narration"&&n.jsx("div",{className:"pet-bubble-hint","data-bubble-narration":"","data-work-kind":e.workKind??void 0,children:c.text}),c.kind==="thinking"&&n.jsx("div",{className:"pet-bubble-hint","data-bubble-thinking":"",children:"思考中…"}),c.kind==="stream"&&n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",className:"pet-bubble-close","data-bubble-close":"","aria-label":"关闭回答",onClick:ye,children:"✕"}),n.jsx("div",{className:"pet-bubble-stream","data-stream-expanded":C?"":void 0,children:n.jsx(be,{source:c.text})}),c.text.length>mt&&n.jsx("button",{type:"button",className:"pet-bubble-fold","data-stream-toggle":"",onClick:()=>D(u=>!u),children:C?"收起":"展开全文"})]}),c.kind==="delivery"&&n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"pet-bubble-hint",children:"定时任务送达"}),n.jsx("div",{className:"pet-bubble-stream","data-delivery-prompt":"",children:c.delivery.promptDigest}),c.delivery.answerDigest!==""&&n.jsx("div",{className:"pet-bubble-stream","data-delivery-answer":"",children:c.delivery.answerDigest})]})]})}const xt=4e3,J=Symbol("bad-ask");function pt(e){if(e==null)return null;if(typeof e!="object")return J;const t=e;return typeof t.toolName!="string"||typeof t.summary!="string"||typeof t.canAlways!="boolean"?J:{toolName:t.toolName,summary:t.summary,canAlways:t.canAlways}}function Et(e){if(typeof e!="object"||e===null)return null;const t=e;if(typeof t.busy!="boolean"||typeof t.pendingPermission!="boolean"||typeof t.reasoningActive!="boolean"||typeof t.answerTail!="string"||typeof t.busyToolCount!="number"||t.busyNarration!==void 0&&t.busyNarration!==null&&typeof t.busyNarration!="string"||t.workKind!==void 0&&t.workKind!==null&&typeof t.workKind!="string")return null;const i=pt(t.ask);return i===J?null:{busy:t.busy,pendingPermission:t.pendingPermission,reasoningActive:t.reasoningActive,answerTail:t.answerTail,busyToolCount:t.busyToolCount,busyNarration:typeof t.busyNarration=="string"?t.busyNarration:null,workKind:typeof t.workKind=="string"?t.workKind:null,ask:i}}function gt(e,t){r.useEffect(()=>{Z("set_pet_layout",{mode:e})},[e,t])}function wt(){const[e,t]=r.useState(null);return r.useEffect(()=>{let i=null,s=!1;return M(Le,l=>{const a=Re(l);a!==null&&t(a)}).then(l=>{s?l?.():i=l}),()=>{s=!0,i?.()}},[]),{delivery:e,clearDelivery:()=>t(null)}}function Tt(){const[e,t]=r.useState(null);return r.useEffect(()=>{let i=null,s=!1;return M(Ie,l=>{const a=Oe(l);a!==null&&t(a)}).then(l=>{s?l?.():i=l}),()=>{s=!0,i?.()}},[]),{selection:e,clearSelection:()=>t(null)}}function St(){const[e,t]=r.useState("default");return r.useEffect(()=>{let i=!1;return Z("get_pet_skin",{}).then(s=>{i||t(ae(s))}),()=>{i=!0}},[]),r.useEffect(()=>{let i=null,s=!1;return M(Me,l=>{if(typeof l!="object"||l===null)return;const a=l.skin;if(typeof a!="string")return;const o=ae(a);o===a&&t(o)}).then(l=>{s?l?.():i=l}),()=>{s=!0,i?.()}},[]),e}function jt(e){const[t,i]=r.useState(null);return r.useEffect(()=>{let s=null,l=!1,a=null;return M(Ke,o=>{const d=Fe(o);d!==null&&(i(d.text),e(d.text),a!==null&&clearTimeout(a),a=setTimeout(()=>i(null),xt))}).then(o=>{l?o?.():s=o}),()=>{l=!0,s?.(),a!==null&&clearTimeout(a)}},[]),t}function Nt(){const[e,t]=r.useState(null);r.useEffect(()=>{let s=null,l=!1;return M(Ue,a=>{const o=qe(a);o!==null&&t(o.turns)}).then(a=>{l?a?.():s=a}),()=>{l=!0,s?.()}},[]);const i=()=>{W(We,{}).catch(()=>{})};return r.useEffect(()=>{i()},[]),{history:e,requestHistory:i}}function _t(){r.useEffect(()=>{let e=null,t=!1;return M(Ve,i=>{if(typeof i!="object"||i===null)return;const s=i.theme;s!=="light"&&s!=="dark"||(document.documentElement.dataset.theme=s)}).then(i=>{t?i?.():e=i}),()=>{t=!0,e?.()}},[])}function Pt(e){r.useEffect(()=>{let t=null,i=!1;return M(He,s=>{const l=Et(s);l!==null&&e(l)}).then(s=>{i?s?.():t=s}),()=>{i=!0,t?.()}},[])}const At=650,Dt=2200,Ct=600,Q=["呀!","在呢在呢~","嘿嘿,别捏啦","痒痒的!","元气满满!","有什么吩咐?"];function Rt(e,t){const i=Q.length,s=e===null?-1:Q.indexOf(e),l=s>=0?i-1:i,a=t(),o=a>=0&&a<1?a:0,d=Math.min(Math.floor(o*l),l-1),S=s>=0&&d>=s?d+1:d,j=Q[S];return j!==void 0?j:Q[0]}const z=5;function Lt(e,t){if(e===null||t.type==="pointercancel"||e.x===void 0||e.y===void 0||t.clientX===void 0||t.clientY===void 0)return!1;const i=t.clientX-e.x,s=t.clientY-e.y;return i*i+s*s>=z*z}function Ot(e,t){if(e===null||!Number.isFinite(e.x)||!Number.isFinite(e.y)||!Number.isFinite(t.x)||!Number.isFinite(t.y))return!1;const i=t.x-e.x,s=t.y-e.y;return i*i+s*s>=z*z}const ce=5,It=600,de=4;function Mt(e){const[t,i]=r.useState(0),s=r.useRef(document.hidden);return r.useEffect(()=>{const l=()=>{s.current&&!document.hidden&&(i(a=>a+1),e()),s.current=document.hidden};return document.addEventListener("visibilitychange",l),()=>document.removeEventListener("visibilitychange",l)},[]),t}function Ft(e){const{inputOpen:t,setInputOpen:i}=e,[s,l]=r.useState(!1),[a,o]=r.useState(0),[d,S]=r.useState(!1),[j,C]=r.useState(null),[D,b]=r.useState(!1),y=r.useRef(null),N=r.useRef(!1),x=r.useRef(null),E=r.useRef(null),k=r.useRef(null),g=r.useRef(null),_=r.useRef(null);return r.useEffect(()=>{if(!s)return;const h=f=>{x.current!==null&&(clearTimeout(x.current),x.current=null),l(!1);const v=y.current;if(y.current=null,Lt(v,f)&&(b(!0),k.current!==null&&clearTimeout(k.current),k.current=setTimeout(()=>{k.current=null,b(!1)},450)),v===null||f.type==="pointercancel"||v.x===void 0||v.y===void 0||f.clientX===void 0||f.clientY===void 0)return;const A=f.clientX-v.x,w=f.clientY-v.y,U=Date.now()-v.t;A*A+w*w<ce*ce&&U<It&&(i(R=>!R),t||Be())};return window.addEventListener("pointerup",h),window.addEventListener("pointercancel",h),()=>{window.removeEventListener("pointerup",h),window.removeEventListener("pointercancel",h)}},[s,t]),r.useEffect(()=>{if(!s){N.current=!1;return}const h=f=>{const v=y.current;if(N.current){f.buttons===0&&(N.current=!1,y.current=null,l(!1),b(!0),k.current!==null&&clearTimeout(k.current),k.current=setTimeout(()=>{k.current=null,b(!1)},450));return}if(v===null||v.x===void 0||v.y===void 0)return;const A=f.clientX-v.x,w=f.clientY-v.y;A*A+w*w>=de*de&&(N.current=!0,Xe())};return window.addEventListener("pointermove",h),()=>{window.removeEventListener("pointermove",h)}},[s]),r.useEffect(()=>()=>{x.current!==null&&clearTimeout(x.current),E.current!==null&&clearTimeout(E.current),k.current!==null&&clearTimeout(k.current),g.current!==null&&clearTimeout(g.current)},[]),{dragging:s,releaseFlash:D,pokeEpoch:a,pokeFlash:d,pokeExpr:j,onPointerDown:h=>{y.current={x:h.clientX,y:h.clientY,sx:window.screenX,sy:window.screenY,t:Date.now()},l(!0),x.current!==null&&clearTimeout(x.current),x.current=setTimeout(()=>{x.current=null,!Ot(y.current!==null?{x:y.current.sx,y:y.current.sy}:null,{x:window.screenX,y:window.screenY})&&(_.current=Rt(_.current,Math.random),o(f=>f+1),S(!0),g.current!==null&&clearTimeout(g.current),g.current=setTimeout(()=>{g.current=null,S(!1)},Ct),C(_.current),E.current!==null&&clearTimeout(E.current),E.current=setTimeout(()=>{E.current=null,C(null)},Dt))},At)}}}function Kt(){const[e,t]=r.useState(ze),[i,s]=r.useState(null),[l,a]=r.useState(!1),[o,d]=r.useState("compact"),[S,j]=r.useState(rt),[C,D]=r.useState(!1),{delivery:b,clearDelivery:y}=wt(),{selection:N,clearSelection:x}=Tt(),E=St();gt(o,E);const k=jt(()=>{D(!1),j(m=>{const p=m.turns.length>0?m.turns[m.turns.length-1]:void 0;return p===void 0||!p.live?m:{turns:m.turns.slice(0,-1)}})}),{history:g,requestHistory:_}=Nt();_t(),Pt(m=>{s(m),t(p=>Je(p,Ye(m),Date.now())),j(p=>ut(p,m)),D(!1)});const q=Mt(_),{dragging:h,releaseFlash:f,pokeEpoch:v,pokeFlash:A,pokeExpr:w,onPointerDown:U}=Ft({inputOpen:l,setInputOpen:a}),R=lt[E].component;r.useEffect(()=>{if(!l)return;const m=()=>a(!1);return window.addEventListener("blur",m),()=>window.removeEventListener("blur",m)},[l]),r.useEffect(()=>{l&&_()},[l]);const P=i?.busy??!1,B=r.useRef(!1);r.useEffect(()=>{B.current&&!P&&_(),B.current=P},[P]);const L=m=>{j(p=>at(p,m)),D(!0)},O=r.useMemo(()=>g===null?S.turns:ot(g,S).turns,[g,S]),I=O.length>0?O[O.length-1]:void 0,X=C||I!==void 0&&I.live&&I.q!==""&&I.a===""&&(i?.busy??!1)===!0;return n.jsxs(n.Fragment,{children:[n.jsx(kt,{inputOpen:l,answerTail:i?.answerTail??"",waitingUser:e.display==="waiting-user",busyNarration:i?.busyNarration??null,workKind:i?.workKind??null,onInputClose:()=>a(!1),delivery:b,onDeliveryClose:y,ask:i?.ask??null,selection:N,onSelectionClose:x,onLayoutMode:d,transcript:O,onPetTurn:L,livePending:X,skinId:E}),n.jsx(et,{display:h?"drag":f?"release":e.display,skinId:E,figure:R,pokeEpoch:v,poked:A,onPointerDown:U},q),k!==null&&n.jsx("div",{className:"pet-toast","data-pet-toast":"",role:"status",children:k}),w!==null&&n.jsx("div",{className:"pet-expr","data-pet-expr":"",role:"status",children:w})]})}const fe=new URLSearchParams(window.location.search).get("view");fe!==null&&(document.documentElement.dataset.view=fe);try{document.documentElement.dataset.theme=localStorage.getItem("wudao.ui.theme")==="light"?"light":"dark"}catch{document.documentElement.dataset.theme="dark"}const qt=document.getElementById("pet-root")??document.body;$e.createRoot(qt).render(n.jsx(r.StrictMode,{children:n.jsx(Kt,{})}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--pet-accent: 14 159 110;--pet-accent-ink: 20 21 25}.pet-root{position:fixed;left:50%;bottom:12px;transform:translate(-50%);width:96px;height:96px;user-select:none;-webkit-user-select:none;cursor:grab;touch-action:none}.pet-root[data-pet-state=drag]{cursor:grabbing}.pet-figure{position:relative;width:100%;height:100%}.pet-sprite-img{position:absolute;bottom:0;left:0;display:block;width:96px;aspect-ratio:390 / 238;background-size:200% 100%;background-repeat:no-repeat;background-position:0 0;pointer-events:none;user-select:none;-webkit-user-select:none;will-change:transform,background-position;transform-origin:50% 100%}[data-skin=power] .pet-sprite-img{aspect-ratio:1 / 1;width:88px;left:4px}@keyframes pet-blink{0%,23.5%{background-position:0% 0}24%,25.6%{background-position:100% 0}26.1%,47.5%{background-position:0% 0}48%,49.6%{background-position:100% 0}50.1%,71.5%{background-position:0% 0}72%,73.6%{background-position:100% 0}74.1%,91%{background-position:0% 0}91.5%,93.1%{background-position:100% 0}93.6%,94.4%{background-position:0% 0}94.9%,96.5%{background-position:100% 0}97%,to{background-position:0% 0}}@keyframes pet-idle{0%{transform:scale(1.06,.92)}9%{transform:scale(.95,1.07)}18%{transform:scale(1.06,.92)}27%{transform:scale(.95,1.07)}36%{transform:scale(1.06,.92)}42%,48%{transform:scale(1.06,.92) rotate(-4deg)}54%{transform:scale(1.06,.92)}60%{transform:scale(.95,1.07)}66%{transform:scale(1.06,.92)}71%{transform:translateY(0) scale(1.05,.95)}74%{transform:translateY(-5px) scale(.97,1.05)}77%{transform:translateY(0) scale(1.04,.96)}80%{transform:translateY(-2px) scale(1)}90%{transform:scale(.95,1.07)}to{transform:scale(1.06,.92)}}@keyframes pet-thinking{0%,to{transform:rotate(-3deg)}25%,75%{transform:rotate(1deg)}50%{transform:rotate(3deg)}}@keyframes pet-working{0%,to{transform:translateY(0) scale(1)}35%{transform:translateY(0) scale(1.04,.94)}70%{transform:translateY(-7px) scale(.97,1.03)}}@keyframes pet-answering{0%{transform:scale(1)}30%{transform:scale(1.09,.93)}60%{transform:scale(.96,1.05)}to{transform:scale(1)}}@keyframes pet-waiting{0%,to{transform:rotate(0)}20%{transform:rotate(-6deg)}40%{transform:rotate(6deg)}60%{transform:rotate(-4deg)}80%{transform:rotate(4deg)}}@keyframes pet-done{0%{transform:translateY(-10px) scale(.98,1.02)}40%{transform:translateY(0) scale(1.06,.92)}70%{transform:translateY(-2px) scale(.98,1.02)}to{transform:translateY(0) scale(1)}}@keyframes pet-drag{0%{transform:scale(1)}to{transform:scale(1.05)}}@keyframes pet-squash{0%{transform:scale(1)}35%{transform:scale(1.22,.78)}65%{transform:scale(.92,1.08)}to{transform:scale(1)}}@keyframes pet-release{0%{transform:scale(1.05)}40%{transform:scale(.94,1.06)}70%{transform:scale(1.02,.98)}to{transform:scale(1)}}@keyframes pet-sway{0%,to{transform:rotate(0)}25%{transform:rotate(-2.5deg)}50%{transform:rotate(0)}75%{transform:rotate(2.5deg)}}[data-pet-state=idle] .pet-sprite-img{animation:pet-idle 12s ease-in-out infinite,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=thinking] .pet-sprite-img{animation:pet-thinking 2.2s ease-in-out infinite,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=working] .pet-sprite-img{animation:pet-working .6s ease-in-out infinite,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=answering] .pet-sprite-img{animation:pet-answering 1s ease-in-out infinite,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=waiting-user] .pet-sprite-img{animation:pet-waiting 1.6s ease-in-out infinite,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=done] .pet-sprite-img{animation:pet-done .7s ease-out 1,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=drag] .pet-sprite-img{animation:pet-drag .16s ease-out 1 forwards,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=release] .pet-sprite-img{animation:pet-release .45s cubic-bezier(.2,.8,.3,1.15) 1,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=idle] .pet-figure{animation:pet-sway 4.8s ease-in-out infinite;transform-origin:50% 100%}.pet-poke-layer{width:100%;height:100%}.pet-poke-layer[data-poked]{animation:pet-squash .6s cubic-bezier(.3,1.2,.4,1) 1;transform-origin:50% 100%}[data-paused] *{animation-play-state:paused!important}@media (prefers-reduced-motion: reduce){[data-pet-state=idle] .pet-sprite-img,[data-pet-state=thinking] .pet-sprite-img,[data-pet-state=working] .pet-sprite-img,[data-pet-state=answering] .pet-sprite-img,[data-pet-state=waiting-user] .pet-sprite-img{animation-iteration-count:0,infinite!important}[data-pet-state=done] .pet-sprite-img,[data-pet-state=drag] .pet-sprite-img{animation-iteration-count:1,infinite!important}[data-pet-state=idle] .pet-figure{animation-iteration-count:0!important}.pet-bubble{transition:none!important}.pet-bubble-thinking,.pet-bubble-hint[data-bubble-thinking]{animation:none}}.pet-bubble{position:fixed;left:50%;bottom:79px;transform:translate(-50%);width:min(204px,calc(100vw - 16px));max-height:min(176px,calc(100vh - 96px));box-sizing:border-box;padding:8px 10px;border-radius:var(--radius-lg);background:var(--surface);color:var(--text-1);box-shadow:var(--elev-2);font:12px/1.55 var(--font);overflow:hidden;opacity:1;transition:opacity .25s ease}.pet-bubble[data-bubble-fading]{opacity:0}.pet-bubble[data-bubble-state=stream]{width:min(396px,calc(100vw - 16px));max-height:min(452px,calc(100vh - 104px));padding:12px 14px;font-size:13px;line-height:1.65}.pet-bubble[data-bubble-state=stream] .pet-bubble-stream[data-stream-expanded]{justify-content:flex-start;overflow-y:auto}.pet-bubble[data-bubble-state=stream] .pet-bubble-stream{max-height:396px;padding-right:22px;border-left:3px solid rgb(var(--pet-accent) / .5);padding-left:10px}.pet-bubble-close{position:absolute;top:4px;right:4px;width:18px;height:18px;border:none;border-radius:var(--radius-sm);padding:0;background:transparent;color:var(--text-3);font:inherit;line-height:18px;cursor:pointer}.pet-bubble-close:hover{color:var(--text-1)}.pet-bubble[data-bubble-state=input]{width:min(396px,calc(100vw - 16px));max-height:max(176px,min(452px,calc(100vh - 104px)));padding:12px 14px;font-size:13px;line-height:1.65;display:flex;flex-direction:column}.pet-bubble-chat{display:flex;flex-direction:column;gap:8px;flex:1 1 auto;min-height:0}.pet-bubble-transcript{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:10px;padding-right:4px}.pet-bubble-transcript::-webkit-scrollbar,.pet-bubble-stream[data-stream-expanded]::-webkit-scrollbar{width:8px}.pet-bubble-transcript::-webkit-scrollbar-thumb,.pet-bubble-stream[data-stream-expanded]::-webkit-scrollbar-thumb{background:var(--hair-3);border-radius:50%}.pet-bubble-transcript::-webkit-scrollbar-track,.pet-bubble-stream[data-stream-expanded]::-webkit-scrollbar-track{background:transparent}.pet-turn{display:flex;flex-direction:column;gap:6px}.pet-msg-user{display:flex;flex-direction:column;align-items:flex-end}.pet-row-pet{display:flex;align-items:flex-start;gap:6px}.pet-avatar{flex:0 0 auto;width:34px;height:34px;background-size:200% auto;background-position:0 center;background-repeat:no-repeat}.pet-bubble-q{max-width:85%;box-sizing:border-box;padding:5px 10px;border-radius:var(--radius-md);background:var(--bubble-user-bg);color:var(--bubble-user-ink);display:flex;flex-direction:column;align-items:flex-end;gap:2px}.pet-bubble-body{white-space:pre-wrap;word-break:break-word}.pet-bubble-a{box-sizing:border-box;padding:2px 0;border-radius:var(--radius-md);background:transparent;display:flex;flex-direction:column;align-items:stretch;gap:2px}.pet-row-pet>.pet-bubble-a,.pet-row-pet>.pet-bubble-thinking{flex:0 1 auto;max-width:calc(100% - 40px)}.pet-bubble-a[data-folded] .pet-bubble-body,.pet-bubble-q[data-folded] .pet-bubble-body{max-height:calc(3 * 1.65em);overflow:hidden;-webkit-mask-image:linear-gradient(180deg,var(--shade) calc(100% - 1.4em),transparent);mask-image:linear-gradient(180deg,var(--shade) calc(100% - 1.4em),transparent)}.pet-bubble-fold{align-self:flex-start;border:none;border-radius:var(--radius-sm);padding:3px 10px;background:transparent;color:var(--text-2);font:inherit;font-size:12px;cursor:pointer;margin-top:2px}.pet-bubble-q .pet-bubble-fold{align-self:flex-end}.pet-bubble-fold:hover{color:var(--text-1);background:var(--hover)}@keyframes pet-thinking-breath{0%,to{opacity:1}50%{opacity:.55}}.pet-bubble-thinking{color:var(--warn);animation:pet-thinking-breath 1.2s ease-in-out infinite;padding:2px 0;border-radius:var(--radius-md);background:transparent}.pet-bubble-hint[data-bubble-thinking]{animation:pet-thinking-breath 1.2s ease-in-out infinite}.pet-bubble-input{display:flex;flex-direction:column;gap:6px;border-top:1px solid var(--hair-1);padding-top:8px}.pet-bubble-input textarea{box-sizing:border-box;width:100%;resize:none;border:none;border-radius:var(--radius-sm);padding:6px 8px;background:var(--surface-2);color:var(--text-1);font:inherit;outline:none}.pet-bubble-input textarea:focus{background:var(--surface-2);box-shadow:0 0 0 1.5px rgb(var(--pet-accent))}.pet-bubble-send{align-self:flex-end;border:none;border-radius:var(--radius-md);padding:4px 12px;background:rgb(var(--pet-accent));color:rgb(var(--pet-accent-ink));font:inherit;cursor:pointer}.pet-bubble-input-row{display:flex;justify-content:flex-end;gap:14px}.pet-bubble-cancel{border:none;border-radius:var(--radius-sm);padding:4px 8px;background:transparent;color:var(--text-3);font:inherit;font-size:12px;cursor:pointer}.pet-bubble-cancel:hover{color:var(--text-1)}.pet-bubble-stream{display:flex;flex-direction:column;justify-content:flex-end;max-height:160px;overflow:hidden;white-space:pre-wrap;word-break:break-word}.pet-bubble-hint{color:var(--warn)}.pet-bubble-ask{display:flex;flex-direction:column;gap:6px;box-sizing:border-box;padding:6px 8px;border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-1)}.pet-bubble-ask-tool{align-self:flex-start;padding:0 6px;border-radius:var(--radius-sm);background:var(--bubble-user-bg);color:var(--text-2);font-size:11px;line-height:18px}.pet-bubble-ask-summary{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pet-bubble-ask-actions{display:flex;flex-wrap:wrap;gap:6px}.pet-bubble-ask-actions button{flex:1 1 auto;border:none;border-radius:var(--radius-md);padding:4px 10px;background:rgb(var(--pet-accent));color:rgb(var(--pet-accent-ink));font:inherit;cursor:pointer}.pet-bubble-ask-actions button[data-ask-always]{background:transparent;border:1px solid rgb(var(--pet-accent));color:var(--text-1)}.pet-bubble-ask-actions button[data-ask-deny]{background:transparent;border:1px solid var(--hair-2);color:var(--text-1)}.pet-bubble-ask-actions button[disabled]{opacity:.5;cursor:default}.pet-bubble-selection{display:flex;flex-direction:column;gap:6px;box-sizing:border-box;padding:6px 8px;border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-1)}.pet-bubble-selection-text{max-height:64px;overflow:hidden;white-space:pre-wrap;word-break:break-word;border-radius:var(--radius-sm);padding:4px 6px;background:var(--bg);color:var(--text-2)}.pet-bubble-selection-actions{display:flex;flex-wrap:wrap;gap:6px}.pet-bubble-selection button{border:none;border-radius:var(--radius-md);padding:4px 10px;background:rgb(var(--pet-accent));color:rgb(var(--pet-accent-ink));font:inherit;cursor:pointer}.pet-bubble-selection button[data-selection-explain]{background:transparent;border:1px solid rgb(var(--pet-accent));color:var(--text-1)}.pet-bubble-selection button[data-selection-cancel]{background:transparent;border:1px solid var(--hair-2);color:var(--text-1)}.pet-bubble-selection button[disabled]{opacity:.5;cursor:default}.pet-bubble-selection-row{display:flex;gap:6px;align-items:center}.pet-bubble-selection-row input{flex:1 1 auto;min-width:0;box-sizing:border-box;border:1px solid var(--hair-2);border-radius:var(--radius-md);padding:4px 8px;background:var(--bg);color:var(--text-1);font:inherit;outline:none}.pet-bubble-selection-row input:focus{border-color:rgb(var(--pet-accent))}.pet-md{display:flex;flex-direction:column;gap:6px}.pet-md-heading{font-weight:700}.pet-md-heading[data-level="1"],.pet-md-heading[data-level="2"]{font-size:14px}.pet-md-pre{box-sizing:border-box;max-width:100%;overflow-x:auto;border-radius:var(--radius-md);padding:6px 8px;background:var(--bg);border:1px solid var(--hair-1);font:11px/1.5 var(--mono);white-space:pre}.pet-md-quote{border-left:2px solid var(--hair-1);padding:2px 0 2px 8px;color:var(--text-2)}.pet-md-list{padding-left:2px}.pet-md-table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse}.pet-md-table th,.pet-md-table td{padding:2px 6px;border:1px solid var(--hair-1);text-align:left}.pet-md-table th{background:var(--surface-2);color:var(--text-1)}.pet-md-bold{font-weight:700}.pet-md-code{padding:0 4px;border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--surface-2);font-family:var(--mono);font-size:.92em;color:var(--tok-str)}.pet-toast{position:fixed;top:8px;left:50%;transform:translate(-50%);width:min(204px,calc(100vw - 16px));box-sizing:border-box;padding:8px 10px;border-radius:var(--radius-lg);background:var(--surface);color:var(--text-1);box-shadow:var(--elev-2);font:12px/1.55 var(--font);text-align:center;z-index:var(--z-modal)}.pet-expr{position:fixed;bottom:83px;left:50%;transform:translate(-50%);box-sizing:border-box;padding:4px 10px;border-radius:var(--radius-md);background:var(--surface);color:var(--text-1);box-shadow:var(--elev-2);font:12px/1.45 var(--font);text-align:center;white-space:nowrap;z-index:var(--z-modal)}.pet-expr:after{content:"";position:absolute;bottom:-5px;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:var(--surface);border-bottom:none}
|
|
@@ -61,4 +61,4 @@ ${l}`}function gh(l,t){return`${t}
|
|
|
61
61
|
(划选的文字:
|
|
62
62
|
${l}
|
|
63
63
|
)`}function Sh(l){return/^https?:\/\//i.test(l.trim())}function bh(l){return`用浏览器打开 ${l.trim()},把页面上主要讲了什么读给我听`}const Ec="[scheduled task ",p1="pet-delivery",_h="pet-open-main",O1=60,M1=80;function Ac(l){return l.startsWith(Ec)}function sd(l){if(!Ac(l))return null;const t=l.slice(Ec.length),u=t.indexOf("]");return u<=0?null:t.slice(0,u)}function D1(l){const t=l.slice(Ec.length),u=t.indexOf("]");return(u===-1?t:t.slice(u+1)).replace(/^\s+/,"")}function U1(l,t){const u=l.find(e=>Ac(e));if(u===void 0)return null;const a=t.split(`
|
|
64
|
-
`,1)[0]??"";return{taskId:sd(u),promptDigest:D1(u).slice(0,O1),answerDigest:a.slice(0,M1)}}function ao(l){let t=-1;for(let n=l.length-1;n>=0;n-=1)if(l[n].kind==="user"){t=n;break}if(t===-1)return null;let u=-1;for(let n=t-1;n>=0;n-=1)if(l[n].kind==="assistant"){u=n;break}const a=[];let e="";for(let n=u+1;n<l.length;n+=1){const f=l[n];f.kind==="user"?a.push(f.text):f.kind==="assistant"&&(e=f.text)}return U1(a,e)}function Th(l){if(typeof l!="object"||l===null)return null;const t=l;return t.taskId!==null&&typeof t.taskId!="string"||typeof t.promptDigest!="string"||typeof t.answerDigest!="string"?null:{taskId:t.taskId,promptDigest:t.promptDigest,answerDigest:t.answerDigest}}function eo(l){for(let t=l.length-1;t>=0;t-=1){const u=l[t];if(u.kind==="user"&&Ac(u.text))return t}return-1}function Eh(l,t){const u=(o,h)=>s1(o,h);let a=null,e=null,n=null;const f=(o,h)=>{n={taskId:o.taskId,index:h},Promise.resolve(u(p1,o)).catch(()=>{})},i=o=>{const h=eo(o);if(h===-1)return;for(let b=o.length-1;b>h;b-=1)if(o[b].kind==="user")return;const r=o[h];if(r.kind!=="user")return;const d=sd(r.text);if(n!==null&&n.index===h&&n.taskId===d)return;const m=ao(o);m!==null&&f(m,h)};return l.subscribe(()=>{const o=l.getSnapshot();if(o.connection!=="connected")return;const h=o.status!==null&&o.status.busy;if(o.historyEpoch!==e){e=o.historyEpoch,a=h,h||i(o.history);return}if(a===!0&&!h){const r=ao(o.history);r!==null&&f(r,eo(o.history))}a=h})}const N1=["default","sakura","lake","honey"],Ah={default:"/pet/skin-default.png",sakura:"/pet/skin-sakura.png",lake:"/pet/skin-lake.png",honey:"/pet/skin-honey.png"},zh="wudao-pet-skin";function ph(l){return typeof l=="string"&&N1.includes(l)?l:"default"}export{V1 as A,lh as B,ph as C,Eh as D,oh as E,C1 as F,zh as G,Ah as H,F1 as I,hh as J,rh as K,Sh as L,bh as M,_h as N,mh as O,k1 as P,gh as Q,R1 as R,Th as S,p1 as T,vh as U,yh as V,$1 as W,uh as X,ah as Y,X1 as Z,P1 as _,Z1 as a,nh as b,eh as c,Y1 as d,Q1 as e,j1 as f,ih as g,G1 as h,fh as i,H1 as j,at as k,B1 as l,x1 as m,q1 as n,I1 as o,ch as p,L1 as q,pi as r,sh as s,s1 as t,K1 as u,th as v,dh as w,w1 as x,W1 as y,J1 as z};
|
|
64
|
+
`,1)[0]??"";return{taskId:sd(u),promptDigest:D1(u).slice(0,O1),answerDigest:a.slice(0,M1)}}function ao(l){let t=-1;for(let n=l.length-1;n>=0;n-=1)if(l[n].kind==="user"){t=n;break}if(t===-1)return null;let u=-1;for(let n=t-1;n>=0;n-=1)if(l[n].kind==="assistant"){u=n;break}const a=[];let e="";for(let n=u+1;n<l.length;n+=1){const f=l[n];f.kind==="user"?a.push(f.text):f.kind==="assistant"&&(e=f.text)}return U1(a,e)}function Th(l){if(typeof l!="object"||l===null)return null;const t=l;return t.taskId!==null&&typeof t.taskId!="string"||typeof t.promptDigest!="string"||typeof t.answerDigest!="string"?null:{taskId:t.taskId,promptDigest:t.promptDigest,answerDigest:t.answerDigest}}function eo(l){for(let t=l.length-1;t>=0;t-=1){const u=l[t];if(u.kind==="user"&&Ac(u.text))return t}return-1}function Eh(l,t){const u=(o,h)=>s1(o,h);let a=null,e=null,n=null;const f=(o,h)=>{n={taskId:o.taskId,index:h},Promise.resolve(u(p1,o)).catch(()=>{})},i=o=>{const h=eo(o);if(h===-1)return;for(let b=o.length-1;b>h;b-=1)if(o[b].kind==="user")return;const r=o[h];if(r.kind!=="user")return;const d=sd(r.text);if(n!==null&&n.index===h&&n.taskId===d)return;const m=ao(o);m!==null&&f(m,h)};return l.subscribe(()=>{const o=l.getSnapshot();if(o.connection!=="connected")return;const h=o.status!==null&&o.status.busy;if(o.historyEpoch!==e){e=o.historyEpoch,a=h,h||i(o.history);return}if(a===!0&&!h){const r=ao(o.history);r!==null&&f(r,eo(o.history))}a=h})}const N1=["default","sakura","lake","honey","power"],Ah={default:"/pet/skin-default.png",sakura:"/pet/skin-sakura.png",lake:"/pet/skin-lake.png",honey:"/pet/skin-honey.png",power:"/pet/skin-power.png"},zh="wudao-pet-skin";function ph(l){return typeof l=="string"&&N1.includes(l)?l:"default"}export{V1 as A,lh as B,ph as C,Eh as D,oh as E,C1 as F,zh as G,Ah as H,F1 as I,hh as J,rh as K,Sh as L,bh as M,_h as N,mh as O,k1 as P,gh as Q,R1 as R,Th as S,p1 as T,vh as U,yh as V,$1 as W,uh as X,ah as Y,X1 as Z,P1 as _,Z1 as a,nh as b,eh as c,Y1 as d,Q1 as e,j1 as f,ih as g,G1 as h,fh as i,H1 as j,at as k,B1 as l,x1 as m,q1 as n,I1 as o,ch as p,L1 as q,pi as r,sh as s,s1 as t,K1 as u,th as v,dh as w,w1 as x,W1 as y,J1 as z};
|
package/dist/index.html
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<title>悟道Harness</title>
|
|
7
7
|
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ctext y='13' font-size='13'%3E%E2%8C%98%3C/text%3E%3C/svg%3E" />
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="modulepreload" crossorigin href="/assets/tokens-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-WzeXy0_Q.js"></script>
|
|
9
|
+
<link rel="modulepreload" crossorigin href="/assets/tokens-Cd73jvpR.js">
|
|
10
10
|
<link rel="stylesheet" crossorigin href="/assets/tokens-DFnD5kXz.css">
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-D7AJ4Xgr.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
14
14
|
<div id="root"></div>
|
|
Binary file
|
package/dist/pet.html
CHANGED
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
<style>
|
|
13
13
|
html, body { height: 100%; margin: 0; background: transparent; overflow: hidden; }
|
|
14
14
|
</style>
|
|
15
|
-
<script type="module" crossorigin src="/assets/pet-
|
|
16
|
-
<link rel="modulepreload" crossorigin href="/assets/tokens-
|
|
15
|
+
<script type="module" crossorigin src="/assets/pet-BU92wkeg.js"></script>
|
|
16
|
+
<link rel="modulepreload" crossorigin href="/assets/tokens-Cd73jvpR.js">
|
|
17
17
|
<link rel="stylesheet" crossorigin href="/assets/tokens-DFnD5kXz.css">
|
|
18
|
-
<link rel="stylesheet" crossorigin href="/assets/pet-
|
|
18
|
+
<link rel="stylesheet" crossorigin href="/assets/pet-DyljS8EY.css">
|
|
19
19
|
</head>
|
|
20
20
|
<body>
|
|
21
21
|
<div id="pet-root"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wudao-org/web",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "wudao ui — the web frontend (M43-B): a pure WS-protocol consumer (PROTOCOL.md) with TUI-full-parity surface, served statically by @wudao-org/server.",
|
|
6
6
|
"devDependencies": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{color-scheme:dark}[data-theme=light]{color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%}html,body{overflow:hidden}body{margin:0;background:var(--bg);color:var(--text-1);transition:background-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease);font-family:var(--font);font-size:14px;line-height:1.65}:focus-visible{outline:1.5px solid var(--accent);outline-offset:2px}:focus:not(:focus-visible){outline:none}html.input-pointer :focus-visible{outline:none;box-shadow:none}button,.sb-i,.sb-search,.chip,.icobtn,a{transition:background-color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease),opacity var(--dur-fast) var(--ease)}.app{display:flex;flex-direction:column;height:100%}.topbar{height:34px;flex:none;display:flex;align-items:center;gap:var(--sp-1);padding-left:var(--sp-3);padding-right:var(--sp-3);border-bottom:1px solid var(--hair-1);background:none;-webkit-app-region:drag}[data-shell=desktop] .topbar{padding-left:84px}.topbar .sp{flex:1;min-width:0;display:flex;align-items:center;gap:var(--sp-2)}.tb-name{font-size:var(--fs-ui);color:var(--text-1);font-weight:var(--fw-medium);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tb-run{display:inline-flex;align-items:center;flex:none;gap:var(--sp-1);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3);white-space:nowrap}.tb-run .ok{color:var(--ok)}.icobtn{width:26px;height:26px;flex:none;border-radius:var(--radius-sm);border:0;background:transparent;color:var(--text-3);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-ui);line-height:1;padding:0;-webkit-app-region:no-drag}.icobtn:hover{background:var(--surface);color:var(--text-1)}.ic{display:inline-block;vertical-align:-.14em;flex:none}.ic-warn{color:var(--warn)}.ic-danger{color:var(--danger)}.chat{max-width:calc(var(--content-max) + 32px);width:100%;margin:0 auto;flex:1;overflow-y:auto;padding:var(--sp-2) var(--sp-4);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:var(--sp-2)}.entry{white-space:normal}.entry-gap{min-height:var(--sp-2)}.history-hydrate-sentinel{display:block;padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-2);border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);text-align:center;cursor:pointer;user-select:none}.history-hydrate-sentinel:hover,.history-hydrate-sentinel:focus-visible{background:var(--hover);outline:none}.msg-user{display:flex;justify-content:flex-end;margin-top:var(--sp-3)}.msg-user .bub{background:var(--bubble-user-bg);color:var(--bubble-user-ink);border-radius:var(--radius-bubble);padding:10px 14px;max-width:78%;font-size:var(--fs-body);line-height:var(--lh-body);overflow-wrap:anywhere}.msg-a{display:flex;flex-direction:column}.msg-sig{display:flex;align-items:center;gap:var(--sp-1);margin-bottom:var(--sp-1);font-size:var(--fs-ui);font-weight:var(--fw-strong);color:var(--text-2)}.sig-glyph{width:16px;height:16px;border-radius:var(--radius-sm);background:var(--surface-2);color:var(--accent);display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-caption);font-weight:var(--fw-strong)}.sig-avatar{flex:0 0 auto;width:16px;height:16px;background-size:200% auto;background-position:0 center;background-repeat:no-repeat}[data-pet-skin=default] .sig-avatar{background-image:url(/pet/skin-default.png)}[data-pet-skin=sakura] .sig-avatar{background-image:url(/pet/skin-sakura.png)}[data-pet-skin=lake] .sig-avatar{background-image:url(/pet/skin-lake.png)}[data-pet-skin=honey] .sig-avatar{background-image:url(/pet/skin-honey.png)}.hero .logo,.connect-card .logo{width:64px;height:40px;background-size:200% auto;background-position:0 center;background-repeat:no-repeat;background-image:url(/pet/skin-default.png)}[data-pet-skin=default] .hero .logo,[data-pet-skin=default] .connect-card .logo{background-image:url(/pet/skin-default.png)}[data-pet-skin=sakura] .hero .logo,[data-pet-skin=sakura] .connect-card .logo{background-image:url(/pet/skin-sakura.png)}[data-pet-skin=lake] .hero .logo,[data-pet-skin=lake] .connect-card .logo{background-image:url(/pet/skin-lake.png)}[data-pet-skin=honey] .hero .logo,[data-pet-skin=honey] .connect-card .logo{background-image:url(/pet/skin-honey.png)}.reply-card{background:none;border:0;border-radius:0;padding:0;font-size:var(--fs-body);line-height:var(--lh-body);color:var(--text-1)}.reply-card .reply-meta{margin-top:var(--sp-3);padding-top:var(--sp-2);border-top:1px solid var(--hair-1);font-size:var(--fs-caption);color:var(--text-3)}.msg-user{flex-wrap:wrap}.msg-user .img-rail{display:flex;justify-content:flex-end;gap:var(--sp-2);width:100%}.img-bub{width:132px;height:88px;object-fit:cover;border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--surface-2);display:inline-block}.img-bub.pending{opacity:.5}.img-bub.err{display:inline-grid;place-items:center;color:var(--danger);font-size:var(--fs-ui)}.entry-notice{display:flex;flex-direction:column;align-items:center}.notice-bub{display:inline-flex;align-items:center;gap:var(--sp-1);background:var(--surface-2);color:var(--text-2);border-radius:var(--radius-md);padding:var(--sp-1) var(--sp-3);font-size:var(--fs-caption);line-height:var(--lh-caption);max-width:78%;overflow-wrap:anywhere;text-align:center;white-space:pre-wrap}.notice-bub[data-variant=warn]{color:var(--warn)}.notice-bub[data-variant=ok]{color:var(--ok)}.notice-exp{display:inline-flex;padding:0;border:0;background:none;color:var(--text-3);cursor:pointer;flex:none}.notice-detail{background:var(--surface-2);color:var(--text-2);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-ui);line-height:var(--lh-ui);max-width:78%;max-height:220px;overflow-y:auto;margin-top:var(--sp-1);white-space:pre-wrap;overflow-wrap:anywhere;text-align:left}.msg-inject .sig-glyph{color:var(--text-2)}.inject-head{display:flex;align-items:center;gap:var(--sp-1);width:100%;border:0;background:none;padding:0;text-align:left;font:inherit}button.inject-head{cursor:pointer}.inject-head .inject-line{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);font-size:var(--fs-ui);line-height:var(--lh-ui)}.inject-head .inject-chev{display:inline-flex;flex:none;color:var(--text-3)}.reply-card .notice-detail{margin-top:var(--sp-2);max-width:none}.entry-error{color:var(--danger);white-space:pre-wrap}.entry-error-hint{color:var(--text-3);font-size:var(--fs-ui);margin-top:var(--sp-1);display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.entry-divider{color:var(--text-2);user-select:none}.md{display:flex;flex-direction:column;gap:.35rem;overflow-wrap:anywhere}.md-heading{font-weight:var(--fw-strong)}.md-heading[data-level="1"],.md-heading[data-level="2"]{font-size:var(--fs-title)}.md-table{display:block;overflow-x:auto;border-collapse:collapse;font-size:var(--fs-ui)}.md-table th,.md-table td{border-width:1px 0 0 1px;border-style:solid;border-color:var(--hair-1);padding:var(--sp-1) var(--sp-2);text-align:left;white-space:nowrap}.md-table th{background:var(--surface-2);color:var(--text-1);font-weight:var(--fw-strong)}.md-table td{color:var(--text-2)}.md-list{display:flex;flex-direction:column;gap:.1rem;padding-left:1.1rem}.md-quote{color:var(--text-2);padding-left:.8rem;border-left:2px solid var(--hair-1);white-space:pre-wrap}.md-para{white-space:pre-wrap}.md code.inline,.msg-a code.inline{background-color:var(--surface-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:1px 5px;font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);color:var(--tok-str)}.md .bold{font-weight:700}.md a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.pre{position:relative;background:var(--surface);border:1px solid var(--hair-1);border-radius:var(--radius-md);overflow:hidden}.pre-head{display:flex;justify-content:space-between;padding:var(--sp-1) var(--sp-3);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3);border-bottom:1px solid var(--hair-1)}.pre-file{overflow-wrap:anywhere}.pre pre{margin:0;overflow-x:auto}.pre code{display:block;padding:var(--sp-2) var(--sp-3);font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);line-height:1.6;color:var(--text-1)}.pre-copy{position:absolute;top:6px;right:6px;border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-3);font-family:var(--mono);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-2);cursor:pointer;opacity:0;transition:opacity var(--dur-fast) var(--ease)}.pre:hover .pre-copy,.pre-copy:focus-visible,.pre-copy.done{opacity:1}.pre-copy.done{color:var(--ok)}.pre.has-pre-head .pre-copy{top:var(--sp-8)}.tok-key{color:var(--tok-key)}.tok-str{color:var(--tok-str)}.tok-com{color:var(--tok-com);font-style:italic}.tok-num{color:var(--tok-num)}.tok-fn{color:var(--tok-fn)}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes sweep{0%{transform:translate(-100%)}to{transform:translate(300%)}}.shimmer{background:linear-gradient(100deg,var(--text-3) 40%,var(--text-1) 50%,var(--text-3) 60%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shimmer var(--dur-shimmer) var(--ease) infinite}.sweep-line{position:relative;overflow:hidden}.sweep-line:after{content:"";position:absolute;inset:0;width:33%;background:linear-gradient(90deg,transparent,transparent 0%,var(--hair-1) 50%,transparent 100%);animation:sweep var(--dur-sweep) var(--ease) infinite}html.glass body{background:transparent}html.glass .sb,html.glass .ide-cell.ide-left,html.glass .set-nav{background-color:transparent;background-image:linear-gradient(180deg,rgb(var(--accent-rgb) / .08),transparent 60%)}html.glass .chat,html.glass .ide-cell.ide-center,html.glass .set-body{background:var(--bg)}.toolcard{display:flex;flex-direction:column;font-family:var(--mono);border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.toolcard .head{display:flex;align-items:center;gap:var(--sp-2);min-height:32px;padding:0 var(--sp-2);border:0;background:none;color:var(--text-2);font:inherit;font-size:var(--fs-ui);font-family:var(--mono);text-align:left;width:100%;cursor:pointer}.toolcard .head:hover{background:var(--surface-2);color:var(--text-1)}.toolcard .mark{color:var(--text-1);flex:none}.toolcard[data-status=ok] .mark{color:var(--ok)}.toolcard[data-status=run] .mark{color:var(--accent)}.toolcard[data-status=err] .mark{color:var(--danger)}.toolcard .name{font-weight:var(--fw-strong);min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toolcard .args{flex:1;color:var(--text-3);font-size:var(--fs-caption);overflow-wrap:anywhere}.toolcard .chev{margin-left:auto;color:var(--text-3);flex:none}.toolcard .result{color:var(--text-2);white-space:pre-wrap;overflow-wrap:anywhere;padding:var(--sp-2) var(--sp-3);border-top:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-caption);line-height:1.6;max-height:132px;overflow-y:auto;animation:fade var(--dur-fast) var(--ease)}.toolcard .result.err{color:var(--danger)}.toolcard.err{border-color:rgb(var(--danger-rgb) / .4)}.toolcard.err .head{color:var(--danger)}.toolgroup{display:flex;flex-direction:column;font-family:var(--mono);border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.toolgroup>.grp-head{color:var(--text-1)}.toolgroup .mark{color:var(--ok)}.toolgroup .name{font-weight:var(--fw-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toolgroup .count,.toolgroup .exp{color:var(--text-2)}.toolgroup .toolcard{border-width:0;border-radius:0;border-top:1px solid var(--hair-1)}.noticegroup{display:flex;flex-direction:column;gap:0;align-items:center}.noticegroup>.grp-head{display:inline-flex;align-items:center;gap:var(--sp-1);width:fit-content;padding:var(--sp-1) var(--sp-3);border:0;background:var(--surface-2);color:var(--text-2);cursor:pointer;font-size:var(--fs-caption);line-height:var(--lh-caption);border-radius:var(--radius-md);max-width:78%;white-space:pre-wrap;overflow-wrap:anywhere;text-align:center}.noticegroup>.grp-head[data-variant=warn] .text{color:var(--warn)}.noticegroup>.grp-head[data-variant=ok] .text{color:var(--ok)}.diff{display:flex;flex-direction:column;font-family:var(--mono)}.diff .path{color:var(--text-1);font-weight:var(--fw-strong);margin-bottom:var(--sp-1)}.diff .del{color:var(--danger);background:rgb(var(--danger-rgb) / .1);white-space:pre-wrap}.diff .add{color:var(--ok);background:rgb(var(--ok-rgb) / .1);white-space:pre-wrap}.diff .ctx{color:var(--text-2);white-space:pre-wrap}.diff .del .wchg{background:rgb(var(--danger-rgb) / .3);border-radius:var(--radius-sm)}.diff .add .wchg{background:rgb(var(--ok-rgb) / .3);border-radius:var(--radius-sm)}.fv-chip{border:none;background:transparent;padding:0;font:inherit;color:var(--accent);cursor:pointer;text-decoration:underline dotted}.fv-chip:hover{color:var(--text-1)}.fv-btn{border:1px solid var(--hair-2);border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-2);cursor:pointer}.fv-btn:hover:not(:disabled){color:var(--text-1);background:var(--surface-2)}.fv-btn:disabled{opacity:.5;cursor:default}.fv-btn.primary{color:var(--accent);border-color:var(--accent)}.fv-btn.primary:hover:not(:disabled){color:var(--accent)}.editor-root{flex:1;min-height:0;display:flex;flex-direction:column}.fv-edit{flex:none;display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-3);border-bottom:1px solid var(--hair-1)}.fv-edit .grow{flex:1}.fv-edit-path{color:var(--text-3);font-size:var(--fs-caption)}.fv-conflict{flex:none;display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-3);color:var(--warn);background:rgb(var(--warn-rgb) / .08);border-bottom:1px solid var(--hair-1)}.fileviewer .fv-saved{flex:none;padding:var(--sp-1) var(--sp-3);color:var(--ok);border-bottom:1px solid var(--hair-1)}.editor-wrap{flex:1;min-height:0;display:flex;overflow:hidden}.editor-gutter{flex:none;overflow:hidden;min-width:3ch;text-align:right;color:var(--text-3);font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);line-height:1.6;padding:var(--sp-1) var(--sp-2) 0 var(--sp-3);user-select:none}.editor-stack{position:relative;flex:1;min-width:0;overflow:hidden}.editor-hl,.editor-ta{font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);line-height:1.6;tab-size:2;margin:0;padding:var(--sp-1) var(--sp-2) var(--sp-2) 0;white-space:pre;word-break:normal;overflow-wrap:normal}.editor-hl{position:absolute;inset:0;overflow:hidden;color:var(--text-1);pointer-events:none}.editor-ta{position:absolute;inset:0;overflow:auto;resize:none;border:none;outline:none;background:transparent;color:transparent;caret-color:var(--text-1)}.board{display:flex;flex-direction:column}.board .head{color:var(--text-2);margin-bottom:var(--sp-1)}.board .done{color:var(--ok)}.board .wip{color:var(--warn)}.board .todo{color:var(--text-2)}.todo{display:flex;flex-direction:column;gap:var(--sp-1)}.todo-bar{height:2px;background:var(--ok);transition:width var(--dur-med) var(--ease)}.todo-item{display:flex;align-items:center;gap:var(--sp-2);min-width:0;font-size:var(--fs-ui);color:var(--text-2)}.todo-item>span:last-child{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.todo-box{flex:none;width:16px;height:16px;border-radius:var(--radius-sm);border-width:1px;border-style:solid;border-color:var(--hair-2);display:inline-flex;align-items:center;justify-content:center;color:var(--ok);background:none}.todo-box.done{background:rgb(var(--ok-rgb) / .12);border-color:rgb(var(--ok-rgb) / .3)}.statusline{height:28px;flex:none;display:flex;align-items:center;gap:var(--sp-4);padding:0 var(--sp-4);border-top:1px solid var(--hair-1);font-size:var(--fs-caption);font-family:var(--mono);color:var(--text-3);user-select:none;white-space:nowrap;overflow:hidden}.statusline .warn{color:var(--warn)}.statusline .board,.statusline .cache{color:var(--ok)}.statusline .seg-branch{flex:none;border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);color:var(--text-3)}.statusline .seg-goal{min-width:0;overflow:hidden;text-overflow:ellipsis}.statusline .seg-busy{margin-left:auto;color:var(--accent);flex:none}.statusline[data-stale]{opacity:.55}.banner{padding:var(--sp-1) var(--sp-4);background:rgb(var(--warn-rgb) / .12);color:var(--warn);border-bottom:1px solid var(--hair-1);font-size:var(--fs-ui)}.banner .action{margin-left:var(--sp-2)}.banner.quiet{padding:var(--sp-1) var(--sp-3);background:none;color:var(--text-3);font-size:var(--fs-caption);font-family:var(--mono)}.btnrow{display:flex;gap:var(--sp-2);flex-wrap:wrap}button.wudao{font:inherit;background:var(--surface);color:var(--text-1);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:var(--sp-1) var(--sp-3);cursor:pointer}button.wudao:hover{border-color:var(--hair-2);color:var(--text-1)}button.wudao.primary{border-color:transparent;background:var(--accent);color:var(--accent-ink)}button.wudao.primary:hover:not(:disabled){filter:brightness(1.08)}button.wudao.primary:disabled{background:var(--accent);color:var(--accent-ink)}button.wudao.danger{border-color:var(--danger);color:var(--danger)}button.wudao:disabled{opacity:.45;cursor:default}.optioncards{display:flex;flex-direction:column;gap:var(--sp-2);overflow-y:auto}.optioncard{text-align:left;font:inherit;background:var(--surface);color:var(--text-1);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-3);cursor:pointer}.optioncard:hover{border-color:var(--hair-2)}.optioncard .desc{color:var(--text-2);display:block}.picker{display:flex;flex-direction:column;gap:var(--sp-1);max-height:50vh;overflow-y:auto}.pickrow{display:flex;gap:var(--sp-2);align-items:baseline;text-align:left;font-family:var(--mono);color:var(--text-1);background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);padding:var(--sp-1) var(--sp-2);cursor:pointer}.pickrow:hover{background:var(--surface)}.pickrow.cur{border-color:var(--accent);background:var(--surface)}.pickrow .rank,.pickrow .meta{color:var(--text-2)}.pickrow:disabled{cursor:not-allowed;opacity:.55}.pop-in{animation:pop var(--dur-med) var(--ease)}.scrim{position:fixed;inset:0;background:var(--overlay);display:flex;align-items:center;justify-content:center;padding:var(--sp-4);animation:fade var(--dur-med) var(--ease)}@keyframes fade{0%{opacity:0}}.modal-card{background:var(--surface);border:0;box-shadow:var(--elev-3);border-radius:var(--radius-lg);max-width:480px;width:calc(100% - var(--sp-8));overflow:hidden}.menu{background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;box-shadow:var(--elev-2);border-radius:var(--radius-lg);padding:var(--sp-1);min-width:180px}.menu-item{display:flex;align-items:center;height:26px;padding:0 var(--sp-2);border-radius:var(--radius-sm);font-size:var(--fs-ui);color:var(--text-2)}.menu-item:hover{background:var(--surface-2);color:var(--text-1)}.menu-kbd{margin-left:auto;font-family:var(--mono);font-size:var(--fs-caption);color:var(--text-3)}.scrim{z-index:var(--z-modal)}.modal-card{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-4);max-height:calc(100dvh - var(--sp-8))}.modal-card h3{margin:0;font-size:var(--fs-title)}.modal-card .warn{color:var(--warn)}.modal-card .muted{color:var(--text-2)}.menu.ctx{--ctx-cap: 180px;--ctx-w: 224px;position:fixed;z-index:var(--z-ctx-menu);display:flex;flex-direction:column;min-width:var(--ctx-w);max-width:var(--ctx-w);left:min(var(--ctx-x, 0px),calc(100vw - var(--ctx-w) - var(--sp-4)));top:min(var(--ctx-y, 0px),calc(100dvh - var(--ctx-cap) - var(--sp-4)));max-height:var(--ctx-cap);overflow-y:auto;animation:pop var(--dur-fast) var(--ease)}button.menu-item{border:0;background:transparent;font:inherit;font-size:var(--fs-ui);text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;width:100%;flex:none}.planboard{border:1px solid rgb(var(--accent-rgb) / .35);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3)}.planboard .label{color:var(--accent);font-weight:var(--fw-strong)}.planboard .body{white-space:pre-wrap;margin:var(--sp-1) 0 var(--sp-2)}.inputarea{flex:none;display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) 0 var(--sp-1)}.composer{max-width:calc(var(--content-max) + 32px);width:100%;margin:0 auto;background:var(--surface);border:0;border-radius:var(--radius-md);box-shadow:var(--elev-2);padding:var(--sp-2) var(--sp-3) var(--sp-2);display:flex;flex-direction:column}.composer-ta{width:100%;font-family:var(--font);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--text-1);padding:var(--sp-2) 0 var(--sp-1);background:none;border:0;outline:0;resize:none;min-height:22px;max-height:40vh}.composer-ta::placeholder{color:var(--text-3)}.composer-tools{display:flex;align-items:center;gap:var(--sp-1);flex-wrap:wrap}.composer-right{margin-left:auto;display:flex;align-items:center;gap:var(--sp-2)}.chip{display:inline-flex;align-items:center;gap:var(--sp-1);height:24px;padding:0 calc(var(--sp-2) + 1px);border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--bg);font-family:var(--font);font-weight:var(--fw-strong);font-size:calc(var(--fs-ui) - 1px);color:var(--text-2);cursor:pointer;white-space:nowrap;transition:opacity var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}.chip:hover:not(:disabled):not(.on):not(.sel){border-color:var(--hair-2);color:var(--text-1)}.chip.on,.chip.sel{background:var(--surface-2);border-color:var(--hair-2);color:var(--text-1)}.chip:disabled{opacity:.5;cursor:default}.chip.model{max-width:12rem}.chip.model .chip-label{min-width:0;overflow:hidden;text-overflow:ellipsis}.chip.model .caret{flex:none}.composer .chip{background:transparent;border-color:transparent}.composer .chip:hover:not(:disabled):not(.on):not(.sel){background:var(--surface-2);border-color:transparent;color:var(--text-1)}.composer .chip.on,.composer .chip.sel{background:var(--surface-2);border-color:var(--hair-2);color:var(--text-1)}.composer .chip.interrupt{color:var(--danger)}.composer .chip.interrupt:hover:not(:disabled){background:rgb(var(--danger-rgb) / .1);border-color:rgb(var(--danger-rgb) / .35);color:var(--danger)}.send{width:34px;height:34px;flex:none;border-radius:50%;border:0;background:var(--accent);color:var(--accent-ink);display:inline-flex;align-items:center;justify-content:center;padding:0;cursor:pointer}.send:hover:not(:disabled){filter:brightness(1.08)}.send.off{opacity:.4;pointer-events:none}.send:disabled{cursor:default}.pop{position:relative;display:inline-flex}.pop .menu{position:absolute;bottom:40px;left:0;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;border-radius:var(--radius-lg);padding:var(--sp-2);min-width:224px;display:flex;flex-direction:column;gap:var(--sp-1);z-index:var(--z-float);box-shadow:var(--elev-2);animation:pop var(--dur-fast) var(--ease)}.pop .mi{display:flex;gap:var(--sp-2);align-items:center;padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-sm);font-family:var(--font);font-size:var(--fs-ui);color:var(--text-2);background:transparent;border:0;cursor:pointer;text-align:left;white-space:nowrap}.pop .mi:hover{background:var(--surface-2)}.pop .mi.on{background:var(--accent-weak);color:var(--accent);font-weight:var(--fw-strong)}.pop .mi .confirm{color:var(--warn);font-size:var(--fs-caption);white-space:normal}.pop .mi .warned{font-size:var(--fs-caption);color:var(--danger);margin-left:var(--sp-1);border:1px solid rgb(var(--danger-rgb) / .35);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.pop .mi .msub{margin-left:auto;font-size:var(--fs-caption);color:var(--text-2)}.pop .menu.model-menu{min-width:max-content;max-width:min(40rem,92vw);padding:0;gap:0;overflow:hidden;display:flex;flex-direction:row;align-items:stretch}.pop .menu.model-menu .mroot,.pop .menu.model-menu .mpane{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-2);max-height:min(24rem,60vh);overflow-y:auto;overscroll-behavior:contain}.pop .menu.model-menu .mroot{min-width:11rem;max-width:13rem;border-right:1px solid var(--hair-1)}.pop .menu.model-menu .mpane{min-width:12rem}.pop.down .menu{bottom:auto;top:calc(100% + 4px)}.pop .menu.model-menu .mgroup{padding:var(--sp-1) var(--sp-3);font-size:var(--fs-caption);letter-spacing:.04em;text-transform:uppercase;color:var(--text-3)}.pop .menu.model-menu .mgroup:not(:first-child){margin-top:var(--sp-1);padding-top:var(--sp-1);border-top:1px solid var(--hair-1)}.pop .menu.model-menu .mi.mprov .mlabel{font-weight:var(--fw-strong)}.pop .menu.model-menu .mi.mprov.mfoc:not(.on){background:var(--surface-2)}.pop .menu.model-menu .mi.mrec{border-bottom:1px solid var(--hair-1);border-bottom-left-radius:0;border-bottom-right-radius:0}.pop .menu .menu-sep{height:1px;background:var(--hair-1);margin:var(--sp-1) 0}.pop .mf{display:flex;align-items:center;width:100%;padding:var(--sp-1) var(--sp-3);border:0;border-top:1px solid var(--hair-1);margin-top:var(--sp-1);border-radius:var(--radius-sm);font-family:var(--font);font-size:var(--fs-caption);color:var(--text-2);background:transparent;cursor:pointer;text-align:left;white-space:nowrap}.pop .mf:hover{background:var(--surface-2);color:var(--text-1)}.pop .menu.lang-menu{min-width:max-content}.pop .lang-head{padding:var(--sp-1) var(--sp-3);font-size:var(--fs-caption);letter-spacing:.04em;color:var(--text-3);user-select:none}.pop .lang-head+.mi{margin-top:0}textarea.wudao-input:focus{border-color:var(--accent)}.hint{color:var(--text-2);font-size:var(--fs-ui);user-select:none}.inputarea>.hint{text-align:center}.composer:focus-within{box-shadow:0 0 0 1px rgb(var(--accent-rgb) / .55),var(--elev-2-soft)}.composer.dragover{box-shadow:0 0 0 1px rgb(var(--accent-rgb) / .8),var(--elev-2-soft)}.composer .img-rail{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-2)}.img-thumb{position:relative;width:48px;height:48px;flex:none;border-radius:var(--radius-sm);border:1px solid var(--hair-1);overflow:hidden;background:var(--surface-2)}.img-thumb img{width:100%;height:100%;object-fit:cover;display:block}.img-thumb .rm{position:absolute;top:0;right:0;width:16px;height:16px;display:grid;place-items:center;padding:0;border:0;border-radius:0 0 0 var(--radius-sm);background:rgb(var(--bg-rgb) / .72);color:var(--text-1);cursor:pointer}.img-thumb .rm:hover{color:var(--danger)}.img-thumb .rm:disabled{cursor:default;opacity:.6}.chip.attach .n{font-size:var(--fs-caption);color:var(--text-1)}.img-notice{color:var(--warn)}.composer .file-rail{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-2)}.file-card{display:flex;align-items:center;gap:var(--sp-2);max-width:260px;min-height:48px;padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--surface-2)}.file-card .glyph{flex:none;font-size:16px;line-height:1}.file-card .meta{display:flex;flex-direction:column;min-width:0}.file-card .name{font-size:var(--fs-ui);color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-card .size{font-size:var(--fs-caption);color:var(--text-3)}.file-card .rm{flex:none;width:16px;height:16px;display:grid;place-items:center;padding:0;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-2);cursor:pointer}.file-card .rm:hover{color:var(--danger)}.file-card .rm:disabled{cursor:default;opacity:.6}.chip.attachfile .n{font-size:var(--fs-caption);color:var(--text-1)}.hist-file-rail{display:flex;flex-wrap:wrap;gap:var(--sp-1);justify-content:flex-end;margin-bottom:var(--sp-1)}.hist-file-chip{display:inline-flex;align-items:center;gap:var(--sp-1);max-width:240px;padding:0 var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--surface-2);font-size:var(--fs-caption);color:var(--text-2)}.hist-file-chip .name{color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hist-file-chip .size{color:var(--text-3);flex:none}.slashmenu{background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:1px solid var(--hair-1);border-radius:var(--radius-lg);padding:var(--sp-1) 0;max-height:12rem;overflow-y:auto;animation:pop var(--dur-fast) var(--ease)}.slashmenu .row{padding:0 var(--sp-2);white-space:pre;font-family:var(--mono)}.slashmenu .row.sel{color:var(--accent)}.slashmenu .row .args,.slashmenu .row .desc{color:var(--text-2)}.slashmenu .row.sel .args,.slashmenu .row.sel .desc{color:var(--accent);opacity:.8}.slashmenu .more{color:var(--text-2);padding:0 var(--sp-2)}.connect-shell{flex:1;display:grid;place-items:center;padding:var(--sp-4)}.connect-card{display:flex;flex-direction:column;align-items:center;gap:var(--sp-3);background:var(--surface);border:0;border-radius:var(--radius-lg);box-shadow:var(--elev-2);padding:var(--sp-8) var(--sp-6);text-align:center;max-width:400px}.connect-card .connect-title{color:var(--text-1);font-size:var(--fs-title)}.connect-card .connect-row{display:flex;align-items:center;gap:var(--sp-2)}.connect-card .connect-row .spin{color:var(--text-2);flex:none}.connect-card .connect-msg{color:var(--text-2);font-size:var(--fs-ui)}.connect-card .connect-msg.err{color:var(--danger)}.connect-card .connect-meta{color:var(--text-3);font-family:var(--mono);font-size:var(--fs-caption)}.simple{display:flex;flex-direction:column;flex:1;min-height:0;padding:var(--sp-3) var(--sp-8) var(--sp-4)}.simple .chat{flex:1;padding-inline:0}.simple .chat{max-width:none;margin:0;width:100%}.simple .simple-composer{width:100%}.simple .inputarea{width:100%;padding-inline:0}.simple .composer{max-width:none;margin:0;width:100%;margin-top:var(--sp-3)}.simple .chat{scrollbar-width:none}.simple .chat::-webkit-scrollbar{display:none}.act{border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.act-row{display:flex;align-items:center;gap:var(--sp-2);height:32px;padding:0 var(--sp-2);border:0;background:none;color:var(--text-2);font:inherit;font-size:var(--fs-ui);text-align:left;width:100%;cursor:pointer}.act-row:hover{background:var(--surface-2);color:var(--text-1)}.act-row[data-status=ok] .act-st{color:var(--ok)}.act-row[data-status=run] .act-st{color:var(--accent)}.act-row[data-status=err] .act-st,.act-row[data-status=err],.act-row[data-status=err] .act-tail{color:var(--danger)}.act-verb,.act-file,.act-tail{font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px}.act-file{color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.act-tail{margin-left:auto;color:var(--text-3);min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.act-tail-line{padding:var(--sp-1) var(--sp-3) var(--sp-1) calc(var(--sp-3) + var(--sp-4));font-family:var(--mono);font-size:var(--fs-caption);color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.act-chev{color:var(--text-3);flex:none;transition:transform var(--dur-fast) var(--ease)}.act[data-open=true] .act-chev{transform:rotate(180deg)}.act-file-card{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-top:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--text-2)}.act-file-icon{flex:none;user-select:none;color:var(--text-2)}.act-file-name{color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.act-file-size{color:var(--text-3);flex:none}.act-file-reveal{margin-left:auto;flex:none;border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-3);cursor:pointer}.act-file-reveal:hover{border-color:var(--hair-2);color:var(--text-1)}.act-body{border-top:1px solid var(--hair-1);padding:var(--sp-2) var(--sp-3);font-family:var(--mono);font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--text-2);max-height:13.2em;overflow-y:auto;animation:fade var(--dur-fast) var(--ease)}.act .act-body .block{display:flex;flex-direction:column;gap:0}.act .act-body .blocklabel{color:var(--text-3);font-size:var(--fs-caption);user-select:none}.act .act-body .block.err .blocktext{color:var(--danger)}.act .act-body .blocktext{white-space:pre-wrap;overflow-wrap:anywhere}.activity-foot{color:var(--text-3);font-size:var(--fs-caption);user-select:none}.activity-toggle{display:block;margin-top:var(--sp-1);border:0;background:transparent;color:var(--text-3);font-size:var(--fs-caption);padding:0;cursor:pointer;user-select:none}.activity-toggle:hover{color:var(--accent)}.act.err{border-color:rgb(var(--danger-rgb) / .4)}.spin{animation:spin var(--dur-slow) linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.panel{display:flex;flex-direction:column;border-left-width:1px;border-left-style:solid;border-left-color:var(--hair-1)}.panel-head{display:flex;align-items:center;justify-content:space-between;height:34px;padding-left:var(--sp-3);padding-right:var(--sp-3);border-bottom:1px solid var(--hair-1)}.panel-title{font-size:var(--fs-ui);font-weight:var(--fw-medium);color:var(--text-1)}.panel-count{font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.panel-list{overflow-y:auto}.panel-list>*+*{border-top:1px solid var(--hair-1)}.panel-list>.act{border-width:0;border-radius:0;background:none}.panel-list .act-row{cursor:default}.panel-list>details.reasoning,.panel-list>.steer{padding:var(--sp-1) var(--sp-2)}.panel-list .act-tail.gating{color:var(--warn)}.live-answer{margin-top:var(--sp-2)}.live-answer .caret{color:var(--accent);animation:blink 1s steps(1) infinite}@keyframes blink{50%{opacity:0}}details.reasoning{color:var(--text-2)}details.reasoning>summary{cursor:pointer;user-select:none;list-style:none}details.reasoning>summary::-webkit-details-marker{display:none}details.reasoning>summary:hover{color:var(--text-1)}details.reasoning>summary:before{content:"▸ "}details.reasoning[open]>summary:before{content:"▾ "}details.reasoning .body{white-space:pre-wrap;border-left:2px solid var(--hair-1);padding-left:var(--sp-2);margin-top:var(--sp-1);max-height:220px;overflow-y:auto}.reply-card>details.reasoning{margin-bottom:var(--sp-2)}.steer{color:var(--text-2)}.simple-error{display:flex;flex-direction:column;gap:var(--sp-1);border-width:1px;border-style:solid;border-color:rgb(var(--danger-rgb) / .4);border-radius:var(--radius-md);padding:var(--sp-2)}.simple-error .err-head{color:var(--danger);font-weight:700}.simple-error .err-text{color:var(--text-1);white-space:pre-wrap;overflow-wrap:anywhere}.simple-error .err-recovery{display:flex;gap:var(--sp-2);align-items:baseline;flex-wrap:wrap;color:var(--warn)}.simple-error .err-recovery .label{font-weight:var(--fw-strong);user-select:none}.approval{width:min(calc(var(--content-max) + 32px),calc(100% - 2.5rem));margin:var(--sp-2) auto var(--sp-4);background:rgb(var(--warn-rgb) / .07);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-md);padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;max-height:calc(100% - 3.5rem);overflow:hidden}.simple .approval{width:calc(100% - 2.5rem);margin-left:var(--sp-2);margin-right:var(--sp-2)}.approval .ap-scroll{display:flex;flex-direction:column;min-height:0;overflow-y:auto}.approval .strip,.permission-card .strip{font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-caption);color:var(--warn);letter-spacing:.3px;margin-bottom:var(--sp-2)}.approval .why{font-size:var(--fs-ui);font-weight:var(--fw-strong);color:var(--text-1);margin-bottom:var(--sp-1);overflow-wrap:anywhere}.approval .warn,.approval .sidecar{color:var(--warn);font-size:var(--fs-ui);overflow-wrap:anywhere}.approval .btns{display:flex;gap:var(--sp-3);justify-content:flex-end}.approval .btns button{font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-ui);padding:var(--sp-2) var(--sp-4);border-radius:var(--radius-sm);cursor:pointer}.approval .btns button:disabled{opacity:.5;cursor:default}.approval .deny{border:1px solid var(--hair-2);background:var(--surface);color:var(--text-2)}.approval .deny:hover:not(:disabled){color:var(--danger);border-color:var(--danger)}.approval .allow{border:0;background:var(--accent);color:var(--accent-ink)}.approval .allow:hover:not(:disabled){filter:brightness(1.08)}.approval-note{text-align:center;font-size:var(--fs-caption);color:var(--text-3);margin-top:var(--sp-2)}.approval.agent-root{background:rgb(var(--accent-rgb) / .06);border-color:rgb(var(--accent-rgb) / .3)}.approval.agent-root .strip{color:var(--accent)}.approval.agent-root .deny:hover:not(:disabled){color:var(--text-1);border-color:var(--text-3)}.permission-card{width:min(calc(var(--content-max) + 32px),calc(100% - 2.5rem));margin:var(--sp-2) auto var(--sp-4);background:rgb(var(--warn-rgb) / .07);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-md);padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2);max-height:calc(100dvh - var(--sp-8))}.simple .permission-card{width:calc(100% - 2.5rem);margin-left:var(--sp-2);margin-right:var(--sp-2)}.permission-card h3{margin:0;font-size:var(--fs-title)}.permission-card .warn{color:var(--warn);overflow-wrap:anywhere}.permission-card .muted{color:var(--text-2)}.permission-card .pc-scroll{display:flex;flex-direction:column;gap:var(--sp-2);min-height:0;overflow-y:auto}.approval .cmd,.permission-card .cmd{font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-2);background:var(--surface-2);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);max-height:76px;overflow:auto;margin:var(--sp-2) 0;white-space:pre-wrap;overflow-wrap:anywhere}.approval .spoof,.permission-card .spoof{display:flex;flex-direction:column;gap:var(--sp-1);font-size:var(--fs-ui);border-top:1px dashed rgb(var(--warn-rgb) / .35);padding-top:var(--sp-2)}.approval .spoof-title,.permission-card .spoof-title{color:var(--warn);font-weight:var(--fw-strong)}.approval .spoof-row,.permission-card .spoof-row{display:flex;flex-wrap:wrap;gap:var(--sp-1);align-items:baseline}.approval .spoof-key,.permission-card .spoof-key{font-family:var(--mono);color:var(--text-2);overflow-wrap:anywhere}.approval .spoof-badge,.permission-card .spoof-badge{font-family:var(--mono);font-size:var(--fs-caption);color:var(--warn);background:rgb(var(--warn-rgb) / .08);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-sm);padding:0 var(--sp-2);white-space:nowrap}.approval .spoof-more,.permission-card .spoof-more{color:var(--text-3)}.approval .spoof-url,.permission-card .spoof-url{overflow-wrap:anywhere}.approval .spoof-target,.permission-card .spoof-target{font-family:var(--mono);color:var(--warn);overflow-wrap:anywhere}.approval .spoof-note,.permission-card .spoof-note{color:var(--text-3);font-size:var(--fs-caption);padding-left:var(--sp-3)}.permission-card .btnrow{justify-content:flex-end}.permission-card .btnrow button{font-weight:var(--fw-strong);border-radius:var(--radius-sm)}.permission-card .btnrow button.wudao.primary{background:var(--accent);color:var(--accent-ink)}.hero{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-2);flex:1;text-align:center;padding:calc(var(--sp-8) + var(--sp-2)) var(--sp-4);color:var(--text-1)}.hero h1{margin:var(--sp-2) 0 0;font-size:var(--fs-head)}.hero p{margin:0;color:var(--text-3);font-size:var(--fs-ui)}.hero .hero-hint{margin-top:var(--sp-3)}.hero .hero-await{margin-top:var(--sp-3);color:var(--text-2)}.hero .hero-await-name{padding:0;border:none;background:none;color:var(--accent);font:inherit;cursor:pointer}.hero .hero-await-name:hover{text-decoration:underline}.hero .hero-await-name:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}.hero .hero-actions{margin-top:var(--sp-4);display:flex;gap:var(--sp-2)}.hero .hero-act{padding:var(--sp-1) var(--sp-3);border:1px solid var(--hair-2);background:transparent;color:var(--text-2);font:inherit;font-size:var(--fs-ui);border-radius:var(--radius-sm);cursor:pointer;white-space:nowrap}.hero .hero-act:hover{color:var(--accent);border-color:var(--accent)}.hero .hero-act:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap}.recall{font-family:var(--font);font-size:var(--fs-caption);color:var(--text-3);background:none;border:0;padding:0 var(--sp-1);margin-left:var(--sp-2);cursor:pointer;border-radius:var(--radius-sm)}.recall:hover{color:var(--danger)}.recall:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.act-row .detach{font-family:var(--font);font-size:var(--fs-caption);color:var(--text-3);background:none;border:0;padding:0 var(--sp-1);margin-left:auto;cursor:pointer;border-radius:var(--radius-sm);white-space:nowrap}.act-row .detach:hover{color:var(--accent)}.act-row .detach:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ask-card{width:min(calc(var(--content-max) + 32px),calc(100% - 2.5rem));margin:var(--sp-2) auto var(--sp-4);background:rgb(var(--accent-rgb) / .06);border:1px solid rgb(var(--accent-rgb) / .3);border-radius:var(--radius-md);padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2);max-height:calc(100dvh - var(--sp-8))}.ask-card h3{margin:0;font-size:var(--fs-title)}.ask-card .muted{color:var(--text-2)}.turnlive{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) 0}.turnlive .act-row{cursor:default}.turnstatus{display:flex;flex-direction:column;gap:var(--sp-1);color:var(--text-1)}.turnstatus .ts-head{display:flex;align-items:center;gap:var(--sp-2);min-height:16px}.turnstatus .label{font-weight:var(--fw-strong)}.turnstatus .clock{color:var(--text-3)}.turnstatus .queue-line{color:var(--text-2);font-size:var(--fs-ui)}.simple-composer{display:flex;flex-direction:column}.lane-toggle{display:inline-flex;align-items:center;gap:var(--sp-1)}.parked-row{display:inline-flex;gap:var(--sp-1);flex-wrap:wrap}.parked-chip{display:inline-flex;align-items:center;gap:var(--sp-1);height:26px;padding:0 var(--sp-3);color:var(--warn);background:rgb(var(--warn-rgb) / .1);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-sm);font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-caption);max-width:100%}.parked-chip .drop{font:inherit;color:var(--text-3);background:transparent;border:none;padding:0;cursor:pointer}.parked-chip .drop:hover{color:var(--danger)}.composer-right .ctx{position:relative;display:inline-flex;align-items:center;gap:var(--sp-1);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.ctx-btn{font:inherit;background:none;border:0;padding:0;cursor:pointer;display:inline-flex;align-items:center;gap:var(--sp-1)}.ctx-btn:hover{color:var(--text-1)}.ctxmeter-backdrop{position:fixed;inset:0;z-index:calc(var(--z-legend) - 1)}.ctxmeter-legend{position:absolute;bottom:calc(100% + var(--sp-1));right:0;z-index:var(--z-legend);display:flex;flex-direction:column;gap:0;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;box-shadow:var(--elev-1);border-radius:var(--radius-lg);padding:var(--sp-1) var(--sp-2);font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-2);white-space:nowrap}.ctxmeter-legend .warn{color:var(--warn)}.settings-page{flex:1;min-height:0;display:flex;position:relative}.set{display:flex;height:100%;flex:1;min-width:0}.set-nav{width:180px;flex:none;border-right:1px solid var(--hair-1);padding:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-2)}.settings-head{display:flex;align-items:center;justify-content:space-between}.settings-head h3{margin:0;font-size:var(--fs-title)}.settings-receipts{color:var(--warn);display:flex;flex-direction:column;gap:var(--sp-1);white-space:pre-wrap}.settings-receipts>div{display:flex;align-items:flex-start;gap:var(--sp-1)}.settings-receipts>div[data-variant=ok]{color:var(--ok)}.settings-receipts>div[data-variant=info]{color:var(--text-2)}.settings-receipts .ic{flex:none;margin-top:calc(var(--sp-1) / 2)}.set-body{flex:1;min-width:0;overflow-y:auto;scrollbar-gutter:stable;padding:var(--sp-6) var(--sp-8);max-width:calc(var(--content-max) + 32px);margin:0 auto}.set-body>.entry-error,.set-body>.hint{margin-bottom:var(--sp-4)}.settings-pending-ask{margin-bottom:var(--sp-4);padding:var(--sp-2) var(--sp-3);border:1px solid rgb(var(--warn-rgb) / .35);border-radius:var(--radius-sm);background:rgb(var(--warn-rgb) / .1);color:var(--warn);font-size:var(--fs-ui);line-height:var(--lh-ui)}.settings-toasts{position:absolute;right:var(--sp-4);bottom:var(--sp-4);z-index:var(--z-float);display:flex;flex-direction:column;gap:var(--sp-2);max-width:min(420px,calc(100% - var(--sp-8)))}.settings-toast{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border:0;border-radius:var(--radius-lg);background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));box-shadow:var(--elev-2);color:var(--text-1);font-size:var(--fs-ui);line-height:var(--lh-ui);white-space:pre-wrap;animation:toast-in var(--dur-med) var(--ease)}.settings-toast[data-variant=warn]{color:var(--warn)}.settings-toast[data-variant=ok]{color:var(--ok)}.settings-toast .ic{flex:none;margin-top:calc(var(--sp-1) / 2)}.settings-toast-close{flex:none;border:none;background:none;padding:0;font:inherit;font-size:var(--fs-ui);line-height:inherit;color:var(--text-3);cursor:pointer}.settings-toast-close:hover{color:var(--text-1)}@keyframes toast-in{0%{opacity:0;transform:translateY(4px)}}.settings-section{display:flex;flex-direction:column;gap:var(--sp-3)}.set-sec+.set-sec{margin-top:var(--sp-8)}.set-title{font-size:var(--fs-title);font-weight:var(--fw-strong);line-height:var(--lh-title);letter-spacing:-.2px;color:var(--text-1);margin:0 0 var(--sp-3)}.ctl{height:28px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1);font-family:inherit;font-size:var(--fs-ui)}.ctl:hover{border-color:var(--hair-2)}.ctl:disabled{opacity:.5;cursor:default}.segctl{display:inline-flex;align-items:center;gap:calc(var(--sp-1) / 2);padding:var(--sp-1);border-radius:var(--radius-md);background:var(--surface-2)}.segctl-opt{height:28px;padding:0 var(--sp-3);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-family:inherit;font-size:var(--fs-ui);line-height:1;white-space:nowrap;cursor:pointer;display:inline-flex;align-items:center;gap:var(--sp-1);transition:color var(--dur-fast) var(--ease),background-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}.segctl-opt:hover:not(:disabled):not(.on){color:var(--text-1)}.segctl-opt.on{background:var(--surface);color:var(--text-1);font-weight:var(--fw-strong);box-shadow:var(--elev-1)}.segctl-opt:disabled{opacity:.45;cursor:default}.segctl-dot{width:10px;height:10px;flex:none;border-radius:50%}.segctl-opt[data-swatch=black] .segctl-dot{background:rgb(var(--swatch-ink-rgb))}.segctl-opt[data-swatch=blue] .segctl-dot{background:rgb(var(--swatch-royal-rgb))}.segctl-opt[data-swatch=green] .segctl-dot{background:rgb(var(--swatch-jade-rgb))}input.wudao-switch{appearance:none;-webkit-appearance:none;flex:none;position:relative;width:36px;height:20px;margin:0;padding:0;border:0;border-radius:var(--radius-sm);background:var(--hair-3);cursor:pointer;transition:background-color var(--dur-fast) var(--ease)}input.wudao-switch:before{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:var(--surface);box-shadow:var(--elev-1);transition:transform var(--dur-fast) var(--ease)}input.wudao-switch:checked{background:var(--accent)}input.wudao-switch:checked:before{transform:translate(16px);background:var(--accent-ink)}input.wudao-switch:disabled{opacity:.45;cursor:default}.setrow{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding:var(--sp-3) 0;cursor:default}.setrow+.setrow{border-top:1px solid var(--hair-1)}.setrow-main{display:flex;flex-direction:column;gap:calc(var(--sp-1) / 2);min-width:0;flex:1}.setrow-title{color:var(--text-1);font-size:var(--fs-ui);line-height:1.5}.setrow-note{color:var(--text-3);font-size:var(--fs-caption);line-height:1.5}label.setrow{cursor:pointer}label.setrow:active input.wudao-switch{filter:brightness(.96)}.provider-cards{display:flex;flex-direction:column;gap:var(--sp-2)}.provider-card{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-1)}.provider-card .card-head{display:flex;align-items:baseline;gap:var(--sp-2)}.provider-card .card-name{font-weight:var(--fw-strong)}.provider-card .meta{color:var(--text-2);font-size:var(--fs-ui)}.provider-card .card-endpoint{color:var(--text-2);font-size:var(--fs-ui);overflow-wrap:anywhere;font-family:var(--mono)}.provider-card .card-models{display:flex;gap:var(--sp-1);flex-wrap:wrap}.dot{display:inline-block;width:8px;height:8px;border-radius:50%}.dot.ready{background:var(--ok)}.dot.missing-key{background:var(--danger)}.dot.missing-endpoint{background:var(--warn)}.card-status{font-size:var(--fs-ui);color:var(--text-2)}.model-chip{font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-1);background:var(--surface);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-2);cursor:pointer}.model-chip:hover:not(:disabled){border-color:var(--hair-2)}.keyrow{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:wrap}.keyrow .key-input{flex:1;min-width:14rem}input.wudao-input.key-input{font-family:var(--mono)}input.wudao-input.key-input:focus{border-color:var(--accent)}.test-result{font-size:var(--fs-ui)}.test-result.ok{color:var(--ok)}.test-result.fail{color:var(--danger)}.test-result.fail.network,.test-result.fail.no-endpoint{color:var(--warn)}.prefrow{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.pref-label{color:var(--text-2)}.hint .short{display:none}@media (max-width: 640px){.hint .long{display:none}.hint .short{display:inline}}.settings-tabs{display:flex;flex-direction:column;gap:var(--sp-1)}.settings-tabs .sb-i.on{box-shadow:none;font-weight:var(--fw-strong)}.plugin-tab{display:flex;flex-direction:column;gap:var(--sp-3)}.plugin-tab .market-source-input{flex:1;min-width:14rem;font-size:var(--fs-ui);padding:var(--sp-1) var(--sp-2);border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1)}.plugin-pending{color:var(--text-3);font-size:var(--fs-ui)}.market-list,.plugin-list{display:flex;flex-direction:column;gap:var(--sp-2)}.market-row{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2) var(--sp-2);display:flex;align-items:center;gap:var(--sp-1) var(--sp-2);flex-wrap:wrap}.market-name{font-weight:var(--fw-strong)}.market-source{flex:1;min-width:12rem;color:var(--text-2);font-size:var(--fs-ui);font-family:var(--mono);overflow-wrap:anywhere}.plugin-entry{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2) var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-1)}.plugin-head{display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap}.plugin-name{font-weight:var(--fw-strong);font-family:var(--mono)}.plugin-desc{color:var(--text-2);font-size:var(--fs-ui)}.plugin-detail{color:var(--text-2);font-size:var(--fs-ui);font-family:var(--mono)}.plugin-actions{display:flex;gap:var(--sp-1)}.installed-group{display:flex;flex-direction:column;gap:var(--sp-1)}.installed-group .group-title{color:var(--text-2);font-size:var(--fs-ui);font-weight:var(--fw-strong)}.installed-row{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2) var(--sp-2);display:flex;align-items:center;gap:var(--sp-1) var(--sp-2);flex-wrap:wrap}.installed-row .state.on{color:var(--ok)}.installed-row .state.off{color:var(--warn)}.no-key-banner{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);padding:var(--sp-1) var(--sp-4);color:var(--warn);background:rgb(var(--warn-rgb) / .1);border-bottom:1px solid var(--hair-1);font-size:var(--fs-ui)}.wizard-overlay{position:fixed;inset:0;z-index:var(--z-wizard);display:flex;align-items:center;justify-content:center;background:rgb(var(--bg-rgb) / .86);backdrop-filter:blur(2px)}.wiz{width:min(40rem,calc(100vw - 2rem));max-height:calc(100vh - 2rem);display:flex;flex-direction:column;background:var(--surface);border:0;box-shadow:var(--elev-3);border-radius:var(--radius-lg);overflow:hidden}@keyframes pop{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}.wiz-bar{height:2px;background:var(--accent);transition:width var(--dur-med) var(--ease)}.wiz-head{display:flex;align-items:baseline;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--hair-1)}.wiz-step{font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.wiz-title{font-size:var(--fs-title);font-weight:var(--fw-strong);color:var(--text-1)}.wiz-body{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-4)}.wiz-body h2{margin:0;font-size:var(--fs-head)}.wiz-body h3{margin:0;font-size:var(--fs-title)}.wizard-sub{margin:0;color:var(--text-2)}.wizard-points{margin:0;padding-left:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-1)}.wizard-cards{display:flex;flex-direction:column;gap:var(--sp-2)}.wizard-empty{color:var(--text-2);font-size:var(--fs-ui);padding:var(--sp-2)}.wizard-provider-card{display:flex;align-items:baseline;gap:var(--sp-2);text-align:left;font:inherit;color:var(--text-1);background:var(--bg);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-2);cursor:pointer}.wizard-provider-card .card-name{font-weight:var(--fw-strong)}.wizard-provider-card .meta{color:var(--text-2);font-size:var(--fs-ui);font-family:var(--mono)}.wizard-provider-card:hover{border-color:var(--hair-2)}.wizard-provider-card.sel{border-color:var(--accent)}.wizard-provider-card.sel .card-name{color:var(--accent)}.wizard-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);border-top:1px solid var(--hair-1);padding:var(--sp-3) var(--sp-4)}.wizard-skip{font:inherit;font-size:var(--fs-ui);color:var(--text-2);background:none;border:none;cursor:pointer;text-decoration:underline;padding:var(--sp-1)}.wizard-skip:hover{color:var(--text-1)}.wizard-badge{font-family:var(--mono);font-size:var(--fs-caption);color:var(--warn);background:rgb(var(--warn-rgb) / .12);border:1px solid rgb(var(--warn-rgb) / .35);border-radius:var(--radius-sm);padding:0 var(--sp-1);white-space:nowrap}.wizard-nav{display:flex;align-items:center;gap:var(--sp-2)}.scrim.wizard-confirm{z-index:calc(var(--z-wizard) + 1)}.ide{flex:1;min-height:0;display:grid;grid-template-columns:var(--tree-w, 220px) var(--mid-w, 1fr) var(--chat-w, 360px);justify-content:space-between;position:relative;transition:grid-template-columns var(--dur-med) var(--ease)}.ide-cell{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.ide-cell.ide-right{border-left:1px solid var(--hair-1)}.ide-cell.ide-right>.chat{flex:1;min-height:0}.ide-toggle{position:absolute;top:10px;width:16px;height:16px;z-index:var(--z-toggle);display:flex;align-items:center;justify-content:center;border:1px solid var(--hair-2);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-3);cursor:pointer;padding:0;font-size:var(--fs-caption);line-height:1}.ide-toggle:hover{background:var(--surface-2);color:var(--text-1)}.ide-toggle[data-side=left]{left:max(calc(var(--tree-w, 240px) - 8px),0px)}.ide-toggle[data-side=right]{right:max(calc(var(--chat-w, 400px) - 8px),0px)}.ide-toggle[data-side=center]{left:max(calc(var(--tree-w, 240px) + 12px),12px)}.ide-drag{position:absolute;top:0;bottom:0;width:4px;z-index:var(--z-float);cursor:col-resize}.ide-drag[data-side=left]{left:max(calc(var(--tree-w, 240px) - 2px),0px)}.ide-drag[data-side=right]{right:max(calc(var(--chat-w, 400px) - 2px),0px)}.ide-drag:hover{background:var(--hover)}.buddy{flex:1;min-height:0;display:grid;grid-template-columns:var(--buddy-w, 260px) 1fr;position:relative;transition:grid-template-columns var(--dur-med) var(--ease)}.buddy-cell{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.buddy-cell.buddy-left>.sb{flex:1 1 auto;min-height:0}.buddy-cell.buddy-main>.chat{flex:1;min-height:0}.buddy-cell.buddy-main{position:relative}.buddy-toggle{left:max(calc(var(--buddy-w, 260px) - 8px),0px)}.sb{width:100%;display:flex;flex-direction:column;background:var(--bg);border-right:1px solid var(--hair-1)}.sb-new{display:flex;align-items:center;gap:var(--sp-1);height:28px;margin:var(--sp-3) var(--sp-2) 0;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-2);font-family:inherit;font-size:var(--fs-ui);cursor:pointer}.sb-new:hover{border-color:var(--hair-2);color:var(--text-1);background:var(--surface-2)}.sb-search{display:flex;align-items:center;gap:var(--sp-1);height:26px;margin:var(--sp-1) var(--sp-2) 0;padding:0 var(--sp-2);border:1px solid transparent;border-radius:var(--radius-sm);color:var(--text-3);font-size:calc(var(--fs-ui) - .5px);cursor:pointer}.sb-search:hover{background:var(--surface);border-color:var(--hair-1)}.sb-list{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;padding:var(--sp-1) var(--sp-2) var(--sp-2);gap:calc(var(--sp-1) / 2)}.sb-g{font-size:var(--fs-caption);font-family:var(--mono);letter-spacing:.4px;color:var(--text-3);padding:var(--sp-3) var(--sp-2) var(--sp-1);flex-shrink:0}.buddy .sb-list{scrollbar-width:thin}.buddy .sb-list::-webkit-scrollbar{width:6px}.buddy .sb-list::-webkit-scrollbar-thumb{background:var(--hair-3);border-radius:var(--radius-sm)}.buddy .sb-list::-webkit-scrollbar-track{background:transparent}.buddy .chat{scrollbar-width:thin}.buddy .chat::-webkit-scrollbar{width:6px}.buddy .chat::-webkit-scrollbar-thumb{background:var(--hair-3);border-radius:var(--radius-sm)}.buddy .chat::-webkit-scrollbar-track{background:transparent}.sb-i{display:flex;align-items:center;height:32px;padding:0 var(--sp-2);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-2);font-family:inherit;font-size:var(--fs-ui);text-align:left;white-space:nowrap;overflow:hidden;cursor:pointer;flex-shrink:0}.sb-i:hover{background:var(--surface);color:var(--text-1)}.sb-i.on{background:var(--accent-weak);color:var(--text-1);box-shadow:inset 2px 0 0 var(--accent)}.sb-i .sb-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.sb-i .sb-when{flex:none;color:var(--text-3);font-size:var(--fs-caption)}.sb-i .sb-main{display:flex;align-items:center;flex:1;min-width:0}.sb-i .sb-rename{flex:none;color:var(--text-3);opacity:0;padding:1px var(--sp-1);border:0;background:transparent;font:inherit;cursor:pointer;transition:opacity var(--dur-fast) var(--ease)}.sb-i:hover .sb-rename,.sb-i.on .sb-rename,.sb-i .sb-rename:focus-visible{opacity:1}.sb-i .sb-rename:hover{color:var(--text-1)}.sb-i input.sb-rename-in{flex:1;min-width:0;height:20px;font-family:inherit;font-size:var(--fs-ui);color:var(--text-1);background:var(--bg);border:1px solid var(--hair-2);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.sb-i input.sb-rename-in:focus{outline:none;border-color:var(--accent)}.sb-i .sb-act,.sb-arch-i .sb-act{flex:none;color:var(--text-3);opacity:0;padding:1px var(--sp-1);border:0;background:transparent;font-family:inherit;border-radius:var(--radius-sm);font-size:var(--fs-caption);white-space:nowrap;cursor:pointer;transition:opacity var(--dur-fast) var(--ease)}.sb-i:hover .sb-act,.sb-arch-i:hover .sb-act,.sb-i .sb-act:focus-visible,.sb-arch-i .sb-act:focus-visible{opacity:1}.sb-i .sb-act:hover,.sb-arch-i .sb-act:hover{color:var(--text-1);background:var(--surface-2)}.sb-i .sb-follow{flex:none;color:var(--text-3);opacity:0;padding:1px var(--sp-1);border:0;background:transparent;font-family:inherit;border-radius:var(--radius-sm);font-size:var(--fs-caption);white-space:nowrap;cursor:pointer;transition:opacity var(--dur-fast) var(--ease)}.sb-i:hover .sb-follow,.sb-i.on .sb-follow,.sb-i .sb-follow:focus-visible{opacity:1}.sb-i .sb-follow:hover{color:var(--text-1);background:var(--surface-2)}.sb-arch{flex:none;display:flex;flex-direction:column;margin:0 var(--sp-2);padding:0 0 var(--sp-1);border-top:1px solid var(--hair-1)}.sb-arch-h{display:flex;align-items:center;gap:var(--sp-1);height:24px;padding:0 var(--sp-1);border:0;background:transparent;color:var(--text-3);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;white-space:nowrap;overflow:hidden;cursor:pointer}.sb-arch-h:hover{color:var(--text-1)}.sb-arch-h .sb-arch-caret,.sb-arch-h .sb-arch-t{flex:none}.sb-arch-h .sb-arch-hint{flex:1;min-width:0;text-align:right}.sb-arch-list{display:flex;flex-direction:column;gap:calc(var(--sp-1) / 2);padding:0 var(--sp-1) var(--sp-1);max-height:160px;overflow-y:auto}.sb-arch-i{display:flex;align-items:center;height:28px;padding:0 var(--sp-1);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-family:inherit;font-size:var(--fs-ui);text-align:left;white-space:nowrap;overflow:hidden;cursor:pointer;flex-shrink:0}.sb-arch-i:hover{background:var(--surface);color:var(--text-1)}.sb-arch-i .sb-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.sb-arch-i .sb-when{flex:none;color:var(--text-3);font-size:var(--fs-caption)}.sb-i .sb-unread,.sb-i .sb-await{flex:none;margin-left:var(--sp-1);display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-ink);font-size:var(--fs-caption);font-weight:var(--fw-strong);line-height:1;white-space:nowrap}.sb-i .sb-sched{flex:none;margin-left:var(--sp-1);font-size:var(--fs-caption);line-height:1;color:var(--text-2)}.sb-i .sb-run{flex:none;margin-left:var(--sp-1);display:inline-flex;align-items:center;line-height:1;color:var(--text-2)}.sb-toast{flex:none;margin:var(--sp-1) var(--sp-2);padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);text-align:center}.sb-f{flex:none;display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-1);border-top:1px solid var(--hair-1);padding:var(--sp-1) var(--sp-2);color:var(--text-3)}.sb-f .sb-note{flex:none;color:var(--text-3);font-size:var(--fs-caption)}.sb-f .settings-link{width:26px;height:26px;flex:none;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);padding:0;cursor:pointer}.sb-f .settings-link:hover{background:var(--surface);color:var(--text-1)}.dash{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:var(--sp-4);gap:var(--sp-3)}.dash-head{display:flex;align-items:center;gap:var(--sp-2);flex:none}.dash-head h2{margin:0;font-size:var(--fs-title);font-weight:var(--fw-strong)}.dash-head .spacer{flex:1}.dash-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--sp-2);flex:none}.dash-kpi{border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}.dash-kpi .k{color:var(--text-2);font-size:var(--fs-caption)}.dash-kpi .v{font-size:var(--fs-title);font-weight:var(--fw-strong);font-variant-numeric:tabular-nums}.dash-kpi .s{color:var(--text-2);font-size:var(--fs-caption);font-variant-numeric:tabular-nums}.dash-chart{border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);flex:none;display:flex;flex-direction:column;gap:var(--sp-1)}.dash-chart svg{width:100%;height:44px;display:block}.dash-chart .k{color:var(--text-2);font-size:var(--fs-caption)}.dash-cols{display:grid;grid-template-columns:minmax(260px,5fr) minmax(300px,7fr);gap:var(--sp-3);min-height:0;flex:1}@media (max-width: 900px){.dash-cols{grid-template-columns:1fr}}.dash-panel{border:1px solid var(--hair-1);border-radius:var(--radius-md);display:flex;flex-direction:column;min-height:0;overflow:hidden}.dash-panel-head{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--hair-1);font-size:var(--fs-ui);color:var(--text-2);flex:none}.dash-panel-head .spacer{flex:1}.dash-scroll{overflow-y:auto;min-height:0}table.dash-tools{width:100%;border-collapse:collapse;font-size:var(--fs-caption);font-variant-numeric:tabular-nums}table.dash-tools th,table.dash-tools td{text-align:right;padding-block:var(--sp-1);padding-inline:var(--sp-3);border-bottom:1px solid var(--hair-1);white-space:nowrap}table.dash-tools th:first-child,table.dash-tools td:first-child{text-align:left}table.dash-tools th{color:var(--text-2);position:sticky;top:0;background:var(--bg-1)}.dash-cat-chips{display:flex;gap:var(--sp-1)}.dash-cat-chips button{border:1px solid var(--hair-1);background:none;color:var(--text-2);border-radius:var(--radius-sm);padding-block:var(--sp-1);padding-inline:var(--sp-2);font-size:var(--fs-caption);cursor:pointer}.dash-cat-chips button.on{color:var(--text-1);border-color:var(--acc, currentColor)}.dash-stream{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--fs-caption);line-height:1.7;padding:var(--sp-1) 0}.dash-row{display:flex;gap:var(--sp-2);padding:0 var(--sp-3);white-space:nowrap}.dash-row .t{color:var(--text-2);flex:none}.dash-row .c{flex:none;width:52px}.dash-row .n{color:var(--text-1);flex:none}.dash-row .d{color:var(--text-2);overflow:hidden;text-overflow:ellipsis}.dash-empty{color:var(--text-2);padding:var(--sp-3);font-size:var(--fs-caption)}.dash-banner{display:flex;align-items:center;gap:var(--sp-2);border:1px solid var(--hair-1);border-left:2px solid var(--warn, currentColor);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-caption);color:var(--text-2);flex:none}.dash-banner button{border:1px solid var(--hair-1);background:none;color:var(--text-1);border-radius:var(--radius-sm);padding-block:var(--sp-1);padding-inline:var(--sp-2);cursor:pointer}.dash-anatomy{grid-template-columns:minmax(300px,1fr) minmax(300px,1fr)}.dash-prompt{border-bottom:1px solid var(--hair-1)}.dash-prompt summary{cursor:pointer;padding:var(--sp-2) var(--sp-3);color:var(--text-2);font-size:var(--fs-caption);user-select:none}.dash-prompt pre{margin:0;padding:0 var(--sp-3) var(--sp-2);white-space:pre-wrap;word-break:break-word;font-size:var(--fs-caption);line-height:1.6;max-height:300px;overflow-y:auto}.dash-msg{border-bottom:1px solid var(--hair-1);padding:var(--sp-1) 0}.dash-msg-head{display:flex;gap:var(--sp-2);align-items:center;padding:0 var(--sp-3)}.dash-msg-head .role{font-size:var(--fs-caption);color:var(--text-2);font-weight:var(--fw-strong)}.dash-msg-head .err{font-size:var(--fs-caption);color:var(--danger)}.dash-detail{margin-block:var(--sp-1);margin-inline:0 var(--sp-3)}.dash-detail summary{cursor:pointer;font-size:var(--fs-caption);color:var(--text-2);user-select:none;padding:1px 0}.dash-detail pre{margin-block:var(--sp-1) var(--sp-1);white-space:pre-wrap;word-break:break-word;font-size:var(--fs-caption);line-height:1.6;max-height:260px;overflow-y:auto;background:color-mix(in srgb,var(--hair-1) 30%,transparent);padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm)}.dash-row .dash-detail{flex:1;min-width:0}.filetree{height:100%;min-width:0;display:flex;flex-direction:column;background:var(--bg);border-right:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.filetree .tree-top{flex:none;display:flex;align-items:center;gap:var(--sp-1);padding:var(--sp-1) var(--sp-1) var(--sp-1) var(--sp-2);border-bottom:1px solid var(--hair-1);position:relative}.filetree .ws-switcher{flex:1;min-width:0;display:flex;align-items:center;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-2);font:inherit;text-align:left;padding:1px 4px;cursor:pointer}.filetree .ws-switcher:hover{background:var(--surface);color:var(--text-1)}.filetree .tree-root{flex:1;min-width:0;color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ws-backdrop{position:fixed;inset:0;z-index:calc(var(--z-ws-menu) - 1)}.ws-menu{position:absolute;top:100%;left:0;right:0;z-index:var(--z-ws-menu);margin-top:var(--sp-1);display:flex;flex-direction:column;max-height:220px;overflow-y:auto;background:var(--surface);border:0;border-radius:var(--radius-lg);padding:var(--sp-1);box-shadow:var(--elev-2);animation:pop var(--dur-fast) var(--ease)}.ws-item{display:block;width:100%;flex:none;border:0;background:transparent;color:var(--text-2);font:inherit;text-align:left;padding:var(--sp-1) var(--sp-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.ws-item:hover{background:var(--surface-2);color:var(--text-1)}.ws-open-other{border-top:1px solid var(--hair-1);border-radius:0 0 var(--radius-lg) var(--radius-lg);color:var(--text-3)}.ws-loading{flex:none;padding:var(--sp-1) var(--sp-2);color:var(--text-3)}.composer-tools{position:relative}.composer-tools .ws-menu{inset:auto auto 100% 0;min-width:220px;margin-top:0;margin-bottom:var(--sp-1)}.ctx-backdrop{position:fixed;inset:0;z-index:calc(var(--z-ctx-menu) - 1)}.filetree .tree-toggle,.filetree .tree-refresh{flex:none;width:22px;height:22px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-ui);line-height:1;padding:0;cursor:pointer}.filetree .tree-toggle:hover,.filetree .tree-refresh:hover{background:var(--surface);color:var(--text-1)}.filetree .tree-toggle[aria-pressed=true]{color:var(--accent)}.filetree .tree-body{flex:1;overflow-y:auto;padding:var(--sp-1) 0}.filetree .tree-node{min-width:0}.ft-row{display:flex;align-items:center;gap:var(--sp-1);height:24px;font-size:var(--fs-ui);color:var(--text-2);border-radius:var(--radius-sm);padding-right:var(--sp-2);cursor:pointer}.ft-row:hover{background:var(--surface);color:var(--text-1)}.ft-row.on{background:var(--accent-weak);color:var(--text-1)}.ft-row .ft-indent{width:var(--sp-3);flex:none}.ft-row .caret{flex:none;width:10px;color:var(--text-3);user-select:none}.ft-row .ico{flex:none;font-size:var(--fs-caption)}.ft-row .name{flex:1;min-width:0;color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.filetree .tree-node.file>.ft-row .name{font-weight:var(--fw-regular)}.filetree .tree-node.dir>.ft-row .name{font-weight:var(--fw-strong)}.filetree .tree-node.file.modified>.ft-row{box-shadow:inset 2px 0 0 var(--ok)}.filetree .tree-node.file.modified>.ft-row .name{color:var(--ok)}.filetree .at-btn{flex:none;visibility:hidden;width:16px;height:16px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:0;cursor:pointer}.filetree .ft-row:hover .at-btn,.filetree .at-btn:focus-visible{visibility:visible}.filetree .at-btn:hover{color:var(--accent);background:var(--surface-2)}.filetree .tree-loading,.filetree .tree-empty,.filetree .tree-err{color:var(--text-3);padding:1px 8px}.sb .tree-empty{flex:1;display:grid;place-items:center;text-align:center}.sb-skels{display:flex;flex-direction:column;gap:calc(var(--sp-1) / 2);padding:var(--sp-1) 0}.sb-skeleton{height:32px;border-radius:var(--radius-sm);background:var(--surface);animation:tree-spin-pulse 1s ease-in-out infinite}.sb-skeleton:nth-child(2){width:78%}.sb-skeleton:nth-child(3){width:56%}.sb .tree-err{color:var(--text-3);padding:1px 8px}.sb .tree-err[role=button]{cursor:pointer;width:fit-content;border-radius:var(--radius-sm)}.sb .tree-err[role=button]:hover{color:var(--text-1);background:var(--surface)}.filetree .tree-spin{display:inline-block;width:7px;height:7px;margin-right:var(--sp-2);border-radius:50%;background:var(--text-3);vertical-align:middle;animation:tree-spin-pulse 1s ease-in-out infinite}@keyframes tree-spin-pulse{0%,to{opacity:.25}50%{opacity:1}}.filetree .tree-err[role=button]{cursor:pointer;width:fit-content;border-radius:var(--radius-sm)}.filetree .tree-err[role=button]:hover{color:var(--text-1);background:var(--surface)}.tabbar{flex:none;height:32px;display:flex;align-items:stretch;background:var(--bg);border-bottom:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.tabbar .tab{display:flex;align-items:center;gap:var(--sp-2);min-width:0;max-width:200px;padding:0 var(--sp-2) 0 var(--sp-3);border-right:1px solid var(--hair-1);color:var(--text-2);cursor:pointer;position:relative;user-select:none}.tabbar .tab:hover{background:var(--surface);color:var(--text-1)}.tabbar .tab .tname{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabbar .tab.active{color:var(--text-1);background:var(--bg)}.tabbar .tab:after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--accent);opacity:0;transition:opacity var(--dur-fast) var(--ease)}.tabbar .tab.active:after{opacity:1}.tabbar .tab .tclose{flex:none;visibility:hidden;width:16px;height:16px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-ui);line-height:1;padding:0;cursor:pointer}.tabbar .tab:hover .tclose,.tabbar .tab .tclose:focus-visible{visibility:visible}.tabbar .tab .tclose:hover{color:var(--text-1);background:var(--surface-2)}.tabbar .tab-empty{flex:1;display:flex;align-items:center;justify-content:center;color:var(--text-3)}.tabbar .tabbar-collapse{flex:none;margin-left:auto;width:26px;border:0;border-left:1px solid var(--hair-1);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:0;cursor:pointer}.tabbar .tabbar-collapse:hover{background:var(--surface);color:var(--text-1)}.fileviewer .breadcrumb{flex:none;height:24px;display:flex;align-items:center;gap:var(--sp-1);padding:0 var(--sp-3);border-bottom:1px solid var(--hair-1);background:var(--bg);color:var(--text-2);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.fileviewer .crumb-sep{color:var(--text-3);user-select:none}.fileviewer .crumb{white-space:nowrap;color:var(--text-2)}.fileviewer .crumb[role=button]{cursor:pointer;border-radius:var(--radius-sm);padding:0 var(--sp-1)}.fileviewer .crumb[role=button]:hover{color:var(--text-1);background:var(--surface)}.fileviewer .crumb.current{color:var(--accent)}.fileviewer .md-toggle{margin-left:auto;display:flex;gap:var(--sp-1)}.fileviewer .mdmode{border:1px solid var(--hair-2);border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-2);cursor:pointer}.fileviewer .mdmode:hover{color:var(--text-1);background:var(--surface)}.fileviewer .mdmode[aria-pressed=true]{color:var(--text-1);border-color:var(--hair-2);background:var(--surface-2)}.fileviewer .viewer-md{flex:1;min-height:0;overflow:auto;padding:var(--sp-2) var(--sp-4);font-family:var(--font);font-size:14px}.fileviewer{height:100%;min-width:0;display:flex;flex-direction:column;background:var(--bg);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.ide-cell.ide-center>.fileviewer{flex:1;min-height:0}.fv-head{flex:none;display:flex;align-items:center;gap:var(--sp-2);height:34px;padding-left:var(--sp-3);padding-right:var(--sp-2);border-bottom:1px solid var(--hair-1)}.fv-file{min-width:0;font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fv-close{margin-left:auto;width:26px;height:26px;border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;color:var(--text-3);background:none;border:0;padding:0;cursor:pointer}.fv-close:hover{background:var(--surface);color:var(--text-1)}.fileviewer .viewer-code{flex:1;overflow:auto;padding:var(--sp-1) 0}.fileviewer .viewer-line{display:flex;align-items:flex-start}.fileviewer .viewer-gutter{flex:none;min-width:3ch;text-align:right;color:var(--text-3);padding:0 var(--sp-2) 0 var(--sp-3);user-select:none}.fileviewer .viewer-src{white-space:pre}.fv-selchip{position:fixed;z-index:var(--z-ctx-menu);padding:1px var(--sp-1);border:0;border-radius:var(--radius-sm);font-family:var(--mono);font-size:var(--fs-caption);color:var(--accent-ink);background:var(--accent);box-shadow:var(--elev-1);cursor:pointer}.fileviewer .viewer-empty{flex:1;display:flex;align-items:center;justify-content:center;color:var(--text-3)}.fileviewer .viewer-binary{margin:auto;padding:var(--sp-4) var(--sp-6);border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);color:var(--text-2);text-align:center}.fileviewer .viewer-truncated{flex:none;padding:var(--sp-1) var(--sp-3);border-top:1px solid var(--hair-1);color:var(--warn);background:rgb(var(--warn-rgb) / .08)}.fileviewer .viewer-dirwrap{flex:1;overflow:auto}.fileviewer .viewer-dir{width:100%;border-collapse:collapse;color:var(--text-2)}.fileviewer .viewer-dir th{text-align:left;font-weight:var(--fw-strong);color:var(--text-3);padding:var(--sp-1) var(--sp-3);border-bottom:1px solid var(--hair-1);position:sticky;top:0;background:var(--bg)}.fileviewer .viewer-dir td{padding:var(--sp-1) var(--sp-3);border-bottom:1px solid var(--hair-1)}.fileviewer .viewer-err{margin:var(--sp-6) auto;padding:var(--sp-3) var(--sp-5);color:var(--danger);border:1px solid var(--danger);border-radius:var(--radius-md)}.filetree .tree-filter{flex:none;padding:var(--sp-1) var(--sp-2);border-bottom:1px solid var(--hair-1)}.filetree .tree-filter input{width:100%;box-sizing:border-box;border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--bg);color:var(--text-1);font:inherit;padding:var(--sp-1) var(--sp-2)}.filetree .tree-filter input:focus{border-color:var(--accent);outline:none}.filetree .tree-filter input::placeholder{color:var(--text-3)}.search-scrim{position:fixed;inset:0;z-index:var(--z-palette);background:var(--overlay);display:flex;justify-content:center;align-items:flex-start;padding-top:20vh;padding-left:var(--sp-4);padding-right:var(--sp-4)}.search-pop{width:400px;max-width:100%;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;box-shadow:var(--elev-3);border-radius:var(--radius-lg);display:flex;flex-direction:column;overflow:hidden}.search-pop .search-input{border:0;border-bottom:1px solid var(--hair-1);background:transparent;color:var(--text-1);font-family:var(--mono);font-size:var(--fs-ui);padding:var(--sp-2) var(--sp-3)}.search-pop .search-input::placeholder{color:var(--text-3)}.search-pop .search-results{max-height:320px;overflow-y:auto;padding:var(--sp-1) 0;font-family:var(--mono);font-size:var(--fs-ui)}.search-pop .search-item{padding:var(--sp-1) var(--sp-3);color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.search-pop .search-item:hover{background:var(--surface-2)}.search-pop .search-item.sel{background:var(--accent-weak);color:var(--text-1)}.search-pop .search-item .hit{color:var(--accent);font-weight:var(--fw-strong)}.search-pop .search-empty{padding:var(--sp-2) var(--sp-3);color:var(--text-3)}.search-pop .session-head{padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--hair-1);color:var(--text-3);font-size:var(--fs-ui);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-pop .session-item{display:block;padding:var(--sp-2);font-size:var(--fs-ui);border-radius:var(--radius-md);font-family:var(--font);margin:0 var(--sp-1) calc(var(--sp-1) / 2)}.search-pop .session-item .session-row1{display:flex;justify-content:space-between;gap:var(--sp-2)}.search-pop .session-item .session-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-1);font-weight:var(--fw-strong)}.search-pop .session-item .session-time{color:var(--text-3);flex:none;font-size:var(--fs-caption)}.search-pop .session-item .session-preview{color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--font);line-height:1.45}.search-pop .session-pg{padding:var(--sp-3) var(--sp-3) var(--sp-1);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.search-pop .session-results{max-height:min(420px,60vh)}@media (max-width: 440px){.search-pop .session-item .session-preview{display:none}}.search-pop .session-q{border:0;border-bottom:1px solid var(--hair-1);background:transparent;color:var(--text-1);font-family:var(--font);font-size:var(--fs-ui);padding:var(--sp-2) var(--sp-3);outline:none}.search-pop .session-q:focus{border-bottom-color:var(--accent)}.search-pop .session-q::placeholder{color:var(--text-3)}.search-pop .session-item .session-kind{flex:none;font-size:var(--fs-caption);line-height:1;padding:calc(var(--sp-1) / 2) calc(var(--sp-1));border-radius:var(--radius-sm);background:var(--bubble-user-bg);color:var(--bubble-user-ink);font-weight:var(--fw-strong)}.search-pop .session-item .session-kind.ans{background:var(--surface-2);color:var(--text-1)}.search-pop .session-item .session-hit-mark{color:var(--accent);font-weight:var(--fw-strong)}.search-pop .session-item .session-del{flex:none;border:0;background:transparent;color:var(--text-3);padding:1px var(--sp-1);font-size:var(--fs-caption);line-height:1;border-radius:var(--radius-sm);cursor:pointer;opacity:0;transition:opacity var(--dur-fast) var(--ease)}.search-pop .session-item:hover .session-del,.search-pop .session-item.sel .session-del,.search-pop .session-item .session-del:focus-visible{opacity:1}.search-pop .session-item .session-del:hover{color:var(--danger)}.search-pop .session-item .session-confirm-actions{flex:none;display:flex;gap:var(--sp-1);align-items:center}.search-pop .session-item .session-confirm-actions button{border:1px solid var(--hair-1);background:transparent;color:var(--text-1);font-family:var(--font);font-size:var(--fs-caption);line-height:1;padding:calc(var(--sp-1) / 2) var(--sp-2);border-radius:var(--radius-sm);cursor:pointer}.search-pop .session-item .session-del-ok{border-color:rgb(var(--danger-rgb) / .35);color:var(--danger)}.search-pop .session-item .session-del-ok:hover{background:rgb(var(--danger-rgb) / .1)}.search-pop .session-item .session-del-cancel:hover{background:var(--surface-2)}.ide-cell.ide-right,.simple{position:relative}.jump-bottom{position:absolute;right:18px;bottom:132px;z-index:var(--z-jump);width:36px;height:36px;border:0;border-radius:50%;background:var(--accent);color:var(--accent-ink);font-size:16px;line-height:1;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}.jump-bottom:hover{filter:brightness(1.08)}.send:active:not(:disabled),.jump-bottom:active,.approval .allow:active:not(:disabled),.approval .deny:active:not(:disabled),button.wudao:active:not(:disabled),.icobtn:active,.tb-changes:active{filter:brightness(.88)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}textarea.wudao-input:focus-visible{outline:none;box-shadow:none}.msg-a{animation:msg-ai-fade var(--dur-fast) var(--ease)}@keyframes msg-ai-fade{0%{opacity:.6}to{opacity:1}}@media (pointer: coarse){.ide-toggle,.filetree .at-btn,.tabbar .tab .tclose{width:24px;height:24px}}.provider-toolbar{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-2)}.provider-toolbar .provider-search{flex:1;min-width:12rem}.provider-master{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-3);align-items:start}.provider-master .provider-cards{max-height:30rem;overflow-y:auto;padding-right:var(--sp-1)}.provider-card[aria-current=true]{border-color:var(--accent)}.provider-card button.card-name{background:none;border:none;padding:0;font:inherit;font-weight:var(--fw-strong);color:inherit;text-align:left;cursor:pointer}.provider-card button.card-name:hover:not(:disabled){color:var(--text-1)}.provider-card button.card-name:disabled{cursor:default}.provider-card[data-invalid=true]{opacity:.55}.provider-card .card-id{font-family:var(--mono)}.invalid-reason{color:var(--danger);font-size:var(--fs-ui);overflow-wrap:anywhere}.provider-card[data-draft=true]{border-style:dashed;border-color:var(--hair-2)}.provider-cards .provider-card[data-draft=true]{cursor:default}.provider-card[data-draft=true] .card-head .ctl{margin-left:auto}.dot.draft{background:var(--text-3)}.provider-detail{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-2);position:sticky;top:0}.provider-detail .detail-head{display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap}.provider-detail .detail-head .meta{color:var(--text-2);font-size:var(--fs-ui)}.provider-detail .detail-field{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-ui);color:var(--text-2)}.provider-detail .detail-field .detail-field-label{white-space:nowrap}.provider-detail .detail-field .ctl{flex:1;min-width:8rem}.provider-detail .detail-field .card-endpoint{flex:1}.model-manager{display:flex;flex-direction:column;gap:var(--sp-1)}.model-manager-head{display:flex;align-items:baseline;gap:var(--sp-2);font-size:var(--fs-ui);color:var(--text-2)}.model-badge{color:var(--accent);font-size:var(--fs-ui);white-space:nowrap;text-align:center}.model-badge.live{color:var(--text-2)}.detail-actions{display:flex;gap:var(--sp-2);flex-wrap:wrap}.provider-detail .detail-del{color:var(--danger)}.provider-empty{color:var(--text-2);font-size:var(--fs-ui);padding:var(--sp-2)}.modal-card.pvd{max-width:min(46rem,calc(100vw - var(--sp-8)));width:100%}.pvd-head{display:flex;align-items:center;gap:var(--sp-2)}.pvd-head h3{margin:0;flex:1 1 auto;overflow-wrap:anywhere}.pvd-body{overflow-y:auto;min-height:0;display:flex;flex-direction:column}.pvd-body .provider-detail{border:0;background:transparent;position:static;padding:0}.pvd-body .persona-form{border:0;background:transparent;padding:0}.provider-load-error{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}@media (max-width: 640px){.provider-master{grid-template-columns:1fr}.provider-master .provider-cards{max-height:none}.provider-detail{position:static}}.chip .wire-count{margin-left:var(--sp-1);font-size:var(--fs-caption);color:var(--text-1)}.chip .wire-count.zero{color:var(--text-3)}.provider-detail .detail-field .detail-persona-layer{flex:0 0 9.5rem;min-width:9.5rem}.persona-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--sp-1) var(--sp-2);padding:var(--sp-1) var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);color:var(--text-1);font:inherit;font-size:var(--fs-ui);text-align:left;cursor:pointer}.persona-row:hover{border-color:var(--hair-2)}.persona-row[aria-current=true]{border-color:var(--accent);box-shadow:inset 2px 0 0 var(--accent)}.persona-row .persona-name{flex-basis:100%;font-weight:var(--fw-strong)}.persona-row .meta{color:var(--text-2)}.persona-row .persona-id{font-family:var(--mono)}.persona-row .persona-layers{color:var(--text-3)}.persona-row .persona-src{margin-left:auto;border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);font-size:var(--fs-caption);line-height:1.5;color:var(--text-2)}.settings-section>button.ctl.persona-add{align-self:flex-start;border-style:dashed;color:var(--text-2)}.settings-section>button.ctl.persona-add:hover{border-color:var(--hair-2);color:var(--text-1)}.prefrow.persona-default .pref-label{white-space:nowrap}.prefrow.persona-default .persona-pick{min-width:13rem}.prefrow.persona-default .persona-pick-layer{flex:0 0 9.5rem}.persona-form{display:flex;flex-direction:column;gap:var(--sp-2)}.persona-form .prefrow{align-items:center}.persona-form .prefrow .pref-label{min-width:5.5rem;white-space:nowrap}.persona-form textarea.persona-prompt{border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1);font-family:inherit;font-size:var(--fs-ui);line-height:var(--lh-body);padding:var(--sp-1) var(--sp-2);resize:vertical}.persona-form textarea.persona-prompt:focus{border-color:var(--accent)}.persona-form textarea.persona-prompt:disabled{opacity:.5;cursor:default}.persona-wire-tabs{display:flex;gap:calc(var(--sp-1) / 2);flex-wrap:wrap;padding:var(--sp-1);border-radius:var(--radius-md);background:var(--surface-2);width:max-content}.persona-wire-tabs .segctl-opt{font-family:var(--mono)}.persona-layer{display:flex;flex-direction:column;gap:var(--sp-1)}.persona-layer>.pref-label{font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-2);border-bottom:1px solid var(--hair-1);padding-bottom:var(--sp-1)}.persona-form .row.keyrow{display:grid;grid-template-columns:minmax(9rem,14rem) minmax(0,1fr) auto;gap:var(--sp-2);align-items:center}.persona-form .row.keyrow .entry-error{grid-column:1 / -1;font-size:var(--fs-ui)}.persona-form .row.keyrow.error>.ctl{border-color:var(--danger)}.persona-layer>button.ctl{align-self:flex-start;border-style:dashed;color:var(--text-2)}.persona-layer>button.ctl:hover:not(:disabled){border-color:var(--hair-2);color:var(--text-1)}button.ctl.persona-save{border-color:var(--accent);color:var(--accent)}button.ctl.persona-del{border-color:var(--danger);color:var(--danger)}.persona-form>.entry-error{border:1px solid rgb(var(--danger-rgb) / .35);border-radius:var(--radius-sm);padding:var(--sp-1) var(--sp-2);font-size:var(--fs-ui)}.persona-delete-confirm{border:1px solid rgb(var(--danger-rgb) / .35);background:rgb(var(--danger-rgb) / .06);border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-2);font-size:var(--fs-ui)}.persona-delete-confirm ul{margin:var(--sp-1) 0;padding-left:var(--sp-5);color:var(--text-2)}.persona-delete-confirm li{margin:1px 0}.persona-delete-confirm .keyrow{margin-top:var(--sp-1)}select.ctl{appearance:none;-webkit-appearance:none;padding-right:calc(var(--sp-2) + var(--sp-4));background-image:conic-gradient(from 135deg at 50% 30%,var(--text-2) 0 90deg,transparent 90deg);background-repeat:no-repeat;background-position:right var(--sp-2) center;background-size:10px 6px;cursor:pointer}select.ctl:disabled{cursor:default}.provider-detail .detail-field{flex-wrap:wrap}.provider-detail .detail-field .ctl{max-width:100%}.provider-detail .detail-field .detail-persona-layer{flex-shrink:1;min-width:0;max-width:100%}.provider-card:not([data-invalid=true]){cursor:pointer}.provider-card[aria-current=true]{box-shadow:inset 2px 0 0 var(--accent)}button.ctl.card-apply{border-color:var(--accent);color:var(--accent)}.provider-card .key-badge{border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);font-size:var(--fs-caption);line-height:1.5;color:var(--text-2)}.provider-card .key-badge.on{color:var(--ok);border-color:rgb(var(--ok-rgb) / .35)}.provider-card .key-badge.off{color:var(--text-3);border-style:dashed}.provider-detail .detail-field .keyrow{flex:1;min-width:12rem;flex-wrap:wrap}.provider-detail .detail-field .keyrow .ctl{flex:none;min-width:0}.provider-detail .detail-field .keyrow .key-input{flex:1 1 8rem;min-width:0;max-width:100%}.provider-detail{padding:var(--sp-3)}.provider-detail .detail-head{padding-bottom:var(--sp-1);border-bottom:1px solid var(--hair-1)}.provider-detail .detail-field{display:grid;grid-template-columns:6.5rem minmax(0,1fr);flex-wrap:nowrap}.provider-detail .detail-field.pair{grid-template-columns:6.5rem minmax(0,1fr) 9.5rem}.provider-detail .detail-field .ctl,.provider-detail .detail-field .detail-persona-layer,.provider-detail .detail-field .keyrow{min-width:0}.model-manager{gap:var(--sp-2)}.provider-detail .detail-actions{padding-top:var(--sp-1);border-top:1px solid var(--hair-1)}button.ctl.detail-save{border-color:var(--accent);color:var(--accent)}@media (max-width: 720px){.provider-detail .detail-field,.provider-detail .detail-field.pair{grid-template-columns:minmax(0,1fr)}.provider-detail .detail-field .detail-field-label{color:var(--text-3)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.shimmer{animation:none;color:var(--text-2);background:none}.sweep-line:after{content:none}}.provider-card{padding:var(--sp-3);gap:var(--sp-1);cursor:pointer;transition:border-color var(--dur-fast) var(--ease)}.provider-card:hover{border-color:var(--hair-2)}.provider-card[aria-current=true]{border-color:var(--accent);box-shadow:inset 2px 0 0 var(--accent)}.provider-card .card-head{align-items:center}.provider-card .card-name{font-size:var(--fs-ui)}.provider-card .meta.tag-default{color:var(--accent);font-weight:var(--fw-strong)}.provider-card .key-badge{margin-left:auto}.provider-card .card-status{display:flex;align-items:baseline;gap:var(--sp-2)}.provider-card .card-endpoint{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.provider-card .card-actions{display:flex;justify-content:flex-end}.provider-card button.card-apply{padding:1px var(--sp-3);font-size:var(--fs-caption);color:var(--text-2)}.provider-card button.card-apply:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.provider-cards .provider-card[data-draft=true],.provider-card[data-invalid=true]{cursor:default}.provider-detail{padding:var(--sp-3);gap:var(--sp-2)}.provider-detail .detail-head{padding-bottom:var(--sp-2);border-bottom:1px solid var(--hair-1);align-items:center}.provider-detail .detail-head strong{font-size:var(--fs-body)}.provider-detail .detail-group{display:flex;flex-direction:column;gap:var(--sp-2);padding-top:var(--sp-2);border-top:1px solid var(--hair-1)}.provider-detail .detail-group .detail-group-title{font-size:var(--fs-caption);color:var(--text-3);letter-spacing:.08em}.provider-detail .detail-group .detail-field-label{min-width:4.5rem;color:var(--text-2)}.provider-detail .detail-field.pair .detail-field-label{min-width:0}.provider-toolbar .ctl:last-child{border-style:dashed;color:var(--text-2)}.provider-toolbar .ctl:last-child:hover{border-color:var(--hair-2);color:var(--text-1)}.provider-detail .detail-head{justify-content:space-between;gap:var(--sp-2)}.provider-detail .detail-head-id{display:flex;align-items:center;gap:var(--sp-2);min-width:0}.provider-detail .detail-head-id strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.provider-detail .detail-head-tags{display:flex;align-items:center;gap:var(--sp-1);flex:none}.provider-detail .detail-head-tags .meta.mono-id{font-family:var(--mono);font-size:var(--fs-caption);color:var(--text-3)}.provider-detail .detail-head-tags .meta.tag{font-size:var(--fs-caption);color:var(--text-2);border:1px solid var(--hair-2);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.provider-detail .model-row-state{display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-1);min-width:0}.provider-detail .test-result{padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm);background:var(--surface-2);border-left:2px solid var(--text-3)}.provider-detail .test-result.ok{border-left-color:var(--ok)}.provider-detail .test-result.fail{border-left-color:var(--danger)}.provider-detail .test-result.fail.network,.provider-detail .test-result.fail.no-endpoint{border-left-color:var(--warn)}.provider-detail .model-row .model-use{opacity:0;transition:opacity var(--dur-fast) var(--ease)}.provider-detail .model-row:hover .model-use,.provider-detail .model-row:focus-within .model-use,.provider-detail .model-row .model-use:focus-visible{opacity:1}.provider-detail .model-row .model-use{padding:1px var(--sp-2);font-size:var(--fs-caption);color:var(--text-3)}.provider-detail .model-row .model-use:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.provider-detail .detail-unsaved{margin-right:auto;align-self:center;color:var(--warn);font-size:var(--fs-caption)}.provider-detail .detail-actions{justify-content:flex-end}.provider-master{align-items:stretch}.provider-master .provider-cards{max-height:none;overflow-y:visible}.provider-card .card-model-count{color:var(--text-3);font-size:var(--fs-caption)}.provider-detail .detail-read-text{color:var(--text-1);overflow-wrap:anywhere;min-width:0}.provider-detail .detail-field .key-badge{border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);font-size:var(--fs-caption);line-height:1.5;color:var(--text-2)}.provider-detail .detail-field .key-badge.on{color:var(--ok);border-color:rgb(var(--ok-rgb) / .35)}.provider-detail .detail-field .key-badge.off{color:var(--text-3);border-style:dashed}.provider-detail .model-row-name{font-family:var(--mono);color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.provider-detail .model-row-ctx{text-align:right;color:var(--text-2);font-variant-numeric:tabular-nums;font-size:var(--fs-ui)}.provider-detail .model-read-row.live{box-shadow:inset 2px 0 0 var(--accent);background:rgb(var(--accent-rgb) / .06);padding-left:var(--sp-2)}.provider-detail .model-row .model-star{width:1.9rem;padding-inline:0;text-align:center;color:var(--text-3)}.provider-detail .model-row .model-star:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.provider-detail .model-row .model-star{opacity:0;transition:opacity var(--dur-fast) var(--ease)}.provider-detail .model-row:hover .model-star,.provider-detail .model-row:focus-within .model-star,.provider-detail .model-row .model-star:focus-visible,.provider-detail .model-row .model-star:disabled{opacity:1}.provider-detail .model-read-row .model-star:disabled{color:var(--accent);border:none;background:none}.provider-detail .model-manager-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2)}.provider-detail .model-config{font-size:var(--fs-ui);padding:var(--sp-1) var(--sp-3)}.provider-detail .model-read-row{display:grid;grid-template-columns:minmax(0,1fr) 8rem max-content;align-items:center;column-gap:var(--sp-2);padding:var(--sp-1) 0;border-bottom:1px solid var(--hair-1)}.provider-detail .model-empty{padding:var(--sp-2) 0;font-size:var(--fs-ui);color:var(--text-3)}@media (max-width: 720px){.provider-detail .model-read-row{grid-template-columns:minmax(0,1fr) max-content}.provider-detail .model-read-row .model-row-ctx{grid-column:2}.provider-detail .model-read-row .model-row-state{grid-column:1 / -1;justify-content:flex-start}}.modal-card.mcm{max-width:620px;width:min(620px,calc(100vw - var(--sp-8)));gap:var(--sp-2)}.modal-card.changes-panel,.modal-card.computer-panel,.modal-card.schedules-panel{max-width:620px;width:min(620px,calc(100vw - var(--sp-8)))}.mcm-head{display:flex;align-items:center;gap:var(--sp-2)}.mcm-head h3{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mcm-close{flex:none;color:var(--text-3)}.mcm-close:hover:not(:disabled){color:var(--text-1);border-color:var(--hair-2)}.mcm-add{display:grid;grid-template-columns:minmax(0,1fr) 8rem max-content;align-items:center;column-gap:var(--sp-2)}.mcm-add-name{position:relative;display:flex;align-items:center;gap:var(--sp-1);min-width:0}.mcm-add-name input.mcm-name{flex:1;min-width:0}.mcm-drop-toggle{flex:none;padding-inline:var(--sp-1);white-space:nowrap;color:var(--text-2)}.mcm-refresh{flex:none;width:1.9rem;padding-inline:0;text-align:center;color:var(--text-2)}.mcm-drop-toggle:disabled,.mcm-refresh:disabled{color:var(--text-3)}.mcm-drop-toggle:not(:disabled):hover,.mcm-refresh:not(:disabled):hover{color:var(--text-1);border-color:var(--hair-2)}.mcm-drop{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:var(--z-float);max-height:12rem;overflow-y:auto;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;border-radius:var(--radius-lg);box-shadow:var(--elev-2)}.mcm-opt{display:flex;align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-1) var(--sp-2);text-align:left;background:none;border:none;border-radius:0;cursor:pointer;color:var(--text-1)}.mcm-opt:not(:disabled):hover{background:var(--surface-2)}.mcm-opt:disabled{color:var(--text-3);cursor:default}.mcm-opt-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono)}.mcm-opt-ctx{color:var(--text-2);font-variant-numeric:tabular-nums;font-size:var(--fs-caption)}.mcm-opt-tag{color:var(--text-3);font-size:var(--fs-caption);white-space:nowrap}.mcm-drop-empty{padding:var(--sp-2);color:var(--text-3);font-size:var(--fs-ui)}.mcm-pulling{font-size:var(--fs-caption)}.mcm-pull-error{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);font-size:var(--fs-ui)}.mcm-list-head{font-size:var(--fs-caption);color:var(--text-3);letter-spacing:.04em;padding-bottom:var(--sp-1);border-bottom:1px solid var(--hair-1)}.mcm-rows{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) 0}.mcm-row{display:grid;grid-template-columns:minmax(0,1fr) 8rem 1.9rem;align-items:center;column-gap:var(--sp-2)}.mcm-row input.mcm-name{width:100%;min-width:0;font-family:var(--mono)}.mcm-row input.mcm-ctx,.mcm-add input.mcm-ctx{width:100%;min-width:0;text-align:right;color:var(--text-2);font-variant-numeric:tabular-nums}.mcm-del{width:1.9rem;padding-inline:0;text-align:center;color:var(--text-3)}.mcm-row .mcm-del:hover:not(:disabled){color:var(--danger);border-color:var(--danger)}.mcm-empty{padding:var(--sp-3) 0;text-align:center}.mcm-foot{justify-content:flex-end}.recap-banner{margin:var(--sp-3) var(--sp-4) var(--sp-1);padding:var(--sp-3) var(--sp-4);border:1px solid var(--hair-1);border-left:3px solid var(--accent);border-radius:var(--radius-md);background:var(--surface);display:flex;flex-direction:column;gap:var(--sp-2);animation:fade var(--dur-med) var(--ease)}.recap-title{font-size:var(--fs-body);font-weight:var(--fw-strong)}.recap-segment{font-size:var(--fs-body);line-height:var(--lh-body)}.recap-label{color:var(--text-2);margin-right:var(--sp-1)}.recap-stats{font-size:var(--fs-caption);color:var(--text-2)}.recap-close{align-self:flex-end;margin-top:var(--sp-1)}.recovery-banner{margin:var(--sp-1) var(--sp-4);padding:var(--sp-1) var(--sp-3);border:1px solid var(--hair-1);border-left:3px solid var(--accent);border-radius:var(--radius-md);background:var(--surface)}.recovery-title{font-size:var(--fs-caption);color:var(--text-2)}.tb-changes{flex:none;display:inline-flex;align-items:center;height:22px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:transparent;color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer;-webkit-app-region:no-drag;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.tb-changes:hover{background:var(--surface);color:var(--text-1)}.changes-panel .chg-head{flex:none;font-size:var(--fs-ui)}.changes-panel .chg-runs{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-3)}.chg-run{display:flex;flex-direction:column;gap:var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-3)}.chg-run-h{flex:none;color:var(--text-2);font-size:var(--fs-ui);font-weight:var(--fw-strong)}.chg-files{display:flex;flex-direction:column;gap:var(--sp-1)}.chg-file{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2)}.chg-file-wrap{display:flex;align-items:center;gap:var(--sp-1)}.chg-file-wrap>.chg-file{flex:1 1 auto;min-width:0}.chg-revert{flex:none;display:inline-flex;align-items:center;height:18px;padding:0 var(--sp-2);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer;user-select:none}.chg-revert:hover{color:var(--text-1);background:var(--hover)}.chg-revert:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.revert-warn{margin-top:var(--sp-2);padding:var(--sp-2);border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-ui);line-height:1.6}.chg-path{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-1)}.chg-badge{flex:none;display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.chg-badge[data-op=created]{background:rgb(var(--ok-rgb) / .12);color:var(--text-1)}.chg-cmdgroup{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-2);border-radius:var(--radius-md);background:var(--surface-2)}.chg-cmdgroup .chg-file-wrap{padding:0 var(--sp-1)}.chg-cmd-h{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1.4}.chg-cmd-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chg-cmd-badge{flex:none;display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);margin-left:var(--sp-1);border-radius:var(--radius-sm);background:rgb(var(--ok-rgb) / .12);color:var(--text-1);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.chg-cmd-undo{flex:none;display:inline-flex;align-items:center;height:18px;padding:0 var(--sp-2);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer;user-select:none}.chg-cmd-undo:hover{color:var(--text-1);background:var(--hover)}.chg-cmd-undo:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.chg-cmd-undo[aria-disabled=true]{opacity:.5;cursor:not-allowed}.chg-cmd-undo[aria-disabled=true]:hover{color:var(--text-2);background:var(--surface)}.chg-exp{align-self:flex-start;display:inline-flex;align-items:center;gap:var(--sp-1);padding:0;border:0;background:none;font-size:var(--fs-caption);color:var(--text-2);cursor:pointer}.chg-exp:hover{color:var(--text-1)}.chg-detail{margin:0;max-height:220px;overflow-y:auto;background:var(--surface-2);color:var(--text-2);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);font-family:var(--mono);font-size:var(--fs-ui);line-height:var(--lh-ui);white-space:pre-wrap;overflow-wrap:anywhere;text-align:left}.dtx-add{color:var(--ok);background:rgb(var(--ok-rgb) / .1)}.dtx-del{color:var(--danger);background:rgb(var(--danger-rgb) / .1)}.dtx-hunk{color:var(--text-3)}.dtx-file{color:var(--text-2);background:var(--surface);border-radius:var(--radius-sm);padding:0 var(--sp-1);margin:0 calc(var(--sp-1) * -1)}.chg-cnt-plus{color:var(--ok)}.chg-cnt-minus{color:var(--danger)}button.chg-file{border:0;background:none;padding:0;font:inherit;text-align:left;color:inherit;cursor:pointer}button.chg-file:hover .chg-path{text-decoration:underline dotted}.computer-panel .cap-head{flex:none;font-size:var(--fs-ui)}.computer-panel .cap-runs{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-3)}.cap-run{display:flex;flex-direction:column;gap:var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-3)}.cap-run-h{flex:none;color:var(--text-2);font-size:var(--fs-ui);font-weight:var(--fw-strong)}.cap-acts{display:flex;flex-direction:column;gap:var(--sp-1)}.cap-act{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--sp-1);font-size:var(--fs-ui);color:var(--text-1)}.cap-act[data-err=true]{color:var(--danger)}.cap-verb{color:var(--text-2)}.cap-act[data-err=true] .cap-verb{color:var(--danger)}.cap-text{min-width:0;overflow-wrap:anywhere;white-space:pre-wrap}.cap-badge{flex:none;display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.cap-dur{flex:none;color:var(--text-2);font-size:var(--fs-caption)}.cap-preview{flex:1 0 100%;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);font-family:var(--mono);font-size:var(--fs-caption)}.fork-act{flex:none;align-self:center;height:20px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;opacity:0;transition:opacity var(--dur-fast) var(--ease);cursor:pointer}.entry:hover .fork-act,.fork-act:focus-visible{opacity:1}.fork-act:hover{border-color:var(--hair-2);color:var(--text-1)}.fork-badge{flex:none;align-self:center;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);background:rgb(var(--accent-rgb) / .14);color:var(--accent);font-size:var(--fs-caption);line-height:1}.armed-branch{display:flex;align-items:center;gap:var(--sp-2);margin:var(--sp-2) var(--sp-3);padding:var(--sp-2) var(--sp-3);max-width:100%;overflow-wrap:anywhere;flex-wrap:wrap;border:1px solid rgb(var(--accent-rgb) / .45);border-radius:var(--radius-md);background:rgb(var(--accent-rgb) / .07)}.armed-text{flex:1 1 auto;min-width:0;font-size:var(--fs-caption);color:var(--text-1);line-height:1.5}.branch-bar{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) var(--sp-3) 0}.branch-chip{align-self:flex-start;height:20px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer}.branch-chip:hover{border-color:var(--hair-2);color:var(--text-1)}.branch-chip[aria-expanded=true]{border-color:var(--accent);color:var(--accent)}.branch-panel{display:flex;flex-direction:column;border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.branch-row{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--hair-1);font-size:var(--fs-caption)}.branch-row:last-of-type{border-bottom:none}.branch-row.cur{background:rgb(var(--accent-rgb) / .07)}.branch-row .row-n{flex:none;color:var(--text-2);font-family:var(--mono)}.branch-row .row-main{flex:1;color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.branch-row .row-count{flex:none;color:var(--text-2)}.branch-row .row-cur{flex:none;color:var(--accent)}.branch-note{padding:var(--sp-2) var(--sp-3);color:var(--text-2);font-size:var(--fs-caption);border-top:1px solid var(--hair-1)}.branch-note[data-variant=warn]{color:var(--warn)}.branch-note[data-variant=ok]{color:var(--ok)}.memory-review-card{display:flex;flex-direction:column;gap:var(--sp-1);margin:var(--sp-1) var(--sp-3) 0;padding:var(--sp-2) var(--sp-3);border:1px solid rgb(var(--accent-rgb) / .3);border-left:3px solid var(--accent);border-radius:var(--radius-md);background:var(--surface)}.memory-review-head{display:flex;align-items:center;gap:var(--sp-2)}.memory-review-title{flex:1;font-size:var(--fs-caption);color:var(--text-1);font-weight:var(--fw-strong)}.memory-review-card .hint{margin:0}.mem-row{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) 0;font-size:var(--fs-caption)}.mem-badge{flex:none;height:18px;padding:0 var(--sp-2);border:1px solid var(--warn);border-radius:var(--radius-sm);color:var(--warn);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.mem-badge.ok{border-color:var(--ok);color:var(--ok)}.mem-main{flex:1;display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}.mem-kind{color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mem-content{color:var(--text-1);overflow-wrap:anywhere}.mem-acts{flex:none;display:flex;gap:var(--sp-1)}.mem-note{color:var(--text-2);font-size:var(--fs-caption);border-top:1px solid var(--hair-1);padding-top:var(--sp-1)}.mem-note[data-variant=warn]{color:var(--warn)}.mem-note[data-variant=ok]{color:var(--ok)}.mem-empty{color:var(--text-2);font-size:var(--fs-caption);padding:var(--sp-1) 0}.memory-manage .mem-row{padding:var(--sp-2) 0;border-bottom:1px solid var(--hair-1)}.memory-manage .mem-row:last-of-type{border-bottom:none}.mem-edit textarea{border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1);font-family:inherit;font-size:var(--fs-caption);line-height:var(--lh-body);padding:var(--sp-1) var(--sp-2);resize:vertical;min-height:3.2em;width:100%;overflow-wrap:anywhere}.mem-edit textarea:focus{border-color:var(--accent)}.mem-edit textarea:disabled{opacity:.5;cursor:default}.mem-edit .mem-acts{justify-content:flex-end;padding-top:var(--sp-1)}.tb-changes.tb-sched{white-space:nowrap}.schedules-panel .sch-head{flex:none;font-size:var(--fs-ui)}.schedules-panel .sch-rows{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-2)}.sch-row{display:flex;flex-direction:column;gap:var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-3)}.sch-row[data-state=breaker]{border-color:rgb(var(--danger-rgb) / .4)}.sch-main{display:flex;align-items:baseline;gap:var(--sp-2)}.sch-prompt{flex:1 1 auto;min-width:0;overflow-wrap:anywhere;font-size:var(--fs-ui);color:var(--text-1)}.sch-badge{flex:none;font-size:var(--fs-caption);border-radius:var(--radius-sm);padding:1px var(--sp-2);color:var(--text-2);background:var(--surface-2)}.sch-badge[data-state=active]{color:var(--ok);background:rgb(var(--ok-rgb) / .1)}.sch-badge[data-state=breaker]{color:var(--danger);background:rgb(var(--danger-rgb) / .1)}.sch-meta{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:var(--sp-2);row-gap:var(--sp-1);font-size:var(--fs-caption);color:var(--text-2)}.sch-trig{color:var(--text-1)}.sch-last{color:var(--text-3)}.sch-last[data-ok=true]{color:var(--ok)}.sch-row[data-state=breaker] .sch-last{color:var(--danger)}.sch-session{color:var(--accent);background:rgb(var(--accent-rgb) / .08);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.sch-acts{display:flex;align-items:center;gap:var(--sp-1)}.sch-act{font-size:var(--fs-caption);color:var(--text-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:none;padding:1px var(--sp-2);cursor:pointer}.sch-act:hover{background:var(--surface);color:var(--text-1);border-color:var(--hair-2)}.sch-act.sch-del:hover{color:var(--danger);border-color:rgb(var(--danger-rgb) / .4)}.chip.sideqa.on{color:var(--accent-ink);background:rgb(var(--accent-rgb) / .85);border-color:rgb(var(--accent-rgb) / .9)}.sideqa-lane{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-2) 0}.sideqa{border:1px dashed rgb(var(--accent-rgb) / .45);border-radius:var(--radius-md);background:rgb(var(--accent-rgb) / .05);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-caption);line-height:var(--lh-body)}.sideqa-tag{font-weight:var(--fw-strong);color:var(--accent);font-size:var(--fs-caption);letter-spacing:.04em;margin-bottom:var(--sp-1)}.sideqa-q{color:var(--text-2);font-weight:var(--fw-strong);margin-bottom:var(--sp-1)}.sideqa-a{overflow-wrap:anywhere;white-space:pre-wrap}.sideqa-foot{display:flex;align-items:center;gap:var(--sp-2);margin-top:var(--sp-2)}.sideqa-rounds{color:var(--text-3);opacity:.7}.sideqa-promote{height:24px;padding:0 var(--sp-3);border-radius:var(--radius-sm);font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-caption);color:var(--accent);background:rgb(var(--accent-rgb) / .1);border:1px solid rgb(var(--accent-rgb) / .35);cursor:pointer}.sideqa-promote:hover{background:rgb(var(--accent-rgb) / .18)}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{j as n,H as V,R as me,g as Ee,p as ge,r,b as ie,c as le,J as we,K as Te,L as Se,M as je,f as Z,t as U,N as Ne,u as _e,i as re,q as Pe,w as Ae,O as De,Q as Ce,h as M,S as Re,T as Le,U as Oe,V as Ie,C as ae,G as Me,X as Fe,z as Ke,Y as qe,y as Ue,W as Ve,A as He,x as We,Z as Be,n as Xe,_ as Ye,F as $e}from"./tokens-D-f0h-_m.js";const Qe=1500;function ze(){return{display:"idle",busy:!1,doneAt:null}}function Ge(e){return e.pendingPermission!=null?"waiting-user":e.live.busyTools.length>0?"working":e.live.reasoning!==""?"thinking":e.live.answer!==""?"answering":"idle"}function Je(e,t,i){const s=Ge(t);let l,a=e.doneAt;return t.busy||s==="waiting-user"?l=s:e.busy&&!t.busy?(l="done",a=i):e.display==="done"&&e.doneAt!==null&&i-e.doneAt<Qe?l="done":l=s,l!=="done"&&(a=null),{display:l,busy:t.busy,doneAt:a}}function H(e){return function(i){return n.jsx("div",{className:"pet-figure",children:n.jsx("div",{className:"pet-sprite-img",style:{backgroundImage:`url(${e})`}})})}}const Ze=H("/pet/skin-default.png");function et({display:e,skinId:t="default",figure:i=Ze,paused:s=!1,pokeEpoch:l,poked:a,onPointerDown:o}){return n.jsx("div",{className:"pet-root","data-pet-root":"","data-skin":t,"data-pet-state":e,"data-paused":s?"":void 0,title:"wudao pet",onPointerDown:o,children:n.jsx("div",{className:"pet-poke-layer","data-poked":a?"":void 0,children:n.jsx(i,{display:e})},l??0)})}const $=["idle","thinking","working","answering","waiting-user","done","drag"],tt=H(V.sakura),nt=H(V.lake),st=H(V.honey),it={default:{component:H(V.default),states:$},sakura:{component:tt,states:$},lake:{component:nt,states:$},honey:{component:st,states:$}},lt={turns:[]};function G(e){const t=Array.from(e);return t.length<=24?e:`${t.slice(0,24).join("")}…`}function rt(e,t){return{turns:[...e.turns.map(s=>s.live?{...s,live:!1}:s),{q:t,a:"",live:!0}]}}function at(e,t){const i=e.turns.length>0?e.turns[e.turns.length-1]:void 0;if(i===void 0)return t.answerTail===""?e:{turns:[{q:"",a:t.answerTail,live:!0}]};if(i.live){if(t.answerTail!==""){if(i.a===t.answerTail)return e;const s=e.turns.slice();return s[s.length-1]={...i,a:t.answerTail},{turns:s}}if(!t.busy){const s=e.turns.slice();return s[s.length-1]={...i,live:!1},{turns:s}}return e}return t.answerTail!==""?{turns:[...e.turns,{q:"",a:t.answerTail,live:!0}]}:e}function ut(e,t){const i=e.map(o=>({q:o.q,a:o.a,live:!1})),s=[];let l=t.turns.length-1,a=i.length-1;for(;l>=0||a>=0;){const o=l>=0?t.turns[l]:void 0,d=a>=0?i[a]:void 0;o!==void 0&&d!==void 0&&o.q!==""&&o.q===G(d.q)?(s.push({q:d.q,a:d.a,live:o.live}),l-=1,a-=1):o!==void 0?(s.push(o),l-=1):(s.push(d),a-=1)}return{turns:s.reverse()}}function q({s:e}){return n.jsx(n.Fragment,{children:ge(e).map((t,i)=>t.code?n.jsx("code",{className:"pet-md-code",children:t.text},i):t.bold?n.jsx("span",{className:"pet-md-bold",children:t.text},i):n.jsx("span",{children:t.text},i))})}function ot(e){return e.map((t,i)=>t.kind==="code"?n.jsx("div",{className:"pet-md-pre",children:n.jsx("code",{children:t.lines.join(`
|
|
2
|
-
`)})},i):t.kind==="heading"?n.jsx("div",{className:"pet-md-heading","data-level":t.level,children:n.jsx(q,{s:t.text})},i):t.kind==="list"?n.jsx("div",{className:"pet-md-list",children:t.items.map((s,l)=>n.jsxs("div",{children:["• ",n.jsx(q,{s})]},l))},i):t.kind==="quote"?n.jsx("div",{className:"pet-md-quote",children:t.lines.map((s,l)=>n.jsx("div",{children:`| ${s}`},l))},i):t.kind==="table"?n.jsxs("table",{className:"pet-md-table",children:[n.jsx("thead",{children:n.jsx("tr",{children:t.header.map((s,l)=>n.jsx("th",{children:n.jsx(q,{s})},l))})}),n.jsx("tbody",{children:t.rows.map((s,l)=>n.jsx("tr",{children:s.map((a,o)=>n.jsx("td",{children:n.jsx(q,{s:a})},o))},l))})]},i):n.jsx("div",{className:"pet-md-para",children:t.lines.map((s,l)=>n.jsxs(me.Fragment,{children:[l>0?`
|
|
3
|
-
`:null,n.jsx(q,{s})]},l))},i))}const be=me.memo(function({source:t}){return n.jsx("div",{className:"pet-md",children:ot(Ee(t))})}),ue=2500,ct=250,dt=3e4,ft=600,oe=100;function mt(e,t){const i=e.ask??null;if(i!==null)return{kind:"ask",ask:i};const s=e.selection??null;if(s!==null)return{kind:"selection",selection:s};if(e.inputOpen)return{kind:"input"};if(e.waitingUser)return{kind:"hint"};const l=e.busyNarration??null;return l!==null&&l!==""?{kind:"narration",text:l}:e.livePending?{kind:"thinking"}:e.answerTail!==""&&e.answerTail!==t?{kind:"stream",text:e.answerTail}:e.delivery!==null?{kind:"delivery",delivery:e.delivery}:null}function bt(e,t){return e!==null&&e.kind==="stream"&&e.text===t}function vt(e,t,i,s){const l=o=>o!==null&&!bt(o,s)?o:null,a=l(t)??l(i);return a===null?"compact":a.kind==="stream"||a.kind==="thinking"||a.kind==="input"||e==="answer"?"answer":"bubble"}function ht(e){const[t,i]=r.useState(!0),[s,l]=r.useState(!0),a=e.turn.q.length>oe,o=!e.turn.live&&e.turn.a.length>oe;return n.jsxs("div",{className:"pet-turn",children:[e.turn.q!==""&&n.jsx("div",{className:"pet-msg pet-msg-user",children:n.jsxs("div",{className:"pet-bubble-q","data-folded":a&&t?"":void 0,children:[n.jsx("div",{className:"pet-bubble-body",children:e.turn.q}),a&&n.jsx("button",{type:"button",className:"pet-bubble-fold","data-bubble-fold":"",onClick:()=>i(d=>!d),children:t?"查看全文":"收起"})]})}),(e.thinking||e.turn.a!=="")&&n.jsxs("div",{className:"pet-row pet-row-pet","data-pet-msg":"",children:[n.jsx("div",{className:"pet-avatar","data-pet-avatar":"",style:{backgroundImage:`url(${e.avatarSheet})`}}),e.thinking&&n.jsx("div",{className:"pet-bubble-thinking",children:"思考中…"}),!e.thinking&&e.turn.a!==""&&n.jsxs("div",{className:"pet-bubble-a","data-folded":o&&s?"":void 0,children:[n.jsx("div",{className:"pet-bubble-body",children:n.jsx(be,{source:e.turn.a})}),o&&n.jsx("button",{type:"button",className:"pet-bubble-fold","data-bubble-fold":"",onClick:()=>l(d=>!d),children:s?"查看全文":"收起"})]})]})]})}function yt(e){const{inputOpen:t,answerTail:i,waitingUser:s,onInputClose:l,delivery:a}=e,[o,d]=r.useState(""),[S,j]=r.useState(""),[C,D]=r.useState(!1),b=mt(e,S);r.useEffect(()=>{i===""&&(j(""),D(!1))},[i]);const y=r.useRef(null);b===null||(b.kind==="input"||b.kind==="delivery"||b.kind==="ask"||b.kind==="selection"?y.current=null:y.current=b);const[N,x]=r.useState(b!==null),[T,k]=r.useState(!1),E=b!==null;r.useEffect(()=>{if(E){x(!0),k(!1);return}if(!N)return;const u=y.current?.kind;if(u===void 0||u==="stream")return;const w=setTimeout(()=>k(!0),ue),se=setTimeout(()=>x(!1),ue+ct);return()=>{clearTimeout(w),clearTimeout(se)}},[E,N]);const _=r.useRef("compact"),F=r.useRef(e.onLayoutMode);F.current=e.onLayoutMode;const h=r.useRef(e.onDeliveryClose);h.current=e.onDeliveryClose,r.useEffect(()=>{if(a===null)return;const u=setTimeout(()=>h.current(),dt);return()=>clearTimeout(u)},[a]),r.useEffect(()=>{if(a===null||t||(e.ask??null)!==null||(e.selection??null)!==null)return;const u=w=>{w.key==="Escape"&&(w.preventDefault(),h.current())};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[a,t,e.ask,e.selection]);const f=r.useRef(e.onSelectionClose);f.current=e.onSelectionClose,r.useEffect(()=>{if((e.selection??null)===null||(e.ask??null)!==null)return;const u=w=>{w.key==="Escape"&&(w.preventDefault(),f.current())};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[e.selection,e.ask]);const[v,A]=r.useState(!1),g=e.ask??null,K=g===null?"":`${g.toolName} ${g.summary} ${String(g.canAlways)}`;r.useEffect(()=>{A(!1)},[K]);const R=(u,w)=>{A(!0),U(_e,w===void 0?{allow:u}:{allow:u,scope:w})},P=e.selection??null,W=P===null?"":`${P.granted}|${P.truncated}|${P.text}`,[L,O]=r.useState(!1),[I,B]=r.useState(""),m=r.useRef({composing:!1,endedAt:0}),p=r.useRef({composing:!1,endedAt:0});r.useEffect(()=>{O(!1),B("")},[W]);const X=u=>{L||(O(!0),U(Ae,{text:u}),e.onPetTurn(G(u)),f.current())},ee=()=>{if(P===null)return;const u=I.trim();X(u===""?De(P.text):Ce(P.text,u))},ve=u=>{re(u.nativeEvent,p.current,Date.now())||u.key==="Enter"&&(u.preventDefault(),ee())},te=()=>{const u=o.trim();u!==""&&(d(""),e.onPetTurn(G(u)),U(Pe,{text:u}))},he=u=>{if(!re(u.nativeEvent,m.current,Date.now())){if(u.key==="Escape"){u.preventDefault(),l();return}u.key==="Enter"&&(u.preventDefault(),te())}},c=b??y.current,ye=()=>{c===null||c.kind!=="stream"||(j(c.text),y.current=null)},Y=vt(_.current,b,N?c:null,S);r.useEffect(()=>{Y!==_.current&&(_.current=Y,F.current?.(Y))},[Y]);const ne=r.useRef(null);r.useEffect(()=>{const u=ne.current;u!==null&&(u.scrollTop=u.scrollHeight)},[e.transcript,e.answerTail,e.livePending]);const ke=V[e.skinId??"default"];if(!N||c===null)return null;const xe=()=>{h.current(),U(Ne,null)};return n.jsxs("div",{className:"pet-bubble","data-bubble":"","data-bubble-state":c.kind,"data-bubble-fading":T&&b===null?"":void 0,"data-bubble-held":b===null&&c.kind==="stream"?"":void 0,onClick:c.kind==="delivery"?xe:void 0,style:c.kind==="delivery"?{cursor:"pointer"}:void 0,children:[c.kind==="ask"&&n.jsxs("div",{className:"pet-bubble-ask","data-ask-card":"",children:[n.jsx("div",{className:"pet-bubble-ask-tool","data-ask-tool":"",children:c.ask.toolName}),n.jsx("div",{className:"pet-bubble-ask-summary","data-ask-summary":"",children:c.ask.summary}),n.jsxs("div",{className:"pet-bubble-ask-actions","data-ask-actions":"",children:[n.jsx("button",{type:"button","data-ask-allow":"",disabled:v,onClick:()=>R(!0),children:"允许"}),c.ask.canAlways&&n.jsx("button",{type:"button","data-ask-always":"",disabled:v,onClick:()=>R(!0,"always"),children:"总是允许"}),n.jsx("button",{type:"button","data-ask-deny":"",disabled:v,onClick:()=>R(!1),children:"拒绝"})]})]}),c.kind==="input"&&n.jsxs("div",{className:"pet-bubble-chat",children:[n.jsx("div",{className:"pet-bubble-transcript","data-bubble-transcript":"",ref:ne,children:e.transcript.map((u,w)=>{const pe=w===e.transcript.length-1&&u.live&&u.a==="";return n.jsx(ht,{turn:u,thinking:pe,avatarSheet:ke},w)})}),n.jsxs("div",{className:"pet-bubble-input",children:[n.jsx("textarea",{"data-bubble-input":"",placeholder:"问点什么…",rows:1,autoFocus:!0,value:o,onChange:u=>d(u.target.value),onCompositionStart:()=>{m.current=le(m.current)},onCompositionEnd:()=>{m.current=ie(m.current,Date.now())},onKeyDown:he}),n.jsxs("div",{className:"pet-bubble-input-row","data-bubble-actions":"",children:[n.jsx("button",{type:"button","data-bubble-cancel":"",className:"pet-bubble-cancel",onClick:l,children:"取消"}),n.jsx("button",{type:"button","data-bubble-send":"",className:"pet-bubble-send",onClick:te,children:"发送"})]})]})]}),c.kind==="selection"&&c.selection.granted&&c.selection.text!==""&&n.jsxs("div",{className:"pet-bubble-selection","data-selection-card":"",children:[n.jsx("div",{className:"pet-bubble-selection-text","data-selection-text":"",children:c.selection.text}),n.jsxs("div",{className:"pet-bubble-selection-actions","data-selection-actions":"",children:[n.jsx("button",{type:"button","data-selection-translate":"",disabled:L,onClick:()=>X(we(c.selection.text)),children:"翻译"}),n.jsx("button",{type:"button","data-selection-explain":"",disabled:L,onClick:()=>X(Te(c.selection.text)),children:"解释"}),Se(c.selection.text)&&n.jsx("button",{type:"button","data-selection-url":"",disabled:L,onClick:()=>X(je(c.selection.text)),children:"读这个网页"})]}),n.jsxs("div",{className:"pet-bubble-selection-row","data-selection-row":"",children:[n.jsx("input",{"data-selection-question":"",placeholder:"想问它什么?",value:I,onChange:u=>B(u.target.value),onCompositionStart:()=>{p.current=le(p.current)},onCompositionEnd:()=>{p.current=ie(p.current,Date.now())},onKeyDown:ve}),n.jsx("button",{type:"button","data-selection-send":"",disabled:L,onClick:ee,children:"发送"}),n.jsx("button",{type:"button","data-selection-cancel":"",onClick:()=>f.current(),children:"取消"})]})]}),c.kind==="selection"&&c.selection.granted&&c.selection.text===""&&n.jsxs("div",{className:"pet-bubble-selection","data-selection-empty":"",children:[n.jsx("div",{className:"pet-bubble-selection-text",children:"没划到文字"}),n.jsx("div",{className:"pet-bubble-selection-actions",children:n.jsx("button",{type:"button","data-selection-cancel":"",onClick:()=>f.current(),children:"取消"})})]}),c.kind==="selection"&&!c.selection.granted&&n.jsxs("div",{className:"pet-bubble-selection","data-selection-guide":"",children:[n.jsx("div",{className:"pet-bubble-selection-text",children:"需要辅助功能权限"}),n.jsxs("div",{className:"pet-bubble-selection-actions",children:[n.jsx("button",{type:"button","data-selection-open-settings":"",onClick:()=>void Z("open_accessibility_settings",{}),children:"去系统设置打开"}),n.jsx("button",{type:"button","data-selection-cancel":"",onClick:()=>f.current(),children:"取消"})]})]}),c.kind==="hint"&&n.jsx("div",{className:"pet-bubble-hint",children:"在等你确认操作"}),c.kind==="narration"&&n.jsx("div",{className:"pet-bubble-hint","data-bubble-narration":"","data-work-kind":e.workKind??void 0,children:c.text}),c.kind==="thinking"&&n.jsx("div",{className:"pet-bubble-hint","data-bubble-thinking":"",children:"思考中…"}),c.kind==="stream"&&n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",className:"pet-bubble-close","data-bubble-close":"","aria-label":"关闭回答",onClick:ye,children:"✕"}),n.jsx("div",{className:"pet-bubble-stream","data-stream-expanded":C?"":void 0,children:n.jsx(be,{source:c.text})}),c.text.length>ft&&n.jsx("button",{type:"button",className:"pet-bubble-fold","data-stream-toggle":"",onClick:()=>D(u=>!u),children:C?"收起":"展开全文"})]}),c.kind==="delivery"&&n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"pet-bubble-hint",children:"定时任务送达"}),n.jsx("div",{className:"pet-bubble-stream","data-delivery-prompt":"",children:c.delivery.promptDigest}),c.delivery.answerDigest!==""&&n.jsx("div",{className:"pet-bubble-stream","data-delivery-answer":"",children:c.delivery.answerDigest})]})]})}const kt=4e3,J=Symbol("bad-ask");function xt(e){if(e==null)return null;if(typeof e!="object")return J;const t=e;return typeof t.toolName!="string"||typeof t.summary!="string"||typeof t.canAlways!="boolean"?J:{toolName:t.toolName,summary:t.summary,canAlways:t.canAlways}}function pt(e){if(typeof e!="object"||e===null)return null;const t=e;if(typeof t.busy!="boolean"||typeof t.pendingPermission!="boolean"||typeof t.reasoningActive!="boolean"||typeof t.answerTail!="string"||typeof t.busyToolCount!="number"||t.busyNarration!==void 0&&t.busyNarration!==null&&typeof t.busyNarration!="string"||t.workKind!==void 0&&t.workKind!==null&&typeof t.workKind!="string")return null;const i=xt(t.ask);return i===J?null:{busy:t.busy,pendingPermission:t.pendingPermission,reasoningActive:t.reasoningActive,answerTail:t.answerTail,busyToolCount:t.busyToolCount,busyNarration:typeof t.busyNarration=="string"?t.busyNarration:null,workKind:typeof t.workKind=="string"?t.workKind:null,ask:i}}function Et(e){r.useEffect(()=>{Z("set_pet_layout",{mode:e})},[e])}function gt(){const[e,t]=r.useState(null);return r.useEffect(()=>{let i=null,s=!1;return M(Le,l=>{const a=Re(l);a!==null&&t(a)}).then(l=>{s?l?.():i=l}),()=>{s=!0,i?.()}},[]),{delivery:e,clearDelivery:()=>t(null)}}function wt(){const[e,t]=r.useState(null);return r.useEffect(()=>{let i=null,s=!1;return M(Ie,l=>{const a=Oe(l);a!==null&&t(a)}).then(l=>{s?l?.():i=l}),()=>{s=!0,i?.()}},[]),{selection:e,clearSelection:()=>t(null)}}function Tt(){const[e,t]=r.useState("default");return r.useEffect(()=>{let i=!1;return Z("get_pet_skin",{}).then(s=>{i||t(ae(s))}),()=>{i=!0}},[]),r.useEffect(()=>{let i=null,s=!1;return M(Me,l=>{if(typeof l!="object"||l===null)return;const a=l.skin;if(typeof a!="string")return;const o=ae(a);o===a&&t(o)}).then(l=>{s?l?.():i=l}),()=>{s=!0,i?.()}},[]),e}function St(e){const[t,i]=r.useState(null);return r.useEffect(()=>{let s=null,l=!1,a=null;return M(Ke,o=>{const d=Fe(o);d!==null&&(i(d.text),e(d.text),a!==null&&clearTimeout(a),a=setTimeout(()=>i(null),kt))}).then(o=>{l?o?.():s=o}),()=>{l=!0,s?.(),a!==null&&clearTimeout(a)}},[]),t}function jt(){const[e,t]=r.useState(null);r.useEffect(()=>{let s=null,l=!1;return M(Ue,a=>{const o=qe(a);o!==null&&t(o.turns)}).then(a=>{l?a?.():s=a}),()=>{l=!0,s?.()}},[]);const i=()=>{U(We,{}).catch(()=>{})};return r.useEffect(()=>{i()},[]),{history:e,requestHistory:i}}function Nt(){r.useEffect(()=>{let e=null,t=!1;return M(Ve,i=>{if(typeof i!="object"||i===null)return;const s=i.theme;s!=="light"&&s!=="dark"||(document.documentElement.dataset.theme=s)}).then(i=>{t?i?.():e=i}),()=>{t=!0,e?.()}},[])}function _t(e){r.useEffect(()=>{let t=null,i=!1;return M(He,s=>{const l=pt(s);l!==null&&e(l)}).then(s=>{i?s?.():t=s}),()=>{i=!0,t?.()}},[])}const Pt=650,At=2200,Dt=600,Q=["呀!","在呢在呢~","嘿嘿,别捏啦","痒痒的!","元气满满!","有什么吩咐?"];function Ct(e,t){const i=Q.length,s=e===null?-1:Q.indexOf(e),l=s>=0?i-1:i,a=t(),o=a>=0&&a<1?a:0,d=Math.min(Math.floor(o*l),l-1),S=s>=0&&d>=s?d+1:d,j=Q[S];return j!==void 0?j:Q[0]}const z=5;function Rt(e,t){if(e===null||t.type==="pointercancel"||e.x===void 0||e.y===void 0||t.clientX===void 0||t.clientY===void 0)return!1;const i=t.clientX-e.x,s=t.clientY-e.y;return i*i+s*s>=z*z}function Lt(e,t){if(e===null||!Number.isFinite(e.x)||!Number.isFinite(e.y)||!Number.isFinite(t.x)||!Number.isFinite(t.y))return!1;const i=t.x-e.x,s=t.y-e.y;return i*i+s*s>=z*z}const ce=5,Ot=600,de=4;function It(e){const[t,i]=r.useState(0),s=r.useRef(document.hidden);return r.useEffect(()=>{const l=()=>{s.current&&!document.hidden&&(i(a=>a+1),e()),s.current=document.hidden};return document.addEventListener("visibilitychange",l),()=>document.removeEventListener("visibilitychange",l)},[]),t}function Mt(e){const{inputOpen:t,setInputOpen:i}=e,[s,l]=r.useState(!1),[a,o]=r.useState(0),[d,S]=r.useState(!1),[j,C]=r.useState(null),[D,b]=r.useState(!1),y=r.useRef(null),N=r.useRef(!1),x=r.useRef(null),T=r.useRef(null),k=r.useRef(null),E=r.useRef(null),_=r.useRef(null);return r.useEffect(()=>{if(!s)return;const h=f=>{x.current!==null&&(clearTimeout(x.current),x.current=null),l(!1);const v=y.current;if(y.current=null,Rt(v,f)&&(b(!0),k.current!==null&&clearTimeout(k.current),k.current=setTimeout(()=>{k.current=null,b(!1)},450)),v===null||f.type==="pointercancel"||v.x===void 0||v.y===void 0||f.clientX===void 0||f.clientY===void 0)return;const A=f.clientX-v.x,g=f.clientY-v.y,K=Date.now()-v.t;A*A+g*g<ce*ce&&K<Ot&&(i(R=>!R),t||Be())};return window.addEventListener("pointerup",h),window.addEventListener("pointercancel",h),()=>{window.removeEventListener("pointerup",h),window.removeEventListener("pointercancel",h)}},[s,t]),r.useEffect(()=>{if(!s){N.current=!1;return}const h=f=>{const v=y.current;if(N.current){f.buttons===0&&(N.current=!1,y.current=null,l(!1),b(!0),k.current!==null&&clearTimeout(k.current),k.current=setTimeout(()=>{k.current=null,b(!1)},450));return}if(v===null||v.x===void 0||v.y===void 0)return;const A=f.clientX-v.x,g=f.clientY-v.y;A*A+g*g>=de*de&&(N.current=!0,Xe())};return window.addEventListener("pointermove",h),()=>{window.removeEventListener("pointermove",h)}},[s]),r.useEffect(()=>()=>{x.current!==null&&clearTimeout(x.current),T.current!==null&&clearTimeout(T.current),k.current!==null&&clearTimeout(k.current),E.current!==null&&clearTimeout(E.current)},[]),{dragging:s,releaseFlash:D,pokeEpoch:a,pokeFlash:d,pokeExpr:j,onPointerDown:h=>{y.current={x:h.clientX,y:h.clientY,sx:window.screenX,sy:window.screenY,t:Date.now()},l(!0),x.current!==null&&clearTimeout(x.current),x.current=setTimeout(()=>{x.current=null,!Lt(y.current!==null?{x:y.current.sx,y:y.current.sy}:null,{x:window.screenX,y:window.screenY})&&(_.current=Ct(_.current,Math.random),o(f=>f+1),S(!0),E.current!==null&&clearTimeout(E.current),E.current=setTimeout(()=>{E.current=null,S(!1)},Dt),C(_.current),T.current!==null&&clearTimeout(T.current),T.current=setTimeout(()=>{T.current=null,C(null)},At))},Pt)}}}function Ft(){const[e,t]=r.useState(ze),[i,s]=r.useState(null),[l,a]=r.useState(!1),[o,d]=r.useState("compact"),[S,j]=r.useState(lt),[C,D]=r.useState(!1);Et(o);const{delivery:b,clearDelivery:y}=gt(),{selection:N,clearSelection:x}=wt(),T=Tt(),k=St(()=>{D(!1),j(m=>{const p=m.turns.length>0?m.turns[m.turns.length-1]:void 0;return p===void 0||!p.live?m:{turns:m.turns.slice(0,-1)}})}),{history:E,requestHistory:_}=jt();Nt(),_t(m=>{s(m),t(p=>Je(p,Ye(m),Date.now())),j(p=>at(p,m)),D(!1)});const F=It(_),{dragging:h,releaseFlash:f,pokeEpoch:v,pokeFlash:A,pokeExpr:g,onPointerDown:K}=Mt({inputOpen:l,setInputOpen:a}),R=it[T].component;r.useEffect(()=>{if(!l)return;const m=()=>a(!1);return window.addEventListener("blur",m),()=>window.removeEventListener("blur",m)},[l]),r.useEffect(()=>{l&&_()},[l]);const P=i?.busy??!1,W=r.useRef(!1);r.useEffect(()=>{W.current&&!P&&_(),W.current=P},[P]);const L=m=>{j(p=>rt(p,m)),D(!0)},O=r.useMemo(()=>E===null?S.turns:ut(E,S).turns,[E,S]),I=O.length>0?O[O.length-1]:void 0,B=C||I!==void 0&&I.live&&I.q!==""&&I.a===""&&(i?.busy??!1)===!0;return n.jsxs(n.Fragment,{children:[n.jsx(yt,{inputOpen:l,answerTail:i?.answerTail??"",waitingUser:e.display==="waiting-user",busyNarration:i?.busyNarration??null,workKind:i?.workKind??null,onInputClose:()=>a(!1),delivery:b,onDeliveryClose:y,ask:i?.ask??null,selection:N,onSelectionClose:x,onLayoutMode:d,transcript:O,onPetTurn:L,livePending:B,skinId:T}),n.jsx(et,{display:h?"drag":f?"release":e.display,skinId:T,figure:R,pokeEpoch:v,poked:A,onPointerDown:K},F),k!==null&&n.jsx("div",{className:"pet-toast","data-pet-toast":"",role:"status",children:k}),g!==null&&n.jsx("div",{className:"pet-expr","data-pet-expr":"",role:"status",children:g})]})}const fe=new URLSearchParams(window.location.search).get("view");fe!==null&&(document.documentElement.dataset.view=fe);try{document.documentElement.dataset.theme=localStorage.getItem("wudao.ui.theme")==="light"?"light":"dark"}catch{document.documentElement.dataset.theme="dark"}const Kt=document.getElementById("pet-root")??document.body;$e.createRoot(Kt).render(n.jsx(r.StrictMode,{children:n.jsx(Ft,{})}));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{--pet-accent: 14 159 110;--pet-accent-ink: 20 21 25}.pet-root{position:fixed;left:50%;bottom:12px;transform:translate(-50%);width:96px;height:96px;user-select:none;-webkit-user-select:none;cursor:grab;touch-action:none}.pet-root[data-pet-state=drag]{cursor:grabbing}.pet-figure{position:relative;width:100%;height:100%}.pet-sprite-img{position:absolute;bottom:0;left:0;display:block;width:96px;aspect-ratio:390 / 238;background-size:200% 100%;background-repeat:no-repeat;background-position:0 0;pointer-events:none;user-select:none;-webkit-user-select:none;will-change:transform,background-position;transform-origin:50% 100%}@keyframes pet-blink{0%,23.5%{background-position:0% 0}24%,25.6%{background-position:100% 0}26.1%,47.5%{background-position:0% 0}48%,49.6%{background-position:100% 0}50.1%,71.5%{background-position:0% 0}72%,73.6%{background-position:100% 0}74.1%,91%{background-position:0% 0}91.5%,93.1%{background-position:100% 0}93.6%,94.4%{background-position:0% 0}94.9%,96.5%{background-position:100% 0}97%,to{background-position:0% 0}}@keyframes pet-idle{0%{transform:scale(1.06,.92)}9%{transform:scale(.95,1.07)}18%{transform:scale(1.06,.92)}27%{transform:scale(.95,1.07)}36%{transform:scale(1.06,.92)}42%,48%{transform:scale(1.06,.92) rotate(-4deg)}54%{transform:scale(1.06,.92)}60%{transform:scale(.95,1.07)}66%{transform:scale(1.06,.92)}71%{transform:translateY(0) scale(1.05,.95)}74%{transform:translateY(-5px) scale(.97,1.05)}77%{transform:translateY(0) scale(1.04,.96)}80%{transform:translateY(-2px) scale(1)}90%{transform:scale(.95,1.07)}to{transform:scale(1.06,.92)}}@keyframes pet-thinking{0%,to{transform:rotate(-3deg)}25%,75%{transform:rotate(1deg)}50%{transform:rotate(3deg)}}@keyframes pet-working{0%,to{transform:translateY(0) scale(1)}35%{transform:translateY(0) scale(1.04,.94)}70%{transform:translateY(-7px) scale(.97,1.03)}}@keyframes pet-answering{0%{transform:scale(1)}30%{transform:scale(1.09,.93)}60%{transform:scale(.96,1.05)}to{transform:scale(1)}}@keyframes pet-waiting{0%,to{transform:rotate(0)}20%{transform:rotate(-6deg)}40%{transform:rotate(6deg)}60%{transform:rotate(-4deg)}80%{transform:rotate(4deg)}}@keyframes pet-done{0%{transform:translateY(-10px) scale(.98,1.02)}40%{transform:translateY(0) scale(1.06,.92)}70%{transform:translateY(-2px) scale(.98,1.02)}to{transform:translateY(0) scale(1)}}@keyframes pet-drag{0%{transform:scale(1)}to{transform:scale(1.05)}}@keyframes pet-squash{0%{transform:scale(1)}35%{transform:scale(1.22,.78)}65%{transform:scale(.92,1.08)}to{transform:scale(1)}}@keyframes pet-release{0%{transform:scale(1.05)}40%{transform:scale(.94,1.06)}70%{transform:scale(1.02,.98)}to{transform:scale(1)}}@keyframes pet-sway{0%,to{transform:rotate(0)}25%{transform:rotate(-2.5deg)}50%{transform:rotate(0)}75%{transform:rotate(2.5deg)}}[data-pet-state=idle] .pet-sprite-img{animation:pet-idle 12s ease-in-out infinite,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=thinking] .pet-sprite-img{animation:pet-thinking 2.2s ease-in-out infinite,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=working] .pet-sprite-img{animation:pet-working .6s ease-in-out infinite,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=answering] .pet-sprite-img{animation:pet-answering 1s ease-in-out infinite,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=waiting-user] .pet-sprite-img{animation:pet-waiting 1.6s ease-in-out infinite,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=done] .pet-sprite-img{animation:pet-done .7s ease-out 1,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=drag] .pet-sprite-img{animation:pet-drag .16s ease-out 1 forwards,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=release] .pet-sprite-img{animation:pet-release .45s cubic-bezier(.2,.8,.3,1.15) 1,pet-blink 9.6s steps(1,end) infinite}[data-pet-state=idle] .pet-figure{animation:pet-sway 4.8s ease-in-out infinite;transform-origin:50% 100%}.pet-poke-layer{width:100%;height:100%}.pet-poke-layer[data-poked]{animation:pet-squash .6s cubic-bezier(.3,1.2,.4,1) 1;transform-origin:50% 100%}[data-paused] *{animation-play-state:paused!important}@media (prefers-reduced-motion: reduce){[data-pet-state=idle] .pet-sprite-img,[data-pet-state=thinking] .pet-sprite-img,[data-pet-state=working] .pet-sprite-img,[data-pet-state=answering] .pet-sprite-img,[data-pet-state=waiting-user] .pet-sprite-img{animation-iteration-count:0,infinite!important}[data-pet-state=done] .pet-sprite-img,[data-pet-state=drag] .pet-sprite-img{animation-iteration-count:1,infinite!important}[data-pet-state=idle] .pet-figure{animation-iteration-count:0!important}.pet-bubble{transition:none!important}.pet-bubble-thinking,.pet-bubble-hint[data-bubble-thinking]{animation:none}}.pet-bubble{position:fixed;left:50%;bottom:79px;transform:translate(-50%);width:min(204px,calc(100vw - 16px));max-height:min(176px,calc(100vh - 96px));box-sizing:border-box;padding:8px 10px;border-radius:var(--radius-lg);background:var(--surface);color:var(--text-1);box-shadow:var(--elev-2);font:12px/1.55 var(--font);overflow:hidden;opacity:1;transition:opacity .25s ease}.pet-bubble[data-bubble-fading]{opacity:0}.pet-bubble[data-bubble-state=stream]{width:min(396px,calc(100vw - 16px));max-height:min(452px,calc(100vh - 104px));padding:12px 14px;font-size:13px;line-height:1.65}.pet-bubble[data-bubble-state=stream] .pet-bubble-stream[data-stream-expanded]{justify-content:flex-start;overflow-y:auto}.pet-bubble[data-bubble-state=stream] .pet-bubble-stream{max-height:396px;padding-right:22px;border-left:3px solid rgb(var(--pet-accent) / .5);padding-left:10px}.pet-bubble-close{position:absolute;top:4px;right:4px;width:18px;height:18px;border:none;border-radius:var(--radius-sm);padding:0;background:transparent;color:var(--text-3);font:inherit;line-height:18px;cursor:pointer}.pet-bubble-close:hover{color:var(--text-1)}.pet-bubble[data-bubble-state=input]{width:min(396px,calc(100vw - 16px));max-height:max(176px,min(452px,calc(100vh - 104px)));padding:12px 14px;font-size:13px;line-height:1.65;display:flex;flex-direction:column}.pet-bubble-chat{display:flex;flex-direction:column;gap:8px;flex:1 1 auto;min-height:0}.pet-bubble-transcript{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:10px;padding-right:4px}.pet-bubble-transcript::-webkit-scrollbar,.pet-bubble-stream[data-stream-expanded]::-webkit-scrollbar{width:8px}.pet-bubble-transcript::-webkit-scrollbar-thumb,.pet-bubble-stream[data-stream-expanded]::-webkit-scrollbar-thumb{background:var(--hair-3);border-radius:50%}.pet-bubble-transcript::-webkit-scrollbar-track,.pet-bubble-stream[data-stream-expanded]::-webkit-scrollbar-track{background:transparent}.pet-turn{display:flex;flex-direction:column;gap:6px}.pet-msg-user{display:flex;flex-direction:column;align-items:flex-end}.pet-row-pet{display:flex;align-items:flex-start;gap:6px}.pet-avatar{flex:0 0 auto;width:34px;height:34px;background-size:200% auto;background-position:0 center;background-repeat:no-repeat}.pet-bubble-q{max-width:85%;box-sizing:border-box;padding:5px 10px;border-radius:var(--radius-md);background:var(--bubble-user-bg);color:var(--bubble-user-ink);display:flex;flex-direction:column;align-items:flex-end;gap:2px}.pet-bubble-body{white-space:pre-wrap;word-break:break-word}.pet-bubble-a{box-sizing:border-box;padding:2px 0;border-radius:var(--radius-md);background:transparent;display:flex;flex-direction:column;align-items:stretch;gap:2px}.pet-row-pet>.pet-bubble-a,.pet-row-pet>.pet-bubble-thinking{flex:0 1 auto;max-width:calc(100% - 40px)}.pet-bubble-a[data-folded] .pet-bubble-body,.pet-bubble-q[data-folded] .pet-bubble-body{max-height:calc(3 * 1.65em);overflow:hidden;-webkit-mask-image:linear-gradient(180deg,var(--shade) calc(100% - 1.4em),transparent);mask-image:linear-gradient(180deg,var(--shade) calc(100% - 1.4em),transparent)}.pet-bubble-fold{align-self:flex-start;border:none;border-radius:var(--radius-sm);padding:3px 10px;background:transparent;color:var(--text-2);font:inherit;font-size:12px;cursor:pointer;margin-top:2px}.pet-bubble-q .pet-bubble-fold{align-self:flex-end}.pet-bubble-fold:hover{color:var(--text-1);background:var(--hover)}@keyframes pet-thinking-breath{0%,to{opacity:1}50%{opacity:.55}}.pet-bubble-thinking{color:var(--warn);animation:pet-thinking-breath 1.2s ease-in-out infinite;padding:2px 0;border-radius:var(--radius-md);background:transparent}.pet-bubble-hint[data-bubble-thinking]{animation:pet-thinking-breath 1.2s ease-in-out infinite}.pet-bubble-input{display:flex;flex-direction:column;gap:6px;border-top:1px solid var(--hair-1);padding-top:8px}.pet-bubble-input textarea{box-sizing:border-box;width:100%;resize:none;border:none;border-radius:var(--radius-sm);padding:6px 8px;background:var(--surface-2);color:var(--text-1);font:inherit;outline:none}.pet-bubble-input textarea:focus{background:var(--surface-2);box-shadow:0 0 0 1.5px rgb(var(--pet-accent))}.pet-bubble-send{align-self:flex-end;border:none;border-radius:var(--radius-md);padding:4px 12px;background:rgb(var(--pet-accent));color:rgb(var(--pet-accent-ink));font:inherit;cursor:pointer}.pet-bubble-input-row{display:flex;justify-content:flex-end;gap:14px}.pet-bubble-cancel{border:none;border-radius:var(--radius-sm);padding:4px 8px;background:transparent;color:var(--text-3);font:inherit;font-size:12px;cursor:pointer}.pet-bubble-cancel:hover{color:var(--text-1)}.pet-bubble-stream{display:flex;flex-direction:column;justify-content:flex-end;max-height:160px;overflow:hidden;white-space:pre-wrap;word-break:break-word}.pet-bubble-hint{color:var(--warn)}.pet-bubble-ask{display:flex;flex-direction:column;gap:6px;box-sizing:border-box;padding:6px 8px;border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-1)}.pet-bubble-ask-tool{align-self:flex-start;padding:0 6px;border-radius:var(--radius-sm);background:var(--bubble-user-bg);color:var(--text-2);font-size:11px;line-height:18px}.pet-bubble-ask-summary{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pet-bubble-ask-actions{display:flex;flex-wrap:wrap;gap:6px}.pet-bubble-ask-actions button{flex:1 1 auto;border:none;border-radius:var(--radius-md);padding:4px 10px;background:rgb(var(--pet-accent));color:rgb(var(--pet-accent-ink));font:inherit;cursor:pointer}.pet-bubble-ask-actions button[data-ask-always]{background:transparent;border:1px solid rgb(var(--pet-accent));color:var(--text-1)}.pet-bubble-ask-actions button[data-ask-deny]{background:transparent;border:1px solid var(--hair-2);color:var(--text-1)}.pet-bubble-ask-actions button[disabled]{opacity:.5;cursor:default}.pet-bubble-selection{display:flex;flex-direction:column;gap:6px;box-sizing:border-box;padding:6px 8px;border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-1)}.pet-bubble-selection-text{max-height:64px;overflow:hidden;white-space:pre-wrap;word-break:break-word;border-radius:var(--radius-sm);padding:4px 6px;background:var(--bg);color:var(--text-2)}.pet-bubble-selection-actions{display:flex;flex-wrap:wrap;gap:6px}.pet-bubble-selection button{border:none;border-radius:var(--radius-md);padding:4px 10px;background:rgb(var(--pet-accent));color:rgb(var(--pet-accent-ink));font:inherit;cursor:pointer}.pet-bubble-selection button[data-selection-explain]{background:transparent;border:1px solid rgb(var(--pet-accent));color:var(--text-1)}.pet-bubble-selection button[data-selection-cancel]{background:transparent;border:1px solid var(--hair-2);color:var(--text-1)}.pet-bubble-selection button[disabled]{opacity:.5;cursor:default}.pet-bubble-selection-row{display:flex;gap:6px;align-items:center}.pet-bubble-selection-row input{flex:1 1 auto;min-width:0;box-sizing:border-box;border:1px solid var(--hair-2);border-radius:var(--radius-md);padding:4px 8px;background:var(--bg);color:var(--text-1);font:inherit;outline:none}.pet-bubble-selection-row input:focus{border-color:rgb(var(--pet-accent))}.pet-md{display:flex;flex-direction:column;gap:6px}.pet-md-heading{font-weight:700}.pet-md-heading[data-level="1"],.pet-md-heading[data-level="2"]{font-size:14px}.pet-md-pre{box-sizing:border-box;max-width:100%;overflow-x:auto;border-radius:var(--radius-md);padding:6px 8px;background:var(--bg);border:1px solid var(--hair-1);font:11px/1.5 var(--mono);white-space:pre}.pet-md-quote{border-left:2px solid var(--hair-1);padding:2px 0 2px 8px;color:var(--text-2)}.pet-md-list{padding-left:2px}.pet-md-table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse}.pet-md-table th,.pet-md-table td{padding:2px 6px;border:1px solid var(--hair-1);text-align:left}.pet-md-table th{background:var(--surface-2);color:var(--text-1)}.pet-md-bold{font-weight:700}.pet-md-code{padding:0 4px;border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--surface-2);font-family:var(--mono);font-size:.92em;color:var(--tok-str)}.pet-toast{position:fixed;top:8px;left:50%;transform:translate(-50%);width:min(204px,calc(100vw - 16px));box-sizing:border-box;padding:8px 10px;border-radius:var(--radius-lg);background:var(--surface);color:var(--text-1);box-shadow:var(--elev-2);font:12px/1.55 var(--font);text-align:center;z-index:var(--z-modal)}.pet-expr{position:fixed;bottom:83px;left:50%;transform:translate(-50%);box-sizing:border-box;padding:4px 10px;border-radius:var(--radius-md);background:var(--surface);color:var(--text-1);box-shadow:var(--elev-2);font:12px/1.45 var(--font);text-align:center;white-space:nowrap;z-index:var(--z-modal)}.pet-expr:after{content:"";position:absolute;bottom:-5px;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:var(--surface);border-bottom:none}
|