@downcity/agent 1.1.237 → 1.1.258
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 +21 -20
- package/bin/agent/{local/Agent.d.ts → Agent.d.ts} +37 -27
- package/bin/agent/Agent.d.ts.map +1 -0
- package/bin/agent/Agent.js +211 -0
- package/bin/agent/Agent.js.map +1 -0
- package/bin/agent/AgentContext.d.ts +64 -0
- package/bin/agent/AgentContext.d.ts.map +1 -0
- package/bin/agent/AgentContext.js +53 -0
- package/bin/agent/AgentContext.js.map +1 -0
- package/bin/agent/{local/AgentInstructions.d.ts → AgentInstructions.d.ts} +1 -6
- package/bin/agent/AgentInstructions.d.ts.map +1 -0
- package/bin/agent/{local/AgentInstructions.js → AgentInstructions.js} +1 -10
- package/bin/agent/AgentInstructions.js.map +1 -0
- package/bin/{model/CityModelAdapter.d.ts → agent/AgentModel.d.ts} +3 -3
- package/bin/agent/AgentModel.d.ts.map +1 -0
- package/bin/{model/CityModelAdapter.js → agent/AgentModel.js} +11 -4
- package/bin/agent/AgentModel.js.map +1 -0
- package/bin/agent/{local/services/AgentSessions.d.ts → AgentSessions.d.ts} +30 -40
- package/bin/agent/AgentSessions.d.ts.map +1 -0
- package/bin/agent/{local/services/AgentSessions.js → AgentSessions.js} +62 -79
- package/bin/agent/AgentSessions.js.map +1 -0
- package/bin/agent/AgentState.d.ts +64 -0
- package/bin/agent/AgentState.d.ts.map +1 -0
- package/bin/agent/AgentState.js +118 -0
- package/bin/agent/AgentState.js.map +1 -0
- package/bin/config/Paths.d.ts +0 -43
- package/bin/config/Paths.d.ts.map +1 -1
- package/bin/config/Paths.js +0 -79
- package/bin/config/Paths.js.map +1 -1
- package/bin/config/ProjectSetup.d.ts.map +1 -0
- package/bin/{agent/local → config}/ProjectSetup.js +1 -1
- package/bin/config/ProjectSetup.js.map +1 -0
- package/bin/executor/Executor.d.ts +20 -86
- package/bin/executor/Executor.d.ts.map +1 -1
- package/bin/executor/Executor.js +109 -260
- package/bin/executor/Executor.js.map +1 -1
- package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts +1 -1
- package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts.map +1 -1
- package/bin/executor/composer/system/default/SystemDomain.d.ts +1 -1
- package/bin/executor/composer/system/default/SystemDomain.d.ts.map +1 -1
- package/bin/executor/composer/system/default/SystemDomain.js +4 -1
- package/bin/executor/composer/system/default/SystemDomain.js.map +1 -1
- package/bin/executor/composer/system/default/assets/core.prompt.d.ts +1 -1
- package/bin/executor/composer/system/default/assets/core.prompt.d.ts.map +1 -1
- package/bin/executor/composer/system/default/assets/core.prompt.js +1 -1
- package/bin/executor/composer/system/default/assets/core.prompt.js.map +1 -1
- package/bin/executor/core-engine/CoreEngineRunner.d.ts +7 -13
- package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -1
- package/bin/executor/core-engine/CoreEngineRunner.js +81 -34
- package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -1
- package/bin/executor/services/ExecutorRecoveryPolicy.d.ts +6 -12
- package/bin/executor/services/ExecutorRecoveryPolicy.d.ts.map +1 -1
- package/bin/executor/services/ExecutorRecoveryPolicy.js +20 -6
- package/bin/executor/services/ExecutorRecoveryPolicy.js.map +1 -1
- package/bin/executor/tools/file/ReadImageToolBridge.d.ts +21 -0
- package/bin/executor/tools/file/ReadImageToolBridge.d.ts.map +1 -0
- package/bin/executor/tools/file/ReadImageToolBridge.js +69 -0
- package/bin/executor/tools/file/ReadImageToolBridge.js.map +1 -0
- package/bin/executor/tools/plugin/PluginToolBridge.d.ts.map +1 -1
- package/bin/executor/tools/plugin/PluginToolBridge.js +6 -5
- package/bin/executor/tools/plugin/PluginToolBridge.js.map +1 -1
- package/bin/executor/tools/plugin/PluginToolDefinition.d.ts.map +1 -1
- package/bin/executor/tools/plugin/PluginToolDefinition.js +15 -2
- package/bin/executor/tools/plugin/PluginToolDefinition.js.map +1 -1
- package/bin/executor/types/SessionHistoryMeta.d.ts +0 -2
- package/bin/executor/types/SessionHistoryMeta.d.ts.map +1 -1
- package/bin/index.d.ts +17 -21
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +9 -11
- package/bin/index.js.map +1 -1
- package/bin/plugin/core/ActionScheduleExecutor.d.ts +1 -1
- package/bin/plugin/core/ActionScheduleExecutor.d.ts.map +1 -1
- package/bin/plugin/core/ActionScheduleRuntime.d.ts +1 -1
- package/bin/plugin/core/ActionScheduleRuntime.d.ts.map +1 -1
- package/bin/plugin/core/BasePlugin.d.ts +4 -3
- package/bin/plugin/core/BasePlugin.d.ts.map +1 -1
- package/bin/plugin/core/BasePlugin.js.map +1 -1
- package/bin/plugin/core/HookRegistry.d.ts +5 -8
- package/bin/plugin/core/HookRegistry.d.ts.map +1 -1
- package/bin/plugin/core/HookRegistry.js +12 -12
- package/bin/plugin/core/HookRegistry.js.map +1 -1
- package/bin/plugin/core/PluginActionFactory.d.ts +6 -3
- package/bin/plugin/core/PluginActionFactory.d.ts.map +1 -1
- package/bin/plugin/core/PluginActionFactory.js.map +1 -1
- package/bin/plugin/core/PluginActionRunner.d.ts +1 -1
- package/bin/plugin/core/PluginActionRunner.d.ts.map +1 -1
- package/bin/plugin/core/PluginCatalog.d.ts +1 -1
- package/bin/plugin/core/PluginCatalog.d.ts.map +1 -1
- package/bin/plugin/core/PluginHttpRoutes.d.ts +1 -1
- package/bin/plugin/core/PluginHttpRoutes.d.ts.map +1 -1
- package/bin/plugin/core/PluginLocalExecution.d.ts +4 -5
- package/bin/plugin/core/PluginLocalExecution.d.ts.map +1 -1
- package/bin/plugin/core/PluginLocalExecution.js +4 -12
- package/bin/plugin/core/PluginLocalExecution.js.map +1 -1
- package/bin/plugin/core/PluginRegistry.d.ts +16 -12
- package/bin/plugin/core/PluginRegistry.d.ts.map +1 -1
- package/bin/plugin/core/PluginRegistry.js +43 -22
- package/bin/plugin/core/PluginRegistry.js.map +1 -1
- package/bin/plugin/core/PluginStateController.d.ts +1 -1
- package/bin/plugin/core/PluginStateController.d.ts.map +1 -1
- package/bin/{agent/remote → remote}/RemoteAgent.d.ts +4 -4
- package/bin/remote/RemoteAgent.d.ts.map +1 -0
- package/bin/{agent/remote → remote}/RemoteAgent.js +3 -3
- package/bin/remote/RemoteAgent.js.map +1 -0
- package/bin/{agent/remote → remote}/RemoteSession.d.ts +9 -11
- package/bin/remote/RemoteSession.d.ts.map +1 -0
- package/bin/{agent/remote → remote}/RemoteSession.js +3 -33
- package/bin/remote/RemoteSession.js.map +1 -0
- package/bin/{agent/remote → remote}/RemoteTransport.d.ts +7 -9
- package/bin/remote/RemoteTransport.d.ts.map +1 -0
- package/bin/remote/RemoteTransport.js.map +1 -0
- package/bin/{agent/remote → remote}/TransportFactory.d.ts +1 -1
- package/bin/remote/TransportFactory.d.ts.map +1 -0
- package/bin/{agent/remote → remote}/TransportFactory.js +2 -2
- package/bin/remote/TransportFactory.js.map +1 -0
- package/bin/{agent/remote → remote}/transports/HttpRemoteAgentTransport.d.ts +8 -9
- package/bin/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -0
- package/bin/{agent/remote → remote}/transports/HttpRemoteAgentTransport.js +0 -13
- package/bin/remote/transports/HttpRemoteAgentTransport.js.map +1 -0
- package/bin/{rpc/Client.d.ts → remote/transports/RpcClient.d.ts} +15 -22
- package/bin/remote/transports/RpcClient.d.ts.map +1 -0
- package/bin/{rpc/Client.js → remote/transports/RpcClient.js} +2 -13
- package/bin/remote/transports/RpcClient.js.map +1 -0
- package/bin/{agent/remote → remote}/transports/RpcRemoteAgentTransport.d.ts +8 -9
- package/bin/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -0
- package/bin/{agent/remote → remote}/transports/RpcRemoteAgentTransport.js +1 -4
- package/bin/remote/transports/RpcRemoteAgentTransport.js.map +1 -0
- package/bin/session/DefaultSessionComposer.d.ts +18 -0
- package/bin/session/DefaultSessionComposer.d.ts.map +1 -0
- package/bin/session/DefaultSessionComposer.js +62 -0
- package/bin/session/DefaultSessionComposer.js.map +1 -0
- package/bin/session/Session.d.ts +44 -33
- package/bin/session/Session.d.ts.map +1 -1
- package/bin/session/Session.js +440 -274
- package/bin/session/Session.js.map +1 -1
- package/bin/session/SessionMessages.d.ts +117 -0
- package/bin/session/SessionMessages.d.ts.map +1 -0
- package/bin/session/{recorder/SessionRecorder.js → SessionMessages.js} +194 -284
- package/bin/session/SessionMessages.js.map +1 -0
- package/bin/session/SessionQueue.d.ts +34 -0
- package/bin/session/SessionQueue.d.ts.map +1 -0
- package/bin/session/SessionQueue.js +60 -0
- package/bin/session/SessionQueue.js.map +1 -0
- package/bin/session/SessionState.d.ts +70 -0
- package/bin/session/SessionState.d.ts.map +1 -0
- package/bin/session/SessionState.js +267 -0
- package/bin/session/SessionState.js.map +1 -0
- package/bin/session/SessionSystem.d.ts +15 -0
- package/bin/session/SessionSystem.d.ts.map +1 -0
- package/bin/session/SessionSystem.js +95 -0
- package/bin/session/SessionSystem.js.map +1 -0
- package/bin/session/SessionTurn.d.ts +84 -0
- package/bin/session/SessionTurn.d.ts.map +1 -0
- package/bin/session/SessionTurn.js +588 -0
- package/bin/session/SessionTurn.js.map +1 -0
- package/bin/session/approval/SessionApprovalBroker.d.ts +48 -0
- package/bin/session/approval/SessionApprovalBroker.d.ts.map +1 -0
- package/bin/session/approval/SessionApprovalBroker.js +126 -0
- package/bin/session/approval/SessionApprovalBroker.js.map +1 -0
- package/bin/session/browse/Browse.d.ts.map +1 -1
- package/bin/session/browse/Browse.js +1 -4
- package/bin/session/browse/Browse.js.map +1 -1
- package/bin/session/{recorder → messages}/JsonlSessionMessageStore.d.ts.map +1 -1
- package/bin/session/{recorder → messages}/JsonlSessionMessageStore.js.map +1 -1
- package/bin/session/messages/SessionAssistantMessageWriter.d.ts +62 -0
- package/bin/session/messages/SessionAssistantMessageWriter.d.ts.map +1 -0
- package/bin/session/messages/SessionAssistantMessageWriter.js +287 -0
- package/bin/session/messages/SessionAssistantMessageWriter.js.map +1 -0
- package/bin/session/messages/SessionJsonValue.d.ts +10 -0
- package/bin/session/messages/SessionJsonValue.d.ts.map +1 -0
- package/bin/session/messages/SessionJsonValue.js +23 -0
- package/bin/session/messages/SessionJsonValue.js.map +1 -0
- package/bin/session/{recorder → messages}/SessionMessageCodec.d.ts +4 -1
- package/bin/session/messages/SessionMessageCodec.d.ts.map +1 -0
- package/bin/session/{recorder → messages}/SessionMessageCodec.js +33 -19
- package/bin/session/messages/SessionMessageCodec.js.map +1 -0
- package/bin/session/messages/SessionMessageCompaction.d.ts +22 -0
- package/bin/session/messages/SessionMessageCompaction.d.ts.map +1 -0
- package/bin/session/{recorder/SessionRecorderCompaction.js → messages/SessionMessageCompaction.js} +19 -51
- package/bin/session/messages/SessionMessageCompaction.js.map +1 -0
- package/bin/session/runtime/SessionEventHub.d.ts +1 -8
- package/bin/session/runtime/SessionEventHub.d.ts.map +1 -1
- package/bin/session/runtime/SessionEventHub.js +1 -6
- package/bin/session/runtime/SessionEventHub.js.map +1 -1
- package/bin/session/storage/Metadata.d.ts +23 -5
- package/bin/session/storage/Metadata.d.ts.map +1 -1
- package/bin/session/storage/Metadata.js +32 -29
- package/bin/session/storage/Metadata.js.map +1 -1
- package/bin/session/storage/RuntimeSessionPort.d.ts +5 -10
- package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
- package/bin/session/storage/RuntimeSessionPort.js +2 -4
- package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
- package/bin/types/agent/AgentOptions.d.ts +6 -35
- package/bin/types/agent/AgentOptions.d.ts.map +1 -1
- package/bin/types/agent/AgentState.d.ts +28 -0
- package/bin/types/agent/AgentState.d.ts.map +1 -0
- package/bin/types/agent/AgentState.js +9 -0
- package/bin/types/agent/AgentState.js.map +1 -0
- package/bin/types/agent/SessionActor.d.ts +0 -2
- package/bin/types/agent/SessionActor.d.ts.map +1 -1
- package/bin/types/agent/SessionTypes.d.ts +5 -18
- package/bin/types/agent/SessionTypes.d.ts.map +1 -1
- package/bin/types/executor/SessionRunContext.d.ts +8 -2
- package/bin/types/executor/SessionRunContext.d.ts.map +1 -1
- package/bin/types/executor/SessionRunContext.js +1 -1
- package/bin/types/executor/SessionToolExecutionContext.d.ts +20 -0
- package/bin/types/executor/SessionToolExecutionContext.d.ts.map +1 -0
- package/bin/types/executor/SessionToolExecutionContext.js +10 -0
- package/bin/types/executor/SessionToolExecutionContext.js.map +1 -0
- package/bin/types/plugin/PluginAction.d.ts +10 -1
- package/bin/types/plugin/PluginAction.d.ts.map +1 -1
- package/bin/types/plugin/PluginCommand.d.ts +3 -11
- package/bin/types/plugin/PluginCommand.d.ts.map +1 -1
- package/bin/types/plugin/PluginConfig.d.ts +12 -0
- package/bin/types/plugin/PluginConfig.d.ts.map +1 -0
- package/bin/types/plugin/PluginConfig.js +5 -0
- package/bin/types/plugin/PluginConfig.js.map +1 -0
- package/bin/types/plugin/PluginDefinition.d.ts +10 -3
- package/bin/types/plugin/PluginDefinition.d.ts.map +1 -1
- package/bin/types/plugin/PluginHttp.d.ts +1 -1
- package/bin/types/plugin/PluginHttp.d.ts.map +1 -1
- package/bin/types/plugin/PluginRunContext.d.ts +26 -0
- package/bin/types/plugin/PluginRunContext.d.ts.map +1 -0
- package/bin/types/plugin/PluginRunContext.js +10 -0
- package/bin/types/plugin/PluginRunContext.js.map +1 -0
- package/bin/types/plugin/PluginRuntime.d.ts +9 -3
- package/bin/types/plugin/PluginRuntime.d.ts.map +1 -1
- package/bin/types/plugin/PluginToolRuntime.d.ts +11 -0
- package/bin/types/plugin/PluginToolRuntime.d.ts.map +1 -1
- package/bin/types/rpc/RpcProtocol.d.ts +1 -13
- package/bin/types/rpc/RpcProtocol.d.ts.map +1 -1
- package/bin/types/session/SessionApproval.d.ts +4 -38
- package/bin/types/session/SessionApproval.d.ts.map +1 -1
- package/bin/types/session/SessionApprovalBroker.d.ts +17 -0
- package/bin/types/session/SessionApprovalBroker.d.ts.map +1 -0
- package/bin/types/session/SessionApprovalBroker.js +7 -0
- package/bin/types/session/SessionApprovalBroker.js.map +1 -0
- package/bin/types/session/SessionComposer.d.ts +99 -0
- package/bin/types/session/SessionComposer.d.ts.map +1 -0
- package/bin/types/session/SessionComposer.js +8 -0
- package/bin/types/session/SessionComposer.js.map +1 -0
- package/bin/types/session/SessionLocalState.d.ts +6 -6
- package/bin/types/session/SessionLocalState.d.ts.map +1 -1
- package/bin/types/session/SessionLocalState.js +1 -1
- package/bin/types/session/SessionMessage.d.ts +3 -2
- package/bin/types/session/SessionMessage.d.ts.map +1 -1
- package/bin/types/session/SessionMessages.d.ts +115 -0
- package/bin/types/session/SessionMessages.d.ts.map +1 -0
- package/bin/types/session/SessionMessages.js +7 -0
- package/bin/types/session/SessionMessages.js.map +1 -0
- package/bin/types/session/SessionMutation.d.ts +1 -10
- package/bin/types/session/SessionMutation.d.ts.map +1 -1
- package/bin/types/session/SessionMutation.js.map +1 -1
- package/bin/types/session/SessionOptions.d.ts +8 -23
- package/bin/types/session/SessionOptions.d.ts.map +1 -1
- package/bin/types/session/SessionPort.d.ts +72 -0
- package/bin/types/session/SessionPort.d.ts.map +1 -0
- package/bin/types/session/SessionPort.js +9 -0
- package/bin/types/session/SessionPort.js.map +1 -0
- package/bin/types/session/SessionQueue.d.ts +104 -0
- package/bin/types/session/SessionQueue.d.ts.map +1 -0
- package/bin/types/session/SessionQueue.js +7 -0
- package/bin/types/session/SessionQueue.js.map +1 -0
- package/bin/types/session/SessionState.d.ts +43 -0
- package/bin/types/session/SessionState.d.ts.map +1 -0
- package/bin/types/session/SessionState.js +7 -0
- package/bin/types/session/SessionState.js.map +1 -0
- package/bin/types/session/SessionSystem.d.ts +26 -0
- package/bin/types/session/SessionSystem.d.ts.map +1 -0
- package/bin/types/session/SessionSystem.js +7 -0
- package/bin/types/session/SessionSystem.js.map +1 -0
- package/bin/types/session/SessionTool.d.ts +23 -0
- package/bin/types/session/SessionTool.d.ts.map +1 -0
- package/bin/types/session/SessionTool.js +7 -0
- package/bin/types/session/SessionTool.js.map +1 -0
- package/bin/types/session/SessionTurn.d.ts +52 -0
- package/bin/types/session/SessionTurn.d.ts.map +1 -0
- package/bin/types/session/SessionTurn.js +7 -0
- package/bin/types/session/SessionTurn.js.map +1 -0
- package/package.json +3 -3
- package/scripts/agent-env.test.mjs +4 -18
- package/scripts/agent-ready.test.mjs +33 -2
- package/scripts/agent-session-maintenance.test.mjs +52 -0
- package/scripts/city-model-tool-loop.test.mjs +3 -4
- package/scripts/core-engine-context-compaction.test.mjs +5 -22
- package/scripts/image-plugin-job.test.mjs +4 -6
- package/scripts/plugin-tool-bridge.test.mjs +44 -36
- package/scripts/read-image-tool-bridge.test.mjs +71 -0
- package/scripts/remote-session-reconnect.test.mjs +1 -34
- package/scripts/session-compaction-prompts.test.mjs +1 -49
- package/scripts/session-composer.test.mjs +163 -0
- package/scripts/session-config-turn-boundary.test.mjs +2 -5
- package/scripts/session-list-title.test.mjs +3 -2
- package/scripts/session-messages-error.test.mjs +57 -0
- package/scripts/{session-recorder.test.mjs → session-messages.test.mjs} +131 -90
- package/scripts/session-queue.test.mjs +64 -0
- package/scripts/session-shell-approval.test.mjs +171 -0
- package/scripts/session-system-blocks.test.mjs +10 -10
- package/scripts/session-title-event.test.mjs +1 -0
- package/src/agent/Agent.ts +241 -0
- package/src/agent/AgentContext.ts +92 -0
- package/src/agent/{local/AgentInstructions.ts → AgentInstructions.ts} +0 -11
- package/src/{model/CityModelAdapter.ts → agent/AgentModel.ts} +10 -3
- package/src/agent/{local/services/AgentSessions.ts → AgentSessions.ts} +81 -110
- package/src/agent/AgentState.ts +151 -0
- package/src/config/Paths.ts +0 -91
- package/src/executor/Executor.ts +180 -386
- package/src/executor/README.md +29 -89
- package/src/executor/composer/system/default/DefaultSessionSystemComposer.ts +1 -1
- package/src/executor/composer/system/default/SystemDomain.ts +4 -2
- package/src/executor/composer/system/default/assets/core.prompt.ts +1 -1
- package/src/executor/composer/system/default/assets/core.prompt.ts.txt +15 -2
- package/src/executor/core-engine/CoreEngineRunner.ts +95 -54
- package/src/executor/services/ExecutorRecoveryPolicy.ts +24 -19
- package/src/executor/tools/file/ReadImageToolBridge.ts +79 -0
- package/src/executor/tools/plugin/PluginToolBridge.ts +6 -8
- package/src/executor/tools/plugin/PluginToolDefinition.ts +23 -3
- package/src/executor/types/SessionHistoryMeta.ts +0 -2
- package/src/index.ts +34 -53
- package/src/plugin/core/ActionScheduleExecutor.ts +1 -1
- package/src/plugin/core/ActionScheduleRuntime.ts +1 -1
- package/src/plugin/core/BasePlugin.ts +7 -3
- package/src/plugin/core/HookRegistry.ts +15 -18
- package/src/plugin/core/PluginActionFactory.ts +9 -3
- package/src/plugin/core/PluginActionRunner.ts +1 -1
- package/src/plugin/core/PluginCatalog.ts +1 -1
- package/src/plugin/core/PluginHttpRoutes.ts +1 -1
- package/src/plugin/core/PluginLocalExecution.ts +11 -24
- package/src/plugin/core/PluginRegistry.ts +55 -32
- package/src/plugin/core/PluginStateController.ts +1 -1
- package/src/{agent/remote → remote}/RemoteAgent.ts +4 -4
- package/src/{agent/remote → remote}/RemoteSession.ts +2 -35
- package/src/{agent/remote → remote}/RemoteTransport.ts +0 -3
- package/src/{agent/remote → remote}/TransportFactory.ts +3 -3
- package/src/{agent/remote → remote}/transports/HttpRemoteAgentTransport.ts +1 -23
- package/src/{rpc/Client.ts → remote/transports/RpcClient.ts} +1 -19
- package/src/{agent/remote → remote}/transports/RpcRemoteAgentTransport.ts +2 -10
- package/src/session/DefaultSessionComposer.ts +79 -0
- package/src/session/Session.ts +496 -332
- package/src/session/{recorder/SessionRecorder.ts → SessionMessages.ts} +254 -428
- package/src/session/SessionQueue.ts +86 -0
- package/src/session/SessionState.ts +322 -0
- package/src/session/SessionSystem.ts +117 -0
- package/src/session/SessionTurn.ts +684 -0
- package/src/session/approval/SessionApprovalBroker.ts +164 -0
- package/src/session/browse/Browse.ts +1 -4
- package/src/session/messages/SessionAssistantMessageWriter.ts +345 -0
- package/src/session/messages/SessionJsonValue.ts +25 -0
- package/src/session/{recorder → messages}/SessionMessageCodec.ts +38 -20
- package/src/session/{recorder/SessionRecorderCompaction.ts → messages/SessionMessageCompaction.ts} +30 -69
- package/src/session/runtime/SessionEventHub.ts +1 -14
- package/src/session/storage/Metadata.ts +60 -34
- package/src/session/storage/RuntimeSessionPort.ts +7 -14
- package/src/types/agent/AgentOptions.ts +6 -38
- package/src/types/agent/AgentState.ts +33 -0
- package/src/types/agent/SessionActor.ts +0 -3
- package/src/types/agent/SessionTypes.ts +5 -18
- package/src/types/executor/SessionRunContext.ts +10 -2
- package/src/types/executor/SessionToolExecutionContext.ts +21 -0
- package/src/types/plugin/PluginAction.ts +10 -1
- package/src/types/plugin/PluginCommand.ts +3 -14
- package/src/types/plugin/PluginConfig.ts +13 -0
- package/src/types/plugin/PluginDefinition.ts +13 -6
- package/src/types/plugin/PluginHttp.ts +1 -1
- package/src/types/plugin/PluginRunContext.ts +31 -0
- package/src/types/plugin/PluginRuntime.ts +13 -6
- package/src/types/plugin/PluginToolRuntime.ts +13 -1
- package/src/types/rpc/RpcProtocol.ts +0 -14
- package/src/types/session/SessionApproval.ts +4 -43
- package/src/types/session/SessionApprovalBroker.ts +18 -0
- package/src/types/session/SessionComposer.ts +114 -0
- package/src/types/session/SessionLocalState.ts +6 -6
- package/src/types/session/SessionMessage.ts +3 -2
- package/src/types/session/SessionMessages.ts +127 -0
- package/src/types/session/SessionMutation.ts +0 -11
- package/src/types/session/SessionOptions.ts +8 -40
- package/src/types/session/SessionPort.ts +97 -0
- package/src/types/session/SessionQueue.ts +122 -0
- package/src/types/session/SessionState.ts +47 -0
- package/src/types/session/SessionSystem.ts +27 -0
- package/src/types/session/SessionTool.ts +25 -0
- package/src/types/session/SessionTurn.ts +56 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/bin/agent/local/Agent.d.ts.map +0 -1
- package/bin/agent/local/Agent.js +0 -216
- package/bin/agent/local/Agent.js.map +0 -1
- package/bin/agent/local/AgentInstructions.d.ts.map +0 -1
- package/bin/agent/local/AgentInstructions.js.map +0 -1
- package/bin/agent/local/AgentPluginFactory.d.ts +0 -26
- package/bin/agent/local/AgentPluginFactory.d.ts.map +0 -1
- package/bin/agent/local/AgentPluginFactory.js +0 -33
- package/bin/agent/local/AgentPluginFactory.js.map +0 -1
- package/bin/agent/local/AgentRuntimeAssembly.d.ts +0 -10
- package/bin/agent/local/AgentRuntimeAssembly.d.ts.map +0 -1
- package/bin/agent/local/AgentRuntimeAssembly.js +0 -43
- package/bin/agent/local/AgentRuntimeAssembly.js.map +0 -1
- package/bin/agent/local/ProjectSetup.d.ts.map +0 -1
- package/bin/agent/local/ProjectSetup.js.map +0 -1
- package/bin/agent/local/services/AgentAssemblyService.d.ts +0 -105
- package/bin/agent/local/services/AgentAssemblyService.d.ts.map +0 -1
- package/bin/agent/local/services/AgentAssemblyService.js +0 -184
- package/bin/agent/local/services/AgentAssemblyService.js.map +0 -1
- package/bin/agent/local/services/AgentBackgroundService.d.ts +0 -55
- package/bin/agent/local/services/AgentBackgroundService.d.ts.map +0 -1
- package/bin/agent/local/services/AgentBackgroundService.js +0 -85
- package/bin/agent/local/services/AgentBackgroundService.js.map +0 -1
- package/bin/agent/local/services/AgentSessions.d.ts.map +0 -1
- package/bin/agent/local/services/AgentSessions.js.map +0 -1
- package/bin/agent/remote/RemoteAgent.d.ts.map +0 -1
- package/bin/agent/remote/RemoteAgent.js.map +0 -1
- package/bin/agent/remote/RemoteSession.d.ts.map +0 -1
- package/bin/agent/remote/RemoteSession.js.map +0 -1
- package/bin/agent/remote/RemoteTransport.d.ts.map +0 -1
- package/bin/agent/remote/RemoteTransport.js.map +0 -1
- package/bin/agent/remote/TransportFactory.d.ts.map +0 -1
- package/bin/agent/remote/TransportFactory.js.map +0 -1
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +0 -1
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +0 -1
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +0 -1
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +0 -1
- package/bin/executor/SessionRunScope.d.ts +0 -68
- package/bin/executor/SessionRunScope.d.ts.map +0 -1
- package/bin/executor/SessionRunScope.js +0 -96
- package/bin/executor/SessionRunScope.js.map +0 -1
- package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts +0 -74
- package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts.map +0 -1
- package/bin/executor/composer/compaction/SessionCompactionComposer.js +0 -9
- package/bin/executor/composer/compaction/SessionCompactionComposer.js.map +0 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.d.ts +0 -27
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.d.ts.map +0 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js +0 -39
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js.map +0 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts +0 -44
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts.map +0 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js +0 -218
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js.map +0 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.d.ts +0 -27
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.d.ts.map +0 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.js +0 -181
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.js.map +0 -1
- package/bin/executor/composer/context/LocalSessionContextComposer.d.ts +0 -50
- package/bin/executor/composer/context/LocalSessionContextComposer.d.ts.map +0 -1
- package/bin/executor/composer/context/LocalSessionContextComposer.js +0 -108
- package/bin/executor/composer/context/LocalSessionContextComposer.js.map +0 -1
- package/bin/executor/composer/context/SessionContextComposer.d.ts +0 -67
- package/bin/executor/composer/context/SessionContextComposer.d.ts.map +0 -1
- package/bin/executor/composer/context/SessionContextComposer.js +0 -9
- package/bin/executor/composer/context/SessionContextComposer.js.map +0 -1
- package/bin/executor/composer/history/SessionHistoryComposer.d.ts +0 -54
- package/bin/executor/composer/history/SessionHistoryComposer.d.ts.map +0 -1
- package/bin/executor/composer/history/SessionHistoryComposer.js +0 -10
- package/bin/executor/composer/history/SessionHistoryComposer.js.map +0 -1
- package/bin/executor/composer/history/SessionHistoryWriter.d.ts +0 -46
- package/bin/executor/composer/history/SessionHistoryWriter.d.ts.map +0 -1
- package/bin/executor/composer/history/SessionHistoryWriter.js +0 -65
- package/bin/executor/composer/history/SessionHistoryWriter.js.map +0 -1
- package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.d.ts +0 -35
- package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.d.ts.map +0 -1
- package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.js +0 -105
- package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.js.map +0 -1
- package/bin/executor/messages/AssistantResultPersistence.d.ts +0 -66
- package/bin/executor/messages/AssistantResultPersistence.d.ts.map +0 -1
- package/bin/executor/messages/AssistantResultPersistence.js +0 -44
- package/bin/executor/messages/AssistantResultPersistence.js.map +0 -1
- package/bin/executor/services/ExecutorInflightService.d.ts +0 -34
- package/bin/executor/services/ExecutorInflightService.d.ts.map +0 -1
- package/bin/executor/services/ExecutorInflightService.js +0 -73
- package/bin/executor/services/ExecutorInflightService.js.map +0 -1
- package/bin/executor/store/history/SessionHistoryStore.d.ts +0 -140
- package/bin/executor/store/history/SessionHistoryStore.d.ts.map +0 -1
- package/bin/executor/store/history/SessionHistoryStore.js +0 -10
- package/bin/executor/store/history/SessionHistoryStore.js.map +0 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts +0 -116
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +0 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +0 -709
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +0 -1
- package/bin/executor/types/SessionHistoryPaths.d.ts +0 -34
- package/bin/executor/types/SessionHistoryPaths.d.ts.map +0 -1
- package/bin/executor/types/SessionHistoryPaths.js +0 -2
- package/bin/executor/types/SessionHistoryPaths.js.map +0 -1
- package/bin/model/CityModelAdapter.d.ts.map +0 -1
- package/bin/model/CityModelAdapter.js.map +0 -1
- package/bin/rpc/Client.d.ts.map +0 -1
- package/bin/rpc/Client.js.map +0 -1
- package/bin/session/SessionSystemBuilder.d.ts +0 -107
- package/bin/session/SessionSystemBuilder.d.ts.map +0 -1
- package/bin/session/SessionSystemBuilder.js +0 -148
- package/bin/session/SessionSystemBuilder.js.map +0 -1
- package/bin/session/recorder/SessionMessageCodec.d.ts.map +0 -1
- package/bin/session/recorder/SessionMessageCodec.js.map +0 -1
- package/bin/session/recorder/SessionRecorder.d.ts +0 -217
- package/bin/session/recorder/SessionRecorder.d.ts.map +0 -1
- package/bin/session/recorder/SessionRecorder.js.map +0 -1
- package/bin/session/recorder/SessionRecorderCompaction.d.ts +0 -18
- package/bin/session/recorder/SessionRecorderCompaction.d.ts.map +0 -1
- package/bin/session/recorder/SessionRecorderCompaction.js.map +0 -1
- package/bin/session/recorder/SessionRecorderHistoryStore.d.ts +0 -66
- package/bin/session/recorder/SessionRecorderHistoryStore.d.ts.map +0 -1
- package/bin/session/recorder/SessionRecorderHistoryStore.js +0 -190
- package/bin/session/recorder/SessionRecorderHistoryStore.js.map +0 -1
- package/bin/session/runtime/SessionPromptRuntime.d.ts +0 -112
- package/bin/session/runtime/SessionPromptRuntime.d.ts.map +0 -1
- package/bin/session/runtime/SessionPromptRuntime.js +0 -357
- package/bin/session/runtime/SessionPromptRuntime.js.map +0 -1
- package/bin/session/services/SessionStateService.d.ts +0 -187
- package/bin/session/services/SessionStateService.d.ts.map +0 -1
- package/bin/session/services/SessionStateService.js +0 -467
- package/bin/session/services/SessionStateService.js.map +0 -1
- package/bin/session/services/SessionTurnService.d.ts +0 -90
- package/bin/session/services/SessionTurnService.d.ts.map +0 -1
- package/bin/session/services/SessionTurnService.js +0 -293
- package/bin/session/services/SessionTurnService.js.map +0 -1
- package/bin/session/services/SessionViewService.d.ts +0 -114
- package/bin/session/services/SessionViewService.d.ts.map +0 -1
- package/bin/session/services/SessionViewService.js +0 -204
- package/bin/session/services/SessionViewService.js.map +0 -1
- package/bin/session/storage/Persistence.d.ts +0 -73
- package/bin/session/storage/Persistence.d.ts.map +0 -1
- package/bin/session/storage/Persistence.js +0 -63
- package/bin/session/storage/Persistence.js.map +0 -1
- package/bin/types/agent/AgentRuntimeAssembly.d.ts +0 -72
- package/bin/types/agent/AgentRuntimeAssembly.d.ts.map +0 -1
- package/bin/types/agent/AgentRuntimeAssembly.js +0 -10
- package/bin/types/agent/AgentRuntimeAssembly.js.map +0 -1
- package/bin/types/runtime/agent/AgentContext.d.ts +0 -306
- package/bin/types/runtime/agent/AgentContext.d.ts.map +0 -1
- package/bin/types/runtime/agent/AgentContext.js +0 -128
- package/bin/types/runtime/agent/AgentContext.js.map +0 -1
- package/bin/types/session/SessionComposerOptions.d.ts +0 -90
- package/bin/types/session/SessionComposerOptions.d.ts.map +0 -1
- package/bin/types/session/SessionComposerOptions.js +0 -10
- package/bin/types/session/SessionComposerOptions.js.map +0 -1
- package/bin/types/session/SessionQueueCommand.d.ts +0 -68
- package/bin/types/session/SessionQueueCommand.d.ts.map +0 -1
- package/bin/types/session/SessionQueueCommand.js +0 -10
- package/bin/types/session/SessionQueueCommand.js.map +0 -1
- package/scripts/session-action-message.test.mjs +0 -410
- package/scripts/session-compaction-context-window.test.mjs +0 -96
- package/scripts/session-history-inflight.test.mjs +0 -146
- package/scripts/session-history-writer-error.test.mjs +0 -57
- package/scripts/session-prompt-runtime.test.mjs +0 -390
- package/src/agent/local/Agent.ts +0 -250
- package/src/agent/local/AgentPluginFactory.ts +0 -51
- package/src/agent/local/AgentRuntimeAssembly.ts +0 -65
- package/src/agent/local/services/AgentAssemblyService.ts +0 -307
- package/src/agent/local/services/AgentBackgroundService.ts +0 -115
- package/src/executor/SessionRunScope.ts +0 -122
- package/src/executor/composer/compaction/SessionCompactionComposer.ts +0 -84
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.ts +0 -51
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.ts +0 -294
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.ts +0 -197
- package/src/executor/composer/context/LocalSessionContextComposer.ts +0 -175
- package/src/executor/composer/context/SessionContextComposer.ts +0 -83
- package/src/executor/composer/history/SessionHistoryComposer.ts +0 -62
- package/src/executor/composer/history/SessionHistoryWriter.ts +0 -100
- package/src/executor/composer/history/jsonl/JsonlSessionHistoryComposer.ts +0 -133
- package/src/executor/messages/AssistantResultPersistence.ts +0 -106
- package/src/executor/services/ExecutorInflightService.ts +0 -95
- package/src/executor/store/history/SessionHistoryStore.ts +0 -172
- package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +0 -879
- package/src/executor/types/SessionHistoryPaths.ts +0 -38
- package/src/session/SessionSystemBuilder.ts +0 -262
- package/src/session/recorder/SessionRecorderHistoryStore.ts +0 -256
- package/src/session/runtime/SessionPromptRuntime.ts +0 -518
- package/src/session/services/SessionStateService.ts +0 -628
- package/src/session/services/SessionTurnService.ts +0 -368
- package/src/session/services/SessionViewService.ts +0 -335
- package/src/session/storage/Persistence.ts +0 -137
- package/src/types/agent/AgentRuntimeAssembly.ts +0 -74
- package/src/types/runtime/agent/AgentContext.ts +0 -387
- package/src/types/session/SessionComposerOptions.ts +0 -107
- package/src/types/session/SessionQueueCommand.ts +0 -78
- /package/bin/{agent/local → config}/ProjectSetup.d.ts +0 -0
- /package/bin/{agent/remote → remote}/RemoteTransport.js +0 -0
- /package/bin/session/{recorder → messages}/JsonlSessionMessageStore.d.ts +0 -0
- /package/bin/session/{recorder → messages}/JsonlSessionMessageStore.js +0 -0
- /package/src/{agent/local → config}/ProjectSetup.ts +0 -0
- /package/src/session/{recorder → messages}/JsonlSessionMessageStore.ts +0 -0
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import fs from "fs-extra";
|
|
11
11
|
import { nanoid } from "nanoid";
|
|
12
12
|
import type { Tool } from "ai";
|
|
13
|
+
import type { AgentModel } from "@/agent/AgentModel.js";
|
|
13
14
|
import type { Logger } from "@/utils/logger/Logger.js";
|
|
14
15
|
import type {
|
|
15
16
|
AgentCreateSessionInput,
|
|
@@ -22,25 +23,25 @@ import type {
|
|
|
22
23
|
AgentSessionSummaryPage,
|
|
23
24
|
AgentSessionSystemBlock,
|
|
24
25
|
} from "@/types/agent/SessionTypes.js";
|
|
25
|
-
import type { AgentModel } from "@/model/CityModelAdapter.js";
|
|
26
26
|
import type { AgentSessionConstructor } from "@/types/agent/AgentOptions.js";
|
|
27
|
-
import type {
|
|
27
|
+
import type {
|
|
28
|
+
AgentSession,
|
|
29
|
+
AgentSessions as AgentSessionsContract,
|
|
30
|
+
} from "@/types/agent/SessionActor.js";
|
|
28
31
|
import type { AgentManagedSession } from "@/types/session/SessionOptions.js";
|
|
29
32
|
import { Session } from "@/session/Session.js";
|
|
30
33
|
import {
|
|
31
34
|
getSdkAgentArchivedSessionDirPath,
|
|
32
35
|
getSdkAgentArchivedSessionsDirPath,
|
|
33
36
|
getSdkAgentSessionDirPath,
|
|
37
|
+
getSdkAgentSessionMessagesDirPath,
|
|
34
38
|
} from "@/session/storage/Paths.js";
|
|
35
39
|
import {
|
|
36
40
|
listArchivedAgentSessionSummaryPage,
|
|
37
41
|
listAgentSessionSummaryPage,
|
|
38
42
|
} from "@/session/browse/Browse.js";
|
|
39
|
-
import type {
|
|
40
|
-
import
|
|
41
|
-
import { createInstructionSystemBlocks } from "@/agent/local/AgentInstructions.js";
|
|
42
|
-
import type { Shell } from "@downcity/shell";
|
|
43
|
-
import type { SessionApproval } from "@/types/session/SessionApproval.js";
|
|
43
|
+
import type { SessionPort } from "@/types/session/SessionPort.js";
|
|
44
|
+
import { createInstructionSystemBlocks } from "@/agent/AgentInstructions.js";
|
|
44
45
|
import type { AgentPluginExecutionRuntime } from "@/types/plugin/PluginRuntime.js";
|
|
45
46
|
|
|
46
47
|
function decodeMaybe(input: string): string {
|
|
@@ -72,17 +73,6 @@ type AgentSessionsOptions = {
|
|
|
72
73
|
*/
|
|
73
74
|
logger: Logger;
|
|
74
75
|
|
|
75
|
-
/**
|
|
76
|
-
* 延迟读取当前 agent context。
|
|
77
|
-
*
|
|
78
|
-
* 关键点(中文)
|
|
79
|
-
* - 装配期通过 getter 拿到 context,避免循环引用。
|
|
80
|
-
*/
|
|
81
|
-
get_agent_context: () => AgentContext;
|
|
82
|
-
|
|
83
|
-
/** 延迟读取当前 Agent 挂载的 Shell Runtime。 */
|
|
84
|
-
get_shell: () => Shell | undefined;
|
|
85
|
-
|
|
86
76
|
/**
|
|
87
77
|
* 当前静态 instruction 文本集合。
|
|
88
78
|
*/
|
|
@@ -95,63 +85,46 @@ type AgentSessionsOptions = {
|
|
|
95
85
|
get_agent_plugins: () => AgentPluginExecutionRuntime;
|
|
96
86
|
|
|
97
87
|
/**
|
|
98
|
-
* 等待当前 Agent
|
|
88
|
+
* 等待当前 Agent 持有的长期运行时启动完成。
|
|
99
89
|
*/
|
|
100
90
|
ensure_agent_ready: () => Promise<void>;
|
|
101
91
|
|
|
102
|
-
/**
|
|
103
|
-
* 当前默认模型实例。
|
|
104
|
-
*/
|
|
105
|
-
default_model?: AgentModel;
|
|
106
|
-
|
|
107
|
-
/** 当前默认模型的稳定 ID。 */
|
|
108
|
-
default_model_id?: string;
|
|
109
|
-
|
|
110
|
-
/** 按稳定 ID 解析 Session 模型。 */
|
|
111
|
-
resolve_model?: (model_id: string) => Promise<AgentModel>;
|
|
112
|
-
|
|
113
92
|
/**
|
|
114
93
|
* 当前 agent 使用的本地 Session 类。
|
|
115
94
|
*/
|
|
116
95
|
SessionClass?: AgentSessionConstructor;
|
|
96
|
+
|
|
97
|
+
/** 读取 Agent 当前持有的运行时模型实例。 */
|
|
98
|
+
get_agent_model: () => AgentModel | undefined;
|
|
117
99
|
};
|
|
118
100
|
|
|
119
101
|
/**
|
|
120
102
|
* 本地 Agent session 管理服务。
|
|
121
103
|
*/
|
|
122
|
-
export class AgentSessions implements
|
|
104
|
+
export class AgentSessions implements AgentSessionsContract<AgentSession> {
|
|
123
105
|
private readonly agent_id: string;
|
|
124
106
|
private readonly project_root: string;
|
|
125
107
|
private readonly tools: Record<string, Tool>;
|
|
126
108
|
private readonly logger: Logger;
|
|
127
|
-
private readonly get_agent_context: AgentSessionsOptions["get_agent_context"];
|
|
128
|
-
private readonly get_shell: AgentSessionsOptions["get_shell"];
|
|
129
109
|
private readonly get_instruction: AgentSessionsOptions["get_instruction"];
|
|
130
110
|
private readonly get_agent_env: AgentSessionsOptions["get_agent_env"];
|
|
131
111
|
private readonly get_agent_plugins: AgentSessionsOptions["get_agent_plugins"];
|
|
132
112
|
private readonly ensure_agent_ready: AgentSessionsOptions["ensure_agent_ready"];
|
|
133
|
-
private readonly default_model?: AgentModel;
|
|
134
|
-
private readonly default_model_id?: string;
|
|
135
|
-
private readonly resolve_model?: AgentSessionsOptions["resolve_model"];
|
|
136
113
|
private readonly SessionClass: AgentSessionConstructor;
|
|
114
|
+
private readonly get_agent_model: AgentSessionsOptions["get_agent_model"];
|
|
137
115
|
private readonly sessions_by_id = new Map<string, AgentManagedSession>();
|
|
138
|
-
private readonly configured_session_ids = new Set<string>();
|
|
139
116
|
|
|
140
117
|
constructor(options: AgentSessionsOptions) {
|
|
141
118
|
this.agent_id = options.agent_id;
|
|
142
119
|
this.project_root = options.project_root;
|
|
143
120
|
this.tools = options.tools;
|
|
144
121
|
this.logger = options.logger;
|
|
145
|
-
this.get_agent_context = options.get_agent_context;
|
|
146
|
-
this.get_shell = options.get_shell;
|
|
147
122
|
this.get_instruction = options.get_instruction;
|
|
148
123
|
this.get_agent_env = options.get_agent_env;
|
|
149
124
|
this.get_agent_plugins = options.get_agent_plugins;
|
|
150
125
|
this.ensure_agent_ready = options.ensure_agent_ready;
|
|
151
|
-
this.default_model = options.default_model;
|
|
152
|
-
this.default_model_id = options.default_model_id;
|
|
153
|
-
this.resolve_model = options.resolve_model;
|
|
154
126
|
this.SessionClass = options.SessionClass || Session;
|
|
127
|
+
this.get_agent_model = options.get_agent_model;
|
|
155
128
|
}
|
|
156
129
|
|
|
157
130
|
/**
|
|
@@ -161,6 +134,18 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
|
|
|
161
134
|
return [...this.sessions_by_id.values()];
|
|
162
135
|
}
|
|
163
136
|
|
|
137
|
+
/** 返回当前所有执行中的 Session 标识。 */
|
|
138
|
+
list_executing_session_ids(): string[] {
|
|
139
|
+
return this.list_cached_sessions()
|
|
140
|
+
.filter((session) => session.isExecuting())
|
|
141
|
+
.map((session) => session.id);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** 返回当前执行中的 Session 数量。 */
|
|
145
|
+
get_executing_session_count(): number {
|
|
146
|
+
return this.list_executing_session_ids().length;
|
|
147
|
+
}
|
|
148
|
+
|
|
164
149
|
/**
|
|
165
150
|
* 把 Agent instruction 修改广播到已有 Session 的统一输入队列。
|
|
166
151
|
*/
|
|
@@ -212,7 +197,7 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
|
|
|
212
197
|
/**
|
|
213
198
|
* 获取或创建一个 session runtime port。
|
|
214
199
|
*/
|
|
215
|
-
|
|
200
|
+
runtime(session_id: string): SessionPort {
|
|
216
201
|
return this.get_or_create_session({
|
|
217
202
|
session_id,
|
|
218
203
|
}).getRuntimePort();
|
|
@@ -243,7 +228,6 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
|
|
|
243
228
|
session_id: explicit_session_id,
|
|
244
229
|
});
|
|
245
230
|
await session.initialize();
|
|
246
|
-
await this.apply_session_defaults(session);
|
|
247
231
|
return session;
|
|
248
232
|
}
|
|
249
233
|
|
|
@@ -270,10 +254,59 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
|
|
|
270
254
|
session_id: resolved_session_id,
|
|
271
255
|
});
|
|
272
256
|
await session.initialize();
|
|
273
|
-
await this.apply_session_defaults(session);
|
|
274
257
|
return session;
|
|
275
258
|
}
|
|
276
259
|
|
|
260
|
+
/**
|
|
261
|
+
* 永久删除一个 Session 及其全部 Agent 领域数据。
|
|
262
|
+
*
|
|
263
|
+
* 关键点(中文)
|
|
264
|
+
* - 正在执行的 Session 会先停止,避免删除后继续写入。
|
|
265
|
+
* - 该方法不处理任何 Plugin 自有数据。
|
|
266
|
+
*/
|
|
267
|
+
async remove(session_id: string): Promise<boolean> {
|
|
268
|
+
const resolved_session_id = String(session_id || "").trim();
|
|
269
|
+
if (!resolved_session_id) {
|
|
270
|
+
throw new Error("sessions.remove requires a non-empty sessionId");
|
|
271
|
+
}
|
|
272
|
+
const cached = this.sessions_by_id.get(resolved_session_id);
|
|
273
|
+
if (cached?.isExecuting()) {
|
|
274
|
+
await cached.stop();
|
|
275
|
+
}
|
|
276
|
+
const session_dir_path = getSdkAgentSessionDirPath(
|
|
277
|
+
this.project_root,
|
|
278
|
+
this.agent_id,
|
|
279
|
+
resolved_session_id,
|
|
280
|
+
);
|
|
281
|
+
const existed = await fs.pathExists(session_dir_path);
|
|
282
|
+
if (existed) await fs.remove(session_dir_path);
|
|
283
|
+
this.sessions_by_id.delete(resolved_session_id);
|
|
284
|
+
return existed;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* 清空一个 Session 的消息目录。
|
|
289
|
+
*/
|
|
290
|
+
async clear_messages(session_id: string): Promise<boolean> {
|
|
291
|
+
const resolved_session_id = String(session_id || "").trim();
|
|
292
|
+
if (!resolved_session_id) {
|
|
293
|
+
throw new Error("sessions.clear_messages requires a non-empty sessionId");
|
|
294
|
+
}
|
|
295
|
+
const cached = this.sessions_by_id.get(resolved_session_id);
|
|
296
|
+
if (cached?.isExecuting()) {
|
|
297
|
+
throw new Error(`Session "${resolved_session_id}" is currently executing`);
|
|
298
|
+
}
|
|
299
|
+
const messages_dir_path = getSdkAgentSessionMessagesDirPath(
|
|
300
|
+
this.project_root,
|
|
301
|
+
this.agent_id,
|
|
302
|
+
resolved_session_id,
|
|
303
|
+
);
|
|
304
|
+
const existed = await fs.pathExists(messages_dir_path);
|
|
305
|
+
if (existed) await fs.remove(messages_dir_path);
|
|
306
|
+
this.sessions_by_id.delete(resolved_session_id);
|
|
307
|
+
return existed;
|
|
308
|
+
}
|
|
309
|
+
|
|
277
310
|
/**
|
|
278
311
|
* 列出当前 agent 的 session 摘要页。
|
|
279
312
|
*/
|
|
@@ -284,7 +317,7 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
|
|
|
284
317
|
projectRoot: this.project_root,
|
|
285
318
|
agentId: this.agent_id,
|
|
286
319
|
input,
|
|
287
|
-
executingSessionIds: new Set(this.
|
|
320
|
+
executingSessionIds: new Set(this.list_executing_session_ids()),
|
|
288
321
|
});
|
|
289
322
|
}
|
|
290
323
|
|
|
@@ -299,9 +332,7 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
|
|
|
299
332
|
throw new Error("sessions.archive requires a non-empty id");
|
|
300
333
|
}
|
|
301
334
|
|
|
302
|
-
const executing_session_ids = new Set(
|
|
303
|
-
this.get_agent_context().listExecutingSessionIds(),
|
|
304
|
-
);
|
|
335
|
+
const executing_session_ids = new Set(this.list_executing_session_ids());
|
|
305
336
|
if (executing_session_ids.has(session_id)) {
|
|
306
337
|
throw new Error(`Session "${session_id}" is currently executing`);
|
|
307
338
|
}
|
|
@@ -332,7 +363,6 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
|
|
|
332
363
|
|
|
333
364
|
// 关键点(中文):归档后清理缓存,避免后续操作访问已移动目录。
|
|
334
365
|
this.sessions_by_id.delete(session_id);
|
|
335
|
-
this.configured_session_ids.delete(session_id);
|
|
336
366
|
|
|
337
367
|
return {
|
|
338
368
|
sessionId: session_id,
|
|
@@ -408,73 +438,17 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
|
|
|
408
438
|
logger: this.logger,
|
|
409
439
|
getInstructionSystemBlocks: () => this.load_instruction_system_blocks(),
|
|
410
440
|
getAgentEnv: () => this.get_agent_env(),
|
|
441
|
+
getAgentModel: () => this.get_agent_model(),
|
|
411
442
|
get_agent_plugins: () => this.get_agent_plugins(),
|
|
412
443
|
getManagedPluginSystemBlocks: async () => [],
|
|
413
|
-
getPluginSystemBlocks: async () => await this.load_plugin_system_blocks(),
|
|
414
444
|
ensureConfigured: async (session) => {
|
|
415
445
|
await this.ensure_agent_ready();
|
|
416
|
-
await this.apply_session_defaults(session);
|
|
417
|
-
},
|
|
418
|
-
...(this.resolve_model ? { resolve_model: this.resolve_model } : {}),
|
|
419
|
-
list_approvals: async (session_id) => this.list_session_approvals(session_id),
|
|
420
|
-
get_approval_mode: async (session_id) => {
|
|
421
|
-
const shell = this.require_shell();
|
|
422
|
-
return shell.approval_mode({ session_id });
|
|
423
|
-
},
|
|
424
|
-
set_approval_mode: async (session_id, { mode }) => {
|
|
425
|
-
const shell = this.require_shell();
|
|
426
|
-
return shell.set_approval_mode({ session_id, mode });
|
|
427
|
-
},
|
|
428
|
-
resolve_approval: async (session_id, { approval_id, decision }) => {
|
|
429
|
-
const approval = this.list_session_approvals(session_id)
|
|
430
|
-
.find((item) => item.approval_id === approval_id);
|
|
431
|
-
if (!approval) return { success: false, approval_id, decision };
|
|
432
|
-
return decision === "approved"
|
|
433
|
-
? await this.require_shell().approve({ approval_id })
|
|
434
|
-
: await this.require_shell().deny({ approval_id });
|
|
435
446
|
},
|
|
436
447
|
});
|
|
437
448
|
this.sessions_by_id.set(resolved_session_id, created);
|
|
438
449
|
return created;
|
|
439
450
|
}
|
|
440
451
|
|
|
441
|
-
private require_shell(): Shell {
|
|
442
|
-
const shell = this.get_shell();
|
|
443
|
-
if (!shell) throw new Error("Session shell is not configured");
|
|
444
|
-
return shell;
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
private list_session_approvals(session_id: string): SessionApproval[] {
|
|
448
|
-
return (this.get_shell()?.approvals() || [])
|
|
449
|
-
.filter((approval) => approval.session_id === session_id)
|
|
450
|
-
.map((approval) => ({
|
|
451
|
-
approval_id: approval.approval_id,
|
|
452
|
-
session_id,
|
|
453
|
-
...(approval.turn_id ? { turn_id: approval.turn_id } : {}),
|
|
454
|
-
...(approval.tool_call_id ? { tool_call_id: approval.tool_call_id } : {}),
|
|
455
|
-
tool_name: approval.tool_name,
|
|
456
|
-
command: approval.cmd,
|
|
457
|
-
cwd: approval.cwd,
|
|
458
|
-
reason: approval.reason,
|
|
459
|
-
operation: approval.operation,
|
|
460
|
-
created_at: approval.created_at,
|
|
461
|
-
}));
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
private async apply_session_defaults(
|
|
465
|
-
session: AgentManagedSession,
|
|
466
|
-
): Promise<void> {
|
|
467
|
-
if (this.configured_session_ids.has(session.id)) return;
|
|
468
|
-
const persisted_model_id = String(session.config.modelId || "").trim();
|
|
469
|
-
if (!persisted_model_id && this.default_model) {
|
|
470
|
-
await session.set({
|
|
471
|
-
model: this.default_model,
|
|
472
|
-
...(this.default_model_id ? { modelId: this.default_model_id } : {}),
|
|
473
|
-
});
|
|
474
|
-
}
|
|
475
|
-
this.configured_session_ids.add(session.id);
|
|
476
|
-
}
|
|
477
|
-
|
|
478
452
|
private load_instruction_system_blocks(): AgentSessionSystemBlock[] {
|
|
479
453
|
return createInstructionSystemBlocks(
|
|
480
454
|
this.get_instruction(),
|
|
@@ -482,7 +456,4 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
|
|
|
482
456
|
);
|
|
483
457
|
}
|
|
484
458
|
|
|
485
|
-
private async load_plugin_system_blocks(): Promise<AgentSessionSystemBlock[]> {
|
|
486
|
-
return await this.get_agent_context().plugins.systemBlocks();
|
|
487
|
-
}
|
|
488
459
|
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentState:本地 Agent 长期运行状态与生命周期。
|
|
3
|
+
*
|
|
4
|
+
* 职责说明(中文)
|
|
5
|
+
* - 统一连接 PluginRegistry、AgentContext、AgentSessions 与共享 tools。
|
|
6
|
+
* - 持有 Plugin lifecycle 与 ActionSchedule 的启动状态。
|
|
7
|
+
* - Agent 构造完成后立即开始启动,调用方通过 `ready()` 等待。
|
|
8
|
+
* - Agent 释放时统一停止 ActionSchedule、Plugin lifecycle 与 Shell。
|
|
9
|
+
* - RPC / HTTP 等 transport 不属于 AgentState,由上游宿主独立管理。
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { Shell } from "@downcity/shell";
|
|
13
|
+
import type { Tool } from "ai";
|
|
14
|
+
import type { AgentContext } from "@/agent/AgentContext.js";
|
|
15
|
+
import type { AgentSessions } from "@/agent/AgentSessions.js";
|
|
16
|
+
import type { PluginRegistry } from "@/plugin/core/PluginRegistry.js";
|
|
17
|
+
import type { AgentStateOptions } from "@/types/agent/AgentState.js";
|
|
18
|
+
import { createPluginTools } from "@executor/tools/plugin/PluginToolDefinition.js";
|
|
19
|
+
import { generateId } from "@/utils/Id.js";
|
|
20
|
+
import {
|
|
21
|
+
startActionScheduleRuntime,
|
|
22
|
+
type ActionScheduleRuntimeHandle,
|
|
23
|
+
} from "@/plugin/core/ActionScheduleRuntime.js";
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 本地 Agent 长期运行状态。
|
|
27
|
+
*/
|
|
28
|
+
export class AgentState {
|
|
29
|
+
/** 当前 Agent 共用的执行上下文。 */
|
|
30
|
+
private readonly context: AgentContext;
|
|
31
|
+
|
|
32
|
+
/** 当前 Agent 唯一的 PluginRegistry 实例。 */
|
|
33
|
+
private readonly plugins: PluginRegistry;
|
|
34
|
+
|
|
35
|
+
/** 当前 Agent 唯一的 Session 集合。 */
|
|
36
|
+
private readonly sessions: AgentSessions;
|
|
37
|
+
|
|
38
|
+
/** 当前 Agent 与 Session 共享的可变工具集合。 */
|
|
39
|
+
private readonly tools: Record<string, Tool>;
|
|
40
|
+
|
|
41
|
+
/** 当前 Agent 持有的可选 Shell 实例。 */
|
|
42
|
+
private readonly shell?: Shell;
|
|
43
|
+
|
|
44
|
+
/** Plugin lifecycle 与 ActionSchedule 的唯一启动 Promise。 */
|
|
45
|
+
private readonly ready_promise: Promise<void>;
|
|
46
|
+
|
|
47
|
+
/** Plugin lifecycle 是否已经完成启动流程。 */
|
|
48
|
+
private plugins_started = false;
|
|
49
|
+
|
|
50
|
+
/** 当前 Agent 持有的 ActionSchedule 轮询运行时。 */
|
|
51
|
+
private action_schedule_runtime: ActionScheduleRuntimeHandle | null = null;
|
|
52
|
+
|
|
53
|
+
constructor(options: AgentStateOptions) {
|
|
54
|
+
this.context = options.context;
|
|
55
|
+
this.plugins = options.plugins;
|
|
56
|
+
this.sessions = options.sessions;
|
|
57
|
+
this.tools = options.tools;
|
|
58
|
+
this.shell = options.shell;
|
|
59
|
+
|
|
60
|
+
this.plugins.bind_context(this.context);
|
|
61
|
+
this.ensure_plugin_tools();
|
|
62
|
+
this.plugins.set_change_listener(({ type, plugin_name }) => {
|
|
63
|
+
this.handle_plugin_change(type, plugin_name);
|
|
64
|
+
});
|
|
65
|
+
this.ready_promise = this.start_runtime();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* 等待当前 Agent 持有的长期运行时启动完成。
|
|
70
|
+
*/
|
|
71
|
+
async ready(): Promise<void> {
|
|
72
|
+
await this.ready_promise;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* 释放当前 Agent 持有的长期运行时对象。
|
|
77
|
+
*/
|
|
78
|
+
async dispose(): Promise<void> {
|
|
79
|
+
await this.ready_promise.catch(() => undefined);
|
|
80
|
+
this.action_schedule_runtime?.stop();
|
|
81
|
+
this.action_schedule_runtime = null;
|
|
82
|
+
if (this.plugins_started) {
|
|
83
|
+
await this.context.plugins.unregisterAll();
|
|
84
|
+
this.plugins_started = false;
|
|
85
|
+
}
|
|
86
|
+
await this.shell?.dispose();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* 启动 Plugin lifecycle 与 ActionSchedule。
|
|
91
|
+
*
|
|
92
|
+
* 关键点(中文)
|
|
93
|
+
* - Plugin lifecycle 先启动,避免到期任务调用未就绪的 Plugin。
|
|
94
|
+
* - 单个 Plugin 启动失败由 PluginRegistry 隔离,只记录错误并继续启动 Agent。
|
|
95
|
+
* - ActionSchedule 启动失败不阻断 Agent ready。
|
|
96
|
+
*/
|
|
97
|
+
private async start_runtime(): Promise<void> {
|
|
98
|
+
const snapshots = await this.plugins.startAll();
|
|
99
|
+
this.plugins_started = true;
|
|
100
|
+
for (const item of snapshots) {
|
|
101
|
+
if (item.status === "error") {
|
|
102
|
+
this.context.logger.error(
|
|
103
|
+
`Plugin start failed: ${item.name} - ${item.last_error || "unknown error"}`,
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
this.action_schedule_runtime = await startActionScheduleRuntime(
|
|
110
|
+
this.context,
|
|
111
|
+
);
|
|
112
|
+
} catch (error) {
|
|
113
|
+
this.context.logger.error(
|
|
114
|
+
`ActionSchedule start failed: ${String(error)}`,
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* 确保带 action 的 PluginRegistry 已连接通用调用工具。
|
|
121
|
+
*
|
|
122
|
+
* 关键点(中文)
|
|
123
|
+
* - 初始 Plugin 与运行中动态注册 Plugin 统一走这里。
|
|
124
|
+
* - 只补充缺失工具,不覆盖调用方提供的同名自定义工具。
|
|
125
|
+
* - tools 是 AgentSessions 与 Session 共享引用,原地写入会立即对现有 Session 生效。
|
|
126
|
+
*/
|
|
127
|
+
private ensure_plugin_tools(): void {
|
|
128
|
+
if (!this.plugins.list().some((plugin) => plugin.actions.length > 0)) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const plugin_tools = createPluginTools({ plugins: this.plugins });
|
|
132
|
+
this.tools.plugin_read = this.tools.plugin_read || plugin_tools.plugin_read;
|
|
133
|
+
this.tools.plugin_call = this.tools.plugin_call || plugin_tools.plugin_call;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* 处理 PluginRegistry 修改后的 Agent 运行时同步。
|
|
138
|
+
*/
|
|
139
|
+
private handle_plugin_change(
|
|
140
|
+
type: "register" | "unregister",
|
|
141
|
+
plugin_name: string,
|
|
142
|
+
): void {
|
|
143
|
+
this.ensure_plugin_tools();
|
|
144
|
+
const verb = type === "register" ? "registered" : "unregistered";
|
|
145
|
+
this.sessions.broadcast_plugins({
|
|
146
|
+
command_id: generateId(),
|
|
147
|
+
title: `Agent plugin ${plugin_name} ${verb}`,
|
|
148
|
+
plugins: this.plugins.execution_view(),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
package/src/config/Paths.ts
CHANGED
|
@@ -67,39 +67,6 @@ export function getDowncityProfileOtherPath(cwd: string): string {
|
|
|
67
67
|
return path.join(getDowncityProfileDirPath(cwd), "other.md");
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
/**
|
|
71
|
-
* Memory 根目录(V2)。
|
|
72
|
-
*
|
|
73
|
-
* 关键点(中文)
|
|
74
|
-
* - `.downcity/memory` 为跨会话记忆目录。
|
|
75
|
-
* - 当前仅供本模块内部继续拼接长期记忆与每日记忆路径。
|
|
76
|
-
*/
|
|
77
|
-
function getDowncityMemoryDirPath(cwd: string): string {
|
|
78
|
-
return path.join(getDowncityDirPath(cwd), "memory");
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* 长期记忆文件路径(V2)。
|
|
83
|
-
*/
|
|
84
|
-
export function getDowncityMemoryLongTermPath(cwd: string): string {
|
|
85
|
-
return path.join(getDowncityMemoryDirPath(cwd), "MEMORY.md");
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* 每日记忆目录路径(V2)。
|
|
90
|
-
*/
|
|
91
|
-
export function getDowncityMemoryDailyDirPath(cwd: string): string {
|
|
92
|
-
return path.join(getDowncityMemoryDirPath(cwd), "daily");
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* 每日记忆文件路径(V2)。
|
|
97
|
-
*/
|
|
98
|
-
export function getDowncityMemoryDailyPath(cwd: string, date: string): string {
|
|
99
|
-
const fileName = `${String(date || "").trim() || "unknown-date"}.md`;
|
|
100
|
-
return path.join(getDowncityMemoryDailyDirPath(cwd), fileName);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
70
|
/**
|
|
104
71
|
* Plugin Schedule JSONL 路径。
|
|
105
72
|
*
|
|
@@ -272,61 +239,3 @@ export function getDowncityTasksDirPath(cwd: string): string {
|
|
|
272
239
|
export function getDowncityDebugDirPath(cwd: string): string {
|
|
273
240
|
return path.join(getDowncityDirPath(cwd), ".debug");
|
|
274
241
|
}
|
|
275
|
-
|
|
276
|
-
/**
|
|
277
|
-
* Chat 元信息目录(由 chat plugin runtime 维护)。
|
|
278
|
-
*
|
|
279
|
-
* 关键点(中文)
|
|
280
|
-
* - 该目录存放 `sessionId -> chat` 的最近映射快照
|
|
281
|
-
* - 与 core session messages 分离,避免把平台路由细节耦合进 core
|
|
282
|
-
* - 当前仅供本模块内部继续拼接 chat 会话与 meta 子目录。
|
|
283
|
-
*/
|
|
284
|
-
function getDowncityChatDirPath(cwd: string): string {
|
|
285
|
-
return path.join(getDowncityDirPath(cwd), "chat");
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* Channel 目录(channel -> sessionId 映射)。
|
|
290
|
-
*
|
|
291
|
-
* 关键点(中文)
|
|
292
|
-
* - 专门承载渠道目标与内部 sessionId 的映射关系。
|
|
293
|
-
* - 与 `chat/` 审计事件目录分离,避免职责混淆。
|
|
294
|
-
*/
|
|
295
|
-
export function getDowncityChannelDirPath(cwd: string): string {
|
|
296
|
-
return path.join(getDowncityDirPath(cwd), "channel");
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* Channel 元信息文件路径。
|
|
301
|
-
*
|
|
302
|
-
* 关键点(中文)
|
|
303
|
-
* - 采用单文件 JSON(`meta.json`)存储映射表与最近路由信息。
|
|
304
|
-
*/
|
|
305
|
-
export function getDowncityChannelMetaPath(cwd: string): string {
|
|
306
|
-
return path.join(getDowncityChannelDirPath(cwd), "meta.json");
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Chat 会话目录(按 sessionId 组织)。
|
|
311
|
-
*
|
|
312
|
-
* 关键点(中文)
|
|
313
|
-
* - 用于存放聊天事件流(history.jsonl)等审计向数据。
|
|
314
|
-
* - 与 `chat/meta` 分离,避免路由快照与事件流混在一起。
|
|
315
|
-
*/
|
|
316
|
-
export function getDowncityChatSessionDirPath(cwd: string, sessionId: string): string {
|
|
317
|
-
return path.join(
|
|
318
|
-
getDowncityChatDirPath(cwd),
|
|
319
|
-
encodeURIComponent(String(sessionId || "").trim()),
|
|
320
|
-
);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
/**
|
|
324
|
-
* Chat 事件流文件路径(JSONL)。
|
|
325
|
-
*
|
|
326
|
-
* 关键点(中文)
|
|
327
|
-
* - 每行一条 chat 事件(当前为 inbound)。
|
|
328
|
-
* - 设计为 append-only,便于审计与回放。
|
|
329
|
-
*/
|
|
330
|
-
export function getDowncityChatHistoryPath(cwd: string, sessionId: string): string {
|
|
331
|
-
return path.join(getDowncityChatSessionDirPath(cwd, sessionId), "history.jsonl");
|
|
332
|
-
}
|