@kadi.build/core 0.0.1-alpha.1 → 0.0.1-alpha.10

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 (179) hide show
  1. package/README.md +1387 -214
  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 +177 -0
  11. package/dist/abilities/AbilityLoader.d.ts.map +1 -0
  12. package/dist/abilities/AbilityLoader.js +277 -0
  13. package/dist/abilities/AbilityLoader.js.map +1 -0
  14. package/dist/abilities/AbilityProxy.d.ts +463 -0
  15. package/dist/abilities/AbilityProxy.d.ts.map +1 -0
  16. package/dist/abilities/AbilityProxy.js +511 -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 +156 -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 +270 -0
  51. package/dist/client/KadiClient.d.ts.map +1 -0
  52. package/dist/client/KadiClient.js +492 -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 +49 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +63 -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 +19 -0
  91. package/dist/schemas/index.d.ts.map +1 -0
  92. package/dist/schemas/index.js +25 -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/tools/ToolRegistry.d.ts +256 -0
  111. package/dist/tools/ToolRegistry.d.ts.map +1 -0
  112. package/dist/tools/ToolRegistry.js +340 -0
  113. package/dist/tools/ToolRegistry.js.map +1 -0
  114. package/dist/tools/index.d.ts +7 -0
  115. package/dist/tools/index.d.ts.map +1 -0
  116. package/dist/tools/index.js +7 -0
  117. package/dist/tools/index.js.map +1 -0
  118. package/dist/transports/BrokerTransport.d.ts +151 -0
  119. package/dist/transports/BrokerTransport.d.ts.map +1 -0
  120. package/dist/transports/BrokerTransport.js +261 -0
  121. package/dist/transports/BrokerTransport.js.map +1 -0
  122. package/dist/transports/NativeTransport.d.ts +149 -0
  123. package/dist/transports/NativeTransport.d.ts.map +1 -0
  124. package/dist/transports/NativeTransport.js +302 -0
  125. package/dist/transports/NativeTransport.js.map +1 -0
  126. package/dist/transports/StdioTransport.d.ts +172 -0
  127. package/dist/transports/StdioTransport.d.ts.map +1 -0
  128. package/dist/transports/StdioTransport.js +410 -0
  129. package/dist/transports/StdioTransport.js.map +1 -0
  130. package/dist/transports/index.d.ts +10 -0
  131. package/dist/transports/index.d.ts.map +1 -0
  132. package/dist/transports/index.js +9 -0
  133. package/dist/transports/index.js.map +1 -0
  134. package/dist/types/broker.d.ts +301 -0
  135. package/dist/types/broker.d.ts.map +1 -0
  136. package/dist/types/broker.js +46 -0
  137. package/dist/types/broker.js.map +1 -0
  138. package/dist/types/config.d.ts +325 -0
  139. package/dist/types/config.d.ts.map +1 -0
  140. package/dist/types/config.js +17 -0
  141. package/dist/types/config.js.map +1 -0
  142. package/dist/types/errors.d.ts +178 -0
  143. package/dist/types/errors.d.ts.map +1 -0
  144. package/dist/types/errors.js +165 -0
  145. package/dist/types/errors.js.map +1 -0
  146. package/dist/types/events.d.ts +210 -0
  147. package/dist/types/events.d.ts.map +1 -0
  148. package/dist/types/events.js +8 -0
  149. package/dist/types/events.js.map +1 -0
  150. package/dist/types/index.d.ts +32 -0
  151. package/dist/types/index.d.ts.map +1 -0
  152. package/dist/types/index.js +21 -0
  153. package/dist/types/index.js.map +1 -0
  154. package/dist/types/protocol.d.ts +48 -0
  155. package/dist/types/protocol.d.ts.map +1 -0
  156. package/dist/types/protocol.js +11 -0
  157. package/dist/types/protocol.js.map +1 -0
  158. package/dist/types/tools.d.ts +67 -0
  159. package/dist/types/tools.d.ts.map +1 -0
  160. package/dist/types/tools.js +16 -0
  161. package/dist/types/tools.js.map +1 -0
  162. package/dist/types/transport.d.ts +250 -0
  163. package/dist/types/transport.d.ts.map +1 -0
  164. package/dist/types/transport.js +18 -0
  165. package/dist/types/transport.js.map +1 -0
  166. package/dist/validation/SchemaValidator.d.ts +208 -0
  167. package/dist/validation/SchemaValidator.d.ts.map +1 -0
  168. package/dist/validation/SchemaValidator.js +411 -0
  169. package/dist/validation/SchemaValidator.js.map +1 -0
  170. package/dist/validation/index.d.ts +11 -0
  171. package/dist/validation/index.d.ts.map +1 -0
  172. package/dist/validation/index.js +10 -0
  173. package/dist/validation/index.js.map +1 -0
  174. package/package.json +69 -5
  175. package/agent.json +0 -18
  176. package/broker.js +0 -214
  177. package/index.js +0 -370
  178. package/ipc.js +0 -220
  179. package/ipcInterfaces/pythonAbilityIPC.py +0 -177
