@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
@@ -0,0 +1,202 @@
1
+ /**
2
+ * @file 验证 Interaction 嵌套在所属 Tool Part 内,而不是作为独立 Part 平级存在。
3
+ *
4
+ * Interaction 与 Tool 是归属关系:Tool 在等待响应时阻塞,因此一次 Interaction 的
5
+ * 完整生命周期落在所属 Tool 的执行区间内,归属即结构,需求顺序由数组顺序表达。
6
+ */
7
+
8
+ import assert from "node:assert/strict";
9
+ import test from "node:test";
10
+ import { SessionAgentMessageState } from "../bin/session/messages/SessionAgentMessageState.js";
11
+ import { SessionMessageCache } from "../bin/session/messages/SessionMessageCache.js";
12
+ import { SessionMessages } from "../bin/session/messages/SessionMessages.js";
13
+
14
+ /** 构造一条含 ready 状态 Tool Part 的流式 Assistant Message fixture。 */
15
+ function create_writer_fixture() {
16
+ let message = {
17
+ message_id: "agent:session-1:1",
18
+ session_id: "session-1",
19
+ turn_id: "turn-1",
20
+ sequence: 1,
21
+ revision: 1,
22
+ visibility: "visible",
23
+ created_at: 1,
24
+ updated_at: 1,
25
+ role: "agent",
26
+ state: "streaming",
27
+ parts: [
28
+ {
29
+ part_id: "tool:call-9",
30
+ sequence: 1,
31
+ step_id: "step-1",
32
+ type: "tool",
33
+ tool_call_id: "call-9",
34
+ tool_name: "ask_question",
35
+ state: "ready",
36
+ },
37
+ ],
38
+ };
39
+ // 缓存与 State 都是真实实例:Interaction 变更依赖“读取当前快照 → 替换 Tool”的
40
+ // 串行语义,用桩会绕过被验证的部分。
41
+ const cache = new SessionMessageCache({
42
+ session_id: "session-1",
43
+ publish: () => {},
44
+ });
45
+ cache.set_held(message.message_id);
46
+ cache.accept(message, false);
47
+ const store = {
48
+ read_message: async (message_id) =>
49
+ message_id === message.message_id ? structuredClone(message) : null,
50
+ update_message: async (input) => {
51
+ message = structuredClone(input.message);
52
+ cache.accept(message, false);
53
+ },
54
+ };
55
+ const state = new SessionAgentMessageState({
56
+ session_id: "session-1",
57
+ store,
58
+ cache,
59
+ });
60
+ return {
61
+ state,
62
+ read_parts: () => message.parts,
63
+ read_tool: () => message.parts.find((part) => part.type === "tool"),
64
+ };
65
+ }
66
+
67
+ /** 构造一次属于 call-9 的提问请求。 */
68
+ function create_question_request(interaction_id = "interaction-1") {
69
+ return {
70
+ interaction_id,
71
+ turn_id: "turn-1",
72
+ type: "question",
73
+ source: { type: "tool", tool_call_id: "call-9", tool_name: "ask_question" },
74
+ payload: { questions: [] },
75
+ created_at: 1,
76
+ };
77
+ }
78
+
79
+ test("Interaction 创建后嵌套在所属 Tool Part 内,不再平级存在", async () => {
80
+ const fixture = create_writer_fixture();
81
+
82
+ const interaction = await fixture.state.request_interaction(create_question_request());
83
+
84
+ assert.equal(interaction.status, "pending");
85
+ // 关键断言:Message 只有一个 Part,Interaction 不是其中之一。
86
+ assert.deepEqual(fixture.read_parts().map((part) => part.type), ["tool"]);
87
+ const tool = fixture.read_tool();
88
+ assert.equal(tool.state, "waiting-user");
89
+ assert.deepEqual(
90
+ tool.interactions.map((item) => item.interaction_id),
91
+ ["interaction-1"],
92
+ );
93
+ });
94
+
95
+ test("用户响应后 Tool 恢复运行,Interaction 就地终结", async () => {
96
+ const fixture = create_writer_fixture();
97
+ await fixture.state.request_interaction(create_question_request());
98
+
99
+ await fixture.state.resolve_interaction("interaction-1", {
100
+ type: "question",
101
+ outcome: "resolved",
102
+ payload: { answers: [{ question_id: "q1", value: "main" }] },
103
+ });
104
+
105
+ assert.deepEqual(fixture.read_parts().map((part) => part.type), ["tool"]);
106
+ const tool = fixture.read_tool();
107
+ assert.equal(tool.state, "running");
108
+ assert.equal(tool.interactions[0].status, "resolved");
109
+ assert.deepEqual(fixture.state.list_pending_interactions(), []);
110
+ });
111
+
112
+ test("拒绝响应会把所属 Tool 标记为失败", async () => {
113
+ const fixture = create_writer_fixture();
114
+ await fixture.state.request_interaction(create_question_request());
115
+
116
+ await fixture.state.resolve_interaction("interaction-1", {
117
+ type: "question",
118
+ outcome: "denied",
119
+ payload: {},
120
+ });
121
+
122
+ const tool = fixture.read_tool();
123
+ assert.equal(tool.state, "failed");
124
+ assert.equal(tool.interactions[0].status, "denied");
125
+ assert.equal(tool.error, "Interaction denied");
126
+ });
127
+
128
+ test("取消未响应交互会把所属 Tool 标记为失败并保留原因", async () => {
129
+ const fixture = create_writer_fixture();
130
+ await fixture.state.request_interaction(create_question_request());
131
+
132
+ await fixture.state.close_interaction("interaction-1", {
133
+ reason: "turn_stopped",
134
+ });
135
+
136
+ const tool = fixture.read_tool();
137
+ assert.equal(tool.state, "failed");
138
+ assert.equal(tool.error, "Interaction cancelled");
139
+ assert.equal(tool.interactions[0].status, "cancelled");
140
+ assert.equal(tool.interactions[0].cancel_reason, "turn_stopped");
141
+ });
142
+
143
+ test("等待中的 Interaction 可以按 Tool 归属查询", async () => {
144
+ const fixture = create_writer_fixture();
145
+ await fixture.state.request_interaction(create_question_request("interaction-1"));
146
+ await fixture.state.request_interaction(create_question_request("interaction-2"));
147
+
148
+ assert.deepEqual(
149
+ fixture.state.list_pending_interactions().map((item) => item.interaction_id),
150
+ ["interaction-1", "interaction-2"],
151
+ );
152
+ // 同一 Tool 内部按发生顺序保留。
153
+ assert.deepEqual(
154
+ fixture.read_tool().interactions.map((item) => item.interaction_id),
155
+ ["interaction-1", "interaction-2"],
156
+ );
157
+ });
158
+
159
+ test("Message 收口仍然整条发布,消费方才能收敛 state", async () => {
160
+ const stored_messages = [];
161
+ const publications = [];
162
+ const store = {
163
+ initialize: async () => {},
164
+ list_messages: async () => structuredClone(stored_messages),
165
+ list_recoverable_agent_messages: async () => [],
166
+ read_message: async (message_id) => structuredClone(
167
+ stored_messages.find((message) => message.message_id === message_id) ?? null,
168
+ ),
169
+ message_stats: async () => ({ message_count: 0, storage_bytes: 0, latest_message: null }),
170
+ create_message: async (build_message) => {
171
+ const message = build_message({ message_sequence: 1 });
172
+ stored_messages.push(structuredClone(message));
173
+ return structuredClone(message);
174
+ },
175
+ update_message: async ({ message, expected_revision }) => {
176
+ const index = stored_messages.findIndex(
177
+ (candidate) => candidate.message_id === message.message_id,
178
+ );
179
+ if (stored_messages[index]?.revision !== expected_revision) {
180
+ throw new Error("revision conflict");
181
+ }
182
+ stored_messages[index] = structuredClone(message);
183
+ },
184
+ };
185
+ const messages = new SessionMessages({
186
+ session_id: "session-1",
187
+ store,
188
+ publish: (mutation) => publications.push(mutation),
189
+ });
190
+ await messages.initialize();
191
+ const writer = await messages.open_agent_message({ turn_id: "turn-1" });
192
+ await writer.append_result_parts([{ type: "text", text: "处理中" }]);
193
+
194
+ publications.length = 0;
195
+ await writer.complete();
196
+
197
+ assert.deepEqual(
198
+ publications.map((mutation) => mutation.variant),
199
+ ["message"],
200
+ );
201
+ assert.equal(publications[0].message.state, "done");
202
+ });
@@ -4,7 +4,7 @@
4
4
 
