agentxjs 2.9.0-dev-20260317060607 → 2.9.0-dev-20260317112104

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.
@@ -320,35 +320,35 @@ function registerMessageHandlers(registry) {
320
320
  }
321
321
 
322
322
  // src/handlers/workspace.ts
323
- function registerWorkspaceHandlers(registry) {
324
- registry.register("workspace.read", async (runtime, params) => {
323
+ function registerOSHandlers(registry) {
324
+ registry.register("os.read", async (runtime, params) => {
325
325
  const { imageId, path } = params;
326
- const wp = runtime.platform.workspaceProvider;
327
- if (!wp) return err(-32e3, "Workspace not available");
326
+ const op = runtime.platform.osProvider;
327
+ if (!op) return err(-32e3, "OS not available");
328
328
  const img = await runtime.platform.imageRepository.findImageById(imageId);
329
- if (!img?.workspaceId) return err(404, "Image has no workspace");
330
- const ws = await wp.create(img.workspaceId);
331
- const content = await ws.read(path);
329
+ if (!img?.osId) return err(404, "Image has no OS");
330
+ const os = await op.create(img.osId);
331
+ const content = await os.fs.read(path);
332
332
  return ok({ content });
333
333
  });
334
- registry.register("workspace.list", async (runtime, params) => {
334
+ registry.register("os.list", async (runtime, params) => {
335
335
  const { imageId, path } = params;
336
- const wp = runtime.platform.workspaceProvider;
337
- if (!wp) return err(-32e3, "Workspace not available");
336
+ const op = runtime.platform.osProvider;
337
+ if (!op) return err(-32e3, "OS not available");
338
338
  const img = await runtime.platform.imageRepository.findImageById(imageId);
339
- if (!img?.workspaceId) return err(404, "Image has no workspace");
340
- const ws = await wp.create(img.workspaceId);
341
- const files = await ws.list(path ?? ".");
339
+ if (!img?.osId) return err(404, "Image has no OS");
340
+ const os = await op.create(img.osId);
341
+ const files = await os.fs.list(path ?? ".");
342
342
  return ok({ files });
343
343
  });
344
- registry.register("workspace.write", async (runtime, params) => {
344
+ registry.register("os.write", async (runtime, params) => {
345
345
  const { imageId, path, content } = params;
346
- const wp = runtime.platform.workspaceProvider;
347
- if (!wp) return err(-32e3, "Workspace not available");
346
+ const op = runtime.platform.osProvider;
347
+ if (!op) return err(-32e3, "OS not available");
348
348
  const img = await runtime.platform.imageRepository.findImageById(imageId);
349
- if (!img?.workspaceId) return err(404, "Image has no workspace");
350
- const ws = await wp.create(img.workspaceId);
351
- await ws.write(path, content);
349
+ if (!img?.osId) return err(404, "Image has no OS");
350
+ const os = await op.create(img.osId);
351
+ await os.fs.write(path, content);
352
352
  return ok({ success: true });
353
353
  });
354
354
  }
@@ -359,11 +359,11 @@ function registerAll(registry) {
359
359
  registerInstanceHandlers(registry);
360
360
  registerMessageHandlers(registry);
361
361
  registerLLMHandlers(registry);
362
- registerWorkspaceHandlers(registry);
362
+ registerOSHandlers(registry);
363
363
  }
364
364
 
365
365
  export {
366
366
  RpcHandlerRegistry,
367
367
  registerAll
368
368
  };
369
- //# sourceMappingURL=chunk-SFWLYRLB.js.map
369
+ //# sourceMappingURL=chunk-TKYJYJS5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/RpcHandlerRegistry.ts","../src/handlers/image.ts","../src/handlers/instance.ts","../src/handlers/llm.ts","../src/handlers/message.ts","../src/handlers/workspace.ts","../src/handlers/index.ts"],"sourcesContent":["/**\n * RpcHandlerRegistry — single source of truth for RPC method → handler mapping.\n *\n * Register once, use everywhere. No more switch statements or mapping tables.\n *\n * @example\n * ```typescript\n * const registry = new RpcHandlerRegistry();\n * registry.register(\"workspace.read\", async (runtime, params) => {\n * const content = await workspace.read(params.path);\n * return ok(content);\n * });\n *\n * const response = await registry.handle(runtime, method, params);\n * ```\n */\n\nimport type { AgentXRuntime } from \"@agentxjs/core/runtime\";\nimport { createLogger } from \"@deepracticex/logger\";\n\nconst logger = createLogger(\"agentx/RpcHandlerRegistry\");\n\n// ============================================================================\n// Types\n// ============================================================================\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/** Handler function: receives runtime + params, returns response */\nexport type RpcHandler = (runtime: AgentXRuntime, params: unknown) => Promise<RpcResponse>;\n\n/** Helper to create success result */\nexport function ok<T>(data: T): RpcResult<T> {\n return { success: true, data };\n}\n\n/** Helper to create error result */\nexport function err(code: number, message: string): RpcError {\n return { success: false, code, message };\n}\n\n// ============================================================================\n// Registry\n// ============================================================================\n\nexport class RpcHandlerRegistry {\n private readonly handlers = new Map<string, RpcHandler>();\n\n /**\n * Register an RPC method handler\n */\n register(method: string, handler: RpcHandler): this {\n if (this.handlers.has(method)) {\n logger.warn(\"Overwriting existing handler\", { method });\n }\n this.handlers.set(method, handler);\n return this;\n }\n\n /**\n * Check if a method is registered\n */\n has(method: string): boolean {\n return this.handlers.has(method);\n }\n\n /**\n * Get all registered method names\n */\n methods(): string[] {\n return [...this.handlers.keys()];\n }\n\n /**\n * Handle an RPC request — dispatch to registered handler\n */\n async handle(runtime: AgentXRuntime, method: string, params: unknown): Promise<RpcResponse> {\n const handler = this.handlers.get(method);\n if (!handler) {\n return err(-32601, `Method not found: ${method}`);\n }\n\n try {\n return await handler(runtime, params);\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","/**\n * Image RPC Handlers\n */\n\nimport { DEFAULT_CONTAINER_ID } from \"@agentxjs/core/container\";\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { err, ok } from \"../RpcHandlerRegistry\";\n\nexport function registerImageHandlers(registry: RpcHandlerRegistry): void {\n registry.register(\"image.create\", async (runtime, params) => {\n const {\n name,\n description,\n contextId,\n model,\n systemPrompt,\n mcpServers,\n thinking,\n providerOptions,\n customData,\n } = params as {\n name?: string;\n description?: string;\n contextId?: string;\n model?: string;\n systemPrompt?: string;\n mcpServers?: Record<string, unknown>;\n thinking?: string;\n providerOptions?: Record<string, unknown>;\n customData?: Record<string, unknown>;\n };\n\n const { imageRepository, sessionRepository } = runtime.platform;\n const { createImage } = await import(\"@agentxjs/core/image\");\n\n const image = await createImage(\n {\n containerId: DEFAULT_CONTAINER_ID,\n name,\n description,\n contextId,\n model,\n systemPrompt,\n mcpServers: mcpServers as any,\n thinking: thinking as any,\n providerOptions,\n customData,\n },\n { imageRepository, sessionRepository }\n );\n\n return ok({ record: image.toRecord() });\n });\n\n registry.register(\"image.get\", async (runtime, params) => {\n const { imageId } = params as { imageId: string };\n const record = await runtime.platform.imageRepository.findImageById(imageId);\n return ok({ record });\n });\n\n registry.register(\"image.list\", async (runtime, params) => {\n const { containerId } = params as { containerId?: string };\n const records = containerId\n ? await runtime.platform.imageRepository.findImagesByContainerId(containerId)\n : await runtime.platform.imageRepository.findAllImages();\n return ok({ records });\n });\n\n registry.register(\"image.delete\", async (runtime, params) => {\n const { imageId } = params as { imageId: string };\n const { loadImage } = await import(\"@agentxjs/core/image\");\n const { imageRepository, sessionRepository } = runtime.platform;\n const image = await loadImage(imageId, { imageRepository, sessionRepository });\n if (image) await image.delete();\n return ok({ imageId });\n });\n\n registry.register(\"image.run\", async (runtime, params) => {\n const { imageId, instanceId: requestedInstanceId } = params as {\n imageId: string;\n instanceId?: string;\n };\n\n const existingAgent = runtime\n .getAgents()\n .find((a) => a.imageId === imageId && a.lifecycle === \"running\");\n\n if (existingAgent) {\n return ok({\n imageId,\n instanceId: existingAgent.instanceId,\n sessionId: existingAgent.sessionId,\n containerId: existingAgent.containerId,\n reused: true,\n });\n }\n\n const agent = await runtime.createAgent({ imageId, instanceId: requestedInstanceId });\n return ok({\n imageId,\n instanceId: agent.instanceId,\n sessionId: agent.sessionId,\n containerId: agent.containerId,\n reused: false,\n });\n });\n\n registry.register(\"image.stop\", async (runtime, params) => {\n const { imageId } = params as { imageId: string };\n const agent = runtime\n .getAgents()\n .find((a) => a.imageId === imageId && a.lifecycle === \"running\");\n if (agent) await runtime.stopAgent(agent.instanceId);\n return ok({ imageId });\n });\n\n registry.register(\"image.update\", async (runtime, params) => {\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 thinking?: string;\n providerOptions?: Record<string, unknown>;\n customData?: Record<string, unknown>;\n };\n };\n\n const imageRecord = await runtime.platform.imageRepository.findImageById(imageId);\n if (!imageRecord) return err(404, `Image not found: ${imageId}`);\n\n const updatedRecord = {\n ...imageRecord,\n ...updates,\n updatedAt: Date.now(),\n };\n\n await runtime.platform.imageRepository.saveImage(updatedRecord);\n\n // If runtime config changed, restart the running agent\n const { model, systemPrompt, mcpServers, thinking, providerOptions } = updates;\n const hasRuntimeChanges =\n model !== undefined ||\n systemPrompt !== undefined ||\n mcpServers !== undefined ||\n thinking !== undefined ||\n providerOptions !== undefined;\n\n if (hasRuntimeChanges) {\n const runningAgent = runtime\n .getAgents()\n .find((a) => a.imageId === imageId && a.lifecycle === \"running\");\n if (runningAgent) {\n await runtime.destroyAgent(runningAgent.instanceId);\n await runtime.createAgent({ imageId });\n }\n }\n return ok({ record: updatedRecord });\n });\n\n registry.register(\"image.messages\", async (runtime, params) => {\n const { imageId } = params as { imageId: string };\n const imageRecord = await runtime.platform.imageRepository.findImageById(imageId);\n if (!imageRecord) return err(404, `Image not found: ${imageId}`);\n const messages = await runtime.platform.sessionRepository.getMessages(imageRecord.sessionId);\n return ok({ imageId, messages });\n });\n}\n","/**\n * Instance RPC Handlers\n */\n\nimport type { AgentXRuntime } from \"@agentxjs/core/runtime\";\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { ok } from \"../RpcHandlerRegistry\";\n\nasync function resolveInstanceId(\n runtime: AgentXRuntime,\n params: { instanceId?: string; imageId?: string }\n): Promise<string> {\n const { instanceId, imageId } = params;\n\n if (instanceId) {\n const agent = runtime.getAgent(instanceId);\n if (agent) return instanceId;\n }\n\n if (imageId) {\n const existing = runtime\n .getAgents()\n .find((a) => a.imageId === imageId && a.lifecycle === \"running\");\n if (existing) return existing.instanceId;\n const agent = await runtime.createAgent({ imageId });\n return agent.instanceId;\n }\n\n throw new Error(\"Either instanceId or imageId is required\");\n}\n\nexport function registerInstanceHandlers(registry: RpcHandlerRegistry): void {\n registry.register(\"instance.get\", async (runtime, params) => {\n const { instanceId } = params as { instanceId: string };\n const agent = runtime.getAgent(instanceId);\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 registry.register(\"instance.list\", async (runtime, params) => {\n const { containerId } = params as { containerId?: string };\n const agents = containerId ? runtime.getAgentsByContainer(containerId) : runtime.getAgents();\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 registry.register(\"instance.destroy\", async (runtime, params) => {\n const { instanceId } = params as { instanceId: string };\n const agent = runtime.getAgent(instanceId);\n if (!agent) return ok({ instanceId, success: false });\n await runtime.destroyAgent(instanceId);\n return ok({ instanceId, success: true });\n });\n\n registry.register(\"instance.destroyAll\", async (runtime, params) => {\n const { containerId } = params as { containerId: string };\n const agents = runtime.getAgentsByContainer(containerId);\n for (const agent of agents) {\n await runtime.destroyAgent(agent.instanceId);\n }\n return ok({ containerId });\n });\n\n registry.register(\"instance.interrupt\", async (runtime, params) => {\n const { instanceId, imageId } = params as { instanceId?: string; imageId?: string };\n const resolved = await resolveInstanceId(runtime, { instanceId, imageId });\n runtime.interrupt(resolved);\n return ok({ instanceId: resolved });\n });\n}\n\nexport { resolveInstanceId };\n","/**\n * LLM Provider RPC Handlers\n */\n\nimport { DEFAULT_CONTAINER_ID } from \"@agentxjs/core/container\";\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { err, ok } from \"../RpcHandlerRegistry\";\n\nexport function registerLLMHandlers(registry: RpcHandlerRegistry): void {\n registry.register(\"llm.create\", async (runtime, params) => {\n const { name, vendor, protocol, apiKey, baseUrl, model } = params as {\n name: string;\n vendor: string;\n protocol: string;\n apiKey: string;\n baseUrl?: string;\n model?: string;\n };\n\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\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 registry.register(\"llm.get\", async (runtime, params) => {\n const { id } = params as { id: string };\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\n const record = await repo.findLLMProviderById(id);\n return ok({ record });\n });\n\n registry.register(\"llm.list\", async (runtime, params) => {\n const { containerId } = params as { containerId: string };\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\n const records = await repo.findLLMProvidersByContainerId(containerId);\n return ok({ records });\n });\n\n registry.register(\"llm.update\", async (runtime, params) => {\n const { id, updates } = params as { id: string; updates: Record<string, unknown> };\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\n\n const existing = await repo.findLLMProviderById(id);\n if (!existing) return err(404, `LLM provider not found: ${id}`);\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 registry.register(\"llm.delete\", async (runtime, params) => {\n const { id } = params as { id: string };\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\n await repo.deleteLLMProvider(id);\n return ok({ id });\n });\n\n registry.register(\"llm.default\", async (runtime, params) => {\n const { id, containerId } = params as { id?: string; containerId?: string };\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\n\n if (id) {\n await repo.setDefaultLLMProvider(id);\n return ok({ id });\n }\n if (containerId) {\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","/**\n * Message RPC Handlers\n */\n\nimport type { UserContentPart } from \"@agentxjs/core/agent\";\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { err, ok } from \"../RpcHandlerRegistry\";\nimport { resolveInstanceId } from \"./instance\";\n\nexport function registerMessageHandlers(registry: RpcHandlerRegistry): void {\n registry.register(\"message.send\", async (runtime, params) => {\n const { instanceId, imageId, content, options } = params as {\n instanceId?: string;\n imageId?: string;\n content: string | UserContentPart[];\n options?: import(\"@agentxjs/core/driver\").SendOptions;\n };\n const resolved = await resolveInstanceId(runtime, { instanceId, imageId });\n await runtime.receive(resolved, content, undefined, options);\n return ok({ instanceId: resolved, imageId });\n });\n\n registry.register(\"runtime.rewind\", async (runtime, params) => {\n const { instanceId, imageId, messageId } = params as {\n instanceId?: string;\n imageId?: string;\n messageId: string;\n };\n\n if (!messageId) return err(-32602, \"messageId is required\");\n\n const resolved = await resolveInstanceId(runtime, { instanceId, imageId });\n await runtime.rewind(resolved, messageId);\n return ok({ instanceId: resolved });\n });\n}\n","/**\n * Workspace RPC Handlers\n */\n\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { err, ok } from \"../RpcHandlerRegistry\";\n\nexport function registerWorkspaceHandlers(registry: RpcHandlerRegistry): void {\n registry.register(\"workspace.read\", async (runtime, params) => {\n const { imageId, path } = params as { imageId: string; path: string };\n const wp = runtime.platform.workspaceProvider;\n if (!wp) return err(-32000, \"Workspace not available\");\n\n const img = await runtime.platform.imageRepository.findImageById(imageId);\n if (!img?.workspaceId) return err(404, \"Image has no workspace\");\n\n const ws = await wp.create(img.workspaceId);\n const content = await ws.read(path);\n return ok({ content });\n });\n\n registry.register(\"workspace.list\", async (runtime, params) => {\n const { imageId, path } = params as { imageId: string; path?: string };\n const wp = runtime.platform.workspaceProvider;\n if (!wp) return err(-32000, \"Workspace not available\");\n\n const img = await runtime.platform.imageRepository.findImageById(imageId);\n if (!img?.workspaceId) return err(404, \"Image has no workspace\");\n\n const ws = await wp.create(img.workspaceId);\n const files = await ws.list(path ?? \".\");\n return ok({ files });\n });\n\n registry.register(\"workspace.write\", async (runtime, params) => {\n const { imageId, path, content } = params as { imageId: string; path: string; content: string };\n const wp = runtime.platform.workspaceProvider;\n if (!wp) return err(-32000, \"Workspace not available\");\n\n const img = await runtime.platform.imageRepository.findImageById(imageId);\n if (!img?.workspaceId) return err(404, \"Image has no workspace\");\n\n const ws = await wp.create(img.workspaceId);\n await ws.write(path, content);\n return ok({ success: true });\n });\n}\n","/**\n * RPC Handlers — all method handlers registered in one place.\n *\n * To add a new RPC method:\n * 1. Write a handler function in the appropriate file\n * 2. Register it here with registerAll()\n * That's it. No types, mappings, or switch cases to update.\n */\n\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { registerImageHandlers } from \"./image\";\nimport { registerInstanceHandlers } from \"./instance\";\nimport { registerLLMHandlers } from \"./llm\";\nimport { registerMessageHandlers } from \"./message\";\nimport { registerWorkspaceHandlers } from \"./workspace\";\n\n/**\n * Register all RPC handlers on the registry\n */\nexport function registerAll(registry: RpcHandlerRegistry): void {\n registerImageHandlers(registry);\n registerInstanceHandlers(registry);\n registerMessageHandlers(registry);\n registerLLMHandlers(registry);\n registerWorkspaceHandlers(registry);\n}\n"],"mappings":";AAkBA,SAAS,oBAAoB;AAE7B,IAAM,SAAS,aAAa,2BAA2B;AAuBhD,SAAS,GAAM,MAAuB;AAC3C,SAAO,EAAE,SAAS,MAAM,KAAK;AAC/B;AAGO,SAAS,IAAI,MAAc,SAA2B;AAC3D,SAAO,EAAE,SAAS,OAAO,MAAM,QAAQ;AACzC;AAMO,IAAM,qBAAN,MAAyB;AAAA,EACb,WAAW,oBAAI,IAAwB;AAAA;AAAA;AAAA;AAAA,EAKxD,SAAS,QAAgB,SAA2B;AAClD,QAAI,KAAK,SAAS,IAAI,MAAM,GAAG;AAC7B,aAAO,KAAK,gCAAgC,EAAE,OAAO,CAAC;AAAA,IACxD;AACA,SAAK,SAAS,IAAI,QAAQ,OAAO;AACjC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAyB;AAC3B,WAAO,KAAK,SAAS,IAAI,MAAM;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAoB;AAClB,WAAO,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,SAAwB,QAAgB,QAAuC;AAC1F,UAAM,UAAU,KAAK,SAAS,IAAI,MAAM;AACxC,QAAI,CAAC,SAAS;AACZ,aAAO,IAAI,QAAQ,qBAAqB,MAAM,EAAE;AAAA,IAClD;AAEA,QAAI;AACF,aAAO,MAAM,QAAQ,SAAS,MAAM;AAAA,IACtC,SAAS,OAAO;AACd,aAAO,MAAM,qBAAqB,EAAE,QAAQ,MAAM,CAAC;AACnD,aAAO,IAAI,OAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,IAC3E;AAAA,EACF;AACF;;;AChGA,SAAS,4BAA4B;AAI9B,SAAS,sBAAsB,UAAoC;AACxE,WAAS,SAAS,gBAAgB,OAAO,SAAS,WAAW;AAC3D,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAYJ,UAAM,EAAE,iBAAiB,kBAAkB,IAAI,QAAQ;AACvD,UAAM,EAAE,YAAY,IAAI,MAAM,OAAO,sBAAsB;AAE3D,UAAM,QAAQ,MAAM;AAAA,MAClB;AAAA,QACE,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,EAAE,iBAAiB,kBAAkB;AAAA,IACvC;AAEA,WAAO,GAAG,EAAE,QAAQ,MAAM,SAAS,EAAE,CAAC;AAAA,EACxC,CAAC;AAED,WAAS,SAAS,aAAa,OAAO,SAAS,WAAW;AACxD,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,SAAS,MAAM,QAAQ,SAAS,gBAAgB,cAAc,OAAO;AAC3E,WAAO,GAAG,EAAE,OAAO,CAAC;AAAA,EACtB,CAAC;AAED,WAAS,SAAS,cAAc,OAAO,SAAS,WAAW;AACzD,UAAM,EAAE,YAAY,IAAI;AACxB,UAAM,UAAU,cACZ,MAAM,QAAQ,SAAS,gBAAgB,wBAAwB,WAAW,IAC1E,MAAM,QAAQ,SAAS,gBAAgB,cAAc;AACzD,WAAO,GAAG,EAAE,QAAQ,CAAC;AAAA,EACvB,CAAC;AAED,WAAS,SAAS,gBAAgB,OAAO,SAAS,WAAW;AAC3D,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,EAAE,UAAU,IAAI,MAAM,OAAO,sBAAsB;AACzD,UAAM,EAAE,iBAAiB,kBAAkB,IAAI,QAAQ;AACvD,UAAM,QAAQ,MAAM,UAAU,SAAS,EAAE,iBAAiB,kBAAkB,CAAC;AAC7E,QAAI,MAAO,OAAM,MAAM,OAAO;AAC9B,WAAO,GAAG,EAAE,QAAQ,CAAC;AAAA,EACvB,CAAC;AAED,WAAS,SAAS,aAAa,OAAO,SAAS,WAAW;AACxD,UAAM,EAAE,SAAS,YAAY,oBAAoB,IAAI;AAKrD,UAAM,gBAAgB,QACnB,UAAU,EACV,KAAK,CAAC,MAAM,EAAE,YAAY,WAAW,EAAE,cAAc,SAAS;AAEjE,QAAI,eAAe;AACjB,aAAO,GAAG;AAAA,QACR;AAAA,QACA,YAAY,cAAc;AAAA,QAC1B,WAAW,cAAc;AAAA,QACzB,aAAa,cAAc;AAAA,QAC3B,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAEA,UAAM,QAAQ,MAAM,QAAQ,YAAY,EAAE,SAAS,YAAY,oBAAoB,CAAC;AACpF,WAAO,GAAG;AAAA,MACR;AAAA,MACA,YAAY,MAAM;AAAA,MAClB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,QAAQ;AAAA,IACV,CAAC;AAAA,EACH,CAAC;AAED,WAAS,SAAS,cAAc,OAAO,SAAS,WAAW;AACzD,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,QAAQ,QACX,UAAU,EACV,KAAK,CAAC,MAAM,EAAE,YAAY,WAAW,EAAE,cAAc,SAAS;AACjE,QAAI,MAAO,OAAM,QAAQ,UAAU,MAAM,UAAU;AACnD,WAAO,GAAG,EAAE,QAAQ,CAAC;AAAA,EACvB,CAAC;AAED,WAAS,SAAS,gBAAgB,OAAO,SAAS,WAAW;AAC3D,UAAM,EAAE,SAAS,QAAQ,IAAI;AAc7B,UAAM,cAAc,MAAM,QAAQ,SAAS,gBAAgB,cAAc,OAAO;AAChF,QAAI,CAAC,YAAa,QAAO,IAAI,KAAK,oBAAoB,OAAO,EAAE;AAE/D,UAAM,gBAAgB;AAAA,MACpB,GAAG;AAAA,MACH,GAAG;AAAA,MACH,WAAW,KAAK,IAAI;AAAA,IACtB;AAEA,UAAM,QAAQ,SAAS,gBAAgB,UAAU,aAAa;AAG9D,UAAM,EAAE,OAAO,cAAc,YAAY,UAAU,gBAAgB,IAAI;AACvE,UAAM,oBACJ,UAAU,UACV,iBAAiB,UACjB,eAAe,UACf,aAAa,UACb,oBAAoB;AAEtB,QAAI,mBAAmB;AACrB,YAAM,eAAe,QAClB,UAAU,EACV,KAAK,CAAC,MAAM,EAAE,YAAY,WAAW,EAAE,cAAc,SAAS;AACjE,UAAI,cAAc;AAChB,cAAM,QAAQ,aAAa,aAAa,UAAU;AAClD,cAAM,QAAQ,YAAY,EAAE,QAAQ,CAAC;AAAA,MACvC;AAAA,IACF;AACA,WAAO,GAAG,EAAE,QAAQ,cAAc,CAAC;AAAA,EACrC,CAAC;AAED,WAAS,SAAS,kBAAkB,OAAO,SAAS,WAAW;AAC7D,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,cAAc,MAAM,QAAQ,SAAS,gBAAgB,cAAc,OAAO;AAChF,QAAI,CAAC,YAAa,QAAO,IAAI,KAAK,oBAAoB,OAAO,EAAE;AAC/D,UAAM,WAAW,MAAM,QAAQ,SAAS,kBAAkB,YAAY,YAAY,SAAS;AAC3F,WAAO,GAAG,EAAE,SAAS,SAAS,CAAC;AAAA,EACjC,CAAC;AACH;;;AClKA,eAAe,kBACb,SACA,QACiB;AACjB,QAAM,EAAE,YAAY,QAAQ,IAAI;AAEhC,MAAI,YAAY;AACd,UAAM,QAAQ,QAAQ,SAAS,UAAU;AACzC,QAAI,MAAO,QAAO;AAAA,EACpB;AAEA,MAAI,SAAS;AACX,UAAM,WAAW,QACd,UAAU,EACV,KAAK,CAAC,MAAM,EAAE,YAAY,WAAW,EAAE,cAAc,SAAS;AACjE,QAAI,SAAU,QAAO,SAAS;AAC9B,UAAM,QAAQ,MAAM,QAAQ,YAAY,EAAE,QAAQ,CAAC;AACnD,WAAO,MAAM;AAAA,EACf;AAEA,QAAM,IAAI,MAAM,0CAA0C;AAC5D;AAEO,SAAS,yBAAyB,UAAoC;AAC3E,WAAS,SAAS,gBAAgB,OAAO,SAAS,WAAW;AAC3D,UAAM,EAAE,WAAW,IAAI;AACvB,UAAM,QAAQ,QAAQ,SAAS,UAAU;AACzC,WAAO,GAAG;AAAA,MACR,OAAO,QACH;AAAA,QACE,YAAY,MAAM;AAAA,QAClB,SAAS,MAAM;AAAA,QACf,aAAa,MAAM;AAAA,QACnB,WAAW,MAAM;AAAA,QACjB,WAAW,MAAM;AAAA,MACnB,IACA;AAAA,MACJ,QAAQ,CAAC,CAAC;AAAA,IACZ,CAAC;AAAA,EACH,CAAC;AAED,WAAS,SAAS,iBAAiB,OAAO,SAAS,WAAW;AAC5D,UAAM,EAAE,YAAY,IAAI;AACxB,UAAM,SAAS,cAAc,QAAQ,qBAAqB,WAAW,IAAI,QAAQ,UAAU;AAC3F,WAAO,GAAG;AAAA,MACR,QAAQ,OAAO,IAAI,CAAC,OAAO;AAAA,QACzB,YAAY,EAAE;AAAA,QACd,SAAS,EAAE;AAAA,QACX,aAAa,EAAE;AAAA,QACf,WAAW,EAAE;AAAA,QACb,WAAW,EAAE;AAAA,MACf,EAAE;AAAA,IACJ,CAAC;AAAA,EACH,CAAC;AAED,WAAS,SAAS,oBAAoB,OAAO,SAAS,WAAW;AAC/D,UAAM,EAAE,WAAW,IAAI;AACvB,UAAM,QAAQ,QAAQ,SAAS,UAAU;AACzC,QAAI,CAAC,MAAO,QAAO,GAAG,EAAE,YAAY,SAAS,MAAM,CAAC;AACpD,UAAM,QAAQ,aAAa,UAAU;AACrC,WAAO,GAAG,EAAE,YAAY,SAAS,KAAK,CAAC;AAAA,EACzC,CAAC;AAED,WAAS,SAAS,uBAAuB,OAAO,SAAS,WAAW;AAClE,UAAM,EAAE,YAAY,IAAI;AACxB,UAAM,SAAS,QAAQ,qBAAqB,WAAW;AACvD,eAAW,SAAS,QAAQ;AAC1B,YAAM,QAAQ,aAAa,MAAM,UAAU;AAAA,IAC7C;AACA,WAAO,GAAG,EAAE,YAAY,CAAC;AAAA,EAC3B,CAAC;AAED,WAAS,SAAS,sBAAsB,OAAO,SAAS,WAAW;AACjE,UAAM,EAAE,YAAY,QAAQ,IAAI;AAChC,UAAM,WAAW,MAAM,kBAAkB,SAAS,EAAE,YAAY,QAAQ,CAAC;AACzE,YAAQ,UAAU,QAAQ;AAC1B,WAAO,GAAG,EAAE,YAAY,SAAS,CAAC;AAAA,EACpC,CAAC;AACH;;;AClFA,SAAS,wBAAAA,6BAA4B;AAI9B,SAAS,oBAAoB,UAAoC;AACtE,WAAS,SAAS,cAAc,OAAO,SAAS,WAAW;AACzD,UAAM,EAAE,MAAM,QAAQ,UAAU,QAAQ,SAAS,MAAM,IAAI;AAS3D,UAAM,OAAO,QAAQ,SAAS;AAC9B,QAAI,CAAC,KAAM,QAAO,IAAI,OAAQ,uCAAuC;AAErE,UAAM,EAAE,WAAW,IAAI,MAAM,OAAO,kBAAkB;AACtD,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,SAAS;AAAA,MACb,IAAI,WAAW,KAAK;AAAA,MACpB,aAAaC;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAEA,UAAM,KAAK,gBAAgB,MAAM;AACjC,WAAO,GAAG,EAAE,OAAO,CAAC;AAAA,EACtB,CAAC;AAED,WAAS,SAAS,WAAW,OAAO,SAAS,WAAW;AACtD,UAAM,EAAE,GAAG,IAAI;AACf,UAAM,OAAO,QAAQ,SAAS;AAC9B,QAAI,CAAC,KAAM,QAAO,IAAI,OAAQ,uCAAuC;AACrE,UAAM,SAAS,MAAM,KAAK,oBAAoB,EAAE;AAChD,WAAO,GAAG,EAAE,OAAO,CAAC;AAAA,EACtB,CAAC;AAED,WAAS,SAAS,YAAY,OAAO,SAAS,WAAW;AACvD,UAAM,EAAE,YAAY,IAAI;AACxB,UAAM,OAAO,QAAQ,SAAS;AAC9B,QAAI,CAAC,KAAM,QAAO,IAAI,OAAQ,uCAAuC;AACrE,UAAM,UAAU,MAAM,KAAK,8BAA8B,WAAW;AACpE,WAAO,GAAG,EAAE,QAAQ,CAAC;AAAA,EACvB,CAAC;AAED,WAAS,SAAS,cAAc,OAAO,SAAS,WAAW;AACzD,UAAM,EAAE,IAAI,QAAQ,IAAI;AACxB,UAAM,OAAO,QAAQ,SAAS;AAC9B,QAAI,CAAC,KAAM,QAAO,IAAI,OAAQ,uCAAuC;AAErE,UAAM,WAAW,MAAM,KAAK,oBAAoB,EAAE;AAClD,QAAI,CAAC,SAAU,QAAO,IAAI,KAAK,2BAA2B,EAAE,EAAE;AAE9D,UAAM,UAAU;AAAA,MACd,GAAG;AAAA,MACH,GAAG;AAAA,MACH,IAAI,SAAS;AAAA,MACb,aAAa,SAAS;AAAA,MACtB,WAAW,SAAS;AAAA,MACpB,WAAW,KAAK,IAAI;AAAA,IACtB;AAEA,UAAM,KAAK,gBAAgB,OAAO;AAClC,WAAO,GAAG,EAAE,QAAQ,QAAQ,CAAC;AAAA,EAC/B,CAAC;AAED,WAAS,SAAS,cAAc,OAAO,SAAS,WAAW;AACzD,UAAM,EAAE,GAAG,IAAI;AACf,UAAM,OAAO,QAAQ,SAAS;AAC9B,QAAI,CAAC,KAAM,QAAO,IAAI,OAAQ,uCAAuC;AACrE,UAAM,KAAK,kBAAkB,EAAE;AAC/B,WAAO,GAAG,EAAE,GAAG,CAAC;AAAA,EAClB,CAAC;AAED,WAAS,SAAS,eAAe,OAAO,SAAS,WAAW;AAC1D,UAAM,EAAE,IAAI,YAAY,IAAI;AAC5B,UAAM,OAAO,QAAQ,SAAS;AAC9B,QAAI,CAAC,KAAM,QAAO,IAAI,OAAQ,uCAAuC;AAErE,QAAI,IAAI;AACN,YAAM,KAAK,sBAAsB,EAAE;AACnC,aAAO,GAAG,EAAE,GAAG,CAAC;AAAA,IAClB;AACA,QAAI,aAAa;AACf,YAAM,SAAS,MAAM,KAAK,uBAAuB,WAAW;AAC5D,aAAO,GAAG,EAAE,OAAO,CAAC;AAAA,IACtB;AACA,WAAO,IAAI,QAAQ,sCAAsC;AAAA,EAC3D,CAAC;AACH;;;AC7FO,SAAS,wBAAwB,UAAoC;AAC1E,WAAS,SAAS,gBAAgB,OAAO,SAAS,WAAW;AAC3D,UAAM,EAAE,YAAY,SAAS,SAAS,QAAQ,IAAI;AAMlD,UAAM,WAAW,MAAM,kBAAkB,SAAS,EAAE,YAAY,QAAQ,CAAC;AACzE,UAAM,QAAQ,QAAQ,UAAU,SAAS,QAAW,OAAO;AAC3D,WAAO,GAAG,EAAE,YAAY,UAAU,QAAQ,CAAC;AAAA,EAC7C,CAAC;AAED,WAAS,SAAS,kBAAkB,OAAO,SAAS,WAAW;AAC7D,UAAM,EAAE,YAAY,SAAS,UAAU,IAAI;AAM3C,QAAI,CAAC,UAAW,QAAO,IAAI,QAAQ,uBAAuB;AAE1D,UAAM,WAAW,MAAM,kBAAkB,SAAS,EAAE,YAAY,QAAQ,CAAC;AACzE,UAAM,QAAQ,OAAO,UAAU,SAAS;AACxC,WAAO,GAAG,EAAE,YAAY,SAAS,CAAC;AAAA,EACpC,CAAC;AACH;;;AC5BO,SAAS,0BAA0B,UAAoC;AAC5E,WAAS,SAAS,kBAAkB,OAAO,SAAS,WAAW;AAC7D,UAAM,EAAE,SAAS,KAAK,IAAI;AAC1B,UAAM,KAAK,QAAQ,SAAS;AAC5B,QAAI,CAAC,GAAI,QAAO,IAAI,OAAQ,yBAAyB;AAErD,UAAM,MAAM,MAAM,QAAQ,SAAS,gBAAgB,cAAc,OAAO;AACxE,QAAI,CAAC,KAAK,YAAa,QAAO,IAAI,KAAK,wBAAwB;AAE/D,UAAM,KAAK,MAAM,GAAG,OAAO,IAAI,WAAW;AAC1C,UAAM,UAAU,MAAM,GAAG,KAAK,IAAI;AAClC,WAAO,GAAG,EAAE,QAAQ,CAAC;AAAA,EACvB,CAAC;AAED,WAAS,SAAS,kBAAkB,OAAO,SAAS,WAAW;AAC7D,UAAM,EAAE,SAAS,KAAK,IAAI;AAC1B,UAAM,KAAK,QAAQ,SAAS;AAC5B,QAAI,CAAC,GAAI,QAAO,IAAI,OAAQ,yBAAyB;AAErD,UAAM,MAAM,MAAM,QAAQ,SAAS,gBAAgB,cAAc,OAAO;AACxE,QAAI,CAAC,KAAK,YAAa,QAAO,IAAI,KAAK,wBAAwB;AAE/D,UAAM,KAAK,MAAM,GAAG,OAAO,IAAI,WAAW;AAC1C,UAAM,QAAQ,MAAM,GAAG,KAAK,QAAQ,GAAG;AACvC,WAAO,GAAG,EAAE,MAAM,CAAC;AAAA,EACrB,CAAC;AAED,WAAS,SAAS,mBAAmB,OAAO,SAAS,WAAW;AAC9D,UAAM,EAAE,SAAS,MAAM,QAAQ,IAAI;AACnC,UAAM,KAAK,QAAQ,SAAS;AAC5B,QAAI,CAAC,GAAI,QAAO,IAAI,OAAQ,yBAAyB;AAErD,UAAM,MAAM,MAAM,QAAQ,SAAS,gBAAgB,cAAc,OAAO;AACxE,QAAI,CAAC,KAAK,YAAa,QAAO,IAAI,KAAK,wBAAwB;AAE/D,UAAM,KAAK,MAAM,GAAG,OAAO,IAAI,WAAW;AAC1C,UAAM,GAAG,MAAM,MAAM,OAAO;AAC5B,WAAO,GAAG,EAAE,SAAS,KAAK,CAAC;AAAA,EAC7B,CAAC;AACH;;;AC3BO,SAAS,YAAY,UAAoC;AAC9D,wBAAsB,QAAQ;AAC9B,2BAAyB,QAAQ;AACjC,0BAAwB,QAAQ;AAChC,sBAAoB,QAAQ;AAC5B,4BAA0B,QAAQ;AACpC;","names":["DEFAULT_CONTAINER_ID","DEFAULT_CONTAINER_ID"]}
1
+ {"version":3,"sources":["../src/RpcHandlerRegistry.ts","../src/handlers/image.ts","../src/handlers/instance.ts","../src/handlers/llm.ts","../src/handlers/message.ts","../src/handlers/workspace.ts","../src/handlers/index.ts"],"sourcesContent":["/**\n * RpcHandlerRegistry — single source of truth for RPC method → handler mapping.\n *\n * Register once, use everywhere. No more switch statements or mapping tables.\n *\n * @example\n * ```typescript\n * const registry = new RpcHandlerRegistry();\n * registry.register(\"workspace.read\", async (runtime, params) => {\n * const content = await workspace.read(params.path);\n * return ok(content);\n * });\n *\n * const response = await registry.handle(runtime, method, params);\n * ```\n */\n\nimport type { AgentXRuntime } from \"@agentxjs/core/runtime\";\nimport { createLogger } from \"@deepracticex/logger\";\n\nconst logger = createLogger(\"agentx/RpcHandlerRegistry\");\n\n// ============================================================================\n// Types\n// ============================================================================\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/** Handler function: receives runtime + params, returns response */\nexport type RpcHandler = (runtime: AgentXRuntime, params: unknown) => Promise<RpcResponse>;\n\n/** Helper to create success result */\nexport function ok<T>(data: T): RpcResult<T> {\n return { success: true, data };\n}\n\n/** Helper to create error result */\nexport function err(code: number, message: string): RpcError {\n return { success: false, code, message };\n}\n\n// ============================================================================\n// Registry\n// ============================================================================\n\nexport class RpcHandlerRegistry {\n private readonly handlers = new Map<string, RpcHandler>();\n\n /**\n * Register an RPC method handler\n */\n register(method: string, handler: RpcHandler): this {\n if (this.handlers.has(method)) {\n logger.warn(\"Overwriting existing handler\", { method });\n }\n this.handlers.set(method, handler);\n return this;\n }\n\n /**\n * Check if a method is registered\n */\n has(method: string): boolean {\n return this.handlers.has(method);\n }\n\n /**\n * Get all registered method names\n */\n methods(): string[] {\n return [...this.handlers.keys()];\n }\n\n /**\n * Handle an RPC request — dispatch to registered handler\n */\n async handle(runtime: AgentXRuntime, method: string, params: unknown): Promise<RpcResponse> {\n const handler = this.handlers.get(method);\n if (!handler) {\n return err(-32601, `Method not found: ${method}`);\n }\n\n try {\n return await handler(runtime, params);\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","/**\n * Image RPC Handlers\n */\n\nimport { DEFAULT_CONTAINER_ID } from \"@agentxjs/core/container\";\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { err, ok } from \"../RpcHandlerRegistry\";\n\nexport function registerImageHandlers(registry: RpcHandlerRegistry): void {\n registry.register(\"image.create\", async (runtime, params) => {\n const {\n name,\n description,\n contextId,\n model,\n systemPrompt,\n mcpServers,\n thinking,\n providerOptions,\n customData,\n } = params as {\n name?: string;\n description?: string;\n contextId?: string;\n model?: string;\n systemPrompt?: string;\n mcpServers?: Record<string, unknown>;\n thinking?: string;\n providerOptions?: Record<string, unknown>;\n customData?: Record<string, unknown>;\n };\n\n const { imageRepository, sessionRepository } = runtime.platform;\n const { createImage } = await import(\"@agentxjs/core/image\");\n\n const image = await createImage(\n {\n containerId: DEFAULT_CONTAINER_ID,\n name,\n description,\n contextId,\n model,\n systemPrompt,\n mcpServers: mcpServers as any,\n thinking: thinking as any,\n providerOptions,\n customData,\n },\n { imageRepository, sessionRepository }\n );\n\n return ok({ record: image.toRecord() });\n });\n\n registry.register(\"image.get\", async (runtime, params) => {\n const { imageId } = params as { imageId: string };\n const record = await runtime.platform.imageRepository.findImageById(imageId);\n return ok({ record });\n });\n\n registry.register(\"image.list\", async (runtime, params) => {\n const { containerId } = params as { containerId?: string };\n const records = containerId\n ? await runtime.platform.imageRepository.findImagesByContainerId(containerId)\n : await runtime.platform.imageRepository.findAllImages();\n return ok({ records });\n });\n\n registry.register(\"image.delete\", async (runtime, params) => {\n const { imageId } = params as { imageId: string };\n const { loadImage } = await import(\"@agentxjs/core/image\");\n const { imageRepository, sessionRepository } = runtime.platform;\n const image = await loadImage(imageId, { imageRepository, sessionRepository });\n if (image) await image.delete();\n return ok({ imageId });\n });\n\n registry.register(\"image.run\", async (runtime, params) => {\n const { imageId, instanceId: requestedInstanceId } = params as {\n imageId: string;\n instanceId?: string;\n };\n\n const existingAgent = runtime\n .getAgents()\n .find((a) => a.imageId === imageId && a.lifecycle === \"running\");\n\n if (existingAgent) {\n return ok({\n imageId,\n instanceId: existingAgent.instanceId,\n sessionId: existingAgent.sessionId,\n containerId: existingAgent.containerId,\n reused: true,\n });\n }\n\n const agent = await runtime.createAgent({ imageId, instanceId: requestedInstanceId });\n return ok({\n imageId,\n instanceId: agent.instanceId,\n sessionId: agent.sessionId,\n containerId: agent.containerId,\n reused: false,\n });\n });\n\n registry.register(\"image.stop\", async (runtime, params) => {\n const { imageId } = params as { imageId: string };\n const agent = runtime\n .getAgents()\n .find((a) => a.imageId === imageId && a.lifecycle === \"running\");\n if (agent) await runtime.stopAgent(agent.instanceId);\n return ok({ imageId });\n });\n\n registry.register(\"image.update\", async (runtime, params) => {\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 thinking?: string;\n providerOptions?: Record<string, unknown>;\n customData?: Record<string, unknown>;\n };\n };\n\n const imageRecord = await runtime.platform.imageRepository.findImageById(imageId);\n if (!imageRecord) return err(404, `Image not found: ${imageId}`);\n\n const updatedRecord = {\n ...imageRecord,\n ...updates,\n updatedAt: Date.now(),\n };\n\n await runtime.platform.imageRepository.saveImage(updatedRecord);\n\n // If runtime config changed, restart the running agent\n const { model, systemPrompt, mcpServers, thinking, providerOptions } = updates;\n const hasRuntimeChanges =\n model !== undefined ||\n systemPrompt !== undefined ||\n mcpServers !== undefined ||\n thinking !== undefined ||\n providerOptions !== undefined;\n\n if (hasRuntimeChanges) {\n const runningAgent = runtime\n .getAgents()\n .find((a) => a.imageId === imageId && a.lifecycle === \"running\");\n if (runningAgent) {\n await runtime.destroyAgent(runningAgent.instanceId);\n await runtime.createAgent({ imageId });\n }\n }\n return ok({ record: updatedRecord });\n });\n\n registry.register(\"image.messages\", async (runtime, params) => {\n const { imageId } = params as { imageId: string };\n const imageRecord = await runtime.platform.imageRepository.findImageById(imageId);\n if (!imageRecord) return err(404, `Image not found: ${imageId}`);\n const messages = await runtime.platform.sessionRepository.getMessages(imageRecord.sessionId);\n return ok({ imageId, messages });\n });\n}\n","/**\n * Instance RPC Handlers\n */\n\nimport type { AgentXRuntime } from \"@agentxjs/core/runtime\";\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { ok } from \"../RpcHandlerRegistry\";\n\nasync function resolveInstanceId(\n runtime: AgentXRuntime,\n params: { instanceId?: string; imageId?: string }\n): Promise<string> {\n const { instanceId, imageId } = params;\n\n if (instanceId) {\n const agent = runtime.getAgent(instanceId);\n if (agent) return instanceId;\n }\n\n if (imageId) {\n const existing = runtime\n .getAgents()\n .find((a) => a.imageId === imageId && a.lifecycle === \"running\");\n if (existing) return existing.instanceId;\n const agent = await runtime.createAgent({ imageId });\n return agent.instanceId;\n }\n\n throw new Error(\"Either instanceId or imageId is required\");\n}\n\nexport function registerInstanceHandlers(registry: RpcHandlerRegistry): void {\n registry.register(\"instance.get\", async (runtime, params) => {\n const { instanceId } = params as { instanceId: string };\n const agent = runtime.getAgent(instanceId);\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 registry.register(\"instance.list\", async (runtime, params) => {\n const { containerId } = params as { containerId?: string };\n const agents = containerId ? runtime.getAgentsByContainer(containerId) : runtime.getAgents();\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 registry.register(\"instance.destroy\", async (runtime, params) => {\n const { instanceId } = params as { instanceId: string };\n const agent = runtime.getAgent(instanceId);\n if (!agent) return ok({ instanceId, success: false });\n await runtime.destroyAgent(instanceId);\n return ok({ instanceId, success: true });\n });\n\n registry.register(\"instance.destroyAll\", async (runtime, params) => {\n const { containerId } = params as { containerId: string };\n const agents = runtime.getAgentsByContainer(containerId);\n for (const agent of agents) {\n await runtime.destroyAgent(agent.instanceId);\n }\n return ok({ containerId });\n });\n\n registry.register(\"instance.interrupt\", async (runtime, params) => {\n const { instanceId, imageId } = params as { instanceId?: string; imageId?: string };\n const resolved = await resolveInstanceId(runtime, { instanceId, imageId });\n runtime.interrupt(resolved);\n return ok({ instanceId: resolved });\n });\n}\n\nexport { resolveInstanceId };\n","/**\n * LLM Provider RPC Handlers\n */\n\nimport { DEFAULT_CONTAINER_ID } from \"@agentxjs/core/container\";\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { err, ok } from \"../RpcHandlerRegistry\";\n\nexport function registerLLMHandlers(registry: RpcHandlerRegistry): void {\n registry.register(\"llm.create\", async (runtime, params) => {\n const { name, vendor, protocol, apiKey, baseUrl, model } = params as {\n name: string;\n vendor: string;\n protocol: string;\n apiKey: string;\n baseUrl?: string;\n model?: string;\n };\n\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\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 registry.register(\"llm.get\", async (runtime, params) => {\n const { id } = params as { id: string };\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\n const record = await repo.findLLMProviderById(id);\n return ok({ record });\n });\n\n registry.register(\"llm.list\", async (runtime, params) => {\n const { containerId } = params as { containerId: string };\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\n const records = await repo.findLLMProvidersByContainerId(containerId);\n return ok({ records });\n });\n\n registry.register(\"llm.update\", async (runtime, params) => {\n const { id, updates } = params as { id: string; updates: Record<string, unknown> };\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\n\n const existing = await repo.findLLMProviderById(id);\n if (!existing) return err(404, `LLM provider not found: ${id}`);\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 registry.register(\"llm.delete\", async (runtime, params) => {\n const { id } = params as { id: string };\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\n await repo.deleteLLMProvider(id);\n return ok({ id });\n });\n\n registry.register(\"llm.default\", async (runtime, params) => {\n const { id, containerId } = params as { id?: string; containerId?: string };\n const repo = runtime.platform.llmProviderRepository;\n if (!repo) return err(-32000, \"LLM provider repository not available\");\n\n if (id) {\n await repo.setDefaultLLMProvider(id);\n return ok({ id });\n }\n if (containerId) {\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","/**\n * Message RPC Handlers\n */\n\nimport type { UserContentPart } from \"@agentxjs/core/agent\";\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { err, ok } from \"../RpcHandlerRegistry\";\nimport { resolveInstanceId } from \"./instance\";\n\nexport function registerMessageHandlers(registry: RpcHandlerRegistry): void {\n registry.register(\"message.send\", async (runtime, params) => {\n const { instanceId, imageId, content, options } = params as {\n instanceId?: string;\n imageId?: string;\n content: string | UserContentPart[];\n options?: import(\"@agentxjs/core/driver\").SendOptions;\n };\n const resolved = await resolveInstanceId(runtime, { instanceId, imageId });\n await runtime.receive(resolved, content, undefined, options);\n return ok({ instanceId: resolved, imageId });\n });\n\n registry.register(\"runtime.rewind\", async (runtime, params) => {\n const { instanceId, imageId, messageId } = params as {\n instanceId?: string;\n imageId?: string;\n messageId: string;\n };\n\n if (!messageId) return err(-32602, \"messageId is required\");\n\n const resolved = await resolveInstanceId(runtime, { instanceId, imageId });\n await runtime.rewind(resolved, messageId);\n return ok({ instanceId: resolved });\n });\n}\n","/**\n * OS RPC Handlers — exposes AgentOS file operations via RPC\n */\n\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { err, ok } from \"../RpcHandlerRegistry\";\n\nexport function registerOSHandlers(registry: RpcHandlerRegistry): void {\n registry.register(\"os.read\", async (runtime, params) => {\n const { imageId, path } = params as { imageId: string; path: string };\n const op = runtime.platform.osProvider;\n if (!op) return err(-32000, \"OS not available\");\n\n const img = await runtime.platform.imageRepository.findImageById(imageId);\n if (!img?.osId) return err(404, \"Image has no OS\");\n\n const os = await op.create(img.osId);\n const content = await os.fs.read(path);\n return ok({ content });\n });\n\n registry.register(\"os.list\", async (runtime, params) => {\n const { imageId, path } = params as { imageId: string; path?: string };\n const op = runtime.platform.osProvider;\n if (!op) return err(-32000, \"OS not available\");\n\n const img = await runtime.platform.imageRepository.findImageById(imageId);\n if (!img?.osId) return err(404, \"Image has no OS\");\n\n const os = await op.create(img.osId);\n const files = await os.fs.list(path ?? \".\");\n return ok({ files });\n });\n\n registry.register(\"os.write\", async (runtime, params) => {\n const { imageId, path, content } = params as { imageId: string; path: string; content: string };\n const op = runtime.platform.osProvider;\n if (!op) return err(-32000, \"OS not available\");\n\n const img = await runtime.platform.imageRepository.findImageById(imageId);\n if (!img?.osId) return err(404, \"Image has no OS\");\n\n const os = await op.create(img.osId);\n await os.fs.write(path, content);\n return ok({ success: true });\n });\n}\n","/**\n * RPC Handlers — all method handlers registered in one place.\n *\n * To add a new RPC method:\n * 1. Write a handler function in the appropriate file\n * 2. Register it here with registerAll()\n * That's it. No types, mappings, or switch cases to update.\n */\n\nimport type { RpcHandlerRegistry } from \"../RpcHandlerRegistry\";\nimport { registerImageHandlers } from \"./image\";\nimport { registerInstanceHandlers } from \"./instance\";\nimport { registerLLMHandlers } from \"./llm\";\nimport { registerMessageHandlers } from \"./message\";\nimport { registerOSHandlers } from \"./workspace\";\n\n/**\n * Register all RPC handlers on the registry\n */\nexport function registerAll(registry: RpcHandlerRegistry): void {\n registerImageHandlers(registry);\n registerInstanceHandlers(registry);\n registerMessageHandlers(registry);\n registerLLMHandlers(registry);\n registerOSHandlers(registry);\n}\n"],"mappings":"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","names":["DEFAULT_CONTAINER_ID","DEFAULT_CONTAINER_ID"]}
package/dist/index.d.ts CHANGED
@@ -141,9 +141,9 @@ interface FileTreeEntry {
141
141
  children?: FileTreeEntry[];
142
142
  }
143
143
  /**
144
- * Workspace state — real-time workspace view
144
+ * OS state — real-time file tree view
145
145
  */
146
- interface WorkspaceState {
146
+ interface OSState {
147
147
  /**
148
148
  * Current file tree (recursive).
149
149
  * Frontend just renders this tree directly.
@@ -151,10 +151,10 @@ interface WorkspaceState {
151
151
  files: FileTreeEntry[];
152
152
  }
153
153
  /**
154
- * PresentationWorkspace — file operations exposed to the consumer.
155
- * Wraps the underlying Workspace with a simple API.
154
+ * PresentationOS — file operations exposed to the consumer.
155
+ * Wraps the underlying AgentOS with a simple API.
156
156
  */
157
- interface PresentationWorkspace {
157
+ interface PresentationOS {
158
158
  /** Read file content */
159
159
  read(path: string): Promise<string>;
160
160
  /** Write content to a file */
@@ -195,10 +195,10 @@ interface PresentationState {
195
195
  */
196
196
  metrics: PresentationMetrics;
197
197
  /**
198
- * Workspace state — real-time file tree.
199
- * null when agent has no workspace.
198
+ * OS state — real-time file tree.
199
+ * null when agent has no OS.
200
200
  */
201
- workspace: WorkspaceState | null;
201
+ os: OSState | null;
202
202
  }
203
203
  declare const initialMetrics: PresentationMetrics;
204
204
  /**
@@ -207,9 +207,9 @@ declare const initialMetrics: PresentationMetrics;
207
207
  declare const initialPresentationState: PresentationState;
208
208
 
209
209
  /**
210
- * Workspace — file tree + operations, unified.
210
+ * OS view — file tree + operations, unified.
211
211
  */
212
- interface Workspace {
212
+ interface OS {
213
213
  /** Current file tree (real-time updates) */
214
214
  readonly files: readonly FileTreeEntry[];
215
215
  /** Read file content */
@@ -233,8 +233,8 @@ declare class Presentation {
233
233
  private _listeners;
234
234
  private _legacyHandlers;
235
235
  private _eventUnsubscribe;
236
- private _workspaceOps;
237
- constructor(agentx: AgentX, instanceId: string, options?: PresentationOptions, initialConversations?: Conversation[], workspace?: PresentationWorkspace | null);
236
+ private _osOps;
237
+ constructor(agentx: AgentX, instanceId: string, options?: PresentationOptions, initialConversations?: Conversation[], os?: PresentationOS | null);
238
238
  /** All conversations (user, assistant, error) */
239
239
  get conversations(): readonly Conversation[];
240
240
  /** Current agent status */
@@ -243,8 +243,8 @@ declare class Presentation {
243
243
  get connection(): ConnectionState;
244
244
  /** Token usage and context metrics */
245
245
  get metrics(): PresentationMetrics;
246
- /** Workspace — file tree + operations. null if agent has no workspace. */
247
- get workspace(): Workspace | null;
246
+ /** OS — file tree + operations. null if agent has no OS. */
247
+ get os(): OS | null;
248
248
  /**
249
249
  * Subscribe to state changes.
250
250
  * Compatible with React's useSyncExternalStore.
@@ -813,4 +813,4 @@ interface PlatformConfig {
813
813
  */
814
814
  declare function createAgentX(config?: PlatformConfig): AgentXBuilder;
815
815
 
816
- export { type AgentConfig, type AgentHandle, type AgentX, type AgentXBuilder, type AgentXServer, type AssistantConversation, type BaseResponse, type Block, type ChatNamespace, type ConnectOptions, type Conversation, type ErrorConversation, type FileBlock, type FileTreeEntry, type ImageBlock, type ImageCreateResponse, type ImageGetResponse, type ImageListResponse, type ImageNamespace, type ImageRecord, type ImageUpdateResponse, type InstanceCreateResponse, type InstanceGetResponse, type InstanceInfo, type InstanceListResponse, type LLMNamespace, type LLMProviderCreateResponse, type LLMProviderDefaultResponse, type LLMProviderGetResponse, type LLMProviderListResponse, type LLMProviderUpdateResponse, type MaybeAsync, type MessageSendResponse, type PlatformConfig, Presentation, type PresentationMetrics, type PresentationNamespace, type PresentationOptions, type PresentationState, type PresentationWorkspace, type RuntimeNamespace, type ServeConfig, type SessionNamespace, type TextBlock, type ThinkingBlock, type ToolBlock, type UserConversation, type Workspace, type WorkspaceState, addUserConversation, createAgentX, createInitialState, initialMetrics, initialPresentationState, messagesToConversations, presentationReducer };
816
+ export { type AgentConfig, type AgentHandle, type AgentX, type AgentXBuilder, type AgentXServer, type AssistantConversation, type BaseResponse, type Block, type ChatNamespace, type ConnectOptions, type Conversation, type ErrorConversation, type FileBlock, type FileTreeEntry, type ImageBlock, type ImageCreateResponse, type ImageGetResponse, type ImageListResponse, type ImageNamespace, type ImageRecord, type ImageUpdateResponse, type InstanceCreateResponse, type InstanceGetResponse, type InstanceInfo, type InstanceListResponse, type LLMNamespace, type LLMProviderCreateResponse, type LLMProviderDefaultResponse, type LLMProviderGetResponse, type LLMProviderListResponse, type LLMProviderUpdateResponse, type MaybeAsync, type MessageSendResponse, type OS, type OSState, type PlatformConfig, Presentation, type PresentationMetrics, type PresentationNamespace, type PresentationOS, type PresentationOptions, type PresentationState, type RuntimeNamespace, type ServeConfig, type SessionNamespace, type TextBlock, type ThinkingBlock, type ToolBlock, type UserConversation, addUserConversation, createAgentX, createInitialState, initialMetrics, initialPresentationState, messagesToConversations, presentationReducer };
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  RpcHandlerRegistry,
3
3
  registerAll
4
- } from "./chunk-SFWLYRLB.js";
4
+ } from "./chunk-TKYJYJS5.js";
5
5
 
6
6
  // src/index.ts
7
7
  import { createAgentXRuntime } from "@agentxjs/core/runtime";
@@ -301,7 +301,7 @@ var initialPresentationState = {
301
301
  status: "idle",
302
302
  connection: "connected",
303
303
  metrics: initialMetrics,
304
- workspace: null
304
+ os: null
305
305
  };
306
306
 
307
307
  // src/presentation/reducer.ts
@@ -584,7 +584,7 @@ function handleRewind(state, data) {
584
584
  function handleWorkspaceTree(state, data) {
585
585
  return {
586
586
  ...state,
587
- workspace: { files: data.files }
587
+ os: { files: data.files }
588
588
  };
589
589
  }
590
590
  function addUserConversation(state, content) {
@@ -746,19 +746,19 @@ var Presentation = class {
746
746
  _listeners = /* @__PURE__ */ new Set();
747
747
  _legacyHandlers = /* @__PURE__ */ new Set();
748
748
  _eventUnsubscribe = null;
749
- _workspaceOps;
750
- constructor(agentx, instanceId, options, initialConversations, workspace) {
749
+ _osOps;
750
+ constructor(agentx, instanceId, options, initialConversations, os) {
751
751
  this._agentx = agentx;
752
752
  this._instanceId = instanceId;
753
- this._workspaceOps = workspace ?? null;
753
+ this._osOps = os ?? null;
754
754
  this._state = initialConversations?.length ? { ...initialPresentationState, conversations: initialConversations } : createInitialState();
755
755
  if (options?.onUpdate) {
756
756
  this._legacyHandlers.add(options.onUpdate);
757
757
  }
758
758
  this._subscribeToEvents();
759
- if (this._workspaceOps) {
760
- this._workspaceOps.list(".").then((files) => {
761
- this._state = { ...this._state, workspace: { files } };
759
+ if (this._osOps) {
760
+ this._osOps.list(".").then((files) => {
761
+ this._state = { ...this._state, os: { files } };
762
762
  this._notify();
763
763
  });
764
764
  }
@@ -780,14 +780,14 @@ var Presentation = class {
780
780
  get metrics() {
781
781
  return this._state.metrics;
782
782
  }
783
- /** Workspace — file tree + operations. null if agent has no workspace. */
784
- get workspace() {
785
- if (!this._workspaceOps) return null;
786
- const ops = this._workspaceOps;
787
- const wsState = this._state.workspace;
783
+ /** OS — file tree + operations. null if agent has no OS. */
784
+ get os() {
785
+ if (!this._osOps) return null;
786
+ const ops = this._osOps;
787
+ const osState = this._state.os;
788
788
  return {
789
789
  get files() {
790
- return wsState?.files ?? [];
790
+ return osState?.files ?? [];
791
791
  },
792
792
  read: (path) => ops.read(path),
793
793
  write: (path, content) => ops.write(path, content),
@@ -916,7 +916,7 @@ var Presentation = class {
916
916
  };
917
917
 
918
918
  // src/namespaces/presentations.ts
919
- function createPresentations(agentx, sessionNs, workspaceResolver) {
919
+ function createPresentations(agentx, sessionNs, osResolver) {
920
920
  const instances = /* @__PURE__ */ new Map();
921
921
  return {
922
922
  async create(imageId, options) {
@@ -926,10 +926,10 @@ function createPresentations(agentx, sessionNs, workspaceResolver) {
926
926
  if (options?.onError) existing.onError(options.onError);
927
927
  return existing;
928
928
  }
929
- const workspace = workspaceResolver ? await workspaceResolver(imageId) : null;
929
+ const os = osResolver ? await osResolver(imageId) : null;
930
930
  const messages = await sessionNs.getMessages(imageId);
931
931
  const conversations = messagesToConversations(messages);
932
- const presentation = new Presentation(agentx, imageId, options, conversations, workspace);
932
+ const presentation = new Presentation(agentx, imageId, options, conversations, os);
933
933
  instances.set(imageId, presentation);
934
934
  const originalDispose = presentation.dispose.bind(presentation);
935
935
  presentation.dispose = () => {
@@ -1029,22 +1029,22 @@ var LocalClient = class {
1029
1029
  const image = createLocalImages(platform, agentxRuntime);
1030
1030
  const session = createLocalSessions(agentxRuntime);
1031
1031
  const llm = createLocalLLM(platform);
1032
- const workspaceResolver = async (imageId) => {
1033
- const wp = platform.workspaceProvider;
1034
- if (!wp) return null;
1032
+ const osResolver = async (imageId) => {
1033
+ const op = platform.osProvider;
1034
+ if (!op) return null;
1035
1035
  const img = await platform.imageRepository.findImageById(imageId);
1036
- if (!img?.workspaceId) return null;
1037
- const ws = await wp.create(img.workspaceId);
1036
+ if (!img?.osId) return null;
1037
+ const os = await op.create(img.osId);
1038
1038
  return {
1039
- read: (path) => ws.read(path),
1040
- write: (path, content) => ws.write(path, content),
1039
+ read: (path) => os.fs.read(path),
1040
+ write: (path, content) => os.fs.write(path, content),
1041
1041
  list: async (path) => {
1042
- const entries = await ws.list(path);
1042
+ const entries = await os.fs.list(path);
1043
1043
  return entries.map((e) => ({ name: e.name, path: e.path, type: e.type }));
1044
1044
  }
1045
1045
  };
1046
1046
  };
1047
- const present = createPresentations(this, session, workspaceResolver);
1047
+ const present = createPresentations(this, session, osResolver);
1048
1048
  this.runtime = { image, session, present, llm };
1049
1049
  this.provider = llm;
1050
1050
  this.chat = this.createChatNamespace();
@@ -1373,7 +1373,7 @@ function createAgentX(config) {
1373
1373
  "serve() requires platform.channelServer. Ensure your platform supports server mode."
1374
1374
  );
1375
1375
  }
1376
- const { createServer } = await import("./server-CFC6ONC6.js");
1376
+ const { createServer } = await import("./server-N3SRHICW.js");
1377
1377
  return createServer({
1378
1378
  platform: config.platform,
1379
1379
  createDriver: config.createDriver,