@downcity/agent 1.1.408 → 1.1.437

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1152) hide show
  1. package/README.md +63 -51
  2. package/bin/agent/Agent.d.ts +39 -17
  3. package/bin/agent/Agent.d.ts.map +1 -1
  4. package/bin/agent/Agent.js +169 -71
  5. package/bin/agent/Agent.js.map +1 -1
  6. package/bin/agent/AgentInstructions.d.ts +1 -1
  7. package/bin/agent/AgentInstructions.js +3 -3
  8. package/bin/agent/AgentInstructions.js.map +1 -1
  9. package/bin/agent/AgentMemoryStorage.d.ts +18 -0
  10. package/bin/agent/AgentMemoryStorage.d.ts.map +1 -0
  11. package/bin/agent/AgentMemoryStorage.js +176 -0
  12. package/bin/agent/AgentMemoryStorage.js.map +1 -0
  13. package/bin/agent/AgentSessions.d.ts +32 -33
  14. package/bin/agent/AgentSessions.d.ts.map +1 -1
  15. package/bin/agent/AgentSessions.js +122 -72
  16. package/bin/agent/AgentSessions.js.map +1 -1
  17. package/bin/executor/Executor.d.ts +12 -30
  18. package/bin/executor/Executor.d.ts.map +1 -1
  19. package/bin/executor/Executor.js +39 -121
  20. package/bin/executor/Executor.js.map +1 -1
  21. package/bin/executor/composer/system/default/SystemPromptAssets.d.ts +0 -4
  22. package/bin/executor/composer/system/default/SystemPromptAssets.d.ts.map +1 -1
  23. package/bin/executor/composer/system/default/SystemPromptAssets.js +1 -6
  24. package/bin/executor/composer/system/default/SystemPromptAssets.js.map +1 -1
  25. package/bin/executor/composer/system/default/assets/core.prompt.d.ts +1 -1
  26. package/bin/executor/composer/system/default/assets/core.prompt.d.ts.map +1 -1
  27. package/bin/executor/composer/system/default/assets/core.prompt.js +1 -1
  28. package/bin/executor/composer/system/default/assets/core.prompt.js.map +1 -1
  29. package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts +3 -9
  30. package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts.map +1 -1
  31. package/bin/executor/core-engine/CoreEngineContextCompaction.js +4 -130
  32. package/bin/executor/core-engine/CoreEngineContextCompaction.js.map +1 -1
  33. package/bin/executor/core-engine/CoreEngineError.d.ts +1 -1
  34. package/bin/executor/core-engine/CoreEngineError.d.ts.map +1 -1
  35. package/bin/executor/core-engine/CoreEngineLoopDecision.d.ts +1 -1
  36. package/bin/executor/core-engine/CoreEngineRunner.d.ts +3 -30
  37. package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -1
  38. package/bin/executor/core-engine/CoreEngineRunner.js +83 -245
  39. package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -1
  40. package/bin/executor/core-engine/CoreEngineSignals.d.ts +7 -7
  41. package/bin/executor/core-engine/CoreEngineSignals.d.ts.map +1 -1
  42. package/bin/executor/core-engine/CoreEngineSignals.js +1 -1
  43. package/bin/executor/core-engine/CoreEngineSignals.js.map +1 -1
  44. package/bin/executor/messages/SessionAttachmentMapper.d.ts +2 -2
  45. package/bin/executor/messages/SessionAttachmentMapper.d.ts.map +1 -1
  46. package/bin/executor/messages/SessionAttachmentMapper.js.map +1 -1
  47. package/bin/executor/messages/SessionMessageLog.d.ts +3 -3
  48. package/bin/executor/messages/SessionMessageLog.d.ts.map +1 -1
  49. package/bin/executor/messages/SessionMessageLog.js.map +1 -1
  50. package/bin/executor/messages/SessionModelMessages.d.ts +1 -4
  51. package/bin/executor/messages/SessionModelMessages.d.ts.map +1 -1
  52. package/bin/executor/messages/SessionModelMessages.js +81 -91
  53. package/bin/executor/messages/SessionModelMessages.js.map +1 -1
  54. package/bin/executor/model/ModelGenerate.d.ts +12 -2
  55. package/bin/executor/model/ModelGenerate.d.ts.map +1 -1
  56. package/bin/executor/model/ModelGenerate.js +23 -15
  57. package/bin/executor/model/ModelGenerate.js.map +1 -1
  58. package/bin/executor/model/ModelRequestRunner.d.ts +29 -0
  59. package/bin/executor/model/ModelRequestRunner.d.ts.map +1 -0
  60. package/bin/executor/model/ModelRequestRunner.js +77 -0
  61. package/bin/executor/model/ModelRequestRunner.js.map +1 -0
  62. package/bin/executor/model/ModelStepRunner.d.ts +3 -7
  63. package/bin/executor/model/ModelStepRunner.d.ts.map +1 -1
  64. package/bin/executor/model/ModelStepRunner.js +9 -41
  65. package/bin/executor/model/ModelStepRunner.js.map +1 -1
  66. package/bin/executor/model/ModelStreamConsumer.d.ts +12 -0
  67. package/bin/executor/model/ModelStreamConsumer.d.ts.map +1 -0
  68. package/bin/executor/model/ModelStreamConsumer.js +60 -0
  69. package/bin/executor/model/ModelStreamConsumer.js.map +1 -0
  70. package/bin/executor/model/ModelStreamFailure.d.ts +4 -0
  71. package/bin/executor/model/ModelStreamFailure.d.ts.map +1 -1
  72. package/bin/executor/model/ModelStreamFailure.js +21 -0
  73. package/bin/executor/model/ModelStreamFailure.js.map +1 -1
  74. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts +7 -64
  75. package/bin/executor/services/ExecutorRecoveryPolicy.d.ts.map +1 -1
  76. package/bin/executor/services/ExecutorRecoveryPolicy.js +29 -45
  77. package/bin/executor/services/ExecutorRecoveryPolicy.js.map +1 -1
  78. package/bin/executor/types/SessionHistoryMeta.d.ts +6 -8
  79. package/bin/executor/types/SessionHistoryMeta.d.ts.map +1 -1
  80. package/bin/executor/types/SessionHistoryMeta.js +1 -1
  81. package/bin/group/Group.d.ts +22 -3
  82. package/bin/group/Group.d.ts.map +1 -1
  83. package/bin/group/Group.js +54 -4
  84. package/bin/group/Group.js.map +1 -1
  85. package/bin/group/GroupDispatchRuntime.d.ts +37 -0
  86. package/bin/group/GroupDispatchRuntime.d.ts.map +1 -0
  87. package/bin/group/{GroupDispatchSession.js → GroupDispatchRuntime.js} +77 -21
  88. package/bin/group/GroupDispatchRuntime.js.map +1 -0
  89. package/bin/group/GroupSession.d.ts +20 -6
  90. package/bin/group/GroupSession.d.ts.map +1 -1
  91. package/bin/group/GroupSession.js +148 -84
  92. package/bin/group/GroupSession.js.map +1 -1
  93. package/bin/group/GroupSessions.d.ts +1 -1
  94. package/bin/group/GroupSessions.d.ts.map +1 -1
  95. package/bin/group/GroupSessions.js +11 -10
  96. package/bin/group/GroupSessions.js.map +1 -1
  97. package/bin/group/index.d.ts +1 -1
  98. package/bin/group/index.d.ts.map +1 -1
  99. package/bin/{workspace/store → group/storage}/LocalGroupSessionDataStore.d.ts +11 -3
  100. package/bin/group/storage/LocalGroupSessionDataStore.d.ts.map +1 -0
  101. package/bin/{workspace/store → group/storage}/LocalGroupSessionDataStore.js +89 -6
  102. package/bin/group/storage/LocalGroupSessionDataStore.js.map +1 -0
  103. package/bin/group/storage/LocalGroupSessionStore.d.ts.map +1 -0
  104. package/bin/{workspace/store → group/storage}/LocalGroupSessionStore.js +1 -1
  105. package/bin/group/storage/LocalGroupSessionStore.js.map +1 -0
  106. package/bin/index.d.ts +25 -55
  107. package/bin/index.d.ts.map +1 -1
  108. package/bin/index.js +9 -21
  109. package/bin/index.js.map +1 -1
  110. package/bin/session/DefaultSessionComposer.d.ts +13 -7
  111. package/bin/session/DefaultSessionComposer.d.ts.map +1 -1
  112. package/bin/session/DefaultSessionComposer.js +63 -24
  113. package/bin/session/DefaultSessionComposer.js.map +1 -1
  114. package/bin/session/Session.d.ts +27 -70
  115. package/bin/session/Session.d.ts.map +1 -1
  116. package/bin/session/Session.js +136 -446
  117. package/bin/session/Session.js.map +1 -1
  118. package/bin/session/SessionComposition.d.ts +49 -0
  119. package/bin/session/SessionComposition.d.ts.map +1 -0
  120. package/bin/session/SessionComposition.js +309 -0
  121. package/bin/session/SessionComposition.js.map +1 -0
  122. package/bin/session/SessionHookPoints.d.ts +15 -0
  123. package/bin/session/SessionHookPoints.d.ts.map +1 -0
  124. package/bin/session/SessionHookPoints.js +15 -0
  125. package/bin/session/SessionHookPoints.js.map +1 -0
  126. package/bin/session/SessionHooks.d.ts +38 -0
  127. package/bin/session/SessionHooks.d.ts.map +1 -0
  128. package/bin/session/SessionHooks.js +71 -0
  129. package/bin/session/SessionHooks.js.map +1 -0
  130. package/bin/session/SessionLoop.d.ts +18 -10
  131. package/bin/session/SessionLoop.d.ts.map +1 -1
  132. package/bin/session/SessionLoop.js +234 -213
  133. package/bin/session/SessionLoop.js.map +1 -1
  134. package/bin/session/SessionMessages.d.ts +57 -86
  135. package/bin/session/SessionMessages.d.ts.map +1 -1
  136. package/bin/session/SessionMessages.js +289 -506
  137. package/bin/session/SessionMessages.js.map +1 -1
  138. package/bin/session/SessionQueue.d.ts +1 -1
  139. package/bin/session/SessionQueue.d.ts.map +1 -1
  140. package/bin/session/SessionQueue.js +2 -1
  141. package/bin/session/SessionQueue.js.map +1 -1
  142. package/bin/session/SessionState.d.ts +7 -11
  143. package/bin/session/SessionState.d.ts.map +1 -1
  144. package/bin/session/SessionState.js +63 -95
  145. package/bin/session/SessionState.js.map +1 -1
  146. package/bin/session/SessionSystem.d.ts +6 -2
  147. package/bin/session/SessionSystem.d.ts.map +1 -1
  148. package/bin/session/SessionSystem.js +41 -1
  149. package/bin/session/SessionSystem.js.map +1 -1
  150. package/bin/session/SessionTitle.d.ts +37 -7
  151. package/bin/session/SessionTitle.d.ts.map +1 -1
  152. package/bin/session/SessionTitle.js +43 -37
  153. package/bin/session/SessionTitle.js.map +1 -1
  154. package/bin/session/browse/Browse.d.ts +34 -48
  155. package/bin/session/browse/Browse.d.ts.map +1 -1
  156. package/bin/session/browse/Browse.js +106 -354
  157. package/bin/session/browse/Browse.js.map +1 -1
  158. package/bin/session/browse/SessionMessageTimeline.d.ts +1 -1
  159. package/bin/session/browse/SessionMessageTimeline.d.ts.map +1 -1
  160. package/bin/session/browse/SessionMessageTimeline.js +61 -37
  161. package/bin/session/browse/SessionMessageTimeline.js.map +1 -1
  162. package/bin/session/composer/policies/AdaptivePartContextPolicy.d.ts +35 -0
  163. package/bin/session/composer/policies/AdaptivePartContextPolicy.d.ts.map +1 -0
  164. package/bin/session/composer/policies/AdaptivePartContextPolicy.js +256 -0
  165. package/bin/session/composer/policies/AdaptivePartContextPolicy.js.map +1 -0
  166. package/bin/session/composer/policies/FullHistoryContextPolicy.d.ts +24 -0
  167. package/bin/session/composer/policies/FullHistoryContextPolicy.d.ts.map +1 -0
  168. package/bin/session/composer/policies/FullHistoryContextPolicy.js +31 -0
  169. package/bin/session/composer/policies/FullHistoryContextPolicy.js.map +1 -0
  170. package/bin/session/composer/policies/SessionSummaryPrompts.d.ts +16 -0
  171. package/bin/session/composer/policies/SessionSummaryPrompts.d.ts.map +1 -0
  172. package/bin/session/composer/policies/SessionSummaryPrompts.js +32 -0
  173. package/bin/session/composer/policies/SessionSummaryPrompts.js.map +1 -0
  174. package/bin/session/control/SessionInteractions.d.ts +2 -2
  175. package/bin/session/control/SessionInteractions.d.ts.map +1 -1
  176. package/bin/session/execution/SessionAssistantOutputAdapter.d.ts +16 -5
  177. package/bin/session/execution/SessionAssistantOutputAdapter.d.ts.map +1 -1
  178. package/bin/session/execution/SessionAssistantOutputAdapter.js +7 -3
  179. package/bin/session/execution/SessionAssistantOutputAdapter.js.map +1 -1
  180. package/bin/session/execution/tools/SessionShellApprovalAdapter.d.ts +3 -3
  181. package/bin/session/execution/tools/SessionShellApprovalAdapter.d.ts.map +1 -1
  182. package/bin/session/index.d.ts +8 -0
  183. package/bin/session/index.d.ts.map +1 -0
  184. package/bin/session/index.js +7 -0
  185. package/bin/session/index.js.map +1 -0
  186. package/bin/session/messages/SessionAgentActionPartWriter.d.ts +22 -0
  187. package/bin/session/messages/SessionAgentActionPartWriter.d.ts.map +1 -0
  188. package/bin/session/messages/SessionAgentActionPartWriter.js +36 -0
  189. package/bin/session/messages/SessionAgentActionPartWriter.js.map +1 -0
  190. package/bin/session/messages/SessionAgentContent.d.ts +10 -0
  191. package/bin/session/messages/SessionAgentContent.d.ts.map +1 -0
  192. package/bin/session/messages/SessionAgentContent.js +44 -0
  193. package/bin/session/messages/SessionAgentContent.js.map +1 -0
  194. package/bin/session/messages/SessionAgentMessageState.d.ts +50 -0
  195. package/bin/session/messages/SessionAgentMessageState.d.ts.map +1 -0
  196. package/bin/session/messages/SessionAgentMessageState.js +283 -0
  197. package/bin/session/messages/SessionAgentMessageState.js.map +1 -0
  198. package/bin/session/messages/{SessionAssistantMessageWriter.d.ts → SessionAgentMessageWriter.d.ts} +23 -9
  199. package/bin/session/messages/SessionAgentMessageWriter.d.ts.map +1 -0
  200. package/bin/session/messages/{SessionAssistantMessageWriter.js → SessionAgentMessageWriter.js} +56 -44
  201. package/bin/session/messages/SessionAgentMessageWriter.js.map +1 -0
  202. package/bin/session/messages/SessionForkMessageFiles.d.ts +22 -0
  203. package/bin/session/messages/SessionForkMessageFiles.d.ts.map +1 -0
  204. package/bin/session/messages/SessionForkMessageFiles.js +52 -0
  205. package/bin/session/messages/SessionForkMessageFiles.js.map +1 -0
  206. package/bin/session/messages/SessionJsonValue.d.ts +1 -1
  207. package/bin/session/messages/SessionJsonValue.d.ts.map +1 -1
  208. package/bin/session/messages/SessionMessageInteractionWriter.d.ts +7 -12
  209. package/bin/session/messages/SessionMessageInteractionWriter.d.ts.map +1 -1
  210. package/bin/session/messages/SessionMessageInteractionWriter.js +4 -4
  211. package/bin/session/messages/SessionMessageInteractionWriter.js.map +1 -1
  212. package/bin/session/messages/SessionMessageText.d.ts +4 -4
  213. package/bin/session/messages/SessionMessageText.d.ts.map +1 -1
  214. package/bin/session/messages/SessionMessageText.js +0 -2
  215. package/bin/session/messages/SessionMessageText.js.map +1 -1
  216. package/bin/session/messages/SessionTurnFileDiffBuilder.d.ts +15 -0
  217. package/bin/session/messages/SessionTurnFileDiffBuilder.d.ts.map +1 -0
  218. package/bin/session/messages/SessionTurnFileDiffBuilder.js +180 -0
  219. package/bin/session/messages/SessionTurnFileDiffBuilder.js.map +1 -0
  220. package/bin/session/messages/SessionTurnFileDiffData.d.ts +15 -0
  221. package/bin/session/messages/SessionTurnFileDiffData.d.ts.map +1 -0
  222. package/bin/session/messages/SessionTurnFileDiffData.js +59 -0
  223. package/bin/session/messages/SessionTurnFileDiffData.js.map +1 -0
  224. package/bin/session/messages/SessionUserContext.d.ts +13 -0
  225. package/bin/session/messages/SessionUserContext.d.ts.map +1 -0
  226. package/bin/session/messages/SessionUserContext.js +38 -0
  227. package/bin/session/messages/SessionUserContext.js.map +1 -0
  228. package/bin/session/messages/SessionUserMessage.d.ts +14 -0
  229. package/bin/session/messages/SessionUserMessage.d.ts.map +1 -0
  230. package/bin/session/messages/SessionUserMessage.js +74 -0
  231. package/bin/session/messages/SessionUserMessage.js.map +1 -0
  232. package/bin/session/preview/SessionMessagePreview.d.ts +1 -1
  233. package/bin/session/preview/SessionMessagePreview.d.ts.map +1 -1
  234. package/bin/session/preview/SessionMessagePreview.js +26 -10
  235. package/bin/session/preview/SessionMessagePreview.js.map +1 -1
  236. package/bin/session/runtime/SessionEventHub.d.ts +1 -1
  237. package/bin/session/runtime/SessionEventHub.d.ts.map +1 -1
  238. package/bin/session/runtime/SessionModelRequestWarning.d.ts +17 -0
  239. package/bin/session/runtime/SessionModelRequestWarning.d.ts.map +1 -0
  240. package/bin/session/runtime/SessionModelRequestWarning.js +19 -0
  241. package/bin/session/runtime/SessionModelRequestWarning.js.map +1 -0
  242. package/bin/session/runtime/SessionTitleTask.d.ts +2 -2
  243. package/bin/session/runtime/SessionTitleTask.d.ts.map +1 -1
  244. package/bin/session/runtime/SessionTitleTask.js +1 -1
  245. package/bin/session/runtime/SessionTitleTask.js.map +1 -1
  246. package/bin/session/runtime/SessionTurnCompletion.d.ts +15 -0
  247. package/bin/session/runtime/SessionTurnCompletion.d.ts.map +1 -0
  248. package/bin/session/runtime/SessionTurnCompletion.js +126 -0
  249. package/bin/session/runtime/SessionTurnCompletion.js.map +1 -0
  250. package/bin/session/runtime/SessionTurnContext.d.ts +6 -3
  251. package/bin/session/runtime/SessionTurnContext.d.ts.map +1 -1
  252. package/bin/session/runtime/SessionTurnContext.js +73 -38
  253. package/bin/session/runtime/SessionTurnContext.js.map +1 -1
  254. package/bin/session/runtime/SessionTurnFileDiff.d.ts +12 -0
  255. package/bin/session/runtime/SessionTurnFileDiff.d.ts.map +1 -0
  256. package/bin/session/runtime/SessionTurnFileDiff.js +71 -0
  257. package/bin/session/runtime/SessionTurnFileDiff.js.map +1 -0
  258. package/bin/{workspace/store → session/storage}/LocalSessionAttachmentStore.d.ts +11 -4
  259. package/bin/session/storage/LocalSessionAttachmentStore.d.ts.map +1 -0
  260. package/bin/{workspace/store → session/storage}/LocalSessionAttachmentStore.js +17 -2
  261. package/bin/session/storage/LocalSessionAttachmentStore.js.map +1 -0
  262. package/bin/session/storage/LocalSessionDataStore.d.ts +13 -0
  263. package/bin/session/storage/LocalSessionDataStore.d.ts.map +1 -0
  264. package/bin/session/storage/LocalSessionDataStore.js +28 -0
  265. package/bin/session/storage/LocalSessionDataStore.js.map +1 -0
  266. package/bin/{workspace/store → session/storage}/LocalSessionStore.d.ts +21 -10
  267. package/bin/session/storage/LocalSessionStore.d.ts.map +1 -0
  268. package/bin/session/storage/LocalSessionStore.js +329 -0
  269. package/bin/session/storage/LocalSessionStore.js.map +1 -0
  270. package/bin/session/storage/LocalStorePaths.d.ts +27 -0
  271. package/bin/session/storage/LocalStorePaths.d.ts.map +1 -0
  272. package/bin/session/storage/LocalStorePaths.js +69 -0
  273. package/bin/session/storage/LocalStorePaths.js.map +1 -0
  274. package/bin/session/storage/Metadata.d.ts +12 -9
  275. package/bin/session/storage/Metadata.d.ts.map +1 -1
  276. package/bin/session/storage/Metadata.js +8 -30
  277. package/bin/session/storage/Metadata.js.map +1 -1
  278. package/bin/session/storage/RuntimeSessionPort.d.ts +8 -8
  279. package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
  280. package/bin/session/storage/RuntimeSessionPort.js +6 -6
  281. package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
  282. package/bin/session/storage/SessionStorageCodec.d.ts +59 -0
  283. package/bin/session/storage/SessionStorageCodec.d.ts.map +1 -0
  284. package/bin/session/storage/SessionStorageCodec.js +331 -0
  285. package/bin/session/storage/SessionStorageCodec.js.map +1 -0
  286. package/bin/session/storage/SessionStorageSchema.d.ts +11 -0
  287. package/bin/session/storage/SessionStorageSchema.d.ts.map +1 -0
  288. package/bin/session/storage/SessionStorageSchema.js +131 -0
  289. package/bin/session/storage/SessionStorageSchema.js.map +1 -0
  290. package/bin/session/storage/SqliteSessionStorage.d.ts +120 -0
  291. package/bin/session/storage/SqliteSessionStorage.d.ts.map +1 -0
  292. package/bin/session/storage/SqliteSessionStorage.js +581 -0
  293. package/bin/session/storage/SqliteSessionStorage.js.map +1 -0
  294. package/bin/tools/ask/AskQuestionsTool.d.ts.map +1 -1
  295. package/bin/tools/ask/AskQuestionsTool.js +3 -1
  296. package/bin/tools/ask/AskQuestionsTool.js.map +1 -1
  297. package/bin/tools/ask/AskQuestionsToolSchemas.d.ts +1 -1
  298. package/bin/types/action/ActionResult.d.ts +13 -9
  299. package/bin/types/action/ActionResult.d.ts.map +1 -1
  300. package/bin/types/action/ActionResult.js +2 -1
  301. package/bin/types/action/ActionResult.js.map +1 -1
  302. package/bin/types/agent/AgentOptions.d.ts +25 -18
  303. package/bin/types/agent/AgentOptions.d.ts.map +1 -1
  304. package/bin/types/agent/AgentSessionCollection.d.ts +17 -13
  305. package/bin/types/agent/AgentSessionCollection.d.ts.map +1 -1
  306. package/bin/types/agent/AgentStorage.d.ts +4 -2
  307. package/bin/types/agent/AgentStorage.d.ts.map +1 -1
  308. package/bin/types/agent/SessionActor.d.ts +11 -20
  309. package/bin/types/agent/SessionActor.d.ts.map +1 -1
  310. package/bin/types/agent/SessionTypes.d.ts +29 -37
  311. package/bin/types/agent/SessionTypes.d.ts.map +1 -1
  312. package/bin/types/executor/ModelRequest.d.ts +11 -0
  313. package/bin/types/executor/ModelRequest.d.ts.map +1 -0
  314. package/bin/types/executor/ModelRequest.js +7 -0
  315. package/bin/types/executor/ModelRequest.js.map +1 -0
  316. package/bin/types/executor/SessionAssistantOutput.d.ts +16 -5
  317. package/bin/types/executor/SessionAssistantOutput.d.ts.map +1 -1
  318. package/bin/types/executor/SessionToolExecutionContext.d.ts +3 -3
  319. package/bin/types/executor/SessionToolExecutionContext.d.ts.map +1 -1
  320. package/bin/types/executor/SessionTurnContext.d.ts +57 -34
  321. package/bin/types/executor/SessionTurnContext.d.ts.map +1 -1
  322. package/bin/types/group/DispatchStrategy.d.ts +62 -36
  323. package/bin/types/group/DispatchStrategy.d.ts.map +1 -1
  324. package/bin/types/group/DispatchStrategy.js +83 -39
  325. package/bin/types/group/DispatchStrategy.js.map +1 -1
  326. package/bin/types/group/Group.d.ts +8 -8
  327. package/bin/types/group/Group.d.ts.map +1 -1
  328. package/bin/types/group/{GroupDispatchSession.d.ts → GroupDispatch.d.ts} +21 -27
  329. package/bin/types/group/GroupDispatch.d.ts.map +1 -0
  330. package/bin/types/group/GroupDispatch.js +8 -0
  331. package/bin/types/group/GroupDispatch.js.map +1 -0
  332. package/bin/types/group/GroupSession.d.ts +14 -7
  333. package/bin/types/group/GroupSession.d.ts.map +1 -1
  334. package/bin/types/group/GroupSessionStore.d.ts +9 -5
  335. package/bin/types/group/GroupSessionStore.d.ts.map +1 -1
  336. package/bin/types/sdk/AgentSessionAction.d.ts +2 -2
  337. package/bin/types/sdk/AgentSessionAction.d.ts.map +1 -1
  338. package/bin/types/sdk/AgentSessionAction.js +1 -1
  339. package/bin/types/sdk/AgentSessionPrompt.d.ts +16 -6
  340. package/bin/types/sdk/AgentSessionPrompt.d.ts.map +1 -1
  341. package/bin/types/sdk/AgentSessionPrompt.js +7 -3
  342. package/bin/types/sdk/AgentSessionPrompt.js.map +1 -1
  343. package/bin/types/session/AdaptivePartContextPolicy.d.ts +31 -0
  344. package/bin/types/session/AdaptivePartContextPolicy.d.ts.map +1 -0
  345. package/bin/types/session/AdaptivePartContextPolicy.js +7 -0
  346. package/bin/types/session/AdaptivePartContextPolicy.js.map +1 -0
  347. package/bin/types/session/SessionAgentMessageState.d.ts +23 -0
  348. package/bin/types/session/SessionAgentMessageState.d.ts.map +1 -0
  349. package/bin/types/session/SessionAgentMessageState.js +8 -0
  350. package/bin/types/session/SessionAgentMessageState.js.map +1 -0
  351. package/bin/types/session/SessionCommand.d.ts +19 -7
  352. package/bin/types/session/SessionCommand.d.ts.map +1 -1
  353. package/bin/types/session/SessionComposer.d.ts +47 -41
  354. package/bin/types/session/SessionComposer.d.ts.map +1 -1
  355. package/bin/types/session/SessionComposer.js +2 -2
  356. package/bin/types/session/SessionComposition.d.ts +51 -0
  357. package/bin/types/session/SessionComposition.d.ts.map +1 -0
  358. package/bin/types/session/SessionComposition.js +8 -0
  359. package/bin/types/session/SessionComposition.js.map +1 -0
  360. package/bin/types/session/SessionContextPolicy.d.ts +70 -0
  361. package/bin/types/session/SessionContextPolicy.d.ts.map +1 -0
  362. package/bin/types/session/SessionContextPolicy.js +8 -0
  363. package/bin/types/session/SessionContextPolicy.js.map +1 -0
  364. package/bin/types/session/SessionExecution.d.ts +6 -33
  365. package/bin/types/session/SessionExecution.d.ts.map +1 -1
  366. package/bin/types/session/SessionInteractions.d.ts +1 -1
  367. package/bin/types/session/SessionInteractions.d.ts.map +1 -1
  368. package/bin/types/session/SessionLocalState.d.ts +2 -2
  369. package/bin/types/session/SessionLocalState.d.ts.map +1 -1
  370. package/bin/types/session/SessionLoop.d.ts +10 -9
  371. package/bin/types/session/SessionLoop.d.ts.map +1 -1
  372. package/bin/types/session/SessionMessages.d.ts +29 -30
  373. package/bin/types/session/SessionMessages.d.ts.map +1 -1
  374. package/bin/types/session/SessionOptions.d.ts +30 -44
  375. package/bin/types/session/SessionOptions.d.ts.map +1 -1
  376. package/bin/types/session/SessionPort.d.ts +14 -15
  377. package/bin/types/session/SessionPort.d.ts.map +1 -1
  378. package/bin/types/session/SessionPort.js +1 -1
  379. package/bin/types/session/SessionState.d.ts +6 -9
  380. package/bin/types/session/SessionState.d.ts.map +1 -1
  381. package/bin/types/session/SessionSystem.d.ts +16 -2
  382. package/bin/types/session/SessionSystem.d.ts.map +1 -1
  383. package/bin/types/session/SessionTool.d.ts +2 -2
  384. package/bin/types/session/SessionTool.d.ts.map +1 -1
  385. package/bin/types/session/SessionTurnCompletion.d.ts +23 -0
  386. package/bin/types/session/SessionTurnCompletion.d.ts.map +1 -0
  387. package/bin/types/session/SessionTurnCompletion.js +8 -0
  388. package/bin/types/session/SessionTurnCompletion.js.map +1 -0
  389. package/bin/types/session/SessionTurnFileDiff.d.ts +42 -0
  390. package/bin/types/session/SessionTurnFileDiff.d.ts.map +1 -0
  391. package/bin/types/session/SessionTurnFileDiff.js +8 -0
  392. package/bin/types/session/SessionTurnFileDiff.js.map +1 -0
  393. package/bin/types/store/LocalStore.d.ts +10 -14
  394. package/bin/types/store/LocalStore.d.ts.map +1 -1
  395. package/bin/types/store/LocalStore.js +2 -2
  396. package/bin/types/store/SessionAttachmentStore.d.ts +17 -2
  397. package/bin/types/store/SessionAttachmentStore.d.ts.map +1 -1
  398. package/bin/types/store/SessionAttachmentStore.js +2 -1
  399. package/bin/types/store/SessionAttachmentStore.js.map +1 -1
  400. package/bin/types/store/SessionStorage.d.ts +103 -0
  401. package/bin/types/store/SessionStorage.d.ts.map +1 -0
  402. package/bin/types/store/SessionStorage.js +8 -0
  403. package/bin/types/store/SessionStorage.js.map +1 -0
  404. package/bin/types/store/SessionStore.d.ts +11 -8
  405. package/bin/types/store/SessionStore.d.ts.map +1 -1
  406. package/bin/types/tools/ToolActionExecutionContext.d.ts +1 -1
  407. package/bin/types/tools/ToolActionExecutionContext.d.ts.map +1 -1
  408. package/bin/types/tools/ask/AskQuestionsTool.d.ts +1 -1
  409. package/bin/types/tools/ask/AskQuestionsTool.d.ts.map +1 -1
  410. package/bin/utils/logger/Logger.d.ts +12 -21
  411. package/bin/utils/logger/Logger.d.ts.map +1 -1
  412. package/bin/utils/logger/Logger.js +21 -39
  413. package/bin/utils/logger/Logger.js.map +1 -1
  414. package/package.json +7 -24
  415. package/scripts/ModelClientMock.mjs +11 -0
  416. package/scripts/core-engine-context-compaction.test.mjs +160 -220
  417. package/scripts/core-engine-model-stream.test.mjs +94 -4
  418. package/scripts/executor-failure-result.test.mjs +37 -22
  419. package/scripts/logger-isolation.test.mjs +17 -2
  420. package/scripts/public-api-naming.test.mjs +9 -15
  421. package/scripts/session-agent-message-part-order.test.mjs +63 -0
  422. package/scripts/session-initialization.test.mjs +141 -0
  423. package/scripts/session-message-timeline.test.mjs +5 -6
  424. package/scripts/session-messages-error-part.test.mjs +175 -0
  425. package/scripts/session-messages-error.test.mjs +47 -6
  426. package/scripts/session-prompt-idempotency.test.mjs +91 -0
  427. package/scripts/session-queue.test.mjs +13 -12
  428. package/scripts/session-storage-sqlite.test.mjs +209 -0
  429. package/scripts/session-turn-context.test.mjs +90 -42
  430. package/src/agent/Agent.ts +212 -91
  431. package/src/agent/AgentInstructions.ts +3 -3
  432. package/src/agent/AgentMemoryStorage.ts +208 -0
  433. package/src/agent/AgentSessions.ts +164 -88
  434. package/src/executor/Executor.ts +56 -177
  435. package/src/executor/README.md +19 -16
  436. package/src/executor/composer/system/default/SystemPromptAssets.ts +0 -6
  437. package/src/executor/composer/system/default/assets/core.prompt.ts +1 -1
  438. package/src/executor/composer/system/default/assets/core.prompt.ts.txt +8 -8
  439. package/src/executor/core-engine/CoreEngineContextCompaction.ts +3 -135
  440. package/src/executor/core-engine/CoreEngineError.ts +1 -1
  441. package/src/executor/core-engine/CoreEngineRunner.ts +93 -334
  442. package/src/executor/core-engine/CoreEngineSignals.ts +10 -10
  443. package/src/executor/messages/SessionAttachmentMapper.ts +4 -4
  444. package/src/executor/messages/SessionMessageLog.ts +3 -3
  445. package/src/executor/messages/SessionModelMessages.ts +87 -99
  446. package/src/executor/model/ModelGenerate.ts +59 -21
  447. package/src/executor/model/ModelRequestRunner.ts +107 -0
  448. package/src/executor/model/ModelStepRunner.ts +28 -60
  449. package/src/executor/model/ModelStreamConsumer.ts +76 -0
  450. package/src/executor/model/ModelStreamFailure.ts +28 -0
  451. package/src/executor/services/ExecutorRecoveryPolicy.ts +34 -127
  452. package/src/executor/types/SessionHistoryMeta.ts +6 -8
  453. package/src/group/Group.ts +60 -5
  454. package/src/group/GroupDispatchRuntime.ts +233 -0
  455. package/src/group/GroupSession.ts +168 -93
  456. package/src/group/GroupSessions.ts +12 -11
  457. package/src/group/index.ts +4 -2
  458. package/src/{workspace/store → group/storage}/LocalGroupSessionDataStore.ts +99 -8
  459. package/src/{workspace/store → group/storage}/LocalGroupSessionStore.ts +2 -2
  460. package/src/index.ts +84 -208
  461. package/src/session/DefaultSessionComposer.ts +77 -32
  462. package/src/session/Session.ts +167 -529
  463. package/src/session/SessionComposition.ts +370 -0
  464. package/src/session/SessionHookPoints.ts +17 -0
  465. package/src/session/SessionHooks.ts +85 -0
  466. package/src/session/SessionLoop.ts +289 -226
  467. package/src/session/SessionMessages.ts +380 -642
  468. package/src/session/SessionQueue.ts +3 -2
  469. package/src/session/SessionState.ts +71 -110
  470. package/src/session/SessionSystem.ts +53 -3
  471. package/src/session/SessionTitle.ts +55 -42
  472. package/src/session/browse/Browse.ts +188 -462
  473. package/src/session/browse/SessionMessageTimeline.ts +64 -39
  474. package/src/session/composer/policies/AdaptivePartContextPolicy.ts +307 -0
  475. package/src/session/composer/policies/FullHistoryContextPolicy.ts +36 -0
  476. package/src/session/composer/policies/SessionSummaryPrompts.ts +42 -0
  477. package/src/session/control/SessionInteractions.ts +1 -1
  478. package/src/session/execution/SessionAssistantOutputAdapter.ts +25 -11
  479. package/src/session/execution/tools/SessionShellApprovalAdapter.ts +2 -2
  480. package/src/session/index.ts +17 -0
  481. package/src/session/messages/SessionAgentActionPartWriter.ts +54 -0
  482. package/src/session/messages/SessionAgentContent.ts +56 -0
  483. package/src/session/messages/SessionAgentMessageState.ts +378 -0
  484. package/src/session/messages/{SessionAssistantMessageWriter.ts → SessionAgentMessageWriter.ts} +90 -61
  485. package/src/session/messages/SessionForkMessageFiles.ts +79 -0
  486. package/src/session/messages/SessionJsonValue.ts +1 -1
  487. package/src/session/messages/SessionMessageInteractionWriter.ts +23 -27
  488. package/src/session/messages/SessionMessageText.ts +5 -6
  489. package/src/session/messages/SessionTurnFileDiffBuilder.ts +229 -0
  490. package/src/session/messages/SessionTurnFileDiffData.ts +72 -0
  491. package/src/session/messages/SessionUserContext.ts +47 -0
  492. package/src/session/messages/SessionUserMessage.ts +88 -0
  493. package/src/session/preview/SessionMessagePreview.ts +27 -10
  494. package/src/session/runtime/SessionEventHub.ts +1 -1
  495. package/src/session/runtime/SessionModelRequestWarning.ts +29 -0
  496. package/src/session/runtime/SessionTitleTask.ts +3 -3
  497. package/src/session/runtime/SessionTurnCompletion.ts +159 -0
  498. package/src/session/runtime/SessionTurnContext.ts +96 -46
  499. package/src/session/runtime/SessionTurnFileDiff.ts +105 -0
  500. package/src/{workspace/store → session/storage}/LocalSessionAttachmentStore.ts +25 -4
  501. package/src/session/storage/LocalSessionDataStore.ts +41 -0
  502. package/src/session/storage/LocalSessionStore.ts +414 -0
  503. package/src/session/storage/LocalStorePaths.ts +123 -0
  504. package/src/session/storage/Metadata.ts +19 -36
  505. package/src/session/storage/RuntimeSessionPort.ts +11 -11
  506. package/src/session/storage/SessionStorageCodec.ts +465 -0
  507. package/src/session/storage/SessionStorageSchema.ts +132 -0
  508. package/src/session/storage/SqliteSessionStorage.ts +776 -0
  509. package/src/tools/ask/AskQuestionsTool.ts +5 -3
  510. package/src/types/action/ActionResult.ts +16 -11
  511. package/src/types/agent/AgentOptions.ts +27 -19
  512. package/src/types/agent/AgentSessionCollection.ts +19 -9
  513. package/src/types/agent/AgentStorage.ts +3 -1
  514. package/src/types/agent/SessionActor.ts +8 -17
  515. package/src/types/agent/SessionTypes.ts +32 -41
  516. package/src/types/executor/ModelRequest.ts +14 -0
  517. package/src/types/executor/SessionAssistantOutput.ts +15 -4
  518. package/src/types/executor/SessionToolExecutionContext.ts +1 -1
  519. package/src/types/executor/SessionTurnContext.ts +76 -35
  520. package/src/types/group/DispatchStrategy.ts +151 -77
  521. package/src/types/group/Group.ts +6 -6
  522. package/src/types/group/{GroupDispatchSession.ts → GroupDispatch.ts} +20 -25
  523. package/src/types/group/GroupSession.ts +9 -4
  524. package/src/types/group/GroupSessionStore.ts +8 -4
  525. package/src/types/sdk/AgentSessionAction.ts +2 -2
  526. package/src/types/sdk/AgentSessionPrompt.ts +21 -8
  527. package/src/types/session/AdaptivePartContextPolicy.ts +37 -0
  528. package/src/types/session/SessionAgentMessageState.ts +30 -0
  529. package/src/types/session/SessionCommand.ts +21 -7
  530. package/src/types/session/SessionComposer.ts +51 -45
  531. package/src/types/session/SessionComposition.ts +52 -0
  532. package/src/types/session/SessionContextPolicy.ts +77 -0
  533. package/src/types/session/SessionExecution.ts +11 -36
  534. package/src/types/session/SessionInteractions.ts +1 -1
  535. package/src/types/session/SessionLocalState.ts +1 -1
  536. package/src/types/session/SessionLoop.ts +8 -10
  537. package/src/types/session/SessionMessages.ts +31 -31
  538. package/src/types/session/SessionOptions.ts +27 -41
  539. package/src/types/session/SessionPort.ts +13 -13
  540. package/src/types/session/SessionState.ts +5 -8
  541. package/src/types/session/SessionSystem.ts +20 -1
  542. package/src/types/session/SessionTool.ts +2 -2
  543. package/src/types/session/SessionTurnCompletion.ts +24 -0
  544. package/src/types/session/SessionTurnFileDiff.ts +44 -0
  545. package/src/types/store/LocalStore.ts +10 -15
  546. package/src/types/store/SessionAttachmentStore.ts +19 -2
  547. package/src/types/store/SessionStorage.ts +121 -0
  548. package/src/types/store/SessionStore.ts +11 -7
  549. package/src/types/tools/ToolActionExecutionContext.ts +1 -1
  550. package/src/types/tools/ask/AskQuestionsTool.ts +1 -1
  551. package/src/utils/logger/Logger.ts +24 -42
  552. package/tsconfig.json +1 -2
  553. package/tsconfig.tsbuildinfo +1 -1
  554. package/bin/agent/AgentModel.d.ts +0 -28
  555. package/bin/agent/AgentModel.d.ts.map +0 -1
  556. package/bin/agent/AgentModel.js +0 -57
  557. package/bin/agent/AgentModel.js.map +0 -1
  558. package/bin/agent/WorkspaceEntry.d.ts +0 -82
  559. package/bin/agent/WorkspaceEntry.d.ts.map +0 -1
  560. package/bin/agent/WorkspaceEntry.js +0 -246
  561. package/bin/agent/WorkspaceEntry.js.map +0 -1
  562. package/bin/city/host/CityHostRegistry.d.ts +0 -44
  563. package/bin/city/host/CityHostRegistry.d.ts.map +0 -1
  564. package/bin/city/host/CityHostRegistry.js +0 -225
  565. package/bin/city/host/CityHostRegistry.js.map +0 -1
  566. package/bin/city/index.d.ts +0 -22
  567. package/bin/city/index.d.ts.map +0 -1
  568. package/bin/city/index.js +0 -10
  569. package/bin/city/index.js.map +0 -1
  570. package/bin/city/runtime/City.d.ts +0 -99
  571. package/bin/city/runtime/City.d.ts.map +0 -1
  572. package/bin/city/runtime/City.js +0 -376
  573. package/bin/city/runtime/City.js.map +0 -1
  574. package/bin/city/transport/SerializedTransport.d.ts +0 -30
  575. package/bin/city/transport/SerializedTransport.d.ts.map +0 -1
  576. package/bin/city/transport/SerializedTransport.js +0 -57
  577. package/bin/city/transport/SerializedTransport.js.map +0 -1
  578. package/bin/city/transport/http/AgentHTTP.d.ts +0 -66
  579. package/bin/city/transport/http/AgentHTTP.d.ts.map +0 -1
  580. package/bin/city/transport/http/AgentHTTP.js +0 -142
  581. package/bin/city/transport/http/AgentHTTP.js.map +0 -1
  582. package/bin/city/transport/http/CityHTTP.d.ts +0 -44
  583. package/bin/city/transport/http/CityHTTP.d.ts.map +0 -1
  584. package/bin/city/transport/http/CityHTTP.js +0 -171
  585. package/bin/city/transport/http/CityHTTP.js.map +0 -1
  586. package/bin/city/transport/http/NodeHttpAdapter.d.ts +0 -27
  587. package/bin/city/transport/http/NodeHttpAdapter.d.ts.map +0 -1
  588. package/bin/city/transport/http/NodeHttpAdapter.js +0 -57
  589. package/bin/city/transport/http/NodeHttpAdapter.js.map +0 -1
  590. package/bin/city/transport/http/routes/RuntimeRoutes.d.ts +0 -15
  591. package/bin/city/transport/http/routes/RuntimeRoutes.d.ts.map +0 -1
  592. package/bin/city/transport/http/routes/RuntimeRoutes.js +0 -38
  593. package/bin/city/transport/http/routes/RuntimeRoutes.js.map +0 -1
  594. package/bin/city/transport/http/routes/SessionRoutes.d.ts +0 -17
  595. package/bin/city/transport/http/routes/SessionRoutes.d.ts.map +0 -1
  596. package/bin/city/transport/http/routes/SessionRoutes.js +0 -417
  597. package/bin/city/transport/http/routes/SessionRoutes.js.map +0 -1
  598. package/bin/city/transport/rpc/AgentRPC.d.ts +0 -47
  599. package/bin/city/transport/rpc/AgentRPC.d.ts.map +0 -1
  600. package/bin/city/transport/rpc/AgentRPC.js +0 -89
  601. package/bin/city/transport/rpc/AgentRPC.js.map +0 -1
  602. package/bin/city/transport/rpc/CityRPC.d.ts +0 -26
  603. package/bin/city/transport/rpc/CityRPC.d.ts.map +0 -1
  604. package/bin/city/transport/rpc/CityRPC.js +0 -110
  605. package/bin/city/transport/rpc/CityRPC.js.map +0 -1
  606. package/bin/city/transport/rpc/RpcServer.d.ts +0 -30
  607. package/bin/city/transport/rpc/RpcServer.d.ts.map +0 -1
  608. package/bin/city/transport/rpc/RpcServer.js +0 -125
  609. package/bin/city/transport/rpc/RpcServer.js.map +0 -1
  610. package/bin/city/transport/rpc/server/InternalHandlers.d.ts +0 -22
  611. package/bin/city/transport/rpc/server/InternalHandlers.d.ts.map +0 -1
  612. package/bin/city/transport/rpc/server/InternalHandlers.js +0 -196
  613. package/bin/city/transport/rpc/server/InternalHandlers.js.map +0 -1
  614. package/bin/city/transport/rpc/server/RequestDispatcher.d.ts +0 -27
  615. package/bin/city/transport/rpc/server/RequestDispatcher.d.ts.map +0 -1
  616. package/bin/city/transport/rpc/server/RequestDispatcher.js +0 -38
  617. package/bin/city/transport/rpc/server/RequestDispatcher.js.map +0 -1
  618. package/bin/city/transport/rpc/server/SdkSessionHandlers.d.ts +0 -25
  619. package/bin/city/transport/rpc/server/SdkSessionHandlers.d.ts.map +0 -1
  620. package/bin/city/transport/rpc/server/SdkSessionHandlers.js +0 -146
  621. package/bin/city/transport/rpc/server/SdkSessionHandlers.js.map +0 -1
  622. package/bin/city/transport/rpc/server/ServerTypes.d.ts +0 -94
  623. package/bin/city/transport/rpc/server/ServerTypes.d.ts.map +0 -1
  624. package/bin/city/transport/rpc/server/ServerTypes.js +0 -9
  625. package/bin/city/transport/rpc/server/ServerTypes.js.map +0 -1
  626. package/bin/city/transport/session/RemoteSessionConfig.d.ts +0 -15
  627. package/bin/city/transport/session/RemoteSessionConfig.d.ts.map +0 -1
  628. package/bin/city/transport/session/RemoteSessionConfig.js +0 -23
  629. package/bin/city/transport/session/RemoteSessionConfig.js.map +0 -1
  630. package/bin/city/transport/types/AgentHttpBinding.d.ts +0 -24
  631. package/bin/city/transport/types/AgentHttpBinding.d.ts.map +0 -1
  632. package/bin/city/transport/types/AgentHttpBinding.js +0 -5
  633. package/bin/city/transport/types/AgentHttpBinding.js.map +0 -1
  634. package/bin/city/transport/types/AgentHttpRuntime.d.ts +0 -12
  635. package/bin/city/transport/types/AgentHttpRuntime.d.ts.map +0 -1
  636. package/bin/city/transport/types/AgentHttpRuntime.js +0 -7
  637. package/bin/city/transport/types/AgentHttpRuntime.js.map +0 -1
  638. package/bin/city/transport/types/AgentRpcBinding.d.ts +0 -27
  639. package/bin/city/transport/types/AgentRpcBinding.d.ts.map +0 -1
  640. package/bin/city/transport/types/AgentRpcBinding.js +0 -8
  641. package/bin/city/transport/types/AgentRpcBinding.js.map +0 -1
  642. package/bin/city/transport/types/AgentRpcRuntime.d.ts +0 -18
  643. package/bin/city/transport/types/AgentRpcRuntime.d.ts.map +0 -1
  644. package/bin/city/transport/types/AgentRpcRuntime.js +0 -7
  645. package/bin/city/transport/types/AgentRpcRuntime.js.map +0 -1
  646. package/bin/city/transport/types/AgentSessionModelResolver.d.ts +0 -11
  647. package/bin/city/transport/types/AgentSessionModelResolver.d.ts.map +0 -1
  648. package/bin/city/transport/types/AgentSessionModelResolver.js +0 -7
  649. package/bin/city/transport/types/AgentSessionModelResolver.js.map +0 -1
  650. package/bin/city/transport/types/CityHttpRuntime.d.ts +0 -36
  651. package/bin/city/transport/types/CityHttpRuntime.d.ts.map +0 -1
  652. package/bin/city/transport/types/CityHttpRuntime.js +0 -8
  653. package/bin/city/transport/types/CityHttpRuntime.js.map +0 -1
  654. package/bin/city/transport/types/CityRpcRuntime.d.ts +0 -17
  655. package/bin/city/transport/types/CityRpcRuntime.d.ts.map +0 -1
  656. package/bin/city/transport/types/CityRpcRuntime.js +0 -8
  657. package/bin/city/transport/types/CityRpcRuntime.js.map +0 -1
  658. package/bin/city/transport/types/RpcProtocol.d.ts +0 -24
  659. package/bin/city/transport/types/RpcProtocol.d.ts.map +0 -1
  660. package/bin/city/transport/types/RpcProtocol.js +0 -9
  661. package/bin/city/transport/types/RpcProtocol.js.map +0 -1
  662. package/bin/city/types/City.d.ts +0 -84
  663. package/bin/city/types/City.d.ts.map +0 -1
  664. package/bin/city/types/City.js +0 -7
  665. package/bin/city/types/City.js.map +0 -1
  666. package/bin/city/types/PluginHostContext.d.ts +0 -34
  667. package/bin/city/types/PluginHostContext.d.ts.map +0 -1
  668. package/bin/city/types/PluginHostContext.js +0 -11
  669. package/bin/city/types/PluginHostContext.js.map +0 -1
  670. package/bin/city/types/SerializedTransport.d.ts +0 -16
  671. package/bin/city/types/SerializedTransport.d.ts.map +0 -1
  672. package/bin/city/types/SerializedTransport.js +0 -3
  673. package/bin/city/types/SerializedTransport.js.map +0 -1
  674. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.d.ts +0 -45
  675. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.d.ts.map +0 -1
  676. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.js +0 -144
  677. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.js.map +0 -1
  678. package/bin/executor/composer/system/SessionSystemComposer.d.ts +0 -23
  679. package/bin/executor/composer/system/SessionSystemComposer.d.ts.map +0 -1
  680. package/bin/executor/composer/system/SessionSystemComposer.js +0 -9
  681. package/bin/executor/composer/system/SessionSystemComposer.js.map +0 -1
  682. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts +0 -43
  683. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.d.ts.map +0 -1
  684. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js +0 -42
  685. package/bin/executor/composer/system/default/DefaultSessionSystemComposer.js.map +0 -1
  686. package/bin/executor/composer/system/default/PromptRenderer.d.ts +0 -35
  687. package/bin/executor/composer/system/default/PromptRenderer.d.ts.map +0 -1
  688. package/bin/executor/composer/system/default/PromptRenderer.js +0 -23
  689. package/bin/executor/composer/system/default/PromptRenderer.js.map +0 -1
  690. package/bin/executor/composer/system/default/SystemDomain.d.ts +0 -169
  691. package/bin/executor/composer/system/default/SystemDomain.d.ts.map +0 -1
  692. package/bin/executor/composer/system/default/SystemDomain.js +0 -201
  693. package/bin/executor/composer/system/default/SystemDomain.js.map +0 -1
  694. package/bin/executor/composer/system/default/assets/task.prompt.d.ts +0 -7
  695. package/bin/executor/composer/system/default/assets/task.prompt.d.ts.map +0 -1
  696. package/bin/executor/composer/system/default/assets/task.prompt.js +0 -8
  697. package/bin/executor/composer/system/default/assets/task.prompt.js.map +0 -1
  698. package/bin/executor/composer/system/default/variables/GeoContext.d.ts +0 -14
  699. package/bin/executor/composer/system/default/variables/GeoContext.d.ts.map +0 -1
  700. package/bin/executor/composer/system/default/variables/GeoContext.js +0 -150
  701. package/bin/executor/composer/system/default/variables/GeoContext.js.map +0 -1
  702. package/bin/executor/composer/system/default/variables/PromptTypes.d.ts +0 -36
  703. package/bin/executor/composer/system/default/variables/PromptTypes.d.ts.map +0 -1
  704. package/bin/executor/composer/system/default/variables/PromptTypes.js +0 -9
  705. package/bin/executor/composer/system/default/variables/PromptTypes.js.map +0 -1
  706. package/bin/executor/composer/system/default/variables/VariableReplacer.d.ts +0 -61
  707. package/bin/executor/composer/system/default/variables/VariableReplacer.d.ts.map +0 -1
  708. package/bin/executor/composer/system/default/variables/VariableReplacer.js +0 -93
  709. package/bin/executor/composer/system/default/variables/VariableReplacer.js.map +0 -1
  710. package/bin/executor/core-engine/CoreEngineMessageState.d.ts +0 -63
  711. package/bin/executor/core-engine/CoreEngineMessageState.d.ts.map +0 -1
  712. package/bin/executor/core-engine/CoreEngineMessageState.js +0 -81
  713. package/bin/executor/core-engine/CoreEngineMessageState.js.map +0 -1
  714. package/bin/group/GroupDispatchSession.d.ts +0 -36
  715. package/bin/group/GroupDispatchSession.d.ts.map +0 -1
  716. package/bin/group/GroupDispatchSession.js.map +0 -1
  717. package/bin/internal/AgentRuntime.d.ts +0 -43
  718. package/bin/internal/AgentRuntime.d.ts.map +0 -1
  719. package/bin/internal/AgentRuntime.js +0 -179
  720. package/bin/internal/AgentRuntime.js.map +0 -1
  721. package/bin/internal/GroupRuntime.d.ts +0 -17
  722. package/bin/internal/GroupRuntime.d.ts.map +0 -1
  723. package/bin/internal/GroupRuntime.js +0 -66
  724. package/bin/internal/GroupRuntime.js.map +0 -1
  725. package/bin/internal/index.d.ts +0 -8
  726. package/bin/internal/index.d.ts.map +0 -1
  727. package/bin/internal/index.js +0 -8
  728. package/bin/internal/index.js.map +0 -1
  729. package/bin/plugin/core/ActionScheduleExecutor.d.ts +0 -19
  730. package/bin/plugin/core/ActionScheduleExecutor.d.ts.map +0 -1
  731. package/bin/plugin/core/ActionScheduleExecutor.js +0 -58
  732. package/bin/plugin/core/ActionScheduleExecutor.js.map +0 -1
  733. package/bin/plugin/core/ActionScheduleRuntime.d.ts +0 -25
  734. package/bin/plugin/core/ActionScheduleRuntime.d.ts.map +0 -1
  735. package/bin/plugin/core/ActionScheduleRuntime.js +0 -62
  736. package/bin/plugin/core/ActionScheduleRuntime.js.map +0 -1
  737. package/bin/plugin/core/ActionScheduleStore.d.ts +0 -97
  738. package/bin/plugin/core/ActionScheduleStore.d.ts.map +0 -1
  739. package/bin/plugin/core/ActionScheduleStore.js +0 -313
  740. package/bin/plugin/core/ActionScheduleStore.js.map +0 -1
  741. package/bin/plugin/core/ActionScheduleTime.d.ts +0 -32
  742. package/bin/plugin/core/ActionScheduleTime.d.ts.map +0 -1
  743. package/bin/plugin/core/ActionScheduleTime.js +0 -108
  744. package/bin/plugin/core/ActionScheduleTime.js.map +0 -1
  745. package/bin/plugin/core/BasePlugin.d.ts +0 -59
  746. package/bin/plugin/core/BasePlugin.d.ts.map +0 -1
  747. package/bin/plugin/core/BasePlugin.js +0 -40
  748. package/bin/plugin/core/BasePlugin.js.map +0 -1
  749. package/bin/plugin/core/HookRegistry.d.ts +0 -67
  750. package/bin/plugin/core/HookRegistry.d.ts.map +0 -1
  751. package/bin/plugin/core/HookRegistry.js +0 -220
  752. package/bin/plugin/core/HookRegistry.js.map +0 -1
  753. package/bin/plugin/core/PluginActionExecution.d.ts +0 -33
  754. package/bin/plugin/core/PluginActionExecution.d.ts.map +0 -1
  755. package/bin/plugin/core/PluginActionExecution.js +0 -168
  756. package/bin/plugin/core/PluginActionExecution.js.map +0 -1
  757. package/bin/plugin/core/PluginActionFactory.d.ts +0 -93
  758. package/bin/plugin/core/PluginActionFactory.d.ts.map +0 -1
  759. package/bin/plugin/core/PluginActionFactory.js +0 -56
  760. package/bin/plugin/core/PluginActionFactory.js.map +0 -1
  761. package/bin/plugin/core/PluginCatalog.d.ts +0 -57
  762. package/bin/plugin/core/PluginCatalog.d.ts.map +0 -1
  763. package/bin/plugin/core/PluginCatalog.js +0 -117
  764. package/bin/plugin/core/PluginCatalog.js.map +0 -1
  765. package/bin/plugin/core/PluginContext.d.ts +0 -42
  766. package/bin/plugin/core/PluginContext.d.ts.map +0 -1
  767. package/bin/plugin/core/PluginContext.js +0 -35
  768. package/bin/plugin/core/PluginContext.js.map +0 -1
  769. package/bin/plugin/core/PluginHttpRoutes.d.ts +0 -24
  770. package/bin/plugin/core/PluginHttpRoutes.d.ts.map +0 -1
  771. package/bin/plugin/core/PluginHttpRoutes.js +0 -35
  772. package/bin/plugin/core/PluginHttpRoutes.js.map +0 -1
  773. package/bin/plugin/core/PluginRegistry.d.ts +0 -207
  774. package/bin/plugin/core/PluginRegistry.d.ts.map +0 -1
  775. package/bin/plugin/core/PluginRegistry.js +0 -675
  776. package/bin/plugin/core/PluginRegistry.js.map +0 -1
  777. package/bin/plugin/core/PluginStateController.d.ts +0 -16
  778. package/bin/plugin/core/PluginStateController.d.ts.map +0 -1
  779. package/bin/plugin/core/PluginStateController.js +0 -14
  780. package/bin/plugin/core/PluginStateController.js.map +0 -1
  781. package/bin/plugin/tool/PluginToolRuntime.d.ts +0 -15
  782. package/bin/plugin/tool/PluginToolRuntime.d.ts.map +0 -1
  783. package/bin/plugin/tool/PluginToolRuntime.js +0 -108
  784. package/bin/plugin/tool/PluginToolRuntime.js.map +0 -1
  785. package/bin/plugin/tool/PluginToolSchemas.d.ts +0 -36
  786. package/bin/plugin/tool/PluginToolSchemas.d.ts.map +0 -1
  787. package/bin/plugin/tool/PluginToolSchemas.js +0 -42
  788. package/bin/plugin/tool/PluginToolSchemas.js.map +0 -1
  789. package/bin/plugin/tool/PluginTools.d.ts +0 -22
  790. package/bin/plugin/tool/PluginTools.d.ts.map +0 -1
  791. package/bin/plugin/tool/PluginTools.js +0 -61
  792. package/bin/plugin/tool/PluginTools.js.map +0 -1
  793. package/bin/plugin/types/ActionSchedule.d.ts +0 -91
  794. package/bin/plugin/types/ActionSchedule.d.ts.map +0 -1
  795. package/bin/plugin/types/ActionSchedule.js +0 -10
  796. package/bin/plugin/types/ActionSchedule.js.map +0 -1
  797. package/bin/plugin/types/PluginApi.d.ts +0 -79
  798. package/bin/plugin/types/PluginApi.d.ts.map +0 -1
  799. package/bin/plugin/types/PluginApi.js +0 -9
  800. package/bin/plugin/types/PluginApi.js.map +0 -1
  801. package/bin/remote/RemoteAgent.d.ts +0 -36
  802. package/bin/remote/RemoteAgent.d.ts.map +0 -1
  803. package/bin/remote/RemoteAgent.js +0 -97
  804. package/bin/remote/RemoteAgent.js.map +0 -1
  805. package/bin/remote/RemoteSession.d.ts +0 -67
  806. package/bin/remote/RemoteSession.d.ts.map +0 -1
  807. package/bin/remote/RemoteSession.js +0 -275
  808. package/bin/remote/RemoteSession.js.map +0 -1
  809. package/bin/remote/RemoteTransport.d.ts +0 -80
  810. package/bin/remote/RemoteTransport.d.ts.map +0 -1
  811. package/bin/remote/RemoteTransport.js +0 -9
  812. package/bin/remote/RemoteTransport.js.map +0 -1
  813. package/bin/remote/TransportFactory.d.ts +0 -13
  814. package/bin/remote/TransportFactory.d.ts.map +0 -1
  815. package/bin/remote/TransportFactory.js +0 -22
  816. package/bin/remote/TransportFactory.js.map +0 -1
  817. package/bin/remote/transports/HttpRemoteAgentTransport.d.ts +0 -52
  818. package/bin/remote/transports/HttpRemoteAgentTransport.d.ts.map +0 -1
  819. package/bin/remote/transports/HttpRemoteAgentTransport.js +0 -399
  820. package/bin/remote/transports/HttpRemoteAgentTransport.js.map +0 -1
  821. package/bin/remote/transports/RpcClient.d.ts +0 -168
  822. package/bin/remote/transports/RpcClient.d.ts.map +0 -1
  823. package/bin/remote/transports/RpcClient.js +0 -484
  824. package/bin/remote/transports/RpcClient.js.map +0 -1
  825. package/bin/remote/transports/RpcRemoteAgentTransport.d.ts +0 -51
  826. package/bin/remote/transports/RpcRemoteAgentTransport.d.ts.map +0 -1
  827. package/bin/remote/transports/RpcRemoteAgentTransport.js +0 -102
  828. package/bin/remote/transports/RpcRemoteAgentTransport.js.map +0 -1
  829. package/bin/session/SessionCommand.d.ts +0 -24
  830. package/bin/session/SessionCommand.d.ts.map +0 -1
  831. package/bin/session/SessionCommand.js +0 -35
  832. package/bin/session/SessionCommand.js.map +0 -1
  833. package/bin/session/messages/SessionAssistantMessageWriter.d.ts.map +0 -1
  834. package/bin/session/messages/SessionAssistantMessageWriter.js.map +0 -1
  835. package/bin/session/messages/SessionMessageCompaction.d.ts +0 -26
  836. package/bin/session/messages/SessionMessageCompaction.d.ts.map +0 -1
  837. package/bin/session/messages/SessionMessageCompaction.js +0 -118
  838. package/bin/session/messages/SessionMessageCompaction.js.map +0 -1
  839. package/bin/session/runtime/SessionCompactOperation.d.ts +0 -29
  840. package/bin/session/runtime/SessionCompactOperation.d.ts.map +0 -1
  841. package/bin/session/runtime/SessionCompactOperation.js +0 -66
  842. package/bin/session/runtime/SessionCompactOperation.js.map +0 -1
  843. package/bin/session/runtime/SessionHistoryCompaction.d.ts +0 -22
  844. package/bin/session/runtime/SessionHistoryCompaction.d.ts.map +0 -1
  845. package/bin/session/runtime/SessionHistoryCompaction.js +0 -31
  846. package/bin/session/runtime/SessionHistoryCompaction.js.map +0 -1
  847. package/bin/types/agent/RemoteAgentOptions.d.ts +0 -28
  848. package/bin/types/agent/RemoteAgentOptions.d.ts.map +0 -1
  849. package/bin/types/agent/RemoteAgentOptions.js +0 -9
  850. package/bin/types/agent/RemoteAgentOptions.js.map +0 -1
  851. package/bin/types/agent/RemoteAgentPluginAction.d.ts +0 -46
  852. package/bin/types/agent/RemoteAgentPluginAction.d.ts.map +0 -1
  853. package/bin/types/agent/RemoteAgentPluginAction.js +0 -9
  854. package/bin/types/agent/RemoteAgentPluginAction.js.map +0 -1
  855. package/bin/types/agent/WorkspaceEntryOptions.d.ts +0 -16
  856. package/bin/types/agent/WorkspaceEntryOptions.d.ts.map +0 -1
  857. package/bin/types/agent/WorkspaceEntryOptions.js +0 -8
  858. package/bin/types/agent/WorkspaceEntryOptions.js.map +0 -1
  859. package/bin/types/common/Json.d.ts +0 -32
  860. package/bin/types/common/Json.d.ts.map +0 -1
  861. package/bin/types/common/Json.js +0 -9
  862. package/bin/types/common/Json.js.map +0 -1
  863. package/bin/types/common/Template.d.ts +0 -9
  864. package/bin/types/common/Template.d.ts.map +0 -1
  865. package/bin/types/common/Template.js +0 -9
  866. package/bin/types/common/Template.js.map +0 -1
  867. package/bin/types/group/GroupDispatchSession.d.ts.map +0 -1
  868. package/bin/types/group/GroupDispatchSession.js +0 -8
  869. package/bin/types/group/GroupDispatchSession.js.map +0 -1
  870. package/bin/types/plugin/AgentPluginContext.d.ts +0 -25
  871. package/bin/types/plugin/AgentPluginContext.d.ts.map +0 -1
  872. package/bin/types/plugin/AgentPluginContext.js +0 -10
  873. package/bin/types/plugin/AgentPluginContext.js.map +0 -1
  874. package/bin/types/plugin/PluginAction.d.ts +0 -161
  875. package/bin/types/plugin/PluginAction.d.ts.map +0 -1
  876. package/bin/types/plugin/PluginAction.js +0 -9
  877. package/bin/types/plugin/PluginAction.js.map +0 -1
  878. package/bin/types/plugin/PluginActionExecution.d.ts +0 -31
  879. package/bin/types/plugin/PluginActionExecution.d.ts.map +0 -1
  880. package/bin/types/plugin/PluginActionExecution.js +0 -10
  881. package/bin/types/plugin/PluginActionExecution.js.map +0 -1
  882. package/bin/types/plugin/PluginCommand.d.ts +0 -14
  883. package/bin/types/plugin/PluginCommand.d.ts.map +0 -1
  884. package/bin/types/plugin/PluginCommand.js +0 -7
  885. package/bin/types/plugin/PluginCommand.js.map +0 -1
  886. package/bin/types/plugin/PluginContext.d.ts +0 -45
  887. package/bin/types/plugin/PluginContext.d.ts.map +0 -1
  888. package/bin/types/plugin/PluginContext.js +0 -9
  889. package/bin/types/plugin/PluginContext.js.map +0 -1
  890. package/bin/types/plugin/PluginDefinition.d.ts +0 -44
  891. package/bin/types/plugin/PluginDefinition.d.ts.map +0 -1
  892. package/bin/types/plugin/PluginDefinition.js +0 -9
  893. package/bin/types/plugin/PluginDefinition.js.map +0 -1
  894. package/bin/types/plugin/PluginExecutionContext.d.ts +0 -23
  895. package/bin/types/plugin/PluginExecutionContext.d.ts.map +0 -1
  896. package/bin/types/plugin/PluginExecutionContext.js +0 -8
  897. package/bin/types/plugin/PluginExecutionContext.js.map +0 -1
  898. package/bin/types/plugin/PluginHttp.d.ts +0 -34
  899. package/bin/types/plugin/PluginHttp.d.ts.map +0 -1
  900. package/bin/types/plugin/PluginHttp.js +0 -9
  901. package/bin/types/plugin/PluginHttp.js.map +0 -1
  902. package/bin/types/plugin/PluginNotification.d.ts +0 -31
  903. package/bin/types/plugin/PluginNotification.d.ts.map +0 -1
  904. package/bin/types/plugin/PluginNotification.js +0 -8
  905. package/bin/types/plugin/PluginNotification.js.map +0 -1
  906. package/bin/types/plugin/PluginRegistry.d.ts +0 -21
  907. package/bin/types/plugin/PluginRegistry.d.ts.map +0 -1
  908. package/bin/types/plugin/PluginRegistry.js +0 -9
  909. package/bin/types/plugin/PluginRegistry.js.map +0 -1
  910. package/bin/types/plugin/PluginRuntime.d.ts +0 -267
  911. package/bin/types/plugin/PluginRuntime.d.ts.map +0 -1
  912. package/bin/types/plugin/PluginRuntime.js +0 -9
  913. package/bin/types/plugin/PluginRuntime.js.map +0 -1
  914. package/bin/types/plugin/PluginServices.d.ts +0 -10
  915. package/bin/types/plugin/PluginServices.d.ts.map +0 -1
  916. package/bin/types/plugin/PluginServices.js +0 -3
  917. package/bin/types/plugin/PluginServices.js.map +0 -1
  918. package/bin/types/plugin/PluginState.d.ts +0 -62
  919. package/bin/types/plugin/PluginState.d.ts.map +0 -1
  920. package/bin/types/plugin/PluginState.js +0 -10
  921. package/bin/types/plugin/PluginState.js.map +0 -1
  922. package/bin/types/plugin/PluginTool.d.ts +0 -92
  923. package/bin/types/plugin/PluginTool.d.ts.map +0 -1
  924. package/bin/types/plugin/PluginTool.js +0 -9
  925. package/bin/types/plugin/PluginTool.js.map +0 -1
  926. package/bin/types/rpc/RpcProtocol.d.ts +0 -417
  927. package/bin/types/rpc/RpcProtocol.d.ts.map +0 -1
  928. package/bin/types/rpc/RpcProtocol.js +0 -10
  929. package/bin/types/rpc/RpcProtocol.js.map +0 -1
  930. package/bin/types/sdk/AgentSessionCompact.d.ts +0 -31
  931. package/bin/types/sdk/AgentSessionCompact.d.ts.map +0 -1
  932. package/bin/types/sdk/AgentSessionCompact.js +0 -8
  933. package/bin/types/sdk/AgentSessionCompact.js.map +0 -1
  934. package/bin/types/session/SessionAction.d.ts +0 -39
  935. package/bin/types/session/SessionAction.d.ts.map +0 -1
  936. package/bin/types/session/SessionAction.js +0 -8
  937. package/bin/types/session/SessionAction.js.map +0 -1
  938. package/bin/types/session/SessionContent.d.ts +0 -41
  939. package/bin/types/session/SessionContent.d.ts.map +0 -1
  940. package/bin/types/session/SessionContent.js +0 -8
  941. package/bin/types/session/SessionContent.js.map +0 -1
  942. package/bin/types/session/SessionInteraction.d.ts +0 -215
  943. package/bin/types/session/SessionInteraction.d.ts.map +0 -1
  944. package/bin/types/session/SessionInteraction.js +0 -15
  945. package/bin/types/session/SessionInteraction.js.map +0 -1
  946. package/bin/types/session/SessionMessage.d.ts +0 -268
  947. package/bin/types/session/SessionMessage.d.ts.map +0 -1
  948. package/bin/types/session/SessionMessage.js +0 -8
  949. package/bin/types/session/SessionMessage.js.map +0 -1
  950. package/bin/types/session/SessionMutation.d.ts +0 -151
  951. package/bin/types/session/SessionMutation.d.ts.map +0 -1
  952. package/bin/types/session/SessionMutation.js +0 -20
  953. package/bin/types/session/SessionMutation.js.map +0 -1
  954. package/bin/types/session/SessionOrigin.d.ts +0 -19
  955. package/bin/types/session/SessionOrigin.d.ts.map +0 -1
  956. package/bin/types/session/SessionOrigin.js +0 -8
  957. package/bin/types/session/SessionOrigin.js.map +0 -1
  958. package/bin/types/session/SessionSegment.d.ts +0 -57
  959. package/bin/types/session/SessionSegment.d.ts.map +0 -1
  960. package/bin/types/session/SessionSegment.js +0 -8
  961. package/bin/types/session/SessionSegment.js.map +0 -1
  962. package/bin/types/store/SessionDataStore.d.ts +0 -85
  963. package/bin/types/store/SessionDataStore.d.ts.map +0 -1
  964. package/bin/types/store/SessionDataStore.js +0 -9
  965. package/bin/types/store/SessionDataStore.js.map +0 -1
  966. package/bin/utils/Template.d.ts +0 -17
  967. package/bin/utils/Template.d.ts.map +0 -1
  968. package/bin/utils/Template.js +0 -24
  969. package/bin/utils/Template.js.map +0 -1
  970. package/bin/workspace/WorkspacePaths.d.ts +0 -16
  971. package/bin/workspace/WorkspacePaths.d.ts.map +0 -1
  972. package/bin/workspace/WorkspacePaths.js +0 -35
  973. package/bin/workspace/WorkspacePaths.js.map +0 -1
  974. package/bin/workspace/store/JsonlSessionMessageStore.d.ts +0 -77
  975. package/bin/workspace/store/JsonlSessionMessageStore.d.ts.map +0 -1
  976. package/bin/workspace/store/JsonlSessionMessageStore.js +0 -419
  977. package/bin/workspace/store/JsonlSessionMessageStore.js.map +0 -1
  978. package/bin/workspace/store/LocalGroupDispatchSessionDataStore.d.ts +0 -28
  979. package/bin/workspace/store/LocalGroupDispatchSessionDataStore.d.ts.map +0 -1
  980. package/bin/workspace/store/LocalGroupDispatchSessionDataStore.js +0 -102
  981. package/bin/workspace/store/LocalGroupDispatchSessionDataStore.js.map +0 -1
  982. package/bin/workspace/store/LocalGroupSessionDataStore.d.ts.map +0 -1
  983. package/bin/workspace/store/LocalGroupSessionDataStore.js.map +0 -1
  984. package/bin/workspace/store/LocalGroupSessionStore.d.ts.map +0 -1
  985. package/bin/workspace/store/LocalGroupSessionStore.js.map +0 -1
  986. package/bin/workspace/store/LocalSessionAttachmentStore.d.ts.map +0 -1
  987. package/bin/workspace/store/LocalSessionAttachmentStore.js.map +0 -1
  988. package/bin/workspace/store/LocalSessionDataStore.d.ts +0 -45
  989. package/bin/workspace/store/LocalSessionDataStore.d.ts.map +0 -1
  990. package/bin/workspace/store/LocalSessionDataStore.js +0 -100
  991. package/bin/workspace/store/LocalSessionDataStore.js.map +0 -1
  992. package/bin/workspace/store/LocalSessionStore.d.ts.map +0 -1
  993. package/bin/workspace/store/LocalSessionStore.js +0 -177
  994. package/bin/workspace/store/LocalSessionStore.js.map +0 -1
  995. package/bin/workspace/store/LocalStorePaths.d.ts +0 -35
  996. package/bin/workspace/store/LocalStorePaths.d.ts.map +0 -1
  997. package/bin/workspace/store/LocalStorePaths.js +0 -62
  998. package/bin/workspace/store/LocalStorePaths.js.map +0 -1
  999. package/bin/workspace/store/SessionMessageStoreFactory.d.ts +0 -12
  1000. package/bin/workspace/store/SessionMessageStoreFactory.d.ts.map +0 -1
  1001. package/bin/workspace/store/SessionMessageStoreFactory.js +0 -13
  1002. package/bin/workspace/store/SessionMessageStoreFactory.js.map +0 -1
  1003. package/city-test/agent-http.test.mjs +0 -326
  1004. package/city-test/city-container.test.mjs +0 -156
  1005. package/city-test/city-host-registry.test.mjs +0 -68
  1006. package/city-test/city-transport.test.mjs +0 -282
  1007. package/city-test/group.test.mjs +0 -990
  1008. package/city-test/session-model.test.mjs +0 -169
  1009. package/city-test/transport-lifecycle.test.mjs +0 -164
  1010. package/scripts/PlatformSandbox.mjs +0 -17
  1011. package/scripts/action-schedule-store.test.mjs +0 -171
  1012. package/scripts/agent-env-shell-sandbox.test.mjs +0 -94
  1013. package/scripts/agent-env.test.mjs +0 -56
  1014. package/scripts/agent-multi-workspace.test.mjs +0 -280
  1015. package/scripts/agent-ready.test.mjs +0 -296
  1016. package/scripts/agent-session-maintenance.test.mjs +0 -47
  1017. package/scripts/agent-store.test.mjs +0 -182
  1018. package/scripts/city-model-tool-loop.test.mjs +0 -95
  1019. package/scripts/file-tools.test.mjs +0 -282
  1020. package/scripts/image-plugin-job.test.mjs +0 -600
  1021. package/scripts/multi-agent-plugin-isolation.test.mjs +0 -170
  1022. package/scripts/plugin-tools.test.mjs +0 -556
  1023. package/scripts/remote-session-reconnect.test.mjs +0 -183
  1024. package/scripts/rpc-url-routing.test.mjs +0 -29
  1025. package/scripts/search-tools.test.mjs +0 -188
  1026. package/scripts/session-ask-question.test.mjs +0 -226
  1027. package/scripts/session-attachments.test.mjs +0 -104
  1028. package/scripts/session-compact-handle.test.mjs +0 -118
  1029. package/scripts/session-compaction-prompts.test.mjs +0 -49
  1030. package/scripts/session-composer.test.mjs +0 -208
  1031. package/scripts/session-config-turn-boundary.test.mjs +0 -921
  1032. package/scripts/session-dynamic-interaction.test.mjs +0 -75
  1033. package/scripts/session-fork.test.mjs +0 -35
  1034. package/scripts/session-list-title.test.mjs +0 -202
  1035. package/scripts/session-messages.test.mjs +0 -490
  1036. package/scripts/session-shell-approval.test.mjs +0 -179
  1037. package/scripts/session-title-event.test.mjs +0 -282
  1038. package/scripts/session-tool-approval.test.mjs +0 -173
  1039. package/scripts/session-turn-failure.test.mjs +0 -363
  1040. package/scripts/workspace.test.mjs +0 -260
  1041. package/src/agent/AgentModel.ts +0 -66
  1042. package/src/agent/WorkspaceEntry.ts +0 -309
  1043. package/src/city/host/CityHostRegistry.ts +0 -260
  1044. package/src/city/index.ts +0 -49
  1045. package/src/city/runtime/City.ts +0 -425
  1046. package/src/city/transport/SerializedTransport.ts +0 -65
  1047. package/src/city/transport/http/AgentHTTP.ts +0 -176
  1048. package/src/city/transport/http/CityHTTP.ts +0 -196
  1049. package/src/city/transport/http/NodeHttpAdapter.ts +0 -75
  1050. package/src/city/transport/http/routes/RuntimeRoutes.ts +0 -51
  1051. package/src/city/transport/http/routes/SessionRoutes.ts +0 -497
  1052. package/src/city/transport/rpc/AgentRPC.ts +0 -111
  1053. package/src/city/transport/rpc/CityRPC.ts +0 -138
  1054. package/src/city/transport/rpc/RpcServer.ts +0 -158
  1055. package/src/city/transport/rpc/server/InternalHandlers.ts +0 -223
  1056. package/src/city/transport/rpc/server/RequestDispatcher.ts +0 -67
  1057. package/src/city/transport/rpc/server/SdkSessionHandlers.ts +0 -166
  1058. package/src/city/transport/rpc/server/ServerTypes.ts +0 -103
  1059. package/src/city/transport/session/RemoteSessionConfig.ts +0 -34
  1060. package/src/city/transport/types/AgentHttpBinding.ts +0 -25
  1061. package/src/city/transport/types/AgentHttpRuntime.ts +0 -13
  1062. package/src/city/transport/types/AgentRpcBinding.ts +0 -28
  1063. package/src/city/transport/types/AgentRpcRuntime.ts +0 -20
  1064. package/src/city/transport/types/AgentSessionModelResolver.ts +0 -13
  1065. package/src/city/transport/types/CityHttpRuntime.ts +0 -45
  1066. package/src/city/transport/types/CityRpcRuntime.ts +0 -27
  1067. package/src/city/transport/types/RpcProtocol.ts +0 -32
  1068. package/src/city/types/City.ts +0 -99
  1069. package/src/city/types/PluginHostContext.ts +0 -44
  1070. package/src/city/types/SerializedTransport.ts +0 -19
  1071. package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.ts +0 -162
  1072. package/src/executor/composer/system/SessionSystemComposer.ts +0 -25
  1073. package/src/executor/composer/system/default/DefaultSessionSystemComposer.ts +0 -76
  1074. package/src/executor/composer/system/default/PromptRenderer.ts +0 -52
  1075. package/src/executor/composer/system/default/SystemDomain.ts +0 -350
  1076. package/src/executor/composer/system/default/assets/task.prompt.ts +0 -9
  1077. package/src/executor/composer/system/default/assets/task.prompt.ts.txt +0 -33
  1078. package/src/executor/composer/system/default/variables/GeoContext.ts +0 -180
  1079. package/src/executor/composer/system/default/variables/PromptTypes.ts +0 -37
  1080. package/src/executor/composer/system/default/variables/VariableReplacer.ts +0 -154
  1081. package/src/executor/core-engine/CoreEngineMessageState.ts +0 -117
  1082. package/src/group/GroupDispatchSession.ts +0 -175
  1083. package/src/internal/AgentRuntime.ts +0 -229
  1084. package/src/internal/GroupRuntime.ts +0 -89
  1085. package/src/internal/index.ts +0 -33
  1086. package/src/plugin/core/ActionScheduleExecutor.ts +0 -68
  1087. package/src/plugin/core/ActionScheduleRuntime.ts +0 -92
  1088. package/src/plugin/core/ActionScheduleStore.ts +0 -414
  1089. package/src/plugin/core/ActionScheduleTime.ts +0 -132
  1090. package/src/plugin/core/BasePlugin.ts +0 -79
  1091. package/src/plugin/core/HookRegistry.ts +0 -297
  1092. package/src/plugin/core/PluginActionExecution.ts +0 -230
  1093. package/src/plugin/core/PluginActionFactory.ts +0 -172
  1094. package/src/plugin/core/PluginCatalog.ts +0 -153
  1095. package/src/plugin/core/PluginContext.ts +0 -71
  1096. package/src/plugin/core/PluginHttpRoutes.ts +0 -47
  1097. package/src/plugin/core/PluginRegistry.ts +0 -888
  1098. package/src/plugin/core/PluginStateController.ts +0 -19
  1099. package/src/plugin/tool/PluginToolRuntime.ts +0 -124
  1100. package/src/plugin/tool/PluginToolSchemas.ts +0 -44
  1101. package/src/plugin/tool/PluginTools.ts +0 -92
  1102. package/src/plugin/types/ActionSchedule.ts +0 -100
  1103. package/src/plugin/types/PluginApi.ts +0 -86
  1104. package/src/remote/RemoteAgent.ts +0 -130
  1105. package/src/remote/RemoteSession.ts +0 -359
  1106. package/src/remote/RemoteTransport.ts +0 -122
  1107. package/src/remote/TransportFactory.ts +0 -29
  1108. package/src/remote/transports/HttpRemoteAgentTransport.ts +0 -582
  1109. package/src/remote/transports/RpcClient.ts +0 -638
  1110. package/src/remote/transports/RpcRemoteAgentTransport.ts +0 -187
  1111. package/src/session/SessionCommand.ts +0 -42
  1112. package/src/session/messages/SessionMessageCompaction.ts +0 -147
  1113. package/src/session/runtime/SessionCompactOperation.ts +0 -93
  1114. package/src/session/runtime/SessionHistoryCompaction.ts +0 -45
  1115. package/src/types/agent/RemoteAgentOptions.ts +0 -29
  1116. package/src/types/agent/RemoteAgentPluginAction.ts +0 -52
  1117. package/src/types/agent/WorkspaceEntryOptions.ts +0 -18
  1118. package/src/types/common/Json.ts +0 -34
  1119. package/src/types/common/Template.ts +0 -9
  1120. package/src/types/plugin/AgentPluginContext.ts +0 -30
  1121. package/src/types/plugin/PluginAction.ts +0 -178
  1122. package/src/types/plugin/PluginActionExecution.ts +0 -36
  1123. package/src/types/plugin/PluginCommand.ts +0 -15
  1124. package/src/types/plugin/PluginContext.ts +0 -59
  1125. package/src/types/plugin/PluginDefinition.ts +0 -54
  1126. package/src/types/plugin/PluginExecutionContext.ts +0 -29
  1127. package/src/types/plugin/PluginHttp.ts +0 -36
  1128. package/src/types/plugin/PluginNotification.ts +0 -38
  1129. package/src/types/plugin/PluginRegistry.ts +0 -25
  1130. package/src/types/plugin/PluginRuntime.ts +0 -292
  1131. package/src/types/plugin/PluginServices.ts +0 -11
  1132. package/src/types/plugin/PluginState.ts +0 -65
  1133. package/src/types/plugin/PluginTool.ts +0 -106
  1134. package/src/types/rpc/RpcProtocol.ts +0 -464
  1135. package/src/types/sdk/AgentSessionCompact.ts +0 -36
  1136. package/src/types/session/SessionAction.ts +0 -41
  1137. package/src/types/session/SessionContent.ts +0 -52
  1138. package/src/types/session/SessionInteraction.ts +0 -268
  1139. package/src/types/session/SessionMessage.ts +0 -306
  1140. package/src/types/session/SessionMutation.ts +0 -183
  1141. package/src/types/session/SessionOrigin.ts +0 -21
  1142. package/src/types/session/SessionSegment.ts +0 -62
  1143. package/src/types/store/SessionDataStore.ts +0 -109
  1144. package/src/utils/Template.ts +0 -28
  1145. package/src/workspace/WorkspacePaths.ts +0 -37
  1146. package/src/workspace/store/JsonlSessionMessageStore.ts +0 -513
  1147. package/src/workspace/store/LocalGroupDispatchSessionDataStore.ts +0 -118
  1148. package/src/workspace/store/LocalSessionDataStore.ts +0 -169
  1149. package/src/workspace/store/LocalSessionStore.ts +0 -243
  1150. package/src/workspace/store/LocalStorePaths.ts +0 -143
  1151. package/src/workspace/store/SessionMessageStoreFactory.ts +0 -18
  1152. /package/bin/{workspace/store → group/storage}/LocalGroupSessionStore.d.ts +0 -0
