@downcity/agent 1.1.74 → 1.1.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/README.md +14 -17
  2. package/bin/agent/{Agent.d.ts → local/Agent.d.ts} +8 -36
  3. package/bin/agent/local/Agent.d.ts.map +1 -0
  4. package/bin/agent/{Agent.js → local/Agent.js} +45 -200
  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 +94 -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/{RemoteAgent.d.ts → remote/RemoteAgent.d.ts} +3 -3
  27. package/bin/agent/remote/RemoteAgent.d.ts.map +1 -0
  28. package/bin/agent/remote/RemoteAgent.js +58 -0
  29. package/bin/agent/remote/RemoteAgent.js.map +1 -0
  30. package/bin/agent/remote/RemoteSession.d.ts +62 -0
  31. package/bin/agent/remote/RemoteSession.d.ts.map +1 -0
  32. package/bin/agent/remote/RemoteSession.js +225 -0
  33. package/bin/agent/remote/RemoteSession.js.map +1 -0
  34. package/bin/agent/remote/RemoteTransport.d.ts +52 -0
  35. package/bin/agent/remote/RemoteTransport.d.ts.map +1 -0
  36. package/bin/agent/remote/RemoteTransport.js +9 -0
  37. package/bin/agent/remote/RemoteTransport.js.map +1 -0
  38. package/bin/agent/remote/TransportFactory.d.ts +13 -0
  39. package/bin/agent/remote/TransportFactory.d.ts.map +1 -0
  40. package/bin/agent/remote/TransportFactory.js +22 -0
  41. package/bin/agent/remote/TransportFactory.js.map +1 -0
  42. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +35 -0
  43. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -0
  44. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +259 -0
  45. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -0
  46. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +34 -0
  47. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -0
  48. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +66 -0
  49. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +1 -0
  50. package/bin/executor/Executor.d.ts +4 -0
  51. package/bin/executor/Executor.d.ts.map +1 -1
  52. package/bin/executor/Executor.js +52 -35
  53. package/bin/executor/Executor.js.map +1 -1
  54. package/bin/executor/composer/history/SessionHistoryWriter.js +2 -2
  55. package/bin/executor/composer/history/SessionHistoryWriter.js.map +1 -1
  56. package/bin/executor/messages/AssistantResultPersistence.d.ts +3 -3
  57. package/bin/executor/messages/AssistantResultPersistence.d.ts.map +1 -1
  58. package/bin/executor/messages/AssistantResultPersistence.js +2 -6
  59. package/bin/executor/messages/AssistantResultPersistence.js.map +1 -1
  60. package/bin/executor/messages/SessionStepEventMapper.d.ts +7 -8
  61. package/bin/executor/messages/SessionStepEventMapper.d.ts.map +1 -1
  62. package/bin/executor/messages/SessionStepEventMapper.js +55 -86
  63. package/bin/executor/messages/SessionStepEventMapper.js.map +1 -1
  64. package/bin/executor/messages/UserVisibleText.d.ts +2 -10
  65. package/bin/executor/messages/UserVisibleText.d.ts.map +1 -1
  66. package/bin/executor/messages/UserVisibleText.js +3 -16
  67. package/bin/executor/messages/UserVisibleText.js.map +1 -1
  68. package/bin/executor/store/history/SessionHistoryStore.d.ts +12 -0
  69. package/bin/executor/store/history/SessionHistoryStore.d.ts.map +1 -1
  70. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts +12 -0
  71. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +1 -1
  72. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +145 -8
  73. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +1 -1
  74. package/bin/executor/tools/shell/ShellToolFormatting.d.ts +1 -10
  75. package/bin/executor/tools/shell/ShellToolFormatting.d.ts.map +1 -1
  76. package/bin/executor/tools/shell/ShellToolFormatting.js +1 -39
  77. package/bin/executor/tools/shell/ShellToolFormatting.js.map +1 -1
  78. package/bin/executor/types/SessionHistoryPaths.d.ts +4 -0
  79. package/bin/executor/types/SessionHistoryPaths.d.ts.map +1 -1
  80. package/bin/index.d.ts +5 -5
  81. package/bin/index.d.ts.map +1 -1
  82. package/bin/index.js +3 -3
  83. package/bin/index.js.map +1 -1
  84. package/bin/plugin/core/PluginCommandRequest.d.ts +1 -1
  85. package/bin/plugin/core/PluginCommandRequest.js +1 -1
  86. package/bin/plugin/core/PluginLocalExecution.js +1 -1
  87. package/bin/plugin/core/PluginLocalExecution.js.map +1 -1
  88. package/bin/plugin/core/ProjectConfigStore.d.ts +3 -2
  89. package/bin/plugin/core/ProjectConfigStore.d.ts.map +1 -1
  90. package/bin/plugin/core/ProjectConfigStore.js +3 -4
  91. package/bin/plugin/core/ProjectConfigStore.js.map +1 -1
  92. package/bin/plugin/types/Plugin.d.ts +10 -842
  93. package/bin/plugin/types/Plugin.d.ts.map +1 -1
  94. package/bin/plugin/types/Plugin.js +3 -4
  95. package/bin/plugin/types/Plugin.js.map +1 -1
  96. package/bin/plugin/types/PluginState.d.ts +1 -1
  97. package/bin/plugin/types/PluginState.d.ts.map +1 -1
  98. package/bin/rpc/Client.d.ts +2 -99
  99. package/bin/rpc/Client.d.ts.map +1 -1
  100. package/bin/rpc/Client.js +0 -46
  101. package/bin/rpc/Client.js.map +1 -1
  102. package/bin/rpc/Server.d.ts +5 -21
  103. package/bin/rpc/Server.d.ts.map +1 -1
  104. package/bin/rpc/Server.js +30 -315
  105. package/bin/rpc/Server.js.map +1 -1
  106. package/bin/rpc/server/InternalHandlers.d.ts +21 -0
  107. package/bin/rpc/server/InternalHandlers.d.ts.map +1 -0
  108. package/bin/rpc/server/InternalHandlers.js +190 -0
  109. package/bin/rpc/server/InternalHandlers.js.map +1 -0
  110. package/bin/rpc/server/RequestDispatcher.d.ts +27 -0
  111. package/bin/rpc/server/RequestDispatcher.d.ts.map +1 -0
  112. package/bin/rpc/server/RequestDispatcher.js +38 -0
  113. package/bin/rpc/server/RequestDispatcher.js.map +1 -0
  114. package/bin/rpc/server/SdkSessionHandlers.d.ts +25 -0
  115. package/bin/rpc/server/SdkSessionHandlers.d.ts.map +1 -0
  116. package/bin/rpc/server/SdkSessionHandlers.js +86 -0
  117. package/bin/rpc/server/SdkSessionHandlers.js.map +1 -0
  118. package/bin/rpc/server/ServerTypes.d.ts +59 -0
  119. package/bin/rpc/server/ServerTypes.d.ts.map +1 -0
  120. package/bin/rpc/server/ServerTypes.js +9 -0
  121. package/bin/rpc/server/ServerTypes.js.map +1 -0
  122. package/bin/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.d.ts +1 -1
  123. package/bin/sandbox/MacOsSeatbeltSandbox.d.ts.map +1 -0
  124. package/bin/sandbox/MacOsSeatbeltSandbox.js.map +1 -0
  125. package/bin/{runtime/sandbox → sandbox}/SandboxConfigResolver.d.ts +2 -2
  126. package/bin/sandbox/SandboxConfigResolver.d.ts.map +1 -0
  127. package/bin/sandbox/SandboxConfigResolver.js.map +1 -0
  128. package/bin/{runtime/sandbox → sandbox}/SandboxRunner.d.ts +2 -2
  129. package/bin/sandbox/SandboxRunner.d.ts.map +1 -0
  130. package/bin/{runtime/sandbox → sandbox}/SandboxRunner.js +2 -2
  131. package/bin/sandbox/SandboxRunner.js.map +1 -0
  132. package/bin/sandbox/types/Sandbox.d.ts.map +1 -0
  133. package/bin/sandbox/types/Sandbox.js.map +1 -0
  134. package/bin/{runtime/sandbox → sandbox}/types/SandboxRuntime.d.ts +2 -2
  135. package/bin/sandbox/types/SandboxRuntime.d.ts.map +1 -0
  136. package/bin/sandbox/types/SandboxRuntime.js.map +1 -0
  137. package/bin/session/Session.d.ts.map +1 -1
  138. package/bin/session/Session.js +2 -1
  139. package/bin/session/Session.js.map +1 -1
  140. package/bin/session/browse/Browse.d.ts +1 -1
  141. package/bin/session/browse/Browse.d.ts.map +1 -1
  142. package/bin/session/browse/Browse.js +28 -13
  143. package/bin/session/browse/Browse.js.map +1 -1
  144. package/bin/session/index.d.ts +1 -1
  145. package/bin/session/index.d.ts.map +1 -1
  146. package/bin/session/index.js +1 -1
  147. package/bin/session/index.js.map +1 -1
  148. package/bin/session/storage/Paths.d.ts +9 -0
  149. package/bin/session/storage/Paths.d.ts.map +1 -1
  150. package/bin/session/storage/Paths.js +11 -0
  151. package/bin/session/storage/Paths.js.map +1 -1
  152. package/bin/types/agent/AgentOptions.d.ts +134 -0
  153. package/bin/types/agent/AgentOptions.d.ts.map +1 -0
  154. package/bin/types/agent/AgentOptions.js +9 -0
  155. package/bin/types/agent/AgentOptions.js.map +1 -0
  156. package/bin/types/{runtime/host/AgentHost.d.ts → agent/AgentRuntimeAssembly.d.ts} +4 -4
  157. package/bin/types/agent/AgentRuntimeAssembly.d.ts.map +1 -0
  158. package/bin/types/{runtime/host/AgentHost.js → agent/AgentRuntimeAssembly.js} +3 -3
  159. package/bin/types/agent/AgentRuntimeAssembly.js.map +1 -0
  160. package/bin/types/agent/AgentTypes.d.ts +8 -613
  161. package/bin/types/agent/AgentTypes.d.ts.map +1 -1
  162. package/bin/types/agent/AgentTypes.js +4 -4
  163. package/bin/types/agent/RemoteAgentOptions.d.ts +28 -0
  164. package/bin/types/agent/RemoteAgentOptions.d.ts.map +1 -0
  165. package/bin/types/agent/RemoteAgentOptions.js +9 -0
  166. package/bin/types/agent/RemoteAgentOptions.js.map +1 -0
  167. package/bin/types/agent/SessionActor.d.ts +60 -0
  168. package/bin/types/agent/SessionActor.d.ts.map +1 -0
  169. package/bin/types/agent/SessionActor.js +9 -0
  170. package/bin/types/agent/SessionActor.js.map +1 -0
  171. package/bin/types/agent/SessionTypes.d.ts +312 -0
  172. package/bin/types/agent/SessionTypes.d.ts.map +1 -0
  173. package/bin/types/agent/SessionTypes.js +9 -0
  174. package/bin/types/agent/SessionTypes.js.map +1 -0
  175. package/bin/types/config/DowncityConfig.d.ts +1 -1
  176. package/bin/types/config/DowncityConfig.d.ts.map +1 -1
  177. package/bin/types/{runtime/host → platform}/Store.d.ts +1 -1
  178. package/bin/types/platform/Store.d.ts.map +1 -0
  179. package/bin/types/{runtime/host → platform}/Store.js +1 -1
  180. package/bin/types/platform/Store.js.map +1 -0
  181. package/bin/types/plugin/PluginAction.d.ts +119 -0
  182. package/bin/types/plugin/PluginAction.d.ts.map +1 -0
  183. package/bin/types/plugin/PluginAction.js +9 -0
  184. package/bin/types/plugin/PluginAction.js.map +1 -0
  185. package/bin/types/plugin/PluginCommand.d.ts +80 -0
  186. package/bin/types/plugin/PluginCommand.d.ts.map +1 -0
  187. package/bin/types/plugin/PluginCommand.js +9 -0
  188. package/bin/types/plugin/PluginCommand.js.map +1 -0
  189. package/bin/types/plugin/PluginDefinition.d.ts +57 -0
  190. package/bin/types/plugin/PluginDefinition.d.ts.map +1 -0
  191. package/bin/types/plugin/PluginDefinition.js +9 -0
  192. package/bin/types/plugin/PluginDefinition.js.map +1 -0
  193. package/bin/types/plugin/PluginHttp.d.ts +34 -0
  194. package/bin/types/plugin/PluginHttp.d.ts.map +1 -0
  195. package/bin/types/plugin/PluginHttp.js +9 -0
  196. package/bin/types/plugin/PluginHttp.js.map +1 -0
  197. package/bin/types/plugin/PluginRuntime.d.ts +148 -0
  198. package/bin/types/plugin/PluginRuntime.d.ts.map +1 -0
  199. package/bin/types/plugin/PluginRuntime.js +9 -0
  200. package/bin/types/plugin/PluginRuntime.js.map +1 -0
  201. package/bin/types/plugin/PluginSetup.d.ts +133 -0
  202. package/bin/types/plugin/PluginSetup.d.ts.map +1 -0
  203. package/bin/types/plugin/PluginSetup.js +9 -0
  204. package/bin/types/plugin/PluginSetup.js.map +1 -0
  205. package/bin/types/plugin/PluginState.d.ts +69 -0
  206. package/bin/types/plugin/PluginState.d.ts.map +1 -0
  207. package/bin/types/plugin/PluginState.js +9 -0
  208. package/bin/types/plugin/PluginState.js.map +1 -0
  209. package/bin/types/rpc/RpcProtocol.d.ts +323 -0
  210. package/bin/types/rpc/RpcProtocol.d.ts.map +1 -0
  211. package/bin/types/rpc/RpcProtocol.js +10 -0
  212. package/bin/types/rpc/RpcProtocol.js.map +1 -0
  213. package/bin/types/runtime/agent/AgentContext.d.ts +1 -1
  214. package/bin/types/runtime/agent/AgentContext.d.ts.map +1 -1
  215. package/bin/types/runtime/agent/AgentRuntime.d.ts +1 -1
  216. package/bin/types/runtime/agent/AgentRuntime.d.ts.map +1 -1
  217. package/package.json +2 -2
  218. package/scripts/session-history-inflight.test.mjs +146 -0
  219. package/src/agent/{Agent.ts → local/Agent.ts} +50 -228
  220. package/src/agent/local/AgentInstructions.ts +68 -0
  221. package/src/agent/local/AgentPluginFactory.ts +83 -0
  222. package/src/{runtime/host/AgentHostRuntime.ts → agent/local/AgentRuntimeAssembly.ts} +2 -2
  223. package/src/agent/local/AgentRuntimeFactory.ts +173 -0
  224. package/src/{runtime/host → agent/local}/ProjectSetup.ts +1 -1
  225. package/src/agent/remote/RemoteAgent.ts +76 -0
  226. package/src/agent/remote/RemoteSession.ts +287 -0
  227. package/src/agent/remote/RemoteTransport.ts +71 -0
  228. package/src/agent/remote/TransportFactory.ts +29 -0
  229. package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +347 -0
  230. package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +107 -0
  231. package/src/executor/Executor.ts +56 -37
  232. package/src/executor/composer/history/SessionHistoryWriter.ts +2 -2
  233. package/src/executor/messages/AssistantResultPersistence.ts +4 -12
  234. package/src/executor/messages/SessionStepEventMapper.ts +59 -101
  235. package/src/executor/messages/UserVisibleText.ts +3 -18
  236. package/src/executor/store/history/SessionHistoryStore.ts +15 -0
  237. package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +164 -11
  238. package/src/executor/tools/shell/ShellToolFormatting.ts +1 -50
  239. package/src/executor/types/SessionHistoryPaths.ts +5 -0
  240. package/src/index.ts +5 -5
  241. package/src/plugin/core/PluginCommandRequest.ts +1 -1
  242. package/src/plugin/core/PluginLocalExecution.ts +1 -1
  243. package/src/plugin/core/ProjectConfigStore.ts +4 -4
  244. package/src/plugin/types/Plugin.ts +54 -913
  245. package/src/plugin/types/PluginState.ts +1 -1
  246. package/src/rpc/Client.ts +16 -322
  247. package/src/rpc/Server.ts +39 -565
  248. package/src/rpc/server/InternalHandlers.ts +230 -0
  249. package/src/rpc/server/RequestDispatcher.ts +67 -0
  250. package/src/rpc/server/SdkSessionHandlers.ts +106 -0
  251. package/src/rpc/server/ServerTypes.ts +65 -0
  252. package/src/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.ts +1 -1
  253. package/src/{runtime/sandbox → sandbox}/SandboxConfigResolver.ts +1 -1
  254. package/src/{runtime/sandbox → sandbox}/SandboxRunner.ts +3 -3
  255. package/src/{runtime/sandbox → sandbox}/types/SandboxRuntime.ts +2 -2
  256. package/src/session/Session.ts +6 -0
  257. package/src/session/browse/Browse.ts +29 -10
  258. package/src/session/index.ts +1 -0
  259. package/src/session/storage/Paths.ts +19 -0
  260. package/src/types/agent/AgentOptions.ts +147 -0
  261. package/src/types/{runtime/host/AgentHost.ts → agent/AgentRuntimeAssembly.ts} +2 -2
  262. package/src/types/agent/AgentTypes.ts +37 -709
  263. package/src/types/agent/RemoteAgentOptions.ts +29 -0
  264. package/src/types/agent/SessionActor.ts +88 -0
  265. package/src/types/agent/SessionTypes.ts +334 -0
  266. package/src/types/config/DowncityConfig.ts +1 -1
  267. package/src/types/{runtime/host → platform}/Store.ts +1 -1
  268. package/src/types/plugin/PluginAction.ts +133 -0
  269. package/src/types/plugin/PluginCommand.ts +89 -0
  270. package/src/types/plugin/PluginDefinition.ts +74 -0
  271. package/src/types/plugin/PluginHttp.ts +36 -0
  272. package/src/types/plugin/PluginRuntime.ts +169 -0
  273. package/src/types/plugin/PluginSetup.ts +138 -0
  274. package/src/types/plugin/PluginState.ts +82 -0
  275. package/src/types/rpc/RpcProtocol.ts +361 -0
  276. package/src/types/runtime/agent/AgentContext.ts +1 -1
  277. package/src/types/runtime/agent/AgentRuntime.ts +1 -1
  278. package/tsconfig.tsbuildinfo +1 -1
  279. package/bin/agent/Agent.d.ts.map +0 -1
  280. package/bin/agent/Agent.js.map +0 -1
  281. package/bin/agent/RemoteAgent.d.ts.map +0 -1
  282. package/bin/agent/RemoteAgent.js +0 -585
  283. package/bin/agent/RemoteAgent.js.map +0 -1
  284. package/bin/runtime/auth/AuthEnv.d.ts +0 -36
  285. package/bin/runtime/auth/AuthEnv.d.ts.map +0 -1
  286. package/bin/runtime/auth/AuthEnv.js +0 -54
  287. package/bin/runtime/auth/AuthEnv.js.map +0 -1
  288. package/bin/runtime/auth/CliAuthStateStore.d.ts +0 -29
  289. package/bin/runtime/auth/CliAuthStateStore.d.ts.map +0 -1
  290. package/bin/runtime/auth/CliAuthStateStore.js +0 -26
  291. package/bin/runtime/auth/CliAuthStateStore.js.map +0 -1
  292. package/bin/runtime/control/AuthControlService.d.ts +0 -34
  293. package/bin/runtime/control/AuthControlService.d.ts.map +0 -1
  294. package/bin/runtime/control/AuthControlService.js +0 -129
  295. package/bin/runtime/control/AuthControlService.js.map +0 -1
  296. package/bin/runtime/control/CommonHelpers.d.ts +0 -36
  297. package/bin/runtime/control/CommonHelpers.d.ts.map +0 -1
  298. package/bin/runtime/control/CommonHelpers.js +0 -63
  299. package/bin/runtime/control/CommonHelpers.js.map +0 -1
  300. package/bin/runtime/control/ExecuteBySession.d.ts +0 -30
  301. package/bin/runtime/control/ExecuteBySession.d.ts.map +0 -1
  302. package/bin/runtime/control/ExecuteBySession.js +0 -41
  303. package/bin/runtime/control/ExecuteBySession.js.map +0 -1
  304. package/bin/runtime/control/ExecuteInput.d.ts +0 -18
  305. package/bin/runtime/control/ExecuteInput.d.ts.map +0 -1
  306. package/bin/runtime/control/ExecuteInput.js +0 -201
  307. package/bin/runtime/control/ExecuteInput.js.map +0 -1
  308. package/bin/runtime/control/Helpers.d.ts +0 -13
  309. package/bin/runtime/control/Helpers.d.ts.map +0 -1
  310. package/bin/runtime/control/Helpers.js +0 -13
  311. package/bin/runtime/control/Helpers.js.map +0 -1
  312. package/bin/runtime/control/MessageTimeline.d.ts +0 -22
  313. package/bin/runtime/control/MessageTimeline.d.ts.map +0 -1
  314. package/bin/runtime/control/MessageTimeline.js +0 -226
  315. package/bin/runtime/control/MessageTimeline.js.map +0 -1
  316. package/bin/runtime/control/SessionSummaryStore.d.ts +0 -20
  317. package/bin/runtime/control/SessionSummaryStore.d.ts.map +0 -1
  318. package/bin/runtime/control/SessionSummaryStore.js +0 -50
  319. package/bin/runtime/control/SessionSummaryStore.js.map +0 -1
  320. package/bin/runtime/control/TaskStore.d.ts +0 -33
  321. package/bin/runtime/control/TaskStore.d.ts.map +0 -1
  322. package/bin/runtime/control/TaskStore.js +0 -175
  323. package/bin/runtime/control/TaskStore.js.map +0 -1
  324. package/bin/runtime/control/types/AuthControl.d.ts +0 -30
  325. package/bin/runtime/control/types/AuthControl.d.ts.map +0 -1
  326. package/bin/runtime/control/types/AuthControl.js +0 -9
  327. package/bin/runtime/control/types/AuthControl.js.map +0 -1
  328. package/bin/runtime/control/types/ControlSessionExecute.d.ts +0 -85
  329. package/bin/runtime/control/types/ControlSessionExecute.d.ts.map +0 -1
  330. package/bin/runtime/control/types/ControlSessionExecute.js +0 -9
  331. package/bin/runtime/control/types/ControlSessionExecute.js.map +0 -1
  332. package/bin/runtime/control/types/ControlViewData.d.ts +0 -320
  333. package/bin/runtime/control/types/ControlViewData.d.ts.map +0 -1
  334. package/bin/runtime/control/types/ControlViewData.js +0 -9
  335. package/bin/runtime/control/types/ControlViewData.js.map +0 -1
  336. package/bin/runtime/host/AgentHostRuntime.d.ts.map +0 -1
  337. package/bin/runtime/host/AgentHostRuntime.js.map +0 -1
  338. package/bin/runtime/host/ProjectSetup.d.ts.map +0 -1
  339. package/bin/runtime/host/ProjectSetup.js.map +0 -1
  340. package/bin/runtime/sandbox/MacOsSeatbeltSandbox.d.ts.map +0 -1
  341. package/bin/runtime/sandbox/MacOsSeatbeltSandbox.js.map +0 -1
  342. package/bin/runtime/sandbox/SandboxConfigResolver.d.ts.map +0 -1
  343. package/bin/runtime/sandbox/SandboxConfigResolver.js.map +0 -1
  344. package/bin/runtime/sandbox/SandboxRunner.d.ts.map +0 -1
  345. package/bin/runtime/sandbox/SandboxRunner.js.map +0 -1
  346. package/bin/runtime/sandbox/types/Sandbox.d.ts.map +0 -1
  347. package/bin/runtime/sandbox/types/Sandbox.js.map +0 -1
  348. package/bin/runtime/sandbox/types/SandboxRuntime.d.ts.map +0 -1
  349. package/bin/runtime/sandbox/types/SandboxRuntime.js.map +0 -1
  350. package/bin/types/runtime/host/AgentHost.d.ts.map +0 -1
  351. package/bin/types/runtime/host/AgentHost.js.map +0 -1
  352. package/bin/types/runtime/host/Store.d.ts.map +0 -1
  353. package/bin/types/runtime/host/Store.js.map +0 -1
  354. package/src/agent/RemoteAgent.ts +0 -834
  355. package/src/runtime/auth/AuthEnv.ts +0 -62
  356. package/src/runtime/auth/CliAuthStateStore.ts +0 -46
  357. package/src/runtime/control/AuthControlService.ts +0 -169
  358. package/src/runtime/control/CommonHelpers.ts +0 -69
  359. package/src/runtime/control/ExecuteBySession.ts +0 -52
  360. package/src/runtime/control/ExecuteInput.ts +0 -236
  361. package/src/runtime/control/Helpers.ts +0 -22
  362. package/src/runtime/control/MessageTimeline.ts +0 -269
  363. package/src/runtime/control/SessionSummaryStore.ts +0 -72
  364. package/src/runtime/control/TaskStore.ts +0 -242
  365. package/src/runtime/control/types/AuthControl.ts +0 -34
  366. package/src/runtime/control/types/ControlSessionExecute.ts +0 -99
  367. package/src/runtime/control/types/ControlViewData.ts +0 -392
  368. /package/bin/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.js +0 -0
  369. /package/bin/{runtime/sandbox → sandbox}/SandboxConfigResolver.js +0 -0
  370. /package/bin/{runtime/sandbox → sandbox}/types/Sandbox.d.ts +0 -0
  371. /package/bin/{runtime/sandbox → sandbox}/types/Sandbox.js +0 -0
  372. /package/bin/{runtime/sandbox → sandbox}/types/SandboxRuntime.js +0 -0
  373. /package/src/{runtime/sandbox → sandbox}/types/Sandbox.ts +0 -0
