@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
@@ -10,6 +10,7 @@
10
10
  import fs from "fs-extra";
11
11
  import { nanoid } from "nanoid";
12
12
  import type { Tool } from "ai";
13
+ import type { AgentModel } from "@/agent/AgentModel.js";
13
14
  import type { Logger } from "@/utils/logger/Logger.js";
14
15
  import type {
15
16
  AgentCreateSessionInput,
@@ -22,25 +23,25 @@ import type {
22
23
  AgentSessionSummaryPage,
23
24
  AgentSessionSystemBlock,
24
25
  } from "@/types/agent/SessionTypes.js";
25
- import type { AgentModel } from "@/model/CityModelAdapter.js";
26
26
  import type { AgentSessionConstructor } from "@/types/agent/AgentOptions.js";
27
- import type { AgentSession, AgentSessions as AgentSessionsApi } from "@/types/agent/SessionActor.js";
27
+ import type {
28
+ AgentSession,
29
+ AgentSessions as AgentSessionsContract,
30
+ } from "@/types/agent/SessionActor.js";
28
31
  import type { AgentManagedSession } from "@/types/session/SessionOptions.js";
29
32
  import { Session } from "@/session/Session.js";
30
33
  import {
31
34
  getSdkAgentArchivedSessionDirPath,
32
35
  getSdkAgentArchivedSessionsDirPath,
33
36
  getSdkAgentSessionDirPath,
37
+ getSdkAgentSessionMessagesDirPath,
34
38
  } from "@/session/storage/Paths.js";
35
39
  import {
36
40
  listArchivedAgentSessionSummaryPage,
37
41
  listAgentSessionSummaryPage,
38
42
  } from "@/session/browse/Browse.js";
39
- import type { AgentContext } from "@/types/runtime/agent/AgentContext.js";
40
- import type { SessionPort } from "@/types/runtime/agent/AgentContext.js";
41
- import { createInstructionSystemBlocks } from "@/agent/local/AgentInstructions.js";
42
- import type { Shell } from "@downcity/shell";
43
- import type { SessionApproval } from "@/types/session/SessionApproval.js";
43
+ import type { SessionPort } from "@/types/session/SessionPort.js";
44
+ import { createInstructionSystemBlocks } from "@/agent/AgentInstructions.js";
44
45
  import type { AgentPluginExecutionRuntime } from "@/types/plugin/PluginRuntime.js";
45
46
 
46
47
  function decodeMaybe(input: string): string {
@@ -72,17 +73,6 @@ type AgentSessionsOptions = {
72
73
  */
73
74
  logger: Logger;
74
75
 
75
- /**
76
- * 延迟读取当前 agent context。
77
- *
78
- * 关键点(中文)
79
- * - 装配期通过 getter 拿到 context,避免循环引用。
80
- */
81
- get_agent_context: () => AgentContext;
82
-
83
- /** 延迟读取当前 Agent 挂载的 Shell Runtime。 */
84
- get_shell: () => Shell | undefined;
85
-
86
76
  /**
87
77
  * 当前静态 instruction 文本集合。
88
78
  */
@@ -95,63 +85,46 @@ type AgentSessionsOptions = {
95
85
  get_agent_plugins: () => AgentPluginExecutionRuntime;
96
86
 
97
87
  /**
98
- * 等待当前 Agent 后台能力启动完成。
88
+ * 等待当前 Agent 持有的长期运行时启动完成。
99
89
  */
100
90
  ensure_agent_ready: () => Promise<void>;
101
91
 
102
- /**
103
- * 当前默认模型实例。
104
- */
105
- default_model?: AgentModel;
106
-
107
- /** 当前默认模型的稳定 ID。 */
108
- default_model_id?: string;
109
-
110
- /** 按稳定 ID 解析 Session 模型。 */
111
- resolve_model?: (model_id: string) => Promise<AgentModel>;
112
-
113
92
  /**
114
93
  * 当前 agent 使用的本地 Session 类。
115
94
  */
116
95
  SessionClass?: AgentSessionConstructor;
96
+
97
+ /** 读取 Agent 当前持有的运行时模型实例。 */
98
+ get_agent_model: () => AgentModel | undefined;
117
99
  };
118
100
 
119
101
  /**
120
102
  * 本地 Agent session 管理服务。
121
103
  */
122
- export class AgentSessions implements AgentSessionsApi<AgentSession> {
104
+ export class AgentSessions implements AgentSessionsContract<AgentSession> {
123
105
  private readonly agent_id: string;
124
106
  private readonly project_root: string;
125
107
  private readonly tools: Record<string, Tool>;
126
108
  private readonly logger: Logger;
127
- private readonly get_agent_context: AgentSessionsOptions["get_agent_context"];
128
- private readonly get_shell: AgentSessionsOptions["get_shell"];
129
109
  private readonly get_instruction: AgentSessionsOptions["get_instruction"];
130
110
  private readonly get_agent_env: AgentSessionsOptions["get_agent_env"];
131
111
  private readonly get_agent_plugins: AgentSessionsOptions["get_agent_plugins"];
132
112
  private readonly ensure_agent_ready: AgentSessionsOptions["ensure_agent_ready"];
133
- private readonly default_model?: AgentModel;
134
- private readonly default_model_id?: string;
135
- private readonly resolve_model?: AgentSessionsOptions["resolve_model"];
136
113
  private readonly SessionClass: AgentSessionConstructor;
114
+ private readonly get_agent_model: AgentSessionsOptions["get_agent_model"];
137
115
  private readonly sessions_by_id = new Map<string, AgentManagedSession>();
138
- private readonly configured_session_ids = new Set<string>();
139
116
 
140
117
  constructor(options: AgentSessionsOptions) {
141
118
  this.agent_id = options.agent_id;
142
119
  this.project_root = options.project_root;
143
120
  this.tools = options.tools;
144
121
  this.logger = options.logger;
145
- this.get_agent_context = options.get_agent_context;
146
- this.get_shell = options.get_shell;
147
122
  this.get_instruction = options.get_instruction;
148
123
  this.get_agent_env = options.get_agent_env;
149
124
  this.get_agent_plugins = options.get_agent_plugins;
150
125
  this.ensure_agent_ready = options.ensure_agent_ready;
151
- this.default_model = options.default_model;
152
- this.default_model_id = options.default_model_id;
153
- this.resolve_model = options.resolve_model;
154
126
  this.SessionClass = options.SessionClass || Session;
127
+ this.get_agent_model = options.get_agent_model;
155
128
  }
156
129
 
157
130
  /**
@@ -161,6 +134,18 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
161
134
  return [...this.sessions_by_id.values()];
162
135
  }
163
136
 
137
+ /** 返回当前所有执行中的 Session 标识。 */
138
+ list_executing_session_ids(): string[] {
139
+ return this.list_cached_sessions()
140
+ .filter((session) => session.isExecuting())
141
+ .map((session) => session.id);
142
+ }
143
+
144
+ /** 返回当前执行中的 Session 数量。 */
145
+ get_executing_session_count(): number {
146
+ return this.list_executing_session_ids().length;
147
+ }
148
+
164
149
  /**
165
150
  * 把 Agent instruction 修改广播到已有 Session 的统一输入队列。
166
151
  */
@@ -212,7 +197,7 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
212
197
  /**
213
198
  * 获取或创建一个 session runtime port。
214
199
  */
215
- get_session_port(session_id: string): SessionPort {
200
+ runtime(session_id: string): SessionPort {
216
201
  return this.get_or_create_session({
217
202
  session_id,
218
203
  }).getRuntimePort();
@@ -243,7 +228,6 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
243
228
  session_id: explicit_session_id,
244
229
  });
245
230
  await session.initialize();
246
- await this.apply_session_defaults(session);
247
231
  return session;
248
232
  }
249
233
 
@@ -270,10 +254,59 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
270
254
  session_id: resolved_session_id,
271
255
  });
272
256
  await session.initialize();
273
- await this.apply_session_defaults(session);
274
257
  return session;
275
258
  }
276
259
 
260
+ /**
261
+ * 永久删除一个 Session 及其全部 Agent 领域数据。
262
+ *
263
+ * 关键点(中文)
264
+ * - 正在执行的 Session 会先停止,避免删除后继续写入。
265
+ * - 该方法不处理任何 Plugin 自有数据。
266
+ */
267
+ async remove(session_id: string): Promise<boolean> {
268
+ const resolved_session_id = String(session_id || "").trim();
269
+ if (!resolved_session_id) {
270
+ throw new Error("sessions.remove requires a non-empty sessionId");
271
+ }
272
+ const cached = this.sessions_by_id.get(resolved_session_id);
273
+ if (cached?.isExecuting()) {
274
+ await cached.stop();
275
+ }
276
+ const session_dir_path = getSdkAgentSessionDirPath(
277
+ this.project_root,
278
+ this.agent_id,
279
+ resolved_session_id,
280
+ );
281
+ const existed = await fs.pathExists(session_dir_path);
282
+ if (existed) await fs.remove(session_dir_path);
283
+ this.sessions_by_id.delete(resolved_session_id);
284
+ return existed;
285
+ }
286
+
287
+ /**
288
+ * 清空一个 Session 的消息目录。
289
+ */
290
+ async clear_messages(session_id: string): Promise<boolean> {
291
+ const resolved_session_id = String(session_id || "").trim();
292
+ if (!resolved_session_id) {
293
+ throw new Error("sessions.clear_messages requires a non-empty sessionId");
294
+ }
295
+ const cached = this.sessions_by_id.get(resolved_session_id);
296
+ if (cached?.isExecuting()) {
297
+ throw new Error(`Session "${resolved_session_id}" is currently executing`);
298
+ }
299
+ const messages_dir_path = getSdkAgentSessionMessagesDirPath(
300
+ this.project_root,
301
+ this.agent_id,
302
+ resolved_session_id,
303
+ );
304
+ const existed = await fs.pathExists(messages_dir_path);
305
+ if (existed) await fs.remove(messages_dir_path);
306
+ this.sessions_by_id.delete(resolved_session_id);
307
+ return existed;
308
+ }
309
+
277
310
  /**
278
311
  * 列出当前 agent 的 session 摘要页。
279
312
  */
@@ -284,7 +317,7 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
284
317
  projectRoot: this.project_root,
285
318
  agentId: this.agent_id,
286
319
  input,
287
- executingSessionIds: new Set(this.get_agent_context().listExecutingSessionIds()),
320
+ executingSessionIds: new Set(this.list_executing_session_ids()),
288
321
  });
