[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94998":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":8,"pushedAt":8,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":14,"starSnapshotCount":14,"syncStatus":12,"lastSyncTime":26,"discoverSource":27},94998,"dsh-super-injector","yjh051108\u002Fdsh-super-injector","yjh051108",null,"TypeScript",120,16,2,9,0,10,43.69,false,"main",true,[21,22],"dsh","dsh-plugin","2026-08-24 04:01:23","# dsh-super-injector — 超级模组注入器\n\n> ## 🎉 v0.3.0 重大声明（2026-08-14）\n>\n> **从经验补丁到源码契约——注入器完成规范重构。**\n>\n> 本版本按 [docs\u002FSPEC.md](.\u002Fdocs\u002FSPEC.md)（基于 DSH 0.1.0-rc.6 源码语义推导的\n> 设计契约）重构自重载为**官方 REPLACE 结构**：工具只排程、绝不亲自自杀；\n> reboot 走 `entry._dispose`（官方 `_disposing` 豁免）+ 失败自动 rollback。\n> 从此注入器的一切行为都有源码依据，不再依赖经验补丁。\n>\n> **里程碑回顾**：\n> - 三轮零上下文 subagent 评测：9\u002F10 → 9.5\u002F10 → **10\u002F10**\n> - 作死压力测试：连环自杀\u002F坏语法\u002F悬空 junction\u002F循环注入卸载——**零崩溃零残留**\n> - **云源自举**：下载 release 副本 → 装配 → 注入器从云端副本运行（自检 8\u002F8）\n> - **免杀进程恢复**：失败 → touch patch（include.refresh 进程内重装配）→ 6 秒复活\n> - **DSH 正式版兼容**：0.1.0-rc.6 一行不改直接运行（peerDeps 范围声明实证）\n>\n> 哲学不变：**一切皆插件**——注入器是 DSH 生态的运行时注入标准层，\n> 让\"插件想长成什么样就长成什么样\"。\n\nDSH 生态的 **BepInEx 式模组注入入口**：运行时把任意本地插件包注入运行中的 web，\n不碰 patch \u002F package.json \u002F bundles 列表、不重启进程。**注入即完整生效（host 工具 + client UI）。**\n\n> 灵感：官方装配机制（profile bundle \u002F repository-plugin）是唯一的\"官方入口\"，就像游戏\n> 只有启动器能装模组。本插件打破这一点——引导器走官方入口装一次，之后**万物皆可运行时注入**。\n\n## 安装（三选一）\n\n### 方式 A：Release 包（推荐，免构建）\n\n从 [Releases](https:\u002F\u002Fgithub.com\u002Fyjh051108\u002Fdsh-super-injector\u002Freleases) 下载\n`dsh-external-dsh-super-injector-0.0.1.tgz`，解压得到插件目录（含 `lib\u002F` 与 `cordis.patch.yml`），然后：\n\n```bash\n# 官方装配（重启后由 bundles 接管，生产态）\ndsh plugin --profile web add \u003C解压目录>\n\n# 或运行时注入（免重启，开发态；需任一环境已常驻注入器）\n# 对 AI 说：dev_inject_plugin \u003C解压目录>\n```\n\n### 方式 B：git 装配\n\n```bash\ndsh plugin --profile web add github:yjh051108\u002Fdsh-super-injector\n```\n\n> git 依赖拉取的是源码仓库（不含 `lib\u002F`）；包内 `prepare` 钩子会在安装时自动\n> 用 tsdown 构建自包含 `lib\u002F`（首次需要网络拉取 tsdown，之后走本地缓存）。\n> 若构建失败，请改用方式 A 的 Release tgz（预构建产物）。\n\n### 方式 C：引导装配（源码方式，只需一次）\n\n> ⚠️ 仅限未走 bundles 装配时使用：注入器自带 bundle 层会自注册\n> `dsh-super-injector`，与下方手动 `insert` 撞同一个 loader entry id，会报\n> `duplicate loader entry id`。走方式 A\u002FB 装配后请勿再加这一条。\n\n在 `~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml` 添加：\n\n```yaml\n- insert:\n    - id: dsh-super-injector\n      name: '@yjh051108\u002Fdsh-super-injector'\n      config: {}\n```\n\n引导器常驻后，任意超级模组随取随用，无需再碰官方配置。\n\n## 兼容性\n\n- **不硬编码 DSH 版本**：peerDependencies 全部为范围声明\n  （`@deepseek-ai\u002Fdsh-tools: >=0.0.1-rc \u003C2`、`cordis: >=4.0.0-rc \u003C5`）——DSH 升级不报废。\n- 已适配服务改名：`webServer`（原 httpServer）、`compaction`（原 compact）。\n\n## 特性\n\n- 🔥 **热重载 + 自重载**：`dev_reload_package` 整包重载（清缓存 → 重新 import → 重建 fiber，失败回滚保留旧代）；注入器自身也支持自重载（自杀 → 全局定时器重建）\n- 🤖 **自动 watch**：注入即自动监听插件目录，改代码 build 后约 1.5 秒自动重载（无需手动触发）\n- 🖥️ **注入插件 UI 完整生效**：清除 loader 幽灵 entry 隔离（normalizeEntry），client 模块补扫\u002F联动\u002F卸载清理——注入的插件 host 工具 + 图谱\u002F面板等 UI 全部可用\n- 🧪 **开发侧挂区（staging）+ 持久化**：测试工具挂\"后侧\"不进 tools schema、缓存零污染；`dev_stage_promote` 一键转正；staging 落盘，**自重载\u002F重启后转正工具自动恢复**\n- 🧹 **一键卸载**：`dev_uninject_plugin` fiber 全清理（工具\u002F监听\u002F路由\u002Fclient 表）→ 清注入清单 → 删 junction，免重启\n- 🛠️ **路由自愈**：`dev_clear_routes` 直捣 webserver 内部路由表，热重载残留的孤儿路由免重启清除\n- 🔁 **重启自动恢复**：注入清单持久化（`~\u002F.dsh\u002Fsuper-injector\u002Fregistry.json`），web 重启后自动归位\n- 📊 **操作自检**：每次注入\u002F重载\u002F安装返回 `host ✓ \u002F client ✓` 双验证；`dev_plugin_status` 含操作成功率统计\n- 🛡️ **失败可重试**：`hasActiveEntry` 权威防重 + 失败残留缓存自动清理 + 残留 entry 自动清理\n\n## 与 dsh-evolve 的定位差异（生态互补）\n\n| | dsh-evolve | dsh-super-injector |\n|---|---|---|\n| 形态 | **创造模式**：agent 现场写单文件插件源码（`~\u002F.dsh\u002Fevolve\u002F\u003Cname>.mjs`）热挂载 | **手术台**：注入开发者预构建的**完整插件包**（package.json + lib\u002F） |\n| 适用 | agent 随对话长出小工具（记账\u002F天气\u002F周报） | 装\u002F换成品模组、自主开发闭环（写 → build → 注入 → 热重载） |\n| 联动 | evolve 长出的源码可升级为完整包，再走注入器上膛 | 注入后可被 `dev_reload_package` 热重载 |\n\n## 生态定位：官方之下的运行时标准层\n\n官方对插件体系的方向（2026-07 agent notes）：\n\n1. **否决安装命令 + 安装数据库 + marketplace**——持久化插件只有一种状态：**配置**（cordis.patch.yml \u002F profile bundles \u002F repositories），事务性 HMR 对账；\n2. **agent 自己管理运行时**——自指 cordis 工具集，运行时归 agent 管。\n\n翻译：官方钦定\"**装什么**\"（bundle \u002F repository + 配置），但\"**装完之后怎么改**\"——热重载、侧挂测试、一键转正、卸载、失败自愈——是官方留白。**这一整块运行时管理面，由本插件吃下。**\n\n| 生态入口 | 层 | 一句话分工 |\n|---|---|---|\n| 官方 bundle \u002F repository | 装配层 | 唯一官方入口，配置即状态 |\n| plugin-registry | 官方薄控制台 | 官方格式插件管理与开发引导 |\n| marisa | agent 面工具链 | 临时插件 → 持久化插件的固化桥 |\n| mygo | 受管对象层 | 插件生命周期对象化（锁定\u002F启停\u002F依赖图） |\n| dsh-evolve | 创造模式 | agent 现场长出单文件能力 |\n| **dsh-super-injector** | **运行时手术台** | **开发闭环全家桶：注入 \u002F 热重载 \u002F 侧挂转正 \u002F 卸载 \u002F 路由自愈 \u002F UI 联动** |\n\n**设计原则**：\n\n1. **不发明协议**：注入的是标准插件包（package.json + lib\u002F），格式就是官方包格式，装上即官方语义；\n2. **双路径，尊重\"配置唯一\"**：运行时注入（免重启，开发态）↔ `dev_install_package` 落 profile bundles（重启后由官方接管，生产态）——注入清单只是**运行时恢复缓存**，不是第二安装数据库；\n3. **模型可驱动**：dev_* 全是工具，agent 自己注入\u002F卸载\u002F转正——正踩在官方\"agent 自己管理运行时\"的方向上；\n4. **可逆且自愈**：注入可回滚（失败保旧代）、卸载即净（fiber 全清理）、残留可自愈（路由\u002F缓存\u002Fentry 自动清理）。\n\n**目标**：成为官方装配机制之下、生态事实标准的**运行时管理层**——\"启动器装模组\"只是起点，注入器让 DSH 拥有\"**万物可注入、注入可回滚、改完即生效**\"的 Mod 级体验。\n\n## 工具全家桶（全部免重启）\n\n| 工具 | 说明 |\n|---|---|\n| `dev_inject_plugin` | 运行时注入本地插件包（junction 链接 + loader.create，`hasActiveEntry` 防重） |\n| `dev_uninject_plugin` | 一键卸载注入模组（fiber dispose 全清理；bundle 插件自动写 disabled 阻断自装配） |\n| `dev_injected_list` | 列出注入清单 |\n| `dev_install_package` | 热装配本地 bundle 插件（profile package.json + junction + loader.create，重启后由 bundles 列表正常装配） |\n| `dev_reload_package` | 整包热重载（清缓存 → 重新 import → 重建 fiber，失败回滚保留旧代；含自重载） |\n| `dev_plugin_status` | 已装配插件清单、fiber 状态与操作成功率统计 |\n| `dev_clear_routes` | webserver 路由残留自愈（按 path 前缀删除孤儿路由） |\n| `dev_stage_add` | 开发侧挂：测试工具挂后侧（不进 tools schema，缓存零污染） |\n| `dev_stage_call` | 调用侧挂工具测试 |\n| `dev_stage_list` | 列出侧挂工具（含转正状态） |\n| `dev_stage_promote` | 一键转正：侧挂工具挂前侧正式注册（唯一一次缓存刷新） |\n| `dev_stage_demote` | 撤回\u002F注销侧挂或已转正工具 |\n\n## 插件开发指南（生产线）\n\n**哲学**：插件想长成什么样就能长成什么样——工具包 \u002F 守护循环（timer+LLM 自主 agent loop）\u002F UI 面板 \u002F 混合形态，同一注入通道；注入即完整生效（host+UI）、可热重载与自重载、卸载即净；**插件自身的提示词\u002F工具\u002F循环皆可自我优化**（改 → build → 重载闭环）。建新插件**优先克隆\u002F借鉴\u002F重构生态已有资源**（dsh-external 仓库、已注入插件、官方 packages 模式），不重复造轮子。\n\n### 一分钟起步（生产线三件套）\n\n```bash\n# 1. 生成骨架（toolkit \u002F daemon-loop \u002F ui-panel \u002F hybrid）\n#    对 AI 说：dev_scaffold_plugin {\"dir\": \"D:\u002Fdev\u002Fmy-plugin\", \"name\": \"my-plugin\", \"form\": \"daemon-loop\", \"description\": \"...\"}\n\n# 2. 构建打包（探测 DSH_CHECKOUT → tsc host → tsdown client（如声明）→ npm pack → tgz）\n#    对 AI 说：dev_build_plugin {\"dir\": \"D:\u002Fdev\u002Fmy-plugin\"}\n\n# 3. 发布（gh release create v\u003Cversion> + tgz）\n#    对 AI 说：dev_release_plugin {\"dir\": \"D:\u002Fdev\u002Fmy-plugin\", \"version\": \"0.1.0\"}\n\n# 注入即活：dev_inject_plugin {\"dir\": \"D:\u002Fdev\u002Fmy-plugin\"}\n# 改代码 → build → 自动 watch ~1.5s 重载（或 dev_reload_package）\n```\n\n### 30 行写一个\"会思考的插件\"（守护循环最小示例）\n\n```ts\nimport type { Context } from 'cordis'\nimport type LlmService from '@deepseek-ai\u002Fdsh-llm'\nimport { createUserMessage, ReasoningEffortId } from '@deepseek-ai\u002Fdsh-llm'\n\ntype AppContext = Context & { llm: LlmService; setInterval(fn: () => void, ms: number): any }\n\nexport const name = 'my-daemon'\nexport const inject = ['timer', 'llm']\n\nexport function apply(ctx: AppContext): void {\n  let route: { provider: string; model: string } | null = null\n  ctx.on('llm\u002Fstream', (options, next) => { route = { provider: options.provider, model: options.model }; return next() })\n  ctx.setInterval(() => {\n    void (async () => {\n      if (!route) return\n      const stream = ctx.llm.stream({\n        provider: route.provider, model: route.model,\n        system: '判断是否需要人工介入，直接输出结论',\n        messages: [createUserMessage({ source: { kind: 'user' }, content: [{ type: 'text', text: '检查事项...' }] })],\n        reasoningEffort: ReasoningEffortId('off'), maxTokens: 200,\n      })\n      for await (const chunk of stream) { \u002F* 决策 → 行动 *\u002F }\n    })().catch(() => {})\n  }, 60_000)\n}\n```\n\n**规范铁律**（注入器实测沉淀）：\n1. **资源注册必须挂 `ctx.effect`**（工具\u002F路由\u002F监听）——热重载\u002F卸载才能自动清理，否则僵尸残留（注入器自己踩过）\n2. **peerDependencies 用范围声明**（`>=0.0.1-rc \u003C2`、`>=4.0.0-rc \u003C5`）——不硬编码版本，DSH 升级不报废\n3. **client bundle 需单独构建**（tsdown → lib\u002Fclient.js）——UI 形态两步构建\n4. **提示词注入遵守缓存原则**：静态文本 + order 靠前（静态到头）；动态内容走消息尾（动态到尾）；严禁动态拼接进 system——**system 前缀任何动态变化 = 整个会话缓存全量 miss**（命中便宜 10 倍）\n5. **自检**：改完代码跑一次 `dev_self_test`，确保注入\u002F重载\u002F自重载\u002F预检\u002F卸载全链路不退化\n6. **首轮锚定**（V4 Pro 实测，参考 [dsh-anchored-standard](https:\u002F\u002Fgithub.com\u002Fxiaobright\u002Fdsh-anchored-standard)，Project2 98\u002F99）：工具面大（≥5 个）时，首轮请求只暴露最核心的 1-2 个工具，首个 `tool\u002Fcall` 后恢复全部——首轮请求结构决定整条会话的策略轨迹，锚定训练对齐的窄工具面再放开，能力不损。实现：`system-prompt\u002Fassemble` Waterfall 过滤器（骨架已自带，见 dev_scaffold_plugin）\n7. **工具 schema 精简**：description 用短句点明用途，详解放 tool result \u002F 静态引导文本，不要写进 schema——工具目录按字符计费进首轮 prefill，实测 6 插件可膨胀到 17.6 万字符，稀释首轮注意力且无缓存 prefill 最贵（缓存命中便宜 10 倍）\n8. **近距离信号原则（最强机制，P14\u002FP16\u002FP20 实测）**：所有行为引导（分类\u002F深度思考\u002F收敛）必须注入在**用户消息之后**（近距离），同一指令放 system（远距离）会衰减甚至反向（P13 协议加速衰减、P20 深度段进 persona 路由崩到 67%）；固定文本保持缓存命中（92-94%）\n9. **弱域内路由（P8\u002FP11）**：任务类型模糊时不要武断选模式——用弱 persona（模型自己分类），**按模型选 persona**（Pro=spec句+few-shot，Flash=neutral+classify，同一 persona 两模型行为可相反）\n10. **单任务长链路三锚（P22\u002FP23）**：开放任务探索失控是主病（完成率 0%）——persona 静态锚「回顾已完成 + 信息足够就产出 + 禁止环境检查\u002F穷举 grep」把完成率拉到 100%\n\n### 高性能插件（首轮锚定 · 为什么 & 怎么做）\n\n**为什么**：DeepSeek V4 Pro 的行为策略在首轮请求处被「完整 system prompt + 工具 schema 分布」强条件化。同题同环境：minimal（2 工具）99\u002F96，standard（25 工具）91，两阶段锚定 98\u002F99——先窄后宽，能力与完整工具面兼得。微探针证明起作用的是**可调用的 schema 面**（action space），不是看见工具名文本；工具目录只变化一次（首↔次请求之间有一次前缀缓存变化，首轮无缓存 prefill 最贵）。\n\n**怎么做（骨架自带，三步启用）**：\n1. `dev_scaffold_plugin` 生成的 toolkit 骨架 apply() 末尾有注释好的锚定块；\n2. `inject` 数组加 `'systemPrompt'`，把 `MINE` 换成你的工具名集合、`CORE` 换成首轮要保留的核心工具；\n3. 首次工具调用后自动恢复全部工具，resume\u002Freload 不丢状态（阶段从持久 session events 推导）。\n\n**验证**：导出 session JSONL 看 `request\u002Fheader`——第一份只含核心工具，首次工具调用后的下一份变更 header 含完整目录，此后保持。\n\n### 高性能引导的完整认知（v0.3.3 更新，基于 dsh-router-standard P1-P23 实测）\n\n| 机制 | 实测 | 落地 |\n|---|---|---|\n| 首轮锚定（窄工具面） | Project2 98\u002F99 | tool-bootstrap 过滤器（骨架自带） |\n| **近距离引导**（用户消息后注入） | 零衰减（远距离同指令加速衰减） | 插件监听 session\u002Fevent → inbox.append 固定引导 |\n| **弱域内路由**（模糊任务交模型自分类） | 区分度 +5~5.7，按模型选 persona | weak 模式（dev_router_mode weak） |\n| **deep-guide**（分类+深度思考+commit） | 路由 96% + 收敛 100% + 反稀释 | 近距离固定引导文本 |\n| **单任务三锚**（回顾+收敛+反跑题） | 完成率 0%→100% | persona 静态锚 |\n| plan-mode section 保留 | 失忆修复（v6） | applyPersona 只换 persona section |\n\n完整实现与复现探针：[dsh-router-standard](https:\u002F\u002Fgithub.com\u002Fyjh051108\u002Fdsh-router-standard)（v0.1.0，含论文与 P1-P23 全数据）。\n\n**参考与致谢**：本引导中的「首轮锚定」机制与统计证据，参考了 **xiaobright** 的开源工作——\n[`dsh-anchored-standard`](https:\u002F\u002Fgithub.com\u002Fxiaobright\u002Fdsh-anchored-standard)（MIT，\n两阶段锚定 preset 与 `tool-bootstrap.mjs` 实现，Project2 实测 98\u002F99，首轮 2 工具 → 首次\n工具调用后恢复 25 项完整 Standard 工具）与\n[`modeltest`](https:\u002F\u002Fgithub.com\u002Fxiaobright\u002Fmodeltest)（V4.1b 评测套件：同环境对照\nminimal 99\u002F96 vs standard 91 vs 两阶段 98\u002F99、触发机制微探针、轨迹统计）。骨架中的锚定\n实现即该 preset 过滤器的插件级移植（只裁剪本插件工具）。\n\n## 典型工作流\n\n**装模组**：拿到插件包（package.json + lib\u002F 产物）→ 对 AI 说 `dev_inject_plugin`（参数 = 插件包绝对路径）→ 当场生效（下一 step 工具可见）。\n\n**开发迭代**：改代码 → build → 自动 watch 约 1.5 秒自动重载（或 `dev_reload_package`）→ 验证 → 稳定后 `dev_stage_promote` 一键转正。\n\n**卸载**：`dev_uninject_plugin`（参数 = 包名子串）→ 工具\u002F监听\u002F路由\u002Fclient 表全清，免重启。\n\n## 机制\n\n1. **junction 链接**插件包到 `~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fnode_modules`（loader 标准解析路径）；\n2. **`ctx.loader.create({ name, config })`** 运行时装配（完整 ctx）；\n3. **清单持久化**（`~\u002F.dsh\u002Fsuper-injector\u002Fregistry.json`），重启后自动恢复注入；\n4. **client 联动**：注入\u002F重载后清除 entry disabled 标记并补扫 client 模块表（`client-modules.processOne`），浏览器端 bundle rev 联动更新。\n\n## 踩坑记录\n\n- **插件包必须自带依赖链接**：`lib\u002F` 里 `import '@deepseek-ai\u002Fdsh-tools'` 等从包自身 `node_modules` 解析——照 build.sh 建 junction 到 checkout 包（如 `node_modules\u002F@deepseek-ai\u002Fdsh-tools → \u003Ccheckout>\u002Fpackages\u002Fcore\u002Ftools`）；\n- **client bundle 需单独构建**：host 侧 `bash scripts\u002Fbuild.sh`（tsc），client 侧 `npm run build:client`（tsdown，产物 `lib\u002Fclient.js`）——注入插件要出 UI 必须两步都构建；\n- **失败 import 会毒化重试**：loadCache 残留残缺 job 导致同名重载复用失败态——注入前 `purgeCache` 清理；\n- **资源注册必须挂 `ctx.effect`**：`reloadPackage` 重建失败若报 `duplicate \u002F already registered`，说明资源是裸注册——挂 `ctx.effect` 后热重载才能正确清理重建；\n- **client 操作必须用完整包名**：`client-modules.processOne` 对 `entry.options.name` 精确匹配，传短名会静默注册失败；\n- 注入的插件不进 loader 配置持久化——重启后由注入器自动恢复（引导器常驻）。\n\n---\n\n**仓库**：https:\u002F\u002Fgithub.com\u002Fyjh051108\u002Fdsh-super-injector\n**Release**：https:\u002F\u002Fgithub.com\u002Fyjh051108\u002Fdsh-super-injector\u002Freleases\n","dsh-super-injector 是一个面向 DSH（DeepSeek Hub）生态的运行时模组注入工具，支持在不重启 Web 进程的前提下，动态加载、热重载和卸载完整插件包。其核心功能包括：基于官方 DSH 源码契约的 REPLACE 结构注入、插件 UI 与 host 工具双生效、自动文件监听与秒级热重载、失败自动回滚与残留清理、注入清单持久化及重启恢复。技术上采用 TypeScript 实现，深度适配 cordis 插件框架与 DSH 0.1.0-rc.6+ 的语义规范，强调零崩溃、零残留与免配置自举。适用于 DSH 插件开发调试、AI 工具快速迭代、低侵入式功能扩展等场景。","2026-08-19 02:30:08","CREATED_QUERY"]