@praveencs/agent 0.7.5 → 0.8.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/ROADMAP.md +14 -0
- package/bin/agent.ts +19 -1
- package/dist/bin/agent.js +20 -1
- package/dist/bin/agent.js.map +1 -1
- package/dist/src/cli/commands/commands-cmd.d.ts +3 -0
- package/dist/src/cli/commands/commands-cmd.d.ts.map +1 -0
- package/dist/src/cli/commands/commands-cmd.js +39 -0
- package/dist/src/cli/commands/commands-cmd.js.map +1 -0
- package/dist/src/cli/commands/hooks.d.ts +3 -0
- package/dist/src/cli/commands/hooks.d.ts.map +1 -0
- package/dist/src/cli/commands/hooks.js +119 -0
- package/dist/src/cli/commands/hooks.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +2 -0
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/plugins.d.ts +3 -0
- package/dist/src/cli/commands/plugins.d.ts.map +1 -0
- package/dist/src/cli/commands/plugins.js +86 -0
- package/dist/src/cli/commands/plugins.js.map +1 -0
- package/dist/src/cli/commands/run.d.ts.map +1 -1
- package/dist/src/cli/commands/run.js +74 -0
- package/dist/src/cli/commands/run.js.map +1 -1
- package/dist/src/cli/conversation.d.ts +39 -0
- package/dist/src/cli/conversation.d.ts.map +1 -0
- package/dist/src/cli/conversation.js +69 -0
- package/dist/src/cli/conversation.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +7 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/repl.d.ts +9 -0
- package/dist/src/cli/repl.d.ts.map +1 -0
- package/dist/src/cli/repl.js +270 -0
- package/dist/src/cli/repl.js.map +1 -0
- package/dist/src/cli/slash-commands.d.ts +31 -0
- package/dist/src/cli/slash-commands.d.ts.map +1 -0
- package/dist/src/cli/slash-commands.js +138 -0
- package/dist/src/cli/slash-commands.js.map +1 -0
- package/dist/src/cli/ui/render.d.ts +32 -0
- package/dist/src/cli/ui/render.d.ts.map +1 -0
- package/dist/src/cli/ui/render.js +79 -0
- package/dist/src/cli/ui/render.js.map +1 -0
- package/dist/src/cli/ui/spinner.d.ts +40 -0
- package/dist/src/cli/ui/spinner.d.ts.map +1 -0
- package/dist/src/cli/ui/spinner.js +63 -0
- package/dist/src/cli/ui/spinner.js.map +1 -0
- package/dist/src/commands/loader.d.ts +54 -0
- package/dist/src/commands/loader.d.ts.map +1 -0
- package/dist/src/commands/loader.js +136 -0
- package/dist/src/commands/loader.js.map +1 -0
- package/dist/src/commands/types.d.ts +28 -0
- package/dist/src/commands/types.d.ts.map +1 -0
- package/dist/src/commands/types.js +10 -0
- package/dist/src/commands/types.js.map +1 -0
- package/dist/src/config/defaults.d.ts.map +1 -1
- package/dist/src/config/defaults.js +15 -0
- package/dist/src/config/defaults.js.map +1 -1
- package/dist/src/config/schema.d.ts +153 -0
- package/dist/src/config/schema.d.ts.map +1 -1
- package/dist/src/config/schema.js +25 -0
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/engine/executor.d.ts +3 -1
- package/dist/src/engine/executor.d.ts.map +1 -1
- package/dist/src/engine/executor.js +24 -1
- package/dist/src/engine/executor.js.map +1 -1
- package/dist/src/hooks/registry.d.ts +45 -0
- package/dist/src/hooks/registry.d.ts.map +1 -0
- package/dist/src/hooks/registry.js +126 -0
- package/dist/src/hooks/registry.js.map +1 -0
- package/dist/src/hooks/runner.d.ts +22 -0
- package/dist/src/hooks/runner.d.ts.map +1 -0
- package/dist/src/hooks/runner.js +71 -0
- package/dist/src/hooks/runner.js.map +1 -0
- package/dist/src/hooks/types.d.ts +50 -0
- package/dist/src/hooks/types.d.ts.map +1 -0
- package/dist/src/hooks/types.js +14 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/plans/runner.d.ts +3 -1
- package/dist/src/plans/runner.d.ts.map +1 -1
- package/dist/src/plans/runner.js +33 -1
- package/dist/src/plans/runner.js.map +1 -1
- package/dist/src/plugins/loader.d.ts +40 -0
- package/dist/src/plugins/loader.d.ts.map +1 -0
- package/dist/src/plugins/loader.js +136 -0
- package/dist/src/plugins/loader.js.map +1 -0
- package/dist/src/plugins/types.d.ts +47 -0
- package/dist/src/plugins/types.d.ts.map +1 -0
- package/dist/src/plugins/types.js +9 -0
- package/dist/src/plugins/types.js.map +1 -0
- package/dist/src/skills/types.d.ts +4 -4
- package/dist/src/tools/core/cli-tools.d.ts +7 -0
- package/dist/src/tools/core/cli-tools.d.ts.map +1 -0
- package/dist/src/tools/core/cli-tools.js +110 -0
- package/dist/src/tools/core/cli-tools.js.map +1 -0
- package/package.json +1 -1
package/dist/src/plans/runner.js
CHANGED
|
@@ -6,8 +6,10 @@ import { generateRunId } from '../utils/paths.js';
|
|
|
6
6
|
*/
|
|
7
7
|
export class PlanRunner {
|
|
8
8
|
engine;
|
|
9
|
-
|
|
9
|
+
hooks;
|
|
10
|
+
constructor(engine, hooks) {
|
|
10
11
|
this.engine = engine;
|
|
12
|
+
this.hooks = hooks;
|
|
11
13
|
}
|
|
12
14
|
/**
|
|
13
15
|
* Execute a plan
|
|
@@ -33,6 +35,15 @@ export class PlanRunner {
|
|
|
33
35
|
stepCount: plan.steps.length,
|
|
34
36
|
});
|
|
35
37
|
ctx.onProgress?.(`Starting plan: ${plan.name} (${plan.steps.length} steps)`);
|
|
38
|
+
// Hook: before:plan
|
|
39
|
+
if (this.hooks) {
|
|
40
|
+
await this.hooks.dispatch({
|
|
41
|
+
event: 'before:plan',
|
|
42
|
+
name: plan.name,
|
|
43
|
+
cwd: ctx.cwd,
|
|
44
|
+
runId,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
36
47
|
try {
|
|
37
48
|
for (const step of plan.steps) {
|
|
38
49
|
const stepRun = planRun.steps.find((s) => s.stepId === step.id);
|
|
@@ -88,6 +99,17 @@ export class PlanRunner {
|
|
|
88
99
|
auditEmitter.emit(stepRun.status === 'completed'
|
|
89
100
|
? AuditEventType.STEP_COMPLETE
|
|
90
101
|
: AuditEventType.STEP_FAILED, { stepId: step.id, status: stepRun.status, error: stepRun.error });
|
|
102
|
+
// Hook: after:step
|
|
103
|
+
if (this.hooks) {
|
|
104
|
+
await this.hooks.dispatch({
|
|
105
|
+
event: 'after:step',
|
|
106
|
+
name: step.id,
|
|
107
|
+
args: step.args,
|
|
108
|
+
result: { success: stepRun.status === 'completed', output: stepRun.output, error: stepRun.error },
|
|
109
|
+
cwd: ctx.cwd,
|
|
110
|
+
runId,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
91
113
|
// Handle failures
|
|
92
114
|
if (stepRun.status === 'failed') {
|
|
93
115
|
const action = step.onFailure ?? 'abort';
|
|
@@ -132,6 +154,16 @@ export class PlanRunner {
|
|
|
132
154
|
stepsFailed: planRun.steps.filter((s) => s.status === 'failed').length,
|
|
133
155
|
});
|
|
134
156
|
await auditLogger.complete(planRun.status === 'completed' ? 'completed' : 'failed');
|
|
157
|
+
// Hook: after:plan
|
|
158
|
+
if (this.hooks) {
|
|
159
|
+
await this.hooks.dispatch({
|
|
160
|
+
event: 'after:plan',
|
|
161
|
+
name: plan.name,
|
|
162
|
+
result: { success: planRun.status === 'completed' },
|
|
163
|
+
cwd: ctx.cwd,
|
|
164
|
+
runId,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
135
167
|
return planRun;
|
|
136
168
|
}
|
|
137
169
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/plans/runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/plans/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { LoadedPlugin } from './types.js';
|
|
2
|
+
import type { SkillLoader } from '../skills/loader.js';
|
|
3
|
+
import type { CommandLoader } from '../commands/loader.js';
|
|
4
|
+
import type { HookRegistry } from '../hooks/registry.js';
|
|
5
|
+
/**
|
|
6
|
+
* Plugin Loader — discovers, validates, and loads plugin bundles
|
|
7
|
+
*
|
|
8
|
+
* A plugin is a directory containing a `.agent-plugin/plugin.json`
|
|
9
|
+
* manifest that references skills, commands, hooks within the plugin.
|
|
10
|
+
*
|
|
11
|
+
* Plugins are loaded from `.agent/plugins/` by default.
|
|
12
|
+
*/
|
|
13
|
+
export declare class PluginLoader {
|
|
14
|
+
private plugins;
|
|
15
|
+
/**
|
|
16
|
+
* Load all plugins from configured install paths
|
|
17
|
+
*/
|
|
18
|
+
loadAll(installPaths: string[], projectRoot: string, skillLoader: SkillLoader, commandLoader: CommandLoader, hookRegistry: HookRegistry): Promise<LoadedPlugin[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Load plugins from a directory
|
|
21
|
+
*/
|
|
22
|
+
private loadFromDirectory;
|
|
23
|
+
/**
|
|
24
|
+
* Load a single plugin
|
|
25
|
+
*/
|
|
26
|
+
loadPlugin(pluginDir: string, skillLoader: SkillLoader, commandLoader: CommandLoader, hookRegistry: HookRegistry): Promise<LoadedPlugin | null>;
|
|
27
|
+
/**
|
|
28
|
+
* List all loaded plugins
|
|
29
|
+
*/
|
|
30
|
+
list(): LoadedPlugin[];
|
|
31
|
+
/**
|
|
32
|
+
* Get a plugin by name
|
|
33
|
+
*/
|
|
34
|
+
get(name: string): LoadedPlugin | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Get total count
|
|
37
|
+
*/
|
|
38
|
+
get size(): number;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/plugins/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;GAOG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,OAAO,CAAwC;IAEvD;;OAEG;IACG,OAAO,CACT,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,GAC3B,OAAO,CAAC,YAAY,EAAE,CAAC;IAW1B;;OAEG;YACW,iBAAiB;IAqB/B;;OAEG;IACG,UAAU,CACZ,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,GAC3B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IA2E/B;;OAEG;IACH,IAAI,IAAI,YAAY,EAAE;IAItB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI3C;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACJ"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { readFile, readdir, access } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Plugin Loader — discovers, validates, and loads plugin bundles
|
|
5
|
+
*
|
|
6
|
+
* A plugin is a directory containing a `.agent-plugin/plugin.json`
|
|
7
|
+
* manifest that references skills, commands, hooks within the plugin.
|
|
8
|
+
*
|
|
9
|
+
* Plugins are loaded from `.agent/plugins/` by default.
|
|
10
|
+
*/
|
|
11
|
+
export class PluginLoader {
|
|
12
|
+
plugins = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* Load all plugins from configured install paths
|
|
15
|
+
*/
|
|
16
|
+
async loadAll(installPaths, projectRoot, skillLoader, commandLoader, hookRegistry) {
|
|
17
|
+
this.plugins.clear();
|
|
18
|
+
for (const pluginPath of installPaths) {
|
|
19
|
+
const absPath = path.resolve(projectRoot, pluginPath);
|
|
20
|
+
await this.loadFromDirectory(absPath, skillLoader, commandLoader, hookRegistry);
|
|
21
|
+
}
|
|
22
|
+
return Array.from(this.plugins.values());
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Load plugins from a directory
|
|
26
|
+
*/
|
|
27
|
+
async loadFromDirectory(dirPath, skillLoader, commandLoader, hookRegistry) {
|
|
28
|
+
try {
|
|
29
|
+
await access(dirPath);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return; // Directory doesn't exist
|
|
33
|
+
}
|
|
34
|
+
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
35
|
+
for (const entry of entries) {
|
|
36
|
+
if (!entry.isDirectory())
|
|
37
|
+
continue;
|
|
38
|
+
const pluginDir = path.join(dirPath, entry.name);
|
|
39
|
+
await this.loadPlugin(pluginDir, skillLoader, commandLoader, hookRegistry);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Load a single plugin
|
|
44
|
+
*/
|
|
45
|
+
async loadPlugin(pluginDir, skillLoader, commandLoader, hookRegistry) {
|
|
46
|
+
// Look for manifest in .agent-plugin/ or root
|
|
47
|
+
let manifestPath = path.join(pluginDir, '.agent-plugin', 'plugin.json');
|
|
48
|
+
try {
|
|
49
|
+
await access(manifestPath);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Fall back to root plugin.json
|
|
53
|
+
manifestPath = path.join(pluginDir, 'plugin.json');
|
|
54
|
+
try {
|
|
55
|
+
await access(manifestPath);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null; // No manifest found
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const content = await readFile(manifestPath, 'utf-8');
|
|
63
|
+
const manifest = JSON.parse(content);
|
|
64
|
+
if (!manifest.name || !manifest.version) {
|
|
65
|
+
console.error(`Invalid plugin manifest at ${manifestPath}: missing name or version`);
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
let skillsCount = 0;
|
|
69
|
+
let commandsCount = 0;
|
|
70
|
+
let hooksCount = 0;
|
|
71
|
+
// Load skills from plugin
|
|
72
|
+
if (manifest.skills) {
|
|
73
|
+
for (const skillDir of manifest.skills) {
|
|
74
|
+
const absSkillDir = path.resolve(pluginDir, skillDir);
|
|
75
|
+
try {
|
|
76
|
+
const entries = await readdir(absSkillDir, { withFileTypes: true });
|
|
77
|
+
for (const entry of entries) {
|
|
78
|
+
if (!entry.isDirectory())
|
|
79
|
+
continue;
|
|
80
|
+
const skill = await skillLoader.loadSkill(path.join(absSkillDir, entry.name));
|
|
81
|
+
if (skill)
|
|
82
|
+
skillsCount++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Skill directory doesn't exist or can't be read
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Load commands from plugin
|
|
91
|
+
if (manifest.commands) {
|
|
92
|
+
for (const cmdDir of manifest.commands) {
|
|
93
|
+
const absCmdDir = path.resolve(pluginDir, cmdDir);
|
|
94
|
+
commandsCount += await commandLoader.loadFromDirectory(absCmdDir, manifest.name);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Load hooks from plugin
|
|
98
|
+
if (manifest.hooks) {
|
|
99
|
+
const hooksPath = path.resolve(pluginDir, manifest.hooks);
|
|
100
|
+
hooksCount = await hookRegistry.loadFromFile(hooksPath, manifest.name);
|
|
101
|
+
}
|
|
102
|
+
const loaded = {
|
|
103
|
+
manifest,
|
|
104
|
+
path: pluginDir,
|
|
105
|
+
skillsCount,
|
|
106
|
+
commandsCount,
|
|
107
|
+
hooksCount,
|
|
108
|
+
};
|
|
109
|
+
this.plugins.set(manifest.name, loaded);
|
|
110
|
+
return loaded;
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
console.error(`Failed to load plugin from ${pluginDir}: ${err.message}`);
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* List all loaded plugins
|
|
119
|
+
*/
|
|
120
|
+
list() {
|
|
121
|
+
return Array.from(this.plugins.values());
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get a plugin by name
|
|
125
|
+
*/
|
|
126
|
+
get(name) {
|
|
127
|
+
return this.plugins.get(name);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get total count
|
|
131
|
+
*/
|
|
132
|
+
get size() {
|
|
133
|
+
return this.plugins.size;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin System — Types
|
|
3
|
+
*
|
|
4
|
+
* A plugin is a distributable package that bundles extensions:
|
|
5
|
+
* skills, commands, hooks, tools, and rules into a single
|
|
6
|
+
* installable unit via `plugin.json`.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Plugin manifest (plugin.json)
|
|
10
|
+
*/
|
|
11
|
+
export interface PluginManifest {
|
|
12
|
+
/** Unique plugin name */
|
|
13
|
+
name: string;
|
|
14
|
+
/** Semver version */
|
|
15
|
+
version: string;
|
|
16
|
+
/** Human-readable description */
|
|
17
|
+
description: string;
|
|
18
|
+
/** Author name or org */
|
|
19
|
+
author?: string;
|
|
20
|
+
/** Homepage URL */
|
|
21
|
+
homepage?: string;
|
|
22
|
+
/** License identifier */
|
|
23
|
+
license?: string;
|
|
24
|
+
/** Relative paths to skill directories */
|
|
25
|
+
skills?: string[];
|
|
26
|
+
/** Relative paths to command directories */
|
|
27
|
+
commands?: string[];
|
|
28
|
+
/** Relative path to hooks.json */
|
|
29
|
+
hooks?: string;
|
|
30
|
+
/** Relative paths to tool modules */
|
|
31
|
+
tools?: string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Loaded plugin with resolved paths
|
|
35
|
+
*/
|
|
36
|
+
export interface LoadedPlugin {
|
|
37
|
+
manifest: PluginManifest;
|
|
38
|
+
/** Absolute path to the plugin directory */
|
|
39
|
+
path: string;
|
|
40
|
+
/** Number of skills loaded from this plugin */
|
|
41
|
+
skillsCount: number;
|
|
42
|
+
/** Number of commands loaded from this plugin */
|
|
43
|
+
commandsCount: number;
|
|
44
|
+
/** Number of hooks loaded from this plugin */
|
|
45
|
+
hooksCount: number;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/plugins/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -77,13 +77,13 @@ export declare const SkillManifestSchema: z.ZodObject<{
|
|
|
77
77
|
}, "strip", z.ZodTypeAny, {
|
|
78
78
|
name: string;
|
|
79
79
|
command: string;
|
|
80
|
-
cwd?: string | undefined;
|
|
81
80
|
timeout?: number | undefined;
|
|
81
|
+
cwd?: string | undefined;
|
|
82
82
|
}, {
|
|
83
83
|
name: string;
|
|
84
84
|
command: string;
|
|
85
|
-
cwd?: string | undefined;
|
|
86
85
|
timeout?: number | undefined;
|
|
86
|
+
cwd?: string | undefined;
|
|
87
87
|
}>, "many">>;
|
|
88
88
|
state: z.ZodDefault<z.ZodEnum<["draft", "approved", "deprecated"]>>;
|
|
89
89
|
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
@@ -108,8 +108,8 @@ export declare const SkillManifestSchema: z.ZodObject<{
|
|
|
108
108
|
validators?: {
|
|
109
109
|
name: string;
|
|
110
110
|
command: string;
|
|
111
|
-
cwd?: string | undefined;
|
|
112
111
|
timeout?: number | undefined;
|
|
112
|
+
cwd?: string | undefined;
|
|
113
113
|
}[] | undefined;
|
|
114
114
|
tags?: string[] | undefined;
|
|
115
115
|
}, {
|
|
@@ -132,8 +132,8 @@ export declare const SkillManifestSchema: z.ZodObject<{
|
|
|
132
132
|
validators?: {
|
|
133
133
|
name: string;
|
|
134
134
|
command: string;
|
|
135
|
-
cwd?: string | undefined;
|
|
136
135
|
timeout?: number | undefined;
|
|
136
|
+
cwd?: string | undefined;
|
|
137
137
|
}[] | undefined;
|
|
138
138
|
state?: "approved" | "draft" | "deprecated" | undefined;
|
|
139
139
|
tags?: string[] | undefined;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ToolDefinition } from '../types.js';
|
|
2
|
+
export declare const cursorCLI: ToolDefinition<unknown, unknown>;
|
|
3
|
+
export declare const codexCLI: ToolDefinition<unknown, unknown>;
|
|
4
|
+
export declare const geminiCLI: ToolDefinition<unknown, unknown>;
|
|
5
|
+
export declare const claudeCLI: ToolDefinition<unknown, unknown>;
|
|
6
|
+
export declare const cliTools: ToolDefinition<unknown, unknown>[];
|
|
7
|
+
//# sourceMappingURL=cli-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-tools.d.ts","sourceRoot":"","sources":["../../../../src/tools/core/cli-tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA+ElD,eAAO,MAAM,SAAS,kCAYpB,CAAC;AAGH,eAAO,MAAM,QAAQ,kCASnB,CAAC;AAGH,eAAO,MAAM,SAAS,kCASpB,CAAC;AAGH,eAAO,MAAM,SAAS,kCASpB,CAAC;AAGH,eAAO,MAAM,QAAQ,oCAA8C,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { execFile } from 'node:child_process';
|
|
3
|
+
import { promisify } from 'node:util';
|
|
4
|
+
const execFileAsync = promisify(execFile);
|
|
5
|
+
function createCLITool(config) {
|
|
6
|
+
return {
|
|
7
|
+
name: config.name,
|
|
8
|
+
category: 'cli',
|
|
9
|
+
description: config.description,
|
|
10
|
+
inputSchema: z.object({
|
|
11
|
+
prompt: z.string().describe('The task or prompt to send to the CLI agent'),
|
|
12
|
+
files: z.array(z.string()).optional().describe('Optional file paths to scope the task'),
|
|
13
|
+
cwd: z.string().optional().describe('Working directory'),
|
|
14
|
+
timeout: z.number().optional().default(config.timeout ?? 120_000),
|
|
15
|
+
}),
|
|
16
|
+
outputSchema: z.object({
|
|
17
|
+
stdout: z.string(),
|
|
18
|
+
stderr: z.string(),
|
|
19
|
+
exitCode: z.number(),
|
|
20
|
+
}),
|
|
21
|
+
permissions: ['exec'],
|
|
22
|
+
timeout: config.timeout ?? 120_000,
|
|
23
|
+
async execute(rawInput, ctx) {
|
|
24
|
+
const input = rawInput;
|
|
25
|
+
const workDir = input.cwd ?? ctx.cwd;
|
|
26
|
+
try {
|
|
27
|
+
const args = config.buildArgs(input);
|
|
28
|
+
const { stdout, stderr } = await execFileAsync(config.binary, args, {
|
|
29
|
+
cwd: workDir,
|
|
30
|
+
timeout: input.timeout,
|
|
31
|
+
maxBuffer: 50 * 1024 * 1024, // 50MB — AI CLIs can be verbose
|
|
32
|
+
env: { ...process.env },
|
|
33
|
+
shell: true,
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
success: true,
|
|
37
|
+
data: {
|
|
38
|
+
stdout: stdout.toString(),
|
|
39
|
+
stderr: stderr.toString(),
|
|
40
|
+
exitCode: 0,
|
|
41
|
+
},
|
|
42
|
+
durationMs: 0,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
const error = err;
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
data: {
|
|
50
|
+
stdout: error.stdout?.toString() ?? '',
|
|
51
|
+
stderr: error.stderr?.toString() ?? '',
|
|
52
|
+
exitCode: error.code ?? 1,
|
|
53
|
+
},
|
|
54
|
+
error: error.message ?? `${config.name} execution failed`,
|
|
55
|
+
durationMs: 0,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// ─── Cursor CLI ───
|
|
62
|
+
export const cursorCLI = createCLITool({
|
|
63
|
+
name: 'cli.cursor',
|
|
64
|
+
binary: 'cursor',
|
|
65
|
+
description: 'Delegate a coding task to Cursor CLI (uses native codebase context for multi-file refactoring)',
|
|
66
|
+
buildArgs: (input) => {
|
|
67
|
+
const args = ['--prompt', input.prompt];
|
|
68
|
+
if (input.files && input.files.length > 0) {
|
|
69
|
+
args.push('--files', input.files.join(','));
|
|
70
|
+
}
|
|
71
|
+
return args;
|
|
72
|
+
},
|
|
73
|
+
timeout: 300_000, // 5 min for complex refactors
|
|
74
|
+
});
|
|
75
|
+
// ─── Codex CLI ───
|
|
76
|
+
export const codexCLI = createCLITool({
|
|
77
|
+
name: 'cli.codex',
|
|
78
|
+
binary: 'codex',
|
|
79
|
+
description: 'Delegate a coding task to OpenAI Codex CLI (code generation with sandbox execution)',
|
|
80
|
+
buildArgs: (input) => {
|
|
81
|
+
const args = [input.prompt];
|
|
82
|
+
return args;
|
|
83
|
+
},
|
|
84
|
+
timeout: 180_000,
|
|
85
|
+
});
|
|
86
|
+
// ─── Gemini CLI ───
|
|
87
|
+
export const geminiCLI = createCLITool({
|
|
88
|
+
name: 'cli.gemini',
|
|
89
|
+
binary: 'gemini',
|
|
90
|
+
description: 'Delegate a task to Gemini CLI (large-context analysis and reasoning)',
|
|
91
|
+
buildArgs: (input) => {
|
|
92
|
+
const args = ['-p', input.prompt];
|
|
93
|
+
return args;
|
|
94
|
+
},
|
|
95
|
+
timeout: 180_000,
|
|
96
|
+
});
|
|
97
|
+
// ─── Claude CLI ───
|
|
98
|
+
export const claudeCLI = createCLITool({
|
|
99
|
+
name: 'cli.claude',
|
|
100
|
+
binary: 'claude',
|
|
101
|
+
description: 'Delegate a coding task to Claude CLI (careful code review and generation)',
|
|
102
|
+
buildArgs: (input) => {
|
|
103
|
+
const args = ['-p', input.prompt];
|
|
104
|
+
return args;
|
|
105
|
+
},
|
|
106
|
+
timeout: 180_000,
|
|
107
|
+
});
|
|
108
|
+
// ─── Export all CLI tools ───
|
|
109
|
+
export const cliTools = [cursorCLI, codexCLI, geminiCLI, claudeCLI];
|
|
110
|
+
//# sourceMappingURL=cli-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-tools.js","sourceRoot":"","sources":["../../../../src/tools/core/cli-tools.ts"],"names":[],"mappings":"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"}
|