@a5c-ai/tool-mux 5.0.1-staging.07d877d5a3d1
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 +57 -0
- package/dist/__tests__/dispatch.test.d.ts +2 -0
- package/dist/__tests__/dispatch.test.d.ts.map +1 -0
- package/dist/__tests__/dispatch.test.js +209 -0
- package/dist/__tests__/dispatch.test.js.map +1 -0
- package/dist/__tests__/hooks.test.d.ts +2 -0
- package/dist/__tests__/hooks.test.d.ts.map +1 -0
- package/dist/__tests__/hooks.test.js +100 -0
- package/dist/__tests__/hooks.test.js.map +1 -0
- package/dist/__tests__/mcp-bridge.test.d.ts +2 -0
- package/dist/__tests__/mcp-bridge.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-bridge.test.js +129 -0
- package/dist/__tests__/mcp-bridge.test.js.map +1 -0
- package/dist/__tests__/registry.test.d.ts +2 -0
- package/dist/__tests__/registry.test.d.ts.map +1 -0
- package/dist/__tests__/registry.test.js +162 -0
- package/dist/__tests__/registry.test.js.map +1 -0
- package/dist/__tests__/schema-translation.test.d.ts +2 -0
- package/dist/__tests__/schema-translation.test.d.ts.map +1 -0
- package/dist/__tests__/schema-translation.test.js +126 -0
- package/dist/__tests__/schema-translation.test.js.map +1 -0
- package/dist/dispatch.d.ts +40 -0
- package/dist/dispatch.d.ts.map +1 -0
- package/dist/dispatch.js +117 -0
- package/dist/dispatch.js.map +1 -0
- package/dist/hooks.d.ts +42 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +25 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-bridge.d.ts +54 -0
- package/dist/mcp-bridge.d.ts.map +1 -0
- package/dist/mcp-bridge.js +77 -0
- package/dist/mcp-bridge.js.map +1 -0
- package/dist/registry.d.ts +40 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +83 -0
- package/dist/registry.js.map +1 -0
- package/dist/schema-translation.d.ts +38 -0
- package/dist/schema-translation.d.ts.map +1 -0
- package/dist/schema-translation.js +61 -0
- package/dist/schema-translation.js.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ToolRegistry } from './registry.js';
|
|
2
|
+
import type { ToolDescriptor } from './types.js';
|
|
3
|
+
export type McpTransport = 'stdio' | 'sse' | 'http' | 'streamable-http';
|
|
4
|
+
export interface McpServerConfig {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
transport: McpTransport;
|
|
8
|
+
command?: string;
|
|
9
|
+
args?: string[];
|
|
10
|
+
url?: string;
|
|
11
|
+
env?: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
export interface McpToolDefinition {
|
|
14
|
+
name: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
inputSchema?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Translates MCP tool definitions into ToolDescriptors and registers
|
|
20
|
+
* them in a ToolRegistry.
|
|
21
|
+
*
|
|
22
|
+
* This bridge is purely declarative — it does NOT start MCP processes
|
|
23
|
+
* or connect to servers. Actual MCP execution is handled elsewhere
|
|
24
|
+
* (e.g. babysitter-sdk).
|
|
25
|
+
*/
|
|
26
|
+
export declare class McpBridge {
|
|
27
|
+
private readonly registry;
|
|
28
|
+
private readonly servers;
|
|
29
|
+
constructor(registry: ToolRegistry);
|
|
30
|
+
/**
|
|
31
|
+
* Register an MCP server and all of its advertised tools.
|
|
32
|
+
*
|
|
33
|
+
* Each tool is converted to a {@link ToolDescriptor} with
|
|
34
|
+
* `source: 'mcp'` and `server` set to the config's `id`, then
|
|
35
|
+
* inserted into the shared {@link ToolRegistry}.
|
|
36
|
+
*/
|
|
37
|
+
registerServer(config: McpServerConfig, tools: McpToolDefinition[]): void;
|
|
38
|
+
/**
|
|
39
|
+
* Remove an MCP server and all tools that belong to it.
|
|
40
|
+
*/
|
|
41
|
+
unregisterServer(serverId: string): void;
|
|
42
|
+
/** Return all currently-registered MCP server configs. */
|
|
43
|
+
listServers(): McpServerConfig[];
|
|
44
|
+
/** Return the tools currently registered for a specific server. */
|
|
45
|
+
getServerTools(serverId: string): ToolDescriptor[];
|
|
46
|
+
/**
|
|
47
|
+
* Convert a single MCP tool definition into a ToolDescriptor.
|
|
48
|
+
*
|
|
49
|
+
* The MCP `inputSchema` is stored as the descriptor's `parameters`
|
|
50
|
+
* field (both are JSON Schema objects).
|
|
51
|
+
*/
|
|
52
|
+
static mcpToolToDescriptor(tool: McpToolDefinition, serverId: string): ToolDescriptor;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=mcp-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-bridge.d.ts","sourceRoot":"","sources":["../src/mcp-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,iBAAiB,CAAC;AAExE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAMD;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;gBAElD,QAAQ,EAAE,YAAY;IAQlC;;;;;;OAMG;IACH,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAiBzE;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IASxC,0DAA0D;IAC1D,WAAW,IAAI,eAAe,EAAE;IAIhC,mEAAmE;IACnE,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE;IAQlD;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CACxB,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,GACf,cAAc;CASlB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* ------------------------------------------------------------------ */
|
|
2
|
+
/* McpBridge */
|
|
3
|
+
/* ------------------------------------------------------------------ */
|
|
4
|
+
/**
|
|
5
|
+
* Translates MCP tool definitions into ToolDescriptors and registers
|
|
6
|
+
* them in a ToolRegistry.
|
|
7
|
+
*
|
|
8
|
+
* This bridge is purely declarative — it does NOT start MCP processes
|
|
9
|
+
* or connect to servers. Actual MCP execution is handled elsewhere
|
|
10
|
+
* (e.g. babysitter-sdk).
|
|
11
|
+
*/
|
|
12
|
+
export class McpBridge {
|
|
13
|
+
registry;
|
|
14
|
+
servers = new Map();
|
|
15
|
+
constructor(registry) {
|
|
16
|
+
this.registry = registry;
|
|
17
|
+
}
|
|
18
|
+
/* ---------------------------------------------------------------- */
|
|
19
|
+
/* Server lifecycle */
|
|
20
|
+
/* ---------------------------------------------------------------- */
|
|
21
|
+
/**
|
|
22
|
+
* Register an MCP server and all of its advertised tools.
|
|
23
|
+
*
|
|
24
|
+
* Each tool is converted to a {@link ToolDescriptor} with
|
|
25
|
+
* `source: 'mcp'` and `server` set to the config's `id`, then
|
|
26
|
+
* inserted into the shared {@link ToolRegistry}.
|
|
27
|
+
*/
|
|
28
|
+
registerServer(config, tools) {
|
|
29
|
+
this.servers.set(config.id, config);
|
|
30
|
+
const descriptors = tools.map((t) => McpBridge.mcpToolToDescriptor(t, config.id));
|
|
31
|
+
// Use the registry's own server-level registration so the
|
|
32
|
+
// ToolServer entry is also tracked.
|
|
33
|
+
this.registry.registerServer({
|
|
34
|
+
id: config.id,
|
|
35
|
+
name: config.name,
|
|
36
|
+
type: 'mcp',
|
|
37
|
+
tools: descriptors,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Remove an MCP server and all tools that belong to it.
|
|
42
|
+
*/
|
|
43
|
+
unregisterServer(serverId) {
|
|
44
|
+
this.servers.delete(serverId);
|
|
45
|
+
this.registry.unregisterServer(serverId, /* removeTools */ true);
|
|
46
|
+
}
|
|
47
|
+
/* ---------------------------------------------------------------- */
|
|
48
|
+
/* Queries */
|
|
49
|
+
/* ---------------------------------------------------------------- */
|
|
50
|
+
/** Return all currently-registered MCP server configs. */
|
|
51
|
+
listServers() {
|
|
52
|
+
return [...this.servers.values()];
|
|
53
|
+
}
|
|
54
|
+
/** Return the tools currently registered for a specific server. */
|
|
55
|
+
getServerTools(serverId) {
|
|
56
|
+
return this.registry.listByServer(serverId);
|
|
57
|
+
}
|
|
58
|
+
/* ---------------------------------------------------------------- */
|
|
59
|
+
/* Static conversion helper */
|
|
60
|
+
/* ---------------------------------------------------------------- */
|
|
61
|
+
/**
|
|
62
|
+
* Convert a single MCP tool definition into a ToolDescriptor.
|
|
63
|
+
*
|
|
64
|
+
* The MCP `inputSchema` is stored as the descriptor's `parameters`
|
|
65
|
+
* field (both are JSON Schema objects).
|
|
66
|
+
*/
|
|
67
|
+
static mcpToolToDescriptor(tool, serverId) {
|
|
68
|
+
return {
|
|
69
|
+
name: tool.name,
|
|
70
|
+
description: tool.description,
|
|
71
|
+
parameters: tool.inputSchema,
|
|
72
|
+
source: 'mcp',
|
|
73
|
+
server: serverId,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=mcp-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-bridge.js","sourceRoot":"","sources":["../src/mcp-bridge.ts"],"names":[],"mappings":"AAyBA,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AAExE;;;;;;;GAOG;AACH,MAAM,OAAO,SAAS;IACH,QAAQ,CAAe;IACvB,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE9D,YAAY,QAAsB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,sEAAsE;IACtE,uEAAuE;IACvE,sEAAsE;IAEtE;;;;;;OAMG;IACH,cAAc,CAAC,MAAuB,EAAE,KAA0B;QAChE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAEpC,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,SAAS,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAC5C,CAAC;QAEF,0DAA0D;QAC1D,oCAAoC;QACpC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC3B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAgB;QAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,sEAAsE;IACtE,uEAAuE;IACvE,sEAAsE;IAEtE,0DAA0D;IAC1D,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,mEAAmE;IACnE,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,sEAAsE;IACtE,uEAAuE;IACvE,sEAAsE;IAEtE;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CACxB,IAAuB,EACvB,QAAgB;QAEhB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ToolDescriptor, ToolServer } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory registry of tool descriptors, indexed by tool name.
|
|
4
|
+
*
|
|
5
|
+
* Tools are optionally scoped to a server. The registry never reaches
|
|
6
|
+
* out to the network — callers are responsible for populating it from
|
|
7
|
+
* whatever discovery mechanism they use (MCP enumeration, plugin
|
|
8
|
+
* manifests, built-in definitions, etc.).
|
|
9
|
+
*/
|
|
10
|
+
export declare class ToolRegistry {
|
|
11
|
+
private readonly tools;
|
|
12
|
+
private readonly servers;
|
|
13
|
+
/** Register (or replace) a single tool descriptor. */
|
|
14
|
+
register(tool: ToolDescriptor): void;
|
|
15
|
+
/** Register every tool in the supplied array. */
|
|
16
|
+
registerAll(tools: ToolDescriptor[]): void;
|
|
17
|
+
/** Remove a tool by name. Returns `true` if it existed. */
|
|
18
|
+
unregister(name: string): boolean;
|
|
19
|
+
/** Look up a single tool by exact name. */
|
|
20
|
+
get(name: string): ToolDescriptor | undefined;
|
|
21
|
+
/** Return every registered tool descriptor. */
|
|
22
|
+
list(): ToolDescriptor[];
|
|
23
|
+
/** Return tools that belong to a specific server id. */
|
|
24
|
+
listByServer(serverId: string): ToolDescriptor[];
|
|
25
|
+
/** Check whether a tool is registered. */
|
|
26
|
+
has(name: string): boolean;
|
|
27
|
+
/** Number of registered tools. */
|
|
28
|
+
get size(): number;
|
|
29
|
+
/** Register a server and all of its tools in one shot. */
|
|
30
|
+
registerServer(server: ToolServer): void;
|
|
31
|
+
/** Remove a server and optionally all of its associated tools. */
|
|
32
|
+
unregisterServer(serverId: string, removeTools?: boolean): boolean;
|
|
33
|
+
/** Look up a server by id. */
|
|
34
|
+
getServer(serverId: string): ToolServer | undefined;
|
|
35
|
+
/** Return all registered servers. */
|
|
36
|
+
listServers(): ToolServer[];
|
|
37
|
+
/** Remove everything. */
|
|
38
|
+
clear(): void;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IAMzD,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpC,iDAAiD;IACjD,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAM1C,4DAA4D;IAC5D,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,2CAA2C;IAC3C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,+CAA+C;IAC/C,IAAI,IAAI,cAAc,EAAE;IAIxB,wDAAwD;IACxD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE;IAIhD,0CAA0C;IAC1C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,kCAAkC;IAClC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAMD,0DAA0D;IAC1D,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAQxC,kEAAkE;IAClE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,UAAO,GAAG,OAAO;IAS/D,8BAA8B;IAC9B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAInD,qCAAqC;IACrC,WAAW,IAAI,UAAU,EAAE;IAI3B,yBAAyB;IACzB,KAAK,IAAI,IAAI;CAId"}
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory registry of tool descriptors, indexed by tool name.
|
|
3
|
+
*
|
|
4
|
+
* Tools are optionally scoped to a server. The registry never reaches
|
|
5
|
+
* out to the network — callers are responsible for populating it from
|
|
6
|
+
* whatever discovery mechanism they use (MCP enumeration, plugin
|
|
7
|
+
* manifests, built-in definitions, etc.).
|
|
8
|
+
*/
|
|
9
|
+
export class ToolRegistry {
|
|
10
|
+
tools = new Map();
|
|
11
|
+
servers = new Map();
|
|
12
|
+
/* ------------------------------------------------------------------ */
|
|
13
|
+
/* Tool-level operations */
|
|
14
|
+
/* ------------------------------------------------------------------ */
|
|
15
|
+
/** Register (or replace) a single tool descriptor. */
|
|
16
|
+
register(tool) {
|
|
17
|
+
this.tools.set(tool.name, tool);
|
|
18
|
+
}
|
|
19
|
+
/** Register every tool in the supplied array. */
|
|
20
|
+
registerAll(tools) {
|
|
21
|
+
for (const tool of tools) {
|
|
22
|
+
this.register(tool);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Remove a tool by name. Returns `true` if it existed. */
|
|
26
|
+
unregister(name) {
|
|
27
|
+
return this.tools.delete(name);
|
|
28
|
+
}
|
|
29
|
+
/** Look up a single tool by exact name. */
|
|
30
|
+
get(name) {
|
|
31
|
+
return this.tools.get(name);
|
|
32
|
+
}
|
|
33
|
+
/** Return every registered tool descriptor. */
|
|
34
|
+
list() {
|
|
35
|
+
return [...this.tools.values()];
|
|
36
|
+
}
|
|
37
|
+
/** Return tools that belong to a specific server id. */
|
|
38
|
+
listByServer(serverId) {
|
|
39
|
+
return [...this.tools.values()].filter((t) => t.server === serverId);
|
|
40
|
+
}
|
|
41
|
+
/** Check whether a tool is registered. */
|
|
42
|
+
has(name) {
|
|
43
|
+
return this.tools.has(name);
|
|
44
|
+
}
|
|
45
|
+
/** Number of registered tools. */
|
|
46
|
+
get size() {
|
|
47
|
+
return this.tools.size;
|
|
48
|
+
}
|
|
49
|
+
/* ------------------------------------------------------------------ */
|
|
50
|
+
/* Server-level operations */
|
|
51
|
+
/* ------------------------------------------------------------------ */
|
|
52
|
+
/** Register a server and all of its tools in one shot. */
|
|
53
|
+
registerServer(server) {
|
|
54
|
+
this.servers.set(server.id, server);
|
|
55
|
+
for (const tool of server.tools) {
|
|
56
|
+
// Ensure every tool carries the server association.
|
|
57
|
+
this.register({ ...tool, server: server.id });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Remove a server and optionally all of its associated tools. */
|
|
61
|
+
unregisterServer(serverId, removeTools = true) {
|
|
62
|
+
if (removeTools) {
|
|
63
|
+
for (const tool of this.listByServer(serverId)) {
|
|
64
|
+
this.tools.delete(tool.name);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return this.servers.delete(serverId);
|
|
68
|
+
}
|
|
69
|
+
/** Look up a server by id. */
|
|
70
|
+
getServer(serverId) {
|
|
71
|
+
return this.servers.get(serverId);
|
|
72
|
+
}
|
|
73
|
+
/** Return all registered servers. */
|
|
74
|
+
listServers() {
|
|
75
|
+
return [...this.servers.values()];
|
|
76
|
+
}
|
|
77
|
+
/** Remove everything. */
|
|
78
|
+
clear() {
|
|
79
|
+
this.tools.clear();
|
|
80
|
+
this.servers.clear();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IACN,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC1C,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEzD,wEAAwE;IACxE,yEAAyE;IACzE,wEAAwE;IAExE,sDAAsD;IACtD,QAAQ,CAAC,IAAoB;QAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,iDAAiD;IACjD,WAAW,CAAC,KAAuB;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,2CAA2C;IAC3C,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,+CAA+C;IAC/C,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,wDAAwD;IACxD,YAAY,CAAC,QAAgB;QAC3B,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,0CAA0C;IAC1C,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,kCAAkC;IAClC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,wEAAwE;IACxE,yEAAyE;IACzE,wEAAwE;IAExE,0DAA0D;IAC1D,cAAc,CAAC,MAAkB;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,oDAAoD;YACpD,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,gBAAgB,CAAC,QAAgB,EAAE,WAAW,GAAG,IAAI;QACnD,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,8BAA8B;IAC9B,SAAS,CAAC,QAAgB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,qCAAqC;IACrC,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,yBAAyB;IACzB,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-translation layer.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the format-level conversion helpers from `@a5c-ai/transport-mux`
|
|
5
|
+
* and adds thin adapters between `NormalizedToolDefinition` (transport-mux
|
|
6
|
+
* canonical form) and `ToolDescriptor` (tool-mux lifecycle form).
|
|
7
|
+
*/
|
|
8
|
+
import type { CodecCapabilities, NormalizedToolDefinition } from '@a5c-ai/transport-mux';
|
|
9
|
+
import { convertTools } from '@a5c-ai/transport-mux';
|
|
10
|
+
import type { ToolDescriptor, ToolSource } from './types.js';
|
|
11
|
+
export { convertTools };
|
|
12
|
+
export type { NormalizedToolDefinition, CodecCapabilities };
|
|
13
|
+
type ToolSchemaFormat = CodecCapabilities['toolSchemaFormat'];
|
|
14
|
+
/**
|
|
15
|
+
* Lift a `NormalizedToolDefinition` (format-agnostic shape produced by
|
|
16
|
+
* transport-mux codecs) into a full `ToolDescriptor` by attaching a
|
|
17
|
+
* source tag and optional metadata.
|
|
18
|
+
*/
|
|
19
|
+
export declare function toToolDescriptor(normalized: NormalizedToolDefinition, source: ToolSource, extra?: {
|
|
20
|
+
server?: string;
|
|
21
|
+
permissions?: string[];
|
|
22
|
+
metadata?: Record<string, unknown>;
|
|
23
|
+
}): ToolDescriptor;
|
|
24
|
+
/**
|
|
25
|
+
* Strip lifecycle metadata from a `ToolDescriptor`, returning the
|
|
26
|
+
* minimal `NormalizedToolDefinition` understood by transport-mux.
|
|
27
|
+
*/
|
|
28
|
+
export declare function fromToolDescriptor(descriptor: ToolDescriptor): NormalizedToolDefinition;
|
|
29
|
+
/**
|
|
30
|
+
* Translate an array of `ToolDescriptor`s into the wire format
|
|
31
|
+
* expected by a specific provider (Anthropic, OpenAI, Google, Bedrock).
|
|
32
|
+
*
|
|
33
|
+
* This is a convenience wrapper that:
|
|
34
|
+
* 1. Strips descriptors down to `NormalizedToolDefinition`.
|
|
35
|
+
* 2. Denormalizes them into the target format via `convertTools`.
|
|
36
|
+
*/
|
|
37
|
+
export declare function translateTools(descriptors: ToolDescriptor[], targetFormat: ToolSchemaFormat): unknown[];
|
|
38
|
+
//# sourceMappingURL=schema-translation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-translation.d.ts","sourceRoot":"","sources":["../src/schema-translation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM7D,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,CAAC;AAE5D,KAAK,gBAAgB,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;AAM9D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,UAAU,EAClB,KAAK,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACtF,cAAc,CAUhB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,cAAc,GAAG,wBAAwB,CAMvF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,cAAc,EAAE,EAC7B,YAAY,EAAE,gBAAgB,GAC7B,OAAO,EAAE,CAUX"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-translation layer.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the format-level conversion helpers from `@a5c-ai/transport-mux`
|
|
5
|
+
* and adds thin adapters between `NormalizedToolDefinition` (transport-mux
|
|
6
|
+
* canonical form) and `ToolDescriptor` (tool-mux lifecycle form).
|
|
7
|
+
*/
|
|
8
|
+
import { convertTools } from '@a5c-ai/transport-mux';
|
|
9
|
+
/* ------------------------------------------------------------------ */
|
|
10
|
+
/* Re-exports from transport-mux */
|
|
11
|
+
/* ------------------------------------------------------------------ */
|
|
12
|
+
export { convertTools };
|
|
13
|
+
/* ------------------------------------------------------------------ */
|
|
14
|
+
/* Descriptor ↔ NormalizedToolDefinition */
|
|
15
|
+
/* ------------------------------------------------------------------ */
|
|
16
|
+
/**
|
|
17
|
+
* Lift a `NormalizedToolDefinition` (format-agnostic shape produced by
|
|
18
|
+
* transport-mux codecs) into a full `ToolDescriptor` by attaching a
|
|
19
|
+
* source tag and optional metadata.
|
|
20
|
+
*/
|
|
21
|
+
export function toToolDescriptor(normalized, source, extra) {
|
|
22
|
+
return {
|
|
23
|
+
name: normalized.name,
|
|
24
|
+
description: normalized.description,
|
|
25
|
+
parameters: normalized.parameters,
|
|
26
|
+
source,
|
|
27
|
+
...(extra?.server != null && { server: extra.server }),
|
|
28
|
+
...(extra?.permissions != null && { permissions: extra.permissions }),
|
|
29
|
+
...(extra?.metadata != null && { metadata: extra.metadata }),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Strip lifecycle metadata from a `ToolDescriptor`, returning the
|
|
34
|
+
* minimal `NormalizedToolDefinition` understood by transport-mux.
|
|
35
|
+
*/
|
|
36
|
+
export function fromToolDescriptor(descriptor) {
|
|
37
|
+
return {
|
|
38
|
+
name: descriptor.name,
|
|
39
|
+
...(descriptor.description != null && { description: descriptor.description }),
|
|
40
|
+
...(descriptor.parameters != null && { parameters: descriptor.parameters }),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Translate an array of `ToolDescriptor`s into the wire format
|
|
45
|
+
* expected by a specific provider (Anthropic, OpenAI, Google, Bedrock).
|
|
46
|
+
*
|
|
47
|
+
* This is a convenience wrapper that:
|
|
48
|
+
* 1. Strips descriptors down to `NormalizedToolDefinition`.
|
|
49
|
+
* 2. Denormalizes them into the target format via `convertTools`.
|
|
50
|
+
*/
|
|
51
|
+
export function translateTools(descriptors, targetFormat) {
|
|
52
|
+
if (targetFormat === 'none') {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
// NormalizedToolDefinition is already "openai-shaped" in practice
|
|
56
|
+
// (name + description + parameters JSON Schema), so we convert from
|
|
57
|
+
// the 'openai' canonical form.
|
|
58
|
+
const normalized = descriptors.map(fromToolDescriptor);
|
|
59
|
+
return convertTools(normalized, 'openai', targetFormat);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=schema-translation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-translation.js","sourceRoot":"","sources":["../src/schema-translation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AAExE,OAAO,EAAE,YAAY,EAAE,CAAC;AAKxB,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AAExE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAoC,EACpC,MAAkB,EAClB,KAAuF;IAEvF,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,MAAM;QACN,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QACtD,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,IAAI,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAA0B;IAC3D,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,GAAG,CAAC,UAAU,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC;QAC9E,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,WAA6B,EAC7B,YAA8B;IAE9B,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,kEAAkE;IAClE,oEAAoE;IACpE,+BAA+B;IAC/B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACvD,OAAO,YAAY,CAAC,UAAuB,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AACvE,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type ToolSource = 'builtin' | 'mcp' | 'plugin' | 'custom';
|
|
2
|
+
export interface ToolDescriptor {
|
|
3
|
+
name: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
parameters?: Record<string, unknown>;
|
|
6
|
+
source: ToolSource;
|
|
7
|
+
server?: string;
|
|
8
|
+
permissions?: string[];
|
|
9
|
+
metadata?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export interface ToolServer {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
type: 'mcp' | 'native' | 'remote';
|
|
15
|
+
tools: ToolDescriptor[];
|
|
16
|
+
}
|
|
17
|
+
export interface ToolDispatchRule {
|
|
18
|
+
match: string;
|
|
19
|
+
server: string;
|
|
20
|
+
priority?: number;
|
|
21
|
+
conditions?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export interface ToolDispatchPolicy {
|
|
24
|
+
rules: ToolDispatchRule[];
|
|
25
|
+
defaultServer?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ToolCallContext {
|
|
28
|
+
toolName: string;
|
|
29
|
+
input: unknown;
|
|
30
|
+
caller?: string;
|
|
31
|
+
runId?: string;
|
|
32
|
+
sessionId?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface ToolCallResult {
|
|
35
|
+
output: unknown;
|
|
36
|
+
durationMs: number;
|
|
37
|
+
error?: string;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@a5c-ai/tool-mux",
|
|
3
|
+
"version": "5.0.1-staging.07d877d5a3d1",
|
|
4
|
+
"description": "Tool lifecycle layer: registry, dispatch, schema translation, and hook bridging on top of transport-mux codecs.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"clean": "rm -rf dist",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"test:watch": "vitest watch",
|
|
25
|
+
"typecheck": "tsc --noEmit",
|
|
26
|
+
"lint": "eslint \"src/**/*.ts\" --max-warnings=0"
|
|
27
|
+
},
|
|
28
|
+
"author": "a5c.ai",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/a5c-ai/babysitter.git",
|
|
33
|
+
"directory": "packages/tool-mux"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://github.com/a5c-ai/babysitter/tree/main/packages/tool-mux#readme",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/a5c-ai/babysitter/issues"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@a5c-ai/transport-mux": "5.0.1-staging.07d877d5a3d1"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/node": "^22.0.0",
|
|
47
|
+
"typescript": "^5.7.3",
|
|
48
|
+
"vitest": "^4.1.6"
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=18.0.0"
|
|
52
|
+
},
|
|
53
|
+
"atlas": {
|
|
54
|
+
"layers": [
|
|
55
|
+
"L8"
|
|
56
|
+
],
|
|
57
|
+
"muxes": [
|
|
58
|
+
"tool-mux"
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
}
|