第 29 课:ECC 2.0 — Rust 控制面板与未来方向

所属阶段:第六阶段「综合与创造」(第 28-30 课) 前置条件:第 28 课(跨平台适配与插件机制) 本课收获:理解 ECC 2.0 架构,体验 Dashboard(如环境允许)


一、本课概述

ECC 1.x 是一个基于 Node.js 脚本、Markdown 文件和 JSON 配置的插件系统。它工作得很好,但随着规模增长,有些问题开始浮现:

  • 管理多个并行会话很困难
  • 没有可视化的全局视图
  • 会话状态不持久(关掉终端就丢了)
  • Node.js 脚本在大量 Hook 并发时性能有瓶颈

ECC 2.0 用 Rust 构建了一个控制面板(Control Plane),解决这些问题:

  1. ECC 2.0 架构 --- 模块设计和代码结构
  2. 核心命令 --- Dashboard、会话管理、守护进程
  3. 解决的问题 --- 多会话、可视化、持久化、性能
  4. 当前状态 --- Alpha 质量,可构建可测试
  5. 为什么选 Rust --- 性能、安全、并发

二、ECC 2.0 架构

2.1 源码结构

bash 复制代码
ecc2/src/
├── main.rs              # CLI 入口,命令定义
├── config/
│   └── mod.rs           # 配置管理(Dashboard 布局等)
├── tui/
│   ├── mod.rs           # TUI 模块入口
│   ├── app.rs           # 应用主循环
│   ├── dashboard.rs     # Terminal UI 仪表盘
│   └── widgets.rs       # 自定义 UI 组件(Token 计量、预算状态)
├── session/
│   ├── mod.rs           # 会话模块入口
│   ├── manager.rs       # 会话生命周期管理
│   ├── runtime.rs       # 会话运行时
│   ├── output.rs        # 会话输出流处理
│   ├── store.rs         # SQLite 持久化存储
│   └── daemon.rs        # 后台守护进程
├── comms/
│   └── mod.rs           # 会话间通信
├── observability/
│   └── mod.rs           # 可观测性(日志、指标)
└── worktree/
    └── mod.rs           # Git Worktree 管理

2.2 技术栈

组件 技术 用途
CLI 框架 clap 命令行参数解析
TUI 框架 ratatui 终端用户界面
异步运行时 tokio 异步 IO 和并发
数据库 rusqlite (SQLite) 会话状态持久化
时间处理 chrono 时间戳和日期
错误处理 anyhow 统一错误类型
日志 tracing + tracing-subscriber 结构化日志

2.3 模块职责

bash 复制代码
┌──────────────────────────────────────────────────┐
│                  ECC 2.0 架构                     │
│                                                   │
│  main.rs (CLI)                                    │
│  ├── dashboard  → tui/dashboard.rs (TUI 渲染)    │
│  ├── start      → session/manager.rs (创建会话)  │
│  ├── delegate   → session/manager.rs (委派会话)  │
│  ├── assign     → session/manager.rs (分配任务)  │
│  ├── sessions   → session/store.rs (查询状态)    │
│  ├── status     → session/store.rs (会话详情)    │
│  ├── stop       → session/manager.rs (停止会话)  │
│  ├── resume     → session/runtime.rs (恢复会话)  │
│  └── daemon     → session/daemon.rs (后台服务)   │
│                                                   │
│  session/store.rs ←→ SQLite 数据库               │
│  comms/mod.rs ←→ 会话间消息传递                   │
│  worktree/mod.rs ←→ Git Worktree 隔离            │
│                                                   │
└──────────────────────────────────────────────────┘

三、核心命令

3.1 命令总览

命令 功能 说明
ecc2 dashboard 启动 TUI 仪表盘 可视化所有会话状态
ecc2 start 创建新会话 指定任务、Agent 类型、是否使用 Worktree
ecc2 delegate 委派子会话 从已有会话中派生子任务
ecc2 assign 分配任务 复用已有会话或创建新会话
ecc2 sessions 列出所有会话 查看活跃/完成/失败的会话
ecc2 status 查看会话详情 包括成本、Token、运行时间
ecc2 stop 停止会话 优雅地终止正在运行的会话
ecc2 resume 恢复会话 从持久化状态恢复已暂停的会话
ecc2 daemon 启动守护进程 后台运行,管理任务调度和恢复

3.2 启动会话

bash 复制代码
# 启动一个新的 Claude 会话
ecc2 start --task "Implement user authentication module" --agent claude

# 启动并使用独立的 Git Worktree
ecc2 start --task "Refactor database layer" --agent claude --worktree

# 从已有会话委派子任务
ecc2 delegate main-session --task "Write unit tests" --agent claude --worktree