@@ -0,0 +1,230 @@
1
+ /**
2
+ * RPC internal handlers。
3
+ *
4
+ * 关键点(中文)
5
+ * - 只处理 `internal.*` 方法。
6
+ * - 这些方法服务 Town 本机管理通道,不属于 RemoteAgent 的用户 SDK 面。
7
+ */
8
+
9
+ import fs from "fs-extra";
10
+ import { dirname } from "node:path";
11
+ import type { SystemModelMessage } from "ai";
12
+ import type { AgentContext } from "@/types/runtime/agent/AgentContext.js";
13
+ import type { AgentRuntime } from "@/types/runtime/agent/AgentRuntime.js";
14
+ import type { RpcRequest } from "@/types/rpc/RpcProtocol.js";
15
+ import type {
16
+ RpcRequestHandlerOptions,
17
+ RpcWriteSuccess,
18
+ } from "@/rpc/server/ServerTypes.js";
19
+ import {
20
+ getDowncityChatHistoryPath,
21
+ getDowncitySessionMessagesPath,
22
+ } from "@/config/Paths.js";
23
+ import { resolveSessionSystemMessages } from "@/executor/composer/system/default/SystemDomain.js";
24
+ import {
25
+ controlPluginState,
26
+ listPluginStates,
27
+ } from "@/plugin/core/PluginStateController.js";
28
+ import { parsePluginCommandRequestBody } from "@/plugin/core/PluginCommandRequest.js";
29
+ import { runPluginCommand } from "@/plugin/core/PluginActionRunner.js";
30
+
31
+ /**
32
+ * 处理 internal RPC 请求。
33
+ */
34
+ export async function handleInternalRpcRequest(params: {
35
+ /** 当前 RPC 请求。 */
36
+ request: RpcRequest;
37
+ /** handler 依赖。 */
38
+ options: RpcRequestHandlerOptions;
39
+ /** 成功帧写入函数。 */
40
+ write_success: RpcWriteSuccess;
41
+ }): Promise<boolean> {
42
+ const { request, options, write_success } = params;
43
+
44
+ switch (request.method) {
45
+ case "internal.status.get": {
46
+ write_success(request.id, { status: "ok" });
47
+ return true;
48
+ }
49
+ case "internal.sessions.clear_messages": {
50
+ const runtime = requireAgentRuntime(options);
51
+ const session_id = String(request.params.sessionId || "").trim();
52
+ if (!session_id) throw new Error("Missing sessionId");
53
+ const messages_path = getDowncitySessionMessagesPath(
54
+ runtime.rootPath,
55
+ runtime.paths.agentId,
56
+ session_id,
57
+ );
58
+ await fs.remove(dirname(messages_path));
59
+ runtime.getSession(session_id).clearExecutor();
60
+ write_success(request.id, {
61
+ sessionId: session_id,
62
+ cleared: true,
63
+ });
64
+ return true;
65
+ }
66
+ case "internal.sessions.clear_chat_history": {
67
+ const runtime = requireAgentRuntime(options);
68
+ const session_id = String(request.params.sessionId || "").trim();
69
+ if (!session_id) throw new Error("Missing sessionId");
70
+ await fs.remove(getDowncityChatHistoryPath(runtime.rootPath, session_id));
71
+ write_success(request.id, {
72
+ sessionId: session_id,
73
+ cleared: true,
74
+ });
75
+ return true;
76
+ }
77
+ case "internal.sessions.resolve_system_prompt": {
78
+ const runtime = requireAgentRuntime(options);
79
+ const context = requireAgentContext(options);
80
+ const session_id =
81
+ String(request.params.sessionId || "").trim() || "consoleui-chat-main";
82
+ const system_messages = await resolveSessionSystemMessages({
83
+ projectRoot: runtime.rootPath,
84
+ sessionId: session_id,
85
+ profile: "chat",
86
+ staticSystemPrompts: runtime.systems,
87
+ context,
88
+ });
89
+ write_success(request.id, {
90
+ sessionId: session_id,
91
+ ...toSystemPromptPayload(system_messages),
92
+ });
93
+ return true;
94
+ }
95
+ case "internal.plugins.catalog": {
96
+ const context = requireAgentContext(options);
97
+ write_success(request.id, {
98
+ plugins: context.plugins.list(),
99
+ });
100
+ return true;
101
+ }
102
+ case "internal.plugins.list": {
103
+ const context = requireAgentContext(options);
104
+ write_success(request.id, {
105
+ plugins: listPluginStates({ context }),
106
+ });
107
+ return true;
108
+ }
109
+ case "internal.plugins.control": {
110
+ const context = requireAgentContext(options);
111
+ const result = await controlPluginState({
112
+ pluginName: request.params.pluginName,
113
+ action: request.params.action,
114
+ context,
115
+ });
116
+ write_success(request.id, result);
117
+ return true;
118
+ }
119
+ case "internal.plugins.command": {
120
+ const context = requireAgentContext(options);
121
+ const body = parsePluginCommandRequestBody(request.params);
122
+ const result = await runPluginCommand({
123
+ pluginName: body.pluginName,
124
+ command: body.command,
125
+ payload: body.payload,
126
+ schedule: body.schedule,
127
+ context,
128
+ });
129
+ write_success(request.id, result);
130
+ return true;
131
+ }
132
+ case "internal.plugins.availability": {
133
+ const context = requireAgentContext(options);
134
+ const availability = await context.plugins.availability(
135
+ request.params.pluginName,
136
+ );
137
+ write_success(request.id, {
138
+ pluginName: request.params.pluginName,
139
+ availability,
140
+ });
141
+ return true;
142
+ }
143
+ case "internal.plugins.action": {
144
+ const context = requireAgentContext(options);
145
+ const result = await context.plugins.runAction({
146
+ plugin: request.params.pluginName,
147
+ action: request.params.actionName,
148
+ payload: request.params.payload,
149
+ });
150
+ write_success(request.id, {
151
+ ...result,
152
+ pluginName: request.params.pluginName,
153
+ actionName: request.params.actionName,
154
+ });
155
+ return true;
156
+ }
157
+ default:
158
+ return false;
159
+ }
160
+ }
161
+
162
+ function requireAgentContext(options: RpcRequestHandlerOptions): AgentContext {
163
+ const context = options.getAgentContext?.();
164
+ if (!context) {
165
+ throw new Error("Agent RPC server was started without AgentContext");
166
+ }
167
+ return context;
168
+ }
169
+
170
+ function requireAgentRuntime(options: RpcRequestHandlerOptions): AgentRuntime {
171
+ const runtime = options.getAgentRuntime?.();
172
+ if (!runtime) {
173
+ throw new Error("Agent RPC server was started without AgentRuntime");
174
+ }
175
+ return runtime;
176
+ }
177
+
178
+ function normalizeSystemText(input: string | null | undefined): string {
179
+ return String(input || "").trim();
180
+ }
181
+
182
+ function toSystemMessageText(message: SystemModelMessage): string {
183
+ const content = message.content as unknown;
184
+ if (typeof content === "string") return normalizeSystemText(content);
185
+ if (!Array.isArray(content)) return "";
186
+ const parts = content as Array<{ text?: unknown }>;
187
+ const texts: string[] = [];
188
+ for (const part of parts) {
189
+ if (!part || typeof part !== "object") continue;
190
+ const text = normalizeSystemText(String(part.text || ""));
191
+ if (!text) continue;
192
+ texts.push(text);
193
+ }
194
+ return texts.join("\n").trim();
195
+ }
196
+
197
+ /**
198
+ * 把 system messages 转成 Console/Town 可直接渲染的结构。
199
+ */
200
+ function toSystemPromptPayload(messages: SystemModelMessage[]): {
201
+ sections: Array<{
202
+ key: string;
203
+ title: string;
204
+ items: Array<{ index: number; content: string }>;
205
+ }>;
206
+ totalMessages: number;
207
+ totalChars: number;
208
+ } {
209
+ const items = messages
210
+ .map((message, index) => ({
211
+ index: index + 1,
212
+ content: toSystemMessageText(message),
213
+ }))
214
+ .filter((item) => item.content);
215
+ const totalChars = items.reduce(
216
+ (acc, item) => acc + String(item.content || "").length,
217
+ 0,
218
+ );
219
+ return {
220
+ sections: [
221
+ {
222
+ key: "resolved",
223
+ title: "Resolved System Messages",
224
+ items,
225
+ },
226
+ ],
227
+ totalMessages: items.length,
228
+ totalChars,
229
+ };
230
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * RPC request dispatcher。
3
+ *
4
+ * 关键点(中文)
5
+ * - Server.ts 不直接包含业务 switch,只负责把已解析请求交给这里。
6
+ * - dispatcher 按命名空间分发,避免 SDK 与 Town internal 方法混在一起。
7
+ */
8
+
9
+ import type { RpcRequest } from "@/types/rpc/RpcProtocol.js";
10
+ import type {
11
+ RpcRequestHandlerOptions,
12
+ RpcSocketSubscription,
13
+ RpcWriteError,
14
+ RpcWriteEvent,
15
+ RpcWriteSuccess,
16
+ } from "@/rpc/server/ServerTypes.js";
17
+ import { handleSdkSessionRpcRequest } from "@/rpc/server/SdkSessionHandlers.js";
18
+ import { handleInternalRpcRequest } from "@/rpc/server/InternalHandlers.js";
19
+
20
+ /**
21
+ * 分发并执行单个 RPC 请求。
22
+ */
23
+ export async function dispatchRpcRequest(params: {
24
+ /** 当前 RPC 请求。 */
25
+ request: RpcRequest;
26
+ /** handler 依赖。 */
27
+ options: RpcRequestHandlerOptions;
28
+ /** 当前 socket 的订阅表。 */
29
+ subscriptions: Map<string, RpcSocketSubscription>;
30
+ /** 成功帧写入函数。 */
31
+ write_success: RpcWriteSuccess;
32
+ /** 失败帧写入函数。 */
33
+ write_error: RpcWriteError;
34
+ /** 事件帧写入函数。 */
35
+ write_event: RpcWriteEvent;
36
+ }): Promise<void> {
37
+ const {
38
+ request,
39
+ options,
40
+ subscriptions,
41
+ write_success,
42
+ write_error,
43
+ write_event,
44
+ } = params;
45
+
46
+ try {
47
+ const handled_by_sdk = await handleSdkSessionRpcRequest({
48
+ request,
49
+ options,
50
+ subscriptions,
51
+ write_success,
52
+ write_event,
53
+ });
54
+ if (handled_by_sdk) return;
55
+
56
+ const handled_by_internal = await handleInternalRpcRequest({
57
+ request,
58
+ options,
59
+ write_success,
60
+ });
61
+ if (handled_by_internal) return;
62
+
63
+ throw new Error(`Unsupported RPC method: ${request.method}`);
64
+ } catch (error) {
65
+ write_error(request.id, error);
66
+ }
67
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * RPC SDK session handlers。
3
+ *
4
+ * 关键点(中文)
5
+ * - 只处理 `sdk.sessions.*` 方法。
6
+ * - 这些方法是 RemoteAgent RPC transport 的稳定 SDK 面。
7
+ */
8
+
9
+ import type { RpcRequest } from "@/types/rpc/RpcProtocol.js";
10
+ import type {
11
+ RpcSocketSubscription,
12
+ RpcWriteEvent,
13
+ RpcWriteSuccess,
14
+ RpcRequestHandlerOptions,
15
+ } from "@/rpc/server/ServerTypes.js";
16
+
17
+ /**
18
+ * 处理 SDK session RPC 请求。
19
+ */
20
+ export async function handleSdkSessionRpcRequest(params: {
21
+ /** 当前 RPC 请求。 */
22
+ request: RpcRequest;
23
+ /** handler 依赖。 */
24
+ options: RpcRequestHandlerOptions;
25
+ /** 当前 socket 的订阅表。 */
26
+ subscriptions: Map<string, RpcSocketSubscription>;
27
+ /** 成功帧写入函数。 */
28
+ write_success: RpcWriteSuccess;
29
+ /** 事件帧写入函数。 */
30
+ write_event: RpcWriteEvent;
31
+ }): Promise<boolean> {
32
+ const { request, options, subscriptions, write_success, write_event } = params;
33
+
34
+ switch (request.method) {
35
+ case "sdk.sessions.list": {
36
+ const page = await options.sessionCollection.listSessions(request.params);
37
+ write_success(request.id, { page });
38
+ return true;
39
+ }
40
+ case "sdk.sessions.create": {
41
+ const session = await options.sessionCollection.createSession(request.params);
42
+ write_success(request.id, { session: await session.getInfo() });
43
+ return true;
44
+ }
45
+ case "sdk.sessions.get": {
46
+ const session = await options.sessionCollection.getSession(request.params.sessionId);
47
+ write_success(request.id, { session: await session.getInfo() });
48
+ return true;
49
+ }
50
+ case "sdk.sessions.prompt": {
51
+ const session = await options.sessionCollection.getSession(request.params.sessionId);
52
+ const turn = await session.prompt(request.params.input);
53
+ write_success(request.id, { turn: { id: turn.id } });
54
+ return true;
55
+ }
56
+ case "sdk.sessions.history": {
57
+ const session = await options.sessionCollection.getSession(request.params.sessionId);
58
+ const history = await session.history(request.params.input);
59
+ write_success(request.id, { history });
60
+ return true;
61
+ }
62
+ case "sdk.sessions.system": {
63
+ const session = await options.sessionCollection.getSession(request.params.sessionId);
64
+ write_success(request.id, { system: await session.system() });
65
+ return true;
66
+ }
67
+ case "sdk.sessions.fork": {
68
+ const session = await options.sessionCollection.getSession(request.params.sessionId);
69
+ const forked = await session.fork(request.params.messageId);
70
+ write_success(request.id, { session: await forked.getInfo() });
71
+ return true;
72
+ }
73
+ case "sdk.sessions.subscribe": {
74
+ const session = await options.sessionCollection.getSession(request.params.sessionId);
75
+ const subscription_id = [
76
+ request.params.sessionId,
77
+ Date.now(),
78
+ Math.random().toString(36).slice(2, 10),
79
+ ].join(":");
80
+ const unsubscribe = session.subscribe((event) => {
81
+ write_event({
82
+ type: "event",
83
+ subscriptionId: subscription_id,
84
+ event,
85
+ });
86
+ });
87
+ subscriptions.set(subscription_id, {
88
+ sessionId: request.params.sessionId,
89
+ unsubscribe,
90
+ });
91
+ write_success(request.id, { subscriptionId: subscription_id });
92
+ return true;
93
+ }
94
+ case "sdk.sessions.unsubscribe": {
95
+ const subscription = subscriptions.get(request.params.subscriptionId);
96
+ if (subscription) {
97
+ subscription.unsubscribe();
98
+ subscriptions.delete(request.params.subscriptionId);
99
+ }
100
+ write_success(request.id, { unsubscribed: true });
101
+ return true;
102
+ }
103
+ default:
104
+ return false;
105
+ }
106
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Agent RPC server 内部类型。
3
+ *
4
+ * 关键点(中文)
5
+ * - 这里描述 handler 需要的依赖,不承载 socket 生命周期。
6
+ * - Server.ts 负责网络,handler 负责把协议方法转成 Agent 操作。
7
+ */
8
+
9
+ import type { AgentSessionCollection } from "@/types/agent/AgentTypes.js";
10
+ import type { AgentContext } from "@/types/runtime/agent/AgentContext.js";
11
+ import type { AgentRuntime } from "@/types/runtime/agent/AgentRuntime.js";
12
+ import type { RpcEventFrame } from "@/types/rpc/RpcProtocol.js";
13
+
14
+ /**
15
+ * RPC Server 启动参数。
16
+ */
17
+ export interface RpcServerStartOptions {
18
+ /** RPC 服务监听端口。 */
19
+ port: number;
20
+ /** RPC 服务监听主机。 */
21
+ host: string;
22
+ /** Session 集合访问口。 */
23
+ sessionCollection: AgentSessionCollection;
24
+ /** Agent 上下文访问口。 */
25
+ getAgentContext?: () => AgentContext;
26
+ /** Agent 运行态访问口。 */
27
+ getAgentRuntime?: () => AgentRuntime;
28
+ }
29
+
30
+ /**
31
+ * RPC request handler 依赖。
32
+ */
33
+ export interface RpcRequestHandlerOptions {
34
+ /** Session 集合访问口。 */
35
+ sessionCollection: AgentSessionCollection;
36
+ /** Agent 上下文访问口。 */
37
+ getAgentContext?: () => AgentContext;
38
+ /** Agent 运行态访问口。 */
39
+ getAgentRuntime?: () => AgentRuntime;
40
+ }
41
+
42
+ /**
43
+ * 单个 socket 上的 session 订阅。
44
+ */
45
+ export interface RpcSocketSubscription {
46
+ /** 被订阅的 session id。 */
47
+ sessionId: string;
48
+ /** 取消订阅函数。 */
49
+ unsubscribe: () => void;
50
+ }
51
+
52
+ /**
53
+ * 写入 RPC 成功帧。
54
+ */
55
+ export type RpcWriteSuccess = (id: string, data?: unknown) => void;
56
+
57
+ /**
58
+ * 写入 RPC 失败帧。
59
+ */
60
+ export type RpcWriteError = (id: string, error: unknown) => void;
61
+
62
+ /**
63
+ * 写入 RPC 事件帧。
64
+ */
65
+ export type RpcWriteEvent = (frame: RpcEventFrame) => void;
@@ -13,7 +13,7 @@ import fs from "fs-extra";
13
13
  import type {
14
14
  SandboxSpawnParams,
15
15
  SandboxSpawnResult,
16
- } from "@/runtime/sandbox/types/SandboxRuntime.js";
16
+ } from "@/sandbox/types/SandboxRuntime.js";
17
17
 
18
18
  const DEFAULT_PATH_VALUE =
19
19
  "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin";
@@ -9,7 +9,7 @@
9
9
 
10
10
  import path from "node:path";
11
11
  import type { AgentContext } from "@/types/runtime/agent/AgentContext.js";
12
- import type { ResolvedSandboxConfig } from "@/runtime/sandbox/types/SandboxRuntime.js";
12
+ import type { ResolvedSandboxConfig } from "@/sandbox/types/SandboxRuntime.js";
13
13
 
14
14
  const DEFAULT_ENV_ALLOWLIST = [
15
15
  "PATH",
@@ -8,9 +8,9 @@
8
8
  */
9
9
 
10
10
  import type { AgentContext } from "@/types/runtime/agent/AgentContext.js";
11
- import type { SandboxSpawnResult } from "@/runtime/sandbox/types/SandboxRuntime.js";
12
- import { resolveSandboxConfig, resolveSandboxCwd } from "@/runtime/sandbox/SandboxConfigResolver.js";
13
- import { spawnMacOsSeatbeltSandbox } from "@/runtime/sandbox/MacOsSeatbeltSandbox.js";
11
+ import type { SandboxSpawnResult } from "@/sandbox/types/SandboxRuntime.js";
12
+ import { resolveSandboxConfig, resolveSandboxCwd } from "@/sandbox/SandboxConfigResolver.js";
13
+ import { spawnMacOsSeatbeltSandbox } from "@/sandbox/MacOsSeatbeltSandbox.js";
14
14
 
15
15
  /**
16
16
  * 启动 shell 子进程。
@@ -8,8 +8,8 @@
8
8
  */
9
9
 
10
10
  import type { ChildProcessWithoutNullStreams } from "node:child_process";
11
- import type { SandboxConfig } from "@/runtime/sandbox/types/Sandbox.js";
12
- import type { SandboxNetworkMode } from "@/runtime/sandbox/types/Sandbox.js";
11
+ import type { SandboxConfig } from "@/sandbox/types/Sandbox.js";
12
+ import type { SandboxNetworkMode } from "@/sandbox/types/Sandbox.js";
13
13
 
14
14
  /**
15
15
  * sandbox 会话状态。
@@ -40,6 +40,7 @@ import {
40
40
  import {
41
41
  getSdkAgentSessionArchiveDirPath,
42
42
  getSdkAgentSessionDirPath,
43
+ getSdkAgentSessionInflightPath,
43
44
  } from "@/session/index.js";
44
45
  import type { SessionPort } from "@/types/runtime/agent/AgentContext.js";
45
46
  import {
@@ -187,6 +188,11 @@ export class Session implements AgentSession {
187
188
  this.agentId,
188
189
  this.id,
189
190
  ),
191
+ inflightFilePath: getSdkAgentSessionInflightPath(
192
+ this.projectRoot,
193
+ this.agentId,
194
+ this.id,
195
+ ),
190
196
  },
191
197
  });
192
198
  this.historyComposer = new JsonlSessionHistoryComposer({
@@ -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,
@@ -114,3 +114,22 @@ export function getSdkAgentSessionArchiveDirPath(
114
114
  "archive",
115
115
  );
116
116
  }
117
+
118
+ /**
119
+ * 单个 session 的 inflight assistant 路径。
120
+ *
121
+ * 关键点(中文)
122
+ * - 运行中的 assistant 只保留一份增量快照。
123
+ * - step / tool 过程会持续重写这个文件,避免中途中断后过程完全丢失。
124
+ * - 完成后再把最终 assistant 合并进 `messages.jsonl`,并清理该文件。
125
+ */
126
+ export function getSdkAgentSessionInflightPath(
127
+ projectRoot: string,
128
+ agentId: string,
129
+ sessionId: string,
130
+ ): string {
131
+ return path.join(
132
+ getSdkAgentSessionMessagesDirPath(projectRoot, agentId, sessionId),
133
+ "inflight.json",
134
+ );
135
+ }