# 更新、凭据与移动设备说明 ## 更新与安装 - **Git 安装**:先检查工作区改动,再将当前分支 fast-forward 到目标版本;有未提交改动或无法快进时先备份、处理或停止,不要强制覆盖。 - **内置更新器**:从 GitHub Release 选择源码资产并校验后更新现有插件,不执行 Git 命令。 - **ZIP 安装**:dsh-tavern-image-source.zip 是插件源码目录,供首次安装或明确执行源码安装器时使用;dsh-tavern-image-install.zip 是离线双击安装包,内含安装脚本和源码 ZIP,适合首次安装/迁移。不要用安装 ZIP 覆盖已有 Git checkout 或插件目录。 - GitHub Release 的 SHA256SUMS 使用标准 sha256sum 格式:64 位小写 SHA-256、两个空格、资产 basename。下载后应先核对对应资产的摘要。摘要能检测下载损坏;只有通过可信渠道取得清单,才能据此判断文件与发布者提供的内容一致。 - 自动更新必须在替换文件前确认 Release 源码包中的 package.json 声明的最低 Tavern API 版本,并确认当前宿主版本满足要求。版本不兼容或摘要缺失/不匹配时停止更新。更新完成后完整退出并重启 DSH Tavern;只刷新网页不足以重新加载插件。 - Tavern 集成方应只在插件目录首次缺失时安装源码。目录已存在时不要把发布包解压覆盖上去,以免覆盖用户数据或本地改动;后续更新应走受支持的插件更新器或 Git 快进流程。 ## 凭据存储 DSH 通过 `ctx.credentials` 提供凭据服务(`resolve` / `set` / `unset`),Tavern 的配音等功能也用它。插件现在把 ComfyUI 的令牌和密码、各生图渠道的 API Key 和密码都存进这个服务,`config.json` 里对应字段留空,只在 `credentialRefs` 里记录引用名(例如 `DSH_TAVERN_IMAGE_PLUGIN_CH_<渠道>_API_KEY`),不记录密钥本身。 - **旧配置自动迁移**:启动时如果 `config.json` 里还有明文密钥,会先写进凭据服务,写成功后再从文件中抹掉。 - **退回旧行为**:宿主没有凭据服务,或某个密钥写入失败时,这个密钥照旧保存在 `config.json`,出图不受影响。 - **删除**:在界面上清除密钥或删除渠道时,凭据服务里的对应条目一起删除。读取凭据出错时不会删除任何条目。 - **安全边界**:DSH 默认的凭据服务是 DSH 数据目录下的 `.credentials.yaml`,文件权限只允许当前系统用户读取,并没有加密。这次改动的好处是:密钥不再放在插件目录里,导出、打包、复制插件目录时不会带出去;和 DSH 其他密钥统一管理;宿主以后换用系统钥匙串之类更强的存储时,插件不需要修改。 ## Issue #18 第5项:手机与 Android 的边界 静态检查发现控制台声明了移动 viewport,若干列表使用自适应网格,客户端存在图片尺寸限制及图片查看器触摸拖动处理。插件后端是 Node 插件代码,网页界面本身可由浏览器呈现;这些源码线索不能证明整个插件可在 Android Tavern 内嵌宿主中运行。 需要区分三种情况: - **桌面 DSH 服务 + 手机浏览器远程访问**:手机承担网页界面,仍依赖桌面主机上的 Node 后端和网络可达性。当前没有本任务范围内的手机浏览器/局域网实测结果。 - **Android 内嵌 Tavern 宿主**:需要宿主提供兼容的 Node 插件运行时、网络、文件持久化和插件 API;不能仅凭 viewport 或触摸事件推断支持。 - **纯手机本地运行**:还需要可用的服务端运行时、存储和生图服务连接配置;本仓库没有 Android 原生打包层。 没有进行 Android 真机或手机浏览器验证。已知待验证项包括窄屏长表单和设置面板的滚动/溢出、触摸拖动与图片缩放手势冲突、远程访问时的主机可达性及浏览器安全策略,以及 Android 宿主是否实现所需 Node/Tavern API。不能将其描述为已验证支持。 Release finalizer 位于仓库 scripts 目录,仅供维护者和 GitHub Actions 调用,不包含在插件源码 ZIP 中。