DreamCode 是一个 TypeScript 优先的本地 CLI Agent 运行时 MVP。第一阶段聚焦一个小而真实的闭环: 创建会话、构建上下文、调用模型 provider、通过权限引擎执行工具调用、写入 JSONL 事件日志, 并返回带证据的最终总结。
DreamCode 使用紫色像素猫作为品牌标识,黑色像素保留眼睛细节;主题色围绕同一紫色展开,并保留终端 UI 所需的语义色。
| Token | Hex | 用途 |
|---|---|---|
| Brand | #a855f7 |
主品牌色、运行状态、重点控件 |
| Brand light | #c084fc |
Logo 高光、标题、强调文字 |
| Brand dark | #7c3aed |
Logo 阴影、深色状态 |
| Ink | #0b0b0f |
深色背景基准 |
| Text | #f5f3ff |
主文本 |
| Muted | #9ca3af |
次级文本、分隔线 |
| Success | #6ee7b7 |
成功状态 |
| Warning | #fbbf24 |
警告状态 |
| Danger | #f472b6 |
风险、拒绝、错误强调 |
pnpm install
pnpm dreamcode --provider fake --cwd evals/fixtures/failing-test-js "修复当前项目的测试失败, 并运行测试确认。"进入交互式 DreamCode shell:
pnpm dreamcode桌面版面向 Windows 10/11 x64。开发时先构建 Main、preload 和 Renderer,再启动编译后的 Electron 应用:
桌面端正式 UI 使用 React + Vite 实现。页面编排位于 packages/desktop/src/renderer/app/App.tsx,组件位于 packages/desktop/src/renderer/components,视觉样式位于 packages/desktop/src/renderer/app/app.css。packages/desktop/index.html 只是 Vite 的空挂载入口,不是 UI/UX 实现文件;不要在其中或新的 renderer.html 中实现产品界面。详细边界见 packages/desktop/README.md。
pnpm desktop:build
pnpm --dir packages/desktop exec electron dist-main/main/index.jsRenderer 热更新使用两个终端:
# 终端 1
pnpm --filter @dreamcode/desktop build:main
pnpm desktop:dev
# 终端 2
$env:VITE_DEV_SERVER_URL="http://localhost:5173"
pnpm --dir packages/desktop exec electron dist-main/main/index.js确定性验收使用普通 Fake Provider,不需要 API key:
pnpm desktop:e2e生成 Windows x64 安装包和便携版:
pnpm desktop:dist
pnpm --filter @dreamcode/desktop chain-test
pnpm --filter @dreamcode/desktop checksums输出位于 packages/desktop/release:
DreamCode-Setup-0.1.0-x64.exe:双击后按向导完成当前用户安装,可选择安装目录。DreamCode-Portable-0.1.0-x64.exe:双击即可直接启动,无需安装或管理员权限。chain-test-report.json:便携版完整任务、命令、重启和 Session 续聊证据。SHA256SUMS.txt:两个可执行文件的 SHA-256。
桌面版配置与 Session 默认保存在 %USERPROFILE%\.dreamcode。API key 可直接保存到配置文件,也可以保存环境变量名;直接保存时为明文,请只在受信任的 Windows 账户中使用。卸载 NSIS 应用不会删除该目录中的配置和 Session 数据;需要清除时由用户自行备份后删除。便携版同样使用这一数据目录,不会把密钥写入可执行文件所在目录。
常用 slash 命令:
/llm 选择 provider/model 并配置 API key
/status 查看当前 cwd、mode、model 和配置文件路径
/mode MODE 切换模式: plan | guided | yolo | full
/cwd PATH 切换工作区目录
/sessions 查看当前工作区历史 session
/diff ID 查看 session 文件变更 diff
/skills 列出可用 Skill
/mcp 列出配置的 MCP 工具
/clear 清空当前 REPL 的对话摘要
/config 显示配置文件路径
/exit 退出
/llm 使用方向键选择 provider/model, 并默认把 API key 明文保存到 ~/.dreamcode/config.json。后续可以直接运行 pnpm dreamcode 使用已保存的模型配置。
构建并运行编译后的 CLI:
pnpm build
node packages/cli/dist/main.js --provider fake --cwd evals/fixtures/readme-update "根据 package.json 和源码更新 README 的使用说明。"查看可用模型 provider:
pnpm dreamcode --list-providers使用 DeepSeek 做真实验收:
pnpm dreamcode
# 在 REPL 中输入 /llm, 用方向键选择 deepseek / deepseek-v4-pro, 粘贴 API key 保存到 config.json。
# 然后输入:
# 根据 package.json 和源码更新 README 的使用说明。也可以直接在 CLI 中传入 API key。注意这种方式可能进入 shell 历史记录, 日常使用更推荐 /llm 写入本地 config.json:
pnpm dreamcode --provider deepseek --model deepseek-v4-pro --api-key "你的 DeepSeek API Key" "分析当前项目结构"- CLI 入口:
dreamcode [prompt...] --mode plan|guided|yolo|full --cwd <path>。 - 无 prompt 时进入交互式 REPL, 支持持续对话和 slash command。
- 流式 CLI 输出: 展示模型文本、工具调用、权限决策、工具状态、文件变更和最终总结。
- 持久配置:
~/.dreamcode/config.json, 支持/llm保存 provider/model/API key 配置。 - JSONL 事件日志:
~/.dreamcode/sessions/<session-id>/events.jsonl。 - Session history / resume:
dreamcode sessionsdreamcode show <session-id>dreamcode resume <session-id> "继续任务"dreamcode diff <session-id>dreamcode rollback <session-id> --file <path>dreamcode index rebuild
- 派生索引:
~/.dreamcode/index.sqlite.json, 可从 JSONL sessions 重建;JSONL 仍是事实源。 - Agent 主循环: 支持单条 assistant message 提出多个 ToolCall;只读调用组成有界并发 wave,Shell、写入、后台任务和交互工具作为 exclusive barrier。
- Fake 模型 provider: 用于确定性的集成测试。
- OpenAI-compatible 模型 provider 基础设施:
- 内置
openai、deepseek、qwen、kimi、zhipu、siliconflow、minimaxpreset。 - 支持
openai-compatible自定义 provider。 - CLI 支持
--provider、--model、--api-key、--api-key-env、--base-url、--list-providers。
- 内置
- Tool Registry: 注册经过 Zod 校验的内置工具:
file.read,file.write,file.patchsearch.grep,search.glob- Windows:
pwsh; Unix:bash job_output,job_list,job_killgit.status,git.difftodo.write,question.askweb.search,web.fetchskill.load,skill.read_resourcemcp.list,mcp.call- Core 默认将 Tool Registry 中的全部工具 schema 发送给模型,包括 Web、Skill 和 MCP;实际执行仍由 Permission Engine 控制。
- 命令执行采用平台专属 Shell:Windows 使用
pwsh,Unix 使用bash;长任务通过run_in_background启动,并使用job_output、job_list、job_kill管理。 - 长期程序由 session 隔离的 Process Supervisor 管理,日志直接落盘并受容量限制,宿主正常退出或 session 删除时清理活动进程。
- 命令结果提供机器可读的错误分类、execution outcome、4 KiB stdout/stderr 首尾预览和完整 artifact 引用。
- Tool Result Aggregator 保证每个 ToolCall 都有独立结果,同时对一次模型步骤的全部工具结果施加共享字符预算,避免 N 个结果线性放大下一轮上下文。
file.read返回带真实行号的窗口并支持offset/limit精确续读;文件快照和回滚由file.write/file.patch在写入前保存 snapshot,同时保存 patch artifact。- Permission Engine: 实现 Safe YOLO v0 规则:
- 自动允许低风险 workspace 读写、搜索、只读 git、常见 test/lint/build 命令。
- 对安装依赖、未知 shell 命令、疑似网络命令、workspace 外读取进行询问。
- 拒绝 secret 读取、workspace 外写入、递归危险删除、强推、硬重置等高风险动作。
- Safe YOLO v1 扩展:
- Web 只读访问在 yolo/full 下允许, guided 下询问, plan 下拒绝。
- MCP 工具默认询问, full mode 才自动允许配置内 MCP tool。
- dependency install 标记为
install_dependency风险。
- Context Builder: 加载
DREAMCODE.md、包含 todo 状态,并按实际 messages、工具 schema 与 Provider 协议开销估算和压缩上下文。 - Model usage 区分完整输入、缓存命中输入、未缓存输入和输出 Token;缓存输入仍计入上下文容量。
- Eval fixtures: 覆盖失败测试修复、README 更新和安全拦截。
pnpm lint
pnpm typecheck
pnpm test
pnpm build当前测试覆盖:
~/.dreamcode/config.json的配置读写和 active profile。- permission allow/ask/deny 与 workspace path boundary。
- file patch 的 changed-file 记录。
- shell timeout 处理。
- runtime 平台事实、结构化 process 执行、Shell 单表达式校验和输出外置。
- 可选工具 schema 分层、回合内紧凑缓存命中和缓存失效。
- Provider 缓存 Token 归一化与包含工具 schema 的请求前估算。
- fake model 端到端修复失败的 JavaScript 测试。
- secret 读取和破坏性删除的拒绝逻辑。
- OpenAI-compatible tool schema 顶层 object 兼容性。
- 写入后重复只读检查的停止保护。
- Phase 2 覆盖:
- session resume 和 JSONL replay。
- session index rebuild。
- snapshot rollback。
- local web fetch artifact。
- skill 渐进读取。
- fake MCP stdio server tool call。
真实模型链路评测见 docs/evals/real-model-cinemo-eval.md。fake model 只作为确定性运行时回归, 真实能力以 DeepSeek 读取和理解 D:\Files\Github\Cinemo、连续问答、写入项目文档的闭环为准。
Phase 2 真实模型验收已使用本地 DeepSeek 配置跑通:
- session:
sess_mrd8o35b_ro5orl8t - workspace: 临时
readme-updatefixture 副本 - initial turn: 读取
package.json/README.md, 创建PHASE2_REAL_MODEL_CHECK.md - resume turn:
dreamcode resume sess_mrd8o35b_ro5orl8t ..., 追加Phase 2 resume turn OK dreamcode show显示 2 个 turns,dreamcode diff显示 create + update diff。
packages/
cli/ CLI 参数解析和终端流式渲染
core/ Agent 主循环、会话编排、最终总结
context/ 上下文构建器和压缩辅助函数
models/ fake 与 OpenAI-compatible 模型 provider
safety/ 权限引擎、路径边界、命令分类器
shared/ 共享类型、schema、id、事件
store/ JSONL 事件日志和会话目录辅助函数
tools/ 工具注册表和内置工具