@downcity/agent 1.1.438 → 1.1.445

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 (702) hide show
  1. package/README.md +25 -18
  2. package/bin/agent/Agent.d.ts +44 -20
  3. package/bin/agent/Agent.d.ts.map +1 -1
  4. package/bin/agent/Agent.js +114 -69
  5. package/bin/agent/Agent.js.map +1 -1
  6. package/bin/agent/AgentInstructions.d.ts +18 -4
  7. package/bin/agent/AgentInstructions.d.ts.map +1 -1
  8. package/bin/agent/AgentInstructions.js +33 -14
  9. package/bin/agent/AgentInstructions.js.map +1 -1
  10. package/bin/agent/AgentMemoryStorage.d.ts +1 -1
  11. package/bin/agent/AgentMemoryStorage.d.ts.map +1 -1
  12. package/bin/agent/AgentMemoryStorage.js.map +1 -1
  13. package/bin/agent/AgentSessions.d.ts +29 -16
  14. package/bin/agent/AgentSessions.d.ts.map +1 -1
  15. package/bin/agent/AgentSessions.js +42 -22
  16. package/bin/agent/AgentSessions.js.map +1 -1
  17. package/bin/group/Group.d.ts +13 -12
  18. package/bin/group/Group.d.ts.map +1 -1
  19. package/bin/group/Group.js +24 -23
  20. package/bin/group/Group.js.map +1 -1
  21. package/bin/group/GroupSession.d.ts.map +1 -1
  22. package/bin/group/GroupSession.js +13 -9
  23. package/bin/group/GroupSession.js.map +1 -1
  24. package/bin/group/GroupSessions.d.ts +27 -2
  25. package/bin/group/GroupSessions.d.ts.map +1 -1
  26. package/bin/group/GroupSessions.js +68 -21
  27. package/bin/group/GroupSessions.js.map +1 -1
  28. package/bin/group/storage/LocalGroupSessionDataStore.d.ts +8 -0
  29. package/bin/group/storage/LocalGroupSessionDataStore.d.ts.map +1 -1
  30. package/bin/group/storage/LocalGroupSessionDataStore.js +1 -1
  31. package/bin/group/storage/LocalGroupSessionDataStore.js.map +1 -1
  32. package/bin/group/storage/LocalGroupSessionStore.d.ts +64 -5
  33. package/bin/group/storage/LocalGroupSessionStore.d.ts.map +1 -1
  34. package/bin/group/storage/LocalGroupSessionStore.js +114 -23
  35. package/bin/group/storage/LocalGroupSessionStore.js.map +1 -1
  36. package/bin/index.d.ts +25 -30
  37. package/bin/index.d.ts.map +1 -1
  38. package/bin/index.js +14 -14
  39. package/bin/index.js.map +1 -1
  40. package/bin/{executor/model → model}/ModelGenerate.d.ts +1 -1
  41. package/bin/model/ModelGenerate.d.ts.map +1 -0
  42. package/bin/model/ModelGenerate.js.map +1 -0
  43. package/bin/{executor/model → model}/ModelRequestRunner.d.ts +1 -1
  44. package/bin/model/ModelRequestRunner.d.ts.map +1 -0
  45. package/bin/model/ModelRequestRunner.js.map +1 -0
  46. package/bin/{executor/model → model}/ModelStepRunner.d.ts +6 -7
  47. package/bin/model/ModelStepRunner.d.ts.map +1 -0
  48. package/bin/{executor/model → model}/ModelStepRunner.js +16 -10
  49. package/bin/model/ModelStepRunner.js.map +1 -0
  50. package/bin/model/ModelStreamConsumer.d.ts.map +1 -0
  51. package/bin/model/ModelStreamConsumer.js.map +1 -0
  52. package/bin/model/ModelStreamFailure.d.ts.map +1 -0
  53. package/bin/model/ModelStreamFailure.js.map +1 -0
  54. package/bin/model/ToolInputValidation.d.ts +28 -0
  55. package/bin/model/ToolInputValidation.d.ts.map +1 -0
  56. package/bin/model/ToolInputValidation.js +37 -0
  57. package/bin/model/ToolInputValidation.js.map +1 -0
  58. package/bin/model/messages/ChatMessageMarkup.d.ts.map +1 -0
  59. package/bin/model/messages/ChatMessageMarkup.js.map +1 -0
  60. package/bin/{executor → model}/messages/ChatMessageMarkupTypes.d.ts +1 -1
  61. package/bin/model/messages/ChatMessageMarkupTypes.d.ts.map +1 -0
  62. package/bin/{executor → model}/messages/ChatMessageMarkupTypes.js +1 -1
  63. package/bin/model/messages/ChatMessageMarkupTypes.js.map +1 -0
  64. package/bin/model/messages/SessionAttachmentMapper.d.ts.map +1 -0
  65. package/bin/model/messages/SessionAttachmentMapper.js.map +1 -0
  66. package/bin/model/messages/SessionMessageLog.d.ts.map +1 -0
  67. package/bin/model/messages/SessionMessageLog.js.map +1 -0
  68. package/bin/model/messages/SessionModelMessages.d.ts.map +1 -0
  69. package/bin/{executor → model}/messages/SessionModelMessages.js +0 -1
  70. package/bin/model/messages/SessionModelMessages.js.map +1 -0
  71. package/bin/model/prompts/SystemPromptAssets.d.ts.map +1 -0
  72. package/bin/{executor/composer/system/default → model/prompts}/SystemPromptAssets.js +1 -1
  73. package/bin/model/prompts/SystemPromptAssets.js.map +1 -0
  74. package/bin/model/prompts/assets/core.prompt.d.ts +7 -0
  75. package/bin/model/prompts/assets/core.prompt.d.ts.map +1 -0
  76. package/bin/model/prompts/assets/core.prompt.js +8 -0
  77. package/bin/model/prompts/assets/core.prompt.js.map +1 -0
  78. package/bin/session/Session.d.ts +29 -17
  79. package/bin/session/Session.d.ts.map +1 -1
  80. package/bin/session/Session.js +161 -134
  81. package/bin/session/Session.js.map +1 -1
  82. package/bin/session/input/SessionHookRunner.d.ts +52 -0
  83. package/bin/session/input/SessionHookRunner.d.ts.map +1 -0
  84. package/bin/session/input/SessionHookRunner.js +51 -0
  85. package/bin/session/input/SessionHookRunner.js.map +1 -0
  86. package/bin/session/input/SessionSystem.d.ts +26 -0
  87. package/bin/session/input/SessionSystem.d.ts.map +1 -0
  88. package/bin/session/{SessionSystem.js → input/SessionSystem.js} +27 -23
  89. package/bin/session/input/SessionSystem.js.map +1 -0
  90. package/bin/session/input/StepInput.d.ts +77 -0
  91. package/bin/session/input/StepInput.d.ts.map +1 -0
  92. package/bin/session/input/StepInput.js +429 -0
  93. package/bin/session/input/StepInput.js.map +1 -0
  94. package/bin/session/input/composer/AdaptiveContextCheckpoint.d.ts +33 -0
  95. package/bin/session/input/composer/AdaptiveContextCheckpoint.d.ts.map +1 -0
  96. package/bin/session/input/composer/AdaptiveContextCheckpoint.js +83 -0
  97. package/bin/session/input/composer/AdaptiveContextCheckpoint.js.map +1 -0
  98. package/bin/session/input/composer/AdaptiveContextParts.d.ts +26 -0
  99. package/bin/session/input/composer/AdaptiveContextParts.d.ts.map +1 -0
  100. package/bin/session/input/composer/AdaptiveContextParts.js +124 -0
  101. package/bin/session/input/composer/AdaptiveContextParts.js.map +1 -0
  102. package/bin/session/input/composer/ComposerAssembly.d.ts +21 -0
  103. package/bin/session/input/composer/ComposerAssembly.d.ts.map +1 -0
  104. package/bin/session/input/composer/ComposerAssembly.js +64 -0
  105. package/bin/session/input/composer/ComposerAssembly.js.map +1 -0
  106. package/bin/session/{composer/policies/SessionSummaryPrompts.d.ts → input/composer/ContextSummaryPrompts.d.ts} +5 -3
  107. package/bin/session/input/composer/ContextSummaryPrompts.d.ts.map +1 -0
  108. package/bin/session/{composer/policies/SessionSummaryPrompts.js → input/composer/ContextSummaryPrompts.js} +5 -3
  109. package/bin/session/input/composer/ContextSummaryPrompts.js.map +1 -0
  110. package/bin/session/input/composer/DefaultSessionComposer.d.ts +24 -0
  111. package/bin/session/input/composer/DefaultSessionComposer.d.ts.map +1 -0
  112. package/bin/session/input/composer/DefaultSessionComposer.js +108 -0
  113. package/bin/session/input/composer/DefaultSessionComposer.js.map +1 -0
  114. package/bin/session/input/composer/FullHistorySessionComposer.d.ts +19 -0
  115. package/bin/session/input/composer/FullHistorySessionComposer.d.ts.map +1 -0
  116. package/bin/session/input/composer/FullHistorySessionComposer.js +36 -0
  117. package/bin/session/input/composer/FullHistorySessionComposer.js.map +1 -0
  118. package/bin/session/{SessionLoop.d.ts → loop/SessionLoop.d.ts} +34 -7
  119. package/bin/session/loop/SessionLoop.d.ts.map +1 -0
  120. package/bin/session/{SessionLoop.js → loop/SessionLoop.js} +79 -16
  121. package/bin/session/loop/SessionLoop.js.map +1 -0
  122. package/bin/session/{SessionQueue.d.ts → loop/SessionQueue.d.ts} +9 -1
  123. package/bin/session/loop/SessionQueue.d.ts.map +1 -0
  124. package/bin/session/{SessionQueue.js → loop/SessionQueue.js} +19 -0
  125. package/bin/session/loop/SessionQueue.js.map +1 -0
  126. package/bin/session/{SessionState.d.ts → loop/SessionState.d.ts} +4 -5
  127. package/bin/session/loop/SessionState.d.ts.map +1 -0
  128. package/bin/session/{SessionState.js → loop/SessionState.js} +6 -25
  129. package/bin/session/loop/SessionState.js.map +1 -0
  130. package/bin/session/{SessionTitle.d.ts → loop/SessionTitle.d.ts} +4 -4
  131. package/bin/session/loop/SessionTitle.d.ts.map +1 -0
  132. package/bin/session/{SessionTitle.js → loop/SessionTitle.js} +3 -3
  133. package/bin/session/loop/SessionTitle.js.map +1 -0
  134. package/bin/session/loop/SessionTitleTask.d.ts.map +1 -0
  135. package/bin/session/loop/SessionTitleTask.js.map +1 -0
  136. package/bin/session/{runtime → loop}/SessionTurnCompletion.d.ts +7 -0
  137. package/bin/session/loop/SessionTurnCompletion.d.ts.map +1 -0
  138. package/bin/session/{runtime → loop}/SessionTurnCompletion.js +25 -6
  139. package/bin/session/loop/SessionTurnCompletion.js.map +1 -0
  140. package/bin/session/loop/SessionTurnContext.d.ts +12 -0
  141. package/bin/session/loop/SessionTurnContext.d.ts.map +1 -0
  142. package/bin/session/{runtime → loop}/SessionTurnContext.js +14 -67
  143. package/bin/session/loop/SessionTurnContext.js.map +1 -0
  144. package/bin/session/loop/SessionTurnFileDiff.d.ts.map +1 -0
  145. package/bin/session/{runtime → loop}/SessionTurnFileDiff.js +1 -1
  146. package/bin/session/loop/SessionTurnFileDiff.js.map +1 -0
  147. package/bin/session/{messages → loop}/SessionTurnFileDiffBuilder.d.ts +3 -3
  148. package/bin/session/loop/SessionTurnFileDiffBuilder.d.ts.map +1 -0
  149. package/bin/session/loop/SessionTurnFileDiffBuilder.js.map +1 -0
  150. package/bin/session/messages/ApprovalInteraction.d.ts +30 -0
  151. package/bin/session/messages/ApprovalInteraction.d.ts.map +1 -0
  152. package/bin/session/messages/ApprovalInteraction.js +61 -0
  153. package/bin/session/messages/ApprovalInteraction.js.map +1 -0
  154. package/bin/session/messages/SessionAgentMessageState.d.ts +47 -18
  155. package/bin/session/messages/SessionAgentMessageState.d.ts.map +1 -1
  156. package/bin/session/messages/SessionAgentMessageState.js +224 -86
  157. package/bin/session/messages/SessionAgentMessageState.js.map +1 -1
  158. package/bin/session/messages/SessionAgentMessageWriter.d.ts +15 -4
  159. package/bin/session/messages/SessionAgentMessageWriter.d.ts.map +1 -1
  160. package/bin/session/messages/SessionAgentMessageWriter.js +57 -37
  161. package/bin/session/messages/SessionAgentMessageWriter.js.map +1 -1
  162. package/bin/session/messages/SessionAgentParts.d.ts +14 -0
  163. package/bin/session/messages/SessionAgentParts.d.ts.map +1 -0
  164. package/bin/session/messages/SessionAgentParts.js +20 -0
  165. package/bin/session/messages/SessionAgentParts.js.map +1 -0
  166. package/bin/session/{execution → messages}/SessionAssistantOutputAdapter.d.ts +2 -2
  167. package/bin/session/messages/SessionAssistantOutputAdapter.d.ts.map +1 -0
  168. package/bin/session/messages/SessionAssistantOutputAdapter.js.map +1 -0
  169. package/bin/session/messages/SessionEventHub.d.ts.map +1 -0
  170. package/bin/session/messages/SessionEventHub.js.map +1 -0
  171. package/bin/session/messages/SessionInteractions.d.ts +57 -0
  172. package/bin/session/messages/SessionInteractions.d.ts.map +1 -0
  173. package/bin/session/messages/SessionInteractions.js +178 -0
  174. package/bin/session/messages/SessionInteractions.js.map +1 -0
  175. package/bin/session/messages/SessionJsonValue.d.ts +1 -3
  176. package/bin/session/messages/SessionJsonValue.d.ts.map +1 -1
  177. package/bin/session/messages/SessionJsonValue.js +0 -19
  178. package/bin/session/messages/SessionJsonValue.js.map +1 -1
  179. package/bin/session/messages/SessionMessageCache.d.ts +55 -0
  180. package/bin/session/messages/SessionMessageCache.d.ts.map +1 -0
  181. package/bin/session/messages/SessionMessageCache.js +133 -0
  182. package/bin/session/messages/SessionMessageCache.js.map +1 -0
  183. package/bin/session/messages/SessionMessageState.d.ts +17 -0
  184. package/bin/session/messages/SessionMessageState.d.ts.map +1 -0
  185. package/bin/session/messages/SessionMessageState.js +34 -0
  186. package/bin/session/messages/SessionMessageState.js.map +1 -0
  187. package/bin/session/messages/SessionMessageTimeline.d.ts.map +1 -0
  188. package/bin/session/{browse → messages}/SessionMessageTimeline.js +0 -1
  189. package/bin/session/messages/SessionMessageTimeline.js.map +1 -0
  190. package/bin/session/{SessionMessages.d.ts → messages/SessionMessages.d.ts} +35 -43
  191. package/bin/session/messages/SessionMessages.d.ts.map +1 -0
  192. package/bin/session/{SessionMessages.js → messages/SessionMessages.js} +178 -196
  193. package/bin/session/messages/SessionMessages.js.map +1 -0
  194. package/bin/session/messages/SessionModelRequestWarning.d.ts.map +1 -0
  195. package/bin/session/messages/SessionModelRequestWarning.js.map +1 -0
  196. package/bin/session/messages/SessionMutationFactory.d.ts +26 -0
  197. package/bin/session/messages/SessionMutationFactory.d.ts.map +1 -0
  198. package/bin/session/messages/SessionMutationFactory.js +38 -0
  199. package/bin/session/messages/SessionMutationFactory.js.map +1 -0
  200. package/bin/session/messages/SessionUserMessage.d.ts +5 -7
  201. package/bin/session/messages/SessionUserMessage.d.ts.map +1 -1
  202. package/bin/session/messages/SessionUserMessage.js +5 -28
  203. package/bin/session/messages/SessionUserMessage.js.map +1 -1
  204. package/bin/{executor/core-engine/CoreEngineSignals.d.ts → session/runner/AssistantParts.d.ts} +4 -9
  205. package/bin/session/runner/AssistantParts.d.ts.map +1 -0
  206. package/bin/{executor/core-engine/CoreEngineSignals.js → session/runner/AssistantParts.js} +4 -17
  207. package/bin/session/runner/AssistantParts.js.map +1 -0
  208. package/bin/session/runner/ContextPressure.d.ts +15 -0
  209. package/bin/session/runner/ContextPressure.d.ts.map +1 -0
  210. package/bin/{executor/core-engine/CoreEngineContextCompaction.js → session/runner/ContextPressure.js} +11 -11
  211. package/bin/session/runner/ContextPressure.js.map +1 -0
  212. package/bin/session/runner/ContextRetry.d.ts +39 -0
  213. package/bin/session/runner/ContextRetry.d.ts.map +1 -0
  214. package/bin/{executor/services/ExecutorRecoveryPolicy.js → session/runner/ContextRetry.js} +19 -19
  215. package/bin/session/runner/ContextRetry.js.map +1 -0
  216. package/bin/{executor/core-engine/CoreEngineError.d.ts → session/runner/ModelFailure.d.ts} +4 -4
  217. package/bin/session/runner/ModelFailure.d.ts.map +1 -0
  218. package/bin/{executor/core-engine/CoreEngineError.js → session/runner/ModelFailure.js} +4 -4
  219. package/bin/session/runner/ModelFailure.js.map +1 -0
  220. package/bin/session/runner/SessionExecutor.d.ts +108 -0
  221. package/bin/session/runner/SessionExecutor.d.ts.map +1 -0
  222. package/bin/session/runner/SessionExecutor.js +430 -0
  223. package/bin/session/runner/SessionExecutor.js.map +1 -0
  224. package/bin/session/runner/ToolLoopDecision.d.ts +60 -0
  225. package/bin/session/runner/ToolLoopDecision.d.ts.map +1 -0
  226. package/bin/{executor/core-engine/CoreEngineLoopDecision.js → session/runner/ToolLoopDecision.js} +5 -5
  227. package/bin/session/runner/ToolLoopDecision.js.map +1 -0
  228. package/bin/session/runner/ToolLoopLimits.d.ts +30 -0
  229. package/bin/session/runner/ToolLoopLimits.d.ts.map +1 -0
  230. package/bin/session/runner/ToolLoopLimits.js +46 -0
  231. package/bin/session/runner/ToolLoopLimits.js.map +1 -0
  232. package/bin/session/{browse → storage}/Browse.d.ts +1 -1
  233. package/bin/session/storage/Browse.d.ts.map +1 -0
  234. package/bin/session/{browse → storage}/Browse.js +1 -1
  235. package/bin/session/storage/Browse.js.map +1 -0
  236. package/bin/session/storage/LocalSessionStore.js +1 -1
  237. package/bin/session/storage/LocalSessionStore.js.map +1 -1
  238. package/bin/session/storage/LocalStorePaths.d.ts +0 -2
  239. package/bin/session/storage/LocalStorePaths.d.ts.map +1 -1
  240. package/bin/session/storage/LocalStorePaths.js +1 -1
  241. package/bin/session/storage/LocalStorePaths.js.map +1 -1
  242. package/bin/session/storage/Metadata.d.ts +1 -23
  243. package/bin/session/storage/Metadata.d.ts.map +1 -1
  244. package/bin/session/storage/Metadata.js +0 -18
  245. package/bin/session/storage/Metadata.js.map +1 -1
  246. package/bin/session/storage/RuntimeSessionPort.d.ts +0 -4
  247. package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
  248. package/bin/session/storage/RuntimeSessionPort.js +0 -1
  249. package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
  250. package/bin/session/{preview → storage}/SessionMessagePreview.d.ts.map +1 -1
  251. package/bin/session/{preview → storage}/SessionMessagePreview.js +0 -1
  252. package/bin/session/{preview → storage}/SessionMessagePreview.js.map +1 -1
  253. package/bin/session/storage/SessionStorageCodec.d.ts.map +1 -1
  254. package/bin/session/storage/SessionStorageCodec.js +36 -18
  255. package/bin/session/storage/SessionStorageCodec.js.map +1 -1
  256. package/bin/session/storage/SessionStorageSchema.d.ts +1 -1
  257. package/bin/session/storage/SessionStorageSchema.js +1 -1
  258. package/bin/session/storage/SqliteSessionStorage.d.ts +6 -4
  259. package/bin/session/storage/SqliteSessionStorage.d.ts.map +1 -1
  260. package/bin/session/storage/SqliteSessionStorage.js +21 -18
  261. package/bin/session/storage/SqliteSessionStorage.js.map +1 -1
  262. package/bin/tools/ask/AskQuestionAnswers.d.ts +20 -0
  263. package/bin/tools/ask/AskQuestionAnswers.d.ts.map +1 -0
  264. package/bin/tools/ask/AskQuestionAnswers.js +99 -0
  265. package/bin/tools/ask/AskQuestionAnswers.js.map +1 -0
  266. package/bin/tools/ask/AskQuestionsTool.d.ts +5 -2
  267. package/bin/tools/ask/AskQuestionsTool.d.ts.map +1 -1
  268. package/bin/tools/ask/AskQuestionsTool.js +23 -31
  269. package/bin/tools/ask/AskQuestionsTool.js.map +1 -1
  270. package/bin/tools/ask/AskQuestionsToolSchemas.d.ts +1 -1
  271. package/bin/types/agent/AgentOptions.d.ts +16 -8
  272. package/bin/types/agent/AgentOptions.d.ts.map +1 -1
  273. package/bin/types/agent/AgentSessionCollection.d.ts +8 -0
  274. package/bin/types/agent/AgentSessionCollection.d.ts.map +1 -1
  275. package/bin/types/agent/SessionActor.d.ts +3 -3
  276. package/bin/types/agent/SessionActor.d.ts.map +1 -1
  277. package/bin/types/group/DispatchStrategy.js +1 -1
  278. package/bin/types/group/DispatchStrategy.js.map +1 -1
  279. package/bin/types/group/GroupSession.d.ts +41 -1
  280. package/bin/types/group/GroupSession.d.ts.map +1 -1
  281. package/bin/types/group/GroupSessionStore.d.ts +30 -3
  282. package/bin/types/group/GroupSessionStore.d.ts.map +1 -1
  283. package/bin/types/model/ModelRequest.d.ts.map +1 -0
  284. package/bin/types/model/ModelRequest.js.map +1 -0
  285. package/bin/types/sdk/AgentSessionAction.d.ts +1 -9
  286. package/bin/types/sdk/AgentSessionAction.d.ts.map +1 -1
  287. package/bin/types/session/{AdaptivePartContextPolicy.d.ts → ContextCheckpoint.d.ts} +10 -9
  288. package/bin/types/session/ContextCheckpoint.d.ts.map +1 -0
  289. package/bin/types/session/ContextCheckpoint.js +8 -0
  290. package/bin/types/session/ContextCheckpoint.js.map +1 -0
  291. package/bin/types/session/SessionAgentMessageState.d.ts +6 -10
  292. package/bin/types/session/SessionAgentMessageState.d.ts.map +1 -1
  293. package/bin/types/session/SessionAgentMessageState.js +3 -2
  294. package/bin/types/session/SessionAgentMessageState.js.map +1 -1
  295. package/bin/types/session/SessionComposer.d.ts +65 -36
  296. package/bin/types/session/SessionComposer.d.ts.map +1 -1
  297. package/bin/types/session/SessionComposer.js +7 -2
  298. package/bin/types/session/SessionComposer.js.map +1 -1
  299. package/bin/types/session/SessionExecution.d.ts +15 -11
  300. package/bin/types/session/SessionExecution.d.ts.map +1 -1
  301. package/bin/types/session/SessionExecution.js +1 -1
  302. package/bin/types/session/SessionInteractions.d.ts +0 -2
  303. package/bin/types/session/SessionInteractions.d.ts.map +1 -1
  304. package/bin/types/session/SessionLocalState.d.ts +0 -4
  305. package/bin/types/session/SessionLocalState.d.ts.map +1 -1
  306. package/bin/types/session/SessionLoop.d.ts +33 -12
  307. package/bin/types/session/SessionLoop.d.ts.map +1 -1
  308. package/bin/types/session/SessionMessages.d.ts +3 -29
  309. package/bin/types/session/SessionMessages.d.ts.map +1 -1
  310. package/bin/types/session/SessionOptions.d.ts +16 -13
  311. package/bin/types/session/SessionOptions.d.ts.map +1 -1
  312. package/bin/types/session/SessionPort.d.ts +0 -3
  313. package/bin/types/session/SessionPort.d.ts.map +1 -1
  314. package/bin/types/session/SessionState.d.ts +0 -1
  315. package/bin/types/session/SessionState.d.ts.map +1 -1
  316. package/bin/types/session/SessionSystem.d.ts +10 -12
  317. package/bin/types/session/SessionSystem.d.ts.map +1 -1
  318. package/bin/types/session/SessionTool.d.ts +2 -2
  319. package/bin/types/session/SessionTool.d.ts.map +1 -1
  320. package/bin/types/session/SessionTurnCompletion.d.ts +12 -2
  321. package/bin/types/session/SessionTurnCompletion.d.ts.map +1 -1
  322. package/bin/types/session/SessionTurnFileDiff.d.ts +4 -4
  323. package/bin/types/session/SessionTurnFileDiff.d.ts.map +1 -1
  324. package/bin/types/session/{SessionComposition.d.ts → StepInput.d.ts} +17 -15
  325. package/bin/types/session/StepInput.d.ts.map +1 -0
  326. package/bin/types/session/StepInput.js +8 -0
  327. package/bin/types/session/StepInput.js.map +1 -0
  328. package/bin/types/store/SessionHistoryMeta.d.ts.map +1 -0
  329. package/bin/types/store/SessionHistoryMeta.js.map +1 -0
  330. package/bin/types/store/SessionStorage.d.ts +17 -12
  331. package/bin/types/store/SessionStorage.d.ts.map +1 -1
  332. package/bin/types/tool/BoundAgentTool.d.ts +36 -0
  333. package/bin/types/tool/BoundAgentTool.d.ts.map +1 -0
  334. package/bin/types/tool/BoundAgentTool.js +13 -0
  335. package/bin/types/tool/BoundAgentTool.js.map +1 -0
  336. package/bin/types/tools/ask/AskQuestionsTool.d.ts +9 -13
  337. package/bin/types/tools/ask/AskQuestionsTool.d.ts.map +1 -1
  338. package/bin/types/tools/ask/AskQuestionsTool.js +3 -2
  339. package/bin/types/tools/ask/AskQuestionsTool.js.map +1 -1
  340. package/bin/types/turn/SessionAssistantOutput.d.ts.map +1 -0
  341. package/bin/types/turn/SessionAssistantOutput.js.map +1 -0
  342. package/bin/types/{executor → turn}/SessionTurnContext.d.ts +10 -28
  343. package/bin/types/turn/SessionTurnContext.d.ts.map +1 -0
  344. package/bin/types/turn/SessionTurnContext.js.map +1 -0
  345. package/bin/{executor/ids/resolveSessionId.d.ts → utils/ResolveSessionId.d.ts} +1 -1
  346. package/bin/utils/ResolveSessionId.d.ts.map +1 -0
  347. package/bin/{executor/ids/resolveSessionId.js → utils/ResolveSessionId.js} +1 -1
  348. package/bin/utils/ResolveSessionId.js.map +1 -0
  349. package/bin/utils/Time.d.ts +5 -8
  350. package/bin/utils/Time.d.ts.map +1 -1
  351. package/bin/utils/Time.js +5 -54
  352. package/bin/utils/Time.js.map +1 -1
  353. package/package.json +2 -2
  354. package/scripts/ask-question-answers.test.mjs +132 -0
  355. package/scripts/group-session-archive.test.mjs +193 -0
  356. package/scripts/{core-engine-model-stream.test.mjs → model-step-runner.test.mjs} +97 -4
  357. package/scripts/rewrite-build-aliases.mjs +3 -4
  358. package/scripts/session-action-part.test.mjs +172 -0
  359. package/scripts/session-agent-message-part-order.test.mjs +13 -7
  360. package/scripts/{core-engine-context-compaction.test.mjs → session-executor-context-pressure.test.mjs} +40 -32
  361. package/scripts/{executor-failure-result.test.mjs → session-executor-failure-result.test.mjs} +17 -14
  362. package/scripts/session-executor-max-steps.test.mjs +143 -0
  363. package/scripts/session-initialization.test.mjs +3 -4
  364. package/scripts/session-interaction-migration.test.mjs +145 -0
  365. package/scripts/session-interaction-mutation.test.mjs +202 -0
  366. package/scripts/session-messages-error-part.test.mjs +1 -1
  367. package/scripts/session-messages-error.test.mjs +1 -1
  368. package/scripts/session-prompt-idempotency.test.mjs +4 -2
  369. package/scripts/session-queue.test.mjs +21 -1
  370. package/scripts/session-storage-sqlite.test.mjs +3 -3
  371. package/scripts/session-system-blocks.test.mjs +61 -39
  372. package/scripts/session-turn-context.test.mjs +37 -40
  373. package/scripts/verify-build-aliases.mjs +1 -1
  374. package/src/agent/Agent.ts +137 -80
  375. package/src/agent/AgentInstructions.ts +48 -15
  376. package/src/agent/AgentMemoryStorage.ts +1 -1
  377. package/src/agent/AgentSessions.ts +60 -38
  378. package/src/group/Group.ts +27 -24
  379. package/src/group/GroupSession.ts +12 -8
  380. package/src/group/GroupSessions.ts +79 -20
  381. package/src/group/storage/LocalGroupSessionDataStore.ts +9 -1
  382. package/src/group/storage/LocalGroupSessionStore.ts +138 -28
  383. package/src/index.ts +35 -52
  384. package/src/{executor/model → model}/ModelGenerate.ts +3 -3
  385. package/src/{executor/model → model}/ModelRequestRunner.ts +2 -2
  386. package/src/{executor/model → model}/ModelStepRunner.ts +22 -19
  387. package/src/{executor/model → model}/ModelStreamConsumer.ts +1 -1
  388. package/src/model/README.md +117 -0
  389. package/src/model/ToolInputValidation.ts +58 -0
  390. package/src/{executor → model}/messages/ChatMessageMarkupTypes.ts +1 -1
  391. package/src/{executor → model}/messages/SessionModelMessages.ts +0 -1
  392. package/src/{executor/composer/system/default → model/prompts}/SystemPromptAssets.ts +1 -1
  393. package/src/model/prompts/assets/core.prompt.ts +9 -0
  394. package/src/{executor/composer/system/default → model/prompts}/assets/core.prompt.ts.txt +26 -25
  395. package/src/session/Session.ts +185 -151
  396. package/src/session/input/SessionHookRunner.ts +100 -0
  397. package/src/session/{SessionSystem.ts → input/SessionSystem.ts} +31 -29
  398. package/src/session/input/StepInput.ts +507 -0
  399. package/src/session/input/composer/AdaptiveContextCheckpoint.ts +115 -0
  400. package/src/session/input/composer/AdaptiveContextParts.ts +166 -0
  401. package/src/session/input/composer/ComposerAssembly.ts +81 -0
  402. package/src/session/{composer/policies/SessionSummaryPrompts.ts → input/composer/ContextSummaryPrompts.ts} +5 -2
  403. package/src/session/input/composer/DefaultSessionComposer.ts +147 -0
  404. package/src/session/input/composer/FullHistorySessionComposer.ts +55 -0
  405. package/src/session/loop/README.md +28 -0
  406. package/src/session/{SessionLoop.ts → loop/SessionLoop.ts} +100 -24
  407. package/src/session/{SessionQueue.ts → loop/SessionQueue.ts} +18 -0
  408. package/src/session/{SessionState.ts → loop/SessionState.ts} +4 -21
  409. package/src/session/{SessionTitle.ts → loop/SessionTitle.ts} +3 -3
  410. package/src/session/{runtime → loop}/SessionTurnCompletion.ts +27 -8
  411. package/src/session/{runtime → loop}/SessionTurnContext.ts +19 -93
  412. package/src/session/{runtime → loop}/SessionTurnFileDiff.ts +1 -1
  413. package/src/session/{messages → loop}/SessionTurnFileDiffBuilder.ts +4 -4
  414. package/src/session/messages/ApprovalInteraction.ts +77 -0
  415. package/src/session/messages/README.md +27 -0
  416. package/src/session/messages/SessionAgentMessageState.ts +324 -113
  417. package/src/session/messages/SessionAgentMessageWriter.ts +82 -45
  418. package/src/session/messages/SessionAgentParts.ts +39 -0
  419. package/src/session/{execution → messages}/SessionAssistantOutputAdapter.ts +2 -2
  420. package/src/session/messages/SessionInteractions.ts +227 -0
  421. package/src/session/messages/SessionJsonValue.ts +1 -18
  422. package/src/session/messages/SessionMessageCache.ts +171 -0
  423. package/src/session/messages/SessionMessageState.ts +42 -0
  424. package/src/session/{browse → messages}/SessionMessageTimeline.ts +0 -1
  425. package/src/session/{SessionMessages.ts → messages/SessionMessages.ts} +225 -284
  426. package/src/session/messages/SessionMutationFactory.ts +58 -0
  427. package/src/session/messages/SessionUserMessage.ts +7 -32
  428. package/src/{executor/core-engine/CoreEngineSignals.ts → session/runner/AssistantParts.ts} +3 -21
  429. package/src/{executor/core-engine/CoreEngineContextCompaction.ts → session/runner/ContextPressure.ts} +10 -10
  430. package/src/{executor/services/ExecutorRecoveryPolicy.ts → session/runner/ContextRetry.ts} +25 -25
  431. package/src/{executor/core-engine/CoreEngineError.ts → session/runner/ModelFailure.ts} +3 -3
  432. package/src/session/runner/SessionExecutor.ts +633 -0
  433. package/src/session/runner/ToolLoopDecision.ts +98 -0
  434. package/src/session/runner/ToolLoopLimits.ts +53 -0
  435. package/src/session/{browse → storage}/Browse.ts +2 -2
  436. package/src/session/storage/LocalSessionStore.ts +1 -1
  437. package/src/session/storage/LocalStorePaths.ts +1 -1
  438. package/src/session/storage/Metadata.ts +1 -44
  439. package/src/session/storage/RuntimeSessionPort.ts +0 -5
  440. package/src/session/{preview → storage}/SessionMessagePreview.ts +0 -1
  441. package/src/session/storage/SessionStorageCodec.ts +54 -28
  442. package/src/session/storage/SessionStorageSchema.ts +1 -1
  443. package/src/session/storage/SqliteSessionStorage.ts +29 -22
  444. package/src/tools/ask/AskQuestionAnswers.ts +125 -0
  445. package/src/tools/ask/AskQuestionsTool.ts +32 -37
  446. package/src/types/agent/AgentOptions.ts +17 -8
  447. package/src/types/agent/AgentSessionCollection.ts +9 -0
  448. package/src/types/agent/SessionActor.ts +3 -4
  449. package/src/types/group/DispatchStrategy.ts +1 -1
  450. package/src/types/group/GroupSession.ts +44 -1
  451. package/src/types/group/GroupSessionStore.ts +30 -3
  452. package/src/types/sdk/AgentSessionAction.ts +1 -14
  453. package/src/types/session/{AdaptivePartContextPolicy.ts → ContextCheckpoint.ts} +9 -8
  454. package/src/types/session/SessionAgentMessageState.ts +6 -16
  455. package/src/types/session/SessionComposer.ts +67 -39
  456. package/src/types/session/SessionExecution.ts +15 -13
  457. package/src/types/session/SessionInteractions.ts +0 -2
  458. package/src/types/session/SessionLocalState.ts +0 -5
  459. package/src/types/session/SessionLoop.ts +37 -12
  460. package/src/types/session/SessionMessages.ts +3 -34
  461. package/src/types/session/SessionOptions.ts +18 -13
  462. package/src/types/session/SessionPort.ts +0 -4
  463. package/src/types/session/SessionState.ts +0 -1
  464. package/src/types/session/SessionSystem.ts +10 -16
  465. package/src/types/session/SessionTool.ts +2 -2
  466. package/src/types/session/SessionTurnCompletion.ts +12 -2
  467. package/src/types/session/SessionTurnFileDiff.ts +4 -4
  468. package/src/types/session/{SessionComposition.ts → StepInput.ts} +22 -14
  469. package/src/types/store/SessionStorage.ts +17 -12
  470. package/src/types/tool/BoundAgentTool.ts +38 -0
  471. package/src/types/tools/ask/AskQuestionsTool.ts +11 -13
  472. package/src/types/{executor → turn}/SessionTurnContext.ts +8 -34
  473. package/src/utils/Time.ts +12 -64
  474. package/tsconfig.json +1 -2
  475. package/tsconfig.tsbuildinfo +1 -1
  476. package/bin/executor/Executor.d.ts +0 -92
  477. package/bin/executor/Executor.d.ts.map +0 -1
  478. package/bin/executor/Executor.js +0 -232
  479. package/bin/executor/Executor.js.map +0 -1
  480. package/bin/executor/composer/system/default/SystemPromptAssets.d.ts.map +0 -1
  481. package/bin/executor/composer/system/default/SystemPromptAssets.js.map +0 -1
  482. package/bin/executor/composer/system/default/assets/core.prompt.d.ts +0 -7
  483. package/bin/executor/composer/system/default/assets/core.prompt.d.ts.map +0 -1
  484. package/bin/executor/composer/system/default/assets/core.prompt.js +0 -8
  485. package/bin/executor/composer/system/default/assets/core.prompt.js.map +0 -1
  486. package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts +0 -15
  487. package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts.map +0 -1
  488. package/bin/executor/core-engine/CoreEngineContextCompaction.js.map +0 -1
  489. package/bin/executor/core-engine/CoreEngineError.d.ts.map +0 -1
  490. package/bin/executor/core-engine/CoreEngineError.js.map +0 -1
  491. package/bin/executor/core-engine/CoreEngineLoopDecision.d.ts +0 -26
  492. package/bin/executor/core-engine/CoreEngineLoopDecision.d.ts.map +0 -1
  493. package/bin/executor/core-engine/CoreEngineLoopDecision.js.map +0 -1
  494. package/bin/executor/core-engine/CoreEngineRunner.d.ts +0 -48
  495. package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +0 -1
  496. package/bin/executor/core-engine/CoreEngineRunner.js +0 -343
  497. package/bin/executor/core-engine/CoreEngineRunner.js.map +0 -1
  498. package/bin/executor/core-engine/CoreEngineSignals.d.ts.map +0 -1
  499. package/bin/executor/core-engine/CoreEngineSignals.js.map +0 -1
  500. package/bin/executor/ids/resolveSessionId.d.ts.map +0 -1
  501. package/bin/executor/ids/resolveSessionId.js.map +0 -1
  502. package/bin/executor/messages/ChatMessageMarkup.d.ts.map +0 -1
  503. package/bin/executor/messages/ChatMessageMarkup.js.map +0 -1
  504. package/bin/executor/messages/ChatMessageMarkupTypes.d.ts.map +0 -1
  505. package/bin/executor/messages/ChatMessageMarkupTypes.js.map +0 -1
  506. package/bin/executor/messages/SessionAttachmentMapper.d.ts.map +0 -1
  507. package/bin/executor/messages/SessionAttachmentMapper.js.map +0 -1
  508. package/bin/executor/messages/SessionMessageLog.d.ts.map +0 -1
  509. package/bin/executor/messages/SessionMessageLog.js.map +0 -1
  510. package/bin/executor/messages/SessionModelMessages.d.ts.map +0 -1
  511. package/bin/executor/messages/SessionModelMessages.js.map +0 -1
  512. package/bin/executor/model/ModelGenerate.d.ts.map +0 -1
  513. package/bin/executor/model/ModelGenerate.js.map +0 -1
  514. package/bin/executor/model/ModelRequestRunner.d.ts.map +0 -1
  515. package/bin/executor/model/ModelRequestRunner.js.map +0 -1
  516. package/bin/executor/model/ModelStepRunner.d.ts.map +0 -1
  517. package/bin/executor/model/ModelStepRunner.js.map +0 -1
  518. package/bin/executor/model/ModelStreamConsumer.d.ts.map +0 -1
  519. package/bin/executor/model/ModelStreamConsumer.js.map +0 -1
  520. package/bin/executor/model/ModelStreamFailure.d.ts.map +0 -1
  521. package/bin/executor/model/ModelStreamFailure.js.map +0 -1
  522. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts +0 -39
  523. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts.map +0 -1
  524. package/bin/executor/services/ExecutorRecoveryPolicy.js.map +0 -1
  525. package/bin/executor/types/SessionHistoryMeta.d.ts.map +0 -1
  526. package/bin/executor/types/SessionHistoryMeta.js.map +0 -1
  527. package/bin/executor/types/SessionLoop.d.ts +0 -59
  528. package/bin/executor/types/SessionLoop.d.ts.map +0 -1
  529. package/bin/executor/types/SessionLoop.js +0 -9
  530. package/bin/executor/types/SessionLoop.js.map +0 -1
  531. package/bin/executor/types/SessionPrompts.d.ts +0 -14
  532. package/bin/executor/types/SessionPrompts.d.ts.map +0 -1
  533. package/bin/executor/types/SessionPrompts.js +0 -8
  534. package/bin/executor/types/SessionPrompts.js.map +0 -1
  535. package/bin/session/DefaultSessionComposer.d.ts +0 -24
  536. package/bin/session/DefaultSessionComposer.d.ts.map +0 -1
  537. package/bin/session/DefaultSessionComposer.js +0 -99
  538. package/bin/session/DefaultSessionComposer.js.map +0 -1
  539. package/bin/session/SessionComposition.d.ts +0 -49
  540. package/bin/session/SessionComposition.d.ts.map +0 -1
  541. package/bin/session/SessionComposition.js +0 -309
  542. package/bin/session/SessionComposition.js.map +0 -1
  543. package/bin/session/SessionHookPoints.d.ts +0 -15
  544. package/bin/session/SessionHookPoints.d.ts.map +0 -1
  545. package/bin/session/SessionHookPoints.js +0 -15
  546. package/bin/session/SessionHookPoints.js.map +0 -1
  547. package/bin/session/SessionHooks.d.ts +0 -38
  548. package/bin/session/SessionHooks.d.ts.map +0 -1
  549. package/bin/session/SessionHooks.js +0 -71
  550. package/bin/session/SessionHooks.js.map +0 -1
  551. package/bin/session/SessionLoop.d.ts.map +0 -1
  552. package/bin/session/SessionLoop.js.map +0 -1
  553. package/bin/session/SessionMessages.d.ts.map +0 -1
  554. package/bin/session/SessionMessages.js.map +0 -1
  555. package/bin/session/SessionQueue.d.ts.map +0 -1
  556. package/bin/session/SessionQueue.js.map +0 -1
  557. package/bin/session/SessionState.d.ts.map +0 -1
  558. package/bin/session/SessionState.js.map +0 -1
  559. package/bin/session/SessionSystem.d.ts +0 -19
  560. package/bin/session/SessionSystem.d.ts.map +0 -1
  561. package/bin/session/SessionSystem.js.map +0 -1
  562. package/bin/session/SessionTitle.d.ts.map +0 -1
  563. package/bin/session/SessionTitle.js.map +0 -1
  564. package/bin/session/browse/Browse.d.ts.map +0 -1
  565. package/bin/session/browse/Browse.js.map +0 -1
  566. package/bin/session/browse/SessionMessageTimeline.d.ts.map +0 -1
  567. package/bin/session/browse/SessionMessageTimeline.js.map +0 -1
  568. package/bin/session/composer/policies/AdaptivePartContextPolicy.d.ts +0 -35
  569. package/bin/session/composer/policies/AdaptivePartContextPolicy.d.ts.map +0 -1
  570. package/bin/session/composer/policies/AdaptivePartContextPolicy.js +0 -256
  571. package/bin/session/composer/policies/AdaptivePartContextPolicy.js.map +0 -1
  572. package/bin/session/composer/policies/FullHistoryContextPolicy.d.ts +0 -24
  573. package/bin/session/composer/policies/FullHistoryContextPolicy.d.ts.map +0 -1
  574. package/bin/session/composer/policies/FullHistoryContextPolicy.js +0 -31
  575. package/bin/session/composer/policies/FullHistoryContextPolicy.js.map +0 -1
  576. package/bin/session/composer/policies/SessionSummaryPrompts.d.ts.map +0 -1
  577. package/bin/session/composer/policies/SessionSummaryPrompts.js.map +0 -1
  578. package/bin/session/control/SessionInteractions.d.ts +0 -39
  579. package/bin/session/control/SessionInteractions.d.ts.map +0 -1
  580. package/bin/session/control/SessionInteractions.js +0 -255
  581. package/bin/session/control/SessionInteractions.js.map +0 -1
  582. package/bin/session/execution/SessionAssistantOutputAdapter.d.ts.map +0 -1
  583. package/bin/session/execution/SessionAssistantOutputAdapter.js.map +0 -1
  584. package/bin/session/execution/tools/SessionShellApprovalAdapter.d.ts +0 -28
  585. package/bin/session/execution/tools/SessionShellApprovalAdapter.d.ts.map +0 -1
  586. package/bin/session/execution/tools/SessionShellApprovalAdapter.js +0 -87
  587. package/bin/session/execution/tools/SessionShellApprovalAdapter.js.map +0 -1
  588. package/bin/session/messages/SessionAgentActionPartWriter.d.ts +0 -22
  589. package/bin/session/messages/SessionAgentActionPartWriter.d.ts.map +0 -1
  590. package/bin/session/messages/SessionAgentActionPartWriter.js +0 -36
  591. package/bin/session/messages/SessionAgentActionPartWriter.js.map +0 -1
  592. package/bin/session/messages/SessionMessageInteractionWriter.d.ts +0 -46
  593. package/bin/session/messages/SessionMessageInteractionWriter.d.ts.map +0 -1
  594. package/bin/session/messages/SessionMessageInteractionWriter.js +0 -183
  595. package/bin/session/messages/SessionMessageInteractionWriter.js.map +0 -1
  596. package/bin/session/messages/SessionTurnFileDiffBuilder.d.ts.map +0 -1
  597. package/bin/session/messages/SessionTurnFileDiffBuilder.js.map +0 -1
  598. package/bin/session/runtime/SessionEventHub.d.ts.map +0 -1
  599. package/bin/session/runtime/SessionEventHub.js.map +0 -1
  600. package/bin/session/runtime/SessionModelRequestWarning.d.ts.map +0 -1
  601. package/bin/session/runtime/SessionModelRequestWarning.js.map +0 -1
  602. package/bin/session/runtime/SessionTitleTask.d.ts.map +0 -1
  603. package/bin/session/runtime/SessionTitleTask.js.map +0 -1
  604. package/bin/session/runtime/SessionTurnCompletion.d.ts.map +0 -1
  605. package/bin/session/runtime/SessionTurnCompletion.js.map +0 -1
  606. package/bin/session/runtime/SessionTurnContext.d.ts +0 -29
  607. package/bin/session/runtime/SessionTurnContext.d.ts.map +0 -1
  608. package/bin/session/runtime/SessionTurnContext.js.map +0 -1
  609. package/bin/session/runtime/SessionTurnFileDiff.d.ts.map +0 -1
  610. package/bin/session/runtime/SessionTurnFileDiff.js.map +0 -1
  611. package/bin/types/action/ActionResult.d.ts +0 -35
  612. package/bin/types/action/ActionResult.d.ts.map +0 -1
  613. package/bin/types/action/ActionResult.js +0 -18
  614. package/bin/types/action/ActionResult.js.map +0 -1
  615. package/bin/types/executor/ModelRequest.d.ts.map +0 -1
  616. package/bin/types/executor/ModelRequest.js.map +0 -1
  617. package/bin/types/executor/SessionAssistantOutput.d.ts.map +0 -1
  618. package/bin/types/executor/SessionAssistantOutput.js.map +0 -1
  619. package/bin/types/executor/SessionToolExecutionContext.d.ts +0 -23
  620. package/bin/types/executor/SessionToolExecutionContext.d.ts.map +0 -1
  621. package/bin/types/executor/SessionToolExecutionContext.js +0 -10
  622. package/bin/types/executor/SessionToolExecutionContext.js.map +0 -1
  623. package/bin/types/executor/SessionTurnContext.d.ts.map +0 -1
  624. package/bin/types/executor/SessionTurnContext.js.map +0 -1
  625. package/bin/types/session/AdaptivePartContextPolicy.d.ts.map +0 -1
  626. package/bin/types/session/AdaptivePartContextPolicy.js +0 -7
  627. package/bin/types/session/AdaptivePartContextPolicy.js.map +0 -1
  628. package/bin/types/session/SessionComposition.d.ts.map +0 -1
  629. package/bin/types/session/SessionComposition.js +0 -8
  630. package/bin/types/session/SessionComposition.js.map +0 -1
  631. package/bin/types/session/SessionContextPolicy.d.ts +0 -70
  632. package/bin/types/session/SessionContextPolicy.d.ts.map +0 -1
  633. package/bin/types/session/SessionContextPolicy.js +0 -8
  634. package/bin/types/session/SessionContextPolicy.js.map +0 -1
  635. package/bin/types/tools/ToolActionExecutionContext.d.ts +0 -30
  636. package/bin/types/tools/ToolActionExecutionContext.d.ts.map +0 -1
  637. package/bin/types/tools/ToolActionExecutionContext.js +0 -8
  638. package/bin/types/tools/ToolActionExecutionContext.js.map +0 -1
  639. package/src/executor/Executor.ts +0 -319
  640. package/src/executor/README.md +0 -92
  641. package/src/executor/composer/system/default/assets/core.prompt.ts +0 -9
  642. package/src/executor/core-engine/CoreEngineLoopDecision.ts +0 -63
  643. package/src/executor/core-engine/CoreEngineRunner.ts +0 -458
  644. package/src/executor/types/SessionLoop.ts +0 -69
  645. package/src/executor/types/SessionPrompts.ts +0 -14
  646. package/src/session/DefaultSessionComposer.ts +0 -123
  647. package/src/session/SessionComposition.ts +0 -370
  648. package/src/session/SessionHookPoints.ts +0 -17
  649. package/src/session/SessionHooks.ts +0 -85
  650. package/src/session/composer/policies/AdaptivePartContextPolicy.ts +0 -307
  651. package/src/session/composer/policies/FullHistoryContextPolicy.ts +0 -36
  652. package/src/session/control/SessionInteractions.ts +0 -311
  653. package/src/session/execution/tools/SessionShellApprovalAdapter.ts +0 -105
  654. package/src/session/messages/SessionAgentActionPartWriter.ts +0 -54
  655. package/src/session/messages/SessionMessageInteractionWriter.ts +0 -279
  656. package/src/types/action/ActionResult.ts +0 -50
  657. package/src/types/executor/SessionToolExecutionContext.ts +0 -26
  658. package/src/types/session/SessionContextPolicy.ts +0 -77
  659. package/src/types/tools/ToolActionExecutionContext.ts +0 -32
  660. /package/bin/{executor/model → model}/ModelGenerate.js +0 -0
  661. /package/bin/{executor/model → model}/ModelRequestRunner.js +0 -0
  662. /package/bin/{executor/model → model}/ModelStreamConsumer.d.ts +0 -0
  663. /package/bin/{executor/model → model}/ModelStreamConsumer.js +0 -0
  664. /package/bin/{executor/model → model}/ModelStreamFailure.d.ts +0 -0
  665. /package/bin/{executor/model → model}/ModelStreamFailure.js +0 -0
  666. /package/bin/{executor → model}/messages/ChatMessageMarkup.d.ts +0 -0
  667. /package/bin/{executor → model}/messages/ChatMessageMarkup.js +0 -0
  668. /package/bin/{executor → model}/messages/SessionAttachmentMapper.d.ts +0 -0
  669. /package/bin/{executor → model}/messages/SessionAttachmentMapper.js +0 -0
  670. /package/bin/{executor → model}/messages/SessionMessageLog.d.ts +0 -0
  671. /package/bin/{executor → model}/messages/SessionMessageLog.js +0 -0
  672. /package/bin/{executor → model}/messages/SessionModelMessages.d.ts +0 -0
  673. /package/bin/{executor/composer/system/default → model/prompts}/SystemPromptAssets.d.ts +0 -0
  674. /package/bin/session/{runtime → loop}/SessionTitleTask.d.ts +0 -0
  675. /package/bin/session/{runtime → loop}/SessionTitleTask.js +0 -0
  676. /package/bin/session/{runtime → loop}/SessionTurnFileDiff.d.ts +0 -0
  677. /package/bin/session/{messages → loop}/SessionTurnFileDiffBuilder.js +0 -0
  678. /package/bin/session/{execution → messages}/SessionAssistantOutputAdapter.js +0 -0
  679. /package/bin/session/{runtime → messages}/SessionEventHub.d.ts +0 -0
  680. /package/bin/session/{runtime → messages}/SessionEventHub.js +0 -0
  681. /package/bin/session/{browse → messages}/SessionMessageTimeline.d.ts +0 -0
  682. /package/bin/session/{runtime → messages}/SessionModelRequestWarning.d.ts +0 -0
  683. /package/bin/session/{runtime → messages}/SessionModelRequestWarning.js +0 -0
  684. /package/bin/session/{preview → storage}/SessionMessagePreview.d.ts +0 -0
  685. /package/bin/types/{executor → model}/ModelRequest.d.ts +0 -0
  686. /package/bin/types/{executor → model}/ModelRequest.js +0 -0
  687. /package/bin/{executor/types → types/store}/SessionHistoryMeta.d.ts +0 -0
  688. /package/bin/{executor/types → types/store}/SessionHistoryMeta.js +0 -0
  689. /package/bin/types/{executor → turn}/SessionAssistantOutput.d.ts +0 -0
  690. /package/bin/types/{executor → turn}/SessionAssistantOutput.js +0 -0
  691. /package/bin/types/{executor → turn}/SessionTurnContext.js +0 -0
  692. /package/src/{executor/model → model}/ModelStreamFailure.ts +0 -0
  693. /package/src/{executor → model}/messages/ChatMessageMarkup.ts +0 -0
  694. /package/src/{executor → model}/messages/SessionAttachmentMapper.ts +0 -0
  695. /package/src/{executor → model}/messages/SessionMessageLog.ts +0 -0
  696. /package/src/session/{runtime → loop}/SessionTitleTask.ts +0 -0
  697. /package/src/session/{runtime → messages}/SessionEventHub.ts +0 -0
  698. /package/src/session/{runtime → messages}/SessionModelRequestWarning.ts +0 -0
  699. /package/src/types/{executor → model}/ModelRequest.ts +0 -0
  700. /package/src/{executor/types → types/store}/SessionHistoryMeta.ts +0 -0
  701. /package/src/types/{executor → turn}/SessionAssistantOutput.ts +0 -0
  702. /package/src/{executor/ids/resolveSessionId.ts → utils/ResolveSessionId.ts} +0 -0
