# Pi → DSH 架构模型 这是可扩展的 Markdown 知识树,不是接口总表,也不是 `Pi × DSH` 的机械矩阵。每个稳定 标题代表一条架构分支;接口、模块和 seam 是可以继续增长的叶子。 当前盘点快照:**2026-08-20,Pi 0.84.1,DSH 0.1.0-rc.8**。最初从 Pi 声明和运行时 规则中盘到 111 条上游形状规则,从 DSH 官方 subsystem 索引中看到 45 个模块。111 尚未 把所有嵌套对象拆成 callable,45 也不包含以后发现的全部 service、waterfall、event 和 client seam;两个数字都不表示“已经完整”。 ## Pi 能力树 ### 工具与执行 #### 工具注册与可见性 - 当前接口叶子:`registerTool`、`getActiveTools`、`getAllTools`、`setActiveTools`; `unregisterTool` 是桥扩展,不计入上游快照。 - 理论对应:[DSH / 工具、执行与隔离](#dsh-execution)。 - 需要的公开 seam:`ctx.tools` 注册表与按 Agent 控制可见性。 - 理论判断:直接承接。 #### 工具执行边界 - 当前接口叶子:`tool_execution_start`、`tool_execution_end`。 - 理论对应:[DSH / 工具、执行与隔离](#dsh-execution)与 [DSH / 会话与持久化](#dsh-session)。 - 需要的公开 seam:工具执行生命周期与可持久化工具事件。 - 理论判断:组合承接。 #### 工具部分结果更新 - 当前接口叶子:`tool_execution_update`。 - 理论对应:[DSH / 工具、执行与隔离](#dsh-execution)与 [DSH / 会话与持久化](#dsh-session)。 - 需要的公开 seam:对原生与迁移工具都生效的 partial-result 通道。 - 理论判断:尚待确认公开 seam 是否完整。 #### 工具调用与结果策略 - 当前接口叶子:`tool_call`、`tool_result`。 - 理论对应:[DSH / 工具、执行与隔离](#dsh-execution)与 [DSH / 插件组合](#dsh-composition)。 - 需要的公开 seam:执行前参数策略与结果提交前策略。 - 理论判断:组合承接。 #### 进程执行 - 当前接口叶子:`exec`、`user_bash`。 - 理论对应:[DSH / 工具、执行与隔离](#dsh-execution)。 - 需要的公开 seam:`ctx.exec`、subprocess provider。 - 理论判断:直接承接。 ### 命令与输入 #### 命令注册 - 当前接口叶子:`registerCommand`、`getCommands`。 - 理论对应:[DSH / 命令与人机交互](#dsh-interaction)。 - 需要的公开 seam:`ctx.commands`。 - 理论判断:直接承接。 #### Flag 与快捷键 - 当前接口叶子:`registerShortcut`、`registerFlag`、`getFlag`。 - 理论对应:[DSH / 命令与人机交互](#dsh-interaction)与 [DSH / 客户端与 Web](#dsh-client)。 - 需要的公开 seam:命令描述符与客户端输入绑定。 - 理论判断:组合承接。 #### 用户输入预处理 - 当前接口叶子:`input` 事件。 - 理论对应:[DSH / 插件组合](#dsh-composition)与 [DSH / 会话与持久化](#dsh-session)。 - 需要的公开 seam:用户输入成为持久 step 前的 `agent/pre-step`。 - 理论判断:直接承接;当前桥接仍待完成。 ### 消息与 Agent #### 消息注入 - 当前接口叶子:`sendMessage`、`sendUserMessage`。 - 理论对应:[DSH / 会话与持久化](#dsh-session)与 [DSH / 插件组合](#dsh-composition)。 - 需要的公开 seam:`agent/pre-step` 与原生 session message append。 - 理论判断:组合承接。 #### 消息流事件 - 当前接口叶子:`message_start`、`message_update`、`message_end`。 - 理论对应:[DSH / 会话与持久化](#dsh-session)与 [DSH / 模型运行时](#dsh-model-runtime)。 - 需要的公开 seam:LLM stream、提交前与持久化后的消息生命周期。 - 理论判断:组合承接;`message_end` replacement 仍待验证。 #### 模型上下文变换 - 当前接口叶子:`context`。 - 理论对应:[DSH / 会话与持久化](#dsh-session)与 [DSH / 插件组合](#dsh-composition)。 - 需要的公开 seam:权威模型请求发出前的 context projection。 - 理论判断:组合承接。 #### Agent 与轮次生命周期 - 当前接口叶子:`before_agent_start`、`agent_start`、`agent_settled`、`agent_end`、 `turn_start`、`turn_end`。 - 理论对应:[DSH / 插件组合](#dsh-composition)与 [DSH / 会话与持久化](#dsh-session)。 - 需要的公开 seam:Agent waterfalls 与持久 turn/step 事件。 - 理论判断:组合承接。 #### Agent 控制与空闲状态 - 当前接口叶子:`isIdle`、`hasPendingMessages`、`waitForIdle`、`abort`、`signal`。 - 理论对应:[DSH / 插件组合](#dsh-composition)与 [DSH / Agent 编排](#dsh-orchestration)。 - 需要的公开 seam:队列、取消信号与 Agent 生命周期。 - 理论判断:组合承接。 #### 上下文用量检查 - 当前接口叶子:`getContextUsage`。 - 理论对应:[DSH / 模型运行时](#dsh-model-runtime)与 [DSH / 会话与持久化](#dsh-session)。 - 需要的公开 seam:token-meter、模型窗口与 session projection。 - 理论判断:组合承接;当前桥接仍待完成。 #### 系统提示词检查 - 当前接口叶子:`getSystemPrompt`、`getSystemPromptOptions`。 - 理论对应:[DSH / 模型运行时](#dsh-model-runtime)。 - 需要的公开 seam:`system-prompt/assemble` 与当前提示词投影。 - 理论判断:组合承接。 ### 会话 #### 自定义持久事实 - 当前接口叶子:`appendEntry`、`setLabel`。 - 理论对应:[DSH / 会话与持久化](#dsh-session)与 [DSH / 客户端与 Web](#dsh-client)。 - 理论需要:namespaced durable session fact,能安全恢复、分支、压缩和回放。 - 当前公开 seam:没有完整入口;仓外插件不能安全注册并追加自定义持久事件。 - 理论判断:缺公开 seam。 #### 会话命名 - 当前接口叶子:`setSessionName`、`getSessionName`。 - 理论对应:[DSH / 会话与持久化](#dsh-session)与 [DSH / 客户端与 Web](#dsh-client)。 - 需要的公开 seam:原生 session title 状态与客户端投影。 - 理论判断:直接承接。 #### 会话生命周期 - 当前接口叶子:`session_start`、`session_shutdown`、`session_info_changed`。 - 理论对应:[DSH / 会话与持久化](#dsh-session)与 [DSH / 插件组合](#dsh-composition)。 - 需要的公开 seam:会话生命周期事实与插件 disposal。 - 理论判断:组合承接。 #### 会话创建、分支与导航操作 - 当前接口叶子:`newSession`、`fork`、`navigateTree`、`switchSession`。 - 理论对应:[DSH / 会话与持久化](#dsh-session)与 [DSH / Agent 编排](#dsh-orchestration)。 - 需要的公开 seam:`ctx.sessions` create/fork/navigation。 - 理论判断:组合承接。 #### 会话导航策略与事件 - 当前接口叶子:`session_before_switch`、`session_before_fork`、 `session_before_tree`、`session_tree`。 - 理论对应:[DSH / 会话与持久化](#dsh-session)与 [DSH / 插件组合](#dsh-composition)。 - 需要的公开 seam:宿主所有入口共用的 session navigation pre/post 生命周期。 - 理论判断:组合承接;宿主 UI 发起的操作仍待桥接验证。 #### 会话压缩操作与结果 - 当前接口叶子:`compact`、`session_compact`。 - 理论对应:[DSH / 会话与持久化](#dsh-session)。 - 需要的公开 seam:compaction operation 与持久完成事件。 - 理论判断:直接承接。 #### 压缩前决策 - 当前接口叶子:`session_before_compact`。 - 理论对应:[DSH / 会话与持久化](#dsh-session)与 [DSH / 插件组合](#dsh-composition)。 - 理论需要:压缩执行前可取消或替换摘要的 waterfall。 - 当前公开 seam:只有压缩发生后的事实事件,没有完整的事前决策入口。 - 理论判断:缺公开 seam。 #### 会话宿主上下文与重载 - 当前接口叶子:`sessionManager`、`cwd`、`mode`、`shutdown`、`reload`。 - 理论对应:[DSH / 会话与持久化](#dsh-session)与 [DSH / 插件组合](#dsh-composition)。 - 需要的公开 seam:session service、workspace scope 与 Cordis reload。 - 理论判断:组合承接。 ### 模型 #### Provider 注册 - 当前接口叶子:`registerProvider`、`unregisterProvider`。 - 理论对应:[DSH / 模型运行时](#dsh-model-runtime)与 [DSH / 插件组合](#dsh-composition)。 - 需要的公开 seam:`llm.registerAdapter`、configurable provider schema、credentials、settings。 - 理论判断:组合承接。 #### 模型目录视图 - 当前接口叶子:`model`、`scopedModels`、`modelRegistry`、`hasConfiguredAuth`。 - 理论对应:[DSH / 模型运行时](#dsh-model-runtime)。 - 需要的公开 seam:DSH 权威模型目录与凭证可用性。 - 理论判断:直接承接。 #### 目录模型的指定调用 - 当前接口叶子:`modelRegistry.complete`、`modelRegistry.getProvider()`、 `Provider.stream`、`Provider.streamSimple`、`getApiKeyAndHeaders`。 - 理论对应:[DSH / 模型运行时](#dsh-model-runtime)与 [DSH / 资源与附件](#dsh-resources)。 - 需要的公开 seam:`llm.stream`、credentials、attachments,以及 Pi 内联图片与 DSH attachment ref 的双向转换。 - 理论判断:组合承接。模型能在目录里被找到,只证明“可发现”;只有指定调用真的带着 文本、图片、凭证和取消信号到达该 route,才证明“可调用”。 #### 模型与推理档位选择 - 当前接口叶子:`setModel`、`getThinkingLevel`、`setThinkingLevel`、`thinkingLevel`、 `model_select`、`thinking_level_select`。 - 理论对应:[DSH / 模型运行时](#dsh-model-runtime)与 [DSH / 客户端与 Web](#dsh-client)。 - 需要的公开 seam:权威模型目录与 request-level reasoning options。 - 理论判断:组合承接。 #### Provider 网络请求生命周期 - 当前接口叶子:`before_provider_request`、`before_provider_headers`、 `after_provider_response`。 - 理论对应:[DSH / 模型运行时](#dsh-model-runtime)与 [DSH / 插件组合](#dsh-composition)。 - 理论需要:已有 adapter 最终 request/response 周围的 transport middleware。 - 当前公开 seam:插件拥有整条 transport 时,Pi 标准 stream helper 的 `onPayload` 可把 最终请求体交给 pi2dsh waterfall,再由 DSH `llm.registerAdapter` 承载;增强 DSH 原生 adapter 时没有通用入口。 - 理论判断:分支承接。package-owned transport 的 `before_provider_request` 可做可靠翻译; `before_provider_headers`、`after_provider_response` 以及 DSH-native transport 的同类增强 仍缺公开 seam,不能伪装成已经支持。 ### UI 与宿主呈现 #### 阻塞式用户提问 - 当前接口叶子:`select`、`confirm`、UI `input`、`editor`、`custom`。 - 理论对应:[DSH / 命令与人机交互](#dsh-interaction)与 [DSH / 客户端与 Web](#dsh-client)。 - 需要的公开 seam:`ctx.userQuestions` 与原生客户端渲染。 - 理论判断:组合承接。 #### 通知与工作状态 - 当前接口叶子:`notify`、`setStatus`、`setWidget`、`setWorkingMessage`、 `setWorkingVisible`、`setWorkingIndicator`、`setHiddenThinkingLabel`。 - 理论对应:[DSH / 客户端与 Web](#dsh-client)。 - 需要的公开 seam:client module 与 shell slots。 - 理论判断:组合承接。 #### 宿主框架与工具展开状态 - 当前接口叶子:`setFooter`、`setHeader`、`setTitle`、`getToolsExpanded`、 `setToolsExpanded`。 - 理论对应:[DSH / 客户端与 Web](#dsh-client)。 - 需要的公开 seam:client slot registry 与宿主持有的呈现状态。 - 理论判断:组合承接。 #### 编辑器交互 - 当前接口叶子:`onTerminalInput`、`pasteToEditor`、`setEditorText`、`getEditorText`、 `addAutocompleteProvider`、`setEditorComponent`、`getEditorComponent`。 - 理论对应:[DSH / 客户端与 Web](#dsh-client)与 [DSH / 命令与人机交互](#dsh-interaction)。 - 需要的公开 seam:client editor slots 与 command/input bridge。 - 理论判断:宿主语义翻译。 #### 消息渲染与主题 - 当前接口叶子:`registerMessageRenderer`、`registerEntryRenderer`、 `registerMarkdownTransformer`、`hasUI`、`theme`、`getAllThemes`、`getTheme`、`setTheme`。 - 理论对应:[DSH / 客户端与 Web](#dsh-client)。 - 需要的公开 seam:Web-native client modules 与 slots。 - 理论判断:宿主语义翻译;便携呈现意图与 Pi 终端组件仍需继续拆分。 ### 项目环境与资源 #### 项目信任 - 当前接口叶子:`isProjectTrusted`、`project_trust`。 - 理论对应:[DSH / 插件组合](#dsh-composition)与 [DSH / 工作区资源](#dsh-resources)。 - 理论需要:早于项目资源加载的宿主持有 trust policy。 - 当前公开 seam:普通仓外插件挂载得太晚。 - 理论判断:缺公开 seam。 #### 动态资源发现 - 当前接口叶子:`resources_discover`。 - 理论对应:[DSH / 工作区资源](#dsh-resources)与 [DSH / 插件组合](#dsh-composition)。 - 需要的公开 seam:具有生命周期的 skill/MCP/resource providers。 - 理论判断:组合承接;当前桥接仍待完成。 #### 包内事件总线 - 当前接口叶子:`events`。 - 理论对应:[DSH / 插件组合](#dsh-composition)。 - 需要的公开 seam:随插件 fiber 销毁的 package-scoped event bus。 - 理论判断:直接承接。 ### 当前尚未归类 / 待继续审计 - `sessionManager`、`modelRegistry` 等嵌套对象尚需继续拆 callable; - 动态注册、不同 Pi 版本及插件私下依赖的运行时约定继续按真实消费者补充; - 新发现的能力如果不能合理放入上述分支,先调整树,不强塞进旧分类。 ## DSH 的工作机制,用人话说 DSH 像一块运行中还能换件的 Agent 主板:profile 是装机单,service definition 是插座, provider 是可以替换的零件,agent 是发动机,session log 是飞行记录仪,waterfall 是决定 真正落地前的检查站,client module/slot 是浏览器半边;Cordis fiber/effect 负责依赖、 启停和拆卸清理。 它的核心目的不是把所有能力写死在 Agent 里,而是让模型、工具、存储、执行器、资源、 交互和客户端都能按公开 seam 组合;已经发生的事实进入持久日志,尚未决定的策略通过 provider 或 waterfall 参与。DSH 官方引用的 Cordis 论文 [_A Programming Paradigm for Spatiotemporal Composability_](https://github.com/cordiverse/paper) 解释运行时替换、清理、重绑和回滚;相关的 harness 研究索引 [_Agent Systems with Harness Engineering_](https://github.com/RUCAIBox/awesome-agent-harness) 解释模型之外为什么还需要循环、工具、记忆、workspace、skills、多 Agent、安全和评估。 ## DSH 承载机制树 ### 插件组合与策略 - 当前模块叶子:`core`、`extensions`、`settings`、`scope`、`invariants`、 `permission-presets`。 - 当前公开 seam:Cordis service/provider、`ctx.effect`、`ctx.inject`、waterfall、 scope/isolate/intercept。 - 负责:插件依赖、启停清理、策略组合、配置与权限。引擎拥有的 host 级 service 不能以“发现到社区插件”为生存条件:零个 Pi 包时也要挂 provider 目录、`/login`、 凭证恢复等宿主能力;发现清单只决定包级 extension 是否挂载。 ### 会话与持久化 - 当前模块叶子:`compaction`、`persistence`、`session-projection`、`session-query`、 `session-reference`、`session-telemetry`、`session-title`、`session`、`spill`、`storage`。 - 当前公开 seam:`ctx.sessions`、`Session.append`、durable session events、compaction、 session projection;rc.8 的 LLM 完成包可携带 `ReplayEnvelope`,被取消的部分 assistant 输出可用 `assistant/message.interrupted` 留作持久事实。 - 负责:权威会话事实、恢复、分支、压缩、查询和展示投影。物理存储格式不是逻辑事件 ABI:选择 SQLite persistence 时 rc.8 schema 17 与旧库不兼容,属于 provider 迁移边界, 不改变默认 session log 的理论映射。 ### 模型运行时 - 当前模块叶子:`credentials`、`llm-streaming`、`token-meter`、`system-prompt`。 - 当前公开 seam:`llm.registerAdapter`、`llm/stream`、credentials provider、 `system-prompt/assemble`、`agent/request`;rc.8 的官方 `llm-pi-ai` profile 可声明模型 输入模态、推理档位,以及按协议开放的 provider compat。 - 负责:模型目录、路由、凭证、调用、token 与提示词装配。配置型 Pi provider 应翻译 到官方 profile;只有插件自带 transport 时才注册 adapter。catalog 厂商专属 compat 仍由其已安装目录掌管,不能当通用网关开关透传。 ### 工具、执行与隔离 - 当前模块叶子:`approval`、`code-runtime`、`filesystem`、`sandbox`、`shell`、 `subprocess`、`terminal`、`tools`。 - 当前公开 seam:`ctx.tools`、`ctx.exec`、subprocess provider、sandbox provider、 approval policy。 - 负责:工具目录、执行、权限与隔离;插件直接调用 Node 不自动继承这些能力。 ### 工作区资源 - 当前模块叶子:`attachment`、`skills`、`web`、`workspace`、`lsp`。 - 当前公开 seam:attachment/skill/web/workspace/LSP providers。 - 负责:项目输入、技能、联网资源、工作区与语言服务。 ### Agent 编排 - 当前模块叶子:`goal`、`jobs`、`plan`、`schedule`、`subagent`、`workflow`。 - 当前公开 seam:`ctx.agents`、subagent provider、goal/plan/jobs/workflow providers。 - 负责:Agent 创建、任务分解、计划、后台工作与工作流。 ### 命令与人机交互 - 当前模块叶子:`commands`、`feedback`、`user-questions`。 - 当前公开 seam:`ctx.commands`、`ctx.userQuestions`、feedback provider。rc.8 的命令 执行 ABI 是 `execute(agent, line, images, signal)`;命令可以声明接收图片,handler 从 attachments 读取,而不是把取消信号错当图片数组。 - 负责:文本/图片命令入口、阻塞提问和用户反馈。 ### 客户端与 Web - 当前模块叶子:`client-modules`、`typert`、`web-server`。 - 当前公开 seam:client module、slot registry、web route、typert remote surface,以及 rc.8 动态 client module graph。 - 负责:浏览器呈现、插件客户端代码和宿主界面扩展。`dsh.client.inject` 声明的是客户 端**包依赖**,客户端源码导出的 `inject` 才声明 `slots` 等 Cordis 运行时 service; `dsh.client.external` 只用于动态模块图中的外部包,不能拿 service 名来填。 ### 当前尚未归类 / 待继续审计 - 后续 DSH 版本加入的 subsystem、service、waterfall、event 和 client slot; - Cordis 卸载、provider replacement、隔离、重绑和失败回滚等生命周期语义; - 只在源码中出现但尚未证明能被仓外插件调用的入口。 ## 怎样继续维护 新增接口或模块时,直接挂到最合适的稳定标题下面;若语义放不进去,调整知识树并说明 原因。理论模型只说“应该由谁承载、需要什么公开 seam”,不在这里声称真实插件已经 跑通;实践证据统一进入 [`plugin-validation-matrix.md`](plugin-validation-matrix.md)。