@armoriq/sdk-dev 0.6.10 → 0.8.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 +168 -1
- package/dist/_version.d.ts +1 -1
- package/dist/_version.d.ts.map +1 -1
- package/dist/_version.js +1 -1
- package/dist/_version.js.map +1 -1
- package/dist/cli/commands/auth.d.ts +12 -0
- package/dist/cli/commands/auth.d.ts.map +1 -1
- package/dist/cli/commands/auth.js +522 -49
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/client.d.ts +8 -15
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +20 -18
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +0 -17
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -19
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -14
- package/dist/index.js.map +1 -1
- package/dist/integrations/google_adk.d.ts +155 -7
- package/dist/integrations/google_adk.d.ts.map +1 -1
- package/dist/integrations/google_adk.js +727 -46
- package/dist/integrations/google_adk.js.map +1 -1
- package/dist/integrations/langchain.d.ts +48 -2
- package/dist/integrations/langchain.d.ts.map +1 -1
- package/dist/integrations/langchain.js +528 -33
- package/dist/integrations/langchain.js.map +1 -1
- package/dist/integrations/strands.d.ts +65 -1
- package/dist/integrations/strands.d.ts.map +1 -1
- package/dist/integrations/strands.js +456 -36
- package/dist/integrations/strands.js.map +1 -1
- package/dist/models.d.ts +2 -2
- package/dist/models.d.ts.map +1 -1
- package/dist/observability/content-capture.d.ts +103 -0
- package/dist/observability/content-capture.d.ts.map +1 -0
- package/dist/observability/content-capture.js +423 -0
- package/dist/observability/content-capture.js.map +1 -0
- package/dist/observability/index.d.ts +6 -7
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +18 -27
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/otel-config.d.ts +47 -0
- package/dist/observability/otel-config.d.ts.map +1 -0
- package/dist/observability/otel-config.js +268 -0
- package/dist/observability/otel-config.js.map +1 -0
- package/dist/observability/otel-export-ceiling.d.ts +96 -0
- package/dist/observability/otel-export-ceiling.d.ts.map +1 -0
- package/dist/observability/otel-export-ceiling.js +271 -0
- package/dist/observability/otel-export-ceiling.js.map +1 -0
- package/dist/observability/otel-runtime.d.ts +103 -0
- package/dist/observability/otel-runtime.d.ts.map +1 -0
- package/dist/observability/otel-runtime.js +680 -0
- package/dist/observability/otel-runtime.js.map +1 -0
- package/dist/observability/otel-session.d.ts +168 -0
- package/dist/observability/otel-session.d.ts.map +1 -0
- package/dist/observability/otel-session.js +630 -0
- package/dist/observability/otel-session.js.map +1 -0
- package/dist/observability/otel-shutdown.d.ts +17 -0
- package/dist/observability/otel-shutdown.d.ts.map +1 -0
- package/dist/observability/otel-shutdown.js +54 -0
- package/dist/observability/otel-shutdown.js.map +1 -0
- package/dist/observability/policy-lease.d.ts +22 -0
- package/dist/observability/policy-lease.d.ts.map +1 -0
- package/dist/observability/policy-lease.js +102 -0
- package/dist/observability/policy-lease.js.map +1 -0
- package/dist/plan_builder.d.ts +5 -4
- package/dist/plan_builder.d.ts.map +1 -1
- package/dist/plan_builder.js +14 -15
- package/dist/plan_builder.js.map +1 -1
- package/dist/session.d.ts +61 -93
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +388 -804
- package/dist/session.js.map +1 -1
- package/dist/token_usage.d.ts +11 -18
- package/dist/token_usage.d.ts.map +1 -1
- package/dist/token_usage.js +29 -94
- package/dist/token_usage.js.map +1 -1
- package/dist/tool_name.d.ts +18 -0
- package/dist/tool_name.d.ts.map +1 -0
- package/dist/tool_name.js +29 -0
- package/dist/tool_name.js.map +1 -0
- package/dist/tool_push.d.ts +28 -0
- package/dist/tool_push.d.ts.map +1 -0
- package/dist/tool_push.js +151 -0
- package/dist/tool_push.js.map +1 -0
- package/dist/tool_registry.d.ts +100 -0
- package/dist/tool_registry.d.ts.map +1 -0
- package/dist/tool_registry.js +440 -0
- package/dist/tool_registry.js.map +1 -0
- package/dist/tool_schema.d.ts +22 -0
- package/dist/tool_schema.d.ts.map +1 -0
- package/dist/tool_schema.js +163 -0
- package/dist/tool_schema.js.map +1 -0
- package/package.json +12 -7
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToolRegistry = exports.SNAPSHOT_HASH_PREFIX = void 0;
|
|
4
|
+
exports.snapshotHash = snapshotHash;
|
|
5
|
+
exports.defaultToolRegistry = defaultToolRegistry;
|
|
6
|
+
exports.agentKeyFor = agentKeyFor;
|
|
7
|
+
exports.registerForClient = registerForClient;
|
|
8
|
+
exports.cachedServerNames = cachedServerNames;
|
|
9
|
+
exports.knownServerNames = knownServerNames;
|
|
10
|
+
exports.cachedToolMap = cachedToolMap;
|
|
11
|
+
exports.knownToolMap = knownToolMap;
|
|
12
|
+
exports.mcpBackedByName = mcpBackedByName;
|
|
13
|
+
exports.observeForClient = observeForClient;
|
|
14
|
+
exports.geminiSchemaToJsonSchema = geminiSchemaToJsonSchema;
|
|
15
|
+
exports.declarationsFromAdkAgent = declarationsFromAdkAgent;
|
|
16
|
+
exports.declarationsFromStrandsAgent = declarationsFromStrandsAgent;
|
|
17
|
+
exports.declarationsFromOpenAiTools = declarationsFromOpenAiTools;
|
|
18
|
+
exports.declarationsFromLangChainTools = declarationsFromLangChainTools;
|
|
19
|
+
/**
|
|
20
|
+
* What this process declares to the tool inventory. Adapters fill the registry
|
|
21
|
+
* from their model-call hooks; `tool_push` sends a snapshot of it to conmap. Tools that reach the agent through an MCP server are listed
|
|
22
|
+
* by server and never expanded: the backend probes those servers itself.
|
|
23
|
+
*/
|
|
24
|
+
const crypto_1 = require("crypto");
|
|
25
|
+
const _version_1 = require("./_version");
|
|
26
|
+
const tool_name_1 = require("./tool_name");
|
|
27
|
+
const tool_schema_1 = require("./tool_schema");
|
|
28
|
+
function toWire(d) {
|
|
29
|
+
const entry = {
|
|
30
|
+
name: d.name,
|
|
31
|
+
description: d.description ?? '',
|
|
32
|
+
schemaSource: d.schemaSource,
|
|
33
|
+
schemaHash: (0, tool_schema_1.schemaHash)(d.inputSchema ?? null),
|
|
34
|
+
};
|
|
35
|
+
if (d.inputSchema !== undefined && d.inputSchema !== null)
|
|
36
|
+
entry.inputSchema = d.inputSchema;
|
|
37
|
+
if (d.annotations && Object.keys(d.annotations).length)
|
|
38
|
+
entry.annotations = d.annotations;
|
|
39
|
+
return entry;
|
|
40
|
+
}
|
|
41
|
+
exports.SNAPSHOT_HASH_PREFIX = 'v1:sha256:';
|
|
42
|
+
/** `v1:sha256` over sorted `name:schemaHash` lines. Descriptions are not part of it. */
|
|
43
|
+
function snapshotHash(tools) {
|
|
44
|
+
const lines = [...tools]
|
|
45
|
+
.map((t) => `${t.name}:${t.schemaHash ?? 'none'}`)
|
|
46
|
+
.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
47
|
+
return exports.SNAPSHOT_HASH_PREFIX + (0, crypto_1.createHash)('sha256').update(lines.join('\n'), 'utf8').digest('hex');
|
|
48
|
+
}
|
|
49
|
+
class ToolRegistry {
|
|
50
|
+
tools = new Map();
|
|
51
|
+
servers = new Map();
|
|
52
|
+
hashes = new Map();
|
|
53
|
+
register(agentKey, tools, mcpServers = []) {
|
|
54
|
+
this.hashes.delete(agentKey);
|
|
55
|
+
const bucket = this.tools.get(agentKey) ?? new Map();
|
|
56
|
+
for (const t of tools) {
|
|
57
|
+
const current = bucket.get(t.name);
|
|
58
|
+
// A declaration with a schema beats a names-only observation.
|
|
59
|
+
if (!current || current.schemaSource === 'none')
|
|
60
|
+
bucket.set(t.name, t);
|
|
61
|
+
}
|
|
62
|
+
this.tools.set(agentKey, bucket);
|
|
63
|
+
const servers = this.servers.get(agentKey) ?? new Map();
|
|
64
|
+
for (const s of mcpServers)
|
|
65
|
+
if (!servers.has(s.url || s.name))
|
|
66
|
+
servers.set(s.url || s.name, s);
|
|
67
|
+
this.servers.set(agentKey, servers);
|
|
68
|
+
}
|
|
69
|
+
/** A tool ran that nothing declared: record the name with no schema. Server-prefixed names belong to the server. */
|
|
70
|
+
observe(agentKey, name, serverNames = [], toolMap = {}) {
|
|
71
|
+
if (!name || name in toolMap || mcpBackedByName(name, serverNames))
|
|
72
|
+
return;
|
|
73
|
+
this.hashes.delete(agentKey);
|
|
74
|
+
const bucket = this.tools.get(agentKey) ?? new Map();
|
|
75
|
+
if (!bucket.has(name))
|
|
76
|
+
bucket.set(name, { name, schemaSource: 'none' });
|
|
77
|
+
this.tools.set(agentKey, bucket);
|
|
78
|
+
}
|
|
79
|
+
clear(agentKey) {
|
|
80
|
+
if (agentKey === undefined) {
|
|
81
|
+
this.tools.clear();
|
|
82
|
+
this.servers.clear();
|
|
83
|
+
this.hashes.clear();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.tools.delete(agentKey);
|
|
87
|
+
this.servers.delete(agentKey);
|
|
88
|
+
this.hashes.delete(agentKey);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/** An empty set is never pushed; an empty snapshot would stale every declared row. */
|
|
92
|
+
hasTools(agentKey) {
|
|
93
|
+
return (this.tools.get(agentKey)?.size ?? 0) > 0;
|
|
94
|
+
}
|
|
95
|
+
/** Contract §4 fingerprint of one agent's tools; cached until the set changes. */
|
|
96
|
+
snapshotHash(agentKey) {
|
|
97
|
+
const cached = this.hashes.get(agentKey);
|
|
98
|
+
if (cached !== undefined)
|
|
99
|
+
return cached;
|
|
100
|
+
const value = snapshotHash([...(this.tools.get(agentKey)?.values() ?? [])].map((d) => ({
|
|
101
|
+
name: d.name,
|
|
102
|
+
schemaHash: (0, tool_schema_1.schemaHash)(d.inputSchema ?? null),
|
|
103
|
+
})));
|
|
104
|
+
this.hashes.set(agentKey, value);
|
|
105
|
+
return value;
|
|
106
|
+
}
|
|
107
|
+
/** The `POST /iap/sdk/tools` body for one agent (contract §2). */
|
|
108
|
+
pushBody(agentKey) {
|
|
109
|
+
const snap = this.snapshot(agentKey);
|
|
110
|
+
return {
|
|
111
|
+
contract: 1,
|
|
112
|
+
agent: agentKey,
|
|
113
|
+
sdk: snap.sdk,
|
|
114
|
+
snapshotHash: snapshotHash(snap.tools),
|
|
115
|
+
tools: snap.tools,
|
|
116
|
+
mcpServers: snap.mcpServers,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/** One agent's tools, or a union tagged per entry when several agents share a process. */
|
|
120
|
+
snapshot(agentKey) {
|
|
121
|
+
const keys = agentKey
|
|
122
|
+
? [agentKey]
|
|
123
|
+
: [...new Set([...this.tools.keys(), ...this.servers.keys()])].sort();
|
|
124
|
+
const tools = [];
|
|
125
|
+
const servers = new Map();
|
|
126
|
+
for (const k of keys) {
|
|
127
|
+
const decls = [...(this.tools.get(k)?.values() ?? [])].sort((a, b) => a.name.localeCompare(b.name));
|
|
128
|
+
for (const d of decls) {
|
|
129
|
+
const entry = toWire(d);
|
|
130
|
+
if (keys.length > 1)
|
|
131
|
+
entry.agent = k;
|
|
132
|
+
tools.push(entry);
|
|
133
|
+
}
|
|
134
|
+
for (const [id, s] of this.servers.get(k) ?? [])
|
|
135
|
+
servers.set(id, s);
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
agent: agentKey ?? (keys.length === 1 ? keys[0] : null),
|
|
139
|
+
sdk: `typescript@${_version_1.VERSION}`,
|
|
140
|
+
tools,
|
|
141
|
+
mcpServers: [...servers.values()],
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.ToolRegistry = ToolRegistry;
|
|
146
|
+
const DEFAULT = new ToolRegistry();
|
|
147
|
+
function defaultToolRegistry() {
|
|
148
|
+
return DEFAULT;
|
|
149
|
+
}
|
|
150
|
+
/** The registry key for a client: its agent id, when it has a real one. */
|
|
151
|
+
function agentKeyFor(client) {
|
|
152
|
+
const key = client?.agentId;
|
|
153
|
+
if (typeof key !== 'string' || !key || key === '__sdk_multiuser__')
|
|
154
|
+
return null;
|
|
155
|
+
return key;
|
|
156
|
+
}
|
|
157
|
+
/** Never throws: a registry problem must not stop an agent from running. */
|
|
158
|
+
function registerForClient(client, tools, mcpServers = []) {
|
|
159
|
+
try {
|
|
160
|
+
const key = agentKeyFor(client);
|
|
161
|
+
if (key)
|
|
162
|
+
DEFAULT.register(key, tools, mcpServers);
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
/* registry problems never stop an agent */
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function serverNamesOf(boot) {
|
|
169
|
+
return (boot?.mcps ?? [])
|
|
170
|
+
.map((m) => m?.name)
|
|
171
|
+
.filter((n) => typeof n === 'string' && n.length > 0);
|
|
172
|
+
}
|
|
173
|
+
/** The org's MCP server names from the client's cached bootstrap payload. Never fetches. */
|
|
174
|
+
function cachedServerNames(client) {
|
|
175
|
+
return serverNamesOf(client?.bootstrapCache);
|
|
176
|
+
}
|
|
177
|
+
/** The org's MCP server names, fetching bootstrap when the client has not yet; empty when unreachable. */
|
|
178
|
+
async function knownServerNames(client) {
|
|
179
|
+
const c = client;
|
|
180
|
+
if (c?.bootstrapCache)
|
|
181
|
+
return serverNamesOf(c.bootstrapCache);
|
|
182
|
+
if (typeof c?.bootstrap !== 'function')
|
|
183
|
+
return [];
|
|
184
|
+
try {
|
|
185
|
+
return serverNamesOf(await c.bootstrap());
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return [];
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function toolMapOf(boot) {
|
|
192
|
+
const raw = boot?.toolMap ?? {};
|
|
193
|
+
const out = {};
|
|
194
|
+
for (const [k, v] of Object.entries(raw))
|
|
195
|
+
if (typeof v === 'string' && v)
|
|
196
|
+
out[k] = v;
|
|
197
|
+
return out;
|
|
198
|
+
}
|
|
199
|
+
/** The org's tool name → MCP server map from the cached bootstrap payload. Never fetches. */
|
|
200
|
+
function cachedToolMap(client) {
|
|
201
|
+
return toolMapOf(client?.bootstrapCache);
|
|
202
|
+
}
|
|
203
|
+
/** The org's tool name → MCP server map, fetching bootstrap when needed; a bare published name is the server's. */
|
|
204
|
+
async function knownToolMap(client) {
|
|
205
|
+
const c = client;
|
|
206
|
+
if (c?.bootstrapCache)
|
|
207
|
+
return toolMapOf(c.bootstrapCache);
|
|
208
|
+
if (typeof c?.bootstrap !== 'function')
|
|
209
|
+
return {};
|
|
210
|
+
try {
|
|
211
|
+
return toolMapOf(await c.bootstrap());
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return {};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/** `<server>__<tool>`, or `<server>_<tool>` for a server the org registered. */
|
|
218
|
+
function mcpBackedByName(name, serverNames) {
|
|
219
|
+
if ((0, tool_name_1.splitPrefixedToolName)(name))
|
|
220
|
+
return true;
|
|
221
|
+
return serverNames.some((sv) => ['__', '_'].some((sep) => name.startsWith(`${sv}${sep}`) && name.length > sv.length + sep.length));
|
|
222
|
+
}
|
|
223
|
+
function observeForClient(client, name) {
|
|
224
|
+
try {
|
|
225
|
+
const key = agentKeyFor(client);
|
|
226
|
+
if (key)
|
|
227
|
+
DEFAULT.observe(key, name, cachedServerNames(client), cachedToolMap(client));
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
/* registry problems never stop an agent */
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
const isRecord = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
234
|
+
/** Gemini `Schema` (uppercase `type`, `nullable`) to JSON Schema. */
|
|
235
|
+
function geminiSchemaToJsonSchema(schema) {
|
|
236
|
+
if (schema === null || schema === undefined)
|
|
237
|
+
return schema;
|
|
238
|
+
if (!isRecord(schema))
|
|
239
|
+
return schema;
|
|
240
|
+
const out = {};
|
|
241
|
+
for (const [key, value] of Object.entries(schema)) {
|
|
242
|
+
if (key === 'type' && typeof value === 'string')
|
|
243
|
+
out.type = value.toLowerCase();
|
|
244
|
+
else if (key === 'properties' && isRecord(value)) {
|
|
245
|
+
out.properties = Object.fromEntries(Object.entries(value).map(([k, v]) => [k, geminiSchemaToJsonSchema(v)]));
|
|
246
|
+
}
|
|
247
|
+
else if (key === 'items')
|
|
248
|
+
out.items = geminiSchemaToJsonSchema(value);
|
|
249
|
+
else if ((key === 'anyOf' || key === 'any_of') && Array.isArray(value))
|
|
250
|
+
out.anyOf = value.map(geminiSchemaToJsonSchema);
|
|
251
|
+
else if (key === 'nullable')
|
|
252
|
+
continue;
|
|
253
|
+
else
|
|
254
|
+
out[key] = value;
|
|
255
|
+
}
|
|
256
|
+
if (schema.nullable && typeof out.type === 'string')
|
|
257
|
+
out.type = [out.type, 'null'];
|
|
258
|
+
return out;
|
|
259
|
+
}
|
|
260
|
+
const MCP_ANNOTATION_HINTS = [
|
|
261
|
+
'readOnlyHint',
|
|
262
|
+
'destructiveHint',
|
|
263
|
+
'idempotentHint',
|
|
264
|
+
'openWorldHint',
|
|
265
|
+
'annotations',
|
|
266
|
+
];
|
|
267
|
+
function looksMcpBacked(metadata) {
|
|
268
|
+
return isRecord(metadata) && MCP_ANNOTATION_HINTS.some((k) => k in metadata);
|
|
269
|
+
}
|
|
270
|
+
function schemaFromArgs(args) {
|
|
271
|
+
if (!args)
|
|
272
|
+
return undefined;
|
|
273
|
+
if (isRecord(args) &&
|
|
274
|
+
typeof args.toJSONSchema !== 'function' &&
|
|
275
|
+
!('_def' in args)) {
|
|
276
|
+
return args; // already JSON Schema
|
|
277
|
+
}
|
|
278
|
+
const fn = args.toJSONSchema;
|
|
279
|
+
if (typeof fn === 'function') {
|
|
280
|
+
try {
|
|
281
|
+
return fn.call(args);
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
return undefined;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return undefined;
|
|
288
|
+
}
|
|
289
|
+
function declarationsFromAdkAgent(agent) {
|
|
290
|
+
const tools = [];
|
|
291
|
+
const servers = [];
|
|
292
|
+
const list = agent?.tools ?? [];
|
|
293
|
+
for (const t of list) {
|
|
294
|
+
const rec = t;
|
|
295
|
+
if (typeof rec.getTools === 'function' && typeof rec._getDeclaration !== 'function') {
|
|
296
|
+
const params = (rec._connectionParams ?? rec.connectionParams);
|
|
297
|
+
const url = String(params?.url ?? rec.url ?? '');
|
|
298
|
+
servers.push({ name: String(rec.name ?? url ?? 'mcp'), url });
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
let decl;
|
|
302
|
+
if (typeof rec._getDeclaration === 'function') {
|
|
303
|
+
try {
|
|
304
|
+
decl = rec._getDeclaration();
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
decl = undefined;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
const name = (decl?.name ?? rec.name);
|
|
311
|
+
if (!name)
|
|
312
|
+
continue;
|
|
313
|
+
const schema = decl?.parametersJsonSchema ?? geminiSchemaToJsonSchema(decl?.parameters);
|
|
314
|
+
tools.push({
|
|
315
|
+
name,
|
|
316
|
+
description: String(decl?.description ?? rec.description ?? ''),
|
|
317
|
+
inputSchema: schema,
|
|
318
|
+
schemaSource: schema !== undefined && schema !== null ? 'framework' : 'none',
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
return { tools, servers };
|
|
322
|
+
}
|
|
323
|
+
function declarationsFromStrandsAgent(agent) {
|
|
324
|
+
const tools = [];
|
|
325
|
+
const servers = new Map();
|
|
326
|
+
const a = agent;
|
|
327
|
+
const registry = (a?.toolRegistry?.registry ?? a?.tools ?? {});
|
|
328
|
+
const entries = Array.isArray(registry)
|
|
329
|
+
? registry.map((t) => [String(t.name ?? ''), t])
|
|
330
|
+
: Object.entries(registry).map(([k, v]) => [k, v]);
|
|
331
|
+
for (const [key, tool] of entries) {
|
|
332
|
+
if (tool?.mcpClient || tool?.constructor?.name === 'MCPAgentTool') {
|
|
333
|
+
const client = tool.mcpClient;
|
|
334
|
+
const url = String(client?.url ?? '');
|
|
335
|
+
const prefix = client?.prefix ?? client?._prefix;
|
|
336
|
+
const split = (0, tool_name_1.splitPrefixedToolName)(String(tool.toolSpec?.name ?? key));
|
|
337
|
+
const label = prefix
|
|
338
|
+
? String(prefix).replace(/_+$/, '')
|
|
339
|
+
: split
|
|
340
|
+
? split.mcp
|
|
341
|
+
: String(client?.name ?? url);
|
|
342
|
+
if (!label)
|
|
343
|
+
continue;
|
|
344
|
+
if (!servers.has(url || label))
|
|
345
|
+
servers.set(url || label, { name: label, url });
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
const spec = (tool?.toolSpec ?? tool?.tool_spec);
|
|
349
|
+
const input = spec?.inputSchema;
|
|
350
|
+
const schema = input ? (input.json ?? input) : undefined;
|
|
351
|
+
tools.push({
|
|
352
|
+
name: String(spec?.name ?? key),
|
|
353
|
+
description: String(spec?.description ?? ''),
|
|
354
|
+
inputSchema: schema,
|
|
355
|
+
schemaSource: schema !== undefined ? 'framework' : 'none',
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
return { tools, servers: [...servers.values()] };
|
|
359
|
+
}
|
|
360
|
+
/** LangChain tools handed to the factory. A name in `<server>__<tool>` form is MCP-backed. */
|
|
361
|
+
/**
|
|
362
|
+
* Tool definitions as a model request carries them: `{type:'function', function:{name,
|
|
363
|
+
* description, parameters}}` or flat `{name, description, parameters | input_schema}`.
|
|
364
|
+
* LangChain hands these to `handleChatModelStart` in `invocation_params.tools`, so the
|
|
365
|
+
* registry fills from the model call with nothing for the developer to wire.
|
|
366
|
+
*/
|
|
367
|
+
function declarationsFromOpenAiTools(list, serverNames = [], toolMap = {}) {
|
|
368
|
+
const tools = [];
|
|
369
|
+
const servers = new Map();
|
|
370
|
+
for (const raw of list) {
|
|
371
|
+
if (!isRecord(raw))
|
|
372
|
+
continue;
|
|
373
|
+
const fn = isRecord(raw.function) ? raw.function : raw;
|
|
374
|
+
const name = fn.name;
|
|
375
|
+
if (typeof name !== 'string' || !name)
|
|
376
|
+
continue;
|
|
377
|
+
const split = (0, tool_name_1.splitPrefixedToolName)(name);
|
|
378
|
+
if (split) {
|
|
379
|
+
if (!servers.has(split.mcp))
|
|
380
|
+
servers.set(split.mcp, { name: split.mcp, url: '' });
|
|
381
|
+
continue;
|
|
382
|
+
}
|
|
383
|
+
const owner = serverNames.find((sv) => name.startsWith(`${sv}_`) && name.length > sv.length + 1) ??
|
|
384
|
+
toolMap[name];
|
|
385
|
+
if (owner) {
|
|
386
|
+
if (!servers.has(owner))
|
|
387
|
+
servers.set(owner, { name: owner, url: '' });
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
const schema = isRecord(fn.parameters)
|
|
391
|
+
? fn.parameters
|
|
392
|
+
: isRecord(fn.input_schema)
|
|
393
|
+
? fn.input_schema
|
|
394
|
+
: undefined;
|
|
395
|
+
tools.push({
|
|
396
|
+
name,
|
|
397
|
+
description: String(fn.description ?? ''),
|
|
398
|
+
inputSchema: schema,
|
|
399
|
+
schemaSource: schema !== undefined ? 'framework' : 'none',
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
return { tools, servers: [...servers.values()] };
|
|
403
|
+
}
|
|
404
|
+
function declarationsFromLangChainTools(list, serverNames = []) {
|
|
405
|
+
const tools = [];
|
|
406
|
+
const servers = new Map();
|
|
407
|
+
for (const t of list) {
|
|
408
|
+
const rec = t;
|
|
409
|
+
const name = rec?.name;
|
|
410
|
+
if (!name)
|
|
411
|
+
continue;
|
|
412
|
+
const split = (0, tool_name_1.splitPrefixedToolName)(name);
|
|
413
|
+
if (split) {
|
|
414
|
+
if (!servers.has(split.mcp))
|
|
415
|
+
servers.set(split.mcp, { name: split.mcp, url: '' });
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
// `<server>_<tool>` for a server the org registered: MCP-backed, listed as its server.
|
|
419
|
+
const owner = serverNames.find((sv) => name.startsWith(`${sv}_`) && name.length > sv.length + 1);
|
|
420
|
+
if (owner) {
|
|
421
|
+
if (!servers.has(owner))
|
|
422
|
+
servers.set(owner, { name: owner, url: '' });
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
// The MCP adapter copies the server's tool annotations onto the tool. The server itself is
|
|
426
|
+
// probed by the backend; with a single-underscore prefix its name is not recoverable here,
|
|
427
|
+
// so the tool is left out rather than declared as the agent's.
|
|
428
|
+
if (looksMcpBacked(rec.metadata))
|
|
429
|
+
continue;
|
|
430
|
+
const schema = schemaFromArgs(rec.schema ?? rec.argsSchema);
|
|
431
|
+
tools.push({
|
|
432
|
+
name,
|
|
433
|
+
description: String(rec.description ?? ''),
|
|
434
|
+
inputSchema: schema,
|
|
435
|
+
schemaSource: schema !== undefined ? 'framework' : 'none',
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
return { tools, servers: [...servers.values()] };
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=tool_registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool_registry.js","sourceRoot":"","sources":["../src/tool_registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema hashing for the tool inventory. Byte-for-byte mirror of conmap's
|
|
3
|
+
* src/tool-inventory/canonical.ts; the golden vectors in
|
|
4
|
+
* tests/fixtures/tool-inventory pin it across conmap and both SDKs, so change
|
|
5
|
+
* all three together or every declared tool reads as drifted.
|
|
6
|
+
*
|
|
7
|
+
* canonicalJson: sorted keys, no whitespace, ASCII escapes. Not RFC 8785.
|
|
8
|
+
*/
|
|
9
|
+
export interface ToolManifestDoc {
|
|
10
|
+
name: string;
|
|
11
|
+
description?: string | null;
|
|
12
|
+
annotations?: Record<string, unknown>;
|
|
13
|
+
inputSchema?: unknown;
|
|
14
|
+
}
|
|
15
|
+
type ToolDoc = ToolManifestDoc;
|
|
16
|
+
export declare function canonicalJson(value: unknown): string;
|
|
17
|
+
/** Null when the tool has no schema at all: a rule constraining `args.*` cannot be validated against it. */
|
|
18
|
+
export declare function schemaHash(inputSchema: unknown): string | null;
|
|
19
|
+
/** Over name, description, annotations and schema; informational, never policy-bound. */
|
|
20
|
+
export declare function manifestHash(entry: ToolDoc): string;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=tool_schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool_schema.d.ts","sourceRoot":"","sources":["../src/tool_schema.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AACD,KAAK,OAAO,GAAG,eAAe,CAAC;AAoB/B,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAsBpD;AAmGD,4GAA4G;AAC5G,wBAAgB,UAAU,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI9D;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAYnD"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canonicalJson = canonicalJson;
|
|
4
|
+
exports.schemaHash = schemaHash;
|
|
5
|
+
exports.manifestHash = manifestHash;
|
|
6
|
+
const crypto_1 = require("crypto");
|
|
7
|
+
function escapeAsciiString(s) {
|
|
8
|
+
let out = '"';
|
|
9
|
+
for (let i = 0; i < s.length; i++) {
|
|
10
|
+
const code = s.charCodeAt(i);
|
|
11
|
+
const ch = s[i];
|
|
12
|
+
if (ch === '"')
|
|
13
|
+
out += '\\"';
|
|
14
|
+
else if (ch === '\\')
|
|
15
|
+
out += '\\\\';
|
|
16
|
+
else if (code === 0x08)
|
|
17
|
+
out += '\\b';
|
|
18
|
+
else if (code === 0x09)
|
|
19
|
+
out += '\\t';
|
|
20
|
+
else if (code === 0x0a)
|
|
21
|
+
out += '\\n';
|
|
22
|
+
else if (code === 0x0c)
|
|
23
|
+
out += '\\f';
|
|
24
|
+
else if (code === 0x0d)
|
|
25
|
+
out += '\\r';
|
|
26
|
+
else if (code < 0x20 || code > 0x7e)
|
|
27
|
+
out += '\\u' + code.toString(16).padStart(4, '0');
|
|
28
|
+
else
|
|
29
|
+
out += ch;
|
|
30
|
+
}
|
|
31
|
+
return out + '"';
|
|
32
|
+
}
|
|
33
|
+
function canonicalJson(value) {
|
|
34
|
+
if (value === null || value === undefined)
|
|
35
|
+
return 'null';
|
|
36
|
+
const t = typeof value;
|
|
37
|
+
if (t === 'number') {
|
|
38
|
+
if (!Number.isFinite(value)) {
|
|
39
|
+
throw new Error('non-finite number is not valid in canonical JSON');
|
|
40
|
+
}
|
|
41
|
+
return JSON.stringify(value);
|
|
42
|
+
}
|
|
43
|
+
if (t === 'boolean')
|
|
44
|
+
return value ? 'true' : 'false';
|
|
45
|
+
if (t === 'string')
|
|
46
|
+
return escapeAsciiString(value);
|
|
47
|
+
if (Array.isArray(value))
|
|
48
|
+
return '[' + value.map(canonicalJson).join(',') + ']';
|
|
49
|
+
if (t === 'object') {
|
|
50
|
+
const obj = value;
|
|
51
|
+
const keys = Object.keys(obj)
|
|
52
|
+
.filter((k) => obj[k] !== undefined)
|
|
53
|
+
.sort();
|
|
54
|
+
return ('{' + keys.map((k) => escapeAsciiString(k) + ':' + canonicalJson(obj[k])).join(',') + '}');
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`unsupported type in canonical JSON: ${t}`);
|
|
57
|
+
}
|
|
58
|
+
function resolvePointer(root, ref) {
|
|
59
|
+
if (ref === '#')
|
|
60
|
+
return root;
|
|
61
|
+
if (!ref.startsWith('#/'))
|
|
62
|
+
return undefined;
|
|
63
|
+
let node = root;
|
|
64
|
+
for (const rawSeg of ref.slice(2).split('/')) {
|
|
65
|
+
const seg = decodeURIComponent(rawSeg).replace(/~1/g, '/').replace(/~0/g, '~');
|
|
66
|
+
if (node === null || typeof node !== 'object')
|
|
67
|
+
return undefined;
|
|
68
|
+
node = Array.isArray(node)
|
|
69
|
+
? node[Number(seg)]
|
|
70
|
+
: node[seg];
|
|
71
|
+
if (node === undefined)
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
return node;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* `description`/`title` are stripped ONLY as JSON Schema annotation keywords (direct keys of a schema
|
|
78
|
+
* node), never where they name a user argument inside `properties`, `patternProperties`, `$defs`,
|
|
79
|
+
* `definitions`, `dependentSchemas` or `required`, and never inside the data literals under `enum`,
|
|
80
|
+
* `const`, `default` or `examples`. Mirrored byte-for-byte in both SDKs and pinned by vectors 11 and
|
|
81
|
+
* 13 of tests/fixtures/tool-inventory/schema-hash-vectors.json, so change all three together or
|
|
82
|
+
* every declared tool reads as drifted. An unresolvable or cyclic `$ref` is left verbatim.
|
|
83
|
+
*/
|
|
84
|
+
const SCHEMA_MAP_KEYWORDS = new Set([
|
|
85
|
+
'properties',
|
|
86
|
+
'patternProperties',
|
|
87
|
+
'$defs',
|
|
88
|
+
'definitions',
|
|
89
|
+
'dependentSchemas',
|
|
90
|
+
]);
|
|
91
|
+
const DATA_KEYWORDS = new Set(['enum', 'const', 'default', 'examples']);
|
|
92
|
+
function canonicalizeKeyword(key, value, root, seen) {
|
|
93
|
+
if (DATA_KEYWORDS.has(key))
|
|
94
|
+
return value;
|
|
95
|
+
return canonicalizeSchema(value, root, seen, SCHEMA_MAP_KEYWORDS.has(key));
|
|
96
|
+
}
|
|
97
|
+
function canonicalizeSchema(node, root, seen, isSchemaMap = false) {
|
|
98
|
+
if (Array.isArray(node)) {
|
|
99
|
+
return node.map((item) => canonicalizeSchema(item, root, seen));
|
|
100
|
+
}
|
|
101
|
+
if (node === null || typeof node !== 'object')
|
|
102
|
+
return node;
|
|
103
|
+
const obj = node;
|
|
104
|
+
if (isSchemaMap) {
|
|
105
|
+
const out = {};
|
|
106
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
107
|
+
out[k] = canonicalizeSchema(v, root, seen);
|
|
108
|
+
}
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
111
|
+
const ref = obj['$ref'];
|
|
112
|
+
if (typeof ref === 'string' && ref.startsWith('#')) {
|
|
113
|
+
if (seen.has(ref))
|
|
114
|
+
return { $ref: ref };
|
|
115
|
+
const target = resolvePointer(root, ref);
|
|
116
|
+
if (target === undefined)
|
|
117
|
+
return { $ref: ref };
|
|
118
|
+
const next = new Set(seen);
|
|
119
|
+
next.add(ref);
|
|
120
|
+
const resolved = canonicalizeSchema(target, root, next);
|
|
121
|
+
const siblings = Object.entries(obj).filter(([k]) => k !== '$ref');
|
|
122
|
+
if (siblings.length === 0)
|
|
123
|
+
return resolved;
|
|
124
|
+
// `$ref` beside other keywords (2020-12): the target's keys are the base, siblings win.
|
|
125
|
+
const merged = resolved !== null && typeof resolved === 'object' && !Array.isArray(resolved)
|
|
126
|
+
? { ...resolved }
|
|
127
|
+
: { $ref: ref };
|
|
128
|
+
for (const [k, v] of siblings) {
|
|
129
|
+
if (k === 'description' || k === 'title')
|
|
130
|
+
continue;
|
|
131
|
+
merged[k] = canonicalizeKeyword(k, v, root, next);
|
|
132
|
+
}
|
|
133
|
+
return merged;
|
|
134
|
+
}
|
|
135
|
+
const out = {};
|
|
136
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
137
|
+
if (k === 'description' || k === 'title')
|
|
138
|
+
continue;
|
|
139
|
+
out[k] = canonicalizeKeyword(k, v, root, seen);
|
|
140
|
+
}
|
|
141
|
+
return out;
|
|
142
|
+
}
|
|
143
|
+
function sha256Hex(input) {
|
|
144
|
+
return (0, crypto_1.createHash)('sha256').update(input, 'utf8').digest('hex');
|
|
145
|
+
}
|
|
146
|
+
/** Null when the tool has no schema at all: a rule constraining `args.*` cannot be validated against it. */
|
|
147
|
+
function schemaHash(inputSchema) {
|
|
148
|
+
if (inputSchema === null || inputSchema === undefined)
|
|
149
|
+
return null;
|
|
150
|
+
const canonical = canonicalizeSchema(inputSchema, inputSchema, new Set());
|
|
151
|
+
return 'sha256:' + sha256Hex(canonicalJson(canonical));
|
|
152
|
+
}
|
|
153
|
+
/** Over name, description, annotations and schema; informational, never policy-bound. */
|
|
154
|
+
function manifestHash(entry) {
|
|
155
|
+
return ('sha256:' +
|
|
156
|
+
sha256Hex(canonicalJson({
|
|
157
|
+
name: entry.name,
|
|
158
|
+
description: entry.description ?? null,
|
|
159
|
+
annotations: entry.annotations ?? {},
|
|
160
|
+
inputSchema: entry.inputSchema ?? null,
|
|
161
|
+
})));
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=tool_schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool_schema.js","sourceRoot":"","sources":["../src/tool_schema.ts"],"names":[],"mappings":"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"}
|