dsh-feiyu-mood 0.8.1 → 0.8.3

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/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ ## 0.8.3 — 2026-10-31
2
+
3
+ **外面那个挂件开始跟着心情换形象(五档)**
4
+
5
+ - ✨ 以前挂件永远是同一张大肥鱼(也就是面板里「一般」那一档)。现在挂件本身按心情分五档换图:
6
+ **1 欢喜 / 2 开心 / 3 一般 / 4 心疼 / 5 难过** —— 阈值和面板里那张脸完全同一套
7
+ (≥80 / ≥62 / ≥42 / ≥25),两边不会对不上。
8
+ - 新增四张形象图 `feiyu-great.png`、`feiyu-good.png`、`feiyu-worry.png`、`feiyu-sad.png`
9
+ (1254×1254,和原来那张同画布、同角色尺寸、同落位,换档不会一大一小、也不会跳位置)。
10
+ **3 档继续用原来的 `feiyu.png`**,文件名不动 —— 老备份、老缓存都对得上。
11
+ - 五张在挂件初始化时各预加载一次,切档不会空一帧。
12
+ - 收起态(小鲸鱼那个形状)也跟着换 —— 它和展开态是同一张图。
13
+
14
+ ## 0.8.2 — 2026-10-30
15
+
16
+ **挂饰拖过之后,刷新会回到默认角落**
17
+
18
+ - 🐞 挂饰能拖,但位置只在本次页面里有效:按 F5 刷新又回到 CSS 里那个默认角落。
19
+ 「收起/展开」和「大小」都记在浏览器本地了,唯独位置没存 —— 拖过的人每次刷新都得再拖一遍。
20
+ - ✅ 拖动结束把左上角坐标存进 `localStorage`,启动时读回来。
21
+ - 只存 `left/top` 一套坐标:挂饰能拖到屏幕中间,这时 `right/bottom` 已经没有意义。
22
+ - 读回来先**夹进当前窗口**:窗口可能变小、屏幕可能换;而且收起态是 64px 小鲸鱼、
23
+ 大图还能放到 1.6 倍(288px),同一个坐标在不同形态下合法范围不一样。
24
+ - 改形态、拉大小滑杆、窗口 resize 时都重新夹一次并落盘。
25
+ - **没拖过的人完全不受影响**:不写 inline 的 `left/top`,CSS 的默认角落继续生效。
26
+ - 存档坏了(不是 JSON、字段不是数字、NaN)一律当没存过,回默认角落,不让挂饰消失。
27
+ - 自测:`node --check` 通过(这个改动只在浏览器端,没有 Node 侧测试)。
28
+
1
29
  ## 0.8.1 — 2026-10-30
2
30
 
3
31
  **「未分组」的会话选不到;子代理会话混进了下拉**
@@ -62,7 +90,7 @@
62
90
  **收起态那个心情数字会自己变了**
63
91
 
64
92
  - 🐞 右下角挂饰收起来以后,小圆里那个心情数字只有「点开面板」才会刷新一次,
65
- 收起状态就一直停在旧值(她报的「在外面只显示数字的那个不会实时更新」)。
93
+ 收起状态就一直停在旧值(在外面只显示数字的那个不会实时更新)。
66
94
  - ✅ 现在收起态也每 20 秒拉一次状态;页面重新可见时也补一次。
67
95
  - 自测:语法检查 + 25 项单测全过。
68
96
  ## 0.7.5 — 2026-10-27
@@ -117,7 +145,7 @@
117
145
 
118
146
  **自动触发的对话也记心情了(QQ 里发的、骰子投中的搭话)**
119
147
 
120
- - 🐛 她报的老 bug:在 QQ 里跟它说话、或者「主动搭话」自己冒出来的那一轮,心情**不记录**。
148
+ - 🐛 老 bug:在 QQ 里跟它说话、或者「主动搭话」自己冒出来的那一轮,心情**不记录**。
121
149
  - 🔍 真因:找「这一轮是谁在说话」时,最后一句写的是 `来源不是 user 就跳过` ——