289
322
  }
290
323
 
@@ -299,9 +332,7 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
299
332
  throw new Error("sessions.archive requires a non-empty id");
300
333
  }
301
334
 
302
- const executing_session_ids = new Set(
303
- this.get_agent_context().listExecutingSessionIds(),
304
- );
335
+ const executing_session_ids = new Set(this.list_executing_session_ids());
305
336
  if (executing_session_ids.has(session_id)) {
306
337
  throw new Error(`Session "${session_id}" is currently executing`);
307
338
  }
@@ -332,7 +363,6 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
332
363
 
333
364
  // 关键点(中文):归档后清理缓存,避免后续操作访问已移动目录。
334
365
  this.sessions_by_id.delete(session_id);
335
- this.configured_session_ids.delete(session_id);
336
366
 
337
367
  return {
338
368
  sessionId: session_id,
@@ -408,73 +438,17 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
408
438
  logger: this.logger,
409
439
  getInstructionSystemBlocks: () => this.load_instruction_system_blocks(),
410
440
  getAgentEnv: () => this.get_agent_env(),
441
+ getAgentModel: () => this.get_agent_model(),
411
442
  get_agent_plugins: () => this.get_agent_plugins(),
412
443
  getManagedPluginSystemBlocks: async () => [],
413
- getPluginSystemBlocks: async () => await this.load_plugin_system_blocks(),
414
444
  ensureConfigured: async (session) => {
415
445
  await this.ensure_agent_ready();
416
- await this.apply_session_defaults(session);
417
- },
418
- ...(this.resolve_model ? { resolve_model: this.resolve_model } : {}),
419
- list_approvals: async (session_id) => this.list_session_approvals(session_id),
420
- get_approval_mode: async (session_id) => {
421
- const shell = this.require_shell();
422
- return shell.approval_mode({ session_id });
423
- },
424
- set_approval_mode: async (session_id, { mode }) => {
425
- const shell = this.require_shell();
426
- return shell.set_approval_mode({ session_id, mode });
427
- },
428
- resolve_approval: async (session_id, { approval_id, decision }) => {
429
- const approval = this.list_session_approvals(session_id)
430
- .find((item) => item.approval_id === approval_id);
431
- if (!approval) return { success: false, approval_id, decision };
432
- return decision === "approved"
433
- ? await this.require_shell().approve({ approval_id })
434
- : await this.require_shell().deny({ approval_id });
435
446
  },
436
447
  });
