@downcity/agent 1.1.408 → 1.1.437

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 (1152) hide show
  1. package/README.md +63 -51
  2. package/bin/agent/Agent.d.ts +39 -17
  3. package/bin/agent/Agent.d.ts.map +1 -1
  4. package/bin/agent/Agent.js +169 -71
  5. package/bin/agent/Agent.js.map +1 -1
  6. package/bin/agent/AgentInstructions.d.ts +1 -1
  7. package/bin/agent/AgentInstructions.js +3 -3
  8. package/bin/agent/AgentInstructions.js.map +1 -1
  9. package/bin/agent/AgentMemoryStorage.d.ts +18 -0
  10. package/bin/agent/AgentMemoryStorage.d.ts.map +1 -0
  11. package/bin/agent/AgentMemoryStorage.js +176 -0
  12. package/bin/agent/AgentMemoryStorage.js.map +1 -0
  13. package/bin/agent/AgentSessions.d.ts +32 -33
  14. package/bin/agent/AgentSessions.d.ts.map +1 -1
  15. package/bin/agent/AgentSessions.js +122 -72
  16. package/bin/agent/AgentSessions.js.map +1 -1
  17. package/bin/executor/Executor.d.ts +12 -30
  18. package/bin/executor/Executor.d.ts.map +1 -1
  19. package/bin/executor/Executor.js +39 -121
  20. package/bin/executor/Executor.js.map +1 -1
  21. package/bin/executor/composer/system/default/SystemPromptAssets.d.ts +0 -4
  22. package/bin/executor/composer/system/default/SystemPromptAssets.d.ts.map +1 -1
  23. package/bin/executor/composer/system/default/SystemPromptAssets.js +1 -6
  24. package/bin/executor/composer/system/default/SystemPromptAssets.js.map +1 -1
  25. package/bin/executor/composer/system/default/assets/core.prompt.d.ts +1 -1
  26. package/bin/executor/composer/system/default/assets/core.prompt.d.ts.map +1 -1
  27. package/bin/executor/composer/system/default/assets/core.prompt.js +1 -1
  28. package/bin/executor/composer/system/default/assets/core.prompt.js.map +1 -1
  29. package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts +3 -9
  30. package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts.map +1 -1
  31. package/bin/executor/core-engine/CoreEngineContextCompaction.js +4 -130
  32. package/bin/executor/core-engine/CoreEngineContextCompaction.js.map +1 -1
  33. package/bin/executor/core-engine/CoreEngineError.d.ts +1 -1
  34. package/bin/executor/core-engine/CoreEngineError.d.ts.map +1 -1
  35. package/bin/executor/core-engine/CoreEngineLoopDecision.d.ts +1 -1
  36. package/bin/executor/core-engine/CoreEngineRunner.d.ts +3 -30
  37. package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -1
  38. package/bin/executor/core-engine/CoreEngineRunner.js +83 -245
  39. package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -1
  40. package/bin/executor/core-engine/CoreEngineSignals.d.ts +7 -7
  41. package/bin/executor/core-engine/CoreEngineSignals.d.ts.map +1 -1
  42. package/bin/executor/core-engine/CoreEngineSignals.js +1 -1
  43. package/bin/executor/core-engine/CoreEngineSignals.js.map +1 -1
  44. package/bin/executor/messages/SessionAttachmentMapper.d.ts +2 -2
  45. package/bin/executor/messages/SessionAttachmentMapper.d.ts.map +1 -1
  46. package/bin/executor/messages/SessionAttachmentMapper.js.map +1 -1
  47. package/bin/executor/messages/SessionMessageLog.d.ts +3 -3
  48. package/bin/executor/messages/SessionMessageLog.d.ts.map +1 -1
  49. package/bin/executor/messages/SessionMessageLog.js.map +1 -1
  50. package/bin/executor/messages/SessionModelMessages.d.ts +1 -4
  51. package/bin/executor/messages/SessionModelMessages.d.ts.map +1 -1
  52. package/bin/executor/messages/SessionModelMessages.js +81 -91
  53. package/bin/executor/messages/SessionModelMessages.js.map +1 -1
  54. package/bin/executor/model/ModelGenerate.d.ts +12 -2
  55. package/bin/executor/model/ModelGenerate.d.ts.map +1 -1
  56. package/bin/executor/model/ModelGenerate.js +23 -15
  57. package/bin/executor/model/ModelGenerate.js.map +1 -1
  58. package/bin/executor/model/ModelRequestRunner.d.ts +29 -0
  59. package/bin/executor/model/ModelRequestRunner.d.ts.map +1 -0
  60. package/bin/executor/model/ModelRequestRunner.js +77 -0
  61. package/bin/executor/model/ModelRequestRunner.js.map +1 -0
  62. package/bin/executor/model/ModelStepRunner.d.ts +3 -7
  63. package/bin/executor/model/ModelStepRunner.d.ts.map +1 -1
  64. package/bin/executor/model/ModelStepRunner.js +9 -41
  65. package/bin/executor/model/ModelStepRunner.js.map +1 -1
  66. package/bin/executor/model/ModelStreamConsumer.d.ts +12 -0
  67. package/bin/executor/model/ModelStreamConsumer.d.ts.map +1 -0
  68. package/bin/executor/model/ModelStreamConsumer.js +60 -0
  69. package/bin/executor/model/ModelStreamConsumer.js.map +1 -0
  70. package/bin/executor/model/ModelStreamFailure.d.ts +4 -0
  71. package/bin/executor/model/ModelStreamFailure.d.ts.map +1 -1
  72. package/bin/executor/model/ModelStreamFailure.js +21 -0
  73. package/bin/executor/model/ModelStreamFailure.js.map +1 -1
  74. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts +7 -64
  75. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts.map +1 -1
  76. package/bin/executor/services/ExecutorRecoveryPolicy.js +29 -45
  77. package/bin/executor/services/ExecutorRecoveryPolicy.js.map +1 -1
  78. package/bin/executor/types/SessionHistoryMeta.d.ts +6 -8
  79. package/bin/executor/types/SessionHistoryMeta.d.ts.map +1 -1
  80. package/bin/executor/types/SessionHistoryMeta.js +1 -1
  81. package/bin/group/Group.d.ts +22 -3
  82. package/bin/group/Group.d.ts.map +1 -1
  83. package/bin/group/Group.js +54 -4
  84. package/bin/group/Group.js.map +1 -1
  85. package/bin/group/GroupDispatchRuntime.d.ts +37 -0
  86. package/bin/group/GroupDispatchRuntime.d.ts.map +1 -0
  87. package/bin/group/{GroupDispatchSession.js → GroupDispatchRuntime.js} +77 -21
  88. package/bin/group/GroupDispatchRuntime.js.map +1 -0
  89. package/bin/group/GroupSession.d.ts +20 -6
  90. package/bin/group/GroupSession.d.ts.map +1 -1
  91. package/bin/group/GroupSession.js +148 -84
  92. package/bin/group/GroupSession.js.map +1 -1
  93. package/bin/group/GroupSessions.d.ts +1 -1
  94. package/bin/group/GroupSessions.d.ts.map +1 -1
  95. package/bin/group/GroupSessions.js +11 -10
  96. package/bin/group/GroupSessions.js.map +1 -1
  97. package/bin/group/index.d.ts +1 -1
  98. package/bin/group/index.d.ts.map +1 -1
  99. package/bin/{workspace/store → group/storage}/LocalGroupSessionDataStore.d.ts +11 -3
  100. package/bin/group/storage/LocalGroupSessionDataStore.d.ts.map +1 -0
  101. package/bin/{workspace/store → group/storage}/LocalGroupSessionDataStore.js +89 -6
  102. package/bin/group/storage/LocalGroupSessionDataStore.js.map +1 -0
  103. package/bin/group/storage/LocalGroupSessionStore.d.ts.map +1 -0
  104. package/bin/{workspace/store → group/storage}/LocalGroupSessionStore.js +1 -1
  105. package/bin/group/storage/LocalGroupSessionStore.js.map +1 -0
  106. package/bin/index.d.ts +25 -55
  107. package/bin/index.d.ts.map +1 -1
  108. package/bin/index.js +9 -21
  109. package/bin/index.js.map +1 -1
  110. package/bin/session/DefaultSessionComposer.d.ts +13 -7
  111. package/bin/session/DefaultSessionComposer.d.ts.map +1 -1
  112. package/bin/session/DefaultSessionComposer.js +63 -24
  113. package/bin/session/DefaultSessionComposer.js.map +1 -1
  114. package/bin/session/Session.d.ts +27 -70
  115. package/bin/session/Session.d.ts.map +1 -1
  116. package/bin/session/Session.js +136 -446
  117. package/bin/session/Session.js.map +1 -1
  118. package/bin/session/SessionComposition.d.ts +49 -0
  119. package/bin/session/SessionComposition.d.ts.map +1 -0
  120. package/bin/session/SessionComposition.js +309 -0
  121. package/bin/session/SessionComposition.js.map +1 -0
  122. package/bin/session/SessionHookPoints.d.ts +15 -0
  123. package/bin/session/SessionHookPoints.d.ts.map +1 -0
  124. package/bin/session/SessionHookPoints.js +15 -0
  125. package/bin/session/SessionHookPoints.js.map +1 -0
  126. package/bin/session/SessionHooks.d.ts +38 -0
  127. package/bin/session/SessionHooks.d.ts.map +1 -0
  128. package/bin/session/SessionHooks.js +71 -0
  129. package/bin/session/SessionHooks.js.map +1 -0
  130. package/bin/session/SessionLoop.d.ts +18 -10
  131. package/bin/session/SessionLoop.d.ts.map +1 -1
  132. package/bin/session/SessionLoop.js +234 -213
  133. package/bin/session/SessionLoop.js.map +1 -1
  134. package/bin/session/SessionMessages.d.ts +57 -86
  135. package/bin/session/SessionMessages.d.ts.map +1 -1
  136. package/bin/session/SessionMessages.js +289 -506
  137. package/bin/session/SessionMessages.js.map +1 -1
  138. package/bin/session/SessionQueue.d.ts +1 -1
  139. package/bin/session/SessionQueue.d.ts.map +1 -1
  140. package/bin/session/SessionQueue.js +2 -1
  141. package/bin/session/SessionQueue.js.map +1 -1
  142. package/bin/session/SessionState.d.ts +7 -11
  143. package/bin/session/SessionState.d.ts.map +1 -1
  144. package/bin/session/SessionState.js +63 -95
  145. package/bin/session/SessionState.js.map +1 -1
  146. package/bin/session/SessionSystem.d.ts +6 -2
  147. package/bin/session/SessionSystem.d.ts.map +1 -1
  148. package/bin/session/SessionSystem.js +41 -1
  149. package/bin/session/SessionSystem.js.map +1 -1
  150. package/bin/session/SessionTitle.d.ts +37 -7
  151. package/bin/session/SessionTitle.d.ts.map +1 -1
  152. package/bin/session/SessionTitle.js +43 -37
  153. package/bin/session/SessionTitle.js.map +1 -1
  154. package/bin/session/browse/Browse.d.ts +34 -48
  155. package/bin/session/browse/Browse.d.ts.map +1 -1
  156. package/bin/session/browse/Browse.js +106 -354
  157. package/bin/session/browse/Browse.js.map +1 -1
  158. package/bin/session/browse/SessionMessageTimeline.d.ts +1 -1
  159. package/bin/session/browse/SessionMessageTimeline.d.ts.map +1 -1
  160. package/bin/session/browse/SessionMessageTimeline.js +61 -37
  161. package/bin/session/browse/SessionMessageTimeline.js.map +1 -1
  162. package/bin/session/composer/policies/AdaptivePartContextPolicy.d.ts +35 -0
  163. package/bin/session/composer/policies/AdaptivePartContextPolicy.d.ts.map +1 -0
  164. package/bin/session/composer/policies/AdaptivePartContextPolicy.js +256 -0
  165. package/bin/session/composer/policies/AdaptivePartContextPolicy.js.map +1 -0
  166. package/bin/session/composer/policies/FullHistoryContextPolicy.d.ts +24 -0
  167. package/bin/session/composer/policies/FullHistoryContextPolicy.d.ts.map +1 -0
  168. package/bin/session/composer/policies/FullHistoryContextPolicy.js +31 -0
  169. package/bin/session/composer/policies/FullHistoryContextPolicy.js.map +1 -0
  170. package/bin/session/composer/policies/SessionSummaryPrompts.d.ts +16 -0
  171. package/bin/session/composer/policies/SessionSummaryPrompts.d.ts.map +1 -0
  172. package/bin/session/composer/policies/SessionSummaryPrompts.js +32 -0
  173. package/bin/session/composer/policies/SessionSummaryPrompts.js.map +1 -0
  174. package/bin/session/control/SessionInteractions.d.ts +2 -2
  175. package/bin/session/control/SessionInteractions.d.ts.map +1 -1
  176. package/bin/session/execution/SessionAssistantOutputAdapter.d.ts +16 -5
  177. package/bin/session/execution/SessionAssistantOutputAdapter.d.ts.map +1 -1
  178. package/bin/session/execution/SessionAssistantOutputAdapter.js +7 -3
  179. package/bin/session/execution/SessionAssistantOutputAdapter.js.map +1 -1
  180. package/bin/session/execution/tools/SessionShellApprovalAdapter.d.ts +3 -3
  181. package/bin/session/execution/tools/SessionShellApprovalAdapter.d.ts.map +1 -1
  182. package/bin/session/index.d.ts +8 -0
  183. package/bin/session/index.d.ts.map +1 -0
  184. package/bin/session/index.js +7 -0
  185. package/bin/session/index.js.map +1 -0
  186. package/bin/session/messages/SessionAgentActionPartWriter.d.ts +22 -0
  187. package/bin/session/messages/SessionAgentActionPartWriter.d.ts.map +1 -0
  188. package/bin/session/messages/SessionAgentActionPartWriter.js +36 -0
  189. package/bin/session/messages/SessionAgentActionPartWriter.js.map +1 -0
  190. package/bin/session/messages/SessionAgentContent.d.ts +10 -0
  191. package/bin/session/messages/SessionAgentContent.d.ts.map +1 -0
  192. package/bin/session/messages/SessionAgentContent.js +44 -0
  193. package/bin/session/messages/SessionAgentContent.js.map +1 -0
  194. package/bin/session/messages/SessionAgentMessageState.d.ts +50 -0
  195. package/bin/session/messages/SessionAgentMessageState.d.ts.map +1 -0
  196. package/bin/session/messages/SessionAgentMessageState.js +283 -0
  197. package/bin/session/messages/SessionAgentMessageState.js.map +1 -0
  198. package/bin/session/messages/{SessionAssistantMessageWriter.d.ts → SessionAgentMessageWriter.d.ts} +23 -9
  199. package/bin/session/messages/SessionAgentMessageWriter.d.ts.map +1 -0
  200. package/bin/session/messages/{SessionAssistantMessageWriter.js → SessionAgentMessageWriter.js} +56 -44
  201. package/bin/session/messages/SessionAgentMessageWriter.js.map +1 -0
  202. package/bin/session/messages/SessionForkMessageFiles.d.ts +22 -0
  203. package/bin/session/messages/SessionForkMessageFiles.d.ts.map +1 -0
  204. package/bin/session/messages/SessionForkMessageFiles.js +52 -0
  205. package/bin/session/messages/SessionForkMessageFiles.js.map +1 -0
  206. package/bin/session/messages/SessionJsonValue.d.ts +1 -1
  207. package/bin/session/messages/SessionJsonValue.d.ts.map +1 -1
  208. package/bin/session/messages/SessionMessageInteractionWriter.d.ts +7 -12
  209. package/bin/session/messages/SessionMessageInteractionWriter.d.ts.map +1 -1
  210. package/bin/session/messages/SessionMessageInteractionWriter.js +4 -4
  211. package/bin/session/messages/SessionMessageInteractionWriter.js.map +1 -1
  212. package/bin/session/messages/SessionMessageText.d.ts +4 -4
  213. package/bin/session/messages/SessionMessageText.d.ts.map +1 -1
  214. package/bin/session/messages/SessionMessageText.js +0 -2
  215. package/bin/session/messages/SessionMessageText.js.map +1 -1
  216. package/bin/session/messages/SessionTurnFileDiffBuilder.d.ts +15 -0
  217. package/bin/session/messages/SessionTurnFileDiffBuilder.d.ts.map +1 -0
  218. package/bin/session/messages/SessionTurnFileDiffBuilder.js +180 -0
  219. package/bin/session/messages/SessionTurnFileDiffBuilder.js.map +1 -0
  220. package/bin/session/messages/SessionTurnFileDiffData.d.ts +15 -0
  221. package/bin/session/messages/SessionTurnFileDiffData.d.ts.map +1 -0
  222. package/bin/session/messages/SessionTurnFileDiffData.js +59 -0
  223. package/bin/session/messages/SessionTurnFileDiffData.js.map +1 -0
  224. package/bin/session/messages/SessionUserContext.d.ts +13 -0
  225. package/bin/session/messages/SessionUserContext.d.ts.map +1 -0
  226. package/bin/session/messages/SessionUserContext.js +38 -0
  227. package/bin/session/messages/SessionUserContext.js.map +1 -0
  228. package/bin/session/messages/SessionUserMessage.d.ts +14 -0
  229. package/bin/session/messages/SessionUserMessage.d.ts.map +1 -0
  230. package/bin/session/messages/SessionUserMessage.js +74 -0
  231. package/bin/session/messages/SessionUserMessage.js.map +1 -0
  232. package/bin/session/preview/SessionMessagePreview.d.ts +1 -1
  233. package/bin/session/preview/SessionMessagePreview.d.ts.map +1 -1
  234. package/bin/session/preview/SessionMessagePreview.js +26 -10
  235. package/bin/session/preview/SessionMessagePreview.js.map +1 -1
  236. package/bin/session/runtime/SessionEventHub.d.ts +1 -1
  237. package/bin/session/runtime/SessionEventHub.d.ts.map +1 -1
  238. package/bin/session/runtime/SessionModelRequestWarning.d.ts +17 -0
  239. package/bin/session/runtime/SessionModelRequestWarning.d.ts.map +1 -0
  240. package/bin/session/runtime/SessionModelRequestWarning.js +19 -0
  241. package/bin/session/runtime/SessionModelRequestWarning.js.map +1 -0
  242. package/bin/session/runtime/SessionTitleTask.d.ts +2 -2
  243. package/bin/session/runtime/SessionTitleTask.d.ts.map +1 -1
  244. package/bin/session/runtime/SessionTitleTask.js +1 -1
  245. package/bin/session/runtime/SessionTitleTask.js.map +1 -1
  246. package/bin/session/runtime/SessionTurnCompletion.d.ts +15 -0
  247. package/bin/session/runtime/SessionTurnCompletion.d.ts.map +1 -0
  248. package/bin/session/runtime/SessionTurnCompletion.js +126 -0
  249. package/bin/session/runtime/SessionTurnCompletion.js.map +1 -0
  250. package/bin/session/runtime/SessionTurnContext.d.ts +6 -3
  251. package/bin/session/runtime/SessionTurnContext.d.ts.map +1 -1
  252. package/bin/session/runtime/SessionTurnContext.js +73 -38
  253. package/bin/session/runtime/SessionTurnContext.js.map +1 -1
  254. package/bin/session/runtime/SessionTurnFileDiff.d.ts +12 -0
  255. package/bin/session/runtime/SessionTurnFileDiff.d.ts.map +1 -0
  256. package/bin/session/runtime/SessionTurnFileDiff.js +71 -0
  257. package/bin/session/runtime/SessionTurnFileDiff.js.map +1 -0
  258. package/bin/{workspace/store → session/storage}/LocalSessionAttachmentStore.d.ts +11 -4
  259. package/bin/session/storage/LocalSessionAttachmentStore.d.ts.map +1 -0
  260. package/bin/{workspace/store → session/storage}/LocalSessionAttachmentStore.js +17 -2
  261. package/bin/session/storage/LocalSessionAttachmentStore.js.map +1 -0
  262. package/bin/session/storage/LocalSessionDataStore.d.ts +13 -0
  263. package/bin/session/storage/LocalSessionDataStore.d.ts.map +1 -0
  264. package/bin/session/storage/LocalSessionDataStore.js +28 -0
  265. package/bin/session/storage/LocalSessionDataStore.js.map +1 -0
  266. package/bin/{workspace/store → session/storage}/LocalSessionStore.d.ts +21 -10
  267. package/bin/session/storage/LocalSessionStore.d.ts.map +1 -0
  268. package/bin/session/storage/LocalSessionStore.js +329 -0
  269. package/bin/session/storage/LocalSessionStore.js.map +1 -0
  270. package/bin/session/storage/LocalStorePaths.d.ts +27 -0
  271. package/bin/session/storage/LocalStorePaths.d.ts.map +1 -0
  272. package/bin/session/storage/LocalStorePaths.js +69 -0
  273. package/bin/session/storage/LocalStorePaths.js.map +1 -0
  274. package/bin/session/storage/Metadata.d.ts +12 -9
  275. package/bin/session/storage/Metadata.d.ts.map +1 -1
  276. package/bin/session/storage/Metadata.js +8 -30
  277. package/bin/session/storage/Metadata.js.map +1 -1
  278. package/bin/session/storage/RuntimeSessionPort.d.ts +8 -8
  279. package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
  280. package/bin/session/storage/RuntimeSessionPort.js +6 -6
  281. package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
  282. package/bin/session/storage/SessionStorageCodec.d.ts +59 -0
  283. package/bin/session/storage/SessionStorageCodec.d.ts.map +1 -0
  284. package/bin/session/storage/SessionStorageCodec.js +331 -0
  285. package/bin/session/storage/SessionStorageCodec.js.map +1 -0
  286. package/bin/session/storage/SessionStorageSchema.d.ts +11 -0
  287. package/bin/session/storage/SessionStorageSchema.d.ts.map +1 -0
  288. package/bin/session/storage/SessionStorageSchema.js +131 -0
  289. package/bin/session/storage/SessionStorageSchema.js.map +1 -0
  290. package/bin/session/storage/SqliteSessionStorage.d.ts +120 -0
  291. package/bin/session/storage/SqliteSessionStorage.d.ts.map +1 -0
  292. package/bin/session/storage/SqliteSessionStorage.js +581 -0
  293. package/bin/session/storage/SqliteSessionStorage.js.map +1 -0
  294. package/bin/tools/ask/AskQuestionsTool.d.ts.map +1 -1
  295. package/bin/tools/ask/AskQuestionsTool.js +3 -1
  296. package/bin/tools/ask/AskQuestionsTool.js.map +1 -1
  297. package/bin/tools/ask/AskQuestionsToolSchemas.d.ts +1 -1
  298. package/bin/types/action/ActionResult.d.ts +13 -9
  299. package/bin/types/action/ActionResult.d.ts.map +1 -1
  300. package/bin/types/action/ActionResult.js +2 -1
  301. package/bin/types/action/ActionResult.js.map +1 -1
  302. package/bin/types/agent/AgentOptions.d.ts +25 -18
  303. package/bin/types/agent/AgentOptions.d.ts.map +1 -1
  304. package/bin/types/agent/AgentSessionCollection.d.ts +17 -13
  305. package/bin/types/agent/AgentSessionCollection.d.ts.map +1 -1
  306. package/bin/types/agent/AgentStorage.d.ts +4 -2
  307. package/bin/types/agent/AgentStorage.d.ts.map +1 -1
  308. package/bin/types/agent/SessionActor.d.ts +11 -20
  309. package/bin/types/agent/SessionActor.d.ts.map +1 -1
  310. package/bin/types/agent/SessionTypes.d.ts +29 -37
  311. package/bin/types/agent/SessionTypes.d.ts.map +1 -1
  312. package/bin/types/executor/ModelRequest.d.ts +11 -0
  313. package/bin/types/executor/ModelRequest.d.ts.map +1 -0
  314. package/bin/types/executor/ModelRequest.js +7 -0
  315. package/bin/types/executor/ModelRequest.js.map +1 -0
  316. package/bin/types/executor/SessionAssistantOutput.d.ts +16 -5
  317. package/bin/types/executor/SessionAssistantOutput.d.ts.map +1 -1
  318. package/bin/types/executor/SessionToolExecutionContext.d.ts +3 -3
  319. package/bin/types/executor/SessionToolExecutionContext.d.ts.map +1 -1
  320. package/bin/types/executor/SessionTurnContext.d.ts +57 -34
  321. package/bin/types/executor/SessionTurnContext.d.ts.map +1 -1
  322. package/bin/types/group/DispatchStrategy.d.ts +62 -36
  323. package/bin/types/group/DispatchStrategy.d.ts.map +1 -1
  324. package/bin/types/group/DispatchStrategy.js +83 -39
  325. package/bin/types/group/DispatchStrategy.js.map +1 -1
  326. package/bin/types/group/Group.d.ts +8 -8
  327. package/bin/types/group/Group.d.ts.map +1 -1
  328. package/bin/types/group/{GroupDispatchSession.d.ts → GroupDispatch.d.ts} +21 -27
  329. package/bin/types/group/GroupDispatch.d.ts.map +1 -0
  330. package/bin/types/group/GroupDispatch.js +8 -0
  331. package/bin/types/group/GroupDispatch.js.map +1 -0
  332. package/bin/types/group/GroupSession.d.ts +14 -7
  333. package/bin/types/group/GroupSession.d.ts.map +1 -1
  334. package/bin/types/group/GroupSessionStore.d.ts +9 -5
  335. package/bin/types/group/GroupSessionStore.d.ts.map +1 -1
  336. package/bin/types/sdk/AgentSessionAction.d.ts +2 -2
  337. package/bin/types/sdk/AgentSessionAction.d.ts.map +1 -1
  338. package/bin/types/sdk/AgentSessionAction.js +1 -1
  339. package/bin/types/sdk/AgentSessionPrompt.d.ts +16 -6
  340. package/bin/types/sdk/AgentSessionPrompt.d.ts.map +1 -1
  341. package/bin/types/sdk/AgentSessionPrompt.js +7 -3
  342. package/bin/types/sdk/AgentSessionPrompt.js.map +1 -1
  343. package/bin/types/session/AdaptivePartContextPolicy.d.ts +31 -0
  344. package/bin/types/session/AdaptivePartContextPolicy.d.ts.map +1 -0
  345. package/bin/types/session/AdaptivePartContextPolicy.js +7 -0
  346. package/bin/types/session/AdaptivePartContextPolicy.js.map +1 -0
  347. package/bin/types/session/SessionAgentMessageState.d.ts +23 -0
  348. package/bin/types/session/SessionAgentMessageState.d.ts.map +1 -0
  349. package/bin/types/session/SessionAgentMessageState.js +8 -0
  350. package/bin/types/session/SessionAgentMessageState.js.map +1 -0
  351. package/bin/types/session/SessionCommand.d.ts +19 -7
  352. package/bin/types/session/SessionCommand.d.ts.map +1 -1
  353. package/bin/types/session/SessionComposer.d.ts +47 -41
  354. package/bin/types/session/SessionComposer.d.ts.map +1 -1
  355. package/bin/types/session/SessionComposer.js +2 -2
  356. package/bin/types/session/SessionComposition.d.ts +51 -0
  357. package/bin/types/session/SessionComposition.d.ts.map +1 -0
  358. package/bin/types/session/SessionComposition.js +8 -0
  359. package/bin/types/session/SessionComposition.js.map +1 -0
  360. package/bin/types/session/SessionContextPolicy.d.ts +70 -0
  361. package/bin/types/session/SessionContextPolicy.d.ts.map +1 -0
  362. package/bin/types/session/SessionContextPolicy.js +8 -0
  363. package/bin/types/session/SessionContextPolicy.js.map +1 -0
  364. package/bin/types/session/SessionExecution.d.ts +6 -33
  365. package/bin/types/session/SessionExecution.d.ts.map +1 -1
  366. package/bin/types/session/SessionInteractions.d.ts +1 -1
  367. package/bin/types/session/SessionInteractions.d.ts.map +1 -1
  368. package/bin/types/session/SessionLocalState.d.ts +2 -2
  369. package/bin/types/session/SessionLocalState.d.ts.map +1 -1
  370. package/bin/types/session/SessionLoop.d.ts +10 -9
  371. package/bin/types/session/SessionLoop.d.ts.map +1 -1
  372. package/bin/types/session/SessionMessages.d.ts +29 -30
  373. package/bin/types/session/SessionMessages.d.ts.map +1 -1
  374. package/bin/types/session/SessionOptions.d.ts +30 -44
  375. package/bin/types/session/SessionOptions.d.ts.map +1 -1
  376. package/bin/types/session/SessionPort.d.ts +14 -15
  377. package/bin/types/session/SessionPort.d.ts.map +1 -1
  378. package/bin/types/session/SessionPort.js +1 -1
  379. package/bin/types/session/SessionState.d.ts +6 -9
  380. package/bin/types/session/SessionState.d.ts.map +1 -1
  381. package/bin/types/session/SessionSystem.d.ts +16 -2
  382. package/bin/types/session/SessionSystem.d.ts.map +1 -1
  383. package/bin/types/session/SessionTool.d.ts +2 -2
  384. package/bin/types/session/SessionTool.d.ts.map +1 -1
  385. package/bin/types/session/SessionTurnCompletion.d.ts +23 -0
  386. package/bin/types/session/SessionTurnCompletion.d.ts.map +1 -0
  387. package/bin/types/session/SessionTurnCompletion.js +8 -0
  388. package/bin/types/session/SessionTurnCompletion.js.map +1 -0
  389. package/bin/types/session/SessionTurnFileDiff.d.ts +42 -0
  390. package/bin/types/session/SessionTurnFileDiff.d.ts.map +1 -0
  391. package/bin/types/session/SessionTurnFileDiff.js +8 -0
  392. package/bin/types/session/SessionTurnFileDiff.js.map +1 -0
  393. package/bin/types/store/LocalStore.d.ts +10 -14
  394. package/bin/types/store/LocalStore.d.ts.map +1 -1
  395. package/bin/types/store/LocalStore.js +2 -2
  396. package/bin/types/store/SessionAttachmentStore.d.ts +17 -2
  397. package/bin/types/store/SessionAttachmentStore.d.ts.map +1 -1
  398. package/bin/types/store/SessionAttachmentStore.js +2 -1
  399. package/bin/types/store/SessionAttachmentStore.js.map +1 -1
  400. package/bin/types/store/SessionStorage.d.ts +103 -0
  401. package/bin/types/store/SessionStorage.d.ts.map +1 -0
  402. package/bin/types/store/SessionStorage.js +8 -0
  403. package/bin/types/store/SessionStorage.js.map +1 -0
  404. package/bin/types/store/SessionStore.d.ts +11 -8
  405. package/bin/types/store/SessionStore.d.ts.map +1 -1
  406. package/bin/types/tools/ToolActionExecutionContext.d.ts +1 -1
  407. package/bin/types/tools/ToolActionExecutionContext.d.ts.map +1 -1
  408. package/bin/types/tools/ask/AskQuestionsTool.d.ts +1 -1
  409. package/bin/types/tools/ask/AskQuestionsTool.d.ts.map +1 -1
  410. package/bin/utils/logger/Logger.d.ts +12 -21
  411. package/bin/utils/logger/Logger.d.ts.map +1 -1
  412. package/bin/utils/logger/Logger.js +21 -39
  413. package/bin/utils/logger/Logger.js.map +1 -1
  414. package/package.json +7 -24
  415. package/scripts/ModelClientMock.mjs +11 -0
  416. package/scripts/core-engine-context-compaction.test.mjs +160 -220
  417. package/scripts/core-engine-model-stream.test.mjs +94 -4
  418. package/scripts/executor-failure-result.test.mjs +37 -22
  419. package/scripts/logger-isolation.test.mjs +17 -2
  420. package/scripts/public-api-naming.test.mjs +9 -15
  421. package/scripts/session-agent-message-part-order.test.mjs +63 -0
  422. package/scripts/session-initialization.test.mjs +141 -0
  423. package/scripts/session-message-timeline.test.mjs +5 -6
  424. package/scripts/session-messages-error-part.test.mjs +175 -0
  425. package/scripts/session-messages-error.test.mjs +47 -6
  426. package/scripts/session-prompt-idempotency.test.mjs +91 -0
  427. package/scripts/session-queue.test.mjs +13 -12
  428. package/scripts/session-storage-sqlite.test.mjs +209 -0
  429. package/scripts/session-turn-context.test.mjs +90 -42
  430. package/src/agent/Agent.ts +212 -91
  431. package/src/agent/AgentInstructions.ts +3 -3
  432. package/src/agent/AgentMemoryStorage.ts +208 -0
  433. package/src/agent/AgentSessions.ts +164 -88
  434. package/src/executor/Executor.ts +56 -177
  435. package/src/executor/README.md +19 -16
  436. package/src/executor/composer/system/default/SystemPromptAssets.ts +0 -6
  437. package/src/executor/composer/system/default/assets/core.prompt.ts +1 -1
  438. package/src/executor/composer/system/default/assets/core.prompt.ts.txt +8 -8
  439. package/src/executor/core-engine/CoreEngineContextCompaction.ts +3 -135
  440. package/src/executor/core-engine/CoreEngineError.ts +1 -1
  441. package/src/executor/core-engine/CoreEngineRunner.ts +93 -334
  442. package/src/executor/core-engine/CoreEngineSignals.ts +10 -10
  443. package/src/executor/messages/SessionAttachmentMapper.ts +4 -4
  444. package/src/executor/messages/SessionMessageLog.ts +3 -3
  445. package/src/executor/messages/SessionModelMessages.ts +87 -99
  446. package/src/executor/model/ModelGenerate.ts +59 -21
  447. package/src/executor/model/ModelRequestRunner.ts +107 -0
  448. package/src/executor/model/ModelStepRunner.ts +28 -60
  449. package/src/executor/model/ModelStreamConsumer.ts +76 -0
  450. package/src/executor/model/ModelStreamFailure.ts +28 -0
  451. package/src/executor/services/ExecutorRecoveryPolicy.ts +34 -127
  452. package/src/executor/types/SessionHistoryMeta.ts +6 -8
  453. package/src/group/Group.ts +60 -5
  454. package/src/group/GroupDispatchRuntime.ts +233 -0
  455. package/src/group/GroupSession.ts +168 -93
  456. package/src/group/GroupSessions.ts +12 -11
  457. package/src/group/index.ts +4 -2
  458. package/src/{workspace/store → group/storage}/LocalGroupSessionDataStore.ts +99 -8
  459. package/src/{workspace/store → group/storage}/LocalGroupSessionStore.ts +2 -2
  460. package/src/index.ts +84 -208
  461. package/src/session/DefaultSessionComposer.ts +77 -32
  462. package/src/session/Session.ts +167 -529
  463. package/src/session/SessionComposition.ts +370 -0
  464. package/src/session/SessionHookPoints.ts +17 -0
  465. package/src/session/SessionHooks.ts +85 -0
  466. package/src/session/SessionLoop.ts +289 -226
  467. package/src/session/SessionMessages.ts +380 -642
  468. package/src/session/SessionQueue.ts +3 -2
  469. package/src/session/SessionState.ts +71 -110
  470. package/src/session/SessionSystem.ts +53 -3
  471. package/src/session/SessionTitle.ts +55 -42
  472. package/src/session/browse/Browse.ts +188 -462
  473. package/src/session/browse/SessionMessageTimeline.ts +64 -39
  474. package/src/session/composer/policies/AdaptivePartContextPolicy.ts +307 -0
  475. package/src/session/composer/policies/FullHistoryContextPolicy.ts +36 -0
  476. package/src/session/composer/policies/SessionSummaryPrompts.ts +42 -0
  477. package/src/session/control/SessionInteractions.ts +1 -1
  478. package/src/session/execution/SessionAssistantOutputAdapter.ts +25 -11
  479. package/src/session/execution/tools/SessionShellApprovalAdapter.ts +2 -2
  480. package/src/session/index.ts +17 -0
  481. package/src/session/messages/SessionAgentActionPartWriter.ts +54 -0
  482. package/src/session/messages/SessionAgentContent.ts +56 -0
  483. package/src/session/messages/SessionAgentMessageState.ts +378 -0
  484. package/src/session/messages/{SessionAssistantMessageWriter.ts → SessionAgentMessageWriter.ts} +90 -61
  485. package/src/session/messages/SessionForkMessageFiles.ts +79 -0
  486. package/src/session/messages/SessionJsonValue.ts +1 -1
  487. package/src/session/messages/SessionMessageInteractionWriter.ts +23 -27
  488. package/src/session/messages/SessionMessageText.ts +5 -6
  489. package/src/session/messages/SessionTurnFileDiffBuilder.ts +229 -0
  490. package/src/session/messages/SessionTurnFileDiffData.ts +72 -0
  491. package/src/session/messages/SessionUserContext.ts +47 -0
  492. package/src/session/messages/SessionUserMessage.ts +88 -0
  493. package/src/session/preview/SessionMessagePreview.ts +27 -10
  494. package/src/session/runtime/SessionEventHub.ts +1 -1
  495. package/src/session/runtime/SessionModelRequestWarning.ts +29 -0
  496. package/src/session/runtime/SessionTitleTask.ts +3 -3
  497. package/src/session/runtime/SessionTurnCompletion.ts +159 -0
  498. package/src/session/runtime/SessionTurnContext.ts +96 -46
  499. package/src/session/runtime/SessionTurnFileDiff.ts +105 -0
  500. package/src/{workspace/store → session/storage}/LocalSessionAttachmentStore.ts +25 -4
  501. package/src/session/storage/LocalSessionDataStore.ts +41 -0
  502. package/src/session/storage/LocalSessionStore.ts +414 -0
  503. package/src/session/storage/LocalStorePaths.ts +123 -0
  504. package/src/session/storage/Metadata.ts +19 -36
  505. package/src/session/storage/RuntimeSessionPort.ts +11 -11
  506. package/src/session/storage/SessionStorageCodec.ts +465 -0
  507. package/src/session/storage/SessionStorageSchema.ts +132 -0
  508. package/src/session/storage/SqliteSessionStorage.ts +776 -0
  509. package/src/tools/ask/AskQuestionsTool.ts +5 -3
  510. package/src/types/action/ActionResult.ts +16 -11
  511. package/src/types/agent/AgentOptions.ts +27 -19
  512. package/src/types/agent/AgentSessionCollection.ts +19 -9
  513. package/src/types/agent/AgentStorage.ts +3 -1
  514. package/src/types/agent/SessionActor.ts +8 -17
  515. package/src/types/agent/SessionTypes.ts +32 -41
  516. package/src/types/executor/ModelRequest.ts +14 -0
  517. package/src/types/executor/SessionAssistantOutput.ts +15 -4
  518. package/src/types/executor/SessionToolExecutionContext.ts +1 -1
  519. package/src/types/executor/SessionTurnContext.ts +76 -35
  520. package/src/types/group/DispatchStrategy.ts +151 -77
  521. package/src/types/group/Group.ts +6 -6
  522. package/src/types/group/{GroupDispatchSession.ts → GroupDispatch.ts} +20 -25
  523. package/src/types/group/GroupSession.ts +9 -4
  524. package/src/types/group/GroupSessionStore.ts +8 -4
  525. package/src/types/sdk/AgentSessionAction.ts +2 -2
  526. package/src/types/sdk/AgentSessionPrompt.ts +21 -8
  527. package/src/types/session/AdaptivePartContextPolicy.ts +37 -0
  528. package/src/types/session/SessionAgentMessageState.ts +30 -0
  529. package/src/types/session/SessionCommand.ts +21 -7
  530. package/src/types/session/SessionComposer.ts +51 -45
  531. package/src/types/session/SessionComposition.ts +52 -0
  532. package/src/types/session/SessionContextPolicy.ts +77 -0
  533. package/src/types/session/SessionExecution.ts +11 -36
  534. package/src/types/session/SessionInteractions.ts +1 -1
  535. package/src/types/session/SessionLocalState.ts +1 -1
  536. package/src/types/session/SessionLoop.ts +8 -10
  537. package/src/types/session/SessionMessages.ts +31 -31
  538. package/src/types/session/SessionOptions.ts +27 -41
  539. package/src/types/session/SessionPort.ts +13 -13
  540. package/src/types/session/SessionState.ts +5 -8
  541. package/src/types/session/SessionSystem.ts +20 -1
  542. package/src/types/session/SessionTool.ts +2 -2
  543. package/src/types/session/SessionTurnCompletion.ts +24 -0
  544. package/src/types/session/SessionTurnFileDiff.ts +44 -0
  545. package/src/types/store/LocalStore.ts +10 -15
  546. package/src/types/store/SessionAttachmentStore.ts +19 -2
  547. package/src/types/store/SessionStorage.ts +121 -0
  548. package/src/types/store/SessionStore.ts +11 -7
  549. package/src/types/tools/ToolActionExecutionContext.ts +1 -1
  550. package/src/types/tools/ask/AskQuestionsTool.ts +1 -1
  551. package/src/utils/logger/Logger.ts +24 -42
  552. package/tsconfig.json +1 -2
  553. package/tsconfig.tsbuildinfo +1 -1
  554. package/bin/agent/AgentModel.d.ts +0 -28
  555. package/bin/agent/AgentModel.d.ts.map +0 -1
  556. package/bin/agent/AgentModel.js +0 -57
  557. package/bin/agent/AgentModel.js.map +0 -1
  558. package/bin/agent/WorkspaceEntry.d.ts +0 -82
  559. package/bin/agent/WorkspaceEntry.d.ts.map +0 -1
  560. package/bin/agent/WorkspaceEntry.js +0 -246
  561. package/bin/agent/WorkspaceEntry.js.map +0 -1
  562. package/bin/city/host/CityHostRegistry.d.ts +0 -44
  563. package/bin/city/host/CityHostRegistry.d.ts.map +0 -1
  564. package/bin/city/host/CityHostRegistry.js +0 -225
  565. package/bin/city/host/CityHostRegistry.js.map +0 -1
  566. package/bin/city/index.d.ts +0 -22
  567. package/bin/city/index.d.ts.map +0 -1
  568. package/bin/city/index.js +0 -10
  569. package/bin/city/index.js.map +0 -1
  570. package/bin/city/runtime/City.d.ts +0 -99
  571. package/bin/city/runtime/City.d.ts.map +0 -1
  572. package/bin/city/runtime/City.js +0 -376
  573. package/bin/city/runtime/City.js.map +0 -1
  574. package/bin/city/transport/SerializedTransport.d.ts +0 -30
  575. package/bin/city/transport/SerializedTransport.d.ts.map +0 -1
  576. package/bin/city/transport/SerializedTransport.js +0 -57
  577. package/bin/city/transport/SerializedTransport.js.map +0 -1
  578. package/bin/city/transport/http/AgentHTTP.d.ts +0 -66
  579. package/bin/city/transport/http/AgentHTTP.d.ts.map +0 -1
  580. package/bin/city/transport/http/AgentHTTP.js +0 -142
  581. package/bin/city/transport/http/AgentHTTP.js.map +0 -1
  582. package/bin/city/transport/http/CityHTTP.d.ts +0 -44
  583. package/bin/city/transport/http/CityHTTP.d.ts.map +0 -1
  584. package/bin/city/transport/http/CityHTTP.js +0 -171
  585. package/bin/city/transport/http/CityHTTP.js.map +0 -1
  586. package/bin/city/transport/http/NodeHttpAdapter.d.ts +0 -27
  587. package/bin/city/transport/http/NodeHttpAdapter.d.ts.map +0 -1
  588. package/bin/city/transport/http/NodeHttpAdapter.js +0 -57
  589. package/bin/city/transport/http/NodeHttpAdapter.js.map +0 -1
  590. package/bin/city/transport/http/routes/RuntimeRoutes.d.ts +0 -15
  591. package/bin/city/transport/http/routes/RuntimeRoutes.d.ts.map +0 -1
  592. package/bin/city/transport/http/routes/RuntimeRoutes.js +0 -38
  593. package/bin/city/transport/http/routes/RuntimeRoutes.js.map +0 -1
  594. package/bin/city/transport/http/routes/SessionRoutes.d.ts +0 -17
  595. package/bin/city/transport/http/routes/SessionRoutes.d.ts.map +0 -1
  596. package/bin/city/transport/http/routes/SessionRoutes.js +0 -417
  597. package/bin/city/transport/http/routes/SessionRoutes.js.map +0 -1
  598. package/bin/city/transport/rpc/AgentRPC.d.ts +0 -47
  599. package/bin/city/transport/rpc/AgentRPC.d.ts.map +0 -1
  600. package/bin/city/transport/rpc/AgentRPC.js +0 -89
  601. package/bin/city/transport/rpc/AgentRPC.js.map +0 -1
  602. package/bin/city/transport/rpc/CityRPC.d.ts +0 -26
  603. package/bin/city/transport/rpc/CityRPC.d.ts.map +0 -1
  604. package/bin/city/transport/rpc/CityRPC.js +0 -110
  605. package/bin/city/transport/rpc/CityRPC.js.map +0 -1
  606. package/bin/city/transport/rpc/RpcServer.d.ts +0 -30
  607. package/bin/city/transport/rpc/RpcServer.d.ts.map +0 -1
  608. package/bin/city/transport/rpc/RpcServer.js +0 -125
  609. package/bin/city/transport/rpc/RpcServer.js.map +0 -1
  610. package/bin/city/transport/rpc/server/InternalHandlers.d.ts +0 -22
  611. package/bin/city/transport/rpc/server/InternalHandlers.d.ts.map +0 -1
  612. package/bin/city/transport/rpc/server/InternalHandlers.js +0 -196
  613. package/bin/city/transport/rpc/server/InternalHandlers.js.map +0 -1
  614. package/bin/city/transport/rpc/server/RequestDispatcher.d.ts +0 -27
  615. package/bin/city/transport/rpc/server/RequestDispatcher.d.ts.map +0 -1
  616. package/bin/city/transport/rpc/server/RequestDispatcher.js +0 -38
  617. package/bin/city/transport/rpc/server/RequestDispatcher.js.map +0 -1
  618. package/bin/city/transport/rpc/server/SdkSessionHandlers.d.ts +0 -25
  619. package/bin/city/transport/rpc/server/SdkSessionHandlers.d.ts.map +0 -1
  620. package/bin/city/transport/rpc/server/SdkSessionHandlers.js +0 -146
  621. package/bin/city/transport/rpc/server/SdkSessionHandlers.js.map +0 -1
  622. package/bin/city/transport/rpc/server/ServerTypes.d.ts +0 -94
  623. package/bin/city/transport/rpc/server/ServerTypes.d.ts.map +0 -1
  624. package/bin/city/transport/rpc/server/ServerTypes.js +0 -9
  625. package/bin/city/transport/rpc/server/ServerTypes.js.map +0 -1
  626. package/bin/city/transport/session/RemoteSessionConfig.d.ts +0 -15
  627. package/bin/city/transport/session/RemoteSessionConfig.d.ts.map +0 -1
  628. package/bin/city/transport/session/RemoteSessionConfig.js +0 -23
  629. package/bin/city/transport/session/RemoteSessionConfig.js.map +0 -1
  630. package/bin/city/transport/types/AgentHttpBinding.d.ts +0 -24
  631. package/bin/city/transport/types/AgentHttpBinding.d.ts.map +0 -1
  632. package/bin/city/transport/types/AgentHttpBinding.js +0 -5
  633. package/bin/city/transport/types/AgentHttpBinding.js.map +0 -1
  634. package/bin/city/transport/types/AgentHttpRuntime.d.ts +0 -12
  635. package/bin/city/transport/types/AgentHttpRuntime.d.ts.map +0 -1
  636. package/bin/city/transport/types/AgentHttpRuntime.js +0 -7
  637. package/bin/city/transport/types/AgentHttpRuntime.js.map +0 -1
  638. package/bin/city/transport/types/AgentRpcBinding.d.ts +0 -27
  639. package/bin/city/transport/types/AgentRpcBinding.d.ts.map +0 -1
  640. package/bin/city/transport/types/AgentRpcBinding.js +0 -8
  641. package/bin/city/transport/types/AgentRpcBinding.js.map +0 -1
  642. package/bin/city/transport/types/AgentRpcRuntime.d.ts +0 -18
  643. package/bin/city/transport/types/AgentRpcRuntime.d.ts.map +0 -1
  644. package/bin/city/transport/types/AgentRpcRuntime.js +0 -7
  645. package/bin/city/transport/types/AgentRpcRuntime.js.map +0 -1
  646. package/bin/city/transport/types/AgentSessionModelResolver.d.ts +0 -11
  647. package/bin/city/transport/types/AgentSessionModelResolver.d.ts.map +0 -1
  648. package/bin/city/transport/types/AgentSessionModelResolver.js +0 -7
  649. package/bin/city/transport/types/AgentSessionModelResolver.js.map +0 -1
  650. package/bin/city/transport/types/CityHttpRuntime.d.ts +0 -36
  651. package/bin/city/transport/types/CityHttpRuntime.d.ts.map +0 -1
  652. package/bin/city/transport/types/CityHttpRuntime.js +0 -8
  653. package/bin/city/transport/types/CityHttpRuntime.js.map +0 -1
  654. package/bin/city/transport/types/CityRpcRuntime.d.ts +0 -17
  655. package/bin/city/transport/types/CityRpcRuntime.d.ts.map +0 -1
  656. package/bin/city/transport/types/CityRpcRuntime.js +0 -8
  657. package/bin/city/transport/types/CityRpcRuntime.js.map +0 -1
  658. package/bin/city/transport/types/RpcProtocol.d.ts +0 -24
  659. package/bin/city/transport/types/RpcProtocol.d.ts.map +0 -1
  660. package/bin/city/transport/types/RpcProtocol.js +0 -9
  661. package/bin/city/transport/types/RpcProtocol.js.map +0 -1
  662. package/bin/city/types/City.d.ts +0 -84
  663. package/bin/city/types/City.d.ts.map +0 -1
  664. package/bin/city/types/City.js +0 -7
  665. package/bin/city/types/City.js.map +0 -1
  666. package/bin/city/types/PluginHostContext.d.ts +0 -34
  667. package/bin/city/types/PluginHostContext.d.ts.map +0 -1
  668. package/bin/city/types/PluginHostContext.js +0 -11
  669. package/bin/city/types/PluginHostContext.js.map +0 -1
  670. package/bin/city/types/SerializedTransport.d.ts +0 -16
  671. package/bin/city/types/SerializedTransport.d.ts.map +0 -1
  672. package/bin/city/types/SerializedTransport.js +0 -3
  673. package/bin/city/types/SerializedTransport.js.map +0 -1
  674. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.d.ts +0 -45
  675. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.d.ts.map +0 -1
  676. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.js +0 -144
  677. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.js.map +0 -1
  678. package/bin/executor/composer/system/SessionSystemComposer.d.ts +0 -23
  679. package/bin/executor/composer/system/SessionSystemComposer.d.ts.map +0 -1
  680. package/bin/executor/composer/system/SessionSystemComposer.js +0 -9
  681. package/bin/executor/composer/system/SessionSystemComposer.js.map +0 -1
  682. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts +0 -43
  683. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts.map +0 -1
  684. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js +0 -42
  685. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js.map +0 -1
  686. package/bin/executor/composer/system/default/PromptRenderer.d.ts +0 -35
  687. package/bin/executor/composer/system/default/PromptRenderer.d.ts.map +0 -1
  688. package/bin/executor/composer/system/default/PromptRenderer.js +0 -23
  689. package/bin/executor/composer/system/default/PromptRenderer.js.map +0 -1
  690. package/bin/executor/composer/system/default/SystemDomain.d.ts +0 -169
  691. package/bin/executor/composer/system/default/SystemDomain.d.ts.map +0 -1
  692. package/bin/executor/composer/system/default/SystemDomain.js +0 -201
  693. package/bin/executor/composer/system/default/SystemDomain.js.map +0 -1
  694. package/bin/executor/composer/system/default/assets/task.prompt.d.ts +0 -7
  695. package/bin/executor/composer/system/default/assets/task.prompt.d.ts.map +0 -1
  696. package/bin/executor/composer/system/default/assets/task.prompt.js +0 -8
  697. package/bin/executor/composer/system/default/assets/task.prompt.js.map +0 -1
  698. package/bin/executor/composer/system/default/variables/GeoContext.d.ts +0 -14
  699. package/bin/executor/composer/system/default/variables/GeoContext.d.ts.map +0 -1
  700. package/bin/executor/composer/system/default/variables/GeoContext.js +0 -150
  701. package/bin/executor/composer/system/default/variables/GeoContext.js.map +0 -1
  702. package/bin/executor/composer/system/default/variables/PromptTypes.d.ts +0 -36
  703. package/bin/executor/composer/system/default/variables/PromptTypes.d.ts.map +0 -1
  704. package/bin/executor/composer/system/default/variables/PromptTypes.js +0 -9
  705. package/bin/executor/composer/system/default/variables/PromptTypes.js.map +0 -1
  706. package/bin/executor/composer/system/default/variables/VariableReplacer.d.ts +0 -61
  707. package/bin/executor/composer/system/default/variables/VariableReplacer.d.ts.map +0 -1
  708. package/bin/executor/composer/system/default/variables/VariableReplacer.js +0 -93
  709. package/bin/executor/composer/system/default/variables/VariableReplacer.js.map +0 -1
  710. package/bin/executor/core-engine/CoreEngineMessageState.d.ts +0 -63
  711. package/bin/executor/core-engine/CoreEngineMessageState.d.ts.map +0 -1
  712. package/bin/executor/core-engine/CoreEngineMessageState.js +0 -81
  713. package/bin/executor/core-engine/CoreEngineMessageState.js.map +0 -1
  714. package/bin/group/GroupDispatchSession.d.ts +0 -36
  715. package/bin/group/GroupDispatchSession.d.ts.map +0 -1
  716. package/bin/group/GroupDispatchSession.js.map +0 -1
  717. package/bin/internal/AgentRuntime.d.ts +0 -43
  718. package/bin/internal/AgentRuntime.d.ts.map +0 -1
  719. package/bin/internal/AgentRuntime.js +0 -179
  720. package/bin/internal/AgentRuntime.js.map +0 -1
  721. package/bin/internal/GroupRuntime.d.ts +0 -17
  722. package/bin/internal/GroupRuntime.d.ts.map +0 -1
  723. package/bin/internal/GroupRuntime.js +0 -66
  724. package/bin/internal/GroupRuntime.js.map +0 -1
  725. package/bin/internal/index.d.ts +0 -8
  726. package/bin/internal/index.d.ts.map +0 -1
  727. package/bin/internal/index.js +0 -8
  728. package/bin/internal/index.js.map +0 -1
  729. package/bin/plugin/core/ActionScheduleExecutor.d.ts +0 -19
  730. package/bin/plugin/core/ActionScheduleExecutor.d.ts.map +0 -1
  731. package/bin/plugin/core/ActionScheduleExecutor.js +0 -58
  732. package/bin/plugin/core/ActionScheduleExecutor.js.map +0 -1
  733. package/bin/plugin/core/ActionScheduleRuntime.d.ts +0 -25
  734. package/bin/plugin/core/ActionScheduleRuntime.d.ts.map +0 -1
  735. package/bin/plugin/core/ActionScheduleRuntime.js +0 -62
  736. package/bin/plugin/core/ActionScheduleRuntime.js.map +0 -1
  737. package/bin/plugin/core/ActionScheduleStore.d.ts +0 -97
  738. package/bin/plugin/core/ActionScheduleStore.d.ts.map +0 -1
  739. package/bin/plugin/core/ActionScheduleStore.js +0 -313
  740. package/bin/plugin/core/ActionScheduleStore.js.map +0 -1
  741. package/bin/plugin/core/ActionScheduleTime.d.ts +0 -32
  742. package/bin/plugin/core/ActionScheduleTime.d.ts.map +0 -1
  743. package/bin/plugin/core/ActionScheduleTime.js +0 -108
  744. package/bin/plugin/core/ActionScheduleTime.js.map +0 -1
  745. package/bin/plugin/core/BasePlugin.d.ts +0 -59
  746. package/bin/plugin/core/BasePlugin.d.ts.map +0 -1
  747. package/bin/plugin/core/BasePlugin.js +0 -40
  748. package/bin/plugin/core/BasePlugin.js.map +0 -1
  749. package/bin/plugin/core/HookRegistry.d.ts +0 -67
  750. package/bin/plugin/core/HookRegistry.d.ts.map +0 -1
  751. package/bin/plugin/core/HookRegistry.js +0 -220
  752. package/bin/plugin/core/HookRegistry.js.map +0 -1
  753. package/bin/plugin/core/PluginActionExecution.d.ts +0 -33
  754. package/bin/plugin/core/PluginActionExecution.d.ts.map +0 -1
  755. package/bin/plugin/core/PluginActionExecution.js +0 -168
  756. package/bin/plugin/core/PluginActionExecution.js.map +0 -1
  757. package/bin/plugin/core/PluginActionFactory.d.ts +0 -93
  758. package/bin/plugin/core/PluginActionFactory.d.ts.map +0 -1
  759. package/bin/plugin/core/PluginActionFactory.js +0 -56
  760. package/bin/plugin/core/PluginActionFactory.js.map +0 -1
  761. package/bin/plugin/core/PluginCatalog.d.ts +0 -57
  762. package/bin/plugin/core/PluginCatalog.d.ts.map +0 -1
  763. package/bin/plugin/core/PluginCatalog.js +0 -117
  764. package/bin/plugin/core/PluginCatalog.js.map +0 -1
  765. package/bin/plugin/core/PluginContext.d.ts +0 -42
  766. package/bin/plugin/core/PluginContext.d.ts.map +0 -1
  767. package/bin/plugin/core/PluginContext.js +0 -35
  768. package/bin/plugin/core/PluginContext.js.map +0 -1
  769. package/bin/plugin/core/PluginHttpRoutes.d.ts +0 -24
  770. package/bin/plugin/core/PluginHttpRoutes.d.ts.map +0 -1
  771. package/bin/plugin/core/PluginHttpRoutes.js +0 -35
  772. package/bin/plugin/core/PluginHttpRoutes.js.map +0 -1
  773. package/bin/plugin/core/PluginRegistry.d.ts +0 -207
  774. package/bin/plugin/core/PluginRegistry.d.ts.map +0 -1
  775. package/bin/plugin/core/PluginRegistry.js +0 -675
  776. package/bin/plugin/core/PluginRegistry.js.map +0 -1
  777. package/bin/plugin/core/PluginStateController.d.ts +0 -16
  778. package/bin/plugin/core/PluginStateController.d.ts.map +0 -1
  779. package/bin/plugin/core/PluginStateController.js +0 -14
  780. package/bin/plugin/core/PluginStateController.js.map +0 -1
  781. package/bin/plugin/tool/PluginToolRuntime.d.ts +0 -15
  782. package/bin/plugin/tool/PluginToolRuntime.d.ts.map +0 -1
  783. package/bin/plugin/tool/PluginToolRuntime.js +0 -108
  784. package/bin/plugin/tool/PluginToolRuntime.js.map +0 -1
  785. package/bin/plugin/tool/PluginToolSchemas.d.ts +0 -36
  786. package/bin/plugin/tool/PluginToolSchemas.d.ts.map +0 -1
  787. package/bin/plugin/tool/PluginToolSchemas.js +0 -42
  788. package/bin/plugin/tool/PluginToolSchemas.js.map +0 -1
  789. package/bin/plugin/tool/PluginTools.d.ts +0 -22
  790. package/bin/plugin/tool/PluginTools.d.ts.map +0 -1
  791. package/bin/plugin/tool/PluginTools.js +0 -61
  792. package/bin/plugin/tool/PluginTools.js.map +0 -1
  793. package/bin/plugin/types/ActionSchedule.d.ts +0 -91
  794. package/bin/plugin/types/ActionSchedule.d.ts.map +0 -1
  795. package/bin/plugin/types/ActionSchedule.js +0 -10
  796. package/bin/plugin/types/ActionSchedule.js.map +0 -1
  797. package/bin/plugin/types/PluginApi.d.ts +0 -79
  798. package/bin/plugin/types/PluginApi.d.ts.map +0 -1
  799. package/bin/plugin/types/PluginApi.js +0 -9
  800. package/bin/plugin/types/PluginApi.js.map +0 -1
  801. package/bin/remote/RemoteAgent.d.ts +0 -36
  802. package/bin/remote/RemoteAgent.d.ts.map +0 -1
  803. package/bin/remote/RemoteAgent.js +0 -97
  804. package/bin/remote/RemoteAgent.js.map +0 -1
  805. package/bin/remote/RemoteSession.d.ts +0 -67
  806. package/bin/remote/RemoteSession.d.ts.map +0 -1
  807. package/bin/remote/RemoteSession.js +0 -275
  808. package/bin/remote/RemoteSession.js.map +0 -1
  809. package/bin/remote/RemoteTransport.d.ts +0 -80
  810. package/bin/remote/RemoteTransport.d.ts.map +0 -1
  811. package/bin/remote/RemoteTransport.js +0 -9
  812. package/bin/remote/RemoteTransport.js.map +0 -1
  813. package/bin/remote/TransportFactory.d.ts +0 -13
  814. package/bin/remote/TransportFactory.d.ts.map +0 -1
  815. package/bin/remote/TransportFactory.js +0 -22
  816. package/bin/remote/TransportFactory.js.map +0 -1
  817. package/bin/remote/transports/HttpRemoteAgentTransport.d.ts +0 -52
  818. package/bin/remote/transports/HttpRemoteAgentTransport.d.ts.map +0 -1
  819. package/bin/remote/transports/HttpRemoteAgentTransport.js +0 -399
  820. package/bin/remote/transports/HttpRemoteAgentTransport.js.map +0 -1
  821. package/bin/remote/transports/RpcClient.d.ts +0 -168
  822. package/bin/remote/transports/RpcClient.d.ts.map +0 -1
  823. package/bin/remote/transports/RpcClient.js +0 -484
  824. package/bin/remote/transports/RpcClient.js.map +0 -1
  825. package/bin/remote/transports/RpcRemoteAgentTransport.d.ts +0 -51
  826. package/bin/remote/transports/RpcRemoteAgentTransport.d.ts.map +0 -1
  827. package/bin/remote/transports/RpcRemoteAgentTransport.js +0 -102
  828. package/bin/remote/transports/RpcRemoteAgentTransport.js.map +0 -1
  829. package/bin/session/SessionCommand.d.ts +0 -24
  830. package/bin/session/SessionCommand.d.ts.map +0 -1
  831. package/bin/session/SessionCommand.js +0 -35
  832. package/bin/session/SessionCommand.js.map +0 -1
  833. package/bin/session/messages/SessionAssistantMessageWriter.d.ts.map +0 -1
  834. package/bin/session/messages/SessionAssistantMessageWriter.js.map +0 -1
  835. package/bin/session/messages/SessionMessageCompaction.d.ts +0 -26
  836. package/bin/session/messages/SessionMessageCompaction.d.ts.map +0 -1
  837. package/bin/session/messages/SessionMessageCompaction.js +0 -118
  838. package/bin/session/messages/SessionMessageCompaction.js.map +0 -1
  839. package/bin/session/runtime/SessionCompactOperation.d.ts +0 -29
  840. package/bin/session/runtime/SessionCompactOperation.d.ts.map +0 -1
  841. package/bin/session/runtime/SessionCompactOperation.js +0 -66
  842. package/bin/session/runtime/SessionCompactOperation.js.map +0 -1
  843. package/bin/session/runtime/SessionHistoryCompaction.d.ts +0 -22
  844. package/bin/session/runtime/SessionHistoryCompaction.d.ts.map +0 -1
  845. package/bin/session/runtime/SessionHistoryCompaction.js +0 -31
  846. package/bin/session/runtime/SessionHistoryCompaction.js.map +0 -1
  847. package/bin/types/agent/RemoteAgentOptions.d.ts +0 -28
  848. package/bin/types/agent/RemoteAgentOptions.d.ts.map +0 -1
  849. package/bin/types/agent/RemoteAgentOptions.js +0 -9
  850. package/bin/types/agent/RemoteAgentOptions.js.map +0 -1
  851. package/bin/types/agent/RemoteAgentPluginAction.d.ts +0 -46
  852. package/bin/types/agent/RemoteAgentPluginAction.d.ts.map +0 -1
  853. package/bin/types/agent/RemoteAgentPluginAction.js +0 -9
  854. package/bin/types/agent/RemoteAgentPluginAction.js.map +0 -1
  855. package/bin/types/agent/WorkspaceEntryOptions.d.ts +0 -16
  856. package/bin/types/agent/WorkspaceEntryOptions.d.ts.map +0 -1
  857. package/bin/types/agent/WorkspaceEntryOptions.js +0 -8
  858. package/bin/types/agent/WorkspaceEntryOptions.js.map +0 -1
  859. package/bin/types/common/Json.d.ts +0 -32
  860. package/bin/types/common/Json.d.ts.map +0 -1
  861. package/bin/types/common/Json.js +0 -9
  862. package/bin/types/common/Json.js.map +0 -1
  863. package/bin/types/common/Template.d.ts +0 -9
  864. package/bin/types/common/Template.d.ts.map +0 -1
  865. package/bin/types/common/Template.js +0 -9
  866. package/bin/types/common/Template.js.map +0 -1
  867. package/bin/types/group/GroupDispatchSession.d.ts.map +0 -1
  868. package/bin/types/group/GroupDispatchSession.js +0 -8
  869. package/bin/types/group/GroupDispatchSession.js.map +0 -1
  870. package/bin/types/plugin/AgentPluginContext.d.ts +0 -25
  871. package/bin/types/plugin/AgentPluginContext.d.ts.map +0 -1
  872. package/bin/types/plugin/AgentPluginContext.js +0 -10
  873. package/bin/types/plugin/AgentPluginContext.js.map +0 -1
  874. package/bin/types/plugin/PluginAction.d.ts +0 -161
  875. package/bin/types/plugin/PluginAction.d.ts.map +0 -1
  876. package/bin/types/plugin/PluginAction.js +0 -9
  877. package/bin/types/plugin/PluginAction.js.map +0 -1
  878. package/bin/types/plugin/PluginActionExecution.d.ts +0 -31
  879. package/bin/types/plugin/PluginActionExecution.d.ts.map +0 -1
  880. package/bin/types/plugin/PluginActionExecution.js +0 -10
  881. package/bin/types/plugin/PluginActionExecution.js.map +0 -1
  882. package/bin/types/plugin/PluginCommand.d.ts +0 -14
  883. package/bin/types/plugin/PluginCommand.d.ts.map +0 -1
  884. package/bin/types/plugin/PluginCommand.js +0 -7
  885. package/bin/types/plugin/PluginCommand.js.map +0 -1
  886. package/bin/types/plugin/PluginContext.d.ts +0 -45
  887. package/bin/types/plugin/PluginContext.d.ts.map +0 -1
  888. package/bin/types/plugin/PluginContext.js +0 -9
  889. package/bin/types/plugin/PluginContext.js.map +0 -1
  890. package/bin/types/plugin/PluginDefinition.d.ts +0 -44
  891. package/bin/types/plugin/PluginDefinition.d.ts.map +0 -1
  892. package/bin/types/plugin/PluginDefinition.js +0 -9
  893. package/bin/types/plugin/PluginDefinition.js.map +0 -1
  894. package/bin/types/plugin/PluginExecutionContext.d.ts +0 -23
  895. package/bin/types/plugin/PluginExecutionContext.d.ts.map +0 -1
  896. package/bin/types/plugin/PluginExecutionContext.js +0 -8
  897. package/bin/types/plugin/PluginExecutionContext.js.map +0 -1
  898. package/bin/types/plugin/PluginHttp.d.ts +0 -34
  899. package/bin/types/plugin/PluginHttp.d.ts.map +0 -1
  900. package/bin/types/plugin/PluginHttp.js +0 -9
  901. package/bin/types/plugin/PluginHttp.js.map +0 -1
  902. package/bin/types/plugin/PluginNotification.d.ts +0 -31
  903. package/bin/types/plugin/PluginNotification.d.ts.map +0 -1
  904. package/bin/types/plugin/PluginNotification.js +0 -8
  905. package/bin/types/plugin/PluginNotification.js.map +0 -1
  906. package/bin/types/plugin/PluginRegistry.d.ts +0 -21
  907. package/bin/types/plugin/PluginRegistry.d.ts.map +0 -1
  908. package/bin/types/plugin/PluginRegistry.js +0 -9
  909. package/bin/types/plugin/PluginRegistry.js.map +0 -1
  910. package/bin/types/plugin/PluginRuntime.d.ts +0 -267
  911. package/bin/types/plugin/PluginRuntime.d.ts.map +0 -1
  912. package/bin/types/plugin/PluginRuntime.js +0 -9
  913. package/bin/types/plugin/PluginRuntime.js.map +0 -1
  914. package/bin/types/plugin/PluginServices.d.ts +0 -10
  915. package/bin/types/plugin/PluginServices.d.ts.map +0 -1
  916. package/bin/types/plugin/PluginServices.js +0 -3
  917. package/bin/types/plugin/PluginServices.js.map +0 -1
  918. package/bin/types/plugin/PluginState.d.ts +0 -62
  919. package/bin/types/plugin/PluginState.d.ts.map +0 -1
  920. package/bin/types/plugin/PluginState.js +0 -10
  921. package/bin/types/plugin/PluginState.js.map +0 -1
  922. package/bin/types/plugin/PluginTool.d.ts +0 -92
  923. package/bin/types/plugin/PluginTool.d.ts.map +0 -1
  924. package/bin/types/plugin/PluginTool.js +0 -9
  925. package/bin/types/plugin/PluginTool.js.map +0 -1
  926. package/bin/types/rpc/RpcProtocol.d.ts +0 -417
  927. package/bin/types/rpc/RpcProtocol.d.ts.map +0 -1
  928. package/bin/types/rpc/RpcProtocol.js +0 -10
  929. package/bin/types/rpc/RpcProtocol.js.map +0 -1
  930. package/bin/types/sdk/AgentSessionCompact.d.ts +0 -31
  931. package/bin/types/sdk/AgentSessionCompact.d.ts.map +0 -1
  932. package/bin/types/sdk/AgentSessionCompact.js +0 -8
  933. package/bin/types/sdk/AgentSessionCompact.js.map +0 -1
  934. package/bin/types/session/SessionAction.d.ts +0 -39
  935. package/bin/types/session/SessionAction.d.ts.map +0 -1
  936. package/bin/types/session/SessionAction.js +0 -8
  937. package/bin/types/session/SessionAction.js.map +0 -1
  938. package/bin/types/session/SessionContent.d.ts +0 -41
  939. package/bin/types/session/SessionContent.d.ts.map +0 -1
  940. package/bin/types/session/SessionContent.js +0 -8
  941. package/bin/types/session/SessionContent.js.map +0 -1
  942. package/bin/types/session/SessionInteraction.d.ts +0 -215
  943. package/bin/types/session/SessionInteraction.d.ts.map +0 -1
  944. package/bin/types/session/SessionInteraction.js +0 -15
  945. package/bin/types/session/SessionInteraction.js.map +0 -1
  946. package/bin/types/session/SessionMessage.d.ts +0 -268
  947. package/bin/types/session/SessionMessage.d.ts.map +0 -1
  948. package/bin/types/session/SessionMessage.js +0 -8
  949. package/bin/types/session/SessionMessage.js.map +0 -1
  950. package/bin/types/session/SessionMutation.d.ts +0 -151
  951. package/bin/types/session/SessionMutation.d.ts.map +0 -1
  952. package/bin/types/session/SessionMutation.js +0 -20
  953. package/bin/types/session/SessionMutation.js.map +0 -1
  954. package/bin/types/session/SessionOrigin.d.ts +0 -19
  955. package/bin/types/session/SessionOrigin.d.ts.map +0 -1
  956. package/bin/types/session/SessionOrigin.js +0 -8
  957. package/bin/types/session/SessionOrigin.js.map +0 -1
  958. package/bin/types/session/SessionSegment.d.ts +0 -57
  959. package/bin/types/session/SessionSegment.d.ts.map +0 -1
  960. package/bin/types/session/SessionSegment.js +0 -8
  961. package/bin/types/session/SessionSegment.js.map +0 -1
  962. package/bin/types/store/SessionDataStore.d.ts +0 -85
  963. package/bin/types/store/SessionDataStore.d.ts.map +0 -1
  964. package/bin/types/store/SessionDataStore.js +0 -9
  965. package/bin/types/store/SessionDataStore.js.map +0 -1
  966. package/bin/utils/Template.d.ts +0 -17
  967. package/bin/utils/Template.d.ts.map +0 -1
  968. package/bin/utils/Template.js +0 -24
  969. package/bin/utils/Template.js.map +0 -1
  970. package/bin/workspace/WorkspacePaths.d.ts +0 -16
  971. package/bin/workspace/WorkspacePaths.d.ts.map +0 -1
  972. package/bin/workspace/WorkspacePaths.js +0 -35
  973. package/bin/workspace/WorkspacePaths.js.map +0 -1
  974. package/bin/workspace/store/JsonlSessionMessageStore.d.ts +0 -77
  975. package/bin/workspace/store/JsonlSessionMessageStore.d.ts.map +0 -1
  976. package/bin/workspace/store/JsonlSessionMessageStore.js +0 -419
  977. package/bin/workspace/store/JsonlSessionMessageStore.js.map +0 -1
  978. package/bin/workspace/store/LocalGroupDispatchSessionDataStore.d.ts +0 -28
  979. package/bin/workspace/store/LocalGroupDispatchSessionDataStore.d.ts.map +0 -1
  980. package/bin/workspace/store/LocalGroupDispatchSessionDataStore.js +0 -102
  981. package/bin/workspace/store/LocalGroupDispatchSessionDataStore.js.map +0 -1
  982. package/bin/workspace/store/LocalGroupSessionDataStore.d.ts.map +0 -1
  983. package/bin/workspace/store/LocalGroupSessionDataStore.js.map +0 -1
  984. package/bin/workspace/store/LocalGroupSessionStore.d.ts.map +0 -1
  985. package/bin/workspace/store/LocalGroupSessionStore.js.map +0 -1
  986. package/bin/workspace/store/LocalSessionAttachmentStore.d.ts.map +0 -1
  987. package/bin/workspace/store/LocalSessionAttachmentStore.js.map +0 -1
  988. package/bin/workspace/store/LocalSessionDataStore.d.ts +0 -45
  989. package/bin/workspace/store/LocalSessionDataStore.d.ts.map +0 -1
  990. package/bin/workspace/store/LocalSessionDataStore.js +0 -100
  991. package/bin/workspace/store/LocalSessionDataStore.js.map +0 -1
  992. package/bin/workspace/store/LocalSessionStore.d.ts.map +0 -1
  993. package/bin/workspace/store/LocalSessionStore.js +0 -177
  994. package/bin/workspace/store/LocalSessionStore.js.map +0 -1
  995. package/bin/workspace/store/LocalStorePaths.d.ts +0 -35
  996. package/bin/workspace/store/LocalStorePaths.d.ts.map +0 -1
  997. package/bin/workspace/store/LocalStorePaths.js +0 -62
  998. package/bin/workspace/store/LocalStorePaths.js.map +0 -1
  999. package/bin/workspace/store/SessionMessageStoreFactory.d.ts +0 -12
  1000. package/bin/workspace/store/SessionMessageStoreFactory.d.ts.map +0 -1
  1001. package/bin/workspace/store/SessionMessageStoreFactory.js +0 -13
  1002. package/bin/workspace/store/SessionMessageStoreFactory.js.map +0 -1
  1003. package/city-test/agent-http.test.mjs +0 -326
  1004. package/city-test/city-container.test.mjs +0 -156
  1005. package/city-test/city-host-registry.test.mjs +0 -68
  1006. package/city-test/city-transport.test.mjs +0 -282
  1007. package/city-test/group.test.mjs +0 -990
  1008. package/city-test/session-model.test.mjs +0 -169
  1009. package/city-test/transport-lifecycle.test.mjs +0 -164
  1010. package/scripts/PlatformSandbox.mjs +0 -17
  1011. package/scripts/action-schedule-store.test.mjs +0 -171
  1012. package/scripts/agent-env-shell-sandbox.test.mjs +0 -94
  1013. package/scripts/agent-env.test.mjs +0 -56
  1014. package/scripts/agent-multi-workspace.test.mjs +0 -280
  1015. package/scripts/agent-ready.test.mjs +0 -296
  1016. package/scripts/agent-session-maintenance.test.mjs +0 -47
  1017. package/scripts/agent-store.test.mjs +0 -182
  1018. package/scripts/city-model-tool-loop.test.mjs +0 -95
  1019. package/scripts/file-tools.test.mjs +0 -282
  1020. package/scripts/image-plugin-job.test.mjs +0 -600
  1021. package/scripts/multi-agent-plugin-isolation.test.mjs +0 -170
  1022. package/scripts/plugin-tools.test.mjs +0 -556
  1023. package/scripts/remote-session-reconnect.test.mjs +0 -183
  1024. package/scripts/rpc-url-routing.test.mjs +0 -29
  1025. package/scripts/search-tools.test.mjs +0 -188
  1026. package/scripts/session-ask-question.test.mjs +0 -226
  1027. package/scripts/session-attachments.test.mjs +0 -104
  1028. package/scripts/session-compact-handle.test.mjs +0 -118
  1029. package/scripts/session-compaction-prompts.test.mjs +0 -49
  1030. package/scripts/session-composer.test.mjs +0 -208
  1031. package/scripts/session-config-turn-boundary.test.mjs +0 -921
  1032. package/scripts/session-dynamic-interaction.test.mjs +0 -75
  1033. package/scripts/session-fork.test.mjs +0 -35
  1034. package/scripts/session-list-title.test.mjs +0 -202
  1035. package/scripts/session-messages.test.mjs +0 -490
  1036. package/scripts/session-shell-approval.test.mjs +0 -179
  1037. package/scripts/session-title-event.test.mjs +0 -282
  1038. package/scripts/session-tool-approval.test.mjs +0 -173
  1039. package/scripts/session-turn-failure.test.mjs +0 -363
  1040. package/scripts/workspace.test.mjs +0 -260
  1041. package/src/agent/AgentModel.ts +0 -66
  1042. package/src/agent/WorkspaceEntry.ts +0 -309
  1043. package/src/city/host/CityHostRegistry.ts +0 -260
  1044. package/src/city/index.ts +0 -49
  1045. package/src/city/runtime/City.ts +0 -425
  1046. package/src/city/transport/SerializedTransport.ts +0 -65
  1047. package/src/city/transport/http/AgentHTTP.ts +0 -176
  1048. package/src/city/transport/http/CityHTTP.ts +0 -196
  1049. package/src/city/transport/http/NodeHttpAdapter.ts +0 -75
  1050. package/src/city/transport/http/routes/RuntimeRoutes.ts +0 -51
  1051. package/src/city/transport/http/routes/SessionRoutes.ts +0 -497
  1052. package/src/city/transport/rpc/AgentRPC.ts +0 -111
  1053. package/src/city/transport/rpc/CityRPC.ts +0 -138
  1054. package/src/city/transport/rpc/RpcServer.ts +0 -158
  1055. package/src/city/transport/rpc/server/InternalHandlers.ts +0 -223
  1056. package/src/city/transport/rpc/server/RequestDispatcher.ts +0 -67
  1057. package/src/city/transport/rpc/server/SdkSessionHandlers.ts +0 -166
  1058. package/src/city/transport/rpc/server/ServerTypes.ts +0 -103
  1059. package/src/city/transport/session/RemoteSessionConfig.ts +0 -34
  1060. package/src/city/transport/types/AgentHttpBinding.ts +0 -25
  1061. package/src/city/transport/types/AgentHttpRuntime.ts +0 -13
  1062. package/src/city/transport/types/AgentRpcBinding.ts +0 -28
  1063. package/src/city/transport/types/AgentRpcRuntime.ts +0 -20
  1064. package/src/city/transport/types/AgentSessionModelResolver.ts +0 -13
  1065. package/src/city/transport/types/CityHttpRuntime.ts +0 -45
  1066. package/src/city/transport/types/CityRpcRuntime.ts +0 -27
  1067. package/src/city/transport/types/RpcProtocol.ts +0 -32
  1068. package/src/city/types/City.ts +0 -99
  1069. package/src/city/types/PluginHostContext.ts +0 -44
  1070. package/src/city/types/SerializedTransport.ts +0 -19
  1071. package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.ts +0 -162
  1072. package/src/executor/composer/system/SessionSystemComposer.ts +0 -25
  1073. package/src/executor/composer/system/default/DefaultSessionSystemComposer.ts +0 -76
  1074. package/src/executor/composer/system/default/PromptRenderer.ts +0 -52
  1075. package/src/executor/composer/system/default/SystemDomain.ts +0 -350
  1076. package/src/executor/composer/system/default/assets/task.prompt.ts +0 -9
  1077. package/src/executor/composer/system/default/assets/task.prompt.ts.txt +0 -33
  1078. package/src/executor/composer/system/default/variables/GeoContext.ts +0 -180
  1079. package/src/executor/composer/system/default/variables/PromptTypes.ts +0 -37
  1080. package/src/executor/composer/system/default/variables/VariableReplacer.ts +0 -154
  1081. package/src/executor/core-engine/CoreEngineMessageState.ts +0 -117
  1082. package/src/group/GroupDispatchSession.ts +0 -175
  1083. package/src/internal/AgentRuntime.ts +0 -229
  1084. package/src/internal/GroupRuntime.ts +0 -89
  1085. package/src/internal/index.ts +0 -33
  1086. package/src/plugin/core/ActionScheduleExecutor.ts +0 -68
  1087. package/src/plugin/core/ActionScheduleRuntime.ts +0 -92
  1088. package/src/plugin/core/ActionScheduleStore.ts +0 -414
  1089. package/src/plugin/core/ActionScheduleTime.ts +0 -132
  1090. package/src/plugin/core/BasePlugin.ts +0 -79
  1091. package/src/plugin/core/HookRegistry.ts +0 -297
  1092. package/src/plugin/core/PluginActionExecution.ts +0 -230
  1093. package/src/plugin/core/PluginActionFactory.ts +0 -172
  1094. package/src/plugin/core/PluginCatalog.ts +0 -153
  1095. package/src/plugin/core/PluginContext.ts +0 -71
  1096. package/src/plugin/core/PluginHttpRoutes.ts +0 -47
  1097. package/src/plugin/core/PluginRegistry.ts +0 -888
  1098. package/src/plugin/core/PluginStateController.ts +0 -19
  1099. package/src/plugin/tool/PluginToolRuntime.ts +0 -124
  1100. package/src/plugin/tool/PluginToolSchemas.ts +0 -44
  1101. package/src/plugin/tool/PluginTools.ts +0 -92
  1102. package/src/plugin/types/ActionSchedule.ts +0 -100
  1103. package/src/plugin/types/PluginApi.ts +0 -86
  1104. package/src/remote/RemoteAgent.ts +0 -130
  1105. package/src/remote/RemoteSession.ts +0 -359
  1106. package/src/remote/RemoteTransport.ts +0 -122
  1107. package/src/remote/TransportFactory.ts +0 -29
  1108. package/src/remote/transports/HttpRemoteAgentTransport.ts +0 -582
  1109. package/src/remote/transports/RpcClient.ts +0 -638
  1110. package/src/remote/transports/RpcRemoteAgentTransport.ts +0 -187
  1111. package/src/session/SessionCommand.ts +0 -42
  1112. package/src/session/messages/SessionMessageCompaction.ts +0 -147
  1113. package/src/session/runtime/SessionCompactOperation.ts +0 -93
  1114. package/src/session/runtime/SessionHistoryCompaction.ts +0 -45
  1115. package/src/types/agent/RemoteAgentOptions.ts +0 -29
  1116. package/src/types/agent/RemoteAgentPluginAction.ts +0 -52
  1117. package/src/types/agent/WorkspaceEntryOptions.ts +0 -18
  1118. package/src/types/common/Json.ts +0 -34
  1119. package/src/types/common/Template.ts +0 -9
  1120. package/src/types/plugin/AgentPluginContext.ts +0 -30
  1121. package/src/types/plugin/PluginAction.ts +0 -178
  1122. package/src/types/plugin/PluginActionExecution.ts +0 -36
  1123. package/src/types/plugin/PluginCommand.ts +0 -15
  1124. package/src/types/plugin/PluginContext.ts +0 -59
  1125. package/src/types/plugin/PluginDefinition.ts +0 -54
  1126. package/src/types/plugin/PluginExecutionContext.ts +0 -29
  1127. package/src/types/plugin/PluginHttp.ts +0 -36
  1128. package/src/types/plugin/PluginNotification.ts +0 -38
  1129. package/src/types/plugin/PluginRegistry.ts +0 -25
  1130. package/src/types/plugin/PluginRuntime.ts +0 -292
  1131. package/src/types/plugin/PluginServices.ts +0 -11
  1132. package/src/types/plugin/PluginState.ts +0 -65
  1133. package/src/types/plugin/PluginTool.ts +0 -106
  1134. package/src/types/rpc/RpcProtocol.ts +0 -464
  1135. package/src/types/sdk/AgentSessionCompact.ts +0 -36
  1136. package/src/types/session/SessionAction.ts +0 -41
  1137. package/src/types/session/SessionContent.ts +0 -52
  1138. package/src/types/session/SessionInteraction.ts +0 -268
  1139. package/src/types/session/SessionMessage.ts +0 -306
  1140. package/src/types/session/SessionMutation.ts +0 -183
  1141. package/src/types/session/SessionOrigin.ts +0 -21
  1142. package/src/types/session/SessionSegment.ts +0 -62
  1143. package/src/types/store/SessionDataStore.ts +0 -109
  1144. package/src/utils/Template.ts +0 -28
  1145. package/src/workspace/WorkspacePaths.ts +0 -37
  1146. package/src/workspace/store/JsonlSessionMessageStore.ts +0 -513
  1147. package/src/workspace/store/LocalGroupDispatchSessionDataStore.ts +0 -118
  1148. package/src/workspace/store/LocalSessionDataStore.ts +0 -169
  1149. package/src/workspace/store/LocalSessionStore.ts +0 -243
  1150. package/src/workspace/store/LocalStorePaths.ts +0 -143
  1151. package/src/workspace/store/SessionMessageStoreFactory.ts +0 -18
  1152. /package/bin/{workspace/store → group/storage}/LocalGroupSessionStore.d.ts +0 -0
