🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

编排预设 cuddly-guacamole/dsh-orchestrator-preset

DeepSeek Harnessv0.1.4
cuddly-guacamole32 天前有提交已提供中文文档扫描:含敏感能力

把任务路由给九条专职通道并核验磁盘证据

30/100
综合分
0
GitHub 星标
719
npm 周下载
—/5
用户评分

数据截至 2026/10/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @quill507/dsh-orchestrator-preset
npm 源 · @quill507/dsh-orchestrator-preset 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · skill
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v0.2.1,当前版本为 v0.1.4
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 32 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@quill507/dsh-orchestrator-preset @ 0.1.4
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/6 16:18:44

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 1 处,展示前 1 条)
  • 读取本地文件
    plan-aware-persona.mjs:46
    text = readFileSync(url, 'utf8')
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-skill-filesystem@deepseek-ai/dsh-tools@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 九条通道任务路由
  • 声明工具边界
  • 基于证据的完成门禁

DeepSeek Harness 的薄壳代理预设:九条通道,具有声明的工具边界、常驻路由区段、四个自行编写的技能,以及基于证据的完成门禁。

v0.2.12026-10-24
· v0.2.1(2026-10-24) lane 工具面改用声明式 official 允许名单,deny 由运行时按实时注册表推导;常驻提示另设档位开关。 破坏性变更:lane 闸的配置键 deny → official,工具面改由允许名单定义,subagent_forge 与部分只读 lane 的工具不再可见(见升级须知);常驻提示默认改为 minimal,比原来短(promptProfile: 'full' 可逐字恢复)。 升级需动手:刷新已安装的 bundle(bash install.sh)—— 产物里 lane preset 的形状整版改变,旧产物配新插件会把 official 读成空集,每条 lane 的工具面被全部收走。 · 🐛 Bug修复 · (verify) 安装校验不再把健康 profile 判成失败:check 1/5 的「是否选中本 preset」原先来自一张硬编码 per-profile 表,与主机实际相反(它说 desktop 跑本 preset、web 故意不跑,而两个 profile 的补丁恰好相反)⇒ 现在从 profile 自身推导(SEL_ACTUAL / SELECTS_US),跑别的 preset 是合法状态、记为 INFO 并打印它实际选中的 preset;仍然失败的只有两种真缺陷 —— 同一 profile 补丁里出现两条 selectedDefault: dsh-orchestrator-preset(YAML 重复键被解析器拒绝,补丁根本解析不了,check 1 报因、check 5 报果),以及 profile 要求本 preset 而组合结果没有它 (29f57dc, aae71a1) @cuddly-guacamole · 🚜 代码重构 · (preset) lane 工具面从「声明 deny、再拼机器算出的 MCP 闭包」改为「声明 official 字面允许名单」:lane-gate 的 config 由 deny 变 official,lane-tool-gate.mjs 在每条 lane 挂载时与每次 tools/change 时按 deny = 实时注册表 − official 计算并 restrict,所以迟到注册的 mcp_ 一样会被剥掉;声明、生成器、产物与两份 README 同步改;reader 也不再是唯一的 allow-list lane,现在每条 lane 都是。记作重构而不是新功能,因为它是同一道边界的换写,不新增任何工具面(这次整体只更窄,收窄项见升级须知) (362d1c8) @cuddly-guacamole · 🚀 性能 · (prompt) 常驻提示实测 31370 → 16337 字符(本包自身 22423 → 7335,宿主的 8879 未动):删掉与 skill 目录重复的 Other domains 列表,证据格式 / 交付叙述 / 冷启动考古三节改为指向 orch-evidence-protocol skill 而不是再抄一遍;选择做成 promptProfile 开关(minimal 默认,full 逐字恢复旧文本) (ce8b6db) @cuddly-guacamole · (prompt) harness-sections.mjs 在 system-prompt/assemble 处按精确名移除 team:policy 与 app:web-surface 两段(再省 2855 字符):只匹配精确名 —— 按 web-surface 匹配会一段都删不掉而所有门照绿,把连着的 4202 字符整段当 team:policy 会连带删掉 tool:pwsh / tool:read / tool:grep / tool:subagent 的活说明;promptProfile: 'full' 逐字恢复 (7023fdd) @cuddly-guacamole · 📚 文档 · 两份 README 删掉 registry 快照(dist-tags.latest、已发布版本列表、0.2.0 尚未发布的备注)—— 它在 0.2.0 发布当天就过期;npm 与 GitHub release 页才是权威,两个 Publishing-to-npm 段改成这么写 (6e3da16) @cuddly-guacamole · 🧪 测试 · (lane-tool-gate) 新增 tools/lane-tool-gate.test.mjs:用假 ctx.tools 调真实 apply(),锁住六条运行时保证 —— 首次 deny = known − official 且有序、mount 之后注册的工具在 tools/change
v0.2.02026-10-18
· v0.2.0(2026-10-18) 受支持宿主收成 0.2.1-rc.2,四个 peer 钉死,lane 形态门退化为 fail-closed 开关。 破坏性变更:受支持宿主集从三版收成 0.2.1-rc.2 一个版本;peerDependencies 由范围改为四个精确版本;除受支持版本之外的每一个宿主上本 bundle 什么都不挂(9 条 lane 行、9 条 lane preset 行与 subagent_fork 控制行共 19 条受门的行全部 disabled,连 fork 这条绕开 lane 的路也关掉),不再退化为「挂载但没有收窄」;宿主门现在是版本检查,所以 0.2.0-rc.2、0.2.1-alpha.* 与 0.2.1-rc.1 一律落在这一侧(一处已接受的边界见升级须知);产物里 toolFilter 零出现。 升级需动手:升级宿主到 0.2.1-rc.2,或留在 0.1.9。本版不支持任何 0.2.1-alpha.*、0.2.1-rc.1 与 0.2.0-rc.2(它们在宿主门上全部被关掉,一处已接受的边界见升级须知)。 · 🐛 Bug修复 · (preset) lane 闸补上 MCP 闭包 —— 修的是 0.1.9 真实发出去的一次权限放大:laneGateDeny 原先只有 lane.deny + LANE_ADDRESSING_DENY,MCP 闭包只挂在旧形态的 toolFilter.deny 上,而 alpha.4 / alpha.5 走 preset 形态 ⇒ 那两台宿主上每条只读 lane 都能调用 mcp_*,且产物看起来完全正常(名单在、只是短了)。现在 deny 渲染成 !!js ([…静态…]).concat(),按机器算 mcp_ (0457df6) @cuddly-guacamole · (readme) 更正 0.1.9 一句本来就假的声称:subagent_fork 控制行不 deny 那四个 schedule_* —— 宿主对 toolFilter 硬抛(dsh-tool-subagent/lib/index.js:355),fork provider 自报 capabilities.agentPreset = false 并继承父组合 ⇒ 无声明式收窄路径。该声称在 alpha.4 / alpha.5 上已经是假的;本版如实记为「已接受的退化」,而不是继续声称它成立 (0457df6) @cuddly-guacamole · 🚜 代码重构 · (preset) LANE_LEGACY_EXPR → LANE_FORM_SUPPORTED_EXPR(极性未反转),职责从「挑一种 lane 形态」缩成一个 fail-closed 开关:true ⇒ 9 条 lane 行 + 9 条 lane preset 行 + subagent_fork 控制行全部 disabled(共 19 条受门的行,同一个表达式、同一个极性)。gen-cordis-patch.mjs 的 legacy 渲染分支整体删除,cordis.patch.yml 里 lane 行是 disabled: !!js (…) + 普通 config 映射,toolFilter 零出现 (0457df6) @cuddly-guacamole · (preset) SCHEDULE_TOOLS / SCHEDULE_RESOLVE / SCHEDULE_ABSENT_EXPR / SCHEDULE_DENY_EXPR 四个按版本求值的常量整体删除 —— 执行第 20 轮自己写下的退休触发条件,它的两条判据(README 三版表不再含 0.2.0-rc.2;peer 下界越过它)现在都成立。四个名字移进三份静态 deny 名单(READONLY_DENY 25 / WRIGHT_DENY 22 / FORGE_DENY 17)与 laneGateDeny;tool-schedule 行变裸行,与官方骨架同形 (0457df6) @cuddly-guacamole · (install) install.sh 的版本下限抬到 0.2.1-rc.2,与支持集同一个值 —— 「能装」与「受支持」之间不再有缝 (0457df6) @cuddly-guacamole · (verify) verify-install.sh check 13 的检查主体从 lane 行的 config.toolFilter 改到 preset 内的 lane-gate → config.deny(旧主体在 toolFilter 被删后静默看不到任何 lane:LANES=12 DENY_LANES=0),并保留「按机器算的 M
v0.1.92026-10-17
· v0.1.9(2026-10-17) 兼容声明换到实测过的三个宿主版本:0.2.0-rc.2 / 0.2.1-alpha.4 / 0.2.1-alpha.5。 破坏性变更:无 升级需动手:无 · 📚 文档 · (readme) 受支持集合换档:0.2.1-alpha.5 加入、0.2.1-alpha.3 退出(alpha.1/alpha.2 在 0.1.7 同样退出的方式)。徽章、两份 README 的 dist-tag 表、peerDeps 段、来源表与迁移节的形态表同步 (959756a) @cuddly-guacamole · (readme) alpha.5 是实测结论不是推断:对本包挂载的包逐个对完已发布 tarball —— 与 alpha.4 相比只有两处不同:dsh-tool-subagent 一句提示词、dsh-tools 的 run_code 参数描述;tool-subagent 的 Config 字面量与 apply() 拒绝循环逐字节相同,guard/guardReason/restrict/defineTool 同样;其余 7 个包与 95 行骨架也逐字节相同 (959756a) @cuddly-guacamole · (preset) tools/preset-declaration.mjs 的 tool-schedule 注释里两处版本枚举同步到 alpha.5(仅枚举事实,条件 deny 尾巴未动) (959756a) @cuddly-guacamole · (docs) DESIGN.md 补第 22 轮(宿主跟随 alpha.5 + 声明集换档)及边界段 (959756a) @cuddly-guacamole · 升级须知 · ⚠️ 本版无产物改动:cordis.patch.yml、lane-tool-gate.mjs、生成逻辑与旧形态分支一字未动 —— 因为实测表明无需改动。在 alpha.3/alpha.4 上已在用 0.1.8 的用户没有升级的迫切理由;本版只是把 alpha.5 的实测写进声明。 · ⚠️ alpha.3 退出声明但仍可用:lane 两形态的边界是「自 alpha.3 起」,所以它的相关记述(作为边界记录)保留。它只是不再被本包验证。 · ⚠️ 本版未验证项(已知,未修 —— 不得读成已解决): - 新形态下 ctx.tools.guard() 用本包 deny 名单是否与旧形态逐名等价 = 仍未跑同名单对拍(自 0.1.8 起)。 - lane 的运行时工具面(reader 在新宿主上放宽的实际观感)= 机制已证、未真派发观察(自 0.1.8 起)。 - alpha.5 的真链路启动已做(dsh --profile web,零拒绝、零重复 preset),但 GUI 端到端派发仍未测。 · ⚠️ 留作备忘:peerDependencies 在 app-boot 上不 gate 任何东西,支持集是意图声明而非强制(自 0.1.8 起实测)。 Full changelog:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
@quill507/dsh-orchestrator-preset 为 DeepSeek Harness 的薄壳 agent preset aegis 方法论层负责方法 · 自研编排层负责委派 npm downloads DSH license English · 归属与来源 · Issues DeepSeek Harness 的薄壳 agent preset:aegis 方法论层(上游、运行时消费、未改动)加上一个自研编排层 —— 九条命名 lane、声明式工具边界、常驻路由 section、随装配切换的 persona,以及以磁盘证据为准的完成门。 仓库根目录就是 bundle 本身:没有 bundle/ 子目录,这里的文件即是将被安装的文件。 设计 本节(对应英文版的 Design 一节)是本 preset「是什么、怎么工作」的当前且完整的权威。 本仓库不含另立的设计规范:它所源自的完整设计草案 —— 约 280K 的设计史、决策轨迹与被否决的备选方案 —— 不在此分发。它被留存下来,而本节即是取而代之的设计说明。 若你需要更深的推理,可以索取;此处不给链接,是因为链向一个本仓库并不包含的文件,会看起来很权威、点下去却是错的。 它是什么 DSH 没有「一个会派活的 agent」这种概念。
展开完整文档(README 剩余 1 节)
@quill507/dsh-orchestrator-preset

