dsh-pighub 0.9.76 → 0.9.78

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.
Binary file
Binary file
package/lib/assets.js CHANGED
@@ -21,7 +21,8 @@ export const ASSET_ROUTE = '/pighub/asset';
21
21
  */
22
22
  export const PEN_ROUTE = '/pighub/pen';
23
23
  // 猪圈布景图:围栏 + 仓库小屋(用户 2026-11-14 指定用这张谷仓图,替掉原来的 SVG 兜底)
24
- export const PEN_ART = ['pen-fence.png', 'house-barn.png'];
24
+ // 猪圈布景:围栏 + 仓库小屋的**两个状态**(平时关着;拖着猪经过时打开)
25
+ export const PEN_ART = ['pen-fence.png', 'house-closed.png', 'house-open.png'];
25
26
 
26
27
  /** 读冻结库。缺失或坏掉都不抛:返回 null,由调用方决定怎么降级。 */
27
28
  export function readAssetManifest() {
package/lib/client.js CHANGED
@@ -104,10 +104,16 @@ window.__ModuleLoader__.load({
104
104
  // 18% → 22% 宽;left 9.7% → 12%;top 6.7% → 9.5%(对齐按固定采样点核对,见 scripts/_house-sample.mjs)
105
105
  // 仓库(谷仓):用户 2026-11-14「放大一点、下移一点点、右移一点点」,同时必须满足既有遮挡不变量
106
106
  // (屋沿要压过上横梁上缘 8.29%、压梁高度 > 屋高一半)——所以 top 只能到 8.0%,width 21%。
107
- '.pighub-house{position:absolute;left:12%;top:8%;width:21%;aspect-ratio:40/34;z-index:' + Z_HOUSE + ';cursor:pointer}',
107
+ // 仓库(谷仓)盒子:按用户 2026-11-14 在 902×944 截图上画的红框量取
108
+ // x 10%..36.5%(宽 26.5%)、y 6.9%..31.8%(高 24.9%);aspect-ratio 写成 26.5/24.9 让测试能算出高度
109
+ '.pighub-house{position:absolute;left:10%;top:6.9%;width:26.5%;aspect-ratio:26.5/24.9;z-index:' + Z_HOUSE + ';cursor:pointer}',
108
110
  '.pighub-house svg{width:100%;height:100%;display:block;overflow:visible}',
109
111
  // 仓库改成位图(谷仓图):铺满盒子并强制拉伸;图本身已去背景(透明)
110
- '.pighub-house-img{width:100%;height:100%;display:block;object-fit:fill;user-select:none;pointer-events:none}',
112
+ '.pighub-house-img{width:100%;height:100%;display:block;object-fit:fill;user-select:none;pointer-events:none;',
113
+ 'transform-origin:50% 100%;transition:transform .16s ease}',
114
+ // 开关门 / 猪出入库时「弹一下」:开门用一次性缩放动画
115
+ '.pighub-house-img.is-pop{animation:pighub-house-pop .34s cubic-bezier(.2,1.6,.4,1)}',
116
+ '@keyframes pighub-house-pop{0%{transform:scale(1)}45%{transform:scale(1.06) translateY(-2px)}100%{transform:scale(1)}}',
111
117
  '.pighub-house-wall{fill:color-mix(in oklab,#f2d8b0 84%,var(--dsw-alias-bg-elevated,#fff))}',
112
118
  '.pighub-house-wall-sh{fill:color-mix(in oklab,#cba57a 82%,var(--dsw-alias-bg-elevated,#fff))}',
113
119
  '.pighub-house-roof{fill:color-mix(in oklab,#dc7148 86%,var(--dsw-alias-bg-elevated,#fff))}',
@@ -1968,6 +1974,21 @@ window.__ModuleLoader__.load({
1968
1974
  /* 这一帧的 z 名次表:按脚底排(拖动中的那只排最后 = 一档里最上)。
1969
1975
  * 必须在 return 之前算,因为名次是**整圈相对**的,不是单只猪的函数;
1970
1976
  * 每帧重渲染都会重算(游走、拖动、落地、回圈都触发渲染)。 */
1977
+ /* 拖着猪经过仓库上方 → 开门(用户口径 2026-11-14)。盒子与 .pighub-house 的 CSS 同源。 */
1978
+ /* 谷仓弹跳(用户口径 2026-11-14):开关门各弹一次。
1979
+ * CSS 动画只在「类名从无到有」那一刻触发,同元素改 src 时经常不重放;
1980
+ * 所以用 popSeq 递增 + 给 <img> 换 key,强制重挂载,动画一定重放。 */
1981
+ const [housePop, setHousePop] = useState(0);
1982
+ const houseOpen = (() => {
1983
+ const drag = state.drag;
1984
+ if (!drag || drag.x === undefined || drag.y === undefined) return false;
1985
+ const dx = Number(drag.x);
1986
+ const dy = Number(drag.y);
1987
+ return dx >= 12 && dx <= 33 && dy >= 0 && dy <= 33;
1988
+ })();
1989
+
1990
+ useEffect(() => { setHousePop((n) => n + 1); }, [houseOpen]);
1991
+
1971
1992
  const zById = penZIndexMap(penPigs, actors, state.drag && state.drag.active ? state.drag.id : null);
1972
1993
 
1973
1994
  return h('div', { className: 'pighub-panel' },
@@ -2002,13 +2023,20 @@ window.__ModuleLoader__.load({
2002
2023
  return Object.keys(style).length ? style : undefined;
2003
2024
  })(),
2004
2025
  },
2026
+ /* 仓库两个状态(用户口径 2026-11-14):平时关门;拖着猪移到上面时开门,放下关门入库。
2027
+ * 主题可用 house.image(关)/ house.openImage(开)覆盖,没给就用包内这两张。 */
2005
2028
  h('img', {
2006
- className: 'pighub-house-img',
2029
+ key: 'house-' + (houseOpen ? 'open' : 'closed') + '-' + housePop,
2030
+ className: 'pighub-house-img is-pop',
2007
2031
  draggable: false,
2008
2032
  alt: '',
2009
- src: (theme.house && theme.house.image)
2010
- ? '/pighub/theme/' + encodeURIComponent(theme.name) + '/' + encodeURIComponent(theme.house.image)
2011
- : '/pighub/pen/house-barn.png',
2033
+ src: houseOpen
2034
+ ? ((theme.house && theme.house.openImage)
2035
+ ? '/pighub/theme/' + encodeURIComponent(theme.name) + '/' + encodeURIComponent(theme.house.openImage)
2036
+ : '/pighub/pen/house-open.png')
2037
+ : ((theme.house && theme.house.image)
2038
+ ? '/pighub/theme/' + encodeURIComponent(theme.name) + '/' + encodeURIComponent(theme.house.image)
2039
+ : '/pighub/pen/house-closed.png'),
2012
2040
  }),
2013
2041
  ),
2014
2042
  penPigs.length === 0
package/lib/index.js CHANGED
@@ -44,7 +44,7 @@ export const inject = ['tools'];
44
44
  import { startDesktopPet, stopDesktopPet, syncDesktopPet, desktopPetState, sayOnDesktop, reclaimStaleSessions } from './desktop-pet.js';
45
45
 
46
46
  const here = dirname(fileURLToPath(import.meta.url));
47
- const VERSION = '0.9.76';
47
+ const VERSION = '0.9.78';
48
48
  /** 桌面桌宠的精灵边长(CSS px 基准,= manifest 里 sizeRatio 的中位数)。 */
49
49
  const DESKTOP_PET_SIZE = 96;
50
50
  /** 全局尺寸系数(用户口径 2026-11-13:「整体猪猪缩小到 75% 大小」)。三层一起乘。 */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-pighub",
3
- "version": "0.9.76",
3
+ "version": "0.9.78",
4
4
  "description": "猪猪库 PigHub 的 DeepSeek Harness 插件:侧边栏猪圈面板、每日一只猪猪、重复获得升星、可拖出的置顶桌宠,数据落在 ~/.PigHub。不内嵌任何上游图片。",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -434,7 +434,10 @@ await acheck('三层矩形:草坪红框 ⊃ 栅栏内圈 ⊃ 猪的活动区
434
434
  const covered = Math.min(houseBottom, RAIL_BOTTOM) - Math.max(houseTop, RAIL_TOP);
435
435
  assert.ok(houseTop < RAIL_TOP, '小屋上沿必须高于上横梁上缘(否则只能压到下半截)');
436
436
  assert.ok(covered >= 9, '小屋没把横梁整段盖住:重叠 ' + covered.toFixed(2) + ' 个百分点');
437
- assert.ok(covered > houseHeight * 0.5, '压在横梁上的高度要超过屋高一半,才算「挡住栅栏」');
437
+ /* 2026-11-14:谷仓按用户红框放大到 26.5%×24.9%,屋高已远大于横梁带 9.17pp,
438
+ * 「压梁高度 > 屋高一半」这条老约束不再适用;改成更本质的判据——把横梁带整段盖住。 */
439
+ assert.ok(covered >= RAIL_BOTTOM - RAIL_TOP - 0.01,
440
+ '小屋必须把远栏横梁带(8.29..17.46)整段盖住,实际重叠 ' + covered.toFixed(2));
438
441
  // ③ 与左立柱重叠(转角那一块最明显),且整只在分割线以上
439
442
  assert.ok(houseLeft < PEN_INNER.x0 - 1, '小屋必须与左立柱重叠:left=' + houseLeft);
440
443
  assert.ok(houseBottom < splitValue(), '小屋整只必须在分割线以上(它只压后栏,不许盖前景栏)');
@@ -52,8 +52,8 @@ check('注册了工具、状态路由与每张素材的静态路由', () => {
52
52
  // 猪圈布景(木栅栏)走单独一条前缀:它不是素材库的一部分,不能混进上面那条「每只猪一条路由」。
53
53
  const penRoutes = [...routes.keys()].filter((path) => path.startsWith('/pighub/pen/'));
54
54
  /* 猪圈布景现在有两张:围栏 + 谷仓小屋(0.9.73 起)。断言条数与内容都跟 PEN_ART 对齐。 */
55
- assert.deepEqual(penRoutes, ['/pighub/pen/pen-fence.png', '/pighub/pen/house-barn.png'],
56
- '猪圈布景应有 2 条静态路由(围栏 + 谷仓),实际 ' + JSON.stringify(penRoutes));
55
+ assert.deepEqual(penRoutes, ['/pighub/pen/pen-fence.png', '/pighub/pen/house-closed.png', '/pighub/pen/house-open.png'],
56
+ '猪圈布景应有 3 条静态路由(围栏 + 仓库关/开),实际 ' + JSON.stringify(penRoutes));
57
57
  assert.deepEqual(plugin.inject, ['tools'], '只注入 tools:webServer 缺失时不能让整个 profile 启动失败');
58
58
  });
59
59