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

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 (71) hide show
  1. package/README.md +269 -1311
  2. package/dist/abilities/AbilityLoader.d.ts +26 -0
  3. package/dist/abilities/AbilityLoader.d.ts.map +1 -1
  4. package/dist/abilities/AbilityLoader.js +141 -18
  5. package/dist/abilities/AbilityLoader.js.map +1 -1
  6. package/dist/abilities/AbilityProxy.d.ts +33 -0
  7. package/dist/abilities/AbilityProxy.d.ts.map +1 -1
  8. package/dist/abilities/AbilityProxy.js +40 -0
  9. package/dist/abilities/AbilityProxy.js.map +1 -1
  10. package/dist/abilities/index.d.ts +1 -1
  11. package/dist/abilities/index.d.ts.map +1 -1
  12. package/dist/abilities/types.d.ts +67 -0
  13. package/dist/abilities/types.d.ts.map +1 -1
  14. package/dist/broker/BrokerProtocol.js +11 -11
  15. package/dist/broker/BrokerProtocol.js.map +1 -1
  16. package/dist/client/KadiClient.d.ts +191 -2
  17. package/dist/client/KadiClient.d.ts.map +1 -1
  18. package/dist/client/KadiClient.js +412 -2
  19. package/dist/client/KadiClient.js.map +1 -1
  20. package/dist/index.d.ts +3 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +5 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/messages/index.d.ts +1 -1
  25. package/dist/messages/index.js +1 -1
  26. package/dist/messages/index.js.map +1 -1
  27. package/dist/schemas/index.d.ts +3 -0
  28. package/dist/schemas/index.d.ts.map +1 -1
  29. package/dist/schemas/index.js +2 -0
  30. package/dist/schemas/index.js.map +1 -1
  31. package/dist/schemas/zod-helpers.d.ts +129 -0
  32. package/dist/schemas/zod-helpers.d.ts.map +1 -0
  33. package/dist/schemas/zod-helpers.js +225 -0
  34. package/dist/schemas/zod-helpers.js.map +1 -0
  35. package/dist/schemas/zod-to-json-schema.d.ts +159 -0
  36. package/dist/schemas/zod-to-json-schema.d.ts.map +1 -0
  37. package/dist/schemas/zod-to-json-schema.js +154 -0
  38. package/dist/schemas/zod-to-json-schema.js.map +1 -0
  39. package/dist/transports/NativeTransport.d.ts +29 -0
  40. package/dist/transports/NativeTransport.d.ts.map +1 -1
  41. package/dist/transports/NativeTransport.js +98 -3
  42. package/dist/transports/NativeTransport.js.map +1 -1
  43. package/dist/transports/StdioTransport.d.ts +141 -63
  44. package/dist/transports/StdioTransport.d.ts.map +1 -1
  45. package/dist/transports/StdioTransport.js +309 -232
  46. package/dist/transports/StdioTransport.js.map +1 -1
  47. package/dist/types/broker.d.ts +0 -22
  48. package/dist/types/broker.d.ts.map +1 -1
  49. package/dist/types/broker.js +0 -27
  50. package/dist/types/broker.js.map +1 -1
  51. package/dist/types/index.d.ts +3 -1
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/dist/types/index.js +1 -1
  54. package/dist/types/index.js.map +1 -1
  55. package/dist/types/zod-tools.d.ts +198 -0
  56. package/dist/types/zod-tools.d.ts.map +1 -0
  57. package/dist/types/zod-tools.js +14 -0
  58. package/dist/types/zod-tools.js.map +1 -0
  59. package/dist/utils/LockfileResolver.d.ts +108 -0
  60. package/dist/utils/LockfileResolver.d.ts.map +1 -0
  61. package/dist/utils/LockfileResolver.js +230 -0
  62. package/dist/utils/LockfileResolver.js.map +1 -0
  63. package/dist/utils/StdioMessageReader.d.ts +122 -0
  64. package/dist/utils/StdioMessageReader.d.ts.map +1 -0
  65. package/dist/utils/StdioMessageReader.js +209 -0
  66. package/dist/utils/StdioMessageReader.js.map +1 -0
  67. package/dist/utils/StdioMessageWriter.d.ts +104 -0
  68. package/dist/utils/StdioMessageWriter.d.ts.map +1 -0
  69. package/dist/utils/StdioMessageWriter.js +162 -0
  70. package/dist/utils/StdioMessageWriter.js.map +1 -0
  71. package/package.json +2 -1
@@ -1,30 +1,59 @@
1
1
  /**
2
2
  * Stdio Transport
3
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.
4
+ * Spawns abilities as child processes and communicates via stdin/stdout
5
+ * using Content-Length framed JSON-RPC messages (LSP-style).
6
6
  *
7
7
  * @module transports/StdioTransport
8
8
  */
9
9
  import { EventEmitter } from 'events';
10
- import type { AbilityTransport, StdioTransportOptions, MethodSchema } from '../types/index.js';
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
+ }
11
31
  /**
12
32
  * Stdio Transport
13
33
  *
14
- * Spawns a child process and communicates via JSON messages over stdin/stdout.
15
- * Uses length-prefixed framing for reliable message boundaries.
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
16
44
  *
17
45
  * @example
18
46
  * ```typescript
19
47
  * const transport = new StdioTransport({
20
- * abilityName: 'python-calculator',
21
- * abilityPath: '/path/to/calculator',
22
- * command: 'python3',
23
- * args: ['main.py']
48
+ * abilityName: 'calculator',
49
+ * command: 'node',
50
+ * args: ['./abilities/calculator/index.js']
24
51
  * });
25
52
  *
26
53
  * await transport.connect();
27
- * const result = await transport.invoke('calculate', { expr: '2 + 2' });
54
+ * const result = await transport.invoke('add', { a: 5, b: 3 });
55
+ * console.log(result); // { result: 8 }
56
+ * await transport.disconnect();
28
57
  * ```
29
58
  */
