agentxjs 2.7.0 → 2.8.0
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/dist/{chunk-NPRCFKO5.js → chunk-JUZULVWQ.js} +33 -297
- package/dist/chunk-JUZULVWQ.js.map +1 -0
- package/dist/index.d.ts +36 -266
- package/dist/index.js +42 -224
- package/dist/index.js.map +1 -1
- package/dist/server-MVOHQ5ZM.js +184 -0
- package/dist/server-MVOHQ5ZM.js.map +1 -0
- package/package.json +3 -3
- package/src/AgentHandle.ts +9 -7
- package/src/CommandHandler.ts +48 -163
- package/src/LocalClient.ts +3 -33
- package/src/RemoteClient.ts +2 -27
- package/src/index.ts +7 -21
- package/src/namespaces/agents.ts +4 -4
- package/src/namespaces/images.ts +21 -29
- package/src/namespaces/llm.ts +16 -10
- package/src/types.ts +44 -186
- package/dist/chunk-NPRCFKO5.js.map +0 -1
- package/dist/server-3BCYHXYA.js +0 -7
- package/dist/server-3BCYHXYA.js.map +0 -1
- package/src/namespaces/containers.ts +0 -68
- package/src/namespaces/prototypes.ts +0 -136
|
@@ -1,17 +1,5 @@
|
|
|
1
|
-
// src/server.ts
|
|
2
|
-
import {
|
|
3
|
-
createErrorResponse,
|
|
4
|
-
createStreamEvent,
|
|
5
|
-
createSuccessResponse,
|
|
6
|
-
isNotification,
|
|
7
|
-
isRequest,
|
|
8
|
-
parseMessage,
|
|
9
|
-
RpcErrorCodes
|
|
10
|
-
} from "@agentxjs/core/network";
|
|
11
|
-
import { createAgentXRuntime } from "@agentxjs/core/runtime";
|
|
12
|
-
import { createLogger as createLogger2 } from "@deepracticex/logger";
|
|
13
|
-
|
|
14
1
|
// src/CommandHandler.ts
|
|
2
|
+
import { DEFAULT_CONTAINER_ID } from "@agentxjs/core/container";
|
|
15
3
|
import { createLogger } from "@deepracticex/logger";
|
|
16
4
|
var logger = createLogger("server/CommandHandler");
|
|
17
5
|
function ok(data) {
|
|
@@ -33,13 +21,6 @@ var CommandHandler = class {
|
|
|
33
21
|
logger.debug("Handling RPC request", { method });
|
|
34
22
|
try {
|
|
35
23
|
switch (method) {
|
|
36
|
-
// Container
|
|
37
|
-
case "container.create":
|
|
38
|
-
return await this.handleContainerCreate(params);
|
|
39
|
-
case "container.get":
|
|
40
|
-
return await this.handleContainerGet(params);
|
|
41
|
-
case "container.list":
|
|
42
|
-
return await this.handleContainerList(params);
|
|
43
24
|
// Image
|
|
44
25
|
case "image.create":
|
|
45
26
|
return await this.handleImageCreate(params);
|
|
@@ -71,17 +52,6 @@ var CommandHandler = class {
|
|
|
71
52
|
// Message
|
|
72
53
|
case "message.send":
|
|
73
54
|
return await this.handleMessageSend(params);
|
|
74
|
-
// Prototype
|
|
75
|
-
case "prototype.create":
|
|
76
|
-
return await this.handlePrototypeCreate(params);
|
|
77
|
-
case "prototype.get":
|
|
78
|
-
return await this.handlePrototypeGet(params);
|
|
79
|
-
case "prototype.list":
|
|
80
|
-
return await this.handlePrototypeList(params);
|
|
81
|
-
case "prototype.update":
|
|
82
|
-
return await this.handlePrototypeUpdate(params);
|
|
83
|
-
case "prototype.delete":
|
|
84
|
-
return await this.handlePrototypeDelete(params);
|
|
85
55
|
// LLM Provider
|
|
86
56
|
case "llm.create":
|
|
87
57
|
return await this.handleLLMCreate(params);
|
|
@@ -103,34 +73,23 @@ var CommandHandler = class {
|
|
|
103
73
|
return err(-32e3, error instanceof Error ? error.message : String(error));
|
|
104
74
|
}
|
|
105
75
|
}
|
|
106
|
-
// ==================== Container Commands ====================
|
|
107
|
-
async handleContainerCreate(params) {
|
|
108
|
-
const { containerId } = params;
|
|
109
|
-
const { getOrCreateContainer } = await import("@agentxjs/core/container");
|
|
110
|
-
const { containerRepository, imageRepository, sessionRepository } = this.runtime.platform;
|
|
111
|
-
const container = await getOrCreateContainer(containerId, {
|
|
112
|
-
containerRepository,
|
|
113
|
-
imageRepository,
|
|
114
|
-
sessionRepository
|
|
115
|
-
});
|
|
116
|
-
return ok({ containerId: container.containerId });
|
|
117
|
-
}
|
|
118
|
-
async handleContainerGet(params) {
|
|
119
|
-
const { containerId } = params;
|
|
120
|
-
const exists = await this.runtime.platform.containerRepository.containerExists(containerId);
|
|
121
|
-
return ok({ containerId, exists });
|
|
122
|
-
}
|
|
123
|
-
async handleContainerList(_params) {
|
|
124
|
-
const containers = await this.runtime.platform.containerRepository.findAllContainers();
|
|
125
|
-
return ok({ containerIds: containers.map((c) => c.containerId) });
|
|
126
|
-
}
|
|
127
76
|
// ==================== Image Commands ====================
|
|
128
77
|
async handleImageCreate(params) {
|
|
129
|
-
const {
|
|
78
|
+
const {
|
|
79
|
+
containerId: _cid,
|
|
80
|
+
name,
|
|
81
|
+
description,
|
|
82
|
+
contextId,
|
|
83
|
+
model,
|
|
84
|
+
systemPrompt,
|
|
85
|
+
mcpServers,
|
|
86
|
+
customData
|
|
87
|
+
} = params;
|
|
130
88
|
const { imageRepository, sessionRepository } = this.runtime.platform;
|
|
131
89
|
const { createImage } = await import("@agentxjs/core/image");
|
|
90
|
+
const embody = model || systemPrompt || mcpServers ? { model, systemPrompt, mcpServers } : void 0;
|
|
132
91
|
const image = await createImage(
|
|
133
|
-
{ containerId, name, description, contextId, embody, customData },
|
|
92
|
+
{ containerId: DEFAULT_CONTAINER_ID, name, description, contextId, embody, customData },
|
|
134
93
|
{ imageRepository, sessionRepository }
|
|
135
94
|
);
|
|
136
95
|
return ok({
|
|
@@ -213,11 +172,17 @@ var CommandHandler = class {
|
|
|
213
172
|
if (!imageRecord) {
|
|
214
173
|
return err(404, `Image not found: ${imageId}`);
|
|
215
174
|
}
|
|
216
|
-
const {
|
|
175
|
+
const { model, systemPrompt, mcpServers, ...otherUpdates } = updates;
|
|
176
|
+
const embodyUpdates = model !== void 0 || systemPrompt !== void 0 || mcpServers !== void 0 ? {
|
|
177
|
+
...imageRecord.embody,
|
|
178
|
+
model,
|
|
179
|
+
systemPrompt,
|
|
180
|
+
mcpServers
|
|
181
|
+
} : imageRecord.embody;
|
|
217
182
|
const updatedRecord = {
|
|
218
183
|
...imageRecord,
|
|
219
184
|
...otherUpdates,
|
|
220
|
-
embody: embodyUpdates
|
|
185
|
+
embody: embodyUpdates,
|
|
221
186
|
updatedAt: Date.now()
|
|
222
187
|
};
|
|
223
188
|
await this.runtime.platform.imageRepository.saveImage(updatedRecord);
|
|
@@ -314,79 +279,17 @@ var CommandHandler = class {
|
|
|
314
279
|
await this.runtime.receive(targetInstanceId, content);
|
|
315
280
|
return ok({ instanceId: targetInstanceId, imageId });
|
|
316
281
|
}
|
|
317
|
-
// ==================== Prototype Commands ====================
|
|
318
|
-
async handlePrototypeCreate(params) {
|
|
319
|
-
const { containerId, name, description, contextId, embody, customData } = params;
|
|
320
|
-
const repo = this.runtime.platform.prototypeRepository;
|
|
321
|
-
if (!repo) {
|
|
322
|
-
return err(-32e3, "Prototype repository not available");
|
|
323
|
-
}
|
|
324
|
-
const now = Date.now();
|
|
325
|
-
const random = Math.random().toString(36).slice(2, 8);
|
|
326
|
-
const record = {
|
|
327
|
-
prototypeId: `proto_${now}_${random}`,
|
|
328
|
-
containerId,
|
|
329
|
-
name,
|
|
330
|
-
description,
|
|
331
|
-
contextId,
|
|
332
|
-
embody,
|
|
333
|
-
customData,
|
|
334
|
-
createdAt: now,
|
|
335
|
-
updatedAt: now
|
|
336
|
-
};
|
|
337
|
-
await repo.savePrototype(record);
|
|
338
|
-
return ok({ record });
|
|
339
|
-
}
|
|
340
|
-
async handlePrototypeGet(params) {
|
|
341
|
-
const { prototypeId } = params;
|
|
342
|
-
const repo = this.runtime.platform.prototypeRepository;
|
|
343
|
-
if (!repo) {
|
|
344
|
-
return err(-32e3, "Prototype repository not available");
|
|
345
|
-
}
|
|
346
|
-
const record = await repo.findPrototypeById(prototypeId);
|
|
347
|
-
return ok({ record });
|
|
348
|
-
}
|
|
349
|
-
async handlePrototypeList(params) {
|
|
350
|
-
const { containerId } = params;
|
|
351
|
-
const repo = this.runtime.platform.prototypeRepository;
|
|
352
|
-
if (!repo) {
|
|
353
|
-
return err(-32e3, "Prototype repository not available");
|
|
354
|
-
}
|
|
355
|
-
const records = containerId ? await repo.findPrototypesByContainerId(containerId) : await repo.findAllPrototypes();
|
|
356
|
-
return ok({ records });
|
|
357
|
-
}
|
|
358
|
-
async handlePrototypeUpdate(params) {
|
|
359
|
-
const { prototypeId, updates } = params;
|
|
360
|
-
const repo = this.runtime.platform.prototypeRepository;
|
|
361
|
-
if (!repo) {
|
|
362
|
-
return err(-32e3, "Prototype repository not available");
|
|
363
|
-
}
|
|
364
|
-
const existing = await repo.findPrototypeById(prototypeId);
|
|
365
|
-
if (!existing) {
|
|
366
|
-
return err(404, `Prototype not found: ${prototypeId}`);
|
|
367
|
-
}
|
|
368
|
-
const { embody: embodyUpdates, ...otherUpdates } = updates;
|
|
369
|
-
const updated = {
|
|
370
|
-
...existing,
|
|
371
|
-
...otherUpdates,
|
|
372
|
-
embody: embodyUpdates ? { ...existing.embody, ...embodyUpdates } : existing.embody,
|
|
373
|
-
updatedAt: Date.now()
|
|
374
|
-
};
|
|
375
|
-
await repo.savePrototype(updated);
|
|
376
|
-
return ok({ record: updated });
|
|
377
|
-
}
|
|
378
|
-
async handlePrototypeDelete(params) {
|
|
379
|
-
const { prototypeId } = params;
|
|
380
|
-
const repo = this.runtime.platform.prototypeRepository;
|
|
381
|
-
if (!repo) {
|
|
382
|
-
return err(-32e3, "Prototype repository not available");
|
|
383
|
-
}
|
|
384
|
-
await repo.deletePrototype(prototypeId);
|
|
385
|
-
return ok({ prototypeId });
|
|
386
|
-
}
|
|
387
282
|
// ==================== LLM Provider Commands ====================
|
|
388
283
|
async handleLLMCreate(params) {
|
|
389
|
-
const {
|
|
284
|
+
const {
|
|
285
|
+
containerId: _cid,
|
|
286
|
+
name,
|
|
287
|
+
vendor,
|
|
288
|
+
protocol,
|
|
289
|
+
apiKey,
|
|
290
|
+
baseUrl,
|
|
291
|
+
model
|
|
292
|
+
} = params;
|
|
390
293
|
const repo = this.runtime.platform.llmProviderRepository;
|
|
391
294
|
if (!repo) {
|
|
392
295
|
return err(-32e3, "LLM provider repository not available");
|
|
@@ -395,7 +298,7 @@ var CommandHandler = class {
|
|
|
395
298
|
const now = Date.now();
|
|
396
299
|
const record = {
|
|
397
300
|
id: generateId("llm"),
|
|
398
|
-
containerId,
|
|
301
|
+
containerId: DEFAULT_CONTAINER_ID,
|
|
399
302
|
name,
|
|
400
303
|
vendor,
|
|
401
304
|
protocol,
|
|
@@ -479,174 +382,7 @@ var CommandHandler = class {
|
|
|
479
382
|
}
|
|
480
383
|
};
|
|
481
384
|
|
|
482
|
-
// src/server.ts
|
|
483
|
-
var logger2 = createLogger2("server/Server");
|
|
484
|
-
async function createServer(config) {
|
|
485
|
-
const { wsPath = "/ws" } = config;
|
|
486
|
-
const platform = config.platform;
|
|
487
|
-
const runtime = createAgentXRuntime(platform, config.createDriver);
|
|
488
|
-
const wsServer = platform.channelServer;
|
|
489
|
-
if (!wsServer) {
|
|
490
|
-
throw new Error("Platform must provide channelServer for server mode");
|
|
491
|
-
}
|
|
492
|
-
const commandHandler = new CommandHandler(runtime);
|
|
493
|
-
const connections = /* @__PURE__ */ new Map();
|
|
494
|
-
function subscribeToTopic(connectionId, topic) {
|
|
495
|
-
const state = connections.get(connectionId);
|
|
496
|
-
if (!state || state.subscribedTopics.has(topic)) return;
|
|
497
|
-
state.subscribedTopics.add(topic);
|
|
498
|
-
logger2.debug("Connection subscribed to topic", { connectionId, topic });
|
|
499
|
-
}
|
|
500
|
-
function shouldSendToConnection(state, event) {
|
|
501
|
-
if (event.source === "driver" && event.intent !== "notification") {
|
|
502
|
-
return false;
|
|
503
|
-
}
|
|
504
|
-
if (event.source === "command") {
|
|
505
|
-
return false;
|
|
506
|
-
}
|
|
507
|
-
const eventWithContext = event;
|
|
508
|
-
const sessionId = eventWithContext.context?.sessionId;
|
|
509
|
-
if (sessionId && state.subscribedTopics.has(sessionId)) {
|
|
510
|
-
return true;
|
|
511
|
-
}
|
|
512
|
-
return state.subscribedTopics.has("global");
|
|
513
|
-
}
|
|
514
|
-
function sendResponse(connection, id, result) {
|
|
515
|
-
const response = createSuccessResponse(id, result);
|
|
516
|
-
connection.send(JSON.stringify(response));
|
|
517
|
-
}
|
|
518
|
-
function sendError(connection, id, code, message) {
|
|
519
|
-
const response = createErrorResponse(id, code, message);
|
|
520
|
-
connection.send(JSON.stringify(response));
|
|
521
|
-
}
|
|
522
|
-
wsServer.onConnection((connection) => {
|
|
523
|
-
const state = {
|
|
524
|
-
connection,
|
|
525
|
-
subscribedTopics: /* @__PURE__ */ new Set(["global"])
|
|
526
|
-
};
|
|
527
|
-
connections.set(connection.id, state);
|
|
528
|
-
logger2.info("Client connected", {
|
|
529
|
-
connectionId: connection.id,
|
|
530
|
-
totalConnections: connections.size
|
|
531
|
-
});
|
|
532
|
-
connection.onMessage(async (message) => {
|
|
533
|
-
try {
|
|
534
|
-
const parsed = parseMessage(message);
|
|
535
|
-
if (!Array.isArray(parsed)) {
|
|
536
|
-
await handleParsedMessage(connection, state, parsed);
|
|
537
|
-
} else {
|
|
538
|
-
for (const item of parsed) {
|
|
539
|
-
await handleParsedMessage(connection, state, item);
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
} catch (err2) {
|
|
543
|
-
logger2.error("Failed to parse message", { error: err2.message });
|
|
544
|
-
sendError(connection, null, RpcErrorCodes.PARSE_ERROR, "Parse error");
|
|
545
|
-
}
|
|
546
|
-
});
|
|
547
|
-
connection.onClose(() => {
|
|
548
|
-
connections.delete(connection.id);
|
|
549
|
-
logger2.info("Client disconnected", {
|
|
550
|
-
connectionId: connection.id,
|
|
551
|
-
totalConnections: connections.size
|
|
552
|
-
});
|
|
553
|
-
});
|
|
554
|
-
});
|
|
555
|
-
async function handleParsedMessage(connection, state, parsed) {
|
|
556
|
-
if (isRequest(parsed)) {
|
|
557
|
-
const payload = parsed.payload;
|
|
558
|
-
const { id, method, params } = payload;
|
|
559
|
-
logger2.debug("Received RPC request", { id, method });
|
|
560
|
-
const result = await commandHandler.handle(method, params);
|
|
561
|
-
if (result.success) {
|
|
562
|
-
sendResponse(connection, id, result.data);
|
|
563
|
-
} else {
|
|
564
|
-
sendError(connection, id, result.code, result.message);
|
|
565
|
-
}
|
|
566
|
-
} else if (isNotification(parsed)) {
|
|
567
|
-
const payload = parsed.payload;
|
|
568
|
-
const { method, params } = payload;
|
|
569
|
-
logger2.debug("Received notification", { method });
|
|
570
|
-
if (method === "subscribe") {
|
|
571
|
-
const { topic } = params;
|
|
572
|
-
subscribeToTopic(connection.id, topic);
|
|
573
|
-
} else if (method === "unsubscribe") {
|
|
574
|
-
const { topic } = params;
|
|
575
|
-
state.subscribedTopics.delete(topic);
|
|
576
|
-
logger2.debug("Connection unsubscribed from topic", { connectionId: connection.id, topic });
|
|
577
|
-
} else if (method === "control.ack") {
|
|
578
|
-
logger2.debug("Received ACK notification");
|
|
579
|
-
}
|
|
580
|
-
} else {
|
|
581
|
-
logger2.warn("Received invalid JSON-RPC message");
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
platform.eventBus.onAny((event) => {
|
|
585
|
-
if (!shouldBroadcastEvent(event)) {
|
|
586
|
-
return;
|
|
587
|
-
}
|
|
588
|
-
const eventWithContext = event;
|
|
589
|
-
const topic = eventWithContext.context?.sessionId || "global";
|
|
590
|
-
const notification = createStreamEvent(topic, event);
|
|
591
|
-
const message = JSON.stringify(notification);
|
|
592
|
-
for (const [connectionId, state] of connections) {
|
|
593
|
-
if (shouldSendToConnection(state, event)) {
|
|
594
|
-
state.connection.sendReliable(message, {
|
|
595
|
-
timeout: 1e4,
|
|
596
|
-
onTimeout: () => {
|
|
597
|
-
logger2.warn("Event ACK timeout", {
|
|
598
|
-
connectionId,
|
|
599
|
-
eventType: event.type
|
|
600
|
-
});
|
|
601
|
-
}
|
|
602
|
-
});
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
});
|
|
606
|
-
function shouldBroadcastEvent(event) {
|
|
607
|
-
if (event.source === "driver" && event.intent !== "notification") {
|
|
608
|
-
return false;
|
|
609
|
-
}
|
|
610
|
-
if (event.source === "command") {
|
|
611
|
-
return false;
|
|
612
|
-
}
|
|
613
|
-
const systemEvent = event;
|
|
614
|
-
if (systemEvent.broadcastable === false) {
|
|
615
|
-
return false;
|
|
616
|
-
}
|
|
617
|
-
return true;
|
|
618
|
-
}
|
|
619
|
-
if (config.server) {
|
|
620
|
-
wsServer.attach(config.server, wsPath);
|
|
621
|
-
logger2.info("WebSocket attached to existing server", { path: wsPath });
|
|
622
|
-
}
|
|
623
|
-
return {
|
|
624
|
-
async listen(port, host) {
|
|
625
|
-
if (config.server) {
|
|
626
|
-
throw new Error(
|
|
627
|
-
"Cannot listen when attached to existing server. The server should call listen() instead."
|
|
628
|
-
);
|
|
629
|
-
}
|
|
630
|
-
const listenPort = port ?? config.port ?? 5200;
|
|
631
|
-
const listenHost = host ?? config.host ?? "0.0.0.0";
|
|
632
|
-
await wsServer.listen(listenPort, listenHost);
|
|
633
|
-
logger2.info("Server listening", { port: listenPort, host: listenHost });
|
|
634
|
-
},
|
|
635
|
-
async close() {
|
|
636
|
-
await wsServer.close();
|
|
637
|
-
logger2.info("Server closed");
|
|
638
|
-
},
|
|
639
|
-
async dispose() {
|
|
640
|
-
await wsServer.dispose();
|
|
641
|
-
commandHandler.dispose();
|
|
642
|
-
await runtime.shutdown();
|
|
643
|
-
logger2.info("Server disposed");
|
|
644
|
-
}
|
|
645
|
-
};
|
|
646
|
-
}
|
|
647
|
-
|
|
648
385
|
export {
|
|
649
|
-
CommandHandler
|
|
650
|
-
createServer
|
|
386
|
+
CommandHandler
|
|
651
387
|
};
|
|
652
|
-
//# sourceMappingURL=chunk-
|
|
388
|
+
//# sourceMappingURL=chunk-JUZULVWQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/CommandHandler.ts"],"sourcesContent":["/**\n * CommandHandler - Handles JSON-RPC requests directly\n *\n * No longer uses EventBus for request/response. Instead:\n * - Receives RPC requests directly\n * - Returns RPC responses directly\n * - EventBus is only used for stream events (notifications)\n */\n\nimport type { UserContentPart } from \"@agentxjs/core/agent\";\nimport { DEFAULT_CONTAINER_ID } from \"@agentxjs/core/container\";\nimport type { RpcMethod } from \"@agentxjs/core/network\";\nimport type { AgentXRuntime } from \"@agentxjs/core/runtime\";\nimport { createLogger } from \"@deepracticex/logger\";\n\nconst logger = createLogger(\"server/CommandHandler\");\n\n/**\n * RPC Result type\n */\nexport interface RpcResult<T = unknown> {\n success: true;\n data: T;\n}\n\nexport interface RpcError {\n success: false;\n code: number;\n message: string;\n}\n\nexport type RpcResponse<T = unknown> = RpcResult<T> | RpcError;\n\n/**\n * Helper to create success result\n */\nfunction ok<T>(data: T): RpcResult<T> {\n return { success: true, data };\n}\n\n/**\n * Helper to create error result\n */\nfunction err(code: number, message: string): RpcError {\n return { success: false, code, message };\n}\n\n/**\n * CommandHandler - Processes RPC requests directly\n */\nexport class CommandHandler {\n private readonly runtime: AgentXRuntime;\n\n constructor(runtime: AgentXRuntime) {\n this.runtime = runtime;\n logger.debug(\"CommandHandler created\");\n }\n\n /**\n * Handle an RPC request and return response\n */\n async handle(method: RpcMethod, params: unknown): Promise<RpcResponse> {\n logger.debug(\"Handling RPC request\", { method });\n\n try {\n switch (method) {\n // Image\n case \"image.create\":\n return await this.handleImageCreate(params);\n case \"image.get\":\n return await this.handleImageGet(params);\n case \"image.list\":\n return await this.handleImageList(params);\n case \"image.delete\":\n return await this.handleImageDelete(params);\n case \"image.run\":\n return await this.handleImageRun(params);\n case \"image.stop\":\n return await this.handleImageStop(params);\n case \"image.update\":\n return await this.handleImageUpdate(params);\n case \"image.messages\":\n return await this.handleImageMessages(params);\n\n // Instance\n case \"instance.get\":\n return await this.handleAgentGet(params);\n case \"instance.list\":\n return await this.handleAgentList(params);\n case \"instance.destroy\":\n return await this.handleAgentDestroy(params);\n case \"instance.destroyAll\":\n return await this.handleAgentDestroyAll(params);\n case \"instance.interrupt\":\n return await this.handleAgentInterrupt(params);\n\n // Message\n case \"message.send\":\n return await this.handleMessageSend(params);\n\n // LLM Provider\n case \"llm.create\":\n return await this.handleLLMCreate(params);\n case \"llm.get\":\n return await this.handleLLMGet(params);\n case \"llm.list\":\n return await this.handleLLMList(params);\n case \"llm.update\":\n return await this.handleLLMUpdate(params);\n case \"llm.delete\":\n return await this.handleLLMDelete(params);\n case \"llm.default\":\n return await this.handleLLMDefault(params);\n\n default:\n return err(-32601, `Method not found: ${method}`);\n }\n } catch (error) {\n logger.error(\"RPC handler error\", { method, error });\n return err(-32000, error instanceof Error ? error.message : String(error));\n }\n }\n\n // ==================== Image Commands ====================\n\n private async handleImageCreate(params: unknown): Promise<RpcResponse> {\n const {\n containerId: _cid,\n name,\n description,\n contextId,\n model,\n systemPrompt,\n mcpServers,\n customData,\n } = params as {\n containerId?: string;\n name?: string;\n description?: string;\n contextId?: string;\n model?: string;\n systemPrompt?: string;\n mcpServers?: Record<string, unknown>;\n customData?: Record<string, unknown>;\n };\n\n const { imageRepository, sessionRepository } = this.runtime.platform;\n const { createImage } = await import(\"@agentxjs/core/image\");\n\n const embody =\n model || systemPrompt || mcpServers\n ? ({ model, systemPrompt, mcpServers } as import(\"@agentxjs/core/persistence\").Embodiment)\n : undefined;\n\n const image = await createImage(\n { containerId: DEFAULT_CONTAINER_ID, name, description, contextId, embody, customData },\n { imageRepository, sessionRepository }\n );\n\n return ok({\n record: image.toRecord(),\n __subscriptions: [image.sessionId],\n });\n }\n\n private async handleImageGet(params: unknown): Promise<RpcResponse> {\n const { imageId } = params as { imageId: string };\n const record = await this.runtime.platform.imageRepository.findImageById(imageId);\n return ok({\n record,\n __subscriptions: record?.sessionId ? [record.sessionId] : undefined,\n });\n }\n\n private async handleImageList(params: unknown): Promise<RpcResponse> {\n const { containerId } = params as { containerId?: string };\n const records = containerId\n ? await this.runtime.platform.imageRepository.findImagesByContainerId(containerId)\n : await this.runtime.platform.imageRepository.findAllImages();\n\n return ok({\n records,\n __subscriptions: records.map((r) => r.sessionId),\n });\n }\n\n private async handleImageDelete(params: unknown): Promise<RpcResponse> {\n const { imageId } = params as { imageId: string };\n const { loadImage } = await import(\"@agentxjs/core/image\");\n const { imageRepository, sessionRepository } = this.runtime.platform;\n\n const image = await loadImage(imageId, { imageRepository, sessionRepository });\n if (image) {\n await image.delete();\n }\n\n return ok({ imageId });\n }\n\n private async handleImageRun(params: unknown): Promise<RpcResponse> {\n const { imageId, instanceId: requestedInstanceId } = params as {\n imageId: string;\n instanceId?: string;\n };\n\n // Check if already have a running agent for this image\n const existingAgent = this.runtime\n .getAgents()\n .find((a) => a.imageId === imageId && a.lifecycle === \"running\");\n\n if (existingAgent) {\n logger.debug(\"Reusing existing agent for image\", {\n imageId,\n instanceId: existingAgent.instanceId,\n });\n return ok({\n imageId,\n instanceId: existingAgent.instanceId,\n sessionId: existingAgent.sessionId,\n containerId: existingAgent.containerId,\n reused: true,\n });\n }\n\n // Create new agent (with optional custom instanceId)\n const agent = await this.runtime.createAgent({\n imageId,\n instanceId: requestedInstanceId,\n });\n logger.info(\"Created new agent for image\", {\n imageId,\n instanceId: agent.instanceId,\n });\n\n return ok({\n imageId,\n instanceId: agent.instanceId,\n sessionId: agent.sessionId,\n containerId: agent.containerId,\n reused: false,\n });\n }\n\n private async handleImageStop(params: unknown): Promise<RpcResponse> {\n const { imageId } = params as { imageId: string };\n\n // Find running agent for this image\n const agent = this.runtime\n .getAgents()\n .find((a) => a.imageId === imageId && a.lifecycle === \"running\");\n\n if (agent) {\n await this.runtime.stopAgent(agent.instanceId);\n logger.info(\"Stopped agent for image\", { imageId, instanceId: agent.instanceId });\n } else {\n logger.debug(\"No running agent found for image\", { imageId });\n }\n\n return ok({ imageId });\n }\n\n private async handleImageUpdate(params: unknown): Promise<RpcResponse> {\n const { imageId, updates } = params as {\n imageId: string;\n updates: {\n name?: string;\n description?: string;\n model?: string;\n systemPrompt?: string;\n mcpServers?: Record<string, unknown>;\n customData?: Record<string, unknown>;\n };\n };\n\n // Get existing image\n const imageRecord = await this.runtime.platform.imageRepository.findImageById(imageId);\n if (!imageRecord) {\n return err(404, `Image not found: ${imageId}`);\n }\n\n // Extract embody fields from flat updates\n const { model, systemPrompt, mcpServers, ...otherUpdates } = updates;\n const embodyUpdates =\n model !== undefined || systemPrompt !== undefined || mcpServers !== undefined\n ? ({\n ...imageRecord.embody,\n model,\n systemPrompt,\n mcpServers,\n } as import(\"@agentxjs/core/persistence\").Embodiment)\n : imageRecord.embody;\n\n const updatedRecord = {\n ...imageRecord,\n ...otherUpdates,\n embody: embodyUpdates,\n updatedAt: Date.now(),\n };\n\n await this.runtime.platform.imageRepository.saveImage(updatedRecord);\n\n logger.info(\"Updated image\", { imageId, updates });\n\n return ok({ record: updatedRecord });\n }\n\n private async handleImageMessages(params: unknown): Promise<RpcResponse> {\n const { imageId } = params as { imageId: string };\n\n // Get image record to find sessionId\n const imageRecord = await this.runtime.platform.imageRepository.findImageById(imageId);\n if (!imageRecord) {\n return err(404, `Image not found: ${imageId}`);\n }\n\n // Get messages from session\n const messages = await this.runtime.platform.sessionRepository.getMessages(\n imageRecord.sessionId\n );\n\n logger.debug(\"Got messages for image\", { imageId, count: messages.length });\n\n return ok({ imageId, messages });\n }\n\n // ==================== Agent Commands ====================\n\n private async handleAgentGet(params: unknown): Promise<RpcResponse> {\n const { instanceId } = params as { instanceId: string };\n const agent = this.runtime.getAgent(instanceId);\n\n return ok({\n agent: agent\n ? {\n instanceId: agent.instanceId,\n imageId: agent.imageId,\n containerId: agent.containerId,\n sessionId: agent.sessionId,\n lifecycle: agent.lifecycle,\n }\n : null,\n exists: !!agent,\n });\n }\n\n private async handleAgentList(params: unknown): Promise<RpcResponse> {\n const { containerId } = params as { containerId?: string };\n const agents = containerId\n ? this.runtime.getAgentsByContainer(containerId)\n : this.runtime.getAgents();\n\n return ok({\n agents: agents.map((a) => ({\n instanceId: a.instanceId,\n imageId: a.imageId,\n containerId: a.containerId,\n sessionId: a.sessionId,\n lifecycle: a.lifecycle,\n })),\n });\n }\n\n private async handleAgentDestroy(params: unknown): Promise<RpcResponse> {\n const { instanceId } = params as { instanceId: string };\n\n // Check if agent exists first\n const agent = this.runtime.getAgent(instanceId);\n if (!agent) {\n return ok({ instanceId, success: false });\n }\n\n await this.runtime.destroyAgent(instanceId);\n return ok({ instanceId, success: true });\n }\n\n private async handleAgentDestroyAll(params: unknown): Promise<RpcResponse> {\n const { containerId } = params as { containerId: string };\n const agents = this.runtime.getAgentsByContainer(containerId);\n for (const agent of agents) {\n await this.runtime.destroyAgent(agent.instanceId);\n }\n return ok({ containerId });\n }\n\n private async handleAgentInterrupt(params: unknown): Promise<RpcResponse> {\n const { instanceId } = params as { instanceId: string };\n this.runtime.interrupt(instanceId);\n return ok({ instanceId });\n }\n\n // ==================== Message Commands ====================\n\n private async handleMessageSend(params: unknown): Promise<RpcResponse> {\n const { instanceId, imageId, content } = params as {\n instanceId?: string;\n imageId?: string;\n content: string | UserContentPart[];\n };\n\n let targetInstanceId: string;\n\n if (instanceId) {\n // Direct agent reference\n targetInstanceId = instanceId;\n } else if (imageId) {\n // Auto-activate image: find or create agent\n const existingAgent = this.runtime\n .getAgents()\n .find((a) => a.imageId === imageId && a.lifecycle === \"running\");\n\n if (existingAgent) {\n targetInstanceId = existingAgent.instanceId;\n logger.debug(\"Using existing agent for message\", {\n imageId,\n instanceId: targetInstanceId,\n });\n } else {\n // Create new agent for this image\n const agent = await this.runtime.createAgent({ imageId });\n targetInstanceId = agent.instanceId;\n logger.info(\"Auto-created agent for message\", {\n imageId,\n instanceId: targetInstanceId,\n });\n }\n } else {\n return err(-32602, \"Either instanceId or imageId is required\");\n }\n\n await this.runtime.receive(targetInstanceId, content);\n return ok({ instanceId: targetInstanceId, imageId });\n }\n\n // ==================== LLM Provider Commands ====================\n\n private async handleLLMCreate(params: unknown): Promise<RpcResponse> {\n const {\n containerId: _cid,\n name,\n vendor,\n protocol,\n apiKey,\n baseUrl,\n model,\n } = params as {\n containerId?: string;\n name: string;\n vendor: string;\n protocol: string;\n apiKey: string;\n baseUrl?: string;\n model?: string;\n };\n\n const repo = this.runtime.platform.llmProviderRepository;\n if (!repo) {\n return err(-32000, \"LLM provider repository not available\");\n }\n\n const { generateId } = await import(\"@deepracticex/id\");\n const now = Date.now();\n const record = {\n id: generateId(\"llm\"),\n containerId: DEFAULT_CONTAINER_ID,\n name,\n vendor,\n protocol: protocol as \"anthropic\" | \"openai\",\n apiKey,\n baseUrl,\n model,\n isDefault: false,\n createdAt: now,\n updatedAt: now,\n };\n\n await repo.saveLLMProvider(record);\n return ok({ record });\n }\n\n private async handleLLMGet(params: unknown): Promise<RpcResponse> {\n const { id } = params as { id: string };\n const repo = this.runtime.platform.llmProviderRepository;\n if (!repo) {\n return err(-32000, \"LLM provider repository not available\");\n }\n\n const record = await repo.findLLMProviderById(id);\n return ok({ record });\n }\n\n private async handleLLMList(params: unknown): Promise<RpcResponse> {\n const { containerId } = params as { containerId: string };\n const repo = this.runtime.platform.llmProviderRepository;\n if (!repo) {\n return err(-32000, \"LLM provider repository not available\");\n }\n\n const records = await repo.findLLMProvidersByContainerId(containerId);\n return ok({ records });\n }\n\n private async handleLLMUpdate(params: unknown): Promise<RpcResponse> {\n const { id, updates } = params as {\n id: string;\n updates: Record<string, unknown>;\n };\n const repo = this.runtime.platform.llmProviderRepository;\n if (!repo) {\n return err(-32000, \"LLM provider repository not available\");\n }\n\n const existing = await repo.findLLMProviderById(id);\n if (!existing) {\n return err(404, `LLM provider not found: ${id}`);\n }\n\n const updated = {\n ...existing,\n ...updates,\n id: existing.id,\n containerId: existing.containerId,\n createdAt: existing.createdAt,\n updatedAt: Date.now(),\n };\n\n await repo.saveLLMProvider(updated);\n return ok({ record: updated });\n }\n\n private async handleLLMDelete(params: unknown): Promise<RpcResponse> {\n const { id } = params as { id: string };\n const repo = this.runtime.platform.llmProviderRepository;\n if (!repo) {\n return err(-32000, \"LLM provider repository not available\");\n }\n\n await repo.deleteLLMProvider(id);\n return ok({ id });\n }\n\n private async handleLLMDefault(params: unknown): Promise<RpcResponse> {\n const { id, containerId } = params as { id?: string; containerId?: string };\n const repo = this.runtime.platform.llmProviderRepository;\n if (!repo) {\n return err(-32000, \"LLM provider repository not available\");\n }\n\n if (id) {\n // Set default\n await repo.setDefaultLLMProvider(id);\n return ok({ id });\n }\n if (containerId) {\n // Get default\n const record = await repo.findDefaultLLMProvider(containerId);\n return ok({ record });\n }\n return err(-32602, \"Either id or containerId is required\");\n }\n\n // ==================== Lifecycle ====================\n\n dispose(): void {\n logger.debug(\"CommandHandler disposed\");\n }\n}\n"],"mappings":"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","names":[]}
|