@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
@@ -3,123 +3,55 @@
3
3
  *
4
4
  * 关键点(中文)
5
5
  * - 面向 `new Agent(...)` 的本地会话使用场景。
6
- * - 统一收口消息落盘、session 级模型配置、prompt/subscribe/fork 等高层 API
6
+ * - 对外保留稳定 Session facade,把状态、turn、view 逻辑下沉到独立 service
7
7
  * - 内部继续复用 `Executor` / `JsonlSessionHistoryStore` / Composer 体系。
8
8
  */
9
9
 
10
- import { nanoid } from "nanoid";
11
- import type { Tool } from "ai";
12
10
  import { Executor } from "@executor/Executor.js";
11
+ import type { Tool } from "ai";
13
12
  import { JsonlSessionHistoryComposer } from "@executor/composer/history/jsonl/JsonlSessionHistoryComposer.js";
14
13
  import { JsonlSessionHistoryStore } from "@/executor/store/history/jsonl/JsonlSessionHistoryStore.js";
15
- import { extractTextFromUiMessage } from "@/executor/messages/UIMessageTransformer.js";
16
14
  import type {
17
15
  AgentSession,
18
- AgentSessionHistoryInput,
19
- AgentSessionHistoryPage,
20
16
  AgentSessionConfigSnapshot,
21
17
  AgentSessionForkInput,
18
+ AgentSessionHistoryInput,
19
+ AgentSessionHistoryPage,
22
20
  AgentSessionInfo,
23
21
  AgentSessionSetInput,
24
22
  AgentSessionSystemBlock,
25
23
  AgentSessionSystemSnapshot,
26
24
  } from "@/types/agent/AgentTypes.js";
27
- import type { SessionMessageV1 } from "@/executor/types/SessionMessages.js";
28
- import {
29
- buildSessionSystemBlocks,
30
- SessionSystemBuilder,
31
- } from "@/session/SessionSystemBuilder.js";
32
- import {
33
- buildSessionHistoryPage,
34
- buildSessionInfo,
35
- patchSessionModelLabel,
36
- readSessionMetadata,
37
- resolveSystemTimezone,
38
- writeSessionMetadata,
39
- } from "@/session/index.js";
40
25
  import {
41
26
  getSdkAgentSessionArchiveDirPath,
42
27
  getSdkAgentSessionDirPath,
28
+ getSdkAgentSessionInflightPath,
29
+ resolveSystemTimezone,
30
+ createRuntimeSessionPort,
43
31
  } from "@/session/index.js";
32
+ import { SessionSystemBuilder } from "@/session/SessionSystemBuilder.js";
44
33
  import type { SessionPort } from "@/types/runtime/agent/AgentContext.js";
45
- import {
46
- mapAgentEventToSessionEvent,
47
- mapUiMessageChunkToAgentEvent,
48
- } from "@/session/SessionEventMapper.js";
49
- import {
50
- persistSdkAssistantResult,
51
- touchSessionMetadata,
52
- } from "@/session/index.js";
53
- import { createRuntimeSessionPort } from "@/session/index.js";
54
- import { drainDeferredPersistedUserMessages } from "@executor/SessionRunScope.js";
55
34
  import type {
56
35
  AgentSessionSubscriber,
57
36
  AgentSessionUnsubscribe,
58
37
  } from "@/types/sdk/AgentSessionEvent.js";
59
38
  import type { AgentSessionPromptInput } from "@/types/sdk/AgentSessionPrompt.js";
60
39
  import type { AgentSessionTurnHandle } from "@/types/sdk/AgentSessionTurn.js";
61
- import type { SessionUserMessageV1 } from "@/executor/types/SessionMessages.js";
62
40
  import { SessionEventHub } from "@/session/runtime/SessionEventHub.js";
