Cordis 五个核心思想:dsh 的地基

读 dsh 任何源码前的前置知识:插件、context、依赖注入、类型化事件、可逆 effect。

架构 导读对象:docs/cordis-primer.md 阅读原文 ↗ ← 全部导读

Cordis 是 vendor 进 dsh 的插件框架(vendor/ 目录,含同步流程说明)。这篇 primer 教的是「写一个 harness 插件之前必须懂的最小集合」。

Cordis In Five Ideas

  1. 插件是实现 Service 的对象:可以是带 injectapply(ctx) 字段的函数,也可以是 Service 子类,生命周期由 Cordis 挂载到当前 context。
  2. Context 是服务的仓库:每个服务认领一个稳定的 ctx.<key>(如 ctx.toolsctx.llmctx.sessions),其他插件按键找服务,而不是 import 具体实现。
  3. inject 声明依赖:插件等到所需服务存在才启动——加载顺序靠服务需求表达,不需要手工编排启动顺序。
  4. 类型化事件通信:服务通过 TypeScript declaration merging 声明事件名,然后用五种模式之一派发:emit(观察)、waterfall(包裹)、parallel(扇出)、serial(顺序)、bail(首个终止)。
  5. 注册即可逆 effect:提示词段落、工具 schema、适配器、监听器都通过 ctx.effect() / ctx.on() 安装,重载和卸载时按序回退。

五种派发模式

模式等待?顺序返回值
emit注册序
waterfall注册序
parallel并行
serial注册序
bail注册序,遇 bail 停

派发模式是事件公开契约的一部分,dsh 里每个新事件都用 @mode 标签标注,生成的目录会校验声明与调用点一致。

两条最容易踩的实用规则

怎么继续

官方配套了动手教程 docs/cordis-tutorial/(01-first-plugin → 02-lifecycle-and-effects → 03-services…)和 API 参考 docs/cordis-api/,全部有中文版。读完再去看工具执行管线会把所有概念串起来。