@@ -1,990 +0,0 @@
1
- import test from "node:test";
2
- import fs from "node:fs/promises";
3
- import os from "node:os";
4
- import path from "node:path";
5
- import assert from "node:assert/strict";
6
- import { Agent, City, Group, Session } from "../bin/index.js";
7
- import { LocalStorageProvider, Workspace } from "@downcity/workspace";
8
- import { MockModelClient } from "../scripts/ModelClientMock.mjs";
9
-
10
- async function wait_for_group_idle(group_session, timeout_ms = 1000) {
11
- await new Promise((resolve) => {
12
- let settled = false;
13
- const finish = () => {
14
- if (settled) return;
15
- settled = true;
16
- unsubscribe();
17
- clearTimeout(timer);
18
- resolve();
19
- };
20
- const unsubscribe = group_session.subscribe((event) => {
21
- if (event.type === "status" && ["idle", "failed", "stopped"].includes(event.phase) && event.members.every((member) => !member.running)) finish();
22
- });
23
- const timer = setTimeout(finish, timeout_ms);
24
- });
25
- return await group_session.messages();
26
- }
27
-
28
- // 测试专用策略:生产代码不再提供隐式规则调度,行为测试显式注入最小策略。
29
- const test_dispatch_strategy = {
30
- decide_dispatch({ trigger, message, members }) {
31
- if (trigger === "auto") return { nodes: [], terminal: true };
32
- const collective = /你们|大家|各自|分别|同时|一起|所有人/.test(message.text);
33
- return {
34
- nodes: [{
35
- node_id: `test-${message.id}`,
36
- member_ids: collective ? members.map((member) => member.id) : [members[0].id],
37
- response_mode: collective ? "parallel" : "single",
38
- depends_on_node_ids: [],
39
- instruction: "测试策略:只代表自己发言。",
40
- }],
41
- terminal: true,
42
- };
43
- },
44
- };
45
-
46
- function create_dispatch_tool_call(input, tool_call_id = "dispatch-call") {
47
- return {
48
- type: "tool_call",
49
- tool_call_id,
50
- tool_name: "dispatch_group",
51
- input,
52
- };
53
- }
54
-
55
- class RecordingSession extends Session {
56
- static created = [];
57
-
58
- async prompt(input) {
59
- RecordingSession.created.push({ agent_id: this.agent_id, query: input.query });
60
- return {
61
- id: `turn-${this.id}`,
62
- result: null,
63
- finished: Promise.resolve({ turn_id: `turn-${this.id}`, text: `reply:${this.agent_id}`, success: true }),
64
- };
65
- }
66
- }
67
-
68
- test("Group broadcasts user messages and collects member replies", async () => {
69
- RecordingSession.created = [];
70
- const city = new City();
71
- const architect = new Agent({ id: "architect", session_class: RecordingSession });
72
- const reviewer = new Agent({ id: "reviewer", session_class: RecordingSession });
73
- city.agents.add(architect);
74
- city.agents.add(reviewer);
75
- const group = new Group({ id: "delivery", members: [architect, reviewer], dispatch_strategy: test_dispatch_strategy });
76
- city.groups.add(group);
77
- const group_session = await group.sessions.create();
78
- const prompt_result = await group_session.prompt({ query: "大家分别 analyze payment" });
79
- assert.equal(prompt_result.success, true);
80
- assert.match(prompt_result.turn_id, /^group-turn-/);
81
- await new Promise((resolve) => setTimeout(resolve, 0));
82
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), ["architect", "reviewer"]);
83
- assert.deepEqual((await group_session.messages()).map((message) => [message.sender_type, message.sender_id, message.text]), [
84
- ["user", "user", "大家分别 analyze payment"],
85
- ["agent", "architect", "reply:architect"],
86
- ["agent", "reviewer", "reply:reviewer"],
87
- ]);
88
- const architect_sessions = await architect.sessions.list();
89
- assert.equal(architect_sessions.items.length, 1);
90
- assert.deepEqual(architect_sessions.items[0].origin, { type: "group", group_id: "delivery", group_session_id: group_session.id });
91
- await city.close();
92
- });
93
-
94
- test("Group.model uses AI dispatch to select only the returned members", async () => {
95
- RecordingSession.created = [];
96
- let dispatch_calls = 0;
97
- const dispatch_model = new MockModelClient({
98
- modelId: "group-dispatch-model",
99
- doGenerate: async () => ({
100
- content: [create_dispatch_tool_call(dispatch_calls++ === 0
101
- ? { steps: [["reviewer"]], next: "continue" }
102
- : { steps: [], next: "stop" })],
103
- finishReason: { unified: "stop", raw: "stop" },
104
- usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 },
105
- warnings: [],
106
- }),
107
- });
108
- const city = new City();
109
- const architect = new Agent({ id: "architect", session_class: RecordingSession });
110
- const reviewer = new Agent({ id: "reviewer", session_class: RecordingSession });
111
- city.agents.add(architect);
112
- city.agents.add(reviewer);
113
- const group = new Group({ id: "ai-delivery", model: dispatch_model, members: [architect, reviewer] });
114
- city.groups.add(group);
115
- const group_session = await group.sessions.create();
116
- await group_session.prompt({ query: "请审查这个变更" });
117
- await wait_for_group_idle(group_session);
118
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), ["reviewer"]);
119
- assert.match(RecordingSession.created[0].query, /你已被 Group 调度选中,必须直接回复当前消息/);
120
- assert.doesNotMatch(RecordingSession.created[0].query, /判断是否需要回复|如果不需要你发言/);
121
- await city.close();
122
- });
123
-
124
- test("AI Dispatch 返回空响应图时直接结束当前调度", async () => {
125
- RecordingSession.created = [];
126
- const dispatch_model = new MockModelClient({
127
- modelId: "empty-dispatch-model",
128
- doGenerate: async () => ({
129
- content: [create_dispatch_tool_call({ steps: [], next: "stop" })],
130
- finishReason: { unified: "stop", raw: "stop" },
131
- usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 },
132
- warnings: [],
133
- }),
134
- });
135
- const city = new City();
136
- const architect = new Agent({ id: "architect", session_class: RecordingSession });
137
- const reviewer = new Agent({ id: "reviewer", session_class: RecordingSession });
138
- city.agents.add(architect);
139
- city.agents.add(reviewer);
140
- const group = new Group({ id: "empty-dispatch", model: dispatch_model, members: [architect, reviewer] });
141
- city.groups.add(group);
142
- const empty_session = await group.sessions.create();
143
- await empty_session.prompt({ query: "请讨论这个问题" });
144
- await wait_for_group_idle(empty_session);
145
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), []);
146
- assert.deepEqual((await empty_session.messages()).map((message) => message.text), ["请讨论这个问题"]);
147
- await city.close();
148
- });
149
-
150
- test("Group 没有 model 且未注入策略时记录调度失败", async () => {
151
- const city = new City();
152
- const agent = new Agent({ id: "model-required-agent", session_class: RecordingSession });
153
- city.agents.add(agent);
154
- const group = new Group({ id: "model-required-group", members: [agent] });
155
- city.groups.add(group);
156
- const group_session = await group.sessions.create();
157
-
158
- await group_session.prompt({ query: "请回答" });
159
- await wait_for_group_idle(group_session);
160
-
161
- assert.deepEqual((await group_session.messages()).map((message) => message.text), [
162
- "请回答",
163
- "Group requires a configured model for dispatch",
164
- ]);
165
- await city.close();
166
- });
167
-
168
- test("AI Dispatch 失败时不切换到隐式规则策略", async () => {
169
- const dispatch_model = new MockModelClient({
170
- modelId: "failing-dispatch-model",
171
- doGenerate: async () => { throw new Error("dispatch unavailable"); },
172
- });
173
- const city = new City();
174
- const agent = new Agent({ id: "failing-dispatch-agent", session_class: RecordingSession });
175
- city.agents.add(agent);
176
- const group = new Group({ id: "failing-dispatch-group", model: dispatch_model, members: [agent] });
177
- city.groups.add(group);
178
- const group_session = await group.sessions.create();
179
-
180
- await group_session.prompt({ query: "请回答" });
181
- await wait_for_group_idle(group_session);
182
-
183
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), []);
184
- assert.match((await group_session.messages()).at(-1).text, /^Group dispatch model failed:/);
185
- await city.close();
186
- });
187
-
188
- test("AI Dispatch 未调用 dispatch_group 时记录协议错误", async () => {
189
- const dispatch_model = new MockModelClient({
190
- modelId: "text-only-dispatch-model",
191
- doGenerate: async () => ({
192
- content: [{ type: "text", text: "我建议让 reviewer 回复。" }],
193
- finishReason: { unified: "stop", raw: "stop" },
194
- usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 },
195
- warnings: [],
196
- }),
197
- });
198
- const city = new City();
199
- const agent = new Agent({ id: "text-only-agent", session_class: RecordingSession });
200
- city.agents.add(agent);
201
- const group = new Group({ id: "text-only-group", model: dispatch_model, members: [agent] });
202
- city.groups.add(group);
203
- const group_session = await group.sessions.create();
204
-
205
- await group_session.prompt({ query: "请回答" });
206
- await wait_for_group_idle(group_session);
207
-
208
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), []);
209
- assert.match((await group_session.messages()).at(-1).text, /did not call dispatch_group/);
210
- await city.close();
211
- });
212
-
213
- test("AI Dispatch 在同一调度 Turn 内纠正未调用工具的响应", async () => {
214
- RecordingSession.created = [];
215
- let dispatch_calls = 0;
216
- const dispatch_model = new MockModelClient({
217
- modelId: "recovering-dispatch-model",
218
- doGenerate: async (call) => {
219
- dispatch_calls += 1;
220
- if (dispatch_calls === 1) {
221
- return {
222
- content: [{ type: "text", text: "我建议让 responder 回复。" }],
223
- finishReason: { unified: "stop", raw: "stop" },
224
- usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 },
225
- warnings: [],
226
- };
227
- }
228
- assert.equal(call.messages.some((message) => (
229
- message.role === "user" && message.content.some((part) => (
230
- part.type === "text" && part.text.includes("上一响应不符合调度协议")
231
- ))
232
- )), true);
233
- return {
234
- content: [create_dispatch_tool_call({ steps: [["responder"]], next: "stop" })],
235
- finishReason: { unified: "tool-calls", raw: "tool_calls" },
236
- usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 },
237
- warnings: [],
238
- };
239
- },
240
- });
241
- const city = new City();
242
- const agent = new Agent({ id: "responder", session_class: RecordingSession });
243
- city.agents.add(agent);
244
- const group = new Group({ id: "recovering-dispatch-group", model: dispatch_model, members: [agent] });
245
- city.groups.add(group);
246
- const group_session = await group.sessions.create();
247
-
248
- await group_session.prompt({ query: "请回答" });
249
- await wait_for_group_idle(group_session);
250
-
251
- assert.equal(dispatch_calls, 2);
252
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), ["responder"]);
253
- assert.equal((await group_session.messages()).some((message) => message.sender_type === "system"), false);
254
- await city.close();
255
- });
256
-
257
- test("AI Dispatch 拒绝未知成员并允许跨阶段重复投递", async () => {
258
- const inputs = [
259
- { input: { steps: [["unknown"]], next: "stop" }, expected_agent_ids: [] },
260
- { input: { steps: [["known"], ["known"]], next: "stop" }, expected_agent_ids: ["known", "known"] },
261
- ];
262
- for (const [index, { input, expected_agent_ids }] of inputs.entries()) {
263
- RecordingSession.created = [];
264
- let dispatch_calls = 0;
265
- const dispatch_model = new MockModelClient({
266
- modelId: `invalid-dispatch-model-${index}`,
267
- doGenerate: async () => ({
268
- content: [create_dispatch_tool_call(expected_agent_ids.length > 0 && dispatch_calls++ > 0
269
- ? { steps: [], next: "stop" }
270
- : input)],
271
- finishReason: { unified: "tool-calls", raw: "tool_calls" },
272
- usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 },
273
- warnings: [],
274
- }),
275
- });
276
- const city = new City();
277
- const agent = new Agent({ id: "known", session_class: RecordingSession });
278
- city.agents.add(agent);
279
- const group = new Group({ id: `invalid-dispatch-group-${index}`, model: dispatch_model, members: [agent] });
280
- city.groups.add(group);
281
- const group_session = await group.sessions.create();
282
-
283
- await group_session.prompt({ query: "请回答" });
284
- await wait_for_group_idle(group_session);
285
-
286
- if (expected_agent_ids.length === 0) {
287
- assert.match((await group_session.messages()).at(-1).text, /Group dispatch model failed:/);
288
- } else {
289
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), expected_agent_ids);
290
- }
291
- await city.close();
292
- }
293
- });
294
-
295
- test("GroupSession publishes messages and member runtime through one event stream", async () => {
296
- const events = [];
297
- const city = new City();
298
- const agent = new Agent({ id: "status-agent", session_class: RecordingSession });
299
- city.agents.add(agent);
300
- const group = new Group({ id: "status-group", members: [agent], dispatch_strategy: test_dispatch_strategy });
301
- city.groups.add(group);
302
- const group_session = await group.sessions.create();
303
- const unsubscribe = group_session.subscribe((event) => events.push(event));
304
- await group_session.prompt({ query: "status" });
305
- await wait_for_group_idle(group_session);
306
- unsubscribe();
307
- const status_events = events.filter((event) => event.type === "status");
308
- assert.equal(status_events[0].phase, "dispatching");
309
- assert.equal(typeof status_events[0].message_id, "string");
310
- const dispatch_event = status_events.find((event) => event.dispatched_member_ids);
311
- assert.equal(dispatch_event.phase, "dispatched");
312
- assert.deepEqual(dispatch_event.dispatched_member_ids, ["status-agent"]);
313
- assert.equal(dispatch_event.message_id, status_events[0].message_id);
314
- const dispatch_index = status_events.indexOf(dispatch_event);
315
- const executing_index = status_events.findIndex((event, index) => index > dispatch_index && event.phase === "executing" && event.members[0].running);
316
- assert.equal(executing_index > dispatch_index, true);
317
- assert.equal(status_events.slice(0, dispatch_index).some((event) => event.members[0].running), false);
318
- assert.equal(status_events.at(-1).phase, "idle");
319
- assert.equal(status_events.at(-1).members[0].running, false);
320
- await city.close();
321
- });
322
-
323
- test("Group 成员执行失败时把失败事实写入共享消息", async () => {
324
- class FailingSession extends Session {
325
- async prompt() {
326
- return {
327
- id: `turn-${this.id}`,
328
- result: null,
329
- finished: Promise.resolve({
330
- turn_id: `turn-${this.id}`,
331
- text: "",
332
- success: false,
333
- error: "模型请求被拒绝",
334
- }),
335
- };
336
- }
337
- }
338
- const city = new City();
339
- const agent = new Agent({ id: "failing-agent", session_class: FailingSession });
340
- city.agents.add(agent);
341
- const group = new Group({ id: "failure-group", members: [agent], dispatch_strategy: test_dispatch_strategy });
342
- city.groups.add(group);
343
- const group_session = await group.sessions.create();
344
-
345
- await group_session.prompt({ query: "请回答" });
346
- await wait_for_group_idle(group_session);
347
-
348
- assert.deepEqual((await group_session.messages()).map((message) => [message.sender_type, message.text]), [
349
- ["user", "请回答"],
350
- ["system", "failing-agent 执行失败:模型请求被拒绝"],
351
- ]);
352
- await city.close();
353
- });
354
-
355
- test("Group 普通消息只投递一个成员", async () => {
356
- class RejectingSession extends Session {
357
- async prompt() {
358
- throw new Error("成员 Session 不可用");
359
- }
360
- }
361
- RecordingSession.created = [];
362
- const city = new City();
363
- const failing_agent = new Agent({ id: "failing-agent", session_class: RejectingSession });
364
- const healthy_agent = new Agent({ id: "healthy-agent", session_class: RecordingSession });
365
- city.agents.add(failing_agent);
366
- city.agents.add(healthy_agent);
367
- const group = new Group({ id: "partial-failure-group", members: [failing_agent, healthy_agent], dispatch_strategy: test_dispatch_strategy });
368
- city.groups.add(group);
369
- const group_session = await group.sessions.create();
370
-
371
- const result = await group_session.prompt({ query: "请共同回答" });
372
- await wait_for_group_idle(group_session);
373
-
374
- assert.equal(result.success, true);
375
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), []);
376
- assert.deepEqual((await group_session.messages()).map((message) => [message.sender_type, message.text]), [
377
- ["user", "请共同回答"],
378
- ["system", "failing-agent 执行失败:成员 Session 不可用"],
379
- ]);
380
- await city.close();
381
- });
382
-
383
- test("Group 本身不绑定 Workspace,GroupSession 才绑定 Workspace", async () => {
384
- const city = new City({ workspaces: [new Workspace({ id: "project", path: process.cwd() })] });
385
- const agent = new Agent({ id: "builder", session_class: RecordingSession });
386
- city.agents.add(agent);
387
- const group = new Group({ id: "valid", members: [agent], dispatch_strategy: test_dispatch_strategy });
388
- city.groups.add(group);
389
- const group_session = await group.sessions.create({ workspace: city.workspaces.get("project") });
390
- assert.equal(group_session.workspace_id, "project");
391
- await city.close();
392
- });
393
-
394
- test("Group 成员 Session 使用 Group 的共享 Workspace", async () => {
395
- RecordingSession.created = [];
396
- const workspace = new Workspace({ id: "shared-project", path: process.cwd() });
397
- const city = new City({ workspaces: [workspace] });
398
- const agent = new Agent({ id: "builder", session_class: RecordingSession });
399
- city.agents.add(agent);
400
- const group = new Group({ id: "build-team", members: [agent], dispatch_strategy: test_dispatch_strategy });
401
- city.groups.add(group);
402
- const group_session = await group.sessions.create({ workspace });
403
- await group_session.prompt({ query: "build" });
404
- await wait_for_group_idle(group_session);
405
- await new Promise((resolve) => setTimeout(resolve, 0));
406
- const sessions = await agent.sessions.list({ workspace_id: "shared-project" });
407
- assert.equal(sessions.items.length, 1);
408
- assert.deepEqual(sessions.items[0].origin, { type: "group", group_id: "build-team", group_session_id: group_session.id });
409
- assert.equal((await group.sessions.list({ workspace_id: "shared-project" })).length, 1);
410
- assert.equal((await group.sessions.get(group_session.id, { workspace })).workspace_id, "shared-project");
411
- await city.close();
412
- });
413
-
414
- test("Group 从 City 释放后可以在同一 City 重新装配", async () => {
415
- const group = new Group({ id: "reattachable-group", members: [new Agent({ id: "reattachable-agent", session_class: RecordingSession })], dispatch_strategy: test_dispatch_strategy });
416
- const first_city = new City();
417
- first_city.agents.add(group.members[0]);
418
- first_city.groups.add(group);
419
- await first_city.groups.remove(group.id);
420
-
421
- first_city.groups.add(group);
422
- await group.sessions.create();
423
- await first_city.close();
424
- });
425
-
426
- test("GroupSession 使用 City Storage 持久化并可恢复", async () => {
427
- RecordingSession.created = [];
428
- const root_path = await fs.mkdtemp(path.join(os.tmpdir(), "downcity-group-session-"));
429
- const storage = new LocalStorageProvider(root_path);
430
- const city = new City({ storage });
431
- const agent = new Agent({ id: "builder", session_class: RecordingSession });
432
- city.agents.add(agent);
433
- const group = new Group({ id: "persistent-team", members: [agent], dispatch_strategy: test_dispatch_strategy });
434
- city.groups.add(group);
435
- const created = await group.sessions.create();
436
- await created.prompt({ query: "persist this message" });
437
- await wait_for_group_idle(created);
438
- await city.close();
439
-
440
- const restored_city = new City({ storage });
441
- const restored_agent = new Agent({ id: "builder", session_class: RecordingSession });
442
- restored_city.agents.add(restored_agent);
443
- const restored_group = new Group({ id: "persistent-team", members: [restored_agent], dispatch_strategy: test_dispatch_strategy });
444
- restored_city.groups.add(restored_group);
445
- const restored = await restored_group.sessions.get(created.id);
446
- assert.ok(restored);
447
- assert.deepEqual((await restored.messages()).map((message) => message.text), [
448
- "persist this message",
449
- "reply:builder",
450
- ]);
451
- const summaries = await restored_group.sessions.list();
452
- assert.equal(summaries.length, 1);
453
- assert.equal(summaries[0].id, created.id);
454
- assert.equal(summaries[0].message_count, 2);
455
- RecordingSession.created = [];
456
- await restored.prompt({ query: "reuse member session" });
457
- await wait_for_group_idle(restored);
458
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), ["builder"]);
459
- await restored_city.close();
460
- await fs.rm(root_path, { recursive: true, force: true });
461
- });
462
-
463
- test("GroupSession 持久化独享 Dispatch Session 的调度 Turn", async () => {
464
- RecordingSession.created = [];
465
- const root_path = await fs.mkdtemp(path.join(os.tmpdir(), "downcity-group-dispatch-session-"));
466
- const city = new City({ storage: new LocalStorageProvider(root_path) });
467
- const agent = new Agent({ id: "dispatch-member", session_class: RecordingSession });
468
- city.agents.add(agent);
469
- const group = new Group({ id: "dispatch-session-group", members: [agent], dispatch_strategy: test_dispatch_strategy });
470
- city.groups.add(group);
471
- const session = await group.sessions.create();
472
-
473
- await session.prompt({ query: "persist dispatch" });
474
- await wait_for_group_idle(session);
475
-
476
- const turns_path = path.join(
477
- root_path,
478
- "groups",
479
- "dispatch-session-group",
480
- "sessions",
481
- encodeURIComponent(session.id),
482
- "dispatch",
483
- "turns.jsonl",
484
- );
485
- const records = (await fs.readFile(turns_path, "utf8"))
486
- .trim()
487
- .split("\n")
488
- .map((line) => JSON.parse(line));
489
- const user_records = records.filter((record) => record.trigger === "user");
490
- assert.deepEqual(user_records.map((record) => record.status), ["queued", "running", "completed"]);
491
- assert.deepEqual(user_records.at(-1).decision.nodes[0].member_ids, ["dispatch-member"]);
492
- assert.equal(
493
- (await session.messages()).find((message) => message.sender_type === "agent").dispatch_id,
494
- user_records.at(-1).dispatch_id,
495
- );
496
- await city.close();
497
- await fs.rm(root_path, { recursive: true, force: true });
498
- });
499
-
500
- test("GroupSession stop 会中断 Dispatch Session 且不记录失败消息", async () => {
501
- const root_path = await fs.mkdtemp(path.join(os.tmpdir(), "downcity-group-dispatch-stop-"));
502
- let dispatch_started = false;
503
- let dispatch_aborted = false;
504
- let dispatch_invocations = 0;
505
- const strategy = {
506
- async decide_dispatch({ abort_signal }) {
507
- dispatch_invocations += 1;
508
- dispatch_started = true;
509
- await new Promise((resolve, reject) => {
510
- const abort = () => {
511
- dispatch_aborted = true;
512
- reject(abort_signal.reason);
513
- };
514
- if (abort_signal.aborted) abort();
515
- else abort_signal.addEventListener("abort", abort, { once: true });
516
- });
517
- return { nodes: [], terminal: true };
518
- },
519
- };
520
- const city = new City({ storage: new LocalStorageProvider(root_path) });
521
- const agent = new Agent({ id: "unused-member", session_class: RecordingSession });
522
- city.agents.add(agent);
523
- const group = new Group({ id: "dispatch-stop-group", members: [agent], dispatch_strategy: strategy });
524
- city.groups.add(group);
525
- const session = await group.sessions.create();
526
- await session.prompt({ query: "stop dispatch" });
527
- await session.prompt({ query: "cancel queued dispatch" });
528
- for (let attempt = 0; attempt < 200 && !dispatch_started; attempt += 1) {
529
- await new Promise((resolve) => setTimeout(resolve, 5));
530
- }
531
-
532
- await session.stop();
533
-
534
- assert.equal(dispatch_aborted, true);
535
- assert.equal(dispatch_invocations, 1);
536
- assert.deepEqual((await session.messages()).map((message) => message.text), [
537
- "stop dispatch",
538
- "cancel queued dispatch",
539
- ]);
540
- const turns_path = path.join(
541
- root_path,
542
- "groups",
543
- "dispatch-stop-group",
544
- "sessions",
545
- encodeURIComponent(session.id),
546
- "dispatch",
547
- "turns.jsonl",
548
- );
549
- const records = (await fs.readFile(turns_path, "utf8"))
550
- .trim()
551
- .split("\n")
552
- .map((line) => JSON.parse(line));
553
- const latest_records = new Map(records.map((record) => [record.dispatch_id, record]));
554
- assert.equal(latest_records.size, 2);
555
- assert.deepEqual([...latest_records.values()].map((record) => record.status), ["stopped", "stopped"]);
556
- await city.close();
557
- await fs.rm(root_path, { recursive: true, force: true });
558
- });
559
-
560
- test("GroupSession 恢复时重新执行中断的用户调度", async () => {
561
- RecordingSession.created = [];
562
- const root_path = await fs.mkdtemp(path.join(os.tmpdir(), "downcity-group-dispatch-recovery-"));
563
- let original_abort_signal;
564
- let original_dispatch_started = false;
565
- const original_city = new City({ storage: new LocalStorageProvider(root_path) });
566
- const original_agent = new Agent({ id: "recovery-member", session_class: RecordingSession });
567
- original_city.agents.add(original_agent);
568
- const original_group = new Group({
569
- id: "dispatch-recovery-group",
570
- members: [original_agent],
571
- dispatch_strategy: {
572
- async decide_dispatch({ abort_signal }) {
573
- original_abort_signal = abort_signal;
574
- original_dispatch_started = true;
575
- await new Promise((resolve, reject) => {
576
- abort_signal.addEventListener("abort", () => reject(abort_signal.reason), { once: true });
577
- });
578
- return { nodes: [], terminal: true };
579
- },
580
- },
581
- });
582
- original_city.groups.add(original_group);
583
- const original_session = await original_group.sessions.create();
584
- await original_session.prompt({ query: "recover dispatch" });
585
- for (let attempt = 0; attempt < 200 && !original_dispatch_started; attempt += 1) {
586
- await new Promise((resolve) => setTimeout(resolve, 5));
587
- }
588
-
589
- const restored_city = new City({ storage: new LocalStorageProvider(root_path) });
590
- const restored_agent = new Agent({ id: "recovery-member", session_class: RecordingSession });
591
- restored_city.agents.add(restored_agent);
592
- const restored_group = new Group({
593
- id: "dispatch-recovery-group",
594
- members: [restored_agent],
595
- dispatch_strategy: test_dispatch_strategy,
596
- });
597
- restored_city.groups.add(restored_group);
598
- const restored_session = await restored_group.sessions.get(original_session.id);
599
- assert.ok(restored_session);
600
- await wait_for_group_idle(restored_session);
601
-
602
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), ["recovery-member"]);
603
- assert.deepEqual((await restored_session.messages()).map((message) => message.text), [
604
- "recover dispatch",
605
- "reply:recovery-member",
606
- ]);
607
- await original_session.stop();
608
- assert.equal(original_abort_signal.aborted, true);
609
- await restored_city.close();
610
- await original_city.close();
611
- await fs.rm(root_path, { recursive: true, force: true });
612
- });
613
-
614
- test("GroupSession 持久化调度检查点并在收口后清理", async () => {
615
- const root_path = await fs.mkdtemp(path.join(os.tmpdir(), "downcity-group-checkpoint-"));
616
- const storage = new LocalStorageProvider(root_path);
617
- let resolve_finished;
618
- class BlockingSession extends Session {
619
- async prompt() {
620
- return {
621
- id: `turn-${this.id}`,
622
- result: null,
623
- finished: new Promise((resolve) => { resolve_finished = resolve; }),
624
- };
625
- }
626
- }
627
- const city = new City({ storage });
628
- const agent = new Agent({ id: "checkpoint-agent", session_class: BlockingSession });
629
- city.agents.add(agent);
630
- const group = new Group({ id: "checkpoint-group", members: [agent], dispatch_strategy: test_dispatch_strategy });
631
- city.groups.add(group);
632
- const session = await group.sessions.create();
633
- await session.prompt({ query: "checkpoint" });
634
- for (let attempt = 0; attempt < 200 && typeof resolve_finished !== "function"; attempt += 1) {
635
- await new Promise((resolve) => setTimeout(resolve, 5));
636
- }
637
- assert.equal(typeof resolve_finished, "function");
638
- const meta_path = path.join(root_path, "groups", "checkpoint-group", "sessions", encodeURIComponent(session.id), "meta.json");
639
- const pending_meta = JSON.parse(await fs.readFile(meta_path, "utf8"));
640
- assert.equal(pending_meta.pending_turns.length, 1);
641
- resolve_finished({ turn_id: "finished", text: "done", success: true });
642
- await wait_for_group_idle(session);
643
- const completed_meta = JSON.parse(await fs.readFile(meta_path, "utf8"));
644
- assert.deepEqual(completed_meta.pending_turns, []);
645
- assert.deepEqual(completed_meta.auto_frontier_message_ids, []);
646
- await city.close();
647
- await fs.rm(root_path, { recursive: true, force: true });
648
- });
649
-
650
- test("GroupSession 列表首次读取时将 v1 metadata 原子迁移为 v2", async () => {
651
- const root_path = await fs.mkdtemp(path.join(os.tmpdir(), "downcity-group-metadata-migration-"));
652
- const group_id = "metadata-migration-group";
653
- const session_id = "legacy-session";
654
- const session_path = path.join(root_path, "groups", group_id, "sessions", session_id);
655
- const meta_path = path.join(session_path, "meta.json");
656
- await fs.mkdir(session_path, { recursive: true });
657
- await fs.writeFile(meta_path, `${JSON.stringify({
658
- v: 1,
659
- session_id,
660
- group_id,
661
- created_at: 1,
662
- updated_at: 2,
663
- message_count: 1,
664
- preview_text: "legacy message",
665
- pending_turns: [{
666
- turn_id: "legacy-turn",
667
- root_message_id: "legacy-message",
668
- context_message_ids: [],
669
- }],
670
- auto_frontier_message_ids: ["legacy-reply"],
671
- }, null, 2)}\n`);
672
-
673
- const city = new City({ storage: new LocalStorageProvider(root_path) });
674
- const agent = new Agent({ id: "metadata-agent", session_class: RecordingSession });
675
- city.agents.add(agent);
676
- const group = new Group({ id: group_id, members: [agent], dispatch_strategy: test_dispatch_strategy });
677
- city.groups.add(group);
678
-
679
- assert.deepEqual(await group.sessions.list(), [{
680
- id: session_id,
681
- group_id,
682
- created_at: 1,
683
- updated_at: 2,
684
- message_count: 1,
685
- preview_text: "legacy message",
686
- }]);
687
- const migrated_metadata = JSON.parse(await fs.readFile(meta_path, "utf8"));
688
- assert.equal(migrated_metadata.v, 2);
689
- assert.deepEqual(migrated_metadata.pending_turns, [{
690
- turn_id: "legacy-turn",
691
- root_message_id: "legacy-message",
692
- context_message_ids: [],
693
- dispatch_stage: "auto",
694
- }]);
695
- assert.deepEqual(migrated_metadata.auto_frontier_message_ids, ["legacy-reply"]);
696
- await city.close();
697
- await fs.rm(root_path, { recursive: true, force: true });
698
- });
699
-
700
- test("GroupSession 恢复时修复尾部损坏的消息记录", async () => {
701
- const root_path = await fs.mkdtemp(path.join(os.tmpdir(), "downcity-group-tail-"));
702
- const storage = new LocalStorageProvider(root_path);
703
- const city = new City({ storage });
704
- const agent = new Agent({ id: "tail-agent", session_class: RecordingSession });
705
- city.agents.add(agent);
706
- const group = new Group({ id: "tail-group", members: [agent], dispatch_strategy: test_dispatch_strategy });
707
- city.groups.add(group);
708
- const session = await group.sessions.create();
709
- await session.prompt({ query: "keep this" });
710
- await wait_for_group_idle(session);
711
- await city.close();
712
- const messages_path = path.join(root_path, "groups", "tail-group", "sessions", encodeURIComponent(session.id), "messages.jsonl");
713
- await fs.appendFile(messages_path, "{\"id\":\"incomplete");
714
-
715
- const restored_city = new City({ storage: new LocalStorageProvider(root_path) });
716
- const restored_agent = new Agent({ id: "tail-agent", session_class: RecordingSession });
717
- restored_city.agents.add(restored_agent);
718
- const restored_group = new Group({ id: "tail-group", members: [restored_agent], dispatch_strategy: test_dispatch_strategy });
719
- restored_city.groups.add(restored_group);
720
- const restored = await restored_group.sessions.get(session.id);
721
- assert.deepEqual((await restored.messages()).map((message) => message.text), ["keep this", "reply:tail-agent"]);
722
- await restored_city.close();
723
- await fs.rm(root_path, { recursive: true, force: true });
724
- });
725
-
726
- test("GroupSession prompt 立即返回并由 AgentSession 自己排队", async () => {
727
- const calls = [];
728
- class OrderedSession extends Session {
729
- async prompt(input) {
730
- calls.push(input.query);
731
- await new Promise((resolve) => setTimeout(resolve, 10));
732
- return {
733
- id: `turn-${this.id}`,
734
- result: null,
735
- finished: Promise.resolve({ turn_id: `turn-${this.id}`, text: `reply:${input.query}`, success: true }),
736
- };
737
- }
738
- }
739
- const city = new City();
740
- const agent = new Agent({ id: "ordered", session_class: OrderedSession });
741
- city.agents.add(agent);
742
- const group = new Group({ id: "ordered-group", members: [agent], dispatch_strategy: test_dispatch_strategy });
743
- city.groups.add(group);
744
- const session = await group.sessions.create();
745
- const first = await session.prompt({ query: "first" });
746
- const second = await session.prompt({ query: "second" });
747
- assert.notEqual(first.turn_id, second.turn_id);
748
- await wait_for_group_idle(session);
749
- assert.equal(calls.length, 2);
750
- assert.equal(calls.some((query) => query.includes("Current message from user: first")), true);
751
- assert.equal(calls.some((query) => query.includes("Current message from user: second")), true);
752
- assert.deepEqual((await session.messages()).filter((message) => message.sender_type === "user").map((message) => message.text), ["first", "second"]);
753
- await city.close();
754
- });
755
-
756
- test("Dispatch 响应图按依赖传递上一个成员的回复", async () => {
757
- RecordingSession.created = [];
758
- const city = new City();
759
- const architect = new Agent({ id: "architect", session_class: RecordingSession });
760
- const reviewer = new Agent({ id: "reviewer", session_class: RecordingSession });
761
- city.agents.add(architect);
762
- city.agents.add(reviewer);
763
- const group = new Group({
764
- id: "dependency-group",
765
- members: [architect, reviewer],
766
- dispatch_strategy: {
767
- decide_dispatch: ({ trigger }) => trigger === "user"
768
- ? {
769
- nodes: [
770
- { node_id: "architect", member_ids: ["architect"], response_mode: "single", depends_on_node_ids: [], instruction: "先分析。" },
771
- { node_id: "reviewer", member_ids: ["reviewer"], response_mode: "single", depends_on_node_ids: ["architect"], instruction: "基于前一个成员的回复审查。" },
772
- ],
773
- terminal: true,
774
- }
775
- : { nodes: [], terminal: true },
776
- },
777
- });
778
- city.groups.add(group);
779
- const group_session = await group.sessions.create();
780
- await group_session.prompt({ query: "请分析并审查" });
781
- await wait_for_group_idle(group_session);
782
- assert.equal(RecordingSession.created.length, 2);
783
- assert.equal(RecordingSession.created[0].agent_id, "architect");
784
- assert.equal(RecordingSession.created[1].agent_id, "reviewer");
785
- assert.match(RecordingSession.created[1].query, /architect: reply:architect/);
786
- await city.close();
787
- });
788
-
789
- test("Dispatch 拓扑允许同一成员在不同节点重复参与", async () => {
790
- RecordingSession.created = [];
791
- const city = new City();
792
- const members = ["a", "d", "e", "f"].map((id) => new Agent({ id, session_class: RecordingSession }));
793
- for (const member of members) city.agents.add(member);
794
- const group = new Group({
795
- id: "repeated-member-group",
796
- members,
797
- dispatch_strategy: {
798
- decide_dispatch: ({ trigger }) => trigger === "user"
799
- ? {
800
- nodes: [
801
- { node_id: "step-0", member_ids: ["a"], response_mode: "single", depends_on_node_ids: [], instruction: "第一阶段。" },
802
- { node_id: "step-1", member_ids: ["d"], response_mode: "single", depends_on_node_ids: ["step-0"], instruction: "第二阶段。" },
803
- { node_id: "step-2", member_ids: ["a"], response_mode: "single", depends_on_node_ids: ["step-1"], instruction: "第三阶段。" },
804
- { node_id: "step-3", member_ids: ["e"], response_mode: "single", depends_on_node_ids: ["step-2"], instruction: "第四阶段。" },
805
- { node_id: "step-4", member_ids: ["f"], response_mode: "single", depends_on_node_ids: ["step-3"], instruction: "第五阶段。" },
806
- ],
807
- terminal: true,
808
- }
809
- : { nodes: [], terminal: true },
810
- },
811
- });
812
- city.groups.add(group);
813
- const group_session = await group.sessions.create();
814
- await group_session.prompt({ query: "执行多阶段流程" });
815
- await wait_for_group_idle(group_session);
816
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), ["a", "d", "a", "e", "f"]);
817
- assert.match(RecordingSession.created[2].query, /d: reply:d/);
818
- assert.match(RecordingSession.created[4].query, /e: reply:e/);
819
- await city.close();
820
- });
821
-
822
- test("唯一 auto dispatch 等待并合并并发输入批次", async () => {
823
- const calls = [];
824
- const auto_batches = [];
825
- class DelayedSession extends Session {
826
- async prompt(input) {
827
- calls.push(input.query);
828
- const query = input.query.includes("first") ? "first" : "second";
829
- const delay_ms = query === "first" ? 5 : 25;
830
- return {
831
- id: `turn-${this.id}-${query}`,
832
- result: null,
833
- finished: new Promise((resolve) => setTimeout(() => resolve({
834
- turn_id: `turn-${this.id}-${query}`,
835
- text: `reply:${query}`,
836
- success: true,
837
- }), delay_ms)),
838
- };
839
- }
840
- }
841
- const city = new City();
842
- const agent = new Agent({ id: "batch-agent", session_class: DelayedSession });
843
- city.agents.add(agent);
844
- const group = new Group({
845
- id: "batch-group",
846
- members: [agent],
847
- dispatch_strategy: {
848
- decide_dispatch: ({ trigger, pending_messages }) => {
849
- if (trigger === "auto") {
850
- auto_batches.push(pending_messages.map((message) => message.text));
851
- return { nodes: [], terminal: true };
852
- }
853
- return {
854
- nodes: [{
855
- node_id: `user-${pending_messages[0]?.id || "message"}`,
856
- member_ids: ["batch-agent"],
857
- response_mode: "single",
858
- depends_on_node_ids: [],
859
- instruction: "回复当前消息。",
860
- }],
861
- terminal: false,
862
- };
863
- },
864
- },
865
- });
866
- city.groups.add(group);
867
- const group_session = await group.sessions.create();
868
- await Promise.all([
869
- group_session.prompt({ query: "first" }),
870
- group_session.prompt({ query: "second" }),
871
- ]);
872
- await wait_for_group_idle(group_session, 1500);
873
- assert.equal(calls.length, 2);
874
- assert.deepEqual(auto_batches, [["reply:first", "reply:second"]]);
875
- await city.close();
876
- });
877
-
878
- test("成员返回空内容时记录失败且不继续投递下游节点", async () => {
879
- RecordingSession.created = [];
880
- class EmptySession extends Session {
881
- async prompt() {
882
- RecordingSession.created.push({ agent_id: this.agent_id, query: "architect" });
883
- return {
884
- id: `turn-${this.id}`,
885
- result: null,
886
- finished: Promise.resolve({ turn_id: `turn-${this.id}`, text: "", success: true }),
887
- };
888
- }
889
- }
890
- const city = new City();
891
- const architect = new Agent({ id: "architect", session_class: EmptySession });
892
- const reviewer = new Agent({ id: "reviewer", session_class: RecordingSession });
893
- city.agents.add(architect);
894
- city.agents.add(reviewer);
895
- const group = new Group({
896
- id: "dependency-empty-group",
897
- members: [architect, reviewer],
898
- dispatch_strategy: {
899
- decide_dispatch: ({ trigger }) => trigger === "user"
900
- ? {
901
- nodes: [
902
- { node_id: "architect", member_ids: ["architect"], response_mode: "single", depends_on_node_ids: [], instruction: "先分析。" },
903
- { node_id: "reviewer", member_ids: ["reviewer"], response_mode: "single", depends_on_node_ids: ["architect"], instruction: "仅基于分析回复。" },
904
- ],
905
- terminal: true,
906
- }
907
- : { nodes: [], terminal: true },
908
- },
909
- });
910
- city.groups.add(group);
911
- const group_session = await group.sessions.create();
912
- await group_session.prompt({ query: "请分析并审查" });
913
- await wait_for_group_idle(group_session);
914
- assert.deepEqual(RecordingSession.created.map((entry) => entry.agent_id), ["architect"]);
915
- assert.deepEqual((await group_session.messages()).map((message) => [message.sender_type, message.text]), [
916
- ["user", "请分析并审查"],
917
- ["system", "architect 执行失败:未生成有效回复"],
918
- ]);
919
- await city.close();
920
- });
921
-
922
- test("auto dispatch 检测重复路由并停止传播", async () => {
923
- RecordingSession.created = [];
924
- let auto_calls = 0;
925
- const city = new City();
926
- const agent = new Agent({ id: "loop-agent", session_class: RecordingSession });
927
- city.agents.add(agent);
928
- const group = new Group({
929
- id: "loop-group",
930
- members: [agent],
931
- dispatch_strategy: {
932
- decide_dispatch: ({ trigger }) => trigger === "auto"
933
- ? {
934
- nodes: [{ node_id: "loop", member_ids: ["loop-agent"], response_mode: "single", depends_on_node_ids: [], instruction: "继续回复。" }],
935
- terminal: false,
936
- }
937
- : {
938
- nodes: [{ node_id: "initial", member_ids: ["loop-agent"], response_mode: "single", depends_on_node_ids: [], instruction: "回复一次。" }],
939
- terminal: false,
940
- },
941
- },
942
- });
943
- city.groups.add(group);
944
- const session = await group.sessions.create();
945
- const original_messages = await session.messages();
946
- await session.prompt({ query: "loop" });
947
- await wait_for_group_idle(session);
948
- const messages = await session.messages();
949
- auto_calls = messages.filter((message) => message.sender_type === "agent").length;
950
- assert.equal(auto_calls, 3);
951
- assert.match(messages.at(-1).text, /repeated path/);
952
- assert.equal(original_messages.length, 0);
953
- await city.close();
954
- });
955
-
956
- test("GroupSession stop 会停止正在执行的成员,但已写入的 prompt 保留", async () => {
957
- const finished = [];
958
- class StoppableSession extends Session {
959
- async prompt(input) {
960
- finished.push(input.query);
961
- return {
962
- id: `turn-${this.id}`,
963
- result: null,
964
- finished: new Promise((resolve) => {
965
- this.resolve_finished = resolve;
966
- }),
967
- };
968
- }
969
-
970
- async stop() {
971
- this.resolve_finished?.({ turn_id: `turn-${this.id}`, text: "", success: false });
972
- this.resolve_finished = undefined;
973
- return { stopped: true };
974
- }
975
- }
976
- const city = new City();
977
- const agent = new Agent({ id: "stoppable", session_class: StoppableSession });
978
- city.agents.add(agent);
979
- const group = new Group({ id: "stoppable-group", members: [agent], dispatch_strategy: test_dispatch_strategy });
980
- city.groups.add(group);
981
- const session = await group.sessions.create();
982
- const first = session.prompt({ query: "first" });
983
- await new Promise((resolve) => setTimeout(resolve, 0));
984
- const second = session.prompt({ query: "second" });
985
- await session.stop();
986
- await Promise.all([first, second]);
987
- assert.deepEqual(finished.map((query) => query.includes("Current message from user: first")), [true]);
988
- assert.deepEqual((await session.messages()).filter((message) => message.sender_type === "user").map((message) => message.text), ["first", "second"]);
989
- await city.close();
990
- });