为 DeepSeek Harness 的薄壳 agent preset

aegis 方法论层负责方法 · 自研编排层负责委派

npm
downloads
DSH
license

English · 归属与来源 · Issues

DeepSeek Harness 的薄壳 agent preset:aegis 方法论层(上游、运行时消费、未改动)加上一个自研编排层 —— 九条命名 lane、声明式工具边界、常驻路由 section、随装配切换的 persona,以及以磁盘证据为准的完成门。

仓库根目录就是 bundle 本身:没有 bundle/ 子目录,这里的文件即是将被安装的文件。

设计

本节(对应英文版的 Design 一节)是本 preset「是什么、怎么工作」的当前且完整的权威。
本仓库不含另立的设计规范:它所源自的完整设计草案 —— 约 280K 的设计史、决策轨迹与被否决的备选方案 —— 不在此分发。它被留存下来,而本节即是取而代之的设计说明。
若你需要更深的推理,可以索取;此处不给链接,是因为链向一个本仓库并不包含的文件,会看起来很权威、点下去却是错的。

它是什么

DSH 没有「一个会派活的 agent」这种概念。preset 声明一组工具和一份 persona,而这套词汇里没有「这件事该别人做」的说法。本 preset 补上这一层:协调者不写代码、不搜代码库、不自审 —— 它把每块工作路由给一条被声明为有权做它的 lane,再用磁盘上的证据来判定结果。

