@dsh-workbench/core 0.1.9 → 0.1.11
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/bin/dsh-workbench +23 -0
- package/client.js +609 -84
- package/cordis.patch.yml +11 -3
- package/dist/client/client.body.js +609 -84
- package/dist/client/index.js +610 -85
- package/dist/host/index.js +406 -276
- package/dist/types/app/client.d.ts +140 -6
- package/dist/types/app/layouts/rightbar/BoardEmpty.d.ts +2 -1
- package/dist/types/app/layouts/rightbar/Rightbar.d.ts +1 -0
- package/dist/types/app/layouts/rightbar/board-plan.d.ts +2 -0
- package/dist/types/app/layouts/sidebar/ProjectSwitcher.d.ts +2 -2
- package/dist/types/app/layouts/sidebar/Sidebar.d.ts +1 -1
- package/dist/types/app/layouts/sidebar/WorkspaceRenameDialog.d.ts +8 -0
- package/dist/types/app/layouts/sidebar/WorkspaceRowAction.d.ts +7 -0
- package/dist/types/app/layouts/sidebar/WorkspaceRowLabel.d.ts +8 -0
- package/dist/types/app/layouts/sidebar/WorkspaceSearchField.d.ts +9 -0
- package/dist/types/app/layouts/sidebar/__tests__/workspace-name.test.d.ts +1 -0
- package/dist/types/app/layouts/sidebar/workspace-items.d.ts +11 -0
- package/dist/types/app/layouts/sidebar/workspace-name.d.ts +16 -0
- package/dist/types/app/units/__tests__/registry.test.d.ts +1 -0
- package/dist/types/app/units/fixture-unit-mock.d.ts +3 -1
- package/dist/types/modules/panels/__tests__/approval.test.d.ts +1 -0
- package/dist/types/modules/panels/model/approval.d.ts +2 -0
- package/dist/types/shared/api/diy.d.ts +3 -0
- package/dist/types/shared/api/diy.test.d.ts +1 -0
- package/dist/types/shared/api/host/__tests__/approval-legacy.test.d.ts +1 -0
- package/dist/types/shared/api/host/approval-legacy.d.ts +2 -0
- package/dist/types/shared/api/host/diy.d.ts +3 -0
- package/dist/types/shared/api/host/diy.test.d.ts +1 -0
- package/dist/types/shared/api/host/mount-units.d.ts +13 -6
- package/dist/types/shared/hooks/mock-mode.d.ts +1 -0
- package/package.json +13 -5
- package/preset/diy.patch.yml +156 -0
- package/scripts/seed-profile.sh +116 -0
- package/skills/workbench-module-diy/BUILD.md +179 -0
- package/skills/workbench-module-diy/DESIGN.md +81 -0
- package/skills/workbench-module-diy/LINKAGE.md +113 -0
- package/skills/workbench-module-diy/PANEL.md +124 -0
- package/skills/workbench-module-diy/REVIEW.md +31 -0
- package/skills/workbench-module-diy/SKILL.md +54 -0
- package/skills/workbench-module-diy/STEPS.md +93 -0
- package/skills/workbench-module-diy/TOOLS.md +112 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# 三步:每一步问什么、要定什么、什么时候算做完
|
|
2
|
+
|
|
3
|
+
[DESIGN.md](DESIGN.md) 是三张表的来历,本文是每一步的**问法**与**完成判据**。
|
|
4
|
+
|
|
5
|
+
## 步骤 1 — 面板:他看什么,他配什么
|
|
6
|
+
|
|
7
|
+
先问出来(一次问一组,每组带推荐答案):
|
|
8
|
+
|
|
9
|
+
- 打开这块面板,他**第一眼**要看到什么?他拿这个答案去做什么决定?
|
|
10
|
+
- 哪些事他要能自己配?配完以后,他看到的会有什么不同?
|
|
11
|
+
- 哪些事他一定会说给 agent 听?**那句话原文**是什么?
|
|
12
|
+
|
|
13
|
+
要定的四件事:
|
|
14
|
+
|
|
15
|
+
1. **展示清单**(每条一句人话):这一格是什么、一眼能得出什么结论、点一下可以去哪(去平台看详情 / 交给 agent)。详情、评论、流转、日志这类**零散操作不在面板做**。
|
|
16
|
+
2. **配置清单**:用他的话说清 这管什么 / 默认是什么 / 他能选的值从哪来 / 选错了会怎样 / 按项目分别记 / 他自己按的才生效 / 怎么清掉。
|
|
17
|
+
3. **分流**:他会反复做、要动平台上东西的事 → 交给 agent;一次要动好几下、要等很久、中途要他登录或点头、失败要能接着来的 → 封成一个动作,给他一个按钮(+ 一个交给 agent 的入口);只是看看 → 只读呈现。
|
|
18
|
+
4. **状态矩阵**:每种状态下"屏幕上是什么 + 他能做什么 + agent 能接着做什么"。
|
|
19
|
+
|
|
20
|
+
**这一步做完要给他看的**:**ASCII 画面** —— 卡片、设置面、每一种状态都画出来 + 状态矩阵(左列图号)与图例。
|
|
21
|
+
|
|
22
|
+
**完成判据**
|
|
23
|
+
|
|
24
|
+
- 他**对着这些图**看过每一种状态,说过"就这样"或指出了哪一格不对。
|
|
25
|
+
- 表里每一格都是他**看得见或能操作**的事,没有一句"系统内部会…"。
|
|
26
|
+
- 矩阵里每个词都在图例里指到了屏幕上的样子;没有图例,或图例里只有同义词,都算没写完。
|
|
27
|
+
- 每种缺失都有一句**能照做**的话:缺什么、去哪补、谁补(他 / agent / 平台)。
|
|
28
|
+
- 每个控件都能翻译成一句他对 agent 说的话,且那句话在界面上有位置。
|
|
29
|
+
- 每种状态都有设计 —— 真机上造不出来的那些也要写。
|
|
30
|
+
|
|
31
|
+
→ 清单怎么写、界面习惯、状态话术:[PANEL.md](PANEL.md)
|
|
32
|
+
|
|
33
|
+
## 步骤 2 — agent:他能替用户做什么,哪几件要用户点头
|
|
34
|
+
|
|
35
|
+
先问出来:
|
|
36
|
+
|
|
37
|
+
- 他会怎么跟 agent 说这件事?agent 得先知道什么才不用猜?
|
|
38
|
+
- agent 做完,他需要知道什么?
|
|
39
|
+
- 哪几件是**真的动手了**、他必须先点头?点头时他想看到什么,才敢点?
|
|
40
|
+
|
|
41
|
+
要定的五件事:
|
|
42
|
+
|
|
43
|
+
1. **能力清单**:每件事一句"agent 能做什么";并说清它为什么是一件独立的事,而不是已有一件事的一个选项。
|
|
44
|
+
2. **传什么 / 拿回什么**:**贴真实的那一段** —— 真实调用(参数 JSON)+ 真实返回正文(**照抄,不转述**),再附默认值(不给等于什么)、上限(要多少给多少,**不悄悄截**)、范围(只认哪几个值)、给错怎么改。凡是"大概是这样的",都不算。
|
|
45
|
+
3. **每件事的全场景**:正常 / 没有 / **说不清是哪一份**(不许猜,让他选)/ 参数不对 / 超出上限 / 能力还没装好 / 平台要登录或超时 / 还有下一批 / 太长截断了(说清截了什么、多少)/ 没有正在做的项目。
|
|
46
|
+
4. **动手的事分两拍**:先预览(说清**将要做什么**,让他确认),再真的做。预览的话要让他能判断"要不要做",不是"要不要允许"。
|
|
47
|
+
5. **哪几件要点头**:会改平台上东西的、会改这台机器的、会改他面板的。
|
|
48
|
+
- 点头时他要看到**这次真的会发生什么**(哪一个对象、什么版本、到什么环境),不是"这个操作会写数据"。
|
|
49
|
+
- **说不清这次会发生什么就不许问**:停下,把原因告诉 agent 让它去查 —— 用户不该为一个看不清的后果点头。
|
|
50
|
+
|
|
51
|
+
**这一步做完要给他看的**:**真实的调用与返回**,一条一条贴出来给他看(不是概述):能打到平台就真跑一遍、把记录贴出来;打不到就用真实代码产出的输出,并标明哪些值是样例。
|
|
52
|
+
|
|
53
|
+
**完成判据**
|
|
54
|
+
|
|
55
|
+
- 每件事的每种情况都有确定结果;拒绝的话里带 agent 能照做的下一步。
|
|
56
|
+
- 每一件都贴着**真实调用与真实返回**(照抄的正文,不是转述);边界情况给的是**真实的报错原文**。
|
|
57
|
+
- "说不清是哪一份"这一格不许猜,也不许悄悄退回默认。
|
|
58
|
+
- 截断、越界、分页都说清了边界在哪、下一批怎么拿。
|
|
59
|
+
- 点头那一格写的是"会发生什么",不是"这是什么操作";补不齐后果的那条路是**停下**,不是硬问。
|
|
60
|
+
- 用户自己按的那个入口不需要点头,但和 agent 走的是同一件事、看到同一个结果。
|
|
61
|
+
|
|
62
|
+
→ 能力怎么划、点头全场景、预览怎么写:[TOOLS.md](TOOLS.md)
|
|
63
|
+
|
|
64
|
+
## 步骤 3 — 联动:agent 做完,用户看到什么
|
|
65
|
+
|
|
66
|
+
先问出来:
|
|
67
|
+
|
|
68
|
+
- agent 改完,他需要多久看到、看到哪一格变?
|
|
69
|
+
- agent 只是**读**了一下(看一眼),面板该不该动、动哪一格?(口径:读的是这一格 → 这一格变;
|
|
70
|
+
读的是面板上没有的东西 → 不动。见 [LINKAGE.md](LINKAGE.md) §1)
|
|
71
|
+
- agent 正在干(要几分钟)的时候,他看哪儿?
|
|
72
|
+
- 他点"交给 agent"之后,agent 手上拿到的是什么?
|
|
73
|
+
|
|
74
|
+
要定的五件事:
|
|
75
|
+
|
|
76
|
+
1. **什么时候面板该动**:agent **读了这一格** → 那一格按最窄切片变(值跟对话里那份一样);读的是面板上没有的东西(明细 / 日志 / 某档子集)→ **不动**;只预览 → **不动**;真的做了 → 那一格变成新值;他自己按的动作 → 那一格立刻变。
|
|
77
|
+
2. **正在干的时候**:显示到哪一步、要登录给他链接、失败给他原因和原始输出;**不画进度条、不画流程控制台**。
|
|
78
|
+
3. **"交给 agent"之后 agent 拿到什么**:哪一类、哪个对象、多少,加一句"该用哪个能力再往下拿"(agent 打不开面板上那个 ↗,明细得靠它自己再问一次)。
|
|
79
|
+
4. **收起模块 = 这个项目里 agent 也做不了这件事**,要在一开始就说清。
|
|
80
|
+
5. **面板凭什么不旧**:切项目、别的窗口也在改、程序刚更新过 —— 这三种都要么实时、要么说清。
|
|
81
|
+
|
|
82
|
+
**这一步做完要给他看的**:**"变之前 / 变之后"两张 ASCII 并排** + 一张联动表(每格说清什么时候变、哪一格变)。
|
|
83
|
+
|
|
84
|
+
**完成判据**
|
|
85
|
+
|
|
86
|
+
- 他**对着那两张图**看过至少一次真实的变化(agent 做完面板变成什么样)。
|
|
87
|
+
- 每一格都说清"什么时候变、哪一格变、用户看到什么",没有"刷新一下"这类模糊说法;
|
|
88
|
+
"哪一格"要细到能落成"某条投影 + 最窄那个参数"(`cmdb/builds?env=dev` 这种),
|
|
89
|
+
不然实现的人只会整卡重读([LINKAGE.md](LINKAGE.md) §1 末段)。
|
|
90
|
+
- 面板自己永远不会停在旧值上(允许有延迟,但延迟要说清)。
|
|
91
|
+
- 每一颗"交给 agent"都说清了进到 agent 眼里的那段话是什么。
|
|
92
|
+
|
|
93
|
+
→ 联动场景表:[LINKAGE.md](LINKAGE.md)
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# agent 能力:他能替用户做什么,哪几件要用户点头
|
|
2
|
+
|
|
3
|
+
步骤 2 的参考。写的是"agent 传什么拿回什么、用户看到什么",不是怎么实现。
|
|
4
|
+
|
|
5
|
+
## 1 能力怎么划
|
|
6
|
+
|
|
7
|
+
| 情况 | 结论 |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 同一件事、同一份数据,只是"要不要展开明细" | **一件事**,加一个"展开"的选项(agent 少学一件事,也少花上下文) |
|
|
10
|
+
| 不同的动作、不同的后果(一个只是看,一个会改东西) | **分开** |
|
|
11
|
+
| 用户要反复做、而且每次都得他本人点头 | 别硬拆成一堆小事;考虑封成一个动作(一个按钮 + 一件事) |
|
|
12
|
+
|
|
13
|
+
每件事都要能回答:"用户会怎么跟 agent 说这件事?"
|
|
14
|
+
|
|
15
|
+
## 2 传什么,怎么写清
|
|
16
|
+
|
|
17
|
+
**写法:贴真实的那一段。** 一件能力=真实调用(参数 JSON)+ 真实返回正文(**照抄,不转述**);"大概返回一个列表"这种句子不算写清。参数 schema 也要照抄一份(模型每轮都收到它)。
|
|
18
|
+
|
|
19
|
+
**哪来的"真实"**:能打到平台就**真跑一遍**、把记录粘进来(最好连时间戳一起);打不到就用真实代码产出的输出,并在旁边标明哪些值是样例。**实现之后**换成真机记录。
|
|
20
|
+
|
|
21
|
+
- **字段名用人和 agent 都懂的话**(别用平台内部字段名)。
|
|
22
|
+
- **默认值**:不给他什么,等于什么。
|
|
23
|
+
- **范围**:只认哪几个值(例:严重度只认"严重 / 错误");值不对就拒绝并说清怎么改。
|
|
24
|
+
- **上限**:要多少给多少,**不悄悄截**;超了就说清上限是多少。
|
|
25
|
+
- **该先问谁**:这件事需要先拿到别的东西(先看能流转到哪、先看成员名单),就在描述里指给 agent 看("先调 X 拿到目标值")。
|
|
26
|
+
- **会改变行为的话要留着**:默认只预览、要点头、别连刷、同一个做了一半的接着问。
|
|
27
|
+
|
|
28
|
+
## 3 拿回什么
|
|
29
|
+
|
|
30
|
+
- 只放 **agent 推不出来的事实**:口径 + 数字 / 每一行 + 平台链接 + "要更多明细该走哪一步"。
|
|
31
|
+
- 口径复述、"这是最后一批"、"你打不开链接"这类全删 —— 那是废话。
|
|
32
|
+
- **截断要说清**:截了什么、截了多少、完整的那份在哪。
|
|
33
|
+
- **总数读不到就说读不到**(例:手上这份能力给不出精确总数),不拿这一页冒充实测总数。
|
|
34
|
+
- **每一页都要能往下走**:给能接着问的标识 + 还有多少 + 下一批怎么要。
|
|
35
|
+
- 长编号原样保留(别让它被当成数字,转一次就可能查到别的东西)。
|
|
36
|
+
|
|
37
|
+
## 4 每件事的全场景(一格不许空)
|
|
38
|
+
|
|
39
|
+
每一格写**真实的返回或真实的报错原文**(照抄),不写"会报错说清原因"这类转述 —— 转述会在实现时被重新编一遍。
|
|
40
|
+
|
|
41
|
+
| 情况 | 必须给什么 |
|
|
42
|
+
|---|---|
|
|
43
|
+
| 正常 | 口径 + 数字 / 行 + 链接 |
|
|
44
|
+
| 没有 | 说"没有"并给依据(不是报错)+ 下一步 |
|
|
45
|
+
| 分不清是哪一份 | 把候选举出来让他选;**不许猜、不许悄悄用默认那份** |
|
|
46
|
+
| 参数不对 | 说清哪个字段、该给什么,让 agent 自己能改 |
|
|
47
|
+
| 超出上限 | 拒绝并说清上限 |
|
|
48
|
+
| 能力还没装好 | 缺的是哪一件 + 该去哪更新它 |
|
|
49
|
+
| 平台要登录 / 超时 | 分开说,并给一条重试或去登录的路 |
|
|
50
|
+
| 还有下一批 | 这一页给了什么 + 下一批怎么要 |
|
|
51
|
+
| 太长截断 | 截了什么、多少、完整的那份在哪 |
|
|
52
|
+
| 没有正在做的项目 | 说清这件事按哪个项目取数 |
|
|
53
|
+
|
|
54
|
+
## 5 动手的事:两拍
|
|
55
|
+
|
|
56
|
+
1. **第一拍(预览)**:说清**将要做什么**——哪一个对象、什么值、到哪去;然后请他确认。
|
|
57
|
+
预览的话要让他能判断"要不要做",不是"要不要允许"。
|
|
58
|
+
2. **第二拍(真的做)**:只有他确认之后才真的动平台,并回话说做完了。
|
|
59
|
+
|
|
60
|
+
- 一件事只做一条链路:他按按钮走的和 agent 走的是**同一件事**,结果一样、状态一样。
|
|
61
|
+
- **重复发起要安全**:先看平台上是不是已经有一条(已经建了 / 已经发了),不重复触发;同一对象正在做就接着看那一次,不新开一次。
|
|
62
|
+
|
|
63
|
+
## 6 哪几件要用户点头
|
|
64
|
+
|
|
65
|
+
三条判据,命中任一就要点头:
|
|
66
|
+
|
|
67
|
+
1. 会改**平台上**的东西;
|
|
68
|
+
2. 会改**这台机器**(装 / 卸 / 更新);
|
|
69
|
+
3. 会改**他自己的面板**(加 / 收 / 排序 / 清空)。
|
|
70
|
+
|
|
71
|
+
点头时,用户要看到的是**这次真的会发生什么**:
|
|
72
|
+
|
|
73
|
+
- 哪一个对象、什么值 / 什么版本、到什么环境、影响几台;
|
|
74
|
+
- 一句"这一步会真的做什么"(例:"这一步会真的合并分支");
|
|
75
|
+
- **不是**"这个操作会写数据"这种空话。
|
|
76
|
+
|
|
77
|
+
**硬要求:说不清这次会发生什么,就不许问。**
|
|
78
|
+
|
|
79
|
+
- 缺东西就**先自己去看一遍**(走一遍预览,不真的动),把确定的事实摆出来;
|
|
80
|
+
- 补不齐就**停下**,把原因交给 agent 去查 —— 不许让弹窗指挥用户去指挥 agent;
|
|
81
|
+
- 用户侧不该出现"看不到版本 / 分不清是哪个项目"这类话(他根本不该在这个状态下被问)。
|
|
82
|
+
|
|
83
|
+
## 7 点头的全场景
|
|
84
|
+
|
|
85
|
+
| 情况 | 用户看到什么 | agent 得到什么 |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| 预览(还没到真的做) | 什么都不弹 | 预览的话:将要做什么 |
|
|
88
|
+
| 真的做,且料齐 | 弹出的问话:**这次会发生什么**(几行确定的事实)+ "允许吗" | 等他答 |
|
|
89
|
+
| 料补不齐(没绑定 / 平台读不到 / 关键值缺) | **不弹**(他不该被问) | 停下的原因 → 去查 |
|
|
90
|
+
| 他拒绝 | 弹窗关掉 | 被拒的原因 |
|
|
91
|
+
| 他这一轮没回答就中断了 | 弹窗消失 | 这一轮结束 |
|
|
92
|
+
| 他设了"后台不许问" | 不弹 | 自动不许做(后台不许问,就不许做) |
|
|
93
|
+
| 这件事在他当前项目里没开 | 不弹 | 能力根本不在手上 |
|
|
94
|
+
| 一口气连着要好几件 | 一次一条,逐条问 | 逐条等 |
|
|
95
|
+
| 项目对不上 | 不弹 | 说清是哪个项目的事 |
|
|
96
|
+
| 他点头之后中途情况变了 | 弹窗里的料是当时那一份 | 失败原因要能照做 |
|
|
97
|
+
|
|
98
|
+
问答的按钮、快捷键、弹窗本身都是现成的(不是这个模块自己画);模块能决定的是**里面那块明细画什么**。那块明细要自己排版:**一行一个事实**,别一行塞三句。
|
|
99
|
+
|
|
100
|
+
## 8 用户自己按的那个入口
|
|
101
|
+
|
|
102
|
+
他自己按按钮发起的事**不问他**(是他自己按的),但:
|
|
103
|
+
|
|
104
|
+
- 给他一个最小的确认条(将要做什么 + 取消 / 执行);按下去之后按钮自己变成"正在做…";
|
|
105
|
+
- 做失败留在条里说原因,不假装成功;
|
|
106
|
+
- 和 agent 走的是同一件事、同一个进度、同一个结果。
|
|
107
|
+
|
|
108
|
+
## 9 范例
|
|
109
|
+
|
|
110
|
+
- 先摸清能流转到哪、再动手;预览 → 确认;每一页给下一层的标识;参数错了让 agent 自己能改:`.scratch/coding-analysis/spec.md` §5.2(每一页给下一层的标识)/ §5.3(参数错了让 agent 自己能改)。
|
|
111
|
+
- 封成一个动作的发布:一跳、随时可续、失败给原始输出、点头时把"版本 / 环境 / 配置 / 分支 / 目标主机"摆出来:`.scratch/cmdb-module/spec.md` §5.1(工具与参数)/ §5.2(逐字返回)/ §5.4(点头时他看到什么)/ §6(联动)。
|
|
112
|
+
- 一句话:"只放 agent 推不出来的事实":`.scratch/coding-analysis/spec.md` §5.1 的 token 一条。
|