@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.
Files changed (514) hide show
  1. package/README.md +15 -18
  2. package/bin/agent/local/Agent.d.ts +82 -0
  3. package/bin/agent/local/Agent.d.ts.map +1 -0
  4. package/bin/agent/local/Agent.js +154 -0
  5. package/bin/agent/local/Agent.js.map +1 -0
  6. package/bin/agent/local/AgentInstructions.d.ts +22 -0
  7. package/bin/agent/local/AgentInstructions.d.ts.map +1 -0
  8. package/bin/agent/local/AgentInstructions.js +57 -0
  9. package/bin/agent/local/AgentInstructions.js.map +1 -0
  10. package/bin/agent/local/AgentPluginFactory.d.ts +29 -0
  11. package/bin/agent/local/AgentPluginFactory.d.ts.map +1 -0
  12. package/bin/agent/local/AgentPluginFactory.js +53 -0
  13. package/bin/agent/local/AgentPluginFactory.js.map +1 -0
  14. package/bin/{runtime/host/AgentHostRuntime.d.ts → agent/local/AgentRuntimeAssembly.d.ts} +2 -2
  15. package/bin/agent/local/AgentRuntimeAssembly.d.ts.map +1 -0
  16. package/bin/{runtime/host/AgentHostRuntime.js → agent/local/AgentRuntimeAssembly.js} +2 -2
  17. package/bin/agent/local/AgentRuntimeAssembly.js.map +1 -0
  18. package/bin/agent/local/AgentRuntimeFactory.d.ts +72 -0
  19. package/bin/agent/local/AgentRuntimeFactory.d.ts.map +1 -0
  20. package/bin/agent/local/AgentRuntimeFactory.js +73 -0
  21. package/bin/agent/local/AgentRuntimeFactory.js.map +1 -0
  22. package/bin/{runtime/host → agent/local}/ProjectSetup.d.ts +1 -1
  23. package/bin/agent/local/ProjectSetup.d.ts.map +1 -0
  24. package/bin/{runtime/host → agent/local}/ProjectSetup.js +1 -1
  25. package/bin/agent/local/ProjectSetup.js.map +1 -0
  26. package/bin/agent/local/services/AgentAssemblyService.d.ts +112 -0
  27. package/bin/agent/local/services/AgentAssemblyService.d.ts.map +1 -0
  28. package/bin/agent/local/services/AgentAssemblyService.js +135 -0
  29. package/bin/agent/local/services/AgentAssemblyService.js.map +1 -0
  30. package/bin/agent/local/services/AgentLifecycleService.d.ts +59 -0
  31. package/bin/agent/local/services/AgentLifecycleService.d.ts.map +1 -0
  32. package/bin/agent/local/services/AgentLifecycleService.js +136 -0
  33. package/bin/agent/local/services/AgentLifecycleService.js.map +1 -0
  34. package/bin/agent/local/services/AgentSessionManager.d.ts +106 -0
  35. package/bin/agent/local/services/AgentSessionManager.d.ts.map +1 -0
  36. package/bin/agent/local/services/AgentSessionManager.js +182 -0
  37. package/bin/agent/local/services/AgentSessionManager.js.map +1 -0
  38. package/bin/agent/{RemoteAgent.d.ts → remote/RemoteAgent.d.ts} +3 -3
  39. package/bin/agent/remote/RemoteAgent.d.ts.map +1 -0
  40. package/bin/agent/remote/RemoteAgent.js +58 -0
  41. package/bin/agent/remote/RemoteAgent.js.map +1 -0
  42. package/bin/agent/remote/RemoteSession.d.ts +62 -0
  43. package/bin/agent/remote/RemoteSession.d.ts.map +1 -0
  44. package/bin/agent/remote/RemoteSession.js +225 -0
  45. package/bin/agent/remote/RemoteSession.js.map +1 -0
  46. package/bin/agent/remote/RemoteTransport.d.ts +52 -0
  47. package/bin/agent/remote/RemoteTransport.d.ts.map +1 -0
  48. package/bin/agent/remote/RemoteTransport.js +9 -0
  49. package/bin/agent/remote/RemoteTransport.js.map +1 -0
  50. package/bin/agent/remote/TransportFactory.d.ts +13 -0
  51. package/bin/agent/remote/TransportFactory.d.ts.map +1 -0
  52. package/bin/agent/remote/TransportFactory.js +22 -0
  53. package/bin/agent/remote/TransportFactory.js.map +1 -0
  54. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +35 -0
  55. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -0
  56. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +259 -0
  57. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -0
  58. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +34 -0
  59. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -0
  60. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +66 -0
  61. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +1 -0
  62. package/bin/executor/Executor.d.ts +7 -20
  63. package/bin/executor/Executor.d.ts.map +1 -1
  64. package/bin/executor/Executor.js +77 -348
  65. package/bin/executor/Executor.js.map +1 -1
  66. package/bin/executor/SessionRunScope.d.ts +18 -34
  67. package/bin/executor/SessionRunScope.d.ts.map +1 -1
  68. package/bin/executor/SessionRunScope.js +42 -28
  69. package/bin/executor/SessionRunScope.js.map +1 -1
  70. package/bin/executor/composer/context/LocalSessionContextComposer.d.ts +5 -3
  71. package/bin/executor/composer/context/LocalSessionContextComposer.d.ts.map +1 -1
  72. package/bin/executor/composer/context/LocalSessionContextComposer.js +11 -18
  73. package/bin/executor/composer/context/LocalSessionContextComposer.js.map +1 -1
  74. package/bin/executor/composer/context/SessionContextComposer.d.ts +8 -3
  75. package/bin/executor/composer/context/SessionContextComposer.d.ts.map +1 -1
  76. package/bin/executor/composer/history/SessionHistoryWriter.js +2 -2
  77. package/bin/executor/composer/history/SessionHistoryWriter.js.map +1 -1
  78. package/bin/executor/composer/system/SessionSystemComposer.d.ts +2 -1
  79. package/bin/executor/composer/system/SessionSystemComposer.d.ts.map +1 -1
  80. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts +2 -1
  81. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts.map +1 -1
  82. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js +2 -4
  83. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js.map +1 -1
  84. package/bin/executor/core-engine/CoreEngineRunner.d.ts +62 -0
  85. package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -0
  86. package/bin/executor/core-engine/CoreEngineRunner.js +309 -0
  87. package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -0
  88. package/bin/executor/core-engine/CoreEngineUiStreamCollector.d.ts +5 -0
  89. package/bin/executor/core-engine/CoreEngineUiStreamCollector.d.ts.map +1 -1
  90. package/bin/executor/core-engine/CoreEngineUiStreamCollector.js +2 -4
  91. package/bin/executor/core-engine/CoreEngineUiStreamCollector.js.map +1 -1
  92. package/bin/executor/messages/AssistantResultPersistence.d.ts +3 -3
  93. package/bin/executor/messages/AssistantResultPersistence.d.ts.map +1 -1
  94. package/bin/executor/messages/AssistantResultPersistence.js +2 -6
  95. package/bin/executor/messages/AssistantResultPersistence.js.map +1 -1
  96. package/bin/executor/messages/SessionStepEventMapper.d.ts +7 -8
  97. package/bin/executor/messages/SessionStepEventMapper.d.ts.map +1 -1
  98. package/bin/executor/messages/SessionStepEventMapper.js +55 -86
  99. package/bin/executor/messages/SessionStepEventMapper.js.map +1 -1
  100. package/bin/executor/messages/UserVisibleText.d.ts +2 -10
  101. package/bin/executor/messages/UserVisibleText.d.ts.map +1 -1
  102. package/bin/executor/messages/UserVisibleText.js +3 -16
  103. package/bin/executor/messages/UserVisibleText.js.map +1 -1
  104. package/bin/executor/services/ExecutorInflightService.d.ts +39 -0
  105. package/bin/executor/services/ExecutorInflightService.d.ts.map +1 -0
  106. package/bin/executor/services/ExecutorInflightService.js +75 -0
  107. package/bin/executor/services/ExecutorInflightService.js.map +1 -0
  108. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts +103 -0
  109. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts.map +1 -0
  110. package/bin/executor/services/ExecutorRecoveryPolicy.js +87 -0
  111. package/bin/executor/services/ExecutorRecoveryPolicy.js.map +1 -0
  112. package/bin/executor/store/history/SessionHistoryStore.d.ts +12 -0
  113. package/bin/executor/store/history/SessionHistoryStore.d.ts.map +1 -1
  114. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts +12 -0
  115. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +1 -1
  116. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +145 -8
  117. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +1 -1
  118. package/bin/executor/tools/plugin/PluginToolBridge.d.ts +19 -0
  119. package/bin/executor/tools/plugin/PluginToolBridge.d.ts.map +1 -0
  120. package/bin/executor/tools/plugin/PluginToolBridge.js +143 -0
  121. package/bin/executor/tools/plugin/PluginToolBridge.js.map +1 -0
  122. package/bin/executor/tools/plugin/PluginToolDefinition.d.ts +32 -0
  123. package/bin/executor/tools/plugin/PluginToolDefinition.d.ts.map +1 -0
  124. package/bin/executor/tools/plugin/PluginToolDefinition.js +27 -0
  125. package/bin/executor/tools/plugin/PluginToolDefinition.js.map +1 -0
  126. package/bin/executor/tools/plugin/PluginToolSchemas.d.ts +14 -0
  127. package/bin/executor/tools/plugin/PluginToolSchemas.d.ts.map +1 -0
  128. package/bin/executor/tools/plugin/PluginToolSchemas.js +19 -0
  129. package/bin/executor/tools/plugin/PluginToolSchemas.js.map +1 -0
  130. package/bin/executor/tools/plugin/types/PluginTool.d.ts +39 -0
  131. package/bin/executor/tools/plugin/types/PluginTool.d.ts.map +1 -0
  132. package/bin/executor/tools/plugin/types/PluginTool.js +9 -0
  133. package/bin/executor/tools/plugin/types/PluginTool.js.map +1 -0
  134. package/bin/executor/tools/shell/ShellToolBridge.js +3 -3
  135. package/bin/executor/tools/shell/ShellToolBridge.js.map +1 -1
  136. package/bin/executor/tools/shell/ShellToolFormatting.d.ts +1 -10
  137. package/bin/executor/tools/shell/ShellToolFormatting.d.ts.map +1 -1
  138. package/bin/executor/tools/shell/ShellToolFormatting.js +1 -39
  139. package/bin/executor/tools/shell/ShellToolFormatting.js.map +1 -1
  140. package/bin/executor/types/SessionHistoryPaths.d.ts +4 -0
  141. package/bin/executor/types/SessionHistoryPaths.d.ts.map +1 -1
  142. package/bin/executor/types/SessionRun.d.ts +18 -0
  143. package/bin/executor/types/SessionRun.d.ts.map +1 -1
  144. package/bin/index.d.ts +15 -6
  145. package/bin/index.d.ts.map +1 -1
  146. package/bin/index.js +6 -3
  147. package/bin/index.js.map +1 -1
  148. package/bin/plugin/core/BasePlugin.d.ts +2 -2
  149. package/bin/plugin/core/BasePlugin.d.ts.map +1 -1
  150. package/bin/plugin/core/BasePlugin.js.map +1 -1
  151. package/bin/plugin/core/ImagePlugin.d.ts +56 -0
  152. package/bin/plugin/core/ImagePlugin.d.ts.map +1 -0
  153. package/bin/plugin/core/ImagePlugin.js +109 -0
  154. package/bin/plugin/core/ImagePlugin.js.map +1 -0
  155. package/bin/plugin/core/PluginCommandRequest.d.ts +1 -1
  156. package/bin/plugin/core/PluginCommandRequest.js +1 -1
  157. package/bin/plugin/core/PluginLocalExecution.js +1 -1
  158. package/bin/plugin/core/PluginLocalExecution.js.map +1 -1
  159. package/bin/plugin/core/ProjectConfigStore.d.ts +3 -2
  160. package/bin/plugin/core/ProjectConfigStore.d.ts.map +1 -1
  161. package/bin/plugin/core/ProjectConfigStore.js +3 -4
  162. package/bin/plugin/core/ProjectConfigStore.js.map +1 -1
  163. package/bin/plugin/types/Plugin.d.ts +10 -842
  164. package/bin/plugin/types/Plugin.d.ts.map +1 -1
  165. package/bin/plugin/types/Plugin.js +3 -4
  166. package/bin/plugin/types/Plugin.js.map +1 -1
  167. package/bin/plugin/types/PluginState.d.ts +1 -1
  168. package/bin/plugin/types/PluginState.d.ts.map +1 -1
  169. package/bin/rpc/Client.d.ts +2 -99
  170. package/bin/rpc/Client.d.ts.map +1 -1
  171. package/bin/rpc/Client.js +0 -46
  172. package/bin/rpc/Client.js.map +1 -1
  173. package/bin/rpc/Server.d.ts +5 -21
  174. package/bin/rpc/Server.d.ts.map +1 -1
  175. package/bin/rpc/Server.js +30 -315
  176. package/bin/rpc/Server.js.map +1 -1
  177. package/bin/rpc/server/InternalHandlers.d.ts +21 -0
  178. package/bin/rpc/server/InternalHandlers.d.ts.map +1 -0
  179. package/bin/rpc/server/InternalHandlers.js +190 -0
  180. package/bin/rpc/server/InternalHandlers.js.map +1 -0
  181. package/bin/rpc/server/RequestDispatcher.d.ts +27 -0
  182. package/bin/rpc/server/RequestDispatcher.d.ts.map +1 -0
  183. package/bin/rpc/server/RequestDispatcher.js +38 -0
  184. package/bin/rpc/server/RequestDispatcher.js.map +1 -0
  185. package/bin/rpc/server/SdkSessionHandlers.d.ts +25 -0
  186. package/bin/rpc/server/SdkSessionHandlers.d.ts.map +1 -0
  187. package/bin/rpc/server/SdkSessionHandlers.js +86 -0
  188. package/bin/rpc/server/SdkSessionHandlers.js.map +1 -0
  189. package/bin/rpc/server/ServerTypes.d.ts +59 -0
  190. package/bin/rpc/server/ServerTypes.d.ts.map +1 -0
  191. package/bin/rpc/server/ServerTypes.js +9 -0
  192. package/bin/rpc/server/ServerTypes.js.map +1 -0
  193. package/bin/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.d.ts +1 -1
  194. package/bin/sandbox/MacOsSeatbeltSandbox.d.ts.map +1 -0
  195. package/bin/sandbox/MacOsSeatbeltSandbox.js.map +1 -0
  196. package/bin/{runtime/sandbox → sandbox}/SandboxConfigResolver.d.ts +2 -2
  197. package/bin/sandbox/SandboxConfigResolver.d.ts.map +1 -0
  198. package/bin/sandbox/SandboxConfigResolver.js.map +1 -0
  199. package/bin/{runtime/sandbox → sandbox}/SandboxRunner.d.ts +2 -2
  200. package/bin/sandbox/SandboxRunner.d.ts.map +1 -0
  201. package/bin/{runtime/sandbox → sandbox}/SandboxRunner.js +2 -2
  202. package/bin/sandbox/SandboxRunner.js.map +1 -0
  203. package/bin/sandbox/types/Sandbox.d.ts.map +1 -0
  204. package/bin/sandbox/types/Sandbox.js.map +1 -0
  205. package/bin/{runtime/sandbox → sandbox}/types/SandboxRuntime.d.ts +2 -2
  206. package/bin/sandbox/types/SandboxRuntime.d.ts.map +1 -0
  207. package/bin/sandbox/types/SandboxRuntime.js.map +1 -0
  208. package/bin/session/Session.d.ts +14 -83
  209. package/bin/session/Session.d.ts.map +1 -1
  210. package/bin/session/Session.js +140 -362
  211. package/bin/session/Session.js.map +1 -1
  212. package/bin/session/SessionSystemBuilder.d.ts +2 -1
  213. package/bin/session/SessionSystemBuilder.d.ts.map +1 -1
  214. package/bin/session/SessionSystemBuilder.js +2 -3
  215. package/bin/session/SessionSystemBuilder.js.map +1 -1
  216. package/bin/session/browse/Browse.d.ts +1 -1
  217. package/bin/session/browse/Browse.d.ts.map +1 -1
  218. package/bin/session/browse/Browse.js +28 -13
  219. package/bin/session/browse/Browse.js.map +1 -1
  220. package/bin/session/index.d.ts +1 -1
  221. package/bin/session/index.d.ts.map +1 -1
  222. package/bin/session/index.js +1 -1
  223. package/bin/session/index.js.map +1 -1
  224. package/bin/session/services/SessionStateService.d.ts +132 -0
  225. package/bin/session/services/SessionStateService.d.ts.map +1 -0
  226. package/bin/session/services/SessionStateService.js +242 -0
  227. package/bin/session/services/SessionStateService.js.map +1 -0
  228. package/bin/session/services/SessionTurnService.d.ts +66 -0
  229. package/bin/session/services/SessionTurnService.d.ts.map +1 -0
  230. package/bin/session/services/SessionTurnService.js +137 -0
  231. package/bin/session/services/SessionTurnService.js.map +1 -0
  232. package/bin/session/services/SessionViewService.d.ts +105 -0
  233. package/bin/session/services/SessionViewService.d.ts.map +1 -0
  234. package/bin/session/services/SessionViewService.js +184 -0
  235. package/bin/session/services/SessionViewService.js.map +1 -0
  236. package/bin/session/storage/Paths.d.ts +9 -0
  237. package/bin/session/storage/Paths.d.ts.map +1 -1
  238. package/bin/session/storage/Paths.js +11 -0
  239. package/bin/session/storage/Paths.js.map +1 -1
  240. package/bin/types/agent/AgentOptions.d.ts +152 -0
  241. package/bin/types/agent/AgentOptions.d.ts.map +1 -0
  242. package/bin/types/agent/AgentOptions.js +9 -0
  243. package/bin/types/agent/AgentOptions.js.map +1 -0
  244. package/bin/types/{runtime/host/AgentHost.d.ts → agent/AgentRuntimeAssembly.d.ts} +4 -4
  245. package/bin/types/agent/AgentRuntimeAssembly.d.ts.map +1 -0
  246. package/bin/types/{runtime/host/AgentHost.js → agent/AgentRuntimeAssembly.js} +3 -3
  247. package/bin/types/agent/AgentRuntimeAssembly.js.map +1 -0
  248. package/bin/types/agent/AgentTypes.d.ts +10 -613
  249. package/bin/types/agent/AgentTypes.d.ts.map +1 -1
  250. package/bin/types/agent/AgentTypes.js +4 -4
  251. package/bin/types/agent/RemoteAgentOptions.d.ts +28 -0
  252. package/bin/types/agent/RemoteAgentOptions.d.ts.map +1 -0
  253. package/bin/types/agent/RemoteAgentOptions.js +9 -0
  254. package/bin/types/agent/RemoteAgentOptions.js.map +1 -0
  255. package/bin/types/agent/SessionActor.d.ts +60 -0
  256. package/bin/types/agent/SessionActor.d.ts.map +1 -0
  257. package/bin/types/agent/SessionActor.js +9 -0
  258. package/bin/types/agent/SessionActor.js.map +1 -0
  259. package/bin/types/agent/SessionTypes.d.ts +312 -0
  260. package/bin/types/agent/SessionTypes.d.ts.map +1 -0
  261. package/bin/types/agent/SessionTypes.js +9 -0
  262. package/bin/types/agent/SessionTypes.js.map +1 -0
  263. package/bin/types/config/DowncityConfig.d.ts +1 -1
  264. package/bin/types/config/DowncityConfig.d.ts.map +1 -1
  265. package/bin/types/executor/SessionRunContext.d.ts +66 -0
  266. package/bin/types/executor/SessionRunContext.d.ts.map +1 -0
  267. package/bin/types/executor/SessionRunContext.js +10 -0
  268. package/bin/types/executor/SessionRunContext.js.map +1 -0
  269. package/bin/types/{runtime/host → platform}/Store.d.ts +1 -1
  270. package/bin/types/platform/Store.d.ts.map +1 -0
  271. package/bin/types/{runtime/host → platform}/Store.js +1 -1
  272. package/bin/types/platform/Store.js.map +1 -0
  273. package/bin/types/plugin/ImagePlugin.d.ts +94 -0
  274. package/bin/types/plugin/ImagePlugin.d.ts.map +1 -0
  275. package/bin/types/plugin/ImagePlugin.js +10 -0
  276. package/bin/types/plugin/ImagePlugin.js.map +1 -0
  277. package/bin/types/plugin/PluginAction.d.ts +119 -0
  278. package/bin/types/plugin/PluginAction.d.ts.map +1 -0
  279. package/bin/types/plugin/PluginAction.js +9 -0
  280. package/bin/types/plugin/PluginAction.js.map +1 -0
  281. package/bin/types/plugin/PluginCommand.d.ts +80 -0
  282. package/bin/types/plugin/PluginCommand.d.ts.map +1 -0
  283. package/bin/types/plugin/PluginCommand.js +9 -0
  284. package/bin/types/plugin/PluginCommand.js.map +1 -0
  285. package/bin/types/plugin/PluginDefinition.d.ts +57 -0
  286. package/bin/types/plugin/PluginDefinition.d.ts.map +1 -0
  287. package/bin/types/plugin/PluginDefinition.js +9 -0
  288. package/bin/types/plugin/PluginDefinition.js.map +1 -0
  289. package/bin/types/plugin/PluginHttp.d.ts +34 -0
  290. package/bin/types/plugin/PluginHttp.d.ts.map +1 -0
  291. package/bin/types/plugin/PluginHttp.js +9 -0
  292. package/bin/types/plugin/PluginHttp.js.map +1 -0
  293. package/bin/types/plugin/PluginRuntime.d.ts +148 -0
  294. package/bin/types/plugin/PluginRuntime.d.ts.map +1 -0
  295. package/bin/types/plugin/PluginRuntime.js +9 -0
  296. package/bin/types/plugin/PluginRuntime.js.map +1 -0
  297. package/bin/types/plugin/PluginSetup.d.ts +133 -0
  298. package/bin/types/plugin/PluginSetup.d.ts.map +1 -0
  299. package/bin/types/plugin/PluginSetup.js +9 -0
  300. package/bin/types/plugin/PluginSetup.js.map +1 -0
  301. package/bin/types/plugin/PluginState.d.ts +69 -0
  302. package/bin/types/plugin/PluginState.d.ts.map +1 -0
  303. package/bin/types/plugin/PluginState.js +9 -0
  304. package/bin/types/plugin/PluginState.js.map +1 -0
  305. package/bin/types/rpc/RpcProtocol.d.ts +323 -0
  306. package/bin/types/rpc/RpcProtocol.d.ts.map +1 -0
  307. package/bin/types/rpc/RpcProtocol.js +10 -0
  308. package/bin/types/rpc/RpcProtocol.js.map +1 -0
  309. package/bin/types/runtime/agent/AgentContext.d.ts +1 -1
  310. package/bin/types/runtime/agent/AgentContext.d.ts.map +1 -1
  311. package/bin/types/runtime/agent/AgentRuntime.d.ts +1 -1
  312. package/bin/types/runtime/agent/AgentRuntime.d.ts.map +1 -1
  313. package/bin/types/session/SessionComposerOptions.d.ts +90 -0
  314. package/bin/types/session/SessionComposerOptions.d.ts.map +1 -0
  315. package/bin/types/session/SessionComposerOptions.js +10 -0
  316. package/bin/types/session/SessionComposerOptions.js.map +1 -0
  317. package/bin/types/session/SessionLocalState.d.ts +35 -0
  318. package/bin/types/session/SessionLocalState.d.ts.map +1 -0
  319. package/bin/types/session/SessionLocalState.js +10 -0
  320. package/bin/types/session/SessionLocalState.js.map +1 -0
  321. package/bin/types/session/SessionOptions.d.ts +85 -0
  322. package/bin/types/session/SessionOptions.d.ts.map +1 -0
  323. package/bin/types/session/SessionOptions.js +10 -0
  324. package/bin/types/session/SessionOptions.js.map +1 -0
  325. package/package.json +2 -2
  326. package/scripts/session-history-inflight.test.mjs +146 -0
  327. package/src/agent/local/Agent.ts +197 -0
  328. package/src/agent/local/AgentInstructions.ts +68 -0
  329. package/src/agent/local/AgentPluginFactory.ts +83 -0
  330. package/src/{runtime/host/AgentHostRuntime.ts → agent/local/AgentRuntimeAssembly.ts} +2 -2
  331. package/src/agent/local/AgentRuntimeFactory.ts +152 -0
  332. package/src/{runtime/host → agent/local}/ProjectSetup.ts +1 -1
  333. package/src/agent/local/services/AgentAssemblyService.ts +268 -0
  334. package/src/agent/local/services/AgentLifecycleService.ts +187 -0
  335. package/src/agent/local/services/AgentSessionManager.ts +291 -0
  336. package/src/agent/remote/RemoteAgent.ts +76 -0
  337. package/src/agent/remote/RemoteSession.ts +287 -0
  338. package/src/agent/remote/RemoteTransport.ts +71 -0
  339. package/src/agent/remote/TransportFactory.ts +29 -0
  340. package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +347 -0
  341. package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +107 -0
  342. package/src/executor/Executor.ts +107 -426
  343. package/src/executor/README.md +4 -4
  344. package/src/executor/SessionRunScope.ts +47 -71
  345. package/src/executor/composer/context/LocalSessionContextComposer.ts +24 -20
  346. package/src/executor/composer/context/SessionContextComposer.ts +13 -3
  347. package/src/executor/composer/history/SessionHistoryWriter.ts +2 -2
  348. package/src/executor/composer/system/SessionSystemComposer.ts +2 -1
  349. package/src/executor/composer/system/default/DefaultSessionSystemComposer.ts +3 -4
  350. package/src/executor/core-engine/CoreEngineRunner.ts +433 -0
  351. package/src/executor/core-engine/CoreEngineUiStreamCollector.ts +7 -5
  352. package/src/executor/messages/AssistantResultPersistence.ts +4 -12
  353. package/src/executor/messages/SessionStepEventMapper.ts +59 -101
  354. package/src/executor/messages/UserVisibleText.ts +3 -18
  355. package/src/executor/services/ExecutorInflightService.ts +101 -0
  356. package/src/executor/services/ExecutorRecoveryPolicy.ts +213 -0
  357. package/src/executor/store/history/SessionHistoryStore.ts +15 -0
  358. package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +164 -11
  359. package/src/executor/tools/plugin/PluginToolBridge.ts +161 -0
  360. package/src/executor/tools/plugin/PluginToolDefinition.ts +32 -0
  361. package/src/executor/tools/plugin/PluginToolSchemas.ts +20 -0
  362. package/src/executor/tools/plugin/types/PluginTool.ts +41 -0
  363. package/src/executor/tools/shell/ShellToolBridge.ts +3 -3
  364. package/src/executor/tools/shell/ShellToolFormatting.ts +1 -50
  365. package/src/executor/types/SessionHistoryPaths.ts +5 -0
  366. package/src/executor/types/SessionRun.ts +20 -0
  367. package/src/index.ts +38 -5
  368. package/src/plugin/core/BasePlugin.ts +2 -2
  369. package/src/plugin/core/ImagePlugin.ts +128 -0
  370. package/src/plugin/core/PluginCommandRequest.ts +1 -1
  371. package/src/plugin/core/PluginLocalExecution.ts +1 -1
  372. package/src/plugin/core/ProjectConfigStore.ts +4 -4
  373. package/src/plugin/types/Plugin.ts +54 -913
  374. package/src/plugin/types/PluginState.ts +1 -1
  375. package/src/rpc/Client.ts +16 -322
  376. package/src/rpc/Server.ts +39 -565
  377. package/src/rpc/server/InternalHandlers.ts +230 -0
  378. package/src/rpc/server/RequestDispatcher.ts +67 -0
  379. package/src/rpc/server/SdkSessionHandlers.ts +106 -0
  380. package/src/rpc/server/ServerTypes.ts +65 -0
  381. package/src/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.ts +1 -1
  382. package/src/{runtime/sandbox → sandbox}/SandboxConfigResolver.ts +1 -1
  383. package/src/{runtime/sandbox → sandbox}/SandboxRunner.ts +3 -3
  384. package/src/{runtime/sandbox → sandbox}/types/SandboxRuntime.ts +2 -2
  385. package/src/session/Session.ts +184 -485
  386. package/src/session/SessionSystemBuilder.ts +3 -3
  387. package/src/session/browse/Browse.ts +29 -10
  388. package/src/session/index.ts +1 -0
  389. package/src/session/services/SessionStateService.ts +341 -0
  390. package/src/session/services/SessionTurnService.ts +202 -0
  391. package/src/session/services/SessionViewService.ts +301 -0
  392. package/src/session/storage/Paths.ts +19 -0
  393. package/src/types/agent/AgentOptions.ts +172 -0
  394. package/src/types/{runtime/host/AgentHost.ts → agent/AgentRuntimeAssembly.ts} +2 -2
  395. package/src/types/agent/AgentTypes.ts +47 -709
  396. package/src/types/agent/RemoteAgentOptions.ts +29 -0
  397. package/src/types/agent/SessionActor.ts +88 -0
  398. package/src/types/agent/SessionTypes.ts +335 -0
  399. package/src/types/config/DowncityConfig.ts +1 -1
  400. package/src/types/executor/SessionRunContext.ts +76 -0
  401. package/src/types/{runtime/host → platform}/Store.ts +1 -1
  402. package/src/types/plugin/ImagePlugin.ts +103 -0
  403. package/src/types/plugin/PluginAction.ts +133 -0
  404. package/src/types/plugin/PluginCommand.ts +89 -0
  405. package/src/types/plugin/PluginDefinition.ts +74 -0
  406. package/src/types/plugin/PluginHttp.ts +36 -0
  407. package/src/types/plugin/PluginRuntime.ts +169 -0
  408. package/src/types/plugin/PluginSetup.ts +138 -0
  409. package/src/types/plugin/PluginState.ts +82 -0
  410. package/src/types/rpc/RpcProtocol.ts +361 -0
  411. package/src/types/runtime/agent/AgentContext.ts +1 -1
  412. package/src/types/runtime/agent/AgentRuntime.ts +1 -1
  413. package/src/types/session/SessionComposerOptions.ts +107 -0
  414. package/src/types/session/SessionLocalState.ts +40 -0
  415. package/src/types/session/SessionOptions.ts +99 -0
  416. package/tsconfig.tsbuildinfo +1 -1
  417. package/bin/agent/Agent.d.ts +0 -223
  418. package/bin/agent/Agent.d.ts.map +0 -1
  419. package/bin/agent/Agent.js +0 -627
  420. package/bin/agent/Agent.js.map +0 -1
  421. package/bin/agent/RemoteAgent.d.ts.map +0 -1
  422. package/bin/agent/RemoteAgent.js +0 -585
  423. package/bin/agent/RemoteAgent.js.map +0 -1
  424. package/bin/runtime/auth/AuthEnv.d.ts +0 -36
  425. package/bin/runtime/auth/AuthEnv.d.ts.map +0 -1
  426. package/bin/runtime/auth/AuthEnv.js +0 -54
  427. package/bin/runtime/auth/AuthEnv.js.map +0 -1
  428. package/bin/runtime/auth/CliAuthStateStore.d.ts +0 -29
  429. package/bin/runtime/auth/CliAuthStateStore.d.ts.map +0 -1
  430. package/bin/runtime/auth/CliAuthStateStore.js +0 -26
  431. package/bin/runtime/auth/CliAuthStateStore.js.map +0 -1
  432. package/bin/runtime/control/AuthControlService.d.ts +0 -34
  433. package/bin/runtime/control/AuthControlService.d.ts.map +0 -1
  434. package/bin/runtime/control/AuthControlService.js +0 -129
  435. package/bin/runtime/control/AuthControlService.js.map +0 -1
  436. package/bin/runtime/control/CommonHelpers.d.ts +0 -36
  437. package/bin/runtime/control/CommonHelpers.d.ts.map +0 -1
  438. package/bin/runtime/control/CommonHelpers.js +0 -63
  439. package/bin/runtime/control/CommonHelpers.js.map +0 -1
  440. package/bin/runtime/control/ExecuteBySession.d.ts +0 -30
  441. package/bin/runtime/control/ExecuteBySession.d.ts.map +0 -1
  442. package/bin/runtime/control/ExecuteBySession.js +0 -41
  443. package/bin/runtime/control/ExecuteBySession.js.map +0 -1
  444. package/bin/runtime/control/ExecuteInput.d.ts +0 -18
  445. package/bin/runtime/control/ExecuteInput.d.ts.map +0 -1
  446. package/bin/runtime/control/ExecuteInput.js +0 -201
  447. package/bin/runtime/control/ExecuteInput.js.map +0 -1
  448. package/bin/runtime/control/Helpers.d.ts +0 -13
  449. package/bin/runtime/control/Helpers.d.ts.map +0 -1
  450. package/bin/runtime/control/Helpers.js +0 -13
  451. package/bin/runtime/control/Helpers.js.map +0 -1
  452. package/bin/runtime/control/MessageTimeline.d.ts +0 -22
  453. package/bin/runtime/control/MessageTimeline.d.ts.map +0 -1
  454. package/bin/runtime/control/MessageTimeline.js +0 -226
  455. package/bin/runtime/control/MessageTimeline.js.map +0 -1
  456. package/bin/runtime/control/SessionSummaryStore.d.ts +0 -20
  457. package/bin/runtime/control/SessionSummaryStore.d.ts.map +0 -1
  458. package/bin/runtime/control/SessionSummaryStore.js +0 -50
  459. package/bin/runtime/control/SessionSummaryStore.js.map +0 -1
  460. package/bin/runtime/control/TaskStore.d.ts +0 -33
  461. package/bin/runtime/control/TaskStore.d.ts.map +0 -1
  462. package/bin/runtime/control/TaskStore.js +0 -175
  463. package/bin/runtime/control/TaskStore.js.map +0 -1
  464. package/bin/runtime/control/types/AuthControl.d.ts +0 -30
  465. package/bin/runtime/control/types/AuthControl.d.ts.map +0 -1
  466. package/bin/runtime/control/types/AuthControl.js +0 -9
  467. package/bin/runtime/control/types/AuthControl.js.map +0 -1
  468. package/bin/runtime/control/types/ControlSessionExecute.d.ts +0 -85
  469. package/bin/runtime/control/types/ControlSessionExecute.d.ts.map +0 -1
  470. package/bin/runtime/control/types/ControlSessionExecute.js +0 -9
  471. package/bin/runtime/control/types/ControlSessionExecute.js.map +0 -1
  472. package/bin/runtime/control/types/ControlViewData.d.ts +0 -320
  473. package/bin/runtime/control/types/ControlViewData.d.ts.map +0 -1
  474. package/bin/runtime/control/types/ControlViewData.js +0 -9
  475. package/bin/runtime/control/types/ControlViewData.js.map +0 -1
  476. package/bin/runtime/host/AgentHostRuntime.d.ts.map +0 -1
  477. package/bin/runtime/host/AgentHostRuntime.js.map +0 -1
  478. package/bin/runtime/host/ProjectSetup.d.ts.map +0 -1
  479. package/bin/runtime/host/ProjectSetup.js.map +0 -1
  480. package/bin/runtime/sandbox/MacOsSeatbeltSandbox.d.ts.map +0 -1
  481. package/bin/runtime/sandbox/MacOsSeatbeltSandbox.js.map +0 -1
  482. package/bin/runtime/sandbox/SandboxConfigResolver.d.ts.map +0 -1
  483. package/bin/runtime/sandbox/SandboxConfigResolver.js.map +0 -1
  484. package/bin/runtime/sandbox/SandboxRunner.d.ts.map +0 -1
  485. package/bin/runtime/sandbox/SandboxRunner.js.map +0 -1
  486. package/bin/runtime/sandbox/types/Sandbox.d.ts.map +0 -1
  487. package/bin/runtime/sandbox/types/Sandbox.js.map +0 -1
  488. package/bin/runtime/sandbox/types/SandboxRuntime.d.ts.map +0 -1
  489. package/bin/runtime/sandbox/types/SandboxRuntime.js.map +0 -1
  490. package/bin/types/runtime/host/AgentHost.d.ts.map +0 -1
  491. package/bin/types/runtime/host/AgentHost.js.map +0 -1
  492. package/bin/types/runtime/host/Store.d.ts.map +0 -1
  493. package/bin/types/runtime/host/Store.js.map +0 -1
  494. package/src/agent/Agent.ts +0 -734
  495. package/src/agent/RemoteAgent.ts +0 -834
  496. package/src/runtime/auth/AuthEnv.ts +0 -62
  497. package/src/runtime/auth/CliAuthStateStore.ts +0 -46
  498. package/src/runtime/control/AuthControlService.ts +0 -169
  499. package/src/runtime/control/CommonHelpers.ts +0 -69
  500. package/src/runtime/control/ExecuteBySession.ts +0 -52
  501. package/src/runtime/control/ExecuteInput.ts +0 -236
  502. package/src/runtime/control/Helpers.ts +0 -22
  503. package/src/runtime/control/MessageTimeline.ts +0 -269
  504. package/src/runtime/control/SessionSummaryStore.ts +0 -72
  505. package/src/runtime/control/TaskStore.ts +0 -242
  506. package/src/runtime/control/types/AuthControl.ts +0 -34
  507. package/src/runtime/control/types/ControlSessionExecute.ts +0 -99
  508. package/src/runtime/control/types/ControlViewData.ts +0 -392
  509. /package/bin/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.js +0 -0
  510. /package/bin/{runtime/sandbox → sandbox}/SandboxConfigResolver.js +0 -0
  511. /package/bin/{runtime/sandbox → sandbox}/types/Sandbox.d.ts +0 -0
  512. /package/bin/{runtime/sandbox → sandbox}/types/Sandbox.js +0 -0
  513. /package/bin/{runtime/sandbox → sandbox}/types/SandboxRuntime.js +0 -0
  514. /package/src/{runtime/sandbox → sandbox}/types/Sandbox.ts +0 -0