lane 与它们的工具边界

九条 lane 是 preset 自己的行:planner、scout、archivist、seer、reader、analyst、auditor、wright、forge。每条自带 persona 文件与 toolFilter,所以能力边界是声明式的,不是建议式的 —— 只读 lane 的 deny 清单会把 write、edit、todo_write、其它所有 lane 的派发工具,以及面向 lead 的子代寻址工具,从它的座位上摘掉。正是这些 deny 清单阻止 lane 重新滑回协调者角色。

lane-composition.mjs 补上宿主留下的一个缺口。Team 装配给 lead 的 send_message / list_agents / interrupt_agent 是按名字寻址 teammate 的,根本够不到 subagent_ 子代 —— 于是用 subagent_ lane 派活的 lead 没有任何工具能列出、续接或中断它们。本 bundle 恰好以另外三个名字(subagent_children、subagent_send、subagent_interrupt)注册了这三个动作,按持久 agent id 寻址。两套 id 命名空间,永不混用。三个名字是全局注册的,而且是刻意的:tools.restrict() 在全局注册表上解析名字,作用域内注册会让每条 lane 的 deny 项失效,进而拖垮整族 lane。

路由 section

routing-sections.mjs 注册四段静态文本,由宿主的 systemPrompt registry 每一轮重新装配:域归属表、触发词裁决表、少量常设判断的索引,以及 MCP 纪律。它们是静态常量,这是刻意的 —— 动态的 system 前缀会让整个会话缓存全量失效。

