Cordis 专栏:学习路径与目录
专栏:Cordis 插件框架 · 第 1 / 12 篇Cordis 是 dsh 底层的插件框架:插件向共享上下文贡献服务、类型化事件和可逆副作用。dsh 把它以源码形式 vendor 进仓库(vendor/cordis/,核心仅约 2700 行 TypeScript),改名 @deepseek-ai/cordis。读懂它,dsh 源码里 80% 的”魔法”就有了名字。
这个专栏的特别之处:每一篇都直接引用 vendored 源码逐行讲解——不是教程式的”用法示例”,而是带你去 context.ts、events.ts、fiber.ts 里看实现。
前置要求
- 完成「TypeScript 与 Node 地基」专栏(特别是第 5 篇声明合并、第 7 篇插件宿主、第 4 篇事件循环);
- 第 7 篇我们手写过 60 行的 mini 插件宿主——Cordis 专栏会反复对照它:“工业版多出来的每一行防的是什么”。
学习路径
目录
| # | 篇章 | 核心问题 |
|---|---|---|
| 2 | 第一个插件:三种形态与最小运行环境 | 插件长什么样?怎么跑起来? |
| 3 | Context:依赖容器与 Proxy | ctx 是什么?ctx.tools 为什么能点出来? |
| 4 | 服务系统:provide 与 Service 基类 | 服务如何注册、如何变成可调用对象? |
| 5 | 依赖注入:inject 与门控 | “等依赖就绪再启动”是怎么实现的? |
| 6 | 事件系统(上):五种分发模式 | emit/waterfall/serial 的实现原理? |
| 7 | 事件系统(下):类型安全与作用域 | 事件名拼错为何编译报错?作用域过滤怎么做? |
| 8 | fiber 与 effect:可逆副作用 | 定时器、监听器如何”注册即托管”? |
| 9 | 生命周期:fiber 状态机 | PENDING→ACTIVE→DISPOSED 的完整旅程 |
| 10 | 作用域:isolate 与上下文继承 | dsh 怎么让每个 agent 有独立的世界? |
| 11 | 热重载:fiber.update 与 HMR | 改配置不重启是怎么做到的? |
| 12 | 实战:用 Cordis 组装一个微应用 | 毕业项目:配置树 + 插件 + 事件 + 优雅关机 |
运行环境
所有示例可直接运行:
mkdir cordis-lab && cd cordis-lab
npm init -y && npm i cordis
npx tsx 你的文件.ts # 或 node --experimental-strip-types
示例使用上游 npm 包 cordis(cordiverse 出品);dsh 内 vendored 的 @deepseek-ai/cordis 是同一框架的改名版(v4 系),API 一致。想读 dsh 内那份源码:deepseek-harness/vendor/cordis/src/。
本专栏是「TypeScript 与 Node 地基」的进阶篇、「DeepSeek Harness」专栏的直接前置。读完本专栏再进 dsh 专栏第 4 篇之后的内容,体感是”全部在复习”。