@gt-fe/eap-cli 0.2.2 → 0.2.4
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/dist/commands/create.js +1 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/templates/README.md +1 -1
- package/dist/templates/agent-api-orchestration/.env +16 -0
- package/dist/templates/agent-api-orchestration/README.md +0 -1
- package/dist/templates/agent-api-orchestration/agent.manifest.json +1 -1
- package/dist/templates/agent-api-orchestration/eap.config.json +4 -4
- package/dist/templates/agent-api-orchestration/gitignore +0 -3
- package/dist/templates/agent-api-orchestration/graph.json +3 -18
- package/dist/templates/agent-api-orchestration/package.json +3 -3
- package/dist/templates/agent-api-orchestration/scripts/api-test.mjs +443 -0
- package/dist/templates/agent-api-orchestration/scripts/build-runtime.mjs +2 -4
- package/dist/templates/agent-api-orchestration/src/embedded-agent.ts +18 -6
- package/dist/templates/agent-api-orchestration/src/index.ts +2 -9
- package/dist/templates/dag-workflow/eap.config.json +1 -1
- package/dist/templates/plan-and-execute/eap.config.json +1 -1
- package/dist/templates/simple-flow/eap.config.json +1 -1
- package/dist/templates/single-agent-with-tools/agent.manifest.json +1 -4
- package/dist/templates/single-agent-with-tools/eap.config.json +1 -1
- package/dist/templates/single-agent-with-tools/eap.lock.yaml +1 -9
- package/package.json +2 -2
- package/dist/templates/agent-api-orchestration/.env.local.example +0 -17
- package/dist/templates/agent-api-orchestration/.env.production.example +0 -18
package/dist/commands/create.js
CHANGED
|
@@ -210,7 +210,7 @@ export const createCommand = new Command('create')
|
|
|
210
210
|
if (answers.templateName === 'agent-api-orchestration') {
|
|
211
211
|
box('项目已就绪!', [
|
|
212
212
|
`cd ${answers.dir}`,
|
|
213
|
-
'
|
|
213
|
+
'按需在 .env 填写 OPENAI_API_KEY / EAP_SDK_TOKEN',
|
|
214
214
|
'npm run dev',
|
|
215
215
|
'npm run build && npm start',
|
|
216
216
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
package/dist/templates/README.md
CHANGED
|
@@ -44,7 +44,7 @@ eap create my-agent --template single-agent-with-tools --dir ./my-agent
|
|
|
44
44
|
cd my-agent
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
生成工程内的 README 从配置写起:把 `eap.config.json` 的 `sk-example-token` 换成有效 Token、`eap validate`、`eap chat`。不要求 `eap login`。常规模板的 `platform.foundationServiceUrl` 默认指向测试环境 Foundation(登录/发布用)。本地 `eap chat` 因 `runtime.llm` 会设 `EAP_LLM_MODE=local`,不走 Foundation 模型路由;纯本地可把该字段改为 `null`。`agent-api-orchestration` 使用 `.env
|
|
47
|
+
生成工程内的 README 从配置写起:把 `eap.config.json` 的 `sk-example-token` 换成有效 Token、`eap validate`、`eap chat`。不要求 `eap login`。常规模板的 `platform.foundationServiceUrl` 默认指向测试环境 Foundation(登录/发布用)。本地 `eap chat` 因 `runtime.llm` 会设 `EAP_LLM_MODE=local`,不走 Foundation 模型路由;纯本地可把该字段改为 `null`。`agent-api-orchestration` 使用 `.env`,通过 `npm run dev` 运行演示服务;生产构建使用 `npm run build`,宿主从 `dist/embedded-agent.js` 调用 `createEmbeddedAgent({ credentialProvider })` 显式注入凭证。其 `runtime.llm.models` 与另外四个模板同一形态,密钥用 `${OPENAI_API_KEY}` 指向网关,不要只写顶层 `runtime.llm.baseUrl`。模板默认使用 Runtime `dev` 文件存储,不接入数据库。本仓库 CLI 通过 workspace 使用仓库根目录 `runtime/`(包名 `@gt-fe/eap-runtime`),不要用过期的 npm `0.0.15`。
|
|
48
48
|
|
|
49
49
|
各模板 README 均说明:模型密钥写在 `eap.config.json` 的 `runtime.llm.models.*.apiKey`;生产模型密钥由 Foundation 路由持有;UCS「配置项与密钥」中配置项只存放非敏感值。`single-agent-with-tools` 默认装配 `echo-tool` 与 `http-weather`(Open-Meteo,无需 Key)。`web-search` 仍为未装配示例,启用后才需要 `${EXA_API_KEY}`。问数数据集等企业工具仅放在 `fixtures/chatAgent/`,不进入 `eap create`。`--type tool` 已拒绝;Tool 登记走 developer-portal。
|
|
50
50
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# 演示模板统一环境变量(npm run dev / npm run build / npm start)。
|
|
2
|
+
#
|
|
3
|
+
# EAP_RUNTIME_ROOT 是相对后缀:dev 以项目根为基准物化到 .eap/runtime,
|
|
4
|
+
# 生产构建以 dist 为基准物化到 dist/.eap/runtime,由 scripts/build-runtime.mjs 的 --dev 决定。
|
|
5
|
+
EAP_RUNTIME_ROOT=.eap/runtime
|
|
6
|
+
|
|
7
|
+
# 本地演示 Token 回退;生产宿主应改用 createEmbeddedAgent({ credentialProvider }) 显式注入。
|
|
8
|
+
EAP_SDK_TOKEN=replace-with-external-sdk-token
|
|
9
|
+
|
|
10
|
+
# HTTP 服务监听。生产建议由反向代理负责 TLS、限流与请求日志脱敏,
|
|
11
|
+
# 并按需改为 EAP_HTTP_HOST=0.0.0.0 / 线上 CORS 源。
|
|
12
|
+
EAP_HTTP_HOST=127.0.0.1
|
|
13
|
+
EAP_HTTP_PORT=3000
|
|
14
|
+
EAP_HTTP_CORS_ORIGIN=http://localhost:5173
|
|
15
|
+
# 单次 JSON 请求体上限(字节)。
|
|
16
|
+
EAP_HTTP_MAX_BODY_BYTES=1048576
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.2.
|
|
2
|
+
"version": "0.2.4",
|
|
3
3
|
"localToolDirectories": [
|
|
4
4
|
"./tools"
|
|
5
5
|
],
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"./skills"
|
|
8
8
|
],
|
|
9
9
|
"platform": {
|
|
10
|
-
"foundationServiceUrl":
|
|
10
|
+
"foundationServiceUrl": "https://eap-foundation-test.gtcloud.cn",
|
|
11
11
|
"portalUrl": "https://developer-portal-test.gtcloud.cn"
|
|
12
12
|
},
|
|
13
13
|
"runtime": {
|
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
"models": {
|
|
29
29
|
"DeepSeek-V4-Pro": {
|
|
30
30
|
"baseUrl": "https://gtaiapi.gtcloud.cn/v1",
|
|
31
|
-
"apiKey": "
|
|
31
|
+
"apiKey": "sk-example-token"
|
|
32
32
|
},
|
|
33
33
|
"DeepSeek-V4-Flash": {
|
|
34
34
|
"baseUrl": "https://gtaiapi.gtcloud.cn/v1",
|
|
35
|
-
"apiKey": "
|
|
35
|
+
"apiKey": "sk-example-token"
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -5,36 +5,21 @@
|
|
|
5
5
|
"response": "string"
|
|
6
6
|
},
|
|
7
7
|
"nodes": [
|
|
8
|
-
{
|
|
9
|
-
"id": "rag",
|
|
10
|
-
"type": "rag",
|
|
11
|
-
"config": {
|
|
12
|
-
"model": "DeepSeek-V4-Pro",
|
|
13
|
-
"totalK": 10,
|
|
14
|
-
"maxIterations": 5,
|
|
15
|
-
"retrievalSources": {
|
|
16
|
-
"sources": [
|
|
17
|
-
{ "type": "local-file", "id": "共享资料", "source": "./docs" }
|
|
18
|
-
]
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
8
|
{
|
|
23
9
|
"id": "respond",
|
|
24
10
|
"type": "llm",
|
|
25
11
|
"config": {
|
|
26
12
|
"model": "DeepSeek-V4-Pro",
|
|
27
13
|
"disableTools": true,
|
|
28
|
-
"systemPrompt": "
|
|
14
|
+
"systemPrompt": "你是企业知识与数据问答助手,请根据用户的问题直接回答。"
|
|
29
15
|
}
|
|
30
16
|
}
|
|
31
17
|
],
|
|
32
18
|
"edges": [
|
|
33
|
-
{ "from": "__start__", "to": "
|
|
34
|
-
{ "from": "rag", "to": "respond" },
|
|
19
|
+
{ "from": "__start__", "to": "respond" },
|
|
35
20
|
{ "from": "respond", "to": "__end__" }
|
|
36
21
|
],
|
|
37
|
-
"entryPoint": "
|
|
22
|
+
"entryPoint": "respond",
|
|
38
23
|
"finishPoints": ["__end__"],
|
|
39
24
|
"config": {
|
|
40
25
|
"maxIterations": 50,
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"type": "module",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"validate": "node scripts/validate.mjs",
|
|
9
|
-
"build:js": "esbuild src/index.ts src/platform-user.ts src/embedded-agent.ts --bundle --platform=node --format=esm --target=node18 --outdir=dist --sourcemap",
|
|
9
|
+
"build:js": "esbuild src/index.ts src/platform-user.ts src/embedded-agent.ts --bundle --platform=node --format=esm --target=node18 --outdir=dist --sourcemap --packages=external",
|
|
10
10
|
"build:runtime": "node scripts/build-runtime.mjs",
|
|
11
11
|
"build": "npm run validate && npm run build:runtime && npm run build:js",
|
|
12
12
|
"dev": "node scripts/build-runtime.mjs --dev && tsx src/index.ts --dev",
|
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
"type-check": "tsc --noEmit"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@gt-fe/eap-sdk": "^0.2.
|
|
17
|
+
"@gt-fe/eap-sdk": "^0.2.4",
|
|
18
18
|
"dotenv": "^17.2.2",
|
|
19
19
|
"express": "^4.21.2"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/express": "^4.17.21",
|
|
23
23
|
"@types/node": "^22.0.0",
|
|
24
|
-
"esbuild": "^0.
|
|
24
|
+
"esbuild": "^0.28.2",
|
|
25
25
|
"tsx": "^4.19.2",
|
|
26
26
|
"typescript": "^5.5.0"
|
|
27
27
|
},
|
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent API 接口测试脚本(可直接运行)
|
|
3
|
+
*
|
|
4
|
+
* 用法:
|
|
5
|
+
* node scripts/api-test.mjs
|
|
6
|
+
*
|
|
7
|
+
* 可选环境变量:
|
|
8
|
+
* BASE_URL 服务地址,默认 http://127.0.0.1:3000
|
|
9
|
+
* AGENT_CODE Agent code,默认 agent-test
|
|
10
|
+
* TEST_MESSAGE 发送给 Agent 的测试消息,默认“你好,请用一句话介绍你自己”
|
|
11
|
+
*
|
|
12
|
+
* 会依次覆盖:健康检查、能力发现、会话增查、消息发送(同步调用)、
|
|
13
|
+
* 历史消息查询、无会话同步调用、流式对话、归档、恢复(预期 501)。
|
|
14
|
+
* 每个用例独立 try/catch,失败不中断后续用例,最后打印汇总。
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const BASE_URL = (process.env.BASE_URL || "http://127.0.0.1:3000").replace(
|
|
18
|
+
/\/+$/,
|
|
19
|
+
"",
|
|
20
|
+
);
|
|
21
|
+
const AGENT_CODE = process.env.AGENT_CODE || "agent-test";
|
|
22
|
+
const TEST_MESSAGE = process.env.TEST_MESSAGE || "你好,请用一句话介绍你自己";
|
|
23
|
+
|
|
24
|
+
const api = (path) => `${BASE_URL}/api/v1/agents/${AGENT_CODE}${path}`;
|
|
25
|
+
|
|
26
|
+
let step = 0;
|
|
27
|
+
let passed = 0;
|
|
28
|
+
let failed = 0;
|
|
29
|
+
const failures = [];
|
|
30
|
+
|
|
31
|
+
// ---------- 工具函数 ----------
|
|
32
|
+
|
|
33
|
+
function header(title) {
|
|
34
|
+
console.log("\n" + "═".repeat(70));
|
|
35
|
+
console.log(` ${title}`);
|
|
36
|
+
console.log("═".repeat(70));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function log(label, value) {
|
|
40
|
+
console.log(` ▶ ${label}`);
|
|
41
|
+
if (value !== undefined) console.log(pretty(value, 2));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function ok(msg) {
|
|
45
|
+
passed += 1;
|
|
46
|
+
console.log(` ✅ [PASS] ${msg}`);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function fail(msg, detail) {
|
|
50
|
+
failed += 1;
|
|
51
|
+
failures.push({ msg, detail });
|
|
52
|
+
console.log(` ❌ [FAIL] ${msg}`);
|
|
53
|
+
if (detail !== undefined) console.log(pretty(detail, 2));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function pretty(value, indent = 0) {
|
|
57
|
+
const text =
|
|
58
|
+
typeof value === "string" ? value : JSON.stringify(value, null, indent);
|
|
59
|
+
const lines = text.split("\n");
|
|
60
|
+
const head = lines.slice(0, 40);
|
|
61
|
+
let out = " " + head.join("\n ");
|
|
62
|
+
if (lines.length > 40) out += `\n ... (共 ${lines.length} 行,已截断)`;
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function truncate(value, max = 800) {
|
|
67
|
+
const text =
|
|
68
|
+
value == null
|
|
69
|
+
? ""
|
|
70
|
+
: typeof value === "string"
|
|
71
|
+
? value
|
|
72
|
+
: JSON.stringify(value);
|
|
73
|
+
return text.length > max
|
|
74
|
+
? text.slice(0, max) + `... (共 ${text.length} 字符)`
|
|
75
|
+
: text;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async function request(
|
|
79
|
+
method,
|
|
80
|
+
url,
|
|
81
|
+
{ body, headers = {}, timeout = 30000 } = {},
|
|
82
|
+
) {
|
|
83
|
+
const controller = new AbortController();
|
|
84
|
+
const timer = setTimeout(() => controller.abort(), timeout);
|
|
85
|
+
try {
|
|
86
|
+
const response = await fetch(url, {
|
|
87
|
+
method,
|
|
88
|
+
headers: { "Content-Type": "application/json", ...headers },
|
|
89
|
+
...(body !== undefined ? { body: JSON.stringify(body) } : {}),
|
|
90
|
+
signal: controller.signal,
|
|
91
|
+
});
|
|
92
|
+
const text = await response.text();
|
|
93
|
+
let data;
|
|
94
|
+
try {
|
|
95
|
+
data = text ? JSON.parse(text) : null;
|
|
96
|
+
} catch {
|
|
97
|
+
data = text;
|
|
98
|
+
}
|
|
99
|
+
return { status: response.status, data, ok: response.ok };
|
|
100
|
+
} catch (error) {
|
|
101
|
+
const message =
|
|
102
|
+
error?.name === "AbortError"
|
|
103
|
+
? `请求超时(${timeout}ms)`
|
|
104
|
+
: (error?.message ?? String(error));
|
|
105
|
+
return { status: 0, data: null, ok: false, error: message };
|
|
106
|
+
} finally {
|
|
107
|
+
clearTimeout(timer);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** 消费 SSE 流,返回 [{ event, data }],data 已解析为 JSON。 */
|
|
112
|
+
async function consumeSse(url, { body, timeout = 120000 } = {}) {
|
|
113
|
+
const controller = new AbortController();
|
|
114
|
+
const timer = setTimeout(() => controller.abort(), timeout);
|
|
115
|
+
const events = [];
|
|
116
|
+
try {
|
|
117
|
+
const response = await fetch(url, {
|
|
118
|
+
method: "POST",
|
|
119
|
+
headers: { "Content-Type": "application/json" },
|
|
120
|
+
body: JSON.stringify(body),
|
|
121
|
+
signal: controller.signal,
|
|
122
|
+
});
|
|
123
|
+
if (!response.ok || !response.body) {
|
|
124
|
+
const text = await response.text();
|
|
125
|
+
return { status: response.status, events, raw: text };
|
|
126
|
+
}
|
|
127
|
+
const reader = response.body.getReader();
|
|
128
|
+
const decoder = new TextDecoder();
|
|
129
|
+
let buffer = "";
|
|
130
|
+
while (true) {
|
|
131
|
+
const { done, value } = await reader.read();
|
|
132
|
+
if (done) break;
|
|
133
|
+
buffer += decoder.decode(value, { stream: true });
|
|
134
|
+
const frames = buffer.split("\n\n");
|
|
135
|
+
buffer = frames.pop() ?? "";
|
|
136
|
+
for (const frame of frames) {
|
|
137
|
+
const eventLine = frame.split("\n").find((l) => l.startsWith("event:"));
|
|
138
|
+
const dataLine = frame.split("\n").find((l) => l.startsWith("data:"));
|
|
139
|
+
if (!dataLine) continue;
|
|
140
|
+
const type = eventLine ? eventLine.slice(6).trim() : "message";
|
|
141
|
+
let data;
|
|
142
|
+
try {
|
|
143
|
+
data = JSON.parse(dataLine.slice(5).trim());
|
|
144
|
+
} catch {
|
|
145
|
+
data = dataLine.slice(5).trim();
|
|
146
|
+
}
|
|
147
|
+
events.push({ event: type, data });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return { status: response.status, events };
|
|
151
|
+
} finally {
|
|
152
|
+
clearTimeout(timer);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function assert(condition, message) {
|
|
157
|
+
if (!condition) throw new Error(message);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// ---------- 测试用例 ----------
|
|
161
|
+
|
|
162
|
+
async function testHealth() {
|
|
163
|
+
const name = "健康检查";
|
|
164
|
+
header(`${name} · GET /health`);
|
|
165
|
+
const { status, data } = await request("GET", `${BASE_URL}/health`);
|
|
166
|
+
log("响应", data);
|
|
167
|
+
try {
|
|
168
|
+
assert(status === 200, `期望 200,实际 ${status}`);
|
|
169
|
+
assert(
|
|
170
|
+
data?.status === "ok",
|
|
171
|
+
`期望 status=ok,实际 ${JSON.stringify(data)}`,
|
|
172
|
+
);
|
|
173
|
+
assert(
|
|
174
|
+
data?.agentCode === AGENT_CODE,
|
|
175
|
+
`期望 agentCode=${AGENT_CODE},实际 ${data?.agentCode}`,
|
|
176
|
+
);
|
|
177
|
+
ok(name);
|
|
178
|
+
} catch (e) {
|
|
179
|
+
fail(name, e.message);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async function testCapability() {
|
|
184
|
+
const name = "能力发现";
|
|
185
|
+
header(`${name} · GET ${api("")}`);
|
|
186
|
+
const { status, data } = await request("GET", api(""));
|
|
187
|
+
log("响应(截断)", truncate(data, 1200));
|
|
188
|
+
try {
|
|
189
|
+
assert(status === 200, `期望 200,实际 ${status}`);
|
|
190
|
+
assert(
|
|
191
|
+
data?.agent?.code === AGENT_CODE,
|
|
192
|
+
`期望 agent.code=${AGENT_CODE},实际 ${data?.agent?.code}`,
|
|
193
|
+
);
|
|
194
|
+
assert(
|
|
195
|
+
data?.capabilities?.stream === true,
|
|
196
|
+
"期望 capabilities.stream=true",
|
|
197
|
+
);
|
|
198
|
+
assert(Array.isArray(data?.graph?.nodes), "期望 graph.nodes 为数组");
|
|
199
|
+
ok(
|
|
200
|
+
`${name}(版本 ${data?.agent?.version},节点 ${data?.graph?.nodes?.length ?? 0} 个)`,
|
|
201
|
+
);
|
|
202
|
+
} catch (e) {
|
|
203
|
+
fail(name, e.message);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
async function testCreateSession() {
|
|
208
|
+
const name = "创建会话";
|
|
209
|
+
header(`${name} · POST ${api("/sessions")}`);
|
|
210
|
+
const { status, data } = await request("POST", api("/sessions"), {
|
|
211
|
+
body: { userId: "test-user", title: "接口测试会话" },
|
|
212
|
+
});
|
|
213
|
+
log("响应", data);
|
|
214
|
+
try {
|
|
215
|
+
assert(status === 201, `期望 201,实际 ${status}`);
|
|
216
|
+
assert(data?.id, `期望返回 session.id,实际 ${JSON.stringify(data)}`);
|
|
217
|
+
ok(name);
|
|
218
|
+
return data.id;
|
|
219
|
+
} catch (e) {
|
|
220
|
+
fail(name, e.message);
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
async function testListSessions() {
|
|
226
|
+
const name = "查询会话列表";
|
|
227
|
+
header(`${name} · GET ${api("/sessions?limit=20&offset=0")}`);
|
|
228
|
+
const { status, data } = await request(
|
|
229
|
+
"GET",
|
|
230
|
+
`${api("/sessions")}?limit=20&offset=0`,
|
|
231
|
+
);
|
|
232
|
+
log("响应", data);
|
|
233
|
+
try {
|
|
234
|
+
assert(status === 200, `期望 200,实际 ${status}`);
|
|
235
|
+
assert(
|
|
236
|
+
Array.isArray(data?.items) || Array.isArray(data),
|
|
237
|
+
`期望返回会话列表,实际 ${JSON.stringify(data)}`,
|
|
238
|
+
);
|
|
239
|
+
ok(name);
|
|
240
|
+
} catch (e) {
|
|
241
|
+
fail(name, e.message);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
async function testGetSession(sessionId) {
|
|
246
|
+
const name = "查询会话详情";
|
|
247
|
+
header(`${name} · GET ${api(`/sessions/${sessionId}`)}`);
|
|
248
|
+
const { status, data } = await request("GET", api(`/sessions/${sessionId}`));
|
|
249
|
+
log("响应", data);
|
|
250
|
+
try {
|
|
251
|
+
assert(status === 200, `期望 200,实际 ${status}`);
|
|
252
|
+
assert(data?.id === sessionId, `期望 id=${sessionId},实际 ${data?.id}`);
|
|
253
|
+
ok(name);
|
|
254
|
+
} catch (e) {
|
|
255
|
+
fail(name, e.message);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
async function testSendMessage(sessionId) {
|
|
260
|
+
const name = "发送消息(同步调用)";
|
|
261
|
+
header(`${name} · POST ${api(`/sessions/${sessionId}/messages`)}`);
|
|
262
|
+
const { status, data } = await request(
|
|
263
|
+
"POST",
|
|
264
|
+
api(`/sessions/${sessionId}/messages`),
|
|
265
|
+
{
|
|
266
|
+
body: { content: TEST_MESSAGE },
|
|
267
|
+
timeout: 120000,
|
|
268
|
+
},
|
|
269
|
+
);
|
|
270
|
+
log("响应", truncate(data, 1200));
|
|
271
|
+
try {
|
|
272
|
+
assert(status === 200, `期望 200,实际 ${status}`);
|
|
273
|
+
const output = data?.output;
|
|
274
|
+
log("Agent 回复", truncate(output, 1200));
|
|
275
|
+
assert(
|
|
276
|
+
data?.status === "success",
|
|
277
|
+
`期望 status=success,实际 ${data?.status}${output ? `(${truncate(output, 200)})` : ""}`,
|
|
278
|
+
);
|
|
279
|
+
ok(name);
|
|
280
|
+
} catch (e) {
|
|
281
|
+
fail(name, e.message);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
async function testListMessages(sessionId) {
|
|
286
|
+
const name = "查询历史消息";
|
|
287
|
+
header(`${name} · GET ${api(`/sessions/${sessionId}/messages`)}`);
|
|
288
|
+
const { status, data } = await request(
|
|
289
|
+
"GET",
|
|
290
|
+
api(`/sessions/${sessionId}/messages`),
|
|
291
|
+
);
|
|
292
|
+
log("响应", data);
|
|
293
|
+
try {
|
|
294
|
+
assert(status === 200, `期望 200,实际 ${status}`);
|
|
295
|
+
ok(name);
|
|
296
|
+
} catch (e) {
|
|
297
|
+
fail(name, e.message);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
async function testStatelessInvoke() {
|
|
302
|
+
const name = "无会话同步调用";
|
|
303
|
+
header(`${name} · POST ${api("/invoke")}`);
|
|
304
|
+
const { status, data } = await request("POST", api("/invoke"), {
|
|
305
|
+
body: { content: TEST_MESSAGE },
|
|
306
|
+
timeout: 120000,
|
|
307
|
+
});
|
|
308
|
+
log("响应", truncate(data, 800));
|
|
309
|
+
log("Agent 回复", truncate(data?.output, 1200));
|
|
310
|
+
try {
|
|
311
|
+
assert(status === 200, `期望 200,实际 ${status}`);
|
|
312
|
+
assert(
|
|
313
|
+
data?.status === "success",
|
|
314
|
+
`期望 status=success,实际 ${data?.status}${data?.output ? `(${truncate(data.output, 200)})` : ""}`,
|
|
315
|
+
);
|
|
316
|
+
ok(name);
|
|
317
|
+
} catch (e) {
|
|
318
|
+
fail(name, e.message);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
async function testStream(sessionId) {
|
|
323
|
+
const name = "流式对话";
|
|
324
|
+
header(`${name} · POST ${api(`/sessions/${sessionId}/stream`)}`);
|
|
325
|
+
const { status, events, raw } = await consumeSse(
|
|
326
|
+
api(`/sessions/${sessionId}/stream`),
|
|
327
|
+
{
|
|
328
|
+
body: { content: "继续,用一句话补充说明" },
|
|
329
|
+
},
|
|
330
|
+
);
|
|
331
|
+
try {
|
|
332
|
+
assert(status === 200, `期望 200,实际 ${status}`);
|
|
333
|
+
assert(events.length > 0, "期望至少收到 1 个 SSE 事件");
|
|
334
|
+
log(
|
|
335
|
+
`共收到 ${events.length} 个事件,类型分布:`,
|
|
336
|
+
countBy(events.map((e) => e.event)),
|
|
337
|
+
);
|
|
338
|
+
const chunks = events
|
|
339
|
+
.filter((e) => e.event === "response.chunk")
|
|
340
|
+
.map((e) => e.data?.delta ?? e.data?.text ?? e.data?.content);
|
|
341
|
+
log("流式文本片段(前 20 个)", chunks.slice(0, 20));
|
|
342
|
+
const text = chunks.filter(Boolean).join("");
|
|
343
|
+
log("流式回复全文", truncate(text, 1200));
|
|
344
|
+
const errorEvent = events.find(
|
|
345
|
+
(e) => e.event === "error" || e.event === "task.error",
|
|
346
|
+
);
|
|
347
|
+
assert(!errorEvent, `流中收到错误事件:${truncate(errorEvent?.data, 300)}`);
|
|
348
|
+
ok(name);
|
|
349
|
+
} catch (e) {
|
|
350
|
+
if (raw) log("原始响应", truncate(raw, 800));
|
|
351
|
+
fail(name, e.message);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
async function testArchive(sessionId) {
|
|
356
|
+
const name = "归档会话";
|
|
357
|
+
header(`${name} · POST ${api(`/sessions/${sessionId}/archive`)}`);
|
|
358
|
+
const { status, data } = await request(
|
|
359
|
+
"POST",
|
|
360
|
+
api(`/sessions/${sessionId}/archive`),
|
|
361
|
+
);
|
|
362
|
+
log("响应", data);
|
|
363
|
+
try {
|
|
364
|
+
assert(status === 200, `期望 200,实际 ${status}`);
|
|
365
|
+
ok(name);
|
|
366
|
+
} catch (e) {
|
|
367
|
+
fail(name, e.message);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
async function testRestore(sessionId) {
|
|
372
|
+
const name = "恢复会话(预期 501)";
|
|
373
|
+
header(`${name} · POST ${api(`/sessions/${sessionId}/restore`)}`);
|
|
374
|
+
const { status, data } = await request(
|
|
375
|
+
"POST",
|
|
376
|
+
api(`/sessions/${sessionId}/restore`),
|
|
377
|
+
);
|
|
378
|
+
log("响应", data);
|
|
379
|
+
try {
|
|
380
|
+
assert(status === 501, `期望 501 not_supported,实际 ${status}`);
|
|
381
|
+
ok(name);
|
|
382
|
+
} catch (e) {
|
|
383
|
+
fail(name, e.message);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
function countBy(items) {
|
|
388
|
+
return items.reduce(
|
|
389
|
+
(acc, item) => ((acc[item] = (acc[item] ?? 0) + 1), acc),
|
|
390
|
+
{},
|
|
391
|
+
);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// ---------- 汇总 ----------
|
|
395
|
+
|
|
396
|
+
function summary() {
|
|
397
|
+
header("测试汇总");
|
|
398
|
+
const total = passed + failed;
|
|
399
|
+
console.log(` 总计 ${total} 项 · 通过 ${passed} · 失败 ${failed}`);
|
|
400
|
+
if (failures.length) {
|
|
401
|
+
console.log("\n 失败明细:");
|
|
402
|
+
for (const f of failures) {
|
|
403
|
+
console.log(
|
|
404
|
+
` ✗ ${f.msg}${f.detail ? " — " + truncate(f.detail, 300) : ""}`,
|
|
405
|
+
);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
console.log("\n" + "─".repeat(70));
|
|
409
|
+
process.exitCode = failed ? 1 : 0;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// ---------- 主流程 ----------
|
|
413
|
+
|
|
414
|
+
async function main() {
|
|
415
|
+
header(`Agent API 接口测试`);
|
|
416
|
+
console.log(` 服务地址:${BASE_URL}`);
|
|
417
|
+
console.log(` Agent code:${AGENT_CODE}`);
|
|
418
|
+
console.log(` 测试消息:${TEST_MESSAGE}`);
|
|
419
|
+
|
|
420
|
+
const sessionId = await testCreateSession();
|
|
421
|
+
if (!sessionId) {
|
|
422
|
+
summary();
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
await testHealth();
|
|
427
|
+
await testCapability();
|
|
428
|
+
await testListSessions();
|
|
429
|
+
await testGetSession(sessionId);
|
|
430
|
+
await testSendMessage(sessionId);
|
|
431
|
+
await testListMessages(sessionId);
|
|
432
|
+
await testStatelessInvoke();
|
|
433
|
+
await testStream(sessionId);
|
|
434
|
+
await testArchive(sessionId);
|
|
435
|
+
await testRestore(sessionId);
|
|
436
|
+
|
|
437
|
+
summary();
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
main().catch((error) => {
|
|
441
|
+
console.error("测试脚本执行异常:", error);
|
|
442
|
+
process.exitCode = 1;
|
|
443
|
+
});
|
|
@@ -8,10 +8,8 @@ const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
|
8
8
|
// --dev 使用项目根的 .eap/runtime;生产构建使用 dist/.eap/runtime。
|
|
9
9
|
const isDev = process.argv.includes('--dev');
|
|
10
10
|
|
|
11
|
-
//
|
|
12
|
-
config({
|
|
13
|
-
path: [resolve(root, isDev ? '.env.local' : '.env.production'), resolve(root, '.env')],
|
|
14
|
-
});
|
|
11
|
+
// 统一读取项目根 .env。
|
|
12
|
+
config({ path: resolve(root, '.env') });
|
|
15
13
|
|
|
16
14
|
// 生产输出目录必须位于 dist 下,便于与 dist/index.js 一起发布。
|
|
17
15
|
const runtimeBase = isDev ? root : resolve(root, 'dist');
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createAgent,
|
|
3
|
+
resolveProjectRuntimeEnvironment,
|
|
3
4
|
type Agent,
|
|
4
5
|
type AgentCredentialProvider,
|
|
5
6
|
type AgentResourceManager,
|
|
@@ -42,11 +43,11 @@ export async function createEmbeddedAgent(options: EmbeddedAgentOptions = {}): P
|
|
|
42
43
|
? { foundationEndpoint: loadedRuntime.config.platform.foundationServiceUrl.trim() }
|
|
43
44
|
: {}),
|
|
44
45
|
};
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
// 凭证优先级:宿主显式注入的 credentialProvider > EAP_SDK_TOKEN 环境变量回退。
|
|
47
|
+
// 显式注入用于生产托管;EAP_SDK_TOKEN 用于本地演示(npm run dev / 本地起 dist 冒烟)。
|
|
48
|
+
const provider =
|
|
49
|
+
options.credentialProvider ??
|
|
50
|
+
createSdkTokenProvider(options.sdkToken ?? process.env.EAP_SDK_TOKEN);
|
|
50
51
|
const embeddedConfig: EmbeddedSdkConfig = {
|
|
51
52
|
platform,
|
|
52
53
|
credentials: { provider },
|
|
@@ -54,11 +55,22 @@ export async function createEmbeddedAgent(options: EmbeddedAgentOptions = {}): P
|
|
|
54
55
|
};
|
|
55
56
|
const deploymentRoot = resolve(runtimeRoot, '..', '..');
|
|
56
57
|
|
|
58
|
+
// 把 eap.config.json 里的 runtime.llm.models 映射成运行时识别的本地模型连接
|
|
59
|
+
// (EAP_LLM_MODE=local + EAP_LLM_CONNECTIONS)。漏掉这一步时,运行时会因为拿不到
|
|
60
|
+
// 本地网关而退回 EchoLLMProvider,表现为 [echo:model] 回显用户输入而非真实对话。
|
|
61
|
+
const projectRoot = resolve(entryDirectory, '..');
|
|
62
|
+
const runtimeEnvironment = resolveProjectRuntimeEnvironment({
|
|
63
|
+
root: projectRoot,
|
|
64
|
+
preinstallRoot: runtimeRoot,
|
|
65
|
+
}).environment;
|
|
66
|
+
|
|
57
67
|
return createAgent({
|
|
58
68
|
runtimeRoot,
|
|
59
69
|
deploymentContext: isDev ? 'dev' : 'server',
|
|
60
70
|
embeddedConfig,
|
|
61
71
|
environment: {
|
|
72
|
+
...runtimeEnvironment,
|
|
73
|
+
// 模板以物化 Runtime 目录为基准,覆盖 SDK 相对项目根算出的路径。
|
|
62
74
|
EAP_DATA_DIR: resolve(runtimeRoot, '..'),
|
|
63
75
|
EAP_CHECKPOINT_DIR: resolve(deploymentRoot, loadedRuntime.config.runtime.storage.checkpointDir),
|
|
64
76
|
},
|
|
@@ -77,4 +89,4 @@ export function createSdkTokenProvider(token?: string): AgentCredentialProvider
|
|
|
77
89
|
return { value };
|
|
78
90
|
},
|
|
79
91
|
};
|
|
80
|
-
}
|
|
92
|
+
}
|
|
@@ -15,15 +15,8 @@ export type { ResourceApplyAndReloadResult } from './http/services/resource-serv
|
|
|
15
15
|
// 入口文件的位置决定 Runtime 的相对路径,不依赖启动命令所在的当前目录。
|
|
16
16
|
const entryDirectory = dirname(fileURLToPath(import.meta.url));
|
|
17
17
|
const projectRoot = resolve(entryDirectory, '..');
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// 开发态读取 .env.local,生产态读取 .env.production;两者都以 .env 作为最后的回退。
|
|
21
|
-
config({
|
|
22
|
-
path: [
|
|
23
|
-
resolve(projectRoot, isDev ? '.env.local' : '.env.production'),
|
|
24
|
-
resolve(projectRoot, '.env'),
|
|
25
|
-
],
|
|
26
|
-
});
|
|
18
|
+
// 统一读取项目根 .env。
|
|
19
|
+
config({ path: resolve(projectRoot, '.env') });
|
|
27
20
|
|
|
28
21
|
// 默认导出实例用于模板开发演示(npm run dev);生产宿主应调用
|
|
29
22
|
// createEmbeddedAgent({ credentialProvider }),显式注入凭证。
|
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
"name": "my-agent",
|
|
4
4
|
"version": "1.0.0",
|
|
5
5
|
"description": "单智能体 ReAct 循环,按需调用本地工具",
|
|
6
|
-
"toolRefs": [
|
|
7
|
-
{ "code": "echo-tool", "version": "1.0.0" },
|
|
8
|
-
{ "code": "http-weather", "version": "1.0.0" }
|
|
9
|
-
],
|
|
6
|
+
"toolRefs": [],
|
|
10
7
|
"skillRefs": [],
|
|
11
8
|
"prompts": {
|
|
12
9
|
"system": "你是助手。用中文回答。需要时调用已提供的工具,不要调用未提供的工具。"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gt-fe/eap-cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "EAP CLI 工具 — Agent 项目创建、开发、测试、发布",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"react": "^18.3.1",
|
|
24
24
|
"react-markdown": "^9.0.1",
|
|
25
25
|
"remark-gfm": "^4.0.0",
|
|
26
|
-
"@gt-fe/eap-sdk": "0.2.
|
|
26
|
+
"@gt-fe/eap-sdk": "0.2.4"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/node": "^20.0.0",
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# 本地开发环境(npm run dev)。复制为 .env.local。不要提交包含真实凭据的 .env.local。
|
|
2
|
-
|
|
3
|
-
# dev 以项目根目录为基准,物化到项目根 .eap/runtime。
|
|
4
|
-
EAP_RUNTIME_ROOT=.eap/runtime
|
|
5
|
-
|
|
6
|
-
# 源码开发入口(--dev)使用:本地 LLM 模型密钥,对应 eap.config.json 里的 ${OPENAI_API_KEY}。
|
|
7
|
-
OPENAI_API_KEY=replace-with-your-model-key
|
|
8
|
-
|
|
9
|
-
# 本地演示 Token 回退;生产宿主应改用 createEmbeddedAgent({ credentialProvider }) 显式注入。
|
|
10
|
-
EAP_SDK_TOKEN=replace-with-external-sdk-token
|
|
11
|
-
|
|
12
|
-
# 前端智能体页面服务默认监听本机 3000 端口;鉴权由宿主路由或反向代理负责。
|
|
13
|
-
EAP_HTTP_HOST=127.0.0.1
|
|
14
|
-
EAP_HTTP_PORT=3000
|
|
15
|
-
EAP_HTTP_CORS_ORIGIN=http://localhost:5173
|
|
16
|
-
# 单次 JSON 请求体上限(字节)。
|
|
17
|
-
EAP_HTTP_MAX_BODY_BYTES=1048576
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# 生产构建(npm run build)。复制为 .env.production。不要提交包含真实凭据的 .env.production。
|
|
2
|
-
#
|
|
3
|
-
# 说明:构建阶段(build-runtime.mjs)只做确定性物化。生产服务由宿主显式注入凭证 Provider。
|
|
4
|
-
|
|
5
|
-
# build-runtime 以 dist 目录为基准;dist/index.js 运行时也以自身所在目录为基准。
|
|
6
|
-
# 因此最终路径为 dist/.eap/runtime。
|
|
7
|
-
EAP_RUNTIME_ROOT=./.eap/runtime
|
|
8
|
-
|
|
9
|
-
# platform.portalUrl / platform.foundationServiceUrl 来自 SDK 物化到 dist/.eap/runtime 的
|
|
10
|
-
# Runtime Agent 目录中的 eap.config.json。
|
|
11
|
-
# 生产宿主应通过 createEmbeddedAgent({ credentialProvider }) 显式注入短期凭证。
|
|
12
|
-
# 构建阶段不需要把 SDK Token 写入产物;生产启动也不会读取 EAP_SDK_TOKEN。
|
|
13
|
-
|
|
14
|
-
# 对外服务监听配置。生产建议由反向代理负责 TLS、限流和请求日志脱敏。
|
|
15
|
-
EAP_HTTP_HOST=0.0.0.0
|
|
16
|
-
EAP_HTTP_PORT=3000
|
|
17
|
-
EAP_HTTP_CORS_ORIGIN=https://agent.example.com
|
|
18
|
-
EAP_HTTP_MAX_BODY_BYTES=1048576
|