@slashfi/agents-sdk 0.24.2 → 0.24.4
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/cjs/agent-definitions/auth.js +678 -0
- package/dist/cjs/agent-definitions/auth.js.map +1 -0
- package/dist/cjs/agent-definitions/integrations.js +1173 -0
- package/dist/cjs/agent-definitions/integrations.js.map +1 -0
- package/dist/cjs/agent-definitions/remote-registry.js +469 -0
- package/dist/cjs/agent-definitions/remote-registry.js.map +1 -0
- package/dist/cjs/agent-definitions/secrets.js +193 -0
- package/dist/cjs/agent-definitions/secrets.js.map +1 -0
- package/dist/cjs/agent-definitions/users.js +440 -0
- package/dist/cjs/agent-definitions/users.js.map +1 -0
- package/dist/cjs/build.js +162 -0
- package/dist/cjs/build.js.map +1 -0
- package/dist/cjs/callback/index.js +74 -0
- package/dist/cjs/callback/index.js.map +1 -0
- package/dist/cjs/client.js +193 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/codegen.js +1027 -0
- package/dist/cjs/codegen.js.map +1 -0
- package/dist/cjs/crypto.js +44 -0
- package/dist/cjs/crypto.js.map +1 -0
- package/dist/cjs/define-config.js +81 -0
- package/dist/cjs/define-config.js.map +1 -0
- package/dist/cjs/define.js +186 -0
- package/dist/cjs/define.js.map +1 -0
- package/dist/cjs/events.js +60 -0
- package/dist/cjs/events.js.map +1 -0
- package/dist/cjs/index.js +195 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/integration-interface.js +105 -0
- package/dist/cjs/integration-interface.js.map +1 -0
- package/dist/cjs/integrations-store.js +53 -0
- package/dist/cjs/integrations-store.js.map +1 -0
- package/dist/cjs/introspect.js +136 -0
- package/dist/cjs/introspect.js.map +1 -0
- package/dist/cjs/jsonc.js +74 -0
- package/dist/cjs/jsonc.js.map +1 -0
- package/dist/cjs/jwt.js +207 -0
- package/dist/cjs/jwt.js.map +1 -0
- package/dist/cjs/key-manager.js +161 -0
- package/dist/cjs/key-manager.js.map +1 -0
- package/dist/cjs/oidc-signin.js +141 -0
- package/dist/cjs/oidc-signin.js.map +1 -0
- package/dist/cjs/pack.js +256 -0
- package/dist/cjs/pack.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/registry-consumer.js +233 -0
- package/dist/cjs/registry-consumer.js.map +1 -0
- package/dist/cjs/registry.js +512 -0
- package/dist/cjs/registry.js.map +1 -0
- package/dist/cjs/secret-collection.js +42 -0
- package/dist/cjs/secret-collection.js.map +1 -0
- package/dist/cjs/serialized.js +45 -0
- package/dist/cjs/serialized.js.map +1 -0
- package/dist/cjs/server.js +974 -0
- package/dist/cjs/server.js.map +1 -0
- package/dist/cjs/test-utils/mock-oidc-server.js +99 -0
- package/dist/cjs/test-utils/mock-oidc-server.js.map +1 -0
- package/dist/cjs/types.js +8 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/validate.js +84 -0
- package/dist/cjs/validate.js.map +1 -0
- package/dist/registry-consumer.d.ts.map +1 -1
- package/dist/registry-consumer.js +1 -1
- package/dist/registry-consumer.js.map +1 -1
- package/package.json +13 -5
- package/src/registry-consumer.ts +3 -1
package/dist/cjs/pack.js
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ADK Pack
|
|
4
|
+
*
|
|
5
|
+
* Generates a publishable npm package from an agent.json file.
|
|
6
|
+
*
|
|
7
|
+
* Input: agent.json (SerializedAgentDefinition)
|
|
8
|
+
* Output: ready-to-publish directory with:
|
|
9
|
+
* - package.json
|
|
10
|
+
* - agent.json (copy)
|
|
11
|
+
* - meta.json (version metadata + diff)
|
|
12
|
+
* - index.js + index.d.ts (typed export)
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.pack = pack;
|
|
16
|
+
exports.publish = publish;
|
|
17
|
+
const node_child_process_1 = require("node:child_process");
|
|
18
|
+
const node_crypto_1 = require("node:crypto");
|
|
19
|
+
const node_fs_1 = require("node:fs");
|
|
20
|
+
const node_path_1 = require("node:path");
|
|
21
|
+
const jsonc_js_1 = require("./jsonc.js");
|
|
22
|
+
const validate_js_1 = require("./validate.js");
|
|
23
|
+
// ============================================
|
|
24
|
+
// Hash
|
|
25
|
+
// ============================================
|
|
26
|
+
function contentHash(content) {
|
|
27
|
+
return (0, node_crypto_1.createHash)("sha256").update(content).digest("hex").slice(0, 8);
|
|
28
|
+
}
|
|
29
|
+
// ============================================
|
|
30
|
+
// Diff
|
|
31
|
+
// ============================================
|
|
32
|
+
function diffDefinitions(current, previous, previousRawContent) {
|
|
33
|
+
const prevToolNames = new Set(previous.tools.map((t) => t.name));
|
|
34
|
+
const currToolNames = new Set(current.tools.map((t) => t.name));
|
|
35
|
+
const toolsAdded = current.tools
|
|
36
|
+
.filter((t) => !prevToolNames.has(t.name))
|
|
37
|
+
.map((t) => t.name);
|
|
38
|
+
const toolsRemoved = previous.tools
|
|
39
|
+
.filter((t) => !currToolNames.has(t.name))
|
|
40
|
+
.map((t) => t.name);
|
|
41
|
+
// Find modified tools (same name, different schema)
|
|
42
|
+
const toolsModified = [];
|
|
43
|
+
const schemaChanges = [];
|
|
44
|
+
const prevToolMap = new Map(previous.tools.map((t) => [t.name, t]));
|
|
45
|
+
for (const tool of current.tools) {
|
|
46
|
+
const prev = prevToolMap.get(tool.name);
|
|
47
|
+
if (!prev)
|
|
48
|
+
continue;
|
|
49
|
+
const currSchema = JSON.stringify(tool.inputSchema);
|
|
50
|
+
const prevSchema = JSON.stringify(prev.inputSchema);
|
|
51
|
+
if (currSchema !== prevSchema) {
|
|
52
|
+
toolsModified.push(tool.name);
|
|
53
|
+
// Generate human-readable schema change description
|
|
54
|
+
const currProps = Object.keys(tool.inputSchema.properties || {});
|
|
55
|
+
const prevProps = Object.keys(prev.inputSchema.properties || {});
|
|
56
|
+
const added = currProps.filter((p) => !prevProps.includes(p));
|
|
57
|
+
const removed = prevProps.filter((p) => !currProps.includes(p));
|
|
58
|
+
if (added.length > 0) {
|
|
59
|
+
schemaChanges.push(`${tool.name}: added properties: ${added.join(", ")}`);
|
|
60
|
+
}
|
|
61
|
+
if (removed.length > 0) {
|
|
62
|
+
schemaChanges.push(`${tool.name}: removed properties: ${removed.join(", ")}`);
|
|
63
|
+
}
|
|
64
|
+
if (added.length === 0 && removed.length === 0) {
|
|
65
|
+
schemaChanges.push(`${tool.name}: schema modified`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
previousHash: contentHash(previousRawContent),
|
|
71
|
+
toolsAdded,
|
|
72
|
+
toolsRemoved,
|
|
73
|
+
toolsModified,
|
|
74
|
+
schemaChanges,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// ============================================
|
|
78
|
+
// Pack
|
|
79
|
+
// ============================================
|
|
80
|
+
function pack(options) {
|
|
81
|
+
const { agentFile, outDir = "./dist", scope = "@agentdef" } = options;
|
|
82
|
+
// Read agent.json
|
|
83
|
+
const agentPath = (0, node_path_1.resolve)(agentFile);
|
|
84
|
+
if (!(0, node_fs_1.existsSync)(agentPath)) {
|
|
85
|
+
throw new Error(`agent.json not found: ${agentPath}`);
|
|
86
|
+
}
|
|
87
|
+
const agentContent = (0, node_fs_1.readFileSync)(agentPath, "utf-8");
|
|
88
|
+
const definition = (0, jsonc_js_1.parseJsonc)(agentContent);
|
|
89
|
+
// Validate the definition schema
|
|
90
|
+
(0, validate_js_1.assertValidDefinition)(definition, agentPath);
|
|
91
|
+
// Compute hash + version
|
|
92
|
+
const hash = contentHash(agentContent);
|
|
93
|
+
const version = `${definition.version || "1.0.0"}`;
|
|
94
|
+
const packageName = `${scope}/${definition.path}`;
|
|
95
|
+
// Create output directory
|
|
96
|
+
const packageDir = (0, node_path_1.resolve)(outDir, definition.path);
|
|
97
|
+
(0, node_fs_1.mkdirSync)(packageDir, { recursive: true });
|
|
98
|
+
// Generate meta.json
|
|
99
|
+
const meta = {
|
|
100
|
+
hash,
|
|
101
|
+
serverVersion: definition.serverInfo?.version || definition.version || "1.0.0",
|
|
102
|
+
npmPackage: definition.serverSource,
|
|
103
|
+
toolCount: definition.tools.length,
|
|
104
|
+
sizeBytes: Buffer.byteLength(agentContent, "utf-8"),
|
|
105
|
+
generatedAt: definition.generatedAt || new Date().toISOString(),
|
|
106
|
+
sdkVersion: definition.sdkVersion || "0.21.0",
|
|
107
|
+
};
|
|
108
|
+
// Diff against previous if provided
|
|
109
|
+
if (options.previousAgentFile) {
|
|
110
|
+
const prevPath = (0, node_path_1.resolve)(options.previousAgentFile);
|
|
111
|
+
if ((0, node_fs_1.existsSync)(prevPath)) {
|
|
112
|
+
const prevContent = (0, node_fs_1.readFileSync)(prevPath, "utf-8");
|
|
113
|
+
const prevDef = (0, jsonc_js_1.parseJsonc)(prevContent);
|
|
114
|
+
meta.changes = diffDefinitions(definition, prevDef, prevContent);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Write agent.json
|
|
118
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.resolve)(packageDir, "agent.json"), agentContent);
|
|
119
|
+
// Write meta.json
|
|
120
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.resolve)(packageDir, "meta.json"), `${JSON.stringify(meta, null, 2)}\n`);
|
|
121
|
+
// Write package.json
|
|
122
|
+
const pkg = {
|
|
123
|
+
name: packageName,
|
|
124
|
+
version,
|
|
125
|
+
description: definition.description || `Agent definition for ${definition.name}`,
|
|
126
|
+
type: "module",
|
|
127
|
+
main: "index.js",
|
|
128
|
+
types: "index.d.ts",
|
|
129
|
+
exports: {
|
|
130
|
+
".": {
|
|
131
|
+
import: "./index.js",
|
|
132
|
+
types: "./index.d.ts",
|
|
133
|
+
},
|
|
134
|
+
"./agent.json": "./agent.json",
|
|
135
|
+
"./meta.json": "./meta.json",
|
|
136
|
+
},
|
|
137
|
+
files: ["index.js", "index.d.ts", "agent.json", "meta.json"],
|
|
138
|
+
peerDependencies: {
|
|
139
|
+
"@slashfi/agents-sdk": ">=0.21.0",
|
|
140
|
+
},
|
|
141
|
+
keywords: ["agent", "mcp", "agentdef", definition.path],
|
|
142
|
+
license: "MIT",
|
|
143
|
+
repository: {
|
|
144
|
+
type: "git",
|
|
145
|
+
url: "https://github.com/slashfi/agents-sdk",
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.resolve)(packageDir, "package.json"), `${JSON.stringify(pkg, null, 2)}\n`);
|
|
149
|
+
// Write index.js
|
|
150
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.resolve)(packageDir, "index.js"), [
|
|
151
|
+
'import { readFileSync } from "node:fs";',
|
|
152
|
+
'import { fileURLToPath } from "node:url";',
|
|
153
|
+
'import { dirname, resolve } from "node:path";',
|
|
154
|
+
"",
|
|
155
|
+
"const __dirname = dirname(fileURLToPath(import.meta.url));",
|
|
156
|
+
'const definition = JSON.parse(readFileSync(resolve(__dirname, "agent.json"), "utf-8"));',
|
|
157
|
+
"export default definition;",
|
|
158
|
+
"export { definition };",
|
|
159
|
+
"",
|
|
160
|
+
].join("\n"));
|
|
161
|
+
// Write index.d.ts
|
|
162
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.resolve)(packageDir, "index.d.ts"), [
|
|
163
|
+
'import type { SerializedAgentDefinition } from "@slashfi/agents-sdk";',
|
|
164
|
+
"",
|
|
165
|
+
"declare const definition: SerializedAgentDefinition;",
|
|
166
|
+
"export default definition;",
|
|
167
|
+
"export { definition };",
|
|
168
|
+
"",
|
|
169
|
+
].join("\n"));
|
|
170
|
+
return { packageDir, packageName, version, hash, meta };
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Compare semver: returns true if `a` is older than `b`.
|
|
174
|
+
*/
|
|
175
|
+
function isOlderVersion(a, b) {
|
|
176
|
+
const pa = a.split(".").map(Number);
|
|
177
|
+
const pb = b.split(".").map(Number);
|
|
178
|
+
for (let i = 0; i < 3; i++) {
|
|
179
|
+
if ((pa[i] || 0) < (pb[i] || 0))
|
|
180
|
+
return true;
|
|
181
|
+
if ((pa[i] || 0) > (pb[i] || 0))
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
return false; // equal
|
|
185
|
+
}
|
|
186
|
+
function publish(options) {
|
|
187
|
+
const result = pack(options);
|
|
188
|
+
// Check if this version already exists in the registry
|
|
189
|
+
const registryArgs = options.registry ? ["--registry", options.registry] : [];
|
|
190
|
+
const viewProc = (0, node_child_process_1.spawnSync)("npm", ["view", `${result.packageName}`, "versions", "--json", ...registryArgs], { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
191
|
+
if (viewProc.status === 0 && viewProc.stdout) {
|
|
192
|
+
try {
|
|
193
|
+
const raw = JSON.parse(viewProc.stdout);
|
|
194
|
+
const existing = Array.isArray(raw) ? raw : [raw];
|
|
195
|
+
// E409 prevention: version already exists
|
|
196
|
+
if (existing.includes(result.version)) {
|
|
197
|
+
const versions = existing.join(", ");
|
|
198
|
+
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`);
|
|
199
|
+
}
|
|
200
|
+
// Out-of-order protection: warn if publishing older than latest
|
|
201
|
+
const latestViewProc = (0, node_child_process_1.spawnSync)("npm", ["view", `${result.packageName}`, "dist-tags.latest", ...registryArgs], { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
202
|
+
if (latestViewProc.status === 0 && latestViewProc.stdout) {
|
|
203
|
+
const latest = latestViewProc.stdout.trim();
|
|
204
|
+
if (latest && !options.tag && isOlderVersion(result.version, latest)) {
|
|
205
|
+
console.warn(`\x1b[33m\u26A0 Warning: publishing ${result.version} which is older than latest (${latest})\x1b[0m`);
|
|
206
|
+
console.warn(` This will move the "latest" tag from ${latest} to ${result.version}.`);
|
|
207
|
+
console.warn(" Use --tag <name> to publish without affecting latest.");
|
|
208
|
+
throw new Error(`Refusing to clobber latest tag. Use --tag <name> to publish ${result.version} alongside ${latest}.`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch (e) {
|
|
213
|
+
if (e instanceof Error && e.message.includes("already exists"))
|
|
214
|
+
throw e;
|
|
215
|
+
if (e instanceof Error && e.message.includes("Refusing to clobber"))
|
|
216
|
+
throw e;
|
|
217
|
+
// JSON parse error or other issue — continue with publish
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const npmArgs = ["publish", result.packageDir];
|
|
221
|
+
npmArgs.push("--access", options.access || "public");
|
|
222
|
+
if (options.tag)
|
|
223
|
+
npmArgs.push("--tag", options.tag);
|
|
224
|
+
if (options.dryRun)
|
|
225
|
+
npmArgs.push("--dry-run");
|
|
226
|
+
if (options.registry)
|
|
227
|
+
npmArgs.push("--registry", options.registry);
|
|
228
|
+
console.log(`Publishing ${result.packageName}@${result.version} (hash: ${result.hash})`);
|
|
229
|
+
const proc = (0, node_child_process_1.spawnSync)("npm", npmArgs, {
|
|
230
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
231
|
+
encoding: "utf-8",
|
|
232
|
+
});
|
|
233
|
+
if (proc.status !== 0) {
|
|
234
|
+
const stderr = proc.stderr || "";
|
|
235
|
+
// Extract npm log path for debug hint
|
|
236
|
+
const logMatch = stderr.match(/complete log[^:]*:\s*(.+\.log)/i);
|
|
237
|
+
const logHint = logMatch
|
|
238
|
+
? `\n Debug: cat ${logMatch[1].trim()} | tail -40`
|
|
239
|
+
: "";
|
|
240
|
+
// Parse npm error for better messages
|
|
241
|
+
if (stderr.includes("E409") || stderr.includes("already present")) {
|
|
242
|
+
throw new Error(`\x1b[31m\u2717 ${result.packageName}@${result.version} already exists in registry\x1b[0m\n\n` +
|
|
243
|
+
` Hint: bump the version in agent.json, or use --tag to publish a pre-release${logHint}`);
|
|
244
|
+
}
|
|
245
|
+
if (stderr.includes("E401") || stderr.includes("authentication")) {
|
|
246
|
+
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}`);
|
|
247
|
+
}
|
|
248
|
+
if (stderr.includes("E403") || stderr.includes("Forbidden")) {
|
|
249
|
+
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}`);
|
|
250
|
+
}
|
|
251
|
+
// Fallback: show raw error
|
|
252
|
+
throw new Error(`npm publish failed (exit ${proc.status}):${logHint}\n${stderr}`);
|
|
253
|
+
}
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=pack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/pack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Registry Consumer — Connects to registries and resolves refs.
|
|
4
|
+
*
|
|
5
|
+
* The consumer reads a `ConsumerConfig`, discovers registries via
|
|
6
|
+
* `/.well-known/configuration`, resolves refs to agent definitions,
|
|
7
|
+
* and provides a unified interface for calling tools across all connected agents.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { createRegistryConsumer, defineConfig } from '@slashfi/agents-sdk';
|
|
12
|
+
*
|
|
13
|
+
* const config = defineConfig({
|
|
14
|
+
* registries: ['https://registry.slash.com'],
|
|
15
|
+
* refs: ['notion', { ref: 'postgres', as: 'prod-db', config: { url: '...' } }],
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* const consumer = await createRegistryConsumer(config);
|
|
19
|
+
*
|
|
20
|
+
* // List all available agents across registries
|
|
21
|
+
* const available = await consumer.list();
|
|
22
|
+
*
|
|
23
|
+
* // List configured refs
|
|
24
|
+
* const refs = consumer.refs();
|
|
25
|
+
*
|
|
26
|
+
* // Call a tool on a ref
|
|
27
|
+
* const result = await consumer.call('notion', 'search', { query: 'meeting notes' });
|
|
28
|
+
*
|
|
29
|
+
* // Resolve secrets in config values
|
|
30
|
+
* const dbUrl = await consumer.resolveSecret('https://twin.slash.com/secrets/crdb-url');
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.createRegistryConsumer = createRegistryConsumer;
|
|
35
|
+
const define_config_js_1 = require("./define-config.js");
|
|
36
|
+
// ============================================
|
|
37
|
+
// Secret Resolver
|
|
38
|
+
// ============================================
|
|
39
|
+
/** Resolves secret URLs to their values */
|
|
40
|
+
const promises_1 = require("node:fs/promises");
|
|
41
|
+
/**
|
|
42
|
+
* Default secret resolver — dispatches on URI scheme:
|
|
43
|
+
* file:// → read from filesystem
|
|
44
|
+
* env:// → read from environment variable
|
|
45
|
+
* https:// → HTTP GET with optional bearer token
|
|
46
|
+
* http:// → HTTP GET (dev only)
|
|
47
|
+
*/
|
|
48
|
+
async function defaultSecretResolver(uri, auth) {
|
|
49
|
+
const parsed = new URL(uri);
|
|
50
|
+
switch (parsed.protocol) {
|
|
51
|
+
case "file:": {
|
|
52
|
+
const filePath = parsed.pathname;
|
|
53
|
+
return (await (0, promises_1.readFile)(filePath, "utf-8")).trim();
|
|
54
|
+
}
|
|
55
|
+
case "env:": {
|
|
56
|
+
// env://VAR_NAME or env:///VAR_NAME
|
|
57
|
+
const varName = parsed.hostname || parsed.pathname.replace(/^\//, "");
|
|
58
|
+
const value = process.env[varName];
|
|
59
|
+
if (!value) {
|
|
60
|
+
throw new Error(`Environment variable not set: ${varName}`);
|
|
61
|
+
}
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
case "https:":
|
|
65
|
+
case "http:": {
|
|
66
|
+
const headers = {};
|
|
67
|
+
if (auth?.token) {
|
|
68
|
+
headers.Authorization = `Bearer ${auth.token}`;
|
|
69
|
+
}
|
|
70
|
+
const res = await fetch(uri, { headers });
|
|
71
|
+
if (!res.ok) {
|
|
72
|
+
throw new Error(`Failed to resolve secret ${uri}: ${res.status} ${res.statusText}`);
|
|
73
|
+
}
|
|
74
|
+
return res.text();
|
|
75
|
+
}
|
|
76
|
+
default:
|
|
77
|
+
throw new Error(`Unsupported secret URI scheme: ${parsed.protocol}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create a registry consumer from a config.
|
|
82
|
+
*
|
|
83
|
+
* The consumer connects to registries, discovers available agents,
|
|
84
|
+
* and provides a unified interface for calling tools.
|
|
85
|
+
*/
|
|
86
|
+
async function createRegistryConsumer(config, options = {}) {
|
|
87
|
+
const fetchFn = options.fetch ?? globalThis.fetch;
|
|
88
|
+
const resolveSecretFn = options.resolveSecret ?? defaultSecretResolver;
|
|
89
|
+
// Normalize registries
|
|
90
|
+
const resolvedRegistries = (config.registries ?? []).map(define_config_js_1.normalizeRegistry);
|
|
91
|
+
// Normalize refs
|
|
92
|
+
const resolvedRefs = (config.refs ?? []).map((entry) => {
|
|
93
|
+
const normalized = (0, define_config_js_1.normalizeRef)(entry);
|
|
94
|
+
return {
|
|
95
|
+
ref: normalized.ref,
|
|
96
|
+
name: normalized.name,
|
|
97
|
+
registry: normalized.registry ?? resolvedRegistries[0]?.url ?? "unknown",
|
|
98
|
+
config: normalized.config,
|
|
99
|
+
};
|
|
100
|
+
});
|
|
101
|
+
// Cache for registry configurations
|
|
102
|
+
const discoveryCache = new Map();
|
|
103
|
+
// Discover a registry
|
|
104
|
+
async function discover(registryUrl) {
|
|
105
|
+
const cached = discoveryCache.get(registryUrl);
|
|
106
|
+
if (cached)
|
|
107
|
+
return cached;
|
|
108
|
+
const url = `${registryUrl.replace(/\/$/, "")}/.well-known/configuration`;
|
|
109
|
+
const res = await fetchFn(url);
|
|
110
|
+
if (!res.ok) {
|
|
111
|
+
throw new Error(`Failed to discover registry ${registryUrl}: ${res.status}`);
|
|
112
|
+
}
|
|
113
|
+
const configuration = (await res.json());
|
|
114
|
+
discoveryCache.set(registryUrl, configuration);
|
|
115
|
+
return configuration;
|
|
116
|
+
}
|
|
117
|
+
// List agents from a single registry
|
|
118
|
+
async function listFromRegistry(registry) {
|
|
119
|
+
const configuration = await discover(registry.url);
|
|
120
|
+
const listUrl = configuration.agents_endpoint ??
|
|
121
|
+
`${registry.url.replace(/\/$/, "")}/list`;
|
|
122
|
+
const headers = {};
|
|
123
|
+
if (registry.auth.type === "bearer" && "token" in registry.auth) {
|
|
124
|
+
headers.Authorization = `Bearer ${registry.auth.token}`;
|
|
125
|
+
}
|
|
126
|
+
else if (options.token) {
|
|
127
|
+
headers.Authorization = `Bearer ${options.token}`;
|
|
128
|
+
}
|
|
129
|
+
const res = await fetchFn(listUrl, { headers });
|
|
130
|
+
if (!res.ok) {
|
|
131
|
+
throw new Error(`Failed to list agents from ${registry.url}: ${res.status}`);
|
|
132
|
+
}
|
|
133
|
+
const agents = (await res.json());
|
|
134
|
+
return agents.map((agent) => ({
|
|
135
|
+
...agent,
|
|
136
|
+
publisher: registry.publisher,
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
139
|
+
// Call a tool via a registry
|
|
140
|
+
async function callTool(registry, agentPath, tool, params) {
|
|
141
|
+
const configuration = await discover(registry.url);
|
|
142
|
+
const callUrl = configuration.call_endpoint ?? `${registry.url.replace(/\/$/, "")}/call`;
|
|
143
|
+
const headers = {
|
|
144
|
+
"Content-Type": "application/json",
|
|
145
|
+
};
|
|
146
|
+
if (registry.auth.type === "bearer" && "token" in registry.auth) {
|
|
147
|
+
headers.Authorization = `Bearer ${registry.auth.token}`;
|
|
148
|
+
}
|
|
149
|
+
else if (options.token) {
|
|
150
|
+
headers.Authorization = `Bearer ${options.token}`;
|
|
151
|
+
}
|
|
152
|
+
const res = await fetchFn(callUrl, {
|
|
153
|
+
method: "POST",
|
|
154
|
+
headers,
|
|
155
|
+
body: JSON.stringify({ path: agentPath, tool, params }),
|
|
156
|
+
});
|
|
157
|
+
if (!res.ok) {
|
|
158
|
+
const text = await res.text().catch(() => "unknown error");
|
|
159
|
+
throw new Error(`Tool call failed (${registry.url}/${agentPath}/${tool}): ${res.status} ${text}`);
|
|
160
|
+
}
|
|
161
|
+
return res.json();
|
|
162
|
+
}
|
|
163
|
+
// Build the consumer
|
|
164
|
+
const consumer = {
|
|
165
|
+
async list() {
|
|
166
|
+
const results = await Promise.allSettled(resolvedRegistries.map(listFromRegistry));
|
|
167
|
+
return results.flatMap((r) => (r.status === "fulfilled" ? r.value : []));
|
|
168
|
+
},
|
|
169
|
+
refs() {
|
|
170
|
+
return resolvedRefs;
|
|
171
|
+
},
|
|
172
|
+
registries() {
|
|
173
|
+
return resolvedRegistries;
|
|
174
|
+
},
|
|
175
|
+
async call(refName, tool, params = {}) {
|
|
176
|
+
const ref = resolvedRefs.find((r) => r.name === refName);
|
|
177
|
+
if (!ref) {
|
|
178
|
+
throw new Error(`Ref "${refName}" not found in config. Available: ${resolvedRefs.map((r) => r.name).join(", ")}`);
|
|
179
|
+
}
|
|
180
|
+
const registry = resolvedRegistries.find((r) => r.url === ref.registry || r.name === ref.registry);
|
|
181
|
+
if (!registry) {
|
|
182
|
+
throw new Error(`Registry "${ref.registry}" not found for ref "${refName}"`);
|
|
183
|
+
}
|
|
184
|
+
return callTool(registry, ref.ref, tool, params);
|
|
185
|
+
},
|
|
186
|
+
discover,
|
|
187
|
+
async resolveSecret(url) {
|
|
188
|
+
return resolveSecretFn(url, { token: options.token });
|
|
189
|
+
},
|
|
190
|
+
async resolveConfig(config) {
|
|
191
|
+
const resolved = {};
|
|
192
|
+
for (const [key, value] of Object.entries(config)) {
|
|
193
|
+
if ((0, define_config_js_1.isSecretUrl)(value)) {
|
|
194
|
+
resolved[key] = await resolveSecretFn(value, {
|
|
195
|
+
token: options.token,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
resolved[key] = value;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return resolved;
|
|
203
|
+
},
|
|
204
|
+
index() {
|
|
205
|
+
return {
|
|
206
|
+
resolvedAt: new Date().toISOString(),
|
|
207
|
+
sourceHash: simpleHash(JSON.stringify(config)),
|
|
208
|
+
registries: resolvedRegistries,
|
|
209
|
+
refs: resolvedRefs,
|
|
210
|
+
meta: config.meta,
|
|
211
|
+
};
|
|
212
|
+
},
|
|
213
|
+
async available() {
|
|
214
|
+
const all = await consumer.list();
|
|
215
|
+
const configuredRefs = new Set(resolvedRefs.map((r) => r.ref));
|
|
216
|
+
return all.filter((a) => !configuredRefs.has(a.path));
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
return consumer;
|
|
220
|
+
}
|
|
221
|
+
// ============================================
|
|
222
|
+
// Utilities
|
|
223
|
+
// ============================================
|
|
224
|
+
/** Simple hash for cache invalidation (not cryptographic) */
|
|
225
|
+
function simpleHash(str) {
|
|
226
|
+
let hash = 0;
|
|
227
|
+
for (let i = 0; i < str.length; i++) {
|
|
228
|
+
const char = str.charCodeAt(i);
|
|
229
|
+
hash = ((hash << 5) - hash + char) | 0;
|
|
230
|
+
}
|
|
231
|
+
return Math.abs(hash).toString(36);
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=registry-consumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-consumer.js","sourceRoot":"","sources":["../../src/registry-consumer.ts"],"names":[],"mappings":"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"}
|