@dazitech/cli 3.0.8 → 3.1.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.
- package/README.md +1 -1
- package/dist/clis/dazi-app.js +1 -1
- package/dist/clis/dazi-flow.js +1 -1
- package/dist/clis/dazi-onto.js +7 -2
- package/dist/clis/dazi.js +1 -1
- package/dist/docs/flow/flow-project-guide.md +1 -1
- package/dist/docs/guides/troubleshooting.md +12 -1
- package/dist/docs/index.json +21 -2
- package/dist/docs/onto/dazi_script_sdk_reference.md +246 -178
- package/dist/docs/onto/function-guide.md +123 -95
- package/dist/docs/onto//346/234/254/344/275/223/345/210/206/347/261/273/350/247/204/345/210/222/344/270/216SDK/346/211/251/345/261/225/346/226/271/346/241/210.md +169 -0
- package/dist/docs/onto//346/234/254/344/275/223/345/221/275/345/220/215/350/247/204/350/214/203_/347/211/251/347/220/206/350/241/250Cube/344/270/216/345/257/271/350/261/241.md +402 -0
- package/dist/docs/onto//346/234/254/344/275/223/345/274/200/345/217/221/344/274/230/345/214/226/346/200/273/347/273/223.md +242 -0
- 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 +339 -249
- package/dist/docs/onto//346/234/254/344/275/223/350/247/204/345/210/222/346/214/207/345/215/227.md +304 -173
- package/dist/docs/onto//350/204/232/346/234/254/350/277/220/350/241/214/345/270/270/350/247/201/351/224/231/350/257/257/345/244/204/347/220/206.md +242 -0
- package/dist/docs/onto//350/247/204/345/210/222/347/244/272/344/276/213_/344/272/247/345/223/201/351/224/200/345/224/256/346/234/254/344/275/223/350/247/204/345/210/222/346/226/271/346/241/210.md +361 -238
- 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 +385 -300
- package/dist/examples/index.json +22 -16
- package/dist/examples/onto/README.md +13 -5
- package/dist/examples/onto/_templates/ontology_function_template.py +50 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/profit_fn_account_breakdown.py +62 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/profit_fn_budget_vs_actual.py +69 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/profit_fn_cost_center_profit.py +64 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/profit_fn_get_summary.py +61 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/profit_fn_mom_analysis.py +82 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/profit_fn_top_accounts.py +61 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/profit_fn_yoy_analysis.py +79 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/save_test_arguments.ps1 +38 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/test_arguments/profit.fn.account_breakdown.json +1 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/test_arguments/profit.fn.budget_vs_actual.json +1 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/test_arguments/profit.fn.cost_center_profit.json +1 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/test_arguments/profit.fn.get_summary.json +1 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/test_arguments/profit.fn.mom_analysis.json +1 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/test_arguments/profit.fn.top_accounts.json +1 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/functions/test_arguments/profit.fn.yoy_analysis.json +1 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/setup/profit_category_mount.py +85 -0
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/setup/profit_ontology_init.py +169 -74
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/setup/profit_seed_data.py +16 -13
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/sales_fn_channel_mix.py +19 -16
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/sales_fn_customer_segmentation.py +48 -50
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/sales_fn_get_summary.py +3 -6
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/sales_fn_mom_analysis.py +11 -12
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/sales_fn_region_breakdown.py +6 -7
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/sales_fn_top_products.py +5 -8
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/sales_fn_yoy_analysis.py +3 -6
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/save_test_arguments.ps1 +32 -19
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/test_arguments/sales.fn.channel_mix.json +3 -6
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/test_arguments/sales.fn.customer_segmentation.json +2 -7
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/test_arguments/sales.fn.get_summary.json +2 -5
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/test_arguments/sales.fn.mom_analysis.json +2 -5
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/test_arguments/sales.fn.region_breakdown.json +2 -5
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/test_arguments/sales.fn.top_products.json +2 -7
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/test_arguments/sales.fn.yoy_analysis.json +2 -5
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/setup/sales_category_mount.py +82 -0
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/setup/sales_ontology_init.py +240 -155
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/setup/sales_seed_data.py +59 -20
- package/dist/prompts/index.json +8 -1
- package/dist/prompts/onto/function-design.md +73 -53
- package/dist/prompts/onto/planning-design.md +104 -0
- package/dist/prompts/onto/script-publish-run.md +229 -194
- package/package.json +1 -1
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/profit_fn_account_breakdown.py +0 -99
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/profit_fn_budget_vs_actual.py +0 -116
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/profit_fn_cost_center_profit.py +0 -85
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/profit_fn_get_summary.py +0 -76
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/profit_fn_mom_analysis.py +0 -86
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/profit_fn_top_accounts.py +0 -103
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/profit_fn_yoy_analysis.py +0 -86
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/save_test_arguments.ps1 +0 -27
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/test_arguments/profit.fn.account_breakdown.json +0 -10
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/test_arguments/profit.fn.budget_vs_actual.json +0 -10
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/test_arguments/profit.fn.cost_center_profit.json +0 -9
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/test_arguments/profit.fn.get_summary.json +0 -9
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/test_arguments/profit.fn.mom_analysis.json +0 -9
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/test_arguments/profit.fn.top_accounts.json +0 -11
- package/dist/examples/onto//345/210/251/346/266/246/347/244/272/344/276/213/function/test_arguments/profit.fn.yoy_analysis.json +0 -9
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/functions/README.md +0 -25
- package/dist/examples/onto//351/224/200/345/224/256/347/244/272/344/276/213/setup/README.md +0 -5
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# 脚本运行常见错误处理
|
|
2
|
+
|
|
3
|
+
**文档 ID**: `onto/script-run-troubleshooting`
|
|
4
|
+
**级别**: **执行脚本前必读(强制)** — 在终端执行 `dazi onto script publish` / `script run` / `function run` / `save-test-arguments` **之前**须通读
|
|
5
|
+
**适用**: 本体 `setup/`、`functions/` 脚本编写、发布与运行;智能体见提示词 `onto/script-publish-run`
|
|
6
|
+
|
|
7
|
+
> 路径占位:`<项目路径>` = `项目/<业务名>/本体/ontos/<实现名>`,`<空间>` 取自实现单元 `README.md`。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. setup 脚本 API 误用
|
|
12
|
+
|
|
13
|
+
| 错误写法 | 正确写法 | 说明 |
|
|
14
|
+
| -------- | -------- | ---- |
|
|
15
|
+
| `s.onto.sync_metrics()` | 删除;必要时 `s.sync_metric_refs()` | `sync_metrics` 不存在 |
|
|
16
|
+
| `s.cubes.upsert(...)` | `s.register_cube(...)` | 无 `s.cubes` |
|
|
17
|
+
| `define_object_type(code, label=name)` | `define_object_type(code, name=...)` | 第二参数为 `name` |
|
|
18
|
+
| `define_object_type(title=...)` | `define_object_type(name=...)` | 参数名为 `name` |
|
|
19
|
+
| `bind_source(source_type=..., source_name=...)` | `bind_source(obj_code, "dazi_cube", config={"cube": "CubeName"})` | 见利润/销售示例 |
|
|
20
|
+
| `define_property(object_type_code=..., title=...)` | `define_property(obj_code, code, name, ...)` | 位置参数 |
|
|
21
|
+
| `define_link_type(title=..., from_object_type=...)` | `define_link_type(name=..., from_object_type_code=..., to_object_type_code=...)` | 以 `_code` 结尾 |
|
|
22
|
+
|
|
23
|
+
**教训**:对照 `资源/examples/onto/利润示例`、`销售示例` 的 init,勿猜 API。
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 2. SQL 聚合:`query_one` 返回类型
|
|
28
|
+
|
|
29
|
+
**现象**:`float' object has no attribute 'get'`
|
|
30
|
+
|
|
31
|
+
```python
|
|
32
|
+
# 错误
|
|
33
|
+
total_row = p.sql.query_one("SELECT sum(amount) AS grand_total FROM ...")
|
|
34
|
+
grand_total = float(total_row.get("grand_total", 0))
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**原因**:聚合场景下 `query_one()` 可能返回标量而非字典行。
|
|
38
|
+
|
|
39
|
+
**修复**:
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
total_rows = p.sql.query("SELECT sum(amount) AS grand_total FROM ...")
|
|
43
|
+
total_row = total_rows[0] if total_rows else {}
|
|
44
|
+
grand_total = float(total_row.get("grand_total", 0) or 0)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 3. 函数输出:禁止 `output.print_json`
|
|
50
|
+
|
|
51
|
+
**现象**:`AttributeError: 'OutputModule' has no attribute 'print_json'`
|
|
52
|
+
|
|
53
|
+
本体函数须 **`return`** 结构化结果,不能当 setup 脚本用 `output` 打印 JSON。
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
def _ontology_fn_body(p):
|
|
57
|
+
rows = p.sql.query("SELECT ...")
|
|
58
|
+
return p.function_result(columns=[...], data=rows, row_count=len(rows))
|
|
59
|
+
|
|
60
|
+
def main():
|
|
61
|
+
s = space.get(ctx.space_id or "")
|
|
62
|
+
# 组装 p(见 ontology_function_template.py)
|
|
63
|
+
return _ontology_fn_body(p)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**禁止**:`output.print_json()`、`main(params: dict)`、裸 `return {"k": v}` 代替 `function_result`。
|
|
67
|
+
|
|
68
|
+
**模板**:`资源/examples/onto/_templates/ontology_function_template.py`
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 4. CLI 参数误用
|
|
73
|
+
|
|
74
|
+
### 4.1 `function run` 不支持 `--arguments-json-file`
|
|
75
|
+
|
|
76
|
+
```powershell
|
|
77
|
+
# 错误
|
|
78
|
+
dazi onto function run <function_id> --space <空间> --arguments-json-file xxx.json
|
|
79
|
+
|
|
80
|
+
# 正确:先 save-test-arguments,再 run(不带 JSON 文件)
|
|
81
|
+
dazi onto function run <function_id> --space <空间>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 4.2 `save-test-arguments` 须用 `ofn_xxx` 内部 ID
|
|
85
|
+
|
|
86
|
+
```powershell
|
|
87
|
+
# 错误 — function_id 字符串
|
|
88
|
+
dazi onto function save-test-arguments profit.fn.get_summary --space <空间> ...
|
|
89
|
+
|
|
90
|
+
# 正确 — list 返回的 id 字段
|
|
91
|
+
dazi onto function list --space <空间>
|
|
92
|
+
dazi onto function save-test-arguments ofn_xxxxxxxx --space <空间> `
|
|
93
|
+
--arguments-json-file <项目路径>/functions/test_arguments/<function_id>.json
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 4.3 函数发布未带 `--register-function-id`
|
|
97
|
+
|
|
98
|
+
仅 `script publish` 时代码入库,**不会**出现在 Onto → 函数列表,`function run` 失败。
|
|
99
|
+
|
|
100
|
+
```powershell
|
|
101
|
+
dazi onto script publish <项目路径>/functions/xxx_fn.py --space <空间> `
|
|
102
|
+
--register-function-id <domain>.fn.<name>
|
|
103
|
+
dazi onto function list --space <空间> # 必须能看到该 id
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
可选同时挂载平台分类:`--register-platform-category 总览分析`
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 5. 函数「未注册」(规划有、侧栏无)
|
|
111
|
+
|
|
112
|
+
| 现象 | 根因 |
|
|
113
|
+
| ---- | ---- |
|
|
114
|
+
| `CATEGORY_REGISTRY` / plans 列了 N 个函数 | 规划清单 ≠ 已发布函数 |
|
|
115
|
+
| `functions/` 文件数 < 规划数 | 脚本未写完 |
|
|
116
|
+
| `function list` 只有 1 条 | 多数未 `publish --register-function-id` |
|
|
117
|
+
|
|
118
|
+
**结论**:init **不负责**注册本体函数;每个 `functions/*.py` 须单独 publish 并注册。
|
|
119
|
+
|
|
120
|
+
**门禁**:规划函数数 = `functions/*.py` 数 = `function list` 条数。
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 6. 平台分类挂载时机
|
|
125
|
+
|
|
126
|
+
**推荐**:与灌数一样,使用独立 `setup/*_category_mount.py`,放在流程**最后**:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
init → seed → 发布全部函数 → category_mount
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
| 方式 | 何时 |
|
|
133
|
+
| ---- | ---- |
|
|
134
|
+
| **`*_category_mount.py`**(推荐) | 全量 `CATEGORY_REGISTRY` + `apply_registry`;函数齐后一次执行 |
|
|
135
|
+
| `--register-platform-category` | 单函数 publish 时内联(与 category_mount 幂等可并存) |
|
|
136
|
+
| init 内 `apply_registry` | **不推荐**(函数未 publish 时 function 段被跳过,须重跑 init) |
|
|
137
|
+
|
|
138
|
+
`skip_missing=True` 时,未注册函数会被跳过;**补发函数后只重跑 category_mount**,无需重跑 init。
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 7. 平台分类字典报错
|
|
143
|
+
|
|
144
|
+
**现象**:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
ValueError: 平台分类字典中不存在分类: kind='table', category='维度表'
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
(旧版日志可能显示乱码,非脚本 UTF-8 损坏。)
|
|
151
|
+
|
|
152
|
+
**原因**:`category` 须为**平台标准分类中文名**(如「维度表」「事实表」),且测试环境 backend 须含完整平台分类字典。
|
|
153
|
+
|
|
154
|
+
**处理**:
|
|
155
|
+
|
|
156
|
+
1. 确认 `CATEGORY_REGISTRY` 使用标准名,与 [本体分类规划与SDK扩展方案](./本体分类规划与SDK扩展方案.md) 一致
|
|
157
|
+
2. 部署含 `s.categories` 与表类中文名索引的 backend 版本
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 8. 表/列显示名未写入
|
|
162
|
+
|
|
163
|
+
仅用 `register` + `sync_columns` 时,列 `description` **不会**自动写入规划中的业务说明。
|
|
164
|
+
|
|
165
|
+
**推荐**:
|
|
166
|
+
|
|
167
|
+
```python
|
|
168
|
+
s.tables.register_with_meta(
|
|
169
|
+
table_name,
|
|
170
|
+
display_name=meta["display_name"],
|
|
171
|
+
description=meta.get("description"),
|
|
172
|
+
columns=meta["columns"],
|
|
173
|
+
force_column_meta=True,
|
|
174
|
+
)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
见 [本体脚本编写指南 · 表注册](./本体脚本编写指南.md#表注册-table_registry--register_with_meta)。
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 9. 标准 CLI 顺序(通用)
|
|
182
|
+
|
|
183
|
+
在 `dazi-work` 根目录,将 `<项目路径>`、`<空间>` 替换为实际值。
|
|
184
|
+
|
|
185
|
+
```powershell
|
|
186
|
+
# 1. init
|
|
187
|
+
dazi onto script publish <项目路径>/setup/xxx_ontology_init.py --space <空间> --type setup
|
|
188
|
+
dazi onto script run --file <项目路径>/setup/xxx_ontology_init.py --space <空间>
|
|
189
|
+
|
|
190
|
+
# 2. seed(如有)
|
|
191
|
+
dazi onto script publish <项目路径>/setup/xxx_seed_data.py --space <空间> --type data
|
|
192
|
+
dazi onto script run --file <项目路径>/setup/xxx_seed_data.py --space <空间>
|
|
193
|
+
|
|
194
|
+
# 3. 每个本体函数
|
|
195
|
+
dazi onto script publish <项目路径>/functions/xxx_fn.py --space <空间> `
|
|
196
|
+
--register-function-id <domain>.fn.<name> `
|
|
197
|
+
--register-platform-category <平台分类名>
|
|
198
|
+
|
|
199
|
+
# 4. 平台分类挂载(最后一步,类灌数)
|
|
200
|
+
dazi onto script publish <项目路径>/setup/xxx_category_mount.py --space <空间> --type setup
|
|
201
|
+
dazi onto script run --file <项目路径>/setup/xxx_category_mount.py --space <空间>
|
|
202
|
+
|
|
203
|
+
# 5. 测试参数与验证
|
|
204
|
+
dazi onto function list --space <空间>
|
|
205
|
+
dazi onto function save-test-arguments <ofn_id> --space <空间> --arguments-json-file ...
|
|
206
|
+
dazi onto function run <function_id> --space <空间>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 10. 修改脚本后的重发流程
|
|
212
|
+
|
|
213
|
+
| 脚本类型 | 操作 |
|
|
214
|
+
| -------- | ---- |
|
|
215
|
+
| setup / data | `script publish` → `script run` |
|
|
216
|
+
| 本体函数 | `script publish`(含 `--register-function-id`)→ `function run` → 参数变更时重做 `save-test-arguments` |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 11. 命令速查
|
|
221
|
+
|
|
222
|
+
| 目的 | 命令 |
|
|
223
|
+
| ---- | ---- |
|
|
224
|
+
| 发布 setup | `dazi onto script publish <path> --space <空间> --type setup` |
|
|
225
|
+
| 发布 data | `dazi onto script publish <path> --space <空间> --type data` |
|
|
226
|
+
| 发布并注册函数 | `... --register-function-id <id> [--register-platform-category <分类>]` |
|
|
227
|
+
| 执行脚本 | `dazi onto script run --file <path> --space <空间>` |
|
|
228
|
+
| 运行函数 | `dazi onto function run <function_id> --space <空间>` |
|
|
229
|
+
| 函数列表 | `dazi onto function list --space <空间>` |
|
|
230
|
+
| 保存默认参数 | `dazi onto function save-test-arguments <ofn_id> --space <空间> --arguments-json-file <json>` |
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## 12. 相关文档
|
|
235
|
+
|
|
236
|
+
| 文档 | 说明 |
|
|
237
|
+
| ---- | ---- |
|
|
238
|
+
| [本体脚本编写指南](./本体脚本编写指南.md) | 目录、四阶段实施、test_arguments |
|
|
239
|
+
| [本体函数开发指南](./function-guide.md) | 函数模板、`save-test-arguments` |
|
|
240
|
+
| [DaziScript SDK 参考](./dazi_script_sdk_reference.md) | API 与 `s.categories` |
|
|
241
|
+
| [本体开发优化总结](./本体开发优化总结.md) | 表显示名、平台分类、函数四阶段 |
|
|
242
|
+
| [故障排查](../guides/troubleshooting.md) | CLI 环境、401、侧栏空白 |
|