@@ -0,0 +1,511 @@
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
+ * Get usage information for a method
177
+ *
178
+ * Formats schema into human-readable usage documentation.
179
+ *
180
+ * @param method - Method name
181
+ * @returns Formatted usage string
182
+ */
183
+ __getUsage(method) {
184
+ const schema = this.__getSchema(method);
185
+ if (!schema) {
186
+ return undefined;
187
+ }
188
+ const lines = [];
189
+ // Method signature
190
+ lines.push(`${method}(params)`);
191
+ // Description
192
+ if (schema.description) {
193
+ lines.push(` Description: ${schema.description}`);
194
+ }
195
+ // Input parameters
196
+ if (schema.inputSchema) {
197
+ const inputExample = this.generateExampleFromSchema(schema.inputSchema);
198
+ lines.push(` Parameters: ${JSON.stringify(inputExample)}`);
199
+ }
200
+ // Output type
201
+ if (schema.outputSchema) {
202
+ const outputExample = this.generateExampleFromSchema(schema.outputSchema);
203
+ lines.push(` Returns: ${JSON.stringify(outputExample)}`);
204
+ }
205
+ // Usage example
206
+ const exampleInput = schema.inputSchema
207
+ ? this.generateExampleFromSchema(schema.inputSchema)
208
+ : {};
209
+ lines.push(` Example: ability.${method}(${JSON.stringify(exampleInput)})`);
210
+ return lines.join('\n');
211
+ }
212
+ /**
213
+ * Get complete API documentation
214
+ *
215
+ * Returns formatted documentation for all methods.
216
+ *
217
+ * @returns API documentation string
218
+ */
219
+ __getAPI() {
220
+ const methods = this.__getMethods();
221
+ const lines = [];
222
+ lines.push(`Ability: ${this.__name}`);
223
+ lines.push(`Transport: ${this.__transport}`);
224
+ lines.push(`Methods: ${methods.length}`);
225
+ lines.push('');
226
+ for (const method of methods) {
227
+ const usage = this.__getUsage(method);
228
+ if (usage) {
229
+ lines.push(usage);
230
+ lines.push('');
231
+ }
232
+ else {
233
+ lines.push(`${method}(params)`);
234
+ lines.push(' (No schema available)');
235
+ lines.push('');
236
+ }
237
+ }
238
+ return lines.join('\n');
239
+ }
240
+ /**
241
+ * Call a method directly
242
+ *
243
+ * @template TInput - Input type
244
+ * @template TOutput - Output type
245
+ * @param method - Method name
246
+ * @param params - Method parameters
247
+ * @returns Promise resolving to method result
248
+ */
249
+ async __call(method, params) {
250
+ // Step 1: Validate input if schema exists
251
+ if (this.validator.hasToolSchemas(method)) {
252
+ const validation = this.validator.validateInput(method, params);
253
+ if (!validation.valid) {
254
+ // Generate example from schema for helpful error message
255
+ const schema = this.__getSchema(method);
256
+ const example = schema?.inputSchema
257
+ ? this.generateExampleFromSchema(schema.inputSchema)
258
+ : undefined;
259
+ throw new KadiError(`Invalid parameters for ${this.__name}.${method}()`, ErrorCode.INVALID_INPUT, 400, {
260
+ abilityName: this.__name,
261
+ method,
262
+ errors: validation.errors,
263
+ received: params,
264
+ expected: schema?.inputSchema,
265
+ example: example ? `Example: ${JSON.stringify(example, null, 2)}` : undefined,
266
+ hint: 'Check parameter types and required fields'
267
+ });
268
+ }
269
+ }
270
+ // Step 2: Invoke method on transport
271
+ try {
272
+ return await this.transport.invoke(method, params);
273
+ }
274
+ catch (error) {
275
+ // Don't wrap KadiError - preserve original error
276
+ if (error instanceof KadiError) {
277
+ throw error;
278
+ }
279
+ // Enhance Error with context
280
+ if (error instanceof Error) {
281
+ error.message = `${error.message} (in ${this.__name}.${method})`;
282
+ throw error;
283
+ }
284
+ throw error;
285
+ }
286
+ }
287
+ /**
288
+ * Disconnect the ability
289
+ */
290
+ async __disconnect() {
291
+ await this.transport.disconnect();
292
+ this.removeAllListeners();
293
+ }
294
+ /**
295
+ * Check if connected
296
+ */
297
+ __isConnected() {
298
+ // Check if transport has methods (indicates successful connection)
299
+ return this.transport.getMethods().length > 0;
300
+ }
301
+ /**
302
+ * Subscribe to events
303
+ *
304
+ * @param event - Event name
305
+ * @param callback - Event callback
306
+ * @returns this for chaining
307
+ */
308
+ __on(event, callback) {
309
+ this.on(event, callback);
310
+ return this;
311
+ }
312
+ /**
313
+ * Generate example data from JSON Schema
314
+ *
315
+ * Creates sample values based on schema types and constraints.
316
+ * Useful for showing users what valid input looks like.
317
+ *
318
+ * @param schema - JSON Schema (MCP inputSchema)
319
+ * @returns Example data matching schema
320
+ *
321
+ * @example
322
+ * ```typescript
323
+ * const schema = {
324
+ * type: 'object',
325
+ * properties: {
326
+ * name: { type: 'string' },
327
+ * age: { type: 'number' }
328
+ * },
329
+ * required: ['name']
330
+ * };
331
+ * const example = generateExampleFromSchema(schema);
332
+ * // Returns: { name: "example", age: 0 }
333
+ * ```
334
+ */
335
+ generateExampleFromSchema(schema) {
336
+ // Type guard for schema object
337
+ if (!schema || typeof schema !== 'object') {
338
+ return undefined;
339
+ }
340
+ const schemaObj = schema;
341
+ // Use default value if provided
342
+ if (schemaObj.default !== undefined) {
343
+ return schemaObj.default;
344
+ }
345
+ // Use first example if provided
346
+ if (schemaObj.examples && Array.isArray(schemaObj.examples) && schemaObj.examples.length > 0) {
347
+ return schemaObj.examples[0];
348
+ }
349
+ // Use enum value if provided
350
+ if (schemaObj.enum && Array.isArray(schemaObj.enum) && schemaObj.enum.length > 0) {
351
+ return schemaObj.enum[0];
352
+ }
353
+ // Get primary type (handle array of types)
354
+ const type = Array.isArray(schemaObj.type) ? schemaObj.type[0] : schemaObj.type;
355
+ // Generate based on type
356
+ switch (type) {
357
+ case 'object': {
358
+ const result = {};
359
+ const properties = schemaObj.properties || {};
360
+ const required = schemaObj.required || [];
361
+ // Generate values for all properties (prioritize required)
362
+ for (const [key, propSchema] of Object.entries(properties)) {
363
+ if (required.includes(key) || Math.random() > 0.5) {
364
+ result[key] = this.generateExampleFromSchema(propSchema);
365
+ }
366
+ }
367
+ return result;
368
+ }
369
+ case 'array':
370
+ // Generate array with one example item
371
+ return schemaObj.items ? [this.generateExampleFromSchema(schemaObj.items)] : [];
372
+ case 'string':
373
+ return 'example';
374
+ case 'number':
375
+ case 'integer':
376
+ return 0;
377
+ case 'boolean':
378
+ return true;
379
+ case 'null':
380
+ return null;
381
+ default:
382
+ return undefined;
383
+ }
384
+ }
385
+ /**
386
+ * Create the proxy object
387
+ *
388
+ * Wraps this AbilityProxy instance in a JavaScript Proxy to intercept
389
+ * property access and convert it to method calls.
390
+ *
391
+ * **How this satisfies LoadedAbility type:**
392
+ * - Target (this) implements AbilityFramework (all __ methods)
393
+ * - Proxy handler provides dynamic method access (DynamicMethods)
394
+ * - Result is AbilityFramework & DynamicMethods = LoadedAbility
395
+ *
396
+ * @returns Proxied ability (satisfies LoadedAbility<DynamicMethods>)
397
+ */
398
+ createProxy() {
399
+ // Create JavaScript Proxy that intercepts ALL property access.
400
+ // This is what enables `ability.anyMethod()` to work at runtime.
401
+ //
402
+ // Type assertion is safe because:
403
+ // 1. Target (this) implements AbilityFramework ✓
404
+ // 2. Proxy handler provides Record<string, Function> behavior ✓
405
+ // 3. Together they satisfy LoadedAbility = DynamicMethods & AbilityFramework ✓
406
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
407
+ const proxy = new Proxy(this, {
408
+ get: (target, prop) => {
409
+ // Allow access to special methods and properties
410
+ if (typeof prop === 'symbol' || prop.startsWith('__') || prop.startsWith('_')) {
411
+ const value = Reflect.get(target, prop);
412
+ // Bind methods to target so 'this' refers to AbilityProxy instance
413
+ if (typeof value === 'function') {
414
+ return value.bind(target);
415
+ }
416
+ return value;
417
+ }
418
+ // EventEmitter methods
419
+ if (prop === 'on' ||
420
+ prop === 'once' ||
421
+ prop === 'off' ||
422
+ prop === 'emit' ||
423
+ prop === 'removeListener' ||
424
+ prop === 'removeAllListeners' ||
425
+ prop === 'listeners' ||
426
+ prop === 'eventNames') {
427
+ const value = Reflect.get(target, prop);
428
+ // Bind methods to target
429
+ if (typeof value === 'function') {
430
+ return value.bind(target);
431
+ }
432
+ return value;
433
+ }
434
+ // Check if this is an available method
435
+ const methods = target.__getMethods();
436
+ if (methods.includes(prop)) {
437
+ // Return a function that invokes the method
438
+ return async (params) => {
439
+ return await target.__call(prop, params);
440
+ };
441
+ }
442
+ // Property doesn't exist
443
+ return undefined;
444
+ },
445
+ has: (target, prop) => {
446
+ if (typeof prop === 'symbol') {
447
+ return Reflect.has(target, prop);
448
+ }
449
+ // Special methods exist
450
+ if (prop.startsWith('__')) {
451
+ return Reflect.has(target, prop);
452
+ }
453
+ // Check if it's an available method
454
+ const methods = target.__getMethods();
455
+ return methods.includes(prop);
456
+ },
457
+ ownKeys: (target) => {
458
+ // Return special methods + available methods
459
+ const specialKeys = [
460
+ '__name',
461
+ '__transport',
462
+ '__getMethods',
463
+ '__getSchema',
464
+ '__getAllSchemas',
465
+ '__getUsage',
466
+ '__getAPI',
467
+ '__call',
468
+ '__disconnect',
469
+ '__isConnected',
470
+ '__on'
471
+ ];
472
+ const methods = target.__getMethods();
473
+ return [...specialKeys, ...methods];
474
+ },
475
+ getOwnPropertyDescriptor: (target, prop) => {
476
+ if (typeof prop === 'symbol') {
477
+ return Reflect.getOwnPropertyDescriptor(target, prop);
478
+ }
479
+ // Special methods
480
+ if (prop.startsWith('__')) {
481
+ const value = Reflect.get(target, prop);
482
+ return {
483
+ configurable: true,
484
+ enumerable: true,
485
+ writable: false,
486
+ value: typeof value === 'function' ? value.bind(target) : value
487
+ };
488
+ }
489
+ // Available methods
490
+ const methods = target.__getMethods();
491
+ if (methods.includes(prop)) {
492
+ return {
493
+ configurable: true,
494
+ enumerable: true,
495
+ writable: false,
496
+ value: async (params) => {
497
+ return await target.__call(prop, params);
498
+ }
499
+ };
500
+ }
501
+ return undefined;
502
+ }
503
+ });
504
+ // The Proxy object satisfies LoadedAbility interface:
505
+ // - All required methods (__name, __getMethods, etc.) exist on target
506
+ // - Index signature [methodName: string] is provided by the Proxy handler
507
+ // - Dynamic method calls are intercepted and routed to __call()
508
+ return proxy;
509
+ }
510
+ }
511
+ //# 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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"}