@gt-fe/eap-cli 0.2.20 → 0.2.21
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 +304 -304
- package/dist/templates/README.md +51 -51
- package/dist/templates/agent-api-orchestration/README.md +326 -326
- package/dist/templates/agent-api-orchestration/eap.config.json +1 -1
- package/dist/templates/agent-api-orchestration/graph.json +35 -35
- package/dist/templates/agent-api-orchestration/package.json +1 -1
- package/dist/templates/dag-workflow/README.md +102 -102
- package/dist/templates/dag-workflow/agent.manifest.json +19 -19
- package/dist/templates/dag-workflow/eap.config.json +1 -1
- package/dist/templates/dag-workflow/gitignore +51 -51
- package/dist/templates/dag-workflow/graph.json +51 -51
- package/dist/templates/dag-workflow/skills/README.md +116 -116
- package/dist/templates/plan-and-execute/README.md +109 -109
- package/dist/templates/plan-and-execute/agent.manifest.json +19 -19
- package/dist/templates/plan-and-execute/eap.config.json +1 -1
- package/dist/templates/plan-and-execute/eap.lock.yaml +5 -5
- package/dist/templates/plan-and-execute/gitignore +51 -51
- package/dist/templates/plan-and-execute/graph.json +49 -49
- package/dist/templates/plan-and-execute/skills/README.md +120 -120
- package/dist/templates/simple-flow/README.md +87 -87
- package/dist/templates/simple-flow/agent.manifest.json +19 -19
- package/dist/templates/simple-flow/eap.config.json +1 -1
- package/dist/templates/simple-flow/gitignore +51 -51
- package/dist/templates/simple-flow/graph.json +32 -32
- package/dist/templates/simple-flow/package.json +10 -10
- package/dist/templates/simple-flow/skills/README.md +113 -113
- package/dist/templates/single-agent-with-tools/README.md +138 -138
- package/dist/templates/single-agent-with-tools/agent.manifest.json +19 -19
- package/dist/templates/single-agent-with-tools/eap.config.json +1 -1
- package/dist/templates/single-agent-with-tools/eap.lock.yaml +5 -5
- package/dist/templates/single-agent-with-tools/gitignore +51 -51
- package/dist/templates/single-agent-with-tools/graph.json +41 -41
- package/dist/templates/single-agent-with-tools/skills/README.md +119 -119
- package/dist/templates/single-agent-with-tools/tools/http-weather/toolset.manifest.json +73 -73
- package/dist/templates/single-agent-with-tools/tools/web-search/toolset.manifest.json +41 -41
- package/package.json +2 -2
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
# OS files
|
|
2
|
-
.DS_Store
|
|
3
|
-
Thumbs.db
|
|
4
|
-
Desktop.ini
|
|
5
|
-
|
|
6
|
-
# Editor and IDE files
|
|
7
|
-
.idea/
|
|
8
|
-
.vscode/
|
|
9
|
-
*.swp
|
|
10
|
-
*.swo
|
|
11
|
-
|
|
12
|
-
# Dependencies
|
|
13
|
-
node_modules/
|
|
14
|
-
.pnpm-store/
|
|
15
|
-
|
|
16
|
-
# Lock files
|
|
17
|
-
package-lock.json
|
|
18
|
-
|
|
19
|
-
# Build outputs
|
|
20
|
-
dist/
|
|
21
|
-
build/
|
|
22
|
-
out/
|
|
23
|
-
.output/
|
|
24
|
-
.history
|
|
25
|
-
|
|
26
|
-
# Logs
|
|
27
|
-
*.log
|
|
28
|
-
npm-debug.log*
|
|
29
|
-
yarn-debug.log*
|
|
30
|
-
yarn-error.log*
|
|
31
|
-
pnpm-debug.log*
|
|
32
|
-
|
|
33
|
-
# Test coverage
|
|
34
|
-
coverage/
|
|
35
|
-
|
|
36
|
-
# Turbo
|
|
37
|
-
.turbo/
|
|
38
|
-
|
|
39
|
-
# Environment
|
|
40
|
-
.env
|
|
41
|
-
.env.local
|
|
42
|
-
.env.*.local
|
|
43
|
-
|
|
44
|
-
# Temporary files
|
|
45
|
-
tmp/
|
|
46
|
-
temp/
|
|
47
|
-
.cache/
|
|
48
|
-
.run/
|
|
49
|
-
|
|
50
|
-
# Generated Agent state
|
|
51
|
-
.eap/
|
|
1
|
+
# OS files
|
|
2
|
+
.DS_Store
|
|
3
|
+
Thumbs.db
|
|
4
|
+
Desktop.ini
|
|
5
|
+
|
|
6
|
+
# Editor and IDE files
|
|
7
|
+
.idea/
|
|
8
|
+
.vscode/
|
|
9
|
+
*.swp
|
|
10
|
+
*.swo
|
|
11
|
+
|
|
12
|
+
# Dependencies
|
|
13
|
+
node_modules/
|
|
14
|
+
.pnpm-store/
|
|
15
|
+
|
|
16
|
+
# Lock files
|
|
17
|
+
package-lock.json
|
|
18
|
+
|
|
19
|
+
# Build outputs
|
|
20
|
+
dist/
|
|
21
|
+
build/
|
|
22
|
+
out/
|
|
23
|
+
.output/
|
|
24
|
+
.history
|
|
25
|
+
|
|
26
|
+
# Logs
|
|
27
|
+
*.log
|
|
28
|
+
npm-debug.log*
|
|
29
|
+
yarn-debug.log*
|
|
30
|
+
yarn-error.log*
|
|
31
|
+
pnpm-debug.log*
|
|
32
|
+
|
|
33
|
+
# Test coverage
|
|
34
|
+
coverage/
|
|
35
|
+
|
|
36
|
+
# Turbo
|
|
37
|
+
.turbo/
|
|
38
|
+
|
|
39
|
+
# Environment
|
|
40
|
+
.env
|
|
41
|
+
.env.local
|
|
42
|
+
.env.*.local
|
|
43
|
+
|
|
44
|
+
# Temporary files
|
|
45
|
+
tmp/
|
|
46
|
+
temp/
|
|
47
|
+
.cache/
|
|
48
|
+
.run/
|
|
49
|
+
|
|
50
|
+
# Generated Agent state
|
|
51
|
+
.eap/
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
{
|
|
2
|
-
"description": "固定顺序:code 整理输入后一次 LLM,无工具循环。",
|
|
3
|
-
"nodes": [
|
|
4
|
-
{
|
|
5
|
-
"id": "normalize",
|
|
6
|
-
"type": "code",
|
|
7
|
-
"config": {
|
|
8
|
-
"timeoutMs": 1000,
|
|
9
|
-
"code": "const msgs = Array.isArray(state.messages) ? state.messages : [];\nlet text = '';\nfor (let i = msgs.length - 1; i >= 0; i--) {\n if (msgs[i] && msgs[i].role === 'user') { text = String(msgs[i].content || ''); break; }\n}\nreturn { step: 'normalize', text: String(text).replace(/\\s+/g, ' ').trim() };"
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"id": "respond",
|
|
14
|
-
"type": "llm",
|
|
15
|
-
"config": {
|
|
16
|
-
"disableTools": true,
|
|
17
|
-
"systemPrompt": "根据最新用户消息和整理后的文本用中文回复。不要调用工具。"
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
"edges": [
|
|
22
|
-
{ "from": "__start__", "to": "normalize" },
|
|
23
|
-
{ "from": "normalize", "to": "respond" },
|
|
24
|
-
{ "from": "respond", "to": "__end__" }
|
|
25
|
-
],
|
|
26
|
-
"entryPoint": "normalize",
|
|
27
|
-
"finishPoints": ["respond"],
|
|
28
|
-
"config": {
|
|
29
|
-
"maxRetries": 3,
|
|
30
|
-
"checkpointStore": "memory"
|
|
31
|
-
}
|
|
32
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"description": "固定顺序:code 整理输入后一次 LLM,无工具循环。",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"id": "normalize",
|
|
6
|
+
"type": "code",
|
|
7
|
+
"config": {
|
|
8
|
+
"timeoutMs": 1000,
|
|
9
|
+
"code": "const msgs = Array.isArray(state.messages) ? state.messages : [];\nlet text = '';\nfor (let i = msgs.length - 1; i >= 0; i--) {\n if (msgs[i] && msgs[i].role === 'user') { text = String(msgs[i].content || ''); break; }\n}\nreturn { step: 'normalize', text: String(text).replace(/\\s+/g, ' ').trim() };"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "respond",
|
|
14
|
+
"type": "llm",
|
|
15
|
+
"config": {
|
|
16
|
+
"disableTools": true,
|
|
17
|
+
"systemPrompt": "根据最新用户消息和整理后的文本用中文回复。不要调用工具。"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"edges": [
|
|
22
|
+
{ "from": "__start__", "to": "normalize" },
|
|
23
|
+
{ "from": "normalize", "to": "respond" },
|
|
24
|
+
{ "from": "respond", "to": "__end__" }
|
|
25
|
+
],
|
|
26
|
+
"entryPoint": "normalize",
|
|
27
|
+
"finishPoints": ["respond"],
|
|
28
|
+
"config": {
|
|
29
|
+
"maxRetries": 3,
|
|
30
|
+
"checkpointStore": "memory"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "simple-flow-agent",
|
|
3
|
-
"description": "Fixed sequential Agent: one code step then one LLM, no tool loop",
|
|
4
|
-
"version": "1.0.0",
|
|
5
|
-
"private": true,
|
|
6
|
-
"scripts": {
|
|
7
|
-
"validate": "eap validate --strict",
|
|
8
|
-
"package": "eap package"
|
|
9
|
-
}
|
|
10
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "simple-flow-agent",
|
|
3
|
+
"description": "Fixed sequential Agent: one code step then one LLM, no tool loop",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"private": true,
|
|
6
|
+
"scripts": {
|
|
7
|
+
"validate": "eap validate --strict",
|
|
8
|
+
"package": "eap package"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
# 装配与执行 Skill
|
|
2
|
-
|
|
3
|
-
四种执行模式都可以装配 Skill,但装配与执行是两个步骤。
|
|
4
|
-
|
|
5
|
-
## 普通 SKILL.md 目录
|
|
6
|
-
|
|
7
|
-
1. 把含 `SKILL.md` 的目录放到 `skills/<name>/`,可同时包含 `scripts/`、`references/`。文件夹名与 frontmatter 的 `name` 保持一致;不要嵌套版本目录。
|
|
8
|
-
2. 在根级 `agent.manifest.json` 的 `skillRefs` 中追加 `{ "code": "<name>", "version": "1.0.0" }`,保留已有引用。本地版本来自 `SKILL.md` frontmatter,省略时为 `1.0.0`。
|
|
9
|
-
3. 确认 `eap.config.json` 的 `localSkillDirectories` 包含 `"./skills"`,重启本地运行以重新物化资源。
|
|
10
|
-
|
|
11
|
-
这种装配只需要 `SKILL.md`,无需额外 JSON 清单。可调用工具的 LLM 会获得 Skill 目录信息,通过 `read_file` 阅读正文、通过 `execute_command` 执行脚本。`disableTools: true` 的节点不能这样读取或执行 Skill。模型按文档使用脚本,不等于 Runtime 执行结构化 workflow。
|
|
12
|
-
|
|
13
|
-
## 作为子图执行的完整最小样例
|
|
14
|
-
|
|
15
|
-
本例创建 `request-summary`,由一个 code 节点整理用户请求,输出以“需求记录:”开头的助手消息。须设 `emitReply: true`,否则 `reply` 只出现在 tool 结果 JSON 里。不调用外部工具。
|
|
16
|
-
|
|
17
|
-
```text
|
|
18
|
-
skills/
|
|
19
|
-
request-summary/
|
|
20
|
-
SKILL.md
|
|
21
|
-
skill.manifest.json
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
创建 `skills/request-summary/SKILL.md`:
|
|
25
|
-
|
|
26
|
-
```markdown
|
|
27
|
-
---
|
|
28
|
-
name: request-summary
|
|
29
|
-
description: 整理用户原始请求,生成需求记录。
|
|
30
|
-
version: 1.0.0
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
把用户请求中的连续空白整理成一个空格,输出需求记录。
|
|
34
|
-
结构化执行入口在同目录 skill.manifest.json 的 workflow 字段中。
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
创建 `skills/request-summary/skill.manifest.json`:
|
|
38
|
-
|
|
39
|
-
```json
|
|
40
|
-
{
|
|
41
|
-
"code": "request-summary",
|
|
42
|
-
"name": "request-summary",
|
|
43
|
-
"version": "1.0.0",
|
|
44
|
-
"workflow": {
|
|
45
|
-
"nodes": [
|
|
46
|
-
{
|
|
47
|
-
"id": "record-request",
|
|
48
|
-
"type": "code",
|
|
49
|
-
"config": {
|
|
50
|
-
"timeoutMs": 1000,
|
|
51
|
-
"emitReply": true,
|
|
52
|
-
"code": "const messages = Array.isArray(state.messages) ? state.messages : []; let input = ''; for (let i = messages.length - 1; i >= 0; i--) { if (messages[i].role === 'user') { input = String(messages[i].content || ''); break; } } return { reply: '需求记录:' + input.replace(/\\s+/g, ' ').trim() };"
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
],
|
|
56
|
-
"edges": [
|
|
57
|
-
{
|
|
58
|
-
"from": "__start__",
|
|
59
|
-
"to": "record-request"
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
"from": "record-request",
|
|
63
|
-
"to": "__end__"
|
|
64
|
-
}
|
|
65
|
-
],
|
|
66
|
-
"entryPoint": "record-request",
|
|
67
|
-
"finishPoints": [
|
|
68
|
-
"__end__"
|
|
69
|
-
]
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
在 Agent 的 `skillRefs` 中追加:
|
|
75
|
-
|
|
76
|
-
```json
|
|
77
|
-
{ "code": "request-summary", "version": "1.0.0" }
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
这里的 `skill.manifest.json` 为子图提供结构化定义。当前 Runtime 从该清单的 `workflow`(也支持 `graph` / `definitionSnapshot`)读取图对象,**不会自动读取 Skill 目录中的独立 `graph.json`,也不会把 SKILL.md 的自然语言步骤编译成图**。
|
|
81
|
-
|
|
82
|
-
父图的节点必须绑定该 Skill:
|
|
83
|
-
|
|
84
|
-
```json
|
|
85
|
-
{
|
|
86
|
-
"id": "run-skill",
|
|
87
|
-
"type": "subgraph",
|
|
88
|
-
"config": { "skillCode": "request-summary" }
|
|
89
|
-
}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
`skillCode` 必须与 `skillRefs[].code` 一致;不能只填写 `type: subgraph`。节点还需接入实际控制流,见下面的模板接法。
|
|
93
|
-
|
|
94
|
-
## 接到 Simple Flow
|
|
95
|
-
|
|
96
|
-
保留 `normalize`、`respond`,在 `nodes` 中加入上面的 `run-skill`。将 `normalize → respond` 替换为以下两条边,其余边与入口、结束配置保持原样:
|
|
97
|
-
|
|
98
|
-
```json
|
|
99
|
-
[
|
|
100
|
-
{ "from": "normalize", "to": "run-skill" },
|
|
101
|
-
{ "from": "run-skill", "to": "respond" }
|
|
102
|
-
]
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
完整顺序为 `__start__ → normalize → run-skill → respond → __end__`。`respond` 保持 `disableTools: true`;Skill 由固定边触发,结果进入后续 LLM 的上下文。只加 `skillRefs` 而不改图,不会执行子图。
|
|
106
|
-
|
|
107
|
-
## 检查结果
|
|
108
|
-
|
|
109
|
-
改完文件后先执行 `eap validate`,再重启 `eap chat` / `eap dev`,输入“用户登录后导出月报”。应能看到 `request-summary` 的执行记录,以及“需求记录:用户登录后导出月报”的结果被后续步骤使用。
|
|
110
|
-
|
|
111
|
-
`eap validate` 能检查父图引用和连边,但通过校验不代表已验证 Skill workflow 的运行行为。若报“子图节点无法解析 Skill workflow”,检查清单中的 `workflow.nodes` 是否非空、`skillCode` 是否匹配、是否已重新物化资源。
|
|
112
|
-
|
|
113
|
-
示例是本地开发资源。上线前按平台要求登记、锁定和发布 Skill 及其依赖。
|
|
1
|
+
# 装配与执行 Skill
|
|
2
|
+
|
|
3
|
+
四种执行模式都可以装配 Skill,但装配与执行是两个步骤。
|
|
4
|
+
|
|
5
|
+
## 普通 SKILL.md 目录
|
|
6
|
+
|
|
7
|
+
1. 把含 `SKILL.md` 的目录放到 `skills/<name>/`,可同时包含 `scripts/`、`references/`。文件夹名与 frontmatter 的 `name` 保持一致;不要嵌套版本目录。
|
|
8
|
+
2. 在根级 `agent.manifest.json` 的 `skillRefs` 中追加 `{ "code": "<name>", "version": "1.0.0" }`,保留已有引用。本地版本来自 `SKILL.md` frontmatter,省略时为 `1.0.0`。
|
|
9
|
+
3. 确认 `eap.config.json` 的 `localSkillDirectories` 包含 `"./skills"`,重启本地运行以重新物化资源。
|
|
10
|
+
|
|
11
|
+
这种装配只需要 `SKILL.md`,无需额外 JSON 清单。可调用工具的 LLM 会获得 Skill 目录信息,通过 `read_file` 阅读正文、通过 `execute_command` 执行脚本。`disableTools: true` 的节点不能这样读取或执行 Skill。模型按文档使用脚本,不等于 Runtime 执行结构化 workflow。
|
|
12
|
+
|
|
13
|
+
## 作为子图执行的完整最小样例
|
|
14
|
+
|
|
15
|
+
本例创建 `request-summary`,由一个 code 节点整理用户请求,输出以“需求记录:”开头的助手消息。须设 `emitReply: true`,否则 `reply` 只出现在 tool 结果 JSON 里。不调用外部工具。
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
skills/
|
|
19
|
+
request-summary/
|
|
20
|
+
SKILL.md
|
|
21
|
+
skill.manifest.json
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
创建 `skills/request-summary/SKILL.md`:
|
|
25
|
+
|
|
26
|
+
```markdown
|
|
27
|
+
---
|
|
28
|
+
name: request-summary
|
|
29
|
+
description: 整理用户原始请求,生成需求记录。
|
|
30
|
+
version: 1.0.0
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
把用户请求中的连续空白整理成一个空格,输出需求记录。
|
|
34
|
+
结构化执行入口在同目录 skill.manifest.json 的 workflow 字段中。
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
创建 `skills/request-summary/skill.manifest.json`:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"code": "request-summary",
|
|
42
|
+
"name": "request-summary",
|
|
43
|
+
"version": "1.0.0",
|
|
44
|
+
"workflow": {
|
|
45
|
+
"nodes": [
|
|
46
|
+
{
|
|
47
|
+
"id": "record-request",
|
|
48
|
+
"type": "code",
|
|
49
|
+
"config": {
|
|
50
|
+
"timeoutMs": 1000,
|
|
51
|
+
"emitReply": true,
|
|
52
|
+
"code": "const messages = Array.isArray(state.messages) ? state.messages : []; let input = ''; for (let i = messages.length - 1; i >= 0; i--) { if (messages[i].role === 'user') { input = String(messages[i].content || ''); break; } } return { reply: '需求记录:' + input.replace(/\\s+/g, ' ').trim() };"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"edges": [
|
|
57
|
+
{
|
|
58
|
+
"from": "__start__",
|
|
59
|
+
"to": "record-request"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"from": "record-request",
|
|
63
|
+
"to": "__end__"
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"entryPoint": "record-request",
|
|
67
|
+
"finishPoints": [
|
|
68
|
+
"__end__"
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
在 Agent 的 `skillRefs` 中追加:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{ "code": "request-summary", "version": "1.0.0" }
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
这里的 `skill.manifest.json` 为子图提供结构化定义。当前 Runtime 从该清单的 `workflow`(也支持 `graph` / `definitionSnapshot`)读取图对象,**不会自动读取 Skill 目录中的独立 `graph.json`,也不会把 SKILL.md 的自然语言步骤编译成图**。
|
|
81
|
+
|
|
82
|
+
父图的节点必须绑定该 Skill:
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"id": "run-skill",
|
|
87
|
+
"type": "subgraph",
|
|
88
|
+
"config": { "skillCode": "request-summary" }
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`skillCode` 必须与 `skillRefs[].code` 一致;不能只填写 `type: subgraph`。节点还需接入实际控制流,见下面的模板接法。
|
|
93
|
+
|
|
94
|
+
## 接到 Simple Flow
|
|
95
|
+
|
|
96
|
+
保留 `normalize`、`respond`,在 `nodes` 中加入上面的 `run-skill`。将 `normalize → respond` 替换为以下两条边,其余边与入口、结束配置保持原样:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
[
|
|
100
|
+
{ "from": "normalize", "to": "run-skill" },
|
|
101
|
+
{ "from": "run-skill", "to": "respond" }
|
|
102
|
+
]
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
完整顺序为 `__start__ → normalize → run-skill → respond → __end__`。`respond` 保持 `disableTools: true`;Skill 由固定边触发,结果进入后续 LLM 的上下文。只加 `skillRefs` 而不改图,不会执行子图。
|
|
106
|
+
|
|
107
|
+
## 检查结果
|
|
108
|
+
|
|
109
|
+
改完文件后先执行 `eap validate`,再重启 `eap chat` / `eap dev`,输入“用户登录后导出月报”。应能看到 `request-summary` 的执行记录,以及“需求记录:用户登录后导出月报”的结果被后续步骤使用。
|
|
110
|
+
|
|
111
|
+
`eap validate` 能检查父图引用和连边,但通过校验不代表已验证 Skill workflow 的运行行为。若报“子图节点无法解析 Skill workflow”,检查清单中的 `workflow.nodes` 是否非空、`skillCode` 是否匹配、是否已重新物化资源。
|
|
112
|
+
|
|
113
|
+
示例是本地开发资源。上线前按平台要求登记、锁定和发布 Skill 及其依赖。
|