「唯一归属者」正是要点。MCP 纪律只存在于一段里,orchestrator persona 只留一个指针,委派函可以引用它但绝不可复述它。编排层自身的内容也守同一条纪律:orchestrator persona 明确声明不承载 lane 名册与 MCP 规则 —— 因为第二份副本就是第二个归属者。

四个 orch-* 技能名是承重的,改名是「改两个文件」的活。 routing-sections.mjs 与 personas/orchestrator.md 都按名字显式引用了 orch-evidence-protocol 与 orch-delegation-brief,而路由表的行是按那个精确字符串解析的。把技能目录和 frontmatter 改名、却没改这两处引用,那一行就会指向一个没有东西提供的名字 —— 而这是静默失败:匹配不到任何技能的路由行,只是永远不触发而已。node tools/gen-cordis-patch.mjs 与 node tools/audit-personas.mjs 能抓住半途而废的改名;两者都不会自动运行,所以动过技能名之后,跑一个。

orch- 前缀本身不是装饰:这些技能落进的是一个还装着该机器已装其它技能的注册表,所以不加前缀的 evidence-protocol 就是一个等着撞名的名字。

证据与状态

完成是一个文件,不是一句话。只有当 .dsh/evidence/-.md 存在、非空、且末行恰有一条锚定的判定行时,一个任务才算完成。每个回合触碰的每条路径在完成时会被归类为 in_scope / out_of_scope / undeclared / illegal,凡非 in_scope 一律拒绝完成声明。需要跨会话存活的状态 —— lane 台账(.dsh/state/lanes.md)、方向级认领(.dsh/state/claims.md)、目标帧(.dsh/goals/.md)—— 都落在文件里,以便任何主张都能对着别的写入者也能看到的那个文件来核对。

