agentxjs 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browser.js CHANGED
@@ -14,6 +14,7 @@ var __toESM = (mod, isNodeMode, target) => {
14
14
  });
15
15
  return to;
16
16
  };
17
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
18
  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
18
19
  get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
19
20
  }) : x)(function(x) {
@@ -22,29 +23,9 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
22
23
  throw Error('Dynamic require of "' + x + '" is not supported');
23
24
  });
24
25
 
25
- // src/browser.ts
26
- import { isLocalConfig, isRemoteConfig as isRemoteConfig2 } from "@agentxjs/types/agentx";
27
- import {
28
- isFromSource,
29
- hasIntent,
30
- isRequest,
31
- isResult,
32
- isNotification
33
- } from "@agentxjs/types/event";
34
- import { isCommandEvent, isCommandRequest, isCommandResponse } from "@agentxjs/types/event";
35
- import {
36
- isAgentEvent,
37
- isAgentStreamEvent,
38
- isAgentStateEvent,
39
- isAgentMessageEvent,
40
- isAgentTurnEvent
41
- } from "@agentxjs/types/event";
42
- import { isRemoteConfig as isRemoteConfig3 } from "@agentxjs/types/agentx";
43
-
44
- // src/createAgentX.ts
45
- import { isRemoteConfig } from "@agentxjs/types/agentx";
46
- import { createLogger } from "@agentxjs/common";
47
- var remoteLogger = createLogger("agentx/RemoteClient");
26
+ // src/createRemoteAgentX.ts
27
+ import { hasSubscriptions } from "@agentxjs/types/agentx";
28
+ import { createLogger, generateRequestId } from "@agentxjs/common";
48
29
  async function createRemoteAgentX(config) {
49
30
  const { createWebSocketClient } = await import("@agentxjs/network");
50
31
  const client = await createWebSocketClient({
@@ -57,19 +38,32 @@ async function createRemoteAgentX(config) {
57
38
  maxRetries: Infinity,
58
39
  debug: false
59
40
  });
41
+ logger.info("Client connected");
60
42
  const handlers = new Map;
61
43
  const pendingRequests = new Map;
44
+ const subscribedSessions = new Set(["global"]);
45
+ function subscribeToSession(sessionId) {
46
+ if (subscribedSessions.has(sessionId)) {
47
+ return;
48
+ }
49
+ client.send(JSON.stringify({
50
+ type: "subscribe",
51
+ sessionId
52
+ }));
53
+ subscribedSessions.add(sessionId);
54
+ logger.debug("Subscribed to session", { sessionId });
55
+ }
62
56
  client.onMessage((message) => {
63
57
  try {
64
58
  const event = JSON.parse(message);
65
- remoteLogger.info("Received event", {
59
+ logger.debug("Received event", {
66
60
  type: event.type,
67
61
  category: event.category,
68
62
  requestId: event.data?.requestId
69
63
  });
70
64
  if (event.type === "system_error") {
71
65
  const errorData = event.data;
72
- remoteLogger.error(errorData.message, {
66
+ logger.error(errorData.message, {
73
67
  severity: errorData.severity,
74
68
  requestId: event.data?.requestId,
75
69
  details: errorData.details
@@ -77,14 +71,13 @@ async function createRemoteAgentX(config) {
77
71
  }
78
72
  const requestId = event.data?.requestId;
79
73
  if (event.category === "response" && requestId && pendingRequests.has(requestId)) {
80
- remoteLogger.info("Resolving pending request", { requestId, eventType: event.type });
74
+ logger.debug("Resolving pending request", { requestId, eventType: event.type });
81
75
  const pending = pendingRequests.get(requestId);
82
76
  clearTimeout(pending.timer);
83
77
  pendingRequests.delete(requestId);
84
78
  pending.resolve(event);
85
79
  return;
86
80
  }
87
- remoteLogger.info("Dispatching to handlers", { type: event.type });
88
81
  const typeHandlers = handlers.get(event.type);
89
82
  if (typeHandlers) {
90
83
  for (const handler of typeHandlers) {
@@ -100,10 +93,25 @@ async function createRemoteAgentX(config) {
100
93
  } catch {}
101
94
  });
102
95
  client.onClose(() => {
103
- remoteLogger.warn("WebSocket closed");
96
+ logger.warn("WebSocket closed");
104
97
  });
105
98
  client.onError((error) => {
106
- remoteLogger.error("WebSocket error", { error: error.message });
99
+ logger.error("WebSocket error", { error: error.message });
100
+ });
101
+ client.onOpen(() => {
102
+ if (subscribedSessions.size > 1) {
103
+ logger.info("Reconnected, re-subscribing to sessions", {
104
+ sessions: Array.from(subscribedSessions)
105
+ });
106
+ for (const sessionId of subscribedSessions) {
107
+ if (sessionId !== "global") {
108
+ client.send(JSON.stringify({
109
+ type: "subscribe",
110
+ sessionId
111
+ }));
112
+ }
113
+ }
114
+ }
107
115
  });
108
116
  function subscribe(type, handler) {
109
117
  if (!handlers.has(type)) {
@@ -116,7 +124,7 @@ async function createRemoteAgentX(config) {
116
124
  }
117
125
  return {
118
126
  async request(type, data, timeout = 30000) {
119
- const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;
127
+ const requestId = generateRequestId();
120
128
  let mergedData = { ...data, requestId };
121
129
  if (config.context) {
122
130
  try {
@@ -131,20 +139,20 @@ async function createRemoteAgentX(config) {
131
139
  ...data,
132
140
  requestId
133
141
  };
134
- remoteLogger.info("Merged context into request", {
142
+ logger.debug("Merged context into request", {
135
143
  type,
136
144
  requestId,
137
145
  contextKeys: Object.keys(resolvedContext)
138
146
  });
139
147
  } catch (error) {
140
- remoteLogger.error("Failed to resolve context", {
148
+ logger.error("Failed to resolve context", {
141
149
  type,
142
150
  requestId,
143
151
  error: error instanceof Error ? error.message : String(error)
144
152
  });
145
153
  }
146
154
  }
147
- return new Promise((resolve, reject) => {
155
+ const response = await new Promise((resolve, reject) => {
148
156
  const timer = setTimeout(() => {
149
157
  pendingRequests.delete(requestId);
150
158
  reject(new Error(`Request timeout: ${type}`));
@@ -164,6 +172,17 @@ async function createRemoteAgentX(config) {
164
172
  };
165
173
  client.send(JSON.stringify(event));
166
174
  });
175
+ const responseData = response.data;
176
+ if (hasSubscriptions(responseData)) {
177
+ for (const sessionId of responseData.__subscriptions) {
178
+ subscribeToSession(sessionId);
179
+ }
180
+ logger.debug("Auto-subscribed to sessions from response", {
181
+ type,
182
+ sessionIds: responseData.__subscriptions
183
+ });
184
+ }
185
+ return response;
167
186
  },
168
187
  on(type, handler) {
169
188
  return subscribe(type, handler);
@@ -193,10 +212,38 @@ async function createRemoteAgentX(config) {
193
212
  }
194
213
  pendingRequests.clear();
195
214
  handlers.clear();
215
+ subscribedSessions.clear();
196
216
  client.dispose();
197
217
  }
198
218
  };
199
219
  }
220
+ var logger;
221
+ var init_createRemoteAgentX = __esm(() => {
222
+ logger = createLogger("agentx/RemoteClient");
223
+ });
224
+
225
+ // src/browser.ts
226
+ import { isLocalConfig, isRemoteConfig as isRemoteConfig2 } from "@agentxjs/types/agentx";
227
+ import {
228
+ isFromSource,
229
+ hasIntent,
230
+ isRequest,
231
+ isResult,
232
+ isNotification
233
+ } from "@agentxjs/types/event";
234
+ import { isCommandEvent, isCommandRequest, isCommandResponse } from "@agentxjs/types/event";
235
+ import {
236
+ isAgentEvent,
237
+ isAgentStreamEvent,
238
+ isAgentStateEvent,
239
+ isAgentMessageEvent,
240
+ isAgentTurnEvent
241
+ } from "@agentxjs/types/event";
242
+ import { isRemoteConfig as isRemoteConfig3 } from "@agentxjs/types/agentx";
243
+
244
+ // src/createAgentX.ts
245
+ init_createRemoteAgentX();
246
+ import { isRemoteConfig } from "@agentxjs/types/agentx";
200
247
 
201
248
  // src/browser.ts
202
249
  async function createAgentX(config) {
@@ -225,4 +272,4 @@ export {
225
272
  createAgentX
226
273
  };
227
274
 
228
- //# debugId=8D4B9F8AA8319ED964756E2164756E21
275
+ //# debugId=DABE902E367A863664756E2164756E21
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/browser.ts", "../src/createAgentX.ts"],
3
+ "sources": ["../src/createRemoteAgentX.ts", "../src/browser.ts", "../src/createAgentX.ts"],
4
4
  "sourcesContent": [
5
+ "/**\n * createRemoteAgentX - Remote mode implementation\n *\n * Connects to an AgentX server via WebSocket.\n * Works in both browser and Node.js environments.\n *\n * Uses Network layer's reliable message delivery - ACK is handled automatically\n * at the transport layer. Events are received directly (not wrapped in queue_entry).\n */\n\nimport type { AgentX, RemoteConfig, Unsubscribe, AgentXResponse } from \"@agentxjs/types/agentx\";\nimport { hasSubscriptions } from \"@agentxjs/types/agentx\";\nimport type {\n CommandEventMap,\n CommandRequestType,\n ResponseEventFor,\n RequestDataFor,\n SystemEvent,\n} from \"@agentxjs/types/event\";\nimport { createLogger, generateRequestId } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/RemoteClient\");\n\n/**\n * Create AgentX instance in remote mode\n *\n * @param config - Remote configuration (serverUrl, headers, context)\n * @returns AgentX instance\n */\nexport async function createRemoteAgentX(config: RemoteConfig): Promise<AgentX> {\n // Use @agentxjs/network for WebSocket client (handles browser/Node.js differences)\n const { createWebSocketClient } = await import(\"@agentxjs/network\");\n\n const client = await createWebSocketClient({\n serverUrl: config.serverUrl,\n headers: config.headers,\n autoReconnect: true,\n minReconnectionDelay: 1000,\n maxReconnectionDelay: 10000,\n connectionTimeout: 4000,\n maxRetries: Infinity,\n debug: false,\n });\n\n logger.info(\"Client connected\");\n\n const handlers = new Map<string, Set<(event: SystemEvent) => void>>();\n const pendingRequests = new Map<\n string,\n {\n resolve: (event: SystemEvent) => void;\n reject: (err: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n }\n >();\n\n // Track subscribed sessions\n const subscribedSessions = new Set<string>([\"global\"]); // Always subscribe to global\n\n // Helper: Subscribe to a session\n function subscribeToSession(sessionId: string): void {\n if (subscribedSessions.has(sessionId)) {\n return; // Already subscribed\n }\n\n client.send(\n JSON.stringify({\n type: \"subscribe\",\n sessionId,\n })\n );\n\n subscribedSessions.add(sessionId);\n logger.debug(\"Subscribed to session\", { sessionId });\n }\n\n // Handle incoming messages\n // Network layer auto-ACKs reliable messages, we just receive the payload directly\n client.onMessage((message: string) => {\n try {\n const event = JSON.parse(message) as SystemEvent;\n\n logger.debug(\"Received event\", {\n type: event.type,\n category: event.category,\n requestId: (event.data as any)?.requestId,\n });\n\n // Handle error events - log as error (but still dispatch to handlers)\n if (event.type === \"system_error\") {\n const errorData = event.data as { message: string; severity?: string; details?: unknown };\n logger.error(errorData.message, {\n severity: errorData.severity,\n requestId: (event.data as any)?.requestId,\n details: errorData.details,\n });\n // Continue to dispatch to handlers (don't return here)\n }\n\n // Check if it's a response to a pending request\n const requestId = (event.data as { requestId?: string })?.requestId;\n if (event.category === \"response\" && requestId && pendingRequests.has(requestId)) {\n logger.debug(\"Resolving pending request\", { requestId, eventType: event.type });\n const pending = pendingRequests.get(requestId)!;\n clearTimeout(pending.timer);\n pendingRequests.delete(requestId);\n pending.resolve(event);\n return;\n }\n\n // Dispatch to type handlers\n const typeHandlers = handlers.get(event.type);\n if (typeHandlers) {\n for (const handler of typeHandlers) {\n handler(event);\n }\n }\n\n // Dispatch to \"*\" handlers\n const allHandlers = handlers.get(\"*\");\n if (allHandlers) {\n for (const handler of allHandlers) {\n handler(event);\n }\n }\n } catch {\n // Ignore parse errors\n }\n });\n\n // Handle connection events\n client.onClose(() => {\n logger.warn(\"WebSocket closed\");\n });\n\n client.onError((error: Error) => {\n logger.error(\"WebSocket error\", { error: error.message });\n });\n\n // Re-subscribe to sessions on reconnection\n client.onOpen(() => {\n if (subscribedSessions.size > 1) {\n // More than just \"global\"\n logger.info(\"Reconnected, re-subscribing to sessions\", {\n sessions: Array.from(subscribedSessions),\n });\n // Re-send subscribe messages\n for (const sessionId of subscribedSessions) {\n if (sessionId !== \"global\") {\n client.send(\n JSON.stringify({\n type: \"subscribe\",\n sessionId,\n })\n );\n }\n }\n }\n });\n\n function subscribe(type: string, handler: (event: SystemEvent) => void): Unsubscribe {\n if (!handlers.has(type)) {\n handlers.set(type, new Set());\n }\n handlers.get(type)!.add(handler);\n return () => {\n handlers.get(type)?.delete(handler);\n };\n }\n\n return {\n async request<T extends CommandRequestType>(\n type: T,\n data: RequestDataFor<T>,\n timeout: number = 30000\n ): Promise<ResponseEventFor<T>> {\n const requestId = generateRequestId();\n\n // Resolve and merge context if provided\n let mergedData = { ...data, requestId };\n if (config.context) {\n try {\n let resolvedContext: Record<string, unknown>;\n if (typeof config.context === \"function\") {\n resolvedContext = await Promise.resolve(config.context());\n } else {\n resolvedContext = config.context;\n }\n\n // Merge context into data\n // Request-level context (if present in data) takes precedence\n mergedData = {\n ...resolvedContext,\n ...data,\n requestId,\n } as RequestDataFor<T> & { requestId: string };\n\n logger.debug(\"Merged context into request\", {\n type,\n requestId,\n contextKeys: Object.keys(resolvedContext),\n });\n } catch (error) {\n logger.error(\"Failed to resolve context\", {\n type,\n requestId,\n error: error instanceof Error ? error.message : String(error),\n });\n // Continue without context if resolution fails\n }\n }\n\n const response = await new Promise<ResponseEventFor<T>>((resolve, reject) => {\n const timer = setTimeout(() => {\n pendingRequests.delete(requestId);\n reject(new Error(`Request timeout: ${type}`));\n }, timeout);\n\n pendingRequests.set(requestId, {\n resolve: resolve as (event: SystemEvent) => void,\n reject,\n timer,\n });\n\n const event: SystemEvent = {\n type,\n timestamp: Date.now(),\n data: mergedData,\n source: \"command\",\n category: \"request\",\n intent: \"request\",\n };\n\n client.send(JSON.stringify(event));\n });\n\n // Handle AgentXResponse extensions (unified approach)\n // Auto-subscribe to sessions based on __subscriptions field\n const responseData = response.data as AgentXResponse;\n if (hasSubscriptions(responseData)) {\n for (const sessionId of responseData.__subscriptions) {\n subscribeToSession(sessionId);\n }\n logger.debug(\"Auto-subscribed to sessions from response\", {\n type,\n sessionIds: responseData.__subscriptions,\n });\n }\n\n return response;\n },\n\n on<T extends string>(\n type: T,\n handler: (event: SystemEvent & { type: T }) => void\n ): Unsubscribe {\n return subscribe(type, handler as (event: SystemEvent) => void);\n },\n\n onCommand<T extends keyof CommandEventMap>(\n type: T,\n handler: (event: CommandEventMap[T]) => void\n ): Unsubscribe {\n return subscribe(type, handler as (event: SystemEvent) => void);\n },\n\n emitCommand<T extends keyof CommandEventMap>(type: T, data: CommandEventMap[T][\"data\"]): void {\n const event: SystemEvent = {\n type,\n timestamp: Date.now(),\n data,\n source: \"command\",\n category: type.toString().endsWith(\"_response\") ? \"response\" : \"request\",\n intent: type.toString().endsWith(\"_response\") ? \"result\" : \"request\",\n };\n client.send(JSON.stringify(event));\n },\n\n async listen() {\n throw new Error(\"Cannot listen in remote mode\");\n },\n\n async close() {\n // No-op in remote mode\n },\n\n async dispose() {\n for (const pending of pendingRequests.values()) {\n clearTimeout(pending.timer);\n pending.reject(new Error(\"AgentX disposed\"));\n }\n pendingRequests.clear();\n handlers.clear();\n subscribedSessions.clear();\n client.dispose();\n },\n };\n}\n",
5
6
  "/**\n * agentxjs - Browser Entry Point\n *\n * This entry is automatically selected by bundlers (Vite, Webpack, etc.)\n * when building for browser environments.\n *\n * Only includes remote mode (WebSocket client).\n * Does not include Node.js specific code (runtime, fs, sqlite, etc.)\n */\n\n// Re-export everything from index except createAgentX\nexport type {\n AgentX,\n AgentXConfig,\n LocalConfig,\n RemoteConfig,\n LLMConfig,\n StorageConfig,\n StorageDriver,\n Unsubscribe,\n} from \"@agentxjs/types/agentx\";\n\nexport { isLocalConfig, isRemoteConfig } from \"@agentxjs/types/agentx\";\n\n// Event types\nexport type {\n SystemEvent,\n EventSource,\n EventCategory,\n EventIntent,\n EventContext,\n} from \"@agentxjs/types/event\";\n\nexport {\n isFromSource,\n hasIntent,\n isRequest,\n isResult,\n isNotification,\n} from \"@agentxjs/types/event\";\n\n// Command events\nexport type {\n CommandEvent,\n CommandRequest,\n CommandResponse,\n CommandEventType,\n CommandRequestType,\n CommandEventMap,\n ContainerCreateRequest,\n ContainerCreateResponse,\n ContainerGetRequest,\n ContainerGetResponse,\n ContainerListRequest,\n ContainerListResponse,\n AgentGetRequest,\n AgentGetResponse,\n AgentListRequest,\n AgentListResponse,\n AgentDestroyRequest,\n AgentDestroyResponse,\n MessageSendRequest,\n MessageSendResponse,\n AgentInterruptRequest,\n AgentInterruptResponse,\n ImageCreateRequest,\n ImageCreateResponse,\n ImageRunRequest,\n ImageRunResponse,\n ImageStopRequest,\n ImageStopResponse,\n ImageUpdateRequest,\n ImageUpdateResponse,\n ImageListRequest,\n ImageListResponse,\n ImageListItem,\n ImageGetRequest,\n ImageGetResponse,\n ImageDeleteRequest,\n ImageDeleteResponse,\n} from \"@agentxjs/types/event\";\n\nexport { isCommandEvent, isCommandRequest, isCommandResponse } from \"@agentxjs/types/event\";\n\n// Agent events\nexport type {\n AgentEvent,\n AgentEventCategory,\n AgentStreamEvent,\n AgentTextDeltaEvent,\n AgentMessageStartEvent,\n AgentMessageStopEvent,\n AgentToolUseStartEvent,\n AgentToolUseStopEvent,\n AgentToolResultEvent,\n AgentStateEvent,\n ConversationStartEvent,\n ConversationEndEvent,\n ConversationThinkingEvent,\n ConversationRespondingEvent,\n ToolExecutingEvent,\n ToolCompletedEvent,\n ErrorOccurredEvent,\n AgentMessageEvent,\n UserMessageEvent,\n AssistantMessageEvent,\n ToolCallMessageEvent,\n ToolResultMessageEvent,\n AgentTurnEvent,\n TurnRequestEvent,\n TurnResponseEvent,\n TokenUsage,\n} from \"@agentxjs/types/event\";\n\nexport {\n isAgentEvent,\n isAgentStreamEvent,\n isAgentStateEvent,\n isAgentMessageEvent,\n isAgentTurnEvent,\n} from \"@agentxjs/types/event\";\n\n// Data types\nexport type { ImageRecord } from \"@agentxjs/types\";\n\nexport type {\n Message,\n UserMessage,\n AssistantMessage,\n ToolCallMessage,\n ToolResultMessage,\n AgentError,\n ContentPart,\n TextPart,\n ToolCallPart,\n ToolResultPart,\n ToolResultOutput,\n} from \"@agentxjs/types/agent\";\n\n// Browser-only createAgentX (remote mode only)\nimport type { AgentX, AgentXConfig } from \"@agentxjs/types/agentx\";\nimport { isRemoteConfig } from \"@agentxjs/types/agentx\";\nimport { createRemoteAgentX } from \"./createAgentX\";\n\n/**\n * Create AgentX instance (Browser version - remote mode only)\n *\n * @param config - Must be RemoteConfig with server URL\n * @returns AgentX instance\n *\n * @example\n * ```typescript\n * const agentx = await createAgentX({ server: \"ws://localhost:5200\" });\n * ```\n */\nexport async function createAgentX(config: AgentXConfig): Promise<AgentX> {\n if (!config || !isRemoteConfig(config)) {\n throw new Error(\n \"Browser environment only supports remote mode. \" +\n 'Please provide { serverUrl: \"ws://...\" } configuration.'\n );\n }\n return createRemoteAgentX(config);\n}\n\n// Also export createRemoteAgentX for explicit usage\nexport { createRemoteAgentX } from \"./createAgentX\";\n",
6
- "/**\n * createAgentX - Factory function for creating AgentX instances\n *\n * Supports two modes:\n * - Local mode: Uses Runtime directly (Claude API) - Node.js only\n * - Remote mode: Connects to AgentX server via WebSocket - Browser & Node.js\n *\n * Local mode implementation is dynamically imported to enable tree-shaking\n * in browser builds.\n */\n\nimport type { AgentX, AgentXConfig, RemoteConfig, Unsubscribe } from \"@agentxjs/types/agentx\";\nimport { isRemoteConfig } from \"@agentxjs/types/agentx\";\nimport type {\n CommandEventMap,\n CommandRequestType,\n ResponseEventFor,\n RequestDataFor,\n SystemEvent,\n} from \"@agentxjs/types/event\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst remoteLogger = createLogger(\"agentx/RemoteClient\");\n\n/**\n * Create AgentX instance\n *\n * @param config - Configuration (LocalConfig or RemoteConfig)\n * @returns AgentX instance\n *\n * @example\n * ```typescript\n * // Remote mode (browser & Node.js)\n * const agentx = await createAgentX({ serverUrl: \"ws://localhost:5200\" });\n *\n * // Local mode (Node.js only)\n * const agentx = await createAgentX({ llm: { apiKey: \"sk-...\" } });\n * ```\n */\nexport async function createAgentX(config?: AgentXConfig): Promise<AgentX> {\n if (config && isRemoteConfig(config)) {\n return createRemoteAgentX(config);\n }\n\n // Dynamic import for tree-shaking in browser builds\n const { createLocalAgentX } = await import(\"./createLocalAgentX\");\n return createLocalAgentX(config ?? {});\n}\n\n// ============================================================================\n// Remote Mode Implementation (Browser & Node.js compatible)\n// ============================================================================\n\n/**\n * Create AgentX instance in remote mode\n *\n * Connects to an AgentX server via WebSocket.\n * Works in both browser and Node.js environments.\n *\n * @param config - Remote configuration (serverUrl, headers, context)\n * @returns AgentX instance\n */\nexport async function createRemoteAgentX(config: RemoteConfig): Promise<AgentX> {\n // Use @agentxjs/network for WebSocket client (handles browser/Node.js differences)\n const { createWebSocketClient } = await import(\"@agentxjs/network\");\n\n const client = await createWebSocketClient({\n serverUrl: config.serverUrl,\n headers: config.headers,\n autoReconnect: true,\n minReconnectionDelay: 1000,\n maxReconnectionDelay: 10000,\n connectionTimeout: 4000,\n maxRetries: Infinity,\n debug: false,\n });\n\n const handlers = new Map<string, Set<(event: SystemEvent) => void>>();\n const pendingRequests = new Map<\n string,\n {\n resolve: (event: SystemEvent) => void;\n reject: (err: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n }\n >();\n\n // Handle incoming messages\n client.onMessage((message: string) => {\n try {\n const event = JSON.parse(message) as SystemEvent;\n\n remoteLogger.info(\"Received event\", {\n type: event.type,\n category: event.category,\n requestId: (event.data as any)?.requestId,\n });\n\n // Handle error events - log as error (but still dispatch to handlers)\n if (event.type === \"system_error\") {\n const errorData = event.data as { message: string; severity?: string; details?: unknown };\n remoteLogger.error(errorData.message, {\n severity: errorData.severity,\n requestId: (event.data as any)?.requestId,\n details: errorData.details,\n });\n // Continue to dispatch to handlers (don't return here)\n }\n\n // Check if it's a response to a pending request\n const requestId = (event.data as { requestId?: string })?.requestId;\n if (event.category === \"response\" && requestId && pendingRequests.has(requestId)) {\n remoteLogger.info(\"Resolving pending request\", { requestId, eventType: event.type });\n const pending = pendingRequests.get(requestId)!;\n clearTimeout(pending.timer);\n pendingRequests.delete(requestId);\n pending.resolve(event);\n return;\n }\n\n remoteLogger.info(\"Dispatching to handlers\", { type: event.type });\n\n // Dispatch to handlers\n const typeHandlers = handlers.get(event.type);\n if (typeHandlers) {\n for (const handler of typeHandlers) {\n handler(event);\n }\n }\n\n // Dispatch to \"*\" handlers\n const allHandlers = handlers.get(\"*\");\n if (allHandlers) {\n for (const handler of allHandlers) {\n handler(event);\n }\n }\n } catch {\n // Ignore parse errors\n }\n });\n\n // Handle connection events\n client.onClose(() => {\n remoteLogger.warn(\"WebSocket closed\");\n });\n\n client.onError((error: Error) => {\n remoteLogger.error(\"WebSocket error\", { error: error.message });\n });\n\n function subscribe(type: string, handler: (event: SystemEvent) => void): Unsubscribe {\n if (!handlers.has(type)) {\n handlers.set(type, new Set());\n }\n handlers.get(type)!.add(handler);\n return () => {\n handlers.get(type)?.delete(handler);\n };\n }\n\n return {\n async request<T extends CommandRequestType>(\n type: T,\n data: RequestDataFor<T>,\n timeout: number = 30000\n ): Promise<ResponseEventFor<T>> {\n const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;\n\n // Resolve and merge context if provided\n let mergedData = { ...data, requestId };\n if (config.context) {\n try {\n let resolvedContext: Record<string, unknown>;\n if (typeof config.context === \"function\") {\n resolvedContext = await Promise.resolve(config.context());\n } else {\n resolvedContext = config.context;\n }\n\n // Merge context into data\n // Request-level context (if present in data) takes precedence\n mergedData = {\n ...resolvedContext,\n ...data,\n requestId,\n } as RequestDataFor<T> & { requestId: string };\n\n remoteLogger.info(\"Merged context into request\", {\n type,\n requestId,\n contextKeys: Object.keys(resolvedContext),\n });\n } catch (error) {\n remoteLogger.error(\"Failed to resolve context\", {\n type,\n requestId,\n error: error instanceof Error ? error.message : String(error),\n });\n // Continue without context if resolution fails\n }\n }\n\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n pendingRequests.delete(requestId);\n reject(new Error(`Request timeout: ${type}`));\n }, timeout);\n\n pendingRequests.set(requestId, {\n resolve: resolve as (event: SystemEvent) => void,\n reject,\n timer,\n });\n\n const event: SystemEvent = {\n type,\n timestamp: Date.now(),\n data: mergedData,\n source: \"command\",\n category: \"request\",\n intent: \"request\",\n };\n\n client.send(JSON.stringify(event));\n });\n },\n\n on<T extends string>(\n type: T,\n handler: (event: SystemEvent & { type: T }) => void\n ): Unsubscribe {\n return subscribe(type, handler as (event: SystemEvent) => void);\n },\n\n onCommand<T extends keyof CommandEventMap>(\n type: T,\n handler: (event: CommandEventMap[T]) => void\n ): Unsubscribe {\n return subscribe(type, handler as (event: SystemEvent) => void);\n },\n\n emitCommand<T extends keyof CommandEventMap>(type: T, data: CommandEventMap[T][\"data\"]): void {\n const event: SystemEvent = {\n type,\n timestamp: Date.now(),\n data,\n source: \"command\",\n category: type.toString().endsWith(\"_response\") ? \"response\" : \"request\",\n intent: type.toString().endsWith(\"_response\") ? \"result\" : \"request\",\n };\n client.send(JSON.stringify(event));\n },\n\n async listen() {\n throw new Error(\"Cannot listen in remote mode\");\n },\n\n async close() {\n // No-op in remote mode\n },\n\n async dispose() {\n for (const pending of pendingRequests.values()) {\n clearTimeout(pending.timer);\n pending.reject(new Error(\"AgentX disposed\"));\n }\n pendingRequests.clear();\n handlers.clear();\n client.dispose();\n },\n };\n}\n"
7
+ "/**\n * createAgentX - Factory function for creating AgentX instances\n *\n * Supports two modes:\n * - Local mode: Uses Runtime directly (Claude API) - Node.js only\n * - Remote mode: Connects to AgentX server via WebSocket - Browser & Node.js\n *\n * Mode implementations are dynamically imported to enable tree-shaking\n * in browser builds.\n */\n\nimport type { AgentX, AgentXConfig } from \"@agentxjs/types/agentx\";\nimport { isRemoteConfig } from \"@agentxjs/types/agentx\";\n\n/**\n * Create AgentX instance\n *\n * @param config - Configuration (LocalConfig or RemoteConfig)\n * @returns AgentX instance\n *\n * @example\n * ```typescript\n * // Remote mode (browser & Node.js)\n * const agentx = await createAgentX({ serverUrl: \"ws://localhost:5200\" });\n *\n * // Local mode (Node.js only)\n * const agentx = await createAgentX({ llm: { apiKey: \"sk-...\" } });\n * ```\n */\nexport async function createAgentX(config?: AgentXConfig): Promise<AgentX> {\n if (config && isRemoteConfig(config)) {\n // Dynamic import for Remote mode\n const { createRemoteAgentX } = await import(\"./createRemoteAgentX\");\n return createRemoteAgentX(config);\n }\n\n // Dynamic import for Local mode (tree-shaking in browser builds)\n const { createLocalAgentX } = await import(\"./createLocalAgentX\");\n return createLocalAgentX(config ?? {});\n}\n\n// Re-export for direct usage\nexport { createRemoteAgentX } from \"./createRemoteAgentX\";\n"
7
8
  ],
8
- "mappings": "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",
9
- "debugId": "8D4B9F8AA8319ED964756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "DABE902E367A863664756E2164756E21",
10
11
  "names": []
11
12
  }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,12 @@
1
- import { AgentX, AgentXConfig, RemoteConfig } from "@agentxjs/types/agentx";
1
+ import { AgentX as AgentX2, AgentXConfig } from "@agentxjs/types/agentx";
2
+ import { AgentX, RemoteConfig } from "@agentxjs/types/agentx";
3
+ /**
4
+ * Create AgentX instance in remote mode
5
+ *
6
+ * @param config - Remote configuration (serverUrl, headers, context)
7
+ * @returns AgentX instance
8
+ */
9
+ declare function createRemoteAgentX(config: RemoteConfig): Promise<AgentX>;
2
10
  /**
3
11
  * Create AgentX instance
4
12
  *
@@ -14,18 +22,8 @@ import { AgentX, AgentXConfig, RemoteConfig } from "@agentxjs/types/agentx";
14
22
  * const agentx = await createAgentX({ llm: { apiKey: "sk-..." } });
15
23
  * ```
16
24
  */
17
- declare function createAgentX(config?: AgentXConfig): Promise<AgentX>;
18
- /**
19
- * Create AgentX instance in remote mode
20
- *
21
- * Connects to an AgentX server via WebSocket.
22
- * Works in both browser and Node.js environments.
23
- *
24
- * @param config - Remote configuration (serverUrl, headers, context)
25
- * @returns AgentX instance
26
- */
27
- declare function createRemoteAgentX(config: RemoteConfig): Promise<AgentX>;
28
- import { AgentX as AgentX2, AgentXConfig as AgentXConfig2, LocalConfig, RemoteConfig as RemoteConfig2, LLMConfig, StorageConfig, StorageDriver, Unsubscribe, AgentDefinition } from "@agentxjs/types/agentx";
25
+ declare function createAgentX(config?: AgentXConfig): Promise<AgentX2>;
26
+ import { AgentX as AgentX3, AgentXConfig as AgentXConfig2, LocalConfig, RemoteConfig as RemoteConfig2, LLMConfig, StorageConfig, StorageDriver, Unsubscribe, AgentDefinition } from "@agentxjs/types/agentx";
29
27
  import { isLocalConfig, isRemoteConfig } from "@agentxjs/types/agentx";
30
28
  import { AgentDefinition as AgentDefinition2 } from "@agentxjs/types/agentx";
31
29
  import { SystemEvent, EventSource, EventCategory, EventIntent, EventContext } from "@agentxjs/types/event";
@@ -57,4 +55,4 @@ import { Logger, LoggerFactory, LogContext, LogLevel, ConsoleLoggerOptions, Logg
57
55
  * ```
58
56
  */
59
57
  declare function defineAgent<T extends AgentDefinition2>(definition: T): T;
60
- export { setLoggerFactory, isResult, isRequest, isRemoteConfig, isNotification, isLocalConfig, isFromSource, isCommandResponse, isCommandRequest, isCommandEvent, isAgentTurnEvent, isAgentStreamEvent, isAgentStateEvent, isAgentMessageEvent, isAgentEvent, hasIntent, defineAgent, createRemoteAgentX, createLogger, createAgentX, UserMessageEvent, UserMessage, UserContentPart, Unsubscribe, TurnResponseEvent, TurnRequestEvent, ToolResultPart, ToolResultOutput, ToolResultMessageEvent, ToolResultMessage, ToolExecutingEvent, ToolCompletedEvent, ToolCallPart, ToolCallMessageEvent, ToolCallMessage, TokenUsage, ThinkingPart, TextPart, SystemEvent, StorageDriver, StorageConfig, RemoteConfig2 as RemoteConfig, MessageSubtype, MessageSendResponse, MessageSendRequest, MessageRole, Message, LoggerFactoryImpl, LoggerFactoryConfig, LoggerFactory, Logger, LogLevel, LogContext, LocalConfig, LLMConfig, ImageUpdateResponse, ImageUpdateRequest, ImageStopResponse, ImageStopRequest, ImageRunResponse, ImageRunRequest, ImageRecord, ImagePart, ImageListResponse, ImageListRequest, ImageListItem, ImageGetResponse, ImageGetRequest, ImageDeleteResponse, ImageDeleteRequest, ImageCreateResponse, ImageCreateRequest, FilePart, EventSource, EventIntent, EventContext, EventCategory, ErrorOccurredEvent, ErrorMessage, ConversationThinkingEvent, ConversationStartEvent, ConversationRespondingEvent, ConversationEndEvent, ContentPart, ContainerListResponse, ContainerListRequest, ContainerGetResponse, ContainerGetRequest, ContainerCreateResponse, ContainerCreateRequest, ConsoleLoggerOptions, ConsoleLogger, CommandResponse, CommandRequestType, CommandRequest, CommandEventType, CommandEventMap, CommandEvent, AssistantMessageEvent, AssistantMessage, AgentXConfig2 as AgentXConfig, AgentX2 as AgentX, AgentTurnEvent, AgentToolUseStopEvent, AgentToolUseStartEvent, AgentToolResultEvent, AgentTextDeltaEvent, AgentStreamEvent, AgentStateEvent, AgentState, AgentMessageStopEvent, AgentMessageStartEvent, AgentMessageEvent, AgentListResponse, AgentListRequest, AgentInterruptResponse, AgentInterruptRequest, AgentGetResponse, AgentGetRequest, AgentEventCategory, AgentEvent, AgentError, AgentDestroyResponse, AgentDestroyRequest, AgentDefinition };
58
+ export { setLoggerFactory, isResult, isRequest, isRemoteConfig, isNotification, isLocalConfig, isFromSource, isCommandResponse, isCommandRequest, isCommandEvent, isAgentTurnEvent, isAgentStreamEvent, isAgentStateEvent, isAgentMessageEvent, isAgentEvent, hasIntent, defineAgent, createRemoteAgentX, createLogger, createAgentX, UserMessageEvent, UserMessage, UserContentPart, Unsubscribe, TurnResponseEvent, TurnRequestEvent, ToolResultPart, ToolResultOutput, ToolResultMessageEvent, ToolResultMessage, ToolExecutingEvent, ToolCompletedEvent, ToolCallPart, ToolCallMessageEvent, ToolCallMessage, TokenUsage, ThinkingPart, TextPart, SystemEvent, StorageDriver, StorageConfig, RemoteConfig2 as RemoteConfig, MessageSubtype, MessageSendResponse, MessageSendRequest, MessageRole, Message, LoggerFactoryImpl, LoggerFactoryConfig, LoggerFactory, Logger, LogLevel, LogContext, LocalConfig, LLMConfig, ImageUpdateResponse, ImageUpdateRequest, ImageStopResponse, ImageStopRequest, ImageRunResponse, ImageRunRequest, ImageRecord, ImagePart, ImageListResponse, ImageListRequest, ImageListItem, ImageGetResponse, ImageGetRequest, ImageDeleteResponse, ImageDeleteRequest, ImageCreateResponse, ImageCreateRequest, FilePart, EventSource, EventIntent, EventContext, EventCategory, ErrorOccurredEvent, ErrorMessage, ConversationThinkingEvent, ConversationStartEvent, ConversationRespondingEvent, ConversationEndEvent, ContentPart, ContainerListResponse, ContainerListRequest, ContainerGetResponse, ContainerGetRequest, ContainerCreateResponse, ContainerCreateRequest, ConsoleLoggerOptions, ConsoleLogger, CommandResponse, CommandRequestType, CommandRequest, CommandEventType, CommandEventMap, CommandEvent, AssistantMessageEvent, AssistantMessage, AgentXConfig2 as AgentXConfig, AgentX3 as AgentX, AgentTurnEvent, AgentToolUseStopEvent, AgentToolUseStartEvent, AgentToolResultEvent, AgentTextDeltaEvent, AgentStreamEvent, AgentStateEvent, AgentState, AgentMessageStopEvent, AgentMessageStartEvent, AgentMessageEvent, AgentListResponse, AgentListRequest, AgentInterruptResponse, AgentInterruptRequest, AgentGetResponse, AgentGetRequest, AgentEventCategory, AgentEvent, AgentError, AgentDestroyResponse, AgentDestroyRequest, AgentDefinition };
package/dist/index.js CHANGED
@@ -27,117 +27,13 @@ var __export = (target, all) => {
27
27
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
28
28
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
29
29
 
30
- // src/createLocalAgentX.ts
31
- var exports_createLocalAgentX = {};
32
- __export(exports_createLocalAgentX, {
33
- createLocalAgentX: () => createLocalAgentX
34
- });
35
- import { WebSocketServer } from "@agentxjs/network";
36
- import { createLogger } from "@agentxjs/common";
37
- async function createLocalAgentX(config) {
38
- if (config.logger) {
39
- const { LoggerFactoryImpl, setLoggerFactory } = await import("@agentxjs/common");
40
- LoggerFactoryImpl.configure({
41
- defaultLevel: config.logger.level,
42
- consoleOptions: config.logger.console
43
- });
44
- if (config.logger.factory) {
45
- setLoggerFactory(config.logger.factory);
46
- }
47
- }
48
- const { createRuntime, RuntimeEnvironment } = await import("@agentxjs/runtime");
49
- const { createPersistence } = await import("@agentxjs/persistence");
50
- const { sqliteDriver } = await import("@agentxjs/persistence/sqlite");
51
- const { homedir } = await import("node:os");
52
- const { join } = await import("node:path");
53
- if (config.environment?.claudeCodePath) {
54
- RuntimeEnvironment.setClaudeCodePath(config.environment.claudeCodePath);
55
- }
56
- const basePath = config.agentxDir ?? join(homedir(), ".agentx");
57
- const storagePath = join(basePath, "data", "agentx.db");
58
- const persistence = await createPersistence(sqliteDriver({ path: storagePath }));
59
- const runtime = createRuntime({
60
- persistence,
61
- basePath,
62
- llmProvider: {
63
- name: "claude",
64
- provide: () => ({
65
- apiKey: config.llm?.apiKey ?? "",
66
- baseUrl: config.llm?.baseUrl,
67
- model: config.llm?.model
68
- })
69
- },
70
- defaultAgent: config.defaultAgent
71
- });
72
- const wsServer = new WebSocketServer({
73
- heartbeat: true,
74
- heartbeatInterval: 30000,
75
- debug: false
76
- });
77
- wsServer.onConnection((connection) => {
78
- connection.onMessage((message) => {
79
- try {
80
- const event = JSON.parse(message);
81
- logger.debug("Received client message", {
82
- type: event.type,
83
- category: event.category
84
- });
85
- runtime.emit(event);
86
- } catch {}
87
- });
88
- });
89
- runtime.onAny((event) => {
90
- if (event.broadcastable === false) {
91
- return;
92
- }
93
- logger.debug("Broadcasting event", {
94
- type: event.type,
95
- category: event.category,
96
- source: event.source,
97
- context: event.context,
98
- data: event.data
99
- });
100
- wsServer.broadcast(JSON.stringify(event));
101
- });
102
- if (config.server) {
103
- wsServer.attach(config.server, "/ws");
104
- }
105
- return {
106
- request: (type, data, timeout) => runtime.request(type, data, timeout),
107
- on: (type, handler) => runtime.on(type, handler),
108
- onCommand: (type, handler) => runtime.onCommand(type, handler),
109
- emitCommand: (type, data) => runtime.emitCommand(type, data),
110
- async listen(port, host) {
111
- if (config.server) {
112
- throw new Error("Cannot listen when attached to existing server. The server should call listen() instead.");
113
- }
114
- await wsServer.listen(port, host);
115
- },
116
- async close() {
117
- await wsServer.close();
118
- },
119
- async dispose() {
120
- await wsServer.dispose();
121
- await runtime.dispose();
122
- }
123
- };
124
- }
125
- var logger;
126
- var init_createLocalAgentX = __esm(() => {
127
- logger = createLogger("agentx/LocalAgentX");
30
+ // src/createRemoteAgentX.ts
31
+ var exports_createRemoteAgentX = {};
32
+ __export(exports_createRemoteAgentX, {
33
+ createRemoteAgentX: () => createRemoteAgentX
128
34
  });
129
-
130
- // src/createAgentX.ts
131
- import { isRemoteConfig } from "@agentxjs/types/agentx";
132
- import { createLogger as createLogger2 } from "@agentxjs/common";
133
- var remoteLogger = createLogger2("agentx/RemoteClient");
134
- async function createAgentX(config) {
135
- if (config && isRemoteConfig(config)) {
136
- return createRemoteAgentX(config);
137
- }
138
- const { createLocalAgentX: createLocalAgentX2 } = await Promise.resolve().then(() => (init_createLocalAgentX(), exports_createLocalAgentX));
139
- return createLocalAgentX2(config ?? {});
140
- }
35
+ import { hasSubscriptions } from "@agentxjs/types/agentx";
36
+ import { createLogger, generateRequestId } from "@agentxjs/common";
141
37
  async function createRemoteAgentX(config) {
142
38
  const { createWebSocketClient } = await import("@agentxjs/network");
143
39
  const client = await createWebSocketClient({
@@ -150,19 +46,32 @@ async function createRemoteAgentX(config) {
150
46
  maxRetries: Infinity,
151
47
  debug: false
152
48
  });
49
+ logger.info("Client connected");
153
50
  const handlers = new Map;
154
51
  const pendingRequests = new Map;
52
+ const subscribedSessions = new Set(["global"]);
53
+ function subscribeToSession(sessionId) {
54
+ if (subscribedSessions.has(sessionId)) {
55
+ return;
56
+ }
57
+ client.send(JSON.stringify({
58
+ type: "subscribe",
59
+ sessionId
60
+ }));
61
+ subscribedSessions.add(sessionId);
62
+ logger.debug("Subscribed to session", { sessionId });
63
+ }
155
64
  client.onMessage((message) => {
156
65
  try {
157
66
  const event = JSON.parse(message);
158
- remoteLogger.info("Received event", {
67
+ logger.debug("Received event", {
159
68
  type: event.type,
160
69
  category: event.category,
161
70
  requestId: event.data?.requestId
162
71
  });
163
72
  if (event.type === "system_error") {
164
73
  const errorData = event.data;
165
- remoteLogger.error(errorData.message, {
74
+ logger.error(errorData.message, {
166
75
  severity: errorData.severity,
167
76
  requestId: event.data?.requestId,
168
77
  details: errorData.details
@@ -170,14 +79,13 @@ async function createRemoteAgentX(config) {
170
79
  }
171
80
  const requestId = event.data?.requestId;
172
81
  if (event.category === "response" && requestId && pendingRequests.has(requestId)) {
173
- remoteLogger.info("Resolving pending request", { requestId, eventType: event.type });
82
+ logger.debug("Resolving pending request", { requestId, eventType: event.type });
174
83
  const pending = pendingRequests.get(requestId);
175
84
  clearTimeout(pending.timer);
176
85
  pendingRequests.delete(requestId);
177
86
  pending.resolve(event);
178
87
  return;
179
88
  }
180
- remoteLogger.info("Dispatching to handlers", { type: event.type });
181
89
  const typeHandlers = handlers.get(event.type);
182
90
  if (typeHandlers) {
183
91
  for (const handler of typeHandlers) {
@@ -193,10 +101,25 @@ async function createRemoteAgentX(config) {
193
101
  } catch {}
194
102
  });
195
103
  client.onClose(() => {
196
- remoteLogger.warn("WebSocket closed");
104
+ logger.warn("WebSocket closed");
197
105
  });
198
106
  client.onError((error) => {
199
- remoteLogger.error("WebSocket error", { error: error.message });
107
+ logger.error("WebSocket error", { error: error.message });
108
+ });
109
+ client.onOpen(() => {
110
+ if (subscribedSessions.size > 1) {
111
+ logger.info("Reconnected, re-subscribing to sessions", {
112
+ sessions: Array.from(subscribedSessions)
113
+ });
114
+ for (const sessionId of subscribedSessions) {
115
+ if (sessionId !== "global") {
116
+ client.send(JSON.stringify({
117
+ type: "subscribe",
118
+ sessionId
119
+ }));
120
+ }
121
+ }
122
+ }
200
123
  });
201
124
  function subscribe(type, handler) {
202
125
  if (!handlers.has(type)) {
@@ -209,7 +132,7 @@ async function createRemoteAgentX(config) {
209
132
  }
210
133
  return {
211
134
  async request(type, data, timeout = 30000) {
212
- const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;
135
+ const requestId = generateRequestId();
213
136
  let mergedData = { ...data, requestId };
214
137
  if (config.context) {
215
138
  try {
@@ -224,20 +147,20 @@ async function createRemoteAgentX(config) {
224
147
  ...data,
225
148
  requestId
226
149
  };
227
- remoteLogger.info("Merged context into request", {
150
+ logger.debug("Merged context into request", {
228
151
  type,
229
152
  requestId,
230
153
  contextKeys: Object.keys(resolvedContext)
231
154
  });
232
155
  } catch (error) {
233
- remoteLogger.error("Failed to resolve context", {
156
+ logger.error("Failed to resolve context", {
234
157
  type,
235
158
  requestId,
236
159
  error: error instanceof Error ? error.message : String(error)
237
160
  });
238
161
  }
239
162
  }
240
- return new Promise((resolve, reject) => {
163
+ const response = await new Promise((resolve, reject) => {
241
164
  const timer = setTimeout(() => {
242
165
  pendingRequests.delete(requestId);
243
166
  reject(new Error(`Request timeout: ${type}`));
@@ -257,6 +180,17 @@ async function createRemoteAgentX(config) {
257
180
  };
258
181
  client.send(JSON.stringify(event));
259
182
  });
183
+ const responseData = response.data;
184
+ if (hasSubscriptions(responseData)) {
185
+ for (const sessionId of responseData.__subscriptions) {
186
+ subscribeToSession(sessionId);
187
+ }
188
+ logger.debug("Auto-subscribed to sessions from response", {
189
+ type,
190
+ sessionIds: responseData.__subscriptions
191
+ });
192
+ }
193
+ return response;
260
194
  },
261
195
  on(type, handler) {
262
196
  return subscribe(type, handler);
@@ -286,10 +220,217 @@ async function createRemoteAgentX(config) {
286
220
  }
287
221
  pendingRequests.clear();
288
222
  handlers.clear();
223
+ subscribedSessions.clear();
289
224
  client.dispose();
290
225
  }
291
226
  };
292
227
  }
228
+ var logger;
229
+ var init_createRemoteAgentX = __esm(() => {
230
+ logger = createLogger("agentx/RemoteClient");
231
+ });
232
+
233
+ // src/createLocalAgentX.ts
234
+ var exports_createLocalAgentX = {};
235
+ __export(exports_createLocalAgentX, {
236
+ createLocalAgentX: () => createLocalAgentX
237
+ });
238
+ import { WebSocketServer } from "@agentxjs/network";
239
+ import { createLogger as createLogger2 } from "@agentxjs/common";
240
+ async function createLocalAgentX(config) {
241
+ if (config.logger) {
242
+ const { LoggerFactoryImpl, setLoggerFactory } = await import("@agentxjs/common");
243
+ LoggerFactoryImpl.configure({
244
+ defaultLevel: config.logger.level,
245
+ consoleOptions: config.logger.console
246
+ });
247
+ if (config.logger.factory) {
248
+ setLoggerFactory(config.logger.factory);
249
+ }
250
+ }
251
+ const { createRuntime, RuntimeEnvironment } = await import("@agentxjs/runtime");
252
+ const { createPersistence } = await import("@agentxjs/persistence");
253
+ const { sqliteDriver } = await import("@agentxjs/persistence/sqlite");
254
+ const { homedir } = await import("node:os");
255
+ const { join } = await import("node:path");
256
+ if (config.environment?.claudeCodePath) {
257
+ RuntimeEnvironment.setClaudeCodePath(config.environment.claudeCodePath);
258
+ }
259
+ const basePath = config.agentxDir ?? join(homedir(), ".agentx");
260
+ const storagePath = join(basePath, "data", "agentx.db");
261
+ const persistence = await createPersistence(sqliteDriver({ path: storagePath }));
262
+ const { createQueue } = await import("@agentxjs/queue");
263
+ const queuePath = join(basePath, "data", "queue.db");
264
+ const eventQueue = createQueue({ path: queuePath });
265
+ const runtime = createRuntime({
266
+ persistence,
267
+ basePath,
268
+ llmProvider: {
269
+ name: "claude",
270
+ provide: () => ({
271
+ apiKey: config.llm?.apiKey ?? "",
272
+ baseUrl: config.llm?.baseUrl,
273
+ model: config.llm?.model
274
+ })
275
+ },
276
+ environmentFactory: config.environmentFactory,
277
+ defaultAgent: config.defaultAgent
278
+ });
279
+ const wsServer = new WebSocketServer({
280
+ heartbeat: true,
281
+ heartbeatInterval: 30000,
282
+ debug: false
283
+ });
284
+ const connections = new Map;
285
+ function subscribeConnectionToTopic(connectionId, topic) {
286
+ const connState = connections.get(connectionId);
287
+ if (!connState)
288
+ return;
289
+ if (connState.subscribedSessions.has(topic))
290
+ return;
291
+ connState.subscribedSessions.add(topic);
292
+ const unsubscribe = eventQueue.subscribe(topic, (entry) => {
293
+ const event = entry.event;
294
+ const message = JSON.stringify(event);
295
+ connState.connection.sendReliable(message, {
296
+ onAck: () => {
297
+ eventQueue.ack(connectionId, topic, entry.cursor).catch((err) => {
298
+ logger2.error("Failed to ack", { error: err.message });
299
+ });
300
+ persistMessage(event);
301
+ },
302
+ timeout: 1e4,
303
+ onTimeout: () => {
304
+ logger2.warn("ACK timeout for event", {
305
+ connectionId,
306
+ eventType: event.type,
307
+ topic
308
+ });
309
+ }
310
+ });
311
+ });
312
+ connState.connection.onClose(() => {
313
+ unsubscribe();
314
+ });
315
+ logger2.debug("Connection subscribed to queue topic", { connectionId, topic });
316
+ }
317
+ wsServer.onConnection((connection) => {
318
+ connections.set(connection.id, {
319
+ connection,
320
+ subscribedSessions: new Set
321
+ });
322
+ logger2.info("Client connected", { connectionId: connection.id });
323
+ subscribeConnectionToTopic(connection.id, "global");
324
+ connection.onMessage((message) => {
325
+ try {
326
+ const parsed = JSON.parse(message);
327
+ if (parsed.type === "subscribe" && parsed.sessionId) {
328
+ subscribeConnectionToTopic(connection.id, parsed.sessionId);
329
+ const lastCursor = parsed.afterCursor;
330
+ if (lastCursor) {
331
+ eventQueue.recover(parsed.sessionId, lastCursor).then((entries) => {
332
+ for (const entry of entries) {
333
+ connection.send(JSON.stringify(entry.event));
334
+ }
335
+ }).catch((err) => {
336
+ logger2.error("Failed to recover history", { error: err.message });
337
+ });
338
+ }
339
+ return;
340
+ }
341
+ const event = parsed;
342
+ logger2.debug("Received client message", {
343
+ type: event.type,
344
+ category: event.category
345
+ });
346
+ runtime.emit(event);
347
+ } catch {}
348
+ });
349
+ connection.onClose(() => {
350
+ connections.delete(connection.id);
351
+ logger2.info("Client disconnected", { connectionId: connection.id });
352
+ });
353
+ });
354
+ function shouldEnqueue(event) {
355
+ if (event.source === "environment")
356
+ return false;
357
+ if (event.intent === "request")
358
+ return false;
359
+ return true;
360
+ }
361
+ function persistMessage(event) {
362
+ if (event.category !== "message" || !event.data)
363
+ return;
364
+ const sessionId = event.context?.sessionId;
365
+ if (!sessionId)
366
+ return;
367
+ const message = event.data;
368
+ logger2.debug("Persisting message on ACK", {
369
+ sessionId,
370
+ messageType: event.type,
371
+ messageId: message.id
372
+ });
373
+ persistence.sessions.addMessage(sessionId, message).catch((err) => {
374
+ logger2.error("Failed to persist message", {
375
+ sessionId,
376
+ error: err.message
377
+ });
378
+ });
379
+ }
380
+ runtime.onAny((event) => {
381
+ if (!shouldEnqueue(event)) {
382
+ return;
383
+ }
384
+ const topic = event.context?.sessionId ?? "global";
385
+ eventQueue.publish(topic, event);
386
+ });
387
+ if (config.server) {
388
+ wsServer.attach(config.server, "/ws");
389
+ }
390
+ return {
391
+ request: (type, data, timeout) => runtime.request(type, data, timeout),
392
+ on: (type, handler) => {
393
+ return runtime.on(type, (event) => {
394
+ if (!shouldEnqueue(event)) {
395
+ return;
396
+ }
397
+ handler(event);
398
+ });
399
+ },
400
+ onCommand: (type, handler) => runtime.onCommand(type, handler),
401
+ emitCommand: (type, data) => runtime.emitCommand(type, data),
402
+ async listen(port, host) {
403
+ if (config.server) {
404
+ throw new Error("Cannot listen when attached to existing server. The server should call listen() instead.");
405
+ }
406
+ await wsServer.listen(port, host);
407
+ },
408
+ async close() {
409
+ await wsServer.close();
410
+ },
411
+ async dispose() {
412
+ await wsServer.dispose();
413
+ await runtime.dispose();
414
+ await eventQueue.close();
415
+ }
416
+ };
417
+ }
418
+ var logger2;
419
+ var init_createLocalAgentX = __esm(() => {
420
+ logger2 = createLogger2("agentx/LocalAgentX");
421
+ });
422
+
423
+ // src/createAgentX.ts
424
+ init_createRemoteAgentX();
425
+ import { isRemoteConfig } from "@agentxjs/types/agentx";
426
+ async function createAgentX(config) {
427
+ if (config && isRemoteConfig(config)) {
428
+ const { createRemoteAgentX: createRemoteAgentX2 } = await Promise.resolve().then(() => (init_createRemoteAgentX(), exports_createRemoteAgentX));
429
+ return createRemoteAgentX2(config);
430
+ }
431
+ const { createLocalAgentX: createLocalAgentX2 } = await Promise.resolve().then(() => (init_createLocalAgentX(), exports_createLocalAgentX));
432
+ return createLocalAgentX2(config ?? {});
433
+ }
293
434
 
294
435
  // src/index.ts
295
436
  import { isLocalConfig, isRemoteConfig as isRemoteConfig2 } from "@agentxjs/types/agentx";
@@ -337,4 +478,4 @@ export {
337
478
  ConsoleLogger
338
479
  };
339
480
 
340
- //# debugId=A0E8E157C65D016664756E2164756E21
481
+ //# debugId=CC10CEDC2D267F6164756E2164756E21
package/dist/index.js.map CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/createLocalAgentX.ts", "../src/createAgentX.ts", "../src/index.ts"],
3
+ "sources": ["../src/createRemoteAgentX.ts", "../src/createLocalAgentX.ts", "../src/createAgentX.ts", "../src/index.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * createLocalAgentX - Local mode implementation\n *\n * This file is dynamically imported to enable tree-shaking in browser builds.\n * Contains Node.js specific code (runtime, WebSocket server).\n */\n\nimport type { AgentX, LocalConfig } from \"@agentxjs/types/agentx\";\nimport type { SystemEvent } from \"@agentxjs/types/event\";\nimport { WebSocketServer } from \"@agentxjs/network\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/LocalAgentX\");\n\nexport async function createLocalAgentX(config: LocalConfig): Promise<AgentX> {\n // Apply logger configuration\n if (config.logger) {\n const { LoggerFactoryImpl, setLoggerFactory } = await import(\"@agentxjs/common\");\n\n LoggerFactoryImpl.configure({\n defaultLevel: config.logger.level,\n consoleOptions: config.logger.console,\n });\n\n if (config.logger.factory) {\n setLoggerFactory(config.logger.factory);\n }\n }\n\n // Dynamic import to avoid bundling runtime in browser\n const { createRuntime, RuntimeEnvironment } = await import(\"@agentxjs/runtime\");\n const { createPersistence } = await import(\"@agentxjs/persistence\");\n const { sqliteDriver } = await import(\"@agentxjs/persistence/sqlite\");\n const { homedir } = await import(\"node:os\");\n const { join } = await import(\"node:path\");\n\n // Configure global runtime environment if provided\n if (config.environment?.claudeCodePath) {\n RuntimeEnvironment.setClaudeCodePath(config.environment.claudeCodePath);\n }\n\n // Determine base path for runtime data\n const basePath = config.agentxDir ?? join(homedir(), \".agentx\");\n\n // Auto-configure storage: SQLite at {agentxDir}/data/agentx.db\n const storagePath = join(basePath, \"data\", \"agentx.db\");\n const persistence = await createPersistence(sqliteDriver({ path: storagePath }));\n\n const runtime = createRuntime({\n persistence,\n basePath,\n llmProvider: {\n name: \"claude\",\n provide: () => ({\n apiKey: config.llm?.apiKey ?? \"\",\n baseUrl: config.llm?.baseUrl,\n model: config.llm?.model,\n }),\n },\n defaultAgent: config.defaultAgent,\n });\n\n // Create WebSocket server\n const wsServer = new WebSocketServer({\n heartbeat: true,\n heartbeatInterval: 30000,\n debug: false,\n });\n\n // Handle new connections\n wsServer.onConnection((connection) => {\n // Forward client messages to runtime\n connection.onMessage((message) => {\n try {\n const event = JSON.parse(message) as SystemEvent;\n logger.debug(\"Received client message\", {\n type: event.type,\n category: event.category,\n });\n runtime.emit(event);\n } catch {\n // Ignore parse errors\n }\n });\n });\n\n // Broadcast runtime events to all connected clients\n runtime.onAny((event) => {\n // Skip non-broadcastable events (internal events like DriveableEvent)\n if ((event as any).broadcastable === false) {\n return;\n }\n\n // Log event for debugging\n logger.debug(\"Broadcasting event\", {\n type: event.type,\n category: event.category,\n source: event.source,\n context: event.context,\n data: event.data,\n });\n\n wsServer.broadcast(JSON.stringify(event));\n });\n\n // If server is provided, attach WebSocket to it immediately\n if (config.server) {\n wsServer.attach(config.server, \"/ws\");\n }\n\n return {\n // Core API - delegate to runtime\n request: (type, data, timeout) => runtime.request(type, data, timeout),\n\n on: (type, handler) => runtime.on(type, handler),\n\n onCommand: (type, handler) => runtime.onCommand(type, handler),\n\n emitCommand: (type, data) => runtime.emitCommand(type, data),\n\n // Server API\n async listen(port: number, host?: string) {\n if (config.server) {\n throw new Error(\n \"Cannot listen when attached to existing server. The server should call listen() instead.\"\n );\n }\n await wsServer.listen(port, host);\n },\n\n async close() {\n await wsServer.close();\n },\n\n async dispose() {\n await wsServer.dispose();\n await runtime.dispose();\n },\n };\n}\n",
6
- "/**\n * createAgentX - Factory function for creating AgentX instances\n *\n * Supports two modes:\n * - Local mode: Uses Runtime directly (Claude API) - Node.js only\n * - Remote mode: Connects to AgentX server via WebSocket - Browser & Node.js\n *\n * Local mode implementation is dynamically imported to enable tree-shaking\n * in browser builds.\n */\n\nimport type { AgentX, AgentXConfig, RemoteConfig, Unsubscribe } from \"@agentxjs/types/agentx\";\nimport { isRemoteConfig } from \"@agentxjs/types/agentx\";\nimport type {\n CommandEventMap,\n CommandRequestType,\n ResponseEventFor,\n RequestDataFor,\n SystemEvent,\n} from \"@agentxjs/types/event\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst remoteLogger = createLogger(\"agentx/RemoteClient\");\n\n/**\n * Create AgentX instance\n *\n * @param config - Configuration (LocalConfig or RemoteConfig)\n * @returns AgentX instance\n *\n * @example\n * ```typescript\n * // Remote mode (browser & Node.js)\n * const agentx = await createAgentX({ serverUrl: \"ws://localhost:5200\" });\n *\n * // Local mode (Node.js only)\n * const agentx = await createAgentX({ llm: { apiKey: \"sk-...\" } });\n * ```\n */\nexport async function createAgentX(config?: AgentXConfig): Promise<AgentX> {\n if (config && isRemoteConfig(config)) {\n return createRemoteAgentX(config);\n }\n\n // Dynamic import for tree-shaking in browser builds\n const { createLocalAgentX } = await import(\"./createLocalAgentX\");\n return createLocalAgentX(config ?? {});\n}\n\n// ============================================================================\n// Remote Mode Implementation (Browser & Node.js compatible)\n// ============================================================================\n\n/**\n * Create AgentX instance in remote mode\n *\n * Connects to an AgentX server via WebSocket.\n * Works in both browser and Node.js environments.\n *\n * @param config - Remote configuration (serverUrl, headers, context)\n * @returns AgentX instance\n */\nexport async function createRemoteAgentX(config: RemoteConfig): Promise<AgentX> {\n // Use @agentxjs/network for WebSocket client (handles browser/Node.js differences)\n const { createWebSocketClient } = await import(\"@agentxjs/network\");\n\n const client = await createWebSocketClient({\n serverUrl: config.serverUrl,\n headers: config.headers,\n autoReconnect: true,\n minReconnectionDelay: 1000,\n maxReconnectionDelay: 10000,\n connectionTimeout: 4000,\n maxRetries: Infinity,\n debug: false,\n });\n\n const handlers = new Map<string, Set<(event: SystemEvent) => void>>();\n const pendingRequests = new Map<\n string,\n {\n resolve: (event: SystemEvent) => void;\n reject: (err: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n }\n >();\n\n // Handle incoming messages\n client.onMessage((message: string) => {\n try {\n const event = JSON.parse(message) as SystemEvent;\n\n remoteLogger.info(\"Received event\", {\n type: event.type,\n category: event.category,\n requestId: (event.data as any)?.requestId,\n });\n\n // Handle error events - log as error (but still dispatch to handlers)\n if (event.type === \"system_error\") {\n const errorData = event.data as { message: string; severity?: string; details?: unknown };\n remoteLogger.error(errorData.message, {\n severity: errorData.severity,\n requestId: (event.data as any)?.requestId,\n details: errorData.details,\n });\n // Continue to dispatch to handlers (don't return here)\n }\n\n // Check if it's a response to a pending request\n const requestId = (event.data as { requestId?: string })?.requestId;\n if (event.category === \"response\" && requestId && pendingRequests.has(requestId)) {\n remoteLogger.info(\"Resolving pending request\", { requestId, eventType: event.type });\n const pending = pendingRequests.get(requestId)!;\n clearTimeout(pending.timer);\n pendingRequests.delete(requestId);\n pending.resolve(event);\n return;\n }\n\n remoteLogger.info(\"Dispatching to handlers\", { type: event.type });\n\n // Dispatch to handlers\n const typeHandlers = handlers.get(event.type);\n if (typeHandlers) {\n for (const handler of typeHandlers) {\n handler(event);\n }\n }\n\n // Dispatch to \"*\" handlers\n const allHandlers = handlers.get(\"*\");\n if (allHandlers) {\n for (const handler of allHandlers) {\n handler(event);\n }\n }\n } catch {\n // Ignore parse errors\n }\n });\n\n // Handle connection events\n client.onClose(() => {\n remoteLogger.warn(\"WebSocket closed\");\n });\n\n client.onError((error: Error) => {\n remoteLogger.error(\"WebSocket error\", { error: error.message });\n });\n\n function subscribe(type: string, handler: (event: SystemEvent) => void): Unsubscribe {\n if (!handlers.has(type)) {\n handlers.set(type, new Set());\n }\n handlers.get(type)!.add(handler);\n return () => {\n handlers.get(type)?.delete(handler);\n };\n }\n\n return {\n async request<T extends CommandRequestType>(\n type: T,\n data: RequestDataFor<T>,\n timeout: number = 30000\n ): Promise<ResponseEventFor<T>> {\n const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;\n\n // Resolve and merge context if provided\n let mergedData = { ...data, requestId };\n if (config.context) {\n try {\n let resolvedContext: Record<string, unknown>;\n if (typeof config.context === \"function\") {\n resolvedContext = await Promise.resolve(config.context());\n } else {\n resolvedContext = config.context;\n }\n\n // Merge context into data\n // Request-level context (if present in data) takes precedence\n mergedData = {\n ...resolvedContext,\n ...data,\n requestId,\n } as RequestDataFor<T> & { requestId: string };\n\n remoteLogger.info(\"Merged context into request\", {\n type,\n requestId,\n contextKeys: Object.keys(resolvedContext),\n });\n } catch (error) {\n remoteLogger.error(\"Failed to resolve context\", {\n type,\n requestId,\n error: error instanceof Error ? error.message : String(error),\n });\n // Continue without context if resolution fails\n }\n }\n\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n pendingRequests.delete(requestId);\n reject(new Error(`Request timeout: ${type}`));\n }, timeout);\n\n pendingRequests.set(requestId, {\n resolve: resolve as (event: SystemEvent) => void,\n reject,\n timer,\n });\n\n const event: SystemEvent = {\n type,\n timestamp: Date.now(),\n data: mergedData,\n source: \"command\",\n category: \"request\",\n intent: \"request\",\n };\n\n client.send(JSON.stringify(event));\n });\n },\n\n on<T extends string>(\n type: T,\n handler: (event: SystemEvent & { type: T }) => void\n ): Unsubscribe {\n return subscribe(type, handler as (event: SystemEvent) => void);\n },\n\n onCommand<T extends keyof CommandEventMap>(\n type: T,\n handler: (event: CommandEventMap[T]) => void\n ): Unsubscribe {\n return subscribe(type, handler as (event: SystemEvent) => void);\n },\n\n emitCommand<T extends keyof CommandEventMap>(type: T, data: CommandEventMap[T][\"data\"]): void {\n const event: SystemEvent = {\n type,\n timestamp: Date.now(),\n data,\n source: \"command\",\n category: type.toString().endsWith(\"_response\") ? \"response\" : \"request\",\n intent: type.toString().endsWith(\"_response\") ? \"result\" : \"request\",\n };\n client.send(JSON.stringify(event));\n },\n\n async listen() {\n throw new Error(\"Cannot listen in remote mode\");\n },\n\n async close() {\n // No-op in remote mode\n },\n\n async dispose() {\n for (const pending of pendingRequests.values()) {\n clearTimeout(pending.timer);\n pending.reject(new Error(\"AgentX disposed\"));\n }\n pendingRequests.clear();\n handlers.clear();\n client.dispose();\n },\n };\n}\n",
5
+ "/**\n * createRemoteAgentX - Remote mode implementation\n *\n * Connects to an AgentX server via WebSocket.\n * Works in both browser and Node.js environments.\n *\n * Uses Network layer's reliable message delivery - ACK is handled automatically\n * at the transport layer. Events are received directly (not wrapped in queue_entry).\n */\n\nimport type { AgentX, RemoteConfig, Unsubscribe, AgentXResponse } from \"@agentxjs/types/agentx\";\nimport { hasSubscriptions } from \"@agentxjs/types/agentx\";\nimport type {\n CommandEventMap,\n CommandRequestType,\n ResponseEventFor,\n RequestDataFor,\n SystemEvent,\n} from \"@agentxjs/types/event\";\nimport { createLogger, generateRequestId } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/RemoteClient\");\n\n/**\n * Create AgentX instance in remote mode\n *\n * @param config - Remote configuration (serverUrl, headers, context)\n * @returns AgentX instance\n */\nexport async function createRemoteAgentX(config: RemoteConfig): Promise<AgentX> {\n // Use @agentxjs/network for WebSocket client (handles browser/Node.js differences)\n const { createWebSocketClient } = await import(\"@agentxjs/network\");\n\n const client = await createWebSocketClient({\n serverUrl: config.serverUrl,\n headers: config.headers,\n autoReconnect: true,\n minReconnectionDelay: 1000,\n maxReconnectionDelay: 10000,\n connectionTimeout: 4000,\n maxRetries: Infinity,\n debug: false,\n });\n\n logger.info(\"Client connected\");\n\n const handlers = new Map<string, Set<(event: SystemEvent) => void>>();\n const pendingRequests = new Map<\n string,\n {\n resolve: (event: SystemEvent) => void;\n reject: (err: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n }\n >();\n\n // Track subscribed sessions\n const subscribedSessions = new Set<string>([\"global\"]); // Always subscribe to global\n\n // Helper: Subscribe to a session\n function subscribeToSession(sessionId: string): void {\n if (subscribedSessions.has(sessionId)) {\n return; // Already subscribed\n }\n\n client.send(\n JSON.stringify({\n type: \"subscribe\",\n sessionId,\n })\n );\n\n subscribedSessions.add(sessionId);\n logger.debug(\"Subscribed to session\", { sessionId });\n }\n\n // Handle incoming messages\n // Network layer auto-ACKs reliable messages, we just receive the payload directly\n client.onMessage((message: string) => {\n try {\n const event = JSON.parse(message) as SystemEvent;\n\n logger.debug(\"Received event\", {\n type: event.type,\n category: event.category,\n requestId: (event.data as any)?.requestId,\n });\n\n // Handle error events - log as error (but still dispatch to handlers)\n if (event.type === \"system_error\") {\n const errorData = event.data as { message: string; severity?: string; details?: unknown };\n logger.error(errorData.message, {\n severity: errorData.severity,\n requestId: (event.data as any)?.requestId,\n details: errorData.details,\n });\n // Continue to dispatch to handlers (don't return here)\n }\n\n // Check if it's a response to a pending request\n const requestId = (event.data as { requestId?: string })?.requestId;\n if (event.category === \"response\" && requestId && pendingRequests.has(requestId)) {\n logger.debug(\"Resolving pending request\", { requestId, eventType: event.type });\n const pending = pendingRequests.get(requestId)!;\n clearTimeout(pending.timer);\n pendingRequests.delete(requestId);\n pending.resolve(event);\n return;\n }\n\n // Dispatch to type handlers\n const typeHandlers = handlers.get(event.type);\n if (typeHandlers) {\n for (const handler of typeHandlers) {\n handler(event);\n }\n }\n\n // Dispatch to \"*\" handlers\n const allHandlers = handlers.get(\"*\");\n if (allHandlers) {\n for (const handler of allHandlers) {\n handler(event);\n }\n }\n } catch {\n // Ignore parse errors\n }\n });\n\n // Handle connection events\n client.onClose(() => {\n logger.warn(\"WebSocket closed\");\n });\n\n client.onError((error: Error) => {\n logger.error(\"WebSocket error\", { error: error.message });\n });\n\n // Re-subscribe to sessions on reconnection\n client.onOpen(() => {\n if (subscribedSessions.size > 1) {\n // More than just \"global\"\n logger.info(\"Reconnected, re-subscribing to sessions\", {\n sessions: Array.from(subscribedSessions),\n });\n // Re-send subscribe messages\n for (const sessionId of subscribedSessions) {\n if (sessionId !== \"global\") {\n client.send(\n JSON.stringify({\n type: \"subscribe\",\n sessionId,\n })\n );\n }\n }\n }\n });\n\n function subscribe(type: string, handler: (event: SystemEvent) => void): Unsubscribe {\n if (!handlers.has(type)) {\n handlers.set(type, new Set());\n }\n handlers.get(type)!.add(handler);\n return () => {\n handlers.get(type)?.delete(handler);\n };\n }\n\n return {\n async request<T extends CommandRequestType>(\n type: T,\n data: RequestDataFor<T>,\n timeout: number = 30000\n ): Promise<ResponseEventFor<T>> {\n const requestId = generateRequestId();\n\n // Resolve and merge context if provided\n let mergedData = { ...data, requestId };\n if (config.context) {\n try {\n let resolvedContext: Record<string, unknown>;\n if (typeof config.context === \"function\") {\n resolvedContext = await Promise.resolve(config.context());\n } else {\n resolvedContext = config.context;\n }\n\n // Merge context into data\n // Request-level context (if present in data) takes precedence\n mergedData = {\n ...resolvedContext,\n ...data,\n requestId,\n } as RequestDataFor<T> & { requestId: string };\n\n logger.debug(\"Merged context into request\", {\n type,\n requestId,\n contextKeys: Object.keys(resolvedContext),\n });\n } catch (error) {\n logger.error(\"Failed to resolve context\", {\n type,\n requestId,\n error: error instanceof Error ? error.message : String(error),\n });\n // Continue without context if resolution fails\n }\n }\n\n const response = await new Promise<ResponseEventFor<T>>((resolve, reject) => {\n const timer = setTimeout(() => {\n pendingRequests.delete(requestId);\n reject(new Error(`Request timeout: ${type}`));\n }, timeout);\n\n pendingRequests.set(requestId, {\n resolve: resolve as (event: SystemEvent) => void,\n reject,\n timer,\n });\n\n const event: SystemEvent = {\n type,\n timestamp: Date.now(),\n data: mergedData,\n source: \"command\",\n category: \"request\",\n intent: \"request\",\n };\n\n client.send(JSON.stringify(event));\n });\n\n // Handle AgentXResponse extensions (unified approach)\n // Auto-subscribe to sessions based on __subscriptions field\n const responseData = response.data as AgentXResponse;\n if (hasSubscriptions(responseData)) {\n for (const sessionId of responseData.__subscriptions) {\n subscribeToSession(sessionId);\n }\n logger.debug(\"Auto-subscribed to sessions from response\", {\n type,\n sessionIds: responseData.__subscriptions,\n });\n }\n\n return response;\n },\n\n on<T extends string>(\n type: T,\n handler: (event: SystemEvent & { type: T }) => void\n ): Unsubscribe {\n return subscribe(type, handler as (event: SystemEvent) => void);\n },\n\n onCommand<T extends keyof CommandEventMap>(\n type: T,\n handler: (event: CommandEventMap[T]) => void\n ): Unsubscribe {\n return subscribe(type, handler as (event: SystemEvent) => void);\n },\n\n emitCommand<T extends keyof CommandEventMap>(type: T, data: CommandEventMap[T][\"data\"]): void {\n const event: SystemEvent = {\n type,\n timestamp: Date.now(),\n data,\n source: \"command\",\n category: type.toString().endsWith(\"_response\") ? \"response\" : \"request\",\n intent: type.toString().endsWith(\"_response\") ? \"result\" : \"request\",\n };\n client.send(JSON.stringify(event));\n },\n\n async listen() {\n throw new Error(\"Cannot listen in remote mode\");\n },\n\n async close() {\n // No-op in remote mode\n },\n\n async dispose() {\n for (const pending of pendingRequests.values()) {\n clearTimeout(pending.timer);\n pending.reject(new Error(\"AgentX disposed\"));\n }\n pendingRequests.clear();\n handlers.clear();\n subscribedSessions.clear();\n client.dispose();\n },\n };\n}\n",
6
+ "/**\n * createLocalAgentX - Local mode implementation\n *\n * This file is dynamically imported to enable tree-shaking in browser builds.\n * Contains Node.js specific code (runtime, WebSocket server).\n */\n\nimport type { AgentX, LocalConfig } from \"@agentxjs/types/agentx\";\nimport type { SystemEvent } from \"@agentxjs/types/event\";\nimport type { Message } from \"@agentxjs/types/agent\";\nimport type { ChannelConnection } from \"@agentxjs/types/network\";\nimport { WebSocketServer } from \"@agentxjs/network\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/LocalAgentX\");\n\nexport async function createLocalAgentX(config: LocalConfig): Promise<AgentX> {\n // Apply logger configuration\n if (config.logger) {\n const { LoggerFactoryImpl, setLoggerFactory } = await import(\"@agentxjs/common\");\n\n LoggerFactoryImpl.configure({\n defaultLevel: config.logger.level,\n consoleOptions: config.logger.console,\n });\n\n if (config.logger.factory) {\n setLoggerFactory(config.logger.factory);\n }\n }\n\n // Dynamic import to avoid bundling runtime in browser\n const { createRuntime, RuntimeEnvironment } = await import(\"@agentxjs/runtime\");\n const { createPersistence } = await import(\"@agentxjs/persistence\");\n const { sqliteDriver } = await import(\"@agentxjs/persistence/sqlite\");\n const { homedir } = await import(\"node:os\");\n const { join } = await import(\"node:path\");\n\n // Configure global runtime environment if provided\n if (config.environment?.claudeCodePath) {\n RuntimeEnvironment.setClaudeCodePath(config.environment.claudeCodePath);\n }\n\n // Determine base path for runtime data\n const basePath = config.agentxDir ?? join(homedir(), \".agentx\");\n\n // Auto-configure storage: SQLite at {agentxDir}/data/agentx.db\n const storagePath = join(basePath, \"data\", \"agentx.db\");\n const persistence = await createPersistence(sqliteDriver({ path: storagePath }));\n\n // Create event queue for pub/sub and reconnection recovery\n // Queue is decoupled from network protocol - we hook Network ACK to Queue ACK\n const { createQueue } = await import(\"@agentxjs/queue\");\n const queuePath = join(basePath, \"data\", \"queue.db\");\n const eventQueue = createQueue({ path: queuePath });\n\n const runtime = createRuntime({\n persistence,\n basePath,\n llmProvider: {\n name: \"claude\",\n provide: () => ({\n apiKey: config.llm?.apiKey ?? \"\",\n baseUrl: config.llm?.baseUrl,\n model: config.llm?.model,\n }),\n },\n environmentFactory: config.environmentFactory,\n defaultAgent: config.defaultAgent,\n });\n\n // Create WebSocket server\n const wsServer = new WebSocketServer({\n heartbeat: true,\n heartbeatInterval: 30000,\n debug: false,\n });\n\n // Track active connections and their subscribed sessions\n const connections = new Map<\n string,\n {\n connection: ChannelConnection;\n subscribedSessions: Set<string>;\n }\n >();\n\n // Subscribe to queue topics and deliver to clients\n // This is set up per-connection when client subscribes to a session\n function subscribeConnectionToTopic(connectionId: string, topic: string): void {\n const connState = connections.get(connectionId);\n if (!connState) return;\n\n // Already subscribed?\n if (connState.subscribedSessions.has(topic)) return;\n connState.subscribedSessions.add(topic);\n\n // Subscribe to queue for this topic\n const unsubscribe = eventQueue.subscribe(topic, (entry) => {\n const event = entry.event as SystemEvent;\n const message = JSON.stringify(event);\n\n connState.connection.sendReliable(message, {\n onAck: () => {\n // Hook: Network ACK Queue ACK\n eventQueue.ack(connectionId, topic, entry.cursor).catch((err) => {\n logger.error(\"Failed to ack\", { error: (err as Error).message });\n });\n // Persist message after client confirms receipt\n persistMessage(event);\n },\n timeout: 10000,\n onTimeout: () => {\n logger.warn(\"ACK timeout for event\", {\n connectionId,\n eventType: event.type,\n topic,\n });\n },\n });\n });\n\n // Cleanup on disconnect\n connState.connection.onClose(() => {\n unsubscribe();\n });\n\n logger.debug(\"Connection subscribed to queue topic\", { connectionId, topic });\n }\n\n // Handle new connections\n wsServer.onConnection((connection) => {\n // Track this connection\n connections.set(connection.id, {\n connection,\n subscribedSessions: new Set(),\n });\n\n logger.info(\"Client connected\", { connectionId: connection.id });\n\n // Subscribe to global topic by default\n subscribeConnectionToTopic(connection.id, \"global\");\n\n // Forward messages to runtime\n connection.onMessage((message) => {\n try {\n const parsed = JSON.parse(message);\n\n // Handle session subscription request (simplified protocol)\n if (parsed.type === \"subscribe\" && parsed.sessionId) {\n subscribeConnectionToTopic(connection.id, parsed.sessionId);\n\n // Send historical events for reconnection recovery\n const lastCursor = parsed.afterCursor;\n if (lastCursor) {\n eventQueue\n .recover(parsed.sessionId, lastCursor)\n .then((entries) => {\n for (const entry of entries) {\n connection.send(JSON.stringify(entry.event));\n }\n })\n .catch((err) => {\n logger.error(\"Failed to recover history\", { error: (err as Error).message });\n });\n }\n return;\n }\n\n // Regular event - forward to runtime\n const event = parsed as SystemEvent;\n logger.debug(\"Received client message\", {\n type: event.type,\n category: event.category,\n });\n runtime.emit(event);\n } catch {\n // Ignore parse errors\n }\n });\n\n // Cleanup on disconnect\n connection.onClose(() => {\n connections.delete(connection.id);\n logger.info(\"Client disconnected\", { connectionId: connection.id });\n });\n });\n\n /**\n * Determine if an event should be enqueued for external delivery\n *\n * Internal events (not enqueued):\n * - source: \"environment\" DriveableEvent (raw LLM events for BusDriver)\n * - intent: \"request\" Control events (user_message, interrupt)\n *\n * External events (enqueued):\n * - source: \"agent\" → Transformed events from BusPresenter\n * - source: \"session\" Session lifecycle\n * - source: \"command\" → Request/Response\n */\n function shouldEnqueue(event: SystemEvent): boolean {\n if (event.source === \"environment\") return false;\n if (event.intent === \"request\") return false;\n return true;\n }\n\n /**\n * Persist message to session storage\n */\n function persistMessage(event: SystemEvent): void {\n if (event.category !== \"message\" || !event.data) return;\n\n const sessionId = (event.context as any)?.sessionId;\n if (!sessionId) return;\n\n const message = event.data as Message;\n logger.debug(\"Persisting message on ACK\", {\n sessionId,\n messageType: event.type,\n messageId: message.id,\n });\n\n persistence.sessions.addMessage(sessionId, message).catch((err) => {\n logger.error(\"Failed to persist message\", {\n sessionId,\n error: (err as Error).message,\n });\n });\n }\n\n // Route runtime events to Queue for pub/sub\n runtime.onAny((event) => {\n // Only deliver external events (internal events are for BusDriver/AgentEngine only)\n if (!shouldEnqueue(event)) {\n return;\n }\n\n // Determine topic from event context (sessionId or \"global\")\n const topic = (event.context as any)?.sessionId ?? \"global\";\n\n // Publish to queue (broadcasts to subscribers + persists async)\n eventQueue.publish(topic, event);\n });\n\n // If server is provided, attach WebSocket to it immediately\n if (config.server) {\n wsServer.attach(config.server, \"/ws\");\n }\n\n return {\n // Core API - delegate to runtime\n request: (type, data, timeout) => runtime.request(type, data, timeout),\n\n on: (type, handler) => {\n // Local mode filters by event source (not broadcastable)\n // Only deliver external events (source: agent/session/command)\n return runtime.on(type, (event) => {\n // Skip internal events (DriveableEvent, control events)\n if (!shouldEnqueue(event)) {\n return;\n }\n handler(event);\n });\n },\n\n onCommand: (type, handler) => runtime.onCommand(type, handler),\n\n emitCommand: (type, data) => runtime.emitCommand(type, data),\n\n // Server API\n async listen(port: number, host?: string) {\n if (config.server) {\n throw new Error(\n \"Cannot listen when attached to existing server. The server should call listen() instead.\"\n );\n }\n await wsServer.listen(port, host);\n },\n\n async close() {\n await wsServer.close();\n },\n\n async dispose() {\n // Dispose in correct order to avoid \"publish to closed queue\" warnings:\n // 1. Stop accepting new connections/requests\n await wsServer.dispose();\n // 2. Stop runtime (no more events generated)\n await runtime.dispose();\n // 3. Close queue last (safe to close after no more events)\n await eventQueue.close();\n },\n };\n}\n",
7
+ "/**\n * createAgentX - Factory function for creating AgentX instances\n *\n * Supports two modes:\n * - Local mode: Uses Runtime directly (Claude API) - Node.js only\n * - Remote mode: Connects to AgentX server via WebSocket - Browser & Node.js\n *\n * Mode implementations are dynamically imported to enable tree-shaking\n * in browser builds.\n */\n\nimport type { AgentX, AgentXConfig } from \"@agentxjs/types/agentx\";\nimport { isRemoteConfig } from \"@agentxjs/types/agentx\";\n\n/**\n * Create AgentX instance\n *\n * @param config - Configuration (LocalConfig or RemoteConfig)\n * @returns AgentX instance\n *\n * @example\n * ```typescript\n * // Remote mode (browser & Node.js)\n * const agentx = await createAgentX({ serverUrl: \"ws://localhost:5200\" });\n *\n * // Local mode (Node.js only)\n * const agentx = await createAgentX({ llm: { apiKey: \"sk-...\" } });\n * ```\n */\nexport async function createAgentX(config?: AgentXConfig): Promise<AgentX> {\n if (config && isRemoteConfig(config)) {\n // Dynamic import for Remote mode\n const { createRemoteAgentX } = await import(\"./createRemoteAgentX\");\n return createRemoteAgentX(config);\n }\n\n // Dynamic import for Local mode (tree-shaking in browser builds)\n const { createLocalAgentX } = await import(\"./createLocalAgentX\");\n return createLocalAgentX(config ?? {});\n}\n\n// Re-export for direct usage\nexport { createRemoteAgentX } from \"./createRemoteAgentX\";\n",
7
8
  "/**\n * agentxjs - Unified API for AI Agents\n *\n * All public types and functions are exported from this single entry point.\n * Users only need: `import { ... } from \"agentxjs\"`\n *\n * @example\n * ```typescript\n * import { createAgentX, type AgentX, type SystemEvent } from \"agentxjs\";\n *\n * // Local mode\n * const agentx = await createAgentX();\n *\n * // Remote mode\n * const agentx = await createAgentX({ server: \"ws://localhost:5200\" });\n *\n * // Same API for both modes!\n * const res = await agentx.request(\"container_create_request\", {\n * containerId: \"my-container\"\n * });\n *\n * agentx.on(\"text_delta\", (e) => console.log(e.data.text));\n * ```\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Factory\n// ============================================================================\n\nexport { createAgentX, createRemoteAgentX } from \"./createAgentX\";\n\n// ============================================================================\n// Core Types - AgentX API\n// ============================================================================\n\nexport type {\n AgentX,\n AgentXConfig,\n LocalConfig,\n RemoteConfig,\n LLMConfig,\n StorageConfig,\n StorageDriver,\n Unsubscribe,\n AgentDefinition,\n} from \"@agentxjs/types/agentx\";\n\nexport { isLocalConfig, isRemoteConfig } from \"@agentxjs/types/agentx\";\n\n// ============================================================================\n// defineAgent - Implementation\n// ============================================================================\n\nimport type { AgentDefinition } from \"@agentxjs/types/agentx\";\n\n/**\n * Define an Agent with type safety\n *\n * Helper function that provides type inference for AgentDefinition.\n *\n * @example\n * ```typescript\n * import { defineAgent } from \"agentxjs\";\n *\n * export const MyAgent = defineAgent({\n * name: \"MyAgent\",\n * systemPrompt: \"You are helpful.\",\n * mcpServers: {\n * filesystem: { command: \"npx\", args: [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/tmp\"] }\n * }\n * });\n * ```\n */\nexport function defineAgent<T extends AgentDefinition>(definition: T): T {\n return definition;\n}\n\n// ============================================================================\n// Event Types - SystemEvent and all event categories\n// ============================================================================\n\n// Base event\nexport type {\n SystemEvent,\n EventSource,\n EventCategory,\n EventIntent,\n EventContext,\n} from \"@agentxjs/types/event\";\n\nexport {\n isFromSource,\n hasIntent,\n isRequest,\n isResult,\n isNotification,\n} from \"@agentxjs/types/event\";\n\n// Command events (request/response)\nexport type {\n CommandEvent,\n CommandRequest,\n CommandResponse,\n CommandEventType,\n CommandRequestType,\n CommandEventMap,\n // Container commands\n ContainerCreateRequest,\n ContainerCreateResponse,\n ContainerGetRequest,\n ContainerGetResponse,\n ContainerListRequest,\n ContainerListResponse,\n // Agent commands\n AgentGetRequest,\n AgentGetResponse,\n AgentListRequest,\n AgentListResponse,\n AgentDestroyRequest,\n AgentDestroyResponse,\n MessageSendRequest,\n MessageSendResponse,\n AgentInterruptRequest,\n AgentInterruptResponse,\n // Image commands\n ImageCreateRequest,\n ImageCreateResponse,\n ImageRunRequest,\n ImageRunResponse,\n ImageStopRequest,\n ImageStopResponse,\n ImageUpdateRequest,\n ImageUpdateResponse,\n ImageListRequest,\n ImageListResponse,\n ImageListItem,\n ImageGetRequest,\n ImageGetResponse,\n ImageDeleteRequest,\n ImageDeleteResponse,\n} from \"@agentxjs/types/event\";\n\nexport { isCommandEvent, isCommandRequest, isCommandResponse } from \"@agentxjs/types/event\";\n\n// Agent events (stream/state/message/turn)\nexport type {\n AgentEvent,\n AgentEventCategory,\n // Stream events\n AgentStreamEvent,\n AgentTextDeltaEvent,\n AgentMessageStartEvent,\n AgentMessageStopEvent,\n AgentToolUseStartEvent,\n AgentToolUseStopEvent,\n AgentToolResultEvent,\n // State events\n AgentStateEvent,\n ConversationStartEvent,\n ConversationEndEvent,\n ConversationThinkingEvent,\n ConversationRespondingEvent,\n ToolExecutingEvent,\n ToolCompletedEvent,\n ErrorOccurredEvent,\n // Message events\n AgentMessageEvent,\n UserMessageEvent,\n AssistantMessageEvent,\n ToolCallMessageEvent,\n ToolResultMessageEvent,\n // Turn events\n AgentTurnEvent,\n TurnRequestEvent,\n TurnResponseEvent,\n TokenUsage,\n} from \"@agentxjs/types/event\";\n\nexport {\n isAgentEvent,\n isAgentStreamEvent,\n isAgentStateEvent,\n isAgentMessageEvent,\n isAgentTurnEvent,\n} from \"@agentxjs/types/event\";\n\n// ============================================================================\n// Data Types - Records and Messages\n// ============================================================================\n\n// Image record (for persistence)\nexport type { ImageRecord } from \"@agentxjs/types\";\n\n// Message types (for UI components)\nexport type {\n Message,\n MessageRole,\n MessageSubtype,\n UserMessage,\n AssistantMessage,\n ToolCallMessage,\n ToolResultMessage,\n ErrorMessage,\n AgentError,\n AgentState,\n ContentPart,\n UserContentPart,\n TextPart,\n ThinkingPart,\n ImagePart,\n FilePart,\n ToolCallPart,\n ToolResultPart,\n ToolResultOutput,\n} from \"@agentxjs/types/agent\";\n\n// ============================================================================\n// Logger - from @agentxjs/common\n// ============================================================================\n\nexport { createLogger, ConsoleLogger, LoggerFactoryImpl, setLoggerFactory } from \"@agentxjs/common\";\n\nexport type {\n Logger,\n LoggerFactory,\n LogContext,\n LogLevel,\n ConsoleLoggerOptions,\n LoggerFactoryConfig,\n} from \"@agentxjs/common\";\n"
8
9
  ],
9
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA;AACA;AAIA,eAAsB,iBAAiB,CAAC,QAAsC;AAAA,EAE5E,IAAI,OAAO,QAAQ;AAAA,IACjB,QAAQ,mBAAmB,qBAAqB,MAAa;AAAA,IAE7D,kBAAkB,UAAU;AAAA,MAC1B,cAAc,OAAO,OAAO;AAAA,MAC5B,gBAAgB,OAAO,OAAO;AAAA,IAChC,CAAC;AAAA,IAED,IAAI,OAAO,OAAO,SAAS;AAAA,MACzB,iBAAiB,OAAO,OAAO,OAAO;AAAA,IACxC;AAAA,EACF;AAAA,EAGA,QAAQ,eAAe,uBAAuB,MAAa;AAAA,EAC3D,QAAQ,sBAAsB,MAAa;AAAA,EAC3C,QAAQ,iBAAiB,MAAa;AAAA,EACtC,QAAQ,YAAY,MAAa;AAAA,EACjC,QAAQ,SAAS,MAAa;AAAA,EAG9B,IAAI,OAAO,aAAa,gBAAgB;AAAA,IACtC,mBAAmB,kBAAkB,OAAO,YAAY,cAAc;AAAA,EACxE;AAAA,EAGA,MAAM,WAAW,OAAO,aAAa,KAAK,QAAQ,GAAG,SAAS;AAAA,EAG9D,MAAM,cAAc,KAAK,UAAU,QAAQ,WAAW;AAAA,EACtD,MAAM,cAAc,MAAM,kBAAkB,aAAa,EAAE,MAAM,YAAY,CAAC,CAAC;AAAA,EAE/E,MAAM,UAAU,cAAc;AAAA,IAC5B;AAAA,IACA;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS,OAAO;AAAA,QACd,QAAQ,OAAO,KAAK,UAAU;AAAA,QAC9B,SAAS,OAAO,KAAK;AAAA,QACrB,OAAO,OAAO,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,IACA,cAAc,OAAO;AAAA,EACvB,CAAC;AAAA,EAGD,MAAM,WAAW,IAAI,gBAAgB;AAAA,IACnC,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,OAAO;AAAA,EACT,CAAC;AAAA,EAGD,SAAS,aAAa,CAAC,eAAe;AAAA,IAEpC,WAAW,UAAU,CAAC,YAAY;AAAA,MAChC,IAAI;AAAA,QACF,MAAM,QAAQ,KAAK,MAAM,OAAO;AAAA,QAChC,OAAO,MAAM,2BAA2B;AAAA,UACtC,MAAM,MAAM;AAAA,UACZ,UAAU,MAAM;AAAA,QAClB,CAAC;AAAA,QACD,QAAQ,KAAK,KAAK;AAAA,QAClB,MAAM;AAAA,KAGT;AAAA,GACF;AAAA,EAGD,QAAQ,MAAM,CAAC,UAAU;AAAA,IAEvB,IAAK,MAAc,kBAAkB,OAAO;AAAA,MAC1C;AAAA,IACF;AAAA,IAGA,OAAO,MAAM,sBAAsB;AAAA,MACjC,MAAM,MAAM;AAAA,MACZ,UAAU,MAAM;AAAA,MAChB,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,MAAM,MAAM;AAAA,IACd,CAAC;AAAA,IAED,SAAS,UAAU,KAAK,UAAU,KAAK,CAAC;AAAA,GACzC;AAAA,EAGD,IAAI,OAAO,QAAQ;AAAA,IACjB,SAAS,OAAO,OAAO,QAAQ,KAAK;AAAA,EACtC;AAAA,EAEA,OAAO;AAAA,IAEL,SAAS,CAAC,MAAM,MAAM,YAAY,QAAQ,QAAQ,MAAM,MAAM,OAAO;AAAA,IAErE,IAAI,CAAC,MAAM,YAAY,QAAQ,GAAG,MAAM,OAAO;AAAA,IAE/C,WAAW,CAAC,MAAM,YAAY,QAAQ,UAAU,MAAM,OAAO;AAAA,IAE7D,aAAa,CAAC,MAAM,SAAS,QAAQ,YAAY,MAAM,IAAI;AAAA,SAGrD,OAAM,CAAC,MAAc,MAAe;AAAA,MACxC,IAAI,OAAO,QAAQ;AAAA,QACjB,MAAM,IAAI,MACR,0FACF;AAAA,MACF;AAAA,MACA,MAAM,SAAS,OAAO,MAAM,IAAI;AAAA;AAAA,SAG5B,MAAK,GAAG;AAAA,MACZ,MAAM,SAAS,MAAM;AAAA;AAAA,SAGjB,QAAO,GAAG;AAAA,MACd,MAAM,SAAS,QAAQ;AAAA,MACvB,MAAM,QAAQ,QAAQ;AAAA;AAAA,EAE1B;AAAA;AAAA,IA9HI;AAAA;AAAA,WAAS,aAAa,oBAAoB;AAAA;;;ACAhD;AAQA,yBAAS;AAET,IAAM,eAAe,cAAa,qBAAqB;AAiBvD,eAAsB,YAAY,CAAC,QAAwC;AAAA,EACzE,IAAI,UAAU,eAAe,MAAM,GAAG;AAAA,IACpC,OAAO,mBAAmB,MAAM;AAAA,EAClC;AAAA,EAGA,QAAQ,0CAAsB;AAAA,EAC9B,OAAO,mBAAkB,UAAU,CAAC,CAAC;AAAA;AAgBvC,eAAsB,kBAAkB,CAAC,QAAuC;AAAA,EAE9E,QAAQ,0BAA0B,MAAa;AAAA,EAE/C,MAAM,SAAS,MAAM,sBAAsB;AAAA,IACzC,WAAW,OAAO;AAAA,IAClB,SAAS,OAAO;AAAA,IAChB,eAAe;AAAA,IACf,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,IACnB,YAAY;AAAA,IACZ,OAAO;AAAA,EACT,CAAC;AAAA,EAED,MAAM,WAAW,IAAI;AAAA,EACrB,MAAM,kBAAkB,IAAI;AAAA,EAU5B,OAAO,UAAU,CAAC,YAAoB;AAAA,IACpC,IAAI;AAAA,MACF,MAAM,QAAQ,KAAK,MAAM,OAAO;AAAA,MAEhC,aAAa,KAAK,kBAAkB;AAAA,QAClC,MAAM,MAAM;AAAA,QACZ,UAAU,MAAM;AAAA,QAChB,WAAY,MAAM,MAAc;AAAA,MAClC,CAAC;AAAA,MAGD,IAAI,MAAM,SAAS,gBAAgB;AAAA,QACjC,MAAM,YAAY,MAAM;AAAA,QACxB,aAAa,MAAM,UAAU,SAAS;AAAA,UACpC,UAAU,UAAU;AAAA,UACpB,WAAY,MAAM,MAAc;AAAA,UAChC,SAAS,UAAU;AAAA,QACrB,CAAC;AAAA,MAEH;AAAA,MAGA,MAAM,YAAa,MAAM,MAAiC;AAAA,MAC1D,IAAI,MAAM,aAAa,cAAc,aAAa,gBAAgB,IAAI,SAAS,GAAG;AAAA,QAChF,aAAa,KAAK,6BAA6B,EAAE,WAAW,WAAW,MAAM,KAAK,CAAC;AAAA,QACnF,MAAM,UAAU,gBAAgB,IAAI,SAAS;AAAA,QAC7C,aAAa,QAAQ,KAAK;AAAA,QAC1B,gBAAgB,OAAO,SAAS;AAAA,QAChC,QAAQ,QAAQ,KAAK;AAAA,QACrB;AAAA,MACF;AAAA,MAEA,aAAa,KAAK,2BAA2B,EAAE,MAAM,MAAM,KAAK,CAAC;AAAA,MAGjE,MAAM,eAAe,SAAS,IAAI,MAAM,IAAI;AAAA,MAC5C,IAAI,cAAc;AAAA,QAChB,WAAW,WAAW,cAAc;AAAA,UAClC,QAAQ,KAAK;AAAA,QACf;AAAA,MACF;AAAA,MAGA,MAAM,cAAc,SAAS,IAAI,GAAG;AAAA,MACpC,IAAI,aAAa;AAAA,QACf,WAAW,WAAW,aAAa;AAAA,UACjC,QAAQ,KAAK;AAAA,QACf;AAAA,MACF;AAAA,MACA,MAAM;AAAA,GAGT;AAAA,EAGD,OAAO,QAAQ,MAAM;AAAA,IACnB,aAAa,KAAK,kBAAkB;AAAA,GACrC;AAAA,EAED,OAAO,QAAQ,CAAC,UAAiB;AAAA,IAC/B,aAAa,MAAM,mBAAmB,EAAE,OAAO,MAAM,QAAQ,CAAC;AAAA,GAC/D;AAAA,EAED,SAAS,SAAS,CAAC,MAAc,SAAoD;AAAA,IACnF,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG;AAAA,MACvB,SAAS,IAAI,MAAM,IAAI,GAAK;AAAA,IAC9B;AAAA,IACA,SAAS,IAAI,IAAI,EAAG,IAAI,OAAO;AAAA,IAC/B,OAAO,MAAM;AAAA,MACX,SAAS,IAAI,IAAI,GAAG,OAAO,OAAO;AAAA;AAAA;AAAA,EAItC,OAAO;AAAA,SACC,QAAqC,CACzC,MACA,MACA,UAAkB,OACY;AAAA,MAC9B,MAAM,YAAY,OAAO,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC;AAAA,MAGhF,IAAI,aAAa,KAAK,MAAM,UAAU;AAAA,MACtC,IAAI,OAAO,SAAS;AAAA,QAClB,IAAI;AAAA,UACF,IAAI;AAAA,UACJ,IAAI,OAAO,OAAO,YAAY,YAAY;AAAA,YACxC,kBAAkB,MAAM,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,UAC1D,EAAO;AAAA,YACL,kBAAkB,OAAO;AAAA;AAAA,UAK3B,aAAa;AAAA,eACR;AAAA,eACA;AAAA,YACH;AAAA,UACF;AAAA,UAEA,aAAa,KAAK,+BAA+B;AAAA,YAC/C;AAAA,YACA;AAAA,YACA,aAAa,OAAO,KAAK,eAAe;AAAA,UAC1C,CAAC;AAAA,UACD,OAAO,OAAO;AAAA,UACd,aAAa,MAAM,6BAA6B;AAAA,YAC9C;AAAA,YACA;AAAA,YACA,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC9D,CAAC;AAAA;AAAA,MAGL;AAAA,MAEA,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,QACtC,MAAM,QAAQ,WAAW,MAAM;AAAA,UAC7B,gBAAgB,OAAO,SAAS;AAAA,UAChC,OAAO,IAAI,MAAM,oBAAoB,MAAM,CAAC;AAAA,WAC3C,OAAO;AAAA,QAEV,gBAAgB,IAAI,WAAW;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QAED,MAAM,QAAqB;AAAA,UACzB;AAAA,UACA,WAAW,KAAK,IAAI;AAAA,UACpB,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,QAAQ;AAAA,QACV;AAAA,QAEA,OAAO,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,OAClC;AAAA;AAAA,IAGH,EAAoB,CAClB,MACA,SACa;AAAA,MACb,OAAO,UAAU,MAAM,OAAuC;AAAA;AAAA,IAGhE,SAA0C,CACxC,MACA,SACa;AAAA,MACb,OAAO,UAAU,MAAM,OAAuC;AAAA;AAAA,IAGhE,WAA4C,CAAC,MAAS,MAAwC;AAAA,MAC5F,MAAM,QAAqB;AAAA,QACzB;AAAA,QACA,WAAW,KAAK,IAAI;AAAA,QACpB;AAAA,QACA,QAAQ;AAAA,QACR,UAAU,KAAK,SAAS,EAAE,SAAS,WAAW,IAAI,aAAa;AAAA,QAC/D,QAAQ,KAAK,SAAS,EAAE,SAAS,WAAW,IAAI,WAAW;AAAA,MAC7D;AAAA,MACA,OAAO,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA;AAAA,SAG7B,OAAM,GAAG;AAAA,MACb,MAAM,IAAI,MAAM,8BAA8B;AAAA;AAAA,SAG1C,MAAK,GAAG;AAAA,SAIR,QAAO,GAAG;AAAA,MACd,WAAW,WAAW,gBAAgB,OAAO,GAAG;AAAA,QAC9C,aAAa,QAAQ,KAAK;AAAA,QAC1B,QAAQ,OAAO,IAAI,MAAM,iBAAiB,CAAC;AAAA,MAC7C;AAAA,MACA,gBAAgB,MAAM;AAAA,MACtB,SAAS,MAAM;AAAA,MACf,OAAO,QAAQ;AAAA;AAAA,EAEnB;AAAA;;;AC9NF,0CAAwB;AA2CxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoDA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CA,yBAAS;AAnJF,SAAS,WAAsC,CAAC,YAAkB;AAAA,EACvE,OAAO;AAAA;",
10
- "debugId": "A0E8E157C65D016664756E2164756E21",
10
+ "mappings": "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",
11
+ "debugId": "CC10CEDC2D267F6164756E2164756E21",
11
12
  "names": []
12
13
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentxjs",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "Unified API for AI Agents - Server and Browser",
5
5
  "license": "MIT",
6
6
  "engines": {
@@ -34,15 +34,16 @@
34
34
  "test:watch": "bun test --watch"
35
35
  },
36
36
  "dependencies": {
37
- "@agentxjs/common": "^1.8.0",
38
- "@agentxjs/network": "^1.8.0",
39
- "@agentxjs/types": "^1.8.0",
37
+ "@agentxjs/common": "^1.9.0",
38
+ "@agentxjs/network": "^1.9.0",
39
+ "@agentxjs/types": "^1.9.0",
40
40
  "reconnecting-websocket": "^4.4.0",
41
41
  "ws": "^8.18.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@agentxjs/persistence": "^1.8.0",
45
- "@agentxjs/runtime": "^1.8.0"
44
+ "@agentxjs/persistence": "^1.9.0",
45
+ "@agentxjs/queue": "^1.9.0",
46
+ "@agentxjs/runtime": "^1.9.0"
46
47
  },
47
48
  "publishConfig": {
48
49
  "access": "public"