Repository navigation
Releases
Releases · xiaoxiaohaigui/dsh-tui-theme
v0.8.0 · 主题归上游内置,插件只留花符状态行
樱花粉主题已并入 dsh-TUI 内置预设
樱花粉三套(pink-night / pink-day / pink-ansi)已随上游 PR #1294 合并进 dsh-TUI 主线,并自 dsh-TUI v0.15.0 起作为宿主预置主题发布——/theme 里直接可选,调色板与主题键由上游维护。
本插件从 0.8 起不再携带主题文件,只保留花符状态行、/settings 卡片和一条一次性迁移提示。按需要选一条:
只要主题:卸载插件,并清理残留
0.7.x 写进 ~/.dsh-tui/themes/ 的粉主题文件已被内置同名主题遮蔽,留着只是死重量,建议一起清理:
dsh plugin --profile dsh-tui remove -w dsh-tui-theme
# POSIX:确认没有要保留的手改配色后(要保留先按 README「迁移要点」改文件里的 name)
rm ~/.dsh-tui/themes/pink-{night,day,ansi}.json
rm -f ~/.dsh-tui/theme-follow.json ~/.dsh-tui/theme-plugin-notice.json# PowerShell(Windows):同上,可只删其中几个
dsh plugin --profile dsh-tui remove -w dsh-tui-theme
Remove-Item "$env:USERPROFILE\.dsh-tui\themes\pink-night.json",
"$env:USERPROFILE\.dsh-tui\themes\pink-day.json",
"$env:USERPROFILE\.dsh-tui\themes\pink-ansi.json"
Remove-Item "$env:USERPROFILE\.dsh-tui\theme-follow.json" -ErrorAction SilentlyContinue
Remove-Item "$env:USERPROFILE\.dsh-tui\theme-plugin-notice.json" -ErrorAction SilentlyContinue
⚠️ 别删~/.dsh-tui/theme.json——那是宿主记录你当前主题选择的文件;逐条说明见 README 的「旧主题文件清理」小节。
需要状态行:更新到 0.8.0
dsh plugin --profile dsh-tui add -w dsh-tui-theme@0.8.0本版不带主题文件,只保留状态行(以及 /settings 卡片与迁移提示);主题继续由宿主内置提供,两边不会再抢名字、抢文件、抢调色板。
之后可能还会带来更多主题,感谢使用 🌸
新功能
- 迁移提示(
src/legacyNotice.ts,走tuiToast):发现 ≤0.7.x 留在~/.dsh-tui/themes/的pink-*.json时提示一次——那些文件在带内置樱族的宿主(≥ 0.15.0)上已不生效,手工调过色的文件请改名才能继续采用。提示送达宿主后才在~/.dsh-tui/theme-plugin-notice.json记标记,此后不再重复;宿主还没有 toast 接缝(< 0.10)时看不到提示,插件每次启动静默重试、不打扰,等宿主升上来再提示一次。被提到的文件不会被删除或修改。 - 内嵌家族调色板(
src/palette.ts):富状态视图改用包内嵌的三个色值(家族accent/inactiveShimmer/subtle,与宿主内置樱族逐键一致)。宿主没有向插件公开「当前调色板」的查询接缝,这是插件唯一持有的颜色来源;非粉主题一律不着色。
变更(破坏性)
- 移除三套主题:不再有
themes/、运行时注册(ctx.tuiThemes)、静态安装(~/.dsh-tui/themes/)与损坏文件自愈。樱族已随上游 PR #1294 并入 dsh-TUI 主线(2026-10-12,merge4f4980fe)并于 0.15.0 发版,其内置的pink-night/pink-day/pink-ansi优先于任何同名静态文件,插件侧继续注册只会被整份拒绝。 - 移除缓存背景跟随(
followSystem)与autoInstallThemes:该功能只为在昼樱/夜樱之间切换而存在;~/.dsh-tui/theme-follow.json从此无人读取,可自行删除。 - 移除遮蔽文件清理对话框(
tuiDialogs接缝不再使用),由上面的一次性 toast 取代。 /settings卡片只剩「状态行」一组:followSystem字段随功能移除,其余六个字段(花符开关 / 花符字符 / 时钟 / 轮数 / 分隔符 / 展示范围)与存储命名空间dsh-tui-theme不变,已有用户层设置继续生效。- 插件不再写
~/.dsh-tui(唯一例外是上述标记文件,且只在发现旧主题文件、提示确实送达后写一次);theme.json只读不写。
兼容性
- 宿主基线抬到 0.15.0(devDependency 与 CI 的
DSH_TUI_EXPECTED_VERSION同批,由verify:peers守住):这是第一个内置樱族的宿主版本,零配置下verify:host的调色板门禁从此真跑 9 格,不再是跳过路径。 - 引擎 devDependency /
overrides整代抬到0.2.0-rc.2:0.15.0 的 peer 段要求dsh-app-boot/dsh-plugin-manager等为0.2.0-rc.2,与 rc.1 的dsh-settings树冲突(npm 直接 ERESOLVE),故两者必须同代。仅影响本仓的开发/验证树,发布包运行期不依赖它们。 - peer 段补字面项
0.2.0-rc.2:^0.2.0-rc.1在宿主includePrerelease语义下本来就覆盖 rc.2,字面项是为无依赖的scripts/verify-package.mjs(逐项字面比较)与读者准备的,与既有的0.1.7-rc.1 || 0.1.7-rc.2同体例;verify:peers的已验证运行时清单同时加入0.2.0-rc.2。 - 状态行与设置面板的下限不变(dsh-TUI 0.8.8;0.10.1 起走富状态视图,更旧宿主回退无色标量行)。
pink-only判据只是主题名,不检查宿主是否内置樱族:pink-night/pink-day/pink-ansi三个名字取自DSH_TUI_THEME/~/.dsh-tui/theme.json;在 ≥ 0.15.0 的宿主上与内置名天然一致。宿主 < 0.15.0 时:从 0.7.x 升上来、旧主题文件还在的用户照常显示(宿主仍把那些文件当静态主题解析);只有「未内置 + 没有这些旧文件」的全新安装拿不到粉主题名,此时把「状态行展示」改为all-themes,或继续使用0.7.5。dsh-settings两代支持不变:≤0.1.6 走命名空间注册 +scope.watch,≥0.1.7 走 Config volatile 投影 +loader/volatile-update重读。- 包体瘦身:发布清单 56 → 47 文件(
themes/与两张主题截图移除,新增lib/types/{palette,themePref,legacyNotice}与README_EN.md——后者此前不在files里,而README.md顶部链向它,npm 页面上那个链接曾是 404)。
验证
npm run release:check(exit 0):构建 +verify(17 个场景:状态行标量/富视图两条路径、dsh-settings两代卡片、toast 重试与投递回报、迁移提示,以及「不注册主题 / 不读主题文件 / 标记是唯一写入」三条交接不变量)+ 包清单(47 文件)+verify:peers(6 个已验证运行时通过、3 个未验证世代拒绝)+verify:settings(对真dsh-settings@0.2.0-rc.2的 19 条投影断言全 ok)。DSH_TUI_EXPECTED_VERSION=0.15.0 npm run verify:host(exit 0):OK palette: 9/9 garnish cells match the host built-in pink family+OK headless order: rich view registered (maxRows 1), ledger bind, settings section——即真宿主 0.15.0 上装配成功,且内嵌三色与宿主内置樱族逐格一致。同次输出带一行* mountAdmitted unavailable on this host; using manual plugin mount:发布版宿主不带lib/types/test-utils.js(0.14.0 的 npm 包同样不带),属脚本既有的回退分支,非本次变化。- 上游 0.15.0 复核(2026-10-13,直接读 npm tarball):
lib/types/theme.js的THEME_NAMES=dark, dark-ansi, light, pink-night, pink-ansi, pink-day, claude-*…;lib/types/dsh-adapter/themes.js的RESERVED_NAMES={auto, status, ...THEME_NAMES}已收下三套粉——0.7.x 的runtime-themes-headless.mjs失败模式(保留名整份拒绝)在 0.8 已无该路径。 - 真机装机实测(本机 profile
dsh-tui:dsh CLI0.2.0-rc.2+ 宿主 0.15.0 + 本插件 0.8.0,2026-10-13):dsh --profile dsh-tui --dump-config:无skipping profile bundle,# == dsh-tui-theme, patched by …层在列——rc.2 运行时的启动期 peer 校验放行。- headless 冒烟(
packages/smoke-tui.mjs,真实启动、捕获 stderr 45s):进入 TUI 主循环,stderr 为空,无did not activate/failed to import。 - 迁移提示送达:植入
~/.dsh-tui/themes/pink-night.json后启动实例,约 10 秒后写出~/.dsh-tui/theme-plugin-notice.json(themeRemovalNotifiedAt)——按设计,标记只在 toast 确实送达宿主后写,故这一条同时证明插件在 0.15.0 上真实激活、tuiToast接缝可用(测试夹具事后已清理)。 - 人工观感确认:✿ 状态行与配色正常、
/settings的 dsh-tui-theme 卡片六字段可用。
- 注:
main(0.7.x)的files不含README_EN.md,已发布的 0.7.5 页面链接照旧 404;需要时在 0.7.x 补丁版里补同一行。
v0.7.5 · 光标交给宿主默认与 0.14.0 实拍截图
新功能
- 无。本版承接 v0.7.4 已落地的 chrome 主题键(底栏五段
contextBar*、点火ignition/ignitionDim),把光标一处的偏差收齐——0.7.4 发布约一小时后即被本版取代,请直接用 0.7.5。
修复
- 输入光标回到宿主的反色块:0.7.4 给三套调色板写了实心
cursor(粉块),而上游内置樱族(PR #1294)用空串 = 反色块。空串不能照抄——它在描述符边界是非法颜色(运行时准入会整份拒绝该描述符、三套主题一起消失;静态文件路径则逐键告警并跳过)。正解是不声明这个键:宿主按{...getTheme(base), ...colors}解析,缺的键落回 base 主题的"",观感与上游内置完全一致。三套调色板因此 103 → 102 键。 - README 截图全部重拍(dsh-TUI 0.14.0 + 本插件 v0.7.5 实拍):昼樱、夜樱与
/settings卡片,替换掉 0.9.2/0.9.3 时代、chrome 元素还是宿主写死配色的旧图。 - README 的「宿主硬编码、主题覆盖不到的部分」整节移除:其中五项已随 #1260 进主题键,剩余项属上游实现细节而非主题用户需要规避的东西,顶栏像素鲸鱼也不再提及。清单本身留档在
docs/tasks/20261010-161500-v074-chrome-keys-and-host-gate.md与 git 历史里。
兼容性
- 与 v0.7.4 相同:宿主 ≥ 0.14.0 拿到含 7 个 chrome 键的完整调色板(102 键);< 0.14.0(含全部静态资产宿主)退回 v0.7.3 的 73 语义键调色板(95 键,逐字节相同),主题照常可用,只是那些 chrome 元素保持宿主原样。
cursor一律不声明,任何宿主都由 base 补""。 - 引擎 peer 段、
dsh-settings两代支持、Node^22.19 || >=24、dsh-TUI下限 0.8.8 均与 0.7.4 一致。 ⚠️ 上游 #1294 仍未合并:pink-*尚未进宿主保留名;合并后需按REVIEW.md的 R-017 处理(插件运行时注册会被整份拒绝)。
安装 / 升级到本版
# 已装过本插件:重跑同一条命令即可升级(0.7.4 → 0.7.5)
dsh plugin --profile dsh-tui add -w dsh-tui-theme@0.7.5验证
npm run release:check:构建 +verify(31 场景)+ 包清单(59 文件)+verify:peers+verify:settings(真实dsh-settings@0.2.0-rc.1的 19 条投影断言)全绿。npm run verify:host(零配置宿主 0.14.0):headless order、runtime themes、toast、设置相位、主题校验(OK host theme validation: 3 themes, 81 contract keys (userMessageBackground, cursor left to the base palette), settings colors covered)全绿。- 机制证据(0.14.0 自带解析器实测):删掉
cursor后parseCustomThemeaccepted、buildTheme().cursor === "";显式写空串则告警invalid color value for "cursor" … skipped;描述符类型TuiThemeDescriptor['colors']为Partial<Record<ThemeColorKey, string>>,validateDescriptor只校验出现过的键。 node probes/compare-preset-palettes.mjs:exit 0(240 个键值一致;cursor不再是差异,脚本新增守卫「上游该键一旦不再是空串即报错」)。- 本机真机闭环:profile 换装
packages/dsh-tui-theme-0.7.5-local.2c55d82.tgz(受管安装 exit 0),--dump-config无skipping profile bundle;新实例(宿主 0.14.0)实拍三张截图,输入框光标实测为反色块(#383A42= 主题 ink 反色)、❯前缀取到主题ignition(#B03A63),底栏与状态行配色正常。
v0.7.4 · chrome 主题键落地与老宿主版本门
新功能
- 三套调色板补齐上游契约的 8 个 chrome 键:底栏上下文进度条五段(
contextBarSystem/contextBarPrompt/contextBarAssistant/contextBarThinking/contextBarTools)、思考档点火对(ignition/ignitionDim)与输入光标填充(cursor)。取值与上游 dsh-TUI PR #1294 的樱族内置预设逐键一致(probes/compare-preset-palettes.mjs复核 243 个键值),因此宿主内置樱族前后观感连续;cursor是唯一有意的形态差异——宿主内置用空串走反色块,而插件的运行时描述符不接受空串(空值会被判定为非法颜色、整份拒绝),故三套均给实心填充色。 - 宿主版本门(
src/hostContract.ts):插件读取已安装宿主的package.json版本,< 0.14.0时自动改发去掉这 8 键的调色板。原因是宿主的运行时准入按「键必须属于 Theme 契约」校验,一个未知键就整份拒绝描述符——不设门的话,0.10.0–0.13.x 宿主上的三套主题会一起消失(静态文件路径则会每次启动逐键告警)。降级发生在注册与静态副本两处,插件日志各记一行;静态副本降级后的字节与 v0.7.3 的资产完全相同。
修复
- README 中英同步更正(REVIEW.md R-016):主题表的「0.10.x 为 73 语义键」改为当前契约(0.14.0 为 81 语义键);「官方校验器零警告、全键覆盖」补上基线口径;「宿主硬编码、主题覆盖不到的部分」清单从 10 项收到 6 项——底栏五段、点火波与 ❯ 前缀、进度条空余段的明暗判定、输入光标、正文链接五项随 #1260 进了主题键,截图说明也改为「顶栏像素鲸鱼仍写死,其余自 0.14.0 起跟随主题」。
scripts/validate-themes-against-host.mjs不再对老宿主误报:宿主契约不含 chrome 键时改为校验插件实际发给该宿主的形态(与 v0.7.3 逐字节相同的 95 键文本),而不是拿新契约去要求老宿主;runtime-themes-headless.mjs同样按宿主契约分支,并在支持该契约的宿主上新增「8 键逐键原样到达」的断言。
兼容性
- 验证基线抬到 dsh-TUI
0.14.0(devDependency + CI 的DSH_TUI_EXPECTED_VERSION同步,由verify:peers守着),引擎包仍为0.2.0-rc.1。0.14.0 是第一个携带这 8 个 chrome 键的发行版(上游 PR #1260,2026-10-07 发版)。 - 老宿主不掉主题:
< 0.14.0(含全部静态资产宿主)拿到的是 v0.7.3 的 73 键语义调色板,8 个 chrome 元素保持宿主原本的写死配色;>= 0.14.0拿到全键调色板。dsh-TUI 0.8.8的下限、dsh-settings两代支持、peer 段覆盖范围均未变。 ⚠️ 上游 #1294 仍未合并:pink-night/pink-day/pink-ansi尚未进入宿主的内置主题名。一旦合并,宿主会把这三个名字列入保留名,插件的运行时注册会被整份拒绝(REVIEW.md R-017)——后续版本需要按「跳过宿主已内置的名字」或改名处理。
验证
npm run release:check:构建 +verify(31 个场景,新增「chrome-key gate」与「静态资产随门降级」两组)+ 包清单(59 文件)+verify:peers+verify:settings(真实dsh-settings@0.2.0-rc.1的 19 条投影断言)全绿。npm run verify:host(零配置、宿主 0.14.0):headless order、runtime themes(host chrome keys: carried by the contract)、toast 相位、设置相位、宿主主题校验(81 键契约、3 套 × 80 键、零告警)全绿。- 老宿主端到端复核(真 0.13.0 安装树):
runtime-themes-headless.mjs→host chrome keys: predate the contract (withheld)+OK runtime themes: 3 registered, no static files, ledger create/release, disposal clean;validate-themes-against-host.mjs→validating the withheld (pre-0.14.0) form+OK host theme validation: 3 themes, 72 keys each;headless-order-test.mjsexit 0。反向对照:把版本门钉成「支持」后同一棵树立刻以[] ≠ [pink-ansi, pink-day, pink-night]失败,即门确实挡住了「三套主题一起消失」。 - 降级产物逐字节等于 v0.7.3 资产(
git show HEAD~1:themes/pink-{night,day,ansi}.json对比,三套全等),因此老宿主的静态路径零「未知颜色键」告警。
v0.7.3 · peer 契约常驻门禁与设置链路真宿主验证
新功能
npm run verify:peers:peer 覆盖契约(scripts/verify-peer-coverage.mjs,随包分发)。dsh0.2.0-rc.1起宿主会在启动时校验 bundle 的peerDependencies,任一段不匹配就整层跳过(主题、状态行、/settings、toast 一起消失)。新的门禁把「已验证的运行时版本必须被 peer 段覆盖」「未验证的世代必须被拒」「devDependency 基线必须落在 peer 契约内」「devDependency 与 CI 的DSH_TUI_EXPECTED_VERSION必须一致」四条钉成常驻断言,并已挂进release:check与 CI 的verify档。- 设置链路新增真宿主验证相位:
scripts/runtime-themes-headless.mjs相位 4 改为按能力分代(≤0.1.6 挂真实SettingsProvider并断言命名空间晚到注册;≥0.1.7 明确报告「本代没有该 API」并指向verify:settings),新增相位 5 —— 把插件挂成宿主@deepseek-ai/cordis-plugin-loader的真实条目,用 loader 自己的_commitVolatile(原地改写 live ref + 带owner.fiber === fiber过滤的loader/volatile-update)驱动一次设置编辑,断言「编辑 → 主题偏好即时生效」。DSH_SETTINGS_DIR可指向另一代设置服务安装,旧代相位因此仍可复跑(见开发文档)。
修复
verify:host在 dsh-TUI ≥0.11 宿主上不再中断:相位 4 曾写死旧代SettingsProvider,在 ≥dsh-settings0.1.7 的宿主上抛TypeError: Class extends value undefined,令整条verify:host以退出码 1 结束(插件本身无问题,是验证脚本的缺口)。- README 更正一处事实错误(中英同步):✦ 字标扫过时的高光跟随主题(
claudeShimmer,0.10.1 起accentShimmer;宿主把它作为高光色传给sweep(),本插件三主题均已设值),此前文档把它写成「宿主死代码、shimmer 由常量决定」。清单中依然成立的常量是DEEPSEEK/HARNESS与欢迎语的扫过高光FLASH、HARNESS渐变结尾色PALE。 - peer 覆盖表述收紧:README 兼容性章节不再笼统写「覆盖到
0.2.x」,改为「0.1.0-rc.6–0.1.x与0.2.0-rc.1–0.2.x(自 v0.7.3 起)」,并说明宿主校验固定用includePrerelease语义、npm 默认预发布语义下未来0.2.1-rc.x会报 unmet peer(框架包由 dsh CLI 提供,profile 不装@deepseek-ai/*,无实际影响)。
兼容性
- dsh 运行时
0.2.0-rc.1及以上可正常加载本插件:peer 段自本版起声明^0.2.0-rc.1(外加0.1.7-rc.1/0.1.7-rc.2)。⚠️ 已发布的0.7.2不含该声明,在 dsh0.2.0-rc.1上会被启动期校验整层跳过——请使用0.7.3。 - 验证基线抬到 dsh-TUI
0.11.2+ 引擎0.2.0-rc.1(devDependency 与 CI 同步);dsh-settings的 Config 投影世代(≥0.1.7)从此在 CI 里真跑断言。0.9.x 兼容线仍由发版前的本机门禁回归(本轮 0.9.3 档全绿)。 - 插件运行时行为无变化:本版没有
src/改动,构建产物lib/types/与 0.7.2 一致;改动集中在 peer 元数据、验证脚本、CI 与文档。
验证
npm run release:check:构建 +verify(29 个场景)+ 包清单(56 文件)+verify:peers+verify:settings(对真实@deepseek-ai/dsh-settings@0.2.0-rc.1的 19 条投影断言)全绿。DSH_TUI_EXPECTED_VERSION=0.11.2 npm run verify:host:headless order、runtime themes 相位 1–3、toast 相位 3、设置相位(新代报告 + 相位 5 真 loader)、73 键主题校验全绿;DSH_TUI_EXPECTED_VERSION=0.9.3+ 0.9.3 宿主 worktree 全绿。- 旧代设置服务(
dsh-settings@0.1.5-rc.1,scratch 安装)经DSH_SETTINGS_DIR复跑相位 4:真实 provider 晚到注册 +followSystem驱动主题偏好,通过。 - 本机 profile 实测:装入本版产物后
dsh --profile dsh-tui --dump-config无skipping profile bundle,# == dsh-tui-theme层与默认配置在列。 - 发布产物:
dsh-tui-theme-0.7.3.tgz,56 文件,shasum33c893fb7d2e925a507ccb2a9e6592db83752ace。
v0.7.2 · 设置卡片适配 dsh-TUI 0.11.0 与审查修复
新功能
- 设置卡片适配 dsh-TUI 0.11.0(
dsh-settings≥ 0.1.7):0.1.7 删除了SettingsProvider.register,此前/settings里的 pink-theme 卡片只剩「命名空间未注册」徽标。现在按能力分代而不解析版本号:旧代(≤ 0.1.6)继续注册命名空间并跟随scope.watch;新代(≥ 0.1.7)把Config中带 volatile 标记的 7 个字段投影成表单,命名空间跟随 profile 里的条目 id,编辑经loader/volatile-update即时生效。失败不再静默——世代无法识别、条目 id 不合法、缺 live 标记、缺事件接缝都各写一条日志,而不是让徽标成为唯一线索。
修复
loader/volatile-update监听会重复叠加(评审 R-006):disposer 原先挂在插件 fiber 上,而ctx.inject()的回调跑在可回收的子 fiber 里;settings 服务重载导致回调二次运行时,第一次的监听不会被回收,之后每次事件都会把配置重读两遍。现在监听仍注册在插件 ctx(loader 只投给 Config 所属 fiber),清理改由 inject 子 ctx 的 effect 持有,随子 fiber 一并回收。- 旧代注册 schema 补上契约守卫(评审 R-007):≤ 0.1.6 宿主唯一认可的字段清单是与
LIVE_CONFIG_KEYS逐字重复的手写 7 键,此前没有任何断言;现在 hermetic 测试会对拍两份键集,未来加字段时旧代会先红,而不是在新代卡片上可编辑、在旧代静默存不进去。
兼容性
- dsh-TUI 版本下限保持
0.8.8(0.9.3 实测)。两条设置路径按能力探测分支;新代还要求 schemastery 支持 volatile 标记(3.18.3+ 的.volatile(),更旧版本回落写meta.volatile)。更旧的宿主缺扩展面时自动降级为「仅安装三套主题」,不报错。
验证
- 29 项 hermetic plugin checks(新增场景 2g:二次 inject 不叠监听;场景 2 新增旧代注册 schema ↔
LIVE_CONFIG_KEYS对拍) - 代际门禁
npm run verify:settings:对 registry 安装的@deepseek-ai/dsh-settings@0.1.7-rc.2(schemastery 3.18.4)19 条投影断言全过 - dsh-TUI
0.10.1host integration(含真实SettingsProvider晚到注册)与0.9.3兼容基线(钉版本)均绿 - package contract:55 个发布文件
v0.7.0
新功能
- 富状态行(dsh-TUI ≥ 0.10.1):✿ 状态行改经宿主新增的
tuiStatus.registerView渲染,花符、时钟、轮数等单元格颜色取自当前主题调色板(此前宿主统一渲染为无色 + dim);旧宿主自动回退无色标量路径,行为不变。时钟与轮数与宿主底栏信息(模型名、tps 等)同层级同色(inactiveShimmer键),花符保持品牌粉。 - /settings 面板友好化(dsh-TUI ≥ 0.9.3):pink-theme 区块按「背景跟随 / 状态行」拆分两组;新增
statusGlyph(默认 ✿)与statusSeparator(默认 ·)两个文本字段,可自定义且校验 1–2 显示单元;followSystem行现在展示当前缓存状态(如on(缓存: light · 2026-09-12))。 - 遮蔽文件引导清理(dsh-TUI ≥ 0.9.3):检测到遮蔽插件的旧版静态主题文件时,除 toast 提示外提供一次性确认对话框;确认后按逐字节校验清理,拒绝或忽略维持现状,缺对话框接缝的宿主静默降级为纯 toast。
修复
- 顶栏字标/像素字/欢迎语的
claude*四键改为rgb()格式:宿主浅深判定(isLightThemeActive)与品牌色解析(parseRGB)只认rgb(),hex 值会静默判错主题深浅或回退固定品牌蓝;pink-ansi 有意保留 ansi 值以兼容 16 色终端的 colorize 路径。
已知行为:切换主题时状态行颜色的生效时机
/theme 切换后,状态行(✿、时钟、轮数)的配色在下一次渲染时跟随新主题:
- 会话活跃时(发送下一条消息即触发回合边界),颜色立即切换;
- 完全空闲时,最长约 15 秒(状态行的时钟刷新周期)后切换。
这是状态行渲染机制的既定语义:渲染只在回合边界与时钟刷新运行(流式输出零渲染、零磁盘读),插件不做文件监听。背景、正文等其余界面颜色由宿主即时切换,不受影响。
兼容性
- dsh-TUI 版本下限保持
0.8.8,新增能力均有旧宿主自动降级路径。验证基线对齐 dsh-TUI0.10.1(宿主 73 个语义键,旧键名经宿主别名映射兼容)。
验证
- 24 项 hermetic plugin checks(含设置分组、富视图映射与互斥、配色层级、主题切换下一次渲染生效、遮蔽清理对话框等场景)
- dsh-TUI
0.10.1host integration(钉版本,DSH_TUI_EXPECTED_VERSION) - dsh-TUI
0.9.3compatibility baseline(钉版本环境) - package contract:50 个发布文件
Full Changelog: v0.6.1...v0.7.0
v0.6.1
性能优化
- 状态行不再跟随流式输出逐 token 重绘:渲染只在回合开始/结束、会话销毁和 15 秒时钟刷新运行。此前流式输出的每个 chunk 都会触发一次渲染,并附带一次同步的
theme.json读取+解析(即在宿主 UI 线程上每 chunk 一次磁盘读)。 - 主题偏好(
~/.dsh-tui/theme.json)读取加了一个时钟周期(15 秒)缓存,渲染路径变为纯字符串拼接。微基准:10 万个 chunk 事件,0 次渲染、0 次磁盘读。 - 会话中
/theme切换对状态行的生效时机由「下一个会话事件」调整为「下一个回合边界或最多 15 秒内的时钟刷新」,与状态行一贯的「下一 tick」语义一致。
其他改进
- 运行时主题确认并清理本次启动安装的静态回退文件时,新增一条日志记录清理数量,便于度量 write-then-remove 周期的实际频率。
兼容性
- dsh-TUI 版本下限保持
0.8.8;插件契约与配置项无变化,statusScope: 'all-themes'行为不变。
验证
- 19 项 hermetic plugin checks(新增 hot-path 场景:firehose 突发零渲染、零磁盘读)
- dsh-TUI
0.10.0-beta.4host integration(钉版本) - dsh-TUI
0.9.3compatibility baseline(钉版本) - package contract:40 个发布文件
Full Changelog: v0.6.0...v0.6.1
v0.6.0
功能更新
- 适配 dsh-TUI 0.10.0 的运行时主题接缝:
pink-night、pink-day、pink-ansi现在可通过ctx.tuiThemes注册,主题选择器显示中文名称,正常情况下无需写入~/.dsh-tui/themes/。 - 保留旧宿主兼容路径:dsh-TUI 0.9.x 及更早版本继续使用静态主题文件;运行时服务晚到时会先短暂回退到静态文件,确认服务可用后仅清理本次激活写入且未被修改的文件。
- 新增
tuiToast屏幕提示(dsh-TUI 0.10.0+):背景跟随实际改写主题偏好、损坏主题文件自愈、旧静态文件遮蔽运行时主题等重要事件会显示短提示;没有该接缝的旧宿主自动退回原有日志行为。 - 背景跟随结果改为结构化处理:真正改写主题时提示需要
/reload,手动开启但没有缓存时给出明确警告,启动时没有变化则保持安静。
稳定性修复
- Toast 接缝或显示 sink 晚于插件加载时,按 2 秒 / 4 秒进行有限重试,避免启动阶段提示丢失。
- 使用独立异步作用域调用宿主 Toast,覆盖设置监听器和启动阶段等非插件调用上下文。
- 损坏主题文件的备份名加入进程号和随机值,避免同一毫秒内发生命名冲突;替换失败会如实报告为失败。
- 运行时主题注册和静态回退均接入生命周期清理,卸载或重载时不会残留插件注册项。
兼容性
- dsh-TUI 版本下限保持为
0.8.8。 - dsh-TUI
0.10.0运行时主题与 Toast 能力已针对0.10.0-beta.4验证。 - dsh-TUI
0.9.3静态主题、状态行和/settings兼容路径已验证。 - 用户手工修改过的主题文件不会被覆盖、删除或纳入遮蔽提示。
验证
- 18 项 hermetic plugin checks
- dsh-TUI
0.10.0-beta.4host integration:运行时主题注册、生命周期清理、Toast 实际投递 - dsh-TUI
0.9.3compatibility baseline:静态回退、状态行、/settings区块与主题校验 - package contract:40 个发布文件
Full Changelog: v0.5.1...v0.6.0
v0.5.1
兼容性修复
- 兼容
@deepseek-ai/dsh-settings@0.1.2-alpha.2:移除settingsNamespace()运行时导入,改用原始命名空间字符串。 - 扩展
dsh-session/dsh-settings的 peer 与 dev 版本范围,保留旧 rc 版本兼容。
验证
- 14 项 hermetic plugin checks
- dsh-TUI beta.3 host integration check(状态行晚绑定 +
/settings区块契约) - dsh-TUI beta.1 theme validation:3 themes × 95 keys
v0.5.0
重要变更
- dsh-TUI 0.9.3 兼容:三套主题覆盖 95 个可覆盖键及
/settings卡片新启用的色键(promptBorder、selectionBg、permission、suggestion、success、inactive、subtle、warning、error);宿主校验从固定 0.9.2 改为 adapter 与源码同版本检查,发布基线可用DSH_TUI_EXPECTED_VERSION钉住。 - 损坏主题文件自愈:安装时发现既有主题文件无法解析为 JSON(如安装中途中断的残留),会改名为
<文件名>.corrupt-<时间戳>保留现场并重装内置副本,记录一条警告;有效用户文件仍然绝不覆盖。 /settings首项文案更新为「应用上次保存的终端背景」(Apply saved terminal background)。
稳定性与工程
- 插件名、状态行键与 settings 命名空间统一为单一标识常量,清理了
dsh-tui-pink-theme命名残留。 - 启动不再打印一条假的「follow: disabled」日志:首份设置文档按基线对齐,真实切换才记录。
- 验证链硬化:恢复
preverify构建前置并让verify:host显式先构建;settings 字段契约收敛为单一契约模块;无头回归改为轮询就绪(移除固定 300ms 延时)并标注脚本侧宿主下限 0.9.0;新增 6 条 settings 色键对比度用例。
验证
- 14 项 hermetic plugin checks(含损坏主题自愈与 follow 日志语义场景)
- dsh-TUI 0.9.3 host integration check(状态行晚绑定 +
/settings区块契约) - dsh-TUI 0.9.3 theme validation:3 themes × 95 keys,12 条对比度用例
升级说明
已有的 ~/.dsh-tui/themes/pink-*.json 不会被覆盖;如需采用包内新主题资产,请先备份自己的修改,删除对应文件后重启 dsh-TUI 让插件重装。