# 安全与凭据边界 ## 不能提交或分享的内容 以下内容不得进入 Git、GitHub、截图、日志、Issue、压缩包或诊断导出: - FHL Worker Key、DeepSeek Key、密码和 token。 - `.env.local`、本机配置、凭据文件和 DPAPI 密文。 - DSH 会话、用户图片、生成图片和完整请求/响应。 - `node_modules`、临时 profile、日志和构建缓存。 项目 `.gitignore` 已排除常见凭据、验证数据和构建目录,但提交前仍需人工检查。 ## 聊天配置的边界 聊天配置是显式用户授权行为。Key 会随消息发送给当前模型,并可能出现在 DSH 会话历史中;插件只能保证工具结果不回显 Key,不能撤回模型已经收到的用户消息。 不能接受这一点时,应改用 DSH 自身的凭据机制,把 Key 直接写入对应引用名 (`FHL_IMAGE_API_KEY`、`FHL_IMAGE_API_KEY_2`……)。 **Key 会在本机留存的第二份副本**:`fhl_image_configure` 的 `keys` 是工具调用的 参数,而 DSH 会把工具调用参数持久化写入会话记录(`session.append("tool/call", …)`)。 因此除了用户消息之外,Key 还会以明文形式出现在本机会话日志中。这一点最容易被 忽略,务必知悉: - 聊天配置只适合你愿意轮换的 Key;会话日志所在的磁盘应当视为已接触过该 Key。 - 想完全避免落盘,请绕过聊天,直接用 DSH 凭据机制写入引用名,并在此后撤销用过的 聊天 Key。 - 本项目的发布产物(`.tgz`、Git 历史、文档、截图)永远不含 Key;发布前的离线闸门 会扫描压缩包内的类 Key 文本与本机绝对路径。 `apiKeyEnv` 只是这些引用名的前缀,插件**不读取环境变量**来获取 Key;Key 只存在 于 DSH credential provider 中。若某个引用名由启动环境提供,凭据提供者会拒绝删除 它——`fhl_image_configure` 在缩减 Worker 数量时会跳过这类引用名,而不是报错。 ## 插件能访问什么 - 插件只读取 DSH credential provider 暴露的 Worker 凭据。 - 图片工具通过 DSH 附件服务读取用户明确授权的附件。 - 插件不读取任意本机路径、不执行 Shell、不下载未知远程插件。 - 生成结果作为 DSH 附件返回,不写入源码目录。 ## 安装供应链 预构建 `.tgz` 已经包含 `lib/`,安装时不需要编译,也没有会要求构建授权的安装 脚本。源码安装前应审查源码、锁文件和构建脚本,必要时锁定具体 commit,并只允许 准确的构建包名。桌面 App 安装后修改插件需要完全退出并重新打开才能生效。 DSH 0.2 会对插件的 `@deepseek-ai/dsh*` peer 范围做版本检查,请通过升级插件来 满足它,而不是授予版本豁免;豁免会让已知不兼容的代码真正执行。 ## 报告问题 报告时只提交版本、profile、工具列表、脱敏错误类型和复现步骤。任何发现的 Key 应立即在服务端撤销并重新生成,绝不要把旧 Key 发到 Issue 或聊天中。