- 人工智能
- AI 应用
- 桌面应用
- 代码智能体
- MCP Clients
【免费下载链接】cc-haha
Local-first cross-platform desktop workspace for Claude Code / agents: multi-agent, Git worktrees, code diffs, skill marketplace, multi-model, Computer Use, task-aware desktop pets, with WeChat, Feishu, DingTalk, Telegram, WhatsApp and H5 access.
v0.4.8 是 Claude Code Haha 在 v0.4.7 之后的桌面工作流、Provider 兼容性与安全加固版本。本版本带来 Grok 官方 OAuth 登录、Claude Code Auto 权限模式、内联 Diff 评审、对话导航和推理强度滑杆五大能力,同时修复了 Windows 升级后数据目录丢失、断线重连后持续"思考"、受限端口启动失败和权限操作被遮挡等一批实际问题。阅读完本文,你将掌握 v0.4.8 各核心特性的配置方式与实现原理,理解 Windows 升级数据保护机制和 H5 访问隔离策略的底层设计。
版本定位与 Highlights 总览
相比 v0.4.7,v0.4.8 让代码审阅、长对话定位和模型推理强度调整变得更直接;Windows 安装器会在升级前识别并保护旧安装目录中的用户数据,诊断与 Doctor 流程也补齐了脱敏、并发写入、损坏日志和安全修复边界。本地服务、H5 访问和远程预览进一步隔离,减少了跨来源请求和预览页面获得桌面权限的风险。
本版本的六大核心亮点:
- Grok 官方登录:新增 xAI Grok 官方 OAuth 登录、token 刷新、动态模型目录和会话运行支持,内置 Grok 4.5 与 Composer 2.5 fallback,可在桌面端直接完成登录、选模和退出。
- Claude Code Auto 模式:权限选择器新增 Auto 模式,启用前会明确提示风险;运行时会审查工具调用和提示词注入,自动执行其认为安全的操作并阻止高风险操作。
- 内联 Diff 评审:工作台新增完整 Diff 审阅界面,支持语法高亮、旧/新行定位、单行或连续行评论,并把评论和代码引用带回聊天输入框。
- 对话与推理控制升级:长对话新增右侧导航目录;模型推理强度改为可拖动、可键盘操作的滑杆,并根据当前 Provider / 模型保留可用档位和会话选择。
- Windows 升级数据保护:NSIS 安装器会在卸载旧版本前识别、校验并恢复安装目录中的历史数据,避免服务商、会话、Skills、记忆或自定义数据目录随升级被移除。
- 桌面安全边界收紧:本地服务请求加入独立访问凭证,H5 / 反向代理流量与桌面可信流量分开判定;远程预览使用隔离 session,并默认拒绝摄像头、麦克风、通知等权限。
Grok 官方 OAuth:从登录到会话运行的全链路支持
v0.4.8 为 Grok 提供了与 Claude / OpenAI 官方登录同级的完整 OAuth 能力,覆盖登录、凭证存储、自动刷新、动态模型目录与运行环境注入。
Provider 预设与运行环境注入
在服务端,Grok Official 以预设 Provider 的形式注册,定义位于 src/server/services/grokOfficialProvider.ts:
export const GROK_OFFICIAL_PROVIDER: SavedProvider = { id: GROK_OFFICIAL_PROVIDER_ID, presetId: GROK_OFFICIAL_PROVIDER_ID, name: GROK_OFFICIAL_PROVIDER_NAME, // 'Grok Official' apiKey: '', authStrategy: 'dual_dummy', baseUrl: 'https://cli-chat-proxy.grok.com/v1', apiFormat: 'openai_chat', runtimeKind: 'grok_oauth', models: { main: GROK_DEFAULT_MAIN_MODEL, haiku: GROK_DEFAULT_HAIKU_MODEL, sonnet: GROK_DEFAULT_SONNET_MODEL, opus: GROK_DEFAULT_MAIN_MODEL, }, modelContextWindows, }authStrategy: 'dual_dummy'表明 API Key 并非核心凭证,真正的鉴权由 OAuth token 承担;runtimeKind: 'grok_oauth'标记其运行方式。当会话启动时,buildGrokOfficialRuntimeEnv()(src/server/services/grokOfficialProvider.ts)会向子进程注入一组环境变量,包括 OAuth 凭证文件路径(CC_HAHA_GROK_OAUTH_PROVIDER、GROK_OAUTH_FILE_ENV_KEY)、图像生成配置(IMAGE_GENERATION_PROVIDER_KIND、IMAGE_GENERATION_PROVIDER_ID、IMAGE_GENERATION_MODEL)、模型上下文窗口 JSON(MODEL_CONTEXT_WINDOWS_ENV_KEY),以及ANTHROPIC_MODEL等 Claude 兼容别名映射——这就是"官方 OAuth 贯通 CLI、桌面端、会话创建、WebSocket 恢复"的底层支撑。
OAuth 流程:PKCE、回调监听与凭证安全存储
登录流程实现在 src/server/services/hahaGrokOAuthService.ts:
- PKCE 与随机数:
startSession()依次生成codeVerifier、state、nonce(第 114-141 行),其中codeVerifier用于授权码换取 token 时的 PKCE 校验,state用于防 CSRF,nonce用于 ID token 校验。 - 本地回调监听:通过
AuthCodeListener在127.0.0.1上动态分配端口监听/callback,构造redirectUri并拼接授权 URL;会话 TTL 为 10 分钟(SESSION_TTL_MS = 10 * 60 * 1000),超时自动关闭。 - 浏览器回调与结果页:回调成功后展示"Grok Login Successful"页面并 3 秒后自动关闭;失败则渲染带错误消息的失败页(第 51-59 行)。
- 凭证落盘:
saveTokens()采用"临时文件 + 原子 rename"策略,并以0o600权限写入,确保只有当前用户可读;路径为CLAUDE_CONFIG_DIR(默认~/.claude)下的cc-haha/grok-oauth.json(第 70-73 行)。 - 自动刷新:
ensureFreshTokens()在读取 token 后检查expiresAt,过期且存在refreshToken时调用刷新函数换新并回写;刷新失败会记入oauthRefreshLog(第 196-225 行)。 - 代理兼容:
getTokenFetchOptions()会读取网络设置,把代理地址(getNetworkProxyUrl)和 AI 请求超时(aiRequestTimeoutMs)透传给 token 获取流程,保证在代理环境下同样可用。
服务端路由在 src/server/router.ts 注册为haha-grok-oauth分支,并有对应测试覆盖 src/server/tests/haha-grok-oauth-api.test.ts 与 src/server/tests/haha-grok-oauth-service.test.ts。
动态模型目录与 fallback
Grok 模型目录定义在 src/services/grokAuth/models.ts,v0.4.8 内置的模型能力信息包括:
| 模型 ID | 名称 | 上下文窗口 | 推理强度支持 |
|---|---|---|---|
grok-4.6 | Grok 4.6 | 500,000 | 支持,档位xhigh/high/medium/low |
grok-4.5 | Grok 4.5 | 500,000 | 支持,档位high/medium/low |
grok-composer-2.5-fast | Composer 2.5 | 200,000 | 不支持 |
resolveGrokModel()还支持default、grok、haiku、sonnet、opus等 Claude 兼容别名(src/services/grokAuth/models.ts),并把haiku/sonnet别名映射到 Grok 默认模型,这是"内置 Grok 4.5 与 Composer 2.5 fallback"能够无缝接管的机制。getGrokRuntimeModelCatalog()(src/services/grokAuth/modelCatalog.test.ts 有对应测试)支持运行时动态加载模型目录,使桌面端"动态模型目录"和会话运行成为可能。
Claude Code Auto 权限模式:分类器驱动的自动审批
Auto 模式是 v0.4.8 在权限体系上的重要新增:权限选择器新增 Auto 模式,启用前会明确提示风险;运行时会审查工具调用和提示词注入,自动执行其认为安全的操作并阻止高风险操作。
四类分类器规则
Auto 模式的核心是 AI 分类器,用户规则分为四个类别(定义于 src/cli/handlers/autoMode.ts 的系统提示说明中):
- allow:分类器应自动批准的动作;
- soft_deny:分类器应拦截(需用户确认)的动作;
- hard_deny:分类器必须无条件拦截的动作;
- environment:帮助分类器做决策的用户环境上下文。
用户可在设置文件的autoMode.{allow, soft_deny, hard_deny, environment}下编写自定义规则。规则采用按段 REPLACE 语义:配置了某段(即使为空数组)即替换对应默认段,$defaults标记可在当前位置展开默认规则,只有完全未配置的段才继承完整默认列表(src/cli/handlers/autoMode.ts)。
CLI 子命令
Auto 模式相关 CLI 命令(动态导入自claude auto-mode ...,实现见 src/cli/handlers/autoMode.ts):
claude auto-mode defaults:输出默认分类器规则(allow/soft_deny/hard_deny/environment四段 JSON)。claude auto-mode config:输出生效配置——用户设置存在时用设置值,否则回落到外部默认;同样按 REPLACE 语义合并。claude auto-mode critique:用主循环模型(或--model指定模型)审查用户自定义规则的清晰度、完整性、冲突和可执行性,并给出改进建议;无自定义规则时提示先添加规则。
分类器本体在 src/utils/permissions/yoloClassifier.ts(1524 行),其系统提示通过feature('TRANSCRIPT_CLASSIFIER')在构建期把.txt提示模板内联为字符串,运行时则动态解析分类器返回结果。相关测试覆盖见 src/cli/handlers/autoMode.test.ts、src/cli/print.autoMode.test.ts 与 src/services/tools/toolHooks.autoMode.test.ts。
贯通性与运行约束
Auto 模式贯通 CLI、桌面端、会话创建、WebSocket 恢复、权限分类器和持久化设置(如AutoModeOptInDialog启用提示见 src/components/AutoModeOptInDialog.tsx)。v0.4.8 同时修复了 Auto 模式切换需要等待数秒、从跳过权限切换时可能触发额外重启,以及首次确认状态未正确保留的问题(#978);并保持"活跃 turn 期间禁止切换权限"的约束,避免运行状态与界面选择不一致。
内联 Diff 评审:工作台级的代码审阅体验
工作台新增完整 Diff 审阅界面,让代码评审不必跳出会话:
- 语法高亮:Diff 内容按语言高亮,v0.4.8 让高亮效果更接近 Codex(#1004)。
- 旧/新行定位:清晰区分变更前后行,方便逐行核对。
- 评论系统:支持单行或连续行评论,评论与代码引用会带回聊天输入框,形成"评审 → 讨论 → 修改"闭环。
- 更紧凑的布局:工作台改为更紧凑的文件 / Diff 审阅布局,支持变更文件筛选、预览标签、文件状态、代码选择和评审评论引用。
本版本同时修复了 Diff 审阅中语法高亮、文件状态、行选择、折叠后选择失效和代码引用卡片丢失等问题(#1004)。
对话导航与推理强度滑杆
长对话导航目录
对话导航会从用户消息生成可扫描目录,支持快速跳转,并在靠近导航区域时提供更清楚的交互反馈。修复项包括导航与输入框、消息内容和工作台面板之间的对齐、遮挡及窄窗口布局问题(#782)。
推理强度滑杆
模型推理强度从固定选项改为可交互滑杆:
- 支持鼠标拖动、点击选择、方向键、Home / End 和无障碍状态;
- 按不同模型暴露实际支持的档位(如 Grok 4.5 为
high/medium/low,Grok 4.6 增加xhigh,Composer 2.5 不支持推理强度); - 根据当前 Provider / 模型保留可用档位和会话选择,切换模型后档位会正确对齐(修复 #1007)。
对应 CLI 入口为effort命令(src/commands/effort/effort.tsx、src/commands/effort/index.ts),桌面端通过ModelPicker、EffortCallout等组件呈现(src/components/ModelPicker.tsx、src/components/EffortCallout.tsx)。
Windows 升级数据保护:NSIS 安装器的安全迁移
Windows 用户最关心的修复之一是"升级可能删除安装目录内历史配置和会话数据"的问题(#959 / #973 / #1000)。v0.4.8 的 NSIS 安装器会在卸载旧版本前识别、校验并恢复安装目录中的历史数据,保护对象包括服务商配置、会话、Skills、记忆和自定义数据目录。恢复流程会校验来源、用户身份和复制结果,遇到歧义时停止安装而不是猜测迁移;没有旧目录数据的默认模式重装不会被恢复保护误拦截。
安装器在删除旧版本前会检查需要恢复的数据:如果检测到仍在运行的旧版应用,或无法安全判断的数据目录,会保留旧版本和原数据并提示处理后重试。
配套的发布保障包括:发布 workflow 新增 Windows 历史数据恢复脚本自检,以及编译后安装器的全新安装 / 默认模式重装 smoke(见 desktop/scripts/windows-installer-smoke.ps1),确保安装包在发布前覆盖关键升级保护路径。
桌面安全边界收紧:H5 访问与远程预览隔离
v0.4.8 对本地服务访问做了系统性隔离,核心实现在 src/server/h5AccessPolicy.ts。
三类请求判定
classifyH5Request()将请求分为三类(第 248-268 行):
- local-trusted:本地可信流量;
- internal-sdk:SDK 流量(
/sdk/前缀); - h5-browser:H5 浏览器流量。
关键判定逻辑:
- 独立访问凭证:桌面 shell 注入的进程凭证是最强凭据(
localAccessAuthorized === true直接判为本地可信),用于区分 Electron 渲染进程与任意环回进程提供的页面(第 191-197 行);同时 token 的缺失不会降级环回信任,避免 OAuth 成功页、/preview-fs链接和curl等合法本地流量被误拦。 - 代理痕迹识别:
PROXY_TRACE_HEADERS枚举了forwarded、x-forwarded-for、x-forwarded-host、x-forwarded-proto、x-real-ip、via等头,命中即拒绝本地信任判定,修复了"远程或带代理痕迹的请求可能被误判为本地可信请求"的问题(第 10-17 行)。 - Fetch Metadata 校验:
isCrossSiteSubresource()利用Sec-Fetch-Site/Sec-Fetch-Mode区分跨站子资源与真实本地导航——跨站子资源(<img>、<script>、no-cors fetch)即使不带 Origin 也不会被当作本地导航;不带 Fetch Metadata 的 curl、adapter、CLI 子进程仍保持可信(第 173-181 行)。 - 同源文件资产边界:
isSameOriginFilesystemAsset()只放行"同源 + 静态资源目标 + Referer 文件系统作用域一致且不越级"的 GET/HEAD 请求,预览 HTML 可加载脚本、样式、字体和媒体,但普通 fetch/XHR、导航及非文件系统能力均不在此例外内(第 115-163 行)。
高风险路径的凭证门槛
- H5 访问控制面:启用远程访问、铸造/吊销 H5 token 的控制面(
/api/h5-access相关路径)要求进程凭证,仅环回不足以授权——同一机器上的其他浏览器或脚本不能把用户会话发布到网络(requiresLocalAccessCredential(),第 364-373 行)。 - 本地凭证独占路径:
LOCAL_CREDENTIAL_ONLY_PATHS收录了会单请求不可逆销毁用户数据的端点(如/api/settings/session-cleanup),即使 H5 token 被窃取也不能清空机器历史(第 335-350 行)。 - 路径规范化防绕过:
normalizeApiPath()按路由真实拆分方式(split('/').filter(Boolean))比较路径,/x/y/、//x/y、/x/y无法通过改写 URL 形态绕过受保护端点(第 344-346 行)。
远程预览方面,v0.4.8 使用隔离 session,并默认拒绝摄像头、麦克风、通知等权限,避免预览页面继承桌面 session 权限。对应测试见 src/server/tests/h5-access-policy.test.ts 与 src/server/tests/h5-access-auth.test.ts。
修复清单与诊断体系加固
关键修复速览
| Issue | 修复内容 |
|---|---|
| #1002 | WebSocket 重连后遗留的 thinking 状态不再继续显示"已思考"并消耗 token |
| #932 | Markdown 预览或其他浮层不再遮挡权限操作按钮,审批入口保持可见 |
| #961 | 避开浏览器会阻止访问的受限本地服务端口,桌面端 / H5 均可连接本地服务 |
| #959 / #973 / #1000 | Windows 升级保护并恢复旧安装目录中的用户数据 |
| #978 | Auto 权限模式切换与确认流程修复 |
| #1004 | Diff 审阅高亮、行选择、折叠与代码引用卡片修复 |
| #782 | 对话导航与聊天区、输入框、工作台布局对齐 |
| #1007 | 推理强度滑杆与会话选择恢复 |
诊断与 Doctor 加固
- 诊断日志在并发写入、分段轮转或出现损坏记录时统计不准确、导出不稳定的问题已修复;诊断包和 Issue 报告会尽力脱敏并限制内容范围(相关实现见 src/server/services/doctorService.ts)。
- Doctor / runtime recovery 不再越过安全 UI 状态边界;聊天历史、模型配置、Skills、MCP、IM 和 OAuth 等用户数据保持只读保护。
- 诊断页新增更完整的保留策略、损坏记录提示、事件 ID、脱敏 Issue 报告、导出包和安全 UI 状态修复反馈。
发布流程与安装指南
发布版本对齐
- GitHub Release 正文以
release-notes/v0.4.8.md为来源; - 桌面端发布版本号来源是
desktop/package.json,rootpackage.json仍保留本地开发用的999.0.0-local;发布时需确保desktop/package.json、Git tagv0.4.8与release-notes/v0.4.8.md三者严格对齐; Release Desktopworkflow 会校验 tag 与desktop/package.json版本一致,并加载本发布说明;- 自动更新依赖 GitHub Release 中的完整安装包、blockmap 和标准 updater metadata:
latest-mac.yml、latest.yml、latest-linux.yml、latest-linux-arm64.yml; - macOS 正式公开发布需要签名和公证 secrets,缺失时只能保留 draft / 测试产物;Windows 签名不是发布阻塞项,但未签名安装包会触发 SmartScreen 提示;
- H5 或反向代理访问仍需显式开启并配置 Token / CORS;桌面内置预览不会把本地访问凭证发送给非本地服务来源;
- 发布前建议至少运行
bun run scripts/release.ts 0.4.8 --dry与bun run check:impact;正式 tag 前再运行bun run verify,并执行一条v0.4.7 -> v0.4.8的真实自动更新 smoke,重点确认 Windows 用户数据完整保留。
安装文件对照
| 平台 | 文件 |
|---|---|
| macOS Apple Silicon(M 系列) | Claude-Code-Haha-0.4.8-mac-arm64.dmg |
| macOS Intel | Claude-Code-Haha-0.4.8-mac-x64.dmg |
| Windows x64 | Claude-Code-Haha-0.4.8-win-x64.exe |
| Windows ARM64 | Claude-Code-Haha-0.4.8-win-arm64.exe |
| Linux x64 | Claude-Code-Haha-0.4.8-linux-x86_64.AppImage或Claude-Code-Haha-0.4.8-linux-amd64.deb |
| Linux ARM64 | Claude-Code-Haha-0.4.8-linux-arm64.AppImage或Claude-Code-Haha-0.4.8-linux-arm64.deb |
macOS
双击 DMG 把应用拖入"应用程序"。如果 macOS 签名和公证验证通过,首次打开应直接走正常 Gatekeeper 流程。若仍提示"已损坏"或"无法验证开发者",说明当前产物可能仍是 unsigned fallback 或本地 quarantine 状态未清理,可在终端执行:
xattr -cr /Applications/Claude\ Code\ Haha.app也可以在"系统设置 → 隐私与安全性"里点"仍要打开"。
Windows
双击.exe安装,SmartScreen 提示时点"更多信息"→"仍要运行"。安装器会在删除旧版本前检查需要恢复的数据;如果检测到仍在运行的旧版应用或无法安全判断的数据目录,会保留旧版本和原数据并提示处理后重试。如果提示安装器权限过高,请直接双击运行,不要使用"以管理员身份运行"。
Linux
AppImage:
chmod +x Claude-Code-Haha-0.4.8-linux-x86_64.AppImage ./Claude-Code-Haha-0.4.8-linux-x86_64.AppImagedeb:
sudo apt install ./Claude-Code-Haha-0.4.8-linux-amd64.debARM64 机器把文件名换成...-linux-arm64.AppImage/...-linux-arm64.deb。
小结
v0.4.8 是一次"功能与安全并重"的版本:Grok 官方 OAuth 让多模型接入更完整,Auto 模式把权限决策交给可配置的分类器,内联 Diff 评审与对话导航提升了长会话生产力,推理强度滑杆让模型行为可调;而 Windows 升级数据保护与 H5/预览隔离则补上了桌面工作流中最容易被忽视的安全与数据完整性短板。对于升级用户,建议重点验证 Windows 用户数据完整保留;对于新用户,可从 src/server/services/grokOfficialProvider.ts、src/server/h5AccessPolicy.ts 与 src/utils/permissions/yoloClassifier.ts 入手,深入理解本版本的核心实现。
- 人工智能
- AI 应用
- 桌面应用
- 代码智能体
- MCP Clients
【免费下载链接】cc-haha
Local-first cross-platform desktop workspace for Claude Code / agents: multi-agent, Git worktrees, code diffs, skill marketplace, multi-model, Computer Use, task-aware desktop pets, with WeChat, Feishu, DingTalk, Telegram, WhatsApp and H5 access.
相关推荐
Claude Code Haha 桌面端 Computer Use 完全指南:环境配置、macOS 权限、授权模型与安全边界
Claude Code Haha 桌面端 Computer Use 完全指南:环境配置、macOS 权限、授权模型与安全边界 Claude Code Haha
人工智能AI 应用桌面应用代码智能体MCP ClientsClaude Code Haha v0.2.4 鉴权回归修复深度解析:桌面 sidecar 本地鉴权、H5 token 边界与 loopback 信任模型
Claude Code Haha v0.2.4 鉴权回归修复深度解析:桌面 sidecar 本地鉴权、H5 token 边界与 loopback 信任模型 v0
人工智能AI 应用桌面应用代码智能体MCP ClientsClaude Code Haha v0.4.3 发布解读:Provider 上下文声明、流式请求稳定性与桌面工作流补强
Claude Code Haha v0.4.3 发布解读:Provider 上下文声明、流式请求稳定性与桌面工作流补强 导读 本文基于 release note
人工智能AI 应用桌面应用代码智能体MCP Clients
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考