@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
@@ -6,8 +6,8 @@
6
6
 
7
7
  **相关文档**
8
8
 
9
- - [数据流程项目开发指南](./flow-project-guide.md) — 目录、`debug_run_id`、开发循环
10
- - [节点代码编写指南](./node-code-guide.md) — 各节点 `code.*` 约定
9
+ - [数据流程项目开发指南](./flow-project-guide.md) — 目录、`debug_run_id`、开发循环
10
+ - [节点代码编写指南](./node-code-guide.md) — 各节点 `code.*` 约定
11
11
  - [Flow 运行与测试](./run-guide.md) — `node-exec`、`variable pull/sync`
12
12
 
13
13
  ---
@@ -16,11 +16,11 @@
16
16
 
17
17
  流程引擎把 **参数、中间表、最终结果** 统一抽象为 **变量(Variable)**,在一次 Run 内按 **变量名** 读写,而不必处处依赖画布连线传递文件路径。
18
18
 
19
- | 概念 | 说明 |
20
- |------|------|
21
- | **变量名** | 字符串标识,如 `sales_raw`、`V1`、`销售表`;由节点配置 **`output_variable_name`** 或脚本 **`set_table_output` / `set_scalar_output`** 登记 |
22
- | **变量作用域** | 绑定到某次 **`flow_runs`**;日常调试对应 **`ads_flows.debug_run_id`** |
23
- | **登记时机** | 节点执行成功后,引擎读取 **`output_variable_name`**,将输出写入当前 Run 的 **`flow_run_variables`** |
19
+ | 概念 | 说明 |
20
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
21
+ | **变量名** | 字符串标识,如 `sales_raw`、`V1`、`销售表`;由节点配置 **`output_variable_name`** 或脚本 **`set_table_output` / `set_scalar_output`** 登记 |
22
+ | **变量作用域** | 绑定到某次 **`flow_runs`**;日常调试对应 **`ads_flows.debug_run_id`** |
23
+ | **登记时机** | 节点执行成功后,引擎读取 **`output_variable_name`**,将输出写入当前 Run 的 **`flow_run_variables`** |
24
24
 
25
25
  **本地开发时**:变量不在 `flow.json` 里,而在调试 Run 中;CLI/扩展通过 API 拉取 schema + 预览到 **`变量/<名>.json`**。
26
26
 
@@ -28,10 +28,10 @@
28
28
 
29
29
  ## 2. 存储类型
30
30
 
31
- | 类型 | 典型场景 | 存储 | `get_variable` 行为 |
32
- |------|----------|------|---------------------|
31
+ | 类型 | 典型场景 | 存储 | `get_variable` 行为 |
32
+ | ------------------- | ------------------------------------ | --------------------------------- | ---------------------------------------- |
33
33
  | **table(表变量)** | SQL 结果、Python `result_df`、文件源 | Parquet 落盘,库中 `value` 为路径 | 自动 `pd.read_parquet` → **`DataFrame`** |
34
- | **text(标量)** | 计数、标志位、质检综合分 | 库中 `value` 为字符串 | 返回 Python 原生值(str/int/float 等) |
34
+ | **text(标量)** | 计数、标志位、质检综合分 | 库中 `value` 为字符串 | 返回 Python 原生值(str/int/float 等) |
35
35
 
36
36
  表变量是流程开发中最常用的类型;标量多用于质检分数、状态位等。
37
37
 
@@ -87,17 +87,17 @@ GET /flows/{id}/debug-run → 绑定 ads_flows.debug_run_id
87
87
  cd "项目\flow_xxx\流程\MyFlow"
88
88
 
89
89
  # 先运行产出变量的上游节点,或整流程 debug
90
- .\scripts\dazi.ps1 flow run node-exec --node <上游uuid> --dir .
90
+ dazi flow run node-exec --node <上游uuid> --dir .
91
91
 
92
92
  # 拉取单个变量(列信息 + 前 10 行)
93
- .\scripts\dazi.ps1 flow variable pull --name sales_clean --dir .
93
+ dazi flow variable pull --name sales_clean --dir .
94
94
 
95
95
  # 同步调试 Run 中全部变量
96
- .\scripts\dazi.ps1 flow variable sync --dir .
96
+ dazi flow variable sync --dir .
97
97
  ```
98
98
 
99
- - 设计器:选中节点 → **`output_variable_name`** 旁 **📊**
100
- - 资源管理器:**`变量/<名>.json`**(只读派生,勿手改后当真理源)
99
+ - 设计器:选中节点 → **`output_variable_name`** 旁 **📊**
100
+ - 资源管理器:**`变量/<名>.json`**(只读派生,勿手改后当真理源)
101
101
  - 变量尚未产出时,占位 JSON 会提示:**先运行上游节点**
102
102
 
103
103
  ---
@@ -119,12 +119,12 @@ cd "项目\flow_xxx\流程\MyFlow"
119
119
  [database-sink] input_variable_name = py_result(或依赖入边 Parquet)
120
120
  ```
121
121
 
