@praveencs/agent 0.1.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/README.md +1007 -0
- package/bin/agent.ts +6 -0
- package/dist/bin/agent.d.ts +3 -0
- package/dist/bin/agent.d.ts.map +1 -0
- package/dist/bin/agent.js +5 -0
- package/dist/bin/agent.js.map +1 -0
- package/dist/src/cli/commands/config.d.ts +3 -0
- package/dist/src/cli/commands/config.d.ts.map +1 -0
- package/dist/src/cli/commands/config.js +54 -0
- package/dist/src/cli/commands/config.js.map +1 -0
- package/dist/src/cli/commands/daemon.d.ts +3 -0
- package/dist/src/cli/commands/daemon.d.ts.map +1 -0
- package/dist/src/cli/commands/daemon.js +43 -0
- package/dist/src/cli/commands/daemon.js.map +1 -0
- package/dist/src/cli/commands/doctor.d.ts +3 -0
- package/dist/src/cli/commands/doctor.d.ts.map +1 -0
- package/dist/src/cli/commands/doctor.js +84 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts +8 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -0
- package/dist/src/cli/commands/init.js +112 -0
- package/dist/src/cli/commands/init.js.map +1 -0
- package/dist/src/cli/commands/mcp.d.ts +3 -0
- package/dist/src/cli/commands/mcp.d.ts.map +1 -0
- package/dist/src/cli/commands/mcp.js +26 -0
- package/dist/src/cli/commands/mcp.js.map +1 -0
- package/dist/src/cli/commands/plan.d.ts +3 -0
- package/dist/src/cli/commands/plan.d.ts.map +1 -0
- package/dist/src/cli/commands/plan.js +220 -0
- package/dist/src/cli/commands/plan.js.map +1 -0
- package/dist/src/cli/commands/run.d.ts +3 -0
- package/dist/src/cli/commands/run.d.ts.map +1 -0
- package/dist/src/cli/commands/run.js +192 -0
- package/dist/src/cli/commands/run.js.map +1 -0
- package/dist/src/cli/commands/skills.d.ts +3 -0
- package/dist/src/cli/commands/skills.d.ts.map +1 -0
- package/dist/src/cli/commands/skills.js +143 -0
- package/dist/src/cli/commands/skills.js.map +1 -0
- package/dist/src/cli/index.d.ts +6 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +33 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/ui/progress.d.ts +17 -0
- package/dist/src/cli/ui/progress.d.ts.map +1 -0
- package/dist/src/cli/ui/progress.js +43 -0
- package/dist/src/cli/ui/progress.js.map +1 -0
- package/dist/src/cli/ui/prompt.d.ts +10 -0
- package/dist/src/cli/ui/prompt.d.ts.map +1 -0
- package/dist/src/cli/ui/prompt.js +53 -0
- package/dist/src/cli/ui/prompt.js.map +1 -0
- package/dist/src/cli/ui/report.d.ts +6 -0
- package/dist/src/cli/ui/report.d.ts.map +1 -0
- package/dist/src/cli/ui/report.js +81 -0
- package/dist/src/cli/ui/report.js.map +1 -0
- package/dist/src/config/defaults.d.ts +3 -0
- package/dist/src/config/defaults.d.ts.map +1 -0
- package/dist/src/config/defaults.js +82 -0
- package/dist/src/config/defaults.js.map +1 -0
- package/dist/src/config/loader.d.ts +33 -0
- package/dist/src/config/loader.d.ts.map +1 -0
- package/dist/src/config/loader.js +161 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/config/schema.d.ts +530 -0
- package/dist/src/config/schema.d.ts.map +1 -0
- package/dist/src/config/schema.js +97 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/config/secrets.d.ts +31 -0
- package/dist/src/config/secrets.d.ts.map +1 -0
- package/dist/src/config/secrets.js +98 -0
- package/dist/src/config/secrets.js.map +1 -0
- package/dist/src/daemon/manager.d.ts +28 -0
- package/dist/src/daemon/manager.d.ts.map +1 -0
- package/dist/src/daemon/manager.js +77 -0
- package/dist/src/daemon/manager.js.map +1 -0
- package/dist/src/daemon/scheduler.d.ts +6 -0
- package/dist/src/daemon/scheduler.d.ts.map +1 -0
- package/dist/src/daemon/scheduler.js +82 -0
- package/dist/src/daemon/scheduler.js.map +1 -0
- package/dist/src/daemon/watcher.d.ts +16 -0
- package/dist/src/daemon/watcher.d.ts.map +1 -0
- package/dist/src/daemon/watcher.js +59 -0
- package/dist/src/daemon/watcher.js.map +1 -0
- package/dist/src/engine/executor.d.ts +51 -0
- package/dist/src/engine/executor.d.ts.map +1 -0
- package/dist/src/engine/executor.js +189 -0
- package/dist/src/engine/executor.js.map +1 -0
- package/dist/src/engine/rollback.d.ts +37 -0
- package/dist/src/engine/rollback.d.ts.map +1 -0
- package/dist/src/engine/rollback.js +95 -0
- package/dist/src/engine/rollback.js.map +1 -0
- package/dist/src/engine/types.d.ts +31 -0
- package/dist/src/engine/types.d.ts.map +1 -0
- package/dist/src/engine/types.js +2 -0
- package/dist/src/engine/types.js.map +1 -0
- package/dist/src/engine/verification.d.ts +27 -0
- package/dist/src/engine/verification.d.ts.map +1 -0
- package/dist/src/engine/verification.js +75 -0
- package/dist/src/engine/verification.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +13 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/llm/cache.d.ts +20 -0
- package/dist/src/llm/cache.d.ts.map +1 -0
- package/dist/src/llm/cache.js +45 -0
- package/dist/src/llm/cache.js.map +1 -0
- package/dist/src/llm/providers/anthropic.d.ts +13 -0
- package/dist/src/llm/providers/anthropic.d.ts.map +1 -0
- package/dist/src/llm/providers/anthropic.js +69 -0
- package/dist/src/llm/providers/anthropic.js.map +1 -0
- package/dist/src/llm/providers/azure.d.ts +14 -0
- package/dist/src/llm/providers/azure.d.ts.map +1 -0
- package/dist/src/llm/providers/azure.js +98 -0
- package/dist/src/llm/providers/azure.js.map +1 -0
- package/dist/src/llm/providers/ollama.d.ts +13 -0
- package/dist/src/llm/providers/ollama.d.ts.map +1 -0
- package/dist/src/llm/providers/ollama.js +80 -0
- package/dist/src/llm/providers/ollama.js.map +1 -0
- package/dist/src/llm/providers/openai.d.ts +13 -0
- package/dist/src/llm/providers/openai.d.ts.map +1 -0
- package/dist/src/llm/providers/openai.js +74 -0
- package/dist/src/llm/providers/openai.js.map +1 -0
- package/dist/src/llm/router.d.ts +26 -0
- package/dist/src/llm/router.d.ts.map +1 -0
- package/dist/src/llm/router.js +104 -0
- package/dist/src/llm/router.js.map +1 -0
- package/dist/src/llm/types.d.ts +44 -0
- package/dist/src/llm/types.d.ts.map +1 -0
- package/dist/src/llm/types.js +2 -0
- package/dist/src/llm/types.js.map +1 -0
- package/dist/src/logging/audit-log.d.ts +89 -0
- package/dist/src/logging/audit-log.d.ts.map +1 -0
- package/dist/src/logging/audit-log.js +132 -0
- package/dist/src/logging/audit-log.js.map +1 -0
- package/dist/src/logging/logger.d.ts +13 -0
- package/dist/src/logging/logger.d.ts.map +1 -0
- package/dist/src/logging/logger.js +57 -0
- package/dist/src/logging/logger.js.map +1 -0
- package/dist/src/logging/redactor.d.ts +14 -0
- package/dist/src/logging/redactor.d.ts.map +1 -0
- package/dist/src/logging/redactor.js +48 -0
- package/dist/src/logging/redactor.js.map +1 -0
- package/dist/src/mcp/handlers.d.ts +21 -0
- package/dist/src/mcp/handlers.d.ts.map +1 -0
- package/dist/src/mcp/handlers.js +156 -0
- package/dist/src/mcp/handlers.js.map +1 -0
- package/dist/src/mcp/server.d.ts +8 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +40 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/types.d.ts +20 -0
- package/dist/src/mcp/types.d.ts.map +1 -0
- package/dist/src/mcp/types.js +2 -0
- package/dist/src/mcp/types.js.map +1 -0
- package/dist/src/plans/parser.d.ts +33 -0
- package/dist/src/plans/parser.d.ts.map +1 -0
- package/dist/src/plans/parser.js +93 -0
- package/dist/src/plans/parser.js.map +1 -0
- package/dist/src/plans/propose.d.ts +26 -0
- package/dist/src/plans/propose.d.ts.map +1 -0
- package/dist/src/plans/propose.js +85 -0
- package/dist/src/plans/propose.js.map +1 -0
- package/dist/src/plans/runner.d.ts +19 -0
- package/dist/src/plans/runner.d.ts.map +1 -0
- package/dist/src/plans/runner.js +159 -0
- package/dist/src/plans/runner.js.map +1 -0
- package/dist/src/plans/triggers.d.ts +12 -0
- package/dist/src/plans/triggers.d.ts.map +1 -0
- package/dist/src/plans/triggers.js +43 -0
- package/dist/src/plans/triggers.js.map +1 -0
- package/dist/src/plans/types.d.ts +454 -0
- package/dist/src/plans/types.d.ts.map +1 -0
- package/dist/src/plans/types.js +56 -0
- package/dist/src/plans/types.js.map +1 -0
- package/dist/src/policy/audit.d.ts +35 -0
- package/dist/src/policy/audit.d.ts.map +1 -0
- package/dist/src/policy/audit.js +39 -0
- package/dist/src/policy/audit.js.map +1 -0
- package/dist/src/policy/engine.d.ts +35 -0
- package/dist/src/policy/engine.d.ts.map +1 -0
- package/dist/src/policy/engine.js +134 -0
- package/dist/src/policy/engine.js.map +1 -0
- package/dist/src/policy/scope.d.ts +27 -0
- package/dist/src/policy/scope.d.ts.map +1 -0
- package/dist/src/policy/scope.js +89 -0
- package/dist/src/policy/scope.js.map +1 -0
- package/dist/src/policy/types.d.ts +15 -0
- package/dist/src/policy/types.d.ts.map +1 -0
- package/dist/src/policy/types.js +2 -0
- package/dist/src/policy/types.js.map +1 -0
- package/dist/src/self-extend/generator.d.ts +27 -0
- package/dist/src/self-extend/generator.d.ts.map +1 -0
- package/dist/src/self-extend/generator.js +107 -0
- package/dist/src/self-extend/generator.js.map +1 -0
- package/dist/src/self-extend/publisher.d.ts +5 -0
- package/dist/src/self-extend/publisher.d.ts.map +1 -0
- package/dist/src/self-extend/publisher.js +40 -0
- package/dist/src/self-extend/publisher.js.map +1 -0
- package/dist/src/self-extend/sandbox.d.ts +10 -0
- package/dist/src/self-extend/sandbox.d.ts.map +1 -0
- package/dist/src/self-extend/sandbox.js +22 -0
- package/dist/src/self-extend/sandbox.js.map +1 -0
- package/dist/src/skills/hub/lockfile.d.ts +15 -0
- package/dist/src/skills/hub/lockfile.d.ts.map +1 -0
- package/dist/src/skills/hub/lockfile.js +13 -0
- package/dist/src/skills/hub/lockfile.js.map +1 -0
- package/dist/src/skills/hub/publisher.d.ts +7 -0
- package/dist/src/skills/hub/publisher.d.ts.map +1 -0
- package/dist/src/skills/hub/publisher.js +10 -0
- package/dist/src/skills/hub/publisher.js.map +1 -0
- package/dist/src/skills/hub/registry.d.ts +16 -0
- package/dist/src/skills/hub/registry.d.ts.map +1 -0
- package/dist/src/skills/hub/registry.js +24 -0
- package/dist/src/skills/hub/registry.js.map +1 -0
- package/dist/src/skills/index.d.ts +12 -0
- package/dist/src/skills/index.d.ts.map +1 -0
- package/dist/src/skills/index.js +82 -0
- package/dist/src/skills/index.js.map +1 -0
- package/dist/src/skills/lifecycle.d.ts +19 -0
- package/dist/src/skills/lifecycle.d.ts.map +1 -0
- package/dist/src/skills/lifecycle.js +48 -0
- package/dist/src/skills/lifecycle.js.map +1 -0
- package/dist/src/skills/loader.d.ts +43 -0
- package/dist/src/skills/loader.d.ts.map +1 -0
- package/dist/src/skills/loader.js +142 -0
- package/dist/src/skills/loader.js.map +1 -0
- package/dist/src/skills/runner.d.ts +43 -0
- package/dist/src/skills/runner.d.ts.map +1 -0
- package/dist/src/skills/runner.js +198 -0
- package/dist/src/skills/runner.js.map +1 -0
- package/dist/src/skills/types.d.ts +150 -0
- package/dist/src/skills/types.d.ts.map +1 -0
- package/dist/src/skills/types.js +31 -0
- package/dist/src/skills/types.js.map +1 -0
- package/dist/src/skills/validator.d.ts +19 -0
- package/dist/src/skills/validator.d.ts.map +1 -0
- package/dist/src/skills/validator.js +92 -0
- package/dist/src/skills/validator.js.map +1 -0
- package/dist/src/tools/core/cmd.d.ts +24 -0
- package/dist/src/tools/core/cmd.d.ts.map +1 -0
- package/dist/src/tools/core/cmd.js +55 -0
- package/dist/src/tools/core/cmd.js.map +1 -0
- package/dist/src/tools/core/fs.d.ts +76 -0
- package/dist/src/tools/core/fs.d.ts.map +1 -0
- package/dist/src/tools/core/fs.js +173 -0
- package/dist/src/tools/core/fs.js.map +1 -0
- package/dist/src/tools/core/git.d.ts +62 -0
- package/dist/src/tools/core/git.d.ts.map +1 -0
- package/dist/src/tools/core/git.js +138 -0
- package/dist/src/tools/core/git.js.map +1 -0
- package/dist/src/tools/core/project.d.ts +17 -0
- package/dist/src/tools/core/project.d.ts.map +1 -0
- package/dist/src/tools/core/project.js +104 -0
- package/dist/src/tools/core/project.js.map +1 -0
- package/dist/src/tools/plugins/loader.d.ts +13 -0
- package/dist/src/tools/plugins/loader.d.ts.map +1 -0
- package/dist/src/tools/plugins/loader.js +36 -0
- package/dist/src/tools/plugins/loader.js.map +1 -0
- package/dist/src/tools/registry.d.ts +38 -0
- package/dist/src/tools/registry.d.ts.map +1 -0
- package/dist/src/tools/registry.js +118 -0
- package/dist/src/tools/registry.js.map +1 -0
- package/dist/src/tools/types.d.ts +46 -0
- package/dist/src/tools/types.d.ts.map +1 -0
- package/dist/src/tools/types.js +10 -0
- package/dist/src/tools/types.js.map +1 -0
- package/dist/src/utils/hash.d.ts +13 -0
- package/dist/src/utils/hash.d.ts.map +1 -0
- package/dist/src/utils/hash.js +22 -0
- package/dist/src/utils/hash.js.map +1 -0
- package/dist/src/utils/paths.d.ts +45 -0
- package/dist/src/utils/paths.d.ts.map +1 -0
- package/dist/src/utils/paths.js +71 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/schema.d.ts +16 -0
- package/dist/src/utils/schema.d.ts.map +1 -0
- package/dist/src/utils/schema.js +66 -0
- package/dist/src/utils/schema.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global tool registry — all tools register here
|
|
3
|
+
*/
|
|
4
|
+
export class ToolRegistry {
|
|
5
|
+
tools = new Map();
|
|
6
|
+
static instance;
|
|
7
|
+
static getInstance() {
|
|
8
|
+
if (!ToolRegistry.instance) {
|
|
9
|
+
ToolRegistry.instance = new ToolRegistry();
|
|
10
|
+
}
|
|
11
|
+
return ToolRegistry.instance;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Register a tool definition
|
|
15
|
+
*/
|
|
16
|
+
register(tool) {
|
|
17
|
+
if (this.tools.has(tool.name)) {
|
|
18
|
+
throw new Error(`Tool "${tool.name}" is already registered`);
|
|
19
|
+
}
|
|
20
|
+
this.tools.set(tool.name, tool);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get a tool by name
|
|
24
|
+
*/
|
|
25
|
+
get(name) {
|
|
26
|
+
return this.tools.get(name);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if a tool exists
|
|
30
|
+
*/
|
|
31
|
+
has(name) {
|
|
32
|
+
return this.tools.has(name);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* List all registered tools
|
|
36
|
+
*/
|
|
37
|
+
list() {
|
|
38
|
+
return Array.from(this.tools.values()).map((t) => ({
|
|
39
|
+
name: t.name,
|
|
40
|
+
category: t.category,
|
|
41
|
+
description: t.description,
|
|
42
|
+
permissions: t.permissions,
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* List tools by category
|
|
47
|
+
*/
|
|
48
|
+
listByCategory(category) {
|
|
49
|
+
return this.list().filter((t) => t.category === category);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Execute a tool with input validation and permission checks
|
|
53
|
+
*/
|
|
54
|
+
async execute(name, input, ctx) {
|
|
55
|
+
const tool = this.tools.get(name);
|
|
56
|
+
if (!tool) {
|
|
57
|
+
return {
|
|
58
|
+
success: false,
|
|
59
|
+
error: `Tool "${name}" not found`,
|
|
60
|
+
durationMs: 0,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Validate input
|
|
64
|
+
const parseResult = tool.inputSchema.safeParse(input);
|
|
65
|
+
if (!parseResult.success) {
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
error: `Invalid input for "${name}": ${parseResult.error.issues.map((i) => i.message).join(', ')}`,
|
|
69
|
+
durationMs: 0,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// Check if tool is enabled in config
|
|
73
|
+
const isEnabled = ctx.config.tools.enabled.some((pattern) => {
|
|
74
|
+
if (pattern === name)
|
|
75
|
+
return true;
|
|
76
|
+
if (pattern.endsWith('.*')) {
|
|
77
|
+
return name.startsWith(pattern.slice(0, -1));
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
});
|
|
81
|
+
if (!isEnabled) {
|
|
82
|
+
return {
|
|
83
|
+
success: false,
|
|
84
|
+
error: `Tool "${name}" is not enabled in configuration`,
|
|
85
|
+
durationMs: 0,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// Execute with timeout
|
|
89
|
+
const timeout = tool.timeout ?? ctx.config.tools.timeoutMs;
|
|
90
|
+
const start = Date.now();
|
|
91
|
+
try {
|
|
92
|
+
const result = await Promise.race([
|
|
93
|
+
tool.execute(parseResult.data, ctx),
|
|
94
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`Tool "${name}" timed out after ${timeout}ms`)), timeout)),
|
|
95
|
+
]);
|
|
96
|
+
return { ...result, durationMs: Date.now() - start };
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return {
|
|
100
|
+
success: false,
|
|
101
|
+
error: error instanceof Error ? error.message : String(error),
|
|
102
|
+
durationMs: Date.now() - start,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if a tool name matches a pattern (e.g., "fs.*")
|
|
108
|
+
*/
|
|
109
|
+
matchesPattern(name, pattern) {
|
|
110
|
+
if (pattern === name)
|
|
111
|
+
return true;
|
|
112
|
+
if (pattern.endsWith('.*')) {
|
|
113
|
+
return name.startsWith(pattern.slice(0, -1));
|
|
114
|
+
}
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export type PermissionCategory = 'filesystem' | 'filesystem.read' | 'filesystem.write' | 'exec' | 'network' | 'ui_automation' | 'secrets';
|
|
3
|
+
export declare const PERMISSION_CATEGORIES: PermissionCategory[];
|
|
4
|
+
export interface ToolResult<T = unknown> {
|
|
5
|
+
success: boolean;
|
|
6
|
+
data?: T;
|
|
7
|
+
error?: string;
|
|
8
|
+
durationMs: number;
|
|
9
|
+
metadata?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export interface ExecutionContext {
|
|
12
|
+
runId: string;
|
|
13
|
+
stepId?: string;
|
|
14
|
+
cwd: string;
|
|
15
|
+
config: import('../config/schema.js').AgentConfig;
|
|
16
|
+
dryRun?: boolean;
|
|
17
|
+
autonomous?: boolean;
|
|
18
|
+
approvedPermissions: Set<string>;
|
|
19
|
+
onApproval?: (action: ActionDescriptor) => Promise<boolean>;
|
|
20
|
+
onProgress?: (message: string) => void;
|
|
21
|
+
}
|
|
22
|
+
export interface ActionDescriptor {
|
|
23
|
+
tool: string;
|
|
24
|
+
operation: string;
|
|
25
|
+
description: string;
|
|
26
|
+
permissions: PermissionCategory[];
|
|
27
|
+
args?: Record<string, unknown>;
|
|
28
|
+
riskLevel: 'low' | 'medium' | 'high';
|
|
29
|
+
}
|
|
30
|
+
export interface ToolDefinition<TInput = unknown, TOutput = unknown> {
|
|
31
|
+
name: string;
|
|
32
|
+
category: string;
|
|
33
|
+
description: string;
|
|
34
|
+
inputSchema: z.ZodType<TInput>;
|
|
35
|
+
outputSchema: z.ZodType<TOutput>;
|
|
36
|
+
permissions: PermissionCategory[];
|
|
37
|
+
timeout?: number;
|
|
38
|
+
execute(input: TInput, ctx: ExecutionContext): Promise<ToolResult<TOutput>>;
|
|
39
|
+
}
|
|
40
|
+
export interface ToolMetadata {
|
|
41
|
+
name: string;
|
|
42
|
+
category: string;
|
|
43
|
+
description: string;
|
|
44
|
+
permissions: PermissionCategory[];
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,MAAM,kBAAkB,GACxB,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,GAClB,MAAM,GACN,SAAS,GACT,eAAe,GACf,SAAS,CAAC;AAEhB,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,EAQrD,CAAC;AAGF,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAGD,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,qBAAqB,EAAE,WAAW,CAAC;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAGD,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACxC;AAGD,MAAM,WAAW,cAAc,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;CAC/E;AAGD,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/types.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,qBAAqB,GAAyB;IACvD,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;IAClB,MAAM;IACN,SAAS;IACT,eAAe;IACf,SAAS;CACZ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hash a string using SHA-256
|
|
3
|
+
*/
|
|
4
|
+
export declare function hashString(content: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* Hash a file's content
|
|
7
|
+
*/
|
|
8
|
+
export declare function hashFile(filePath: string): Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Generate a short hash (first 8 chars) for display purposes
|
|
11
|
+
*/
|
|
12
|
+
export declare function shortHash(content: string): string;
|
|
13
|
+
//# sourceMappingURL=hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../src/utils/hash.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
/**
|
|
4
|
+
* Hash a string using SHA-256
|
|
5
|
+
*/
|
|
6
|
+
export function hashString(content) {
|
|
7
|
+
return createHash('sha256').update(content).digest('hex');
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Hash a file's content
|
|
11
|
+
*/
|
|
12
|
+
export async function hashFile(filePath) {
|
|
13
|
+
const content = await readFile(filePath);
|
|
14
|
+
return createHash('sha256').update(content).digest('hex');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generate a short hash (first 8 chars) for display purposes
|
|
18
|
+
*/
|
|
19
|
+
export function shortHash(content) {
|
|
20
|
+
return hashString(content).substring(0, 8);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACtC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC3C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACrC,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a path relative to the current working directory
|
|
3
|
+
*/
|
|
4
|
+
export declare function resolveProjectPath(...segments: string[]): string;
|
|
5
|
+
/**
|
|
6
|
+
* Get the .agent directory path for the current project
|
|
7
|
+
*/
|
|
8
|
+
export declare function getAgentDir(): string;
|
|
9
|
+
/**
|
|
10
|
+
* Get the skills directory
|
|
11
|
+
*/
|
|
12
|
+
export declare function getSkillsDir(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Get the plans directory
|
|
15
|
+
*/
|
|
16
|
+
export declare function getPlansDir(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Get the runs directory
|
|
19
|
+
*/
|
|
20
|
+
export declare function getRunsDir(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Get the plugins directory
|
|
23
|
+
*/
|
|
24
|
+
export declare function getPluginsDir(): string;
|
|
25
|
+
/**
|
|
26
|
+
* Get the logs directory
|
|
27
|
+
*/
|
|
28
|
+
export declare function getLogsDir(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Get the global agent config directory
|
|
31
|
+
*/
|
|
32
|
+
export declare function getGlobalAgentDir(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Get the config file path
|
|
35
|
+
*/
|
|
36
|
+
export declare function getConfigPath(): string;
|
|
37
|
+
/**
|
|
38
|
+
* Generate a unique run ID with timestamp
|
|
39
|
+
*/
|
|
40
|
+
export declare function generateRunId(): string;
|
|
41
|
+
/**
|
|
42
|
+
* Normalize a tool or skill name
|
|
43
|
+
*/
|
|
44
|
+
export declare function normalizeName(name: string): string;
|
|
45
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/utils/paths.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve a path relative to the current working directory
|
|
5
|
+
*/
|
|
6
|
+
export function resolveProjectPath(...segments) {
|
|
7
|
+
return path.resolve(process.cwd(), ...segments);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Get the .agent directory path for the current project
|
|
11
|
+
*/
|
|
12
|
+
export function getAgentDir() {
|
|
13
|
+
return resolveProjectPath('.agent');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get the skills directory
|
|
17
|
+
*/
|
|
18
|
+
export function getSkillsDir() {
|
|
19
|
+
return path.join(getAgentDir(), 'skills');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get the plans directory
|
|
23
|
+
*/
|
|
24
|
+
export function getPlansDir() {
|
|
25
|
+
return path.join(getAgentDir(), 'plans');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get the runs directory
|
|
29
|
+
*/
|
|
30
|
+
export function getRunsDir() {
|
|
31
|
+
return path.join(getAgentDir(), 'runs');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get the plugins directory
|
|
35
|
+
*/
|
|
36
|
+
export function getPluginsDir() {
|
|
37
|
+
return path.join(getAgentDir(), 'plugins');
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get the logs directory
|
|
41
|
+
*/
|
|
42
|
+
export function getLogsDir() {
|
|
43
|
+
return path.join(getAgentDir(), 'logs');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get the global agent config directory
|
|
47
|
+
*/
|
|
48
|
+
export function getGlobalAgentDir() {
|
|
49
|
+
return path.join(os.homedir(), '.agent-runtime');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get the config file path
|
|
53
|
+
*/
|
|
54
|
+
export function getConfigPath() {
|
|
55
|
+
return resolveProjectPath('agent.config.json');
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Generate a unique run ID with timestamp
|
|
59
|
+
*/
|
|
60
|
+
export function generateRunId() {
|
|
61
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
62
|
+
const rand = Math.random().toString(36).substring(2, 8);
|
|
63
|
+
return `run-${timestamp}-${rand}`;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Normalize a tool or skill name
|
|
67
|
+
*/
|
|
68
|
+
export function normalizeName(name) {
|
|
69
|
+
return name.toLowerCase().replace(/[^a-z0-9._-]/g, '-');
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAG,QAAkB;IACpD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACvB,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACtB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IACzB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACtB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IACzB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IACzB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,OAAO,OAAO,SAAS,IAAI,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Validate data against a zod schema with friendly error messages
|
|
4
|
+
*/
|
|
5
|
+
export declare function validateSchema<T>(schema: z.ZodType<T>, data: unknown, context?: string): {
|
|
6
|
+
success: true;
|
|
7
|
+
data: T;
|
|
8
|
+
} | {
|
|
9
|
+
success: false;
|
|
10
|
+
errors: string[];
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Create a JSON Schema-like object from a zod schema (simplified)
|
|
14
|
+
*/
|
|
15
|
+
export declare function zodToJsonSchema(schema: z.ZodType): Record<string, unknown>;
|
|
16
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC5B,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,MAAM,GACjB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAWnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0C1E"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Validate data against a zod schema with friendly error messages
|
|
4
|
+
*/
|
|
5
|
+
export function validateSchema(schema, data, context) {
|
|
6
|
+
const result = schema.safeParse(data);
|
|
7
|
+
if (result.success) {
|
|
8
|
+
return { success: true, data: result.data };
|
|
9
|
+
}
|
|
10
|
+
const errors = result.error.issues.map((issue) => {
|
|
11
|
+
const path = issue.path.join('.');
|
|
12
|
+
const prefix = context ? `${context}: ` : '';
|
|
13
|
+
return `${prefix}${path ? `${path}: ` : ''}${issue.message}`;
|
|
14
|
+
});
|
|
15
|
+
return { success: false, errors };
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a JSON Schema-like object from a zod schema (simplified)
|
|
19
|
+
*/
|
|
20
|
+
export function zodToJsonSchema(schema) {
|
|
21
|
+
if (schema instanceof z.ZodObject) {
|
|
22
|
+
const shape = schema.shape;
|
|
23
|
+
const properties = {};
|
|
24
|
+
const required = [];
|
|
25
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
26
|
+
properties[key] = zodToJsonSchema(value);
|
|
27
|
+
// Default fields are optional in JSON schema
|
|
28
|
+
if (!(value instanceof z.ZodOptional) && !(value instanceof z.ZodDefault)) {
|
|
29
|
+
required.push(key);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return { type: 'object', properties, required };
|
|
33
|
+
}
|
|
34
|
+
if (schema instanceof z.ZodString) {
|
|
35
|
+
const def = schema._def;
|
|
36
|
+
const result = { type: 'string' };
|
|
37
|
+
if (def.description)
|
|
38
|
+
result.description = def.description;
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
if (schema instanceof z.ZodNumber)
|
|
42
|
+
return { type: 'number' };
|
|
43
|
+
if (schema instanceof z.ZodBoolean)
|
|
44
|
+
return { type: 'boolean' };
|
|
45
|
+
if (schema instanceof z.ZodArray) {
|
|
46
|
+
return {
|
|
47
|
+
type: 'array',
|
|
48
|
+
items: zodToJsonSchema(schema._def.type),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
if (schema instanceof z.ZodOptional) {
|
|
52
|
+
return zodToJsonSchema(schema._def.innerType);
|
|
53
|
+
}
|
|
54
|
+
if (schema instanceof z.ZodDefault) {
|
|
55
|
+
return zodToJsonSchema(schema._def.innerType);
|
|
56
|
+
}
|
|
57
|
+
if (schema instanceof z.ZodEffects) {
|
|
58
|
+
return zodToJsonSchema(schema._def.schema);
|
|
59
|
+
}
|
|
60
|
+
if (schema instanceof z.ZodEnum) {
|
|
61
|
+
return { type: 'string', enum: schema._def.values };
|
|
62
|
+
}
|
|
63
|
+
// Fallback for unknown types (e.g. ZodAny, ZodUnknown) - use empty schema which matches anything, or string if safest
|
|
64
|
+
return { type: 'string' };
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@praveencs/agent",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"files": [
|
|
5
|
+
"dist",
|
|
6
|
+
"bin",
|
|
7
|
+
"README.md",
|
|
8
|
+
"src/index.d.ts"
|
|
9
|
+
],
|
|
10
|
+
"description": "CLI agent runtime with Skill Hub, Plan Files, and permissioned tools",
|
|
11
|
+
"type": "module",
|
|
12
|
+
"bin": {
|
|
13
|
+
"agent": "./dist/bin/agent.js"
|
|
14
|
+
},
|
|
15
|
+
"main": "./dist/src/index.js",
|
|
16
|
+
"types": "./dist/src/index.d.ts",
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc -p tsconfig.build.json",
|
|
19
|
+
"dev": "tsx watch bin/agent.ts",
|
|
20
|
+
"start": "node dist/bin/agent.js",
|
|
21
|
+
"lint": "eslint src/ bin/ --ext .ts",
|
|
22
|
+
"format": "prettier --write 'src/**/*.ts' 'bin/**/*.ts'",
|
|
23
|
+
"test": "jest --config jest.config.ts",
|
|
24
|
+
"test:integration": "jest --config jest.config.ts --testPathPattern=integration",
|
|
25
|
+
"prepublishOnly": "npm run build"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"agent",
|
|
29
|
+
"cli",
|
|
30
|
+
"automation",
|
|
31
|
+
"skills",
|
|
32
|
+
"mcp",
|
|
33
|
+
"llm"
|
|
34
|
+
],
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "git+https://github.com/praveencs87/agent.git"
|
|
39
|
+
},
|
|
40
|
+
"homepage": "https://github.com/praveencs87/agent#readme",
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/praveencs87/agent/issues"
|
|
43
|
+
},
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=18.0.0"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@anthropic-ai/sdk": "^0.39.0",
|
|
49
|
+
"@modelcontextprotocol/sdk": "^1.5.0",
|
|
50
|
+
"chalk": "^5.4.1",
|
|
51
|
+
"chokidar": "^4.0.3",
|
|
52
|
+
"commander": "^13.1.0",
|
|
53
|
+
"croner": "^9.0.0",
|
|
54
|
+
"diff": "^7.0.0",
|
|
55
|
+
"glob": "^11.0.1",
|
|
56
|
+
"hnswsqlite": "^0.2.0",
|
|
57
|
+
"inquirer": "^12.4.0",
|
|
58
|
+
"keytar": "^7.9.0",
|
|
59
|
+
"openai": "^4.82.0",
|
|
60
|
+
"ora": "^8.2.0",
|
|
61
|
+
"pino": "^9.6.0",
|
|
62
|
+
"pino-pretty": "^13.0.0",
|
|
63
|
+
"yaml": "^2.7.0",
|
|
64
|
+
"zod": "^3.24.2"
|
|
65
|
+
},
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@types/diff": "^7.0.0",
|
|
68
|
+
"@types/inquirer": "^9.0.7",
|
|
69
|
+
"@types/node": "^22.13.0",
|
|
70
|
+
"eslint": "^9.19.0",
|
|
71
|
+
"jest": "^29.7.0",
|
|
72
|
+
"prettier": "^3.4.2",
|
|
73
|
+
"ts-jest": "^29.2.5",
|
|
74
|
+
"tsx": "^4.19.2",
|
|
75
|
+
"typescript": "^5.7.3"
|
|
76
|
+
}
|
|
77
|
+
}
|