@cicctencent/agent-server 0.2.28 → 0.2.31

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 (61) hide show
  1. package/dist/cjs/agent/agent-server.d.ts.map +1 -1
  2. package/dist/cjs/agent/agent-server.js +202 -0
  3. package/dist/cjs/agent/agent-server.js.map +1 -1
  4. package/dist/cjs/automation/index.d.ts +5 -0
  5. package/dist/cjs/automation/index.d.ts.map +1 -0
  6. package/dist/cjs/automation/index.js +12 -0
  7. package/dist/cjs/automation/index.js.map +1 -0
  8. package/dist/cjs/automation/node-task-library.d.ts +11 -0
  9. package/dist/cjs/automation/node-task-library.d.ts.map +1 -0
  10. package/dist/cjs/automation/node-task-library.js +46 -0
  11. package/dist/cjs/automation/node-task-library.js.map +1 -0
  12. package/dist/cjs/automation/node-task-runtime.d.ts +19 -0
  13. package/dist/cjs/automation/node-task-runtime.d.ts.map +1 -0
  14. package/dist/cjs/automation/node-task-runtime.js +237 -0
  15. package/dist/cjs/automation/node-task-runtime.js.map +1 -0
  16. package/dist/cjs/automation/node-task-validator.d.ts +3 -0
  17. package/dist/cjs/automation/node-task-validator.d.ts.map +1 -0
  18. package/dist/cjs/automation/node-task-validator.js +57 -0
  19. package/dist/cjs/automation/node-task-validator.js.map +1 -0
  20. package/dist/cjs/index.d.ts +2 -0
  21. package/dist/cjs/index.d.ts.map +1 -1
  22. package/dist/cjs/index.js +27 -20
  23. package/dist/cjs/index.js.map +1 -1
  24. package/dist/cjs/model/automation.d.ts +19 -1
  25. package/dist/cjs/model/automation.d.ts.map +1 -1
  26. package/dist/cjs/tool/tools/automation.d.ts.map +1 -1
  27. package/dist/cjs/tool/tools/automation.js +484 -12
  28. package/dist/cjs/tool/tools/automation.js.map +1 -1
  29. package/dist/cjs/types.d.ts +5 -0
  30. package/dist/cjs/types.d.ts.map +1 -1
  31. package/dist/esm/agent/agent-server.d.ts.map +1 -1
  32. package/dist/esm/agent/agent-server.js +203 -1
  33. package/dist/esm/agent/agent-server.js.map +1 -1
  34. package/dist/esm/automation/index.d.ts +5 -0
  35. package/dist/esm/automation/index.d.ts.map +1 -0
  36. package/dist/esm/automation/index.js +4 -0
  37. package/dist/esm/automation/index.js.map +1 -0
  38. package/dist/esm/automation/node-task-library.d.ts +11 -0
  39. package/dist/esm/automation/node-task-library.d.ts.map +1 -0
  40. package/dist/esm/automation/node-task-library.js +41 -0
  41. package/dist/esm/automation/node-task-library.js.map +1 -0
  42. package/dist/esm/automation/node-task-runtime.d.ts +19 -0
  43. package/dist/esm/automation/node-task-runtime.d.ts.map +1 -0
  44. package/dist/esm/automation/node-task-runtime.js +199 -0
  45. package/dist/esm/automation/node-task-runtime.js.map +1 -0
  46. package/dist/esm/automation/node-task-validator.d.ts +3 -0
  47. package/dist/esm/automation/node-task-validator.d.ts.map +1 -0
  48. package/dist/esm/automation/node-task-validator.js +54 -0
  49. package/dist/esm/automation/node-task-validator.js.map +1 -0
  50. package/dist/esm/index.d.ts +2 -0
  51. package/dist/esm/index.d.ts.map +1 -1
  52. package/dist/esm/index.js +2 -0
  53. package/dist/esm/index.js.map +1 -1
  54. package/dist/esm/model/automation.d.ts +19 -1
  55. package/dist/esm/model/automation.d.ts.map +1 -1
  56. package/dist/esm/tool/tools/automation.d.ts.map +1 -1
  57. package/dist/esm/tool/tools/automation.js +484 -12
  58. package/dist/esm/tool/tools/automation.js.map +1 -1
  59. package/dist/esm/types.d.ts +5 -0
  60. package/dist/esm/types.d.ts.map +1 -1
  61. package/package.json +9 -9
@@ -1,30 +1,58 @@
1
1
  // ============================================================
