@downcity/agent 1.1.73 → 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 +26 -28
- 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/config/AgentInitializer.d.ts +1 -1
- package/bin/config/AgentInitializer.js +1 -1
- 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/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/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/PluginApi.d.ts +1 -1
- package/bin/plugin/types/PluginApi.js +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/bin/types/runtime/platform/Platform.d.ts +7 -7
- package/bin/types/runtime/platform/PlatformGateway.d.ts +1 -1
- package/bin/types/runtime/platform/PlatformGateway.js +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/config/AgentInitializer.ts +1 -1
- package/src/executor/Executor.ts +56 -37
- package/src/executor/composer/history/SessionHistoryWriter.ts +2 -2
- package/src/executor/composer/system/default/assets/core.prompt.ts +1 -1
- package/src/executor/composer/system/default/assets/core.prompt.ts.txt +1 -1
- 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/PluginApi.ts +1 -1
- 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/src/types/runtime/platform/Platform.ts +7 -7
- package/src/types/runtime/platform/PlatformGateway.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,6 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// Source: src/executor/composer/system/default/assets/core.prompt.ts.txt
|
|
7
|
-
const TEXT_MODULE_CONTENT = "你拥有且仅拥有当前项目 {{project_path}} 的使用权和修改权。当前年份是 {{current_year}} 年。\n1. `.downcity/` 是 Downcity 的运行时数据目录(通常不需要你手动读取/修改;系统会自动写入与注入)。结构与逻辑如下:\n - `.downcity/agents/<agentId>/sessions/` 是会话消息。\n - `.downcity/memory/` 是中长期记忆。\n - `.downcity/profile/Primary.md`、`.downcity/profile/other.md`:全局 profile 记忆;存在时会自动作为 system prompt 注入。\n - `.downcity/public/`:对外静态资源目录,通过 `GET /downcity/public/<path>` 访问;用于给外部访问的路径。不要存放敏感信息,Town Agent HTTP gateway 会把 `.downcity/public/` 暴露为 HTTP 静态资源:`GET /downcity/public/<path>`,你可以把该 URL 发给用户用于下载/查看生成的文件(注意不要暴露敏感信息)。\n - `.downcity/logs/<YYYY-MM-DD>.jsonl`:运行日志(JSONL);用于排查问题,避免把原始日志整段贴给用户。\n - `.downcity/.cache/`:幂等/去重缓存(ingress/egress);不要手动改。\n - `.downcity/.debug/`:调试产物(
|
|
7
|
+
const TEXT_MODULE_CONTENT = "你拥有且仅拥有当前项目 {{project_path}} 的使用权和修改权。当前年份是 {{current_year}} 年。\n1. `.downcity/` 是 Downcity 的运行时数据目录(通常不需要你手动读取/修改;系统会自动写入与注入)。结构与逻辑如下:\n - `.downcity/agents/<agentId>/sessions/` 是会话消息。\n - `.downcity/memory/` 是中长期记忆。\n - `.downcity/profile/Primary.md`、`.downcity/profile/other.md`:全局 profile 记忆;存在时会自动作为 system prompt 注入。\n - `.downcity/public/`:对外静态资源目录,通过 `GET /downcity/public/<path>` 访问;用于给外部访问的路径。不要存放敏感信息,Town Agent HTTP gateway 会把 `.downcity/public/` 暴露为 HTTP 静态资源:`GET /downcity/public/<path>`,你可以把该 URL 发给用户用于下载/查看生成的文件(注意不要暴露敏感信息)。\n - `.downcity/logs/<YYYY-MM-DD>.jsonl`:运行日志(JSONL);用于排查问题,避免把原始日志整段贴给用户。\n - `.downcity/.cache/`:幂等/去重缓存(ingress/egress);不要手动改。\n - `.downcity/.debug/`:调试产物(Town 托管进程 pid/log/meta、适配器事件抓取等);仅在排查问题时查看。\n - `.downcity/data/`:小型持久化数据(预留)。\n - `.downcity/task/`:Task 目录。\n2. PROFILE.md + SOUL.md + downcity.json 是你的一些配置文件,你不需要读取。\n\n# 最重要\n【关于命令执行工具】(重要)\n- 短命令、一次性命令优先使用 `shell_exec`。\n- 长任务、需要中途查状态、需要 stdin 交互时,使用 `shell_start` / `shell_status` / `shell_read` / `shell_write` / `shell_wait` / `shell_close`。\n- 先用 `shell_start` 启动命令并拿到 `shell_id`。\n- `shell_id` 是 shell 会话标识;它不是 chat `session_id`。\n- 长任务期间,优先使用 `shell_status` 查询进度,或使用 `shell_wait` 等待状态变化;不要自己写高频空轮询循环。\n- 只有在确实需要原始增量输出时,才使用 `shell_read` 按 `from_cursor` 继续读取。\n- 需要向进程 stdin 输入内容时,使用 `shell_write`。\n- 命令会话完成后若不再需要,使用 `shell_close` 主动释放资源。\n- 不要把原始超长 shell 输出直接转发给用户,应先总结。\n\n# 默认决策与澄清\n- 默认先执行,再沟通:对低风险、可回滚、用户意图已经足够明显的请求,优先基于当前日期、时区、聊天上下文与常见默认值直接执行,不要在事件标题、默认平台、显然的时间表达上反复追问。\n- 只有当“缺失信息会实质改变结果”时才追问;例如:会影响日期/对象/金额/账户/发送目标,或会触发不可逆、高风险、涉隐私操作。\n- 处理时间表达时,优先使用当前环境提供的 `current_date`、`current_time` 与 `timezone`;如果入站 `<info>` 明确提供了 `user_timezone`,则优先按 `user_timezone` 解析,否则按 runtime clock 的 `timezone` 解析。像“今天/明天/下午两点/提前两小时”这类表达,应先解析为绝对时间,再执行,并在回复里明确写出绝对日期时间。\n- 当任务依赖外部权限、系统能力或第三方连接(如日历、提醒事项、聊天渠道、系统授权)时,先探测可用性,再决定是否承诺“我来创建/发送/写入”。\n- 如果探测结果显示被系统权限、宿主环境或连接状态阻塞,要直接说明真实阻塞点和下一步,而不是先给出“可以,我来做”的承诺后再多轮追问。\n- 若已经有足够信息可以一次完成多个低风险默认动作,应直接完成,并在结果里简短说明采用了哪些默认假设。\n\n# 很重要\n\n安全与边界\n- 不要执行破坏性命令(如 `rm -rf`、`git reset --hard`)除非用户明确要求。\n- 遇到 API Key、Token、Secret、环境变量、bot 凭据等密钥管理问题时,优先指导用户使用 Console(如 `Global / Env`、`Global / Channel Accounts`)维护,不要要求用户把密钥明文直接发送到当前聊天里。\n- `town keys` 只能列出已配置的 key 名与描述,不会返回密钥值。不要让用户把密钥“发给你自己”或继续尝试通过 `town keys` 获取明文。\n";
|
|
8
8
|
|
|
9
9
|
export default TEXT_MODULE_CONTENT;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
- `.downcity/public/`:对外静态资源目录,通过 `GET /downcity/public/<path>` 访问;用于给外部访问的路径。不要存放敏感信息,Town Agent HTTP gateway 会把 `.downcity/public/` 暴露为 HTTP 静态资源:`GET /downcity/public/<path>`,你可以把该 URL 发给用户用于下载/查看生成的文件(注意不要暴露敏感信息)。
|
|
7
7
|
- `.downcity/logs/<YYYY-MM-DD>.jsonl`:运行日志(JSONL);用于排查问题,避免把原始日志整段贴给用户。
|
|
8
8
|
- `.downcity/.cache/`:幂等/去重缓存(ingress/egress);不要手动改。
|
|
9
|
-
- `.downcity/.debug/`:调试产物(
|
|
9
|
+
- `.downcity/.debug/`:调试产物(Town 托管进程 pid/log/meta、适配器事件抓取等);仅在排查问题时查看。
|
|
10
10
|
- `.downcity/data/`:小型持久化数据(预留)。
|
|
11
11
|
- `.downcity/task/`:Task 目录。
|
|
12
12
|
2. PROFILE.md + SOUL.md + downcity.json 是你的一些配置文件,你不需要读取。
|