@thinkingai/ae-cli 1.0.22 → 1.0.27
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 +39 -1
- package/README.zh.md +40 -1
- package/dist/{auth-YM7OI23X.js → auth-TXFJHPXU.js} +3 -2
- package/dist/{auth-5S7SPPEJ.js → auth-W2JZ3DKA.js} +11 -4
- package/dist/{chunk-MPFTXJFG.js → chunk-2NGWYMLB.js} +14 -2
- package/dist/chunk-6T7245YE.js +478 -0
- package/dist/{chunk-KM57HI5B.js → chunk-B4UL2VIJ.js} +7 -1
- package/dist/{chunk-TMMUBSKW.js → chunk-BI5ZVD6T.js} +8 -1
- package/dist/chunk-MNHE6SSI.js +79 -0
- package/dist/chunk-MWWYGZ76.js +130 -0
- package/dist/{chunk-24ZKQWG2.js → chunk-SRRUNQIM.js} +51 -4
- package/dist/chunk-TG64AQV4.js +262 -0
- package/dist/{chunk-NBFTPIAH.js → chunk-VT6VC4PA.js} +15 -4
- package/dist/{client-7S23DVHH.js → client-IU2E5IOL.js} +6 -3
- package/dist/{config-RVUESJRF.js → config-WH3R3IRY.js} +3 -2
- package/dist/index.js +195 -20
- package/dist/model-CC7U5XOJ.js +131 -0
- package/dist/{raw-5SYAUCJQ.js → raw-TUHZQ4UB.js} +5 -4
- package/dist/sync-EVEDS7YE.js +383 -0
- package/dist/te-agent-FLTDYV3L.js +522 -0
- package/dist/{te-analysis-RQST6AT3.js → te-analysis-CMXADIJM.js} +101 -12
- package/dist/{te-audience-TJ74UJI3.js → te-audience-LPZFFSXM.js} +4 -3
- package/dist/{te-common-W5URM2SH.js → te-common-BXQFKTB3.js} +4 -3
- package/dist/{te-community-YRV2VAD4.js → te-community-K5S3VOZY.js} +4 -3
- package/dist/{te-dataops-ZPH72BCK.js → te-dataops-567IMCQG.js} +4 -3
- package/dist/{te-engage-57UKFV74.js → te-engage-TBUTGW5F.js} +105 -49
- package/dist/{te-kb-GD7SJRYB.js → te-kb-XHVBWP5E.js} +227 -38
- package/dist/{te-meta-25SLZFXJ.js → te-meta-NQ4U3VJW.js} +25 -4
- package/dist/te-team-556APRIU.js +529 -0
- package/package.json +6 -1
- package/skills/ae-agent/SKILL.md +133 -0
- package/skills/ae-analysis/references/create_entity.md +39 -0
- package/skills/ae-analysis/references/create_space.md +34 -0
- package/skills/ae-analysis/references/drilldown_user_events.md +1 -1
- package/skills/ae-analysis/references/drilldown_users.md +2 -2
- package/skills/ae-analysis/references/query_adhoc.md +3 -2
- package/skills/ae-analysis/references/query_entity_details.md +1 -1
- package/skills/ae-engage/SKILL.md +25 -2
- package/skills/ae-engage/references/build-task-save-guide.md +283 -0
- package/skills/ae-engage/references/save-task.md +304 -0
- package/skills/ae-kb/SKILL.md +283 -0
- package/skills/ae-team/SKILL.md +164 -0
- package/skills/ae-team/references/ai-generate.md +39 -0
- package/skills/ae-team/references/create.md +94 -0
- package/skills/ae-team/references/delete.md +39 -0
- package/skills/ae-team/references/list-projects.md +45 -0
- package/skills/ae-team/references/list-templates.md +38 -0
- package/skills/ae-team/references/list.md +39 -0
- package/skills/ae-team/references/run-artifacts.md +51 -0
- package/skills/ae-team/references/run-cancel.md +38 -0
- package/skills/ae-team/references/run-chat.md +57 -0
- package/skills/ae-team/references/run-reply.md +41 -0
- package/skills/ae-team/references/run-result.md +75 -0
- package/skills/ae-team/references/run-start.md +73 -0
- package/skills/ae-team/references/run-watch.md +82 -0
- package/skills/ae-team/references/update.md +47 -0
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
import {
|
|
2
|
+
deleteFromMainApp,
|
|
3
|
+
getFromMainApp,
|
|
4
|
+
patchToMainApp,
|
|
5
|
+
postToMainApp,
|
|
6
|
+
uploadToMainApp
|
|
7
|
+
} from "./chunk-TG64AQV4.js";
|
|
8
|
+
|
|
9
|
+
// src/commands/te-agent/models.ts
|
|
10
|
+
var BASE_PATH = "/api/sandbox/agent/models";
|
|
11
|
+
var listModels = {
|
|
12
|
+
service: "agent",
|
|
13
|
+
command: "+list-models",
|
|
14
|
+
description: "List models visible to current user (personal / company / system)",
|
|
15
|
+
flags: [
|
|
16
|
+
{ name: "scope", type: "string", required: false, desc: "Filter by scope: personal | company | system" }
|
|
17
|
+
],
|
|
18
|
+
risk: "read",
|
|
19
|
+
validate: (ctx) => {
|
|
20
|
+
const scope = ctx.str("scope");
|
|
21
|
+
if (scope && !["personal", "company", "system"].includes(scope)) {
|
|
22
|
+
throw new Error("--scope \u5FC5\u987B\u662F personal\u3001company \u6216 system");
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
dryRun: (ctx) => {
|
|
26
|
+
const scope = ctx.str("scope");
|
|
27
|
+
const qs = scope ? `?scope=${encodeURIComponent(scope)}` : "";
|
|
28
|
+
return { method: "GET", url: `${BASE_PATH}${qs}` };
|
|
29
|
+
},
|
|
30
|
+
execute: async (ctx) => {
|
|
31
|
+
const scope = ctx.str("scope");
|
|
32
|
+
const qs = scope ? `?scope=${encodeURIComponent(scope)}` : "";
|
|
33
|
+
return getFromMainApp(`${BASE_PATH}${qs}`);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var addModel = {
|
|
37
|
+
service: "agent",
|
|
38
|
+
command: "+add-model",
|
|
39
|
+
description: "Add a custom model (personal scope)",
|
|
40
|
+
flags: [
|
|
41
|
+
{ name: "model-id", type: "string", required: true, desc: "Model identifier (e.g. gpt-4o)" },
|
|
42
|
+
{ name: "name", type: "string", required: true, desc: "Display name" },
|
|
43
|
+
{ name: "base-url", type: "string", required: true, desc: "API base URL" },
|
|
44
|
+
{ name: "api-key", type: "string", required: false, desc: "API key" },
|
|
45
|
+
{ name: "provider", type: "string", required: false, desc: "Provider name" },
|
|
46
|
+
{ name: "description", type: "string", required: false, desc: "Description" },
|
|
47
|
+
{ name: "context-length", type: "number", required: false, desc: "Context window length" }
|
|
48
|
+
],
|
|
49
|
+
risk: "write",
|
|
50
|
+
validate: (ctx) => {
|
|
51
|
+
const baseUrl = ctx.str("baseUrl");
|
|
52
|
+
try {
|
|
53
|
+
new URL(baseUrl);
|
|
54
|
+
} catch {
|
|
55
|
+
throw new Error("--base-url \u5FC5\u987B\u662F\u6709\u6548 URL");
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
dryRun: (ctx) => ({
|
|
59
|
+
method: "POST",
|
|
60
|
+
url: BASE_PATH,
|
|
61
|
+
body: {
|
|
62
|
+
modelId: ctx.str("modelId"),
|
|
63
|
+
displayName: ctx.str("name"),
|
|
64
|
+
baseUrl: ctx.str("baseUrl"),
|
|
65
|
+
apiKey: ctx.str("apiKey") || void 0,
|
|
66
|
+
provider: ctx.str("provider") || void 0,
|
|
67
|
+
description: ctx.str("description") || void 0,
|
|
68
|
+
contextLength: ctx.num("contextLength") || void 0
|
|
69
|
+
}
|
|
70
|
+
}),
|
|
71
|
+
execute: async (ctx) => {
|
|
72
|
+
return postToMainApp(BASE_PATH, {
|
|
73
|
+
modelId: ctx.str("modelId"),
|
|
74
|
+
displayName: ctx.str("name"),
|
|
75
|
+
baseUrl: ctx.str("baseUrl"),
|
|
76
|
+
apiKey: ctx.str("apiKey") || void 0,
|
|
77
|
+
provider: ctx.str("provider") || void 0,
|
|
78
|
+
description: ctx.str("description") || void 0,
|
|
79
|
+
contextLength: ctx.num("contextLength") || void 0
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
var delModel = {
|
|
84
|
+
service: "agent",
|
|
85
|
+
command: "+del-model",
|
|
86
|
+
description: "Delete a personal model",
|
|
87
|
+
flags: [
|
|
88
|
+
{ name: "id", type: "string", required: true, desc: "Model record ID (CUID)" }
|
|
89
|
+
],
|
|
90
|
+
risk: "write",
|
|
91
|
+
dryRun: (ctx) => ({
|
|
92
|
+
method: "DELETE",
|
|
93
|
+
url: `${BASE_PATH}?id=${encodeURIComponent(ctx.str("id"))}`
|
|
94
|
+
}),
|
|
95
|
+
execute: async (ctx) => {
|
|
96
|
+
return deleteFromMainApp(`${BASE_PATH}?id=${encodeURIComponent(ctx.str("id"))}`);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
var toggleModel = {
|
|
100
|
+
service: "agent",
|
|
101
|
+
command: "+toggle-model",
|
|
102
|
+
description: "Enable or disable a model",
|
|
103
|
+
flags: [
|
|
104
|
+
{ name: "id", type: "string", required: true, desc: "Model record ID (CUID)" },
|
|
105
|
+
{ name: "enabled", type: "boolean", required: true, desc: "true to enable, false to disable" }
|
|
106
|
+
],
|
|
107
|
+
risk: "write",
|
|
108
|
+
dryRun: (ctx) => ({
|
|
109
|
+
method: "PATCH",
|
|
110
|
+
url: BASE_PATH,
|
|
111
|
+
body: { id: ctx.str("id"), enabled: ctx.bool("enabled") }
|
|
112
|
+
}),
|
|
113
|
+
execute: async (ctx) => {
|
|
114
|
+
return patchToMainApp(BASE_PATH, {
|
|
115
|
+
id: ctx.str("id"),
|
|
116
|
+
enabled: ctx.bool("enabled")
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// src/commands/te-agent/mcps.ts
|
|
122
|
+
var BASE_PATH2 = "/api/sandbox/agent/mcp-servers";
|
|
123
|
+
var listMcps = {
|
|
124
|
+
service: "agent",
|
|
125
|
+
command: "+list-mcps",
|
|
126
|
+
description: "List MCP servers visible to current user",
|
|
127
|
+
flags: [
|
|
128
|
+
{ name: "scope", type: "string", required: false, desc: "Filter by scope: personal | company | system" }
|
|
129
|
+
],
|
|
130
|
+
risk: "read",
|
|
131
|
+
validate: (ctx) => {
|
|
132
|
+
const scope = ctx.str("scope");
|
|
133
|
+
if (scope && !["personal", "company", "system"].includes(scope)) {
|
|
134
|
+
throw new Error("--scope \u5FC5\u987B\u662F personal\u3001company \u6216 system");
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
dryRun: (ctx) => {
|
|
138
|
+
const scope = ctx.str("scope");
|
|
139
|
+
const qs = scope ? `?scope=${encodeURIComponent(scope)}` : "";
|
|
140
|
+
return { method: "GET", url: `${BASE_PATH2}${qs}` };
|
|
141
|
+
},
|
|
142
|
+
execute: async (ctx) => {
|
|
143
|
+
const scope = ctx.str("scope");
|
|
144
|
+
const qs = scope ? `?scope=${encodeURIComponent(scope)}` : "";
|
|
145
|
+
return getFromMainApp(`${BASE_PATH2}${qs}`);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
var addMcp = {
|
|
149
|
+
service: "agent",
|
|
150
|
+
command: "+add-mcp",
|
|
151
|
+
description: "Add an MCP server (personal scope)",
|
|
152
|
+
flags: [
|
|
153
|
+
{ name: "name", type: "string", required: true, desc: "Server name (2-64 chars, letter start, [a-zA-Z0-9_-])" },
|
|
154
|
+
{ name: "url", type: "string", required: true, desc: "MCP server URL" },
|
|
155
|
+
{ name: "display-name", type: "string", required: false, desc: "Display name (max 100)" },
|
|
156
|
+
{ name: "description", type: "string", required: false, desc: "Description (max 255)" },
|
|
157
|
+
{ name: "transport", type: "string", required: false, default: "http", desc: "Transport: sse | http" },
|
|
158
|
+
{ name: "headers", type: "json", required: false, desc: "HTTP headers as JSON object" }
|
|
159
|
+
],
|
|
160
|
+
risk: "write",
|
|
161
|
+
validate: (ctx) => {
|
|
162
|
+
const name = ctx.str("name");
|
|
163
|
+
if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {
|
|
164
|
+
throw new Error("--name \u5FC5\u987B\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u4EC5\u5305\u542B\u5B57\u6BCD\u3001\u6570\u5B57\u3001_\u3001-");
|
|
165
|
+
}
|
|
166
|
+
if (name.length < 2 || name.length > 64) {
|
|
167
|
+
throw new Error("--name \u957F\u5EA6\u5FC5\u987B\u5728 2-64 \u4E4B\u95F4");
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
new URL(ctx.str("url"));
|
|
171
|
+
} catch {
|
|
172
|
+
throw new Error("--url \u5FC5\u987B\u662F\u6709\u6548 URL");
|
|
173
|
+
}
|
|
174
|
+
if (!/^https?:\/\//i.test(ctx.str("url"))) {
|
|
175
|
+
throw new Error("--url \u4EC5\u652F\u6301 http:// \u6216 https:// \u534F\u8BAE");
|
|
176
|
+
}
|
|
177
|
+
const transport = ctx.str("transport");
|
|
178
|
+
if (transport && !["sse", "http"].includes(transport)) {
|
|
179
|
+
throw new Error("--transport \u5FC5\u987B\u662F sse \u6216 http");
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
dryRun: (ctx) => ({
|
|
183
|
+
method: "POST",
|
|
184
|
+
url: BASE_PATH2,
|
|
185
|
+
body: {
|
|
186
|
+
name: ctx.str("name"),
|
|
187
|
+
url: ctx.str("url"),
|
|
188
|
+
displayName: ctx.str("displayName") || void 0,
|
|
189
|
+
description: ctx.str("description") || void 0,
|
|
190
|
+
transport: ctx.str("transport") || "http",
|
|
191
|
+
headers: ctx.json("headers") || void 0
|
|
192
|
+
}
|
|
193
|
+
}),
|
|
194
|
+
execute: async (ctx) => {
|
|
195
|
+
return postToMainApp(BASE_PATH2, {
|
|
196
|
+
name: ctx.str("name"),
|
|
197
|
+
url: ctx.str("url"),
|
|
198
|
+
displayName: ctx.str("displayName") || void 0,
|
|
199
|
+
description: ctx.str("description") || void 0,
|
|
200
|
+
transport: ctx.str("transport") || "http",
|
|
201
|
+
headers: ctx.json("headers") || void 0
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
var delMcp = {
|
|
206
|
+
service: "agent",
|
|
207
|
+
command: "+del-mcp",
|
|
208
|
+
description: "Delete a personal MCP server",
|
|
209
|
+
flags: [
|
|
210
|
+
{ name: "id", type: "string", required: true, desc: "MCP server record ID (CUID)" }
|
|
211
|
+
],
|
|
212
|
+
risk: "write",
|
|
213
|
+
dryRun: (ctx) => ({
|
|
214
|
+
method: "DELETE",
|
|
215
|
+
url: `${BASE_PATH2}?id=${encodeURIComponent(ctx.str("id"))}`
|
|
216
|
+
}),
|
|
217
|
+
execute: async (ctx) => {
|
|
218
|
+
return deleteFromMainApp(`${BASE_PATH2}?id=${encodeURIComponent(ctx.str("id"))}`);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
var toggleMcp = {
|
|
222
|
+
service: "agent",
|
|
223
|
+
command: "+toggle-mcp",
|
|
224
|
+
description: "Enable or disable an MCP server",
|
|
225
|
+
flags: [
|
|
226
|
+
{ name: "id", type: "string", required: true, desc: "MCP server record ID (CUID)" },
|
|
227
|
+
{ name: "enabled", type: "boolean", required: true, desc: "true to enable, false to disable" }
|
|
228
|
+
],
|
|
229
|
+
risk: "write",
|
|
230
|
+
dryRun: (ctx) => ({
|
|
231
|
+
method: "PATCH",
|
|
232
|
+
url: BASE_PATH2,
|
|
233
|
+
body: { id: ctx.str("id"), enabled: ctx.bool("enabled") }
|
|
234
|
+
}),
|
|
235
|
+
execute: async (ctx) => {
|
|
236
|
+
return patchToMainApp(BASE_PATH2, {
|
|
237
|
+
id: ctx.str("id"),
|
|
238
|
+
enabled: ctx.bool("enabled")
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
// src/commands/te-agent/skills.ts
|
|
244
|
+
var BASE_PATH3 = "/api/sandbox/agent/skills";
|
|
245
|
+
async function resolveInstructions(raw) {
|
|
246
|
+
if (raw === "@-") {
|
|
247
|
+
const chunks = [];
|
|
248
|
+
for await (const chunk of process.stdin) {
|
|
249
|
+
chunks.push(chunk);
|
|
250
|
+
}
|
|
251
|
+
const text = Buffer.concat(chunks).toString("utf8").trim();
|
|
252
|
+
if (!text) throw new Error("stdin \u4E3A\u7A7A\uFF0C\u65E0\u6CD5\u8BFB\u53D6 instructions");
|
|
253
|
+
return text;
|
|
254
|
+
}
|
|
255
|
+
return raw;
|
|
256
|
+
}
|
|
257
|
+
var listSkills = {
|
|
258
|
+
service: "agent",
|
|
259
|
+
command: "+list-skills",
|
|
260
|
+
description: "List Skills visible to current user",
|
|
261
|
+
flags: [
|
|
262
|
+
{ name: "scope", type: "string", required: false, desc: "Filter by scope: personal | company | system" }
|
|
263
|
+
],
|
|
264
|
+
risk: "read",
|
|
265
|
+
validate: (ctx) => {
|
|
266
|
+
const scope = ctx.str("scope");
|
|
267
|
+
if (scope && !["personal", "company", "system"].includes(scope)) {
|
|
268
|
+
throw new Error("--scope \u5FC5\u987B\u662F personal\u3001company \u6216 system");
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
dryRun: (ctx) => {
|
|
272
|
+
const scope = ctx.str("scope");
|
|
273
|
+
const qs = scope ? `?scope=${encodeURIComponent(scope)}` : "";
|
|
274
|
+
return { method: "GET", url: `${BASE_PATH3}${qs}` };
|
|
275
|
+
},
|
|
276
|
+
execute: async (ctx) => {
|
|
277
|
+
const scope = ctx.str("scope");
|
|
278
|
+
const qs = scope ? `?scope=${encodeURIComponent(scope)}` : "";
|
|
279
|
+
return getFromMainApp(`${BASE_PATH3}${qs}`);
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
var addSkill = {
|
|
283
|
+
service: "agent",
|
|
284
|
+
command: "+add-skill",
|
|
285
|
+
description: "Create a custom Skill (personal scope)",
|
|
286
|
+
flags: [
|
|
287
|
+
{ name: "name", type: "string", required: true, desc: "Skill name (1-80 chars)" },
|
|
288
|
+
{ name: "description", type: "string", required: true, desc: "Skill description" },
|
|
289
|
+
{ name: "instructions", type: "string", required: true, desc: "Skill instructions (use @- to read from stdin)" },
|
|
290
|
+
{ name: "display-name", type: "string", required: false, desc: "Display name (max 100)" }
|
|
291
|
+
],
|
|
292
|
+
risk: "write",
|
|
293
|
+
validate: (ctx) => {
|
|
294
|
+
const name = ctx.str("name");
|
|
295
|
+
if (name.length < 1 || name.length > 80) {
|
|
296
|
+
throw new Error("--name \u957F\u5EA6\u5FC5\u987B\u5728 1-80 \u4E4B\u95F4");
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
dryRun: (ctx) => ({
|
|
300
|
+
method: "POST",
|
|
301
|
+
url: BASE_PATH3,
|
|
302
|
+
body: {
|
|
303
|
+
name: ctx.str("name"),
|
|
304
|
+
description: ctx.str("description"),
|
|
305
|
+
instructions: ctx.str("instructions") === "@-" ? "(from stdin)" : ctx.str("instructions"),
|
|
306
|
+
displayName: ctx.str("displayName") || void 0
|
|
307
|
+
}
|
|
308
|
+
}),
|
|
309
|
+
execute: async (ctx) => {
|
|
310
|
+
const instructions = await resolveInstructions(ctx.str("instructions"));
|
|
311
|
+
return postToMainApp(BASE_PATH3, {
|
|
312
|
+
name: ctx.str("name"),
|
|
313
|
+
description: ctx.str("description"),
|
|
314
|
+
instructions,
|
|
315
|
+
displayName: ctx.str("displayName") || void 0
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
var delSkill = {
|
|
320
|
+
service: "agent",
|
|
321
|
+
command: "+del-skill",
|
|
322
|
+
description: "Delete a personal Skill (physical delete)",
|
|
323
|
+
flags: [
|
|
324
|
+
{ name: "id", type: "string", required: true, desc: "Skill record ID (CUID)" }
|
|
325
|
+
],
|
|
326
|
+
risk: "write",
|
|
327
|
+
dryRun: (ctx) => ({
|
|
328
|
+
method: "DELETE",
|
|
329
|
+
url: `${BASE_PATH3}?id=${encodeURIComponent(ctx.str("id"))}`
|
|
330
|
+
}),
|
|
331
|
+
execute: async (ctx) => {
|
|
332
|
+
return deleteFromMainApp(`${BASE_PATH3}?id=${encodeURIComponent(ctx.str("id"))}`);
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
var toggleSkill = {
|
|
336
|
+
service: "agent",
|
|
337
|
+
command: "+toggle-skill",
|
|
338
|
+
description: "Enable or disable a Skill",
|
|
339
|
+
flags: [
|
|
340
|
+
{ name: "id", type: "string", required: true, desc: "Skill record ID (CUID)" },
|
|
341
|
+
{ name: "enabled", type: "boolean", required: true, desc: "true to enable, false to disable" }
|
|
342
|
+
],
|
|
343
|
+
risk: "write",
|
|
344
|
+
dryRun: (ctx) => ({
|
|
345
|
+
method: "PATCH",
|
|
346
|
+
url: BASE_PATH3,
|
|
347
|
+
body: { id: ctx.str("id"), enabled: ctx.bool("enabled") }
|
|
348
|
+
}),
|
|
349
|
+
execute: async (ctx) => {
|
|
350
|
+
return patchToMainApp(BASE_PATH3, {
|
|
351
|
+
id: ctx.str("id"),
|
|
352
|
+
enabled: ctx.bool("enabled")
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
// src/commands/te-agent/attachments.ts
|
|
358
|
+
import { readFileSync, existsSync } from "fs";
|
|
359
|
+
import { resolve, basename, extname } from "path";
|
|
360
|
+
var LIST_PATH = "/api/sandbox/agent/attachments";
|
|
361
|
+
var UPLOAD_PATH = "/api/sandbox/agent/attachments/upload";
|
|
362
|
+
function guessMimeType(filePath) {
|
|
363
|
+
const ext = extname(filePath).toLowerCase();
|
|
364
|
+
const map = {
|
|
365
|
+
".png": "image/png",
|
|
366
|
+
".jpg": "image/jpeg",
|
|
367
|
+
".jpeg": "image/jpeg",
|
|
368
|
+
".gif": "image/gif",
|
|
369
|
+
".webp": "image/webp",
|
|
370
|
+
".svg": "image/svg+xml",
|
|
371
|
+
".pdf": "application/pdf",
|
|
372
|
+
".md": "text/markdown",
|
|
373
|
+
".txt": "text/plain",
|
|
374
|
+
".csv": "text/csv",
|
|
375
|
+
".json": "application/json",
|
|
376
|
+
".html": "text/html",
|
|
377
|
+
".xml": "application/xml",
|
|
378
|
+
".doc": "application/msword",
|
|
379
|
+
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
380
|
+
".xls": "application/vnd.ms-excel",
|
|
381
|
+
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
382
|
+
".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
383
|
+
".zip": "application/zip"
|
|
384
|
+
};
|
|
385
|
+
return map[ext] || "application/octet-stream";
|
|
386
|
+
}
|
|
387
|
+
function resolveFilePaths(ctx) {
|
|
388
|
+
const file = ctx.str("file");
|
|
389
|
+
const files = ctx.str("files");
|
|
390
|
+
if (file && files) {
|
|
391
|
+
throw new Error("--file \u548C --files \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528");
|
|
392
|
+
}
|
|
393
|
+
if (!file && !files) {
|
|
394
|
+
throw new Error("\u5FC5\u987B\u6307\u5B9A --file \u6216 --files");
|
|
395
|
+
}
|
|
396
|
+
if (file) return [file];
|
|
397
|
+
try {
|
|
398
|
+
const parsed = JSON.parse(files);
|
|
399
|
+
if (!Array.isArray(parsed)) throw new Error("--files \u5FC5\u987B\u662F JSON \u6570\u7EC4");
|
|
400
|
+
return parsed.map((p) => {
|
|
401
|
+
if (typeof p !== "string") throw new Error("--files \u6570\u7EC4\u5143\u7D20\u5FC5\u987B\u662F\u5B57\u7B26\u4E32");
|
|
402
|
+
return p;
|
|
403
|
+
});
|
|
404
|
+
} catch (err) {
|
|
405
|
+
if (err instanceof SyntaxError) throw new Error("--files \u5FC5\u987B\u662F\u6709\u6548 JSON \u6570\u7EC4");
|
|
406
|
+
throw err;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
async function uploadFiles(filePaths) {
|
|
410
|
+
const formData = new FormData();
|
|
411
|
+
for (const filePath of filePaths) {
|
|
412
|
+
const resolved = resolve(filePath);
|
|
413
|
+
if (!existsSync(resolved)) {
|
|
414
|
+
throw new Error(`\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${resolved}`);
|
|
415
|
+
}
|
|
416
|
+
const buffer = readFileSync(resolved);
|
|
417
|
+
const mimeType = guessMimeType(resolved);
|
|
418
|
+
const blob = new Blob([buffer], { type: mimeType });
|
|
419
|
+
formData.append("file", blob, basename(resolved));
|
|
420
|
+
}
|
|
421
|
+
return uploadToMainApp(UPLOAD_PATH, formData);
|
|
422
|
+
}
|
|
423
|
+
var listAttachments = {
|
|
424
|
+
service: "agent",
|
|
425
|
+
command: "+list-attachments",
|
|
426
|
+
description: "List user attachments (paginated)",
|
|
427
|
+
flags: [
|
|
428
|
+
{ name: "q", type: "string", required: false, desc: "Search keyword" },
|
|
429
|
+
{ name: "type", type: "string", required: false, desc: "Filter by type: image | document" },
|
|
430
|
+
{ name: "page", type: "number", required: false, desc: "Page number (default 1)" },
|
|
431
|
+
{ name: "page-size", type: "number", required: false, desc: "Page size (default 20, max 100)" }
|
|
432
|
+
],
|
|
433
|
+
risk: "read",
|
|
434
|
+
validate: (ctx) => {
|
|
435
|
+
const type = ctx.str("type");
|
|
436
|
+
if (type && !["image", "document"].includes(type)) {
|
|
437
|
+
throw new Error("--type \u5FC5\u987B\u662F image \u6216 document");
|
|
438
|
+
}
|
|
439
|
+
},
|
|
440
|
+
dryRun: (ctx) => {
|
|
441
|
+
const params = new URLSearchParams();
|
|
442
|
+
if (ctx.str("q")) params.set("q", ctx.str("q"));
|
|
443
|
+
if (ctx.str("type")) params.set("type", ctx.str("type"));
|
|
444
|
+
if (ctx.num("page")) params.set("page", String(ctx.num("page")));
|
|
445
|
+
if (ctx.num("pageSize")) params.set("pageSize", String(ctx.num("pageSize")));
|
|
446
|
+
const qs = params.toString();
|
|
447
|
+
return { method: "GET", url: `${LIST_PATH}${qs ? "?" + qs : ""}` };
|
|
448
|
+
},
|
|
449
|
+
execute: async (ctx) => {
|
|
450
|
+
const params = new URLSearchParams();
|
|
451
|
+
if (ctx.str("q")) params.set("q", ctx.str("q"));
|
|
452
|
+
if (ctx.str("type")) params.set("type", ctx.str("type"));
|
|
453
|
+
if (ctx.num("page")) params.set("page", String(ctx.num("page")));
|
|
454
|
+
if (ctx.num("pageSize")) params.set("pageSize", String(ctx.num("pageSize")));
|
|
455
|
+
const qs = params.toString();
|
|
456
|
+
return getFromMainApp(`${LIST_PATH}${qs ? "?" + qs : ""}`);
|
|
457
|
+
}
|
|
458
|
+
};
|
|
459
|
+
var addAttachment = {
|
|
460
|
+
service: "agent",
|
|
461
|
+
command: "+add-attachment",
|
|
462
|
+
description: "Upload sandbox file(s) to attachment library",
|
|
463
|
+
flags: [
|
|
464
|
+
{ name: "file", type: "string", required: false, desc: "Single file path" },
|
|
465
|
+
{ name: "files", type: "string", required: false, desc: `JSON array of file paths, e.g. '["./a.png","./b.pdf"]'` }
|
|
466
|
+
],
|
|
467
|
+
risk: "write",
|
|
468
|
+
validate: (ctx) => {
|
|
469
|
+
resolveFilePaths(ctx);
|
|
470
|
+
},
|
|
471
|
+
dryRun: (ctx) => {
|
|
472
|
+
const paths = resolveFilePaths(ctx);
|
|
473
|
+
return { method: "POST", url: UPLOAD_PATH, body: { files: paths } };
|
|
474
|
+
},
|
|
475
|
+
execute: async (ctx) => {
|
|
476
|
+
const paths = resolveFilePaths(ctx);
|
|
477
|
+
return uploadFiles(paths);
|
|
478
|
+
}
|
|
479
|
+
};
|
|
480
|
+
var delAttachment = {
|
|
481
|
+
service: "agent",
|
|
482
|
+
command: "+del-attachment",
|
|
483
|
+
description: "Soft-delete an attachment",
|
|
484
|
+
flags: [
|
|
485
|
+
{ name: "id", type: "string", required: true, desc: "Attachment ID" }
|
|
486
|
+
],
|
|
487
|
+
risk: "write",
|
|
488
|
+
dryRun: (ctx) => ({
|
|
489
|
+
method: "DELETE",
|
|
490
|
+
url: `${LIST_PATH}?id=${encodeURIComponent(ctx.str("id"))}`
|
|
491
|
+
}),
|
|
492
|
+
execute: async (ctx) => {
|
|
493
|
+
return deleteFromMainApp(`${LIST_PATH}?id=${encodeURIComponent(ctx.str("id"))}`);
|
|
494
|
+
}
|
|
495
|
+
};
|
|
496
|
+
|
|
497
|
+
// src/commands/te-agent/index.ts
|
|
498
|
+
var commands = [
|
|
499
|
+
// 模型管理
|
|
500
|
+
listModels,
|
|
501
|
+
addModel,
|
|
502
|
+
delModel,
|
|
503
|
+
toggleModel,
|
|
504
|
+
// MCP 服务管理
|
|
505
|
+
listMcps,
|
|
506
|
+
addMcp,
|
|
507
|
+
delMcp,
|
|
508
|
+
toggleMcp,
|
|
509
|
+
// Skill 管理
|
|
510
|
+
listSkills,
|
|
511
|
+
addSkill,
|
|
512
|
+
delSkill,
|
|
513
|
+
toggleSkill,
|
|
514
|
+
// 附件库管理
|
|
515
|
+
listAttachments,
|
|
516
|
+
addAttachment,
|
|
517
|
+
delAttachment
|
|
518
|
+
];
|
|
519
|
+
var te_agent_default = commands;
|
|
520
|
+
export {
|
|
521
|
+
te_agent_default as default
|
|
522
|
+
};
|