2
- // 自动化任务工具:create_automation, list_automations, delete_automation
2
+ // 自动化任务工具:create_automation, create_code_automation,
3
+ // trial_run_automation, list_automations, delete_automation,
4
+ // stop_automation
3
5
  // ============================================================
4
6
  import { getAutomationStore } from "../../store/app-stores.js";
7
+ import { getNodeAutomationRuntimeRunner, validateNodeAutomationTaskPackage, getNodeAutomationLibraryRegistry } from "../../automation/index.js";
5
8
  export function createAutomationTools() {
6
9
  return [
7
10
  // ---- create_automation ----
8
- // 创建定时自动化任务(cron 表达式 + Agent prompt)
11
+ // 创建定时自动化任务(Prompt 型或 Code 型)
9
12
  {
10
13
  definition: {
11
14
  type: 'function',
12
15
  function: {
13
16
  name: 'create_automation',
14
- description: 'Create a scheduled automation task that runs an Agent prompt on a cron schedule. ' +
15
- 'The task will automatically trigger at the specified time and execute the prompt as a new Agent session. ' +
16
- 'Common cron examples: "0 9 * * *" (daily 9AM), "0 9 * * 1" (every Monday 9AM), "*/30 * * * *" (every 30 min). ' +
17
- 'Use this to set up recurring reports, monitoring, data sync, or any periodic Agent task.',
17
+ description: 'Create a scheduled automation task that runs on a cron schedule. ' +
18
+ 'By default creates a Prompt-type task (runs an Agent prompt). ' +
19
+ 'Set runtime="nodejs" to create a Code-type task that executes JavaScript code in a sandboxed container. ' +
20
+ 'For Code-type tasks, you must provide codePackage with entry and sourceFiles. ' +
21
+ 'Common cron examples: "0 9 * * *" (daily 9AM), "0 9 * * 1" (every Monday 9AM), "*/30 * * * *" (every 30 min).',
18
22
  parameters: {
19
23
  type: 'object',
20
24
  properties: {
21
25
  name: { type: 'string', description: 'Task name (e.g. "Daily Summary Report")' },
22
26
  description: { type: 'string', description: 'Task description (optional)' },
23
27
  schedule: { type: 'string', description: 'Cron expression (5 fields: min hour day month weekday). e.g. "0 9 * * *" for daily at 9AM' },
24
- prompt: { type: 'string', description: 'The Agent prompt to execute when the task triggers. This should be a complete instruction, e.g. "Generate a summary of today\'s key metrics and send it via email to admin@example.com"' },
28
+ prompt: { type: 'string', description: 'The Agent prompt to execute when the task triggers (for Prompt-type tasks). This should be a complete instruction, e.g. "Generate a summary of today\'s key metrics and send it via email to admin@example.com"' },
29
+ runtime: { type: 'string', enum: ['prompt', 'nodejs'], description: 'Task runtime type. "prompt" (default) runs an Agent prompt; "nodejs" runs JavaScript code in a sandboxed container.' },
30
+ codePackage: {
31
+ type: 'object',
32
+ description: 'Required for Code-type (runtime="nodejs") tasks. Contains the task code package.',
33
+ properties: {
34
+ entry: { type: 'string', description: 'Entry file name, e.g. "index.js"' },
35
+ sourceFiles: {
36
+ type: 'object',
37
+ description: 'Map of filename to file content. e.g. {"index.js": "module.exports.run = async function(ctx) { ... }"}',
38
+ },
39
+ version: { type: 'string', description: 'Code package version (default: "1.0.0")' },
40
+ dependencies: { type: 'object', description: 'npm dependencies, e.g. {"axios": "^1.0.0"}' },
41
+ requiredLibraries: { type: 'array', items: { type: 'string' }, description: 'Names of registered base libraries to inject into the task context' },
42
+ runtimeConfig: {
43
+ type: 'object',
44
+ description: 'Runtime configuration',
45
+ properties: {
46
+ timeoutMs: { type: 'number', description: 'Execution timeout in milliseconds (default: 60000)' },
47
+ memoryLimitMb: { type: 'number', description: 'Memory limit in MB' },
48
+ envKeys: { type: 'array', items: { type: 'string' }, description: 'Whitelist of environment variable keys' },
49
+ },
50
+ },
51
+ },
52
+ },
25
53
  enabled: { type: 'boolean', description: 'Whether to enable the task immediately (default: true)' },
26
54
  },
27
- required: ['name', 'schedule', 'prompt'],
55
+ required: ['name', 'schedule'],
28
56
  },
29
57
  },
30
58
  },
@@ -35,6 +63,41 @@ export function createAutomationTools() {
35
63
  if (!cron.validate(schedule)) {
36
64
  return `ERROR: Invalid cron expression "${schedule}". Use 5-field format: min hour day month weekday.\nExamples: "0 9 * * *" (daily 9AM), "0 9 * * 1" (Monday 9AM), "*/30 * * * *" (every 30min)`;
37
65
  }
66
+ const runtime = args.runtime || 'prompt';
67
+ // Code 型任务必须有 codePackage
68
+ if (runtime === 'nodejs') {
69
+ if (!args.codePackage) {
70
+ return `ERROR: Code-type (runtime="nodejs") tasks require a "codePackage" parameter with "entry" and "sourceFiles".\nExample:\n{\n "runtime": "nodejs",\n "codePackage": {\n "entry": "index.js",\n "sourceFiles": {\n "index.js": "module.exports.run = async function(ctx) { ctx.logger.info('Hello'); return { ok: true }; }"\n }\n }\n}`;
71
+ }
72
+ // 构建并校验 codePackage
73
+ const codePackage = buildCodePackage(args.codePackage, args.name);
74
+ const validation = validateNodeAutomationTaskPackage(codePackage);
75
+ if (!validation.valid) {
76
+ const issues = validation.issues.map(i => ` - [${i.severity}] ${i.code}: ${i.message}`).join('\n');
77
+ return `ERROR: Code package validation failed:\n${issues}`;
78
+ }
79
+ const store = getAutomationStore();
80
+ const item = store.create({
81
+ name: args.name,
82
+ description: args.description || '',
83
+ schedule,
84
+ prompt: args.prompt || `Code task: ${args.name}`,
85
+ enabled: args.enabled !== false,
86
+ lastStatus: 'idle',
87
+ runtime: 'nodejs',
88
+ codePackage,
89
+ version: codePackage.version,
90
+ });
91
+ const automationProvider = ctx.custom?.automationProvider;
92
+ if (automationProvider?.refreshScheduler) {
93
+ automationProvider.refreshScheduler();
94
+ }
95
+ return `Code automation created successfully!\n Name: ${item.name}\n Schedule: ${schedule}\n ID: ${item.id}\n Runtime: nodejs\n Entry: ${codePackage.entry}\n Version: ${codePackage.version}\n Enabled: ${item.enabled}\n\nThe task will trigger automatically according to the schedule.`;
96
+ }
97
+ // Prompt 型任务
98
+ if (!args.prompt) {
99
+ return `ERROR: Prompt-type tasks require a "prompt" parameter.`;
100
+ }
38
101
  const store = getAutomationStore();
39
102
  const item = store.create({
40
103
  name: args.name,
@@ -43,8 +106,8 @@ export function createAutomationTools() {
43
106
  prompt: args.prompt,
44
107
  enabled: args.enabled !== false,
45
108
  lastStatus: 'idle',
109
+ runtime: 'prompt',
46
110
  });
47
- // 通过 SPI Provider 刷新调度器
48
111
  const automationProvider = ctx.custom?.automationProvider;
49
112
  if (automationProvider?.refreshScheduler) {
50
113
  automationProvider.refreshScheduler();
@@ -58,6 +121,338 @@ export function createAutomationTools() {
58
121
  category: 'builtin',
59
122
  concurrent: false,
60
123
  },
124
+ // ---- get_automation_environment ----
125
+ // 查询 Code 型任务执行环境(可用库、API、安全规则、代码模板)
126
+ {
127
+ definition: {
128
+ type: 'function',
129
+ function: {
130
+ name: 'get_automation_environment',
131
+ description: 'Get the Code automation execution environment info BEFORE writing task code. ' +
132
+ 'Returns available base libraries (with names, descriptions, and APIs), the context API shape, ' +
133
+ 'security rules (forbidden patterns), sandbox constraints, and a multi-file code template. ' +
134
+ 'Always call this first when creating Code-type automation tasks to ensure generated code matches the environment.',
135
+ parameters: {
136
+ type: 'object',
137
+ properties: {
138
+ detail: { type: 'string', enum: ['summary', 'full'], description: 'Level of detail. "summary" (default) returns library names + descriptions; "full" also returns library API signatures and code templates.' },
139
+ },
140
+ },
141
+ },
142
+ },
143
+ executor: async (args) => {
144
+ try {
145
+ const registry = getNodeAutomationLibraryRegistry();
146
+ const libraries = registry.list();
147
+ const detail = args.detail || 'summary';
148
+ const lines = [];
149
+ lines.push('=== Code Automation Execution Environment ===\n');
150
+ // 1. 可用基础库
151
+ lines.push('## Available Base Libraries');
152
+ if (libraries.length === 0) {
153
+ lines.push(' (none registered)');
154
+ }
155
+ else {
156
+ for (const lib of libraries) {
157
+ lines.push(` - ${lib.name} v${lib.version}: ${lib.description || '(no description)'}`);
158
+ if (lib.permissions?.length) {
159
+ lines.push(` Permissions: ${lib.permissions.join(', ')}`);
160
+ }
161
+ }
162
+ }
163
+ lines.push('');
164
+ // 2. Context API
165
+ lines.push('## Context API (run function receives this)');
166
+ lines.push(' context = {');
167
+ lines.push(' taskId: number | string // Task ID');
168
+ lines.push(' inputs: Record<string, unknown> // Input parameters');
169
+ lines.push(' env: Record<string, string> // Whitelisted env vars');
170
+ lines.push(' logger: { debug, info, warn, error } // Structured logger');
171
+ lines.push(' artifacts: { writeText(path, content), writeJson(path, data) } // File output');
172
+ lines.push(' libs: Record<string, unknown> // Injected base libraries (by name)');
173
+ lines.push(' workspace: Record<string, unknown> | undefined // Workspace context');
174
+ lines.push(' }');
175
+ lines.push('');
176
+ // 3. 安全规则
177
+ lines.push('## Security Rules (forbidden in task code)');
178
+ lines.push(' - Cannot require/import "child_process" — use libs instead');
179
+ lines.push(' - Cannot write to absolute paths (writeFile("/...")) — use context.artifacts');
180
+ lines.push(' - Cannot dump process.env (JSON.stringify(process.env))');
181
+ lines.push(' - Cannot run npm/pnpm/yarn install at runtime');
182
+ lines.push(' - Source file paths must be relative, no ".." traversal');
183
+ lines.push('');
184
+ // 4. 沙箱约束
185
+ lines.push('## Sandbox Constraints');
186
+ lines.push(' - Runtime: Node.js (CommonJS, .cjs)');
187
+ lines.push(' - Timeout: 1000ms ~ 600000ms (default: 60000ms)');
188
+ lines.push(' - Entry file must export: module.exports.run = async function(context) { ... }');
189
+ lines.push(' - Multiple files supported via sourceFiles map');
190
+ lines.push(' - Files can require() each other by relative path');
191
+ lines.push('');
192
+ // 5. 完整模板
193
+ if (detail === 'full') {
194
+ lines.push('## Multi-File Code Template');
195
+ lines.push('```javascript');
196
+ lines.push('// === index.js (entry) ===');
197
+ lines.push('const { analyzeStocks } = require("./analyzer.js");');
198
+ lines.push('');
199
+ lines.push('module.exports.run = async function(context) {');
200
+ lines.push(' const { inputs, logger, libs, artifacts } = context;');
201
+ lines.push(' logger.info("Task started", { taskId: context.taskId });');
202
+ lines.push('');
203
+ lines.push(' // Use injected libraries:');
204
+ lines.push(' // const http = libs.http; // if requiredLibraries includes "http"');
205
+ lines.push(' // const resp = await http.get("https://api.example.com/data");');
206
+ lines.push('');
207
+ lines.push(' const result = await analyzeStocks(inputs.symbols || []);');
208
+ lines.push('');
209
+ lines.push(' // Write output artifacts:');
210
+ lines.push(' await artifacts.writeJson("result.json", result);');
211
+ lines.push('');
212
+ lines.push(' return { success: true, count: result.length };');
213
+ lines.push('};');
214
+ lines.push('');
215
+ lines.push('// === analyzer.js (helper module) ===');
216
+ lines.push('async function analyzeStocks(symbols) {');
217
+ lines.push(' // Business logic here');
218
+ lines.push(' return symbols.map(s => ({ symbol: s, score: Math.random() }));');
219
+ lines.push('}');
220
+ lines.push('module.exports = { analyzeStocks };');
221
+ lines.push('```');
222
+ lines.push('');
223
+ lines.push('## How to create multi-file tasks:');
224
+ lines.push(' Use create_code_automation with the "files" parameter:');
225
+ lines.push(' {');
226
+ lines.push(' "name": "Stock Analysis",');
227
+ lines.push(' "schedule": "*/10 * * * *",');
228
+ lines.push(' "entry": "index.js",');
229
+ lines.push(' "files": {');
230
+ lines.push(' "index.js": "const { analyzeStocks } = require(\'./analyzer.js\'); ...",');
231
+ lines.push(' "analyzer.js": "async function analyzeStocks(symbols) { ... } module.exports = { analyzeStocks };"');
232
+ lines.push(' },');
233
+ lines.push(' "requiredLibraries": ["http", "data"]');
234
+ lines.push(' }');
235
+ }
236
+ return lines.join('\n');
237
+ }
238
+ catch (e) {
239
+ return `ERROR getting environment: ${e.message || e}`;
240
+ }
241
+ },
242
+ category: 'builtin',
243
+ concurrent: true,
244
+ },
245
+ // ---- create_code_automation ----
246
+ // 便捷工具:创建 Code 型自动化任务(支持单文件和多文件)
247
+ {
248
+ definition: {
249
+ type: 'function',
250
+ function: {
251
+ name: 'create_code_automation',
252
+ description: 'Create a Code-type automation task that runs JavaScript code on a cron schedule. ' +
253
+ 'The code runs in a sandboxed NodeJS container with access to registered base libraries. ' +
254
+ 'The entry code must export a run(context) function that receives { inputs, env, logger, artifacts, libs, workspace }. ' +
255
+ 'Supports multi-file projects: use "files" (map of filename to content) for complex tasks, or "code" (single string) for simple tasks. ' +
256
+ 'TIP: Call get_automation_environment first to discover available libraries, APIs, and security rules.',
257
+ parameters: {
258
+ type: 'object',
259
+ properties: {
260
+ name: { type: 'string', description: 'Task name (e.g. "Stock Analysis Every 10min")' },
261
+ description: { type: 'string', description: 'Task description (optional)' },
262
+ schedule: { type: 'string', description: 'Cron expression (5 fields). e.g. "*/10 * * * *" for every 10 min' },
263
+ code: { type: 'string', description: 'JavaScript code for a SINGLE-FILE task entry. Use this for simple tasks. Must export run(context). Mutually exclusive with "files".' },
264
+ files: {
265
+ type: 'object',
266
+ description: 'Multi-file project: map of filename to file content. Use this for complex tasks requiring multiple modules. ' +
267
+ 'Files can require() each other by relative path. Example: {"index.js": "const { analyze } = require(\'./analyzer.js\'); ...", "analyzer.js": "..."}. ' +
268
+ 'Mutually exclusive with "code".',
269
+ },
270
+ entry: { type: 'string', description: 'Entry file name (default: "index.js"). Must match a key in "files" or be the name for "code".' },
271
+ version: { type: 'string', description: 'Code package version (default: "1.0.0")' },
272
+ requiredLibraries: { type: 'array', items: { type: 'string' }, description: 'Names of registered base libraries to inject (e.g. ["http", "data", "datetime"]). Call get_automation_environment to see available libraries.' },
273
+ timeoutMs: { type: 'number', description: 'Execution timeout in milliseconds (default: 60000, max: 600000)' },
274
+ enabled: { type: 'boolean', description: 'Whether to enable the task immediately (default: true)' },
275
+ },
276
+ required: ['name', 'schedule'],
277
+ },
278
+ },
279
+ },
280
+ executor: async (args, ctx) => {
281
+ try {
282
+ const cron = await import('node-cron');
283
+ const schedule = args.schedule;
284
+ if (!cron.validate(schedule)) {
285
+ return `ERROR: Invalid cron expression "${schedule}".`;
286
+ }
287
+ const entry = args.entry || 'index.js';
288
+ // 构建 sourceFiles:支持 code(单文件)或 files(多文件)
289
+ let sourceFiles;
290
+ if (args.files && typeof args.files === 'object') {
291
+ sourceFiles = args.files;
292
+ if (!sourceFiles[entry]) {
293
+ return `ERROR: Entry file "${entry}" not found in "files". Available files: ${Object.keys(sourceFiles).join(', ')}`;
294
+ }
295
+ }
296
+ else if (args.code) {
297
+ sourceFiles = { [entry]: args.code };
298
+ }
299
+ else {
300
+ return `ERROR: Either "code" (single file) or "files" (multi-file) must be provided.`;
301
+ }
302
+ const codePackage = {
303
+ id: String(Date.now()),
304
+ name: args.name,
305
+ version: args.version || '1.0.0',
306
+ runtime: 'nodejs',
307
+ entry,
308
+ sourceFiles,
309
+ requiredLibraries: args.requiredLibraries,
310
+ runtimeConfig: args.timeoutMs ? { timeoutMs: args.timeoutMs } : undefined,
311
+ };
312
+ // 校验
313
+ const validation = validateNodeAutomationTaskPackage(codePackage);
314
+ if (!validation.valid) {
315
+ const issues = validation.issues.map(i => ` - [${i.severity}] ${i.code}: ${i.message}`).join('\n');
316
+ return `ERROR: Code validation failed:\n${issues}`;
317
+ }
318
+ const store = getAutomationStore();
319
+ const item = store.create({
320
+ name: args.name,
321
+ description: args.description || '',
322
+ schedule,
323
+ prompt: `Code task: ${args.name}`,
324
+ enabled: args.enabled !== false,
325
+ lastStatus: 'idle',
326
+ runtime: 'nodejs',
327
+ codePackage,
328
+ version: codePackage.version,
329
+ });
330
+ const automationProvider = ctx.custom?.automationProvider;
331
+ if (automationProvider?.refreshScheduler) {
332
+ automationProvider.refreshScheduler();
333
+ }
334
+ const fileCount = Object.keys(sourceFiles).length;
335
+ return `Code automation created successfully!\n Name: ${item.name}\n Schedule: ${schedule}\n ID: ${item.id}\n Runtime: nodejs\n Entry: ${entry}\n Files: ${fileCount} (${Object.keys(sourceFiles).join(', ')})\n Version: ${codePackage.version}\n Enabled: ${item.enabled}\n\nThe task code will run in a sandboxed NodeJS container on the schedule.`;
336
+ }
337
+ catch (e) {
338
+ return `ERROR creating code automation: ${e.message || e}`;
339
+ }
340
+ },
341
+ category: 'builtin',
342
+ concurrent: false,
343
+ },
344
+ // ---- trial_run_automation ----
345
+ // 试运行 Code 型任务(校验 + 执行,不保存记录,支持多文件)
346
+ {
347
+ definition: {
348
+ type: 'function',
349
+ function: {
350
+ name: 'trial_run_automation',
351
+ description: 'Trial-run a Code-type automation task without saving a run record. ' +
352
+ 'Validates the code package and executes it in the sandbox, returning stdout, stderr, exit code, logs, and result. ' +
353
+ 'Supports multi-file projects via "files" parameter. ' +
354
+ 'If automationId is provided, uses the stored codePackage (can override with code/files); otherwise uses provided code/files.',
355
+ parameters: {
356
+ type: 'object',
357
+ properties: {
358
+ automationId: { type: 'number', description: 'Existing automation task ID to trial-run (uses its stored codePackage)' },
359
+ code: { type: 'string', description: 'Single-file code to trial-run (mutually exclusive with "files")' },
360
+ files: { type: 'object', description: 'Multi-file project: map of filename to content (mutually exclusive with "code")' },
361
+ entry: { type: 'string', description: 'Entry file name (default: "index.js")' },
362
+ inputs: { type: 'object', description: 'Input parameters to pass to the task run(context) function' },
363
+ timeoutMs: { type: 'number', description: 'Execution timeout in milliseconds (default: 30000)' },
364
+ },
365
+ },
366
+ },
367
+ },
368
+ executor: async (args) => {
369
+ try {
370
+ let codePackage;
371
+ const entry = args.entry || 'index.js';
372
+ if (args.automationId) {
373
+ // 使用已存储的 codePackage
374
+ const store = getAutomationStore();
375
+ const automation = store.findById(Number(args.automationId));
376
+ if (!automation) {
377
+ return `ERROR: Automation task with ID ${args.automationId} not found.`;
378
+ }
379
+ if (!automation.codePackage) {
380
+ return `ERROR: Automation task "${automation.name}" (ID: ${args.automationId}) is not a Code-type task.`;
381
+ }
382
+ codePackage = automation.codePackage;
383
+ // 如果提供了 code 或 files,覆盖源码
384
+ if (args.files) {
385
+ codePackage = { ...codePackage, entry, sourceFiles: args.files };
386
+ }
387
+ else if (args.code) {
388
+ codePackage = { ...codePackage, entry, sourceFiles: { ...codePackage.sourceFiles, [entry]: args.code } };
389
+ }
390
+ }
391
+ else if (args.files) {
392
+ // 多文件试运行
393
+ codePackage = {
394
+ id: `trial_${Date.now()}`,
395
+ version: '0.0.0-trial',
396
+ runtime: 'nodejs',
397
+ entry,
398
+ sourceFiles: args.files,
399
+ };
400
+ }
401
+ else if (args.code) {
402
+ // 单文件试运行
403
+ codePackage = {
404
+ id: `trial_${Date.now()}`,
405
+ version: '0.0.0-trial',
406
+ runtime: 'nodejs',
407
+ entry,
408
+ sourceFiles: { [entry]: args.code },
409
+ };
410
+ }
411
+ else {
412
+ return `ERROR: Either "automationId", "code", or "files" must be provided.`;
413
+ }
414
+ // 校验
415
+ const validation = validateNodeAutomationTaskPackage(codePackage);
416
+ if (!validation.valid) {
417
+ const issues = validation.issues.map(i => ` - [${i.severity}] ${i.code}: ${i.message}`).join('\n');
418
+ return `Validation FAILED:\n${issues}`;
419
+ }
420
+ // 执行
421
+ const result = await getNodeAutomationRuntimeRunner().execute(codePackage, {
422
+ taskId: Number(args.automationId) || 0,
423
+ inputs: args.inputs || {},
424
+ env: {},
425
+ timeoutMs: args.timeoutMs || 30000,
426
+ });
427
+ const lines = [];
428
+ lines.push(`Trial run completed.`);
429
+ lines.push(` Exit code: ${result.exitCode}`);
430
+ lines.push(` Duration: ${result.duration}ms`);
431
+ if (result.stdout)
432
+ lines.push(` stdout:\n${result.stdout.slice(0, 2000)}`);
433
+ if (result.stderr)
434
+ lines.push(` stderr:\n${result.stderr.slice(0, 2000)}`);
435
+ if (result.logs && result.logs.length > 0) {
436
+ lines.push(` Logs:`);
437
+ for (const log of result.logs.slice(0, 50)) {
438
+ lines.push(` [${log.level}] ${log.message}`);
439
+ }
440
+ }
441
+ if (result.artifacts && result.artifacts.length > 0) {
442
+ lines.push(` Artifacts: ${result.artifacts.join(', ')}`);
443
+ }
444
+ if (result.result !== undefined) {
445
+ lines.push(` Result: ${JSON.stringify(result.result).slice(0, 2000)}`);
446
+ }
447
+ return lines.join('\n');
448
+ }
449
+ catch (e) {
450
+ return `ERROR during trial run: ${e.message || e}`;
451
+ }
452
+ },
453
+ category: 'builtin',
454
+ concurrent: false,
455
+ },
61
456
  // ---- list_automations ----
62
457
  // 列出所有自动化任务
63
458
  {
@@ -65,7 +460,7 @@ export function createAutomationTools() {
65
460
  type: 'function',
66
461
  function: {
67
462
  name: 'list_automations',
68
- description: 'List all scheduled automation tasks. Returns task details including name, schedule, prompt, status, and last run time. ' +
463
+ description: 'List all scheduled automation tasks. Returns task details including name, schedule, runtime type, prompt/code info, status, and last run time. ' +
69
464
  'Use this to review existing automations before creating or modifying them.',
70
465
  parameters: {
71
466
  type: 'object',
@@ -88,7 +483,18 @@ export function createAutomationTools() {
88
483
  const lines = items.map((i, idx) => {
89
484
  const parts = [`[${idx + 1}] ${i.name} (ID: ${i.id})`];
90
485
  parts.push(` Schedule: ${i.schedule}`);
91
- parts.push(` Prompt: ${(i.prompt || '').slice(0, 100)}${i.prompt?.length > 100 ? '...' : ''}`);
486
+ parts.push(` Runtime: ${i.runtime || 'prompt'}`);
487
+ if (i.runtime === 'nodejs') {
488
+ parts.push(` Entry: ${i.codePackage?.entry || 'index.js'}`);
489
+ parts.push(` Version: ${i.version || '1.0.0'}`);
490
+ if (i.codePackage?.requiredLibraries?.length) {
491
+ parts.push(` Libraries: ${i.codePackage.requiredLibraries.join(', ')}`);
492
+ }
493
+ }
494
+ else {
495
+ const promptPreview = (i.prompt || '').slice(0, 100);
496
+ parts.push(` Prompt: ${promptPreview}${i.prompt?.length > 100 ? '...' : ''}`);
497
+ }
92
498
  parts.push(` Enabled: ${i.enabled}`);
93
499
  if (i.lastRunAt)
94
500
  parts.push(` Last run: ${i.lastRunAt} (${i.lastStatus})`);
@@ -125,7 +531,7 @@ export function createAutomationTools() {
125
531
  },
126
532
  executor: async (args, ctx) => {
127
533
  try {
128
- const id = args.id;
534
+ const id = Number(args.id);
129
535
  const store = getAutomationStore();
130
536
  const existing = store.findById(id);
131
537
  if (!existing) {
@@ -146,6 +552,72 @@ export function createAutomationTools() {
146
552
  category: 'builtin',
147
553
  concurrent: false,
148
554
  },
555
+ // ---- stop_automation ----
556
+ // 停止正在运行的自动化任务(中止执行 + 禁用调度)
557
+ {
558
+ definition: {
559
+ type: 'function',
560
+ function: {
561
+ name: 'stop_automation',
562
+ description: 'Stop a running automation task. Aborts the current execution (for Prompt-type tasks, aborts the Agent engine; for Code-type tasks, marks as cancelled) ' +
563
+ 'and disables the task from future scheduled runs. ' +
564
+ 'Use this when the user asks to stop/cancel/abort a task. ' +
565
+ 'If running inside an automation task context, the ID is auto-detected — no need to provide it. ' +
566
+ 'Use list_automations first if you need to find the task ID in other cases.',
567
+ parameters: {
568
+ type: 'object',
569
+ properties: {
570
+ id: { type: 'number', description: 'The automation task ID to stop. If omitted, uses the current automation context ID.' },
571
+ },
572
+ },
573
+ },
574
+ },
575
+ executor: async (args, ctx) => {
576
+ try {
577
+ // 优先使用参数中的 id,否则从上下文中获取当前自动化任务 ID
578
+ const id = args.id != null ? Number(args.id) : ctx.custom?.automationId;
579
+ if (id == null || isNaN(id)) {
580
+ return `ERROR: No automation task ID provided and no automation context found. Use list_automations to find the task ID.`;
581
+ }
582
+ const store = getAutomationStore();
583
+ const existing = store.findById(id);
584
+ if (!existing) {
585
+ return `ERROR: Automation task with ID ${id} not found.`;
586
+ }
587
+ // 优先通过 AutomationProvider 停止(能中止正在运行的 Agent 执行)
588
+ const automationProvider = ctx.custom?.automationProvider;
589
+ if (automationProvider?.stopAutomation) {
590
+ const result = await automationProvider.stopAutomation(id);
591
+ return result.message;
592
+ }
593
+ // Fallback:仅禁用任务 + 停止调度
594
+ store.patch(id, { enabled: false, lastStatus: 'cancelled' });
595
+ if (automationProvider?.refreshScheduler) {
596
+ automationProvider.refreshScheduler();
597
+ }
598
+ return `Automation task "${existing.name}" (ID: ${id}) has been disabled. Note: could not abort active execution (no stopAutomation provider).`;
599
+ }
600
+ catch (e) {
601
+ return `ERROR stopping automation: ${e.message || e}`;
602
+ }
603
+ },
604
+ category: 'builtin',
605
+ concurrent: false,
606
+ },
149
607
  ];
150
608
  }
609
+ /** 从工具参数构建 NodeAutomationTaskPackage */
610
+ function buildCodePackage(args, name) {
611
+ return {
612
+ id: String(Date.now()),
613
+ name,
614
+ version: args.version || '1.0.0',
615
+ runtime: 'nodejs',
616
+ entry: args.entry || 'index.js',
617
+ sourceFiles: args.sourceFiles || {},
618
+ dependencies: args.dependencies,
619
+ requiredLibraries: args.requiredLibraries,
620
+ runtimeConfig: args.runtimeConfig,
621
+ };
622
+ }
151
623
  //# sourceMappingURL=automation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"automation.js","sourceRoot":"","sources":["../../../../src/tool/tools/automation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automation.js","sourceRoot":"","sources":["../../../../src/tool/tools/automation.ts"],"names":[],"mappings":"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"}
@@ -501,6 +501,11 @@ export interface AutomationProvider {
501
501
  refreshScheduler(): void;
502
502
  /** 手动触发任务 */
503
503
  triggerAutomation?(id: number): Promise<string>;
504
+ /** 停止正在运行的自动化任务(中止当前执行 + 禁用后续调度) */
505
+ stopAutomation?(id: number): Promise<{
506
+ stopped: boolean;
507
+ message: string;
508
+ }>;
504
509
  /** 获取活跃任务数 */
505
510
  getActiveJobCount?(): number;
506
511
  }