63
- import { SessionPromptRuntime } from "@/session/runtime/SessionPromptRuntime.js";
64
- import {
65
- inferAgentModelLabel,
66
- normalizeAgentModel,
67
- } from "@/model/CityModelAdapter.js";
68
- import { ensureSessionTitle } from "@/session/SessionTitle.js";
69
-
70
- type SessionOptions = {
71
- /**
72
- * 当前 agent 稳定标识。
73
- */
74
- agentId: string;
75
-
76
- /**
77
- * 当前项目根目录。
78
- */
79
- projectRoot: string;
80
-
81
- /**
82
- * 当前 sessionId。
83
- */
84
- sessionId: string;
85
-
86
- /**
87
- * 当前 agent 默认工具集合。
88
- */
89
- tools: Record<string, Tool>;
90
-
91
- /**
92
- * 统一日志器。
93
- */
94
- logger: {
95
- info(message: string, details?: Record<string, unknown>): void;
96
- warn(message: string, details?: Record<string, unknown>): void;
97
- };
98
-
99
- /**
100
- * 读取当前 SDK 调用方传入的 instruction system blocks。
101
- */
102
- getInstructionSystemBlocks: () => AgentSessionSystemBlock[];
103
-
104
- /**
105
- * 读取当前 agent 显式注入的受托管 plugin system blocks。
106
- */
107
- getManagedPluginSystemBlocks: () => Promise<AgentSessionSystemBlock[]>;
108
-
109
- /**
110
- * 读取当前 agent 显式注册 plugin 的 system blocks。
111
- */
112
- getPluginSystemBlocks: () => Promise<AgentSessionSystemBlock[]>;
113
-
114
- /**
115
- * 在执行前确保当前 session 已完成宿主侧默认配置。
116
- *
117
- * 关键点(中文)
118
- * - 这里通常由 `Agent` 注入,用于补齐默认 model 等一次性装配。
119
- * - 所有执行入口都应通过这里兜底,避免只在 SDK `agent.createSession()` / `agent.getSession()` 链路上做配置。
120
- */
121
- ensureConfigured?: (session: Session) => Promise<void>;
122
- };
41
+ import { SessionStateService } from "@/session/services/SessionStateService.js";
42
+ import { SessionTurnService } from "@/session/services/SessionTurnService.js";
43
+ import { SessionViewService } from "@/session/services/SessionViewService.js";
44
+ import type { SessionLocalState } from "@/types/session/SessionLocalState.js";
45
+ import type {
46
+ SessionComposerFactoryContext,
47
+ SessionComposerInput,
48
+ SessionComposerOptions,
49
+ } from "@/types/session/SessionComposerOptions.js";
50
+ import type { SessionCompactionComposer } from "@/executor/composer/compaction/SessionCompactionComposer.js";
51
+ import type { SessionContextComposer } from "@/executor/composer/context/SessionContextComposer.js";
52
+ import type { SessionHistoryComposer } from "@/executor/composer/history/SessionHistoryComposer.js";
53
+ import type { SessionSystemComposer } from "@/executor/composer/system/SessionSystemComposer.js";
54
+ import type { SessionOptions } from "@/types/session/SessionOptions.js";
123
55
 
