@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,492 @@
1
+ /**
2
+ * KADI Client
3
+ *
4
+ * Thin orchestrator that composes specialized modules to provide the
5
+ * complete KADI client functionality.
6
+ *
7
+ * This is dramatically simpler than the old implementation because each
8
+ * concern has been properly separated.
9
+ *
10
+ * @module client/KadiClient
11
+ */
12
+ import { EventEmitter } from 'events';
13
+ import { KadiError, ErrorCode } from '../types/index.js';
14
+ import { KadiMessages } from '../messages/index.js';
15
+ import { ConfigResolver } from '../config/ConfigResolver.js';
16
+ import { ToolRegistry } from '../tools/ToolRegistry.js';
17
+ import { EventHub } from '../events/EventHub.js';
18
+ import { BrokerConnectionManager } from '../broker/BrokerConnectionManager.js';
19
+ import { BrokerProtocol, PROTOCOL_VERSION } from '../broker/BrokerProtocol.js';
20
+ import { AbilityLoader } from '../abilities/index.js';
21
+ /**
22
+ * KADI Client
23
+ *
24
+ * Main client class for KADI framework.
25
+ * Orchestrates tool registry, event hub, broker connections, and ability loading.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * // Create client
30
+ * const client = new KadiClient({
31
+ * name: 'my-service',
32
+ * brokers: { local: 'ws://localhost:8080' },
33
+ * networks: ['global']
34
+ * });
35
+ *
36
+ * // Register a tool
37
+ * client.registerTool('greet', async ({ name }) => {
38
+ * return { message: `Hello, ${name}!` };
39
+ * });
40
+ *
41
+ * // Connect to brokers
42
+ * await client.connect();
43
+ *
44
+ * // Load an ability (explicit transport)
45
+ * const calc = await client.load('calculator', 'broker');
46
+ * const result = await calc.add({ a: 5, b: 3 });
47
+ *
48
+ * // Subscribe to events
49
+ * client.subscribeToEvent('user.*', (data) => {
50
+ * console.log('User event:', data);
51
+ * });
52
+ *
53
+ * // Publish an event
54
+ * client.publishEvent('user.login', { userId: '123' });
55
+ * ```
56
+ */
57
+ export class KadiClient extends EventEmitter {
58
+ /**
59
+ * Resolved configuration
60
+ */
61
+ config;
62
+ /**
63
+ * Tool registry
64
+ */
65
+ tools;
66
+ /**
67
+ * Event hub
68
+ */
69
+ events;
70
+ /**
71
+ * Broker connection manager
72
+ */
73
+ brokers;
74
+ /**
75
+ * Broker protocol instances (per broker)
76
+ */
77
+ protocols = new Map();
78
+ /**
79
+ * Ability loader
80
+ */
81
+ abilityLoader;
82
+ /**
83
+ * Whether client is initialized
84
+ */
85
+ initialized = false;
86
+ /**
87
+ * Create a new KADI Client
88
+ *
89
+ * @param config - Client configuration
90
+ */
91
+ constructor(config) {
92
+ super();
93
+ // Initialize specialized modules
94
+ this.tools = new ToolRegistry();
95
+ this.events = new EventHub('unknown'); // Will be updated after config resolution
96
+ this.brokers = new BrokerConnectionManager();
97
+ this.abilityLoader = new AbilityLoader();
98
+ // Resolve configuration (synchronous placeholder - will be async in connect())
99
+ // For now, create a minimal config
100
+ this.config = this.createMinimalConfig(config);
101
+ // Update event hub source to match client name
102
+ this.events.setSource(this.config.name);
103
+ // Forward broker events
104
+ this.setupBrokerEventForwarding();
105
+ }
106
+ /**
107
+ * Connect to configured brokers
108
+ *
109
+ * @throws {KadiError} If connection fails
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * await client.connect();
114
+ * console.log('Connected to brokers');
115
+ * ```
116
+ */
117
+ async connect() {
118
+ if (this.initialized) {
119
+ return;
120
+ }
121
+ // Resolve full configuration
122
+ const resolver = new ConfigResolver();
123
+ const resolved = await resolver.resolve(this.config);
124
+ Object.assign(this.config, resolved);
125
+ // Connect to brokers if configured
126
+ if (this.config.brokers && Object.keys(this.config.brokers).length > 0) {
127
+ await this.connectToBrokers();
128
+ }
129
+ this.initialized = true;
130
+ this.emit('ready');
131
+ }
132
+ /**
133
+ * Connect to all configured brokers
134
+ */
135
+ async connectToBrokers() {
136
+ if (!this.config.brokers) {
137
+ return;
138
+ }
139
+ const brokerConfigs = Object.entries(this.config.brokers).map(([name, url]) => ({
140
+ name,
141
+ url,
142
+ heartbeatInterval: this.config.advanced.heartbeatInterval,
143
+ requestTimeout: this.config.advanced.requestTimeout,
144
+ connectionTimeout: this.config.advanced.connectionTimeout
145
+ }));
146
+ // Connect to all brokers
147
+ await this.brokers.connectMultiple(brokerConfigs, this.config.defaultBroker);
148
+ // Perform handshake and register capabilities for each broker
149
+ for (const brokerName of this.brokers.getBrokerNames()) {
150
+ const connection = this.brokers.getConnection(brokerName);
151
+ if (!connection) {
152
+ continue;
153
+ }
154
+ // Create protocol instance
155
+ const protocol = new BrokerProtocol(connection);
156
+ this.protocols.set(brokerName, protocol);
157
+ // Perform handshake
158
+ await protocol.handshake({
159
+ role: this.config.role || 'agent',
160
+ name: this.config.name,
161
+ version: this.config.version,
162
+ protocolVersion: PROTOCOL_VERSION,
163
+ networks: this.config.networks
164
+ });
165
+ // Register capabilities
166
+ await this.registerCapabilitiesWithBroker(protocol);
167
+ // Start heartbeat
168
+ protocol.startHeartbeat(this.config.advanced.heartbeatInterval ?? 30000);
169
+ }
170
+ }
171
+ /**
172
+ * Register capabilities with a broker
173
+ *
174
+ * @param protocol - Broker protocol instance
175
+ */
176
+ async registerCapabilitiesWithBroker(protocol) {
177
+ const toolDefinitions = this.tools.extractDefinitions();
178
+ if (toolDefinitions.length > 0) {
179
+ await protocol.registerCapabilities({
180
+ tools: toolDefinitions,
181
+ networks: this.config.networks,
182
+ displayName: this.config.name
183
+ });
184
+ }
185
+ }
186
+ /**
187
+ * Register a tool (MCP-based)
188
+ *
189
+ * @template TInput - Tool input type
190
+ * @template TOutput - Tool output type
191
+ * @param definition - MCP-compliant tool definition
192
+ * @param handler - Tool handler function
193
+ * @returns this for chaining
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * client.registerTool({
198
+ * name: 'add',
199
+ * description: 'Add two numbers',
200
+ * version: '1.0.0',
201
+ * tags: ['math'],
202
+ * inputSchema: {
203
+ * type: 'object',
204
+ * properties: {
205
+ * a: { type: 'number' },
206
+ * b: { type: 'number' }
207
+ * },
208
+ * required: ['a', 'b']
209
+ * },
210
+ * outputSchema: {
211
+ * type: 'object',
212
+ * properties: {
213
+ * result: { type: 'number' }
214
+ * }
215
+ * }
216
+ * }, async ({ a, b }) => {
217
+ * return { result: a + b };
218
+ * });
219
+ * ```
220
+ */
221
+ registerTool(definition, handler) {
222
+ this.tools.register(definition, handler);
223
+ // If already connected to brokers, register the new tool
224
+ if (this.initialized && this.protocols.size > 0) {
225
+ for (const protocol of this.protocols.values()) {
226
+ protocol.registerCapabilities({
227
+ tools: [definition],
228
+ networks: this.config.networks,
229
+ displayName: this.config.name
230
+ }).catch(error => {
231
+ this.emit('error', new KadiError(`Failed to register tool with broker: ${error instanceof Error ? error.message : String(error)}`, ErrorCode.BROKER_RESPONSE_ERROR, 500, { toolName: definition.name }));
232
+ });
233
+ }
234
+ }
235
+ return this;
236
+ }
237
+ /**
238
+ * Load an ability
239
+ *
240
+ * **Explicit Transport, Excellent Developer Experience:**
241
+ * - Explicit transport selection (no magic)
242
+ * - Transport-specific options (only relevant fields shown)
243
+ * - Smart caching (avoids duplicate loads)
244
+ * - Runtime validation (optional)
245
+ * - Helpful errors with suggestions
246
+ *
247
+ * @param name - Ability name
248
+ * @param transport - Transport type ('native', 'stdio', or 'broker')
249
+ * @param options - Load options (transport-specific, optional)
250
+ * @returns Proxied ability with dynamic method access
251
+ *
252
+ * @throws {KadiError} If loading fails
253
+ *
254
+ * @example
255
+ * ```typescript
256
+ * // Simple broker load
257
+ * const calc = await client.load('calculator', 'broker');
258
+ * await calc.add({ a: 5, b: 3 });
259
+ *
260
+ * // With options
261
+ * const remote = await client.load('gpu-service', 'broker', {
262
+ * networks: ['global', 'gpu-cluster']
263
+ * });
264
+ *
265
+ * // With runtime validation
266
+ * const validated = await client.load('calculator', 'broker', {
267
+ * validate: true // Runtime check for expected methods
268
+ * });
269
+ *
270
+ * // Native transport
271
+ * const local = await client.load('math-lib', 'native', {
272
+ * path: './abilities/math'
273
+ * });
274
+ * ```
275
+ */
276
+ async load(name, transport, options = {}) {
277
+ return await this.abilityLoader.load(name, transport, options, this);
278
+ }
279
+ /**
280
+ * Subscribe to events
281
+ *
282
+ * @template T - Event data type
283
+ * @param pattern - Event pattern (supports wildcards)
284
+ * @param callback - Event callback
285
+ * @returns Unsubscribe function
286
+ *
287
+ * @example
288
+ * ```typescript
289
+ * const unsubscribe = client.subscribeToEvent('user.*', (data) => {
290
+ * console.log('User event:', data);
291
+ * });
292
+ *
293
+ * // Later...
294
+ * unsubscribe();
295
+ * ```
296
+ */
297
+ subscribeToEvent(pattern, callback) {
298
+ // Subscribe locally
299
+ const localUnsub = this.events.subscribe(pattern, callback);
300
+ // Subscribe on broker if connected
301
+ if (this.protocols.size > 0) {
302
+ const protocol = this.getBrokerProtocol();
303
+ protocol.subscribeToEvents({
304
+ channels: [pattern],
305
+ networkId: this.config.networks[0]
306
+ }).catch(error => {
307
+ this.emit('error', new KadiError(`Failed to subscribe to broker events: ${error instanceof Error ? error.message : String(error)}`, ErrorCode.EVENT_SUBSCRIPTION_FAILED, 500, { pattern }));
308
+ });
309
+ }
310
+ return localUnsub;
311
+ }
312
+ /**
313
+ * Publish an event
314
+ *
315
+ * @template T - Event data type
316
+ * @param eventName - Event name
317
+ * @param data - Event data
318
+ * @param options - Publishing options
319
+ *
320
+ * @example
321
+ * ```typescript
322
+ * client.publishEvent('user.login', {
323
+ * userId: '123',
324
+ * timestamp: Date.now()
325
+ * });
326
+ * ```
327
+ */
328
+ publishEvent(eventName, data, options) {
329
+ // Publish locally
330
+ this.events.publish(eventName, data, options);
331
+ // Publish to broker if connected
332
+ if (this.protocols.size > 0) {
333
+ const protocol = this.getBrokerProtocol();
334
+ protocol.publishEvent({
335
+ channel: eventName,
336
+ data,
337
+ networkId: this.config.networks[0],
338
+ hints: options
339
+ }).catch(error => {
340
+ this.emit('error', new KadiError(`Failed to publish event to broker: ${error instanceof Error ? error.message : String(error)}`, ErrorCode.EVENT_PUBLISH_FAILED, 500, { eventName }));
341
+ });
342
+ }
343
+ }
344
+ /**
345
+ * Disconnect from all brokers and cleanup
346
+ *
347
+ * @example
348
+ * ```typescript
349
+ * await client.disconnect();
350
+ * ```
351
+ */
352
+ async disconnect() {
353
+ // Stop all broker heartbeats
354
+ for (const protocol of this.protocols.values()) {
355
+ protocol.cleanup();
356
+ }
357
+ // Disconnect from all brokers
358
+ await this.brokers.disconnectAll();
359
+ // Unload all abilities
360
+ await this.abilityLoader.unloadAll();
361
+ // Clear event subscriptions
362
+ this.events.clear();
363
+ // Clear protocols
364
+ this.protocols.clear();
365
+ this.initialized = false;
366
+ this.emit('disconnected');
367
+ }
368
+ /**
369
+ * Get broker manager (implements IBrokerClient)
370
+ */
371
+ getBrokerManager() {
372
+ return this.brokers;
373
+ }
374
+ /**
375
+ * Get broker protocol instance (implements IBrokerClient)
376
+ *
377
+ * @param brokerName - Optional broker name (uses default if not specified)
378
+ */
379
+ getBrokerProtocol(brokerName) {
380
+ const name = brokerName ?? this.brokers.getDefaultBrokerName();
381
+ if (!name) {
382
+ throw new KadiError('No broker available', ErrorCode.BROKER_NOT_CONNECTED, 503);
383
+ }
384
+ const protocol = this.protocols.get(name);
385
+ if (!protocol) {
386
+ throw new KadiError(`Broker protocol not initialized for '${name}'`, ErrorCode.BROKER_NOT_CONNECTED, 503, { brokerName: name });
387
+ }
388
+ return protocol;
389
+ }
390
+ /**
391
+ * Networks (implements IBrokerClient)
392
+ */
393
+ get networks() {
394
+ return this.config.networks;
395
+ }
396
+ /**
397
+ * Create minimal configuration for constructor
398
+ * Full resolution happens in connect()
399
+ */
400
+ createMinimalConfig(config) {
401
+ const normalized = typeof config === 'string'
402
+ ? { brokers: { default: config } }
403
+ : config;
404
+ return {
405
+ name: normalized.name ?? 'unnamed-client',
406
+ version: normalized.version ?? '1.0.0',
407
+ description: normalized.description ?? '',
408
+ role: normalized.role ?? 'agent',
409
+ transport: normalized.transport ?? 'native',
410
+ brokers: normalized.brokers ?? { default: '' },
411
+ defaultBroker: normalized.defaultBroker ?? 'default',
412
+ networks: normalized.networks ?? ['global'],
413
+ abilityAgentJSON: normalized.abilityAgentJSON ?? '',
414
+ autoConnect: normalized.autoConnect ?? false,
415
+ advanced: {
416
+ heartbeatInterval: 30000,
417
+ requestTimeout: 30000,
418
+ connectionTimeout: 10000,
419
+ autoReconnect: true,
420
+ maxReconnectAttempts: 5,
421
+ verbose: false
422
+ },
423
+ sources: {}
424
+ };
425
+ }
426
+ /**
427
+ * Setup broker event forwarding
428
+ */
429
+ setupBrokerEventForwarding() {
430
+ this.brokers.on('brokerMessage', async (brokerName, message) => {
431
+ if (!message || typeof message !== 'object' || !('method' in message)) {
432
+ return;
433
+ }
434
+ const msg = message;
435
+ // Handle incoming tool invocation requests
436
+ if (msg.method === KadiMessages.ABILITY_REQUEST && msg.params) {
437
+ await this.handleIncomingToolRequest(brokerName, msg);
438
+ return;
439
+ }
440
+ // Handle event deliveries
441
+ if (msg.method === KadiMessages.EVENT_DELIVERY && msg.params) {
442
+ const { channel, data } = msg.params;
443
+ if (channel && data !== undefined) {
444
+ this.events.publish(channel, data);
445
+ }
446
+ }
447
+ });
448
+ }
449
+ /**
450
+ * Handle incoming tool invocation requests from broker
451
+ *
452
+ * Flow:
453
+ * 1. Extract id from top-level message (JSON-RPC request id)
454
+ * 2. Look up tool handler by name
455
+ * 3. Execute handler with toolInput
456
+ * 4. Send JSON-RPC response back to broker with matching id
457
+ *
458
+ * @param brokerName - Name of the broker connection to use for response
459
+ * @param message - Full JSON-RPC request message with id, method, and params
460
+ * @private
461
+ */
462
+ async handleIncomingToolRequest(brokerName, message) {
463
+ const { toolName, toolInput } = message.params || {};
464
+ const requestId = message.id;
465
+ try {
466
+ // Step 1: Look up the tool handler
467
+ const handler = this.tools.getHandler(toolName);
468
+ if (!handler) {
469
+ throw new KadiError(`Tool '${toolName}' not found`, ErrorCode.TOOL_NOT_FOUND, 404, { toolName });
470
+ }
471
+ // Step 2: Execute the handler
472
+ const result = await handler(toolInput);
473
+ // Step 3: Send JSON-RPC response back to broker
474
+ // CRITICAL: id must match the incoming request id for proper routing
475
+ const connection = this.brokers.getConnection(brokerName);
476
+ if (!connection) {
477
+ console.error(`[DEBUG] No connection found for broker: ${brokerName}`);
478
+ return;
479
+ }
480
+ connection.sendResponse(requestId, result);
481
+ }
482
+ catch (error) {
483
+ // Send JSON-RPC error response back to broker with same id for proper routing
484
+ const connection = this.brokers.getConnection(brokerName);
485
+ if (connection) {
486
+ const kadiError = error instanceof KadiError ? error : KadiError.from(error);
487
+ connection.sendError(requestId, kadiError.code, kadiError.message);
488
+ }
489
+ }
490
+ }
491
+ }
492
+ //# sourceMappingURL=KadiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KadiClient.js","sourceRoot":"","sources":["../../src/client/KadiClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWtC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAwC,MAAM,uBAAuB,CAAC;AAG5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,OAAO,UAAW,SAAQ,YAAY;IAC1C;;OAEG;IACa,MAAM,CAAiB;IAEvC;;OAEG;IACc,KAAK,CAAe;IAErC;;OAEG;IACc,MAAM,CAAW;IAElC;;OAEG;IACc,OAAO,CAA0B;IAElD;;OAEG;IACc,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IAE/D;;OAEG;IACc,aAAa,CAAgB;IAE9C;;OAEG;IACK,WAAW,GAAG,KAAK,CAAC;IAE5B;;;;OAIG;IACH,YAAY,MAAkB;QAC5B,KAAK,EAAE,CAAC;QAER,iCAAiC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,0CAA0C;QACjF,IAAI,CAAC,OAAO,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAC7C,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QAEzC,+EAA+E;QAC/E,mCAAmC;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAE/C,+CAA+C;QAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAExC,wBAAwB;QACxB,IAAI,CAAC,0BAA0B,EAAE,CAAC;IACpC,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAoB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAErC,mCAAmC;QACnC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9E,IAAI;YACJ,GAAG;YACH,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB;YACzD,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc;YACnD,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB;SAC1D,CAAC,CAAC,CAAC;QAEJ,yBAAyB;QACzB,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAE7E,8DAA8D;QAC9D,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;YACvD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,2BAA2B;YAC3B,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEzC,oBAAoB;YACpB,MAAM,QAAQ,CAAC,SAAS,CAAC;gBACvB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO;gBACjC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;gBAC5B,eAAe,EAAE,gBAAgB;gBACjC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;aAC/B,CAAC,CAAC;YAEH,wBAAwB;YACxB,MAAM,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;YAEpD,kBAAkB;YAClB,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,IAAI,KAAK,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,8BAA8B,CAAC,QAAwB;QACnE,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAExD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,QAAQ,CAAC,oBAAoB,CAAC;gBAClC,KAAK,EAAE,eAAe;gBACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;aAC9B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,YAAY,CACV,UAAoB,EACpB,OAAqC;QAErC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEzC,yDAAyD;QACzD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC/C,QAAQ,CAAC,oBAAoB,CAAC;oBAC5B,KAAK,EAAE,CAAC,UAAU,CAAC;oBACnB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAC9B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;iBAC9B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACf,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,SAAS,CAC9B,wCAAwC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAChG,SAAS,CAAC,qBAAqB,EAC/B,GAAG,EACH,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,CAC9B,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,KAAK,CAAC,IAAI,CACR,IAAY,EACZ,SAAwC,EACxC,UAAuB,EAAE;QAEzB,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,CACd,OAAe,EACf,QAA0B;QAE1B,oBAAoB;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE5D,mCAAmC;QACnC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1C,QAAQ,CAAC,iBAAiB,CAAC;gBACzB,QAAQ,EAAE,CAAC,OAAO,CAAC;gBACnB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;aACnC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,SAAS,CAC9B,yCAAyC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACjG,SAAS,CAAC,yBAAyB,EACnC,GAAG,EACH,EAAE,OAAO,EAAE,CACZ,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,YAAY,CACV,SAAiB,EACjB,IAAO,EACP,OAAwB;QAExB,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE9C,iCAAiC;QACjC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1C,QAAQ,CAAC,YAAY,CAAC;gBACpB,OAAO,EAAE,SAAS;gBAClB,IAAI;gBACJ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClC,KAAK,EAAE,OAAO;aACf,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,SAAS,CAC9B,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC9F,SAAS,CAAC,oBAAoB,EAC9B,GAAG,EACH,EAAE,SAAS,EAAE,CACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU;QACd,6BAA6B;QAC7B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;QAED,8BAA8B;QAC9B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAEnC,uBAAuB;QACvB,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QAErC,4BAA4B;QAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,kBAAkB;QAClB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAEvB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,UAAmB;QACnC,MAAM,IAAI,GAAG,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAC/D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,SAAS,CACjB,qBAAqB,EACrB,SAAS,CAAC,oBAAoB,EAC9B,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,SAAS,CACjB,wCAAwC,IAAI,GAAG,EAC/C,SAAS,CAAC,oBAAoB,EAC9B,GAAG,EACH,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAC,MAAkB;QAC5C,MAAM,UAAU,GAA8B,OAAO,MAAM,KAAK,QAAQ;YACtE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAClC,CAAC,CAAC,MAAM,CAAC;QAEX,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,gBAAgB;YACzC,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,OAAO;YACtC,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,EAAE;YACzC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,OAAO;YAChC,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,QAAQ;YAC3C,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YAC9C,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,SAAS;YACpD,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC;YAC3C,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,IAAI,EAAE;YACnD,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,KAAK;YAC5C,QAAQ,EAAE;gBACR,iBAAiB,EAAE,KAAK;gBACxB,cAAc,EAAE,KAAK;gBACrB,iBAAiB,EAAE,KAAK;gBACxB,aAAa,EAAE,IAAI;gBACnB,oBAAoB,EAAE,CAAC;gBACvB,OAAO,EAAE,KAAK;aACf;YACD,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,0BAA0B;QAChC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;YAC7D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC;gBACtE,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,OAAiE,CAAC;YAE9E,2CAA2C;YAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,CAAC,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC9D,MAAM,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YAED,0BAA0B;YAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,CAAC,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC7D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;gBACrC,IAAI,OAAO,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBAClC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,KAAK,CAAC,yBAAyB,CACrC,UAAkB,EAClB,OAA+D;QAE/D,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,mCAAmC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,SAAS,CACjB,SAAS,QAAQ,aAAa,EAC9B,SAAS,CAAC,cAAc,EACxB,GAAG,EACH,EAAE,QAAQ,EAAE,CACb,CAAC;YACJ,CAAC;YAED,8BAA8B;YAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;YAExC,gDAAgD;YAChD,qEAAqE;YACrE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,2CAA2C,UAAU,EAAE,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;YAED,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,8EAA8E;YAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,KAAK,YAAY,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7E,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Client Module
3
+ *
4
+ * Exports for KADI client.
5
+ */
6
+ export { KadiClient } from './KadiClient.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Client Module
3
+ *
4
+ * Exports for KADI client.
5
+ */
6
+ export { KadiClient } from './KadiClient.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Configuration Loader
3
+ *
4
+ * Loads configuration from various sources:
5
+ * - Environment variables
6
+ * - Configuration files (agent.json, kadi.config.json)
7
+ * - Package.json
8
+ *
9
+ * @module config/ConfigLoader
10
+ */
11
+ import type { AgentJsonConfig, EnvConfig } from '../types/index.js';
12
+ /**
13
+ * Configuration Loader
14
+ *
15
+ * Handles the actual loading of configuration from files and environment.
16
+ * Separated from ConfigResolver for testability.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const loader = new ConfigLoader();
21
+ *
22
+ * // Load from environment
23
+ * const envConfig = loader.loadFromEnvironment();
24
+ *
25
+ * // Load from file
26
+ * const fileConfig = await loader.loadFromFile();
27
+ * ```
28
+ */
29
+ export declare class ConfigLoader {
30
+ /**
31
+ * Configuration file names to search for (in order of preference)
32
+ */
33
+ private readonly configFiles;
34
+ /**
35
+ * Load configuration from environment variables
36
+ *
37
+ * Reads KADI_* environment variables and returns structured config.
38
+ *
39
+ * @returns Environment configuration
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // With environment variables:
44
+ * // KADI_BROKER_URL=ws://localhost:8080
45
+ * // KADI_NETWORKS=global,team-alpha
46
+ *
47
+ * const config = loader.loadFromEnvironment();
48
+ * // { KADI_BROKER_URL: 'ws://localhost:8080', KADI_NETWORKS: 'global,team-alpha' }
49
+ * ```
50
+ */
51
+ loadFromEnvironment(): EnvConfig;
52
+ /**
53
+ * Load configuration from file
54
+ *
55
+ * Searches for configuration files in order of preference:
56
+ * 1. agent.json
57
+ * 2. kadi.config.json
58
+ * 3. .kadirc.json
59
+ *
60
+ * Searches from current directory up to root.
61
+ *
62
+ * @param startDir - Directory to start searching from (defaults to cwd)
63
+ * @returns Loaded configuration or null if not found
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const config = await loader.loadFromFile();
68
+ * if (config) {
69
+ * console.log('Loaded from:', config.name);
70
+ * }
71
+ * ```
72
+ */
73
+ loadFromFile(startDir?: string): Promise<AgentJsonConfig | null>;
74
+ /**
75
+ * Find a configuration file by searching up the directory tree
76
+ *
77
+ * @param filename - Config filename to search for
78
+ * @param startDir - Directory to start searching from
79
+ * @returns Full path to config file or null if not found
80
+ */
81
+ private findConfigFile;
82
+ /**
83
+ * Load and parse a configuration file
84
+ *
85
+ * @param filePath - Path to configuration file
86
+ * @returns Parsed configuration
87
+ * @throws If file cannot be read or parsed
88
+ */
89
+ private loadConfigFile;
90
+ /**
91
+ * Load KADI configuration from package.json
92
+ *
93
+ * Looks for a "kadi" field in package.json
94
+ *
95
+ * @param startDir - Directory to start searching from
96
+ * @returns Configuration from package.json or null
97
+ *
98
+ * @example
99
+ * ```json
100
+ * // package.json
101
+ * {
102
+ * "name": "my-package",
103
+ * "kadi": {
104
+ * "name": "my-service",
105
+ * "brokers": {
106
+ * "local": "ws://localhost:8080"
107
+ * }
108
+ * }
109
+ * }
110
+ * ```
111
+ */
112
+ private loadFromPackageJson;
113
+ /**
114
+ * Parse transport string to TransportKind
115
+ *
116
+ * @param value - Transport string
117
+ * @returns TransportKind or undefined
118
+ */
119
+ private parseTransport;
120
+ /**
121
+ * Get configuration file path if one exists
122
+ *
123
+ * Useful for debugging and logging which config file is being used.
124
+ *
125
+ * @param startDir - Directory to start searching from
126
+ * @returns Path to config file or null
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * const configPath = loader.getConfigPath();
131
+ * if (configPath) {
132
+ * console.log('Using config from:', configPath);
133
+ * }
134
+ * ```
135
+ */
136
+ getConfigPath(startDir?: string): string | null;
137
+ }
138
+ //# sourceMappingURL=ConfigLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAiB,MAAM,mBAAmB,CAAC;AAEnF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAI1B;IAEF;;;;;;;;;;;;;;;;OAgBG;IACH,mBAAmB,IAAI,SAAS;IAUhC;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAoBtE;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAqBtB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAWtB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAatB;;;;;;;;;;;;;;;OAeG;IACH,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAYhD"}