@downcity/agent 1.1.430 → 1.1.437

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/README.md +13 -11
  2. package/bin/agent/Agent.d.ts +3 -3
  3. package/bin/agent/Agent.d.ts.map +1 -1
  4. package/bin/agent/Agent.js +38 -8
  5. package/bin/agent/Agent.js.map +1 -1
  6. package/bin/agent/AgentInstructions.js +2 -2
  7. package/bin/agent/AgentInstructions.js.map +1 -1
  8. package/bin/agent/AgentMemoryStorage.d.ts.map +1 -1
  9. package/bin/agent/AgentMemoryStorage.js +1 -0
  10. package/bin/agent/AgentMemoryStorage.js.map +1 -1
  11. package/bin/agent/AgentSessions.d.ts +5 -1
  12. package/bin/agent/AgentSessions.d.ts.map +1 -1
  13. package/bin/agent/AgentSessions.js +17 -9
  14. package/bin/agent/AgentSessions.js.map +1 -1
  15. package/bin/executor/Executor.d.ts +9 -27
  16. package/bin/executor/Executor.d.ts.map +1 -1
  17. package/bin/executor/Executor.js +32 -127
  18. package/bin/executor/Executor.js.map +1 -1
  19. package/bin/executor/composer/system/default/SystemPromptAssets.d.ts +0 -4
  20. package/bin/executor/composer/system/default/SystemPromptAssets.d.ts.map +1 -1
  21. package/bin/executor/composer/system/default/SystemPromptAssets.js +0 -5
  22. package/bin/executor/composer/system/default/SystemPromptAssets.js.map +1 -1
  23. package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts +3 -9
  24. package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts.map +1 -1
  25. package/bin/executor/core-engine/CoreEngineContextCompaction.js +4 -130
  26. package/bin/executor/core-engine/CoreEngineContextCompaction.js.map +1 -1
  27. package/bin/executor/core-engine/CoreEngineRunner.d.ts +3 -30
  28. package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -1
  29. package/bin/executor/core-engine/CoreEngineRunner.js +38 -194
  30. package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -1
  31. package/bin/executor/core-engine/CoreEngineSignals.d.ts +6 -6
  32. package/bin/executor/core-engine/CoreEngineSignals.d.ts.map +1 -1
  33. package/bin/executor/core-engine/CoreEngineSignals.js +1 -1
  34. package/bin/executor/core-engine/CoreEngineSignals.js.map +1 -1
  35. package/bin/executor/messages/SessionAttachmentMapper.d.ts +2 -2
  36. package/bin/executor/messages/SessionAttachmentMapper.d.ts.map +1 -1
  37. package/bin/executor/messages/SessionAttachmentMapper.js.map +1 -1
  38. package/bin/executor/messages/SessionMessageLog.d.ts +3 -3
  39. package/bin/executor/messages/SessionMessageLog.d.ts.map +1 -1
  40. package/bin/executor/messages/SessionMessageLog.js.map +1 -1
  41. package/bin/executor/messages/SessionModelMessages.d.ts +0 -3
  42. package/bin/executor/messages/SessionModelMessages.d.ts.map +1 -1
  43. package/bin/executor/messages/SessionModelMessages.js +80 -97
  44. package/bin/executor/messages/SessionModelMessages.js.map +1 -1
  45. package/bin/executor/model/ModelStepRunner.d.ts +2 -6
  46. package/bin/executor/model/ModelStepRunner.d.ts.map +1 -1
  47. package/bin/executor/model/ModelStepRunner.js +0 -28
  48. package/bin/executor/model/ModelStepRunner.js.map +1 -1
  49. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts +7 -64
  50. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts.map +1 -1
  51. package/bin/executor/services/ExecutorRecoveryPolicy.js +29 -45
  52. package/bin/executor/services/ExecutorRecoveryPolicy.js.map +1 -1
  53. package/bin/executor/types/SessionHistoryMeta.d.ts +1 -3
  54. package/bin/executor/types/SessionHistoryMeta.d.ts.map +1 -1
  55. package/bin/executor/types/SessionHistoryMeta.js +1 -1
  56. package/bin/index.d.ts +9 -13
  57. package/bin/index.d.ts.map +1 -1
  58. package/bin/index.js +2 -4
  59. package/bin/index.js.map +1 -1
  60. package/bin/session/DefaultSessionComposer.d.ts +13 -7
  61. package/bin/session/DefaultSessionComposer.d.ts.map +1 -1
  62. package/bin/session/DefaultSessionComposer.js +26 -21
  63. package/bin/session/DefaultSessionComposer.js.map +1 -1
  64. package/bin/session/Session.d.ts +12 -19
  65. package/bin/session/Session.d.ts.map +1 -1
  66. package/bin/session/Session.js +70 -202
  67. package/bin/session/Session.js.map +1 -1
  68. package/bin/session/SessionComposition.d.ts +0 -2
  69. package/bin/session/SessionComposition.d.ts.map +1 -1
  70. package/bin/session/SessionComposition.js +30 -54
  71. package/bin/session/SessionComposition.js.map +1 -1
  72. package/bin/session/SessionLoop.d.ts +17 -16
  73. package/bin/session/SessionLoop.d.ts.map +1 -1
  74. package/bin/session/SessionLoop.js +217 -320
  75. package/bin/session/SessionLoop.js.map +1 -1
  76. package/bin/session/SessionMessages.d.ts +52 -44
  77. package/bin/session/SessionMessages.d.ts.map +1 -1
  78. package/bin/session/SessionMessages.js +285 -187
  79. package/bin/session/SessionMessages.js.map +1 -1
  80. package/bin/session/SessionQueue.d.ts +1 -1
  81. package/bin/session/SessionQueue.d.ts.map +1 -1
  82. package/bin/session/SessionQueue.js +2 -1
  83. package/bin/session/SessionQueue.js.map +1 -1
  84. package/bin/session/SessionState.d.ts +3 -7
  85. package/bin/session/SessionState.d.ts.map +1 -1
  86. package/bin/session/SessionState.js +50 -89
  87. package/bin/session/SessionState.js.map +1 -1
  88. package/bin/session/SessionSystem.d.ts +5 -1
  89. package/bin/session/SessionSystem.d.ts.map +1 -1
  90. package/bin/session/SessionSystem.js +40 -0
  91. package/bin/session/SessionSystem.js.map +1 -1
  92. package/bin/session/SessionTitle.d.ts +3 -3
  93. package/bin/session/SessionTitle.d.ts.map +1 -1
  94. package/bin/session/SessionTitle.js +2 -2
  95. package/bin/session/browse/Browse.d.ts +32 -46
  96. package/bin/session/browse/Browse.d.ts.map +1 -1
  97. package/bin/session/browse/Browse.js +104 -360
  98. package/bin/session/browse/Browse.js.map +1 -1
  99. package/bin/session/browse/SessionMessageTimeline.d.ts.map +1 -1
  100. package/bin/session/browse/SessionMessageTimeline.js +61 -37
  101. package/bin/session/browse/SessionMessageTimeline.js.map +1 -1
  102. package/bin/session/composer/policies/AdaptivePartContextPolicy.d.ts +35 -0
  103. package/bin/session/composer/policies/AdaptivePartContextPolicy.d.ts.map +1 -0
  104. package/bin/session/composer/policies/AdaptivePartContextPolicy.js +256 -0
  105. package/bin/session/composer/policies/AdaptivePartContextPolicy.js.map +1 -0
  106. package/bin/session/composer/policies/FullHistoryContextPolicy.d.ts +24 -0
  107. package/bin/session/composer/policies/FullHistoryContextPolicy.d.ts.map +1 -0
  108. package/bin/session/composer/policies/FullHistoryContextPolicy.js +31 -0
  109. package/bin/session/composer/policies/FullHistoryContextPolicy.js.map +1 -0
  110. package/bin/session/composer/policies/SessionSummaryPrompts.d.ts +16 -0
  111. package/bin/session/composer/policies/SessionSummaryPrompts.d.ts.map +1 -0
  112. package/bin/session/composer/policies/SessionSummaryPrompts.js +32 -0
  113. package/bin/session/composer/policies/SessionSummaryPrompts.js.map +1 -0
  114. package/bin/session/execution/SessionAssistantOutputAdapter.d.ts +15 -4
  115. package/bin/session/execution/SessionAssistantOutputAdapter.d.ts.map +1 -1
  116. package/bin/session/execution/SessionAssistantOutputAdapter.js +7 -3
  117. package/bin/session/execution/SessionAssistantOutputAdapter.js.map +1 -1
  118. package/bin/session/messages/{SessionActionMessageWriter.d.ts → SessionAgentActionPartWriter.d.ts} +7 -7
  119. package/bin/session/messages/SessionAgentActionPartWriter.d.ts.map +1 -0
  120. package/bin/session/messages/{SessionActionMessageWriter.js → SessionAgentActionPartWriter.js} +7 -7
  121. package/bin/session/messages/SessionAgentActionPartWriter.js.map +1 -0
  122. package/bin/session/messages/SessionAgentContent.d.ts +10 -0
  123. package/bin/session/messages/SessionAgentContent.d.ts.map +1 -0
  124. package/bin/session/messages/SessionAgentContent.js +44 -0
  125. package/bin/session/messages/SessionAgentContent.js.map +1 -0
  126. package/bin/session/messages/SessionAgentMessageState.d.ts +50 -0
  127. package/bin/session/messages/SessionAgentMessageState.d.ts.map +1 -0
  128. package/bin/session/messages/SessionAgentMessageState.js +283 -0
  129. package/bin/session/messages/SessionAgentMessageState.js.map +1 -0
  130. package/bin/session/messages/{SessionAssistantMessageWriter.d.ts → SessionAgentMessageWriter.d.ts} +22 -8
  131. package/bin/session/messages/SessionAgentMessageWriter.d.ts.map +1 -0
  132. package/bin/session/messages/{SessionAssistantMessageWriter.js → SessionAgentMessageWriter.js} +54 -42
  133. package/bin/session/messages/SessionAgentMessageWriter.js.map +1 -0
  134. package/bin/session/messages/SessionForkMessageFiles.d.ts +11 -0
  135. package/bin/session/messages/SessionForkMessageFiles.d.ts.map +1 -1
  136. package/bin/session/messages/SessionForkMessageFiles.js +8 -2
  137. package/bin/session/messages/SessionForkMessageFiles.js.map +1 -1
  138. package/bin/session/messages/SessionMessageInteractionWriter.d.ts +6 -6
  139. package/bin/session/messages/SessionMessageInteractionWriter.d.ts.map +1 -1
  140. package/bin/session/messages/SessionMessageInteractionWriter.js +4 -4
  141. package/bin/session/messages/SessionMessageInteractionWriter.js.map +1 -1
  142. package/bin/session/messages/SessionMessageText.d.ts +3 -3
  143. package/bin/session/messages/SessionMessageText.d.ts.map +1 -1
  144. package/bin/session/messages/SessionMessageText.js +0 -2
  145. package/bin/session/messages/SessionMessageText.js.map +1 -1
  146. package/bin/session/messages/SessionTurnFileDiffData.d.ts +3 -3
  147. package/bin/session/messages/SessionTurnFileDiffData.d.ts.map +1 -1
  148. package/bin/session/messages/SessionTurnFileDiffData.js.map +1 -1
  149. package/bin/session/messages/SessionUserMessage.d.ts +3 -3
  150. package/bin/session/messages/SessionUserMessage.d.ts.map +1 -1
  151. package/bin/session/messages/SessionUserMessage.js +6 -3
  152. package/bin/session/messages/SessionUserMessage.js.map +1 -1
  153. package/bin/session/preview/SessionMessagePreview.d.ts.map +1 -1
  154. package/bin/session/preview/SessionMessagePreview.js +25 -9
  155. package/bin/session/preview/SessionMessagePreview.js.map +1 -1
  156. package/bin/session/runtime/SessionTurnCompletion.d.ts +15 -0
  157. package/bin/session/runtime/SessionTurnCompletion.d.ts.map +1 -0
  158. package/bin/session/runtime/SessionTurnCompletion.js +126 -0
  159. package/bin/session/runtime/SessionTurnCompletion.js.map +1 -0
  160. package/bin/session/runtime/SessionTurnContext.d.ts.map +1 -1
  161. package/bin/session/runtime/SessionTurnContext.js +14 -19
  162. package/bin/session/runtime/SessionTurnContext.js.map +1 -1
  163. package/bin/session/runtime/SessionTurnFileDiff.d.ts +12 -0
  164. package/bin/session/runtime/SessionTurnFileDiff.d.ts.map +1 -0
  165. package/bin/session/runtime/SessionTurnFileDiff.js +71 -0
  166. package/bin/session/runtime/SessionTurnFileDiff.js.map +1 -0
  167. package/bin/session/storage/LocalSessionDataStore.d.ts +6 -41
  168. package/bin/session/storage/LocalSessionDataStore.d.ts.map +1 -1
  169. package/bin/session/storage/LocalSessionDataStore.js +19 -101
  170. package/bin/session/storage/LocalSessionDataStore.js.map +1 -1
  171. package/bin/session/storage/LocalSessionStore.d.ts +13 -5
  172. package/bin/session/storage/LocalSessionStore.d.ts.map +1 -1
  173. package/bin/session/storage/LocalSessionStore.js +153 -30
  174. package/bin/session/storage/LocalSessionStore.js.map +1 -1
  175. package/bin/session/storage/LocalStorePaths.d.ts +4 -16
  176. package/bin/session/storage/LocalStorePaths.d.ts.map +1 -1
  177. package/bin/session/storage/LocalStorePaths.js +7 -31
  178. package/bin/session/storage/LocalStorePaths.js.map +1 -1
  179. package/bin/session/storage/Metadata.d.ts +4 -4
  180. package/bin/session/storage/Metadata.d.ts.map +1 -1
  181. package/bin/session/storage/Metadata.js +3 -11
  182. package/bin/session/storage/Metadata.js.map +1 -1
  183. package/bin/session/storage/RuntimeSessionPort.d.ts +4 -4
  184. package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
  185. package/bin/session/storage/RuntimeSessionPort.js +3 -3
  186. package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
  187. package/bin/session/storage/SessionStorageCodec.d.ts +59 -0
  188. package/bin/session/storage/SessionStorageCodec.d.ts.map +1 -0
  189. package/bin/session/storage/SessionStorageCodec.js +331 -0
  190. package/bin/session/storage/SessionStorageCodec.js.map +1 -0
  191. package/bin/session/storage/SessionStorageSchema.d.ts +11 -0
  192. package/bin/session/storage/SessionStorageSchema.d.ts.map +1 -0
  193. package/bin/session/storage/SessionStorageSchema.js +131 -0
  194. package/bin/session/storage/SessionStorageSchema.js.map +1 -0
  195. package/bin/session/storage/SqliteSessionStorage.d.ts +120 -0
  196. package/bin/session/storage/SqliteSessionStorage.d.ts.map +1 -0
  197. package/bin/session/storage/SqliteSessionStorage.js +581 -0
  198. package/bin/session/storage/SqliteSessionStorage.js.map +1 -0
  199. package/bin/tools/ask/AskQuestionsTool.d.ts.map +1 -1
  200. package/bin/tools/ask/AskQuestionsTool.js +3 -1
  201. package/bin/tools/ask/AskQuestionsTool.js.map +1 -1
  202. package/bin/types/action/ActionResult.d.ts +9 -9
  203. package/bin/types/action/ActionResult.d.ts.map +1 -1
  204. package/bin/types/action/ActionResult.js +1 -1
  205. package/bin/types/agent/AgentOptions.d.ts +10 -0
  206. package/bin/types/agent/AgentOptions.d.ts.map +1 -1
  207. package/bin/types/agent/AgentStorage.d.ts +3 -1
  208. package/bin/types/agent/AgentStorage.d.ts.map +1 -1
  209. package/bin/types/agent/SessionActor.d.ts +0 -9
  210. package/bin/types/agent/SessionActor.d.ts.map +1 -1
  211. package/bin/types/agent/SessionTypes.d.ts +5 -5
  212. package/bin/types/agent/SessionTypes.d.ts.map +1 -1
  213. package/bin/types/executor/SessionAssistantOutput.d.ts +15 -4
  214. package/bin/types/executor/SessionAssistantOutput.d.ts.map +1 -1
  215. package/bin/types/executor/SessionTurnContext.d.ts +17 -19
  216. package/bin/types/executor/SessionTurnContext.d.ts.map +1 -1
  217. package/bin/types/sdk/AgentSessionAction.d.ts +1 -1
  218. package/bin/types/sdk/AgentSessionAction.js +1 -1
  219. package/bin/types/sdk/AgentSessionPrompt.d.ts +14 -5
  220. package/bin/types/sdk/AgentSessionPrompt.d.ts.map +1 -1
  221. package/bin/types/sdk/AgentSessionPrompt.js +1 -1
  222. package/bin/types/sdk/AgentSessionPrompt.js.map +1 -1
  223. package/bin/types/session/AdaptivePartContextPolicy.d.ts +31 -0
  224. package/bin/types/session/AdaptivePartContextPolicy.d.ts.map +1 -0
  225. package/bin/types/session/AdaptivePartContextPolicy.js +7 -0
  226. package/bin/types/session/AdaptivePartContextPolicy.js.map +1 -0
  227. package/bin/types/session/{SessionAssistantMessageState.d.ts → SessionAgentMessageState.d.ts} +7 -7
  228. package/bin/types/session/SessionAgentMessageState.d.ts.map +1 -0
  229. package/bin/types/session/{SessionAssistantMessageState.js → SessionAgentMessageState.js} +1 -1
  230. package/bin/types/session/SessionAgentMessageState.js.map +1 -0
  231. package/bin/types/session/SessionCommand.d.ts +19 -7
  232. package/bin/types/session/SessionCommand.d.ts.map +1 -1
  233. package/bin/types/session/SessionComposer.d.ts +43 -43
  234. package/bin/types/session/SessionComposer.d.ts.map +1 -1
  235. package/bin/types/session/SessionComposer.js +2 -2
  236. package/bin/types/session/SessionComposition.d.ts +2 -5
  237. package/bin/types/session/SessionComposition.d.ts.map +1 -1
  238. package/bin/types/session/SessionContextPolicy.d.ts +70 -0
  239. package/bin/types/session/SessionContextPolicy.d.ts.map +1 -0
  240. package/bin/types/session/SessionContextPolicy.js +8 -0
  241. package/bin/types/session/SessionContextPolicy.js.map +1 -0
  242. package/bin/types/session/SessionExecution.d.ts +5 -32
  243. package/bin/types/session/SessionExecution.d.ts.map +1 -1
  244. package/bin/types/session/SessionLoop.d.ts +3 -5
  245. package/bin/types/session/SessionLoop.d.ts.map +1 -1
  246. package/bin/types/session/SessionMessages.d.ts +18 -28
  247. package/bin/types/session/SessionMessages.d.ts.map +1 -1
  248. package/bin/types/session/SessionOptions.d.ts +5 -5
  249. package/bin/types/session/SessionOptions.d.ts.map +1 -1
  250. package/bin/types/session/SessionPort.d.ts +8 -9
  251. package/bin/types/session/SessionPort.d.ts.map +1 -1
  252. package/bin/types/session/SessionState.d.ts +2 -5
  253. package/bin/types/session/SessionState.d.ts.map +1 -1
  254. package/bin/types/session/SessionSystem.d.ts +14 -0
  255. package/bin/types/session/SessionSystem.d.ts.map +1 -1
  256. package/bin/types/session/SessionTool.d.ts +2 -2
  257. package/bin/types/session/SessionTool.d.ts.map +1 -1
  258. package/bin/types/session/SessionTurnCompletion.d.ts +23 -0
  259. package/bin/types/session/SessionTurnCompletion.d.ts.map +1 -0
  260. package/bin/types/session/SessionTurnCompletion.js +8 -0
  261. package/bin/types/session/SessionTurnCompletion.js.map +1 -0
  262. package/bin/types/session/SessionTurnFileDiff.d.ts +42 -0
  263. package/bin/types/session/SessionTurnFileDiff.d.ts.map +1 -0
  264. package/bin/types/session/SessionTurnFileDiff.js +8 -0
  265. package/bin/types/session/SessionTurnFileDiff.js.map +1 -0
  266. package/bin/types/store/LocalStore.d.ts +6 -13
  267. package/bin/types/store/LocalStore.d.ts.map +1 -1
  268. package/bin/types/store/LocalStore.js +1 -1
  269. package/bin/types/store/SessionStorage.d.ts +103 -0
  270. package/bin/types/store/SessionStorage.d.ts.map +1 -0
  271. package/bin/types/store/SessionStorage.js +8 -0
  272. package/bin/types/store/SessionStorage.js.map +1 -0
  273. package/bin/types/store/SessionStore.d.ts +5 -3
  274. package/bin/types/store/SessionStore.d.ts.map +1 -1
  275. package/package.json +2 -2
  276. package/scripts/core-engine-context-compaction.test.mjs +96 -219
  277. package/scripts/core-engine-model-stream.test.mjs +2 -4
  278. package/scripts/executor-failure-result.test.mjs +14 -17
  279. package/scripts/session-agent-message-part-order.test.mjs +63 -0
  280. package/scripts/session-initialization.test.mjs +141 -0
  281. package/scripts/session-message-timeline.test.mjs +5 -6
  282. package/scripts/session-messages-error-part.test.mjs +175 -0
  283. package/scripts/session-messages-error.test.mjs +47 -6
  284. package/scripts/session-prompt-idempotency.test.mjs +91 -0
  285. package/scripts/session-queue.test.mjs +13 -12
  286. package/scripts/session-storage-sqlite.test.mjs +209 -0
  287. package/scripts/session-turn-context.test.mjs +21 -33
  288. package/src/agent/Agent.ts +48 -12
  289. package/src/agent/AgentInstructions.ts +2 -2
  290. package/src/agent/AgentMemoryStorage.ts +1 -0
  291. package/src/agent/AgentSessions.ts +31 -12
  292. package/src/executor/Executor.ts +47 -184
  293. package/src/executor/README.md +12 -13
  294. package/src/executor/composer/system/default/SystemPromptAssets.ts +0 -6
  295. package/src/executor/core-engine/CoreEngineContextCompaction.ts +3 -135
  296. package/src/executor/core-engine/CoreEngineRunner.ts +51 -273
  297. package/src/executor/core-engine/CoreEngineSignals.ts +9 -9
  298. package/src/executor/messages/SessionAttachmentMapper.ts +4 -4
  299. package/src/executor/messages/SessionMessageLog.ts +3 -3
  300. package/src/executor/messages/SessionModelMessages.ts +85 -103
  301. package/src/executor/model/ModelStepRunner.ts +9 -41
  302. package/src/executor/services/ExecutorRecoveryPolicy.ts +34 -127
  303. package/src/executor/types/SessionHistoryMeta.ts +1 -3
  304. package/src/index.ts +39 -47
  305. package/src/session/DefaultSessionComposer.ts +33 -30
  306. package/src/session/Session.ts +96 -227
  307. package/src/session/SessionComposition.ts +28 -65
  308. package/src/session/SessionLoop.ts +267 -370
  309. package/src/session/SessionMessages.ts +363 -242
  310. package/src/session/SessionQueue.ts +3 -2
  311. package/src/session/SessionState.ts +55 -101
  312. package/src/session/SessionSystem.ts +51 -1
  313. package/src/session/SessionTitle.ts +4 -4
  314. package/src/session/browse/Browse.ts +182 -468
  315. package/src/session/browse/SessionMessageTimeline.ts +63 -38
  316. package/src/session/composer/policies/AdaptivePartContextPolicy.ts +307 -0
  317. package/src/session/composer/policies/FullHistoryContextPolicy.ts +36 -0
  318. package/src/session/composer/policies/SessionSummaryPrompts.ts +42 -0
  319. package/src/session/execution/SessionAssistantOutputAdapter.ts +25 -11
  320. package/src/session/messages/{SessionActionMessageWriter.ts → SessionAgentActionPartWriter.ts} +8 -8
  321. package/src/session/messages/SessionAgentContent.ts +56 -0
  322. package/src/session/messages/SessionAgentMessageState.ts +378 -0
  323. package/src/session/messages/{SessionAssistantMessageWriter.ts → SessionAgentMessageWriter.ts} +89 -60
  324. package/src/session/messages/SessionForkMessageFiles.ts +25 -1
  325. package/src/session/messages/SessionMessageInteractionWriter.ts +19 -19
  326. package/src/session/messages/SessionMessageText.ts +3 -4
  327. package/src/session/messages/SessionTurnFileDiffData.ts +3 -3
  328. package/src/session/messages/SessionUserMessage.ts +10 -7
  329. package/src/session/preview/SessionMessagePreview.ts +26 -9
  330. package/src/session/runtime/SessionTurnCompletion.ts +159 -0
  331. package/src/session/runtime/SessionTurnContext.ts +20 -21
  332. package/src/session/runtime/SessionTurnFileDiff.ts +105 -0
  333. package/src/session/storage/LocalSessionDataStore.ts +27 -176
  334. package/src/session/storage/LocalSessionStore.ts +170 -38
  335. package/src/session/storage/LocalStorePaths.ts +14 -86
  336. package/src/session/storage/Metadata.ts +4 -13
  337. package/src/session/storage/RuntimeSessionPort.ts +7 -7
  338. package/src/session/storage/SessionStorageCodec.ts +465 -0
  339. package/src/session/storage/SessionStorageSchema.ts +132 -0
  340. package/src/session/storage/SqliteSessionStorage.ts +776 -0
  341. package/src/tools/ask/AskQuestionsTool.ts +3 -1
  342. package/src/types/action/ActionResult.ts +10 -10
  343. package/src/types/agent/AgentOptions.ts +11 -0
  344. package/src/types/agent/AgentStorage.ts +3 -1
  345. package/src/types/agent/SessionActor.ts +0 -10
  346. package/src/types/agent/SessionTypes.ts +5 -5
  347. package/src/types/executor/SessionAssistantOutput.ts +15 -4
  348. package/src/types/executor/SessionTurnContext.ts +25 -22
  349. package/src/types/sdk/AgentSessionAction.ts +1 -1
  350. package/src/types/sdk/AgentSessionPrompt.ts +15 -5
  351. package/src/types/session/AdaptivePartContextPolicy.ts +37 -0
  352. package/src/types/session/{SessionAssistantMessageState.ts → SessionAgentMessageState.ts} +6 -6
  353. package/src/types/session/SessionCommand.ts +21 -7
  354. package/src/types/session/SessionComposer.ts +48 -48
  355. package/src/types/session/SessionComposition.ts +2 -5
  356. package/src/types/session/SessionContextPolicy.ts +77 -0
  357. package/src/types/session/SessionExecution.ts +11 -36
  358. package/src/types/session/SessionLoop.ts +3 -8
  359. package/src/types/session/SessionMessages.ts +19 -29
  360. package/src/types/session/SessionOptions.ts +5 -5
  361. package/src/types/session/SessionPort.ts +10 -10
  362. package/src/types/session/SessionState.ts +2 -5
  363. package/src/types/session/SessionSystem.ts +19 -0
  364. package/src/types/session/SessionTool.ts +2 -2
  365. package/src/types/session/SessionTurnCompletion.ts +24 -0
  366. package/src/types/session/SessionTurnFileDiff.ts +44 -0
  367. package/src/types/store/LocalStore.ts +6 -14
  368. package/src/types/store/SessionStorage.ts +121 -0
  369. package/src/types/store/SessionStore.ts +6 -3
  370. package/tsconfig.tsbuildinfo +1 -1
  371. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.d.ts +0 -45
  372. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.d.ts.map +0 -1
  373. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.js +0 -144
  374. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.js.map +0 -1
  375. package/bin/executor/composer/system/SessionSystemComposer.d.ts +0 -23
  376. package/bin/executor/composer/system/SessionSystemComposer.d.ts.map +0 -1
  377. package/bin/executor/composer/system/SessionSystemComposer.js +0 -9
  378. package/bin/executor/composer/system/SessionSystemComposer.js.map +0 -1
  379. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts +0 -43
  380. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts.map +0 -1
  381. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js +0 -42
  382. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js.map +0 -1
  383. package/bin/executor/composer/system/default/PromptRenderer.d.ts +0 -35
  384. package/bin/executor/composer/system/default/PromptRenderer.d.ts.map +0 -1
  385. package/bin/executor/composer/system/default/PromptRenderer.js +0 -23
  386. package/bin/executor/composer/system/default/PromptRenderer.js.map +0 -1
  387. package/bin/executor/composer/system/default/SystemDomain.d.ts +0 -151
  388. package/bin/executor/composer/system/default/SystemDomain.d.ts.map +0 -1
  389. package/bin/executor/composer/system/default/SystemDomain.js +0 -162
  390. package/bin/executor/composer/system/default/SystemDomain.js.map +0 -1
  391. package/bin/executor/composer/system/default/assets/task.prompt.d.ts +0 -7
  392. package/bin/executor/composer/system/default/assets/task.prompt.d.ts.map +0 -1
  393. package/bin/executor/composer/system/default/assets/task.prompt.js +0 -8
  394. package/bin/executor/composer/system/default/assets/task.prompt.js.map +0 -1
  395. package/bin/executor/composer/system/default/variables/GeoContext.d.ts +0 -14
  396. package/bin/executor/composer/system/default/variables/GeoContext.d.ts.map +0 -1
  397. package/bin/executor/composer/system/default/variables/GeoContext.js +0 -150
  398. package/bin/executor/composer/system/default/variables/GeoContext.js.map +0 -1
  399. package/bin/executor/composer/system/default/variables/PromptTypes.d.ts +0 -36
  400. package/bin/executor/composer/system/default/variables/PromptTypes.d.ts.map +0 -1
  401. package/bin/executor/composer/system/default/variables/PromptTypes.js +0 -9
  402. package/bin/executor/composer/system/default/variables/PromptTypes.js.map +0 -1
  403. package/bin/executor/composer/system/default/variables/VariableReplacer.d.ts +0 -61
  404. package/bin/executor/composer/system/default/variables/VariableReplacer.d.ts.map +0 -1
  405. package/bin/executor/composer/system/default/variables/VariableReplacer.js +0 -93
  406. package/bin/executor/composer/system/default/variables/VariableReplacer.js.map +0 -1
  407. package/bin/executor/core-engine/CoreEngineMessageState.d.ts +0 -63
  408. package/bin/executor/core-engine/CoreEngineMessageState.d.ts.map +0 -1
  409. package/bin/executor/core-engine/CoreEngineMessageState.js +0 -81
  410. package/bin/executor/core-engine/CoreEngineMessageState.js.map +0 -1
  411. package/bin/session/SessionCommand.d.ts +0 -24
  412. package/bin/session/SessionCommand.d.ts.map +0 -1
  413. package/bin/session/SessionCommand.js +0 -35
  414. package/bin/session/SessionCommand.js.map +0 -1
  415. package/bin/session/messages/SessionActionMessageWriter.d.ts.map +0 -1
  416. package/bin/session/messages/SessionActionMessageWriter.js.map +0 -1
  417. package/bin/session/messages/SessionAssistantMessageState.d.ts +0 -49
  418. package/bin/session/messages/SessionAssistantMessageState.d.ts.map +0 -1
  419. package/bin/session/messages/SessionAssistantMessageState.js +0 -296
  420. package/bin/session/messages/SessionAssistantMessageState.js.map +0 -1
  421. package/bin/session/messages/SessionAssistantMessageWriter.d.ts.map +0 -1
  422. package/bin/session/messages/SessionAssistantMessageWriter.js.map +0 -1
  423. package/bin/session/messages/SessionMessageCompaction.d.ts +0 -29
  424. package/bin/session/messages/SessionMessageCompaction.d.ts.map +0 -1
  425. package/bin/session/messages/SessionMessageCompaction.js +0 -128
  426. package/bin/session/messages/SessionMessageCompaction.js.map +0 -1
  427. package/bin/session/runtime/SessionCompactOperation.d.ts +0 -29
  428. package/bin/session/runtime/SessionCompactOperation.d.ts.map +0 -1
  429. package/bin/session/runtime/SessionCompactOperation.js +0 -66
  430. package/bin/session/runtime/SessionCompactOperation.js.map +0 -1
  431. package/bin/session/runtime/SessionHistoryCompaction.d.ts +0 -22
  432. package/bin/session/runtime/SessionHistoryCompaction.d.ts.map +0 -1
  433. package/bin/session/runtime/SessionHistoryCompaction.js +0 -31
  434. package/bin/session/runtime/SessionHistoryCompaction.js.map +0 -1
  435. package/bin/session/storage/JsonlSessionMessageStore.d.ts +0 -77
  436. package/bin/session/storage/JsonlSessionMessageStore.d.ts.map +0 -1
  437. package/bin/session/storage/JsonlSessionMessageStore.js +0 -419
  438. package/bin/session/storage/JsonlSessionMessageStore.js.map +0 -1
  439. package/bin/session/storage/SessionMessageStoreFactory.d.ts +0 -12
  440. package/bin/session/storage/SessionMessageStoreFactory.d.ts.map +0 -1
  441. package/bin/session/storage/SessionMessageStoreFactory.js +0 -13
  442. package/bin/session/storage/SessionMessageStoreFactory.js.map +0 -1
  443. package/bin/types/common/Template.d.ts +0 -9
  444. package/bin/types/common/Template.d.ts.map +0 -1
  445. package/bin/types/common/Template.js +0 -9
  446. package/bin/types/common/Template.js.map +0 -1
  447. package/bin/types/sdk/AgentSessionCompact.d.ts +0 -30
  448. package/bin/types/sdk/AgentSessionCompact.d.ts.map +0 -1
  449. package/bin/types/sdk/AgentSessionCompact.js +0 -8
  450. package/bin/types/sdk/AgentSessionCompact.js.map +0 -1
  451. package/bin/types/session/SessionAssistantMessageState.d.ts.map +0 -1
  452. package/bin/types/session/SessionAssistantMessageState.js.map +0 -1
  453. package/bin/types/session/SessionSegment.d.ts +0 -57
  454. package/bin/types/session/SessionSegment.d.ts.map +0 -1
  455. package/bin/types/session/SessionSegment.js +0 -8
  456. package/bin/types/session/SessionSegment.js.map +0 -1
  457. package/bin/types/store/SessionDataStore.d.ts +0 -88
  458. package/bin/types/store/SessionDataStore.d.ts.map +0 -1
  459. package/bin/types/store/SessionDataStore.js +0 -9
  460. package/bin/types/store/SessionDataStore.js.map +0 -1
  461. package/bin/utils/Template.d.ts +0 -17
  462. package/bin/utils/Template.d.ts.map +0 -1
  463. package/bin/utils/Template.js +0 -24
  464. package/bin/utils/Template.js.map +0 -1
  465. package/scripts/session-compaction-prompts.test.mjs +0 -49
  466. package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.ts +0 -162
  467. package/src/executor/composer/system/SessionSystemComposer.ts +0 -25
  468. package/src/executor/composer/system/default/DefaultSessionSystemComposer.ts +0 -76
  469. package/src/executor/composer/system/default/PromptRenderer.ts +0 -52
  470. package/src/executor/composer/system/default/SystemDomain.ts +0 -301
  471. package/src/executor/composer/system/default/assets/task.prompt.ts +0 -9
  472. package/src/executor/composer/system/default/assets/task.prompt.ts.txt +0 -33
  473. package/src/executor/composer/system/default/variables/GeoContext.ts +0 -180
  474. package/src/executor/composer/system/default/variables/PromptTypes.ts +0 -37
  475. package/src/executor/composer/system/default/variables/VariableReplacer.ts +0 -154
  476. package/src/executor/core-engine/CoreEngineMessageState.ts +0 -117
  477. package/src/session/SessionCommand.ts +0 -42
  478. package/src/session/messages/SessionAssistantMessageState.ts +0 -392
  479. package/src/session/messages/SessionMessageCompaction.ts +0 -160
  480. package/src/session/runtime/SessionCompactOperation.ts +0 -93
  481. package/src/session/runtime/SessionHistoryCompaction.ts +0 -45
  482. package/src/session/storage/JsonlSessionMessageStore.ts +0 -513
  483. package/src/session/storage/SessionMessageStoreFactory.ts +0 -18
  484. package/src/types/common/Template.ts +0 -9
  485. package/src/types/sdk/AgentSessionCompact.ts +0 -32
  486. package/src/types/session/SessionSegment.ts +0 -62
  487. package/src/types/store/SessionDataStore.ts +0 -113
  488. package/src/utils/Template.ts +0 -28