@@ -9,46 +9,43 @@
9
9
  import { generate_id } from "@/utils/Id.js";
10
10
  import { SessionAgentMessageWriter } from "@/session/messages/SessionAgentMessageWriter.js";
11
11
  import { SessionAgentMessageState } from "@/session/messages/SessionAgentMessageState.js";
12
- import { SessionAgentActionPartWriter } from "@/session/messages/SessionAgentActionPartWriter.js";
13
12
  import {
14
13
  has_assistant_result_content,
15
- normalize_canonical_session_user_parts,
16
14
  normalize_session_user_parts,
17
15
  } from "@/session/messages/SessionUserMessage.js";
18
16
  import type { JsonObject } from "@downcity/type";
19
17
  import type {
20
18
  ListSessionMessagesInput,
19
+ SessionActionStatus,
21
20
  SessionAgentActionPart,
22
21
  SessionAgentErrorPart,
23
- SessionAgentInteractionPart,
22
+ SessionAgentInteraction,
24
23
  SessionAgentMessage,
25
- SessionAgentMessagePart,
26
24
  SessionMessage,
27
25
  SessionMessagePage,
28
26
  SessionUserMessage,
29
27
  SessionUserMessagePart,
30
28
  } from "@downcity/type";
31
- import type {
32
- SessionMutation,
33
- SessionMessageMutation as SessionMessageSnapshotMutation,
34
- } from "@downcity/type";
29
+ import { SessionMessageCache } from "@/session/messages/SessionMessageCache.js";
30
+ import { resolve_session_message_state } from "@/session/messages/SessionMessageState.js";
31
+ import {
32
+ next_agent_part_sequence,
33
+ resolve_changed_agent_parts,
34
+ } from "@/session/messages/SessionAgentParts.js";
35
35
  import type { SessionMessageStorageStats } from "@/types/store/SessionStorage.js";
