@downcity/agent 1.1.438 → 1.1.446
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
|
@@ -18,25 +18,27 @@ import type {
|
|
|
18
18
|
AgentSessionTurnResult,
|
|
19
19
|
} from "@/types/sdk/AgentSessionTurn.js";
|
|
20
20
|
import { is_agent_session_prompt_input_empty } from "@/types/sdk/AgentSessionPrompt.js";
|
|
21
|
-
import type {
|
|
21
|
+
import type { SessionStepExecutionInput, SessionTurnExecutionResult } from "@/types/session/SessionExecution.js";
|
|
22
|
+
import {
|
|
23
|
+
is_provider_context_limit_error,
|
|
22
24
|
SessionExecutor,
|
|
23
|
-
|
|
24
|
-
} from "@/
|
|
25
|
-
import type {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
25
|
+
type SessionExecutorPort,
|
|
26
|
+
} from "@/session/runner/SessionExecutor.js";
|
|
27
|
+
import type { StepInput } from "@/session/input/StepInput.js";
|
|
28
|
+
import type { SessionTurnContext } from "@/types/turn/SessionTurnContext.js";
|
|
29
|
+
import { create_session_turn_context } from "@/session/loop/SessionTurnContext.js";
|
|
30
|
+
import { SessionEventHub } from "@/session/messages/SessionEventHub.js";
|
|
31
|
+
import { SessionState } from "@/session/loop/SessionState.js";
|
|
29
32
|
import {
|
|
30
33
|
normalize_session_user_parts,
|
|
31
34
|
SessionMessages,
|
|
32
|
-
} from "@/session/SessionMessages.js";
|
|
33
|
-
import type { ShellApprovalGateway } from "@downcity/type";
|
|
35
|
+
} from "@/session/messages/SessionMessages.js";
|
|
34
36
|
import type {
|
|
35
37
|
SessionInteractionLifecycle,
|
|
36
38
|
SessionInteractionPort,
|
|
37
39
|
} from "@downcity/type";
|
|
38
|
-
import { SessionAssistantOutputAdapter } from "@/session/
|
|
39
|
-
import { SessionQueue } from "@/session/SessionQueue.js";
|
|
40
|
+
import { SessionAssistantOutputAdapter } from "@/session/messages/SessionAssistantOutputAdapter.js";
|
|
41
|
+
import { SessionQueue } from "@/session/loop/SessionQueue.js";
|
|
40
42
|
import { extract_session_message_text } from "@/session/messages/SessionMessageText.js";
|
|
41
43
|
import type {
|
|
42
44
|
ActiveSessionTurnState,
|
|
@@ -47,18 +49,18 @@ import type {
|
|
|
47
49
|
SessionCommand,
|
|
48
50
|
SessionCommandCompletion,
|
|
49
51
|
} from "@/types/session/SessionCommand.js";
|
|
50
|
-
import { create_session_model_request_warning } from "@/session/
|
|
52
|
+
import { create_session_model_request_warning } from "@/session/messages/SessionModelRequestWarning.js";
|
|
51
53
|
import {
|
|
52
54
|
complete_session_turn,
|
|
53
55
|
fail_session_turn,
|
|
54
|
-
|
|
56
|
+
TURN_STOPPED_MESSAGE,
|
|
57
|
+
} from "@/session/loop/SessionTurnCompletion.js";
|
|
55
58
|
import {
|
|
56
59
|
append_session_turn_file_diff,
|
|
57
60
|
publish_session_turn_file_diff,
|
|
58
|
-
} from "@/session/
|
|
61
|
+
} from "@/session/loop/SessionTurnFileDiff.js";
|
|
59
62
|
import type { SessionTurnCompletionOptions } from "@/types/session/SessionTurnCompletion.js";
|
|
60
63
|
|
|
61
|
-
const TURN_STOPPED_MESSAGE = "Turn stopped";
|
|
62
64
|
const QUEUED_PROMPT_CANCELLED_MESSAGE =
|
|
63
65
|
"Prompt cancelled because session was stopped";
|
|
64
66
|
|
|
@@ -69,17 +71,20 @@ export class SessionLoop {
|
|
|
69
71
|
private readonly session_id: string;
|
|
70
72
|
private readonly session_origin: SessionLoopOptions["session_origin"];
|
|
71
73
|
private readonly workspace_path: string;
|
|
72
|
-
private readonly
|
|
74
|
+
private readonly step_input: StepInput | null;
|
|
75
|
+
private readonly session_executor: SessionExecutorPort;
|
|
73
76
|
private readonly maintain_context: SessionLoopOptions["maintain_context"];
|
|
74
77
|
private readonly state: SessionState;
|
|
75
78
|
private readonly messages: SessionMessages;
|
|
76
79
|
private readonly events: SessionEventHub;
|
|
77
80
|
private readonly logger: SessionLoopOptions["logger"];
|
|
81
|
+
/** 读取当前生效的扩展处理器集合。 */
|
|
82
|
+
private readonly get_hooks: SessionLoopOptions["get_hooks"];
|
|
83
|
+
/** 构造当前 Turn 的调用环境快照。 */
|
|
84
|
+
private readonly create_call_context: SessionLoopOptions["create_call_context"];
|
|
78
85
|
private readonly interactions:
|
|
79
86
|
SessionInteractionLifecycle & SessionInteractionPort;
|
|
80
|
-
private readonly
|
|
81
|
-
private readonly queue: SessionQueue;
|
|
82
|
-
private pending_prompt_count = 0;
|
|
87
|
+
private readonly queue: SessionQueue; private pending_prompt_count = 0;
|
|
83
88
|
private processing_promise: Promise<void> | null = null;
|
|
84
89
|
private active_turn: ActiveSessionTurnState | null = null;
|
|
85
90
|
/** 尚未完成 canonical 接收的幂等 Prompt,防止进程内并发重复入队。 */
|
|
@@ -89,21 +94,34 @@ export class SessionLoop {
|
|
|
89
94
|
this.session_id = String(options.session_id || "").trim();
|
|
90
95
|
this.session_origin = options.session_origin;
|
|
91
96
|
this.workspace_path = String(options.workspace_path || "").trim();
|
|
92
|
-
this.executor = options.executor;
|
|
93
97
|
this.maintain_context = options.maintain_context;
|
|
94
98
|
this.state = options.state;
|
|
95
99
|
this.messages = options.messages;
|
|
96
100
|
this.events = options.events;
|
|
97
101
|
this.logger = options.logger;
|
|
102
|
+
this.get_hooks = options.get_hooks;
|
|
103
|
+
this.create_call_context = options.create_call_context;
|
|
98
104
|
this.queue = options.queue;
|
|
99
105
|
this.interactions = options.interactions;
|
|
100
|
-
this.shell_approval_gateway = options.shell_approval_gateway;
|
|
101
106
|
if (!this.session_id) {
|
|
102
107
|
throw new Error("SessionLoop requires a non-empty session_id");
|
|
103
108
|
}
|
|
104
109
|
if (!this.workspace_path) {
|
|
105
110
|
throw new Error("SessionLoop requires a non-empty workspace_path");
|
|
106
111
|
}
|
|
112
|
+
this.step_input = options.step_input ?? null;
|
|
113
|
+
this.session_executor = options.executor ??
|
|
114
|
+
new SessionExecutor({
|
|
115
|
+
session_id: this.session_id,
|
|
116
|
+
logger: this.logger,
|
|
117
|
+
is_context_limit: is_provider_context_limit_error,
|
|
118
|
+
advance_context: options.advance_context,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** 返回当前 Session 是否正在执行模型请求。 */
|
|
123
|
+
is_executing(): boolean {
|
|
124
|
+
return this.session_executor.is_executing();
|
|
107
125
|
}
|
|
108
126
|
|
|
109
127
|
/**
|
|
@@ -315,6 +333,27 @@ export class SessionLoop {
|
|
|
315
333
|
}
|
|
316
334
|
}
|
|
317
335
|
|
|
336
|
+
/**
|
|
337
|
+
* 在 Turn 收口前抽干尚未处理的 Maintenance Command。
|
|
338
|
+
*
|
|
339
|
+
* 关键点(中文)
|
|
340
|
+
* - 收尾窗口内到达的配置变更 Action 借此与当前 Agent Message 共享同一条 Message。
|
|
341
|
+
* - 只抽 Maintenance;Prompt 继续留在 FIFO 里由下一 Turn 消费。
|
|
342
|
+
*/
|
|
343
|
+
private async drain_queued_maintenance_commands(): Promise<void> {
|
|
344
|
+
const drained = this.queue.drain_maintenance();
|
|
345
|
+
for (let index = 0; index < drained.length; index += 1) {
|
|
346
|
+
const command = drained[index];
|
|
347
|
+
try {
|
|
348
|
+
await this.execute_command(command);
|
|
349
|
+
} catch {
|
|
350
|
+
// 失败时保留尚未处理的 Maintenance;Action 自己负责失败观测。
|
|
351
|
+
this.queue.restore_front(drained.slice(index));
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
318
357
|
/** 执行 Command,并尽力持久化其声明的 canonical 完成信息。 */
|
|
319
358
|
private async execute_command(command: SessionCommand): Promise<void> {
|
|
320
359
|
await command.execute();
|
|
@@ -475,7 +514,7 @@ export class SessionLoop {
|
|
|
475
514
|
}
|
|
476
515
|
let result: SessionTurnExecutionResult;
|
|
477
516
|
try {
|
|
478
|
-
result = await this.
|
|
517
|
+
result = await this.run_turn_with_context_advance(turn_context);
|
|
479
518
|
} catch (error) {
|
|
480
519
|
result = {
|
|
481
520
|
text: "",
|
|
@@ -487,7 +526,7 @@ export class SessionLoop {
|
|
|
487
526
|
if (!result.success && !turn_context.lifecycle.abort_signal.aborted && result.error) {
|
|
488
527
|
await assistant_output.append_error({
|
|
489
528
|
scope: "turn",
|
|
490
|
-
code: "turn_execution_failed",
|
|
529
|
+
code: result.error_code || "turn_execution_failed",
|
|
491
530
|
message: result.error,
|
|
492
531
|
recoverable: true,
|
|
493
532
|
});
|
|
@@ -502,6 +541,8 @@ export class SessionLoop {
|
|
|
502
541
|
logger: this.logger,
|
|
503
542
|
});
|
|
504
543
|
|
|
544
|
+
await this.drain_queued_maintenance_commands();
|
|
545
|
+
|
|
505
546
|
await assistant_output.finish({
|
|
506
547
|
status: turn_context.lifecycle.abort_signal.aborted
|
|
507
548
|
? "stopped"
|
|
@@ -521,6 +562,40 @@ export class SessionLoop {
|
|
|
521
562
|
};
|
|
522
563
|
}
|
|
523
564
|
|
|
565
|
+
/**
|
|
566
|
+
* 执行 Turn;上下文推进与重试由执行器内部负责。
|
|
567
|
+
*
|
|
568
|
+
* 关键点(中文):每次重试都重新装配 Step 输入,保证读到刚推进的上下文。
|
|
569
|
+
*/
|
|
570
|
+
private async run_turn_with_context_advance(
|
|
571
|
+
turn_context: SessionTurnContext,
|
|
572
|
+
): Promise<SessionTurnExecutionResult> {
|
|
573
|
+
return await this.session_executor.execute({
|
|
574
|
+
turn_context,
|
|
575
|
+
resolve_step_input: async (advance_count) =>
|
|
576
|
+
await this.require_step_input(turn_context, advance_count),
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* 解析当前 Step 的输入。
|
|
582
|
+
*
|
|
583
|
+
* 关键点(中文):注入执行器时本 Loop 不拥有输入装配能力;回调一旦被调用即说明注入契约
|
|
584
|
+
* 被破坏,因此直接报错而不是静默返回空输入。
|
|
585
|
+
*/
|
|
586
|
+
private async require_step_input(
|
|
587
|
+
turn_context: SessionTurnContext,
|
|
588
|
+
advance_count: number,
|
|
589
|
+
): Promise<SessionStepExecutionInput> {
|
|
590
|
+
const step_input = this.step_input;
|
|
591
|
+
if (!step_input) {
|
|
592
|
+
throw new Error(
|
|
593
|
+
"SessionLoop was given an executor and cannot assemble step input",
|
|
594
|
+
);
|
|
595
|
+
}
|
|
596
|
+
return await step_input.build(turn_context, advance_count);
|
|
597
|
+
}
|
|
598
|
+
|
|
524
599
|
/** 在 Turn 创建时建立其唯一执行上下文和 Assistant 输出端口。 */
|
|
525
600
|
private create_turn_context(
|
|
526
601
|
active_turn: ActiveSessionTurnState,
|
|
@@ -550,7 +625,6 @@ export class SessionLoop {
|
|
|
550
625
|
},
|
|
551
626
|
has_pending_step_input: () => this.has_pending_prompt(),
|
|
552
627
|
assistant_output,
|
|
553
|
-
shell_approval_gateway: this.shell_approval_gateway,
|
|
554
628
|
interactions: this.interactions,
|
|
555
629
|
on_effects_changed: (effects) => {
|
|
556
630
|
publish_session_turn_file_diff({
|
|
@@ -624,6 +698,8 @@ export class SessionLoop {
|
|
|
624
698
|
events: this.events,
|
|
625
699
|
logger: this.logger,
|
|
626
700
|
stopped_message: TURN_STOPPED_MESSAGE,
|
|
701
|
+
get_hooks: this.get_hooks,
|
|
702
|
+
create_call_context: this.create_call_context,
|
|
627
703
|
};
|
|
628
704
|
}
|
|
629
705
|
}
|
|
@@ -31,6 +31,24 @@ export class SessionQueue {
|
|
|
31
31
|
return this.commands.splice(0, this.commands.length);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* 只取出当前全部 Maintenance Command,并保留 Prompt 的相对顺序。
|
|
36
|
+
*
|
|
37
|
+
* Turn 收口前用它抽干配置类命令,让这些 Action 与当前 Agent Message 共享同一条
|
|
38
|
+
* Message;Prompt 必须留在队列里由后续 Turn 消费,否则会在没有后续 Step 的情况下
|
|
39
|
+
* 被持久化为 steer 却永远得不到响应。
|
|
40
|
+
*/
|
|
41
|
+
drain_maintenance(): SessionCommand[] {
|
|
42
|
+
const drained: SessionCommand[] = [];
|
|
43
|
+
const retained: SessionCommand[] = [];
|
|
44
|
+
for (const command of this.commands) {
|
|
45
|
+
if (command.kind === "maintenance") drained.push(command);
|
|
46
|
+
else retained.push(command);
|
|
47
|
+
}
|
|
48
|
+
this.commands.splice(0, this.commands.length, ...retained);
|
|
49
|
+
return drained;
|
|
50
|
+
}
|
|
51
|
+
|
|
34
52
|
/** 把尚未处理的 Command 恢复到队列头部。 */
|
|
35
53
|
restore_front(commands: SessionCommand[]): void {
|
|
36
54
|
this.commands.unshift(...commands);
|
|
@@ -16,18 +16,18 @@ import {
|
|
|
16
16
|
normalize_session_title,
|
|
17
17
|
resolve_system_timezone,
|
|
18
18
|
} from "@/session/storage/Metadata.js";
|
|
19
|
-
import { ensure_session_title } from "@/session/SessionTitle.js";
|
|
19
|
+
import { ensure_session_title } from "@/session/loop/SessionTitle.js";
|
|
20
20
|
import type {
|
|
21
21
|
AgentSessionConfigSnapshot,
|
|
22
22
|
} from "@/types/agent/SessionTypes.js";
|
|
23
23
|
import type { SessionLocalState } from "@/types/session/SessionLocalState.js";
|
|
24
24
|
import { generate_id } from "@/utils/Id.js";
|
|
25
25
|
import type { Logger } from "@/utils/logger/Logger.js";
|
|
26
|
-
import { SessionTitleTask } from "@/session/
|
|
26
|
+
import { SessionTitleTask } from "@/session/loop/SessionTitleTask.js";
|
|
27
27
|
import type { SessionStateOptions } from "@/types/session/SessionState.js";
|
|
28
28
|
import type { SessionStorage } from "@/types/store/SessionStorage.js";
|
|
29
29
|
import type { SessionApprovalMode } from "@downcity/type";
|
|
30
|
-
import { create_session_model_request_warning } from "@/session/
|
|
30
|
+
import { create_session_model_request_warning } from "@/session/messages/SessionModelRequestWarning.js";
|
|
31
31
|
|
|
32
32
|
/** 创建单个 Session 唯一的可变内存状态。 */
|
|
33
33
|
export function create_session_local_state(): SessionLocalState {
|
|
@@ -38,7 +38,6 @@ export function create_session_local_state(): SessionLocalState {
|
|
|
38
38
|
created_at: Date.now(),
|
|
39
39
|
timezone: resolve_system_timezone(),
|
|
40
40
|
initialize_promise: null,
|
|
41
|
-
ensure_configured_promise: null,
|
|
42
41
|
};
|
|
43
42
|
}
|
|
44
43
|
|
|
@@ -60,7 +59,6 @@ export class SessionState {
|
|
|
60
59
|
private readonly store: SessionStorage;
|
|
61
60
|
private readonly state: SessionLocalState;
|
|
62
61
|
private readonly logger: Logger;
|
|
63
|
-
private readonly ensure_configured_hook?: SessionStateOptions["ensure_configured_hook"];
|
|
64
62
|
private readonly get_model: SessionStateOptions["get_model"];
|
|
65
63
|
private readonly publish_event: SessionStateOptions["publish_event"];
|
|
66
64
|
private readonly title_task: SessionTitleTask;
|
|
@@ -73,7 +71,6 @@ export class SessionState {
|
|
|
73
71
|
this.store = options.store;
|
|
74
72
|
this.state = options.state;
|
|
75
73
|
this.logger = options.logger;
|
|
76
|
-
this.ensure_configured_hook = options.ensure_configured_hook;
|
|
77
74
|
this.get_model = options.get_model;
|
|
78
75
|
this.publish_event = options.publish_event;
|
|
79
76
|
this.title_task = new SessionTitleTask({
|
|
@@ -153,24 +150,10 @@ export class SessionState {
|
|
|
153
150
|
}
|
|
154
151
|
|
|
155
152
|
/**
|
|
156
|
-
* 在执行前确保当前 session
|
|
153
|
+
* 在执行前确保当前 session 已完成初始化。
|
|
157
154
|
*/
|
|
158
155
|
async ensure_ready_for_execution(): Promise<void> {
|
|
159
156
|
await this.initialize();
|
|
160
|
-
if (this.state.ensure_configured_promise) {
|
|
161
|
-
await this.state.ensure_configured_promise;
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
this.state.ensure_configured_promise = (async () => {
|
|
165
|
-
if (!this.ensure_configured_hook) return;
|
|
166
|
-
await this.ensure_configured_hook();
|
|
167
|
-
})();
|
|
168
|
-
try {
|
|
169
|
-
await this.state.ensure_configured_promise;
|
|
170
|
-
} catch (error) {
|
|
171
|
-
this.state.ensure_configured_promise = null;
|
|
172
|
-
throw error;
|
|
173
|
-
}
|
|
174
157
|
}
|
|
175
158
|
|
|
176
159
|
/**
|
|
@@ -11,14 +11,14 @@ import type { ModelClient } from "@downcity/type";
|
|
|
11
11
|
import {
|
|
12
12
|
build_text_model_messages,
|
|
13
13
|
generate_model,
|
|
14
|
-
} from "
|
|
15
|
-
import type { SessionHistoryMeta } from "@/
|
|
14
|
+
} from "@/model/ModelGenerate.js";
|
|
15
|
+
import type { SessionHistoryMeta } from "@/types/store/SessionHistoryMeta.js";
|
|
16
16
|
import type { Logger } from "@/utils/logger/Logger.js";
|
|
17
17
|
import { normalize_session_title } from "@/session/storage/Metadata.js";
|
|
18
18
|
import type { SessionStorage } from "@/types/store/SessionStorage.js";
|
|
19
19
|
import type { SessionMessage } from "@downcity/type";
|
|
20
20
|
import { extract_session_message_text } from "@/session/messages/SessionMessageText.js";
|
|
21
|
-
import type { ModelRequestFailureReporter } from "@/types/
|
|
21
|
+
import type { ModelRequestFailureReporter } from "@/types/model/ModelRequest.js";
|
|
22
22
|
|
|
23
23
|
const GENERATED_SESSION_TITLE_MAX_CHARS = 24;
|
|
24
24
|
|
|
@@ -12,7 +12,16 @@ import type { SessionTurnExecutionResult } from "@/types/session/SessionExecutio
|
|
|
12
12
|
import type { ActiveSessionTurnState } from "@/types/session/SessionLoop.js";
|
|
13
13
|
import type { SessionTurnCompletionOptions } from "@/types/session/SessionTurnCompletion.js";
|
|
14
14
|
import type { SessionTurnCommittedHookValue } from "@downcity/type";
|
|
15
|
-
import { SESSION_HOOK_POINTS } from "
|
|
15
|
+
import { SESSION_HOOK_POINTS } from "@downcity/type";
|
|
16
|
+
import { run_effect_point } from "@/session/input/SessionHookRunner.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Turn 被用户中止时的规范错误文本。
|
|
20
|
+
*
|
|
21
|
+
* 关键点(中文):执行器产出该文本,Turn 收口处比对它未决定是否写入 Error Part,
|
|
22
|
+
* 因此两侧必须引用同一个常量。
|
|
23
|
+
*/
|
|
24
|
+
export const TURN_STOPPED_MESSAGE = "Turn stopped";
|
|
16
25
|
|
|
17
26
|
/** 使用 Executor 结果完成当前 Turn。 */
|
|
18
27
|
export async function complete_session_turn(
|
|
@@ -103,8 +112,7 @@ async function notify_turn_committed(
|
|
|
103
112
|
active_turn: ActiveSessionTurnState,
|
|
104
113
|
status: SessionTurnCommittedHookValue["status"],
|
|
105
114
|
): Promise<void> {
|
|
106
|
-
const hooks =
|
|
107
|
-
if (!hooks) return;
|
|
115
|
+
const hooks = options.get_hooks();
|
|
108
116
|
try {
|
|
109
117
|
const messages = (await options.messages.list_history_messages())
|
|
110
118
|
.filter((message) => message.turn_id === active_turn.turn_id)
|
|
@@ -115,12 +123,23 @@ async function notify_turn_committed(
|
|
|
115
123
|
status,
|
|
116
124
|
messages: messages as SessionMessage[],
|
|
117
125
|
};
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
126
|
+
const context = options.create_call_context({
|
|
127
|
+
turn_id: active_turn.turn_id,
|
|
128
|
+
abort_signal: active_turn.turn_context?.lifecycle.abort_signal
|
|
129
|
+
?? new AbortController().signal,
|
|
130
|
+
});
|
|
131
|
+
await run_effect_point({
|
|
132
|
+
hooks,
|
|
133
|
+
point_name: SESSION_HOOK_POINTS.turn_committed,
|
|
134
|
+
value: value as unknown as JsonValue,
|
|
135
|
+
context,
|
|
136
|
+
on_error: async (point_name, error) =>
|
|
137
|
+
await log_turn_warning(options, active_turn, "session power effect failed", error, {
|
|
138
|
+
point_name,
|
|
139
|
+
}),
|
|
140
|
+
});
|
|
122
141
|
} catch (error) {
|
|
123
|
-
await log_turn_warning(options, active_turn, "session
|
|
142
|
+
await log_turn_warning(options, active_turn, "session power effect failed", error, {
|
|
124
143
|
point_name: SESSION_HOOK_POINTS.turn_committed,
|
|
125
144
|
});
|
|
126
145
|
}
|
|
@@ -3,42 +3,25 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - Session 创建并拥有上下文,Executor 和 Tool 通过领域分区协作。
|
|
6
|
-
* - 所有可变数组、
|
|
7
|
-
* -
|
|
6
|
+
* - 所有可变数组、Power lease 与取消监听都封装在本模块内。
|
|
7
|
+
* - Power 每次只获得新建的只读快照,不能越过扩展边界访问内核运行能力。
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type {
|
|
10
|
+
import type { ToolEffect } from "@downcity/type";
|
|
11
11
|
import type { SessionUserMessage } from "@downcity/type";
|
|
12
12
|
import type { SessionAgentContent } from "@downcity/type";
|
|
13
13
|
import type {
|
|
14
14
|
SessionTurnContext,
|
|
15
15
|
SessionTurnContextInit,
|
|
16
|
-
} from "@/types/
|
|
17
|
-
import type {
|
|
18
|
-
import type { SessionHookScopeRuntime } from "@downcity/type";
|
|
16
|
+
} from "@/types/turn/SessionTurnContext.js";
|
|
17
|
+
import type { SessionHookContextBlock } from "@downcity/type";
|
|
19
18
|
import type { SessionOrigin } from "@downcity/type";
|
|
20
19
|
import { normalize_session_origin } from "@downcity/type";
|
|
21
|
-
import type { SessionHookContextBlock } from "@downcity/type";
|
|
22
|
-
|
|
23
|
-
/** 非 Turn 查询创建 Plugin 只读快照所需的稳定 Session 状态。 */
|
|
24
|
-
export interface CreateSessionHookContextInput {
|
|
25
|
-
/** 当前 Session 标识。 */
|
|
26
|
-
session_id: string;
|
|
27
|
-
/** 当前 Session 的完整来源元数据。 */
|
|
28
|
-
session_origin: SessionOrigin;
|
|
29
|
-
/** 当前 Session 所属项目根目录。 */
|
|
30
|
-
project_root: string;
|
|
31
|
-
/** 当前 Session 已生效的 Workspace 环境变量。 */
|
|
32
|
-
workspace_env: Readonly<Record<string, string>>;
|
|
33
|
-
/** 当前 Session 已生效的 Agent instruction 文本。 */
|
|
34
|
-
agent_systems: readonly string[];
|
|
35
|
-
}
|
|
36
20
|
|
|
37
21
|
/** SessionTurnContext 的唯一内置实现。 */
|
|
38
22
|
class DefaultSessionTurnContext implements SessionTurnContext {
|
|
39
23
|
readonly session: SessionTurnContext["session"];
|
|
40
24
|
readonly interactions: SessionTurnContext["interactions"];
|
|
41
|
-
readonly shell: SessionTurnContext["shell"];
|
|
42
25
|
|
|
43
26
|
private readonly abort_controller = new AbortController();
|
|
44
27
|
private readonly upstream_abort_signal?: AbortSignal;
|
|
@@ -46,14 +29,13 @@ class DefaultSessionTurnContext implements SessionTurnContext {
|
|
|
46
29
|
private disposed = false;
|
|
47
30
|
private workspace_env_snapshot?: Readonly<Record<string, string>>;
|
|
48
31
|
private agent_systems_snapshot: readonly string[] = Object.freeze([]);
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
private plugin_context_blocks_snapshot: readonly SessionHookContextBlock[] = Object.freeze([]);
|
|
32
|
+
/** 整个 Turn 共享的扩展动态上下文。 */
|
|
33
|
+
private power_context_blocks_snapshot: readonly SessionHookContextBlock[] = Object.freeze([]);
|
|
52
34
|
/** 并发或重复解析时复用的唯一 Promise。 */
|
|
53
|
-
private
|
|
35
|
+
private power_context_blocks_promise?: Promise<readonly SessionHookContextBlock[]>;
|
|
54
36
|
private observed_user_messages: SessionUserMessage[] = [];
|
|
55
37
|
private pending_assistant_parts: SessionAgentContent[] = [];
|
|
56
|
-
private turn_effects:
|
|
38
|
+
private turn_effects: ToolEffect[] = [];
|
|
57
39
|
|
|
58
40
|
readonly lifecycle: SessionTurnContext["lifecycle"];
|
|
59
41
|
readonly step: SessionTurnContext["step"];
|
|
@@ -78,11 +60,6 @@ class DefaultSessionTurnContext implements SessionTurnContext {
|
|
|
78
60
|
...(project_root ? { project_root } : {}),
|
|
79
61
|
});
|
|
80
62
|
this.interactions = init.interactions;
|
|
81
|
-
this.shell = Object.freeze({
|
|
82
|
-
...(init.shell_approval_gateway
|
|
83
|
-
? { approval_gateway: init.shell_approval_gateway }
|
|
84
|
-
: {}),
|
|
85
|
-
});
|
|
86
63
|
|
|
87
64
|
this.upstream_abort_signal = init.abort_signal;
|
|
88
65
|
this.abort_from_upstream = () => {
|
|
@@ -118,11 +95,8 @@ class DefaultSessionTurnContext implements SessionTurnContext {
|
|
|
118
95
|
get agent_systems() {
|
|
119
96
|
return context.agent_systems_snapshot;
|
|
120
97
|
},
|
|
121
|
-
get
|
|
122
|
-
return context.
|
|
123
|
-
},
|
|
124
|
-
get plugin_context_blocks() {
|
|
125
|
-
return context.plugin_context_blocks_snapshot;
|
|
98
|
+
get power_context_blocks() {
|
|
99
|
+
return context.power_context_blocks_snapshot;
|
|
126
100
|
},
|
|
127
101
|
commit: (input) => {
|
|
128
102
|
context.workspace_env_snapshot = Object.freeze({
|
|
@@ -132,16 +106,8 @@ class DefaultSessionTurnContext implements SessionTurnContext {
|
|
|
132
106
|
...input.agent_systems,
|
|
133
107
|
]);
|
|
134
108
|
},
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
context.hook_scope = hooks;
|
|
138
|
-
if (previous && previous !== hooks) await previous.close();
|
|
139
|
-
},
|
|
140
|
-
resolve_plugin_context_blocks: async (resolver) =>
|
|
141
|
-
await context.resolve_plugin_context_blocks(resolver),
|
|
142
|
-
release: async () => await context.release_extensions(),
|
|
143
|
-
hook_context: (call_id?: string) =>
|
|
144
|
-
context.create_hook_context(call_id),
|
|
109
|
+
resolve_power_context_blocks: async (resolver) =>
|
|
110
|
+
await context.resolve_power_context_blocks(resolver),
|
|
145
111
|
});
|
|
146
112
|
|
|
147
113
|
this.input = Object.freeze({
|
|
@@ -196,13 +162,13 @@ class DefaultSessionTurnContext implements SessionTurnContext {
|
|
|
196
162
|
});
|
|
197
163
|
}
|
|
198
164
|
|
|
199
|
-
/** 每个 Turn 只执行一次
|
|
200
|
-
private async
|
|
165
|
+
/** 每个 Turn 只执行一次 Power 动态上下文解析,并保存不可变快照。 */
|
|
166
|
+
private async resolve_power_context_blocks(
|
|
201
167
|
resolver: () => Promise<readonly SessionHookContextBlock[]>,
|
|
202
168
|
): Promise<readonly SessionHookContextBlock[]> {
|
|
203
|
-
this.
|
|
169
|
+
this.power_context_blocks_promise ??= (async () => {
|
|
204
170
|
const blocks = await resolver();
|
|
205
|
-
this.
|
|
171
|
+
this.power_context_blocks_snapshot = Object.freeze(
|
|
206
172
|
(Array.isArray(blocks) ? blocks : []).map((block) => Object.freeze({
|
|
207
173
|
...block,
|
|
208
174
|
...(block.citations
|
|
@@ -210,35 +176,9 @@ class DefaultSessionTurnContext implements SessionTurnContext {
|
|
|
210
176
|
: {}),
|
|
211
177
|
})),
|
|
212
178
|
);
|
|
213
|
-
return this.
|
|
179
|
+
return this.power_context_blocks_snapshot;
|
|
214
180
|
})();
|
|
215
|
-
return await this.
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/** 为 City 扩展生成不共享根对象引用的只读快照。 */
|
|
219
|
-
private create_hook_context(call_id?: string): SessionHookContext {
|
|
220
|
-
const normalized_call_id = String(call_id || "").trim();
|
|
221
|
-
return Object.freeze({
|
|
222
|
-
session_id: this.session.session_id,
|
|
223
|
-
session_origin: this.session.origin,
|
|
224
|
-
turn_id: this.session.turn_id,
|
|
225
|
-
...(normalized_call_id ? { call_id: normalized_call_id } : {}),
|
|
226
|
-
...(this.session.project_root
|
|
227
|
-
? { project_root: this.session.project_root }
|
|
228
|
-
: {}),
|
|
229
|
-
...(this.workspace_env_snapshot
|
|
230
|
-
? { workspace_env: this.workspace_env_snapshot }
|
|
231
|
-
: {}),
|
|
232
|
-
agent_systems: this.agent_systems_snapshot,
|
|
233
|
-
abort_signal: this.abort_controller.signal,
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/** 释放当前 Step 捕获的 Plugin Hook 作用域。 */
|
|
238
|
-
private async release_extensions(): Promise<void> {
|
|
239
|
-
const extensions = this.hook_scope;
|
|
240
|
-
this.hook_scope = undefined;
|
|
241
|
-
await extensions?.close();
|
|
181
|
+
return await this.power_context_blocks_promise;
|
|
242
182
|
}
|
|
243
183
|
|
|
244
184
|
/** 闭合当前运行拥有的全部资源。 */
|
|
@@ -249,7 +189,6 @@ class DefaultSessionTurnContext implements SessionTurnContext {
|
|
|
249
189
|
"abort",
|
|
250
190
|
this.abort_from_upstream,
|
|
251
191
|
);
|
|
252
|
-
await this.release_extensions();
|
|
253
192
|
}
|
|
254
193
|
}
|
|
255
194
|
|
|
@@ -259,16 +198,3 @@ export function create_session_turn_context(
|
|
|
259
198
|
): SessionTurnContext {
|
|
260
199
|
return new DefaultSessionTurnContext(init);
|
|
261
200
|
}
|
|
262
|
-
|
|
263
|
-
/** 为非 Turn 的 system 查询创建 Plugin 可读取的 Session 快照。 */
|
|
264
|
-
export function create_session_hook_context(
|
|
265
|
-
input: CreateSessionHookContextInput,
|
|
266
|
-
): SessionHookContext {
|
|
267
|
-
return Object.freeze({
|
|
268
|
-
session_id: input.session_id,
|
|
269
|
-
session_origin: Object.freeze(normalize_session_origin(input.session_origin)),
|
|
270
|
-
project_root: input.project_root,
|
|
271
|
-
workspace_env: Object.freeze({ ...input.workspace_env }),
|
|
272
|
-
agent_systems: Object.freeze([...input.agent_systems]),
|
|
273
|
-
});
|
|
274
|
-
}
|
|
@@ -9,7 +9,7 @@ import { nanoid } from "nanoid";
|
|
|
9
9
|
import {
|
|
10
10
|
build_session_turn_file_diff,
|
|
11
11
|
build_session_turn_file_diff_summary,
|
|
12
|
-
} from "@/session/
|
|
12
|
+
} from "@/session/loop/SessionTurnFileDiffBuilder.js";
|
|
13
13
|
import { SESSION_TURN_FILE_DIFF_DATA_TYPE } from "@/session/messages/SessionTurnFileDiffData.js";
|
|
14
14
|
import type {
|
|
15
15
|
AppendSessionTurnFileDiffInput,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
formatPatch,
|
|
14
14
|
structuredPatch,
|
|
15
15
|
} from "diff";
|
|
16
|
-
import type {
|
|
16
|
+
import type { ToolEffect } from "@downcity/type";
|
|
17
17
|
import {
|
|
18
18
|
WORKSPACE_FILE_MUTATION_EFFECT_TYPE,
|
|
19
19
|
type WorkspaceFileMutation,
|
|
@@ -40,7 +40,7 @@ interface CollectedFileMutation {
|
|
|
40
40
|
/** 把当前 Turn effects 中的结构化文件修改收敛为可持久化 Diff。 */
|
|
41
41
|
export function build_session_turn_file_diff(
|
|
42
42
|
workspace_path: string,
|
|
43
|
-
effects: readonly
|
|
43
|
+
effects: readonly ToolEffect[],
|
|
44
44
|
): SessionTurnFileDiffData | undefined {
|
|
45
45
|
const files = collect_session_turn_file_diffs(workspace_path, effects);
|
|
46
46
|
if (files.length === 0) return undefined;
|
|
@@ -54,7 +54,7 @@ export function build_session_turn_file_diff(
|
|
|
54
54
|
/** 从当前 Turn effects 收敛只含统计的实时摘要,供 Thinking 状态行轻量展示。 */
|
|
55
55
|
export function build_session_turn_file_diff_summary(
|
|
56
56
|
workspace_path: string,
|
|
57
|
-
effects: readonly
|
|
57
|
+
effects: readonly ToolEffect[],
|
|
58
58
|
): SessionTurnFileDiffSummary {
|
|
59
59
|
const files = collect_session_turn_file_diffs(workspace_path, effects);
|
|
60
60
|
return {
|
|
@@ -67,7 +67,7 @@ export function build_session_turn_file_diff_summary(
|
|
|
67
67
|
/** 把 effects 收敛为稳定排序的文件 Diff 列表;空列表表示当前没有结构化修改。 */
|
|
68
68
|
function collect_session_turn_file_diffs(
|
|
69
69
|
workspace_path: string,
|
|
70
|
-
effects: readonly
|
|
70
|
+
effects: readonly ToolEffect[],
|
|
71
71
|
): SessionTurnFileDiff[] {
|
|
72
72
|
const mutations = effects.flatMap((effect) => {
|
|
73
73
|
const mutation = read_workspace_file_mutation_effect(effect);
|