124
56
  /**
125
57
  * SDK 本地 Session。
@@ -135,16 +67,15 @@ export class Session implements AgentSession {
135
67
  private readonly getManagedPluginSystemBlocks: SessionOptions["getManagedPluginSystemBlocks"];
136
68
  private readonly getPluginSystemBlocks: SessionOptions["getPluginSystemBlocks"];
137
69
  private readonly ensureConfiguredHook?: SessionOptions["ensureConfigured"];
70
+ private readonly composers?: SessionComposerOptions;
138
71
  private readonly historyStore: JsonlSessionHistoryStore;
139
- private readonly historyComposer: JsonlSessionHistoryComposer;
72
+ private readonly historyComposer: SessionHistoryComposer;
140
73
  private readonly executor: Executor;
141
74
  private readonly eventHub = new SessionEventHub();
142
- private readonly promptRuntime: SessionPromptRuntime;
143
- private sessionConfig: AgentSessionConfigSnapshot = {};
144
- private createdAt = Date.now();
145
- private timezone = resolveSystemTimezone();
146
- private initializePromise: Promise<this> | null = null;
147
- private ensureConfiguredPromise: Promise<void> | null = null;
75
+ private readonly localState: SessionLocalState;
76
+ private readonly stateService: SessionStateService;
77
+ private readonly turnService: SessionTurnService;
78
+ private readonly viewService: SessionViewService<Session>;
148
79
  private runtimePort: SessionPort | null = null;
149
80
 
150
81
  constructor(options: SessionOptions) {
@@ -157,6 +88,7 @@ export class Session implements AgentSession {
157
88
  this.getManagedPluginSystemBlocks = options.getManagedPluginSystemBlocks;
158
89
  this.getPluginSystemBlocks = options.getPluginSystemBlocks;
159
90
  this.ensureConfiguredHook = options.ensureConfigured;
91
+ this.composers = options.composers;
160
92
  if (!this.id) {
161
93
  throw new Error("Session requires a non-empty sessionId");
162
94
  }
@@ -167,277 +99,213 @@ export class Session implements AgentSession {
167
99
  throw new Error("Session requires a non-empty projectRoot");
168
100
  }
169
101
 
170
- const sessionDirPath = getSdkAgentSessionDirPath(
102
+ const session_dir_path = getSdkAgentSessionDirPath(
171
103
  this.projectRoot,
172
104
  this.agentId,
173
105
  this.id,
174
106
  );
175
- const messagesDirPath = `${sessionDirPath}/messages`;
107
+ const messages_dir_path = `${session_dir_path}/messages`;
176
108
  this.historyStore = new JsonlSessionHistoryStore({
177
109
  rootPath: this.projectRoot,
178
110
  agentId: this.agentId,
179
111
  sessionId: this.id,
180
112
  paths: {
181
- sessionDirPath,
182
- messagesDirPath,
183
- messagesFilePath: `${messagesDirPath}/messages.jsonl`,
184
- metaFilePath: `${messagesDirPath}/meta.json`,
113
+ sessionDirPath: session_dir_path,
114
+ messagesDirPath: messages_dir_path,
115
+ messagesFilePath: `${messages_dir_path}/messages.jsonl`,
116
+ metaFilePath: `${messages_dir_path}/meta.json`,
185
117
  archiveDirPath: getSdkAgentSessionArchiveDirPath(
186
118
  this.projectRoot,
187
119
  this.agentId,
188
120
  this.id,
189
121
  ),
122
+ inflightFilePath: getSdkAgentSessionInflightPath(
123
+ this.projectRoot,
124
+ this.agentId,
125
+ this.id,
126
+ ),
190
127
  },
191
128
  });
192
- this.historyComposer = new JsonlSessionHistoryComposer({
193
- store: this.historyStore,
194
- });
195
-
129
+ this.localState = {
130
+ sessionConfig: {},
131
+ createdAt: Date.now(),
132
+ timezone: resolveSystemTimezone(),
133
+ initializePromise: null,
134
+ ensureConfiguredPromise: null,
135
+ };
136
+ const composer_context = this.create_composer_context();
137
+ this.historyComposer = this.resolve_composer(
138
+ this.composers?.historyComposer,
139
+ composer_context,
140
+ () =>
141
+ new JsonlSessionHistoryComposer({
142
+ store: this.historyStore,
143
+ }),
144
+ );
145
+ const system_composer = this.resolve_composer(
146
+ this.composers?.systemComposer,
147
+ composer_context,
148
+ () =>
149
+ new SessionSystemBuilder({
150
+ agentId: this.agentId,
151
+ projectRoot: this.projectRoot,
152
+ getSessionCreatedAt: () => this.localState.createdAt,
153
+ getSessionTimezone: () => this.localState.timezone,
154
+ getInstructionSystemBlocks: this.getInstructionSystemBlocks,
155
+ getManagedPluginSystemBlocks: this.getManagedPluginSystemBlocks,
156
+ getPluginSystemBlocks: this.getPluginSystemBlocks,
157
+ }),
158
+ );
159
+ const context_composer = this.resolve_optional_composer<
160
+ SessionContextComposer
161
+ >(this.composers?.contextComposer, composer_context);
162
+ const compaction_composer = this.resolve_optional_composer<
163
+ SessionCompactionComposer
164
+ >(this.composers?.compactionComposer, composer_context);
196
165
  this.executor = new Executor({
197
166
  sessionId: this.id,
198
167
  historyStore: this.historyStore,
199
168
  historyComposer: this.historyComposer,
200
- getModel: () => this.sessionConfig.model,
169
+ getModel: () => this.localState.sessionConfig.model,
201
170
  logger: this.logger as never,
202
- systemComposer: new SessionSystemBuilder({
203
- agentId: this.agentId,
204
- projectRoot: this.projectRoot,
205
- getSessionCreatedAt: () => this.createdAt,
206
- getSessionTimezone: () => this.timezone,
207
- getInstructionSystemBlocks: this.getInstructionSystemBlocks,
208
- getManagedPluginSystemBlocks: this.getManagedPluginSystemBlocks,
209
- getPluginSystemBlocks: this.getPluginSystemBlocks,
210
- }),
171
+ systemComposer: system_composer,
211
172
  getTools: () => this.tools,
173
+ ...(context_composer ? { contextComposer: context_composer } : {}),
174
+ ...(compaction_composer
175
+ ? { compactionComposer: compaction_composer }
176
+ : {}),
212
177
  });
213
- this.promptRuntime = new SessionPromptRuntime({
214
- sessionId: this.id,
215
- publish: (event) => {
178
+ this.stateService = new SessionStateService({
179
+ agent_id: this.agentId,
180
+ project_root: this.projectRoot,
181
+ session_id: this.id,
182
+ history_store: this.historyStore,
183
+ executor: this.executor,
184
+ state: this.localState,
185
+ ensure_configured_hook: this.ensureConfiguredHook
186
+ ? async () => {
187
+ await this.ensureConfiguredHook?.(this);
188
+ }
189
+ : undefined,
190
+ publish_event: (event) => {
216
191
  this.eventHub.publish(event);
217
192
  },
218
- createAndPersistUserMessage: async (input) => {
219
- return await this.createAndPersistUserPromptMessage(input);
220
- },
221
- executeTurn: async ({ turnId, promptInput, onStepMerge }) => {
222
- return await this.executePromptTurn({
223
- turnId,
224
- promptInput,
225
- onStepMerge,
226
- });
193
+ });
194
+ this.turnService = new SessionTurnService({
195
+ session_id: this.id,
196
+ executor: this.executor,
197
+ state_service: this.stateService,
198
+ event_hub: this.eventHub,
199
+ });
200
+ this.viewService = new SessionViewService<Session>({
201
+ agent_id: this.agentId,
202
+ project_root: this.projectRoot,
203
+ session_id: this.id,
204
+ history_store: this.historyStore,
205
+ state_service: this.stateService,
206
+ is_executing: () => this.isExecuting(),
207
+ get_instruction_system_blocks: this.getInstructionSystemBlocks,
208
+ get_managed_plugin_system_blocks: this.getManagedPluginSystemBlocks,
209
+ get_plugin_system_blocks: this.getPluginSystemBlocks,
210
+ ...(this.composers?.systemComposer
211
+ ? { custom_system_composer: system_composer }
212
+ : {}),
213
+ create_fork_session: async (session_id) => {
214
+ const session = this.createChildSession(session_id);
215
+ await session.initialize();
216
+ return {
217
+ session,
218
+ history_store: session.historyStore,
219
+ state_service: session.stateService,
220
+ };
227
221
  },
228
222
  });
229
223
  }
230
224
 
231
225
  /**
232
- * 初始化当前 session 的 meta 信息与内存配置。
226
+ * 初始化当前 session
233
227
  */
