@downcity/agent 1.1.74 → 1.1.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. package/README.md +15 -18
  2. package/bin/agent/local/Agent.d.ts +82 -0
  3. package/bin/agent/local/Agent.d.ts.map +1 -0
  4. package/bin/agent/local/Agent.js +154 -0
  5. package/bin/agent/local/Agent.js.map +1 -0
  6. package/bin/agent/local/AgentInstructions.d.ts +22 -0
  7. package/bin/agent/local/AgentInstructions.d.ts.map +1 -0
  8. package/bin/agent/local/AgentInstructions.js +57 -0
  9. package/bin/agent/local/AgentInstructions.js.map +1 -0
  10. package/bin/agent/local/AgentPluginFactory.d.ts +29 -0
  11. package/bin/agent/local/AgentPluginFactory.d.ts.map +1 -0
  12. package/bin/agent/local/AgentPluginFactory.js +53 -0
  13. package/bin/agent/local/AgentPluginFactory.js.map +1 -0
  14. package/bin/{runtime/host/AgentHostRuntime.d.ts → agent/local/AgentRuntimeAssembly.d.ts} +2 -2
  15. package/bin/agent/local/AgentRuntimeAssembly.d.ts.map +1 -0
  16. package/bin/{runtime/host/AgentHostRuntime.js → agent/local/AgentRuntimeAssembly.js} +2 -2
  17. package/bin/agent/local/AgentRuntimeAssembly.js.map +1 -0
  18. package/bin/agent/local/AgentRuntimeFactory.d.ts +72 -0
  19. package/bin/agent/local/AgentRuntimeFactory.d.ts.map +1 -0
  20. package/bin/agent/local/AgentRuntimeFactory.js +73 -0
  21. package/bin/agent/local/AgentRuntimeFactory.js.map +1 -0
  22. package/bin/{runtime/host → agent/local}/ProjectSetup.d.ts +1 -1
  23. package/bin/agent/local/ProjectSetup.d.ts.map +1 -0
  24. package/bin/{runtime/host → agent/local}/ProjectSetup.js +1 -1
  25. package/bin/agent/local/ProjectSetup.js.map +1 -0
  26. package/bin/agent/local/services/AgentAssemblyService.d.ts +112 -0
  27. package/bin/agent/local/services/AgentAssemblyService.d.ts.map +1 -0
  28. package/bin/agent/local/services/AgentAssemblyService.js +135 -0
  29. package/bin/agent/local/services/AgentAssemblyService.js.map +1 -0
  30. package/bin/agent/local/services/AgentLifecycleService.d.ts +59 -0
  31. package/bin/agent/local/services/AgentLifecycleService.d.ts.map +1 -0
  32. package/bin/agent/local/services/AgentLifecycleService.js +136 -0
  33. package/bin/agent/local/services/AgentLifecycleService.js.map +1 -0
  34. package/bin/agent/local/services/AgentSessionManager.d.ts +106 -0
  35. package/bin/agent/local/services/AgentSessionManager.d.ts.map +1 -0
  36. package/bin/agent/local/services/AgentSessionManager.js +182 -0
  37. package/bin/agent/local/services/AgentSessionManager.js.map +1 -0
  38. package/bin/agent/{RemoteAgent.d.ts → remote/RemoteAgent.d.ts} +3 -3
  39. package/bin/agent/remote/RemoteAgent.d.ts.map +1 -0
  40. package/bin/agent/remote/RemoteAgent.js +58 -0
  41. package/bin/agent/remote/RemoteAgent.js.map +1 -0
  42. package/bin/agent/remote/RemoteSession.d.ts +62 -0
  43. package/bin/agent/remote/RemoteSession.d.ts.map +1 -0
  44. package/bin/agent/remote/RemoteSession.js +225 -0
  45. package/bin/agent/remote/RemoteSession.js.map +1 -0
  46. package/bin/agent/remote/RemoteTransport.d.ts +52 -0
  47. package/bin/agent/remote/RemoteTransport.d.ts.map +1 -0
  48. package/bin/agent/remote/RemoteTransport.js +9 -0
  49. package/bin/agent/remote/RemoteTransport.js.map +1 -0
  50. package/bin/agent/remote/TransportFactory.d.ts +13 -0
  51. package/bin/agent/remote/TransportFactory.d.ts.map +1 -0
  52. package/bin/agent/remote/TransportFactory.js +22 -0
  53. package/bin/agent/remote/TransportFactory.js.map +1 -0
  54. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +35 -0
  55. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -0
  56. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +259 -0
  57. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -0
  58. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +34 -0
  59. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -0
  60. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +66 -0
  61. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +1 -0
  62. package/bin/executor/Executor.d.ts +7 -20
  63. package/bin/executor/Executor.d.ts.map +1 -1
  64. package/bin/executor/Executor.js +77 -348
  65. package/bin/executor/Executor.js.map +1 -1
  66. package/bin/executor/SessionRunScope.d.ts +18 -34
  67. package/bin/executor/SessionRunScope.d.ts.map +1 -1
  68. package/bin/executor/SessionRunScope.js +42 -28
  69. package/bin/executor/SessionRunScope.js.map +1 -1
  70. package/bin/executor/composer/context/LocalSessionContextComposer.d.ts +5 -3
  71. package/bin/executor/composer/context/LocalSessionContextComposer.d.ts.map +1 -1
  72. package/bin/executor/composer/context/LocalSessionContextComposer.js +11 -18
  73. package/bin/executor/composer/context/LocalSessionContextComposer.js.map +1 -1
  74. package/bin/executor/composer/context/SessionContextComposer.d.ts +8 -3
  75. package/bin/executor/composer/context/SessionContextComposer.d.ts.map +1 -1
  76. package/bin/executor/composer/history/SessionHistoryWriter.js +2 -2
  77. package/bin/executor/composer/history/SessionHistoryWriter.js.map +1 -1
  78. package/bin/executor/composer/system/SessionSystemComposer.d.ts +2 -1
  79. package/bin/executor/composer/system/SessionSystemComposer.d.ts.map +1 -1
  80. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts +2 -1
  81. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts.map +1 -1
  82. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js +2 -4
  83. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js.map +1 -1
  84. package/bin/executor/core-engine/CoreEngineRunner.d.ts +62 -0
  85. package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -0
  86. package/bin/executor/core-engine/CoreEngineRunner.js +309 -0
  87. package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -0
  88. package/bin/executor/core-engine/CoreEngineUiStreamCollector.d.ts +5 -0
  89. package/bin/executor/core-engine/CoreEngineUiStreamCollector.d.ts.map +1 -1
  90. package/bin/executor/core-engine/CoreEngineUiStreamCollector.js +2 -4
  91. package/bin/executor/core-engine/CoreEngineUiStreamCollector.js.map +1 -1
  92. package/bin/executor/messages/AssistantResultPersistence.d.ts +3 -3
  93. package/bin/executor/messages/AssistantResultPersistence.d.ts.map +1 -1
  94. package/bin/executor/messages/AssistantResultPersistence.js +2 -6
  95. package/bin/executor/messages/AssistantResultPersistence.js.map +1 -1
  96. package/bin/executor/messages/SessionStepEventMapper.d.ts +7 -8
  97. package/bin/executor/messages/SessionStepEventMapper.d.ts.map +1 -1
  98. package/bin/executor/messages/SessionStepEventMapper.js +55 -86
  99. package/bin/executor/messages/SessionStepEventMapper.js.map +1 -1
  100. package/bin/executor/messages/UserVisibleText.d.ts +2 -10
  101. package/bin/executor/messages/UserVisibleText.d.ts.map +1 -1
  102. package/bin/executor/messages/UserVisibleText.js +3 -16
  103. package/bin/executor/messages/UserVisibleText.js.map +1 -1
  104. package/bin/executor/services/ExecutorInflightService.d.ts +39 -0
  105. package/bin/executor/services/ExecutorInflightService.d.ts.map +1 -0
  106. package/bin/executor/services/ExecutorInflightService.js +75 -0
  107. package/bin/executor/services/ExecutorInflightService.js.map +1 -0
  108. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts +103 -0
  109. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts.map +1 -0
  110. package/bin/executor/services/ExecutorRecoveryPolicy.js +87 -0
  111. package/bin/executor/services/ExecutorRecoveryPolicy.js.map +1 -0
  112. package/bin/executor/store/history/SessionHistoryStore.d.ts +12 -0
  113. package/bin/executor/store/history/SessionHistoryStore.d.ts.map +1 -1
  114. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts +12 -0
  115. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +1 -1
  116. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +145 -8
  117. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +1 -1
  118. package/bin/executor/tools/plugin/PluginToolBridge.d.ts +19 -0
  119. package/bin/executor/tools/plugin/PluginToolBridge.d.ts.map +1 -0
  120. package/bin/executor/tools/plugin/PluginToolBridge.js +143 -0
  121. package/bin/executor/tools/plugin/PluginToolBridge.js.map +1 -0
  122. package/bin/executor/tools/plugin/PluginToolDefinition.d.ts +32 -0
  123. package/bin/executor/tools/plugin/PluginToolDefinition.d.ts.map +1 -0
  124. package/bin/executor/tools/plugin/PluginToolDefinition.js +27 -0
  125. package/bin/executor/tools/plugin/PluginToolDefinition.js.map +1 -0
  126. package/bin/executor/tools/plugin/PluginToolSchemas.d.ts +14 -0
  127. package/bin/executor/tools/plugin/PluginToolSchemas.d.ts.map +1 -0
  128. package/bin/executor/tools/plugin/PluginToolSchemas.js +19 -0
  129. package/bin/executor/tools/plugin/PluginToolSchemas.js.map +1 -0
  130. package/bin/executor/tools/plugin/types/PluginTool.d.ts +39 -0
  131. package/bin/executor/tools/plugin/types/PluginTool.d.ts.map +1 -0
  132. package/bin/executor/tools/plugin/types/PluginTool.js +9 -0
  133. package/bin/executor/tools/plugin/types/PluginTool.js.map +1 -0
  134. package/bin/executor/tools/shell/ShellToolBridge.js +3 -3
  135. package/bin/executor/tools/shell/ShellToolBridge.js.map +1 -1
  136. package/bin/executor/tools/shell/ShellToolFormatting.d.ts +1 -10
  137. package/bin/executor/tools/shell/ShellToolFormatting.d.ts.map +1 -1
  138. package/bin/executor/tools/shell/ShellToolFormatting.js +1 -39
  139. package/bin/executor/tools/shell/ShellToolFormatting.js.map +1 -1
  140. package/bin/executor/types/SessionHistoryPaths.d.ts +4 -0
  141. package/bin/executor/types/SessionHistoryPaths.d.ts.map +1 -1
  142. package/bin/executor/types/SessionRun.d.ts +18 -0
  143. package/bin/executor/types/SessionRun.d.ts.map +1 -1
  144. package/bin/index.d.ts +15 -6
  145. package/bin/index.d.ts.map +1 -1
  146. package/bin/index.js +6 -3
  147. package/bin/index.js.map +1 -1
  148. package/bin/plugin/core/BasePlugin.d.ts +2 -2
  149. package/bin/plugin/core/BasePlugin.d.ts.map +1 -1
  150. package/bin/plugin/core/BasePlugin.js.map +1 -1
  151. package/bin/plugin/core/ImagePlugin.d.ts +56 -0
  152. package/bin/plugin/core/ImagePlugin.d.ts.map +1 -0
  153. package/bin/plugin/core/ImagePlugin.js +109 -0
  154. package/bin/plugin/core/ImagePlugin.js.map +1 -0
  155. package/bin/plugin/core/PluginCommandRequest.d.ts +1 -1
  156. package/bin/plugin/core/PluginCommandRequest.js +1 -1
  157. package/bin/plugin/core/PluginLocalExecution.js +1 -1
  158. package/bin/plugin/core/PluginLocalExecution.js.map +1 -1
  159. package/bin/plugin/core/ProjectConfigStore.d.ts +3 -2
  160. package/bin/plugin/core/ProjectConfigStore.d.ts.map +1 -1
  161. package/bin/plugin/core/ProjectConfigStore.js +3 -4
  162. package/bin/plugin/core/ProjectConfigStore.js.map +1 -1
  163. package/bin/plugin/types/Plugin.d.ts +10 -842
  164. package/bin/plugin/types/Plugin.d.ts.map +1 -1
  165. package/bin/plugin/types/Plugin.js +3 -4
  166. package/bin/plugin/types/Plugin.js.map +1 -1
  167. package/bin/plugin/types/PluginState.d.ts +1 -1
  168. package/bin/plugin/types/PluginState.d.ts.map +1 -1
  169. package/bin/rpc/Client.d.ts +2 -99
  170. package/bin/rpc/Client.d.ts.map +1 -1
  171. package/bin/rpc/Client.js +0 -46
  172. package/bin/rpc/Client.js.map +1 -1
  173. package/bin/rpc/Server.d.ts +5 -21
  174. package/bin/rpc/Server.d.ts.map +1 -1
  175. package/bin/rpc/Server.js +30 -315
  176. package/bin/rpc/Server.js.map +1 -1
  177. package/bin/rpc/server/InternalHandlers.d.ts +21 -0
  178. package/bin/rpc/server/InternalHandlers.d.ts.map +1 -0
  179. package/bin/rpc/server/InternalHandlers.js +190 -0
  180. package/bin/rpc/server/InternalHandlers.js.map +1 -0
  181. package/bin/rpc/server/RequestDispatcher.d.ts +27 -0
  182. package/bin/rpc/server/RequestDispatcher.d.ts.map +1 -0
  183. package/bin/rpc/server/RequestDispatcher.js +38 -0
  184. package/bin/rpc/server/RequestDispatcher.js.map +1 -0
  185. package/bin/rpc/server/SdkSessionHandlers.d.ts +25 -0
  186. package/bin/rpc/server/SdkSessionHandlers.d.ts.map +1 -0
  187. package/bin/rpc/server/SdkSessionHandlers.js +86 -0
  188. package/bin/rpc/server/SdkSessionHandlers.js.map +1 -0
  189. package/bin/rpc/server/ServerTypes.d.ts +59 -0
  190. package/bin/rpc/server/ServerTypes.d.ts.map +1 -0
  191. package/bin/rpc/server/ServerTypes.js +9 -0
  192. package/bin/rpc/server/ServerTypes.js.map +1 -0
  193. package/bin/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.d.ts +1 -1
  194. package/bin/sandbox/MacOsSeatbeltSandbox.d.ts.map +1 -0
  195. package/bin/sandbox/MacOsSeatbeltSandbox.js.map +1 -0
  196. package/bin/{runtime/sandbox → sandbox}/SandboxConfigResolver.d.ts +2 -2
  197. package/bin/sandbox/SandboxConfigResolver.d.ts.map +1 -0
  198. package/bin/sandbox/SandboxConfigResolver.js.map +1 -0
  199. package/bin/{runtime/sandbox → sandbox}/SandboxRunner.d.ts +2 -2
  200. package/bin/sandbox/SandboxRunner.d.ts.map +1 -0
  201. package/bin/{runtime/sandbox → sandbox}/SandboxRunner.js +2 -2
  202. package/bin/sandbox/SandboxRunner.js.map +1 -0
  203. package/bin/sandbox/types/Sandbox.d.ts.map +1 -0
  204. package/bin/sandbox/types/Sandbox.js.map +1 -0
  205. package/bin/{runtime/sandbox → sandbox}/types/SandboxRuntime.d.ts +2 -2
  206. package/bin/sandbox/types/SandboxRuntime.d.ts.map +1 -0
  207. package/bin/sandbox/types/SandboxRuntime.js.map +1 -0
  208. package/bin/session/Session.d.ts +14 -83
  209. package/bin/session/Session.d.ts.map +1 -1
  210. package/bin/session/Session.js +140 -362
  211. package/bin/session/Session.js.map +1 -1
  212. package/bin/session/SessionSystemBuilder.d.ts +2 -1
  213. package/bin/session/SessionSystemBuilder.d.ts.map +1 -1
  214. package/bin/session/SessionSystemBuilder.js +2 -3
  215. package/bin/session/SessionSystemBuilder.js.map +1 -1
  216. package/bin/session/browse/Browse.d.ts +1 -1
  217. package/bin/session/browse/Browse.d.ts.map +1 -1
  218. package/bin/session/browse/Browse.js +28 -13
  219. package/bin/session/browse/Browse.js.map +1 -1
  220. package/bin/session/index.d.ts +1 -1
  221. package/bin/session/index.d.ts.map +1 -1
  222. package/bin/session/index.js +1 -1
  223. package/bin/session/index.js.map +1 -1
  224. package/bin/session/services/SessionStateService.d.ts +132 -0
  225. package/bin/session/services/SessionStateService.d.ts.map +1 -0
  226. package/bin/session/services/SessionStateService.js +242 -0
  227. package/bin/session/services/SessionStateService.js.map +1 -0
  228. package/bin/session/services/SessionTurnService.d.ts +66 -0
  229. package/bin/session/services/SessionTurnService.d.ts.map +1 -0
  230. package/bin/session/services/SessionTurnService.js +137 -0
  231. package/bin/session/services/SessionTurnService.js.map +1 -0
  232. package/bin/session/services/SessionViewService.d.ts +105 -0
  233. package/bin/session/services/SessionViewService.d.ts.map +1 -0
  234. package/bin/session/services/SessionViewService.js +184 -0
  235. package/bin/session/services/SessionViewService.js.map +1 -0
  236. package/bin/session/storage/Paths.d.ts +9 -0
  237. package/bin/session/storage/Paths.d.ts.map +1 -1
  238. package/bin/session/storage/Paths.js +11 -0
  239. package/bin/session/storage/Paths.js.map +1 -1
  240. package/bin/types/agent/AgentOptions.d.ts +152 -0
  241. package/bin/types/agent/AgentOptions.d.ts.map +1 -0
  242. package/bin/types/agent/AgentOptions.js +9 -0
  243. package/bin/types/agent/AgentOptions.js.map +1 -0
  244. package/bin/types/{runtime/host/AgentHost.d.ts → agent/AgentRuntimeAssembly.d.ts} +4 -4
  245. package/bin/types/agent/AgentRuntimeAssembly.d.ts.map +1 -0
  246. package/bin/types/{runtime/host/AgentHost.js → agent/AgentRuntimeAssembly.js} +3 -3
  247. package/bin/types/agent/AgentRuntimeAssembly.js.map +1 -0
  248. package/bin/types/agent/AgentTypes.d.ts +10 -613
  249. package/bin/types/agent/AgentTypes.d.ts.map +1 -1
  250. package/bin/types/agent/AgentTypes.js +4 -4
  251. package/bin/types/agent/RemoteAgentOptions.d.ts +28 -0
  252. package/bin/types/agent/RemoteAgentOptions.d.ts.map +1 -0
  253. package/bin/types/agent/RemoteAgentOptions.js +9 -0
  254. package/bin/types/agent/RemoteAgentOptions.js.map +1 -0
  255. package/bin/types/agent/SessionActor.d.ts +60 -0
  256. package/bin/types/agent/SessionActor.d.ts.map +1 -0
  257. package/bin/types/agent/SessionActor.js +9 -0
  258. package/bin/types/agent/SessionActor.js.map +1 -0
  259. package/bin/types/agent/SessionTypes.d.ts +312 -0
  260. package/bin/types/agent/SessionTypes.d.ts.map +1 -0
  261. package/bin/types/agent/SessionTypes.js +9 -0
  262. package/bin/types/agent/SessionTypes.js.map +1 -0
  263. package/bin/types/config/DowncityConfig.d.ts +1 -1
  264. package/bin/types/config/DowncityConfig.d.ts.map +1 -1
  265. package/bin/types/executor/SessionRunContext.d.ts +66 -0
  266. package/bin/types/executor/SessionRunContext.d.ts.map +1 -0
  267. package/bin/types/executor/SessionRunContext.js +10 -0
  268. package/bin/types/executor/SessionRunContext.js.map +1 -0
  269. package/bin/types/{runtime/host → platform}/Store.d.ts +1 -1
  270. package/bin/types/platform/Store.d.ts.map +1 -0
  271. package/bin/types/{runtime/host → platform}/Store.js +1 -1
  272. package/bin/types/platform/Store.js.map +1 -0
  273. package/bin/types/plugin/ImagePlugin.d.ts +94 -0
  274. package/bin/types/plugin/ImagePlugin.d.ts.map +1 -0
  275. package/bin/types/plugin/ImagePlugin.js +10 -0
  276. package/bin/types/plugin/ImagePlugin.js.map +1 -0
  277. package/bin/types/plugin/PluginAction.d.ts +119 -0
  278. package/bin/types/plugin/PluginAction.d.ts.map +1 -0
  279. package/bin/types/plugin/PluginAction.js +9 -0
  280. package/bin/types/plugin/PluginAction.js.map +1 -0
  281. package/bin/types/plugin/PluginCommand.d.ts +80 -0
  282. package/bin/types/plugin/PluginCommand.d.ts.map +1 -0
  283. package/bin/types/plugin/PluginCommand.js +9 -0
  284. package/bin/types/plugin/PluginCommand.js.map +1 -0
  285. package/bin/types/plugin/PluginDefinition.d.ts +57 -0
  286. package/bin/types/plugin/PluginDefinition.d.ts.map +1 -0
  287. package/bin/types/plugin/PluginDefinition.js +9 -0
  288. package/bin/types/plugin/PluginDefinition.js.map +1 -0
  289. package/bin/types/plugin/PluginHttp.d.ts +34 -0
  290. package/bin/types/plugin/PluginHttp.d.ts.map +1 -0
  291. package/bin/types/plugin/PluginHttp.js +9 -0
  292. package/bin/types/plugin/PluginHttp.js.map +1 -0
  293. package/bin/types/plugin/PluginRuntime.d.ts +148 -0
  294. package/bin/types/plugin/PluginRuntime.d.ts.map +1 -0
  295. package/bin/types/plugin/PluginRuntime.js +9 -0
  296. package/bin/types/plugin/PluginRuntime.js.map +1 -0
  297. package/bin/types/plugin/PluginSetup.d.ts +133 -0
  298. package/bin/types/plugin/PluginSetup.d.ts.map +1 -0
  299. package/bin/types/plugin/PluginSetup.js +9 -0
  300. package/bin/types/plugin/PluginSetup.js.map +1 -0
  301. package/bin/types/plugin/PluginState.d.ts +69 -0
  302. package/bin/types/plugin/PluginState.d.ts.map +1 -0
  303. package/bin/types/plugin/PluginState.js +9 -0
  304. package/bin/types/plugin/PluginState.js.map +1 -0
  305. package/bin/types/rpc/RpcProtocol.d.ts +323 -0
  306. package/bin/types/rpc/RpcProtocol.d.ts.map +1 -0
  307. package/bin/types/rpc/RpcProtocol.js +10 -0
  308. package/bin/types/rpc/RpcProtocol.js.map +1 -0
  309. package/bin/types/runtime/agent/AgentContext.d.ts +1 -1
  310. package/bin/types/runtime/agent/AgentContext.d.ts.map +1 -1
  311. package/bin/types/runtime/agent/AgentRuntime.d.ts +1 -1
  312. package/bin/types/runtime/agent/AgentRuntime.d.ts.map +1 -1
  313. package/bin/types/session/SessionComposerOptions.d.ts +90 -0
  314. package/bin/types/session/SessionComposerOptions.d.ts.map +1 -0
  315. package/bin/types/session/SessionComposerOptions.js +10 -0
  316. package/bin/types/session/SessionComposerOptions.js.map +1 -0
  317. package/bin/types/session/SessionLocalState.d.ts +35 -0
  318. package/bin/types/session/SessionLocalState.d.ts.map +1 -0
  319. package/bin/types/session/SessionLocalState.js +10 -0
  320. package/bin/types/session/SessionLocalState.js.map +1 -0
  321. package/bin/types/session/SessionOptions.d.ts +85 -0
  322. package/bin/types/session/SessionOptions.d.ts.map +1 -0
  323. package/bin/types/session/SessionOptions.js +10 -0
  324. package/bin/types/session/SessionOptions.js.map +1 -0
  325. package/package.json +2 -2
  326. package/scripts/session-history-inflight.test.mjs +146 -0
  327. package/src/agent/local/Agent.ts +197 -0
  328. package/src/agent/local/AgentInstructions.ts +68 -0
  329. package/src/agent/local/AgentPluginFactory.ts +83 -0
  330. package/src/{runtime/host/AgentHostRuntime.ts → agent/local/AgentRuntimeAssembly.ts} +2 -2
  331. package/src/agent/local/AgentRuntimeFactory.ts +152 -0
  332. package/src/{runtime/host → agent/local}/ProjectSetup.ts +1 -1
  333. package/src/agent/local/services/AgentAssemblyService.ts +268 -0
  334. package/src/agent/local/services/AgentLifecycleService.ts +187 -0
  335. package/src/agent/local/services/AgentSessionManager.ts +291 -0
  336. package/src/agent/remote/RemoteAgent.ts +76 -0
  337. package/src/agent/remote/RemoteSession.ts +287 -0
  338. package/src/agent/remote/RemoteTransport.ts +71 -0
  339. package/src/agent/remote/TransportFactory.ts +29 -0
  340. package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +347 -0
  341. package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +107 -0
  342. package/src/executor/Executor.ts +107 -426
  343. package/src/executor/README.md +4 -4
  344. package/src/executor/SessionRunScope.ts +47 -71
  345. package/src/executor/composer/context/LocalSessionContextComposer.ts +24 -20
  346. package/src/executor/composer/context/SessionContextComposer.ts +13 -3
  347. package/src/executor/composer/history/SessionHistoryWriter.ts +2 -2
  348. package/src/executor/composer/system/SessionSystemComposer.ts +2 -1
  349. package/src/executor/composer/system/default/DefaultSessionSystemComposer.ts +3 -4
  350. package/src/executor/core-engine/CoreEngineRunner.ts +433 -0
  351. package/src/executor/core-engine/CoreEngineUiStreamCollector.ts +7 -5
  352. package/src/executor/messages/AssistantResultPersistence.ts +4 -12
  353. package/src/executor/messages/SessionStepEventMapper.ts +59 -101
  354. package/src/executor/messages/UserVisibleText.ts +3 -18
  355. package/src/executor/services/ExecutorInflightService.ts +101 -0
  356. package/src/executor/services/ExecutorRecoveryPolicy.ts +213 -0
  357. package/src/executor/store/history/SessionHistoryStore.ts +15 -0
  358. package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +164 -11
  359. package/src/executor/tools/plugin/PluginToolBridge.ts +161 -0
  360. package/src/executor/tools/plugin/PluginToolDefinition.ts +32 -0
  361. package/src/executor/tools/plugin/PluginToolSchemas.ts +20 -0
  362. package/src/executor/tools/plugin/types/PluginTool.ts +41 -0
  363. package/src/executor/tools/shell/ShellToolBridge.ts +3 -3
  364. package/src/executor/tools/shell/ShellToolFormatting.ts +1 -50
  365. package/src/executor/types/SessionHistoryPaths.ts +5 -0
  366. package/src/executor/types/SessionRun.ts +20 -0
  367. package/src/index.ts +38 -5
  368. package/src/plugin/core/BasePlugin.ts +2 -2
  369. package/src/plugin/core/ImagePlugin.ts +128 -0
  370. package/src/plugin/core/PluginCommandRequest.ts +1 -1
  371. package/src/plugin/core/PluginLocalExecution.ts +1 -1
  372. package/src/plugin/core/ProjectConfigStore.ts +4 -4
  373. package/src/plugin/types/Plugin.ts +54 -913
  374. package/src/plugin/types/PluginState.ts +1 -1
  375. package/src/rpc/Client.ts +16 -322
  376. package/src/rpc/Server.ts +39 -565
  377. package/src/rpc/server/InternalHandlers.ts +230 -0
  378. package/src/rpc/server/RequestDispatcher.ts +67 -0
  379. package/src/rpc/server/SdkSessionHandlers.ts +106 -0
  380. package/src/rpc/server/ServerTypes.ts +65 -0
  381. package/src/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.ts +1 -1
  382. package/src/{runtime/sandbox → sandbox}/SandboxConfigResolver.ts +1 -1
  383. package/src/{runtime/sandbox → sandbox}/SandboxRunner.ts +3 -3
  384. package/src/{runtime/sandbox → sandbox}/types/SandboxRuntime.ts +2 -2
  385. package/src/session/Session.ts +184 -485
  386. package/src/session/SessionSystemBuilder.ts +3 -3
  387. package/src/session/browse/Browse.ts +29 -10
  388. package/src/session/index.ts +1 -0
  389. package/src/session/services/SessionStateService.ts +341 -0
  390. package/src/session/services/SessionTurnService.ts +202 -0
  391. package/src/session/services/SessionViewService.ts +301 -0
  392. package/src/session/storage/Paths.ts +19 -0
  393. package/src/types/agent/AgentOptions.ts +172 -0
  394. package/src/types/{runtime/host/AgentHost.ts → agent/AgentRuntimeAssembly.ts} +2 -2
  395. package/src/types/agent/AgentTypes.ts +47 -709
  396. package/src/types/agent/RemoteAgentOptions.ts +29 -0
  397. package/src/types/agent/SessionActor.ts +88 -0
  398. package/src/types/agent/SessionTypes.ts +335 -0
  399. package/src/types/config/DowncityConfig.ts +1 -1
  400. package/src/types/executor/SessionRunContext.ts +76 -0
  401. package/src/types/{runtime/host → platform}/Store.ts +1 -1
  402. package/src/types/plugin/ImagePlugin.ts +103 -0
  403. package/src/types/plugin/PluginAction.ts +133 -0
  404. package/src/types/plugin/PluginCommand.ts +89 -0
  405. package/src/types/plugin/PluginDefinition.ts +74 -0
  406. package/src/types/plugin/PluginHttp.ts +36 -0
  407. package/src/types/plugin/PluginRuntime.ts +169 -0
  408. package/src/types/plugin/PluginSetup.ts +138 -0
  409. package/src/types/plugin/PluginState.ts +82 -0
  410. package/src/types/rpc/RpcProtocol.ts +361 -0
  411. package/src/types/runtime/agent/AgentContext.ts +1 -1
  412. package/src/types/runtime/agent/AgentRuntime.ts +1 -1
  413. package/src/types/session/SessionComposerOptions.ts +107 -0
  414. package/src/types/session/SessionLocalState.ts +40 -0
  415. package/src/types/session/SessionOptions.ts +99 -0
  416. package/tsconfig.tsbuildinfo +1 -1
  417. package/bin/agent/Agent.d.ts +0 -223
  418. package/bin/agent/Agent.d.ts.map +0 -1
  419. package/bin/agent/Agent.js +0 -627
  420. package/bin/agent/Agent.js.map +0 -1
  421. package/bin/agent/RemoteAgent.d.ts.map +0 -1
  422. package/bin/agent/RemoteAgent.js +0 -585
  423. package/bin/agent/RemoteAgent.js.map +0 -1
  424. package/bin/runtime/auth/AuthEnv.d.ts +0 -36
  425. package/bin/runtime/auth/AuthEnv.d.ts.map +0 -1
  426. package/bin/runtime/auth/AuthEnv.js +0 -54
  427. package/bin/runtime/auth/AuthEnv.js.map +0 -1
  428. package/bin/runtime/auth/CliAuthStateStore.d.ts +0 -29
  429. package/bin/runtime/auth/CliAuthStateStore.d.ts.map +0 -1
  430. package/bin/runtime/auth/CliAuthStateStore.js +0 -26
  431. package/bin/runtime/auth/CliAuthStateStore.js.map +0 -1
  432. package/bin/runtime/control/AuthControlService.d.ts +0 -34
  433. package/bin/runtime/control/AuthControlService.d.ts.map +0 -1
  434. package/bin/runtime/control/AuthControlService.js +0 -129
  435. package/bin/runtime/control/AuthControlService.js.map +0 -1
  436. package/bin/runtime/control/CommonHelpers.d.ts +0 -36
  437. package/bin/runtime/control/CommonHelpers.d.ts.map +0 -1
  438. package/bin/runtime/control/CommonHelpers.js +0 -63
  439. package/bin/runtime/control/CommonHelpers.js.map +0 -1
  440. package/bin/runtime/control/ExecuteBySession.d.ts +0 -30
  441. package/bin/runtime/control/ExecuteBySession.d.ts.map +0 -1
  442. package/bin/runtime/control/ExecuteBySession.js +0 -41
  443. package/bin/runtime/control/ExecuteBySession.js.map +0 -1
  444. package/bin/runtime/control/ExecuteInput.d.ts +0 -18
  445. package/bin/runtime/control/ExecuteInput.d.ts.map +0 -1
  446. package/bin/runtime/control/ExecuteInput.js +0 -201
  447. package/bin/runtime/control/ExecuteInput.js.map +0 -1
  448. package/bin/runtime/control/Helpers.d.ts +0 -13
  449. package/bin/runtime/control/Helpers.d.ts.map +0 -1
  450. package/bin/runtime/control/Helpers.js +0 -13
  451. package/bin/runtime/control/Helpers.js.map +0 -1
  452. package/bin/runtime/control/MessageTimeline.d.ts +0 -22
  453. package/bin/runtime/control/MessageTimeline.d.ts.map +0 -1
  454. package/bin/runtime/control/MessageTimeline.js +0 -226
  455. package/bin/runtime/control/MessageTimeline.js.map +0 -1
  456. package/bin/runtime/control/SessionSummaryStore.d.ts +0 -20
  457. package/bin/runtime/control/SessionSummaryStore.d.ts.map +0 -1
  458. package/bin/runtime/control/SessionSummaryStore.js +0 -50
  459. package/bin/runtime/control/SessionSummaryStore.js.map +0 -1
  460. package/bin/runtime/control/TaskStore.d.ts +0 -33
  461. package/bin/runtime/control/TaskStore.d.ts.map +0 -1
  462. package/bin/runtime/control/TaskStore.js +0 -175
  463. package/bin/runtime/control/TaskStore.js.map +0 -1
  464. package/bin/runtime/control/types/AuthControl.d.ts +0 -30
  465. package/bin/runtime/control/types/AuthControl.d.ts.map +0 -1
  466. package/bin/runtime/control/types/AuthControl.js +0 -9
  467. package/bin/runtime/control/types/AuthControl.js.map +0 -1
  468. package/bin/runtime/control/types/ControlSessionExecute.d.ts +0 -85
  469. package/bin/runtime/control/types/ControlSessionExecute.d.ts.map +0 -1
  470. package/bin/runtime/control/types/ControlSessionExecute.js +0 -9
  471. package/bin/runtime/control/types/ControlSessionExecute.js.map +0 -1
  472. package/bin/runtime/control/types/ControlViewData.d.ts +0 -320
  473. package/bin/runtime/control/types/ControlViewData.d.ts.map +0 -1
  474. package/bin/runtime/control/types/ControlViewData.js +0 -9
  475. package/bin/runtime/control/types/ControlViewData.js.map +0 -1
  476. package/bin/runtime/host/AgentHostRuntime.d.ts.map +0 -1
  477. package/bin/runtime/host/AgentHostRuntime.js.map +0 -1
  478. package/bin/runtime/host/ProjectSetup.d.ts.map +0 -1
  479. package/bin/runtime/host/ProjectSetup.js.map +0 -1
  480. package/bin/runtime/sandbox/MacOsSeatbeltSandbox.d.ts.map +0 -1
  481. package/bin/runtime/sandbox/MacOsSeatbeltSandbox.js.map +0 -1
  482. package/bin/runtime/sandbox/SandboxConfigResolver.d.ts.map +0 -1
  483. package/bin/runtime/sandbox/SandboxConfigResolver.js.map +0 -1
  484. package/bin/runtime/sandbox/SandboxRunner.d.ts.map +0 -1
  485. package/bin/runtime/sandbox/SandboxRunner.js.map +0 -1
  486. package/bin/runtime/sandbox/types/Sandbox.d.ts.map +0 -1
  487. package/bin/runtime/sandbox/types/Sandbox.js.map +0 -1
  488. package/bin/runtime/sandbox/types/SandboxRuntime.d.ts.map +0 -1
  489. package/bin/runtime/sandbox/types/SandboxRuntime.js.map +0 -1
  490. package/bin/types/runtime/host/AgentHost.d.ts.map +0 -1
  491. package/bin/types/runtime/host/AgentHost.js.map +0 -1
  492. package/bin/types/runtime/host/Store.d.ts.map +0 -1
  493. package/bin/types/runtime/host/Store.js.map +0 -1
  494. package/src/agent/Agent.ts +0 -734
  495. package/src/agent/RemoteAgent.ts +0 -834
  496. package/src/runtime/auth/AuthEnv.ts +0 -62
  497. package/src/runtime/auth/CliAuthStateStore.ts +0 -46
  498. package/src/runtime/control/AuthControlService.ts +0 -169
  499. package/src/runtime/control/CommonHelpers.ts +0 -69
  500. package/src/runtime/control/ExecuteBySession.ts +0 -52
  501. package/src/runtime/control/ExecuteInput.ts +0 -236
  502. package/src/runtime/control/Helpers.ts +0 -22
  503. package/src/runtime/control/MessageTimeline.ts +0 -269
  504. package/src/runtime/control/SessionSummaryStore.ts +0 -72
  505. package/src/runtime/control/TaskStore.ts +0 -242
  506. package/src/runtime/control/types/AuthControl.ts +0 -34
  507. package/src/runtime/control/types/ControlSessionExecute.ts +0 -99
  508. package/src/runtime/control/types/ControlViewData.ts +0 -392
  509. /package/bin/{runtime/sandbox → sandbox}/MacOsSeatbeltSandbox.js +0 -0
  510. /package/bin/{runtime/sandbox → sandbox}/SandboxConfigResolver.js +0 -0
  511. /package/bin/{runtime/sandbox → sandbox}/types/Sandbox.d.ts +0 -0
  512. /package/bin/{runtime/sandbox → sandbox}/types/Sandbox.js +0 -0
  513. /package/bin/{runtime/sandbox → sandbox}/types/SandboxRuntime.js +0 -0
  514. /package/src/{runtime/sandbox → sandbox}/types/Sandbox.ts +0 -0
