@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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAiDH,mBAAmB;AACnB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGtD,WAAW;AACX,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAOpD,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAc7C,SAAS;AACT,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAMhC,OAAO;AACP,OAAO,EACL,eAAe,EACf,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AASrC,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,UAAU;AACV,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,WAAW,EACX,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AAOxC,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM;AACN,OAAO,EACL,OAAO,EACP,SAAS,EACT,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,GACV,MAAM,UAAU,CAAC;AAQlB,wBAAwB;AAExB,eAAe;AACf,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,qCAAqC,CAAC;AAiB7C,kBAAkB;AAClB,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AAEnF,QAAQ;AACR,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAOtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EACL,gBAAgB,GAMjB,MAAM,kBAAkB,CAAC;AAE1B,oBAAoB;AACpB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAY5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAShE,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAiDH,mBAAmB;AACnB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGtD,WAAW;AACX,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAOpD,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAc7C,SAAS;AACT,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAMhC,OAAO;AACP,OAAO,EACL,eAAe,EACf,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AASrC,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,UAAU;AACV,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,WAAW,EACX,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AAOxC,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM;AACN,OAAO,EACL,OAAO,EACP,SAAS,EACT,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,GACV,MAAM,UAAU,CAAC;AAQlB,wBAAwB;AAExB,eAAe;AACf,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,qCAAqC,CAAC;AAiB7C,kBAAkB;AAClB,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AAEnF,QAAQ;AACR,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAOtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EACL,gBAAgB,GAMjB,MAAM,kBAAkB,CAAC;AAE1B,oBAAoB;AACpB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAY5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAShE,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAWjE,+CAA+C;AAC/C,+BAA+B;AAC/B,+CAA+C;AAE/C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMhE,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEvD,+CAA+C;AAC/C,iBAAiB;AACjB,+CAA+C;AAE/C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAS1C,+CAA+C;AAC/C,aAAa;AACb,+CAA+C;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * MCP Introspection
3
+ *
4
+ * Connects to an MCP server, introspects its tools,
5
+ * and outputs a SerializedAgentDefinition (agent.json).
6
+ *
7
+ * Deduplicates shared $defs across tools.
8
+ */
9
+ export interface IntrospectOptions {
10
+ server: string;
11
+ name: string;
12
+ out?: string;
13
+ env?: Record<string, string>;
14
+ }
15
+ export declare function introspectMcp(options: IntrospectOptions): Promise<void>;
16
+ //# sourceMappingURL=introspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../src/introspect.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAoCD,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoH7E"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * MCP Introspection
3
+ *
4
+ * Connects to an MCP server, introspects its tools,
5
+ * and outputs a SerializedAgentDefinition (agent.json).
6
+ *
7
+ * Deduplicates shared $defs across tools.
8
+ */
9
+ import { spawn } from "node:child_process";
10
+ import { mkdirSync, writeFileSync } from "node:fs";
11
+ import { dirname, resolve } from "node:path";
12
+ function deduplicateDefs(tools) {
13
+ const defsByContent = new Map();
14
+ for (const tool of tools) {
15
+ const schema = tool.inputSchema;
16
+ const defs = schema?.$defs;
17
+ if (!defs || typeof defs !== "object")
18
+ continue;
19
+ for (const [defName, defSchema] of Object.entries(defs)) {
20
+ const key = JSON.stringify(defSchema);
21
+ if (!defsByContent.has(key)) {
22
+ defsByContent.set(key, { name: defName, schema: defSchema });
23
+ }
24
+ }
25
+ }
26
+ const sharedDefs = {};
27
+ for (const { name, schema } of Array.from(defsByContent.values())) {
28
+ sharedDefs[name] = schema;
29
+ }
30
+ const cleanedTools = tools.map((t) => {
31
+ const schema = { ...t.inputSchema };
32
+ schema.$defs = undefined;
33
+ return { ...t, inputSchema: schema };
34
+ });
35
+ return { tools: cleanedTools, sharedDefs };
36
+ }
37
+ export async function introspectMcp(options) {
38
+ const { server, name, out } = options;
39
+ const parts = server.split(/\s+/);
40
+ const proc = spawn(parts[0], parts.slice(1), {
41
+ stdio: ["pipe", "pipe", "pipe"],
42
+ env: { ...process.env, ...options.env },
43
+ });
44
+ let buffer = "";
45
+ let messageId = 0;
46
+ function sendJsonRpc(method, params = {}) {
47
+ const id = ++messageId;
48
+ const msg = JSON.stringify({ jsonrpc: "2.0", id, method, params });
49
+ proc.stdin?.write(`${msg}\n`);
50
+ return id;
51
+ }
52
+ function waitForResponse(targetId) {
53
+ return new Promise((res, reject) => {
54
+ const timeout = setTimeout(() => reject(new Error("Timeout")), 30000);
55
+ const handler = (chunk) => {
56
+ buffer += chunk.toString();
57
+ const lines = buffer.split("\n");
58
+ buffer = lines.pop() || "";
59
+ for (const line of lines) {
60
+ const trimmed = line.trim();
61
+ if (!trimmed)
62
+ continue;
63
+ try {
64
+ const parsed = JSON.parse(trimmed);
65
+ if (parsed.id === targetId) {
66
+ clearTimeout(timeout);
67
+ proc.stdout?.removeListener("data", handler);
68
+ if (parsed.error)
69
+ reject(new Error(JSON.stringify(parsed.error)));
70
+ else
71
+ res(parsed.result);
72
+ }
73
+ }
74
+ catch {
75
+ /* ignore non-JSON */
76
+ }
77
+ }
78
+ };
79
+ proc.stdout?.on("data", handler);
80
+ });
81
+ }
82
+ try {
83
+ console.log(`Connecting to MCP server: ${server}`);
84
+ const initId = sendJsonRpc("initialize", {
85
+ protocolVersion: "2024-11-05",
86
+ capabilities: {},
87
+ clientInfo: { name: "adk-introspect", version: "1.0.0" },
88
+ });
89
+ const initResult = (await waitForResponse(initId));
90
+ const serverInfo = initResult.serverInfo;
91
+ console.log(`Server: ${serverInfo?.name} v${serverInfo?.version}`);
92
+ proc.stdin?.write(`${JSON.stringify({ jsonrpc: "2.0", method: "notifications/initialized" })}\n`);
93
+ const toolsId = sendJsonRpc("tools/list", {});
94
+ const toolsResult = (await waitForResponse(toolsId));
95
+ const rawTools = (toolsResult.tools || []).map((t) => ({
96
+ name: t.name,
97
+ description: t.description || "",
98
+ inputSchema: t.inputSchema || {
99
+ type: "object",
100
+ properties: {},
101
+ },
102
+ }));
103
+ console.log(`Discovered ${rawTools.length} tools`);
104
+ const { tools, sharedDefs } = deduplicateDefs(rawTools);
105
+ const defsCount = Object.keys(sharedDefs).length;
106
+ if (defsCount > 0) {
107
+ console.log(`Hoisted ${defsCount} shared $defs`);
108
+ }
109
+ const definition = {
110
+ path: name,
111
+ name: serverInfo?.name || name,
112
+ description: `Agent for ${serverInfo?.name || name}`,
113
+ version: serverInfo?.version || "1.0.0",
114
+ visibility: "public",
115
+ serverSource: server,
116
+ serverInfo,
117
+ ...(defsCount > 0 ? { $defs: sharedDefs } : {}),
118
+ tools,
119
+ generatedAt: new Date().toISOString(),
120
+ sdkVersion: "0.22.0",
121
+ };
122
+ const outPath = out || `./${name}.json`;
123
+ const resolved = resolve(outPath);
124
+ mkdirSync(dirname(resolved), { recursive: true });
125
+ writeFileSync(resolved, `${JSON.stringify(definition, null, 2)}\n`);
126
+ const sizeKB = (JSON.stringify(definition).length / 1024).toFixed(1);
127
+ console.log(`\nWrote ${resolved} (${sizeKB}KB, ${tools.length} tools)`);
128
+ }
129
+ finally {
130
+ proc.kill();
131
+ }
132
+ }
133
+ //# sourceMappingURL=introspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspect.js","sourceRoot":"","sources":["../src/introspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * JSONC Parser
3
+ *
4
+ * Parses JSON with comments (single-line and multi-line)
5
+ * so agent.json files can be annotated.
6
+ */
7
+ /**
8
+ * Strip comments from JSONC content and parse as JSON.
9
+ */
10
+ export declare function parseJsonc(content: string): unknown;
11
+ /**
12
+ * Read and parse a JSONC file.
13
+ */
14
+ export declare function readJsoncFile(path: string): unknown;
15
+ //# sourceMappingURL=jsonc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonc.d.ts","sourceRoot":"","sources":["../src/jsonc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA8DnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnD"}
package/dist/jsonc.js ADDED
@@ -0,0 +1,70 @@
1
+ /**
2
+ * JSONC Parser
3
+ *
4
+ * Parses JSON with comments (single-line and multi-line)
5
+ * so agent.json files can be annotated.
6
+ */
7
+ import { readFileSync } from "node:fs";
8
+ /**
9
+ * Strip comments from JSONC content and parse as JSON.
10
+ */
11
+ export function parseJsonc(content) {
12
+ let result = "";
13
+ let i = 0;
14
+ let inString = false;
15
+ let stringChar = "";
16
+ while (i < content.length) {
17
+ if (inString) {
18
+ if (content[i] === "\\" && i + 1 < content.length) {
19
+ result += content[i] + content[i + 1];
20
+ i += 2;
21
+ continue;
22
+ }
23
+ if (content[i] === stringChar) {
24
+ inString = false;
25
+ }
26
+ result += content[i];
27
+ i++;
28
+ continue;
29
+ }
30
+ if (content[i] === '"') {
31
+ inString = true;
32
+ stringChar = content[i];
33
+ result += content[i];
34
+ i++;
35
+ continue;
36
+ }
37
+ // Single-line comment
38
+ if (content[i] === "/" &&
39
+ i + 1 < content.length &&
40
+ content[i + 1] === "/") {
41
+ while (i < content.length && content[i] !== "\n")
42
+ i++;
43
+ continue;
44
+ }
45
+ // Multi-line comment
46
+ if (content[i] === "/" &&
47
+ i + 1 < content.length &&
48
+ content[i + 1] === "*") {
49
+ i += 2;
50
+ while (i + 1 < content.length &&
51
+ !(content[i] === "*" && content[i + 1] === "/"))
52
+ i++;
53
+ i += 2;
54
+ continue;
55
+ }
56
+ result += content[i];
57
+ i++;
58
+ }
59
+ // Handle trailing commas
60
+ const cleaned = result.replace(/,\s*([}\]])/g, "$1");
61
+ return JSON.parse(cleaned);
62
+ }
63
+ /**
64
+ * Read and parse a JSONC file.
65
+ */
66
+ export function readJsoncFile(path) {
67
+ const content = readFileSync(path, "utf-8");
68
+ return parseJsonc(content);
69
+ }
70
+ //# sourceMappingURL=jsonc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonc.js","sourceRoot":"","sources":["../src/jsonc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAClD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtC,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;gBAC9B,QAAQ,GAAG,KAAK,CAAC;YACnB,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACvB,QAAQ,GAAG,IAAI,CAAC;YAChB,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,sBAAsB;QACtB,IACE,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;YAClB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM;YACtB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EACtB,CAAC;YACD,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,CAAC,EAAE,CAAC;YACtD,SAAS;QACX,CAAC;QAED,qBAAqB;QACrB,IACE,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;YAClB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM;YACtB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EACtB,CAAC;YACD,CAAC,IAAI,CAAC,CAAC;YACP,OACE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM;gBACtB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;gBAE/C,CAAC,EAAE,CAAC;YACN,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QAED,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,EAAE,CAAC;IACN,CAAC;IAED,yBAAyB;IACzB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
package/dist/pack.d.ts ADDED
@@ -0,0 +1,59 @@
1
+ /**
2
+ * ADK Pack
3
+ *
4
+ * Generates a publishable npm package from an agent.json file.
5
+ *
6
+ * Input: agent.json (SerializedAgentDefinition)
7
+ * Output: ready-to-publish directory with:
8
+ * - package.json
9
+ * - agent.json (copy)
10
+ * - meta.json (version metadata + diff)
11
+ * - index.js + index.d.ts (typed export)
12
+ */
13
+ export interface PackOptions {
14
+ /** Path to agent.json */
15
+ agentFile: string;
16
+ /** Output directory (default: ./dist) */
17
+ outDir?: string;
18
+ /** npm scope (default: @agentdef) */
19
+ scope?: string;
20
+ /** Previous version's agent.json path for diff (optional) */
21
+ previousAgentFile?: string;
22
+ }
23
+ export interface PackResult {
24
+ packageDir: string;
25
+ packageName: string;
26
+ version: string;
27
+ hash: string;
28
+ meta: VersionMeta;
29
+ }
30
+ export interface VersionMeta {
31
+ hash: string;
32
+ serverVersion: string;
33
+ npmPackage?: string;
34
+ toolCount: number;
35
+ sizeBytes: number;
36
+ generatedAt: string;
37
+ sdkVersion: string;
38
+ changes?: VersionChanges;
39
+ }
40
+ export interface VersionChanges {
41
+ previousHash?: string;
42
+ toolsAdded: string[];
43
+ toolsRemoved: string[];
44
+ toolsModified: string[];
45
+ schemaChanges: string[];
46
+ }
47
+ export declare function pack(options: PackOptions): PackResult;
48
+ export interface PublishOptions extends PackOptions {
49
+ /** Dry run (don't actually publish) */
50
+ dryRun?: boolean;
51
+ /** npm tag (default: latest) */
52
+ tag?: string;
53
+ /** npm access level */
54
+ access?: "public" | "restricted";
55
+ /** npm registry URL */
56
+ registry?: string;
57
+ }
58
+ export declare function publish(options: PublishOptions): PackResult;
59
+ //# sourceMappingURL=pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAkBH,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAqFD,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAkHrD;AAMD,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,MAAM,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;IACjC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAeD,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAoG3D"}
package/dist/pack.js ADDED
@@ -0,0 +1,249 @@
1
+ /**
2
+ * ADK Pack
3
+ *
4
+ * Generates a publishable npm package from an agent.json file.
5
+ *
6
+ * Input: agent.json (SerializedAgentDefinition)
7
+ * Output: ready-to-publish directory with:
8
+ * - package.json
9
+ * - agent.json (copy)
10
+ * - meta.json (version metadata + diff)
11
+ * - index.js + index.d.ts (typed export)
12
+ */
13
+ import { spawnSync } from "node:child_process";
14
+ import { createHash } from "node:crypto";
15
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
16
+ import { resolve } from "node:path";
17
+ import { parseJsonc } from "./jsonc.js";
18
+ // ============================================
19
+ // Hash
20
+ // ============================================
21
+ function contentHash(content) {
22
+ return createHash("sha256").update(content).digest("hex").slice(0, 8);
23
+ }
24
+ // ============================================
25
+ // Diff
26
+ // ============================================
27
+ function diffDefinitions(current, previous, previousRawContent) {
28
+ const prevToolNames = new Set(previous.tools.map((t) => t.name));
29
+ const currToolNames = new Set(current.tools.map((t) => t.name));
30
+ const toolsAdded = current.tools
31
+ .filter((t) => !prevToolNames.has(t.name))
32
+ .map((t) => t.name);
33
+ const toolsRemoved = previous.tools
34
+ .filter((t) => !currToolNames.has(t.name))
35
+ .map((t) => t.name);
36
+ // Find modified tools (same name, different schema)
37
+ const toolsModified = [];
38
+ const schemaChanges = [];
39
+ const prevToolMap = new Map(previous.tools.map((t) => [t.name, t]));
40
+ for (const tool of current.tools) {
41
+ const prev = prevToolMap.get(tool.name);
42
+ if (!prev)
43
+ continue;
44
+ const currSchema = JSON.stringify(tool.inputSchema);
45
+ const prevSchema = JSON.stringify(prev.inputSchema);
46
+ if (currSchema !== prevSchema) {
47
+ toolsModified.push(tool.name);
48
+ // Generate human-readable schema change description
49
+ const currProps = Object.keys(tool.inputSchema.properties || {});
50
+ const prevProps = Object.keys(prev.inputSchema.properties || {});
51
+ const added = currProps.filter((p) => !prevProps.includes(p));
52
+ const removed = prevProps.filter((p) => !currProps.includes(p));
53
+ if (added.length > 0) {
54
+ schemaChanges.push(`${tool.name}: added properties: ${added.join(", ")}`);
55
+ }
56
+ if (removed.length > 0) {
57
+ schemaChanges.push(`${tool.name}: removed properties: ${removed.join(", ")}`);
58
+ }
59
+ if (added.length === 0 && removed.length === 0) {
60
+ schemaChanges.push(`${tool.name}: schema modified`);
61
+ }
62
+ }
63
+ }
64
+ return {
65
+ previousHash: contentHash(previousRawContent),
66
+ toolsAdded,
67
+ toolsRemoved,
68
+ toolsModified,
69
+ schemaChanges,
70
+ };
71
+ }
72
+ // ============================================
73
+ // Pack
74
+ // ============================================
75
+ export function pack(options) {
76
+ const { agentFile, outDir = "./dist", scope = "@agentdef" } = options;
77
+ // Read agent.json
78
+ const agentPath = resolve(agentFile);
79
+ if (!existsSync(agentPath)) {
80
+ throw new Error(`agent.json not found: ${agentPath}`);
81
+ }
82
+ const agentContent = readFileSync(agentPath, "utf-8");
83
+ const definition = parseJsonc(agentContent);
84
+ // Compute hash + version
85
+ const hash = contentHash(agentContent);
86
+ const version = `${definition.version || "1.0.0"}`;
87
+ const packageName = `${scope}/${definition.path}`;
88
+ // Create output directory
89
+ const packageDir = resolve(outDir, definition.path);
90
+ mkdirSync(packageDir, { recursive: true });
91
+ // Generate meta.json
92
+ const meta = {
93
+ hash,
94
+ serverVersion: definition.serverInfo?.version || definition.version || "1.0.0",
95
+ npmPackage: definition.serverSource,
96
+ toolCount: definition.tools.length,
97
+ sizeBytes: Buffer.byteLength(agentContent, "utf-8"),
98
+ generatedAt: definition.generatedAt || new Date().toISOString(),
99
+ sdkVersion: definition.sdkVersion || "0.21.0",
100
+ };
101
+ // Diff against previous if provided
102
+ if (options.previousAgentFile) {
103
+ const prevPath = resolve(options.previousAgentFile);
104
+ if (existsSync(prevPath)) {
105
+ const prevContent = readFileSync(prevPath, "utf-8");
106
+ const prevDef = parseJsonc(prevContent);
107
+ meta.changes = diffDefinitions(definition, prevDef, prevContent);
108
+ }
109
+ }
110
+ // Write agent.json
111
+ writeFileSync(resolve(packageDir, "agent.json"), agentContent);
112
+ // Write meta.json
113
+ writeFileSync(resolve(packageDir, "meta.json"), `${JSON.stringify(meta, null, 2)}\n`);
114
+ // Write package.json
115
+ const pkg = {
116
+ name: packageName,
117
+ version,
118
+ description: definition.description || `Agent definition for ${definition.name}`,
119
+ type: "module",
120
+ main: "index.js",
121
+ types: "index.d.ts",
122
+ exports: {
123
+ ".": {
124
+ import: "./index.js",
125
+ types: "./index.d.ts",
126
+ },
127
+ "./agent.json": "./agent.json",
128
+ "./meta.json": "./meta.json",
129
+ },
130
+ files: ["index.js", "index.d.ts", "agent.json", "meta.json"],
131
+ peerDependencies: {
132
+ "@slashfi/agents-sdk": ">=0.21.0",
133
+ },
134
+ keywords: ["agent", "mcp", "agentdef", definition.path],
135
+ license: "MIT",
136
+ repository: {
137
+ type: "git",
138
+ url: "https://github.com/slashfi/agents-sdk",
139
+ },
140
+ };
141
+ writeFileSync(resolve(packageDir, "package.json"), `${JSON.stringify(pkg, null, 2)}\n`);
142
+ // Write index.js
143
+ writeFileSync(resolve(packageDir, "index.js"), [
144
+ 'import { readFileSync } from "node:fs";',
145
+ 'import { fileURLToPath } from "node:url";',
146
+ 'import { dirname, resolve } from "node:path";',
147
+ "",
148
+ "const __dirname = dirname(fileURLToPath(import.meta.url));",
149
+ 'const definition = JSON.parse(readFileSync(resolve(__dirname, "agent.json"), "utf-8"));',
150
+ "export default definition;",
151
+ "export { definition };",
152
+ "",
153
+ ].join("\n"));
154
+ // Write index.d.ts
155
+ writeFileSync(resolve(packageDir, "index.d.ts"), [
156
+ 'import type { SerializedAgentDefinition } from "@slashfi/agents-sdk";',
157
+ "",
158
+ "declare const definition: SerializedAgentDefinition;",
159
+ "export default definition;",
160
+ "export { definition };",
161
+ "",
162
+ ].join("\n"));
163
+ return { packageDir, packageName, version, hash, meta };
164
+ }
165
+ /**
166
+ * Compare semver: returns true if `a` is older than `b`.
167
+ */
168
+ function isOlderVersion(a, b) {
169
+ const pa = a.split(".").map(Number);
170
+ const pb = b.split(".").map(Number);
171
+ for (let i = 0; i < 3; i++) {
172
+ if ((pa[i] || 0) < (pb[i] || 0))
173
+ return true;
174
+ if ((pa[i] || 0) > (pb[i] || 0))
175
+ return false;
176
+ }
177
+ return false; // equal
178
+ }
179
+ export function publish(options) {
180
+ const result = pack(options);
181
+ // Check if this version already exists in the registry
182
+ const registryArgs = options.registry ? ["--registry", options.registry] : [];
183
+ const viewProc = spawnSync("npm", ["view", `${result.packageName}`, "versions", "--json", ...registryArgs], { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
184
+ if (viewProc.status === 0 && viewProc.stdout) {
185
+ try {
186
+ const raw = JSON.parse(viewProc.stdout);
187
+ const existing = Array.isArray(raw) ? raw : [raw];
188
+ // E409 prevention: version already exists
189
+ if (existing.includes(result.version)) {
190
+ const versions = existing.join(", ");
191
+ throw new Error(`\x1b[31m\u2717 ${result.packageName}@${result.version} already exists in registry\x1b[0m\n\n Published versions: ${versions}\n Hint: bump the version in agent.json, or use --tag to publish a pre-release`);
192
+ }
193
+ // Out-of-order protection: warn if publishing older than latest
194
+ const latestViewProc = spawnSync("npm", ["view", `${result.packageName}`, "dist-tags.latest", ...registryArgs], { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
195
+ if (latestViewProc.status === 0 && latestViewProc.stdout) {
196
+ const latest = latestViewProc.stdout.trim();
197
+ if (latest && !options.tag && isOlderVersion(result.version, latest)) {
198
+ console.warn(`\x1b[33m\u26A0 Warning: publishing ${result.version} which is older than latest (${latest})\x1b[0m`);
199
+ console.warn(` This will move the "latest" tag from ${latest} to ${result.version}.`);
200
+ console.warn(" Use --tag <name> to publish without affecting latest.");
201
+ throw new Error(`Refusing to clobber latest tag. Use --tag <name> to publish ${result.version} alongside ${latest}.`);
202
+ }
203
+ }
204
+ }
205
+ catch (e) {
206
+ if (e instanceof Error && e.message.includes("already exists"))
207
+ throw e;
208
+ if (e instanceof Error && e.message.includes("Refusing to clobber"))
209
+ throw e;
210
+ // JSON parse error or other issue — continue with publish
211
+ }
212
+ }
213
+ const npmArgs = ["publish", result.packageDir];
214
+ npmArgs.push("--access", options.access || "public");
215
+ if (options.tag)
216
+ npmArgs.push("--tag", options.tag);
217
+ if (options.dryRun)
218
+ npmArgs.push("--dry-run");
219
+ if (options.registry)
220
+ npmArgs.push("--registry", options.registry);
221
+ console.log(`Publishing ${result.packageName}@${result.version} (hash: ${result.hash})`);
222
+ const proc = spawnSync("npm", npmArgs, {
223
+ stdio: ["pipe", "pipe", "pipe"],
224
+ encoding: "utf-8",
225
+ });
226
+ if (proc.status !== 0) {
227
+ const stderr = proc.stderr || "";
228
+ // Extract npm log path for debug hint
229
+ const logMatch = stderr.match(/complete log[^:]*:\s*(.+\.log)/i);
230
+ const logHint = logMatch
231
+ ? `\n Debug: cat ${logMatch[1].trim()} | tail -40`
232
+ : "";
233
+ // Parse npm error for better messages
234
+ if (stderr.includes("E409") || stderr.includes("already present")) {
235
+ throw new Error(`\x1b[31m\u2717 ${result.packageName}@${result.version} already exists in registry\x1b[0m\n\n` +
236
+ ` Hint: bump the version in agent.json, or use --tag to publish a pre-release${logHint}`);
237
+ }
238
+ if (stderr.includes("E401") || stderr.includes("authentication")) {
239
+ throw new Error(`\x1b[31m\u2717 Authentication failed\x1b[0m\n\n Run: npm login --scope=@agentdef\n Or set NPM_TOKEN in your environment${logHint}`);
240
+ }
241
+ if (stderr.includes("E403") || stderr.includes("Forbidden")) {
242
+ throw new Error(`\x1b[31m\u2717 Permission denied publishing ${result.packageName}\x1b[0m\n\n Make sure you have publish access to the @agentdef scope.\n Run: npm access ls-packages @agentdef${logHint}`);
243
+ }
244
+ // Fallback: show raw error
245
+ throw new Error(`npm publish failed (exit ${proc.status}):${logHint}\n${stderr}`);
246
+ }
247
+ return result;
248
+ }
249
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"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"}