@dsh-workbench/core 0.3.10 → 0.3.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/README.md +19 -7
- package/bin/dsh-workbench +2 -2
- package/client.js +1648 -973
- package/cordis.patch.yml +60 -35
- package/dist/client/client.body.js +1648 -973
- package/dist/client/index.js +1333 -658
- package/dist/host/index.js +2896 -2334
- package/dist/types/app/client.d.ts +2 -1
- package/dist/types/app/layouts/env-gate/boot-gate.d.ts +1 -1
- package/dist/types/app/layouts/market/use-module-versions.d.ts +13 -2
- package/dist/types/app/layouts/rightbar/MarketView.d.ts +6 -3
- package/dist/types/app/layouts/rightbar/market-act.d.ts +6 -3
- package/dist/types/app/layouts/rightbar/market-settle-hold.d.ts +2 -0
- package/dist/types/app/layouts/rightbar/market-settle.d.ts +20 -0
- package/dist/types/app/layouts/rightbar/market-update-verdict.d.ts +41 -0
- package/dist/types/app/layouts/rightbar/market-view-text.d.ts +4 -1
- package/dist/types/app/layouts/rightbar/store.d.ts +14 -0
- package/dist/types/app/layouts/sidebar/LongTaskDot.d.ts +12 -0
- package/dist/types/app/layouts/sidebar/LongTaskHover.d.ts +12 -0
- package/dist/types/app/layouts/sidebar/edition-boot.d.ts +24 -0
- package/dist/types/app/layouts/sidebar/edition.d.ts +22 -0
- package/dist/types/app/layouts/workbench-settings/ConfigSyncItem.d.ts +5 -0
- package/dist/types/app/layouts/workbench-settings/SettingsItem.d.ts +17 -0
- package/dist/types/app/layouts/workbench-settings/SidebarEditionItem.d.ts +11 -0
- package/dist/types/app/layouts/workbench-settings/WorkbenchSettingsSection.d.ts +11 -0
- package/dist/types/modules/panels/model/approval.d.ts +12 -4
- package/dist/types/modules/panels/model/diy-browser-tools.d.ts +1 -1
- package/dist/types/modules/panels/model/diy-context.d.ts +31 -14
- package/dist/types/modules/panels/model/diy-page.d.ts +3 -2
- package/dist/types/modules/panels/model/diy-record.d.ts +3 -3
- package/dist/types/modules/panels/model/diy-report.d.ts +6 -7
- package/dist/types/modules/panels/model/market-dependency-update.d.ts +21 -0
- package/dist/types/modules/panels/model/market-dispatch.d.ts +1 -0
- package/dist/types/modules/panels/model/market-types.d.ts +1 -0
- package/dist/types/modules/panels/model/market-update-bundle.d.ts +25 -0
- package/dist/types/modules/panels/model/market-verify.d.ts +31 -0
- package/dist/types/modules/panels/unit.d.ts +3 -4
- package/dist/types/shared/api/bundle-install.d.ts +13 -0
- package/dist/types/shared/api/host/approval-gate.d.ts +39 -0
- package/dist/types/shared/api/host/bundle-routes.d.ts +2 -1
- package/dist/types/shared/api/host/diy-artifacts.d.ts +14 -0
- package/dist/types/shared/api/host/diy-modules.d.ts +41 -0
- package/dist/types/shared/api/host/host-routes.d.ts +13 -0
- package/dist/types/shared/api/host/permission-mode.d.ts +9 -0
- package/dist/types/shared/api/host/runtime-seed.d.ts +2 -0
- package/dist/types/shared/api/host/self-update.d.ts +9 -2
- package/dist/types/shared/api/host/sidebar-edition.d.ts +46 -0
- package/dist/types/shared/api/host/workspace-root.d.ts +13 -0
- package/dist/types/shared/api/sidebar-edition.d.ts +14 -0
- package/dist/types/shared/api/unit-board.d.ts +20 -0
- package/dist/types/shared/api/write-outcome.d.ts +15 -0
- package/dist/types/shared/components/IconModules.d.ts +8 -0
- package/dist/types/shared/components/blocker-action.d.ts +16 -0
- package/dist/types/shared/hooks/sidebar-edition.d.ts +7 -0
- package/dist/types/shared/hooks/use-capabilities.d.ts +5 -0
- package/dist/types/shared/hooks/use-capability-gate.d.ts +1 -2
- package/dist/types/shared/hooks/use-host-write.d.ts +1 -1
- package/dist/types/shared/hooks/use-unit-board.d.ts +1 -1
- package/docs/HANDOFF.md +3 -3
- package/docs/OPERATIONS.md +16 -5
- package/package.json +3 -3
- package/preset/diy.patch.yml +2 -2
- package/profile/isolation.patch.yml +11 -0
- package/skills/workbench-module-diy/BUILD.md +62 -131
- package/skills/workbench-module-diy/COPY.md +89 -0
- package/skills/workbench-module-diy/DATASOURCE.md +84 -112
- package/skills/workbench-module-diy/DESIGN.md +75 -109
- package/skills/workbench-module-diy/FAMILY.md +70 -54
- package/skills/workbench-module-diy/KIT.md +77 -133
- package/skills/workbench-module-diy/LINKAGE.md +66 -105
- package/skills/workbench-module-diy/PANEL.md +79 -171
- package/skills/workbench-module-diy/REVIEW.md +67 -81
- package/skills/workbench-module-diy/SKILL.md +57 -96
- package/skills/workbench-module-diy/STEPS.md +66 -69
- package/skills/workbench-module-diy/TOOLING.md +34 -51
- package/skills/workbench-module-diy/TOOLS.md +110 -103
- package/skills/workbench-module-diy/WIRING.md +51 -83
- package/skills/workbench-module-diy/WRITES.md +89 -142
- package/dist/types/app/layouts/config-sync/ConfigSyncSection.d.ts +0 -5
- package/dist/types/shared/api/host/diy-workshop.d.ts +0 -23
- package/dist/types/shared/api/host/workshop-root.d.ts +0 -16
- /package/dist/types/shared/{api/host/diy-workshop.test.d.ts → components/blocker-action.test.d.ts} +0 -0
|
@@ -1,113 +1,74 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: workbench-module-diy
|
|
3
|
-
description:
|
|
3
|
+
description: 在工作台里把当前面板调明白,或者给它造一块新内容 —— 用在「这块板为什么空白 / 这张卡不对 / 它到底发了什么」「我想在面板上看到 X / 加一块卡」「让 agent 替我读或写某个东西」这类话上。用户只说需求,实现由 agent 自己做、自己验过。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# workbench-module-diy
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
| 触发 | 任务 | 前置 |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| 「这块板空白 / 这张卡不对 / 数据不对 / 它到底发了什么」 | 调:查现有面板 | `workbench_diy_panel` / `_status`;动屏要调试约定 |
|
|
11
|
+
| 「我想在面板上看到 X / 加一块卡」 | 造:新建模块 | 一个能放代码的包(没有就问用户) |
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
调交付"面板现在怎么样"的事实;造交付面板上能点开的一块内容。不交技术方案。
|
|
11
14
|
|
|
12
|
-
|
|
13
|
-
2. **问三张表** —— 见 [STEPS.md](STEPS.md)。只问他看得见、能决定的事;**实现一律不问**。
|
|
14
|
-
这一步的产出是 ASCII 画面 + 三张表,不是文字。三张表当场落进模块里的 `design.json`
|
|
15
|
-
(命令与形状:[DESIGN.md](DESIGN.md) §5)—— 只留在对话里等于没定。
|
|
16
|
-
3. **先定数据从哪来** —— [DATASOURCE.md](DATASOURCE.md):干净机器上没有现成 skill 可抄,
|
|
17
|
-
用 `workbench_diy_eval` / `_find` 带 `read=<站点地址>`(跑在 `workbench-read` 上)复用他的登录去探 —— 没在站点上我自己开一次,`not-logged-in` / `not-on-site` 两条码按读线约定归一
|
|
18
|
-
都在那把工具里;探明后**固化成一条读**(`@dsh-workbench/shared/host` 的 `browserRead`)。顺手把三态写掉。
|
|
19
|
-
要 agent **真去改东西**(提交 / 发布 / 建单 / 改配置)的,读完 [WRITES.md](WRITES.md) 再动手:
|
|
20
|
-
四步(现成写命令 → 入参 / 出参来源 → 没有预览档的不许试写 → 写完后回读确认)。
|
|
21
|
-
有写工具就**顺手把审批屏那一屏也画进图里**([DESIGN.md](DESIGN.md) §3 末尾那节 + KIT.md §3):
|
|
22
|
-
标题一句 + `ApprovalPlan` 详情表 —— 那两格的形状是固定的(仓内 ADR-0065,这份指引不链仓内路径)。
|
|
23
|
-
4. **从模板改** —— [BUILD.md](BUILD.md) §1–§2:在工坊里 `dsh-wb-module init` 一个骨架,
|
|
24
|
-
把 `design.json` 里的**三张表与数据源记录先改成你问出来的那份**(`design check` 会点名叫出还空着哪一格),
|
|
25
|
-
再改数据源与渲染。
|
|
26
|
-
**不从零写**。
|
|
27
|
-
命令写成 `pnpm exec dsh-wb-module …`(工坊里 PATH 上也有同名入口,但 `pnpm exec` 到处都对)。
|
|
28
|
-
`init` 完先在工坊里跑一次 `pnpm install`:模板默认带了 dsh 原语那个 devDependency
|
|
29
|
-
([KIT.md](KIT.md) §8),不装 `pnpm typecheck` 会报"找不到模块"。
|
|
30
|
-
5. **自己过门禁** —— `dsh-wb-module build` + `check` + `design check`;
|
|
31
|
-
红了自己修([REVIEW.md](REVIEW.md) 有对照),不抛给他、也不贴报错给他看。
|
|
32
|
-
6. **装上、上板** —— `workbench_diy_install`(`unit=<单元 id>`)装上:
|
|
33
|
-
它只认工坊里造好的那个模块,装完顺手在**这个项目**的面板上打开(装的是这台机器上的东西;**这一步不问审批**,见 [WIRING.md](WIRING.md) §3 —— 别对他说"请你点一下确认",那一拍不会出现)。
|
|
34
|
-
**这一跳永远只走一次**:之后只重建、不重装(宿主侧秒级热换;改了 client.js 刷新一下页面)。
|
|
35
|
-
拿不准它现在走到哪一步(装了没 / 面板认得没 / 这个项目上开着没 / 产物齐不齐 / 源码比产物新没),
|
|
36
|
-
就问工具:`workbench_diy_status`(`unit=<单元 id>`)会把这几件事一次说清并给出下一步 ——
|
|
37
|
-
**别自己拼,也别再装一遍**;已经装过只是想上板,用 `workbench_diy_show`。
|
|
38
|
-
7. **自己验收** —— 逐条对着三张表,在**真卡片**上走「打开哪 → 看什么 → 点什么 → 应该看到什么」。
|
|
39
|
-
要看 / 动**他那一屏**(浏览器那 14 把 + `logs_*`)得先开约定:
|
|
40
|
-
`workbench_diy_debug_start`(`unit=…`;会请他点头一次,他会被告知「调试中请留在那一屏」)——
|
|
41
|
-
**没有这场约定,上面那一族一律当场拒**;不看屏了先 `workbench_diy_debug_pause`,收工 `…_stop`。
|
|
42
|
-
(`workbench_diy_panel` / `_status` 不碰他那一屏,不用开;`_find` / `_eval` 带 `read=` 时也**不碰** —— 那走只读线。)
|
|
43
|
-
走法(全表与参数在 [FAMILY.md](FAMILY.md)):
|
|
44
|
-
- **这一张卡长什么样**:`workbench_diy_screenshot`(要卡那一块就先 `eval` 量盒子、填 `clip`)+
|
|
45
|
-
`workbench_diy_html`(`--as json` 给结构树);
|
|
46
|
-
- **元素与语义**:`workbench_diy_find`(`--css '$card …'`、或 `--role` / `--name`)、`workbench_diy_state`;
|
|
47
|
-
- **动手**:`workbench_diy_click` / `_hover` / `_type` / `_fill` / `_keys` / `_scroll` / `_wait`。
|
|
48
|
-
吃 CSS 的那几把有 `scope`(默认 `page`,`card` 才是这张卡里);portal 出来的那一层(下拉 / 菜单 /
|
|
49
|
-
模态)要用 `scope: 'page'` + `--role menuitem` 按名字点;
|
|
50
|
-
- **派生读数**(对比度 / 被裁 / 可见文本):`workbench_diy_eval`(`in: 'card'` 注入卡根 `root`,脚本自己 `return`);
|
|
51
|
-
- **那一次读的收发包**:`workbench_diy_network`(`--follow` 臂上 → 做那件事 → `--detail <key>` 取 body);
|
|
52
|
-
- **控制台**:`workbench_diy_logs_watch` → 做那件事 → `workbench_diy_logs_read`。
|
|
15
|
+
## 流程
|
|
53
16
|
|
|
54
|
-
|
|
55
|
-
`args: ['<verb>', '--help']` 问它;事实在 `stdout` 里(`ok` 只管进程)。
|
|
56
|
-
哪一条不对,**先取证再改**(`workbench_diy_panel` 一次看清面板上每张卡是读到了、读不到还是崩了;
|
|
57
|
-
四步取证见 [REVIEW.md](REVIEW.md)),改完再走**同一处**。
|
|
58
|
-
逐条都走通了,再 `dsh-wb-module design accept` 把验收打勾(**没走通的不许打勾**;走不通的如实说没验过)。
|
|
59
|
-
审批那一格是**他的**:模块里要用户点头的写能力,得他真用一次时点 —— 你代不了,清单里写清
|
|
60
|
-
「这条要你真用一次」,别打勾说验过。
|
|
61
|
-
验完把结论告诉他:**装好了、面板上哪一格**(不用请他逐条点头 —— 他随时能自己点开看;
|
|
62
|
-
他说哪不对,回到同一处取证再改)。不给他看 diff、日志、代码。
|
|
17
|
+
**0. 认路** —— 跑 `workbench_diy_status`,取 `工作区:<dir>`。
|
|
63
18
|
|
|
64
|
-
|
|
19
|
+
**调** —— 用 [REVIEW.md](REVIEW.md) 的四步取证。动屏前 `workbench_diy_debug_start`(`unit` 可省)。
|
|
20
|
+
抓"点了之后发了什么":`workbench_diy_record_prepare` → 用户操作 → `_record_read`;收工 `_debug_stop` / `_record_stop`。
|
|
21
|
+
不需要源码、工具链、工坊。
|
|
65
22
|
|
|
66
|
-
|
|
67
|
-
|
|
23
|
+
**造** —— 模块落 `<dir>`。那里没有能放代码的包(没 `package.json`,或有但没声明 workspace)时,问用户二选一:
|
|
24
|
+
在这里建 workspace,还是去工坊那个脚手架工作区。不改用户仓库结构。
|
|
25
|
+
从「造一个模块」进入的会话已在工坊里,`<dir>` 就是工坊。
|
|
68
26
|
|
|
69
|
-
|
|
27
|
+
1. **判域** —— [DESIGN.md](DESIGN.md) §0。输出一句结论 + 下一步。
|
|
28
|
+
2. **问三张表** —— 问法见 [STEPS.md](STEPS.md);只问用户能决定的事,实现不问。ASCII 画面 + 三张表当场写进
|
|
29
|
+
`design.json`([DESIGN.md](DESIGN.md) §5)。
|
|
30
|
+
3. **定数据源** —— [DATASOURCE.md](DATASOURCE.md):探明后固化成一条读(`browserRead` / `browserFind`),写三态。
|
|
31
|
+
写操作先读 [WRITES.md](WRITES.md) 四步;有写工具就把审批屏画进 ASCII([DESIGN.md](DESIGN.md) §3 末节)。
|
|
32
|
+
4. **套模板** —— [BUILD.md](BUILD.md) §1–§2:`pnpm exec dsh-wb-module init <unit> --template diy`,
|
|
33
|
+
先把 `design.json` 改成问出来的那份,再改数据源与渲染。init 后 `pnpm install`。不从零写。
|
|
34
|
+
改渲染时文案按 [COPY.md](COPY.md):先判读者(卡片给人 / 描述给 agent / 原始输出进 detail)。
|
|
35
|
+
5. **过门禁** —— `dsh-wb-module build` + `check` + `design check`;红了自己修([REVIEW.md](REVIEW.md)),
|
|
36
|
+
不把报错贴给用户。
|
|
37
|
+
6. **装、上板** —— `workbench_diy_install`(`unit=…`)。只装一次;之后 `dsh-wb-module build` 即可。
|
|
38
|
+
状态不明问 `workbench_diy_status`(`unit=…`);只缺上板用 `workbench_diy_show`。装不问审批。
|
|
39
|
+
7. **验收** —— 对着三张表在真卡片上走「打开哪 → 看什么 → 点什么 → 应该看到什么」。
|
|
40
|
+
看 / 动屏前 `workbench_diy_debug_start`(否则整族拒);`_panel` / `_status` / `read=` 档不用。
|
|
41
|
+
工具全表 [FAMILY.md](FAMILY.md)。走通才 `dsh-wb-module design accept`;走不通如实记"未验"。
|
|
42
|
+
审批项标注「要你真用一次」,不打勾。结论只报:已装、在面板哪一格。
|
|
70
43
|
|
|
71
|
-
|
|
72
|
-
|---|---|
|
|
73
|
-
| 判这个需求该不该在这里做 | [DESIGN.md](DESIGN.md) §0 |
|
|
74
|
-
| 两条分工、三张表、怎么用 ASCII 跟他说话 | [DESIGN.md](DESIGN.md) |
|
|
75
|
-
| 步骤 1 / 2 / 3 各自问什么、什么时候算做完 | [STEPS.md](STEPS.md) |
|
|
76
|
-
| **数据从哪来**(干净机器上怎么找到那一条读) | [DATASOURCE.md](DATASOURCE.md) |
|
|
77
|
-
| **要 agent 真去改东西**(提交 / 发布 / 建单 / 改配置:写通道四步) | [WRITES.md](WRITES.md) |
|
|
78
|
-
| 面板上该有什么、状态矩阵怎么写、界面习惯 | [PANEL.md](PANEL.md) |
|
|
79
|
-
| **要做什么 → 用哪件 kit → 最小写法**(照抄面) | [KIT.md](KIT.md) |
|
|
80
|
-
| **kit / dsh 原语里到底有什么、某一件怎么用**(DIY 会话里直接调这把工具) | `workbench_diy_components`(`name=Button` 回它的类型文件与声明;工程域用 `check --only kit` · `--only primitives`)· [KIT.md](KIT.md) §8 |
|
|
81
|
-
| **kit 那些 hook 怎么搭**(四个场合、一格卡片怎么拼) | [KIT.md](KIT.md) §4′(逐件的 API 看 `.d.ts` 的 JSDoc 或 `workbench_diy_components`) |
|
|
82
|
-
| 能力怎么划、传什么拿回什么、哪几件要点头 | [TOOLS.md](TOOLS.md) |
|
|
83
|
-
| **工坊会话里那 33 把的全表**(枚举 opencli 的 14 把 + 看/装/探 + 调试约定 + 录制交接、参数与如实边界) | [FAMILY.md](FAMILY.md) |
|
|
84
|
-
| agent 动完面板哪一格变、他正在干的时候看哪儿 | [LINKAGE.md](LINKAGE.md) |
|
|
85
|
-
| 落点、文件形状、命令、两个面 | [BUILD.md](BUILD.md) |
|
|
86
|
-
| 依赖、会被拦的写法、装、热换、发布 | [WIRING.md](WIRING.md) |
|
|
87
|
-
| 门禁红了、装上去没反应、改完没热换 | [REVIEW.md](REVIEW.md) |
|
|
88
|
-
| 用户说"卡片不对 / 一片空白 / 一直转圈"(四步取证) | [REVIEW.md](REVIEW.md) 那一节 · `workbench_diy_panel`(``) |
|
|
89
|
-
| 哪条纪律已经固化成工具、哪些还留给 agent | [TOOLING.md](TOOLING.md) |
|
|
44
|
+
## 索引
|
|
90
45
|
|
|
91
|
-
|
|
46
|
+
| 需要 | 读 |
|
|
47
|
+
|---|---|
|
|
48
|
+
| 判域、分工、三张表、ASCII 规则 | [DESIGN.md](DESIGN.md) |
|
|
49
|
+
| 三步的问法、产出、完成判据 | [STEPS.md](STEPS.md) |
|
|
50
|
+
| 探测数据源、固化读、错误码 | [DATASOURCE.md](DATASOURCE.md) |
|
|
51
|
+
| 写通道四步、回读、撤销 | [WRITES.md](WRITES.md) |
|
|
52
|
+
| 面板内容、状态矩阵、界面规则 | [PANEL.md](PANEL.md) |
|
|
53
|
+
| 选 kit 组件、表单、hooks | [KIT.md](KIT.md) |
|
|
54
|
+
| agent 能力、审批、长任务、外部供给 | [TOOLS.md](TOOLS.md) |
|
|
55
|
+
| 文案:三类读者、主句 / 原文、人 / agent / 开发 | [COPY.md](COPY.md) |
|
|
56
|
+
| DIY 工具族的参数与返回 | [FAMILY.md](FAMILY.md) |
|
|
57
|
+
| 面板何时刷新、事实名 | [LINKAGE.md](LINKAGE.md) |
|
|
58
|
+
| 落点、模板文件、命令、两个面 | [BUILD.md](BUILD.md) |
|
|
59
|
+
| 依赖、禁区、安装、热换、发布 | [WIRING.md](WIRING.md) |
|
|
60
|
+
| 门禁报错、卡片故障取证 | [REVIEW.md](REVIEW.md) |
|
|
61
|
+
| 哪些检查已固化成命令 | [TOOLING.md](TOOLING.md) |
|
|
92
62
|
|
|
93
|
-
|
|
94
|
-
「外壳的 kit 里到底有什么组件 / hooks」「dsh 原语里有什么、某一件怎么用」在工坊会话里直接调
|
|
95
|
-
`workbench_diy_components`(不填给清单,`name=Button` 回它的类型文件与声明);工程域用
|
|
96
|
-
`check --only kit` · `check --only primitives`(`--all` 全表、`--json` 机器档)。
|
|
97
|
-
2. **再看模板**:已经有一个同形状、能跑的最小实现,比任何描述都准 ——
|
|
98
|
-
在你工坊的 `node_modules/@dsh-workbench/module-tools/template-diy/`(带真数据源的样板)
|
|
99
|
-
与 `template/`(空壳)里,原文都是可读的。
|
|
100
|
-
3. **最后看你装的那份外壳**:`node_modules/@dsh-workbench/core/dist/types/**` 是它的类型面,
|
|
101
|
-
`node_modules/@dsh-workbench/core/skills/workbench-module-diy/**` 就是这份指引。
|
|
102
|
-
它的 README 与 `docs/HANDOFF.md` / `docs/OPERATIONS.md` 也在包里。
|
|
63
|
+
## 查不到时
|
|
103
64
|
|
|
104
|
-
|
|
105
|
-
|
|
65
|
+
1. `dsh-wb-module check --only <判据>` 的报错原文。
|
|
66
|
+
2. kit / dsh 原语:`workbench_diy_components`(DIY 会话);工程域 `check --only kit` / `--only primitives`。
|
|
67
|
+
3. 模板:`node_modules/@dsh-workbench/module-tools/template-diy/` 与 `template/`。
|
|
68
|
+
4. 安装包的类型面:`node_modules/@dsh-workbench/core/dist/types/**`;本指引:`node_modules/@dsh-workbench/core/skills/workbench-module-diy/**`。
|
|
106
69
|
|
|
107
|
-
##
|
|
70
|
+
## 硬约束
|
|
108
71
|
|
|
109
|
-
-
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
- **源码里只许 JSDoc,且贴着导出**(用法住在声明里,tsc 把它搬进 `.d.ts`);`//`、实现里的解释、
|
|
113
|
-
以及 `.css` 里的注释照旧不许有。要说的"为什么"写进模块自己的 `README.md` 或 spec。
|
|
72
|
+
- dsh 已有的从 `kit` 拿(`@dsh-workbench/core/client`);不手搓 DOM + CSS,不直接 import dsh 的包。
|
|
73
|
+
- DIY 模块 `private: true`,不发任何源。
|
|
74
|
+
- 源码只许贴导出的 JSDoc;`//`、实现内注释、`.css` 注释都不许。理由写模块 `README.md` 或 spec。
|
|
@@ -1,97 +1,94 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 三步:问什么、产出什么、何时算完
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
每一步的结果当场写进 `design.json`:`panel` / `states` / `config` / `capabilities` / `linkage` /
|
|
4
|
+
`datasource` / `reads[]` / `writes[]` / `acceptance`。`design check` 列出空格。
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
能力 = `capabilities`、联动 = `linkage`、数据源 = `datasource` / `reads[]`、写通道 = `writes[]`(单条可写 `write{}`)、验收 = `acceptance`。
|
|
7
|
-
`dsh-wb-module design check` 会把空着的格列出来 —— **只留在对话里等于没定**。
|
|
6
|
+
## 步骤 1 — 面板
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
一次问一组,每组给推荐答案:
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
- 打开面板第一眼看到什么?拿它做什么决定?
|
|
11
|
+
- 哪些事要能自己配?配完看到什么不同?
|
|
12
|
+
- 哪些事一定会说给 agent 听?原话是什么?
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
- 哪些事他要能自己配?配完以后,他看到的会有什么不同?
|
|
15
|
-
- 哪些事他一定会说给 agent 听?**那句话原文**是什么?
|
|
14
|
+
定四件事:
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
1. **展示清单**,每条一句人话:这一格是什么 / 一眼得出什么结论 / 点一下去哪。详情、评论、流转、日志不在面板做。
|
|
17
|
+
2. **配置清单**:管什么 / 默认 / 候选从哪来 / 选错怎样 / 按项目记 / 何时生效 / 怎么清。
|
|
18
|
+
3. **分流**:反复做且要动平台的 → 交给 agent;多步、长等、中途要人、失败要续的 → 封成一个动作(按钮 + 交给 agent 的入口);
|
|
19
|
+
只是看 → 只读。
|
|
20
|
+
4. **状态矩阵**:每态「看到什么 / 能做什么 / agent 能接着做什么」。
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
2. **配置清单**:用他的话说清 这管什么 / 默认是什么 / 他能选的值从哪来 / 选错了会怎样 / 按项目分别记 / 他自己按的才生效 / 怎么清掉。
|
|
21
|
-
3. **分流**:他会反复做、要动平台上东西的事 → 交给 agent;一次要动好几下、要等很久、中途要他登录或点头、失败要能接着来的 → 封成一个动作,给他一个按钮(+ 一个交给 agent 的入口);只是看看 → 只读呈现。
|
|
22
|
-
4. **状态矩阵**:每种状态下"屏幕上是什么 + 他能做什么 + agent 能接着做什么"。
|
|
22
|
+
产出:ASCII 画面(卡片、设置面、每种状态)+ 状态矩阵(左列图号)+ 图例。
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
判据:
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
- 用户对着图确认过每种状态,或指出哪格不对。
|
|
27
|
+
- 每格是用户看得见或能操作的事,没有"系统内部会…"。
|
|
28
|
+
- 矩阵每个词都能在图例里指到屏幕;图例不能只是同义词。
|
|
29
|
+
- 每种缺失有一句可照做的话:缺什么、去哪补、谁补。
|
|
30
|
+
- 每个控件对应一句用户会对 agent 说的话,界面上有该句的位置。
|
|
31
|
+
- 真机造不出的状态也有设计。
|
|
27
32
|
|
|
28
|
-
|
|
29
|
-
- 表里每一格都是他**看得见或能操作**的事,没有一句"系统内部会…"。
|
|
30
|
-
- 矩阵里每个词都在图例里指到了屏幕上的样子;没有图例,或图例里只有同义词,都算没写完。
|
|
31
|
-
- 每种缺失都有一句**能照做**的话:缺什么、去哪补、谁补(他 / agent / 平台)。
|
|
32
|
-
- 每个控件都能翻译成一句他对 agent 说的话,且那句话在界面上有位置。
|
|
33
|
-
- 每种状态都有设计 —— 真机上造不出来的那些也要写。
|
|
33
|
+
→ [PANEL.md](PANEL.md)
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
## 步骤 2 — agent 能力
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
先问:
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
- 用户会怎么说这件事?agent 需要先知道什么?
|
|
40
|
+
- agent 做完,用户需要知道什么?
|
|
41
|
+
- 哪些是真动手、必须先点头?点头时要看到什么?
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
- agent 做完,他需要知道什么?
|
|
43
|
-
- 哪几件是**真的动手了**、他必须先点头?点头时他想看到什么,才敢点?
|
|
43
|
+
定五件事:
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
1. **能力清单**:每件事一句"agent 能做什么";说明为何是独立的事,而不是某件事的选项。
|
|
46
|
+
2. **入参 / 返回**:贴真实调用(参数 JSON)与真实返回正文(照抄)。补默认值、上限(不悄悄截)、
|
|
47
|
+
取值范围、给错怎么改。
|
|
48
|
+
3. **全场景**:正常 / 没有 / 分不清是哪一份(不许猜)/ 参数错 / 超上限 / 能力未装好 / 要登录或超时 /
|
|
49
|
+
还有下一批 / 截断(说清截了什么、多少)/ 没有当前项目。
|
|
50
|
+
4. **写操作两拍**:先预览(说清将要做什么),再执行。预览让用户判断"要不要做",不是"要不要允许"。
|
|
51
|
+
5. **点头范围**:改平台 / 改这台机器 / 改面板。点头时展示这次具体发生什么(对象、版本、环境);
|
|
52
|
+
说不清就不问,停下让 agent 去查。
|
|
46
53
|
|
|
47
|
-
|
|
48
|
-
2. **传什么 / 拿回什么**:**贴真实的那一段** —— 真实调用(参数 JSON)+ 真实返回正文(**照抄,不转述**),再附默认值(不给等于什么)、上限(要多少给多少,**不悄悄截**)、范围(只认哪几个值)、给错怎么改。凡是"大概是这样的",都不算。
|
|
49
|
-
3. **每件事的全场景**:正常 / 没有 / **说不清是哪一份**(不许猜,让他选)/ 参数不对 / 超出上限 / 能力还没装好 / 平台要登录或超时 / 还有下一批 / 太长截断了(说清截了什么、多少)/ 没有正在做的项目。
|
|
50
|
-
4. **动手的事分两拍**:先预览(说清**将要做什么**,让他确认),再真的做。预览的话要让他能判断"要不要做",不是"要不要允许"。
|
|
51
|
-
5. **哪几件要点头**:会改平台上东西的、会改这台机器的、会改他面板的。
|
|
52
|
-
- 点头时他要看到**这次真的会发生什么**(哪一个对象、什么版本、到什么环境),不是"这个操作会写数据"。
|
|
53
|
-
- **说不清这次会发生什么就不许问**:停下,把原因告诉 agent 让它去查 —— 用户不该为一个看不清的后果点头。
|
|
54
|
+
产出:真实调用与返回,逐条贴出。能连平台就真跑;不能就用真实代码输出并标注样例。
|
|
54
55
|
|
|
55
|
-
|
|
56
|
+
判据:
|
|
56
57
|
|
|
57
|
-
|
|
58
|
+
- 每种情况有确定结果;拒绝文案带 agent 可执行的下一步。
|
|
59
|
+
- 入参与返回照抄;边界给真实报错原文。
|
|
60
|
+
- 分不清的那格不许猜、不许退回默认。
|
|
61
|
+
- 截断、越界、分页说清边界与下一批。
|
|
62
|
+
- 点头格写"会发生什么",不写"这是什么操作"。
|
|
63
|
+
- 用户自按入口不点头,但与 agent 同一条链路、同一结果。
|
|
58
64
|
|
|
59
|
-
|
|
60
|
-
- 每一件都贴着**真实调用与真实返回**(照抄的正文,不是转述);边界情况给的是**真实的报错原文**。
|
|
61
|
-
- "说不清是哪一份"这一格不许猜,也不许悄悄退回默认。
|
|
62
|
-
- 截断、越界、分页都说清了边界在哪、下一批怎么拿。
|
|
63
|
-
- 点头那一格写的是"会发生什么",不是"这是什么操作";补不齐后果的那条路是**停下**,不是硬问。
|
|
64
|
-
- 用户自己按的那个入口不需要点头,但和 agent 走的是同一件事、看到同一个结果。
|
|
65
|
+
→ [TOOLS.md](TOOLS.md)
|
|
65
66
|
|
|
66
|
-
|
|
67
|
+
## 步骤 3 — 联动
|
|
67
68
|
|
|
68
|
-
|
|
69
|
+
先问:
|
|
69
70
|
|
|
70
|
-
|
|
71
|
+
- agent 改完,多久看到、哪一格变?
|
|
72
|
+
- agent 只读,面板是否变、变哪格?(口径 [LINKAGE.md](LINKAGE.md) §1)
|
|
73
|
+
- agent 跑几分钟时,用户看哪?
|
|
74
|
+
- 点"交给 agent"后,agent 拿到什么?
|
|
71
75
|
|
|
72
|
-
|
|
73
|
-
- agent 只是**读**了一下(看一眼),面板该不该动、动哪一格?(口径:读的是这一格 → 这一格变;
|
|
74
|
-
读的是面板上没有的东西 → 不动。见 [LINKAGE.md](LINKAGE.md) §1)
|
|
75
|
-
- agent 正在干(要几分钟)的时候,他看哪儿?
|
|
76
|
-
- 他点"交给 agent"之后,agent 手上拿到的是什么?
|
|
76
|
+
定五件事:
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
1. **何时变**:读这一格 → 该格按最窄切片重读,值与对话一致;读面板外的东西(明细 / 日志 / 子集)→ 不变;
|
|
79
|
+
预览 → 不变;真写 → 该格新值;用户自按 → 立刻变。
|
|
80
|
+
2. **进行中**:显示到哪步;要登录给链接;失败给原因与原始输出。不画进度条、不画流程控制台。
|
|
81
|
+
3. **交给 agent 的内容**:哪一类、哪个对象、多少,加一句用哪个能力取明细。
|
|
82
|
+
4. **收起模块 = 该项目内 agent 也失去该能力**,开始时说明。
|
|
83
|
+
5. **不陈旧**:切项目、别的窗口在改、程序刚更新,三者要么实时要么说清。
|
|
79
84
|
|
|
80
|
-
|
|
81
|
-
2. **正在干的时候**:显示到哪一步、要登录给他链接、失败给他原因和原始输出;**不画进度条、不画流程控制台**。
|
|
82
|
-
3. **"交给 agent"之后 agent 拿到什么**:哪一类、哪个对象、多少,加一句"该用哪个能力再往下拿"(agent 打不开面板上那个 ↗,明细得靠它自己再问一次)。
|
|
83
|
-
4. **收起模块 = 这个项目里 agent 也做不了这件事**,要在一开始就说清。
|
|
84
|
-
5. **面板凭什么不旧**:切项目、别的窗口也在改、程序刚更新过 —— 这三种都要么实时、要么说清。
|
|
85
|
+
产出:"变之前 / 变之后"两张 ASCII + 联动表(何时变、哪格变)。
|
|
85
86
|
|
|
86
|
-
|
|
87
|
+
判据:
|
|
87
88
|
|
|
88
|
-
|
|
89
|
+
- 用户对着两张图看过一次真实变化。
|
|
90
|
+
- 每格说清"何时变、哪格变、看到什么";"哪一格"细到"某投影 + 最窄参数"(`cmdb/builds?env=dev`)。
|
|
91
|
+
- 面板不停在旧值;允许延迟但要说清。
|
|
92
|
+
- 每个"交给 agent"都说清 agent 收到的内容。
|
|
89
93
|
|
|
90
|
-
|
|
91
|
-
- 每一格都说清"什么时候变、哪一格变、用户看到什么",没有"刷新一下"这类模糊说法;
|
|
92
|
-
"哪一格"要细到能落成"某条投影 + 最窄那个参数"(`cmdb/builds?env=dev` 这种),
|
|
93
|
-
不然实现的人只会整卡重读([LINKAGE.md](LINKAGE.md) §1 末段)。
|
|
94
|
-
- 面板自己永远不会停在旧值上(允许有延迟,但延迟要说清)。
|
|
95
|
-
- 每一颗"交给 agent"都说清了进到 agent 眼里的那段话是什么。
|
|
96
|
-
|
|
97
|
-
→ 联动场景表:[LINKAGE.md](LINKAGE.md)
|
|
94
|
+
→ [LINKAGE.md](LINKAGE.md)
|
|
@@ -1,55 +1,38 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 命令 vs 判断
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
`WIRING.md` / `REVIEW.md` / `DATASOURCE.md` / `DESIGN.md`)与**工具面**之间的对照表。判据只有一条:
|
|
3
|
+
机器能判定的用命令;需要判断的留给 agent。
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
## 用命令
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
以及**手上这件事能不能也做成工具**(判断类的别做)。
|
|
10
|
-
|
|
11
|
-
## 机器判的(跑一次就有答案)
|
|
12
|
-
|
|
13
|
-
| 纪律(出处) | 固化形态 |
|
|
7
|
+
| 要得到 | 命令 |
|
|
14
8
|
|---|---|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
- **问三张表**:用他的词问、把决定翻译成"你会看到什么"、取舍与口径
|
|
46
|
-
- **探数时的创造性**:找哪个列表页、看哪个 XHR("怎么读一次"已固化,见上表)
|
|
47
|
-
- **信息设计与排版**:一屏放什么、结论放哪、字少到什么程度 —— [PANEL.md](PANEL.md)
|
|
48
|
-
- **安全取舍**:"说不清这次会发生什么就不许问" —— [TOOLS.md](TOOLS.md) §6
|
|
49
|
-
- **联动颗粒度**:动的是整卡、某一行、还是某一列 —— [LINKAGE.md](LINKAGE.md) §1
|
|
50
|
-
(工具只能保证"形状对","该多窄"是判断)
|
|
51
|
-
- **停不停得了**:那颗停止钮画不画(`LongTaskRow` 的 `stop`)、`run` 收到的 `signal` 认不认
|
|
52
|
-
([TOOLS.md](TOOLS.md) §9)—— 判据只看形状;"外壳把这一趟标成 `stopped`、你的活儿还在跑"这件事
|
|
53
|
-
机器看不出来,是模块自己的取舍
|
|
54
|
-
|
|
55
|
-
工具只负责把**事实**摆出来(状态、报错原文、预览结果),判断仍然是人 / agent 的事。
|
|
9
|
+
| 十三条判据 | `dsh-wb-module check`(`--only <判据>`) |
|
|
10
|
+
| 骨架 | `dsh-wb-module init --template diy` |
|
|
11
|
+
| 语法卫生修复 | `dsh-wb-module lint [--fix]` |
|
|
12
|
+
| 三张表空格 / README / 验收 | `design check` / `render` / `accept` |
|
|
13
|
+
| kit 成员与用法 | `workbench_diy_components`(`name=…`、`bucket=icons`);工程域 `check --only kit` |
|
|
14
|
+
| dsh 原语 | `check --only primitives`(`--all` / `--file <名>` / `--json`) |
|
|
15
|
+
| 模块是否起得来 | `workbench_diy_status` |
|
|
16
|
+
| 面板运行态 | `workbench_diy_panel` |
|
|
17
|
+
| 安装 / 上板 | `workbench_diy_install` / `_show` / `_status` |
|
|
18
|
+
| 屏操作约定 | `workbench_diy_debug_start`(否则 14 把 + `logs_*` 拒) |
|
|
19
|
+
| 录制写请求 | `_record_prepare` → `_record_read` → `_record_stop` |
|
|
20
|
+
| 控制台 / 网络 | `_logs_watch` / `_read` / `_stop`;`_network`(body 用 `_eval` 的 fetch) |
|
|
21
|
+
| 审批声明 | `writes: true` + `needsApproval` + `approvalDetail`(`contracts` 查) |
|
|
22
|
+
| 长任务 | `longTasks` + `useLongTask` / `LongTaskRow`(`contracts` 查形状) |
|
|
23
|
+
| 外部依赖 | `manifest.env` + `libInstallCommand`(`contracts` 查) |
|
|
24
|
+
| 配置持久化 | `config[].persistence` |
|
|
25
|
+
| 联动事实 | `factsOf` + `factOfRoute` / `context` / `warmReads` / `values`(`contracts` 查形状) |
|
|
26
|
+
| 发布预检 | `dsh-wb-module publish`(dry run) |
|
|
27
|
+
|
|
28
|
+
## 留给 agent
|
|
29
|
+
|
|
30
|
+
- 判域([DESIGN.md](DESIGN.md) §0)。
|
|
31
|
+
- 用用户语言问三张表、把决定翻译成"你会看到什么"([STEPS.md](STEPS.md))。
|
|
32
|
+
- 探测数据位置(列表页、XHR)([DATASOURCE.md](DATASOURCE.md))。
|
|
33
|
+
- 信息设计与排版([PANEL.md](PANEL.md))。
|
|
34
|
+
- 审批的安全取舍:说不清后果就不问([TOOLS.md](TOOLS.md) §6)。
|
|
35
|
+
- 联动粒度:整卡 / 行 / 列([LINKAGE.md](LINKAGE.md) §1)。
|
|
36
|
+
- 停止钮画不画、是否响应 signal([TOOLS.md](TOOLS.md) §9)。
|
|
37
|
+
|
|
38
|
+
工具只给事实(状态、报错原文、预览),判断归 agent。
|