neoctl 0.2.36 → 0.2.38
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/agents/agent-definition.d.ts +2 -0
- package/dist/agents/agent-definition.js +10 -0
- package/dist/agents/agent-definition.js.map +1 -1
- package/dist/agents/agent-report-security.test.d.ts +1 -0
- package/dist/agents/agent-report-security.test.js +301 -0
- package/dist/agents/agent-report-security.test.js.map +1 -0
- package/dist/agents/agent-tool-persistence.test.js +9 -3
- package/dist/agents/agent-tool-persistence.test.js.map +1 -1
- package/dist/agents/agent-tool.d.ts +3 -0
- package/dist/agents/agent-tool.js +131 -34
- package/dist/agents/agent-tool.js.map +1 -1
- package/dist/agents/coordination-boundary.test.d.ts +1 -0
- package/dist/agents/coordination-boundary.test.js +58 -0
- package/dist/agents/coordination-boundary.test.js.map +1 -0
- package/dist/agents/live-preview-redaction-security.test.d.ts +1 -0
- package/dist/agents/live-preview-redaction-security.test.js +286 -0
- package/dist/agents/live-preview-redaction-security.test.js.map +1 -0
- package/dist/agents/local-agent-task.d.ts +27 -1
- package/dist/agents/local-agent-task.js +75 -5
- package/dist/agents/local-agent-task.js.map +1 -1
- package/dist/agents/obs07-11-run-facts.test.d.ts +1 -0
- package/dist/agents/obs07-11-run-facts.test.js +459 -0
- package/dist/agents/obs07-11-run-facts.test.js.map +1 -0
- package/dist/agents/smoke-agent-lifecycle.js +8 -4
- package/dist/agents/smoke-agent-lifecycle.js.map +1 -1
- package/dist/agents/smoke-agents.js +7 -3
- package/dist/agents/smoke-agents.js.map +1 -1
- package/dist/context/context-manager.d.ts +5 -0
- package/dist/context/context-manager.js +14 -7
- package/dist/context/context-manager.js.map +1 -1
- package/dist/context/prompt-config.d.ts +35 -0
- package/dist/context/prompt-config.js +151 -0
- package/dist/context/prompt-config.js.map +1 -0
- package/dist/context/prompt-config.test.d.ts +1 -0
- package/dist/context/prompt-config.test.js +124 -0
- package/dist/context/prompt-config.test.js.map +1 -0
- package/dist/context/prompts.d.ts +1 -1
- package/dist/context/prompts.js +4 -27
- package/dist/context/prompts.js.map +1 -1
- package/dist/context/smoke-context.js +49 -4
- package/dist/context/smoke-context.js.map +1 -1
- package/dist/context/system.md +16 -0
- package/dist/core/image-registry.js +1 -1
- package/dist/core/image-registry.js.map +1 -1
- package/dist/core/obs04-visible-data.test.d.ts +1 -0
- package/dist/core/obs04-visible-data.test.js +147 -0
- package/dist/core/obs04-visible-data.test.js.map +1 -0
- package/dist/core/query-engine.d.ts +32 -1
- package/dist/core/query-engine.js +320 -95
- package/dist/core/query-engine.js.map +1 -1
- package/dist/core/query-session-settings.test.d.ts +1 -0
- package/dist/core/query-session-settings.test.js +252 -0
- package/dist/core/query-session-settings.test.js.map +1 -0
- package/dist/core/query.d.ts +18 -0
- package/dist/core/query.js +134 -15
- package/dist/core/query.js.map +1 -1
- package/dist/core/run-agent.d.ts +2 -0
- package/dist/core/run-agent.js +23 -15
- package/dist/core/run-agent.js.map +1 -1
- package/dist/core/session-settings-prompt.d.ts +35 -0
- package/dist/core/session-settings-prompt.js +61 -0
- package/dist/core/session-settings-prompt.js.map +1 -0
- package/dist/core/session-settings-prompt.test.d.ts +1 -0
- package/dist/core/session-settings-prompt.test.js +257 -0
- package/dist/core/session-settings-prompt.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/model/model-gateway.d.ts +1 -0
- package/dist/model/model-metadata.json +97 -99
- package/dist/model/openai-native-image-guard.test.d.ts +1 -0
- package/dist/model/openai-native-image-guard.test.js +101 -0
- package/dist/model/openai-native-image-guard.test.js.map +1 -0
- package/dist/model/openai-responses-instructions.test.d.ts +1 -0
- package/dist/model/openai-responses-instructions.test.js +64 -0
- package/dist/model/openai-responses-instructions.test.js.map +1 -0
- package/dist/model/openai-responses-mapper.js +96 -32
- package/dist/model/openai-responses-mapper.js.map +1 -1
- package/dist/model/smoke-responses-mapper.js +8 -5
- package/dist/model/smoke-responses-mapper.js.map +1 -1
- package/dist/plugins/smoke-plugin-system.js +14 -14
- package/dist/repl/index.js +2 -2
- package/dist/repl/index.js.map +1 -1
- package/dist/secrets/secret-redaction.d.ts +6 -5
- package/dist/secrets/secret-redaction.js +7 -79
- package/dist/secrets/secret-redaction.js.map +1 -1
- package/dist/secrets/secret-types.d.ts +4 -1
- package/dist/secrets/secret-types.js.map +1 -1
- package/dist/session/session-export.d.ts +6 -0
- package/dist/session/session-export.js.map +1 -1
- package/dist/session/session-store.d.ts +15 -1
- package/dist/session/session-store.js +30 -2
- package/dist/session/session-store.js.map +1 -1
- package/dist/tasks/subagent-tools.test.js +1 -0
- package/dist/tasks/subagent-tools.test.js.map +1 -1
- package/dist/tasks/task-ack-size.test.js +6 -5
- package/dist/tasks/task-ack-size.test.js.map +1 -1
- package/dist/tasks/task-persistence.d.ts +1 -0
- package/dist/tasks/task-persistence.js +31 -9
- package/dist/tasks/task-persistence.js.map +1 -1
- package/dist/tasks/task-store.d.ts +6 -4
- package/dist/tasks/task-store.js +46 -20
- package/dist/tasks/task-store.js.map +1 -1
- package/dist/tools/builtins/exec-process-manager.d.ts +97 -2
- package/dist/tools/builtins/exec-process-manager.js +221 -19
- package/dist/tools/builtins/exec-process-manager.js.map +1 -1
- package/dist/tools/builtins/exec-tool.js +14 -1
- package/dist/tools/builtins/exec-tool.js.map +1 -1
- package/dist/tools/builtins/image-generation-tool.js +24 -24
- package/dist/tools/builtins/image-generation-tool.js.map +1 -1
- package/dist/tools/smoke-exec-process.js +2 -1
- package/dist/tools/smoke-exec-process.js.map +1 -1
- package/dist/tools/smoke-terminal-output-chain.d.ts +1 -0
- package/dist/tools/smoke-terminal-output-chain.js +245 -0
- package/dist/tools/smoke-terminal-output-chain.js.map +1 -0
- package/dist/tools/smoke-tool-system.js +6 -6
- package/dist/tools/smoke-tool-system.js.map +1 -1
- package/dist/tools/terminal-background-history.test.d.ts +1 -0
- package/dist/tools/terminal-background-history.test.js +77 -0
- package/dist/tools/terminal-background-history.test.js.map +1 -0
- package/dist/tools/terminal-output-persistence.test.d.ts +1 -0
- package/dist/tools/terminal-output-persistence.test.js +50 -0
- package/dist/tools/terminal-output-persistence.test.js.map +1 -0
- package/dist/tools/terminal-output-store.d.ts +154 -0
- package/dist/tools/terminal-output-store.js +580 -0
- package/dist/tools/terminal-output-store.js.map +1 -0
- package/dist/tools/terminal-output-store.test.d.ts +1 -0
- package/dist/tools/terminal-output-store.test.js +364 -0
- package/dist/tools/terminal-output-store.test.js.map +1 -0
- package/dist/types/events.d.ts +1 -0
- package/dist/types/messages.d.ts +1 -0
- package/dist/web/agent-content-detail.d.ts +78 -0
- package/dist/web/agent-content-detail.js +495 -0
- package/dist/web/agent-content-detail.js.map +1 -0
- package/dist/web/agent-content-detail.test.d.ts +1 -0
- package/dist/web/agent-content-detail.test.js +307 -0
- package/dist/web/agent-content-detail.test.js.map +1 -0
- package/dist/web/agent-parent-messages.test.d.ts +1 -0
- package/dist/web/agent-parent-messages.test.js +58 -0
- package/dist/web/agent-parent-messages.test.js.map +1 -0
- package/dist/web/agent-tool-payload-security.test.d.ts +1 -0
- package/dist/web/agent-tool-payload-security.test.js +120 -0
- package/dist/web/agent-tool-payload-security.test.js.map +1 -0
- package/dist/web/index.d.ts +136 -4
- package/dist/web/index.js +303 -78
- package/dist/web/index.js.map +1 -1
- package/dist/web/prompt-config-protocol.d.ts +4 -0
- package/dist/web/prompt-config-protocol.js +57 -0
- package/dist/web/prompt-config-protocol.js.map +1 -0
- package/dist/web/prompt-config-protocol.test.d.ts +1 -0
- package/dist/web/prompt-config-protocol.test.js +78 -0
- package/dist/web/prompt-config-protocol.test.js.map +1 -0
- package/dist/web/runtime-context-protocol.d.ts +1 -0
- package/dist/web/runtime-context-protocol.js +1 -0
- package/dist/web/runtime-context-protocol.js.map +1 -1
- package/dist/web/session-prompt-integration.test.d.ts +1 -0
- package/dist/web/session-prompt-integration.test.js +57 -0
- package/dist/web/session-prompt-integration.test.js.map +1 -0
- package/dist/web/session-prompt-protocol.d.ts +8 -0
- package/dist/web/session-prompt-protocol.js +11 -0
- package/dist/web/session-prompt-protocol.js.map +1 -0
- package/dist/web/session-settings.test.d.ts +1 -0
- package/dist/web/session-settings.test.js +254 -0
- package/dist/web/session-settings.test.js.map +1 -0
- package/dist/web/smoke-agent-content-http.d.ts +1 -0
- package/dist/web/smoke-agent-content-http.js +446 -0
- package/dist/web/smoke-agent-content-http.js.map +1 -0
- package/dist/web/smoke-status-semantics.d.ts +1 -0
- package/dist/web/smoke-status-semantics.js +90 -0
- package/dist/web/smoke-status-semantics.js.map +1 -0
- package/dist/web/smoke-task-session-entrypoints.js +22 -1
- package/dist/web/smoke-task-session-entrypoints.js.map +1 -1
- package/dist/web/smoke-terminal-output-http.d.ts +1 -0
- package/dist/web/smoke-terminal-output-http.js +377 -0
- package/dist/web/smoke-terminal-output-http.js.map +1 -0
- package/dist/web/smoke-tool-call-detail.d.ts +1 -0
- package/dist/web/smoke-tool-call-detail.js +106 -0
- package/dist/web/smoke-tool-call-detail.js.map +1 -0
- package/dist/web/smoke-tool-call-http.d.ts +1 -0
- package/dist/web/smoke-tool-call-http.js +100 -0
- package/dist/web/smoke-tool-call-http.js.map +1 -0
- package/dist/web/smoke-tool-detail-fields-http.d.ts +1 -0
- package/dist/web/smoke-tool-detail-fields-http.js +121 -0
- package/dist/web/smoke-tool-detail-fields-http.js.map +1 -0
- package/dist/web/smoke-web-terminal-tasks.js +223 -76
- package/dist/web/smoke-web-terminal-tasks.js.map +1 -1
- package/dist/web/status-semantics.d.ts +11 -0
- package/dist/web/status-semantics.js +59 -0
- package/dist/web/status-semantics.js.map +1 -0
- package/dist/web/terminal-presentation.d.ts +15 -0
- package/dist/web/terminal-presentation.js +61 -0
- package/dist/web/terminal-presentation.js.map +1 -0
- package/dist/web/terminal-presentation.test.d.ts +1 -0
- package/dist/web/terminal-presentation.test.js +33 -0
- package/dist/web/terminal-presentation.test.js.map +1 -0
- package/dist/web/tool-call-detail.d.ts +40 -0
- package/dist/web/tool-call-detail.js +167 -0
- package/dist/web/tool-call-detail.js.map +1 -0
- package/dist/web/tool-detail-fields.d.ts +59 -0
- package/dist/web/tool-detail-fields.js +119 -0
- package/dist/web/tool-detail-fields.js.map +1 -0
- package/dist/web/tool-detail-fields.test.d.ts +1 -0
- package/dist/web/tool-detail-fields.test.js +121 -0
- package/dist/web/tool-detail-fields.test.js.map +1 -0
- package/docs/prompt-config.md +71 -0
- package/package.json +94 -93
- package/scripts/build-standalone.mjs +3 -0
- package/scripts/copy-prompt-resources.mjs +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obs04-visible-data.test.js","sourceRoot":"","sources":["../../src/core/obs04-visible-data.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,17 @@ import type { CompactionResult, Compactor, ContextBudgetOptions } from "../conte
|
|
|
5
5
|
import type { ModelGateway, ReasoningConfig } from "../model/model-gateway.js";
|
|
6
6
|
import { ToolRegistry } from "../tools/registry.js";
|
|
7
7
|
import type { CanUseTool, ToolUseContext } from "../tools/tool.js";
|
|
8
|
-
import type { QueryOptions, TaskNotificationSource } from "./query.js";
|
|
8
|
+
import type { QueryOptions, SessionSettingsPatch, TaskNotificationSource } from "./query.js";
|
|
9
9
|
import type { AgentEvent, ContextMetrics } from "../types/events.js";
|
|
10
10
|
import type { Message, MessageBlock } from "../types/messages.js";
|
|
11
11
|
import type { TerminalReason } from "./state.js";
|
|
12
12
|
import { type SessionDisplayEntry, type SessionStoreSnapshot, type SessionSummary } from "../session/session-store.js";
|
|
13
13
|
import type { SessionPromptExportSnapshot } from "../session/session-export.js";
|
|
14
|
+
import { type SessionPromptSnapshot, type SessionPromptUpdate, type SessionPromptUpdateResult } from "./session-settings-prompt.js";
|
|
15
|
+
type PendingSessionSettings = SessionSettingsPatch & {
|
|
16
|
+
sessionPrompt?: string | null;
|
|
17
|
+
};
|
|
18
|
+
export type { SessionSettingsPatch } from "./query.js";
|
|
14
19
|
export interface QueryEngineOptions {
|
|
15
20
|
agentId?: string;
|
|
16
21
|
cwd?: string;
|
|
@@ -61,19 +66,30 @@ export declare class QueryEngine {
|
|
|
61
66
|
private currentModel?;
|
|
62
67
|
private currentReasoning?;
|
|
63
68
|
private currentFastMode;
|
|
69
|
+
private running;
|
|
70
|
+
private pendingSessionSettings;
|
|
71
|
+
private sessionPromptState?;
|
|
72
|
+
private activeSessionPrompt;
|
|
73
|
+
private readonly ephemeralSessionKey;
|
|
74
|
+
private settingsMutation;
|
|
64
75
|
private currentContextWindowTokens?;
|
|
65
76
|
private currentModelGateway;
|
|
66
77
|
private sessionInitialized;
|
|
78
|
+
private sessionInitialization?;
|
|
67
79
|
private titleSchedulerVersion;
|
|
68
80
|
private titleAgentRun?;
|
|
69
81
|
private readonly sessionTitleListeners;
|
|
70
82
|
private readonly appPromptStore;
|
|
71
83
|
private readonly contextManager;
|
|
84
|
+
private readonly baselineContextManager;
|
|
72
85
|
private readonly additionalPromptContextManager;
|
|
73
86
|
private pendingCwdTransitionPaths?;
|
|
87
|
+
private pendingRequestContext?;
|
|
88
|
+
private pendingRequestContextConsumed?;
|
|
74
89
|
constructor(options: QueryEngineOptions);
|
|
75
90
|
forkForSession(sessionId?: string, resume?: boolean): QueryEngine;
|
|
76
91
|
onSessionTitleChange(listener: (snapshot: SessionStoreSnapshot | undefined) => void): () => void;
|
|
92
|
+
noteRecoverableSubagents(onConsumed?: () => void): void;
|
|
77
93
|
initialize(): Promise<void>;
|
|
78
94
|
newSession(): Promise<SessionStoreSnapshot>;
|
|
79
95
|
listSessions(limit?: number): Promise<SessionSummary[]>;
|
|
@@ -84,6 +100,19 @@ export declare class QueryEngine {
|
|
|
84
100
|
displayText?: string;
|
|
85
101
|
stopAfterTurn?: QueryOptions["stopAfterTurn"];
|
|
86
102
|
}): AsyncGenerator<AgentEvent>;
|
|
103
|
+
/** Queue instance-local settings; no prompt messages or provider-global mutation. */
|
|
104
|
+
updateSessionSettings(patch: SessionSettingsPatch): Promise<{
|
|
105
|
+
deferred: boolean;
|
|
106
|
+
compaction?: CompactionResult;
|
|
107
|
+
}>;
|
|
108
|
+
/** Editor state includes accepted queued changes; runtime exports still describe the active turn. */
|
|
109
|
+
getSessionPrompt(): Promise<SessionPromptSnapshot>;
|
|
110
|
+
updateSessionPrompt(input: SessionPromptUpdate): Promise<SessionPromptUpdateResult>;
|
|
111
|
+
private sessionPromptKey;
|
|
112
|
+
getPendingSessionSettings(): PendingSessionSettings;
|
|
113
|
+
private consumeSessionSettings;
|
|
114
|
+
private applySessionSettings;
|
|
115
|
+
private flushSessionSettings;
|
|
87
116
|
setModel(model: string | undefined, reasoning?: ReasoningConfig | null, updateReasoning?: boolean): void;
|
|
88
117
|
setModelProvider(settings: {
|
|
89
118
|
modelGateway: ModelGateway;
|
|
@@ -120,6 +149,8 @@ export declare class QueryEngine {
|
|
|
120
149
|
session?: SessionStoreSnapshot;
|
|
121
150
|
};
|
|
122
151
|
getHistoryMessages(): Message[];
|
|
152
|
+
/** User-facing read-only detail boundaries must also redact secrets registered at runtime. */
|
|
153
|
+
redactDisplayValue<T>(value: T): T;
|
|
123
154
|
getDisplayEntries(): SessionDisplayEntry[];
|
|
124
155
|
private applyCompactionResult;
|
|
125
156
|
contextMetrics(): Promise<ContextMetrics>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
1
2
|
import { InMemoryAppState } from "../app/app-state.js";
|
|
2
3
|
import { InMemoryAppPromptStore } from "../app/app-prompt.js";
|
|
3
4
|
import { AppPromptContextManager, DefaultContextManager, readProjectMemoryDocuments } from "../context/context-manager.js";
|
|
@@ -14,6 +15,7 @@ import { GENERAL_PURPOSE_AGENT } from "../agents/agent-definition.js";
|
|
|
14
15
|
import { SessionStore } from "../session/session-store.js";
|
|
15
16
|
import { buildPromptCacheDiagnostics } from "./prompt-cache-telemetry.js";
|
|
16
17
|
import { computeStaticTokens } from "./context-metrics.js";
|
|
18
|
+
import { applySessionPrompt, createSessionPromptSnapshot, parseSessionPromptUpdate, SessionPromptError } from "./session-settings-prompt.js";
|
|
17
19
|
const DEFAULT_SESSION_TITLE_DELAY_MS = 5000;
|
|
18
20
|
export class QueryEngine {
|
|
19
21
|
options;
|
|
@@ -25,16 +27,27 @@ export class QueryEngine {
|
|
|
25
27
|
currentModel;
|
|
26
28
|
currentReasoning;
|
|
27
29
|
currentFastMode = false;
|
|
30
|
+
running = false;
|
|
31
|
+
pendingSessionSettings = {};
|
|
32
|
+
sessionPromptState;
|
|
33
|
+
activeSessionPrompt = null;
|
|
34
|
+
ephemeralSessionKey = randomUUID();
|
|
35
|
+
// Idle mutations and the next generator share a barrier. Never compact alongside a request.
|
|
36
|
+
settingsMutation = Promise.resolve();
|
|
28
37
|
currentContextWindowTokens;
|
|
29
38
|
currentModelGateway;
|
|
30
39
|
sessionInitialized = false;
|
|
40
|
+
sessionInitialization;
|
|
31
41
|
titleSchedulerVersion = 0;
|
|
32
42
|
titleAgentRun;
|
|
33
43
|
sessionTitleListeners = new Set();
|
|
34
44
|
appPromptStore;
|
|
35
45
|
contextManager;
|
|
46
|
+
baselineContextManager;
|
|
36
47
|
additionalPromptContextManager;
|
|
37
48
|
pendingCwdTransitionPaths;
|
|
49
|
+
pendingRequestContext;
|
|
50
|
+
pendingRequestContextConsumed;
|
|
38
51
|
constructor(options) {
|
|
39
52
|
this.options = options;
|
|
40
53
|
this.agentId = options.agentId ?? "main";
|
|
@@ -47,7 +60,12 @@ export class QueryEngine {
|
|
|
47
60
|
?? options.contextManager
|
|
48
61
|
?? new DefaultContextManager({ cwd: options.cwd });
|
|
49
62
|
this.additionalPromptContextManager = new AdditionalPromptContextManager(baseContextManager, options.additionalPromptSections);
|
|
50
|
-
this.
|
|
63
|
+
this.baselineContextManager = new AppPromptContextManager(this.additionalPromptContextManager, this.appPromptStore);
|
|
64
|
+
this.contextManager = { build: async (input) => {
|
|
65
|
+
// Capture before any asynchronous baseline work: an in-flight request never observes a later edit.
|
|
66
|
+
const content = this.activeSessionPrompt;
|
|
67
|
+
return applySessionPrompt(await this.baselineContextManager.build(input), content);
|
|
68
|
+
} };
|
|
51
69
|
this.pendingCwdTransitionPaths = normalizeCwdTransitionPaths(options.cwdTransitionPaths);
|
|
52
70
|
}
|
|
53
71
|
forkForSession(sessionId, resume = true) {
|
|
@@ -66,26 +84,48 @@ export class QueryEngine {
|
|
|
66
84
|
this.sessionTitleListeners.add(listener);
|
|
67
85
|
return () => this.sessionTitleListeners.delete(listener);
|
|
68
86
|
}
|
|
87
|
+
noteRecoverableSubagents(onConsumed) {
|
|
88
|
+
this.pendingRequestContext = {
|
|
89
|
+
...this.pendingRequestContext,
|
|
90
|
+
recoveryHint: "Interrupted subagents can be resumed.",
|
|
91
|
+
};
|
|
92
|
+
if (onConsumed)
|
|
93
|
+
this.pendingRequestContextConsumed = onConsumed;
|
|
94
|
+
}
|
|
69
95
|
async initialize() {
|
|
96
|
+
if (this.sessionInitialization)
|
|
97
|
+
return this.sessionInitialization;
|
|
70
98
|
if (this.sessionInitialized)
|
|
71
99
|
return;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
100
|
+
const initialization = (async () => {
|
|
101
|
+
if (this.options.session?.enabled !== false && this.options.session) {
|
|
102
|
+
await this.openSession({ sessionId: this.options.session.sessionId, resume: this.options.session.resume });
|
|
103
|
+
}
|
|
104
|
+
this.sessionInitialized = true;
|
|
105
|
+
})();
|
|
106
|
+
this.sessionInitialization = initialization;
|
|
107
|
+
try {
|
|
108
|
+
await initialization;
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
this.sessionInitialization = undefined;
|
|
112
|
+
}
|
|
81
113
|
}
|
|
82
114
|
async newSession() {
|
|
83
|
-
this.
|
|
84
|
-
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
115
|
+
if (this.running)
|
|
116
|
+
throw new Error("cannot switch session while query engine is running");
|
|
117
|
+
const mutation = this.settingsMutation.then(async () => {
|
|
118
|
+
await this.sessionInitialization;
|
|
119
|
+
await this.openSession({ resume: false });
|
|
120
|
+
this.sessionInitialized = true;
|
|
121
|
+
const snapshot = this.sessionStore?.snapshot();
|
|
122
|
+
if (!snapshot)
|
|
123
|
+
throw new Error("session transcripts are disabled");
|
|
124
|
+
return snapshot;
|
|
125
|
+
});
|
|
126
|
+
// Session switches share the editor barrier: stale saves can never land in a new session.
|
|
127
|
+
this.settingsMutation = mutation.catch(() => undefined);
|
|
128
|
+
return mutation;
|
|
89
129
|
}
|
|
90
130
|
async listSessions(limit = 10) {
|
|
91
131
|
if (this.options.session?.enabled === false || !this.options.session)
|
|
@@ -111,78 +151,241 @@ export class QueryEngine {
|
|
|
111
151
|
});
|
|
112
152
|
}
|
|
113
153
|
async *sendUserText(text, options = {}) {
|
|
154
|
+
if (this.running)
|
|
155
|
+
throw new Error("query engine is already running");
|
|
156
|
+
this.running = true;
|
|
157
|
+
try {
|
|
158
|
+
await this.settingsMutation;
|
|
159
|
+
await this.initialize();
|
|
160
|
+
const cwdTransitionPaths = this.pendingCwdTransitionPaths;
|
|
161
|
+
const pendingRequestContext = this.pendingRequestContext;
|
|
162
|
+
const pendingRequestContextConsumed = this.pendingRequestContextConsumed;
|
|
163
|
+
this.pendingCwdTransitionPaths = undefined;
|
|
164
|
+
this.options.cwdTransitionPaths = undefined;
|
|
165
|
+
if (cwdTransitionPaths?.length)
|
|
166
|
+
void this.options.onCwdTransitionConsumed?.();
|
|
167
|
+
const userMessage = options.blocks
|
|
168
|
+
? await this.persistMessageImages({
|
|
169
|
+
...createTextMessage("user", options.displayText ?? text),
|
|
170
|
+
blocks: options.blocks,
|
|
171
|
+
})
|
|
172
|
+
: createTextMessage("user", text);
|
|
173
|
+
this.history.push(userMessage);
|
|
174
|
+
this.sessionStore?.recordMessage(userMessage);
|
|
175
|
+
this.scheduleSessionTitleCheck();
|
|
176
|
+
const initMessage = createSystemInitMessage({
|
|
177
|
+
agentId: this.agentId,
|
|
178
|
+
tools: this.options.tools.names(),
|
|
179
|
+
model: this.currentModel,
|
|
180
|
+
commands: [...(this.options.commands ?? [])],
|
|
181
|
+
agents: [...(this.options.agents ?? [])],
|
|
182
|
+
skills: [...(this.options.skills ?? [])],
|
|
183
|
+
plugins: [...(this.options.plugins ?? [])],
|
|
184
|
+
});
|
|
185
|
+
initMessage.metadata = {
|
|
186
|
+
...initMessage.metadata,
|
|
187
|
+
reasoning: cloneReasoningConfig(this.currentReasoning),
|
|
188
|
+
};
|
|
189
|
+
yield {
|
|
190
|
+
type: "message",
|
|
191
|
+
message: initMessage,
|
|
192
|
+
};
|
|
193
|
+
this.sessionStore?.recordMessage(initMessage);
|
|
194
|
+
const queryOptions = {
|
|
195
|
+
agentId: this.agentId,
|
|
196
|
+
model: this.currentModel,
|
|
197
|
+
reasoning: cloneReasoningConfig(this.currentReasoning),
|
|
198
|
+
queryOrigin: this.options.queryOrigin ?? "repl",
|
|
199
|
+
serviceTier: this.currentFastMode ? "priority" : undefined,
|
|
200
|
+
maxOutputTokensOverride: this.options.maxOutputTokensOverride,
|
|
201
|
+
contextWindowTokensOverride: this.currentContextWindowTokens,
|
|
202
|
+
maxTurns: this.options.maxTurns,
|
|
203
|
+
workspaceCwd: this.options.cwd,
|
|
204
|
+
requestContext: pendingRequestContext || cwdTransitionPaths?.length
|
|
205
|
+
? {
|
|
206
|
+
...pendingRequestContext,
|
|
207
|
+
...(cwdTransitionPaths?.length
|
|
208
|
+
? { cwdTransition: { paths: cwdTransitionPaths, current: cwdTransitionPaths.at(-1) } }
|
|
209
|
+
: {}),
|
|
210
|
+
}
|
|
211
|
+
: undefined,
|
|
212
|
+
onRequestContextConsumed: pendingRequestContext ? () => {
|
|
213
|
+
pendingRequestContextConsumed?.();
|
|
214
|
+
if (this.pendingRequestContext === pendingRequestContext) {
|
|
215
|
+
this.pendingRequestContext = undefined;
|
|
216
|
+
this.pendingRequestContextConsumed = undefined;
|
|
217
|
+
}
|
|
218
|
+
} : undefined,
|
|
219
|
+
abortSignal: options.abortSignal,
|
|
220
|
+
stopAfterTurn: options.stopAfterTurn,
|
|
221
|
+
beforeTurn: (messages) => this.consumeSessionSettings(messages),
|
|
222
|
+
};
|
|
223
|
+
const stream = query(this.history, {
|
|
224
|
+
...this.options,
|
|
225
|
+
contextManager: this.contextManager,
|
|
226
|
+
modelGateway: this.currentModelGateway,
|
|
227
|
+
taskNotificationSource: this.options.taskNotificationSource,
|
|
228
|
+
toolResultMemory: this.sessionStore?.toolResultMemory,
|
|
229
|
+
session: this.sessionStore ? { sessionId: this.sessionStore.sessionId, sessionDir: this.sessionStore.sessionDir, rootDir: this.options.session?.rootDir } : undefined,
|
|
230
|
+
recordContentReplacements: (records) => this.sessionStore?.recordContentReplacements(records),
|
|
231
|
+
exportToolCalls: (calls) => this.recordSyntheticToolCalls(calls),
|
|
232
|
+
applyCompaction: (result) => this.applyCompactionResult(result),
|
|
233
|
+
}, queryOptions);
|
|
234
|
+
for await (const event of stream) {
|
|
235
|
+
if (event.type === "message") {
|
|
236
|
+
const message = await this.persistMessageImages(event.message);
|
|
237
|
+
this.history.push(message);
|
|
238
|
+
this.sessionStore?.recordMessage(message);
|
|
239
|
+
yield { ...event, message };
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (event.type === "terminal") {
|
|
243
|
+
this.lastTerminalReason = event.reason;
|
|
244
|
+
// The final assistant/tool messages have already been recorded by this wrapper.
|
|
245
|
+
const hadPending = Object.keys(this.pendingSessionSettings).length > 0;
|
|
246
|
+
for (const result of await this.flushSessionSettings()) {
|
|
247
|
+
if (result.report)
|
|
248
|
+
yield { type: "context.compacted", compaction: result.report };
|
|
249
|
+
}
|
|
250
|
+
if (hadPending)
|
|
251
|
+
yield { type: "context.metrics", metrics: await this.contextMetrics() };
|
|
252
|
+
}
|
|
253
|
+
yield event;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
finally {
|
|
257
|
+
// Covers initialization errors, aborts, exceptions and consumer generator.return().
|
|
258
|
+
// Do not yield in finally: a closing consumer may never resume the generator.
|
|
259
|
+
try {
|
|
260
|
+
do {
|
|
261
|
+
await this.flushSessionSettings();
|
|
262
|
+
} while (Object.keys(this.pendingSessionSettings).length);
|
|
263
|
+
}
|
|
264
|
+
finally {
|
|
265
|
+
this.running = false;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/** Queue instance-local settings; no prompt messages or provider-global mutation. */
|
|
270
|
+
async updateSessionSettings(patch) {
|
|
271
|
+
const normalized = {};
|
|
272
|
+
if (Object.hasOwn(patch, "model"))
|
|
273
|
+
normalized.model = patch.model?.trim() || undefined;
|
|
274
|
+
if (Object.hasOwn(patch, "reasoning"))
|
|
275
|
+
normalized.reasoning = cloneReasoningConfig(patch.reasoning);
|
|
276
|
+
if (Object.hasOwn(patch, "fastMode"))
|
|
277
|
+
normalized.fastMode = patch.fastMode === true;
|
|
278
|
+
if (Object.hasOwn(patch, "contextWindowTokens")) {
|
|
279
|
+
const tokens = normalizePositiveInteger(patch.contextWindowTokens);
|
|
280
|
+
if (!tokens)
|
|
281
|
+
throw new Error("context window tokens must be a positive integer");
|
|
282
|
+
normalized.contextWindowTokens = tokens;
|
|
283
|
+
}
|
|
284
|
+
if (patch.compact)
|
|
285
|
+
normalized.compact = true;
|
|
286
|
+
if (this.running) {
|
|
287
|
+
this.pendingSessionSettings = { ...this.pendingSessionSettings, ...normalized };
|
|
288
|
+
return { deferred: true };
|
|
289
|
+
}
|
|
290
|
+
const mutation = this.settingsMutation.then(async () => {
|
|
291
|
+
await this.initialize();
|
|
292
|
+
const update = await this.applySessionSettings(normalized, this.getHistoryMessages());
|
|
293
|
+
if (update?.compaction)
|
|
294
|
+
this.applyCompactionResult(update.compaction);
|
|
295
|
+
return { deferred: false, ...(update?.compaction ? { compaction: update.compaction } : {}) };
|
|
296
|
+
});
|
|
297
|
+
// A rejected mutation must not poison subsequent settings or user input.
|
|
298
|
+
this.settingsMutation = mutation.catch(() => undefined);
|
|
299
|
+
return mutation;
|
|
300
|
+
}
|
|
301
|
+
/** Editor state includes accepted queued changes; runtime exports still describe the active turn. */
|
|
302
|
+
async getSessionPrompt() {
|
|
303
|
+
await this.settingsMutation;
|
|
114
304
|
await this.initialize();
|
|
115
|
-
const
|
|
116
|
-
this.
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
305
|
+
const snapshot = await this.buildPromptExportSnapshot(this.getHistoryMessages());
|
|
306
|
+
return createSessionPromptSnapshot(this.sessionPromptKey(), this.sessionPromptState, snapshot.baseSystemPrompt ?? "");
|
|
307
|
+
}
|
|
308
|
+
async updateSessionPrompt(input) {
|
|
309
|
+
const update = parseSessionPromptUpdate(input);
|
|
310
|
+
const mutation = this.settingsMutation.then(async () => {
|
|
311
|
+
await this.initialize();
|
|
312
|
+
const key = this.sessionPromptKey();
|
|
313
|
+
const snapshot = await this.buildPromptExportSnapshot(this.getHistoryMessages());
|
|
314
|
+
const current = createSessionPromptSnapshot(key, this.sessionPromptState, snapshot.baseSystemPrompt ?? "");
|
|
315
|
+
if (key !== this.sessionPromptKey() || update.revision !== current.revision) {
|
|
316
|
+
throw new SessionPromptError("session prompt changed; reload before saving", 409);
|
|
317
|
+
}
|
|
318
|
+
const state = { content: update.reset ? null : update.content, revision: randomUUID() };
|
|
319
|
+
// Persist before accepting, including busy edits, so same-session resume cannot lose them.
|
|
320
|
+
this.sessionStore?.recordSessionPrompt(state);
|
|
321
|
+
this.sessionPromptState = state;
|
|
322
|
+
const deferred = this.running;
|
|
323
|
+
if (deferred)
|
|
324
|
+
this.pendingSessionSettings = { ...this.pendingSessionSettings, sessionPrompt: state.content };
|
|
325
|
+
else
|
|
326
|
+
this.activeSessionPrompt = state.content;
|
|
327
|
+
return { ok: true, ...createSessionPromptSnapshot(key, state, snapshot.baseSystemPrompt ?? ""), deferred };
|
|
137
328
|
});
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
329
|
+
this.settingsMutation = mutation.catch(() => undefined);
|
|
330
|
+
return mutation;
|
|
331
|
+
}
|
|
332
|
+
sessionPromptKey() {
|
|
333
|
+
return this.sessionStore ? `${this.sessionStore.sessionDir}:${this.agentId}` : this.ephemeralSessionKey;
|
|
334
|
+
}
|
|
335
|
+
getPendingSessionSettings() {
|
|
336
|
+
const patch = { ...this.pendingSessionSettings };
|
|
337
|
+
if (Object.hasOwn(patch, "reasoning"))
|
|
338
|
+
patch.reasoning = cloneReasoningConfig(patch.reasoning);
|
|
339
|
+
return patch;
|
|
340
|
+
}
|
|
341
|
+
async consumeSessionSettings(messages) {
|
|
342
|
+
const patch = this.pendingSessionSettings;
|
|
343
|
+
if (!Object.keys(patch).length)
|
|
344
|
+
return undefined;
|
|
345
|
+
this.pendingSessionSettings = {};
|
|
346
|
+
return this.applySessionSettings(patch, messages);
|
|
347
|
+
}
|
|
348
|
+
async applySessionSettings(patch, messages) {
|
|
349
|
+
const changed = {};
|
|
350
|
+
if (Object.hasOwn(patch, "sessionPrompt"))
|
|
351
|
+
this.activeSessionPrompt = patch.sessionPrompt ?? null;
|
|
352
|
+
if (Object.hasOwn(patch, "model") && patch.model !== this.currentModel) {
|
|
353
|
+
this.currentModel = patch.model;
|
|
354
|
+
changed.model = patch.model;
|
|
355
|
+
}
|
|
356
|
+
if (Object.hasOwn(patch, "reasoning") && !sameReasoningConfig(patch.reasoning, this.currentReasoning)) {
|
|
357
|
+
this.currentReasoning = cloneReasoningConfig(patch.reasoning);
|
|
358
|
+
changed.reasoning = cloneReasoningConfig(patch.reasoning);
|
|
359
|
+
}
|
|
360
|
+
if (Object.hasOwn(patch, "fastMode") && patch.fastMode !== this.currentFastMode) {
|
|
361
|
+
this.currentFastMode = patch.fastMode === true;
|
|
362
|
+
this.sessionStore?.recordFastMode(this.currentFastMode);
|
|
363
|
+
changed.fastMode = this.currentFastMode;
|
|
364
|
+
}
|
|
365
|
+
if (Object.hasOwn(patch, "contextWindowTokens") && patch.contextWindowTokens !== this.currentContextWindowTokens) {
|
|
366
|
+
this.currentContextWindowTokens = patch.contextWindowTokens;
|
|
367
|
+
this.sessionStore?.recordContextWindowTokens(this.currentContextWindowTokens);
|
|
368
|
+
changed.contextWindowTokens = this.currentContextWindowTokens;
|
|
369
|
+
}
|
|
370
|
+
let compaction;
|
|
371
|
+
if (patch.compact) {
|
|
372
|
+
const compactor = this.options.compactor ?? new ModelDrivenCompactor(this.currentModelGateway);
|
|
373
|
+
const budget = { ...this.options.contextBudget, contextWindowTokens: this.currentContextWindowTokens ?? this.options.contextBudget?.contextWindowTokens };
|
|
374
|
+
compaction = withCompactionReport(await (compactor.manualCompact?.(messages, budget) ?? compactor.compact(messages, budget)), messages.length);
|
|
375
|
+
}
|
|
376
|
+
return Object.keys(changed).length || compaction ? { settings: changed, compaction } : undefined;
|
|
377
|
+
}
|
|
378
|
+
async flushSessionSettings() {
|
|
379
|
+
const results = [];
|
|
380
|
+
while (Object.keys(this.pendingSessionSettings).length) {
|
|
381
|
+
const update = await this.consumeSessionSettings(this.getHistoryMessages());
|
|
382
|
+
if (update?.compaction) {
|
|
383
|
+
this.applyCompactionResult(update.compaction);
|
|
384
|
+
if (update.compaction.changed)
|
|
385
|
+
results.push(update.compaction);
|
|
181
386
|
}
|
|
182
|
-
if (event.type === "terminal")
|
|
183
|
-
this.lastTerminalReason = event.reason;
|
|
184
|
-
yield event;
|
|
185
387
|
}
|
|
388
|
+
return results;
|
|
186
389
|
}
|
|
187
390
|
setModel(model, reasoning, updateReasoning = false) {
|
|
188
391
|
this.currentModel = model?.trim() || undefined;
|
|
@@ -240,6 +443,9 @@ export class QueryEngine {
|
|
|
240
443
|
return this.appPromptStore.snapshot();
|
|
241
444
|
}
|
|
242
445
|
reset() {
|
|
446
|
+
if (this.running)
|
|
447
|
+
throw new Error("cannot reset while query engine is running");
|
|
448
|
+
this.pendingSessionSettings = {};
|
|
243
449
|
this.history.length = 0;
|
|
244
450
|
this.lastTerminalReason = undefined;
|
|
245
451
|
this.cancelPendingTitleWork();
|
|
@@ -247,17 +453,10 @@ export class QueryEngine {
|
|
|
247
453
|
this.notifySessionTitleChange(this.sessionStore?.snapshot());
|
|
248
454
|
}
|
|
249
455
|
async compact(options = {}) {
|
|
250
|
-
await this.initialize();
|
|
251
456
|
if (options.abortSignal?.aborted)
|
|
252
457
|
return { messages: this.getHistoryMessages(), changed: false, reason: "none" };
|
|
253
|
-
const
|
|
254
|
-
|
|
255
|
-
...this.options.contextBudget,
|
|
256
|
-
contextWindowTokens: this.currentContextWindowTokens ?? this.options.contextBudget?.contextWindowTokens,
|
|
257
|
-
};
|
|
258
|
-
const result = withCompactionReport(await (compactor.manualCompact?.(this.history, contextBudget) ?? compactor.compact(this.history, contextBudget)), this.history.length);
|
|
259
|
-
this.applyCompactionResult(result);
|
|
260
|
-
return result;
|
|
458
|
+
const result = await this.updateSessionSettings({ compact: true });
|
|
459
|
+
return result.compaction ?? { messages: this.getHistoryMessages(), changed: false, reason: "none" };
|
|
261
460
|
}
|
|
262
461
|
async pureCompact(options = {}) {
|
|
263
462
|
await this.initialize();
|
|
@@ -287,6 +486,10 @@ export class QueryEngine {
|
|
|
287
486
|
getHistoryMessages() {
|
|
288
487
|
return this.history.map(cloneMessage);
|
|
289
488
|
}
|
|
489
|
+
/** User-facing read-only detail boundaries must also redact secrets registered at runtime. */
|
|
490
|
+
redactDisplayValue(value) {
|
|
491
|
+
return this.options.secretRedactions?.redact(value) ?? value;
|
|
492
|
+
}
|
|
290
493
|
getDisplayEntries() {
|
|
291
494
|
return this.sessionStore?.getDisplayEntries() ?? this.history.map((message) => ({ type: "message", message: cloneMessage(message) }));
|
|
292
495
|
}
|
|
@@ -331,6 +534,11 @@ export class QueryEngine {
|
|
|
331
534
|
tools: this.options.tools,
|
|
332
535
|
appState: new InMemoryAppState(this.agentId, this.options.cwd),
|
|
333
536
|
toolResultMemory: this.sessionStore?.toolResultMemory,
|
|
537
|
+
session: this.sessionStore ? {
|
|
538
|
+
sessionId: this.sessionStore.sessionId,
|
|
539
|
+
sessionDir: this.sessionStore.sessionDir,
|
|
540
|
+
rootDir: this.options.session?.rootDir,
|
|
541
|
+
} : undefined,
|
|
334
542
|
secrets: this.options.secrets,
|
|
335
543
|
secretRedactions: this.options.secretRedactions,
|
|
336
544
|
recordContentReplacements: (records) => this.sessionStore?.recordContentReplacements(records),
|
|
@@ -343,12 +551,15 @@ export class QueryEngine {
|
|
|
343
551
|
emit: () => undefined,
|
|
344
552
|
};
|
|
345
553
|
const initialToolDefinitions = this.options.tools.definitions(toolContext);
|
|
346
|
-
const
|
|
554
|
+
const activePrompt = this.activeSessionPrompt;
|
|
555
|
+
const baseline = await this.baselineContextManager.build({
|
|
347
556
|
agentId: this.agentId,
|
|
348
557
|
messages,
|
|
349
558
|
enabledTools: initialToolDefinitions.map((tool) => tool.name),
|
|
350
559
|
toolUseContext: toolContext,
|
|
351
560
|
});
|
|
561
|
+
const context = applySessionPrompt(baseline, activePrompt);
|
|
562
|
+
const desiredPrompt = createSessionPromptSnapshot(this.sessionPromptKey(), this.sessionPromptState, baseline.systemPrompt);
|
|
352
563
|
const toolDefinitions = this.options.tools.definitions(toolContext);
|
|
353
564
|
const messagesWithUserContext = applyRuntimeContextForPromptCache([], context.userContext, {});
|
|
354
565
|
const userContextPrompt = messagesWithUserContext[0]?.blocks
|
|
@@ -359,7 +570,13 @@ export class QueryEngine {
|
|
|
359
570
|
model: this.currentModel,
|
|
360
571
|
reasoning: cloneReasoningConfig(this.currentReasoning),
|
|
361
572
|
systemPrompt: context.systemPrompt,
|
|
362
|
-
baseSystemPrompt:
|
|
573
|
+
baseSystemPrompt: baseline.systemPrompt,
|
|
574
|
+
sessionPrompt: {
|
|
575
|
+
override: activePrompt !== null,
|
|
576
|
+
revision: desiredPrompt.revision,
|
|
577
|
+
deferred: Object.hasOwn(this.pendingSessionSettings, "sessionPrompt"),
|
|
578
|
+
pendingOverride: desiredPrompt.override,
|
|
579
|
+
},
|
|
363
580
|
promptSections: context.promptSections,
|
|
364
581
|
userContext: context.userContext,
|
|
365
582
|
systemContext: context.systemContext,
|
|
@@ -416,6 +633,9 @@ export class QueryEngine {
|
|
|
416
633
|
resume: options.resume,
|
|
417
634
|
toolResultThresholdChars: this.options.session.toolResultThresholdChars,
|
|
418
635
|
});
|
|
636
|
+
this.pendingSessionSettings = {};
|
|
637
|
+
this.sessionPromptState = this.sessionStore.getSessionPrompt();
|
|
638
|
+
this.activeSessionPrompt = this.sessionPromptState?.content ?? null;
|
|
419
639
|
this.history.length = 0;
|
|
420
640
|
if (options.resume)
|
|
421
641
|
this.history.push(...this.sessionStore.getInitialMessages());
|
|
@@ -576,6 +796,11 @@ function resolveSessionTitleDelayMs() {
|
|
|
576
796
|
}
|
|
577
797
|
return DEFAULT_SESSION_TITLE_DELAY_MS;
|
|
578
798
|
}
|
|
799
|
+
function sameReasoningConfig(a, b) {
|
|
800
|
+
if (a === null || b === null || a === undefined || b === undefined)
|
|
801
|
+
return a === b;
|
|
802
|
+
return a.effort === b.effort && a.summary === b.summary;
|
|
803
|
+
}
|
|
579
804
|
function cloneReasoningConfig(reasoning) {
|
|
580
805
|
if (reasoning === null)
|
|
581
806
|
return null;
|