@@ -12,52 +12,40 @@ import test from "node:test";
12
12
 
13
13
  import { create_session_turn_context } from "../bin/session/runtime/SessionTurnContext.js";
14
14
 
15
- function create_user_message(message_id, text, created_at) {
16
- return {
17
- message_id,
18
- session_id: "session-context-test",
19
- turn_id: "turn-context-test",
20
- sequence: created_at,
21
- revision: 1,
22
- visibility: "visible",
23
- created_at,
24
- updated_at: created_at,
25
- type: "user",
26
- input_type: "steer",
27
- parts: [{
28
- part_id: `${message_id}:text`,
29
- type: "text",
30
- text,
31
- state: "done",
32
- }],
33
- };
34
- }
35
-
36
15
  test("SessionTurnContext 在检查点消费输入并封装输出缓冲", async () => {
16
+ let commit_count = 0;
17
+ const internal_messages = [];
37
18
  const context = create_session_turn_context({
38
19
  session_id: "session-context-test",
39
20
  session_origin: { type: "chat" },
40
21
  turn_id: "turn-context-test",
41
22
  project_root: "/workspace",
42
- merge_step_input: async () => [create_user_message("queued-message", "queued", 2)],
23
+ commit_step_input: async () => {
24
+ commit_count += 1;
25
+ },
26
+ append_internal_user_message: async (parts) => {
27
+ internal_messages.push(parts);
28
+ return {
29
+ message_id: "internal-1", session_id: "session-context-test",
30
+ turn_id: "turn-context-test", sequence: 1, revision: 1,
31
+ visibility: "internal", created_at: 1, updated_at: 1,
32
+ role: "user", parts: parts.map((part, index) => ({
33
+ ...part, part_id: `part-${index + 1}`, sequence: index + 1,
34
+ })),
35
+ };
36
+ },
43
37
  });
44
- context.input.inject_user_message(
45
- create_user_message("injected-message", "injected", 1),
46
- );
38
+ await context.input.append_internal([{ type: "text", text: "injected" }]);
47
39
  context.output.enqueue_assistant_parts([{
48
40
  type: "file",
49
41
  media_type: "text/plain",
50
42
  url: "/workspace/result.txt",
51
43
  }]);
52
44
 
53
- assert.deepEqual(
54
- (await context.input.checkpoint()).map((message) => message.message_id),
55
- ["injected-message", "queued-message"],
56
- );
57
- assert.deepEqual(
58
- (await context.input.checkpoint()).map((message) => message.message_id),
59
- ["queued-message"],
60
- );
45
+ await context.input.checkpoint();
46
+ await context.input.checkpoint();
47
+ assert.equal(internal_messages[0][0].text, "injected");
48
+ assert.equal(commit_count, 2);
61
49
  assert.equal(context.output.take_assistant_parts().length, 1);
62
50
  assert.equal(context.output.take_assistant_parts().length, 0);
63
51
  });