3.3 Delegate vs Assign

操作 delegate assign
行为 总是创建新会话 优先复用已有会话
适用场景 明确需要新的工作流 有可能续用之前的会话
Worktree 默认创建 按需创建

3.4 Dashboard 界面

Dashboard 是一个终端界面(TUI),使用 ratatui 构建:

bash 复制代码
┌─ ECC 2.0 Dashboard ──────────────────────────────┐
│                                                    │
│  Sessions (3 active, 2 completed)                  │
│  ┌──────────┬─────────┬────────┬────────┬────────┐│
│  │ Session  │ Agent   │ Status │ Cost   │ Tokens ││
│  ├──────────┼─────────┼────────┼────────┼────────┤│
│  │ main-01  │ claude  │ ●      │ $1.23  │ 45.2K  ││
│  │ test-02  │ claude  │ ●      │ $0.45  │ 12.8K  ││
│  │ review-3 │ claude  │ ●      │ $0.30  │ 8.1K   ││
│  │ plan-04  │ claude  │ ✓      │ $0.12  │ 3.2K   ││
│  │ fix-05   │ claude  │ ✓      │ $0.67  │ 18.9K  ││
│  └──────────┴─────────┴────────┴────────┴────────┘│
│                                                    │
│  Selected: main-01                                 │
│  Task: Implement user authentication module        │
│  Runtime: 12m 34s                                  │
│  Budget: $2.00 remaining of $5.00                  │
│                                                    │
│  Output ────────────────────────────────────────── │
│  > Creating auth middleware...                      │
│  > Running tests: 12/15 passed                     │
│  > Fixing failing test: token_expiry_test          │
│                                                    │
│  [q] Quit  [↑↓] Select  [Enter] Details  [s] Stop │
└────────────────────────────────────────────────────┘

Dashboard 的关键特性:

特性 说明
实时状态 会话状态实时更新
成本追踪 每个会话的 Token 使用和费用
输出流 选中会话的实时输出
父子关系 显示会话的委派/被委派关系
未读消息 会话间的消息通知
风险评分 Daemon 活动和调度信息

四、解决的问题

4.1 多会话管理

ECC 1.x 的痛点

diff 复制代码
终端 1:Claude Code 在做主功能开发
终端 2:另一个 Claude Code 在写测试
终端 3:还有一个在做代码审查

问题:
- 三个终端之间没有关联
- 不知道总共花了多少钱
- 一个会话的结果无法自动流转到另一个

ECC 2.0 的解决

scss 复制代码
ecc2 dashboard  ← 一个界面看到所有会话

main-session (主开发)
    ├── delegate → test-session (测试)
    └── delegate → review-session (审查)

所有会话共享状态存储,可以互相通信

4.2 可视化仪表盘

ECC 1.x 没有全局视图。你需要在多个终端之间切换才能了解整体进度。

ECC 2.0 的 Dashboard 提供了一个单一窗口查看所有会话的状态、成本、输出。

4.3 持久化

ECC 1.x:关掉终端 = 丢失会话状态。

ECC 2.0 :所有会话状态存储在 SQLite 中(session/store.rs)。

rust 复制代码
pub struct StateStore {
    conn: Connection,  // SQLite 连接
}

