bookworm
|
47079cb8b1
|
fix(v3.2.0): 移除 Bun crash 降级逻辑 (根因: 安装后 claude 被降到 v2.0.1)
- 删除 claude --version 自检 → 自动降级到 2.0.1 的逻辑
- Claude Code 2.1.x+ 已不使用 Bun, 降级完全不必要
- 此逻辑导致对方机器 claude 被降到 v2.0.1 (远古版本)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-27 21:56:56 +08:00 |
|
bookworm
|
697b58ef15
|
fix(v3.2.0): 取消安装后自动弹终端 + wt.exe 参数修复
- 安装完毕不再自动启动终端窗口 (避免 wt.exe 参数拼接错误)
- 用户通过桌面快捷方式启动 Bookworm
- 受限模式也改为提示而非自动启动
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-27 21:07:27 +08:00 |
|
bookworm
|
7a9a5b8dfa
|
fix(v3.2.0): GitUrl 指向已删仓库 → bookworm-smart-assistant
- $GitUrl bookworm-portable-config.git → bookworm-smart-assistant.git
- 旧仓已删除导致用户安装 [3/7] clone 失败
- EXE 重新打包含此修复
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-27 20:46:27 +08:00 |
|
bookworm
|
aa662d8744
|
feat(v3.2.0): Phase 8 OTA 自动更新基础设施
- auto-setup.ps1 v3.2.0: Phase 8 pubkey/DPAPI凭证/bw-ota.ps1 部署
- bw-ota.ps1: OTA 升级脚本 (Ed25519签名验证+SHA256+原子替换+DryRun)
- 启动Bookworm.bat: 启动时 fail-open 调用 OTA 检查
- Bookworm-Setup.exe: 重建含以上变更
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-27 18:22:37 +08:00 |
|
bookworm
|
0b4402d417
|
hotfix(v3.1.3): 卸载精准删除 + 体检凭证链路修正
W1: 卸载脚本改为只删 Bookworm 注入的 7 目录+3 文件,
保留用户自有 CLAUDE.md/memory/projects (防误杀)
W2: bw-doctor [9] 改检 DPAPI→profile 注入链路,
不再检查 User 持久环境变量 (逻辑反转修正)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-26 17:06:02 +08:00 |
|
bookworm
|
ec490c3f35
|
feat(v3.1.2): 完整生命周期 (闭合 L9-L12)
新增:
- 卸载Bookworm.bat + 卸载Bookworm-impl.ps1: 7 步清理
- bw-doctor.ps1: 13 维度健康体检工具
- 桌面快捷方式 2→4 (新增体检+卸载)
增强:
- bw-launch.ps1: nvm/fnm/volta 探测 + log rotation
- auto-setup.ps1: npm/uvx 国内镜像双 fallback
12/12 局限全部闭合, v3.1.x 生命周期完整.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-26 15:12:15 +08:00 |
|
bookworm
|
7c8540b542
|
feat(v3.1.1): E2E 护栏 + UX 4 项闭合 + 并发安全
闭合 v3.1.0 后续 4 个 HIGH 局限:
[L8] smoke 覆盖不到 .lnk 行为 → 引入 tools/test-launcher-e2e.ps1
4 测试套: PARSE / wrapper 6 特性 / .lnk Args 6 契约 / profile 双注入契约
集成到 build.ps1 后置, 失败 exit 1 拒绝发布
闭合 v3.0.10 -or 类 PSParser 漏网 bug 风险
[L5] Phase 1 总结弹窗仅有动作时弹 → 始终弹
老用户全就绪重跑 EXE 跳过总结不知是否完成
v3.1.1 移除条件, 永远显示 (零新装也弹 OK 态)
[L6] 更新.bat 完成无反馈 → GUI YesNo 询问立即启动
PS MessageBox: '同步完成. 是否立即启动 Claude?' Yes 触发 Start-Process 桌面 .lnk
[L7] profile 注入并发损坏 → FileShare.None 排他锁 + 5 次重试
WriteAllText 隐式 FileShare.Read 改为显式 FileStream
IOException catch sleep 50ms 重试, 5 次都失败 throw 触发 v3.1.0 显式弹窗
8/12 局限闭合 (剩余 L9-L12 计划 v3.1.2)
|
2026-04-25 23:16:08 +08:00 |
|
bookworm
|
e225a5c758
|
feat(v3.1.0): wrapper 模式 + 双 profile + 凭证注入失败弹窗
闭合 v3.0.11 已知 CRITICAL 局限 (3/4):
[L4] claude.ps1 路径迁移破坏 .lnk → 引入 wrapper bw-launch.ps1
桌面 .lnk Args 不再 bake claude.ps1 路径, 改指向 $BootDir\bw-launch.ps1
wrapper 启动时动态查 claude.ps1 (PATH 重载 + npm prefix + 硬编码兜底)
失败时写 bw-launch.log + GUI MessageBox 弹清晰诊断
好处: claude.ps1 路径变 → wrapper 自动重新查, .lnk 永不 stale
[L2] PS5.1-only 启动 profile BW_CRED 不加载 → 双 profile 注入
Inject-CredentialLoaderProfile 同时写:
Documents\PowerShell\profile.ps1 (PS7 主用)
Documents\WindowsPowerShell\profile.ps1 (PS5.1 兜底)
任一成功即 OK, 双方都失败才 throw
[L3] profile 注入失败 fail soft 不可见 → catch 弹窗
Show-MsgBox Warning 含影响 + 异常原文 + 3 种手动修复方案
不阻断主安装, Phase 5+ 继续
[L1] DPAPI 跨用户 (设计内禀, 文档化) — 未闭合, 用户换电脑/换 Win 用户重跑 EXE 重激活
新文件: bw-launch.ps1 (4472 字节, 启动 wrapper)
EXE 228352 → 231424 bytes (+3072)
向后兼容: v3.0.11 老 .lnk 直调 claude.ps1 仍能跑, 重装升级到 wrapper
|
2026-04-25 22:42:14 +08:00 |
|
bookworm
|
95422376ce
|
audit(v3.0.11): P0 -ExecutionPolicy Bypass + P1 4-项自验证
落地前红队审查发现 2 个阻断性 bug + 6 个非阻断:
[P0] Bug 2: .lnk Args 缺 -ExecutionPolicy Bypass
根因: npm 全局生成的 claude.ps1 shim 是未签名脚本.
Phase 1 设的 RemoteSigned 在 LTSC / Group Policy AllSigned 机器
仍会拒绝执行. 用户启动时报'脚本未数字签名'.
修: -NoLogo -NoExit -ExecutionPolicy Bypass -File ...
[P1] Bug 8: 自验证只查 claude.ps1 路径, 不查 perms / Bypass
根因: 验证太松, 关键参数丢失也会通过.
修: 扩展为 4 项检查 (Target / claude.ps1 路径 / --skip-perms / Bypass),
任一失败立即删除 .lnk + 弹错, 不交付半成品.
P1 已知限制 (PS5.1 profile / Inject fail soft) 不阻断本版.
EXE 227840 → 228352 bytes (+512)
|
2026-04-25 21:38:28 +08:00 |
|
bookworm
|
1421338da3
|
feat(v3.0.11): 架构重构 — 启动链路 7 跳 → 1 跳直链
用户报障驱动 (v3.0.3-3.0.10 共 9 轮迭代后接受架构原罪).
旧架构: .lnk → bat → wt → pwsh → Base64 → DPAPI → claude (7 跳)
新架构: .lnk → pwsh → claude.ps1 (1 跳, 凭证由 profile 异步加载)
ADR-001 桌面 .lnk 直调 pwsh + claude.ps1 绝对路径
- 安装时 Get-Command claude / npm config get prefix 定位 claude.ps1
- bake 进 .lnk Args, 运行时不依赖任何 PATH 重载
- 自验证: 创建后回读 .lnk 确认 Target/Args 完整, 失败立即删除拒绝交付
ADR-002 DPAPI 凭证加载迁移到 PowerShell profile sentinel
- BW_CRED_START..END 块写入 ~/Documents/PowerShell/profile.ps1
- pwsh 启动自动 source, 与启动链路彻底解耦
- profile 编辑用 String.Replace 字面替换 (避开 -replace $ backreference)
ADR-003 启动 / 更新功能拆分
- 启动Bookworm.lnk → 仅启动 (1 跳)
- 更新Bookworm.lnk → 仅 git pull
- 更新并启动Bookworm.bat → 重命名为 更新Bookworm.bat (仅同步)
- tools/gen-launcher-bats.ps1 归档 (新架构不需要 Base64 生成器)
8 个失败模式中 7 个被架构性消除:
✅ F1 wt ; 切 tab (无 wt)
✅ F2 cmd 转义 (无 cmd 启动路径)
✅ F3 wt -d 引号 (无 wt -d)
✅ F4 Base64 解码语义错 (无 Base64)
✅ F5 PATH 时序 (绝对路径不依赖 PATH)
✅ F6 claude shim (直调 .ps1)
✅ F8 wt 自身 issue (无 wt)
⚠️ F7 DPAPI 跨用户 (设计限制, 跨用户需重激活)
EXE 220672 → 227840 bytes (+7168, ADR-002 profile 注入函数)
|
2026-04-25 18:19:07 +08:00 |
|
bookworm
|
609e82bac0
|
hotfix(v3.0.10): Base64 '-or' 括号 bug + dry-run 实跑验证护栏
v3.0.9 Base64 脚本启动即报:
Test-Path: A parameter cannot be found that matches parameter name 'or'.
claude.exe not found
根因: 'Test-Path (Join-Path $p claude.ps1) -or (Test-Path ...)' 中 -or
被当成 Test-Path 的命名参数. PSParser 静态检查看合法, 运行时炸.
修复:
F1: 括号修正 — $hasClaude 抽为独立变量, 三元 -or 每项带外括号
F2: gen-launcher-bats.ps1 强制加 dry-run 实跑验证护栏
解码后的 Base64 脚本必须被 pwsh -File 实跑到底部 __BW_DRYRUN_OK__
才算通过. 检查 ErrorRecord / ParameterBindingException / 未知命令.
任何未来 Base64 改动都被此验证拦截.
验证层级教训:
PSParser = 抓语法 / 抓不到参数绑定错
dry-run = 抓运行时 / 抓不到业务逻辑
smoke = 抓业务 / 需要前两层通过
EXE 220160 → 220672 bytes (+512)
|
2026-04-24 22:48:08 +08:00 |
|
bookworm
|
a3b4ff3a78
|
fix(v3.0.9): Claude 装完 npm prefix 固化 + 三层 PATH + 快捷方式自验证
用户反馈 (核心): '不要客户端修修补补, EXE 必须一次对'
诊断: v3.0.8 Phase 1 全 OK, 但桌面快捷方式 claude.exe not found
user npm config get prefix = C:\Users\Administrator\AppData\Roaming\npm
但 Get-Command claude 在 PS 7 为空 → User PATH 没含这个目录
Node.js MSI 写 User PATH 时机/行为被企业镜像/防病毒/组策略干扰
三层根治:
F1: auto-setup.ps1 装完 Claude Code 后立即 `npm config get prefix` 查真实路径,
强制写入 User PATH (永久生效). 不依赖 npm 自己的 PATH 注入时机.
F2: gen-launcher-bats Base64 脚本加 3 层 PATH 修复:
层 1 Machine+User env PATH / 层 2 npm config get prefix 动态查询 /
层 3 硬编码候选 (%APPDATA%\npm / Program Files\nodejs / LOCALAPPDATA\npm)
F3: auto-setup.ps1:2256 创建桌面快捷方式前 Test-Cmd claude 自验证,
失败则拒绝创建 + 弹明确错误, 不再静默产出坏快捷方式
EXE 217088 → 220160 bytes (+3072)
Base64 3544 → 5880 chars
产品原则: 点快捷方式要么成功要么给清晰诊断, 不再给 'claude not found' 无头案
|
2026-04-24 22:39:17 +08:00 |
|
bookworm
|
9fc7f1c9fa
|
feat(v3.0.8): Phase 1 引导性大升级 (PS7 硬核+per-dep 弹窗+总结+Claude 诊断)
用户反馈: v3.0.7 EXE 安装没有检测和引导 PS7/Claude Code. 根因:
B1: PS7 标记为'可选', 装失败只 Log-Info, 用户滚动错过.
但启动器 bat 强依赖 pwsh, 降级 5.1 体验差 (粘贴多行命令被拆/Base64 截断).
B2: Core 依赖装失败只 Log-Fail 到 GUI, 末尾才一次 manualGuide.
B3: Claude Code 失败没具体诊断 ('npm 安装失败' 模糊无法报障).
修复:
F1: PS7 升硬核 (最终检查含 pwsh, 缺失 exit 1 + manualGuide 含 winget+MSI)
F2: foreach 内 Core 失败立即弹 Warning 专属窗 (winget/MSI/EXE/npm 全方案)
F3: Phase 1 末尾总结 MessageBox (就绪/新装/失败分组, 只在有动作时弹)
F4: Claude 失败写诊断到 bw-crash.log (node -v/npm -v/npm prefix/PATH)
EXE 212480 → 217088 bytes (+4608)
UX 对比: v3.0.7 用户滚动错过关键信息; v3.0.8 每步都有专属弹窗或总结
|
2026-04-24 22:13:02 +08:00 |
|
bookworm
|
5d16b7cfcf
|
hotfix(v3.0.7): Phase 4 取 Key 后静默闪退根治
v3.0.6 用户报障: 取 Key 成功后窗口消失无提示. 三重叠加根因:
B1: $ErrorActionPreference=Stop + 无顶层 trap → PS2EXE 遇异常直接 exit
B2: Phase 5.5 profile 注入 -replace 把 $script:/$HOME/$IntervalMs 当
.NET Regex backreference 吃掉 → profile.ps1 损坏, Regex.Replace
3参传 array 抛 ArgumentException
B3: Phase 5.5 整段无 try-catch → B2 异常直接终止主流程
修复:
F1: 顶层 trap 写 $env:TEMP\bw-crash.log (含 message+type+line+stack) + GUI 弹窗
F2: Phase 5.5 regex 替换改用 String.Replace 字面替换 (绕过 $ backreference)
F3: Phase 5.5 整段 try-catch 降级, 截图助手失败不阻断 Phase 6+
EXE 198144 → 212480 bytes (+14336 含 trap + try-catch + String.Replace)
向后兼容: 老 profile.ps1 sentinel 块会被自动覆盖修复.
|
2026-04-24 21:06:43 +08:00 |
|
bookworm
|
8f6c53ec99
|
fix(v3.0.6): 启动器四连击 bug 根治 + 分发版阈值调整
真实用户报障驱动, 4 个 P0 闭环:
B1: wt.exe ';' 切 tab 误报 → -EncodedCommand Base64-UTF-16LE
B2: -d '%~dp0' 尾 \ 配 " 转义引号 → -d '%CD%' 无尾反斜杠 (cd /d 已切入)
B3: 子 pwsh 继承老 PATH 致 claude.exe not found → Base64 首行强制重载
$env:Path = Machine + ';' + User, 找不到 claude 还附带 PATH 诊断
B4: install.ps1 [8/9] Skills>50 Hooks>10 阈值误报脱敏分发版残缺
→ Skills>=10 Hooks>=3 匹配 bookworm-portable-config.git 实际规模
新增工具 tools/gen-launcher-bats.ps1: 单一明文源 → Base64 → 两 bat 自动同步,
含字符集 + 长度 + round-trip PARSE 三重 health check, 以后改启动逻辑
只需改 $plainScript 一处.
向后兼容: DPAPI 凭证语义 round-trip 不变, 老快捷方式继续可用,
Installer banner v1.5 → v1.6, BWVersion 3.0.5 → 3.0.6.
|
2026-04-24 20:47:16 +08:00 |
|
bookworm
|
55ac953cd8
|
feat(v3.0.5): winget 三层 fallback + 截图助手集成 + 启动器自检
4 组改动闭环用户报障:
[B1] Node.js + Git MSI/EXE 直链兜底 (修复: 只有 PS7 有 MSI 兜底, Node/Git
winget 失败后无后路, 新机装 Bookworm 必挂). 新增统一分派:
MsiUrl → msiexec /quiet /qn, ExeUrl → Inno Setup /VERYSILENT.
[B2] install.ps1 -StartOnly 依赖缺失改 GUI 弹窗 + auto-setup.ps1 Phase 1
失败时清除桌面僵尸快捷方式 (启动Bookworm.lnk / Bookworm.lnk /
更新Bookworm.lnk). 根治 'claude.exe not found' 闪退.
[F1] winget 检测醒目提示: 不可用时弹 Information 列出 Store / GitHub /
系统要求 / 备用方案, 但不阻断安装流程.
[F2] Phase 1 手动安装清单重构: 每依赖列 ManualUrl + 步骤 + 重启 EXE 指引 +
排查清单.
[F3+F4] 新增 Phase 5.5 截图粘贴助手部署:
- profile sentinel 追加式注入 (# BW_CLIP_START/END, 重装精准替换)
- 截图 Toast 关闭 + 原值备份到 HKCU:\Software\Bookworm\ToastBackup
(卸载可还原, Q2=B 方案)
$BWVersion = 3.0.5, EXE 198144 → 209920 bytes (+11776).
向后兼容: 老用户已装依赖全跳过, profile 无 BW_CLIP 块首次追加.
|
2026-04-24 18:59:16 +08:00 |
|
bookworm
|
85f2bcd52f
|
fix(auto-setup): v3.0.4 Key 验证 + 默认模型 + 指纹 Win11 兼容
茶师兄 Win11 机器真实报障驱动 4 Bug 闭环:
B1: 移除 change-key.js 优先验证分支 (硬编码 haiku → sonnet-only 套餐必 403)
统一走 Test-ApiKey (多模型 fallback + 三值错误分类).
B2: 默认 ANTHROPIC_MODEL 兜底 opus-4-7 → sonnet-4-6 (基础套餐覆盖面最广).
Test-ApiKey 成功时记录 $script:LastValidatedModel → Phase 4 末尾覆盖为真·可用模型.
B4: stderr 不再 2>&1 | Out-Null. PASS/AUTH_FAIL/NETWORK_ACCEPT 三态记录到
$env:TEMP\bw-phase4-validate.log 并附失败模型列表便于报障.
B3 在 bookworm-portable-config.git c46f0b6 解决 (fingerprint.js wmic→CIM).
Test-ApiKey 候选顺序: sonnet-4-6 > opus-4-7 > opus-4-6 > thinking 变体.
401/403 不再立即 return false, 改累积到 $authFailModels, 全候选失败才判 false.
|
2026-04-22 20:05:56 +08:00 |
|
bookworm
|
235839a880
|
feat: 桌面快捷方式命名统一「启动Bookworm」+「更新Bookworm」
- install.ps1 / auto-setup.ps1 的「Bookworm.lnk」改名为「启动Bookworm.lnk」
- 顺序反转: 先建新 lnk -> 验证存在 -> 再删老 lnk (防空窗)
- install.ps1 的 -StartOnly 分支也调用 New-DesktopShortcuts,
让只从老 Bookworm.lnk 启动的老用户也能自动完成命名迁移
- 所有分支幂等, Test-Path 守门, 多次运行不报错
用户端生效路径:
- 新用户装 Bookworm-Setup.exe (195584 B, 已含新 auto-setup) -> 直接建新 lnk
- 老用户下次启动 -> bat 的 git pull 拉此 commit 的 install.ps1 -> 自动迁移
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-04-22 01:02:43 +08:00 |
|
Bookworm Admin
|
13337134bc
|
v3.0.3: Win10 PS7 MSI fallback (when winget absent/outdated)
Phase 1 依赖循环增加 MSI 直链兜底:
- winget 失败 or 缺席 -> Invoke-WebRequest 拉 PS 7.4.6 MSI
- 强制 TLS 1.2 (Win10 默认 TLS 1.0 访问 GitHub 会断)
- msiexec /quiet /qn ADD_PATH=1 静默装
- 装后补 PATH (PS7 装完默认不在 PATH 直到重登)
同时将 PowerShell 7 改为 Core=true, winget/MSI 都失败会明确提示用户.
背景: 第二/第三台 Win10 开机一直用 PS 5.1, 原因 pwsh 未装 (winget 静默失败),
bat 路径 3/4 fallback 到 5.1, Unicode/TUI 体验差.
|
2026-04-21 14:31:32 +08:00 |
|
Bookworm Admin
|
18210ac497
|
v3.0.2: fix 3-machine login loop (ExecutionPolicy + WM_SETTINGCHANGE broadcast + .claude.json onboarding pre-fill)
3 台机实测发现 5 个串联坑, 源头修 3 处:
1. auto-setup.ps1 Phase 1: Set-ExecutionPolicy CurrentUser RemoteSigned
修复: 管理员 PS 下 claude.ps1 因 Restricted 被拦
2. auto-setup.ps1 Phase 4: SendMessageTimeout WM_SETTINGCHANGE 广播
修复: User scope env 不自动同步到已打开 explorer/shell
3. auto-setup.ps1 + Setup.sh Phase 4: 预填 .claude.json
{hasCompletedOnboarding:true, customApiKeyResponses.approved:[<sk-前20字符>]}
修复: Claude Code v2.0.1 登录选择页两个选项都走 anthropic.com OAuth,
国内连不上. 预填标记后首次 claude 直接进对话提示符.
配套 Gitea 'bookworm-boot/启动Bookworm.bat' (a6f9cf7) 已清理 &$env:ANTHROPIC_MODEL call-operator 误解析.
|
2026-04-21 14:22:48 +08:00 |
|
Bookworm
|
080ff71653
|
sync: v3.0.1 auto-setup.ps1 + Setup.sh (P0 fixes)
|
2026-04-21 01:54:42 +08:00 |
|
bookworm
|
1aa2c3e6ef
|
feat: v3.0.0-beta - 切换到 portable-config 脱敏仓库 + Phase 4.5 License 激活
|
2026-04-18 23:04:40 +08:00 |
|
bookworm
|
1b97332239
|
fix: v2.3.1 Phase 4 统一调用 change-key.js
- Win auto-setup.ps1: 优先管道到 change-key.js, 回退 Test-ApiKey
- Mac Bookworm-Setup.sh: 凭证 printf 管道传 change-key.js, 不再重复 export
- 统一验证逻辑, 避免双实现漂移
|
2026-04-17 02:25:40 +08:00 |
|
bookworm
|
f3a58e1c6d
|
feat: v2.3.0 - Phase 4 改为用户直接输入中转站凭证
Win: Show-ApiKeyDialog GUI + Test-ApiKey 验证
Mac: 调用 ~/.claude/change-key.js (统一逻辑)
两者都保留旧授权码流程作为向后兼容
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-04-17 00:22:17 +08:00 |
|
bookworm
|
b2d5e4aa7b
|
fix: v2.2.4 - fallback 补齐 supabase (22/22 对齐)
|
2026-04-13 18:37:05 +08:00 |
|
bookworm
|
4dc5f8e0f8
|
feat: v2.2.3 - 启动终端优先 Windows Terminal > pwsh > cmd
检测 wt.exe (Windows Terminal) 可用则优先使用 (现代UI/全屏/标签页),
其次 pwsh (PowerShell 7), 最后降级 cmd.exe。
解决 Win10 用户只能看到老旧蓝色终端的问题。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-13 17:40:02 +08:00 |
|
Bookworm Bot
|
675606b5c4
|
fix(auto-setup): npm/npx Start-Process 兼容 Windows
Windows 上 Start-Process "npm" 会匹配到无扩展名的 Unix shell 脚本
而非 npm.cmd,导致 "%1 不是有效的 Win32 应用程序" 错误。
在 Run-CmdWithUI 函数入口自动将 npm/npx 映射为 npm.cmd/npx.cmd,
一劳永逸覆盖所有调用点。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-12 13:59:54 +09:00 |
|
bookworm
|
9d1cef0331
|
fix: v2.2.2 - Python/pwsh 降为可选依赖 + quick-start 安装前准备
- Python 从核心 deps 移除 (只在 uvx MCP 需要)
- PowerShell 7 降为可选 (系统 PS 5.1 可替代)
- 非核心依赖 winget 不可用时不弹阻断对话框
- quick-start.html 新增"安装前准备"区块 (ExecutionPolicy + 手动装依赖)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 23:24:15 +08:00 |
|
bookworm
|
edee7b777e
|
fix: v2.2.1 - Top5 鲁棒化修复 (F-09/F-12/F-17/F-19/F-22)
F-22: Phase 4 解密成功后调用 Save-SecretsToCache, 下次免授权码
F-12: 解密结果写入 env 前校验白名单 + 长度 < 512
F-19: 冲突检测改逐行匹配, 修复 Out-String 多行正则失效
F-09: boot 仓库 clone 始终弹凭证对话框, 不依赖 $cred 残留
F-17: uvx tool install 参数顺序修正 (包名在前 --python 在后)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 22:29:04 +08:00 |
|
bookworm
|
50d3ef0377
|
fix: v2.2.0 - 彻底修复 git pull 失败 + MCP 注入鲁棒化
4 个根因全修:
1. Phase 3 凭证缓存: clone 后 git credential approve 写入 Credential Manager
2. Phase 3 冲突清理: pull 前 reset --hard 清除运行时文件冲突
3. Phase 3 认证重试: pull 失败时弹窗重输凭证 + 缓存
4. Phase 5 fallback: inject-mcp.js 不存在时用内嵌 22 MCP 脚本
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 22:00:48 +08:00 |
|
bookworm
|
15449c86d8
|
feat: v2.1.0 - 同步 22 MCP + 简化 Phase 5 注入逻辑
Phase 5 MCP 注入改为直接调用 ~/.claude/inject-mcp.js (从 config 仓库),
移除复杂的 PowerShell JSON 提取+临时脚本生成逻辑。
inject-mcp.js 包含完整 22 个 portable MCP server 配置。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 21:24:50 +08:00 |
|
bookworm
|
aee3cc708b
|
fix: v2.0.3 - MCP 注入改用临时 JS 文件执行 (避免 -e 参数解析)
v2.0.2 的 node -e + -- 参数传递在 PowerShell 下 argv 偏移导致 mcpServers 为空。
改为: 将合并脚本写入 %TEMP%/bw-inject-mcp.js 再 node 执行, 绕过所有参数解析陷阱。
新增 inject-mcp.js 独立脚本供手动执行。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 21:15:53 +08:00 |
|
bookworm
|
6168279f78
|
fix: v2.0.2 - Node.js 安全合并 .claude.json (保留现有字段)
v2.0.1 的 PowerShell 合并会覆盖 .claude.json 现有字段 (installMethod/isLoggedIn),
导致 Claude Code 重新登录后又把 mcpServers 覆盖掉。
改用 Node.js JSON.parse/stringify 做精确字段合并:
- 读取现有 .claude.json 全部字段
- 只注入/更新 mcpServers 键
- 过滤 __comment 键
- 保留 installMethod, isLoggedIn, completedOnboarding 等
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 20:27:59 +08:00 |
|
bookworm
|
f262f1bd21
|
fix: v2.0.1 - MCP 写入 ~/.claude.json (Claude Code v2.1+ 正确位置)
settings.json 中的 mcpServers 在 Claude Code v2.1+ 不再被读取。
Phase 5 现在从渲染后的 settings.json 提取 mcpServers 写入 ~/.claude.json,
支持与用户已有配置合并。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 20:16:43 +08:00 |
|
bookworm
|
7d0e4edd16
|
fix: v2.0.0 - 修复 MCP 加载 + HOME 路径 JSON 转义
P0: mcpServers 已合并到 settings.template.json (settings.local.json 不被加载)
P2: {{HOME}} 替换改用正斜杠, 避免 \U \l 等非法 JSON 转义
新增: diagnose-tooluse.js 中转站工具调用诊断脚本
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 18:01:40 +08:00 |
|
bookworm
|
123db247a7
|
feat(v1.9.0): 启动时自动 pull 配置更新
|
2026-04-10 12:41:17 +08:00 |
|
bookworm
|
722190404a
|
fix: 闪屏后启动带 Bookworm 标题的终端窗口
|
2026-04-10 12:29:54 +08:00 |
|
bookworm
|
38b2a2d022
|
feat(v1.8.0): 祝贺闪屏动画替代 MsgBox + cmd 黑窗
安装成功后的体验:
- 移除: MsgBox "安装成功" 弹窗 + cmd.exe /k claude 黑窗口
- 新增: 品牌闪屏 (深色底 + 蓝紫装饰条 + 绿色大勾)
- 淡入动画 (300ms) → 停留 2.5s → 淡出 (250ms)
- 显示: 版本号 + Skills/Hooks 数量 + "善读者,必善造"
- 底部提示 "双击桌面 Bookworm 图标即可启动"
- 不再自动弹出 cmd 窗口 (用户通过桌面快捷方式启动)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 12:28:51 +08:00 |
|
bookworm
|
23d4577743
|
fix(v1.7.1): Phase 7 闪退修复 + 7a/7b/7c 防崩
|
2026-04-10 12:18:22 +08:00 |
|
bookworm
|
7dd72082b7
|
feat(v1.7.0): 全自动环境加固 — claude alias + OAuth 清理 + 冲突修复
|
2026-04-10 12:08:16 +08:00 |
|
bookworm
|
c4177c21aa
|
fix(installer): 授权码跳过改为强制确认 + 前置提示
问题: 旧版用户重装时, 缓存过期/格式不兼容 → 弹授权码
→ 用户以为已装过点"取消" → 凭证空 → Claude 不能用
修复:
1. 弹授权码前先 MsgBox 解释"需要授权码才能使用"
2. 点"取消安装"时二次确认"没有授权码将无法使用,确定跳过?"
3. 三级自动检测 (User env → DPAPI cache → 旧明文 cache)
能自动恢复的不弹窗, 都恢复不了才要求输入
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 11:20:33 +08:00 |
|
bookworm
|
7114f4e7a8
|
feat: 版本号 v1.6.0, 标题栏/弹窗/EXE 属性统一显示, build.ps1 自动读取
|
2026-04-10 11:11:13 +08:00 |
|
bookworm
|
d20d9d91a7
|
feat(installer): 三级凭证自动检测, 重装免输授权码
Phase 4 凭证加载优先级:
1. User 环境变量 (上次安装已永久写入) → 直接加载, 完全跳过授权码
2. Registry DPAPI 缓存 → 加载 + 写 User 环境变量
3. 授权码输入 → 解密 + 写 User 环境变量
解决: 用户重装/升级时不再被要求重新输入授权码,
旧凭证自动检测并沿用. "全自动检测+修复"闭环.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 11:07:54 +08:00 |
|
bookworm
|
b58538bbae
|
fix: 旧版明文缓存兼容 + 自动迁移 DPAPI + 写 User 环境变量
|
2026-04-10 11:05:25 +08:00 |
|
bookworm
|
105a328120
|
fix(installer): 凭证写入用户级环境变量 (永久生效)
根因: auto-setup.ps1 用 DPAPI 缓存凭证, 但 install.ps1 (bat 调用)
未同步更新, 导致桌面快捷方式启动时凭证无法加载.
修复: Phase 4 解密成功后同时写入 Process + User 级环境变量.
用户在任何终端直接输入 claude 即可启动, 无需通过 bat 启动.
移除 "缓存至 23:59" 选项 (不再需要, User 环境变量本身就是持久的).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 10:54:10 +08:00 |
|
bookworm
|
6275ce55dc
|
fix(installer): bash PATH 自动修复 — Claude Code 核心工具依赖
Git for Windows 默认只把 cmd\ 加入 PATH (含 git.exe),
但 bash.exe 在 bin\ 目录, 导致 Claude Code 的 Bash 工具不可用.
Phase 1 新增: 安装 Git 后自动检测 bash.exe 位置,
将 Git\bin 永久加入用户 PATH. 搜索 4 个常见安装路径.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 10:33:38 +08:00 |
|
bookworm
|
385d3de57f
|
security(installer): 9 BLOCKER 修复 — 三路审计验收
基于 code-reviewer + red-team-attacker + red-team-logic 三路并行审计:
B1: 日志脱敏 — Run-CmdWithUI 的 Bw-Log 对 URL 做 ://***@ 替换
B2: DPAPI 加密注册表 — Save/Get-CachedSecrets 用 ProtectedData.Protect/Unprotect
B3: credential.helper store → manager (Windows Credential Manager, DPAPI)
B4: 单实例 Mutex — Global\BookwormPortableSetup, 重复启动弹提示退出
B5: URL-encode git 凭证 — EscapeDataString 处理 @/#/% 等特殊字符
B6: 移除 OpenSSL fallback — BWENC1 格式与 openssl enc 不兼容, Node.js 为硬性要求
B7: validAttempts++ 后移 — 文件不存在不消耗尝试次数, 避免用户误锁
B8: ErrorActionPreference try/finally — 防止 uv 安装异常后全局静默吞错
B9: Registry 加载白名单 — CacheAllowedKeys 防止 PATH/COMSPEC 注入
V-04: Get-Random → GetTempFileName (原子创建+加密随机, 防并发碰撞)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 01:17:23 +08:00 |
|
bookworm
|
8a6611d96e
|
ux(installer): 双专家审计修复 — P0 取消按钮 + P1 表单优化 + 品牌视觉
基于 UX Auditor + CTO Reviewer 两路并行审计报告的交叉修复:
P0 — 进度窗口逃生通道 (UX F1):
- ControlBox=$true, X 按钮触发 "取消安装?" 确认
- $BWInstallDone 标记: Phase 7 完成后 X 不再弹确认
P1 — 授权码 "跳过" 按钮误导 (UX F6):
- "跳过" → "取消安装", 明确传达后果
P1 — Gitea 空密码静默通过 (UX F10):
- 添加 lblError 红字验证: "用户名和密码不能为空"
- btnOK 改为手动 Click 事件验证, 不再自动 DialogResult
P1 — Gitea 对话框缺少上下文 (UX F11):
- 新增说明: "用于下载 Bookworm 配置文件,由管理员提供"
P2 — 内部术语暴露 (UX F13):
- "crypto-helper.js 缺失" → "Bookworm 启动工具包下载失败" + 3 点排查提示
P2 — 品牌视觉统一 (UX Visual):
- 进度窗口: 白底 + Bookworm 蓝紫(#5865F2) Phase 标签 + 右下角计时器
- TopMost=$false (不遮挡其他窗口)
- ProgressBar Style=Continuous (平滑)
- 全局计时器 $BWStartTime + $BWElapsedLabel "Nm Ns" 实时显示
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 01:03:36 +08:00 |
|
bookworm
|
7d60911f65
|
perf(installer): 消除全部 UI 冻结 + Write-Host 清零
## P0: 子进程 UI 阻塞 → 非阻塞轮询
- 新增 Wait-ProcessWithUI: 替代所有 WaitForExit(), 每 200ms
泵 DoEvents(), 进度窗口保持响应, 显示等待计时
- 新增 Run-CmdWithUI: 替代 & cmd 2>&1 | ForEach-Object 模式,
所有子进程输出走临时文件→日志, 不阻塞 UI
## P1: Phase 3 git clone/pull 无超时 → 带超时 + UI 泵
- 9 处 git 调用全部改为 Run-CmdWithUI (120s/180s 超时)
- 消除 Push-Location/Pop-Location, 改用 git -C <dir>
## P1: Phase 1 winget/npm 阻塞 → 带超时 + UI 泵
- winget install: 5 分钟超时 + 进度状态显示
- npm i -g: 2-3 分钟超时 + 进度状态显示
- Claude Code npm install: 3 分钟超时
## P2: Write-Host 归零
- 27 处非注释 Write-Host 全部替换为 Bw-Log + Update-Progress-SubStatus
- EXE 在 PS2EXE -NoOutput 下不再有任何静默丢失的输出
验证: 7/7 补丁字符串确认编译; Write-Host 仅剩 1 处 (注释内)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-10 00:54:28 +08:00 |
|
bookworm
|
17c600fe93
|
feat(installer): GUI 进度窗 + uv 三层 fallback + 桌面专用图标 + 静默化
修复 v1.5.1 用户实测发现的两个体验问题:
1. **uv 安装失败 + RemoteException 弹窗** (auto-setup.ps1)
- 旧逻辑: python -m pip install uv (网络/权限/$ErrorActionPreference=Stop 易触发)
- 新逻辑: 三层 fallback (winget → Astral 官方脚本 → pip), 全程 SilentlyContinue
- 失败仅写入 $TEMP/bookworm-uv-install.log, 不阻断不弹窗 (uv 是可选依赖)
2. **PS2EXE -NoConsole 把 Log-X 弹窗化** (build.ps1)
- 加 -NoOutput + -NoError, 所有 Write-Host 静默吞掉
- 用户不再被 70+ 个 [!] 弹窗轰炸
3. **静默后无进度反馈 → GUI 进度窗口** (auto-setup.ps1)
- 新增 Show-ProgressForm/Update-Progress/Update-Progress-SubStatus/Close-ProgressForm
- 顶部常驻 Form: 标题 + Phase 标签 + 当前状态 + 进度条 + 日志路径
- 所有 Log-X 改写日志文件 ($TEMP/bookworm-setup-{ts}.log) + 更新进度窗口
4. **桌面专用图标** (auto-setup.ps1 + bookworm-desktop.ico)
- 从 og-image.png 自动检测蓝紫渐变 B 圆 → 圆形 alpha mask → 7 尺寸 ICO (86 KB)
- New-DesktopShortcuts 增加 IconLocation, 桌面快捷方式显示 Bookworm 主图标
- 主图比 favicon 神经螺旋更突出, 48px 也清晰可辨
5. **Phase 7 安装完成 banner**: Write-Host → Show-MsgBox
6. **Claude Code 启动**: 主进程启动 → Start-Process cmd /k claude (新窗口)
构建验证: 7/7 补丁字符串 (Show-ProgressForm/BWLogFile/winget/astral/
bookworm-desktop.ico/IconLocation 等) 经 EXE 字符串扫描确认编译进 build artifact.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-07 20:02:53 +08:00 |
|