@downcity/agent 1.1.438 → 1.1.446

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
@@ -2,11 +2,12 @@
2
2
  * 单个 canonical Assistant Message 的流式写入器。
3
3
  *
4
4
  * Writer 直接消费 Downcity `ModelStreamEvent`,并把模型内容、Tool 状态和 Action 内容
5
- * 串行写入 `SessionMessages`。它不理解 UI Message 或 Provider 私有事件。
5
+ * 串行写入 Agent Message 状态与运行缓存。它不理解 UI Message 或 Provider 私有事件。
6
6
  */
7
7
 
8
8
  import type { ModelStreamEvent } from "@downcity/type";
9
- import type { SessionMessages } from "@/session/SessionMessages.js";
9
+ import type { SessionAgentMessageState } from "@/session/messages/SessionAgentMessageState.js";
10
+ import type { SessionMessageCache } from "@/session/messages/SessionMessageCache.js";
10
11
  import { to_session_json_value } from "@/session/messages/SessionJsonValue.js";
11
12
  import { SessionToolPartGate } from "@/session/messages/SessionToolPartGate.js";
12
13
  import type { SessionAgentContent } from "@downcity/type";
@@ -22,13 +23,25 @@ import type {
22
23
  } from "@/types/session/SessionTool.js";
23
24
  import { generate_id } from "@/utils/Id.js";
24
25
  import { create_session_agent_content_part } from "@/session/messages/SessionAgentContent.js";
26
+ import { next_agent_part_sequence } from "@/session/messages/SessionAgentParts.js";
27
+
28
+ /** Writer 构造参数。 */
29
+ export interface SessionAgentMessageWriterOptions {
30
+ /** 当前 canonical Assistant Message 标识。 */
31
+ message_id: string;
32
+ /** Agent Message 写入状态转换器。 */
33
+ state: SessionAgentMessageState;
34
+ /** Message 运行缓存。 */
35
+ cache: SessionMessageCache;
36
+ }
25
37
 
26
38
  /** 单个 Assistant Message 的流式 Writer。 */
27
39
  export class SessionAgentMessageWriter {
28
40
  /** 当前 canonical Assistant Message 标识。 */
29
41
  readonly message_id: string;
30
42
 
31
- private readonly recorder: SessionMessages;
43
+ private readonly state: SessionAgentMessageState;
44
+ private readonly cache: SessionMessageCache;
32
45
  private readonly content_part_ids = new Map<string, string>();
33
46
  private readonly tool_call_ids = new Map<string, string>();
34
47
  private readonly current_step_part_ids = new Set<string>();
@@ -39,9 +52,10 @@ export class SessionAgentMessageWriter {
39
52
  private step_active = false;
40
53
  private closed = false;
41
54
 
42
- constructor(recorder: SessionMessages, message_id: string) {
43
- this.recorder = recorder;
44
- this.message_id = message_id;
55
+ constructor(options: SessionAgentMessageWriterOptions) {
56
+ this.state = options.state;
57
+ this.cache = options.cache;
58
+ this.message_id = options.message_id;
45
59
  }
46
60
 
47
61
  /** 建立一个独立模型 Step 的 canonical Part 作用域。 */
@@ -85,7 +99,7 @@ export class SessionAgentMessageWriter {
85
99
  state: "ready",
86
100
  input: to_session_json_value(input.input),
87
101
  });
88
- await this.recorder.checkpoint_agent_message(this.message_id);
102
+ await this.state.checkpoint(this.message_id);
89
103
  });
90
104
  }
91
105
 
@@ -105,7 +119,7 @@ export class SessionAgentMessageWriter {
105
119
  state: "failed",
106
120
  error: read_tool_error(result.output),
107
121
  });
108
- await this.recorder.checkpoint_agent_message(this.message_id);
122
+ await this.state.checkpoint(this.message_id);
109
123
  });
110
124
  }
111
125
 
@@ -121,7 +135,7 @@ export class SessionAgentMessageWriter {
121
135
  }
122
136
  const current = this.current_message();
123
137
  const current_parts = current.parts.filter((part) =>
124
- this.current_step_part_ids.has(part.part_id) && part.type !== "interaction"
138
+ this.current_step_part_ids.has(part.part_id)
125
139
  );