与上游 aegis 的区别

aegis 提供方法:怎么写计划、怎么做严格 TDD、怎么系统调试、怎么评审、怎么在声称完成前验证。它是一套技能库,并假定存在单一协调者亲自执行。

本 preset 提供拓扑:谁做什么、在什么工具限制下、拿什么证据。两者正交且互补 —— aegis 技能是被路由到 lane 上,而不是就地执行。本 preset 补上 aegis 结构上给不了的东西:一切以「存在多个 agent」为前提的东西 —— lane 台账及其三态、带停滞判据的方向级原子认领(用于跨会话所有权),以及独立评审规则。它们不是对 aegis 的扩展,而是另一个维度;没有修改任何 aegis 技能来迁就它们。

仓库结构

| 路径 | 是什么 |
| cordis.patch.yml | 生成物,preset 的各行。勿手改,见下。 |
| tools/preset-declaration.mjs | preset 各行的唯一真源。 |
| tools/gen-cordis-patch.mjs | 由声明生成 cordis.patch.yml。 |
| tools/audit-personas.mjs | persona 文件的静态审计(对照一个被排除的上游语料的原创性阈值)。 |
| plan-aware-persona.mjs | 每次装配在 Orchestrator 与 Planner 之间切换 persona。 |
| routing-sections.mjs | 四段常驻路由 section。 |
| lane-composition.mjs | 三个按持久 agent id 的子代寻址工具。 |
| personas/ | 十份 persona:orchestrator、planner,以及每条 lane 一份。 |
| skills/ | 四个自研技能。本目录就是它们的权威清单。 |
| extensions/dsh/ | 本包的两个插件:技能 provider,以及 aegis 前缀桥。 |
| docs/ | 不分发。 设计史被留存;上文的设计一节即是规范。 |
| README.zh.md | 本文件。 |
| install.sh | 把下面这些装进一个 DSH home。 |
| LICENSE | MIT 许可 + 第三方归属。 |

改 preset 的正确姿势:cordis.patch.yml 带「DO NOT EDIT BY HAND」头,是生成出来的。改 tools/preset-declaration.mjs,然后:

node tools/gen-cordis-patch.mjs

生成器需要一个用来合并的骨架 patch:依次找 --skeleton 、$DSH_SKELETON、宿主自己的 standard.patch.yml,都找不到就拒绝编造。本仓库里的 cordis.patch.yml 与该命令从已提交声明产出的结果逐字节一致。

安装

安装方式是 link: 依赖,不是 npm 发布。package.json 带 "private": true,正是为了保证 @local/ 作用域的名字永不被误发布 —— 这个守卫就是当前名字安全的原因,也是真正发布那一刻要移除的标志位。本包不声明任何 dependencies:运行时一切由宿主提供。但它声明了 peerDependencies,四条全部标 optional —— 这样「我们测过什么」被写了下来,而任何安装都不会因为它失败:

| 包 | 范围 | 为什么 |
| @deepseek-ai/dsh-skill-filesystem | >=0.2.0-rc.2 =0.2.0-rc.2 =4.0.1 =3.18.0 #,它不查那个 include 过滤。所以卡住开关的不是行本身,而是浏览器半边:那两个开关需要一个 client bundle,而预设的行供应不了。

实测,宿主 0.2.0-rc.2:client bundle 扫描器(@deepseek-ai/dsh-client-modules)走的是根 loader 树,而预设的行挂在它自己的一棵独立 PresetTree 上(@deepseek-ai/dsh-agent-preset-registry,mountPreset() → new PresetTree(ctx) + tree.root.update(...))。PresetTree 继承 EntryTree,却在构造函数里把 owner 的 subtree 指针删掉,所以它的行从扫描器枚举的任何东西都不可达。于是本包 manifest 里的 dsh.client 声明永远不会被读到,bundle 也永远不会被供应 —— 那一行只是不会长出 configure 控件。公开的路子也没有:ClientModuleRegistry 只导出 compose / bundleResource / onGraphChanged,响应表是私有的,所以也没有受支持的注册入口。UI 只能落在一个 profile 级 bundle(另一个包)里,不能落在这个 preset 里。

