一个独立的 Pi Package / Extension:Pi 只注册固定入口 toolbox_run,入口内部创建一次性的 Cordis 运行时,由嵌套 Agent Loop 自主发现、加载并调用已有原子插件。
toolbox_run是唯一注册到 Pi 的工具。- 每次调用创建独立
@deepseek-ai/cordisroot context。 - 初始只加载元工具:
catalog_search、catalog_inspect、plugin_load、runtime_inspect。 - 只读取插件
toolbox.plugin.json做搜索;命中后才读取PLUGIN.md;真正plugin_load时才通过jiti导入index.ts。 - 插件通过内部
ctx.toolbox.registerOperation()暴露原子操作,不调用 Pi 的registerTool()。 - 每次调用结束、失败或取消,都逆序 dispose 动态插件,再 dispose Cordis root。
- MVP 只加载
risk: "read-only"的包内插件,以及项目受信目录.pi/cordis-toolbox/plugins/中的插件。 - 不生成、不执行模型产生的新生产代码;不自动下载或安装远程插件;写入和网络操作默认禁止。
extensions/toolbox.ts # Pi 固定入口
src/core/catalog.ts # 渐进式目录发现与文档读取
src/core/plugin-loader.ts # 受限动态导入与 Fiber 生命周期
src/core/operation-registry.ts # 内部原子操作注册/校验/策略
src/core/agent-runner.ts # 嵌套 Agent Loop
plugins/*/toolbox.plugin.json # 原子插件元数据
plugins/*/PLUGIN.md # 按需说明
plugins/*/index.ts # 延迟导入的已有插件代码
在开发目录直接加载:
pi install G:/pi-cordis-toolbox或者临时测试:
pi -e G:/pi-cordis-toolbox项目插件放置在:
<project>/.pi/cordis-toolbox/plugins/<plugin-id>/
toolbox.plugin.json
PLUGIN.md
index.ts|index.js
只有 Pi 判定当前项目为 trusted 时,项目插件目录才会被扫描。包内插件始终可被扫描,但仍受风险策略限制。
当前机器上的 Pi bundled runtime 可直接用于类型检查和测试;安装到 Pi 后,@earendil-works/pi-* 与 typebox 由宿主提供。
npm install
npm run checkCordis 的 dispose() 管理 Fiber、服务、监听器和 disposer,但不是 Node 模块卸载机制,也不是安全沙箱。当前包只接受受信任的已有插件;若未来要支持不可信第三方代码,应改为 Worker / 子进程 / Sidecar 隔离,而不是仅依赖 Cordis dispose。