122
150
  于是 QQ 桥转进来的话(`source.kind = 'qq'`)、鱼搭子挂件说的话(`'fishbuddy'`)**全被当成“别的插件的消息”丢掉**,
123
151
  这一轮找不到输入 → 直接不判心情。
package/LICENSE CHANGED
@@ -1,21 +1,50 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Yuuyuko-uu
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ Yuuyuko-uu 插件许可 1.2
2
+
3
+ 版权所有 (c) 2026 Yuuyuko-uu
4
+
5
+ ──────────────────────────────────────────────────────────────
6
+
7
+ 【为什么不用 MIT】
8
+
9
+ 2026 年 10 月,有人把我这几个插件(代码、README,还有我做的图)
10
+ 改名、去掉署名,在视频里说成「自研」发布。
11
+
12
+ 他没有违反 MIT —— MIT 只要求保留版权声明,不管「这是谁做的」。
13
+
14
+ 所以换成了这份许可。它只多要求一件事:
15
+ 你拿走的时候,说一声这是谁做的。
16
+
17
+ 安装、修改、商用,全都允许 —— 和 MIT 一样宽。
18
+
19
+ ──────────────────────────────────────────────────────────────
20
+
21
+ 一、允许,不需要另外问我
22
+
23
+ 1. 安装到自己的机器上使用,长期用,商用也行。
24
+ 2. 读源码、改源码、改成自己需要的版本(改给自己用,不必公开)。
25
+ 3. 把你的改动发给我(issue / PR);我采纳后,按仓库惯例记你的贡献。
26
+ 4. 在文章、视频、教程里介绍、演示、截图、引用本项目 —— 请附上原仓库地址。
27
+
28
+ 二、允许,但必须做到
29
+
30
+ 5. 再分发时(把代码或其实质性部分放进你自己的仓库、整合包、安装包,
31
+ 或者换一个包名发布),必须同时做到:
32
+ a) 完整保留本文件,不删、不改、不缩略;
33
+ b) 在 README 的第一屏写明:本项目派生自 <原仓库地址>,原作者 Yuuyuko-uu;
34
+ c) 说明你改了哪些部分。
35
+ 6. 公开的衍生作品必须继续使用本许可(或更严格的许可),不得改用更宽松的许可。
36
+
37
+ 三、禁止
38
+
39
+ 7. 不得把本项目的全部或实质性部分声称为你自己原创 ——
40
+ 包括在 README、发布说明、视频、插件市场条目里,
41
+ 把它写成「自研」「原创」「我写的」。
42
+ 8. 不得删除、替换、隐藏本项目的作者署名,
43
+ 包括 LICENSE、NOTICE、README、package.json 和源码注释里的。
44
+
45
+ 四、其他
46
+
47
+ 9. 本项目按「现状」提供,不附带任何明示或默示的担保。
48
+ 10. 违反第二、三条中任何一条,本许可立即终止;你还应当删除已发布的衍生作品。
49
+ 从违约那一刻起,你就不再拥有使用、复制、分发本项目的任何授权。
50
+ 11. 上面没写的情况想用,直接来问我,一般都会答应。
package/README.md CHANGED
@@ -93,22 +93,23 @@
93
93
  在 DSH 里:**设置 → 插件 → 安装**,填下面这一行;或者命令行:
94
94
 
95
95
  ```
96
- github:Yuuyuko-uu/dsh-feiyu-mood
96
+ dsh-feiyu-mood
97
97
  ```
98
98
 
99
99
  ```bash
100
- dsh plugin --profile desktop add github:Yuuyuko-uu/dsh-feiyu-mood
100
+ dsh plugin --profile desktop add dsh-feiyu-mood
101
101
  ```
102
102
 