这意味着:

  • 关掉终端后可以恢复会话(ecc2 resume
  • 可以查看历史会话的统计信息
  • Daemon 可以在后台持续管理会话

4.4 性能提升

维度 Node.js (ECC 1.x) Rust (ECC 2.0)
启动时间 ~200ms ~5ms
内存占用 ~50MB ~3MB
并发会话 受 Event Loop 限制 原生多线程
Hook 执行 进程启动开销 原生函数调用

五、Daemon 守护进程

ecc2 daemon 启动一个后台守护进程,负责:

职责 说明
任务调度 自动将待处理任务分配给空闲会话
会话恢复 检测异常退出的会话,尝试恢复
负载均衡 在多个 Lead 会话间重新平衡任务
活动记录 记录调度、恢复、重平衡的活动日志
rust 复制代码
pub struct DaemonActivity {
    pub last_dispatch_at: Option<DateTime<Utc>>,
    pub last_dispatch_routed: usize,
    pub last_dispatch_deferred: usize,
    pub last_recovery_dispatch_at: Option<DateTime<Utc>>,
    pub last_rebalance_at: Option<DateTime<Utc>>,
    pub last_rebalance_rerouted: usize,
}

六、为什么选 Rust

6.1 三个核心理由

理由 说明
性能 零成本抽象,无 GC 暂停。控制面板需要低延迟响应
安全 所有权系统防止内存错误。控制面板管理敏感会话数据
并发 Tokio 异步运行时 + Send/Sync 保证。多会话并发是核心需求

6.2 与 Node.js 的互补关系

ECC 2.0 不是要替代 Node.js,而是互补

scss 复制代码
Node.js (ECC 1.x):
  ├── Skill/Agent/Command 定义(Markdown,不需要编译)
  ├── Hook 脚本(快速迭代,不需要编译)
  └── 安装脚本(跨平台兼容性好)

Rust (ECC 2.0):
  ├── 控制面板(性能关键路径)
  ├── 会话管理(并发和持久化)
  ├── Daemon(长时间运行的后台服务)
  └── TUI Dashboard(低延迟 UI)

七、当前状态与构建

7.1 当前状态

ECC 2.0 目前处于 Alpha 质量

方面 状态
核心功能 可用(dashboard、会话管理、store)
稳定性 Alpha(可能有 Bug)
文档 基础
测试 有单元测试
安装 需要从源码构建

7.2 构建方式

bash 复制代码
# 前置条件:安装 Rust 工具链
# https://rustup.rs/

# 进入 ecc2 目录
cd ecc2/

# 构建
cargo build

# 运行测试
cargo test

# 运行 Dashboard
cargo run -- dashboard

# 或者构建 Release 版本
cargo build --release
./target/release/ecc dashboard

7.3 开发环境要求

要求 最低版本
Rust 1.75+
Cargo 随 Rust 安装
SQLite 系统自带或由 rusqlite 编译
终端 支持 256 色的终端模拟器

八、本课练习

练习 1:阅读 main.rs(10 分钟)

bash 复制代码
cat ecc2/src/main.rs

回答问题:

  • ECC 2.0 定义了哪些子命令?
  • start 命令有哪些参数?
  • delegateassign 有什么区别?

练习 2:浏览源码结构(15 分钟)

浏览 ecc2/src/ 目录,画出模块依赖关系图:

  • 哪些模块依赖 session
  • tui 模块依赖哪些其他模块?
  • store.rs 被哪些模块使用?

练习 3:构建 ECC 2.0(20 分钟,需要 Rust 环境)

如果你的环境中已安装 Rust,尝试构建并运行:

bash 复制代码
cd ecc2/
cargo build
cargo test
cargo run -- dashboard

记录:

  • 构建是否成功?
  • 测试是否全部通过?
  • Dashboard 界面是什么样的?

如果没有 Rust 环境 ,阅读 ecc2/src/tui/dashboard.rs 的前 50 行,理解 Dashboard 的数据结构设计。

练习 4(选做):设计改进

基于你对 ECC 2.0 架构的理解,提出一个改进建议:

  • 你认为还缺少什么功能?
  • 有什么可以优化的地方?
  • 如何提升 Dashboard 的可用性?

九、本课小结

你应该记住的 内容
核心模块 main.rs(CLI)、tui/(Dashboard)、session/(会话管理)、store.rs(SQLite)
解决的问题 多会话管理、可视化仪表盘、状态持久化、性能提升
技术栈 Rust + clap + ratatui + tokio + rusqlite
当前状态 Alpha 质量,可构建可测试
与 1.x 关系 互补而非替代:Rust 做控制面板,Node.js 做内容定义

十、下节预告

第 30 课:综合实战 --- 毕业项目

这是课程的最后一课。你将把前 29 课学到的所有知识综合运用,为一个真实项目设计完整的 ECC 配置方案:选择 Profile、编写 CLAUDE.md、配置 Agent/Skill/Hook、运行完整的开发流程验证。

预习建议 :选择一个你正在开发的真实项目,思考它需要什么样的 ECC 配置。浏览 examples/ 目录中的参考模板。

相关推荐
王小酱2 小时前
第 28 课:跨平台适配与插件机制
ai编程
王小酱2 小时前
第 30 课:综合实战 — 毕业项目
ai编程
王小酱2 小时前
第 23 课:安全(上)— AI 代理特有的威胁
ai编程
王小酱2 小时前
第 18 课:前端框架 — React / Next.js / Vue / Nuxt
openai·ai编程
王小酱2 小时前
第 21 课:API 设计 — RESTful 模式与规范
ai编程
王小酱2 小时前
第 12 课:调用链追踪 — 从 Command 到执行
openai·ai编程·airbnb
王小酱2 小时前
第 13 课:TDD 全流程 — RED-GREEN-IMPROVE
openai·ai编程·aiops
王小酱2 小时前
第 14 课:验证循环 — 从代码到可提交
openai·ai编程·aiops
王小酱2 小时前
第 26 课:Eval 驱动开发 — 衡量 AI 行为
ai编程