30
59
  export declare class StdioTransport extends EventEmitter implements AbilityTransport {
@@ -35,7 +64,27 @@ export declare class StdioTransport extends EventEmitter implements AbilityTrans
35
64
  /**
36
65
  * Child process instance
37
66
  */
38
- private process;
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;
39
88
  /**
40
89
  * Discovered methods
41
90
  */
@@ -45,34 +94,34 @@ export declare class StdioTransport extends EventEmitter implements AbilityTrans
45
94
  */
46
95
  private schemas;
47
96
  /**
48
- * Whether transport is connected
97
+ * Agent.json representation (from readAgentJson)
49
98
  */
50
- private connected;
99
+ private agentJson?;
51
100
  /**
52
- * Pending requests waiting for responses
101
+ * Request ID counter
53
102
  */
54
- private pendingRequests;
103
+ private requestIdCounter;
55
104
  /**
56
- * Buffer for incomplete messages
105
+ * Pending requests (waiting for responses)
57
106
  */
58
- private buffer;
107
+ private pendingRequests;
59
108
  /**
60
109
  * Create a new StdioTransport
61
110
  *
62
- * @param options - Stdio transport options
111
+ * @param options - Transport options
63
112
  */
64
113
  constructor(options: StdioTransportOptions);
65
114
  /**
66
115
  * Connect to the ability
67
116
  *
68
- * Spawns the child process and performs method discovery.
117
+ * Spawns the child process, sets up stdio communication,
118
+ * and performs discovery via readAgentJson.
69
119
  *
70
- * @throws {KadiError} If process fails to start or discovery fails
120
+ * @throws {KadiError} If spawn fails or discovery fails
71
121
  *
72
122
  * @example
73
123
  * ```typescript
74
124
  * await transport.connect();
75
- * console.log('Process started');
76
125
  * ```
77
126
  */
78
127
  connect(): Promise<void>;
@@ -90,14 +139,41 @@ export declare class StdioTransport extends EventEmitter implements AbilityTrans
90
139
  *
91
140
  * @example
92
141
  * ```typescript
93
- * const result = await transport.invoke('add', { a: 5, b: 3 });
142
+ * const result = await transport.invoke<{ a: number; b: number }, { result: number }>(
143
+ * 'add',
144
+ * { a: 5, b: 3 }
145
+ * );
94
146
  * ```
95
147
  */
96
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;
97
167
  /**
98
168
  * Get list of available methods
99
169
  *
100
170
  * @returns Array of method names
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * const methods = transport.getMethods();
175
+ * console.log('Available methods:', methods);
176
+ * ```
101
177
  */
102
178
  getMethods(): string[];
103
179
  /**
@@ -105,68 +181,70 @@ export declare class StdioTransport extends EventEmitter implements AbilityTrans
105
181
  *
106
182
  * @param method - Method name
107
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
+ * ```
108
192
  */
109
193
  getMethodSchema(method: string): MethodSchema | undefined;
110
194
  /**
111
- * Disconnect from the ability
195
+ * Read agent.json representation
196
+ *
197
+ * Returns the agent.json representation retrieved during connection.
112
198
  *
113
- * Terminates the child process and cleans up resources.
199
+ * @returns agent.json representation or undefined
114
200
  *
115
201
  * @example
116
202
  * ```typescript
117
- * await transport.disconnect();
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
+ * }
118
208
  * ```
119
209
  */
120
- disconnect(): Promise<void>;
210
+ readAgentJson(): AgentJson | undefined;
121
211
  /**
122
- * Publish an event from the ability
212
+ * Get captured stderr output
123
213
  *
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
214
+ * Returns all stderr output captured from the child process.
215
+ * Useful for debugging or viewing ability logs.
134
216
  *
135
- * Uses length-prefixed framing: [length:4 bytes][json message]
217
+ * @returns Stderr content as string
136
218
  *
137
- * @param message - Message to send
219
+ * @example
220
+ * ```typescript
221
+ * const stderr = transport.getStderr();
222
+ * console.log('Ability logs:', stderr);
223
+ * ```
138
224
  */
139
- private sendMessage;
225
+ getStderr(): string;
140
226
  /**
141
- * Handle incoming data from stdout
142
- *
143
- * Implements length-prefixed framing to extract complete messages.
227
+ * Disconnect from the ability
144
228
  *
145
- * @param data - Raw data from stdout
146
- */
147
- private handleData;
148
- /**
149
- * Handle a parsed message
229
+ * Kills the child process with SIGTERM and cleans up resources.
150
230
  *
151
- * @param message - Parsed message object
231
+ * @example
232
+ * ```typescript
233
+ * await transport.disconnect();
234
+ * ```
152
235
  */
153
- private handleMessage;
236
+ disconnect(): Promise<void>;
154
237
  /**
155
- * Handle process error
238
+ * Publish an event from the ability
156
239
  *
157
- * @param error - Error from child process
158
- */
159
- private handleProcessError;
160
- /**
161
- * Handle process exit
240
+ * @param eventName - Event name
241
+ * @param data - Event data
162
242
  *
163
- * @param code - Exit code
164
- * @param signal - Exit signal
165
- */
166
- private handleProcessExit;
167
- /**
168
- * Cleanup resources
243
+ * @example
244
+ * ```typescript
245
+ * transport.publishEvent('calculation.completed', { result: 42 });
246
+ * ```
169
247
  */
170
- private cleanup;
248
+ publishEvent(eventName: string, data: unknown): void;
171
249
  }
172
250
  //# sourceMappingURL=StdioTransport.d.ts.map
@@ -1 +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"}
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"}