103
- > ⚠ 上面这行会让包管理器去 **clone 仓库**,机器上没装 `git` 会报 `ERR_PNPM_GIT_FETCH_FAILED`。
104
- > 没 git 就用下面这条 **tarball 直链**,一样能装,不用 git:
103
+ > 也可以在 npm 上直接看到这个包(含历史版本):<https://www.npmjs.com/package/dsh-feiyu-mood>
104
+
105
+ > 上面那条要是碰到网络问题(npm 抽风、或者想固定某一次的代码快照),可以改用 tarball 直链,不用 git:
105
106
 
106
107
  ```bash
107
108
  dsh plugin --profile desktop add https://codeload.github.com/Yuuyuko-uu/dsh-feiyu-mood/tar.gz/refs/heads/main
108
109
  ```
109
110
 
110
111
 
111
- > 暂未发布到 npm;上架后可简写成 `dsh plugin add dsh-feiyu-mood`。
112
+ > 也发布到 npm 了:`dsh plugin add dsh-feiyu-mood`。
112
113
  > ⭐ 最省事的一条:把仓库链接贴给你自己的 DSH,说「**帮我装这个插件**」。
113
114
 
114
115
  装完 **必须重启一次 DSH**,然后进 **设置 → 鱼的心情**。
@@ -159,7 +160,7 @@ $p = "把上面 BOM=True 那一行的路径粘到这里"
159
160
 
160
161
  ```bash
161
162
  dsh plugin --profile desktop remove dsh-feiyu-mood
162
- dsh plugin --profile desktop add github:Yuuyuko-uu/dsh-feiyu-mood
163
+ dsh plugin --profile desktop add dsh-feiyu-mood
163
164
  ```
164
165
 
165
166
  > ⚠️ **必须先卸再装**:直接装可能拿到缓存里的旧副本,装完还是老的。
@@ -295,4 +296,6 @@ assets/feiyu.png 挂饰用的形象图(正方形最好是 PNG 透明底
295
296
 
296
297
  ## 十一、许可
297
298
 
298
- MIT。
299
+ [Yuuyuko-uu 插件许可 1.0](./LICENSE):允许使用、修改、商用;
300
+ 再分发时要在 README 第一屏注明原仓库和原作者;禁止把本项目说成自己的原创。
301
+ 这份许可不是 OSI 认证的开源许可,用之前请读一遍全文。
Binary file
Binary file
Binary file
Binary file
package/assets/widget.js CHANGED
@@ -101,6 +101,28 @@
101
101
  widget.appendChild(bodyImg)
102
102
  widget.title = '心情(点开看,按住拖动换位置)'
103
103
 
104
+ // ⭐ 2026-10-31:**外面这个小挂件跟着心情换形象**(五档,和面板里那张脸同一套阈值)
105
+ // 1 大笑 / 2 微笑 / 3 普通(原图 feiyu.png)/ 4 嘟嘴 / 5 哭
106
+ // ⚠ 3 档仍然用 feiyu.png 那个路径,别改成 feiyu-ok.png —— 老图不动,免得缓存和备份对不上
107
+ function bodyFor(v) {
108
+ if (v >= 80) return B + '/feiyu-great.png'
109
+ if (v >= 62) return B + '/feiyu-good.png'
110
+ if (v >= 42) return B + '/feiyu.png'
111
+ if (v >= 25) return B + '/feiyu-worry.png'
112
+ return B + '/feiyu-sad.png'
113
+ }
114
+ var 当前形象 = B + '/feiyu.png'
115
+ function 换形象(v) {
116
+ if (v == null || v === '') return
117
+ var src = bodyFor(Number(v))
118
+ if (src === 当前形象) return
119
+ 当前形象 = src
120
+ bodyImg.src = src
121
+ }
122
+ // 五张先各自拉一遍,换档的时候不会空一下(本地端口,几十毫秒)
123
+ ;[B + '/feiyu-great.png', B + '/feiyu-good.png', B + '/feiyu.png', B + '/feiyu-worry.png', B + '/feiyu-sad.png']
124
+ .forEach(function (u) { var i = new Image(); i.src = u })
125
+
104
126
  // ⭐ 2026-10-23(反馈第二版):分清两件事,别混在一起 ——
105
127
  // · **外面那个东西**(大肥鱼形象 / 小圆):点一下只负责**开关面板**,不改形态
106
128
  // · **面板右上角那个钮**:只负责**切换外面显示的形态**(大 ↔ 小)
@@ -274,6 +296,8 @@
274
296
  function renderAll(d) {
275
297
  // 收起态那个小圆里显示的心情数字
276
298
  try { colNum.textContent = d && d.mood != null ? String(d.mood) : '--' } catch (e) {}
299
+ // ⭐ 2026-10-31:外面的形象跟着档位换(1 大笑 … 5 哭),面板开着也照换
300
+ try { 换形象(d && d.mood) } catch (e) {}
277
301
  if (page === 'log') renderLog(d)
278
302
  else renderMain(d)
279
303
  }
@@ -322,7 +346,10 @@
322
346
  document.removeEventListener('pointerup', onUp)
323
347
  // ⚠ 点外面那个东西**只开关面板**,不管它是大肥鱼还是小圆 —— 形态由面板里的钮管
324
348
  if (!moved) toggle()
325
- else if (open) positionPanel()
349
+ else {
350
+ 存位置()
351
+ if (open) positionPanel()
352
+ }
326
353
  }
