openyida 2026.7.8 → 2026.7.9

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 (33) hide show
  1. package/package.json +1 -1
  2. package/yida-skills/SKILL.md +2 -1
  3. package/yida-skills/references/development-rules.md +11 -7
  4. package/yida-skills/skills/large-file-write/SKILL.md +12 -10
  5. package/yida-skills/skills/large-file-write/references/write-patterns.md +13 -15
  6. package/yida-skills/skills/large-file-write/scripts/write.js +10 -10
  7. package/yida-skills/skills/yida-app/SKILL.md +12 -6
  8. package/yida-skills/skills/yida-canvas-custom-page/SKILL.md +3 -1
  9. package/yida-skills/skills/yida-canvas-upgrade/SKILL.md +1 -1
  10. package/yida-skills/skills/yida-chart/SKILL.md +2 -2
  11. package/yida-skills/skills/yida-chart/references/echarts-bindding-guide.md +5 -6
  12. package/yida-skills/skills/yida-chart/references/examples.md +2 -2
  13. package/yida-skills/skills/yida-connector/SKILL.md +4 -0
  14. package/yida-skills/skills/yida-connector-safe-actions/SKILL.md +7 -4
  15. package/yida-skills/skills/yida-create-form-page/SKILL.md +11 -8
  16. package/yida-skills/skills/yida-create-process/SKILL.md +10 -4
  17. package/yida-skills/skills/yida-custom-page/SKILL.md +10 -4
  18. package/yida-skills/skills/yida-custom-page/references/component-jsx-guide.md +3 -1
  19. package/yida-skills/skills/yida-data-management/SKILL.md +14 -11
  20. package/yida-skills/skills/yida-data-source-connectors/SKILL.md +3 -1
  21. package/yida-skills/skills/yida-flash-note-to-prd/references/examples.md +3 -2
  22. package/yida-skills/skills/yida-formula/references/examples.md +4 -4
  23. package/yida-skills/skills/yida-formula-evaluate/SKILL.md +4 -2
  24. package/yida-skills/skills/yida-get-schema/SKILL.md +14 -5
  25. package/yida-skills/skills/yida-i18n/SKILL.md +4 -2
  26. package/yida-skills/skills/yida-integration/SKILL.md +4 -1
  27. package/yida-skills/skills/yida-integration/references/examples.md +2 -2
  28. package/yida-skills/skills/yida-openyida-publish-guard/SKILL.md +2 -2
  29. package/yida-skills/skills/yida-process-rule/SKILL.md +4 -1
  30. package/yida-skills/skills/yida-process-rule/references/examples.md +12 -12
  31. package/yida-skills/skills/yida-report/SKILL.md +5 -2
  32. package/yida-skills/skills/yida-report/references/examples.md +4 -4
  33. package/yida-skills/skills/yida-table-form/references/examples.md +2 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openyida",
3
- "version": "2026.7.8",
3
+ "version": "2026.7.9",
4
4
  "description": "OpenYida CLI - 宜搭低代码 AI 开发工具(安装即用,零配置)",