126
140
  if (current_parts.length !== parts.length) {
127
141
  throw this.step_snapshot_error(
@@ -137,7 +151,7 @@ export class SessionAgentMessageWriter {
137
151
  this.merge_step_part(current_part, final_part, index),
138
152
  );
139
153
  }
140
- await this.recorder.commit_agent_step(
154
+ await this.state.commit_step(
141
155
  this.message_id,
142
156
  current.parts.map((part) => merged_parts.get(part.part_id) ?? part),
143
157
  );
@@ -150,7 +164,7 @@ export class SessionAgentMessageWriter {
150
164
  await this.enqueue_write(async () => {
151
165
  this.tool_part_gate.reject_pending("Assistant canonical step was aborted");
152
166
  if (this.step_active) {
153
- await this.recorder.rollback_agent_projection(this.message_id);
167
+ await this.state.rollback_projection(this.message_id);
154
168
  this.reset_step_state();
155
169
  }
156
170
  });
@@ -171,7 +185,7 @@ export class SessionAgentMessageWriter {
171
185
  appended_parts.push(canonical);
172
186
  sequence += 1;
173
187
  }
174
- await this.recorder.commit_agent_parts(this.message_id, appended_parts);
188
+ await this.state.commit_parts(this.message_id, appended_parts);
175
189
  return appended_parts;
176
190
  });
177
191
  }
@@ -198,13 +212,13 @@ export class SessionAgentMessageWriter {
198
212
  message: input.message,
199
213
  recoverable: input.recoverable,
200
214
  } satisfies SessionAgentErrorPart;
201
- await this.recorder.commit_agent_parts(this.message_id, [part]);
215
+ await this.state.commit_parts(this.message_id, [part]);
202
216
  });
203
217
  }
204
218
 
205
219
  /** 写入一个完整 canonical Assistant Part。 */
206
220
  async upsert_part(part: SessionAgentMessagePart): Promise<void> {
207
- this.recorder.project_agent_part(this.message_id, part);
221
+ this.state.project_part(this.message_id, part);
208
222
  if (this.step_active) this.current_step_part_ids.add(part.part_id);
209
223
  }
210
224
 
