@dazitech/cli 3.0.0 → 3.0.1

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.
Files changed (58) hide show
  1. package/README.md +15 -13
  2. package/dist/clis/dazi-app.js +5 -5
  3. package/dist/clis/dazi-flow.js +600 -170
  4. package/dist/docs/app/app-init.md +15 -15
  5. package/dist/docs/app/build-upload.md +13 -13
  6. package/dist/docs/app/release-guide.md +9 -9
  7. package/dist/docs/app//344/270/273/350/246/201/350/264/242/345/212/241/346/214/207/346/240/207/345/244/215/346/235/202/346/212/245/350/241/250/345/274/200/345/217/221/345/256/236/350/267/265.md +45 -41
  8. package/dist/docs/auth/auth-login.md +4 -4
  9. package/dist/docs/auth/token-management.md +5 -5
  10. package/dist/docs/data/cube-guide.md +2 -2
  11. package/dist/docs/data/data-spaces.md +4 -3
  12. package/dist/docs/data/table-preview.md +6 -6
  13. package/dist/docs/flow/ai-workflow-playbook.md +69 -0
  14. package/dist/docs/flow/flow-project-guide.md +92 -87
  15. package/dist/docs/flow/flows-guide.md +98 -94
  16. package/dist/docs/flow/local-files-spec.md +194 -0
  17. package/dist/docs/flow/node-code-guide.md +57 -55
  18. package/dist/docs/flow/run-guide.md +18 -18
  19. package/dist/docs/flow/variables-guide.md +61 -61
  20. package/dist/docs/flow//346/265/201/347/250/213/345/274/200/345/217/221/346/234/200/344/275/263/345/256/236/350/267/265-VS-flow0/346/241/210/344/276/213.md +31 -31
  21. package/dist/docs/guides/cli-invocation.md +30 -29
  22. package/dist/docs/guides/cli-reference.md +72 -71
  23. package/dist/docs/guides/flow-consistency-checklist.md +42 -0
  24. package/dist/docs/guides/mcp-setup.md +34 -34
  25. package/dist/docs/guides/migrate-v2-v3.md +6 -5
  26. package/dist/docs/guides/quickstart.md +8 -8
  27. package/dist/docs/guides/troubleshooting.md +39 -21
  28. package/dist/docs/guides/workspace-v3.md +17 -17
  29. package/dist/docs/index.json +18 -6
  30. package/dist/docs/onto/action-guide.md +4 -3
  31. package/dist/docs/onto/dazi_script_sdk_reference.md +20 -14
  32. package/dist/docs/onto/dazi_script_seed_data_guide.md +14 -14
  33. package/dist/docs/onto/function-guide.md +5 -5
  34. package/dist/docs/onto/rule-guide.md +7 -6
  35. package/dist/docs/onto/space-management.md +5 -3
  36. package/dist/docs/onto//346/234/254/344/275/223/350/204/232/346/234/254/347/274/226/345/206/231/346/214/207/345/215/227.md +35 -35
  37. package/dist/docs/onto//346/234/254/344/275/223/350/247/204/345/210/222/346/214/207/345/215/227.md +21 -21
  38. package/dist/docs/onto//350/247/204/345/210/222/347/244/272/344/276/213_/345/210/251/346/266/246/345/210/206/346/236/220/346/234/254/344/275/223/346/226/271/346/241/210.md +11 -11
  39. package/dist/examples/flow/minimal-excel-python/README.md +5 -0
  40. package/dist/examples/flow/minimal-excel-python/flow.json +48 -0
  41. package/dist/examples/flow/minimal-excel-python/flow.meta.json +23 -0
  42. package/dist/examples/flow/minimal-excel-python//350/212/202/347/202/271/Excel/347/244/272/344/276/213/code.py +7 -0
  43. package/dist/examples/flow/minimal-excel-python//350/212/202/347/202/271/Excel/347/244/272/344/276/213/node.info.json +14 -0
  44. package/dist/examples/index.json +6 -0
  45. package/dist/prompts/data/data-analysis.md +2 -2
  46. package/dist/prompts/flow/ai-workflow-playbook.md +69 -0
  47. package/dist/prompts/flow/flow-design.md +33 -19
  48. package/dist/prompts/flow/plan-generate.md +7 -7
  49. package/dist/prompts/flow/run-debug.md +15 -15
  50. package/dist/prompts/flow/run-fix-loop.md +20 -17
  51. package/dist/prompts/general/ask-dazi.md +6 -6
  52. package/dist/prompts/general/troubleshoot.md +4 -3
  53. package/dist/prompts/index.json +1 -0
  54. package/dist/prompts/onto/action-design.md +7 -5
  55. package/dist/prompts/onto/function-design.md +6 -4
  56. package/dist/prompts/onto/rule-seed.md +4 -2
  57. package/dist/prompts/onto/script-publish-run.md +19 -19
  58. package/package.json +1 -1
@@ -7,15 +7,16 @@
7
7
 
8
8
  ## 1. 定位与核心约定
9
9
 
10
- | 维度 | 说明 |
11
- |------|------|
12
- | CLI 入口 | `.\scripts\dazi.ps1 flow …` → `dazi-flow`(Trae / VS Code / Cursor 交付环境) |
13
- | 工作区 | `dazi-work` + `项目/flow_<名>/` |
14
- | 本地流程树 | `流程/<名>/flow.json` + `节点/<名>/code.*` |
15
- | 画布真理源 | **`flow.json`**(= 平台 `config_json` 镜像,代码已剥离) |
16
- | 代码真理源 | **`节点/<名>/code.sql|py`** + `node push` |
17
- | 主交互 | **资源管理器右键** + MVP 流程设计器 |
18
- | AI | **Cursor 侧读文件** + `dazi-flow mcp` |
10
+ | 维度 | 说明 |
11
+ | ---------- | --------------------------------------------------------------- | ------------------- |
12
+ | CLI 入口 | `dazi flow …` → `dazi-flow`(Trae / VS Code / Cursor 交付环境) |
13
+ | **本地文件** | **[流程本地文件规范](./local-files-spec.md)**(AI 必读) |
14
+ | 工作区 | `dazi-work` + `项目/flow_<名>/` |
15
+ | 本地流程树 | `流程/<名>/flow.json` + `节点/<名>/code.*` |
16
+ | 画布真理源 | **`flow.json`**(= 平台 `config_json` 镜像,代码已剥离) |
17
+ | 代码真理源 | \*\*`节点/<名>/code.sql | py`** + `node push` |
18
+ | 主交互 | **资源管理器右键** + MVP 流程设计器 |
19
+ | AI | **Cursor 侧读文件** + `dazi-flow mcp` |
19
20
 
