@ugm/desiagent 0.1.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 +251 -0
- package/dist/__tests__/test-utils.d.ts +24 -0
- package/dist/__tests__/test-utils.d.ts.map +1 -0
- package/dist/__tests__/test-utils.js +32 -0
- package/dist/__tests__/test-utils.js.map +1 -0
- package/dist/core/execution/agents.d.ts +60 -0
- package/dist/core/execution/agents.d.ts.map +1 -0
- package/dist/core/execution/agents.js +249 -0
- package/dist/core/execution/agents.js.map +1 -0
- package/dist/core/execution/artifacts.d.ts +27 -0
- package/dist/core/execution/artifacts.d.ts.map +1 -0
- package/dist/core/execution/artifacts.js +93 -0
- package/dist/core/execution/artifacts.js.map +1 -0
- package/dist/core/execution/costs.d.ts +160 -0
- package/dist/core/execution/costs.d.ts.map +1 -0
- package/dist/core/execution/costs.js +196 -0
- package/dist/core/execution/costs.js.map +1 -0
- package/dist/core/execution/dagExecutor.d.ts +112 -0
- package/dist/core/execution/dagExecutor.d.ts.map +1 -0
- package/dist/core/execution/dagExecutor.js +647 -0
- package/dist/core/execution/dagExecutor.js.map +1 -0
- package/dist/core/execution/dags.d.ts +167 -0
- package/dist/core/execution/dags.d.ts.map +1 -0
- package/dist/core/execution/dags.js +713 -0
- package/dist/core/execution/dags.js.map +1 -0
- package/dist/core/execution/executions.d.ts +158 -0
- package/dist/core/execution/executions.d.ts.map +1 -0
- package/dist/core/execution/executions.js +258 -0
- package/dist/core/execution/executions.js.map +1 -0
- package/dist/core/execution/goals.d.ts +62 -0
- package/dist/core/execution/goals.d.ts.map +1 -0
- package/dist/core/execution/goals.js +245 -0
- package/dist/core/execution/goals.js.map +1 -0
- package/dist/core/execution/runs.d.ts +65 -0
- package/dist/core/execution/runs.d.ts.map +1 -0
- package/dist/core/execution/runs.js +219 -0
- package/dist/core/execution/runs.js.map +1 -0
- package/dist/core/execution/tools.d.ts +24 -0
- package/dist/core/execution/tools.d.ts.map +1 -0
- package/dist/core/execution/tools.js +33 -0
- package/dist/core/execution/tools.js.map +1 -0
- package/dist/core/orchestration/index.d.ts +7 -0
- package/dist/core/orchestration/index.d.ts.map +1 -0
- package/dist/core/orchestration/index.js +7 -0
- package/dist/core/orchestration/index.js.map +1 -0
- package/dist/core/orchestration/orchestrator.d.ts +39 -0
- package/dist/core/orchestration/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestration/orchestrator.js +141 -0
- package/dist/core/orchestration/orchestrator.js.map +1 -0
- package/dist/core/orchestration/planner.d.ts +63 -0
- package/dist/core/orchestration/planner.d.ts.map +1 -0
- package/dist/core/orchestration/planner.js +99 -0
- package/dist/core/orchestration/planner.js.map +1 -0
- package/dist/core/providers/factory.d.ts +25 -0
- package/dist/core/providers/factory.d.ts.map +1 -0
- package/dist/core/providers/factory.js +86 -0
- package/dist/core/providers/factory.js.map +1 -0
- package/dist/core/providers/index.d.ts +11 -0
- package/dist/core/providers/index.d.ts.map +1 -0
- package/dist/core/providers/index.js +10 -0
- package/dist/core/providers/index.js.map +1 -0
- package/dist/core/providers/ollama.d.ts +36 -0
- package/dist/core/providers/ollama.d.ts.map +1 -0
- package/dist/core/providers/ollama.js +123 -0
- package/dist/core/providers/ollama.js.map +1 -0
- package/dist/core/providers/openai.d.ts +33 -0
- package/dist/core/providers/openai.d.ts.map +1 -0
- package/dist/core/providers/openai.js +114 -0
- package/dist/core/providers/openai.js.map +1 -0
- package/dist/core/providers/openrouter.d.ts +38 -0
- package/dist/core/providers/openrouter.d.ts.map +1 -0
- package/dist/core/providers/openrouter.js +269 -0
- package/dist/core/providers/openrouter.js.map +1 -0
- package/dist/core/providers/types.d.ts +101 -0
- package/dist/core/providers/types.d.ts.map +1 -0
- package/dist/core/providers/types.js +7 -0
- package/dist/core/providers/types.js.map +1 -0
- package/dist/core/tools/base.d.ts +56 -0
- package/dist/core/tools/base.d.ts.map +1 -0
- package/dist/core/tools/base.js +60 -0
- package/dist/core/tools/base.js.map +1 -0
- package/dist/core/tools/bash.d.ts +50 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +179 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/edit.d.ts +39 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +67 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/executor.d.ts +33 -0
- package/dist/core/tools/executor.d.ts.map +1 -0
- package/dist/core/tools/executor.js +105 -0
- package/dist/core/tools/executor.js.map +1 -0
- package/dist/core/tools/fetchPage.d.ts +46 -0
- package/dist/core/tools/fetchPage.d.ts.map +1 -0
- package/dist/core/tools/fetchPage.js +87 -0
- package/dist/core/tools/fetchPage.js.map +1 -0
- package/dist/core/tools/fetchURLs.d.ts +39 -0
- package/dist/core/tools/fetchURLs.d.ts.map +1 -0
- package/dist/core/tools/fetchURLs.js +67 -0
- package/dist/core/tools/fetchURLs.js.map +1 -0
- package/dist/core/tools/glob.d.ts +36 -0
- package/dist/core/tools/glob.d.ts.map +1 -0
- package/dist/core/tools/glob.js +78 -0
- package/dist/core/tools/glob.js.map +1 -0
- package/dist/core/tools/grep.d.ts +51 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +152 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +22 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +22 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/llmExecute.d.ts +153 -0
- package/dist/core/tools/llmExecute.d.ts.map +1 -0
- package/dist/core/tools/llmExecute.js +105 -0
- package/dist/core/tools/llmExecute.js.map +1 -0
- package/dist/core/tools/readEmail.d.ts +68 -0
- package/dist/core/tools/readEmail.d.ts.map +1 -0
- package/dist/core/tools/readEmail.js +182 -0
- package/dist/core/tools/readEmail.js.map +1 -0
- package/dist/core/tools/readFile.d.ts +42 -0
- package/dist/core/tools/readFile.d.ts.map +1 -0
- package/dist/core/tools/readFile.js +79 -0
- package/dist/core/tools/readFile.js.map +1 -0
- package/dist/core/tools/registry.d.ts +53 -0
- package/dist/core/tools/registry.d.ts.map +1 -0
- package/dist/core/tools/registry.js +112 -0
- package/dist/core/tools/registry.js.map +1 -0
- package/dist/core/tools/sendEmail.d.ts +83 -0
- package/dist/core/tools/sendEmail.d.ts.map +1 -0
- package/dist/core/tools/sendEmail.js +132 -0
- package/dist/core/tools/sendEmail.js.map +1 -0
- package/dist/core/tools/sendWebhook.d.ts +48 -0
- package/dist/core/tools/sendWebhook.d.ts.map +1 -0
- package/dist/core/tools/sendWebhook.js +61 -0
- package/dist/core/tools/sendWebhook.js.map +1 -0
- package/dist/core/tools/webSearch.d.ts +34 -0
- package/dist/core/tools/webSearch.d.ts.map +1 -0
- package/dist/core/tools/webSearch.js +104 -0
- package/dist/core/tools/webSearch.js.map +1 -0
- package/dist/core/tools/writeFile.d.ts +49 -0
- package/dist/core/tools/writeFile.d.ts.map +1 -0
- package/dist/core/tools/writeFile.js +120 -0
- package/dist/core/tools/writeFile.js.map +1 -0
- package/dist/db/client.d.ts +22 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +178 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/schema.d.ts +1846 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +175 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/errors/index.d.ts +80 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +135 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +172 -0
- package/dist/index.js.map +1 -0
- package/dist/services/initDB.d.ts +17 -0
- package/dist/services/initDB.d.ts.map +1 -0
- package/dist/services/initDB.js +212 -0
- package/dist/services/initDB.js.map +1 -0
- package/dist/types/agent.d.ts +354 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +63 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/client.d.ts +309 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/client.js +2 -0
- package/dist/types/client.js.map +1 -0
- package/dist/types/config.d.ts +96 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +33 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/dag.d.ts +253 -0
- package/dist/types/dag.d.ts.map +1 -0
- package/dist/types/dag.js +46 -0
- package/dist/types/dag.js.map +1 -0
- package/dist/types/execution.d.ts +171 -0
- package/dist/types/execution.d.ts.map +1 -0
- package/dist/types/execution.js +41 -0
- package/dist/types/execution.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/util/cron-validator.d.ts +16 -0
- package/dist/util/cron-validator.d.ts.map +1 -0
- package/dist/util/cron-validator.js +31 -0
- package/dist/util/cron-validator.js.map +1 -0
- package/dist/util/dag-utils.d.ts +54 -0
- package/dist/util/dag-utils.d.ts.map +1 -0
- package/dist/util/dag-utils.js +167 -0
- package/dist/util/dag-utils.js.map +1 -0
- package/dist/util/logger.d.ts +21 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +87 -0
- package/dist/util/logger.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Executor
|
|
3
|
+
*
|
|
4
|
+
* Executes tools during agent execution with validation and error handling.
|
|
5
|
+
*/
|
|
6
|
+
import { getLogger } from '../../util/logger.js';
|
|
7
|
+
import { ToolError } from '../../errors/index.js';
|
|
8
|
+
import { resolve } from 'path';
|
|
9
|
+
/**
|
|
10
|
+
* Tool executor for running tools during execution
|
|
11
|
+
*/
|
|
12
|
+
export class ToolExecutor {
|
|
13
|
+
registry;
|
|
14
|
+
logger = getLogger();
|
|
15
|
+
artifactsDir;
|
|
16
|
+
constructor(registry, artifactsDir) {
|
|
17
|
+
this.registry = registry;
|
|
18
|
+
this.artifactsDir = artifactsDir || process.env.ARTIFACTS_DIR || './artifacts';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Execute a tool call
|
|
22
|
+
*/
|
|
23
|
+
async execute(toolName, input, toolCallId) {
|
|
24
|
+
const startTime = Date.now();
|
|
25
|
+
// Validate tool exists
|
|
26
|
+
if (!this.registry.hasTool(toolName)) {
|
|
27
|
+
throw new ToolError(`Tool not found: ${toolName}`, toolName);
|
|
28
|
+
}
|
|
29
|
+
// Create tool context
|
|
30
|
+
const ctx = {
|
|
31
|
+
logger: {
|
|
32
|
+
debug: (msg, data) => this.logger.debug(msg, data),
|
|
33
|
+
info: (msg, data) => this.logger.info(msg, data),
|
|
34
|
+
warn: (msg, data) => this.logger.warn(msg, data),
|
|
35
|
+
error: (msg, data) => this.logger.error(msg, data),
|
|
36
|
+
},
|
|
37
|
+
onEvent: (event, data) => {
|
|
38
|
+
this.logger.debug(`Tool event: ${event}`, data);
|
|
39
|
+
},
|
|
40
|
+
artifactsDir: resolve(this.artifactsDir),
|
|
41
|
+
};
|
|
42
|
+
try {
|
|
43
|
+
this.logger.info(`Executing tool: ${toolName} (call ID: ${toolCallId})`);
|
|
44
|
+
// Execute the tool
|
|
45
|
+
const output = await this.registry.execute(toolName, input, ctx);
|
|
46
|
+
const duration = Date.now() - startTime;
|
|
47
|
+
this.logger.info(`Tool completed: ${toolName} (${duration}ms)`);
|
|
48
|
+
return {
|
|
49
|
+
toolName,
|
|
50
|
+
toolCallId,
|
|
51
|
+
status: 'success',
|
|
52
|
+
output,
|
|
53
|
+
timestamp: new Date(),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
const duration = Date.now() - startTime;
|
|
58
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
59
|
+
this.logger.error(`Tool failed: ${toolName} (${duration}ms) - ${errorMessage}`);
|
|
60
|
+
return {
|
|
61
|
+
toolName,
|
|
62
|
+
toolCallId,
|
|
63
|
+
status: 'error',
|
|
64
|
+
error: {
|
|
65
|
+
message: errorMessage,
|
|
66
|
+
code: error instanceof ToolError ? error.code : 'TOOL_ERROR',
|
|
67
|
+
},
|
|
68
|
+
timestamp: new Date(),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Validate tool input against schema
|
|
74
|
+
*/
|
|
75
|
+
validateToolInput(toolName, input) {
|
|
76
|
+
const tool = this.registry.get(toolName);
|
|
77
|
+
if (!tool) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
tool.inputSchema.parse(input);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get tool schema
|
|
90
|
+
*/
|
|
91
|
+
getToolSchema(toolName) {
|
|
92
|
+
const tool = this.registry.get(toolName);
|
|
93
|
+
if (!tool) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
return tool.toJSONSchema();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* List available tools
|
|
100
|
+
*/
|
|
101
|
+
listTools() {
|
|
102
|
+
return this.registry.getAllDefinitions();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/core/tools/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FetchPageTool
|
|
3
|
+
*
|
|
4
|
+
* Fetches and extracts content from web pages.
|
|
5
|
+
* Uses bun's built-in fetch API.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { BaseTool, type ToolContext } from './base.js';
|
|
9
|
+
declare const fetchPageInputSchema: z.ZodObject<{
|
|
10
|
+
url: z.ZodString;
|
|
11
|
+
maxLength: z.ZodDefault<z.ZodNumber>;
|
|
12
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
maxLength: number;
|
|
15
|
+
url: string;
|
|
16
|
+
timeout: number;
|
|
17
|
+
}, {
|
|
18
|
+
url: string;
|
|
19
|
+
maxLength?: number | undefined;
|
|
20
|
+
timeout?: number | undefined;
|
|
21
|
+
}>;
|
|
22
|
+
type FetchPageInput = z.infer<typeof fetchPageInputSchema>;
|
|
23
|
+
interface FetchPageOutput {
|
|
24
|
+
url: string;
|
|
25
|
+
status: number;
|
|
26
|
+
contentType: string;
|
|
27
|
+
content: string;
|
|
28
|
+
contentLength: number;
|
|
29
|
+
truncated: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* FetchPageTool for bun
|
|
33
|
+
* Uses bun's native fetch API
|
|
34
|
+
*/
|
|
35
|
+
export declare class FetchPageTool extends BaseTool<any, FetchPageOutput> {
|
|
36
|
+
name: string;
|
|
37
|
+
description: string;
|
|
38
|
+
inputSchema: any;
|
|
39
|
+
private logger;
|
|
40
|
+
/**
|
|
41
|
+
* Execute page fetch
|
|
42
|
+
*/
|
|
43
|
+
execute(input: FetchPageInput, ctx: ToolContext): Promise<FetchPageOutput>;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=fetchPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchPage.d.ts","sourceRoot":"","sources":["../../../src/core/tools/fetchPage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAGvD,QAAA,MAAM,oBAAoB;;;;;;;;;;;;EAWxB,CAAC;AAEH,KAAK,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE3D,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC/D,IAAI,SAAe;IACnB,WAAW,SAA+C;IAC1D,WAAW,EAAE,GAAG,CAAwB;IAExC,OAAO,CAAC,MAAM,CAAe;IAE7B;;OAEG;IACG,OAAO,CACX,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,eAAe,CAAC;CAoE5B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FetchPageTool
|
|
3
|
+
*
|
|
4
|
+
* Fetches and extracts content from web pages.
|
|
5
|
+
* Uses bun's built-in fetch API.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { BaseTool } from './base.js';
|
|
9
|
+
import { getLogger } from '../../util/logger.js';
|
|
10
|
+
const fetchPageInputSchema = z.object({
|
|
11
|
+
url: z.string().url().describe('URL to fetch'),
|
|
12
|
+
maxLength: z
|
|
13
|
+
.number()
|
|
14
|
+
.int()
|
|
15
|
+
.default(50000)
|
|
16
|
+
.describe('Maximum content length'),
|
|
17
|
+
timeout: z
|
|
18
|
+
.number()
|
|
19
|
+
.default(30000)
|
|
20
|
+
.describe('Request timeout in milliseconds'),
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* FetchPageTool for bun
|
|
24
|
+
* Uses bun's native fetch API
|
|
25
|
+
*/
|
|
26
|
+
export class FetchPageTool extends BaseTool {
|
|
27
|
+
name = 'fetchPage';
|
|
28
|
+
description = 'Fetch and extract content from a web page';
|
|
29
|
+
inputSchema = fetchPageInputSchema;
|
|
30
|
+
logger = getLogger();
|
|
31
|
+
/**
|
|
32
|
+
* Execute page fetch
|
|
33
|
+
*/
|
|
34
|
+
async execute(input, ctx) {
|
|
35
|
+
this.logger.info(`Fetching page: ${input.url}`);
|
|
36
|
+
try {
|
|
37
|
+
// Fetch with timeout using AbortController
|
|
38
|
+
const controller = new AbortController();
|
|
39
|
+
const timeoutId = setTimeout(() => controller.abort(), input.timeout);
|
|
40
|
+
try {
|
|
41
|
+
const response = await fetch(input.url, {
|
|
42
|
+
signal: controller.signal,
|
|
43
|
+
headers: {
|
|
44
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
clearTimeout(timeoutId);
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
50
|
+
}
|
|
51
|
+
const contentType = response.headers.get('content-type') || 'text/plain';
|
|
52
|
+
let content = await response.text();
|
|
53
|
+
const contentLength = Buffer.byteLength(content, 'utf-8');
|
|
54
|
+
const truncated = contentLength > input.maxLength;
|
|
55
|
+
if (truncated) {
|
|
56
|
+
content = content.slice(0, input.maxLength);
|
|
57
|
+
}
|
|
58
|
+
this.logger.info(`Fetched ${contentLength} bytes from ${input.url} (status: ${response.status})`);
|
|
59
|
+
if (ctx.onEvent) {
|
|
60
|
+
ctx.onEvent('tool:fetchPage:completed', {
|
|
61
|
+
url: input.url,
|
|
62
|
+
status: response.status,
|
|
63
|
+
contentLength,
|
|
64
|
+
truncated,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
url: input.url,
|
|
69
|
+
status: response.status,
|
|
70
|
+
contentType,
|
|
71
|
+
content,
|
|
72
|
+
contentLength,
|
|
73
|
+
truncated,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
clearTimeout(timeoutId);
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
this.logger.error(`Fetch failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=fetchPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchPage.js","sourceRoot":"","sources":["../../../src/core/tools/fetchPage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetch URLs Tool
|
|
3
|
+
*
|
|
4
|
+
* Extracts valid URLs from mixed input and fetches content from each
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { BaseTool, type ToolContext } from './base.js';
|
|
8
|
+
declare const fetchURLsInputSchema: z.ZodObject<{
|
|
9
|
+
urls: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>]>, "many">;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
urls: (string | Record<string, unknown>)[];
|
|
12
|
+
}, {
|
|
13
|
+
urls: (string | Record<string, unknown>)[];
|
|
14
|
+
}>;
|
|
15
|
+
type FetchURLsInput = z.infer<typeof fetchURLsInputSchema>;
|
|
16
|
+
interface FetchPageOutput {
|
|
17
|
+
url: string;
|
|
18
|
+
status: number;
|
|
19
|
+
contentType: string;
|
|
20
|
+
content: string;
|
|
21
|
+
contentLength: number;
|
|
22
|
+
truncated: boolean;
|
|
23
|
+
}
|
|
24
|
+
type FetchURLsOutput = FetchPageOutput[];
|
|
25
|
+
export declare class FetchURLsTool extends BaseTool<FetchURLsInput, FetchURLsOutput> {
|
|
26
|
+
name: string;
|
|
27
|
+
description: string;
|
|
28
|
+
inputSchema: z.ZodObject<{
|
|
29
|
+
urls: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>]>, "many">;
|
|
30
|
+
}, "strip", z.ZodTypeAny, {
|
|
31
|
+
urls: (string | Record<string, unknown>)[];
|
|
32
|
+
}, {
|
|
33
|
+
urls: (string | Record<string, unknown>)[];
|
|
34
|
+
}>;
|
|
35
|
+
private fetchPageTool;
|
|
36
|
+
execute(input: FetchURLsInput, ctx: ToolContext): Promise<FetchURLsOutput>;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=fetchURLs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchURLs.d.ts","sourceRoot":"","sources":["../../../src/core/tools/fetchURLs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAGvD,QAAA,MAAM,oBAAoB;;;;;;EAOxB,CAAC;AAEH,KAAK,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE3D,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,KAAK,eAAe,GAAG,eAAe,EAAE,CAAC;AAEzC,qBAAa,aAAc,SAAQ,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC;IAC1E,IAAI,SAAe;IACnB,WAAW,SAA0F;IACrG,WAAW;;;;;;OAAwB;IAEnC,OAAO,CAAC,aAAa,CAAuB;IAEtC,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAiDjF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetch URLs Tool
|
|
3
|
+
*
|
|
4
|
+
* Extracts valid URLs from mixed input and fetches content from each
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { BaseTool } from './base.js';
|
|
8
|
+
import { FetchPageTool } from './fetchPage.js';
|
|
9
|
+
const fetchURLsInputSchema = z.object({
|
|
10
|
+
urls: z.array(z.union([
|
|
11
|
+
z.string(),
|
|
12
|
+
z.record(z.unknown())
|
|
13
|
+
])).describe('Array of URLs as strings or JSON objects')
|
|
14
|
+
});
|
|
15
|
+
export class FetchURLsTool extends BaseTool {
|
|
16
|
+
name = 'fetchURLs';
|
|
17
|
+
description = 'Extract valid URLs from mixed input (strings or objects) and fetch content from each';
|
|
18
|
+
inputSchema = fetchURLsInputSchema;
|
|
19
|
+
fetchPageTool = new FetchPageTool();
|
|
20
|
+
async execute(input, ctx) {
|
|
21
|
+
const urls = [];
|
|
22
|
+
for (const item of input.urls) {
|
|
23
|
+
if (typeof item === 'string') {
|
|
24
|
+
try {
|
|
25
|
+
new URL(item);
|
|
26
|
+
urls.push(item);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
ctx.logger.warn(`╰─Invalid URL string: ${item}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else if (typeof item === 'object' && item !== null) {
|
|
33
|
+
const possibleURLKeys = ['url', 'URL', 'link', 'href', 'uri'];
|
|
34
|
+
let foundURL = false;
|
|
35
|
+
for (const key of possibleURLKeys) {
|
|
36
|
+
if (key in item && typeof item[key] === 'string') {
|
|
37
|
+
try {
|
|
38
|
+
new URL(item[key]);
|
|
39
|
+
urls.push(item[key]);
|
|
40
|
+
foundURL = true;
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (!foundURL) {
|
|
49
|
+
ctx.logger.warn(`╰─No valid URL found in object: ${JSON.stringify(item)}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
ctx.logger.info(`╰─Extracted ${urls.length} valid URLs from ${input.urls.length} items`);
|
|
54
|
+
const results = [];
|
|
55
|
+
for (const url of urls) {
|
|
56
|
+
try {
|
|
57
|
+
const result = await this.fetchPageTool.execute({ url, maxLength: 10000, timeout: 30000 }, ctx);
|
|
58
|
+
results.push(result);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
ctx.logger.error({ err: error }, `╰─Failed to fetch ${url}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return results;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=fetchURLs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchURLs.js","sourceRoot":"","sources":["../../../src/core/tools/fetchURLs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Glob Tool
|
|
3
|
+
*
|
|
4
|
+
* Find files matching a glob pattern using Bun.Glob
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { BaseTool, type ToolContext } from './base.js';
|
|
8
|
+
declare const globInputSchema: z.ZodObject<{
|
|
9
|
+
pattern: z.ZodString;
|
|
10
|
+
ignore: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
11
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
limit: number;
|
|
14
|
+
pattern: string;
|
|
15
|
+
ignore: string[];
|
|
16
|
+
}, {
|
|
17
|
+
pattern: string;
|
|
18
|
+
limit?: number | undefined;
|
|
19
|
+
ignore?: string[] | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
type GlobInput = z.infer<typeof globInputSchema>;
|
|
22
|
+
interface GlobOutput {
|
|
23
|
+
pattern: string;
|
|
24
|
+
files: string[];
|
|
25
|
+
count: number;
|
|
26
|
+
truncated: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare class GlobTool extends BaseTool<any, GlobOutput> {
|
|
29
|
+
name: string;
|
|
30
|
+
description: string;
|
|
31
|
+
inputSchema: any;
|
|
32
|
+
private getArtifactsDir;
|
|
33
|
+
execute(input: GlobInput, ctx: ToolContext): Promise<GlobOutput>;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=glob.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../../src/core/tools/glob.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAEvD,QAAA,MAAM,eAAe;;;;;;;;;;;;EAanB,CAAC;AAEH,KAAK,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAEjD,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,QAAS,SAAQ,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACrD,IAAI,SAAU;IACd,WAAW,SAC4G;IACvH,WAAW,EAAE,GAAG,CAAmB;IAEnC,OAAO,CAAC,eAAe;IAIjB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CAuDvE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Glob Tool
|
|
3
|
+
*
|
|
4
|
+
* Find files matching a glob pattern using Bun.Glob
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { resolve, relative } from 'path';
|
|
8
|
+
import { BaseTool } from './base.js';
|
|
9
|
+
const globInputSchema = z.object({
|
|
10
|
+
pattern: z.string().describe('Glob pattern (e.g., "**/*.ts", "src/**/*.py")'),
|
|
11
|
+
ignore: z
|
|
12
|
+
.array(z.string())
|
|
13
|
+
.default(['node_modules/**', '.git/**'])
|
|
14
|
+
.describe('Patterns to ignore'),
|
|
15
|
+
limit: z
|
|
16
|
+
.number()
|
|
17
|
+
.int()
|
|
18
|
+
.min(1)
|
|
19
|
+
.max(1000)
|
|
20
|
+
.default(100)
|
|
21
|
+
.describe('Maximum number of files to return'),
|
|
22
|
+
});
|
|
23
|
+
export class GlobTool extends BaseTool {
|
|
24
|
+
name = 'glob';
|
|
25
|
+
description = 'Find files matching a glob pattern in the artifacts directory. Returns file paths relative to artifacts directory.';
|
|
26
|
+
inputSchema = globInputSchema;
|
|
27
|
+
getArtifactsDir(ctx) {
|
|
28
|
+
return resolve(ctx.artifactsDir || process.env.ARTIFACTS_DIR || './artifacts');
|
|
29
|
+
}
|
|
30
|
+
async execute(input, ctx) {
|
|
31
|
+
const ARTIFACTS_DIR = this.getArtifactsDir(ctx);
|
|
32
|
+
const { pattern, ignore, limit } = input;
|
|
33
|
+
if (pattern.includes('..')) {
|
|
34
|
+
throw new Error('Invalid pattern: cannot contain ".."');
|
|
35
|
+
}
|
|
36
|
+
ctx.logger.info(`Searching for files matching: ${pattern}`);
|
|
37
|
+
try {
|
|
38
|
+
const glob = new Bun.Glob(pattern);
|
|
39
|
+
const allFiles = [];
|
|
40
|
+
for await (const file of glob.scan({
|
|
41
|
+
cwd: ARTIFACTS_DIR,
|
|
42
|
+
onlyFiles: true,
|
|
43
|
+
})) {
|
|
44
|
+
const absolutePath = resolve(ARTIFACTS_DIR, file);
|
|
45
|
+
if (!absolutePath.startsWith(ARTIFACTS_DIR)) {
|
|
46
|
+
throw new Error('Invalid match: path escapes artifacts directory');
|
|
47
|
+
}
|
|
48
|
+
// Check if file matches any ignore pattern
|
|
49
|
+
let shouldIgnore = false;
|
|
50
|
+
for (const ignorePattern of ignore) {
|
|
51
|
+
const ignoreGlob = new Bun.Glob(ignorePattern);
|
|
52
|
+
if (ignoreGlob.match(file)) {
|
|
53
|
+
shouldIgnore = true;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (!shouldIgnore) {
|
|
58
|
+
allFiles.push(relative(ARTIFACTS_DIR, absolutePath));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const truncated = allFiles.length > limit;
|
|
62
|
+
const files = allFiles.slice(0, limit);
|
|
63
|
+
ctx.logger.info(`Found ${allFiles.length} files matching "${pattern}"${truncated ? ` (limited to ${limit})` : ''}`);
|
|
64
|
+
ctx.emitEvent?.completed?.(`🔍 Found ${allFiles.length} files matching "${pattern}"${truncated ? ` (showing ${limit})` : ''}`);
|
|
65
|
+
return {
|
|
66
|
+
pattern,
|
|
67
|
+
files,
|
|
68
|
+
count: allFiles.length,
|
|
69
|
+
truncated,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
ctx.logger.error({ err: error }, 'Glob search failed');
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=glob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../../src/core/tools/glob.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grep Tool
|
|
3
|
+
*
|
|
4
|
+
* Search file contents with regex patterns using Bun APIs
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { BaseTool, type ToolContext } from './base.js';
|
|
8
|
+
declare const grepInputSchema: z.ZodObject<{
|
|
9
|
+
pattern: z.ZodString;
|
|
10
|
+
path: z.ZodDefault<z.ZodString>;
|
|
11
|
+
glob: z.ZodOptional<z.ZodString>;
|
|
12
|
+
caseSensitive: z.ZodDefault<z.ZodBoolean>;
|
|
13
|
+
maxResults: z.ZodDefault<z.ZodNumber>;
|
|
14
|
+
}, "strip", z.ZodTypeAny, {
|
|
15
|
+
path: string;
|
|
16
|
+
pattern: string;
|
|
17
|
+
caseSensitive: boolean;
|
|
18
|
+
maxResults: number;
|
|
19
|
+
glob?: string | undefined;
|
|
20
|
+
}, {
|
|
21
|
+
pattern: string;
|
|
22
|
+
path?: string | undefined;
|
|
23
|
+
glob?: string | undefined;
|
|
24
|
+
caseSensitive?: boolean | undefined;
|
|
25
|
+
maxResults?: number | undefined;
|
|
26
|
+
}>;
|
|
27
|
+
type GrepInput = z.infer<typeof grepInputSchema>;
|
|
28
|
+
interface GrepMatch {
|
|
29
|
+
file: string;
|
|
30
|
+
line: number;
|
|
31
|
+
content: string;
|
|
32
|
+
match: string;
|
|
33
|
+
}
|
|
34
|
+
interface GrepOutput {
|
|
35
|
+
pattern: string;
|
|
36
|
+
matches: GrepMatch[];
|
|
37
|
+
totalMatches: number;
|
|
38
|
+
filesSearched: number;
|
|
39
|
+
truncated: boolean;
|
|
40
|
+
}
|
|
41
|
+
export declare class GrepTool extends BaseTool<any, GrepOutput> {
|
|
42
|
+
name: string;
|
|
43
|
+
description: string;
|
|
44
|
+
inputSchema: any;
|
|
45
|
+
private getArtifactsDir;
|
|
46
|
+
private isBinaryFile;
|
|
47
|
+
private sanitizePath;
|
|
48
|
+
execute(input: GrepInput, ctx: ToolContext): Promise<GrepOutput>;
|
|
49
|
+
}
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=grep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../../src/core/tools/grep.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAEvD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAYnB,CAAC;AAEH,KAAK,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAEjD,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,QAAS,SAAQ,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACrD,IAAI,SAAU;IACd,WAAW,SACuH;IAClI,WAAW,EAAE,GAAG,CAAmB;IAEnC,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IAId,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CA8HvE"}
|