@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,397 @@
1
+ /**
2
+ * Native Transport
3
+ *
4
+ * Loads abilities in-process for zero-overhead communication.
5
+ * Best for abilities written in JavaScript/TypeScript that can run in the same process.
6
+ *
7
+ * @module transports/NativeTransport
8
+ */
9
+ import { EventEmitter } from 'events';
10
+ import { resolve } from 'path';
11
+ import { KadiError, ErrorCode } from '../types/index.js';
12
+ /**
13
+ * Type guard to check if loaded module is a KadiClient instance
14
+ *
15
+ * Detection strategy:
16
+ * - Has readAgentJson() method (returns agent.json representation with tools)
17
+ * - Has invoke() method (executes tools by name)
18
+ *
19
+ * This identifies abilities written using the Registration Pattern (Option A),
20
+ * where the ability has an agent.json file and uses KadiClient.registerTool().
21
+ *
22
+ * @param obj - Object to check
23
+ * @returns True if object is a KadiClient instance
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const module = await import('./ability.js');
28
+ * if (isKadiClient(module.default)) {
29
+ * const agentJson = module.default.readAgentJson();
30
+ * // { name: 'calculator', tools: [...] }
31
+ * }
32
+ * ```
33
+ */
34
+ function isKadiClient(obj) {
35
+ return (obj !== null &&
36
+ typeof obj === 'object' &&
37
+ 'readAgentJson' in obj &&
38
+ typeof obj.readAgentJson === 'function' &&
39
+ 'invoke' in obj &&
40
+ typeof obj.invoke === 'function');
41
+ }
42
+ /**
43
+ * Native Transport
44
+ *
45
+ * Loads Node.js modules directly into the current process.
46
+ * Provides zero-overhead method invocation since everything runs in-process.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const transport = new NativeTransport({
51
+ * abilityName: 'calculator',
52
+ * abilityPath: '/path/to/calculator',
53
+ * entryPoint: 'index.js'
54
+ * });
55
+ *
56
+ * await transport.connect();
57
+ * const result = await transport.invoke('add', { a: 5, b: 3 });
58
+ * console.log(result); // { result: 8 }
59
+ * ```
60
+ */
61
+ export class NativeTransport extends EventEmitter {
62
+ /**
63
+ * Transport configuration
64
+ */
65
+ options;
66
+ /**
67
+ * Loaded ability module
68
+ */
69
+ ability = null;
70
+ /**
71
+ * Whether loaded module is a KadiClient instance
72
+ */
73
+ isKadiClientInstance = false;
74
+ /**
75
+ * Discovered methods
76
+ */
77
+ methods = [];
78
+ /**
79
+ * Method schemas
80
+ */
81
+ schemas = new Map();
82
+ /**
83
+ * Whether transport is connected
84
+ */
85
+ connected = false;
86
+ /**
87
+ * Create a new NativeTransport
88
+ *
89
+ * @param options - Native transport options
90
+ */
91
+ constructor(options) {
92
+ super();
93
+ this.options = {
94
+ entryPoint: options.entryPoint ?? 'index.js',
95
+ timeout: options.timeout ?? 30000,
96
+ abilityPath: options.abilityPath,
97
+ abilityName: options.abilityName,
98
+ abilityVersion: options.abilityVersion ?? '1.0.0'
99
+ };
100
+ }
101
+ /**
102
+ * Connect to the ability
103
+ *
104
+ * Loads the module from disk and performs discovery.
105
+ *
106
+ * @throws {KadiError} If module cannot be loaded
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * await transport.connect();
111
+ * ```
112
+ */
113
+ async connect() {
114
+ if (this.connected) {
115
+ return;
116
+ }
117
+ try {
118
+ // Resolve module path
119
+ const modulePath = resolve(this.options.abilityPath, this.options.entryPoint);
120
+ // Load the module
121
+ const module = await import(modulePath);
122
+ // Get the ability (default export or named export)
123
+ this.ability = module.default ?? module;
124
+ if (!this.ability || typeof this.ability !== 'object') {
125
+ throw new KadiError(`Ability module must export an object or class instance`, ErrorCode.ABILITY_LOAD_FAILED, 500, { abilityName: this.options.abilityName, modulePath });
126
+ }
127
+ // Check if it's a KadiClient instance (Registration Pattern - Option A)
128
+ this.isKadiClientInstance = isKadiClient(this.ability);
129
+ if (this.isKadiClientInstance) {
130
+ // KadiClient instance - read agent.json representation
131
+ const agentJson = this.ability.readAgentJson();
132
+ this.methods = agentJson.tools.map(tool => tool.name);
133
+ // Store schemas from tool definitions (agent.json's 'exports' → runtime 'tools')
134
+ for (const tool of agentJson.tools) {
135
+ if (tool.inputSchema || tool.outputSchema) {
136
+ this.schemas.set(tool.name, {
137
+ inputSchema: tool.inputSchema,
138
+ outputSchema: tool.outputSchema,
139
+ description: tool.description
140
+ });
141
+ }
142
+ }
143
+ }
144
+ else {
145
+ // Legacy module - use introspection
146
+ await this.discoverMethods();
147
+ }
148
+ this.connected = true;
149
+ this.emit('connected');
150
+ }
151
+ catch (error) {
152
+ const kadiError = error instanceof KadiError
153
+ ? error
154
+ : new KadiError(`Failed to load ability: ${error instanceof Error ? error.message : String(error)}`, ErrorCode.ABILITY_LOAD_FAILED, 500, {
155
+ abilityName: this.options.abilityName,
156
+ abilityPath: this.options.abilityPath,
157
+ originalError: error instanceof Error ? error.message : String(error)
158
+ });
159
+ this.emit('error', kadiError);
160
+ throw kadiError;
161
+ }
162
+ }
163
+ /**
164
+ * Invoke a method on the ability
165
+ *
166
+ * @template TInput - Input parameter type
167
+ * @template TOutput - Return type
168
+ *
169
+ * @param method - Method name
170
+ * @param params - Method parameters
171
+ * @returns Promise resolving to method result
172
+ *
173
+ * @throws {KadiError} If method doesn't exist or invocation fails
174
+ *
175
+ * @example
176
+ * ```typescript
177
+ * const result = await transport.invoke<{ a: number; b: number }, { result: number }>(
178
+ * 'add',
179
+ * { a: 5, b: 3 }
180
+ * );
181
+ * ```
182
+ */
183
+ async invoke(method, params) {
184
+ if (!this.connected) {
185
+ throw new KadiError('Transport not connected', ErrorCode.TRANSPORT_NOT_CONNECTED, 503, { abilityName: this.options.abilityName });
186
+ }
187
+ // Check if method exists
188
+ if (!this.methods.includes(method)) {
189
+ throw new KadiError(`Method '${method}' not found on ability '${this.options.abilityName}'`, ErrorCode.ABILITY_METHOD_NOT_FOUND, 404, { abilityName: this.options.abilityName, method, availableMethods: this.methods });
190
+ }
191
+ try {
192
+ // KadiClient instance - use agent.json protocol (invoke by name)
193
+ if (this.isKadiClientInstance) {
194
+ const timeoutPromise = new Promise((_, reject) => {
195
+ setTimeout(() => {
196
+ reject(new KadiError(`Method invocation timeout after ${this.options.timeout}ms`, ErrorCode.TOOL_TIMEOUT, 408, { abilityName: this.options.abilityName, method, timeout: this.options.timeout }));
197
+ }, this.options.timeout);
198
+ });
199
+ const result = await Promise.race([
200
+ this.ability.invoke(method, params),
201
+ timeoutPromise
202
+ ]);
203
+ return result;
204
+ }
205
+ // Legacy module - use direct method access
206
+ const handler = this.ability[method];
207
+ if (typeof handler !== 'function') {
208
+ throw new KadiError(`Method '${method}' is not a function`, ErrorCode.ABILITY_METHOD_NOT_FOUND, 500, { abilityName: this.options.abilityName, method, type: typeof handler });
209
+ }
210
+ // Invoke with timeout
211
+ const timeoutPromise = new Promise((_, reject) => {
212
+ setTimeout(() => {
213
+ reject(new KadiError(`Method invocation timeout after ${this.options.timeout}ms`, ErrorCode.TOOL_TIMEOUT, 408, { abilityName: this.options.abilityName, method, timeout: this.options.timeout }));
214
+ }, this.options.timeout);
215
+ });
216
+ const result = await Promise.race([
217
+ handler.call(this.ability, params),
218
+ timeoutPromise
219
+ ]);
220
+ return result;
221
+ }
222
+ catch (error) {
223
+ // Don't wrap KadiError
224
+ if (error instanceof KadiError) {
225
+ throw error;
226
+ }
227
+ // Enhance the original error with context
228
+ if (error instanceof Error) {
229
+ const enhancedError = error;
230
+ enhancedError.message = `${error.message} (in ${this.options.abilityName}.${method})`;
231
+ throw enhancedError;
232
+ }
233
+ throw new KadiError(`Method invocation failed: ${String(error)}`, ErrorCode.TOOL_INVOCATION_FAILED, 500, { abilityName: this.options.abilityName, method });
234
+ }
235
+ }
236
+ /**
237
+ * Get list of available methods
238
+ *
239
+ * @returns Array of method names
240
+ *
241
+ * @example
242
+ * ```typescript
243
+ * const methods = transport.getMethods();
244
+ * console.log('Available methods:', methods);
245
+ * ```
246
+ */
247
+ getMethods() {
248
+ return [...this.methods];
249
+ }
250
+ /**
251
+ * Get schema for a specific method
252
+ *
253
+ * @param method - Method name
254
+ * @returns Method schema or undefined
255
+ *
256
+ * @example
257
+ * ```typescript
258
+ * const schema = transport.getMethodSchema('add');
259
+ * if (schema) {
260
+ * console.log('Input schema:', schema.inputSchema);
261
+ * }
262
+ * ```
263
+ */
264
+ getMethodSchema(method) {
265
+ return this.schemas.get(method);
266
+ }
267
+ /**
268
+ * Read agent.json representation (only for KadiClient instances)
269
+ *
270
+ * Returns the agent.json representation from KadiClient.readAgentJson() if
271
+ * the loaded module is a KadiClient instance. Returns undefined for legacy modules.
272
+ *
273
+ * **What this returns:**
274
+ * - Runtime representation of the ability's agent.json file
275
+ * - Contains name, version, description, and tools (mapped from agent.json's 'exports')
276
+ * - Used for type generation during `kadi install`
277
+ *
278
+ * @returns agent.json representation or undefined
279
+ *
280
+ * @example
281
+ * ```typescript
282
+ * const agentJson = transport.readAgentJson();
283
+ * if (agentJson) {
284
+ * console.log('Ability:', agentJson.name, agentJson.version);
285
+ * console.log('Tools:', agentJson.tools.map(t => t.name));
286
+ * // This represents what's in the ability's agent.json file
287
+ * }
288
+ * ```
289
+ */
290
+ readAgentJson() {
291
+ if (!this.isKadiClientInstance || !this.ability) {
292
+ return undefined;
293
+ }
294
+ return this.ability.readAgentJson();
295
+ }
296
+ /**
297
+ * Disconnect from the ability
298
+ *
299
+ * Cleans up resources and removes references.
300
+ *
301
+ * @example
302
+ * ```typescript
303
+ * await transport.disconnect();
304
+ * ```
305
+ */
306
+ async disconnect() {
307
+ if (!this.connected) {
308
+ return;
309
+ }
310
+ // Clean up
311
+ this.ability = null;
312
+ this.methods = [];
313
+ this.schemas.clear();
314
+ this.connected = false;
315
+ this.emit('disconnected');
316
+ }
317
+ /**
318
+ * Publish an event from the ability
319
+ *
320
+ * @param eventName - Event name
321
+ * @param data - Event data
322
+ *
323
+ * @example
324
+ * ```typescript
325
+ * transport.publishEvent('calculation.completed', { result: 42 });
326
+ * ```
327
+ */
328
+ publishEvent(eventName, data) {
329
+ this.emit('event', {
330
+ eventName,
331
+ data,
332
+ timestamp: Date.now(),
333
+ source: this.options.abilityName
334
+ });
335
+ }
336
+ /**
337
+ * Discover methods on the loaded ability
338
+ *
339
+ * Introspects the ability object to find callable methods.
340
+ * Excludes internal methods (starting with _) and special methods.
341
+ */
342
+ async discoverMethods() {
343
+ if (!this.ability || typeof this.ability !== 'object') {
344
+ return;
345
+ }
346
+ const excludedMethods = new Set([
347
+ 'constructor',
348
+ 'toString',
349
+ 'toJSON',
350
+ 'valueOf',
351
+ 'hasOwnProperty',
352
+ 'isPrototypeOf',
353
+ 'propertyIsEnumerable'
354
+ ]);
355
+ // Get all property names (own and inherited)
356
+ const allProps = new Set();
357
+ // Own properties
358
+ for (const prop of Object.getOwnPropertyNames(this.ability)) {
359
+ allProps.add(prop);
360
+ }
361
+ // Prototype properties
362
+ let proto = Object.getPrototypeOf(this.ability);
363
+ while (proto && proto !== Object.prototype) {
364
+ for (const prop of Object.getOwnPropertyNames(proto)) {
365
+ allProps.add(prop);
366
+ }
367
+ proto = Object.getPrototypeOf(proto);
368
+ }
369
+ // Filter to functions, exclude internal methods
370
+ for (const prop of allProps) {
371
+ if (excludedMethods.has(prop)) {
372
+ continue;
373
+ }
374
+ if (prop.startsWith('_')) {
375
+ continue; // Internal method
376
+ }
377
+ try {
378
+ const value = this.ability[prop];
379
+ if (typeof value === 'function') {
380
+ this.methods.push(prop);
381
+ // Try to get schema if available
382
+ const schemaGetter = this.ability[`${prop}Schema`];
383
+ if (typeof schemaGetter === 'function') {
384
+ const schema = schemaGetter.call(this.ability);
385
+ if (schema) {
386
+ this.schemas.set(prop, schema);
387
+ }
388
+ }
389
+ }
390
+ }
391
+ catch {
392
+ // Skip properties that throw on access
393
+ }
394
+ }
395
+ }
396
+ }
397
+ //# sourceMappingURL=NativeTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeTransport.js","sourceRoot":"","sources":["../../src/transports/NativeTransport.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAM/B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAiBzD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAS,YAAY,CAAC,GAAY;IAChC,OAAO,CACL,GAAG,KAAK,IAAI;QACZ,OAAO,GAAG,KAAK,QAAQ;QACvB,eAAe,IAAI,GAAG;QACtB,OAAO,GAAG,CAAC,aAAa,KAAK,UAAU;QACvC,QAAQ,IAAI,GAAG;QACf,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,CACjC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC/C;;OAEG;IACc,OAAO,CAAmC;IAE3D;;OAEG;IACK,OAAO,GAAY,IAAI,CAAC;IAEhC;;OAEG;IACK,oBAAoB,GAAG,KAAK,CAAC;IAErC;;OAEG;IACK,OAAO,GAAa,EAAE,CAAC;IAE/B;;OAEG;IACK,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAElD;;OAEG;IACK,SAAS,GAAG,KAAK,CAAC;IAE1B;;;;OAIG;IACH,YAAY,OAA+B;QACzC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG;YACb,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,UAAU;YAC5C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;YACjC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,OAAO;SAClD,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE9E,kBAAkB;YAClB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YAExC,mDAAmD;YACnD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;YAExC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACtD,MAAM,IAAI,SAAS,CACjB,wDAAwD,EACxD,SAAS,CAAC,mBAAmB,EAC7B,GAAG,EACH,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,CACtD,CAAC;YACJ,CAAC;YAED,wEAAwE;YACxE,IAAI,CAAC,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEvD,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC9B,uDAAuD;gBACvD,MAAM,SAAS,GAAI,IAAI,CAAC,OAAuB,CAAC,aAAa,EAAE,CAAC;gBAChE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEtD,iFAAiF;gBACjF,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBACnC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;4BAC1B,WAAW,EAAE,IAAI,CAAC,WAAW;4BAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;4BAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;yBAC9B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,oCAAoC;gBACpC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/B,CAAC;YAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,KAAK,YAAY,SAAS;gBAC1C,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI,SAAS,CACX,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACnF,SAAS,CAAC,mBAAmB,EAC7B,GAAG,EACH;oBACE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;oBACrC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;oBACrC,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBACtE,CACF,CAAC;YAEN,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC9B,MAAM,SAAS,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,CAAC,MAAM,CACV,MAAc,EACd,MAAc;QAEd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,SAAS,CACjB,yBAAyB,EACzB,SAAS,CAAC,uBAAuB,EACjC,GAAG,EACH,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAC1C,CAAC;QACJ,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,SAAS,CACjB,WAAW,MAAM,2BAA2B,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EACvE,SAAS,CAAC,wBAAwB,EAClC,GAAG,EACH,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,CAClF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,iEAAiE;YACjE,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC9B,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;oBACtD,UAAU,CAAC,GAAG,EAAE;wBACd,MAAM,CAAC,IAAI,SAAS,CAClB,mCAAmC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAC3D,SAAS,CAAC,YAAY,EACtB,GAAG,EACH,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CACjF,CAAC,CAAC;oBACL,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC3B,CAAC,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;oBAC/B,IAAI,CAAC,OAAuB,CAAC,MAAM,CAAkB,MAAM,EAAE,MAAM,CAAC;oBACrE,cAAc;iBACf,CAAC,CAAC;gBAEH,OAAO,MAAiB,CAAC;YAC3B,CAAC;YAED,2CAA2C;YAC3C,MAAM,OAAO,GAAI,IAAI,CAAC,OAAmC,CAAC,MAAM,CAAC,CAAC;YAElE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,IAAI,SAAS,CACjB,WAAW,MAAM,qBAAqB,EACtC,SAAS,CAAC,wBAAwB,EAClC,GAAG,EACH,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,OAAO,EAAE,CACxE,CAAC;YACJ,CAAC;YAED,sBAAsB;YACtB,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBACtD,UAAU,CAAC,GAAG,EAAE;oBACd,MAAM,CAAC,IAAI,SAAS,CAClB,mCAAmC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAC3D,SAAS,CAAC,YAAY,EACtB,GAAG,EACH,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CACjF,CAAC,CAAC;gBACL,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;gBAClC,cAAc;aACf,CAAC,CAAC;YAEH,OAAO,MAAiB,CAAC;QAE3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uBAAuB;YACvB,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;gBAC/B,MAAM,KAAK,CAAC;YACd,CAAC;YAED,0CAA0C;YAC1C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,aAAa,GAAG,KAAK,CAAC;gBAC5B,aAAa,CAAC,OAAO,GAAG,GAAG,KAAK,CAAC,OAAO,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,GAAG,CAAC;gBACtF,MAAM,aAAa,CAAC;YACtB,CAAC;YAED,MAAM,IAAI,SAAS,CACjB,6BAA6B,MAAM,CAAC,KAAK,CAAC,EAAE,EAC5C,SAAS,CAAC,sBAAsB,EAChC,GAAG,EACH,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,CAClD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAQ,IAAI,CAAC,OAAuB,CAAC,aAAa,EAAE,CAAC;IACvD,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,WAAW;QACX,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;OAUG;IACH,YAAY,CAAC,SAAiB,EAAE,IAAa;QAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,SAAS;YACT,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;YAC9B,aAAa;YACb,UAAU;YACV,QAAQ;YACR,SAAS;YACT,gBAAgB;YAChB,eAAe;YACf,sBAAsB;SACvB,CAAC,CAAC;QAEH,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnC,iBAAiB;QACjB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5D,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,uBAAuB;QACvB,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;YACD,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,gDAAgD;QAChD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,SAAS;YACX,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,SAAS,CAAC,kBAAkB;YAC9B,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,GAAI,IAAI,CAAC,OAAmC,CAAC,IAAI,CAAC,CAAC;gBAC9D,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;oBAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAExB,iCAAiC;oBACjC,MAAM,YAAY,GAAI,IAAI,CAAC,OAAmC,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC;oBAChF,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;wBACvC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC/C,IAAI,MAAM,EAAE,CAAC;4BACX,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAsB,CAAC,CAAC;wBACjD,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uCAAuC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Stdio Transport
3
+ *
4
+ * Spawns abilities as child processes and communicates via stdin/stdout
5
+ * using Content-Length framed JSON-RPC messages (LSP-style).
6
+ *
7
+ * @module transports/StdioTransport
8
+ */
9
+ import { EventEmitter } from 'events';
10
+ import type { AbilityTransport, MethodSchema } from '../types/index.js';
11
+ import type { AgentJson } from '../abilities/types.js';
12
+ /**
13
+ * Stdio Transport Options
14
+ */
15
+ export interface StdioTransportOptions {
16
+ /** Ability name (for error messages) */
17
+ abilityName: string;
18
+ /** Command to execute (e.g., 'node', 'python') */
19
+ command: string;
20
+ /** Command arguments (e.g., ['./ability.js']) */
21
+ args?: string[];
22
+ /** Working directory for child process */
23
+ cwd?: string;
24
+ /** Environment variables */
25
+ env?: Record<string, string>;
26
+ /** Request timeout in milliseconds */
27
+ timeout?: number;
28
+ /** Ability version */
29
+ abilityVersion?: string;
30
+ }
31
+ /**
32
+ * Stdio Transport
33
+ *
34
+ * Spawns an ability as a child process and communicates via JSON-RPC
35
+ * over stdin/stdout using Content-Length framing (LSP-style).
36
+ *
37
+ * **Features**:
38
+ * - Spawns child process with configurable command/args
39
+ * - Content-Length framed messages (reliable even with logs)
40
+ * - Captures stderr separately (ability logs)
41
+ * - Request/response matching via JSON-RPC ids
42
+ * - Timeout handling per request
43
+ * - Graceful shutdown with SIGTERM
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * const transport = new StdioTransport({
48
+ * abilityName: 'calculator',
49
+ * command: 'node',
50
+ * args: ['./abilities/calculator/index.js']
51
+ * });
52
+ *
53
+ * await transport.connect();
54
+ * const result = await transport.invoke('add', { a: 5, b: 3 });
55
+ * console.log(result); // { result: 8 }
56
+ * await transport.disconnect();
57
+ * ```
58
+ */
59
+ export declare class StdioTransport extends EventEmitter implements AbilityTransport {
60
+ /**
61
+ * Transport configuration
62
+ */
63
+ private readonly options;
64
+ /**
65
+ * Child process instance
66
+ */
67
+ private process?;
68
+ /**
69
+ * Message reader for stdout
70
+ */
71
+ private reader?;
72
+ /**
73
+ * Message writer for stdin
74
+ */
75
+ private writer?;
76
+ /**
77
+ * Stderr buffer
78
+ */
79
+ private stderrBuffer;
80
+ /**
81
+ * Whether transport is connected
82
+ */
83
+ private connected;
84
+ /**
85
+ * Whether we're intentionally disconnecting
86
+ */
87
+ private disconnecting;
88
+ /**
89
+ * Discovered methods
90
+ */
91
+ private methods;
92
+ /**
93
+ * Method schemas
94
+ */
95
+ private schemas;
96
+ /**
97
+ * Agent.json representation (from readAgentJson)
98
+ */
99
+ private agentJson?;
100
+ /**
101
+ * Request ID counter
102
+ */
103
+ private requestIdCounter;
104
+ /**
105
+ * Pending requests (waiting for responses)
106
+ */
107
+ private pendingRequests;
108
+ /**
109
+ * Create a new StdioTransport
110
+ *
111
+ * @param options - Transport options
112
+ */
113
+ constructor(options: StdioTransportOptions);
114
+ /**
115
+ * Connect to the ability
116
+ *
117
+ * Spawns the child process, sets up stdio communication,
118
+ * and performs discovery via readAgentJson.
119
+ *
120
+ * @throws {KadiError} If spawn fails or discovery fails
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * await transport.connect();
125
+ * ```
126
+ */
127
+ connect(): Promise<void>;
128
+ /**
129
+ * Invoke a method on the ability
130
+ *
131
+ * @template TInput - Input parameter type
132
+ * @template TOutput - Return type
133
+ *
134
+ * @param method - Method name
135
+ * @param params - Method parameters
136
+ * @returns Promise resolving to method result
137
+ *
138
+ * @throws {KadiError} If method doesn't exist or invocation fails
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * const result = await transport.invoke<{ a: number; b: number }, { result: number }>(
143
+ * 'add',
144
+ * { a: 5, b: 3 }
145
+ * );
146
+ * ```
147
+ */
148
+ invoke<TInput = unknown, TOutput = unknown>(method: string, params: TInput): Promise<TOutput>;
149
+ /**
150
+ * Send a JSON-RPC request and wait for response
151
+ *
152
+ * @param method - JSON-RPC method name
153
+ * @param params - Request parameters
154
+ * @returns Promise resolving to response result
155
+ *
156
+ * @throws {KadiError} If request fails or times out
157
+ */
158
+ private sendRequest;
159
+ /**
160
+ * Handle incoming JSON-RPC message
161
+ *
162
+ * Matches responses to pending requests via id.
163
+ *
164
+ * @param message - Incoming message
165
+ */
166
+ private handleMessage;
167
+ /**
168
+ * Get list of available methods
169
+ *
170
+ * @returns Array of method names
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * const methods = transport.getMethods();
175
+ * console.log('Available methods:', methods);
176
+ * ```
177
+ */
178
+ getMethods(): string[];
179
+ /**
180
+ * Get schema for a specific method
181
+ *
182
+ * @param method - Method name
183
+ * @returns Method schema or undefined
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * const schema = transport.getMethodSchema('add');
188
+ * if (schema) {
189
+ * console.log('Input schema:', schema.inputSchema);
190
+ * }
191
+ * ```
192
+ */
193
+ getMethodSchema(method: string): MethodSchema | undefined;
194
+ /**
195
+ * Read agent.json representation
196
+ *
197
+ * Returns the agent.json representation retrieved during connection.
198
+ *
199
+ * @returns agent.json representation or undefined
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * const agentJson = transport.readAgentJson();
204
+ * if (agentJson) {
205
+ * console.log('Ability:', agentJson.name, agentJson.version);
206
+ * console.log('Tools:', agentJson.tools.map(t => t.name));
207
+ * }
208
+ * ```
209
+ */
210
+ readAgentJson(): AgentJson | undefined;
211
+ /**
212
+ * Get captured stderr output
213
+ *
214
+ * Returns all stderr output captured from the child process.
215
+ * Useful for debugging or viewing ability logs.
216
+ *
217
+ * @returns Stderr content as string
218
+ *
219
+ * @example
220
+ * ```typescript
221
+ * const stderr = transport.getStderr();
222
+ * console.log('Ability logs:', stderr);
223
+ * ```
224
+ */
225
+ getStderr(): string;
226
+ /**
227
+ * Disconnect from the ability
228
+ *
229
+ * Kills the child process with SIGTERM and cleans up resources.
230
+ *
231
+ * @example
232
+ * ```typescript
233
+ * await transport.disconnect();
234
+ * ```
235
+ */
236
+ disconnect(): Promise<void>;
237
+ /**
238
+ * Publish an event from the ability
239
+ *
240
+ * @param eventName - Event name
241
+ * @param data - Event data
242
+ *
243
+ * @example
244
+ * ```typescript
245
+ * transport.publishEvent('calculation.completed', { result: 42 });
246
+ * ```
247
+ */
248
+ publishEvent(eventName: string, data: unknown): void;
249
+ }
250
+ //# sourceMappingURL=StdioTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StdioTransport.d.ts","sourceRoot":"","sources":["../../src/transports/StdioTransport.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAI3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAEhB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,cAAe,SAAQ,YAAa,YAAW,gBAAgB;IAC1E;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAItB;IAEF;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,CAAe;IAE/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,CAAqB;IAEpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,CAAqB;IAEpC;;OAEG;IACH,OAAO,CAAC,YAAY,CAAmB;IAEvC;;OAEG;IACH,OAAO,CAAC,SAAS,CAAS;IAE1B;;OAEG;IACH,OAAO,CAAC,aAAa,CAAS;IAE9B;;OAEG;IACH,OAAO,CAAC,OAAO,CAAgB;IAE/B;;OAEG;IACH,OAAO,CAAC,OAAO,CAAmC;IAElD;;OAEG;IACH,OAAO,CAAC,SAAS,CAAC,CAAY;IAE9B;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAK;IAE7B;;OAEG;IACH,OAAO,CAAC,eAAe,CAAqC;IAE5D;;;;OAIG;gBACS,OAAO,EAAE,qBAAqB;IAc1C;;;;;;;;;;;;OAYG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmK9B;;;;;;;;;;;;;;;;;;;OAmBG;IACG,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC9C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC;IA6BnB;;;;;;;;OAQG;YACW,WAAW;IAoDzB;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAmCrB;;;;;;;;;;OAUG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIzD;;;;;;;;;;;;;;;OAeG;IACH,aAAa,IAAI,SAAS,GAAG,SAAS;IAItC;;;;;;;;;;;;;OAaG;IACH,SAAS,IAAI,MAAM;IAInB;;;;;;;;;OASG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA6DjC;;;;;;;;;;OAUG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;CAQrD"}