# 架构设计(对齐 dsh-anchored-standard) > 本版按 [dsh-anchored-standard](https://github.com/xiaobright/dsh-anchored-standard) 的 preset 模型重写: > persona 由 `@deepseek-ai/dsh-persona` 以 `complete: true` 提供;首轮工具目录由 > `@dsh-security/bootstrap` 在 `system-prompt/assemble` 瀑布中过滤;router 只注册工具,不再注入系统提示段。 ## 0. 定位 - 领域知识 = 每个领域 bundle 的 `references/`,通过 `read_reference` 按需读,不注入 prompt。 - 工程纪律 = `@deepseek-ai/dsh-persona` 的 `complete` 文本(`packages/router/prompt.md` 的规范化内容)。 - 首轮工具锚定 = `@dsh-security/bootstrap`,首个顶层请求只暴露 `pwsh/read` 或 `bash/read`。 - 后续轮次 = 完整 Standard 工具目录 + helmd 路由/领域工具。 ## 1. AI 遇到一个问题的调用链 ```mermaid flowchart TD U["用户发来问题"] --> S["agent session / step assembly"] S --> A["system-prompt/assemble waterfall"] A --> B["@dsh-security/bootstrap 过滤器"] B --> B1{"顶层 agent 且首轮未晋升?"} B1 -- "是" --> C["工具目录收窄为
pwsh/read 或 bash/read"] B1 -- "否 / 子 agent" --> D["完整工具目录"] C --> M["模型请求 #1"] D --> M2["模型请求(含完整工具)"] M2 --> P{"出现第一个 durable
tool/call 或 assistant/message?"} P -- "是" --> R["该会话晋升;后续请求完整目录"] R --> T["router / 领域 bundle 工具"] T --> K["read_reference 按需读 references/"] K --> O["模型自主判断,输出带置信度结论"] ``` 顺序说明: 1. preset 挂载时注册 `@deepseek-ai/dsh-persona`(complete)与 `@dsh-security/bootstrap`。 2. 每个 step 组装时,`dsh-system-prompt` 先按 scope 收集工具,再走 `system-prompt/assemble` 瀑布。 3. bootstrap 过滤器读取 `assembled.tools`,依据会话是否已晋升决定是否裁剪。 4. 晋升依据 durable session events,默认 `promoteOn: either`: - 顶层 agent 首个请求看到 bootstrap 目录; - 只要出现过一次 `tool/call` 或 `assistant/message`,下一次请求开始看到完整目录; - 子 agent(`delegationDepth > 0`)永远直接看到完整目录。 5. 完整目录包含 Standard 工具 + `@dsh-security/router`(`skill_catalog` / `read_reference`)+ 各领域 bundle 工具。 6. 领域知识在 `references/`,模型按需读取,参考内容不替模型下结论。 置信度:上述调用链基于已安装 rc.6 的 `dsh-system-prompt` / `dsh-agent` 类型与参考仓库源码,**高**;仅“rc.6 与参考 rc.5 在行 id/config 上的启动兼容性”需实际启动验证,**中**。 ## 2. 三层扩展面 | 层 | 机制 | 内容 | 是否注入 prompt | |---|---|---|---| | 身份/纪律 | `@deepseek-ai/dsh-persona` `complete: true` | 工程代理工作规范(中文) | 是,作为唯一系统提示 | | 工具锚定 | `@dsh-security/bootstrap` `system-prompt/assemble` | 首轮 shell/read 过滤 | 否,只改工具目录 | | 按需知识 | `router` + 领域 bundle 的 `ctx.tools.register` | 路由、领域工具、`references/` | 否,工具调用时读取 | ## 3. 目录结构 ```text helmd/ ├── packages/ │ ├── bootstrap/ # 首轮工具锚定(不再做首条消息注入) │ │ ├── src/index.ts # system-prompt/assemble 过滤器 │ │ ├── cordis.patch.yml │ │ └── package.json │ ├── router/ # 路由工具(不再注册系统提示段) │ │ ├── src/index.ts # skill_catalog / read_reference │ │ ├── references/ │ │ └── package.json │ ├── skill-android/ # 领域 bundle │ ├── skill-web/ │ ├── skill-native/ │ ├── skill-protocol/ │ ├── skill-malware/ │ ├── skill-ai-security/ │ └── skill-evidence/ ├── presets/ │ ├── minimal/ │ │ ├── preset.yml │ │ └── agent.cordis.yml │ ├── standard/ │ │ ├── preset.yml │ │ └── agent.cordis.yml │ └── full-reverse/ │ ├── preset.yml │ └── agent.cordis.yml └── docs/ ``` ## 4. 关键组件 ### 4.1 persona(`@deepseek-ai/dsh-persona`) preset 中: ```yaml - id: persona name: '@deepseek-ai/dsh-persona' config: text: | # 安全分析工程代理工作规范 ... complete: true includeRuntimeContext: false ``` `complete: true` 使该文本成为唯一系统提示,压制 harness identity 与 per-tool guidance;工具 schema 与运行时约束仍保留。 `includeRuntimeContext: false` 不把 runtime context 自动塞进 system prompt,任务和仓库规则交由用户消息与显式文件读取。 ### 4.2 首轮工具锚定(`@dsh-security/bootstrap`) ```yaml - id: tool-bootstrap name: '@dsh-security/bootstrap' config: shellTools: [bash, pwsh] commonTools: [read] promoteOn: either ``` 实现要点: - `export const inject = ['systemPrompt']`。 - 监听 `system-prompt/assemble`,`await next()` 后过滤 `assembled.tools`。 - 仅在未晋升的顶层 agent 上过滤;子 agent、无 agent context、会话已晋升时返回原样。 - 缺失 bootstrap 工具或过滤异常时降级为完整目录并一次性 warning,不 brick 会话。 ### 4.3 路由工具(`@dsh-security/router`) - `inject = ['tools']`。 - 注册 `skill_catalog`、`read_reference`。 - 不再 `ctx.systemPrompt.section(...)`。 ### 4.4 领域 bundle 各领域 bundle 保持 `ctx.tools.register(defineTool(...))` 结构,工具描述指向 `references/`,知识不注入 prompt。 ### 4.5 presets - `minimal`:Standard 行 + router + evidence。 - `standard`:Standard 行 + router + android/web/native + evidence。 - `full-reverse`:Standard 行 + router + 全部领域 bundle + evidence。 - 每个 preset 都有 `preset.yml`(name/description/order)和 `agent.cordis.yml`。 ## 5. 与参考仓库的差异 | 项 | dsh-anchored-standard | helmd | |---|---|---| | persona text | 固定英文一句 | helmd 工程代理工作规范(中文) | | bootstrap 插件 | `./tool-bootstrap.mjs` | `@dsh-security/bootstrap`(TS,逻辑对齐) | | 领域能力 | 无 | router + 7 个领域 bundle | | preset 数量 | 2(anchored / zero) | 3(minimal / standard / full-reverse) | ## 6. 验证 - 安装包 `prepare` 会执行 `tsc -p tsconfig.json`,git 安装时自动构建。 - preset YAML 需用 dsh 的 YAML loader(支持 `!!js`)解析;PowerShell 脚本已做 UTF-8 无 BOM 写入。 - 运行时验证:导出 session JSONL,检查首条 `request/header` 只含 `pwsh/read` 或 `bash/read`,后续 header 为完整目录。 - 未在本机启动 dsh 做端到端验证(无明确启动授权;且当前工作区未安装依赖),该项为残余风险。 ## 7. 结论置信度 - preset 模型、`complete` persona、`system-prompt/assemble`、`agent/inbox/inserted`、`ctx.tools.register`:**高**(基于本机 rc.6 包源码/类型与参考仓库)。 - rc.5 参考行 id/config 在本机 rc.6 的启动兼容性:**中**(需实际启动验证)。 - `@dsh-security/*` 从 preset 中以 `name` 行解析:**中**(需包安装进 host 可解析的 `node_modules` 后验证)。