@downcity/agent 1.1.74 → 1.1.81
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 +15 -18
- package/bin/agent/local/Agent.d.ts +82 -0
- package/bin/agent/local/Agent.d.ts.map +1 -0
- package/bin/agent/local/Agent.js +154 -0
- 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 +73 -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/local/services/AgentAssemblyService.d.ts +112 -0
- package/bin/agent/local/services/AgentAssemblyService.d.ts.map +1 -0
- package/bin/agent/local/services/AgentAssemblyService.js +135 -0
- package/bin/agent/local/services/AgentAssemblyService.js.map +1 -0
- package/bin/agent/local/services/AgentLifecycleService.d.ts +59 -0
- package/bin/agent/local/services/AgentLifecycleService.d.ts.map +1 -0
- package/bin/agent/local/services/AgentLifecycleService.js +136 -0
- package/bin/agent/local/services/AgentLifecycleService.js.map +1 -0
- package/bin/agent/local/services/AgentSessionManager.d.ts +106 -0
- package/bin/agent/local/services/AgentSessionManager.d.ts.map +1 -0
- package/bin/agent/local/services/AgentSessionManager.js +182 -0
- package/bin/agent/local/services/AgentSessionManager.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 +7 -20
- package/bin/executor/Executor.d.ts.map +1 -1
- package/bin/executor/Executor.js +77 -348
- package/bin/executor/Executor.js.map +1 -1
- package/bin/executor/SessionRunScope.d.ts +18 -34
- package/bin/executor/SessionRunScope.d.ts.map +1 -1
- package/bin/executor/SessionRunScope.js +42 -28
- package/bin/executor/SessionRunScope.js.map +1 -1
- package/bin/executor/composer/context/LocalSessionContextComposer.d.ts +5 -3
- package/bin/executor/composer/context/LocalSessionContextComposer.d.ts.map +1 -1
- package/bin/executor/composer/context/LocalSessionContextComposer.js +11 -18
- package/bin/executor/composer/context/LocalSessionContextComposer.js.map +1 -1
- package/bin/executor/composer/context/SessionContextComposer.d.ts +8 -3
- package/bin/executor/composer/context/SessionContextComposer.d.ts.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/SessionSystemComposer.d.ts +2 -1
- package/bin/executor/composer/system/SessionSystemComposer.d.ts.map +1 -1
- package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts +2 -1
- package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts.map +1 -1
- package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js +2 -4
- package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js.map +1 -1
- package/bin/executor/core-engine/CoreEngineRunner.d.ts +62 -0
- package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -0
- package/bin/executor/core-engine/CoreEngineRunner.js +309 -0
- package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -0
- package/bin/executor/core-engine/CoreEngineUiStreamCollector.d.ts +5 -0
- package/bin/executor/core-engine/CoreEngineUiStreamCollector.d.ts.map +1 -1
- package/bin/executor/core-engine/CoreEngineUiStreamCollector.js +2 -4
- package/bin/executor/core-engine/CoreEngineUiStreamCollector.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/services/ExecutorInflightService.d.ts +39 -0
- package/bin/executor/services/ExecutorInflightService.d.ts.map +1 -0
- package/bin/executor/services/ExecutorInflightService.js +75 -0
- package/bin/executor/services/ExecutorInflightService.js.map +1 -0
- package/bin/executor/services/ExecutorRecoveryPolicy.d.ts +103 -0
- package/bin/executor/services/ExecutorRecoveryPolicy.d.ts.map +1 -0
- package/bin/executor/services/ExecutorRecoveryPolicy.js +87 -0
- package/bin/executor/services/ExecutorRecoveryPolicy.js.map +1 -0
- 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/plugin/PluginToolBridge.d.ts +19 -0
- package/bin/executor/tools/plugin/PluginToolBridge.d.ts.map +1 -0
- package/bin/executor/tools/plugin/PluginToolBridge.js +143 -0
- package/bin/executor/tools/plugin/PluginToolBridge.js.map +1 -0
- package/bin/executor/tools/plugin/PluginToolDefinition.d.ts +32 -0
- package/bin/executor/tools/plugin/PluginToolDefinition.d.ts.map +1 -0
- package/bin/executor/tools/plugin/PluginToolDefinition.js +27 -0
- package/bin/executor/tools/plugin/PluginToolDefinition.js.map +1 -0
- package/bin/executor/tools/plugin/PluginToolSchemas.d.ts +14 -0
- package/bin/executor/tools/plugin/PluginToolSchemas.d.ts.map +1 -0
- package/bin/executor/tools/plugin/PluginToolSchemas.js +19 -0
- package/bin/executor/tools/plugin/PluginToolSchemas.js.map +1 -0
- package/bin/executor/tools/plugin/types/PluginTool.d.ts +39 -0
- package/bin/executor/tools/plugin/types/PluginTool.d.ts.map +1 -0
- package/bin/executor/tools/plugin/types/PluginTool.js +9 -0
- package/bin/executor/tools/plugin/types/PluginTool.js.map +1 -0
- package/bin/executor/tools/shell/ShellToolBridge.js +3 -3
- package/bin/executor/tools/shell/ShellToolBridge.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/executor/types/SessionRun.d.ts +18 -0
- package/bin/executor/types/SessionRun.d.ts.map +1 -1
- package/bin/index.d.ts +15 -6
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +6 -3
- package/bin/index.js.map +1 -1
- package/bin/plugin/core/BasePlugin.d.ts +2 -2
- package/bin/plugin/core/BasePlugin.d.ts.map +1 -1
- package/bin/plugin/core/BasePlugin.js.map +1 -1
- package/bin/plugin/core/ImagePlugin.d.ts +56 -0
- package/bin/plugin/core/ImagePlugin.d.ts.map +1 -0
- package/bin/plugin/core/ImagePlugin.js +109 -0
- package/bin/plugin/core/ImagePlugin.js.map +1 -0
- 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 +14 -83
- package/bin/session/Session.d.ts.map +1 -1
- package/bin/session/Session.js +140 -362
- package/bin/session/Session.js.map +1 -1
- package/bin/session/SessionSystemBuilder.d.ts +2 -1
- package/bin/session/SessionSystemBuilder.d.ts.map +1 -1
- package/bin/session/SessionSystemBuilder.js +2 -3
- package/bin/session/SessionSystemBuilder.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/services/SessionStateService.d.ts +132 -0
- package/bin/session/services/SessionStateService.d.ts.map +1 -0
- package/bin/session/services/SessionStateService.js +242 -0
- package/bin/session/services/SessionStateService.js.map +1 -0
- package/bin/session/services/SessionTurnService.d.ts +66 -0
- package/bin/session/services/SessionTurnService.d.ts.map +1 -0
- package/bin/session/services/SessionTurnService.js +137 -0
- package/bin/session/services/SessionTurnService.js.map +1 -0
- package/bin/session/services/SessionViewService.d.ts +105 -0
- package/bin/session/services/SessionViewService.d.ts.map +1 -0
- package/bin/session/services/SessionViewService.js +184 -0
- package/bin/session/services/SessionViewService.js.map +1 -0
- 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 +152 -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 +10 -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/executor/SessionRunContext.d.ts +66 -0
- package/bin/types/executor/SessionRunContext.d.ts.map +1 -0
- package/bin/types/executor/SessionRunContext.js +10 -0
- package/bin/types/executor/SessionRunContext.js.map +1 -0
- 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/ImagePlugin.d.ts +94 -0
- package/bin/types/plugin/ImagePlugin.d.ts.map +1 -0
- package/bin/types/plugin/ImagePlugin.js +10 -0
- package/bin/types/plugin/ImagePlugin.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/session/SessionComposerOptions.d.ts +90 -0
- package/bin/types/session/SessionComposerOptions.d.ts.map +1 -0
- package/bin/types/session/SessionComposerOptions.js +10 -0
- package/bin/types/session/SessionComposerOptions.js.map +1 -0
- package/bin/types/session/SessionLocalState.d.ts +35 -0
- package/bin/types/session/SessionLocalState.d.ts.map +1 -0
- package/bin/types/session/SessionLocalState.js +10 -0
- package/bin/types/session/SessionLocalState.js.map +1 -0
- package/bin/types/session/SessionOptions.d.ts +85 -0
- package/bin/types/session/SessionOptions.d.ts.map +1 -0
- package/bin/types/session/SessionOptions.js +10 -0
- package/bin/types/session/SessionOptions.js.map +1 -0
- package/package.json +2 -2
- package/scripts/session-history-inflight.test.mjs +146 -0
- package/src/agent/local/Agent.ts +197 -0
- 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 +152 -0
- package/src/{runtime/host → agent/local}/ProjectSetup.ts +1 -1
- package/src/agent/local/services/AgentAssemblyService.ts +268 -0
- package/src/agent/local/services/AgentLifecycleService.ts +187 -0
- package/src/agent/local/services/AgentSessionManager.ts +291 -0
- 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 +107 -426
- package/src/executor/README.md +4 -4
- package/src/executor/SessionRunScope.ts +47 -71
- package/src/executor/composer/context/LocalSessionContextComposer.ts +24 -20
- package/src/executor/composer/context/SessionContextComposer.ts +13 -3
- package/src/executor/composer/history/SessionHistoryWriter.ts +2 -2
- package/src/executor/composer/system/SessionSystemComposer.ts +2 -1
- package/src/executor/composer/system/default/DefaultSessionSystemComposer.ts +3 -4
- package/src/executor/core-engine/CoreEngineRunner.ts +433 -0
- package/src/executor/core-engine/CoreEngineUiStreamCollector.ts +7 -5
- 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/services/ExecutorInflightService.ts +101 -0
- package/src/executor/services/ExecutorRecoveryPolicy.ts +213 -0
- package/src/executor/store/history/SessionHistoryStore.ts +15 -0
- package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +164 -11
- package/src/executor/tools/plugin/PluginToolBridge.ts +161 -0
- package/src/executor/tools/plugin/PluginToolDefinition.ts +32 -0
- package/src/executor/tools/plugin/PluginToolSchemas.ts +20 -0
- package/src/executor/tools/plugin/types/PluginTool.ts +41 -0
- package/src/executor/tools/shell/ShellToolBridge.ts +3 -3
- package/src/executor/tools/shell/ShellToolFormatting.ts +1 -50
- package/src/executor/types/SessionHistoryPaths.ts +5 -0
- package/src/executor/types/SessionRun.ts +20 -0
- package/src/index.ts +38 -5
- package/src/plugin/core/BasePlugin.ts +2 -2
- package/src/plugin/core/ImagePlugin.ts +128 -0
- 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 +184 -485
- package/src/session/SessionSystemBuilder.ts +3 -3
- package/src/session/browse/Browse.ts +29 -10
- package/src/session/index.ts +1 -0
- package/src/session/services/SessionStateService.ts +341 -0
- package/src/session/services/SessionTurnService.ts +202 -0
- package/src/session/services/SessionViewService.ts +301 -0
- package/src/session/storage/Paths.ts +19 -0
- package/src/types/agent/AgentOptions.ts +172 -0
- package/src/types/{runtime/host/AgentHost.ts → agent/AgentRuntimeAssembly.ts} +2 -2
- package/src/types/agent/AgentTypes.ts +47 -709
- package/src/types/agent/RemoteAgentOptions.ts +29 -0
- package/src/types/agent/SessionActor.ts +88 -0
- package/src/types/agent/SessionTypes.ts +335 -0
- package/src/types/config/DowncityConfig.ts +1 -1
- package/src/types/executor/SessionRunContext.ts +76 -0
- package/src/types/{runtime/host → platform}/Store.ts +1 -1
- package/src/types/plugin/ImagePlugin.ts +103 -0
- 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/session/SessionComposerOptions.ts +107 -0
- package/src/types/session/SessionLocalState.ts +40 -0
- package/src/types/session/SessionOptions.ts +99 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/bin/agent/Agent.d.ts +0 -223
- package/bin/agent/Agent.d.ts.map +0 -1
- package/bin/agent/Agent.js +0 -627
- 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/Agent.ts +0 -734
- 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
|
@@ -106,6 +106,7 @@ export class JsonlSessionHistoryStore implements SessionHistoryStore {
|
|
|
106
106
|
private readonly overrideMessagesFilePath?: string;
|
|
107
107
|
private readonly overrideMetaFilePath?: string;
|
|
108
108
|
private readonly overrideArchiveDirPath?: string;
|
|
109
|
+
private readonly overrideInflightFilePath?: string;
|
|
109
110
|
|
|
110
111
|
constructor(options: JsonlSessionHistoryStoreOptions) {
|
|
111
112
|
const rootPath = String(options.rootPath || "").trim();
|
|
@@ -135,6 +136,9 @@ export class JsonlSessionHistoryStore implements SessionHistoryStore {
|
|
|
135
136
|
this.overrideArchiveDirPath = this.readOptionalPath(
|
|
136
137
|
options.paths?.archiveDirPath,
|
|
137
138
|
);
|
|
139
|
+
this.overrideInflightFilePath = this.readOptionalPath(
|
|
140
|
+
options.paths?.inflightFilePath,
|
|
141
|
+
);
|
|
138
142
|
}
|
|
139
143
|
|
|
140
144
|
private readOptionalPath(value: string | undefined): string | undefined {
|
|
@@ -183,6 +187,14 @@ export class JsonlSessionHistoryStore implements SessionHistoryStore {
|
|
|
183
187
|
return path.join(this.getMessagesDirPath(), "archive");
|
|
184
188
|
}
|
|
185
189
|
|
|
190
|
+
private getInflightFilePath(): string {
|
|
191
|
+
if (this.overrideInflightFilePath) return this.overrideInflightFilePath;
|
|
192
|
+
if (this.overrideMessagesDirPath) {
|
|
193
|
+
return path.join(this.overrideMessagesDirPath, "inflight.json");
|
|
194
|
+
}
|
|
195
|
+
return path.join(this.getMessagesDirPath(), "inflight.json");
|
|
196
|
+
}
|
|
197
|
+
|
|
186
198
|
private getLockFilePath(): string {
|
|
187
199
|
return path.join(this.getMessagesDirPath(), ".session.lock");
|
|
188
200
|
}
|
|
@@ -199,6 +211,75 @@ export class JsonlSessionHistoryStore implements SessionHistoryStore {
|
|
|
199
211
|
return value || undefined;
|
|
200
212
|
}
|
|
201
213
|
|
|
214
|
+
private normalizePersistedMessage(
|
|
215
|
+
input: unknown,
|
|
216
|
+
): SessionMessageV1 | null {
|
|
217
|
+
if (!input || typeof input !== "object") return null;
|
|
218
|
+
const candidate = input as Partial<SessionMessageV1>;
|
|
219
|
+
const role = String(candidate.role || "");
|
|
220
|
+
if (role !== "user" && role !== "assistant") return null;
|
|
221
|
+
if (!Array.isArray(candidate.parts)) return null;
|
|
222
|
+
return candidate as SessionMessageV1;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
private hasStructuredAssistantParts(message: SessionMessageV1 | null): boolean {
|
|
226
|
+
if (!message || message.role !== "assistant" || !Array.isArray(message.parts)) {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
return message.parts.some((part) => {
|
|
230
|
+
if (!part || typeof part !== "object") return false;
|
|
231
|
+
const type = typeof part.type === "string" ? part.type.trim() : "";
|
|
232
|
+
return Boolean(type) && type !== "text";
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
private mergeInflightWithFinal(
|
|
237
|
+
inflight: SessionMessageV1,
|
|
238
|
+
finalMessage: SessionMessageV1,
|
|
239
|
+
): SessionMessageV1 {
|
|
240
|
+
const final_parts = Array.isArray(finalMessage.parts)
|
|
241
|
+
? finalMessage.parts.filter((part) => part && typeof part === "object")
|
|
242
|
+
: [];
|
|
243
|
+
if (this.hasStructuredAssistantParts(finalMessage)) {
|
|
244
|
+
return finalMessage;
|
|
245
|
+
}
|
|
246
|
+
if (final_parts.length === 0) return inflight;
|
|
247
|
+
|
|
248
|
+
const inflight_parts = Array.isArray(inflight.parts)
|
|
249
|
+
? inflight.parts
|
|
250
|
+
: [];
|
|
251
|
+
const last_inflight_part =
|
|
252
|
+
inflight_parts.length > 0 ? inflight_parts[inflight_parts.length - 1] : undefined;
|
|
253
|
+
const last_inflight_text =
|
|
254
|
+
last_inflight_part &&
|
|
255
|
+
typeof last_inflight_part === "object" &&
|
|
256
|
+
last_inflight_part.type === "text" &&
|
|
257
|
+
typeof last_inflight_part.text === "string"
|
|
258
|
+
? last_inflight_part.text.trim()
|
|
259
|
+
: "";
|
|
260
|
+
const append_parts = final_parts.filter((part, index) => {
|
|
261
|
+
if (index > 0) return true;
|
|
262
|
+
if (!part || typeof part !== "object" || part.type !== "text") return true;
|
|
263
|
+
const next_text = typeof part.text === "string" ? part.text.trim() : "";
|
|
264
|
+
if (!next_text) return false;
|
|
265
|
+
return next_text !== last_inflight_text;
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
...inflight,
|
|
270
|
+
id: finalMessage.id,
|
|
271
|
+
metadata: {
|
|
272
|
+
...(inflight.metadata || {
|
|
273
|
+
v: 1 as const,
|
|
274
|
+
ts: Date.now(),
|
|
275
|
+
sessionId: this.sessionId,
|
|
276
|
+
}),
|
|
277
|
+
...(finalMessage.metadata || {}),
|
|
278
|
+
},
|
|
279
|
+
parts: [...inflight_parts, ...append_parts],
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
|
|
202
283
|
private async readMetaUnsafe(): Promise<SessionHistoryMetaV1> {
|
|
203
284
|
const file = this.getMetaFilePath();
|
|
204
285
|
try {
|
|
@@ -261,6 +342,40 @@ export class JsonlSessionHistoryStore implements SessionHistoryStore {
|
|
|
261
342
|
await fs.writeJson(this.getMetaFilePath(), normalized, { spaces: 2 });
|
|
262
343
|
}
|
|
263
344
|
|
|
345
|
+
private async readInflightUnsafe(): Promise<SessionMessageV1 | null> {
|
|
346
|
+
const file = this.getInflightFilePath();
|
|
347
|
+
try {
|
|
348
|
+
const raw = await fs.readJson(file);
|
|
349
|
+
return this.normalizePersistedMessage(raw);
|
|
350
|
+
} catch {
|
|
351
|
+
return null;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
private async writeInflightUnsafe(message: SessionMessageV1): Promise<void> {
|
|
356
|
+
const normalized = this.normalizePersistedMessage(message);
|
|
357
|
+
if (!normalized || normalized.role !== "assistant") {
|
|
358
|
+
throw new Error("inflight assistant must be an assistant UIMessage");
|
|
359
|
+
}
|
|
360
|
+
const file = this.getInflightFilePath();
|
|
361
|
+
const temp = `${file}.${process.pid}.${Date.now()}.tmp`;
|
|
362
|
+
await fs.ensureDir(path.dirname(file));
|
|
363
|
+
await fs.writeJson(temp, normalized, { spaces: 2 });
|
|
364
|
+
await fs.move(temp, file, { overwrite: true });
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
private async removeInflightUnsafe(): Promise<void> {
|
|
368
|
+
await fs.remove(this.getInflightFilePath());
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
private async appendMessageUnsafe(message: SessionMessageV1): Promise<void> {
|
|
372
|
+
await fs.appendFile(
|
|
373
|
+
this.getMessagesFilePath(),
|
|
374
|
+
JSON.stringify(message) + "\n",
|
|
375
|
+
"utf8",
|
|
376
|
+
);
|
|
377
|
+
}
|
|
378
|
+
|
|
264
379
|
private async withWriteLock<T>(fn: () => Promise<T>): Promise<T> {
|
|
265
380
|
await this.ensureLayout();
|
|
266
381
|
const lockPath = this.getLockFilePath();
|
|
@@ -361,11 +476,48 @@ export class JsonlSessionHistoryStore implements SessionHistoryStore {
|
|
|
361
476
|
|
|
362
477
|
async append(message: SessionMessageV1): Promise<void> {
|
|
363
478
|
await this.withWriteLock(async () => {
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
)
|
|
479
|
+
const normalized = this.normalizePersistedMessage(message);
|
|
480
|
+
if (!normalized) return;
|
|
481
|
+
|
|
482
|
+
// 关键点(中文):若上一次 assistant 在运行中中断,新的 user 到来前先把残留快照收口到正式历史,
|
|
483
|
+
// 避免 `list()` 时旧 inflight 跑到新 user 后面,打乱时序。
|
|
484
|
+
if (normalized.role === "user") {
|
|
485
|
+
const current_inflight = await this.readInflightUnsafe();
|
|
486
|
+
if (current_inflight) {
|
|
487
|
+
await this.appendMessageUnsafe(current_inflight);
|
|
488
|
+
await this.removeInflightUnsafe();
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
await this.appendMessageUnsafe(normalized);
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
async readInflight(): Promise<SessionMessageV1 | null> {
|
|
497
|
+
await this.ensureLayout();
|
|
498
|
+
return this.readInflightUnsafe();
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
async writeInflight(message: SessionMessageV1): Promise<void> {
|
|
502
|
+
await this.withWriteLock(async () => {
|
|
503
|
+
await this.writeInflightUnsafe(message);
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
async finalizeInflight(message?: SessionMessageV1 | null): Promise<void> {
|
|
508
|
+
await this.withWriteLock(async () => {
|
|
509
|
+
const current_inflight = await this.readInflightUnsafe();
|
|
510
|
+
const normalized_message = this.normalizePersistedMessage(message);
|
|
511
|
+
const final_message =
|
|
512
|
+
current_inflight && normalized_message
|
|
513
|
+
? this.mergeInflightWithFinal(current_inflight, normalized_message)
|
|
514
|
+
: normalized_message || current_inflight;
|
|
515
|
+
if (final_message) {
|
|
516
|
+
await this.appendMessageUnsafe(final_message);
|
|
517
|
+
}
|
|
518
|
+
if (current_inflight) {
|
|
519
|
+
await this.removeInflightUnsafe();
|
|
520
|
+
}
|
|
369
521
|
});
|
|
370
522
|
}
|
|
371
523
|
|
|
@@ -377,16 +529,17 @@ export class JsonlSessionHistoryStore implements SessionHistoryStore {
|
|
|
377
529
|
const out: SessionMessageV1[] = [];
|
|
378
530
|
for (const line of lines) {
|
|
379
531
|
try {
|
|
380
|
-
const obj = JSON.parse(line)
|
|
381
|
-
if (!obj
|
|
382
|
-
|
|
383
|
-
if (role !== "user" && role !== "assistant") continue;
|
|
384
|
-
if (!Array.isArray(obj.parts)) continue;
|
|
385
|
-
out.push(obj as SessionMessageV1);
|
|
532
|
+
const obj = this.normalizePersistedMessage(JSON.parse(line));
|
|
533
|
+
if (!obj) continue;
|
|
534
|
+
out.push(obj);
|
|
386
535
|
} catch {
|
|
387
536
|
// ignore invalid lines
|
|
388
537
|
}
|
|
389
538
|
}
|
|
539
|
+
const current_inflight = await this.readInflightUnsafe();
|
|
540
|
+
if (current_inflight) {
|
|
541
|
+
out.push(current_inflight);
|
|
542
|
+
}
|
|
390
543
|
return out;
|
|
391
544
|
}
|
|
392
545
|
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin tool 运行时桥接。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - tool 层不直接持有 agent 或 plugin registry,只通过装配期注入的 PluginPort 调用 action。
|
|
6
|
+
* - 如果 action 返回 AI SDK UIMessage,则抽取 file parts 并入最终 assistant 消息。
|
|
7
|
+
* - 返回给模型的 tool result 只保留短摘要,避免 data URL 等大内容污染上下文。
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { FileUIPart } from "ai";
|
|
11
|
+
import type { JsonObject, JsonValue } from "@/types/common/Json.js";
|
|
12
|
+
import type { PluginPort } from "@/plugin/types/Plugin.js";
|
|
13
|
+
import type {
|
|
14
|
+
PluginCallInput,
|
|
15
|
+
PluginCallToolResult,
|
|
16
|
+
} from "@/executor/tools/plugin/types/PluginTool.js";
|
|
17
|
+
import { enqueueAssistantFileParts } from "@executor/SessionRunScope.js";
|
|
18
|
+
|
|
19
|
+
let plugin_tool_runtime: PluginPort | null = null;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 注入 plugin tool 运行时。
|
|
23
|
+
*/
|
|
24
|
+
export function setPluginToolRuntime(next: PluginPort): void {
|
|
25
|
+
plugin_tool_runtime = next;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 读取已注入的 plugin tool 运行时。
|
|
30
|
+
*/
|
|
31
|
+
function require_plugin_tool_runtime(): PluginPort {
|
|
32
|
+
if (plugin_tool_runtime) return plugin_tool_runtime;
|
|
33
|
+
throw new Error(
|
|
34
|
+
"Plugin tool runtime is not initialized. Ensure agent assembly completed before using plugin_call.",
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 判断值是否为普通对象。
|
|
40
|
+
*/
|
|
41
|
+
function to_json_object(value: unknown): JsonObject | null {
|
|
42
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return null;
|
|
43
|
+
return value as JsonObject;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* 判断 UI part 是否为 file part。
|
|
48
|
+
*/
|
|
49
|
+
function is_file_part(value: unknown): value is FileUIPart {
|
|
50
|
+
const record = to_json_object(value);
|
|
51
|
+
if (!record) return false;
|
|
52
|
+
return (
|
|
53
|
+
record.type === "file" &&
|
|
54
|
+
typeof record.mediaType === "string" &&
|
|
55
|
+
typeof record.url === "string"
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* 从 action data 中抽取可落盘的 assistant file parts。
|
|
61
|
+
*/
|
|
62
|
+
function extract_assistant_file_parts(data: JsonValue | undefined): FileUIPart[] {
|
|
63
|
+
const message = to_json_object(data);
|
|
64
|
+
const parts: unknown[] = Array.isArray(message?.parts) ? message.parts : [];
|
|
65
|
+
return parts.filter(is_file_part);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* 生成给模型读取的短摘要。
|
|
70
|
+
*/
|
|
71
|
+
function summarize_action_data(data: JsonValue | undefined): JsonObject {
|
|
72
|
+
const message = to_json_object(data);
|
|
73
|
+
const parts: unknown[] = Array.isArray(message?.parts) ? message.parts : [];
|
|
74
|
+
const file_parts = parts.filter(is_file_part);
|
|
75
|
+
if (parts.length > 0) {
|
|
76
|
+
return {
|
|
77
|
+
kind: "ui_message",
|
|
78
|
+
role: typeof message?.role === "string" ? message.role : "assistant",
|
|
79
|
+
part_count: parts.length,
|
|
80
|
+
file_count: file_parts.length,
|
|
81
|
+
files: file_parts.map((part, index) => ({
|
|
82
|
+
index,
|
|
83
|
+
mediaType: part.mediaType,
|
|
84
|
+
filename: typeof part.filename === "string" ? part.filename : "",
|
|
85
|
+
// 关键点(中文):不把 data URL 或长 URL 原样返回给模型,完整内容只进入 assistant file part。
|
|
86
|
+
has_url: Boolean(part.url),
|
|
87
|
+
})),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (data === undefined) return {};
|
|
91
|
+
return {
|
|
92
|
+
kind: "json",
|
|
93
|
+
value: data,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* 调用 plugin action 并桥接最终 assistant file parts。
|
|
99
|
+
*/
|
|
100
|
+
export async function invokePluginCallTool(
|
|
101
|
+
input: PluginCallInput,
|
|
102
|
+
): Promise<PluginCallToolResult> {
|
|
103
|
+
const plugin = String(input.plugin || "").trim();
|
|
104
|
+
const action = String(input.action || "").trim();
|
|
105
|
+
const payload = to_json_object(input.payload ?? {}) ?? {};
|
|
106
|
+
if (!plugin) {
|
|
107
|
+
return {
|
|
108
|
+
success: false,
|
|
109
|
+
plugin,
|
|
110
|
+
action,
|
|
111
|
+
assistant_file_count: 0,
|
|
112
|
+
message: "plugin is required",
|
|
113
|
+
error: "plugin is required",
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
if (!action) {
|
|
117
|
+
return {
|
|
118
|
+
success: false,
|
|
119
|
+
plugin,
|
|
120
|
+
action,
|
|
121
|
+
assistant_file_count: 0,
|
|
122
|
+
message: "action is required",
|
|
123
|
+
error: "action is required",
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
try {
|
|
128
|
+
const runtime = require_plugin_tool_runtime();
|
|
129
|
+
const result = await runtime.runAction({
|
|
130
|
+
plugin,
|
|
131
|
+
action,
|
|
132
|
+
payload,
|
|
133
|
+
});
|
|
134
|
+
const file_parts = result.success
|
|
135
|
+
? extract_assistant_file_parts(result.data)
|
|
136
|
+
: [];
|
|
137
|
+
if (file_parts.length > 0) {
|
|
138
|
+
enqueueAssistantFileParts(file_parts);
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
success: result.success,
|
|
142
|
+
plugin,
|
|
143
|
+
action,
|
|
144
|
+
assistant_file_count: file_parts.length,
|
|
145
|
+
message:
|
|
146
|
+
String(result.message || result.error || "").trim() ||
|
|
147
|
+
(result.success ? "plugin action completed" : "plugin action failed"),
|
|
148
|
+
...(result.error ? { error: result.error } : {}),
|
|
149
|
+
data: summarize_action_data(result.data),
|
|
150
|
+
};
|
|
151
|
+
} catch (error) {
|
|
152
|
+
return {
|
|
153
|
+
success: false,
|
|
154
|
+
plugin,
|
|
155
|
+
action,
|
|
156
|
+
assistant_file_count: 0,
|
|
157
|
+
message: String(error),
|
|
158
|
+
error: String(error),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin tools。
|
|
3
|
+
*
|
|
4
|
+
* 设计目标(中文)
|
|
5
|
+
* - plugin_call 是 agent 内置 plugin action 桥,类似 shell tool 的底层能力入口。
|
|
6
|
+
* - tool 只负责 AI SDK 工具协议适配,不理解具体 plugin 的业务语义。
|
|
7
|
+
* - 插件业务输出若包含 UIMessage file parts,会由 bridge 并入最终 assistant 消息。
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { tool } from "ai";
|
|
11
|
+
import type { PluginCallInput } from "@/executor/tools/plugin/types/PluginTool.js";
|
|
12
|
+
import { invokePluginCallTool, setPluginToolRuntime } from "./PluginToolBridge.js";
|
|
13
|
+
import { plugin_call_input_schema } from "./PluginToolSchemas.js";
|
|
14
|
+
|
|
15
|
+
export { setPluginToolRuntime } from "./PluginToolBridge.js";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* `plugin_call`:调用已注册 plugin action。
|
|
19
|
+
*/
|
|
20
|
+
export const plugin_call = tool({
|
|
21
|
+
description:
|
|
22
|
+
"Call a registered agent plugin action. Use this for plugin capabilities such as image generation. Generated files may be attached to the final assistant message automatically.",
|
|
23
|
+
inputSchema: plugin_call_input_schema,
|
|
24
|
+
execute: async (input) => await invokePluginCallTool(input as PluginCallInput),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Plugin 工具导出集合。
|
|
29
|
+
*/
|
|
30
|
+
export const plugin_tools = {
|
|
31
|
+
plugin_call,
|
|
32
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin tool 输入 schema。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - plugin_call 是 agent 内置的最低层 plugin action 桥。
|
|
6
|
+
* - schema 只描述模型需要提交的目标 plugin、action 与 JSON payload。
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
|
|
11
|
+
export const plugin_call_input_schema = z.object({
|
|
12
|
+
plugin: z.string().describe("Registered plugin name to call, for example image."),
|
|
13
|
+
action: z.string().describe("Plugin action name to execute, for example generate."),
|
|
14
|
+
payload: z
|
|
15
|
+
.object({})
|
|
16
|
+
.passthrough()
|
|
17
|
+
.optional()
|
|
18
|
+
.default({})
|
|
19
|
+
.describe("JSON payload passed to the plugin action."),
|
|
20
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin tool 类型定义。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 这里描述模型通过 plugin_call 提交的最低层调用协议。
|
|
6
|
+
* - payload 保持 JSON 对象,避免 tool 层理解具体 plugin 的业务字段。
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { JsonObject } from "@/types/common/Json.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* plugin_call 输入。
|
|
13
|
+
*/
|
|
14
|
+
export interface PluginCallInput {
|
|
15
|
+
/** 目标 plugin 名称。 */
|
|
16
|
+
plugin: string;
|
|
17
|
+
/** 目标 action 名称。 */
|
|
18
|
+
action: string;
|
|
19
|
+
/** 传给 plugin action 的 JSON payload。 */
|
|
20
|
+
payload?: JsonObject;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* plugin_call 返回给模型的摘要结果。
|
|
25
|
+
*/
|
|
26
|
+
export interface PluginCallToolResult {
|
|
27
|
+
/** 调用是否成功。 */
|
|
28
|
+
success: boolean;
|
|
29
|
+
/** 目标 plugin 名称。 */
|
|
30
|
+
plugin: string;
|
|
31
|
+
/** 目标 action 名称。 */
|
|
32
|
+
action: string;
|
|
33
|
+
/** 本次 action 产生并写入 assistant 消息的 file part 数量。 */
|
|
34
|
+
assistant_file_count: number;
|
|
35
|
+
/** 人类可读消息。 */
|
|
36
|
+
message: string;
|
|
37
|
+
/** 错误信息。 */
|
|
38
|
+
error?: string;
|
|
39
|
+
/** 返回给模型读取的短摘要数据。 */
|
|
40
|
+
data?: JsonObject;
|
|
41
|
+
}
|
|
@@ -16,7 +16,7 @@ import type { ShellActionResponse } from "@/executor/tools/shell/types/ShellPlug
|
|
|
16
16
|
import {
|
|
17
17
|
enqueueDeferredPersistedUserMessage,
|
|
18
18
|
enqueueInjectedUserMessage,
|
|
19
|
-
|
|
19
|
+
getSessionRunContext,
|
|
20
20
|
} from "@executor/SessionRunScope.js";
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -88,8 +88,8 @@ async function injectUserTextMessage(params: {
|
|
|
88
88
|
*/
|
|
89
89
|
note?: string;
|
|
90
90
|
}): Promise<boolean> {
|
|
91
|
-
const
|
|
92
|
-
const sessionId = String(
|
|
91
|
+
const run_context = getSessionRunContext();
|
|
92
|
+
const sessionId = String(run_context?.sessionId || "").trim();
|
|
93
93
|
const text = String(params.text || "").trim();
|
|
94
94
|
if (!sessionId || !text) return false;
|
|
95
95
|
const note = String(params.note || "runtime_injected_user_message");
|
|
@@ -3,35 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - shell 会话生命周期已经统一收敛到 shell plugin runtime。
|
|
6
|
-
* - 这里仅保留当前仍被 tool
|
|
6
|
+
* - 这里仅保留当前仍被 tool 与测试复用的最小能力:命令安全校验。
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { stripInvocationAuthEnv } from "@/runtime/auth/AuthEnv.js";
|
|
10
|
-
import { getSessionRunScope } from "@executor/SessionRunScope.js";
|
|
11
|
-
|
|
12
|
-
function setEnvString(
|
|
13
|
-
env: NodeJS.ProcessEnv,
|
|
14
|
-
key: string,
|
|
15
|
-
value: string | undefined,
|
|
16
|
-
): void {
|
|
17
|
-
if (typeof value !== "string") return;
|
|
18
|
-
const trimmed = value.trim();
|
|
19
|
-
if (!trimmed) return;
|
|
20
|
-
env[key] = trimmed;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function applyEnvMap(
|
|
24
|
-
env: NodeJS.ProcessEnv,
|
|
25
|
-
entries?: Record<string, string>,
|
|
26
|
-
): void {
|
|
27
|
-
if (!entries) return;
|
|
28
|
-
for (const [rawKey, rawValue] of Object.entries(entries)) {
|
|
29
|
-
const key = String(rawKey || "").trim();
|
|
30
|
-
if (!key) continue;
|
|
31
|
-
setEnvString(env, key, rawValue);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
9
|
/**
|
|
36
10
|
* 对 `town chat send` 命令做前置安全校验。
|
|
37
11
|
*
|
|
@@ -58,26 +32,3 @@ export function validateChatSendCommand(cmd: string): string | null {
|
|
|
58
32
|
"If your message is multi-line, use `town chat send --stdin` (with heredoc/pipe), `--text-file`, or explicit `--text`.",
|
|
59
33
|
].join(" ");
|
|
60
34
|
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* 构建 shell 子进程环境变量。
|
|
64
|
-
*
|
|
65
|
-
* 关键点(中文)
|
|
66
|
-
* - 当前仍用于 shell tool / shell runtime 与相关测试。
|
|
67
|
-
* - 优先级:显式注入 > 当前请求上下文变量 > 宿主进程环境。
|
|
68
|
-
* - 默认剥离 Bearer Token,避免通用 shell 隐式走本地 HTTP。
|
|
69
|
-
*/
|
|
70
|
-
export function buildShellContextEnv(
|
|
71
|
-
injected?: Record<string, string>,
|
|
72
|
-
): NodeJS.ProcessEnv {
|
|
73
|
-
const env: NodeJS.ProcessEnv = { ...process.env };
|
|
74
|
-
const contextCtx = getSessionRunScope();
|
|
75
|
-
|
|
76
|
-
applyEnvMap(env, injected);
|
|
77
|
-
setEnvString(env, "DC_SESSION_ID", contextCtx?.sessionId);
|
|
78
|
-
setEnvString(env, "DC_CITY_HOST", process.env.DC_CITY_HOST);
|
|
79
|
-
setEnvString(env, "DC_CITY_PORT", process.env.DC_CITY_PORT);
|
|
80
|
-
stripInvocationAuthEnv(env);
|
|
81
|
-
|
|
82
|
-
return env;
|
|
83
|
-
}
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
|
|
10
10
|
import type { Tool, UIMessageChunk } from "ai";
|
|
11
11
|
import type { SessionMessageV1 } from "@/executor/types/SessionMessages.js";
|
|
12
|
+
import type { SessionUserMessageV1 } from "@/executor/types/SessionMessages.js";
|
|
12
13
|
import type { SessionSystemMessage } from "@/executor/types/SessionPrompts.js";
|
|
14
|
+
import type { SessionRunContext } from "@/types/executor/SessionRunContext.js";
|
|
13
15
|
|
|
14
16
|
/**
|
|
15
17
|
* Assistant step 可见性。
|
|
@@ -94,6 +96,15 @@ export interface SessionRunResult {
|
|
|
94
96
|
* 最终 assistant 消息。
|
|
95
97
|
*/
|
|
96
98
|
assistantMessage: SessionMessageV1;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* 本轮执行结束后待写入长期历史的 user 消息。
|
|
102
|
+
*
|
|
103
|
+
* 关键点(中文)
|
|
104
|
+
* - 这些消息通常由 tool 运行时在执行过程中动态注入。
|
|
105
|
+
* - 为保证消息顺序稳定,统一在 assistant 结果落盘后再由外层 Session 持久化。
|
|
106
|
+
*/
|
|
107
|
+
deferredPersistedUserMessages?: SessionUserMessageV1[];
|
|
97
108
|
}
|
|
98
109
|
|
|
99
110
|
/**
|
|
@@ -104,6 +115,15 @@ export interface SessionRunInput {
|
|
|
104
115
|
* 本轮用户输入查询文本。
|
|
105
116
|
*/
|
|
106
117
|
query: string;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* 本轮显式运行上下文。
|
|
121
|
+
*
|
|
122
|
+
* 关键点(中文)
|
|
123
|
+
* - 这里承载 step 合并、UI chunk 回调等跨组件运行期数据。
|
|
124
|
+
* - 若未传入,则由执行器按最小默认值兜底创建。
|
|
125
|
+
*/
|
|
126
|
+
runContext?: SessionRunContext;
|
|
107
127
|
}
|
|
108
128
|
|
|
109
129
|
/**
|