@@ -1,14 +1,12 @@
1
1
  /**
2
- * SessionStepEventMapper:把单个 step 结果转成按顺序可持久化的 session 消息。
2
+ * SessionStepEventMapper:把单个 step 结果转成 assistant parts。
3
3
  *
4
4
  * 关键点(中文)
5
- * - 工具结果使用 AI SDK v6 UI tool part 格式,避免历史重放时丢失 tool result
6
- * - 只做 best-effort 提取,不依赖 provider 私有结构。
7
- * - 输出仍然是标准 SessionMessageV1,供 SessionHistoryWriter 直接落盘。
5
+ * - 运行过程仍然要持久化,但收口到同一条 assistant UIMessage
6
+ * - 工具结果使用 AI SDK v6 UI tool part 格式,和官方 UIMessage 语义保持一致。
7
+ * - 每个 step 前插入 `step-start`,便于在 UI 中保留多 step 边界。
8
8
  */
9
9
 
10
- import { generateId } from "@/utils/Id.js";
11
- import type { JsonObject } from "@/types/common/Json.js";
12
10
  import type { SessionMessageV1 } from "@/executor/types/SessionMessages.js";
13
11
 
14
12
  type UnknownRecord = Record<string, unknown>;
@@ -64,6 +62,21 @@ function resolveToolResultPayload(value: unknown): unknown {
64
62
  return undefined;
65
63
  }
