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