设置表单本身不用怀疑:在 orch-debug 档上,POST /api/settings/describe 返回命名空间 orch-aegis-prefix,schema 里两个 key 都在,值里两个已存的布尔量也都在。

不带 UI 的编辑仍然有效,也仍然受支持:home 层 $DSH_HOME/cordis.patch.yml 在本 bundle 之后应用,所以那里的一行会胜出。两个 key 都要重述,因为 patch 是整行替换某行的 config,不做深合并。

客户端页面支持不在计划内;上面那个限制是架构性的。 两个开关只能改配置文件;想知道为什么,看这一节。

5. 接入 profile

在 ~/.dsh/profiles//package.json 里加上依赖,并把同一个字符串加进 dsh.profile.bundles(保持原位置):

"@quill507/dsh-orchestrator-preset": "link:/plugins/dsh-orchestrator-preset-bundle"

然后在该 profile 目录跑 pnpm install。在 ~/.dsh/profiles//cordis.patch.yml 里选中本 preset:

- id: preset-dsh-orchestrator-preset
name: '@deepseek-ai/dsh-agent-preset'
config:
selectedDefault: dsh-orchestrator-preset

patch 是整行替换而非深度合并,所以上面那段是完整的一行,不是往更大的行里追加。两个 profile 必须钉住同一个 aegis 发布 tag;desktop 不允许浮动。

install.sh 刻意停在这一步之前:那两个文件属于活机安装自身,而 cordis.patch.yml 被 dsh-hmr 实时监视,写它会当场触发运行中宿主的全树重组。脚本只打印这些改动,不代劳。

6. 安装 aegis 方法包

aegis 是上游依赖,不由本仓库分发。通过宿主安装,两个 profile 钉同一个 tag。

故障排查

在 GUI 里选的 preset 不会自己回来。 preset 选择器经由配置编辑器持久化,而后者就地重写 profile 自己的 cordis.patch.yml。在那里选过的 preset 会覆盖 selectedDefault,且没有任何东西会把它恢复。bundle 自己的 patch 没被动 —— 只有 profile 的。重新应用上面那段行即可回来;没有状态需要重置。

cordis.yml 是空的,而这是正确的。 宿主把空列表定义成字面量,并在每次启动时重写以让它保持为空;组合出来的行由 loader 写回其中,否则下一次启动会把每一条 bundle insert 都复制一遍。所以 grep cordis.yml 永远无法告诉你当前选中了哪个 preset —— 要看 cordis.patch.yml。

bundle 加载了却找不到它的文件。 用 test -L 查链接。目录存在但不是符号链接,那就是复制品,不会跟踪后续编辑。

lane 表现得像是丢了 shell 工具。 preset 同时声明两个 shell —— tool-bash 与 tool-pwsh —— 各自按 process.platform 开关,所以在 Windows 上 preset 要的是 pwsh。在 profile 层之后应用的一层可以覆盖它,~/.dsh/cordis.patch.yml home 层就是这样一个地方:一个在 Windows 上只用 bash 的宿主,会在那里强制 tool-bash: disabled: false 与 tool-pwsh: disabled: true。这是部署事实,不是缺陷 —— preset 不要求 pwsh,而「被禁用的工具」仍然是「已知的工具」,所以 lane 用 bash 一样派发和工作正常。看起来 lane 丢了 shell 时,先查你自己的 home 层或 profile 层,再怀疑 preset:home 层优先,而且是静默优先。另需注意,生成器派生 lane toolFilter 里那个 shell 名字时,读的是 host 层与 preset 自己各行两处的生效值,所以改动那个 override 就意味着要重跑 node tools/gen-cordis-patch.mjs。本 preset 不为迁就任何特定 shell 安排而改动任何 tool 行、filter 或 persona。

persona 前缀是空的。 plan-aware-persona 对缺失或空的 persona 文件响亮失败,而不是悄悄剥掉 agent 的身份。读报错:它会点名那个文件。

