Overview
@kyorakuyk/dsh-plugin-manager
README / EN
Package documentation
Registry summary
dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.
Read the full README on GitHubLIMITATIONS
Known limitations
- **远程信任**:`/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 快照,之后保持挂载(隐藏),因此不会反映在"插件管理"里做的热生命周期变更 ——需要刷新页面。管理器标签页本身是实时的(每次操作后自动重拉,并有手动 刷新按钮)。
