🧭 CmdCode 项目代码架构地图

CmdCode(npm包名 cmdclaw)是基于开源的 ClawCode 开发的终端中的 AI 编程助手,兼容 Anthropic Claude Code CLI 工具的大部分功能及工程化能力。

TypeScript Bun ≥1.2.0 2986 文件 / 56万行 Ink (React CLI) Hono (Web API)

仓库
git@gitee.com:xusuai/cmdcode.git
本地路径
/root/cmdcode/
开发命令
bun run scripts/dev.ts
构建命令
bun run build.ts

📦 核心技术栈

组件技术用途
CLI UIInk (React for CLI)终端交互界面渲染
Web APIHonoWeb CLI 后端 REST + SSE
数据库Bun:SQLiteWeb端用户/会话/消息持久化
AI SDK@anthropic-ai/sdkClaude API 调用
模型支持OpenAI兼容DeepSeek等第三方模型
MCP@modelcontextprotocol/sdk工具/资源扩展协议
认证bcryptjs + JWTWeb端用户认证
构建Bun bundlefeature flags + tree-shaking

🌲 代码树与功能布局

src/                              # 主源码(2986文件, 56万行)
├── main.tsx                      🔑 主入口(5467行)Commander CLI定义+启动
├── QueryEngine.ts                🔑 查询引擎(1366行)Agent主循环核心
├── query.ts                      🔑 API查询层(1768行)消息构建+流式处理+compact
├── Tool.ts                       🔑 工具基类(806行)Tool接口定义+权限+上下文
├── tools.ts                      🔑 工具注册表(374行)getTools()加载所有工具
├── commands.ts                   🔑 命令注册表(853行)所有/命令导入+分发
├── history.ts                    # 命令历史管理
├── setup.ts                      # 初始化设置
├── context.ts                    # 全局上下文
├── cost-tracker.ts               # API成本追踪
│
├── entrypoints/                  🚀 入口点
│   ├── cli.tsx                   # CLI启动入口(快速路径+动态加载)
│   ├── init.ts                   # 初始化流程
│   ├── headless.ts               # 无头模式(非交互式)
│   ├── HeadlessSession.ts        # 无头会话
│   ├── mcp.ts                    # MCP服务器入口
│   ├── CliBridgeLocal.ts         # Bridge模式本地连接
│   └── sdk/                      # SDK类型定义
│
├── tools/                        🛠️ 54个工具(309文件)
│   ├── AgentTool/                🌟 多Agent系统(最复杂, AgentTool.tsx=72KB)
│   │   ├── AgentTool.tsx         # Agent工具主逻辑
│   │   ├── UI.tsx                # Agent渲染UI
│   │   ├── runAgent.ts           # Agent执行循环
│   │   ├── forkSubagent.ts       # 子Agent fork
│   │   └── built-in/             # 内置Agent工具集
│   ├── BashTool/                 # Shell命令执行
│   ├── FileEditTool/             # 文件编辑
│   ├── FileReadTool/             # 文件读取
│   ├── FileWriteTool/            # 文件写入
│   ├── GlobTool/                 # 文件搜索(glob)
│   ├── GrepTool/                 # 内容搜索(grep)
│   ├── WebSearchTool/            # 网络搜索
│   ├── WebFetchTool/             # 网页抓取
│   ├── WebBrowserTool/           # 浏览器工具
│   ├── MCPTool/                  # MCP协议工具调用
│   ├── SkillTool/                # 技能加载执行
│   ├── ConfigTool/               # 配置管理
│   ├── ScheduleCronTool/         # 定时任务
│   ├── SendMessageTool/          # 消息发送
│   ├── LSPTool/                  # LSP语言服务
│   ├── NotebookEditTool/         # Notebook编辑
│   ├── TodoWriteTool/            # TODO管理
│   └── ...(共54个工具目录)
│
├── services/                     📦 服务层(268文件)
│   ├── api/src/                  # Claude/OpenAI/Bedrock/Vertex API封装
│   ├── mcp/                      🔌 MCP协议
│   │   ├── client.ts             # MCP客户端连接
│   │   ├── MCPConnectionManager.tsx # MCP连接管理器
│   │   └── types.ts              # MCP类型定义
│   ├── compact/                  # 上下文压缩(autoCompact + reactiveCompact)
│   ├── analytics/                # 分析/遥测(GrowthBook A/B测试)
│   ├── oauth/                    # OAuth认证
│   ├── plugins/                  # 插件系统
│   ├── SessionMemory/            # 会话记忆
│   ├── autoDream/                # /dream 记忆整理
│   ├── extractMemories/          # 记忆提取
│   ├── skillSearch/              # 技能搜索
│   └── lsp/                      # LSP语言服务
│
├── components/                   🎨 UI组件(598文件)
│   ├── agents/                   # Agent UI组件
│   ├── permissions/              # 权限请求对话框(14种)
│   ├── messages/                 # 消息渲染组件
│   ├── PromptInput/              # 输入框组件
│   ├── tasks/                    # 任务UI(7种Task类型)
│   ├── mcp/                      # MCP UI
│   ├── skills/                   # 技能UI
│   ├── diff/                     # Diff显示
│   ├── Settings/                 # 设置面板
│   └── design-system/            # 设计系统
│
├── commands/                     ⌨️ 95个斜杠命令(231文件)
│   ├── help/ config/ compact/ model/ login/ status/
│   ├── doctor/ review/ memory/ mcp/ skills/ agents/
│   ├── tasks/ session/ cost/ permissions/ plan/
│   ├── commit/ resume/ export/ clear/ diff/
│   ├── vim/ voice/ theme/ keybindings/ locale/
│   ├── buddy/ bughunter/ teleport/ thinkback/ workflows/
│   └── ...(95个子目录)
│
├── utils/                        🔧 工具函数(814文件)
│   ├── model/                    # 模型管理
│   ├── permissions/              # 权限系统
│   ├── settings/                 # 配置管理
│   ├── bash/                     # Bash执行封装
│   ├── git/                      # Git操作
│   ├── github/                   # GitHub API
│   ├── hooks/                    # Hook系统
│   ├── processUserInput/         # 用户输入处理
│   ├── secureStorage/            # 安全存储(Keychain)
│   ├── skills/                   # 技能管理
│   ├── swarm/                    # Agent Swarms
│   └── computerUse/              # Computer Use
│
├── hooks/                        🪝 React Hooks(147文件)
├── ink/                          🖥️ Ink终端UI框架(104文件)
├── state/                        📊 状态管理(9文件)
│   ├── AppStateStore.ts          🔑 全局AppState定义
│   └── store.ts                  # 简单Store(setState+subscribe)
├── web-server/                   🌐 Web CLI后端(14文件)
├── skills/                       🎯 技能系统(28文件)
├── cli/                          💻 CLI处理(129文件)
├── bridge/                       🌉 Bridge模式(36文件)
├── i18n/                         🌍 国际化(8文件)
├── vim/                          ⌨️ Vim模式
├── voice/                        🎤 语音模式
├── native-ts/                    🔧 Native绑定
└── ...(共15个顶级模块)

