@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
@@ -12,55 +12,25 @@ import { SessionHistoryWriter } from "@executor/composer/history/SessionHistoryW
12
12
  import type { SessionHistoryComposer } from "@executor/composer/history/SessionHistoryComposer.js";
13
13
  import type { SessionHistoryStore } from "@/executor/store/history/SessionHistoryStore.js";
14
14
  import { withSessionRunScope } from "@executor/SessionRunScope.js";
15
- import type { SessionRunScope } from "@executor/SessionRunScope.js";
16
- import { buildSessionStepEventMessages } from "@executor/messages/SessionStepEventMapper.js";
15
+ import { buildSessionStepParts } from "@executor/messages/SessionStepEventMapper.js";
17
16
  import { JsonlSessionCompactionComposer } from "@executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js";
18
17
  import { LocalSessionContextComposer } from "@executor/composer/context/LocalSessionContextComposer.js";
18
+ import { CoreEngineRunner } from "@executor/core-engine/CoreEngineRunner.js";
19
19
  import type { SessionCompactionComposer } from "@executor/composer/compaction/SessionCompactionComposer.js";
20
20
  import type { SessionContextComposer } from "@executor/composer/context/SessionContextComposer.js";
21
21
  import type { SessionSystemComposer } from "@executor/composer/system/SessionSystemComposer.js";
22
- import {
23
- MAX_INCOMPLETE_RESPONSE_RECOVERIES,
24
- MAX_TEXT_ONLY_CONTINUATIONS,
25
- MAX_TOOL_LOOP_STEPS,
26
- buildIncompleteResponseRecoveryNudge,
27
- buildTextOnlyContinuationNudge,
28
- detectIncompleteResponse,
29
- detectTextOnlyContinuationReason,
30
- mergeAssistantUiMessages,
31
- summarizeStepForDebug,
32
- summarizeUiMessageForDebug,
33
- toInlinePreview,
34
- } from "@executor/core-engine/CoreEngineSignals.js";
35
- import {
36
- evaluateCoreEngineLoopDecision,
37
- shouldContinueForTailMergedUserMessages,
38
- } from "@executor/core-engine/CoreEngineLoopDecision.js";
39
- import {
40
- resolveEffectiveCoreEngineError,
41
- summarizeStreamError,
42
- } from "@executor/core-engine/CoreEngineError.js";
43
- import { collectFinalAssistantMessageFromUiStream } from "@executor/core-engine/CoreEngineUiStreamCollector.js";
44
- import { CoreEngineMessageState } from "@executor/core-engine/CoreEngineMessageState.js";
45
- import {
46
- buildOpenAIResponsesProviderOptions,
47
- } from "@executor/messages/SessionMessageCodec.js";
48
- import { logAssistantMessageNow } from "@executor/messages/SessionMessageLog.js";
22
+ import { ExecutorInflightService } from "@executor/services/ExecutorInflightService.js";
23
+ import { ExecutorRecoveryPolicy } from "@executor/services/ExecutorRecoveryPolicy.js";
49
24
  import type { Logger } from "@/utils/logger/Logger.js";
50
25
  import type { JsonObject } from "@/types/common/Json.js";
51
26
  import type { SessionMessageV1 } from "@/executor/types/SessionMessages.js";
52
27
  import type { SessionExecutor } from "@/executor/types/SessionExecutor.js";
28
+ import type { SessionRunContext } from "@/types/executor/SessionRunContext.js";
53
29
  import type {
54
30
  SessionExecuteInput,
55
- SessionRunInput,
56
31
  SessionRunResult,
57
32
  } from "@/executor/types/SessionRun.js";
58
33
 
