@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.
- package/README.md +1387 -214
- package/dist/abilities/AbilityCache.d.ts +242 -0
- package/dist/abilities/AbilityCache.d.ts.map +1 -0
- package/dist/abilities/AbilityCache.js +285 -0
- package/dist/abilities/AbilityCache.js.map +1 -0
- package/dist/abilities/AbilityContext.d.ts +215 -0
- package/dist/abilities/AbilityContext.d.ts.map +1 -0
- package/dist/abilities/AbilityContext.js +36 -0
- package/dist/abilities/AbilityContext.js.map +1 -0
- package/dist/abilities/AbilityLoader.d.ts +177 -0
- package/dist/abilities/AbilityLoader.d.ts.map +1 -0
- package/dist/abilities/AbilityLoader.js +277 -0
- package/dist/abilities/AbilityLoader.js.map +1 -0
- package/dist/abilities/AbilityProxy.d.ts +463 -0
- package/dist/abilities/AbilityProxy.d.ts.map +1 -0
- package/dist/abilities/AbilityProxy.js +511 -0
- package/dist/abilities/AbilityProxy.js.map +1 -0
- package/dist/abilities/AbilityValidator.d.ts +172 -0
- package/dist/abilities/AbilityValidator.d.ts.map +1 -0
- package/dist/abilities/AbilityValidator.js +253 -0
- package/dist/abilities/AbilityValidator.js.map +1 -0
- package/dist/abilities/index.d.ts +26 -0
- package/dist/abilities/index.d.ts.map +1 -0
- package/dist/abilities/index.js +23 -0
- package/dist/abilities/index.js.map +1 -0
- package/dist/abilities/types.d.ts +156 -0
- package/dist/abilities/types.d.ts.map +1 -0
- package/dist/abilities/types.js +10 -0
- package/dist/abilities/types.js.map +1 -0
- package/dist/api/index.d.ts +92 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +124 -0
- package/dist/api/index.js.map +1 -0
- package/dist/broker/BrokerConnection.d.ts +253 -0
- package/dist/broker/BrokerConnection.d.ts.map +1 -0
- package/dist/broker/BrokerConnection.js +434 -0
- package/dist/broker/BrokerConnection.js.map +1 -0
- package/dist/broker/BrokerConnectionManager.d.ts +216 -0
- package/dist/broker/BrokerConnectionManager.d.ts.map +1 -0
- package/dist/broker/BrokerConnectionManager.js +305 -0
- package/dist/broker/BrokerConnectionManager.js.map +1 -0
- package/dist/broker/BrokerProtocol.d.ts +280 -0
- package/dist/broker/BrokerProtocol.d.ts.map +1 -0
- package/dist/broker/BrokerProtocol.js +466 -0
- package/dist/broker/BrokerProtocol.js.map +1 -0
- package/dist/broker/index.d.ts +9 -0
- package/dist/broker/index.d.ts.map +1 -0
- package/dist/broker/index.js +9 -0
- package/dist/broker/index.js.map +1 -0
- package/dist/client/KadiClient.d.ts +270 -0
- package/dist/client/KadiClient.d.ts.map +1 -0
- package/dist/client/KadiClient.js +492 -0
- package/dist/client/KadiClient.js.map +1 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +138 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +226 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/ConfigResolver.d.ts +135 -0
- package/dist/config/ConfigResolver.d.ts.map +1 -0
- package/dist/config/ConfigResolver.js +282 -0
- package/dist/config/ConfigResolver.js.map +1 -0
- package/dist/config/index.d.ts +8 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +8 -0
- package/dist/config/index.js.map +1 -0
- package/dist/errors/index.d.ts +9 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +8 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/events/EventHub.d.ts +172 -0
- package/dist/events/EventHub.d.ts.map +1 -0
- package/dist/events/EventHub.js +333 -0
- package/dist/events/EventHub.js.map +1 -0
- package/dist/events/index.d.ts +7 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +7 -0
- package/dist/events/index.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/messages/index.d.ts +33 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/messages/index.js +33 -0
- package/dist/messages/index.js.map +1 -0
- package/dist/schemas/index.d.ts +19 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +25 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/kadi-extensions.d.ts +231 -0
- package/dist/schemas/kadi-extensions.d.ts.map +1 -0
- package/dist/schemas/kadi-extensions.js +14 -0
- package/dist/schemas/kadi-extensions.js.map +1 -0
- package/dist/schemas/mcp/schema.d.ts +1399 -0
- package/dist/schemas/mcp/schema.d.ts.map +1 -0
- package/dist/schemas/mcp/schema.js +53 -0
- package/dist/schemas/mcp/schema.js.map +1 -0
- package/dist/schemas/mcp/version.d.ts +37 -0
- package/dist/schemas/mcp/version.d.ts.map +1 -0
- package/dist/schemas/mcp/version.js +39 -0
- package/dist/schemas/mcp/version.js.map +1 -0
- package/dist/schemas/schema-builders.d.ts +178 -0
- package/dist/schemas/schema-builders.d.ts.map +1 -0
- package/dist/schemas/schema-builders.js +258 -0
- package/dist/schemas/schema-builders.js.map +1 -0
- package/dist/tools/ToolRegistry.d.ts +256 -0
- package/dist/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/tools/ToolRegistry.js +340 -0
- package/dist/tools/ToolRegistry.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/transports/BrokerTransport.d.ts +151 -0
- package/dist/transports/BrokerTransport.d.ts.map +1 -0
- package/dist/transports/BrokerTransport.js +261 -0
- package/dist/transports/BrokerTransport.js.map +1 -0
- package/dist/transports/NativeTransport.d.ts +149 -0
- package/dist/transports/NativeTransport.d.ts.map +1 -0
- package/dist/transports/NativeTransport.js +302 -0
- package/dist/transports/NativeTransport.js.map +1 -0
- package/dist/transports/StdioTransport.d.ts +172 -0
- package/dist/transports/StdioTransport.d.ts.map +1 -0
- package/dist/transports/StdioTransport.js +410 -0
- package/dist/transports/StdioTransport.js.map +1 -0
- package/dist/transports/index.d.ts +10 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +9 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/types/broker.d.ts +301 -0
- package/dist/types/broker.d.ts.map +1 -0
- package/dist/types/broker.js +46 -0
- package/dist/types/broker.js.map +1 -0
- package/dist/types/config.d.ts +325 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +17 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/errors.d.ts +178 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +165 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/events.d.ts +210 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +8 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +32 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/protocol.d.ts +48 -0
- package/dist/types/protocol.d.ts.map +1 -0
- package/dist/types/protocol.js +11 -0
- package/dist/types/protocol.js.map +1 -0
- package/dist/types/tools.d.ts +67 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +16 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types/transport.d.ts +250 -0
- package/dist/types/transport.d.ts.map +1 -0
- package/dist/types/transport.js +18 -0
- package/dist/types/transport.js.map +1 -0
- package/dist/validation/SchemaValidator.d.ts +208 -0
- package/dist/validation/SchemaValidator.d.ts.map +1 -0
- package/dist/validation/SchemaValidator.js +411 -0
- package/dist/validation/SchemaValidator.js.map +1 -0
- package/dist/validation/index.d.ts +11 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +10 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +69 -5
- package/agent.json +0 -18
- package/broker.js +0 -214
- package/index.js +0 -370
- package/ipc.js +0 -220
- package/ipcInterfaces/pythonAbilityIPC.py +0 -177
|
@@ -0,0 +1,302 @@
|
|
|
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
|
+
* Native Transport
|
|
14
|
+
*
|
|
15
|
+
* Loads Node.js modules directly into the current process.
|
|
16
|
+
* Provides zero-overhead method invocation since everything runs in-process.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const transport = new NativeTransport({
|
|
21
|
+
* abilityName: 'calculator',
|
|
22
|
+
* abilityPath: '/path/to/calculator',
|
|
23
|
+
* entryPoint: 'index.js'
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* await transport.connect();
|
|
27
|
+
* const result = await transport.invoke('add', { a: 5, b: 3 });
|
|
28
|
+
* console.log(result); // { result: 8 }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export class NativeTransport extends EventEmitter {
|
|
32
|
+
/**
|
|
33
|
+
* Transport configuration
|
|
34
|
+
*/
|
|
35
|
+
options;
|
|
36
|
+
/**
|
|
37
|
+
* Loaded ability module
|
|
38
|
+
*/
|
|
39
|
+
ability = null;
|
|
40
|
+
/**
|
|
41
|
+
* Discovered methods
|
|
42
|
+
*/
|
|
43
|
+
methods = [];
|
|
44
|
+
/**
|
|
45
|
+
* Method schemas
|
|
46
|
+
*/
|
|
47
|
+
schemas = new Map();
|
|
48
|
+
/**
|
|
49
|
+
* Whether transport is connected
|
|
50
|
+
*/
|
|
51
|
+
connected = false;
|
|
52
|
+
/**
|
|
53
|
+
* Create a new NativeTransport
|
|
54
|
+
*
|
|
55
|
+
* @param options - Native transport options
|
|
56
|
+
*/
|
|
57
|
+
constructor(options) {
|
|
58
|
+
super();
|
|
59
|
+
this.options = {
|
|
60
|
+
entryPoint: options.entryPoint ?? 'index.js',
|
|
61
|
+
timeout: options.timeout ?? 30000,
|
|
62
|
+
abilityPath: options.abilityPath,
|
|
63
|
+
abilityName: options.abilityName,
|
|
64
|
+
abilityVersion: options.abilityVersion ?? '1.0.0'
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Connect to the ability
|
|
69
|
+
*
|
|
70
|
+
* Loads the module from disk and performs discovery.
|
|
71
|
+
*
|
|
72
|
+
* @throws {KadiError} If module cannot be loaded
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* await transport.connect();
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
async connect() {
|
|
80
|
+
if (this.connected) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
// Resolve module path
|
|
85
|
+
const modulePath = resolve(this.options.abilityPath, this.options.entryPoint);
|
|
86
|
+
// Load the module
|
|
87
|
+
const module = await import(modulePath);
|
|
88
|
+
// Get the ability (default export or named export)
|
|
89
|
+
this.ability = module.default ?? module;
|
|
90
|
+
if (!this.ability || typeof this.ability !== 'object') {
|
|
91
|
+
throw new KadiError(`Ability module must export an object or class instance`, ErrorCode.ABILITY_LOAD_FAILED, 500, { abilityName: this.options.abilityName, modulePath });
|
|
92
|
+
}
|
|
93
|
+
// Discover methods
|
|
94
|
+
await this.discoverMethods();
|
|
95
|
+
this.connected = true;
|
|
96
|
+
this.emit('connected');
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
const kadiError = error instanceof KadiError
|
|
100
|
+
? error
|
|
101
|
+
: new KadiError(`Failed to load ability: ${error instanceof Error ? error.message : String(error)}`, ErrorCode.ABILITY_LOAD_FAILED, 500, {
|
|
102
|
+
abilityName: this.options.abilityName,
|
|
103
|
+
abilityPath: this.options.abilityPath,
|
|
104
|
+
originalError: error instanceof Error ? error.message : String(error)
|
|
105
|
+
});
|
|
106
|
+
this.emit('error', kadiError);
|
|
107
|
+
throw kadiError;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Invoke a method on the ability
|
|
112
|
+
*
|
|
113
|
+
* @template TInput - Input parameter type
|
|
114
|
+
* @template TOutput - Return type
|
|
115
|
+
*
|
|
116
|
+
* @param method - Method name
|
|
117
|
+
* @param params - Method parameters
|
|
118
|
+
* @returns Promise resolving to method result
|
|
119
|
+
*
|
|
120
|
+
* @throws {KadiError} If method doesn't exist or invocation fails
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* const result = await transport.invoke<{ a: number; b: number }, { result: number }>(
|
|
125
|
+
* 'add',
|
|
126
|
+
* { a: 5, b: 3 }
|
|
127
|
+
* );
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
async invoke(method, params) {
|
|
131
|
+
if (!this.connected) {
|
|
132
|
+
throw new KadiError('Transport not connected', ErrorCode.TRANSPORT_NOT_CONNECTED, 503, { abilityName: this.options.abilityName });
|
|
133
|
+
}
|
|
134
|
+
// Check if method exists
|
|
135
|
+
if (!this.methods.includes(method)) {
|
|
136
|
+
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 });
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
// Get the method function
|
|
140
|
+
const handler = this.ability[method];
|
|
141
|
+
if (typeof handler !== 'function') {
|
|
142
|
+
throw new KadiError(`Method '${method}' is not a function`, ErrorCode.ABILITY_METHOD_NOT_FOUND, 500, { abilityName: this.options.abilityName, method, type: typeof handler });
|
|
143
|
+
}
|
|
144
|
+
// Invoke with timeout
|
|
145
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
146
|
+
setTimeout(() => {
|
|
147
|
+
reject(new KadiError(`Method invocation timeout after ${this.options.timeout}ms`, ErrorCode.TOOL_TIMEOUT, 408, { abilityName: this.options.abilityName, method, timeout: this.options.timeout }));
|
|
148
|
+
}, this.options.timeout);
|
|
149
|
+
});
|
|
150
|
+
const result = await Promise.race([
|
|
151
|
+
handler.call(this.ability, params),
|
|
152
|
+
timeoutPromise
|
|
153
|
+
]);
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
// Don't wrap KadiError
|
|
158
|
+
if (error instanceof KadiError) {
|
|
159
|
+
throw error;
|
|
160
|
+
}
|
|
161
|
+
// Enhance the original error with context
|
|
162
|
+
if (error instanceof Error) {
|
|
163
|
+
const enhancedError = error;
|
|
164
|
+
enhancedError.message = `${error.message} (in ${this.options.abilityName}.${method})`;
|
|
165
|
+
throw enhancedError;
|
|
166
|
+
}
|
|
167
|
+
throw new KadiError(`Method invocation failed: ${String(error)}`, ErrorCode.TOOL_INVOCATION_FAILED, 500, { abilityName: this.options.abilityName, method });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get list of available methods
|
|
172
|
+
*
|
|
173
|
+
* @returns Array of method names
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* const methods = transport.getMethods();
|
|
178
|
+
* console.log('Available methods:', methods);
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
getMethods() {
|
|
182
|
+
return [...this.methods];
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get schema for a specific method
|
|
186
|
+
*
|
|
187
|
+
* @param method - Method name
|
|
188
|
+
* @returns Method schema or undefined
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```typescript
|
|
192
|
+
* const schema = transport.getMethodSchema('add');
|
|
193
|
+
* if (schema) {
|
|
194
|
+
* console.log('Input schema:', schema.inputSchema);
|
|
195
|
+
* }
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
getMethodSchema(method) {
|
|
199
|
+
return this.schemas.get(method);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Disconnect from the ability
|
|
203
|
+
*
|
|
204
|
+
* Cleans up resources and removes references.
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```typescript
|
|
208
|
+
* await transport.disconnect();
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
async disconnect() {
|
|
212
|
+
if (!this.connected) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
// Clean up
|
|
216
|
+
this.ability = null;
|
|
217
|
+
this.methods = [];
|
|
218
|
+
this.schemas.clear();
|
|
219
|
+
this.connected = false;
|
|
220
|
+
this.emit('disconnected');
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Publish an event from the ability
|
|
224
|
+
*
|
|
225
|
+
* @param eventName - Event name
|
|
226
|
+
* @param data - Event data
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```typescript
|
|
230
|
+
* transport.publishEvent('calculation.completed', { result: 42 });
|
|
231
|
+
* ```
|
|
232
|
+
*/
|
|
233
|
+
publishEvent(eventName, data) {
|
|
234
|
+
this.emit('event', {
|
|
235
|
+
eventName,
|
|
236
|
+
data,
|
|
237
|
+
timestamp: Date.now(),
|
|
238
|
+
source: this.options.abilityName
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Discover methods on the loaded ability
|
|
243
|
+
*
|
|
244
|
+
* Introspects the ability object to find callable methods.
|
|
245
|
+
* Excludes internal methods (starting with _) and special methods.
|
|
246
|
+
*/
|
|
247
|
+
async discoverMethods() {
|
|
248
|
+
if (!this.ability || typeof this.ability !== 'object') {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
const excludedMethods = new Set([
|
|
252
|
+
'constructor',
|
|
253
|
+
'toString',
|
|
254
|
+
'toJSON',
|
|
255
|
+
'valueOf',
|
|
256
|
+
'hasOwnProperty',
|
|
257
|
+
'isPrototypeOf',
|
|
258
|
+
'propertyIsEnumerable'
|
|
259
|
+
]);
|
|
260
|
+
// Get all property names (own and inherited)
|
|
261
|
+
const allProps = new Set();
|
|
262
|
+
// Own properties
|
|
263
|
+
for (const prop of Object.getOwnPropertyNames(this.ability)) {
|
|
264
|
+
allProps.add(prop);
|
|
265
|
+
}
|
|
266
|
+
// Prototype properties
|
|
267
|
+
let proto = Object.getPrototypeOf(this.ability);
|
|
268
|
+
while (proto && proto !== Object.prototype) {
|
|
269
|
+
for (const prop of Object.getOwnPropertyNames(proto)) {
|
|
270
|
+
allProps.add(prop);
|
|
271
|
+
}
|
|
272
|
+
proto = Object.getPrototypeOf(proto);
|
|
273
|
+
}
|
|
274
|
+
// Filter to functions, exclude internal methods
|
|
275
|
+
for (const prop of allProps) {
|
|
276
|
+
if (excludedMethods.has(prop)) {
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
if (prop.startsWith('_')) {
|
|
280
|
+
continue; // Internal method
|
|
281
|
+
}
|
|
282
|
+
try {
|
|
283
|
+
const value = this.ability[prop];
|
|
284
|
+
if (typeof value === 'function') {
|
|
285
|
+
this.methods.push(prop);
|
|
286
|
+
// Try to get schema if available
|
|
287
|
+
const schemaGetter = this.ability[`${prop}Schema`];
|
|
288
|
+
if (typeof schemaGetter === 'function') {
|
|
289
|
+
const schema = schemaGetter.call(this.ability);
|
|
290
|
+
if (schema) {
|
|
291
|
+
this.schemas.set(prop, schema);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// Skip properties that throw on access
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=NativeTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeTransport.js","sourceRoot":"","sources":["../../src/transports/NativeTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stdio Transport
|
|
3
|
+
*
|
|
4
|
+
* Communicates with abilities running as child processes via stdin/stdout.
|
|
5
|
+
* Enables using abilities written in any language that supports JSON over stdio.
|
|
6
|
+
*
|
|
7
|
+
* @module transports/StdioTransport
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from 'events';
|
|
10
|
+
import type { AbilityTransport, StdioTransportOptions, MethodSchema } from '../types/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Stdio Transport
|
|
13
|
+
*
|
|
14
|
+
* Spawns a child process and communicates via JSON messages over stdin/stdout.
|
|
15
|
+
* Uses length-prefixed framing for reliable message boundaries.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const transport = new StdioTransport({
|
|
20
|
+
* abilityName: 'python-calculator',
|
|
21
|
+
* abilityPath: '/path/to/calculator',
|
|
22
|
+
* command: 'python3',
|
|
23
|
+
* args: ['main.py']
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* await transport.connect();
|
|
27
|
+
* const result = await transport.invoke('calculate', { expr: '2 + 2' });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare class StdioTransport extends EventEmitter implements AbilityTransport {
|
|
31
|
+
/**
|
|
32
|
+
* Transport configuration
|
|
33
|
+
*/
|
|
34
|
+
private readonly options;
|
|
35
|
+
/**
|
|
36
|
+
* Child process instance
|
|
37
|
+
*/
|
|
38
|
+
private process;
|
|
39
|
+
/**
|
|
40
|
+
* Discovered methods
|
|
41
|
+
*/
|
|
42
|
+
private methods;
|
|
43
|
+
/**
|
|
44
|
+
* Method schemas
|
|
45
|
+
*/
|
|
46
|
+
private schemas;
|
|
47
|
+
/**
|
|
48
|
+
* Whether transport is connected
|
|
49
|
+
*/
|
|
50
|
+
private connected;
|
|
51
|
+
/**
|
|
52
|
+
* Pending requests waiting for responses
|
|
53
|
+
*/
|
|
54
|
+
private pendingRequests;
|
|
55
|
+
/**
|
|
56
|
+
* Buffer for incomplete messages
|
|
57
|
+
*/
|
|
58
|
+
private buffer;
|
|
59
|
+
/**
|
|
60
|
+
* Create a new StdioTransport
|
|
61
|
+
*
|
|
62
|
+
* @param options - Stdio transport options
|
|
63
|
+
*/
|
|
64
|
+
constructor(options: StdioTransportOptions);
|
|
65
|
+
/**
|
|
66
|
+
* Connect to the ability
|
|
67
|
+
*
|
|
68
|
+
* Spawns the child process and performs method discovery.
|
|
69
|
+
*
|
|
70
|
+
* @throws {KadiError} If process fails to start or discovery fails
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* await transport.connect();
|
|
75
|
+
* console.log('Process started');
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
connect(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Invoke a method on the ability
|
|
81
|
+
*
|
|
82
|
+
* @template TInput - Input parameter type
|
|
83
|
+
* @template TOutput - Return type
|
|
84
|
+
*
|
|
85
|
+
* @param method - Method name
|
|
86
|
+
* @param params - Method parameters
|
|
87
|
+
* @returns Promise resolving to method result
|
|
88
|
+
*
|
|
89
|
+
* @throws {KadiError} If method doesn't exist or invocation fails
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* const result = await transport.invoke('add', { a: 5, b: 3 });
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
invoke<TInput = unknown, TOutput = unknown>(method: string, params: TInput): Promise<TOutput>;
|
|
97
|
+
/**
|
|
98
|
+
* Get list of available methods
|
|
99
|
+
*
|
|
100
|
+
* @returns Array of method names
|
|
101
|
+
*/
|
|
102
|
+
getMethods(): string[];
|
|
103
|
+
/**
|
|
104
|
+
* Get schema for a specific method
|
|
105
|
+
*
|
|
106
|
+
* @param method - Method name
|
|
107
|
+
* @returns Method schema or undefined
|
|
108
|
+
*/
|
|
109
|
+
getMethodSchema(method: string): MethodSchema | undefined;
|
|
110
|
+
/**
|
|
111
|
+
* Disconnect from the ability
|
|
112
|
+
*
|
|
113
|
+
* Terminates the child process and cleans up resources.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* await transport.disconnect();
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
disconnect(): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Publish an event from the ability
|
|
123
|
+
*
|
|
124
|
+
* @param eventName - Event name
|
|
125
|
+
* @param data - Event data
|
|
126
|
+
*/
|
|
127
|
+
publishEvent(eventName: string, data: unknown): void;
|
|
128
|
+
/**
|
|
129
|
+
* Discover methods by sending discovery request
|
|
130
|
+
*/
|
|
131
|
+
private discoverMethods;
|
|
132
|
+
/**
|
|
133
|
+
* Send a message to the child process
|
|
134
|
+
*
|
|
135
|
+
* Uses length-prefixed framing: [length:4 bytes][json message]
|
|
136
|
+
*
|
|
137
|
+
* @param message - Message to send
|
|
138
|
+
*/
|
|
139
|
+
private sendMessage;
|
|
140
|
+
/**
|
|
141
|
+
* Handle incoming data from stdout
|
|
142
|
+
*
|
|
143
|
+
* Implements length-prefixed framing to extract complete messages.
|
|
144
|
+
*
|
|
145
|
+
* @param data - Raw data from stdout
|
|
146
|
+
*/
|
|
147
|
+
private handleData;
|
|
148
|
+
/**
|
|
149
|
+
* Handle a parsed message
|
|
150
|
+
*
|
|
151
|
+
* @param message - Parsed message object
|
|
152
|
+
*/
|
|
153
|
+
private handleMessage;
|
|
154
|
+
/**
|
|
155
|
+
* Handle process error
|
|
156
|
+
*
|
|
157
|
+
* @param error - Error from child process
|
|
158
|
+
*/
|
|
159
|
+
private handleProcessError;
|
|
160
|
+
/**
|
|
161
|
+
* Handle process exit
|
|
162
|
+
*
|
|
163
|
+
* @param code - Exit code
|
|
164
|
+
* @param signal - Exit signal
|
|
165
|
+
*/
|
|
166
|
+
private handleProcessExit;
|
|
167
|
+
/**
|
|
168
|
+
* Cleanup resources
|
|
169
|
+
*/
|
|
170
|
+
private cleanup;
|
|
171
|
+
}
|
|
172
|
+
//# 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,qBAAqB,EACrB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAkB3B;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,cAAe,SAAQ,YAAa,YAAW,gBAAgB;IAC1E;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D;;OAEG;IACH,OAAO,CAAC,OAAO,CAA6B;IAE5C;;OAEG;IACH,OAAO,CAAC,OAAO,CAAgB;IAE/B;;OAEG;IACH,OAAO,CAAC,OAAO,CAAmC;IAElD;;OAEG;IACH,OAAO,CAAC,SAAS,CAAS;IAE1B;;OAEG;IACH,OAAO,CAAC,eAAe,CAAmD;IAE1E;;OAEG;IACH,OAAO,CAAC,MAAM,CAAmB;IAEjC;;;;OAIG;gBACS,OAAO,EAAE,qBAAqB;IAc1C;;;;;;;;;;;;OAYG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmE9B;;;;;;;;;;;;;;;;OAgBG;IACG,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC9C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC;IAiDnB;;;;OAIG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIzD;;;;;;;;;OASG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IASpD;;OAEG;YACW,eAAe;IAgD7B;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IA8BnB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAiClB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAsCrB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,OAAO;CA4BhB"}
|