@slashfi/agents-sdk 0.21.0 → 0.23.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/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
- }