234
228
  async initialize(): Promise<this> {
235
- if (this.initializePromise) {
236
- return await this.initializePromise;
237
- }
238
- this.initializePromise = (async () => {
239
- const metadata = await readSessionMetadata({
240
- projectRoot: this.projectRoot,
241
- agentId: this.agentId,
242
- sessionId: this.id,
243
- });
244
- const createdAt =
245
- typeof metadata.createdAt === "number" ? metadata.createdAt : Date.now();
246
- const timezone =
247
- typeof metadata.timezone === "string" && metadata.timezone.trim()
248
- ? metadata.timezone.trim()
249
- : resolveSystemTimezone();
250
- await writeSessionMetadata({
251
- projectRoot: this.projectRoot,
252
- agentId: this.agentId,
253
- sessionId: this.id,
254
- meta: {
255
- ...metadata,
256
- agentId: this.agentId,
257
- createdAt,
258
- timezone,
259
- },
260
- });
261
- this.createdAt = createdAt;
262
- this.timezone = timezone;
263
- this.sessionConfig = {
264
- ...(metadata.modelLabel
265
- ? { modelLabel: metadata.modelLabel }
266
- : {}),
267
- };
268
- return this;
269
- })();
270
- return await this.initializePromise;
229
+ await this.stateService.initialize();
230
+ return this;
271
231
  }
272
232
 
273
233
  /**
274
234
  * 读取当前 session 配置快照。
275
235
  */
276
236
  get config(): AgentSessionConfigSnapshot {
277
- return {
278
- ...this.sessionConfig,
279
- };
237
+ return this.stateService.get_config();
280
238
  }
281
239
 
282
240
  /**
283
241
  * 写入当前 session 默认配置。
284
242
  */
285
243
  async set(input: AgentSessionSetInput): Promise<void> {
286
- if (input.model) {
287
- this.sessionConfig.model = normalizeAgentModel(input.model);
288
- this.sessionConfig.modelLabel = inferAgentModelLabel(input.model);
289
- this.executor.clearExecutor();
290
- }
291
- await patchSessionModelLabel({
292
- projectRoot: this.projectRoot,
293
- agentId: this.agentId,
294
- sessionId: this.id,
295
- model: this.sessionConfig.model,
296
- });
244
+ await this.stateService.set(input);
297
245
  }
