@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
@@ -8,12 +8,12 @@
8
8
  */
9
9
 
10
10
  import type { SessionSystemComposer } from "@executor/composer/system/SessionSystemComposer.js";
11
- import { getSessionRunScope } from "@executor/SessionRunScope.js";
12
11
  import type { SessionSystemMessage } from "@/executor/types/SessionPrompts.js";
13
12
  import type {
14
13
  AgentSessionSystemBlock,
15
14
  AgentSessionSystemSessionInfo,
16
15
  } from "@/types/agent/AgentTypes.js";
16
+ import type { SessionRunContext } from "@/types/executor/SessionRunContext.js";
17
17
 
18
18
  /**
19
19
  * 解析 SDK session system blocks 的输入。
@@ -240,8 +240,8 @@ export class SessionSystemBuilder implements SessionSystemComposer {
240
240
  /**
241
241
  * 解析本轮 SDK session system messages。
242
242
  */
243
- async resolve() {
244
- const sessionId = String(getSessionRunScope()?.sessionId || "").trim();
243
+ async resolve(run_context: SessionRunContext) {
244
+ const sessionId = String(run_context.sessionId || "").trim();
245
245
  if (!sessionId) {
246
246
  throw new Error("SessionSystemBuilder.resolve requires a non-empty sessionId");
247
247
  }
@@ -4,7 +4,7 @@
4
4
  * 关键点(中文)
5
5
  * - 统一负责 session 列表摘要、session 详情与 history 分页的投影逻辑。
6
6
  * - session title 允许为空;浏览层不会再从首条 user message 推导 fallback title。
7
- * - 面向 SDK / RemoteAgent / HTTP route 复用,避免在多个入口重复拼列表与分页语义。
7
+ * - 面向 SDK / RemoteAgent / Town gateway route 复用,避免在多个入口重复拼列表与分页语义。
8
8
  * - 这里不持有运行态状态;执行状态等动态信息通过调用参数显式注入。
9
9
  */
10
10
 
@@ -322,20 +322,39 @@ export function toSessionTimelineEvents(
322
322
  export async function loadSessionMessagesFromPath(
323
323
  filePath: string,
324
324
  ): Promise<SessionMessageV1[]> {
325
- if (!(await fs.pathExists(filePath))) return [];
326
- const raw = await fs.readFile(filePath, "utf-8");
327
- const lines = raw.split("\n").filter(Boolean);
328
325
  const messages: SessionMessageV1[] = [];
329
- for (const line of lines) {
326
+ if (await fs.pathExists(filePath)) {
327
+ const raw = await fs.readFile(filePath, "utf-8");
328
+ const lines = raw.split("\n").filter(Boolean);
329
+ for (const line of lines) {
330
+ try {
331
+ const parsed = JSON.parse(line) as SessionMessageV1;
332
+ if (!parsed || typeof parsed !== "object") continue;
333
+ if (parsed.role !== "user" && parsed.role !== "assistant") continue;
334
+ messages.push(parsed);
335
+ } catch {
336
+ // 关键点(中文):单行损坏不影响整个 session 的可读性。
337
+ }
338
+ }
339
+ }
340
+
341
+ const inflight_path = filePath.replace(/messages\.jsonl$/, "inflight.json");
342
+ if (await fs.pathExists(inflight_path)) {
330
343
  try {
331
- const parsed = JSON.parse(line) as SessionMessageV1;
332
- if (!parsed || typeof parsed !== "object") continue;
333
- if (parsed.role !== "user" && parsed.role !== "assistant") continue;
334
- messages.push(parsed);
344
+ const parsed = (await fs.readJson(inflight_path)) as SessionMessageV1;
345
+ if (
346
+ parsed &&
347
+ typeof parsed === "object" &&
348
+ parsed.role === "assistant" &&
349
+ Array.isArray(parsed.parts)
350
+ ) {
351
+ messages.push(parsed);
352
+ }
335
353
  } catch {
336
- // 关键点(中文):单行损坏不影响整个 session 的可读性。
354
+ // ignore invalid inflight snapshot
337
355
  }
338
356
  }
357
+
339
358
  return messages;
340
359
  }
341
360
 
@@ -12,6 +12,7 @@ export {
12
12
  getSdkAgentDirPath,
13
13
  getSdkAgentSessionArchiveDirPath,
14
14
  getSdkAgentSessionDirPath,
15
+ getSdkAgentSessionInflightPath,
15
16
  getSdkAgentSessionMessagesDirPath,
16
17
  getSdkAgentSessionMessagesPath,
17
18
  getSdkAgentSessionMetaPath,
@@ -0,0 +1,341 @@
1
+ /**
2
+ * SessionStateService:本地 Session 状态与持久化服务。
3
+ *
4
+ * 关键点(中文)
5
+ * - 统一管理本地 Session 的初始化、配置、标题、metadata 与消息持久化。
6
+ * - 该服务只关心状态事实源与持久化副作用,不负责 turn 编排。
7
+ * - `Session` facade 与 turn/view service 都通过它访问可变 session 运行态。
8
+ */
9
+
10
+ import {
11
+ inferAgentModelLabel,
12
+ normalizeAgentModel,
13
+ } from "@/model/CityModelAdapter.js";
14
+ import {
15
+ patchSessionModelLabel,
16
+ readSessionMetadata,
17
+ resolveSystemTimezone,
18
+ touchSessionMetadata,
19
+ writeSessionMetadata,
20
+ } from "@/session/index.js";
21
+ import { ensureSessionTitle } from "@/session/SessionTitle.js";
22
+ import { persistSdkAssistantResult } from "@/session/storage/Persistence.js";
23
+ import type { Executor } from "@executor/Executor.js";
24
+ import type { JsonlSessionHistoryStore } from "@/executor/store/history/jsonl/JsonlSessionHistoryStore.js";
25
+ import type {
26
+ AgentSessionConfigSnapshot,
27
+ AgentSessionSetInput,
28
+ } from "@/types/agent/AgentTypes.js";
29
+ import type {
30
+ AgentSessionEvent,
31
+ } from "@/types/sdk/AgentSessionEvent.js";
32
+ import type { AgentSessionPromptInput } from "@/types/sdk/AgentSessionPrompt.js";
33
+ import type {
34
+ SessionMessageV1,
35
+ SessionUserMessageV1,
36
+ } from "@/executor/types/SessionMessages.js";
37
+ import type { SessionLocalState } from "@/types/session/SessionLocalState.js";
38
+
39
+ type SessionStateServiceOptions = {
40
+ /**
41
+ * 当前 agent 稳定标识。
42
+ */
43
+ agent_id: string;
44
+
45
+ /**
46
+ * 当前项目根目录。
47
+ */
48
+ project_root: string;
49
+
50
+ /**
51
+ * 当前 session 标识。
52
+ */
53
+ session_id: string;
54
+
55
+ /**
56
+ * 当前 session 历史事实源。
57
+ */
58
+ history_store: JsonlSessionHistoryStore;
59
+
60
+ /**
61
+ * 当前 session 执行器。
62
+ */
63
+ executor: Executor;
64
+
65
+ /**
66
+ * 当前 session 可变运行态。
67
+ */
68
+ state: SessionLocalState;
69
+
70
+ /**
71
+ * 在执行前补齐宿主级配置。
72
+ */
73
+ ensure_configured_hook?: () => Promise<void>;
74
+
75
+ /**
76
+ * 发布 session 事件。
77
+ */
78
+ publish_event: (event: AgentSessionEvent) => void;
79
+ };
80
+
81
+ /**
82
+ * 本地 Session 状态与持久化服务。
83
+ */
84
+ export class SessionStateService {
85
+ private readonly agent_id: string;
86
+ private readonly project_root: string;
87
+ private readonly session_id: string;
88
+ private readonly history_store: JsonlSessionHistoryStore;
89
+ private readonly executor: Executor;
90
+ private readonly state: SessionLocalState;
91
+ private readonly ensure_configured_hook?: SessionStateServiceOptions["ensure_configured_hook"];
92
+ private readonly publish_event: SessionStateServiceOptions["publish_event"];
93
+
94
+ constructor(options: SessionStateServiceOptions) {
95
+ this.agent_id = options.agent_id;
96
+ this.project_root = options.project_root;
97
+ this.session_id = options.session_id;
98
+ this.history_store = options.history_store;
99
+ this.executor = options.executor;
100
+ this.state = options.state;
101
+ this.ensure_configured_hook = options.ensure_configured_hook;
102
+ this.publish_event = options.publish_event;
103
+ }
104
+
105
+ /**
106
+ * 读取当前 session 配置快照。
107
+ */
108
+ get_config(): AgentSessionConfigSnapshot {
109
+ return {
110
+ ...this.state.sessionConfig,
111
+ };
112
+ }
113
+
114
+ /**
115
+ * 读取当前 session 创建时间。
116
+ */
117
+ get_created_at(): number {
118
+ return this.state.createdAt;
119
+ }
120
+
121
+ /**
122
+ * 读取当前 session 参考时区。
123
+ */
124
+ get_timezone(): string {
125
+ return this.state.timezone;
126
+ }
127
+
128
+ /**
129
+ * 初始化当前 session metadata 与内存快照。
130
+ */
131
+ async initialize(): Promise<void> {
132
+ if (this.state.initializePromise) {
133
+ await this.state.initializePromise;
134
+ return;
135
+ }
136
+ this.state.initializePromise = (async () => {
137
+ const metadata = await readSessionMetadata({
138
+ projectRoot: this.project_root,
139
+ agentId: this.agent_id,
140
+ sessionId: this.session_id,
141
+ });
142
+ const created_at =
143
+ typeof metadata.createdAt === "number" ? metadata.createdAt : Date.now();
144
+ const timezone =
145
+ typeof metadata.timezone === "string" && metadata.timezone.trim()
146
+ ? metadata.timezone.trim()
147
+ : resolveSystemTimezone();
148
+ await writeSessionMetadata({
149
+ projectRoot: this.project_root,
150
+ agentId: this.agent_id,
151
+ sessionId: this.session_id,
152
+ meta: {
153
+ ...metadata,
154
+ agentId: this.agent_id,
155
+ createdAt: created_at,
156
+ timezone,
157
+ },
158
+ });
159
+ this.state.createdAt = created_at;
160
+ this.state.timezone = timezone;
161
+ this.state.sessionConfig = {
162
+ ...(metadata.modelLabel
163
+ ? { modelLabel: metadata.modelLabel }
164
+ : {}),
165
+ };
166
+ })();
167
+ await this.state.initializePromise;
168
+ }
169
+
170
+ /**
171
+ * 在执行前确保当前 session 已完成初始化与宿主装配。
172
+ */
173
+ async ensure_ready_for_execution(): Promise<void> {
174
+ await this.initialize();
175
+ if (this.state.ensureConfiguredPromise) {
176
+ await this.state.ensureConfiguredPromise;
177
+ return;
178
+ }
179
+ this.state.ensureConfiguredPromise = (async () => {
180
+ if (!this.ensure_configured_hook) return;
181
+ await this.ensure_configured_hook();
182
+ })();
183
+ try {
184
+ await this.state.ensureConfiguredPromise;
185
+ } catch (error) {
186
+ this.state.ensureConfiguredPromise = null;
187
+ throw error;
188
+ }
189
+ }
190
+
191
+ /**
192
+ * 在 prompt 执行前确保当前 session 已可运行。
193
+ */
194
+ async ensure_runnable(): Promise<void> {
195
+ await this.ensure_ready_for_execution();
196
+ if (!this.state.sessionConfig.model) {
197
+ throw new Error(
198
+ `Session "${this.session_id}" requires a configured model. Pass model to new Agent({ model }) or call session.set({ model }) first.`,
199
+ );
200
+ }
201
+ }
202
+
203
+ /**
204
+ * 写入当前 session 配置。
205
+ */
206
+ async set(input: AgentSessionSetInput): Promise<void> {
207
+ if (input.model) {
208
+ this.state.sessionConfig.model = normalizeAgentModel(input.model);
209
+ this.state.sessionConfig.modelLabel = inferAgentModelLabel(input.model);
210
+ this.executor.clearExecutor();
211
+ }
212
+ await patchSessionModelLabel({
213
+ projectRoot: this.project_root,
214
+ agentId: this.agent_id,
215
+ sessionId: this.session_id,
216
+ model: this.state.sessionConfig.model,
217
+ });
218
+ }
219
+
220
+ /**
221
+ * 追加一条 user 消息并刷新标题与 metadata。
222
+ */
223
+ async append_user_message(params: {
224
+ message?: SessionMessageV1 | null;
225
+ text?: string;
226
+ }): Promise<void> {
227
+ await this.executor.appendUserMessage(params);
228
+ await this.ensure_title_from_history({ generate: true });
229
+ await this.touch_metadata();
230
+ }
231
+
232
+ /**
233
+ * 追加一条 assistant 消息并刷新 metadata。
234
+ */
235
+ async append_assistant_message(params: {
236
+ message?: SessionMessageV1 | null;
237
+ fallbackText?: string;
238
+ }): Promise<void> {
239
+ await this.executor.appendAssistantMessage(params);
240
+ await this.touch_metadata();
241
+ }
242
+
243
+ /**
244
+ * 仅刷新当前 session metadata。
245
+ */
246
+ async touch_metadata(): Promise<void> {
247
+ await touchSessionMetadata({
248
+ projectRoot: this.project_root,
249
+ agentId: this.agent_id,
250
+ sessionId: this.session_id,
251
+ sessionConfig: this.state.sessionConfig,
252
+ });
253
+ }
254
+
255
+ /**
256
+ * 确保当前 session 已持久化 title。
257
+ */
258
+ async ensure_title_from_history(input?: {
259
+ /**
260
+ * 是否允许调用模型生成标题。
261
+ */
262
+ generate?: boolean;
263
+ }): Promise<void> {
264
+ const messages = await this.history_store.list();
265
+ const before_metadata = await readSessionMetadata({
266
+ projectRoot: this.project_root,
267
+ agentId: this.agent_id,
268
+ sessionId: this.session_id,
269
+ });
270
+ const before_title = String(before_metadata.title || "").trim();
271
+ const next_metadata = await ensureSessionTitle({
272
+ projectRoot: this.project_root,
273
+ agentId: this.agent_id,
274
+ sessionId: this.session_id,
275
+ messages,
276
+ ...(input?.generate ? { model: this.state.sessionConfig.model } : {}),
277
+ generate: input?.generate === true,
278
+ });
279
+ const next_title = String(next_metadata.title || "").trim();
280
+ if (!next_title || next_title === before_title) return;
281
+ this.publish_event({
282
+ type: "session-title",
283
+ sessionId: this.session_id,
284
+ title: next_title,
285
+ });
286
+ }
287
+
288
+ /**
289
+ * 持久化最终 assistant 结果。
290
+ */
291
+ async persist_assistant_result(
292
+ assistant_message: SessionMessageV1,
293
+ ): Promise<void> {
294
+ await persistSdkAssistantResult({
295
+ projectRoot: this.project_root,
296
+ agentId: this.agent_id,
297
+ sessionId: this.session_id,
298
+ sessionConfig: this.state.sessionConfig,
299
+ executor: this.executor,
300
+ assistantMessage: assistant_message,
301
+ });
302
+ }
303
+
304
+ /**
305
+ * 构造并持久化一条 prompt user 消息。
306
+ */
307
+ async create_and_persist_user_prompt_message(
308
+ input: AgentSessionPromptInput,
309
+ ): Promise<SessionUserMessageV1> {
310
+ const message = this.history_store.userText({
311
+ text: String(input.query || "").trim(),
312
+ metadata: {
313
+ sessionId: this.session_id,
314
+ },
315
+ }) as SessionUserMessageV1;
316
+ await this.executor.appendUserMessage({
317
+ message,
318
+ });
319
+ await this.ensure_title_from_history({ generate: true });
320
+ await this.touch_metadata();
321
+ return message;
322
+ }
323
+
324
+ /**
325
+ * 持久化本轮执行期间延迟写入的 user 消息。
326
+ */
327
+ async persist_deferred_user_messages(
328
+ deferred_messages?: SessionUserMessageV1[],
329
+ ): Promise<void> {
330
+ const normalized_messages = Array.isArray(deferred_messages)
331
+ ? deferred_messages
332
+ : [];
333
+ if (normalized_messages.length <= 0) return;
334
+ for (const message of normalized_messages) {
335
+ await this.executor.appendUserMessage({
336
+ message,
337
+ });
338
+ }
339
+ await this.touch_metadata();
340
+ }
341
+ }
@@ -0,0 +1,202 @@
1
+ /**
2
+ * SessionTurnService:本地 Session turn 编排服务。
3
+ *
4
+ * 关键点(中文)
5
+ * - 统一管理 prompt actor 调度、turn 执行与 Session 事件流派发。
6
+ * - 该服务负责把 SessionPromptRuntime 与 Executor 连接起来。
7
+ * - metadata、title、assistant 结果持久化等状态副作用交由 SessionStateService 处理。
8
+ */
9
+
10
+ import { extractTextFromUiMessage } from "@/executor/messages/UIMessageTransformer.js";
11
+ import type { Executor } from "@executor/Executor.js";
12
+ import type { AgentSessionEvent } from "@/types/sdk/AgentSessionEvent.js";
13
+ import type {
14
+ AgentSessionSubscriber,
15
+ AgentSessionUnsubscribe,
16
+ } from "@/types/sdk/AgentSessionEvent.js";
17
+ import type { AgentSessionPromptInput } from "@/types/sdk/AgentSessionPrompt.js";
18
+ import type { AgentSessionTurnHandle } from "@/types/sdk/AgentSessionTurn.js";
19
+ import type {
20
+ SessionMessageV1,
21
+ SessionUserMessageV1,
22
+ } from "@/executor/types/SessionMessages.js";
23
+ import { mapAgentEventToSessionEvent, mapUiMessageChunkToAgentEvent } from "@/session/SessionEventMapper.js";
24
+ import { SessionEventHub } from "@/session/runtime/SessionEventHub.js";
25
+ import { SessionPromptRuntime } from "@/session/runtime/SessionPromptRuntime.js";
26
+ import type { SessionRunContext } from "@/types/executor/SessionRunContext.js";
27
+ import { SessionStateService } from "@/session/services/SessionStateService.js";
28
+
29
+ type SessionTurnServiceOptions = {
30
+ /**
31
+ * 当前 session 标识。
32
+ */
33
+ session_id: string;
34
+
35
+ /**
36
+ * 当前 session 执行器。
37
+ */
38
+ executor: Executor;
39
+
40
+ /**
41
+ * 当前 session 状态服务。
42
+ */
43
+ state_service: SessionStateService;
44
+
45
+ /**
46
+ * 当前 session 共享事件总线。
47
+ */
48
+ event_hub: SessionEventHub;
49
+ };
50
+
51
+ /**
52
+ * 本地 Session turn 编排服务。
53
+ */
54
+ export class SessionTurnService {
55
+ private readonly session_id: string;
56
+ private readonly executor: Executor;
57
+ private readonly state_service: SessionStateService;
58
+ private readonly event_hub: SessionEventHub;
59
+ private readonly prompt_runtime: SessionPromptRuntime;
60
+
61
+ constructor(options: SessionTurnServiceOptions) {
62
+ this.session_id = options.session_id;
63
+ this.executor = options.executor;
64
+ this.state_service = options.state_service;
65
+ this.event_hub = options.event_hub;
66
+ this.prompt_runtime = new SessionPromptRuntime({
67
+ sessionId: this.session_id,
68
+ publish: (event) => {
69
+ this.publish_event(event);
70
+ },
71
+ createAndPersistUserMessage: async (input) => {
72
+ return await this.state_service.create_and_persist_user_prompt_message(
73
+ input,
74
+ );
75
+ },
76
+ executeTurn: async ({ turnId, promptInput, onStepMerge }) => {
77
+ return await this.execute_prompt_turn({
78
+ turnId,
79
+ promptInput,
80
+ onStepMerge,
81
+ });
82
+ },
83
+ });
84
+ }
85
+
86
+ /**
87
+ * 发布一条 session 事件。
88
+ */
89
+ publish_event(event: AgentSessionEvent): void {
90
+ this.event_hub.publish(event);
91
+ }
92
+
93
+ /**
94
+ * 订阅当前 session 的未来事件。
95
+ */
96
+ subscribe(subscriber: AgentSessionSubscriber): AgentSessionUnsubscribe {
97
+ return this.event_hub.subscribe(subscriber);
98
+ }
99
+
100
+ /**
101
+ * 判断当前 turn 调度器是否活跃。
102
+ */
103
+ is_prompt_runtime_active(): boolean {
104
+ return this.prompt_runtime.isActive();
105
+ }
106
+
107
+ /**
108
+ * 追加一条新的 Session prompt。
109
+ */
110
+ async prompt(input: AgentSessionPromptInput): Promise<AgentSessionTurnHandle> {
111
+ const query = String(input.query || "").trim();
112
+ if (!query) {
113
+ throw new Error("session.prompt requires a non-empty query");
114
+ }
115
+ await this.state_service.ensure_runnable();
116
+ return await this.prompt_runtime.prompt({
117
+ query,
118
+ });
119
+ }
120
+
121
+ /**
122
+ * 执行单轮 prompt turn。
123
+ */
124
+ private async execute_prompt_turn(input: {
125
+ turnId: string;
126
+ promptInput: AgentSessionPromptInput;
127
+ onStepMerge: () => Promise<SessionUserMessageV1[]>;
128
+ }): Promise<{
129
+ text: string;
130
+ success: boolean;
131
+ assistantMessage: SessionMessageV1;
132
+ error?: string;
133
+ }> {
134
+ const tool_name_by_call_id = new Map<string, string>();
135
+ const run_context: SessionRunContext = {
136
+ sessionId: this.session_id,
137
+ onStepCallback: input.onStepMerge,
138
+ onAssistantStepCallback: async (step) => {
139
+ this.publish_event({
140
+ type: "assistant-step",
141
+ turnId: input.turnId,
142
+ text: step.text,
143
+ stepIndex: step.stepIndex,
144
+ ...(step.visibility ? { visibility: step.visibility } : {}),
145
+ });
146
+ },
147
+ onUiMessageChunkCallback: async (chunk) => {
148
+ if (chunk.type === "tool-input-start") {
149
+ tool_name_by_call_id.set(chunk.toolCallId, chunk.toolName);
150
+ return;
151
+ }
152
+ const event = mapUiMessageChunkToAgentEvent(chunk);
153
+ if (!event) return;
154
+ const resolved_event =
155
+ (
156
+ event.type === "tool-result" ||
157
+ event.type === "tool-error"
158
+ ) &&
159
+ event.toolName === "unknown"
160
+ ? {
161
+ ...event,
162
+ toolName:
163
+ tool_name_by_call_id.get(event.toolCallId) || event.toolName,
164
+ }
165
+ : event;
166
+ if (
167
+ resolved_event.type === "tool-call" ||
168
+ resolved_event.type === "tool-error"
169
+ ) {
170
+ tool_name_by_call_id.set(
171
+ resolved_event.toolCallId,
172
+ resolved_event.toolName,
173
+ );
174
+ }
175
+ const session_event = mapAgentEventToSessionEvent({
176
+ event: resolved_event,
177
+ turnId: input.turnId,
178
+ });
179
+ if (session_event) {
180
+ this.publish_event(session_event);
181
+ }
182
+ },
183
+ injectedUserMessages: [],
184
+ deferredPersistedUserMessages: [],
185
+ pendingAssistantFileParts: [],
186
+ };
187
+ const result = await this.executor.run({
188
+ query: input.promptInput.query,
189
+ runContext: run_context,
190
+ });
191
+ await this.state_service.persist_assistant_result(result.assistantMessage);
192
+ await this.state_service.persist_deferred_user_messages(
193
+ result.deferredPersistedUserMessages,
194
+ );
195
+ return {
196
+ text: extractTextFromUiMessage(result.assistantMessage),
197
+ success: result.success,
198
+ assistantMessage: result.assistantMessage,
199
+ ...(result.error ? { error: result.error } : {}),
200
+ };
201
+ }
202
+ }