dsh-wisp 1.25.1 → 1.27.0

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
@@ -404,6 +404,13 @@ node tools/audit-log.mjs --confirm <manifest> # 生成后:并入代理登
404
404
  - **宿主半包**跑在 **vm 沙箱**里:`harness` 只有 `defineTool / registerTool / handle`,
405
405
  沙箱里还有 `nodeApiTraps()` 把 Node API 全挡了,允许的 `ctx` 动词白名单里**没有网络与文件系统**。
406
406
 
407
+ **为什么要读两个源(npm + GitHub)取更高版本**:npm 的注册表是权威源,但发布可能长时间卡在它的
408
+ **暂存区**里 —— 实测:`PUT 202`(已受理)之后等了 18 分钟,注册表和 tarball **仍然 404**,
409
+ 而同版本号重发被拒(`409 Cannot publish over previously staged version`);
410
+ 同期 GitHub 的 `package.json` 是**立刻**更新的。
411
+ 所以检查同时读两个源、**取版本号更高的那个** —— 这样无论 npm 有没有追上都是对的。
412
+ 「npm 优先、GitHub 兜底」在这里是错的 ✗:它会读到 npm 那个旧号,然后告诉你"已经是最新的"。
413
+
407
414
  所以网络只能走**服务**:宿主半包 `inject: { optional: ['web'] }`,用 `ctx.web.fetch(...)` 抓远端
408
415
  `package.json`,再用 `harness.handle('checkUpdate', …)` 注册;浏览器半包 `host.call('checkUpdate')` 调。
409
416
  **客户端那边一点网络都没碰** —— `fetch` 陷阱原样留着。
@@ -441,6 +448,58 @@ node tools/audit-log.mjs --confirm <manifest> # 生成后:并入代理登
441
448
 
442
449
  ## 变更
443
450
 
451
+ ### 1.27.0
452
+
453
+ - **第八个情绪 `eat`:干饭。** 五套皮肤各一张,双手捧着一碗白米饭,眯眼笑。
454
+
455
+ 这是社区设定里最像"她"的一条 —— **白米饭是算力的唯一硬通货**。台词照这个底色写了 12 句
456
+ (白米饭才是硬通货 / 先干一碗再想复杂的事 / 才不是特意帮你,只是吃饱了顺手活动一下手指 /
457
+ 算力不够了得补点碳水 / 这碗不算加餐,算基础设施 / 吃饱了才有力气摸鱼 …)。
458
+
459
+ - **行为:她饿了会说。** 连续活动满 `hungerMs`(默认 **45 分钟**)就捧碗出来说一句,
460
+ 5.2 秒后自己回去。判据和久坐提醒共用同一套"还在动"的判定,但含义相反 ——
461
+ 久坐是提醒**你**起来,干饭是提醒**她自己**补碳。
462
+
463
+ - 计时基准取 `max(lastMealAt, activeSince)`:**离开很久回来之后不会一进门就喊饿**
464
+ (那一段已经结束了,该从零开始算);
465
+ - 不连着说:一顿之后要再过一整个间隔;
466
+ - 两种关法:`hungerMs: 0`,或菜单里新增的「**饿了会说话**」开关(`hungry: false`);
467
+ - `doctor().hunger` 报告 `{ enabled, everyMs, lastMealAt }` ——
468
+ 不用猜"她为什么突然捧碗"。
469
+
470
+ - 情绪数 7 → **8**,素材 35 → **40 张**;菜单 18 → **19 项**(固定 13 → 14)。
471
+ 预检 383 → **400 项**。
472
+
473
+ 吃过的坑记一笔:新加的测试踩了两次同样的 TDZ(用了文件后半部分才定义的
474
+ `ctxEvent` / `rightClickOnHer`),以及把 harness 的 `el.dispatch()` 写成了浏览器的
475
+ `el.dispatchEvent()`;还有一条是"上一步结束时她还在吃"被误判成"关不掉" ——
476
+ 和久坐那节一样,收尾要先推进一段让瞬时状态结束。
477
+
478
+ ### 1.26.0
479
+
480
+ ### 1.26.0
481
+
482
+ - **检查更新改为同时读两个源,取版本号更高的那个**(npm 注册表 + GitHub 的 package.json)。
483
+
484
+ 起因是这次发布踩到的事:`npm publish` 返回 `PUT 202`(已受理)却**长时间不进注册表** ——
485
+ 等了 18 分钟,`dsh-wisp/1.25.0` 与 tarball 都还是 404;同号重发被拒
486
+ (`409 Cannot publish over previously staged version`);npm 状态页一切正常。
487
+ 而 GitHub 上的 `package.json` 是立刻更新的。
488
+
489
+ 于是设计成**取更高版本**而不是「npm 优先、GitHub 兜底」:
490
+ 后者会读到 npm 那个旧号(当时是 0.6.0),然后告诉你「已经是最新的」✗。
491
+ 取更高则无论 npm 有没有追上都是对的 ✓
492
+
493
+ - 宿主半包:`readVersion()` 单源 → `readPublishedVersion()` 多源并发,返回
494
+ `{ ok, latest, from, sources }`;每个源的成败**分别上报**,一个挂了不影响另一个;
495
+ - 客户端:把 `from` / `sources` 一起记进 `doctor().update.lastCheck` ——
496
+ 两个源不一致时,「这个数字来自哪」比数字本身更需要能查;
497
+ - 预检 377 → **383 项**,含四种组合:两源一致 / npm 旧 GitHub 新 / npm 新 GitHub 旧 / 一个挂一个活。
498
+
499
+ - 上一版 1.25.1 只是换号重发(内容与 1.25.0 完全一致),代码无改动。
500
+
501
+ ### 1.25.1
502
+
444
503
  ### 1.25.0
445
504
 
446
505
  - **她真的会检查更新了。** 上一版只说"我做不到" —— 那一版没找对通道,这一版找到了:
Binary file
Binary file
Binary file
Binary file
Binary file
package/build.mjs CHANGED
@@ -45,7 +45,7 @@ const assetsDir = resolve(here, flagValue('--from', 'assets'))
45
45
  const templatePath = join(here, 'lib', 'client.template.js')
46
46
  const outPath = join(here, 'lib', 'client.js')
47
47
 
48
- const MOODS = ['idle', 'happy', 'sleepy', 'work', 'attn', 'poked', 'proud']
48
+ const MOODS = ['idle', 'happy', 'sleepy', 'work', 'attn', 'poked', 'proud', 'eat']
49
49
 
50
50
  /* 皮肤 = assets/ 下的一个子目录,里面是这套皮肤的 <mood>[_tier].webp。
51
51
  如果没有子目录含精灵图,就把 assets/ 本身当作一个名为 default 的皮肤 ——