327
354
  document.addEventListener('pointermove', onMove)
328
355
  document.addEventListener('pointerup', onUp)
@@ -383,14 +410,61 @@
383
410
  widget.style.top = Math.min(maxY, Math.max(0, rect.top)) + 'px'
384
411
  widget.style.right = 'auto'
385
412
  widget.style.bottom = 'auto'
413
+ 存位置()
386
414
  }
387
415
  }
388
416
 
417
+ // ⭐ 0.8.2:拖过的位置要记住。
418
+ // · 只存**左上角坐标**(left/top):挂饰能拖到屏幕中间,这时候 right/bottom 已经没意义了,
419
+ // 统一成一套坐标,逻辑只剩一条。
420
+ // · 读回来先**夹进当前窗口**:窗口可能变小、屏幕可能换;而且收起态是 64px、
421
+ // 大图还能放到 1.6 倍(288px),同一个坐标在不同形态下合法范围不一样。
422
+ // 所以形态/尺寸一变就重新夹一次(下面 保持屏内() 已经在做)。
423
+ // · 没拖过的人**完全不写 inline 的 left/top**,CSS 的默认角落继续生效。
424
+ var 存位置计时 = 0
425
+ function 存位置() {
426
+ if (!dragged) return
427
+ // 拖动时每帧都写 localStorage 太浪费,攒到停手再写
428
+ if (存位置计时) return
429
+ 存位置计时 = setTimeout(function () {
430
+ 存位置计时 = 0
431
+ try {
432
+ var r = widget.getBoundingClientRect()
433
+ localStorage.setItem('fm-widget-pos', JSON.stringify({
434
+ x: Math.round(r.left), y: Math.round(r.top),
435
+ }))
436
+ } catch (e) {}
437
+ }, 200)
438
+ }
439
+
440
+ function 读位置() {
441
+ var v = null
442
+ try { v = JSON.parse(localStorage.getItem('fm-widget-pos') || 'null') } catch (e) { v = null }
443
+ if (!v || typeof v !== 'object') return null
444
+ var x = Number(v.x), y = Number(v.y)
445
+ if (!isFinite(x) || !isFinite(y)) return null // 脏数据当没存过,别让挂饰消失
446
+ return { x: x, y: y }
447
+ }
448
+
449
+ function 恢复位置() {
450
+ var p = 读位置()
451
+ if (!p) return
452
+ dragged = true
453
+ var maxX = Math.max(0, window.innerWidth - widget.offsetWidth)
454
+ var maxY = Math.max(0, window.innerHeight - widget.offsetHeight)
455
+ widget.style.left = Math.min(maxX, Math.max(0, p.x)) + 'px'
456
+ widget.style.top = Math.min(maxY, Math.max(0, p.y)) + 'px'
457
+ widget.style.right = 'auto'
458
+ widget.style.bottom = 'auto'
459
+ }
460
+
389
461
  document.body.appendChild(widget)