许可证

MIT —— 参见 LICENSE。

致谢

这个预设大半是别人的工作,只是被摆成了某一种形状,所以值得把是谁说清楚。

DeepSeek Harness —— 本预设运行的宿主,MIT 许可。cordis.patch.yml 里的配置行派生自它,本项目赖以成立的 bundle/patch 模型是它的设计,而它自家的一等公民 bundle(dsh-web-app、dsh-base)就是这里那套架构的参照实现。本 README 记录的若干发现——组合一个 profile 会重写它的 cordis.yml、filesystem skill provider 可以指向任意目录树——都是宿主的既定行为,而且是测出来的,不是猜的。

aegis —— 本预设路由进入的方法论包,作者 Jesse Vincent 与 Ganyuan Ran。方法归它:路由纪律、按情境给技能的做法、压力测试与验证习惯。本项目提供的是它外围的编排层,并在运行时消费 aegis,一行原文都没有 vendor 进来。它的 extensions/dsh/index.js 同时也是这里那座 provider 的可用参照——那十二行让「技能随包自带」这个设计在被尝试之前就已经显然正确。

itamzxm —— Auto-Pilot 的作者。那是一组七个技能,为本预设之外的其它 agent 环境而写(workbuddy、traework、opencode 等),而不是绑定某一个宿主。它们是裸技能目录,没有 package manifest —— 这正是它在这里不是一个可安装件的原因:Auto-Pilot 是被当作机制的来源读的,不是被当作组件引入的。本设计从它这里按机制借用了六组东西:记忆模型、召集闸与收敛三态、裸跑测试与委派函、四条调度机制、以及搜索与目标判据。Auto-Pilot 未发布、无许可证,本仓库不含它的任何文本 —— 哪个机制来自它,由本仓库自己的设计史点名,而不是把原文抄过来。

Tacrine —— 在本次设计开始之前,把 oh-my-openagent 的 agent 集移植到 DeepSeek Harness 并做了修改。这里那十份 persona 起初就是那次移植的产物。

oh-my-openagent(code-yeongyu/oh-my-openagent)—— 那些 persona 最终上溯到的源头,作者 code-yeongyu。该项目不是开源的,本仓库也不分发其中任何文本:这里每一份 persona 都已按一条明确阈值重写 —— 与上游 agent 源码的 n-gram 重合低于 2%,且不存在连续六行相同。tools/audit-personas.mjs 就是那条阈值,做成了可执行的形式。它的一半(术语探针)在任何环境都能跑;另一半(重合度)需要上游语料,而语料是刻意不随仓库分发的,所以这次重写是部分证据,而不是一个已验证的结论 —— 工具把它报成「未验证」而不是「通过」,因为这两者是不同的事。

本项所针对的各个包的作者 —— @deepseek-ai/schemastery,以及提供 dsh-tools、dsh-skill-filesystem、dsh-home-paths 的 DSH 各包。没有它们这里什么都加载不起来,而它们当中没有任何一个是本包的依赖:宿主在运行时提供,这正是本 bundle 不声明任何运行时依赖的原因。

还有一点要说清楚:用来建造它的工具——一个在长会话里工作的语言模型——不是这些设计的来源。其中的错误按原样记在本仓库自己的历史里,没有被抹平;哪些是实测、哪些是假设,全文随处都标了出来。

第三方归属

正式记录 —— 本仓库里哪些东西来自别处、哪些刻意不在其中 —— 在 THIRD_PARTY_NOTICES.md。它单独成文而不是追加到 LICENSE 末尾,有两个原因:追加会让 GitHub 对一个明明是 MIT 的文件报成「Other」;而一个事实有两个落点,等于没有落点。

其中两点值得在这里重复,因为它们影响你可以拿这份代码做什么:aegis 包是运行时消费、未 vendor 进来的;而任何一台机器上装的第三方技能都不由本仓库再分发 —— 其中有些完全没有许可声明,再分发那类东西是违规而不是疏忽。
预览分享卡片长什么样 ↓cuddly-guacamole/dsh-orchestrator-preset
分享 · DeepSeek Harness Hub
cuddly-guacamole/dsh-orchestrator-preset

把任务路由给九条专职通道并核验磁盘证据

回到顶部