@downcity/agent 1.1.74 → 1.1.79
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 +14 -17
- package/bin/agent/{Agent.d.ts → local/Agent.d.ts} +8 -36
- package/bin/agent/local/Agent.d.ts.map +1 -0
- package/bin/agent/{Agent.js → local/Agent.js} +45 -200
- package/bin/agent/local/Agent.js.map +1 -0
- package/bin/agent/local/AgentInstructions.d.ts +22 -0
- package/bin/agent/local/AgentInstructions.d.ts.map +1 -0
- package/bin/agent/local/AgentInstructions.js +57 -0
- package/bin/agent/local/AgentInstructions.js.map +1 -0
- package/bin/agent/local/AgentPluginFactory.d.ts +29 -0
- package/bin/agent/local/AgentPluginFactory.d.ts.map +1 -0
- package/bin/agent/local/AgentPluginFactory.js +53 -0
- package/bin/agent/local/AgentPluginFactory.js.map +1 -0
- package/bin/{runtime/host/AgentHostRuntime.d.ts → agent/local/AgentRuntimeAssembly.d.ts} +2 -2
- package/bin/agent/local/AgentRuntimeAssembly.d.ts.map +1 -0
- package/bin/{runtime/host/AgentHostRuntime.js → agent/local/AgentRuntimeAssembly.js} +2 -2
- package/bin/agent/local/AgentRuntimeAssembly.js.map +1 -0
- package/bin/agent/local/AgentRuntimeFactory.d.ts +72 -0
- package/bin/agent/local/AgentRuntimeFactory.d.ts.map +1 -0
- package/bin/agent/local/AgentRuntimeFactory.js +94 -0
- package/bin/agent/local/AgentRuntimeFactory.js.map +1 -0
- package/bin/{runtime/host → agent/local}/ProjectSetup.d.ts +1 -1
- package/bin/agent/local/ProjectSetup.d.ts.map +1 -0
- package/bin/{runtime/host → agent/local}/ProjectSetup.js +1 -1
- package/bin/agent/local/ProjectSetup.js.map +1 -0
- package/bin/agent/{RemoteAgent.d.ts → remote/RemoteAgent.d.ts} +3 -3
- package/bin/agent/remote/RemoteAgent.d.ts.map +1 -0
- package/bin/agent/remote/RemoteAgent.js +58 -0
- package/bin/agent/remote/RemoteAgent.js.map +1 -0
- package/bin/agent/remote/RemoteSession.d.ts +62 -0
- package/bin/agent/remote/RemoteSession.d.ts.map +1 -0
- package/bin/agent/remote/RemoteSession.js +225 -0
- package/bin/agent/remote/RemoteSession.js.map +1 -0
- package/bin/agent/remote/RemoteTransport.d.ts +52 -0
- package/bin/agent/remote/RemoteTransport.d.ts.map +1 -0
- package/bin/agent/remote/RemoteTransport.js +9 -0
- package/bin/agent/remote/RemoteTransport.js.map +1 -0
- package/bin/agent/remote/TransportFactory.d.ts +13 -0
- package/bin/agent/remote/TransportFactory.d.ts.map +1 -0
- package/bin/agent/remote/TransportFactory.js +22 -0
- package/bin/agent/remote/TransportFactory.js.map +1 -0
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +35 -0
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -0
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +259 -0
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -0
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +34 -0
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -0
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +66 -0
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +1 -0
- package/bin/executor/Executor.d.ts +4 -0
- package/bin/executor/Executor.d.ts.map +1 -1
- package/bin/executor/Executor.js +52 -35
- package/bin/executor/Executor.js.map +1 -1
- package/bin/executor/composer/history/SessionHistoryWriter.js +2 -2
- package/bin/executor/composer/history/SessionHistoryWriter.js.map +1 -1
- package/bin/executor/messages/AssistantResultPersistence.d.ts +3 -3
- package/bin/executor/messages/AssistantResultPersistence.d.ts.map +1 -1
- package/bin/executor/messages/AssistantResultPersistence.js +2 -6
- package/bin/executor/messages/AssistantResultPersistence.js.map +1 -1
- package/bin/executor/messages/SessionStepEventMapper.d.ts +7 -8
- package/bin/executor/messages/SessionStepEventMapper.d.ts.map +1 -1
- package/bin/executor/messages/SessionStepEventMapper.js +55 -86
- package/bin/executor/messages/SessionStepEventMapper.js.map +1 -1
- package/bin/executor/messages/UserVisibleText.d.ts +2 -10
- package/bin/executor/messages/UserVisibleText.d.ts.map +1 -1
- package/bin/executor/messages/UserVisibleText.js +3 -16
- package/bin/executor/messages/UserVisibleText.js.map +1 -1
- package/bin/executor/store/history/SessionHistoryStore.d.ts +12 -0
- package/bin/executor/store/history/SessionHistoryStore.d.ts.map +1 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts +12 -0
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +1 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +145 -8
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +1 -1
- package/bin/executor/tools/shell/ShellToolFormatting.d.ts +1 -10
- package/bin/executor/tools/shell/ShellToolFormatting.d.ts.map +1 -1
- package/bin/executor/tools/shell/ShellToolFormatting.js +1 -39
- package/bin/executor/tools/shell/ShellToolFormatting.js.map +1 -1
- package/bin/executor/types/SessionHistoryPaths.d.ts +4 -0
- package/bin/executor/types/SessionHistoryPaths.d.ts.map +1 -1
- package/bin/index.d.ts +5 -5
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +3 -3
- package/bin/index.js.map +1 -1
- package/bin/plugin/core/PluginCommandRequest.d.ts +1 -1
- package/bin/plugin/core/PluginCommandRequest.js +1 -1
- package/bin/plugin/core/PluginLocalExecution.js +1 -1
- package/bin/plugin/core/PluginLocalExecution.js.map +1 -1
- package/bin/plugin/core/ProjectConfigStore.d.ts +3 -2
- package/bin/plugin/core/ProjectConfigStore.d.ts.map +1 -1
- package/bin/plugin/core/ProjectConfigStore.js +3 -4
- package/bin/plugin/core/ProjectConfigStore.js.map +1 -1
- package/bin/plugin/types/Plugin.d.ts +10 -842
- package/bin/plugin/types/Plugin.d.ts.map +1 -1
- package/bin/plugin/types/Plugin.js +3 -4
- package/bin/plugin/types/Plugin.js.map +1 -1
- package/bin/plugin/types/PluginState.d.ts +1 -1
- package/bin/plugin/types/PluginState.d.ts.map +1 -1
- package/bin/rpc/Client.d.ts +2 -99
- package/bin/rpc/Client.d.ts.map +1 -1
- package/bin/rpc/Client.js +0 -46
- package/bin/rpc/Client.js.map +1 -1
- package/bin/rpc/Server.d.ts +5 -21
- package/bin/rpc/Server.d.ts.map +1 -1
- package/bin/rpc/Server.js +30 -315
- package/bin/rpc/Server.js.map +1 -1
- package/bin/rpc/server/InternalHandlers.d.ts +21 -0
- package/bin/rpc/server/InternalHandlers.d.ts.map +1 -0
- package/bin/rpc/server/InternalHandlers.js +190 -0
- package/bin/rpc/server/InternalHandlers.js.map +1 -0
- package/bin/rpc/server/RequestDispatcher.d.ts +27 -0
- package/bin/rpc/server/RequestDispatcher.d.ts.map +1 -0
- package/bin/rpc/server/RequestDispatcher.js +38 -0
- package/bin/rpc/server/RequestDispatcher.js.map +1 -0
- package/bin/rpc/server/SdkSessionHandlers.d.ts +25 -0
- package/bin/rpc/server/SdkSessionHandlers.d.ts.map +1 -0
- package/bin/rpc/server/SdkSessionHandlers.js +86 -0
- package/bin/rpc/server/SdkSessionHandlers.js.map +1 -0
- package/bin/rpc/server/ServerTypes.d.ts +59 -0
- package/bin/rpc/server/ServerTypes.d.ts.map +1 -0
- package/bin/rpc/server/ServerTypes.js +9 -0
- package/bin/rpc/server/ServerTypes.js.map +1 -0
- package/bin/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.d.ts +1 -1
- package/bin/sandbox/MacOsSeatbeltSandbox.d.ts.map +1 -0
- package/bin/sandbox/MacOsSeatbeltSandbox.js.map +1 -0
- package/bin/{runtime/sandbox → sandbox}/SandboxConfigResolver.d.ts +2 -2
- package/bin/sandbox/SandboxConfigResolver.d.ts.map +1 -0
- package/bin/sandbox/SandboxConfigResolver.js.map +1 -0
- package/bin/{runtime/sandbox → sandbox}/SandboxRunner.d.ts +2 -2
- package/bin/sandbox/SandboxRunner.d.ts.map +1 -0
- package/bin/{runtime/sandbox → sandbox}/SandboxRunner.js +2 -2
- package/bin/sandbox/SandboxRunner.js.map +1 -0
- package/bin/sandbox/types/Sandbox.d.ts.map +1 -0
- package/bin/sandbox/types/Sandbox.js.map +1 -0
- package/bin/{runtime/sandbox → sandbox}/types/SandboxRuntime.d.ts +2 -2
- package/bin/sandbox/types/SandboxRuntime.d.ts.map +1 -0
- package/bin/sandbox/types/SandboxRuntime.js.map +1 -0
- package/bin/session/Session.d.ts.map +1 -1
- package/bin/session/Session.js +2 -1
- package/bin/session/Session.js.map +1 -1
- package/bin/session/browse/Browse.d.ts +1 -1
- package/bin/session/browse/Browse.d.ts.map +1 -1
- package/bin/session/browse/Browse.js +28 -13
- package/bin/session/browse/Browse.js.map +1 -1
- package/bin/session/index.d.ts +1 -1
- package/bin/session/index.d.ts.map +1 -1
- package/bin/session/index.js +1 -1
- package/bin/session/index.js.map +1 -1
- package/bin/session/storage/Paths.d.ts +9 -0
- package/bin/session/storage/Paths.d.ts.map +1 -1
- package/bin/session/storage/Paths.js +11 -0
- package/bin/session/storage/Paths.js.map +1 -1
- package/bin/types/agent/AgentOptions.d.ts +134 -0
- package/bin/types/agent/AgentOptions.d.ts.map +1 -0
- package/bin/types/agent/AgentOptions.js +9 -0
- package/bin/types/agent/AgentOptions.js.map +1 -0
- package/bin/types/{runtime/host/AgentHost.d.ts → agent/AgentRuntimeAssembly.d.ts} +4 -4
- package/bin/types/agent/AgentRuntimeAssembly.d.ts.map +1 -0
- package/bin/types/{runtime/host/AgentHost.js → agent/AgentRuntimeAssembly.js} +3 -3
- package/bin/types/agent/AgentRuntimeAssembly.js.map +1 -0
- package/bin/types/agent/AgentTypes.d.ts +8 -613
- package/bin/types/agent/AgentTypes.d.ts.map +1 -1
- package/bin/types/agent/AgentTypes.js +4 -4
- package/bin/types/agent/RemoteAgentOptions.d.ts +28 -0
- package/bin/types/agent/RemoteAgentOptions.d.ts.map +1 -0
- package/bin/types/agent/RemoteAgentOptions.js +9 -0
- package/bin/types/agent/RemoteAgentOptions.js.map +1 -0
- package/bin/types/agent/SessionActor.d.ts +60 -0
- package/bin/types/agent/SessionActor.d.ts.map +1 -0
- package/bin/types/agent/SessionActor.js +9 -0
- package/bin/types/agent/SessionActor.js.map +1 -0
- package/bin/types/agent/SessionTypes.d.ts +312 -0
- package/bin/types/agent/SessionTypes.d.ts.map +1 -0
- package/bin/types/agent/SessionTypes.js +9 -0
- package/bin/types/agent/SessionTypes.js.map +1 -0
- package/bin/types/config/DowncityConfig.d.ts +1 -1
- package/bin/types/config/DowncityConfig.d.ts.map +1 -1
- package/bin/types/{runtime/host → platform}/Store.d.ts +1 -1
- package/bin/types/platform/Store.d.ts.map +1 -0
- package/bin/types/{runtime/host → platform}/Store.js +1 -1
- package/bin/types/platform/Store.js.map +1 -0
- package/bin/types/plugin/PluginAction.d.ts +119 -0
- package/bin/types/plugin/PluginAction.d.ts.map +1 -0
- package/bin/types/plugin/PluginAction.js +9 -0
- package/bin/types/plugin/PluginAction.js.map +1 -0
- package/bin/types/plugin/PluginCommand.d.ts +80 -0
- package/bin/types/plugin/PluginCommand.d.ts.map +1 -0
- package/bin/types/plugin/PluginCommand.js +9 -0
- package/bin/types/plugin/PluginCommand.js.map +1 -0
- package/bin/types/plugin/PluginDefinition.d.ts +57 -0
- package/bin/types/plugin/PluginDefinition.d.ts.map +1 -0
- package/bin/types/plugin/PluginDefinition.js +9 -0
- package/bin/types/plugin/PluginDefinition.js.map +1 -0
- package/bin/types/plugin/PluginHttp.d.ts +34 -0
- package/bin/types/plugin/PluginHttp.d.ts.map +1 -0
- package/bin/types/plugin/PluginHttp.js +9 -0
- package/bin/types/plugin/PluginHttp.js.map +1 -0
- package/bin/types/plugin/PluginRuntime.d.ts +148 -0
- package/bin/types/plugin/PluginRuntime.d.ts.map +1 -0
- package/bin/types/plugin/PluginRuntime.js +9 -0
- package/bin/types/plugin/PluginRuntime.js.map +1 -0
- package/bin/types/plugin/PluginSetup.d.ts +133 -0
- package/bin/types/plugin/PluginSetup.d.ts.map +1 -0
- package/bin/types/plugin/PluginSetup.js +9 -0
- package/bin/types/plugin/PluginSetup.js.map +1 -0
- package/bin/types/plugin/PluginState.d.ts +69 -0
- package/bin/types/plugin/PluginState.d.ts.map +1 -0
- package/bin/types/plugin/PluginState.js +9 -0
- package/bin/types/plugin/PluginState.js.map +1 -0
- package/bin/types/rpc/RpcProtocol.d.ts +323 -0
- package/bin/types/rpc/RpcProtocol.d.ts.map +1 -0
- package/bin/types/rpc/RpcProtocol.js +10 -0
- package/bin/types/rpc/RpcProtocol.js.map +1 -0
- package/bin/types/runtime/agent/AgentContext.d.ts +1 -1
- package/bin/types/runtime/agent/AgentContext.d.ts.map +1 -1
- package/bin/types/runtime/agent/AgentRuntime.d.ts +1 -1
- package/bin/types/runtime/agent/AgentRuntime.d.ts.map +1 -1
- package/package.json +2 -2
- package/scripts/session-history-inflight.test.mjs +146 -0
- package/src/agent/{Agent.ts → local/Agent.ts} +50 -228
- package/src/agent/local/AgentInstructions.ts +68 -0
- package/src/agent/local/AgentPluginFactory.ts +83 -0
- package/src/{runtime/host/AgentHostRuntime.ts → agent/local/AgentRuntimeAssembly.ts} +2 -2
- package/src/agent/local/AgentRuntimeFactory.ts +173 -0
- package/src/{runtime/host → agent/local}/ProjectSetup.ts +1 -1
- package/src/agent/remote/RemoteAgent.ts +76 -0
- package/src/agent/remote/RemoteSession.ts +287 -0
- package/src/agent/remote/RemoteTransport.ts +71 -0
- package/src/agent/remote/TransportFactory.ts +29 -0
- package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +347 -0
- package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +107 -0
- package/src/executor/Executor.ts +56 -37
- package/src/executor/composer/history/SessionHistoryWriter.ts +2 -2
- package/src/executor/messages/AssistantResultPersistence.ts +4 -12
- package/src/executor/messages/SessionStepEventMapper.ts +59 -101
- package/src/executor/messages/UserVisibleText.ts +3 -18
- package/src/executor/store/history/SessionHistoryStore.ts +15 -0
- package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +164 -11
- package/src/executor/tools/shell/ShellToolFormatting.ts +1 -50
- package/src/executor/types/SessionHistoryPaths.ts +5 -0
- package/src/index.ts +5 -5
- package/src/plugin/core/PluginCommandRequest.ts +1 -1
- package/src/plugin/core/PluginLocalExecution.ts +1 -1
- package/src/plugin/core/ProjectConfigStore.ts +4 -4
- package/src/plugin/types/Plugin.ts +54 -913
- package/src/plugin/types/PluginState.ts +1 -1
- package/src/rpc/Client.ts +16 -322
- package/src/rpc/Server.ts +39 -565
- package/src/rpc/server/InternalHandlers.ts +230 -0
- package/src/rpc/server/RequestDispatcher.ts +67 -0
- package/src/rpc/server/SdkSessionHandlers.ts +106 -0
- package/src/rpc/server/ServerTypes.ts +65 -0
- package/src/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.ts +1 -1
- package/src/{runtime/sandbox → sandbox}/SandboxConfigResolver.ts +1 -1
- package/src/{runtime/sandbox → sandbox}/SandboxRunner.ts +3 -3
- package/src/{runtime/sandbox → sandbox}/types/SandboxRuntime.ts +2 -2
- package/src/session/Session.ts +6 -0
- package/src/session/browse/Browse.ts +29 -10
- package/src/session/index.ts +1 -0
- package/src/session/storage/Paths.ts +19 -0
- package/src/types/agent/AgentOptions.ts +147 -0
- package/src/types/{runtime/host/AgentHost.ts → agent/AgentRuntimeAssembly.ts} +2 -2
- package/src/types/agent/AgentTypes.ts +37 -709
- package/src/types/agent/RemoteAgentOptions.ts +29 -0
- package/src/types/agent/SessionActor.ts +88 -0
- package/src/types/agent/SessionTypes.ts +334 -0
- package/src/types/config/DowncityConfig.ts +1 -1
- package/src/types/{runtime/host → platform}/Store.ts +1 -1
- package/src/types/plugin/PluginAction.ts +133 -0
- package/src/types/plugin/PluginCommand.ts +89 -0
- package/src/types/plugin/PluginDefinition.ts +74 -0
- package/src/types/plugin/PluginHttp.ts +36 -0
- package/src/types/plugin/PluginRuntime.ts +169 -0
- package/src/types/plugin/PluginSetup.ts +138 -0
- package/src/types/plugin/PluginState.ts +82 -0
- package/src/types/rpc/RpcProtocol.ts +361 -0
- package/src/types/runtime/agent/AgentContext.ts +1 -1
- package/src/types/runtime/agent/AgentRuntime.ts +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/bin/agent/Agent.d.ts.map +0 -1
- package/bin/agent/Agent.js.map +0 -1
- package/bin/agent/RemoteAgent.d.ts.map +0 -1
- package/bin/agent/RemoteAgent.js +0 -585
- package/bin/agent/RemoteAgent.js.map +0 -1
- package/bin/runtime/auth/AuthEnv.d.ts +0 -36
- package/bin/runtime/auth/AuthEnv.d.ts.map +0 -1
- package/bin/runtime/auth/AuthEnv.js +0 -54
- package/bin/runtime/auth/AuthEnv.js.map +0 -1
- package/bin/runtime/auth/CliAuthStateStore.d.ts +0 -29
- package/bin/runtime/auth/CliAuthStateStore.d.ts.map +0 -1
- package/bin/runtime/auth/CliAuthStateStore.js +0 -26
- package/bin/runtime/auth/CliAuthStateStore.js.map +0 -1
- package/bin/runtime/control/AuthControlService.d.ts +0 -34
- package/bin/runtime/control/AuthControlService.d.ts.map +0 -1
- package/bin/runtime/control/AuthControlService.js +0 -129
- package/bin/runtime/control/AuthControlService.js.map +0 -1
- package/bin/runtime/control/CommonHelpers.d.ts +0 -36
- package/bin/runtime/control/CommonHelpers.d.ts.map +0 -1
- package/bin/runtime/control/CommonHelpers.js +0 -63
- package/bin/runtime/control/CommonHelpers.js.map +0 -1
- package/bin/runtime/control/ExecuteBySession.d.ts +0 -30
- package/bin/runtime/control/ExecuteBySession.d.ts.map +0 -1
- package/bin/runtime/control/ExecuteBySession.js +0 -41
- package/bin/runtime/control/ExecuteBySession.js.map +0 -1
- package/bin/runtime/control/ExecuteInput.d.ts +0 -18
- package/bin/runtime/control/ExecuteInput.d.ts.map +0 -1
- package/bin/runtime/control/ExecuteInput.js +0 -201
- package/bin/runtime/control/ExecuteInput.js.map +0 -1
- package/bin/runtime/control/Helpers.d.ts +0 -13
- package/bin/runtime/control/Helpers.d.ts.map +0 -1
- package/bin/runtime/control/Helpers.js +0 -13
- package/bin/runtime/control/Helpers.js.map +0 -1
- package/bin/runtime/control/MessageTimeline.d.ts +0 -22
- package/bin/runtime/control/MessageTimeline.d.ts.map +0 -1
- package/bin/runtime/control/MessageTimeline.js +0 -226
- package/bin/runtime/control/MessageTimeline.js.map +0 -1
- package/bin/runtime/control/SessionSummaryStore.d.ts +0 -20
- package/bin/runtime/control/SessionSummaryStore.d.ts.map +0 -1
- package/bin/runtime/control/SessionSummaryStore.js +0 -50
- package/bin/runtime/control/SessionSummaryStore.js.map +0 -1
- package/bin/runtime/control/TaskStore.d.ts +0 -33
- package/bin/runtime/control/TaskStore.d.ts.map +0 -1
- package/bin/runtime/control/TaskStore.js +0 -175
- package/bin/runtime/control/TaskStore.js.map +0 -1
- package/bin/runtime/control/types/AuthControl.d.ts +0 -30
- package/bin/runtime/control/types/AuthControl.d.ts.map +0 -1
- package/bin/runtime/control/types/AuthControl.js +0 -9
- package/bin/runtime/control/types/AuthControl.js.map +0 -1
- package/bin/runtime/control/types/ControlSessionExecute.d.ts +0 -85
- package/bin/runtime/control/types/ControlSessionExecute.d.ts.map +0 -1
- package/bin/runtime/control/types/ControlSessionExecute.js +0 -9
- package/bin/runtime/control/types/ControlSessionExecute.js.map +0 -1
- package/bin/runtime/control/types/ControlViewData.d.ts +0 -320
- package/bin/runtime/control/types/ControlViewData.d.ts.map +0 -1
- package/bin/runtime/control/types/ControlViewData.js +0 -9
- package/bin/runtime/control/types/ControlViewData.js.map +0 -1
- package/bin/runtime/host/AgentHostRuntime.d.ts.map +0 -1
- package/bin/runtime/host/AgentHostRuntime.js.map +0 -1
- package/bin/runtime/host/ProjectSetup.d.ts.map +0 -1
- package/bin/runtime/host/ProjectSetup.js.map +0 -1
- package/bin/runtime/sandbox/MacOsSeatbeltSandbox.d.ts.map +0 -1
- package/bin/runtime/sandbox/MacOsSeatbeltSandbox.js.map +0 -1
- package/bin/runtime/sandbox/SandboxConfigResolver.d.ts.map +0 -1
- package/bin/runtime/sandbox/SandboxConfigResolver.js.map +0 -1
- package/bin/runtime/sandbox/SandboxRunner.d.ts.map +0 -1
- package/bin/runtime/sandbox/SandboxRunner.js.map +0 -1
- package/bin/runtime/sandbox/types/Sandbox.d.ts.map +0 -1
- package/bin/runtime/sandbox/types/Sandbox.js.map +0 -1
- package/bin/runtime/sandbox/types/SandboxRuntime.d.ts.map +0 -1
- package/bin/runtime/sandbox/types/SandboxRuntime.js.map +0 -1
- package/bin/types/runtime/host/AgentHost.d.ts.map +0 -1
- package/bin/types/runtime/host/AgentHost.js.map +0 -1
- package/bin/types/runtime/host/Store.d.ts.map +0 -1
- package/bin/types/runtime/host/Store.js.map +0 -1
- package/src/agent/RemoteAgent.ts +0 -834
- package/src/runtime/auth/AuthEnv.ts +0 -62
- package/src/runtime/auth/CliAuthStateStore.ts +0 -46
- package/src/runtime/control/AuthControlService.ts +0 -169
- package/src/runtime/control/CommonHelpers.ts +0 -69
- package/src/runtime/control/ExecuteBySession.ts +0 -52
- package/src/runtime/control/ExecuteInput.ts +0 -236
- package/src/runtime/control/Helpers.ts +0 -22
- package/src/runtime/control/MessageTimeline.ts +0 -269
- package/src/runtime/control/SessionSummaryStore.ts +0 -72
- package/src/runtime/control/TaskStore.ts +0 -242
- package/src/runtime/control/types/AuthControl.ts +0 -34
- package/src/runtime/control/types/ControlSessionExecute.ts +0 -99
- package/src/runtime/control/types/ControlViewData.ts +0 -392
- /package/bin/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.js +0 -0
- /package/bin/{runtime/sandbox → sandbox}/SandboxConfigResolver.js +0 -0
- /package/bin/{runtime/sandbox → sandbox}/types/Sandbox.d.ts +0 -0
- /package/bin/{runtime/sandbox → sandbox}/types/Sandbox.js +0 -0
- /package/bin/{runtime/sandbox → sandbox}/types/SandboxRuntime.js +0 -0
- /package/src/{runtime/sandbox → sandbox}/types/Sandbox.ts +0 -0
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RemoteAgent HTTP transport。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 只适配 Town Agent HTTP gateway 的 SDK routes。
|
|
6
|
+
* - 不处理 RemoteSession 的 turn lifecycle,避免 transport 与 actor 逻辑混在一起。
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type {
|
|
10
|
+
AgentCreateSessionInput,
|
|
11
|
+
AgentListSessionsInput,
|
|
12
|
+
AgentSessionForkInput,
|
|
13
|
+
AgentSessionHistoryInput,
|
|
14
|
+
AgentSessionHistoryPage,
|
|
15
|
+
AgentSessionInfo,
|
|
16
|
+
AgentSessionSummaryPage,
|
|
17
|
+
AgentSessionSystemSnapshot,
|
|
18
|
+
} from "@/types/agent/AgentTypes.js";
|
|
19
|
+
import type { AgentSessionEvent } from "@/types/sdk/AgentSessionEvent.js";
|
|
20
|
+
import type { AgentSessionPromptInput } from "@/types/sdk/AgentSessionPrompt.js";
|
|
21
|
+
import type {
|
|
22
|
+
RemoteAgentTransport,
|
|
23
|
+
TransportSubscription,
|
|
24
|
+
} from "@/agent/remote/RemoteTransport.js";
|
|
25
|
+
|
|
26
|
+
type SdkEventsReadyFrame = {
|
|
27
|
+
/** SDK HTTP events 连接内部 ready 标记。 */
|
|
28
|
+
type: "sdk-events-ready";
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Town HTTP gateway transport。
|
|
33
|
+
*/
|
|
34
|
+
export class HttpRemoteAgentTransport implements RemoteAgentTransport {
|
|
35
|
+
private readonly base_url: string;
|
|
36
|
+
private readonly token: string;
|
|
37
|
+
|
|
38
|
+
constructor(url: string, token?: string) {
|
|
39
|
+
this.base_url = url.replace(/\/+$/, "");
|
|
40
|
+
this.token = String(token || "").trim();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
private headers(input?: Record<string, string>): Headers {
|
|
44
|
+
const headers = new Headers(input);
|
|
45
|
+
if (this.token) {
|
|
46
|
+
headers.set("Authorization", `Bearer ${this.token}`);
|
|
47
|
+
}
|
|
48
|
+
return headers;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async create_session(input?: AgentCreateSessionInput): Promise<AgentSessionInfo> {
|
|
52
|
+
const payload = await read_http_json<{
|
|
53
|
+
success?: boolean;
|
|
54
|
+
error?: string;
|
|
55
|
+
session?: AgentSessionInfo;
|
|
56
|
+
}>(`${this.base_url}/api/sdk/sessions`, {
|
|
57
|
+
method: "POST",
|
|
58
|
+
headers: this.headers({
|
|
59
|
+
"Content-Type": "application/json",
|
|
60
|
+
}),
|
|
61
|
+
body: JSON.stringify({
|
|
62
|
+
...(input?.sessionId ? { sessionId: input.sessionId } : {}),
|
|
63
|
+
}),
|
|
64
|
+
});
|
|
65
|
+
if (!payload.success || !payload.session?.sessionId) {
|
|
66
|
+
throw new Error(String(payload.error || "Remote session create failed"));
|
|
67
|
+
}
|
|
68
|
+
return payload.session;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async get_info(session_id: string): Promise<AgentSessionInfo> {
|
|
72
|
+
const payload = await read_http_json<{
|
|
73
|
+
success?: boolean;
|
|
74
|
+
error?: string;
|
|
75
|
+
session?: AgentSessionInfo;
|
|
76
|
+
}>(`${this.base_url}/api/sdk/sessions/${encodeURIComponent(session_id)}`, {
|
|
77
|
+
headers: this.headers(),
|
|
78
|
+
});
|
|
79
|
+
if (!payload.success || !payload.session?.sessionId) {
|
|
80
|
+
throw new Error(String(payload.error || "Remote session info failed"));
|
|
81
|
+
}
|
|
82
|
+
return payload.session;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async prompt(
|
|
86
|
+
session_id: string,
|
|
87
|
+
input: AgentSessionPromptInput,
|
|
88
|
+
): Promise<{ id: string }> {
|
|
89
|
+
const payload = await read_http_json<{
|
|
90
|
+
success?: boolean;
|
|
91
|
+
error?: string;
|
|
92
|
+
turn?: {
|
|
93
|
+
id?: string;
|
|
94
|
+
};
|
|
95
|
+
}>(`${this.base_url}/api/sdk/sessions/${encodeURIComponent(session_id)}/prompt`, {
|
|
96
|
+
method: "POST",
|
|
97
|
+
headers: this.headers({
|
|
98
|
+
"Content-Type": "application/json",
|
|
99
|
+
}),
|
|
100
|
+
body: JSON.stringify({
|
|
101
|
+
query: input.query,
|
|
102
|
+
}),
|
|
103
|
+
});
|
|
104
|
+
const id = String(payload.turn?.id || "").trim();
|
|
105
|
+
if (!payload.success || !id) {
|
|
106
|
+
throw new Error(String(payload.error || "Remote session prompt failed"));
|
|
107
|
+
}
|
|
108
|
+
return { id };
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
async subscribe(params: {
|
|
112
|
+
session_id: string;
|
|
113
|
+
on_ready: () => void;
|
|
114
|
+
on_event: (event: AgentSessionEvent) => void;
|
|
115
|
+
}): Promise<TransportSubscription> {
|
|
116
|
+
const abort_controller = new AbortController();
|
|
117
|
+
let resolve_ready!: () => void;
|
|
118
|
+
let reject_ready!: (error: unknown) => void;
|
|
119
|
+
const ready_promise = new Promise<void>((resolve, reject) => {
|
|
120
|
+
resolve_ready = resolve;
|
|
121
|
+
reject_ready = reject;
|
|
122
|
+
});
|
|
123
|
+
const response = await fetch(
|
|
124
|
+
`${this.base_url}/api/sdk/sessions/${encodeURIComponent(params.session_id)}/events`,
|
|
125
|
+
{
|
|
126
|
+
headers: this.headers(),
|
|
127
|
+
signal: abort_controller.signal,
|
|
128
|
+
},
|
|
129
|
+
);
|
|
130
|
+
if (!response.ok || !response.body) {
|
|
131
|
+
const text = await response.text().catch(() => "");
|
|
132
|
+
throw new Error(text || `Remote session events failed (${response.status})`);
|
|
133
|
+
}
|
|
134
|
+
void consume_http_event_stream({
|
|
135
|
+
body: response.body,
|
|
136
|
+
abort_controller,
|
|
137
|
+
on_ready: () => {
|
|
138
|
+
params.on_ready();
|
|
139
|
+
resolve_ready();
|
|
140
|
+
},
|
|
141
|
+
on_ready_error: (error) => {
|
|
142
|
+
reject_ready(error);
|
|
143
|
+
},
|
|
144
|
+
on_event: params.on_event,
|
|
145
|
+
});
|
|
146
|
+
await ready_promise;
|
|
147
|
+
return {
|
|
148
|
+
close: async () => {
|
|
149
|
+
abort_controller.abort();
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
async history(
|
|
155
|
+
session_id: string,
|
|
156
|
+
input?: AgentSessionHistoryInput,
|
|
157
|
+
): Promise<AgentSessionHistoryPage> {
|
|
158
|
+
const query = new URLSearchParams();
|
|
159
|
+
if (input?.limit !== undefined) query.set("limit", String(input.limit));
|
|
160
|
+
if (input?.cursor) query.set("cursor", input.cursor);
|
|
161
|
+
if (input?.order) query.set("order", input.order);
|
|
162
|
+
if (input?.view) query.set("view", input.view);
|
|
163
|
+
const payload = await read_http_json<{
|
|
164
|
+
success?: boolean;
|
|
165
|
+
error?: string;
|
|
166
|
+
history?: AgentSessionHistoryPage;
|
|
167
|
+
}>(
|
|
168
|
+
`${this.base_url}/api/sdk/sessions/${encodeURIComponent(session_id)}/history${
|
|
169
|
+
query.size > 0 ? `?${query.toString()}` : ""
|
|
170
|
+
}`,
|
|
171
|
+
{
|
|
172
|
+
headers: this.headers(),
|
|
173
|
+
},
|
|
174
|
+
);
|
|
175
|
+
if (!payload.success || !payload.history || !Array.isArray(payload.history.items)) {
|
|
176
|
+
throw new Error(String(payload.error || "Remote session history failed"));
|
|
177
|
+
}
|
|
178
|
+
return payload.history;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
async system(session_id: string): Promise<AgentSessionSystemSnapshot> {
|
|
182
|
+
const payload = await read_http_json<{
|
|
183
|
+
success?: boolean;
|
|
184
|
+
error?: string;
|
|
185
|
+
system?: AgentSessionSystemSnapshot;
|
|
186
|
+
}>(`${this.base_url}/api/sdk/sessions/${encodeURIComponent(session_id)}/system`, {
|
|
187
|
+
headers: this.headers(),
|
|
188
|
+
});
|
|
189
|
+
if (!payload.success || !payload.system || !Array.isArray(payload.system.blocks)) {
|
|
190
|
+
throw new Error(String(payload.error || "Remote session system failed"));
|
|
191
|
+
}
|
|
192
|
+
return payload.system;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
async fork(
|
|
196
|
+
session_id: string,
|
|
197
|
+
input?: AgentSessionForkInput | string,
|
|
198
|
+
): Promise<AgentSessionInfo> {
|
|
199
|
+
const message_id =
|
|
200
|
+
typeof input === "string"
|
|
201
|
+
? String(input || "").trim() || undefined
|
|
202
|
+
: String(input?.messageId || "").trim() || undefined;
|
|
203
|
+
const payload = await read_http_json<{
|
|
204
|
+
success?: boolean;
|
|
205
|
+
error?: string;
|
|
206
|
+
session?: AgentSessionInfo;
|
|
207
|
+
}>(`${this.base_url}/api/sdk/sessions/${encodeURIComponent(session_id)}/fork`, {
|
|
208
|
+
method: "POST",
|
|
209
|
+
headers: this.headers({
|
|
210
|
+
"Content-Type": "application/json",
|
|
211
|
+
}),
|
|
212
|
+
body: JSON.stringify({
|
|
213
|
+
...(message_id ? { messageId: message_id } : {}),
|
|
214
|
+
}),
|
|
215
|
+
});
|
|
216
|
+
if (!payload.success || !payload.session?.sessionId) {
|
|
217
|
+
throw new Error(String(payload.error || "Remote session fork failed"));
|
|
218
|
+
}
|
|
219
|
+
return payload.session;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
async list_sessions(input?: AgentListSessionsInput): Promise<AgentSessionSummaryPage> {
|
|
223
|
+
const query = new URLSearchParams();
|
|
224
|
+
if (input?.limit !== undefined) query.set("limit", String(input.limit));
|
|
225
|
+
if (input?.cursor) query.set("cursor", input.cursor);
|
|
226
|
+
if (input?.query) query.set("query", input.query);
|
|
227
|
+
const payload = await read_http_json<{
|
|
228
|
+
success?: boolean;
|
|
229
|
+
error?: string;
|
|
230
|
+
page?: AgentSessionSummaryPage;
|
|
231
|
+
}>(
|
|
232
|
+
`${this.base_url}/api/sdk/sessions${query.size > 0 ? `?${query.toString()}` : ""}`,
|
|
233
|
+
{
|
|
234
|
+
headers: this.headers(),
|
|
235
|
+
},
|
|
236
|
+
);
|
|
237
|
+
if (!payload.success || !payload.page) {
|
|
238
|
+
throw new Error(String(payload.error || "Remote sessions list failed"));
|
|
239
|
+
}
|
|
240
|
+
return payload.page;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
async function read_http_json<T>(input: string, init?: RequestInit): Promise<T> {
|
|
245
|
+
const response = await fetch(input, init);
|
|
246
|
+
const payload = (await response.json().catch(() => ({}))) as T;
|
|
247
|
+
if (!response.ok) {
|
|
248
|
+
const message = extract_error_message(payload);
|
|
249
|
+
throw new Error(message || `HTTP ${response.status}`);
|
|
250
|
+
}
|
|
251
|
+
return payload;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
async function consume_http_event_stream(params: {
|
|
255
|
+
body: ReadableStream<Uint8Array>;
|
|
256
|
+
abort_controller: AbortController;
|
|
257
|
+
on_ready: () => void;
|
|
258
|
+
on_ready_error: (error: unknown) => void;
|
|
259
|
+
on_event: (event: AgentSessionEvent) => void;
|
|
260
|
+
}): Promise<void> {
|
|
261
|
+
const decoder = new TextDecoder();
|
|
262
|
+
const reader = params.body.getReader();
|
|
263
|
+
let buffered = "";
|
|
264
|
+
let ready_resolved = false;
|
|
265
|
+
|
|
266
|
+
try {
|
|
267
|
+
while (true) {
|
|
268
|
+
const { done, value } = await reader.read();
|
|
269
|
+
if (done) break;
|
|
270
|
+
buffered += decoder.decode(value, { stream: true });
|
|
271
|
+
let newline_index = buffered.indexOf("\n");
|
|
272
|
+
while (newline_index >= 0) {
|
|
273
|
+
const line = buffered.slice(0, newline_index).trim();
|
|
274
|
+
buffered = buffered.slice(newline_index + 1);
|
|
275
|
+
if (line) {
|
|
276
|
+
const value = JSON.parse(line) as unknown;
|
|
277
|
+
if (is_sdk_events_ready_frame(value)) {
|
|
278
|
+
ready_resolved = true;
|
|
279
|
+
params.on_ready();
|
|
280
|
+
} else {
|
|
281
|
+
params.on_event(value as AgentSessionEvent);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
newline_index = buffered.indexOf("\n");
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const tail = buffered.trim();
|
|
289
|
+
if (tail) {
|
|
290
|
+
const value = JSON.parse(tail) as unknown;
|
|
291
|
+
if (is_sdk_events_ready_frame(value)) {
|
|
292
|
+
ready_resolved = true;
|
|
293
|
+
params.on_ready();
|
|
294
|
+
} else {
|
|
295
|
+
params.on_event(value as AgentSessionEvent);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
if (!params.abort_controller.signal.aborted) {
|
|
300
|
+
if (!ready_resolved) {
|
|
301
|
+
const error = new Error("Remote session events connection closed before ready");
|
|
302
|
+
params.on_ready_error(error);
|
|
303
|
+
throw error;
|
|
304
|
+
}
|
|
305
|
+
params.on_event({
|
|
306
|
+
type: "error",
|
|
307
|
+
message: "Remote session events connection closed",
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
} catch (error) {
|
|
311
|
+
if (!params.abort_controller.signal.aborted) {
|
|
312
|
+
if (!ready_resolved) {
|
|
313
|
+
params.on_ready_error(error);
|
|
314
|
+
}
|
|
315
|
+
params.on_event({
|
|
316
|
+
type: "error",
|
|
317
|
+
message: error instanceof Error ? error.message : String(error),
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
} finally {
|
|
321
|
+
try {
|
|
322
|
+
reader.releaseLock();
|
|
323
|
+
} catch {
|
|
324
|
+
// ignore
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
function extract_error_message(payload: unknown): string {
|
|
330
|
+
if (!payload || typeof payload !== "object") return "";
|
|
331
|
+
if ("error" in payload && typeof payload.error === "string") {
|
|
332
|
+
return payload.error;
|
|
333
|
+
}
|
|
334
|
+
if ("message" in payload && typeof payload.message === "string") {
|
|
335
|
+
return payload.message;
|
|
336
|
+
}
|
|
337
|
+
return "";
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
function is_sdk_events_ready_frame(value: unknown): value is SdkEventsReadyFrame {
|
|
341
|
+
return (
|
|
342
|
+
typeof value === "object" &&
|
|
343
|
+
value !== null &&
|
|
344
|
+
"type" in value &&
|
|
345
|
+
(value as { type?: unknown }).type === "sdk-events-ready"
|
|
346
|
+
);
|
|
347
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RemoteAgent RPC transport。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 只把 RemoteAgent 的 session actor 方法映射到 RpcClient。
|
|
6
|
+
* - 长连接生命周期由 RpcClient 管理。
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type {
|
|
10
|
+
AgentCreateSessionInput,
|
|
11
|
+
AgentListSessionsInput,
|
|
12
|
+
AgentSessionForkInput,
|
|
13
|
+
AgentSessionHistoryInput,
|
|
14
|
+
AgentSessionHistoryPage,
|
|
15
|
+
AgentSessionInfo,
|
|
16
|
+
AgentSessionSummaryPage,
|
|
17
|
+
AgentSessionSystemSnapshot,
|
|
18
|
+
} from "@/types/agent/AgentTypes.js";
|
|
19
|
+
import type { AgentSessionEvent } from "@/types/sdk/AgentSessionEvent.js";
|
|
20
|
+
import type { AgentSessionPromptInput } from "@/types/sdk/AgentSessionPrompt.js";
|
|
21
|
+
import { RpcClient, parse_rpc_url } from "@/rpc/Client.js";
|
|
22
|
+
import type {
|
|
23
|
+
RemoteAgentTransport,
|
|
24
|
+
TransportSubscription,
|
|
25
|
+
} from "@/agent/remote/RemoteTransport.js";
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* 本机 RPC transport。
|
|
29
|
+
*/
|
|
30
|
+
export class RpcRemoteAgentTransport implements RemoteAgentTransport {
|
|
31
|
+
private readonly client: RpcClient;
|
|
32
|
+
|
|
33
|
+
constructor(url: string) {
|
|
34
|
+
this.client = new RpcClient(parse_rpc_url(url));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async create_session(input?: AgentCreateSessionInput): Promise<AgentSessionInfo> {
|
|
38
|
+
return await this.client.create_session(input);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async get_info(session_id: string): Promise<AgentSessionInfo> {
|
|
42
|
+
return await this.client.get_session(session_id);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async prompt(
|
|
46
|
+
session_id: string,
|
|
47
|
+
input: AgentSessionPromptInput,
|
|
48
|
+
): Promise<{ id: string }> {
|
|
49
|
+
return await this.client.prompt_session({
|
|
50
|
+
session_id,
|
|
51
|
+
input,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async subscribe(params: {
|
|
56
|
+
session_id: string;
|
|
57
|
+
on_ready: () => void;
|
|
58
|
+
on_event: (event: AgentSessionEvent) => void;
|
|
59
|
+
}): Promise<TransportSubscription> {
|
|
60
|
+
const subscription = await this.client.subscribe_session({
|
|
61
|
+
session_id: params.session_id,
|
|
62
|
+
on_ready: params.on_ready,
|
|
63
|
+
on_event: params.on_event,
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
close: async () => {
|
|
67
|
+
await subscription.unsubscribe();
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async history(
|
|
73
|
+
session_id: string,
|
|
74
|
+
input?: AgentSessionHistoryInput,
|
|
75
|
+
): Promise<AgentSessionHistoryPage> {
|
|
76
|
+
return await this.client.get_session_history({
|
|
77
|
+
session_id,
|
|
78
|
+
input,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async system(session_id: string): Promise<AgentSessionSystemSnapshot> {
|
|
83
|
+
return await this.client.get_session_system(session_id);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async fork(
|
|
87
|
+
session_id: string,
|
|
88
|
+
input?: AgentSessionForkInput | string,
|
|
89
|
+
): Promise<AgentSessionInfo> {
|
|
90
|
+
const message_id =
|
|
91
|
+
typeof input === "string"
|
|
92
|
+
? String(input || "").trim() || undefined
|
|
93
|
+
: String(input?.messageId || "").trim() || undefined;
|
|
94
|
+
return await this.client.fork_session({
|
|
95
|
+
session_id,
|
|
96
|
+
...(message_id ? { message_id } : {}),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
async list_sessions(input?: AgentListSessionsInput): Promise<AgentSessionSummaryPage> {
|
|
101
|
+
return await this.client.list_sessions(input);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
async close(): Promise<void> {
|
|
105
|
+
await this.client.close();
|
|
106
|
+
}
|
|
107
|
+
}
|
package/src/executor/Executor.ts
CHANGED
|
@@ -13,7 +13,7 @@ import type { SessionHistoryComposer } from "@executor/composer/history/SessionH
|
|
|
13
13
|
import type { SessionHistoryStore } from "@/executor/store/history/SessionHistoryStore.js";
|
|
14
14
|
import { withSessionRunScope } from "@executor/SessionRunScope.js";
|
|
15
15
|
import type { SessionRunScope } from "@executor/SessionRunScope.js";
|
|
16
|
-
import {
|
|
16
|
+
import { buildSessionStepParts } from "@executor/messages/SessionStepEventMapper.js";
|
|
17
17
|
import { JsonlSessionCompactionComposer } from "@executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js";
|
|
18
18
|
import { LocalSessionContextComposer } from "@executor/composer/context/LocalSessionContextComposer.js";
|
|
19
19
|
import type { SessionCompactionComposer } from "@executor/composer/compaction/SessionCompactionComposer.js";
|
|
@@ -55,6 +55,7 @@ import type {
|
|
|
55
55
|
SessionRunInput,
|
|
56
56
|
SessionRunResult,
|
|
57
57
|
} from "@/executor/types/SessionRun.js";
|
|
58
|
+
import { generateId } from "@/utils/Id.js";
|
|
58
59
|
|
|
59
60
|
/**
|
|
60
61
|
* 可压缩错误的最大重试次数。
|
|
@@ -226,6 +227,56 @@ export class Executor implements SessionExecutor {
|
|
|
226
227
|
await this.historyWriter.appendAssistantMessage(params);
|
|
227
228
|
}
|
|
228
229
|
|
|
230
|
+
/**
|
|
231
|
+
* 把 step/tool 过程增量写入当前运行中的 assistant 快照。
|
|
232
|
+
*/
|
|
233
|
+
private async appendAssistantStepPartsToInflight(
|
|
234
|
+
parts: SessionMessageV1["parts"],
|
|
235
|
+
): Promise<void> {
|
|
236
|
+
const normalized_parts = Array.isArray(parts)
|
|
237
|
+
? parts.filter((part) => part && typeof part === "object")
|
|
238
|
+
: [];
|
|
239
|
+
if (normalized_parts.length === 0) return;
|
|
240
|
+
|
|
241
|
+
const current_inflight = await this.historyStore.readInflight();
|
|
242
|
+
const next_message: SessionMessageV1 = current_inflight
|
|
243
|
+
? {
|
|
244
|
+
...current_inflight,
|
|
245
|
+
metadata: {
|
|
246
|
+
...(current_inflight.metadata || {
|
|
247
|
+
v: 1 as const,
|
|
248
|
+
ts: Date.now(),
|
|
249
|
+
sessionId: this.sessionId,
|
|
250
|
+
}),
|
|
251
|
+
ts: Date.now(),
|
|
252
|
+
sessionId: this.sessionId,
|
|
253
|
+
source: "egress",
|
|
254
|
+
kind: "normal",
|
|
255
|
+
},
|
|
256
|
+
parts: [
|
|
257
|
+
...(Array.isArray(current_inflight.parts)
|
|
258
|
+
? current_inflight.parts
|
|
259
|
+
: []),
|
|
260
|
+
...normalized_parts,
|
|
261
|
+
],
|
|
262
|
+
}
|
|
263
|
+
: {
|
|
264
|
+
id: `a:${this.sessionId}:${generateId()}`,
|
|
265
|
+
role: "assistant",
|
|
266
|
+
metadata: {
|
|
267
|
+
v: 1,
|
|
268
|
+
ts: Date.now(),
|
|
269
|
+
sessionId: this.sessionId,
|
|
270
|
+
source: "egress",
|
|
271
|
+
kind: "normal",
|
|
272
|
+
},
|
|
273
|
+
parts: normalized_parts,
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
await this.historyStore.writeInflight(next_message);
|
|
277
|
+
await this.afterSessionUpdatedAsync();
|
|
278
|
+
}
|
|
279
|
+
|
|
229
280
|
/**
|
|
230
281
|
* 运行当前 session 的一次请求。
|
|
231
282
|
*
|
|
@@ -256,7 +307,6 @@ export class Executor implements SessionExecutor {
|
|
|
256
307
|
? { onUiMessageChunkCallback: params.onUiMessageChunkCallback }
|
|
257
308
|
: {}),
|
|
258
309
|
};
|
|
259
|
-
let persistedAssistantStepCount = 0;
|
|
260
310
|
const providedOnAssistantStepCallback =
|
|
261
311
|
sessionRunScope.onAssistantStepCallback;
|
|
262
312
|
|
|
@@ -266,20 +316,14 @@ export class Executor implements SessionExecutor {
|
|
|
266
316
|
visibility?: "visible" | "internal";
|
|
267
317
|
stepResult?: unknown;
|
|
268
318
|
}): Promise<void> => {
|
|
269
|
-
const
|
|
270
|
-
sessionId: this.sessionId,
|
|
319
|
+
const step_parts = buildSessionStepParts({
|
|
271
320
|
stepIndex: step.stepIndex,
|
|
272
321
|
stepResult: step.stepResult,
|
|
273
322
|
text: step.text,
|
|
274
323
|
visibility: step.visibility,
|
|
275
324
|
});
|
|
276
|
-
if (
|
|
277
|
-
|
|
278
|
-
await this.appendAssistantMessage({
|
|
279
|
-
message: stepMessage,
|
|
280
|
-
});
|
|
281
|
-
persistedAssistantStepCount += 1;
|
|
282
|
-
}
|
|
325
|
+
if (step_parts.length > 0) {
|
|
326
|
+
await this.appendAssistantStepPartsToInflight(step_parts);
|
|
283
327
|
}
|
|
284
328
|
|
|
285
329
|
if (typeof providedOnAssistantStepCallback === "function") {
|
|
@@ -298,32 +342,7 @@ export class Executor implements SessionExecutor {
|
|
|
298
342
|
},
|
|
299
343
|
() => this.runWithRetry({ query }),
|
|
300
344
|
);
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
return {
|
|
304
|
-
...result,
|
|
305
|
-
assistantMessage: {
|
|
306
|
-
...result.assistantMessage,
|
|
307
|
-
metadata: {
|
|
308
|
-
...(result.assistantMessage.metadata || {
|
|
309
|
-
v: 1 as const,
|
|
310
|
-
ts: Date.now(),
|
|
311
|
-
sessionId: this.sessionId,
|
|
312
|
-
}),
|
|
313
|
-
extra: {
|
|
314
|
-
...(
|
|
315
|
-
result.assistantMessage.metadata?.extra &&
|
|
316
|
-
typeof result.assistantMessage.metadata.extra === "object" &&
|
|
317
|
-
!Array.isArray(result.assistantMessage.metadata.extra)
|
|
318
|
-
? result.assistantMessage.metadata.extra
|
|
319
|
-
: {}
|
|
320
|
-
),
|
|
321
|
-
assistantStepMessagesPersisted: true,
|
|
322
|
-
assistantStepCount: persistedAssistantStepCount,
|
|
323
|
-
},
|
|
324
|
-
},
|
|
325
|
-
},
|
|
326
|
-
};
|
|
345
|
+
return result;
|
|
327
346
|
} finally {
|
|
328
347
|
this.resetRunState();
|
|
329
348
|
this.executing = false;
|
|
@@ -104,7 +104,7 @@ export class SessionHistoryWriter {
|
|
|
104
104
|
try {
|
|
105
105
|
const historyStore = this.getHistoryStore();
|
|
106
106
|
if (params.message && typeof params.message === "object") {
|
|
107
|
-
await historyStore.
|
|
107
|
+
await historyStore.finalizeInflight(params.message);
|
|
108
108
|
void this.afterSessionUpdatedAsync();
|
|
109
109
|
return;
|
|
110
110
|
}
|
|
@@ -112,7 +112,7 @@ export class SessionHistoryWriter {
|
|
|
112
112
|
const fallbackText = String(params.fallbackText || "").trim();
|
|
113
113
|
if (!fallbackText) return;
|
|
114
114
|
|
|
115
|
-
await historyStore.
|
|
115
|
+
await historyStore.finalizeInflight(
|
|
116
116
|
historyStore.assistantText({
|
|
117
117
|
text: fallbackText,
|
|
118
118
|
metadata: {
|
|
@@ -4,14 +4,11 @@
|
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - 负责收敛“写完整 assistant message / 写 fallback 文本 / 完全跳过”三种分支。
|
|
6
6
|
* - 避免 SDK、HTTP execute、control execute、chat queue 各自复制一套判断。
|
|
7
|
-
* -
|
|
7
|
+
* - 运行中 step/tool 的持久化由 inflight 快照承担;run 结束时只关心最终 assistant 如何收口。
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import type { SessionMessageV1 } from "@/executor/types/SessionMessages.js";
|
|
11
|
-
import {
|
|
12
|
-
hasPersistedAssistantSteps,
|
|
13
|
-
resolveAssistantMessageForPersistence,
|
|
14
|
-
} from "@/executor/messages/UserVisibleText.js";
|
|
11
|
+
import { resolveAssistantMessageForPersistence } from "@/executor/messages/UserVisibleText.js";
|
|
15
12
|
|
|
16
13
|
/**
|
|
17
14
|
* assistant 写入端口。
|
|
@@ -48,8 +45,8 @@ export interface PersistAssistantResultParams {
|
|
|
48
45
|
* 可选兜底文本。
|
|
49
46
|
*
|
|
50
47
|
* 关键点(中文)
|
|
51
|
-
* - 仅在没有完整 assistant message
|
|
52
|
-
* -
|
|
48
|
+
* - 仅在没有完整 assistant message 时才允许写入。
|
|
49
|
+
* - inflight 快照的正式收口由 history store 负责,这里不再处理旧的 step 独立落盘分支。
|
|
53
50
|
*/
|
|
54
51
|
fallbackText?: string;
|
|
55
52
|
}
|
|
@@ -83,11 +80,6 @@ export function buildAssistantResultPersistencePayload(
|
|
|
83
80
|
};
|
|
84
81
|
}
|
|
85
82
|
|
|
86
|
-
// 关键点(中文):step 已经单独落盘时,最终 merged assistant 必须完全跳过。
|
|
87
|
-
if (hasPersistedAssistantSteps(params.assistantMessage)) {
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
83
|
const fallbackText = normalizeFallbackText(params.fallbackText);
|
|
92
84
|
if (!fallbackText) return null;
|
|
93
85
|
return {
|