122
- | 步骤 | 节点 | 画布配置 | 代码如何读写变量 |
123
- |------|------|----------|------------------|
124
- | 1 | `excel-import` | `output_variable_name: excel_raw` | 无代码;导入后自动登记 |
125
- | 2 | `sql-query` | `output_variable_name: sales_agg` | SQL 中 **`FROM excel_raw`** |
126
- | 3 | `python-script` | `output_variable_name: py_result` | **`get_variable('sales_agg')`** → **`result_df`** |
127
- | 4 | `database-sink` | `input_variable_name: py_result` | 无代码;从变量或入边读表 |
122
+ | 步骤 | 节点 | 画布配置 | 代码如何读写变量 |
123
+ | ---- | --------------- | --------------------------------- | ------------------------------------------------- |
124
+ | 1 | `excel-import` | `output_variable_name: excel_raw` | 无代码;导入后自动登记 |
125
+ | 2 | `sql-query` | `output_variable_name: sales_agg` | SQL 中 **`FROM excel_raw`** |
126
+ | 3 | `python-script` | `output_variable_name: py_result` | **`get_variable('sales_agg')`** → **`result_df`** |
127
+ | 4 | `database-sink` | `input_variable_name: py_result` | 无代码;从变量或入边读表 |
128
128
 
129
129
  ---
130
130
 
@@ -185,10 +185,10 @@ LIMIT 50000
185
185
  **产生变量**:`spaceId` + `code.sql` 在空间存储引擎上查询,结果登记为 **`output_variable_name`**。
186
186
  **不消费** Run 内变量(直连 `ads_dataspaces` + `get_storage`)。
187
187
 
188
- | 配置项 | 说明 |
189
- |--------|------|
190
- | `spaceId` | `ads_dataspaces.id`(`dazi-flow dataspace list`) |
191
- | `output_variable_name` | 产出表变量名 |
188
+ | 配置项 | 说明 |
189
+ | ---------------------- | ------------------------------------------------- |
190
+ | `spaceId` | `ads_dataspaces.id`(`dazi-flow dataspace list`) |
191
+ | `output_variable_name` | 产出表变量名 |
192
192
 
193
193
  ```sql
194
194
  -- output_variable_name = space_sales
@@ -204,15 +204,15 @@ LIMIT 100000
204
204
 
205
205
  **运行时注入**
206
206
 
207
- | 符号 | 说明 |
208
- |------|------|
209
- | `pd` | pandas |
210
- | `df` | 入边 Parquet(**整图跑**时常有值) |
211
- | `get_variable("名")` | 从当前调试 Run 按名读表/标量(**单节点测试首选**) |
212
- | `result_df` | 主输出表 → 对应 **`output_variable_name`** |
213
- | `set_table_output(name, df)` | 额外表变量 |
214
- | `set_scalar_output(name, value)` | 标量变量 |
215
- | `output.print(...)` | 运行日志(勿用裸 `print`) |
207
+ | 符号 | 说明 |
208
+ | -------------------------------- | -------------------------------------------------- |
209
+ | `pd` | pandas |
210
+ | `df` | 入边 Parquet(**整图跑**时常有值) |
211
+ | `get_variable("名")` | 从当前调试 Run 按名读表/标量(**单节点测试首选**) |
212
+ | `result_df` | 主输出表 → 对应 **`output_variable_name`** |
213
+ | `set_table_output(name, df)` | 额外表变量 |
214
+ | `set_scalar_output(name, value)` | 标量变量 |
215
+ | `output.print(...)` | 运行日志(勿用裸 `print`) |
216
216
 
217
217
  **示例 A:单节点测试(推荐写法)**
218
218
 
@@ -324,10 +324,10 @@ output.print("[DQ] 完成")
324
324
 
325
325
  **消费变量**:画布配置 **`input_variable_name`**,从调试 Run 取表写入目标库;也可依赖入边 Parquet(未配变量名时)。
326
326
 
327
- | 配置项 | 说明 |
328
- |--------|------|
329
- | `connectionId` | 目标 `ads_connections` |
330
- | `tableName` | 目标表名 |
327
+ | 配置项 | 说明 |
328
+ | --------------------- | ------------------------------------------------ |
329
+ | `connectionId` | 目标 `ads_connections` |
330
+ | `tableName` | 目标表名 |
331
331
  | `input_variable_name` | 可选;显式指定要写入的表变量名(如 `py_result`) |
332
332
 
333
333
  ---
@@ -336,13 +336,13 @@ output.print("[DQ] 完成")
336
336
 
337
337
  **消费变量**:与 `database-sink` 相同,通过 **`input_variable_name`** 或入边 Parquet 取表。
338
338
 
339
- | 配置项 | 说明 |
340
- |--------|------|
341
- | `spaceId` | 目标 `ads_dataspaces.id` |
342
- | `tableName` | 空间内目标表(物理表名) |
343
- | `mode` | `append`(默认)或 `replace` |
344
- | `syncMetadata` | 写后是否同步元数据(默认 true) |
345
- | `input_variable_name` | 要写入的表变量名 |
339
+ | 配置项 | 说明 |
340
+ | --------------------- | ------------------------------- |
341
+ | `spaceId` | 目标 `ads_dataspaces.id` |
342
+ | `tableName` | 空间内目标表(物理表名) |
343
+ | `mode` | `append`(默认)或 `replace` |
344
+ | `syncMetadata` | 写后是否同步元数据(默认 true) |
345
+ | `input_variable_name` | 要写入的表变量名 |
346
346
 
347
347
  ---
348
348
 
@@ -361,12 +361,12 @@ df.shape[0] > 0 and df["amount"].sum() > 10000
361
361
 
362
362
  ## 7. `df` 与 `get_variable` 怎么选
363
363
 
364
- | 场景 | 推荐 |
365
- |------|------|
366
- | **单节点测试**(`node-exec`) | **`get_variable('上游 output_variable_name')`** |
367
- | **整流程 debug/preview** | 入边 **`df`** 通常已有值;仍可用 `get_variable` 读 **未连线** 的表 |
368
- | **多表输入** | 一张走 `df` 或主变量,其余 **`get_variable('名')`** |
369
- | **写 SQL** | 直接用 **变量名作表名**,不用 `get_variable` |
364
+ | 场景 | 推荐 |
365
+ | ----------------------------- | ------------------------------------------------------------------ |
366
+ | **单节点测试**(`node-exec`) | **`get_variable('上游 output_variable_name')`** |
367
+ | **整流程 debug/preview** | 入边 **`df`** 通常已有值;仍可用 `get_variable` 读 **未连线** 的表 |
368
+ | **多表输入** | 一张走 `df` 或主变量,其余 **`get_variable('名')`** |
369
+ | **写 SQL** | 直接用 **变量名作表名**,不用 `get_variable` |
370
370
 
371
371
  **常见错误**:单节点测试时只写 `result_df = df.groupby(...)`,但 `df` 为空 → 报错或空结果。
372
372
  **修复**:改为 `df = get_variable("上游变量名")`,或先运行上游再测。
@@ -375,10 +375,10 @@ df.shape[0] > 0 and df["amount"].sum() > 10000
375
375
 
376
376
  ## 8. 开发调试清单
377
377
 
378
- 1. 打开设计器,确认各节点 **`output_variable_name`** 已填且 **不重名**。
379
- 2. **自上游向下** 单节点测试,或一次 **`flow run flow-exec --type debug`**。
380
- 3. 用 **📊** 或 **`flow variable pull --name <名>`** 核对列名与样例行(交给 AI 时附上 **`变量/<名>.json`**)。
381
- 4. 写下游代码时 **变量名与画布完全一致**(区分大小写;中文名含全角字符)。
378
+ 1. 打开设计器,确认各节点 **`output_variable_name`** 已填且 **不重名**。
379
+ 2. **自上游向下** 单节点测试,或一次 **`flow run flow-exec --type debug`**。
380
+ 3. 用 **📊** 或 **`flow variable pull --name <名>`** 核对列名与样例行(交给 AI 时附上 **`变量/<名>.json`**)。
381
+ 4. 写下游代码时 **变量名与画布完全一致**(区分大小写;中文名含全角字符)。
382
382
  5. 改 `output_variable_name` → **`project push --canvas`**;改 `code.*` → **`node push`**。
383
383
 
384
384
  ---
@@ -387,20 +387,20 @@ df.shape[0] > 0 and df["amount"].sum() > 10000
387
387
 
388
388
  ```powershell