298
246
 
299
247
  /**
300
248
  * 追加一条新的 Session prompt。
301
- *
302
- * 关键点(中文)
303
- * - 这是 Session actor 模型下唯一的输入入口。
304
- * - 首条输入、运行中补充输入、排到下一轮的输入,调用方式完全一致。
305
249
  */
306
250
  async prompt(input: AgentSessionPromptInput): Promise<AgentSessionTurnHandle> {
307
- const query = String(input.query || "").trim();
308
- if (!query) {
309
- throw new Error("session.prompt requires a non-empty query");
310
- }
311
- await this.ensureRunnable();
312
- return await this.promptRuntime.prompt({
313
- query,
314
- });
251
+ return await this.turnService.prompt(input);
315
252
  }
316
253
 
317
254
  /**
318
255
  * 订阅当前 Session 的未来事件。
319
- *
320
- * 关键点(中文)
321
- * - 只广播订阅之后产生的事件。
322
- * - 不做历史回放;历史仍通过 `history()` 读取。
323
256
  */
324
257
  subscribe(subscriber: AgentSessionSubscriber): AgentSessionUnsubscribe {
325
- return this.eventHub.subscribe(subscriber);
258
+ return this.turnService.subscribe(subscriber);
326
259
  }
327
260
 
328
261
  /**
329
262
  * 追加一条 user 文本消息。
330
263
  */