36
- import type { SessionStreamingToolLocation } from "@/types/session/SessionTool.js";
37
36
  import type {
38
37
  SessionInteractionCloseInput,
39
38
  SessionInteractionRequest,
40
39
  SessionInteractionResponse,
41
40
  } from "@downcity/type";
42
41
  import type { SessionActionEvent } from "@downcity/type";
43
- import { persist_user_prompt_file_parts } from "@executor/messages/SessionAttachmentMapper.js";
42
+ import { persist_user_prompt_file_parts } from "@/model/messages/SessionAttachmentMapper.js";
44
43
  import type {
45
- AppendCompletedAgentMessageInput,
46
44
  AppendExternalSessionAgentMessageInput,
47
45
  AppendExternalSessionUserMessageInput,
48
46
  AppendSessionAgentErrorPartInput,
49
47
  AppendSessionPromptMessageInput,
50
48
  AppendSessionUserMessageInput,
51
- OpenSessionAgentActionPartInput,
52
49
  OpenSessionAgentMessageInput,
53
50
  SessionMessagesOptions,
54
51
  } from "@/types/session/SessionMessages.js";
@@ -56,7 +53,6 @@ import type { SessionStorage } from "@/types/store/SessionStorage.js";
56
53
  import type { SessionAttachmentStore } from "@/types/store/SessionAttachmentStore.js";
