@dazitech/cli 3.0.0

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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +104 -0
  3. package/dist/bin/dazi-app.cjs +4 -0
  4. package/dist/bin/dazi-flow.cjs +4 -0
  5. package/dist/bin/dazi-onto.cjs +4 -0
  6. package/dist/bin/dazi.cjs +4 -0
  7. package/dist/bin/run-cli-bin.cjs +62 -0
  8. package/dist/clis/dazi-app.js +16697 -0
  9. package/dist/clis/dazi-flow.js +6093 -0
  10. package/dist/clis/dazi-onto.js +3948 -0
  11. package/dist/clis/dazi.js +5677 -0
  12. package/dist/docs/app/app-init.md +69 -0
  13. package/dist/docs/app/build-upload.md +77 -0
  14. package/dist/docs/app/release-guide.md +51 -0
  15. 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 +261 -0
  16. package/dist/docs/auth/auth-login.md +41 -0
  17. package/dist/docs/auth/token-management.md +42 -0
  18. package/dist/docs/data/cube-guide.md +23 -0
  19. package/dist/docs/data/data-spaces.md +30 -0
  20. package/dist/docs/data/table-preview.md +41 -0
  21. package/dist/docs/flow/flow-project-guide.md +505 -0
  22. package/dist/docs/flow/flows-guide.md +302 -0
  23. package/dist/docs/flow/node-code-guide.md +399 -0
  24. package/dist/docs/flow/plan-guide.md +59 -0
  25. package/dist/docs/flow/run-guide.md +98 -0
  26. package/dist/docs/flow/source-guide.md +44 -0
  27. package/dist/docs/flow/variables-guide.md +406 -0
  28. 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 +344 -0
  29. package/dist/docs/guides/cli-invocation.md +93 -0
  30. package/dist/docs/guides/cli-reference.md +98 -0
  31. package/dist/docs/guides/mcp-setup.md +89 -0
  32. package/dist/docs/guides/migrate-v2-v3.md +54 -0
  33. package/dist/docs/guides/quickstart.md +77 -0
  34. package/dist/docs/guides/troubleshooting.md +82 -0
  35. package/dist/docs/guides/workspace-v3.md +53 -0
  36. package/dist/docs/index.json +204 -0
  37. package/dist/docs/onto/action-guide.md +48 -0
  38. package/dist/docs/onto/dazi_script_sdk_reference.md +168 -0
  39. package/dist/docs/onto/dazi_script_seed_data_guide.md +155 -0
  40. package/dist/docs/onto/function-guide.md +68 -0
  41. package/dist/docs/onto/rule-guide.md +52 -0
  42. package/dist/docs/onto/space-management.md +46 -0
  43. 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 +145 -0
  44. package/dist/docs/onto//346/234/254/344/275/223/350/247/204/345/210/222/346/214/207/345/215/227.md +131 -0
  45. 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 +541 -0
  46. package/dist/examples/index.json +36 -0
  47. package/dist/examples/onto/function/profit_fn_customer_segmentation.py +117 -0
  48. package/dist/examples/onto/function/profit_fn_mom_analysis.py +89 -0
  49. package/dist/examples/onto/function/profit_fn_top_products.py +89 -0
  50. package/dist/examples/onto/function/profit_fn_yoy_analysis.py +89 -0
  51. package/dist/examples/onto/setup/profit_ontology_init.py +388 -0
  52. package/dist/prompts/app/ui-design.md +48 -0
  53. package/dist/prompts/data/data-analysis.md +42 -0
  54. package/dist/prompts/data/sql-query.md +36 -0
  55. package/dist/prompts/flow/flow-design.md +77 -0
  56. package/dist/prompts/flow/plan-generate.md +61 -0
  57. package/dist/prompts/flow/run-debug.md +66 -0
  58. package/dist/prompts/flow/run-fix-loop.md +77 -0
  59. package/dist/prompts/general/ask-dazi.md +30 -0
  60. package/dist/prompts/general/code-review.md +31 -0
  61. package/dist/prompts/general/troubleshoot.md +41 -0
  62. package/dist/prompts/index.json +20 -0
  63. package/dist/prompts/onto/action-design.md +47 -0
  64. package/dist/prompts/onto/function-design.md +44 -0
  65. package/dist/prompts/onto/rule-seed.md +41 -0
  66. package/dist/prompts/onto/script-publish-run.md +146 -0
  67. package/package.json +27 -0
