@slashfi/agents-sdk 0.61.0 → 0.63.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 +266 -212
- package/dist/adk.js +47 -0
- package/dist/adk.js.map +1 -1
- package/dist/agent-definitions/config.js +2 -2
- package/dist/agent-definitions/config.js.map +1 -1
- package/dist/cjs/agent-definitions/config.js +2 -2
- package/dist/cjs/agent-definitions/config.js.map +1 -1
- package/dist/cjs/config-store.js +19 -11
- package/dist/cjs/config-store.js.map +1 -1
- package/dist/cjs/index.js +1 -29
- package/dist/cjs/index.js.map +1 -1
- package/dist/config-store.d.ts +2 -2
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +19 -11
- package/dist/config-store.js.map +1 -1
- package/dist/index.d.ts +1 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -18
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/adk.ts +40 -0
- package/src/agent-definitions/config.ts +2 -2
- package/src/config-store.test.ts +2 -2
- package/src/config-store.ts +17 -11
- package/src/consumer.test.ts +4 -4
- package/src/index.ts +1 -44
- package/src/types.ts +8 -0
- package/dist/cjs/client.js +0 -193
- package/dist/cjs/client.js.map +0 -1
- package/dist/cjs/codegen.js +0 -1071
- package/dist/cjs/codegen.js.map +0 -1
- package/dist/cjs/introspect.js +0 -136
- package/dist/cjs/introspect.js.map +0 -1
- package/dist/cjs/jsonc.js +0 -74
- package/dist/cjs/jsonc.js.map +0 -1
- package/dist/cjs/pack.js +0 -256
- package/dist/cjs/pack.js.map +0 -1
- package/dist/client.d.ts +0 -49
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -190
- package/dist/client.js.map +0 -1
- package/dist/codegen.d.ts +0 -163
- package/dist/codegen.d.ts.map +0 -1
- package/dist/codegen.js +0 -1059
- package/dist/codegen.js.map +0 -1
- package/dist/introspect.d.ts +0 -16
- package/dist/introspect.d.ts.map +0 -1
- package/dist/introspect.js +0 -133
- package/dist/introspect.js.map +0 -1
- package/dist/jsonc.d.ts +0 -15
- package/dist/jsonc.d.ts.map +0 -1
- package/dist/jsonc.js +0 -70
- package/dist/jsonc.js.map +0 -1
- package/dist/pack.d.ts +0 -59
- package/dist/pack.d.ts.map +0 -1
- package/dist/pack.js +0 -252
- package/dist/pack.js.map +0 -1
- package/src/client.ts +0 -273
- package/src/codegen.test.ts +0 -537
- package/src/codegen.ts +0 -1423
- package/src/introspect.ts +0 -171
- package/src/jsonc.ts +0 -83
- package/src/pack.ts +0 -394
package/src/types.ts
CHANGED
|
@@ -912,3 +912,11 @@ export interface AuthSecretValue {
|
|
|
912
912
|
$agent_type: "secret";
|
|
913
913
|
value: string;
|
|
914
914
|
}
|
|
915
|
+
|
|
916
|
+
// Server Source (moved from codegen.ts)
|
|
917
|
+
export type ServerSource =
|
|
918
|
+
| string
|
|
919
|
+
| { command: string; args?: string[]; env?: Record<string, string> }
|
|
920
|
+
| { url: string; headers?: Record<string, string> }
|
|
921
|
+
| { spawn: string; args?: string[]; env?: Record<string, string>; port?: number; endpoint?: string };
|
|
922
|
+
|
package/dist/cjs/client.js
DELETED
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Agent Client
|
|
4
|
-
*
|
|
5
|
-
* Creates a typed client from a SerializedAgentDefinition.
|
|
6
|
-
* The client spawns (or connects to) the MCP server and proxies
|
|
7
|
-
* tool calls via JSON-RPC.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* import { createClient } from '@slashfi/agents-sdk';
|
|
12
|
-
* import definition from './agents/notion/definition.json';
|
|
13
|
-
*
|
|
14
|
-
* const client = createClient(definition, {
|
|
15
|
-
* env: { NOTION_TOKEN: process.env.NOTION_TOKEN },
|
|
16
|
-
* });
|
|
17
|
-
*
|
|
18
|
-
* const result = await client.call('API-post-search', { query: 'meeting notes' });
|
|
19
|
-
* await client.close();
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.createClient = createClient;
|
|
24
|
-
const node_child_process_1 = require("node:child_process");
|
|
25
|
-
class McpStdioClient {
|
|
26
|
-
definition;
|
|
27
|
-
proc = null;
|
|
28
|
-
messageId = 0;
|
|
29
|
-
buffer = "";
|
|
30
|
-
pending = new Map();
|
|
31
|
-
initialized = false;
|
|
32
|
-
initPromise = null;
|
|
33
|
-
serverCommand;
|
|
34
|
-
env;
|
|
35
|
-
timeout;
|
|
36
|
-
constructor(definition, options = {}) {
|
|
37
|
-
this.definition = definition;
|
|
38
|
-
this.serverCommand = options.serverCommand ?? definition.serverSource ?? "";
|
|
39
|
-
this.env = options.env ?? {};
|
|
40
|
-
this.timeout = options.timeout ?? 30000;
|
|
41
|
-
if (!this.serverCommand) {
|
|
42
|
-
throw new Error(`No server command for agent "${definition.path}". Set serverSource in the definition or pass serverCommand in options.`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
tools() {
|
|
46
|
-
return this.definition.tools;
|
|
47
|
-
}
|
|
48
|
-
isConnected() {
|
|
49
|
-
return this.proc !== null && !this.proc.killed;
|
|
50
|
-
}
|
|
51
|
-
async call(toolName, input = {}) {
|
|
52
|
-
// Validate tool exists
|
|
53
|
-
const tool = this.definition.tools.find((t) => t.name === toolName);
|
|
54
|
-
if (!tool) {
|
|
55
|
-
const available = this.definition.tools.map((t) => t.name).join(", ");
|
|
56
|
-
throw new Error(`Tool "${toolName}" not found. Available: ${available}`);
|
|
57
|
-
}
|
|
58
|
-
// Ensure connected + initialized
|
|
59
|
-
await this.ensureInitialized();
|
|
60
|
-
// Send tools/call
|
|
61
|
-
const result = await this.sendRequest("tools/call", {
|
|
62
|
-
name: toolName,
|
|
63
|
-
arguments: input,
|
|
64
|
-
});
|
|
65
|
-
// MCP tools/call returns { content: [{ type, text }] }
|
|
66
|
-
const resultObj = result;
|
|
67
|
-
if (resultObj && typeof resultObj === "object" && "content" in resultObj) {
|
|
68
|
-
const content = resultObj.content;
|
|
69
|
-
if (Array.isArray(content) && content.length > 0) {
|
|
70
|
-
const first = content[0];
|
|
71
|
-
if (first.type === "text") {
|
|
72
|
-
try {
|
|
73
|
-
return JSON.parse(first.text);
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return first.text;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return first;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return result;
|
|
83
|
-
}
|
|
84
|
-
close() {
|
|
85
|
-
if (this.proc) {
|
|
86
|
-
this.proc.kill();
|
|
87
|
-
this.proc = null;
|
|
88
|
-
}
|
|
89
|
-
this.initialized = false;
|
|
90
|
-
this.initPromise = null;
|
|
91
|
-
// Reject all pending
|
|
92
|
-
for (const req of Array.from(this.pending.values())) {
|
|
93
|
-
clearTimeout(req.timer);
|
|
94
|
-
req.reject(new Error("Client closed"));
|
|
95
|
-
}
|
|
96
|
-
this.pending.clear();
|
|
97
|
-
}
|
|
98
|
-
// ── Private ──
|
|
99
|
-
async ensureInitialized() {
|
|
100
|
-
if (this.initialized)
|
|
101
|
-
return;
|
|
102
|
-
if (this.initPromise)
|
|
103
|
-
return this.initPromise;
|
|
104
|
-
this.initPromise = this.connect();
|
|
105
|
-
await this.initPromise;
|
|
106
|
-
this.initialized = true;
|
|
107
|
-
}
|
|
108
|
-
async connect() {
|
|
109
|
-
const parts = this.serverCommand.split(/\s+/);
|
|
110
|
-
this.proc = (0, node_child_process_1.spawn)(parts[0], parts.slice(1), {
|
|
111
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
112
|
-
env: { ...process.env, ...this.env },
|
|
113
|
-
});
|
|
114
|
-
this.proc.stdout?.on("data", (chunk) => this.onData(chunk));
|
|
115
|
-
this.proc.on("error", (err) => {
|
|
116
|
-
for (const req of Array.from(this.pending.values())) {
|
|
117
|
-
clearTimeout(req.timer);
|
|
118
|
-
req.reject(err);
|
|
119
|
-
}
|
|
120
|
-
this.pending.clear();
|
|
121
|
-
});
|
|
122
|
-
// Initialize handshake
|
|
123
|
-
await this.sendRequest("initialize", {
|
|
124
|
-
protocolVersion: "2024-11-05",
|
|
125
|
-
capabilities: {},
|
|
126
|
-
clientInfo: { name: "agents-sdk-client", version: "1.0.0" },
|
|
127
|
-
});
|
|
128
|
-
// Send initialized notification
|
|
129
|
-
this.sendNotification("notifications/initialized");
|
|
130
|
-
}
|
|
131
|
-
sendRequest(method, params = {}) {
|
|
132
|
-
return new Promise((resolve, reject) => {
|
|
133
|
-
const id = ++this.messageId;
|
|
134
|
-
const timer = setTimeout(() => {
|
|
135
|
-
this.pending.delete(id);
|
|
136
|
-
reject(new Error(`Timeout after ${this.timeout}ms calling ${method}`));
|
|
137
|
-
}, this.timeout);
|
|
138
|
-
this.pending.set(id, { resolve, reject, timer });
|
|
139
|
-
const msg = JSON.stringify({ jsonrpc: "2.0", id, method, params });
|
|
140
|
-
this.proc?.stdin?.write(`${msg}\n`);
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
sendNotification(method, params) {
|
|
144
|
-
const msg = JSON.stringify({
|
|
145
|
-
jsonrpc: "2.0",
|
|
146
|
-
method,
|
|
147
|
-
...(params ? { params } : {}),
|
|
148
|
-
});
|
|
149
|
-
this.proc?.stdin?.write(`${msg}\n`);
|
|
150
|
-
}
|
|
151
|
-
onData(chunk) {
|
|
152
|
-
this.buffer += chunk.toString();
|
|
153
|
-
const lines = this.buffer.split("\n");
|
|
154
|
-
this.buffer = lines.pop() || "";
|
|
155
|
-
for (const line of lines) {
|
|
156
|
-
const trimmed = line.trim();
|
|
157
|
-
if (!trimmed)
|
|
158
|
-
continue;
|
|
159
|
-
try {
|
|
160
|
-
const parsed = JSON.parse(trimmed);
|
|
161
|
-
if (parsed.id != null && this.pending.has(parsed.id)) {
|
|
162
|
-
const req = this.pending.get(parsed.id);
|
|
163
|
-
if (!req)
|
|
164
|
-
continue;
|
|
165
|
-
this.pending.delete(parsed.id);
|
|
166
|
-
clearTimeout(req.timer);
|
|
167
|
-
if (parsed.error) {
|
|
168
|
-
req.reject(new Error(JSON.stringify(parsed.error)));
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
req.resolve(parsed.result);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
catch {
|
|
176
|
-
// ignore non-JSON lines (stderr leakage, etc.)
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
// ============================================
|
|
182
|
-
// Factory
|
|
183
|
-
// ============================================
|
|
184
|
-
/**
|
|
185
|
-
* Create an agent client from a serialized definition.
|
|
186
|
-
*
|
|
187
|
-
* The client lazily spawns the MCP server on first call and
|
|
188
|
-
* proxies tool invocations via JSON-RPC over stdio.
|
|
189
|
-
*/
|
|
190
|
-
function createClient(definition, options) {
|
|
191
|
-
return new McpStdioClient(definition, options);
|
|
192
|
-
}
|
|
193
|
-
//# sourceMappingURL=client.js.map
|
package/dist/cjs/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|