@@ -254,7 +268,7 @@ export class SessionAgentMessageWriter {
254
268
  if (!event.delta) return;
255
269
  const type = event.type === "text_delta" ? "text" : "reasoning";
256
270
  const part_id = this.require_content_part_id(event.content_id);
257
- this.recorder.project_agent_delta(
271
+ this.state.project_delta(
258
272
  this.message_id,
259
273
  part_id,
260
274
  type,
@@ -291,11 +305,12 @@ export class SessionAgentMessageWriter {
291
305
  if (!event.input_delta) return;
292
306
  const tool_call_id = this.require_tool_call_id(event.content_id);
293
307
  const tool = this.require_tool(tool_call_id);
294
- this.recorder.project_agent_tool_input_delta(
308
+ this.state.project_delta(
295
309
  this.message_id,
296
310
  tool.part_id,
297
- tool_call_id,
311
+ "tool_input",
298
312
  event.input_delta,
313
+ tool_call_id,
299
314
  );
300
315
  return;
301
316
  }
@@ -313,7 +328,7 @@ export class SessionAgentMessageWriter {
313
328
 
314
329
  /** 读取当前 Assistant Message 快照。 */
315
330
  private current_message(): SessionAgentMessage {
316
- const message = this.recorder.get_message(this.message_id);
331
+ const message = this.cache.get(this.message_id);
317
332
  if (!message || message.role !== "agent") {
318
333
  throw new Error(`Assistant Message not found: ${this.message_id}`);
319
334
  }
@@ -389,27 +404,15 @@ export class SessionAgentMessageWriter {
389
404
  `part ${index + 1} type ${current_part.type} != ${final_part.type}`,
390
405
  );
391
406
  }
392
- if (
393
- (current_part.type === "text" || current_part.type === "reasoning") &&
394
- (final_part.type === "text" || final_part.type === "reasoning") &&
395
- current_part.text !== final_part.text
396
- ) {
407
+ if (is_text_like(current_part) && is_text_like(final_part)
408
+ && current_part.text !== final_part.text) {
397
409
  throw this.step_snapshot_error(`part ${index + 1} text differs`);
398
410
  }
399
- if (
400
- current_part.type === "tool" &&
401
- final_part.type === "tool" &&
402
- current_part.tool_call_id !== final_part.tool_call_id
403
- ) {
411
+ if (is_agent_part_type(current_part, "tool") && is_agent_part_type(final_part, "tool")
412
+ && current_part.tool_call_id !== final_part.tool_call_id) {
404
413
  throw this.step_snapshot_error(`part ${index + 1} tool_call_id differs`);
405
414
  }
406
- return {
407
- ...current_part,
408
- ...final_part,
409
- part_id: current_part.part_id,
410
- sequence: current_part.sequence,
411
- step_id: current_part.step_id,
412
- } as SessionAgentMessagePart;
415
+ return merge_same_part(current_part, final_part);
413
416
  }
414
417
 
415
418
  /** 构造不包含正文与 Tool 输出的结构化 Step 快照错误。 */
@@ -436,10 +439,7 @@ export class SessionAgentMessageWriter {
436
439
 
437
440
  /** 计算下一个不可变 Part 顺序号。 */
438
441
  private next_part_sequence(): number {
439
- return this.current_message().parts.reduce(
440
- (sequence, part) => Math.max(sequence, part.sequence + 1),
441
- 1,
442
- );
442
+ return next_agent_part_sequence(this.current_message().parts);
443
443
  }
444
444
 
445
445
  /** 串行执行对当前 Assistant Message 的全部写操作。 */
@@ -459,18 +459,55 @@ export class SessionAgentMessageWriter {
459
459
  `Assistant Message writer closed with status ${status}`,
460
460
  );
461
461
  this.reset_step_state();
462
- await this.recorder.complete_agent_message(this.message_id, status, error);
462
+ await this.state.complete(this.message_id, status, error);
463
463
  this.closed = true;
464
464
  }
465
465
  }
466
466
 
467
+ /** 文本与推理 Part 都携带可直接比较的正文。 */
468
+ type TextLikeAgentPart = Extract<SessionAgentMessagePart, { type: "text" | "reasoning" }>;
469
+
470
+ /** 判断 Part 是否属于指定类型。 */
471
+ function is_agent_part_type<T extends SessionAgentMessagePart["type"]>(
472
+ part: SessionAgentMessagePart,
473
+ type: T,
474
+ ): part is Extract<SessionAgentMessagePart, { type: T }> {
475
+ return part.type === type;
476
+ }
477
+
478
+ /** 判断 Part 是否携带可直接比较的正文。 */
479
+ function is_text_like(part: SessionAgentMessagePart): part is TextLikeAgentPart {
480
+ return part.type === "text" || part.type === "reasoning";
481
+ }
482
+
483
+ /** 合并同一类型的两个 Part,只保留当前快照的规范身份字段。 */
484
+ function merge_same_part<T extends SessionAgentMessagePart["type"]>(
485
+ current: Extract<SessionAgentMessagePart, { type: T }>,
486
+ final: Extract<SessionAgentMessagePart, { type: T }>,
487
+ ): Extract<SessionAgentMessagePart, { type: T }> {
488
+ return {
489
+ ...current,
490
+ ...final,
491
+ part_id: current.part_id,
492
+ sequence: current.sequence,
493
+ step_id: current.step_id,
494
+ };
495
+ }
496
+
467
497
  /** 从 Tool 失败输出中提取稳定错误文本。 */
468
498
  function read_tool_error(output: unknown): string {
469
- if (output && typeof output === "object") {
470
- const result = output as { error?: unknown; message?: unknown; output?: unknown };
471
- for (const candidate of [result.error, result.message, result.output]) {
472
- if (typeof candidate === "string" && candidate.trim()) return candidate;
473
- }
499
+ for (const candidate of read_tool_error_candidates(output)) {
500
+ if (typeof candidate === "string" && candidate.trim()) return candidate;
474
501
  }
475
502
  return "Tool execution failed";
476
503
  }
504
+
505
+ /** 读取 Tool 失败输出中可能携带错误文本的字段。 */
506
+ function read_tool_error_candidates(output: unknown): unknown[] {
507
+ if (typeof output !== "object" || output === null) return [];
508
+ return [
509
+ "error" in output ? output.error : undefined,
510
+ "message" in output ? output.message : undefined,
511
+ "output" in output ? output.output : undefined,
512
+ ];
513
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * canonical Agent Message Part 的共享纯函数。
3
+ *
4
+ * Part 变更比较与顺序号计算在 Canonical Message、运行投影和流式 Writer 中含义完全一致,
5
+ * 只在本模块实现一次,避免同一表达式在多处漂移。
6
+ */
7
+
8
+ import type { SessionAgentMessagePart } from "@downcity/type";
9
+
10
+ /** 判断两个 Part 快照是否表示同一个 canonical 版本。 */
11
+ export function is_same_agent_part(
12
+ left: SessionAgentMessagePart | undefined,
13
+ right: SessionAgentMessagePart,
14
+ ): boolean {
15
+ return left !== undefined && JSON.stringify(left) === JSON.stringify(right);
16
+ }
17
+
18
+ /** 返回相较上一稳定快照新增或载荷发生变化的 Parts。 */
19
+ export function resolve_changed_agent_parts(
20
+ current: readonly SessionAgentMessagePart[],
21
+ next: readonly SessionAgentMessagePart[],
22
+ ): SessionAgentMessagePart[] {
23
+ const current_by_id = new Map(
24
+ current.map((part) => [part.part_id, part]),
25
+ );
26
+ return next.filter(
27
+ (part) => !is_same_agent_part(current_by_id.get(part.part_id), part),
28
+ );
29
+ }
30
+
31
+ /** 计算追加到 Agent Message 末尾的下一个 Part 顺序号。 */
32
+ export function next_agent_part_sequence(
33
+ parts: readonly SessionAgentMessagePart[],
34
+ ): number {
35
+ return parts.reduce(
36
+ (sequence, part) => Math.max(sequence, part.sequence + 1),
37
+ 1,
38
+ );
39
+ }
@@ -9,10 +9,10 @@ import type { ModelStreamEvent } from "@downcity/type";
9
9
  import {
10
10
  SessionAgentMessageWriter,
11
11
  SessionMessages,
12
- } from "@/session/SessionMessages.js";
12
+ } from "@/session/messages/SessionMessages.js";
13
13
  import type { SessionAgentContent } from "@downcity/type";
14
14
  import type { SessionAgentMessagePart } from "@downcity/type";
15
- import type { SessionAssistantOutput } from "@/types/executor/SessionAssistantOutput.js";
15
+ import type { SessionAssistantOutput } from "@/types/turn/SessionAssistantOutput.js";
16
16
  import type {
17
17
  SessionToolExecutionResult,
18
18
  SessionToolInputReady,
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Session 用户异步交互运行时。
3
+ *
4
+ * 关键点(中文)
5
+ * - 本模块只拥有 pending waiter 与恢复执行;Interaction 的权威状态由 SessionMessages 持久化。
6
+ * 任何终态都必须先提交 canonical Message,再兑现等待 Promise。
7
+ * - 原语只认识信封与 type 字符串:payload 的解释属于它的生产者。
8
+ * - 审批的专用入口(模式判断与决定解释)由 {@link ApprovalInteraction} 承担。
9
+ *
10
+ * Interaction 没有超时:它只能由用户响应,或随所属 Turn/Session 结束而被取消。
11
+ */
12
+
13
+ import type { SessionMessages } from "@/session/messages/SessionMessages.js";
14
+ import { ApprovalInteraction } from "@/session/messages/ApprovalInteraction.js";
15
+ import type {
16
+ RespondSessionInteractionInput,
17
+ SessionApprovalMode,
18
+ SessionInteractionHandle,
19
+ SessionInteractionLifecycle,
20
+ SessionInteractionPort,
21
+ SessionInteractionRequest,
22
+ SessionInteractionRequestInput,
23
+ SessionInteractionResponse,
24
+ SessionInteractionResult,
25
+ } from "@downcity/type";
26
+ import type { SessionPendingInteractionRuntime } from "@/types/session/SessionInteractions.js";
27
+ import { generate_id } from "@/utils/Id.js";
28
+
29
+ /** 单个 Session 的异步用户交互入口。 */
30
+ export class SessionInteractions implements SessionInteractionPort, SessionInteractionLifecycle {
31
+ /** 审批专用入口;长生命周期,每次调用只传身份与 payload。 */
32
+ readonly approval: ApprovalInteraction;
33
+ private readonly session_id: string;
34
+ private readonly messages: SessionMessages;
35
+ private readonly pending_by_id = new Map<
36
+ string,
37
+ SessionPendingInteractionRuntime
38
+ >();
39
+
40
+ constructor(options: {
41
+ /** 当前 Interaction 运行时所属 Session 标识。 */
42
+ session_id: string;
43
+ /** 当前 Session 的 canonical Message 入口。 */
44
+ messages: SessionMessages;
45
+ /** 读取当前 Session 审批模式;always-allow 在审批入口内生效。 */
46
+ read_approval_mode?: () => SessionApprovalMode;
47
+ }) {
48
+ this.session_id = String(options.session_id || "").trim();
49
+ this.messages = options.messages;
50
+ if (!this.session_id) {
51
+ throw new Error("SessionInteractions requires a non-empty session_id");
52
+ }
53
+ this.approval = new ApprovalInteraction({
54
+ interactions: this,
55
+ read_mode: options.read_approval_mode ?? (() => "ask"),
56
+ });
57
+ }
58
+
59
+ /**
60
+ * 创建并持久化一次 Interaction,返回等待终态结果的句柄。
61
+ *
62
+ * 关键点(中文)
63
+ * - 调用方只提供语义字段;`interaction_id`、`created_at` 与 `source` 在这里补齐。
64
+ */
65
+ async request(
66
+ input: SessionInteractionRequestInput,
67
+ ): Promise<SessionInteractionHandle> {
68
+ const request: SessionInteractionRequest = {
69
+ interaction_id: `interaction:${generate_id()}`,
70
+ turn_id: input.turn_id,
71
+ type: input.type,
72
+ source: {
73
+ type: input.source_type ?? "tool",
74
+ tool_call_id: input.tool_call_id,
75
+ ...(input.tool_name ? { tool_name: input.tool_name } : {}),
76
+ },
77
+ ...(input.title ? { title: input.title } : {}),
78
+ ...(input.description ? { description: input.description } : {}),
79
+ payload: input.payload,
80
+ ...(input.response_schema ? { response_schema: input.response_schema } : {}),
81
+ created_at: Date.now(),
82
+ };
83
+ this.validate_request(request);
84
+ if (this.pending_by_id.has(request.interaction_id)) {
85
+ throw new Error(`Session Interaction is already pending: ${request.interaction_id}`);
86
+ }
87
+
88
+ let resolve_result!: (result: SessionInteractionResult) => void;
89
+ const result = new Promise<SessionInteractionResult>((resolve) => {
90
+ resolve_result = resolve;
91
+ });
92
+ const pending: SessionPendingInteractionRuntime = {
93
+ request: structuredClone(request),
94
+ resolve: resolve_result,
95
+ };
96
+ this.pending_by_id.set(request.interaction_id, pending);
97
+
98
+ try {
99
+ await this.messages.request_interaction(request);
100
+ } catch (error) {
101
+ this.pending_by_id.delete(request.interaction_id);
102
+ throw error;
103
+ }
104
+
105
+ return {
106
+ interaction_id: request.interaction_id,
107
+ result,
108
+ };
109
+ }
110
+
111
+ /** 返回当前 Session 全部 pending Interaction 请求快照。 */
112
+ list(): SessionInteractionRequest[] {
113
+ return this.messages.list_pending_interactions().map((interaction) => interaction.request);
114
+ }
115
+
116
+ /** 保存用户响应,并在提交成功后恢复原执行。 */
117
+ async respond(
118
+ input: RespondSessionInteractionInput,
119
+ ): Promise<SessionInteractionResult> {
120
+ const pending = this.require_pending(input.interaction_id);
121
+ this.validate_response(pending.request, input.response);
122
+ await this.messages.resolve_interaction(
123
+ input.interaction_id,
124
+ input.response,
125
+ );
126
+ const result: SessionInteractionResult = input.response.outcome === "denied"
127
+ ? {
128
+ status: "denied",
129
+ interaction_id: input.interaction_id,
130
+ reason: extract_interaction_reason(input.response.payload),
131
+ }
132
+ : {
133
+ status: "resolved",
134
+ interaction_id: input.interaction_id,
135
+ response: structuredClone(input.response),
136
+ };
137
+ this.finish_pending(input.interaction_id, result);
138
+ return result;
139
+ }
140
+
141
+ /** 取消当前 Session 的全部 pending Interaction。 */
142
+ async cancel_all(
143
+ reason: "turn_stopped" | "session_disposed" | "runtime_interrupted",
144
+ ): Promise<void> {
145
+ let first_error: unknown;
146
+ for (const interaction_id of [...this.pending_by_id.keys()]) {
147
+ const result: SessionInteractionResult = {
148
+ status: "cancelled",
149
+ interaction_id,
150
+ reason,
151
+ };
152
+ try {
153
+ await this.messages.close_interaction(interaction_id, { reason });
154
+ this.finish_pending(interaction_id, result);
155
+ } catch (error) {
156
+ first_error ??= error;
157
+ }
158
+ }
159
+ if (first_error) throw first_error;
160
+ }
161
+
162
+ /**
163
+ * 校验执行面提交的 Interaction 信封。
164
+ *
165
+ * 核心不认识业务类型:`payload` 的类型就是 `JsonValue`,怎么解释由它的生产者负责。
166
+ * 因此这里只检查信封自身,不拆业务字段。
167
+ */
168
+ private validate_request(request: SessionInteractionRequest): void {
169
+ if (!String(request.interaction_id || "").trim()) {
170
+ throw new Error("Session Interaction requires interaction_id");
171
+ }
172
+ if (!String(request.turn_id || "").trim()) {
173
+ throw new Error("Session Interaction requires turn_id");
174
+ }
175
+ if (!String(request.type || "").trim()) {
176
+ throw new Error("Session Interaction requires a non-empty type");
177
+ }
178
+ if (!request.source || typeof request.source !== "object") {
179
+ throw new Error("Session Interaction requires a source");
180
+ }
181
+ if (!String(request.source.tool_call_id || "").trim()) {
182
+ throw new Error("Session Interaction requires the Tool Call it belongs to");
183
+ }
184
+ }
185
+
186
+ /** 校验响应信封:type 必须与请求一致,outcome 必须合法。 */
187
+ private validate_response(
188
+ request: SessionInteractionRequest,
189
+ response: SessionInteractionResponse,
190
+ ): void {
191
+ if (request.type !== response.type) {
192
+ throw new Error("Session Interaction response type mismatch");
193
+ }
194
+ if (response.outcome !== "resolved" && response.outcome !== "denied") {
195
+ throw new Error("Session Interaction response requires a valid outcome");
196
+ }
197
+ }
198
+
199
+ /** 读取当前 pending Interaction 运行态。 */
200
+ private require_pending(
201
+ interaction_id: string,
202
+ ): SessionPendingInteractionRuntime {
203
+ const pending = this.pending_by_id.get(interaction_id);
204
+ if (pending) return pending;
205
+ throw new Error(`Pending Session Interaction not found: ${interaction_id}`);
206
+ }
207
+
208
+ /** 清理运行态并兑现执行方等待 Promise。 */
209
+ private finish_pending(
210
+ interaction_id: string,
211
+ result: SessionInteractionResult,
212
+ ): void {
213
+ const pending = this.pending_by_id.get(interaction_id);
214
+ if (!pending) return;
215
+ this.pending_by_id.delete(interaction_id);
216
+ pending.resolve(result);
217
+ }
218
+ }
219
+
220
+ /** 从通用响应 payload 中读取可选的人类可读拒绝原因。 */
221
+ function extract_interaction_reason(payload: unknown): string | undefined {
222
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
223
+ return undefined;
224
+ }
225
+ const reason = (payload as { reason?: unknown }).reason;
226
+ return typeof reason === "string" ? reason : undefined;
227
+ }
@@ -5,7 +5,7 @@
5
5
  * 避免 Tool、User Data 等外部输入污染 canonical Message。
6
6
  */
7
7
 
8
- import type { JsonObject, JsonValue } from "@downcity/type";
8
+ import type { JsonValue } from "@downcity/type";
9
9
 
10
10
  /** 把任意运行时输入转换为可持久化的 JSON 值。 */
11
11
  export function to_session_json_value(input: unknown): JsonValue {
@@ -24,20 +24,3 @@ export function to_session_json_value(input: unknown): JsonValue {
24
24
  }
25
25
  }
26
26
 
27
- /** 把任意运行时输入转换为可持久化 JSON 对象,非对象输入返回 undefined。 */
28
- export function to_session_json_object(input: unknown): JsonObject | undefined {
29
- if (!is_plain_object(input)) return undefined;
30
- try {
31
- const value = JSON.parse(JSON.stringify(input)) as unknown;
32
- return is_plain_object(value) ? value as JsonObject : undefined;
33
- } catch {
34
- return undefined;
35
- }
36
- }
37
-
38
- /** 判断未知值是否为普通对象。 */
39
- function is_plain_object(input: unknown): input is Record<string, unknown> {
40
- if (!input || typeof input !== "object" || Array.isArray(input)) return false;
41
- const prototype = Object.getPrototypeOf(input);
42
- return prototype === Object.prototype || prototype === null;
43
- }