5
5
  "bin": {
6
6
  "openyida": "bin/yida.js",
@@ -157,6 +157,7 @@ description: >
157
157
  1. **先读后执行**:执行任何子技能前,必须先读取其 SKILL.md,不凭记忆猜参数格式。
158
158
  2. **corpId 一致性检查**:创建页面前对比 prd 与 `.cache/cookies.json` 的 corpId,不一致必须询问用户(重新登录 or 当前组织新建)。
159
159
  3. **发布前本地校验**:自定义页面发布前跑 `openyida check-page` + `openyida compile`;JSON 配置写盘后先解析校验,再调用平台命令。
160
+ 4. **命令输入文件禁止 shell 写入**:当 OpenYida 命令需要 JSON/YAML/CSV/config/script 文件参数时,先使用当前 agent 运行时提供的结构化文件写入工具(如 create_file / Write / file edit tool)创建文件,再把路径传给命令;禁止用 shell heredoc、`cat`/`echo`/`printf`/`tee` 加输出重定向,或把命令 stdout 重定向成业务文件。
160
161
 
161
162
  ### 重要规则(IMPORTANT,影响质量/性能/可维护性)
162
163
 
@@ -167,7 +168,7 @@ description: >
167
168
  5. **数据性能优先**:统计聚合用 `yida-report` 服务端聚合,不在前端拉全量后自行聚合。
168
169
  6. **避免无效重试**:失败先查登录态/组织/参数/字段 ID,无修改不连续重试超 1 次。
169
170
  7. **配置分两处存**:业务语义 → `prd/<项目名>.md`;Schema ID → `.cache/<项目名>-schema.json`(prd 不记 ID)。
170
- 8. **临时文件入 `.cache/`**:cookies/schema/配置/脚本一律放 `.cache/openyida/`,不写仓库根目录。
171
+ 8. **临时文件入 project `.cache/`**:OpenYida 业务中间文件写入 `<projectRoot>/.cache/openyida/<项目名或任务名>/`;Schema ID 映射仍写 `<projectRoot>/.cache/<项目名>-schema.json`。从 workspace 根执行命令时使用 `project/.cache/...`,从 project 工作目录内执行时使用 `.cache/...`;不要写仓库根目录或系统临时目录。
171
172
  9. **报表美化先问方案**:用户说"优化/美化报表"时先问选原生报表(`yida-report`)还是 ECharts(`yida-chart`)。
172
173
  10. **按 schema 证据选技能**:先看 `formType`、组件树、`dataSource.online`;`receipt/process/report` 分别落到表单/流程/报表技能。
173
174
  11. **官方示例范式优先**:蒸馏官方示例时先理解脱敏 schema 承载方式,不凭截图/标题/视觉判断。
@@ -1,6 +1,6 @@
1
1
  # 核心规则详解
2
2
 
3
- > 逐条展开主 SKILL.md「核心规则」的操作细节,编号与主文件一一对应(FATAL 1–3 / IMPORTANT 1–11)。需要更多篇幅的规则指向文末专节。
3
+ > 逐条展开主 SKILL.md「核心规则」的操作细节,编号与主文件一一对应(FATAL 1–4 / IMPORTANT 1–11)。需要更多篇幅的规则指向文末专节。
4
4
 
5
5
  ## 致命规则(FATAL)
6
6
 
@@ -15,6 +15,8 @@
15
15
  - 发布时留意"同名双副本内容不一致"警告,必要时加 `--health-check` 做首屏 HTTP 健康检查;
16
16
  - 任何 JSON 配置写盘后先做 JSON 解析校验,再调用平台命令。
17
17
 
18
+ **F4 命令输入文件禁止 shell 写入**:当 OpenYida 命令需要 JSON/YAML/CSV/config/script 文件参数时,必须先使用当前 agent 运行时提供的结构化文件写入工具(如 create_file / Write / file edit tool)创建文件,再把文件路径传给命令。禁止用 shell heredoc、`cat`/`echo`/`printf`/`tee` 加输出重定向,或把 `openyida` 命令 stdout 重定向成业务配置、Schema、导入数据或一次性脚本。
19
+
18
20
  ## 重要规则(IMPORTANT)
19
21
 
20
22
  | # | 规则 | 操作细节 |
@@ -26,7 +28,7 @@
26
28
  | 5 | 数据性能优先 | 统计聚合用 `yida-report` 服务端聚合;不在自定义页面前端分页拉全量后自行聚合。 |
27
29
  | 6 | 避免无效重试 | 失败先按错误信息查登录态/组织/参数/字段 ID;无修改不连续重试超 1 次。 |
28
30
  | 7 | 配置分两处存 | 详见 [配置信息分两处存储](#配置信息分两处存储) 与 [PRD 质量门槛](#prd-质量门槛)。 |
29
- | 8 | 临时文件入 `.cache/` | 详见 [临时文件规范](#临时文件规范)。 |
31
+ | 8 | 临时文件入 project `.cache/` | 详见 [临时文件规范](#临时文件规范)。 |
30
32
  | 9 | 报表美化先问方案 | 详见 [报表优化 / 美化提示规则](#报表优化--美化提示规则)。 |
31
33
  | 10 | 按 schema 证据选技能 | 先看 `formType`、组件树、`dataSource.online`;`receipt/process/report` 分别落到表单/流程/报表技能,只有默认页是自定义展示页、或确需列表/看板/工具页交互时才落到 `yida-custom-page`。 |
32
34
  | 11 | 官方示例范式优先 | 蒸馏宜搭示例中心时,先按 [官方示例 Schema 范式](official-example-schema-patterns.md) 理解脱敏 schema 的承载方式,不凭截图/卡片标题/页面视觉判断。 |
@@ -55,14 +57,16 @@
55
57
 
56
58
  ## 临时文件规范
57
59
 
58
- 所有临时文件(cookies、schema 缓存、字段/报表/流程配置、导入数据、一次性脚本等)**必须写在项目根目录的 `.cache/` 下**,不写仓库根目录或系统其他位置。
60
+ 所有 OpenYida 业务中间文件(cookies、schema 缓存、字段/报表/流程配置、导入数据、一次性脚本等)**必须写在 OpenYida project 工作目录的 `.cache/` 下**,不写业务仓库根目录、系统 `/tmp` 或其他位置。源码中的 `<projectRoot>` 指 OpenYida project 工作目录;从 workspace 根执行命令时路径通常是 `project/.cache/...`,从 project 工作目录内执行时路径是 `.cache/...`。
61
+
62
+ 文件必须由 agent 的结构化文件写入工具创建,再传给 OpenYida 命令。不要通过 `execute_shell` 加 heredoc、`cat`/`echo`/`printf`/`tee`、管道或重定向来生成 JSON/YAML/CSV/config/script 文件。`/tmp` 只允许用于外部工具强制要求的系统临时路径,OpenYida 业务配置、schema、导入数据和一次性脚本不写 `/tmp`。
59
63
 
60
64
  | 工件类型 | 推荐位置 |
61
65
  |---------|---------|
62
- | Schema / ID 映射 | `.cache/<项目名>-schema.json` |
63
- | 字段 / 报表 / 流程配置 | `.cache/openyida/<项目名>/` |
64
- | 批量导入数据(JSON/JSONL/CSV) | `.cache/openyida/data-import/` |
65
- | 一次性 Python / JS 脚本 | `.cache/openyida/scripts/` |
66
+ | Schema / ID 映射 | `<projectRoot>/.cache/<项目名>-schema.json` |
67
+ | 字段 / 报表 / 流程 / 连接器配置 | `<projectRoot>/.cache/openyida/<项目名或任务名>/` |
68
+ | 批量导入数据(JSON/JSONL/CSV) | `<projectRoot>/.cache/openyida/<项目名或任务名>/data-import/` |
69
+ | 一次性 Python / JS 脚本 | `<projectRoot>/.cache/openyida/<项目名或任务名>/scripts/` |
66
70
 
67
71
  > 只有需长期维护的 PRD、页面源码、示例资源才写入 `prd/`、`pages/src/`、`project/` 等正式目录。
68
72
 
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: large-file-write
3
- description: 解决 heredoc 或 shell 命令写入大文件内容被截断的问题。通过 Node.js 脚本将内容作为模板字符串写入,绕过 shell 截断限制。适用于需要可靠写入超过 100 行文本文件时。
3
+ description: 解决 heredoc 或 shell 命令写入大文件内容被截断的问题。优先使用 agent 结构化文件写入工具;超大文件可用该工具创建 Node.js payload 后执行。适用于需要可靠写入超过 100 行文本文件时。
4
4
  ---
5
5
 
6
6
  # Large File Write Skill
7
7
 
8
8
  ## 问题背景
9
9
 
10
- 在 AI Agent 模式下,使用 heredoc(`<< 'EOF'`)或 shell 命令向文件写入大块内容时,经常出现:
10
+ 在 AI Agent 模式下,使用 shell here-document 或其他 shell 命令向文件写入大块内容时,经常出现:
11
11
  - 内容被截断(工具输出超过 token 限制)
12
12
  - heredoc 内容未生效(zsh 特殊字符转义问题)
13
13
  - 多次追加导致重复内容或语法错误
@@ -15,20 +15,22 @@ description: 解决 heredoc 或 shell 命令写入大文件内容被截断的问
15
15
 
16
16
  ## 解决方案
17
17
 
18
- 使用 Node.js 脚本 `scripts/write.js`,将内容作为 JS 字符串变量传入,绕过 shell 截断限制。
18
+ 优先使用当前 agent 运行时提供的结构化文件写入工具(如 create_file / Write / file edit tool)直接创建目标文件。内容过大、单次写入可能截断时,再用结构化写入工具创建 Node.js payload 脚本,由 payload 调用 `fs.writeFileSync` 写目标文件。
19
+
20
+ OpenYida 业务场景下,payload、内容片段和验证脚本必须放在 `<projectRoot>/.cache/openyida/<项目名或任务名>/scripts/`,不要写系统临时目录、仓库根目录或 `.cache/` 顶层。
19
21
 
20
22
  ## 使用方式
21
23
 
22
24
  三种写入模式的完整代码示例,详见 [references/write-patterns.md](./references/write-patterns.md):
23
25
 
24
- - **模式一**:创建内容脚本后执行(推荐)— `create_file` 创建临时 JS 脚本,再 `node` 执行
26
+ - **模式一**:创建内容脚本后执行(推荐)— 用结构化文件写入工具创建临时 JS 脚本,再 `node` 执行
25
27
  - **模式二**:追加内容到已有文件 — 用 `fs.appendFileSync` 追加大块内容
26
- - **模式三**:使用通用写入脚本(stdin 模式)— 通过管道传入内容
28
+ - **模式三**:使用通用写入脚本(content-file 模式)— 内容文件也先由结构化文件写入工具创建
27
29
 
28
30
  ### 快速示例
29
31
 
30
32
  ```js
31
- // /tmp/content-payload.js
33
+ // <projectRoot>/.cache/openyida/<任务名>/scripts/content-payload.js
32
34
  const fs = require('fs');
33
35
  const content = `// 你的大块内容(支持任意长度)
34
36
  export function myFunction() { ... }
@@ -38,17 +40,17 @@ console.log('写入完成,行数:', content.split('\n').length);
38
40
  ```
39
41
 
40
42
  ```bash
41
- node /tmp/content-payload.js
43
+ node .cache/openyida/<任务名>/scripts/content-payload.js
42
44
  wc -l /path/to/target.js # 验证行数
43
45
  ```
44
46
 
45
47
  ## 核心原则
46
48
 
47
- 1. **永远不要用 heredoc 写大文件** — 改用 `create_file` 工具创建临时 JS 脚本
49
+ 1. **永远不要用 heredoc 写大文件** — 改用结构化文件写入工具创建临时 JS 脚本
48
50
  2. **永远不要用 PowerShell JSON 化大文件** — 禁止 `Get-Content -Raw <file> | ConvertTo-Json`、`ConvertFrom-Json` 处理 `.oyd.jsx/.jsx/.js` 页面源码
49
51
  3. **内容放在 JS 模板字符串里** — 支持任意长度,不受 shell 限制
50
52
  4. **写完立即验证** — `wc -l` 检查行数,`tail` 检查末尾内容
51
- 5. **分段写入大文件** — 超过 300 行的内容,拆分为多个 `create_file` + `node` 执行
53
+ 5. **分段写入大文件** — 超过 300 行的内容,拆分为多个结构化写入 + `node` 执行
52
54
  6. **本技能不读写 memory**:文件写入为纯本地操作,不依赖跨会话的 memory 状态
53
55
 
54
56
  ## 适用场景
@@ -88,4 +90,4 @@ Get-Content -Raw project\pages\src\vendor-section.oyd.jsx | ConvertTo-Json
88
90
  | `node: command not found` | Node.js 未安装 | 先安装 Node.js ≥ 16 |
89
91
  | 脚本执行后文件为空 | 模板字符串语法错误 | 检查反引号是否闭合,特殊字符是否转义 |
90
92
  | 写入不完整 | 内容超过单次 create_file 限制 | 按「分段写入」方式拆分为多个脚本 |
91
- | 权限拒绝 | 目标路径无写权限 | 检查目录权限,或改用 `/tmp/` 路径 |
93
+ | 权限拒绝 | 目标路径无写权限 | 检查目标目录权限;OpenYida 业务文件仍应留在 project 工作目录内 |
@@ -6,10 +6,10 @@
6
6
 
7
7
  适用于一次性写入大块内容(>100 行)。
8
8
 
9
- ### Step 1:用 `create_file` 工具创建临时内容脚本
9
+ ### Step 1:用结构化文件写入工具创建临时内容脚本
10
10
 
11
11
  ```js
12
- // /tmp/content-payload.js
12
+ // <projectRoot>/.cache/openyida/<任务名>/scripts/content-payload.js
13
13
  const fs = require('fs');
14
14
  const content = `
15
15
  // 这里放你要写入的大块内容
@@ -25,7 +25,7 @@ console.log('写入完成,行数:', content.split('\n').length);
25
25
  ### Step 2:执行脚本
26
26
 
27
27
  ```bash
28
- node /tmp/content-payload.js
28
+ node .cache/openyida/<任务名>/scripts/content-payload.js
29
29
  ```
30
30
 
31
31
  ### Step 3:验证写入结果
@@ -42,7 +42,7 @@ tail -5 /path/to/target.js
42
42
  适用于向已有文件末尾追加大块内容。
43
43
 
44
44
  ```js
45
- // /tmp/append-payload.js
45
+ // <projectRoot>/.cache/openyida/<任务名>/scripts/append-payload.js
46
46
  const fs = require('fs');
47
47
  const appendContent = `
48
48
  // 追加的内容
@@ -57,22 +57,23 @@ console.log('追加完成');
57
57
  执行:
58
58
 
59
59
  ```bash
60
- node /tmp/append-payload.js
60
+ node .cache/openyida/<任务名>/scripts/append-payload.js
61
61
  ```
62
62
 
63
63
  ---
64
64
 
65
- ## 模式三:使用通用写入脚本(stdin 模式)
65
+ ## 模式三:使用通用写入脚本(content-file 模式)
66
66
 
67
- 适用于通过管道传入内容的场景。
67
+ 适用于内容已经由结构化文件写入工具保存为独立文件的场景。
68
68
 
69
69
  ```bash
70
70
  node ~/.agents/skills/large-file-write/scripts/write.js \
71
71
  --file /path/to/target.js \
72
+ --content-file .cache/openyida/<任务名>/scripts/content.txt \
72
73
  --mode write # 或 append
73
74
  ```
74
75
 
75
- 然后通过 stdin 输入内容(Ctrl+D 结束)。
76
+ 不要通过 shell 管道、heredoc 或重定向临时生成 `content.txt`;先使用 create_file / Write / file edit tool 创建它。
76
77
 
77
78
  ---
78
79
 
@@ -80,10 +81,7 @@ node ~/.agents/skills/large-file-write/scripts/write.js \
80
81
 
81
82
  **不要**用 PowerShell 把大 JSX/JS 文件转成 JSON patch:
82
83
 
83
- ```powershell
84
- # 禁止:会把整个文件读入内存并生成转义后的大字符串
85
- Get-Content -Raw project\pages\src\vendor-section.oyd.jsx | ConvertTo-Json > vendor-patch.json
86
- ```
84
+ 禁止把整个文件读入内存再重定向成 JSON patch,例如 `Get-Content -Raw ... | ConvertTo-Json` 这类流程会制造巨大中间数据,也违反“命令输入文件由结构化写入工具创建”的约定。
87
85
 
88
86
  这种写法会同时持有原始源码、JSON 转义字符串、管道对象和输出缓冲。对包含 vendor、base64、压缩代码的 `.oyd.jsx` 文件,内存可能被放大到数十 GB。
89
87
 
@@ -106,7 +104,7 @@ fs.writeFileSync(target, next, 'utf8');
106
104
  当单次内容超过 300 行时,拆分为多个脚本分段写入:
107
105
 
108
106
  ```js
109
- // /tmp/part1-payload.js — 写入第一段(文件头 + 前半部分)
107
+ // <projectRoot>/.cache/openyida/<任务名>/scripts/part1-payload.js — 写入第一段(文件头 + 前半部分)
110
108
  const fs = require('fs');
111
109
  const part1 = `
112
110
  // === 第一段内容 ===
@@ -118,7 +116,7 @@ console.log('第一段写入完成');
118
116
  ```
119
117
 
120
118
  ```js
121
- // /tmp/part2-payload.js — 追加第二段
119
+ // <projectRoot>/.cache/openyida/<任务名>/scripts/part2-payload.js — 追加第二段
122
120
  const fs = require('fs');
123
121
  const part2 = `
124
122
  // === 第二段内容 ===
@@ -145,5 +143,5 @@ tail -5 /path/to/target.js
145
143
  |---------|------|---------|
146
144
  | 文件为空 | 模板字符串反引号未闭合 | 检查 `` ` `` 是否成对,特殊字符是否转义 |
147
145
  | 内容截断 | 单次 create_file 超过 token 限制 | 拆分为多个脚本分段写入 |
148
- | 权限拒绝 | 目标路径无写权限 | 改用 `/tmp/` 路径,或检查目录权限 |
146
+ | 权限拒绝 | 目标路径无写权限 | 检查目标目录权限;OpenYida 业务文件仍应留在 project 工作目录内 |
149
147
  | node 命令未找到 | Node.js 未安装 | 先安装 Node.js ≥ 16 |
@@ -8,9 +8,9 @@
8
8
  * node write.js --file <目标文件路径> [--mode write|append] [--encoding utf8]
9
9
  *
10
10
  * 内容来源(三选一):
11
- * 1. stdin:echo "content" | node write.js --file out.js
12
- * 2. --content-file <临时内容文件>:node write.js --file out.js --content-file /tmp/content.txt
13
- * 3. --payload <JS文件>:node write.js --payload /tmp/payload.js(payload 文件自行调用 fs 写入)
11
+ * 1. stdin:交互式输入或由调用方传入标准输入
12
+ * 2. --content-file <内容文件>:node write.js --file out.js --content-file .cache/openyida/task/content.txt
13
+ * 3. --payload <JS文件>:node write.js --payload .cache/openyida/task/payload.js(payload 文件自行调用 fs 写入)
14
14
  */
15
15
 
16
16
  const fs = require('fs');
@@ -53,15 +53,15 @@ large-file-write - 大文件可靠写入工具
53
53
  --help 显示帮助
54
54
 
55
55
  示例:
56
- # 从 stdin 写入
57
- echo "hello world" | node write.js --file /tmp/out.txt
56
+ # 从 stdin 写入
57
+ node write.js --file .cache/openyida/task/out.txt
58
58
 
59
- # 从内容文件写入
60
- node write.js --file /tmp/out.js --content-file /tmp/content.txt --verify
59
+ # 从内容文件写入
60
+ node write.js --file .cache/openyida/task/out.js --content-file .cache/openyida/task/content.txt --verify
61
61
 
62
- # 执行自包含 payload 脚本
63
- node write.js --payload /tmp/my-payload.js
64
- `);
62
+ # 执行自包含 payload 脚本
63
+ node write.js --payload .cache/openyida/task/my-payload.js
64
+ `);
65
65
  process.exit(0);
66
66
  }
67
67
 
@@ -13,6 +13,7 @@ description: 宜搭完整应用开发技能。从零到一搭建完整宜搭应
13
13
  - 不要跳过 `openyida env` 环境检测直接开始开发
14
14
  - 不要在未读取各子技能 SKILL.md 的情况下执行对应操作
15
15
  - 不要编造任何 ID(appType/formUuid/fieldId),必须从命令返回中提取
16
+ - 不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向生成 OpenYida 命令输入文件
16
17
 
17
18
  ## 严格要求 (MUST DO)
18
19
 
@@ -20,7 +21,7 @@ description: 宜搭完整应用开发技能。从零到一搭建完整宜搭应
20
21
  - 按照本文档的流程编排顺序执行,不要跳步
21
22
  - 每个关键 ID 创建后立即记录到 `.cache/<项目名>-schema.json`
22
23
  - 业务需求记录到 `prd/<项目名>.md`
23
- - 临时字段配置、流程配置、报表配置、导入数据和一次性执行脚本统一写入 `.cache/openyida/`,不要写到仓库根目录
24
+ - 临时字段配置、流程配置、报表配置、连接器配置、导入数据和一次性执行脚本统一用结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/`;从 workspace 根执行命令时传 `project/.cache/...`,从 OpenYida project 工作目录执行时传 `.cache/...`;不要写到仓库根目录或系统临时目录
24
25
  - 首次生成完整应用后,必须基于业务信息架构整理导航顺序:面向决策者的总览/驾驶舱看板作为门面靠前,数据录入/明细表单在后;同级多个专题看板按业务优先级排,不要把所有自定义页面无脑堆最前
25
26
  - 导航整理完成后,若应用含表单,默认向核心表单灌入 2-3 条覆盖关键维度的示例数据,让看板首屏有真实聚合效果;`DateField`/`CascadeDateField` 用 13 位毫秒时间戳,灌后 `openyida data query` 抽查至少 1 条确认字段值非空(用户明确说"不要示例数据"时才跳过)
26
27
  - **本技能不读写 memory**:所有关键 ID(appType、formUuid 等)通过 `.cache/<项目名>-schema.json` 持久化,不依赖跨会话的 memory 状态
@@ -276,7 +277,9 @@ openyida create-page <appType> "<页面名称>" [--mode dashboard]
276
277
 
277
278
  **当页面需要收集/存储数据时**,调用 `yida-create-form-page` 技能。
278
279
 
279
- #### 4.1 定义字段,写入 `.cache/openyida/<项目名>/xxx-fields.json`
280
+ #### 4.1 定义字段,写入 `<projectRoot>/.cache/openyida/<项目名或任务名>/xxx-fields.json`
281
+
282
+ 使用 create_file / Write / file edit tool 创建字段定义文件;不要用 shell heredoc 或重定向写 JSON。若从 workspace 根执行命令,路径写作 `project/.cache/openyida/<项目名或任务名>/xxx-fields.json`。
280
283
 
281
284
  ```json
282
285
  [
@@ -290,7 +293,7 @@ openyida create-page <appType> "<页面名称>" [--mode dashboard]
290
293
  #### 4.2 创建表单
291
294
 
292
295
  ```bash
293
- openyida create-form create <appType> "<表单名称>" .cache/openyida/<项目名>/xxx-fields.json
296
+ openyida create-form create <appType> "<表单名称>" .cache/openyida/<项目名或任务名>/xxx-fields.json
294
297
  ```
295
298
 
296
299
  **输出**:`formUuid` 和各字段的 `fieldId`(如 `textField_xxxxxxxx`)。
@@ -326,9 +329,11 @@ openyida create-form create <appType> "<表单名称>" .cache/openyida/<项目
326
329
  **当需求含「审批」「流程」「申请」「审核」「工单」等关键词时必须执行**。
327
330
 
328
331
  ```bash
329
- openyida create-process <appType> --formUuid <formUuid> <流程定义文件>
332
+ openyida create-process <appType> --formUuid <formUuid> .cache/openyida/<项目名或任务名>/process-definition.json
330
333
  ```
331
334
 
335
+ 流程定义文件先用结构化文件写入工具创建;从 workspace 根执行命令时路径加 `project/` 前缀。
336
+
332
337
  > 📖 详见 [`skills/yida-create-process/SKILL.md`](../yida-create-process/SKILL.md)
333
338
 
334
339
  ---
@@ -397,10 +402,11 @@ openyida nav-group order <appType> <总览看板> <专题看板...> <核心表
397
402
  新建应用的表单默认无数据,看板首屏会空。导航整理完成后,默认向核心表单灌入 **2-3 条**覆盖关键维度(不同活动/渠道/日期等)的示例记录,调用 `yida-data-management` 技能:
398
403
 
399
404
  ```bash
400
- openyida data create form <appType> <formUuid> --data-json '{"selectField_xxx":"双11","dateField_xxx":1730995200000,"numberField_xxx":1200000}'
405
+ openyida data create form <appType> <formUuid> --data-file .cache/openyida/<项目名或任务名>/data-import/sample-record-1.json
401
406
  ```
402
407
 
403
408
  **要点**:
409
+ - 示例数据 JSON 先用结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/data-import/`;从 workspace 根执行命令时路径加 `project/` 前缀。
404
410
  - `DateField`/`CascadeDateField` 必须用 13 位毫秒时间戳,不要传 `YYYY-MM-DD`。
405
411
  - 字段 ID 从 `.cache/<项目名>-schema.json` 或 `openyida get-schema` 获取,不能猜。
406
412
  - 灌完执行 `openyida data query form <appType> <formUuid>` 抽查至少 1 条,确认 `formData` 字段有实际值。
@@ -431,7 +437,7 @@ openyida data create form <appType> <formUuid> --data-json '{"selectField_xxx":"
431
437
 
432
438
  **测试数据/修数脚本约定**:
433
439
  - 一次性造数、旧数据修正、字段迁移可以使用 Python 或 JS,选择更快更清晰的实现即可;不要求为了“宜搭”强行写 JS。
434
- - 脚本放在 `.cache/openyida/scripts/` 下,导入数据放在 `.cache/openyida/data-import/` 下;执行前先 `openyida get-schema` / `openyida data query` 确认字段和记录,批量更新单次不超过 30 条。
440
+ - 脚本放在 `<projectRoot>/.cache/openyida/<项目名或任务名>/scripts/` 下,导入数据放在 `<projectRoot>/.cache/openyida/<项目名或任务名>/data-import/` 下,均由结构化文件写入工具创建;执行前先 `openyida get-schema` / `openyida data query` 确认字段和记录,批量更新单次不超过 30 条。
435
441
  - 脚本可以通过 `openyida data ...` 命令或宜搭官方接口执行,但字段 ID、formInstId、appType 必须来自真实查询结果,不能猜。
436
442
 
437
443
  ---
@@ -87,9 +87,11 @@ openyida publish project/pages/src/<页面名>.canvas.jsx <appType> <formUuid>
87
87
  # 扩展名不规范但确为 Canvas 源码时,显式加 --canvas。
88
88
 
89
89
  # 6. 发布后回读 Schema 验收:确认组件树存在 YidaCodeCanvas,且 runtimeCode 非空
90
- openyida get-schema <appType> <formUuid> > .cache/openyida/<页面名>-schema.json
90
+ openyida get-schema <appType> <formUuid>
91
91
  ```
92
92
 
93
+ 如需保存完整 Schema,使用 create_file / Write / file edit tool 创建 `<projectRoot>/.cache/openyida/<页面名或任务名>/<页面名>-schema.json`;从 workspace 根执行后续命令时路径加 `project/` 前缀。不要把 `openyida` stdout 通过 shell 重定向保存成 JSON。
94
+
93
95
  ## 与其他技能分工
94
96
 
95
97
  | 需求 | 使用 |
@@ -20,7 +20,7 @@ description: 将 OpenYida 原普通自定义页面链路升级/迁移为宜搭 C
20
20
  | --- | --- |
21
21
  | 登录态只读验证 | `openyida env --json` + `openyida login --check-only --json` |
22
22
  | 原页面源码 | 找到 `.oyd.jsx` / `.jsx` 源文件;不要只看 dist 编译产物 |
23
- | 目标页面 Schema | `openyida get-schema <appType> <formUuid> > .cache/openyida/canvas-upgrade/<name>-schema.json` |
23
+ | 目标页面 Schema | 先执行 `openyida get-schema <appType> <formUuid>`,再用 create_file / Write / file edit tool 按需保存到 `<projectRoot>/.cache/openyida/canvas-upgrade/<name>-schema.json`;不要用 shell 重定向 |
24
24
  | Code Canvas 发布能力 | 已内置:产出的 `.canvas.jsx` 用 `openyida publish <源文件> <appType> <formUuid>` 即自动走 Canvas 链路(`.canvas.jsx` 扩展名识别,CLI 本地用 Babel 编译出 `runtimeCode` + `importedModules` 并写 `YidaCodeCanvas` Schema),无需设计器手工添加 |
25
25
  | 原页面数据依赖 | 列出 `this.utils.yida.*`、`this.dataSourceMap.*`、连接器、外部脚本、全局变量 |
26
26
 
@@ -60,8 +60,8 @@ openyida login --check-only --json
60
60
  # Step 2: 准备原生报表数据源
61
61
  # 无原生报表时先使用 yida-report 创建;已有 URL 时解析 appType/formUuid
62
62
 
63
- # Step 3: 获取报表 Schema,输出到文件避免终端截断
64
- openyida get-schema <appType> <reportFormUuid> > .cache/report-schema-output.txt 2>&1
63
+ # Step 3: 获取报表 Schema;需要文件时用 CLI 输出目录或结构化文件写入工具保存 stdout
64
+ openyida get-schema <appType> --all --keyword <报表名称> --output-dir .cache/openyida/<项目名或任务名>/schemas
65
65
 
66
66
  # Step 4: 解析 cid / className / dataSetKey / filterKey / cname
67
67
 
@@ -25,7 +25,7 @@ Step 1: 从 URL 中解析 appType 和 formUuid
25
25
  Step 2: 执行 openyida env 检测环境和登录态
26
26
 
27
27
  Step 3: 执行 openyida get-schema <appType> <formUuid> 获取现有报表 Schema
28
- 命令:openyida get-schema <appType> <formUuid> > .cache/report-schema-output.txt 2>&1
28
+ 需要文件时,使用结构化文件写入工具保存 stdout,或用 --all --keyword --output-dir 输出到 project .cache
29
29
 
30
30
  Step 4: 解析 Schema,提取每个图表组件的 5 个核心参数
31
31
  ↓ 详见下方「Schema 解析规范」
@@ -58,15 +58,14 @@ Step 11: 输出 ECharts 自定义页面访问链接
58
58
 
59
59
  ## Schema 获取注意事项
60
60
 
61
- 1. **必须将输出重定向到文件**:报表 Schema 通常非常大(数千行),终端输出会被截断
61
+ 1. **不要用 shell 重定向保存 Schema**:报表 Schema 通常非常大(数千行),需要文件时用 CLI 自带输出目录或 agent 结构化文件写入工具
62
62
  ```bash
63
- openyida get-schema <appType> <formUuid> > .cache/report-schema-output.txt 2>&1
63
+ openyida get-schema <appType> --all --keyword <报表名称> --output-dir .cache/openyida/<项目名或任务名>/schemas
64
64
  ```
65
65
 
66
- 2. **提取 JSON 部分**:输出文件包含前缀日志信息,需要从 `{` 开始的行提取纯 JSON
66
+ 2. **单表回读时保存 stdout**:如必须按 `formUuid` 回读,先执行命令,再用 create_file / Write / file edit tool 保存纯 JSON 到 `<projectRoot>/.cache/openyida/<项目名或任务名>/report-schema.json`
67
67
  ```bash
68
- grep -n "^{" .cache/report-schema-output.txt
69
- tail -n +<行号> .cache/report-schema-output.txt > .cache/report-schema.json
68
+ openyida get-schema <appType> <formUuid> --json
70
69
  ```
71
70
 
72
71
  ---
@@ -15,8 +15,8 @@ https://www.aliwork.com/APP_KNILKT41DC5XXR5D4QEC/admin/REPORT-QA666SC1J3U3TFO9GM
15
15
  # Step 1:检测环境和登录态
16
16
  openyida env
17
17
 
18
- # Step 2:获取报表 Schema(必须重定向到文件,避免截断)
19
- openyida get-schema APP_KNILKT41DC5XXR5D4QEC REPORT-QA666SC1J3U3TFO9GM9MJ5400RIW3W83SUYMM5 > .cache/report-schema-output.txt 2>&1
18
+ # Step 2:获取报表 Schema;需要文件时用结构化文件写入工具保存 stdout
19
+ openyida get-schema APP_KNILKT41DC5XXR5D4QEC REPORT-QA666SC1J3U3TFO9GM9MJ5400RIW3W83SUYMM5 --json
20
20
 
21
21
  # Step 3:创建自定义展示页面
22
22
  openyida create-page APP_KNILKT41DC5XXR5D4QEC "任务数据看板" --mode dashboard
@@ -10,11 +10,13 @@ description: 宜搭 HTTP 连接器创建与管理。打通钉钉/自建系统/
10
10
  - 不要在代码中硬编码 API Key、密码等凭证,通过连接器鉴权配置管理
11
11
  - 不要编造 connector-id 或 action-id,必须从命令返回中提取
12
12
  - 不要删除连接器前确认是否有表单/页面正在使用
13
+ - 不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向生成连接器 action/config JSON
13
14
 
14
15
  ## 严格要求 (MUST DO)
15
16
 
16
17
  - 优先使用 `smart-create` 从 curl 命令或接口文档智能创建
17
18
  - 创建连接器后,将 connector-id 记录到 `.cache/<项目名>-schema.json`
19
+ - `--operations`、`--action` 等文件参数必须先用结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/connector/` 或该技能更具体的目录,再传给命令;不要写仓库根目录或系统临时目录
18
20
  - **本技能不读写 memory**:连接器配置通过 CLI 命令写入宜搭平台,不依赖跨会话的 memory 状态
19
21
 
20
22
  ## 适用场景
@@ -107,6 +109,8 @@ openyida connector delete-action <connector-id> <action-id>
107
109
  openyida connector test --connector-id <id> --action <action-file>
108
110
  ```
109
111
 
112
+ > `<action-file>` 先用 create_file / Write / file edit tool 创建,例如 `.cache/openyida/<项目名或任务名>/connector/actions.json`;从 workspace 根执行命令时路径加 `project/` 前缀。
113
+
110
114
  ### 鉴权账号管理
111
115
 
112
116
  ```bash
@@ -26,6 +26,7 @@ description: 从前端 API 文件或后端 Controller 代码中提取接口定
26
26
  - Windows PowerShell 读取中文 JSON 时必须显式使用 UTF-8。
27
27
  - 修改后必须执行“添加动作 -> 列表验证 -> CLI 测试 -> 再次列表验证”的闭环。
28
28
  - 如果一次错误配置导致动作被清空,应重建完整动作列表,而不是只追加缺失动作。
29
+ - 动作 JSON 必须使用当前 agent 的结构化文件写入工具创建;不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向写文件。
29
30
 
30
31
  ## 推荐流程
31
32
 
@@ -51,12 +52,14 @@ openyida connector list-actions <connector-id>
51
52
 
52
53
  ### 3. 生成动作 JSON 文件
53
54
 
54
- 建议放在当前项目:
55
+ 建议放在 OpenYida project 工作目录的任务子目录:
55
56
 
56
57
  ```text
57
- .cache/openyida/connector-actions/<业务名>-actions.json
58
+ <projectRoot>/.cache/openyida/<项目名或任务名>/connector-actions/<业务名>-actions.json
58
59
  ```
59
60
 
61
+ 从 workspace 根执行命令时传 `project/.cache/openyida/<项目名或任务名>/connector-actions/<业务名>-actions.json`;从 project 工作目录内执行时传 `.cache/openyida/<项目名或任务名>/connector-actions/<业务名>-actions.json`。
62
+
60
63
  动作 ID 建议使用顺序编号:
61
64
 
62
65
  ```json
@@ -74,7 +77,7 @@ openyida connector list-actions <connector-id>
74
77
  Windows PowerShell 必须加 `-Encoding UTF8`:
75
78
 
76
79
  ```powershell
77
- Get-Content -Raw -Encoding UTF8 .cache\openyida\connector-actions\<业务名>-actions.json | ConvertFrom-Json | Out-Null
80
+ Get-Content -Raw -Encoding UTF8 .cache\openyida\<项目名或任务名>\connector-actions\<业务名>-actions.json | ConvertFrom-Json | Out-Null
78
81
  ```
79
82
 
80
83
  不要使用默认 `Get-Content` 校验中文 JSON,默认编码可能导致误判或乱码。
@@ -82,7 +85,7 @@ Get-Content -Raw -Encoding UTF8 .cache\openyida\connector-actions\<业务名>-ac
82
85
  ### 5. 添加动作
83
86
 
84
87
  ```bash
85
- openyida connector add-action --operations .cache/openyida/connector-actions/<业务名>-actions.json --connector-id <connector-id> --confirm
88
+ openyida connector add-action --operations .cache/openyida/<项目名或任务名>/connector-actions/<业务名>-actions.json --connector-id <connector-id> --confirm
86
89
  ```
87
90
 
88
91
  ### 6. 验证动作存在
@@ -10,12 +10,13 @@ description: 表单页面创建与更新,支持 19 种字段类型(文本、
10
10
  - 不要编造 formUuid,必须从命令返回的 JSON 中提取
11
11
  - 不要在 update 模式中使用猜测的 fieldId,必须先用 `yida-get-schema` 获取
12
12
  - 不要用此命令操作数据记录(增删改查),应使用 `yida-data-management`
13
+ - 不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向生成字段、变更、补丁、规则、数据源 JSON 文件
13
14
 
14
15
  ## 严格要求 (MUST DO)
15
16
 
16
17
  - create 成功后,将 formUuid 记录到 `.cache/<项目名>-schema.json`
17
18
  - update 模式修改字段前,必须先用 `openyida get-schema` 确认字段 ID
18
- - 字段定义或变更定义需要落盘时,必须写入 `.cache/openyida/<项目名>/`,例如 `.cache/openyida/pm/pm-fields-team.json`;不要在仓库根目录生成 `*-fields*.json` 或 `*-changes*.json`
19
+ - 字段定义或变更定义需要落盘时,必须使用 agent 的结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/`,例如 `<projectRoot>/.cache/openyida/pm/pm-fields-team.json`;不要在仓库根目录、系统临时目录或 `.cache/` 顶层生成 `*-fields*.json`、`*-changes*.json`
19
20
  - **本技能不读写 memory**:formUuid 等信息输出到 stdout,通过 `.cache/<项目名>-schema.json` 持久化,不依赖跨会话的 memory 状态
20
21
 
21
22
  ## 官方表单示例范式
@@ -54,9 +55,11 @@ description: 表单页面创建与更新,支持 19 种字段类型(文本、
54
55
 
55
56
  ```bash
56
57
  openyida create-form create <appType> <formTitle> <fieldsJsonOrFile> [--layout double|card] [--theme compact|comfortable] [--label-align top|left]
57
- # 文件路径示例:.cache/openyida/<项目名>/<表单名>-fields.json
58
+ # 文件路径示例:.cache/openyida/<项目名或任务名>/<表单名>-fields.json
58
59
  ```
59
60
 
61
+ > 文件先用 create_file / Write / file edit tool 创建。上方路径默认从 OpenYida project 工作目录执行;如果从 workspace 根执行命令,传 `project/.cache/openyida/<项目名或任务名>/<表单名>-fields.json`。
62
+
60
63
  | 参数 | 必填 | 说明 |
61
64
  |------|------|------|
62
65
  | `appType` | 是 | 应用 ID |
@@ -73,7 +76,7 @@ openyida create-form create <appType> <formTitle> <fieldsJsonOrFile> [--layout d
73
76
 
74
77
  ```bash
75
78
  openyida create-form update <appType> <formUuid> <changesJsonOrFile>
76
- # 文件路径示例:.cache/openyida/<项目名>/<表单名>-changes.json
79
+ # 文件路径示例:.cache/openyida/<项目名或任务名>/<表单名>-changes.json
77
80
  ```
78
81
 
79
82
  | 参数 | 必填 | 说明 |
@@ -94,7 +97,7 @@ openyida create-form update <appType> <formUuid> <changesJsonOrFile>
94
97
 
95
98
  ```bash
96
99
  openyida create-form patch <appType> <formUuid> <patchJsonOrFile>
97
- # 文件路径示例:.cache/openyida/<项目名>/<表单名>-patch.json
100
+ # 文件路径示例:.cache/openyida/<项目名或任务名>/<表单名>-patch.json
98
101
  ```
99
102
 
100
103
  支持的操作:
@@ -121,7 +124,7 @@ openyida create-form patch <appType> <formUuid> <patchJsonOrFile>
121
124
  ]
122
125
  ```
123
126
 
124
- patch 模式是高级能力:执行前必须先 `openyida get-schema <appType> <formUuid> --json` 确认现有结构,补丁文件必须写在 `.cache/openyida/<项目名>/` 下。
127
+ patch 模式是高级能力:执行前必须先 `openyida get-schema <appType> <formUuid> --json` 确认现有结构,补丁文件必须用结构化文件写入工具写在 `<projectRoot>/.cache/openyida/<项目名或任务名>/` 下。
125
128
 
126
129
  ### 自定义校验函数(customValidate)
127
130
 
@@ -197,7 +200,7 @@ patch 模式是高级能力:执行前必须先 `openyida get-schema <appType>
197
200
 
198
201
  ```bash
199
202
  openyida create-form rule <appType> <formUuid> <rulesJsonOrFile>
200
- # 文件路径示例:.cache/openyida/<项目名>/<表单名>-rules.json
203
+ # 文件路径示例:.cache/openyida/<项目名或任务名>/<表单名>-rules.json
201
204
  ```
202
205
 
203
206
  支持的规则类型:
@@ -255,7 +258,7 @@ rule 模式会自动生成宜搭动作代码,绑定触发字段的 `onChange`
255
258
 
256
259
  ```bash
257
260
  openyida create-form bind-datasource <appType> <formUuid> <fieldLabelOrId> <dataSourceJsonOrFile>
258
- # 文件路径示例:.cache/openyida/<项目名>/<字段名>-datasource.json
261
+ # 文件路径示例:.cache/openyida/<项目名或任务名>/<字段名>-datasource.json
259
262
  ```
260
263
 
261
264
  数据源配置示例:
@@ -380,7 +383,7 @@ openyida create-form bind-datasource <appType> <formUuid> <fieldLabelOrId> <data
380
383
 
381
384
  ## 注意事项
382
385
 
383
- - 临时文件写在 `.cache/openyida/` 目录中;不要写到仓库根目录
386
+ - 临时 JSON 文件用结构化文件写入工具写在 `<projectRoot>/.cache/openyida/<项目名或任务名>/` 目录中;不要写到仓库根目录、系统临时目录或 `.cache/` 顶层
384
387
  - update 模式操作按顺序执行,注意依赖关系
385
388
  - 字段匹配基于中文标签(`label.zh_CN`)
386
389
  - 如需创建自定义展示页面(无字段),请使用 `yida-create-page`
@@ -8,6 +8,7 @@ description: 流程表单一体化创建(创建表单 → 转流程 → 获取
8
8
 
9
9
  - 不要编造 processCode,必须从命令返回的 JSON 中提取
10
10
  - 不要在流程定义中使用猜测的 fieldId,必须先用 `yida-get-schema` 获取
11
+ - 不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向生成字段定义、流程定义 JSON 文件
11
12
 
12
13
  ## 严格要求 (MUST DO)
13
14
 
@@ -15,7 +16,7 @@ description: 流程表单一体化创建(创建表单 → 转流程 → 获取
15
16
  - 优先使用用法 2(先创建表单获取字段 ID,再 `--formUuid` 转流程)
16
17
  - 创建成功后,将 formUuid 和 processCode 记录到 `.cache/<项目名>-schema.json`
17
18
  - 流程定义中字段 ≥ 3 且审批节点 ≥ 2 时,必须自动配置字段权限
18
- - 字段定义和流程定义文件必须写入 `.cache/openyida/<项目名>/`,不要在仓库根目录生成 `fields.json`、`process-definition.json` 等临时文件
19
+ - 字段定义和流程定义文件必须用 agent 的结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/`;不要在仓库根目录、系统临时目录或 `.cache/` 顶层生成 `fields.json`、`process-definition.json` 等临时文件
19
20
  - **本技能不读写 memory**:formUuid 和 processCode 输出到 stdout,通过 `.cache/<项目名>-schema.json` 持久化,不依赖跨会话的 memory 状态
20
21
 
21
22
  ## 适用场景
@@ -66,11 +67,16 @@ openyida create-process <appType> --formUuid <formUuid> <processDefinitionFile>
66
67
 
67
68
  ## 推荐两步流程
68
69
 
70
+ 1. 使用 create_file / Write / file edit tool 创建字段定义:
71
+ `<projectRoot>/.cache/openyida/order/order-fields.json`
72
+ 2. 执行表单创建命令,获取真实 `formUuid` 和 `fieldId`。
73
+ 3. 使用结构化文件写入工具创建流程定义:
74
+ `<projectRoot>/.cache/openyida/order/process-definition.json`
75
+ 4. 执行流程转换命令。
76
+
69
77
  ```bash
70
- # Step 1: 创建表单获取字段 ID
78
+ # 以下命令默认在 OpenYida project 工作目录内执行;从 workspace 根执行时路径加 project/ 前缀。
71
79
  openyida create-form create "APP_XXX" "订单处理表" .cache/openyida/order/order-fields.json
72
-
73
- # Step 2: 将已有表单转为流程表单
74
80
  openyida create-process "APP_XXX" --formUuid "FORM-YYY" .cache/openyida/order/process-definition.json
75
81
  ```
76
82
 
@@ -73,10 +73,15 @@ description: 宜搭 native 自定义页面 JSX 开发规范(React 16 宜搭原
73
73
 
74
74
  以创建「员工信息查询页」为例,完整流程如下:
75
75
 
76
+ 1. 获取表单 Schema,确认字段 ID:
77
+
76
78
  ```bash
77
- # Step 1:获取表单 Schema,确认字段 ID
78
- openyida get-schema APP_XXX FORM-EMPLOYEE > .cache/employee-schema.json 2>&1
79
+ openyida get-schema APP_XXX FORM-EMPLOYEE
80
+ ```
79
81
 
82
+ 如需保存完整 Schema,使用 create_file / Write / file edit tool 创建 `<projectRoot>/.cache/openyida/employee-query/employee-schema.json`;ID 映射仍写 `<projectRoot>/.cache/employee-query-schema.json`。
83
+
84
+ ```bash
80
85
  # Step 2:创建自定义页面
81
86
  openyida create-page APP_XXX "员工信息查询"
82
87
 
@@ -96,7 +101,7 @@ openyida publish project/pages/src/employee-query.oyd.jsx APP_XXX FORM-QUERY001
96
101
  - **Step 1** 的 get-schema 输出包含所有字段的 fieldId,在代码中必须使用 `FIELDS` 常量映射这些 ID
97
102
  - **Step 3** 的页面代码必须遵循 [编码指南](references/coding-guide.md) 和 [运行时护栏](references/runtime-guardrails.md)
98
103
  - 优先通过 `openyida generate-page ... --compile` 生成高质量骨架;需要完整交互样板时使用 `todo-mvc`
99
- - 页面生成 spec、接口调试 JSON、一次性验证脚本等临时工件必须放在 `.cache/openyida/` 下;不要在仓库根目录生成 `page.json`、`data.json` 或脚本文件
104
+ - 页面生成 spec、接口调试 JSON、一次性验证脚本等临时工件必须用结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/` 下;不要在仓库根目录、系统临时目录或 `.cache/` 顶层生成 `page.json`、`data.json` 或脚本文件
100
105
  - `check-page` 支持行级禁用:`// openyida-lint-disable-line <rule>` 或 `// openyida-lint-disable-next-line <rule>`。只在确认该行不会触发宜搭运行时问题时使用。
101
106
 
102
107
  ## 开发规范
@@ -115,12 +120,13 @@ openyida sample yida-custom-page custom-page-template # 完整页面模板(d
115
120
  openyida sample yida-custom-page product-homepage # 产品/项目首页轻量模板(支持 --var KEY=VALUE)
116
121
  openyida sample yida-custom-page todo-mvc # TodoMVC 完整交互模板(事件/状态/循环/本地存储)
117
122
  openyida sample yida-custom-page design-tokens # 设计 token 参考(颜色/间距/字体规范)
118
- openyida generate-page product-homepage --spec .cache/openyida/page-specs/home.json --output pages/src/home.oyd.jsx --compile # 基于 spec/blocks 生成首页并本地编译
123
+ openyida generate-page product-homepage --spec .cache/openyida/<项目名或任务名>/page-specs/home.json --output pages/src/home.oyd.jsx --compile # 基于 spec/blocks 生成首页并本地编译
119
124
  openyida generate-page todo-mvc --output pages/src/todo-mvc.oyd.jsx --compile # 生成官方 TodoMVC 风格交互样板
120
125
  openyida check-page pages/src/home.oyd.jsx --json # 输出机器可读的规范检查结果;.oyd.jsx 会先兼容构建
121
126
  ```
122
127
 
123
128
  - 完整文件结构、状态管理、全局变量、19 条编码规则见 [编码指南](references/coding-guide.md)
129
+ - `--spec` 文件先用 create_file / Write / file edit tool 创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/page-specs/`
124
130
  - 运行时高风险规则、`check-page` 规则和自动修复边界见 [运行时护栏](references/runtime-guardrails.md)
125
131
  - 输入控件、筛选栏、下拉、表格、附件等组件骨架见 [组件指南](references/component-jsx-guide.md)
126
132
 
@@ -400,5 +400,7 @@ openyida compile pages/src/page.jsx
400
400
  如果页面使用字段 ID、提交数据或构造查询条件,发布前还必须重新确认 Schema:
401
401
 
402
402
  ```bash
403
- openyida get-schema APP_XXX FORM-XXX > .cache/form-schema.json
403
+ openyida get-schema APP_XXX FORM-XXX
404
404
  ```
405
+
406
+ 如需保存完整 Schema,使用 create_file / Write / file edit tool 创建 `<projectRoot>/.cache/openyida/<项目名或任务名>/form-schema.json`;不要使用 shell 重定向。
@@ -11,6 +11,7 @@ description: 宜搭数据管理。表单实例/子表/流程实例/任务中心
11
11
  - 不要编造 formInstId 或 processInstanceId,必须从查询结果中提取
12
12
  - 不要用此命令修改表单结构(字段增删改),应使用 `yida-create-form-page`
13
13
  - **绝对禁止猜测或编造字段 ID(fieldId)**,宜搭字段 ID 由平台随机生成(如 `textField_eftt1aa5m`),无法预测,必须通过 `openyida get-schema` 获取
14
+ - 不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向生成 `--data-file`、`--search-file`、CSV 或一次性脚本
14
15
 
15
16
  ## 严格要求 (MUST DO)
16
17
 
@@ -22,8 +23,8 @@ description: 宜搭数据管理。表单实例/子表/流程实例/任务中心
22
23
  - **录入数据后,必须执行 `openyida data query` 抽查至少 1 条记录,确认 `formData` 中字段有实际值(非空),否则说明字段 ID 有误,需重新排查**
23
24
  - **读取子表明细超过 50 行时,必须使用 `openyida data query subform` 或 `listTableDataByFormInstIdAndTableId` 分页查询完整子表;不要把 `searchFormDatas.currentPage` 当作子表分页**
24
25
  - **本技能不读写 memory**:数据操作通过 CLI 命令写入宜搭平台,不依赖跨会话的 memory 状态
25
- - 一次性造数、旧数据修正、字段迁移脚本可以使用 Python 或 JS,优先选择更快更清晰的实现;脚本、导入数据、查询条件文件必须放在 `.cache/openyida/` 下,并复用真实查询到的 appType/formUuid/fieldId/formInstId
26
- - **禁止在仓库根目录生成导入用的 `*.json`、`*.js`、`*.py`、`*.csv` 临时文件**;推荐使用 `.cache/openyida/data-import/` 存放数据文件,`.cache/openyida/scripts/` 存放一次性执行脚本
26
+ - 一次性造数、旧数据修正、字段迁移脚本可以使用 Python 或 JS,优先选择更快更清晰的实现;脚本、导入数据、查询条件文件必须由结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/` 下,并复用真实查询到的 appType/formUuid/fieldId/formInstId
27
+ - **禁止在仓库根目录、系统临时目录或 `.cache/` 顶层生成导入用的 `*.json`、`*.js`、`*.py`、`*.csv` 临时文件**;推荐使用 `<projectRoot>/.cache/openyida/<项目名或任务名>/data-import/` 存放数据文件,`<projectRoot>/.cache/openyida/<项目名或任务名>/scripts/` 存放一次性执行脚本
27
28
 
28
29
  ## 适用场景
29
30
 
@@ -61,15 +62,17 @@ description: 宜搭数据管理。表单实例/子表/流程实例/任务中心
61
62
  ### 表单实例
62
63
 
63
64
  ```bash
64
- openyida data query form <appType> <formUuid> [--page 1 --size 20] [--search-json '<json>'|--search-file .cache/openyida/data-import/search.json] [--resolve-aliases]
65
+ openyida data query form <appType> <formUuid> [--page 1 --size 20] [--search-json '<json>'|--search-file .cache/openyida/<项目名或任务名>/data-import/search.json] [--resolve-aliases]
65
66
  openyida data get form <appType> --inst-id <formInstId>
66
67
  openyida data create form <appType> <formUuid> --data-json '<json>' [--resolve-aliases]
67
- openyida data create form <appType> <formUuid> --data-file .cache/openyida/data-import/record.json [--resolve-aliases]
68
+ openyida data create form <appType> <formUuid> --data-file .cache/openyida/<项目名或任务名>/data-import/record.json [--resolve-aliases]
68
69
  openyida data update form <appType> --inst-id <formInstId> --form-uuid <formUuid> --data-json '<json>' [--resolve-aliases]
69
- openyida data update form <appType> --inst-id <formInstId> --form-uuid <formUuid> --data-file .cache/openyida/data-import/patch.json [--resolve-aliases]
70
+ openyida data update form <appType> --inst-id <formInstId> --form-uuid <formUuid> --data-file .cache/openyida/<项目名或任务名>/data-import/patch.json [--resolve-aliases]
70
71
  openyida data query subform <appType> <formUuid> --inst-id <formInstId> --table-field-id <fieldId|alias> [--page 1 --size 100] [--resolve-aliases]
71
72
  ```
72
73
 
74
+ > `--data-file` / `--search-file` 指向的文件先用 create_file / Write / file edit tool 创建。上方路径默认从 OpenYida project 工作目录执行;从 workspace 根执行命令时路径加 `project/` 前缀。
75
+
73
76
  当 JSON 使用宜搭组件别名作为 key 时,追加 `--resolve-aliases`,OpenYida 会先读取表单 Schema 中的 `componentAlias.items`,再将别名转换为真实 `fieldId` 后调用数据接口。更新类命令若要解析别名,必须额外传 `--form-uuid <formUuid>`。
74
77
 
75
78
  ### 子表超过 50 行
@@ -90,14 +93,14 @@ openyida data query subform <appType> <formUuid> --inst-id <formInstId> --table-
90
93
  ### 流程实例
91
94
 
92
95
  ```bash
93
- openyida data query process <appType> <formUuid> [--instance-status RUNNING] [--search-file .cache/openyida/data-import/process-search.json] [--resolve-aliases]
96
+ openyida data query process <appType> <formUuid> [--instance-status RUNNING] [--search-file .cache/openyida/<项目名或任务名>/data-import/process-search.json] [--resolve-aliases]
94
97
  openyida data get process <appType> --process-inst-id <processInstanceId>
95
98
  openyida data create process <appType> <formUuid> --process-code <processCode> --data-json '<json>' [--resolve-aliases]
96
- openyida data create process <appType> <formUuid> --process-code <processCode> --data-file .cache/openyida/data-import/process-record.json [--resolve-aliases]
99
+ openyida data create process <appType> <formUuid> --process-code <processCode> --data-file .cache/openyida/<项目名或任务名>/data-import/process-record.json [--resolve-aliases]
97
100
  openyida data update process <appType> --process-inst-id <processInstanceId> --form-uuid <formUuid> --data-json '<json>' [--resolve-aliases]
98
- openyida data update process <appType> --process-inst-id <processInstanceId> --form-uuid <formUuid> --data-file .cache/openyida/data-import/process-patch.json [--resolve-aliases]
101
+ openyida data update process <appType> --process-inst-id <processInstanceId> --form-uuid <formUuid> --data-file .cache/openyida/<项目名或任务名>/data-import/process-patch.json [--resolve-aliases]
99
102
  openyida data query operation-records <appType> --process-inst-id <processInstanceId>
100
- openyida data execute task <appType> --task-id <taskId> --process-inst-id <processInstanceId> --out-result AGREE --remark '同意' [--data-file .cache/openyida/data-import/task-data.json] [--form-uuid <formUuid>] [--resolve-aliases]
103
+ openyida data execute task <appType> --task-id <taskId> --process-inst-id <processInstanceId> --out-result AGREE --remark '同意' [--data-file .cache/openyida/<项目名或任务名>/data-import/task-data.json] [--form-uuid <formUuid>] [--resolve-aliases]
101
104
  ```
102
105
 
103
106
  ### 任务中心
@@ -156,7 +159,7 @@ openyida data query tasks <appType> --type todo|done|submitted|cc [--page 1 --si
156
159
  {"textField_xxx":"文本","numberField_xxx":10,"dateField_xxx":1719705600000,"employeeField_xxx":["userId"]}
157
160
  ```
158
161
 
159
- 当 JSON 较长或用于批量导入时,写入 `.cache/openyida/data-import/<name>.json`,再使用 `--data-file` 或 `--search-file`;不要为了拼接命令在仓库根目录生成临时脚本。
162
+ 当 JSON 较长或用于批量导入时,使用结构化文件写入工具写入 `<projectRoot>/.cache/openyida/<项目名或任务名>/data-import/<name>.json`,再使用 `--data-file` 或 `--search-file`;不要为了拼接命令在仓库根目录、系统临时目录或 `.cache/` 顶层生成临时脚本。
160
163
 
161
164
  ### 常见字段格式
162
165
 
@@ -215,7 +218,7 @@ openyida sample yida-data-management form-field-template # 表单字段定义
215
218
  - `pageSize` 最大 100,QPS 限制约 40 次/秒
216
219
  - `searchFieldJson` 和 `dynamicOrder` 必须传字符串
217
220
  - 字段 ID 通过 `openyida get-schema` 获取,不要手写猜测
218
- - 批量脚本可以用 Python `subprocess` 调用 `openyida data ...`,也可以用 JS 复用 Node 工具;脚本必须放在 `.cache/openyida/scripts/`,导入数据放在 `.cache/openyida/data-import/`
221
+ - 批量脚本可以用 Python `subprocess` 调用 `openyida data ...`,也可以用 JS 复用 Node 工具;脚本必须由结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/scripts/`,导入数据放在 `<projectRoot>/.cache/openyida/<项目名或任务名>/data-import/`
219
222
 
220
223
  ## 异常处理
221
224
 
@@ -108,9 +108,11 @@ export function loadConnectorDataSource(dataSourceName, headers, query, body) {
108
108
 
109
109
  ```bash
110
110
  openyida publish <src> <appType> <formUuid> --health-check
111
- openyida get-schema <appType> <formUuid> > .cache/openyida/<page>-schema.json
111
+ openyida get-schema <appType> <formUuid>
112
112
  ```
113
113
 
114
+ 如需保存回读 Schema,使用 create_file / Write / file edit tool 创建 `<projectRoot>/.cache/openyida/<项目名或任务名>/<page>-schema.json`;从 workspace 根执行后续命令时路径加 `project/` 前缀。不要使用 shell 重定向。
115
+
114
116
  检查点:
115
117
 
116
118
  - 设计器左侧“数据源”能看到新增连接器数据源。
@@ -24,8 +24,9 @@
24
24
 
25
25
  ```bash
26
26
  # 方式 1:从文件读取
27
- echo "上述内容" > meeting.txt
28
- openyida flash-to-prd --file meeting.txt --name 员工积分管理系统
27
+ # 先使用 create_file / Write / file edit tool 创建:
28
+ # <projectRoot>/.cache/openyida/员工积分管理系统/flash-note/meeting.txt
29
+ openyida flash-to-prd --file .cache/openyida/员工积分管理系统/flash-note/meeting.txt --name 员工积分管理系统
29
30
 
30
31
  # 方式 2:直接发给 AI 智能体(推荐)
31
32
  # 将文本直接粘贴到对话框,AI 自动识别并触发本技能
@@ -9,8 +9,8 @@
9
9
  ### 前置步骤:获取字段 ID
10
10
 
11
11
  ```bash
12
- openyida get-schema APP_XXX FORM-YYY > .cache/schema.json 2>&1
13
- # 从 schema.json 中找到各字段的 fieldId:
12
+ openyida get-schema APP_XXX FORM-YYY
13
+ # 从 stdout 中找到各字段的 fieldId,并用结构化文件写入工具更新 <projectRoot>/.cache/<项目名>-schema.json
14
14
  # 交通费:numberField_transport
15
15
  # 住宿费:numberField_hotel
16
16
  # 餐饮费:numberField_meal
@@ -19,7 +19,7 @@ openyida get-schema APP_XXX FORM-YYY > .cache/schema.json 2>&1
19
19
 
20
20
  ### 执行:update 模式配置公式
21
21
 
22
- 创建 `formula-config.json`:
22
+ 使用 create_file / Write / file edit tool 创建 `<projectRoot>/.cache/openyida/expense/formula-config.json`:
23
23
 
24
24
  ```json
25
25
  [
@@ -40,7 +40,7 @@ openyida get-schema APP_XXX FORM-YYY > .cache/schema.json 2>&1
40
40
  ```
41
41
 
42
42
  ```bash
43
- openyida create-form APP_XXX FORM-YYY formula-config.json
43
+ openyida create-form update APP_XXX FORM-YYY .cache/openyida/expense/formula-config.json
44
44
  ```
45
45
 
46
46
  ### 输出
@@ -39,13 +39,15 @@ openyida formula evaluate <公式或文件> [--schema schema.json] [--json] [--s
39
39
  1. 如果公式包含字段引用,先获取 Schema:
40
40
 
41
41
  ```bash
42
- openyida get-schema APP_XXX FORM-XXX > .cache/form-schema.json
42
+ openyida get-schema APP_XXX FORM-XXX
43
43
  ```
44
44
 
45
+ 将 stdout 中需要复用的 Schema 通过 create_file / Write / file edit tool 保存到 `<projectRoot>/.cache/openyida/<项目名或任务名>/formula/form-schema.json`;不要用 shell 重定向。
46
+
45
47
  2. 运行静态检查:
46
48
 
47
49
  ```bash
48
- openyida formula evaluate 'IF(GT(#{numberField_total}, 100), "高", "低")' --schema .cache/form-schema.json
50
+ openyida formula evaluate 'IF(GT(#{numberField_total}, 100), "高", "低")' --schema .cache/openyida/<项目名或任务名>/formula/form-schema.json
49
51
  ```
50
52
 
51
53
  3. 根据诊断结果修复:
@@ -13,11 +13,13 @@ description: 获取表单的完整 Schema 结构,用于确认字段 ID(field
13
13
  - 不要跳过 Schema 获取步骤直接进行数据操作,即使用户催促也必须先获取
14
14
  - 不要在 Schema 获取失败时继续执行后续操作,必须先解决问题
15
15
  - 不要缓存过期的 Schema 信息,表单结构变更后必须重新获取
16
+ - 不要把 `openyida get-schema` 的 stdout 通过 shell 重定向保存成 JSON,也不要用 heredoc、`cat`/`echo`/`printf`/`tee` 生成 Schema 文件
16
17
 
17
18
  ## 严格要求 (MUST DO)
18
19
 
19
20
  - **凡是需要用到字段 ID(fieldId)的操作,必须先执行此命令**,不得跳过
20
- - 将关键字段 ID 映射(字段名 → fieldId)记录到 `.cache/<项目名>-schema.json`,供后续操作复用
21
+ - 将关键字段 ID 映射(字段名 → fieldId)用结构化文件写入工具记录到 `<projectRoot>/.cache/<项目名>-schema.json`,供后续操作复用
22
+ - 如需保存完整 Schema 文件,先执行命令获取 stdout,再用 create_file / Write / file edit tool 写入 `<projectRoot>/.cache/openyida/<项目名或任务名>/<表单名>-schema.json`;从 workspace 根执行后续命令时传 `project/.cache/...`
21
23
  - **录入/更新数据后,必须用 `openyida data query --size 1` 抽查一条记录,确认 `formData` 中字段有实际值(非空 `""`),若全部为空说明字段 ID 有误,需重新排查**
22
24
 
23
25
  ## 适用场景
@@ -61,13 +63,20 @@ openyida get-schema <appType> --all [--output-dir <dir>] [--keyword <text>] [--c
61
63
  ### 单表模式
62
64
 
63
65
  ```bash
64
- openyida get-schema APP_XXX FORM-XXX > .cache/customer-schema.json
66
+ openyida get-schema APP_XXX FORM-XXX
67
+ ```
68
+
69
+ 如需复用输出,使用 agent 的结构化文件写入工具创建:
70
+
71
+ ```text
72
+ <projectRoot>/.cache/openyida/customer/customer-schema.json
73
+ <projectRoot>/.cache/customer-schema.json # 仅保存 appType/formUuid/fieldId/reportId 等 ID 映射
65
74
  ```
66
75
 
67
76
  ### 批量模式
68
77
 
69
78
  ```bash
70
- openyida get-schema APP_XXX --all --output-dir .cache/schemas
79
+ openyida get-schema APP_XXX --all --output-dir .cache/openyida/customer/schemas
71
80
  openyida get-schema APP_XXX --all --keyword 客户 --concurrency 5 --retries 2
72
81
  ```
73
82
 
@@ -90,8 +99,8 @@ openyida get-schema APP_XXX --all --keyword 客户 --concurrency 5 --retries 2
90
99
  | 异常场景 | 处理方式 |
91
100
  |---------|----------|
92
101
  | 命令返回失败 | 确认 appType 和 formUuid 正确,检查登录态 |
93
- | 输出被终端截断 | 重定向到文件:`openyida get-schema <appType> <formUuid> > .cache/schema.json` |
94
- | 需要多个表单字段 ID | 使用批量模式:`openyida get-schema <appType> --all --output-dir .cache/schemas` |
102
+ | 输出被终端截断 | 重新执行后将 stdout 通过结构化文件写入工具保存到 `<projectRoot>/.cache/openyida/<项目名或任务名>/<表单名>-schema.json`;不要使用 shell 重定向 |
103
+ | 需要多个表单字段 ID | 使用批量模式:`openyida get-schema <appType> --all --output-dir .cache/openyida/<项目名或任务名>/schemas` |
95
104
  | 批量部分失败 | 查看 stdout 的 `failedCount` 和 `forms[].errorMsg`,必要时提高 `--retries` 或缩小 `--keyword` 范围 |
96
105
  | 找不到目标字段 | 检查字段是否已创建,字段 ID 格式如 `textField_xxxxxxxx`,不能手写猜测 |
97
106
  | Schema 输出为空 | 表单可能没有字段,先用 `yida-create-form-page` 创建字段 |
@@ -81,10 +81,12 @@ openyida i18n upsert <appType> page_header --zh-CN "工作台" --en-US "Workbenc
81
81
  批量导入词条:
82
82
 
83
83
  ```bash
84
- openyida i18n batch-upsert <appType> --file i18n-items.json
84
+ openyida i18n batch-upsert <appType> --file .cache/openyida/<项目名或任务名>/i18n/i18n-items.json
85
85
  ```
86
86
 
87
- `i18n-items.json` 示例:
87
+ `i18n-items.json` 先用 create_file / Write / file edit tool 创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/i18n/`;不要用 shell heredoc 或重定向写文件。从 workspace 根执行命令时路径加 `project/` 前缀。
88
+
89
+ 文件内容示例:
88
90
 
89
91
  ```json
90
92
  [
@@ -16,6 +16,7 @@ description: 宜搭集成&自动化配置。支持创建、查询、开启、关
16
16
  - **创建/发布前必须确认**:执行集成自动化创建或发布操作前,必须向用户展示逻辑流配置摘要(触发条件、节点列表、通知对象),获得用户明确同意后再执行
17
17
  - 创建前先确认触发表单的 formUuid 和相关字段 ID
18
18
  - 创建成功后记录逻辑流 ID 到 `.cache/<项目名>-schema.json`
19
+ - `--spec`、连接器输入等 JSON 文件必须先用结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/integration/`;不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向写文件,也不要写仓库根目录或系统临时目录
19
20
  - 参考官方示例时不要只看默认页面 schema:集成自动化示例的默认页通常只是触发表单或说明页,逻辑流本体需要通过集成自动化接口/命令查询或创建
20
21
 
21
22
  ## 适用场景
@@ -242,10 +243,12 @@ openyida integration create APP_XXX FORM-A-XXX "调用 HTTP 连接器" \
242
243
 
243
244
  ```bash
244
245
  openyida integration create APP_XXX FORM-XXX "获取自身后分支更新" \
245
- --spec project/integration/get-self-update.json \
246
+ --spec .cache/openyida/<项目名或任务名>/integration/get-self-update.json \
246
247
  --publish
247
248
  ```
248
249
 
250
+ > `--spec` 文件先用 create_file / Write / file edit tool 创建。上方路径默认从 OpenYida project 工作目录执行;从 workspace 根执行命令时路径加 `project/` 前缀。
251
+
249
252
  ## 字段变量引用格式
250
253
 
251
254
  在通知标题和内容中,可以使用 `#{fieldId-ComponentType}#` 格式引用触发表单的字段值:
@@ -9,8 +9,8 @@
9
9
  ### 前置步骤:获取字段 ID
10
10
 
11
11
  ```bash
12
- openyida get-schema APP_XXX FORM-LEAVE > .cache/leave-schema.json 2>&1
13
- # 从 schema.json 中提取字段 ID:
12
+ openyida get-schema APP_XXX FORM-LEAVE
13
+ # 从 stdout 中提取字段 ID,并用结构化文件写入工具更新 <projectRoot>/.cache/<项目名>-schema.json
14
14
  # 申请人:employeeField_applicant
15
15
  # 请假类型:selectField_leaveType
16
16
  # 开始日期:dateField_startDate
@@ -37,10 +37,10 @@ openyida login --check-only --json
37
37
  3. Fetch the live schema before editing or publishing:
38
38
 
39
39
  ```bash
40
- openyida get-schema <appType> <formUuid> --json > project/.cache/openyida/live-<formUuid>.json
40
+ openyida get-schema <appType> <formUuid> --json
41
41
  ```
42
42
 
43
- The repository ignore rules already exclude `project/.cache/openyida/`; keep fetched live schema files there and do not commit them.
43
+ If the schema needs to be inspected from a file, save stdout with the agent's structured file write tool to `<projectRoot>/.cache/openyida/publish-guard/live-<formUuid>.json`. From the workspace root that path is typically `project/.cache/openyida/publish-guard/live-<formUuid>.json`. Do not use shell redirection and do not commit fetched live schema files.
44
44
 
45
45
  4. Inspect the fetched live page for current code and configuration. For custom display pages, check at least:
46
46
 
@@ -10,6 +10,7 @@ description: 为已有流程表单配置审批规则(审批/办理/抄送、
10
10
  - 不要在流程定义中使用猜测的 fieldId,必须先用 `yida-get-schema` 获取
11
11
  - 不要在未读取本 SKILL.md 的情况下编写流程定义 JSON,格式复杂且易出错
12
12
  - 不要用此技能创建流程表单,应使用 `yida-create-process`
13
+ - 不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向生成流程定义 JSON
13
14
 
14
15
  ## 严格要求 (MUST DO)
15
16
 
@@ -17,7 +18,7 @@ description: 为已有流程表单配置审批规则(审批/办理/抄送、
17
18
  - 字段 ≥ 3 且审批节点 ≥ 2 时,必须为每个节点配置字段权限
18
19
  - 存在回退/循环语义时,必须配置 `routeRules` 跳转规则
19
20
  - 配置前先用 `yida-get-schema` 获取所有字段 ID
20
- - 流程定义 JSON 必须写入 `.cache/openyida/<项目名>/`,不要在仓库根目录生成 `process-definition.json` 等临时文件
21
+ - 流程定义 JSON 必须用结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/`,不要在仓库根目录、系统临时目录或 `.cache/` 顶层生成 `process-definition.json` 等临时文件
21
22
 
22
23
  ## 适用场景
23
24
 
@@ -79,6 +80,8 @@ openyida configure-process <appType> <formUuid> <processDefinitionFile> [process
79
80
  openyida configure-process "APP_XXX" "FORM-YYY" .cache/openyida/order/process-definition.json
80
81
  ```
81
82
 
83
+ > 上方路径默认从 OpenYida project 工作目录执行;从 workspace 根执行命令时传 `project/.cache/openyida/order/process-definition.json`。
84
+
82
85
  **输出**:日志输出到 stderr,JSON 结果输出到 stdout:
83
86
 
84
87
  ```json
@@ -9,15 +9,15 @@
9
9
  ### 前置步骤:获取字段 ID
10
10
 
11
11
  ```bash
12
- openyida get-schema APP_XXX FORM-EXPENSE > .cache/expense-schema.json 2>&1
13
- # 从 schema.json 中提取字段 ID:
12
+ openyida get-schema APP_XXX FORM-EXPENSE
13
+ # 从 stdout 中提取字段 ID,并用结构化文件写入工具更新 <projectRoot>/.cache/<项目名>-schema.json
14
14
  # 报销金额:numberField_amount
15
15
  # 报销类型:selectField_expenseType
16
16
  # 报销说明:textareaField_remark
17
17
  # 附件:attachmentField_receipt
18
18
  ```
19
19
 
20
- ### 创建流程定义文件 `.cache/openyida/process/expense-process.json`
20
+ ### 使用结构化文件写入工具创建流程定义文件 `<projectRoot>/.cache/openyida/expense/process/expense-process.json`
21
21
 
22
22
  ```json
23
23
  {
@@ -76,7 +76,7 @@ openyida get-schema APP_XXX FORM-EXPENSE > .cache/expense-schema.json 2>&1
76
76
  ### 执行命令
77
77
 
78
78
  ```bash
79
- openyida configure-process APP_XXX FORM-EXPENSE .cache/openyida/process/expense-process.json
79
+ openyida configure-process APP_XXX FORM-EXPENSE .cache/openyida/expense/process/expense-process.json
80
80
  ```
81
81
 
82
82
  ### 输出
@@ -100,7 +100,7 @@ openyida configure-process APP_XXX FORM-EXPENSE .cache/openyida/process/expense-
100
100
 
101
101
  质检流程:取样 → 检验 → 判断结果(合格/不合格)。不合格时跳回检验节点重新检验。
102
102
 
103
- ### 流程定义 `.cache/openyida/process/quality-process.json`
103
+ ### 流程定义 `<projectRoot>/.cache/openyida/quality/process/quality-process.json`
104
104
 
105
105
  ```json
106
106
  {
@@ -157,7 +157,7 @@ openyida configure-process APP_XXX FORM-EXPENSE .cache/openyida/process/expense-
157
157
  ### 执行命令
158
158
 
159
159
  ```bash
160
- openyida configure-process APP_XXX FORM-QUALITY .cache/openyida/process/quality-process.json
160
+ openyida configure-process APP_XXX FORM-QUALITY .cache/openyida/quality/process/quality-process.json
161
161
  ```
162
162
 
163
163
  ---
@@ -188,7 +188,7 @@ openyida configure-process APP_XXX FORM-QUALITY .cache/openyida/process/quality-
188
188
 
189
189
  订单处理流程:检查订单 → 订单有效判断 → 库存判断(充足/不足)→ 对应处理。
190
190
 
191
- ### 流程定义 `.cache/openyida/process/order-process.json`
191
+ ### 流程定义 `<projectRoot>/.cache/openyida/order/process/order-process.json`
192
192
 
193
193
  ```json
194
194
  {
@@ -266,7 +266,7 @@ openyida configure-process APP_XXX FORM-QUALITY .cache/openyida/process/quality-
266
266
  ### 执行命令
267
267
 
268
268
  ```bash
269
- openyida configure-process APP_XXX FORM-ORDER .cache/openyida/process/order-process.json
269
+ openyida configure-process APP_XXX FORM-ORDER .cache/openyida/order/process/order-process.json
270
270
  ```
271
271
 
272
272
  ---
@@ -277,7 +277,7 @@ openyida configure-process APP_XXX FORM-ORDER .cache/openyida/process/order-proc
277
277
 
278
278
  配置流程后,钉钉工作通知推送的链接需要指向自定义详情页,而非原生 `taskDetail.htm`。
279
279
 
280
- ### 流程定义 `.cache/openyida/process/custom-detail-process.json`
280
+ ### 流程定义 `<projectRoot>/.cache/openyida/custom-detail/process/custom-detail-process.json`
281
281
 
282
282
  ```json
283
283
  {
@@ -296,7 +296,7 @@ openyida configure-process APP_XXX FORM-ORDER .cache/openyida/process/order-proc
296
296
  ### 执行命令
297
297
 
298
298
  ```bash
299
- openyida configure-process APP_XXX FORM-XXX .cache/openyida/process/custom-detail-process.json
299
+ openyida configure-process APP_XXX FORM-XXX .cache/openyida/custom-detail/process/custom-detail-process.json
300
300
  ```
301
301
 
302
302
  ### 说明
@@ -311,7 +311,7 @@ openyida configure-process APP_XXX FORM-XXX .cache/openyida/process/custom-detai
311
311
 
312
312
  审批流程:部门主管审核 → 财务部审核(拒绝时跳回部门主管审核)→ 结束。
313
313
 
314
- ### 流程定义 `.cache/openyida/process/jump-rule-process.json`
314
+ ### 流程定义 `<projectRoot>/.cache/openyida/jump-rule/process/jump-rule-process.json`
315
315
 
316
316
  ```json
317
317
  {
@@ -336,7 +336,7 @@ openyida configure-process APP_XXX FORM-XXX .cache/openyida/process/custom-detai
336
336
  ### 执行命令
337
337
 
338
338
  ```bash
339
- openyida configure-process APP_XXX FORM-XXX .cache/openyida/process/jump-rule-process.json
339
+ openyida configure-process APP_XXX FORM-XXX .cache/openyida/jump-rule/process/jump-rule-process.json
340
340
  ```
341
341
 
342
342
  ### 流程
@@ -11,6 +11,7 @@ description: "宜搭原生报表创建,支持 16 种图表/表格/筛选器组
11
11
  - 不要编造 `reportId`、`datasetId`、`fieldId`,必须从报表 Schema 或 URL 中提取
12
12
  - 不要将本技能与 `yida-chart` 混淆:本技能负责创建原生报表(数据源),`yida-chart` 负责 ECharts 可视化
13
13
  - 不要在没有原生报表的情况下直接使用 ECharts,ECharts 必须依赖原生报表作为数据源
14
+ - 不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向生成报表配置 JSON
14
15
 
15
16
  ## 严格要求 (MUST DO)
16
17
 
@@ -19,7 +20,7 @@ description: "宜搭原生报表创建,支持 16 种图表/表格/筛选器组
19
20
  - 参考官方示例时先确认 schema 证据:只有 `formType: "report"` 或组件树出现 `Youshu*` 报表组件时才按原生报表处理;`report` 标签但默认页是 `receipt` 或自定义页时,先判断是否只是数据准备页或看板页
20
21
  - 调用报表数据 API 前必须确认 `reportId` 和 `datasetId` 来自真实报表
21
22
  - 解析报表数据时必须处理 `data.rows` 为空的情况,避免页面崩溃
22
- - 报表配置 JSON 需要落盘时,必须写入 `.cache/openyida/<项目名>/`,例如 `.cache/openyida/pm/pm-report-team.json`;不要在仓库根目录生成 `*-report*.json`
23
+ - 报表配置 JSON 需要落盘时,必须用结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/`,例如 `<projectRoot>/.cache/openyida/pm/pm-report-team.json`;不要在仓库根目录、系统临时目录或 `.cache/` 顶层生成 `*-report*.json`
23
24
  - 本技能不读写 memory,报表配置通过 `openyida create-report` 命令写入宜搭平台,不依赖跨会话的 memory 状态
24
25
 
25
26
  ## 适用场景
@@ -381,9 +382,11 @@ console.log(JSON.stringify(reportPageSchema, null, 2));
381
382
 
382
383
  ```bash
383
384
  openyida create-report <appType> "<报表名称>" <配置JSON文件路径>
384
- # 配置文件路径示例:.cache/openyida/<项目名>/<报表名>-report.json
385
+ # 配置文件路径示例:.cache/openyida/<项目名或任务名>/<报表名>-report.json
385
386
  ```
386
387
 
388
+ > 配置 JSON 先用 create_file / Write / file edit tool 创建。上方路径默认从 OpenYida project 工作目录执行;从 workspace 根执行命令时传 `project/.cache/openyida/<项目名或任务名>/<报表名>-report.json`。
389
+
387
390
  **⚠️ 第二个参数是报表名称,必须使用业务含义的中文名称**(如"任务管理数据报表"),不要传 formUuid。
388
391
 
389
392
  ### cubeCode 格式规则
@@ -9,8 +9,8 @@
9
9
  ### 前置步骤:获取表单 Schema
10
10
 
11
11
  ```bash
12
- openyida get-schema APP_XXX FORM-TASK > .cache/task-schema.json 2>&1
13
- # 从 schema.json 中提取字段信息:
12
+ openyida get-schema APP_XXX FORM-TASK
13
+ # 从 stdout 中提取字段信息,并用结构化文件写入工具更新 <projectRoot>/.cache/<项目名>-schema.json
14
14
  # 任务名称:textField_taskName(STRING)
15
15
  # 优先级:selectField_priority(STRING,需加 _value 后缀)
16
16
  # 状态:selectField_status(STRING,需加 _value 后缀)
@@ -18,7 +18,7 @@ openyida get-schema APP_XXX FORM-TASK > .cache/task-schema.json 2>&1
18
18
  # 负责人:employeeField_owner(STRING,需加 _value 后缀)
19
19
  ```
20
20
 
21
- ### 创建报表配置文件 `.cache/openyida/reports/task-report-config.json`
21
+ ### 使用结构化文件写入工具创建报表配置文件 `<projectRoot>/.cache/openyida/task-report/task-report-config.json`
22
22
 
23
23
  ```json
24
24
  {
@@ -95,7 +95,7 @@ openyida get-schema APP_XXX FORM-TASK > .cache/task-schema.json 2>&1
95
95
  ### 执行命令
96
96
 
97
97
  ```bash
98
- openyida create-report APP_XXX "任务管理数据报表" .cache/openyida/reports/task-report-config.json
98
+ openyida create-report APP_XXX "任务管理数据报表" .cache/openyida/task-report/task-report-config.json
99
99
  ```
100
100
 
101
101
  ### 输出
@@ -9,8 +9,8 @@ HR 需要批量录入新员工信息到宜搭表单,支持手动逐行填写
9
9
  ### 前置步骤:获取表单字段 ID
10
10
 
11
11
  ```bash
12
- openyida get-schema APP_XXX FORM-EMPLOYEE > .cache/employee-schema.json 2>&1
13
- # 从 schema.json 中提取字段 ID:
12
+ openyida get-schema APP_XXX FORM-EMPLOYEE
13
+ # 从 stdout 中提取字段 ID,并用结构化文件写入工具更新 <projectRoot>/.cache/<项目名>-schema.json
14
14
  # 姓名:textField_name
15
15
  # 部门:selectField_dept
16
16
  # 入职日期:dateField_joinDate