pi-web-ui 0.70.0 → 0.71.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/CHANGELOG.md ADDED
@@ -0,0 +1,302 @@
1
+ # Changelog
2
+
3
+ > 面向使用者的版本变更记录:升级前先看这里,再决定是否升级。
4
+ > 版本号规则:npm 上的版本不带 `v` 前缀(如 `0.70.0`),GitHub 的 tag / Release 带 `v` 前缀(如 `v0.70.0`),两者数字部分一一对应。
5
+ > 日期为 npm 发布时间(UTC+8 换算后的日历日)。
6
+
7
+ 格式说明:`Added` 新增功能、`Fixed` 修复、`Changed` 行为/样式变更、`i18n` 多语言相关。
8
+ 每个版本的内容按"实际合入该版本发布的提交"归档(以 `package.json` 的 version 变更提交为准),
9
+ 而不是按提交日期聚类——连续快速发布的 patch 版本以此为准最准确。
10
+
11
+ ## [Unreleased]
12
+
13
+ 暂无未发布内容。
14
+
15
+ ## [0.71.0] — 2026-09-09
16
+
17
+ ### Added
18
+
19
+ - 全屏壁纸与容器背景变量,新增半透明(translucent)/全透明(transparent)主题。
20
+ - 右侧文件列表加"复制名称 / 复制路径"按钮。
21
+
22
+ ### Fixed
23
+
24
+ - CollapsedMessage:`button` 改 `div`,窄消息区 rail 避让仅桌面生效。
25
+
26
+ ### Changed
27
+
28
+ - prettier 收尾:`web/src/i18n.tsx` 上游 drift 格式化(post-#102)。
29
+
30
+ ## [0.70.0] — 2026-09-09
31
+
32
+ ### Added
33
+
34
+ - 全局共享设置:服务端持久化 + 服务端 quick-phrases 种子、quick-seed 标记、动态 marker overlay。
35
+ - 输入框快捷短语改为服务端下发种子;超长 notice 自动换行。
36
+ - 聊天壁纸设置基础(issue #100,含主题 cyberpunk 壁纸变量与 `wallpaper-settings` 单测;全屏壁纸与容器背景变量见 0.71.0)。
37
+ - 终端"运行中"列表只统计存活 PTY(countLive)。
38
+
39
+ ### Fixed
40
+
41
+ - 语言包 slot 语法与换行转义;条件分支预渲染 segments。
42
+
43
+ ### i18n
44
+
45
+ - 葡萄牙语 serverStrings 163 条翻译 + 文案润色。
46
+
47
+ ### Changed
48
+
49
+ - 面板按钮对比度、主题英文名、思考/工具头重排。
50
+
51
+ ## [0.69.0] — 2026-09-08
52
+
53
+ ### Added
54
+
55
+ - 目标模式总开关:关闭时隐藏目标条,阻断向导与审查。
56
+ - `PI_WEB_TABS`(实例提供哪些 tab)与 `PI_WEB_MANAGED`(外部更新的实例)及文档。
57
+ - 首次访问语言跟随浏览器,而非固定默认。
58
+
59
+ ### Fixed
60
+
61
+ - 用户气泡保留单个换行;快捷短语输入后重新聚焦。
62
+ - 子代理归属其所属会话(issue #95)。
63
+ - E2E 明确上报 zh locale;terminal-smoke 与终端工具默认关对齐。
64
+
65
+ ### Changed
66
+
67
+ - pt-BR 文案润色;`index.mjs` 参数化查询(#97)。
68
+
69
+ ## [0.68.2] — 2026-09-08
70
+
71
+ ### Added
72
+
73
+ - 意大利语(it) locale;可下载语言包(核心只带 zh/en)。
74
+ - 标准 pi 引擎接入 `ask_user_question` 问卷。
75
+ - 文本块与思考块复制按钮。
76
+
77
+ ### Fixed
78
+
79
+ - 网页终端里 vim 无法输入(提高 Vite 构建 target)。
80
+ - Android/Termux 死锁:服务端热路径消除全部 fork。
81
+ - pt-BR 字符串润色(markers 描述 + locale 列表报错)。
82
+
83
+ ## [0.68.1] — 2026-09-07
84
+
85
+ ### Added
86
+
87
+ - 运行轨迹时间线插件:`host.onRunEvent` 轨迹事件通道、harness 式轨迹分析 v2、vis-timeline 专业引擎(vendor 自带)、工具按名着色 + 图例、自绘即时悬浮层。
88
+ - 浏览器标题显示项目名。
89
+
90
+ ### Fixed
91
+
92
+ - webmail:secret 存储失败时不再丢密码。
93
+ - 宽屏消息列/输入列按实测滚动条宽精确对齐;重试提示条幅与消息正文列同宽;goalbar 对齐。
94
+
95
+ ## [0.68.0] — 2026-09-07
96
+
97
+ ### Added
98
+
99
+ - 输入框快捷短语:一键发送 + 设置页管理。
100
+
101
+ ## [0.67.0] — 2026-09-07
102
+
103
+ ### Added
104
+
105
+ - 系统提示词模板组合(system prompt template composition)+ `edit_soft` 宽松编辑工具。
106
+
107
+ ## [0.66.0] — 2026-09-07
108
+
109
+ ### Added
110
+
111
+ - Termux(Android)安装指南。
112
+ - Mermaid 图表跟随当前主题。
113
+
114
+ ### Fixed
115
+
116
+ - 同步 pi CLI 探测改为异步后台探测(解决死锁,#79)。
117
+ - Mermaid 主题同步与排版规整。
118
+
119
+ ## [0.65.0] — 2026-09-06
120
+
121
+ ### Added
122
+
123
+ - 插件市场 + fenced-code 渲染插件(mermaid 插件化)。
124
+ - 超宽屏聊天列开关。
125
+
126
+ ## [0.64.8] — 2026-09-06
127
+
128
+ ### Fixed
129
+
130
+ - 后台服务列表过滤桌面软件噪音进程。
131
+
132
+ ## [0.64.7] — 2026-09-06
133
+
134
+ ### Added
135
+
136
+ - 子代理父子链接树、保留与干净 rpc 绑定。
137
+
138
+ ## [0.64.6] — 2026-09-06
139
+
140
+ ### Added
141
+
142
+ - 子代理:错误透出、模型选择、`wait-for-all` 工具。
143
+
144
+ ## [0.64.5] — 2026-09-06
145
+
146
+ ### Fixed
147
+
148
+ - 重启浏览器恢复上次工作目录。
149
+ - 目录消失时列表/会话刷新不再崩溃(issue #74)。
150
+
151
+ ## [0.64.4] — 2026-09-06
152
+
153
+ ### Added
154
+
155
+ - 设置 → 显示:mermaid 图表渲染开关。
156
+
157
+ ### Fixed
158
+
159
+ - 历史/最近项目遵循 `PI_CODING_AGENT_SESSION_DIR`。
160
+
161
+ ## [0.64.3] — 2026-09-05
162
+
163
+ ### Added
164
+
165
+ - `pi-web-ui --help` 中英双语(按 LANG 检测,#72)。
166
+
167
+ ## [0.64.2] — 2026-09-05
168
+
169
+ ### Added
170
+
171
+ - mermaid 代码块渲染为图表。
172
+ - 机器浏览模式:`@root` 机器根 + 绝对 wire 路径跨盘符浏览。
173
+
174
+ ### Fixed
175
+
176
+ - `PI_WEB_TOKEN` 改口令后 cookie 自动刷新/过期,一次 `?token=` 即恢复(issue #71)。
177
+ - mermaid 原生 SVG 尺寸、流式路径渲染、取消渲染清理;宽图表可读宽度保持。
178
+
179
+ ## [0.64.1] — 2026-09-05
180
+
181
+ ### Added
182
+
183
+ - 33 条 notice 的英文 textEn、locale 实时退出横幅与页面标题。
184
+
185
+ ### Fixed
186
+
187
+ - 移动端发送按钮盖过思考强度底弹层(#70)。
188
+ - Windows 下 stale-marker 单测时间戳(pre-1970 mtime 回绕到 2106)。
189
+
190
+ ## [0.64.0] — 2026-09-04
191
+
192
+ ### Added
193
+
194
+ - 全局提示词历史、目录选择器(含新建文件夹)与 UI 抛光。
195
+
196
+ ## [0.63.4] — 2026-09-04
197
+
198
+ - 版本重发(随带 `rename` 内置 marker 一行修正),无功能变更。
199
+
200
+ ## [0.63.3] — 2026-09-04
201
+
202
+ ### Added
203
+
204
+ - PWA 支持与移动端键盘回车换行(#64);会话结束/需输入时桌面通知(#65);PWA 资源与通知图标子路径感知(nginx `/pi/` 部署)。
205
+ - 历史对话与终端标签 UI 重命名(#63);`/name` 命令重命名当前会话(#66)。
206
+ - 行内 marker 系统:todo/svc/notify/rename,无需工具往返。
207
+
208
+ ### Fixed
209
+
210
+ - SCM 提交遵循暂存区,并新增"提交全部"。
211
+
212
+ ## [0.63.2] — 2026-09-03
213
+
214
+ ### Fixed
215
+
216
+ - 主题名跟随界面语言(英文用 nameEn,#61)。
217
+ - terminal-smoke 改轮询 shell banner,消除慢 CI 机器抖动。
218
+
219
+ ## [0.63.1] — 2026-09-03
220
+
221
+ ### Fixed
222
+
223
+ - 左侧栏折叠区块统一样式:折叠后三标题一致、切换不位移、收起按钮垂直居中、标题高亮通栏居中。
224
+
225
+ ## [0.63.0] — 2026-09-03
226
+
227
+ ### Added
228
+
229
+ - 子代理模板:角色系统提示词(append/replace)+ 技能/扩展白名单,AI 可选用、可停用,内置 6 个默认模板。
230
+ - 对话可从运行列表移出(dismiss_conversation)+ pi-subagents 存活检测(WIP)。
231
+
232
+ ### Changed
233
+
234
+ - 全仓库 prettier(Tab/120)与 oxlint 接入 CI(#57/#58)。
235
+ - DSH notice、终端退出横幅、目标状态跟随界面语言(#54 及后续)。
236
+
237
+ ### Fixed
238
+
239
+ - 插件目录搬迁后坏掉的冒烟测试 fixture(#59)。
240
+
241
+ ## [0.62.1] — 2026-09-03
242
+
243
+ ### Fixed
244
+
245
+ - SCM 的 `git add/reset` 路径引号闭合(issue #51)。
246
+
247
+ ## [0.62.0] — 2026-09-02
248
+
249
+ ### Added
250
+
251
+ - 排队消息可删除(✕);底部栏实时缓存命中率与生成速率。
252
+
253
+ ### Fixed
254
+
255
+ - `terminal_create` 带 title 下发,服务端不再用中文默认覆盖。
256
+
257
+ ## [0.61.0] — 2026-09-02
258
+
259
+ ### Added
260
+
261
+ - 内置服务商多密钥管理 + 项目级模型/key 记忆。
262
+
263
+ ## 更早版本
264
+
265
+ 0.62 之前的版本没有逐版归档,以下是发布提交记录中的要点(详见 `git log`):
266
+
267
+ - 0.60.0(2026-09-02):移除 `PORT` 环境变量兼容,仅保留 `PI_WEB_PORT`;修复 `--host` 直启失效。
268
+ - 0.59.0(2026-09-01)、0.58.0(2026-08-30)。
269
+ - 0.56.1 / 0.55.0 / 0.53.0 / 0.51.0(2026-08-30)。
270
+ - 0.50.0 / 0.49.0(2026-08-29):0.49.0 起移除 Electron 桌面壳,只保留纯 Web。
271
+ - 0.48.3 / 0.48.2(2026-08-29):pi SDK 升到 `^0.84.4`。
272
+ - 0.44.1(2026-08-28)。
273
+ - 0.35.1(2026-08-27):编辑重问保留附件(#18)+ 全窗口拖放(#19)。
274
+ - 0.29.0(2026-08-23):全局搜索弹窗(Ctrl+K)+ 消息列表惰性窗口化。
275
+
276
+ [Unreleased]: https://github.com/xing-shuyin/pi-web-ui/compare/v0.71.0...main
277
+ [0.71.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.71.0
278
+ [0.70.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.70.0
279
+ [0.69.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.69.0
280
+ [0.68.2]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.68.2
281
+ [0.68.1]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.68.1
282
+ [0.68.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.68.0
283
+ [0.67.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.67.0
284
+ [0.66.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.66.0
285
+ [0.65.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.65.0
286
+ [0.64.8]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.64.8
287
+ [0.64.7]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.64.7
288
+ [0.64.6]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.64.6
289
+ [0.64.5]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.64.5
290
+ [0.64.4]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.64.4
291
+ [0.64.3]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.64.3
292
+ [0.64.2]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.64.2
293
+ [0.64.1]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.64.1
294
+ [0.64.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.64.0
295
+ [0.63.4]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.63.4
296
+ [0.63.3]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.63.3
297
+ [0.63.2]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.63.2
298
+ [0.63.1]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.63.1
299
+ [0.63.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.63.0
300
+ [0.62.1]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.62.1
301
+ [0.62.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.62.0
302
+ [0.61.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.61.0
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
17
17
  import { join } from "node:path";
18
- import { extractServerStrings, registerServerStrings, unregisterServerStrings, } from "./i18n.js";
18
+ import { extractServerStrings, registerServerStrings, unregisterServerStrings } from "./i18n.js";
19
19
  /** Packs available for download (alphabetical by code). */
20
20
  export const LOCALE_PACKS = [
21
21
  { code: "de", nativeName: "Deutsch" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-web-ui",
3
- "version": "0.70.0",
3
+ "version": "0.71.0",
4
4
  "description": "Web chat interface for the pi coding agent, powered by the pi SDK (@earendil-works/pi-coding-agent) — one-command run, Docker/systemd/launchd deployable",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -21,6 +21,7 @@
21
21
  "deploy/",
22
22
  "extensions/",
23
23
  "plugins/catalog.json",
24
+ "CHANGELOG.md",
24
25
  "README.md",
25
26
  "LICENSE"
26
27
  ],
@@ -85,4 +85,13 @@
85
85
  --bg-image: none;
86
86
  --bg-image-dim: 0.78;
87
87
  --bg-image-blur: 0px;
88
+ --wallpaper-panel-alpha: 62%;
89
+ --topbar-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
90
+ --statusbar-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
91
+ --panel-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
92
+ --card-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
93
+ --chip-bg: color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha, 62%), transparent);
94
+ --msgs-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
95
+ --inputbox-bg: color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha, 62%), transparent);
96
+ --menu-bg: var(--chip-bg);
88
97
  }
package/themes/dazzle.css CHANGED
@@ -85,4 +85,13 @@
85
85
  --bg-image: none;
86
86
  --bg-image-dim: 0.78;
87
87
  --bg-image-blur: 0px;
88
+ --wallpaper-panel-alpha: 62%;
89
+ --topbar-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
90
+ --statusbar-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
91
+ --panel-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
92
+ --card-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
93
+ --chip-bg: color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha, 62%), transparent);
94
+ --msgs-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
95
+ --inputbox-bg: color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha, 62%), transparent);
96
+ --menu-bg: var(--chip-bg);
88
97
  }
@@ -85,6 +85,15 @@
85
85
  --bg-image: none;
86
86
  --bg-image-dim: 0.78;
87
87
  --bg-image-blur: 0px;
88
+ --wallpaper-panel-alpha: 62%;
89
+ --topbar-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
90
+ --statusbar-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
91
+ --panel-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
92
+ --card-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
93
+ --chip-bg: color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha, 62%), transparent);
94
+ --msgs-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
95
+ --inputbox-bg: color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha, 62%), transparent);
96
+ --menu-bg: var(--chip-bg);
88
97
  }
89
98
 
90
99
  /* ---- ambient gradient(镜像 .fp-markdown 预览底色,覆盖整个窗口)---- */
@@ -0,0 +1,78 @@
1
+ /* theme-name: 半透明 */
2
+ /* theme-name-en: Translucent */
3
+ /*
4
+ * 半透明主题——专为聊天背景图(壁纸,issue #100)设计:
5
+ * 调色板与默认暗色一致,但把所有底板统一降到半透明(顶栏/底栏/左右面板、
6
+ * 卡片/控件/代码面、输入框盒子、终端视图都走同一 --wallpaper-panel-alpha),
7
+ * 让壁纸从各处透出、整体融合成一张画。配壁纸用最佳;不配壁纸时这些区域会
8
+ * 透出纯色底(--bg),观感略偏暗沉,属预期。
9
+ *
10
+ * 统一透图率:--wallpaper-panel-alpha: 45%(45% 容器色 + 55% 透图)。
11
+ * 已覆盖的面:顶栏/底栏/左右面板、左右折叠按钮(.panel-collapse-btn /
12
+ * .panel-rail)、工具调用卡及其参数/输出块(.toolcall / .toolcall-args pre /
13
+ * .toolcall-output pre)、bash 块(.bashblock/.termline)、消息代码块
14
+ * (.codeblock pre)、全部消息气泡(.thinking/.toolcall/.bashblock/
15
+ * .skillcard/.attachcard/.queued-bubble/.retry-notice/.msg-collapsed(含 hover))、
16
+ * 快捷短语(.quick-chip)、新对话提示词模板卡(.empty-template)、顶栏
17
+ * chips / 视图切换(.chip/.view-switch)——走 styles.css
18
+ * 的 --card-bg/--chip-bg/--inputbox-bg,随 --wallpaper-panel-alpha 统一联动;
19
+ * 中间的聊天/消息区用 --msgs-bg(同式 45%),气泡立在统一玻璃面上略实
20
+ * 一层形成层次。**下拉弹窗保持实色**:声音/语言/主题/模型选择/思考强度等
21
+ * 点出来的 .dd-menu 背景用 --menu-bg(这里覆盖回 var(--bg-elev2) 实色,
22
+ * 弹窗内容多为密集列表,实色保可读)。终端视图(xterm canvas/容器)读
23
+ * --term-bg,这里同样设半透明。
24
+ * 各变量都可单独覆盖回实色(如 var(--bg-elev))即关闭对应面的透图;
25
+ * --msgs-bg 覆盖回 transparent 可恢复「消息区全透、壁纸从卡片间隙露出」。
26
+ */
27
+ :root {
28
+ color-scheme: dark;
29
+ --bg: #0d0e12;
30
+ --bg-elev: #14161c;
31
+ --bg-elev2: #1a1d26;
32
+ --border: #262a35;
33
+ --border-soft: #1e2230;
34
+ --text: #e6e8ef;
35
+ --text-dim: #9aa1b4;
36
+ --text-faint: #6b7284;
37
+ --accent: #8b5cf6;
38
+ --accent-soft: rgba(139, 92, 246, 0.14);
39
+ --green: #34d399;
40
+ --green-soft: rgba(52, 211, 153, 0.12);
41
+ --red: #f87171;
42
+ --red-soft: rgba(248, 113, 113, 0.12);
43
+ --amber: #fbbf24;
44
+ --term-bg: #0b0d12;
45
+ --term-fg: #e6e8ef;
46
+ --term-cursor: #8b5cf6;
47
+ --term-cursor-accent: #0b0d12;
48
+ --term-selection: rgba(139, 92, 246, 0.35);
49
+ --term-black: #1a1d26;
50
+ --term-red: #f87171;
51
+ --term-green: #34d399;
52
+ --term-yellow: #fbbf24;
53
+ --term-blue: #60a5fa;
54
+ --term-magenta: #c084fc;
55
+ --term-cyan: #22d3ee;
56
+ --term-white: #e6e8ef;
57
+ --term-bright-black: #6b7284;
58
+ --term-bright-red: #f87171;
59
+ --term-bright-green: #34d399;
60
+ --term-bright-yellow: #fbbf24;
61
+ --term-bright-blue: #60a5fa;
62
+ --term-bright-magenta: #c084fc;
63
+ --term-bright-cyan: #22d3ee;
64
+ --term-bright-white: #ffffff;
65
+
66
+ /* ---- 壁纸适配:三大区域(顶栏/底栏/左右面板)背景链式引用此变量,
67
+ 从默认 62% 降到 45% → 容器色更薄、图更透(45% 容器色 + 55% 透图)---- */
68
+ --wallpaper-panel-alpha: 45%;
69
+ /* 下拉弹窗(声音/语言/主题/模型/思考强度):实色底保密集列表可读,
70
+ 覆盖 styles.css 默认的半透 --menu-bg */
71
+ --menu-bg: var(--bg-elev2);
72
+ /* 压暗略放轻(默认 0.78):让图更鲜活,文字靠压暗与半透明底板仍可读 */
73
+ --bg-image-dim: 0.72;
74
+ /* 输入框盒子:styles.css 默认已与控件级底板同式跟随 --wallpaper-panel-alpha,
75
+ 这里不单独覆盖;想比整体厚/薄就设一个独立值 */
76
+ /* 终端视图:xterm canvas + 容器都读 --term-bg,改成半透明随整体透图 */
77
+ --term-bg: color-mix(in srgb, #0b0d12 45%, transparent);
78
+ }
@@ -0,0 +1,78 @@
1
+ /* theme-name: 全透明 */
2
+ /* theme-name-en: Transparent */
3
+ /*
4
+ * 全透明主题——「半透明」的极致版(专配壁纸,issue #100):
5
+ * 调色板与默认暗色一致,但把壁纸机制里所有表面变量的透图率压到 0
6
+ * (--wallpaper-panel-alpha: 0% → --topbar-bg / --statusbar-bg / --panel-bg /
7
+ * --card-bg / --chip-bg / --inputbox-bg / --msgs-bg 全部变成 transparent),
8
+ * 顶栏/底栏/左右面板/消息区/输入框/全部气泡/代码块/终端视图统统直接见壁纸,
9
+ * 界面只剩边框与文字定结构。代价是文字全靠 --bg-image-dim 压暗撑着——
10
+ * 这里压暗加重到 0.85(默认 0.78),亮区壁纸下文字仍可读。
11
+ *
12
+ * 全透后 hover/浮动反馈不能依赖容器色(已是 0%),本文件尾段把这些实色
13
+ * hover 统一改成 25% 半透底(折叠摘要、展开条、折叠键、复制键、滚到底按钮);
14
+ * 强调色 hover(accent-soft)与语义按钮(发送/停止/杀进程)不受影响。
15
+ * 下拉弹窗(声音/语言/主题/模型/思考强度等 .dd-menu)保持实色
16
+ * (--menu-bg: var(--bg-elev2)),密集列表不随界面透图。
17
+ * 配壁纸用最佳;不配壁纸时界面直接透出 --bg 纯色(= 默认暗色,无差别)。
18
+ */
19
+ :root {
20
+ color-scheme: dark;
21
+ --bg: #0d0e12;
22
+ --bg-elev: #14161c;
23
+ --bg-elev2: #1a1d26;
24
+ --border: #262a35;
25
+ --border-soft: #1e2230;
26
+ --text: #e6e8ef;
27
+ --text-dim: #9aa1b4;
28
+ --text-faint: #6b7284;
29
+ --accent: #8b5cf6;
30
+ --accent-soft: rgba(139, 92, 246, 0.14);
31
+ --green: #34d399;
32
+ --green-soft: rgba(52, 211, 153, 0.12);
33
+ --red: #f87171;
34
+ --red-soft: rgba(248, 113, 113, 0.12);
35
+ --amber: #fbbf24;
36
+ --term-bg: transparent;
37
+ --term-fg: #e6e8ef;
38
+ --term-cursor: #8b5cf6;
39
+ --term-cursor-accent: #0b0d12;
40
+ --term-selection: rgba(139, 92, 246, 0.35);
41
+ --term-black: #1a1d26;
42
+ --term-red: #f87171;
43
+ --term-green: #34d399;
44
+ --term-yellow: #fbbf24;
45
+ --term-blue: #60a5fa;
46
+ --term-magenta: #c084fc;
47
+ --term-cyan: #22d3ee;
48
+ --term-white: #e6e8ef;
49
+ --term-bright-black: #6b7284;
50
+ --term-bright-red: #f87171;
51
+ --term-bright-green: #34d399;
52
+ --term-bright-yellow: #fbbf24;
53
+ --term-bright-blue: #60a5fa;
54
+ --term-bright-magenta: #c084fc;
55
+ --term-bright-cyan: #22d3ee;
56
+ --term-bright-white: #ffffff;
57
+
58
+ /* ---- 全透明核心:0% 容器色 = 全部 color-mix 表面(三大区域 / 卡片 /
59
+ 控件 / 输入框 / 消息区)直接变 transparent;终端 --term-bg 上面已设
60
+ transparent。想留一点点玻璃感就把这里提到 10~15%。---- */
61
+ --wallpaper-panel-alpha: 0%;
62
+ /* 下拉弹窗(声音/语言/主题/模型/思考强度):实色底保密集列表可读 */
63
+ --menu-bg: var(--bg-elev2);
64
+ /* 压暗加重:全透后没有容器色兜底,文字只靠压暗保可读 */
65
+ --bg-image-dim: 0.85;
66
+ }
67
+
68
+ /* hover / 浮动静置反馈:0% 容器色下这些实色 hover 必消失,统一给 25% 半透
69
+ 底(仍透图、可辨反馈)。强调色 hover(accent-soft)与语义按钮不受影响;
70
+ 下拉弹窗已在实色菜单内,其 hover 保留 styles.css 默认实色。 */
71
+ .msg-collapsed:hover,
72
+ .panel-rail:hover,
73
+ .chead-toggle:hover,
74
+ .chead-copy:hover,
75
+ .empty-templates-reset:hover,
76
+ .scroll-bottom {
77
+ background: color-mix(in srgb, var(--bg-elev) 25%, transparent);
78
+ }
package/themes/white.css CHANGED
@@ -85,6 +85,15 @@
85
85
  --bg-image: none;
86
86
  --bg-image-dim: 0.78;
87
87
  --bg-image-blur: 0px;
88
+ --wallpaper-panel-alpha: 62%;
89
+ --topbar-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
90
+ --statusbar-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
91
+ --panel-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
92
+ --card-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
93
+ --chip-bg: color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha, 62%), transparent);
94
+ --msgs-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
95
+ --inputbox-bg: color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha, 62%), transparent);
96
+ --menu-bg: var(--chip-bg);
88
97
  }
89
98
 
90
99
  /* ---- syntax highlighting (overrides static github-dark import) ---- */
@@ -1,4 +1,4 @@
1
- import{a as l,j as n}from"./markdown-Cpo0pNcR.js";import{u as P,b as O,T as M,a as W,F as Y,c as z,d as Z,e as H,f as ee,g as ne,h as te,i as se,r as ae}from"./index-CaiIOwy7.js";import{D as re,o as ie}from"./xterm-B96xOxS9.js";import"./react-CtudoG1_.js";function le(t){let c=null;return{clean:t.replace(/\r?\n?\[pi-term-exit:(-?\d+)\]\r?\n?/g,(a,x)=>(c=Number(x),`\r
1
+ import{a as l,j as n}from"./markdown-Cpo0pNcR.js";import{u as P,b as O,T as M,a as W,F as Y,c as z,d as Z,e as H,f as ee,g as ne,h as te,i as se,r as ae}from"./index-Cue012aF.js";import{D as re,o as ie}from"./xterm-B96xOxS9.js";import"./react-CtudoG1_.js";function le(t){let c=null;return{clean:t.replace(/\r?\n?\[pi-term-exit:(-?\d+)\]\r?\n?/g,(a,x)=>(c=Number(x),`\r
2
2
  `)).replace(/\r?\n?\x1b\[90m\[(?:进程已退出,退出码 |Process exited with code )-?\d+\]\x1b\[0m\r?\n?/g,`\r
3
3
  `),exitCode:c}}function ce({conversationId:t,terminalId:c,command:p,cwd:a,title:x,active:u,running:v,exitCode:j,send:h,register:C}){const T=l.useRef(null),y=l.useRef(null),{locale:o}=P(),N=l.useRef(o);N.current=o;const E=p?JSON.stringify(p):"";l.useEffect(()=>{const m=T.current;if(!m)return;const r=new re({theme:O(),fontFamily:'"SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace',fontSize:13,cursorBlink:!0,scrollback:8e3}),b=new ie;r.loadAddon(b),r.open(m),y.current={term:r,fit:b},u&&r.focus();const g=()=>{r.options.theme=O()};window.addEventListener(M,g),r.attachCustomKeyEventHandler(d=>{if(d.type!=="keydown")return!0;const S=d.key?.toLowerCase();if((d.ctrlKey||d.metaKey)&&S==="v")return!1;if(d.ctrlKey&&!d.shiftKey&&!d.altKey&&S==="c"&&r.hasSelection()){const D=r.textarea;return D&&(D.value=r.getSelection(),D.select()),!1}return!0});const _=C(t,c,{write:d=>r.write(le(d).clean),dispose:()=>r.dispose()}),$=()=>{try{b.fit(),h({type:"terminal_resize",terminalId:c,conversationId:t,cols:r.cols,rows:r.rows})}catch{}},B=requestAnimationFrame(()=>{try{b.fit()}catch{}h(p?{type:"run_command",terminalId:c,conversationId:t,command:p,cols:r.cols,rows:r.rows}:{type:"terminal_create",terminalId:c,title:x,locale:N.current,conversationId:t,cwd:a,cols:r.cols,rows:r.rows})}),R=r.onData(d=>{h({type:"terminal_input",terminalId:c,conversationId:t,data:d})});let k=null;return typeof ResizeObserver<"u"&&(k=new ResizeObserver(()=>{m.offsetWidth>0&&m.offsetHeight>0&&$()}),k.observe(m)),()=>{cancelAnimationFrame(B),R.dispose(),window.removeEventListener(M,g),k?.disconnect(),_(),r.dispose(),y.current=null}},[t,c,E,h,C]),l.useEffect(()=>{if(!u)return;const m=requestAnimationFrame(()=>{const r=y.current;if(r){try{r.fit.fit(),h({type:"terminal_resize",terminalId:c,conversationId:t,cols:r.term.cols,rows:r.term.rows})}catch{}r.term.focus()}});return()=>cancelAnimationFrame(m)},[u]);const{t:F}=P(),f=l.useRef(void 0);return l.useEffect(()=>{if(v===f.current||(f.current=v,v!==!1))return;const m=y.current;m&&m.term.write(`\r
4
4
  \x1B[90m${F("exitBanner",{code:j??""})}\x1B[0m\r