20
21
  API 根路径:**`{serverUrl}/api/data-pipelines/v1`**(搭子数据流程引擎)。
21
22
 
@@ -36,7 +37,7 @@ dazi-work/
36
37
  └── 客户数据清洗/ ← 一个流程 = 一个目录
37
38
  ├── 快速启动_<流程名>.md pull 后生成(flowId、常用命令、AI 单文件入口)
38
39
  ├── flow.json ★ 画布(节点配置 + 边,不含代码正文)
39
- ├── flow.meta.json flowId、uuid 映射、代码指纹
40
+ ├── flow.meta.json flowId、uuid 映射、代码指纹(pull / node new / repair-meta 维护,勿手改)
40
41
  ├── 节点/
41
42
  │ └── SQL查询/
42
43
  │ ├── code.sql ★ 代码唯一真理源
@@ -55,12 +56,12 @@ dazi-work/
55
56
 
56
57
  ---
57
58
 
58
- ## 3. CLI 怎么跑:`dazi.ps1` 与 `dazi-flow`
59
+ ## 3. CLI 怎么跑:全局 `dazi` 与 bundled
59
60
 
60
61
  ### 3.1 调用链(Trae / VS Code / Cursor 交付环境)
61
62
 
62
63
  ```text
63
- .\scripts\dazi.ps1 flow <子命令...>
64
+ dazi flow <子命令...>
64
65
 
65
66
  ▼ node bundled/clis/dazi.js
66
67
  │ (设置 DAZI_BUNDLED_DIR,cwd = dazi-work 根)
@@ -68,33 +69,33 @@ dazi-work/
68
69
  forward → node bundled/clis/dazi-flow.js <子命令...>
69
70
  ```
70
71
 
71
- - **没有**全局 `dazi-flow` 命令;与本体一致,统一走 **`.\scripts\dazi.ps1`**。
72
+ - **没有**全局 `dazi-flow` 命令;与本体一致,统一走 **`dazi`**。
72
73
  - 扩展侧栏/右键菜单与上述 CLI **同源**(同一套 bundled `dazi-flow.js`)。
73
- - 首次使用:在 **`dazi-work` 根**执行 `.\scripts\doctor-cli.ps1` → `.\scripts\dazi.ps1 auth login`。
74
+ - 首次使用:在 **`dazi-work` 根**执行 `.\scripts\doctor-cli.ps1` → `dazi auth login`。
74
75
 
75
76
  ### 3.2 命令写法对照
76
77
 
77
- | 文档/扩展内部 | 在 `dazi-work` 根目录终端 |
78
- |---------------|---------------------------|
79
- | `dazi-flow project pull …` | `.\scripts\dazi.ps1 flow project pull …` |
80
- | `dazi-flow node push …` | `.\scripts\dazi.ps1 flow node push …` |
81
- | `dazi-flow run node-exec …` | `.\scripts\dazi.ps1 flow run node-exec …` |
82
- | `dazi-flow variable pull …` | `.\scripts\dazi.ps1 flow variable pull …` |
78
+ | 文档/扩展内部 | 在 `dazi-work` 根目录终端 |
79
+ | --------------------------- | --------------------------- |
80
+ | `dazi-flow project pull …` | `dazi flow project pull …` |
81
+ | `dazi-flow node push …` | `dazi flow node push …` |
82
+ | `dazi-flow run node-exec …` | `dazi flow run node-exec …` |
83
+ | `dazi-flow variable pull …` | `dazi flow variable pull …` |
83
84
 
84
85
  **工作目录技巧**:多数命令支持 `--dir <流程目录>`。也可 **`cd` 到流程目录**后省略 `--dir`(cwd 即 `流程/<名>/`)。
85
86
 
86
87
  ```powershell
87
88
  # 在 dazi-work 根
88
89
  cd D:\path\to\dazi-work
89
- .\scripts\dazi.ps1 auth whoami
90
+ dazi auth whoami
90
91
 
91
92
  # 拉取平台流程到本地(首次)
92
- .\scripts\dazi.ps1 flow project pull --flow 98 --dir "项目\flow_流程项目01\流程\MyFlow0529"
93
+ dazi flow project pull --flow 98 --dir "项目\flow_流程项目01\流程\MyFlow0529"
93
94
 
94
95
  # 进入流程目录后,后续命令可省略 --dir
95
96
  cd "项目\flow_流程项目01\流程\MyFlow0529"
96
- .\scripts\dazi.ps1 flow project status
97
- .\scripts\dazi.ps1 flow node push --node <node_uuid>
97
+ dazi flow project status
98
+ dazi flow node push --node <node_uuid>
98
99
  ```
99
100
 
