@animalabs/agent-framework 0.1.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/LICENSE +21 -0
- package/README.md +233 -0
- package/dist/src/agent.d.ts +130 -0
- package/dist/src/agent.d.ts.map +1 -0
- package/dist/src/agent.js +406 -0
- package/dist/src/agent.js.map +1 -0
- package/dist/src/api/mcp-server.d.ts +37 -0
- package/dist/src/api/mcp-server.d.ts.map +1 -0
- package/dist/src/api/mcp-server.js +598 -0
- package/dist/src/api/mcp-server.js.map +1 -0
- package/dist/src/api/server.d.ts +83 -0
- package/dist/src/api/server.d.ts.map +1 -0
- package/dist/src/api/server.js +785 -0
- package/dist/src/api/server.js.map +1 -0
- package/dist/src/api/types.d.ts +395 -0
- package/dist/src/api/types.d.ts.map +1 -0
- package/dist/src/api/types.js +5 -0
- package/dist/src/api/types.js.map +1 -0
- package/dist/src/framework.d.ts +309 -0
- package/dist/src/framework.d.ts.map +1 -0
- package/dist/src/framework.js +2309 -0
- package/dist/src/framework.js.map +1 -0
- package/dist/src/gate/event-gate.d.ts +75 -0
- package/dist/src/gate/event-gate.d.ts.map +1 -0
- package/dist/src/gate/event-gate.js +503 -0
- package/dist/src/gate/event-gate.js.map +1 -0
- package/dist/src/gate/index.d.ts +3 -0
- package/dist/src/gate/index.d.ts.map +1 -0
- package/dist/src/gate/index.js +2 -0
- package/dist/src/gate/index.js.map +1 -0
- package/dist/src/gate/types.d.ts +82 -0
- package/dist/src/gate/types.d.ts.map +1 -0
- package/dist/src/gate/types.js +9 -0
- package/dist/src/gate/types.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +18 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcpl/channel-registry.d.ts +141 -0
- package/dist/src/mcpl/channel-registry.d.ts.map +1 -0
- package/dist/src/mcpl/channel-registry.js +647 -0
- package/dist/src/mcpl/channel-registry.js.map +1 -0
- package/dist/src/mcpl/checkpoint-manager.d.ts +79 -0
- package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -0
- package/dist/src/mcpl/checkpoint-manager.js +430 -0
- package/dist/src/mcpl/checkpoint-manager.js.map +1 -0
- package/dist/src/mcpl/errors.d.ts +52 -0
- package/dist/src/mcpl/errors.d.ts.map +1 -0
- package/dist/src/mcpl/errors.js +93 -0
- package/dist/src/mcpl/errors.js.map +1 -0
- package/dist/src/mcpl/feature-set-manager.d.ts +91 -0
- package/dist/src/mcpl/feature-set-manager.d.ts.map +1 -0
- package/dist/src/mcpl/feature-set-manager.js +250 -0
- package/dist/src/mcpl/feature-set-manager.js.map +1 -0
- package/dist/src/mcpl/hook-orchestrator.d.ts +51 -0
- package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -0
- package/dist/src/mcpl/hook-orchestrator.js +217 -0
- package/dist/src/mcpl/hook-orchestrator.js.map +1 -0
- package/dist/src/mcpl/index.d.ts +14 -0
- package/dist/src/mcpl/index.d.ts.map +1 -0
- package/dist/src/mcpl/index.js +21 -0
- package/dist/src/mcpl/index.js.map +1 -0
- package/dist/src/mcpl/inference-router.d.ts +67 -0
- package/dist/src/mcpl/inference-router.d.ts.map +1 -0
- package/dist/src/mcpl/inference-router.js +249 -0
- package/dist/src/mcpl/inference-router.js.map +1 -0
- package/dist/src/mcpl/push-handler.d.ts +60 -0
- package/dist/src/mcpl/push-handler.d.ts.map +1 -0
- package/dist/src/mcpl/push-handler.js +162 -0
- package/dist/src/mcpl/push-handler.js.map +1 -0
- package/dist/src/mcpl/scope-manager.d.ts +76 -0
- package/dist/src/mcpl/scope-manager.d.ts.map +1 -0
- package/dist/src/mcpl/scope-manager.js +213 -0
- package/dist/src/mcpl/scope-manager.js.map +1 -0
- package/dist/src/mcpl/server-connection.d.ts +174 -0
- package/dist/src/mcpl/server-connection.d.ts.map +1 -0
- package/dist/src/mcpl/server-connection.js +559 -0
- package/dist/src/mcpl/server-connection.js.map +1 -0
- package/dist/src/mcpl/server-registry.d.ts +63 -0
- package/dist/src/mcpl/server-registry.d.ts.map +1 -0
- package/dist/src/mcpl/server-registry.js +119 -0
- package/dist/src/mcpl/server-registry.js.map +1 -0
- package/dist/src/mcpl/types.d.ts +755 -0
- package/dist/src/mcpl/types.d.ts.map +1 -0
- package/dist/src/mcpl/types.js +48 -0
- package/dist/src/mcpl/types.js.map +1 -0
- package/dist/src/module-registry.d.ts +93 -0
- package/dist/src/module-registry.d.ts.map +1 -0
- package/dist/src/module-registry.js +386 -0
- package/dist/src/module-registry.js.map +1 -0
- package/dist/src/modules/api/index.d.ts +22 -0
- package/dist/src/modules/api/index.d.ts.map +1 -0
- package/dist/src/modules/api/index.js +63 -0
- package/dist/src/modules/api/index.js.map +1 -0
- package/dist/src/modules/discord/discord-js-client.d.ts +58 -0
- package/dist/src/modules/discord/discord-js-client.d.ts.map +1 -0
- package/dist/src/modules/discord/discord-js-client.js +273 -0
- package/dist/src/modules/discord/discord-js-client.js.map +1 -0
- package/dist/src/modules/discord/index.d.ts +82 -0
- package/dist/src/modules/discord/index.d.ts.map +1 -0
- package/dist/src/modules/discord/index.js +959 -0
- package/dist/src/modules/discord/index.js.map +1 -0
- package/dist/src/modules/discord/types.d.ts +327 -0
- package/dist/src/modules/discord/types.d.ts.map +1 -0
- package/dist/src/modules/discord/types.js +5 -0
- package/dist/src/modules/discord/types.js.map +1 -0
- package/dist/src/modules/index.d.ts +11 -0
- package/dist/src/modules/index.d.ts.map +1 -0
- package/dist/src/modules/index.js +7 -0
- package/dist/src/modules/index.js.map +1 -0
- package/dist/src/modules/workspace/index.d.ts +59 -0
- package/dist/src/modules/workspace/index.d.ts.map +1 -0
- package/dist/src/modules/workspace/index.js +831 -0
- package/dist/src/modules/workspace/index.js.map +1 -0
- package/dist/src/modules/workspace/sync.d.ts +48 -0
- package/dist/src/modules/workspace/sync.d.ts.map +1 -0
- package/dist/src/modules/workspace/sync.js +253 -0
- package/dist/src/modules/workspace/sync.js.map +1 -0
- package/dist/src/modules/workspace/types.d.ts +166 -0
- package/dist/src/modules/workspace/types.d.ts.map +1 -0
- package/dist/src/modules/workspace/types.js +5 -0
- package/dist/src/modules/workspace/types.js.map +1 -0
- package/dist/src/modules/workspace/watcher.d.ts +43 -0
- package/dist/src/modules/workspace/watcher.d.ts.map +1 -0
- package/dist/src/modules/workspace/watcher.js +120 -0
- package/dist/src/modules/workspace/watcher.js.map +1 -0
- package/dist/src/queue.d.ts +50 -0
- package/dist/src/queue.d.ts.map +1 -0
- package/dist/src/queue.js +95 -0
- package/dist/src/queue.js.map +1 -0
- package/dist/src/safe-slice.d.ts +8 -0
- package/dist/src/safe-slice.d.ts.map +1 -0
- package/dist/src/safe-slice.js +18 -0
- package/dist/src/safe-slice.js.map +1 -0
- package/dist/src/types/agent.d.ts +118 -0
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js +2 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/src/types/events.d.ts +220 -0
- package/dist/src/types/events.d.ts.map +1 -0
- package/dist/src/types/events.js +2 -0
- package/dist/src/types/events.js.map +1 -0
- package/dist/src/types/framework.d.ts +184 -0
- package/dist/src/types/framework.d.ts.map +1 -0
- package/dist/src/types/framework.js +2 -0
- package/dist/src/types/framework.js.map +1 -0
- package/dist/src/types/index.d.ts +7 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +7 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/inference-log.d.ts +64 -0
- package/dist/src/types/inference-log.d.ts.map +1 -0
- package/dist/src/types/inference-log.js +5 -0
- package/dist/src/types/inference-log.js.map +1 -0
- package/dist/src/types/module.d.ts +302 -0
- package/dist/src/types/module.d.ts.map +1 -0
- package/dist/src/types/module.js +2 -0
- package/dist/src/types/module.js.map +1 -0
- package/dist/src/types/trace.d.ts +173 -0
- package/dist/src/types/trace.d.ts.map +1 -0
- package/dist/src/types/trace.js +2 -0
- package/dist/src/types/trace.js.map +1 -0
- package/dist/test/event-gate.test.d.ts +2 -0
- package/dist/test/event-gate.test.d.ts.map +1 -0
- package/dist/test/event-gate.test.js +535 -0
- package/dist/test/event-gate.test.js.map +1 -0
- package/dist/test/framework.test.d.ts +5 -0
- package/dist/test/framework.test.d.ts.map +1 -0
- package/dist/test/framework.test.js +738 -0
- package/dist/test/framework.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +58 -0
- package/src/agent.ts +512 -0
- package/src/api/mcp-server.ts +687 -0
- package/src/api/server.ts +1023 -0
- package/src/api/types.ts +542 -0
- package/src/framework.ts +2784 -0
- package/src/gate/event-gate.ts +623 -0
- package/src/gate/index.ts +12 -0
- package/src/gate/types.ts +112 -0
- package/src/index.ts +63 -0
- package/src/mcpl/channel-registry.ts +824 -0
- package/src/mcpl/checkpoint-manager.ts +545 -0
- package/src/mcpl/errors.ts +114 -0
- package/src/mcpl/feature-set-manager.ts +333 -0
- package/src/mcpl/hook-orchestrator.ts +281 -0
- package/src/mcpl/index.ts +134 -0
- package/src/mcpl/inference-router.ts +335 -0
- package/src/mcpl/push-handler.ts +232 -0
- package/src/mcpl/scope-manager.ts +262 -0
- package/src/mcpl/server-connection.ts +694 -0
- package/src/mcpl/server-registry.ts +144 -0
- package/src/mcpl/types.ts +991 -0
- package/src/module-registry.ts +547 -0
- package/src/modules/api/index.ts +94 -0
- package/src/modules/discord/discord-js-client.ts +353 -0
- package/src/modules/discord/index.ts +1146 -0
- package/src/modules/discord/types.ts +465 -0
- package/src/modules/index.ts +43 -0
- package/src/modules/workspace/index.ts +969 -0
- package/src/modules/workspace/sync.ts +314 -0
- package/src/modules/workspace/types.ts +202 -0
- package/src/modules/workspace/watcher.ts +142 -0
- package/src/queue.ts +106 -0
- package/src/safe-slice.ts +18 -0
- package/src/types/agent.ts +119 -0
- package/src/types/events.ts +252 -0
- package/src/types/framework.ts +211 -0
- package/src/types/index.ts +6 -0
- package/src/types/inference-log.ts +64 -0
- package/src/types/module.ts +367 -0
- package/src/types/trace.ts +196 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* McplServerRegistry — manages all connected MCPL server connections.
|
|
3
|
+
*
|
|
4
|
+
* Provides lookup by id, capability filtering, and feature set matching.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { McplServerConfig, McplHostCapabilities } from './types.js';
|
|
8
|
+
import { McplServerConnection } from './server-connection.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Capability keys that can be queried via `getServersWithCapability`.
|
|
12
|
+
*/
|
|
13
|
+
export type McplCapabilityQuery =
|
|
14
|
+
| 'pushEvents'
|
|
15
|
+
| 'contextHooks.beforeInference'
|
|
16
|
+
| 'contextHooks.afterInference'
|
|
17
|
+
| 'inferenceRequest'
|
|
18
|
+
| 'modelInfo';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Container that manages all connected MCPL servers.
|
|
22
|
+
*
|
|
23
|
+
* Provides methods to add/remove servers, look up by id, and query
|
|
24
|
+
* servers by advertised capabilities or feature set names.
|
|
25
|
+
*/
|
|
26
|
+
export class McplServerRegistry {
|
|
27
|
+
private servers = new Map<string, McplServerConnection>();
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Connect to an MCPL server and register it.
|
|
31
|
+
*
|
|
32
|
+
* Throws if a server with the same id is already registered, or if
|
|
33
|
+
* the connection/handshake fails.
|
|
34
|
+
*/
|
|
35
|
+
async addServer(
|
|
36
|
+
config: McplServerConfig,
|
|
37
|
+
hostCapabilities: McplHostCapabilities,
|
|
38
|
+
): Promise<McplServerConnection> {
|
|
39
|
+
if (this.servers.has(config.id)) {
|
|
40
|
+
throw new Error(`MCPL server "${config.id}" is already registered`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const connection = config.reconnect
|
|
44
|
+
? await McplServerConnection.connectWithReconnect(config, hostCapabilities)
|
|
45
|
+
: await McplServerConnection.connect(config, hostCapabilities);
|
|
46
|
+
this.servers.set(config.id, connection);
|
|
47
|
+
|
|
48
|
+
// Auto-remove on unexpected close (unless reconnect will re-add)
|
|
49
|
+
connection.on('close', () => {
|
|
50
|
+
if (!config.reconnect) {
|
|
51
|
+
this.servers.delete(config.id);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// Re-emit reconnect events for observability
|
|
56
|
+
connection.on('reconnect', () => {
|
|
57
|
+
// Connection already in the map — capabilities may have changed
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
return connection;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Disconnect and remove a server by id.
|
|
65
|
+
*
|
|
66
|
+
* No-op if the server is not registered.
|
|
67
|
+
*/
|
|
68
|
+
async removeServer(id: string): Promise<void> {
|
|
69
|
+
const connection = this.servers.get(id);
|
|
70
|
+
if (!connection) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
this.servers.delete(id);
|
|
74
|
+
await connection.close();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Get a server connection by id, or null if not found.
|
|
79
|
+
*/
|
|
80
|
+
getServer(id: string): McplServerConnection | null {
|
|
81
|
+
return this.servers.get(id) ?? null;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Get all currently connected servers.
|
|
86
|
+
*/
|
|
87
|
+
getAllServers(): McplServerConnection[] {
|
|
88
|
+
return Array.from(this.servers.values());
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Get all servers that advertise a specific capability.
|
|
93
|
+
*
|
|
94
|
+
* Supported capability queries:
|
|
95
|
+
* - `'pushEvents'` — `capabilities.pushEvents === true`
|
|
96
|
+
* - `'contextHooks.beforeInference'` — `capabilities.contextHooks?.beforeInference === true`
|
|
97
|
+
* - `'contextHooks.afterInference'` — `capabilities.contextHooks?.afterInference` is truthy
|
|
98
|
+
* - `'inferenceRequest'` — `capabilities.inferenceRequest` is truthy
|
|
99
|
+
* - `'modelInfo'` — `capabilities.modelInfo === true`
|
|
100
|
+
*/
|
|
101
|
+
getServersWithCapability(cap: McplCapabilityQuery): McplServerConnection[] {
|
|
102
|
+
return this.getAllServers().filter((server) => {
|
|
103
|
+
const caps = server.capabilities;
|
|
104
|
+
if (!caps) return false;
|
|
105
|
+
|
|
106
|
+
switch (cap) {
|
|
107
|
+
case 'pushEvents':
|
|
108
|
+
return caps.pushEvents === true;
|
|
109
|
+
case 'contextHooks.beforeInference':
|
|
110
|
+
return caps.contextHooks?.beforeInference === true;
|
|
111
|
+
case 'contextHooks.afterInference':
|
|
112
|
+
return !!caps.contextHooks?.afterInference;
|
|
113
|
+
case 'inferenceRequest':
|
|
114
|
+
return !!caps.inferenceRequest;
|
|
115
|
+
case 'modelInfo':
|
|
116
|
+
return caps.modelInfo === true;
|
|
117
|
+
default:
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Get all servers that declare a feature set with the given name.
|
|
125
|
+
*
|
|
126
|
+
* Checks `capabilities.featureSets` for a key matching `featureSet`.
|
|
127
|
+
*/
|
|
128
|
+
getServersForFeatureSet(featureSet: string): McplServerConnection[] {
|
|
129
|
+
return this.getAllServers().filter((server) => {
|
|
130
|
+
const caps = server.capabilities;
|
|
131
|
+
if (!caps?.featureSets) return false;
|
|
132
|
+
return featureSet in caps.featureSets;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Close all server connections and clear the registry.
|
|
138
|
+
*/
|
|
139
|
+
async closeAll(): Promise<void> {
|
|
140
|
+
const connections = Array.from(this.servers.values());
|
|
141
|
+
this.servers.clear();
|
|
142
|
+
await Promise.all(connections.map((c) => c.close()));
|
|
143
|
+
}
|
|
144
|
+
}
|