57
54
 
58
55
  export { SessionAgentMessageWriter } from "@/session/messages/SessionAgentMessageWriter.js";
59
- export { SessionAgentActionPartWriter } from "@/session/messages/SessionAgentActionPartWriter.js";
60
56
  export { normalize_session_user_parts } from "@/session/messages/SessionUserMessage.js";
61
57
 
62
58
  /** 唯一 Session Message 写入服务。 */
@@ -64,8 +60,8 @@ export class SessionMessages {
64
60
  readonly session_id: string;
65
61
  private readonly store: SessionStorage;
66
62
  private readonly attachment_store: SessionAttachmentStore;
67
- private readonly publish: SessionMessagesOptions["publish"];
68
- private readonly messages_by_id = new Map<string, SessionMessage>();
63
+ /** Message 运行缓存与 Mutation 发布边界。 */
64
+ private readonly cache: SessionMessageCache;
69
65
  /** Assistant 草稿与 Interaction 的串行状态转换器。 */
70
66
  private readonly agent_state: SessionAgentMessageState;
71
67
  /** 当前 Message 恢复事务;并发初始化共享同一个 Promise。 */
@@ -75,19 +71,23 @@ export class SessionMessages {
75
71
  this.session_id = String(options.session_id || "").trim();
76
72
  this.store = options.store;
77
73
  this.attachment_store = options.attachment_store;
78
- this.publish = options.publish;
79
74
  if (!this.session_id) throw new Error("SessionMessages requires session_id");
75
+ this.cache = new SessionMessageCache({
76
+ session_id: this.session_id,
77
+ publish: options.publish,
78
+ });
80
79
  this.agent_state = new SessionAgentMessageState({
81
80
  session_id: this.session_id,
82
81
  store: this.store,
83
- list_messages: () => this.messages_by_id.values(),
84
- accept_message: (message, publish_mutation) =>
85
- this.accept_message(message, publish_mutation),
86
- project_mutation: (mutation, message) =>
87
- this.accept_mutation(mutation, message),
82
+ cache: this.cache,
88
83
  });
89
84
  }
90
85
 
86
+ /** 该 Message 是否仍由未收口的 writer 持有;终态推导与 Action 归属共同依赖它。 */
87
+ private is_held_by_writer(message_id: string): boolean {
88
+ return this.cache.is_held(message_id);
89
+ }
90
+
91
91
  /** 恢复已有 Message,并收口进程中断遗留的运行状态。 */
92
92
  async initialize(): Promise<void> {
93
93
  if (!this.initialize_promise) {
@@ -108,9 +108,7 @@ export class SessionMessages {
108
108
  private async restore_messages(): Promise<void> {
109
109
  await this.store.initialize();
110
110
  const persisted_messages = await this.store.list_recoverable_agent_messages();
111
- this.messages_by_id.clear();
112
111
  for (const message of persisted_messages) {
113
- this.remember_message(message);
114
112
  const updated_at = Date.now();
115
113
  const recovered: SessionAgentMessage = {
116
114
  ...message,
@@ -125,23 +123,31 @@ export class SessionMessages {
125
123
  description: part.description || "Action interrupted before completion.",
126
124
  };
127
125
  }
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
- ) {
126
+ if (part.type === "tool") {
127
+ const existing_interactions = part.interactions ?? [];
128
+ const had_pending_interaction = existing_interactions.some(
129
+ (interaction) => interaction.status === "pending",
130
+ );
131
+ const interactions = had_pending_interaction
132
+ ? existing_interactions.map((interaction) =>
133
+ interaction.status === "pending"
134
+ ? {
135
+ ...interaction,
136
+ status: "cancelled" as const,
137
+ cancel_reason: "runtime_interrupted" as const,
138
+ resolved_at: updated_at,
139
+ }
140
+ : interaction,
141
+ )
142
+ : part.interactions;
143
+ if (part.state === "completed" || part.state === "failed") {
144
+ return had_pending_interaction ? { ...part, interactions } : part;
145
+ }
141
146
  return {
142
147
  ...part,
143
148
  state: "failed" as const,
144
149
  error: "Tool interrupted before completion.",
150
+ interactions,
145
151
  };
146
152
  }
147
153
  if (
@@ -153,10 +159,7 @@ export class SessionMessages {
153
159
  return part;
154
160
  }), {
155
161
  part_id: `error:${generate_id()}`,
156
- sequence: message.parts.reduce(
157
- (sequence, part) => Math.max(sequence, part.sequence + 1),
158
- 1,
159
- ),
162
+ sequence: next_agent_part_sequence(message.parts),
160
163
  type: "error",
161
164
  scope: message.turn_id ? "turn" : "session",
162
165
  code: "runtime_interrupted",
@@ -164,19 +167,20 @@ export class SessionMessages {
164
167
  recoverable: true,
165
168
  }],
166
169
  };
167
- const changed_parts = resolve_changed_agent_parts(message, recovered);
170
+ const changed_parts = resolve_changed_agent_parts(message.parts, recovered.parts);
168
171
  await this.store.update_message({
169
172
  message: recovered,
170
173
  expected_revision: message.revision,
171
174
  changed_parts,
172
175
  });
173
- this.accept_message(recovered, false);
176
+ // 恢复不属于本次订阅范围,只更新内存事实,不发布 Mutation。
177
+ this.cache.accept(recovered, false);
174
178
  }
175
179
  }
176
180
 
177
181
  /** 同步读取当前内存 Message。 */
178
182
  get_message(message_id: string): SessionMessage | undefined {
179
- return this.messages_by_id.get(message_id);
183
+ return this.cache.get(message_id);
180
184
  }
181
185
 
182
186
  /** 追加一条 canonical User Message。 */
@@ -196,52 +200,52 @@ export class SessionMessages {
196
200
  created_at,
197
201
  updated_at: created_at,
198
202
  role: "user",
199
- parts: normalize_canonical_session_user_parts(input.parts).map((part) => ({
200
- ...part,
201
- part_id: `${message_id}:part:${String(part.sequence)}`,
203
+ // 调用方只提供内容;part_id 是全局主键,必须在这里统一分配。
204
+ parts: input.parts.map((part, index) => ({
205
+ ...structuredClone(part),
206
+ sequence: index + 1,
207
+ part_id: `${message_id}:part:${String(index + 1)}`,
202
208
  })),
203
209
  }));
204
- return message as SessionUserMessage;
210
+ if (message.role !== "user") {
211
+ throw new Error(`User Message expected: ${message.message_id}`);
212
+ }
213
+ return message;
205
214
  }
206
215
 
207
216
  /** 创建可持续接收 chunk 的 Assistant Message。 */
208
217
  async open_agent_message(
209
218
  input: OpenSessionAgentMessageInput,
210
219
  ): Promise<SessionAgentMessageWriter> {
211
- const message = (await this.create_message((sequence, created_at) => ({
212
- message_id:
213
- String(input.message_id || "").trim() ||
214
- `agent:${this.session_id}:${generate_id()}`,
215
- session_id: this.session_id,
216
- turn_id: input.turn_id,
217
- sequence,
218
- revision: 1,
219
- visibility: input.visibility || "visible",
220
- created_at,
221
- updated_at: created_at,
222
- role: "agent",
223
- state: "streaming",
224
- parts: [],
225
- }), true)) as SessionAgentMessage;
226
- return new SessionAgentMessageWriter(this, message.message_id);
227
- }
228
-
229
- /** 直接写入一条已完成 Assistant Message。 */
230
- async append_completed_agent_message(
231
- input: AppendCompletedAgentMessageInput,
232
- ): Promise<SessionAgentMessage> {
233
- const turn_id = input.turn_id || `external:${this.session_id}:${generate_id()}`;
234
- const writer = await this.open_agent_message({
235
- turn_id,
236
- visibility: input.visibility || "visible",
220
+ const message_id =
221
+ String(input.message_id || "").trim() ||
222
+ `agent:${this.session_id}:${generate_id()}`;
223
+ // 先建立持有关系,创建消息时的首次接受才会被登记为可写 Message。
224
+ const writer = new SessionAgentMessageWriter({
225
+ message_id,
226
+ state: this.agent_state,
227
+ cache: this.cache,
237
228
  });
238
- for (const part of input.parts) await writer.upsert_part(part);
239
- await writer.complete();
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}`);
229
+ this.cache.set_held(message_id);
230
+ try {
231
+ await this.create_message((sequence, created_at) => ({
232
+ message_id,
233
+ session_id: this.session_id,
234
+ turn_id: input.turn_id,
235
+ sequence,
236
+ revision: 1,
237
+ visibility: input.visibility || "visible",
238
+ created_at,
239
+ updated_at: created_at,
240
+ role: "agent",
241
+ state: "streaming",
242
+ parts: [],
243
+ }), true);
244
+ } catch (error) {
245
+ this.cache.release_held(message_id);
246
+ throw error;
243
247
  }
244
- return message;
248
+ return writer;
245
249
  }
246
250
 
247
251
  /** 把公开 Session API 的 User 输入转换为 canonical Message 并持久化。 */
@@ -302,27 +306,35 @@ export class SessionMessages {
302
306
  return await this.store.read_latest_agent_message(turn_id);
303
307
  }
304
308
 
305
- /** 按稳定 Action ID 创建或更新只包含 Action Part 的 Agent Message。 */
309
+ /**
310
+ * 按稳定 Action ID 落盘一条 canonical Action。
311
+ *
312
+ * 判定顺序固定,三分支互斥:
313
+ * 1. 该 Turn 存在 writer 持有的正文 Message → Action 作为其 Part 内联;
314
+ * 2. 否则存在 id 等于 action_id 的载体 Message → 原地更新其中的 Action Part;
315
+ * 3. 否则新建仅含该 Action Part 的载体 Message。
316
+ *
317
+ * 三个分支都只写 Part,Message 终态统一由 SessionMessageState 推导。
318
+ */
306
319
  async persist_action(
307
320
  event: SessionActionEvent,
308
321
  options?: { publish_mutation?: boolean },
309
322
  ): Promise<void> {
323
+ await this.ensure_initialized();
310
324
  const publish_mutation = options?.publish_mutation !== false;
325
+ const body = event.turn_id ? this.find_open_message(event.turn_id) : undefined;
326
+ if (body) {
327
+ await this.agent_state.commit_parts(
328
+ body.message_id,
329
+ [this.resolve_streaming_action_part(body, event)],
330
+ { publish_mutation },
331
+ );
332
+ return;
333
+ }
311
334
  const existing = this.get_message(event.action_id) ||
312
335
  await this.store.read_message(event.action_id) || undefined;
313
336
  if (!existing) {
314
- const writer = await this.open_action_part({
315
- message_id: event.action_id,
316
- turn_id: event.turn_id,
317
- action_type: event.action_type,
318
- title: event.title,
319
- description: event.description,
320
- publish_mutation,
321
- });
322
- if (event.status === "completed") await writer.complete();
323
- if (event.status === "failed") {
324
- await writer.fail(event.description || event.title);
325
- }
337
+ await this.create_standalone_action_message(event, publish_mutation);
326
338
  return;
327
339
  }
328
340
  if (existing.role === "agent" && event.status !== "running") {
@@ -333,41 +345,72 @@ export class SessionMessages {
333
345
  }
334
346
  }
335
347
 
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()}`;
343
- const message = (await this.create_message((sequence, created_at) => ({
344
- message_id,
348
+ /** 查找指定 Turn 当前由 writer 持有的正文 Message(同一时刻至多一条)。 */
349
+ private find_open_message(turn_id: string): SessionAgentMessage | undefined {
350
+ const message_id = this.cache.held_message_id();
351
+ if (!message_id) return undefined;
352
+ const message = this.get_message(message_id);
353
+ if (!message || message.role !== "agent" || message.turn_id !== turn_id) {
354
+ return undefined;
355
+ }
356
+ return message;
357
+ }
358
+
359
+ /** 复用已有 Action Part 身份,为被 writer 持有的 Agent Message 构造对齐的 Action Part。 */
360
+ private resolve_streaming_action_part(
361
+ target: SessionAgentMessage,
362
+ event: SessionActionEvent,
363
+ ): SessionAgentActionPart {
364
+ const part_id = `action-part:${event.action_id}`;
365
+ const existing = target.parts.find(
366
+ (part): part is SessionAgentActionPart =>
367
+ part.type === "action" && part.part_id === part_id,
368
+ );
369
+ return create_action_part({
370
+ action_id: event.action_id,
371
+ part_id,
372
+ sequence: existing?.sequence ?? next_agent_part_sequence(target.parts),
373
+ action_type: event.action_type,
374
+ state: event.status,
375
+ title: event.title,
376
+ description: event.description,
377
+ });
378
+ }
379
+
380
+ /**
381
+ * 创建只包含单个 Action Part 的独立 Agent Message。
382
+ *
383
+ * 只在当前 Turn 没有 writer 持有的 Agent Message 时使用;Action Part 直接以事件声明的
384
+ * 目标状态落盘,不再先建后改,避免同一个 Action 产生两次 Mutation。
385
+ */
386
+ private async create_standalone_action_message(
387
+ event: SessionActionEvent,
388
+ publish_mutation: boolean,
389
+ ): Promise<void> {
390
+ const description = event.description ??
391
+ (event.status === "failed" ? event.title : undefined);
392
+ const parts = [create_action_part({
393
+ action_id: event.action_id,
394
+ part_id: `action-part:${event.action_id}`,
395
+ sequence: 1,
396
+ action_type: event.action_type,
397
+ state: event.status,
398
+ title: event.title,
399
+ ...(description ? { description } : {}),
400
+ })];
401
+ await this.create_message((sequence, created_at) => ({
402
+ message_id: event.action_id,
345
403
  session_id: this.session_id,
346
- ...(input.turn_id ? { turn_id: input.turn_id } : {}),
404
+ ...(event.turn_id ? { turn_id: event.turn_id } : {}),
347
405
  sequence,
348
406
  revision: 1,
349
407
  visibility: "visible",
350
408
  created_at,
351
409
  updated_at: created_at,
352
410
  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(
367
- this,
368
- message.message_id,
369
- input.publish_mutation !== false,
370
- );
411
+ state: resolve_session_message_state(parts, false),
412
+ parts,
413
+ }), event.status === "running", publish_mutation);
371
414
  }
372
415
 
373
416
  /** 更新 Action 状态,同时保持 message_id 与 sequence 不变。 */
@@ -377,9 +420,10 @@ export class SessionMessages {
377
420
  changes?: { title?: string; description?: string; data?: JsonObject },
378
421
  options?: { publish_mutation?: boolean },
379
422
  ): 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");
423
+ const current_message = this.get_message(message_id) || await this.store.read_message(message_id);
424
+ if (!current_message || current_message.role !== "agent") {
425
+ throw new Error(`Session agent Message not found: ${message_id}`);
426
+ }
383
427
  const action = current_message.parts.find(
384
428
  (part): part is SessionAgentActionPart => part.type === "action",
385
429
  );
@@ -393,11 +437,15 @@ export class SessionMessages {
393
437
  : {}),
394
438
  ...(changes?.data ? { data: structuredClone(changes.data) } : {}),
395
439
  };
440
+ const next_parts = current_message.parts.map((part) =>
441
+ part.part_id === action.part_id ? next_action : part);
396
442
  const message: SessionAgentMessage = {
397
443
  ...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),
444
+ state: resolve_session_message_state(
445
+ next_parts,
446
+ this.is_held_by_writer(message_id),
447
+ ),
448
+ parts: next_parts,
401
449
  revision: current_message.revision + 1,
402
450
  updated_at: Date.now(),
403
451
  };
@@ -406,8 +454,8 @@ export class SessionMessages {
406
454
  expected_revision: current_message.revision,
407
455
  changed_parts: [next_action],
408
456
  });
409
- this.accept_message(message, options?.publish_mutation !== false);
410
- return message as SessionAgentMessage;
457
+ this.cache.accept(message, options?.publish_mutation !== false);
458
+ return message;
411
459
  }
412
460
 
413
461
  /**
@@ -432,12 +480,7 @@ export class SessionMessages {
432
480
 
433
481
  const error_part: SessionAgentErrorPart = {
434
482
  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,
483
+ sequence: target ? next_agent_part_sequence(target.parts) : 1,
441
484
  type: "error",
442
485
  scope: input.scope,
443
486
  code: input.code,
@@ -445,8 +488,7 @@ export class SessionMessages {
445
488
  recoverable: input.recoverable,
446
489
  };
447
490
 
448
- if (target?.state === "streaming") {
449
- this.remember_message(target);
491
+ if (target && this.is_held_by_writer(target.message_id)) {
450
492
  await this.agent_state.commit_parts(target.message_id, [error_part]);
451
493
  const updated = await this.store.read_message(target.message_id);
452
494
  if (!updated || updated.role !== "agent") {
@@ -469,11 +511,11 @@ export class SessionMessages {
469
511
  expected_revision: target.revision,
470
512
  changed_parts: [error_part],
471
513
  });
472
- this.accept_message(message);
473
- return message as SessionAgentMessage;
514
+ this.cache.accept(message);
515
+ return message;
474
516
  }
475
517
 
476
- return (await this.create_message((sequence, created_at) => ({
518
+ const message = await this.create_message((sequence, created_at) => ({
477
519
  message_id: `agent:${this.session_id}:${generate_id()}`,
478
520
  session_id: this.session_id,
479
521
  ...(input.turn_id ? { turn_id: input.turn_id } : {}),
@@ -483,9 +525,13 @@ export class SessionMessages {
483
525
  created_at,
484
526
  updated_at: created_at,
485
527
  role: "agent",
486
- state: "done",
528
+ state: resolve_session_message_state([error_part], false),
487
529
  parts: [error_part],
488
- }))) as SessionAgentMessage;
530
+ }));
531
+ if (message.role !== "agent") {
532
+ throw new Error(`Agent Message expected: ${message.message_id}`);
533
+ }
534
+ return message;
489
535
  }
490
536
 
491
537
  /** 按 Message sequence 返回一页完整 Message 聚合。 */
@@ -510,10 +556,10 @@ export class SessionMessages {
510
556
  const messages = has_more ? page.slice(1) : page;
511
557
  const start_sequence = messages[0]?.sequence;
512
558
  const end_sequence = messages.at(-1)?.sequence;
513
- const stats = await this.store.message_stats();
559
+ const total = await this.store.message_count();
514
560
  return {
515
561
  items: messages.map((message) => structuredClone(message)),
516
- total: stats.message_count,
562
+ total,
517
563
  ...(start_sequence !== undefined ? { start_sequence } : {}),
518
564
  ...(end_sequence !== undefined ? { end_sequence } : {}),
519
565
  ...(has_more && start_sequence !== undefined
@@ -566,75 +612,6 @@ export class SessionMessages {
566
612
  }
567
613
  }
568
614
 
569
- /** @internal 只向运行投影追加 Agent 文本 delta。 */
570
- project_agent_delta(
571
- message_id: string,
572
- part_id: string,
573
- type: "text" | "reasoning",
574
- delta: string,
575
- ): void {
576
- this.agent_state.project_delta(message_id, part_id, type, delta);
577
- }
578
-
579
- /** @internal 只向运行投影追加 Agent Tool 输入 delta。 */
580
- project_agent_tool_input_delta(
581
- message_id: string,
582
- part_id: string,
583
- tool_call_id: string,
584
- delta: string,
585
- ): void {
586
- this.agent_state.project_delta(
587
- message_id,
588
- part_id,
589
- "tool_input",
590
- delta,
591
- tool_call_id,
592
- );
593
- }
594
-
595
- /** @internal 只向运行投影写入 Agent 完整 Part。 */
596
- project_agent_part(
597
- message_id: string,
598
- part: SessionAgentMessagePart,
599
- ): void {
600
- this.agent_state.project_part(message_id, part);
601
- }
602
-
603
- /** @internal 原子提交当前运行投影。 */
604
- async checkpoint_agent_message(message_id: string): Promise<void> {
605
- await this.agent_state.checkpoint(message_id);
606
- }
607
-
608
- /** @internal 原子提交一组非流式 Agent Parts。 */
609
- async commit_agent_parts(
610
- message_id: string,
611
- parts: readonly SessionAgentMessagePart[],
612
- ): Promise<void> {
613
- await this.agent_state.commit_parts(message_id, parts);
614
- }
615
-
616
- /** @internal 丢弃未提交的当前 Step 投影。 */
617
- async rollback_agent_projection(message_id: string): Promise<void> {
618
- await this.agent_state.rollback_projection(message_id);
619
- }
620
-
621
- /** @internal 原子提交当前 Assistant step 的 metadata 快照。 */
622
- async commit_agent_step(
623
- message_id: string,
624
- parts: SessionAgentMessagePart[],
625
- ): Promise<void> {
626
- await this.agent_state.commit_step(message_id, parts);
627
- }
628
-
629
- /** @internal 收口 Assistant Message。 */
630
- async complete_agent_message(
631
- message_id: string,
632
- status: "completed" | "stopped" | "failed",
633
- error?: string,
634
- ): Promise<void> {
635
- await this.agent_state.complete(message_id, status, error);
636
- }
637
-
638
615
  private async create_message(
639
616
  factory: (sequence: number, created_at: number) => SessionMessage,
640
617
  draft = false,
@@ -648,24 +625,19 @@ export class SessionMessages {
648
625
  }
649
626
  return candidate;
650
627
  });
651
- this.accept_message(message, publish_mutation);
628
+ this.cache.accept(message, publish_mutation);
652
629
  return message;
653
630
  }
654
631
 
655
- /** 读取当前流式 Assistant 中的指定 Tool Part。 */
656
- find_streaming_tool(tool_call_id: string): SessionStreamingToolLocation | undefined {
657
- return this.agent_state.find_streaming_tool(tool_call_id);
658
- }
659
-
660
632
  /** 返回当前 Session 中全部等待用户响应的 canonical Interaction。 */
661
- list_pending_interactions(): SessionAgentInteractionPart[] {
633
+ list_pending_interactions(): SessionAgentInteraction[] {
662
634
  return this.agent_state.list_pending_interactions();
663
635
  }
664
636
 
665
637
  /** 原子创建 Interaction,并把关联 Tool 转为 waiting-user。 */
666
638
  async request_interaction(
667
639
  request: SessionInteractionRequest,
668
- ): Promise<SessionAgentInteractionPart> {
640
+ ): Promise<SessionAgentInteraction> {
669
641
  return await this.agent_state.request_interaction(request);
670
642
  }
671
643
 
@@ -673,7 +645,7 @@ export class SessionMessages {
673
645
  async resolve_interaction(
674
646
  interaction_id: string,
675
647
  response: SessionInteractionResponse,
676
- ): Promise<SessionAgentInteractionPart> {
648
+ ): Promise<SessionAgentInteraction> {
677
649
  return await this.agent_state.resolve_interaction(
678
650
  interaction_id,
679
651
  response,
@@ -684,64 +656,13 @@ export class SessionMessages {
684
656
  async close_interaction(
685
657
  interaction_id: string,
686
658
  input: SessionInteractionCloseInput,
687
- ): Promise<SessionAgentInteractionPart> {
659
+ ): Promise<SessionAgentInteraction> {
688
660
  return await this.agent_state.close_interaction(interaction_id, input);
689
661
  }
690
662
 
691
- private build_message_mutation(
692
- message: SessionMessage,
693
- ): SessionMessageSnapshotMutation {
694
- return {
695
- mutation_id: generate_id(),
696
- variant: "message",
697
- role: message.role,
698
- message_id: message.message_id,
699
- sequence: message.sequence,
700
- revision: message.revision,
701
- session_id: this.session_id,
702
- ...(message.turn_id ? { turn_id: message.turn_id } : {}),
703
- created_at: message.updated_at,
704
- message,
705
- } as SessionMessageSnapshotMutation;
706
- }
707
-
708
- private accept_message(message: SessionMessage, publish_mutation = true): void {
709
- if (!publish_mutation) {
710
- this.remember_message(message);
711
- return;
712
- }
713
- this.accept_mutation(this.build_message_mutation(message), message);
714
- }
715
-
716
- private accept_mutation(mutation: SessionMutation, message: SessionMessage): void {
717
- this.remember_message(message);
718
- this.publish(mutation);
719
- }
720
-
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
- }
727
- }
728
-
729
663
  private async ensure_initialized(): Promise<void> {
730
664
  await this.initialize();
731
665
  }
732
-
733
- }
734
-
735
- function require_message<TRole extends SessionMessage["role"]>(
736
- messages: SessionMessage[],
737
- message_id: string,
738
- role: TRole,
739
- ): Extract<SessionMessage, { role: TRole }> {
740
- const message = messages.find((item) => item.message_id === message_id);
741
- if (!message || message.role !== role) {
742
- throw new Error(`Session ${role} Message not found: ${message_id}`);
743
- }
744
- return message as Extract<SessionMessage, { role: TRole }>;
745
666
  }
746
667
 
747
668
  function resolve_import_id(map: Map<string, string>, source_id: string, prefix: string): string {
@@ -752,15 +673,35 @@ function resolve_import_id(map: Map<string, string>, source_id: string, prefix:
752
673
  return created;
753
674
  }
754
675
 
755
- /** 按真实 Message 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
- );
676
+ /** 构造一个 canonical Action Part。 */
677
+ function create_action_part(input: {
678
+ /** Action 稳定业务标识。 */
679
+ action_id: string;
680
+ /** Part 在所属 Message 内的稳定标识。 */
681
+ part_id: string;
682
+ /** Part 在所属 Message 内的顺序号。 */
683
+ sequence: number;
684
+ /** Action 业务类别。 */
685
+ action_type: string;
686
+ /** Action 生命周期状态。 */
687
+ state: SessionActionStatus;
688
+ /** Action 展示标题。 */
689
+ title: string;
690
+ /** Action 展示描述。 */
691
+ description?: string;
692
+ /** Action 结构化附加数据。 */
693
+ data?: JsonObject;
694
+ }): SessionAgentActionPart {
695
+ return {
696
+ part_id: input.part_id,
697
+ sequence: input.sequence,
698
+ type: "action",
699
+ action_id: input.action_id,
700
+ action_type: input.action_type,
701
+ state: input.state,
702
+ title: input.title,
703
+ ...(input.description ? { description: input.description } : {}),
704
+ ...(input.data ? { data: structuredClone(input.data) } : {}),
705
+ };
766
706
  }
707
+