@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.
Files changed (199) hide show
  1. package/README.md +361 -230
  2. package/dist/abilities/AbilityCache.d.ts +242 -0
  3. package/dist/abilities/AbilityCache.d.ts.map +1 -0
  4. package/dist/abilities/AbilityCache.js +285 -0
  5. package/dist/abilities/AbilityCache.js.map +1 -0
  6. package/dist/abilities/AbilityContext.d.ts +215 -0
  7. package/dist/abilities/AbilityContext.d.ts.map +1 -0
  8. package/dist/abilities/AbilityContext.js +36 -0
  9. package/dist/abilities/AbilityContext.js.map +1 -0
  10. package/dist/abilities/AbilityLoader.d.ts +203 -0
  11. package/dist/abilities/AbilityLoader.d.ts.map +1 -0
  12. package/dist/abilities/AbilityLoader.js +343 -0
  13. package/dist/abilities/AbilityLoader.js.map +1 -0
  14. package/dist/abilities/AbilityProxy.d.ts +496 -0
  15. package/dist/abilities/AbilityProxy.d.ts.map +1 -0
  16. package/dist/abilities/AbilityProxy.js +551 -0
  17. package/dist/abilities/AbilityProxy.js.map +1 -0
  18. package/dist/abilities/AbilityValidator.d.ts +172 -0
  19. package/dist/abilities/AbilityValidator.d.ts.map +1 -0
  20. package/dist/abilities/AbilityValidator.js +253 -0
  21. package/dist/abilities/AbilityValidator.js.map +1 -0
  22. package/dist/abilities/index.d.ts +26 -0
  23. package/dist/abilities/index.d.ts.map +1 -0
  24. package/dist/abilities/index.js +23 -0
  25. package/dist/abilities/index.js.map +1 -0
  26. package/dist/abilities/types.d.ts +223 -0
  27. package/dist/abilities/types.d.ts.map +1 -0
  28. package/dist/abilities/types.js +10 -0
  29. package/dist/abilities/types.js.map +1 -0
  30. package/dist/api/index.d.ts +92 -0
  31. package/dist/api/index.d.ts.map +1 -0
  32. package/dist/api/index.js +124 -0
  33. package/dist/api/index.js.map +1 -0
  34. package/dist/broker/BrokerConnection.d.ts +253 -0
  35. package/dist/broker/BrokerConnection.d.ts.map +1 -0
  36. package/dist/broker/BrokerConnection.js +434 -0
  37. package/dist/broker/BrokerConnection.js.map +1 -0
  38. package/dist/broker/BrokerConnectionManager.d.ts +216 -0
  39. package/dist/broker/BrokerConnectionManager.d.ts.map +1 -0
  40. package/dist/broker/BrokerConnectionManager.js +305 -0
  41. package/dist/broker/BrokerConnectionManager.js.map +1 -0
  42. package/dist/broker/BrokerProtocol.d.ts +280 -0
  43. package/dist/broker/BrokerProtocol.d.ts.map +1 -0
  44. package/dist/broker/BrokerProtocol.js +466 -0
  45. package/dist/broker/BrokerProtocol.js.map +1 -0
  46. package/dist/broker/index.d.ts +9 -0
  47. package/dist/broker/index.d.ts.map +1 -0
  48. package/dist/broker/index.js +9 -0
  49. package/dist/broker/index.js.map +1 -0
  50. package/dist/client/KadiClient.d.ts +459 -0
  51. package/dist/client/KadiClient.d.ts.map +1 -0
  52. package/dist/client/KadiClient.js +902 -0
  53. package/dist/client/KadiClient.js.map +1 -0
  54. package/dist/client/index.d.ts +7 -0
  55. package/dist/client/index.d.ts.map +1 -0
  56. package/dist/client/index.js +7 -0
  57. package/dist/client/index.js.map +1 -0
  58. package/dist/config/ConfigLoader.d.ts +138 -0
  59. package/dist/config/ConfigLoader.d.ts.map +1 -0
  60. package/dist/config/ConfigLoader.js +226 -0
  61. package/dist/config/ConfigLoader.js.map +1 -0
  62. package/dist/config/ConfigResolver.d.ts +135 -0
  63. package/dist/config/ConfigResolver.d.ts.map +1 -0
  64. package/dist/config/ConfigResolver.js +282 -0
  65. package/dist/config/ConfigResolver.js.map +1 -0
  66. package/dist/config/index.d.ts +8 -0
  67. package/dist/config/index.d.ts.map +1 -0
  68. package/dist/config/index.js +8 -0
  69. package/dist/config/index.js.map +1 -0
  70. package/dist/errors/index.d.ts +9 -0
  71. package/dist/errors/index.d.ts.map +1 -0
  72. package/dist/errors/index.js +8 -0
  73. package/dist/errors/index.js.map +1 -0
  74. package/dist/events/EventHub.d.ts +172 -0
  75. package/dist/events/EventHub.d.ts.map +1 -0
  76. package/dist/events/EventHub.js +333 -0
  77. package/dist/events/EventHub.js.map +1 -0
  78. package/dist/events/index.d.ts +7 -0
  79. package/dist/events/index.d.ts.map +1 -0
  80. package/dist/events/index.js +7 -0
  81. package/dist/events/index.js.map +1 -0
  82. package/dist/index.d.ts +50 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +67 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/messages/index.d.ts +33 -0
  87. package/dist/messages/index.d.ts.map +1 -0
  88. package/dist/messages/index.js +33 -0
  89. package/dist/messages/index.js.map +1 -0
  90. package/dist/schemas/index.d.ts +22 -0
  91. package/dist/schemas/index.d.ts.map +1 -0
  92. package/dist/schemas/index.js +27 -0
  93. package/dist/schemas/index.js.map +1 -0
  94. package/dist/schemas/kadi-extensions.d.ts +231 -0
  95. package/dist/schemas/kadi-extensions.d.ts.map +1 -0
  96. package/dist/schemas/kadi-extensions.js +14 -0
  97. package/dist/schemas/kadi-extensions.js.map +1 -0
  98. package/dist/schemas/mcp/schema.d.ts +1399 -0
  99. package/dist/schemas/mcp/schema.d.ts.map +1 -0
  100. package/dist/schemas/mcp/schema.js +53 -0
  101. package/dist/schemas/mcp/schema.js.map +1 -0
  102. package/dist/schemas/mcp/version.d.ts +37 -0
  103. package/dist/schemas/mcp/version.d.ts.map +1 -0
  104. package/dist/schemas/mcp/version.js +39 -0
  105. package/dist/schemas/mcp/version.js.map +1 -0
  106. package/dist/schemas/schema-builders.d.ts +178 -0
  107. package/dist/schemas/schema-builders.d.ts.map +1 -0
  108. package/dist/schemas/schema-builders.js +258 -0
  109. package/dist/schemas/schema-builders.js.map +1 -0
  110. package/dist/schemas/zod-helpers.d.ts +129 -0
  111. package/dist/schemas/zod-helpers.d.ts.map +1 -0
  112. package/dist/schemas/zod-helpers.js +225 -0
  113. package/dist/schemas/zod-helpers.js.map +1 -0
  114. package/dist/schemas/zod-to-json-schema.d.ts +159 -0
  115. package/dist/schemas/zod-to-json-schema.d.ts.map +1 -0
  116. package/dist/schemas/zod-to-json-schema.js +154 -0
  117. package/dist/schemas/zod-to-json-schema.js.map +1 -0
  118. package/dist/tools/ToolRegistry.d.ts +256 -0
  119. package/dist/tools/ToolRegistry.d.ts.map +1 -0
  120. package/dist/tools/ToolRegistry.js +340 -0
  121. package/dist/tools/ToolRegistry.js.map +1 -0
  122. package/dist/tools/index.d.ts +7 -0
  123. package/dist/tools/index.d.ts.map +1 -0
  124. package/dist/tools/index.js +7 -0
  125. package/dist/tools/index.js.map +1 -0
  126. package/dist/transports/BrokerTransport.d.ts +151 -0
  127. package/dist/transports/BrokerTransport.d.ts.map +1 -0
  128. package/dist/transports/BrokerTransport.js +261 -0
  129. package/dist/transports/BrokerTransport.js.map +1 -0
  130. package/dist/transports/NativeTransport.d.ts +178 -0
  131. package/dist/transports/NativeTransport.d.ts.map +1 -0
  132. package/dist/transports/NativeTransport.js +397 -0
  133. package/dist/transports/NativeTransport.js.map +1 -0
  134. package/dist/transports/StdioTransport.d.ts +250 -0
  135. package/dist/transports/StdioTransport.d.ts.map +1 -0
  136. package/dist/transports/StdioTransport.js +487 -0
  137. package/dist/transports/StdioTransport.js.map +1 -0
  138. package/dist/transports/index.d.ts +10 -0
  139. package/dist/transports/index.d.ts.map +1 -0
  140. package/dist/transports/index.js +9 -0
  141. package/dist/transports/index.js.map +1 -0
  142. package/dist/types/broker.d.ts +279 -0
  143. package/dist/types/broker.d.ts.map +1 -0
  144. package/dist/types/broker.js +19 -0
  145. package/dist/types/broker.js.map +1 -0
  146. package/dist/types/config.d.ts +325 -0
  147. package/dist/types/config.d.ts.map +1 -0
  148. package/dist/types/config.js +17 -0
  149. package/dist/types/config.js.map +1 -0
  150. package/dist/types/errors.d.ts +178 -0
  151. package/dist/types/errors.d.ts.map +1 -0
  152. package/dist/types/errors.js +165 -0
  153. package/dist/types/errors.js.map +1 -0
  154. package/dist/types/events.d.ts +210 -0
  155. package/dist/types/events.d.ts.map +1 -0
  156. package/dist/types/events.js +8 -0
  157. package/dist/types/events.js.map +1 -0
  158. package/dist/types/index.d.ts +34 -0
  159. package/dist/types/index.d.ts.map +1 -0
  160. package/dist/types/index.js +21 -0
  161. package/dist/types/index.js.map +1 -0
  162. package/dist/types/protocol.d.ts +48 -0
  163. package/dist/types/protocol.d.ts.map +1 -0
  164. package/dist/types/protocol.js +11 -0
  165. package/dist/types/protocol.js.map +1 -0
  166. package/dist/types/tools.d.ts +67 -0
  167. package/dist/types/tools.d.ts.map +1 -0
  168. package/dist/types/tools.js +16 -0
  169. package/dist/types/tools.js.map +1 -0
  170. package/dist/types/transport.d.ts +250 -0
  171. package/dist/types/transport.d.ts.map +1 -0
  172. package/dist/types/transport.js +18 -0
  173. package/dist/types/transport.js.map +1 -0
  174. package/dist/types/zod-tools.d.ts +198 -0
  175. package/dist/types/zod-tools.d.ts.map +1 -0
  176. package/dist/types/zod-tools.js +14 -0
  177. package/dist/types/zod-tools.js.map +1 -0
  178. package/dist/utils/StdioMessageReader.d.ts +122 -0
  179. package/dist/utils/StdioMessageReader.d.ts.map +1 -0
  180. package/dist/utils/StdioMessageReader.js +209 -0
  181. package/dist/utils/StdioMessageReader.js.map +1 -0
  182. package/dist/utils/StdioMessageWriter.d.ts +104 -0
  183. package/dist/utils/StdioMessageWriter.d.ts.map +1 -0
  184. package/dist/utils/StdioMessageWriter.js +162 -0
  185. package/dist/utils/StdioMessageWriter.js.map +1 -0
  186. package/dist/validation/SchemaValidator.d.ts +208 -0
  187. package/dist/validation/SchemaValidator.d.ts.map +1 -0
  188. package/dist/validation/SchemaValidator.js +411 -0
  189. package/dist/validation/SchemaValidator.js.map +1 -0
  190. package/dist/validation/index.d.ts +11 -0
  191. package/dist/validation/index.d.ts.map +1 -0
  192. package/dist/validation/index.js +10 -0
  193. package/dist/validation/index.js.map +1 -0
  194. package/package.json +70 -5
  195. package/agent.json +0 -18
  196. package/broker.js +0 -214
  197. package/index.js +0 -370
  198. package/ipc.js +0 -220
  199. 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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"}