@kadi.build/core 0.0.1-alpha.1 → 0.0.1-alpha.11
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 +361 -230
- package/dist/abilities/AbilityCache.d.ts +242 -0
- package/dist/abilities/AbilityCache.d.ts.map +1 -0
- package/dist/abilities/AbilityCache.js +285 -0
- package/dist/abilities/AbilityCache.js.map +1 -0
- package/dist/abilities/AbilityContext.d.ts +215 -0
- package/dist/abilities/AbilityContext.d.ts.map +1 -0
- package/dist/abilities/AbilityContext.js +36 -0
- package/dist/abilities/AbilityContext.js.map +1 -0
- package/dist/abilities/AbilityLoader.d.ts +203 -0
- package/dist/abilities/AbilityLoader.d.ts.map +1 -0
- package/dist/abilities/AbilityLoader.js +343 -0
- package/dist/abilities/AbilityLoader.js.map +1 -0
- package/dist/abilities/AbilityProxy.d.ts +496 -0
- package/dist/abilities/AbilityProxy.d.ts.map +1 -0
- package/dist/abilities/AbilityProxy.js +551 -0
- package/dist/abilities/AbilityProxy.js.map +1 -0
- package/dist/abilities/AbilityValidator.d.ts +172 -0
- package/dist/abilities/AbilityValidator.d.ts.map +1 -0
- package/dist/abilities/AbilityValidator.js +253 -0
- package/dist/abilities/AbilityValidator.js.map +1 -0
- package/dist/abilities/index.d.ts +26 -0
- package/dist/abilities/index.d.ts.map +1 -0
- package/dist/abilities/index.js +23 -0
- package/dist/abilities/index.js.map +1 -0
- package/dist/abilities/types.d.ts +223 -0
- package/dist/abilities/types.d.ts.map +1 -0
- package/dist/abilities/types.js +10 -0
- package/dist/abilities/types.js.map +1 -0
- package/dist/api/index.d.ts +92 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +124 -0
- package/dist/api/index.js.map +1 -0
- package/dist/broker/BrokerConnection.d.ts +253 -0
- package/dist/broker/BrokerConnection.d.ts.map +1 -0
- package/dist/broker/BrokerConnection.js +434 -0
- package/dist/broker/BrokerConnection.js.map +1 -0
- package/dist/broker/BrokerConnectionManager.d.ts +216 -0
- package/dist/broker/BrokerConnectionManager.d.ts.map +1 -0
- package/dist/broker/BrokerConnectionManager.js +305 -0
- package/dist/broker/BrokerConnectionManager.js.map +1 -0
- package/dist/broker/BrokerProtocol.d.ts +280 -0
- package/dist/broker/BrokerProtocol.d.ts.map +1 -0
- package/dist/broker/BrokerProtocol.js +466 -0
- package/dist/broker/BrokerProtocol.js.map +1 -0
- package/dist/broker/index.d.ts +9 -0
- package/dist/broker/index.d.ts.map +1 -0
- package/dist/broker/index.js +9 -0
- package/dist/broker/index.js.map +1 -0
- package/dist/client/KadiClient.d.ts +459 -0
- package/dist/client/KadiClient.d.ts.map +1 -0
- package/dist/client/KadiClient.js +902 -0
- package/dist/client/KadiClient.js.map +1 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +138 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +226 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/ConfigResolver.d.ts +135 -0
- package/dist/config/ConfigResolver.d.ts.map +1 -0
- package/dist/config/ConfigResolver.js +282 -0
- package/dist/config/ConfigResolver.js.map +1 -0
- package/dist/config/index.d.ts +8 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +8 -0
- package/dist/config/index.js.map +1 -0
- package/dist/errors/index.d.ts +9 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +8 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/events/EventHub.d.ts +172 -0
- package/dist/events/EventHub.d.ts.map +1 -0
- package/dist/events/EventHub.js +333 -0
- package/dist/events/EventHub.js.map +1 -0
- package/dist/events/index.d.ts +7 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +7 -0
- package/dist/events/index.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/messages/index.d.ts +33 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/messages/index.js +33 -0
- package/dist/messages/index.js.map +1 -0
- package/dist/schemas/index.d.ts +22 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +27 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/kadi-extensions.d.ts +231 -0
- package/dist/schemas/kadi-extensions.d.ts.map +1 -0
- package/dist/schemas/kadi-extensions.js +14 -0
- package/dist/schemas/kadi-extensions.js.map +1 -0
- package/dist/schemas/mcp/schema.d.ts +1399 -0
- package/dist/schemas/mcp/schema.d.ts.map +1 -0
- package/dist/schemas/mcp/schema.js +53 -0
- package/dist/schemas/mcp/schema.js.map +1 -0
- package/dist/schemas/mcp/version.d.ts +37 -0
- package/dist/schemas/mcp/version.d.ts.map +1 -0
- package/dist/schemas/mcp/version.js +39 -0
- package/dist/schemas/mcp/version.js.map +1 -0
- package/dist/schemas/schema-builders.d.ts +178 -0
- package/dist/schemas/schema-builders.d.ts.map +1 -0
- package/dist/schemas/schema-builders.js +258 -0
- package/dist/schemas/schema-builders.js.map +1 -0
- package/dist/schemas/zod-helpers.d.ts +129 -0
- package/dist/schemas/zod-helpers.d.ts.map +1 -0
- package/dist/schemas/zod-helpers.js +225 -0
- package/dist/schemas/zod-helpers.js.map +1 -0
- package/dist/schemas/zod-to-json-schema.d.ts +159 -0
- package/dist/schemas/zod-to-json-schema.d.ts.map +1 -0
- package/dist/schemas/zod-to-json-schema.js +154 -0
- package/dist/schemas/zod-to-json-schema.js.map +1 -0
- package/dist/tools/ToolRegistry.d.ts +256 -0
- package/dist/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/tools/ToolRegistry.js +340 -0
- package/dist/tools/ToolRegistry.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/transports/BrokerTransport.d.ts +151 -0
- package/dist/transports/BrokerTransport.d.ts.map +1 -0
- package/dist/transports/BrokerTransport.js +261 -0
- package/dist/transports/BrokerTransport.js.map +1 -0
- package/dist/transports/NativeTransport.d.ts +178 -0
- package/dist/transports/NativeTransport.d.ts.map +1 -0
- package/dist/transports/NativeTransport.js +397 -0
- package/dist/transports/NativeTransport.js.map +1 -0
- package/dist/transports/StdioTransport.d.ts +250 -0
- package/dist/transports/StdioTransport.d.ts.map +1 -0
- package/dist/transports/StdioTransport.js +487 -0
- package/dist/transports/StdioTransport.js.map +1 -0
- package/dist/transports/index.d.ts +10 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +9 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/types/broker.d.ts +279 -0
- package/dist/types/broker.d.ts.map +1 -0
- package/dist/types/broker.js +19 -0
- package/dist/types/broker.js.map +1 -0
- package/dist/types/config.d.ts +325 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +17 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/errors.d.ts +178 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +165 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/events.d.ts +210 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +8 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +34 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/protocol.d.ts +48 -0
- package/dist/types/protocol.d.ts.map +1 -0
- package/dist/types/protocol.js +11 -0
- package/dist/types/protocol.js.map +1 -0
- package/dist/types/tools.d.ts +67 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +16 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types/transport.d.ts +250 -0
- package/dist/types/transport.d.ts.map +1 -0
- package/dist/types/transport.js +18 -0
- package/dist/types/transport.js.map +1 -0
- package/dist/types/zod-tools.d.ts +198 -0
- package/dist/types/zod-tools.d.ts.map +1 -0
- package/dist/types/zod-tools.js +14 -0
- package/dist/types/zod-tools.js.map +1 -0
- package/dist/utils/StdioMessageReader.d.ts +122 -0
- package/dist/utils/StdioMessageReader.d.ts.map +1 -0
- package/dist/utils/StdioMessageReader.js +209 -0
- package/dist/utils/StdioMessageReader.js.map +1 -0
- package/dist/utils/StdioMessageWriter.d.ts +104 -0
- package/dist/utils/StdioMessageWriter.d.ts.map +1 -0
- package/dist/utils/StdioMessageWriter.js +162 -0
- package/dist/utils/StdioMessageWriter.js.map +1 -0
- package/dist/validation/SchemaValidator.d.ts +208 -0
- package/dist/validation/SchemaValidator.d.ts.map +1 -0
- package/dist/validation/SchemaValidator.js +411 -0
- package/dist/validation/SchemaValidator.js.map +1 -0
- package/dist/validation/index.d.ts +11 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +10 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +70 -5
- package/agent.json +0 -18
- package/broker.js +0 -214
- package/index.js +0 -370
- package/ipc.js +0 -220
- package/ipcInterfaces/pythonAbilityIPC.py +0 -177
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ability Proxy
|
|
3
|
+
*
|
|
4
|
+
* Creates a proxy object that makes calling ability methods feel natural.
|
|
5
|
+
* Enables syntax like: `ability.methodName(params)` instead of
|
|
6
|
+
* `transport.invoke('methodName', params)`.
|
|
7
|
+
*
|
|
8
|
+
* @module abilities/AbilityProxy
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from 'events';
|
|
11
|
+
import { KadiError, ErrorCode } from '../types/index.js';
|
|
12
|
+
import { SchemaValidator } from '../validation/SchemaValidator.js';
|
|
13
|
+
/**
|
|
14
|
+
* Ability Proxy (internal implementation)
|
|
15
|
+
*
|
|
16
|
+
* Creates a proxy object that intercepts property access and converts it
|
|
17
|
+
* to method invocations on the underlying transport.
|
|
18
|
+
*
|
|
19
|
+
* This class implements AbilityFramework, providing all the framework methods.
|
|
20
|
+
* The runtime Proxy wrapper adds dynamic method access on top.
|
|
21
|
+
*
|
|
22
|
+
* **Internal Architecture:**
|
|
23
|
+
* - This class extends EventEmitter and implements AbilityFramework
|
|
24
|
+
* - createProxy() wraps an instance in a Proxy for dynamic method access
|
|
25
|
+
* - The Proxy intercepts property access and routes to __call()
|
|
26
|
+
* - Framework methods (__name, __getMethods, etc.) are handled directly
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const proxy = AbilityProxy.create('calculator', transport, 'broker');
|
|
31
|
+
*
|
|
32
|
+
* // These all work:
|
|
33
|
+
* const result1 = await proxy.add({ a: 5, b: 3 });
|
|
34
|
+
* const result2 = await proxy.__call('add', { a: 5, b: 3 });
|
|
35
|
+
*
|
|
36
|
+
* // Get methods
|
|
37
|
+
* const methods = proxy.__getMethods();
|
|
38
|
+
*
|
|
39
|
+
* // Get schema
|
|
40
|
+
* const schema = proxy.__getSchema('add');
|
|
41
|
+
*
|
|
42
|
+
* // Events
|
|
43
|
+
* proxy.__on('calculation.done', (data) => {
|
|
44
|
+
* console.log('Done:', data);
|
|
45
|
+
* });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export class AbilityProxy extends EventEmitter {
|
|
49
|
+
/**
|
|
50
|
+
* Ability name
|
|
51
|
+
*/
|
|
52
|
+
__name;
|
|
53
|
+
/**
|
|
54
|
+
* Transport type
|
|
55
|
+
*/
|
|
56
|
+
__transport;
|
|
57
|
+
/**
|
|
58
|
+
* Underlying transport
|
|
59
|
+
*/
|
|
60
|
+
transport;
|
|
61
|
+
/**
|
|
62
|
+
* Schema validator for runtime validation
|
|
63
|
+
*/
|
|
64
|
+
validator;
|
|
65
|
+
/**
|
|
66
|
+
* Create a new AbilityProxy (private constructor)
|
|
67
|
+
*
|
|
68
|
+
* Use AbilityProxy.create() to get a proxied ability object.
|
|
69
|
+
*
|
|
70
|
+
* @param name - Ability name
|
|
71
|
+
* @param transport - Ability transport
|
|
72
|
+
* @param transportType - Transport type identifier
|
|
73
|
+
*/
|
|
74
|
+
constructor(name, transport, transportType) {
|
|
75
|
+
super();
|
|
76
|
+
this.__name = name;
|
|
77
|
+
this.__transport = transportType;
|
|
78
|
+
this.transport = transport;
|
|
79
|
+
this.validator = new SchemaValidator();
|
|
80
|
+
// Register schemas for all methods that have them
|
|
81
|
+
this.registerMethodSchemas();
|
|
82
|
+
// Forward transport events
|
|
83
|
+
this.transport.on('event', (eventData) => {
|
|
84
|
+
this.emit('event', eventData);
|
|
85
|
+
// Also emit the specific event
|
|
86
|
+
if (eventData && typeof eventData === 'object' && 'eventName' in eventData) {
|
|
87
|
+
this.emit(eventData.eventName, eventData);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
this.transport.on('error', (error) => {
|
|
91
|
+
this.emit('error', error);
|
|
92
|
+
});
|
|
93
|
+
this.transport.on('disconnected', () => {
|
|
94
|
+
this.emit('disconnected');
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Create a new proxied ability
|
|
99
|
+
*
|
|
100
|
+
* Factory method that creates an AbilityProxy and wraps it in a Proxy
|
|
101
|
+
* to enable dynamic method access.
|
|
102
|
+
*
|
|
103
|
+
* @param name - Ability name
|
|
104
|
+
* @param transport - Ability transport
|
|
105
|
+
* @param transportType - Transport type identifier
|
|
106
|
+
* @returns Proxied ability object with dynamic method access and framework methods
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* // Create ability proxy:
|
|
111
|
+
* const calc = AbilityProxy.create('calculator', transport, 'broker');
|
|
112
|
+
*
|
|
113
|
+
* // Call methods dynamically:
|
|
114
|
+
* await calc.add({ a: 5, b: 3 });
|
|
115
|
+
* await calc.subtract({ a: 10, b: 4 });
|
|
116
|
+
*
|
|
117
|
+
* // Access framework methods:
|
|
118
|
+
* console.log(calc.__name); // "calculator"
|
|
119
|
+
* console.log(calc.__getMethods()); // ["add", "subtract", ...]
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
static create(name, transport, transportType) {
|
|
123
|
+
const instance = new AbilityProxy(name, transport, transportType);
|
|
124
|
+
return instance.createProxy();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Register schemas for all methods with the validator
|
|
128
|
+
*
|
|
129
|
+
* Iterates over all methods and registers their schemas for validation.
|
|
130
|
+
* Methods without schemas will not have validation.
|
|
131
|
+
*/
|
|
132
|
+
registerMethodSchemas() {
|
|
133
|
+
const methods = this.transport.getMethods();
|
|
134
|
+
for (const method of methods) {
|
|
135
|
+
const schema = this.transport.getMethodSchema?.(method);
|
|
136
|
+
if (schema?.inputSchema) {
|
|
137
|
+
// Register with validator (output schema is optional)
|
|
138
|
+
this.validator.registerTool(method, schema.inputSchema, schema.outputSchema);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get available methods
|
|
144
|
+
*
|
|
145
|
+
* @returns Array of method names
|
|
146
|
+
*/
|
|
147
|
+
__getMethods() {
|
|
148
|
+
return this.transport.getMethods();
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get schema for a method
|
|
152
|
+
*
|
|
153
|
+
* @param method - Method name
|
|
154
|
+
* @returns Method schema or undefined
|
|
155
|
+
*/
|
|
156
|
+
__getSchema(method) {
|
|
157
|
+
return this.transport.getMethodSchema?.(method);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get all schemas for all methods
|
|
161
|
+
*
|
|
162
|
+
* @returns Map of method names to their schemas
|
|
163
|
+
*/
|
|
164
|
+
__getAllSchemas() {
|
|
165
|
+
const schemas = {};
|
|
166
|
+
const methods = this.__getMethods();
|
|
167
|
+
for (const method of methods) {
|
|
168
|
+
const schema = this.__getSchema(method);
|
|
169
|
+
if (schema) {
|
|
170
|
+
schemas[method] = schema;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return schemas;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Read agent.json representation (native transport with KadiClient only)
|
|
177
|
+
*
|
|
178
|
+
* Returns the agent.json representation from the loaded ability if it's a KadiClient
|
|
179
|
+
* instance loaded via native transport. Returns undefined for other transports
|
|
180
|
+
* or legacy modules.
|
|
181
|
+
*
|
|
182
|
+
* **What this returns:**
|
|
183
|
+
* - Runtime representation of the ability's agent.json file
|
|
184
|
+
* - Contains name, version, description, and tools
|
|
185
|
+
* - Tools field is mapped from agent.json's 'exports' field
|
|
186
|
+
*
|
|
187
|
+
* **Use Case:** Type generation during `kadi install`
|
|
188
|
+
* The CLI can call this method to get the agent.json representation including schemas,
|
|
189
|
+
* then generate TypeScript .d.ts files for autocomplete.
|
|
190
|
+
*
|
|
191
|
+
* @returns agent.json representation or undefined
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* const calc = await client.load('calculator', 'native', { path: './abilities/calc' });
|
|
196
|
+
* const agentJson = calc.__readAgentJson();
|
|
197
|
+
*
|
|
198
|
+
* if (agentJson) {
|
|
199
|
+
* console.log('Ability:', agentJson.name, agentJson.version);
|
|
200
|
+
* console.log('Tools:', agentJson.tools.map(t => t.name));
|
|
201
|
+
*
|
|
202
|
+
* // CLI would use this for type generation:
|
|
203
|
+
* // await TypeGenerator.generate(agentJson, './types/calculator.d.ts');
|
|
204
|
+
* }
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
__readAgentJson() {
|
|
208
|
+
// Check if transport has readAgentJson() method (NativeTransport only)
|
|
209
|
+
if ('readAgentJson' in this.transport && typeof this.transport.readAgentJson === 'function') {
|
|
210
|
+
return this.transport.readAgentJson();
|
|
211
|
+
}
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get usage information for a method
|
|
216
|
+
*
|
|
217
|
+
* Formats schema into human-readable usage documentation.
|
|
218
|
+
*
|
|
219
|
+
* @param method - Method name
|
|
220
|
+
* @returns Formatted usage string
|
|
221
|
+
*/
|
|
222
|
+
__getUsage(method) {
|
|
223
|
+
const schema = this.__getSchema(method);
|
|
224
|
+
if (!schema) {
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
const lines = [];
|
|
228
|
+
// Method signature
|
|
229
|
+
lines.push(`${method}(params)`);
|
|
230
|
+
// Description
|
|
231
|
+
if (schema.description) {
|
|
232
|
+
lines.push(` Description: ${schema.description}`);
|
|
233
|
+
}
|
|
234
|
+
// Input parameters
|
|
235
|
+
if (schema.inputSchema) {
|
|
236
|
+
const inputExample = this.generateExampleFromSchema(schema.inputSchema);
|
|
237
|
+
lines.push(` Parameters: ${JSON.stringify(inputExample)}`);
|
|
238
|
+
}
|
|
239
|
+
// Output type
|
|
240
|
+
if (schema.outputSchema) {
|
|
241
|
+
const outputExample = this.generateExampleFromSchema(schema.outputSchema);
|
|
242
|
+
lines.push(` Returns: ${JSON.stringify(outputExample)}`);
|
|
243
|
+
}
|
|
244
|
+
// Usage example
|
|
245
|
+
const exampleInput = schema.inputSchema
|
|
246
|
+
? this.generateExampleFromSchema(schema.inputSchema)
|
|
247
|
+
: {};
|
|
248
|
+
lines.push(` Example: ability.${method}(${JSON.stringify(exampleInput)})`);
|
|
249
|
+
return lines.join('\n');
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get complete API documentation
|
|
253
|
+
*
|
|
254
|
+
* Returns formatted documentation for all methods.
|
|
255
|
+
*
|
|
256
|
+
* @returns API documentation string
|
|
257
|
+
*/
|
|
258
|
+
__getAPI() {
|
|
259
|
+
const methods = this.__getMethods();
|
|
260
|
+
const lines = [];
|
|
261
|
+
lines.push(`Ability: ${this.__name}`);
|
|
262
|
+
lines.push(`Transport: ${this.__transport}`);
|
|
263
|
+
lines.push(`Methods: ${methods.length}`);
|
|
264
|
+
lines.push('');
|
|
265
|
+
for (const method of methods) {
|
|
266
|
+
const usage = this.__getUsage(method);
|
|
267
|
+
if (usage) {
|
|
268
|
+
lines.push(usage);
|
|
269
|
+
lines.push('');
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
lines.push(`${method}(params)`);
|
|
273
|
+
lines.push(' (No schema available)');
|
|
274
|
+
lines.push('');
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return lines.join('\n');
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Call a method directly
|
|
281
|
+
*
|
|
282
|
+
* @template TInput - Input type
|
|
283
|
+
* @template TOutput - Output type
|
|
284
|
+
* @param method - Method name
|
|
285
|
+
* @param params - Method parameters
|
|
286
|
+
* @returns Promise resolving to method result
|
|
287
|
+
*/
|
|
288
|
+
async __call(method, params) {
|
|
289
|
+
// Step 1: Validate input if schema exists
|
|
290
|
+
if (this.validator.hasToolSchemas(method)) {
|
|
291
|
+
const validation = this.validator.validateInput(method, params);
|
|
292
|
+
if (!validation.valid) {
|
|
293
|
+
// Generate example from schema for helpful error message
|
|
294
|
+
const schema = this.__getSchema(method);
|
|
295
|
+
const example = schema?.inputSchema
|
|
296
|
+
? this.generateExampleFromSchema(schema.inputSchema)
|
|
297
|
+
: undefined;
|
|
298
|
+
throw new KadiError(`Invalid parameters for ${this.__name}.${method}()`, ErrorCode.INVALID_INPUT, 400, {
|
|
299
|
+
abilityName: this.__name,
|
|
300
|
+
method,
|
|
301
|
+
errors: validation.errors,
|
|
302
|
+
received: params,
|
|
303
|
+
expected: schema?.inputSchema,
|
|
304
|
+
example: example ? `Example: ${JSON.stringify(example, null, 2)}` : undefined,
|
|
305
|
+
hint: 'Check parameter types and required fields'
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// Step 2: Invoke method on transport
|
|
310
|
+
try {
|
|
311
|
+
return await this.transport.invoke(method, params);
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
// Don't wrap KadiError - preserve original error
|
|
315
|
+
if (error instanceof KadiError) {
|
|
316
|
+
throw error;
|
|
317
|
+
}
|
|
318
|
+
// Enhance Error with context
|
|
319
|
+
if (error instanceof Error) {
|
|
320
|
+
error.message = `${error.message} (in ${this.__name}.${method})`;
|
|
321
|
+
throw error;
|
|
322
|
+
}
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Disconnect the ability
|
|
328
|
+
*/
|
|
329
|
+
async __disconnect() {
|
|
330
|
+
await this.transport.disconnect();
|
|
331
|
+
this.removeAllListeners();
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Check if connected
|
|
335
|
+
*/
|
|
336
|
+
__isConnected() {
|
|
337
|
+
// Check if transport has methods (indicates successful connection)
|
|
338
|
+
return this.transport.getMethods().length > 0;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Subscribe to events
|
|
342
|
+
*
|
|
343
|
+
* @param event - Event name
|
|
344
|
+
* @param callback - Event callback
|
|
345
|
+
* @returns this for chaining
|
|
346
|
+
*/
|
|
347
|
+
__on(event, callback) {
|
|
348
|
+
this.on(event, callback);
|
|
349
|
+
return this;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Generate example data from JSON Schema
|
|
353
|
+
*
|
|
354
|
+
* Creates sample values based on schema types and constraints.
|
|
355
|
+
* Useful for showing users what valid input looks like.
|
|
356
|
+
*
|
|
357
|
+
* @param schema - JSON Schema (MCP inputSchema)
|
|
358
|
+
* @returns Example data matching schema
|
|
359
|
+
*
|
|
360
|
+
* @example
|
|
361
|
+
* ```typescript
|
|
362
|
+
* const schema = {
|
|
363
|
+
* type: 'object',
|
|
364
|
+
* properties: {
|
|
365
|
+
* name: { type: 'string' },
|
|
366
|
+
* age: { type: 'number' }
|
|
367
|
+
* },
|
|
368
|
+
* required: ['name']
|
|
369
|
+
* };
|
|
370
|
+
* const example = generateExampleFromSchema(schema);
|
|
371
|
+
* // Returns: { name: "example", age: 0 }
|
|
372
|
+
* ```
|
|
373
|
+
*/
|
|
374
|
+
generateExampleFromSchema(schema) {
|
|
375
|
+
// Type guard for schema object
|
|
376
|
+
if (!schema || typeof schema !== 'object') {
|
|
377
|
+
return undefined;
|
|
378
|
+
}
|
|
379
|
+
const schemaObj = schema;
|
|
380
|
+
// Use default value if provided
|
|
381
|
+
if (schemaObj.default !== undefined) {
|
|
382
|
+
return schemaObj.default;
|
|
383
|
+
}
|
|
384
|
+
// Use first example if provided
|
|
385
|
+
if (schemaObj.examples && Array.isArray(schemaObj.examples) && schemaObj.examples.length > 0) {
|
|
386
|
+
return schemaObj.examples[0];
|
|
387
|
+
}
|
|
388
|
+
// Use enum value if provided
|
|
389
|
+
if (schemaObj.enum && Array.isArray(schemaObj.enum) && schemaObj.enum.length > 0) {
|
|
390
|
+
return schemaObj.enum[0];
|
|
391
|
+
}
|
|
392
|
+
// Get primary type (handle array of types)
|
|
393
|
+
const type = Array.isArray(schemaObj.type) ? schemaObj.type[0] : schemaObj.type;
|
|
394
|
+
// Generate based on type
|
|
395
|
+
switch (type) {
|
|
396
|
+
case 'object': {
|
|
397
|
+
const result = {};
|
|
398
|
+
const properties = schemaObj.properties || {};
|
|
399
|
+
const required = schemaObj.required || [];
|
|
400
|
+
// Generate values for all properties (prioritize required)
|
|
401
|
+
for (const [key, propSchema] of Object.entries(properties)) {
|
|
402
|
+
if (required.includes(key) || Math.random() > 0.5) {
|
|
403
|
+
result[key] = this.generateExampleFromSchema(propSchema);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return result;
|
|
407
|
+
}
|
|
408
|
+
case 'array':
|
|
409
|
+
// Generate array with one example item
|
|
410
|
+
return schemaObj.items ? [this.generateExampleFromSchema(schemaObj.items)] : [];
|
|
411
|
+
case 'string':
|
|
412
|
+
return 'example';
|
|
413
|
+
case 'number':
|
|
414
|
+
case 'integer':
|
|
415
|
+
return 0;
|
|
416
|
+
case 'boolean':
|
|
417
|
+
return true;
|
|
418
|
+
case 'null':
|
|
419
|
+
return null;
|
|
420
|
+
default:
|
|
421
|
+
return undefined;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Create the proxy object
|
|
426
|
+
*
|
|
427
|
+
* Wraps this AbilityProxy instance in a JavaScript Proxy to intercept
|
|
428
|
+
* property access and convert it to method calls.
|
|
429
|
+
*
|
|
430
|
+
* **How this satisfies LoadedAbility type:**
|
|
431
|
+
* - Target (this) implements AbilityFramework (all __ methods)
|
|
432
|
+
* - Proxy handler provides dynamic method access (DynamicMethods)
|
|
433
|
+
* - Result is AbilityFramework & DynamicMethods = LoadedAbility
|
|
434
|
+
*
|
|
435
|
+
* @returns Proxied ability (satisfies LoadedAbility<DynamicMethods>)
|
|
436
|
+
*/
|
|
437
|
+
createProxy() {
|
|
438
|
+
// Create JavaScript Proxy that intercepts ALL property access.
|
|
439
|
+
// This is what enables `ability.anyMethod()` to work at runtime.
|
|
440
|
+
//
|
|
441
|
+
// Type assertion is safe because:
|
|
442
|
+
// 1. Target (this) implements AbilityFramework ✓
|
|
443
|
+
// 2. Proxy handler provides Record<string, Function> behavior ✓
|
|
444
|
+
// 3. Together they satisfy LoadedAbility = DynamicMethods & AbilityFramework ✓
|
|
445
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
446
|
+
const proxy = new Proxy(this, {
|
|
447
|
+
get: (target, prop) => {
|
|
448
|
+
// Allow access to special methods and properties
|
|
449
|
+
if (typeof prop === 'symbol' || prop.startsWith('__') || prop.startsWith('_')) {
|
|
450
|
+
const value = Reflect.get(target, prop);
|
|
451
|
+
// Bind methods to target so 'this' refers to AbilityProxy instance
|
|
452
|
+
if (typeof value === 'function') {
|
|
453
|
+
return value.bind(target);
|
|
454
|
+
}
|
|
455
|
+
return value;
|
|
456
|
+
}
|
|
457
|
+
// EventEmitter methods
|
|
458
|
+
if (prop === 'on' ||
|
|
459
|
+
prop === 'once' ||
|
|
460
|
+
prop === 'off' ||
|
|
461
|
+
prop === 'emit' ||
|
|
462
|
+
prop === 'removeListener' ||
|
|
463
|
+
prop === 'removeAllListeners' ||
|
|
464
|
+
prop === 'listeners' ||
|
|
465
|
+
prop === 'eventNames') {
|
|
466
|
+
const value = Reflect.get(target, prop);
|
|
467
|
+
// Bind methods to target
|
|
468
|
+
if (typeof value === 'function') {
|
|
469
|
+
return value.bind(target);
|
|
470
|
+
}
|
|
471
|
+
return value;
|
|
472
|
+
}
|
|
473
|
+
// Check if this is an available method
|
|
474
|
+
const methods = target.__getMethods();
|
|
475
|
+
if (methods.includes(prop)) {
|
|
476
|
+
// Return a function that invokes the method
|
|
477
|
+
return async (params) => {
|
|
478
|
+
return await target.__call(prop, params);
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
// Property doesn't exist
|
|
482
|
+
return undefined;
|
|
483
|
+
},
|
|
484
|
+
has: (target, prop) => {
|
|
485
|
+
if (typeof prop === 'symbol') {
|
|
486
|
+
return Reflect.has(target, prop);
|
|
487
|
+
}
|
|
488
|
+
// Special methods exist
|
|
489
|
+
if (prop.startsWith('__')) {
|
|
490
|
+
return Reflect.has(target, prop);
|
|
491
|
+
}
|
|
492
|
+
// Check if it's an available method
|
|
493
|
+
const methods = target.__getMethods();
|
|
494
|
+
return methods.includes(prop);
|
|
495
|
+
},
|
|
496
|
+
ownKeys: (target) => {
|
|
497
|
+
// Return special methods + available methods
|
|
498
|
+
const specialKeys = [
|
|
499
|
+
'__name',
|
|
500
|
+
'__transport',
|
|
501
|
+
'__getMethods',
|
|
502
|
+
'__getSchema',
|
|
503
|
+
'__getAllSchemas',
|
|
504
|
+
'__readAgentJson',
|
|
505
|
+
'__getUsage',
|
|
506
|
+
'__getAPI',
|
|
507
|
+
'__call',
|
|
508
|
+
'__disconnect',
|
|
509
|
+
'__isConnected',
|
|
510
|
+
'__on'
|
|
511
|
+
];
|
|
512
|
+
const methods = target.__getMethods();
|
|
513
|
+
return [...specialKeys, ...methods];
|
|
514
|
+
},
|
|
515
|
+
getOwnPropertyDescriptor: (target, prop) => {
|
|
516
|
+
if (typeof prop === 'symbol') {
|
|
517
|
+
return Reflect.getOwnPropertyDescriptor(target, prop);
|
|
518
|
+
}
|
|
519
|
+
// Special methods
|
|
520
|
+
if (prop.startsWith('__')) {
|
|
521
|
+
const value = Reflect.get(target, prop);
|
|
522
|
+
return {
|
|
523
|
+
configurable: true,
|
|
524
|
+
enumerable: true,
|
|
525
|
+
writable: false,
|
|
526
|
+
value: typeof value === 'function' ? value.bind(target) : value
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
// Available methods
|
|
530
|
+
const methods = target.__getMethods();
|
|
531
|
+
if (methods.includes(prop)) {
|
|
532
|
+
return {
|
|
533
|
+
configurable: true,
|
|
534
|
+
enumerable: true,
|
|
535
|
+
writable: false,
|
|
536
|
+
value: async (params) => {
|
|
537
|
+
return await target.__call(prop, params);
|
|
538
|
+
}
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
return undefined;
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
// The Proxy object satisfies LoadedAbility interface:
|
|
545
|
+
// - All required methods (__name, __getMethods, etc.) exist on target
|
|
546
|
+
// - Index signature [methodName: string] is provided by the Proxy handler
|
|
547
|
+
// - Dynamic method calls are intercepted and routed to __call()
|
|
548
|
+
return proxy;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
//# sourceMappingURL=AbilityProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbilityProxy.js","sourceRoot":"","sources":["../../src/abilities/AbilityProxy.ts"],"names":[],"mappings":"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"}
|