# 第三方组件声明

本包**不打包**任何第三方代码，仅在运行/构建时使用下列组件。声明义务（署名与许可证保留）
由各自的包自行履行；本文件用于说明依赖关系与许可类型，便于使用者做合规审查。

## 运行期必需（不随本包分发，需另行安装）

| 组件 | 用途 | 许可 | 说明 |
|---|---|---|---|
| `dingtalk-workspace-cli`（命令名 `dws`） | **执行主体**：本插件的全部钉钉数据操作都通过它完成 | 见该包 | 需 `>= 1.0.6`。**不属于本包依赖**，由用户自行安装：`npm i -g dingtalk-workspace-cli`。本插件以子进程方式调用它，不修改也不分发其代码 |
| DeepSeek Harness（`@deepseek-ai/*`） | 宿主机运行时 | 见发行方 | 由宿主提供，**本包不声明也不打包**这些包（详见下节） |

## 运行期可选

| 组件 | 用途 | 许可 | 缺失时的行为 |
|---|---|---|---|
| `qrcode` | 把钉钉设备流深链渲染成二维码（SVG data URL），仅用于面板「扫码绑定」 | MIT | 面板明确降级为「只显示深链 + 授权码」，授权流程仍可完成 |

> 声明为 `optionalDependencies`：装不上不影响插件其余功能。

## 构建期（不进入发布产物）

| 组件 | 用途 | 许可 |
|---|---|---|
| `esbuild` | 把客户端实现打包成 `lib/client.js` | MIT |
| `@deepseek-ai/cordis` | 仅用于类型注释（JSDoc），**运行期由宿主提供** | 见发行方 |

## 为什么 `@deepseek-ai/dsh-*` 不出现在依赖里

DSH 的运行时包使用**模块局部 Symbol** 作为 key，安装第二份物理副本会导致 Host 查找失败
（`Symbol.for` 之外的局部 Symbol 无法跨模块实例共享）。因此：

- 本包在任何依赖节（含 `peerDependencies`）与 lock 文件中**都不声明** `@deepseek-ai/dsh-*`；
- 运行时这些模块由宿主注入解析；
- `npm run verify` 会把这条规则当作**断言**校验，CI 强制通过。

## 无第三方素材

本仓库不含第三方图片、字体、图标或数据集。二维码由 `qrcode` 在本地生成，**不使用任何第三方二维码服务**。

## 商标

「钉钉」「DingTalk」为钉钉（中国）信息技术有限公司的商标；「DeepSeek」为相应权利人的商标。
本插件为**非官方**第三方集成，与上述公司无隶属或背书关系，仅做事实性指称使用。