437
448
  this.sessions_by_id.set(resolved_session_id, created);
438
449
  return created;
439
450
  }
440
451
 
441
- private require_shell(): Shell {
442
- const shell = this.get_shell();
443
- if (!shell) throw new Error("Session shell is not configured");
444
- return shell;
445
- }
446
-
447
- private list_session_approvals(session_id: string): SessionApproval[] {
448
- return (this.get_shell()?.approvals() || [])
449
- .filter((approval) => approval.session_id === session_id)
450
- .map((approval) => ({
451
- approval_id: approval.approval_id,
452
- session_id,
453
- ...(approval.turn_id ? { turn_id: approval.turn_id } : {}),
454
- ...(approval.tool_call_id ? { tool_call_id: approval.tool_call_id } : {}),
455
- tool_name: approval.tool_name,
456
- command: approval.cmd,
457
- cwd: approval.cwd,
458
- reason: approval.reason,
459
- operation: approval.operation,
460
- created_at: approval.created_at,
461
- }));
462
- }
463
-
464
- private async apply_session_defaults(
465
- session: AgentManagedSession,
466
- ): Promise<void> {
467
- if (this.configured_session_ids.has(session.id)) return;
468
- const persisted_model_id = String(session.config.modelId || "").trim();
469
- if (!persisted_model_id && this.default_model) {
470
- await session.set({
471
- model: this.default_model,
472
- ...(this.default_model_id ? { modelId: this.default_model_id } : {}),
473
- });
474
- }
475
- this.configured_session_ids.add(session.id);
476
- }
477
-
478
452
  private load_instruction_system_blocks(): AgentSessionSystemBlock[] {
479
453
  return createInstructionSystemBlocks(
480
454
  this.get_instruction(),
@@ -482,7 +456,4 @@ export class AgentSessions implements AgentSessionsApi<AgentSession> {
482
456
  );
483
457
  }
484
458
 
485
- private async load_plugin_system_blocks(): Promise<AgentSessionSystemBlock[]> {
486
- return await this.get_agent_context().plugins.systemBlocks();
487
- }
488
459
  }
@@ -0,0 +1,151 @@
1
+ /**
2
+ * AgentState:本地 Agent 长期运行状态与生命周期。
3
+ *
4
+ * 职责说明(中文)
5
+ * - 统一连接 PluginRegistry、AgentContext、AgentSessions 与共享 tools。
6
+ * - 持有 Plugin lifecycle 与 ActionSchedule 的启动状态。
7
+ * - Agent 构造完成后立即开始启动,调用方通过 `ready()` 等待。
8
+ * - Agent 释放时统一停止 ActionSchedule、Plugin lifecycle 与 Shell。
9
+ * - RPC / HTTP 等 transport 不属于 AgentState,由上游宿主独立管理。
10
+ */
11
+
12
+ import type { Shell } from "@downcity/shell";
13
+ import type { Tool } from "ai";
14
+ import type { AgentContext } from "@/agent/AgentContext.js";
15
+ import type { AgentSessions } from "@/agent/AgentSessions.js";
16
+ import type { PluginRegistry } from "@/plugin/core/PluginRegistry.js";
17
+ import type { AgentStateOptions } from "@/types/agent/AgentState.js";
18
+ import { createPluginTools } from "@executor/tools/plugin/PluginToolDefinition.js";
19
+ import { generateId } from "@/utils/Id.js";
20
+ import {
21
+ startActionScheduleRuntime,
22
+ type ActionScheduleRuntimeHandle,
23
+ } from "@/plugin/core/ActionScheduleRuntime.js";
24
+
25
+ /**
26
+ * 本地 Agent 长期运行状态。
27
+ */
28
+ export class AgentState {
29
+ /** 当前 Agent 共用的执行上下文。 */
30
+ private readonly context: AgentContext;
31
+
32
+ /** 当前 Agent 唯一的 PluginRegistry 实例。 */
33
+ private readonly plugins: PluginRegistry;
34
+
35
+ /** 当前 Agent 唯一的 Session 集合。 */
36
+ private readonly sessions: AgentSessions;
37
+
38
+ /** 当前 Agent 与 Session 共享的可变工具集合。 */
39
+ private readonly tools: Record<string, Tool>;
40
+
41
+ /** 当前 Agent 持有的可选 Shell 实例。 */
42
+ private readonly shell?: Shell;
43
+
44
+ /** Plugin lifecycle 与 ActionSchedule 的唯一启动 Promise。 */
45
+ private readonly ready_promise: Promise<void>;
46
+
47
+ /** Plugin lifecycle 是否已经完成启动流程。 */
48
+ private plugins_started = false;
49
+
50
+ /** 当前 Agent 持有的 ActionSchedule 轮询运行时。 */
51
+ private action_schedule_runtime: ActionScheduleRuntimeHandle | null = null;
52
+
53
+ constructor(options: AgentStateOptions) {
54
+ this.context = options.context;
55
+ this.plugins = options.plugins;
56
+ this.sessions = options.sessions;
57
+ this.tools = options.tools;
58
+ this.shell = options.shell;
59
+
60
+ this.plugins.bind_context(this.context);
61
+ this.ensure_plugin_tools();
62
+ this.plugins.set_change_listener(({ type, plugin_name }) => {
63
+ this.handle_plugin_change(type, plugin_name);
64
+ });
65
+ this.ready_promise = this.start_runtime();
66
+ }
67
+
68
+ /**
69
+ * 等待当前 Agent 持有的长期运行时启动完成。
70
+ */
71
+ async ready(): Promise<void> {
72
+ await this.ready_promise;
73
+ }
74
+
75
+ /**
76
+ * 释放当前 Agent 持有的长期运行时对象。
77
+ */
78
+ async dispose(): Promise<void> {
79
+ await this.ready_promise.catch(() => undefined);
80
+ this.action_schedule_runtime?.stop();
81
+ this.action_schedule_runtime = null;
82
+ if (this.plugins_started) {
83
+ await this.context.plugins.unregisterAll();
84
+ this.plugins_started = false;
85
+ }
86
+ await this.shell?.dispose();
87
+ }
88
+
89
+ /**
90
+ * 启动 Plugin lifecycle 与 ActionSchedule。
91
+ *
92
+ * 关键点(中文)
93
+ * - Plugin lifecycle 先启动,避免到期任务调用未就绪的 Plugin。
94
+ * - 单个 Plugin 启动失败由 PluginRegistry 隔离,只记录错误并继续启动 Agent。
95
+ * - ActionSchedule 启动失败不阻断 Agent ready。
96
+ */
97
+ private async start_runtime(): Promise<void> {
98
+ const snapshots = await this.plugins.startAll();
99
+ this.plugins_started = true;
100
+ for (const item of snapshots) {
101
+ if (item.status === "error") {
102
+ this.context.logger.error(
103
+ `Plugin start failed: ${item.name} - ${item.last_error || "unknown error"}`,
104
+ );
105
+ }
106
+ }
107
+
108
+ try {
109
+ this.action_schedule_runtime = await startActionScheduleRuntime(
110
+ this.context,
111
+ );
112
+ } catch (error) {
113
+ this.context.logger.error(
114
+ `ActionSchedule start failed: ${String(error)}`,
115
+ );
116
+ }
117
+ }
118
+
119
+ /**
120
+ * 确保带 action 的 PluginRegistry 已连接通用调用工具。
121
+ *
122
+ * 关键点(中文)
123
+ * - 初始 Plugin 与运行中动态注册 Plugin 统一走这里。
124
+ * - 只补充缺失工具,不覆盖调用方提供的同名自定义工具。
125
+ * - tools 是 AgentSessions 与 Session 共享引用,原地写入会立即对现有 Session 生效。
126
+ */
127
+ private ensure_plugin_tools(): void {
128
+ if (!this.plugins.list().some((plugin) => plugin.actions.length > 0)) {
129
+ return;
130
+ }
131
+ const plugin_tools = createPluginTools({ plugins: this.plugins });
132
+ this.tools.plugin_read = this.tools.plugin_read || plugin_tools.plugin_read;
133
+ this.tools.plugin_call = this.tools.plugin_call || plugin_tools.plugin_call;
134
+ }
135
+
136
+ /**
137
+ * 处理 PluginRegistry 修改后的 Agent 运行时同步。
138
+ */
139
+ private handle_plugin_change(
140
+ type: "register" | "unregister",
141
+ plugin_name: string,
142
+ ): void {
143
+ this.ensure_plugin_tools();
144
+ const verb = type === "register" ? "registered" : "unregistered";
145
+ this.sessions.broadcast_plugins({
146
+ command_id: generateId(),
147
+ title: `Agent plugin ${plugin_name} ${verb}`,
148
+ plugins: this.plugins.execution_view(),
149
+ });
150
+ }
151
+ }
@@ -67,39 +67,6 @@ export function getDowncityProfileOtherPath(cwd: string): string {
67
67
  return path.join(getDowncityProfileDirPath(cwd), "other.md");
68
68
  }
