dsh-scout 0.9.2 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,7 +16,7 @@
16
16
 
17
17
  0.9.1 明确不做的事见 [CHANGELOG](../CHANGELOG.md):client 面板、自造 session event、`ctx.storageDomain` 持久化重写、评分与排名(0.9.2 沿用同一非目标)。
18
18
 
19
- **v0.9.2(当前版本)**是收口版本:把 0.9.1 验证报告点名的最大盲区(U11)补成真实宿主门禁,并清掉三轮独立验证留下的文档税。本版本**不新增工具、不新增命令、不新增 Skill 条目**:
19
+ **v0.9.2**是收口版本:把 0.9.1 验证报告点名的最大盲区(U11)补成真实宿主门禁,并清掉三轮独立验证留下的文档税。本版本**不新增工具、不新增命令、不新增 Skill 条目**:
20
20
 
21
21
  - **F2 · 真实宿主端到端门禁(关闭 U11)**:`scripts/profile-smoke.mjs` 扩展为六步真实宿主场景链——创建 → 导出 → 冷重启 → 惰性回填 → 跨语言导入 → 卸载,另加完成标记「缺失 / `complete:false`」两条负向对照;四版本矩阵在扩展后的门禁下 4/4 通过。**仍未覆盖**:真实 LLM / agent loop 与 approval 策略、相对路径、`autoPersist`、真实进程中断,以及其余 6 个工具(仅断言注册)。
22
22
  - **F1 · 面试问题按下标逐条对齐(关闭 D10)**:精选面试问题由「整组 all-or-nothing」改为按下标逐条——长度与出厂数组相同时逐条替换,用户改过的那条保持原样;长度不同则整组原样保留。默认行为对**未编辑**场景零变化。
@@ -24,6 +24,10 @@
24
24
  - **F4 · 依赖对齐**:`@deepseek-ai/schemastery` 由 `^3.18.2` 改为 `~3.18.4`,与宿主系列一致;`peerDependencies` 与 `engines.dsh` 范围不变。
25
25
  - **已知边界 G1(有意不修,推迟 0.10.0)**:冷启动惰性回填会把决策理由措辞由初始文案换成 `decisionReasons.identity`(并补 `decisionReasonCode`),`decision` 不变;详见 [0.9.2 门禁发现](dsh-scout-0.9.2-gate-findings.md)(仓库文档,不在 npm 包内)。
26
26
 
27
+ **v0.9.4(当前版本)**的主题是**真实宿主可用 + 报告可读**:修复桌面 App 下导出写不进会话工作区的 P0(受限 fs 后端需要 per-call 沙箱策略),`identityStatus` 增加 `corroborated` 档并记录逐字段 provenance,`report.md` 重构为按决策阶段组织的可读结构(正文不再出现 E0–E3 与 source id)。安装模型、分发源取舍与兼容性豁免仍见 §5.3;桌面路径的手工验收见 [安装验收 checklist](install-verification.md)(仓库文档,不在 npm 包内)。本版本**不新增工具、命令或 Skill 条目**。
28
+
29
+ **v0.9.3** 不改运行时契约,主题是**安装体验**:此前 README 的三条「已验证路径」全是 `dsh plugin --profile <name> add …`,而桌面 App 的 `desktop` profile 被 Electron 应用独占,桌面用户第一步就撞墙——0.9.3 把「App 内安装」写成主路径,并给安装补上可执行判据。安装模型、分发源取舍与兼容性豁免见 §5.3;桌面路径的手工验收见 [安装验收 checklist](install-verification.md)(仓库文档,不在 npm 包内);评审原件见 [安装评审](dsh-scout-install-ux-review.md)(同上)。本版本**不新增工具、命令或 Skill 条目**。
30
+
27
31
  ## 1. 产品承诺
28
32
 
29
33
  给定一个公司和一个岗位,`dsh-scout` 不承诺“找到所有信息”,而承诺在证据边界内回答:
@@ -123,6 +127,23 @@ scout-cases/<case-id>/
123
127
 
124
128
  > 一句话规则:**不要自造 session event。** 用户显式动作走 `command/run` + `command/done`,结构化 UI 载荷走 `output.presentationMeta` → `tool/result.meta`,持久状态走 `ctx.storageDomain`。
125
129
 