462
+ 恢复位置() // ⭐ 0.8.2:上次拖到哪儿就放哪儿(没拖过的照旧走 CSS 的默认角落)
390
463
  applyCollapsed()
464
+ 保持屏内() // 形态定下来之后再夹一次(收起态 64px、大图能到 288px,合法范围不一样)
391
465
  load()
392
466
 
393
- // ⭐ 0.7.6(她报的「收起态那个数字不刷新,得点一下才变」):
467
+ // ⭐ 0.7.6(收起态那个数字以前不刷新,得点一下才变):
394
468
  // 以前只有「点开面板」才 load() 一次,收起来的时候就再也不拉了 —— 数字一直是旧的。
395
469
  // 现在收起态也每 20 秒拉一次(就一个 GET,不花 token);页面重新可见时也补一次。
396
470
  setInterval(load, 20000)
@@ -410,6 +484,7 @@
410
484
  widget.style.top = y + 'px'
411
485
  widget.style.right = 'auto'
412
486
  widget.style.bottom = 'auto'
487
+ 存位置()
413
488
  if (open) positionPanel()
414
489
  })
415
490
  })()
package/client.js CHANGED
@@ -149,7 +149,7 @@ window.__ModuleLoader__.load({
149
149
  return () => clearInterval(t)
150
150
  }, [load])
151
151
 
152
- // ⭐ 0.7.5(她报的「最小化的时候心情不刷新,得点一下才变」):
152
+ // ⭐ 0.7.5(最小化的时候心情以前不刷新,得点一下才变):
153
153
  // 页面在后台时浏览器会把定时器节流到一分钟以上,切回来那一瞬间还显示旧值。
154
154
  // 所以「重新可见 / 重新获得焦点」时立刻拉一次 —— 不用她点任何东西。
155
155
  React.useEffect(() => {
package/lib/index.js CHANGED
@@ -145,7 +145,7 @@ function stripBridgePrefix(s) {
145
145
  if (最后 < 0) return t
146
146
  let 后 = t.slice(最后 + 长度).replace(/^[))\]】\s]*/, '')
147
147
  // ⭐ 2026-10-23(反馈):标记后面常常还跟着一小段「谁发的」说明,例如
148
- // 【主人私信】小鱿鱼(mid 21986783)刚给你发私信:<原话> …
148
+ // 【主人私信】主人(mid 10000)刚给你发私信:<原话> …
149
149
  // 原来只切到标记,这段说明会一起喂给判断模型。冒号前那截够短、又明显是说明,就再切一刀。
150
150
  const 冒号 = 后.slice(0, 80).search(/[::]/)
151
151
  if (冒号 > 0 && /mid\s*\d+|私信|消息/i.test(后.slice(0, 冒号))) 后 = 后.slice(冒号 + 1)