389
389
  # 单节点测试(会更新 debug_run_id 对应变量)
390
- .\scripts\dazi.ps1 flow run node-exec --node <uuid> --dir .
390
+ dazi flow run node-exec --node <uuid> --dir .
391
391
 
392
392
  # 整流程调试
393
- .\scripts\dazi.ps1 flow run flow-exec --dir . --type debug
393
+ dazi flow run flow-exec --dir . --type debug
394
394
 
395
395
  # 变量
396
- .\scripts\dazi.ps1 flow variable pull --name sales_agg --dir .
397
- .\scripts\dazi.ps1 flow variable sync --dir .
396
+ dazi flow variable pull --name sales_agg --dir .
397
+ dazi flow variable sync --dir .
398
398
  ```
399
399
 
400
400
  ---
401
401
 
402
402
  ## 10. 延伸阅读
403
403
 
404
- - 搭子功能总览:`dazi/docs/279-dazi-dataflow数据流程功能总结.md` §3
405
- - devend 变量重构:`devend/docs/20251201-009-变量系统重构.md`
404
+ - 搭子功能总览:`dazi/docs/279-dazi-dataflow数据流程功能总结.md` §3
405
+ - devend 变量重构:`devend/docs/20251201-009-变量系统重构.md`
406
406
  - Excel→SQL→Python 端到端案例:[流程开发最佳实践(VS-flow0 案例)](./流程开发最佳实践-VS-flow0案例.md)
@@ -121,18 +121,18 @@ bool(df is not None and not df.empty and df["通过"].all())
121
121
 
122
122
  ## 三、节点选型速查
123
123
 
124
- | 场景 | 推荐节点 | 避免 |
125
- | --------------------- | -------------------- | --------------------------------- |
124
+ | 场景 | 推荐节点 | 避免 |
125
+ | ----------------------- | -------------------- | --------------------------------- |
126
126
  | Excel + managed_file_id | **`excel-python`** | **`file-source`**(不解析 xlsx) |
127
- | 多 Sheet、不同 header | `excel-python` | 多个 `excel-import` 重复配置 |
128
- | 极简单 Sheet、零代码 | `excel-import` | 不必要的 Python |
129
- | 行数/非空/外键 | `data-quality-check` | 在 Python 里散落 if/raise |
130
- | 通过/不通过两路 | `condition` | 在 SQL 里写 impossible WHERE |
131
- | 多表 JOIN 宽表 | `sql-query` | 全用 pandas merge(大表时难维护) |
132
- | 写 ClickHouse / PG 等 | `database-sink` | 在 Python 里手写 JDBC/HTTP |
133
- | 写数据空间表 | `dataspace-sink` | 先落外部库再回灌空间 |
134
- | 读外部库 | `database-source` | 与 sql-query 混用职责 |
135
- | 读数据空间 | `dataspace-source` | 误填 `connectionId` |
127
+ | 多 Sheet、不同 header | `excel-python` | 多个 `excel-import` 重复配置 |
128
+ | 极简单 Sheet、零代码 | `excel-import` | 不必要的 Python |
129
+ | 行数/非空/外键 | `data-quality-check` | 在 Python 里散落 if/raise |
130
+ | 通过/不通过两路 | `condition` | 在 SQL 里写 impossible WHERE |
131
+ | 多表 JOIN 宽表 | `sql-query` | 全用 pandas merge(大表时难维护) |
132
+ | 写 ClickHouse / PG 等 | `database-sink` | 在 Python 里手写 JDBC/HTTP |
133
+ | 写数据空间表 | `dataspace-sink` | 先落外部库再回灌空间 |
134
+ | 读外部库 | `database-source` | 与 sql-query 混用职责 |
135
+ | 读数据空间 | `dataspace-source` | 误填 `connectionId` |
136
136
 
137
137
  ---
138
138
 
@@ -274,23 +274,23 @@ LIMIT 100000
274
274
  cd "<流程目录>"
275
275
 
276
276
  # 同步平台
277
- .\scripts\dazi.ps1 flow project pull --flow <flowId> --dir .
278
- .\scripts\dazi.ps1 flow project push --dir . --canvas
277
+ dazi flow project pull --flow <flowId> --dir .
278
+ dazi flow project push --dir . --canvas
279
279
 
280
280
  # 测试
281
- .\scripts\dazi.ps1 flow run node-exec --node <node_uuid> --dir .
282
- .\scripts\dazi.ps1 flow run flow-exec --dir . --type debug
281
+ dazi flow run node-exec --node <node_uuid> --dir .
282
+ dazi flow run flow-exec --dir . --type debug
283
283
 
284
284
  # 变量
285
- .\scripts\dazi.ps1 flow variable pull --name 销售明细宽表 --dir .
286
- .\scripts\dazi.ps1 flow variable sync --dir .
285
+ dazi flow variable pull --name 销售明细宽表 --dir .
286
+ dazi flow variable sync --dir .
287
287
 
288
288
  # 数据源
289
- .\scripts\dazi.ps1 flow source list
289
+ dazi flow source list
290
290
 
291
291
  # 数据空间
292
- .\scripts\dazi.ps1 flow dataspace list
293
- .\scripts\dazi.ps1 flow dataspace tables <spaceId>
292
+ dazi flow dataspace list
293
+ dazi flow dataspace tables <spaceId>
294
294
  ```
