# DeepSeek Harness 插件：依赖服务卸载时撤销工具，热重载后不留下重复监听

已在真实Cordis 4.0.5实跑inject依赖卸载/恢复、ctx.on与ctx.effect清理：工具Map撤销后恢复，probe计数1→1→2；作者Map不是DSH Host工具服务，未运行HMR loader、Desktop或LLM。
本题Node依赖见package.json，在独立目录执行npm install，再运行Python入口。


## 运行

在本目录使用独立虚拟环境并安装requirements.txt；脚本结果写入results。

```sh
python reference/audit.py
python reference/run_sdk.py
```

fixtures是原创输入与故意失败样本；作者真值、离线合成provider和实际SDK记录各自标明，不是模型正确率。需要真实模型/账号/GPU的步骤按正文另行授权运行。

## 1. 分开依赖服务和工具插件

原创originalCatalog服务提供只读资料，dependent插件声明inject。示例工具表是作者Map，不冒充DSH官方Host工具注册表。

## 2. 运行真实Cordis最小生命周期测试

先安装当前包并执行reference/run_cordis.mjs，记录版本。测试通过事件监听及作者工具Map观察fiber实际加载与卸载。

## 3. 把监听和工具释放绑定到ctx

插件通过ctx.on注册监听，并用ctx.effect返回工具移除函数。直接挂全局监听而不释放是反例，不应靠重载覆盖名称掩盖。

## 4. 卸载服务提供者

dispose provider后等待依赖刷新，检查dependent注册的工具是否消失、probe是否不再触发。这里实测的是Cordis依赖生命周期。

## 5. 重载提供者并再次probe

服务恢复后dependent应重新启动；一次probe只触发一次。保存触发数，避免热重载累计监听。

## 6. 接入真实DSH工具服务

在匹配版本Host中改用官方工具注册API与最小权限schema，保留源码/配置。作者Map通过不代表Host权限和工具可见性已验收。

## 7. 交付dispose与重载回执

保留卸载前、依赖缺失、恢复后的工具名和计数；本包不运行LLM、Desktop或真实DSH工具调用。

## 官方依据

- DeepSeek Harness 官方文档或源码：https://deepseek-harness.github.io/deepseek-harness/develop/framework/index.md
- DeepSeek官方Harness仓库：https://github.com/deepseek-ai/deepseek-harness
