启动
空书包,一层一层装满
运行中的 dsh 是一棵插件树。树不是写死的,是启动时按序叠加出来的。
六步出门
- 01
dsh web
你喊一声管家。
apps/cli/src/bin.ts 解析参数,loadLayeredEnv。
- 02
选 profile
拿出叫 web 的盒子。
loadProfile 读 $DSH_HOME/profiles/<name>/package.json 的 dsh.profile.bundles。
- 03
叠补丁
按顺序把袋子倒进书包。
composeEntries:空列表上 applyEntryPatches。
- 04
boot()
把底板放好,积木开始卡住。
创建根 Context,挂 Loader + include + group,等待全部 fiber ACTIVE。
- 05
断言
数一数,少一块就大声说。
assertEntriesLoaded / assertEntriesActivated。失败 fail-loud,先 restore TTY 再 exit(1)。
- 06
开窗
web 模式打开信箱和玻璃。
web-runtime 打印 URL,默认打开浏览器。headless 则创建一个 Agent、提交任务、打印最后一段助手文本。
补丁层 · 后写的赢
--patch 与环境开关
出门前最后再贴一张。
启动器 overlay。DSH_TELEMETRY_DISABLED 等可禁用行。dsh --profile web --dump-config 打印你机器真正启动的树。
$DSH_HOME/cordis.patch.yml
这台机器上对所有盒子生效的便条,优先级更高。
home 层覆盖 profile 层。watchUserPatches 监视两份文件,HMR 事务式重组合。
profiles/<name>/cordis.patch.yml
你自己在这个盒子上贴的便条。
按 id 整行替换 config,或 insert 新行。不做深合并,要保留的字段必须重述。
dsh-web-app 或 dsh-headless
选带窗户的盒子,或做完就回家的盒子。
web-app 插入 webserver、apiproxy、client 插件名册、workspace、storage。headless 插入一次性 runner。
dsh-base
最大那袋:脑子、手、日记、围栏、钥匙。
每个 shipped profile 的第一层。插入 llm、session、agent、tools、sandbox、fs、shell、skills、subagents… 约 70 行。按平台门控 bash / pwsh。
空根 []
空书包。什么积木都还没放。
profile 的 cordis.yml 每次启动都被写成空数组。树 100% 由补丁构成,这样 dump-config 不会和真实启动漂移。
同一进程,不同套装
Profile 决定整座城怎么拼。Agent preset 决定某一个机器人穿哪套衣服——在 isolate realm 里再挂一棵小树。
standard
标准模式
全套编程机器人:改文件、敲命令、上网、技能、计划、帮手。
完整工具与编码人格。官方 Standard mode。
code
Code Mode
标准套装再加实验室:模型用一段 TypeScript 编排多轮工具。
工具经 Code Mode SDK 暴露,可在一个程序里组合多步操作。
minimal
极简模式
只留嘴巴和橡皮,用来给模型打分。
持久 bash + str_replace_editor。官方 Minimal mode。
cordis
创造模式
允许机器人检查现在挂了哪些积木,并给自己再卡一块。
standard + 运行时自检、内存试插件、组合成新 preset。官方 Creator mode。