@qduc/term2 0.32.2 → 0.33.0
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/build-info.json +2 -2
- package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.js +12 -14
- package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
- package/dist/lib/agent-chat-service.d.ts.map +1 -1
- package/dist/lib/agent-chat-service.js +2 -6
- package/dist/lib/agent-chat-service.js.map +1 -1
- package/dist/lib/agent-client.d.ts +2 -1
- package/dist/lib/agent-client.d.ts.map +1 -1
- package/dist/lib/agent-client.js +71 -84
- package/dist/lib/agent-client.js.map +1 -1
- package/dist/lib/agent-factory.d.ts.map +1 -1
- package/dist/lib/agent-factory.js +17 -19
- package/dist/lib/agent-factory.js.map +1 -1
- package/dist/prompts/tool-surface-guidance.js +1 -1
- package/dist/prompts/tool-surface-guidance.js.map +1 -1
- package/dist/prompts/tool-surface-guidance.ts +1 -1
- package/dist/providers/ai-sdk-anthropic.provider.d.ts.map +1 -1
- package/dist/providers/ai-sdk-anthropic.provider.js +16 -2
- package/dist/providers/ai-sdk-anthropic.provider.js.map +1 -1
- package/dist/providers/ai-sdk-google.provider.d.ts.map +1 -1
- package/dist/providers/ai-sdk-google.provider.js +16 -2
- package/dist/providers/ai-sdk-google.provider.js.map +1 -1
- package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -1
- package/dist/providers/ai-sdk-openrouter.provider.js +16 -1
- package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -1
- package/dist/providers/ai-sdk-provider-settings.d.ts +2 -0
- package/dist/providers/ai-sdk-provider-settings.d.ts.map +1 -1
- package/dist/providers/ai-sdk-provider-settings.js +5 -0
- package/dist/providers/ai-sdk-provider-settings.js.map +1 -1
- package/dist/providers/ai-sdk-streamed-model.d.ts +3 -3
- package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -1
- package/dist/providers/ai-sdk-streamed-model.js +5 -69
- package/dist/providers/ai-sdk-streamed-model.js.map +1 -1
- package/dist/providers/anthropic-chat-caching.d.ts +5 -0
- package/dist/providers/anthropic-chat-caching.d.ts.map +1 -0
- package/dist/providers/{common/openai-compatible-messages.js → anthropic-chat-caching.js} +19 -1
- package/dist/providers/anthropic-chat-caching.js.map +1 -0
- package/dist/providers/codex.provider.js +2 -0
- package/dist/providers/codex.provider.js.map +1 -1
- package/dist/providers/custom-provider-runtime.d.ts +18 -0
- package/dist/providers/custom-provider-runtime.d.ts.map +1 -0
- package/dist/providers/custom-provider-runtime.js +26 -0
- package/dist/providers/custom-provider-runtime.js.map +1 -0
- package/dist/providers/llama-cpp.provider.d.ts +3 -0
- package/dist/providers/llama-cpp.provider.d.ts.map +1 -1
- package/dist/providers/llama-cpp.provider.js +17 -0
- package/dist/providers/llama-cpp.provider.js.map +1 -1
- package/dist/providers/neuralwatt.provider.d.ts +6 -0
- package/dist/providers/neuralwatt.provider.d.ts.map +1 -0
- package/dist/providers/neuralwatt.provider.js +8 -0
- package/dist/providers/neuralwatt.provider.js.map +1 -0
- package/dist/providers/openai-compatible-lazy.d.ts.map +1 -1
- package/dist/providers/openai-compatible-lazy.js +2 -0
- package/dist/providers/openai-compatible-lazy.js.map +1 -1
- package/dist/providers/openai-compatible-middleware.d.ts +4 -9
- package/dist/providers/openai-compatible-middleware.d.ts.map +1 -1
- package/dist/providers/openai-compatible-middleware.js +25 -48
- package/dist/providers/openai-compatible-middleware.js.map +1 -1
- package/dist/providers/openai-compatible-response-normalizer.d.ts +1 -1
- package/dist/providers/openai-compatible-response-normalizer.d.ts.map +1 -1
- package/dist/providers/openai-compatible-response-normalizer.js +6 -6
- package/dist/providers/openai-compatible-response-normalizer.js.map +1 -1
- package/dist/providers/openai-compatible.provider.d.ts +2 -32
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
- package/dist/providers/openai-compatible.provider.js +18 -144
- package/dist/providers/openai-compatible.provider.js.map +1 -1
- package/dist/providers/openai.provider.d.ts.map +1 -1
- package/dist/providers/openai.provider.js +1 -0
- package/dist/providers/openai.provider.js.map +1 -1
- package/dist/providers/opencode-middleware.d.ts +9 -0
- package/dist/providers/opencode-middleware.d.ts.map +1 -0
- package/dist/providers/opencode-middleware.js +15 -0
- package/dist/providers/opencode-middleware.js.map +1 -0
- package/dist/providers/opencode-model-provider.d.ts +19 -0
- package/dist/providers/opencode-model-provider.d.ts.map +1 -0
- package/dist/providers/opencode-model-provider.js +128 -0
- package/dist/providers/opencode-model-provider.js.map +1 -0
- package/dist/providers/opencode.provider.d.ts +2 -0
- package/dist/providers/opencode.provider.d.ts.map +1 -1
- package/dist/providers/opencode.provider.js +4 -0
- package/dist/providers/opencode.provider.js.map +1 -1
- package/dist/providers/openrouter-decision-models.d.ts +7 -0
- package/dist/providers/openrouter-decision-models.d.ts.map +1 -0
- package/dist/providers/openrouter-decision-models.js +31 -0
- package/dist/providers/openrouter-decision-models.js.map +1 -0
- package/dist/providers/openrouter.provider.js +2 -1
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/providers/orcarouter-models.d.ts +12 -0
- package/dist/providers/orcarouter-models.d.ts.map +1 -0
- package/dist/providers/orcarouter-models.js +34 -0
- package/dist/providers/orcarouter-models.js.map +1 -0
- package/dist/providers/registry.d.ts +7 -0
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.d.ts +20 -1
- package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.js +871 -759
- package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
- package/dist/services/agent-runtime/tool-call-execution.d.ts +1 -1
- package/dist/services/agent-runtime/tool-call-execution.d.ts.map +1 -1
- package/dist/services/agent-runtime/tool-call-execution.js +6 -3
- package/dist/services/agent-runtime/tool-call-execution.js.map +1 -1
- package/dist/services/approval/approval-flow-coordinator.d.ts +4 -2
- package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
- package/dist/services/approval/approval-flow-coordinator.js +2 -1
- package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
- package/dist/services/approval/approval-state.d.ts +0 -13
- package/dist/services/approval/approval-state.d.ts.map +1 -1
- package/dist/services/approval/approval-state.js +0 -5
- package/dist/services/approval/approval-state.js.map +1 -1
- package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -1
- package/dist/services/approval/background-subagent-approval-controller.js +0 -2
- package/dist/services/approval/background-subagent-approval-controller.js.map +1 -1
- package/dist/services/approval/nested-approval-owner.d.ts.map +1 -1
- package/dist/services/approval/nested-approval-owner.js +5 -1
- package/dist/services/approval/nested-approval-owner.js.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.d.ts +2 -2
- package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.js +2 -2
- package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
- package/dist/services/approval/tool-approval-batch-coordinator.d.ts +2 -2
- package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
- package/dist/services/approval/tool-approval-batch-coordinator.js +4 -4
- package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
- package/dist/services/conversation/conversation-adapter.d.ts +17 -47
- package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter.js +114 -88
- package/dist/services/conversation/conversation-adapter.js.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.js +48 -121
- package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
- package/dist/services/conversation/conversation-record-stream.d.ts +21 -0
- package/dist/services/conversation/conversation-record-stream.d.ts.map +1 -0
- package/dist/services/conversation/conversation-record-stream.js +186 -0
- package/dist/services/conversation/conversation-record-stream.js.map +1 -0
- package/dist/services/conversation/conversation-record.d.ts +160 -0
- package/dist/services/conversation/conversation-record.d.ts.map +1 -0
- package/dist/services/conversation/conversation-record.js +371 -0
- package/dist/services/conversation/conversation-record.js.map +1 -0
- package/dist/services/conversation/conversation-result-builder.d.ts +0 -4
- package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
- package/dist/services/conversation/conversation-result-builder.js +0 -10
- package/dist/services/conversation/conversation-result-builder.js.map +1 -1
- package/dist/services/conversation/conversation-service.d.ts +2 -1
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +3 -0
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/conversation-agent-client.d.ts +17 -7
- package/dist/services/conversation-agent-client.d.ts.map +1 -1
- package/dist/services/logging/conversation-logger.d.ts +1 -7
- package/dist/services/logging/conversation-logger.d.ts.map +1 -1
- package/dist/services/logging/conversation-logger.js +0 -18
- package/dist/services/logging/conversation-logger.js.map +1 -1
- package/dist/services/model-service.d.ts +2 -6
- package/dist/services/model-service.d.ts.map +1 -1
- package/dist/services/model-service.js +8 -21
- package/dist/services/model-service.js.map +1 -1
- package/dist/services/models/decision-model-listing.d.ts +2 -12
- package/dist/services/models/decision-model-listing.d.ts.map +1 -1
- package/dist/services/models/decision-model-listing.js +2 -29
- package/dist/services/models/decision-model-listing.js.map +1 -1
- package/dist/services/provider-continuity.d.ts +26 -0
- package/dist/services/provider-continuity.d.ts.map +1 -1
- package/dist/services/provider-continuity.js +47 -0
- package/dist/services/provider-continuity.js.map +1 -1
- package/dist/services/retry/recovery-executor.d.ts +3 -4
- package/dist/services/retry/recovery-executor.d.ts.map +1 -1
- package/dist/services/retry/recovery-executor.js +13 -75
- package/dist/services/retry/recovery-executor.js.map +1 -1
- package/dist/services/retry/retry-contracts.d.ts +2 -10
- package/dist/services/retry/retry-contracts.d.ts.map +1 -1
- package/dist/services/session/continuation-plan-applier.d.ts +5 -9
- package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
- package/dist/services/session/continuation-plan-applier.js +9 -43
- package/dist/services/session/continuation-plan-applier.js.map +1 -1
- package/dist/services/session/continuation-recovery-handler.d.ts +4 -6
- package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
- package/dist/services/session/continuation-recovery-handler.js +3 -15
- package/dist/services/session/continuation-recovery-handler.js.map +1 -1
- package/dist/services/session/initial-input-preparer.d.ts +2 -2
- package/dist/services/session/initial-input-preparer.d.ts.map +1 -1
- package/dist/services/session/initial-input-preparer.js +3 -3
- package/dist/services/session/initial-input-preparer.js.map +1 -1
- package/dist/services/session/initial-turn-recovery-handler.d.ts +2 -4
- package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
- package/dist/services/session/initial-turn-recovery-handler.js +4 -5
- package/dist/services/session/initial-turn-recovery-handler.js.map +1 -1
- package/dist/services/session/live-run.d.ts +9 -3
- package/dist/services/session/live-run.d.ts.map +1 -1
- package/dist/services/session/live-run.js +19 -4
- package/dist/services/session/live-run.js.map +1 -1
- package/dist/services/session/session-composition.d.ts +8 -12
- package/dist/services/session/session-composition.d.ts.map +1 -1
- package/dist/services/session/session-composition.js +41 -87
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/session/session-input-planner.d.ts +2 -2
- package/dist/services/session/session-input-planner.d.ts.map +1 -1
- package/dist/services/session/session-input-planner.js +6 -13
- package/dist/services/session/session-input-planner.js.map +1 -1
- package/dist/services/session/session-lifecycle.d.ts +73 -23
- package/dist/services/session/session-lifecycle.d.ts.map +1 -1
- package/dist/services/session/session-lifecycle.js +127 -45
- package/dist/services/session/session-lifecycle.js.map +1 -1
- package/dist/services/session/session-stream-processor.d.ts +4 -30
- package/dist/services/session/session-stream-processor.d.ts.map +1 -1
- package/dist/services/session/session-stream-processor.js +11 -300
- package/dist/services/session/session-stream-processor.js.map +1 -1
- package/dist/services/session/session-tool-tracker.d.ts +9 -144
- package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
- package/dist/services/session/session-tool-tracker.js +17 -251
- package/dist/services/session/session-tool-tracker.js.map +1 -1
- package/dist/services/session/{turn-workflow.d.ts → session-turn-adapter.d.ts} +10 -43
- package/dist/services/session/session-turn-adapter.d.ts.map +1 -0
- package/dist/services/session/session-turn-adapter.js +734 -0
- package/dist/services/session/session-turn-adapter.js.map +1 -0
- package/dist/services/session/turn-attempt-factory.d.ts +2 -11
- package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
- package/dist/services/session/turn-attempt-factory.js +4 -12
- package/dist/services/session/turn-attempt-factory.js.map +1 -1
- package/dist/services/session/turn-attempt.d.ts +0 -3
- package/dist/services/session/turn-attempt.d.ts.map +1 -1
- package/dist/services/session/turn-attempt.js +0 -5
- package/dist/services/session/turn-attempt.js.map +1 -1
- package/dist/services/session/turn-coordinator.d.ts +3 -3
- package/dist/services/session/turn-coordinator.d.ts.map +1 -1
- package/dist/services/session/turn-coordinator.js +31 -26
- package/dist/services/session/turn-coordinator.js.map +1 -1
- package/dist/services/session/turn-projection-state.d.ts +45 -0
- package/dist/services/session/turn-projection-state.d.ts.map +1 -0
- package/dist/services/session/turn-projection-state.js +61 -0
- package/dist/services/session/turn-projection-state.js.map +1 -0
- package/dist/services/subagents/tool-policy.d.ts +5 -5
- package/dist/services/subagents/tool-policy.d.ts.map +1 -1
- package/dist/services/subagents/tool-policy.js.map +1 -1
- package/dist/tools/system/run-code/run-code-runtime.d.ts.map +1 -1
- package/dist/tools/system/run-code/run-code-runtime.js +90 -19
- package/dist/tools/system/run-code/run-code-runtime.js.map +1 -1
- package/dist/tools/system/shell.d.ts +2 -2
- package/dist/tools/system/shell.d.ts.map +1 -1
- package/dist/tools/system/shell.js +1 -0
- package/dist/tools/system/shell.js.map +1 -1
- package/dist/tools/tool-names.d.ts +1 -1
- package/dist/tools/tool-names.d.ts.map +1 -1
- package/dist/utils/ai/token-usage.js +9 -8
- package/dist/utils/ai/token-usage.js.map +1 -1
- package/package.json +1 -1
- package/dist/providers/anthropic-middleware.d.ts +0 -25
- package/dist/providers/anthropic-middleware.d.ts.map +0 -1
- package/dist/providers/anthropic-middleware.js +0 -32
- package/dist/providers/anthropic-middleware.js.map +0 -1
- package/dist/providers/common/openai-compatible-messages.d.ts +0 -2
- package/dist/providers/common/openai-compatible-messages.d.ts.map +0 -1
- package/dist/providers/common/openai-compatible-messages.js.map +0 -1
- package/dist/services/session/continuation-call-id-resolver.d.ts +0 -29
- package/dist/services/session/continuation-call-id-resolver.d.ts.map +0 -1
- package/dist/services/session/continuation-call-id-resolver.js +0 -69
- package/dist/services/session/continuation-call-id-resolver.js.map +0 -1
- package/dist/services/session/continuation-state.d.ts +0 -69
- package/dist/services/session/continuation-state.d.ts.map +0 -1
- package/dist/services/session/continuation-state.js +0 -78
- package/dist/services/session/continuation-state.js.map +0 -1
- package/dist/services/session/session-manager.d.ts +0 -87
- package/dist/services/session/session-manager.d.ts.map +0 -1
- package/dist/services/session/session-manager.js +0 -146
- package/dist/services/session/session-manager.js.map +0 -1
- package/dist/services/session/turn-workflow.d.ts.map +0 -1
- package/dist/services/session/turn-workflow.js +0 -1055
- package/dist/services/session/turn-workflow.js.map +0 -1
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
import type { StateSnapshot } from '../logging/conversation-log-events.js';
|
|
2
|
+
import { ConversationLogger } from '../logging/conversation-logger.js';
|
|
3
|
+
import type { RewindTarget, RewindTargetId } from '../conversation/conversation-store.js';
|
|
4
|
+
import type { ConversationAgentClient } from '../conversation-agent-client.js';
|
|
5
|
+
import type { ProviderInputItem } from '../../contracts/provider-input.js';
|
|
6
|
+
import type { UserTurn } from '../../types/user-turn.js';
|
|
7
|
+
import { ConversationRecord } from '../conversation/conversation-record.js';
|
|
1
8
|
import { SessionInputPlanner } from './session-input-planner.js';
|
|
2
|
-
import {
|
|
3
|
-
import { ConversationStore } from '../conversation/conversation-store.js';
|
|
9
|
+
import type { ISettingsService } from '../service-interfaces.js';
|
|
4
10
|
import type { ILoggingService } from '../service-interfaces.js';
|
|
5
11
|
import type { SavedToolExecution } from '../tool-execution-ledger.js';
|
|
6
12
|
import { TurnStatusMachine } from './turn-status-machine.js';
|
|
@@ -8,7 +14,6 @@ import type { ProviderContinuity } from '../provider-continuity.js';
|
|
|
8
14
|
import { GenerationGuard } from '../generation-guard.js';
|
|
9
15
|
import { SessionContinuityReset } from './session-continuity-reset.js';
|
|
10
16
|
import type { SessionAccessState } from './session-access-state.js';
|
|
11
|
-
import type { AssistantTurnJournal } from '../logging/assistant-turn-journal.js';
|
|
12
17
|
import type { PendingInteractionState } from './pending-interaction-state.js';
|
|
13
18
|
import type { SessionIdSource } from './session-identity.js';
|
|
14
19
|
/**
|
|
@@ -16,7 +21,7 @@ import type { SessionIdSource } from './session-identity.js';
|
|
|
16
21
|
* - pendingModeNotice
|
|
17
22
|
* - generation resets, store clearing
|
|
18
23
|
* - import/export reconciliation
|
|
19
|
-
* - undo
|
|
24
|
+
* - complete undo/retry/rewind operations and their logging
|
|
20
25
|
* - approval/cache/input guard reset hooks
|
|
21
26
|
*
|
|
22
27
|
* ConversationSession delegates to this object for lifecycle operations
|
|
@@ -28,8 +33,10 @@ export declare class SessionLifecycle {
|
|
|
28
33
|
pendingModeNotice: string | null;
|
|
29
34
|
constructor(deps: {
|
|
30
35
|
inputPlanner: SessionInputPlanner;
|
|
31
|
-
|
|
32
|
-
|
|
36
|
+
conversationLogger: ConversationLogger;
|
|
37
|
+
agentClient: ConversationAgentClient;
|
|
38
|
+
settingsService?: ISettingsService;
|
|
39
|
+
record: ConversationRecord;
|
|
33
40
|
logger: ILoggingService;
|
|
34
41
|
sessionId: SessionIdSource;
|
|
35
42
|
appState: {
|
|
@@ -38,13 +45,6 @@ export declare class SessionLifecycle {
|
|
|
38
45
|
providerContinuity: ProviderContinuity;
|
|
39
46
|
generationGuard: GenerationGuard;
|
|
40
47
|
continuityReset: SessionContinuityReset;
|
|
41
|
-
/**
|
|
42
|
-
* Streams assistant items into the durable journal. Undo/reset must prune
|
|
43
|
-
* it alongside the store and ledger: failure recovery rebuilds the tool
|
|
44
|
-
* ledger from this buffer, so skipped pruning would resurrect tool pairs
|
|
45
|
-
* from undone turns into the next provider request.
|
|
46
|
-
*/
|
|
47
|
-
journal: AssistantTurnJournal;
|
|
48
48
|
/** Handle-owned root capability; absent only for compatibility callers. */
|
|
49
49
|
sessionAccess?: SessionAccessState;
|
|
50
50
|
/** Notify the coordinator before a generation reset invalidates a turn. */
|
|
@@ -64,16 +64,6 @@ export declare class SessionLifecycle {
|
|
|
64
64
|
* Keeps the conversation store intact but severs the response chain.
|
|
65
65
|
*/
|
|
66
66
|
afterProviderChanged(): void;
|
|
67
|
-
/**
|
|
68
|
-
* Clean up after an undo operation.
|
|
69
|
-
*
|
|
70
|
-
* Call this *after* the user turn has been removed from the conversation store.
|
|
71
|
-
*/
|
|
72
|
-
afterUndo(): void;
|
|
73
|
-
/**
|
|
74
|
-
* Reset state after rewinding to the last tool output.
|
|
75
|
-
*/
|
|
76
|
-
afterToolRetry(): void;
|
|
77
67
|
/**
|
|
78
68
|
* Export the current session state for persistence.
|
|
79
69
|
*/
|
|
@@ -95,5 +85,65 @@ export declare class SessionLifecycle {
|
|
|
95
85
|
toolLedger?: SavedToolExecution[];
|
|
96
86
|
updatedAt?: string;
|
|
97
87
|
}): void;
|
|
88
|
+
reset(): void;
|
|
89
|
+
undoLastUserTurn(): {
|
|
90
|
+
text: string;
|
|
91
|
+
images?: UserTurn['images'];
|
|
92
|
+
} | null;
|
|
93
|
+
/** Discard the latest attempt, retaining the exact original provider input. */
|
|
94
|
+
retryLastUserTurn(): boolean;
|
|
95
|
+
peekLastToolOutput(): {
|
|
96
|
+
index: number;
|
|
97
|
+
callId?: string;
|
|
98
|
+
toolName?: string;
|
|
99
|
+
output?: unknown;
|
|
100
|
+
itemType: string;
|
|
101
|
+
} | null;
|
|
102
|
+
retryLastToolOutput(): {
|
|
103
|
+
index: number;
|
|
104
|
+
callId?: string;
|
|
105
|
+
toolName?: string;
|
|
106
|
+
output?: unknown;
|
|
107
|
+
itemType: string;
|
|
108
|
+
} | null;
|
|
109
|
+
undoNUserTurns(n: number): {
|
|
110
|
+
text: string;
|
|
111
|
+
images?: UserTurn['images'];
|
|
112
|
+
} | null;
|
|
113
|
+
listUserTurns(): {
|
|
114
|
+
index: number;
|
|
115
|
+
text: string;
|
|
116
|
+
imageCount: number;
|
|
117
|
+
}[];
|
|
118
|
+
listRewindTargets(): RewindTarget[];
|
|
119
|
+
/**
|
|
120
|
+
* Rewind through a snapshot-scoped domain target. This is the only target
|
|
121
|
+
* based rewind entry point: lifecycle cleanup and undo logging happen once,
|
|
122
|
+
* and only after the store accepted the target.
|
|
123
|
+
*/
|
|
124
|
+
rewindToTarget(targetId: RewindTargetId): {
|
|
125
|
+
text: string;
|
|
126
|
+
images?: UserTurn['images'];
|
|
127
|
+
} | null;
|
|
128
|
+
getCurrentSnapshot(): StateSnapshot;
|
|
129
|
+
getProviderHistorySnapshot(): import("../conversation/conversation-store.js").ProviderHistorySnapshot;
|
|
130
|
+
replaceHistoryAtRevision(expectedRevision: number, history: readonly ProviderInputItem[]): boolean;
|
|
131
|
+
exportState(): {
|
|
132
|
+
history: unknown[];
|
|
133
|
+
previousResponseId: string | null;
|
|
134
|
+
toolLedger: SavedToolExecution[];
|
|
135
|
+
};
|
|
136
|
+
importState(state: {
|
|
137
|
+
history: unknown[];
|
|
138
|
+
previousResponseId: string | null;
|
|
139
|
+
toolLedger?: SavedToolExecution[];
|
|
140
|
+
updatedAt?: string;
|
|
141
|
+
}): void;
|
|
142
|
+
addShellContext(historyText: string): void;
|
|
143
|
+
queueModeNotice(text: string): void;
|
|
144
|
+
previewLargeUncachedInput(input: string | UserTurn, now?: number): import("../large-uncached-input-guard.js").LargeUncachedInputDecision;
|
|
145
|
+
previewInputSurge(input: string | UserTurn): import("../input-surge-guard.js").InputSurgeDecision;
|
|
98
146
|
}
|
|
147
|
+
/** Complete public state operations; cleanup primitives remain an internal concern. */
|
|
148
|
+
export type SessionState = Pick<SessionLifecycle, 'reset' | 'undoLastUserTurn' | 'retryLastUserTurn' | 'peekLastToolOutput' | 'retryLastToolOutput' | 'undoNUserTurns' | 'listUserTurns' | 'listRewindTargets' | 'rewindToTarget' | 'getCurrentSnapshot' | 'getProviderHistorySnapshot' | 'replaceHistoryAtRevision' | 'exportState' | 'importState' | 'addShellContext' | 'queueModeNotice' | 'previewLargeUncachedInput' | 'previewInputSurge'>;
|
|
99
149
|
//# sourceMappingURL=session-lifecycle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle.d.ts","sourceRoot":"","sources":["../../../source/services/session/session-lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"session-lifecycle.d.ts","sourceRoot":"","sources":["../../../source/services/session/session-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { getMethod } from '../interruption-info.js';
|
|
2
|
+
import { ProjectionWarningCode } from '../conversation/conversation-state-projector.js';
|
|
3
3
|
import { resolveSessionId } from './session-identity.js';
|
|
4
4
|
/**
|
|
5
5
|
* Owns and manages session-level state transitions:
|
|
6
6
|
* - pendingModeNotice
|
|
7
7
|
* - generation resets, store clearing
|
|
8
8
|
* - import/export reconciliation
|
|
9
|
-
* - undo
|
|
9
|
+
* - complete undo/retry/rewind operations and their logging
|
|
10
10
|
* - approval/cache/input guard reset hooks
|
|
11
11
|
*
|
|
12
12
|
* ConversationSession delegates to this object for lifecycle operations
|
|
@@ -16,8 +16,7 @@ export class SessionLifecycle {
|
|
|
16
16
|
/** A pending mode-notice text to prepend to the next user turn. */
|
|
17
17
|
pendingModeNotice = null;
|
|
18
18
|
#inputPlanner;
|
|
19
|
-
#
|
|
20
|
-
#conversationStore;
|
|
19
|
+
#record;
|
|
21
20
|
#logger;
|
|
22
21
|
#sessionId;
|
|
23
22
|
#appState;
|
|
@@ -26,12 +25,16 @@ export class SessionLifecycle {
|
|
|
26
25
|
#continuityReset;
|
|
27
26
|
#sessionAccess;
|
|
28
27
|
#terminateActiveTurn;
|
|
29
|
-
#journal;
|
|
30
28
|
#pendingInteraction;
|
|
29
|
+
#conversationLogger;
|
|
30
|
+
#agentClient;
|
|
31
|
+
#settingsService;
|
|
31
32
|
constructor(deps) {
|
|
32
33
|
this.#inputPlanner = deps.inputPlanner;
|
|
33
|
-
this.#
|
|
34
|
-
this.#
|
|
34
|
+
this.#conversationLogger = deps.conversationLogger;
|
|
35
|
+
this.#agentClient = deps.agentClient;
|
|
36
|
+
this.#settingsService = deps.settingsService;
|
|
37
|
+
this.#record = deps.record;
|
|
35
38
|
this.#logger = deps.logger;
|
|
36
39
|
this.#sessionId = deps.sessionId;
|
|
37
40
|
this.#appState = deps.appState;
|
|
@@ -40,7 +43,6 @@ export class SessionLifecycle {
|
|
|
40
43
|
this.#continuityReset = deps.continuityReset;
|
|
41
44
|
this.#sessionAccess = deps.sessionAccess;
|
|
42
45
|
this.#terminateActiveTurn = deps.terminateActiveTurn;
|
|
43
|
-
this.#journal = deps.journal;
|
|
44
46
|
this.#pendingInteraction = deps.pendingInteraction;
|
|
45
47
|
}
|
|
46
48
|
// ── Public lifecycle methods ─────────────────────────────────────
|
|
@@ -53,10 +55,8 @@ export class SessionLifecycle {
|
|
|
53
55
|
this.#generationGuard.invalidate();
|
|
54
56
|
this.#clearAccessState();
|
|
55
57
|
this.#continuityReset.reset(options);
|
|
56
|
-
this.#
|
|
57
|
-
this.#toolTracker.reset();
|
|
58
|
+
this.#record.reset();
|
|
58
59
|
this.#inputPlanner.reset();
|
|
59
|
-
this.#journal.clear();
|
|
60
60
|
this.#pendingInteraction?.clear();
|
|
61
61
|
this.#appState.statusMachine.abort();
|
|
62
62
|
}
|
|
@@ -73,24 +73,12 @@ export class SessionLifecycle {
|
|
|
73
73
|
/**
|
|
74
74
|
* Clean up after an undo operation.
|
|
75
75
|
*
|
|
76
|
-
*
|
|
76
|
+
* Private step of an accepted synchronous history operation. No caller must
|
|
77
|
+
* remember a separate cleanup or logging call.
|
|
77
78
|
*/
|
|
78
|
-
afterUndo() {
|
|
79
|
+
#afterUndo() {
|
|
79
80
|
this.#terminateActiveTurn?.();
|
|
80
81
|
this.#generationGuard.invalidate();
|
|
81
|
-
this.#pruneToolLedgerToCurrentHistory();
|
|
82
|
-
this.#journal.pruneToUserTurnCount(this.#conversationStore.listUserTurns().length);
|
|
83
|
-
this.#continuityReset.reset();
|
|
84
|
-
this.#inputPlanner.markUndoOrRewind();
|
|
85
|
-
this.#appState.statusMachine.abort();
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Reset state after rewinding to the last tool output.
|
|
89
|
-
*/
|
|
90
|
-
afterToolRetry() {
|
|
91
|
-
this.#terminateActiveTurn?.();
|
|
92
|
-
this.#generationGuard.invalidate();
|
|
93
|
-
this.#pruneToolLedgerToCurrentHistory();
|
|
94
82
|
this.#continuityReset.reset();
|
|
95
83
|
this.#inputPlanner.markUndoOrRewind();
|
|
96
84
|
this.#appState.statusMachine.abort();
|
|
@@ -99,11 +87,7 @@ export class SessionLifecycle {
|
|
|
99
87
|
* Export the current session state for persistence.
|
|
100
88
|
*/
|
|
101
89
|
exportPersistedState() {
|
|
102
|
-
return
|
|
103
|
-
history: this.#toolTracker.getReconciledHistory(),
|
|
104
|
-
previousResponseId: this.#providerContinuity.previousResponseId,
|
|
105
|
-
toolLedger: this.#toolTracker.export(),
|
|
106
|
-
};
|
|
90
|
+
return this.#record.exportState(this.#providerContinuity.previousResponseId);
|
|
107
91
|
}
|
|
108
92
|
/**
|
|
109
93
|
* Import a previously persisted session state.
|
|
@@ -113,15 +97,9 @@ export class SessionLifecycle {
|
|
|
113
97
|
* first resumed turn sends full history.
|
|
114
98
|
*/
|
|
115
99
|
importPersistedState(state) {
|
|
116
|
-
const validatedState =
|
|
100
|
+
const { validated: validatedState, projected } = this.#record.importState(state);
|
|
101
|
+
this.#terminateActiveTurn?.();
|
|
117
102
|
this.#clearAccessState();
|
|
118
|
-
this.#conversationStore.clear();
|
|
119
|
-
this.#toolTracker.import(validatedState.toolLedger);
|
|
120
|
-
const projected = projectImportedState({
|
|
121
|
-
history: validatedState.history,
|
|
122
|
-
previousResponseId: validatedState.previousResponseId,
|
|
123
|
-
toolLedger: validatedState.toolLedger,
|
|
124
|
-
});
|
|
125
103
|
if (projected.warnings.length > 0) {
|
|
126
104
|
const addedCompletedPairs = projected.warnings.find((warning) => warning.code === ProjectionWarningCode.CompletedToolHistoryInserted)
|
|
127
105
|
?.detail?.addedCompletedPairs ?? 0;
|
|
@@ -136,9 +114,6 @@ export class SessionLifecycle {
|
|
|
136
114
|
droppedIncompleteCalls,
|
|
137
115
|
});
|
|
138
116
|
}
|
|
139
|
-
for (const item of projected.history) {
|
|
140
|
-
this.#conversationStore.addImportedItem(item);
|
|
141
|
-
}
|
|
142
117
|
// Provider-side response chains can expire while the local transcript remains valid.
|
|
143
118
|
// Force the first resumed turn to resync from full history; successful completion
|
|
144
119
|
// will populate a fresh previousResponseId for subsequent chained turns.
|
|
@@ -149,8 +124,115 @@ export class SessionLifecycle {
|
|
|
149
124
|
this.#generationGuard.invalidate();
|
|
150
125
|
this.#appState.statusMachine.abort();
|
|
151
126
|
}
|
|
152
|
-
|
|
153
|
-
|
|
127
|
+
// ── Reset ─────────────────────────────────────────────────────────
|
|
128
|
+
reset() {
|
|
129
|
+
this.resetSession();
|
|
130
|
+
}
|
|
131
|
+
// ── Undo ──────────────────────────────────────────────────────────
|
|
132
|
+
undoLastUserTurn() {
|
|
133
|
+
const removed = this.#record.removeLastUserTurn();
|
|
134
|
+
if (removed === null)
|
|
135
|
+
return null;
|
|
136
|
+
this.#completeUndo(1);
|
|
137
|
+
return removed;
|
|
138
|
+
}
|
|
139
|
+
/** Discard the latest attempt, retaining the exact original provider input. */
|
|
140
|
+
retryLastUserTurn() {
|
|
141
|
+
const retry = this.#record.retryLastUserTurn();
|
|
142
|
+
if (!retry)
|
|
143
|
+
return false;
|
|
144
|
+
this.#afterUndo();
|
|
145
|
+
this.#conversationLogger.log({
|
|
146
|
+
type: 'undo',
|
|
147
|
+
removedUserTurns: 1,
|
|
148
|
+
snapshot: { ...this.getCurrentSnapshot(), ...retry.discardedSnapshot },
|
|
149
|
+
});
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
peekLastToolOutput() {
|
|
153
|
+
return this.#record.peekLastToolOutput();
|
|
154
|
+
}
|
|
155
|
+
retryLastToolOutput() {
|
|
156
|
+
const removed = this.#record.removeAfterLastToolOutput();
|
|
157
|
+
if (removed === null)
|
|
158
|
+
return null;
|
|
159
|
+
this.#afterUndo();
|
|
160
|
+
return removed;
|
|
161
|
+
}
|
|
162
|
+
undoNUserTurns(n) {
|
|
163
|
+
const removed = this.#record.removeNLastUserTurns(n);
|
|
164
|
+
if (removed === null)
|
|
165
|
+
return null;
|
|
166
|
+
this.#completeUndo(n);
|
|
167
|
+
return removed;
|
|
168
|
+
}
|
|
169
|
+
listUserTurns() {
|
|
170
|
+
return this.#record.listUserTurns();
|
|
171
|
+
}
|
|
172
|
+
listRewindTargets() {
|
|
173
|
+
return this.#record.listRewindTargets();
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Rewind through a snapshot-scoped domain target. This is the only target
|
|
177
|
+
* based rewind entry point: lifecycle cleanup and undo logging happen once,
|
|
178
|
+
* and only after the store accepted the target.
|
|
179
|
+
*/
|
|
180
|
+
rewindToTarget(targetId) {
|
|
181
|
+
const removed = this.#record.rewindToTarget(targetId);
|
|
182
|
+
if (removed === null)
|
|
183
|
+
return null;
|
|
184
|
+
this.#completeUndo(removed.discardedTurns);
|
|
185
|
+
return { text: removed.text, ...(removed.images ? { images: removed.images } : {}) };
|
|
186
|
+
}
|
|
187
|
+
// ── Snapshot / State ──────────────────────────────────────────────
|
|
188
|
+
getCurrentSnapshot() {
|
|
189
|
+
const providerFn = getMethod(this.#agentClient, 'getProvider');
|
|
190
|
+
const provider = providerFn
|
|
191
|
+
? providerFn.call(this.#agentClient)
|
|
192
|
+
: this.#settingsService?.get('agent.modelSelection').provider;
|
|
193
|
+
const model = this.#settingsService?.get('agent.modelSelection').model;
|
|
194
|
+
return this.#record.snapshot({
|
|
195
|
+
previousResponseId: this.#providerContinuity.previousResponseId,
|
|
196
|
+
...(model ? { model } : {}),
|
|
197
|
+
...(provider ? { provider } : {}),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
getProviderHistorySnapshot() {
|
|
201
|
+
return this.#record.getProviderHistorySnapshot();
|
|
202
|
+
}
|
|
203
|
+
replaceHistoryAtRevision(expectedRevision, history) {
|
|
204
|
+
return this.#record.replaceHistoryAtRevision(expectedRevision, history);
|
|
205
|
+
}
|
|
206
|
+
exportState() {
|
|
207
|
+
return this.exportPersistedState();
|
|
208
|
+
}
|
|
209
|
+
importState(state) {
|
|
210
|
+
this.importPersistedState(state);
|
|
211
|
+
}
|
|
212
|
+
// ── Shell context / mode notice ───────────────────────────────────
|
|
213
|
+
addShellContext(historyText) {
|
|
214
|
+
this.#record.addShellContext(historyText);
|
|
215
|
+
}
|
|
216
|
+
queueModeNotice(text) {
|
|
217
|
+
// Compose instead of overwrite: a profile transition and tool-toggle
|
|
218
|
+
// warnings (or several toggles in one batch) must all reach the next turn.
|
|
219
|
+
const existing = this.pendingModeNotice;
|
|
220
|
+
this.pendingModeNotice = existing ? `${existing}\n\n${text}` : text;
|
|
221
|
+
}
|
|
222
|
+
previewLargeUncachedInput(input, now = Date.now()) {
|
|
223
|
+
return this.#inputPlanner.previewLargeUncachedInput(input, now, {
|
|
224
|
+
pendingModeNotice: this.pendingModeNotice,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
previewInputSurge(input) {
|
|
228
|
+
return this.#inputPlanner.previewInputSurge(input, {
|
|
229
|
+
pendingModeNotice: this.pendingModeNotice,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
/** No await separates accepted history changes, retirement, reset and undo logging. */
|
|
233
|
+
#completeUndo(count) {
|
|
234
|
+
this.#afterUndo();
|
|
235
|
+
this.#conversationLogger.log({ type: 'undo', removedUserTurns: count, snapshot: this.getCurrentSnapshot() });
|
|
154
236
|
}
|
|
155
237
|
#clearAccessState() {
|
|
156
238
|
if (this.#sessionAccess) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../../../source/services/session/session-lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../../../source/services/session/session-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAgBpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AAIxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,gBAAgB;IAC3B,mEAAmE;IACnE,iBAAiB,GAAkB,IAAI,CAAC;IAExC,aAAa,CAAsB;IACnC,OAAO,CAAqB;IAC5B,OAAO,CAAkB;IACzB,UAAU,CAAkB;IAC5B,SAAS,CAAuC;IAChD,mBAAmB,CAAqB;IACxC,gBAAgB,CAAkB;IAClC,gBAAgB,CAAyB;IACzC,cAAc,CAAiC;IAC/C,oBAAoB,CAA2B;IAC/C,mBAAmB,CAAsC;IAChD,mBAAmB,CAAqB;IACxC,YAAY,CAA0B;IACtC,gBAAgB,CAAoB;IAE7C,YAAY,IAiBX;QACC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACnD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;QAC7C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC;IACrD,CAAC;IAED,oEAAoE;IAEpE;;;OAGG;IACH,YAAY,CAAC,OAA8D;QACzE,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,oBAAoB;QAClB,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,UAAU;QACR,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,oBAAoB;QAKlB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAC/E,CAAC;IAED;;;;;;OAMG;IACH,oBAAoB,CAAC,KAKpB;QACC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACjF,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,mBAAmB,GAErB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,qBAAqB,CAAC,4BAA4B,CAAC;gBACvG,EAAE,MACL,EAAE,mBAAmB,IAAI,CAAC,CAAC;YAC9B,MAAM,sBAAsB,GAExB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,qBAAqB,CAAC,4BAA4B,CAAC;gBACvG,EAAE,MACL,EAAE,sBAAsB,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kEAAkE,EAAE;gBACpF,SAAS,EAAE,qCAAqC;gBAChD,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,QAAQ;gBACf,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC5C,mBAAmB;gBACnB,sBAAsB;aACvB,CAAC,CAAC;QACL,CAAC;QACD,qFAAqF;QACrF,kFAAkF;QAClF,yEAAyE;QACzE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC;YACpC,WAAW,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;SACpF,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;IAED,qEAAqE;IAErE,KAAK;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,qEAAqE;IAErE,gBAAgB;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAClD,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+EAA+E;IAC/E,iBAAiB;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC/C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;YAC3B,IAAI,EAAE,MAAM;YACZ,gBAAgB,EAAE,CAAC;YACnB,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,EAAE,GAAG,KAAK,CAAC,iBAAiB,EAAE;SACvE,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB;QAOhB,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAC3C,CAAC;IAED,mBAAmB;QAOjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC;QACzD,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,cAAc,CAAC,CAAS;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;IACtC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,QAAwB;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC3C,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACvF,CAAC;IAED,qEAAqE;IAErE,kBAAkB;QAChB,MAAM,UAAU,GAAG,SAAS,CAAa,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,UAAU;YACzB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;YACpC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC;QACvE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC3B,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,kBAAkB;YAC/D,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,0BAA0B;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC;IACnD,CAAC;IAED,wBAAwB,CAAC,gBAAwB,EAAE,OAAqC;QACtF,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW;QAKT,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACrC,CAAC;IAED,WAAW,CAAC,KAKX;QACC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,qEAAqE;IAErE,eAAe,CAAC,WAAmB;QACjC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,qEAAqE;QACrE,2EAA2E;QAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,CAAC;IAED,yBAAyB,CAAC,KAAwB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAClE,OAAO,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,KAAK,EAAE,GAAG,EAAE;YAC9D,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,KAAwB;QACxC,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,EAAE;YACjD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,uFAAuF;IACvF,aAAa,CAAC,KAAa;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED,iBAAiB;QACf,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,38 +1,18 @@
|
|
|
1
1
|
import type { ILoggingService } from '../service-interfaces.js';
|
|
2
2
|
import type { SessionToolTracker } from './session-tool-tracker.js';
|
|
3
|
-
import type { ConversationStore } from '../conversation/conversation-store.js';
|
|
4
|
-
import type { ConversationLogger } from '../logging/conversation-logger.js';
|
|
5
|
-
import type { ProviderContinuity } from '../provider-continuity.js';
|
|
6
|
-
import type { OpenAIRootCheckpointLifecycleObserver } from '../openai-root-checkpoint-lifecycle-observer.js';
|
|
7
3
|
import type { AgentStream } from '../agent-stream.js';
|
|
8
4
|
import type { ConversationEvent } from '../conversation/conversation-events.js';
|
|
9
|
-
import { AssistantTurnJournal } from '../logging/assistant-turn-journal.js';
|
|
10
5
|
import { type StreamAccumulator } from '../stream-event-processor.js';
|
|
11
|
-
import
|
|
12
|
-
import { GenerationGuard, type GenerationToken } from '../generation-guard.js';
|
|
6
|
+
import { GenerationGuard } from '../generation-guard.js';
|
|
13
7
|
import { ToolCallMarkerStore } from '../../utils/streaming/extract-command-messages.js';
|
|
14
8
|
import type { SessionIdSource } from './session-identity.js';
|
|
15
|
-
|
|
16
|
-
export type
|
|
17
|
-
kind: 'stale';
|
|
18
|
-
} | {
|
|
19
|
-
kind: 'partial';
|
|
20
|
-
} | {
|
|
21
|
-
kind: 'committed';
|
|
22
|
-
};
|
|
23
|
-
export declare const lastOpenAICompaction: (items: readonly unknown[]) => ProviderOpaqueItem | undefined;
|
|
9
|
+
import type { StreamHistorySource } from '../conversation/conversation-record-stream.js';
|
|
10
|
+
export type { StreamHistorySource } from '../conversation/conversation-record-stream.js';
|
|
24
11
|
export interface SessionStreamProcessorDeps {
|
|
25
12
|
logger: ILoggingService;
|
|
26
13
|
sessionId: SessionIdSource;
|
|
27
14
|
toolTracker: SessionToolTracker;
|
|
28
|
-
conversationStore: ConversationStore;
|
|
29
|
-
conversationLogger: ConversationLogger;
|
|
30
|
-
providerContinuity: ProviderContinuity;
|
|
31
|
-
/** Owned-root OpenAI lifecycle diagnostics; absent for every other client. */
|
|
32
|
-
openAIRootCheckpointLifecycleObserver?: OpenAIRootCheckpointLifecycleObserver;
|
|
33
15
|
generationGuard: GenerationGuard;
|
|
34
|
-
/** Assistant-output journal; every raw run item is fed into it. */
|
|
35
|
-
journal: AssistantTurnJournal;
|
|
36
16
|
/** Cancels provider work when the output safety guard terminates a stream. */
|
|
37
17
|
abortStream?: () => void;
|
|
38
18
|
toolCallMarkers?: ToolCallMarkerStore;
|
|
@@ -48,14 +28,8 @@ export declare class SessionStreamProcessor {
|
|
|
48
28
|
private readonly deps;
|
|
49
29
|
constructor(deps: SessionStreamProcessorDeps);
|
|
50
30
|
/**
|
|
51
|
-
*
|
|
52
|
-
* dedupes tool started events, logs tool results, and returns the accumulator.
|
|
31
|
+
* Projects accepted events, dedupes display events and returns presentation data.
|
|
53
32
|
*/
|
|
54
33
|
process(stream: AgentStream, options: StreamProcessOptions): AsyncGenerator<ConversationEvent, StreamAccumulator, void>;
|
|
55
|
-
/**
|
|
56
|
-
* Finalizes the stream outcome by updating previousResponseId,
|
|
57
|
-
* checking for replayed tools, and updating the conversation store history.
|
|
58
|
-
*/
|
|
59
|
-
finalize(stream: AgentStream, token: GenerationToken, inputMode: 'delta' | 'full_history', source: StreamHistorySource): StreamFinalizationResult;
|
|
60
34
|
}
|
|
61
35
|
//# sourceMappingURL=session-stream-processor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-stream-processor.d.ts","sourceRoot":"","sources":["../../../source/services/session/session-stream-processor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-stream-processor.d.ts","sourceRoot":"","sources":["../../../source/services/session/session-stream-processor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAgD,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACzF,YAAY,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAEzF,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,eAAe,CAAC;IAC3B,WAAW,EAAE,kBAAkB,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;IACjC,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,mBAAmB,CAAC;IAC5B,wBAAwB,EAAE,OAAO,CAAC;IAClC,2BAA2B,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC3C;AAED,qBAAa,sBAAsB;;IAGrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,0BAA0B,EAE5D;IAED;;OAEG;IACI,OAAO,CACZ,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,oBAAoB,GAC5B,cAAc,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAwE5D;CACF"}
|