@slashfi/agents-sdk 0.20.0 → 0.22.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 +340 -184
- package/dist/adk.d.ts +33 -0
- package/dist/adk.d.ts.map +1 -0
- package/dist/adk.js +331 -0
- package/dist/adk.js.map +1 -0
- package/dist/client.d.ts +49 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +190 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/introspect.d.ts +16 -0
- package/dist/introspect.d.ts.map +1 -0
- package/dist/introspect.js +133 -0
- package/dist/introspect.js.map +1 -0
- package/dist/jsonc.d.ts +15 -0
- package/dist/jsonc.d.ts.map +1 -0
- package/dist/jsonc.js +70 -0
- package/dist/jsonc.js.map +1 -0
- package/dist/pack.d.ts +59 -0
- package/dist/pack.d.ts.map +1 -0
- package/dist/pack.js +249 -0
- package/dist/pack.js.map +1 -0
- package/dist/serialized.d.ts +64 -0
- package/dist/serialized.d.ts.map +1 -0
- package/dist/serialized.js +41 -0
- package/dist/serialized.js.map +1 -0
- package/package.json +3 -2
- package/src/adk.ts +398 -0
- package/src/client.ts +273 -0
- package/src/index.ts +46 -0
- package/src/introspect.ts +171 -0
- package/src/jsonc.ts +83 -0
- package/src/pack.ts +395 -0
- package/src/serialized.ts +102 -0
- package/dist/cli.d.ts +0 -24
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -234
- package/dist/cli.js.map +0 -1
- package/src/cli.ts +0 -293
package/dist/cli.js
DELETED
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
/**
|
|
3
|
-
* agents-sdk CLI
|
|
4
|
-
*
|
|
5
|
-
* Unified command-line interface for the agents SDK.
|
|
6
|
-
*
|
|
7
|
-
* Commands:
|
|
8
|
-
* codegen - Generate agent definitions from an MCP server
|
|
9
|
-
* use - Execute a tool on a codegenned agent
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```bash
|
|
13
|
-
* # Generate from MCP server
|
|
14
|
-
* agents-sdk codegen --server 'npx @mcp/notion' --name notion --out ./agents/@notion
|
|
15
|
-
*
|
|
16
|
-
* # Use a tool
|
|
17
|
-
* agents-sdk use notion search_pages '{"query": "hello"}'
|
|
18
|
-
*
|
|
19
|
-
* # List tools on a codegenned agent
|
|
20
|
-
* agents-sdk use notion --list
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
import { resolve, join } from "node:path";
|
|
24
|
-
import { existsSync, readdirSync } from "node:fs";
|
|
25
|
-
import { codegen, useAgent, listAgentTools } from "./codegen.js";
|
|
26
|
-
const args = process.argv.slice(2);
|
|
27
|
-
const command = args[0];
|
|
28
|
-
// ============================================
|
|
29
|
-
// Helpers
|
|
30
|
-
// ============================================
|
|
31
|
-
function parseFlag(args, flag) {
|
|
32
|
-
const idx = args.indexOf(flag);
|
|
33
|
-
if (idx === -1 || idx + 1 >= args.length)
|
|
34
|
-
return undefined;
|
|
35
|
-
return args[idx + 1];
|
|
36
|
-
}
|
|
37
|
-
function hasFlag(args, flag) {
|
|
38
|
-
return args.includes(flag);
|
|
39
|
-
}
|
|
40
|
-
/** Default directory for codegenned agents */
|
|
41
|
-
function getAgentsDir() {
|
|
42
|
-
return resolve(process.env.AGENTS_SDK_DIR ?? "./agents");
|
|
43
|
-
}
|
|
44
|
-
/** Find an agent directory by name */
|
|
45
|
-
function findAgentDir(name) {
|
|
46
|
-
const agentsDir = getAgentsDir();
|
|
47
|
-
// Try exact path first
|
|
48
|
-
const exactPath = resolve(name);
|
|
49
|
-
if (existsSync(join(exactPath, ".codegen-manifest.json"))) {
|
|
50
|
-
return exactPath;
|
|
51
|
-
}
|
|
52
|
-
// Try under agents dir with @ prefix
|
|
53
|
-
const withAt = join(agentsDir, `@${name}`);
|
|
54
|
-
if (existsSync(join(withAt, ".codegen-manifest.json"))) {
|
|
55
|
-
return withAt;
|
|
56
|
-
}
|
|
57
|
-
// Try under agents dir without @ prefix
|
|
58
|
-
const withoutAt = join(agentsDir, name);
|
|
59
|
-
if (existsSync(join(withoutAt, ".codegen-manifest.json"))) {
|
|
60
|
-
return withoutAt;
|
|
61
|
-
}
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
function printUsage() {
|
|
65
|
-
console.log(`agents-sdk - SDK for building AI agents
|
|
66
|
-
|
|
67
|
-
Usage:
|
|
68
|
-
agents-sdk codegen [options] Generate agent from MCP server
|
|
69
|
-
agents-sdk use <agent> [options] Execute a tool on a generated agent
|
|
70
|
-
agents-sdk list List all generated agents
|
|
71
|
-
|
|
72
|
-
Codegen options:
|
|
73
|
-
--server <source> MCP server (command string or URL)
|
|
74
|
-
--name <name> Agent name (default: derived from server)
|
|
75
|
-
--out <dir> Output directory (default: ./agents/@<name>)
|
|
76
|
-
--path <path> Agent path override
|
|
77
|
-
--no-cli Skip CLI generation
|
|
78
|
-
--no-types Skip TypeScript interface generation
|
|
79
|
-
--visibility <level> Agent visibility (public|internal|private)
|
|
80
|
-
|
|
81
|
-
Use options:
|
|
82
|
-
agents-sdk use <agent> <tool> [params_json]
|
|
83
|
-
agents-sdk use <agent> --list List tools on the agent
|
|
84
|
-
|
|
85
|
-
Examples:
|
|
86
|
-
agents-sdk codegen --server 'npx @mcp/notion' --name notion
|
|
87
|
-
agents-sdk use notion search_pages '{"query": "hello"}'
|
|
88
|
-
agents-sdk use notion --list
|
|
89
|
-
`);
|
|
90
|
-
}
|
|
91
|
-
// ============================================
|
|
92
|
-
// Commands
|
|
93
|
-
// ============================================
|
|
94
|
-
async function runCodegen(args) {
|
|
95
|
-
const server = parseFlag(args, "--server");
|
|
96
|
-
const name = parseFlag(args, "--name");
|
|
97
|
-
const outDir = parseFlag(args, "--out");
|
|
98
|
-
const agentPath = parseFlag(args, "--path");
|
|
99
|
-
const visibility = parseFlag(args, "--visibility");
|
|
100
|
-
const noCli = hasFlag(args, "--no-cli");
|
|
101
|
-
const noTypes = hasFlag(args, "--no-types");
|
|
102
|
-
if (!server) {
|
|
103
|
-
console.error("Error: --server is required.\n" +
|
|
104
|
-
" Example: agents-sdk codegen --server 'npx @mcp/notion' --name notion");
|
|
105
|
-
process.exit(1);
|
|
106
|
-
}
|
|
107
|
-
const resolvedOutDir = outDir ??
|
|
108
|
-
join(getAgentsDir(), `@${(name ?? "mcp-agent").toLowerCase().replace(/[^a-z0-9-]/g, "-")}`);
|
|
109
|
-
console.log(`Connecting to MCP server: ${server}`);
|
|
110
|
-
console.log(`Output: ${resolvedOutDir}\n`);
|
|
111
|
-
try {
|
|
112
|
-
const result = await codegen({
|
|
113
|
-
server,
|
|
114
|
-
outDir: resolvedOutDir,
|
|
115
|
-
agentPath,
|
|
116
|
-
name,
|
|
117
|
-
cli: !noCli,
|
|
118
|
-
types: !noTypes,
|
|
119
|
-
visibility,
|
|
120
|
-
});
|
|
121
|
-
console.log(`\x1b[32m\u2713\x1b[0m Generated ${result.toolCount} tools from ${result.serverInfo.name ?? "MCP server"}`);
|
|
122
|
-
console.log(`\nFiles:`);
|
|
123
|
-
for (const f of result.files) {
|
|
124
|
-
console.log(` ${f}`);
|
|
125
|
-
}
|
|
126
|
-
console.log(`\nUse: agents-sdk use ${name ?? result.serverInfo.name ?? "<agent>"} --list`);
|
|
127
|
-
}
|
|
128
|
-
catch (err) {
|
|
129
|
-
console.error(`\x1b[31mError:\x1b[0m ${err instanceof Error ? err.message : String(err)}`);
|
|
130
|
-
process.exit(1);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
async function runUse(args) {
|
|
134
|
-
const agentName = args[1];
|
|
135
|
-
if (!agentName) {
|
|
136
|
-
console.error("Error: agent name required.\n" +
|
|
137
|
-
" Example: agents-sdk use notion search_pages '{...}'");
|
|
138
|
-
process.exit(1);
|
|
139
|
-
}
|
|
140
|
-
const agentDir = findAgentDir(agentName);
|
|
141
|
-
if (!agentDir) {
|
|
142
|
-
console.error(`Error: No generated agent '${agentName}' found.\n` +
|
|
143
|
-
` Looked in: ${getAgentsDir()}\n` +
|
|
144
|
-
` Run: agents-sdk codegen --server '...' --name ${agentName}`);
|
|
145
|
-
process.exit(1);
|
|
146
|
-
}
|
|
147
|
-
// --list: show available tools
|
|
148
|
-
if (hasFlag(args, "--list")) {
|
|
149
|
-
const tools = listAgentTools(agentDir);
|
|
150
|
-
console.log(`Tools for ${agentName}:\n`);
|
|
151
|
-
for (const t of tools) {
|
|
152
|
-
console.log(` ${t.name.padEnd(30)} ${t.description ?? ""}`);
|
|
153
|
-
}
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
const toolName = args[2];
|
|
157
|
-
if (!toolName) {
|
|
158
|
-
console.error(`Error: tool name required.\n` +
|
|
159
|
-
` Example: agents-sdk use ${agentName} <tool> [params]\n` +
|
|
160
|
-
` List tools: agents-sdk use ${agentName} --list`);
|
|
161
|
-
process.exit(1);
|
|
162
|
-
}
|
|
163
|
-
const paramsStr = args[3];
|
|
164
|
-
const params = paramsStr ? JSON.parse(paramsStr) : {};
|
|
165
|
-
try {
|
|
166
|
-
const result = await useAgent({
|
|
167
|
-
agentDir,
|
|
168
|
-
tool: toolName,
|
|
169
|
-
params,
|
|
170
|
-
});
|
|
171
|
-
console.log(JSON.stringify(result, null, 2));
|
|
172
|
-
}
|
|
173
|
-
catch (err) {
|
|
174
|
-
console.error(`\x1b[31mError:\x1b[0m ${err instanceof Error ? err.message : String(err)}`);
|
|
175
|
-
process.exit(1);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
function runList() {
|
|
179
|
-
const agentsDir = getAgentsDir();
|
|
180
|
-
if (!existsSync(agentsDir)) {
|
|
181
|
-
console.log("No generated agents found.");
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
const entries = readdirSync(agentsDir);
|
|
185
|
-
const agents = [];
|
|
186
|
-
for (const entry of entries) {
|
|
187
|
-
const manifestPath = join(agentsDir, entry, ".codegen-manifest.json");
|
|
188
|
-
if (existsSync(manifestPath)) {
|
|
189
|
-
try {
|
|
190
|
-
const manifest = JSON.parse(require("node:fs").readFileSync(manifestPath, "utf-8"));
|
|
191
|
-
agents.push({
|
|
192
|
-
name: manifest.agentPath,
|
|
193
|
-
tools: manifest.tools.length,
|
|
194
|
-
server: manifest.serverInfo.name,
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
agents.push({ name: entry, tools: 0 });
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
if (agents.length === 0) {
|
|
203
|
-
console.log("No generated agents found.");
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
console.log("Generated agents:\n");
|
|
207
|
-
for (const a of agents) {
|
|
208
|
-
console.log(` ${a.name.padEnd(25)} ${String(a.tools).padEnd(5)} tools${a.server ? ` (${a.server})` : ""}`);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
// ============================================
|
|
212
|
-
// Main
|
|
213
|
-
// ============================================
|
|
214
|
-
switch (command) {
|
|
215
|
-
case "codegen":
|
|
216
|
-
await runCodegen(args);
|
|
217
|
-
break;
|
|
218
|
-
case "use":
|
|
219
|
-
await runUse(args);
|
|
220
|
-
break;
|
|
221
|
-
case "list":
|
|
222
|
-
runList();
|
|
223
|
-
break;
|
|
224
|
-
case "--help":
|
|
225
|
-
case "-h":
|
|
226
|
-
case undefined:
|
|
227
|
-
printUsage();
|
|
228
|
-
break;
|
|
229
|
-
default:
|
|
230
|
-
console.error(`Unknown command: ${command}`);
|
|
231
|
-
printUsage();
|
|
232
|
-
process.exit(1);
|
|
233
|
-
}
|
|
234
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/src/cli.ts
DELETED
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
/**
|
|
3
|
-
* agents-sdk CLI
|
|
4
|
-
*
|
|
5
|
-
* Unified command-line interface for the agents SDK.
|
|
6
|
-
*
|
|
7
|
-
* Commands:
|
|
8
|
-
* codegen - Generate agent definitions from an MCP server
|
|
9
|
-
* use - Execute a tool on a codegenned agent
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```bash
|
|
13
|
-
* # Generate from MCP server
|
|
14
|
-
* agents-sdk codegen --server 'npx @mcp/notion' --name notion --out ./agents/@notion
|
|
15
|
-
*
|
|
16
|
-
* # Use a tool
|
|
17
|
-
* agents-sdk use notion search_pages '{"query": "hello"}'
|
|
18
|
-
*
|
|
19
|
-
* # List tools on a codegenned agent
|
|
20
|
-
* agents-sdk use notion --list
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
import { resolve, join } from "node:path";
|
|
25
|
-
import { existsSync, readdirSync } from "node:fs";
|
|
26
|
-
import { codegen, useAgent, listAgentTools } from "./codegen.js";
|
|
27
|
-
import type { CodegenManifest } from "./codegen.js";
|
|
28
|
-
|
|
29
|
-
const args = process.argv.slice(2);
|
|
30
|
-
const command = args[0];
|
|
31
|
-
|
|
32
|
-
// ============================================
|
|
33
|
-
// Helpers
|
|
34
|
-
// ============================================
|
|
35
|
-
|
|
36
|
-
function parseFlag(args: string[], flag: string): string | undefined {
|
|
37
|
-
const idx = args.indexOf(flag);
|
|
38
|
-
if (idx === -1 || idx + 1 >= args.length) return undefined;
|
|
39
|
-
return args[idx + 1];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function hasFlag(args: string[], flag: string): boolean {
|
|
43
|
-
return args.includes(flag);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/** Default directory for codegenned agents */
|
|
47
|
-
function getAgentsDir(): string {
|
|
48
|
-
return resolve(process.env.AGENTS_SDK_DIR ?? "./agents");
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/** Find an agent directory by name */
|
|
52
|
-
function findAgentDir(name: string): string | null {
|
|
53
|
-
const agentsDir = getAgentsDir();
|
|
54
|
-
|
|
55
|
-
// Try exact path first
|
|
56
|
-
const exactPath = resolve(name);
|
|
57
|
-
if (existsSync(join(exactPath, ".codegen-manifest.json"))) {
|
|
58
|
-
return exactPath;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Try under agents dir with @ prefix
|
|
62
|
-
const withAt = join(agentsDir, `@${name}`);
|
|
63
|
-
if (existsSync(join(withAt, ".codegen-manifest.json"))) {
|
|
64
|
-
return withAt;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Try under agents dir without @ prefix
|
|
68
|
-
const withoutAt = join(agentsDir, name);
|
|
69
|
-
if (existsSync(join(withoutAt, ".codegen-manifest.json"))) {
|
|
70
|
-
return withoutAt;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function printUsage() {
|
|
77
|
-
console.log(`agents-sdk - SDK for building AI agents
|
|
78
|
-
|
|
79
|
-
Usage:
|
|
80
|
-
agents-sdk codegen [options] Generate agent from MCP server
|
|
81
|
-
agents-sdk use <agent> [options] Execute a tool on a generated agent
|
|
82
|
-
agents-sdk list List all generated agents
|
|
83
|
-
|
|
84
|
-
Codegen options:
|
|
85
|
-
--server <source> MCP server (command string or URL)
|
|
86
|
-
--name <name> Agent name (default: derived from server)
|
|
87
|
-
--out <dir> Output directory (default: ./agents/@<name>)
|
|
88
|
-
--path <path> Agent path override
|
|
89
|
-
--no-cli Skip CLI generation
|
|
90
|
-
--no-types Skip TypeScript interface generation
|
|
91
|
-
--visibility <level> Agent visibility (public|internal|private)
|
|
92
|
-
|
|
93
|
-
Use options:
|
|
94
|
-
agents-sdk use <agent> <tool> [params_json]
|
|
95
|
-
agents-sdk use <agent> --list List tools on the agent
|
|
96
|
-
|
|
97
|
-
Examples:
|
|
98
|
-
agents-sdk codegen --server 'npx @mcp/notion' --name notion
|
|
99
|
-
agents-sdk use notion search_pages '{"query": "hello"}'
|
|
100
|
-
agents-sdk use notion --list
|
|
101
|
-
`);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// ============================================
|
|
105
|
-
// Commands
|
|
106
|
-
// ============================================
|
|
107
|
-
|
|
108
|
-
async function runCodegen(args: string[]) {
|
|
109
|
-
const server = parseFlag(args, "--server");
|
|
110
|
-
const name = parseFlag(args, "--name");
|
|
111
|
-
const outDir = parseFlag(args, "--out");
|
|
112
|
-
const agentPath = parseFlag(args, "--path");
|
|
113
|
-
const visibility = parseFlag(args, "--visibility") as
|
|
114
|
-
| "public"
|
|
115
|
-
| "internal"
|
|
116
|
-
| "private"
|
|
117
|
-
| undefined;
|
|
118
|
-
const noCli = hasFlag(args, "--no-cli");
|
|
119
|
-
const noTypes = hasFlag(args, "--no-types");
|
|
120
|
-
|
|
121
|
-
if (!server) {
|
|
122
|
-
console.error(
|
|
123
|
-
"Error: --server is required.\n" +
|
|
124
|
-
" Example: agents-sdk codegen --server 'npx @mcp/notion' --name notion",
|
|
125
|
-
);
|
|
126
|
-
process.exit(1);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
const resolvedOutDir =
|
|
130
|
-
outDir ??
|
|
131
|
-
join(
|
|
132
|
-
getAgentsDir(),
|
|
133
|
-
`@${(name ?? "mcp-agent").toLowerCase().replace(/[^a-z0-9-]/g, "-")}`,
|
|
134
|
-
);
|
|
135
|
-
|
|
136
|
-
console.log(`Connecting to MCP server: ${server}`);
|
|
137
|
-
console.log(`Output: ${resolvedOutDir}\n`);
|
|
138
|
-
|
|
139
|
-
try {
|
|
140
|
-
const result = await codegen({
|
|
141
|
-
server,
|
|
142
|
-
outDir: resolvedOutDir,
|
|
143
|
-
agentPath,
|
|
144
|
-
name,
|
|
145
|
-
cli: !noCli,
|
|
146
|
-
types: !noTypes,
|
|
147
|
-
visibility,
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
console.log(
|
|
151
|
-
`\x1b[32m\u2713\x1b[0m Generated ${result.toolCount} tools from ${result.serverInfo.name ?? "MCP server"}`,
|
|
152
|
-
);
|
|
153
|
-
console.log(`\nFiles:`);
|
|
154
|
-
for (const f of result.files) {
|
|
155
|
-
console.log(` ${f}`);
|
|
156
|
-
}
|
|
157
|
-
console.log(
|
|
158
|
-
`\nUse: agents-sdk use ${name ?? result.serverInfo.name ?? "<agent>"} --list`,
|
|
159
|
-
);
|
|
160
|
-
} catch (err) {
|
|
161
|
-
console.error(
|
|
162
|
-
`\x1b[31mError:\x1b[0m ${err instanceof Error ? err.message : String(err)}`,
|
|
163
|
-
);
|
|
164
|
-
process.exit(1);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
async function runUse(args: string[]) {
|
|
169
|
-
const agentName = args[1];
|
|
170
|
-
|
|
171
|
-
if (!agentName) {
|
|
172
|
-
console.error(
|
|
173
|
-
"Error: agent name required.\n" +
|
|
174
|
-
" Example: agents-sdk use notion search_pages '{...}'",
|
|
175
|
-
);
|
|
176
|
-
process.exit(1);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
const agentDir = findAgentDir(agentName);
|
|
180
|
-
if (!agentDir) {
|
|
181
|
-
console.error(
|
|
182
|
-
`Error: No generated agent '${agentName}' found.\n` +
|
|
183
|
-
` Looked in: ${getAgentsDir()}\n` +
|
|
184
|
-
` Run: agents-sdk codegen --server '...' --name ${agentName}`,
|
|
185
|
-
);
|
|
186
|
-
process.exit(1);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// --list: show available tools
|
|
190
|
-
if (hasFlag(args, "--list")) {
|
|
191
|
-
const tools = listAgentTools(agentDir);
|
|
192
|
-
console.log(`Tools for ${agentName}:\n`);
|
|
193
|
-
for (const t of tools) {
|
|
194
|
-
console.log(` ${t.name.padEnd(30)} ${t.description ?? ""}`);
|
|
195
|
-
}
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
const toolName = args[2];
|
|
200
|
-
if (!toolName) {
|
|
201
|
-
console.error(
|
|
202
|
-
`Error: tool name required.\n` +
|
|
203
|
-
` Example: agents-sdk use ${agentName} <tool> [params]\n` +
|
|
204
|
-
` List tools: agents-sdk use ${agentName} --list`,
|
|
205
|
-
);
|
|
206
|
-
process.exit(1);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
const paramsStr = args[3];
|
|
210
|
-
const params = paramsStr ? JSON.parse(paramsStr) : {};
|
|
211
|
-
|
|
212
|
-
try {
|
|
213
|
-
const result = await useAgent({
|
|
214
|
-
agentDir,
|
|
215
|
-
tool: toolName,
|
|
216
|
-
params,
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
console.log(JSON.stringify(result, null, 2));
|
|
220
|
-
} catch (err) {
|
|
221
|
-
console.error(
|
|
222
|
-
`\x1b[31mError:\x1b[0m ${err instanceof Error ? err.message : String(err)}`,
|
|
223
|
-
);
|
|
224
|
-
process.exit(1);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
function runList() {
|
|
229
|
-
const agentsDir = getAgentsDir();
|
|
230
|
-
|
|
231
|
-
if (!existsSync(agentsDir)) {
|
|
232
|
-
console.log("No generated agents found.");
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
const entries = readdirSync(agentsDir);
|
|
237
|
-
const agents: { name: string; tools: number; server?: string }[] = [];
|
|
238
|
-
|
|
239
|
-
for (const entry of entries) {
|
|
240
|
-
const manifestPath = join(agentsDir, entry, ".codegen-manifest.json");
|
|
241
|
-
if (existsSync(manifestPath)) {
|
|
242
|
-
try {
|
|
243
|
-
const manifest: CodegenManifest = JSON.parse(
|
|
244
|
-
require("node:fs").readFileSync(manifestPath, "utf-8"),
|
|
245
|
-
);
|
|
246
|
-
agents.push({
|
|
247
|
-
name: manifest.agentPath,
|
|
248
|
-
tools: manifest.tools.length,
|
|
249
|
-
server: manifest.serverInfo.name,
|
|
250
|
-
});
|
|
251
|
-
} catch {
|
|
252
|
-
agents.push({ name: entry, tools: 0 });
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
if (agents.length === 0) {
|
|
258
|
-
console.log("No generated agents found.");
|
|
259
|
-
return;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
console.log("Generated agents:\n");
|
|
263
|
-
for (const a of agents) {
|
|
264
|
-
console.log(
|
|
265
|
-
` ${a.name.padEnd(25)} ${String(a.tools).padEnd(5)} tools${a.server ? ` (${a.server})` : ""}`,
|
|
266
|
-
);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// ============================================
|
|
271
|
-
// Main
|
|
272
|
-
// ============================================
|
|
273
|
-
|
|
274
|
-
switch (command) {
|
|
275
|
-
case "codegen":
|
|
276
|
-
await runCodegen(args);
|
|
277
|
-
break;
|
|
278
|
-
case "use":
|
|
279
|
-
await runUse(args);
|
|
280
|
-
break;
|
|
281
|
-
case "list":
|
|
282
|
-
runList();
|
|
283
|
-
break;
|
|
284
|
-
case "--help":
|
|
285
|
-
case "-h":
|
|
286
|
-
case undefined:
|
|
287
|
-
printUsage();
|
|
288
|
-
break;
|
|
289
|
-
default:
|
|
290
|
-
console.error(`Unknown command: ${command}`);
|
|
291
|
-
printUsage();
|
|
292
|
-
process.exit(1);
|
|
293
|
-
}
|