概览
@kyorakuyk/dsh-plugin-manager
README / ZH
插件文档
目录摘要
dsh.pub 核对固定版本的组合包契约、运行时事实与分发语义;完整 README 请查看源仓库。
在 GitHub 阅读完整 READMELIMITATIONS
已知限制
- **远程信任**:`/plugin-manager/*` 路由对任何能触达服务器的人都开放。Web 面 默认仅回环绑定(launcher 拒绝 `--host 0.0.0.0`),但暴露到局域网时不能依赖 /api 信任围栏的保护;按可信权威校验为待办。 - **与 CLI 混用**:管理器把 bundle 装为真实依赖,但**不加入 `dsh.profile.bundles`** (行在用户补丁层)。之后若再运行 `dsh plugin` CLI,reconcile 会把声明 dsh.bundle 的依赖并入 bundle 层,下一次启动时双组合这些行。每个 bundle 只用 一种机制(卸载时会自动清理 CLI 残留的 bundle 层条目)。 - **无法解析包名的 spec**:安装 git URL 时若无法在 profile 的 `node_modules` 中识别出包名,会以 "could not resolve the installed package name" 明确失败。 - **行 id 冲突**在安装时被拒绝:补丁行与用户层(或其他 bundle)冲突的 bundle 不会被安装。 - **更新热应用的是组合与配置,不是模块代码**。Node 会在进程内缓存已解析的模块 与包 exports,因此 *代码* 或 *exports map* 变更的版本需要重启才生效;manager 的 update 热替换补丁行(行集合与行配置),依赖本身经 `pnpm update` (registry)或 remove + re-add(`file:`/`link:`)刷新。 - **启停按行 id 定位条目**;非补丁行 id 的生成式 Loader id 无法被切换。 - **pnpm ≥ 11 的 supply-chain 策略**:默认 `minimumReleaseAge`(24h)会拒绝 "刚发布"的包(`ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION`)。管理器执行 pnpm 时统一附加 `--config.minimumReleaseAge=0` 跳过冷却(安装是用户主动 操作),并把违规包的 scope 追加到 profile `pnpm-workspace.yaml` 的 `minimumReleaseAgeExclude`(例如 `@kyorakuyk/*`)作为第二道防线。带 构建脚本的 git 依赖(`prepare` 等)会被 `allowBuilds` 白名单拦截 (`ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED` / `ERR_PNPM_IGNORED_BUILDS`): 管理器会从 pnpm 输出提取其要求的**精确 spec**(`包名@git+url#sha`), 自动写入 `allowBuilds` 并重试一次。手动处理时把对应 scope/spec 加入 `pnpm-workspace.yaml` 对应区块即可。 - **暂无插件市场**:安装是 spec 驱动的;浏览与精选发现为待办。 - **向运行中的 profile 部署 bundle 变更需要重启**。启动清单里的 bundle rev 与 host 半都在进程激活时冻结:把变更后的代码重装进已运行的 profile,服务端按 请求读取新 client bundle,但 host 仍运行旧逻辑(且启动图保持旧 rev);浏览器 也可能在旧 URL 下缓存旧 bundle。重装 host 代码后请**重启实例**,并硬刷新一次 浏览器;管理器标签页能容忍错配窗口(对缺失的行状态做了防御)。 - **in-box 的"插件清单"标签页是即时快照**。它在首次挂载时拉取一次 Loader 快照,之后保持挂载(隐藏),因此不会反映在"插件管理"里做的热生命周期变更 ——需要刷新页面。管理器标签页本身是实时的(每次操作后自动重拉,并有手动 刷新按钮)。
