{"_id":"dao-code","_rev":"4-06f726633098d7e5d9ed0f6ecee79ebd","name":"dao-code","dist-tags":{"latest":"0.4.1"},"versions":{"0.1.20":{"name":"dao-code","version":"0.1.20","keywords":["ai","agent","coding-agent","deepseek","terminal","tui","ink","cli","llm"],"author":{"name":"tigicion"},"license":"MIT","_id":"dao-code@0.1.20","maintainers":[{"name":"tigicion","email":"tigicion@gmail.com"}],"homepage":"https://github.com/tigicion/dao-code#readme","bugs":{"url":"https://github.com/tigicion/dao-code/issues"},"bin":{"dao":"dist/index.js"},"dist":{"shasum":"847b547676c32bfb6f82fb29d74ae10482987f13","tarball":"https://registry.npmjs.org/dao-code/-/dao-code-0.1.20.tgz","fileCount":151,"integrity":"sha512-eBgoE2pnEXypO+Cwe4TdwWQsNVzYSIsZ3r31ly6MakOafmVElSeI+ceG6YWr2TP3TeHiFz99aFvpxbcHjwGkUg==","signatures":[{"sig":"MEQCIH9jXbJ3yHUbPRF/G6Dl9rIyXJoyUQaGuQ0JnjNkJ4okAiASiE6U5Jg7RtDixnZuOhv15HNawttT0jBH3jhRMv5k8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":647669},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"3087409ff535bf12480a524de20012a242323808","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","start":"node dist/index.js","bundle":"node scripts/sync-version.mjs && bun build ./src/index.ts --compile --outfile dao","typecheck":"tsc --noEmit","accept:mem":"bash scripts/accept-memory.sh","test:watch":"vitest","verify:mem":"tsx scripts/verify-memory.ts","preview:ink":"tsx scripts/welcome-ink.tsx","accept:cache":"bash scripts/accept-cache.sh","debug:distill":"tsx scripts/debug-distill.ts","preview:taiji":"tsx scripts/preview-taiji.ts","bundle:install":"npm run bundle && cp dao \"$HOME/.local/bin/dao\" && codesign --force --sign - \"$HOME/.local/bin/dao\" && echo \"已安装 → $HOME/.local/bin/dao\"","prepublishOnly":"npm run build","preview:welcome":"tsx scripts/preview-welcome.ts"},"_npmUser":{"name":"tigicion","email":"tigicion@gmail.com"},"repository":{"url":"git+https://github.com/tigicion/dao-code.git","type":"git"},"_npmVersion":"11.7.0","description":"DAO CODE —— 道家美学的 DeepSeek V4 终端编码 agent(Ink TUI · 太极欢迎屏 · 流式+工具+审批 · 持久记忆 · prompt-cache 感知)","directories":{},"_nodeVersion":"25.4.0","dependencies":{"ink":"^7.0.5","zod":"^3.23.0","react":"^19.2.7","cli-highlight":"^2.1.11","zod-to-json-schema":"^3.23.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","eslint":"^9.39.4","vitest":"^2.1.0","globals":"^17.6.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/react":"^19.2.17","typescript-eslint":"^8.61.0","ink-testing-library":"^4.0.0","react-devtools-core":"^7.0.1","eslint-plugin-react-hooks":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dao-code_0.1.20_1782012271903_0.6969121286213362","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"dao-code","version":"0.2.0","keywords":["ai","agent","coding-agent","deepseek","terminal","tui","ink","cli","llm"],"author":{"name":"tigicion"},"license":"MIT","_id":"dao-code@0.2.0","maintainers":[{"name":"tigicion","email":"tigicion@gmail.com"}],"homepage":"https://github.com/tigicion/dao-code#readme","bugs":{"url":"https://github.com/tigicion/dao-code/issues"},"bin":{"dao":"dist/index.js"},"dist":{"shasum":"8621bc1549484f5f3d1d7d31949e050a7573bae6","tarball":"https://registry.npmjs.org/dao-code/-/dao-code-0.2.0.tgz","fileCount":155,"integrity":"sha512-HMDdgnNiydD4X7oIJHvMBLPzcy+NLXCPJb6gB0suED/5jcmTaMBxzHkSdYAfaGQ3i8kS3MuXgrZp37/Euds5gg==","signatures":[{"sig":"MEYCIQDVMwHE0RwPVT0WREVioLLfSXNxIHCa+A8nJaf2aEdIHwIhAJ44ZdsKoC+kWVOInTygHRGNrqL2m1CRCsb16UFyyrqm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":667132},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"8e7fd22e18512321c8101ac80c8fc39e86ae27a5","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","start":"node dist/index.js","bundle":"node scripts/sync-version.mjs && bun build ./src/index.ts --compile --outfile dao","typecheck":"tsc --noEmit","accept:mem":"bash scripts/accept-memory.sh","test:watch":"vitest","verify:mem":"tsx scripts/verify-memory.ts","preview:ink":"tsx scripts/welcome-ink.tsx","accept:cache":"bash scripts/accept-cache.sh","debug:distill":"tsx scripts/debug-distill.ts","preview:taiji":"tsx scripts/preview-taiji.ts","bundle:install":"npm run bundle && cp dao \"$HOME/.local/bin/dao\" && codesign --force --sign - \"$HOME/.local/bin/dao\" && echo \"已安装 → $HOME/.local/bin/dao\"","prepublishOnly":"npm run build","preview:welcome":"tsx scripts/preview-welcome.ts"},"_npmUser":{"name":"tigicion","email":"tigicion@gmail.com"},"repository":{"url":"git+https://github.com/tigicion/dao-code.git","type":"git"},"_npmVersion":"11.7.0","description":"DAO CODE —— 道家美学的 DeepSeek V4 终端编码 agent(Ink TUI · 太极欢迎屏 · 流式+工具+审批 · 持久记忆 · prompt-cache 感知)","directories":{},"_nodeVersion":"25.4.0","dependencies":{"ink":"^7.0.5","zod":"^3.23.0","react":"^19.2.7","cli-highlight":"^2.1.11","zod-to-json-schema":"^3.23.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","eslint":"^9.39.4","vitest":"^2.1.0","globals":"^17.6.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/react":"^19.2.17","typescript-eslint":"^8.61.0","ink-testing-library":"^4.0.0","react-devtools-core":"^7.0.1","eslint-plugin-react-hooks":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dao-code_0.2.0_1782401771143_0.3842994295702731","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"dao-code","version":"0.3.0","keywords":["ai","agent","coding-agent","deepseek","terminal","tui","ink","cli","llm"],"author":{"name":"tigicion"},"license":"MIT","_id":"dao-code@0.3.0","maintainers":[{"name":"tigicion","email":"tigicion@gmail.com"}],"homepage":"https://github.com/tigicion/dao-code#readme","bugs":{"url":"https://github.com/tigicion/dao-code/issues"},"bin":{"dao":"dist/index.js"},"dist":{"shasum":"c8a09f45c35f4ce4ed266200b35c0fc5f5cbb21f","tarball":"https://registry.npmjs.org/dao-code/-/dao-code-0.3.0.tgz","fileCount":165,"integrity":"sha512-ga71kpnu5iir4bXw6ieYYXAlSfA8CbeKcnwFxhy9o1LoUs4tu+aNuOJ+AkqGAHimzC7JDVwruY7ykyg4y3ffbQ==","signatures":[{"sig":"MEUCIDM07V6RA+BSW7Ua1INKE5bYHvb+zlW9wVGrXcDx4duWAiEA6DiJha5SuABGcylFLP7JsSW2m12SJytKWKrPPuGdHcM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":707449},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"ef5531ce7d93c93d141eb5b5f80f4b1e90b0e2ca","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","start":"node dist/index.js","bundle":"node scripts/sync-version.mjs && bun build ./src/index.ts --compile --outfile dao","typecheck":"tsc --noEmit","accept:mem":"bash scripts/accept-memory.sh","test:watch":"vitest","verify:mem":"tsx scripts/verify-memory.ts","preview:ink":"tsx scripts/welcome-ink.tsx","accept:cache":"bash scripts/accept-cache.sh","debug:distill":"tsx scripts/debug-distill.ts","preview:taiji":"tsx scripts/preview-taiji.ts","bundle:install":"npm run bundle && cp dao \"$HOME/.local/bin/dao\" && codesign --force --sign - \"$HOME/.local/bin/dao\" && echo \"已安装 → $HOME/.local/bin/dao\"","prepublishOnly":"npm run build","preview:welcome":"tsx scripts/preview-welcome.ts"},"_npmUser":{"name":"tigicion","email":"tigicion@gmail.com"},"repository":{"url":"git+https://github.com/tigicion/dao-code.git","type":"git"},"_npmVersion":"11.7.0","description":"Dao Code —— 道家美学的 DeepSeek V4 终端编码 agent(Ink TUI · 太极欢迎屏 · 流式+工具+审批 · 持久记忆 · prompt-cache 感知)","directories":{},"_nodeVersion":"25.4.0","dependencies":{"ink":"^7.0.5","zod":"^3.23.0","react":"^19.2.7","cli-highlight":"^2.1.11","zod-to-json-schema":"^3.23.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","eslint":"^9.39.4","vitest":"^2.1.0","globals":"^17.6.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/react":"^19.2.17","typescript-eslint":"^8.61.0","ink-testing-library":"^4.0.0","react-devtools-core":"^7.0.1","eslint-plugin-react-hooks":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dao-code_0.3.0_1782713300268_0.9760565971275386","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"dao-code","version":"0.4.1","description":"Dao Code —— 道家美学的 DeepSeek V4 终端编码 agent(Ink TUI · 太极欢迎屏 · 流式+工具+审批 · 持久记忆 · prompt-cache 感知)","author":{"name":"tigicion"},"type":"module","publishConfig":{"access":"public"},"bin":{"dao":"dist/index.js"},"main":"dist/index.js","engines":{"node":">=20"},"scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.build.json","bundle":"node scripts/sync-version.mjs && bun build ./src/index.ts --compile --outfile dao","bundle:install":"npm run bundle && cp dao \"$HOME/.local/bin/dao\" && codesign --force --sign - \"$HOME/.local/bin/dao\" && echo \"已安装 → $HOME/.local/bin/dao\"","start":"node dist/index.js","preview:welcome":"tsx scripts/preview-welcome.ts","preview:taiji":"tsx scripts/preview-taiji.ts","preview:ink":"tsx scripts/welcome-ink.tsx","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","typecheck:eval":"tsc --noEmit -p evals/memory/tsconfig.json","prepublishOnly":"npm run build","verify:mem":"tsx scripts/verify-memory.ts","accept:mem":"bash scripts/accept-memory.sh","accept:cache":"bash scripts/accept-cache.sh","debug:distill":"tsx scripts/debug-distill.ts","debug:harness-wire":"tsx scripts/dump-harness-wire.ts","lint":"eslint ."},"keywords":["ai","agent","coding-agent","deepseek","terminal","tui","ink","cli","llm"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/tigicion/dao-code.git"},"homepage":"https://github.com/tigicion/dao-code#readme","bugs":{"url":"https://github.com/tigicion/dao-code/issues"},"optionalDependencies":{"@lmnr-ai/lmnr":"^0.8.36"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","cli-highlight":"^2.1.11","ink":"^7.0.5","react":"^19.2.7","zod":"^3.23.0","zod-to-json-schema":"^3.23.0"},"devDependencies":{"@types/node":"^22.0.0","@types/react":"^19.2.17","eslint":"^9.39.4","eslint-plugin-react-hooks":"^5.2.0","globals":"^17.6.0","ink-testing-library":"^4.0.0","react-devtools-core":"^7.0.1","tsx":"^4.19.0","typescript":"^5.6.0","typescript-eslint":"^8.61.0","vitest":"^2.1.0"},"gitHead":"a568a1c607ab78671589c135934898362e41cdd3","_id":"dao-code@0.4.1","_nodeVersion":"25.4.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-IgEcfHfR/LWsLHoAu1fwhoSkpJx526UN7D+5njxGrTraaPM4N+4vbOlroBbVZBxX5x6ubyAve8YWq72a1bZbQw==","shasum":"05ba75230f69aeebab83cd40f0547a9c1a00fcf8","tarball":"https://registry.npmjs.org/dao-code/-/dao-code-0.4.1.tgz","fileCount":172,"unpackedSize":817221,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGRqow+bwl4nIrr+73ajdDJA3r0WbzoKySfK8jN9BZAmAiA8I8+L/bN2bNcO8vad/LakjtfWmIZn3zSR04hf6MisKA=="}]},"_npmUser":{"name":"tigicion","email":"tigicion@gmail.com"},"directories":{},"maintainers":[{"name":"tigicion","email":"tigicion@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dao-code_0.4.1_1783516499062_0.2160436020905625"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-21T03:24:31.793Z","modified":"2026-07-08T13:14:59.327Z","0.1.20":"2026-06-21T03:24:32.097Z","0.2.0":"2026-06-25T15:36:11.289Z","0.3.0":"2026-06-29T06:08:20.490Z","0.4.1":"2026-07-08T13:14:59.211Z"},"bugs":{"url":"https://github.com/tigicion/dao-code/issues"},"author":{"name":"tigicion"},"license":"MIT","homepage":"https://github.com/tigicion/dao-code#readme","keywords":["ai","agent","coding-agent","deepseek","terminal","tui","ink","cli","llm"],"repository":{"type":"git","url":"git+https://github.com/tigicion/dao-code.git"},"description":"Dao Code —— 道家美学的 DeepSeek V4 终端编码 agent(Ink TUI · 太极欢迎屏 · 流式+工具+审批 · 持久记忆 · prompt-cache 感知)","maintainers":[{"name":"tigicion","email":"tigicion@gmail.com"}],"readme":"# Dao Code 道\n\n**中文** · [English](./README.md)\n\n[![CI](https://github.com/tigicion/dao-code/actions/workflows/ci.yml/badge.svg)](https://github.com/tigicion/dao-code/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)\n[![Node](https://img.shields.io/badge/node-%E2%89%A520-brightgreen.svg)](./.nvmrc)\n[![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](./CONTRIBUTING.md)\n\n> **以成本、体验、可用性为核心的终端编码 agent** —— 在高性价比的 DeepSeek V4 上,极致压榨模型的潜能与成本优势。\n>\n> *A terminal coding agent built around cost, experience, and availability — squeezing the most capability and the lowest cost out of the high-value DeepSeek V4.*\n\n![Dao Code demo](docs/assets/demo.gif)\n\nDao Code(命令 `dao`)是终端原生的 AI 编码助手:在你的终端里读代码、写代码、跑命令、修 bug,边流式展示推理与工具调用,边在审批门下安全执行,直到任务做完。它面向 **DeepSeek V4**(1M 上下文),中文优先,灵感来自 Claude Code,但走的是另一条路——**不靠贵模型堆体验,而是充分发挥 DeepSeek 的高性价比与极低缓存定价:通过工程化的字节稳定前缀与缓存复用 fork,让跨会话记忆与全程自我纠错几乎不增加 token 开销。**\n\n---\n\n## 为什么是 Dao Code?\n\n### 🌐 可用性\n\n编码 agent 的前提是\"用得上\"。\n\n- **Claude Code** 依赖 Anthropic 账号与网络,国内开箱即用门槛高;\n- **GLM 的 Coding Plan** 名额紧俏、常常抢不到;\n- **Dao Code 完全开源(MIT)**,底座 **DeepSeek 注册即用、按量付费、国内直连**——不挑网络、不抢额度、不等邀请。\n\n### 💰 成本\n\n- **单价低** —— DeepSeek 处于主流可用模型的最低价位档,输入/输出单价都远低于第一梯队闭源模型。\n- **缓存再砍一截** —— DeepSeek 前缀缓存命中价 ≈ 未命中的约 **1/120**(低约两个数量级)。Dao Code 把系统前缀 / 工具表 / 记忆按【逐字节稳定】铺排,反思与记忆都走复用缓存的 fork,让命中率持续走高。\n- **实测(真实开源 bug-fix,非玩具演示)** —— 7 道 SWE-bench 风格任务(valibot / date-fns / es-toolkit / sqlglot / hono),合计 **389 万输入 tok**,**聚合缓存命中 95.8%**(单任务 85.4%–97.7%)。DeepSeek V4 Pro 现价下,**一次完整功能开发(读+改+测+自审)¥0.07–0.21、均 ¥0.15**,7 任务合计 **¥1.07**。每个数都可追溯到 `evals/runs/<task>/run-1/agent.log`,`/cost` 随时复看。\n- **对标 Claude Code 的成本** —— 把这 7 个任务的**同一 token 轨迹**按各家官方单价各算一遍(并把 Dao Code 的高命中率一并算给 Claude、对它有利),总成本仍 **比 Claude Opus 4.8 省 ~30×、比 Sonnet 4.6 省 ~18×**。\n\n  | 任务(真实开源 repo) | 输入 tok | 命中率 | DeepSeek Pro | vs Opus | vs Sonnet |\n  |---|---:|---:|---:|---:|---:|\n  | t7-sqlglot-sqlite-autoinc | 1,218,385 | 97.7% | ¥0.213 | 37× | 22× |\n  | t6-sqlglot-comment-on | 625,772 | 96.3% | ¥0.144 | 32× | 19× |\n  | t9-hono-compress | 699,479 | 96.0% | ¥0.209 | 31× | 18× |\n  | t8-hono-cookie-dup | 502,866 | 94.9% | ¥0.136 | 28× | 17× |\n  | t4-estoolkit-omitby | 445,475 | 94.4% | ¥0.159 | 28× | 17× |\n  | L1-nodeps-toolkit | 289,989 | 93.2% | ¥0.140 | 27× | 16× |\n  | t5-estoolkit-uniqwith | 104,071 | 85.4% | ¥0.068 | 21× | 12× |\n  | **合计** | **3,886,037** | **95.8%** | **¥1.07** | **30×** | **18×** |\n\n  <sub>价以 2026-06 官方现价为准:DeepSeek V4 Pro 命中/未命中/输出 = $0.003625 / $0.435 / $0.87 每 1M;Claude Opus 4.8 = $5 / $25(命中按 0.1× cache-read)、Sonnet 4.6 = $3 / $15。倍数为美元同价口径,与汇率无关;¥ 按 ¥7.1/$ 折算。交叉验证:L1 现价重算 ¥0.140 ≈ 日志内 `/cost` 自带的 ¥0.136。</sub>\n- **缓存机制可现场验证** —— `npm run accept:cache` 用一段多轮对话现网跑一遍,看命中率随轮次从冷启动爬到稳态(机制演示;成本以上面真实评测为准)。\n\n### 🧠 体验\n\n- **可信的记忆 + 反思层** —— 跨会话记住你的偏好与项目约定,且**每次启动按当前代码确定性校验**:过期的剔除、变了的标注,而非盲目堆历史(别家记得住,但会记错)。卡住时自我审视、跑偏时拉回方向。三者都以**复用主前缀缓存的 fork 子代理**实现——提质,却几乎不额外烧钱。\n- **长任务不跑偏、不撞墙** —— 接近上下文上限自动压缩穿越、每 N 轮周期性纠偏防 scope 蔓延,自主跑很久也稳得住。\n- **宪法式优先级** —— 安全与真实 > 你当前的指令 > Dao Code 核心策略(模型 / 缓存纪律)> 技能 / 记忆。装来的第三方技能能改\"做事流程\",但改不动安全与缓存底线。\n\n### ✅ 已被验证\n\n真实开源近期 bug-fix 评测(SWE-bench 风格,fail2pass + pass2pass 双轨判定,测试文件对 agent 隐藏以防 reward-hacking):**稳定解决 13/14**。详见 [测试与评测](#-测试与评测)。\n\n---\n\n## ✨ 特性\n\n### 🗜️ 上下文 & 缓存工程\n\n系统前缀**字节稳定**吃满 DeepSeek 前缀缓存;反思与记忆走**复用主缓存的 fork**(不破前缀);接近上限自动压缩(反应式重试 + 旧工具结果就地清理 + 增量摘要 + 摘要失败硬截断兜底),超大输出落盘、上下文只留指针。`/cost` 看命中率与花费,`/audit cache` 用四维指纹定位\"谁破了缓存\"。\n\n### 🧠 跨会话记忆(会自我校验)\n\n会话结束自动蒸馏你的偏好、项目约定与关键事实;**启动时按当前代码确定性校验**——过期的剔除、变了的标注,而非盲目堆历史。衰减 GC 清死记忆,模型可 `memory_read` 按需检索。\n\n### 🔍 反思层(卡住/跑偏自我纠正)\n\n**挑战者**:连续失败或同错复发时,派独立视角怀疑性复核、质疑前提;**纠偏者**:长任务每 N 轮复述最初目标、揪 scope 蔓延;**reply-challenger**:你重提同一问题时自动介入。三者都跑复用缓存的 fork,几乎不额外烧钱。\n\n### 🪢 长任务稳健\n\n会话日志 + 崩溃恢复(`dao -c`);**影子 git 检查点**(`/restore` `/rewind`,独立快照、不碰你的 `.git`);todo 穿越压缩防目标漂移;DoD 验收(`/dod` + `verify_done`);卡死检测止损;并行 / 后台 / worktree 隔离子代理 + 子↔父双向通信;`--goal` 长任务自主模式。\n\n### 🎐 道家美学的终端体验\n\nInk 富渲染 + 太极开屏 + 亮暗自适应;`@` 引文件、slash Tab 补全、**steering(回合运行中打字排队)**、带行号+语法高亮的 diff、思考块、todo 复选框、道家动词 spinner;**ESC 一键打断**(模型流与 shell 一并停);非 TTY 自动回退纯文本 REPL。\n\n> **基本功(对标 CC,均已落地)**:24 个工具 · `allow/ask/deny` 分层权限 + `auto` 智能审批 + 安全纵深(密钥扫描/SSRF/沙箱/钥匙串)· Skills(含**外来技能自动适配**工具名与模型档)· MCP(stdio + HTTP/SSE,tools/resources/prompts)· Hooks(5 生命周期事件)· 自定义子代理 / slash 命令 / 插件 · profile 多账户(`/account`)· OS 定时调度(`/schedule`)。详见 [扩展系统](#-扩展系统)与下方工具一览。\n\n---\n\n## 📦 安装\n\n**A. 一键安装(无需 Node):**\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/tigicion/dao-code/master/install.sh | sh\n```\n\n或手动到 [Releases](../../releases) 下载:macOS `dao-darwin-arm64`(Apple 芯)/`dao-darwin-x64`(Intel)、Linux `dao-linux-arm64`/`dao-linux-x64`、Windows `dao-windows-x64.exe`。Unix 下 `chmod +x` 后运行;Windows 直接双击 `.exe`。\n\n**B. npm(需 Node ≥ 20,全平台):**\n\n```bash\nnpx dao-code        # 零安装试用\nnpm i -g dao-code   # 全局安装,命令名 dao\n```\n\n**C. 从源码:**\n\n```bash\ngit clone https://github.com/tigicion/dao-code.git && cd dao-code\nnpm install && npm run build && npm link   # 之后可全局 dao\n# 或开发直跑:npm run dev\n```\n\n---\n\n## 🚀 快速开始\n\n1. 拿一个 DeepSeek API key:<https://platform.deepseek.com/api_keys>\n\n2. **启动 → 跟着引导填 key:**\n\n   ```bash\n   dao                # 已安装(二进制/全局);或 npx dao-code\n   ```\n\n   首次在终端运行且没检测到 key 时,会引导你粘贴,并存到 `~/.dao/config.json`(下次自动读,无需再配)。\n\n3. 或用 headless 一次性模式传 key:\n\n   ```bash\n   dao --api-key sk-xxx --provider deepseek \"讲个笑话\"\n   ```\n\n4. 浅色终端:运行中输入 `/theme` 切换,或启动前设 `DAO_THEME=light`。\n\n常用斜杠命令(完整列表见 `/help`):\n\n| 命令 | 作用 |\n|---|---|\n| `/init` | 扫描本仓库生成 `DAO.md`(项目概览/约定,供以后会话自动加载) |\n| `/model [id]` | 切换模型(不带参数在 `deepseek-v4-pro` / `deepseek-v4-flash` 间切换) |\n| `/mode [x]` | 权限模式 `default` / `acceptEdits` / `auto`(智能审批)/ `plan`(亦 **Shift+Tab** 循环) |\n| `/plan` | 快捷切换 plan(只读+提方案)/ normal |\n| `/goal <目标>` | 长任务自主模式(自动批准 + 连续推进,大任务自动分阶段) |\n| `/cost` | 查看 token 用量与缓存命中率 |\n| `/skills` | 列出 / 开关技能 |\n| `/compact` | 手动压缩对话 · `/clear` 清空 · `/help` 命令列表 · `/exit`(亦 `/quit`)退出 |\n\n> 启动时加 `--yolo`(如 `dao --yolo` / `dao --yolo \"任务\"`)可一开始就进入自动批准;运行中用 `/yolo` 随时开关。\n> `dao --verbose`(或 `--debug`)**启动**即进入详尽模式:工具结果全量、思考全量、并展示工具的原样参数。\n> 普通 `dao` 启动时默认截断,运行中按 **Ctrl+O** 展开/收起全量(对标 CC);已打印进滚动区的历史无法原地改,故展开时会把最近一条折叠内容补充显示一次。\n\n---\n\n## ⌨️ 用法\n\n**交互模式**(默认):\n\n```bash\ndao\n```\n\n- 输入消息回车发送;`↑/↓` 翻历史;`Esc` 打断当前回合;`/` 开头走斜杠命令(带补全提示)。\n- 行内编辑:`←/→` 移光标、`Ctrl-A/E` 行首尾、`Ctrl-W` 删词、`Backspace/Delete` 按光标删;支持粘贴(不自动提交)。\n- `@` 引用文件:输入 `@` + 路径片段,列出匹配文件,`Tab` 补全。\n- 写/执行类操作经审批门(`[y]本次 [a]记住(写 allow 规则) [n]拒绝`);也可在 `.dao/settings.json` 用 allow/ask/deny 规则预先放行或拦截(见「扩展系统 · 权限控制」);`/yolo` 或 `--yolo` 全自动批准(deny 仍拦)。\n\n**一次性模式**(把任务作为参数,跑完即退,不蒸馏记忆,适合脚本):\n\n```bash\ndao \"把 src/utils.ts 里的 formatDate 改成支持时区\"\n```\n\n---\n\n## 🧠 它怎么工作\n\n```\n你 ──▶ Ink TUI ──▶ agent loop ──▶ DeepSeek V4\n                      │  streamChat(流式推理+回答)\n                      │  ▶ 模型请求工具调用\n                      │  ▶ 审批门(写/执行需放行)\n                      │  ▶ 执行工具 → 回灌结果\n                      └─ 循环直到模型不再请求工具\n```\n\n- **agent loop**(`src/agent/loop.ts`):每回合调 `streamChat` 流式拿推理+回答,模型若请求工具就经审批门执行、把结果回灌,循环至完成或达最大轮数;`AbortSignal` 透传给模型流与工具,支持 ESC 中断。\n- **模式**:plan 模式下,即便模型请求写/执行工具也会被本轮允许表直接拒绝(只读+提方案);normal 模式正常执行。\n- **记忆**(`src/memory/`):启动时迁移→加载→对实时代码确定性验证→注入固定前缀;退出时用便宜的 flash 模型蒸馏新事实,去重后 upsert。\n- **缓存与压缩**:系统前缀固定以吃 DeepSeek 前缀缓存;接近 1M 上下文上限时自动压缩早期消息为摘要。\n\n---\n\n## 🪢 长任务稳健性\n\n面向\"自主跑很久、不漂移、可恢复、能验收\"的长任务:\n\n- **会话日志 + 崩溃恢复**:每回合把事件写 `.dao/sessions/<id>/events.jsonl`、状态快照写 `state.json`;崩溃/异常退出后 `dao -c` 恢复上次会话(`src/session/log.ts`)。\n- **影子 git 检查点**:独立 `.dao/shadow.git` 对工作区快照(不碰你的 `.git`/不改你的历史);`/restore` 一键回退上一回合改动(`src/session/checkpoint.ts`)。\n- **任务清单穿越压缩**:`todo_write` 维护的清单在压缩后作为 system 消息重注入,防长任务目标漂移。\n- **验证驱动完成(DoD)**:`/dod <命令>`(或 `DAO_VERIFY_CMD`)设可执行验收命令,`verify_done` 跑它——通过(exit 0)才算完成;没设则模型据证据自判。\n- **卡死检测 + 止损**:重复同一工具调用/反复同一错误达阈值 → 先提醒换思路、再卡则停止,防空转烧预算(`src/agent/stuck.ts`)。\n- **超大输出落盘**:工具输出超阈值时全量落 `.dao/spill/`、上下文只留截断+指针,按需 `read_file` 取回。\n- **并行 / 后台子代理 + 通知队列**:`agent` 传 `tasks[]` 并行,或 `background:true` 后台跑(立即返回、不阻塞主循环);完成后结果作为 `<task-notification>` 自动注入续跑(`src/agent/tasks.ts`)。\n- **按需记忆检索**:`memory_read` 让模型主动检索跨会话记忆(启动只注入 top-K,被截断/刚写的也查得到)。\n- **长任务自主模式**:`dao --goal`(旧名 `--task` / `--coordinator` 仍兼容)或运行时 `/goal <目标>` —— 自动批准 + 自主连续推进 + 更高轮数;大任务自动分阶段编排(研究并行 → 综合 → 实现 → `verify_done` 验收),仅真卡住才问你。\n\n---\n\n## 🧩 扩展系统\n\n- **权限控制**:规则三态 `allow / ask / deny`,语法 `Tool(specifier)`——`Bash(npm run test:*)`(命令前缀)、`Edit(src/**)`/`Read(//etc/**)`(gitignore 式路径 glob)、`WebFetch(domain:example.com)`、裸工具名、`mcp__server__tool`。优先级 **deny > ask > allow > 模式/能力默认**(deny 是硬黑名单,YOLO 下也拦)。\n  - **分层**(低→高优先级):`~/.dao/settings.json`(用户)< `.dao/settings.json`(项目,入库)< `.dao/settings.local.json`(本地,不入库)< **CLI**(`--allow`/`--deny`/`--add-dir`/`--permission-mode`)< **企业托管策略**(`/etc/dao/managed-settings.json` 等,不可被下层覆盖)。\n  - **复合命令逐段检查**:`cd /tmp && rm -rf x` 会按 `&&`/`||`/`;`/`|` 拆开,任一子命令命中 deny 即整条拦截(杜绝绕过)。\n  - **权限模式**(`/mode <x>` 或 **Shift+Tab** 循环;状态栏显示):`default`(按需审批)/ `acceptEdits`(自动批准文件编辑)/ `auto`(AI 分类器智能审批:只读与工作区内编辑自动放行、拿不准转人工)/ `plan`(只读规划);`bypassPermissions`(=YOLO)仅 `dao --yolo` 启动时开。\n  - **审批四档**:`[y]` 本次 / `[s]` 本会话 / `[a]` 记住(写 allow 规则到 `.dao/settings.local.json`)/ `[n]` 拒绝。\n  - `additionalDirectories`:预授权的工作区外目录,读取不弹窗。\n  - 引擎:`src/permissions/`(rules / identity / settings / engine / gate),含端到端测试。\n- **自定义子代理类型**:`.dao/agents/<name>.md`(frontmatter:name/description/tools 白名单/model + 正文 prompt)。`agent` 工具 `agent_type` 指定;各有专属角色与工具。\n- **自定义 slash 命令**:`.dao/commands/<name>.md`(正文为 prompt 模板,`$ARGUMENTS`/`$1`)。`/<name> 参数` 展开成一个回合跑。\n- **Skill(开箱即用技能)**:`.dao/skills/<name>/SKILL.md`。渐进式披露:启动只列 name+description,模型用 `skill` 工具按需加载正文。\n- **Hooks(生命周期钩子)**:`.dao/hooks.json`。PreToolUse(可阻断)/PostToolUse(如自动格式化)/UserPromptSubmit(注入上下文/阻断)/SessionStart/End。\n- **MCP**:`.dao/mcp.json`。连 stdio MCP server,工具自动注册为 `mcp__<server>__<tool>`。\n- **子代理编排**:并行 `tasks[]`、`background:true` 异步后台、`isolate:true` git worktree 隔离、`task_send` 给运行中任务追加指令、前台超时自动转后台、转录落盘 `.dao/subagents/`。\n- **steering**:回合运行中也能打字,回车排队,当前回合结束后自动处理。\n\n> 兼容 Claude Code:`settings.json`、`SKILL.md`、`hooks.json`、`mcp.json` 与 CC 同款格式(工具名自动映射 `Bash↔exec_shell` 等),现成的 CC 配置/技能可直接拿来用。\n\n## 🛠️ 工具一览\n\n注册表见 `src/index.ts`,实现在 `src/tools/`。\n\n| 工具 | 作用 |\n|---|---|\n| `read_file` | 读文本文件,返回带行号内容(支持 offset/limit) |\n| `list_dir` | 列目录条目 |\n| `write_file` | 新建或整体重写文件(覆盖前需先读过) |\n| `edit_file` / `multi_edit` | 精确字符串替换(单处 / 一次多处) |\n| `notebook_edit` | 编辑 Jupyter notebook 单元 |\n| `exec_shell`(+`_poll`/`_kill`) | 在工作区执行 shell;支持前台/后台(`background=true`)、读后台输出、终止 |\n| `grep_files` / `file_search` | 按内容正则 / 按文件名 glob 搜索 |\n| `ask_user` | 向用户提一个澄清问题并等回答 |\n| `fetch_url` / `web_search` | 抓网页纯文本 / DuckDuckGo 联网搜索 |\n| `todo_write` | 维护单层任务清单(整表替换) |\n| `verify_done` | 跑 DoD 验收命令判定任务是否完成 |\n| `memory_write` / `memory_read` | 记一条跨会话记忆 / 按需检索记忆 |\n| `skill` / `skill_install` | 加载技能正文 / 安装外部技能 |\n| `agent` / `task_send` / `message_parent` | 派子代理 / 给运行中子代理追加指令 / 子→父回传 |\n| `schedule` | 创建 OS crontab 定时任务 |\n\n---\n\n## 🧪 测试与评测\n\n单元测试(Vitest):\n\n```bash\nnpm test          # 跑一遍\nnpm run test:watch\nnpm run typecheck\n```\n\n> `npm audit` 的告警均来自 **dev 测试工具链**(vitest / vite / esbuild),不随发布产物(`dist`)分发,不影响 `dao` 运行时;其中的 critical 是 `vitest --ui` 服务器漏洞(本项目不使用)。CI 见 [`.github/workflows/ci.yml`](.github/workflows/ci.yml)。\n\nagent 端到端评测在 `evals/`:SWE-bench 风格,取材真实开源近期 bug-fix,**fail2pass / pass2pass 双轨验证**(改完后目标测试由失败转通过,且既有功能测试不被改坏),测试文件对 agent 隐藏、跑完才注入,以防 reward-hacking。\n\n```bash\n# evals 使用 --api-key 和 --provider;在 evals/run.mjs 中设置或通过环境传入\nnode evals/run.mjs            # 默认每题 3 次,看 pass^k 可靠性\nEVAL_RUNS=1 node evals/run.mjs # 冒烟\n```\n\n> 评测真实调用模型、产生费用;每题在抛弃式临时目录跑,无人值守时设 `DAO_AUTO_APPROVE=1` 自动放行。详见 [`evals/README.md`](evals/README.md)。\n\n---\n\n## ⚙️ 配置项\n\n| 变量 | 说明 | 默认 |\n|---|---|---|\n| — | API key:运行 `dao` 交互进入首次引导设置,或 `/login` 更换 | — |\n| `DEEPSEEK_MODEL` | 默认模型(已弃用) | `deepseek-v4-pro` |\n| `DAO_THEME` | `light` / `dark` 强制终端背景 | 据 `COLORFGBG` / OSC 11 探测,否则 `dark` |\n| `DAO_REASONING_EFFORT` | 思考强度 | `max` |\n| `DAO_MAX_TURNS` | 单回合最大工具轮数 | `50` |\n| `DAO_AUTO_APPROVE` | 跳过所有审批(**仅限沙箱/eval**) | 关 |\n| `DAO_REFOCUS_EVERY` | 纠偏者:长任务每 N 轮复核方向(`0`=关;仅 `--goal` 长任务生效) | `3` |\n| `DAO_FAIL_STREAK` | 挑战者:连续失败达此轮数 → 审视进展(交互式生效) | `3` |\n| `DAO_REPEAT_ERR` | 挑战者:同一错误复发达此次数 → 审视进展(交互式生效) | `2` |\n| `DAO_CHALLENGE_REPEAT_SIM` | 挑战者:用户重提同一问题的相似度阈值,达到则异步唤起审视者(`0`=关;仅交互式) | `0.1` |\n| `DAO_REFLECT` | 设 `0` 全局关闭反思层(挑战者+纠偏者) | 开 |\n\n---\n\n## 🗺️ 状态\n\n已发布 **v0.3.0**(npm `dao-code` + Releases 多平台二进制)。核心完整:Ink TUI 与太极欢迎屏、流式 agent 循环、24 工具、分层权限、持久记忆、缓存工程、反思层、长任务稳健、Skills/MCP/Hooks/子代理扩展、真实 OSS 评测 harness。持续迭代中,欢迎 issue/PR。\n\n---\n\n## 🎨 用 Dao Code 打造\n\n这些开源项目完全用 Dao Code 开发:\n\n- **[redis-rs](https://github.com/tigicion/redis-rs)** —— Rust 写的 Redis 兼容服务器(RESP2、~80 命令),在 `dao --goal` 长任务自主模式下从零完成。\n- **[magic-canvas](https://github.com/tigicion/magic-canvas)** —— 幼儿 iPad 涂鸦 App(彩虹线 + 贴纸,SwiftUI + SpriteKit)。\n- **[bubble-machine](https://github.com/tigicion/bubble-machine)** —— 幼儿 iPad 吹泡泡 App(长按吹大 / 按住连发,程序化音效)。\n\n---\n\n## 🤝 参与贡献\n\n欢迎 issue 与 PR!上手、脚本、提交规范见 [CONTRIBUTING.md](./CONTRIBUTING.md);社区准则见 [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md)。\n**安全漏洞请勿走公开 issue**,按 [SECURITY.md](./SECURITY.md) 私密上报。变更记录见 [CHANGELOG.md](./CHANGELOG.md)。\n\n---\n\n## 📄 License\n\nMIT © tigicion\n","readmeFilename":"README.zh-CN.md"}