@kira905/dsh-butler-panel 0.9.4 → 0.9.6

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.
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
  > npm i @kira905/dsh-butler-panel
18
18
  > # 或者装进某个 profile 后重启 dsh,侧边栏底部会多一个「大管家」入口
19
19
  > ```
20
- > 装完**先设一个变量**告诉它你的大管家在哪(见下一节)——不设也能起来,但大部分卡片会显示「不可用」。
20
+ > 装完**先设一个变量**告诉它你的大管家在哪(见下一节)——不设也能起来,但大部分卡片会显示「不可探测」。
21
21
 
22
22
  > ### 它不附带什么(先看清楚,省得装完失望)
23
23
  >
@@ -61,10 +61,10 @@ npm i -g @kira905/dsh-butler-engine
61
61
  $env:DSH_WORKSPACE = '<你的工作区>'
62
62
  ```
63
63
 
64
- **接不上会怎样**:面板不会崩。缺的那几段退化成「不可用」,并在控制台留一行**告诉你怎么补**:
64
+ **接不上会怎样**:面板不会崩。缺的那几段退化成「不可探测」,并在控制台留一行**告诉你怎么补**:
65
65
 
66
66
  ```
67
- [butler-panel] 缺 store.mjs:装 npm i -g @kira905/dsh-butler-engine@^0.5.0,或设 BUTLER_ROOT=<你的大管家工具目录>
67
+ [butler-panel] 缺 store.mjs:装 npm i -g @kira905/dsh-butler-engine@^0.5.0,或设 BUTLER_ROOT=<你的大管家工具目录>,或设 DSH_WORKSPACE=<你的 DSH 工作区(tools/ 与 docs/ 所在那层)>
68
68
  ```
69
69
 
70
70
  (那行里的版本号是读**装在盘上的包**得来的,不是写死的;包完全没装时就不带版本号。)
