@downcity/agent 1.1.438 → 1.1.445
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/README.md +25 -18
- package/bin/agent/Agent.d.ts +44 -20
- package/bin/agent/Agent.d.ts.map +1 -1
- package/bin/agent/Agent.js +114 -69
- package/bin/agent/Agent.js.map +1 -1
- package/bin/agent/AgentInstructions.d.ts +18 -4
- package/bin/agent/AgentInstructions.d.ts.map +1 -1
- package/bin/agent/AgentInstructions.js +33 -14
- package/bin/agent/AgentInstructions.js.map +1 -1
- package/bin/agent/AgentMemoryStorage.d.ts +1 -1
- package/bin/agent/AgentMemoryStorage.d.ts.map +1 -1
- package/bin/agent/AgentMemoryStorage.js.map +1 -1
- package/bin/agent/AgentSessions.d.ts +29 -16
- package/bin/agent/AgentSessions.d.ts.map +1 -1
- package/bin/agent/AgentSessions.js +42 -22
- package/bin/agent/AgentSessions.js.map +1 -1
- package/bin/group/Group.d.ts +13 -12
- package/bin/group/Group.d.ts.map +1 -1
- package/bin/group/Group.js +24 -23
- package/bin/group/Group.js.map +1 -1
- package/bin/group/GroupSession.d.ts.map +1 -1
- package/bin/group/GroupSession.js +13 -9
- package/bin/group/GroupSession.js.map +1 -1
- package/bin/group/GroupSessions.d.ts +27 -2
- package/bin/group/GroupSessions.d.ts.map +1 -1
- package/bin/group/GroupSessions.js +68 -21
- package/bin/group/GroupSessions.js.map +1 -1
- package/bin/group/storage/LocalGroupSessionDataStore.d.ts +8 -0
- package/bin/group/storage/LocalGroupSessionDataStore.d.ts.map +1 -1
- package/bin/group/storage/LocalGroupSessionDataStore.js +1 -1
- package/bin/group/storage/LocalGroupSessionDataStore.js.map +1 -1
- package/bin/group/storage/LocalGroupSessionStore.d.ts +64 -5
- package/bin/group/storage/LocalGroupSessionStore.d.ts.map +1 -1
- package/bin/group/storage/LocalGroupSessionStore.js +114 -23
- package/bin/group/storage/LocalGroupSessionStore.js.map +1 -1
- package/bin/index.d.ts +25 -30
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +14 -14
- package/bin/index.js.map +1 -1
- package/bin/{executor/model → model}/ModelGenerate.d.ts +1 -1
- package/bin/model/ModelGenerate.d.ts.map +1 -0
- package/bin/model/ModelGenerate.js.map +1 -0
- package/bin/{executor/model → model}/ModelRequestRunner.d.ts +1 -1
- package/bin/model/ModelRequestRunner.d.ts.map +1 -0
- package/bin/model/ModelRequestRunner.js.map +1 -0
- package/bin/{executor/model → model}/ModelStepRunner.d.ts +6 -7
- package/bin/model/ModelStepRunner.d.ts.map +1 -0
- package/bin/{executor/model → model}/ModelStepRunner.js +16 -10
- package/bin/model/ModelStepRunner.js.map +1 -0
- package/bin/model/ModelStreamConsumer.d.ts.map +1 -0
- package/bin/model/ModelStreamConsumer.js.map +1 -0
- package/bin/model/ModelStreamFailure.d.ts.map +1 -0
- package/bin/model/ModelStreamFailure.js.map +1 -0
- package/bin/model/ToolInputValidation.d.ts +28 -0
- package/bin/model/ToolInputValidation.d.ts.map +1 -0
- package/bin/model/ToolInputValidation.js +37 -0
- package/bin/model/ToolInputValidation.js.map +1 -0
- package/bin/model/messages/ChatMessageMarkup.d.ts.map +1 -0
- package/bin/model/messages/ChatMessageMarkup.js.map +1 -0
- package/bin/{executor → model}/messages/ChatMessageMarkupTypes.d.ts +1 -1
- package/bin/model/messages/ChatMessageMarkupTypes.d.ts.map +1 -0
- package/bin/{executor → model}/messages/ChatMessageMarkupTypes.js +1 -1
- package/bin/model/messages/ChatMessageMarkupTypes.js.map +1 -0
- package/bin/model/messages/SessionAttachmentMapper.d.ts.map +1 -0
- package/bin/model/messages/SessionAttachmentMapper.js.map +1 -0
- package/bin/model/messages/SessionMessageLog.d.ts.map +1 -0
- package/bin/model/messages/SessionMessageLog.js.map +1 -0
- package/bin/model/messages/SessionModelMessages.d.ts.map +1 -0
- package/bin/{executor → model}/messages/SessionModelMessages.js +0 -1
- package/bin/model/messages/SessionModelMessages.js.map +1 -0
- package/bin/model/prompts/SystemPromptAssets.d.ts.map +1 -0
- package/bin/{executor/composer/system/default → model/prompts}/SystemPromptAssets.js +1 -1
- package/bin/model/prompts/SystemPromptAssets.js.map +1 -0
- package/bin/model/prompts/assets/core.prompt.d.ts +7 -0
- package/bin/model/prompts/assets/core.prompt.d.ts.map +1 -0
- package/bin/model/prompts/assets/core.prompt.js +8 -0
- package/bin/model/prompts/assets/core.prompt.js.map +1 -0
- package/bin/session/Session.d.ts +29 -17
- package/bin/session/Session.d.ts.map +1 -1
- package/bin/session/Session.js +161 -134
- package/bin/session/Session.js.map +1 -1
- package/bin/session/input/SessionHookRunner.d.ts +52 -0
- package/bin/session/input/SessionHookRunner.d.ts.map +1 -0
- package/bin/session/input/SessionHookRunner.js +51 -0
- package/bin/session/input/SessionHookRunner.js.map +1 -0
- package/bin/session/input/SessionSystem.d.ts +26 -0
- package/bin/session/input/SessionSystem.d.ts.map +1 -0
- package/bin/session/{SessionSystem.js → input/SessionSystem.js} +27 -23
- package/bin/session/input/SessionSystem.js.map +1 -0
- package/bin/session/input/StepInput.d.ts +77 -0
- package/bin/session/input/StepInput.d.ts.map +1 -0
- package/bin/session/input/StepInput.js +429 -0
- package/bin/session/input/StepInput.js.map +1 -0
- package/bin/session/input/composer/AdaptiveContextCheckpoint.d.ts +33 -0
- package/bin/session/input/composer/AdaptiveContextCheckpoint.d.ts.map +1 -0
- package/bin/session/input/composer/AdaptiveContextCheckpoint.js +83 -0
- package/bin/session/input/composer/AdaptiveContextCheckpoint.js.map +1 -0
- package/bin/session/input/composer/AdaptiveContextParts.d.ts +26 -0
- package/bin/session/input/composer/AdaptiveContextParts.d.ts.map +1 -0
- package/bin/session/input/composer/AdaptiveContextParts.js +124 -0
- package/bin/session/input/composer/AdaptiveContextParts.js.map +1 -0
- package/bin/session/input/composer/ComposerAssembly.d.ts +21 -0
- package/bin/session/input/composer/ComposerAssembly.d.ts.map +1 -0
- package/bin/session/input/composer/ComposerAssembly.js +64 -0
- package/bin/session/input/composer/ComposerAssembly.js.map +1 -0
- package/bin/session/{composer/policies/SessionSummaryPrompts.d.ts → input/composer/ContextSummaryPrompts.d.ts} +5 -3
- package/bin/session/input/composer/ContextSummaryPrompts.d.ts.map +1 -0
- package/bin/session/{composer/policies/SessionSummaryPrompts.js → input/composer/ContextSummaryPrompts.js} +5 -3
- package/bin/session/input/composer/ContextSummaryPrompts.js.map +1 -0
- package/bin/session/input/composer/DefaultSessionComposer.d.ts +24 -0
- package/bin/session/input/composer/DefaultSessionComposer.d.ts.map +1 -0
- package/bin/session/input/composer/DefaultSessionComposer.js +108 -0
- package/bin/session/input/composer/DefaultSessionComposer.js.map +1 -0
- package/bin/session/input/composer/FullHistorySessionComposer.d.ts +19 -0
- package/bin/session/input/composer/FullHistorySessionComposer.d.ts.map +1 -0
- package/bin/session/input/composer/FullHistorySessionComposer.js +36 -0
- package/bin/session/input/composer/FullHistorySessionComposer.js.map +1 -0
- package/bin/session/{SessionLoop.d.ts → loop/SessionLoop.d.ts} +34 -7
- package/bin/session/loop/SessionLoop.d.ts.map +1 -0
- package/bin/session/{SessionLoop.js → loop/SessionLoop.js} +79 -16
- package/bin/session/loop/SessionLoop.js.map +1 -0
- package/bin/session/{SessionQueue.d.ts → loop/SessionQueue.d.ts} +9 -1
- package/bin/session/loop/SessionQueue.d.ts.map +1 -0
- package/bin/session/{SessionQueue.js → loop/SessionQueue.js} +19 -0
- package/bin/session/loop/SessionQueue.js.map +1 -0
- package/bin/session/{SessionState.d.ts → loop/SessionState.d.ts} +4 -5
- package/bin/session/loop/SessionState.d.ts.map +1 -0
- package/bin/session/{SessionState.js → loop/SessionState.js} +6 -25
- package/bin/session/loop/SessionState.js.map +1 -0
- package/bin/session/{SessionTitle.d.ts → loop/SessionTitle.d.ts} +4 -4
- package/bin/session/loop/SessionTitle.d.ts.map +1 -0
- package/bin/session/{SessionTitle.js → loop/SessionTitle.js} +3 -3
- package/bin/session/loop/SessionTitle.js.map +1 -0
- package/bin/session/loop/SessionTitleTask.d.ts.map +1 -0
- package/bin/session/loop/SessionTitleTask.js.map +1 -0
- package/bin/session/{runtime → loop}/SessionTurnCompletion.d.ts +7 -0
- package/bin/session/loop/SessionTurnCompletion.d.ts.map +1 -0
- package/bin/session/{runtime → loop}/SessionTurnCompletion.js +25 -6
- package/bin/session/loop/SessionTurnCompletion.js.map +1 -0
- package/bin/session/loop/SessionTurnContext.d.ts +12 -0
- package/bin/session/loop/SessionTurnContext.d.ts.map +1 -0
- package/bin/session/{runtime → loop}/SessionTurnContext.js +14 -67
- package/bin/session/loop/SessionTurnContext.js.map +1 -0
- package/bin/session/loop/SessionTurnFileDiff.d.ts.map +1 -0
- package/bin/session/{runtime → loop}/SessionTurnFileDiff.js +1 -1
- package/bin/session/loop/SessionTurnFileDiff.js.map +1 -0
- package/bin/session/{messages → loop}/SessionTurnFileDiffBuilder.d.ts +3 -3
- package/bin/session/loop/SessionTurnFileDiffBuilder.d.ts.map +1 -0
- package/bin/session/loop/SessionTurnFileDiffBuilder.js.map +1 -0
- package/bin/session/messages/ApprovalInteraction.d.ts +30 -0
- package/bin/session/messages/ApprovalInteraction.d.ts.map +1 -0
- package/bin/session/messages/ApprovalInteraction.js +61 -0
- package/bin/session/messages/ApprovalInteraction.js.map +1 -0
- package/bin/session/messages/SessionAgentMessageState.d.ts +47 -18
- package/bin/session/messages/SessionAgentMessageState.d.ts.map +1 -1
- package/bin/session/messages/SessionAgentMessageState.js +224 -86
- package/bin/session/messages/SessionAgentMessageState.js.map +1 -1
- package/bin/session/messages/SessionAgentMessageWriter.d.ts +15 -4
- package/bin/session/messages/SessionAgentMessageWriter.d.ts.map +1 -1
- package/bin/session/messages/SessionAgentMessageWriter.js +57 -37
- package/bin/session/messages/SessionAgentMessageWriter.js.map +1 -1
- package/bin/session/messages/SessionAgentParts.d.ts +14 -0
- package/bin/session/messages/SessionAgentParts.d.ts.map +1 -0
- package/bin/session/messages/SessionAgentParts.js +20 -0
- package/bin/session/messages/SessionAgentParts.js.map +1 -0
- package/bin/session/{execution → messages}/SessionAssistantOutputAdapter.d.ts +2 -2
- package/bin/session/messages/SessionAssistantOutputAdapter.d.ts.map +1 -0
- package/bin/session/messages/SessionAssistantOutputAdapter.js.map +1 -0
- package/bin/session/messages/SessionEventHub.d.ts.map +1 -0
- package/bin/session/messages/SessionEventHub.js.map +1 -0
- package/bin/session/messages/SessionInteractions.d.ts +57 -0
- package/bin/session/messages/SessionInteractions.d.ts.map +1 -0
- package/bin/session/messages/SessionInteractions.js +178 -0
- package/bin/session/messages/SessionInteractions.js.map +1 -0
- package/bin/session/messages/SessionJsonValue.d.ts +1 -3
- package/bin/session/messages/SessionJsonValue.d.ts.map +1 -1
- package/bin/session/messages/SessionJsonValue.js +0 -19
- package/bin/session/messages/SessionJsonValue.js.map +1 -1
- package/bin/session/messages/SessionMessageCache.d.ts +55 -0
- package/bin/session/messages/SessionMessageCache.d.ts.map +1 -0
- package/bin/session/messages/SessionMessageCache.js +133 -0
- package/bin/session/messages/SessionMessageCache.js.map +1 -0
- package/bin/session/messages/SessionMessageState.d.ts +17 -0
- package/bin/session/messages/SessionMessageState.d.ts.map +1 -0
- package/bin/session/messages/SessionMessageState.js +34 -0
- package/bin/session/messages/SessionMessageState.js.map +1 -0
- package/bin/session/messages/SessionMessageTimeline.d.ts.map +1 -0
- package/bin/session/{browse → messages}/SessionMessageTimeline.js +0 -1
- package/bin/session/messages/SessionMessageTimeline.js.map +1 -0
- package/bin/session/{SessionMessages.d.ts → messages/SessionMessages.d.ts} +35 -43
- package/bin/session/messages/SessionMessages.d.ts.map +1 -0
- package/bin/session/{SessionMessages.js → messages/SessionMessages.js} +178 -196
- package/bin/session/messages/SessionMessages.js.map +1 -0
- package/bin/session/messages/SessionModelRequestWarning.d.ts.map +1 -0
- package/bin/session/messages/SessionModelRequestWarning.js.map +1 -0
- package/bin/session/messages/SessionMutationFactory.d.ts +26 -0
- package/bin/session/messages/SessionMutationFactory.d.ts.map +1 -0
- package/bin/session/messages/SessionMutationFactory.js +38 -0
- package/bin/session/messages/SessionMutationFactory.js.map +1 -0
- package/bin/session/messages/SessionUserMessage.d.ts +5 -7
- package/bin/session/messages/SessionUserMessage.d.ts.map +1 -1
- package/bin/session/messages/SessionUserMessage.js +5 -28
- package/bin/session/messages/SessionUserMessage.js.map +1 -1
- package/bin/{executor/core-engine/CoreEngineSignals.d.ts → session/runner/AssistantParts.d.ts} +4 -9
- package/bin/session/runner/AssistantParts.d.ts.map +1 -0
- package/bin/{executor/core-engine/CoreEngineSignals.js → session/runner/AssistantParts.js} +4 -17
- package/bin/session/runner/AssistantParts.js.map +1 -0
- package/bin/session/runner/ContextPressure.d.ts +15 -0
- package/bin/session/runner/ContextPressure.d.ts.map +1 -0
- package/bin/{executor/core-engine/CoreEngineContextCompaction.js → session/runner/ContextPressure.js} +11 -11
- package/bin/session/runner/ContextPressure.js.map +1 -0
- package/bin/session/runner/ContextRetry.d.ts +39 -0
- package/bin/session/runner/ContextRetry.d.ts.map +1 -0
- package/bin/{executor/services/ExecutorRecoveryPolicy.js → session/runner/ContextRetry.js} +19 -19
- package/bin/session/runner/ContextRetry.js.map +1 -0
- package/bin/{executor/core-engine/CoreEngineError.d.ts → session/runner/ModelFailure.d.ts} +4 -4
- package/bin/session/runner/ModelFailure.d.ts.map +1 -0
- package/bin/{executor/core-engine/CoreEngineError.js → session/runner/ModelFailure.js} +4 -4
- package/bin/session/runner/ModelFailure.js.map +1 -0
- package/bin/session/runner/SessionExecutor.d.ts +108 -0
- package/bin/session/runner/SessionExecutor.d.ts.map +1 -0
- package/bin/session/runner/SessionExecutor.js +430 -0
- package/bin/session/runner/SessionExecutor.js.map +1 -0
- package/bin/session/runner/ToolLoopDecision.d.ts +60 -0
- package/bin/session/runner/ToolLoopDecision.d.ts.map +1 -0
- package/bin/{executor/core-engine/CoreEngineLoopDecision.js → session/runner/ToolLoopDecision.js} +5 -5
- package/bin/session/runner/ToolLoopDecision.js.map +1 -0
- package/bin/session/runner/ToolLoopLimits.d.ts +30 -0
- package/bin/session/runner/ToolLoopLimits.d.ts.map +1 -0
- package/bin/session/runner/ToolLoopLimits.js +46 -0
- package/bin/session/runner/ToolLoopLimits.js.map +1 -0
- package/bin/session/{browse → storage}/Browse.d.ts +1 -1
- package/bin/session/storage/Browse.d.ts.map +1 -0
- package/bin/session/{browse → storage}/Browse.js +1 -1
- package/bin/session/storage/Browse.js.map +1 -0
- package/bin/session/storage/LocalSessionStore.js +1 -1
- package/bin/session/storage/LocalSessionStore.js.map +1 -1
- package/bin/session/storage/LocalStorePaths.d.ts +0 -2
- package/bin/session/storage/LocalStorePaths.d.ts.map +1 -1
- package/bin/session/storage/LocalStorePaths.js +1 -1
- package/bin/session/storage/LocalStorePaths.js.map +1 -1
- package/bin/session/storage/Metadata.d.ts +1 -23
- package/bin/session/storage/Metadata.d.ts.map +1 -1
- package/bin/session/storage/Metadata.js +0 -18
- package/bin/session/storage/Metadata.js.map +1 -1
- package/bin/session/storage/RuntimeSessionPort.d.ts +0 -4
- package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
- package/bin/session/storage/RuntimeSessionPort.js +0 -1
- package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
- package/bin/session/{preview → storage}/SessionMessagePreview.d.ts.map +1 -1
- package/bin/session/{preview → storage}/SessionMessagePreview.js +0 -1
- package/bin/session/{preview → storage}/SessionMessagePreview.js.map +1 -1
- package/bin/session/storage/SessionStorageCodec.d.ts.map +1 -1
- package/bin/session/storage/SessionStorageCodec.js +36 -18
- package/bin/session/storage/SessionStorageCodec.js.map +1 -1
- package/bin/session/storage/SessionStorageSchema.d.ts +1 -1
- package/bin/session/storage/SessionStorageSchema.js +1 -1
- package/bin/session/storage/SqliteSessionStorage.d.ts +6 -4
- package/bin/session/storage/SqliteSessionStorage.d.ts.map +1 -1
- package/bin/session/storage/SqliteSessionStorage.js +21 -18
- package/bin/session/storage/SqliteSessionStorage.js.map +1 -1
- package/bin/tools/ask/AskQuestionAnswers.d.ts +20 -0
- package/bin/tools/ask/AskQuestionAnswers.d.ts.map +1 -0
- package/bin/tools/ask/AskQuestionAnswers.js +99 -0
- package/bin/tools/ask/AskQuestionAnswers.js.map +1 -0
- package/bin/tools/ask/AskQuestionsTool.d.ts +5 -2
- package/bin/tools/ask/AskQuestionsTool.d.ts.map +1 -1
- package/bin/tools/ask/AskQuestionsTool.js +23 -31
- package/bin/tools/ask/AskQuestionsTool.js.map +1 -1
- package/bin/tools/ask/AskQuestionsToolSchemas.d.ts +1 -1
- package/bin/types/agent/AgentOptions.d.ts +16 -8
- package/bin/types/agent/AgentOptions.d.ts.map +1 -1
- package/bin/types/agent/AgentSessionCollection.d.ts +8 -0
- package/bin/types/agent/AgentSessionCollection.d.ts.map +1 -1
- package/bin/types/agent/SessionActor.d.ts +3 -3
- package/bin/types/agent/SessionActor.d.ts.map +1 -1
- package/bin/types/group/DispatchStrategy.js +1 -1
- package/bin/types/group/DispatchStrategy.js.map +1 -1
- package/bin/types/group/GroupSession.d.ts +41 -1
- package/bin/types/group/GroupSession.d.ts.map +1 -1
- package/bin/types/group/GroupSessionStore.d.ts +30 -3
- package/bin/types/group/GroupSessionStore.d.ts.map +1 -1
- package/bin/types/model/ModelRequest.d.ts.map +1 -0
- package/bin/types/model/ModelRequest.js.map +1 -0
- package/bin/types/sdk/AgentSessionAction.d.ts +1 -9
- package/bin/types/sdk/AgentSessionAction.d.ts.map +1 -1
- package/bin/types/session/{AdaptivePartContextPolicy.d.ts → ContextCheckpoint.d.ts} +10 -9
- package/bin/types/session/ContextCheckpoint.d.ts.map +1 -0
- package/bin/types/session/ContextCheckpoint.js +8 -0
- package/bin/types/session/ContextCheckpoint.js.map +1 -0
- package/bin/types/session/SessionAgentMessageState.d.ts +6 -10
- package/bin/types/session/SessionAgentMessageState.d.ts.map +1 -1
- package/bin/types/session/SessionAgentMessageState.js +3 -2
- package/bin/types/session/SessionAgentMessageState.js.map +1 -1
- package/bin/types/session/SessionComposer.d.ts +65 -36
- package/bin/types/session/SessionComposer.d.ts.map +1 -1
- package/bin/types/session/SessionComposer.js +7 -2
- package/bin/types/session/SessionComposer.js.map +1 -1
- package/bin/types/session/SessionExecution.d.ts +15 -11
- package/bin/types/session/SessionExecution.d.ts.map +1 -1
- package/bin/types/session/SessionExecution.js +1 -1
- package/bin/types/session/SessionInteractions.d.ts +0 -2
- package/bin/types/session/SessionInteractions.d.ts.map +1 -1
- package/bin/types/session/SessionLocalState.d.ts +0 -4
- package/bin/types/session/SessionLocalState.d.ts.map +1 -1
- package/bin/types/session/SessionLoop.d.ts +33 -12
- package/bin/types/session/SessionLoop.d.ts.map +1 -1
- package/bin/types/session/SessionMessages.d.ts +3 -29
- package/bin/types/session/SessionMessages.d.ts.map +1 -1
- package/bin/types/session/SessionOptions.d.ts +16 -13
- package/bin/types/session/SessionOptions.d.ts.map +1 -1
- package/bin/types/session/SessionPort.d.ts +0 -3
- package/bin/types/session/SessionPort.d.ts.map +1 -1
- package/bin/types/session/SessionState.d.ts +0 -1
- package/bin/types/session/SessionState.d.ts.map +1 -1
- package/bin/types/session/SessionSystem.d.ts +10 -12
- package/bin/types/session/SessionSystem.d.ts.map +1 -1
- package/bin/types/session/SessionTool.d.ts +2 -2
- package/bin/types/session/SessionTool.d.ts.map +1 -1
- package/bin/types/session/SessionTurnCompletion.d.ts +12 -2
- package/bin/types/session/SessionTurnCompletion.d.ts.map +1 -1
- package/bin/types/session/SessionTurnFileDiff.d.ts +4 -4
- package/bin/types/session/SessionTurnFileDiff.d.ts.map +1 -1
- package/bin/types/session/{SessionComposition.d.ts → StepInput.d.ts} +17 -15
- package/bin/types/session/StepInput.d.ts.map +1 -0
- package/bin/types/session/StepInput.js +8 -0
- package/bin/types/session/StepInput.js.map +1 -0
- package/bin/types/store/SessionHistoryMeta.d.ts.map +1 -0
- package/bin/types/store/SessionHistoryMeta.js.map +1 -0
- package/bin/types/store/SessionStorage.d.ts +17 -12
- package/bin/types/store/SessionStorage.d.ts.map +1 -1
- package/bin/types/tool/BoundAgentTool.d.ts +36 -0
- package/bin/types/tool/BoundAgentTool.d.ts.map +1 -0
- package/bin/types/tool/BoundAgentTool.js +13 -0
- package/bin/types/tool/BoundAgentTool.js.map +1 -0
- package/bin/types/tools/ask/AskQuestionsTool.d.ts +9 -13
- package/bin/types/tools/ask/AskQuestionsTool.d.ts.map +1 -1
- package/bin/types/tools/ask/AskQuestionsTool.js +3 -2
- package/bin/types/tools/ask/AskQuestionsTool.js.map +1 -1
- package/bin/types/turn/SessionAssistantOutput.d.ts.map +1 -0
- package/bin/types/turn/SessionAssistantOutput.js.map +1 -0
- package/bin/types/{executor → turn}/SessionTurnContext.d.ts +10 -28
- package/bin/types/turn/SessionTurnContext.d.ts.map +1 -0
- package/bin/types/turn/SessionTurnContext.js.map +1 -0
- package/bin/{executor/ids/resolveSessionId.d.ts → utils/ResolveSessionId.d.ts} +1 -1
- package/bin/utils/ResolveSessionId.d.ts.map +1 -0
- package/bin/{executor/ids/resolveSessionId.js → utils/ResolveSessionId.js} +1 -1
- package/bin/utils/ResolveSessionId.js.map +1 -0
- package/bin/utils/Time.d.ts +5 -8
- package/bin/utils/Time.d.ts.map +1 -1
- package/bin/utils/Time.js +5 -54
- package/bin/utils/Time.js.map +1 -1
- package/package.json +2 -2
- package/scripts/ask-question-answers.test.mjs +132 -0
- package/scripts/group-session-archive.test.mjs +193 -0
- package/scripts/{core-engine-model-stream.test.mjs → model-step-runner.test.mjs} +97 -4
- package/scripts/rewrite-build-aliases.mjs +3 -4
- package/scripts/session-action-part.test.mjs +172 -0
- package/scripts/session-agent-message-part-order.test.mjs +13 -7
- package/scripts/{core-engine-context-compaction.test.mjs → session-executor-context-pressure.test.mjs} +40 -32
- package/scripts/{executor-failure-result.test.mjs → session-executor-failure-result.test.mjs} +17 -14
- package/scripts/session-executor-max-steps.test.mjs +143 -0
- package/scripts/session-initialization.test.mjs +3 -4
- package/scripts/session-interaction-migration.test.mjs +145 -0
- package/scripts/session-interaction-mutation.test.mjs +202 -0
- package/scripts/session-messages-error-part.test.mjs +1 -1
- package/scripts/session-messages-error.test.mjs +1 -1
- package/scripts/session-prompt-idempotency.test.mjs +4 -2
- package/scripts/session-queue.test.mjs +21 -1
- package/scripts/session-storage-sqlite.test.mjs +3 -3
- package/scripts/session-system-blocks.test.mjs +61 -39
- package/scripts/session-turn-context.test.mjs +37 -40
- package/scripts/verify-build-aliases.mjs +1 -1
- package/src/agent/Agent.ts +137 -80
- package/src/agent/AgentInstructions.ts +48 -15
- package/src/agent/AgentMemoryStorage.ts +1 -1
- package/src/agent/AgentSessions.ts +60 -38
- package/src/group/Group.ts +27 -24
- package/src/group/GroupSession.ts +12 -8
- package/src/group/GroupSessions.ts +79 -20
- package/src/group/storage/LocalGroupSessionDataStore.ts +9 -1
- package/src/group/storage/LocalGroupSessionStore.ts +138 -28
- package/src/index.ts +35 -52
- package/src/{executor/model → model}/ModelGenerate.ts +3 -3
- package/src/{executor/model → model}/ModelRequestRunner.ts +2 -2
- package/src/{executor/model → model}/ModelStepRunner.ts +22 -19
- package/src/{executor/model → model}/ModelStreamConsumer.ts +1 -1
- package/src/model/README.md +117 -0
- package/src/model/ToolInputValidation.ts +58 -0
- package/src/{executor → model}/messages/ChatMessageMarkupTypes.ts +1 -1
- package/src/{executor → model}/messages/SessionModelMessages.ts +0 -1
- package/src/{executor/composer/system/default → model/prompts}/SystemPromptAssets.ts +1 -1
- package/src/model/prompts/assets/core.prompt.ts +9 -0
- package/src/{executor/composer/system/default → model/prompts}/assets/core.prompt.ts.txt +26 -25
- package/src/session/Session.ts +185 -151
- package/src/session/input/SessionHookRunner.ts +100 -0
- package/src/session/{SessionSystem.ts → input/SessionSystem.ts} +31 -29
- package/src/session/input/StepInput.ts +507 -0
- package/src/session/input/composer/AdaptiveContextCheckpoint.ts +115 -0
- package/src/session/input/composer/AdaptiveContextParts.ts +166 -0
- package/src/session/input/composer/ComposerAssembly.ts +81 -0
- package/src/session/{composer/policies/SessionSummaryPrompts.ts → input/composer/ContextSummaryPrompts.ts} +5 -2
- package/src/session/input/composer/DefaultSessionComposer.ts +147 -0
- package/src/session/input/composer/FullHistorySessionComposer.ts +55 -0
- package/src/session/loop/README.md +28 -0
- package/src/session/{SessionLoop.ts → loop/SessionLoop.ts} +100 -24
- package/src/session/{SessionQueue.ts → loop/SessionQueue.ts} +18 -0
- package/src/session/{SessionState.ts → loop/SessionState.ts} +4 -21
- package/src/session/{SessionTitle.ts → loop/SessionTitle.ts} +3 -3
- package/src/session/{runtime → loop}/SessionTurnCompletion.ts +27 -8
- package/src/session/{runtime → loop}/SessionTurnContext.ts +19 -93
- package/src/session/{runtime → loop}/SessionTurnFileDiff.ts +1 -1
- package/src/session/{messages → loop}/SessionTurnFileDiffBuilder.ts +4 -4
- package/src/session/messages/ApprovalInteraction.ts +77 -0
- package/src/session/messages/README.md +27 -0
- package/src/session/messages/SessionAgentMessageState.ts +324 -113
- package/src/session/messages/SessionAgentMessageWriter.ts +82 -45
- package/src/session/messages/SessionAgentParts.ts +39 -0
- package/src/session/{execution → messages}/SessionAssistantOutputAdapter.ts +2 -2
- package/src/session/messages/SessionInteractions.ts +227 -0
- package/src/session/messages/SessionJsonValue.ts +1 -18
- package/src/session/messages/SessionMessageCache.ts +171 -0
- package/src/session/messages/SessionMessageState.ts +42 -0
- package/src/session/{browse → messages}/SessionMessageTimeline.ts +0 -1
- package/src/session/{SessionMessages.ts → messages/SessionMessages.ts} +225 -284
- package/src/session/messages/SessionMutationFactory.ts +58 -0
- package/src/session/messages/SessionUserMessage.ts +7 -32
- package/src/{executor/core-engine/CoreEngineSignals.ts → session/runner/AssistantParts.ts} +3 -21
- package/src/{executor/core-engine/CoreEngineContextCompaction.ts → session/runner/ContextPressure.ts} +10 -10
- package/src/{executor/services/ExecutorRecoveryPolicy.ts → session/runner/ContextRetry.ts} +25 -25
- package/src/{executor/core-engine/CoreEngineError.ts → session/runner/ModelFailure.ts} +3 -3
- package/src/session/runner/SessionExecutor.ts +633 -0
- package/src/session/runner/ToolLoopDecision.ts +98 -0
- package/src/session/runner/ToolLoopLimits.ts +53 -0
- package/src/session/{browse → storage}/Browse.ts +2 -2
- package/src/session/storage/LocalSessionStore.ts +1 -1
- package/src/session/storage/LocalStorePaths.ts +1 -1
- package/src/session/storage/Metadata.ts +1 -44
- package/src/session/storage/RuntimeSessionPort.ts +0 -5
- package/src/session/{preview → storage}/SessionMessagePreview.ts +0 -1
- package/src/session/storage/SessionStorageCodec.ts +54 -28
- package/src/session/storage/SessionStorageSchema.ts +1 -1
- package/src/session/storage/SqliteSessionStorage.ts +29 -22
- package/src/tools/ask/AskQuestionAnswers.ts +125 -0
- package/src/tools/ask/AskQuestionsTool.ts +32 -37
- package/src/types/agent/AgentOptions.ts +17 -8
- package/src/types/agent/AgentSessionCollection.ts +9 -0
- package/src/types/agent/SessionActor.ts +3 -4
- package/src/types/group/DispatchStrategy.ts +1 -1
- package/src/types/group/GroupSession.ts +44 -1
- package/src/types/group/GroupSessionStore.ts +30 -3
- package/src/types/sdk/AgentSessionAction.ts +1 -14
- package/src/types/session/{AdaptivePartContextPolicy.ts → ContextCheckpoint.ts} +9 -8
- package/src/types/session/SessionAgentMessageState.ts +6 -16
- package/src/types/session/SessionComposer.ts +67 -39
- package/src/types/session/SessionExecution.ts +15 -13
- package/src/types/session/SessionInteractions.ts +0 -2
- package/src/types/session/SessionLocalState.ts +0 -5
- package/src/types/session/SessionLoop.ts +37 -12
- package/src/types/session/SessionMessages.ts +3 -34
- package/src/types/session/SessionOptions.ts +18 -13
- package/src/types/session/SessionPort.ts +0 -4
- package/src/types/session/SessionState.ts +0 -1
- package/src/types/session/SessionSystem.ts +10 -16
- package/src/types/session/SessionTool.ts +2 -2
- package/src/types/session/SessionTurnCompletion.ts +12 -2
- package/src/types/session/SessionTurnFileDiff.ts +4 -4
- package/src/types/session/{SessionComposition.ts → StepInput.ts} +22 -14
- package/src/types/store/SessionStorage.ts +17 -12
- package/src/types/tool/BoundAgentTool.ts +38 -0
- package/src/types/tools/ask/AskQuestionsTool.ts +11 -13
- package/src/types/{executor → turn}/SessionTurnContext.ts +8 -34
- package/src/utils/Time.ts +12 -64
- package/tsconfig.json +1 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/bin/executor/Executor.d.ts +0 -92
- package/bin/executor/Executor.d.ts.map +0 -1
- package/bin/executor/Executor.js +0 -232
- package/bin/executor/Executor.js.map +0 -1
- package/bin/executor/composer/system/default/SystemPromptAssets.d.ts.map +0 -1
- package/bin/executor/composer/system/default/SystemPromptAssets.js.map +0 -1
- package/bin/executor/composer/system/default/assets/core.prompt.d.ts +0 -7
- package/bin/executor/composer/system/default/assets/core.prompt.d.ts.map +0 -1
- package/bin/executor/composer/system/default/assets/core.prompt.js +0 -8
- package/bin/executor/composer/system/default/assets/core.prompt.js.map +0 -1
- package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts +0 -15
- package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts.map +0 -1
- package/bin/executor/core-engine/CoreEngineContextCompaction.js.map +0 -1
- package/bin/executor/core-engine/CoreEngineError.d.ts.map +0 -1
- package/bin/executor/core-engine/CoreEngineError.js.map +0 -1
- package/bin/executor/core-engine/CoreEngineLoopDecision.d.ts +0 -26
- package/bin/executor/core-engine/CoreEngineLoopDecision.d.ts.map +0 -1
- package/bin/executor/core-engine/CoreEngineLoopDecision.js.map +0 -1
- package/bin/executor/core-engine/CoreEngineRunner.d.ts +0 -48
- package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +0 -1
- package/bin/executor/core-engine/CoreEngineRunner.js +0 -343
- package/bin/executor/core-engine/CoreEngineRunner.js.map +0 -1
- package/bin/executor/core-engine/CoreEngineSignals.d.ts.map +0 -1
- package/bin/executor/core-engine/CoreEngineSignals.js.map +0 -1
- package/bin/executor/ids/resolveSessionId.d.ts.map +0 -1
- package/bin/executor/ids/resolveSessionId.js.map +0 -1
- package/bin/executor/messages/ChatMessageMarkup.d.ts.map +0 -1
- package/bin/executor/messages/ChatMessageMarkup.js.map +0 -1
- package/bin/executor/messages/ChatMessageMarkupTypes.d.ts.map +0 -1
- package/bin/executor/messages/ChatMessageMarkupTypes.js.map +0 -1
- package/bin/executor/messages/SessionAttachmentMapper.d.ts.map +0 -1
- package/bin/executor/messages/SessionAttachmentMapper.js.map +0 -1
- package/bin/executor/messages/SessionMessageLog.d.ts.map +0 -1
- package/bin/executor/messages/SessionMessageLog.js.map +0 -1
- package/bin/executor/messages/SessionModelMessages.d.ts.map +0 -1
- package/bin/executor/messages/SessionModelMessages.js.map +0 -1
- package/bin/executor/model/ModelGenerate.d.ts.map +0 -1
- package/bin/executor/model/ModelGenerate.js.map +0 -1
- package/bin/executor/model/ModelRequestRunner.d.ts.map +0 -1
- package/bin/executor/model/ModelRequestRunner.js.map +0 -1
- package/bin/executor/model/ModelStepRunner.d.ts.map +0 -1
- package/bin/executor/model/ModelStepRunner.js.map +0 -1
- package/bin/executor/model/ModelStreamConsumer.d.ts.map +0 -1
- package/bin/executor/model/ModelStreamConsumer.js.map +0 -1
- package/bin/executor/model/ModelStreamFailure.d.ts.map +0 -1
- package/bin/executor/model/ModelStreamFailure.js.map +0 -1
- package/bin/executor/services/ExecutorRecoveryPolicy.d.ts +0 -39
- package/bin/executor/services/ExecutorRecoveryPolicy.d.ts.map +0 -1
- package/bin/executor/services/ExecutorRecoveryPolicy.js.map +0 -1
- package/bin/executor/types/SessionHistoryMeta.d.ts.map +0 -1
- package/bin/executor/types/SessionHistoryMeta.js.map +0 -1
- package/bin/executor/types/SessionLoop.d.ts +0 -59
- package/bin/executor/types/SessionLoop.d.ts.map +0 -1
- package/bin/executor/types/SessionLoop.js +0 -9
- package/bin/executor/types/SessionLoop.js.map +0 -1
- package/bin/executor/types/SessionPrompts.d.ts +0 -14
- package/bin/executor/types/SessionPrompts.d.ts.map +0 -1
- package/bin/executor/types/SessionPrompts.js +0 -8
- package/bin/executor/types/SessionPrompts.js.map +0 -1
- package/bin/session/DefaultSessionComposer.d.ts +0 -24
- package/bin/session/DefaultSessionComposer.d.ts.map +0 -1
- package/bin/session/DefaultSessionComposer.js +0 -99
- package/bin/session/DefaultSessionComposer.js.map +0 -1
- package/bin/session/SessionComposition.d.ts +0 -49
- package/bin/session/SessionComposition.d.ts.map +0 -1
- package/bin/session/SessionComposition.js +0 -309
- package/bin/session/SessionComposition.js.map +0 -1
- package/bin/session/SessionHookPoints.d.ts +0 -15
- package/bin/session/SessionHookPoints.d.ts.map +0 -1
- package/bin/session/SessionHookPoints.js +0 -15
- package/bin/session/SessionHookPoints.js.map +0 -1
- package/bin/session/SessionHooks.d.ts +0 -38
- package/bin/session/SessionHooks.d.ts.map +0 -1
- package/bin/session/SessionHooks.js +0 -71
- package/bin/session/SessionHooks.js.map +0 -1
- package/bin/session/SessionLoop.d.ts.map +0 -1
- package/bin/session/SessionLoop.js.map +0 -1
- package/bin/session/SessionMessages.d.ts.map +0 -1
- package/bin/session/SessionMessages.js.map +0 -1
- package/bin/session/SessionQueue.d.ts.map +0 -1
- package/bin/session/SessionQueue.js.map +0 -1
- package/bin/session/SessionState.d.ts.map +0 -1
- package/bin/session/SessionState.js.map +0 -1
- package/bin/session/SessionSystem.d.ts +0 -19
- package/bin/session/SessionSystem.d.ts.map +0 -1
- package/bin/session/SessionSystem.js.map +0 -1
- package/bin/session/SessionTitle.d.ts.map +0 -1
- package/bin/session/SessionTitle.js.map +0 -1
- package/bin/session/browse/Browse.d.ts.map +0 -1
- package/bin/session/browse/Browse.js.map +0 -1
- package/bin/session/browse/SessionMessageTimeline.d.ts.map +0 -1
- package/bin/session/browse/SessionMessageTimeline.js.map +0 -1
- package/bin/session/composer/policies/AdaptivePartContextPolicy.d.ts +0 -35
- package/bin/session/composer/policies/AdaptivePartContextPolicy.d.ts.map +0 -1
- package/bin/session/composer/policies/AdaptivePartContextPolicy.js +0 -256
- package/bin/session/composer/policies/AdaptivePartContextPolicy.js.map +0 -1
- package/bin/session/composer/policies/FullHistoryContextPolicy.d.ts +0 -24
- package/bin/session/composer/policies/FullHistoryContextPolicy.d.ts.map +0 -1
- package/bin/session/composer/policies/FullHistoryContextPolicy.js +0 -31
- package/bin/session/composer/policies/FullHistoryContextPolicy.js.map +0 -1
- package/bin/session/composer/policies/SessionSummaryPrompts.d.ts.map +0 -1
- package/bin/session/composer/policies/SessionSummaryPrompts.js.map +0 -1
- package/bin/session/control/SessionInteractions.d.ts +0 -39
- package/bin/session/control/SessionInteractions.d.ts.map +0 -1
- package/bin/session/control/SessionInteractions.js +0 -255
- package/bin/session/control/SessionInteractions.js.map +0 -1
- package/bin/session/execution/SessionAssistantOutputAdapter.d.ts.map +0 -1
- package/bin/session/execution/SessionAssistantOutputAdapter.js.map +0 -1
- package/bin/session/execution/tools/SessionShellApprovalAdapter.d.ts +0 -28
- package/bin/session/execution/tools/SessionShellApprovalAdapter.d.ts.map +0 -1
- package/bin/session/execution/tools/SessionShellApprovalAdapter.js +0 -87
- package/bin/session/execution/tools/SessionShellApprovalAdapter.js.map +0 -1
- package/bin/session/messages/SessionAgentActionPartWriter.d.ts +0 -22
- package/bin/session/messages/SessionAgentActionPartWriter.d.ts.map +0 -1
- package/bin/session/messages/SessionAgentActionPartWriter.js +0 -36
- package/bin/session/messages/SessionAgentActionPartWriter.js.map +0 -1
- package/bin/session/messages/SessionMessageInteractionWriter.d.ts +0 -46
- package/bin/session/messages/SessionMessageInteractionWriter.d.ts.map +0 -1
- package/bin/session/messages/SessionMessageInteractionWriter.js +0 -183
- package/bin/session/messages/SessionMessageInteractionWriter.js.map +0 -1
- package/bin/session/messages/SessionTurnFileDiffBuilder.d.ts.map +0 -1
- package/bin/session/messages/SessionTurnFileDiffBuilder.js.map +0 -1
- package/bin/session/runtime/SessionEventHub.d.ts.map +0 -1
- package/bin/session/runtime/SessionEventHub.js.map +0 -1
- package/bin/session/runtime/SessionModelRequestWarning.d.ts.map +0 -1
- package/bin/session/runtime/SessionModelRequestWarning.js.map +0 -1
- package/bin/session/runtime/SessionTitleTask.d.ts.map +0 -1
- package/bin/session/runtime/SessionTitleTask.js.map +0 -1
- package/bin/session/runtime/SessionTurnCompletion.d.ts.map +0 -1
- package/bin/session/runtime/SessionTurnCompletion.js.map +0 -1
- package/bin/session/runtime/SessionTurnContext.d.ts +0 -29
- package/bin/session/runtime/SessionTurnContext.d.ts.map +0 -1
- package/bin/session/runtime/SessionTurnContext.js.map +0 -1
- package/bin/session/runtime/SessionTurnFileDiff.d.ts.map +0 -1
- package/bin/session/runtime/SessionTurnFileDiff.js.map +0 -1
- package/bin/types/action/ActionResult.d.ts +0 -35
- package/bin/types/action/ActionResult.d.ts.map +0 -1
- package/bin/types/action/ActionResult.js +0 -18
- package/bin/types/action/ActionResult.js.map +0 -1
- package/bin/types/executor/ModelRequest.d.ts.map +0 -1
- package/bin/types/executor/ModelRequest.js.map +0 -1
- package/bin/types/executor/SessionAssistantOutput.d.ts.map +0 -1
- package/bin/types/executor/SessionAssistantOutput.js.map +0 -1
- package/bin/types/executor/SessionToolExecutionContext.d.ts +0 -23
- package/bin/types/executor/SessionToolExecutionContext.d.ts.map +0 -1
- package/bin/types/executor/SessionToolExecutionContext.js +0 -10
- package/bin/types/executor/SessionToolExecutionContext.js.map +0 -1
- package/bin/types/executor/SessionTurnContext.d.ts.map +0 -1
- package/bin/types/executor/SessionTurnContext.js.map +0 -1
- package/bin/types/session/AdaptivePartContextPolicy.d.ts.map +0 -1
- package/bin/types/session/AdaptivePartContextPolicy.js +0 -7
- package/bin/types/session/AdaptivePartContextPolicy.js.map +0 -1
- package/bin/types/session/SessionComposition.d.ts.map +0 -1
- package/bin/types/session/SessionComposition.js +0 -8
- package/bin/types/session/SessionComposition.js.map +0 -1
- package/bin/types/session/SessionContextPolicy.d.ts +0 -70
- package/bin/types/session/SessionContextPolicy.d.ts.map +0 -1
- package/bin/types/session/SessionContextPolicy.js +0 -8
- package/bin/types/session/SessionContextPolicy.js.map +0 -1
- package/bin/types/tools/ToolActionExecutionContext.d.ts +0 -30
- package/bin/types/tools/ToolActionExecutionContext.d.ts.map +0 -1
- package/bin/types/tools/ToolActionExecutionContext.js +0 -8
- package/bin/types/tools/ToolActionExecutionContext.js.map +0 -1
- package/src/executor/Executor.ts +0 -319
- package/src/executor/README.md +0 -92
- package/src/executor/composer/system/default/assets/core.prompt.ts +0 -9
- package/src/executor/core-engine/CoreEngineLoopDecision.ts +0 -63
- package/src/executor/core-engine/CoreEngineRunner.ts +0 -458
- package/src/executor/types/SessionLoop.ts +0 -69
- package/src/executor/types/SessionPrompts.ts +0 -14
- package/src/session/DefaultSessionComposer.ts +0 -123
- package/src/session/SessionComposition.ts +0 -370
- package/src/session/SessionHookPoints.ts +0 -17
- package/src/session/SessionHooks.ts +0 -85
- package/src/session/composer/policies/AdaptivePartContextPolicy.ts +0 -307
- package/src/session/composer/policies/FullHistoryContextPolicy.ts +0 -36
- package/src/session/control/SessionInteractions.ts +0 -311
- package/src/session/execution/tools/SessionShellApprovalAdapter.ts +0 -105
- package/src/session/messages/SessionAgentActionPartWriter.ts +0 -54
- package/src/session/messages/SessionMessageInteractionWriter.ts +0 -279
- package/src/types/action/ActionResult.ts +0 -50
- package/src/types/executor/SessionToolExecutionContext.ts +0 -26
- package/src/types/session/SessionContextPolicy.ts +0 -77
- package/src/types/tools/ToolActionExecutionContext.ts +0 -32
- /package/bin/{executor/model → model}/ModelGenerate.js +0 -0
- /package/bin/{executor/model → model}/ModelRequestRunner.js +0 -0
- /package/bin/{executor/model → model}/ModelStreamConsumer.d.ts +0 -0
- /package/bin/{executor/model → model}/ModelStreamConsumer.js +0 -0
- /package/bin/{executor/model → model}/ModelStreamFailure.d.ts +0 -0
- /package/bin/{executor/model → model}/ModelStreamFailure.js +0 -0
- /package/bin/{executor → model}/messages/ChatMessageMarkup.d.ts +0 -0
- /package/bin/{executor → model}/messages/ChatMessageMarkup.js +0 -0
- /package/bin/{executor → model}/messages/SessionAttachmentMapper.d.ts +0 -0
- /package/bin/{executor → model}/messages/SessionAttachmentMapper.js +0 -0
- /package/bin/{executor → model}/messages/SessionMessageLog.d.ts +0 -0
- /package/bin/{executor → model}/messages/SessionMessageLog.js +0 -0
- /package/bin/{executor → model}/messages/SessionModelMessages.d.ts +0 -0
- /package/bin/{executor/composer/system/default → model/prompts}/SystemPromptAssets.d.ts +0 -0
- /package/bin/session/{runtime → loop}/SessionTitleTask.d.ts +0 -0
- /package/bin/session/{runtime → loop}/SessionTitleTask.js +0 -0
- /package/bin/session/{runtime → loop}/SessionTurnFileDiff.d.ts +0 -0
- /package/bin/session/{messages → loop}/SessionTurnFileDiffBuilder.js +0 -0
- /package/bin/session/{execution → messages}/SessionAssistantOutputAdapter.js +0 -0
- /package/bin/session/{runtime → messages}/SessionEventHub.d.ts +0 -0
- /package/bin/session/{runtime → messages}/SessionEventHub.js +0 -0
- /package/bin/session/{browse → messages}/SessionMessageTimeline.d.ts +0 -0
- /package/bin/session/{runtime → messages}/SessionModelRequestWarning.d.ts +0 -0
- /package/bin/session/{runtime → messages}/SessionModelRequestWarning.js +0 -0
- /package/bin/session/{preview → storage}/SessionMessagePreview.d.ts +0 -0
- /package/bin/types/{executor → model}/ModelRequest.d.ts +0 -0
- /package/bin/types/{executor → model}/ModelRequest.js +0 -0
- /package/bin/{executor/types → types/store}/SessionHistoryMeta.d.ts +0 -0
- /package/bin/{executor/types → types/store}/SessionHistoryMeta.js +0 -0
- /package/bin/types/{executor → turn}/SessionAssistantOutput.d.ts +0 -0
- /package/bin/types/{executor → turn}/SessionAssistantOutput.js +0 -0
- /package/bin/types/{executor → turn}/SessionTurnContext.js +0 -0
- /package/src/{executor/model → model}/ModelStreamFailure.ts +0 -0
- /package/src/{executor → model}/messages/ChatMessageMarkup.ts +0 -0
- /package/src/{executor → model}/messages/SessionAttachmentMapper.ts +0 -0
- /package/src/{executor → model}/messages/SessionMessageLog.ts +0 -0
- /package/src/session/{runtime → loop}/SessionTitleTask.ts +0 -0
- /package/src/session/{runtime → messages}/SessionEventHub.ts +0 -0
- /package/src/session/{runtime → messages}/SessionModelRequestWarning.ts +0 -0
- /package/src/types/{executor → model}/ModelRequest.ts +0 -0
- /package/src/{executor/types → types/store}/SessionHistoryMeta.ts +0 -0
- /package/src/types/{executor → turn}/SessionAssistantOutput.ts +0 -0
- /package/src/{executor/ids/resolveSessionId.ts → utils/ResolveSessionId.ts} +0 -0
|
@@ -9,46 +9,43 @@
|
|
|
9
9
|
import { generate_id } from "@/utils/Id.js";
|
|
10
10
|
import { SessionAgentMessageWriter } from "@/session/messages/SessionAgentMessageWriter.js";
|
|
11
11
|
import { SessionAgentMessageState } from "@/session/messages/SessionAgentMessageState.js";
|
|
12
|
-
import { SessionAgentActionPartWriter } from "@/session/messages/SessionAgentActionPartWriter.js";
|
|
13
12
|
import {
|
|
14
13
|
has_assistant_result_content,
|
|
15
|
-
normalize_canonical_session_user_parts,
|
|
16
14
|
normalize_session_user_parts,
|
|
17
15
|
} from "@/session/messages/SessionUserMessage.js";
|
|
18
16
|
import type { JsonObject } from "@downcity/type";
|
|
19
17
|
import type {
|
|
20
18
|
ListSessionMessagesInput,
|
|
19
|
+
SessionActionStatus,
|
|
21
20
|
SessionAgentActionPart,
|
|
22
21
|
SessionAgentErrorPart,
|
|
23
|
-
|
|
22
|
+
SessionAgentInteraction,
|
|
24
23
|
SessionAgentMessage,
|
|
25
|
-
SessionAgentMessagePart,
|
|
26
24
|
SessionMessage,
|
|
27
25
|
SessionMessagePage,
|
|
28
26
|
SessionUserMessage,
|
|
29
27
|
SessionUserMessagePart,
|
|
30
28
|
} from "@downcity/type";
|
|
31
|
-
import
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
import { SessionMessageCache } from "@/session/messages/SessionMessageCache.js";
|
|
30
|
+
import { resolve_session_message_state } from "@/session/messages/SessionMessageState.js";
|
|
31
|
+
import {
|
|
32
|
+
next_agent_part_sequence,
|
|
33
|
+
resolve_changed_agent_parts,
|
|
34
|
+
} from "@/session/messages/SessionAgentParts.js";
|
|
35
35
|
import type { SessionMessageStorageStats } from "@/types/store/SessionStorage.js";
|
|
36
|
-
import type { SessionStreamingToolLocation } from "@/types/session/SessionTool.js";
|
|
37
36
|
import type {
|
|
38
37
|
SessionInteractionCloseInput,
|
|
39
38
|
SessionInteractionRequest,
|
|
40
39
|
SessionInteractionResponse,
|
|
41
40
|
} from "@downcity/type";
|
|
42
41
|
import type { SessionActionEvent } from "@downcity/type";
|
|
43
|
-
import { persist_user_prompt_file_parts } from "
|
|
42
|
+
import { persist_user_prompt_file_parts } from "@/model/messages/SessionAttachmentMapper.js";
|
|
44
43
|
import type {
|
|
45
|
-
AppendCompletedAgentMessageInput,
|
|
46
44
|
AppendExternalSessionAgentMessageInput,
|
|
47
45
|
AppendExternalSessionUserMessageInput,
|
|
48
46
|
AppendSessionAgentErrorPartInput,
|
|
49
47
|
AppendSessionPromptMessageInput,
|
|
50
48
|
AppendSessionUserMessageInput,
|
|
51
|
-
OpenSessionAgentActionPartInput,
|
|
52
49
|
OpenSessionAgentMessageInput,
|
|
53
50
|
SessionMessagesOptions,
|
|
54
51
|
} from "@/types/session/SessionMessages.js";
|
|
@@ -56,7 +53,6 @@ import type { SessionStorage } from "@/types/store/SessionStorage.js";
|
|
|
56
53
|
import type { SessionAttachmentStore } from "@/types/store/SessionAttachmentStore.js";
|
|
57
54
|
|
|
58
55
|
export { SessionAgentMessageWriter } from "@/session/messages/SessionAgentMessageWriter.js";
|
|
59
|
-
export { SessionAgentActionPartWriter } from "@/session/messages/SessionAgentActionPartWriter.js";
|
|
60
56
|
export { normalize_session_user_parts } from "@/session/messages/SessionUserMessage.js";
|
|
61
57
|
|
|
62
58
|
/** 唯一 Session Message 写入服务。 */
|
|
@@ -64,8 +60,8 @@ export class SessionMessages {
|
|
|
64
60
|
readonly session_id: string;
|
|
65
61
|
private readonly store: SessionStorage;
|
|
66
62
|
private readonly attachment_store: SessionAttachmentStore;
|
|
67
|
-
|
|
68
|
-
private readonly
|
|
63
|
+
/** Message 运行缓存与 Mutation 发布边界。 */
|
|
64
|
+
private readonly cache: SessionMessageCache;
|
|
69
65
|
/** Assistant 草稿与 Interaction 的串行状态转换器。 */
|
|
70
66
|
private readonly agent_state: SessionAgentMessageState;
|
|
71
67
|
/** 当前 Message 恢复事务;并发初始化共享同一个 Promise。 */
|
|
@@ -75,19 +71,23 @@ export class SessionMessages {
|
|
|
75
71
|
this.session_id = String(options.session_id || "").trim();
|
|
76
72
|
this.store = options.store;
|
|
77
73
|
this.attachment_store = options.attachment_store;
|
|
78
|
-
this.publish = options.publish;
|
|
79
74
|
if (!this.session_id) throw new Error("SessionMessages requires session_id");
|
|
75
|
+
this.cache = new SessionMessageCache({
|
|
76
|
+
session_id: this.session_id,
|
|
77
|
+
publish: options.publish,
|
|
78
|
+
});
|
|
80
79
|
this.agent_state = new SessionAgentMessageState({
|
|
81
80
|
session_id: this.session_id,
|
|
82
81
|
store: this.store,
|
|
83
|
-
|
|
84
|
-
accept_message: (message, publish_mutation) =>
|
|
85
|
-
this.accept_message(message, publish_mutation),
|
|
86
|
-
project_mutation: (mutation, message) =>
|
|
87
|
-
this.accept_mutation(mutation, message),
|
|
82
|
+
cache: this.cache,
|
|
88
83
|
});
|
|
89
84
|
}
|
|
90
85
|
|
|
86
|
+
/** 该 Message 是否仍由未收口的 writer 持有;终态推导与 Action 归属共同依赖它。 */
|
|
87
|
+
private is_held_by_writer(message_id: string): boolean {
|
|
88
|
+
return this.cache.is_held(message_id);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
91
|
/** 恢复已有 Message,并收口进程中断遗留的运行状态。 */
|
|
92
92
|
async initialize(): Promise<void> {
|
|
93
93
|
if (!this.initialize_promise) {
|
|
@@ -108,9 +108,7 @@ export class SessionMessages {
|
|
|
108
108
|
private async restore_messages(): Promise<void> {
|
|
109
109
|
await this.store.initialize();
|
|
110
110
|
const persisted_messages = await this.store.list_recoverable_agent_messages();
|
|
111
|
-
this.messages_by_id.clear();
|
|
112
111
|
for (const message of persisted_messages) {
|
|
113
|
-
this.remember_message(message);
|
|
114
112
|
const updated_at = Date.now();
|
|
115
113
|
const recovered: SessionAgentMessage = {
|
|
116
114
|
...message,
|
|
@@ -125,23 +123,31 @@ export class SessionMessages {
|
|
|
125
123
|
description: part.description || "Action interrupted before completion.",
|
|
126
124
|
};
|
|
127
125
|
}
|
|
128
|
-
if (part.type === "
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
status
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
126
|
+
if (part.type === "tool") {
|
|
127
|
+
const existing_interactions = part.interactions ?? [];
|
|
128
|
+
const had_pending_interaction = existing_interactions.some(
|
|
129
|
+
(interaction) => interaction.status === "pending",
|
|
130
|
+
);
|
|
131
|
+
const interactions = had_pending_interaction
|
|
132
|
+
? existing_interactions.map((interaction) =>
|
|
133
|
+
interaction.status === "pending"
|
|
134
|
+
? {
|
|
135
|
+
...interaction,
|
|
136
|
+
status: "cancelled" as const,
|
|
137
|
+
cancel_reason: "runtime_interrupted" as const,
|
|
138
|
+
resolved_at: updated_at,
|
|
139
|
+
}
|
|
140
|
+
: interaction,
|
|
141
|
+
)
|
|
142
|
+
: part.interactions;
|
|
143
|
+
if (part.state === "completed" || part.state === "failed") {
|
|
144
|
+
return had_pending_interaction ? { ...part, interactions } : part;
|
|
145
|
+
}
|
|
141
146
|
return {
|
|
142
147
|
...part,
|
|
143
148
|
state: "failed" as const,
|
|
144
149
|
error: "Tool interrupted before completion.",
|
|
150
|
+
interactions,
|
|
145
151
|
};
|
|
146
152
|
}
|
|
147
153
|
if (
|
|
@@ -153,10 +159,7 @@ export class SessionMessages {
|
|
|
153
159
|
return part;
|
|
154
160
|
}), {
|
|
155
161
|
part_id: `error:${generate_id()}`,
|
|
156
|
-
sequence: message.parts
|
|
157
|
-
(sequence, part) => Math.max(sequence, part.sequence + 1),
|
|
158
|
-
1,
|
|
159
|
-
),
|
|
162
|
+
sequence: next_agent_part_sequence(message.parts),
|
|
160
163
|
type: "error",
|
|
161
164
|
scope: message.turn_id ? "turn" : "session",
|
|
162
165
|
code: "runtime_interrupted",
|
|
@@ -164,19 +167,20 @@ export class SessionMessages {
|
|
|
164
167
|
recoverable: true,
|
|
165
168
|
}],
|
|
166
169
|
};
|
|
167
|
-
const changed_parts = resolve_changed_agent_parts(message, recovered);
|
|
170
|
+
const changed_parts = resolve_changed_agent_parts(message.parts, recovered.parts);
|
|
168
171
|
await this.store.update_message({
|
|
169
172
|
message: recovered,
|
|
170
173
|
expected_revision: message.revision,
|
|
171
174
|
changed_parts,
|
|
172
175
|
});
|
|
173
|
-
|
|
176
|
+
// 恢复不属于本次订阅范围,只更新内存事实,不发布 Mutation。
|
|
177
|
+
this.cache.accept(recovered, false);
|
|
174
178
|
}
|
|
175
179
|
}
|
|
176
180
|
|
|
177
181
|
/** 同步读取当前内存 Message。 */
|
|
178
182
|
get_message(message_id: string): SessionMessage | undefined {
|
|
179
|
-
return this.
|
|
183
|
+
return this.cache.get(message_id);
|
|
180
184
|
}
|
|
181
185
|
|
|
182
186
|
/** 追加一条 canonical User Message。 */
|
|
@@ -196,52 +200,52 @@ export class SessionMessages {
|
|
|
196
200
|
created_at,
|
|
197
201
|
updated_at: created_at,
|
|
198
202
|
role: "user",
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
203
|
+
// 调用方只提供内容;part_id 是全局主键,必须在这里统一分配。
|
|
204
|
+
parts: input.parts.map((part, index) => ({
|
|
205
|
+
...structuredClone(part),
|
|
206
|
+
sequence: index + 1,
|
|
207
|
+
part_id: `${message_id}:part:${String(index + 1)}`,
|
|
202
208
|
})),
|
|
203
209
|
}));
|
|
204
|
-
|
|
210
|
+
if (message.role !== "user") {
|
|
211
|
+
throw new Error(`User Message expected: ${message.message_id}`);
|
|
212
|
+
}
|
|
213
|
+
return message;
|
|
205
214
|
}
|
|
206
215
|
|
|
207
216
|
/** 创建可持续接收 chunk 的 Assistant Message。 */
|
|
208
217
|
async open_agent_message(
|
|
209
218
|
input: OpenSessionAgentMessageInput,
|
|
210
219
|
): Promise<SessionAgentMessageWriter> {
|
|
211
|
-
const
|
|
212
|
-
message_id
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
visibility: input.visibility || "visible",
|
|
220
|
-
created_at,
|
|
221
|
-
updated_at: created_at,
|
|
222
|
-
role: "agent",
|
|
223
|
-
state: "streaming",
|
|
224
|
-
parts: [],
|
|
225
|
-
}), true)) as SessionAgentMessage;
|
|
226
|
-
return new SessionAgentMessageWriter(this, message.message_id);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/** 直接写入一条已完成 Assistant Message。 */
|
|
230
|
-
async append_completed_agent_message(
|
|
231
|
-
input: AppendCompletedAgentMessageInput,
|
|
232
|
-
): Promise<SessionAgentMessage> {
|
|
233
|
-
const turn_id = input.turn_id || `external:${this.session_id}:${generate_id()}`;
|
|
234
|
-
const writer = await this.open_agent_message({
|
|
235
|
-
turn_id,
|
|
236
|
-
visibility: input.visibility || "visible",
|
|
220
|
+
const message_id =
|
|
221
|
+
String(input.message_id || "").trim() ||
|
|
222
|
+
`agent:${this.session_id}:${generate_id()}`;
|
|
223
|
+
// 先建立持有关系,创建消息时的首次接受才会被登记为可写 Message。
|
|
224
|
+
const writer = new SessionAgentMessageWriter({
|
|
225
|
+
message_id,
|
|
226
|
+
state: this.agent_state,
|
|
227
|
+
cache: this.cache,
|
|
237
228
|
});
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
229
|
+
this.cache.set_held(message_id);
|
|
230
|
+
try {
|
|
231
|
+
await this.create_message((sequence, created_at) => ({
|
|
232
|
+
message_id,
|
|
233
|
+
session_id: this.session_id,
|
|
234
|
+
turn_id: input.turn_id,
|
|
235
|
+
sequence,
|
|
236
|
+
revision: 1,
|
|
237
|
+
visibility: input.visibility || "visible",
|
|
238
|
+
created_at,
|
|
239
|
+
updated_at: created_at,
|
|
240
|
+
role: "agent",
|
|
241
|
+
state: "streaming",
|
|
242
|
+
parts: [],
|
|
243
|
+
}), true);
|
|
244
|
+
} catch (error) {
|
|
245
|
+
this.cache.release_held(message_id);
|
|
246
|
+
throw error;
|
|
243
247
|
}
|
|
244
|
-
return
|
|
248
|
+
return writer;
|
|
245
249
|
}
|
|
246
250
|
|
|
247
251
|
/** 把公开 Session API 的 User 输入转换为 canonical Message 并持久化。 */
|
|
@@ -302,27 +306,35 @@ export class SessionMessages {
|
|
|
302
306
|
return await this.store.read_latest_agent_message(turn_id);
|
|
303
307
|
}
|
|
304
308
|
|
|
305
|
-
/**
|
|
309
|
+
/**
|
|
310
|
+
* 按稳定 Action ID 落盘一条 canonical Action。
|
|
311
|
+
*
|
|
312
|
+
* 判定顺序固定,三分支互斥:
|
|
313
|
+
* 1. 该 Turn 存在 writer 持有的正文 Message → Action 作为其 Part 内联;
|
|
314
|
+
* 2. 否则存在 id 等于 action_id 的载体 Message → 原地更新其中的 Action Part;
|
|
315
|
+
* 3. 否则新建仅含该 Action Part 的载体 Message。
|
|
316
|
+
*
|
|
317
|
+
* 三个分支都只写 Part,Message 终态统一由 SessionMessageState 推导。
|
|
318
|
+
*/
|
|
306
319
|
async persist_action(
|
|
307
320
|
event: SessionActionEvent,
|
|
308
321
|
options?: { publish_mutation?: boolean },
|
|
309
322
|
): Promise<void> {
|
|
323
|
+
await this.ensure_initialized();
|
|
310
324
|
const publish_mutation = options?.publish_mutation !== false;
|
|
325
|
+
const body = event.turn_id ? this.find_open_message(event.turn_id) : undefined;
|
|
326
|
+
if (body) {
|
|
327
|
+
await this.agent_state.commit_parts(
|
|
328
|
+
body.message_id,
|
|
329
|
+
[this.resolve_streaming_action_part(body, event)],
|
|
330
|
+
{ publish_mutation },
|
|
331
|
+
);
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
311
334
|
const existing = this.get_message(event.action_id) ||
|
|
312
335
|
await this.store.read_message(event.action_id) || undefined;
|
|
313
336
|
if (!existing) {
|
|
314
|
-
|
|
315
|
-
message_id: event.action_id,
|
|
316
|
-
turn_id: event.turn_id,
|
|
317
|
-
action_type: event.action_type,
|
|
318
|
-
title: event.title,
|
|
319
|
-
description: event.description,
|
|
320
|
-
publish_mutation,
|
|
321
|
-
});
|
|
322
|
-
if (event.status === "completed") await writer.complete();
|
|
323
|
-
if (event.status === "failed") {
|
|
324
|
-
await writer.fail(event.description || event.title);
|
|
325
|
-
}
|
|
337
|
+
await this.create_standalone_action_message(event, publish_mutation);
|
|
326
338
|
return;
|
|
327
339
|
}
|
|
328
340
|
if (existing.role === "agent" && event.status !== "running") {
|
|
@@ -333,41 +345,72 @@ export class SessionMessages {
|
|
|
333
345
|
}
|
|
334
346
|
}
|
|
335
347
|
|
|
336
|
-
/**
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
const
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
348
|
+
/** 查找指定 Turn 当前由 writer 持有的正文 Message(同一时刻至多一条)。 */
|
|
349
|
+
private find_open_message(turn_id: string): SessionAgentMessage | undefined {
|
|
350
|
+
const message_id = this.cache.held_message_id();
|
|
351
|
+
if (!message_id) return undefined;
|
|
352
|
+
const message = this.get_message(message_id);
|
|
353
|
+
if (!message || message.role !== "agent" || message.turn_id !== turn_id) {
|
|
354
|
+
return undefined;
|
|
355
|
+
}
|
|
356
|
+
return message;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/** 复用已有 Action Part 身份,为被 writer 持有的 Agent Message 构造对齐的 Action Part。 */
|
|
360
|
+
private resolve_streaming_action_part(
|
|
361
|
+
target: SessionAgentMessage,
|
|
362
|
+
event: SessionActionEvent,
|
|
363
|
+
): SessionAgentActionPart {
|
|
364
|
+
const part_id = `action-part:${event.action_id}`;
|
|
365
|
+
const existing = target.parts.find(
|
|
366
|
+
(part): part is SessionAgentActionPart =>
|
|
367
|
+
part.type === "action" && part.part_id === part_id,
|
|
368
|
+
);
|
|
369
|
+
return create_action_part({
|
|
370
|
+
action_id: event.action_id,
|
|
371
|
+
part_id,
|
|
372
|
+
sequence: existing?.sequence ?? next_agent_part_sequence(target.parts),
|
|
373
|
+
action_type: event.action_type,
|
|
374
|
+
state: event.status,
|
|
375
|
+
title: event.title,
|
|
376
|
+
description: event.description,
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* 创建只包含单个 Action Part 的独立 Agent Message。
|
|
382
|
+
*
|
|
383
|
+
* 只在当前 Turn 没有 writer 持有的 Agent Message 时使用;Action Part 直接以事件声明的
|
|
384
|
+
* 目标状态落盘,不再先建后改,避免同一个 Action 产生两次 Mutation。
|
|
385
|
+
*/
|
|
386
|
+
private async create_standalone_action_message(
|
|
387
|
+
event: SessionActionEvent,
|
|
388
|
+
publish_mutation: boolean,
|
|
389
|
+
): Promise<void> {
|
|
390
|
+
const description = event.description ??
|
|
391
|
+
(event.status === "failed" ? event.title : undefined);
|
|
392
|
+
const parts = [create_action_part({
|
|
393
|
+
action_id: event.action_id,
|
|
394
|
+
part_id: `action-part:${event.action_id}`,
|
|
395
|
+
sequence: 1,
|
|
396
|
+
action_type: event.action_type,
|
|
397
|
+
state: event.status,
|
|
398
|
+
title: event.title,
|
|
399
|
+
...(description ? { description } : {}),
|
|
400
|
+
})];
|
|
401
|
+
await this.create_message((sequence, created_at) => ({
|
|
402
|
+
message_id: event.action_id,
|
|
345
403
|
session_id: this.session_id,
|
|
346
|
-
...(
|
|
404
|
+
...(event.turn_id ? { turn_id: event.turn_id } : {}),
|
|
347
405
|
sequence,
|
|
348
406
|
revision: 1,
|
|
349
407
|
visibility: "visible",
|
|
350
408
|
created_at,
|
|
351
409
|
updated_at: created_at,
|
|
352
410
|
role: "agent",
|
|
353
|
-
state:
|
|
354
|
-
parts
|
|
355
|
-
|
|
356
|
-
sequence: 1,
|
|
357
|
-
type: "action",
|
|
358
|
-
action_id: message_id,
|
|
359
|
-
action_type: input.action_type,
|
|
360
|
-
state: "running",
|
|
361
|
-
title: input.title,
|
|
362
|
-
...(input.description ? { description: input.description } : {}),
|
|
363
|
-
...(input.data ? { data: structuredClone(input.data) } : {}),
|
|
364
|
-
}],
|
|
365
|
-
}), false, input.publish_mutation !== false)) as SessionAgentMessage;
|
|
366
|
-
return new SessionAgentActionPartWriter(
|
|
367
|
-
this,
|
|
368
|
-
message.message_id,
|
|
369
|
-
input.publish_mutation !== false,
|
|
370
|
-
);
|
|
411
|
+
state: resolve_session_message_state(parts, false),
|
|
412
|
+
parts,
|
|
413
|
+
}), event.status === "running", publish_mutation);
|
|
371
414
|
}
|
|
372
415
|
|
|
373
416
|
/** 更新 Action 状态,同时保持 message_id 与 sequence 不变。 */
|
|
@@ -377,9 +420,10 @@ export class SessionMessages {
|
|
|
377
420
|
changes?: { title?: string; description?: string; data?: JsonObject },
|
|
378
421
|
options?: { publish_mutation?: boolean },
|
|
379
422
|
): Promise<SessionAgentMessage> {
|
|
380
|
-
const current_message =
|
|
381
|
-
|
|
382
|
-
|
|
423
|
+
const current_message = this.get_message(message_id) || await this.store.read_message(message_id);
|
|
424
|
+
if (!current_message || current_message.role !== "agent") {
|
|
425
|
+
throw new Error(`Session agent Message not found: ${message_id}`);
|
|
426
|
+
}
|
|
383
427
|
const action = current_message.parts.find(
|
|
384
428
|
(part): part is SessionAgentActionPart => part.type === "action",
|
|
385
429
|
);
|
|
@@ -393,11 +437,15 @@ export class SessionMessages {
|
|
|
393
437
|
: {}),
|
|
394
438
|
...(changes?.data ? { data: structuredClone(changes.data) } : {}),
|
|
395
439
|
};
|
|
440
|
+
const next_parts = current_message.parts.map((part) =>
|
|
441
|
+
part.part_id === action.part_id ? next_action : part);
|
|
396
442
|
const message: SessionAgentMessage = {
|
|
397
443
|
...current_message,
|
|
398
|
-
state:
|
|
399
|
-
|
|
400
|
-
|
|
444
|
+
state: resolve_session_message_state(
|
|
445
|
+
next_parts,
|
|
446
|
+
this.is_held_by_writer(message_id),
|
|
447
|
+
),
|
|
448
|
+
parts: next_parts,
|
|
401
449
|
revision: current_message.revision + 1,
|
|
402
450
|
updated_at: Date.now(),
|
|
403
451
|
};
|
|
@@ -406,8 +454,8 @@ export class SessionMessages {
|
|
|
406
454
|
expected_revision: current_message.revision,
|
|
407
455
|
changed_parts: [next_action],
|
|
408
456
|
});
|
|
409
|
-
this.
|
|
410
|
-
return message
|
|
457
|
+
this.cache.accept(message, options?.publish_mutation !== false);
|
|
458
|
+
return message;
|
|
411
459
|
}
|
|
412
460
|
|
|
413
461
|
/**
|
|
@@ -432,12 +480,7 @@ export class SessionMessages {
|
|
|
432
480
|
|
|
433
481
|
const error_part: SessionAgentErrorPart = {
|
|
434
482
|
part_id: `error:${generate_id()}`,
|
|
435
|
-
sequence: target
|
|
436
|
-
? target.parts.reduce(
|
|
437
|
-
(sequence, part) => Math.max(sequence, part.sequence + 1),
|
|
438
|
-
1,
|
|
439
|
-
)
|
|
440
|
-
: 1,
|
|
483
|
+
sequence: target ? next_agent_part_sequence(target.parts) : 1,
|
|
441
484
|
type: "error",
|
|
442
485
|
scope: input.scope,
|
|
443
486
|
code: input.code,
|
|
@@ -445,8 +488,7 @@ export class SessionMessages {
|
|
|
445
488
|
recoverable: input.recoverable,
|
|
446
489
|
};
|
|
447
490
|
|
|
448
|
-
if (target
|
|
449
|
-
this.remember_message(target);
|
|
491
|
+
if (target && this.is_held_by_writer(target.message_id)) {
|
|
450
492
|
await this.agent_state.commit_parts(target.message_id, [error_part]);
|
|
451
493
|
const updated = await this.store.read_message(target.message_id);
|
|
452
494
|
if (!updated || updated.role !== "agent") {
|
|
@@ -469,11 +511,11 @@ export class SessionMessages {
|
|
|
469
511
|
expected_revision: target.revision,
|
|
470
512
|
changed_parts: [error_part],
|
|
471
513
|
});
|
|
472
|
-
this.
|
|
473
|
-
return message
|
|
514
|
+
this.cache.accept(message);
|
|
515
|
+
return message;
|
|
474
516
|
}
|
|
475
517
|
|
|
476
|
-
|
|
518
|
+
const message = await this.create_message((sequence, created_at) => ({
|
|
477
519
|
message_id: `agent:${this.session_id}:${generate_id()}`,
|
|
478
520
|
session_id: this.session_id,
|
|
479
521
|
...(input.turn_id ? { turn_id: input.turn_id } : {}),
|
|
@@ -483,9 +525,13 @@ export class SessionMessages {
|
|
|
483
525
|
created_at,
|
|
484
526
|
updated_at: created_at,
|
|
485
527
|
role: "agent",
|
|
486
|
-
state:
|
|
528
|
+
state: resolve_session_message_state([error_part], false),
|
|
487
529
|
parts: [error_part],
|
|
488
|
-
}))
|
|
530
|
+
}));
|
|
531
|
+
if (message.role !== "agent") {
|
|
532
|
+
throw new Error(`Agent Message expected: ${message.message_id}`);
|
|
533
|
+
}
|
|
534
|
+
return message;
|
|
489
535
|
}
|
|
490
536
|
|
|
491
537
|
/** 按 Message sequence 返回一页完整 Message 聚合。 */
|
|
@@ -510,10 +556,10 @@ export class SessionMessages {
|
|
|
510
556
|
const messages = has_more ? page.slice(1) : page;
|
|
511
557
|
const start_sequence = messages[0]?.sequence;
|
|
512
558
|
const end_sequence = messages.at(-1)?.sequence;
|
|
513
|
-
const
|
|
559
|
+
const total = await this.store.message_count();
|
|
514
560
|
return {
|
|
515
561
|
items: messages.map((message) => structuredClone(message)),
|
|
516
|
-
total
|
|
562
|
+
total,
|
|
517
563
|
...(start_sequence !== undefined ? { start_sequence } : {}),
|
|
518
564
|
...(end_sequence !== undefined ? { end_sequence } : {}),
|
|
519
565
|
...(has_more && start_sequence !== undefined
|
|
@@ -566,75 +612,6 @@ export class SessionMessages {
|
|
|
566
612
|
}
|
|
567
613
|
}
|
|
568
614
|
|
|
569
|
-
/** @internal 只向运行投影追加 Agent 文本 delta。 */
|
|
570
|
-
project_agent_delta(
|
|
571
|
-
message_id: string,
|
|
572
|
-
part_id: string,
|
|
573
|
-
type: "text" | "reasoning",
|
|
574
|
-
delta: string,
|
|
575
|
-
): void {
|
|
576
|
-
this.agent_state.project_delta(message_id, part_id, type, delta);
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
/** @internal 只向运行投影追加 Agent Tool 输入 delta。 */
|
|
580
|
-
project_agent_tool_input_delta(
|
|
581
|
-
message_id: string,
|
|
582
|
-
part_id: string,
|
|
583
|
-
tool_call_id: string,
|
|
584
|
-
delta: string,
|
|
585
|
-
): void {
|
|
586
|
-
this.agent_state.project_delta(
|
|
587
|
-
message_id,
|
|
588
|
-
part_id,
|
|
589
|
-
"tool_input",
|
|
590
|
-
delta,
|
|
591
|
-
tool_call_id,
|
|
592
|
-
);
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
/** @internal 只向运行投影写入 Agent 完整 Part。 */
|
|
596
|
-
project_agent_part(
|
|
597
|
-
message_id: string,
|
|
598
|
-
part: SessionAgentMessagePart,
|
|
599
|
-
): void {
|
|
600
|
-
this.agent_state.project_part(message_id, part);
|
|
601
|
-
}
|
|
602
|
-
|
|
603
|
-
/** @internal 原子提交当前运行投影。 */
|
|
604
|
-
async checkpoint_agent_message(message_id: string): Promise<void> {
|
|
605
|
-
await this.agent_state.checkpoint(message_id);
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
/** @internal 原子提交一组非流式 Agent Parts。 */
|
|
609
|
-
async commit_agent_parts(
|
|
610
|
-
message_id: string,
|
|
611
|
-
parts: readonly SessionAgentMessagePart[],
|
|
612
|
-
): Promise<void> {
|
|
613
|
-
await this.agent_state.commit_parts(message_id, parts);
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
/** @internal 丢弃未提交的当前 Step 投影。 */
|
|
617
|
-
async rollback_agent_projection(message_id: string): Promise<void> {
|
|
618
|
-
await this.agent_state.rollback_projection(message_id);
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
/** @internal 原子提交当前 Assistant step 的 metadata 快照。 */
|
|
622
|
-
async commit_agent_step(
|
|
623
|
-
message_id: string,
|
|
624
|
-
parts: SessionAgentMessagePart[],
|
|
625
|
-
): Promise<void> {
|
|
626
|
-
await this.agent_state.commit_step(message_id, parts);
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
/** @internal 收口 Assistant Message。 */
|
|
630
|
-
async complete_agent_message(
|
|
631
|
-
message_id: string,
|
|
632
|
-
status: "completed" | "stopped" | "failed",
|
|
633
|
-
error?: string,
|
|
634
|
-
): Promise<void> {
|
|
635
|
-
await this.agent_state.complete(message_id, status, error);
|
|
636
|
-
}
|
|
637
|
-
|
|
638
615
|
private async create_message(
|
|
639
616
|
factory: (sequence: number, created_at: number) => SessionMessage,
|
|
640
617
|
draft = false,
|
|
@@ -648,24 +625,19 @@ export class SessionMessages {
|
|
|
648
625
|
}
|
|
649
626
|
return candidate;
|
|
650
627
|
});
|
|
651
|
-
this.
|
|
628
|
+
this.cache.accept(message, publish_mutation);
|
|
652
629
|
return message;
|
|
653
630
|
}
|
|
654
631
|
|
|
655
|
-
/** 读取当前流式 Assistant 中的指定 Tool Part。 */
|
|
656
|
-
find_streaming_tool(tool_call_id: string): SessionStreamingToolLocation | undefined {
|
|
657
|
-
return this.agent_state.find_streaming_tool(tool_call_id);
|
|
658
|
-
}
|
|
659
|
-
|
|
660
632
|
/** 返回当前 Session 中全部等待用户响应的 canonical Interaction。 */
|
|
661
|
-
list_pending_interactions():
|
|
633
|
+
list_pending_interactions(): SessionAgentInteraction[] {
|
|
662
634
|
return this.agent_state.list_pending_interactions();
|
|
663
635
|
}
|
|
664
636
|
|
|
665
637
|
/** 原子创建 Interaction,并把关联 Tool 转为 waiting-user。 */
|
|
666
638
|
async request_interaction(
|
|
667
639
|
request: SessionInteractionRequest,
|
|
668
|
-
): Promise<
|
|
640
|
+
): Promise<SessionAgentInteraction> {
|
|
669
641
|
return await this.agent_state.request_interaction(request);
|
|
670
642
|
}
|
|
671
643
|
|
|
@@ -673,7 +645,7 @@ export class SessionMessages {
|
|
|
673
645
|
async resolve_interaction(
|
|
674
646
|
interaction_id: string,
|
|
675
647
|
response: SessionInteractionResponse,
|
|
676
|
-
): Promise<
|
|
648
|
+
): Promise<SessionAgentInteraction> {
|
|
677
649
|
return await this.agent_state.resolve_interaction(
|
|
678
650
|
interaction_id,
|
|
679
651
|
response,
|
|
@@ -684,64 +656,13 @@ export class SessionMessages {
|
|
|
684
656
|
async close_interaction(
|
|
685
657
|
interaction_id: string,
|
|
686
658
|
input: SessionInteractionCloseInput,
|
|
687
|
-
): Promise<
|
|
659
|
+
): Promise<SessionAgentInteraction> {
|
|
688
660
|
return await this.agent_state.close_interaction(interaction_id, input);
|
|
689
661
|
}
|
|
690
662
|
|
|
691
|
-
private build_message_mutation(
|
|
692
|
-
message: SessionMessage,
|
|
693
|
-
): SessionMessageSnapshotMutation {
|
|
694
|
-
return {
|
|
695
|
-
mutation_id: generate_id(),
|
|
696
|
-
variant: "message",
|
|
697
|
-
role: message.role,
|
|
698
|
-
message_id: message.message_id,
|
|
699
|
-
sequence: message.sequence,
|
|
700
|
-
revision: message.revision,
|
|
701
|
-
session_id: this.session_id,
|
|
702
|
-
...(message.turn_id ? { turn_id: message.turn_id } : {}),
|
|
703
|
-
created_at: message.updated_at,
|
|
704
|
-
message,
|
|
705
|
-
} as SessionMessageSnapshotMutation;
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
private accept_message(message: SessionMessage, publish_mutation = true): void {
|
|
709
|
-
if (!publish_mutation) {
|
|
710
|
-
this.remember_message(message);
|
|
711
|
-
return;
|
|
712
|
-
}
|
|
713
|
-
this.accept_mutation(this.build_message_mutation(message), message);
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
private accept_mutation(mutation: SessionMutation, message: SessionMessage): void {
|
|
717
|
-
this.remember_message(message);
|
|
718
|
-
this.publish(mutation);
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
/** 仅缓存可变的 streaming Agent Message;终态历史始终读取 SQLite。 */
|
|
722
|
-
private remember_message(message: SessionMessage): void {
|
|
723
|
-
this.messages_by_id.delete(message.message_id);
|
|
724
|
-
if (message.role === "agent" && message.state === "streaming") {
|
|
725
|
-
this.messages_by_id.set(message.message_id, structuredClone(message));
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
|
|
729
663
|
private async ensure_initialized(): Promise<void> {
|
|
730
664
|
await this.initialize();
|
|
731
665
|
}
|
|
732
|
-
|
|
733
|
-
}
|
|
734
|
-
|
|
735
|
-
function require_message<TRole extends SessionMessage["role"]>(
|
|
736
|
-
messages: SessionMessage[],
|
|
737
|
-
message_id: string,
|
|
738
|
-
role: TRole,
|
|
739
|
-
): Extract<SessionMessage, { role: TRole }> {
|
|
740
|
-
const message = messages.find((item) => item.message_id === message_id);
|
|
741
|
-
if (!message || message.role !== role) {
|
|
742
|
-
throw new Error(`Session ${role} Message not found: ${message_id}`);
|
|
743
|
-
}
|
|
744
|
-
return message as Extract<SessionMessage, { role: TRole }>;
|
|
745
666
|
}
|
|
746
667
|
|
|
747
668
|
function resolve_import_id(map: Map<string, string>, source_id: string, prefix: string): string {
|
|
@@ -752,15 +673,35 @@ function resolve_import_id(map: Map<string, string>, source_id: string, prefix:
|
|
|
752
673
|
return created;
|
|
753
674
|
}
|
|
754
675
|
|
|
755
|
-
/**
|
|
756
|
-
function
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
676
|
+
/** 构造一个 canonical Action Part。 */
|
|
677
|
+
function create_action_part(input: {
|
|
678
|
+
/** Action 稳定业务标识。 */
|
|
679
|
+
action_id: string;
|
|
680
|
+
/** Part 在所属 Message 内的稳定标识。 */
|
|
681
|
+
part_id: string;
|
|
682
|
+
/** Part 在所属 Message 内的顺序号。 */
|
|
683
|
+
sequence: number;
|
|
684
|
+
/** Action 业务类别。 */
|
|
685
|
+
action_type: string;
|
|
686
|
+
/** Action 生命周期状态。 */
|
|
687
|
+
state: SessionActionStatus;
|
|
688
|
+
/** Action 展示标题。 */
|
|
689
|
+
title: string;
|
|
690
|
+
/** Action 展示描述。 */
|
|
691
|
+
description?: string;
|
|
692
|
+
/** Action 结构化附加数据。 */
|
|
693
|
+
data?: JsonObject;
|
|
694
|
+
}): SessionAgentActionPart {
|
|
695
|
+
return {
|
|
696
|
+
part_id: input.part_id,
|
|
697
|
+
sequence: input.sequence,
|
|
698
|
+
type: "action",
|
|
699
|
+
action_id: input.action_id,
|
|
700
|
+
action_type: input.action_type,
|
|
701
|
+
state: input.state,
|
|
702
|
+
title: input.title,
|
|
703
|
+
...(input.description ? { description: input.description } : {}),
|
|
704
|
+
...(input.data ? { data: structuredClone(input.data) } : {}),
|
|
705
|
+
};
|
|
766
706
|
}
|
|
707
|
+
|