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 +81 -34
- package/dist/browser.js.map +5 -4
- package/dist/index.d.ts +12 -14
- package/dist/index.js +262 -121
- package/dist/index.js.map +6 -5
- package/package.json +7 -6
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/
|
|
26
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
96
|
+
logger.warn("WebSocket closed");
|
|
104
97
|
});
|
|
105
98
|
client.onError((error) => {
|
|
106
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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=
|
|
275
|
+
//# debugId=DABE902E367A863664756E2164756E21
|
package/dist/browser.js.map
CHANGED
|
@@ -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 *
|
|
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": "
|
|
9
|
-
"debugId": "
|
|
9
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAWA;AAQA;AAUA,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,OAAO,KAAK,kBAAkB;AAAA,EAE9B,MAAM,WAAW,IAAI;AAAA,EACrB,MAAM,kBAAkB,IAAI;AAAA,EAU5B,MAAM,qBAAqB,IAAI,IAAY,CAAC,QAAQ,CAAC;AAAA,EAGrD,SAAS,kBAAkB,CAAC,WAAyB;AAAA,IACnD,IAAI,mBAAmB,IAAI,SAAS,GAAG;AAAA,MACrC;AAAA,IACF;AAAA,IAEA,OAAO,KACL,KAAK,UAAU;AAAA,MACb,MAAM;AAAA,MACN;AAAA,IACF,CAAC,CACH;AAAA,IAEA,mBAAmB,IAAI,SAAS;AAAA,IAChC,OAAO,MAAM,yBAAyB,EAAE,UAAU,CAAC;AAAA;AAAA,EAKrD,OAAO,UAAU,CAAC,YAAoB;AAAA,IACpC,IAAI;AAAA,MACF,MAAM,QAAQ,KAAK,MAAM,OAAO;AAAA,MAEhC,OAAO,MAAM,kBAAkB;AAAA,QAC7B,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,OAAO,MAAM,UAAU,SAAS;AAAA,UAC9B,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,OAAO,MAAM,6BAA6B,EAAE,WAAW,WAAW,MAAM,KAAK,CAAC;AAAA,QAC9E,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,MAGA,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,OAAO,KAAK,kBAAkB;AAAA,GAC/B;AAAA,EAED,OAAO,QAAQ,CAAC,UAAiB;AAAA,IAC/B,OAAO,MAAM,mBAAmB,EAAE,OAAO,MAAM,QAAQ,CAAC;AAAA,GACzD;AAAA,EAGD,OAAO,OAAO,MAAM;AAAA,IAClB,IAAI,mBAAmB,OAAO,GAAG;AAAA,MAE/B,OAAO,KAAK,2CAA2C;AAAA,QACrD,UAAU,MAAM,KAAK,kBAAkB;AAAA,MACzC,CAAC;AAAA,MAED,WAAW,aAAa,oBAAoB;AAAA,QAC1C,IAAI,cAAc,UAAU;AAAA,UAC1B,OAAO,KACL,KAAK,UAAU;AAAA,YACb,MAAM;AAAA,YACN;AAAA,UACF,CAAC,CACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,GACD;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,kBAAkB;AAAA,MAGpC,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,OAAO,MAAM,+BAA+B;AAAA,YAC1C;AAAA,YACA;AAAA,YACA,aAAa,OAAO,KAAK,eAAe;AAAA,UAC1C,CAAC;AAAA,UACD,OAAO,OAAO;AAAA,UACd,OAAO,MAAM,6BAA6B;AAAA,YACxC;AAAA,YACA;AAAA,YACA,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC9D,CAAC;AAAA;AAAA,MAGL;AAAA,MAEA,MAAM,WAAW,MAAM,IAAI,QAA6B,CAAC,SAAS,WAAW;AAAA,QAC3E,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,MAID,MAAM,eAAe,SAAS;AAAA,MAC9B,IAAI,iBAAiB,YAAY,GAAG;AAAA,QAClC,WAAW,aAAa,aAAa,iBAAiB;AAAA,UACpD,mBAAmB,SAAS;AAAA,QAC9B;AAAA,QACA,OAAO,MAAM,6CAA6C;AAAA,UACxD;AAAA,UACA,YAAY,aAAa;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,MAEA,OAAO;AAAA;AAAA,IAGT,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,mBAAmB,MAAM;AAAA,MACzB,OAAO,QAAQ;AAAA;AAAA,EAEnB;AAAA;AAAA,IAnRI;AAAA;AAAA,WAAS,aAAa,qBAAqB;AAAA;;;ACCjD,0CAAwB;AAWxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiDA;AAgCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA,2BAAS;;;ACnGT;AA9BA;;;AD+IA,eAAsB,YAAY,CAAC,QAAuC;AAAA,EACxE,IAAI,CAAC,UAAU,CAAC,gBAAe,MAAM,GAAG;AAAA,IACtC,MAAM,IAAI,MACR,oDACE,yDACJ;AAAA,EACF;AAAA,EACA,OAAO,mBAAmB,MAAM;AAAA;",
|
|
10
|
+
"debugId": "DABE902E367A863664756E2164756E21",
|
|
10
11
|
"names": []
|
|
11
12
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import { AgentX, AgentXConfig
|
|
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<
|
|
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,
|
|
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/
|
|
31
|
-
var
|
|
32
|
-
__export(
|
|
33
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
104
|
+
logger.warn("WebSocket closed");
|
|
197
105
|
});
|
|
198
106
|
client.onError((error) => {
|
|
199
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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=
|
|
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 *
|
|
6
|
-
"/**\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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
10
|
-
"debugId": "
|
|
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.
|
|
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.
|
|
38
|
-
"@agentxjs/network": "^1.
|
|
39
|
-
"@agentxjs/types": "^1.
|
|
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.
|
|
45
|
-
"@agentxjs/
|
|
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"
|