295
295
 
296
296
  命令前缀与 Trae/VS Code 约定见 [CLI 调用约定](../guides/cli-invocation.md)。
@@ -299,18 +299,18 @@ cd "<流程目录>"
299
299
 
300
300
  ## 八、常见问题与对策
301
301
 
302
- | 现象 | 原因 | 对策 |
303
- | ------------------------------- | ------------------------ | ------------------------------------- |
304
- | SQL 单测找不到表 | 上游变量未写入 debug Run | 先跑 Excel 节点或整流程 debug |
305
- | excel-python 单测只有主表 | 多表需整图或先跑 Excel | 用 `flow-exec` 或按序 node-exec |
306
- | Condition Error: invalid syntax | 条件脚本非单行表达式 | 改为单行 `bool(...)` |
307
- | 质检失败流程中断 | `fail_on_error: true` | 改为 `false` + 下游 condition |
308
- | 画布 push 失败 | 未关联 flowId | 先 `project pull --flow <id>` |
309
- | sink 写库失败 | connectionId / 表名错误 | 对照 `资源/datasources/<连接名>/*.md` |
302
+ | 现象 | 原因 | 对策 |
303
+ | ------------------------------- | ------------------------ | -------------------------------------------------- |
304
+ | SQL 单测找不到表 | 上游变量未写入 debug Run | 先跑 Excel 节点或整流程 debug |
305
+ | excel-python 单测只有主表 | 多表需整图或先跑 Excel | 用 `flow-exec` 或按序 node-exec |
306
+ | Condition Error: invalid syntax | 条件脚本非单行表达式 | 改为单行 `bool(...)` |
307
+ | 质检失败流程中断 | `fail_on_error: true` | 改为 `false` + 下游 condition |
308
+ | 画布 push 失败 | 未关联 flowId | 先 `project pull --flow <id>` |
309
+ | sink 写库失败 | connectionId / 表名错误 | 对照 `资源/datasources/<连接名>/*.md` |
310
310
  | dataspace-sink 写入失败 | spaceId / tableName 错误 | 先 `flow dataspace list` / `flow dataspace tables` |