5
5
  import assert from "node:assert/strict";
6
6
  import test from "node:test";
7
- import { SessionMessages } from "../bin/session/SessionMessages.js";
7
+ import { SessionMessages } from "../bin/session/messages/SessionMessages.js";
8
8
 
9
9
  /** 创建支持聚合创建和 expected revision 更新的最小内存 SessionStorage。 */
10
10
  function create_fixture(initial_messages = []) {
@@ -4,7 +4,7 @@
4
4
 
5
5
  import assert from "node:assert/strict";
6
6
  import test from "node:test";
7
- import { SessionMessages } from "../bin/session/SessionMessages.js";
7
+ import { SessionMessages } from "../bin/session/messages/SessionMessages.js";
8
8
 
9
9
  function create_messages(store) {
10
10
  return new SessionMessages({
@@ -5,8 +5,8 @@
5
5
  import { createHash } from "node:crypto";
6
6
  import assert from "node:assert/strict";
7
7
  import test from "node:test";
8
- import { SessionLoop } from "../bin/session/SessionLoop.js";
9
- import { SessionQueue } from "../bin/session/SessionQueue.js";
8
+ import { SessionLoop } from "../bin/session/loop/SessionLoop.js";
9
+ import { SessionQueue } from "../bin/session/loop/SessionQueue.js";
10
10
 
11
11
  /** 创建只覆盖已完成幂等请求读取路径的最小 SessionLoop。 */
12
12
  function create_loop(request_id) {
@@ -52,7 +52,9 @@ function create_loop(request_id) {
52
52
  execute_count += 1;
53
53
  return { text: "unexpected", success: true };
54
54
  },
55
+ is_executing: () => false,
55
56
  },
57
+ advance_context: async () => false,
56
58
  maintain_context: async () => {},
57
59
  state: { ensure_runnable: async () => {} },
58
60
  messages: {
@@ -4,7 +4,7 @@
4
4
 
5
5
  import assert from "node:assert/strict";
6
6
  import test from "node:test";
7
- import { SessionQueue } from "../bin/session/SessionQueue.js";
7
+ import { SessionQueue } from "../bin/session/loop/SessionQueue.js";
8
8
 
9
9
  function create_command(name, executed, cancel) {
10
10
  return {
@@ -98,3 +98,23 @@ test("SessionQueue 保留 Command 的类别与完成信息", async () => {
98
98
  assert.equal(command.kind, "maintenance");
99
99
  assert.deepEqual(command.completion, completion);
100
100
  });
101
+
102
+ test("SessionQueue drain_maintenance 只取出 Maintenance 并保留 Prompt", async () => {
103
+ const queue = new SessionQueue();
104
+ const executed = [];
105
+ const prompt = create_command("prompt", executed, () => {});
106
+ const first_maintenance = create_command("config-1", executed);
107
+ const second_maintenance = create_command("config-2", executed);
108
+ queue.enqueue_command(prompt);
109
+ queue.enqueue_command(first_maintenance);
110
+ queue.enqueue_command(second_maintenance);
111
+
112
+ const drained = queue.drain_maintenance();
113
+ assert.deepEqual(drained, [first_maintenance, second_maintenance]);
114
+ for (const command of drained) await command.execute();
115
+ assert.deepEqual(executed, ["config-1", "config-2"]);
116
+
117
+ // Prompt 必须留在队列里由后续 Turn 消费。
118
+ assert.equal(queue.take_next(), prompt);
119
+ assert.equal(queue.has_command(), false);
120
+ });
@@ -1,4 +1,4 @@
1
- /** @file 验证 SessionStorage 的 SQLite 事务、投影、恢复与 Policy 隔离边界。 */
1
+ /** @file 验证 SessionStorage 的 SQLite 事务、投影、恢复与派生 namespace 隔离边界。 */
2
2
 
3
3
  import assert from "node:assert/strict";
4
4
  import fs from "node:fs/promises";
@@ -121,11 +121,11 @@ test("Storage 只查询中断状态,不擅自解释领域恢复语义", async
121
121
  await reopened.dispose();
122
122
  });
123
123
 
124
- test("Composer Policy 只能写自己的派生 namespace,clear 触发 FK 清理", async () => {
124
+ test("Composer 只能写自己的派生 namespace,clear 触发 FK 清理", async () => {
125
125
  const directory_path = await fs.mkdtemp(path.join(os.tmpdir(), "downcity-session-storage-"));
126
126
  const storage = await create_storage(directory_path);
127
127
  await storage.create_message(create_user_message);
128
- const policy = storage.composer_storage("sequence");
128
+ const policy = storage.derived_store("sequence");
129
129
  await policy.transaction((transaction) => {
130
130
  transaction.execute("CREATE TABLE composer_sequence_test (message_id TEXT REFERENCES messages(message_id) ON DELETE CASCADE)");
131
131
  transaction.execute("INSERT INTO composer_sequence_test (message_id) VALUES (?)", ["user-1"]);
@@ -3,40 +3,58 @@
3
3
  *
4
4
  * 关键点(中文)
5
5
  * - 测试编译后的 bin 输出,避免测试文件依赖 TS 源码加载器。
6
- * - 自定义 instruction 不能替代 Downcity core;core 必须包含 Shell 与 plugin 总规则。
6
+ * - Agent 身份与 Downcity core 由 SDK 注入,不能被调用方 instruction 替代。
7
+ * - 身份块必须同时给出 agent name 与 id,且不携带项目路径。
7
8
  */
8
9
 
9
10
  import test from "node:test";
10
11
  import assert from "node:assert/strict";
11
12
 
12
13
  import { create_instruction_system_blocks } from "../bin/agent/AgentInstructions.js";
13
- import { build_session_system_blocks } from "../bin/session/SessionSystem.js";
14
+ import { build_session_system_blocks } from "../bin/session/input/SessionSystem.js";
14
15
 
15
- test("instruction blocks keep Downcity core after custom instruction", () => {
16
- const blocks = create_instruction_system_blocks(
17
- ["你是这个项目的工程 agent。"],
18
- "/tmp/downcity-project",
16
+ test("instruction blocks keep identity, custom instruction, and Downcity core in order", () => {
17
+ const blocks = create_instruction_system_blocks({
18
+ agent_id: "reviewer",
19
+ agent_name: "Code Reviewer",
20
+ instruction: ["你是这个项目的工程 agent。"],
21
+ });
22
+
23
+ assert.deepEqual(
24
+ blocks.map((block) => `${block.source}:${block.name}`),
25
+ ["instruction:identity", "instruction:agent", "core:default"],
19
26
  );
27
+ assert.match(blocks[0].content, /^# Agent Identity/);
28
+ assert.match(blocks[0].content, /You are "Code Reviewer" \(agent id: reviewer\)\./);
29
+ assert.equal(blocks[1].content, "你是这个项目的工程 agent。");
30
+ assert.match(blocks[2].content, /# Harness Design/);
31
+ assert.match(blocks[2].content, /human-owned workspace/);
32
+ assert.match(blocks[2].content, /project structure is the control surface/);
33
+ assert.match(blocks[2].content, /# Shell Commands/);
34
+ assert.match(blocks[2].content, /# Power System/);
35
+ assert.doesNotMatch(blocks[2].content, /\/tmp\/downcity-project/);
36
+ assert.doesNotMatch(blocks[2].content, /current year/i);
37
+ assert.doesNotMatch(blocks[2].content, /# Project Runtime/);
38
+ assert.doesNotMatch(blocks[2].content, /\.downcity\/agents/);
39
+ assert.doesNotMatch(blocks[2].content, /\.downcity\/memory/);
40
+ assert.doesNotMatch(blocks[2].content, /\.downcity\/public/);
41
+ });
42
+
43
+ test("identity block falls back to agent id when name is empty", () => {
44
+ const blocks = create_instruction_system_blocks({
45
+ agent_id: "reviewer",
46
+ agent_name: " ",
47
+ instruction: [],
48
+ });
20
49
 
21
50
  assert.deepEqual(
22
51
  blocks.map((block) => `${block.source}:${block.name}`),
23
- ["instruction:agent", "core:default"],
52
+ ["instruction:identity", "core:default"],
24
53
  );
25
- assert.match(blocks[1].content, /# Harness Design/);
26
- assert.match(blocks[1].content, /# Harness Design/);
27
- assert.match(blocks[1].content, /human-owned workspace/);
28
- assert.match(blocks[1].content, /project structure is the control surface/);
29
- assert.match(blocks[1].content, /# Shell Commands/);
30
- assert.match(blocks[1].content, /# Plugin System/);
31
- assert.doesNotMatch(blocks[1].content, /\/tmp\/downcity-project/);
32
- assert.doesNotMatch(blocks[1].content, /current year/i);
33
- assert.doesNotMatch(blocks[1].content, /# Project Runtime/);
34
- assert.doesNotMatch(blocks[1].content, /\.downcity\/agents/);
35
- assert.doesNotMatch(blocks[1].content, /\.downcity\/memory/);
36
- assert.doesNotMatch(blocks[1].content, /\.downcity\/public/);
54
+ assert.match(blocks[0].content, /You are "reviewer" \(agent id: reviewer\)\./);
37
55
  });
38
56
 
39
- test("session system blocks are ordered as instruction, core, plugin, session", async () => {
57
+ test("session system blocks are ordered as identity, instruction, core, power, session", async () => {
40
58
  const blocks = await build_session_system_blocks({
41
59
  agent_id: "agent-test",
42
60
  project_root: "/tmp/downcity-project",
@@ -44,16 +62,17 @@ test("session system blocks are ordered as instruction, core, plugin, session",
44
62
  created_at: Date.UTC(2026, 6, 9, 8, 0, 0),
45
63
  timezone: "Asia/Shanghai",
46
64
  get_instruction_system_blocks: () =>
47
- create_instruction_system_blocks(
48
- ["使用中文回复。"],
49
- "/tmp/downcity-project",
50
- ),
51
- get_managed_plugin_system_blocks: async () => [],
52
- get_plugin_system_blocks: async () => [
65
+ create_instruction_system_blocks({
66
+ agent_id: "agent-test",
67
+ agent_name: "Agent Test",
68
+ instruction: ["使用中文回复。"],
69
+ }),
70
+ get_managed_power_system_blocks: async () => [],
71
+ get_power_system_blocks: async () => [
53
72
  {
54
- source: "plugin",
73
+ source: "power",
55
74
  name: "task",
56
- content: "# Task Plugin\n\n任务插件说明。",
75
+ content: "# Task Power\n\n任务插件说明。",
57
76
  },
58
77
  ],
59
78
  });
@@ -61,26 +80,29 @@ test("session system blocks are ordered as instruction, core, plugin, session",
61
80
  assert.deepEqual(
62
81
  blocks.map((block) => `${block.source}:${block.name}`),
63
82
  [
83
+ "instruction:identity",
64
84
  "instruction:agent",
65
85
  "core:default",
66
- "plugin:task",
86
+ "power:task",
67
87
  "session:context",
68
88
  ],
69
89
  );
70
- assert.equal(blocks[0].content, "使用中文回复。");
71
- assert.match(blocks[1].content, /plugin_call/);
72
- assert.match(blocks[3].content, /^Current session context:/);
73
- assert.match(
74
- blocks[3].content,
75
- /You are serving agent "agent-test" in session "session-test"\./,
76
- );
90
+ assert.match(blocks[0].content, /You are "Agent Test" \(agent id: agent-test\)\./);
91
+ assert.equal(blocks[1].content, "使用中文回复。");
92
+ assert.match(blocks[2].content, /# Power System/);
93
+ assert.equal(blocks[3].content, "# Task Power\n\n任务插件说明。");
94
+ assert.match(blocks[4].content, /^Current session context:/);
95
+ assert.match(blocks[4].content, /This session is "session-test"\./);
77
96
  assert.match(
78
- blocks[3].content,
97
+ blocks[4].content,
79
98
  /The current project root is "\/tmp\/downcity-project"\./,
80
99
  );
81
100
  assert.match(
82
- blocks[3].content,
101
+ blocks[4].content,
83
102
  /This session was created at 2026-07-09T08:00:00\.000Z, with Asia\/Shanghai as its reference timezone\./,
84
103
  );
85
- assert.doesNotMatch(blocks[3].content, /[\u3400-\u9fff]/u);
104
+ // session block 只描述 session 自身,不得重复 agent 身份。
105
+ assert.doesNotMatch(blocks[4].content, /agent-test/);
106
+ assert.doesNotMatch(blocks[4].content, /Agent Test/);
107
+ assert.doesNotMatch(blocks[4].content, /[\u3400-\u9fff]/u);
86
108
  });
@@ -3,14 +3,14 @@
3
3
  *
4
4
  * 关键点(中文)
5
5
  * - 动态输入和输出只能通过领域行为读写。
6
- * - Step 切换和 Context dispose 都会闭合 Plugin Hook 作用域。
7
- * - Plugin 只获得独立的只读快照,不能访问根上下文能力。
6
+ * - Step 切换和 Context dispose 都会闭合 Power Hook 作用域。
7
+ * - Power 只获得独立的只读快照,不能访问根上下文能力。
8
8
  */
9
9
 
10
10
  import assert from "node:assert/strict";
11
11
  import test from "node:test";
12
12
 
13
- import { create_session_turn_context } from "../bin/session/runtime/SessionTurnContext.js";
13
+ import { create_session_turn_context } from "../bin/session/loop/SessionTurnContext.js";
14
14
 
15
15
  test("SessionTurnContext 在检查点消费输入并封装输出缓冲", async () => {
16
16
  let commit_count = 0;
@@ -74,53 +74,50 @@ test("SessionTurnContext 只按顺序收集当前 Turn 的 Tool effects", () =>
74
74
  );
75
75
  });
76
76
 
77
- test("SessionTurnContext 负责 Plugin Hook 作用域与只读投影生命周期", async () => {
78
- const released = [];
79
- const create_scope = (name) => ({
80
- system_blocks: async () => [],
81
- pipeline: async (_point_name, value) => value,
82
- effect: async () => {},
83
- close: async () => released.push(name),
84
- });
77
+ test("SessionTurnContext 把 Workspace env 与 Agent systems 固化为只读快照", () => {
85
78
  const context = create_session_turn_context({
86
79
  session_id: "session-context-test",
87
80
  session_origin: { type: "group", group_id: "group-1" },
88
81
  turn_id: "turn-context-test",
89
82
  project_root: "/workspace",
90
83
  });
84
+ // commit 前是初始空值(尚未采集),commit 后是冻结快照。
85
+ assert.equal(context.step.workspace_env, undefined);
86
+ assert.deepEqual(context.step.agent_systems, []);
87
+
91
88
  context.step.commit({
92
89
  workspace_env: { REGION: "cn" },
93
90
  agent_systems: ["system"],
94
91
  });
95
- await context.step.replace_hooks(create_scope("first"));
96
- await context.step.replace_hooks(create_scope("second"));
97
92
 
98
- const plugin_execution_context = context.step.hook_context("call-context-test");
99
- assert.deepEqual(Object.keys(plugin_execution_context).sort(), [
100
- "abort_signal",
101
- "agent_systems",
102
- "call_id",
103
- "project_root",
104
- "session_id",
105
- "session_origin",
106
- "turn_id",
107
- "workspace_env",
108
- ]);
109
- assert.equal(Object.isFrozen(plugin_execution_context), true);
110
- assert.equal(plugin_execution_context.call_id, "call-context-test");
111
- assert.deepEqual(plugin_execution_context.session_origin, {
112
- type: "group",
113
- group_id: "group-1",
114
- });
115
- assert.deepEqual(plugin_execution_context.workspace_env, { REGION: "cn" });
116
- assert.deepEqual(released, ["first"]);
93
+ assert.deepEqual(context.step.workspace_env, { REGION: "cn" });
94
+ assert.deepEqual(context.step.agent_systems, ["system"]);
95
+ // 快照必须冻结:Power 拿到的是值,不是可以回写内核的引用。
96
+ assert.equal(Object.isFrozen(context.step.workspace_env), true);
97
+ assert.equal(Object.isFrozen(context.step.agent_systems), true);
98
+ });
117
99
 
118
- await context.lifecycle.dispose();
119
- await context.lifecycle.dispose();
120
- assert.deepEqual(released, ["first", "second"]);
100
+ /**
101
+ * Power hook 不再经 SessionTurnContext 装配。
102
+ *
103
+ * 旧实现里 Step 通过 `step.replace_hooks()` 打开 hook 作用域、通过
104
+ * `step.hook_context()` 取执行上下文。重构后 Power 产物由 City 编译并推送给 Agent,
105
+ * 这两个入口连同作用域类一起被删了(见 063d6cd1e)。
106
+ *
107
+ * 这条断言守的是「别再把它们长回来」:Session 层不再认识 hook 作用域。
108
+ */
109
+ test("SessionTurnContext 不再承担 Power hook 装配", () => {
110
+ const context = create_session_turn_context({
111
+ session_id: "session-context-test",
112
+ session_origin: { type: "chat" },
113
+ turn_id: "turn-context-test",
114
+ });
115
+ for (const removed of ["replace_hooks", "hook_context", "release_extensions", "hooks"]) {
116
+ assert.equal(removed in context.step, false, `SessionTurnContext.step 又长回了 ${removed}`);
117
+ }
121
118
  });
122
119
 
123
- test("SessionTurnContext 在整个 Turn 中只解析一次 Plugin Context", async () => {
120
+ test("SessionTurnContext 在整个 Turn 中只解析一次 Power Context", async () => {
124
121
  const context = create_session_turn_context({
125
122
  session_id: "session-context-test",
126
123
  session_origin: { type: "chat" },
@@ -130,7 +127,7 @@ test("SessionTurnContext 在整个 Turn 中只解析一次 Plugin Context", asyn
130
127
  const resolver = async () => {
131
128
  resolve_count += 1;
132
129
  return [{
133
- source_plugin: "memory",
130
+ source_power: "memory",
134
131
  name: "recall",
135
132
  content: "stable recall",
136
133
  trust_level: "reference",
@@ -138,12 +135,12 @@ test("SessionTurnContext 在整个 Turn 中只解析一次 Plugin Context", asyn
138
135
  }];
139
136
  };
140
137
 
141
- const first = await context.step.resolve_plugin_context_blocks(resolver);
142
- const second = await context.step.resolve_plugin_context_blocks(resolver);
138
+ const first = await context.step.resolve_power_context_blocks(resolver);
139
+ const second = await context.step.resolve_power_context_blocks(resolver);
143
140
 
144
141
  assert.equal(resolve_count, 1);
145
142
  assert.equal(first, second);
146
- assert.equal(first, context.step.plugin_context_blocks);
143
+ assert.equal(first, context.step.power_context_blocks);
147
144
  assert.equal(Object.isFrozen(first), true);
148
145
  assert.equal(Object.isFrozen(first[0]), true);
149
146
  assert.equal(Object.isFrozen(first[0].citations), true);
@@ -8,7 +8,7 @@ import { fileURLToPath } from "node:url";
8
8
  const __filename = fileURLToPath(import.meta.url);
9
9
  const __dirname = path.dirname(__filename);
10
10
  const bin_root = path.resolve(__dirname, "../bin");
11
- const alias_pattern = /(?:from\s+["'](?:@\/|@executor\/)|import\s*\(\s*["'](?:@\/|@executor\/)|["'](?:@\/|@executor\/))/;
11
+ const alias_pattern = /(?:from\s+["']@\/|import\s*\(\s*["']@\/|["']@\/)/;
12
12
 
13
13
  async function collect_files(dir_path) {
14
14
  const entries = await fs.readdir(dir_path, { withFileTypes: true });