@marsken/dsh-studio 0.1.14 → 0.1.16

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/AGENTS.md CHANGED
@@ -149,3 +149,4 @@ GIT_SSH_COMMAND="ssh -p 443" git push
149
149
  | 点击页面卡顿 | DevTools Performance 找长任务;`keyboardPatch` 之类全量扫描是历史元凶 |
150
150
  | 派单没留言 | 会话日志里找 `turn/end reason.kind=error`;常见是模型无可用通道(503) |
151
151
  | 保存成功但字段为空 | `publicConfig`/`mergeConfig`/`sanitize*` 白名单漏字段 |
152
+ | 用脚本改文档后「什么都没变」 | 生成脚本文本里带了反引号,把模板字符串截断了:Node 抛 `ReferenceError: xxx is not defined` 但**编辑一句都没执行**。改完看 `git status`,别只看脚本退出码 |
package/README.md CHANGED
@@ -611,16 +611,16 @@ DSH 的 web 只有一张登录 cookie,所有人共用;所以平台自己记
611
611
  | 一次通过率 | 已完成的卡里,history 从没往回退过的比例 | 与页首「一次通过率」KPI **同一条定义**(`index.js` 的 `taskTimeline.backward`) |
612
612
  | 返工率 | 往回退过的卡 ÷ 名下卡数 | 同上 |
613
613
  | AI 失败 / 缺陷重开 | `agentFailures` / `reopenCount` 求和 | 单独列,**不进**返工率 |
614
- | 成本 | 未接入 | 平台还没有按卡/按项目的 token 记账,接上 usage 才会有数字 |
614
+ | 成本 | token 按会话日志逐次累加,钱 = token × 价目表 | `~/.dsh/sessions/*/studio-*/session.v4.jsonl.zstd` 的 `usage`;价目表在设置 → 成本与预算 |
615
615
 
616
616
  已知偏差:`task.expert` 会在换列时被列负责人覆盖,所以「卡数」看的是**当前负责**的卡,不是历史上派给过它的所有卡。
617
617
 
618
- 成本为什么还是「未接入」:宿主没有把 token usage 暴露给插件;会话目录里的 `session.v4.jsonl.zstd` 解出来是整份 JSON 快照,没有稳定可依赖的 usage 字段(`dsh-ui-usage-billing` 那类插件是自带解析器 + 价目表的)。要真算钱得先解决这两件事,已单开一张卡跟踪。
618
+ 成本怎么来的(0.1.12 起):宿主仍然没有把 usage 暴露给插件,所以改成自己读会话日志——`assistant/message` 上带 `usage`(入/出/缓存读/缓存写),模型名在请求上下文里继承。同一条消息里 usage 会出现两次(消息体 + 流式 chunk),只认消息上的那份。价目表要自己配,没配的模型花费记「未知」而不是 0。(`dsh-ui-usage-billing` 那类插件是自带解析器 + 价目表的)。要真算钱得先解决这两件事,已单开一张卡跟踪。
619
619
  ## 已知限制
620
620
 
621
621
  - 多维表格镜像(`baseToken` / `tableId`)只存配置,尚未实现写入。
622
- - GitLab 同步 Issue 与**关联 MR**(`/issues/:iid/related_merge_requests`),但不同步 MR 的评论与流水线状态;MR 的合并/关闭状态要等下一次同步才会反映到卡上。
623
- - 用例记录存在卡上(`task.cases`):2026-11-13 起有跨卡的**用例总览**页签,并支持**勾选一批接口用例批量跑**(结果回写到各自的卡、失败照旧开缺陷)。但还没有「回归套件」这个对象——固定的用例集合、一键重跑、历次通过率趋势都还没有,批量跑是临时勾选、跑完即散。
622
+ - GitLab 同步 Issue 与**关联 MR**(`/issues/:iid/related_merge_requests`);卡上挂 MR 后「从 GitLab 核对」会拉 MR 详情、`/changes` 与 `/pipelines`(流水线状态进 `coding.gitlab`)。**不同步 MR 的评论**;MR 的合并/关闭状态要等下一次同步才反映到卡上。
623
+ - 用例记录存在卡上(`task.cases`):跨卡的**用例总览**页签可以勾选批量跑(结果回写各自卡、失败照旧开缺陷),也支持**回归套件**(`/suite/*`:按规则或手选固定一批,一键重跑,`by` 记「套件:名字」)。但还没有「回归套件」这个对象——固定的用例集合、一键重跑、历次通过率趋势都还没有,批量跑是临时勾选、跑完即散。
624
624
  - 缺陷卡的严重级别默认 `P2`、优先级 `normal`:自动建卡不猜严重程度,由人或在评论里改。
625
625
  - 派单失败会记在 `/studio-api/integrations` 与卡片抽屉里,不会自动重试。
626
626
  - 集成健康现在会**落盘保留最近一次结果**(SQLite 的 `meta:side:integration-health`,不进 state、不涨 revision、不占快照):重启 dsh-web 后四条通道不再回到「还没用过」。仍然只是「最近一次」,没有按小时/按天的长期趋势(要趋势还得上采集)。