@@ -6,72 +6,70 @@
6
6
  * 从最新快照严格递增。
7
7
  */
8
8
 
9
- import type {
10
- SessionAssistantResultPart,
11
- SessionPromptPart,
12
- } from "@/types/session/SessionContent.js";
13
9
  import { generate_id } from "@/utils/Id.js";
14
- import { SessionAssistantMessageWriter } from "@/session/messages/SessionAssistantMessageWriter.js";
15
- import { SessionMessageInteractionWriter } from "@/session/messages/SessionMessageInteractionWriter.js";
16
- import { to_session_json_value } from "@/session/messages/SessionJsonValue.js";
17
- import type { JsonObject } from "@/types/common/Json.js";
10
+ import { SessionAgentMessageWriter } from "@/session/messages/SessionAgentMessageWriter.js";
11
+ import { SessionAgentMessageState } from "@/session/messages/SessionAgentMessageState.js";
12
+ import { SessionAgentActionPartWriter } from "@/session/messages/SessionAgentActionPartWriter.js";
13
+ import {
14
+ has_assistant_result_content,
15
+ normalize_canonical_session_user_parts,
16
+ normalize_session_user_parts,
17
+ } from "@/session/messages/SessionUserMessage.js";
18
+ import type { JsonObject } from "@downcity/type";
18
19
  import type {
19
20
  ListSessionMessagesInput,
20
- SessionActionMessage,
21
- SessionAssistantInteractionPart,
22
- SessionAssistantMessage,
23
- SessionAssistantMessagePart,
24
- SessionAssistantToolPart,
25
- SessionErrorMessage,
21
+ SessionAgentActionPart,
22
+ SessionAgentErrorPart,
23
+ SessionAgentInteractionPart,
24
+ SessionAgentMessage,
25
+ SessionAgentMessagePart,
26
26
  SessionMessage,
27
27
  SessionMessagePage,
28
28
  SessionUserMessage,
29
29
  SessionUserMessagePart,
30
- } from "@/types/session/SessionMessage.js";
30
+ } from "@downcity/type";
31
31
  import type {
32
32
  SessionMutation,
33
33
  SessionMessageMutation as SessionMessageSnapshotMutation,
34
- } from "@/types/session/SessionMutation.js";
35
- import type {
36
- SessionContextSnapshot,
37
- SessionMessageStorageStats,
38
- SessionSegmentSummary,
39
- } from "@/types/session/SessionSegment.js";
34
+ } from "@downcity/type";
35
+ import type { SessionMessageStorageStats } from "@/types/store/SessionStorage.js";
40
36
  import type { SessionStreamingToolLocation } from "@/types/session/SessionTool.js";