331
264
  async appendUserMessage(input: {
332
- /**
333
- * 需要写入的用户文本。
334
- */
335
265
  text: string;
336
266
  }): Promise<void> {
337
- await this.executor.appendUserMessage({
267
+ await this.stateService.append_user_message({
338
268
  text: String(input.text || "").trim(),
339
269
  });
340
- await this.ensureTitleFromHistory({ generate: true });
341
- await this.touchMetadata();
342
270
  }
343
271
 
344
272
  /**
345
273
  * 追加一条 assistant 文本消息。
346
274
  */
347
275
  async appendAssistantMessage(input: {
348
- /**
349
- * 需要写入的 assistant 文本。
350
- */
351
276
  text: string;
352
277
  }): Promise<void> {
353
- await this.executor.appendAssistantMessage({
278
+ await this.stateService.append_assistant_message({
354
279
  fallbackText: String(input.text || "").trim(),
355
280
  });
356
- await this.touchMetadata();
357
281
  }
358
282
 
359
283
  /**
360
284
  * 读取当前 session 详情。
361
285
  */
362
286
  async getInfo(): Promise<AgentSessionInfo> {
363
- const [metadata, messages] = await Promise.all([
364
- readSessionMetadata({
365
- projectRoot: this.projectRoot,
366
- agentId: this.agentId,
367
- sessionId: this.id,
368
- }),
369
- this.historyStore.list(),
370
- ]);
371
- const metadataWithTitle = metadata.title
372
- ? metadata
373
- : await ensureSessionTitle({
374
- projectRoot: this.projectRoot,
375
- agentId: this.agentId,
376
- sessionId: this.id,
377
- messages,
378
- });
379
- return buildSessionInfo({
380
- projectRoot: this.projectRoot,
381
- agentId: this.agentId,
382
- sessionId: this.id,
383
- metadata: metadataWithTitle,
384
- messages,
385
- executing: this.isExecuting(),
386
- });
287
+ return await this.viewService.get_info();
387
288
  }
388
289
 
389
290
  /**
390
291
  * 读取当前 session 历史分页。
391
292
  */
392
293
  async history(input?: AgentSessionHistoryInput): Promise<AgentSessionHistoryPage> {
393
- const [session, messages] = await Promise.all([
394
- this.getInfo(),
395
- this.historyStore.list(),
396
- ]);
397
- return buildSessionHistoryPage({
398
- session,
399
- messages,
400
- input,
401
- });
294
+ return await this.viewService.history(input);
402
295
  }
403
296
 
404
297
  /**
405
- * 读取当前 session 生效的 system prompt 文本集合。
406
- *
407
- * 关键点(中文)
408
- * - 返回内容与实际 run 时使用的 SDK system composer 同源。
409
- * - 包含 instruction/core、受托管 plugin system、显式注册 plugin system 与 session 上下文。
410
- * - 返回结构化快照,不把 system prompt 写入会话历史。
298
+ * 读取当前 session 生效的 system 快照。
411
299
  */
412
300
  async system(): Promise<AgentSessionSystemSnapshot> {
413
- const blocks = await buildSessionSystemBlocks({
414
- agentId: this.agentId,
415
- projectRoot: this.projectRoot,
416
- sessionId: this.id,
417
- createdAt: this.createdAt,
418
- timezone: this.timezone,
419
- getInstructionSystemBlocks: this.getInstructionSystemBlocks,
420
- getManagedPluginSystemBlocks: this.getManagedPluginSystemBlocks,
421
- getPluginSystemBlocks: this.getPluginSystemBlocks,
422
- });
423
- return {
424
- sessionId: this.id,
425
- session: {
426
- agentId: this.agentId,
427
- sessionId: this.id,
428
- projectRoot: this.projectRoot,
429
- createdAt: new Date(this.createdAt).toISOString(),
430
- timezone: this.timezone,
431
- },
432
- blocks,
433
- };
301
+ return await this.viewService.system();
434
302
  }
435
303
 
436
304
  /**
437
305
  * 返回当前 session 是否正在执行。
438
306
  */
439
307
  isExecuting(): boolean {
440
- return this.promptRuntime.isActive() || this.executor.isExecuting();
308
+ return this.turnService.is_prompt_runtime_active() || this.executor.isExecuting();
441
309
  }
442
310
 
443
311
  /**
@@ -451,48 +319,7 @@ export class Session implements AgentSession {
451
319
  * 从当前 session 创建一个分叉会话。
452
320
  */
453
321
  async fork(input?: AgentSessionForkInput | string): Promise<Session> {
454
- const messageId =
455
- typeof input === "string"
456
- ? String(input || "").trim() || undefined
457
- : String(input?.messageId || "").trim() || undefined;
458
- const messages = await this.historyStore.list();
459
- const forkMessages =
460
- !messageId
461
- ? messages
462
- : (() => {
463
- const targetIndex = messages.findIndex(
464
- (message) => String(message.id || "").trim() === messageId,
465
- );
466
- if (targetIndex < 0) {
467
- throw new Error(
468
- `Cannot fork session "${this.id}": messageId "${messageId}" not found.`,
469
- );
470
- }
471
- return messages.slice(0, targetIndex + 1);
472
- })();
473
-
474
- const forked = new Session({
475
- agentId: this.agentId,
476
- projectRoot: this.projectRoot,
477
- sessionId: `fork-${Date.now()}-${nanoid(8)}`,
478
- tools: this.tools,
479
- logger: this.logger,
480
- getInstructionSystemBlocks: this.getInstructionSystemBlocks,
481
- getManagedPluginSystemBlocks: this.getManagedPluginSystemBlocks,
482
- getPluginSystemBlocks: this.getPluginSystemBlocks,
483
- });
484
- await forked.initialize();
485
- if (this.sessionConfig.model) {
486
- await forked.set({
487
- model: this.sessionConfig.model,
488
- });
489
- }
490
- for (const message of forkMessages) {
491
- await forked.historyStore.append(message);
492
- }
493
- await forked.ensureTitleFromHistory({ generate: true });
494
- await forked.touchMetadata();
495
- return forked;
322
+ return await this.viewService.fork(input);
496
323
  }
497
324
 
498
325
  /**
@@ -503,25 +330,19 @@ export class Session implements AgentSession {
503
330
  this.runtimePort = createRuntimeSessionPort({
504
331
  sessionId: this.id,
505
332
  getExecutor: () => this.executor.getExecutor(),
506
- prompt: async (input) => {
507
- return await this.prompt(input);
508
- },
509
- subscribe: (subscriber) => {
510
- return this.subscribe(subscriber);
511
- },
333
+ prompt: async (input) => await this.prompt(input),
334
+ subscribe: (subscriber) => this.subscribe(subscriber),
512
335
  clearExecutor: () => {
513
336
  this.executor.clearExecutor();
514
337
  },
515
338
  afterSessionUpdatedAsync: async () => {
516
339
  await this.executor.afterSessionUpdatedAsync();
517
340
  },
518
- appendUserMessage: async (messageParams) => {
519
- await this.executor.appendUserMessage(messageParams);
520
- await this.ensureTitleFromHistory({ generate: true });
521
- await this.touchMetadata();
341
+ appendUserMessage: async (message_params) => {
342
+ await this.stateService.append_user_message(message_params);
522
343
  },
523
- appendAssistantMessage: async (messageParams) => {
524
- await this.executor.appendAssistantMessage(messageParams);
344
+ appendAssistantMessage: async (message_params) => {
345
+ await this.stateService.append_assistant_message(message_params);
525
346
  },
526
347
  isExecuting: () => this.isExecuting(),
527
348
  historyStore: this.historyStore,
@@ -529,7 +350,7 @@ export class Session implements AgentSession {
529
350
  await this.ensureReadyForExecution();
530
351
  },
531
352
  touchMetadata: async () => {
532
- await this.touchMetadata();
353
+ await this.stateService.touch_metadata();
533
354
  },
534
355
  });
535
356
  return this.runtimePort;
@@ -539,180 +360,58 @@ export class Session implements AgentSession {
539
360
  * 在执行前确保 session 已完成初始化与宿主装配。
540
361
  */
541
362
  async ensureReadyForExecution(): Promise<void> {
542
- await this.initialize();
543
- if (this.ensureConfiguredPromise) {
544
- await this.ensureConfiguredPromise;
545
- return;
546
- }
547
- this.ensureConfiguredPromise = (async () => {
548
- if (!this.ensureConfiguredHook) return;
549
- await this.ensureConfiguredHook(this);
550
- })();
551
- try {
552
- await this.ensureConfiguredPromise;
553
- } catch (error) {
554
- this.ensureConfiguredPromise = null;
555
- throw error;
556
- }
557
- }
558
-
559
- private async ensureRunnable(): Promise<void> {
560
- await this.ensureReadyForExecution();
561
- if (!this.sessionConfig.model) {
562
- throw new Error(
563
- `Session "${this.id}" requires a configured model. Pass model to new Agent({ model }) or call session.set({ model }) first.`,
564
- );
565
- }
566
- }
567
-
568
- private async touchMetadata(): Promise<void> {
569
- await touchSessionMetadata({
570
- projectRoot: this.projectRoot,
571
- agentId: this.agentId,
572
- sessionId: this.id,
573
- sessionConfig: this.sessionConfig,
574
- });
363
+ await this.stateService.ensure_ready_for_execution();
575
364
  }
576
365
 
577
- private async ensureTitleFromHistory(input?: {
578
- /**
579
- * 是否允许调用模型生成标题。
580
- */
581
- generate?: boolean;
582
- }): Promise<void> {
583
- const messages = await this.historyStore.list();
584
- const beforeMetadata = await readSessionMetadata({
585
- projectRoot: this.projectRoot,
366
+ private createChildSession(session_id: string): Session {
367
+ return new Session({
586
368
  agentId: this.agentId,
587
- sessionId: this.id,
588
- });
589
- const beforeTitle = String(beforeMetadata.title || "").trim();
590
- const nextMetadata = await ensureSessionTitle({
591
369
  projectRoot: this.projectRoot,
592
- agentId: this.agentId,
593
- sessionId: this.id,
594
- messages,
595
- ...(input?.generate ? { model: this.sessionConfig.model } : {}),
596
- generate: input?.generate === true,
597
- });
598
- const nextTitle = String(nextMetadata.title || "").trim();
599
- if (!nextTitle || nextTitle === beforeTitle) return;
600
- this.eventHub.publish({
601
- type: "session-title",
602
- sessionId: this.id,
603
- title: nextTitle,
370
+ sessionId: session_id,
371
+ tools: this.tools,
372
+ logger: this.logger,
373
+ getInstructionSystemBlocks: this.getInstructionSystemBlocks,
374
+ getManagedPluginSystemBlocks: this.getManagedPluginSystemBlocks,
375
+ getPluginSystemBlocks: this.getPluginSystemBlocks,
376
+ composers: this.composers,
604
377
  });
605
378
  }
606
379
 
607
- private async persistAssistantResult(
608
- assistantMessage: SessionMessageV1,
609
- ): Promise<void> {
610
- await persistSdkAssistantResult({
611
- projectRoot: this.projectRoot,
380
+ private create_composer_context(): SessionComposerFactoryContext {
381
+ return {
612
382
  agentId: this.agentId,
383
+ projectRoot: this.projectRoot,
613
384
  sessionId: this.id,
614
- sessionConfig: this.sessionConfig,
615
- executor: this.executor,
616
- assistantMessage,
617
- });
618
- }
619
-
620
- private async createAndPersistUserPromptMessage(
621
- input: AgentSessionPromptInput,
622
- ): Promise<SessionUserMessageV1> {
623
- const message = this.historyStore.userText({
624
- text: String(input.query || "").trim(),
625
- metadata: {
626
- sessionId: this.id,
627
- },
628
- }) as SessionUserMessageV1;
629
- await this.executor.appendUserMessage({
630
- message,
631
- });
632
- await this.ensureTitleFromHistory({ generate: true });
633
- await this.touchMetadata();
634
- return message;
385
+ historyStore: this.historyStore,
386
+ getTools: () => this.tools,
387
+ getInstructionSystemBlocks: this.getInstructionSystemBlocks,
388
+ getManagedPluginSystemBlocks: this.getManagedPluginSystemBlocks,
389
+ getPluginSystemBlocks: this.getPluginSystemBlocks,
390
+ getSessionCreatedAt: () => this.localState.createdAt,
391
+ getSessionTimezone: () => this.localState.timezone,
392
+ };
635
393
  }
636
394
 
637
- private async executePromptTurn(input: {
638
- turnId: string;
639
- promptInput: AgentSessionPromptInput;
640
- onStepMerge: () => Promise<SessionUserMessageV1[]>;
641
- }): Promise<{
642
- text: string;
643
- success: boolean;
644
- assistantMessage: SessionMessageV1;
645
- error?: string;
646
- }> {
647
- const toolNameByCallId = new Map<string, string>();
648
- const result = await this.executor.run({
649
- query: input.promptInput.query,
650
- onStepCallback: input.onStepMerge,
651
- onAssistantStepCallback: async (step) => {
652
- this.eventHub.publish({
653
- type: "assistant-step",
654
- turnId: input.turnId,
655
- text: step.text,
656
- stepIndex: step.stepIndex,
657
- ...(step.visibility ? { visibility: step.visibility } : {}),
658
- });
659
- },
660
- onUiMessageChunkCallback: async (chunk) => {
661
- if (chunk.type === "tool-input-start") {
662
- toolNameByCallId.set(chunk.toolCallId, chunk.toolName);
663
- return;
664
- }
665
- const event = mapUiMessageChunkToAgentEvent(chunk);
666
- if (!event) return;
667
- const resolvedEvent =
668
- (
669
- event.type === "tool-result" ||
670
- event.type === "tool-error"
671
- ) &&
672
- event.toolName === "unknown"
673
- ? {
674
- ...event,
675
- toolName:
676
- toolNameByCallId.get(event.toolCallId) || event.toolName,
677
- }
678
- : event;
679
- if (
680
- resolvedEvent.type === "tool-call" ||
681
- resolvedEvent.type === "tool-error"
682
- ) {
683
- toolNameByCallId.set(
684
- resolvedEvent.toolCallId,
685
- resolvedEvent.toolName,
686
- );
687
- }
688
- const sessionEvent = mapAgentEventToSessionEvent({
689
- event: resolvedEvent,
690
- turnId: input.turnId,
691
- });
692
- if (sessionEvent) {
693
- this.eventHub.publish(sessionEvent);
694
- }
695
- },
696
- });
697
- await this.persistAssistantResult(result.assistantMessage);
698
- await this.persistDeferredUserMessages();
699
- return {
700
- text: extractTextFromUiMessage(result.assistantMessage),
701
- success: result.success,
702
- assistantMessage: result.assistantMessage,
703
- ...(result.error ? { error: result.error } : {}),
704
- };
395
+ private resolve_composer<TComposer>(
396
+ input: SessionComposerInput<TComposer> | undefined,
397
+ context: SessionComposerFactoryContext,
398
+ create_default: () => TComposer,
399
+ ): TComposer {
400
+ const composer = this.resolve_optional_composer(input, context);
401
+ return composer || create_default();
705
402
  }
706
403
 
707
- private async persistDeferredUserMessages(): Promise<void> {
708
- const deferredMessages = drainDeferredPersistedUserMessages(this.id);
709
- for (const message of deferredMessages) {
710
- await this.executor.appendUserMessage({
711
- message,
712
- });
713
- }
714
- if (deferredMessages.length > 0) {
715
- await this.touchMetadata();
404
+ private resolve_optional_composer<TComposer>(
405
+ input: SessionComposerInput<TComposer> | undefined,
406
+ context: SessionComposerFactoryContext,
407
+ ): TComposer | undefined {
408
+ if (!input) return undefined;
409
+ if (typeof input === "function") {
410
+ const create_composer = input as (
411
+ context: SessionComposerFactoryContext,
412
+ ) => TComposer;
413
+ return create_composer(context);
716
414
  }
415
+ return input;
717
416
  }
718
417
  }