chenchenandClaude Opus 4.7 30056136ea fix(client): 6 desktop bugs reported in real-world testing
#1 — Untitled session can't be deleted
   src/server/services/sessionService.ts:deleteSession is now idempotent.
   Previously placeholder sessions whose JSONL file hadn't been flushed
   yet would 404 the delete and stay stuck in the sidebar list. Now we
   succeed silently if the file's gone (and treat ENOENT during unlink
   the same way), matching how the frontend already optimistically
   removes the row.

#2 — Run button turns red 「stop」 on idle when switching model
   desktop/src/components/chat/ChatInput.tsx — gate isActive on
   hasMessages. ModelSelector / runtime config changes briefly flip
   chatState off-idle (CLI reconnect / startup). Without messages
   there's nothing to stop, so the button should stay disabled
   gradient, not turn into a red stop affordance.

#3 — Draft input bleeds across session switches
   desktop/src/components/chat/ChatInput.tsx — ChatInput is mounted
   once at app shell level; switching tabs doesn't re-mount it, so
   the local `input` useState carried over. Add a useEffect keyed on
   activeTabId that resets input + attachments + open menus + filter
   buffers. composerPrefill path (rewind) keeps owning its own reset
   via the existing prefill effect.

#4 — Close (×) minimized to tray instead of quitting
   desktop/src-tauri/src/lib.rs — drop the prevent_close + hide
   pathway on the main window's CloseRequested. Close now actually
   quits; users who want to keep the app running can minimize via
   the existing window controls. Tray icon stays available for
   re-open + explicit quit.

#5 — Tray menu hardcoded "Claude Code Haha"
   desktop/src-tauri/src/lib.rs — rename tray menu items, tray
   tooltip, and macOS app submenu to "Heicode" / "显示 Heicode" /
   "退出 Heicode" / "关于 Heicode".

#6 — Skills page silently empty when one source crashes
   src/server/api/skills.ts:listSkills uses Promise.allSettled so a
   single failed source (user / project / plugin) returns a partial
   list + structured errors[] instead of tanking the whole response.
   desktop/src/api/skills.ts + stores/skillStore.ts thread the
   errors through; SkillList only shows the hard-error wall when
   skills.length === 0.

Verification:
  bunx tsc -b --noEmit (desktop)        — clean
  bunx tsc --noEmit (cc-haha root)      — clean
  cargo check (src-tauri)               — clean

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 13:48:40 +08:00
2026-05-05 20:44:24 +08:00

Heicode

Heicode 面向多人协作、可追溯交付的软件团队:把需求对齐、实现、验证、发布和持续运营连成一条少断层的链路,并用可编排的智能体角色承接其中可标准化的环节——强调「能复盘、能审计、能按团队规模裁剪」,而不是罗列某一家的工具栈。

下面的目录表仅供工程查阅;不代表对外产品承诺、路线图或你必须采用的集成方式。

这个仓库里有什么(工程布局)

目录 大致含义
cc-haha/ Heicode(终端与桌面客户端及本地服务;此为源码目录名)。
heicode/ Heicode Manager(网关与管理控制台服务端;此为源码目录名)。
website/ 产品介绍站点(Next.js;可 pnpm dev 或 Docker 预览)。
docs/ 愿景与范式;docs/milestones/ 交付里程碑;docs/integration/ Agnet 等平台接口设计。

产品在解决什么问题

  • 协作范式:把瀑布 / 敏捷下的角色分工落到可复述的闸门与智能体承接边界(方向与原则见 docs/vision-heicode-full-stack-agentic-dev.md;编队明细在文档附录)。
  • 交付可追溯:文档、沟通与变更尽量与版本、发布对齐,便于复盘与合规。
  • 工程上:同一仓库便于客户端与服务端同步发版、统一回归,减少「谁和谁版本对不上」的摩擦。

详细愿景与范式

docs/vision-heicode-full-stack-agentic-dev.md

快速启动(开发联调)

# 根依赖(Bun monorepo 根目录)
bun install

# Heicode 客户端本地服务(目录 cc-haha)
cd cc-haha
bun run src/server/index.ts

# 另开终端:桌面端
cd cc-haha/desktop
bun run tauri dev

联调网关时示例:

HEICODE_TAIJIAICLOUD_BASE_URL=http://localhost:3000 bun run src/server/index.ts

Heicode Manager(heicode/)中与 Heicode 登录相关的路由(最小集,以实际代码为准):

  • GET /heicode/oauth/authorize
  • GET /heicode/oauth/session

平台侧能力还包括模型发现(如 GET /v1/models)与 Anthropic Messages 兼容入口等,详见 Heicode Manager(heicode/)与 Heicode 客户端(cc-haha/)各自 README。

官网(Next.js)

cd website && pnpm install && pnpm dev

若根目录提供 docker compose,可按 compose 说明构建预览镜像(以仓库内 docker-compose.yml 为准)。

发版与回归建议

  • 同一版本标签发布客户端与网关镜像。
  • 每次发版至少回归:登录、模型拉取、对话请求。
  • 先在本地 Docker / 本地联调通过,再做外网域名与证书。

相关外部参考(概念)

  • oh-my-claudecode — Claude Code 类工具的高效实践参考。
  • Agnet 平台以实际部署环境与文档为准。

许可证

各子项目许可证见各子目录内 LICENSE(例如 Heicode Manager / heicode/ 侧常见为 AGPLv3)。

S
Description
No description provided
Readme
163 MiB
Languages
TypeScript 89.6%
Go 8.9%
HTML 0.8%
Python 0.2%
Shell 0.2%