@@ -6,7 +6,7 @@
6
6
 
7
7
  | 项 | 值 |
8
8
  | --- | --- |
9
- | dsh-studio | `package.json` `version: 0.1.14` |
9
+ | dsh-studio | `package.json` `version: 0.1.16` |
10
10
  | DeepSeek Harness | `0.2.2-rc.1`(`dsh --version`) |
11
11
  | Node | `v24.22.2`(Linux 目标机);本机 Windows `v24.19.0` |
12
12
  | 目标系统 | Ubuntu 24.04,`dsh web` 监听 `18080`,nginx `:80` 反代并注入 `dsh-auth-*` cookie |
package/docs/publish.md CHANGED
@@ -127,6 +127,8 @@ token 只写进临时 npmrc(放在仓库外或 `tmp/` 且不提交),发完
127
127
  | --- | --- | --- |
128
128
  | `0.1.0` | 2026-11-13 | 首个公开版:看板 / 需求 / 用例回归 / 效能 / 设计评审四期 |
129
129
  | `0.1.1` | 2026-11-13 | 补三张 README 截图(npm 页可看图);默认值与文档去掉公司内网信息 |
130
+ | `0.1.16` | 2026-11-15 | quickstart 命令修正 + GitLab 打桩验证配方 |
131
+ | `0.1.15` | 2026-11-15 | 清掉三处过期的「已知限制」 |
130
132
  | `0.1.14` | 2026-11-15 | 修正成本口径的过期文案 |
131
133
  | `0.1.13` | 2026-11-15 | 价目表编辑器 + 未配价目模型清单 |
132
134
  | `0.1.12` | 2026-11-15 | 真实 token 成本(读会话日志 + 价目表计价) |
@@ -11,7 +11,7 @@
11
11
  ```bash
12
12
  git clone ssh://git@ssh.github.com:443/marsken88/dsh-studio.git
13
13
  cd dsh-studio
14
- npm test # 1) 77 条测试,不用先装依赖
14
+ npm test # 1) 全部测试,不用先装依赖(条数以输出为准)
15
15
  ```
16
16
 
17
17
  只跑到这一步,你已经知道「代码是好的」——测试不需要任何依赖,因为它们只碰纯函数和一个临时 SQLite。
@@ -22,6 +22,13 @@ cmp -s dist/client.js client.js && echo same # 产物必
22
22
  ```
23
23
 
24
24
  `pnpm install` 会提示 `Ignored build scripts: esbuild` —— **正常**,vite 用的是预编译 esbuild,构建照样过。
25
+
26
+ 没有 GitLab 令牌时,也可以验「MR 事实 vs 自报执行记录」这条链:先在跑 dsh 的那台机器上起打桩,再从本机驱动。
27
+
28
+ ```bash
29
+ node tools/mock-gitlab.mjs # 在 dsh 主机上,127.0.0.1:18098
30
+ STUDIO_BASE=http://<host>:18080 node tools/verify-gitlab-facts.mjs # 本机,7 项断言
31
+ ```
25
32
  `cmp` 打出 `same` 说明你构建的产物和仓库里那份**逐字节一致**(CI 的红线就是这个)。
26
33
 
27
34
  ```bash
@@ -33,7 +40,7 @@ DSH_DEPLOY_HOST=<host> DSH_DEPLOY_USER=<user> DSH_DEPLOY_PASSWORD=<pw> node tool
33
40
  ## 然后:证明它真的活着
34
41
 
35
42
  ```bash
36
- STUDIO_TOKEN=<面板 token> node tools/visual/smoke.mjs
43
+ STUDIO_TOKEN=<面板 token> STUDIO_BASE=http://<host>:18080 node tools/visual/smoke.mjs
37
44
  ```
38
45
 
39
46
  九项检查:能打开 → 侧栏进得去 → 面板挂载 → 六个页签 → 看板有卡 → 用例库有行 → 套件渲染 → `pageerror` 必须为空。任何一项不过退出码非零。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marsken/dsh-studio",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "type": "module",
5
5
  "description": "DSH Studio: role-based multi-agent workspace (product / architect / developer / QA) with a live work board, GitLab + Feishu connection settings, all configurable from the web GUI.",
6
6
  "main": "index.js",
@@ -46,7 +46,7 @@ export async function handleInsightsRoute({ method, route, req, res, store, url
46
46
  return true
47
47
  }
48
48
  if (method === 'GET' && route === '/quality') {
49
- // AI 质量:派单量 / 一次通过率 / 返工率 / 平均耗时。成本未接入(见 README 口径)。
49
+ // AI 质量:派单量 / 一次通过率 / 返工率 / 平均耗时;成本见 /costs 的 usage(读会话日志 + 价目表)。
50
50
  host.sendJson(res, 200, { ok: true, quality: buildQuality(store.snapshot(), runSummary()) })
51
51
  return true
52
52
  }