@@ -173,7 +173,11 @@ export function butlerLibHit(name) {
173
173
  export function guidanceFor(name) {
174
174
  const v = engineVersion()
175
175
  const install = v ? `npm i -g ${ENGINE_PKG}@^${v}` : `npm i -g ${ENGINE_PKG}`
176
- return `缺 ${name}:装 ${install},或设 BUTLER_ROOT=<你的大管家工具目录>`
176
+ // 出路按 README 变量表的**顺位**给全:① 装可安装的包 ② 显式 BUTLER_ROOT ③ DSH_WORKSPACE(工作区根,
177
+ // 解析 `<工作区>/tools/dsh-butler/lib` 的第一顺位)。0.9.6 补 ③:原来只给前两条,用户把
178
+ // DSH_WORKSPACE 指错时,这条日志对着他"工作区"这件事一个字都没提。
179
+ return `缺 ${name}:装 ${install},或设 BUTLER_ROOT=<你的大管家工具目录>,`
180
+ + `或设 DSH_WORKSPACE=<你的 DSH 工作区(tools/ 与 docs/ 所在那层)>`
177
181
  }
178
182
 
179
183
  function unavailableStub(name) {
package/lib/client.js CHANGED
@@ -15,7 +15,13 @@
15
15
  // 前缀 hack;拿不到 slots/React 时自动回落旧 self-heal 注入路径(规范 docs\侧边栏UI按钮对齐规范.md)。
16
16
  // 跳转为实验特性(主包 sessionRow 行 React onClick 模拟点击),失败降级复制会话 id。
17
17
  window.__ModuleLoader__.load({
18
- id: "dsh-butler-panel",
18
+ // 🔴【0.9.5 · 2026-11-09】这里的 id 必须是 **package.json#name**(带 scope)。
19
+ // 客户端模块表按这个 id 登记,而宿主的 boot graph 行 id 也来自包的真名 ——
20
+ // 写成不带 scope 的 "dsh-butler-panel" 会对不上行 id,宿主直接报
21
+ // `…/client.js already executed without registering "@kira905/dsh-butler-panel"`
22
+ // 然后**整个桌面版起不来**(2026-11-09 A-8 关 4 真机实测那份崩溃弹窗)。
23
+ // 同一个病根在本包一共三处:挂载条目 name、这句 id、require 适配层的名字。
24
+ id: "@kira905/dsh-butler-panel",
19
25
  factory: (require) => {
20
26
  var module = { exports: {} };
21
27
  var exports = module.exports;
@@ -1203,11 +1209,27 @@ function makePanelUI(cfg) {
1203
1209
  zone.appendChild(groupTitle("🛑 模块开关(熔断 · L2)"));
1204
1210
  const rows = mm.modules ?? [];
1205
1211
  if (!rows.length) {
1206
- zone.appendChild(healthCard("🛑 模块开关", "不可用", "h-gray", [
1207
- ["状态", "读取失败:" + (mm.error ?? mm.reason ?? "未知")],
1208
- ["常见原因", "面板刚部署但 dsh 还没重启(GET /modules 返回 404)→ 重启后本卡自动恢复"],
1209
- ["兜底", "关/开也可用 CLI:node <大管家目录>/butler-autonomy-cli.mjs module list"]
1210
- ]));
1212
+ // 【0.9.6 · 2026-11-09】归因必须**拆两句**:`Cannot find module …` ≠ `GET /modules 返回 404`。
1213
+ // 前者 = **工作区 / 大管家目录指错**(DSH_WORKSPACE 或 BUTLER_ROOT 没指到那棵树),
1214
+ // 后者才是"面板刚部署但 dsh 还没重启"。0.9.5 及以前把两种混成一句"面板刚部署还没重启"⇒
1215
+ // 接口其实回了 200、只是 body 里是 Cannot find module,照那句话去重启 = 白折腾一轮。
1216
+ // 兜底同理:只给"装 engine 包 + 设 BUTLER_ROOT"漏掉了 README 变量表里第一顺位的 DSH_WORKSPACE。
1217
+ const errText = String(mm.error ?? mm.reason ?? "未知");
1218
+ const is404 = /\b404\b/.test(errText) && !/Cannot find module/i.test(errText);
1219
+ // 实际去找的那个路径(Node 的 ERR_MODULE_NOT_FOUND 消息自带)—— 有就并排显示,没有就退成库文件名
1220
+ const missPath = (errText.match(/Cannot find module\s*['"]([^'"]+)['"]/i) ?? [])[1] ?? null;
1221
+ const lines = [["状态", "读取失败:" + errText]];
1222
+ if (is404) {
1223
+ lines.push(["常见原因", "面板刚部署但 dsh 还没重启(GET /modules 返回 404)→ 重启后本卡自动恢复"]);
1224
+ } else {
1225
+ lines.push(["常见原因", "找不到 " + (missPath ?? "大管家共享库(autonomy-modules.mjs)") + ":多为工作区或大管家目录指错"]);
1226
+ lines.push(["工作区", "DSH_WORKSPACE=<你的 DSH 工作区(tools/ 与 docs/ 所在那层)>"
1227
+ + (missPath ? ",当前按此解析到 " + missPath : "")]);
1228
+ lines.push(["或", "BUTLER_ROOT=<大管家工具目录(即 <工作区>/tools/dsh-butler 那层)>"]);
1229
+ lines.push(["生效", "改完需重启 DSH 才生效"]);
1230
+ }
1231
+ lines.push(["兜底", "关/开也可用 CLI:node <大管家目录>/butler-autonomy-cli.mjs module list"]);
1232
+ zone.appendChild(healthCard("🛑 模块开关", "不可用", "h-gray", lines));
1211
1233
  return zone;
1212
1234
  }
1213
1235
  const off = rows.filter((x) => x.enabled !== true);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kira905/dsh-butler-panel",
3
- "version": "0.9.4",
3
+ "version": "0.9.6",
4
4
  "description": "大管家的可视化面板:在 DSH 侧边栏看今天该看什么(结论 / 待处理 / 资产 / 流水 / 健康),只读为主;另带 P5 写入守门人(可挂可摘)。",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",