agentxjs 0.0.2 → 0.0.4
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/index.cjs +1886 -174
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1742 -30
- package/dist/index.js.map +1 -1
- package/dist/runtime/sse/index.cjs +167 -4
- package/dist/runtime/sse/index.cjs.map +1 -1
- package/dist/runtime/sse/index.js +164 -1
- package/dist/runtime/sse/index.js.map +1 -1
- package/dist/server/index.cjs +163 -3
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +162 -2
- package/dist/server/index.js.map +1 -1
- package/package.json +12 -6
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defineAgent.ts","../src/managers/definition/DefinitionManagerImpl.ts","../src/managers/image/ImageManagerImpl.ts","../src/managers/agent/AgentManager.ts","../src/managers/session/SessionManagerImpl.ts","../src/managers/error/ErrorManager.ts","../src/managers/remote/HttpClient.ts","../src/container/ContainerManagerImpl.ts","../src/AgentX.ts","../src/runtime/sse/SSEDriver.ts","../src/runtime/sse/repository/RemoteRepository.ts","../src/runtime/sse/logger/BrowserLogger.ts","../src/runtime/sse/logger/BrowserLoggerFactory.ts","../src/runtime/sse/RemoteAgentIdResolver.ts","../src/runtime/sse/SSERuntime.ts"],"names":["createLogger","logger","generateMetaImageId","ky","AgentEngine","agent","AgentInstance","STREAM_EVENT_TYPE_NAMES","LogLevelEnum","setLoggerFactory"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * defineAgent implementation\n *\n * \"Define Once, Run Anywhere\"\n *\n * Creates an AgentDefinition with business-level config.\n *\n * @example\n * ```typescript\n * import { defineAgent, createAgentX } from \"agentxjs\";\n * import { runtime } from \"agentxjs-runtime\";\n *\n * const MyAgent = defineAgent({\n * name: \"Translator\",\n * systemPrompt: \"You are a translator\",\n * });\n *\n * const agentx = createAgentX(runtime);\n * const agent = agentx.agents.create(MyAgent);\n * ```\n */\n\nimport type { AgentDefinition, DefineAgentInput } from \"@agentxjs/types\";\n\n/**\n * defineAgent - Create an agent definition\n *\n * @param input - Agent definition input\n * @returns Agent definition\n */\nexport function defineAgent(input: DefineAgentInput): AgentDefinition {\n const { name, description, systemPrompt } = input;\n\n return {\n name,\n description,\n systemPrompt,\n };\n}\n","/**\n * DefinitionManagerImpl - Repository-based implementation of DefinitionManager\n *\n * Part of Docker-style layered architecture:\n * AgentFile/Code → register → Definition → MetaImage → Session → Agent\n *\n * This implementation:\n * - Stores definitions via Repository (in-memory by default)\n * - Auto-creates MetaImage when definition is registered\n * - Maintains local cache for sync access (register/get/list are sync)\n */\n\nimport type {\n DefinitionManager,\n AgentDefinition,\n Repository,\n ImageRecord,\n DefinitionRecord,\n} from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/DefinitionManager\");\n\n/**\n * Generate MetaImage ID from definition name\n */\nfunction generateMetaImageId(definitionName: string): string {\n return `meta_${definitionName}`;\n}\n\n/**\n * Convert AgentDefinition to DefinitionRecord\n */\nfunction toDefinitionRecord(definition: AgentDefinition): DefinitionRecord {\n const now = new Date();\n return {\n name: definition.name,\n description: definition.description,\n systemPrompt: definition.systemPrompt,\n definition: definition as unknown as Record<string, unknown>,\n source: \"code\",\n createdAt: now,\n updatedAt: now,\n };\n}\n\n/**\n * DefinitionManager implementation using Repository\n */\nexport class DefinitionManagerImpl implements DefinitionManager {\n // Local cache for sync access\n private cache = new Map<string, AgentDefinition>();\n\n constructor(private readonly repository: Repository) {}\n\n register(definition: AgentDefinition): void {\n if (this.cache.has(definition.name)) {\n throw new Error(`Definition already exists: ${definition.name}`);\n }\n\n // Store in local cache (sync)\n this.cache.set(definition.name, definition);\n\n // Store in repository (async, fire-and-forget)\n const definitionRecord = toDefinitionRecord(definition);\n this.repository.saveDefinition(definitionRecord).catch((err) => {\n logger.error(\"Failed to save definition\", { name: definition.name, error: err });\n });\n\n // Auto-create MetaImage\n const metaImageId = generateMetaImageId(definition.name);\n const imageRecord: ImageRecord = {\n imageId: metaImageId,\n type: \"meta\",\n definitionName: definition.name,\n parentImageId: null,\n definition: definition as unknown as Record<string, unknown>,\n config: {},\n messages: [],\n createdAt: new Date(),\n };\n\n // Save MetaImage to repository (async, fire-and-forget)\n this.repository.saveImage(imageRecord).catch((err) => {\n logger.error(\"Failed to save MetaImage\", { definitionName: definition.name, error: err });\n });\n\n logger.info(\"Definition registered\", {\n name: definition.name,\n metaImageId,\n });\n }\n\n get(name: string): AgentDefinition | undefined {\n return this.cache.get(name);\n }\n\n list(): AgentDefinition[] {\n return Array.from(this.cache.values());\n }\n\n has(name: string): boolean {\n return this.cache.has(name);\n }\n\n unregister(name: string): boolean {\n const definition = this.cache.get(name);\n if (!definition) {\n return false;\n }\n\n // Remove from local cache\n this.cache.delete(name);\n\n // Remove from repository (async, fire-and-forget)\n this.repository.deleteDefinition(name).catch((err) => {\n logger.error(\"Failed to delete definition\", { name, error: err });\n });\n\n // Remove associated MetaImage\n const metaImageId = generateMetaImageId(name);\n this.repository.deleteImage(metaImageId).catch((err) => {\n logger.error(\"Failed to delete MetaImage\", { definitionName: name, error: err });\n });\n\n logger.info(\"Definition unregistered\", { name });\n return true;\n }\n}\n","/**\n * ImageManagerImpl - Implementation of ImageManager\n *\n * Part of Docker-style layered architecture:\n * Definition → [auto] → MetaImage → Session → [commit] → DerivedImage\n *\n * This implementation uses Repository for persistence and ContainerManager for\n * creating agents from images (like `docker run`).\n */\n\nimport type {\n ImageManager,\n AgentImage,\n MetaImage,\n Repository,\n ImageRecord,\n AgentDefinition,\n Agent,\n ContainerManager,\n} from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/ImageManager\");\n\n/**\n * Generate MetaImage ID from definition name\n */\nfunction generateMetaImageId(definitionName: string): string {\n return `meta_${definitionName}`;\n}\n\n/**\n * Convert ImageRecord to AgentImage\n */\nfunction toAgentImage(record: ImageRecord): AgentImage {\n const definition = record.definition as unknown as AgentDefinition;\n\n if (record.type === \"meta\") {\n const metaImage: MetaImage = {\n type: \"meta\",\n imageId: record.imageId,\n definitionName: record.definitionName,\n definition,\n config: record.config,\n messages: [] as const,\n createdAt: record.createdAt,\n };\n return metaImage;\n } else {\n return {\n type: \"derived\",\n imageId: record.imageId,\n parentImageId: record.parentImageId!,\n definitionName: record.definitionName,\n definition,\n config: record.config,\n messages: record.messages as unknown as AgentImage[\"messages\"],\n createdAt: record.createdAt,\n } as AgentImage;\n }\n}\n\n/**\n * ImageManager implementation using Repository and ContainerManager\n */\nexport class ImageManagerImpl implements ImageManager {\n private readonly repository: Repository;\n private readonly containerManager: ContainerManager;\n private defaultContainerId?: string;\n\n constructor(\n repository: Repository,\n containerManager: ContainerManager,\n defaultContainerId?: string\n ) {\n this.repository = repository;\n this.containerManager = containerManager;\n this.defaultContainerId = defaultContainerId;\n }\n\n async get(imageId: string): Promise<AgentImage | undefined> {\n const record = await this.repository.findImageById(imageId);\n if (!record) {\n return undefined;\n }\n return toAgentImage(record);\n }\n\n async getMetaImage(definitionName: string): Promise<MetaImage | undefined> {\n const metaImageId = generateMetaImageId(definitionName);\n const record = await this.repository.findImageById(metaImageId);\n\n if (!record || record.type !== \"meta\") {\n return undefined;\n }\n\n return toAgentImage(record) as MetaImage;\n }\n\n async list(): Promise<AgentImage[]> {\n const records = await this.repository.findAllImages();\n return records.map(toAgentImage);\n }\n\n async listByDefinition(definitionName: string): Promise<AgentImage[]> {\n const allRecords = await this.repository.findAllImages();\n const filtered = allRecords.filter((r) => r.definitionName === definitionName);\n return filtered.map(toAgentImage);\n }\n\n async exists(imageId: string): Promise<boolean> {\n return this.repository.imageExists(imageId);\n }\n\n async delete(imageId: string): Promise<boolean> {\n // Check if image exists and is not MetaImage\n const record = await this.repository.findImageById(imageId);\n if (!record) {\n return false;\n }\n\n if (record.type === \"meta\") {\n logger.warn(\"Cannot delete MetaImage directly\", { imageId });\n return false;\n }\n\n await this.repository.deleteImage(imageId);\n logger.info(\"Image deleted\", { imageId });\n return true;\n }\n\n async run(imageId: string, options?: { containerId?: string }): Promise<Agent> {\n logger.info(\"Running agent from image\", { imageId, containerId: options?.containerId });\n\n // Get image\n const image = await this.get(imageId);\n if (!image) {\n throw new Error(`Image not found: ${imageId}`);\n }\n\n // Resolve containerId (explicit > default > auto-create)\n let containerId = options?.containerId || this.defaultContainerId;\n\n if (!containerId) {\n // Auto-create default container\n const container = await this.containerManager.create();\n containerId = container.containerId;\n this.defaultContainerId = containerId;\n logger.debug(\"Auto-created default container\", { containerId });\n }\n\n // Delegate to container manager\n return this.containerManager.run(image, containerId);\n }\n}\n","/**\n * AgentManager - Running agent query and management\n *\n * Docker-style design: Agent creation happens via ContainerManager.run() or ContainerManager.resume(),\n * NOT via AgentManager. AgentManager only queries and manages running agents.\n *\n * All operations delegate to ContainerManager.\n */\n\nimport type { AgentManager as IAgentManager, Agent, ContainerManager } from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/AgentManager\");\n\n/**\n * Agent query manager implementation\n *\n * Delegates all operations to ContainerManager.\n */\nexport class AgentManager implements IAgentManager {\n constructor(private readonly containerManager: ContainerManager) {}\n\n /**\n * Get an existing agent by ID\n */\n get(agentId: string): Agent | undefined {\n return this.containerManager.getAgent(agentId);\n }\n\n /**\n * Check if an agent exists\n */\n has(agentId: string): boolean {\n return this.containerManager.hasAgent(agentId);\n }\n\n /**\n * List all agents\n */\n list(): Agent[] {\n return this.containerManager.listAgents();\n }\n\n /**\n * Destroy an agent by ID\n */\n async destroy(agentId: string): Promise<void> {\n logger.debug(\"Destroying agent\", { agentId });\n await this.containerManager.destroyAgent(agentId);\n logger.info(\"Agent destroyed\", { agentId });\n }\n\n /**\n * Destroy all agents\n */\n async destroyAll(): Promise<void> {\n const agents = this.containerManager.listAgents();\n logger.debug(\"Destroying all agents\", { count: agents.length });\n await this.containerManager.destroyAllAgents();\n logger.info(\"All agents destroyed\", { count: agents.length });\n }\n}\n","/**\n * SessionManagerImpl - Session management implementation\n *\n * Manages session lifecycle using Repository for persistence.\n *\n * Part of Docker-style layered architecture:\n * Definition → build → Image → run → Agent\n * ↓\n * Session (external wrapper)\n */\n\nimport type {\n Session,\n SessionManager,\n Repository,\n SessionRecord,\n ImageRecord,\n Agent,\n ContainerManager,\n Message,\n} from \"@agentxjs/types\";\nimport type { MessageRecord, MessageRole } from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/SessionManager\");\n\n/**\n * Generate unique session ID\n */\nfunction generateSessionId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `session_${timestamp}_${random}`;\n}\n\n/**\n * Generate unique image ID\n */\nfunction generateImageId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `image_${timestamp}_${random}`;\n}\n\n/**\n * Session implementation with resume and fork capability\n */\nclass SessionImpl implements Session {\n readonly sessionId: string;\n readonly userId: string;\n readonly imageId: string;\n readonly createdAt: number;\n\n private _title: string | null;\n private _updatedAt: number;\n private readonly repository: Repository;\n private readonly containerManager: ContainerManager;\n private readonly defaultContainerId?: string;\n\n constructor(\n record: SessionRecord,\n repository: Repository,\n containerManager: ContainerManager,\n defaultContainerId?: string\n ) {\n this.sessionId = record.sessionId;\n this.userId = record.userId;\n this.imageId = record.imageId;\n this._title = record.title;\n this.createdAt = record.createdAt.getTime();\n this._updatedAt = record.updatedAt.getTime();\n this.repository = repository;\n this.containerManager = containerManager;\n this.defaultContainerId = defaultContainerId;\n }\n\n get title(): string | null {\n return this._title;\n }\n\n get updatedAt(): number {\n return this._updatedAt;\n }\n\n async resume(options?: { containerId?: string }): Promise<Agent> {\n logger.info(\"Resuming agent from session\", {\n sessionId: this.sessionId,\n imageId: this.imageId,\n containerId: options?.containerId,\n });\n\n // Resolve containerId (explicit > default > auto-create)\n let containerId = options?.containerId || this.defaultContainerId;\n\n if (!containerId) {\n // Auto-create default container\n const container = await this.containerManager.create();\n containerId = container.containerId;\n logger.debug(\"Auto-created default container for session\", {\n containerId,\n sessionId: this.sessionId,\n });\n }\n\n // Delegate to container manager\n const agent = await this.containerManager.resume(this, containerId);\n\n // Auto-collect messages from agent\n this.collect(agent);\n\n return agent;\n }\n\n collect(agent: Agent): void {\n logger.debug(\"Collecting messages from agent\", {\n sessionId: this.sessionId,\n agentId: agent.agentId,\n });\n\n const sessionId = this.sessionId;\n const repository = this.repository;\n\n // Subscribe to all message events and persist them\n const saveMessage = (data: Message, role: MessageRole) => {\n const record: MessageRecord = {\n messageId: data.id,\n sessionId,\n role,\n content: data as unknown as Record<string, unknown>,\n createdAt: new Date(data.timestamp ?? Date.now()),\n };\n\n repository.saveMessage(record).catch((error) => {\n logger.error(\"Failed to persist message\", {\n sessionId,\n messageId: record.messageId,\n error,\n });\n });\n };\n\n agent.on(\"user_message\", (event) => saveMessage(event.data, \"user\"));\n agent.on(\"assistant_message\", (event) => saveMessage(event.data, \"assistant\"));\n agent.on(\"tool_call_message\", (event) => saveMessage(event.data, \"tool\"));\n agent.on(\"tool_result_message\", (event) => saveMessage(event.data, \"tool\"));\n }\n\n async getMessages(): Promise<Message[]> {\n logger.debug(\"Getting messages for session\", { sessionId: this.sessionId });\n\n const records = await this.repository.findMessagesBySessionId(this.sessionId);\n\n // Convert MessageRecord to Message (content stores the full message)\n return records.map((record) => record.content as unknown as Message);\n }\n\n async fork(): Promise<Session> {\n logger.info(\"Forking session\", { sessionId: this.sessionId });\n\n // Get current image\n const imageRecord = await this.repository.findImageById(this.imageId);\n if (!imageRecord) {\n throw new Error(`Image not found: ${this.imageId}`);\n }\n\n // Create new image with copied data (DerivedImage from fork)\n const newImageId = generateImageId();\n const newImageRecord: ImageRecord = {\n imageId: newImageId,\n type: \"derived\",\n definitionName: imageRecord.definitionName,\n parentImageId: imageRecord.imageId,\n definition: imageRecord.definition,\n config: imageRecord.config,\n messages: [...imageRecord.messages], // Copy messages\n createdAt: new Date(),\n };\n await this.repository.saveImage(newImageRecord);\n\n // Create new session pointing to new image\n const newSessionId = generateSessionId();\n const now = new Date();\n const newSessionRecord: SessionRecord = {\n sessionId: newSessionId,\n userId: this.userId,\n imageId: newImageId,\n title: this._title ? `Fork of ${this._title}` : null,\n createdAt: now,\n updatedAt: now,\n };\n await this.repository.saveSession(newSessionRecord);\n\n logger.info(\"Session forked\", {\n originalSessionId: this.sessionId,\n newSessionId,\n newImageId,\n });\n\n return new SessionImpl(\n newSessionRecord,\n this.repository,\n this.containerManager,\n this.defaultContainerId\n );\n }\n\n async setTitle(title: string): Promise<void> {\n logger.debug(\"Setting session title\", { sessionId: this.sessionId, title });\n\n const now = new Date();\n await this.repository.saveSession({\n sessionId: this.sessionId,\n userId: this.userId,\n imageId: this.imageId,\n title,\n createdAt: new Date(this.createdAt),\n updatedAt: now,\n });\n\n this._title = title;\n this._updatedAt = now.getTime();\n\n logger.info(\"Session title updated\", { sessionId: this.sessionId, title });\n }\n}\n\n/**\n * SessionManager implementation\n */\nexport class SessionManagerImpl implements SessionManager {\n private readonly repository: Repository;\n private readonly containerManager: ContainerManager;\n private readonly defaultContainerId?: string;\n\n constructor(\n repository: Repository,\n containerManager: ContainerManager,\n defaultContainerId?: string\n ) {\n this.repository = repository;\n this.containerManager = containerManager;\n this.defaultContainerId = defaultContainerId;\n }\n\n async create(imageId: string, userId: string): Promise<Session> {\n const sessionId = generateSessionId();\n const now = new Date();\n\n const record: SessionRecord = {\n sessionId,\n userId,\n imageId,\n title: null,\n createdAt: now,\n updatedAt: now,\n };\n\n await this.repository.saveSession(record);\n\n logger.info(\"Session created\", { sessionId, imageId, userId });\n\n return new SessionImpl(record, this.repository, this.containerManager, this.defaultContainerId);\n }\n\n async get(sessionId: string): Promise<Session | undefined> {\n const record = await this.repository.findSessionById(sessionId);\n if (!record) return undefined;\n\n return new SessionImpl(record, this.repository, this.containerManager, this.defaultContainerId);\n }\n\n async has(sessionId: string): Promise<boolean> {\n return this.repository.sessionExists(sessionId);\n }\n\n async list(): Promise<Session[]> {\n const records = await this.repository.findAllSessions();\n return records.map(\n (r) => new SessionImpl(r, this.repository, this.containerManager, this.defaultContainerId)\n );\n }\n\n async listByImage(imageId: string): Promise<Session[]> {\n const records = await this.repository.findSessionsByImageId(imageId);\n return records.map(\n (r) => new SessionImpl(r, this.repository, this.containerManager, this.defaultContainerId)\n );\n }\n\n async listByUser(userId: string): Promise<Session[]> {\n const records = await this.repository.findSessionsByUserId(userId);\n return records.map(\n (r) => new SessionImpl(r, this.repository, this.containerManager, this.defaultContainerId)\n );\n }\n\n async destroy(sessionId: string): Promise<void> {\n await this.repository.deleteSession(sessionId);\n logger.info(\"Session destroyed\", { sessionId });\n }\n\n async destroyByImage(imageId: string): Promise<void> {\n await this.repository.deleteSessionsByImageId(imageId);\n logger.info(\"Sessions destroyed by image\", { imageId });\n }\n\n async destroyAll(): Promise<void> {\n const sessions = await this.repository.findAllSessions();\n for (const session of sessions) {\n await this.repository.deleteSession(session.sessionId);\n }\n logger.info(\"All sessions destroyed\");\n }\n}\n","/**\n * ErrorManager - Platform-level error management\n *\n * Collects and handles all agent errors at the platform level.\n * Ensures no error is lost, even if user doesn't register handlers.\n *\n * Design:\n * - Default behavior: Always logs errors (no silent failures)\n * - Extensible: User can add custom handlers (Sentry, alerting, etc.)\n * - Unified: All agent errors flow through here\n *\n * Note: Only available in Local mode. Remote clients handle\n * errors themselves due to environment-specific differences.\n */\n\nimport type {\n ErrorManager as IErrorManager,\n ErrorHandler,\n AgentError,\n ErrorEvent,\n Unsubscribe,\n} from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/ErrorManager\");\n\n/**\n * Platform-level error manager implementation\n */\nexport class ErrorManager implements IErrorManager {\n private readonly handlers: Set<ErrorHandler> = new Set();\n\n /**\n * Handle an error from any agent\n *\n * Called internally when an agent emits an error event.\n * 1. Default logging (always)\n * 2. Custom handlers (user-registered)\n */\n handle(agentId: string, error: AgentError, event: ErrorEvent): void {\n // 1. Default logging (always happens)\n this.logError(agentId, error);\n\n // 2. Custom handlers\n for (const handler of this.handlers) {\n try {\n handler.handle(agentId, error, event);\n } catch (e) {\n // Handler error should not break the chain\n logger.error(\"ErrorHandler failed\", { error: e });\n }\n }\n }\n\n /**\n * Add a custom error handler\n */\n addHandler(handler: ErrorHandler): Unsubscribe {\n this.handlers.add(handler);\n return () => {\n this.handlers.delete(handler);\n };\n }\n\n /**\n * Remove an error handler\n */\n removeHandler(handler: ErrorHandler): void {\n this.handlers.delete(handler);\n }\n\n /**\n * Default error logging\n */\n private logError(agentId: string, error: AgentError): void {\n const prefix = `[${agentId}] ${error.category}/${error.code}`;\n\n if (error.severity === \"fatal\") {\n logger.error(`${prefix}: ${error.message}`, { error });\n } else if (error.severity === \"error\") {\n logger.error(`${prefix}: ${error.message}`);\n } else {\n logger.warn(`${prefix}: ${error.message}`);\n }\n }\n}\n","/**\n * HttpClient - ky-based HTTP client for Remote managers\n */\n\nimport ky, { type KyInstance } from \"ky\";\n\n/**\n * HTTP client options\n */\nexport interface HttpClientOptions {\n baseUrl: string;\n headers?: Record<string, string>;\n timeout?: number;\n}\n\n/**\n * API error from server\n */\nexport class ApiError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly details?: unknown\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\n/**\n * Create HTTP client instance\n */\nexport function createHttpClient(options: HttpClientOptions): KyInstance {\n return ky.create({\n prefixUrl: options.baseUrl.replace(/\\/+$/, \"\"),\n headers: options.headers,\n timeout: options.timeout || 30000,\n hooks: {\n afterResponse: [\n async (_request, _options, response) => {\n if (!response.ok) {\n const data = (await response.json().catch(() => ({}))) as {\n error?: { code?: string; message?: string; details?: unknown };\n };\n throw new ApiError(\n data.error?.code || \"UNKNOWN_ERROR\",\n data.error?.message || `Request failed: ${response.status}`,\n data.error?.details\n );\n }\n return response;\n },\n ],\n },\n });\n}\n\nexport type { KyInstance };\n","/**\n * ContainerManagerImpl - Implementation of ContainerManager\n *\n * Manages container lifecycle and agent runtime using:\n * - Repository: Persistence for ContainerRecord\n * - Runtime: createSandbox, createDriver for agent creation\n * - AgentEngine: Event processing\n */\n\nimport type {\n Agent,\n AgentImage,\n Session,\n ContainerRecord,\n ContainerConfig,\n Repository,\n Runtime,\n AgentContext,\n AgentDefinition,\n} from \"@agentxjs/types\";\nimport { AgentInstance } from \"@agentxjs/agent\";\nimport { AgentEngine } from \"@agentxjs/engine\";\nimport { createLogger } from \"@agentxjs/common\";\nimport type { ContainerManager } from \"./ContainerManager\";\n\nconst logger = createLogger(\"agentx/ContainerManager\");\n\n/**\n * Generate unique container ID\n */\nfunction generateContainerId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `container_${timestamp}_${random}`;\n}\n\n/**\n * Generate unique agent ID\n */\nfunction generateAgentId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `agent_${timestamp}_${random}`;\n}\n\n/**\n * ContainerManager implementation\n */\nexport class ContainerManagerImpl implements ContainerManager {\n private readonly agents = new Map<string, Agent>();\n private readonly engine: AgentEngine;\n private readonly runtime: Runtime;\n private readonly repository: Repository;\n\n constructor(runtime: Runtime, repository: Repository) {\n this.runtime = runtime;\n this.repository = repository;\n this.engine = new AgentEngine();\n }\n\n // ==================== Container Lifecycle ====================\n\n async create(config?: ContainerConfig): Promise<ContainerRecord> {\n const containerId = generateContainerId();\n const now = Date.now();\n\n const record: ContainerRecord = {\n containerId,\n createdAt: now,\n updatedAt: now,\n config,\n };\n\n await this.repository.saveContainer(record);\n\n logger.info(\"Container created\", { containerId });\n\n return record;\n }\n\n async get(containerId: string): Promise<ContainerRecord | null> {\n return this.repository.findContainerById(containerId);\n }\n\n async list(): Promise<ContainerRecord[]> {\n return this.repository.findAllContainers();\n }\n\n async delete(containerId: string): Promise<boolean> {\n const exists = await this.repository.containerExists(containerId);\n if (!exists) {\n return false;\n }\n\n await this.repository.deleteContainer(containerId);\n logger.info(\"Container deleted\", { containerId });\n return true;\n }\n\n async exists(containerId: string): Promise<boolean> {\n return this.repository.containerExists(containerId);\n }\n\n // ==================== Agent Runtime ====================\n\n async run(image: AgentImage, containerId: string): Promise<Agent> {\n logger.info(\"Running agent from image\", {\n imageId: image.imageId,\n containerId,\n });\n\n // Verify container exists\n const container = await this.repository.findContainerById(containerId);\n if (!container) {\n throw new Error(`Container not found: ${containerId}`);\n }\n\n // Resolve agent ID (local or from server depending on Runtime)\n let agentId: string;\n if (this.runtime.agentIdResolver) {\n agentId = await this.runtime.agentIdResolver.resolveForRun(image.imageId, containerId);\n } else {\n agentId = generateAgentId();\n }\n\n // Create context\n const context: AgentContext = {\n agentId,\n createdAt: Date.now(),\n };\n\n // Create sandbox using containerId for isolation\n const sandbox = this.runtime.createSandbox(containerId);\n\n // Create driver\n const driver = this.runtime.createDriver(image.definition, context, sandbox);\n\n // Create agent\n const agent = new AgentInstance(image.definition, context, this.engine, driver, sandbox);\n\n // Register agent\n this.agents.set(agentId, agent);\n\n logger.info(\"Agent started\", {\n agentId,\n imageId: image.imageId,\n containerId,\n definitionName: image.definition.name,\n });\n\n return agent;\n }\n\n async resume(session: Session, containerId: string): Promise<Agent> {\n logger.info(\"Resuming agent from session\", {\n sessionId: session.sessionId,\n imageId: session.imageId,\n containerId,\n });\n\n // Verify container exists\n const container = await this.repository.findContainerById(containerId);\n if (!container) {\n throw new Error(`Container not found: ${containerId}`);\n }\n\n // Get image from repository\n const imageRecord = await this.repository.findImageById(session.imageId);\n if (!imageRecord) {\n throw new Error(`Image not found: ${session.imageId}`);\n }\n\n // Resolve agent ID (local or from server depending on Runtime)\n let agentId: string;\n if (this.runtime.agentIdResolver) {\n agentId = await this.runtime.agentIdResolver.resolveForResume(session.sessionId, containerId);\n } else {\n agentId = generateAgentId();\n }\n\n // Create context\n const context: AgentContext = {\n agentId,\n createdAt: Date.now(),\n };\n\n // Create sandbox using containerId for isolation\n const sandbox = this.runtime.createSandbox(containerId);\n\n // Create driver\n const definition = imageRecord.definition as unknown as AgentDefinition;\n const driver = this.runtime.createDriver(definition, context, sandbox);\n\n // Create agent\n const agent = new AgentInstance(definition, context, this.engine, driver, sandbox);\n\n // Register agent\n this.agents.set(agentId, agent);\n\n logger.info(\"Agent resumed\", {\n agentId,\n sessionId: session.sessionId,\n imageId: session.imageId,\n containerId,\n });\n\n return agent;\n }\n\n async destroyAgent(agentId: string): Promise<void> {\n const agent = this.agents.get(agentId);\n if (!agent) {\n logger.warn(\"Agent not found for destroy\", { agentId });\n return;\n }\n\n logger.debug(\"Destroying agent\", { agentId });\n await agent.destroy();\n this.agents.delete(agentId);\n logger.info(\"Agent destroyed\", { agentId });\n }\n\n getAgent(agentId: string): Agent | undefined {\n return this.agents.get(agentId);\n }\n\n hasAgent(agentId: string): boolean {\n return this.agents.has(agentId);\n }\n\n listAgents(): Agent[] {\n return Array.from(this.agents.values());\n }\n\n async destroyAllAgents(): Promise<void> {\n const agentIds = Array.from(this.agents.keys());\n logger.debug(\"Destroying all agents\", { count: agentIds.length });\n await Promise.all(agentIds.map((id) => this.destroyAgent(id)));\n logger.info(\"All agents destroyed\", { count: agentIds.length });\n }\n}\n","/**\n * AgentX - Platform API Implementation\n *\n * The central entry point for all agent operations.\n * Runtime determines the execution environment (Node.js, Browser, etc.)\n *\n * @example\n * ```typescript\n * import { createAgentX } from \"agentxjs\";\n * import { nodeRuntime } from \"agentxjs-runtime\";\n *\n * const agentx = createAgentX(nodeRuntime());\n *\n * // Simple usage (auto-created default container)\n * const agent = await agentx.images.run(imageId);\n *\n * // Multi-tenant usage (explicit container)\n * const container = await agentx.containers.create();\n * const agent = await agentx.images.run(imageId, { containerId: container.containerId });\n * ```\n */\n\nimport type { AgentX, Runtime } from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\nimport {\n AgentManager,\n SessionManagerImpl,\n ErrorManager,\n DefinitionManagerImpl,\n ImageManagerImpl,\n} from \"./managers\";\nimport { ContainerManagerImpl } from \"./container\";\n\nconst logger = createLogger(\"agentx/AgentX\");\n\n/**\n * AgentX creation options\n */\nexport interface CreateAgentXOptions {\n /**\n * Default container ID to use for operations\n * If not provided, a default container will be auto-created\n */\n containerId?: string;\n}\n\n/**\n * Create AgentX instance with Runtime\n *\n * @param runtime - Runtime provides infrastructure (createSandbox, createDriver, repository)\n * @param options - Optional configuration\n * @returns AgentX instance\n *\n * @example\n * ```typescript\n * import { createAgentX } from \"agentxjs\";\n * import { nodeRuntime } from \"agentxjs-runtime\";\n *\n * // Simple usage - auto-creates default container\n * const agentx = createAgentX(nodeRuntime());\n *\n * // Multi-tenant - specify container\n * const agentx = createAgentX(nodeRuntime(), { containerId: \"tenant_123\" });\n * ```\n */\nexport function createAgentX(runtime: Runtime, options?: CreateAgentXOptions): AgentX {\n logger.info(\"Creating AgentX instance\", { runtime: runtime.name });\n\n // Check repository\n if (!runtime.repository) {\n throw new Error(\"Runtime must have a repository for persistence\");\n }\n\n const repository = runtime.repository;\n\n // Create container manager\n const containerManager = new ContainerManagerImpl(runtime, repository);\n\n // Create other managers\n const errorManager = new ErrorManager();\n const definitionManager = new DefinitionManagerImpl(repository);\n const agentManager = new AgentManager(containerManager);\n\n // Create image manager with repository and container manager\n const imageManager = new ImageManagerImpl(repository, containerManager, options?.containerId);\n\n // Create session manager with repository and container manager\n const sessionManager = new SessionManagerImpl(repository, containerManager, options?.containerId);\n\n logger.debug(\"AgentX instance created\", { runtime: runtime.name });\n\n return {\n mode: \"local\",\n containers: containerManager,\n definitions: definitionManager,\n images: imageManager,\n agents: agentManager,\n sessions: sessionManager,\n errors: errorManager,\n };\n}\n","/* eslint-disable no-undef */\n/**\n * SSEDriver - Browser-side driver that connects to remote AgentX server via SSE\n *\n * This driver enables the client to use the full agentx stack (including AgentEngine)\n * by bridging SSE push events to the async generator pull model.\n *\n * @example\n * ```typescript\n * import { createSSERuntime } from \"agentxjs/client\";\n * import { createAgentX, defineAgent } from \"agentxjs\";\n *\n * const runtime = createSSERuntime({\n * serverUrl: \"http://localhost:5200/agentx\",\n * agentId: \"agent_123\"\n * });\n * const agentx = createAgentX(runtime);\n * const agent = agentx.agents.create(defineAgent({ name: \"Assistant\" }));\n *\n * agent.on(\"assistant_message\", (event) => {\n * console.log(event.data.content);\n * });\n *\n * await agent.receive(\"Hello!\");\n * ```\n */\n\nimport type { UserMessage, StreamEventType, AgentDriver } from \"@agentxjs/types\";\nimport { STREAM_EVENT_TYPE_NAMES } from \"@agentxjs/types\";\n\n/**\n * Persistent SSE connection manager\n *\n * Maintains a single SSE connection for the lifetime of the driver.\n * Bridges SSE push model to async generator pull model for each receive() call.\n */\nclass PersistentSSEConnection {\n private eventSource: EventSource | null = null;\n private messageQueue: StreamEventType[] = [];\n private activeIterators: Set<{\n resolve: (result: IteratorResult<StreamEventType>) => void;\n reject: (error: Error) => void;\n }> = new Set();\n private isDone = false;\n\n constructor(\n private readonly serverUrl: string,\n private readonly agentId: string,\n private readonly sseParams: Record<string, string> = {}\n ) {}\n\n /**\n * Initialize SSE connection\n */\n connect(): void {\n if (this.eventSource) {\n return; // Already connected\n }\n\n // Build SSE URL with optional query parameters (for auth, etc.)\n let sseUrl = `${this.serverUrl}/agents/${this.agentId}/sse`;\n if (Object.keys(this.sseParams).length > 0) {\n const params = new URLSearchParams(this.sseParams);\n sseUrl += `?${params.toString()}`;\n }\n this.eventSource = new EventSource(sseUrl);\n\n const handleEvent = (event: MessageEvent) => {\n try {\n const data = JSON.parse(event.data) as StreamEventType;\n\n // Notify all active iterators\n if (this.activeIterators.size > 0) {\n const iterator = this.activeIterators.values().next().value;\n if (iterator) {\n this.activeIterators.delete(iterator);\n iterator.resolve({ value: data, done: false });\n }\n } else {\n // Queue event if no iterator is waiting\n this.messageQueue.push(data);\n }\n } catch {\n // Ignore parse errors\n }\n };\n\n const handleError = () => {\n this.isDone = true;\n this.eventSource?.close();\n this.eventSource = null;\n\n // Reject all waiting iterators\n for (const iterator of this.activeIterators) {\n iterator.reject(new Error(\"SSE connection error\"));\n }\n this.activeIterators.clear();\n };\n\n // Listen for all stream event types\n for (const eventType of STREAM_EVENT_TYPE_NAMES) {\n this.eventSource.addEventListener(eventType, handleEvent as any);\n }\n\n // Listen for error events (independent from stream events, transportable via SSE)\n this.eventSource.addEventListener(\"error\", handleEvent as any);\n\n // Also listen for generic message events (fallback)\n this.eventSource.onmessage = handleEvent;\n\n // Handle SSE connection errors (different from our ErrorEvent)\n this.eventSource.onerror = handleError;\n }\n\n /**\n * Create an async iterable for a single receive() call\n *\n * This iterator continues until a final message_stop is received (stopReason !== \"tool_use\").\n * For tool calls, this means it will span multiple message_start/message_stop cycles.\n * The SSE connection itself remains open for future receive() calls.\n */\n createIterator(): AsyncIterable<StreamEventType> {\n const connection = this;\n\n return {\n [Symbol.asyncIterator]() {\n let turnComplete = false;\n\n return {\n async next(): Promise<IteratorResult<StreamEventType>> {\n // Return queued events first\n if (connection.messageQueue.length > 0) {\n const event = connection.messageQueue.shift()!;\n\n // Check if turn is complete at message_stop\n // Continue if stopReason is \"tool_use\", stop otherwise\n if (event.type === \"message_stop\") {\n const stopReason = event.data.stopReason;\n if (stopReason !== \"tool_use\") {\n turnComplete = true;\n }\n }\n\n return { value: event, done: false };\n }\n\n // If turn is complete, end iteration (but keep connection open for next receive())\n if (turnComplete) {\n return { done: true, value: undefined as any };\n }\n\n // If connection died, end iteration\n if (connection.isDone) {\n return { done: true, value: undefined as any };\n }\n\n // Wait for next event\n return new Promise((resolve, reject) => {\n // Wrap resolve to check for completion\n const wrappedResolve = (result: IteratorResult<StreamEventType>) => {\n if (!result.done) {\n // Check if turn is complete at message_stop\n if (result.value.type === \"message_stop\") {\n const stopReason = result.value.data.stopReason;\n if (stopReason !== \"tool_use\") {\n turnComplete = true;\n }\n }\n }\n resolve(result);\n };\n\n const iterator = { resolve: wrappedResolve, reject };\n connection.activeIterators.add(iterator);\n });\n },\n\n async return(): Promise<IteratorResult<StreamEventType>> {\n // Cleanup this iterator (but keep connection alive)\n return { done: true, value: undefined as any };\n },\n };\n },\n };\n }\n\n /**\n * Close the connection\n */\n close(): void {\n this.isDone = true;\n\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = null;\n }\n\n // Reject all waiting iterators\n for (const iterator of this.activeIterators) {\n iterator.reject(new Error(\"Connection closed\"));\n }\n this.activeIterators.clear();\n this.messageQueue = [];\n }\n}\n\n/**\n * SSEDriver configuration\n */\nexport interface SSEDriverConfig {\n serverUrl: string;\n agentId: string;\n headers?: Record<string, string>;\n /**\n * Query parameters to append to SSE URL.\n * Use this for authentication since EventSource doesn't support headers.\n */\n sseParams?: Record<string, string>;\n}\n\n/**\n * Create an SSEDriver instance\n *\n * Factory function for browser-side SSE driver.\n */\nexport function createSSEDriver(config: SSEDriverConfig): AgentDriver {\n const { serverUrl, agentId, headers = {}, sseParams = {} } = config;\n let connection: PersistentSSEConnection | null = null;\n\n return {\n name: \"SSEDriver\",\n\n async *receive(message: UserMessage): AsyncIterable<StreamEventType> {\n // 1. Ensure SSE connection is established\n if (!connection) {\n connection = new PersistentSSEConnection(serverUrl, agentId, sseParams);\n connection.connect();\n }\n\n // 2. Send message to server via HTTP POST\n const messageUrl = `${serverUrl}/agents/${agentId}/messages`;\n const response = await fetch(messageUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify({\n content: typeof message.content === \"string\" ? message.content : message.content,\n }),\n });\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string };\n };\n throw new Error(errorBody.error?.message || `HTTP ${response.status}`);\n }\n\n // 3. Yield events from persistent SSE connection\n yield* connection.createIterator();\n },\n\n interrupt(): void {\n // Call server interrupt endpoint (fire-and-forget)\n const interruptUrl = `${serverUrl}/agents/${agentId}/interrupt`;\n fetch(interruptUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n }).catch(() => {\n // Ignore errors - interrupt is best-effort\n });\n },\n };\n}\n","/**\n * RemoteRepository - HTTP-based repository implementation\n *\n * Communicates with remote AgentX server for persistence.\n *\n * Part of Docker-style layered architecture:\n * Definition → build → Image → run → Agent\n * ↓\n * Session (external wrapper)\n */\n\nimport type {\n Repository,\n DefinitionRecord,\n ImageRecord,\n SessionRecord,\n MessageRecord,\n ContainerRecord,\n} from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\nimport { createHttpClient, type KyInstance } from \"~/managers/remote/HttpClient\";\n\nconst logger = createLogger(\"agentx/RemoteRepository\");\n\nexport interface RemoteRepositoryOptions {\n serverUrl: string;\n headers?: Record<string, string>;\n}\n\nexport class RemoteRepository implements Repository {\n private readonly client: KyInstance;\n\n constructor(options: RemoteRepositoryOptions) {\n this.client = createHttpClient({\n baseUrl: options.serverUrl,\n headers: options.headers,\n });\n logger.debug(\"RemoteRepository created\", { serverUrl: options.serverUrl });\n }\n\n // ==================== Definition ====================\n\n async saveDefinition(record: DefinitionRecord): Promise<void> {\n await this.client.put(`definitions/${record.name}`, { json: record });\n }\n\n async findDefinitionByName(name: string): Promise<DefinitionRecord | null> {\n try {\n const result = await this.client.get(`definitions/${name}`).json<DefinitionRecord>();\n return this.parseDefinitionRecord(result);\n } catch (error: unknown) {\n if (this.isNotFound(error)) return null;\n throw error;\n }\n }\n\n async findAllDefinitions(): Promise<DefinitionRecord[]> {\n const result = await this.client.get(\"definitions\").json<DefinitionRecord[]>();\n return result.map((r) => this.parseDefinitionRecord(r));\n }\n\n async deleteDefinition(name: string): Promise<void> {\n await this.client.delete(`definitions/${name}`);\n }\n\n async definitionExists(name: string): Promise<boolean> {\n try {\n await this.client.head(`definitions/${name}`);\n return true;\n } catch {\n return false;\n }\n }\n\n // ==================== Image ====================\n\n async saveImage(record: ImageRecord): Promise<void> {\n await this.client.put(`images/${record.imageId}`, { json: record });\n }\n\n async findImageById(imageId: string): Promise<ImageRecord | null> {\n try {\n const result = await this.client.get(`images/${imageId}`).json<ImageRecord>();\n return this.parseImageRecord(result);\n } catch (error: unknown) {\n if (this.isNotFound(error)) return null;\n throw error;\n }\n }\n\n async findAllImages(): Promise<ImageRecord[]> {\n const result = await this.client.get(\"images\").json<ImageRecord[]>();\n return result.map((r) => this.parseImageRecord(r));\n }\n\n async deleteImage(imageId: string): Promise<void> {\n await this.client.delete(`images/${imageId}`);\n }\n\n async imageExists(imageId: string): Promise<boolean> {\n try {\n await this.client.head(`images/${imageId}`);\n return true;\n } catch {\n return false;\n }\n }\n\n // ==================== Session ====================\n\n async saveSession(record: SessionRecord): Promise<void> {\n await this.client.put(`sessions/${record.sessionId}`, { json: record });\n }\n\n async findSessionById(sessionId: string): Promise<SessionRecord | null> {\n try {\n const result = await this.client.get(`sessions/${sessionId}`).json<SessionRecord>();\n return this.parseSessionRecord(result);\n } catch (error: unknown) {\n if (this.isNotFound(error)) return null;\n throw error;\n }\n }\n\n async findSessionsByImageId(imageId: string): Promise<SessionRecord[]> {\n const result = await this.client.get(`images/${imageId}/sessions`).json<SessionRecord[]>();\n return result.map((r) => this.parseSessionRecord(r));\n }\n\n async findSessionsByUserId(userId: string): Promise<SessionRecord[]> {\n const result = await this.client.get(`users/${userId}/sessions`).json<SessionRecord[]>();\n return result.map((r) => this.parseSessionRecord(r));\n }\n\n async findAllSessions(): Promise<SessionRecord[]> {\n const result = await this.client.get(\"sessions\").json<SessionRecord[]>();\n return result.map((r) => this.parseSessionRecord(r));\n }\n\n async deleteSession(sessionId: string): Promise<void> {\n await this.client.delete(`sessions/${sessionId}`);\n }\n\n async deleteSessionsByImageId(imageId: string): Promise<void> {\n await this.client.delete(`images/${imageId}/sessions`);\n }\n\n async sessionExists(sessionId: string): Promise<boolean> {\n try {\n await this.client.head(`sessions/${sessionId}`);\n return true;\n } catch {\n return false;\n }\n }\n\n // ==================== Message ====================\n\n /**\n * Save message - noop in browser\n *\n * Messages are persisted by server-side SessionCollector.\n * Browser-side calls this but it does nothing to avoid duplicate saves.\n */\n async saveMessage(_record: MessageRecord): Promise<void> {\n // Noop - server handles persistence via SessionCollector\n logger.debug(\"saveMessage called (noop in browser)\");\n }\n\n async findMessageById(messageId: string): Promise<MessageRecord | null> {\n try {\n const result = await this.client.get(`messages/${messageId}`).json<MessageRecord>();\n return this.parseMessageRecord(result);\n } catch (error: unknown) {\n if (this.isNotFound(error)) return null;\n throw error;\n }\n }\n\n async findMessagesBySessionId(sessionId: string): Promise<MessageRecord[]> {\n const result = await this.client.get(`sessions/${sessionId}/messages`).json<MessageRecord[]>();\n return result.map((r) => this.parseMessageRecord(r));\n }\n\n async deleteMessage(messageId: string): Promise<void> {\n await this.client.delete(`messages/${messageId}`);\n }\n\n async deleteMessagesBySessionId(sessionId: string): Promise<void> {\n await this.client.delete(`sessions/${sessionId}/messages`);\n }\n\n async countMessagesBySessionId(sessionId: string): Promise<number> {\n const result = await this.client\n .get(`sessions/${sessionId}/messages/count`)\n .json<{ count: number }>();\n return result.count;\n }\n\n // ==================== Container ====================\n\n async saveContainer(record: ContainerRecord): Promise<void> {\n await this.client.put(`containers/${record.containerId}`, { json: record });\n }\n\n async findContainerById(containerId: string): Promise<ContainerRecord | null> {\n try {\n const result = await this.client.get(`containers/${containerId}`).json<ContainerRecord>();\n return this.parseContainerRecord(result);\n } catch (error: unknown) {\n if (this.isNotFound(error)) return null;\n throw error;\n }\n }\n\n async findAllContainers(): Promise<ContainerRecord[]> {\n const result = await this.client.get(\"containers\").json<ContainerRecord[]>();\n return result.map((r) => this.parseContainerRecord(r));\n }\n\n async deleteContainer(containerId: string): Promise<void> {\n await this.client.delete(`containers/${containerId}`);\n }\n\n async containerExists(containerId: string): Promise<boolean> {\n try {\n await this.client.head(`containers/${containerId}`);\n return true;\n } catch {\n return false;\n }\n }\n\n // ==================== Helpers ====================\n\n private isNotFound(error: unknown): boolean {\n return (error as { response?: { status: number } })?.response?.status === 404;\n }\n\n private parseDefinitionRecord(raw: DefinitionRecord): DefinitionRecord {\n return {\n ...raw,\n createdAt: new Date(raw.createdAt),\n updatedAt: new Date(raw.updatedAt),\n };\n }\n\n private parseImageRecord(raw: ImageRecord): ImageRecord {\n return {\n ...raw,\n createdAt: new Date(raw.createdAt),\n };\n }\n\n private parseSessionRecord(raw: SessionRecord): SessionRecord {\n return {\n ...raw,\n createdAt: new Date(raw.createdAt),\n updatedAt: new Date(raw.updatedAt),\n };\n }\n\n private parseMessageRecord(raw: MessageRecord): MessageRecord {\n return {\n ...raw,\n createdAt: new Date(raw.createdAt),\n };\n }\n\n private parseContainerRecord(raw: ContainerRecord): ContainerRecord {\n return {\n ...raw,\n // ContainerRecord uses number timestamps, no conversion needed\n };\n }\n}\n","/**\n * BrowserLogger - Styled console logger for browsers\n *\n * Uses CSS styling for beautiful console output in browser DevTools.\n * Provides colorful, grouped logs with timestamps.\n */\n\nimport type { Logger, LogContext, LogLevel } from \"@agentxjs/types\";\nimport { LogLevel as LogLevelEnum } from \"@agentxjs/types\";\n\nexport interface BrowserLoggerOptions {\n level?: LogLevel;\n collapsed?: boolean; // Use console.groupCollapsed for context\n}\n\nexport class BrowserLogger implements Logger {\n readonly name: string;\n readonly level: LogLevel;\n private readonly collapsed: boolean;\n\n // CSS styles for different log levels\n private static readonly STYLES = {\n DEBUG: \"color: #6B7280; font-weight: normal;\", // gray\n INFO: \"color: #10B981; font-weight: normal;\", // green\n WARN: \"color: #F59E0B; font-weight: bold;\", // amber\n ERROR: \"color: #EF4444; font-weight: bold;\", // red\n TIMESTAMP: \"color: #9CA3AF; font-weight: normal;\", // light gray\n NAME: \"color: #8B5CF6; font-weight: normal;\", // purple\n MESSAGE: \"color: inherit; font-weight: normal;\",\n };\n\n // Badge styles for level indicators\n private static readonly BADGE_STYLES = {\n DEBUG:\n \"background: #E5E7EB; color: #374151; padding: 2px 6px; border-radius: 3px; font-size: 11px;\",\n INFO: \"background: #D1FAE5; color: #065F46; padding: 2px 6px; border-radius: 3px; font-size: 11px;\",\n WARN: \"background: #FEF3C7; color: #92400E; padding: 2px 6px; border-radius: 3px; font-size: 11px;\",\n ERROR:\n \"background: #FEE2E2; color: #991B1B; padding: 2px 6px; border-radius: 3px; font-size: 11px;\",\n };\n\n constructor(name: string, options: BrowserLoggerOptions = {}) {\n this.name = name;\n this.level = options.level ?? LogLevelEnum.INFO;\n this.collapsed = options.collapsed ?? true;\n }\n\n debug(message: string, context?: LogContext): void {\n if (this.isDebugEnabled()) {\n this.log(\"DEBUG\", message, context);\n }\n }\n\n info(message: string, context?: LogContext): void {\n if (this.isInfoEnabled()) {\n this.log(\"INFO\", message, context);\n }\n }\n\n warn(message: string, context?: LogContext): void {\n if (this.isWarnEnabled()) {\n this.log(\"WARN\", message, context);\n }\n }\n\n error(message: string | Error, context?: LogContext): void {\n if (this.isErrorEnabled()) {\n if (message instanceof Error) {\n this.log(\"ERROR\", message.message, { ...context, stack: message.stack });\n } else {\n this.log(\"ERROR\", message, context);\n }\n }\n }\n\n isDebugEnabled(): boolean {\n return this.level <= LogLevelEnum.DEBUG;\n }\n\n isInfoEnabled(): boolean {\n return this.level <= LogLevelEnum.INFO;\n }\n\n isWarnEnabled(): boolean {\n return this.level <= LogLevelEnum.WARN;\n }\n\n isErrorEnabled(): boolean {\n return this.level <= LogLevelEnum.ERROR;\n }\n\n private log(level: string, message: string, context?: LogContext): void {\n const timestamp = new Date().toLocaleTimeString();\n const consoleMethod = this.getConsoleMethod(level);\n const badgeStyle = BrowserLogger.BADGE_STYLES[level as keyof typeof BrowserLogger.BADGE_STYLES];\n\n // Format: [TIME] [LEVEL] [NAME] message\n const format = `%c${timestamp} %c${level}%c %c[${this.name}]%c ${message}`;\n const styles = [\n BrowserLogger.STYLES.TIMESTAMP,\n badgeStyle,\n \"\", // reset after badge\n BrowserLogger.STYLES.NAME,\n BrowserLogger.STYLES.MESSAGE,\n ];\n\n if (context && Object.keys(context).length > 0) {\n // Use grouping for context\n const groupMethod = this.collapsed ? console.groupCollapsed : console.group;\n groupMethod.call(console, format, ...styles);\n console.log(\"Context:\", context);\n console.groupEnd();\n } else {\n consoleMethod(format, ...styles);\n }\n }\n\n private getConsoleMethod(level: string): (...args: unknown[]) => void {\n switch (level) {\n case \"DEBUG\":\n return console.debug.bind(console);\n case \"INFO\":\n return console.info.bind(console);\n case \"WARN\":\n return console.warn.bind(console);\n case \"ERROR\":\n return console.error.bind(console);\n default:\n return console.log.bind(console);\n }\n }\n}\n","/**\n * BrowserLoggerFactory - Factory for creating BrowserLogger instances\n *\n * Creates styled console loggers for browser environments.\n * Used by SSERuntime to provide browser-optimized logging.\n */\n\nimport type { Logger, LoggerFactory, LogLevel } from \"@agentxjs/types\";\nimport { BrowserLogger, type BrowserLoggerOptions } from \"./BrowserLogger\";\n\nexport interface BrowserLoggerFactoryOptions {\n level?: LogLevel;\n collapsed?: boolean;\n}\n\nexport class BrowserLoggerFactory implements LoggerFactory {\n private readonly options: BrowserLoggerOptions;\n private readonly loggers: Map<string, BrowserLogger> = new Map();\n\n constructor(options: BrowserLoggerFactoryOptions = {}) {\n this.options = options;\n }\n\n getLogger(name: string): Logger {\n if (this.loggers.has(name)) {\n return this.loggers.get(name)!;\n }\n\n const logger = new BrowserLogger(name, this.options);\n this.loggers.set(name, logger);\n return logger;\n }\n}\n","/**\n * RemoteAgentIdResolver - Resolves agent ID from remote server\n *\n * Calls server API to create agent and returns server's agent ID.\n * This ensures browser and server use the same agentId.\n */\n\nimport type { AgentIdResolver } from \"@agentxjs/types\";\nimport { createHttpClient, type KyInstance } from \"~/managers/remote/HttpClient\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/RemoteAgentIdResolver\");\n\nexport interface RemoteAgentIdResolverOptions {\n serverUrl: string;\n headers?: Record<string, string>;\n}\n\ninterface RunImageResponse {\n agentId: string;\n}\n\ninterface ResumeSessionResponse {\n agentId: string;\n}\n\n/**\n * Remote implementation of AgentIdResolver\n *\n * Calls server API to create agent before local agent is created.\n */\nexport class RemoteAgentIdResolver implements AgentIdResolver {\n private readonly client: KyInstance;\n\n constructor(options: RemoteAgentIdResolverOptions) {\n this.client = createHttpClient({\n baseUrl: options.serverUrl,\n headers: options.headers,\n });\n }\n\n async resolveForRun(imageId: string, containerId: string): Promise<string> {\n logger.debug(\"Resolving agent ID for run\", { imageId, containerId });\n\n const response = await this.client\n .post(`images/${imageId}/run`, {\n json: { containerId },\n })\n .json<RunImageResponse>();\n\n logger.info(\"Agent ID resolved for run\", { imageId, agentId: response.agentId });\n return response.agentId;\n }\n\n async resolveForResume(sessionId: string, containerId: string): Promise<string> {\n logger.debug(\"Resolving agent ID for resume\", { sessionId, containerId });\n\n const response = await this.client\n .post(`sessions/${sessionId}/resume`, {\n json: { containerId },\n })\n .json<ResumeSessionResponse>();\n\n logger.info(\"Agent ID resolved for resume\", { sessionId, agentId: response.agentId });\n return response.agentId;\n }\n}\n","/**\n * SSERuntime - Browser Runtime implementation\n *\n * \"Define Once, Run Anywhere\"\n *\n * Provides Runtime for browser that connects to remote AgentX server via SSE.\n * Uses the same API as NodeRuntime, enabling unified code across platforms.\n *\n * @example\n * ```typescript\n * import { createAgentX } from \"agentxjs\";\n * import { createSSERuntime } from \"agentxjs/client\";\n * import { defineAgent } from \"agentxjs\";\n *\n * const MyAgent = defineAgent({\n * name: \"Assistant\",\n * systemPrompt: \"You are a helpful assistant\",\n * });\n *\n * // Browser: connect to remote server\n * const runtime = createSSERuntime({ serverUrl: \"http://localhost:5200/agentx\" });\n * const agentx = createAgentX(runtime);\n * const agent = agentx.agents.create(MyAgent);\n *\n * // Same API as server-side!\n * agent.on(\"assistant_message\", (event) => {\n * console.log(event.data.content);\n * });\n *\n * await agent.receive(\"Hello!\");\n * ```\n */\n\nimport type {\n Runtime,\n Sandbox,\n RuntimeDriver,\n AgentContext,\n AgentDefinition,\n Repository,\n LoggerFactory,\n Logger,\n AgentIdResolver,\n} from \"@agentxjs/types\";\nimport { setLoggerFactory } from \"@agentxjs/common\";\nimport { createSSEDriver } from \"./SSEDriver\";\nimport { RemoteRepository } from \"./repository\";\nimport { BrowserLoggerFactory } from \"./logger\";\nimport { RemoteAgentIdResolver } from \"./RemoteAgentIdResolver\";\n\n// ============================================================================\n// NoopSandbox - Browser doesn't need local resources\n// ============================================================================\n\nconst noopSandbox: Sandbox = {\n name: \"browser-noop\",\n workspace: {\n id: \"noop\",\n name: \"noop\",\n path: \"\", // Browser has no local workspace\n },\n llm: {\n name: \"noop\",\n provide: () => ({}),\n },\n};\n\n// ============================================================================\n// SSERuntime - Browser Runtime implementation\n// ============================================================================\n\n/**\n * SSERuntime configuration\n */\nexport interface SSERuntimeConfig {\n /**\n * Server base URL (e.g., \"http://localhost:5200/agentx\")\n */\n serverUrl: string;\n\n /**\n * Optional request headers (for auth, etc.)\n * Note: These headers are used for HTTP requests (POST, DELETE, etc.)\n * but NOT for SSE connections (EventSource doesn't support headers).\n * For SSE auth, use sseParams to pass token via query string.\n */\n headers?: Record<string, string>;\n\n /**\n * Optional query parameters to append to SSE URL.\n * Use this for authentication since EventSource doesn't support headers.\n *\n * @example\n * ```typescript\n * createSSERuntime({\n * serverUrl: \"http://localhost:5200/agentx\",\n * headers: { Authorization: \"Bearer xxx\" }, // For HTTP requests\n * sseParams: { token: \"xxx\" }, // For SSE connections\n * });\n * ```\n */\n sseParams?: Record<string, string>;\n}\n\n/**\n * SSERuntime - Runtime for browser with SSE driver\n *\n * Connects to remote AgentX server via SSE.\n * All resources (LLM, etc.) are provided by the server.\n *\n * Uses RemoteContainer which calls server POST /agents to create agents.\n * This ensures browser and server use the same agentId.\n */\nclass SSERuntime implements Runtime {\n readonly name = \"sse\";\n readonly repository: Repository;\n readonly loggerFactory: LoggerFactory;\n readonly agentIdResolver: AgentIdResolver;\n\n private readonly serverUrl: string;\n private readonly headers: Record<string, string>;\n private readonly sseParams: Record<string, string>;\n\n constructor(config: SSERuntimeConfig) {\n this.serverUrl = config.serverUrl.replace(/\\/+$/, \"\"); // Remove trailing slash\n this.headers = config.headers ?? {};\n this.sseParams = config.sseParams ?? {};\n\n // Create and configure BrowserLoggerFactory\n this.loggerFactory = new BrowserLoggerFactory({\n collapsed: true,\n });\n\n // Set as global logger factory\n setLoggerFactory(this.loggerFactory);\n\n this.repository = new RemoteRepository({\n serverUrl: this.serverUrl,\n headers: this.headers,\n });\n\n // Create agent ID resolver for remote agent creation\n this.agentIdResolver = new RemoteAgentIdResolver({\n serverUrl: this.serverUrl,\n headers: this.headers,\n });\n }\n\n createSandbox(_containerId: string): Sandbox {\n // Browser doesn't need local resources\n return noopSandbox;\n }\n\n createDriver(\n _definition: AgentDefinition,\n context: AgentContext,\n _sandbox: Sandbox\n ): RuntimeDriver {\n // context.agentId is already resolved by RemoteContainer\n // which called POST /agents on server - so it's the server's agentId\n const driver = createSSEDriver({\n serverUrl: this.serverUrl,\n agentId: context.agentId,\n headers: this.headers,\n sseParams: this.sseParams,\n });\n\n // SSEDriver implements AgentDriver, wrap it as RuntimeDriver\n return {\n ...driver,\n sandbox: noopSandbox,\n };\n }\n\n createLogger(name: string): Logger {\n return this.loggerFactory.getLogger(name);\n }\n}\n\n// ============================================================================\n// Factory function\n// ============================================================================\n\n/**\n * Create SSE Runtime for browser\n *\n * @example\n * ```typescript\n * import { createAgentX } from \"agentxjs\";\n * import { sseRuntime } from \"agentxjs/runtime/sse\";\n *\n * createAgentX(sseRuntime({\n * serverUrl: \"http://localhost:5200/agentx\",\n * headers: { Authorization: \"Bearer xxx\" },\n * }));\n * ```\n */\nexport function sseRuntime(config: SSERuntimeConfig): Runtime {\n return new SSERuntime(config);\n}\n\n/**\n * @deprecated Use `sseRuntime()` instead for consistency with `nodeRuntime()`\n */\nexport const createSSERuntime = sseRuntime;\n\n// Also export class for advanced use\nexport { SSERuntime };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/defineAgent.ts","../../common/src/logger/ConsoleLogger.ts","../../common/src/logger/LoggerFactoryImpl.ts","../src/managers/definition/DefinitionManagerImpl.ts","../src/managers/image/ImageManagerImpl.ts","../src/managers/agent/AgentManager.ts","../src/managers/session/SessionManagerImpl.ts","../src/managers/error/ErrorManager.ts","../src/managers/remote/HttpClient.ts","../../agent/src/agent/AgentStateMachine.ts","../../agent/src/agent/AgentEventBus.ts","../../agent/src/agent/AgentErrorClassifier.ts","../../agent/src/agent/MiddlewareChain.ts","../../agent/src/agent/InterceptorChain.ts","../../agent/src/agent/ReactHandlerMapper.ts","../../agent/src/agent/AgentInstance.ts","../../engine/src/mealy/Store.ts","../../engine/src/mealy/Mealy.ts","../../engine/src/mealy/combinators.ts","../../engine/src/internal/messageAssemblerProcessor.ts","../../engine/src/internal/stateEventProcessor.ts","../../engine/src/internal/turnTrackerProcessor.ts","../../engine/src/AgentProcessor.ts","../../engine/src/AgentEngine.ts","../src/container/ContainerManagerImpl.ts","../src/AgentX.ts","../src/runtime/sse/SSEDriver.ts","../src/runtime/sse/repository/RemoteRepository.ts","../src/runtime/sse/logger/BrowserLogger.ts","../src/runtime/sse/logger/BrowserLoggerFactory.ts","../src/runtime/sse/RemoteAgentIdResolver.ts","../src/runtime/sse/SSERuntime.ts"],"names":["_ConsoleLogger","__publicField","LogLevelEnum","logger","generateMetaImageId","ky","createLogger","Subject","filter","rxFilter","take","records","isStateEvent","shouldPreserveToolCalls","generateId","handleMessageStart","handleMessageStop","handleToolUseContentBlockStart","handleToolUseContentBlockStop","STREAM_EVENT_TYPE_NAMES"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * defineAgent implementation\n *\n * \"Define Once, Run Anywhere\"\n *\n * Creates an AgentDefinition with business-level config.\n *\n * @example\n * ```typescript\n * import { defineAgent, createAgentX } from \"agentxjs\";\n * import { runtime } from \"agentxjs-runtime\";\n *\n * const MyAgent = defineAgent({\n * name: \"Translator\",\n * systemPrompt: \"You are a translator\",\n * });\n *\n * const agentx = createAgentX(runtime);\n * const agent = agentx.agents.create(MyAgent);\n * ```\n */\n\nimport type { AgentDefinition, DefineAgentInput } from \"@agentxjs/types\";\n\n/**\n * defineAgent - Create an agent definition\n *\n * @param input - Agent definition input\n * @returns Agent definition\n */\nexport function defineAgent(input: DefineAgentInput): AgentDefinition {\n const { name, description, systemPrompt } = input;\n\n return {\n name,\n description,\n systemPrompt,\n };\n}\n","/**\n * ConsoleLogger - Default logger implementation\n *\n * Simple console-based logger with color support.\n * Used as fallback when no custom LoggerFactory is provided.\n */\n\nimport type { Logger, LogContext, LogLevel } from \"@agentxjs/types\";\nimport { LogLevel as LogLevelEnum } from \"@agentxjs/types\";\n\nexport interface ConsoleLoggerOptions {\n level?: LogLevel;\n colors?: boolean;\n timestamps?: boolean;\n}\n\nexport class ConsoleLogger implements Logger {\n readonly name: string;\n readonly level: LogLevel;\n private readonly colors: boolean;\n private readonly timestamps: boolean;\n\n private static readonly COLORS = {\n DEBUG: \"\\x1b[36m\",\n INFO: \"\\x1b[32m\",\n WARN: \"\\x1b[33m\",\n ERROR: \"\\x1b[31m\",\n RESET: \"\\x1b[0m\",\n };\n\n constructor(name: string, options: ConsoleLoggerOptions = {}) {\n this.name = name;\n this.level = options.level ?? LogLevelEnum.INFO;\n this.colors = options.colors ?? this.isNodeEnvironment();\n this.timestamps = options.timestamps ?? true;\n }\n\n debug(message: string, context?: LogContext): void {\n if (this.isDebugEnabled()) {\n this.log(\"DEBUG\", message, context);\n }\n }\n\n info(message: string, context?: LogContext): void {\n if (this.isInfoEnabled()) {\n this.log(\"INFO\", message, context);\n }\n }\n\n warn(message: string, context?: LogContext): void {\n if (this.isWarnEnabled()) {\n this.log(\"WARN\", message, context);\n }\n }\n\n error(message: string | Error, context?: LogContext): void {\n if (this.isErrorEnabled()) {\n if (message instanceof Error) {\n this.log(\"ERROR\", message.message, { ...context, stack: message.stack });\n } else {\n this.log(\"ERROR\", message, context);\n }\n }\n }\n\n isDebugEnabled(): boolean {\n return this.level <= LogLevelEnum.DEBUG;\n }\n\n isInfoEnabled(): boolean {\n return this.level <= LogLevelEnum.INFO;\n }\n\n isWarnEnabled(): boolean {\n return this.level <= LogLevelEnum.WARN;\n }\n\n isErrorEnabled(): boolean {\n return this.level <= LogLevelEnum.ERROR;\n }\n\n private log(level: string, message: string, context?: LogContext): void {\n const parts: string[] = [];\n\n if (this.timestamps) {\n parts.push(new Date().toISOString());\n }\n\n if (this.colors) {\n const color = ConsoleLogger.COLORS[level as keyof typeof ConsoleLogger.COLORS];\n parts.push(`${color}${level.padEnd(5)}${ConsoleLogger.COLORS.RESET}`);\n } else {\n parts.push(level.padEnd(5));\n }\n\n parts.push(`[${this.name}]`);\n parts.push(message);\n\n const logLine = parts.join(\" \");\n const consoleMethod = this.getConsoleMethod(level);\n\n if (context && Object.keys(context).length > 0) {\n consoleMethod(logLine, context);\n } else {\n consoleMethod(logLine);\n }\n }\n\n private getConsoleMethod(level: string): (...args: unknown[]) => void {\n switch (level) {\n case \"DEBUG\":\n return console.debug.bind(console);\n case \"INFO\":\n return console.info.bind(console);\n case \"WARN\":\n return console.warn.bind(console);\n case \"ERROR\":\n return console.error.bind(console);\n default:\n return console.log.bind(console);\n }\n }\n\n private isNodeEnvironment(): boolean {\n return typeof process !== \"undefined\" && process.versions?.node !== undefined;\n }\n}\n","/**\n * LoggerFactoryImpl - Central factory for creating logger instances\n *\n * Implements lazy initialization pattern:\n * - createLogger() can be called at module level (before config)\n * - Real logger is created on first use\n * - External LoggerFactory can be injected via Runtime\n */\n\nimport type { Logger, LoggerFactory, LogContext, LogLevel } from \"@agentxjs/types\";\nimport { LogLevel as LogLevelEnum } from \"@agentxjs/types\";\nimport { ConsoleLogger, type ConsoleLoggerOptions } from \"./ConsoleLogger\";\n\n// External factory injected via Runtime\nlet externalFactory: LoggerFactory | null = null;\n\nexport interface LoggerFactoryConfig {\n defaultImplementation?: (name: string) => Logger;\n defaultLevel?: LogLevel;\n consoleOptions?: Omit<ConsoleLoggerOptions, \"level\">;\n}\n\n/**\n * Internal LoggerFactory implementation\n *\n * Uses lazy proxy pattern to allow module-level createLogger() calls.\n */\nexport class LoggerFactoryImpl {\n private static loggers: Map<string, Logger> = new Map();\n private static config: LoggerFactoryConfig = {\n defaultLevel: LogLevelEnum.INFO,\n };\n\n static getLogger(nameOrClass: string | (new (...args: unknown[]) => unknown)): Logger {\n const name = typeof nameOrClass === \"string\" ? nameOrClass : nameOrClass.name;\n\n if (this.loggers.has(name)) {\n return this.loggers.get(name)!;\n }\n\n const lazyLogger = this.createLazyLogger(name);\n this.loggers.set(name, lazyLogger);\n return lazyLogger;\n }\n\n static configure(config: LoggerFactoryConfig): void {\n this.config = { ...this.config, ...config };\n }\n\n static reset(): void {\n this.loggers.clear();\n this.config = { defaultLevel: LogLevelEnum.INFO };\n externalFactory = null;\n }\n\n private static createLazyLogger(name: string): Logger {\n let realLogger: Logger | null = null;\n\n const getRealLogger = (): Logger => {\n if (!realLogger) {\n realLogger = this.createLogger(name);\n }\n return realLogger;\n };\n\n return {\n name,\n level: this.config.defaultLevel || LogLevelEnum.INFO,\n debug: (message: string, context?: LogContext) => getRealLogger().debug(message, context),\n info: (message: string, context?: LogContext) => getRealLogger().info(message, context),\n warn: (message: string, context?: LogContext) => getRealLogger().warn(message, context),\n error: (message: string | Error, context?: LogContext) =>\n getRealLogger().error(message, context),\n isDebugEnabled: () => getRealLogger().isDebugEnabled(),\n isInfoEnabled: () => getRealLogger().isInfoEnabled(),\n isWarnEnabled: () => getRealLogger().isWarnEnabled(),\n isErrorEnabled: () => getRealLogger().isErrorEnabled(),\n };\n }\n\n private static createLogger(name: string): Logger {\n if (externalFactory) {\n return externalFactory.getLogger(name);\n }\n\n if (this.config.defaultImplementation) {\n return this.config.defaultImplementation(name);\n }\n\n return new ConsoleLogger(name, {\n level: this.config.defaultLevel,\n ...this.config.consoleOptions,\n });\n }\n}\n\n/**\n * Set external LoggerFactory (called by Runtime initialization)\n */\nexport function setLoggerFactory(factory: LoggerFactory): void {\n externalFactory = factory;\n LoggerFactoryImpl.reset();\n externalFactory = factory;\n}\n\n/**\n * Create a logger instance\n *\n * Safe to call at module level before Runtime is configured.\n * Uses lazy initialization - actual logger is created on first use.\n *\n * @param name - Logger name (hierarchical, e.g., \"engine/AgentEngine\")\n * @returns Logger instance (lazy proxy)\n */\nexport function createLogger(name: string): Logger {\n return LoggerFactoryImpl.getLogger(name);\n}\n","/**\n * DefinitionManagerImpl - Repository-based implementation of DefinitionManager\n *\n * Part of Docker-style layered architecture:\n * AgentFile/Code → register → Definition → MetaImage → Session → Agent\n *\n * This implementation:\n * - Stores definitions via Repository (in-memory by default)\n * - Auto-creates MetaImage when definition is registered\n * - Maintains local cache for sync access (register/get/list are sync)\n */\n\nimport type {\n DefinitionManager,\n AgentDefinition,\n Repository,\n ImageRecord,\n DefinitionRecord,\n} from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/DefinitionManager\");\n\n/**\n * Generate MetaImage ID from definition name\n */\nfunction generateMetaImageId(definitionName: string): string {\n return `meta_${definitionName}`;\n}\n\n/**\n * Convert AgentDefinition to DefinitionRecord\n */\nfunction toDefinitionRecord(definition: AgentDefinition): DefinitionRecord {\n const now = new Date();\n return {\n name: definition.name,\n description: definition.description,\n systemPrompt: definition.systemPrompt,\n definition: definition as unknown as Record<string, unknown>,\n source: \"code\",\n createdAt: now,\n updatedAt: now,\n };\n}\n\n/**\n * DefinitionManager implementation using Repository\n */\nexport class DefinitionManagerImpl implements DefinitionManager {\n // Local cache for sync access\n private cache = new Map<string, AgentDefinition>();\n\n constructor(private readonly repository: Repository) {}\n\n register(definition: AgentDefinition): void {\n if (this.cache.has(definition.name)) {\n throw new Error(`Definition already exists: ${definition.name}`);\n }\n\n // Store in local cache (sync)\n this.cache.set(definition.name, definition);\n\n // Store in repository (async, fire-and-forget)\n const definitionRecord = toDefinitionRecord(definition);\n this.repository.saveDefinition(definitionRecord).catch((err) => {\n logger.error(\"Failed to save definition\", { name: definition.name, error: err });\n });\n\n // Auto-create MetaImage\n const metaImageId = generateMetaImageId(definition.name);\n const imageRecord: ImageRecord = {\n imageId: metaImageId,\n type: \"meta\",\n definitionName: definition.name,\n parentImageId: null,\n definition: definition as unknown as Record<string, unknown>,\n config: {},\n messages: [],\n createdAt: new Date(),\n };\n\n // Save MetaImage to repository (async, fire-and-forget)\n this.repository.saveImage(imageRecord).catch((err) => {\n logger.error(\"Failed to save MetaImage\", { definitionName: definition.name, error: err });\n });\n\n logger.info(\"Definition registered\", {\n name: definition.name,\n metaImageId,\n });\n }\n\n get(name: string): AgentDefinition | undefined {\n return this.cache.get(name);\n }\n\n list(): AgentDefinition[] {\n return Array.from(this.cache.values());\n }\n\n has(name: string): boolean {\n return this.cache.has(name);\n }\n\n unregister(name: string): boolean {\n const definition = this.cache.get(name);\n if (!definition) {\n return false;\n }\n\n // Remove from local cache\n this.cache.delete(name);\n\n // Remove from repository (async, fire-and-forget)\n this.repository.deleteDefinition(name).catch((err) => {\n logger.error(\"Failed to delete definition\", { name, error: err });\n });\n\n // Remove associated MetaImage\n const metaImageId = generateMetaImageId(name);\n this.repository.deleteImage(metaImageId).catch((err) => {\n logger.error(\"Failed to delete MetaImage\", { definitionName: name, error: err });\n });\n\n logger.info(\"Definition unregistered\", { name });\n return true;\n }\n}\n","/**\n * ImageManagerImpl - Implementation of ImageManager\n *\n * Part of Docker-style layered architecture:\n * Definition → [auto] → MetaImage → Session → [commit] → DerivedImage\n *\n * This implementation uses Repository for persistence and ContainerManager for\n * creating agents from images (like `docker run`).\n */\n\nimport type {\n ImageManager,\n AgentImage,\n MetaImage,\n Repository,\n ImageRecord,\n AgentDefinition,\n Agent,\n ContainerManager,\n} from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/ImageManager\");\n\n/**\n * Generate MetaImage ID from definition name\n */\nfunction generateMetaImageId(definitionName: string): string {\n return `meta_${definitionName}`;\n}\n\n/**\n * Convert ImageRecord to AgentImage\n */\nfunction toAgentImage(record: ImageRecord): AgentImage {\n const definition = record.definition as unknown as AgentDefinition;\n\n if (record.type === \"meta\") {\n const metaImage: MetaImage = {\n type: \"meta\",\n imageId: record.imageId,\n definitionName: record.definitionName,\n definition,\n config: record.config,\n messages: [] as const,\n createdAt: record.createdAt,\n };\n return metaImage;\n } else {\n return {\n type: \"derived\",\n imageId: record.imageId,\n parentImageId: record.parentImageId!,\n definitionName: record.definitionName,\n definition,\n config: record.config,\n messages: record.messages as unknown as AgentImage[\"messages\"],\n createdAt: record.createdAt,\n } as AgentImage;\n }\n}\n\n/**\n * ImageManager implementation using Repository and ContainerManager\n */\nexport class ImageManagerImpl implements ImageManager {\n private readonly repository: Repository;\n private readonly containerManager: ContainerManager;\n private defaultContainerId?: string;\n\n constructor(\n repository: Repository,\n containerManager: ContainerManager,\n defaultContainerId?: string\n ) {\n this.repository = repository;\n this.containerManager = containerManager;\n this.defaultContainerId = defaultContainerId;\n }\n\n async get(imageId: string): Promise<AgentImage | undefined> {\n const record = await this.repository.findImageById(imageId);\n if (!record) {\n return undefined;\n }\n return toAgentImage(record);\n }\n\n async getMetaImage(definitionName: string): Promise<MetaImage | undefined> {\n const metaImageId = generateMetaImageId(definitionName);\n const record = await this.repository.findImageById(metaImageId);\n\n if (!record || record.type !== \"meta\") {\n return undefined;\n }\n\n return toAgentImage(record) as MetaImage;\n }\n\n async list(): Promise<AgentImage[]> {\n const records = await this.repository.findAllImages();\n return records.map(toAgentImage);\n }\n\n async listByDefinition(definitionName: string): Promise<AgentImage[]> {\n const allRecords = await this.repository.findAllImages();\n const filtered = allRecords.filter((r) => r.definitionName === definitionName);\n return filtered.map(toAgentImage);\n }\n\n async exists(imageId: string): Promise<boolean> {\n return this.repository.imageExists(imageId);\n }\n\n async delete(imageId: string): Promise<boolean> {\n // Check if image exists and is not MetaImage\n const record = await this.repository.findImageById(imageId);\n if (!record) {\n return false;\n }\n\n if (record.type === \"meta\") {\n logger.warn(\"Cannot delete MetaImage directly\", { imageId });\n return false;\n }\n\n await this.repository.deleteImage(imageId);\n logger.info(\"Image deleted\", { imageId });\n return true;\n }\n\n async run(imageId: string, options?: { containerId?: string }): Promise<Agent> {\n logger.info(\"Running agent from image\", { imageId, containerId: options?.containerId });\n\n // Get image\n const image = await this.get(imageId);\n if (!image) {\n throw new Error(`Image not found: ${imageId}`);\n }\n\n // Resolve containerId (explicit > default > auto-create)\n let containerId = options?.containerId || this.defaultContainerId;\n\n if (!containerId) {\n // Auto-create default container\n const container = await this.containerManager.create();\n containerId = container.containerId;\n this.defaultContainerId = containerId;\n logger.debug(\"Auto-created default container\", { containerId });\n }\n\n // Delegate to container manager\n return this.containerManager.run(image, containerId);\n }\n}\n","/**\n * AgentManager - Running agent query and management\n *\n * Docker-style design: Agent creation happens via ContainerManager.run() or ContainerManager.resume(),\n * NOT via AgentManager. AgentManager only queries and manages running agents.\n *\n * All operations delegate to ContainerManager.\n */\n\nimport type { AgentManager as IAgentManager, Agent, ContainerManager } from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/AgentManager\");\n\n/**\n * Agent query manager implementation\n *\n * Delegates all operations to ContainerManager.\n */\nexport class AgentManager implements IAgentManager {\n constructor(private readonly containerManager: ContainerManager) {}\n\n /**\n * Get an existing agent by ID\n */\n get(agentId: string): Agent | undefined {\n return this.containerManager.getAgent(agentId);\n }\n\n /**\n * Check if an agent exists\n */\n has(agentId: string): boolean {\n return this.containerManager.hasAgent(agentId);\n }\n\n /**\n * List all agents\n */\n list(): Agent[] {\n return this.containerManager.listAgents();\n }\n\n /**\n * Destroy an agent by ID\n */\n async destroy(agentId: string): Promise<void> {\n logger.debug(\"Destroying agent\", { agentId });\n await this.containerManager.destroyAgent(agentId);\n logger.info(\"Agent destroyed\", { agentId });\n }\n\n /**\n * Destroy all agents\n */\n async destroyAll(): Promise<void> {\n const agents = this.containerManager.listAgents();\n logger.debug(\"Destroying all agents\", { count: agents.length });\n await this.containerManager.destroyAllAgents();\n logger.info(\"All agents destroyed\", { count: agents.length });\n }\n}\n","/**\n * SessionManagerImpl - Session management implementation\n *\n * Manages session lifecycle using Repository for persistence.\n *\n * Part of Docker-style layered architecture:\n * Definition → build → Image → run → Agent\n * ↓\n * Session (external wrapper)\n */\n\nimport type {\n Session,\n SessionManager,\n Repository,\n SessionRecord,\n ImageRecord,\n Agent,\n ContainerManager,\n Message,\n} from \"@agentxjs/types\";\nimport type { MessageRecord, MessageRole } from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/SessionManager\");\n\n/**\n * Generate unique session ID\n */\nfunction generateSessionId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `session_${timestamp}_${random}`;\n}\n\n/**\n * Generate unique image ID\n */\nfunction generateImageId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `image_${timestamp}_${random}`;\n}\n\n/**\n * Session implementation with resume and fork capability\n */\nclass SessionImpl implements Session {\n readonly sessionId: string;\n readonly userId: string;\n readonly imageId: string;\n readonly createdAt: number;\n\n private _title: string | null;\n private _updatedAt: number;\n private readonly repository: Repository;\n private readonly containerManager: ContainerManager;\n private readonly defaultContainerId?: string;\n\n constructor(\n record: SessionRecord,\n repository: Repository,\n containerManager: ContainerManager,\n defaultContainerId?: string\n ) {\n this.sessionId = record.sessionId;\n this.userId = record.userId;\n this.imageId = record.imageId;\n this._title = record.title;\n this.createdAt = record.createdAt.getTime();\n this._updatedAt = record.updatedAt.getTime();\n this.repository = repository;\n this.containerManager = containerManager;\n this.defaultContainerId = defaultContainerId;\n }\n\n get title(): string | null {\n return this._title;\n }\n\n get updatedAt(): number {\n return this._updatedAt;\n }\n\n async resume(options?: { containerId?: string }): Promise<Agent> {\n logger.info(\"Resuming agent from session\", {\n sessionId: this.sessionId,\n imageId: this.imageId,\n containerId: options?.containerId,\n });\n\n // Resolve containerId (explicit > default > auto-create)\n let containerId = options?.containerId || this.defaultContainerId;\n\n if (!containerId) {\n // Auto-create default container\n const container = await this.containerManager.create();\n containerId = container.containerId;\n logger.debug(\"Auto-created default container for session\", {\n containerId,\n sessionId: this.sessionId,\n });\n }\n\n // Delegate to container manager\n const agent = await this.containerManager.resume(this, containerId);\n\n // Auto-collect messages from agent\n this.collect(agent);\n\n return agent;\n }\n\n collect(agent: Agent): void {\n logger.debug(\"Collecting messages from agent\", {\n sessionId: this.sessionId,\n agentId: agent.agentId,\n });\n\n const sessionId = this.sessionId;\n const repository = this.repository;\n\n // Subscribe to all message events and persist them\n const saveMessage = (data: Message, role: MessageRole) => {\n const record: MessageRecord = {\n messageId: data.id,\n sessionId,\n role,\n content: data as unknown as Record<string, unknown>,\n createdAt: new Date(data.timestamp ?? Date.now()),\n };\n\n repository.saveMessage(record).catch((error) => {\n logger.error(\"Failed to persist message\", {\n sessionId,\n messageId: record.messageId,\n error,\n });\n });\n };\n\n agent.on(\"user_message\", (event) => saveMessage(event.data, \"user\"));\n agent.on(\"assistant_message\", (event) => saveMessage(event.data, \"assistant\"));\n agent.on(\"tool_call_message\", (event) => saveMessage(event.data, \"tool\"));\n agent.on(\"tool_result_message\", (event) => saveMessage(event.data, \"tool\"));\n }\n\n async getMessages(): Promise<Message[]> {\n logger.debug(\"Getting messages for session\", { sessionId: this.sessionId });\n\n const records = await this.repository.findMessagesBySessionId(this.sessionId);\n\n // Convert MessageRecord to Message (content stores the full message)\n return records.map((record) => record.content as unknown as Message);\n }\n\n async fork(): Promise<Session> {\n logger.info(\"Forking session\", { sessionId: this.sessionId });\n\n // Get current image\n const imageRecord = await this.repository.findImageById(this.imageId);\n if (!imageRecord) {\n throw new Error(`Image not found: ${this.imageId}`);\n }\n\n // Create new image with copied data (DerivedImage from fork)\n const newImageId = generateImageId();\n const newImageRecord: ImageRecord = {\n imageId: newImageId,\n type: \"derived\",\n definitionName: imageRecord.definitionName,\n parentImageId: imageRecord.imageId,\n definition: imageRecord.definition,\n config: imageRecord.config,\n messages: [...imageRecord.messages], // Copy messages\n createdAt: new Date(),\n };\n await this.repository.saveImage(newImageRecord);\n\n // Create new session pointing to new image\n const newSessionId = generateSessionId();\n const now = new Date();\n const newSessionRecord: SessionRecord = {\n sessionId: newSessionId,\n userId: this.userId,\n imageId: newImageId,\n title: this._title ? `Fork of ${this._title}` : null,\n createdAt: now,\n updatedAt: now,\n };\n await this.repository.saveSession(newSessionRecord);\n\n logger.info(\"Session forked\", {\n originalSessionId: this.sessionId,\n newSessionId,\n newImageId,\n });\n\n return new SessionImpl(\n newSessionRecord,\n this.repository,\n this.containerManager,\n this.defaultContainerId\n );\n }\n\n async setTitle(title: string): Promise<void> {\n logger.debug(\"Setting session title\", { sessionId: this.sessionId, title });\n\n const now = new Date();\n await this.repository.saveSession({\n sessionId: this.sessionId,\n userId: this.userId,\n imageId: this.imageId,\n title,\n createdAt: new Date(this.createdAt),\n updatedAt: now,\n });\n\n this._title = title;\n this._updatedAt = now.getTime();\n\n logger.info(\"Session title updated\", { sessionId: this.sessionId, title });\n }\n}\n\n/**\n * SessionManager implementation\n */\nexport class SessionManagerImpl implements SessionManager {\n private readonly repository: Repository;\n private readonly containerManager: ContainerManager;\n private readonly defaultContainerId?: string;\n\n constructor(\n repository: Repository,\n containerManager: ContainerManager,\n defaultContainerId?: string\n ) {\n this.repository = repository;\n this.containerManager = containerManager;\n this.defaultContainerId = defaultContainerId;\n }\n\n async create(imageId: string, userId: string): Promise<Session> {\n const sessionId = generateSessionId();\n const now = new Date();\n\n const record: SessionRecord = {\n sessionId,\n userId,\n imageId,\n title: null,\n createdAt: now,\n updatedAt: now,\n };\n\n await this.repository.saveSession(record);\n\n logger.info(\"Session created\", { sessionId, imageId, userId });\n\n return new SessionImpl(record, this.repository, this.containerManager, this.defaultContainerId);\n }\n\n async get(sessionId: string): Promise<Session | undefined> {\n const record = await this.repository.findSessionById(sessionId);\n if (!record) return undefined;\n\n return new SessionImpl(record, this.repository, this.containerManager, this.defaultContainerId);\n }\n\n async has(sessionId: string): Promise<boolean> {\n return this.repository.sessionExists(sessionId);\n }\n\n async list(): Promise<Session[]> {\n const records = await this.repository.findAllSessions();\n return records.map(\n (r) => new SessionImpl(r, this.repository, this.containerManager, this.defaultContainerId)\n );\n }\n\n async listByImage(imageId: string): Promise<Session[]> {\n const records = await this.repository.findSessionsByImageId(imageId);\n return records.map(\n (r) => new SessionImpl(r, this.repository, this.containerManager, this.defaultContainerId)\n );\n }\n\n async listByUser(userId: string): Promise<Session[]> {\n const records = await this.repository.findSessionsByUserId(userId);\n return records.map(\n (r) => new SessionImpl(r, this.repository, this.containerManager, this.defaultContainerId)\n );\n }\n\n async destroy(sessionId: string): Promise<void> {\n await this.repository.deleteSession(sessionId);\n logger.info(\"Session destroyed\", { sessionId });\n }\n\n async destroyByImage(imageId: string): Promise<void> {\n await this.repository.deleteSessionsByImageId(imageId);\n logger.info(\"Sessions destroyed by image\", { imageId });\n }\n\n async destroyAll(): Promise<void> {\n const sessions = await this.repository.findAllSessions();\n for (const session of sessions) {\n await this.repository.deleteSession(session.sessionId);\n }\n logger.info(\"All sessions destroyed\");\n }\n}\n","/**\n * ErrorManager - Platform-level error management\n *\n * Collects and handles all agent errors at the platform level.\n * Ensures no error is lost, even if user doesn't register handlers.\n *\n * Design:\n * - Default behavior: Always logs errors (no silent failures)\n * - Extensible: User can add custom handlers (Sentry, alerting, etc.)\n * - Unified: All agent errors flow through here\n *\n * Note: Only available in Local mode. Remote clients handle\n * errors themselves due to environment-specific differences.\n */\n\nimport type {\n ErrorManager as IErrorManager,\n ErrorHandler,\n AgentError,\n ErrorEvent,\n Unsubscribe,\n} from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/ErrorManager\");\n\n/**\n * Platform-level error manager implementation\n */\nexport class ErrorManager implements IErrorManager {\n private readonly handlers: Set<ErrorHandler> = new Set();\n\n /**\n * Handle an error from any agent\n *\n * Called internally when an agent emits an error event.\n * 1. Default logging (always)\n * 2. Custom handlers (user-registered)\n */\n handle(agentId: string, error: AgentError, event: ErrorEvent): void {\n // 1. Default logging (always happens)\n this.logError(agentId, error);\n\n // 2. Custom handlers\n for (const handler of this.handlers) {\n try {\n handler.handle(agentId, error, event);\n } catch (e) {\n // Handler error should not break the chain\n logger.error(\"ErrorHandler failed\", { error: e });\n }\n }\n }\n\n /**\n * Add a custom error handler\n */\n addHandler(handler: ErrorHandler): Unsubscribe {\n this.handlers.add(handler);\n return () => {\n this.handlers.delete(handler);\n };\n }\n\n /**\n * Remove an error handler\n */\n removeHandler(handler: ErrorHandler): void {\n this.handlers.delete(handler);\n }\n\n /**\n * Default error logging\n */\n private logError(agentId: string, error: AgentError): void {\n const prefix = `[${agentId}] ${error.category}/${error.code}`;\n\n if (error.severity === \"fatal\") {\n logger.error(`${prefix}: ${error.message}`, { error });\n } else if (error.severity === \"error\") {\n logger.error(`${prefix}: ${error.message}`);\n } else {\n logger.warn(`${prefix}: ${error.message}`);\n }\n }\n}\n","/**\n * HttpClient - ky-based HTTP client for Remote managers\n */\n\nimport ky, { type KyInstance } from \"ky\";\n\n/**\n * HTTP client options\n */\nexport interface HttpClientOptions {\n baseUrl: string;\n headers?: Record<string, string>;\n timeout?: number;\n}\n\n/**\n * API error from server\n */\nexport class ApiError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly details?: unknown\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\n/**\n * Create HTTP client instance\n */\nexport function createHttpClient(options: HttpClientOptions): KyInstance {\n return ky.create({\n prefixUrl: options.baseUrl.replace(/\\/+$/, \"\"),\n headers: options.headers,\n timeout: options.timeout || 30000,\n hooks: {\n afterResponse: [\n async (_request, _options, response) => {\n if (!response.ok) {\n const data = (await response.json().catch(() => ({}))) as {\n error?: { code?: string; message?: string; details?: unknown };\n };\n throw new ApiError(\n data.error?.code || \"UNKNOWN_ERROR\",\n data.error?.message || `Request failed: ${response.status}`,\n data.error?.details\n );\n }\n return response;\n },\n ],\n },\n });\n}\n\nexport type { KyInstance };\n","/**\n * AgentStateMachine\n *\n * Manages agent state transitions driven by StateEvents.\n * Single source of truth for agent state in Core layer.\n *\n * Flow:\n * StreamEvent → Engine (stateMachineProcessor) → StateEvent → AgentStateMachine\n *\n * Responsibilities:\n * - Listen to StateEvents\n * - Maintain current state\n * - Notify state change subscribers\n */\n\nimport type { AgentState, StateEventType, Unsubscribe } from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"core/AgentStateMachine\");\n\n/**\n * State change event payload\n */\nexport interface StateChange {\n prev: AgentState;\n current: AgentState;\n}\n\n/**\n * State change handler type\n */\nexport type StateChangeHandler = (change: StateChange) => void;\n\n/**\n * AgentStateMachine - State management driven by StateEvents\n */\nexport class AgentStateMachine {\n private _state: AgentState = \"idle\";\n private readonly handlers = new Set<StateChangeHandler>();\n\n /**\n * Current agent state\n */\n get state(): AgentState {\n return this._state;\n }\n\n /**\n * Process a StateEvent and update internal state\n *\n * @param event - StateEvent from Engine layer\n */\n process(event: StateEventType): void {\n const prev = this._state;\n const next = this.mapEventToState(event);\n\n if (next !== null && prev !== next) {\n this._state = next;\n logger.debug(\"State transition\", {\n eventType: event.type,\n from: prev,\n to: next,\n });\n this.notifyHandlers({ prev, current: next });\n }\n }\n\n /**\n * Subscribe to state changes\n *\n * @param handler - Callback receiving { prev, current } state change\n * @returns Unsubscribe function\n */\n onStateChange(handler: StateChangeHandler): Unsubscribe {\n this.handlers.add(handler);\n return () => {\n this.handlers.delete(handler);\n };\n }\n\n /**\n * Reset state machine (used on destroy)\n */\n reset(): void {\n const prev = this._state;\n this._state = \"idle\";\n this.handlers.clear();\n\n // Don't notify on reset - agent is being destroyed\n if (prev !== \"idle\") {\n // Optionally could notify with a special \"destroyed\" transition\n }\n }\n\n /**\n * Map StateEvent type to AgentState\n *\n * @param event - StateEvent from Engine\n * @returns New AgentState or null if no transition needed\n */\n private mapEventToState(event: StateEventType): AgentState | null {\n switch (event.type) {\n // Agent lifecycle\n case \"agent_initializing\":\n return \"initializing\";\n case \"agent_ready\":\n return \"idle\";\n case \"agent_destroyed\":\n return \"idle\";\n\n // Conversation lifecycle\n case \"conversation_queued\":\n return \"queued\";\n case \"conversation_start\":\n return \"conversation_active\";\n case \"conversation_thinking\":\n return \"thinking\";\n case \"conversation_responding\":\n return \"responding\";\n case \"conversation_end\":\n return \"idle\";\n case \"conversation_interrupted\":\n return \"idle\"; // Return to idle on interrupt\n\n // Tool lifecycle\n case \"tool_planned\":\n return \"planning_tool\";\n case \"tool_executing\":\n return \"awaiting_tool_result\";\n case \"tool_completed\":\n return \"responding\"; // Back to responding after tool completes\n case \"tool_failed\":\n return \"responding\"; // Continue responding after tool failure\n\n // Error\n case \"error_occurred\":\n return \"idle\"; // Reset to idle on error\n\n default:\n // Unknown event type, no state change\n return null;\n }\n }\n\n /**\n * Notify all registered handlers of state change\n */\n private notifyHandlers(change: StateChange): void {\n for (const handler of this.handlers) {\n try {\n handler(change);\n } catch (error) {\n logger.error(\"State change handler error\", {\n from: change.prev,\n to: change.current,\n error,\n });\n }\n }\n }\n}\n","/**\n * AgentEventBus - RxJS-based implementation\n *\n * Implements the AgentEventBus interface from @agentxjs/types.\n *\n * Features:\n * - Type-safe event subscription\n * - Custom filters\n * - Priority-based execution order\n * - One-time subscriptions\n * - Producer/Consumer role separation\n */\n\nimport { Subject } from \"rxjs\";\nimport { filter as rxFilter, take } from \"rxjs/operators\";\nimport type {\n AgentEventBus as IAgentEventBus,\n EventProducer,\n EventConsumer,\n EventHandler,\n SubscribeOptions,\n Unsubscribe,\n AgentOutput,\n} from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"core/AgentEventBus\");\n\n/**\n * Internal subscription record (supports priority sorting)\n */\ninterface SubscriptionRecord {\n id: number;\n priority: number;\n handler: EventHandler;\n unsubscribe: Unsubscribe;\n}\n\n/**\n * AgentEventBus - Local in-process implementation\n *\n * Uses RxJS Subject internally for powerful event processing.\n * Provides clean separation between Producer and Consumer roles.\n *\n * @example\n * ```typescript\n * const eventBus = new AgentEventBus();\n *\n * // Subscribe to events\n * eventBus.on('text_delta', (e) => console.log(e.data.text));\n *\n * // With filter and priority\n * eventBus.on('tool_call', handler, {\n * filter: (e) => e.data.name === 'Bash',\n * priority: 10\n * });\n *\n * // Emit events\n * eventBus.emit({ type: 'text_delta', ... });\n *\n * // Get restricted views\n * const producer = eventBus.asProducer(); // can only emit\n * const consumer = eventBus.asConsumer(); // can only subscribe\n * ```\n */\nexport class AgentEventBus implements IAgentEventBus {\n private readonly subject = new Subject<AgentOutput>();\n private readonly typeSubscriptions = new Map<string, SubscriptionRecord[]>();\n private readonly globalSubscriptions: SubscriptionRecord[] = [];\n private nextId = 0;\n private isDestroyed = false;\n\n // Cached views\n private producerView: EventProducer | null = null;\n private consumerView: EventConsumer | null = null;\n\n // ===== Producer Methods =====\n\n emit(event: AgentOutput): void {\n if (this.isDestroyed) {\n logger.warn(\"Emit called on destroyed EventBus\", { eventType: event.type });\n return;\n }\n\n this.subject.next(event);\n }\n\n emitBatch(events: AgentOutput[]): void {\n for (const event of events) {\n this.emit(event);\n }\n }\n\n // ===== Consumer Methods =====\n\n on<K extends AgentOutput[\"type\"]>(\n type: K,\n handler: EventHandler<Extract<AgentOutput, { type: K }>>,\n options?: SubscribeOptions\n ): Unsubscribe;\n on(type: string, handler: EventHandler, options?: SubscribeOptions): Unsubscribe;\n on(types: string[], handler: EventHandler, options?: SubscribeOptions): Unsubscribe;\n on(\n typeOrTypes: string | string[],\n handler: EventHandler,\n options: SubscribeOptions = {}\n ): Unsubscribe {\n if (this.isDestroyed) {\n logger.warn(\"Subscribe called on destroyed EventBus\");\n return () => {};\n }\n\n const types = Array.isArray(typeOrTypes) ? typeOrTypes : [typeOrTypes];\n const unsubscribes: Unsubscribe[] = [];\n\n for (const type of types) {\n const unsub = this.subscribeToType(type, handler, options);\n unsubscribes.push(unsub);\n }\n\n return () => unsubscribes.forEach((u) => u());\n }\n\n onAny(handler: EventHandler, options: SubscribeOptions = {}): Unsubscribe {\n if (this.isDestroyed) {\n logger.warn(\"Subscribe called on destroyed EventBus\");\n return () => {};\n }\n\n return this.subscribeGlobal(handler, options);\n }\n\n once<K extends AgentOutput[\"type\"]>(\n type: K,\n handler: EventHandler<Extract<AgentOutput, { type: K }>>\n ): Unsubscribe {\n return this.on(type, handler, { once: true });\n }\n\n // ===== View Methods =====\n\n asConsumer(): EventConsumer {\n if (!this.consumerView) {\n this.consumerView = {\n on: this.on.bind(this),\n onAny: this.onAny.bind(this),\n once: this.once.bind(this),\n };\n }\n return this.consumerView;\n }\n\n asProducer(): EventProducer {\n if (!this.producerView) {\n this.producerView = {\n emit: this.emit.bind(this),\n emitBatch: this.emitBatch.bind(this),\n };\n }\n return this.producerView;\n }\n\n // ===== Lifecycle =====\n\n destroy(): void {\n if (this.isDestroyed) return;\n\n this.isDestroyed = true;\n\n // Clean up all type subscriptions\n for (const records of this.typeSubscriptions.values()) {\n for (const record of records) {\n record.unsubscribe();\n }\n }\n this.typeSubscriptions.clear();\n\n // Clean up global subscriptions\n for (const record of this.globalSubscriptions) {\n record.unsubscribe();\n }\n this.globalSubscriptions.length = 0;\n\n // Complete the subject\n this.subject.complete();\n\n logger.debug(\"EventBus destroyed\");\n }\n\n // ===== Private Methods =====\n\n private subscribeToType(\n type: string,\n handler: EventHandler,\n options: SubscribeOptions\n ): Unsubscribe {\n const { filter, priority = 0, once = false } = options;\n const id = this.nextId++;\n\n // Build RxJS pipeline\n let observable = this.subject.pipe(rxFilter((e: AgentOutput) => e.type === type));\n\n if (filter) {\n observable = observable.pipe(rxFilter(filter));\n }\n\n if (once) {\n observable = observable.pipe(take(1));\n }\n\n // Create subscription with priority-aware handler\n const subscription = observable.subscribe({\n next: (event: AgentOutput) => {\n this.executeWithPriority(type, event, handler, id);\n },\n });\n\n const unsubscribe = () => {\n subscription.unsubscribe();\n const records = this.typeSubscriptions.get(type);\n if (records) {\n const idx = records.findIndex((r) => r.id === id);\n if (idx !== -1) records.splice(idx, 1);\n }\n };\n\n // Store subscription record\n if (!this.typeSubscriptions.has(type)) {\n this.typeSubscriptions.set(type, []);\n }\n\n const record: SubscriptionRecord = { id, priority, handler, unsubscribe };\n const records = this.typeSubscriptions.get(type)!;\n records.push(record);\n\n // Sort by priority (higher first)\n records.sort((a, b) => b.priority - a.priority);\n\n return unsubscribe;\n }\n\n private subscribeGlobal(handler: EventHandler, options: SubscribeOptions): Unsubscribe {\n const { filter, priority = 0, once = false } = options;\n const id = this.nextId++;\n\n let observable = this.subject.asObservable();\n\n if (filter) {\n observable = observable.pipe(rxFilter(filter));\n }\n\n if (once) {\n observable = observable.pipe(take(1));\n }\n\n const subscription = observable.subscribe({\n next: (event: AgentOutput) => {\n this.executeGlobalWithPriority(event, handler, id);\n },\n });\n\n const unsubscribe = () => {\n subscription.unsubscribe();\n const idx = this.globalSubscriptions.findIndex((r) => r.id === id);\n if (idx !== -1) this.globalSubscriptions.splice(idx, 1);\n };\n\n const record: SubscriptionRecord = { id, priority, handler, unsubscribe };\n this.globalSubscriptions.push(record);\n this.globalSubscriptions.sort((a, b) => b.priority - a.priority);\n\n return unsubscribe;\n }\n\n /**\n * Execute handler respecting priority order for typed subscriptions\n */\n private executeWithPriority(\n type: string,\n event: AgentOutput,\n handler: EventHandler,\n handlerId: number\n ): void {\n const records = this.typeSubscriptions.get(type) || [];\n const record = records.find((r) => r.id === handlerId);\n\n if (record) {\n try {\n handler(event);\n } catch (error) {\n logger.error(\"Event handler error\", { eventType: type, error });\n }\n }\n }\n\n /**\n * Execute handler respecting priority order for global subscriptions\n */\n private executeGlobalWithPriority(\n event: AgentOutput,\n handler: EventHandler,\n handlerId: number\n ): void {\n const record = this.globalSubscriptions.find((r) => r.id === handlerId);\n\n if (record) {\n try {\n handler(event);\n } catch (error) {\n logger.error(\"Global event handler error\", { eventType: event.type, error });\n }\n }\n }\n}\n","/**\n * AgentErrorClassifier\n *\n * Handles error classification and AgentError/ErrorEvent creation.\n * Classifies unknown errors into structured AgentError categories.\n */\n\nimport type { AgentError, ErrorEvent } from \"@agentxjs/types\";\n\n/**\n * AgentErrorClassifier - Error classification and event creation\n */\nexport class AgentErrorClassifier {\n constructor(private readonly agentId: string) {}\n\n /**\n * Classify an unknown error into an AgentError\n */\n classify(error: unknown): AgentError {\n const err = error instanceof Error ? error : new Error(String(error));\n const message = err.message;\n\n // LLM errors\n if (message.includes(\"rate limit\") || message.includes(\"429\")) {\n return this.create(\"llm\", \"RATE_LIMITED\", message, true, err);\n }\n if (\n message.includes(\"api key\") ||\n message.includes(\"401\") ||\n message.includes(\"unauthorized\")\n ) {\n return this.create(\"llm\", \"INVALID_API_KEY\", message, false, err);\n }\n if (message.includes(\"context\") && message.includes(\"long\")) {\n return this.create(\"llm\", \"CONTEXT_TOO_LONG\", message, true, err);\n }\n if (message.includes(\"overloaded\") || message.includes(\"503\")) {\n return this.create(\"llm\", \"OVERLOADED\", message, true, err);\n }\n\n // Network errors\n if (message.includes(\"timeout\") || message.includes(\"ETIMEDOUT\")) {\n return this.create(\"network\", \"TIMEOUT\", message, true, err);\n }\n if (message.includes(\"ECONNREFUSED\") || message.includes(\"connection\")) {\n return this.create(\"network\", \"CONNECTION_FAILED\", message, true, err);\n }\n if (message.includes(\"network\") || message.includes(\"fetch\")) {\n return this.create(\"network\", \"CONNECTION_FAILED\", message, true, err);\n }\n\n // Driver errors\n if (message.includes(\"driver\")) {\n return this.create(\"driver\", \"RECEIVE_FAILED\", message, true, err);\n }\n\n // Default to system error\n return this.create(\"system\", \"UNKNOWN\", message, true, err);\n }\n\n /**\n * Create an AgentError with the specified category and code\n */\n create(\n category: AgentError[\"category\"],\n code: string,\n message: string,\n recoverable: boolean,\n cause?: Error\n ): AgentError {\n return {\n category,\n code,\n message,\n severity: recoverable ? \"error\" : \"fatal\",\n recoverable,\n cause,\n } as AgentError;\n }\n\n /**\n * Create an ErrorEvent from an AgentError\n *\n * ErrorEvent is independent from Message layer and transportable via SSE.\n */\n createEvent(error: AgentError): ErrorEvent {\n return {\n type: \"error\",\n uuid: `${Date.now()}_${Math.random().toString(36).substring(2, 9)}`,\n agentId: this.agentId,\n timestamp: Date.now(),\n data: {\n error,\n },\n };\n }\n}\n","/**\n * MiddlewareChain\n *\n * Manages middleware chain for message interception.\n * Middlewares can modify, validate, or short-circuit message processing.\n */\n\nimport type { AgentMiddleware, Unsubscribe, UserMessage } from \"@agentxjs/types\";\n\n/**\n * MiddlewareChain - Middleware management and execution\n */\nexport class MiddlewareChain {\n private readonly middlewares: AgentMiddleware[] = [];\n\n /**\n * Add middleware to the chain\n *\n * @param middleware - Middleware function\n * @returns Unsubscribe function to remove the middleware\n */\n use(middleware: AgentMiddleware): Unsubscribe {\n this.middlewares.push(middleware);\n\n return () => {\n const index = this.middlewares.indexOf(middleware);\n if (index !== -1) {\n this.middlewares.splice(index, 1);\n }\n };\n }\n\n /**\n * Execute the middleware chain\n *\n * @param message - User message to process\n * @param finalHandler - Handler called at the end of the chain\n */\n async execute(\n message: UserMessage,\n finalHandler: (msg: UserMessage) => Promise<void>\n ): Promise<void> {\n let index = 0;\n\n const next = async (msg: UserMessage): Promise<void> => {\n if (index < this.middlewares.length) {\n const middleware = this.middlewares[index++];\n await middleware(msg, next);\n } else {\n // End of chain - call final handler\n await finalHandler(msg);\n }\n };\n\n await next(message);\n }\n\n /**\n * Clear all middlewares\n */\n clear(): void {\n this.middlewares.length = 0;\n }\n\n /**\n * Get the number of middlewares\n */\n get size(): number {\n return this.middlewares.length;\n }\n}\n","/**\n * InterceptorChain\n *\n * Manages interceptor chain for event dispatch interception.\n * Interceptors can modify, filter, or log events before they reach subscribers.\n */\n\nimport type { AgentInterceptor, AgentOutput, Unsubscribe } from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"core/InterceptorChain\");\n\n/**\n * InterceptorChain - Interceptor management and execution\n */\nexport class InterceptorChain {\n private readonly interceptors: AgentInterceptor[] = [];\n private readonly agentId: string;\n\n constructor(agentId: string) {\n this.agentId = agentId;\n }\n\n /**\n * Add interceptor to the chain\n *\n * @param interceptor - Interceptor function\n * @returns Unsubscribe function to remove the interceptor\n */\n intercept(interceptor: AgentInterceptor): Unsubscribe {\n this.interceptors.push(interceptor);\n\n return () => {\n const index = this.interceptors.indexOf(interceptor);\n if (index !== -1) {\n this.interceptors.splice(index, 1);\n }\n };\n }\n\n /**\n * Execute the interceptor chain\n *\n * @param event - Event to process\n * @param finalHandler - Handler called at the end of the chain\n */\n execute(event: AgentOutput, finalHandler: (e: AgentOutput) => void): void {\n let index = 0;\n\n const next = (e: AgentOutput): void => {\n if (index < this.interceptors.length) {\n const interceptor = this.interceptors[index++];\n try {\n interceptor(e, next);\n } catch (error) {\n logger.error(\"Interceptor error\", {\n agentId: this.agentId,\n eventType: e.type,\n interceptorIndex: index - 1,\n error,\n });\n // Continue to next interceptor even if one fails\n next(e);\n }\n } else {\n // End of chain - call final handler\n finalHandler(e);\n }\n };\n\n next(event);\n }\n\n /**\n * Clear all interceptors\n */\n clear(): void {\n this.interceptors.length = 0;\n }\n\n /**\n * Get the number of interceptors\n */\n get size(): number {\n return this.interceptors.length;\n }\n}\n","/**\n * ReactHandlerMapper\n *\n * Maps React-style handler names (onXxx) to event type keys.\n * Provides a fluent API for event subscription.\n */\n\nimport type { ReactHandlerMap, EventHandlerMap } from \"@agentxjs/types\";\n\n/**\n * Mapping from ReactHandlerMap keys to EventHandlerMap keys\n */\nconst REACT_TO_EVENT_MAP: Record<keyof ReactHandlerMap, keyof EventHandlerMap> = {\n // Stream Layer Events\n onMessageStart: \"message_start\",\n onMessageDelta: \"message_delta\",\n onMessageStop: \"message_stop\",\n onTextContentBlockStart: \"text_content_block_start\",\n onTextDelta: \"text_delta\",\n onTextContentBlockStop: \"text_content_block_stop\",\n onToolUseContentBlockStart: \"tool_use_content_block_start\",\n onInputJsonDelta: \"input_json_delta\",\n onToolUseContentBlockStop: \"tool_use_content_block_stop\",\n onToolCall: \"tool_call\",\n onToolResult: \"tool_result\",\n // Message Layer Events\n onUserMessage: \"user_message\",\n onAssistantMessage: \"assistant_message\",\n onToolCallMessage: \"tool_call_message\",\n onToolResultMessage: \"tool_result_message\",\n // Error Layer Events (independent, transportable via SSE)\n onError: \"error\",\n // Turn Layer Events\n onTurnRequest: \"turn_request\",\n onTurnResponse: \"turn_response\",\n};\n\n/**\n * Convert ReactHandlerMap to EventHandlerMap\n *\n * @param reactHandlers - React-style handlers (onXxx)\n * @returns Event handler map (event_type keys)\n *\n * @example\n * ```typescript\n * const eventMap = mapReactHandlers({\n * onTextDelta: (e) => console.log(e.data.text),\n * onError: (e) => console.error(e.data.error),\n * });\n * // Returns: { text_delta: fn, error_message: fn }\n * ```\n */\nexport function mapReactHandlers(reactHandlers: ReactHandlerMap): EventHandlerMap {\n const eventHandlerMap: EventHandlerMap = {};\n\n for (const [reactKey, eventKey] of Object.entries(REACT_TO_EVENT_MAP)) {\n const handler = reactHandlers[reactKey as keyof ReactHandlerMap];\n if (handler) {\n (eventHandlerMap as Record<string, unknown>)[eventKey] = handler;\n }\n }\n\n return eventHandlerMap;\n}\n\n/**\n * Get all supported React handler names\n */\nexport function getReactHandlerNames(): (keyof ReactHandlerMap)[] {\n return Object.keys(REACT_TO_EVENT_MAP) as (keyof ReactHandlerMap)[];\n}\n\n/**\n * Get the event type for a React handler name\n */\nexport function getEventTypeForReactHandler(\n reactKey: keyof ReactHandlerMap\n): keyof EventHandlerMap {\n return REACT_TO_EVENT_MAP[reactKey];\n}\n","/**\n * AgentInstance - Runtime instance implementation\n *\n * Implements the Agent interface from @agentxjs/types.\n * Created from AgentDefinition + AgentContext.\n *\n * Coordinates the flow:\n * 1. Driver receives message → produces StreamEvents\n * 2. Engine processes events → produces outputs\n * 3. Presenters handle outputs (external systems)\n * 4. Handlers receive outputs (user subscriptions)\n *\n * Lifecycle:\n * - running: Active, can receive messages\n * - destroyed: Removed from memory, cannot be used\n */\n\nimport type {\n Agent,\n AgentDefinition,\n AgentContext,\n AgentLifecycle,\n AgentEventHandler,\n Unsubscribe,\n AgentOutput,\n StateChangeHandler,\n EventHandlerMap,\n ReactHandlerMap,\n AgentMiddleware,\n AgentInterceptor,\n EventConsumer,\n AgentDriver,\n Sandbox,\n // Stream Layer Events\n MessageStartEvent,\n MessageDeltaEvent,\n MessageStopEvent,\n TextContentBlockStartEvent,\n TextDeltaEvent,\n TextContentBlockStopEvent,\n ToolUseContentBlockStartEvent,\n InputJsonDeltaEvent,\n ToolUseContentBlockStopEvent,\n ToolCallEvent,\n ToolResultEvent,\n // Message Layer Events\n UserMessageEvent,\n AssistantMessageEvent,\n ToolCallMessageEvent,\n ToolResultMessageEvent,\n // Turn Layer Events\n TurnRequestEvent,\n TurnResponseEvent,\n // Error Layer Events\n ErrorEvent,\n // State Layer Events\n ConversationQueuedStateEvent,\n} from \"@agentxjs/types\";\nimport type { UserMessage, AgentState } from \"@agentxjs/types\";\nimport { isStateEvent } from \"@agentxjs/types\";\nimport type { AgentEngine } from \"@agentxjs/engine\";\nimport { createLogger } from \"@agentxjs/common\";\nimport { AgentStateMachine } from \"./AgentStateMachine\";\nimport { AgentEventBus } from \"./AgentEventBus\";\nimport { AgentErrorClassifier } from \"./AgentErrorClassifier\";\nimport { MiddlewareChain } from \"./MiddlewareChain\";\nimport { InterceptorChain } from \"./InterceptorChain\";\nimport { mapReactHandlers } from \"./ReactHandlerMapper\";\n\nconst logger = createLogger(\"core/AgentInstance\");\n\n/**\n * AgentInstance - Implementation of Agent interface\n */\nexport class AgentInstance implements Agent {\n readonly agentId: string;\n readonly definition: AgentDefinition;\n readonly context: AgentContext;\n readonly createdAt: number;\n readonly sandbox: Sandbox;\n\n private _lifecycle: AgentLifecycle = \"running\";\n private readonly engine: AgentEngine;\n\n /**\n * Driver instance - created from definition.driver class\n */\n private readonly driver: AgentDriver;\n\n /**\n * State machine - manages state transitions driven by StateEvents\n */\n private readonly stateMachine = new AgentStateMachine();\n\n /**\n * Event bus - centralized event pub/sub\n */\n private readonly eventBus = new AgentEventBus();\n\n /**\n * Error classifier - classifies and creates error events\n */\n private readonly errorClassifier: AgentErrorClassifier;\n\n /**\n * Middleware chain for receive() interception\n */\n private readonly middlewareChain = new MiddlewareChain();\n\n /**\n * Interceptor chain for event dispatch interception\n */\n private readonly interceptorChain: InterceptorChain;\n\n /**\n * Lifecycle handlers for onReady\n */\n private readonly readyHandlers: Set<() => void> = new Set();\n\n /**\n * Lifecycle handlers for onDestroy\n */\n private readonly destroyHandlers: Set<() => void> = new Set();\n\n constructor(\n definition: AgentDefinition,\n context: AgentContext,\n engine: AgentEngine,\n driver: AgentDriver,\n sandbox: Sandbox\n ) {\n this.agentId = context.agentId;\n this.definition = definition;\n this.context = context;\n this.engine = engine;\n this.createdAt = context.createdAt;\n this.sandbox = sandbox;\n\n // Driver is provided by Runtime (not created from definition)\n this.driver = driver;\n\n // Initialize components that need agentId\n this.errorClassifier = new AgentErrorClassifier(this.agentId);\n this.interceptorChain = new InterceptorChain(this.agentId);\n\n logger.debug(\"AgentInstance created\", {\n agentId: this.agentId,\n definitionName: definition.name,\n driverName: this.driver.name,\n });\n }\n\n /**\n * Current lifecycle state\n */\n get lifecycle(): AgentLifecycle {\n return this._lifecycle;\n }\n\n /**\n * Current conversation state (delegated to StateMachine)\n */\n get state(): AgentState {\n return this.stateMachine.state;\n }\n\n /**\n * Receive a message from user\n *\n * Runs through middleware chain before actual processing.\n *\n * Error Handling:\n * - Errors are caught and converted to ErrorMessageEvent\n * - Handlers receive the error event before re-throwing\n * - This ensures UI can display errors\n */\n async receive(message: string | UserMessage): Promise<void> {\n if (this._lifecycle === \"destroyed\") {\n logger.warn(\"Receive called on destroyed agent\", { agentId: this.agentId });\n const error = this.errorClassifier.create(\n \"system\",\n \"AGENT_DESTROYED\",\n \"Agent has been destroyed\",\n false\n );\n const errorEvent = this.errorClassifier.createEvent(error);\n this.notifyHandlers(errorEvent);\n throw new Error(\"[Agent] Agent has been destroyed\");\n }\n\n // Prevent concurrent receive() calls - state machine prevents concurrent operations\n if (this.state !== \"idle\") {\n logger.warn(\"Receive called while agent is busy\", {\n agentId: this.agentId,\n currentState: this.state,\n });\n const error = this.errorClassifier.create(\n \"system\",\n \"AGENT_BUSY\",\n `Agent is busy (state: ${this.state}), please wait for current operation to complete`,\n false\n );\n const errorEvent = this.errorClassifier.createEvent(error);\n this.notifyHandlers(errorEvent);\n throw new Error(`[Agent] Agent is busy (state: ${this.state})`);\n }\n\n const userMessage: UserMessage =\n typeof message === \"string\"\n ? {\n id: `msg_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`,\n role: \"user\",\n subtype: \"user\",\n content: message,\n timestamp: Date.now(),\n }\n : message;\n\n logger.debug(\"Receiving message\", {\n agentId: this.agentId,\n messageId: userMessage.id,\n });\n\n // Emit user_message event for presenters and handlers\n const userMessageEvent: UserMessageEvent = {\n uuid: `evt_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`,\n type: \"user_message\",\n agentId: this.agentId,\n timestamp: Date.now(),\n data: userMessage,\n };\n this.presentOutput(userMessageEvent);\n this.notifyHandlers(userMessageEvent);\n\n // Run through middleware chain\n await this.executeMiddlewareChain(userMessage);\n }\n\n /**\n * Execute middleware chain and then process the message\n */\n private async executeMiddlewareChain(message: UserMessage): Promise<void> {\n await this.middlewareChain.execute(message, (msg) => this.doReceive(msg));\n }\n\n /**\n * Process a single stream event through the engine\n *\n * Used by:\n * - doReceive() - normal message flow\n * - AgentInterrupter - interrupt event injection\n *\n * @param streamEvent - Stream event to process\n */\n private processStreamEvent(streamEvent: any): void {\n // 1. Process through engine\n const outputs = this.engine.process(this.agentId, streamEvent);\n\n // 2. Send outputs to presenters\n for (const output of outputs) {\n this.presentOutput(output);\n }\n\n // 3. Notify handlers (StateEvents will update StateMachine)\n for (const output of outputs) {\n this.notifyHandlers(output);\n }\n }\n\n /**\n * Actual message processing logic\n *\n * Coordinates the flow:\n * 1. Driver receives message → produces StreamEvents\n * 2. Engine processes events → produces outputs\n * 3. Presenters handle outputs\n * 4. Handlers receive outputs\n */\n private async doReceive(userMessage: UserMessage): Promise<void> {\n try {\n logger.debug(\"Processing message through driver\", {\n agentId: this.agentId,\n messageId: userMessage.id,\n });\n\n // 0. Emit queued state event - message received, processing about to start\n const queuedEvent: ConversationQueuedStateEvent = {\n type: \"conversation_queued\",\n uuid: `${Date.now()}_${Math.random().toString(36).substring(2, 9)}`,\n agentId: this.agentId,\n timestamp: Date.now(),\n data: {\n userMessage,\n },\n };\n this.notifyHandlers(queuedEvent);\n\n // 1. Get stream events from driver\n const streamEvents = this.driver.receive(userMessage);\n\n // 2. Process each stream event through engine\n for await (const streamEvent of streamEvents) {\n this.processStreamEvent(streamEvent);\n }\n\n logger.debug(\"Message processing completed\", {\n agentId: this.agentId,\n messageId: userMessage.id,\n });\n } catch (error) {\n // Convert error to AgentError and emit as ErrorMessageEvent\n const agentError = this.errorClassifier.classify(error);\n const errorEvent = this.errorClassifier.createEvent(agentError);\n\n logger.error(\"Message processing failed\", {\n agentId: this.agentId,\n messageId: userMessage.id,\n errorCategory: agentError.category,\n errorCode: agentError.code,\n error,\n });\n\n // Notify handlers so UI can display the error\n this.notifyHandlers(errorEvent);\n\n // Re-throw so caller is aware of the failure\n throw error;\n }\n // State will be set to \"idle\" by ConversationEndStateEvent from Engine\n }\n\n /**\n * Send output to all presenters\n *\n * Note: Presenters are no longer part of AgentDefinition.\n * This is a placeholder for future presenter injection via Runtime or middleware.\n */\n private presentOutput(_output: AgentOutput): void {\n // Presenters removed from AgentDefinition.\n // Future: Presenters can be injected via Runtime or interceptor chain.\n }\n\n /**\n * Subscribe to events\n */\n on(handler: AgentEventHandler): Unsubscribe;\n\n // Batch subscription with EventHandlerMap\n on(handlers: EventHandlerMap): Unsubscribe;\n\n // Type-safe overloads for Stream Layer Events\n on(type: \"message_start\", handler: (event: MessageStartEvent) => void): Unsubscribe;\n on(type: \"message_delta\", handler: (event: MessageDeltaEvent) => void): Unsubscribe;\n on(type: \"message_stop\", handler: (event: MessageStopEvent) => void): Unsubscribe;\n on(\n type: \"text_content_block_start\",\n handler: (event: TextContentBlockStartEvent) => void\n ): Unsubscribe;\n on(type: \"text_delta\", handler: (event: TextDeltaEvent) => void): Unsubscribe;\n on(\n type: \"text_content_block_stop\",\n handler: (event: TextContentBlockStopEvent) => void\n ): Unsubscribe;\n on(\n type: \"tool_use_content_block_start\",\n handler: (event: ToolUseContentBlockStartEvent) => void\n ): Unsubscribe;\n on(type: \"input_json_delta\", handler: (event: InputJsonDeltaEvent) => void): Unsubscribe;\n on(\n type: \"tool_use_content_block_stop\",\n handler: (event: ToolUseContentBlockStopEvent) => void\n ): Unsubscribe;\n on(type: \"tool_call\", handler: (event: ToolCallEvent) => void): Unsubscribe;\n on(type: \"tool_result\", handler: (event: ToolResultEvent) => void): Unsubscribe;\n\n // Type-safe overloads for Message Layer Events\n on(type: \"user_message\", handler: (event: UserMessageEvent) => void): Unsubscribe;\n on(type: \"assistant_message\", handler: (event: AssistantMessageEvent) => void): Unsubscribe;\n on(type: \"tool_call_message\", handler: (event: ToolCallMessageEvent) => void): Unsubscribe;\n on(type: \"tool_result_message\", handler: (event: ToolResultMessageEvent) => void): Unsubscribe;\n\n // Type-safe overloads for Error Layer Events\n on(type: \"error\", handler: (event: ErrorEvent) => void): Unsubscribe;\n\n // Type-safe overloads for Turn Layer Events\n on(type: \"turn_request\", handler: (event: TurnRequestEvent) => void): Unsubscribe;\n on(type: \"turn_response\", handler: (event: TurnResponseEvent) => void): Unsubscribe;\n\n // Fallback for custom/unknown types\n on(type: string, handler: AgentEventHandler): Unsubscribe;\n on(types: string[], handler: AgentEventHandler): Unsubscribe;\n\n on(\n typeOrHandlerOrMap: string | string[] | ((event: any) => void) | EventHandlerMap,\n handler?: (event: any) => void\n ): Unsubscribe {\n // Overload 1: on(handler) - global subscription (function as first arg)\n if (typeof typeOrHandlerOrMap === \"function\") {\n return this.eventBus.onAny(typeOrHandlerOrMap as AgentEventHandler);\n }\n\n // Overload 2: on(handlers) - batch subscription (object with event handlers)\n if (this.isEventHandlerMap(typeOrHandlerOrMap)) {\n const unsubscribes: Unsubscribe[] = [];\n\n for (const [eventType, eventHandler] of Object.entries(typeOrHandlerOrMap)) {\n if (eventHandler) {\n unsubscribes.push(this.eventBus.on(eventType, eventHandler as AgentEventHandler));\n }\n }\n\n // Return single unsubscribe function that cleans up all subscriptions\n return () => {\n for (const unsub of unsubscribes) {\n unsub();\n }\n };\n }\n\n // Overload 3 & 4: on(type, handler) or on(types, handler)\n const types = Array.isArray(typeOrHandlerOrMap) ? typeOrHandlerOrMap : [typeOrHandlerOrMap];\n const h = handler! as AgentEventHandler;\n\n return this.eventBus.on(types, h);\n }\n\n /**\n * Check if the argument is an EventHandlerMap (object with event type keys)\n */\n private isEventHandlerMap(arg: unknown): arg is EventHandlerMap {\n if (typeof arg !== \"object\" || arg === null || Array.isArray(arg)) {\n return false;\n }\n // Check if it's a plain object (not a function)\n // EventHandlerMap has keys like \"text_delta\", \"assistant_message\", etc.\n const keys = Object.keys(arg);\n if (keys.length === 0) {\n return false;\n }\n // All values should be functions or undefined\n return keys.every((key) => {\n const value = (arg as Record<string, unknown>)[key];\n return value === undefined || typeof value === \"function\";\n });\n }\n\n /**\n * Subscribe to state changes (delegated to StateMachine)\n *\n * @param handler - Callback receiving { prev, current } state change\n * @returns Unsubscribe function\n */\n onStateChange(handler: StateChangeHandler): Unsubscribe {\n return this.stateMachine.onStateChange(handler);\n }\n\n /**\n * React-style fluent event subscription\n *\n * Converts onXxx handlers to event type keys and delegates to on(handlers)\n */\n react(handlers: ReactHandlerMap): Unsubscribe {\n const eventHandlerMap = mapReactHandlers(handlers);\n return this.on(eventHandlerMap);\n }\n\n /**\n * Subscribe to agent ready event\n *\n * If already running, handler is called immediately.\n */\n onReady(handler: () => void): Unsubscribe {\n // If already running, call handler immediately\n if (this._lifecycle === \"running\") {\n try {\n handler();\n } catch (error) {\n logger.error(\"onReady handler error\", {\n agentId: this.agentId,\n error,\n });\n }\n }\n\n // Add to handlers for future use (in case of re-initialization patterns)\n this.readyHandlers.add(handler);\n\n return () => {\n this.readyHandlers.delete(handler);\n };\n }\n\n /**\n * Subscribe to agent destroy event\n */\n onDestroy(handler: () => void): Unsubscribe {\n this.destroyHandlers.add(handler);\n\n return () => {\n this.destroyHandlers.delete(handler);\n };\n }\n\n /**\n * Add middleware to intercept incoming messages\n */\n use(middleware: AgentMiddleware): Unsubscribe {\n return this.middlewareChain.use(middleware);\n }\n\n /**\n * Add interceptor to intercept outgoing events\n */\n intercept(interceptor: AgentInterceptor): Unsubscribe {\n return this.interceptorChain.intercept(interceptor);\n }\n\n /**\n * Interrupt - User-initiated stop\n *\n * Stops the current operation gracefully.\n * Flow:\n * 1. Call driver.interrupt() to abort active requests\n * 2. Driver yields InterruptedStreamEvent\n * 3. Event flows through engine pipeline\n * 4. StateEventProcessor generates conversation_interrupted\n * 5. StateMachine transitions to idle state\n * 6. UI receives state change notification\n */\n interrupt(): void {\n logger.debug(\"User interrupt requested\", { agentId: this.agentId, currentState: this.state });\n\n // Simply call driver.interrupt() - driver will yield InterruptedStreamEvent\n this.driver.interrupt();\n }\n\n /**\n * Destroy - Clean up resources\n */\n async destroy(): Promise<void> {\n logger.debug(\"Destroying agent\", { agentId: this.agentId });\n\n // Notify destroy handlers before cleanup\n for (const handler of this.destroyHandlers) {\n try {\n handler();\n } catch (error) {\n logger.error(\"onDestroy handler error\", {\n agentId: this.agentId,\n error,\n });\n }\n }\n\n this._lifecycle = \"destroyed\";\n this.stateMachine.reset();\n this.eventBus.destroy();\n this.readyHandlers.clear();\n this.destroyHandlers.clear();\n this.middlewareChain.clear();\n this.interceptorChain.clear();\n\n // Driver cleanup is handled internally by Agent\n // No need to call driver.destroy() - it's not part of the public interface\n\n // Clear engine state for this agent\n this.engine.clearState(this.agentId);\n\n logger.info(\"Agent destroyed\", { agentId: this.agentId });\n }\n\n /**\n * Notify all registered handlers\n *\n * Flow:\n * 1. StateMachine processes StateEvents (for state transitions)\n * 2. Interceptor chain can modify/filter events\n * 3. EventBus emits to all subscribers\n */\n private notifyHandlers(event: AgentOutput): void {\n // 1. If StateEvent, let StateMachine process it first (before interceptors)\n if (isStateEvent(event)) {\n this.stateMachine.process(event);\n }\n\n // 2. Run through interceptor chain, then emit to EventBus\n this.executeInterceptorChain(event);\n }\n\n /**\n * Execute interceptor chain and then emit to EventBus\n */\n private executeInterceptorChain(event: AgentOutput): void {\n this.interceptorChain.execute(event, (e) => this.eventBus.emit(e));\n }\n\n /**\n * Get the event consumer for external subscriptions\n *\n * Use this to expose event subscription without emit capability.\n */\n getEventConsumer(): EventConsumer {\n return this.eventBus.asConsumer();\n }\n}\n","/**\n * Store - State storage interface for stream processing\n *\n * A Store abstracts state persistence, allowing processors to be stateless\n * while maintaining state externally.\n *\n * @template T - The state type to store\n *\n * @example\n * ```typescript\n * const store = new MemoryStore<AgentState>();\n * store.set('agent_123', { count: 0 });\n * const state = store.get('agent_123');\n * ```\n */\nexport interface Store<T> {\n /**\n * Get state by ID\n * @param id - Unique identifier (e.g., agentId, sessionId)\n * @returns The stored state or undefined if not found\n */\n get(id: string): T | undefined;\n\n /**\n * Set state for an ID\n * @param id - Unique identifier\n * @param state - The state to store\n */\n set(id: string, state: T): void;\n\n /**\n * Delete state for an ID\n * @param id - Unique identifier\n */\n delete(id: string): void;\n\n /**\n * Check if state exists for an ID\n * @param id - Unique identifier\n * @returns True if state exists\n */\n has(id: string): boolean;\n}\n\n/**\n * MemoryStore - In-memory implementation of Store\n *\n * Stores state in a Map. Suitable for development and single-process deployments.\n * For production multi-process scenarios, use RedisStore or PostgresStore.\n *\n * @template T - The state type to store\n *\n * @example\n * ```typescript\n * const store = new MemoryStore<MyState>();\n * store.set('session_1', { count: 0 });\n * ```\n */\nexport class MemoryStore<T> implements Store<T> {\n private states = new Map<string, T>();\n\n get(id: string): T | undefined {\n return this.states.get(id);\n }\n\n set(id: string, state: T): void {\n this.states.set(id, state);\n }\n\n delete(id: string): void {\n this.states.delete(id);\n }\n\n has(id: string): boolean {\n return this.states.has(id);\n }\n\n /**\n * Clear all stored states\n */\n clear(): void {\n this.states.clear();\n }\n\n /**\n * Get the number of stored states\n */\n get size(): number {\n return this.states.size;\n }\n\n /**\n * Get all stored IDs\n */\n keys(): IterableIterator<string> {\n return this.states.keys();\n }\n}\n","/**\n * Mealy - The Mealy Machine runtime\n *\n * A Mealy Machine is a finite-state machine where outputs depend on\n * both the current state AND the input: (state, input) => (state, output)\n *\n * This runtime orchestrates the complete processing pipeline:\n * 1. Sources receive external input (side effects)\n * 2. Processors process inputs (pure Mealy transition functions)\n * 3. Sinks produce output effects (side effects)\n *\n * Architecture:\n * - Inputs enter through Sources (input adapters)\n * - Processors transform inputs (pure functions, state is means)\n * - Sinks produce actions (output adapters)\n *\n * @template TState - The state type (accumulator, means to an end)\n * @template TInput - The input/output type for Processors\n *\n * @example\n * ```typescript\n * const mealy = createMealy({\n * processor: messageProcessor,\n * store: new MemoryStore(),\n * initialState: { text: '' },\n * sinks: [sseSink, logSink],\n * });\n *\n * // Process an input\n * mealy.process('agent_123', input);\n * ```\n */\n\nimport type { Processor } from \"./Processor\";\nimport type { Store } from \"./Store\";\nimport type { Sink, SinkDefinition } from \"./Sink\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"engine/Mealy\");\n\n/**\n * MealyConfig - Configuration for creating a Mealy instance\n */\nexport interface MealyConfig<TState, TInput> {\n /**\n * The processor function to execute (pure Mealy transition function)\n */\n processor: Processor<TState, TInput, TInput>;\n\n /**\n * The store for state persistence\n */\n store: Store<TState>;\n\n /**\n * Initial state for new IDs\n */\n initialState: TState;\n\n /**\n * Sinks to receive outputs\n * Can be simple Sink functions or SinkDefinitions with filter/name\n */\n sinks?: (Sink<TInput> | SinkDefinition<TInput>)[];\n\n /**\n * Whether to recursively process outputs\n * If true, outputs are fed back into the processor\n *\n * @default true\n */\n recursive?: boolean;\n\n /**\n * Maximum recursion depth to prevent infinite loops\n *\n * @default 100\n */\n maxDepth?: number;\n}\n\n/**\n * ProcessResult - Result of processing an input\n */\nexport interface ProcessResult<TState, TOutput> {\n /**\n * The new state after processing\n */\n state: TState;\n\n /**\n * All outputs produced (including from recursion)\n */\n outputs: TOutput[];\n\n /**\n * Number of processor invocations (including recursion)\n */\n processCount: number;\n}\n\n/**\n * Mealy - Mealy Machine runtime\n *\n * Implements the Mealy Machine pattern: (state, input) => (state, output)\n * where output depends on both current state and input.\n */\nexport class Mealy<TState, TInput> {\n private readonly processor: Processor<TState, TInput, TInput>;\n private readonly store: Store<TState>;\n private readonly initialState: TState;\n private readonly sinks: (Sink<TInput> | SinkDefinition<TInput>)[];\n private readonly recursive: boolean;\n private readonly maxDepth: number;\n\n constructor(config: MealyConfig<TState, TInput>) {\n this.processor = config.processor;\n this.store = config.store;\n this.initialState = config.initialState;\n this.sinks = config.sinks ?? [];\n this.recursive = config.recursive ?? true;\n this.maxDepth = config.maxDepth ?? 100;\n\n logger.debug(\"Mealy instance created\", {\n sinkCount: this.sinks.length,\n recursive: this.recursive,\n maxDepth: this.maxDepth,\n });\n }\n\n /**\n * Process an input through the Mealy Machine\n *\n * @param id - Unique identifier (e.g., agentId)\n * @param input - The input to process\n * @returns Result containing new state and all outputs\n */\n process(id: string, input: TInput): ProcessResult<TState, TInput> {\n return this.processInternal(id, input, 0);\n }\n\n /**\n * Internal process with depth tracking\n */\n private processInternal(id: string, input: TInput, depth: number): ProcessResult<TState, TInput> {\n // Guard against infinite recursion\n if (depth >= this.maxDepth) {\n logger.warn(\"Max recursion depth reached\", {\n id,\n maxDepth: this.maxDepth,\n depth,\n });\n return {\n state: this.store.get(id) ?? this.initialState,\n outputs: [],\n processCount: 0,\n };\n }\n\n // 1. Get current state (or initialize)\n let state = this.store.get(id);\n if (state === undefined) {\n state = this.initialState;\n }\n\n // 2. Execute pure processor function (Mealy transition)\n const [newState, outputs] = this.processor(state, input);\n\n // 3. Save new state to store\n this.store.set(id, newState);\n\n // 4. Collect all outputs\n const allOutputs: TInput[] = [...outputs];\n let processCount = 1;\n\n // 5. Send outputs to sinks\n if (outputs.length > 0) {\n this.sendToSinks(id, outputs);\n }\n\n // 6. Optionally recurse on outputs\n if (this.recursive) {\n for (const output of outputs) {\n const result = this.processInternal(id, output, depth + 1);\n allOutputs.push(...result.outputs);\n processCount += result.processCount;\n }\n }\n\n return {\n state: newState,\n outputs: allOutputs,\n processCount,\n };\n }\n\n /**\n * Send outputs to all sinks\n */\n private sendToSinks(id: string, outputs: TInput[]): void {\n for (const sink of this.sinks) {\n // Check if sink is a function or SinkDefinition\n if (typeof sink === \"function\") {\n // Simple Sink function: (id, outputs) => void\n try {\n const result = sink(id, outputs);\n if (result instanceof Promise) {\n result.catch((error) => {\n logger.error(\"Sink error (async)\", { id, error });\n });\n }\n } catch (error) {\n logger.error(\"Sink error (sync)\", { id, error });\n }\n } else {\n // SinkDefinition with filter/name\n const filteredOutputs = sink.filter ? outputs.filter(sink.filter) : outputs;\n\n if (filteredOutputs.length === 0) {\n continue;\n }\n\n try {\n const result = sink.sink(id, filteredOutputs);\n if (result instanceof Promise) {\n result.catch((error) => {\n logger.error(\"Named sink error (async)\", {\n id,\n sinkName: sink.name,\n error,\n });\n });\n }\n } catch (error) {\n logger.error(\"Named sink error (sync)\", {\n id,\n sinkName: sink.name,\n error,\n });\n }\n }\n }\n }\n\n /**\n * Get current state for an ID (without processing)\n */\n getState(id: string): TState | undefined {\n return this.store.get(id);\n }\n\n /**\n * Check if state exists for an ID\n */\n hasState(id: string): boolean {\n return this.store.has(id);\n }\n\n /**\n * Delete state for an ID (cleanup)\n */\n cleanup(id: string): void {\n logger.debug(\"Cleaning up state\", { id });\n this.store.delete(id);\n }\n\n /**\n * Add a sink at runtime\n */\n addSink(sink: Sink<TInput> | SinkDefinition<TInput>): void {\n const sinkName = typeof sink === \"function\" ? \"(anonymous)\" : sink.name;\n logger.debug(\"Adding sink\", { sinkName });\n this.sinks.push(sink);\n }\n\n /**\n * Remove a sink by name (only works for SinkDefinitions)\n */\n removeSink(name: string): boolean {\n const index = this.sinks.findIndex((s) => typeof s !== \"function\" && s.name === name);\n if (index !== -1) {\n this.sinks.splice(index, 1);\n logger.debug(\"Removed sink\", { name });\n return true;\n }\n logger.debug(\"Sink not found for removal\", { name });\n return false;\n }\n}\n\n/**\n * createMealy - Factory function for creating Mealy Machine instances\n *\n * @example\n * ```typescript\n * const mealy = createMealy({\n * processor: myProcessor,\n * store: new MemoryStore(),\n * initialState: { count: 0 },\n * sinks: [logSink],\n * });\n * ```\n */\nexport function createMealy<TState, TInput>(\n config: MealyConfig<TState, TInput>\n): Mealy<TState, TInput> {\n return new Mealy(config);\n}\n","/**\n * Combinators - Functions to compose multiple Processors\n *\n * These utilities allow building complex stream processing pipelines\n * from simple, composable Processor functions.\n */\n\nimport type { Processor } from \"./Processor\";\n\n/**\n * combineProcessors - Combine multiple processors into one\n *\n * Each sub-processor manages its own slice of state.\n * All processors receive the same event and their outputs are merged.\n *\n * @example\n * ```typescript\n * interface CombinedState {\n * message: MessageState;\n * state: StateMachineState;\n * turn: TurnState;\n * }\n *\n * const combinedProcessor = combineProcessors<CombinedState, Event, Event>({\n * message: messageProcessor,\n * state: stateMachineProcessor,\n * turn: turnTrackerProcessor,\n * });\n * ```\n */\nexport function combineProcessors<\n TState extends Record<string, unknown>,\n TInput,\n TOutput,\n>(processors: {\n [K in keyof TState]: Processor<TState[K], TInput, TOutput>;\n}): Processor<TState, TInput, TOutput> {\n return (state: Readonly<TState>, event: TInput): [TState, TOutput[]] => {\n const newState = {} as TState;\n const allOutputs: TOutput[] = [];\n\n for (const key in processors) {\n const processor = processors[key];\n const subState = state[key];\n const [newSubState, outputs] = processor(subState, event);\n\n newState[key] = newSubState;\n allOutputs.push(...outputs);\n }\n\n return [newState, allOutputs];\n };\n}\n\n/**\n * combineInitialStates - Helper to create initial state for combined processors\n */\nexport function combineInitialStates<TState extends Record<string, unknown>>(initialStates: {\n [K in keyof TState]: () => TState[K];\n}): () => TState {\n return () => {\n const state = {} as TState;\n for (const key in initialStates) {\n state[key] = initialStates[key]();\n }\n return state;\n };\n}\n\n/**\n * chainProcessors - Chain processors where output of one feeds into the next\n *\n * Useful for layered event processing:\n * Stream Events → Message Events → Turn Events\n *\n * @example\n * ```typescript\n * const pipeline = chainProcessors(\n * streamToMessageProcessor,\n * messageToTurnProcessor,\n * );\n * ```\n */\nexport function chainProcessors<TState, TEvent>(\n ...processors: Processor<TState, TEvent, TEvent>[]\n): Processor<TState, TEvent, TEvent> {\n return (state: Readonly<TState>, event: TEvent): [TState, TEvent[]] => {\n let currentState = state as TState;\n const finalOutputs: TEvent[] = [];\n\n // Run the event through all processors\n for (const processor of processors) {\n const [newState, outputs] = processor(currentState, event);\n currentState = newState;\n finalOutputs.push(...outputs);\n }\n\n return [currentState, finalOutputs];\n };\n}\n\n/**\n * filterProcessor - Create a processor that only processes certain events\n *\n * @example\n * ```typescript\n * const textOnlyProcessor = filterProcessor(\n * (event) => event.type === 'text_delta',\n * textProcessor,\n * );\n * ```\n */\nexport function filterProcessor<TState, TInput, TOutput>(\n predicate: (event: TInput) => boolean,\n processor: Processor<TState, TInput, TOutput>\n): Processor<TState, TInput, TOutput> {\n return (state: Readonly<TState>, event: TInput): [TState, TOutput[]] => {\n if (predicate(event)) {\n return processor(state, event);\n }\n return [state as TState, []];\n };\n}\n\n/**\n * mapOutput - Transform output events\n *\n * @example\n * ```typescript\n * const withTimestamp = mapOutput(\n * myProcessor,\n * (output) => ({ ...output, processedAt: Date.now() }),\n * );\n * ```\n */\nexport function mapOutput<TState, TInput, TOutput, TMapped>(\n processor: Processor<TState, TInput, TOutput>,\n mapper: (output: TOutput) => TMapped\n): Processor<TState, TInput, TMapped> {\n return (state: Readonly<TState>, event: TInput): [TState, TMapped[]] => {\n const [newState, outputs] = processor(state, event);\n return [newState, outputs.map(mapper)];\n };\n}\n\n/**\n * withLogging - Add logging to a processor (for debugging)\n *\n * @example\n * ```typescript\n * const debugProcessor = withLogging(myProcessor, 'MyProcessor');\n * ```\n */\nexport function withLogging<TState, TInput, TOutput>(\n processor: Processor<TState, TInput, TOutput>,\n name: string,\n logger: {\n debug: (message: string, data?: unknown) => void;\n } = console\n): Processor<TState, TInput, TOutput> {\n return (state: Readonly<TState>, event: TInput): [TState, TOutput[]] => {\n logger.debug(`[${name}] Input:`, { event, state });\n const [newState, outputs] = processor(state, event);\n logger.debug(`[${name}] Output:`, { newState, outputs });\n return [newState, outputs];\n };\n}\n\n/**\n * identityProcessor - A processor that does nothing (useful as default)\n */\nexport function identityProcessor<TState, TEvent>(): Processor<TState, TEvent, TEvent> {\n return (state: Readonly<TState>, _event: TEvent): [TState, TEvent[]] => {\n return [state as TState, []];\n };\n}\n","/**\n * messageAssemblerProcessor\n *\n * Pure Mealy transition function that assembles complete Message Layer events\n * from Stream Layer events.\n *\n * Input Events (Stream Layer):\n * - message_start\n * - text_delta\n * - text_content_block_stop\n * - tool_use_content_block_start\n * - input_json_delta\n * - tool_use_content_block_stop\n * - tool_result\n * - message_stop\n *\n * Output Events (Message Layer):\n * - tool_call (Stream - when tool parameters are fully assembled)\n * - tool_call_message (Message - AI's request to call a tool)\n * - tool_result_message (Message - tool execution result)\n * - assistant_message (Message - complete assistant response)\n */\n\nimport type { Processor, ProcessorDefinition } from \"~/mealy\";\nimport type {\n StreamEventType,\n MessageStartEvent,\n TextDeltaEvent,\n ToolUseContentBlockStartEvent,\n InputJsonDeltaEvent,\n ToolUseContentBlockStopEvent,\n ToolResultEvent,\n MessageStopEvent,\n ToolCallEvent,\n AssistantMessageEvent,\n ToolCallMessageEvent,\n ToolResultMessageEvent,\n AssistantMessage,\n ToolCallMessage,\n ToolResultMessage,\n ToolCallPart,\n ToolResultPart,\n} from \"@agentxjs/types\";\n\n// ===== State Types =====\n\n/**\n * Pending content accumulator\n */\nexport interface PendingContent {\n type: \"text\" | \"tool_use\";\n index: number;\n // For text content\n textDeltas?: string[];\n // For tool use\n toolId?: string;\n toolName?: string;\n toolInputJson?: string;\n}\n\n/**\n * Pending tool call info (for matching with tool_result)\n */\nexport interface PendingToolCall {\n id: string;\n name: string;\n}\n\n/**\n * MessageAssemblerState\n *\n * Tracks the state of message assembly from stream events.\n */\nexport interface MessageAssemblerState {\n /**\n * Current message ID being assembled\n */\n currentMessageId: string | null;\n\n /**\n * Timestamp when the current message started\n */\n messageStartTime: number | null;\n\n /**\n * Pending content blocks being accumulated\n * Key is the content block index\n */\n pendingContents: Record<number, PendingContent>;\n\n /**\n * Pending tool calls waiting for results\n * Key is the tool call ID\n */\n pendingToolCalls: Record<string, PendingToolCall>;\n}\n\n/**\n * Initial state factory for MessageAssembler\n */\nexport function createInitialMessageAssemblerState(): MessageAssemblerState {\n return {\n currentMessageId: null,\n messageStartTime: null,\n pendingContents: {},\n pendingToolCalls: {},\n };\n}\n\n// ===== Processor Implementation =====\n\n/**\n * Generate a unique ID\n */\nfunction generateId(): string {\n return `msg_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Output event types from MessageAssembler\n */\nexport type MessageAssemblerOutput =\n | ToolCallEvent\n | AssistantMessageEvent\n | ToolCallMessageEvent\n | ToolResultMessageEvent;\n\n/**\n * Input event types for MessageAssembler (subset of StreamEventType)\n */\nexport type MessageAssemblerInput = StreamEventType;\n\n/**\n * messageAssemblerProcessor\n *\n * Pure Mealy transition function for message assembly.\n * Pattern: (state, input) => [newState, outputs]\n */\nexport const messageAssemblerProcessor: Processor<\n MessageAssemblerState,\n MessageAssemblerInput,\n MessageAssemblerOutput\n> = (state, input): [MessageAssemblerState, MessageAssemblerOutput[]] => {\n switch (input.type) {\n case \"message_start\":\n return handleMessageStart(state, input);\n\n case \"text_delta\":\n return handleTextDelta(state, input);\n\n case \"tool_use_content_block_start\":\n return handleToolUseContentBlockStart(state, input);\n\n case \"input_json_delta\":\n return handleInputJsonDelta(state, input);\n\n case \"tool_use_content_block_stop\":\n return handleToolUseContentBlockStop(state, input);\n\n case \"tool_result\":\n return handleToolResult(state, input);\n\n case \"message_stop\":\n return handleMessageStop(state, input);\n\n default:\n // Pass through unhandled events (no state change, no output)\n return [state, []];\n }\n};\n\n/**\n * Handle message_start event\n */\nfunction handleMessageStart(\n state: Readonly<MessageAssemblerState>,\n event: MessageStartEvent\n): [MessageAssemblerState, MessageAssemblerOutput[]] {\n return [\n {\n ...state,\n currentMessageId: generateId(),\n messageStartTime: event.timestamp,\n pendingContents: {},\n },\n [],\n ];\n}\n\n/**\n * Handle text_delta event\n */\nfunction handleTextDelta(\n state: Readonly<MessageAssemblerState>,\n event: TextDeltaEvent\n): [MessageAssemblerState, MessageAssemblerOutput[]] {\n const index = 0; // Text content uses index 0\n const existingContent = state.pendingContents[index];\n\n const pendingContent: PendingContent =\n existingContent?.type === \"text\"\n ? {\n ...existingContent,\n textDeltas: [...(existingContent.textDeltas || []), event.data.text],\n }\n : {\n type: \"text\",\n index,\n textDeltas: [event.data.text],\n };\n\n return [\n {\n ...state,\n pendingContents: {\n ...state.pendingContents,\n [index]: pendingContent,\n },\n },\n [],\n ];\n}\n\n/**\n * Handle tool_use_content_block_start event\n */\nfunction handleToolUseContentBlockStart(\n state: Readonly<MessageAssemblerState>,\n event: ToolUseContentBlockStartEvent\n): [MessageAssemblerState, MessageAssemblerOutput[]] {\n const index = 1; // Tool use uses index 1\n\n const pendingContent: PendingContent = {\n type: \"tool_use\",\n index,\n toolId: event.data.id,\n toolName: event.data.name,\n toolInputJson: \"\",\n };\n\n return [\n {\n ...state,\n pendingContents: {\n ...state.pendingContents,\n [index]: pendingContent,\n },\n },\n [],\n ];\n}\n\n/**\n * Handle input_json_delta event\n */\nfunction handleInputJsonDelta(\n state: Readonly<MessageAssemblerState>,\n event: InputJsonDeltaEvent\n): [MessageAssemblerState, MessageAssemblerOutput[]] {\n const index = 1; // Tool use uses index 1\n const existingContent = state.pendingContents[index];\n\n if (!existingContent || existingContent.type !== \"tool_use\") {\n // No pending tool_use content, ignore\n return [state, []];\n }\n\n const pendingContent: PendingContent = {\n ...existingContent,\n toolInputJson: (existingContent.toolInputJson || \"\") + event.data.partialJson,\n };\n\n return [\n {\n ...state,\n pendingContents: {\n ...state.pendingContents,\n [index]: pendingContent,\n },\n },\n [],\n ];\n}\n\n/**\n * Handle tool_use_content_block_stop event\n *\n * Emits:\n * - tool_call (Stream Event) - for tool execution\n * - tool_call_message (Message Event) - for UI display\n */\nfunction handleToolUseContentBlockStop(\n state: Readonly<MessageAssemblerState>,\n event: ToolUseContentBlockStopEvent\n): [MessageAssemblerState, MessageAssemblerOutput[]] {\n const index = 1;\n const pendingContent = state.pendingContents[index];\n\n if (!pendingContent || pendingContent.type !== \"tool_use\") {\n return [state, []];\n }\n\n // Parse tool input JSON\n let toolInput: Record<string, unknown> = {};\n try {\n toolInput = pendingContent.toolInputJson ? JSON.parse(pendingContent.toolInputJson) : {};\n } catch {\n // Failed to parse, use empty object\n toolInput = {};\n }\n\n // Create output events\n const outputs: MessageAssemblerOutput[] = [];\n\n const toolId = pendingContent.toolId!;\n const toolName = pendingContent.toolName!;\n\n // 1. Emit tool_call event (Stream Layer - for tool execution)\n const toolCallEvent: ToolCallEvent = {\n type: \"tool_call\",\n uuid: generateId(),\n agentId: event.agentId,\n timestamp: Date.now(),\n data: {\n id: toolId,\n name: toolName,\n input: toolInput,\n },\n };\n outputs.push(toolCallEvent);\n\n // 2. Emit tool_call_message event (Message Layer - for UI)\n const toolCall: ToolCallPart = {\n type: \"tool-call\",\n id: toolId,\n name: toolName,\n input: toolInput,\n };\n\n const toolCallMessage: ToolCallMessage = {\n id: generateId(),\n role: \"assistant\",\n subtype: \"tool-call\",\n toolCall,\n timestamp: Date.now(),\n };\n\n const toolCallMessageEvent: ToolCallMessageEvent = {\n type: \"tool_call_message\",\n uuid: generateId(),\n agentId: event.agentId,\n timestamp: Date.now(),\n data: toolCallMessage,\n };\n outputs.push(toolCallMessageEvent);\n\n // Remove from pending contents, add to pending tool calls\n const { [index]: _, ...remainingContents } = state.pendingContents;\n\n return [\n {\n ...state,\n pendingContents: remainingContents,\n pendingToolCalls: {\n ...state.pendingToolCalls,\n [toolId]: { id: toolId, name: toolName },\n },\n },\n outputs,\n ];\n}\n\n/**\n * Handle tool_result event\n *\n * Emits:\n * - tool_result_message (Message Event) - for UI display\n */\nfunction handleToolResult(\n state: Readonly<MessageAssemblerState>,\n event: ToolResultEvent\n): [MessageAssemblerState, MessageAssemblerOutput[]] {\n const { toolId, content, isError } = event.data;\n\n // Find pending tool call\n const pendingToolCall = state.pendingToolCalls[toolId];\n const toolName = pendingToolCall?.name || \"unknown\";\n\n // Create tool result message\n const toolResult: ToolResultPart = {\n type: \"tool-result\",\n id: toolId,\n name: toolName,\n output: {\n type: isError ? \"error-text\" : \"text\",\n value: typeof content === \"string\" ? content : JSON.stringify(content),\n },\n };\n\n const toolResultMessage: ToolResultMessage = {\n id: generateId(),\n role: \"tool\",\n subtype: \"tool-result\",\n toolResult,\n toolCallId: toolId,\n timestamp: Date.now(),\n };\n\n const toolResultMessageEvent: ToolResultMessageEvent = {\n type: \"tool_result_message\",\n uuid: generateId(),\n agentId: event.agentId,\n timestamp: Date.now(),\n data: toolResultMessage,\n };\n\n // Remove from pending tool calls\n const { [toolId]: _, ...remainingToolCalls } = state.pendingToolCalls;\n\n return [\n {\n ...state,\n pendingToolCalls: remainingToolCalls,\n },\n [toolResultMessageEvent],\n ];\n}\n\n/**\n * Handle message_stop event\n */\nfunction handleMessageStop(\n state: Readonly<MessageAssemblerState>,\n event: MessageStopEvent\n): [MessageAssemblerState, MessageAssemblerOutput[]] {\n if (!state.currentMessageId) {\n return [state, []];\n }\n\n // Assemble all text content\n const textParts: string[] = [];\n const sortedContents = Object.values(state.pendingContents).sort((a, b) => a.index - b.index);\n\n for (const pending of sortedContents) {\n if (pending.type === \"text\" && pending.textDeltas) {\n textParts.push(pending.textDeltas.join(\"\"));\n }\n }\n\n const content = textParts.join(\"\");\n\n // Skip empty messages (but preserve pendingToolCalls if stopReason is \"tool_use\")\n const stopReason = event.data.stopReason;\n if (!content || content.trim().length === 0) {\n const shouldPreserveToolCalls = stopReason === \"tool_use\";\n return [\n {\n ...createInitialMessageAssemblerState(),\n pendingToolCalls: shouldPreserveToolCalls ? state.pendingToolCalls : {},\n },\n [],\n ];\n }\n\n // Create AssistantMessage\n const assistantMessage: AssistantMessage = {\n id: state.currentMessageId,\n role: \"assistant\",\n subtype: \"assistant\",\n content,\n timestamp: state.messageStartTime || Date.now(),\n // Usage data is not available in message_stop event\n // It would need to be tracked separately if needed\n usage: undefined,\n };\n\n // Emit AssistantMessageEvent\n const assistantEvent: AssistantMessageEvent = {\n type: \"assistant_message\",\n uuid: generateId(),\n agentId: event.agentId,\n timestamp: Date.now(),\n data: assistantMessage,\n };\n\n // Reset state, but preserve pendingToolCalls if stopReason is \"tool_use\"\n // (tool_result events arrive after message_stop in tool call scenarios)\n const shouldPreserveToolCalls = stopReason === \"tool_use\";\n\n return [\n {\n ...createInitialMessageAssemblerState(),\n pendingToolCalls: shouldPreserveToolCalls ? state.pendingToolCalls : {},\n },\n [assistantEvent],\n ];\n}\n\n/**\n * MessageAssembler Processor Definition\n */\nexport const messageAssemblerProcessorDef: ProcessorDefinition<\n MessageAssemblerState,\n MessageAssemblerInput,\n MessageAssemblerOutput\n> = {\n name: \"MessageAssembler\",\n description: \"Assembles complete messages from stream events\",\n initialState: createInitialMessageAssemblerState,\n processor: messageAssemblerProcessor,\n};\n","/**\n * stateEventProcessor\n *\n * Stateless event transformer: Stream Events → State Events\n *\n * Input Events (Stream Layer):\n * - message_start\n * - message_stop\n * - text_content_block_start\n * - text_content_block_stop\n * - tool_use_content_block_start\n * - tool_use_content_block_stop\n * - tool_call\n *\n * Output Events (State Layer):\n * - conversation_start\n * - conversation_responding\n * - conversation_end\n * - tool_planned\n * - tool_executing\n */\n\nimport type { Processor, ProcessorDefinition } from \"~/mealy\";\nimport type {\n StreamEventType,\n MessageStartEvent,\n MessageDeltaEvent,\n MessageStopEvent,\n TextContentBlockStartEvent,\n ToolUseContentBlockStartEvent,\n ToolUseContentBlockStopEvent,\n ToolCallEvent,\n InterruptedStreamEvent,\n ConversationStartStateEvent,\n ConversationRespondingStateEvent,\n ConversationEndStateEvent,\n ConversationInterruptedStateEvent,\n ToolPlannedStateEvent,\n ToolExecutingStateEvent,\n} from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"engine/stateEventProcessor\");\n\n// ===== State Types =====\n\n/**\n * StateEventProcessorContext\n *\n * Minimal context needed for event transformation logic.\n * Does NOT track agent state - only auxiliary info for decision-making.\n *\n * Currently empty - no context needed as all information comes from events.\n */\nexport interface StateEventProcessorContext {\n // Empty - all information comes from events\n}\n\n/**\n * Initial context factory for StateEventProcessor\n */\nexport function createInitialStateEventProcessorContext(): StateEventProcessorContext {\n return {};\n}\n\n// ===== Processor Implementation =====\n\n/**\n * Generate a unique ID\n */\nfunction generateId(): string {\n return `state_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Output event types from StateEventProcessor\n */\nexport type StateEventProcessorOutput =\n | ConversationStartStateEvent\n | ConversationRespondingStateEvent\n | ConversationEndStateEvent\n | ConversationInterruptedStateEvent\n | ToolPlannedStateEvent\n | ToolExecutingStateEvent;\n\n/**\n * Input event types for StateEventProcessor\n */\nexport type StateEventProcessorInput = StreamEventType;\n\n// Removed transitionTo helper - Processor no longer tracks state\n\n/**\n * stateEventProcessor\n *\n * Stateless event transformer: Stream Events → State Events\n *\n * Design:\n * - Does NOT track agent state (that's StateMachine's job)\n * - Only maintains auxiliary context (timestamps, etc.)\n * - Emits State Events that StateMachine consumes\n *\n * Pattern: (context, input) => [newContext, outputs]\n */\nexport const stateEventProcessor: Processor<\n StateEventProcessorContext,\n StateEventProcessorInput,\n StateEventProcessorOutput\n> = (context, input): [StateEventProcessorContext, StateEventProcessorOutput[]] => {\n // Log all incoming Stream Events\n logger.debug(`[Stream Event] ${input.type}`, {\n context,\n eventData: \"data\" in input ? input.data : undefined,\n });\n\n switch (input.type) {\n case \"message_start\":\n return handleMessageStart(context, input);\n\n case \"message_delta\":\n return handleMessageDelta(context, input);\n\n case \"message_stop\":\n return handleMessageStop(context, input);\n\n case \"text_content_block_start\":\n return handleTextContentBlockStart(context, input);\n\n case \"tool_use_content_block_start\":\n return handleToolUseContentBlockStart(context, input);\n\n case \"tool_use_content_block_stop\":\n return handleToolUseContentBlockStop(context, input);\n\n case \"tool_call\":\n return handleToolCall(context, input);\n\n case \"interrupted\":\n return handleInterrupted(context, input);\n\n default:\n // Pass through unhandled events\n logger.debug(`[Stream Event] ${input.type} (unhandled)`);\n return [context, []];\n }\n};\n\n/**\n * Handle message_start event\n *\n * Emits: conversation_start\n */\nfunction handleMessageStart(\n context: Readonly<StateEventProcessorContext>,\n event: MessageStartEvent\n): [StateEventProcessorContext, StateEventProcessorOutput[]] {\n const conversationStartEvent: ConversationStartStateEvent = {\n type: \"conversation_start\",\n uuid: generateId(),\n agentId: event.agentId,\n timestamp: event.timestamp,\n transition: {\n reason: \"conversation_started\",\n trigger: \"message_start\",\n },\n data: {\n userMessage: {} as any, // Will be populated by higher-level component\n },\n };\n\n return [context, [conversationStartEvent]];\n}\n\n/**\n * Handle message_delta event\n *\n * No longer needed as stopReason is now in message_stop event.\n * Kept for compatibility with event routing.\n */\nfunction handleMessageDelta(\n context: Readonly<StateEventProcessorContext>,\n _event: MessageDeltaEvent\n): [StateEventProcessorContext, StateEventProcessorOutput[]] {\n // No-op: stopReason now comes from message_stop\n return [context, []];\n}\n\n/**\n * Handle message_stop event\n *\n * Emits: conversation_end (only if stopReason is NOT \"tool_use\")\n *\n * This event signals that Claude has finished streaming a message.\n * However, if stopReason is \"tool_use\", the conversation continues\n * because Claude will execute tools and send more messages.\n */\nfunction handleMessageStop(\n context: Readonly<StateEventProcessorContext>,\n event: MessageStopEvent\n): [StateEventProcessorContext, StateEventProcessorOutput[]] {\n const stopReason = event.data.stopReason;\n\n logger.debug(\"message_stop received\", { stopReason });\n\n // If stopReason is \"tool_use\", don't emit conversation_end\n // The conversation continues after tool execution\n if (stopReason === \"tool_use\") {\n logger.debug(\"Skipping conversation_end (tool_use in progress)\");\n return [context, []];\n }\n\n // For all other cases (end_turn, max_tokens, etc.), emit conversation_end\n const conversationEndEvent: ConversationEndStateEvent = {\n type: \"conversation_end\",\n uuid: generateId(),\n agentId: event.agentId,\n timestamp: event.timestamp,\n transition: {\n reason: \"conversation_completed\",\n trigger: \"message_stop\",\n },\n data: {\n assistantMessage: {} as any, // Will be populated by higher-level component\n durationMs: 0, // Will be calculated by StateMachine or TurnTracker\n durationApiMs: 0,\n numTurns: 0,\n result: \"completed\",\n totalCostUsd: 0,\n usage: {\n input: 0,\n output: 0,\n },\n },\n };\n\n return [context, [conversationEndEvent]];\n}\n\n/**\n * Handle text_content_block_start event\n *\n * Emits: conversation_responding\n */\nfunction handleTextContentBlockStart(\n context: Readonly<StateEventProcessorContext>,\n event: TextContentBlockStartEvent\n): [StateEventProcessorContext, StateEventProcessorOutput[]] {\n const respondingEvent: ConversationRespondingStateEvent = {\n type: \"conversation_responding\",\n uuid: generateId(),\n agentId: event.agentId,\n timestamp: Date.now(),\n transition: {\n reason: \"assistant_responding\",\n trigger: \"text_content_block_start\",\n },\n data: {},\n };\n\n return [context, [respondingEvent]];\n}\n\n/**\n * Handle tool_use_content_block_start event\n *\n * Emits: tool_planned, tool_executing\n */\nfunction handleToolUseContentBlockStart(\n context: Readonly<StateEventProcessorContext>,\n event: ToolUseContentBlockStartEvent\n): [StateEventProcessorContext, StateEventProcessorOutput[]] {\n const outputs: StateEventProcessorOutput[] = [];\n\n // Emit ToolPlannedStateEvent\n const toolPlannedEvent: ToolPlannedStateEvent = {\n type: \"tool_planned\",\n uuid: generateId(),\n agentId: event.agentId,\n timestamp: event.timestamp,\n data: {\n id: event.data.id,\n name: event.data.name,\n input: {},\n },\n };\n outputs.push(toolPlannedEvent);\n\n // Emit ToolExecutingStateEvent\n const toolExecutingEvent: ToolExecutingStateEvent = {\n type: \"tool_executing\",\n uuid: generateId(),\n agentId: event.agentId,\n timestamp: event.timestamp,\n transition: {\n reason: \"tool_planning_started\",\n trigger: \"tool_use_content_block_start\",\n },\n data: {},\n };\n outputs.push(toolExecutingEvent);\n\n return [context, outputs];\n}\n\n/**\n * Handle tool_use_content_block_stop event\n *\n * Pass through - no State Event emitted.\n * StateMachine handles the state transition internally.\n */\nfunction handleToolUseContentBlockStop(\n context: Readonly<StateEventProcessorContext>,\n _event: ToolUseContentBlockStopEvent\n): [StateEventProcessorContext, StateEventProcessorOutput[]] {\n // Pass through - no State Event\n return [context, []];\n}\n\n/**\n * Handle tool_call event\n *\n * Pass through - no State Event emitted.\n * StateMachine handles the state transition internally.\n */\nfunction handleToolCall(\n context: Readonly<StateEventProcessorContext>,\n _event: ToolCallEvent\n): [StateEventProcessorContext, StateEventProcessorOutput[]] {\n // Pass through - no State Event\n return [context, []];\n}\n\n/**\n * Handle interrupted event\n *\n * Emits: conversation_interrupted\n *\n * This event signals that the operation was interrupted by user or system.\n * The conversation will transition back to idle state.\n */\nfunction handleInterrupted(\n context: Readonly<StateEventProcessorContext>,\n event: InterruptedStreamEvent\n): [StateEventProcessorContext, StateEventProcessorOutput[]] {\n logger.debug(\"interrupted event received\", { reason: event.data.reason });\n\n const conversationInterruptedEvent: ConversationInterruptedStateEvent = {\n type: \"conversation_interrupted\",\n uuid: generateId(),\n agentId: event.agentId,\n timestamp: event.timestamp,\n transition: {\n reason: event.data.reason,\n trigger: \"interrupted\",\n },\n data: {\n reason: event.data.reason,\n },\n };\n\n return [context, [conversationInterruptedEvent]];\n}\n\n/**\n * StateEvent Processor Definition\n *\n * Stateless event transformer: Stream Events → State Events\n */\nexport const stateEventProcessorDef: ProcessorDefinition<\n StateEventProcessorContext,\n StateEventProcessorInput,\n StateEventProcessorOutput\n> = {\n name: \"StateEventProcessor\",\n description: \"Transform Stream Events into State Events\",\n initialState: createInitialStateEventProcessorContext,\n processor: stateEventProcessor,\n};\n","/**\n * turnTrackerProcessor\n *\n * Pure Mealy transition function that tracks request-response turn pairs.\n *\n * Input Events:\n * - user_message (Message Layer)\n * - message_stop (Stream Layer - contains stop reason)\n * - assistant_message (Message Layer)\n *\n * Output Events (Turn Layer):\n * - turn_request\n * - turn_response\n */\n\nimport type { Processor, ProcessorDefinition } from \"~/mealy\";\nimport type {\n StreamEventType,\n MessageStopEvent,\n UserMessageEvent,\n TurnRequestEvent,\n TurnResponseEvent,\n MessageEventType,\n TokenUsage,\n UserMessage,\n} from \"@agentxjs/types\";\n\n// ===== State Types =====\n\n/**\n * Pending turn tracking\n */\nexport interface PendingTurn {\n turnId: string;\n userMessage: UserMessage;\n requestedAt: number;\n}\n\n/**\n * TurnTrackerState\n *\n * Tracks the current turn state.\n */\nexport interface TurnTrackerState {\n /**\n * Currently pending turn (waiting for response)\n */\n pendingTurn: PendingTurn | null;\n\n /**\n * Cost per input token (USD)\n */\n costPerInputToken: number;\n\n /**\n * Cost per output token (USD)\n */\n costPerOutputToken: number;\n}\n\n/**\n * Initial state factory for TurnTracker\n */\nexport function createInitialTurnTrackerState(): TurnTrackerState {\n return {\n pendingTurn: null,\n costPerInputToken: 0.000003, // $3 per 1M tokens\n costPerOutputToken: 0.000015, // $15 per 1M tokens\n };\n}\n\n// ===== Processor Implementation =====\n\n/**\n * Generate a unique ID\n */\nfunction generateId(): string {\n return `turn_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Output event types from TurnTracker\n */\nexport type TurnTrackerOutput = TurnRequestEvent | TurnResponseEvent;\n\n/**\n * Input event types for TurnTracker\n * Accepts both Stream and Message layer events\n */\nexport type TurnTrackerInput = StreamEventType | MessageEventType;\n\n/**\n * Calculate cost from token usage\n */\nfunction calculateCost(\n usage: TokenUsage,\n costPerInputToken: number,\n costPerOutputToken: number\n): number {\n const inputCost = usage.input * costPerInputToken;\n const outputCost = usage.output * costPerOutputToken;\n return inputCost + outputCost;\n}\n\n/**\n * turnTrackerProcessor\n *\n * Pure Mealy transition function for turn tracking.\n * Pattern: (state, input) => [newState, outputs]\n */\nexport const turnTrackerProcessor: Processor<\n TurnTrackerState,\n TurnTrackerInput,\n TurnTrackerOutput\n> = (state, input): [TurnTrackerState, TurnTrackerOutput[]] => {\n switch (input.type) {\n case \"user_message\":\n return handleUserMessage(state, input);\n\n case \"message_stop\":\n return handleMessageStop(state, input);\n\n case \"assistant_message\":\n // Turn completion is handled in message_stop\n // This handler is kept for potential future use\n return [state, []];\n\n default:\n return [state, []];\n }\n};\n\n/**\n * Handle user_message event\n */\nfunction handleUserMessage(\n state: Readonly<TurnTrackerState>,\n event: UserMessageEvent\n): [TurnTrackerState, TurnTrackerOutput[]] {\n const turnId = generateId();\n\n const pendingTurn: PendingTurn = {\n turnId,\n userMessage: event.data,\n requestedAt: event.timestamp,\n };\n\n const turnRequestEvent: TurnRequestEvent = {\n type: \"turn_request\",\n uuid: generateId(),\n agentId: event.agentId,\n timestamp: Date.now(),\n turnId,\n data: {\n userMessage: event.data,\n requestedAt: event.timestamp,\n },\n };\n\n return [\n {\n ...state,\n pendingTurn,\n },\n [turnRequestEvent],\n ];\n}\n\n/**\n * Handle message_stop event\n */\nfunction handleMessageStop(\n state: Readonly<TurnTrackerState>,\n event: MessageStopEvent\n): [TurnTrackerState, TurnTrackerOutput[]] {\n if (!state.pendingTurn) {\n return [state, []];\n }\n\n const stopReason = event.data.stopReason;\n\n // Complete turn based on stop reason\n // - \"end_turn\": Normal completion (no tool use)\n // - \"tool_use\": Tool calling in progress, DON'T complete yet\n // - \"max_tokens\": Hit token limit, complete turn\n // - \"stop_sequence\": Hit stop sequence, complete turn\n if (stopReason === \"end_turn\" || stopReason === \"max_tokens\" || stopReason === \"stop_sequence\") {\n return completeTurn(state, event.agentId, event.timestamp);\n }\n\n // For tool_use, don't complete turn yet\n return [state, []];\n}\n\n/**\n * Complete the turn and emit TurnResponseEvent\n */\nfunction completeTurn(\n state: Readonly<TurnTrackerState>,\n agentId: string,\n completedAt: number\n): [TurnTrackerState, TurnTrackerOutput[]] {\n if (!state.pendingTurn) {\n return [state, []];\n }\n\n const { turnId, requestedAt } = state.pendingTurn;\n const duration = completedAt - requestedAt;\n\n const usage = { input: 0, output: 0 };\n const cost = calculateCost(usage, state.costPerInputToken, state.costPerOutputToken);\n\n const turnResponseEvent: TurnResponseEvent = {\n type: \"turn_response\",\n uuid: generateId(),\n agentId,\n timestamp: Date.now(),\n turnId,\n data: {\n assistantMessage: {\n id: generateId(),\n role: \"assistant\",\n subtype: \"assistant\",\n content: \"\",\n timestamp: completedAt,\n },\n respondedAt: completedAt,\n durationMs: duration,\n usage,\n costUsd: cost,\n },\n };\n\n return [\n {\n ...state,\n pendingTurn: null,\n },\n [turnResponseEvent],\n ];\n}\n\n/**\n * TurnTracker Processor Definition\n */\nexport const turnTrackerProcessorDef: ProcessorDefinition<\n TurnTrackerState,\n TurnTrackerInput,\n TurnTrackerOutput\n> = {\n name: \"TurnTracker\",\n description: \"Tracks request-response turn pairs\",\n initialState: createInitialTurnTrackerState,\n processor: turnTrackerProcessor,\n};\n","/**\n * AgentProcessor\n *\n * Combined Mealy processor for the full AgentX engine.\n * Composes MessageAssembler, StateMachine, and TurnTracker processors.\n */\n\nimport { combineProcessors, combineInitialStates, type Processor } from \"~/mealy\";\n// Note: StreamEventType and MessageEventType are part of AgentOutput (from Presenter)\n// They flow through the system but AgentProcessor doesn't need to import them directly\nimport {\n messageAssemblerProcessor,\n stateEventProcessor,\n turnTrackerProcessor,\n createInitialMessageAssemblerState,\n createInitialStateEventProcessorContext,\n createInitialTurnTrackerState,\n type MessageAssemblerState,\n type StateEventProcessorContext,\n type TurnTrackerState,\n type MessageAssemblerOutput,\n type StateEventProcessorOutput,\n type TurnTrackerOutput,\n} from \"./internal\";\nimport type { AgentOutput } from \"@agentxjs/types\";\n\n/**\n * Combined state type for the full agent engine\n */\nexport type AgentEngineState = {\n messageAssembler: MessageAssemblerState;\n stateEventProcessor: StateEventProcessorContext;\n turnTracker: TurnTrackerState;\n};\n\n/**\n * Input event type for AgentProcessor\n *\n * Accepts:\n * - StreamEventType: Raw stream events from Driver\n * - MessageEventType: Re-injected message events (for TurnTracker)\n *\n * Note: AgentOutput is used because re-injected events can be any output type\n */\nexport type AgentProcessorInput = AgentOutput;\n\n/**\n * Output event type from AgentProcessor\n *\n * Produces:\n * - MessageAssemblerOutput: Assembled message events\n * - StateEventProcessorOutput: State transition events\n * - TurnTrackerOutput: Turn analytics events\n *\n * Note: StreamEventType is NOT in output - it's passed through by AgentEngine\n */\nexport type AgentProcessorOutput =\n | MessageAssemblerOutput\n | StateEventProcessorOutput\n | TurnTrackerOutput;\n\n/**\n * Combined processor for the full agent engine\n *\n * This combines:\n * - MessageAssembler: Stream → Message events\n * - StateEventProcessor: Stream → State events\n * - TurnTracker: Message → Turn events\n *\n * Pattern: (state, input) => [newState, outputs]\n * Key insight: State is means, outputs are the goal (Mealy Machine)\n *\n * Note: Raw StreamEvents are NOT output by this processor.\n * The AgentEngine handles pass-through of original events.\n */\nexport const agentProcessor = combineProcessors<\n AgentEngineState,\n AgentProcessorInput,\n AgentProcessorOutput\n>({\n messageAssembler: messageAssemblerProcessor as Processor<\n AgentEngineState[\"messageAssembler\"],\n AgentProcessorInput,\n AgentProcessorOutput\n >,\n stateEventProcessor: stateEventProcessor as Processor<\n AgentEngineState[\"stateEventProcessor\"],\n AgentProcessorInput,\n AgentProcessorOutput\n >,\n turnTracker: turnTrackerProcessor as Processor<\n AgentEngineState[\"turnTracker\"],\n AgentProcessorInput,\n AgentProcessorOutput\n >,\n});\n\n/**\n * Initial state factory for the full agent engine\n */\nexport const createInitialAgentEngineState = combineInitialStates<AgentEngineState>({\n messageAssembler: createInitialMessageAssemblerState,\n stateEventProcessor: createInitialStateEventProcessorContext,\n turnTracker: createInitialTurnTrackerState,\n});\n","/**\n * AgentEngine - Pure Mealy Machine Event Processor\n *\n * AgentEngine is a stateless event processor that transforms stream events\n * into higher-level events (state, message, turn events).\n *\n * Key Design:\n * - Engine is a pure Mealy Machine: process(agentId, event) → outputs\n * - Engine does NOT hold driver or presenters (those belong to Agent layer)\n * - Engine manages intermediate processing state per agentId\n * - Multiple agents can share the same Engine instance\n *\n * State Management:\n * - Processing state (pendingContents, etc.) is managed internally per agentId\n * - Business data persistence is NOT handled here - that's Agent layer's job\n *\n * Usage:\n * ```typescript\n * const engine = new AgentEngine();\n *\n * // Agent layer coordinates:\n * // 1. Driver produces stream events\n * // 2. Engine processes events\n * // 3. Presenters handle outputs\n *\n * for await (const streamEvent of driver.receive(message, context)) {\n * const outputs = engine.process(agentId, streamEvent);\n * for (const output of outputs) {\n * presenters.forEach(p => p.present(agentId, output));\n * }\n * }\n * ```\n */\n\nimport {\n agentProcessor,\n createInitialAgentEngineState,\n type AgentEngineState,\n} from \"./AgentProcessor\";\nimport { MemoryStore } from \"~/mealy\";\nimport type { AgentOutput, StreamEventType } from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"engine/AgentEngine\");\n\n/**\n * AgentEngine - Pure Mealy Machine for event processing\n *\n * - Input: StreamEventType (from Driver)\n * - Output: AgentOutput[] (state, message, turn events)\n * - State: Managed internally per agentId\n */\nexport class AgentEngine {\n private readonly store: MemoryStore<AgentEngineState>;\n\n constructor() {\n this.store = new MemoryStore<AgentEngineState>();\n logger.debug(\"AgentEngine initialized\");\n }\n\n /**\n * Process a single stream event and return output events\n *\n * This is the core Mealy Machine operation:\n * process(agentId, event) → outputs[]\n *\n * @param agentId - The agent identifier (for state isolation)\n * @param event - Stream event to process\n * @returns Array of output events (state, message, turn events)\n */\n process(agentId: string, event: StreamEventType): AgentOutput[] {\n const eventType = (event as any).type || \"unknown\";\n logger.debug(\"Processing event\", { agentId, eventType });\n\n // Get current state or create initial state\n const isNewState = !this.store.has(agentId);\n let state = this.store.get(agentId) ?? createInitialAgentEngineState();\n\n if (isNewState) {\n logger.debug(\"Created initial state for agent\", { agentId });\n }\n\n // Collect all outputs\n const allOutputs: AgentOutput[] = [];\n\n // Pass-through: original stream event is also an output\n allOutputs.push(event);\n\n // Process through Mealy Machine\n const [newState, outputs] = agentProcessor(state, event);\n state = newState;\n\n // Collect processor outputs\n for (const output of outputs) {\n allOutputs.push(output);\n\n // Re-inject for event chaining (e.g., TurnTracker needs MessageEvents)\n const [chainedState, chainedOutputs] = this.processChained(state, output);\n state = chainedState;\n allOutputs.push(...chainedOutputs);\n }\n\n // Store updated state\n this.store.set(agentId, state);\n\n if (outputs.length > 0) {\n logger.debug(\"Produced outputs\", {\n agentId,\n inputEvent: eventType,\n outputCount: allOutputs.length,\n processorOutputs: outputs.length,\n });\n }\n\n return allOutputs;\n }\n\n /**\n * Process chained events recursively\n *\n * Some processors produce events that trigger other processors:\n * - MessageAssembler produces MessageEvents\n * - TurnTracker consumes MessageEvents to produce TurnEvents\n */\n private processChained(\n state: AgentEngineState,\n event: AgentOutput\n ): [AgentEngineState, AgentOutput[]] {\n const [newState, outputs] = agentProcessor(state, event);\n\n if (outputs.length === 0) {\n return [newState, []];\n }\n\n // Process outputs recursively\n const allOutputs: AgentOutput[] = [...outputs];\n let currentState = newState;\n\n for (const output of outputs) {\n const [chainedState, chainedOutputs] = this.processChained(currentState, output);\n currentState = chainedState;\n allOutputs.push(...chainedOutputs);\n }\n\n return [currentState, allOutputs];\n }\n\n /**\n * Clear state for an agent\n *\n * Call this when an agent is destroyed to free memory.\n */\n clearState(agentId: string): void {\n logger.debug(\"Clearing state\", { agentId });\n this.store.delete(agentId);\n }\n\n /**\n * Check if state exists for an agent\n */\n hasState(agentId: string): boolean {\n return this.store.has(agentId);\n }\n}\n\n/**\n * Factory function to create AgentEngine\n */\nexport function createAgentEngine(): AgentEngine {\n return new AgentEngine();\n}\n","/**\n * ContainerManagerImpl - Implementation of ContainerManager\n *\n * Manages container lifecycle and agent runtime using:\n * - Repository: Persistence for ContainerRecord\n * - Runtime: createSandbox, createDriver for agent creation\n * - AgentEngine: Event processing\n */\n\nimport type {\n Agent,\n AgentImage,\n Session,\n ContainerRecord,\n ContainerConfig,\n Repository,\n Runtime,\n AgentContext,\n AgentDefinition,\n} from \"@agentxjs/types\";\nimport { AgentInstance } from \"@agentxjs/agent\";\nimport { AgentEngine } from \"@agentxjs/engine\";\nimport { createLogger } from \"@agentxjs/common\";\nimport type { ContainerManager } from \"./ContainerManager\";\n\nconst logger = createLogger(\"agentx/ContainerManager\");\n\n/**\n * Generate unique container ID\n */\nfunction generateContainerId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `container_${timestamp}_${random}`;\n}\n\n/**\n * Generate unique agent ID\n */\nfunction generateAgentId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `agent_${timestamp}_${random}`;\n}\n\n/**\n * ContainerManager implementation\n */\nexport class ContainerManagerImpl implements ContainerManager {\n private readonly agents = new Map<string, Agent>();\n private readonly engine: AgentEngine;\n private readonly runtime: Runtime;\n private readonly repository: Repository;\n\n constructor(runtime: Runtime, repository: Repository) {\n this.runtime = runtime;\n this.repository = repository;\n this.engine = new AgentEngine();\n }\n\n // ==================== Container Lifecycle ====================\n\n async create(config?: ContainerConfig): Promise<ContainerRecord> {\n const containerId = generateContainerId();\n const now = Date.now();\n\n const record: ContainerRecord = {\n containerId,\n createdAt: now,\n updatedAt: now,\n config,\n };\n\n await this.repository.saveContainer(record);\n\n logger.info(\"Container created\", { containerId });\n\n return record;\n }\n\n async get(containerId: string): Promise<ContainerRecord | null> {\n return this.repository.findContainerById(containerId);\n }\n\n async list(): Promise<ContainerRecord[]> {\n return this.repository.findAllContainers();\n }\n\n async delete(containerId: string): Promise<boolean> {\n const exists = await this.repository.containerExists(containerId);\n if (!exists) {\n return false;\n }\n\n await this.repository.deleteContainer(containerId);\n logger.info(\"Container deleted\", { containerId });\n return true;\n }\n\n async exists(containerId: string): Promise<boolean> {\n return this.repository.containerExists(containerId);\n }\n\n // ==================== Agent Runtime ====================\n\n async run(image: AgentImage, containerId: string): Promise<Agent> {\n logger.info(\"Running agent from image\", {\n imageId: image.imageId,\n containerId,\n });\n\n // Verify container exists\n const container = await this.repository.findContainerById(containerId);\n if (!container) {\n throw new Error(`Container not found: ${containerId}`);\n }\n\n // Resolve agent ID (local or from server depending on Runtime)\n let agentId: string;\n if (this.runtime.agentIdResolver) {\n agentId = await this.runtime.agentIdResolver.resolveForRun(image.imageId, containerId);\n } else {\n agentId = generateAgentId();\n }\n\n // Create context\n const context: AgentContext = {\n agentId,\n createdAt: Date.now(),\n };\n\n // Create sandbox using containerId for isolation\n const sandbox = this.runtime.createSandbox(containerId);\n\n // Create driver\n const driver = this.runtime.createDriver(image.definition, context, sandbox);\n\n // Create agent\n const agent = new AgentInstance(image.definition, context, this.engine, driver, sandbox);\n\n // Register agent\n this.agents.set(agentId, agent);\n\n logger.info(\"Agent started\", {\n agentId,\n imageId: image.imageId,\n containerId,\n definitionName: image.definition.name,\n });\n\n return agent;\n }\n\n async resume(session: Session, containerId: string): Promise<Agent> {\n logger.info(\"Resuming agent from session\", {\n sessionId: session.sessionId,\n imageId: session.imageId,\n containerId,\n });\n\n // Verify container exists\n const container = await this.repository.findContainerById(containerId);\n if (!container) {\n throw new Error(`Container not found: ${containerId}`);\n }\n\n // Get image from repository\n const imageRecord = await this.repository.findImageById(session.imageId);\n if (!imageRecord) {\n throw new Error(`Image not found: ${session.imageId}`);\n }\n\n // Resolve agent ID (local or from server depending on Runtime)\n let agentId: string;\n if (this.runtime.agentIdResolver) {\n agentId = await this.runtime.agentIdResolver.resolveForResume(session.sessionId, containerId);\n } else {\n agentId = generateAgentId();\n }\n\n // Create context\n const context: AgentContext = {\n agentId,\n createdAt: Date.now(),\n };\n\n // Create sandbox using containerId for isolation\n const sandbox = this.runtime.createSandbox(containerId);\n\n // Create driver\n const definition = imageRecord.definition as unknown as AgentDefinition;\n const driver = this.runtime.createDriver(definition, context, sandbox);\n\n // Create agent\n const agent = new AgentInstance(definition, context, this.engine, driver, sandbox);\n\n // Register agent\n this.agents.set(agentId, agent);\n\n logger.info(\"Agent resumed\", {\n agentId,\n sessionId: session.sessionId,\n imageId: session.imageId,\n containerId,\n });\n\n return agent;\n }\n\n async destroyAgent(agentId: string): Promise<void> {\n const agent = this.agents.get(agentId);\n if (!agent) {\n logger.warn(\"Agent not found for destroy\", { agentId });\n return;\n }\n\n logger.debug(\"Destroying agent\", { agentId });\n await agent.destroy();\n this.agents.delete(agentId);\n logger.info(\"Agent destroyed\", { agentId });\n }\n\n getAgent(agentId: string): Agent | undefined {\n return this.agents.get(agentId);\n }\n\n hasAgent(agentId: string): boolean {\n return this.agents.has(agentId);\n }\n\n listAgents(): Agent[] {\n return Array.from(this.agents.values());\n }\n\n async destroyAllAgents(): Promise<void> {\n const agentIds = Array.from(this.agents.keys());\n logger.debug(\"Destroying all agents\", { count: agentIds.length });\n await Promise.all(agentIds.map((id) => this.destroyAgent(id)));\n logger.info(\"All agents destroyed\", { count: agentIds.length });\n }\n}\n","/**\n * AgentX - Platform API Implementation\n *\n * The central entry point for all agent operations.\n * Runtime determines the execution environment (Node.js, Browser, etc.)\n *\n * @example\n * ```typescript\n * import { createAgentX } from \"agentxjs\";\n * import { nodeRuntime } from \"agentxjs-runtime\";\n *\n * const agentx = createAgentX(nodeRuntime());\n *\n * // Simple usage (auto-created default container)\n * const agent = await agentx.images.run(imageId);\n *\n * // Multi-tenant usage (explicit container)\n * const container = await agentx.containers.create();\n * const agent = await agentx.images.run(imageId, { containerId: container.containerId });\n * ```\n */\n\nimport type { AgentX, Runtime } from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\nimport {\n AgentManager,\n SessionManagerImpl,\n ErrorManager,\n DefinitionManagerImpl,\n ImageManagerImpl,\n} from \"./managers\";\nimport { ContainerManagerImpl } from \"./container\";\n\nconst logger = createLogger(\"agentx/AgentX\");\n\n/**\n * AgentX creation options\n */\nexport interface CreateAgentXOptions {\n /**\n * Default container ID to use for operations\n * If not provided, a default container will be auto-created\n */\n containerId?: string;\n}\n\n/**\n * Create AgentX instance with Runtime\n *\n * @param runtime - Runtime provides infrastructure (createSandbox, createDriver, repository)\n * @param options - Optional configuration\n * @returns AgentX instance\n *\n * @example\n * ```typescript\n * import { createAgentX } from \"agentxjs\";\n * import { nodeRuntime } from \"agentxjs-runtime\";\n *\n * // Simple usage - auto-creates default container\n * const agentx = createAgentX(nodeRuntime());\n *\n * // Multi-tenant - specify container\n * const agentx = createAgentX(nodeRuntime(), { containerId: \"tenant_123\" });\n * ```\n */\nexport function createAgentX(runtime: Runtime, options?: CreateAgentXOptions): AgentX {\n logger.info(\"Creating AgentX instance\", { runtime: runtime.name });\n\n // Check repository\n if (!runtime.repository) {\n throw new Error(\"Runtime must have a repository for persistence\");\n }\n\n const repository = runtime.repository;\n\n // Create container manager\n const containerManager = new ContainerManagerImpl(runtime, repository);\n\n // Create other managers\n const errorManager = new ErrorManager();\n const definitionManager = new DefinitionManagerImpl(repository);\n const agentManager = new AgentManager(containerManager);\n\n // Create image manager with repository and container manager\n const imageManager = new ImageManagerImpl(repository, containerManager, options?.containerId);\n\n // Create session manager with repository and container manager\n const sessionManager = new SessionManagerImpl(repository, containerManager, options?.containerId);\n\n logger.debug(\"AgentX instance created\", { runtime: runtime.name });\n\n return {\n mode: \"local\",\n containers: containerManager,\n definitions: definitionManager,\n images: imageManager,\n agents: agentManager,\n sessions: sessionManager,\n errors: errorManager,\n };\n}\n","/* eslint-disable no-undef */\n/**\n * SSEDriver - Browser-side driver that connects to remote AgentX server via SSE\n *\n * This driver enables the client to use the full agentx stack (including AgentEngine)\n * by bridging SSE push events to the async generator pull model.\n *\n * @example\n * ```typescript\n * import { createSSERuntime } from \"agentxjs/client\";\n * import { createAgentX, defineAgent } from \"agentxjs\";\n *\n * const runtime = createSSERuntime({\n * serverUrl: \"http://localhost:5200/agentx\",\n * agentId: \"agent_123\"\n * });\n * const agentx = createAgentX(runtime);\n * const agent = agentx.agents.create(defineAgent({ name: \"Assistant\" }));\n *\n * agent.on(\"assistant_message\", (event) => {\n * console.log(event.data.content);\n * });\n *\n * await agent.receive(\"Hello!\");\n * ```\n */\n\nimport type { UserMessage, StreamEventType, AgentDriver } from \"@agentxjs/types\";\nimport { STREAM_EVENT_TYPE_NAMES } from \"@agentxjs/types\";\n\n/**\n * Persistent SSE connection manager\n *\n * Maintains a single SSE connection for the lifetime of the driver.\n * Bridges SSE push model to async generator pull model for each receive() call.\n */\nclass PersistentSSEConnection {\n private eventSource: EventSource | null = null;\n private messageQueue: StreamEventType[] = [];\n private activeIterators: Set<{\n resolve: (result: IteratorResult<StreamEventType>) => void;\n reject: (error: Error) => void;\n }> = new Set();\n private isDone = false;\n\n constructor(\n private readonly serverUrl: string,\n private readonly agentId: string,\n private readonly sseParams: Record<string, string> = {}\n ) {}\n\n /**\n * Initialize SSE connection\n */\n connect(): void {\n if (this.eventSource) {\n return; // Already connected\n }\n\n // Build SSE URL with optional query parameters (for auth, etc.)\n let sseUrl = `${this.serverUrl}/agents/${this.agentId}/sse`;\n if (Object.keys(this.sseParams).length > 0) {\n const params = new URLSearchParams(this.sseParams);\n sseUrl += `?${params.toString()}`;\n }\n this.eventSource = new EventSource(sseUrl);\n\n const handleEvent = (event: MessageEvent) => {\n try {\n const data = JSON.parse(event.data) as StreamEventType;\n\n // Notify all active iterators\n if (this.activeIterators.size > 0) {\n const iterator = this.activeIterators.values().next().value;\n if (iterator) {\n this.activeIterators.delete(iterator);\n iterator.resolve({ value: data, done: false });\n }\n } else {\n // Queue event if no iterator is waiting\n this.messageQueue.push(data);\n }\n } catch {\n // Ignore parse errors\n }\n };\n\n const handleError = () => {\n this.isDone = true;\n this.eventSource?.close();\n this.eventSource = null;\n\n // Reject all waiting iterators\n for (const iterator of this.activeIterators) {\n iterator.reject(new Error(\"SSE connection error\"));\n }\n this.activeIterators.clear();\n };\n\n // Listen for all stream event types\n for (const eventType of STREAM_EVENT_TYPE_NAMES) {\n this.eventSource.addEventListener(eventType, handleEvent as any);\n }\n\n // Listen for error events (independent from stream events, transportable via SSE)\n this.eventSource.addEventListener(\"error\", handleEvent as any);\n\n // Also listen for generic message events (fallback)\n this.eventSource.onmessage = handleEvent;\n\n // Handle SSE connection errors (different from our ErrorEvent)\n this.eventSource.onerror = handleError;\n }\n\n /**\n * Create an async iterable for a single receive() call\n *\n * This iterator continues until a final message_stop is received (stopReason !== \"tool_use\").\n * For tool calls, this means it will span multiple message_start/message_stop cycles.\n * The SSE connection itself remains open for future receive() calls.\n */\n createIterator(): AsyncIterable<StreamEventType> {\n const connection = this;\n\n return {\n [Symbol.asyncIterator]() {\n let turnComplete = false;\n\n return {\n async next(): Promise<IteratorResult<StreamEventType>> {\n // Return queued events first\n if (connection.messageQueue.length > 0) {\n const event = connection.messageQueue.shift()!;\n\n // Check if turn is complete at message_stop\n // Continue if stopReason is \"tool_use\", stop otherwise\n if (event.type === \"message_stop\") {\n const stopReason = event.data.stopReason;\n if (stopReason !== \"tool_use\") {\n turnComplete = true;\n }\n }\n\n return { value: event, done: false };\n }\n\n // If turn is complete, end iteration (but keep connection open for next receive())\n if (turnComplete) {\n return { done: true, value: undefined as any };\n }\n\n // If connection died, end iteration\n if (connection.isDone) {\n return { done: true, value: undefined as any };\n }\n\n // Wait for next event\n return new Promise((resolve, reject) => {\n // Wrap resolve to check for completion\n const wrappedResolve = (result: IteratorResult<StreamEventType>) => {\n if (!result.done) {\n // Check if turn is complete at message_stop\n if (result.value.type === \"message_stop\") {\n const stopReason = result.value.data.stopReason;\n if (stopReason !== \"tool_use\") {\n turnComplete = true;\n }\n }\n }\n resolve(result);\n };\n\n const iterator = { resolve: wrappedResolve, reject };\n connection.activeIterators.add(iterator);\n });\n },\n\n async return(): Promise<IteratorResult<StreamEventType>> {\n // Cleanup this iterator (but keep connection alive)\n return { done: true, value: undefined as any };\n },\n };\n },\n };\n }\n\n /**\n * Close the connection\n */\n close(): void {\n this.isDone = true;\n\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = null;\n }\n\n // Reject all waiting iterators\n for (const iterator of this.activeIterators) {\n iterator.reject(new Error(\"Connection closed\"));\n }\n this.activeIterators.clear();\n this.messageQueue = [];\n }\n}\n\n/**\n * SSEDriver configuration\n */\nexport interface SSEDriverConfig {\n serverUrl: string;\n agentId: string;\n headers?: Record<string, string>;\n /**\n * Query parameters to append to SSE URL.\n * Use this for authentication since EventSource doesn't support headers.\n */\n sseParams?: Record<string, string>;\n}\n\n/**\n * Create an SSEDriver instance\n *\n * Factory function for browser-side SSE driver.\n */\nexport function createSSEDriver(config: SSEDriverConfig): AgentDriver {\n const { serverUrl, agentId, headers = {}, sseParams = {} } = config;\n let connection: PersistentSSEConnection | null = null;\n\n return {\n name: \"SSEDriver\",\n\n async *receive(message: UserMessage): AsyncIterable<StreamEventType> {\n // 1. Ensure SSE connection is established\n if (!connection) {\n connection = new PersistentSSEConnection(serverUrl, agentId, sseParams);\n connection.connect();\n }\n\n // 2. Send message to server via HTTP POST\n const messageUrl = `${serverUrl}/agents/${agentId}/messages`;\n const response = await fetch(messageUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify({\n content: typeof message.content === \"string\" ? message.content : message.content,\n }),\n });\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string };\n };\n throw new Error(errorBody.error?.message || `HTTP ${response.status}`);\n }\n\n // 3. Yield events from persistent SSE connection\n yield* connection.createIterator();\n },\n\n interrupt(): void {\n // Call server interrupt endpoint (fire-and-forget)\n const interruptUrl = `${serverUrl}/agents/${agentId}/interrupt`;\n fetch(interruptUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n }).catch(() => {\n // Ignore errors - interrupt is best-effort\n });\n },\n };\n}\n","/**\n * RemoteRepository - HTTP-based repository implementation\n *\n * Communicates with remote AgentX server for persistence.\n *\n * Part of Docker-style layered architecture:\n * Definition → build → Image → run → Agent\n * ↓\n * Session (external wrapper)\n */\n\nimport type {\n Repository,\n DefinitionRecord,\n ImageRecord,\n SessionRecord,\n MessageRecord,\n ContainerRecord,\n} from \"@agentxjs/types\";\nimport { createLogger } from \"@agentxjs/common\";\nimport { createHttpClient, type KyInstance } from \"~/managers/remote/HttpClient\";\n\nconst logger = createLogger(\"agentx/RemoteRepository\");\n\nexport interface RemoteRepositoryOptions {\n serverUrl: string;\n headers?: Record<string, string>;\n}\n\nexport class RemoteRepository implements Repository {\n private readonly client: KyInstance;\n\n constructor(options: RemoteRepositoryOptions) {\n this.client = createHttpClient({\n baseUrl: options.serverUrl,\n headers: options.headers,\n });\n logger.debug(\"RemoteRepository created\", { serverUrl: options.serverUrl });\n }\n\n // ==================== Definition ====================\n\n async saveDefinition(record: DefinitionRecord): Promise<void> {\n await this.client.put(`definitions/${record.name}`, { json: record });\n }\n\n async findDefinitionByName(name: string): Promise<DefinitionRecord | null> {\n try {\n const result = await this.client.get(`definitions/${name}`).json<DefinitionRecord>();\n return this.parseDefinitionRecord(result);\n } catch (error: unknown) {\n if (this.isNotFound(error)) return null;\n throw error;\n }\n }\n\n async findAllDefinitions(): Promise<DefinitionRecord[]> {\n const result = await this.client.get(\"definitions\").json<DefinitionRecord[]>();\n return result.map((r) => this.parseDefinitionRecord(r));\n }\n\n async deleteDefinition(name: string): Promise<void> {\n await this.client.delete(`definitions/${name}`);\n }\n\n async definitionExists(name: string): Promise<boolean> {\n try {\n await this.client.head(`definitions/${name}`);\n return true;\n } catch {\n return false;\n }\n }\n\n // ==================== Image ====================\n\n async saveImage(record: ImageRecord): Promise<void> {\n await this.client.put(`images/${record.imageId}`, { json: record });\n }\n\n async findImageById(imageId: string): Promise<ImageRecord | null> {\n try {\n const result = await this.client.get(`images/${imageId}`).json<ImageRecord>();\n return this.parseImageRecord(result);\n } catch (error: unknown) {\n if (this.isNotFound(error)) return null;\n throw error;\n }\n }\n\n async findAllImages(): Promise<ImageRecord[]> {\n const result = await this.client.get(\"images\").json<ImageRecord[]>();\n return result.map((r) => this.parseImageRecord(r));\n }\n\n async deleteImage(imageId: string): Promise<void> {\n await this.client.delete(`images/${imageId}`);\n }\n\n async imageExists(imageId: string): Promise<boolean> {\n try {\n await this.client.head(`images/${imageId}`);\n return true;\n } catch {\n return false;\n }\n }\n\n // ==================== Session ====================\n\n async saveSession(record: SessionRecord): Promise<void> {\n await this.client.put(`sessions/${record.sessionId}`, { json: record });\n }\n\n async findSessionById(sessionId: string): Promise<SessionRecord | null> {\n try {\n const result = await this.client.get(`sessions/${sessionId}`).json<SessionRecord>();\n return this.parseSessionRecord(result);\n } catch (error: unknown) {\n if (this.isNotFound(error)) return null;\n throw error;\n }\n }\n\n async findSessionsByImageId(imageId: string): Promise<SessionRecord[]> {\n const result = await this.client.get(`images/${imageId}/sessions`).json<SessionRecord[]>();\n return result.map((r) => this.parseSessionRecord(r));\n }\n\n async findSessionsByUserId(userId: string): Promise<SessionRecord[]> {\n const result = await this.client.get(`users/${userId}/sessions`).json<SessionRecord[]>();\n return result.map((r) => this.parseSessionRecord(r));\n }\n\n async findAllSessions(): Promise<SessionRecord[]> {\n const result = await this.client.get(\"sessions\").json<SessionRecord[]>();\n return result.map((r) => this.parseSessionRecord(r));\n }\n\n async deleteSession(sessionId: string): Promise<void> {\n await this.client.delete(`sessions/${sessionId}`);\n }\n\n async deleteSessionsByImageId(imageId: string): Promise<void> {\n await this.client.delete(`images/${imageId}/sessions`);\n }\n\n async sessionExists(sessionId: string): Promise<boolean> {\n try {\n await this.client.head(`sessions/${sessionId}`);\n return true;\n } catch {\n return false;\n }\n }\n\n // ==================== Message ====================\n\n /**\n * Save message - noop in browser\n *\n * Messages are persisted by server-side SessionCollector.\n * Browser-side calls this but it does nothing to avoid duplicate saves.\n */\n async saveMessage(_record: MessageRecord): Promise<void> {\n // Noop - server handles persistence via SessionCollector\n logger.debug(\"saveMessage called (noop in browser)\");\n }\n\n async findMessageById(messageId: string): Promise<MessageRecord | null> {\n try {\n const result = await this.client.get(`messages/${messageId}`).json<MessageRecord>();\n return this.parseMessageRecord(result);\n } catch (error: unknown) {\n if (this.isNotFound(error)) return null;\n throw error;\n }\n }\n\n async findMessagesBySessionId(sessionId: string): Promise<MessageRecord[]> {\n const result = await this.client.get(`sessions/${sessionId}/messages`).json<MessageRecord[]>();\n return result.map((r) => this.parseMessageRecord(r));\n }\n\n async deleteMessage(messageId: string): Promise<void> {\n await this.client.delete(`messages/${messageId}`);\n }\n\n async deleteMessagesBySessionId(sessionId: string): Promise<void> {\n await this.client.delete(`sessions/${sessionId}/messages`);\n }\n\n async countMessagesBySessionId(sessionId: string): Promise<number> {\n const result = await this.client\n .get(`sessions/${sessionId}/messages/count`)\n .json<{ count: number }>();\n return result.count;\n }\n\n // ==================== Container ====================\n\n async saveContainer(record: ContainerRecord): Promise<void> {\n await this.client.put(`containers/${record.containerId}`, { json: record });\n }\n\n async findContainerById(containerId: string): Promise<ContainerRecord | null> {\n try {\n const result = await this.client.get(`containers/${containerId}`).json<ContainerRecord>();\n return this.parseContainerRecord(result);\n } catch (error: unknown) {\n if (this.isNotFound(error)) return null;\n throw error;\n }\n }\n\n async findAllContainers(): Promise<ContainerRecord[]> {\n const result = await this.client.get(\"containers\").json<ContainerRecord[]>();\n return result.map((r) => this.parseContainerRecord(r));\n }\n\n async deleteContainer(containerId: string): Promise<void> {\n await this.client.delete(`containers/${containerId}`);\n }\n\n async containerExists(containerId: string): Promise<boolean> {\n try {\n await this.client.head(`containers/${containerId}`);\n return true;\n } catch {\n return false;\n }\n }\n\n // ==================== Helpers ====================\n\n private isNotFound(error: unknown): boolean {\n return (error as { response?: { status: number } })?.response?.status === 404;\n }\n\n private parseDefinitionRecord(raw: DefinitionRecord): DefinitionRecord {\n return {\n ...raw,\n createdAt: new Date(raw.createdAt),\n updatedAt: new Date(raw.updatedAt),\n };\n }\n\n private parseImageRecord(raw: ImageRecord): ImageRecord {\n return {\n ...raw,\n createdAt: new Date(raw.createdAt),\n };\n }\n\n private parseSessionRecord(raw: SessionRecord): SessionRecord {\n return {\n ...raw,\n createdAt: new Date(raw.createdAt),\n updatedAt: new Date(raw.updatedAt),\n };\n }\n\n private parseMessageRecord(raw: MessageRecord): MessageRecord {\n return {\n ...raw,\n createdAt: new Date(raw.createdAt),\n };\n }\n\n private parseContainerRecord(raw: ContainerRecord): ContainerRecord {\n return {\n ...raw,\n // ContainerRecord uses number timestamps, no conversion needed\n };\n }\n}\n","/**\n * BrowserLogger - Styled console logger for browsers\n *\n * Uses CSS styling for beautiful console output in browser DevTools.\n * Provides colorful, grouped logs with timestamps.\n */\n\nimport type { Logger, LogContext, LogLevel } from \"@agentxjs/types\";\nimport { LogLevel as LogLevelEnum } from \"@agentxjs/types\";\n\nexport interface BrowserLoggerOptions {\n level?: LogLevel;\n collapsed?: boolean; // Use console.groupCollapsed for context\n}\n\nexport class BrowserLogger implements Logger {\n readonly name: string;\n readonly level: LogLevel;\n private readonly collapsed: boolean;\n\n // CSS styles for different log levels\n private static readonly STYLES = {\n DEBUG: \"color: #6B7280; font-weight: normal;\", // gray\n INFO: \"color: #10B981; font-weight: normal;\", // green\n WARN: \"color: #F59E0B; font-weight: bold;\", // amber\n ERROR: \"color: #EF4444; font-weight: bold;\", // red\n TIMESTAMP: \"color: #9CA3AF; font-weight: normal;\", // light gray\n NAME: \"color: #8B5CF6; font-weight: normal;\", // purple\n MESSAGE: \"color: inherit; font-weight: normal;\",\n };\n\n // Badge styles for level indicators\n private static readonly BADGE_STYLES = {\n DEBUG:\n \"background: #E5E7EB; color: #374151; padding: 2px 6px; border-radius: 3px; font-size: 11px;\",\n INFO: \"background: #D1FAE5; color: #065F46; padding: 2px 6px; border-radius: 3px; font-size: 11px;\",\n WARN: \"background: #FEF3C7; color: #92400E; padding: 2px 6px; border-radius: 3px; font-size: 11px;\",\n ERROR:\n \"background: #FEE2E2; color: #991B1B; padding: 2px 6px; border-radius: 3px; font-size: 11px;\",\n };\n\n constructor(name: string, options: BrowserLoggerOptions = {}) {\n this.name = name;\n this.level = options.level ?? LogLevelEnum.INFO;\n this.collapsed = options.collapsed ?? true;\n }\n\n debug(message: string, context?: LogContext): void {\n if (this.isDebugEnabled()) {\n this.log(\"DEBUG\", message, context);\n }\n }\n\n info(message: string, context?: LogContext): void {\n if (this.isInfoEnabled()) {\n this.log(\"INFO\", message, context);\n }\n }\n\n warn(message: string, context?: LogContext): void {\n if (this.isWarnEnabled()) {\n this.log(\"WARN\", message, context);\n }\n }\n\n error(message: string | Error, context?: LogContext): void {\n if (this.isErrorEnabled()) {\n if (message instanceof Error) {\n this.log(\"ERROR\", message.message, { ...context, stack: message.stack });\n } else {\n this.log(\"ERROR\", message, context);\n }\n }\n }\n\n isDebugEnabled(): boolean {\n return this.level <= LogLevelEnum.DEBUG;\n }\n\n isInfoEnabled(): boolean {\n return this.level <= LogLevelEnum.INFO;\n }\n\n isWarnEnabled(): boolean {\n return this.level <= LogLevelEnum.WARN;\n }\n\n isErrorEnabled(): boolean {\n return this.level <= LogLevelEnum.ERROR;\n }\n\n private log(level: string, message: string, context?: LogContext): void {\n const timestamp = new Date().toLocaleTimeString();\n const consoleMethod = this.getConsoleMethod(level);\n const badgeStyle = BrowserLogger.BADGE_STYLES[level as keyof typeof BrowserLogger.BADGE_STYLES];\n\n // Format: [TIME] [LEVEL] [NAME] message\n const format = `%c${timestamp} %c${level}%c %c[${this.name}]%c ${message}`;\n const styles = [\n BrowserLogger.STYLES.TIMESTAMP,\n badgeStyle,\n \"\", // reset after badge\n BrowserLogger.STYLES.NAME,\n BrowserLogger.STYLES.MESSAGE,\n ];\n\n if (context && Object.keys(context).length > 0) {\n // Use grouping for context\n const groupMethod = this.collapsed ? console.groupCollapsed : console.group;\n groupMethod.call(console, format, ...styles);\n console.log(\"Context:\", context);\n console.groupEnd();\n } else {\n consoleMethod(format, ...styles);\n }\n }\n\n private getConsoleMethod(level: string): (...args: unknown[]) => void {\n switch (level) {\n case \"DEBUG\":\n return console.debug.bind(console);\n case \"INFO\":\n return console.info.bind(console);\n case \"WARN\":\n return console.warn.bind(console);\n case \"ERROR\":\n return console.error.bind(console);\n default:\n return console.log.bind(console);\n }\n }\n}\n","/**\n * BrowserLoggerFactory - Factory for creating BrowserLogger instances\n *\n * Creates styled console loggers for browser environments.\n * Used by SSERuntime to provide browser-optimized logging.\n */\n\nimport type { Logger, LoggerFactory, LogLevel } from \"@agentxjs/types\";\nimport { BrowserLogger, type BrowserLoggerOptions } from \"./BrowserLogger\";\n\nexport interface BrowserLoggerFactoryOptions {\n level?: LogLevel;\n collapsed?: boolean;\n}\n\nexport class BrowserLoggerFactory implements LoggerFactory {\n private readonly options: BrowserLoggerOptions;\n private readonly loggers: Map<string, BrowserLogger> = new Map();\n\n constructor(options: BrowserLoggerFactoryOptions = {}) {\n this.options = options;\n }\n\n getLogger(name: string): Logger {\n if (this.loggers.has(name)) {\n return this.loggers.get(name)!;\n }\n\n const logger = new BrowserLogger(name, this.options);\n this.loggers.set(name, logger);\n return logger;\n }\n}\n","/**\n * RemoteAgentIdResolver - Resolves agent ID from remote server\n *\n * Calls server API to create agent and returns server's agent ID.\n * This ensures browser and server use the same agentId.\n */\n\nimport type { AgentIdResolver } from \"@agentxjs/types\";\nimport { createHttpClient, type KyInstance } from \"~/managers/remote/HttpClient\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/RemoteAgentIdResolver\");\n\nexport interface RemoteAgentIdResolverOptions {\n serverUrl: string;\n headers?: Record<string, string>;\n}\n\ninterface RunImageResponse {\n agentId: string;\n}\n\ninterface ResumeSessionResponse {\n agentId: string;\n}\n\n/**\n * Remote implementation of AgentIdResolver\n *\n * Calls server API to create agent before local agent is created.\n */\nexport class RemoteAgentIdResolver implements AgentIdResolver {\n private readonly client: KyInstance;\n\n constructor(options: RemoteAgentIdResolverOptions) {\n this.client = createHttpClient({\n baseUrl: options.serverUrl,\n headers: options.headers,\n });\n }\n\n async resolveForRun(imageId: string, containerId: string): Promise<string> {\n logger.debug(\"Resolving agent ID for run\", { imageId, containerId });\n\n const response = await this.client\n .post(`images/${imageId}/run`, {\n json: { containerId },\n })\n .json<RunImageResponse>();\n\n logger.info(\"Agent ID resolved for run\", { imageId, agentId: response.agentId });\n return response.agentId;\n }\n\n async resolveForResume(sessionId: string, containerId: string): Promise<string> {\n logger.debug(\"Resolving agent ID for resume\", { sessionId, containerId });\n\n const response = await this.client\n .post(`sessions/${sessionId}/resume`, {\n json: { containerId },\n })\n .json<ResumeSessionResponse>();\n\n logger.info(\"Agent ID resolved for resume\", { sessionId, agentId: response.agentId });\n return response.agentId;\n }\n}\n","/**\n * SSERuntime - Browser Runtime implementation\n *\n * \"Define Once, Run Anywhere\"\n *\n * Provides Runtime for browser that connects to remote AgentX server via SSE.\n * Uses the same API as NodeRuntime, enabling unified code across platforms.\n *\n * @example\n * ```typescript\n * import { createAgentX } from \"agentxjs\";\n * import { createSSERuntime } from \"agentxjs/client\";\n * import { defineAgent } from \"agentxjs\";\n *\n * const MyAgent = defineAgent({\n * name: \"Assistant\",\n * systemPrompt: \"You are a helpful assistant\",\n * });\n *\n * // Browser: connect to remote server\n * const runtime = createSSERuntime({ serverUrl: \"http://localhost:5200/agentx\" });\n * const agentx = createAgentX(runtime);\n * const agent = agentx.agents.create(MyAgent);\n *\n * // Same API as server-side!\n * agent.on(\"assistant_message\", (event) => {\n * console.log(event.data.content);\n * });\n *\n * await agent.receive(\"Hello!\");\n * ```\n */\n\nimport type {\n Runtime,\n Sandbox,\n RuntimeDriver,\n AgentContext,\n AgentDefinition,\n Repository,\n LoggerFactory,\n Logger,\n AgentIdResolver,\n} from \"@agentxjs/types\";\nimport { setLoggerFactory } from \"@agentxjs/common\";\nimport { createSSEDriver } from \"./SSEDriver\";\nimport { RemoteRepository } from \"./repository\";\nimport { BrowserLoggerFactory } from \"./logger\";\nimport { RemoteAgentIdResolver } from \"./RemoteAgentIdResolver\";\n\n// ============================================================================\n// NoopSandbox - Browser doesn't need local resources\n// ============================================================================\n\nconst noopSandbox: Sandbox = {\n name: \"browser-noop\",\n workspace: {\n id: \"noop\",\n name: \"noop\",\n path: \"\", // Browser has no local workspace\n },\n llm: {\n name: \"noop\",\n provide: () => ({}),\n },\n};\n\n// ============================================================================\n// SSERuntime - Browser Runtime implementation\n// ============================================================================\n\n/**\n * SSERuntime configuration\n */\nexport interface SSERuntimeConfig {\n /**\n * Server base URL (e.g., \"http://localhost:5200/agentx\")\n */\n serverUrl: string;\n\n /**\n * Optional request headers (for auth, etc.)\n * Note: These headers are used for HTTP requests (POST, DELETE, etc.)\n * but NOT for SSE connections (EventSource doesn't support headers).\n * For SSE auth, use sseParams to pass token via query string.\n */\n headers?: Record<string, string>;\n\n /**\n * Optional query parameters to append to SSE URL.\n * Use this for authentication since EventSource doesn't support headers.\n *\n * @example\n * ```typescript\n * createSSERuntime({\n * serverUrl: \"http://localhost:5200/agentx\",\n * headers: { Authorization: \"Bearer xxx\" }, // For HTTP requests\n * sseParams: { token: \"xxx\" }, // For SSE connections\n * });\n * ```\n */\n sseParams?: Record<string, string>;\n}\n\n/**\n * SSERuntime - Runtime for browser with SSE driver\n *\n * Connects to remote AgentX server via SSE.\n * All resources (LLM, etc.) are provided by the server.\n *\n * Uses RemoteContainer which calls server POST /agents to create agents.\n * This ensures browser and server use the same agentId.\n */\nclass SSERuntime implements Runtime {\n readonly name = \"sse\";\n readonly repository: Repository;\n readonly loggerFactory: LoggerFactory;\n readonly agentIdResolver: AgentIdResolver;\n\n private readonly serverUrl: string;\n private readonly headers: Record<string, string>;\n private readonly sseParams: Record<string, string>;\n\n constructor(config: SSERuntimeConfig) {\n this.serverUrl = config.serverUrl.replace(/\\/+$/, \"\"); // Remove trailing slash\n this.headers = config.headers ?? {};\n this.sseParams = config.sseParams ?? {};\n\n // Create and configure BrowserLoggerFactory\n this.loggerFactory = new BrowserLoggerFactory({\n collapsed: true,\n });\n\n // Set as global logger factory\n setLoggerFactory(this.loggerFactory);\n\n this.repository = new RemoteRepository({\n serverUrl: this.serverUrl,\n headers: this.headers,\n });\n\n // Create agent ID resolver for remote agent creation\n this.agentIdResolver = new RemoteAgentIdResolver({\n serverUrl: this.serverUrl,\n headers: this.headers,\n });\n }\n\n createSandbox(_containerId: string): Sandbox {\n // Browser doesn't need local resources\n return noopSandbox;\n }\n\n createDriver(\n _definition: AgentDefinition,\n context: AgentContext,\n _sandbox: Sandbox\n ): RuntimeDriver {\n // context.agentId is already resolved by RemoteContainer\n // which called POST /agents on server - so it's the server's agentId\n const driver = createSSEDriver({\n serverUrl: this.serverUrl,\n agentId: context.agentId,\n headers: this.headers,\n sseParams: this.sseParams,\n });\n\n // SSEDriver implements AgentDriver, wrap it as RuntimeDriver\n return {\n ...driver,\n sandbox: noopSandbox,\n };\n }\n\n createLogger(name: string): Logger {\n return this.loggerFactory.getLogger(name);\n }\n}\n\n// ============================================================================\n// Factory function\n// ============================================================================\n\n/**\n * Create SSE Runtime for browser\n *\n * @example\n * ```typescript\n * import { createAgentX } from \"agentxjs\";\n * import { sseRuntime } from \"agentxjs/runtime/sse\";\n *\n * createAgentX(sseRuntime({\n * serverUrl: \"http://localhost:5200/agentx\",\n * headers: { Authorization: \"Bearer xxx\" },\n * }));\n * ```\n */\nexport function sseRuntime(config: SSERuntimeConfig): Runtime {\n return new SSERuntime(config);\n}\n\n/**\n * @deprecated Use `sseRuntime()` instead for consistency with `nodeRuntime()`\n */\nexport const createSSERuntime = sseRuntime;\n\n// Also export class for advanced use\nexport { SSERuntime };\n"]}
|