@agentxjs/runtime 0.1.5 → 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 +134 -114
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +134 -114
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1879,6 +1879,7 @@ import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
|
1879
1879
|
import { Subject as Subject2 } from "rxjs";
|
|
1880
1880
|
|
|
1881
1881
|
// src/environment/buildOptions.ts
|
|
1882
|
+
var logger7 = createLogger("environment/buildOptions");
|
|
1882
1883
|
function buildOptions(context, abortController) {
|
|
1883
1884
|
const options = {
|
|
1884
1885
|
abortController,
|
|
@@ -1887,9 +1888,15 @@ function buildOptions(context, abortController) {
|
|
|
1887
1888
|
if (context.cwd) {
|
|
1888
1889
|
options.cwd = context.cwd;
|
|
1889
1890
|
}
|
|
1890
|
-
const env = {
|
|
1891
|
-
|
|
1892
|
-
|
|
1891
|
+
const env = {};
|
|
1892
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
1893
|
+
if (value !== void 0) {
|
|
1894
|
+
env[key] = value;
|
|
1895
|
+
}
|
|
1896
|
+
}
|
|
1897
|
+
if (!env.PATH && process.env.PATH) {
|
|
1898
|
+
env.PATH = process.env.PATH;
|
|
1899
|
+
}
|
|
1893
1900
|
if (context.baseUrl) {
|
|
1894
1901
|
env.ANTHROPIC_BASE_URL = context.baseUrl;
|
|
1895
1902
|
}
|
|
@@ -1897,6 +1904,19 @@ function buildOptions(context, abortController) {
|
|
|
1897
1904
|
env.ANTHROPIC_API_KEY = context.apiKey;
|
|
1898
1905
|
}
|
|
1899
1906
|
options.env = env;
|
|
1907
|
+
logger7.info("buildOptions called", {
|
|
1908
|
+
hasPath: !!env.PATH,
|
|
1909
|
+
pathLength: env.PATH?.length,
|
|
1910
|
+
hasApiKey: !!env.ANTHROPIC_API_KEY,
|
|
1911
|
+
hasBaseUrl: !!env.ANTHROPIC_BASE_URL,
|
|
1912
|
+
baseUrl: env.ANTHROPIC_BASE_URL,
|
|
1913
|
+
model: context.model,
|
|
1914
|
+
permissionMode: context.permissionMode || "bypassPermissions",
|
|
1915
|
+
cwd: context.cwd
|
|
1916
|
+
});
|
|
1917
|
+
options.stderr = (data) => {
|
|
1918
|
+
logger7.info("SDK stderr", { data: data.trim() });
|
|
1919
|
+
};
|
|
1900
1920
|
if (context.model) options.model = context.model;
|
|
1901
1921
|
if (context.systemPrompt) options.systemPrompt = context.systemPrompt;
|
|
1902
1922
|
if (context.maxTurns) options.maxTurns = context.maxTurns;
|
|
@@ -1998,7 +2018,7 @@ async function* observableToAsyncIterable(observable) {
|
|
|
1998
2018
|
}
|
|
1999
2019
|
|
|
2000
2020
|
// src/environment/ClaudeEffector.ts
|
|
2001
|
-
var
|
|
2021
|
+
var logger8 = createLogger("ecosystem/ClaudeEffector");
|
|
2002
2022
|
var DEFAULT_TIMEOUT = 3e4;
|
|
2003
2023
|
var ClaudeEffector = class {
|
|
2004
2024
|
config;
|
|
@@ -2017,12 +2037,12 @@ var ClaudeEffector = class {
|
|
|
2017
2037
|
* Connect to SystemBus consumer to subscribe to events
|
|
2018
2038
|
*/
|
|
2019
2039
|
connect(consumer) {
|
|
2020
|
-
|
|
2040
|
+
logger8.debug("ClaudeEffector connected to SystemBusConsumer", {
|
|
2021
2041
|
agentId: this.config.agentId
|
|
2022
2042
|
});
|
|
2023
2043
|
consumer.on("user_message", async (event) => {
|
|
2024
2044
|
const typedEvent = event;
|
|
2025
|
-
|
|
2045
|
+
logger8.debug("user_message event received", {
|
|
2026
2046
|
eventAgentId: typedEvent.context?.agentId,
|
|
2027
2047
|
myAgentId: this.config.agentId,
|
|
2028
2048
|
matches: typedEvent.context?.agentId === this.config.agentId
|
|
@@ -2058,14 +2078,14 @@ var ClaudeEffector = class {
|
|
|
2058
2078
|
this.currentMeta = meta;
|
|
2059
2079
|
const timeout = this.config.timeout ?? DEFAULT_TIMEOUT;
|
|
2060
2080
|
const timeoutId = setTimeout(() => {
|
|
2061
|
-
|
|
2081
|
+
logger8.warn("Request timeout", { timeout });
|
|
2062
2082
|
this.currentAbortController?.abort(new Error(`Request timeout after ${timeout}ms`));
|
|
2063
2083
|
}, timeout);
|
|
2064
2084
|
try {
|
|
2065
2085
|
await this.initialize(this.currentAbortController);
|
|
2066
2086
|
const sessionId = this.config.sessionId || "default";
|
|
2067
2087
|
const sdkUserMessage = buildSDKUserMessage(message, sessionId);
|
|
2068
|
-
|
|
2088
|
+
logger8.debug("Sending message to Claude", {
|
|
2069
2089
|
content: typeof message.content === "string" ? message.content.substring(0, 80) : "[structured]",
|
|
2070
2090
|
timeout,
|
|
2071
2091
|
requestId: meta.requestId
|
|
@@ -2082,13 +2102,13 @@ var ClaudeEffector = class {
|
|
|
2082
2102
|
*/
|
|
2083
2103
|
interrupt(meta) {
|
|
2084
2104
|
if (this.claudeQuery) {
|
|
2085
|
-
|
|
2105
|
+
logger8.debug("Interrupting Claude query", { requestId: meta?.requestId });
|
|
2086
2106
|
this.wasInterrupted = true;
|
|
2087
2107
|
if (meta) {
|
|
2088
2108
|
this.currentMeta = meta;
|
|
2089
2109
|
}
|
|
2090
2110
|
this.claudeQuery.interrupt().catch((err) => {
|
|
2091
|
-
|
|
2111
|
+
logger8.debug("SDK interrupt() error (may be expected)", { error: err });
|
|
2092
2112
|
});
|
|
2093
2113
|
}
|
|
2094
2114
|
}
|
|
@@ -2097,7 +2117,7 @@ var ClaudeEffector = class {
|
|
|
2097
2117
|
*/
|
|
2098
2118
|
async initialize(abortController) {
|
|
2099
2119
|
if (this.isInitialized) return;
|
|
2100
|
-
|
|
2120
|
+
logger8.info("Initializing ClaudeEffector");
|
|
2101
2121
|
const context = {
|
|
2102
2122
|
apiKey: this.config.apiKey,
|
|
2103
2123
|
baseUrl: this.config.baseUrl,
|
|
@@ -2114,7 +2134,7 @@ var ClaudeEffector = class {
|
|
|
2114
2134
|
});
|
|
2115
2135
|
this.isInitialized = true;
|
|
2116
2136
|
this.startBackgroundListener();
|
|
2117
|
-
|
|
2137
|
+
logger8.info("ClaudeEffector initialized");
|
|
2118
2138
|
}
|
|
2119
2139
|
/**
|
|
2120
2140
|
* Start background listener for SDK responses
|
|
@@ -2123,7 +2143,7 @@ var ClaudeEffector = class {
|
|
|
2123
2143
|
(async () => {
|
|
2124
2144
|
try {
|
|
2125
2145
|
for await (const sdkMsg of this.claudeQuery) {
|
|
2126
|
-
|
|
2146
|
+
logger8.debug("SDK message received", {
|
|
2127
2147
|
type: sdkMsg.type,
|
|
2128
2148
|
subtype: sdkMsg.subtype,
|
|
2129
2149
|
sessionId: sdkMsg.session_id,
|
|
@@ -2140,10 +2160,10 @@ var ClaudeEffector = class {
|
|
|
2140
2160
|
}
|
|
2141
2161
|
if (sdkMsg.type === "result") {
|
|
2142
2162
|
const resultMsg = sdkMsg;
|
|
2143
|
-
|
|
2163
|
+
logger8.info("SDK result received (full)", {
|
|
2144
2164
|
fullResult: JSON.stringify(sdkMsg, null, 2)
|
|
2145
2165
|
});
|
|
2146
|
-
|
|
2166
|
+
logger8.info("SDK result received", {
|
|
2147
2167
|
subtype: resultMsg.subtype,
|
|
2148
2168
|
isError: resultMsg.is_error,
|
|
2149
2169
|
errors: resultMsg.errors,
|
|
@@ -2161,10 +2181,10 @@ var ClaudeEffector = class {
|
|
|
2161
2181
|
}
|
|
2162
2182
|
} catch (error) {
|
|
2163
2183
|
if (this.isAbortError(error)) {
|
|
2164
|
-
|
|
2184
|
+
logger8.debug("Background listener aborted (expected during interrupt)");
|
|
2165
2185
|
this.resetState();
|
|
2166
2186
|
} else {
|
|
2167
|
-
|
|
2187
|
+
logger8.error("Background listener error", { error });
|
|
2168
2188
|
if (this.currentMeta) {
|
|
2169
2189
|
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
2170
2190
|
this.receptor.emitError(errorMessage, "runtime_error", this.currentMeta);
|
|
@@ -2196,7 +2216,7 @@ var ClaudeEffector = class {
|
|
|
2196
2216
|
* Dispose and cleanup resources
|
|
2197
2217
|
*/
|
|
2198
2218
|
dispose() {
|
|
2199
|
-
|
|
2219
|
+
logger8.debug("Disposing ClaudeEffector");
|
|
2200
2220
|
if (this.currentAbortController) {
|
|
2201
2221
|
this.currentAbortController.abort();
|
|
2202
2222
|
}
|
|
@@ -2227,7 +2247,7 @@ var ClaudeEnvironment = class {
|
|
|
2227
2247
|
};
|
|
2228
2248
|
|
|
2229
2249
|
// src/internal/RuntimeAgent.ts
|
|
2230
|
-
var
|
|
2250
|
+
var logger9 = createLogger("runtime/RuntimeAgent");
|
|
2231
2251
|
var BusPresenter = class {
|
|
2232
2252
|
constructor(producer, session, agentId, imageId, containerId) {
|
|
2233
2253
|
this.producer = producer;
|
|
@@ -2264,7 +2284,7 @@ var BusPresenter = class {
|
|
|
2264
2284
|
this.producer.emit(systemEvent);
|
|
2265
2285
|
if (category === "message") {
|
|
2266
2286
|
this.session.addMessage(data).catch((err) => {
|
|
2267
|
-
|
|
2287
|
+
logger9.error("Failed to persist message", { error: err, messageType: output.type });
|
|
2268
2288
|
});
|
|
2269
2289
|
}
|
|
2270
2290
|
}
|
|
@@ -2322,7 +2342,7 @@ var BusPresenter = class {
|
|
|
2322
2342
|
};
|
|
2323
2343
|
}
|
|
2324
2344
|
default:
|
|
2325
|
-
|
|
2345
|
+
logger9.warn("Unknown message type, passing through", { type: output.type });
|
|
2326
2346
|
return eventData;
|
|
2327
2347
|
}
|
|
2328
2348
|
}
|
|
@@ -2382,7 +2402,7 @@ var RuntimeAgent = class {
|
|
|
2382
2402
|
});
|
|
2383
2403
|
this.environment.receptor.connect(config.bus.asProducer());
|
|
2384
2404
|
this.environment.effector.connect(config.bus.asConsumer());
|
|
2385
|
-
|
|
2405
|
+
logger9.info("ClaudeEnvironment created for agent", {
|
|
2386
2406
|
agentId: this.agentId,
|
|
2387
2407
|
imageId: this.imageId,
|
|
2388
2408
|
resumeSessionId: resumeSessionId ?? "none",
|
|
@@ -2416,14 +2436,14 @@ var RuntimeAgent = class {
|
|
|
2416
2436
|
this.driver = new BusDriver(config.bus.asConsumer(), {
|
|
2417
2437
|
agentId: this.agentId,
|
|
2418
2438
|
onStreamEvent: (event) => {
|
|
2419
|
-
|
|
2439
|
+
logger9.debug("BusDriver \u2192 Engine.handleStreamEvent", { type: event.type });
|
|
2420
2440
|
this.engine.handleStreamEvent(event);
|
|
2421
2441
|
},
|
|
2422
2442
|
onStreamComplete: (reason) => {
|
|
2423
|
-
|
|
2443
|
+
logger9.debug("Stream completed", { reason, agentId: this.agentId });
|
|
2424
2444
|
}
|
|
2425
2445
|
});
|
|
2426
|
-
|
|
2446
|
+
logger9.debug("RuntimeAgent created", {
|
|
2427
2447
|
agentId: this.agentId,
|
|
2428
2448
|
imageId: this.imageId
|
|
2429
2449
|
});
|
|
@@ -2432,13 +2452,13 @@ var RuntimeAgent = class {
|
|
|
2432
2452
|
* Save SDK session ID to image metadata for future resume
|
|
2433
2453
|
*/
|
|
2434
2454
|
saveSessionId(sdkSessionId) {
|
|
2435
|
-
|
|
2455
|
+
logger9.info("Saving SDK session ID to image metadata", {
|
|
2436
2456
|
agentId: this.agentId,
|
|
2437
2457
|
imageId: this.imageId,
|
|
2438
2458
|
sdkSessionId
|
|
2439
2459
|
});
|
|
2440
2460
|
this.imageRepository.updateMetadata(this.imageId, { claudeSdkSessionId: sdkSessionId }).catch((err) => {
|
|
2441
|
-
|
|
2461
|
+
logger9.error("Failed to save SDK session ID", { error: err, imageId: this.imageId });
|
|
2442
2462
|
});
|
|
2443
2463
|
}
|
|
2444
2464
|
get lifecycle() {
|
|
@@ -2451,7 +2471,7 @@ var RuntimeAgent = class {
|
|
|
2451
2471
|
* @param requestId - Request ID for correlation
|
|
2452
2472
|
*/
|
|
2453
2473
|
async receive(content, requestId) {
|
|
2454
|
-
|
|
2474
|
+
logger9.debug("RuntimeAgent.receive called", {
|
|
2455
2475
|
agentId: this.agentId,
|
|
2456
2476
|
contentPreview: content.substring(0, 50),
|
|
2457
2477
|
requestId
|
|
@@ -2460,13 +2480,13 @@ var RuntimeAgent = class {
|
|
|
2460
2480
|
throw new Error(`Cannot send message to ${this._lifecycle} agent`);
|
|
2461
2481
|
}
|
|
2462
2482
|
await this.interactor.receive(content, requestId || `req_${Date.now()}`);
|
|
2463
|
-
|
|
2483
|
+
logger9.debug("RuntimeAgent.receive completed", { agentId: this.agentId });
|
|
2464
2484
|
}
|
|
2465
2485
|
/**
|
|
2466
2486
|
* Interrupt current operation
|
|
2467
2487
|
*/
|
|
2468
2488
|
interrupt(requestId) {
|
|
2469
|
-
|
|
2489
|
+
logger9.debug("RuntimeAgent.interrupt called", { agentId: this.agentId, requestId });
|
|
2470
2490
|
this.interactor.interrupt(requestId);
|
|
2471
2491
|
this.producer.emit({
|
|
2472
2492
|
type: "interrupted",
|
|
@@ -2661,7 +2681,7 @@ var RuntimeSandbox = class {
|
|
|
2661
2681
|
};
|
|
2662
2682
|
|
|
2663
2683
|
// src/internal/RuntimeImage.ts
|
|
2664
|
-
var
|
|
2684
|
+
var logger10 = createLogger("runtime/RuntimeImage");
|
|
2665
2685
|
var RuntimeImage = class _RuntimeImage {
|
|
2666
2686
|
constructor(record, context) {
|
|
2667
2687
|
this.record = record;
|
|
@@ -2718,7 +2738,7 @@ var RuntimeImage = class _RuntimeImage {
|
|
|
2718
2738
|
createdAt: now,
|
|
2719
2739
|
updatedAt: now
|
|
2720
2740
|
});
|
|
2721
|
-
|
|
2741
|
+
logger10.info("Image created", {
|
|
2722
2742
|
imageId,
|
|
2723
2743
|
sessionId,
|
|
2724
2744
|
containerId: config.containerId,
|
|
@@ -2732,10 +2752,10 @@ var RuntimeImage = class _RuntimeImage {
|
|
|
2732
2752
|
static async load(imageId, context) {
|
|
2733
2753
|
const record = await context.imageRepository.findImageById(imageId);
|
|
2734
2754
|
if (!record) {
|
|
2735
|
-
|
|
2755
|
+
logger10.debug("Image not found", { imageId });
|
|
2736
2756
|
return null;
|
|
2737
2757
|
}
|
|
2738
|
-
|
|
2758
|
+
logger10.debug("Image loaded", { imageId, name: record.name });
|
|
2739
2759
|
return new _RuntimeImage(record, context);
|
|
2740
2760
|
}
|
|
2741
2761
|
/**
|
|
@@ -2769,7 +2789,7 @@ var RuntimeImage = class _RuntimeImage {
|
|
|
2769
2789
|
updatedAt: now
|
|
2770
2790
|
};
|
|
2771
2791
|
await this.context.imageRepository.saveImage(updatedRecord);
|
|
2772
|
-
|
|
2792
|
+
logger10.info("Image updated", { imageId: this.imageId, updates });
|
|
2773
2793
|
return new _RuntimeImage(updatedRecord, this.context);
|
|
2774
2794
|
}
|
|
2775
2795
|
/**
|
|
@@ -2778,7 +2798,7 @@ var RuntimeImage = class _RuntimeImage {
|
|
|
2778
2798
|
async delete() {
|
|
2779
2799
|
await this.context.sessionRepository.deleteSession(this.sessionId);
|
|
2780
2800
|
await this.context.imageRepository.deleteImage(this.imageId);
|
|
2781
|
-
|
|
2801
|
+
logger10.info("Image deleted", { imageId: this.imageId, sessionId: this.sessionId });
|
|
2782
2802
|
}
|
|
2783
2803
|
/**
|
|
2784
2804
|
* Get the underlying record
|
|
@@ -2800,7 +2820,7 @@ var RuntimeImage = class _RuntimeImage {
|
|
|
2800
2820
|
};
|
|
2801
2821
|
|
|
2802
2822
|
// src/internal/RuntimeContainer.ts
|
|
2803
|
-
var
|
|
2823
|
+
var logger11 = createLogger("runtime/RuntimeContainer");
|
|
2804
2824
|
var RuntimeContainer = class _RuntimeContainer {
|
|
2805
2825
|
containerId;
|
|
2806
2826
|
createdAt;
|
|
@@ -2840,7 +2860,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
2840
2860
|
containerId
|
|
2841
2861
|
}
|
|
2842
2862
|
});
|
|
2843
|
-
|
|
2863
|
+
logger11.info("Container created", { containerId });
|
|
2844
2864
|
return container;
|
|
2845
2865
|
}
|
|
2846
2866
|
/**
|
|
@@ -2849,7 +2869,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
2849
2869
|
static async load(containerId, context) {
|
|
2850
2870
|
const record = await context.persistence.containers.findContainerById(containerId);
|
|
2851
2871
|
if (!record) return null;
|
|
2852
|
-
|
|
2872
|
+
logger11.info("Container loaded", { containerId });
|
|
2853
2873
|
return new _RuntimeContainer(containerId, record.createdAt, context);
|
|
2854
2874
|
}
|
|
2855
2875
|
// ==================== Image → Agent Lifecycle ====================
|
|
@@ -2862,7 +2882,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
2862
2882
|
if (existingAgentId) {
|
|
2863
2883
|
const existingAgent = this.agents.get(existingAgentId);
|
|
2864
2884
|
if (existingAgent) {
|
|
2865
|
-
|
|
2885
|
+
logger11.info("Reusing existing agent for image", {
|
|
2866
2886
|
containerId: this.containerId,
|
|
2867
2887
|
imageId: image.imageId,
|
|
2868
2888
|
agentId: existingAgentId
|
|
@@ -2921,7 +2941,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
2921
2941
|
agentId
|
|
2922
2942
|
}
|
|
2923
2943
|
});
|
|
2924
|
-
|
|
2944
|
+
logger11.info("Agent created for image", {
|
|
2925
2945
|
containerId: this.containerId,
|
|
2926
2946
|
imageId: image.imageId,
|
|
2927
2947
|
agentId
|
|
@@ -2934,17 +2954,17 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
2934
2954
|
async stopImage(imageId) {
|
|
2935
2955
|
const agentId = this.imageToAgent.get(imageId);
|
|
2936
2956
|
if (!agentId) {
|
|
2937
|
-
|
|
2957
|
+
logger11.debug("Image not running, nothing to stop", {
|
|
2938
2958
|
imageId,
|
|
2939
2959
|
containerId: this.containerId
|
|
2940
2960
|
});
|
|
2941
2961
|
return false;
|
|
2942
2962
|
}
|
|
2943
|
-
|
|
2963
|
+
logger11.info("Stopping image", { imageId, agentId, containerId: this.containerId });
|
|
2944
2964
|
const success = await this.destroyAgent(agentId);
|
|
2945
2965
|
if (success) {
|
|
2946
2966
|
this.imageToAgent.delete(imageId);
|
|
2947
|
-
|
|
2967
|
+
logger11.info("Image stopped", { imageId, agentId, containerId: this.containerId });
|
|
2948
2968
|
}
|
|
2949
2969
|
return success;
|
|
2950
2970
|
}
|
|
@@ -3001,7 +3021,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
3001
3021
|
agentId
|
|
3002
3022
|
}
|
|
3003
3023
|
});
|
|
3004
|
-
|
|
3024
|
+
logger11.info("Agent destroyed", { containerId: this.containerId, agentId });
|
|
3005
3025
|
return true;
|
|
3006
3026
|
}
|
|
3007
3027
|
async destroyAllAgents() {
|
|
@@ -3029,7 +3049,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
3029
3049
|
}
|
|
3030
3050
|
});
|
|
3031
3051
|
this.context.onDisposed?.(this.containerId);
|
|
3032
|
-
|
|
3052
|
+
logger11.info("Container disposed", { containerId: this.containerId, agentCount });
|
|
3033
3053
|
}
|
|
3034
3054
|
// ==================== Private Helpers ====================
|
|
3035
3055
|
generateAgentId() {
|
|
@@ -3040,7 +3060,7 @@ var RuntimeContainer = class _RuntimeContainer {
|
|
|
3040
3060
|
};
|
|
3041
3061
|
|
|
3042
3062
|
// src/internal/BaseEventHandler.ts
|
|
3043
|
-
var
|
|
3063
|
+
var logger12 = createLogger("runtime/BaseEventHandler");
|
|
3044
3064
|
var BaseEventHandler = class {
|
|
3045
3065
|
bus;
|
|
3046
3066
|
unsubscribes = [];
|
|
@@ -3079,7 +3099,7 @@ var BaseEventHandler = class {
|
|
|
3079
3099
|
handleError(err, context) {
|
|
3080
3100
|
const message = err instanceof Error ? err.message : String(err);
|
|
3081
3101
|
const stack = err instanceof Error ? err.stack : void 0;
|
|
3082
|
-
|
|
3102
|
+
logger12.error(`Error in ${context.operation || "handler"}`, {
|
|
3083
3103
|
message,
|
|
3084
3104
|
requestId: context.requestId,
|
|
3085
3105
|
details: context.details
|
|
@@ -3106,7 +3126,7 @@ var BaseEventHandler = class {
|
|
|
3106
3126
|
try {
|
|
3107
3127
|
context.onError(err);
|
|
3108
3128
|
} catch (callbackErr) {
|
|
3109
|
-
|
|
3129
|
+
logger12.error("Error in onError callback", { error: callbackErr });
|
|
3110
3130
|
}
|
|
3111
3131
|
}
|
|
3112
3132
|
}
|
|
@@ -3124,12 +3144,12 @@ var BaseEventHandler = class {
|
|
|
3124
3144
|
unsubscribe();
|
|
3125
3145
|
}
|
|
3126
3146
|
this.unsubscribes = [];
|
|
3127
|
-
|
|
3147
|
+
logger12.debug(`${this.constructor.name} disposed`);
|
|
3128
3148
|
}
|
|
3129
3149
|
};
|
|
3130
3150
|
|
|
3131
3151
|
// src/internal/CommandHandler.ts
|
|
3132
|
-
var
|
|
3152
|
+
var logger13 = createLogger("runtime/CommandHandler");
|
|
3133
3153
|
function createResponse(type, data) {
|
|
3134
3154
|
return {
|
|
3135
3155
|
type,
|
|
@@ -3162,7 +3182,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3162
3182
|
super(bus);
|
|
3163
3183
|
this.ops = operations;
|
|
3164
3184
|
this.bindHandlers();
|
|
3165
|
-
|
|
3185
|
+
logger13.debug("CommandHandler created");
|
|
3166
3186
|
}
|
|
3167
3187
|
/**
|
|
3168
3188
|
* Log error and emit system_error event
|
|
@@ -3170,7 +3190,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3170
3190
|
emitError(operation, err, requestId, context) {
|
|
3171
3191
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
3172
3192
|
const stack = err instanceof Error ? err.stack : void 0;
|
|
3173
|
-
|
|
3193
|
+
logger13.error(operation, {
|
|
3174
3194
|
requestId,
|
|
3175
3195
|
...context,
|
|
3176
3196
|
error: errorMessage,
|
|
@@ -3227,12 +3247,12 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3227
3247
|
this.subscribe(
|
|
3228
3248
|
this.bus.onCommand("image_messages_request", (event) => this.handleImageMessages(event))
|
|
3229
3249
|
);
|
|
3230
|
-
|
|
3250
|
+
logger13.debug("Command handlers bound");
|
|
3231
3251
|
}
|
|
3232
3252
|
// ==================== Container Handlers ====================
|
|
3233
3253
|
async handleContainerCreate(event) {
|
|
3234
3254
|
const { requestId, containerId } = event.data;
|
|
3235
|
-
|
|
3255
|
+
logger13.debug("Handling container_create_request", { requestId, containerId });
|
|
3236
3256
|
try {
|
|
3237
3257
|
await this.ops.createContainer(containerId);
|
|
3238
3258
|
this.bus.emit(
|
|
@@ -3254,7 +3274,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3254
3274
|
}
|
|
3255
3275
|
handleContainerGet(event) {
|
|
3256
3276
|
const { requestId, containerId } = event.data;
|
|
3257
|
-
|
|
3277
|
+
logger13.debug("Handling container_get_request", { requestId, containerId });
|
|
3258
3278
|
const container = this.ops.getContainer(containerId);
|
|
3259
3279
|
this.bus.emit(
|
|
3260
3280
|
createResponse("container_get_response", {
|
|
@@ -3266,7 +3286,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3266
3286
|
}
|
|
3267
3287
|
handleContainerList(event) {
|
|
3268
3288
|
const { requestId } = event.data;
|
|
3269
|
-
|
|
3289
|
+
logger13.debug("Handling container_list_request", { requestId });
|
|
3270
3290
|
const containers = this.ops.listContainers();
|
|
3271
3291
|
this.bus.emit(
|
|
3272
3292
|
createResponse("container_list_response", {
|
|
@@ -3278,7 +3298,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3278
3298
|
// ==================== Agent Handlers ====================
|
|
3279
3299
|
handleAgentGet(event) {
|
|
3280
3300
|
const { requestId, agentId } = event.data;
|
|
3281
|
-
|
|
3301
|
+
logger13.debug("Handling agent_get_request", { requestId, agentId });
|
|
3282
3302
|
const agent = this.ops.getAgent(agentId);
|
|
3283
3303
|
this.bus.emit(
|
|
3284
3304
|
createResponse("agent_get_response", {
|
|
@@ -3291,7 +3311,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3291
3311
|
}
|
|
3292
3312
|
handleAgentList(event) {
|
|
3293
3313
|
const { requestId, containerId } = event.data;
|
|
3294
|
-
|
|
3314
|
+
logger13.debug("Handling agent_list_request", { requestId, containerId });
|
|
3295
3315
|
const agents = this.ops.listAgents(containerId);
|
|
3296
3316
|
this.bus.emit(
|
|
3297
3317
|
createResponse("agent_list_response", {
|
|
@@ -3306,7 +3326,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3306
3326
|
}
|
|
3307
3327
|
async handleAgentDestroy(event) {
|
|
3308
3328
|
const { requestId, agentId } = event.data;
|
|
3309
|
-
|
|
3329
|
+
logger13.debug("Handling agent_destroy_request", { requestId, agentId });
|
|
3310
3330
|
try {
|
|
3311
3331
|
const success = await this.ops.destroyAgent(agentId);
|
|
3312
3332
|
this.bus.emit(
|
|
@@ -3330,7 +3350,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3330
3350
|
}
|
|
3331
3351
|
async handleAgentDestroyAll(event) {
|
|
3332
3352
|
const { requestId, containerId } = event.data;
|
|
3333
|
-
|
|
3353
|
+
logger13.debug("Handling agent_destroy_all_request", { requestId, containerId });
|
|
3334
3354
|
try {
|
|
3335
3355
|
await this.ops.destroyAllAgents(containerId);
|
|
3336
3356
|
this.bus.emit(
|
|
@@ -3352,7 +3372,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3352
3372
|
}
|
|
3353
3373
|
async handleMessageSend(event) {
|
|
3354
3374
|
const { requestId, imageId, agentId, content } = event.data;
|
|
3355
|
-
|
|
3375
|
+
logger13.debug("Handling message_send_request", { requestId, imageId, agentId });
|
|
3356
3376
|
try {
|
|
3357
3377
|
const result = await this.ops.receiveMessage(imageId, agentId, content, requestId);
|
|
3358
3378
|
this.bus.emit(
|
|
@@ -3376,7 +3396,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3376
3396
|
}
|
|
3377
3397
|
handleAgentInterrupt(event) {
|
|
3378
3398
|
const { requestId, imageId, agentId } = event.data;
|
|
3379
|
-
|
|
3399
|
+
logger13.debug("Handling agent_interrupt_request", { requestId, imageId, agentId });
|
|
3380
3400
|
try {
|
|
3381
3401
|
const result = this.ops.interruptAgent(imageId, agentId, requestId);
|
|
3382
3402
|
this.bus.emit(
|
|
@@ -3401,7 +3421,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3401
3421
|
// ==================== Image Handlers ====================
|
|
3402
3422
|
async handleImageCreate(event) {
|
|
3403
3423
|
const { requestId, containerId, config } = event.data;
|
|
3404
|
-
|
|
3424
|
+
logger13.debug("Handling image_create_request", { requestId, containerId });
|
|
3405
3425
|
try {
|
|
3406
3426
|
const record = await this.ops.createImage(containerId, config);
|
|
3407
3427
|
this.bus.emit(
|
|
@@ -3423,7 +3443,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3423
3443
|
}
|
|
3424
3444
|
async handleImageRun(event) {
|
|
3425
3445
|
const { requestId, imageId } = event.data;
|
|
3426
|
-
|
|
3446
|
+
logger13.debug("Handling image_run_request", { requestId, imageId });
|
|
3427
3447
|
try {
|
|
3428
3448
|
const result = await this.ops.runImage(imageId);
|
|
3429
3449
|
this.bus.emit(
|
|
@@ -3449,7 +3469,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3449
3469
|
}
|
|
3450
3470
|
async handleImageStop(event) {
|
|
3451
3471
|
const { requestId, imageId } = event.data;
|
|
3452
|
-
|
|
3472
|
+
logger13.debug("Handling image_stop_request", { requestId, imageId });
|
|
3453
3473
|
try {
|
|
3454
3474
|
await this.ops.stopImage(imageId);
|
|
3455
3475
|
this.bus.emit(
|
|
@@ -3471,7 +3491,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3471
3491
|
}
|
|
3472
3492
|
async handleImageUpdate(event) {
|
|
3473
3493
|
const { requestId, imageId, updates } = event.data;
|
|
3474
|
-
|
|
3494
|
+
logger13.debug("Handling image_update_request", { requestId, imageId });
|
|
3475
3495
|
try {
|
|
3476
3496
|
const record = await this.ops.updateImage(imageId, updates);
|
|
3477
3497
|
this.bus.emit(
|
|
@@ -3493,7 +3513,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3493
3513
|
}
|
|
3494
3514
|
async handleImageList(event) {
|
|
3495
3515
|
const { requestId, containerId } = event.data;
|
|
3496
|
-
|
|
3516
|
+
logger13.debug("Handling image_list_request", { requestId, containerId });
|
|
3497
3517
|
try {
|
|
3498
3518
|
const images = await this.ops.listImages(containerId);
|
|
3499
3519
|
this.bus.emit(
|
|
@@ -3515,7 +3535,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3515
3535
|
}
|
|
3516
3536
|
async handleImageGet(event) {
|
|
3517
3537
|
const { requestId, imageId } = event.data;
|
|
3518
|
-
|
|
3538
|
+
logger13.debug("Handling image_get_request", { requestId, imageId });
|
|
3519
3539
|
try {
|
|
3520
3540
|
const image = await this.ops.getImage(imageId);
|
|
3521
3541
|
this.bus.emit(
|
|
@@ -3536,7 +3556,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3536
3556
|
}
|
|
3537
3557
|
async handleImageDelete(event) {
|
|
3538
3558
|
const { requestId, imageId } = event.data;
|
|
3539
|
-
|
|
3559
|
+
logger13.debug("Handling image_delete_request", { requestId, imageId });
|
|
3540
3560
|
try {
|
|
3541
3561
|
await this.ops.deleteImage(imageId);
|
|
3542
3562
|
this.bus.emit(
|
|
@@ -3558,10 +3578,10 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3558
3578
|
}
|
|
3559
3579
|
async handleImageMessages(event) {
|
|
3560
3580
|
const { requestId, imageId } = event.data;
|
|
3561
|
-
|
|
3581
|
+
logger13.info("Handling image_messages_request", { requestId, imageId });
|
|
3562
3582
|
try {
|
|
3563
3583
|
const messages = await this.ops.getImageMessages(imageId);
|
|
3564
|
-
|
|
3584
|
+
logger13.info("Got messages for image", { imageId, count: messages.length });
|
|
3565
3585
|
this.bus.emit(
|
|
3566
3586
|
createResponse("image_messages_response", {
|
|
3567
3587
|
requestId,
|
|
@@ -3569,7 +3589,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3569
3589
|
messages
|
|
3570
3590
|
})
|
|
3571
3591
|
);
|
|
3572
|
-
|
|
3592
|
+
logger13.info("Emitted image_messages_response", { requestId, imageId });
|
|
3573
3593
|
} catch (err) {
|
|
3574
3594
|
this.emitError("Failed to get image messages", err, requestId, { imageId });
|
|
3575
3595
|
this.bus.emit(
|
|
@@ -3588,7 +3608,7 @@ var CommandHandler = class extends BaseEventHandler {
|
|
|
3588
3608
|
// src/RuntimeImpl.ts
|
|
3589
3609
|
import { homedir } from "os";
|
|
3590
3610
|
import { join as join2 } from "path";
|
|
3591
|
-
var
|
|
3611
|
+
var logger14 = createLogger("runtime/RuntimeImpl");
|
|
3592
3612
|
var RuntimeImpl = class {
|
|
3593
3613
|
persistence;
|
|
3594
3614
|
llmProvider;
|
|
@@ -3599,20 +3619,20 @@ var RuntimeImpl = class {
|
|
|
3599
3619
|
/** Container registry: containerId -> RuntimeContainer */
|
|
3600
3620
|
containerRegistry = /* @__PURE__ */ new Map();
|
|
3601
3621
|
constructor(config) {
|
|
3602
|
-
|
|
3622
|
+
logger14.info("RuntimeImpl constructor start");
|
|
3603
3623
|
this.persistence = config.persistence;
|
|
3604
3624
|
this.llmProvider = config.llmProvider;
|
|
3605
3625
|
this.basePath = join2(homedir(), ".agentx");
|
|
3606
|
-
|
|
3626
|
+
logger14.info("Creating SystemBus");
|
|
3607
3627
|
this.bus = new SystemBusImpl();
|
|
3608
3628
|
this.llmConfig = this.llmProvider.provide();
|
|
3609
|
-
|
|
3629
|
+
logger14.info("LLM config loaded", {
|
|
3610
3630
|
hasApiKey: !!this.llmConfig.apiKey,
|
|
3611
3631
|
model: this.llmConfig.model
|
|
3612
3632
|
});
|
|
3613
|
-
|
|
3633
|
+
logger14.info("Creating CommandHandler");
|
|
3614
3634
|
this.commandHandler = new CommandHandler(this.bus, this.createRuntimeOperations());
|
|
3615
|
-
|
|
3635
|
+
logger14.info("RuntimeImpl constructor done");
|
|
3616
3636
|
}
|
|
3617
3637
|
// ==================== SystemBus delegation ====================
|
|
3618
3638
|
emit(event) {
|
|
@@ -3695,7 +3715,7 @@ var RuntimeImpl = class {
|
|
|
3695
3715
|
// Agent operations (by imageId - with auto-activation)
|
|
3696
3716
|
receiveMessage: async (imageId, agentId, content, requestId) => {
|
|
3697
3717
|
if (imageId) {
|
|
3698
|
-
|
|
3718
|
+
logger14.debug("Receiving message by imageId", {
|
|
3699
3719
|
imageId,
|
|
3700
3720
|
contentLength: content.length,
|
|
3701
3721
|
requestId
|
|
@@ -3704,7 +3724,7 @@ var RuntimeImpl = class {
|
|
|
3704
3724
|
if (!record) throw new Error(`Image not found: ${imageId}`);
|
|
3705
3725
|
const container = await this.getOrCreateContainer(record.containerId);
|
|
3706
3726
|
const { agent, reused } = await container.runImage(record);
|
|
3707
|
-
|
|
3727
|
+
logger14.info("Message routed to agent", {
|
|
3708
3728
|
imageId,
|
|
3709
3729
|
agentId: agent.agentId,
|
|
3710
3730
|
reused,
|
|
@@ -3714,7 +3734,7 @@ var RuntimeImpl = class {
|
|
|
3714
3734
|
return { agentId: agent.agentId, imageId };
|
|
3715
3735
|
}
|
|
3716
3736
|
if (agentId) {
|
|
3717
|
-
|
|
3737
|
+
logger14.debug("Receiving message by agentId (legacy)", {
|
|
3718
3738
|
agentId,
|
|
3719
3739
|
contentLength: content.length,
|
|
3720
3740
|
requestId
|
|
@@ -3731,12 +3751,12 @@ var RuntimeImpl = class {
|
|
|
3731
3751
|
if (imageId) {
|
|
3732
3752
|
const foundAgentId = this.findAgentIdForImage(imageId);
|
|
3733
3753
|
if (!foundAgentId) {
|
|
3734
|
-
|
|
3754
|
+
logger14.debug("Image is offline, nothing to interrupt", { imageId });
|
|
3735
3755
|
return { imageId, agentId: void 0 };
|
|
3736
3756
|
}
|
|
3737
3757
|
const agent = this.findAgent(foundAgentId);
|
|
3738
3758
|
if (agent) {
|
|
3739
|
-
|
|
3759
|
+
logger14.info("Interrupting agent by imageId", {
|
|
3740
3760
|
imageId,
|
|
3741
3761
|
agentId: foundAgentId,
|
|
3742
3762
|
requestId
|
|
@@ -3748,7 +3768,7 @@ var RuntimeImpl = class {
|
|
|
3748
3768
|
if (agentId) {
|
|
3749
3769
|
const agent = this.findAgent(agentId);
|
|
3750
3770
|
if (!agent) throw new Error(`Agent not found: ${agentId}`);
|
|
3751
|
-
|
|
3771
|
+
logger14.info("Interrupting agent by agentId (legacy)", { agentId, requestId });
|
|
3752
3772
|
agent.interrupt(requestId);
|
|
3753
3773
|
const foundImageId = this.findImageIdForAgent(agentId);
|
|
3754
3774
|
return { agentId, imageId: foundImageId };
|
|
@@ -3757,32 +3777,32 @@ var RuntimeImpl = class {
|
|
|
3757
3777
|
},
|
|
3758
3778
|
// Image operations (new model)
|
|
3759
3779
|
createImage: async (containerId, config) => {
|
|
3760
|
-
|
|
3780
|
+
logger14.debug("Creating image", { containerId, name: config.name });
|
|
3761
3781
|
await this.getOrCreateContainer(containerId);
|
|
3762
3782
|
const image = await RuntimeImage.create(
|
|
3763
3783
|
{ containerId, ...config },
|
|
3764
3784
|
this.createImageContext()
|
|
3765
3785
|
);
|
|
3766
|
-
|
|
3786
|
+
logger14.info("Image created via RuntimeOps", { imageId: image.imageId, containerId });
|
|
3767
3787
|
return this.toImageListItemResult(image.toRecord(), false);
|
|
3768
3788
|
},
|
|
3769
3789
|
runImage: async (imageId) => {
|
|
3770
|
-
|
|
3790
|
+
logger14.debug("Running image", { imageId });
|
|
3771
3791
|
const record = await this.persistence.images.findImageById(imageId);
|
|
3772
3792
|
if (!record) throw new Error(`Image not found: ${imageId}`);
|
|
3773
3793
|
const container = await this.getOrCreateContainer(record.containerId);
|
|
3774
3794
|
const { agent, reused } = await container.runImage(record);
|
|
3775
|
-
|
|
3795
|
+
logger14.info("Image running", { imageId, agentId: agent.agentId, reused });
|
|
3776
3796
|
return { imageId, agentId: agent.agentId, reused };
|
|
3777
3797
|
},
|
|
3778
3798
|
stopImage: async (imageId) => {
|
|
3779
|
-
|
|
3799
|
+
logger14.debug("Stopping image", { imageId });
|
|
3780
3800
|
const record = await this.persistence.images.findImageById(imageId);
|
|
3781
3801
|
if (!record) throw new Error(`Image not found: ${imageId}`);
|
|
3782
3802
|
const container = this.containerRegistry.get(record.containerId);
|
|
3783
3803
|
if (container) {
|
|
3784
3804
|
await container.stopImage(imageId);
|
|
3785
|
-
|
|
3805
|
+
logger14.info("Image stopped via RuntimeOps", { imageId });
|
|
3786
3806
|
}
|
|
3787
3807
|
},
|
|
3788
3808
|
updateImage: async (imageId, updates) => {
|
|
@@ -3806,10 +3826,10 @@ var RuntimeImpl = class {
|
|
|
3806
3826
|
return this.toImageListItemResult(record, online);
|
|
3807
3827
|
},
|
|
3808
3828
|
deleteImage: async (imageId) => {
|
|
3809
|
-
|
|
3829
|
+
logger14.debug("Deleting image", { imageId });
|
|
3810
3830
|
const agentId = this.findAgentIdForImage(imageId);
|
|
3811
3831
|
if (agentId) {
|
|
3812
|
-
|
|
3832
|
+
logger14.debug("Stopping running agent before delete", { imageId, agentId });
|
|
3813
3833
|
for (const container of this.containerRegistry.values()) {
|
|
3814
3834
|
if (container.getAgent(agentId)) {
|
|
3815
3835
|
await container.destroyAgent(agentId);
|
|
@@ -3820,17 +3840,17 @@ var RuntimeImpl = class {
|
|
|
3820
3840
|
const image = await RuntimeImage.load(imageId, this.createImageContext());
|
|
3821
3841
|
if (image) {
|
|
3822
3842
|
await image.delete();
|
|
3823
|
-
|
|
3843
|
+
logger14.info("Image deleted via RuntimeOps", { imageId });
|
|
3824
3844
|
}
|
|
3825
3845
|
},
|
|
3826
3846
|
getImageMessages: async (imageId) => {
|
|
3827
|
-
|
|
3847
|
+
logger14.debug("Getting messages for image", { imageId });
|
|
3828
3848
|
const image = await RuntimeImage.load(imageId, this.createImageContext());
|
|
3829
3849
|
if (!image) {
|
|
3830
3850
|
throw new Error(`Image not found: ${imageId}`);
|
|
3831
3851
|
}
|
|
3832
3852
|
const messages = await image.getMessages();
|
|
3833
|
-
|
|
3853
|
+
logger14.debug("Got messages from storage", { imageId, count: messages.length });
|
|
3834
3854
|
return messages.map((m) => {
|
|
3835
3855
|
let content;
|
|
3836
3856
|
let role = m.role;
|
|
@@ -3947,14 +3967,14 @@ var RuntimeImpl = class {
|
|
|
3947
3967
|
}
|
|
3948
3968
|
// ==================== Lifecycle ====================
|
|
3949
3969
|
async dispose() {
|
|
3950
|
-
|
|
3970
|
+
logger14.info("Disposing RuntimeImpl");
|
|
3951
3971
|
this.commandHandler.dispose();
|
|
3952
3972
|
for (const container of this.containerRegistry.values()) {
|
|
3953
3973
|
await container.dispose();
|
|
3954
3974
|
}
|
|
3955
3975
|
this.bus.destroy();
|
|
3956
3976
|
this.containerRegistry.clear();
|
|
3957
|
-
|
|
3977
|
+
logger14.info("RuntimeImpl disposed");
|
|
3958
3978
|
}
|
|
3959
3979
|
};
|
|
3960
3980
|
|
|
@@ -3967,7 +3987,7 @@ function createRuntime(config) {
|
|
|
3967
3987
|
import { createStorage } from "unstorage";
|
|
3968
3988
|
|
|
3969
3989
|
// src/internal/persistence/repository/StorageImageRepository.ts
|
|
3970
|
-
var
|
|
3990
|
+
var logger15 = createLogger("persistence/ImageRepository");
|
|
3971
3991
|
var PREFIX = "images";
|
|
3972
3992
|
var INDEX_BY_NAME = "idx:images:name";
|
|
3973
3993
|
var INDEX_BY_CONTAINER = "idx:images:container";
|
|
@@ -3991,7 +4011,7 @@ var StorageImageRepository = class {
|
|
|
3991
4011
|
this.containerIndexKey(record.containerId, record.imageId),
|
|
3992
4012
|
record.imageId
|
|
3993
4013
|
);
|
|
3994
|
-
|
|
4014
|
+
logger15.debug("Image saved", { imageId: record.imageId });
|
|
3995
4015
|
}
|
|
3996
4016
|
async findImageById(imageId) {
|
|
3997
4017
|
const record = await this.storage.getItem(this.key(imageId));
|
|
@@ -4046,7 +4066,7 @@ var StorageImageRepository = class {
|
|
|
4046
4066
|
await this.storage.removeItem(this.nameIndexKey(record.name, imageId));
|
|
4047
4067
|
await this.storage.removeItem(this.containerIndexKey(record.containerId, imageId));
|
|
4048
4068
|
}
|
|
4049
|
-
|
|
4069
|
+
logger15.debug("Image deleted", { imageId });
|
|
4050
4070
|
}
|
|
4051
4071
|
async imageExists(imageId) {
|
|
4052
4072
|
return await this.storage.hasItem(this.key(imageId));
|
|
@@ -4065,12 +4085,12 @@ var StorageImageRepository = class {
|
|
|
4065
4085
|
updatedAt: Date.now()
|
|
4066
4086
|
};
|
|
4067
4087
|
await this.storage.setItem(this.key(imageId), updatedRecord);
|
|
4068
|
-
|
|
4088
|
+
logger15.debug("Image metadata updated", { imageId, metadata });
|
|
4069
4089
|
}
|
|
4070
4090
|
};
|
|
4071
4091
|
|
|
4072
4092
|
// src/internal/persistence/repository/StorageContainerRepository.ts
|
|
4073
|
-
var
|
|
4093
|
+
var logger16 = createLogger("persistence/ContainerRepository");
|
|
4074
4094
|
var PREFIX2 = "containers";
|
|
4075
4095
|
var StorageContainerRepository = class {
|
|
4076
4096
|
constructor(storage) {
|
|
@@ -4081,7 +4101,7 @@ var StorageContainerRepository = class {
|
|
|
4081
4101
|
}
|
|
4082
4102
|
async saveContainer(record) {
|
|
4083
4103
|
await this.storage.setItem(this.key(record.containerId), record);
|
|
4084
|
-
|
|
4104
|
+
logger16.debug("Container saved", { containerId: record.containerId });
|
|
4085
4105
|
}
|
|
4086
4106
|
async findContainerById(containerId) {
|
|
4087
4107
|
const record = await this.storage.getItem(this.key(containerId));
|
|
@@ -4100,7 +4120,7 @@ var StorageContainerRepository = class {
|
|
|
4100
4120
|
}
|
|
4101
4121
|
async deleteContainer(containerId) {
|
|
4102
4122
|
await this.storage.removeItem(this.key(containerId));
|
|
4103
|
-
|
|
4123
|
+
logger16.debug("Container deleted", { containerId });
|
|
4104
4124
|
}
|
|
4105
4125
|
async containerExists(containerId) {
|
|
4106
4126
|
return await this.storage.hasItem(this.key(containerId));
|
|
@@ -4108,7 +4128,7 @@ var StorageContainerRepository = class {
|
|
|
4108
4128
|
};
|
|
4109
4129
|
|
|
4110
4130
|
// src/internal/persistence/repository/StorageSessionRepository.ts
|
|
4111
|
-
var
|
|
4131
|
+
var logger17 = createLogger("persistence/SessionRepository");
|
|
4112
4132
|
var PREFIX3 = "sessions";
|
|
4113
4133
|
var MESSAGES_PREFIX = "messages";
|
|
4114
4134
|
var INDEX_BY_IMAGE = "idx:sessions:image";
|
|
@@ -4139,7 +4159,7 @@ var StorageSessionRepository = class {
|
|
|
4139
4159
|
this.containerIndexKey(record.containerId, record.sessionId),
|
|
4140
4160
|
record.sessionId
|
|
4141
4161
|
);
|
|
4142
|
-
|
|
4162
|
+
logger17.debug("Session saved", { sessionId: record.sessionId });
|
|
4143
4163
|
}
|
|
4144
4164
|
async findSessionById(sessionId) {
|
|
4145
4165
|
const record = await this.storage.getItem(this.key(sessionId));
|
|
@@ -4188,7 +4208,7 @@ var StorageSessionRepository = class {
|
|
|
4188
4208
|
await this.storage.removeItem(this.imageIndexKey(record.imageId, sessionId));
|
|
4189
4209
|
await this.storage.removeItem(this.containerIndexKey(record.containerId, sessionId));
|
|
4190
4210
|
}
|
|
4191
|
-
|
|
4211
|
+
logger17.debug("Session deleted", { sessionId });
|
|
4192
4212
|
}
|
|
4193
4213
|
async sessionExists(sessionId) {
|
|
4194
4214
|
return await this.storage.hasItem(this.key(sessionId));
|
|
@@ -4198,13 +4218,13 @@ var StorageSessionRepository = class {
|
|
|
4198
4218
|
const messages = await this.getMessages(sessionId);
|
|
4199
4219
|
messages.push(message);
|
|
4200
4220
|
await this.storage.setItem(this.messagesKey(sessionId), messages);
|
|
4201
|
-
|
|
4221
|
+
logger17.debug("Message added to session", { sessionId, subtype: message.subtype });
|
|
4202
4222
|
}
|
|
4203
4223
|
async getMessages(sessionId) {
|
|
4204
4224
|
const messages = await this.storage.getItem(this.messagesKey(sessionId));
|
|
4205
4225
|
if (!messages || !Array.isArray(messages)) {
|
|
4206
4226
|
if (messages) {
|
|
4207
|
-
|
|
4227
|
+
logger17.warn("Messages data is not an array, resetting", {
|
|
4208
4228
|
sessionId,
|
|
4209
4229
|
type: typeof messages
|
|
4210
4230
|
});
|
|
@@ -4215,12 +4235,12 @@ var StorageSessionRepository = class {
|
|
|
4215
4235
|
}
|
|
4216
4236
|
async clearMessages(sessionId) {
|
|
4217
4237
|
await this.storage.removeItem(this.messagesKey(sessionId));
|
|
4218
|
-
|
|
4238
|
+
logger17.debug("Messages cleared for session", { sessionId });
|
|
4219
4239
|
}
|
|
4220
4240
|
};
|
|
4221
4241
|
|
|
4222
4242
|
// src/internal/persistence/PersistenceImpl.ts
|
|
4223
|
-
var
|
|
4243
|
+
var logger18 = createLogger("persistence/Persistence");
|
|
4224
4244
|
var PersistenceImpl = class _PersistenceImpl {
|
|
4225
4245
|
images;
|
|
4226
4246
|
containers;
|
|
@@ -4234,7 +4254,7 @@ var PersistenceImpl = class _PersistenceImpl {
|
|
|
4234
4254
|
this.images = new StorageImageRepository(this.storage);
|
|
4235
4255
|
this.containers = new StorageContainerRepository(this.storage);
|
|
4236
4256
|
this.sessions = new StorageSessionRepository(this.storage);
|
|
4237
|
-
|
|
4257
|
+
logger18.info("Persistence created", { driver: driverName });
|
|
4238
4258
|
}
|
|
4239
4259
|
/**
|
|
4240
4260
|
* Create a PersistenceImpl instance (async factory)
|
|
@@ -4255,7 +4275,7 @@ var PersistenceImpl = class _PersistenceImpl {
|
|
|
4255
4275
|
*/
|
|
4256
4276
|
async dispose() {
|
|
4257
4277
|
await this.storage.dispose();
|
|
4258
|
-
|
|
4278
|
+
logger18.info("Persistence disposed");
|
|
4259
4279
|
}
|
|
4260
4280
|
};
|
|
4261
4281
|
async function createStorageFromConfig(config) {
|