@@ -14,7 +14,10 @@ import type {
14
14
  StorageProvider,
15
15
  WorkspaceRuntime,
16
16
  } from "@downcity/type";
17
- import { normalize_instruction_input } from "@/agent/AgentInstructions.js";
17
+ import {
18
+ create_instruction_system_blocks,
19
+ normalize_instruction_input,
20
+ } from "@/agent/AgentInstructions.js";
18
21
  import type {
19
22
  AgentOptions,
20
23
  AgentSessionConstructor,
@@ -29,10 +32,13 @@ import { LocalSessionStore } from "@/session/storage/LocalSessionStore.js";
29
32
  import { EMPTY_SESSION_HOOKS } from "@/session/SessionHooks.js";
30
33
  import type { AgentStorage } from "@/types/agent/AgentStorage.js";
31
34
  import type { SessionSystemMessage } from "@/executor/types/SessionPrompts.js";
35
+ import type { SessionComposer } from "@/types/session/SessionComposer.js";
32
36
  import {
33
- resolve_session_system_messages,
34
- type SystemProfile,
35
- } from "@/executor/composer/system/default/SystemDomain.js";
37
+ build_session_system_blocks,
38
+ resolve_session_plugin_system_blocks,
39
+ } from "@/session/SessionSystem.js";
40
+ import { create_session_hook_context } from "@/session/runtime/SessionTurnContext.js";
41
+ import { resolve_system_timezone } from "@/session/storage/Metadata.js";
36
42
 
