Skip to content

install-local 的 POST 响应不带 storageDir(GET 列表带),CLI 只能靠字面量描述远端账本目录 #6721

Description

@os-project-manager

#6643 核验 packages/cli/src/commands/package/install.ts 那句 post-install 提示时量到的上游事实,按 PD #10 单列,不在 #6643 的 PR 内顺手扩(该卡显式圈定不动 @objectstack/cloud-connection)。

事实

MarketplaceInstallLocalPlugin 的两个端点对「账本目录在哪」这件事口径不一致:

  • GET /api/v1/marketplace/install-local(console 的 Installed Apps 列表)真实解析值 —— packages/cloud-connection/src/marketplace-install-local-plugin.ts L765:storageDir: this.storageDir
  • POST /api/v1/marketplace/install-local(安装)不带。其 data 只有 { manifestId, version, versionId, installedAt, hotLoaded, upgradedFrom, translationsLoaded, seeded, note }(同文件 L723-735)。

this.storageDir 本身是真实解析过的:构造函数 new LocalManifestSource(config.storageDir)(L157),this.storageDir = this.ledger.dir(L158)—— 即宿主真配了就用配的,没配才落到 DEFAULT_INSTALLED_PACKAGES_DIR

后果

os package install 成功后打印的这句:

  The manifest is cached under .objectstack/installed-packages/ on the
  runtime host and re-registers on every boot (survives restarts).

描述的是远端 runtime 主机的目录,而 CLI 手里没有任何可引用的解析值 —— 刚读完的那个响应就没有。于是只能写字面量,而这个字面量在宿主配了 storageDir是错的(不是「将来可能失真」,是当下就失真)。#6643 把这处按「描述性文案」注明保留,正是因为除了本 issue 说的上游补齐之外,别的修法都更差:本地静态引用常量会让一条纯 HTTP 命令在该包缺失时加载即失败,动态引用则需要一个字面量兜底 —— 即 PD #12 禁止、#5996 刚删掉的那个 ??

可选修法

POST 响应的 data 补上 storageDir: this.storageDir,与 GET 侧对齐;CLI 随后即可引用真实远端目录,字面量连同 #6643 留下的那段注释一起删掉。

判级

观察类:今天没有用户会因此报错,只有配了非默认 storageDir 的自托管宿主会读到一句指错路径的提示。不带 pm:queue,留给 triage 定级。


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions