@downcity/agent 1.1.237 → 1.1.258

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 (578) hide show
  1. package/README.md +21 -20
  2. package/bin/agent/{local/Agent.d.ts → Agent.d.ts} +37 -27
  3. package/bin/agent/Agent.d.ts.map +1 -0
  4. package/bin/agent/Agent.js +211 -0
  5. package/bin/agent/Agent.js.map +1 -0
  6. package/bin/agent/AgentContext.d.ts +64 -0
  7. package/bin/agent/AgentContext.d.ts.map +1 -0
  8. package/bin/agent/AgentContext.js +53 -0
  9. package/bin/agent/AgentContext.js.map +1 -0
  10. package/bin/agent/{local/AgentInstructions.d.ts → AgentInstructions.d.ts} +1 -6
  11. package/bin/agent/AgentInstructions.d.ts.map +1 -0
  12. package/bin/agent/{local/AgentInstructions.js → AgentInstructions.js} +1 -10
  13. package/bin/agent/AgentInstructions.js.map +1 -0
  14. package/bin/{model/CityModelAdapter.d.ts → agent/AgentModel.d.ts} +3 -3
  15. package/bin/agent/AgentModel.d.ts.map +1 -0
  16. package/bin/{model/CityModelAdapter.js → agent/AgentModel.js} +11 -4
  17. package/bin/agent/AgentModel.js.map +1 -0
  18. package/bin/agent/{local/services/AgentSessions.d.ts → AgentSessions.d.ts} +30 -40
  19. package/bin/agent/AgentSessions.d.ts.map +1 -0
  20. package/bin/agent/{local/services/AgentSessions.js → AgentSessions.js} +62 -79
  21. package/bin/agent/AgentSessions.js.map +1 -0
  22. package/bin/agent/AgentState.d.ts +64 -0
  23. package/bin/agent/AgentState.d.ts.map +1 -0
  24. package/bin/agent/AgentState.js +118 -0
  25. package/bin/agent/AgentState.js.map +1 -0
  26. package/bin/config/Paths.d.ts +0 -43
  27. package/bin/config/Paths.d.ts.map +1 -1
  28. package/bin/config/Paths.js +0 -79
  29. package/bin/config/Paths.js.map +1 -1
  30. package/bin/config/ProjectSetup.d.ts.map +1 -0
  31. package/bin/{agent/local → config}/ProjectSetup.js +1 -1
  32. package/bin/config/ProjectSetup.js.map +1 -0
  33. package/bin/executor/Executor.d.ts +20 -86
  34. package/bin/executor/Executor.d.ts.map +1 -1
  35. package/bin/executor/Executor.js +109 -260
  36. package/bin/executor/Executor.js.map +1 -1
  37. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts +1 -1
  38. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts.map +1 -1
  39. package/bin/executor/composer/system/default/SystemDomain.d.ts +1 -1
  40. package/bin/executor/composer/system/default/SystemDomain.d.ts.map +1 -1
  41. package/bin/executor/composer/system/default/SystemDomain.js +4 -1
  42. package/bin/executor/composer/system/default/SystemDomain.js.map +1 -1
  43. package/bin/executor/composer/system/default/assets/core.prompt.d.ts +1 -1
  44. package/bin/executor/composer/system/default/assets/core.prompt.d.ts.map +1 -1
  45. package/bin/executor/composer/system/default/assets/core.prompt.js +1 -1
  46. package/bin/executor/composer/system/default/assets/core.prompt.js.map +1 -1
  47. package/bin/executor/core-engine/CoreEngineRunner.d.ts +7 -13
  48. package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -1
  49. package/bin/executor/core-engine/CoreEngineRunner.js +81 -34
  50. package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -1
  51. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts +6 -12
  52. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts.map +1 -1
  53. package/bin/executor/services/ExecutorRecoveryPolicy.js +20 -6
  54. package/bin/executor/services/ExecutorRecoveryPolicy.js.map +1 -1
  55. package/bin/executor/tools/file/ReadImageToolBridge.d.ts +21 -0
  56. package/bin/executor/tools/file/ReadImageToolBridge.d.ts.map +1 -0
  57. package/bin/executor/tools/file/ReadImageToolBridge.js +69 -0
  58. package/bin/executor/tools/file/ReadImageToolBridge.js.map +1 -0
  59. package/bin/executor/tools/plugin/PluginToolBridge.d.ts.map +1 -1
  60. package/bin/executor/tools/plugin/PluginToolBridge.js +6 -5
  61. package/bin/executor/tools/plugin/PluginToolBridge.js.map +1 -1
  62. package/bin/executor/tools/plugin/PluginToolDefinition.d.ts.map +1 -1
  63. package/bin/executor/tools/plugin/PluginToolDefinition.js +15 -2
  64. package/bin/executor/tools/plugin/PluginToolDefinition.js.map +1 -1
  65. package/bin/executor/types/SessionHistoryMeta.d.ts +0 -2
  66. package/bin/executor/types/SessionHistoryMeta.d.ts.map +1 -1
  67. package/bin/index.d.ts +17 -21
  68. package/bin/index.d.ts.map +1 -1
  69. package/bin/index.js +9 -11
  70. package/bin/index.js.map +1 -1
  71. package/bin/plugin/core/ActionScheduleExecutor.d.ts +1 -1
  72. package/bin/plugin/core/ActionScheduleExecutor.d.ts.map +1 -1
  73. package/bin/plugin/core/ActionScheduleRuntime.d.ts +1 -1
  74. package/bin/plugin/core/ActionScheduleRuntime.d.ts.map +1 -1
  75. package/bin/plugin/core/BasePlugin.d.ts +4 -3
  76. package/bin/plugin/core/BasePlugin.d.ts.map +1 -1
  77. package/bin/plugin/core/BasePlugin.js.map +1 -1
  78. package/bin/plugin/core/HookRegistry.d.ts +5 -8
  79. package/bin/plugin/core/HookRegistry.d.ts.map +1 -1
  80. package/bin/plugin/core/HookRegistry.js +12 -12
  81. package/bin/plugin/core/HookRegistry.js.map +1 -1
  82. package/bin/plugin/core/PluginActionFactory.d.ts +6 -3
  83. package/bin/plugin/core/PluginActionFactory.d.ts.map +1 -1
  84. package/bin/plugin/core/PluginActionFactory.js.map +1 -1
  85. package/bin/plugin/core/PluginActionRunner.d.ts +1 -1
  86. package/bin/plugin/core/PluginActionRunner.d.ts.map +1 -1
  87. package/bin/plugin/core/PluginCatalog.d.ts +1 -1
  88. package/bin/plugin/core/PluginCatalog.d.ts.map +1 -1
  89. package/bin/plugin/core/PluginHttpRoutes.d.ts +1 -1
  90. package/bin/plugin/core/PluginHttpRoutes.d.ts.map +1 -1
  91. package/bin/plugin/core/PluginLocalExecution.d.ts +4 -5
  92. package/bin/plugin/core/PluginLocalExecution.d.ts.map +1 -1
  93. package/bin/plugin/core/PluginLocalExecution.js +4 -12
  94. package/bin/plugin/core/PluginLocalExecution.js.map +1 -1
  95. package/bin/plugin/core/PluginRegistry.d.ts +16 -12
  96. package/bin/plugin/core/PluginRegistry.d.ts.map +1 -1
  97. package/bin/plugin/core/PluginRegistry.js +43 -22
  98. package/bin/plugin/core/PluginRegistry.js.map +1 -1
  99. package/bin/plugin/core/PluginStateController.d.ts +1 -1
  100. package/bin/plugin/core/PluginStateController.d.ts.map +1 -1
  101. package/bin/{agent/remote → remote}/RemoteAgent.d.ts +4 -4
  102. package/bin/remote/RemoteAgent.d.ts.map +1 -0
  103. package/bin/{agent/remote → remote}/RemoteAgent.js +3 -3
  104. package/bin/remote/RemoteAgent.js.map +1 -0
  105. package/bin/{agent/remote → remote}/RemoteSession.d.ts +9 -11
  106. package/bin/remote/RemoteSession.d.ts.map +1 -0
  107. package/bin/{agent/remote → remote}/RemoteSession.js +3 -33
  108. package/bin/remote/RemoteSession.js.map +1 -0
  109. package/bin/{agent/remote → remote}/RemoteTransport.d.ts +7 -9
  110. package/bin/remote/RemoteTransport.d.ts.map +1 -0
  111. package/bin/remote/RemoteTransport.js.map +1 -0
  112. package/bin/{agent/remote → remote}/TransportFactory.d.ts +1 -1
  113. package/bin/remote/TransportFactory.d.ts.map +1 -0
  114. package/bin/{agent/remote → remote}/TransportFactory.js +2 -2
  115. package/bin/remote/TransportFactory.js.map +1 -0
  116. package/bin/{agent/remote → remote}/transports/HttpRemoteAgentTransport.d.ts +8 -9
  117. package/bin/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -0
  118. package/bin/{agent/remote → remote}/transports/HttpRemoteAgentTransport.js +0 -13
  119. package/bin/remote/transports/HttpRemoteAgentTransport.js.map +1 -0
  120. package/bin/{rpc/Client.d.ts → remote/transports/RpcClient.d.ts} +15 -22
  121. package/bin/remote/transports/RpcClient.d.ts.map +1 -0
  122. package/bin/{rpc/Client.js → remote/transports/RpcClient.js} +2 -13
  123. package/bin/remote/transports/RpcClient.js.map +1 -0
  124. package/bin/{agent/remote → remote}/transports/RpcRemoteAgentTransport.d.ts +8 -9
  125. package/bin/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -0
  126. package/bin/{agent/remote → remote}/transports/RpcRemoteAgentTransport.js +1 -4
  127. package/bin/remote/transports/RpcRemoteAgentTransport.js.map +1 -0
  128. package/bin/session/DefaultSessionComposer.d.ts +18 -0
  129. package/bin/session/DefaultSessionComposer.d.ts.map +1 -0
  130. package/bin/session/DefaultSessionComposer.js +62 -0
  131. package/bin/session/DefaultSessionComposer.js.map +1 -0
  132. package/bin/session/Session.d.ts +44 -33
  133. package/bin/session/Session.d.ts.map +1 -1
  134. package/bin/session/Session.js +440 -274
  135. package/bin/session/Session.js.map +1 -1
  136. package/bin/session/SessionMessages.d.ts +117 -0
  137. package/bin/session/SessionMessages.d.ts.map +1 -0
  138. package/bin/session/{recorder/SessionRecorder.js → SessionMessages.js} +194 -284
  139. package/bin/session/SessionMessages.js.map +1 -0
  140. package/bin/session/SessionQueue.d.ts +34 -0
  141. package/bin/session/SessionQueue.d.ts.map +1 -0
  142. package/bin/session/SessionQueue.js +60 -0
  143. package/bin/session/SessionQueue.js.map +1 -0
  144. package/bin/session/SessionState.d.ts +70 -0
  145. package/bin/session/SessionState.d.ts.map +1 -0
  146. package/bin/session/SessionState.js +267 -0
  147. package/bin/session/SessionState.js.map +1 -0
  148. package/bin/session/SessionSystem.d.ts +15 -0
  149. package/bin/session/SessionSystem.d.ts.map +1 -0
  150. package/bin/session/SessionSystem.js +95 -0
  151. package/bin/session/SessionSystem.js.map +1 -0
  152. package/bin/session/SessionTurn.d.ts +84 -0
  153. package/bin/session/SessionTurn.d.ts.map +1 -0
  154. package/bin/session/SessionTurn.js +588 -0
  155. package/bin/session/SessionTurn.js.map +1 -0
  156. package/bin/session/approval/SessionApprovalBroker.d.ts +48 -0
  157. package/bin/session/approval/SessionApprovalBroker.d.ts.map +1 -0
  158. package/bin/session/approval/SessionApprovalBroker.js +126 -0
  159. package/bin/session/approval/SessionApprovalBroker.js.map +1 -0
  160. package/bin/session/browse/Browse.d.ts.map +1 -1
  161. package/bin/session/browse/Browse.js +1 -4
  162. package/bin/session/browse/Browse.js.map +1 -1
  163. package/bin/session/{recorder → messages}/JsonlSessionMessageStore.d.ts.map +1 -1
  164. package/bin/session/{recorder → messages}/JsonlSessionMessageStore.js.map +1 -1
  165. package/bin/session/messages/SessionAssistantMessageWriter.d.ts +62 -0
  166. package/bin/session/messages/SessionAssistantMessageWriter.d.ts.map +1 -0
  167. package/bin/session/messages/SessionAssistantMessageWriter.js +287 -0
  168. package/bin/session/messages/SessionAssistantMessageWriter.js.map +1 -0
  169. package/bin/session/messages/SessionJsonValue.d.ts +10 -0
  170. package/bin/session/messages/SessionJsonValue.d.ts.map +1 -0
  171. package/bin/session/messages/SessionJsonValue.js +23 -0
  172. package/bin/session/messages/SessionJsonValue.js.map +1 -0
  173. package/bin/session/{recorder → messages}/SessionMessageCodec.d.ts +4 -1
  174. package/bin/session/messages/SessionMessageCodec.d.ts.map +1 -0
  175. package/bin/session/{recorder → messages}/SessionMessageCodec.js +33 -19
  176. package/bin/session/messages/SessionMessageCodec.js.map +1 -0
  177. package/bin/session/messages/SessionMessageCompaction.d.ts +22 -0
  178. package/bin/session/messages/SessionMessageCompaction.d.ts.map +1 -0
  179. package/bin/session/{recorder/SessionRecorderCompaction.js → messages/SessionMessageCompaction.js} +19 -51
  180. package/bin/session/messages/SessionMessageCompaction.js.map +1 -0
  181. package/bin/session/runtime/SessionEventHub.d.ts +1 -8
  182. package/bin/session/runtime/SessionEventHub.d.ts.map +1 -1
  183. package/bin/session/runtime/SessionEventHub.js +1 -6
  184. package/bin/session/runtime/SessionEventHub.js.map +1 -1
  185. package/bin/session/storage/Metadata.d.ts +23 -5
  186. package/bin/session/storage/Metadata.d.ts.map +1 -1
  187. package/bin/session/storage/Metadata.js +32 -29
  188. package/bin/session/storage/Metadata.js.map +1 -1
  189. package/bin/session/storage/RuntimeSessionPort.d.ts +5 -10
  190. package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
  191. package/bin/session/storage/RuntimeSessionPort.js +2 -4
  192. package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
  193. package/bin/types/agent/AgentOptions.d.ts +6 -35
  194. package/bin/types/agent/AgentOptions.d.ts.map +1 -1
  195. package/bin/types/agent/AgentState.d.ts +28 -0
  196. package/bin/types/agent/AgentState.d.ts.map +1 -0
  197. package/bin/types/agent/AgentState.js +9 -0
  198. package/bin/types/agent/AgentState.js.map +1 -0
  199. package/bin/types/agent/SessionActor.d.ts +0 -2
  200. package/bin/types/agent/SessionActor.d.ts.map +1 -1
  201. package/bin/types/agent/SessionTypes.d.ts +5 -18
  202. package/bin/types/agent/SessionTypes.d.ts.map +1 -1
  203. package/bin/types/executor/SessionRunContext.d.ts +8 -2
  204. package/bin/types/executor/SessionRunContext.d.ts.map +1 -1
  205. package/bin/types/executor/SessionRunContext.js +1 -1
  206. package/bin/types/executor/SessionToolExecutionContext.d.ts +20 -0
  207. package/bin/types/executor/SessionToolExecutionContext.d.ts.map +1 -0
  208. package/bin/types/executor/SessionToolExecutionContext.js +10 -0
  209. package/bin/types/executor/SessionToolExecutionContext.js.map +1 -0
  210. package/bin/types/plugin/PluginAction.d.ts +10 -1
  211. package/bin/types/plugin/PluginAction.d.ts.map +1 -1
  212. package/bin/types/plugin/PluginCommand.d.ts +3 -11
  213. package/bin/types/plugin/PluginCommand.d.ts.map +1 -1
  214. package/bin/types/plugin/PluginConfig.d.ts +12 -0
  215. package/bin/types/plugin/PluginConfig.d.ts.map +1 -0
  216. package/bin/types/plugin/PluginConfig.js +5 -0
  217. package/bin/types/plugin/PluginConfig.js.map +1 -0
  218. package/bin/types/plugin/PluginDefinition.d.ts +10 -3
  219. package/bin/types/plugin/PluginDefinition.d.ts.map +1 -1
  220. package/bin/types/plugin/PluginHttp.d.ts +1 -1
  221. package/bin/types/plugin/PluginHttp.d.ts.map +1 -1
  222. package/bin/types/plugin/PluginRunContext.d.ts +26 -0
  223. package/bin/types/plugin/PluginRunContext.d.ts.map +1 -0
  224. package/bin/types/plugin/PluginRunContext.js +10 -0
  225. package/bin/types/plugin/PluginRunContext.js.map +1 -0
  226. package/bin/types/plugin/PluginRuntime.d.ts +9 -3
  227. package/bin/types/plugin/PluginRuntime.d.ts.map +1 -1
  228. package/bin/types/plugin/PluginToolRuntime.d.ts +11 -0
  229. package/bin/types/plugin/PluginToolRuntime.d.ts.map +1 -1
  230. package/bin/types/rpc/RpcProtocol.d.ts +1 -13
  231. package/bin/types/rpc/RpcProtocol.d.ts.map +1 -1
  232. package/bin/types/session/SessionApproval.d.ts +4 -38
  233. package/bin/types/session/SessionApproval.d.ts.map +1 -1
  234. package/bin/types/session/SessionApprovalBroker.d.ts +17 -0
  235. package/bin/types/session/SessionApprovalBroker.d.ts.map +1 -0
  236. package/bin/types/session/SessionApprovalBroker.js +7 -0
  237. package/bin/types/session/SessionApprovalBroker.js.map +1 -0
  238. package/bin/types/session/SessionComposer.d.ts +99 -0
  239. package/bin/types/session/SessionComposer.d.ts.map +1 -0
  240. package/bin/types/session/SessionComposer.js +8 -0
  241. package/bin/types/session/SessionComposer.js.map +1 -0
  242. package/bin/types/session/SessionLocalState.d.ts +6 -6
  243. package/bin/types/session/SessionLocalState.d.ts.map +1 -1
  244. package/bin/types/session/SessionLocalState.js +1 -1
  245. package/bin/types/session/SessionMessage.d.ts +3 -2
  246. package/bin/types/session/SessionMessage.d.ts.map +1 -1
  247. package/bin/types/session/SessionMessages.d.ts +115 -0
  248. package/bin/types/session/SessionMessages.d.ts.map +1 -0
  249. package/bin/types/session/SessionMessages.js +7 -0
  250. package/bin/types/session/SessionMessages.js.map +1 -0
  251. package/bin/types/session/SessionMutation.d.ts +1 -10
  252. package/bin/types/session/SessionMutation.d.ts.map +1 -1
  253. package/bin/types/session/SessionMutation.js.map +1 -1
  254. package/bin/types/session/SessionOptions.d.ts +8 -23
  255. package/bin/types/session/SessionOptions.d.ts.map +1 -1
  256. package/bin/types/session/SessionPort.d.ts +72 -0
  257. package/bin/types/session/SessionPort.d.ts.map +1 -0
  258. package/bin/types/session/SessionPort.js +9 -0
  259. package/bin/types/session/SessionPort.js.map +1 -0
  260. package/bin/types/session/SessionQueue.d.ts +104 -0
  261. package/bin/types/session/SessionQueue.d.ts.map +1 -0
  262. package/bin/types/session/SessionQueue.js +7 -0
  263. package/bin/types/session/SessionQueue.js.map +1 -0
  264. package/bin/types/session/SessionState.d.ts +43 -0
  265. package/bin/types/session/SessionState.d.ts.map +1 -0
  266. package/bin/types/session/SessionState.js +7 -0
  267. package/bin/types/session/SessionState.js.map +1 -0
  268. package/bin/types/session/SessionSystem.d.ts +26 -0
  269. package/bin/types/session/SessionSystem.d.ts.map +1 -0
  270. package/bin/types/session/SessionSystem.js +7 -0
  271. package/bin/types/session/SessionSystem.js.map +1 -0
  272. package/bin/types/session/SessionTool.d.ts +23 -0
  273. package/bin/types/session/SessionTool.d.ts.map +1 -0
  274. package/bin/types/session/SessionTool.js +7 -0
  275. package/bin/types/session/SessionTool.js.map +1 -0
  276. package/bin/types/session/SessionTurn.d.ts +52 -0
  277. package/bin/types/session/SessionTurn.d.ts.map +1 -0
  278. package/bin/types/session/SessionTurn.js +7 -0
  279. package/bin/types/session/SessionTurn.js.map +1 -0
  280. package/package.json +3 -3
  281. package/scripts/agent-env.test.mjs +4 -18
  282. package/scripts/agent-ready.test.mjs +33 -2
  283. package/scripts/agent-session-maintenance.test.mjs +52 -0
  284. package/scripts/city-model-tool-loop.test.mjs +3 -4
  285. package/scripts/core-engine-context-compaction.test.mjs +5 -22
  286. package/scripts/image-plugin-job.test.mjs +4 -6
  287. package/scripts/plugin-tool-bridge.test.mjs +44 -36
  288. package/scripts/read-image-tool-bridge.test.mjs +71 -0
  289. package/scripts/remote-session-reconnect.test.mjs +1 -34
  290. package/scripts/session-compaction-prompts.test.mjs +1 -49
  291. package/scripts/session-composer.test.mjs +163 -0
  292. package/scripts/session-config-turn-boundary.test.mjs +2 -5
  293. package/scripts/session-list-title.test.mjs +3 -2
  294. package/scripts/session-messages-error.test.mjs +57 -0
  295. package/scripts/{session-recorder.test.mjs → session-messages.test.mjs} +131 -90
  296. package/scripts/session-queue.test.mjs +64 -0
  297. package/scripts/session-shell-approval.test.mjs +171 -0
  298. package/scripts/session-system-blocks.test.mjs +10 -10
  299. package/scripts/session-title-event.test.mjs +1 -0
  300. package/src/agent/Agent.ts +241 -0
  301. package/src/agent/AgentContext.ts +92 -0
  302. package/src/agent/{local/AgentInstructions.ts → AgentInstructions.ts} +0 -11
  303. package/src/{model/CityModelAdapter.ts → agent/AgentModel.ts} +10 -3
  304. package/src/agent/{local/services/AgentSessions.ts → AgentSessions.ts} +81 -110
  305. package/src/agent/AgentState.ts +151 -0
  306. package/src/config/Paths.ts +0 -91
  307. package/src/executor/Executor.ts +180 -386
  308. package/src/executor/README.md +29 -89
  309. package/src/executor/composer/system/default/DefaultSessionSystemComposer.ts +1 -1
  310. package/src/executor/composer/system/default/SystemDomain.ts +4 -2
  311. package/src/executor/composer/system/default/assets/core.prompt.ts +1 -1
  312. package/src/executor/composer/system/default/assets/core.prompt.ts.txt +15 -2
  313. package/src/executor/core-engine/CoreEngineRunner.ts +95 -54
  314. package/src/executor/services/ExecutorRecoveryPolicy.ts +24 -19
  315. package/src/executor/tools/file/ReadImageToolBridge.ts +79 -0
  316. package/src/executor/tools/plugin/PluginToolBridge.ts +6 -8
  317. package/src/executor/tools/plugin/PluginToolDefinition.ts +23 -3
  318. package/src/executor/types/SessionHistoryMeta.ts +0 -2
  319. package/src/index.ts +34 -53
  320. package/src/plugin/core/ActionScheduleExecutor.ts +1 -1
  321. package/src/plugin/core/ActionScheduleRuntime.ts +1 -1
  322. package/src/plugin/core/BasePlugin.ts +7 -3
  323. package/src/plugin/core/HookRegistry.ts +15 -18
  324. package/src/plugin/core/PluginActionFactory.ts +9 -3
  325. package/src/plugin/core/PluginActionRunner.ts +1 -1
  326. package/src/plugin/core/PluginCatalog.ts +1 -1
  327. package/src/plugin/core/PluginHttpRoutes.ts +1 -1
  328. package/src/plugin/core/PluginLocalExecution.ts +11 -24
  329. package/src/plugin/core/PluginRegistry.ts +55 -32
  330. package/src/plugin/core/PluginStateController.ts +1 -1
  331. package/src/{agent/remote → remote}/RemoteAgent.ts +4 -4
  332. package/src/{agent/remote → remote}/RemoteSession.ts +2 -35
  333. package/src/{agent/remote → remote}/RemoteTransport.ts +0 -3
  334. package/src/{agent/remote → remote}/TransportFactory.ts +3 -3
  335. package/src/{agent/remote → remote}/transports/HttpRemoteAgentTransport.ts +1 -23
  336. package/src/{rpc/Client.ts → remote/transports/RpcClient.ts} +1 -19
  337. package/src/{agent/remote → remote}/transports/RpcRemoteAgentTransport.ts +2 -10
  338. package/src/session/DefaultSessionComposer.ts +79 -0
  339. package/src/session/Session.ts +496 -332
  340. package/src/session/{recorder/SessionRecorder.ts → SessionMessages.ts} +254 -428
  341. package/src/session/SessionQueue.ts +86 -0
  342. package/src/session/SessionState.ts +322 -0
  343. package/src/session/SessionSystem.ts +117 -0
  344. package/src/session/SessionTurn.ts +684 -0
  345. package/src/session/approval/SessionApprovalBroker.ts +164 -0
  346. package/src/session/browse/Browse.ts +1 -4
  347. package/src/session/messages/SessionAssistantMessageWriter.ts +345 -0
  348. package/src/session/messages/SessionJsonValue.ts +25 -0
  349. package/src/session/{recorder → messages}/SessionMessageCodec.ts +38 -20
  350. package/src/session/{recorder/SessionRecorderCompaction.ts → messages/SessionMessageCompaction.ts} +30 -69
  351. package/src/session/runtime/SessionEventHub.ts +1 -14
  352. package/src/session/storage/Metadata.ts +60 -34
  353. package/src/session/storage/RuntimeSessionPort.ts +7 -14
  354. package/src/types/agent/AgentOptions.ts +6 -38
  355. package/src/types/agent/AgentState.ts +33 -0
  356. package/src/types/agent/SessionActor.ts +0 -3
  357. package/src/types/agent/SessionTypes.ts +5 -18
  358. package/src/types/executor/SessionRunContext.ts +10 -2
  359. package/src/types/executor/SessionToolExecutionContext.ts +21 -0
  360. package/src/types/plugin/PluginAction.ts +10 -1
  361. package/src/types/plugin/PluginCommand.ts +3 -14
  362. package/src/types/plugin/PluginConfig.ts +13 -0
  363. package/src/types/plugin/PluginDefinition.ts +13 -6
  364. package/src/types/plugin/PluginHttp.ts +1 -1
  365. package/src/types/plugin/PluginRunContext.ts +31 -0
  366. package/src/types/plugin/PluginRuntime.ts +13 -6
  367. package/src/types/plugin/PluginToolRuntime.ts +13 -1
  368. package/src/types/rpc/RpcProtocol.ts +0 -14
  369. package/src/types/session/SessionApproval.ts +4 -43
  370. package/src/types/session/SessionApprovalBroker.ts +18 -0
  371. package/src/types/session/SessionComposer.ts +114 -0
  372. package/src/types/session/SessionLocalState.ts +6 -6
  373. package/src/types/session/SessionMessage.ts +3 -2
  374. package/src/types/session/SessionMessages.ts +127 -0
  375. package/src/types/session/SessionMutation.ts +0 -11
  376. package/src/types/session/SessionOptions.ts +8 -40
  377. package/src/types/session/SessionPort.ts +97 -0
  378. package/src/types/session/SessionQueue.ts +122 -0
  379. package/src/types/session/SessionState.ts +47 -0
  380. package/src/types/session/SessionSystem.ts +27 -0
  381. package/src/types/session/SessionTool.ts +25 -0
  382. package/src/types/session/SessionTurn.ts +56 -0
  383. package/tsconfig.tsbuildinfo +1 -1
  384. package/bin/agent/local/Agent.d.ts.map +0 -1
  385. package/bin/agent/local/Agent.js +0 -216
  386. package/bin/agent/local/Agent.js.map +0 -1
  387. package/bin/agent/local/AgentInstructions.d.ts.map +0 -1
  388. package/bin/agent/local/AgentInstructions.js.map +0 -1
  389. package/bin/agent/local/AgentPluginFactory.d.ts +0 -26
  390. package/bin/agent/local/AgentPluginFactory.d.ts.map +0 -1
  391. package/bin/agent/local/AgentPluginFactory.js +0 -33
  392. package/bin/agent/local/AgentPluginFactory.js.map +0 -1
  393. package/bin/agent/local/AgentRuntimeAssembly.d.ts +0 -10
  394. package/bin/agent/local/AgentRuntimeAssembly.d.ts.map +0 -1
  395. package/bin/agent/local/AgentRuntimeAssembly.js +0 -43
  396. package/bin/agent/local/AgentRuntimeAssembly.js.map +0 -1
  397. package/bin/agent/local/ProjectSetup.d.ts.map +0 -1
  398. package/bin/agent/local/ProjectSetup.js.map +0 -1
  399. package/bin/agent/local/services/AgentAssemblyService.d.ts +0 -105
  400. package/bin/agent/local/services/AgentAssemblyService.d.ts.map +0 -1
  401. package/bin/agent/local/services/AgentAssemblyService.js +0 -184
  402. package/bin/agent/local/services/AgentAssemblyService.js.map +0 -1
  403. package/bin/agent/local/services/AgentBackgroundService.d.ts +0 -55
  404. package/bin/agent/local/services/AgentBackgroundService.d.ts.map +0 -1
  405. package/bin/agent/local/services/AgentBackgroundService.js +0 -85
  406. package/bin/agent/local/services/AgentBackgroundService.js.map +0 -1
  407. package/bin/agent/local/services/AgentSessions.d.ts.map +0 -1
  408. package/bin/agent/local/services/AgentSessions.js.map +0 -1
  409. package/bin/agent/remote/RemoteAgent.d.ts.map +0 -1
  410. package/bin/agent/remote/RemoteAgent.js.map +0 -1
  411. package/bin/agent/remote/RemoteSession.d.ts.map +0 -1
  412. package/bin/agent/remote/RemoteSession.js.map +0 -1
  413. package/bin/agent/remote/RemoteTransport.d.ts.map +0 -1
  414. package/bin/agent/remote/RemoteTransport.js.map +0 -1
  415. package/bin/agent/remote/TransportFactory.d.ts.map +0 -1
  416. package/bin/agent/remote/TransportFactory.js.map +0 -1
  417. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +0 -1
  418. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +0 -1
  419. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +0 -1
  420. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +0 -1
  421. package/bin/executor/SessionRunScope.d.ts +0 -68
  422. package/bin/executor/SessionRunScope.d.ts.map +0 -1
  423. package/bin/executor/SessionRunScope.js +0 -96
  424. package/bin/executor/SessionRunScope.js.map +0 -1
  425. package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts +0 -74
  426. package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts.map +0 -1
  427. package/bin/executor/composer/compaction/SessionCompactionComposer.js +0 -9
  428. package/bin/executor/composer/compaction/SessionCompactionComposer.js.map +0 -1
  429. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.d.ts +0 -27
  430. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.d.ts.map +0 -1
  431. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js +0 -39
  432. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js.map +0 -1
  433. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts +0 -44
  434. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts.map +0 -1
  435. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js +0 -218
  436. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js.map +0 -1
  437. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.d.ts +0 -27
  438. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.d.ts.map +0 -1
  439. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.js +0 -181
  440. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.js.map +0 -1
  441. package/bin/executor/composer/context/LocalSessionContextComposer.d.ts +0 -50
  442. package/bin/executor/composer/context/LocalSessionContextComposer.d.ts.map +0 -1
  443. package/bin/executor/composer/context/LocalSessionContextComposer.js +0 -108
  444. package/bin/executor/composer/context/LocalSessionContextComposer.js.map +0 -1
  445. package/bin/executor/composer/context/SessionContextComposer.d.ts +0 -67
  446. package/bin/executor/composer/context/SessionContextComposer.d.ts.map +0 -1
  447. package/bin/executor/composer/context/SessionContextComposer.js +0 -9
  448. package/bin/executor/composer/context/SessionContextComposer.js.map +0 -1
  449. package/bin/executor/composer/history/SessionHistoryComposer.d.ts +0 -54
  450. package/bin/executor/composer/history/SessionHistoryComposer.d.ts.map +0 -1
  451. package/bin/executor/composer/history/SessionHistoryComposer.js +0 -10
  452. package/bin/executor/composer/history/SessionHistoryComposer.js.map +0 -1
  453. package/bin/executor/composer/history/SessionHistoryWriter.d.ts +0 -46
  454. package/bin/executor/composer/history/SessionHistoryWriter.d.ts.map +0 -1
  455. package/bin/executor/composer/history/SessionHistoryWriter.js +0 -65
  456. package/bin/executor/composer/history/SessionHistoryWriter.js.map +0 -1
  457. package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.d.ts +0 -35
  458. package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.d.ts.map +0 -1
  459. package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.js +0 -105
  460. package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.js.map +0 -1
  461. package/bin/executor/messages/AssistantResultPersistence.d.ts +0 -66
  462. package/bin/executor/messages/AssistantResultPersistence.d.ts.map +0 -1
  463. package/bin/executor/messages/AssistantResultPersistence.js +0 -44
  464. package/bin/executor/messages/AssistantResultPersistence.js.map +0 -1
  465. package/bin/executor/services/ExecutorInflightService.d.ts +0 -34
  466. package/bin/executor/services/ExecutorInflightService.d.ts.map +0 -1
  467. package/bin/executor/services/ExecutorInflightService.js +0 -73
  468. package/bin/executor/services/ExecutorInflightService.js.map +0 -1
  469. package/bin/executor/store/history/SessionHistoryStore.d.ts +0 -140
  470. package/bin/executor/store/history/SessionHistoryStore.d.ts.map +0 -1
  471. package/bin/executor/store/history/SessionHistoryStore.js +0 -10
  472. package/bin/executor/store/history/SessionHistoryStore.js.map +0 -1
  473. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts +0 -116
  474. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +0 -1
  475. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +0 -709
  476. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +0 -1
  477. package/bin/executor/types/SessionHistoryPaths.d.ts +0 -34
  478. package/bin/executor/types/SessionHistoryPaths.d.ts.map +0 -1
  479. package/bin/executor/types/SessionHistoryPaths.js +0 -2
  480. package/bin/executor/types/SessionHistoryPaths.js.map +0 -1
  481. package/bin/model/CityModelAdapter.d.ts.map +0 -1
  482. package/bin/model/CityModelAdapter.js.map +0 -1
  483. package/bin/rpc/Client.d.ts.map +0 -1
  484. package/bin/rpc/Client.js.map +0 -1
  485. package/bin/session/SessionSystemBuilder.d.ts +0 -107
  486. package/bin/session/SessionSystemBuilder.d.ts.map +0 -1
  487. package/bin/session/SessionSystemBuilder.js +0 -148
  488. package/bin/session/SessionSystemBuilder.js.map +0 -1
  489. package/bin/session/recorder/SessionMessageCodec.d.ts.map +0 -1
  490. package/bin/session/recorder/SessionMessageCodec.js.map +0 -1
  491. package/bin/session/recorder/SessionRecorder.d.ts +0 -217
  492. package/bin/session/recorder/SessionRecorder.d.ts.map +0 -1
  493. package/bin/session/recorder/SessionRecorder.js.map +0 -1
  494. package/bin/session/recorder/SessionRecorderCompaction.d.ts +0 -18
  495. package/bin/session/recorder/SessionRecorderCompaction.d.ts.map +0 -1
  496. package/bin/session/recorder/SessionRecorderCompaction.js.map +0 -1
  497. package/bin/session/recorder/SessionRecorderHistoryStore.d.ts +0 -66
  498. package/bin/session/recorder/SessionRecorderHistoryStore.d.ts.map +0 -1
  499. package/bin/session/recorder/SessionRecorderHistoryStore.js +0 -190
  500. package/bin/session/recorder/SessionRecorderHistoryStore.js.map +0 -1
  501. package/bin/session/runtime/SessionPromptRuntime.d.ts +0 -112
  502. package/bin/session/runtime/SessionPromptRuntime.d.ts.map +0 -1
  503. package/bin/session/runtime/SessionPromptRuntime.js +0 -357
  504. package/bin/session/runtime/SessionPromptRuntime.js.map +0 -1
  505. package/bin/session/services/SessionStateService.d.ts +0 -187
  506. package/bin/session/services/SessionStateService.d.ts.map +0 -1
  507. package/bin/session/services/SessionStateService.js +0 -467
  508. package/bin/session/services/SessionStateService.js.map +0 -1
  509. package/bin/session/services/SessionTurnService.d.ts +0 -90
  510. package/bin/session/services/SessionTurnService.d.ts.map +0 -1
  511. package/bin/session/services/SessionTurnService.js +0 -293
  512. package/bin/session/services/SessionTurnService.js.map +0 -1
  513. package/bin/session/services/SessionViewService.d.ts +0 -114
  514. package/bin/session/services/SessionViewService.d.ts.map +0 -1
  515. package/bin/session/services/SessionViewService.js +0 -204
  516. package/bin/session/services/SessionViewService.js.map +0 -1
  517. package/bin/session/storage/Persistence.d.ts +0 -73
  518. package/bin/session/storage/Persistence.d.ts.map +0 -1
  519. package/bin/session/storage/Persistence.js +0 -63
  520. package/bin/session/storage/Persistence.js.map +0 -1
  521. package/bin/types/agent/AgentRuntimeAssembly.d.ts +0 -72
  522. package/bin/types/agent/AgentRuntimeAssembly.d.ts.map +0 -1
  523. package/bin/types/agent/AgentRuntimeAssembly.js +0 -10
  524. package/bin/types/agent/AgentRuntimeAssembly.js.map +0 -1
  525. package/bin/types/runtime/agent/AgentContext.d.ts +0 -306
  526. package/bin/types/runtime/agent/AgentContext.d.ts.map +0 -1
  527. package/bin/types/runtime/agent/AgentContext.js +0 -128
  528. package/bin/types/runtime/agent/AgentContext.js.map +0 -1
  529. package/bin/types/session/SessionComposerOptions.d.ts +0 -90
  530. package/bin/types/session/SessionComposerOptions.d.ts.map +0 -1
  531. package/bin/types/session/SessionComposerOptions.js +0 -10
  532. package/bin/types/session/SessionComposerOptions.js.map +0 -1
  533. package/bin/types/session/SessionQueueCommand.d.ts +0 -68
  534. package/bin/types/session/SessionQueueCommand.d.ts.map +0 -1
  535. package/bin/types/session/SessionQueueCommand.js +0 -10
  536. package/bin/types/session/SessionQueueCommand.js.map +0 -1
  537. package/scripts/session-action-message.test.mjs +0 -410
  538. package/scripts/session-compaction-context-window.test.mjs +0 -96
  539. package/scripts/session-history-inflight.test.mjs +0 -146
  540. package/scripts/session-history-writer-error.test.mjs +0 -57
  541. package/scripts/session-prompt-runtime.test.mjs +0 -390
  542. package/src/agent/local/Agent.ts +0 -250
  543. package/src/agent/local/AgentPluginFactory.ts +0 -51
  544. package/src/agent/local/AgentRuntimeAssembly.ts +0 -65
  545. package/src/agent/local/services/AgentAssemblyService.ts +0 -307
  546. package/src/agent/local/services/AgentBackgroundService.ts +0 -115
  547. package/src/executor/SessionRunScope.ts +0 -122
  548. package/src/executor/composer/compaction/SessionCompactionComposer.ts +0 -84
  549. package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.ts +0 -51
  550. package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.ts +0 -294
  551. package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.ts +0 -197
  552. package/src/executor/composer/context/LocalSessionContextComposer.ts +0 -175
  553. package/src/executor/composer/context/SessionContextComposer.ts +0 -83
  554. package/src/executor/composer/history/SessionHistoryComposer.ts +0 -62
  555. package/src/executor/composer/history/SessionHistoryWriter.ts +0 -100
  556. package/src/executor/composer/history/jsonl/JsonlSessionHistoryComposer.ts +0 -133
  557. package/src/executor/messages/AssistantResultPersistence.ts +0 -106
  558. package/src/executor/services/ExecutorInflightService.ts +0 -95
  559. package/src/executor/store/history/SessionHistoryStore.ts +0 -172
  560. package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +0 -879
  561. package/src/executor/types/SessionHistoryPaths.ts +0 -38
  562. package/src/session/SessionSystemBuilder.ts +0 -262
  563. package/src/session/recorder/SessionRecorderHistoryStore.ts +0 -256
  564. package/src/session/runtime/SessionPromptRuntime.ts +0 -518
  565. package/src/session/services/SessionStateService.ts +0 -628
  566. package/src/session/services/SessionTurnService.ts +0 -368
  567. package/src/session/services/SessionViewService.ts +0 -335
  568. package/src/session/storage/Persistence.ts +0 -137
  569. package/src/types/agent/AgentRuntimeAssembly.ts +0 -74
  570. package/src/types/runtime/agent/AgentContext.ts +0 -387
  571. package/src/types/session/SessionComposerOptions.ts +0 -107
  572. package/src/types/session/SessionQueueCommand.ts +0 -78
  573. /package/bin/{agent/local → config}/ProjectSetup.d.ts +0 -0
  574. /package/bin/{agent/remote → remote}/RemoteTransport.js +0 -0
  575. /package/bin/session/{recorder → messages}/JsonlSessionMessageStore.d.ts +0 -0
  576. /package/bin/session/{recorder → messages}/JsonlSessionMessageStore.js +0 -0
  577. /package/src/{agent/local → config}/ProjectSetup.ts +0 -0
  578. /package/src/session/{recorder → messages}/JsonlSessionMessageStore.ts +0 -0
@@ -1,22 +1,23 @@
1
1
  /**
2
- * SessionRecorder Active/Segment 上下文压缩。
2
+ * SessionMessages Active/Segment 上下文压缩计划生成。
3
3
  *
4
4
  * Compact 把 Active 前缀写入不可变 Segment,并在 footer 保存累计 Summary。
5
5
  */
6
6
 
7
- import { generateText } from "ai";
7
+ import { generateText, type LanguageModel } from "ai";
8
8
  import { generateId } from "@/utils/Id.js";
9
- import type { SessionHistoryCompactInput } from "@/executor/store/history/SessionHistoryStore.js";
10
- import type { SessionActionRecordV1 } from "@/executor/types/SessionRecords.js";
11
9
  import {
12
10
  build_initial_session_compaction_prompt,
13
11
  build_update_session_compaction_prompt,
14
12
  SESSION_COMPACTION_SYSTEM_PROMPT,
15
13
  } from "@executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.js";
16
14
  import { fold_compacted_text } from "@executor/core-engine/CoreEngineContextCompaction.js";
17
- import { SessionRecorder } from "@/session/recorder/SessionRecorder.js";
18
- import { to_executor_ui_message } from "@/session/recorder/SessionMessageCodec.js";
15
+ import { to_executor_ui_message } from "@/session/messages/SessionMessageCodec.js";
19
16
  import type { SessionMessage } from "@/types/session/SessionMessage.js";
17
+ import type {
18
+ SessionCompactionPlan,
19
+ } from "@/types/session/SessionComposer.js";
20
+ import type { SessionContextSnapshot } from "@/types/session/SessionSegment.js";
20
21
 
21
22
  /** 单次摘要请求中 conversation 文本的最大字符数。 */
22
23
  const SUMMARY_CHUNK_MAX_CHARS = 20_000;
@@ -30,36 +31,30 @@ const PREVIOUS_SUMMARY_MAX_CHARS = 12_000;
30
31
  /** 摘要模型的最大输出 token,用于避免 Summary 自身无限增长。 */
31
32
  const SUMMARY_MAX_OUTPUT_TOKENS = 4_000;
32
33
 
33
- /** 必要时把 Active 前缀关闭为带累计 Summary 的 Segment。 */
34
- export async function compact_session_recorder_messages(input: {
35
- /** 当前 Session Recorder。 */
36
- recorder: SessionRecorder;
37
- /** 压缩策略和模型。 */
38
- compact_input: SessionHistoryCompactInput;
39
- }): Promise<{ compacted: boolean; reason?: string }> {
40
- const snapshot = await input.recorder.context_snapshot();
41
- const context_messages = snapshot.messages.filter(
34
+ /**
35
+ * 根据只读 Message 快照生成持久化压缩计划。
36
+ *
37
+ * 该函数可以调用模型生成 Summary,但不会写文件、修改 Recorder 或发布事件。
38
+ */
39
+ export async function compose_session_compaction(input: {
40
+ /** 当前 Session 标识。 */
41
+ session_id: string;
42
+ /** 当前累计 Summary 与 Active Message 快照。 */
43
+ snapshot: Readonly<SessionContextSnapshot>;
44
+ /** 生成累计 Summary 使用的模型。 */
45
+ model: LanguageModel;
46
+ }): Promise<SessionCompactionPlan | null> {
47
+ const context_messages = input.snapshot.messages.filter(
42
48
  (message) => message.type === "user" || message.type === "assistant",
43
49
  );
44
- if (!input.compact_input.force) {
45
- return { compacted: false, reason: "not_requested" };
46
- }
47
50
  const boundary = context_messages.at(-1);
48
- if (!boundary) return { compacted: false, reason: "nothing_to_compact" };
49
-
50
- const action_id = `compacting:${input.recorder.session_id}:${generateId()}`;
51
- await publish_action(input.compact_input.onAction, {
52
- id: action_id,
53
- session_id: input.recorder.session_id,
54
- title: "Compacting session messages",
55
- state: "running",
56
- });
51
+ if (!boundary) return null;
57
52
 
58
53
  const conversation_messages = context_messages
59
54
  .map((message) => message_to_compaction_text(message))
60
55
  .filter(Boolean);
61
56
  const chunks = build_summary_chunks(conversation_messages);
62
- let summary = String(snapshot.summary?.text || "").trim();
57
+ let summary = String(input.snapshot.summary?.text || "").trim();
63
58
  let used_fallback = false;
64
59
  for (const chunk of chunks) {
65
60
  const prompt = summary
@@ -75,7 +70,7 @@ export async function compact_session_recorder_messages(input: {
75
70
  });
76
71
  try {
77
72
  const result = await generateText({
78
- model: input.compact_input.model,
73
+ model: input.model,
79
74
  system: [{ role: "system", content: SESSION_COMPACTION_SYSTEM_PROMPT }],
80
75
  prompt,
81
76
  maxOutputTokens: SUMMARY_MAX_OUTPUT_TOKENS,
@@ -93,27 +88,19 @@ export async function compact_session_recorder_messages(input: {
93
88
  summary = build_deterministic_summary("", "(no textual context)");
94
89
  }
95
90
 
96
- await input.recorder.compact_active({
91
+ return {
97
92
  through_sequence: boundary.sequence,
93
+ boundary_message_id: boundary.message_id,
94
+ used_fallback,
98
95
  summary: {
99
96
  record_type: "summary",
100
- session_id: input.recorder.session_id,
101
- summary_id: `summary:${input.recorder.session_id}:${generateId()}`,
97
+ session_id: input.session_id,
98
+ summary_id: `summary:${input.session_id}:${generateId()}`,
102
99
  through_sequence: boundary.sequence,
103
100
  text: summary,
104
101
  created_at: Date.now(),
105
102
  },
106
- });
107
- await publish_action(input.compact_input.onAction, {
108
- id: action_id,
109
- session_id: input.recorder.session_id,
110
- title: "Session messages compacted",
111
- description: used_fallback
112
- ? `Closed Active through Message ${boundary.message_id} with deterministic fallback Summary.`
113
- : `Closed Active through Message ${boundary.message_id}.`,
114
- state: "completed",
115
- });
116
- return { compacted: true };
103
+ };
117
104
  }
118
105
 
119
106
  function message_to_compaction_text(message: SessionMessage): string {
@@ -183,29 +170,3 @@ function safe_stringify(value: unknown): string {
183
170
  return String(value || "");
184
171
  }
185
172
  }
186
-
187
- async function publish_action(
188
- callback: SessionHistoryCompactInput["onAction"],
189
- input: {
190
- id: string;
191
- session_id: string;
192
- title: string;
193
- description?: string;
194
- state: "running" | "completed" | "failed";
195
- },
196
- ): Promise<void> {
197
- if (!callback) return;
198
- const action: SessionActionRecordV1 = {
199
- type: "action",
200
- id: input.id,
201
- title: input.title,
202
- ...(input.description ? { description: input.description } : {}),
203
- state: input.state,
204
- metadata: {
205
- v: 1,
206
- ts: Date.now(),
207
- sessionId: input.session_id,
208
- },
209
- };
210
- await callback(action);
211
- }
@@ -8,29 +8,17 @@
8
8
 
9
9
  import type {
10
10
  SessionMutation,
11
- SessionMutationReply,
12
11
  SessionMutationSubscriber,
13
12
  SessionMutationUnsubscribe,
14
13
  } from "@/types/session/SessionMutation.js";
15
14
 
16
- /** SessionEventHub 构造参数。 */
17
- export interface SessionEventHubOptions {
18
- /** 为当前 Mutation 创建绑定 Session 和 Tool Part 的回复入口。 */
19
- create_reply: (mutation: SessionMutation) => SessionMutationReply;
20
- }
21
-
22
15
  /**
23
16
  * SessionEventHub:最小事件总线实现。
24
17
  */
25
18
  export class SessionEventHub {
26
19
  private readonly subscribers = new Map<number, SessionMutationSubscriber>();
27
- private readonly create_reply: SessionEventHubOptions["create_reply"];
28
20
  private next_subscriber_id = 1;
29
21
 
30
- constructor(options: SessionEventHubOptions) {
31
- this.create_reply = options.create_reply;
32
- }
33
-
34
22
  /**
35
23
  * 注册一个新的 Session 事件订阅者。
36
24
  */
@@ -48,10 +36,9 @@ export class SessionEventHub {
48
36
  * 广播一条 Session 事件。
49
37
  */
50
38
  publish(mutation: SessionMutation): void {
51
- const reply = this.create_reply(mutation);
52
39
  for (const subscriber of this.subscribers.values()) {
53
40
  try {
54
- Promise.resolve(subscriber(mutation, reply)).catch(() => undefined);
41
+ Promise.resolve(subscriber(mutation)).catch(() => undefined);
55
42
  } catch {
56
43
  // ignore single subscriber failures
57
44
  }
@@ -7,9 +7,31 @@
7
7
  */
8
8
 
9
9
  import fs from "fs-extra";
10
- import type { LanguageModel } from "ai";
10
+ import {
11
+ inferAgentModelLabel,
12
+ type AgentModel,
13
+ } from "@/agent/AgentModel.js";
11
14
  import type { SessionHistoryMetaV1 } from "@/executor/types/SessionHistoryMeta.js";
12
15
  import { getSdkAgentSessionMetaPath } from "@/session/storage/Paths.js";
16
+ import type { AgentSessionConfigSnapshot } from "@/types/agent/SessionTypes.js";
17
+
18
+ /** 刷新 Session metadata 的参数。 */
19
+ export interface TouchSessionMetadataParams {
20
+ /** 当前项目根目录。 */
21
+ projectRoot: string;
22
+ /** 当前 Agent 稳定标识。 */
23
+ agentId: string;
24
+ /** 当前 Session 稳定标识。 */
25
+ sessionId: string;
26
+ /** 当前 Session configured state。 */
27
+ sessionConfig: AgentSessionConfigSnapshot;
28
+ /** 当前 canonical Message 总数。 */
29
+ message_count?: number;
30
+ /** 当前 Message 日志总字节数。 */
31
+ history_bytes?: number;
32
+ /** 最近一条用户可见 Message 的文本摘要。 */
33
+ preview_text?: string;
34
+ }
13
35
 
14
36
  type ReadSessionMetadataInput = {
15
37
  /**
@@ -33,11 +55,6 @@ function normalizeModelLabel(input: unknown): string | undefined {
33
55
  return label || undefined;
34
56
  }
35
57
 
36
- function normalize_model_id(input: unknown): string | undefined {
37
- const model_id = typeof input === "string" ? input.trim() : "";
38
- return model_id || undefined;
39
- }
40
-
41
58
  /**
42
59
  * 归一化 session 标题。
43
60
  */
@@ -82,26 +99,9 @@ function normalize_history_bytes(input: unknown): number | undefined {
82
99
  * 从模型实例推导轻量可读标签。
83
100
  */
84
101
  export function inferModelLabel(
85
- model: LanguageModel | undefined,
102
+ model: AgentModel | undefined,
86
103
  ): string | undefined {
87
- if (!model || typeof model !== "object") return undefined;
88
- const record = model as Record<string, unknown>;
89
- const candidates = [
90
- record.modelId,
91
- record.model,
92
- record.id,
93
- record.name,
94
- record.label,
95
- ];
96
- for (const candidate of candidates) {
97
- const text = normalizeModelLabel(candidate);
98
- if (text) return text;
99
- }
100
- const constructorName =
101
- model.constructor && typeof model.constructor.name === "string"
102
- ? model.constructor.name.trim()
103
- : "";
104
- return constructorName || "configured-model";
104
+ return inferAgentModelLabel(model);
105
105
  }
106
106
 
107
107
  /**
@@ -158,9 +158,6 @@ export async function readSessionMetadataFromPath(input: {
158
158
  ...(normalizeModelLabel(raw.modelLabel)
159
159
  ? { modelLabel: normalizeModelLabel(raw.modelLabel) }
160
160
  : {}),
161
- ...(normalize_model_id(raw.modelId)
162
- ? { modelId: normalize_model_id(raw.modelId) }
163
- : {}),
164
161
  ...(normalize_message_count(raw.messageCount) !== undefined
165
162
  ? { messageCount: normalize_message_count(raw.messageCount) }
166
163
  : {}),
@@ -211,9 +208,7 @@ export async function patchSessionModelLabel(
211
208
  /**
212
209
  * 当前模型实例。
213
210
  */
214
- model?: LanguageModel;
215
- /** 当前模型稳定 ID。 */
216
- modelId?: string;
211
+ model?: AgentModel;
217
212
  },
218
213
  ): Promise<SessionHistoryMetaV1> {
219
214
  const current = await readSessionMetadata(input);
@@ -230,9 +225,6 @@ export async function patchSessionModelLabel(
230
225
  modelLabel,
231
226
  }
232
227
  : {}),
233
- ...(normalize_model_id(input.modelId)
234
- ? { modelId: normalize_model_id(input.modelId) }
235
- : {}),
236
228
  };
237
229
  await writeSessionMetadata({
238
230
  ...input,
@@ -240,3 +232,37 @@ export async function patchSessionModelLabel(
240
232
  });
241
233
  return next;
242
234
  }
235
+
236
+ /** 根据 canonical Message 统计刷新当前 Session metadata。 */
237
+ export async function touchSessionMetadata(
238
+ params: TouchSessionMetadataParams,
239
+ ): Promise<void> {
240
+ const current = await readSessionMetadata({
241
+ projectRoot: params.projectRoot,
242
+ agentId: params.agentId,
243
+ sessionId: params.sessionId,
244
+ });
245
+ const next: SessionHistoryMetaV1 = {
246
+ ...current,
247
+ agentId: params.agentId,
248
+ createdAt:
249
+ typeof current.createdAt === "number" ? current.createdAt : Date.now(),
250
+ updatedAt: Date.now(),
251
+ ...(params.sessionConfig.modelLabel
252
+ ? { modelLabel: params.sessionConfig.modelLabel }
253
+ : {}),
254
+ ...(typeof params.message_count === "number"
255
+ ? { messageCount: params.message_count }
256
+ : {}),
257
+ ...(typeof params.history_bytes === "number"
258
+ ? { historyBytes: params.history_bytes }
259
+ : {}),
260
+ ...(params.preview_text ? { previewText: params.preview_text } : {}),
261
+ };
262
+ await writeSessionMetadata({
263
+ projectRoot: params.projectRoot,
264
+ agentId: params.agentId,
265
+ sessionId: params.sessionId,
266
+ meta: next,
267
+ });
268
+ }
@@ -6,8 +6,7 @@
6
6
  * - SDK 公开面只保留 `prompt()` / `subscribe()`;runtime/service 若要 one-shot 等待结果,也统一委托给 `prompt()`。
7
7
  */
8
8
 
9
- import type { SessionPort } from "@/types/runtime/agent/AgentContext.js";
10
- import type { SessionHistoryStore } from "@/executor/store/history/SessionHistoryStore.js";
9
+ import type { SessionPort } from "@/types/session/SessionPort.js";
11
10
  import type { AgentSessionPromptInput } from "@/types/sdk/AgentSessionPrompt.js";
12
11
  import type { AgentSessionStopResult } from "@/types/sdk/AgentSessionStop.js";
13
12
  import type {
@@ -24,6 +23,8 @@ export interface CreateRuntimeSessionPortParams {
24
23
  * 当前 sessionId。
25
24
  */
26
25
  sessionId: string;
26
+ /** 获取当前 Session 优先解析后的运行时模型实例。 */
27
+ getModel: SessionPort["getModel"];
27
28
  /**
28
29
  * 读取当前 session 底层执行端口。
29
30
  */
@@ -42,10 +43,6 @@ export interface CreateRuntimeSessionPortParams {
42
43
  subscribe: (
43
44
  subscriber: SessionMutationSubscriber,
44
45
  ) => SessionMutationUnsubscribe;
45
- /**
46
- * 发布一条 session runtime 事件。
47
- */
48
- publishEvent: SessionPort["publishEvent"];
49
46
  /**
50
47
  * 追加 user 消息到底层历史。
51
48
  */
@@ -58,10 +55,8 @@ export interface CreateRuntimeSessionPortParams {
58
55
  * 返回当前 session 是否正在执行。
59
56
  */
60
57
  isExecuting: () => boolean;
61
- /**
62
- * 当前 session 历史持久化端口。
63
- */
64
- historyStore: SessionHistoryStore;
58
+ /** 读取当前 Session 的只读上下文快照。 */
59
+ context: SessionPort["context"];
65
60
  /**
66
61
  * 在执行前确保当前 session 已完成初始化与宿主级配置。
67
62
  */
@@ -76,8 +71,9 @@ export function createRuntimeSessionPort(
76
71
  ): SessionPort {
77
72
  return {
78
73
  sessionId: params.sessionId,
74
+ getModel: () => params.getModel(),
79
75
  getExecutor: () => params.getExecutor(),
80
- getHistoryStore: () => params.historyStore,
76
+ context: async () => await params.context(),
81
77
  prompt: async (input) => {
82
78
  await params.ensureReadyForExecution();
83
79
  return await params.prompt(input);
@@ -89,9 +85,6 @@ export function createRuntimeSessionPort(
89
85
  subscribe: (subscriber) => {
90
86
  return params.subscribe(subscriber);
91
87
  },
92
- publishEvent: async (event) => {
93
- await params.publishEvent(event);
94
- },
95
88
  append_user_message: async (messageParams) => {
96
89
  await params.append_user_message(messageParams);
97
90
  },
@@ -8,10 +8,8 @@
8
8
 
9
9
  import type { Tool } from "ai";
10
10
  import type { Shell } from "@downcity/shell";
11
+ import type { AgentModel } from "@/agent/AgentModel.js";
11
12
  import type { Plugin } from "@/types/plugin/PluginDefinition.js";
12
- import type { AgentModel } from "@/model/CityModelAdapter.js";
13
- import type { DowncityConfig } from "@/types/config/DowncityConfig.js";
14
- import type { AgentPluginConfigRuntime } from "@/types/agent/AgentRuntimeAssembly.js";
15
13
  import type {
16
14
  AgentManagedSession,
17
15
  SessionOptions,
@@ -73,27 +71,14 @@ export interface AgentOptions {
73
71
  instruction?: string | string[];
74
72
 
75
73
  /**
76
- * 当前 agent 为新建 session 提供的默认模型实例。
74
+ * 当前 Agent 持有的运行时模型实例。
77
75
  *
78
76
  * 关键点(中文)
79
- * - SDK 仍不负责“选择哪个模型”,这里只接收宿主已经创建好的模型实例。
80
- * - 支持 AI SDK `LanguageModel`,也支持 City City 返回的 `CityModel`。
81
- * - 该模型会作为 session 首次执行前的默认注入值。
77
+ * - Agent 不选择或恢复模型,只持有宿主传入的实例。
78
+ * - Session 未显式设置模型时,执行自动回退到该实例。
82
79
  */
83
80
  model?: AgentModel;
84
81
 
85
- /** 当前 Agent 默认模型对应的稳定 ID。 */
86
- model_id?: string;
87
-
88
- /**
89
- * 按稳定 ID 解析 Session 运行时模型。
90
- *
91
- * 关键点(中文)
92
- * - Session 热切换与进程重启后的恢复统一使用该 resolver。
93
- * - SDK 不维护模型目录,具体目录与鉴权由宿主负责。
94
- */
95
- resolve_model?: (model_id: string) => Promise<AgentModel>;
96
-
97
82
  /**
98
83
  * 当前 agent 显式持有的插件实例集合。
99
84
  *
@@ -110,7 +95,7 @@ export interface AgentOptions {
110
95
  *
111
96
  * 关键点(中文)
112
97
  * - Agent 只负责用这个类创建/恢复 session,不感知具体 Composer 策略。
113
- * - 如果需要自定义 Composer,请在自定义 Session 类内部传给 `super({ composers })`。
98
+ * - 如果需要自定义 Composer,请在自定义 Session 类内部传给 `super({ composer })`。
114
99
  * - 该能力仅适用于本地 `Agent`。
115
100
  */
116
101
  Session?: AgentSessionConstructor;
@@ -121,25 +106,8 @@ export interface AgentOptions {
121
106
  * 关键点(中文)
122
107
  * - 这里表示宿主显式注入给 agent 的基础 env。
123
108
  * - `Agent` 会在这份基础 env 之上继续叠加项目 `.env`。
124
- * - 覆盖后的最终 env 会参与配置解析与运行时上下文装配,但不会回写到宿主环境。
109
+ * - 覆盖后的最终值会成为 Agent 运行时 env,但不会回写到宿主环境。
125
110
  */
126
111
  env?: Record<string, string>;
127
112
 
128
- /**
129
- * 宿主显式传入的运行时配置。
130
- *
131
- * 关键点(中文)
132
- * - SDK 不读取项目配置文件。
133
- * - CLI / Console 从自己的全局配置存储读取后传入这里。
134
- */
135
- config?: DowncityConfig;
136
-
137
- /**
138
- * 宿主提供的 plugin 配置持久化能力。
139
- *
140
- * 关键点(中文)
141
- * - SDK 默认会拒绝持久化操作;CLI 等宿主可在这里接入自己的全局数据库。
142
- * - plugin 只依赖该稳定接口,不感知 SQLite、文件或远端服务等具体实现。
143
- */
144
- plugin_config?: AgentPluginConfigRuntime;
145
113
  }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * AgentState 内部装配参数。
3
+ *
4
+ * 职责说明(中文)
5
+ * - 只描述 AgentState 连接 PluginRegistry、Session、tools 与 Shell 所需的稳定引用。
6
+ * - 这些对象都由 Agent 先完成创建,AgentState 只负责运行时连接和生命周期。
7
+ */
8
+
9
+ import type { Tool } from "ai";
10
+ import type { Shell } from "@downcity/shell";
11
+ import type { AgentSessions } from "@/agent/AgentSessions.js";
12
+ import type { PluginRegistry } from "@/plugin/core/PluginRegistry.js";
13
+ import type { AgentContext } from "@/agent/AgentContext.js";
14
+
15
+ /**
16
+ * AgentState 构造参数。
17
+ */
18
+ export interface AgentStateOptions {
19
+ /** 当前 Agent 共用的执行上下文。 */
20
+ context: AgentContext;
21
+
22
+ /** 当前 Agent 唯一的 PluginRegistry 实例。 */
23
+ plugins: PluginRegistry;
24
+
25
+ /** 当前 Agent 唯一的 Session 集合。 */
26
+ sessions: AgentSessions;
27
+
28
+ /** 当前 Agent 与 Session 共享的可变工具集合。 */
29
+ tools: Record<string, Tool>;
30
+
31
+ /** 当前 Agent 持有的可选 Shell 实例。 */
32
+ shell?: Shell;
33
+ }
@@ -133,9 +133,6 @@ export interface AgentSession extends AgentSessionActor {
133
133
  * 远程 Agent 返回的公开 session 接口。
134
134
  */
135
135
  export interface RemoteAgentSession extends AgentSessionActor {
136
- /** 按稳定模型 ID 更新远程 Session 模型。 */
137
- set(input: AgentSessionSetInput): Promise<void>;
138
-
139
136
  /** 从当前远程 session 创建一个分叉会话。 */
140
137
  fork(input?: AgentSessionForkInput | string): Promise<RemoteAgentSession>;
141
138
  }
@@ -6,8 +6,7 @@
6
6
  * - session actor 方法接口拆到 `SessionActor.ts`。
7
7
  */
8
8
 
9
- import type { LanguageModel } from "ai";
10
- import type { AgentModel } from "@/model/CityModelAdapter.js";
9
+ import type { AgentModel } from "@/agent/AgentModel.js";
11
10
  import type { SessionRecordV1 } from "@/executor/types/SessionRecords.js";
12
11
 
13
12
  /**
@@ -66,18 +65,10 @@ export interface AgentSessionSetInput {
66
65
  * 当前 session 默认模型实例。
67
66
  *
68
67
  * 关键点(中文)
69
- * - 这里接受运行中的模型实例,而不是模型 ID。
70
- * - 未同时提供 `modelId` 时,SDK 会从模型实例推导稳定 ID 并持久化。
68
+ * - SDK 只接受宿主已经解析完成的运行时模型实例。
69
+ * - 模型选择、ID 与持久化全部由宿主负责。
71
70
  */
72
- model?: AgentModel;
73
- /**
74
- * 当前 session 使用的稳定模型 ID。
75
- *
76
- * 关键点(中文)
77
- * - 由 Agent 宿主提供的模型 resolver 解析为运行时模型实例。
78
- * - 该值会持久化到 session metadata,进程重启后可以恢复。
79
- */
80
- modelId?: string;
71
+ model: AgentModel;
81
72
  }
82
73
 
83
74
  /**
@@ -85,11 +76,9 @@ export interface AgentSessionSetInput {
85
76
  */
86
77
  export interface AgentSessionConfigSnapshot {
87
78
  /** 当前 session 绑定的默认模型实例。 */
88
- model?: LanguageModel;
79
+ model?: AgentModel;
89
80
  /** 当前模型的轻量可读标签。 */
90
81
  modelLabel?: string;
91
- /** 当前 session 绑定的稳定模型 ID。 */
92
- modelId?: string;
93
82
  /** 当前模型支持的总上下文窗口长度,单位为 token。 */
94
83
  model_context_window?: number;
95
84
  }
@@ -265,8 +254,6 @@ export interface AgentSessionSummary {
265
254
  messageCount: number;
266
255
  /** 当前 session 绑定模型的可读标签。 */
267
256
  modelLabel?: string;
268
- /** 当前 session 绑定的稳定模型 ID。 */
269
- modelId?: string;
270
257
  /** 当前 session 是否处于执行中。 */
271
258
  executing?: boolean;
272
259
  }
@@ -4,7 +4,7 @@
4
4
  * 关键点(中文)
5
5
  * - 这里承载本轮执行过程中需要在多个组件间透传的运行期数据。
6
6
  * - 业务侧上下文优先通过该对象显式传递,避免分散读取隐式全局状态。
7
- * - tool 深层回调等无法直接传参的场景,才通过 run scope 间接读取这个对象。
7
+ * - tool 回调通过单次 tool execution context 显式读取该对象。
8
8
  */
9
9
 
10
10
  import type {
@@ -19,6 +19,8 @@ import type {
19
19
  import type { SessionUserMessageV1 } from "@/executor/types/SessionRecords.js";
20
20
  import type { FileUIPart } from "ai";
21
21
  import type { AgentPluginExecutionLease } from "@/types/plugin/PluginRuntime.js";
22
+ import type { ShellApprovalGateway } from "@downcity/shell";
23
+ import type { SessionToolInputReady } from "@/types/session/SessionTool.js";
22
24
 
23
25
  /**
24
26
  * 单次 session run 的运行上下文。
@@ -79,7 +81,7 @@ export interface SessionRunContext {
79
81
  *
80
82
  * 关键点(中文)
81
83
  * - 由 Session 统一输入队列在 step 检查点更新。
82
- * - tool/plugin 深层调用通过 run scope 读取,避免看到刚写入但尚未生效的 env。
84
+ * - tool/plugin 调用通过显式 run_context 读取,避免看到刚写入但尚未生效的 env。
83
85
  */
84
86
  agentEnv?: Readonly<Record<string, string>>;
85
87
 
@@ -105,6 +107,12 @@ export interface SessionRunContext {
105
107
  */
106
108
  onUiMessageChunkCallback?: SessionUiMessageChunkCallback;
107
109
 
110
+ /** Tool 实现开始执行前提交完整输入的顺序屏障。 */
111
+ on_tool_input_ready?: (input: SessionToolInputReady) => Promise<void>;
112
+
113
+ /** 当前 Session 拥有的 unrestricted 审批网关。 */
114
+ shell_approval_gateway?: ShellApprovalGateway;
115
+
108
116
  /**
109
117
  * action 发布回调。
110
118
  *
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Session tool 显式执行上下文。
3
+ *
4
+ * 关键点(中文)
5
+ * - 该对象由 Executor 在每个 Session step 绑定到 tool.execute。
6
+ * - Agent 工具读取 session_run_context,Shell 工具只读取 shell_run_context。
7
+ * - 上下文归属单次 run,不通过进程级或异步全局容器共享。
8
+ */
9
+
10
+ import type { ShellToolRunContext } from "@downcity/shell/types/ShellRuntime.js";
11
+ import type { SessionRunContext } from "@/types/executor/SessionRunContext.js";
12
+
13
+ /**
14
+ * Agent 与 Shell 工具共用的单次执行上下文。
15
+ */
16
+ export interface SessionToolExecutionContext {
17
+ /** 当前 Shell tool 调用的显式上下文。 */
18
+ shell_run_context: ShellToolRunContext;
19
+ /** 当前工具调用所属的完整 Session run 上下文。 */
20
+ session_run_context: SessionRunContext;
21
+ }
@@ -9,7 +9,8 @@
9
9
  import type { Command } from "commander";
10
10
  import type { Context as HonoContext } from "hono";
11
11
  import type { z } from "zod";
12
- import type { AgentContext } from "@/types/runtime/agent/AgentContext.js";
12
+ import type { AgentContext } from "@/agent/AgentContext.js";
13
+ import type { PluginRunContext } from "@/types/plugin/PluginRunContext.js";
13
14
  import type { JsonObject, JsonValue } from "@/types/common/Json.js";
14
15
 
15
16
  /**
@@ -147,6 +148,14 @@ export interface PluginAction<
147
148
  execute: (params: {
148
149
  /** 当前执行上下文。 */
149
150
  context: AgentContext;
151
+ /**
152
+ * 当前 action 所属的 Session run 上下文。
153
+ *
154
+ * 关键点(中文)
155
+ * - 模型 tool 调用时必定提供。
156
+ * - CLI、HTTP 或定时任务等非 Session 入口可能不提供。
157
+ */
158
+ run_context?: PluginRunContext;
150
159
  /** 已通过 schema 校验后的输入。 */
151
160
  input: P;
152
161
  /** 当前插件名称。 */