@agntk/core 0.3.3 → 1.0.0
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/advanced/index.d.ts +13 -22
- package/dist/advanced/index.d.ts.map +1 -1
- package/dist/advanced/index.js +10 -55
- package/dist/advanced/index.js.map +1 -1
- package/dist/agent.d.ts +2 -35
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +113 -111
- package/dist/agent.js.map +1 -1
- package/dist/config/defaults.d.ts +1 -5
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +1 -11
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/index.d.ts +5 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +7 -7
- package/dist/config/index.js.map +1 -1
- package/dist/config/loader.d.ts +0 -40
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +3 -80
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +117 -788
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +52 -63
- package/dist/config/schema.js.map +1 -1
- package/dist/constants.d.ts +0 -11
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -17
- package/dist/constants.js.map +1 -1
- package/dist/evals/assertions.d.ts +0 -35
- package/dist/evals/assertions.d.ts.map +1 -1
- package/dist/evals/assertions.js +0 -51
- package/dist/evals/assertions.js.map +1 -1
- package/dist/evals/index.d.ts +0 -5
- package/dist/evals/index.d.ts.map +1 -1
- package/dist/evals/index.js +0 -5
- package/dist/evals/index.js.map +1 -1
- package/dist/evals/runner.d.ts +0 -27
- package/dist/evals/runner.d.ts.map +1 -1
- package/dist/evals/runner.js +3 -45
- package/dist/evals/runner.js.map +1 -1
- package/dist/evals/types.d.ts +0 -14
- package/dist/evals/types.d.ts.map +1 -1
- package/dist/evals/types.js +0 -3
- package/dist/evals/types.js.map +1 -1
- package/dist/guardrails/built-ins.d.ts +0 -28
- package/dist/guardrails/built-ins.d.ts.map +1 -1
- package/dist/guardrails/built-ins.js +21 -47
- package/dist/guardrails/built-ins.js.map +1 -1
- package/dist/guardrails/index.d.ts +1 -4
- package/dist/guardrails/index.d.ts.map +1 -1
- package/dist/guardrails/index.js +1 -4
- package/dist/guardrails/index.js.map +1 -1
- package/dist/guardrails/runner.d.ts +0 -30
- package/dist/guardrails/runner.d.ts.map +1 -1
- package/dist/guardrails/runner.js +1 -46
- package/dist/guardrails/runner.js.map +1 -1
- package/dist/guardrails/types.d.ts +0 -35
- package/dist/guardrails/types.d.ts.map +1 -1
- package/dist/guardrails/types.js +4 -7
- package/dist/guardrails/types.js.map +1 -1
- package/dist/index.d.ts +4 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -31
- package/dist/index.js.map +1 -1
- package/dist/memory/loader.d.ts +0 -17
- package/dist/memory/loader.d.ts.map +1 -1
- package/dist/memory/loader.js +5 -27
- package/dist/memory/loader.js.map +1 -1
- package/dist/memory/store.d.ts +8 -16
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +101 -32
- package/dist/memory/store.js.map +1 -1
- package/dist/memory/types.d.ts +10 -30
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +0 -6
- package/dist/memory/types.js.map +1 -1
- package/dist/models.d.ts +9 -32
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +25 -68
- package/dist/models.js.map +1 -1
- package/dist/observability/index.d.ts +0 -3
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +0 -3
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/langfuse.d.ts +0 -38
- package/dist/observability/langfuse.d.ts.map +1 -1
- package/dist/observability/langfuse.js +6 -55
- package/dist/observability/langfuse.js.map +1 -1
- package/dist/observability/types.d.ts +0 -21
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js +0 -3
- package/dist/observability/types.js.map +1 -1
- package/dist/presets/tool-preset-registry.d.ts +0 -21
- package/dist/presets/tool-preset-registry.d.ts.map +1 -1
- package/dist/presets/tool-preset-registry.js +15 -34
- package/dist/presets/tool-preset-registry.js.map +1 -1
- package/dist/presets/tools.d.ts +41 -39
- package/dist/presets/tools.d.ts.map +1 -1
- package/dist/presets/tools.js +46 -40
- package/dist/presets/tools.js.map +1 -1
- package/dist/prompts/context.d.ts +0 -4
- package/dist/prompts/context.d.ts.map +1 -1
- package/dist/prompts/context.js +21 -33
- package/dist/prompts/context.js.map +1 -1
- package/dist/prompts/template.d.ts +0 -11
- package/dist/prompts/template.d.ts.map +1 -1
- package/dist/prompts/template.js +4 -14
- package/dist/prompts/template.js.map +1 -1
- package/dist/provider-resolver.d.ts +0 -29
- package/dist/provider-resolver.d.ts.map +1 -1
- package/dist/provider-resolver.js +17 -61
- package/dist/provider-resolver.js.map +1 -1
- package/dist/reflection.d.ts +0 -34
- package/dist/reflection.d.ts.map +1 -1
- package/dist/reflection.js +0 -40
- package/dist/reflection.js.map +1 -1
- package/dist/skills/index.d.ts +0 -3
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +0 -3
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/loader.d.ts +0 -69
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +38 -130
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/types.d.ts +0 -36
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/skills/types.js +0 -4
- package/dist/skills/types.js.map +1 -1
- package/dist/system-detect.d.ts +0 -57
- package/dist/system-detect.d.ts.map +1 -1
- package/dist/system-detect.js +9 -114
- package/dist/system-detect.js.map +1 -1
- package/dist/tools/approval.d.ts +0 -47
- package/dist/tools/approval.d.ts.map +1 -1
- package/dist/tools/approval.js +0 -46
- package/dist/tools/approval.js.map +1 -1
- package/dist/tools/ast-grep/cli.d.ts.map +1 -1
- package/dist/tools/ast-grep/cli.js +10 -4
- package/dist/tools/ast-grep/cli.js.map +1 -1
- package/dist/tools/ast-grep/constants.d.ts.map +1 -1
- package/dist/tools/ast-grep/constants.js +7 -14
- package/dist/tools/ast-grep/constants.js.map +1 -1
- package/dist/tools/ast-grep/downloader.d.ts.map +1 -1
- package/dist/tools/ast-grep/downloader.js +1 -4
- package/dist/tools/ast-grep/downloader.js.map +1 -1
- package/dist/tools/ast-grep/index.d.ts +2 -2
- package/dist/tools/ast-grep/index.d.ts.map +1 -1
- package/dist/tools/ast-grep/index.js +1 -1
- package/dist/tools/ast-grep/index.js.map +1 -1
- package/dist/tools/ast-grep/tools.d.ts +4 -4
- package/dist/tools/ast-grep/tools.d.ts.map +1 -1
- package/dist/tools/ast-grep/tools.js +2 -8
- package/dist/tools/ast-grep/tools.js.map +1 -1
- package/dist/tools/browser/index.d.ts +4 -4
- package/dist/tools/browser/index.d.ts.map +1 -1
- package/dist/tools/browser/index.js +2 -3
- package/dist/tools/browser/index.js.map +1 -1
- package/dist/tools/browser/stream.d.ts +0 -32
- package/dist/tools/browser/stream.d.ts.map +1 -1
- package/dist/tools/browser/stream.js +0 -53
- package/dist/tools/browser/stream.js.map +1 -1
- package/dist/tools/browser/tool.d.ts +10 -15
- package/dist/tools/browser/tool.d.ts.map +1 -1
- package/dist/tools/browser/tool.js +2 -26
- package/dist/tools/browser/tool.js.map +1 -1
- package/dist/tools/browser/types.d.ts +31 -156
- package/dist/tools/browser/types.d.ts.map +1 -1
- package/dist/tools/browser/types.js +22 -17
- package/dist/tools/browser/types.js.map +1 -1
- package/dist/tools/deep-reasoning/constants.d.ts +0 -6
- package/dist/tools/deep-reasoning/constants.d.ts.map +1 -1
- package/dist/tools/deep-reasoning/constants.js +0 -6
- package/dist/tools/deep-reasoning/constants.js.map +1 -1
- package/dist/tools/deep-reasoning/engine.d.ts.map +1 -1
- package/dist/tools/deep-reasoning/engine.js +0 -1
- package/dist/tools/deep-reasoning/engine.js.map +1 -1
- package/dist/tools/deep-reasoning/index.d.ts +4 -0
- package/dist/tools/deep-reasoning/index.d.ts.map +1 -1
- package/dist/tools/deep-reasoning/index.js +4 -3
- package/dist/tools/deep-reasoning/index.js.map +1 -1
- package/dist/tools/deep-reasoning/tools.d.ts.map +1 -1
- package/dist/tools/deep-reasoning/tools.js +8 -1
- package/dist/tools/deep-reasoning/tools.js.map +1 -1
- package/dist/tools/deep-reasoning/types.d.ts +5 -30
- package/dist/tools/deep-reasoning/types.d.ts.map +1 -1
- package/dist/tools/deep-reasoning/types.js +10 -1
- package/dist/tools/deep-reasoning/types.js.map +1 -1
- package/dist/tools/file/index.d.ts +3 -5
- package/dist/tools/file/index.d.ts.map +1 -1
- package/dist/tools/file/index.js +2 -4
- package/dist/tools/file/index.js.map +1 -1
- package/dist/tools/file/tools.d.ts +8 -11
- package/dist/tools/file/tools.d.ts.map +1 -1
- package/dist/tools/file/tools.js +45 -59
- package/dist/tools/file/tools.js.map +1 -1
- package/dist/tools/glob/cli.d.ts.map +1 -1
- package/dist/tools/glob/cli.js +8 -6
- package/dist/tools/glob/cli.js.map +1 -1
- package/dist/tools/glob/tools.d.ts.map +1 -1
- package/dist/tools/glob/tools.js +7 -10
- package/dist/tools/glob/tools.js.map +1 -1
- package/dist/tools/grep/cli.d.ts.map +1 -1
- package/dist/tools/grep/cli.js +0 -2
- package/dist/tools/grep/cli.js.map +1 -1
- package/dist/tools/grep/constants.d.ts.map +1 -1
- package/dist/tools/grep/constants.js +3 -5
- package/dist/tools/grep/constants.js.map +1 -1
- package/dist/tools/grep/downloader.d.ts.map +1 -1
- package/dist/tools/grep/downloader.js +3 -3
- package/dist/tools/grep/downloader.js.map +1 -1
- package/dist/tools/grep/tools.d.ts +2 -2
- package/dist/tools/grep/tools.d.ts.map +1 -1
- package/dist/tools/grep/tools.js +8 -14
- package/dist/tools/grep/tools.js.map +1 -1
- package/dist/tools/index.d.ts +10 -11
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +9 -22
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/model-retry.d.ts +0 -40
- package/dist/tools/model-retry.d.ts.map +1 -1
- package/dist/tools/model-retry.js +1 -49
- package/dist/tools/model-retry.js.map +1 -1
- package/dist/tools/plan/constants.d.ts +0 -6
- package/dist/tools/plan/constants.d.ts.map +1 -1
- package/dist/tools/plan/constants.js +9 -6
- package/dist/tools/plan/constants.js.map +1 -1
- package/dist/tools/plan/index.d.ts +1 -1
- package/dist/tools/plan/index.d.ts.map +1 -1
- package/dist/tools/plan/index.js +1 -4
- package/dist/tools/plan/index.js.map +1 -1
- package/dist/tools/plan/tools.d.ts +2 -2
- package/dist/tools/plan/tools.d.ts.map +1 -1
- package/dist/tools/plan/tools.js +10 -11
- package/dist/tools/plan/tools.js.map +1 -1
- package/dist/tools/plan/types.d.ts +22 -32
- package/dist/tools/plan/types.d.ts.map +1 -1
- package/dist/tools/plan/types.js +11 -3
- package/dist/tools/plan/types.js.map +1 -1
- package/dist/tools/progress/index.d.ts +3 -22
- package/dist/tools/progress/index.d.ts.map +1 -1
- package/dist/tools/progress/index.js +19 -34
- package/dist/tools/progress/index.js.map +1 -1
- package/dist/tools/search-skills.d.ts +0 -23
- package/dist/tools/search-skills.d.ts.map +1 -1
- package/dist/tools/search-skills.js +3 -32
- package/dist/tools/search-skills.js.map +1 -1
- package/dist/tools/shell/background.d.ts +2 -18
- package/dist/tools/shell/background.d.ts.map +1 -1
- package/dist/tools/shell/background.js +45 -48
- package/dist/tools/shell/background.js.map +1 -1
- package/dist/tools/shell/constants.d.ts +0 -3
- package/dist/tools/shell/constants.d.ts.map +1 -1
- package/dist/tools/shell/constants.js +16 -6
- package/dist/tools/shell/constants.js.map +1 -1
- package/dist/tools/shell/index.d.ts +1 -1
- package/dist/tools/shell/index.d.ts.map +1 -1
- package/dist/tools/shell/index.js +1 -1
- package/dist/tools/shell/index.js.map +1 -1
- package/dist/tools/shell/tools.d.ts +3 -3
- package/dist/tools/shell/tools.d.ts.map +1 -1
- package/dist/tools/shell/tools.js +0 -2
- package/dist/tools/shell/tools.js.map +1 -1
- package/dist/tools/shell/types.d.ts +5 -13
- package/dist/tools/shell/types.d.ts.map +1 -1
- package/dist/tools/shell/types.js +10 -1
- package/dist/tools/shell/types.js.map +1 -1
- package/dist/tools/spawn-agent/check-agent.d.ts +45 -0
- package/dist/tools/spawn-agent/check-agent.d.ts.map +1 -0
- package/dist/tools/spawn-agent/check-agent.js +84 -0
- package/dist/tools/spawn-agent/check-agent.js.map +1 -0
- package/dist/tools/spawn-agent/index.d.ts +44 -51
- package/dist/tools/spawn-agent/index.d.ts.map +1 -1
- package/dist/tools/spawn-agent/index.js +196 -84
- package/dist/tools/spawn-agent/index.js.map +1 -1
- package/dist/tools/spawn-agent/registry.d.ts +36 -0
- package/dist/tools/spawn-agent/registry.d.ts.map +1 -0
- package/dist/tools/spawn-agent/registry.js +88 -0
- package/dist/tools/spawn-agent/registry.js.map +1 -0
- package/dist/tools/utils/errors.d.ts +2 -1
- package/dist/tools/utils/errors.d.ts.map +1 -1
- package/dist/tools/utils/errors.js +2 -1
- package/dist/tools/utils/errors.js.map +1 -1
- package/dist/tools/utils/shell.d.ts +0 -11
- package/dist/tools/utils/shell.d.ts.map +1 -1
- package/dist/tools/utils/shell.js +10 -78
- package/dist/tools/utils/shell.js.map +1 -1
- package/dist/tools/utils/tool-result.d.ts +0 -3
- package/dist/tools/utils/tool-result.d.ts.map +1 -1
- package/dist/tools/utils/tool-result.js +4 -4
- package/dist/tools/utils/tool-result.js.map +1 -1
- package/dist/tools/web-search/index.d.ts +4 -0
- package/dist/tools/web-search/index.d.ts.map +1 -0
- package/dist/tools/web-search/index.js +3 -0
- package/dist/tools/web-search/index.js.map +1 -0
- package/dist/tools/web-search/tools.d.ts +17 -0
- package/dist/tools/web-search/tools.d.ts.map +1 -0
- package/dist/tools/web-search/tools.js +81 -0
- package/dist/tools/web-search/tools.js.map +1 -0
- package/dist/tools/web-search/types.d.ts +16 -0
- package/dist/tools/web-search/types.d.ts.map +1 -0
- package/dist/tools/web-search/types.js +29 -0
- package/dist/tools/web-search/types.js.map +1 -0
- package/dist/tools/workspace-middleware.d.ts +14 -0
- package/dist/tools/workspace-middleware.d.ts.map +1 -0
- package/dist/tools/workspace-middleware.js +97 -0
- package/dist/tools/workspace-middleware.js.map +1 -0
- package/dist/types/agent.d.ts +1 -66
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +0 -6
- package/dist/types/agent.js.map +1 -1
- package/dist/types/index.d.ts +4 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/lifecycle.d.ts +0 -141
- package/dist/types/lifecycle.d.ts.map +1 -1
- package/dist/types/lifecycle.js +4 -54
- package/dist/types/lifecycle.js.map +1 -1
- package/dist/types/streaming.d.ts +0 -4
- package/dist/types/streaming.d.ts.map +1 -1
- package/dist/types/streaming.js +0 -4
- package/dist/types/streaming.js.map +1 -1
- package/dist/usage-limits.d.ts +0 -37
- package/dist/usage-limits.d.ts.map +1 -1
- package/dist/usage-limits.js +1 -40
- package/dist/usage-limits.js.map +1 -1
- package/dist/workflow/durable-tool.d.ts +0 -84
- package/dist/workflow/durable-tool.d.ts.map +1 -1
- package/dist/workflow/durable-tool.js +2 -104
- package/dist/workflow/durable-tool.js.map +1 -1
- package/dist/workflow/hooks.d.ts +0 -215
- package/dist/workflow/hooks.d.ts.map +1 -1
- package/dist/workflow/hooks.js +15 -221
- package/dist/workflow/hooks.js.map +1 -1
- package/dist/workflow/index.d.ts +0 -9
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +0 -12
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/utils.d.ts +0 -24
- package/dist/workflow/utils.d.ts.map +1 -1
- package/dist/workflow/utils.js +1 -32
- package/dist/workflow/utils.js.map +1 -1
- package/dist/wrappers/best-of-n.d.ts +0 -35
- package/dist/wrappers/best-of-n.d.ts.map +1 -1
- package/dist/wrappers/best-of-n.js +4 -53
- package/dist/wrappers/best-of-n.js.map +1 -1
- package/dist/wrappers/refine-loop.d.ts +36 -0
- package/dist/wrappers/refine-loop.d.ts.map +1 -0
- package/dist/wrappers/refine-loop.js +135 -0
- package/dist/wrappers/refine-loop.js.map +1 -0
- package/package.json +14 -8
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Sub-agent registry and persistence.
|
|
3
|
+
* Tracks the status, task, and lifecycle of all spawned agents.
|
|
4
|
+
* Provides methods for registering, updating, and persisting sub-agent metadata to disk.
|
|
5
|
+
*/
|
|
6
|
+
import { writeFile, readFile, mkdir } from 'node:fs/promises';
|
|
7
|
+
import { existsSync } from 'node:fs';
|
|
8
|
+
import { dirname } from 'node:path';
|
|
9
|
+
import { createLogger } from '@agntk/logger';
|
|
10
|
+
const log = createLogger('@agntk/core:agent-registry');
|
|
11
|
+
export class AgentRegistry {
|
|
12
|
+
agents = new Map();
|
|
13
|
+
persistPath = null;
|
|
14
|
+
setPersistPath(path) {
|
|
15
|
+
this.persistPath = path;
|
|
16
|
+
}
|
|
17
|
+
async register(entry) {
|
|
18
|
+
this.agents.set(entry.agentId, entry);
|
|
19
|
+
log.debug('Agent registered', { agentId: entry.agentId, task: entry.task.slice(0, 50) });
|
|
20
|
+
await this.persist();
|
|
21
|
+
}
|
|
22
|
+
async update(agentId, updates) {
|
|
23
|
+
const entry = this.agents.get(agentId);
|
|
24
|
+
if (!entry) {
|
|
25
|
+
log.warn('Attempted to update non-existent agent', { agentId });
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
Object.assign(entry, updates);
|
|
29
|
+
log.debug('Agent updated', { agentId, status: entry.status });
|
|
30
|
+
await this.persist();
|
|
31
|
+
}
|
|
32
|
+
get(agentId) {
|
|
33
|
+
return this.agents.get(agentId);
|
|
34
|
+
}
|
|
35
|
+
getAll(statusFilter) {
|
|
36
|
+
const entries = Array.from(this.agents.values());
|
|
37
|
+
if (statusFilter) {
|
|
38
|
+
return entries.filter((e) => e.status === statusFilter);
|
|
39
|
+
}
|
|
40
|
+
return entries;
|
|
41
|
+
}
|
|
42
|
+
hasRunning() {
|
|
43
|
+
return Array.from(this.agents.values()).some((e) => e.status === 'running');
|
|
44
|
+
}
|
|
45
|
+
getCounts() {
|
|
46
|
+
const counts = { running: 0, completed: 0, failed: 0 };
|
|
47
|
+
for (const entry of this.agents.values()) {
|
|
48
|
+
counts[entry.status]++;
|
|
49
|
+
}
|
|
50
|
+
return counts;
|
|
51
|
+
}
|
|
52
|
+
async persist() {
|
|
53
|
+
if (!this.persistPath)
|
|
54
|
+
return;
|
|
55
|
+
try {
|
|
56
|
+
const dir = dirname(this.persistPath);
|
|
57
|
+
if (!existsSync(dir)) {
|
|
58
|
+
await mkdir(dir, { recursive: true });
|
|
59
|
+
}
|
|
60
|
+
const data = JSON.stringify(Array.from(this.agents.values()), null, 2);
|
|
61
|
+
await writeFile(this.persistPath, data, 'utf-8');
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
log.warn('Registry persist failed', {
|
|
65
|
+
error: err instanceof Error ? err.message : String(err),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async loadFromDisk(path) {
|
|
70
|
+
this.persistPath = path;
|
|
71
|
+
if (!existsSync(path))
|
|
72
|
+
return;
|
|
73
|
+
try {
|
|
74
|
+
const data = await readFile(path, 'utf-8');
|
|
75
|
+
const entries = JSON.parse(data);
|
|
76
|
+
for (const entry of entries) {
|
|
77
|
+
this.agents.set(entry.agentId, entry);
|
|
78
|
+
}
|
|
79
|
+
log.info('Registry loaded from disk', { count: entries.length, path });
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
log.warn('Registry load failed', {
|
|
83
|
+
error: err instanceof Error ? err.message : String(err),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/spawn-agent/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,oBAAY,aAAa;IACvB,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IACrC,OAAO,YAAY;IACnB,SAAS,cAAc;CACxB;AAED,qBAAa,SAAU,SAAQ,KAAK;aAGhB,IAAI,EAAE,aAAa;aACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjD,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,aAAa,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;IAMnD,MAAM;;;;;CAOP"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/tools/utils/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/tools/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAN,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,oDAAmC,CAAA;IACnC,wDAAuC,CAAA;IACvC,sDAAqC,CAAA;IACrC,oCAAmB,CAAA;IACnB,wCAAuB,CAAA;AACzB,CAAC,EANW,aAAa,KAAb,aAAa,QAMxB;AAED,MAAM,OAAO,SAAU,SAAQ,KAAK;IAGhB;IACA;IAHlB,YACE,OAAe,EACC,IAAmB,EACnB,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAe;QACnB,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,17 +1,6 @@
|
|
|
1
1
|
export declare function isDangerousCommand(command: string): boolean;
|
|
2
|
-
/**
|
|
3
|
-
* Ensure the requested cwd is within workspaceRoot (or is workspaceRoot itself).
|
|
4
|
-
* Returns the resolved cwd, or throws if the path escapes the workspace.
|
|
5
|
-
*/
|
|
6
2
|
export declare function validateCwd(cwd: string, workspaceRoot: string): string;
|
|
7
|
-
/**
|
|
8
|
-
* Build a sanitized copy of process.env suitable for child processes.
|
|
9
|
-
* Strips all credential-like keys; always preserves PATH, HOME, USER, TERM, LANG, etc.
|
|
10
|
-
*/
|
|
11
3
|
export declare function buildSanitizedEnv(extra?: Record<string, string>): Record<string, string>;
|
|
12
|
-
/**
|
|
13
|
-
* Redact API keys and secrets from command output before returning to the LLM.
|
|
14
|
-
*/
|
|
15
4
|
export declare function sanitizeOutput(output: string): string;
|
|
16
5
|
export interface ShellOptions {
|
|
17
6
|
cwd?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/shell.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/shell.ts"],"names":[],"mappings":"AAuDA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAYtE;AAwBD,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiB5F;AAYD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAqEtB;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CAuBD"}
|
|
@@ -1,93 +1,43 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import * as fs from 'node:fs';
|
|
4
|
-
// ============================================================================
|
|
5
|
-
// Dangerous Command Detection (S-1, S-2, S-3, S-4, S-5, S-6)
|
|
6
|
-
// ============================================================================
|
|
7
|
-
/**
|
|
8
|
-
* Patterns that are unconditionally blocked.
|
|
9
|
-
*
|
|
10
|
-
* Covers:
|
|
11
|
-
* S-1: rm with any target (not just absolute paths)
|
|
12
|
-
* S-2: Nested interpreter invocation (bash -c, python -c, node -e, etc.)
|
|
13
|
-
* S-3: Destructive git operations
|
|
14
|
-
* S-4: Fork bomb (multiple forms)
|
|
15
|
-
* S-5: chmod with dangerous modes (666, setuid, world-writable)
|
|
16
|
-
* S-6: Pipe-to-shell / download-and-execute bypass
|
|
17
|
-
*/
|
|
18
4
|
const DANGEROUS_PATTERNS = [
|
|
19
|
-
// S-1: rm -r/-rf targeting dangerous targets.
|
|
20
|
-
//
|
|
21
|
-
// Dangerous targets: bare `.` (current dir), `..` (parent), `*` (glob all),
|
|
22
|
-
// `/` (root), `~` (home), `$(...)` or `${...}` or `` ` `` (command sub)
|
|
23
|
-
// Safe targets: `./dist`, `./node_modules`, `./build`, etc. (explicit relative path)
|
|
24
|
-
//
|
|
25
|
-
// Strategy: after flags, match a target that is NOT `.` followed by `/`.
|
|
26
|
-
// `(?!\.[/\w])` means: NOT `.` followed by slash or word char — i.e. not `./dist`.
|
|
27
|
-
// We then explicitly enumerate dangerous patterns.
|
|
28
5
|
/\brm\s+(-[^\s]*r[^\s]*\s+|--recursive\s+)((?<!\.)\.\.(?![^\s])|(?<=\s)\.(?=[\s$])|(?<=\s)\.(?=\s|$)|\*|\/|~|\$[({`])/i,
|
|
29
|
-
// Simpler, more readable alternative that splits into two patterns:
|
|
30
|
-
// Pattern A: rm -r targeting .. or * or / or ~ or command sub
|
|
31
6
|
/\brm\s+-[^\s]*r[^\s]*\s+(\*|\/|~|\$[({]|`|\.\.(\s|$|\/))/i,
|
|
32
|
-
|
|
33
|
-
/\brm\s+-[^\s]*r[^\s]*\s+\.(?![\w\/])/i,
|
|
34
|
-
// Pattern C: rm without -r but with -f targeting absolute or dangerous paths
|
|
7
|
+
/\brm\s+-[^\s]*r[^\s]*\s+\.(?![\w/])/i,
|
|
35
8
|
/\brm\s+-[^\s]*f[^\s]*\s+(\*|~|\$[({]|`|\.\.(\s|$|\/)|\/(?!tmp|var\/tmp))/i,
|
|
36
|
-
// S-2: Nested interpreter invocation
|
|
37
9
|
/\b(bash|sh|zsh|dash|ksh|fish|tcsh)\s+(-[ce]|--[a-z]+\s)/i,
|
|
38
10
|
/\b(python3?|python3\.[0-9]+|pypy3?)\s+-[cC]/i,
|
|
39
11
|
/\b(node|nodejs|deno|bun)\s+-[eE]/i,
|
|
40
12
|
/\b(perl|ruby|php|lua|Rscript|groovy)\s+-[e]/i,
|
|
41
|
-
// S-3: Destructive git operations
|
|
42
13
|
/\bgit\s+(push\s+[^\n]*--?force|push\s+-f\b)/i,
|
|
43
14
|
/\bgit\s+reset\s+--hard/i,
|
|
44
15
|
/\bgit\s+clean\s+-[fdxXqn]*[fF][fdxXqn]*/i,
|
|
45
16
|
/\bgit\s+rebase\s+(-i|--interactive)/i,
|
|
46
|
-
// S-4: Fork bomb — colon function form and nohup infinite loop, but NOT normal while loops
|
|
47
17
|
/:\(\s*\)\s*\{/,
|
|
48
18
|
/:\s*\(\s*\)\s*\{.*:\s*\|\s*:/,
|
|
49
|
-
// S-5: chmod dangerous modes (setuid, setgid, world-write, 666, 777)
|
|
50
|
-
// Allows: 644, 755, 600, 700, u+x, go-w etc.
|
|
51
|
-
// Blocks: 666, 777, 4xxx (setuid), 2xxx (setgid), +s, o+w, a+w, u+s, g+s
|
|
52
19
|
/\bchmod\s+(-R\s+)?(666|777|4[0-9]{3}|2[0-9]{3}|\+s|o\+w|a\+w|u\+s|g\+s)/i,
|
|
53
|
-
// S-6: Pipe-to-shell and download-execute bypasses
|
|
54
20
|
/\b(curl|wget)\b.*\|\s*(bash|sh|zsh|dash|python3?|node)/i,
|
|
55
21
|
/\b(curl|wget)\b.*>\s*\S+.*&&\s*(bash|sh|chmod)/i,
|
|
56
|
-
// Disk/device destruction
|
|
57
22
|
/>\s*\/dev\/(sd[a-z]|nvme[0-9]|hd[a-z]|vd[a-z])/i,
|
|
58
23
|
/\bmkfs\./i,
|
|
59
24
|
/\bdd\s+if=/i,
|
|
60
|
-
// Privilege escalation
|
|
61
25
|
/\b(sudo|su)\s/i,
|
|
62
26
|
/\b(shutdown|reboot|halt|poweroff)\b/i,
|
|
63
|
-
// Shell eval builtin — `eval <string>` or `eval "..."`, not English words like 'evaluate'
|
|
64
27
|
/\beval\s*["'`(]/i,
|
|
65
28
|
/^eval\s/,
|
|
66
29
|
/;\s*eval\s/,
|
|
67
30
|
/&&\s*eval\s/,
|
|
68
31
|
/\|\s*eval\s/,
|
|
69
|
-
// MITRE T1027.010: Decode-then-execute bypass patterns
|
|
70
|
-
// base64 -d / --decode / openssl base64 decode → piped to shell
|
|
71
32
|
/\b(base64\s+-d|base64\s+--decode|openssl\s+enc\s+-d)\b.*\|\s*(bash|sh|zsh|dash|node|python3?)/i,
|
|
72
|
-
// xxd hex-decode → piped to shell
|
|
73
33
|
/\b(xxd\s+-r|xxd\s+--reverse)\b.*\|\s*(bash|sh|zsh|dash|node|python3?)/i,
|
|
74
|
-
// gzip decompress → piped to shell
|
|
75
34
|
/\bgzip\s+(-d|--decompress)\b.*\|\s*(bash|sh|zsh|dash)/i,
|
|
76
|
-
// printf with hex escapes → piped to shell
|
|
77
35
|
/\bprintf\b.*\\x[0-9a-fA-F]{2}.*\|\s*(bash|sh|zsh|dash)/i,
|
|
78
|
-
// ANSI-C quoting with octal escapes: $'\173\40...' | sh
|
|
79
36
|
/\$'\\[0-7]{3,}'.*\|\s*(bash|sh|zsh|dash)/i,
|
|
80
37
|
];
|
|
81
38
|
export function isDangerousCommand(command) {
|
|
82
39
|
return DANGEROUS_PATTERNS.some((pattern) => pattern.test(command));
|
|
83
40
|
}
|
|
84
|
-
// ============================================================================
|
|
85
|
-
// CWD Validation (S-13)
|
|
86
|
-
// ============================================================================
|
|
87
|
-
/**
|
|
88
|
-
* Ensure the requested cwd is within workspaceRoot (or is workspaceRoot itself).
|
|
89
|
-
* Returns the resolved cwd, or throws if the path escapes the workspace.
|
|
90
|
-
*/
|
|
91
41
|
export function validateCwd(cwd, workspaceRoot) {
|
|
92
42
|
const resolvedCwd = path.resolve(cwd);
|
|
93
43
|
let realWorkspace;
|
|
@@ -102,10 +52,6 @@ export function validateCwd(cwd, workspaceRoot) {
|
|
|
102
52
|
}
|
|
103
53
|
return resolvedCwd;
|
|
104
54
|
}
|
|
105
|
-
// ============================================================================
|
|
106
|
-
// Env Var Filtering (A-3)
|
|
107
|
-
// ============================================================================
|
|
108
|
-
/** Key patterns that indicate credentials — stripped from child process env. */
|
|
109
55
|
const SENSITIVE_ENV_PATTERNS = [
|
|
110
56
|
/API[_-]?KEY/i,
|
|
111
57
|
/SECRET/i,
|
|
@@ -127,10 +73,6 @@ const SENSITIVE_ENV_PATTERNS = [
|
|
|
127
73
|
/MONGO(DB)?_URI/i,
|
|
128
74
|
/REDIS_URL/i,
|
|
129
75
|
];
|
|
130
|
-
/**
|
|
131
|
-
* Build a sanitized copy of process.env suitable for child processes.
|
|
132
|
-
* Strips all credential-like keys; always preserves PATH, HOME, USER, TERM, LANG, etc.
|
|
133
|
-
*/
|
|
134
76
|
export function buildSanitizedEnv(extra = {}) {
|
|
135
77
|
const safe = {};
|
|
136
78
|
for (const [key, value] of Object.entries(process.env)) {
|
|
@@ -140,32 +82,23 @@ export function buildSanitizedEnv(extra = {}) {
|
|
|
140
82
|
continue;
|
|
141
83
|
safe[key] = value;
|
|
142
84
|
}
|
|
143
|
-
// Merge caller-supplied extras, but also filter those
|
|
144
85
|
for (const [key, value] of Object.entries(extra)) {
|
|
145
86
|
if (SENSITIVE_ENV_PATTERNS.some((p) => p.test(key)))
|
|
146
87
|
continue;
|
|
147
88
|
safe[key] = value;
|
|
148
89
|
}
|
|
149
|
-
// Always ensure PATH is present
|
|
150
90
|
if (process.env.PATH)
|
|
151
91
|
safe.PATH = process.env.PATH;
|
|
152
92
|
return safe;
|
|
153
93
|
}
|
|
154
|
-
// ============================================================================
|
|
155
|
-
// Output Sanitization (A-1)
|
|
156
|
-
// ============================================================================
|
|
157
94
|
const SENSITIVE_OUTPUT_PATTERNS = [
|
|
158
95
|
[/\bsk-[a-zA-Z0-9]{16,}\b/g, '[OPENAI_KEY REDACTED]'],
|
|
159
|
-
[/\bsk-ant-[a-zA-Z0-9
|
|
96
|
+
[/\bsk-ant-[a-zA-Z0-9-]{20,}\b/g, '[ANTHROPIC_KEY REDACTED]'],
|
|
160
97
|
[/\bghp_[a-zA-Z0-9]{36}\b/g, '[GITHUB_TOKEN REDACTED]'],
|
|
161
|
-
[/\bxoxb-[a-zA-Z0-9
|
|
162
|
-
[/Bearer\s+[a-zA-Z0-9._
|
|
163
|
-
|
|
164
|
-
[/(?:api[_\-]?key|secret|token|password|api_secret)\s*[=:]\s*[^\s'"]{8,}/gi, '[SECRET REDACTED]'],
|
|
98
|
+
[/\bxoxb-[a-zA-Z0-9-]+\b/g, '[SLACK_TOKEN REDACTED]'],
|
|
99
|
+
[/Bearer\s+[a-zA-Z0-9._-]{20,}/g, '[BEARER_TOKEN REDACTED]'],
|
|
100
|
+
[/(?:api[_-]?key|secret|token|password|api_secret)\s*[=:]\s*[^\s'"]{8,}/gi, '[SECRET REDACTED]'],
|
|
165
101
|
];
|
|
166
|
-
/**
|
|
167
|
-
* Redact API keys and secrets from command output before returning to the LLM.
|
|
168
|
-
*/
|
|
169
102
|
export function sanitizeOutput(output) {
|
|
170
103
|
let sanitized = output;
|
|
171
104
|
for (const [pattern, replacement] of SENSITIVE_OUTPUT_PATTERNS) {
|
|
@@ -174,7 +107,7 @@ export function sanitizeOutput(output) {
|
|
|
174
107
|
return sanitized;
|
|
175
108
|
}
|
|
176
109
|
export async function executeCommand(command, options = {}) {
|
|
177
|
-
const { cwd = process.cwd(), timeout = 30000, maxBuffer = 1024 * 1024, env
|
|
110
|
+
const { cwd = process.cwd(), timeout = 30000, maxBuffer = 1024 * 1024, env } = options;
|
|
178
111
|
const startTime = performance.now();
|
|
179
112
|
return new Promise((resolve) => {
|
|
180
113
|
let stdout = '';
|
|
@@ -191,7 +124,8 @@ export async function executeCommand(command, options = {}) {
|
|
|
191
124
|
try {
|
|
192
125
|
proc.kill('SIGKILL');
|
|
193
126
|
}
|
|
194
|
-
catch
|
|
127
|
+
catch {
|
|
128
|
+
void 0;
|
|
195
129
|
}
|
|
196
130
|
}, 5000);
|
|
197
131
|
}, timeout);
|
|
@@ -207,10 +141,8 @@ export async function executeCommand(command, options = {}) {
|
|
|
207
141
|
stderr += chunk;
|
|
208
142
|
}
|
|
209
143
|
});
|
|
210
|
-
proc.stdout.on('error', () => {
|
|
211
|
-
});
|
|
212
|
-
proc.stderr.on('error', () => {
|
|
213
|
-
});
|
|
144
|
+
proc.stdout.on('error', () => { });
|
|
145
|
+
proc.stderr.on('error', () => { });
|
|
214
146
|
proc.on('close', (code) => {
|
|
215
147
|
clearTimeout(timer);
|
|
216
148
|
resolve({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/tools/utils/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/tools/utils/shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Standard tool result formatters.
|
|
3
|
-
*/
|
|
4
1
|
export declare function success<T extends Record<string, unknown>>(data?: T, message?: string): string;
|
|
5
2
|
export declare function error(err: Error | string, context?: Record<string, unknown>): string;
|
|
6
3
|
//# sourceMappingURL=tool-result.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-result.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/tool-result.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tool-result.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/tool-result.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAS7F;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAUpF"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Standard tool result formatters.
|
|
3
|
-
*/
|
|
4
1
|
export function success(data, message) {
|
|
5
2
|
const result = { success: true };
|
|
6
3
|
if (data) {
|
|
@@ -13,7 +10,10 @@ export function success(data, message) {
|
|
|
13
10
|
}
|
|
14
11
|
export function error(err, context) {
|
|
15
12
|
const message = err instanceof Error ? err.message : err;
|
|
16
|
-
const result = {
|
|
13
|
+
const result = {
|
|
14
|
+
success: false,
|
|
15
|
+
error: message,
|
|
16
|
+
};
|
|
17
17
|
if (context) {
|
|
18
18
|
Object.assign(result, context);
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-result.js","sourceRoot":"","sources":["../../../src/tools/utils/tool-result.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tool-result.js","sourceRoot":"","sources":["../../../src/tools/utils/tool-result.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAoC,IAAQ,EAAE,OAAgB;IACnF,MAAM,MAAM,GAAkD,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChF,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAmB,EAAE,OAAiC;IAC1E,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,MAAM,MAAM,GAAyE;QACnF,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO;KACf,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/web-search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC1E,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/web-search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const webSearchTool: import("ai").Tool<{
|
|
2
|
+
query: string;
|
|
3
|
+
maxResults?: number | undefined;
|
|
4
|
+
timeRange?: "day" | "week" | "month" | "year" | undefined;
|
|
5
|
+
extractContent?: boolean | undefined;
|
|
6
|
+
extractTop?: number | undefined;
|
|
7
|
+
}, string>;
|
|
8
|
+
export declare function createWebSearchTool(): {
|
|
9
|
+
web_search: import("ai").Tool<{
|
|
10
|
+
query: string;
|
|
11
|
+
maxResults?: number | undefined;
|
|
12
|
+
timeRange?: "day" | "week" | "month" | "year" | undefined;
|
|
13
|
+
extractContent?: boolean | undefined;
|
|
14
|
+
extractTop?: number | undefined;
|
|
15
|
+
}, string>;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/tools/web-search/tools.ts"],"names":[],"mappings":"AAgDA,eAAO,MAAM,aAAa;;;;;;UAsDxB,CAAC;AAEH,wBAAgB,mBAAmB;;;;;;;;EAElC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { createLogger } from '@agntk/logger';
|
|
3
|
+
import { search, extractContent, } from '@agntk/search';
|
|
4
|
+
import { success, error } from '../utils/tool-result.js';
|
|
5
|
+
import { webSearchInputSchema, WEB_SEARCH_DESCRIPTION } from './types.js';
|
|
6
|
+
const log = createLogger('@agntk/core:web-search');
|
|
7
|
+
function formatSearchOutput(response, extracted) {
|
|
8
|
+
const lines = [];
|
|
9
|
+
lines.push(`Search: "${response.query}" (${response.provider}, ${response.durationMs}ms)`);
|
|
10
|
+
lines.push('');
|
|
11
|
+
for (let i = 0; i < response.results.length; i++) {
|
|
12
|
+
const r = response.results[i];
|
|
13
|
+
lines.push(`${i + 1}. ${r.title}`);
|
|
14
|
+
lines.push(` ${r.url}`);
|
|
15
|
+
if (r.snippet) {
|
|
16
|
+
lines.push(` ${r.snippet}`);
|
|
17
|
+
}
|
|
18
|
+
lines.push('');
|
|
19
|
+
}
|
|
20
|
+
if (extracted.length > 0) {
|
|
21
|
+
lines.push('--- Extracted Content ---');
|
|
22
|
+
lines.push('');
|
|
23
|
+
for (const e of extracted) {
|
|
24
|
+
lines.push(`### ${e.title}`);
|
|
25
|
+
lines.push(`Source: ${e.url}`);
|
|
26
|
+
lines.push('');
|
|
27
|
+
lines.push(e.content);
|
|
28
|
+
lines.push('');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return lines.join('\n');
|
|
32
|
+
}
|
|
33
|
+
export const webSearchTool = tool({
|
|
34
|
+
description: WEB_SEARCH_DESCRIPTION,
|
|
35
|
+
inputSchema: webSearchInputSchema,
|
|
36
|
+
execute: async (args) => {
|
|
37
|
+
log.debug('web_search execute', { query: args.query, maxResults: args.maxResults });
|
|
38
|
+
try {
|
|
39
|
+
const searchOptions = {
|
|
40
|
+
maxResults: args.maxResults,
|
|
41
|
+
timeRange: args.timeRange,
|
|
42
|
+
};
|
|
43
|
+
const response = await search(args.query, searchOptions);
|
|
44
|
+
let extracted = [];
|
|
45
|
+
if (args.extractContent) {
|
|
46
|
+
const top = args.extractTop ?? 3;
|
|
47
|
+
const urls = response.results.slice(0, top);
|
|
48
|
+
const extractions = await Promise.allSettled(urls.map((r) => extractContent(r.url, { maxLength: 10_000 })));
|
|
49
|
+
extracted = extractions
|
|
50
|
+
.filter((e) => e.status === 'fulfilled')
|
|
51
|
+
.map((e) => ({
|
|
52
|
+
url: e.value.url,
|
|
53
|
+
title: e.value.title,
|
|
54
|
+
content: e.value.content,
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
const output = formatSearchOutput(response, extracted);
|
|
58
|
+
log.info('web_search complete', {
|
|
59
|
+
query: args.query,
|
|
60
|
+
results: response.results.length,
|
|
61
|
+
provider: response.provider,
|
|
62
|
+
extracted: extracted.length,
|
|
63
|
+
});
|
|
64
|
+
return success({
|
|
65
|
+
output,
|
|
66
|
+
results: response.results,
|
|
67
|
+
provider: response.provider,
|
|
68
|
+
durationMs: response.durationMs,
|
|
69
|
+
...(extracted.length > 0 ? { extracted } : {}),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
log.error('web_search failed', { query: args.query, error: err });
|
|
74
|
+
return error(err instanceof Error ? err.message : String(err));
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
export function createWebSearchTool() {
|
|
79
|
+
return { web_search: webSearchTool };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/tools/web-search/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const webSearchInputSchema: z.ZodObject<{
|
|
3
|
+
query: z.ZodString;
|
|
4
|
+
maxResults: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
timeRange: z.ZodOptional<z.ZodEnum<{
|
|
6
|
+
day: "day";
|
|
7
|
+
week: "week";
|
|
8
|
+
month: "month";
|
|
9
|
+
year: "year";
|
|
10
|
+
}>>;
|
|
11
|
+
extractContent: z.ZodOptional<z.ZodBoolean>;
|
|
12
|
+
extractTop: z.ZodOptional<z.ZodNumber>;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
export type WebSearchInput = z.infer<typeof webSearchInputSchema>;
|
|
15
|
+
export declare const WEB_SEARCH_DESCRIPTION: string;
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/web-search/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;;;;;;iBAwB/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,sBAAsB,QAI6B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const webSearchInputSchema = z.object({
|
|
3
|
+
query: z.string().describe('Search query string'),
|
|
4
|
+
maxResults: z
|
|
5
|
+
.number()
|
|
6
|
+
.min(1)
|
|
7
|
+
.max(20)
|
|
8
|
+
.optional()
|
|
9
|
+
.describe('Maximum number of results to return (default: 10)'),
|
|
10
|
+
timeRange: z
|
|
11
|
+
.enum(['day', 'week', 'month', 'year'])
|
|
12
|
+
.optional()
|
|
13
|
+
.describe('Filter results by recency'),
|
|
14
|
+
extractContent: z
|
|
15
|
+
.boolean()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('If true, fetch and extract text content from top results'),
|
|
18
|
+
extractTop: z
|
|
19
|
+
.number()
|
|
20
|
+
.min(1)
|
|
21
|
+
.max(5)
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('Number of top results to extract content from (default: 3, requires extractContent)'),
|
|
24
|
+
});
|
|
25
|
+
export const WEB_SEARCH_DESCRIPTION = 'Search the web for current information. ' +
|
|
26
|
+
'Returns titles, URLs, and snippets from web search results. ' +
|
|
27
|
+
'Optionally extracts full page content from top results for deeper analysis. ' +
|
|
28
|
+
'Use for up-to-date information, research, and fact-checking.';
|
|
29
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/web-search/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACjD,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CAAC,mDAAmD,CAAC;IAChE,SAAS,EAAE,CAAC;SACT,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;SACtC,QAAQ,EAAE;SACV,QAAQ,CAAC,2BAA2B,CAAC;IACxC,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,0DAA0D,CAAC;IACvE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACP,qFAAqF,CACtF;CACJ,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GACjC,0CAA0C;IAC1C,8DAA8D;IAC9D,8EAA8E;IAC9E,8DAA8D,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface ToolLike {
|
|
2
|
+
description?: string;
|
|
3
|
+
execute?: Function;
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
}
|
|
6
|
+
export interface WorkspaceMiddlewareOptions {
|
|
7
|
+
getWorkspacePath: () => string | null;
|
|
8
|
+
tokenThreshold?: number;
|
|
9
|
+
summaryMaxChars?: number;
|
|
10
|
+
excludeTools?: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function wrapAllToolsWithWorkspace<T extends Record<string, ToolLike>>(tools: T, options: WorkspaceMiddlewareOptions): T;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=workspace-middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-middleware.d.ts","sourceRoot":"","sources":["../../src/tools/workspace-middleware.ts"],"names":[],"mappings":"AAOA,UAAU,QAAQ;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAEtC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAsFD,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC1E,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,0BAA0B,GAClC,CAAC,CAaH"}
|