@agentxjs/runtime 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +138 -115
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +138 -115
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1916,6 +1916,7 @@ var import_claude_agent_sdk = require("@anthropic-ai/claude-agent-sdk");
|
|
|
1916
1916
|
var import_rxjs2 = require("rxjs");
|
|
1917
1917
|
|
|
1918
1918
|
// src/environment/buildOptions.ts
|
|
1919
|
+
var logger7 = createLogger("environment/buildOptions");
|
|
1919
1920
|
function buildOptions(context, abortController) {
|
|
1920
1921
|
const options = {
|
|
1921
1922
|
abortController,
|
|
@@ -1924,9 +1925,15 @@ function buildOptions(context, abortController) {
|
|
|
1924
1925
|
if (context.cwd) {
|
|
1925
1926
|
options.cwd = context.cwd;
|
|
1926
1927
|
}
|
|
1927
|
-
const env = {
|
|
1928
|
-
|
|
1929
|
-
|
|
1928
|
+
const env = {};
|
|
1929
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
1930
|
+
if (value !== void 0) {
|
|
1931
|
+
env[key] = value;
|
|
1932
|
+
}
|
|
1933
|
+
}
|
|
1934
|
+
if (!env.PATH && process.env.PATH) {
|
|
1935
|
+
env.PATH = process.env.PATH;
|
|
1936
|
+
}
|
|
1930
1937
|
if (context.baseUrl) {
|
|
1931
1938
|
env.ANTHROPIC_BASE_URL = context.baseUrl;
|
|
1932
1939
|
}
|
|
@@ -1934,7 +1941,19 @@ function buildOptions(context, abortController) {
|
|
|
1934
1941
|
env.ANTHROPIC_API_KEY = context.apiKey;
|
|
1935
1942
|
}
|
|
1936
1943
|
options.env = env;
|
|
1937
|
-
|
|
1944
|
+
logger7.info("buildOptions called", {
|
|
1945
|
+
hasPath: !!env.PATH,
|
|
1946
|
+
pathLength: env.PATH?.length,
|
|
1947
|
+
hasApiKey: !!env.ANTHROPIC_API_KEY,
|
|
1948
|
+
hasBaseUrl: !!env.ANTHROPIC_BASE_URL,
|
|
1949
|
+
baseUrl: env.ANTHROPIC_BASE_URL,
|
|
1950
|
+
model: context.model,
|
|
1951
|
+
permissionMode: context.permissionMode || "bypassPermissions",
|
|
1952
|
+
cwd: context.cwd
|
|
1953
|
+
});
|
|
1954
|
+
options.stderr = (data) => {
|
|
1955
|
+
logger7.info("SDK stderr", { data: data.trim() });
|
|
1956
|
+
};
|
|
1938
1957
|
if (context.model) options.model = context.model;
|
|
1939
1958
|
if (context.systemPrompt) options.systemPrompt = context.systemPrompt;
|
|
1940
1959
|
if (context.maxTurns) options.maxTurns = context.maxTurns;
|
|
@@ -1942,8 +1961,12 @@ function buildOptions(context, abortController) {
|
|
|
1942
1961
|
if (context.resume) options.resume = context.resume;
|
|
1943
1962
|
if (context.permissionMode) {
|
|
1944
1963
|
options.permissionMode = context.permissionMode;
|
|
1964
|
+
if (context.permissionMode === "bypassPermissions") {
|
|
1965
|
+
options.allowDangerouslySkipPermissions = true;
|
|
1966
|
+
}
|
|
1945
1967
|
} else {
|
|
1946
1968
|
options.permissionMode = "bypassPermissions";
|
|
1969
|
+
options.allowDangerouslySkipPermissions = true;
|
|
1947
1970
|
}
|
|
1948
1971
|
return options;
|
|
1949
1972
|
}
|
|
@@ -2032,7 +2055,7 @@ async function* observableToAsyncIterable(observable) {
|
|
|
2032
2055
|
}
|
|
2033
2056
|
|
|
2034
2057
|
// src/environment/ClaudeEffector.ts
|
|
2035
|
-
var
|
|
2058
|
+
var logger8 = createLogger("ecosystem/ClaudeEffector");
|
|
2036
2059
|
var DEFAULT_TIMEOUT = 3e4;
|
|
2037
2060
|
var ClaudeEffector = class {
|
|
2038
2061
|
config;
|
|
@@ -2051,12 +2074,12 @@ var ClaudeEffector = class {
|
|
|
2051
2074
|
* Connect to SystemBus consumer to subscribe to events
|
|
2052
2075
|
*/
|
|
2053
2076
|
connect(consumer) {
|
|
2054
|
-
|
|
2077
|
+
logger8.debug("ClaudeEffector connected to SystemBusConsumer", {
|
|
2055
2078
|
agentId: this.config.agentId
|
|
2056
2079
|
});
|
|
2057
2080
|
consumer.on("user_message", async (event) => {
|
|
2058
2081
|
const typedEvent = event;
|
|
2059
|
-
|
|
2082
|
+
logger8.debug("user_message event received", {
|
|
2060
2083
|
eventAgentId: typedEvent.context?.agentId,
|
|
2061
2084
|
myAgentId: this.config.agentId,
|
|
2062
2085
|
matches: typedEvent.context?.agentId === this.config.agentId
|
|
@@ -2092,14 +2115,14 @@ var ClaudeEffector = class {
|
|
|
2092
2115
|
this.currentMeta = meta;
|
|
2093
2116
|
const timeout = this.config.timeout ?? DEFAULT_TIMEOUT;
|
|
2094
2117
|
const timeoutId = setTimeout(() => {
|
|
2095
|
-
|
|
2118
|
+
logger8.warn("Request timeout", { timeout });
|
|
2096
2119
|
this.currentAbortController?.abort(new Error(`Request timeout after ${timeout}ms`));
|
|
2097
2120
|
}, timeout);
|
|
2098
2121
|
try {
|
|
2099
2122
|
await this.initialize(this.currentAbortController);
|
|
2100
2123
|
const sessionId = this.config.sessionId || "default";
|
|
2101
2124
|
const sdkUserMessage = buildSDKUserMessage(message, sessionId);
|
|
2102
|
-
|
|
2125
|
+
logger8.debug("Sending message to Claude", {
|
|
2103
2126
|
content: typeof message.content === "string" ? message.content.substring(0, 80) : "[structured]",
|
|
2104
2127
|
timeout,
|
|
2105
2128
|
requestId: meta.requestId
|
|
@@ -2116,13 +2139,13 @@ var ClaudeEffector = class {
|
|
|
2116
2139
|
*/
|
|
2117
2140
|
interrupt(meta) {
|
|
2118
2141
|
if (this.claudeQuery) {
|
|
2119
|
-
|
|
2142
|
+
logger8.debug("Interrupting Claude query", { requestId: meta?.requestId });
|
|
2120
2143
|
this.wasInterrupted = true;
|
|
2121
2144
|
if (meta) {
|
|
2122
2145
|
this.currentMeta = meta;
|
|
2123
2146
|
}
|
|
2124
2147
|
this.claudeQuery.interrupt().catch((err) => {
|
|
2125
|
-
|
|
2148
|
+
logger8.debug("SDK interrupt() error (may be expected)", { error: err });
|
|
2126
2149
|
});
|
|
2127
2150
|
}
|
|
2128
2151
|
}
|
|
@@ -2131,7 +2154,7 @@ var ClaudeEffector = class {
|
|
|
2131
2154
|
*/
|
|
2132
2155
|
async initialize(abortController) {
|
|
2133
2156
|
if (this.isInitialized) return;
|
|
2134
|
-
|
|
2157
|
+
logger8.info("Initializing ClaudeEffector");
|
|
2135
2158
|
const context = {
|
|
2136
2159
|
apiKey: this.config.apiKey,
|
|
2137
2160
|
baseUrl: this.config.baseUrl,
|
|
@@ -2148,7 +2171,7 @@ var ClaudeEffector = class {
|
|
|
2148
2171
|
});
|
|
2149
2172
|
this.isInitialized = true;
|
|
2150
2173
|
this.startBackgroundListener();
|
|
2151
|
-
|
|
2174
|
+
logger8.info("ClaudeEffector initialized");
|
|
2152
2175
|
}
|
|
2153
2176
|
/**
|
|
2154
2177
|
* Start background listener for SDK responses
|
|
@@ -2157,7 +2180,7 @@ var ClaudeEffector = class {
|
|
|
2157
2180
|
(async () => {
|
|
2158
2181
|
try {
|
|
2159
2182
|
for await (const sdkMsg of this.claudeQuery) {
|
|
2160
|
-
|
|
2183
|
+
logger8.debug("SDK message received", {
|
|
2161
2184
|
type: sdkMsg.type,
|
|
2162
2185
|
subtype: sdkMsg.subtype,
|
|
2163
2186
|
sessionId: sdkMsg.session_id,
|
|
@@ -2174,10 +2197,10 @@ var ClaudeEffector = class {
|
|
|
2174
2197
|
}
|
|
2175
2198
|
if (sdkMsg.type === "result") {
|
|
2176
2199
|
const resultMsg = sdkMsg;
|
|
2177
|
-
|
|
2200
|
+
logger8.info("SDK result received (full)", {
|
|
2178
2201
|
fullResult: JSON.stringify(sdkMsg, null, 2)
|
|
2179
2202
|
});
|
|
2180
|
-
|
|
2203
|
+
logger8.info("SDK result received", {
|
|
2181
2204
|
subtype: resultMsg.subtype,
|
|
2182
2205
|
isError: resultMsg.is_error,
|
|
2183
2206
|
errors: resultMsg.errors,
|
|
@@ -2195,10 +2218,10 @@ var ClaudeEffector = class {
|
|
|
2195
2218
|
}
|
|
2196
2219
|
} catch (error) {
|
|
2197
2220
|
if (this.isAbortError(error)) {
|
|
2198
|
-
|
|
2221
|
+
logger8.debug("Background listener aborted (expected during interrupt)");
|
|
2199
2222
|
this.resetState();
|
|
2200
2223
|
} else {
|
|
2201
|
-
|
|
2224
|
+
logger8.error("Background listener error", { error });
|
|
2202
2225
|
if (this.currentMeta) {
|
|
2203
2226
|
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
2204
2227
|
this.receptor.emitError(errorMessage, "runtime_error", this.currentMeta);
|
|
@@ -2230,7 +2253,7 @@ var ClaudeEffector = class {
|
|
|
2230
2253
|
* Dispose and cleanup resources
|
|
2231
2254
|
*/
|
|
2232
2255
|
dispose() {
|
|
2233
|
-
|
|
2256
|
+
logger8.debug("Disposing ClaudeEffector");
|
|
2234
2257
|
if (this.currentAbortController) {
|
|
2235
2258
|
this.currentAbortController.abort();
|
|
2236
2259
|
}
|
|
@@ -2261,7 +2284,7 @@ var ClaudeEnvironment = class {
|
|
|
2261
2284
|
};
|
|
2262
2285
|
|
|
2263
2286
|
// src/internal/RuntimeAgent.ts
|
|
2264
|
-
var
|
|
2287
|
+
var logger9 = createLogger("runtime/RuntimeAgent");
|
|
2265
2288
|
var BusPresenter = class {
|
|
2266
2289
|
constructor(producer, session, agentId, imageId, containerId) {
|
|
2267
2290
|
this.producer = producer;
|
|
@@ -2298,7 +2321,7 @@ var BusPresenter = class {
|
|
|
2298
2321
|
this.producer.emit(systemEvent);
|
|
2299
2322
|
if (category === "message") {
|
|
2300
2323
|
this.session.addMessage(data).catch((err) => {
|
|
2301
|
-
|
|
2324
|
+
logger9.error("Failed to persist message", { error: err, messageType: output.type });
|
|
2302
2325
|
});
|
|
2303
2326
|
}
|
|
2304
2327
|
}
|
|
@@ -2356,7 +2379,7 @@ var BusPresenter = class {
|
|
|
2356
2379
|
};
|
|
2357
2380
|
}
|
|
2358
2381
|
default:
|
|
2359
|
-
|
|
2382
|
+
logger9.warn("Unknown message type, passing through", { type: output.type });
|
|
2360
2383
|
return eventData;
|
|
2361
2384
|
}
|
|
2362
2385
|
}
|
|
@@ -2416,7 +2439,7 @@ var RuntimeAgent = class {
|
|
|
2416
2439
|
});
|
|
2417
2440
|
this.environment.receptor.connect(config.bus.asProducer());
|
|
2418
2441
|
this.environment.effector.connect(config.bus.asConsumer());
|
|
2419
|
-
|
|
2442
|
+
logger9.info("ClaudeEnvironment created for agent", {
|
|
2420
2443
|
agentId: this.agentId,
|
|
2421
2444
|
imageId: this.imageId,
|
|
2422
2445
|
resumeSessionId: resumeSessionId ?? "none",
|
|
@@ -2450,14 +2473,14 @@ var RuntimeAgent = class {
|
|
|
2450
2473
|
this.driver = new BusDriver(config.bus.asConsumer(), {
|
|
2451
2474
|
agentId: this.agentId,
|
|
2452
2475
|
onStreamEvent: (event) => {
|
|
2453
|
-
|
|
2476
|
+
logger9.debug("BusDriver \u2192 Engine.handleStreamEvent", { type: event.type });
|
|
2454
2477
|
this.engine.handleStreamEvent(event);
|
|
2455
2478
|
},
|
|
2456
2479
|
onStreamComplete: (reason) => {
|
|
2457
|
-
|
|
2480
|
+
logger9.debug("Stream completed", { reason, agentId: this.agentId });
|
|
2458
2481
|
}
|
|
2459
2482
|
});
|
|
2460
|
-
|
|
2483
|
+
logger9.debug("RuntimeAgent created", {
|
|
2461
2484
|
agentId: this.agentId,
|
|
2462
2485
|
imageId: this.imageId
|
|
2463
2486
|
});
|
|
@@ -2466,13 +2489,13 @@ var RuntimeAgent = class {
|
|
|
2466
2489
|
* Save SDK session ID to image metadata for future resume
|
|
2467
2490
|
*/
|
|
2468
2491
|
saveSessionId(sdkSessionId) {
|
|
2469
|
-
|
|
2492
|
+
logger9.info("Saving SDK session ID to image metadata", {
|
|
2470
2493
|
agentId: this.agentId,
|
|
2471
2494
|
imageId: this.imageId,
|
|
2472
2495
|
sdkSessionId
|
|
2473
2496
|
});
|
|
2474
2497
|
this.imageRepository.updateMetadata(this.imageId, { claudeSdkSessionId: sdkSessionId }).catch((err) => {
|
|
2475
|
-
|
|
2498
|
+
logger9.error("Failed to save SDK session ID", { error: err, imageId: this.imageId });
|
|
2476
2499
|
});
|
|
2477
2500
|
}
|
|
2478
2501
|
get lifecycle() {
|
|
@@ -2485,7 +2508,7 @@ var RuntimeAgent = class {
|
|
|
2485
2508
|
* @param requestId - Request ID for correlation
|
|
2486
2509
|
*/
|
|
2487
2510
|
async receive(content, requestId) {
|
|
2488
|
-
|
|
2511
|
+
logger9.debug("RuntimeAgent.receive called", {
|
|
2489
2512
|
agentId: this.agentId,
|
|
2490
2513
|
contentPreview: content.substring(0, 50),
|
|
2491
2514
|
requestId
|
|
@@ -2494,13 +2517,13 @@ var RuntimeAgent = class {
|
|
|
2494
2517
|
throw new Error(`Cannot send message to ${this._lifecycle} agent`);
|
|
2495
2518
|
}
|
|
2496
2519
|
await this.interactor.receive(content, requestId || `req_${Date.now()}`);
|
|
2497
|
-
|
|
2520
|
+
logger9.debug("RuntimeAgent.receive completed", { agentId: this.agentId });
|
|
2498
2521
|
}
|
|
2499
2522
|
/**
|
|
2500
2523
|
* Interrupt current operation
|
|
2501
2524
|
*/
|
|
2502
2525
|
interrupt(requestId) {
|
|
2503
|
-
|
|
2526
|
+
logger9.debug("RuntimeAgent.interrupt called", { agentId: this.agentId, requestId });
|
|
2504
2527
|
this.interactor.interrupt(requestId);
|
|
2505
2528
|
this.producer.emit({
|
|
2506
2529
|
type: "interrupted",
|
|
@@ -2695,7 +2718,7 @@ var RuntimeSandbox = class {
|
|
|
2695
2718
|
};
|
|
2696
2719
|
|
|
2697
2720
|
// src/internal/RuntimeImage.ts
|
|
2698
|
-
var
|
|
2721
|
+
var logger10 = createLogger("runtime/RuntimeImage");
|
|
2699
2722
|
var RuntimeImage = class _RuntimeImage {
|
|
2700
2723
|
constructor(record, context) {
|
|
2701
2724
|
this.record = record;
|
|
@@ -2752,7 +2775,7 @@ var RuntimeImage = class _RuntimeImage {
|
|
|
2752
2775
|
createdAt: now,
|
|
2753
2776
|
updatedAt: now
|
|
2754
2777
|
});
|
|
2755
|
-
|
|
2778
|
+
logger10.info("Image created", {
|
|
2756
2779
|
imageId,
|
|
2757
2780
|
sessionId,
|
|
2758
2781
|
containerId: config.containerId,
|
|
@@ -2766,10 +2789,10 @@ var RuntimeImage = class _RuntimeImage {
|
|
|
2766
2789
|
static async load(imageId, context) {
|
|
2767
2790
|
const record = await context.imageRepository.findImageById(imageId);
|
|
2768
2791
|
if (!record) {
|
|
2769
|
-
|
|
2792
|
+
logger10.debug("Image not found", { imageId });
|
|
2770
2793
|
return null;
|
|
2771
2794
|
}
|
|
2772
|
-
|
|
2795
|
+
logger10.debug("Image loaded", { imageId, name: record.name });
|
|
2773
2796
|
return new _RuntimeImage(record, context);
|
|
2774
2797
|
}
|
|
2775
2798
|
/**
|
|
@@ -2803,7 +2826,7 @@ var RuntimeImage = class _RuntimeImage {
|
|
|
2803
2826
|
updatedAt: now
|
|
2804
2827
|
};
|
|
2805
2828
|
await this.context.imageRepository.saveImage(updatedRecord);
|
|
2806
|
-
|
|
2829
|
+
logger10.info("Image updated", { imageId: this.imageId, updates });
|
|
2807
2830
|
return new _RuntimeImage(updatedRecord, this.context);
|
|
2808
2831
|
}
|
|
2809
2832
|
/**
|
|
@@ -2812,7 +2835,7 @@ var RuntimeImage = class _RuntimeImage {
|
|
|
2812
2835
|
async delete() {
|
|
2813
2836
|
await this.context.sessionRepository.deleteSession(this.sessionId);
|
|
2814
2837
|
await this.context.imageRepository.deleteImage(this.imageId);
|
|
2815
|
-
|
|
2838
|
+
logger10.info("Image deleted", { imageId: this.imageId, sessionId: this.sessionId });
|
|
2816
2839
|
}
|
|
2817
2840
|
/**
|
|
2818
2841
|
* Get the underlying record
|
|
@@ -2834,7 +2857,7 @@ var RuntimeImage = class _RuntimeImage {
|
|
|
2834
2857
|
};
|
|
2835
2858
|
|
|
2836
2859
|
// src/internal/RuntimeContainer.ts
|
|
2837
|
-
var
|
|
2860
|
+
var logger11 = createLogger("runtime/RuntimeContainer");
|
|
2838
2861
|
var RuntimeContainer = class _RuntimeContainer {
|
|
2839
2862
|
containerId;
|
|
2840
2863
|
createdAt;
|
|
@@ -2874,7 +2897,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
2874
2897
|
containerId
|
|
2875
2898
|
}
|
|
2876
2899
|
});
|
|
2877
|
-
|
|
2900
|
+
logger11.info("Container created", { containerId });
|
|
2878
2901
|
return container;
|
|
2879
2902
|
}
|
|
2880
2903
|
/**
|
|
@@ -2883,7 +2906,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
2883
2906
|
static async load(containerId, context) {
|
|
2884
2907
|
const record = await context.persistence.containers.findContainerById(containerId);
|
|
2885
2908
|
if (!record) return null;
|
|
2886
|
-
|
|
2909
|
+
logger11.info("Container loaded", { containerId });
|
|
2887
2910
|
return new _RuntimeContainer(containerId, record.createdAt, context);
|
|
2888
2911
|
}
|
|
2889
2912
|
// ==================== Image → Agent Lifecycle ====================
|
|
@@ -2896,7 +2919,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
2896
2919
|
if (existingAgentId) {
|
|
2897
2920
|
const existingAgent = this.agents.get(existingAgentId);
|
|
2898
2921
|
if (existingAgent) {
|
|
2899
|
-
|
|
2922
|
+
logger11.info("Reusing existing agent for image", {
|
|
2900
2923
|
containerId: this.containerId,
|
|
2901
2924
|
imageId: image.imageId,
|
|
2902
2925
|
agentId: existingAgentId
|
|
@@ -2955,7 +2978,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
2955
2978
|
agentId
|
|
2956
2979
|
}
|
|
2957
2980
|
});
|
|
2958
|
-
|
|
2981
|
+
logger11.info("Agent created for image", {
|
|
2959
2982
|
containerId: this.containerId,
|
|
2960
2983
|
imageId: image.imageId,
|
|
2961
2984
|
agentId
|
|
@@ -2968,17 +2991,17 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
2968
2991
|
async stopImage(imageId) {
|
|
2969
2992
|
const agentId = this.imageToAgent.get(imageId);
|
|
2970
2993
|
if (!agentId) {
|
|
2971
|
-
|
|
2994
|
+
logger11.debug("Image not running, nothing to stop", {
|
|
2972
2995
|
imageId,
|
|
2973
2996
|
containerId: this.containerId
|
|
2974
2997
|
});
|
|
2975
2998
|
return false;
|
|
2976
2999
|
}
|
|
2977
|
-
|
|
3000
|
+
logger11.info("Stopping image", { imageId, agentId, containerId: this.containerId });
|
|
2978
3001
|
const success = await this.destroyAgent(agentId);
|
|
2979
3002
|
if (success) {
|
|
2980
3003
|
this.imageToAgent.delete(imageId);
|
|
2981
|
-
|
|
3004
|
+
logger11.info("Image stopped", { imageId, agentId, containerId: this.containerId });
|
|
2982
3005
|
}
|
|
2983
3006
|
return success;
|
|
2984
3007
|
}
|
|
@@ -3035,7 +3058,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
3035
3058
|
agentId
|
|
3036
3059
|
}
|
|
3037
3060
|
});
|
|
3038
|
-
|
|
3061
|
+
logger11.info("Agent destroyed", { containerId: this.containerId, agentId });
|
|
3039
3062
|
return true;
|
|
3040
3063
|
}
|
|
3041
3064
|
async destroyAllAgents() {
|
|
@@ -3063,7 +3086,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
3063
3086
|
}
|
|
3064
3087
|
});
|
|
3065
3088
|
this.context.onDisposed?.(this.containerId);
|
|
3066
|
-
|
|
3089
|
+
logger11.info("Container disposed", { containerId: this.containerId, agentCount });
|
|
3067
3090
|
}
|
|
3068
3091
|
// ==================== Private Helpers ====================
|
|
3069
3092
|
generateAgentId() {
|
|
@@ -3074,7 +3097,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
3074
3097
|
};
|
|
3075
3098
|
|
|
3076
3099
|
// src/internal/BaseEventHandler.ts
|
|
3077
|
-
var
|
|
3100
|
+
var logger12 = createLogger("runtime/BaseEventHandler");
|
|
3078
3101
|
var BaseEventHandler = class {
|
|
3079
3102
|
bus;
|
|
3080
3103
|
unsubscribes = [];
|
|
@@ -3113,7 +3136,7 @@ var BaseEventHandler = class {
|
|
|
3113
3136
|
handleError(err, context) {
|
|
3114
3137
|
const message = err instanceof Error ? err.message : String(err);
|
|
3115
3138
|
const stack = err instanceof Error ? err.stack : void 0;
|
|
3116
|
-
|
|
3139
|
+
logger12.error(`Error in ${context.operation || "handler"}`, {
|
|
3117
3140
|
message,
|
|
3118
3141
|
requestId: context.requestId,
|
|
3119
3142
|
details: context.details
|
|
@@ -3140,7 +3163,7 @@ var BaseEventHandler = class {
|
|
|
3140
3163
|
try {
|
|
3141
3164
|
context.onError(err);
|
|
3142
3165
|
} catch (callbackErr) {
|
|
3143
|
-
|
|
3166
|
+
logger12.error("Error in onError callback", { error: callbackErr });
|
|
3144
3167
|
}
|
|
3145
3168
|
}
|
|
3146
3169
|
}
|
|
@@ -3158,12 +3181,12 @@ var BaseEventHandler = class {
|
|
|
3158
3181
|
unsubscribe();
|
|
3159
3182
|
}
|
|
3160
3183
|
this.unsubscribes = [];
|
|
3161
|
-
|
|
3184
|
+
logger12.debug(`${this.constructor.name} disposed`);
|
|
3162
3185
|
}
|
|
3163
3186
|
};
|
|
3164
3187
|
|
|
3165
3188
|
// src/internal/CommandHandler.ts
|
|
3166
|
-
var
|
|
3189
|
+
var logger13 = createLogger("runtime/CommandHandler");
|
|
3167
3190
|
function createResponse(type, data) {
|
|
3168
3191
|
return {
|
|
3169
3192
|
type,
|
|
@@ -3196,7 +3219,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3196
3219
|
super(bus);
|
|
3197
3220
|
this.ops = operations;
|
|
3198
3221
|
this.bindHandlers();
|
|
3199
|
-
|
|
3222
|
+
logger13.debug("CommandHandler created");
|
|
3200
3223
|
}
|
|
3201
3224
|
/**
|
|
3202
3225
|
* Log error and emit system_error event
|
|
@@ -3204,7 +3227,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3204
3227
|
emitError(operation, err, requestId, context) {
|
|
3205
3228
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
3206
3229
|
const stack = err instanceof Error ? err.stack : void 0;
|
|
3207
|
-
|
|
3230
|
+
logger13.error(operation, {
|
|
3208
3231
|
requestId,
|
|
3209
3232
|
...context,
|
|
3210
3233
|
error: errorMessage,
|
|
@@ -3261,12 +3284,12 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3261
3284
|
this.subscribe(
|
|
3262
3285
|
this.bus.onCommand("image_messages_request", (event) => this.handleImageMessages(event))
|
|
3263
3286
|
);
|
|
3264
|
-
|
|
3287
|
+
logger13.debug("Command handlers bound");
|
|
3265
3288
|
}
|
|
3266
3289
|
// ==================== Container Handlers ====================
|
|
3267
3290
|
async handleContainerCreate(event) {
|
|
3268
3291
|
const { requestId, containerId } = event.data;
|
|
3269
|
-
|
|
3292
|
+
logger13.debug("Handling container_create_request", { requestId, containerId });
|
|
3270
3293
|
try {
|
|
3271
3294
|
await this.ops.createContainer(containerId);
|
|
3272
3295
|
this.bus.emit(
|
|
@@ -3288,7 +3311,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3288
3311
|
}
|
|
3289
3312
|
handleContainerGet(event) {
|
|
3290
3313
|
const { requestId, containerId } = event.data;
|
|
3291
|
-
|
|
3314
|
+
logger13.debug("Handling container_get_request", { requestId, containerId });
|
|
3292
3315
|
const container = this.ops.getContainer(containerId);
|
|
3293
3316
|
this.bus.emit(
|
|
3294
3317
|
createResponse("container_get_response", {
|
|
@@ -3300,7 +3323,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3300
3323
|
}
|
|
3301
3324
|
handleContainerList(event) {
|
|
3302
3325
|
const { requestId } = event.data;
|
|
3303
|
-
|
|
3326
|
+
logger13.debug("Handling container_list_request", { requestId });
|
|
3304
3327
|
const containers = this.ops.listContainers();
|
|
3305
3328
|
this.bus.emit(
|
|
3306
3329
|
createResponse("container_list_response", {
|
|
@@ -3312,7 +3335,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3312
3335
|
// ==================== Agent Handlers ====================
|
|
3313
3336
|
handleAgentGet(event) {
|
|
3314
3337
|
const { requestId, agentId } = event.data;
|
|
3315
|
-
|
|
3338
|
+
logger13.debug("Handling agent_get_request", { requestId, agentId });
|
|
3316
3339
|
const agent = this.ops.getAgent(agentId);
|
|
3317
3340
|
this.bus.emit(
|
|
3318
3341
|
createResponse("agent_get_response", {
|
|
@@ -3325,7 +3348,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3325
3348
|
}
|
|
3326
3349
|
handleAgentList(event) {
|
|
3327
3350
|
const { requestId, containerId } = event.data;
|
|
3328
|
-
|
|
3351
|
+
logger13.debug("Handling agent_list_request", { requestId, containerId });
|
|
3329
3352
|
const agents = this.ops.listAgents(containerId);
|
|
3330
3353
|
this.bus.emit(
|
|
3331
3354
|
createResponse("agent_list_response", {
|
|
@@ -3340,7 +3363,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3340
3363
|
}
|
|
3341
3364
|
async handleAgentDestroy(event) {
|
|
3342
3365
|
const { requestId, agentId } = event.data;
|
|
3343
|
-
|
|
3366
|
+
logger13.debug("Handling agent_destroy_request", { requestId, agentId });
|
|
3344
3367
|
try {
|
|
3345
3368
|
const success = await this.ops.destroyAgent(agentId);
|
|
3346
3369
|
this.bus.emit(
|
|
@@ -3364,7 +3387,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3364
3387
|
}
|
|
3365
3388
|
async handleAgentDestroyAll(event) {
|
|
3366
3389
|
const { requestId, containerId } = event.data;
|
|
3367
|
-
|
|
3390
|
+
logger13.debug("Handling agent_destroy_all_request", { requestId, containerId });
|
|
3368
3391
|
try {
|
|
3369
3392
|
await this.ops.destroyAllAgents(containerId);
|
|
3370
3393
|
this.bus.emit(
|
|
@@ -3386,7 +3409,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3386
3409
|
}
|
|
3387
3410
|
async handleMessageSend(event) {
|
|
3388
3411
|
const { requestId, imageId, agentId, content } = event.data;
|
|
3389
|
-
|
|
3412
|
+
logger13.debug("Handling message_send_request", { requestId, imageId, agentId });
|
|
3390
3413
|
try {
|
|
3391
3414
|
const result = await this.ops.receiveMessage(imageId, agentId, content, requestId);
|
|
3392
3415
|
this.bus.emit(
|
|
@@ -3410,7 +3433,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3410
3433
|
}
|
|
3411
3434
|
handleAgentInterrupt(event) {
|
|
3412
3435
|
const { requestId, imageId, agentId } = event.data;
|
|
3413
|
-
|
|
3436
|
+
logger13.debug("Handling agent_interrupt_request", { requestId, imageId, agentId });
|
|
3414
3437
|
try {
|
|
3415
3438
|
const result = this.ops.interruptAgent(imageId, agentId, requestId);
|
|
3416
3439
|
this.bus.emit(
|
|
@@ -3435,7 +3458,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3435
3458
|
// ==================== Image Handlers ====================
|
|
3436
3459
|
async handleImageCreate(event) {
|
|
3437
3460
|
const { requestId, containerId, config } = event.data;
|
|
3438
|
-
|
|
3461
|
+
logger13.debug("Handling image_create_request", { requestId, containerId });
|
|
3439
3462
|
try {
|
|
3440
3463
|
const record = await this.ops.createImage(containerId, config);
|
|
3441
3464
|
this.bus.emit(
|
|
@@ -3457,7 +3480,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3457
3480
|
}
|
|
3458
3481
|
async handleImageRun(event) {
|
|
3459
3482
|
const { requestId, imageId } = event.data;
|
|
3460
|
-
|
|
3483
|
+
logger13.debug("Handling image_run_request", { requestId, imageId });
|
|
3461
3484
|
try {
|
|
3462
3485
|
const result = await this.ops.runImage(imageId);
|
|
3463
3486
|
this.bus.emit(
|
|
@@ -3483,7 +3506,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3483
3506
|
}
|
|
3484
3507
|
async handleImageStop(event) {
|
|
3485
3508
|
const { requestId, imageId } = event.data;
|
|
3486
|
-
|
|
3509
|
+
logger13.debug("Handling image_stop_request", { requestId, imageId });
|
|
3487
3510
|
try {
|
|
3488
3511
|
await this.ops.stopImage(imageId);
|
|
3489
3512
|
this.bus.emit(
|
|
@@ -3505,7 +3528,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3505
3528
|
}
|
|
3506
3529
|
async handleImageUpdate(event) {
|
|
3507
3530
|
const { requestId, imageId, updates } = event.data;
|
|
3508
|
-
|
|
3531
|
+
logger13.debug("Handling image_update_request", { requestId, imageId });
|
|
3509
3532
|
try {
|
|
3510
3533
|
const record = await this.ops.updateImage(imageId, updates);
|
|
3511
3534
|
this.bus.emit(
|
|
@@ -3527,7 +3550,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3527
3550
|
}
|
|
3528
3551
|
async handleImageList(event) {
|
|
3529
3552
|
const { requestId, containerId } = event.data;
|
|
3530
|
-
|
|
3553
|
+
logger13.debug("Handling image_list_request", { requestId, containerId });
|
|
3531
3554
|
try {
|
|
3532
3555
|
const images = await this.ops.listImages(containerId);
|
|
3533
3556
|
this.bus.emit(
|
|
@@ -3549,7 +3572,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3549
3572
|
}
|
|
3550
3573
|
async handleImageGet(event) {
|
|
3551
3574
|
const { requestId, imageId } = event.data;
|
|
3552
|
-
|
|
3575
|
+
logger13.debug("Handling image_get_request", { requestId, imageId });
|
|
3553
3576
|
try {
|
|
3554
3577
|
const image = await this.ops.getImage(imageId);
|
|
3555
3578
|
this.bus.emit(
|
|
@@ -3570,7 +3593,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3570
3593
|
}
|
|
3571
3594
|
async handleImageDelete(event) {
|
|
3572
3595
|
const { requestId, imageId } = event.data;
|
|
3573
|
-
|
|
3596
|
+
logger13.debug("Handling image_delete_request", { requestId, imageId });
|
|
3574
3597
|
try {
|
|
3575
3598
|
await this.ops.deleteImage(imageId);
|
|
3576
3599
|
this.bus.emit(
|
|
@@ -3592,10 +3615,10 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3592
3615
|
}
|
|
3593
3616
|
async handleImageMessages(event) {
|
|
3594
3617
|
const { requestId, imageId } = event.data;
|
|
3595
|
-
|
|
3618
|
+
logger13.info("Handling image_messages_request", { requestId, imageId });
|
|
3596
3619
|
try {
|
|
3597
3620
|
const messages = await this.ops.getImageMessages(imageId);
|
|
3598
|
-
|
|
3621
|
+
logger13.info("Got messages for image", { imageId, count: messages.length });
|
|
3599
3622
|
this.bus.emit(
|
|
3600
3623
|
createResponse("image_messages_response", {
|
|
3601
3624
|
requestId,
|
|
@@ -3603,7 +3626,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3603
3626
|
messages
|
|
3604
3627
|
})
|
|
3605
3628
|
);
|
|
3606
|
-
|
|
3629
|
+
logger13.info("Emitted image_messages_response", { requestId, imageId });
|
|
3607
3630
|
} catch (err) {
|
|
3608
3631
|
this.emitError("Failed to get image messages", err, requestId, { imageId });
|
|
3609
3632
|
this.bus.emit(
|
|
@@ -3622,7 +3645,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3622
3645
|
// src/RuntimeImpl.ts
|
|
3623
3646
|
var import_node_os = require("os");
|
|
3624
3647
|
var import_node_path2 = require("path");
|
|
3625
|
-
var
|
|
3648
|
+
var logger14 = createLogger("runtime/RuntimeImpl");
|
|
3626
3649
|
var RuntimeImpl = class {
|
|
3627
3650
|
persistence;
|
|
3628
3651
|
llmProvider;
|
|
@@ -3633,20 +3656,20 @@ var RuntimeImpl = class {
|
|
|
3633
3656
|
/** Container registry: containerId -> RuntimeContainer */
|
|
3634
3657
|
containerRegistry = /* @__PURE__ */ new Map();
|
|
3635
3658
|
constructor(config) {
|
|
3636
|
-
|
|
3659
|
+
logger14.info("RuntimeImpl constructor start");
|
|
3637
3660
|
this.persistence = config.persistence;
|
|
3638
3661
|
this.llmProvider = config.llmProvider;
|
|
3639
3662
|
this.basePath = (0, import_node_path2.join)((0, import_node_os.homedir)(), ".agentx");
|
|
3640
|
-
|
|
3663
|
+
logger14.info("Creating SystemBus");
|
|
3641
3664
|
this.bus = new SystemBusImpl();
|
|
3642
3665
|
this.llmConfig = this.llmProvider.provide();
|
|
3643
|
-
|
|
3666
|
+
logger14.info("LLM config loaded", {
|
|
3644
3667
|
hasApiKey: !!this.llmConfig.apiKey,
|
|
3645
3668
|
model: this.llmConfig.model
|
|
3646
3669
|
});
|
|
3647
|
-
|
|
3670
|
+
logger14.info("Creating CommandHandler");
|
|
3648
3671
|
this.commandHandler = new CommandHandler(this.bus, this.createRuntimeOperations());
|
|
3649
|
-
|
|
3672
|
+
logger14.info("RuntimeImpl constructor done");
|
|
3650
3673
|
}
|
|
3651
3674
|
// ==================== SystemBus delegation ====================
|
|
3652
3675
|
emit(event) {
|
|
@@ -3729,7 +3752,7 @@ var RuntimeImpl = class {
|
|
|
3729
3752
|
// Agent operations (by imageId - with auto-activation)
|
|
3730
3753
|
receiveMessage: async (imageId, agentId, content, requestId) => {
|
|
3731
3754
|
if (imageId) {
|
|
3732
|
-
|
|
3755
|
+
logger14.debug("Receiving message by imageId", {
|
|
3733
3756
|
imageId,
|
|
3734
3757
|
contentLength: content.length,
|
|
3735
3758
|
requestId
|
|
@@ -3738,7 +3761,7 @@ var RuntimeImpl = class {
|
|
|
3738
3761
|
if (!record) throw new Error(`Image not found: ${imageId}`);
|
|
3739
3762
|
const container = await this.getOrCreateContainer(record.containerId);
|
|
3740
3763
|
const { agent, reused } = await container.runImage(record);
|
|
3741
|
-
|
|
3764
|
+
logger14.info("Message routed to agent", {
|
|
3742
3765
|
imageId,
|
|
3743
3766
|
agentId: agent.agentId,
|
|
3744
3767
|
reused,
|
|
@@ -3748,7 +3771,7 @@ var RuntimeImpl = class {
|
|
|
3748
3771
|
return { agentId: agent.agentId, imageId };
|
|
3749
3772
|
}
|
|
3750
3773
|
if (agentId) {
|
|
3751
|
-
|
|
3774
|
+
logger14.debug("Receiving message by agentId (legacy)", {
|
|
3752
3775
|
agentId,
|
|
3753
3776
|
contentLength: content.length,
|
|
3754
3777
|
requestId
|
|
@@ -3765,12 +3788,12 @@ var RuntimeImpl = class {
|
|
|
3765
3788
|
if (imageId) {
|
|
3766
3789
|
const foundAgentId = this.findAgentIdForImage(imageId);
|
|
3767
3790
|
if (!foundAgentId) {
|
|
3768
|
-
|
|
3791
|
+
logger14.debug("Image is offline, nothing to interrupt", { imageId });
|
|
3769
3792
|
return { imageId, agentId: void 0 };
|
|
3770
3793
|
}
|
|
3771
3794
|
const agent = this.findAgent(foundAgentId);
|
|
3772
3795
|
if (agent) {
|
|
3773
|
-
|
|
3796
|
+
logger14.info("Interrupting agent by imageId", {
|
|
3774
3797
|
imageId,
|
|
3775
3798
|
agentId: foundAgentId,
|
|
3776
3799
|
requestId
|
|
@@ -3782,7 +3805,7 @@ var RuntimeImpl = class {
|
|
|
3782
3805
|
if (agentId) {
|
|
3783
3806
|
const agent = this.findAgent(agentId);
|
|
3784
3807
|
if (!agent) throw new Error(`Agent not found: ${agentId}`);
|
|
3785
|
-
|
|
3808
|
+
logger14.info("Interrupting agent by agentId (legacy)", { agentId, requestId });
|
|
3786
3809
|
agent.interrupt(requestId);
|
|
3787
3810
|
const foundImageId = this.findImageIdForAgent(agentId);
|
|
3788
3811
|
return { agentId, imageId: foundImageId };
|
|
@@ -3791,32 +3814,32 @@ var RuntimeImpl = class {
|
|
|
3791
3814
|
},
|
|
3792
3815
|
// Image operations (new model)
|
|
3793
3816
|
createImage: async (containerId, config) => {
|
|
3794
|
-
|
|
3817
|
+
logger14.debug("Creating image", { containerId, name: config.name });
|
|
3795
3818
|
await this.getOrCreateContainer(containerId);
|
|
3796
3819
|
const image = await RuntimeImage.create(
|
|
3797
3820
|
{ containerId, ...config },
|
|
3798
3821
|
this.createImageContext()
|
|
3799
3822
|
);
|
|
3800
|
-
|
|
3823
|
+
logger14.info("Image created via RuntimeOps", { imageId: image.imageId, containerId });
|
|
3801
3824
|
return this.toImageListItemResult(image.toRecord(), false);
|
|
3802
3825
|
},
|
|
3803
3826
|
runImage: async (imageId) => {
|
|
3804
|
-
|
|
3827
|
+
logger14.debug("Running image", { imageId });
|
|
3805
3828
|
const record = await this.persistence.images.findImageById(imageId);
|
|
3806
3829
|
if (!record) throw new Error(`Image not found: ${imageId}`);
|
|
3807
3830
|
const container = await this.getOrCreateContainer(record.containerId);
|
|
3808
3831
|
const { agent, reused } = await container.runImage(record);
|
|
3809
|
-
|
|
3832
|
+
logger14.info("Image running", { imageId, agentId: agent.agentId, reused });
|
|
3810
3833
|
return { imageId, agentId: agent.agentId, reused };
|
|
3811
3834
|
},
|
|
3812
3835
|
stopImage: async (imageId) => {
|
|
3813
|
-
|
|
3836
|
+
logger14.debug("Stopping image", { imageId });
|
|
3814
3837
|
const record = await this.persistence.images.findImageById(imageId);
|
|
3815
3838
|
if (!record) throw new Error(`Image not found: ${imageId}`);
|
|
3816
3839
|
const container = this.containerRegistry.get(record.containerId);
|
|
3817
3840
|
if (container) {
|
|
3818
3841
|
await container.stopImage(imageId);
|
|
3819
|
-
|
|
3842
|
+
logger14.info("Image stopped via RuntimeOps", { imageId });
|
|
3820
3843
|
}
|
|
3821
3844
|
},
|
|
3822
3845
|
updateImage: async (imageId, updates) => {
|
|
@@ -3840,10 +3863,10 @@ var RuntimeImpl = class {
|
|
|
3840
3863
|
return this.toImageListItemResult(record, online);
|
|
3841
3864
|
},
|
|
3842
3865
|
deleteImage: async (imageId) => {
|
|
3843
|
-
|
|
3866
|
+
logger14.debug("Deleting image", { imageId });
|
|
3844
3867
|
const agentId = this.findAgentIdForImage(imageId);
|
|
3845
3868
|
if (agentId) {
|
|
3846
|
-
|
|
3869
|
+
logger14.debug("Stopping running agent before delete", { imageId, agentId });
|
|
3847
3870
|
for (const container of this.containerRegistry.values()) {
|
|
3848
3871
|
if (container.getAgent(agentId)) {
|
|
3849
3872
|
await container.destroyAgent(agentId);
|
|
@@ -3854,17 +3877,17 @@ var RuntimeImpl = class {
|
|
|
3854
3877
|
const image = await RuntimeImage.load(imageId, this.createImageContext());
|
|
3855
3878
|
if (image) {
|
|
3856
3879
|
await image.delete();
|
|
3857
|
-
|
|
3880
|
+
logger14.info("Image deleted via RuntimeOps", { imageId });
|
|
3858
3881
|
}
|
|
3859
3882
|
},
|
|
3860
3883
|
getImageMessages: async (imageId) => {
|
|
3861
|
-
|
|
3884
|
+
logger14.debug("Getting messages for image", { imageId });
|
|
3862
3885
|
const image = await RuntimeImage.load(imageId, this.createImageContext());
|
|
3863
3886
|
if (!image) {
|
|
3864
3887
|
throw new Error(`Image not found: ${imageId}`);
|
|
3865
3888
|
}
|
|
3866
3889
|
const messages = await image.getMessages();
|
|
3867
|
-
|
|
3890
|
+
logger14.debug("Got messages from storage", { imageId, count: messages.length });
|
|
3868
3891
|
return messages.map((m) => {
|
|
3869
3892
|
let content;
|
|
3870
3893
|
let role = m.role;
|
|
@@ -3981,14 +4004,14 @@ var RuntimeImpl = class {
|
|
|
3981
4004
|
}
|
|
3982
4005
|
// ==================== Lifecycle ====================
|
|
3983
4006
|
async dispose() {
|
|
3984
|
-
|
|
4007
|
+
logger14.info("Disposing RuntimeImpl");
|
|
3985
4008
|
this.commandHandler.dispose();
|
|
3986
4009
|
for (const container of this.containerRegistry.values()) {
|
|
3987
4010
|
await container.dispose();
|
|
3988
4011
|
}
|
|
3989
4012
|
this.bus.destroy();
|
|
3990
4013
|
this.containerRegistry.clear();
|
|
3991
|
-
|
|
4014
|
+
logger14.info("RuntimeImpl disposed");
|
|
3992
4015
|
}
|
|
3993
4016
|
};
|
|
3994
4017
|
|
|
@@ -4001,7 +4024,7 @@ function createRuntime(config) {
|
|
|
4001
4024
|
var import_unstorage = require("unstorage");
|
|
4002
4025
|
|
|
4003
4026
|
// src/internal/persistence/repository/StorageImageRepository.ts
|
|
4004
|
-
var
|
|
4027
|
+
var logger15 = createLogger("persistence/ImageRepository");
|
|
4005
4028
|
var PREFIX = "images";
|
|
4006
4029
|
var INDEX_BY_NAME = "idx:images:name";
|
|
4007
4030
|
var INDEX_BY_CONTAINER = "idx:images:container";
|
|
@@ -4025,7 +4048,7 @@ var StorageImageRepository = class {
|
|
|
4025
4048
|
this.containerIndexKey(record.containerId, record.imageId),
|
|
4026
4049
|
record.imageId
|
|
4027
4050
|
);
|
|
4028
|
-
|
|
4051
|
+
logger15.debug("Image saved", { imageId: record.imageId });
|
|
4029
4052
|
}
|
|
4030
4053
|
async findImageById(imageId) {
|
|
4031
4054
|
const record = await this.storage.getItem(this.key(imageId));
|
|
@@ -4080,7 +4103,7 @@ var StorageImageRepository = class {
|
|
|
4080
4103
|
await this.storage.removeItem(this.nameIndexKey(record.name, imageId));
|
|
4081
4104
|
await this.storage.removeItem(this.containerIndexKey(record.containerId, imageId));
|
|
4082
4105
|
}
|
|
4083
|
-
|
|
4106
|
+
logger15.debug("Image deleted", { imageId });
|
|
4084
4107
|
}
|
|
4085
4108
|
async imageExists(imageId) {
|
|
4086
4109
|
return await this.storage.hasItem(this.key(imageId));
|
|
@@ -4099,12 +4122,12 @@ var StorageImageRepository = class {
|
|
|
4099
4122
|
updatedAt: Date.now()
|
|
4100
4123
|
};
|
|
4101
4124
|
await this.storage.setItem(this.key(imageId), updatedRecord);
|
|
4102
|
-
|
|
4125
|
+
logger15.debug("Image metadata updated", { imageId, metadata });
|
|
4103
4126
|
}
|
|
4104
4127
|
};
|
|
4105
4128
|
|
|
4106
4129
|
// src/internal/persistence/repository/StorageContainerRepository.ts
|
|
4107
|
-
var
|
|
4130
|
+
var logger16 = createLogger("persistence/ContainerRepository");
|
|
4108
4131
|
var PREFIX2 = "containers";
|
|
4109
4132
|
var StorageContainerRepository = class {
|
|
4110
4133
|
constructor(storage) {
|
|
@@ -4115,7 +4138,7 @@ var StorageContainerRepository = class {
|
|
|
4115
4138
|
}
|
|
4116
4139
|
async saveContainer(record) {
|
|
4117
4140
|
await this.storage.setItem(this.key(record.containerId), record);
|
|
4118
|
-
|
|
4141
|
+
logger16.debug("Container saved", { containerId: record.containerId });
|
|
4119
4142
|
}
|
|
4120
4143
|
async findContainerById(containerId) {
|
|
4121
4144
|
const record = await this.storage.getItem(this.key(containerId));
|
|
@@ -4134,7 +4157,7 @@ var StorageContainerRepository = class {
|
|
|
4134
4157
|
}
|
|
4135
4158
|
async deleteContainer(containerId) {
|
|
4136
4159
|
await this.storage.removeItem(this.key(containerId));
|
|
4137
|
-
|
|
4160
|
+
logger16.debug("Container deleted", { containerId });
|
|
4138
4161
|
}
|
|
4139
4162
|
async containerExists(containerId) {
|
|
4140
4163
|
return await this.storage.hasItem(this.key(containerId));
|
|
@@ -4142,7 +4165,7 @@ var StorageContainerRepository = class {
|
|
|
4142
4165
|
};
|
|
4143
4166
|
|
|
4144
4167
|
// src/internal/persistence/repository/StorageSessionRepository.ts
|
|
4145
|
-
var
|
|
4168
|
+
var logger17 = createLogger("persistence/SessionRepository");
|
|
4146
4169
|
var PREFIX3 = "sessions";
|
|
4147
4170
|
var MESSAGES_PREFIX = "messages";
|
|
4148
4171
|
var INDEX_BY_IMAGE = "idx:sessions:image";
|
|
@@ -4173,7 +4196,7 @@ var StorageSessionRepository = class {
|
|
|
4173
4196
|
this.containerIndexKey(record.containerId, record.sessionId),
|
|
4174
4197
|
record.sessionId
|
|
4175
4198
|
);
|
|
4176
|
-
|
|
4199
|
+
logger17.debug("Session saved", { sessionId: record.sessionId });
|
|
4177
4200
|
}
|
|
4178
4201
|
async findSessionById(sessionId) {
|
|
4179
4202
|
const record = await this.storage.getItem(this.key(sessionId));
|
|
@@ -4222,7 +4245,7 @@ var StorageSessionRepository = class {
|
|
|
4222
4245
|
await this.storage.removeItem(this.imageIndexKey(record.imageId, sessionId));
|
|
4223
4246
|
await this.storage.removeItem(this.containerIndexKey(record.containerId, sessionId));
|
|
4224
4247
|
}
|
|
4225
|
-
|
|
4248
|
+
logger17.debug("Session deleted", { sessionId });
|
|
4226
4249
|
}
|
|
4227
4250
|
async sessionExists(sessionId) {
|
|
4228
4251
|
return await this.storage.hasItem(this.key(sessionId));
|
|
@@ -4232,13 +4255,13 @@ var StorageSessionRepository = class {
|
|
|
4232
4255
|
const messages = await this.getMessages(sessionId);
|
|
4233
4256
|
messages.push(message);
|
|
4234
4257
|
await this.storage.setItem(this.messagesKey(sessionId), messages);
|
|
4235
|
-
|
|
4258
|
+
logger17.debug("Message added to session", { sessionId, subtype: message.subtype });
|
|
4236
4259
|
}
|
|
4237
4260
|
async getMessages(sessionId) {
|
|
4238
4261
|
const messages = await this.storage.getItem(this.messagesKey(sessionId));
|
|
4239
4262
|
if (!messages || !Array.isArray(messages)) {
|
|
4240
4263
|
if (messages) {
|
|
4241
|
-
|
|
4264
|
+
logger17.warn("Messages data is not an array, resetting", {
|
|
4242
4265
|
sessionId,
|
|
4243
4266
|
type: typeof messages
|
|
4244
4267
|
});
|
|
@@ -4249,12 +4272,12 @@ var StorageSessionRepository = class {
|
|
|
4249
4272
|
}
|
|
4250
4273
|
async clearMessages(sessionId) {
|
|
4251
4274
|
await this.storage.removeItem(this.messagesKey(sessionId));
|
|
4252
|
-
|
|
4275
|
+
logger17.debug("Messages cleared for session", { sessionId });
|
|
4253
4276
|
}
|
|
4254
4277
|
};
|
|
4255
4278
|
|
|
4256
4279
|
// src/internal/persistence/PersistenceImpl.ts
|
|
4257
|
-
var
|
|
4280
|
+
var logger18 = createLogger("persistence/Persistence");
|
|
4258
4281
|
var PersistenceImpl = class _PersistenceImpl {
|
|
4259
4282
|
images;
|
|
4260
4283
|
containers;
|
|
@@ -4268,7 +4291,7 @@ var PersistenceImpl = class _PersistenceImpl {
|
|
|
4268
4291
|
this.images = new StorageImageRepository(this.storage);
|
|
4269
4292
|
this.containers = new StorageContainerRepository(this.storage);
|
|
4270
4293
|
this.sessions = new StorageSessionRepository(this.storage);
|
|
4271
|
-
|
|
4294
|
+
logger18.info("Persistence created", { driver: driverName });
|
|
4272
4295
|
}
|
|
4273
4296
|
/**
|
|
4274
4297
|
* Create a PersistenceImpl instance (async factory)
|
|
@@ -4289,7 +4312,7 @@ var PersistenceImpl = class _PersistenceImpl {
|
|
|
4289
4312
|
*/
|
|
4290
4313
|
async dispose() {
|
|
4291
4314
|
await this.storage.dispose();
|
|
4292
|
-
|
|
4315
|
+
logger18.info("Persistence disposed");
|
|
4293
4316
|
}
|
|
4294
4317
|
};
|
|
4295
4318
|
async function createStorageFromConfig(config) {
|