130
+ ### 5.3 安装与分发模型(0.9.3)
131
+
132
+ 两条入口,安装方式不同,不要混用:
133
+
134
+ | 你在哪运行 | 目标 profile | 安装方式 |
135
+ | --- | --- | --- |
136
+ | 桌面 App(DeepSeek Harness) | `desktop` | **侧边栏 → 插件页**(唯一路径) |
137
+ | CLI / headless / 自建 profile | 你自己的 profile 名 | `dsh plugin --profile <your-profile> add dsh-scout@<exact-version>` |
138
+
139
+ - **`desktop` 由应用独占**:CLI 对它的**所有** `dsh plugin` 子命令都在参数解析层按 profile 名拒绝(`rejectElectronProfile`,`error: profile "desktop" is managed exclusively by the Electron application`),连兼容性逃生门 `allow-version` 一起拒绝。所以桌面场景既没有 CLI 判据,也没有可脚本化的自动化门禁——这正是 0.9.2 及以前的门禁盲区。
140
+ - **spec 一律写精确版本**:pnpm ≥ 11 默认启用最小发布年龄(minimum release age)供应链保护,裸包名会把刚发布的版本静默跳过、回退到旧版;写精确版本后 pnpm 会把它记入 profile 的 `minimumReleaseAgeExclude`。
141
+ - **分发源与代价**:npm(自带 `dist/`,不跑安装脚本,**推荐**)、本地 tarball(离线 / 自测)、git(仓库不含 `dist/`,`prepare` 会跑 `tsc` 并安装 devDependencies——**不推荐**,只在需要未发布提交时使用,ref 写真实 tag 如 `#v0.9.4`)。git 是唯一会执行代码的路径。
142
+ - **Node 适用范围**:`engines.node >= 22.19` 只对 CLI / 门禁路径成立;桌面 App 自带运行时(实测 node 24.21.0 + pnpm 11.7.0),无需安装 Node。
143
+ - **成功判据与排障面(两个 GUI 面,别混)**:**侧边栏 → 插件页**是**管理面**,回答「装的是哪版」——`dsh-scout` 在「已安装」里,**详情页**标题旁带 `v{version}`(`BundleInfo.version`),安装 / 启用 / 停用 / 移除都在这里;**设置 → 内置插件 → 插件列表**是**只读检查面**,回答「装没装 / 为什么没生效」——该行**已启用 + 运行中**(不是**已停用** / **启动失败** / **条件启用**),按「会话插件 / 全局插件」分组,**不显示版本号**(wire 行只有 `{ entryId, moduleName, meta?, enabled, fiberPhase }`)。再加上新开一轮对话是否出现 12 个 `scout_*` 工具、`/scout status <caseId>` 是否命中且输出末尾带 `· dsh-scout <version>`。CLI 的 `--dump-config` 只证明「组合进去了」,**不等于**运行时挂上了——不匹配时插件行被置为 disabled,且**这一行只对 CLI 用户可见**(stderr 打 `dsh: disabling profile plugin <row>: <reason>`)。桌面 App 没有可见 stderr、没有运行日志(实测 Electron 主进程的 fd0/fd1/fd2 指向 `/dev/null`,日志目录为空),插件被 disabled 时它自己不可能输出任何东西——但**答案就在 GUI 里**:启动时被禁用的行会被投影成插件列表里的「已停用」(宿主侧 `enabled: !entry.disabled`,`dsh-host-plugin-inventory/lib/index.js:131`),所以插件列表是桌面唯一的排障入口。
144
+ - **版本豁免(桌面手动路径)**:桌面用户用不了 `allow-version`,需要在 `~/.dsh/profiles/desktop/compatibility.json` 手写豁免——平铺 JSON:精确 `package@version` → 允许的精确 DSH 版本数组,例如 `{ "dsh-scout@0.9.4": ["0.2.1-rc.5"] }`。与工具 / CLI 写入的是同一组边界:只接受精确版本、只授权「这一个包版本 + 这一个 DSH 版本」这一对、不随升级继承、不授权依赖安装脚本、下一次组合生效;手写绕过 `acceptRisk` 风险确认,写法不合规的记录会被忽略并告警(不会让 profile 不可用)。
145
+ - **验收**:桌面路径由发版前手工 checklist 覆盖(`docs/install-verification.md`:Lane D 桌面 App / Lane C CLI,含两条 lane 的差异与触发时机,仓库文档、不在 npm 包内);CLI 自动化仍是 `npm run test:profile` 的六步链与 `npm run check:release` 的四版本矩阵。
146
+
126
147
  ## 6. 明确非目标
127
148
 
128
149
  - 不重做通用搜索、浏览器或 MCP provider。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-scout",
3
- "version": "0.9.2",
3
+ "version": "0.9.4",
4
4
  "description": "Evidence-driven company and job intelligence plugin for DeepSeek Harness.",
5
5
  "icon": "./assets/icon.svg",
6
6
  "license": "MIT",
@@ -22,8 +22,10 @@
22
22
  "cordis.patch.yml",
23
23
  "locale",
24
24
  "assets",
25
+ "scripts/acceptance-report.mjs",
25
26
  "scripts/check-release.mjs",
26
27
  "scripts/profile-smoke.mjs",
28
+ "scripts/smoke-tool-call.mjs",
27
29
  "README.md",
28
30
  "LICENSE",
29
31
  "docs/dsh-scout-product-contract.md",
@@ -40,6 +42,7 @@
40
42
  "test": "npm run build && node --test tests/*.test.mjs",
41
43
  "check": "npm test",
42
44
  "test:profile": "node scripts/profile-smoke.mjs",
45
+ "test:acceptance": "npm run build && node scripts/acceptance-report.mjs",
43
46
  "check:release": "node scripts/check-release.mjs",
44
47
  "prepare": "npm run build"
45
48
  },