311
- | 变量列为空 | 单测时只用了 `df` | Python 改用 `get_variable` |
312
- | AI 不知道 connectionId | 未拉取连接文档 | 侧栏数据连接 → **拉取连接信息** |
313
- | AI 不知道 spaceId | 未拉取空间文档 | 侧栏数据空间 → **拉取空间信息** |
311
+ | 变量列为空 | 单测时只用了 `df` | Python 改用 `get_variable` |
312
+ | AI 不知道 connectionId | 未拉取连接文档 | 侧栏数据连接 → **拉取连接信息** |
313
+ | AI 不知道 spaceId | 未拉取空间文档 | 侧栏数据空间 → **拉取空间信息** |
314
314
 
315
315
  ---
316
316
 
@@ -5,16 +5,17 @@
5
5
 
6
6
  ## 原则
7
7
 
8
- v3 **不会**把 `dazi` / `dazi-onto` / `dazi-app` 安装到系统 PATH。
9
- 终端中请使用 **`dazi-work` 包装脚本** 或 **扩展内置 bundled CLI**。
8
+ 默认交付(仅 `dazi-work` + vsix)**不**要求全局 PATH;请用 **`dazi`**。
9
+ 开发机可选安装 **`@dazitech/cli`**(pnpm 全局)后直接使用 `dazi` / `dazi-flow`。
10
10
 
11
11
  ## 命令前缀
12
12
 
13
- | 场景 | 工作目录 | 命令形式 |
14
- |------|----------|----------|
15
- | 本体 / 流程 / 鉴权 / 数据 / 文档 | **`dazi-work` 根** | `.\scripts\dazi.ps1 <子命令...>` |
16
- | DRAP 应用 | **`dazi-work/项目/app_<名称>/`**(应用项目根) | `pnpm run dazi-app -- <子命令...>` |
17
- | 环境自检 | **`dazi-work` 根** | `.\scripts\doctor-cli.ps1` |
13
+ | 场景 | 工作目录 | 命令形式 |
14
+ | ---------------------------------------- | ---------------------------------------------- | ----------------------------------- |
15
+ | 本体 / 流程 / 鉴权 / 数据 / 文档(默认) | **`dazi-work` 根** | `dazi <子命令...>` |
16
+ | 同上(已 `pnpm add -g @dazitech/cli`) | **`dazi-work` 根**(自动识别)或任意目录 | `dazi <子命令...>`、`dazi flow ...` |
17
+ | DRAP 应用 | **`dazi-work/项目/app_<名称>/`**(应用项目根) | `pnpm run dazi-app -- <子命令...>` |
18
+ | 环境自检 | **`dazi-work` 根** | `.\scripts\doctor-cli.ps1` |
18
19
 
19
20
  CMD 用户:`scripts\dazi.cmd`、`scripts\doctor-cli.cmd`(转发到同名 `.ps1`)。
20
21
 
@@ -31,32 +32,32 @@ cd D:\path\to\dazi-work
31
32
  .\scripts\doctor-cli.ps1
32
33
 
33
34
  # 4) 登录
34
- .\scripts\dazi.ps1 auth login
35
+ dazi auth login
35
36
  # 或
36
- .\scripts\dazi.ps1 auth set-token --token "<jwt>"
37
+ dazi auth set-token --token "<jwt>"
37
38
 
38
39
  # 5) 验证