41
37
  import type {
38
+ SessionInteractionCloseInput,
42
39
  SessionInteractionRequest,
43
40
  SessionInteractionResponse,
44
- } from "@/types/session/SessionInteraction.js";
45
- import type { SessionActionEvent } from "@/types/session/SessionAction.js";
41
+ } from "@downcity/type";
42
+ import type { SessionActionEvent } from "@downcity/type";
46
43
  import { persist_user_prompt_file_parts } from "@executor/messages/SessionAttachmentMapper.js";
47
44
  import type {
48
- AppendCompletedAssistantMessageInput,
49
- AppendExternalSessionAssistantMessageInput,
45
+ AppendCompletedAgentMessageInput,
46
+ AppendExternalSessionAgentMessageInput,
50
47
  AppendExternalSessionUserMessageInput,
51
- AppendSessionErrorMessageInput,
48
+ AppendSessionAgentErrorPartInput,
52
49
  AppendSessionPromptMessageInput,
53
50
  AppendSessionUserMessageInput,
54
- OpenSessionActionMessageInput,
55
- OpenSessionAssistantMessageInput,
51
+ OpenSessionAgentActionPartInput,
52
+ OpenSessionAgentMessageInput,
56
53
  SessionMessagesOptions,
57
54
  } from "@/types/session/SessionMessages.js";
