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