66
64
 
65
+ function resolveToolResultErrorText(value: unknown): string | undefined {
66
+ const record = toRecord(value);
67
+ if (!record) return undefined;
68
+ if (typeof record.errorText === "string" && record.errorText.trim()) {
69
+ return record.errorText.trim();
70
+ }
71
+ if (typeof record.error === "string" && record.error.trim()) {
72
+ return record.error.trim();
73
+ }
74
+ if (record.error instanceof Error && record.error.message.trim()) {
75
+ return record.error.message.trim();
76
+ }
77
+ return undefined;
78
+ }
79
+
67
80
  function mapToolResultsByCallId(toolResults: unknown[]): Map<string, unknown> {
68
81
  const out = new Map<string, unknown>();
69
82
  for (const toolResult of toolResults) {
@@ -91,53 +104,16 @@ function toDataPartType(type: string): string {
91
104
  return `data-acp-${type.replace(/_/g, "-")}`;
92
105
  }
93
106
 
94
- function buildMetadata(params: {
95
- sessionId: string;
96
- ts: number;
97
- extra?: JsonObject;
98
- }): SessionMessageV1["metadata"] {
99
- return {
100
- v: 1,
101
- ts: params.ts,
102
- sessionId: params.sessionId,
103
- source: "egress",
104
- kind: "normal",
105
- ...(params.extra ? { extra: params.extra } : {}),
106
- };
107
- }
108
-
109
- function buildAssistantStepMessage(params: {
110
- sessionId: string;
111
- ts: number;
112
- part: Record<string, unknown>;
113
- extra: JsonObject;
114
- }): SessionMessageV1 {
115
- return {
116
- id: `a:${params.sessionId}:${generateId()}`,
117
- role: "assistant",
118
- metadata: buildMetadata({
119
- sessionId: params.sessionId,
120
- ts: params.ts,
121
- extra: params.extra,
122
- }),
123
- parts: [params.part as SessionMessageV1["parts"][number]],
124
- };
125
- }
126
-
127
107
  /**
128
- * 从 stepResult 提取按顺序落盘的 session assistant 消息。
108
+ * 从 stepResult 提取按顺序写入同一条 assistant message 的 parts。
129
109
  */
130
- export function buildSessionStepEventMessages(params: {
131
- sessionId: string;
110
+ export function buildSessionStepParts(params: {
132
111
  stepIndex: number;
133
112
  stepResult?: unknown;
134
113
  text: string;
135
114
  visibility?: "visible" | "internal";
136
- }): SessionMessageV1[] {
137
- const sessionId = String(params.sessionId || "").trim();
138
- if (!sessionId) return [];
139
-
140
- const out: SessionMessageV1[] = [];
115
+ }): SessionMessageV1["parts"] {
116
+ const out: SessionMessageV1["parts"] = [];
141
117
  const stepRecord = toRecord(params.stepResult) || {};
142
118
  const toolCalls = Array.isArray(stepRecord.toolCalls) ? stepRecord.toolCalls : [];
143
119
  const toolResults = Array.isArray(stepRecord.toolResults)
@@ -147,34 +123,29 @@ export function buildSessionStepEventMessages(params: {
147
123
  const acpEvents = Array.isArray(stepRecord.acpEvents)
148
124
  ? stepRecord.acpEvents
149
125
  : [];
150
- const baseTs = Date.now();
151
- let sequence = 0;
152
126
 
153
127
  const text = String(params.text || "").trim();
128
+ const has_structured_output =
129
+ Boolean(text) || toolCalls.length > 0 || acpEvents.length > 0;
130
+ if (!has_structured_output) return [];
131
+
132
+ out.push({ type: "step-start" });
133
+
154
134
  if (text) {
155
135
  const isInternal = params.visibility === "internal";
156
136
  out.push(
157
- buildAssistantStepMessage({
158
- sessionId,
159
- ts: baseTs + sequence,
160
- part: isInternal
161
- ? {
162
- type: "reasoning",
163
- text,
164
- state: "done",
165
- }
166
- : {
167
- type: "text",
168
- text,
169
- },
170
- extra: {
171
- internal: isInternal ? "assistant_step_reasoning" : "assistant_step_text",
172
- stepIndex: params.stepIndex,
173
- persistedBy: "session_store_run",
174
- },
175
- }),
137
+ isInternal
138
+ ? {
139
+ type: "reasoning",
140
+ text,
141
+ state: "done",
142
+ }
143
+ : {
144
+ type: "text",
145
+ text,
146
+ state: "done",
147
+ },
176
148
  );
177
- sequence += 1;
178
149
  }
179
150
 
180
151
  for (let index = 0; index < toolCalls.length; index += 1) {
@@ -185,25 +156,23 @@ export function buildSessionStepEventMessages(params: {
185
156
  const toolResult = toolCallId ? toolResultsByCallId.get(toolCallId) : undefined;
186
157
  if (!toolResult) continue;
187
158
  const output = resolveToolResultPayload(toolResult);
159
+ const errorText = resolveToolResultErrorText(toolResult);
188
160
  out.push(
189
- buildAssistantStepMessage({
190
- sessionId,
191
- ts: baseTs + sequence,
192
- part: {
193
- type: `tool-${toolName}`,
194
- ...(toolCallId ? { toolCallId } : {}),
195
- ...(input !== undefined ? { input } : {}),
196
- state: "output-available",
197
- output,
198
- },
199
- extra: {
200
- internal: "assistant_step_tool_result",
201
- stepIndex: params.stepIndex,
202
- toolIndex: index + 1,
203
- },
204
- }),
161
+ {
162
+ type: `tool-${toolName}`,
163
+ ...(toolCallId ? { toolCallId } : {}),
164
+ ...(input !== undefined ? { input } : {}),
165
+ ...(errorText
166
+ ? {
167
+ state: "output-error",
168
+ errorText,
169
+ }
170
+ : {
171
+ state: "output-available",
172
+ output,
173
+ }),
174
+ } as SessionMessageV1["parts"][number],
205
175
  );
206
- sequence += 1;
207
176
  }
208
177
 
209
178
  for (let index = 0; index < acpEvents.length; index += 1) {
@@ -211,22 +180,11 @@ export function buildSessionStepEventMessages(params: {
211
180
  const type = resolveAcpEventType(acpEvent);
212
181
  if (!type) continue;
213
182
  out.push(
214
- buildAssistantStepMessage({
215
- sessionId,
216
- ts: baseTs + sequence,
217
- part: {
218
- type: toDataPartType(type),
219
- data: resolveAcpEventData(acpEvent),
220
- },
221
- extra: {
222
- internal: "assistant_step_acp_event",
223
- stepIndex: params.stepIndex,
224
- acpEventType: type,
225
- eventIndex: index + 1,
226
- },
227
- }),
183
+ {
184
+ type: toDataPartType(type),
185
+ data: resolveAcpEventData(acpEvent),
186
+ } as SessionMessageV1["parts"][number],
228
187
  );
229
- sequence += 1;
230
188
  }
231
189
 
232
190
  return out;
@@ -17,29 +17,14 @@ import {
17
17
  * 生成真正应该落盘到 session 的 assistant message。
18
18
  *
19
19
  * 关键点(中文)
20
- * - 没有 step 持久化时,直接保留完整 assistant message
21
- * - 一旦 step 已单独落盘,最终 merged assistant 不再重复写入。
20
+ * - session 正式历史应尽量保留 AI SDK 最终 assistant UIMessage
21
+ * - 运行中 step/tool 的中断恢复由 inflight 快照承担,不再通过跳过最终 message 收口。
22
22
  */
23
23
  export function resolveAssistantMessageForPersistence(
24
24
  message: SessionMessageV1 | null | undefined,
25
25
  ): SessionMessageV1 | null {
26
26
  if (!message || typeof message !== "object") return null;
27
- return hasPersistedAssistantSteps(message) ? null : message;
28
- }
29
-
30
- /**
31
- * 判断 assistant message 是否声明“本轮 step 消息已单独持久化”。
32
- *
33
- * 关键点(中文)
34
- * - 该标记只用于避免在 run 结束时把最终 merged assistant 再重复写入 context。
35
- * - 不影响 channel 发送;只影响 context messages 的最终 append 策略。
36
- */
37
- export function hasPersistedAssistantSteps(
38
- message: SessionMessageV1 | null | undefined,
39
- ): boolean {
40
- const extra = message?.metadata?.extra;
41
- if (!extra || typeof extra !== "object" || Array.isArray(extra)) return false;
42
- return extra.assistantStepMessagesPersisted === true;
27
+ return message;
43
28
  }
44
29
 
45
30
  /**
@@ -0,0 +1,101 @@
1
+ /**
2
+ * ExecutorInflightService:运行中 assistant 快照写入服务。
3
+ *
4
+ * 关键点(中文)
5
+ * - 只负责把 step/tool 增量写入当前 inflight assistant 快照。
6
+ * - 不负责长期 history 组装,不负责主执行循环。
7
+ * - 保持与 SessionHistoryStore 的交互边界清晰,避免 Executor 自身同时承担编排与写入细节。
8
+ */
9
+
10
+ import { generateId } from "@/utils/Id.js";
11
+ import type { SessionHistoryStore } from "@/executor/store/history/SessionHistoryStore.js";
12
+ import type { SessionMessageV1 } from "@/executor/types/SessionMessages.js";
13
+
14
+ interface ExecutorInflightServiceOptions {
15
+ /**
16
+ * 当前 session 标识。
17
+ */
18
+ session_id: string;
19
+
20
+ /**
21
+ * 当前 session 对应的 history 事实源。
22
+ */
23
+ history_store: SessionHistoryStore;
24
+
25
+ /**
26
+ * inflight 更新完成后的异步通知。
27
+ */
28
+ run_after_session_updated_async?: () => Promise<void>;
29
+ }
30
+
31
+ /**
32
+ * 运行中 assistant 快照写入服务。
33
+ */
34
+ export class ExecutorInflightService {
35
+ private readonly session_id: string;
36
+ private readonly history_store: SessionHistoryStore;
37
+ private readonly run_after_session_updated_async?: ExecutorInflightServiceOptions["run_after_session_updated_async"];
38
+
39
+ constructor(options: ExecutorInflightServiceOptions) {
40
+ this.session_id = String(options.session_id || "").trim();
41
+ this.history_store = options.history_store;
42
+ this.run_after_session_updated_async =
43
+ options.run_after_session_updated_async;
44
+
45
+ if (!this.session_id) {
46
+ throw new Error("ExecutorInflightService requires a non-empty session_id");
47
+ }
48
+ }
49
+
50
+ /**
51
+ * 把 step/tool 过程增量写入当前运行中的 assistant 快照。
52
+ */
53
+ async append_assistant_step_parts(
54
+ parts: SessionMessageV1["parts"],
55
+ ): Promise<void> {
56
+ const normalized_parts = Array.isArray(parts)
57
+ ? parts.filter((part) => part && typeof part === "object")
58
+ : [];
59
+ if (normalized_parts.length === 0) return;
60
+
61
+ const current_inflight = await this.history_store.readInflight();
62
+ const next_message: SessionMessageV1 = current_inflight
63
+ ? {
64
+ ...current_inflight,
65
+ metadata: {
66
+ ...(current_inflight.metadata || {
67
+ v: 1 as const,
68
+ ts: Date.now(),
69
+ sessionId: this.session_id,
70
+ }),
71
+ ts: Date.now(),
72
+ sessionId: this.session_id,
73
+ source: "egress",
74
+ kind: "normal",
75
+ },
76
+ parts: [
77
+ ...(Array.isArray(current_inflight.parts)
78
+ ? current_inflight.parts
79
+ : []),
80
+ ...normalized_parts,
81
+ ],
82
+ }
83
+ : {
84
+ id: `a:${this.session_id}:${generateId()}`,
85
+ role: "assistant",
86
+ metadata: {
87
+ v: 1,
88
+ ts: Date.now(),
89
+ sessionId: this.session_id,
90
+ source: "egress",
91
+ kind: "normal",
92
+ },
93
+ parts: normalized_parts,
94
+ };
95
+
96
+ await this.history_store.writeInflight(next_message);
97
+ if (this.run_after_session_updated_async) {
98
+ await this.run_after_session_updated_async();
99
+ }
100
+ }
101
+ }
@@ -0,0 +1,213 @@
1
+ /**
2
+ * ExecutorRecoveryPolicy:执行恢复与重试策略。
3
+ *
4
+ * 关键点(中文)
5
+ * - 统一封装“压缩后重试”和“普通失败兜底”逻辑。
6
+ * - Executor 只负责准备输入与调用策略,不再直接承载重试状态机。
7
+ * - 不改变外部行为,只把异常分流规则集中到一个地方。
8
+ */
9
+
10
+ import type { LanguageModel } from "ai";
11
+ import type { Logger } from "@/utils/logger/Logger.js";
12
+ import type { SessionCompactionComposer } from "@executor/composer/compaction/SessionCompactionComposer.js";
13
+ import type { SessionContextComposer } from "@executor/composer/context/SessionContextComposer.js";
14
+ import type { SessionRunContext } from "@/types/executor/SessionRunContext.js";
15
+ import type {
16
+ SessionExecuteInput,
17
+ SessionRunResult,
18
+ } from "@/executor/types/SessionRun.js";
19
+
20
+ /**
21
+ * 可压缩错误的最大重试次数。
22
+ */
23
+ const MAX_COMPACTION_RETRY_ATTEMPTS = 3;
24
+
25
+ interface ExecutorRecoveryPolicyOptions {
26
+ /**
27
+ * 当前 session 对应的 compaction Composer。
28
+ */
29
+ compaction_composer: SessionCompactionComposer;
30
+
31
+ /**
32
+ * 当前 session 对应的 context Composer。
33
+ */
34
+ context_composer: SessionContextComposer;
35
+
36
+ /**
37
+ * 当前 session 统一日志器。
38
+ */
39
+ logger: Logger;
40
+ }
41
+
42
+ interface ExecutorPrepareRunInput {
43
+ /**
44
+ * 当前轮用户 query。
45
+ */
46
+ query: string;
47
+
48
+ /**
49
+ * 当前轮模型实例。
50
+ */
51
+ model: LanguageModel;
52
+
53
+ /**
54
+ * 当前显式运行上下文。
55
+ */
56
+ run_context: SessionRunContext;
57
+
58
+ /**
59
+ * 当前压缩重试次数。
60
+ */
61
+ retry_count: number;
62
+ }
63
+
64
+ interface ExecutorExecutePreparedRunInput {
65
+ /**
66
+ * 已装配好的执行输入。
67
+ */
68
+ execute_input: SessionExecuteInput;
69
+
70
+ /**
71
+ * 当前轮模型实例。
72
+ */
73
+ model: LanguageModel;
74
+
75
+ /**
76
+ * 当前显式运行上下文。
77
+ */
78
+ run_context: SessionRunContext;
79
+ }
80
+
81
+ interface ExecutorRecoveryRunInput {
82
+ /**
83
+ * 当前轮用户 query。
84
+ */
85
+ query: string;
86
+
87
+ /**
88
+ * 当前轮模型实例。
89
+ */
90
+ model: LanguageModel;
91
+
92
+ /**
93
+ * 当前显式运行上下文。
94
+ */
95
+ run_context: SessionRunContext;
96
+
97
+ /**
98
+ * 运行前装配执行输入。
99
+ */
100
+ prepare_execute_input: (
101
+ input: ExecutorPrepareRunInput,
102
+ ) => Promise<SessionExecuteInput>;
103
+
104
+ /**
105
+ * 执行已装配好的运行输入。
106
+ */
107
+ execute_prepared_run: (
108
+ input: ExecutorExecutePreparedRunInput,
109
+ ) => Promise<SessionRunResult>;
110
+ }
111
+
112
+ /**
113
+ * 执行恢复与重试策略服务。
114
+ */
115
+ export class ExecutorRecoveryPolicy {
116
+ private readonly compaction_composer: SessionCompactionComposer;
117
+ private readonly context_composer: SessionContextComposer;
118
+ private readonly logger: Logger;
119
+ private retry_count = 0;
120
+
121
+ constructor(options: ExecutorRecoveryPolicyOptions) {
122
+ this.compaction_composer = options.compaction_composer;
123
+ this.context_composer = options.context_composer;
124
+ this.logger = options.logger;
125
+ }
126
+
127
+ /**
128
+ * 重置当前 run 级状态。
129
+ */
130
+ reset_run_state(): void {
131
+ this.retry_count = 0;
132
+ }
133
+
134
+ /**
135
+ * 执行一次带恢复策略的 session run。
136
+ */
137
+ async run_with_retry(
138
+ input: ExecutorRecoveryRunInput,
139
+ ): Promise<SessionRunResult> {
140
+ try {
141
+ const execute_input = await input.prepare_execute_input({
142
+ query: input.query,
143
+ model: input.model,
144
+ run_context: input.run_context,
145
+ retry_count: this.retry_count,
146
+ });
147
+ return await input.execute_prepared_run({
148
+ execute_input,
149
+ model: input.model,
150
+ run_context: input.run_context,
151
+ });
152
+ } catch (error) {
153
+ if (this.compaction_composer.shouldCompactOnError(error)) {
154
+ await this.logger.log("info", "[agent] compacting", {
155
+ retryCount: this.retry_count,
156
+ error: String(error),
157
+ });
158
+
159
+ if (this.retry_count < MAX_COMPACTION_RETRY_ATTEMPTS) {
160
+ this.retry_count += 1;
161
+ return await this.run_with_retry(input);
162
+ }
163
+
164
+ return this.build_failure_result({
165
+ error_text:
166
+ "Context length exceeded and retries failed. Please resend your question.",
167
+ fallback_text:
168
+ "Context length exceeded and retries failed. Please resend your question.",
169
+ run_context: input.run_context,
170
+ });
171
+ }
172
+
173
+ const error_text = String(error);
174
+ await this.logger.log("error", "Executor execution failed", {
175
+ error: error_text,
176
+ });
177
+ return this.build_failure_result({
178
+ error_text,
179
+ fallback_text: `Execution failed: ${error_text}`,
180
+ run_context: input.run_context,
181
+ });
182
+ }
183
+ }
184
+
185
+ private build_failure_result(input: {
186
+ /**
187
+ * 对外暴露的错误文本。
188
+ */
189
+ error_text: string;
190
+
191
+ /**
192
+ * fallback assistant 消息文本。
193
+ */
194
+ fallback_text: string;
195
+
196
+ /**
197
+ * 当前显式运行上下文。
198
+ */
199
+ run_context: SessionRunContext;
200
+ }): SessionRunResult {
201
+ return {
202
+ success: false,
203
+ error: input.error_text,
204
+ assistantMessage: this.context_composer.buildFallbackAssistantMessage(
205
+ input.fallback_text,
206
+ input.run_context,
207
+ ),
208
+ deferredPersistedUserMessages: [
209
+ ...input.run_context.deferredPersistedUserMessages,
210
+ ],
211
+ };
212
+ }
213
+ }
@@ -63,6 +63,21 @@ export interface SessionHistoryStore {
63
63
  */
64
64
  append(message: SessionMessageV1): Promise<void>;
65
65
 
66
+ /**
67
+ * 读取当前运行中的 assistant 快照。
68
+ */
69
+ readInflight(): Promise<SessionMessageV1 | null>;
70
+
71
+ /**
72
+ * 写入当前运行中的 assistant 快照。
73
+ */
74
+ writeInflight(message: SessionMessageV1): Promise<void>;
75
+
76
+ /**
77
+ * 用最终 assistant 收口 inflight 快照。
78
+ */
79
+ finalizeInflight(message?: SessionMessageV1 | null): Promise<void>;
80
+
66
81
  /**
67
82
  * 读取完整消息历史。
68
83
  */