37
43
  /** SDK Agent 主体。 */
38
44
  export class Agent {
@@ -57,6 +63,9 @@ export class Agent {
57
63
  /** Agent 使用的 Session 类。 */
58
64
  readonly session_class?: AgentSessionConstructor;
59
65
 
66
+ /** 为每个 Session 创建独立 Composer 的工厂。 */
67
+ readonly session_composer?: () => SessionComposer;
68
+
60
69
  /** Agent 级日志器,不绑定任何 Workspace。 */
61
70
  private readonly logger = new Logger();
62
71
 
@@ -89,6 +98,7 @@ export class Agent {
89
98
  this.model = options.model;
90
99
  this.instruction = normalize_instruction_input(options.instruction);
91
100
  this.session_class = options.session_class;
101
+ this.session_composer = options.session_composer;
92
102
  this.custom_tools = options.tools && typeof options.tools === "object"
93
103
  ? { ...options.tools }
94
104
  : {};
@@ -99,6 +109,7 @@ export class Agent {
99
109
  ensure_agent_ready: async () => await this.ensure_ready(),
100
110
  get_agent_model: () => this.model,
101
111
  session_class: this.session_class,
112
+ create_session_composer: this.session_composer,
102
113
  on_session_routed: () => {
103
114
  if (!this.city) this.memory_session_started = true;
104
115
  },
@@ -180,19 +191,42 @@ export class Agent {
180
191
  input: {
181
192
  /** 目标 Session 稳定标识。 */
182
193
  session_id: string;
183
- /** system message 使用场景。 */
184
- profile?: SystemProfile;
185
194
  },
186
195
  ): Promise<SessionSystemMessage[]> {
187
196
  this.assert_workspace(workspace);
188
- return await resolve_session_system_messages({
197
+ const session_id = String(input.session_id || "").trim();
198
+ if (!session_id) {
199
+ throw new Error("resolve_system_messages requires a non-empty session_id");
200
+ }
201
+ const instruction_system_blocks = create_instruction_system_blocks(
202
+ [...this.get_instructions()],
203
+ workspace.path,
204
+ );
205
+ const hooks = this.city?.get_session_hooks(this.id, workspace)
206
+ ?? EMPTY_SESSION_HOOKS;
207
+ const hook_context = create_session_hook_context({
208
+ session_id,
209
+ session_origin: { type: "chat" },
210
+ project_root: workspace.path,
211
+ workspace_env: Object.freeze({ ...workspace.get_env() }),
212
+ agent_systems: instruction_system_blocks.map((block) => block.content),
213
+ });
214
+ const plugin_system_blocks = await resolve_session_plugin_system_blocks({
215
+ session_id,
216
+ hooks,
217
+ context: hook_context,
218
+ });
219
+ const blocks = await build_session_system_blocks({
220
+ agent_id: this.id,
189
221
  project_root: workspace.path,
190
- session_id: input.session_id,
191
- profile: input.profile || "chat",
192
- static_system_prompts: [...this.get_instructions()],
193
- hooks: this.city?.get_session_hooks(this.id, workspace)
194
- ?? EMPTY_SESSION_HOOKS,
222
+ session_id,
223
+ created_at: Date.now(),
224
+ timezone: resolve_system_timezone(),
225
+ get_instruction_system_blocks: () => instruction_system_blocks,
226
+ get_managed_plugin_system_blocks: async () => [],
227
+ get_plugin_system_blocks: async () => plugin_system_blocks,
195
228
  });
229
+ return blocks.map((block) => ({ role: "system", content: block.content }));
196
230
  }
197
231
 
198
232
  /** 释放 Agent 的 Session 后台任务、存储与宿主引用。 */
@@ -229,10 +263,12 @@ export class Agent {
229
263
  this.agent_storage = {
230
264
  root_path: scope.root_path,
231
265
  files: scope.files,
266
+ database_location: scope.database_location,
232
267
  sessions: new LocalSessionStore({
233
268
  files: scope.files,
234
269
  storage_root_path: scope.root_path,
235
270
  agent_id: this.id,
271
+ database_location: scope.database_location,
236
272
  }),
237
273
  };
238
274
  return this.agent_storage;
@@ -8,7 +8,7 @@
8
8
  */
9
9
 
10
10
  import type { AgentSessionSystemBlock } from "@/types/agent/SessionTypes.js";
11
- import { DEFAULT_SHIP_PROMPTS } from "@executor/composer/system/default/SystemDomain.js";
11
+ import { CORE_SYSTEM_PROMPT } from "@executor/composer/system/default/SystemPromptAssets.js";
12
12
 
13
13
  /**
14
14
  * 归一化调用方传入的静态 instruction。
@@ -28,7 +28,7 @@ export function normalize_instruction_input(
28
28
 
29
29
  function createCoreInstructionContent(project_root: string): string {
30
30
  const current_year = String(new Date().getFullYear());
31
- return DEFAULT_SHIP_PROMPTS
31
+ return CORE_SYSTEM_PROMPT
32
32
  .replaceAll("{{project_path}}", project_root)
33
33
  .replaceAll("{{project_root}}", project_root)
34
34
  .replaceAll("{{current_year}}", current_year);
@@ -191,6 +191,7 @@ export class AgentMemoryStorageProvider implements StorageProvider {
191
191
  const scope = Object.freeze({
192
192
  root_path,
193
193
  files: new AgentMemoryFileSystem(root_path),
194
+ database_location: { type: "memory" as const },
194
195
  });
195
196
  this.scopes_by_key.set(scope_key, scope);
196
197
  return scope;
@@ -29,9 +29,12 @@ import type {
29
29
  import type { AgentManagedSession } from "@/types/session/SessionOptions.js";
30
30
  import { Session } from "@/session/Session.js";
31
31
  import type { SessionPort } from "@/types/session/SessionPort.js";
32
+ import type { SessionComposer } from "@/types/session/SessionComposer.js";
32
33
  import { create_instruction_system_blocks } from "@/agent/AgentInstructions.js";
34
+ import { DefaultSessionComposer } from "@/session/DefaultSessionComposer.js";
33
35
  import type { SessionHookRuntime } from "@downcity/type";
34
36
  import type { SessionStore } from "@/types/store/SessionStore.js";
37
+ import type { SessionStorage } from "@/types/store/SessionStorage.js";
35
38
  import type { WorkspaceRuntime } from "@downcity/type";
36
39
  import type { SessionOrigin } from "@downcity/type";
37
40
  import { normalize_session_origin, normalize_session_origin_type } from "@downcity/type";
@@ -78,6 +81,9 @@ type AgentSessionsOptions = {
78
81
  */
79
82
  session_class?: AgentSessionConstructor;
80
83
 
84
+ /** 为每个 Session 创建独立 Composer 的工厂。 */
85
+ create_session_composer?: () => SessionComposer;
86
+
81
87
  /** 读取 Agent 当前持有的运行时模型实例。 */
82
88
  get_agent_model: () => ModelClient | undefined;
83
89
 
@@ -95,6 +101,7 @@ export class AgentSessions implements AgentSessionsContract<AgentSession> {
95
101
  private readonly get_instruction: AgentSessionsOptions["get_instruction"];
96
102
  private readonly ensure_agent_ready: AgentSessionsOptions["ensure_agent_ready"];
97
103
  private readonly session_class: AgentSessionConstructor;
104
+ private readonly create_session_composer: () => SessionComposer;
98
105
  private readonly get_agent_model: AgentSessionsOptions["get_agent_model"];
99
106
  private readonly on_session_routed?: AgentSessionsOptions["on_session_routed"];
100
107
  private readonly sessions_by_id = new Map<string, AgentManagedSession>();
@@ -106,6 +113,8 @@ export class AgentSessions implements AgentSessionsContract<AgentSession> {
106
113
  this.get_instruction = options.get_instruction;
107
114
  this.ensure_agent_ready = options.ensure_agent_ready;
108
115
  this.session_class = options.session_class || Session;
116
+ this.create_session_composer = options.create_session_composer ||
117
+ (() => new DefaultSessionComposer());
109
118
  this.get_agent_model = options.get_agent_model;
110
119
  this.on_session_routed = options.on_session_routed;
111
120
  }
@@ -180,9 +189,17 @@ export class AgentSessions implements AgentSessionsContract<AgentSession> {
180
189
  input?: AgentCreateSessionInput & { workspace?: WorkspaceRuntime },
181
190
  ): Promise<AgentSession> {
182
191
  const origin = normalize_session_origin(input?.origin);
192
+ const session_id = `session-${Date.now()}-${nanoid(8)}`;
193
+ const context = this.resolve_session_context(input?.workspace);
183
194
  const session = this.get_or_create_session({
195
+ session_id,
184
196
  workspace: input?.workspace,
185
197
  origin,
198
+ storage: context.store.create_session(
199
+ session_id,
200
+ origin,
201
+ context.workspace_id,
202
+ ),
186
203
  });
187
204
  this.on_session_routed?.(session.id, this);
188
205
  await session.initialize();
@@ -213,9 +230,8 @@ export class AgentSessions implements AgentSessionsContract<AgentSession> {
213
230
  `Session "${resolved_session_id}" not found in origin "${resolved_origin_type}"`,
214
231
  );
215
232
  }
216
- const persisted_metadata = await store
217
- .session(resolved_session_id, { type: resolved_origin_type }, input?.workspace?.id)
218
- .read_metadata();
233
+ const storage = await store.open_session(resolved_session_id, resolved_origin_type);
234
+ const persisted_metadata = await storage.read_metadata();
219
235
  const persisted_workspace_id = String(persisted_metadata.workspace_id || "").trim() || undefined;
220
236
  const persisted_origin = persisted_metadata.origin;
221
237
  const cached = this.sessions_by_id.get(cache_key);
@@ -236,6 +252,7 @@ export class AgentSessions implements AgentSessionsContract<AgentSession> {
236
252
  session_id: resolved_session_id,
237
253
  workspace: input?.workspace,
238
254
  origin: persisted_origin,
255
+ storage,
239
256
  });
240
257
  this.on_session_routed?.(resolved_session_id, this);
241
258
  await session.initialize();
@@ -349,7 +366,7 @@ export class AgentSessions implements AgentSessionsContract<AgentSession> {
349
366
  * 把 Session 重新绑定到另一个 Workspace。
350
367
  *
351
368
  * 关键点(中文)
352
- * - 只改写 meta.json 中的 workspace_id 并清掉运行时缓存;
369
+ * - 只改写 session_state 中的 workspace_id 并清掉运行时缓存;
353
370
  * - 之后用新 Workspace 恢复时不再触发严格的 workspace 归属校验。
354
371
  */
355
372
  async workspace(
@@ -370,10 +387,9 @@ export class AgentSessions implements AgentSessionsContract<AgentSession> {
370
387
  if (!(await context.store.has_session(resolved_session_id, resolved_origin_type))) {
371
388
  throw new Error(`Session "${resolved_session_id}" not found`);
372
389
  }
373
- const store = context.store.session(
390
+ const store = await context.store.open_session(
374
391
  resolved_session_id,
375
- { type: resolved_origin_type },
376
- context.workspace_id,
392
+ resolved_origin_type,
377
393
  );
378
394
  const metadata = await store.read_metadata();
379
395
  if (metadata.agent_id !== this.agent_id) {
@@ -397,10 +413,12 @@ export class AgentSessions implements AgentSessionsContract<AgentSession> {
397
413
  workspace?: WorkspaceRuntime;
398
414
  /** 当前 Session 的创建来源。 */
399
415
  origin?: SessionOrigin;
416
+ /** 已由集合层创建或打开的单 Session Storage。 */
417
+ storage?: SessionStorage;
400
418
  }): AgentManagedSession {
401
- const resolved_session_id =
402
- String(input?.session_id || "").trim() ||
403
- `session-${Date.now()}-${nanoid(8)}`;
419
+ const resolved_session_id = String(
420
+ input?.session_id || input?.storage?.session_id || "",
421
+ ).trim() || `session-${Date.now()}-${nanoid(8)}`;
404
422
  const origin = normalize_session_origin(input?.origin);
405
423
  const cache_key = this.session_cache_key(resolved_session_id, origin.type);
406
424
  const cached = this.sessions_by_id.get(cache_key);
@@ -412,8 +430,8 @@ export class AgentSessions implements AgentSessionsContract<AgentSession> {
412
430
  workspace_path: context.workspace_path,
413
431
  ...(context.workspace_id ? { workspace_id: context.workspace_id } : {}),
414
432
  origin,
415
- store: context.store.session(resolved_session_id, origin, context.workspace_id),
416
- get_session_store: (session_id) => context.store.session(session_id, origin, context.workspace_id),
433
+ store: input?.storage || context.store.create_session(resolved_session_id, origin, context.workspace_id),
434
+ create_session_store: (session_id) => context.store.create_session(session_id, origin, context.workspace_id),
417
435
  register_forked_session: (session) => this.register_forked_session(session),
418
436
  session_id: resolved_session_id,
419
437
  get_tools: () => context.get_tools(),
@@ -424,6 +442,7 @@ export class AgentSessions implements AgentSessionsContract<AgentSession> {
424
442
  get_agent_model: () => this.get_agent_model(),
425
443
  get_hooks: () => context.get_hooks(),
426
444
  get_managed_plugin_system_blocks: async () => [],
445
+ create_composer: this.create_session_composer,
427
446
  ensure_configured: async (session) => {
428
447
  await this.ensure_agent_ready();
429
448
  },