58
- import type { SessionMessageStore } from "@/types/store/SessionDataStore.js";
55
+ import type { SessionStorage } from "@/types/store/SessionStorage.js";
59
56
  import type { SessionAttachmentStore } from "@/types/store/SessionAttachmentStore.js";
60
57
 
61
- export { SessionAssistantMessageWriter } from "@/session/messages/SessionAssistantMessageWriter.js";
58
+ export { SessionAgentMessageWriter } from "@/session/messages/SessionAgentMessageWriter.js";
59
+ export { SessionAgentActionPartWriter } from "@/session/messages/SessionAgentActionPartWriter.js";
60
+ export { normalize_session_user_parts } from "@/session/messages/SessionUserMessage.js";
62
61
 
63
62
  /** 唯一 Session Message 写入服务。 */
64
63
  export class SessionMessages {
65
64
  readonly session_id: string;
66
- private readonly store: SessionMessageStore;
65
+ private readonly store: SessionStorage;
67
66
  private readonly attachment_store: SessionAttachmentStore;
68
67
  private readonly publish: SessionMessagesOptions["publish"];
69
68
  private readonly messages_by_id = new Map<string, SessionMessage>();
70
- /** Assistant Message 隔离的完整写事务链。 */
71
- private readonly assistant_write_chains = new Map<string, Promise<void>>();
72
- /** Assistant Message Interaction Part 的原子状态写入器。 */
73
- private readonly interaction_writer: SessionMessageInteractionWriter;
74
- private initialized = false;
69
+ /** Assistant 草稿与 Interaction 的串行状态转换器。 */
70
+ private readonly agent_state: SessionAgentMessageState;
71
+ /** 当前 Message 恢复事务;并发初始化共享同一个 Promise。 */
72
+ private initialize_promise: Promise<void> | null = null;
75
73
 
76
74
  constructor(options: SessionMessagesOptions) {
77
75
  this.session_id = String(options.session_id || "").trim();
@@ -79,34 +77,100 @@ export class SessionMessages {
79
77
  this.attachment_store = options.attachment_store;
80
78
  this.publish = options.publish;
81
79
  if (!this.session_id) throw new Error("SessionMessages requires session_id");
82
- this.interaction_writer = new SessionMessageInteractionWriter({
80
+ this.agent_state = new SessionAgentMessageState({
81
+ session_id: this.session_id,
82
+ store: this.store,
83
83
  list_messages: () => this.messages_by_id.values(),
84
- find_streaming_tool: (tool_call_id) => this.find_streaming_tool(tool_call_id),
85
- enqueue_assistant_write: (message_id, operation) =>
86
- this.enqueue_assistant_write(message_id, operation),
87
- commit_assistant_snapshot: (current, parts) =>
88
- this.commit_assistant_snapshot(current, parts),
84
+ accept_message: (message, publish_mutation) =>
85
+ this.accept_message(message, publish_mutation),
86
+ project_mutation: (mutation, message) =>
87
+ this.accept_mutation(mutation, message),
89
88
  });
90
89
  }
91
90
 
92
91
  /** 恢复已有 Message,并收口进程中断遗留的运行状态。 */
93
92
  async initialize(): Promise<void> {
94
- if (this.initialized) return;
95
- await this.store.initialize();
96
- for (const message of await this.store.list_messages()) {
97
- this.messages_by_id.set(message.message_id, message);
93
+ if (!this.initialize_promise) {
94
+ this.initialize_promise = this.restore_messages();
98
95
  }
99
- this.initialized = true;
100
- const unfinished = [...this.messages_by_id.values()];
101
- for (const message of unfinished) {
102
- if (message.type === "assistant" && message.status === "streaming") {
103
- await this.complete_assistant_message(message.message_id, "stopped");
104
- }
105
- if (message.type === "action" && message.status === "running") {
106
- await this.update_action_message(message.message_id, "failed", {
107
- description: message.description || "Action interrupted before completion.",
108
- });
96
+ const initialize_promise = this.initialize_promise;
97
+ try {
98
+ await initialize_promise;
99
+ } catch (error) {
100
+ if (this.initialize_promise === initialize_promise) {
101
+ this.initialize_promise = null;
109
102
  }
103
+ throw error;
104
+ }
105
+ }
106
+
107
+ /** 只恢复非终态 Message,并由领域层统一收口进程中断状态。 */
108
+ private async restore_messages(): Promise<void> {
109
+ await this.store.initialize();
110
+ const persisted_messages = await this.store.list_recoverable_agent_messages();
111
+ this.messages_by_id.clear();
112
+ for (const message of persisted_messages) {
113
+ this.remember_message(message);
114
+ const updated_at = Date.now();
115
+ const recovered: SessionAgentMessage = {
116
+ ...message,
117
+ state: "done",
118
+ revision: message.revision + 1,
119
+ updated_at,
120
+ parts: [...message.parts.map((part) => {
121
+ if (part.type === "action" && part.state === "running") {
122
+ return {
123
+ ...part,
124
+ state: "failed" as const,
125
+ description: part.description || "Action interrupted before completion.",
126
+ };
127
+ }
128
+ if (part.type === "interaction" && part.status === "pending") {
129
+ return {
130
+ ...part,
131
+ status: "cancelled" as const,
132
+ cancel_reason: "runtime_interrupted" as const,
133
+ resolved_at: updated_at,
134
+ };
135
+ }
136
+ if (
137
+ part.type === "tool" &&
138
+ part.state !== "completed" &&
139
+ part.state !== "failed"
140
+ ) {
141
+ return {
142
+ ...part,
143
+ state: "failed" as const,
144
+ error: "Tool interrupted before completion.",
145
+ };
146
+ }
147
+ if (
148
+ (part.type === "text" || part.type === "reasoning") &&
149
+ part.state === "streaming"
150
+ ) {
151
+ return { ...part, state: "done" as const };
152
+ }
153
+ return part;
154
+ }), {
155
+ part_id: `error:${generate_id()}`,
156
+ sequence: message.parts.reduce(
157
+ (sequence, part) => Math.max(sequence, part.sequence + 1),
158
+ 1,
159
+ ),
160
+ type: "error",
161
+ scope: message.turn_id ? "turn" : "session",
162
+ code: "runtime_interrupted",
163
+ message: "Agent execution was interrupted before completion.",
164
+ recoverable: true,
165
+ }],
166
+ };
167
+ const changed_parts = resolve_changed_agent_parts(message, recovered);
168
+ await this.store.update_message({
169
+ message: recovered,
170
+ expected_revision: message.revision,
171
+ changed_parts,
172
+ });
173
+ this.accept_message(recovered, false);
110
174
  }
111
175
  }
112
176
 
@@ -115,14 +179,15 @@ export class SessionMessages {
115
179
  return this.messages_by_id.get(message_id);
116
180
  }
117
181
 
118
- /** 追加普通 prompt 或 steering User Message。 */
182
+ /** 追加一条 canonical User Message。 */
119
183
  async append_user_message(
120
184
  input: AppendSessionUserMessageInput,
121
185
  ): Promise<SessionUserMessage> {
186
+ const message_id =
187
+ String(input.message_id || "").trim() ||
188
+ `user:${this.session_id}:${generate_id()}`;
122
189
  const message = await this.create_message((sequence, created_at) => ({
123
- message_id:
124
- String(input.message_id || "").trim() ||
125
- `user:${this.session_id}:${generate_id()}`,
190
+ message_id,
126
191
  session_id: this.session_id,
127
192
  turn_id: input.turn_id,
128
193
  sequence,
@@ -130,21 +195,23 @@ export class SessionMessages {
130
195
  visibility: input.visibility || "visible",
131
196
  created_at,
132
197
  updated_at: created_at,
133
- type: "user",
134
- input_type: input.input_type,
135
- parts: structuredClone(input.parts),
198
+ role: "user",
199
+ parts: normalize_canonical_session_user_parts(input.parts).map((part) => ({
200
+ ...part,
201
+ part_id: `${message_id}:part:${String(part.sequence)}`,
202
+ })),
136
203
  }));
137
204
  return message as SessionUserMessage;
138
205
  }
139
206
 
140
207
  /** 创建可持续接收 chunk 的 Assistant Message。 */
141
- async open_assistant_message(
142
- input: OpenSessionAssistantMessageInput,
143
- ): Promise<SessionAssistantMessageWriter> {
208
+ async open_agent_message(
209
+ input: OpenSessionAgentMessageInput,
210
+ ): Promise<SessionAgentMessageWriter> {
144
211
  const message = (await this.create_message((sequence, created_at) => ({
145
212
  message_id:
146
213
  String(input.message_id || "").trim() ||
147
- `assistant:${this.session_id}:${generate_id()}`,
214
+ `agent:${this.session_id}:${generate_id()}`,
148
215
  session_id: this.session_id,
149
216
  turn_id: input.turn_id,
150
217
  sequence,
@@ -152,33 +219,29 @@ export class SessionMessages {
152
219
  visibility: input.visibility || "visible",
153
220
  created_at,
154
221
  updated_at: created_at,
155
- type: "assistant",
156
- kind: input.kind || "normal",
157
- status: "streaming",
222
+ role: "agent",
223
+ state: "streaming",
158
224
  parts: [],
159
- ...(input.summary_through_message_id
160
- ? { summary_through_message_id: input.summary_through_message_id }
161
- : {}),
162
- }), true)) as SessionAssistantMessage;
163
- return new SessionAssistantMessageWriter(this, message.message_id);
225
+ }), true)) as SessionAgentMessage;
226
+ return new SessionAgentMessageWriter(this, message.message_id);
164
227
  }
165
228
 
166
229
  /** 直接写入一条已完成 Assistant Message。 */
167
- async append_completed_assistant_message(
168
- input: AppendCompletedAssistantMessageInput,
169
- ): Promise<SessionAssistantMessage> {
230
+ async append_completed_agent_message(
231
+ input: AppendCompletedAgentMessageInput,
232
+ ): Promise<SessionAgentMessage> {
170
233
  const turn_id = input.turn_id || `external:${this.session_id}:${generate_id()}`;
171
- const writer = await this.open_assistant_message({
234
+ const writer = await this.open_agent_message({
172
235
  turn_id,
173
- kind: input.kind || "normal",
174
236
  visibility: input.visibility || "visible",
175
- ...(input.summary_through_message_id
176
- ? { summary_through_message_id: input.summary_through_message_id }
177
- : {}),
178
237
  });
179
238
  for (const part of input.parts) await writer.upsert_part(part);
180
239
  await writer.complete();
181
- return this.get_message(writer.message_id) as SessionAssistantMessage;
240
+ const message = await this.store.read_message(writer.message_id);
241
+ if (!message || message.role !== "agent") {
242
+ throw new Error(`Completed Agent Message not found: ${writer.message_id}`);
243
+ }
244
+ return message;
182
245
  }
183
246
 
184
247
  /** 把公开 Session API 的 User 输入转换为 canonical Message 并持久化。 */
@@ -193,22 +256,21 @@ export class SessionMessages {
193
256
  if (parts.length === 0) return false;
194
257
  await this.append_user_message({
195
258
  turn_id: `external:${this.session_id}:${Date.now()}`,
196
- input_type: "prompt",
197
259
  parts,
198
260
  });
199
261
  return true;
200
262
  }
201
263
 
202
264
  /** 把公开 Session API 的 Assistant 输入转换为 canonical Message 并持久化。 */
203
- async append_external_assistant_message(
204
- input: AppendExternalSessionAssistantMessageInput,
265
+ async append_external_agent_message(
266
+ input: AppendExternalSessionAgentMessageInput,
205
267
  ): Promise<boolean> {
206
268
  const parts = input.parts || [{
207
269
  type: "text" as const,
208
270
  text: String(input.text || "").trim(),
209
271
  }];
210
272
  if (!has_assistant_result_content(parts)) return false;
211
- const writer = await this.open_assistant_message({
273
+ const writer = await this.open_agent_message({
212
274
  turn_id: `external:${this.session_id}:${Date.now()}`,
213
275
  });
214
276
  await writer.append_result_parts(parts);
@@ -229,38 +291,27 @@ export class SessionMessages {
229
291
  );
230
292
  const canonical = await this.append_user_message({
231
293
  turn_id: input.turn_id,
232
- input_type: input.input_type,
233
294
  parts: normalize_session_user_parts(ui_parts),
295
+ ...(input.message_id ? { message_id: input.message_id } : {}),
234
296
  });
235
297
  return canonical;
236
298
  }
237
299
 
238
- /** 持久化 Executor 在本轮延迟产生的 User Message。 */
239
- async append_deferred_user_messages(
240
- deferred_messages?: SessionUserMessage[],
241
- ): Promise<number> {
242
- const messages = Array.isArray(deferred_messages)
243
- ? deferred_messages
244
- : [];
245
- for (const message of messages) {
246
- await this.append_user_message({
247
- turn_id: message.turn_id || `deferred:${this.session_id}:${Date.now()}`,
248
- input_type: "steer",
249
- parts: structuredClone(message.parts),
250
- });
251
- }
252
- return messages.length;
300
+ /** 读取指定 Turn 最近一条 canonical Agent Message。 */
301
+ async read_latest_agent_message(turn_id: string): Promise<SessionAgentMessage | null> {
302
+ return await this.store.read_latest_agent_message(turn_id);
253
303
  }
254
304
 
255
- /** 按稳定 Action ID 创建或更新 canonical Action Message。 */
305
+ /** 按稳定 Action ID 创建或更新只包含 Action Part 的 Agent Message。 */
256
306
  async persist_action(
257
307
  event: SessionActionEvent,
258
308
  options?: { publish_mutation?: boolean },
259
309
  ): Promise<void> {
260
310
  const publish_mutation = options?.publish_mutation !== false;
261
- const existing = this.get_message(event.action_id);
311
+ const existing = this.get_message(event.action_id) ||
312
+ await this.store.read_message(event.action_id) || undefined;
262
313
  if (!existing) {
263
- const writer = await this.open_action_message({
314
+ const writer = await this.open_action_part({
264
315
  message_id: event.action_id,
265
316
  turn_id: event.turn_id,
266
317
  action_type: event.action_type,
@@ -274,22 +325,23 @@ export class SessionMessages {
274
325
  }
275
326
  return;
276
327
  }
277
- if (existing.type === "action" && event.status !== "running") {
278
- await this.update_action_message(event.action_id, event.status, {
328
+ if (existing.role === "agent" && event.status !== "running") {
329
+ await this.update_action_part(event.action_id, event.status, {
279
330
  title: event.title,
280
331
  description: event.description,
281
332
  }, { publish_mutation });
282
333
  }
283
334
  }
284
335
 
285
- /** 创建 running Action Message。 */
286
- async open_action_message(
287
- input: OpenSessionActionMessageInput,
288
- ): Promise<SessionActionMessageWriter> {
336
+ /** 创建只包含 running Action Part 的 Agent Message。 */
337
+ async open_action_part(
338
+ input: OpenSessionAgentActionPartInput,
339
+ ): Promise<SessionAgentActionPartWriter> {
340
+ const message_id =
341
+ String(input.message_id || "").trim() ||
342
+ `agent-action:${this.session_id}:${generate_id()}`;
289
343
  const message = (await this.create_message((sequence, created_at) => ({
290
- message_id:
291
- String(input.message_id || "").trim() ||
292
- `action:${this.session_id}:${generate_id()}`,
344
+ message_id,
293
345
  session_id: this.session_id,
294
346
  ...(input.turn_id ? { turn_id: input.turn_id } : {}),
295
347
  sequence,
@@ -297,14 +349,21 @@ export class SessionMessages {
297
349
  visibility: "visible",
298
350
  created_at,
299
351
  updated_at: created_at,
300
- type: "action",
301
- action_type: input.action_type,
302
- status: "running",
303
- title: input.title,
304
- ...(input.description ? { description: input.description } : {}),
305
- ...(input.data ? { data: structuredClone(input.data) } : {}),
306
- }), false, input.publish_mutation !== false)) as SessionActionMessage;
307
- return new SessionActionMessageWriter(
352
+ role: "agent",
353
+ state: "streaming",
354
+ parts: [{
355
+ part_id: `action-part:${message_id}`,
356
+ sequence: 1,
357
+ type: "action",
358
+ action_id: message_id,
359
+ action_type: input.action_type,
360
+ state: "running",
361
+ title: input.title,
362
+ ...(input.description ? { description: input.description } : {}),
363
+ ...(input.data ? { data: structuredClone(input.data) } : {}),
364
+ }],
365
+ }), false, input.publish_mutation !== false)) as SessionAgentMessage;
366
+ return new SessionAgentActionPartWriter(
308
367
  this,
309
368
  message.message_id,
310
369
  input.publish_mutation !== false,
@@ -312,37 +371,110 @@ export class SessionMessages {
312
371
  }
313
372
 
314
373
  /** 更新 Action 状态,同时保持 message_id 与 sequence 不变。 */
315
- async update_action_message(
374
+ async update_action_part(
316
375
  message_id: string,
317
376
  status: "running" | "completed" | "failed",
318
377
  changes?: { title?: string; description?: string; data?: JsonObject },
319
378
  options?: { publish_mutation?: boolean },
320
- ): Promise<SessionActionMessage> {
321
- const message = await this.store.append_message((state) => {
322
- const current = require_message(state.messages, message_id, "action");
323
- const created_at = Date.now();
324
- return {
325
- ...current,
326
- status,
327
- ...(changes?.title ? { title: changes.title } : {}),
328
- ...(changes?.description !== undefined
329
- ? { description: changes.description }
330
- : {}),
331
- ...(changes?.data ? { data: structuredClone(changes.data) } : {}),
332
- revision: current.revision + 1,
333
- updated_at: created_at,
334
- } satisfies SessionActionMessage;
379
+ ): Promise<SessionAgentMessage> {
380
+ const current_message = require_message([
381
+ this.get_message(message_id) || await this.store.read_message(message_id),
382
+ ].filter((message): message is SessionMessage => Boolean(message)), message_id, "agent");
383
+ const action = current_message.parts.find(
384
+ (part): part is SessionAgentActionPart => part.type === "action",
385
+ );
386
+ if (!action) throw new Error(`Session Action Part not found: ${message_id}`);
387
+ const next_action: SessionAgentActionPart = {
388
+ ...action,
389
+ state: status,
390
+ ...(changes?.title ? { title: changes.title } : {}),
391
+ ...(changes?.description !== undefined
392
+ ? { description: changes.description }
393
+ : {}),
394
+ ...(changes?.data ? { data: structuredClone(changes.data) } : {}),
395
+ };
396
+ const message: SessionAgentMessage = {
397
+ ...current_message,
398
+ state: status === "running" ? "streaming" : "done",
399
+ parts: current_message.parts.map((part) =>
400
+ part.part_id === action.part_id ? next_action : part),
401
+ revision: current_message.revision + 1,
402
+ updated_at: Date.now(),
403
+ };
404
+ await this.store.update_message({
405
+ message,
406
+ expected_revision: current_message.revision,
407
+ changed_parts: [next_action],
335
408
  });
336
409
  this.accept_message(message, options?.publish_mutation !== false);
337
- return message as SessionActionMessage;
410
+ return message as SessionAgentMessage;
338
411
  }
339
412
 
340
- /** 创建用户可见 Error Message。 */
341
- async append_error_message(
342
- input: AppendSessionErrorMessageInput,
343
- ): Promise<SessionErrorMessage> {
413
+ /**
414
+ * 将 Error Part 追加到当前 Turn 最后一个 Agent Message。
415
+ *
416
+ * 同一错误码已经存在时保持幂等;只有当前 Turn 从未产生 Agent Message 时,才创建
417
+ * 一个仅含 Error 的失败 Message。这样错误与已经产生的 Text、Tool 和 Diff 始终
418
+ * 共享同一 Message,并由 Part sequence 表达真实顺序。
419
+ */
420
+ async append_error_part(
421
+ input: AppendSessionAgentErrorPartInput,
422
+ ): Promise<SessionAgentMessage> {
423
+ await this.ensure_initialized();
424
+ const target = await this.store.read_latest_agent_message(input.turn_id);
425
+ const existing_error = target?.parts.find(
426
+ (part): part is SessionAgentErrorPart =>
427
+ part.type === "error" && part.code === input.code,
428
+ );
429
+ if (target && existing_error) {
430
+ return target;
431
+ }
432
+
433
+ const error_part: SessionAgentErrorPart = {
434
+ part_id: `error:${generate_id()}`,
435
+ sequence: target
436
+ ? target.parts.reduce(
437
+ (sequence, part) => Math.max(sequence, part.sequence + 1),
438
+ 1,
439
+ )
440
+ : 1,
441
+ type: "error",
442
+ scope: input.scope,
443
+ code: input.code,
444
+ message: input.message,
445
+ recoverable: input.recoverable,
446
+ };
447
+
448
+ if (target?.state === "streaming") {
449
+ this.remember_message(target);
450
+ await this.agent_state.commit_parts(target.message_id, [error_part]);
451
+ const updated = await this.store.read_message(target.message_id);
452
+ if (!updated || updated.role !== "agent") {
453
+ throw new Error(`Agent Message not found after Error Part commit: ${target.message_id}`);
454
+ }
455
+ return updated;
456
+ }
457
+
458
+ if (target) {
459
+ const message: SessionAgentMessage = {
460
+ ...target,
461
+ revision: target.revision + 1,
462
+ updated_at: Date.now(),
463
+ parts: [...target.parts, error_part].sort(
464
+ (left, right) => left.sequence - right.sequence,
465
+ ),
466
+ };
467
+ await this.store.update_message({
468
+ message,
469
+ expected_revision: target.revision,
470
+ changed_parts: [error_part],
471
+ });
472
+ this.accept_message(message);
473
+ return message as SessionAgentMessage;
474
+ }
475
+
344
476
  return (await this.create_message((sequence, created_at) => ({
345
- message_id: `error:${this.session_id}:${generate_id()}`,
477
+ message_id: `agent:${this.session_id}:${generate_id()}`,
346
478
  session_id: this.session_id,
347
479
  ...(input.turn_id ? { turn_id: input.turn_id } : {}),
348
480
  sequence,
@@ -350,94 +482,57 @@ export class SessionMessages {
350
482
  visibility: "visible",
351
483
  created_at,
352
484
  updated_at: created_at,
353
- type: "error",
354
- scope: input.scope,
355
- code: input.code,
356
- message: input.message,
357
- recoverable: input.recoverable,
358
- }))) as SessionErrorMessage;
485
+ role: "agent",
486
+ state: "done",
487
+ parts: [error_part],
488
+ }))) as SessionAgentMessage;
359
489
  }
360
490
 
361
- /** 读取 Active 或指定边界之前最近的完整 Segment。 */
491
+ /** Message sequence 返回一页完整 Message 聚合。 */
362
492
  async list_messages(
363
493
  input?: ListSessionMessagesInput,
364
494
  ): Promise<SessionMessagePage> {
365
495
  await this.ensure_initialized();
366
- const requests_segment = input?.before_sequence !== undefined;
367
496
  const before_sequence = input?.before_sequence;
368
497
  if (
369
- requests_segment &&
498
+ before_sequence !== undefined &&
370
499
  (!Number.isInteger(before_sequence) || Number(before_sequence) <= 0)
371
500
  ) {
372
501
  throw new Error("before_sequence must be a positive integer");
373
502
  }
374
- const segment = requests_segment
375
- ? await this.store.read_segment_before(Number(before_sequence))
376
- : null;
377
- const source = requests_segment ? "segment" as const : "active" as const;
378
- const messages = requests_segment
379
- ? segment?.messages || []
380
- : [...this.messages_by_id.values()].sort(compare_message_sequence);
503
+ const limit = Math.min(Math.max(input?.limit ?? 50, 1), 200);
504
+ const page = await this.store.list_message_page({
505
+ ...(before_sequence !== undefined ? { before_sequence } : {}),
506
+ limit: limit + 1,
507
+ include_internal: input?.include_internal === true,
508
+ });
509
+ const has_more = page.length > limit;
510
+ const messages = has_more ? page.slice(1) : page;
381
511
  const start_sequence = messages[0]?.sequence;
382
512
  const end_sequence = messages.at(-1)?.sequence;
383
- const history_boundary = source === "segment"
384
- ? segment?.range.start_sequence
385
- : await this.store.active_before_sequence(messages);
386
- const has_more = history_boundary !== undefined &&
387
- await this.store.has_segment_before(history_boundary);
388
- const stats = await this.store.stats();
389
- const items = messages
390
- .filter((message) => input?.include_internal === true || message.visibility === "visible")
391
- .map((message) => structuredClone(message));
513
+ const stats = await this.store.message_stats();
392
514
  return {
393
- items,
515
+ items: messages.map((message) => structuredClone(message)),
394
516
  total: stats.message_count,
395
- source,
396
517
  ...(start_sequence !== undefined ? { start_sequence } : {}),
397
518
  ...(end_sequence !== undefined ? { end_sequence } : {}),
398
- ...(has_more && history_boundary !== undefined
399
- ? { next_before_sequence: history_boundary }
519
+ ...(has_more && start_sequence !== undefined
520
+ ? { next_before_sequence: start_sequence }
400
521
  : {}),
401
522
  has_more,
402
523
  };
403
524
  }
404
525
 
405
- /** 读取最新累计 Summary 与全部 Active Message,供模型上下文使用。 */
406
- async context_snapshot(): Promise<SessionContextSnapshot> {
407
- await this.ensure_initialized();
408
- return {
409
- summary: await this.store.read_latest_summary(),
410
- messages: [...this.messages_by_id.values()]
411
- .sort(compare_message_sequence)
412
- .map((message) => structuredClone(message)),
413
- };
414
- }
415
-
416
526
  /** 读取全部真实历史,供 Fork 等明确的全量复制操作使用。 */
417
527
  async list_history_messages(): Promise<SessionMessage[]> {
418
528
  await this.ensure_initialized();
419
- return await this.store.list_history_messages();
529
+ return await this.store.list_messages();
420
530
  }
421
531
 
422
532
  /** 读取当前 Session 的存储统计。 */
423
533
  async storage_stats(): Promise<SessionMessageStorageStats> {
424
534
  await this.ensure_initialized();
425
- return await this.store.stats();
426
- }
427
-
428
- /** 把 Active 前缀和累计 Summary 提交为不可变 Segment。 */
429
- async compact_active(input: {
430
- /** 移入 Segment 的最后一条真实 Message sequence。 */
431
- through_sequence: number;
432
- /** 写入 Segment footer 的累计 Summary。 */
433
- summary: SessionSegmentSummary;
434
- }): Promise<void> {
435
- await this.ensure_initialized();
436
- const result = await this.store.compact_active(input);
437
- this.messages_by_id.clear();
438
- for (const message of result.active_messages) {
439
- this.messages_by_id.set(message.message_id, structuredClone(message));
440
- }
535
+ return await this.store.message_stats();
441
536
  }
442
537
 
443
538
  /** 向当前 Session 导入 fork 来源 Message,并重新分配全部身份和顺序。 */
@@ -451,7 +546,7 @@ export class SessionMessages {
451
546
  const message_id = resolve_import_id(
452
547
  message_ids,
453
548
  source.message_id,
454
- source.type,
549
+ source.role,
455
550
  );
456
551
  await this.create_message((sequence, created_at) => ({
457
552
  ...structuredClone(source),
@@ -471,261 +566,73 @@ export class SessionMessages {
471
566
  }
472
567
  }
473
568
 
474
- /** @internal 写入 Assistant 原始文本 delta。 */
475
- async append_assistant_delta(
569
+ /** @internal 只向运行投影追加 Agent 文本 delta。 */
570
+ project_agent_delta(
476
571
  message_id: string,
477
572
  part_id: string,
478
573
  type: "text" | "reasoning",
479
574
  delta: string,
480
- ): Promise<void> {
481
- if (!delta) return;
482
- await this.enqueue_assistant_write(message_id, async () => {
483
- await this.append_assistant_delta_serialized(message_id, part_id, type, delta);
484
- });
575
+ ): void {
576
+ this.agent_state.project_delta(message_id, part_id, type, delta);
485
577
  }
486
578
 
487
- /** Assistant 写队列内追加文本 delta。 */
488
- private async append_assistant_delta_serialized(
579
+ /** @internal 只向运行投影追加 Agent Tool 输入 delta。 */
580
+ project_agent_tool_input_delta(
489
581
  message_id: string,
490
582
  part_id: string,
491
- type: "text" | "reasoning",
583
+ tool_call_id: string,
492
584
  delta: string,
493
- ): Promise<void> {
494
- const current = require_message([...this.messages_by_id.values()], message_id, "assistant");
495
- require_streaming_assistant(current);
496
- const part = current.parts.find((item) => item.part_id === part_id);
497
- if (!part || (part.type !== "text" && part.type !== "reasoning")) {
498
- throw new Error(`Delta target Part does not exist: ${part_id}`);
499
- }
500
- if (part.type !== type) throw new Error(`Delta type changed for Part: ${part_id}`);
501
- const created_at = Date.now();
502
- const message: SessionAssistantMessage = {
503
- ...current,
504
- revision: current.revision + 1,
505
- updated_at: created_at,
506
- parts: current.parts.map((item) =>
507
- item.part_id === part_id && (item.type === "text" || item.type === "reasoning")
508
- ? { ...item, text: item.text + delta }
509
- : item,
510
- ),
511
- };
512
- await this.store.write_assistant_message(message);
513
- this.accept_mutation({
514
- mutation_id: generate_id(),
515
- variant: "delta",
516
- type,
585
+ ): void {
586
+ this.agent_state.project_delta(
517
587
  message_id,
518
- revision: message.revision,
519
- session_id: this.session_id,
520
- turn_id: message.turn_id,
521
- created_at,
522
588
  part_id,
589
+ "tool_input",
523
590
  delta,
524
- }, message);
591
+ tool_call_id,
592
+ );
525
593
  }
526
594
 
527
- /** @internal 写入 Assistant Tool 输入原始 delta。 */
528
- async append_assistant_tool_input_delta(
595
+ /** @internal 只向运行投影写入 Agent 完整 Part。 */
596
+ project_agent_part(
529
597
  message_id: string,
530
- part_id: string,
531
- tool_call_id: string,
532
- delta: string,
533
- ): Promise<void> {
534
- if (!delta) return;
535
- await this.enqueue_assistant_write(message_id, async () => {
536
- const current = require_message(
537
- [...this.messages_by_id.values()],
538
- message_id,
539
- "assistant",
540
- );
541
- require_streaming_assistant(current);
542
- const part = current.parts.find((item) => item.part_id === part_id);
543
- if (!part || part.type !== "tool") {
544
- throw new Error(`Tool input Delta target Part does not exist: ${part_id}`);
545
- }
546
- if (part.tool_call_id !== tool_call_id) {
547
- throw new Error(`Tool input Delta tool_call_id changed for Part: ${part_id}`);
548
- }
549
- if (part.state !== "input-streaming") {
550
- throw new Error(`Tool input Delta cannot update ${part.state} Part: ${part_id}`);
551
- }
552
- const created_at = Date.now();
553
- const message: SessionAssistantMessage = {
554
- ...current,
555
- revision: current.revision + 1,
556
- updated_at: created_at,
557
- parts: current.parts.map((item) =>
558
- item.part_id === part_id && item.type === "tool"
559
- ? { ...item, input_text: `${item.input_text || ""}${delta}` }
560
- : item,
561
- ),
562
- };
563
- await this.store.write_assistant_message(message);
564
- this.accept_mutation({
565
- mutation_id: generate_id(),
566
- variant: "delta",
567
- type: "tool_input",
568
- message_id,
569
- revision: message.revision,
570
- session_id: this.session_id,
571
- turn_id: message.turn_id,
572
- created_at,
573
- part_id,
574
- tool_call_id,
575
- delta,
576
- }, message);
577
- });
598
+ part: SessionAgentMessagePart,
599
+ ): void {
600
+ this.agent_state.project_part(message_id, part);
578
601
  }
579
602
 
580
- /** @internal 写入 Assistant 完整 part。 */
581
- async update_assistant_part(
582
- message_id: string,
583
- part: SessionAssistantMessagePart,
584
- ): Promise<void> {
585
- await this.enqueue_assistant_write(message_id, async () => {
586
- await this.update_assistant_part_serialized(message_id, part);
587
- });
603
+ /** @internal 原子提交当前运行投影。 */
604
+ async checkpoint_agent_message(message_id: string): Promise<void> {
605
+ await this.agent_state.checkpoint(message_id);
588
606
  }
589
607
 
590
- /** Assistant 写队列内提交完整 Part 快照。 */
591
- private async update_assistant_part_serialized(
608
+ /** @internal 原子提交一组非流式 Agent Parts。 */
609
+ async commit_agent_parts(
592
610
  message_id: string,
593
- part: SessionAssistantMessagePart,
611
+ parts: readonly SessionAgentMessagePart[],
594
612
  ): Promise<void> {
595
- const current = require_message([...this.messages_by_id.values()], message_id, "assistant");
596
- require_streaming_assistant(current);
597
- const existing = current.parts.find((item) => item.part_id === part.part_id);
598
- if (existing && existing.sequence !== part.sequence) {
599
- throw new Error(`Assistant Part sequence changed: ${part.part_id}`);
600
- }
601
- const created_at = Date.now();
602
- const next_part = structuredClone(part);
603
- const message: SessionAssistantMessage = {
604
- ...current,
605
- revision: current.revision + 1,
606
- updated_at: created_at,
607
- parts: (existing
608
- ? current.parts.map((item) => item.part_id === part.part_id ? next_part : item)
609
- : [...current.parts, next_part]
610
- ).sort((left, right) => left.sequence - right.sequence),
611
- };
612
- await this.store.write_assistant_message(message);
613
- this.accept_mutation({
614
- mutation_id: generate_id(),
615
- variant: "part",
616
- type: next_part.type,
617
- message_id,
618
- revision: message.revision,
619
- session_id: this.session_id,
620
- turn_id: message.turn_id,
621
- created_at,
622
- part_id: next_part.part_id,
623
- part: next_part,
624
- } as SessionMutation, message);
613
+ await this.agent_state.commit_parts(message_id, parts);
625
614
  }
626
615
 
627
- /** @internal 原子提交当前 Assistant step 的 metadata 快照。 */
628
- async commit_assistant_step(
629
- message_id: string,
630
- parts: SessionAssistantMessagePart[],
631
- ): Promise<void> {
632
- await this.enqueue_assistant_write(message_id, async () => {
633
- const current = require_message([...this.messages_by_id.values()], message_id, "assistant");
634
- require_streaming_assistant(current);
635
- if (
636
- parts.length !== current.parts.length ||
637
- parts.some((part, index) =>
638
- part.part_id !== current.parts[index]?.part_id ||
639
- part.sequence !== current.parts[index]?.sequence
640
- )
641
- ) {
642
- throw new Error(
643
- `Assistant step changed canonical Part identity: ${message_id}`,
644
- );
645
- }
646
- const created_at = Date.now();
647
- const message: SessionAssistantMessage = {
648
- ...current,
649
- revision: current.revision + 1,
650
- updated_at: created_at,
651
- parts: structuredClone(parts),
652
- };
653
- await this.store.write_assistant_message(message);
654
- this.accept_message(message);
655
- });
616
+ /** @internal 丢弃未提交的当前 Step 投影。 */
617
+ async rollback_agent_projection(message_id: string): Promise<void> {
618
+ await this.agent_state.rollback_projection(message_id);
656
619
  }
657
620
 
658
- /** @internal 收口 Assistant Message。 */
659
- async complete_assistant_message(
621
+ /** @internal 原子提交当前 Assistant step 的 metadata 快照。 */
622
+ async commit_agent_step(
660
623
  message_id: string,
661
- status: "completed" | "stopped" | "failed",
662
- error?: string,
624
+ parts: SessionAgentMessagePart[],
663
625
  ): Promise<void> {
664
- await this.enqueue_assistant_write(message_id, async () => {
665
- await this.complete_assistant_message_serialized(message_id, status, error);
666
- });
626
+ await this.agent_state.commit_step(message_id, parts);
667
627
  }
668
628
 
669
- /** Assistant 写队列内关闭草稿并写入 Active。 */
670
- private async complete_assistant_message_serialized(
629
+ /** @internal 收口 Assistant Message。 */
630
+ async complete_agent_message(
671
631
  message_id: string,
672
632
  status: "completed" | "stopped" | "failed",
673
633
  error?: string,
674
634
  ): Promise<void> {
675
- const current = require_message([...this.messages_by_id.values()], message_id, "assistant");
676
- require_streaming_assistant(current);
677
- const created_at = Date.now();
678
- const interrupted_interactions = status === "stopped"
679
- ? current.parts.filter(
680
- (part): part is SessionAssistantInteractionPart =>
681
- part.type === "interaction" && part.status === "pending",
682
- )
683
- : [];
684
- const interrupted_tool_ids = new Set(
685
- interrupted_interactions.flatMap((part) =>
686
- part.request.source.tool_call_id
687
- ? [part.request.source.tool_call_id]
688
- : [],
689
- ),
690
- );
691
- const message: SessionAssistantMessage = {
692
- ...current,
693
- revision: current.revision + 1,
694
- status,
695
- updated_at: created_at,
696
- parts: current.parts.map((part) => {
697
- if (part.type === "text" || part.type === "reasoning") {
698
- return { ...part, state: "done" as const };
699
- }
700
- if (part.type === "interaction" && part.status === "pending") {
701
- return {
702
- ...part,
703
- status: "cancelled" as const,
704
- cancel_reason: "runtime_interrupted" as const,
705
- resolved_at: created_at,
706
- };
707
- }
708
- if (
709
- part.type === "tool" &&
710
- part.state !== "completed" &&
711
- part.state !== "failed"
712
- ) {
713
- return {
714
- ...part,
715
- state: "failed" as const,
716
- error:
717
- status === "stopped" &&
718
- part.state === "waiting-user" &&
719
- interrupted_tool_ids.has(part.tool_call_id)
720
- ? "Interaction cancelled"
721
- : error || "Tool did not complete before Assistant Message closed",
722
- };
723
- }
724
- return part;
725
- }),
726
- };
727
- await this.store.finalize_assistant_message(message);
728
- this.accept_message(message);
635
+ await this.agent_state.complete(message_id, status, error);
729
636
  }
730
637
 
731
638
  private async create_message(
@@ -734,132 +641,51 @@ export class SessionMessages {
734
641
  publish_mutation = true,
735
642
  ): Promise<SessionMessage> {
736
643
  await this.ensure_initialized();
737
- if (draft) {
738
- const message = await this.store.create_assistant_message((state) => {
739
- const candidate = factory(state.message_sequence, Date.now());
740
- if (candidate.type !== "assistant" || candidate.status !== "streaming") {
741
- throw new Error("Draft Message must be a streaming Assistant");
742
- }
743
- return candidate;
744
- });
745
- this.accept_message(message, publish_mutation);
746
- return message;
747
- }
748
- const message = await this.store.append_message((state) =>
749
- factory(state.message_sequence, Date.now()),
750
- );
644
+ const message = await this.store.create_message((state) => {
645
+ const candidate = factory(state.message_sequence, Date.now());
646
+ if (draft && (candidate.role !== "agent" || candidate.state !== "streaming")) {
647
+ throw new Error("Draft Message must be a streaming Agent Message");
648
+ }
649
+ return candidate;
650
+ });
751
651
  this.accept_message(message, publish_mutation);
752
652
  return message;
753
653
  }
754
654
 
755
655
  /** 读取当前流式 Assistant 中的指定 Tool Part。 */
756
656
  find_streaming_tool(tool_call_id: string): SessionStreamingToolLocation | undefined {
757
- for (const message of this.messages_by_id.values()) {
758
- if (message.type !== "assistant" || message.status !== "streaming") continue;
759
- const part = message.parts.find(
760
- (item): item is SessionAssistantToolPart =>
761
- item.type === "tool" && item.tool_call_id === tool_call_id,
762
- );
763
- if (part) return { message_id: message.message_id, part };
764
- }
765
- return undefined;
657
+ return this.agent_state.find_streaming_tool(tool_call_id);
766
658
  }
767
659
 
768
660
  /** 返回当前 Session 中全部等待用户响应的 canonical Interaction。 */
769
- list_pending_interactions(): SessionAssistantInteractionPart[] {
770
- return this.interaction_writer.list_pending();
661
+ list_pending_interactions(): SessionAgentInteractionPart[] {
662
+ return this.agent_state.list_pending_interactions();
771
663
  }
772
664
 
773
665
  /** 原子创建 Interaction,并把关联 Tool 转为 waiting-user。 */
774
666
  async request_interaction(
775
667
  request: SessionInteractionRequest,
776
- ): Promise<SessionAssistantInteractionPart> {
777
- return this.interaction_writer.request(request);
668
+ ): Promise<SessionAgentInteractionPart> {
669
+ return await this.agent_state.request_interaction(request);
778
670
  }
779
671
 
780
672
  /** 原子保存用户响应,并按 Interaction 结果恢复或终止关联 Tool。 */
781
673
  async resolve_interaction(
782
674
  interaction_id: string,
783
675
  response: SessionInteractionResponse,
784
- ): Promise<SessionAssistantInteractionPart> {
785
- return this.interaction_writer.resolve(interaction_id, response);
676
+ ): Promise<SessionAgentInteractionPart> {
677
+ return await this.agent_state.resolve_interaction(
678
+ interaction_id,
679
+ response,
680
+ );
786
681
  }
787
682
 
788
683
  /** 原子结束未响应 Interaction,并把关联 Tool 标记为失败。 */
789
684
  async close_interaction(
790
685
  interaction_id: string,
791
- input:
792
- | { status: "expired" }
793
- | {
794
- status: "cancelled";
795
- reason: "turn_stopped" | "session_disposed" | "runtime_interrupted";
796
- },
797
- ): Promise<SessionAssistantInteractionPart> {
798
- return this.interaction_writer.close(interaction_id, input);
799
- }
800
-
801
- /**
802
- * 串行执行同一 Assistant Message 的完整写事务。
803
- *
804
- * 失败事务不会阻塞后续写入;链尾仅用于排序,真实错误仍返回给调用方。
805
- */
806
- private async enqueue_assistant_write<T>(
807
- message_id: string,
808
- operation: () => Promise<T>,
809
- ): Promise<T> {
810
- const previous = this.assistant_write_chains.get(message_id) || Promise.resolve();
811
- const result = previous.then(operation, operation);
812
- const chain = result.then(() => undefined, () => undefined);
813
- this.assistant_write_chains.set(message_id, chain);
814
- try {
815
- return await result;
816
- } finally {
817
- if (this.assistant_write_chains.get(message_id) === chain) {
818
- this.assistant_write_chains.delete(message_id);
819
- }
820
- }
821
- }
822
-
823
- /** 原子提交包含多个 Part 状态变化的 Assistant 完整快照。 */
824
- private async commit_assistant_snapshot(
825
- current: SessionAssistantMessage,
826
- parts: SessionAssistantMessagePart[],
827
- ): Promise<void> {
828
- const created_at = Date.now();
829
- const message: SessionAssistantMessage = {
830
- ...current,
831
- revision: current.revision + 1,
832
- updated_at: created_at,
833
- parts: structuredClone(parts).sort(
834
- (left, right) => left.sequence - right.sequence,
835
- ),
836
- };
837
- await this.store.write_assistant_message(message);
838
- const current_by_id = new Map(
839
- current.parts.map((part) => [part.part_id, part]),
840
- );
841
- const changed_parts = message.parts.filter((part) => {
842
- const previous = current_by_id.get(part.part_id);
843
- return !previous || JSON.stringify(previous) !== JSON.stringify(part);
844
- });
845
- if (changed_parts.length === 0) {
846
- this.accept_message(message);
847
- return;
848
- }
849
- for (const part of changed_parts) {
850
- this.accept_mutation({
851
- mutation_id: generate_id(),
852
- variant: "part",
853
- type: part.type,
854
- message_id: message.message_id,
855
- revision: message.revision,
856
- session_id: this.session_id,
857
- turn_id: message.turn_id,
858
- created_at,
859
- part_id: part.part_id,
860
- part: structuredClone(part),
861
- } as SessionMutation, message);
862
- }
686
+ input: SessionInteractionCloseInput,
687
+ ): Promise<SessionAgentInteractionPart> {
688
+ return await this.agent_state.close_interaction(interaction_id, input);
863
689
  }
864
690
 
865
691
  private build_message_mutation(
@@ -868,7 +694,7 @@ export class SessionMessages {
868
694
  return {
869
695
  mutation_id: generate_id(),
870
696
  variant: "message",
871
- type: message.type,
697
+ role: message.role,
872
698
  message_id: message.message_id,
873
699
  sequence: message.sequence,
874
700
  revision: message.revision,
@@ -881,132 +707,41 @@ export class SessionMessages {
881
707
 
882
708
  private accept_message(message: SessionMessage, publish_mutation = true): void {
883
709
  if (!publish_mutation) {
884
- this.messages_by_id.set(message.message_id, structuredClone(message));
710
+ this.remember_message(message);
885
711
  return;
886
712
  }
887
713
  this.accept_mutation(this.build_message_mutation(message), message);
888
714
  }
889
715
 
890
716
  private accept_mutation(mutation: SessionMutation, message: SessionMessage): void {
891
- this.messages_by_id.set(message.message_id, structuredClone(message));
717
+ this.remember_message(message);
892
718
  this.publish(mutation);
893
719
  }
894
720
 
895
- private async ensure_initialized(): Promise<void> {
896
- if (!this.initialized) await this.initialize();
897
- }
898
-
899
- }
900
- /** 单个 Action Message 的生命周期 writer。 */
901
- export class SessionActionMessageWriter {
902
- readonly message_id: string;
903
- private readonly messages: SessionMessages;
904
- private readonly publish_mutation: boolean;
905
- private closed = false;
906
-
907
- constructor(
908
- messages: SessionMessages,
909
- message_id: string,
910
- publish_mutation = true,
911
- ) {
912
- this.messages = messages;
913
- this.message_id = message_id;
914
- this.publish_mutation = publish_mutation;
721
+ /** 仅缓存可变的 streaming Agent Message;终态历史始终读取 SQLite。 */
722
+ private remember_message(message: SessionMessage): void {
723
+ this.messages_by_id.delete(message.message_id);
724
+ if (message.role === "agent" && message.state === "streaming") {
725
+ this.messages_by_id.set(message.message_id, structuredClone(message));
726
+ }
915
727
  }
916
728
 
917
- /** Action 更新为 completed。 */
918
- async complete(input?: { title?: string; description?: string; data?: JsonObject }): Promise<void> {
919
- if (this.closed) return;
920
- await this.messages.update_action_message(
921
- this.message_id,
922
- "completed",
923
- input,
924
- { publish_mutation: this.publish_mutation },
925
- );
926
- this.closed = true;
729
+ private async ensure_initialized(): Promise<void> {
730
+ await this.initialize();
927
731
  }
928
732
 
929
- /** 把 Action 更新为 failed。 */
930
- async fail(error: unknown): Promise<void> {
931
- if (this.closed) return;
932
- await this.messages.update_action_message(
933
- this.message_id,
934
- "failed",
935
- {
936
- description: error instanceof Error ? error.message : String(error),
937
- },
938
- { publish_mutation: this.publish_mutation },
939
- );
940
- this.closed = true;
941
- }
942
733
  }
943
734
 
944
- /** Downcity Session User parts 归一为 canonical User parts。 */
945
- export function normalize_session_user_parts(
946
- parts: SessionPromptPart[] | null | undefined,
947
- ): SessionUserMessagePart[] {
948
- if (!Array.isArray(parts)) return [];
949
- return parts.flatMap<SessionUserMessagePart>((part, index) => {
950
- if (part.type === "text") {
951
- return [{
952
- part_id: `user-text:${index + 1}`,
953
- type: "text",
954
- text: part.text,
955
- state: "done",
956
- }];
957
- }
958
- if (part.type === "file") {
959
- return [{
960
- part_id: `user-file:${index + 1}`,
961
- type: "file",
962
- url: part.url,
963
- media_type: part.media_type,
964
- ...(part.filename ? { filename: part.filename } : {}),
965
- }];
966
- }
967
- return [{
968
- part_id: `user-data:${index + 1}`,
969
- type: "data",
970
- data_type: part.data_type,
971
- data: to_session_json_value(part.data),
972
- ...(part.data_id ? { data_id: part.data_id } : {}),
973
- }];
974
- });
975
- }
976
-
977
- /** 判断 Assistant 结果中是否包含可持久化内容。 */
978
- function has_assistant_result_content(
979
- parts: readonly SessionAssistantResultPart[],
980
- ): boolean {
981
- return parts.some((part) => {
982
- if (part.type === "text") return Boolean(part.text.trim());
983
- if (part.type === "file") return Boolean(part.media_type.trim() && part.url.trim());
984
- return Boolean(part.data_type.trim());
985
- });
986
- }
987
-
988
- function require_message<TType extends SessionMessage["type"]>(
735
+ function require_message<TRole extends SessionMessage["role"]>(
989
736
  messages: SessionMessage[],
990
737
  message_id: string,
991
- type: TType,
992
- ): Extract<SessionMessage, { type: TType }> {
738
+ role: TRole,
739
+ ): Extract<SessionMessage, { role: TRole }> {
993
740
  const message = messages.find((item) => item.message_id === message_id);
994
- if (!message || message.type !== type) {
995
- throw new Error(`Session ${type} Message not found: ${message_id}`);
741
+ if (!message || message.role !== role) {
742
+ throw new Error(`Session ${role} Message not found: ${message_id}`);
996
743
  }
997
- return message as Extract<SessionMessage, { type: TType }>;
998
- }
999
-
1000
- function require_streaming_assistant(
1001
- message: SessionMessage,
1002
- ): SessionAssistantMessage {
1003
- if (message.type !== "assistant") {
1004
- throw new Error(`Session Message is not assistant: ${message.message_id}`);
1005
- }
1006
- if (message.status !== "streaming") {
1007
- throw new Error(`Assistant Message is already closed: ${message.message_id}`);
1008
- }
1009
- return message;
744
+ return message as Extract<SessionMessage, { role: TRole }>;
1010
745
  }
1011
746
 
1012
747
  function resolve_import_id(map: Map<string, string>, source_id: string, prefix: string): string {
@@ -1017,12 +752,15 @@ function resolve_import_id(map: Map<string, string>, source_id: string, prefix:
1017
752
  return created;
1018
753
  }
1019
754
 
1020
- /** 从 Action Message ID 提取稳定业务类型。 */
1021
- function infer_action_type(message_id: string): string {
1022
- return String(message_id || "").split(":")[0] || "action";
1023
- }
1024
-
1025
755
  /** 按真实 Message sequence 升序排序。 */
1026
- function compare_message_sequence(left: SessionMessage, right: SessionMessage): number {
1027
- return left.sequence - right.sequence;
756
+ function resolve_changed_agent_parts(
757
+ current: SessionAgentMessage,
758
+ next: SessionAgentMessage,
759
+ ): SessionAgentMessagePart[] {
760
+ const current_by_id = new Map(
761
+ current.parts.map((part) => [part.part_id, JSON.stringify(part)]),
762
+ );
763
+ return next.parts.filter(
764
+ (part) => current_by_id.get(part.part_id) !== JSON.stringify(part),
765
+ );
1028
766
  }