39
- .\scripts\dazi.ps1 auth whoami
40
- .\scripts\dazi.ps1 onto function list --space <space-id>
40
+ dazi auth whoami
41
+ dazi onto function list --space <space-id>
41
42
  ```
42
43
 
43
44
  ## 文档中的写法对照
44
45
 
45
- 内置帮助文档里的可运行示例统一采用 **`.\scripts\dazi.ps1`**,等价关系如下:
46
+ 内置帮助文档里的可运行示例统一采用 **`dazi`**,等价关系如下:
46
47
 
47
- | 文档示例 | 含义 |
48
- |----------|------|
49
- | `.\scripts\dazi.ps1 auth whoami` | 原 `dazi auth whoami` |
50
- | `.\scripts\dazi.ps1 onto script publish ...` | 原 `dazi onto script publish ...`(**勿用** `dazi-onto`) |
51
- | `.\scripts\dazi.ps1 flow project pull --flow 98 --dir 项目\flow_x\流程\MyFlow` | 流程项目拉取 |
52
- | `.\scripts\dazi.ps1 flow run node-exec --node <uuid> --dir <流程目录>` | 单节点测试 |
53
- | `pnpm run dazi-app -- upload ...` | 原 `dazi-app upload ...`(须在**应用项目根**,含 `sdk/`、`templates/`) |
48
+ | 文档示例 | 含义 |
49
+ | ---------------------------------------------------------------- | ----------------------------------------------------------------------- |
50
+ | `dazi auth whoami` | 原 `dazi auth whoami` |
51
+ | `dazi onto script publish ...` | 原 `dazi onto script publish ...`(**勿用** `dazi-onto`) |
52
+ | `dazi flow project pull --flow 98 --dir 项目\flow_x\流程\MyFlow` | 流程项目拉取 |
53
+ | `dazi flow run node-exec --node <uuid> --dir <流程目录>` | 单节点测试 |
54
+ | `pnpm run dazi-app -- upload ...` | 原 `dazi-app upload ...`(须在**应用项目根**,含 `sdk/`、`templates/`) |
54
55
 
55
56
  扩展侧栏、命令面板触发的操作与上述 CLI **同源**(bundled `clis/*.js`)。
56
57
 
57
58
  ### 流程子命令(`flow` → `dazi-flow`)
58
59
 
59
- `.\scripts\dazi.ps1 flow …` **不会**执行独立的 `dazi-flow.exe`,而是:
60
+ `dazi flow …` **不会**执行独立的 `dazi-flow.exe`,而是:
60
61
 
61
62
  1. `dazi.ps1` 设置 `DAZI_BUNDLED_DIR`,在 **dazi-work 根**执行 `node bundled/clis/dazi.js`
62
63
  2. `dazi.js` 将 `flow` 后所有参数 **转发**给 `node bundled/clis/dazi-flow.js`
@@ -64,7 +65,7 @@ cd D:\path\to\dazi-work
64
65
  因此文档里的 `dazi-flow project pull …` 在 Trae / VS Code 交付环境中应写为:
65
66
 
66
67
  ```powershell
67
- .\scripts\dazi.ps1 flow project pull --flow 98 --dir "项目\flow_xxx\流程\MyFlow"
68
+ dazi flow project pull --flow 98 --dir "项目\flow_xxx\流程\MyFlow"
68
69
  ```
69
70
 
70
71
  流程项目开发详见 [flow/flow-project-guide](../flow/flow-project-guide.md)。
@@ -73,18 +74,18 @@ cd D:\path\to\dazi-work
73
74
 
74
75
  1. 环境变量 `DAZI_BUNDLED_DIR`
75
76
  2. `dazi-work/tools/dazi-clis/`(可选离线包)
76
- 3. 已安装扩展(路径因 IDE 而异)
77
- - Trae:`%USERPROFILE%\.trae\extensions\dazitech.dazi-vscode-*\bundled\clis`
78
- - Cursor / VS Code:`.cursor\extensions` 或 `.vscode\extensions`
77
+ 3. 已安装扩展(路径因 IDE 而异)
78
+ - Trae:`%USERPROFILE%\.trae\extensions\dazitech.dazi-vscode-*\bundled\clis`
79
+ - Cursor / VS Code:`.cursor\extensions` 或 `.vscode\extensions`
79
80
  - 也可:`%VSCODE_EXTENSIONS%`、`dazi-work\tools\dazi-clis`(`sync-clis-from-extension.ps1`)
80
81
 
81
82
  ## 常见错误
82
83
 
83
- | 现象 | 原因 | 处理 |
84
- |------|------|------|
85
- | `dazi-onto` 找不到 | v3 无此全局命令 | 改用 `.\scripts\dazi.ps1 onto ...` |
86
- | `dazi` 找不到 | 未装 vsix / 未用包装脚本 | `doctor-cli.ps1` 安装 vsix |
87
- | `dazi-app` 找不到 | 未在应用项目根或未 pnpm install | `cd 项目/app_<名> && pnpm install` |
84
+ | 现象 | 原因 | 处理 |
85
+ | ------------------ | ----------------------------------------- | ----------------------------------------------- |
86
+ | `dazi-onto` 找不到 | v3 无此全局命令 | 改用 `dazi onto ...` |
87
+ | `dazi` 找不到 | 未装 vsix / 未用包装脚本 / 未全局安装 CLI | `doctor-cli.ps1` `pnpm add -g @dazitech/cli` |
88
+ | `dazi-app` 找不到 | 未在应用项目根或未 pnpm install | `cd 项目/app_<名> && pnpm install` |
88
89
 
89
90
  ## 相关文档
90
91
 
@@ -3,84 +3,85 @@
3
3
  **文档 ID**: `guides/cli-reference`
4
4
 
5
5
  > **生产环境**:在 `dazi-work` 根目录,所有 `dazi` / `dazi onto` / `dazi flow` 命令写作
6
- > **`.\scripts\dazi.ps1 <子命令>`**;DRAP 在**应用项目根**(`项目/app_<名称>/`,含 `sdk/`)用 **`pnpm run dazi-app -- <子命令>`**。
6
+ > **`dazi <子命令>`**;DRAP 在**应用项目根**(`项目/app_<名称>/`,含 `sdk/`)用 **`pnpm run dazi-app -- <子命令>`**。
7
7
  > 详见 [CLI 调用约定](./cli-invocation.md)。首次安装后运行 **`.\scripts\doctor-cli.ps1`**。
8
8
 
9
- ## 主 CLI(`.\scripts\dazi.ps1`)
10
-
11
- | 命令 | 说明 |
12
- | --------------------------------------- | --------------------------------------- |
13
- | `.\scripts\dazi.ps1 auth login` | 用户名密码登录 |
14
- | `.\scripts\dazi.ps1 auth set-token` | 绑定 JWT Token |
15
- | `.\scripts\dazi.ps1 auth whoami` | 显示当前账号 |
16
- | `.\scripts\dazi.ps1 auth migrate` | 迁移旧版认证 |
17
- | `.\scripts\dazi.ps1 doctor` | 环境诊断 |
18
- | `.\scripts\dazi.ps1 env` | 显示环境信息 |
19
- | `.\scripts\dazi.ps1 docs list` | 列出文档 |
20
- | `.\scripts\dazi.ps1 docs open <id>` | 打开文档 |
21
- | `.\scripts\dazi.ps1 docs sync` | 同步内置文档到 `资源/docs/` |
22
- | `.\scripts\dazi.ps1 prompt list` | 列出提示词 |
23
- | `.\scripts\dazi.ps1 prompt show <id>` | 显示提示词 |
24
- | `.\scripts\dazi.ps1 prompt sync` | 同步内置提示词到 `资源/prompts/` |
25
- | `.\scripts\dazi.ps1 examples list` | 列出示例脚本 |
26
- | `.\scripts\dazi.ps1 examples open <id>` | 显示示例内容 |
27
- | `.\scripts\dazi.ps1 examples sync` | 同步内置示例到 `资源/examples/` |
28
- | `.\scripts\dazi.ps1 migrate workspace` | 迁移工作区 |
29
- | `.\scripts\dazi.ps1 migrate config` | 迁移旧配置 |
30
- | `.\scripts\dazi.ps1 onto <args>` | 本体 CLI(**勿用** `dazi-onto`) |
31
- | `.\scripts\dazi.ps1 flow <args>` | 流程 CLI |
32
- | `.\scripts\dazi.ps1 app <args>` | 应用 CLI(亦可在应用项目根用 `pnpm run dazi-app`) |
33
-
34
- ## 本体(`.\scripts\dazi.ps1 onto ...`)
35
-
36
- | 命令 | 说明 |
37
- | ------------------------------------------------------------------------ | ---------------- |
38
- | `.\scripts\dazi.ps1 onto space list` | 空间列表 |
39
- | `.\scripts\dazi.ps1 onto space snapshot` | 拉取空间快照 |
40
- | `.\scripts\dazi.ps1 onto space init` | 初始化空间工作区 |
41
- | `.\scripts\dazi.ps1 onto function list` | 函数定义列表 |
42
- | `.\scripts\dazi.ps1 onto function run` | 执行函数 |
43
- | `.\scripts\dazi.ps1 onto function publish` | 发布函数 |
44
- | `.\scripts\dazi.ps1 onto function update-code` | 更新函数代码 |
45
- | `.\scripts\dazi.ps1 onto action list/update-code/delete` | 动作管理 |
46
- | `.\scripts\dazi.ps1 onto rule list/run-seed/delete` | 规则管理 |
47
- | `.\scripts\dazi.ps1 onto script sync/publish/publish-preview/run/dedupe` | 脚本管理 |
48
- | `.\scripts\dazi.ps1 onto mcp serve` | 启动本体 MCP |
49
-
50
- ## 流程(`.\scripts\dazi.ps1 flow ...`)
51
-
52
- > **流程项目日常开发**见 [flow/flow-project-guide](../flow/flow-project-guide.md)。
53
- > 下列 `flow` 子命令均写作 `.\scripts\dazi.ps1 flow <...>`。
9
+ ## 主 CLI(`dazi`)
10
+
11
+ | 命令 | 说明 |
12
+ | ------------------------- | -------------------------------------------------- |
13
+ | `dazi auth login` | 用户名密码登录 |
14
+ | `dazi auth set-token` | 绑定 JWT Token |
15
+ | `dazi auth whoami` | 显示当前账号 |
16
+ | `dazi auth migrate` | 迁移旧版认证 |
17
+ | `dazi doctor` | 环境诊断 |
18
+ | `dazi env` | 显示环境信息 |
19
+ | `dazi docs list` | 列出文档 |
20
+ | `dazi docs open <id>` | 打开文档 |
21
+ | `dazi docs sync` | 同步内置文档到 `资源/docs/` |
22
+ | `dazi prompt list` | 列出提示词 |
23
+ | `dazi prompt show <id>` | 显示提示词 |
24
+ | `dazi prompt sync` | 同步内置提示词到 `资源/prompts/` |
25
+ | `dazi examples list` | 列出示例脚本 |
26
+ | `dazi examples open <id>` | 显示示例内容 |
27
+ | `dazi examples sync` | 同步内置示例到 `资源/examples/` |
28
+ | `dazi migrate workspace` | 迁移工作区 |
29
+ | `dazi migrate config` | 迁移旧配置 |
30
+ | `dazi onto <args>` | 本体 CLI(**勿用** `dazi-onto`) |
31
+ | `dazi flow <args>` | 流程 CLI |
32
+ | `dazi app <args>` | 应用 CLI(亦可在应用项目根用 `pnpm run dazi-app`) |
33
+
34
+ ## 本体(`dazi onto ...`)
35
+
36
+ | 命令 | 说明 |
37
+ | ---------------------------------------------------------- | ---------------- |
38
+ | `dazi onto space list` | 空间列表 |
39
+ | `dazi onto space snapshot` | 拉取空间快照 |
40
+ | `dazi onto space init` | 初始化空间工作区 |
41
+ | `dazi onto function list` | 函数定义列表 |
42
+ | `dazi onto function run` | 执行函数 |
43
+ | `dazi onto function publish` | 发布函数 |
44
+ | `dazi onto function update-code` | 更新函数代码 |
45
+ | `dazi onto action list/update-code/delete` | 动作管理 |
46
+ | `dazi onto rule list/run-seed/delete` | 规则管理 |
47
+ | `dazi onto script sync/publish/publish-preview/run/dedupe` | 脚本管理 |
48
+ | `dazi onto mcp serve` | 启动本体 MCP |
49
+
50
+ ## 流程(`dazi flow ...`)
51
+
52
+ > **流程项目日常开发**见 [flow/flow-project-guide](../flow/flow-project-guide.md)。
54
53
 
55
54
  ### 流程项目(`项目/flow_*/流程/<名>/`)
56
55
 
57
- | 命令 | 说明 |
58
- |------|------|
59
- | `flow project pull --flow <id> --dir <流程目录>` | 拉取 snapshot 并拆分为 flow.json + 节点代码 |
60
- | `flow project push --dir <dir> [--canvas]` | 提交脏代码节点;`--canvas` 含画布 |
61
- | `flow project status --dir <dir>` | 本地代码改动 |
62
- | `flow node push --node <uuid> --dir <dir>` | 提交单节点代码 |
63
- | `flow node pull --node <uuid> --dir <dir>` | 拉取单节点代码 |
64
- | `flow run node-exec --node <uuid> --dir <dir>` | 单节点测试 |
65
- | `flow run flow-exec --dir <dir> --type debug` | 整流程运行 |
66
- | `flow variable pull --name <名> --dir <dir>` | 拉取变量到 `变量/<名>.json` |
67
- | `flow variable sync --dir <dir>` | 同步全部调试变量 |
56
+ | 命令 | 说明 |
57
+ | ----------------------------------------------------- | ------------------------------------------- |
58
+ | `dazi flow project pull --flow <id> --dir <流程目录>` | 拉取 snapshot 并拆分为 flow.json + 节点代码 |
59
+ | `dazi flow project push --dir <dir> [--canvas]` | 提交脏代码节点;**配置变更必须** `--canvas` |
60
+ | `dazi flow project doctor --dir <dir>` | 检查 flow.json / meta / 节点/ 一致性 |
61
+ | `dazi flow project repair-meta --dir <dir>` | 修复 flow.meta.json 索引 |
62
+ | `dazi flow project status --dir <dir>` | 本地代码改动 |
63
+ | `dazi flow node push --node <uuid> --dir <dir>` | 提交单节点代码 |
64
+ | `dazi flow node pull --node <uuid> --dir <dir>` | 拉取单节点代码 |
65
+ | `dazi flow run node-exec --node <uuid> --dir <dir>` | 单节点测试 |
66
+ | `dazi flow run flow-exec --dir <dir> --type debug` | 整流程运行 |
67
+ | `dazi flow variable pull --name <名> --dir <dir>` | 拉取变量到 `变量/<名>.json` |
68
+ | `dazi flow variable sync --dir <dir>` | 同步全部调试变量 |
68
69
 
69
70
  ### 平台级 / 旧式
70
71
 
71
- | 命令 | 说明 |
72
- |------|------|
73
- | `flow flows list` | Flow 列表 |
74
- | `flow flows get <id>` | Flow 详情 |
75
- | `flow flows create` | 新建 Flow |
76
- | `flow snapshot pull --flow <id>` | 拉取快照到 `flows/<id>/` |
77
- | `flow snapshot push-graph` | 推送图快照 |
78
- | `flow run start <id>` / `run debug <id>` | 启动 / 调试 Run |
79
- | `flow run variables-list` | 查看变量 |
80
- | `flow source list/tables/table-structure` | 数据源 |
81
- | `flow plan compile/apply/markdown` | 执行计划 |
82
- | `flow file list/upload/pull` | 文件管理 |
83
- | `flow mcp serve` | Flow MCP |
72
+ | 命令 | 说明 |
73
+ | ---------------------------------------------- | ------------------------ |
74
+ | `dazi flow flows list` | Flow 列表 |
75
+ | `dazi flow flows get <id>` | Flow 详情 |
76
+ | `dazi flow flows create` | 新建 Flow |
77
+ | `dazi flow snapshot pull --flow <id>` | 拉取快照到 `flows/<id>/` |
78
+ | `dazi flow snapshot push-graph` | 推送图快照 |
79
+ | `dazi flow run start <id>` / `run debug <id>` | 启动 / 调试 Run |
80
+ | `dazi flow run variables-list` | 查看变量 |
81
+ | `dazi flow source list/tables/table-structure` | 数据源 |
82
+ | `dazi flow plan compile/apply/markdown` | 执行计划 |
83
+ | `dazi flow file list/upload/pull` | 文件管理 |
84
+ | `dazi flow mcp serve` | Flow MCP |
84
85
 
85
86
  ## 应用(`项目/app_<名称>/` 应用项目根)
86
87
 
@@ -95,4 +96,4 @@
95
96
  | `pnpm run dazi-app -- asset list` | drap-assets 列表 |
96
97
  | `pnpm run dazi-app -- manifest validate --cwd apps/<app> --scan-src` | 校验 manifest |
97
98
 
98
- 等价写法(仍在 `dazi-work` 根):`.\scripts\dazi.ps1 app <子命令>`。
99
+ 等价写法(仍在 `dazi-work` 根):`dazi app <子命令>`。