Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
210 commits
Select commit Hold shift + click to select a range
0c6d275
feat: add Desktop UI backend server with full REST API and WebSocket …
NanmiCoder Apr 5, 2026
f1c310a
docs: trim scope to core features and add Agent Teams UI spec
NanmiCoder Apr 5, 2026
29c9fb8
feat: add CLI subprocess chat, Agent Teams API, and real background t…
NanmiCoder Apr 5, 2026
ce0908a
feat: complete server-side gaps — tool visibility, cron execution eng…
NanmiCoder Apr 5, 2026
52f00a9
fix: address Codex review findings — auth, cron CLI, workdir, model IDs
NanmiCoder Apr 5, 2026
993b96c
Stabilize the desktop transcript so long agent sessions stay readable
NanmiCoder Apr 6, 2026
cc9fe83
fix: compact code block rendering — tighter line height, softer borders
NanmiCoder Apr 6, 2026
7ed1c92
fix: compact diff viewer — tighter rows, gutter indicators, softer bo…
NanmiCoder Apr 6, 2026
defa722
fix: sync markdown code blocks with CodeViewer compact styles
NanmiCoder Apr 6, 2026
458945d
feat: add ToolCallGroup + compact ToolCallBlock for collapsible tool …
NanmiCoder Apr 6, 2026
001994d
feat: group consecutive tool calls into collapsible summaries in Mess…
NanmiCoder Apr 6, 2026
d25be78
fix: streamline AssistantMessage, ThinkingBlock, and StreamingIndicat…
NanmiCoder Apr 6, 2026
be9ae99
fix: address code review findings — consistent px-3, rounded-lg, lead…
NanmiCoder Apr 6, 2026
3b83c9b
fix: disable hljs.highlightAuto for unknown languages, hide line numb…
NanmiCoder Apr 6, 2026
941d8f0
chore: add prism-react-renderer + react-diff-viewer-continued, remove…
NanmiCoder Apr 6, 2026
b9a3874
feat: rewrite CodeViewer with prism-react-renderer — pure React rende…
NanmiCoder Apr 6, 2026
e3714e9
feat: rewrite DiffViewer with react-diff-viewer-continued — GitHub PR…
NanmiCoder Apr 6, 2026
9dc0dba
feat: rewrite MarkdownRenderer code blocks with React CodeViewer — no…
NanmiCoder Apr 6, 2026
8cc38f6
chore: delete highlightCode.ts, remove hljs CSS, fix test for new Dif…
NanmiCoder Apr 6, 2026
905d421
fix: hide duplicate StreamingIndicator during thinking, fix plain tex…
NanmiCoder Apr 6, 2026
83559ce
feat: sync CLI status (verb, elapsed, tokens) to StreamingIndicator
NanmiCoder Apr 6, 2026
5e71da8
fix: preserve intermediate text between tool calls, restore thinking …
NanmiCoder Apr 6, 2026
5e4e7d3
fix: soften error indicators in tool call groups — icon instead of re…
NanmiCoder Apr 6, 2026
767abfc
fix: restore tool calls on page refresh — handle server type mapping
NanmiCoder Apr 6, 2026
d601bbf
docs: add sidebar redesign spec — project filter + time-grouped list
NanmiCoder Apr 6, 2026
5d908b2
feat: redesign sidebar — project filter dropdown + time-grouped sessi…
NanmiCoder Apr 6, 2026
985b1a8
feat: add Provider management system — multi-provider CRUD, activatio…
NanmiCoder Apr 6, 2026
bd658d9
Merge branch 'worktree-feature-model-config' into docs/ui-clone-requi…
NanmiCoder Apr 6, 2026
b1db66a
feat: add scheduled task edit UI, CronUpdateTool, wizard components a…
NanmiCoder Apr 6, 2026
da2be1f
Merge branch 'worktree-feature-scheduled-tasks' into docs/ui-clone-re…
NanmiCoder Apr 6, 2026
d059a8b
feat: add Provider management UI, CLI Tasks page, and enhance NewTask…
NanmiCoder Apr 7, 2026
4545482
chore: add .playwright-mcp, .omx, desktop/dist, e2e screenshots to .g…
NanmiCoder Apr 7, 2026
06d7663
feat: optimize AskUserQuestion UI with tab navigation and toggle sele…
NanmiCoder Apr 7, 2026
5883758
Merge branch 'docs/ui-clone-requirements' into main
NanmiCoder Apr 7, 2026
dca08d6
chore: untrack .omx, .playwright-mcp, desktop/dist — already in .giti…
NanmiCoder Apr 7, 2026
e9fa36a
refactor: remove Model tab, move effort level to General, fix test bu…
NanmiCoder Apr 7, 2026
ec78c06
docs: add provider preset redesign spec
NanmiCoder Apr 7, 2026
468a285
docs: add provider preset redesign implementation plan
NanmiCoder Apr 7, 2026
08cd15e
feat: add provider preset definitions (Official, DeepSeek, ZhipuGLM, …
NanmiCoder Apr 7, 2026
9806bef
refactor: rewrite provider types — simplified model mapping, preset-b…
NanmiCoder Apr 7, 2026
747b45b
refactor: rewrite providerService — cc-haha storage, full env sync, o…
NanmiCoder Apr 7, 2026
e584df1
refactor: update provider API — presets endpoint, simplified activate…
NanmiCoder Apr 7, 2026
609ddd0
refactor: rewrite frontend provider types, API client, and store for …
NanmiCoder Apr 7, 2026
232f768
feat: rewrite ProviderSettings UI — preset chips, official card, simp…
NanmiCoder Apr 7, 2026
2e92ba3
fix: official preset in chips, model mapping always visible, settings…
NanmiCoder Apr 7, 2026
d109759
feat: editable settings.json in provider form with JSON validation
NanmiCoder Apr 7, 2026
aac4196
fix: update models API for new provider structure, widen dialog
NanmiCoder Apr 7, 2026
d3d3e0c
fix: show settings.json editor for all presets including official
NanmiCoder Apr 7, 2026
1b19052
fix: official preset add button — write settings.json first, handle e…
NanmiCoder Apr 7, 2026
ed8114c
fix: official card at top, modal state reset on close, remove officia…
NanmiCoder Apr 7, 2026
56b4fe3
Merge branch 'feat/provider-model-config' into main
NanmiCoder Apr 7, 2026
9b74e06
refactor: move task tracking from standalone page into session bottom…
NanmiCoder Apr 7, 2026
b49a8b6
fix: show correct model name when custom provider is active
NanmiCoder Apr 7, 2026
f4dce49
feat: parse pasted JSON to auto-fill provider form fields
NanmiCoder Apr 7, 2026
352b547
chore: remove Google AdSense script from docs
NanmiCoder Apr 7, 2026
f9c42c3
feat: Tauri desktop app with sidecar, brand identity, and CORS fix
NanmiCoder Apr 7, 2026
0d71d8a
feat: use native folder dialog in Tauri, keep directory tree for web
NanmiCoder Apr 7, 2026
a3e5806
feat: add confirmation dialog when enabling bypass permissions
NanmiCoder Apr 7, 2026
7183cc8
fix: enable task/plan display for WebApp sessions using TodoWrite
NanmiCoder Apr 7, 2026
da3d51b
fix: suppress sticky TaskBar on page refresh when tasks already dismi…
NanmiCoder Apr 7, 2026
ad4ba88
feat: add @-triggered file search popup with directory navigation
NanmiCoder Apr 7, 2026
f81fe41
feat: migrate code blocks to shiki for VS Code-quality syntax highlig…
NanmiCoder Apr 7, 2026
602c61a
feat: redesign scheduled task dialog to match Claude Code original
NanmiCoder Apr 7, 2026
a2bf920
feat: add i18n support with English and Chinese locales
NanmiCoder Apr 7, 2026
d23b739
fix: resolve EmptySession popup positioning and IME composition confl…
NanmiCoder Apr 7, 2026
5a8fb8a
feat: add i18n to ScheduledTasks page
NanmiCoder Apr 7, 2026
b5d970d
fix: translate prompt placeholder in new task modal
NanmiCoder Apr 7, 2026
41fb227
feat: self-host fonts to eliminate Google CDN dependency
NanmiCoder Apr 7, 2026
983d83f
feat: enhance scheduled tasks with flexible scheduling, run now, exec…
NanmiCoder Apr 8, 2026
82e6e27
feat: add IM adapter integration (Telegram + Feishu) with web setting…
NanmiCoder Apr 8, 2026
be2e9ac
chore: update .gitignore to exclude temp screenshots and build artifacts
NanmiCoder Apr 8, 2026
88e7e14
feat(pairing): extend type definitions with pairing and pairedUsers f…
NanmiCoder Apr 8, 2026
4bcac9d
feat(pairing): implement core pairing logic module
NanmiCoder Apr 8, 2026
74cf078
feat(pairing): integrate pairing check into feishu adapter - DM only
NanmiCoder Apr 8, 2026
d9905c7
feat(pairing): integrate pairing check into telegram adapter - privat…
NanmiCoder Apr 8, 2026
5fe7542
fix: prevent duplicate concurrent executions of the same scheduled task
NanmiCoder Apr 8, 2026
4e66ef1
feat(pairing): add generatePairingCode and removePairedUser to adapte…
NanmiCoder Apr 8, 2026
14a8322
feat(pairing): add server-side pairing code masking and merge support
NanmiCoder Apr 8, 2026
2523ce0
feat(pairing): add pairing management UI to AdapterSettings page
NanmiCoder Apr 8, 2026
12cc872
feat: auto-generate session titles using AI (Haiku model)
NanmiCoder Apr 8, 2026
9fc2d5a
fix(security): fully mask pairing code in API response - prevent info…
NanmiCoder Apr 8, 2026
bf5cd6e
fix(security): eliminate modulo bias in pairing code generation
NanmiCoder Apr 8, 2026
158f2de
fix(security): add rate limiting, default-closed mode, extract isAllo…
NanmiCoder Apr 8, 2026
00a9cba
fix: enable macOS window dragging and rename app to Claude Code Haha
NanmiCoder Apr 8, 2026
6aedd6e
fix: prevent cross-process duplicate execution of scheduled tasks
NanmiCoder Apr 8, 2026
90b5772
fix: default to user home dir when no workDir selected on new session
NanmiCoder Apr 8, 2026
3c5290e
fix: reduce copy ambiguity in chat sessions
NanmiCoder Apr 8, 2026
ce92de2
fix: prevent transient scheduled task write failures
NanmiCoder Apr 8, 2026
bfd2405
fix: disable run-now button for disabled scheduled tasks
NanmiCoder Apr 8, 2026
91b4d16
Restore sub-agent context in the desktop chat transcript
NanmiCoder Apr 8, 2026
2b21acf
refactor: websocket manager supports multiple concurrent connections
NanmiCoder Apr 8, 2026
3d04aa4
docs: add multi-tab sessions design spec
NanmiCoder Apr 8, 2026
c056b3c
docs: add multi-tab sessions implementation plan
NanmiCoder Apr 8, 2026
9dc2294
refactor: chatStore supports per-session isolated state
NanmiCoder Apr 8, 2026
df288fe
feat: add tabStore for multi-tab state management
NanmiCoder Apr 8, 2026
9908c17
feat: add TabBar component with scroll overflow and context menu
NanmiCoder Apr 8, 2026
e43a0ba
feat: add i18n translations for multi-tab feature
NanmiCoder Apr 8, 2026
e3accc4
feat: sidebar click opens session in tab instead of replacing
NanmiCoder Apr 8, 2026
8f0bbf0
feat: integrate TabBar into AppShell layout and route by activeTabId
NanmiCoder Apr 8, 2026
5daf49d
feat: new session creation automatically opens as tab
NanmiCoder Apr 8, 2026
3ef1fff
feat: ActiveSession reads from tabStore and per-session chatStore
NanmiCoder Apr 8, 2026
f883208
feat: sync tab status and title from server messages
NanmiCoder Apr 8, 2026
e462314
feat: MessageList and ChatInput read from per-session state
NanmiCoder Apr 8, 2026
9bfbadd
fix: resolve TypeScript compilation errors in multi-tab refactor
NanmiCoder Apr 8, 2026
942df9d
fix: update tests for multi-tab architecture
NanmiCoder Apr 8, 2026
db19491
feat: add multi-tab sessions for desktop app
NanmiCoder Apr 8, 2026
f2fa6fc
chore: gitignore .claude and docs/superpowers, clean up temp files
NanmiCoder Apr 8, 2026
7e2c880
feat: unify Settings/Scheduled as tab pages, improve new session UX
NanmiCoder Apr 8, 2026
a16eae3
fix: remove unused AppShell import in test file
NanmiCoder Apr 8, 2026
ed7b0b2
fix: remove top gap and redundant StatusBar in desktop app
NanmiCoder Apr 9, 2026
e249c7a
fix: eliminate top gap by removing global drag overlay
NanmiCoder Apr 9, 2026
5c4a1e8
style: improve TabBar visual design and Settings sidebar alignment
NanmiCoder Apr 9, 2026
2c19bb7
feat: add tab drag-to-reorder and complete context menu actions
NanmiCoder Apr 9, 2026
9bb05ad
docs: add Skills UI design spec and implementation plan
NanmiCoder Apr 9, 2026
039ad8a
feat(skills): add server API, types, client, store, and i18n
NanmiCoder Apr 9, 2026
a06f6bf
feat(skills): add Skills tab UI with list, file tree, and content viewer
NanmiCoder Apr 9, 2026
3aec79a
feat: add Agents tab to desktop Settings page
NanmiCoder Apr 9, 2026
21ee860
feat: add Skills browser to Desktop Settings page
NanmiCoder Apr 9, 2026
78c7b23
fix: remove leftover merge conflict marker in Settings.tsx
NanmiCoder Apr 9, 2026
5911388
fix(skills): polish desktop browser layout and rendering
NanmiCoder Apr 9, 2026
db005e5
fix(desktop): improve Agents/Skills layout and rendering
NanmiCoder Apr 9, 2026
211226c
feat(agents): update API types, store, i18n, and tests for new agent …
NanmiCoder Apr 9, 2026
6085447
fix(desktop): swap session in-place when switching workDir on empty s…
NanmiCoder Apr 9, 2026
824b196
fix(adapters): fix IM message delivery issues and improve UX
NanmiCoder Apr 9, 2026
b4ad6f1
fix(adapters): ensure placeholder cleanup on message_complete
NanmiCoder Apr 9, 2026
41fc58d
feat(adapters): add /new <project> quick switch and unify project sel…
NanmiCoder Apr 9, 2026
739b353
fix(desktop): show message Copy button on hover at bottom-right
NanmiCoder Apr 9, 2026
2761690
fix(desktop): add subtle border separator between tabs
NanmiCoder Apr 9, 2026
8596931
refactor(desktop): remove i18n from spinner verbs, use English only
NanmiCoder Apr 9, 2026
98a24f9
feat(proxy): add multi-protocol proxy for OpenAI-compatible providers
NanmiCoder Apr 9, 2026
7ce39d0
docs(desktop): add comprehensive desktop app documentation with illus…
NanmiCoder Apr 10, 2026
7983cce
feat(desktop): add CI/CD release pipeline, auto-updater, and installa…
NanmiCoder Apr 10, 2026
635a966
fix(desktop): unblock rollout with reliable session and IM flows
NanmiCoder Apr 10, 2026
fc7d6d4
fix(desktop): collapse session task bar by default
NanmiCoder Apr 11, 2026
77974f7
feat(feishu): add interactive project picker and fix bot flows
NanmiCoder Apr 11, 2026
4ccda92
chore(adapters): snapshot pre-attachment WIP (permission card v2, han…
NanmiCoder Apr 11, 2026
63e5fb3
feat(adapters): extend WsBridge.sendUserMessage to carry attachments
NanmiCoder Apr 11, 2026
e2ea346
feat(adapters): add attachment type and limit check module
NanmiCoder Apr 11, 2026
413437c
feat(adapters): add AttachmentStore for IM download staging
NanmiCoder Apr 11, 2026
ae586b0
feat(feishu): rewrite streaming to CardKit Schema 2.0 with proper mar…
NanmiCoder Apr 11, 2026
bf9b561
fix(adapters): eliminate AttachmentStore collision race and orphan .p…
NanmiCoder Apr 11, 2026
ac89ec6
feat(adapters): add ImageBlockWatcher for streaming markdown image ex…
NanmiCoder Apr 11, 2026
766e1e6
feat(feishu): add FeishuMediaService for download/upload/send
NanmiCoder Apr 11, 2026
61657d4
feat(feishu): extractInboundPayload recognizes image/file/post attach…
NanmiCoder Apr 11, 2026
2e78d3f
feat(telegram): add TelegramMediaService for download/upload
NanmiCoder Apr 11, 2026
eda97e5
feat(telegram): accept photo/document/video/audio/voice and forward a…
NanmiCoder Apr 11, 2026
b71538f
feat(telegram): send agent-produced images via sendPhoto
NanmiCoder Apr 11, 2026
30b9370
docs(adapters): document IM attachment support
NanmiCoder Apr 11, 2026
6bcbbc5
fix(adapters): drop HEIC mime, align Telegram error text, inline extr…
NanmiCoder Apr 11, 2026
80eaa8c
fix(adapters): tsconfig-strict types for Dirent and Lark image upload
NanmiCoder Apr 11, 2026
207da0a
feat(feishu): integrate inbound/outbound attachments into StreamingCa…
NanmiCoder Apr 11, 2026
e338b2f
fix(feishu): stream reasoning + tool steps live, drop them on finalize
NanmiCoder Apr 11, 2026
662485c
experiment(desktop): static-import sidecars + drop src/ + node_module…
NanmiCoder Apr 11, 2026
3c5549e
experiment(desktop): merge server + cli into one sidecar binary
NanmiCoder Apr 11, 2026
e58ec4f
experiment(desktop): add adapters mode to claude-sidecar (Feishu + Te…
NanmiCoder Apr 11, 2026
3e3c2bc
experiment(desktop): auto-spawn adapter sidecar on launch + restart o…
NanmiCoder Apr 11, 2026
43f08df
Merge experiment/desktop-bundle-slim into main
NanmiCoder Apr 11, 2026
bfafd26
fix: batch resolve 5 issues from Feishu bug tracker
NanmiCoder Apr 12, 2026
8c54c48
ui(desktop): enlarge default window to 1440×960 and show welcome hero…
NanmiCoder Apr 12, 2026
8617a4b
feat: scheduled task IM notification + UI fixes
NanmiCoder Apr 12, 2026
bd60442
feat(desktop): add About page in settings with app info and author links
NanmiCoder Apr 12, 2026
301e0c3
feat(desktop): route macOS native About menu to in-app Settings page
NanmiCoder Apr 13, 2026
a0fa875
ui(desktop): localize macOS menu items to Chinese (关于/设置)
NanmiCoder Apr 13, 2026
8888e1c
chore: comprehensive code review fixes — security, perf, leaks, quali…
NanmiCoder Apr 13, 2026
9eb3be4
perf: optimize recent projects loading with parallel git queries and …
NanmiCoder Apr 14, 2026
23b31b3
Prevent local team sessions from dropping members and stalling adapters
NanmiCoder Apr 14, 2026
b002447
fix: provider 隔离与 Claude 官方认证修复
NanmiCoder Apr 15, 2026
166fe5b
fix: Computer Use 点击功能修复
NanmiCoder Apr 15, 2026
651ab93
fix: 停止生成不再显示错误提示 & GrowthBook clientKey 检查
NanmiCoder Apr 15, 2026
0e60cad
chore(desktop): 构建改进与 UI 完善
NanmiCoder Apr 15, 2026
5fdf504
test: 更新测试用例适配 provider 隔离与新 API
NanmiCoder Apr 15, 2026
5016bc0
chore: 移除启动时自动检测认证并跳转设置页的逻辑
NanmiCoder Apr 15, 2026
5d243b6
feat(desktop): Windows 自定义标题栏 & 服务端改进
NanmiCoder Apr 15, 2026
5daa381
ci(desktop): 添加开发阶段桌面端构建 workflow
NanmiCoder Apr 15, 2026
97a32b5
fix(ci): 修复 dev 构建 workflow 矩阵 JSON 输出格式
NanmiCoder Apr 15, 2026
08534e7
fix(ci): 补充 adapters 依赖安装步骤
NanmiCoder Apr 15, 2026
4919405
fix(ci): artifact 名称加上产品名和版本号
NanmiCoder Apr 15, 2026
ec43698
feat(computer-use): 添加 Windows 平台支持
NanmiCoder Apr 16, 2026
870e03d
docs(desktop): 全面更新桌面端文档,替换真实截图,修复 DMG 布局
NanmiCoder Apr 16, 2026
0b4c742
fix(desktop): 修复桌面端多个渲染和权限问题
NanmiCoder Apr 16, 2026
3893d1c
docs(desktop): 补充 Write 工具 Diff 视图截图
NanmiCoder Apr 16, 2026
467bc85
feat(docs): 集成 vitepress-plugin-mermaid 支持 Mermaid 流程图渲染
NanmiCoder Apr 16, 2026
970521a
docs: 重写 README 精炼开头,补充桌面端预览与赞助信息,更新 Computer Use Windows 支持
NanmiCoder Apr 16, 2026
560e365
docs(readme): 新增「请作者喝杯咖啡」打赏区块
NanmiCoder Apr 16, 2026
c99fed1
docs(im): 重写飞书/Telegram 接入指南,替换为真实操作截图
NanmiCoder Apr 16, 2026
4c4945c
fix(ci): Linux AppImage 构建补充 libfuse2 依赖
NanmiCoder Apr 16, 2026
05cbc01
fix(desktop): 激活官方时把 CLI 标记为 managed-OAuth 避免 403
NanmiCoder Apr 16, 2026
ec3be47
fix(desktop): provider 激活后联动重置聊天页 currentModel
NanmiCoder Apr 16, 2026
bea8153
fix(desktop): build 脚本加 fresh-build 保险,避免 sidecar 缓存复用
NanmiCoder Apr 16, 2026
d0cf254
fix(desktop): DMG Finder 美化失败时降级为默认布局而非整脚本 fail
NanmiCoder Apr 16, 2026
28b1ccf
fix(desktop): 移除 canonical .app 重签名,避免 Keychain ACL 失配导致 403
NanmiCoder Apr 16, 2026
25bd594
chore: 新增 LOC 统计脚本并清理旧 PLAN.md
NanmiCoder Apr 17, 2026
b0ca586
feat(desktop): add HahaOAuthService for self-managed Claude OAuth
NanmiCoder Apr 17, 2026
a1b2530
fix(desktop): cleanup HahaOAuthService — 删除 dead code、加 fetch timeout…
NanmiCoder Apr 17, 2026
142eb9c
feat(desktop): add /api/haha-oauth REST endpoints
NanmiCoder Apr 17, 2026
7421db2
fix(desktop): align haha-oauth handler with sibling error-handling co…
NanmiCoder Apr 17, 2026
94b445c
feat(desktop): inject CLAUDE_CODE_OAUTH_TOKEN from haha oauth.json
NanmiCoder Apr 17, 2026
669be1f
fix(desktop): align conversationService log format + document deferre…
NanmiCoder Apr 17, 2026
f10396e
feat(desktop): frontend API client + zustand store for haha OAuth
NanmiCoder Apr 17, 2026
e9ae8c9
fix(desktop): haha-oauth store — logout 停 polling + recursive setTime…
NanmiCoder Apr 17, 2026
ae5437a
feat(desktop): add ClaudeOfficialLogin component
NanmiCoder Apr 17, 2026
8ae68c1
fix(desktop): ClaudeOfficialLogin — i18n、错误反馈、冗余清理
NanmiCoder Apr 17, 2026
33df639
feat(desktop): embed ClaudeOfficialLogin into Claude Official card
NanmiCoder Apr 17, 2026
4b4567b
fix(desktop): Official 卡片微调 — cursor-pointer 跟 hover 同步, 登录区加 top pad…
NanmiCoder Apr 17, 2026
d83efc1
Prevent desktop OAuth sessions from drifting out of sync
NanmiCoder Apr 17, 2026
9d29d8e
Keep desktop replies stable across turns and fix OAuth callback routing
NanmiCoder Apr 18, 2026
09ac74e
Integrate latest mainline companion updates into desktop feature branch
NanmiCoder Apr 18, 2026
f368440
Keep desktop CI aligned with the build outputs we actually rely on
NanmiCoder Apr 18, 2026
6799e57
Keep Linux desktop releases shippable while AppImage bundling is unst…
NanmiCoder Apr 18, 2026
c444e43
chore: update cluade model name
NanmiCoder Apr 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,4 @@
# 通用设置(建议始终开启)
# ============================================================
DISABLE_TELEMETRY=1
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
21 changes: 12 additions & 9 deletions .github/workflows/build-desktop-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
steps:
- id: set-matrix
run: |
ALL='[{"platform":"macos-latest","rust_target":"aarch64-apple-darwin","tauri_args":"--target aarch64-apple-darwin","bundles":"app,dmg","label":"macOS-ARM64","artifact_name":"macos-arm64"},{"platform":"macos-latest","rust_target":"x86_64-apple-darwin","tauri_args":"--target x86_64-apple-darwin","bundles":"app,dmg","label":"macOS-x64","artifact_name":"macos-x64"},{"platform":"windows-latest","rust_target":"x86_64-pc-windows-msvc","tauri_args":"","bundles":"nsis,msi","label":"Windows-x64","artifact_name":"windows-x64"},{"platform":"ubuntu-22.04","rust_target":"x86_64-unknown-linux-gnu","tauri_args":"","bundles":"deb,appimage","label":"Linux-x64","artifact_name":"linux-x64"},{"platform":"ubuntu-22.04-arm","rust_target":"aarch64-unknown-linux-gnu","tauri_args":"","bundles":"deb,appimage","label":"Linux-ARM64","artifact_name":"linux-arm64"}]'
ALL='[{"platform":"macos-latest","rust_target":"aarch64-apple-darwin","tauri_args":"--target aarch64-apple-darwin","bundles":"app,dmg","label":"macOS-ARM64","artifact_name":"macos-arm64"},{"platform":"macos-latest","rust_target":"x86_64-apple-darwin","tauri_args":"--target x86_64-apple-darwin","bundles":"app,dmg","label":"macOS-x64","artifact_name":"macos-x64"},{"platform":"windows-latest","rust_target":"x86_64-pc-windows-msvc","tauri_args":"","bundles":"nsis,msi","label":"Windows-x64","artifact_name":"windows-x64"},{"platform":"ubuntu-22.04","rust_target":"x86_64-unknown-linux-gnu","tauri_args":"","bundles":"deb","label":"Linux-x64","artifact_name":"linux-x64"},{"platform":"ubuntu-22.04-arm","rust_target":"aarch64-unknown-linux-gnu","tauri_args":"","bundles":"deb","label":"Linux-ARM64","artifact_name":"linux-arm64"}]'

SELECTED="${{ inputs.platforms }}"
if [ "$SELECTED" = "all" ]; then
Expand Down Expand Up @@ -72,6 +72,8 @@ jobs:
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

# ── 系统依赖 (Linux) ─────────────────────────────────────
# libfuse2 是 AppImage 运行时依赖:linuxdeploy 工具链本身是 AppImage 格式,
# 运行时需要 libfuse2,Ubuntu 22.04 默认未安装。
- name: Install Linux dependencies
if: contains(matrix.platform, 'ubuntu')
run: |
Expand All @@ -81,7 +83,8 @@ jobs:
libxdo-dev libssl-dev \
libwebkit2gtk-4.1-dev \
libayatana-appindicator3-dev \
librsvg2-dev patchelf
librsvg2-dev patchelf \
libfuse2

# ── Bun ──────────────────────────────────────────────────
- name: Setup Bun
Expand Down Expand Up @@ -164,14 +167,14 @@ jobs:

echo "Searching for artifacts in: $SEARCH_DIR"
if [ -d "$SEARCH_DIR" ]; then
find "$SEARCH_DIR" -type f \( \
-name "*.dmg" -o -name "*.app" -o \
-name "*.exe" -o -name "*.msi" -o \
-name "*.deb" -o -name "*.AppImage" -o \
-name "*.zip" \
\) | while read -r f; do
find "$SEARCH_DIR" \
\( -type f \( \
-name "*.dmg" -o -name "*.exe" -o -name "*.msi" -o \
-name "*.deb" -o -name "*.AppImage" -o -name "*.zip" \
\) \) -o \
\( -type d -name "*.app" \) | while read -r f; do
echo " Copying: $(basename "$f")"
cp "$f" "$STAGING/"
cp -R "$f" "$STAGING/"
done
fi

Expand Down
191 changes: 191 additions & 0 deletions .github/workflows/release-desktop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
name: Release Desktop

on:
push:
tags: ['v*.*.*']
workflow_dispatch:
inputs:
draft:
description: 'Create as draft release'
required: false
default: true
type: boolean

permissions:
contents: write

concurrency:
group: release-desktop-${{ github.ref }}
cancel-in-progress: true

env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}

jobs:
build:
strategy:
fail-fast: false
matrix:
include:
# macOS Apple Silicon
- platform: macos-latest
rust_target: aarch64-apple-darwin
tauri_args: '--target aarch64-apple-darwin'
label: macOS-ARM64

# macOS Intel
- platform: macos-latest
rust_target: x86_64-apple-darwin
tauri_args: '--target x86_64-apple-darwin'
label: macOS-x64

# Linux x64
- platform: ubuntu-22.04
rust_target: x86_64-unknown-linux-gnu
tauri_args: '--bundles deb'
label: Linux-x64

# Linux ARM64
- platform: ubuntu-22.04-arm
rust_target: aarch64-unknown-linux-gnu
tauri_args: '--bundles deb'
label: Linux-ARM64

# Windows x64
- platform: windows-latest
rust_target: x86_64-pc-windows-msvc
tauri_args: ''
label: Windows-x64

runs-on: ${{ matrix.platform }}
name: Build (${{ matrix.label }})

steps:
- name: Checkout
uses: actions/checkout@v4

# ── System dependencies (Linux) ──────────────────────────
- name: Install Linux dependencies
if: contains(matrix.platform, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential \
curl \
wget \
file \
libxdo-dev \
libssl-dev \
libwebkit2gtk-4.1-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
patchelf \
libfuse2

# ── Bun ──────────────────────────────────────────────────
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

# ── Node.js (for tauri-action compatibility) ─────────────
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20

# ── Rust ─────────────────────────────────────────────────
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.rust_target }}

- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: 'desktop/src-tauri -> target'
shared-key: ${{ matrix.rust_target }}

# ── Install dependencies ─────────────────────────────────
- name: Install root dependencies
run: bun install

- name: Install desktop dependencies
working-directory: desktop
run: bun install

- name: Install adapter dependencies
working-directory: adapters
run: bun install

# ── Build sidecars ───────────────────────────────────────
- name: Build sidecars
working-directory: desktop
env:
TAURI_ENV_TARGET_TRIPLE: ${{ matrix.rust_target }}
run: bun run build:sidecars

# ── macOS code signing (optional) ────────────────────────
- name: Import macOS signing certificate
if: contains(matrix.platform, 'macos') && env.APPLE_CERTIFICATE != ''
env:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
run: |
echo "$APPLE_CERTIFICATE" | base64 --decode > certificate.p12
security create-keychain -p actions build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p actions build.keychain
security import certificate.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k actions build.keychain
rm certificate.p12

# ── Build Tauri app ──────────────────────────────────────
- name: Build Tauri app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# macOS signing (leave empty to skip)
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
with:
projectPath: desktop
tauriScript: bunx tauri
tagName: v__VERSION__
releaseName: 'Claude Code Haha v__VERSION__'
releaseBody: |
## Claude Code Haha v__VERSION__

### Downloads

| Platform | File |
|----------|------|
| macOS (Apple Silicon) | `.dmg` |
| macOS (Intel) | `.dmg` |
| Windows | `.exe` (NSIS installer) |
| Linux | `.deb` |

### First-time installation

**macOS**: If you see "app is damaged" or "unidentified developer", run:
```bash
xattr -cr /Applications/Claude\ Code\ Haha.app
```

**Windows**: If SmartScreen blocks the app, click "More info" → "Run anyway".

---
See [Installation Guide](https://github.com/NanmiCoder/cc-haha/blob/main/docs/desktop/04-installation.md) for details.
releaseDraft: ${{ github.event_name == 'workflow_dispatch' && inputs.draft || false }}
prerelease: false
args: ${{ matrix.tauri_args }}

# ── Cleanup macOS keychain ───────────────────────────────
- name: Cleanup macOS keychain
if: contains(matrix.platform, 'macos') && always()
run: security delete-keychain build.keychain 2>/dev/null || true
52 changes: 52 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,63 @@
.env.*
!.env.example
node_modules
.DS_Store

# Computer Use runtime (auto-generated)
.runtime/
extracted-natives/

# Adapter attachment cache (created at runtime by AttachmentStore when
# running adapter tests or the feishu/telegram adapters locally)
.lark-attachments/
.tg-attachments/

# Playwright MCP snapshots & logs
.playwright-mcp/

# OMX state/logs
.omx/

# E2E screenshots
e2e-*.png

# Desktop build output
desktop/dist/
desktop/build-artifacts/
desktop/src-tauri/binaries/
desktop/src-tauri/target/
desktop/src-tauri/gen/
desktop/package-lock.json

# Desktop brand asset candidates (keep only selected ones in public/)
desktop/brand-assets/

# Claude local config & auto-generated
.claude/

# Superpowers plans & specs (local only)
docs/superpowers/

# Temp server/web logs
.tmp-*.log

# Debug / temp screenshots (root dir only)
/*.png
bug_attachments/

# Private keys & credentials
*.pem
*.key
*.p12
credentials*.json

# TS build cache
*.tsbuildinfo

# Temp markdown snapshots
sidebar-snapshot.md

# VitePress
docs/.vitepress/dist
docs/.vitepress/cache
runtime/__pycache__
24 changes: 24 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Repository Guidelines

## Project Structure & Module Organization
The root package is the Bun-based CLI and local server. Main code lives in `src/`: `entrypoints/` for startup paths, `screens/` and `components/` for the Ink TUI, `commands/` for slash commands, `services/` for API/MCP/OAuth logic, and `tools/` for agent tool implementations. `bin/claude-haha` is the executable entrypoint. The desktop app is isolated in `desktop/` with React UI code in `desktop/src/` and Tauri glue in `desktop/src-tauri/`. Documentation is in `docs/` and builds with VitePress. Treat root screenshots and `docs/images/` as reference assets, not source code.

## Build, Test, and Development Commands
Install root dependencies with `bun install`, then install desktop dependencies in `desktop/` if you are touching the app UI.

- `./bin/claude-haha` or `bun run start`: run the CLI locally.
- `SERVER_PORT=3456 bun run src/server/index.ts`: start the local API/WebSocket server used by `desktop/`.
- `bun run docs:dev` / `bun run docs:build`: preview or build the VitePress docs.
- `cd desktop && bun run dev`: run the desktop frontend in Vite.
- `cd desktop && bun run build`: type-check and produce a production web build.
- `cd desktop && bun run test`: run Vitest suites.
- `cd desktop && bun run lint`: run TypeScript no-emit checks.

## Coding Style & Naming Conventions
Use TypeScript with 2-space indentation, ESM imports, and no semicolons to match the existing code. Prefer `PascalCase` for React components, `camelCase` for functions, hooks, and stores, and descriptive file names like `teamWatcher.ts` or `AgentTranscript.tsx`. Keep shared UI in `desktop/src/components/`, API clients in `desktop/src/api/`, and avoid adding new dependencies unless the existing utilities cannot cover the change.

## Testing Guidelines
Desktop tests use Vitest with Testing Library in a `jsdom` environment. Name tests `*.test.ts` or `*.test.tsx`; colocate focused tests near the file or place broader coverage in `desktop/src/__tests__/`. No coverage gate is configured, so add regression tests for any behavior you change and run the relevant suites before opening a PR.

## Commit & Pull Request Guidelines
Recent history follows Conventional Commit prefixes such as `feat:`, `fix:`, and `docs:`. Keep subjects imperative and scoped to one change. PRs should explain the user-visible impact, list verification steps, link related issues, and include screenshots for desktop or docs UI changes. Keep diffs reviewable and call out any follow-up work or known gaps.
Loading
Loading