59
- /**
60
- * 可压缩错误的最大重试次数。
61
- */
62
- const MAX_COMPACTION_RETRY_ATTEMPTS = 3;
63
-
64
34
  type ExecutorOptions = {
65
35
  /**
66
36
  * 当前会话 ID。
@@ -133,9 +103,11 @@ export class Executor implements SessionExecutor {
133
103
  private readonly systemComposer: SessionSystemComposer;
134
104
  protected readonly contextComposer: SessionContextComposer;
135
105
  private readonly historyWriter: SessionHistoryWriter;
106
+ private readonly inflight_service: ExecutorInflightService;
107
+ private readonly recovery_policy: ExecutorRecoveryPolicy;
108
+ private readonly core_engine_runner: CoreEngineRunner;
136
109
 
137
110
  private executing = false;
138
- private retryCount = 0;
139
111
 
140
112
  constructor(options: ExecutorOptions) {
141
113
  const sessionId = String(options.sessionId || "").trim();
@@ -162,6 +134,24 @@ export class Executor implements SessionExecutor {
162
134
  getHistoryStore: () => this.getHistoryStore(),
163
135
  runAfterSessionUpdated: options.runAfterSessionUpdated,
164
136
  });
137
+ this.inflight_service = new ExecutorInflightService({
138
+ session_id: this.sessionId,
139
+ history_store: this.historyStore,
140
+ run_after_session_updated_async: async () =>
141
+ await this.afterSessionUpdatedAsync(),
142
+ });
143
+ this.recovery_policy = new ExecutorRecoveryPolicy({
144
+ compaction_composer: this.compactionComposer,
145
+ context_composer: this.contextComposer,
146
+ logger: this.logger,
147
+ });
148
+ this.core_engine_runner = new CoreEngineRunner({
149
+ history_store: this.historyStore,
150
+ context_composer: this.contextComposer,
151
+ logger: this.logger,
152
+ should_compact_on_error: (error) =>
153
+ this.compactionComposer.shouldCompactOnError(error),
154
+ });
165
155
  }
166
156
 
167
157
  /**
@@ -235,9 +225,7 @@ export class Executor implements SessionExecutor {
235
225
  */
236
226
  async run(params: {
237
227
  query: string;
238
- onStepCallback?: SessionRunScope["onStepCallback"];
239
- onAssistantStepCallback?: SessionRunScope["onAssistantStepCallback"];
240
- onUiMessageChunkCallback?: SessionRunScope["onUiMessageChunkCallback"];
228
+ runContext?: SessionRunContext;
241
229
  }): Promise<SessionRunResult> {
242
230
  if (this.executing) {
243
231
  // 关键点(中文):同一个 Session 实例只允许一个活跃 run,
@@ -245,20 +233,9 @@ export class Executor implements SessionExecutor {
245
233
  throw new Error("Executor.run does not support concurrent execution");
246
234
  }
247
235
  const query = String(params.query || "").trim();
248
- const sessionRunScope: Omit<SessionRunScope, "sessionId"> = {
249
- ...(typeof params.onStepCallback === "function"
250
- ? { onStepCallback: params.onStepCallback }
251
- : {}),
252
- ...(typeof params.onAssistantStepCallback === "function"
253
- ? { onAssistantStepCallback: params.onAssistantStepCallback }
254
- : {}),
255
- ...(typeof params.onUiMessageChunkCallback === "function"
256
- ? { onUiMessageChunkCallback: params.onUiMessageChunkCallback }
257
- : {}),
258
- };
259
- let persistedAssistantStepCount = 0;
236
+ const run_context = this.createRunContext(params.runContext);
260
237
  const providedOnAssistantStepCallback =
261
- sessionRunScope.onAssistantStepCallback;
238
+ run_context.onAssistantStepCallback;
262
239
 
263
240
  const wrappedOnAssistantStepCallback = async (step: {
264
241
  text: string;
@@ -266,133 +243,86 @@ export class Executor implements SessionExecutor {
266
243
  visibility?: "visible" | "internal";
267
244
  stepResult?: unknown;
268
245
  }): Promise<void> => {
269
- const stepMessages = buildSessionStepEventMessages({
270
- sessionId: this.sessionId,
246
+ const step_parts = buildSessionStepParts({
271
247
  stepIndex: step.stepIndex,
272
248
  stepResult: step.stepResult,
273
249
  text: step.text,
274
250
  visibility: step.visibility,
275
251
  });
276
- if (stepMessages.length > 0) {
277
- for (const stepMessage of stepMessages) {
278
- await this.appendAssistantMessage({
279
- message: stepMessage,
280
- });
281
- persistedAssistantStepCount += 1;
282
- }
252
+ if (step_parts.length > 0) {
253
+ await this.inflight_service.append_assistant_step_parts(step_parts);
283
254
  }
284
255
 
285
256
  if (typeof providedOnAssistantStepCallback === "function") {
286
257
  await providedOnAssistantStepCallback(step);
287
258
  }
288
259
  };
260
+ run_context.onAssistantStepCallback = wrappedOnAssistantStepCallback;
289
261
 
290
262
  this.executing = true;
291
- this.resetRunState();
263
+ this.recovery_policy.reset_run_state();
292
264
  try {
293
265
  const result = await withSessionRunScope(
294
266
  {
295
- sessionId: this.sessionId,
296
- ...sessionRunScope,
297
- onAssistantStepCallback: wrappedOnAssistantStepCallback,
267
+ runContext: run_context,
298
268
  },
299
- () => this.runWithRetry({ query }),
300
- );
301
- if (persistedAssistantStepCount <= 0) return result;
302
-
303
- return {
304
- ...result,
305
- assistantMessage: {
306
- ...result.assistantMessage,
307
- metadata: {
308
- ...(result.assistantMessage.metadata || {
309
- v: 1 as const,
310
- ts: Date.now(),
311
- sessionId: this.sessionId,
312
- }),
313
- extra: {
314
- ...(
315
- result.assistantMessage.metadata?.extra &&
316
- typeof result.assistantMessage.metadata.extra === "object" &&
317
- !Array.isArray(result.assistantMessage.metadata.extra)
318
- ? result.assistantMessage.metadata.extra
319
- : {}
269
+ async () =>
270
+ await this.recovery_policy.run_with_retry({
271
+ query,
272
+ model: this.resolveModelOrThrow(),
273
+ run_context,
274
+ prepare_execute_input: async ({
275
+ query: next_query,
276
+ model,
277
+ run_context: next_run_context,
278
+ retry_count,
279
+ }) =>
280
+ await this.prepareExecuteInput(
281
+ next_query,
282
+ model,
283
+ next_run_context,
284
+ retry_count,
320
285
  ),
321
- assistantStepMessagesPersisted: true,
322
- assistantStepCount: persistedAssistantStepCount,
323
- },
324
- },
325
- },
326
- };
286
+ execute_prepared_run: async ({
287
+ execute_input,
288
+ model,
289
+ run_context: next_run_context,
290
+ }) =>
291
+ await this.executePreparedRun(
292
+ execute_input,
293
+ model,
294
+ next_run_context,
295
+ ),
296
+ }),
297
+ );
298
+ return result;
327
299
  } finally {
328
- this.resetRunState();
300
+ this.recovery_policy.reset_run_state();
329
301
  this.executing = false;
330
302
  }
331
303
  }
332
304
 
333
- /**
334
- * 执行一次 session run(带可压缩错误重试)。
335
- */
336
- private async runWithRetry(input: SessionRunInput): Promise<SessionRunResult> {
337
- const model = this.resolveModelOrThrow();
338
- try {
339
- const query = String(input.query || "").trim();
340
- const prepared = await this.prepareExecuteInput(query, model);
341
- return await this.executePreparedRun(prepared, model);
342
- } catch (error) {
343
- if (this.compactionComposer.shouldCompactOnError(error)) {
344
- await this.logger.log("info", "[agent] compacting", {
345
- retryCount: this.retryCount,
346
- error: String(error),
347
- });
348
-
349
- if (this.retryCount < MAX_COMPACTION_RETRY_ATTEMPTS) {
350
- this.retryCount += 1;
351
- return this.runWithRetry(input);
352
- }
353
-
354
- return {
355
- success: false,
356
- error: "Context length exceeded and retries failed. Please resend your question.",
357
- assistantMessage: this.contextComposer.buildFallbackAssistantMessage(
358
- "Context length exceeded and retries failed. Please resend your question.",
359
- ),
360
- };
361
- }
362
-
363
- const errorMsg = String(error);
364
- await this.logger.log("error", "Executor execution failed", {
365
- error: errorMsg,
366
- });
367
- return {
368
- success: false,
369
- error: errorMsg,
370
- assistantMessage: this.contextComposer.buildFallbackAssistantMessage(
371
- `Execution failed: ${errorMsg}`,
372
- ),
373
- };
374
- }
375
- }
376
-
377
305
  /**
378
306
  * 调用 Composer 组装当前轮执行输入。
379
307
  */
380
308
  private async prepareExecuteInput(
381
309
  query: string,
382
310
  model: LanguageModel,
311
+ run_context: SessionRunContext,
312
+ retry_count: number,
383
313
  ): Promise<SessionExecuteInput> {
384
314
  if (!String(this.historyComposer.sessionId || "").trim()) {
385
315
  throw new Error("Executor.run requires historyComposer.sessionId");
386
316
  }
387
317
 
388
- const runContext = await this.contextComposer.compose();
389
- const tools = runContext.tools;
390
- const system = await this.systemComposer.resolve();
318
+ const composed_context = await this.contextComposer.compose(run_context);
319
+ const tools = composed_context.tools;
320
+ const system = await this.systemComposer.resolve(run_context);
391
321
 
392
322
  try {
393
- if (this.retryCount > 0) {
323
+ if (retry_count > 0) {
394
324
  await this.logger.log("info", "[agent] compacting", {
395
- retryCount: this.retryCount,
325
+ retryCount: retry_count,
396
326
  });
397
327
  }
398
328
 
@@ -400,7 +330,7 @@ export class Executor implements SessionExecutor {
400
330
  historyStore: this.historyStore,
401
331
  model,
402
332
  system,
403
- retryCount: this.retryCount,
333
+ retryCount: retry_count,
404
334
  });
405
335
  } catch {
406
336
  // 压缩失败不阻断主流程,继续使用当前历史消息执行。
@@ -411,7 +341,7 @@ export class Executor implements SessionExecutor {
411
341
  tools,
412
342
  system,
413
343
  model,
414
- retryCount: this.retryCount,
344
+ retryCount: retry_count,
415
345
  });
416
346
 
417
347
  return {
@@ -428,286 +358,44 @@ export class Executor implements SessionExecutor {
428
358
  private async executePreparedRun(
429
359
  input: SessionExecuteInput,
430
360
  model: LanguageModel,
361
+ run_context: SessionRunContext,
431
362
  ): Promise<SessionRunResult> {
432
- return await this.runCoreEngine(input, model);
363
+ return await this.core_engine_runner.run({
364
+ execute_input: input,
365
+ model,
366
+ run_context,
367
+ });
433
368
  }
434
369
 
435
370
  /**
436
- * 运行模型/tool-loop 核心。
437
- *
438
- * 关键点(中文)
439
- * - CoreEngine 是 Executor 内部机制,不是第二个 Executor 实例。
440
- * - 这里只返回最终 assistant message;是否写入长期 history 由外层 Session/Service 决定。
441
- * - 运行中生成的内部续写 user message 只进入本轮内存态,不直接落盘。
371
+ * 归一化本轮显式运行上下文。
442
372
  */
443
- private async runCoreEngine(
444
- input: SessionExecuteInput,
445
- model: LanguageModel,
446
- ): Promise<SessionRunResult> {
447
- const startTime = Date.now();
448
- const sessionId = String(this.historyStore.sessionId || "").trim();
449
- const system = Array.isArray(input.system) ? input.system : [];
450
- const tools = input.tools;
451
- let lastObservedStreamError: unknown = undefined;
452
-
453
- try {
454
- const messageState = await CoreEngineMessageState.create({
455
- messages: input.messages,
456
- tools,
457
- });
458
-
459
- const appendMergedUserMessages = (messages: SessionMessageV1[]) =>
460
- messageState.appendMergedUserMessages(messages);
461
-
462
- const contextComposerOnStepFinish =
463
- this.contextComposer.createOnStepFinishHandler();
464
- let stepCount = 0;
465
- let totalToolCallCount = 0;
466
- let totalToolResultCount = 0;
467
- const onStepFinish = async (stepResult: unknown): Promise<void> => {
468
- stepCount += 1;
469
- const summary = summarizeStepForDebug(stepResult);
470
- totalToolCallCount +=
471
- typeof summary.toolCallCount === "number" ? summary.toolCallCount : 0;
472
- totalToolResultCount +=
473
- typeof summary.toolResultCount === "number"
474
- ? summary.toolResultCount
475
- : 0;
476
- await this.logger.log("info", "[agent] step.finish", {
477
- sessionId,
478
- stepIndex: stepCount,
479
- ...summary,
480
- });
481
- await contextComposerOnStepFinish(stepResult);
482
- };
483
-
484
- const prepareStep = this.contextComposer.createPrepareStepHandler({
485
- system,
486
- appendMergedUserMessages,
487
- });
488
-
489
- let finalAssistantUiMessage: SessionMessageV1 | null = null;
490
- let textOnlyContinuationCount = 0;
491
- let incompleteResponseRecoveryCount = 0;
492
-
493
- while (stepCount < MAX_TOOL_LOOP_STEPS) {
494
- const result = streamText({
495
- model,
496
- system,
497
- onStepFinish,
498
- prepareStep,
499
- messages: messageState.modelMessages,
500
- tools,
501
- providerOptions: buildOpenAIResponsesProviderOptions(),
502
- onError: async ({ error }) => {
503
- lastObservedStreamError = error;
504
- await this.logger.log("error", "[agent] stream.error", {
505
- sessionId,
506
- ...summarizeStreamError(error),
507
- });
508
- },
509
- });
510
-
511
- const stepAssistantUiMessage = await collectFinalAssistantMessageFromUiStream({
512
- result,
513
- sessionId,
514
- logger: this.logger,
515
- buildFallbackAssistantMessage: (text) =>
516
- this.contextComposer.buildFallbackAssistantMessage(text),
517
- });
518
-
519
- const executedSteps = await result.steps;
520
- const lastStep = executedSteps[executedSteps.length - 1];
521
- if (!lastStep) break;
522
-
523
- const incompleteResponse = detectIncompleteResponse({
524
- stepResult: lastStep,
525
- assistantMessage: stepAssistantUiMessage,
526
- });
527
- const textOnlyContinuationReason =
528
- detectTextOnlyContinuationReason(lastStep);
529
- const loopDecision = evaluateCoreEngineLoopDecision({
530
- hasIncompleteResponse: incompleteResponse !== null,
531
- incompleteRecoveryCount: incompleteResponseRecoveryCount,
532
- maxIncompleteRecoveries: MAX_INCOMPLETE_RESPONSE_RECOVERIES,
533
- textOnlyContinuationReason,
534
- textOnlyContinuationCount,
535
- maxTextOnlyContinuations: MAX_TEXT_ONLY_CONTINUATIONS,
536
- hasTools: Object.keys(tools).length > 0,
537
- toolCallCount: lastStep.toolCalls.length,
538
- });
539
-
540
- await this.logger.log("info", "[agent] loop.decision", {
541
- sessionId,
542
- stepIndex: stepCount,
543
- continueForToolCalls: loopDecision.continueForToolCalls,
544
- continueForTextOnly: loopDecision.continueForTextOnly,
545
- continueForIncompleteRecovery:
546
- loopDecision.continueForIncompleteRecovery,
547
- decisionKind: loopDecision.kind,
548
- textOnlyContinuationReason,
549
- textOnlyContinuationCount,
550
- incompleteResponseReason: incompleteResponse?.reason ?? null,
551
- incompleteResponseRecoveryCount,
552
- toolCallCount: lastStep.toolCalls.length,
553
- toolResultCount: lastStep.toolResults.length,
554
- finishReason: lastStep.finishReason,
555
- textPreview: toInlinePreview(lastStep.text),
556
- });
557
-
558
- if (loopDecision.continueForIncompleteRecovery && incompleteResponse) {
559
- incompleteResponseRecoveryCount += 1;
560
- await this.logger.log("warn", "[agent] incomplete_response.recover", {
561
- sessionId,
562
- stepIndex: stepCount,
563
- recoveryCount: incompleteResponseRecoveryCount,
564
- reason: incompleteResponse.reason,
565
- ...incompleteResponse.details,
566
- });
567
- const recoveryMessage = this.historyStore.userText({
568
- text: buildIncompleteResponseRecoveryNudge(
569
- incompleteResponseRecoveryCount,
570
- ),
571
- metadata: {
572
- sessionId,
573
- extra: {
574
- internal: "agent_incomplete_response_recover",
575
- reason: incompleteResponse.reason,
576
- stepIndex: stepCount,
577
- },
578
- },
579
- });
580
- await messageState.appendUserTextMessage(recoveryMessage);
581
- continue;
582
- }
583
-
584
- if (incompleteResponse) {
585
- await this.logger.log("error", "[agent] incomplete_response", {
586
- sessionId,
587
- stepIndex: stepCount,
588
- reason: incompleteResponse.reason,
589
- recoveryCount: incompleteResponseRecoveryCount,
590
- ...incompleteResponse.details,
591
- });
592
- throw new Error(
593
- `Agent received incomplete response (${incompleteResponse.reason})`,
594
- );
595
- }
596
-
597
- const responseMessages = Array.isArray(lastStep.response?.messages)
598
- ? lastStep.response.messages
599
- : [];
600
- messageState.appendModelMessages(responseMessages);
601
-
602
- finalAssistantUiMessage = mergeAssistantUiMessages(
603
- finalAssistantUiMessage,
604
- stepAssistantUiMessage,
605
- );
606
-
607
- // 关键点(中文):把本 step 的 assistant UI 消息并入运行时上下文,保证后续全量重算不丢历史。
608
- messageState.appendRuntimeSessionMessage(stepAssistantUiMessage);
609
-
610
- if (loopDecision.continueForToolCalls) {
611
- textOnlyContinuationCount = 0;
612
- incompleteResponseRecoveryCount = 0;
613
- continue;
614
- }
615
-
616
- if (loopDecision.continueForTextOnly) {
617
- textOnlyContinuationCount += 1;
618
- incompleteResponseRecoveryCount = 0;
619
- const continuationMessage = this.historyStore.userText({
620
- text: buildTextOnlyContinuationNudge(textOnlyContinuationCount),
621
- metadata: {
622
- sessionId,
623
- extra: {
624
- internal: "agent_loop_auto_continue",
625
- reason: textOnlyContinuationReason,
626
- stepIndex: stepCount,
627
- },
628
- },
629
- });
630
- await messageState.appendUserTextMessage(continuationMessage);
631
- continue;
632
- }
633
-
634
- // 关键点(中文):stop 前做 tail merge,覆盖最后一个 step 后才入队的新 user 消息。
635
- const tailPrepared = await prepareStep({ messages: [] });
636
- const tailMergedMessageCount = Array.isArray(tailPrepared.messages)
637
- ? tailPrepared.messages.length
638
- : 0;
639
- if (
640
- shouldContinueForTailMergedUserMessages({
641
- mergedUserMessageCount: tailMergedMessageCount,
642
- })
643
- ) {
644
- textOnlyContinuationCount = 0;
645
- incompleteResponseRecoveryCount = 0;
646
- await this.logger.log("info", "[agent] loop.tail_merge_continue", {
647
- sessionId,
648
- stepIndex: stepCount,
649
- mergedUserMessageCount: tailMergedMessageCount,
650
- });
651
- continue;
652
- }
653
-
654
- break;
655
- }
656
-
657
- if (stepCount >= MAX_TOOL_LOOP_STEPS) {
658
- await this.logger.log("warn", "[agent] loop.max_steps_reached", {
659
- sessionId,
660
- stepCount,
661
- totalToolCallCount,
662
- totalToolResultCount,
663
- });
664
- }
665
-
666
- const finalMessage =
667
- finalAssistantUiMessage ||
668
- this.contextComposer.buildFallbackAssistantMessage("Execution completed");
669
-
670
- await this.logger.log("info", "[agent] final.message", {
671
- sessionId,
672
- ...summarizeUiMessageForDebug(finalMessage),
673
- });
674
- await logAssistantMessageNow(this.logger, finalMessage);
675
-
676
- const duration = Date.now() - startTime;
677
- await this.logger.log("info", "[agent] finish", {
678
- sessionId,
679
- duration,
680
- stepCount,
681
- totalToolCallCount,
682
- totalToolResultCount,
683
- });
684
-
685
- return {
686
- success: true,
687
- assistantMessage: finalMessage,
688
- };
689
- } catch (error) {
690
- if (this.compactionComposer.shouldCompactOnError(error)) {
691
- throw error;
692
- }
693
-
694
- const errorMsg = resolveEffectiveCoreEngineError({
695
- error,
696
- streamError: lastObservedStreamError,
697
- });
698
-
699
- await this.logger.log("error", "CoreEngine execution failed", {
700
- error: errorMsg,
701
- });
702
-
703
- return {
704
- success: false,
705
- error: errorMsg,
706
- assistantMessage: this.contextComposer.buildFallbackAssistantMessage(
707
- `Execution failed: ${errorMsg}`,
708
- ),
709
- };
710
- }
373
+ private createRunContext(
374
+ input?: SessionRunContext,
375
+ ): SessionRunContext {
376
+ return {
377
+ sessionId: String(input?.sessionId || this.sessionId).trim(),
378
+ ...(typeof input?.onStepCallback === "function"
379
+ ? { onStepCallback: input.onStepCallback }
380
+ : {}),
381
+ ...(typeof input?.onAssistantStepCallback === "function"
382
+ ? { onAssistantStepCallback: input.onAssistantStepCallback }
383
+ : {}),
384
+ ...(typeof input?.onUiMessageChunkCallback === "function"
385
+ ? { onUiMessageChunkCallback: input.onUiMessageChunkCallback }
386
+ : {}),
387
+ injectedUserMessages: Array.isArray(input?.injectedUserMessages)
388
+ ? [...input.injectedUserMessages]
389
+ : [],
390
+ deferredPersistedUserMessages: Array.isArray(
391
+ input?.deferredPersistedUserMessages,
392
+ )
393
+ ? [...input.deferredPersistedUserMessages]
394
+ : [],
395
+ pendingAssistantFileParts: Array.isArray(input?.pendingAssistantFileParts)
396
+ ? [...input.pendingAssistantFileParts]
397
+ : [],
398
+ };
711
399
  }
712
400
 
713
401
  /**
@@ -722,11 +410,4 @@ export class Executor implements SessionExecutor {
722
410
  }
723
411
  return model;
724
412
  }
725
-
726
- /**
727
- * 重置当前 run 级状态。
728
- */
729
- private resetRunState(): void {
730
- this.retryCount = 0;
731
- }
732
413
  }
@@ -6,7 +6,7 @@
6
6
 
7
7
  - `Session`:用户/SDK 面向的完整会话对象,负责模型配置、历史入口、prompt 入口和分叉能力。
8
8
  - `Executor`:单个 session 的内部单轮执行引擎,负责并发锁、执行 scope、Composer 编排、压缩重试、assistant step 持久化和 tool-loop 调用。
9
- - `Composer`:执行前的材料组装协议,只负责把原材料组装成某一阶段输入,不直接执行模型,也没有公共运行时基类。
9
+ - `Composer`:Session 执行阶段的可替换策略协议。调用方可以通过 custom composer 定义 system、history、runtime context 与 compaction 等阶段逻辑。
10
10
  - `HistoryStore`:历史事实源,负责 JSONL 读写、meta、archive、lock、compact 与消息工厂。
11
11
  - `HistoryComposer`:历史组装策略,只负责把 `HistoryStore` 中的历史组装成本轮模型输入。
12
12
  - `CoreEngine`:Executor 内部的模型/tool-loop 核心机制,负责模型流、tool calls、续写和最终 assistant message 合并。
@@ -38,7 +38,7 @@ sdk/Session.prompt({ query })
38
38
 
39
39
  ## Composer 的代码实现方式
40
40
 
41
- Composer 在代码里是 TypeScript `interface`,不是抽象基类。每个 Composer 只声明当前阶段需要的最小协议,实现类用 `implements` 接上。
41
+ Composer 在代码里是 TypeScript `interface`,不是抽象基类。每个 Composer 声明当前阶段的策略协议,实现类用 `implements` 接上;如果需要自定义 Composer,应在自定义 `Session` 类中传给 `super({ composers })`。
42
42
 
43
43
  ```ts
44
44
  export interface SessionSystemComposer {
@@ -76,9 +76,9 @@ Executor.prepareExecuteInput()
76
76
  边界规则:
77
77
 
78
78
  - Composer 不调用模型,模型调用只发生在 `Executor.runCoreEngine()`。
79
- - Composer 不持有历史事实,历史事实由 `HistoryStore` 负责。
79
+ - Composer 可以绑定或读取当前 session 的上下文,但历史事实源仍由 `HistoryStore` 负责。
80
80
  - Composer 不管理 session 生命周期,生命周期由 `Session` / `Executor` 管理。
81
- - Composer 可以读取上下文并做策略判断,但输出应该是“本轮执行材料”。
81
+ - Composer 可以读取上下文并做策略判断,输出或执行结果应该服务于当前阶段的本轮 session 执行。
82
82
 
83
83
  ## 当前目录结构
84
84