🔄 核心数据流

用户输入
  │
  ├─ 斜杠命令 ──→ commands.ts ──→ 命令分发 ──→ 执行/显示
  │
  └─ 自然语言 ──→ processUserInput.ts ──→ QueryEngine.ts ──→ query.ts
                     │                         │                │
                     │                         │                ├─ 构建系统提示词
                     │                         │                ├─ 加载记忆(memdir)
                     │                         │                ├─ 创建用户消息
                     │                         │                ├─ 调用AI API (Claude/OpenAI/Bedrock)
                     │                         │                ├─ 流式接收响应
                     │                         │                │   ├─ 文本 → 直接渲染
                     │                         │                │   ├─ 思考 → 渲染thinking
                     │                         │                │   └─ 工具调用 → 权限检查 → 执行
                     │                         │                │
                     │                         │                ├─ 工具执行结果 → 追加消息 → 继续循环
                     │                         │                └─ 自动compact(超token阈值时)
                     │                         │
                     │                         ├─ 上下文管理
                     │                         ├─ 成本追踪(cost-tracker)
                     │                         └─ 会话持久化
                     │
                     └─ Ink渲染 ←── Message[] ←── StreamEvent[]

🌐 Web API 路由表

方法路径功能
POST/api/auth/register用户注册
POST/api/auth/login用户登录
GET/api/auth/me当前用户
GET/api/chat/sessions会话列表
POST/api/chat/sessions创建会话
GET/api/chat/sessions/:id会话详情
GET/api/chat/sessions/:id/streamSSE流式对话
DELETE/api/chat/sessions/:id删除会话
GET/api/files文件列表
POST/api/files/read读取文件
POST/api/files/write写入文件
GET/api/config获取配置
PUT/api/config更新配置
POST/api/full-query/stream完整引擎SSE