@@ -483,7 +483,7 @@ export function 规整模式(v) {
483
483
  * `~` + 4 位大写十六进制(按 UTF-16 码元);
484
484
  * · 去掉开头连续的 `-`(空了就是 `root`),截到 251 个字符,两头各包一个 `-`。
485
485
  * 例如:
486
- * C:\Users\Administrator\Desktop\鱼鱼窝\dsh → --C-Users-Administrator-Desktop-~9C7C~9C7C~7A9D-dsh--
486
+ * D:\my-workspace\dsh → --D-my-workspace-dsh--
487
487
  * D:\shing_of_kai\SourceCode\ShaoZhu'sDSHPlugins
488
488
  * → --D-shing_of_kai-SourceCode-ShaoZhu~0027sDSHPlugins--
489
489
  * ⚠️ 单引号、`~` 这些以前被简化成 `-`,跟 DSH 算出来的目录名对不上 —— 同一个工作区会裂成两项。
@@ -968,7 +968,7 @@ const 注入上下文 = new Set(['runtime-context', 'time-context', 'system-remi
968
968
  const 外部触发 = new Set(['bili-duty-scan'])
969
969
  // ⭐ 你自己的主动搭话(「可以去找她聊天了」)—— 这不是干活,判成干活就全错了
970
970
  const 自主搭话 = new Set(['speak-up'])
971
- // ⭐ 2026-10-25(她报的:QQ 来的话、骰子投中的搭话,心情都不记录):
971
+ // ⭐ 2026-10-25(QQ 来的话、骰子投中的搭话,心情都不记录):
972
972
  // 以前最后一句是 `if (src && src !== 'user') continue` —— 只要来源不是 user,
973
973
  // 全当「别的插件消息」跳过。于是 QQ 桥(source.kind='qq')和鱼搭子挂件('fishbuddy')
974
974
  // 转进来的话根本不算「她在说话」→ 找不到输入 → 这一轮不判 → 心情不记。
@@ -1266,7 +1266,7 @@ async function judge(ctx, agent, userText, reply, mode, o) {
1266
1266
  let user
1267
1267
  if (mode === 'work') {
1268
1268
  sys += 干活轮补充(o)
1269
- // ⭐ 她的话摆最前面、闹钟塞到最后一行括号里 —— 顺序就是权重,别让模型拿闹钟当理由
1269
+ // ⭐ 主人说的话摆最前面、闹钟塞到最后一行括号里 —— 顺序就是权重,别让模型拿闹钟当理由
1270
1270
  user = '⚠️ 这一轮**不是' + o.owner + '在跟你说话**,是定时任务把你叫起来干活的。\n\n'
1271
1271
  + '**你这轮说的话(唯一判据,重点看这个):**\n' + reply.slice(0, 1200)
1272
1272
  + '\n\n(下面这条只是闹钟,跟心情无关,别拿它当理由:「' + userText.slice(0, 100) + '」)'
@@ -1832,7 +1832,11 @@ export function apply(ctx) {
1832
1832
 
1833
1833
  // 5.5) 图片(形象图 + 五档表情)
1834
1834
  try {
1835
- const IMAGE_FILES = ['feiyu.png', 'face-great.png', 'face-good.png', 'face-ok.png', 'face-worry.png', 'face-sad.png']
1835
+ const IMAGE_FILES = [
1836
+ 'feiyu.png', // 3 档(普通)—— 也是原来的形象图,别删,老版本还在用这个路径
1837
+ 'feiyu-great.png', 'feiyu-good.png', 'feiyu-worry.png', 'feiyu-sad.png',
1838
+ 'face-great.png', 'face-good.png', 'face-ok.png', 'face-worry.png', 'face-sad.png',
1839
+ ]
1836
1840
  for (const f of IMAGE_FILES) {
1837
1841
  ctx.effect(() => ctx.webServer.register({
1838
1842
  kind: 'exact',
package/package.json CHANGED
@@ -1,58 +1,58 @@
1
- {
2
- "name": "dsh-feiyu-mood",
3
- "version": "0.8.1",
4
- "description": "给 AI 伙伴一个会自己判断、你看得见的心情:每轮聊完自动判断涨跌,右下角挂饰点开看数值 + 情绪 + 时间线;心情怎么告诉她(不告诉 / 只说心情 / 说她刚才那件事)和可信度门槛都能在设置里改。",
5
- "license": "MIT",
6
- "author": "Yuuyuko-uu (https://github.com/Yuuyuko-uu)",
7
- "type": "module",
8
- "scripts": {
9
- "test": "node --test"
10
- },
11
- "keywords": [
12
- "deepseek-harness",
13
- "dsh-plugin",
14
- "mood",
15
- "ai-companion"
16
- ],
17
- "repository": {
18
- "type": "git",
19
- "url": "git+https://github.com/Yuuyuko-uu/dsh-feiyu-mood.git"
20
- },
21
- "homepage": "https://github.com/Yuuyuko-uu/dsh-feiyu-mood#readme",
22
- "bugs": {
23
- "url": "https://github.com/Yuuyuko-uu/dsh-feiyu-mood/issues"
24
- },
25
- "main": "lib/index.js",
26
- "exports": {
27
- ".": "./lib/index.js",
28
- "./client": "./client.js",
29
- "./cordis.patch.yml": "./cordis.patch.yml",
30
- "./package.json": "./package.json"
31
- },
32
- "files": [
33
- "lib",
34
- "assets",
35
- "client.js",
36
- "cordis.patch.yml",
37
- "README.md",
38
- "CHANGELOG.md",
39
- "LICENSE"
40
- ],
41
- "dsh": {
42
- "bundle": {
43
- "patch": "./cordis.patch.yml"
44
- },
45
- "client": {
46
- "platform": "web",
47
- "inject": [
48
- "@deepseek-ai/dsh-client-runtime",
49
- "@deepseek-ai/dsh-client-ui-settings",
50
- "@deepseek-ai/dsh-client-ui-settings-plugins"
51
- ]
52
- }
53
- },
54
- "publishConfig": {
55
- "access": "public",
56
- "registry": "https://registry.npmjs.org/"
57
- }
58
- }
1
+ {
2
+ "name": "dsh-feiyu-mood",
3
+ "version": "0.8.3",
4
+ "description": "给 AI 伙伴一个会自己判断、你看得见的心情:每轮聊完自动判断涨跌,右下角挂饰点开看数值 + 情绪 + 时间线;心情怎么告诉她(不告诉 / 只说心情 / 说她刚才那件事)和可信度门槛都能在设置里改。",
5
+ "license": "SEE LICENSE IN LICENSE",
6
+ "author": "Yuuyuko-uu (https://github.com/Yuuyuko-uu)",
7
+ "type": "module",
8
+ "scripts": {
9
+ "test": "node --test"
10
+ },
11
+ "keywords": [
12
+ "deepseek-harness",
13
+ "dsh-plugin",
14
+ "mood",
15
+ "ai-companion"
16
+ ],
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/Yuuyuko-uu/dsh-feiyu-mood.git"
20
+ },
21
+ "homepage": "https://github.com/Yuuyuko-uu/dsh-feiyu-mood#readme",
22
+ "bugs": {
23
+ "url": "https://github.com/Yuuyuko-uu/dsh-feiyu-mood/issues"
24
+ },
25
+ "main": "lib/index.js",
26
+ "exports": {
27
+ ".": "./lib/index.js",
28
+ "./client": "./client.js",
29
+ "./cordis.patch.yml": "./cordis.patch.yml",
30
+ "./package.json": "./package.json"
31
+ },
32
+ "files": [
33
+ "lib",
34
+ "assets",
35
+ "client.js",
36
+ "cordis.patch.yml",
37
+ "README.md",
38
+ "CHANGELOG.md",
39
+ "LICENSE"
40
+ ],
41
+ "dsh": {
42
+ "bundle": {
43
+ "patch": "./cordis.patch.yml"
44
+ },
45
+ "client": {
46
+ "platform": "web",
47
+ "inject": [
48
+ "@deepseek-ai/dsh-client-runtime",
49
+ "@deepseek-ai/dsh-client-ui-settings",
50
+ "@deepseek-ai/dsh-client-ui-settings-plugins"
51
+ ]
52
+ }
53
+ },
54
+ "publishConfig": {
55
+ "access": "public",
56
+ "registry": "https://registry.npmjs.org/"
57
+ }
58
+ }