能力 Seams 与核心服务
服务可以是核心主干服务、可替换的能力 seam,也可以是组合包/组合点。下图展示了拥有服务声明的包、已知实现包,以及直接消费该服务的包。
| ctx 键 | 角色 | 所属包 | 实现 | 直接消费方 | 配套插件 | 说明 |
|---|---|---|---|---|---|---|
ctx.attachments | seam | attachment | attachment-local | host-runtime, llm-pi-ai | - | 宿主会在会话事件之前提交已接受的图片;提供方适配器将已授权的持久引用解析为提供方原生内容。 |
ctx.llm | seam | llm | llm-deepseek, llm-pi-ai, llm-replay | agent-loop, compaction-basic | - | 适配器注册提供方实现;agent loop(智能体循环)与压缩功能调用提供方无关的流服务。 |
ctx.tokenMeter | core | token-meter | - | compaction-basic | - | 拥有按会话隔离的回放折叠区;压力消费方共享不可变且带修订版本的测量结果。 |
ctx.toolResultPruner | core | compaction-tool-result-pruner | - | compaction-basic | - | 在摘要压缩前,通过可回放的单节点表层替换来改写过大的当前工具结果。 |
ctx.sessions | core | session | - | agent-loop, agent, session-persistence, session-query, session-query-sqlite, subagent-inprocess, invariants, message-feedback | - | 拥有仅追加的 Session 实例,并发出持久的会话事件流。 |
ctx.invariants | core | invariants | - | session, agent, scope, agent-loop | - | 配套子路径注册所属包本地的检查;该服务负责选择、唯一性、子 fiber,以及标明所属包的失败。 |
ctx.typert | core | typert-registry | - | typert-loader, api-gateway | - | 插件直接或通过 dsh-typert-loader 注册实时 zod 贡献;API 网关消费调用描述符和提供方,其他运行时消费方则在各自边界查询 schema 与反射元数据。 |
ctx.typertGateway | core | api-gateway | - | - | - | 将生成的 Remote 描述符与实时 Cordis 服务关联,解析已注册的身份,并通过共享的 Connection RPC 载体提供一元调用。 |
ctx.sessionPersistence | seam | session-persistence | session-persistence-jsonl, session-persistence-sqlite | agent-loop, tool-bash, hooks-claude-code, hooks-codex, session-query, session-query-sqlite, message-feedback | - | 各后端持久化同一套 SessionEvent 词汇;应用在组合时选择后端。 |
ctx.settings | seam | settings | settings-file | llm-deepseek, llm-pi-ai, apiproxy | - | 插件注册命名空间 schema 并解析分层值;提供方存储原始文档。LLM(大语言模型)适配器在用户分区下将其入口配置注册为组合基础;Web 网关提供经过脱敏的分层描述符,并写入用户层。 |
ctx.credentials | seam | credentials | credentials-local | llm-deepseek, llm-pi-ai, apiproxy | - | 配置携带对机密信息的引用;提供方拥有实际值。消费方按操作解析,因此轮换后的凭据会在紧接着的下一次请求中生效;Web 网关提供不含实际值的视图和只写存储。 |
ctx.sessionTelemetry | seam | session-telemetry | session-telemetry-otel | - | - | 该 seam 捕获会话记录、进行脱敏并交给一个后端;没有其他组件消费该服务,其输出会离开当前进程。 |
ctx.storage | seam | storage | storage-json, storage-sqlite | storage-domain | - | 各后端以不同名称并列注册;数据形态(领域优先)挂载到枢纽上,并将类型化操作转换为不透明的 KV 单元原语。 |
ctx.storageDomain | core | storage-domain | - | workspace, message-feedback | - | 等待所有已配置后端就绪,然后将领域形态发布为一个受生命周期约束的服务,用于类型化持久状态。 |
ctx.messageFeedback | core | message-feedback | - | - | - | 拥有本地逐 assistant 消息反馈、生命周期与目标校验、逐条目 compare-and-set 及 Host 一元 Remote 契约,且不进入 Session 历史或遥测。 |
ctx.workspaceRegistry | core | workspace | - | apiproxy | - | 通过领域设施拥有带 WorkspaceId 品牌类型的记录;稳定的 sessionIds 账户驱动 Host RPC 与 GUI 投影。 |
ctx.sessionQuery | seam | session-query | session-query-sqlite | session-reference, tool-session-query | - | 该接口提供精确读取、过滤和追踪;具体后端还提供全文协调、排序、摘要片段和游标世代,而模型消费方负责工作区权限与不含游标的渲染。 |
ctx.sessionReferenceResolver | core | session-reference | - | - | - | 将当前表层中有界的对话快照投影为持久但不可信的消息上下文;Host 适配器负责提及语法。 |
ctx.sessionTitle | seam | session-title | session-title-first-prompt-llm, session-title-all-prompts-llm | - | - | 负责确定性回退、最新标题折叠区,以及唯一的可选异步提供方注册。 |
ctx.systemPrompt | core | system-prompt | - | agent-loop, tools, tool-fs, tool-terminal, tool-web | - | 为每个步骤收集提示词各部分和面向模型的工具 schema。 |
ctx.tools | core | tools | - | agent-loop, tool-ask-user, tool-bash, tool-cordis, tool-fs, tool-terminal, tool-skill, tool-subagent, tool-todo, tool-web | - | 注册能力,负责 Code Mode 传输,并让调用依次经过策略前处理、单调守卫、环绕分派、策略后处理和最终结果观测。 |
ctx.userQuestions | seam | user-questions | - | tool-ask-user | - | UI 前端提供当前生效的人工回答提供方;tool-ask-user 在提供方无关的 ask() promise 上暂停工具调用。 |
ctx.planMode | core | plan-mode | - | - | - | 折叠已记录的计划/模式状态,在轮次边界刷新用户选择,渲染由部署方拥有的指导信息,注册 /plan,并在状态转换期间保持计划退出 schema 稳定。 |
ctx.agentPresets | core | agent-presets | - | - | - | 在受信任根目录与用户创作根目录上发现 preset 目录,并在创建期把一份 preset cordis.yml 挂载到 agent 作用域之下,拒绝始终未激活或向根服务 realm 发布服务的行。 |
ctx.commands | core | commands | - | - | - | 插件注册直接面向人的命令,而不会把调用发送给模型。 |
ctx.sessionProjections | core | session-projection | - | tool-todo, session-title, host-apiproxy | - | 各领域注册由状态驱动的折叠单元;主动驱动过程维护每个会话的水位状态,api-proxy 提供基线并推送发生变化的值。 |
ctx.sessionProjectionCache | core | session-projection-cache | - | host-apiproxy | - | 按会话持久保存投影单元状态的检查点(节流检查点,以及轮次/结束/分离时的必选检查点),并提供冷读取阶梯:缓存行加持久化尾部回放,因此列表读取永远不需要加载完整日志。 |
ctx.skills | seam | skill | skill-badge, skill-filesystem | tool-skill | - | 合并提供方的 skill(技能)目录;tool-skill 渲染会话前缀目录,并加载完整的 skill 正文。 |
ctx.agents | core | agent | - | agent-loop, acp, subagent-inprocess | - | 拥有实时 Agent 句柄、创建/恢复工厂 seam,以及进程本地的发起方传播。 |
ctx.agentDefaultModel | core | agent-default-model | - | headless, host-apiproxy | - | 通过 settings 分层默认 ModelSelection,让直接入口与 Host 支撑的 Agent 入口共享同一个状态所有者。 |
ctx.agentLoop | bundle | agent-loop | - | agent-spine-demo | - | 唯一的具体循环插件;扩展包依赖 dsh-agent 的事件和服务,而不依赖此包。 |
ctx.goals | core | goal | - | - | - | 从会话日志折叠带修订版本的目标状态,并将实时延续激活保留在进程本地。 |
ctx.e2b | core | e2b | - | fs-e2b, subprocess-e2b | - | 拥有一个共享的 E2B SDK 句柄、远程工作目录和最终沙箱处置,使两个基础 E2B 提供方处于同一个 Linux 运行时中。 |
ctx.subprocess | seam | subprocess | subprocess-local, subprocess-e2b | bash-local, bash-sandbox, terminal-bash, lsp-stdio, subagent-acp, subagent-codex, subagent-claude-code | - | Bash 执行器、PTY shell 后端、LSP Host,以及进程外 ACP、Codex 和 Claude Code subagent 后端都通过 ctx.subprocess 执行 spawn;该服务负责进程坐标、进程树/会话生命周期、stdio 处置、终端机制和 kill 升级。 |
ctx.shell | seam | shell | bash-local, bash-sandbox, pwsh-local | tool-bash, tool-pwsh, hooks-claude-code, hooks-codex | - | 面向模型的 shell 工具和钩子桥接消费此 seam;沙箱、远程或 PowerShell 执行器可以替换 bash-local,而无需改动这些消费方。 |
ctx.shellEnv | core | shell-env | - | tool-bash, tool-pwsh | - | 插件声明限定于 effect 作用域的 DSH_* 事实;每个 shell 工具在每次执行时收集一份可信快照,其执行器据此重建命名空间。 |
ctx.terminals | seam | terminal | terminal-bash | tool-terminal | - | 注册表负责精确到 Agent 的会话身份和清理;后端负责终端机制,tool-terminal 则提供限定于所有者作用域的模型接口。 |
ctx.sandbox | seam | sandbox | sandbox-local | bash-sandbox, terminal-bash | - | 消费方交出即将执行 spawn 的确切 argv;与宿主共享文件系统和内核的后端按每次调用的策略包装该 argv,并报告强制执行情况。 |
ctx.sandboxPolicy | core | sandbox-policy | - | bash-sandbox, fs-sandbox, terminal-bash | - | 统一保存部署默认模式和工作区根目录;只有沙箱执行器和提供方读取该服务(工具层使用它同时导出的纯 sandbox/mode 折叠区)。两类强制执行组件都读取该服务,因此 bash 与 fs 不会限制到不同的根目录。 |
ctx.approval | seam | approval | acp | tools, tool-bash | - | 一次性权限决策通过 approval/request waterfall(瀑布式事件)分派;回答方是监听器(即 ACP 为自身 agent 提供的桥接),没有回答方时以 unavailable 关闭失败。 |
ctx.permissionPresets | core | permission-presets | - | - | - | 面向用户的预设表(workspace-write/danger-full-access),将沙箱模式与审批策略选项组合在一起;一次切换会写入一个 permission/preset 事件,并贯通到两个选项事件。 |
ctx.codeRuntime | seam | code-runtime | code-runtime-worker | tools | - | 使用 Host 提供的异步绑定运行一段由模型编写的程序;各后端采用不同的基础环境和语言(工具注册表在 Code Mode 下消费该服务)。 |
ctx.fs | seam | fs | fs-local, fs-sandbox, fs-e2b | tool-fs | fs-observation-policy | tool-fs 通过 ctx.fs 执行读取/写入/编辑;fs-sandbox 按共享沙箱模式限制变更;fs-observation-policy 通过 fs/* 事件门禁贡献基于观测状态的检查。 |
ctx.compaction | seam | compaction | compaction-basic | compaction-basic | - | 基础后端消费步骤后的压力事件和请求错误恢复事件;不存在面向模型的压缩工具。 |
ctx.subagents | seam | subagent | subagent-spawn-in-process, subagent-fork-in-process, subagent-acp, subagent-codex, subagent-claude-code, subagent-dsh-sdk | tool-subagent, tool-subagent-control, tool-ralph | - | 提供方实现传输;该服务还负责可选的、基于 Activation 的延续编排,tool-subagent 选择一次性或可延续委派,tool-subagent-control 传递后续消息,而 tool-ralph 要求一条全新的结构化输出路由。 |
ctx.jobs | seam | jobs | jobs-local | tool-bash, tool-terminal, tool-subagent, tool-jobs | - | 生产方(后台 bash、PTY 发送和 subagent 委派)登记正在运行的工作;tool-jobs 是面向模型的控制器,用于读取、列出和终止这些工作;jobs-local 是进程本地注册表。 |
ctx.web | seam | web | web-search-exa, web-search-perplexity, web-search-deepseek, web-fetch-http | tool-web | - | 搜索和抓取提供方注册到同一个 ctx.web seam;tool-web 负责稳定的面向模型名称。 |
ctx.spillStore | seam | spill | spill-local | spill-policy | - | 后端保存过大的工具文本,并返回面向模型的定位信息和取回提示;spill-policy 是 tools/post-execute 消费方,负责决定何时 spill。 |
ctx.directoryPicker | seam | directory-picker | directory-picker-native, directory-picker-browse | apiproxy | - | 带判别标记的交互能力:原生后端在 Host 显示设备上打开一个操作系统选择器,浏览后端为应用内浏览器提供列表与创建原语;双端后端通过其浏览器侧填充 ui-workspace 目录流程的 slot(不通过协议发布)。 |
ctx.webServer | core | webserver | - | connection, modules, hmr | - | 普通的 node:http 载体:具名路由注册表、索引转换 tap,以及静态 dist 回退;Web 传输插件注册自己的路由。 |
ctx.clientModules | core | modules | - | hmr | - | 通过增量 dsh.client 扫描组合 DSH_BOOT 入口图,提供插件组合包,并通知重建/图变更订阅方。 |
ctx.workflowEngine | seam | workflow | workflow-worker-thread | tool-workflow, tool-ralph | - | 每个上下文使用一个引擎,与 bash 相同,且没有具名提供方注册表;通用工作流与固定 Ralph 消费方启动运行,其中的 agent() 调用通过 ctx.subagents 扇出。 |
ctx.lsp | seam | lsp | lsp-local | tool-lsp | - | 提供方注册与选择,加上恰好四种操作的标准化查询执行;该 seam 不提供协议逃生口,后端必须转换为标准化请求和结果。 |
ctx.apiProxy | core | apiproxy | - | connection | - | 与传输无关的 Host 网关接口:它分派浏览器 API 调用,每条打开的 Host 流自行订阅转发事件,而不是由广播方法向其推送。 |
ctx.dynamicCordisRunner | core | cordis-host-runner | - | tool-cordis | - | 拥有内存定义注册表、Host 半的 vm 沙箱和 request-run 往返流程;浏览器页面通过其 Remote 命名空间在线访问同一服务。 |
ctx.cordisInspect | core | cordis-host-runner | - | tool-cordis | - | 注册 Host inspect 提供方、镜像 Client 提供方 manifest,并通过动态 Cordis 传输路由 Client 查询。 |
维护模式:混合模式。服务从 Cordis 声明中发现;接口、实现和消费方角色在 scripts/gen-doc-graphs.ts 中分类,并设有完整性守卫。