100
101
  **常用子命令速查**(拉取 / 提交 / 测试 / 变量等)见 [Flow 文档索引 · 流程项目常用命令](./flows-guide.md#流程项目flow_-常用命令)。Plan、数据源等专题见 [执行计划](./plan-guide.md)、[数据源管理](./source-guide.md)。
@@ -138,27 +139,31 @@ cd "项目\flow_流程项目01\流程\MyFlow0529"
138
139
 
139
140
  ## 5. 同步策略(pull / push)
140
141
 
141
- | 操作 | API / 行为 |
142
- |------|------------|
143
- | **pull** | `GET /flows/{id}/snapshot` 一次拿全 → 拆成 `flow.json` + `节点/*/code.*` + `flow.meta.json` |
144
- | **push 代码** | 仅脏节点:`PATCH /flows/{id}/flow-nodes/{uuid}`(乐观锁 `expected_version`) |
145
- | **push 画布** | `PUT /flows/{id}` body `{ data: 完整 document }`(`--canvas`) |
146
- | **status** | 本地 `code.*` 的 sha1 与 meta 中 `codeHash` 比对 |
142
+ | 操作 | API / 行为 |
143
+ | ------------- | ------------------------------------------------------------------------------------------- |
144
+ | **pull** | `GET /flows/{id}/snapshot` 一次拿全 → 拆成 `flow.json` + `节点/*/code.*` + `flow.meta.json` |
145
+ | **push 代码** | 仅脏节点:`PATCH /flows/{id}/flow-nodes/{uuid}`(乐观锁 `expected_version`) |
146
+ | **push 画布** | `PUT /flows/{id}` body `{ data: 完整 document }`(`--canvas`) |
147
+ | **status** | 本地 `code.*` 的 sha1 与 meta 中 `codeHash` 比对 |
148
+ | **doctor** | 检查 `flow.json` / `flow.meta.json` / `节点/` 一致性 |
149
+ | **repair-meta** | 按 `flow.json` 与 `节点/` 重建 meta 索引;并刷新 `快速启动_*.md` |
147
150
 
148
- 冲突时:先 **拉取** 或 **`node push --force`**(慎用覆盖)。
151
+ 冲突时:先 **拉取** 或 **`node push --force`**(慎用覆盖)。**本地节点多于平台时勿 pull**,应先 `push --canvas`。
152
+
153
+ `pull` 前若 doctor 报错会打印警告;拉取后若平台节点少于本地会提示可能已覆盖手改画布。
149
154
 
150
155
  ---
151
156
 
152
157
  ## 6. 资源管理器菜单(主交互)
153
158
 
154
- | 右键对象 | 常用命令 |
155
- |----------|----------|
156
- | `flow.json` / 流程目录 | 打开设计器、拉取、**提交**、状态、运行整流程 |
157
- | `节点/<名>/` | 打开代码、拉取/提交节点、**测试运行** |
158
- | `节点/<名>/code.*` | 提交、测试、拉取 |
159
- | `变量/` | 同步变量到本地 |
160
- | `变量/<名>.json` | 刷新变量、查看变量信息 |
161
- | `项目/flow_*` | 新建流程、拉取平台流程 |
159
+ | 右键对象 | 常用命令 |
160
+ | --------------------------- | ------------------------------------------------------ |
161
+ | `flow.json` / 流程目录 | 打开设计器、拉取、**提交**、状态、**doctor**、**修复 meta**、运行整流程 |
162
+ | `节点/<名>/` | 打开代码、拉取/提交节点、**测试运行** |
163
+ | `节点/<名>/code.*` | 提交、测试、拉取 |
164
+ | `变量/` | 同步变量到本地 |
165
+ | `变量/<名>.json` | 刷新变量、查看变量信息 |
166
+ | `项目/flow_*` | 新建流程、拉取平台流程 |
162
167
  | **数据资源 → 文件上传管理** | 浏览平台登记文件、**拉取到本地资源**、复制 AI 附加说明 |
163
168
 
164
169
  设计器工具栏:**保存 / 校验 / 运行 / 提交 / 拉取**。
@@ -187,9 +192,9 @@ dazi-work/资源/files/<显示名>_<fileId前8位>/
187
192
  CLI 等价命令:
188
193
 
189
194
  ```powershell
190
- .\scripts\dazi.ps1 flow managed-files list
191
- .\scripts\dazi.ps1 flow managed-files dirs --path excel
192
- .\scripts\dazi.ps1 flow managed-files pull --file-id <uuid> --relative-dir excel
195
+ dazi flow managed-files list
196
+ dazi flow managed-files dirs --path excel
197
+ dazi flow managed-files pull --file-id <uuid> --relative-dir excel
193
198
  ```
194
199
 
195
200
  ---
@@ -202,15 +207,15 @@ Web 端 `@xyflow/react` 与 VS Code MVP 设计器共用同一套 **`flow.json`
202
207
 
203
208
  ### 6.2.1 节点尺寸与布局
204
209
 
205
- | 项 | 规范值 | 说明 |
206
- |----|--------|------|
207
- | 最小宽度 | **200px** | 对齐 Web `CustomNode` 的 `min-w-[200px]` |
208
- | 典型高度 | **约 88px** | header(约 36px)+ body(约 52px);内容多时会增高 |
209
- | 边框 / 圆角 | 2px / 8px | 与系统设计器一致 |
210
- | 锚点直径 | **12px** | 对应 Tailwind `w-3 h-3` |
211
- | 横向间距 | **≥ 260px** | 相邻节点 `position.x` 差值,避免 200px 宽节点重叠 |
212
- | 纵向间距 | **≥ 140px** | 相邻节点 `position.y` 差值 |
213
- | 首节点参考坐标 | `x: 80, y: 80` | 从左上网格起点排布 |
210
+ | 项 | 规范值 | 说明 |
211
+ | -------------- | -------------- | -------------------------------------------------- |
212
+ | 最小宽度 | **200px** | 对齐 Web `CustomNode` 的 `min-w-[200px]` |
213
+ | 典型高度 | **约 88px** | header(约 36px)+ body(约 52px);内容多时会增高 |
214
+ | 边框 / 圆角 | 2px / 8px | 与系统设计器一致 |
215
+ | 锚点直径 | **12px** | 对应 Tailwind `w-3 h-3` |
216
+ | 横向间距 | **≥ 260px** | 相邻节点 `position.x` 差值,避免 200px 宽节点重叠 |
217
+ | 纵向间距 | **≥ 140px** | 相邻节点 `position.y` 差值 |
218
+ | 首节点参考坐标 | `x: 80, y: 80` | 从左上网格起点排布 |
214
219
 
215
220
  **结构**:每个节点为 **header(标题)+ body(状态摘要)** 双层;`position` 为节点**左上角**在画布上的像素坐标。
216
221
 
@@ -227,13 +232,13 @@ Web 端 `@xyflow/react` 与 VS Code MVP 设计器共用同一套 **`flow.json`
227
232
 
228
233
  锚点 ID 写入边的 **`sourceHandle`**(输出端)与 **`targetHandle`**(输入端)。**必须显式填写**,不要省略后依赖推断。
229
234
 
230
- | 锚点 ID | 节点上的位置 | 角色 | 用于 |
231
- |---------|--------------|------|------|
232
- | `l` | 左侧中点 | **输入**(target) | 常规入边(最常见) |
233
- | `t` | 顶部中点 | **输入**(target) | 自下方节点连入 |
234
- | `r` | 右侧中点 | **输出**(source) | 常规出边(最常见) |
235
- | `b` | 底部中点 | **输出**(source) | 连到下方节点 |
236
- | `true` | 右侧 **30%** 高度 | **输出**(source) | **仅** `condition` 节点 True 分支 |
235
+ | 锚点 ID | 节点上的位置 | 角色 | 用于 |
236
+ | ------- | ----------------- | ------------------ | ---------------------------------- |
237
+ | `l` | 左侧中点 | **输入**(target) | 常规入边(最常见) |
238
+ | `t` | 顶部中点 | **输入**(target) | 自下方节点连入 |
239
+ | `r` | 右侧中点 | **输出**(source) | 常规出边(最常见) |
240
+ | `b` | 底部中点 | **输出**(source) | 连到下方节点 |
241
+ | `true` | 右侧 **30%** 高度 | **输出**(source) | **仅** `condition` 节点 True 分支 |
237
242
  | `false` | 右侧 **70%** 高度 | **输出**(source) | **仅** `condition` 节点 False 分支 |
238
243
 
239
244
  **合法组合**
@@ -246,14 +251,14 @@ Web 端 `@xyflow/react` 与 VS Code MVP 设计器共用同一套 **`flow.json`
246
251
 
247
252
  **常用拓扑与锚点配对**
248
253
 
249
- | 场景 | sourceHandle | targetHandle |
250
- |------|--------------|--------------|
251
- | 左 → 右(主流水线) | `r` | `l` |
252
- | 上 → 下 | `b` | `t` |
253
- | 右 → 下 | `r` | `t` |
254
- | 下 → 左 | `b` | `l` |
255
- | 条件 True 分支 | `true` | `l` 或 `t` |
256
- | 条件 False 分支 | `false` | `l` 或 `t` |
254
+ | 场景 | sourceHandle | targetHandle |
255
+ | ------------------- | ------------ | ------------ |
256
+ | 左 → 右(主流水线) | `r` | `l` |
257
+ | 上 → 下 | `b` | `t` |
258
+ | 右 → 下 | `r` | `t` |
259
+ | 下 → 左 | `b` | `l` |
260
+ | 条件 True 分支 | `true` | `l` 或 `t` |
261
+ | 条件 False 分支 | `false` | `l` 或 `t` |
257
262
 
258
263
  **边 `id` 命名**(与 React Flow 一致,便于 diff):
259
264
 
@@ -265,12 +270,12 @@ xy-edge__{source节点id}{sourceHandle}-{target节点id}{targetHandle}
265
270
 
266
271
  ### 6.2.3 各类节点锚点一览
267
272
 
268
- | `data.type` | 输入 `l`/`t` | 输出 `r`/`b` | 输出 `true`/`false` | 备注 |
269
- |-------------|:------------:|:------------:|:-------------------:|------|
270
- | `start` | | `r`, `b` | | 无入边;语义 id 常为 `start-node` |
271
- | `end` | `l`, `t` | | | 无出边;语义 id 常为 `end-node` |
272
- | `condition` | `l`, `t` | | **`true`, `false`** | **不用** `r`/`b` |
273
- | 其他业务节点 | `l`, `t` | `r`, `b` | | 如 `sql-query`、`python-script` 等 |
273
+ | `data.type` | 输入 `l`/`t` | 输出 `r`/`b` | 输出 `true`/`false` | 备注 |
274
+ | ------------ | :----------: | :----------: | :-----------------: | ---------------------------------- |
275
+ | `start` | | `r`, `b` | | 无入边;语义 id 常为 `start-node` |
276
+ | `end` | `l`, `t` | | | 无出边;语义 id 常为 `end-node` |
277
+ | `condition` | `l`, `t` | | **`true`, `false`** | **不用** `r`/`b` |
278
+ | 其他业务节点 | `l`, `t` | `r`, `b` | | 如 `sql-query`、`python-script` 等 |
274
279
 
275
280
  画布上节点 **`type` 恒为 `"custom"`**,业务类型在 **`data.type`**。
276
281
 
@@ -483,23 +488,23 @@ VS Code **打开流程设计器**(右键 `flow.json`)时:
483
488
 
484
489
  ## 8. 相关文档
485
490
 
486
- | 文档 | 内容 |
487
- |------|------|
488
- | [流程变量系统指南](./variables-guide.md) | 变量模型、`output_variable_name`、各节点读写变量与代码示例 |
489
- | [节点代码编写指南](./node-code-guide.md) | `python-script`、`sql-query` 等单节点代码约定 |
490
- | [Flow 运行与测试](./run-guide.md) | `node-exec`、`flow-exec`、变量命令 |
491
- | [CLI 调用约定](../guides/cli-invocation.md) | `dazi.ps1`、Trae 扩展路径、doctor |
492
- | [CLI 命令速查](../guides/cli-reference.md) | 完整命令表 |
493
- | [Flow 管理入门](./flows-guide.md) | 文档索引、**AI 创建流程速查**、平台级 Flow 操作 |
491
+ | 文档 | 内容 |
492
+ | ------------------------------------------- | ---------------------------------------------------------- |
493
+ | [流程变量系统指南](./variables-guide.md) | 变量模型、`output_variable_name`、各节点读写变量与代码示例 |
494
+ | [节点代码编写指南](./node-code-guide.md) | `python-script`、`sql-query` 等单节点代码约定 |
495
+ | [Flow 运行与测试](./run-guide.md) | `node-exec`、`flow-exec`、变量命令 |
496
+ | [CLI 调用约定](../guides/cli-invocation.md) | `dazi.ps1`、Trae 扩展路径、doctor |
497
+ | [CLI 命令速查](../guides/cli-reference.md) | 完整命令表 |
498
+ | [Flow 管理入门](./flows-guide.md) | 文档索引、**AI 创建流程速查**、平台级 Flow 操作 |
494
499
 
495
500
  ---
496
501
 
497
502
  ## 9. 常见问题
498
503
 
499
- | 现象 | 处理 |
500
- |------|------|
501
- | `dazi-flow` 找不到 | 使用 `.\scripts\dazi.ps1 flow …`,运行 `doctor-cli.ps1` |
502
- | 提交 HTTP 405 | 画布提交须 `PUT /flows/{id}`,用 `project push --canvas`,勿对 `apply-patch` 发 PUT |
503
- | 变量查看失败 | 先 **测试节点** 或 **运行流程**;确认 `flow.meta.json` 有 `flowId` |
504
- | 节点测试报缺上游变量 | 先运行上游节点,或 **运行整流程(debug)** 再测当前节点 |
505
- | 代码改了平台没更新 | `node push` 或 `project push`;看 `project status` 是否脏 |
504
+ | 现象 | 处理 |
505
+ | -------------------- | ----------------------------------------------------------------------------------- |
506
+ | `dazi-flow` 找不到 | 使用 `dazi flow …`,运行 `doctor-cli.ps1` |
507
+ | 提交 HTTP 405 | 画布提交须 `PUT /flows/{id}`,用 `project push --canvas`,勿对 `apply-patch` 发 PUT |
508
+ | 变量查看失败 | 先 **测试节点** 或 **运行流程**;确认 `flow.meta.json` 有 `flowId` |
509
+ | 节点测试报缺上游变量 | 先运行上游节点,或 **运行整流程(debug)** 再测当前节点 |
510
+ | 代码改了平台没更新 | `node push` 或 `project push`;看 `project status` 是否脏 |
@@ -9,13 +9,15 @@
9
9
 
10
10
  ## 推荐阅读顺序
11
11
 
12
- 1. [数据流程项目开发指南](./flow-project-guide.md) — 目录结构、`dazi.ps1 flow`、菜单、pull/push 循环
12
+ 0. **[流程本地文件规范](./local-files-spec.md)****AI 必读**:`flow.json` / `flow.meta.json` / `node.info.json` 职责与标准示例
13
+ 0.1 [流程 AI 工作手册](./ai-workflow-playbook.md) — 一分钟决策树与禁止清单
14
+ 1. [数据流程项目开发指南](./flow-project-guide.md) — 目录结构、`dazi flow`、菜单、pull/push 循环
13
15
  2. **[画布节点与连线规范](./flow-project-guide.md#62-画布节点与连线规范ai-创建--编辑-flowjson-必读)** — **AI 创建流程必读**:节点尺寸 200px、锚点 `l/t/r/b/true/false`、条件分支
14
16
  3. [流程开发最佳实践(VS-flow0 案例)](./流程开发最佳实践-VS-flow0案例.md) — **端到端案例**:Excel → 质检 → SQL → 落库、五阶段开发法、检查表
15
17
  4. [流程变量系统指南](./variables-guide.md) — 变量模型、`output_variable_name`、代码节点如何用变量
16
18
  5. [节点代码编写指南](./node-code-guide.md) — `python-script`、`sql-query` 等单节点代码
17
19
  6. [Flow 运行与测试](./run-guide.md) — 单节点/整流程运行、变量
18
- 7. [CLI 调用约定](../guides/cli-invocation.md) — `.\scripts\dazi.ps1` 在 Trae/VS Code 中的用法
20
+ 7. [CLI 调用约定](../guides/cli-invocation.md) — `dazi` 在 Trae/VS Code 中的用法
19
21
 
20
22
  ---
21
23
 
@@ -24,14 +26,14 @@
24
26
  在 **`dazi-work` 根目录**(Trae、VS Code、Cursor 交付环境):
25
27
 
26
28
  ```powershell
27
- .\scripts\dazi.ps1 flow <子命令...>
29
+ dazi flow <子命令...>
28
30
  ```
29
31
 
30
32
  等价于开发时的 `dazi-flow <子命令...>`。示例:
31
33
 
32
34
  ```powershell
33
- .\scripts\dazi.ps1 flow flows list
34
- .\scripts\dazi.ps1 flow project pull --flow 98 --dir "项目\flow_xxx\流程\MyFlow"
35
+ dazi flow flows list
36
+ dazi flow project pull --flow 98 --dir "项目\flow_xxx\流程\MyFlow"
35
37
  ```
36
38
 
37
39
  ---
@@ -42,6 +44,8 @@
42
44
  | ------------------ | --------------------------------------------------- |
43
45
  | 拉取平台流程到本地 | `flow project pull --flow <id> --dir <流程目录>` |
44
46
  | 提交代码 + 画布 | `flow project push --dir <流程目录> --canvas` |
47
+ | 目录一致性检查 | `flow project doctor --dir <流程目录>` |
48
+ | 修复 meta 索引 | `flow project repair-meta --dir <流程目录>` |
45
49
  | 查看本地改动 | `flow project status --dir <流程目录>` |
46
50
  | 提交单个节点代码 | `flow node push --node <uuid> --dir <流程目录>` |
47
51
  | 单节点测试 | `flow run node-exec --node <uuid> --dir <流程目录>` |
@@ -87,46 +91,46 @@
87
91
  新建节点(在流程目录):
88
92
 
89
93
  ```powershell
90
- .\scripts\dazi.ps1 flow node new --type <data.type> --dir . --label "<显示名>"
94
+ dazi flow node new --type <data.type> --dir . --label "<显示名>"
91
95
  ```
92
96
 
93
97
  ### 总览
94
98
 
95
- | 分组 | `data.type` | 名称 | 代码文件 | 典型用途 |
96
- |------|-------------|------|----------|----------|
97
- | 流程控制 | `condition` | 条件判断 | `code.py` | 布尔分支,出边 `true`/`false` |
98
- | 流程控制 | `delay` | 延时等待 | — | 暂停 N 秒 |
99
- | 数据处理 | `file-source` | 文件输入 | — | 托管/上传文件 → 表变量 |
100
- | 数据处理 | `excel-import` | Excel 导入 | — | 单 Sheet 简单导入 |
101
- | 数据处理 | `excel-python` | Excel 开发 | `code.py` | 多 Sheet、复杂表头 |
102
- | 数据处理 | `sql-query` | SQL 查询 | `code.sql` | DuckDB 内存 SQL,上游变量作表名 |
103
- | 数据处理 | `python-script` | Python 脚本 | `code.py` | pandas 转换(最常用) |
104
- | 数据处理 | `database-source` | 数据库读取 | `code.sql` | 外部库只读(`connectionId`) |
105
- | 数据处理 | `database-sink` | 数据库写入 | — | 表变量 → 外部库表 |
106
- | 数据处理 | `dataspace-source` | 数据空间读取 | `code.sql` | 空间只读(`spaceId`) |
107
- | 数据处理 | `dataspace-sink` | 数据空间写入 | — | 表变量 → 空间表 |
108
- | 数据处理 | `data-quality-check` | 数据质量检查 | `code.py` | 规则或自定义质检脚本 |
109
- | 数据处理 | `folder-resource-import` | 文件夹资源导入 | — | 文件夹批量导入 |
110
- | 数据处理 | `folder-resource-register` | 资源注册 | — | 注册到连接/目录 |
99
+ | 分组 | `data.type` | 名称 | 代码文件 | 典型用途 |
100
+ | -------- | -------------------------- | -------------- | ---------- | ------------------------------- |
101
+ | 流程控制 | `condition` | 条件判断 | `code.py` | 布尔分支,出边 `true`/`false` |
102
+ | 流程控制 | `delay` | 延时等待 | — | 暂停 N 秒 |
103
+ | 数据处理 | `file-source` | 文件输入 | — | 托管/上传文件 → 表变量 |
104
+ | 数据处理 | `excel-import` | Excel 导入 | — | 单 Sheet 简单导入 |
105
+ | 数据处理 | `excel-python` | Excel 开发 | `code.py` | 多 Sheet、复杂表头 |
106
+ | 数据处理 | `sql-query` | SQL 查询 | `code.sql` | DuckDB 内存 SQL,上游变量作表名 |
107
+ | 数据处理 | `python-script` | Python 脚本 | `code.py` | pandas 转换(最常用) |
108
+ | 数据处理 | `database-source` | 数据库读取 | `code.sql` | 外部库只读(`connectionId`) |
109
+ | 数据处理 | `database-sink` | 数据库写入 | — | 表变量 → 外部库表 |
110
+ | 数据处理 | `dataspace-source` | 数据空间读取 | `code.sql` | 空间只读(`spaceId`) |
111
+ | 数据处理 | `dataspace-sink` | 数据空间写入 | — | 表变量 → 空间表 |
112
+ | 数据处理 | `data-quality-check` | 数据质量检查 | `code.py` | 规则或自定义质检脚本 |
113
+ | 数据处理 | `folder-resource-import` | 文件夹资源导入 | — | 文件夹批量导入 |
114
+ | 数据处理 | `folder-resource-register` | 资源注册 | — | 注册到连接/目录 |
111
115
 
112
116
  ### 流程控制
113
117
 
114
118
  #### `condition` — 条件判断
115
119
 
116
- | 项 | 说明 |
117
- |----|------|
118
- | 代码 | `节点/<名>/code.py`(布尔表达式,运行时 eval) |
119
- | 入边 | 至少一条;上游表注入为 **`df`** |
120
- | 出边 | **`sourceHandle: "true"`** / **`"false"`**(禁止用 `r`/`b`) |
121
- | 变量 | 不产生新表,仅路由 |
120
+ | 项 | 说明 |
121
+ | ---- | -------------------------------------------------------------------------- |
122
+ | 代码 | `节点/<名>/code.py`(布尔表达式,运行时 eval) |
123
+ | 入边 | 至少一条;上游表注入为 **`df`** |
124
+ | 出边 | **`sourceHandle: "true"`** / **`"false"`**(禁止用 `r`/`b`) |
125
+ | 变量 | 不产生新表,仅路由 |
122
126
  | 详见 | [flow-project-guide §6.2.4](./flow-project-guide.md#624-条件节点condition) |
123
127
 
124
128
  #### `delay` — 延时等待
125
129
 
126
- | 项 | 说明 |
127
- |----|------|
130
+ | 项 | 说明 |
131
+ | ---- | ------------------------------------ |
128
132
  | 配置 | `data.delaySeconds` 或 `delay`(秒) |
129
- | 变量 | 无 |
133
+ | 变量 | 无 |
130
134
 
131
135
  ### 数据输入 / 读取
132
136
 
@@ -134,11 +138,11 @@
134
138
 
135
139
  数据源来自 **文件上传管理**(有 `file_id` / `managed_file_id`)且文件为 **`.xlsx` / `.xls`** 时:
136
140
 
137
- | 优先级 | 节点 | 说明 |
138
- |:------:|------|------|
141
+ | 优先级 | 节点 | 说明 |
142
+ | :-----------: | ------------------ | --------------------------------------------------------------------------------------------- |
139
143
  | **1(默认)** | **`excel-python`** | **优先使用**。可控制 Sheet、表头行、列范围、多表 `set_table_output`;画布配 `managed_file_id` |
140
- | 2 | `excel-import` | 仅当 **单 Sheet、第 1 行即标准表头、无需任何解析逻辑** 时 |
141
- | **禁止** | `file-source` | **不要**用 file-source 读 Excel——它只做原始文件透传,**不会**解析为表变量 |
144
+ | 2 | `excel-import` | 仅当 **单 Sheet、第 1 行即标准表头、无需任何解析逻辑** 时 |
145
+ | **禁止** | `file-source` | **不要**用 file-source 读 Excel——它只做原始文件透传,**不会**解析为表变量 |
142
146
 
143
147
  ```text
144
148
  有 managed_file_id + Excel → excel-python(默认)
@@ -150,114 +154,114 @@ CSV / Parquet / 非 Excel → file-source 或其他专用节点
150
154
 
151
155
  #### `file-source` — 文件输入
152
156
 
153
- | 项 | 说明 |
154
- |----|------|
155
- | 何时用 | **非 Excel** 的原始文件透传(CSV、Parquet 等已登记文件) |
157
+ | 项 | 说明 |
158
+ | ---------- | -------------------------------------------------------- |
159
+ | 何时用 | **非 Excel** 的原始文件透传(CSV、Parquet 等已登记文件) |
156
160
  | **勿用于** | **`.xlsx` / `.xls`** → 改用 **`excel-python`**(见上表) |
157
- | 配置 | `file_id` / `managed_file_id`、`output_variable_name` |
158
- | 产出 | 原始文件路径对应的表变量(**不解析 Excel**) |
161
+ | 配置 | `file_id` / `managed_file_id`、`output_variable_name` |
162
+ | 产出 | 原始文件路径对应的表变量(**不解析 Excel**) |
159
163
 
160
164
  #### `excel-import` — Excel 导入(简单)
161
165
 
162
- | 项 | 说明 |
163
- |----|------|
164
- | 何时用 | **单 Sheet、第 1 行标准表头、零自定义逻辑** 的极少数场景 |
166
+ | 项 | 说明 |
167
+ | -------- | ---------------------------------------------------------------------------- |
168
+ | 何时用 | **单 Sheet、第 1 行标准表头、零自定义逻辑** 的极少数场景 |
165
169
  | 默认建议 | 有 `managed_file_id` 的 Excel **优先 `excel-python`**,便于后续改 Sheet/表头 |
166
- | 配置 | `file_id` / `source_excel_id`、`sheetName`(可选)、`output_variable_name` |
167
- | 产出 | 表变量(如 `excel_raw`) |
170
+ | 配置 | `file_id` / `source_excel_id`、`sheetName`(可选)、`output_variable_name` |
171
+ | 产出 | 表变量(如 `excel_raw`) |
168
172
 
169
173
  #### `excel-python` — Excel 开发(Excel 默认首选)
170
174
 
171
- | 项 | 说明 |
172
- |----|------|
173
- | 何时用 | **凡 `.xlsx`/`.xls` 且已有 `managed_file_id` 时优先本节点**;多 Sheet、非标准表头、需清洗/拆表 |
174
- | 画布配置 | **`managed_file_id`**(UUID,来自文件上传管理 / `文件信息.json` 的 `file_id`) |
175
- | 代码 | `code.py` 内 **只读 `excel_source_path`**(引擎注入),**禁止**写文件名或本地路径 |
176
- | 产出 | **`set_table_output(变量名, df)`**;主表名 **= `output_variable_name`** |
177
- | 详见 | [node-code-guide §5 excel-python](./node-code-guide.md#5-excel-pythonexcel-开发)(含完整示例与反例) |
175
+ | 项 | 说明 |
176
+ | -------- | ---------------------------------------------------------------------------------------------------- |
177
+ | 何时用 | **凡 `.xlsx`/`.xls` 且已有 `managed_file_id` 时优先本节点**;多 Sheet、非标准表头、需清洗/拆表 |
178
+ | 画布配置 | **`managed_file_id`**(UUID,来自文件上传管理 / `文件信息.json` 的 `file_id`) |
179
+ | 代码 | `code.py` 内 **只读 `excel_source_path`**(引擎注入),**禁止**写文件名或本地路径 |
180
+ | 产出 | **`set_table_output(变量名, df)`**;主表名 **= `output_variable_name`** |
181
+ | 详见 | [node-code-guide §5 excel-python](./node-code-guide.md#5-excel-pythonexcel-开发)(含完整示例与反例) |
178
182
 
179
183
  #### `database-source` — 数据库读取
180
184
 
181
- | 项 | 说明 |
182
- |----|------|
183
- | 代码 | `code.sql`(SELECT,直连外部库) |
184
- | 配置 | **`connectionId`**(`ads_connections.id`)、`output_variable_name` |
185
- | 消费 | **不**消费 Run 内变量 |
185
+ | 项 | 说明 |
186
+ | ---- | ------------------------------------------------------------------------------------------------------------ |
187
+ | 代码 | `code.sql`(SELECT,直连外部库) |
188
+ | 配置 | **`connectionId`**(`ads_connections.id`)、`output_variable_name` |
189
+ | 消费 | **不**消费 Run 内变量 |
186
190
  | 详见 | [source-guide](./source-guide.md)、[variables-guide §6.2](./variables-guide.md#62-database-source外部库只读) |
187
191
 
188
192
  #### `dataspace-source` — 数据空间读取
189
193
 
190
- | 项 | 说明 |
191
- |----|------|
192
- | 代码 | `code.sql` |
193
- | 配置 | **`spaceId`**、`output_variable_name`、`limit`(可选) |
194
- | 消费 | **不**消费 Run 内变量 |
194
+ | 项 | 说明 |
195
+ | ---- | ------------------------------------------------------------------------------ |
196
+ | 代码 | `code.sql` |
197
+ | 配置 | **`spaceId`**、`output_variable_name`、`limit`(可选) |
198
+ | 消费 | **不**消费 Run 内变量 |
195
199
  | 详见 | [variables-guide §6.2b](./variables-guide.md#62b-dataspace-source数据空间只读) |
196
200
 
197
201
  ### 数据加工
198
202
 
199
203
  #### `sql-query` — SQL 查询
200
204
 
201
- | 项 | 说明 |
202
- |----|------|
203
- | 代码 | `code.sql` |
204
- | 消费 | 上游 **`output_variable_name` 作 SQL 表名**(`FROM 上游变量名`) |
205
- | 产出 | `output_variable_name` |
206
- | 注意 | 单节点测试前须先跑上游;SQL 末尾勿加分号 |
205
+ | 项 | 说明 |
206
+ | ---- | ------------------------------------------------------------------------ |
207
+ | 代码 | `code.sql` |
208
+ | 消费 | 上游 **`output_variable_name` 作 SQL 表名**(`FROM 上游变量名`) |
209
+ | 产出 | `output_variable_name` |
210
+ | 注意 | 单节点测试前须先跑上游;SQL 末尾勿加分号 |
207
211
  | 详见 | [variables-guide §6.1](./variables-guide.md#61-sql-queryduckdb-内存-sql) |
208
212
 
209
213
  #### `python-script` — Python 脚本
210
214
 
211
- | 项 | 说明 |
212
- |----|------|
213
- | 代码 | `code.py` |
214
- | 消费 | **`get_variable("上游变量名")`**(单节点测试首选)或入边 `df` |
215
- | 产出 | **`result_df`** → `output_variable_name` |
215
+ | 项 | 说明 |
216
+ | ---- | ------------------------------------------------------------------------------------------------------------ |
217
+ | 代码 | `code.py` |
218
+ | 消费 | **`get_variable("上游变量名")`**(单节点测试首选)或入边 `df` |
219
+ | 产出 | **`result_df`** → `output_variable_name` |
216
220
  | 详见 | [variables-guide §6.3](./variables-guide.md#63-python-script最常用)、[node-code-guide](./node-code-guide.md) |
217
221
 
218
222
  #### `data-quality-check` — 数据质量检查
219
223
 
220
- | 项 | 说明 |
221
- |----|------|
224
+ | 项 | 说明 |
225
+ | ---- | ---------------------------------------------------- |
222
226
  | 代码 | `code.py`(平台键 `dqPythonCode`;非空时优先于规则) |
223
- | 配置 | `qualityConfig`、`output_variable_name` |
224
- | 消费 | 上游表 / `get_variable` |
225
- | 典型 | 与 **`condition`** 组合做合格/不合格分支 |
227
+ | 配置 | `qualityConfig`、`output_variable_name` |
228
+ | 消费 | 上游表 / `get_variable` |
229
+ | 典型 | 与 **`condition`** 组合做合格/不合格分支 |
226
230
 
227
231
  ### 数据输出 / 写入
228
232
 
229
233
  #### `database-sink` — 数据库写入
230
234
 
231
- | 项 | 说明 |
232
- |----|------|
233
- | 代码 | 无 |
234
- | 配置 | **`connectionId`**、**`tableName`**、**`input_variable_name`**、`mode` |
235
- | 消费 | 指定变量或入边 Parquet |
235
+ | 项 | 说明 |
236
+ | ---- | ----------------------------------------------------------------------- |
237
+ | 代码 | 无 |
238
+ | 配置 | **`connectionId`**、**`tableName`**、**`input_variable_name`**、`mode` |
239
+ | 消费 | 指定变量或入边 Parquet |
236
240
  | 详见 | [variables-guide §6.6](./variables-guide.md#66-database-sink无代码文件) |
237
241
 
238
242
  #### `dataspace-sink` — 数据空间写入
239
243
 
240
- | 项 | 说明 |
241
- |----|------|
242
- | 代码 | 无 |
244
+ | 项 | 说明 |
245
+ | ---- | ------------------------------------------------------------------------- |
246
+ | 代码 | 无 |
243
247
  | 配置 | **`spaceId`**、**`tableName`**、**`input_variable_name`**、`syncMetadata` |
244
- | 消费 | 同 database-sink |
248
+ | 消费 | 同 database-sink |
245
249
 
246
250
  ### 资源与文件夹
247
251
 
248
252
  #### `folder-resource-import` — 文件夹资源导入
249
253
 
250
- | 项 | 说明 |
251
- |----|------|
254
+ | 项 | 说明 |
255
+ | ---- | ------------------------------------------------------------ |
252
256
  | 配置 | `folderId`、`resourceId`、`pageSize`、`output_variable_name` |
253
- | 产出 | 表变量 |
257
+ | 产出 | 表变量 |
254
258
 
255
259
  #### `folder-resource-register` — 资源注册
256
260
 
257
- | 项 | 说明 |
258
- |----|------|
261
+ | 项 | 说明 |
262
+ | ---- | ------------------------------------- |
259
263
  | 配置 | `connectionName`、`targetFolderId` 等 |
260
- | 用途 | 将导入结果注册到连接/资源目录 |
264
+ | 用途 | 将导入结果注册到连接/资源目录 |
261
265
 
262
266
  ### 选型速查(AI 常用)
263
267
 
@@ -294,7 +298,7 @@ pandas 清洗/聚合 → python-script
294
298
  | ------------------------------------------ | ------------------------------------------- |
295
299
  | [流程变量系统指南](./variables-guide.md) | 变量产生/消费、`get_variable`、SQL 表名约定 |
296
300
  | [Flow 运行与测试](./run-guide.md) | Run、debug、变量、流程项目测试 |
297
- | [Flow 快照管理](./snapshot-guide.md) | 平台级 `flows/<id>/snapshot.json` 分离快照 |
301
+ | [数据流程项目开发指南 §5 pull/push](./flow-project-guide.md#5-同步策略pull--push) | 平台快照拉取与本地拆分 |
298
302
  | [数据源管理](./source-guide.md) | connectionId、表结构 |
299
303
  | [Flow 执行计划](./plan-guide.md) | FlowPlan / markdown 规划 |
300
304
  | [CLI 命令速查](../guides/cli-reference.md) | 完整命令表 |