neoctl 0.2.45 → 0.2.46
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/context/compaction.d.ts +5 -0
- package/dist/context/compaction.js +4 -3
- package/dist/context/compaction.js.map +1 -1
- package/dist/context/prompts.js +2 -0
- package/dist/context/prompts.js.map +1 -1
- package/dist/core/abortable-stream.d.ts +2 -0
- package/dist/core/abortable-stream.js +35 -0
- package/dist/core/abortable-stream.js.map +1 -0
- package/dist/core/compaction-progress.d.ts +5 -0
- package/dist/core/compaction-progress.js +36 -0
- package/dist/core/compaction-progress.js.map +1 -0
- package/dist/core/execution-state.d.ts +10 -0
- package/dist/core/execution-state.js +18 -0
- package/dist/core/execution-state.js.map +1 -0
- package/dist/core/image-registry.d.ts +4 -2
- package/dist/core/image-registry.js +32 -7
- package/dist/core/image-registry.js.map +1 -1
- package/dist/core/image-storage.js +4 -0
- package/dist/core/image-storage.js.map +1 -1
- package/dist/core/query-engine.d.ts +25 -0
- package/dist/core/query-engine.js +142 -61
- package/dist/core/query-engine.js.map +1 -1
- package/dist/core/query.d.ts +5 -1
- package/dist/core/query.js +35 -20
- package/dist/core/query.js.map +1 -1
- package/dist/core/session-images.d.ts +52 -0
- package/dist/core/session-images.js +395 -0
- package/dist/core/session-images.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/model/openai-mappers.js +0 -2
- package/dist/model/openai-mappers.js.map +1 -1
- package/dist/repl/index.js +2 -0
- package/dist/repl/index.js.map +1 -1
- package/dist/session/session-store.d.ts +9 -0
- package/dist/session/session-store.js +18 -2
- package/dist/session/session-store.js.map +1 -1
- package/dist/tools/builtins/exec-process-manager.d.ts +2 -0
- package/dist/tools/builtins/exec-process-manager.js +24 -1
- package/dist/tools/builtins/exec-process-manager.js.map +1 -1
- package/dist/tools/builtins/framework-feedback-tool.d.ts +26 -0
- package/dist/tools/builtins/framework-feedback-tool.js +97 -0
- package/dist/tools/builtins/framework-feedback-tool.js.map +1 -0
- package/dist/tools/builtins/image-generation-tool.d.ts +2 -0
- package/dist/tools/builtins/image-generation-tool.js +31 -141
- package/dist/tools/builtins/image-generation-tool.js.map +1 -1
- package/dist/tools/builtins/image-loader-tool.d.ts +6 -1
- package/dist/tools/builtins/image-loader-tool.js +48 -26
- package/dist/tools/builtins/image-loader-tool.js.map +1 -1
- package/dist/tools/builtins/image-note-tool.js +2 -2
- package/dist/tools/builtins/image-note-tool.js.map +1 -1
- package/dist/tools/run-tool-use.js +3 -2
- package/dist/tools/run-tool-use.js.map +1 -1
- package/dist/tools/tool-catalog.d.ts +1 -0
- package/dist/tools/tool-catalog.js +2 -0
- package/dist/tools/tool-catalog.js.map +1 -1
- package/dist/tools/tool.d.ts +1 -0
- package/dist/tools/tool.js.map +1 -1
- package/dist/types/messages.d.ts +3 -1
- package/dist/types/messages.js.map +1 -1
- package/dist/web/demo-mode.d.ts +37 -0
- package/dist/web/demo-mode.js +141 -0
- package/dist/web/demo-mode.js.map +1 -0
- package/dist/web/demo-tools.d.ts +37 -0
- package/dist/web/demo-tools.js +259 -0
- package/dist/web/demo-tools.js.map +1 -0
- package/dist/web/demo-video.d.ts +1 -0
- package/dist/web/demo-video.js +3 -0
- package/dist/web/demo-video.js.map +1 -0
- package/dist/web/index.d.ts +43 -2
- package/dist/web/index.js +269 -9
- package/dist/web/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-storage.js","sourceRoot":"","sources":["../../src/core/image-storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"image-storage.js","sourceRoot":"","sources":["../../src/core/image-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ExecutionState } from "./execution-state.js";
|
|
1
2
|
import type { TimingRecord, TimingClock } from "./query-timing.js";
|
|
2
3
|
import { type AppPromptInput, type AppPromptSnapshot, type AppPromptStore } from "../app/app-prompt.js";
|
|
3
4
|
import { type ContextManager } from "../context/context-manager.js";
|
|
@@ -61,15 +62,33 @@ export interface QueryEngineOptions {
|
|
|
61
62
|
toolResultThresholdChars?: number;
|
|
62
63
|
};
|
|
63
64
|
}
|
|
65
|
+
export interface QuerySimulation {
|
|
66
|
+
modelGateway: ModelGateway;
|
|
67
|
+
tools: ToolRegistry;
|
|
68
|
+
compactor: Compactor;
|
|
69
|
+
}
|
|
64
70
|
export declare class QueryEngine {
|
|
65
71
|
private readonly options;
|
|
72
|
+
private simulation?;
|
|
73
|
+
private readonly displayOnlyMessages;
|
|
74
|
+
/** Instance-local execution boundary; never inherited by forkForSession or written to provider settings. */
|
|
75
|
+
setSimulation(simulation: QuerySimulation): void;
|
|
76
|
+
/** Persist a visible message without submitting it to a model or changing an in-flight context. */
|
|
77
|
+
recordDisplayMessage(message: Message): Promise<Message>;
|
|
66
78
|
private readonly agentId;
|
|
67
79
|
private readonly history;
|
|
68
80
|
private readonly titleTimers;
|
|
69
81
|
private lastTerminalReason?;
|
|
82
|
+
private executionState?;
|
|
83
|
+
private executionStartedAt?;
|
|
84
|
+
private executionNow;
|
|
85
|
+
getExecutionState(): ExecutionState | undefined;
|
|
86
|
+
markExecutionPaused(): void;
|
|
87
|
+
private setExecutionState;
|
|
70
88
|
private queryTiming?;
|
|
71
89
|
private readonly timingRecords;
|
|
72
90
|
private sessionStore?;
|
|
91
|
+
private imageStore?;
|
|
73
92
|
private currentModel?;
|
|
74
93
|
private currentReasoning?;
|
|
75
94
|
private currentFastMode;
|
|
@@ -107,6 +126,12 @@ export declare class QueryEngine {
|
|
|
107
126
|
displayText?: string;
|
|
108
127
|
stopAfterTurn?: QueryOptions["stopAfterTurn"];
|
|
109
128
|
}): AsyncGenerator<AgentEvent>;
|
|
129
|
+
/** A UI continuation is a runtime action, not an invented user utterance. */
|
|
130
|
+
continueExecution(options?: {
|
|
131
|
+
abortSignal?: AbortSignal;
|
|
132
|
+
stopAfterTurn?: QueryOptions["stopAfterTurn"];
|
|
133
|
+
}): AsyncGenerator<AgentEvent>;
|
|
134
|
+
private runQuery;
|
|
110
135
|
/** Queue instance-local settings; no prompt messages or provider-global mutation. */
|
|
111
136
|
updateSessionSettings(patch: SessionSettingsPatch): Promise<{
|
|
112
137
|
deferred: boolean;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { performance } from "node:perf_hooks";
|
|
3
|
+
import { executionRecoveryHint, isResumableExecution } from "./execution-state.js";
|
|
2
4
|
import { InMemoryAppState } from "../app/app-state.js";
|
|
3
5
|
import { InMemoryAppPromptStore } from "../app/app-prompt.js";
|
|
4
6
|
import { AppPromptContextManager, DefaultContextManager, readProjectMemoryDocuments } from "../context/context-manager.js";
|
|
@@ -8,7 +10,7 @@ import { ToolRegistry } from "../tools/registry.js";
|
|
|
8
10
|
import { createSystemInitMessage, createTextMessage } from "../types/messages.js";
|
|
9
11
|
import { buildContextMetrics } from "./context-metrics.js";
|
|
10
12
|
import { applyRuntimeContextForPromptCache } from "./message-pipeline.js";
|
|
11
|
-
import {
|
|
13
|
+
import { SessionImageStore } from "./session-images.js";
|
|
12
14
|
import { query } from "./query.js";
|
|
13
15
|
import { runAgent } from "./run-agent.js";
|
|
14
16
|
import { GENERAL_PURPOSE_AGENT } from "../agents/agent-definition.js";
|
|
@@ -19,13 +21,58 @@ import { applySessionPrompt, sessionPromptMode, createSessionPromptSnapshot, par
|
|
|
19
21
|
const DEFAULT_SESSION_TITLE_DELAY_MS = 5000;
|
|
20
22
|
export class QueryEngine {
|
|
21
23
|
options;
|
|
24
|
+
simulation;
|
|
25
|
+
displayOnlyMessages = [];
|
|
26
|
+
/** Instance-local execution boundary; never inherited by forkForSession or written to provider settings. */
|
|
27
|
+
setSimulation(simulation) {
|
|
28
|
+
if (this.running)
|
|
29
|
+
throw new Error("cannot replace execution while a query is running");
|
|
30
|
+
this.cancelPendingTitleWork();
|
|
31
|
+
this.simulation = simulation;
|
|
32
|
+
}
|
|
33
|
+
/** Persist a visible message without submitting it to a model or changing an in-flight context. */
|
|
34
|
+
async recordDisplayMessage(message) {
|
|
35
|
+
await this.initialize();
|
|
36
|
+
const store = this.sessionStore;
|
|
37
|
+
const windowId = store?.snapshot().firstWindowId;
|
|
38
|
+
const stored = await this.imageStore.persistMessage({ ...message, metadata: { ...message.metadata, displayOnly: true } });
|
|
39
|
+
if (store !== this.sessionStore || windowId !== store?.snapshot().firstWindowId)
|
|
40
|
+
throw new Error("Session changed while recording message");
|
|
41
|
+
if (store)
|
|
42
|
+
store.recordMessage(stored);
|
|
43
|
+
else
|
|
44
|
+
this.displayOnlyMessages.push(stored);
|
|
45
|
+
return stored;
|
|
46
|
+
}
|
|
22
47
|
agentId;
|
|
23
48
|
history = [];
|
|
24
49
|
titleTimers = new Set();
|
|
25
50
|
lastTerminalReason;
|
|
51
|
+
executionState;
|
|
52
|
+
executionStartedAt;
|
|
53
|
+
executionNow() {
|
|
54
|
+
return this.options.timingClock?.monotonicNow() ?? performance.now();
|
|
55
|
+
}
|
|
56
|
+
getExecutionState() {
|
|
57
|
+
if (!this.executionState)
|
|
58
|
+
return undefined;
|
|
59
|
+
const elapsedMs = (this.executionState.elapsedMs ?? 0) + (this.executionStartedAt === undefined
|
|
60
|
+
? 0 : Math.max(0, this.executionNow() - this.executionStartedAt));
|
|
61
|
+
return { ...this.executionState, elapsedMs: Math.floor(elapsedMs) };
|
|
62
|
+
}
|
|
63
|
+
markExecutionPaused() {
|
|
64
|
+
this.setExecutionState({ status: "paused", reason: "user_pause" });
|
|
65
|
+
}
|
|
66
|
+
setExecutionState(state) {
|
|
67
|
+
const elapsedMs = state.elapsedMs ?? this.getExecutionState()?.elapsedMs ?? 0;
|
|
68
|
+
this.executionState = { ...state, elapsedMs };
|
|
69
|
+
this.executionStartedAt = state.status === "running" ? this.executionNow() : undefined;
|
|
70
|
+
this.sessionStore?.recordExecutionState(this.executionState);
|
|
71
|
+
}
|
|
26
72
|
queryTiming;
|
|
27
73
|
timingRecords = new Map();
|
|
28
74
|
sessionStore;
|
|
75
|
+
imageStore;
|
|
29
76
|
currentModel;
|
|
30
77
|
currentReasoning;
|
|
31
78
|
currentFastMode = false;
|
|
@@ -103,6 +150,7 @@ export class QueryEngine {
|
|
|
103
150
|
if (this.options.session?.enabled !== false && this.options.session) {
|
|
104
151
|
await this.openSession({ sessionId: this.options.session.sessionId, resume: this.options.session.resume });
|
|
105
152
|
}
|
|
153
|
+
this.imageStore ??= await SessionImageStore.open(undefined, this.agentId);
|
|
106
154
|
this.sessionInitialized = true;
|
|
107
155
|
})();
|
|
108
156
|
this.sessionInitialization = initialization;
|
|
@@ -152,13 +200,35 @@ export class QueryEngine {
|
|
|
152
200
|
rootDir: this.options.session.rootDir,
|
|
153
201
|
});
|
|
154
202
|
}
|
|
155
|
-
|
|
203
|
+
sendUserText(text, options = {}) {
|
|
204
|
+
return this.runQuery(text, options);
|
|
205
|
+
}
|
|
206
|
+
/** A UI continuation is a runtime action, not an invented user utterance. */
|
|
207
|
+
continueExecution(options = {}) {
|
|
208
|
+
return this.runQuery(undefined, options);
|
|
209
|
+
}
|
|
210
|
+
async *runQuery(text, options = {}) {
|
|
156
211
|
if (this.running)
|
|
157
212
|
throw new Error("query engine is already running");
|
|
158
213
|
this.running = true;
|
|
214
|
+
let terminalReceived = false;
|
|
215
|
+
let queryAccepted = text !== undefined;
|
|
159
216
|
try {
|
|
160
217
|
await this.settingsMutation;
|
|
161
218
|
await this.initialize();
|
|
219
|
+
const recovery = isResumableExecution(this.executionState) ? this.executionState : undefined;
|
|
220
|
+
if (text === undefined && !recovery)
|
|
221
|
+
throw new Error("No interrupted execution to continue");
|
|
222
|
+
queryAccepted = true;
|
|
223
|
+
if (recovery) {
|
|
224
|
+
this.pendingRequestContext = { ...this.pendingRequestContext,
|
|
225
|
+
executionRecovery: executionRecoveryHint(recovery),
|
|
226
|
+
...(text === undefined ? { continuationAction: "用户点击了继续按钮,请继续尚未完成的任务。这是运行时动作,不是用户发送的新消息。" } : {}),
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
const elapsedMs = recovery?.elapsedMs ?? 0;
|
|
230
|
+
this.setExecutionState(options.abortSignal?.aborted
|
|
231
|
+
? { status: "paused", reason: "user_pause", elapsedMs } : { status: "running", elapsedMs });
|
|
162
232
|
const cwdTransitionPaths = this.pendingCwdTransitionPaths;
|
|
163
233
|
const pendingRequestContext = this.pendingRequestContext;
|
|
164
234
|
const pendingRequestContextConsumed = this.pendingRequestContextConsumed;
|
|
@@ -166,18 +236,20 @@ export class QueryEngine {
|
|
|
166
236
|
this.options.cwdTransitionPaths = undefined;
|
|
167
237
|
if (cwdTransitionPaths?.length)
|
|
168
238
|
void this.options.onCwdTransitionConsumed?.();
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
239
|
+
if (text !== undefined) {
|
|
240
|
+
const userMessage = options.blocks
|
|
241
|
+
? await this.persistMessageImages({
|
|
242
|
+
...createTextMessage("user", options.displayText ?? text),
|
|
243
|
+
blocks: options.blocks,
|
|
244
|
+
})
|
|
245
|
+
: createTextMessage("user", text);
|
|
246
|
+
this.history.push(userMessage);
|
|
247
|
+
this.sessionStore?.recordMessage(userMessage);
|
|
248
|
+
this.scheduleSessionTitleCheck();
|
|
249
|
+
}
|
|
178
250
|
const initMessage = createSystemInitMessage({
|
|
179
251
|
agentId: this.agentId,
|
|
180
|
-
tools: this.options.tools.names(),
|
|
252
|
+
tools: (this.simulation?.tools ?? this.options.tools).names(),
|
|
181
253
|
model: this.currentModel,
|
|
182
254
|
commands: [...(this.options.commands ?? [])],
|
|
183
255
|
agents: [...(this.options.agents ?? [])],
|
|
@@ -220,22 +292,26 @@ export class QueryEngine {
|
|
|
220
292
|
} : undefined,
|
|
221
293
|
abortSignal: options.abortSignal,
|
|
222
294
|
stopAfterTurn: options.stopAfterTurn,
|
|
223
|
-
beforeTurn: (messages) => {
|
|
224
|
-
this.
|
|
225
|
-
|
|
295
|
+
beforeTurn: (messages, started) => {
|
|
296
|
+
if (!this.simulation)
|
|
297
|
+
this.options.refreshTools?.(this);
|
|
298
|
+
return this.consumeSessionSettings(messages, started);
|
|
226
299
|
},
|
|
227
300
|
};
|
|
228
301
|
const stream = query(this.history, {
|
|
229
302
|
...this.options,
|
|
230
|
-
acquireTurnResources: this.options.acquireTurnResources ? () => this.options.acquireTurnResources(this) : undefined,
|
|
303
|
+
acquireTurnResources: this.simulation ? undefined : this.options.acquireTurnResources ? () => this.options.acquireTurnResources(this) : undefined,
|
|
304
|
+
tools: this.simulation?.tools ?? this.options.tools,
|
|
305
|
+
compactor: this.simulation?.compactor ?? this.options.compactor,
|
|
231
306
|
onTimingState: timing => { this.queryTiming = timing; },
|
|
232
307
|
onTiming: record => {
|
|
233
308
|
this.timingRecords.set(record.id, { ...record });
|
|
234
309
|
this.sessionStore?.recordTiming(record);
|
|
235
310
|
},
|
|
236
311
|
contextManager: this.contextManager,
|
|
237
|
-
modelGateway: this.currentModelGateway,
|
|
312
|
+
modelGateway: this.simulation?.modelGateway ?? this.currentModelGateway,
|
|
238
313
|
taskNotificationSource: this.options.taskNotificationSource,
|
|
314
|
+
imageStore: this.imageStore,
|
|
239
315
|
toolResultMemory: this.sessionStore?.toolResultMemory,
|
|
240
316
|
session: this.sessionStore ? { sessionId: this.sessionStore.sessionId, sessionDir: this.sessionStore.sessionDir, rootDir: this.options.session?.rootDir } : undefined,
|
|
241
317
|
recordContentReplacements: (records) => this.sessionStore?.recordContentReplacements(records),
|
|
@@ -253,13 +329,17 @@ export class QueryEngine {
|
|
|
253
329
|
continue;
|
|
254
330
|
}
|
|
255
331
|
if (event.type === "terminal") {
|
|
332
|
+
terminalReceived = true;
|
|
256
333
|
this.lastTerminalReason = event.reason;
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
334
|
+
if (this.executionState?.status !== "paused") {
|
|
335
|
+
this.setExecutionState({
|
|
336
|
+
status: event.reason === "completed" || event.reason === "turn_yielded" ? "completed" : "interrupted",
|
|
337
|
+
reason: event.reason,
|
|
338
|
+
});
|
|
262
339
|
}
|
|
340
|
+
// Settle ordinary settings only; pending compact waits for the next model call.
|
|
341
|
+
const hadPending = Object.keys(this.pendingSessionSettings).length > 0;
|
|
342
|
+
await this.flushSessionSettings();
|
|
263
343
|
if (hadPending)
|
|
264
344
|
yield { type: "context.metrics", metrics: await this.contextMetrics() };
|
|
265
345
|
}
|
|
@@ -267,12 +347,12 @@ export class QueryEngine {
|
|
|
267
347
|
}
|
|
268
348
|
}
|
|
269
349
|
finally {
|
|
270
|
-
//
|
|
271
|
-
// Do not yield in finally: a closing consumer may never resume the generator.
|
|
350
|
+
// Even a failed journal write must release the engine run lock.
|
|
272
351
|
try {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
352
|
+
if (queryAccepted && !terminalReceived && this.executionState?.status !== "paused") {
|
|
353
|
+
this.setExecutionState({ status: "interrupted", reason: "unexpected_termination" });
|
|
354
|
+
}
|
|
355
|
+
await this.flushSessionSettings();
|
|
276
356
|
}
|
|
277
357
|
finally {
|
|
278
358
|
this.running = false;
|
|
@@ -302,6 +382,8 @@ export class QueryEngine {
|
|
|
302
382
|
}
|
|
303
383
|
const mutation = this.settingsMutation.then(async () => {
|
|
304
384
|
await this.initialize();
|
|
385
|
+
if (normalized.compact)
|
|
386
|
+
delete this.pendingSessionSettings.compact;
|
|
305
387
|
const update = await this.applySessionSettings(normalized, this.getHistoryMessages());
|
|
306
388
|
if (update?.compaction)
|
|
307
389
|
this.applyCompactionResult(update.compaction);
|
|
@@ -357,14 +439,14 @@ export class QueryEngine {
|
|
|
357
439
|
patch.sessionPrompt = { ...patch.sessionPrompt };
|
|
358
440
|
return patch;
|
|
359
441
|
}
|
|
360
|
-
async consumeSessionSettings(messages) {
|
|
442
|
+
async consumeSessionSettings(messages, started) {
|
|
361
443
|
const patch = this.pendingSessionSettings;
|
|
362
444
|
if (!Object.keys(patch).length)
|
|
363
445
|
return undefined;
|
|
364
446
|
this.pendingSessionSettings = {};
|
|
365
|
-
return this.applySessionSettings(patch, messages);
|
|
447
|
+
return this.applySessionSettings(patch, messages, started);
|
|
366
448
|
}
|
|
367
|
-
async applySessionSettings(patch, messages) {
|
|
449
|
+
async applySessionSettings(patch, messages, started) {
|
|
368
450
|
const changed = {};
|
|
369
451
|
if (Object.hasOwn(patch, "sessionPrompt"))
|
|
370
452
|
this.activeSessionPrompt = patch.sessionPrompt ?? null;
|
|
@@ -388,23 +470,21 @@ export class QueryEngine {
|
|
|
388
470
|
}
|
|
389
471
|
let compaction;
|
|
390
472
|
if (patch.compact) {
|
|
391
|
-
|
|
392
|
-
const
|
|
473
|
+
started?.("manualcompact");
|
|
474
|
+
const compactor = this.simulation?.compactor ?? this.options.compactor ?? new ModelDrivenCompactor(this.currentModelGateway);
|
|
475
|
+
const budget = { ...this.options.contextBudget, imageRegistry: this.imageStore?.snapshot(), contextWindowTokens: this.currentContextWindowTokens ?? this.options.contextBudget?.contextWindowTokens };
|
|
393
476
|
compaction = withCompactionReport(await (compactor.manualCompact?.(messages, budget) ?? compactor.compact(messages, budget)), messages.length);
|
|
394
477
|
}
|
|
395
478
|
return Object.keys(changed).length || compaction ? { settings: changed, compaction } : undefined;
|
|
396
479
|
}
|
|
397
480
|
async flushSessionSettings() {
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
results.push(update.compaction);
|
|
405
|
-
}
|
|
481
|
+
// Ordinary settings can settle at the terminal boundary. A busy compact request
|
|
482
|
+
// must wait for the next model call, including when the current query ends/aborts.
|
|
483
|
+
while (Object.keys(this.pendingSessionSettings).some(key => key !== "compact")) {
|
|
484
|
+
const { compact, ...patch } = this.pendingSessionSettings;
|
|
485
|
+
this.pendingSessionSettings = compact ? { compact: true } : {};
|
|
486
|
+
await this.applySessionSettings(patch, this.getHistoryMessages());
|
|
406
487
|
}
|
|
407
|
-
return results;
|
|
408
488
|
}
|
|
409
489
|
setModel(model, reasoning, updateReasoning = false) {
|
|
410
490
|
this.currentModel = model?.trim() || undefined;
|
|
@@ -464,9 +544,13 @@ export class QueryEngine {
|
|
|
464
544
|
reset() {
|
|
465
545
|
if (this.running)
|
|
466
546
|
throw new Error("cannot reset while query engine is running");
|
|
547
|
+
this.simulation = undefined;
|
|
548
|
+
this.displayOnlyMessages.length = 0;
|
|
467
549
|
this.pendingSessionSettings = {};
|
|
468
550
|
this.history.length = 0;
|
|
469
551
|
this.lastTerminalReason = undefined;
|
|
552
|
+
this.executionState = undefined;
|
|
553
|
+
this.executionStartedAt = undefined;
|
|
470
554
|
this.cancelPendingTitleWork();
|
|
471
555
|
this.sessionStore?.reset();
|
|
472
556
|
this.queryTiming = undefined;
|
|
@@ -483,9 +567,10 @@ export class QueryEngine {
|
|
|
483
567
|
await this.initialize();
|
|
484
568
|
if (options.abortSignal?.aborted)
|
|
485
569
|
return { messages: this.getHistoryMessages(), changed: false, reason: "none" };
|
|
486
|
-
const compactor = this.options.compactor ?? new ModelDrivenCompactor(this.currentModelGateway);
|
|
570
|
+
const compactor = this.simulation?.compactor ?? this.options.compactor ?? new ModelDrivenCompactor(this.currentModelGateway);
|
|
487
571
|
const contextBudget = {
|
|
488
572
|
...this.options.contextBudget,
|
|
573
|
+
imageRegistry: this.imageStore?.snapshot(),
|
|
489
574
|
contextWindowTokens: this.currentContextWindowTokens ?? this.options.contextBudget?.contextWindowTokens,
|
|
490
575
|
};
|
|
491
576
|
const result = withCompactionReport(await (compactor.pureCompact?.(this.history, contextBudget) ?? { messages: this.getHistoryMessages(), changed: false, reason: "none" }), this.history.length);
|
|
@@ -521,7 +606,7 @@ export class QueryEngine {
|
|
|
521
606
|
return [...records.values()].map(record => ({ ...record }));
|
|
522
607
|
}
|
|
523
608
|
getDisplayEntries() {
|
|
524
|
-
return this.sessionStore?.getDisplayEntries() ?? this.history.map((message) => ({ type: "message", message: cloneMessage(message) }));
|
|
609
|
+
return this.sessionStore?.getDisplayEntries() ?? [...this.history, ...this.displayOnlyMessages].map((message) => ({ type: "message", message: cloneMessage(message) }));
|
|
525
610
|
}
|
|
526
611
|
applyCompactionResult(result) {
|
|
527
612
|
if (!result.changed)
|
|
@@ -559,14 +644,14 @@ export class QueryEngine {
|
|
|
559
644
|
return this.buildPromptExportSnapshot(this.getHistoryMessages());
|
|
560
645
|
}
|
|
561
646
|
refreshToolsIfIdle() {
|
|
562
|
-
if (!this.running)
|
|
647
|
+
if (!this.running && !this.simulation)
|
|
563
648
|
this.options.refreshTools?.(this);
|
|
564
649
|
}
|
|
565
650
|
async buildPromptExportSnapshot(messages, desiredState = this.sessionPromptState) {
|
|
566
651
|
this.refreshToolsIfIdle();
|
|
567
652
|
const toolContext = {
|
|
568
653
|
agentId: this.agentId,
|
|
569
|
-
tools: this.options.tools,
|
|
654
|
+
tools: this.simulation?.tools ?? this.options.tools,
|
|
570
655
|
appState: new InMemoryAppState(this.agentId, this.options.cwd),
|
|
571
656
|
toolResultMemory: this.sessionStore?.toolResultMemory,
|
|
572
657
|
session: this.sessionStore ? {
|
|
@@ -585,7 +670,7 @@ export class QueryEngine {
|
|
|
585
670
|
},
|
|
586
671
|
emit: () => undefined,
|
|
587
672
|
};
|
|
588
|
-
const initialToolDefinitions = this.options.tools.definitions(toolContext);
|
|
673
|
+
const initialToolDefinitions = (this.simulation?.tools ?? this.options.tools).definitions(toolContext);
|
|
589
674
|
const activePrompt = this.activeSessionPrompt;
|
|
590
675
|
const baseline = await this.baselineContextManager.build({
|
|
591
676
|
agentId: this.agentId,
|
|
@@ -630,24 +715,15 @@ export class QueryEngine {
|
|
|
630
715
|
};
|
|
631
716
|
}
|
|
632
717
|
async persistMessageImages(message) {
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
const persistedBlocks = await persistMessageImages(message.blocks, { sessionDir: this.sessionStore?.sessionDir, agentId: this.agentId });
|
|
636
|
-
const hasRetention = typeof message.metadata?.imageRetention === "string";
|
|
637
|
-
return {
|
|
638
|
-
...message,
|
|
639
|
-
blocks: persistedBlocks,
|
|
640
|
-
metadata: message.role === "user"
|
|
641
|
-
? { ...message.metadata, imageRetention: "pinned", imageTtlTurns: undefined }
|
|
642
|
-
: hasRetention
|
|
643
|
-
? message.metadata
|
|
644
|
-
: { ...message.metadata, imageRetention: "while_relevant", imageTtlTurns: 4 },
|
|
645
|
-
};
|
|
718
|
+
this.imageStore ??= await SessionImageStore.open(this.sessionStore?.sessionDir, this.agentId);
|
|
719
|
+
return this.imageStore.persistMessage(message);
|
|
646
720
|
}
|
|
647
721
|
async openSession(options) {
|
|
648
722
|
if (this.options.session?.enabled === false || !this.options.session)
|
|
649
723
|
return;
|
|
650
724
|
this.cancelPendingTitleWork();
|
|
725
|
+
this.simulation = undefined;
|
|
726
|
+
this.displayOnlyMessages.length = 0;
|
|
651
727
|
this.sessionStore = await SessionStore.open({
|
|
652
728
|
agentId: this.agentId,
|
|
653
729
|
cwd: this.options.cwd ?? process.cwd(),
|
|
@@ -656,6 +732,11 @@ export class QueryEngine {
|
|
|
656
732
|
resume: options.resume,
|
|
657
733
|
toolResultThresholdChars: this.options.session.toolResultThresholdChars,
|
|
658
734
|
});
|
|
735
|
+
this.imageStore = await SessionImageStore.open(this.sessionStore.sessionDir, this.agentId);
|
|
736
|
+
const execution = this.sessionStore.getExecutionState();
|
|
737
|
+
this.executionState = execution?.status === "running"
|
|
738
|
+
? { ...execution, status: "interrupted", reason: "runtime_terminated" } : execution;
|
|
739
|
+
this.executionStartedAt = undefined;
|
|
659
740
|
this.pendingSessionSettings = {};
|
|
660
741
|
this.sessionPromptState = this.sessionStore.getSessionPrompt();
|
|
661
742
|
this.activeSessionPrompt = this.sessionPromptState ?? null;
|
|
@@ -674,7 +755,7 @@ export class QueryEngine {
|
|
|
674
755
|
}
|
|
675
756
|
scheduleSessionTitleCheck() {
|
|
676
757
|
const store = this.sessionStore;
|
|
677
|
-
if (!store || titleWorkComplete(store))
|
|
758
|
+
if (this.simulation || !store || titleWorkComplete(store))
|
|
678
759
|
return;
|
|
679
760
|
const version = this.titleSchedulerVersion;
|
|
680
761
|
const timer = setTimeout(() => {
|
|
@@ -689,7 +770,7 @@ export class QueryEngine {
|
|
|
689
770
|
if (version !== this.titleSchedulerVersion)
|
|
690
771
|
return;
|
|
691
772
|
const store = this.sessionStore;
|
|
692
|
-
if (!store || titleWorkComplete(store))
|
|
773
|
+
if (this.simulation || !store || titleWorkComplete(store))
|
|
693
774
|
return;
|
|
694
775
|
if (this.titleAgentRun?.version === version)
|
|
695
776
|
return;
|