2026年8月18日
之前我们以及学会了独立运行的插件,但多数插件要用别人的能力:工具注册表、LLM、Agent。 本章节我们将介绍如何声明依赖,以及框架如何保证依赖就绪后才执行 apply。 什么是服务 服务是一个插件向其他插件公开的命名能力。 在 Harness 中,tools、llm、agents 都是服务,它们挂载在 ctx 上……
阅读全文
2026年8月18日
本章节介绍三种安装方式:npm 一键安装、源码安装、Python SDK。 安装前准备 DeepSeek Harness 的运行时基于 Node.js,官方推荐的一键安装方式不需要任何额外依赖。 源码安装还需要 pnpm 与 Git。 Python SDK 方式需要 Python 3.10 及以上版本。 操作系统:Linux、macOS 或 Windows 均可 Python SDK 支持 Linux x64 / arm64 与 macOS 14+(ar……
阅读全文
2026年8月18日
上一章节创建了 hello-plugin 组合包,这一篇把它安装进一个 profile。 安装步骤在 DeepSeek Harness 组合包 bundle 与 profile:两个 manifest 的基础上进行,可先回看那篇的两个 manifest。 本章节我们将同时回答一个关键问题:多个组合包的配置叠加时,到底谁覆盖谁。 这由生效配置的加载顺序决定。 加载顺序:生效配置的分层……
阅读全文
2026年8月18日
上一章节讲了三角色的概念,这一篇我们将按照官方教程把它写成代码。 我们要实现一个叫 myCap 的能力:输入一段文本,输出全部大写,它小到一眼看懂,又完整覆盖 Definition、Provider、Consumer 三个包。 三步走:Service Definition(抽象类 + 类型)→ Service Provi……
阅读全文
2026年8月18日
前面几章节我们学会了用 defineTool 注册工具,也学会了用事件系统监听各种扩展点。 但现在有个疑问:模型发出一条工具调用之后,到工具真正执行、结果回到模型,中间到底走了哪些环节? 本章节我们将讲清楚 dsh 的「工具执行流水线」,以及如何用钩子插件实现权限门禁。 一句话:一次工具调用会按固定顺序经过多个环节……
阅读全文
2026年8月18日
工具是 Agent 用来干活的函数,模型看到工具定义后决定调用。 本章节我们将用 defineTool 写出第一个工具 greet,并让模型真的调用它。 工具是什么 工具(tool)是一个描述清晰的函数,包含名称、说明、参数和输出格式。 模型在生成回复时,可以根据这些信息发起调用。 在 dsh 里,工具通过 ctx.tools.register 注册到工具注册表。 defineTool 的完……
阅读全文
2026年8月18日
之前章节我们已经注册过监听器、注册过工具、也写过 ctx.effect()。 你有没有想过:一个插件究竟从什么时刻开始「运行」,又在什么时刻开始「卸载」? 本章节介绍 Cordis 插件模型与生命周期状态机,也就是 Fiber 状态机。 Fiber 是什么 每个被加载的插件都拥有一个 Fiber 作用域。 Fiber 可以理解成插件实例的执行单元,……
阅读全文
2026年8月18日
greet 工具把问候语写死在代码里,不同部署想换就得改代码。 本章节让插件接受 cordis.yml 传入的配置,做到"配置与代码分离"。 导出 Config 类型与同名 schema 在插件中导出一个 Config 接口和同名的 Schemastery schema。 默认值直接写在 schema 字段上。 实例 // 文件路径:scratch-plugin/src/my-plu……
阅读全文
2026年8月18日
前几个章节我们一直在用 ctx.tools、ctx.llm、ctx.agents 这些内置服务。 这一章节我们从服务提供方的视角出发,看如何用 Service 基类自己提供一个命名服务,并让消费方获得完整的类型提示。 什么是服务 在 Harness 中,tools、llm、agents 都是服务。 服务是挂载在 ctx 上的命名能力……
阅读全文
2026年8月18日
本章节我们将介绍同一个服务,怎么让不同插件组看到不同实例。 这背后是 Cordis 的 服务隔离(service isolation)与 agent 作用域(scope)机制。 服务隔离:isolate cordis.yml 支持服务隔离:同一个服务可以有多个实例,不同插件组看到不同实例。 关键词是 isolate 配置,配合 group 插件把插件分成组。 实例 #……
阅读全文