@@ -1,834 +0,0 @@
1
- /**
2
- * RemoteAgent:统一远程 SDK 客户端。
3
- *
4
- * 关键点(中文)
5
- * - 对外只暴露一个 `url` 入口,不向用户暴露 transport 细节。
6
- * - 当前内部支持 `http/https` 与 `rpc` 两种访问方式。
7
- * - `RemoteAgent` 只负责远程访问与 turn handle 合成,不重复实现第二套会话编排器。
8
- */
9
-
10
- import type {
11
- AgentCreateSessionInput,
12
- AgentListSessionsInput,
13
- AgentSessionHistoryInput,
14
- AgentSessionHistoryPage,
15
- AgentSessionInfo,
16
- AgentSessionForkInput,
17
- AgentSessionSetInput,
18
- AgentSessionSummaryPage,
19
- AgentSessionSystemSnapshot,
20
- RemoteAgentOptions,
21
- RemoteAgentSession,
22
- } from "@/types/agent/AgentTypes.js";
23
- import type {
24
- AgentSessionEvent,
25
- AgentSessionSubscriber,
26
- AgentSessionUnsubscribe,
27
- } from "@/types/sdk/AgentSessionEvent.js";
28
- import type { AgentSessionPromptInput } from "@/types/sdk/AgentSessionPrompt.js";
29
- import type {
30
- AgentSessionTurnHandle,
31
- AgentSessionTurnResult,
32
- } from "@/types/sdk/AgentSessionTurn.js";
33
- import { SessionEventHub } from "@/session/runtime/SessionEventHub.js";
34
- import { RpcClient, parse_rpc_url } from "@/rpc/Client.js";
35
-
36
- type Deferred<T> = {
37
- /**
38
- * 当前延迟 Promise。
39
- */
40
- promise: Promise<T>;
41
- /**
42
- * 兑现 Promise。
43
- */
44
- resolve: (value: T) => void;
45
- };
46
-
47
- type RemoteTurnLifecycle = {
48
- /**
49
- * 当前 turnId。
50
- */
51
- turnId: string;
52
- /**
53
- * 当前 turn 的最终结果快照。
54
- */
55
- result: AgentSessionTurnResult | null;
56
- /**
57
- * 当前 turn 完成 Promise 控制器。
58
- */
59
- deferred_finished: Deferred<AgentSessionTurnResult>;
60
- };
61
-
62
- type TransportSubscription = {
63
- /**
64
- * 关闭当前订阅。
65
- */
66
- close(): Promise<void>;
67
- };
68
-
69
- type RemoteSessionTransport = {
70
- /**
71
- * 读取 session 信息。
72
- */
73
- get_info(session_id: string): Promise<AgentSessionInfo>;
74
- /**
75
- * 发送 prompt。
76
- */
77
- prompt(
78
- session_id: string,
79
- input: AgentSessionPromptInput,
80
- ): Promise<{ id: string }>;
81
- /**
82
- * 订阅 session 事件。
83
- */
84
- subscribe(params: {
85
- session_id: string;
86
- on_ready: () => void;
87
- on_event: (event: AgentSessionEvent) => void;
88
- }): Promise<TransportSubscription>;
89
- /**
90
- * 读取 history。
91
- */
92
- history(
93
- session_id: string,
94
- input?: AgentSessionHistoryInput,
95
- ): Promise<AgentSessionHistoryPage>;
96
- /**
97
- * 读取 system snapshot。
98
- */
99
- system(session_id: string): Promise<AgentSessionSystemSnapshot>;
100
- /**
101
- * 分叉 session。
102
- */
103
- fork(
104
- session_id: string,
105
- input?: AgentSessionForkInput | string,
106
- ): Promise<AgentSessionInfo>;
107
- };
108
-
109
- type RemoteAgentTransport = RemoteSessionTransport & {
110
- /**
111
- * 新建 session。
112
- */
113
- create_session(input?: AgentCreateSessionInput): Promise<AgentSessionInfo>;
114
- /**
115
- * 列出 sessions。
116
- */
117
- list_sessions(input?: AgentListSessionsInput): Promise<AgentSessionSummaryPage>;
118
- /**
119
- * 关闭 transport 持有的长期连接。
120
- */
121
- close?(): Promise<void>;
122
- };
123
-
124
- type SdkEventsReadyFrame = {
125
- /**
126
- * SDK HTTP events 连接内部 ready 标记。
127
- */
128
- type: "sdk-events-ready";
129
- };
130
-
131
- /**
132
- * 远程 Session 客户端。
133
- */
134
- class RemoteSession implements RemoteAgentSession {
135
- readonly id: string;
136
-
137
- private readonly transport: RemoteSessionTransport;
138
- private readonly event_hub = new SessionEventHub();
139
- private readonly turns_by_id = new Map<string, RemoteTurnLifecycle>();
140
- private readonly completed_turn_ids: string[] = [];
141
- private event_pump_connect_promise: Promise<void> | null = null;
142
- private event_pump_running = false;
143
- private event_subscriber_count = 0;
144
- private event_subscription: TransportSubscription | null = null;
145
-
146
- constructor(transport: RemoteSessionTransport, session_id: string) {
147
- this.transport = transport;
148
- this.id = session_id;
149
- }
150
-
151
- /**
152
- * 远程 session 当前不支持直接注入本地模型实例。
153
- */
154
- async set(_input: AgentSessionSetInput): Promise<void> {
155
- throw new Error(
156
- "Remote session.set({ model }) is not supported in v1. Configure the model on the server-side local Agent session instead.",
157
- );
158
- }
159
-
160
- /**
161
- * 读取当前远程 session 详情。
162
- */
163
- async getInfo(): Promise<AgentSessionInfo> {
164
- return await this.transport.get_info(this.id);
165
- }
166
-
167
- /**
168
- * 向当前远程 session 追加一条新的 prompt。
169
- */
170
- async prompt(input: AgentSessionPromptInput): Promise<AgentSessionTurnHandle> {
171
- const query = String(input.query || "").trim();
172
- if (!query) {
173
- throw new Error("remote session.prompt requires a non-empty query");
174
- }
175
-
176
- await this.ensure_event_pump();
177
- const turn = await this.transport.prompt(this.id, input);
178
- const lifecycle = this.ensure_turn_lifecycle(turn.id);
179
- return create_turn_handle(lifecycle);
180
- }
181
-
182
- /**
183
- * 订阅当前远程 session 的 future 事件。
184
- */
185
- subscribe(subscriber: AgentSessionSubscriber): AgentSessionUnsubscribe {
186
- this.event_subscriber_count += 1;
187
- void this.ensure_event_pump().catch((error) => {
188
- this.event_hub.publish({
189
- type: "error",
190
- message: error instanceof Error ? error.message : String(error),
191
- });
192
- });
193
- const unsubscribe = this.event_hub.subscribe(subscriber);
194
- return () => {
195
- unsubscribe();
196
- this.event_subscriber_count = Math.max(0, this.event_subscriber_count - 1);
197
- void this.maybe_stop_event_pump();
198
- };
199
- }
200
-
201
- /**
202
- * 读取远程消息历史。
203
- */
204
- async history(input?: AgentSessionHistoryInput): Promise<AgentSessionHistoryPage> {
205
- return await this.transport.history(this.id, input);
206
- }
207
-
208
- /**
209
- * 读取远程 session 当前生效的 system prompt 快照。
210
- */
211
- async system(): Promise<AgentSessionSystemSnapshot> {
212
- return await this.transport.system(this.id);
213
- }
214
-
215
- /**
216
- * 分叉远程 session。
217
- */
218
- async fork(input?: AgentSessionForkInput | string): Promise<RemoteAgentSession> {
219
- const info = await this.transport.fork(this.id, input);
220
- return new RemoteSession(this.transport, info.sessionId);
221
- }
222
-
223
- private async ensure_event_pump(): Promise<void> {
224
- if (this.event_pump_connect_promise) {
225
- await this.event_pump_connect_promise;
226
- return;
227
- }
228
- if (this.event_pump_running) return;
229
-
230
- this.event_pump_connect_promise = (async () => {
231
- let resolved_ready = false;
232
- this.event_subscription = await this.transport.subscribe({
233
- session_id: this.id,
234
- on_ready: () => {
235
- resolved_ready = true;
236
- },
237
- on_event: (event) => {
238
- this.handle_event(event);
239
- },
240
- });
241
- this.event_pump_running = true;
242
- if (!resolved_ready) {
243
- throw new Error("Remote session events connection closed before ready");
244
- }
245
- })();
246
-
247
- try {
248
- await this.event_pump_connect_promise;
249
- } finally {
250
- this.event_pump_connect_promise = null;
251
- }
252
- }
253
-
254
- private handle_event(event: AgentSessionEvent): void {
255
- if (event.type === "error") {
256
- this.fail_pending_turns(event.message);
257
- }
258
- const turn_id = extract_turn_id(event);
259
- if (turn_id) {
260
- this.ensure_turn_lifecycle(turn_id);
261
- }
262
-
263
- if (event.type === "turn-finish") {
264
- const lifecycle = this.ensure_turn_lifecycle(event.turnId);
265
- const result: AgentSessionTurnResult = {
266
- turnId: event.turnId,
267
- text: event.text,
268
- success: event.success,
269
- ...(event.error ? { error: event.error } : {}),
270
- };
271
- lifecycle.result = result;
272
- lifecycle.deferred_finished.resolve(result);
273
- this.remember_completed_turn(event.turnId);
274
- void this.maybe_stop_event_pump();
275
- }
276
-
277
- this.event_hub.publish(event);
278
- }
279
-
280
- private ensure_turn_lifecycle(turn_id: string): RemoteTurnLifecycle {
281
- const cached = this.turns_by_id.get(turn_id);
282
- if (cached) return cached;
283
- const created: RemoteTurnLifecycle = {
284
- turnId: turn_id,
285
- result: null,
286
- deferred_finished: create_deferred<AgentSessionTurnResult>(),
287
- };
288
- this.turns_by_id.set(turn_id, created);
289
- return created;
290
- }
291
-
292
- private fail_pending_turns(message: string): void {
293
- for (const lifecycle of this.turns_by_id.values()) {
294
- if (lifecycle.result) continue;
295
- const result: AgentSessionTurnResult = {
296
- turnId: lifecycle.turnId,
297
- text: "",
298
- success: false,
299
- error: message,
300
- };
301
- lifecycle.result = result;
302
- lifecycle.deferred_finished.resolve(result);
303
- this.remember_completed_turn(lifecycle.turnId);
304
- }
305
- }
306
-
307
- private remember_completed_turn(turn_id: string): void {
308
- this.completed_turn_ids.push(turn_id);
309
- while (this.completed_turn_ids.length > 200) {
310
- const oldest_turn_id = this.completed_turn_ids.shift();
311
- if (oldest_turn_id) {
312
- this.turns_by_id.delete(oldest_turn_id);
313
- }
314
- }
315
- }
316
-
317
- private async maybe_stop_event_pump(): Promise<void> {
318
- if (this.event_subscriber_count > 0) return;
319
- if ([...this.turns_by_id.values()].some((item) => item.result === null)) return;
320
- const current = this.event_subscription;
321
- this.event_subscription = null;
322
- this.event_pump_running = false;
323
- if (!current) return;
324
- await current.close().catch((error) => {
325
- this.fail_pending_turns(
326
- error instanceof Error ? error.message : String(error),
327
- );
328
- });
329
- }
330
- }
331
-
332
- /**
333
- * RemoteAgent:远程 Agent 客户端。
334
- */
335
- export class RemoteAgent {
336
- private readonly transport: RemoteAgentTransport;
337
-
338
- constructor(options: RemoteAgentOptions) {
339
- const url = String(options.url || "").trim();
340
- if (!url) {
341
- throw new Error("RemoteAgent requires a non-empty url");
342
- }
343
- this.transport = create_remote_agent_transport(url, options.token);
344
- }
345
-
346
- /**
347
- * 新建一个远程 session。
348
- */
349
- async createSession(
350
- input?: AgentCreateSessionInput,
351
- ): Promise<RemoteAgentSession> {
352
- const info = await this.transport.create_session(input);
353
- return new RemoteSession(this.transport, info.sessionId);
354
- }
355
-
356
- /**
357
- * 获取一个已存在的远程 session。
358
- */
359
- async getSession(sessionId: string): Promise<RemoteAgentSession> {
360
- const resolved_session_id = String(sessionId || "").trim();
361
- if (!resolved_session_id) {
362
- throw new Error("getSession requires a non-empty sessionId");
363
- }
364
- const info = await this.transport.get_info(resolved_session_id);
365
- return new RemoteSession(this.transport, info.sessionId);
366
- }
367
-
368
- /**
369
- * 列出远程 agent 的 session 摘要页。
370
- */
371
- async listSessions(
372
- input?: AgentListSessionsInput,
373
- ): Promise<AgentSessionSummaryPage> {
374
- return await this.transport.list_sessions(input);
375
- }
376
-
377
- /**
378
- * 关闭远程 transport。
379
- *
380
- * 关键点(中文)
381
- * - `rpc://` 会关闭底层长连接。
382
- * - `http://` / `https://` 没有常驻连接,调用时是安全 no-op。
383
- */
384
- async close(): Promise<void> {
385
- await this.transport.close?.();
386
- }
387
- }
388
-
389
- class HttpRemoteAgentTransport implements RemoteAgentTransport {
390
- private readonly base_url: string;
391
- private readonly token: string;
392
-
393
- constructor(url: string, token?: string) {
394
- this.base_url = url.replace(/\/+$/, "");
395
- this.token = String(token || "").trim();
396
- }
397
-
398
- private headers(input?: Record<string, string>): Headers {
399
- const headers = new Headers(input);
400
- if (this.token) {
401
- headers.set("Authorization", `Bearer ${this.token}`);
402
- }
403
- return headers;
404
- }
405
-
406
- async create_session(input?: AgentCreateSessionInput): Promise<AgentSessionInfo> {
407
- const payload = await read_http_json<{
408
- success?: boolean;
409
- error?: string;
410
- session?: AgentSessionInfo;
411
- }>(`${this.base_url}/api/sdk/sessions`, {
412
- method: "POST",
413
- headers: this.headers({
414
- "Content-Type": "application/json",
415
- }),
416
- body: JSON.stringify({
417
- ...(input?.sessionId ? { sessionId: input.sessionId } : {}),
418
- }),
419
- });
420
- if (!payload.success || !payload.session?.sessionId) {
421
- throw new Error(String(payload.error || "Remote session create failed"));
422
- }
423
- return payload.session;
424
- }
425
-
426
- async get_info(session_id: string): Promise<AgentSessionInfo> {
427
- const payload = await read_http_json<{
428
- success?: boolean;
429
- error?: string;
430
- session?: AgentSessionInfo;
431
- }>(`${this.base_url}/api/sdk/sessions/${encodeURIComponent(session_id)}`, {
432
- headers: this.headers(),
433
- });
434
- if (!payload.success || !payload.session?.sessionId) {
435
- throw new Error(String(payload.error || "Remote session info failed"));
436
- }
437
- return payload.session;
438
- }
439
-
440
- async prompt(
441
- session_id: string,
442
- input: AgentSessionPromptInput,
443
- ): Promise<{ id: string }> {
444
- const payload = await read_http_json<{
445
- success?: boolean;
446
- error?: string;
447
- turn?: {
448
- id?: string;
449
- };
450
- }>(`${this.base_url}/api/sdk/sessions/${encodeURIComponent(session_id)}/prompt`, {
451
- method: "POST",
452
- headers: this.headers({
453
- "Content-Type": "application/json",
454
- }),
455
- body: JSON.stringify({
456
- query: input.query,
457
- }),
458
- });
459
- const id = String(payload.turn?.id || "").trim();
460
- if (!payload.success || !id) {
461
- throw new Error(String(payload.error || "Remote session prompt failed"));
462
- }
463
- return { id };
464
- }
465
-
466
- async subscribe(params: {
467
- session_id: string;
468
- on_ready: () => void;
469
- on_event: (event: AgentSessionEvent) => void;
470
- }): Promise<TransportSubscription> {
471
- const abort_controller = new AbortController();
472
- let resolve_ready!: () => void;
473
- let reject_ready!: (error: unknown) => void;
474
- const ready_promise = new Promise<void>((resolve, reject) => {
475
- resolve_ready = resolve;
476
- reject_ready = reject;
477
- });
478
- const response = await fetch(
479
- `${this.base_url}/api/sdk/sessions/${encodeURIComponent(params.session_id)}/events`,
480
- {
481
- headers: this.headers(),
482
- signal: abort_controller.signal,
483
- },
484
- );
485
- if (!response.ok || !response.body) {
486
- const text = await response.text().catch(() => "");
487
- throw new Error(text || `Remote session events failed (${response.status})`);
488
- }
489
- void consume_http_event_stream({
490
- body: response.body,
491
- abort_controller,
492
- on_ready: () => {
493
- params.on_ready();
494
- resolve_ready();
495
- },
496
- on_ready_error: (error) => {
497
- reject_ready(error);
498
- },
499
- on_event: params.on_event,
500
- });
501
- await ready_promise;
502
- return {
503
- close: async () => {
504
- abort_controller.abort();
505
- },
506
- };
507
- }
508
-
509
- async history(
510
- session_id: string,
511
- input?: AgentSessionHistoryInput,
512
- ): Promise<AgentSessionHistoryPage> {
513
- const query = new URLSearchParams();
514
- if (input?.limit !== undefined) query.set("limit", String(input.limit));
515
- if (input?.cursor) query.set("cursor", input.cursor);
516
- if (input?.order) query.set("order", input.order);
517
- if (input?.view) query.set("view", input.view);
518
- const payload = await read_http_json<{
519
- success?: boolean;
520
- error?: string;
521
- history?: AgentSessionHistoryPage;
522
- }>(
523
- `${this.base_url}/api/sdk/sessions/${encodeURIComponent(session_id)}/history${
524
- query.size > 0 ? `?${query.toString()}` : ""
525
- }`,
526
- {
527
- headers: this.headers(),
528
- },
529
- );
530
- if (!payload.success || !payload.history || !Array.isArray(payload.history.items)) {
531
- throw new Error(String(payload.error || "Remote session history failed"));
532
- }
533
- return payload.history;
534
- }
535
-
536
- async system(session_id: string): Promise<AgentSessionSystemSnapshot> {
537
- const payload = await read_http_json<{
538
- success?: boolean;
539
- error?: string;
540
- system?: AgentSessionSystemSnapshot;
541
- }>(`${this.base_url}/api/sdk/sessions/${encodeURIComponent(session_id)}/system`, {
542
- headers: this.headers(),
543
- });
544
- if (!payload.success || !payload.system || !Array.isArray(payload.system.blocks)) {
545
- throw new Error(String(payload.error || "Remote session system failed"));
546
- }
547
- return payload.system;
548
- }
549
-
550
- async fork(
551
- session_id: string,
552
- input?: AgentSessionForkInput | string,
553
- ): Promise<AgentSessionInfo> {
554
- const message_id =
555
- typeof input === "string"
556
- ? String(input || "").trim() || undefined
557
- : String(input?.messageId || "").trim() || undefined;
558
- const payload = await read_http_json<{
559
- success?: boolean;
560
- error?: string;
561
- session?: AgentSessionInfo;
562
- }>(`${this.base_url}/api/sdk/sessions/${encodeURIComponent(session_id)}/fork`, {
563
- method: "POST",
564
- headers: this.headers({
565
- "Content-Type": "application/json",
566
- }),
567
- body: JSON.stringify({
568
- ...(message_id ? { messageId: message_id } : {}),
569
- }),
570
- });
571
- if (!payload.success || !payload.session?.sessionId) {
572
- throw new Error(String(payload.error || "Remote session fork failed"));
573
- }
574
- return payload.session;
575
- }
576
-
577
- async list_sessions(input?: AgentListSessionsInput): Promise<AgentSessionSummaryPage> {
578
- const query = new URLSearchParams();
579
- if (input?.limit !== undefined) query.set("limit", String(input.limit));
580
- if (input?.cursor) query.set("cursor", input.cursor);
581
- if (input?.query) query.set("query", input.query);
582
- const payload = await read_http_json<{
583
- success?: boolean;
584
- error?: string;
585
- page?: AgentSessionSummaryPage;
586
- }>(
587
- `${this.base_url}/api/sdk/sessions${query.size > 0 ? `?${query.toString()}` : ""}`,
588
- {
589
- headers: this.headers(),
590
- },
591
- );
592
- if (!payload.success || !payload.page) {
593
- throw new Error(String(payload.error || "Remote sessions list failed"));
594
- }
595
- return payload.page;
596
- }
597
- }
598
-
599
- class RpcRemoteAgentTransport implements RemoteAgentTransport {
600
- private readonly client: RpcClient;
601
-
602
- constructor(url: string) {
603
- this.client = new RpcClient(parse_rpc_url(url));
604
- }
605
-
606
- async create_session(input?: AgentCreateSessionInput): Promise<AgentSessionInfo> {
607
- return await this.client.create_session(input);
608
- }
609
-
610
- async get_info(session_id: string): Promise<AgentSessionInfo> {
611
- return await this.client.get_session(session_id);
612
- }
613
-
614
- async prompt(
615
- session_id: string,
616
- input: AgentSessionPromptInput,
617
- ): Promise<{ id: string }> {
618
- return await this.client.prompt_session({
619
- session_id,
620
- input,
621
- });
622
- }
623
-
624
- async subscribe(params: {
625
- session_id: string;
626
- on_ready: () => void;
627
- on_event: (event: AgentSessionEvent) => void;
628
- }): Promise<TransportSubscription> {
629
- const subscription = await this.client.subscribe_session({
630
- session_id: params.session_id,
631
- on_ready: params.on_ready,
632
- on_event: params.on_event,
633
- });
634
- return {
635
- close: async () => {
636
- await subscription.unsubscribe();
637
- },
638
- };
639
- }
640
-
641
- async history(
642
- session_id: string,
643
- input?: AgentSessionHistoryInput,
644
- ): Promise<AgentSessionHistoryPage> {
645
- return await this.client.get_session_history({
646
- session_id,
647
- input,
648
- });
649
- }
650
-
651
- async system(session_id: string): Promise<AgentSessionSystemSnapshot> {
652
- return await this.client.get_session_system(session_id);
653
- }
654
-
655
- async fork(
656
- session_id: string,
657
- input?: AgentSessionForkInput | string,
658
- ): Promise<AgentSessionInfo> {
659
- const message_id =
660
- typeof input === "string"
661
- ? String(input || "").trim() || undefined
662
- : String(input?.messageId || "").trim() || undefined;
663
- return await this.client.fork_session({
664
- session_id,
665
- ...(message_id ? { message_id } : {}),
666
- });
667
- }
668
-
669
- async list_sessions(input?: AgentListSessionsInput): Promise<AgentSessionSummaryPage> {
670
- return await this.client.list_sessions(input);
671
- }
672
-
673
- async close(): Promise<void> {
674
- await this.client.close();
675
- }
676
- }
677
-
678
- function create_remote_agent_transport(
679
- url: string,
680
- token?: string,
681
- ): RemoteAgentTransport {
682
- if (/^https?:\/\//i.test(url)) {
683
- return new HttpRemoteAgentTransport(url, token);
684
- }
685
- if (/^rpc:\/\//i.test(url)) {
686
- return new RpcRemoteAgentTransport(url);
687
- }
688
- throw new Error(
689
- `Unsupported RemoteAgent url protocol: ${url}. Expected http://, https://, or rpc://`,
690
- );
691
- }
692
-
693
- async function read_http_json<T>(input: string, init?: RequestInit): Promise<T> {
694
- const response = await fetch(input, init);
695
- const payload = (await response.json().catch(() => ({}))) as T;
696
- if (!response.ok) {
697
- const message = extract_error_message(payload);
698
- throw new Error(message || `HTTP ${response.status}`);
699
- }
700
- return payload;
701
- }
702
-
703
- async function consume_http_event_stream(params: {
704
- body: ReadableStream<Uint8Array>;
705
- abort_controller: AbortController;
706
- on_ready: () => void;
707
- on_ready_error: (error: unknown) => void;
708
- on_event: (event: AgentSessionEvent) => void;
709
- }): Promise<void> {
710
- const decoder = new TextDecoder();
711
- const reader = params.body.getReader();
712
- let buffered = "";
713
- let ready_resolved = false;
714
-
715
- try {
716
- while (true) {
717
- const { done, value } = await reader.read();
718
- if (done) break;
719
- buffered += decoder.decode(value, { stream: true });
720
- let newline_index = buffered.indexOf("\n");
721
- while (newline_index >= 0) {
722
- const line = buffered.slice(0, newline_index).trim();
723
- buffered = buffered.slice(newline_index + 1);
724
- if (line) {
725
- const value = JSON.parse(line) as unknown;
726
- if (is_sdk_events_ready_frame(value)) {
727
- ready_resolved = true;
728
- params.on_ready();
729
- } else {
730
- params.on_event(value as AgentSessionEvent);
731
- }
732
- }
733
- newline_index = buffered.indexOf("\n");
734
- }
735
- }
736
-
737
- const tail = buffered.trim();
738
- if (tail) {
739
- const value = JSON.parse(tail) as unknown;
740
- if (is_sdk_events_ready_frame(value)) {
741
- ready_resolved = true;
742
- params.on_ready();
743
- } else {
744
- params.on_event(value as AgentSessionEvent);
745
- }
746
- }
747
-
748
- if (!params.abort_controller.signal.aborted) {
749
- if (!ready_resolved) {
750
- const error = new Error("Remote session events connection closed before ready");
751
- params.on_ready_error(error);
752
- throw error;
753
- }
754
- params.on_event({
755
- type: "error",
756
- message: "Remote session events connection closed",
757
- });
758
- }
759
- } catch (error) {
760
- if (!params.abort_controller.signal.aborted) {
761
- if (!ready_resolved) {
762
- params.on_ready_error(error);
763
- }
764
- params.on_event({
765
- type: "error",
766
- message: error instanceof Error ? error.message : String(error),
767
- });
768
- }
769
- } finally {
770
- try {
771
- reader.releaseLock();
772
- } catch {
773
- // ignore
774
- }
775
- }
776
- }
777
-
778
- function extract_error_message(payload: unknown): string {
779
- if (!payload || typeof payload !== "object") return "";
780
- if ("error" in payload && typeof payload.error === "string") {
781
- return payload.error;
782
- }
783
- if ("message" in payload && typeof payload.message === "string") {
784
- return payload.message;
785
- }
786
- return "";
787
- }
788
-
789
- function create_deferred<T>(): Deferred<T> {
790
- let resolve!: (value: T) => void;
791
- const promise = new Promise<T>((inner_resolve) => {
792
- resolve = inner_resolve;
793
- });
794
- return {
795
- promise,
796
- resolve,
797
- };
798
- }
799
-
800
- function is_sdk_events_ready_frame(value: unknown): value is SdkEventsReadyFrame {
801
- return (
802
- typeof value === "object" &&
803
- value !== null &&
804
- "type" in value &&
805
- (value as { type?: unknown }).type === "sdk-events-ready"
806
- );
807
- }
808
-
809
- function create_turn_handle(
810
- lifecycle: RemoteTurnLifecycle,
811
- ): AgentSessionTurnHandle {
812
- return {
813
- id: lifecycle.turnId,
814
- get result() {
815
- return lifecycle.result;
816
- },
817
- finished: lifecycle.deferred_finished.promise,
818
- };
819
- }
820
-
821
- function extract_turn_id(event: AgentSessionEvent): string | null {
822
- switch (event.type) {
823
- case "turn-start":
824
- case "text-delta":
825
- case "reasoning-delta":
826
- case "tool-call":
827
- case "tool-result":
828
- case "assistant-step":
829
- case "turn-finish":
830
- return event.turnId;
831
- default:
832
- return null;
833
- }
834
- }