chore(web): 降级留痕 + 收尾 —— 静默失效改为可观测;picker 升 0.1.5 消漂移(档案 88 / T07)

- 【留痕】model-catalog 读不到目录:console.warn(每进程一次)+ 新增 catalogDiagnostics(),并把结果透出到 GET /api/me/model-providers 的 catalog 字段;plugin-compat 的 platformPkgCount()=0 同样告警一次 ⇒「功能没做」与「做了但读不到目录」从此**可区分**(这正是那个 P1 长期潜伏的原因)
- 【前端】插件 0.3.13:厂家目录不可读 / 为空时**如实提示**(含目录路径),不再静默给空列表
- 【消漂移】poc/workspace-scoped-picker 升 0.1.5 并重打包铺发 —— 两实例已装 0.1.5 且含按序探测的新代码(此前只改了源码、线上还是旧候选)
- 【文档】README 补 DSHS_PACKAGE_DIR / DSHS_COMPAT_ROOT / DSHS_PI_AI_DATA_DIR(逃生口此前**未在任何地方暴露**)
- 【回归】verify-dsh-install 扩到 6 组(含「读不到 ≠ 目录为空」的区分);verify-platform-admin-section 加 2 条断言(词典 284/284)
- 真环境回归:picker 在 /usr/local 仍 import OK(没把本来能用的改坏)|providers 39(端点回 38)|platformPkgCount 223
This commit is contained in:
admin committed 2026-09-14 04:52:35 +08:00
1 parent cbaf3ad653
commit 1d72e8f9c8
9 files changed
+127 -6

No files matched your search

+13
View File
@@ -72,11 +72,24 @@ function platformPkgDir(pkg: string): string {
return join(dshScopeDir(), shortName(pkg))
}
/** 是否已经就「平台包目录不可读」告过一次警(避免刷日志)。 */
let warnedScopeUnreadable = false
/** 平台内置 @deepseek-ai 包的数量(目录级,低成本)。 */
export function platformPkgCount(): number {
try {
return readdirSync(dshScopeDir()).filter((n) => !n.startsWith('.')).length
} catch {
// ⚠️ 这里**不能只返回 0**:调用方会把它当成"没有平台包"⇒ 预检直接退化成
// 「平台包目录不可读」——**安全网静默失效**(上传不兼容插件不再被拦)。
// 2026-09-14:加一次告警,让"读不到"这件事可观测(见 `04-调整方案/88`)。
if (!warnedScopeUnreadable) {
warnedScopeUnreadable = true
console.warn(
`[plugin-compat] 平台包目录不可读:${dshScopeDir()} —— 插件兼容性预检将退化为「不检查」。` +
' 检查 DSHS_DSH_BIN / DSH_COMPAT_ROOT 是否正确(见 src/web/dsh-install.ts)。',
)
}
return 0
}
}