dsh-muv-table 0.2.11 → 0.3.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/CHANGELOG.md +65 -1
- package/lib/client.js +784 -60
- package/lib/index.js +54 -8
- package/package.json +6 -3
- package/test-card-ops.mjs +152 -0
- package/test-cards.mjs +58 -0
- package/test-preset-resolve.mjs +89 -4
- package/test-var-section.mjs +272 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 未发布
|
|
4
|
+
|
|
5
|
+
### ✨ 新增:面板内「🧰 卡运维」区块(开场白注入 + 卡与脚本状态)
|
|
6
|
+
|
|
7
|
+
用户口径:**「我有 muv-table 面板,不需要做到酒馆面板里面,集成到 muv-table 面板里面就行了」**
|
|
8
|
+
⇒ 卡相关的运维入口只挂在**本插件自己的视图**里(侧边栏「MUV 表格」→ 面板顶部「🧰 卡运维」,
|
|
9
|
+
默认收起),酒馆管理面板里不再重复一份。
|
|
10
|
+
|
|
11
|
+
- **📌 开场白**:按钮「➕ 把当前卡的开场白注入会话末尾」→ `POST /api/tavern/greeting/insert`。
|
|
12
|
+
- 请求体**只带 `sessionId`**:服务端按会话权威解析预设。带 `presetId` 会引入"会粘住的猜"
|
|
13
|
+
(本仓库已在 v0.2.9 起整条删除酒馆 DOM / localStorage 的预设读取路径),不把猜发出去。
|
|
14
|
+
- 成功 → 绿色「✅ 已注入「卡名」的开场白(N 字,第 M 回合)」;
|
|
15
|
+
`greeting-already-present` → 蓝色「本会话已有开场白,无需重复注入」(**不是报错**);
|
|
16
|
+
会话不活跃(404 + JSON)→ 照原样显示服务端原因;路由不存在(404/405 非 JSON)或
|
|
17
|
+
fetch 抛错 → 橙色降级提示,**不崩面板**。
|
|
18
|
+
- **🧩 卡与脚本状态(只读)**:当前会话绑定的卡名 / 卡脚本 `enabled/total`(接口不可用
|
|
19
|
+
就**隐藏该行**,不显示假的 `0/0`)/ 运行时变量树顶层键数量 / 客户端构建号。
|
|
20
|
+
- **🔄 刷新**:重查上面全部只读项。
|
|
21
|
+
- 逻辑与 UI 分离:`cardOpsInsertGreeting` / `cardOpsLoadStatus` 是纯函数(不碰 React/DOM),
|
|
22
|
+
UI 只负责显示;**未改动**本插件既有的解析 / 正则 / 卡功能,纯客户端改动(刷新页面即生效,
|
|
23
|
+
不需要重启 DSH)。
|
|
24
|
+
|
|
25
|
+
### ✅ 测试:`test-card-ops.mjs`(19 通过 / 0 失败)
|
|
26
|
+
|
|
27
|
+
**逐字提取** `lib/client.js` 里 `[[card-ops-greeting-start/end]]` 标记之间的函数执行,
|
|
28
|
+
断言"点按钮 → 发出去的请求体":URL / 方法 / content-type / body 形状;以及五个响应分支
|
|
29
|
+
(成功 / 已存在 / 会话不活跃 / 接口不存在 / 网络不可达)。
|
|
30
|
+
含**对照组**:把请求体改回"带上猜出来的 `presetId`"后,[B] 组断言必须变红
|
|
31
|
+
(实测整轮 16 通过 3 失败 / 退出码 1),证明断言不是永真。
|
|
32
|
+
|
|
33
|
+
## v0.2.12 (2026-09-20)
|
|
34
|
+
|
|
35
|
+
### 🐛 修复:发布包里缺 `test-cards.mjs`,导致随包发布的 `test-muv-parser.mjs` 装完跑不起来
|
|
36
|
+
|
|
37
|
+
`files` 字段列了 `test-muv-parser.mjs`,但它 `import` 的 `test-cards.mjs` **没被列进去**。
|
|
38
|
+
从 npm 装下来的副本里跑它会直接
|
|
39
|
+
`ERR_MODULE_NOT_FOUND: .../node_modules/dsh-muv-table/test-cards.mjs`。
|
|
40
|
+
(**开发树里不会暴露这个问题** —— 仓库里那个文件一直都在。这是只有
|
|
41
|
+
「装已发布的包再跑」才能发现的缺陷,也正是这条验证路径的价值所在。)
|
|
42
|
+
纯打包修复,运行时代码一字未动。
|
|
43
|
+
|
|
3
44
|
## v0.2.11 (2026-09-20)
|
|
4
45
|
### 🐛 修复:世界书里「没有 `<initvar>` 标签、只有 `[initvar]` 注释前缀」的裸 YAML 变量树读不到
|
|
5
46
|
|
|
@@ -177,7 +218,30 @@ HTTP 200 { ok:true, found:true, cardName:'川上富江', presetDir:'tavern-lite'
|
|
|
177
218
|
| `sessionId` 绑定到真实预设 | 用它,`presetSource: 'session'` |
|
|
178
219
|
| `sessionId` 绑定**已消失**(改名) | `found:false`,`error: preset bound to session … not found: <旧名>` |
|
|
179
220
|
| `sessionId` 绑定为 `default` / 无绑定 | 用酒馆自己的默认(tavern-lite),`presetSource: 'session-default'` |
|
|
180
|
-
| 两个定位参数都没给 |
|
|
221
|
+
| 两个定位参数都没给 | **稳定默认**(tavern-lite),`presetSource: 'default'` |
|
|
222
|
+
| 两个定位参数都没给,但**显式**带 `preferActive=1` | 才按「最近写入的会话」猜,`presetSource: 'active'`;猜不到仍用默认 |
|
|
223
|
+
| `preferPreset=1` + `presetId` | 强制按该 presetId 解析(诊断/卡库检查用),语义是「我就是要它,别管会话」 |
|
|
224
|
+
|
|
225
|
+
**`presetSource` 取值集合(冻结,改动须同步此表)**:
|
|
226
|
+
`'explicit'` | `'session'` | `'session-default'` | `'default'` | `'active'`。
|
|
227
|
+
其中 `'active'` **现在必须显式带 `preferActive=1` 才可达**,且仓库内**没有任何调用方消费它**
|
|
228
|
+
(`HANDOFF.md` 已记「服务端诚实上报但客户端从不消费」—— 客户端连 `presetSource` 都没读)。
|
|
229
|
+
|
|
230
|
+
> **2026-09 收窄(重要)**:原来「两个定位参数都没给」会**无条件**回落到 `activePresetId()`,
|
|
231
|
+
> 也就是按 `<DSH_HOME>/storages/session_projcache/sessions` 下会话文件的 **mtime 倒序**
|
|
232
|
+
> 取"最近写入的会话"的绑定。这条路径是**串台的真凶之一**:开发/被测会话在不停写文件,
|
|
233
|
+
> 该值会漂移 —— 实测它当时返回的是「安装 dsh-tavern-v2 及其附属插件」那个**开发会话**的绑定。
|
|
234
|
+
> 现在收窄为**只有显式 `preferActive=1` 才走**;否则落到稳定默认并如实标 `default`。
|
|
235
|
+
>
|
|
236
|
+
> ⚠️ 更要紧的一层(另一个仓库):真实 DSH 会话的预设声明在
|
|
237
|
+
> `<DSH_HOME>/sessions/<cwd>/<uuid>/session.jsonl.zstd` 的**事件流**里
|
|
238
|
+
> (`agent-preset/selected` 事件 / header 的 `agentPreset`),**实测 260/260 个会话都有**;
|
|
239
|
+
> 而 `session-bindings.json` 只覆盖 39 条、与其中 **229** 个会话**完全没有**记录。
|
|
240
|
+
> 因此**只读 bindings 的 `presetIdForSession()` 对绝大多数真实会话解析不出任何东西**,
|
|
241
|
+
> 这正是「基本上每个会话都变成看同一张卡」的根因。
|
|
242
|
+
> 权威解析应走酒馆的 `GET /api/tavern/current-session?sessionId=`(它读会话事件流 →
|
|
243
|
+
> bindings → default),客户端拿到后再带 `preferPreset=1` 请求本接口。
|
|
244
|
+
> 诊断数据见 `C:\deepseek harness\crosstalk-findings-20260920.md`。
|
|
181
245
|
|
|
182
246
|
- `default` 这条**是照抄酒馆的规则**,不是猜:`dsh-tavern` 的
|
|
183
247
|
`lib/index.js:2404` 就是 `if (currentPresetId === 'default') currentPresetId = 'tavern-lite'`,
|