@@ -0,0 +1,344 @@
1
+ # 流程开发最佳实践(VS-flow0 案例)
2
+
3
+ **文档 ID**: `flow/流程开发最佳实践-VS-flow0案例`
4
+
5
+ > 最佳实践系列文档。以 **VS-flow0**(flowId `103`)为完整案例,总结从 Excel 解析 → 质检分支 → SQL 关联 → 数据库落库的端到端实践。
6
+ > 本文侧重**模式与决策**;目录结构、pull/push、画布规范见 [数据流程项目开发指南](./flow-project-guide.md)。
7
+ > 系列索引见 [Flow 文档索引 · 最佳实践系列](./flows-guide.md#最佳实践系列)。
8
+
9
+ ---
10
+
11
+ ## 一、VS-flow0 案例总结
12
+
13
+ ### 1.1 业务目标
14
+
15
+ | 项 | 说明 |
16
+ | ----------- | ----------------------------------------------------------------------------- |
17
+ | 输入 | `Demo销售表_最简.xlsx`(销售表 / 产品表 / 规格表) |
18
+ | 处理 | 多 Sheet 解析 → 数据质量检查 → 条件分支 → DuckDB JOIN 宽表 |
19
+ | 输出 | ClickHouse `space__xsh_01.temp_sales001`(销售表临时数据 001,96 行 × 12 列) |
20
+ | 平台 flowId | `103`(示例;你的项目以 `flow.meta.json` 为准) |
21
+
22
+ ### 1.2 流程拓扑
23
+
24
+ ```text
25
+ 开始
26
+
27
+ Excel 多表解析 → 产出:销售表、产品表、规格表
28
+
29
+ 数据质量检查 → 产出:V_DQ_REPORT、V_DQ_SCORE、quality_passed
30
+
31
+ 质检是否通过(condition)
32
+ ├─ True → SQL 表间关联 → 产出:销售明细宽表
33
+ │ ↓
34
+ │ 写入销售临时表(database-sink)→ temp_sales001
35
+ │ ↓
36
+ └─ False → 结束(跳过 SQL 与入库)
37
+
38
+ 结束
39
+ ```
40
+
41
+ ### 1.3 节点与变量一览
42
+
43
+ | 序号 | 节点 | 类型 | 主要配置 | 产出变量 |
44
+ | ---- | -------------- | -------------------- | -------------------------------------------------------- | --------------------------------------------- |
45
+ | 1 | Excel 多表解析 | `excel-python` | `managed_file_id`、主输出 `销售表` | `销售表`、`产品表`、`规格表` |
46
+ | 2 | 数据质量检查 | `data-quality-check` | `attached_variables`、7 条 rules、`fail_on_error: false` | `V_DQ_REPORT`、`V_DQ_SCORE`、`quality_passed` |
47
+ | 3 | 质检是否通过 | `condition` | 单行表达式 `eval` | (无,仅分支) |
48
+ | 4 | SQL 表间关联 | `sql-query` | `attached_variables` 三表 | `销售明细宽表` |
49
+ | 5 | 写入销售临时表 | `database-sink` | `connectionId`、`tableName`、`input_variable_name` | (写入外部库) |
50
+
51
+ ### 1.4 关键设计决策
52
+
53
+ **(1)一个 excel-python + 一个 sql-query,而非多个 excel-import**
54
+
55
+ - 三张 Sheet 表头行不一致(销售表 header=0,维表 header=1),用 **单节点 Python** 统一 `read_excel` 参数更可控。
56
+ - 多表 JOIN 放在 **DuckDB sql-query**,变量名即表名,SQL 可读性高、易调试。
57
+
58
+ **(2)质检与分支分离**
59
+
60
+ - `data-quality-check` 设置 **`fail_on_error: false`**:始终产出报告,不中断流程。
61
+ - 下游 **`condition`** 读入边 `df`(即 `V_DQ_REPORT`),按「通过」列决定 True/False。
62
+ - 好处:失败路径可观测(报告仍在 Run 中),成功路径才执行重计算与入库。
63
+
64
+ **(3)条件节点必须是单行表达式**
65
+
66
+ ```python
67
+ bool(df is not None and not df.empty and df["通过"].all())
68
+ ```
69
+
70
+ 多行 Python + `output.print` 会在 `eval` 时报 `Condition Error: invalid syntax`。
71
+
72
+ **(4)database-sink 显式绑定变量**
73
+
74
+ - 配置 `input_variable_name: 销售明细宽表`,不依赖隐式入边推断。
75
+ - `connectionId` 使用 `ads_connections` 字符串 id(如 `clickhouse__space_xsh_01`),与 `资源/datasources/<连接名>/` 文档一致。
76
+
77
+ ### 1.5 运行验证
78
+
79
+ 整流程 `flow run flow-exec --type debug` 通过后,各节点耗时量级参考:Excel ~700ms、质检 ~600ms、SQL ~50ms、入库 ~620ms(以实际环境为准)。
80
+
81
+ ---
82
+
83
+ ## 二、推荐开发阶段(五步法)
84
+
85
+ ### 阶段 0:规划(动手写代码前)
86
+
87
+ 1. **画拓扑**:明确数据源、中间变量名、终态(表变量 / 标量 / 外部库表)。
88
+ 2. **变量命名表**:全流程唯一、见名知意;中文名可用,但团队内保持一致。
89
+ 3. **引用资源**:
90
+ - Excel 表结构 → `资源/files/`(侧栏「文件上传管理」拉取);
91
+ - 目标库 → `资源/datasources/<连接名>/`(侧栏「数据连接」→ **拉取连接信息**);
92
+ - 数据空间表清单 → `资源/dataspaces/<空间名>/`(侧栏「数据空间」→ **拉取空间信息**)。
93
+ 4. **节点选型**:见下文「节点选型速查」。
94
+
95
+ ### 阶段 1:接入与解析
96
+
97
+ - Excel 多 Sheet、表头不统一 → **`excel-python`** + `set_table_output`。
98
+ - **凡有 `managed_file_id` 的 Excel(`.xlsx`/`.xls`)默认用 `excel-python`**,**勿用 `file-source`**(不解析 Excel)。
99
+ - 单 Sheet、第 1 行标准表头、零自定义逻辑 → 才考虑 **`excel-import`**。
100
+ - 解析后立即 **`flow variable pull`** 核对列名、行数、类型。
101
+
102
+ ### 阶段 2:质量与分支
103
+
104
+ - 规则集中在 **`flow.json` → qualityConfig.rules**(行数、非空、外键)。
105
+ - 需要「失败仍跑完、再决定是否继续」→ **`fail_on_error: false` + condition**。
106
+ - 条件逻辑简单 → **`condition`**;复杂判定 → 先用 **`python-script`** 写清再提炼为单行。
107
+
108
+ ### 阶段 3:转换与关联
109
+
110
+ - 内存多表 JOIN / 聚合 → **`sql-query`**(`FROM 上游变量名`)。
111
+ - 复杂行级逻辑 → **`python-script`**(`get_variable` + `result_df`)。
112
+ - SQL 节点配置 **`attached_variables`**,便于单测时注册未连线的维表。
113
+
114
+ ### 阶段 4:落库与收尾
115
+
116
+ - 写外部库 → **`database-sink`**(`connectionId` + `tableName` + `input_variable_name`)。
117
+ - 更新 `资源/datasources/` 下表说明(侧栏连接下各表「下载表信息」)。
118
+ - 整流程 **debug run** 通过后,再考虑 preview / 生产调度。
119
+
120
+ ---
121
+
122
+ ## 三、节点选型速查
123
+
124
+ | 场景 | 推荐节点 | 避免 |
125
+ | --------------------- | -------------------- | --------------------------------- |
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` |
136
+
137
+ ---
138
+
139
+ ## 四、变量约定(必守)
140
+
141
+ ### 4.1 命名
142
+
143
+ - 全流程 **`output_variable_name` 不重名**。
144
+ - 事实表 / 维表 / 宽表 / 报告表语义分离,例如:`销售表` → `销售明细宽表`、`V_DQ_REPORT`。
145
+ - 标量用简短名:`quality_passed`、`V_DQ_SCORE`。
146
+
147
+ ### 4.2 读写方式
148
+
149
+ | 场景 | 做法 |
150
+ | ----------------- | ------------------------------------------------------------------------------- |
151
+ | SQL 消费上游表 | `FROM 销售表` / `JOIN 产品表`(变量名即表名) |
152
+ | Python 单节点测试 | `get_variable("销售表")`(勿假设 `df` 一定有值) |
153
+ | Python 整图运行 | 入边 `df` 可用;多表时其余 `get_variable` |
154
+ | excel-python 多表 | 每张表 **`set_table_output(变量名, df)`**,主表名与 `output_variable_name` 一致 |
155
+ | database-sink | **`input_variable_name`** 指向要写入的表变量 |
156
+
157
+ ### 4.3 调试顺序
158
+
159
+ ```text
160
+ 自上游向下单节点测试 → 或一次 flow-exec --type debug → variable pull/sync 核对
161
+ ```
162
+
163
+ 改 **`output_variable_name` / 画布** → `project push --canvas`
164
+ 改 **`code.py` / `code.sql`** → `node push` 或 `project push`
165
+
166
+ ---
167
+
168
+ ## 五、画布与 flow.json 规范
169
+
170
+ 1. 节点 **`type: "custom"`**,业务类型在 **`data.type`**。
171
+ 2. 连线必须写 **`sourceHandle` / `targetHandle`**(`l` `t` `r` `b`;条件用 `true` / `false`)。
172
+ 3. 相邻节点间距:横向 ≥ 260px,纵向 ≥ 140px。
173
+ 4. 代码只放在 **`节点/<名>/code.*`**,不要内嵌进 `flow.json`。
174
+ 5. 新增节点流程:**改 flow.json → `push --canvas` → `pull` 同步 uuid → 再 push 代码**(纯配置节点无 code 则省略最后一步)。
175
+
176
+ 详见 [flow-project-guide §6.2](./flow-project-guide.md#62-画布节点与连线规范ai-创建--编辑-flowjson-必读)。
177
+
178
+ ---
179
+
180
+ ## 六、VS-flow0 代码片段参考
181
+
182
+ ### 6.1 Excel 多表解析(节选)
183
+
184
+ ```python
185
+ SHEETS = {
186
+ "销售表": {"sheet_name": "销售表", "header": 0, "usecols": "A:H"},
187
+ "产品表": {"sheet_name": "产品表", "header": 1, "usecols": "A:C"},
188
+ "规格表": {"sheet_name": "规格表", "header": 1, "usecols": "A:C"},
189
+ }
190
+ for var_name, kwargs in SHEETS.items():
191
+ raw = pd.read_excel(excel_source_path, **kwargs)
192
+ table = _normalize_sales(raw) if var_name == "销售表" else _normalize_dim(raw)
193
+ set_table_output(var_name, table)
194
+ ```
195
+
196
+ ### 6.2 SQL 三表 JOIN(节选)
197
+
198
+ ```sql
199
+ SELECT
200
+ s.ID AS 销售ID,
201
+ s.地区,
202
+ s.产品 AS 产品ID,
203
+ p.名称 AS 产品名称,
204
+ ...
205
+ FROM 销售表 s
206
+ LEFT JOIN 产品表 p ON CAST(s.产品 AS VARCHAR) = CAST(p.ID AS VARCHAR)
207
+ LEFT JOIN 规格表 g ON CAST(s.规格 AS VARCHAR) = CAST(g.ID AS VARCHAR)
208
+ ```
209
+
210
+ 维表 ID 为字符串、事实表编码混用时,**JOIN 前 CAST** 避免 silent mismatch。
211
+
212
+ ### 6.3 database-sink 配置
213
+
214
+ ```json
215
+ {
216
+ "type": "database-sink",
217
+ "data": {
218
+ "connectionId": "clickhouse__space_xsh_01",
219
+ "tableName": "temp_sales001",
220
+ "display_name": "销售表临时数据001",
221
+ "input_variable_name": "销售明细宽表"
222
+ }
223
+ }
224
+ ```
225
+
226
+ ### 6.4 dataspace-source / dataspace-sink 配置(新增)
227
+
228
+ ```json
229
+ {
230
+ "type": "dataspace-source",
231
+ "data": {
232
+ "spaceId": "space__0519",
233
+ "output_variable_name": "空间销售明细"
234
+ }
235
+ }
236
+ ```
237
+
238
+ `节点/<dataspace-source名>/code.sql` 示例:
239
+
240
+ ```sql
241
+ SELECT *
242
+ FROM sales_fact
243
+ WHERE dt >= '2025-01-01'
244
+ LIMIT 100000
245
+ ```
246
+
247
+ ```json
248
+ {
249
+ "type": "dataspace-sink",
250
+ "data": {
251
+ "spaceId": "space__0519",
252
+ "tableName": "temp_sales001",
253
+ "mode": "append",
254
+ "syncMetadata": true,
255
+ "input_variable_name": "空间销售明细"
256
+ }
257
+ }
258
+ ```
259
+
260
+ 要点:
261
+
262
+ - `dataspace-source` / `dataspace-sink` 一律使用 **`spaceId`**,不是 `connectionId`。
263
+ - `dataspace-source` 的 SQL 放在 `code.sql`,与 `database-source` 一致。
264
+ - `dataspace-sink` 支持 `mode=append|replace`,默认建议 `append`。
265
+ - `syncMetadata=true` 时,写入后会触发空间元数据同步(建议保留默认)。
266
+
267
+ ---
268
+
269
+ ## 七、常用命令清单
270
+
271
+ 在 **工作区根目录**(如 `dazi-work`)执行,`<流程目录>` 替换为你的流程项目路径:
272
+
273
+ ```powershell
274
+ cd "<流程目录>"
275
+
276
+ # 同步平台
277
+ .\scripts\dazi.ps1 flow project pull --flow <flowId> --dir .
278
+ .\scripts\dazi.ps1 flow project push --dir . --canvas
279
+
280
+ # 测试
281
+ .\scripts\dazi.ps1 flow run node-exec --node <node_uuid> --dir .
282
+ .\scripts\dazi.ps1 flow run flow-exec --dir . --type debug
283
+
284
+ # 变量
285
+ .\scripts\dazi.ps1 flow variable pull --name 销售明细宽表 --dir .
286
+ .\scripts\dazi.ps1 flow variable sync --dir .
287
+
288
+ # 数据源
289
+ .\scripts\dazi.ps1 flow source list
290
+
291
+ # 数据空间
292
+ .\scripts\dazi.ps1 flow dataspace list
293
+ .\scripts\dazi.ps1 flow dataspace tables <spaceId>
294
+ ```
295
+
296
+ 命令前缀与 Trae/VS Code 约定见 [CLI 调用约定](../guides/cli-invocation.md)。
297
+
298
+ ---
299
+
300
+ ## 八、常见问题与对策
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` |
310
+ | dataspace-sink 写入失败 | spaceId / tableName 错误 | 先 `flow dataspace list` / `flow dataspace tables` |
311
+ | 变量列为空 | 单测时只用了 `df` | Python 改用 `get_variable` |
312
+ | AI 不知道 connectionId | 未拉取连接文档 | 侧栏数据连接 → **拉取连接信息** |
313
+ | AI 不知道 spaceId | 未拉取空间文档 | 侧栏数据空间 → **拉取空间信息** |
314
+
315
+ ---
316
+
317
+ ## 九、新流程启动检查表
318
+
319
+ 复制到新项目 `流程/<FlowName>/README.md` 或规划文档中使用:
320
+
321
+ - [ ] 已创建/拉取流程目录,`flow.meta.json` 含 `flowId`
322
+ - [ ] 拓扑图与变量命名表已评审
323
+ - [ ] 数据源文档已 @ 引用(Excel / connectionId / 空间表清单)
324
+ - [ ] 每个产出表节点配置了 `output_variable_name`
325
+ - [ ] SQL / Python 中变量名与画布完全一致
326
+ - [ ] 条件节点为单行表达式;出边使用 `true`/`false`
327
+ - [ ] 需要入库时配置了 `database-sink` 三要素
328
+ - [ ] 读写数据空间时使用 `dataspace-source` / `dataspace-sink` + `spaceId`
329
+ - [ ] 自上游单测或整流程 debug 通过
330
+ - [ ] `变量/*.json` 已核对 schema 与样例行
331
+ - [ ] 项目 README / 快速启动已更新拓扑与命令
332
+
333
+ ---
334
+
335
+ ## 十、相关文档
336
+
337
+ | 文档 | 用途 |
338
+ | ------------------------------------------------------------- | ----------------------------- |
339
+ | [Flow 文档索引 · 最佳实践系列](./flows-guide.md#最佳实践系列) | 系列目录 |
340
+ | [数据流程项目开发指南](./flow-project-guide.md) | 目录结构、pull/push、画布规范 |
341
+ | [流程变量系统指南](./variables-guide.md) | 变量模型与各节点读写 |
342
+ | [节点代码编写指南](./node-code-guide.md) | code.py / code.sql 模板 |
343
+ | [Flow 运行与测试](./run-guide.md) | Run、debug、错误文件 |
344
+ | [数据源管理](./source-guide.md) | connectionId、表结构 |
@@ -0,0 +1,93 @@
1
+ # CLI 调用约定(生产交付)
2
+
3
+ **文档 ID**: `guides/cli-invocation`
4
+ **适用**: 开发人员仅持有 **`dazi-work/`** + **`dazi-vscode.vsix`**,**无** monorepo 源码
5
+
6
+ ## 原则
7
+
8
+ v3 **不会**把 `dazi` / `dazi-onto` / `dazi-app` 安装到系统 PATH。
9
+ 终端中请使用 **`dazi-work` 包装脚本** 或 **扩展内置 bundled CLI**。
10
+
11
+ ## 命令前缀
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` |
18
+
19
+ CMD 用户:`scripts\dazi.cmd`、`scripts\doctor-cli.cmd`(转发到同名 `.ps1`)。
20
+
21
+ ## 首次安装后(推荐顺序)
22
+
23
+ ```powershell
24
+ # 1) 安装扩展
25
+ code --install-extension dazi-vscode-3.x.x.vsix
26
+
27
+ # 2) 打开 dazi-work 为 VS Code 工作区根
28
+
29
+ # 3) 自检 CLI(无需源码、无需 pnpm run bundle:clis)
30
+ cd D:\path\to\dazi-work
31
+ .\scripts\doctor-cli.ps1
32
+
33
+ # 4) 登录
34
+ .\scripts\dazi.ps1 auth login
35
+ # 或
36
+ .\scripts\dazi.ps1 auth set-token --token "<jwt>"
37
+
38
+ # 5) 验证
39
+ .\scripts\dazi.ps1 auth whoami
40
+ .\scripts\dazi.ps1 onto function list --space <space-id>
41
+ ```
42
+
43
+ ## 文档中的写法对照
44
+
45
+ 内置帮助文档里的可运行示例统一采用 **`.\scripts\dazi.ps1`**,等价关系如下:
46
+
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/`) |
54
+
55
+ 扩展侧栏、命令面板触发的操作与上述 CLI **同源**(bundled `clis/*.js`)。
56
+
57
+ ### 流程子命令(`flow` → `dazi-flow`)
58
+
59
+ `.\scripts\dazi.ps1 flow …` **不会**执行独立的 `dazi-flow.exe`,而是:
60
+
61
+ 1. `dazi.ps1` 设置 `DAZI_BUNDLED_DIR`,在 **dazi-work 根**执行 `node bundled/clis/dazi.js`
62
+ 2. `dazi.js` 将 `flow` 后所有参数 **转发**给 `node bundled/clis/dazi-flow.js`
63
+
64
+ 因此文档里的 `dazi-flow project pull …` 在 Trae / VS Code 交付环境中应写为:
65
+
66
+ ```powershell
67
+ .\scripts\dazi.ps1 flow project pull --flow 98 --dir "项目\flow_xxx\流程\MyFlow"
68
+ ```
69
+
70
+ 流程项目开发详见 [flow/flow-project-guide](../flow/flow-project-guide.md)。
71
+
72
+ ## CLI 解析来源(doctor-cli 会检查)
73
+
74
+ 1. 环境变量 `DAZI_BUNDLED_DIR`
75
+ 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`
79
+ - 也可:`%VSCODE_EXTENSIONS%`、`dazi-work\tools\dazi-clis`(`sync-clis-from-extension.ps1`)
80
+
81
+ ## 常见错误
82
+
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` |
88
+
89
+ ## 相关文档
90
+
91
+ - [CLI 命令参考](./cli-reference.md)
92
+ - [故障排查](./troubleshooting.md)
93
+ - 工作区脚本说明:`dazi-work/scripts/README.md`(交付包内)
@@ -0,0 +1,98 @@
1
+ # CLI 命令速查
2
+
3
+ **文档 ID**: `guides/cli-reference`
4
+
5
+ > **生产环境**:在 `dazi-work` 根目录,所有 `dazi` / `dazi onto` / `dazi flow` 命令写作
6
+ > **`.\scripts\dazi.ps1 <子命令>`**;DRAP 在**应用项目根**(`项目/app_<名称>/`,含 `sdk/`)用 **`pnpm run dazi-app -- <子命令>`**。
7
+ > 详见 [CLI 调用约定](./cli-invocation.md)。首次安装后运行 **`.\scripts\doctor-cli.ps1`**。
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 <...>`。
54
+
55
+ ### 流程项目(`项目/flow_*/流程/<名>/`)
56
+
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>` | 同步全部调试变量 |
68
+
69
+ ### 平台级 / 旧式
70
+
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 |
84
+
85
+ ## 应用(`项目/app_<名称>/` 应用项目根)
86
+
87
+ 在 `dazi-work/项目/app_<名称>/` 下(须含 `sdk/`、`templates/`):
88
+
89
+ | 命令 | 说明 |
90
+ | -------------------------------------------------------------------- | ---------------- |
91
+ | `pnpm run dazi-app -- init ...` | 初始化应用 |
92
+ | `pnpm run dazi-app -- build` | 构建应用 |
93
+ | `pnpm run dazi-app -- upload --space <id>` | 上传应用 |
94
+ | `pnpm run dazi-app -- release list` | 发布管理 |
95
+ | `pnpm run dazi-app -- asset list` | drap-assets 列表 |
96
+ | `pnpm run dazi-app -- manifest validate --cwd apps/<app> --scan-src` | 校验 manifest |
97
+
98
+ 等价写法(仍在 `dazi-work` 根):`.\scripts\dazi.ps1 app <子命令>`。
@@ -0,0 +1,89 @@
1
+ # MCP 配置指南
2
+
3
+ **文档 ID**: `guides/mcp-setup`
4
+
5
+ ## 在 Cursor 中配置搭子 MCP
6
+
7
+ 在项目根目录创建 `.cursor/mcp.json`:
8
+
9
+ ```json
10
+ {
11
+ "mcpServers": {
12
+ "dazi": {
13
+ "command": "node",
14
+ "args": ["<dazi-vscode>/bundled/clis/dazi.js", "mcp", "stdio"],
15
+ "env": {
16
+ "DAZI_BUNDLED_DIR": "<dazi-vscode>/bundled/clis"
17
+ }
18
+ }
19
+ }
20
+ }
21
+ ```
22
+
23
+ 生产交付(`dazi-work`)可将 `command` 改为包装脚本,或设置 `DAZI_BUNDLED_DIR` 指向 `tools/dazi-clis` / 扩展内 `bundled/clis`(见 [CLI 调用约定](./cli-invocation.md))。
24
+
25
+ ## 聚合 MCP 工具总览(`mcp stdio`)
26
+
27
+ 运行 `.\scripts\dazi.ps1 mcp tools` 查看完整列表,共 **28 个工具**:
28
+
29
+ ### 📖 文档与提示词(4 个)
30
+
31
+ | 工具 | 说明 |
32
+ |------|------|
33
+ | `list_docs` | 列出文档目录(可按分类过滤) |
34
+ | `get_doc` | 获取文档完整内容 |
35
+ | `list_prompts` | 列出提示词目录 |
36
+ | `get_prompt` | 获取提示词完整内容 |
37
+
38
+ ### 🧠 本体 onto(8 个)
39
+
40
+ | 工具 | 说明 |
41
+ |------|------|
42
+ | `onto_list_spaces` | 列出所有本体空间 |
43
+ | `onto_list_functions` | 列出空间函数定义 |
44
+ | `onto_get_function` | 查看函数详情 |
45
+ | `onto_run_function` | 执行函数 |
46
+ | `onto_list_actions` | 列出动作定义 |
47
+ | `onto_list_rules` | 列出规则 |
48
+ | `onto_list_scripts` | 列出脚本 |
49
+ | `onto_space_snapshot` | 拉取空间快照 |
50
+
51
+ ### 🔄 流程 flow(9 个)
52
+
53
+ | 工具 | 说明 |
54
+ |------|------|
55
+ | `flow_list_flows` | 列出 Flow |
56
+ | `flow_get_flow` | 查看 Flow 详情 |
57
+ | `flow_list_runs` | 列出运行记录 |
58
+ | `flow_start_run` | 启动 Flow |
59
+ | `flow_debug_run` | 调试最近 Run |
60
+ | `flow_list_sources` | 列出数据源 |
61
+ | `flow_source_tables` | 列出数据源中的表 |
62
+ | `flow_table_structure` | 查看表列结构 |
63
+ | `flow_snapshot_pull` | 拉取快照 |
64
+ | `flow_plan_llm_guide` | 生成 LLM 引导文档 |
65
+
66
+ ### 🗂 数据 data(4 个)
67
+
68
+ | 工具 | 说明 |
69
+ |------|------|
70
+ | `data_list_spaces` | 列出数据空间 |
71
+ | `data_list_tables` | 列出数据表 |
72
+ | `data_table_schema` | 查看表字段结构 |
73
+ | `data_table_sample` | 采样数据(前 N 行)|
74
+
75
+ ## Cursor 使用示例
76
+
77
+ ```
78
+ 给我 onto/function-guide 文档
79
+ → get_doc({"id": "onto/function-guide"})
80
+
81
+ 列出 space-001 的所有函数
82
+ → onto_list_functions({"space_id": "space-001"})
83
+
84
+ 调试最近一次 Flow 运行失败原因
85
+ → flow_debug_run({"flow_id": "flow-abc123"})
86
+
87
+ 查看 orders 表的字段结构
88
+ → flow_table_structure({"source_id": "ch-main", "table_name": "orders"})
89
+ ```
@@ -0,0 +1,54 @@
1
+ # 从 v2 迁移到 v3
2
+
3
+ **文档 ID**: `guides/migrate-v2-v3`
4
+
5
+ ## 快速迁移(3 步)
6
+
7
+ ### 第 1 步:预览变更
8
+
9
+ ```bash
10
+ .\scripts\dazi.ps1 migrate workspace --dry-run
11
+ ```
12
+
13
+ 输出示例:
14
+ ```
15
+ [计划]
16
+ 重命名: ontology/ → onto/
17
+ 重命名: runtime-apps/ → apps/
18
+ 创建: flows/
19
+ 创建: data/
20
+ 创建: docs/
21
+ 创建: prompts/
22
+ 创建: .dazi/
23
+ ```
24
+
25
+ ### 第 2 步:执行迁移
26
+
27
+ ```bash
28
+ .\scripts\dazi.ps1 migrate workspace
29
+ ```
30
+
31
+ 迁移前会自动备份到 `.dazi/backup/<timestamp>/`。
32
+
33
+ ### 第 3 步:迁移认证
34
+
35
+ ```bash
36
+ .\scripts\dazi.ps1 auth migrate --dry-run # 预览
37
+ .\scripts\dazi.ps1 auth migrate # 执行(从 ~/.dazi-app/auth.json 迁移)
38
+ ```
39
+
40
+ ## 配置迁移
41
+
42
+ 旧版 `daziAgent.*` / `daziApp.*` 配置会在首次激活时自动提示迁移,也可手动执行:
43
+
44
+ ```bash
45
+ .\scripts\dazi.ps1 migrate config
46
+ ```
47
+
48
+ ## 回退
49
+
50
+ 如果迁移出现问题,备份在 `.dazi/backup/<timestamp>/`,恢复方式:
51
+
52
+ ```bash
53
+ cp -r .dazi/backup/<timestamp>/ontology ./ontology
54
+ ```