@marsken/dsh-studio 0.1.6 → 0.1.7
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/docs/compatibility.md +1 -1
- package/docs/publish.md +1 -0
- package/package.json +1 -1
- package/src/host/integrations.js +1 -0
- package/src/host/webhooks.js +7 -3
package/docs/compatibility.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
| 项 | 值 |
|
|
8
8
|
| --- | --- |
|
|
9
|
-
| dsh-studio | `package.json` `version: 0.1.
|
|
9
|
+
| dsh-studio | `package.json` `version: 0.1.7` |
|
|
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,7 @@ 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.7` | 2026-11-14 | webhook 投递结果进「集成健康」(地址写错了看得见) |
|
|
130
131
|
| `0.1.6` | 2026-11-14 | 回归跑完也发事件(regression/finished);数据库用例可指定断言的列 |
|
|
131
132
|
| `0.1.5` | 2026-11-14 | agent/failed 事件、控制面板(执行开关 / 上限 / webhook 按事件订阅)、抽屉里加数据库用例入口 |
|
|
132
133
|
| `0.1.4` | 2026-11-14 | SQLite 用例、出站 webhook、可配置上限、执行器注册表 |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@marsken/dsh-studio",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
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",
|
package/src/host/integrations.js
CHANGED
|
@@ -24,6 +24,7 @@ const CHANNELS = {
|
|
|
24
24
|
gitlab: { label: 'GitLab', hint: '拉 Issue、回写评论、对 MR' },
|
|
25
25
|
drive: { label: '飞书云盘归档', hint: '需求文件夹与产物文档(lark-cli)' },
|
|
26
26
|
worktree: { label: '代码隔离', hint: 'git worktree 的创建与回收' },
|
|
27
|
+
webhook: { label: '出站 webhook', hint: '卡片流转/用例失败/门禁/回归结果推给外部系统' },
|
|
27
28
|
}
|
|
28
29
|
const HEALTH = new Map()
|
|
29
30
|
export function healthState(channel) {
|
package/src/host/webhooks.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// webhook 订阅者:把事件 POST 给配置里的地址。失败只记健康,不重试、不阻塞。
|
|
2
2
|
import { emitEvent, subscribe } from './events.js'
|
|
3
|
+
import { markHealth } from './integrations.js'
|
|
3
4
|
|
|
4
5
|
export const WEBHOOK_EVENTS = ['task/moved', 'case/failed', 'gate/blocked', 'agent/failed', 'regression/finished']
|
|
5
6
|
|
|
@@ -23,14 +24,17 @@ export async function deliverWebhooks(config, event) {
|
|
|
23
24
|
const hooks = (config?.webhooks ?? []).filter(hook => hook.enabled !== false && (hook.events ?? []).includes(event.type))
|
|
24
25
|
for (const hook of hooks) {
|
|
25
26
|
try {
|
|
26
|
-
await fetch(hook.url, {
|
|
27
|
+
const response = await fetch(hook.url, {
|
|
27
28
|
method: 'POST',
|
|
28
29
|
headers: { 'content-type': 'application/json' },
|
|
29
30
|
body: JSON.stringify(event),
|
|
30
31
|
signal: AbortSignal.timeout(5000),
|
|
31
32
|
})
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
// 投递结果进「集成健康」,否则地址写错了没人知道——事件是 fire-and-forget,不会报错给你。
|
|
34
|
+
if (response.ok) markHealth('webhook', 'ok', hook.id + ' ' + event.type)
|
|
35
|
+
else markHealth('webhook', 'fail', hook.id + ' HTTP ' + response.status)
|
|
36
|
+
} catch (error) {
|
|
37
|
+
markHealth('webhook', 'fail', hook.id + ' ' + String(error?.message ?? error).slice(0, 120))
|
|
34
38
|
}
|
|
35
39
|
}
|
|
36
40
|
}
|