69
69
 
70
- /**
71
- * Memory 根目录(V2)。
72
- *
73
- * 关键点(中文)
74
- * - `.downcity/memory` 为跨会话记忆目录。
75
- * - 当前仅供本模块内部继续拼接长期记忆与每日记忆路径。
76
- */
77
- function getDowncityMemoryDirPath(cwd: string): string {
78
- return path.join(getDowncityDirPath(cwd), "memory");
79
- }
80
-
81
- /**
82
- * 长期记忆文件路径(V2)。
83
- */
84
- export function getDowncityMemoryLongTermPath(cwd: string): string {
85
- return path.join(getDowncityMemoryDirPath(cwd), "MEMORY.md");
86
- }
87
-
88
- /**
89
- * 每日记忆目录路径(V2)。
90
- */
91
- export function getDowncityMemoryDailyDirPath(cwd: string): string {
92
- return path.join(getDowncityMemoryDirPath(cwd), "daily");
93
- }
94
-
95
- /**
96
- * 每日记忆文件路径(V2)。
97
- */
98
- export function getDowncityMemoryDailyPath(cwd: string, date: string): string {
99
- const fileName = `${String(date || "").trim() || "unknown-date"}.md`;
100
- return path.join(getDowncityMemoryDailyDirPath(cwd), fileName);
101
- }
102
-
103
70
  /**
104
71
  * Plugin Schedule JSONL 路径。
105
72
  *
@@ -272,61 +239,3 @@ export function getDowncityTasksDirPath(cwd: string): string {
272
239
  export function getDowncityDebugDirPath(cwd: string): string {
273
240
  return path.join(getDowncityDirPath(cwd), ".debug");
274
241
  }
275
-
276
- /**
277
- * Chat 元信息目录(由 chat plugin runtime 维护)。
278
- *
279
- * 关键点(中文)
280
- * - 该目录存放 `sessionId -> chat` 的最近映射快照
281
- * - 与 core session messages 分离,避免把平台路由细节耦合进 core
282
- * - 当前仅供本模块内部继续拼接 chat 会话与 meta 子目录。
283
- */
284
- function getDowncityChatDirPath(cwd: string): string {
285
- return path.join(getDowncityDirPath(cwd), "chat");
286
- }
287
-
288
- /**
289
- * Channel 目录(channel -> sessionId 映射)。
290
- *
291
- * 关键点(中文)
292
- * - 专门承载渠道目标与内部 sessionId 的映射关系。
293
- * - 与 `chat/` 审计事件目录分离,避免职责混淆。
294
- */
295
- export function getDowncityChannelDirPath(cwd: string): string {
296
- return path.join(getDowncityDirPath(cwd), "channel");
297
- }
298
-
299
- /**
300
- * Channel 元信息文件路径。
301
- *
302
- * 关键点(中文)
303
- * - 采用单文件 JSON(`meta.json`)存储映射表与最近路由信息。
304
- */
305
- export function getDowncityChannelMetaPath(cwd: string): string {
306
- return path.join(getDowncityChannelDirPath(cwd), "meta.json");
307
- }
308
-
309
- /**
310
- * Chat 会话目录(按 sessionId 组织)。
311
- *
312
- * 关键点(中文)
313
- * - 用于存放聊天事件流(history.jsonl)等审计向数据。
314
- * - 与 `chat/meta` 分离,避免路由快照与事件流混在一起。
315
- */
316
- export function getDowncityChatSessionDirPath(cwd: string, sessionId: string): string {
317
- return path.join(
318
- getDowncityChatDirPath(cwd),
319
- encodeURIComponent(String(sessionId || "").trim()),
320
- );
321
- }
322
-
323
- /**
324
- * Chat 事件流文件路径(JSONL)。
325
- *
326
- * 关键点(中文)
327
- * - 每行一条 chat 事件(当前为 inbound)。
328
- * - 设计为 append-only,便于审计与回放。
329
- */
330
- export function getDowncityChatHistoryPath(cwd: string, sessionId: string): string {
331
- return path.join(getDowncityChatSessionDirPath(cwd, sessionId), "history.jsonl");
332
- }