🌐 Web API 数据流

浏览器
  │
  ├─ /api/auth/* ──→ 注册/登录/JWT
  │
  ├─ /api/chat/* ──→ 会话CRUD
  │
  ├─ /api/chat/sessions/:id/stream ──→ SSE流式响应
  │     │
  │     └─ webQuery.ts ──→ 独立工具执行(DeepSeek API)
  │        或
  │     └─ fullQuery.ts ──→ 直连query.ts(完整引擎)
  │
  ├─ /api/files/* ──→ 工作空间文件管理
  │
  └─ /api/config/* ──→ 用户配置(LLM provider/API key/model)

🤖 Agent 系统架构

AgentTool.tsx
  │
  ├─ loadAgentsDir.ts ──→ 加载 .claude/agents/ 定义
  ├─ runAgent.ts ──→ Agent执行循环
  │     ├─ fork子进程执行
  │     ├─ 消息传递(父↔子)
  │     └─ 结果收集
  ├─ forkSubagent.ts ──→ 子Agent fork
  ├─ AgentMemory ──→ Agent间共享记忆
  │     ├─ agentMemory.ts ──→ 记忆读写
  │     └─ agentMemorySnapshot.ts ──→ 快照
  └─ built-in/ ──→ 内置Agent工具集
        ├─ BashTool
        ├─ FileEditTool
        ├─ FileReadTool
        ├─ FileWriteTool
        ├─ GlobTool / GrepTool
        └─ ...(与主工具集相同但独立实例)

💾 Web 数据库表

表名字段用途
usersid, username, email, password_hash用户
sessionsid, user_id, title会话
messagesid, session_id, role, content, tool_calls消息
user_configsuser_id, llm_provider, api_endpoint, api_key_encrypted, model_name用户配置

🏗️ 关键设计模式

1. Feature Flags
bun:bundle feature() — 编译时feature开关,tree-shake内构建模块
2. safeRequire
内部构建模块的安全加载,外部构建返回null
3. Store模式
简单Flux Store(setState+subscribe),非Redux
4. Ink渲染
React组件模型渲染终端UI,yoga-layout做Flexbox
5. SSE流式
Web端用Server-Sent Events实时推送AI响应
6. MCP协议
外部工具/资源通过MCP标准协议扩展
7. Compact机制
超token自动压缩上下文(autoCompact + reactiveCompact + contextCollapse)
8. 权限系统
14种权限请求类型,规则引擎控制自动/手动许可
9. Bridge模式
本地↔远程IDE双向通信
10. 用户隔离
Web端每个用户独立工作空间(./workspaces/user_xxx/)

📋 重要文件索引

文件行数功能
src/main.tsx5467CLI主入口,Commander定义
src/tools/AgentTool/AgentTool.tsx~1800Agent工具(最复杂)
src/tools/AgentTool/runAgent.ts~900Agent执行循环
src/QueryEngine.ts1366查询引擎主循环
src/query.ts1768API查询+流处理
src/Tool.ts806工具基类
src/commands.ts853命令注册
src/tools.ts374工具注册
src/web-server/index.ts~100Web API入口

📦 packages/ 子项目

packages/
├── @ant/
│   ├── claude-for-chrome-mcp/    # Chrome浏览器MCP
│   ├── computer-use-input/       # Computer Use输入
│   ├── computer-use-mcp/         # Computer Use MCP
│   └── computer-use-swift/       # macOS Swift原生
├── audio-capture-napi/           # 音频录制N-API
├── color-diff-napi/              # 颜色差异N-API
├── image-processor-napi/         # 图像处理N-API
├── modifiers-napi/               # 修饰键N-API
└── url-handler-napi/             # URL处理N-API