sema-core 1.0.14 → 2.0.1

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 (705) hide show
  1. package/README.md +15 -10
  2. package/dist/{constants → conf}/config.d.ts +0 -1
  3. package/dist/conf/config.d.ts.map +1 -0
  4. package/dist/{constants → conf}/config.js +1 -3
  5. package/dist/conf/config.js.map +1 -0
  6. package/dist/core/Conversation.d.ts +3 -14
  7. package/dist/core/Conversation.d.ts.map +1 -1
  8. package/dist/core/Conversation.js +70 -106
  9. package/dist/core/Conversation.js.map +1 -1
  10. package/dist/core/RunTools.d.ts +5 -5
  11. package/dist/core/RunTools.d.ts.map +1 -1
  12. package/dist/core/RunTools.js +27 -36
  13. package/dist/core/RunTools.js.map +1 -1
  14. package/dist/core/SemaCore.d.ts +35 -40
  15. package/dist/core/SemaCore.d.ts.map +1 -1
  16. package/dist/core/SemaCore.js +61 -59
  17. package/dist/core/SemaCore.js.map +1 -1
  18. package/dist/core/SemaEngine.d.ts +26 -17
  19. package/dist/core/SemaEngine.d.ts.map +1 -1
  20. package/dist/core/SemaEngine.js +128 -221
  21. package/dist/core/SemaEngine.js.map +1 -1
  22. package/dist/core/SemaSession.d.ts +43 -0
  23. package/dist/core/SemaSession.d.ts.map +1 -0
  24. package/dist/core/SemaSession.js +72 -0
  25. package/dist/core/SemaSession.js.map +1 -0
  26. package/dist/core/SessionPool.d.ts +32 -0
  27. package/dist/core/SessionPool.d.ts.map +1 -0
  28. package/dist/core/SessionPool.js +89 -0
  29. package/dist/core/SessionPool.js.map +1 -0
  30. package/dist/events/EventSystem.d.ts +40 -12
  31. package/dist/events/EventSystem.d.ts.map +1 -1
  32. package/dist/events/EventSystem.js +85 -26
  33. package/dist/events/EventSystem.js.map +1 -1
  34. package/dist/events/types.d.ts +86 -46
  35. package/dist/events/types.d.ts.map +1 -1
  36. package/dist/index.d.ts +1 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +3 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/manager/ConfManager.d.ts +10 -3
  41. package/dist/manager/ConfManager.d.ts.map +1 -1
  42. package/dist/manager/ConfManager.js +30 -13
  43. package/dist/manager/ConfManager.js.map +1 -1
  44. package/dist/manager/CronManager.d.ts +18 -10
  45. package/dist/manager/CronManager.d.ts.map +1 -1
  46. package/dist/manager/CronManager.js +106 -91
  47. package/dist/manager/CronManager.js.map +1 -1
  48. package/dist/manager/ModelManager.d.ts +0 -3
  49. package/dist/manager/ModelManager.d.ts.map +1 -1
  50. package/dist/manager/ModelManager.js +2 -4
  51. package/dist/manager/ModelManager.js.map +1 -1
  52. package/dist/manager/PermissionManager.d.ts +4 -6
  53. package/dist/manager/PermissionManager.d.ts.map +1 -1
  54. package/dist/manager/PermissionManager.js +85 -81
  55. package/dist/manager/PermissionManager.js.map +1 -1
  56. package/dist/manager/StateManager.d.ts +84 -122
  57. package/dist/manager/StateManager.d.ts.map +1 -1
  58. package/dist/manager/StateManager.js +194 -194
  59. package/dist/manager/StateManager.js.map +1 -1
  60. package/dist/manager/TaskManager.d.ts +30 -19
  61. package/dist/manager/TaskManager.d.ts.map +1 -1
  62. package/dist/manager/TaskManager.js +157 -98
  63. package/dist/manager/TaskManager.js.map +1 -1
  64. package/dist/prompt/agents.d.ts +3 -0
  65. package/dist/prompt/agents.d.ts.map +1 -0
  66. package/dist/prompt/agents.js +52 -0
  67. package/dist/prompt/agents.js.map +1 -0
  68. package/dist/prompt/commands.d.ts +3 -0
  69. package/dist/prompt/commands.d.ts.map +1 -0
  70. package/dist/prompt/commands.js +19 -0
  71. package/dist/prompt/commands.js.map +1 -0
  72. package/dist/prompt/compact.d.ts +2 -0
  73. package/dist/prompt/compact.d.ts.map +1 -0
  74. package/dist/prompt/compact.js +22 -0
  75. package/dist/prompt/compact.js.map +1 -0
  76. package/dist/prompt/define.d.ts +5 -0
  77. package/dist/prompt/define.d.ts.map +1 -0
  78. package/dist/prompt/define.js +8 -0
  79. package/dist/prompt/define.js.map +1 -0
  80. package/dist/prompt/design/design.d.ts +47 -0
  81. package/dist/prompt/design/design.d.ts.map +1 -0
  82. package/dist/prompt/design/design.js +230 -0
  83. package/dist/prompt/design/design.js.map +1 -0
  84. package/dist/prompt/design/designPhilosophy.d.ts +2 -0
  85. package/dist/prompt/design/designPhilosophy.d.ts.map +1 -0
  86. package/dist/prompt/design/designPhilosophy.js +79 -0
  87. package/dist/prompt/design/designPhilosophy.js.map +1 -0
  88. package/dist/prompt/design/designSystemSpec.d.ts +2 -0
  89. package/dist/prompt/design/designSystemSpec.d.ts.map +1 -0
  90. package/dist/prompt/design/designSystemSpec.js +44 -0
  91. package/dist/prompt/design/designSystemSpec.js.map +1 -0
  92. package/dist/prompt/design/imgPlaceholder.d.ts +2 -0
  93. package/dist/prompt/design/imgPlaceholder.d.ts.map +1 -0
  94. package/dist/prompt/design/imgPlaceholder.js +56 -0
  95. package/dist/prompt/design/imgPlaceholder.js.map +1 -0
  96. package/dist/prompt/memory.d.ts +2 -0
  97. package/dist/prompt/memory.d.ts.map +1 -0
  98. package/dist/prompt/memory.js +23 -0
  99. package/dist/prompt/memory.js.map +1 -0
  100. package/dist/prompt/plan.d.ts +2 -0
  101. package/dist/prompt/plan.d.ts.map +1 -0
  102. package/dist/prompt/plan.js +30 -0
  103. package/dist/prompt/plan.js.map +1 -0
  104. package/dist/prompt/quickchat.d.ts +2 -0
  105. package/dist/prompt/quickchat.d.ts.map +1 -0
  106. package/dist/prompt/quickchat.js +16 -0
  107. package/dist/prompt/quickchat.js.map +1 -0
  108. package/dist/prompt/system.d.ts +3 -0
  109. package/dist/prompt/system.d.ts.map +1 -0
  110. package/dist/prompt/system.js +79 -0
  111. package/dist/prompt/system.js.map +1 -0
  112. package/dist/prompt/tool.d.ts +22 -0
  113. package/dist/prompt/tool.d.ts.map +1 -0
  114. package/dist/prompt/tool.js +25 -0
  115. package/dist/prompt/tool.js.map +1 -0
  116. package/dist/prompt/toolAliases.d.ts +16 -0
  117. package/dist/prompt/toolAliases.d.ts.map +1 -0
  118. package/dist/prompt/toolAliases.js +46 -0
  119. package/dist/prompt/toolAliases.js.map +1 -0
  120. package/dist/prompt/tools/createCron.d.ts +2 -0
  121. package/dist/prompt/tools/createCron.d.ts.map +1 -0
  122. package/dist/prompt/tools/createCron.js +29 -0
  123. package/dist/prompt/tools/createCron.js.map +1 -0
  124. package/dist/prompt/tools/createTodo.d.ts +2 -0
  125. package/dist/prompt/tools/createTodo.d.ts.map +1 -0
  126. package/dist/prompt/tools/createTodo.js +23 -0
  127. package/dist/prompt/tools/createTodo.js.map +1 -0
  128. package/dist/prompt/tools/fetchUrl.d.ts +3 -0
  129. package/dist/prompt/tools/fetchUrl.d.ts.map +1 -0
  130. package/dist/prompt/tools/fetchUrl.js +27 -0
  131. package/dist/prompt/tools/fetchUrl.js.map +1 -0
  132. package/dist/prompt/tools/planToAgent.d.ts +2 -0
  133. package/dist/prompt/tools/planToAgent.d.ts.map +1 -0
  134. package/dist/prompt/tools/planToAgent.js +24 -0
  135. package/dist/prompt/tools/planToAgent.js.map +1 -0
  136. package/dist/prompt/tools/runShell.d.ts +2 -0
  137. package/dist/prompt/tools/runShell.d.ts.map +1 -0
  138. package/dist/prompt/tools/runShell.js +31 -0
  139. package/dist/prompt/tools/runShell.js.map +1 -0
  140. package/dist/prompt/tools/searchContent.d.ts +2 -0
  141. package/dist/prompt/tools/searchContent.d.ts.map +1 -0
  142. package/dist/prompt/tools/searchContent.js +18 -0
  143. package/dist/prompt/tools/searchContent.js.map +1 -0
  144. package/dist/prompt/tools/skill.d.ts +2 -0
  145. package/dist/prompt/tools/skill.d.ts.map +1 -0
  146. package/dist/prompt/tools/skill.js +14 -0
  147. package/dist/prompt/tools/skill.js.map +1 -0
  148. package/dist/prompt/tools/subAgent.d.ts +2 -0
  149. package/dist/prompt/tools/subAgent.d.ts.map +1 -0
  150. package/dist/prompt/tools/subAgent.js +45 -0
  151. package/dist/prompt/tools/subAgent.js.map +1 -0
  152. package/dist/prompt/tools/viewFile.d.ts +4 -0
  153. package/dist/prompt/tools/viewFile.d.ts.map +1 -0
  154. package/dist/prompt/tools/viewFile.js +26 -0
  155. package/dist/prompt/tools/viewFile.js.map +1 -0
  156. package/dist/services/agents/agentsManager.d.ts +12 -15
  157. package/dist/services/agents/agentsManager.d.ts.map +1 -1
  158. package/dist/services/agents/agentsManager.js +67 -65
  159. package/dist/services/agents/agentsManager.js.map +1 -1
  160. package/dist/services/agents/genDesignSystemReminder.d.ts +3 -0
  161. package/dist/services/agents/genDesignSystemReminder.d.ts.map +1 -0
  162. package/dist/services/agents/genDesignSystemReminder.js +149 -0
  163. package/dist/services/agents/genDesignSystemReminder.js.map +1 -0
  164. package/dist/services/agents/genSystemPrompt.d.ts +11 -11
  165. package/dist/services/agents/genSystemPrompt.d.ts.map +1 -1
  166. package/dist/services/agents/genSystemPrompt.js +58 -121
  167. package/dist/services/agents/genSystemPrompt.js.map +1 -1
  168. package/dist/services/agents/{systemReminder.d.ts → genSystemReminder.d.ts} +2 -7
  169. package/dist/services/agents/genSystemReminder.d.ts.map +1 -0
  170. package/dist/services/agents/genSystemReminder.js +86 -0
  171. package/dist/services/agents/genSystemReminder.js.map +1 -0
  172. package/dist/services/api/adapt/anthropic.d.ts +3 -5
  173. package/dist/services/api/adapt/anthropic.d.ts.map +1 -1
  174. package/dist/services/api/adapt/anthropic.js +39 -25
  175. package/dist/services/api/adapt/anthropic.js.map +1 -1
  176. package/dist/services/api/adapt/openai.d.ts +3 -3
  177. package/dist/services/api/adapt/openai.d.ts.map +1 -1
  178. package/dist/services/api/adapt/openai.js +27 -30
  179. package/dist/services/api/adapt/openai.js.map +1 -1
  180. package/dist/services/api/adapt/util.d.ts +2 -3
  181. package/dist/services/api/adapt/util.d.ts.map +1 -1
  182. package/dist/services/api/adapt/util.js +7 -9
  183. package/dist/services/api/adapt/util.js.map +1 -1
  184. package/dist/services/api/apiUtil.d.ts +3 -0
  185. package/dist/services/api/apiUtil.d.ts.map +1 -1
  186. package/dist/services/api/apiUtil.js +30 -26
  187. package/dist/services/api/apiUtil.js.map +1 -1
  188. package/dist/services/api/cache.d.ts +5 -5
  189. package/dist/services/api/cache.d.ts.map +1 -1
  190. package/dist/services/api/cache.js +23 -27
  191. package/dist/services/api/cache.js.map +1 -1
  192. package/dist/services/api/queryLLM.d.ts +17 -5
  193. package/dist/services/api/queryLLM.d.ts.map +1 -1
  194. package/dist/services/api/queryLLM.js +19 -23
  195. package/dist/services/api/queryLLM.js.map +1 -1
  196. package/dist/services/commands/commandsManager.d.ts +11 -14
  197. package/dist/services/commands/commandsManager.d.ts.map +1 -1
  198. package/dist/services/commands/commandsManager.js +54 -64
  199. package/dist/services/commands/commandsManager.js.map +1 -1
  200. package/dist/services/commands/runCommand.d.ts +1 -1
  201. package/dist/services/commands/runCommand.d.ts.map +1 -1
  202. package/dist/services/commands/runCommand.js +28 -52
  203. package/dist/services/commands/runCommand.js.map +1 -1
  204. package/dist/services/design/designManager.d.ts +29 -0
  205. package/dist/services/design/designManager.d.ts.map +1 -0
  206. package/dist/services/design/designManager.js +365 -0
  207. package/dist/services/design/designManager.js.map +1 -0
  208. package/dist/services/mcp/MCPClient.d.ts.map +1 -1
  209. package/dist/services/mcp/MCPClient.js +9 -1
  210. package/dist/services/mcp/MCPClient.js.map +1 -1
  211. package/dist/services/mcp/MCPManager.d.ts +9 -29
  212. package/dist/services/mcp/MCPManager.d.ts.map +1 -1
  213. package/dist/services/mcp/MCPManager.js +53 -147
  214. package/dist/services/mcp/MCPManager.js.map +1 -1
  215. package/dist/services/mcp/MCPToolAdapter.js +4 -4
  216. package/dist/services/mcp/MCPToolAdapter.js.map +1 -1
  217. package/dist/services/memory/memManager.d.ts +6 -9
  218. package/dist/services/memory/memManager.d.ts.map +1 -1
  219. package/dist/services/memory/memManager.js +22 -42
  220. package/dist/services/memory/memManager.js.map +1 -1
  221. package/dist/services/plugins/pluginsManager.d.ts +9 -17
  222. package/dist/services/plugins/pluginsManager.d.ts.map +1 -1
  223. package/dist/services/plugins/pluginsManager.js +33 -104
  224. package/dist/services/plugins/pluginsManager.js.map +1 -1
  225. package/dist/services/rules/rulesManager.d.ts +7 -9
  226. package/dist/services/rules/rulesManager.d.ts.map +1 -1
  227. package/dist/services/rules/rulesManager.js +19 -39
  228. package/dist/services/rules/rulesManager.js.map +1 -1
  229. package/dist/services/skills/skillsManager.d.ts +10 -13
  230. package/dist/services/skills/skillsManager.d.ts.map +1 -1
  231. package/dist/services/skills/skillsManager.js +41 -54
  232. package/dist/services/skills/skillsManager.js.map +1 -1
  233. package/dist/tools/CreateCron.d.ts +68 -0
  234. package/dist/tools/CreateCron.d.ts.map +1 -0
  235. package/dist/tools/CreateCron.js +76 -0
  236. package/dist/tools/CreateCron.js.map +1 -0
  237. package/dist/tools/CreateTodo.d.ts +48 -0
  238. package/dist/tools/CreateTodo.d.ts.map +1 -0
  239. package/dist/tools/CreateTodo.js +50 -0
  240. package/dist/tools/CreateTodo.js.map +1 -0
  241. package/dist/tools/{CronDelete/CronDelete.d.ts → DelCron.d.ts} +11 -11
  242. package/dist/tools/DelCron.d.ts.map +1 -0
  243. package/dist/tools/{CronDelete/CronDelete.js → DelCron.js} +12 -12
  244. package/dist/tools/DelCron.js.map +1 -0
  245. package/dist/tools/{NotebookEdit/NotebookEdit.d.ts → EditNotebook.d.ts} +37 -37
  246. package/dist/tools/EditNotebook.d.ts.map +1 -0
  247. package/dist/tools/EditNotebook.js +220 -0
  248. package/dist/tools/EditNotebook.js.map +1 -0
  249. package/dist/tools/{WebFetch/WebFetch.d.ts → FetchUrl.d.ts} +8 -8
  250. package/dist/tools/FetchUrl.d.ts.map +1 -0
  251. package/dist/tools/{WebFetch/WebFetch.js → FetchUrl.js} +31 -35
  252. package/dist/tools/FetchUrl.js.map +1 -0
  253. package/dist/tools/GetTodo.d.ts +34 -0
  254. package/dist/tools/GetTodo.d.ts.map +1 -0
  255. package/dist/tools/GetTodo.js +58 -0
  256. package/dist/tools/GetTodo.js.map +1 -0
  257. package/dist/tools/{CronList/CronList.d.ts → ListCrons.d.ts} +12 -13
  258. package/dist/tools/ListCrons.d.ts.map +1 -0
  259. package/dist/tools/{CronList/CronList.js → ListCrons.js} +20 -20
  260. package/dist/tools/ListCrons.js.map +1 -0
  261. package/dist/tools/ListTodos.d.ts +27 -0
  262. package/dist/tools/ListTodos.d.ts.map +1 -0
  263. package/dist/tools/ListTodos.js +57 -0
  264. package/dist/tools/ListTodos.js.map +1 -0
  265. package/dist/tools/{Edit/Edit.d.ts → PatchFile.d.ts} +39 -43
  266. package/dist/tools/PatchFile.d.ts.map +1 -0
  267. package/dist/tools/PatchFile.js +214 -0
  268. package/dist/tools/PatchFile.js.map +1 -0
  269. package/dist/tools/PeekBgJob.d.ts +58 -0
  270. package/dist/tools/PeekBgJob.d.ts.map +1 -0
  271. package/dist/tools/PeekBgJob.js +93 -0
  272. package/dist/tools/PeekBgJob.js.map +1 -0
  273. package/dist/tools/PickOption.d.ts +463 -0
  274. package/dist/tools/PickOption.d.ts.map +1 -0
  275. package/dist/tools/PickOption.js +226 -0
  276. package/dist/tools/PickOption.js.map +1 -0
  277. package/dist/tools/PlanToAgent.d.ts +42 -0
  278. package/dist/tools/PlanToAgent.d.ts.map +1 -0
  279. package/dist/tools/{ExitPlanMode/ExitPlanMode.js → PlanToAgent.js} +54 -51
  280. package/dist/tools/PlanToAgent.js.map +1 -0
  281. package/dist/tools/{Bash/Bash.d.ts → RunShell.d.ts} +23 -21
  282. package/dist/tools/RunShell.d.ts.map +1 -0
  283. package/dist/tools/{Bash/Bash.js → RunShell.js} +56 -59
  284. package/dist/tools/RunShell.js.map +1 -0
  285. package/dist/tools/SearchContent.d.ts +86 -0
  286. package/dist/tools/SearchContent.d.ts.map +1 -0
  287. package/dist/tools/SearchContent.js +237 -0
  288. package/dist/tools/SearchContent.js.map +1 -0
  289. package/dist/tools/{Glob/Glob.d.ts → SearchFiles.d.ts} +8 -8
  290. package/dist/tools/SearchFiles.d.ts.map +1 -0
  291. package/dist/tools/{Glob/Glob.js → SearchFiles.js} +24 -31
  292. package/dist/tools/SearchFiles.js.map +1 -0
  293. package/dist/tools/{Skill/Skill.d.ts → Skill.d.ts} +11 -11
  294. package/dist/tools/Skill.d.ts.map +1 -0
  295. package/dist/tools/{Skill/Skill.js → Skill.js} +21 -19
  296. package/dist/tools/Skill.js.map +1 -0
  297. package/dist/tools/{TaskStop/TaskStop.d.ts → StopBgJob.d.ts} +17 -17
  298. package/dist/tools/StopBgJob.d.ts.map +1 -0
  299. package/dist/tools/StopBgJob.js +69 -0
  300. package/dist/tools/StopBgJob.js.map +1 -0
  301. package/dist/tools/SubAgent.d.ts +67 -0
  302. package/dist/tools/SubAgent.d.ts.map +1 -0
  303. package/dist/tools/{Agent/Agent.js → SubAgent.js} +76 -71
  304. package/dist/tools/SubAgent.js.map +1 -0
  305. package/dist/tools/UpdateTodo.d.ts +76 -0
  306. package/dist/tools/UpdateTodo.d.ts.map +1 -0
  307. package/dist/tools/UpdateTodo.js +111 -0
  308. package/dist/tools/UpdateTodo.js.map +1 -0
  309. package/dist/tools/{Read/Read.d.ts → ViewFile.d.ts} +26 -64
  310. package/dist/tools/ViewFile.d.ts.map +1 -0
  311. package/dist/tools/ViewFile.js +365 -0
  312. package/dist/tools/ViewFile.js.map +1 -0
  313. package/dist/tools/{Write/Write.d.ts → WriteFile.d.ts} +12 -12
  314. package/dist/tools/WriteFile.d.ts.map +1 -0
  315. package/dist/tools/WriteFile.js +150 -0
  316. package/dist/tools/WriteFile.js.map +1 -0
  317. package/dist/tools/base/Tool.d.ts +2 -2
  318. package/dist/tools/base/Tool.d.ts.map +1 -1
  319. package/dist/tools/base/tools.d.ts +3 -2
  320. package/dist/tools/base/tools.d.ts.map +1 -1
  321. package/dist/tools/base/tools.js +66 -54
  322. package/dist/tools/base/tools.js.map +1 -1
  323. package/dist/types/agent.d.ts +2 -1
  324. package/dist/types/agent.d.ts.map +1 -1
  325. package/dist/types/command.d.ts +0 -2
  326. package/dist/types/command.d.ts.map +1 -1
  327. package/dist/types/cron.d.ts +7 -6
  328. package/dist/types/cron.d.ts.map +1 -1
  329. package/dist/types/design.d.ts +24 -0
  330. package/dist/types/design.d.ts.map +1 -0
  331. package/dist/types/design.js +6 -0
  332. package/dist/types/design.js.map +1 -0
  333. package/dist/types/errors.d.ts +0 -2
  334. package/dist/types/errors.d.ts.map +1 -1
  335. package/dist/types/errors.js +0 -2
  336. package/dist/types/errors.js.map +1 -1
  337. package/dist/types/index.d.ts +18 -12
  338. package/dist/types/index.d.ts.map +1 -1
  339. package/dist/types/index.js +28 -5
  340. package/dist/types/index.js.map +1 -1
  341. package/dist/types/mcp.d.ts +1 -3
  342. package/dist/types/mcp.d.ts.map +1 -1
  343. package/dist/types/message.d.ts +5 -4
  344. package/dist/types/message.d.ts.map +1 -1
  345. package/dist/types/model.d.ts +1 -1
  346. package/dist/types/model.d.ts.map +1 -1
  347. package/dist/types/plugin.d.ts +8 -11
  348. package/dist/types/plugin.d.ts.map +1 -1
  349. package/dist/types/session.d.ts +18 -0
  350. package/dist/types/session.d.ts.map +1 -0
  351. package/dist/types/session.js +3 -0
  352. package/dist/types/session.js.map +1 -0
  353. package/dist/types/skill.d.ts +0 -3
  354. package/dist/types/skill.d.ts.map +1 -1
  355. package/dist/types/skill.js +0 -2
  356. package/dist/types/skill.js.map +1 -1
  357. package/dist/types/task.d.ts +12 -10
  358. package/dist/types/task.d.ts.map +1 -1
  359. package/dist/types/todoTask.d.ts +4 -5
  360. package/dist/types/todoTask.d.ts.map +1 -1
  361. package/dist/util/adapter.d.ts +8 -3
  362. package/dist/util/adapter.d.ts.map +1 -1
  363. package/dist/util/adapter.js +22 -49
  364. package/dist/util/adapter.js.map +1 -1
  365. package/dist/util/agentStats.d.ts +1 -1
  366. package/dist/util/agentStats.d.ts.map +1 -1
  367. package/dist/util/agentStats.js +16 -24
  368. package/dist/util/agentStats.js.map +1 -1
  369. package/dist/util/cacheLLM.d.ts +5 -5
  370. package/dist/util/cacheLLM.d.ts.map +1 -1
  371. package/dist/util/cacheLLM.js.map +1 -1
  372. package/dist/util/color.d.ts +44 -0
  373. package/dist/util/color.d.ts.map +1 -0
  374. package/dist/util/color.js +247 -0
  375. package/dist/util/color.js.map +1 -0
  376. package/dist/util/commands.d.ts +4 -5
  377. package/dist/util/commands.d.ts.map +1 -1
  378. package/dist/util/commands.js +22 -112
  379. package/dist/util/commands.js.map +1 -1
  380. package/dist/util/compact.d.ts +8 -5
  381. package/dist/util/compact.d.ts.map +1 -1
  382. package/dist/util/compact.js +26 -156
  383. package/dist/util/compact.js.map +1 -1
  384. package/dist/util/cron.d.ts +1 -9
  385. package/dist/util/cron.d.ts.map +1 -1
  386. package/dist/util/cron.js +2 -29
  387. package/dist/util/cron.js.map +1 -1
  388. package/dist/util/cwd.d.ts +2 -35
  389. package/dist/util/cwd.d.ts.map +1 -1
  390. package/dist/util/cwd.js +7 -57
  391. package/dist/util/cwd.js.map +1 -1
  392. package/dist/util/diff.d.ts +6 -4
  393. package/dist/util/diff.d.ts.map +1 -1
  394. package/dist/util/diff.js +63 -104
  395. package/dist/util/diff.js.map +1 -1
  396. package/dist/{tools/Edit/utils.d.ts → util/edit.d.ts} +2 -5
  397. package/dist/util/edit.d.ts.map +1 -0
  398. package/dist/util/edit.js +44 -0
  399. package/dist/util/edit.js.map +1 -0
  400. package/dist/util/env.d.ts +1 -4
  401. package/dist/util/env.d.ts.map +1 -1
  402. package/dist/util/env.js +22 -15
  403. package/dist/util/env.js.map +1 -1
  404. package/dist/util/fetchUrl.d.ts +18 -0
  405. package/dist/util/fetchUrl.d.ts.map +1 -0
  406. package/dist/util/fetchUrl.js +101 -0
  407. package/dist/util/fetchUrl.js.map +1 -0
  408. package/dist/util/file.d.ts +34 -45
  409. package/dist/util/file.d.ts.map +1 -1
  410. package/dist/util/file.js +164 -236
  411. package/dist/util/file.js.map +1 -1
  412. package/dist/util/fileReference.d.ts +1 -9
  413. package/dist/util/fileReference.d.ts.map +1 -1
  414. package/dist/util/fileReference.js +49 -58
  415. package/dist/util/fileReference.js.map +1 -1
  416. package/dist/util/format.d.ts +1 -9
  417. package/dist/util/format.d.ts.map +1 -1
  418. package/dist/util/format.js +5 -46
  419. package/dist/util/format.js.map +1 -1
  420. package/dist/util/formatter.d.ts +5 -8
  421. package/dist/util/formatter.d.ts.map +1 -1
  422. package/dist/util/formatter.js +5 -15
  423. package/dist/util/formatter.js.map +1 -1
  424. package/dist/util/git.d.ts +2 -3
  425. package/dist/util/git.d.ts.map +1 -1
  426. package/dist/util/git.js +34 -39
  427. package/dist/util/git.js.map +1 -1
  428. package/dist/util/history.d.ts +0 -7
  429. package/dist/util/history.d.ts.map +1 -1
  430. package/dist/util/history.js +3 -50
  431. package/dist/util/history.js.map +1 -1
  432. package/dist/util/log.d.ts +0 -1
  433. package/dist/util/log.d.ts.map +1 -1
  434. package/dist/util/log.js +2 -7
  435. package/dist/util/log.js.map +1 -1
  436. package/dist/util/logLLM.d.ts +3 -7
  437. package/dist/util/logLLM.d.ts.map +1 -1
  438. package/dist/util/logLLM.js +16 -31
  439. package/dist/util/logLLM.js.map +1 -1
  440. package/dist/util/message.d.ts +12 -11
  441. package/dist/util/message.d.ts.map +1 -1
  442. package/dist/util/message.js +72 -93
  443. package/dist/util/message.js.map +1 -1
  444. package/dist/util/model.d.ts +0 -3
  445. package/dist/util/model.d.ts.map +1 -1
  446. package/dist/util/model.js +1 -5
  447. package/dist/util/model.js.map +1 -1
  448. package/dist/util/notebook.d.ts +1 -8
  449. package/dist/util/notebook.d.ts.map +1 -1
  450. package/dist/util/notebook.js +36 -63
  451. package/dist/util/notebook.js.map +1 -1
  452. package/dist/util/notifyRegistry.d.ts +18 -0
  453. package/dist/util/notifyRegistry.d.ts.map +1 -0
  454. package/dist/util/notifyRegistry.js +28 -0
  455. package/dist/util/notifyRegistry.js.map +1 -0
  456. package/dist/util/pdf.d.ts +14 -72
  457. package/dist/util/pdf.d.ts.map +1 -1
  458. package/dist/util/pdf.js +51 -460
  459. package/dist/util/pdf.js.map +1 -1
  460. package/dist/util/process.d.ts +1 -1
  461. package/dist/util/process.d.ts.map +1 -1
  462. package/dist/util/process.js +8 -13
  463. package/dist/util/process.js.map +1 -1
  464. package/dist/util/quickchat.d.ts +6 -0
  465. package/dist/util/quickchat.d.ts.map +1 -0
  466. package/dist/util/quickchat.js +64 -0
  467. package/dist/util/quickchat.js.map +1 -0
  468. package/dist/util/ripgrep.d.ts +4 -2
  469. package/dist/util/ripgrep.d.ts.map +1 -1
  470. package/dist/util/ripgrep.js +40 -116
  471. package/dist/util/ripgrep.js.map +1 -1
  472. package/dist/util/savePath.d.ts +2 -18
  473. package/dist/util/savePath.d.ts.map +1 -1
  474. package/dist/util/savePath.js +7 -47
  475. package/dist/util/savePath.js.map +1 -1
  476. package/dist/util/secureFile.d.ts +13 -135
  477. package/dist/util/secureFile.d.ts.map +1 -1
  478. package/dist/util/secureFile.js +74 -478
  479. package/dist/util/secureFile.js.map +1 -1
  480. package/dist/util/session.d.ts +2 -19
  481. package/dist/util/session.d.ts.map +1 -1
  482. package/dist/util/session.js +5 -47
  483. package/dist/util/session.js.map +1 -1
  484. package/dist/util/shell.d.ts +25 -3
  485. package/dist/util/shell.d.ts.map +1 -1
  486. package/dist/util/shell.js +218 -290
  487. package/dist/util/shell.js.map +1 -1
  488. package/dist/util/time.d.ts +6 -5
  489. package/dist/util/time.d.ts.map +1 -1
  490. package/dist/util/time.js +10 -6
  491. package/dist/util/time.js.map +1 -1
  492. package/dist/util/tokens.d.ts +0 -1
  493. package/dist/util/tokens.d.ts.map +1 -1
  494. package/dist/util/tokens.js +12 -23
  495. package/dist/util/tokens.js.map +1 -1
  496. package/dist/util/topic.d.ts +1 -4
  497. package/dist/util/topic.d.ts.map +1 -1
  498. package/dist/util/topic.js +12 -11
  499. package/dist/util/topic.js.map +1 -1
  500. package/dist/util/writeFile.d.ts +12 -0
  501. package/dist/util/writeFile.d.ts.map +1 -0
  502. package/dist/util/writeFile.js +69 -0
  503. package/dist/util/writeFile.js.map +1 -0
  504. package/package.json +1 -1
  505. package/dist/constants/config.d.ts.map +0 -1
  506. package/dist/constants/config.js.map +0 -1
  507. package/dist/constants/message.d.ts +0 -10
  508. package/dist/constants/message.d.ts.map +0 -1
  509. package/dist/constants/message.js +0 -25
  510. package/dist/constants/message.js.map +0 -1
  511. package/dist/constants/product.d.ts +0 -4
  512. package/dist/constants/product.d.ts.map +0 -1
  513. package/dist/constants/product.js +0 -7
  514. package/dist/constants/product.js.map +0 -1
  515. package/dist/services/agents/defaultBuiltInAgentsConfs.d.ts +0 -3
  516. package/dist/services/agents/defaultBuiltInAgentsConfs.d.ts.map +0 -1
  517. package/dist/services/agents/defaultBuiltInAgentsConfs.js +0 -125
  518. package/dist/services/agents/defaultBuiltInAgentsConfs.js.map +0 -1
  519. package/dist/services/agents/prompt.d.ts +0 -10
  520. package/dist/services/agents/prompt.d.ts.map +0 -1
  521. package/dist/services/agents/prompt.js +0 -144
  522. package/dist/services/agents/prompt.js.map +0 -1
  523. package/dist/services/agents/systemReminder.d.ts.map +0 -1
  524. package/dist/services/agents/systemReminder.js +0 -68
  525. package/dist/services/agents/systemReminder.js.map +0 -1
  526. package/dist/tools/Agent/Agent.d.ts +0 -67
  527. package/dist/tools/Agent/Agent.d.ts.map +0 -1
  528. package/dist/tools/Agent/Agent.js.map +0 -1
  529. package/dist/tools/Agent/prompt.d.ts +0 -6
  530. package/dist/tools/Agent/prompt.d.ts.map +0 -1
  531. package/dist/tools/Agent/prompt.js +0 -73
  532. package/dist/tools/Agent/prompt.js.map +0 -1
  533. package/dist/tools/AskUserQuestion/AskUserQuestion.d.ts +0 -179
  534. package/dist/tools/AskUserQuestion/AskUserQuestion.d.ts.map +0 -1
  535. package/dist/tools/AskUserQuestion/AskUserQuestion.js +0 -165
  536. package/dist/tools/AskUserQuestion/AskUserQuestion.js.map +0 -1
  537. package/dist/tools/AskUserQuestion/prompt.d.ts +0 -3
  538. package/dist/tools/AskUserQuestion/prompt.d.ts.map +0 -1
  539. package/dist/tools/AskUserQuestion/prompt.js +0 -17
  540. package/dist/tools/AskUserQuestion/prompt.js.map +0 -1
  541. package/dist/tools/Bash/Bash.d.ts.map +0 -1
  542. package/dist/tools/Bash/Bash.js.map +0 -1
  543. package/dist/tools/Bash/prompt.d.ts +0 -5
  544. package/dist/tools/Bash/prompt.d.ts.map +0 -1
  545. package/dist/tools/Bash/prompt.js +0 -130
  546. package/dist/tools/Bash/prompt.js.map +0 -1
  547. package/dist/tools/Bash/utils.d.ts +0 -9
  548. package/dist/tools/Bash/utils.d.ts.map +0 -1
  549. package/dist/tools/Bash/utils.js +0 -41
  550. package/dist/tools/Bash/utils.js.map +0 -1
  551. package/dist/tools/CronCreate/CronCreate.d.ts +0 -68
  552. package/dist/tools/CronCreate/CronCreate.d.ts.map +0 -1
  553. package/dist/tools/CronCreate/CronCreate.js +0 -75
  554. package/dist/tools/CronCreate/CronCreate.js.map +0 -1
  555. package/dist/tools/CronCreate/prompt.d.ts +0 -3
  556. package/dist/tools/CronCreate/prompt.d.ts.map +0 -1
  557. package/dist/tools/CronCreate/prompt.js +0 -41
  558. package/dist/tools/CronCreate/prompt.js.map +0 -1
  559. package/dist/tools/CronDelete/CronDelete.d.ts.map +0 -1
  560. package/dist/tools/CronDelete/CronDelete.js.map +0 -1
  561. package/dist/tools/CronDelete/prompt.d.ts +0 -3
  562. package/dist/tools/CronDelete/prompt.d.ts.map +0 -1
  563. package/dist/tools/CronDelete/prompt.js +0 -6
  564. package/dist/tools/CronDelete/prompt.js.map +0 -1
  565. package/dist/tools/CronList/CronList.d.ts.map +0 -1
  566. package/dist/tools/CronList/CronList.js.map +0 -1
  567. package/dist/tools/CronList/prompt.d.ts +0 -3
  568. package/dist/tools/CronList/prompt.d.ts.map +0 -1
  569. package/dist/tools/CronList/prompt.js +0 -6
  570. package/dist/tools/CronList/prompt.js.map +0 -1
  571. package/dist/tools/Edit/Edit.d.ts.map +0 -1
  572. package/dist/tools/Edit/Edit.js +0 -225
  573. package/dist/tools/Edit/Edit.js.map +0 -1
  574. package/dist/tools/Edit/prompt.d.ts +0 -3
  575. package/dist/tools/Edit/prompt.d.ts.map +0 -1
  576. package/dist/tools/Edit/prompt.js +0 -15
  577. package/dist/tools/Edit/prompt.js.map +0 -1
  578. package/dist/tools/Edit/utils.d.ts.map +0 -1
  579. package/dist/tools/Edit/utils.js +0 -60
  580. package/dist/tools/Edit/utils.js.map +0 -1
  581. package/dist/tools/ExitPlanMode/ExitPlanMode.d.ts +0 -42
  582. package/dist/tools/ExitPlanMode/ExitPlanMode.d.ts.map +0 -1
  583. package/dist/tools/ExitPlanMode/ExitPlanMode.js.map +0 -1
  584. package/dist/tools/ExitPlanMode/prompt.d.ts +0 -3
  585. package/dist/tools/ExitPlanMode/prompt.d.ts.map +0 -1
  586. package/dist/tools/ExitPlanMode/prompt.js +0 -28
  587. package/dist/tools/ExitPlanMode/prompt.js.map +0 -1
  588. package/dist/tools/Glob/Glob.d.ts.map +0 -1
  589. package/dist/tools/Glob/Glob.js.map +0 -1
  590. package/dist/tools/Glob/prompt.d.ts +0 -3
  591. package/dist/tools/Glob/prompt.d.ts.map +0 -1
  592. package/dist/tools/Glob/prompt.js +0 -11
  593. package/dist/tools/Glob/prompt.js.map +0 -1
  594. package/dist/tools/Grep/Grep.d.ts +0 -106
  595. package/dist/tools/Grep/Grep.d.ts.map +0 -1
  596. package/dist/tools/Grep/Grep.js +0 -301
  597. package/dist/tools/Grep/Grep.js.map +0 -1
  598. package/dist/tools/Grep/prompt.d.ts +0 -3
  599. package/dist/tools/Grep/prompt.d.ts.map +0 -1
  600. package/dist/tools/Grep/prompt.js +0 -17
  601. package/dist/tools/Grep/prompt.js.map +0 -1
  602. package/dist/tools/NotebookEdit/NotebookEdit.d.ts.map +0 -1
  603. package/dist/tools/NotebookEdit/NotebookEdit.js +0 -312
  604. package/dist/tools/NotebookEdit/NotebookEdit.js.map +0 -1
  605. package/dist/tools/NotebookEdit/prompt.d.ts +0 -3
  606. package/dist/tools/NotebookEdit/prompt.d.ts.map +0 -1
  607. package/dist/tools/NotebookEdit/prompt.js +0 -6
  608. package/dist/tools/NotebookEdit/prompt.js.map +0 -1
  609. package/dist/tools/Read/Read.d.ts.map +0 -1
  610. package/dist/tools/Read/Read.js +0 -472
  611. package/dist/tools/Read/Read.js.map +0 -1
  612. package/dist/tools/Read/prompt.d.ts +0 -4
  613. package/dist/tools/Read/prompt.d.ts.map +0 -1
  614. package/dist/tools/Read/prompt.js +0 -23
  615. package/dist/tools/Read/prompt.js.map +0 -1
  616. package/dist/tools/Skill/Skill.d.ts.map +0 -1
  617. package/dist/tools/Skill/Skill.js.map +0 -1
  618. package/dist/tools/Skill/prompt.d.ts +0 -3
  619. package/dist/tools/Skill/prompt.d.ts.map +0 -1
  620. package/dist/tools/Skill/prompt.js +0 -27
  621. package/dist/tools/Skill/prompt.js.map +0 -1
  622. package/dist/tools/TaskCreate/TaskCreate.d.ts +0 -54
  623. package/dist/tools/TaskCreate/TaskCreate.d.ts.map +0 -1
  624. package/dist/tools/TaskCreate/TaskCreate.js +0 -51
  625. package/dist/tools/TaskCreate/TaskCreate.js.map +0 -1
  626. package/dist/tools/TaskCreate/prompt.d.ts +0 -3
  627. package/dist/tools/TaskCreate/prompt.d.ts.map +0 -1
  628. package/dist/tools/TaskCreate/prompt.js +0 -45
  629. package/dist/tools/TaskCreate/prompt.js.map +0 -1
  630. package/dist/tools/TaskGet/TaskGet.d.ts +0 -34
  631. package/dist/tools/TaskGet/TaskGet.d.ts.map +0 -1
  632. package/dist/tools/TaskGet/TaskGet.js +0 -57
  633. package/dist/tools/TaskGet/TaskGet.js.map +0 -1
  634. package/dist/tools/TaskGet/prompt.d.ts +0 -3
  635. package/dist/tools/TaskGet/prompt.d.ts.map +0 -1
  636. package/dist/tools/TaskGet/prompt.js +0 -26
  637. package/dist/tools/TaskGet/prompt.js.map +0 -1
  638. package/dist/tools/TaskList/TaskList.d.ts +0 -27
  639. package/dist/tools/TaskList/TaskList.d.ts.map +0 -1
  640. package/dist/tools/TaskList/TaskList.js +0 -56
  641. package/dist/tools/TaskList/TaskList.js.map +0 -1
  642. package/dist/tools/TaskList/prompt.d.ts +0 -3
  643. package/dist/tools/TaskList/prompt.d.ts.map +0 -1
  644. package/dist/tools/TaskList/prompt.js +0 -25
  645. package/dist/tools/TaskList/prompt.js.map +0 -1
  646. package/dist/tools/TaskOutput/TaskOutput.d.ts +0 -58
  647. package/dist/tools/TaskOutput/TaskOutput.d.ts.map +0 -1
  648. package/dist/tools/TaskOutput/TaskOutput.js +0 -95
  649. package/dist/tools/TaskOutput/TaskOutput.js.map +0 -1
  650. package/dist/tools/TaskStop/TaskStop.d.ts.map +0 -1
  651. package/dist/tools/TaskStop/TaskStop.js +0 -69
  652. package/dist/tools/TaskStop/TaskStop.js.map +0 -1
  653. package/dist/tools/TaskUpdate/TaskUpdate.d.ts +0 -88
  654. package/dist/tools/TaskUpdate/TaskUpdate.d.ts.map +0 -1
  655. package/dist/tools/TaskUpdate/TaskUpdate.js +0 -115
  656. package/dist/tools/TaskUpdate/TaskUpdate.js.map +0 -1
  657. package/dist/tools/TaskUpdate/prompt.d.ts +0 -3
  658. package/dist/tools/TaskUpdate/prompt.d.ts.map +0 -1
  659. package/dist/tools/TaskUpdate/prompt.js +0 -80
  660. package/dist/tools/TaskUpdate/prompt.js.map +0 -1
  661. package/dist/tools/TodoWrite/TodoWrite.d.ts +0 -92
  662. package/dist/tools/TodoWrite/TodoWrite.d.ts.map +0 -1
  663. package/dist/tools/TodoWrite/TodoWrite.js +0 -101
  664. package/dist/tools/TodoWrite/TodoWrite.js.map +0 -1
  665. package/dist/tools/TodoWrite/prompt.d.ts +0 -3
  666. package/dist/tools/TodoWrite/prompt.d.ts.map +0 -1
  667. package/dist/tools/TodoWrite/prompt.js +0 -187
  668. package/dist/tools/TodoWrite/prompt.js.map +0 -1
  669. package/dist/tools/WebFetch/WebFetch.d.ts.map +0 -1
  670. package/dist/tools/WebFetch/WebFetch.js.map +0 -1
  671. package/dist/tools/WebFetch/prompt.d.ts +0 -4
  672. package/dist/tools/WebFetch/prompt.d.ts.map +0 -1
  673. package/dist/tools/WebFetch/prompt.js +0 -38
  674. package/dist/tools/WebFetch/prompt.js.map +0 -1
  675. package/dist/tools/WebFetch/utils.d.ts +0 -20
  676. package/dist/tools/WebFetch/utils.d.ts.map +0 -1
  677. package/dist/tools/WebFetch/utils.js +0 -223
  678. package/dist/tools/WebFetch/utils.js.map +0 -1
  679. package/dist/tools/Write/Write.d.ts.map +0 -1
  680. package/dist/tools/Write/Write.js +0 -197
  681. package/dist/tools/Write/Write.js.map +0 -1
  682. package/dist/tools/Write/prompt.d.ts +0 -3
  683. package/dist/tools/Write/prompt.d.ts.map +0 -1
  684. package/dist/tools/Write/prompt.js +0 -13
  685. package/dist/tools/Write/prompt.js.map +0 -1
  686. package/dist/util/assembleTools.d.ts +0 -6
  687. package/dist/util/assembleTools.d.ts.map +0 -1
  688. package/dist/util/assembleTools.js +0 -17
  689. package/dist/util/assembleTools.js.map +0 -1
  690. package/dist/util/btw.d.ts +0 -6
  691. package/dist/util/btw.d.ts.map +0 -1
  692. package/dist/util/btw.js +0 -80
  693. package/dist/util/btw.js.map +0 -1
  694. package/dist/util/directory.d.ts +0 -37
  695. package/dist/util/directory.d.ts.map +0 -1
  696. package/dist/util/directory.js +0 -137
  697. package/dist/util/directory.js.map +0 -1
  698. package/dist/util/exec.d.ts +0 -6
  699. package/dist/util/exec.d.ts.map +0 -1
  700. package/dist/util/exec.js +0 -43
  701. package/dist/util/exec.js.map +0 -1
  702. package/dist/util/filePermission.d.ts +0 -14
  703. package/dist/util/filePermission.d.ts.map +0 -1
  704. package/dist/util/filePermission.js +0 -47
  705. package/dist/util/filePermission.js.map +0 -1
@@ -1,5 +1,15 @@
1
1
  "use strict";
2
2
  /**
3
+ * 多会话状态管理
4
+ *
5
+ * 两层隔离:sessionId → agentId
6
+ * - StateManager 是单例注册表,持有 Map<sessionId, SessionRuntime>
7
+ * - SessionRuntime 持有单个会话的全部状态:
8
+ * - 按 agentId 隔离:statesMap / messageHistoryMap / readFileTimestampsMap / todosMap / todoTasksMap
9
+ * (agentId='main' 为该会话主代理,子代理为各自 taskId)
10
+ * - 会话级:abortController / 输入队列 / 编辑权限 / Plan&Design 模式标记 / 前台 agent 集合
11
+ * - 会话级配置:agentMode / useTools
12
+ *
3
13
  * 子代理不触发 conversation:usage、message:chunk、tool:execution:chunk、state:update、todos:update、topic:update
4
14
  * 子代理相关事件 message:complete、tool:execution:complete、tool:execution:error、session:interrupted、tool:permission:request 有agentId字段
5
15
  */
@@ -37,7 +47,7 @@ var __importStar = (this && this.__importStar) || (function () {
37
47
  };
38
48
  })();
39
49
  Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.getStateManager = exports.StateManager = exports.MAIN_AGENT_ID = void 0;
50
+ exports.getStateManager = exports.StateManager = exports.SessionRuntime = exports.MAIN_AGENT_ID = void 0;
41
51
  const crypto = __importStar(require("crypto"));
42
52
  const EventSystem_1 = require("../events/EventSystem");
43
53
  const log_1 = require("../util/log");
@@ -46,88 +56,49 @@ const ConfManager_1 = require("./ConfManager");
46
56
  // 主代理固定 ID
47
57
  exports.MAIN_AGENT_ID = 'main';
48
58
  /**
49
- * 全局状态管理器
50
- * 负责管理会话状态并发送状态更新事件
51
- *
52
- * 隔离状态(按 agentId):
53
- * - statesMap: 代理状态 (currentState/previousState)
54
- * - messageHistoryMap: 消息历史
55
- * - readFileTimestampsMap: 文件读取时间戳
56
- * - todosMap: todos 列表
57
- *
58
- * 共享状态:
59
- * - sessionId: 会话ID
60
- * - globalEditPermissionGranted: 全局编辑权限
61
- * - currentAbortController: 中断控制器
59
+ * 单个会话的运行时状态
60
+ * 由 StateManager 按 sessionId 持有
62
61
  */
63
- class StateManager {
64
- constructor() {
65
- // === 隔离状态(按 agentId) ===
62
+ class SessionRuntime {
63
+ constructor(sessionId) {
64
+ this.sessionId = sessionId;
65
+ // === 按 agentId 隔离 ===
66
66
  this.statesMap = new Map();
67
67
  this.messageHistoryMap = new Map();
68
68
  this.readFileTimestampsMap = new Map();
69
69
  this.todosMap = new Map();
70
70
  this.todoTasksMap = new Map();
71
- // === 共享状态 ===
72
- this.sessionId = null;
71
+ this.fileLineEndingsMap = new Map();
72
+ // === 会话级状态 ===
73
+ this.currentAbortController = null;
73
74
  this.globalEditPermissionGranted = false;
74
75
  this.planModeInfoSent = false;
75
- this.currentAbortController = null;
76
+ this.designModeInfoSent = false;
76
77
  // 当前正在运行的前台 agent taskId 集合
77
78
  this.foregroundAgents = new Set();
78
- // 待处理用户输入队列(共享状态)
79
+ // 待处理用户输入队列
79
80
  this.pendingUserInputs = [];
80
- // 私有构造函数,确保单例模式
81
- }
82
- /**
83
- * 获取StateManager实例(单例模式)
84
- */
85
- static getInstance() {
86
- if (!StateManager.instance) {
87
- StateManager.instance = new StateManager();
88
- }
89
- return StateManager.instance;
90
- }
91
- /**
92
- * 获取当前会话ID
93
- */
94
- getSessionId() {
95
- return this.sessionId;
96
- }
97
- /**
98
- * 设置会话ID
99
- */
100
- setSessionId(sessionId) {
101
- this.sessionId = sessionId;
102
- // 新建会话时重置全局编辑权限
103
- this.globalEditPermissionGranted = false;
104
- (0, log_1.logInfo)(`会话ID已设置: ${sessionId},全局编辑权限已重置`);
81
+ // === 会话级配置(从全局 coreConfig 下沉到会话级)===
82
+ this.agentMode = 'Agent';
83
+ // 会话级系统提示快照:首次构建后冻结,整个会话不再变化
84
+ this.systemPromptContent = null;
105
85
  }
106
86
  // ============================================================
107
87
  // 消息历史管理(按代理隔离)
108
88
  // ============================================================
109
- /**
110
- * 设置消息历史
111
- */
112
89
  setMessageHistory(messages, agentId = exports.MAIN_AGENT_ID, skipAutoSave = false) {
113
90
  this.messageHistoryMap.set(agentId, messages);
114
91
  // 主代理设置消息历史时自动保存
115
- if (!skipAutoSave && agentId === exports.MAIN_AGENT_ID && this.sessionId && messages.length > 0) {
92
+ if (!skipAutoSave && agentId === exports.MAIN_AGENT_ID && messages.length > 0) {
116
93
  this.saveSessionHistory();
117
94
  }
118
95
  }
119
- /**
120
- * 获取消息历史
121
- */
122
96
  getMessageHistory(agentId = exports.MAIN_AGENT_ID) {
123
97
  return this.messageHistoryMap.get(agentId) || [];
124
98
  }
125
99
  // ============================================================
126
100
  // 文件读取时间戳管理(按代理隔离)
127
101
  // ============================================================
128
- /**
129
- * 获取文件读取时间戳
130
- */
131
102
  getReadFileTimestamps(agentId = exports.MAIN_AGENT_ID) {
132
103
  let timestamps = this.readFileTimestampsMap.get(agentId);
133
104
  if (!timestamps) {
@@ -136,96 +107,77 @@ class StateManager {
136
107
  }
137
108
  return timestamps;
138
109
  }
139
- /**
140
- * 设置单个文件的读取时间戳
141
- */
142
110
  setReadFileTimestamp(filePath, timestamp, agentId = exports.MAIN_AGENT_ID) {
143
111
  const timestamps = this.getReadFileTimestamps(agentId);
144
112
  timestamps[filePath] = timestamp;
145
113
  }
146
- /**
147
- * 批量设置文件读取时间戳(覆盖)
148
- */
149
114
  setReadFileTimestamps(timestamps, agentId = exports.MAIN_AGENT_ID) {
150
115
  this.readFileTimestampsMap.set(agentId, { ...timestamps });
151
116
  }
152
- /**
153
- * 获取单个文件的读取时间戳
154
- */
155
117
  getReadFileTimestamp(filePath, agentId = exports.MAIN_AGENT_ID) {
156
118
  return this.getReadFileTimestamps(agentId)[filePath];
157
119
  }
158
120
  // ============================================================
121
+ // 文件换行符缓存(按代理隔离)
122
+ // ============================================================
123
+ getFileLineEnding(filePath, agentId = exports.MAIN_AGENT_ID) {
124
+ return this.fileLineEndingsMap.get(agentId)?.[filePath];
125
+ }
126
+ setFileLineEnding(filePath, ending, agentId = exports.MAIN_AGENT_ID) {
127
+ let endings = this.fileLineEndingsMap.get(agentId);
128
+ if (!endings) {
129
+ endings = {};
130
+ this.fileLineEndingsMap.set(agentId, endings);
131
+ }
132
+ endings[filePath] = ending;
133
+ }
134
+ // ============================================================
159
135
  // todos 管理(按代理隔离)
160
136
  // ============================================================
161
- /**
162
- * 获取 todos 列表
163
- */
164
137
  getTodos(agentId = exports.MAIN_AGENT_ID) {
165
138
  return this.todosMap.get(agentId) || [];
166
139
  }
167
- /**
168
- * 设置 todos 列表
169
- */
170
140
  setTodos(todos, agentId = exports.MAIN_AGENT_ID) {
171
141
  this.todosMap.set(agentId, todos);
172
142
  }
173
- /**
174
- * 清理指定代理的 todos
175
- */
176
143
  clearAgentTodos(agentId) {
177
144
  if (agentId !== exports.MAIN_AGENT_ID) {
178
145
  this.todosMap.delete(agentId);
179
146
  (0, log_1.logInfo)(`[${agentId}] todos已清理`);
180
147
  }
181
148
  }
182
- /**
183
- * 智能更新 todos 列表
184
- * 如果传入的 todos 都有 id 且是现有 todos 的子集,则进行子集更新,否则进行完全替换
185
- */
186
149
  updateTodosIntelligently(newTodos, agentId = exports.MAIN_AGENT_ID) {
187
150
  const currentTodos = this.todosMap.get(agentId) || [];
188
151
  if (newTodos.length === 0) {
189
- // 空数组直接替换
190
152
  this.todosMap.set(agentId, newTodos);
191
153
  (0, log_1.logInfo)(`[${agentId}] todos完全替换: ${newTodos.length} 项`);
192
- // 只有主代理才发送事件
193
154
  if (agentId === exports.MAIN_AGENT_ID) {
194
155
  this.emitTodosUpdateEvent(newTodos);
195
156
  }
196
157
  return;
197
158
  }
198
- // 检查是否为子集更新
199
159
  const isSubsetUpdate = newTodos.every(todo => todo.id && currentTodos.some(existing => existing.id === todo.id));
200
160
  if (isSubsetUpdate && currentTodos.length > 0) {
201
- // 子集更新:更新现有 todos 中匹配的项
202
161
  const updatedTodos = currentTodos.map(existing => {
203
162
  const update = newTodos.find(todo => todo.id === existing.id);
204
163
  return update || existing;
205
164
  });
206
165
  this.todosMap.set(agentId, updatedTodos);
207
166
  (0, log_1.logInfo)(`[${agentId}] todos子集更新: ${newTodos.length} 项更新,总共 ${updatedTodos.length} 项`);
208
- // 只有主代理才发送事件
209
167
  if (agentId === exports.MAIN_AGENT_ID) {
210
168
  this.emitTodosUpdateEvent(newTodos);
211
169
  }
212
170
  }
213
171
  else {
214
- // 完全替换:有新的 id 或没有 id 的情况
215
172
  this.todosMap.set(agentId, newTodos);
216
173
  (0, log_1.logInfo)(`[${agentId}] todos完全替换: ${newTodos.length} 项`);
217
- // 只有主代理才发送事件
218
174
  if (agentId === exports.MAIN_AGENT_ID) {
219
175
  this.emitTodosUpdateEvent(newTodos);
220
176
  }
221
177
  }
222
178
  }
223
- /**
224
- * 发送 todos 更新事件
225
- */
226
179
  emitTodosUpdateEvent(todos) {
227
- const eventBus = (0, EventSystem_1.getEventBus)();
228
- eventBus.emit('todos:update', todos);
180
+ (0, EventSystem_1.getEventBus)().emit('todos:update', todos, this.sessionId);
229
181
  }
230
182
  // ============================================================
231
183
  // TodoTask CRUD(按代理隔离)
@@ -240,7 +192,6 @@ class StateManager {
240
192
  }
241
193
  createTodoTask(agentId, task) {
242
194
  const tasks = this.getTodoTasks(agentId);
243
- // 递增数字编号:取当前最大 id + 1
244
195
  const maxId = tasks.reduce((max, t) => Math.max(max, parseInt(t.id, 10) || 0), 0);
245
196
  const id = String(maxId + 1);
246
197
  const now = Date.now();
@@ -253,7 +204,7 @@ class StateManager {
253
204
  updatedAt: now,
254
205
  };
255
206
  tasks.push(newTask);
256
- (0, log_1.logInfo)(`[${agentId}] TodoTask created: ${id} "${task.subject}"`);
207
+ (0, log_1.logInfo)(`[${agentId}] TodoTask created: ${id} "${task.title}"`);
257
208
  this.syncTodoTasksToTodos(agentId);
258
209
  return id;
259
210
  }
@@ -268,26 +219,14 @@ class StateManager {
268
219
  const task = tasks.find(t => t.id === taskId);
269
220
  if (!task)
270
221
  return undefined;
271
- if (updates.subject !== undefined)
272
- task.subject = updates.subject;
222
+ if (updates.title !== undefined)
223
+ task.title = updates.title;
273
224
  if (updates.description !== undefined)
274
225
  task.description = updates.description;
275
226
  if (updates.status !== undefined)
276
227
  task.status = updates.status;
277
- if (updates.activeForm !== undefined)
278
- task.activeForm = updates.activeForm;
279
- if (updates.metadata !== undefined) {
280
- const merged = { ...(task.metadata ?? {}) };
281
- for (const [key, value] of Object.entries(updates.metadata)) {
282
- if (value === null) {
283
- delete merged[key];
284
- }
285
- else {
286
- merged[key] = value;
287
- }
288
- }
289
- task.metadata = merged;
290
- }
228
+ if (updates.progressText !== undefined)
229
+ task.progressText = updates.progressText;
291
230
  task.updatedAt = Date.now();
292
231
  (0, log_1.logInfo)(`[${agentId}] TodoTask updated: ${taskId} fields=[${Object.keys(updates).join(',')}]`);
293
232
  this.syncTodoTasksToTodos(agentId);
@@ -299,7 +238,6 @@ class StateManager {
299
238
  if (idx === -1)
300
239
  return false;
301
240
  tasks.splice(idx, 1);
302
- // 清理其他任务中对被删任务的引用
303
241
  for (const t of tasks) {
304
242
  t.blocks = t.blocks.filter(id => id !== taskId);
305
243
  t.blockedBy = t.blockedBy.filter(id => id !== taskId);
@@ -308,17 +246,12 @@ class StateManager {
308
246
  this.syncTodoTasksToTodos(agentId);
309
247
  return true;
310
248
  }
311
- /**
312
- * 建立阻塞关系:fromId 阻塞 toId(toId 需等待 fromId 完成)
313
- * 双向写入保持一致性
314
- */
315
249
  blockTask(agentId, fromId, toId) {
316
250
  const tasks = this.getTodoTasks(agentId);
317
251
  const fromTask = tasks.find(t => t.id === fromId);
318
252
  const toTask = tasks.find(t => t.id === toId);
319
253
  if (!fromTask || !toTask)
320
254
  return false;
321
- // 去重追加
322
255
  if (!fromTask.blocks.includes(toId)) {
323
256
  fromTask.blocks.push(toId);
324
257
  fromTask.updatedAt = Date.now();
@@ -331,11 +264,7 @@ class StateManager {
331
264
  this.syncTodoTasksToTodos(agentId);
332
265
  return true;
333
266
  }
334
- /**
335
- * 从持久化数据恢复 TodoTask 列表(主代理)
336
- */
337
267
  restoreTodoTasks(tasks) {
338
- // 兼容旧数据:补充 blocks/blockedBy 默认值
339
268
  const normalized = tasks.map(t => ({
340
269
  ...t,
341
270
  blocks: t.blocks ?? [],
@@ -344,17 +273,14 @@ class StateManager {
344
273
  this.todoTasksMap.set(exports.MAIN_AGENT_ID, normalized);
345
274
  (0, log_1.logInfo)(`TodoTasks restored: ${tasks.length} 项`);
346
275
  }
347
- /**
348
- * 从旧版 TodoItem 格式恢复为 TodoTask(兼容旧历史数据)
349
- */
350
276
  restoreTodoTasksFromLegacy(todos) {
351
277
  const now = Date.now();
352
- const tasks = todos.map((todo, index) => ({
278
+ const tasks = todos.map((todo) => ({
353
279
  id: todo.id || crypto.randomBytes(4).toString('hex'),
354
- subject: todo.content,
355
- description: todo.content,
280
+ title: todo.title,
281
+ description: todo.title,
356
282
  status: todo.status,
357
- activeForm: todo.activeForm || todo.content,
283
+ progressText: todo.progressText || todo.title,
358
284
  blocks: [],
359
285
  blockedBy: [],
360
286
  createdAt: now,
@@ -363,12 +289,8 @@ class StateManager {
363
289
  this.todoTasksMap.set(exports.MAIN_AGENT_ID, tasks);
364
290
  (0, log_1.logInfo)(`TodoTasks restored from legacy todos: ${tasks.length} 项`);
365
291
  }
366
- /**
367
- * 将 TodoTask 列表同步到 todosMap 并触发 UI 更新事件
368
- */
369
292
  syncTodoTasksToTodos(agentId) {
370
293
  const tasks = this.getTodoTasks(agentId);
371
- // 排序:completed > in_progress > pending;pending 中被阻塞的排最后
372
294
  const statusOrder = { completed: 0, in_progress: 1, pending: 2 };
373
295
  const completedIds = new Set(tasks.filter(t => t.status === 'completed').map(t => t.id));
374
296
  const sorted = [...tasks].sort((a, b) => {
@@ -376,7 +298,6 @@ class StateManager {
376
298
  const ob = statusOrder[b.status] ?? 3;
377
299
  if (oa !== ob)
378
300
  return oa - ob;
379
- // 同为 pending 时,被阻塞(且阻塞者未完成)的排后面
380
301
  if (a.status === 'pending' && b.status === 'pending') {
381
302
  const aBlocked = a.blockedBy.some(id => !completedIds.has(id));
382
303
  const bBlocked = b.blockedBy.some(id => !completedIds.has(id));
@@ -387,9 +308,9 @@ class StateManager {
387
308
  });
388
309
  const todos = sorted.map(t => ({
389
310
  id: t.id,
390
- content: t.subject,
311
+ title: t.title,
391
312
  status: t.status,
392
- activeForm: t.activeForm || t.subject,
313
+ progressText: t.progressText || t.title,
393
314
  }));
394
315
  this.todosMap.set(agentId, todos);
395
316
  if (agentId === exports.MAIN_AGENT_ID) {
@@ -399,9 +320,6 @@ class StateManager {
399
320
  // ============================================================
400
321
  // 代理状态管理(按代理隔离)
401
322
  // ============================================================
402
- /**
403
- * 获取代理状态
404
- */
405
323
  getAgentState(agentId) {
406
324
  let state = this.statesMap.get(agentId);
407
325
  if (!state) {
@@ -416,18 +334,13 @@ class StateManager {
416
334
  */
417
335
  updateState(newState, agentId = exports.MAIN_AGENT_ID) {
418
336
  const agentState = this.getAgentState(agentId);
419
- // 添加调试日志
420
- (0, log_1.logInfo)(`updateState: agentId=${agentId}, current=${agentState.currentState}, new=${newState}, sessionId=${this.sessionId}`);
337
+ (0, log_1.logInfo)(`updateState: sessionId=${this.sessionId}, agentId=${agentId}, current=${agentState.currentState}, new=${newState}`);
421
338
  if (agentState.currentState !== newState) {
422
339
  agentState.previousState = agentState.currentState;
423
340
  agentState.currentState = newState;
424
- // 只有主代理才发送全局状态更新事件(直接使用 eventBus,参见方法注释)
425
341
  if (agentId === exports.MAIN_AGENT_ID) {
426
- const eventBus = (0, EventSystem_1.getEventBus)();
427
- const stateData = {
428
- state: newState
429
- };
430
- eventBus.emit('state:update', stateData);
342
+ const stateData = { state: newState };
343
+ (0, EventSystem_1.getEventBus)().emit('state:update', stateData, this.sessionId);
431
344
  (0, log_1.logInfo)(`状态更新: ${agentState.previousState} → ${newState}`);
432
345
  }
433
346
  else {
@@ -438,14 +351,11 @@ class StateManager {
438
351
  (0, log_1.logInfo)(`updateState: 状态未变化`);
439
352
  }
440
353
  }
441
- /**
442
- * 获取当前状态
443
- */
444
354
  getCurrentState(agentId = exports.MAIN_AGENT_ID) {
445
355
  return this.getAgentState(agentId).currentState;
446
356
  }
447
357
  // ============================================================
448
- // 前台 Agent 管理(共享状态)
358
+ // 前台 Agent 管理(会话级)
449
359
  // ============================================================
450
360
  addForegroundAgent(taskId) {
451
361
  this.foregroundAgents.add(taskId);
@@ -460,24 +370,14 @@ class StateManager {
460
370
  this.foregroundAgents.clear();
461
371
  }
462
372
  // ============================================================
463
- // 待处理用户输入队列管理(共享状态)
373
+ // 待处理用户输入队列管理(会话级)
464
374
  // ============================================================
465
- /**
466
- * 添加待处理输入到队列末尾
467
- */
468
375
  addPendingUserInput(item) {
469
376
  this.pendingUserInputs.push(item);
470
377
  }
471
- /**
472
- * 获取待处理输入队列长度
473
- */
474
378
  getPendingUserInputsLength() {
475
379
  return this.pendingUserInputs.length;
476
380
  }
477
- /**
478
- * 从队头连续取 inject 类型,遇到 command 停止
479
- * 取出的从队列移除,command 及之后保留
480
- */
481
381
  consumeInjectInputsBeforeNextCommand() {
482
382
  const result = [];
483
383
  while (this.pendingUserInputs.length > 0 &&
@@ -486,38 +386,36 @@ class StateManager {
486
386
  }
487
387
  return result;
488
388
  }
489
- /**
490
- * 消费全部剩余输入并清空队列
491
- */
492
389
  consumeAllPendingInputs() {
493
390
  return this.pendingUserInputs.splice(0);
494
391
  }
495
- /**
496
- * 清空待处理输入队列
497
- */
498
392
  clearPendingUserInputs() {
499
393
  this.pendingUserInputs = [];
500
394
  }
395
+ // ============================================================
396
+ // 清理
397
+ // ============================================================
501
398
  /**
502
- * 清空所有状态数据
399
+ * 清空本会话所有状态数据
503
400
  */
504
401
  clearAllState() {
505
- // 清空所有隔离状态的 Map
506
402
  this.statesMap.clear();
507
403
  this.messageHistoryMap.clear();
508
404
  this.readFileTimestampsMap.clear();
509
405
  this.todosMap.clear();
510
406
  this.todoTasksMap.clear();
511
- // 重置共享状态
407
+ this.fileLineEndingsMap.clear();
512
408
  this.currentAbortController = null;
409
+ this.systemPromptContent = null;
513
410
  this.globalEditPermissionGranted = false;
514
411
  this.planModeInfoSent = false;
412
+ this.designModeInfoSent = false;
515
413
  this.foregroundAgents.clear();
516
414
  this.clearPendingUserInputs();
517
- (0, log_1.logInfo)(`所有状态数据已清空`);
415
+ (0, log_1.logInfo)(`[${this.sessionId}] 所有状态数据已清空`);
518
416
  }
519
417
  /**
520
- * 清理指定代理的所有隔离状态
418
+ * 清理指定子代理的所有隔离状态
521
419
  */
522
420
  clearAgentState(agentId) {
523
421
  if (agentId !== exports.MAIN_AGENT_ID) {
@@ -526,6 +424,7 @@ class StateManager {
526
424
  this.readFileTimestampsMap.delete(agentId);
527
425
  this.todosMap.delete(agentId);
528
426
  this.todoTasksMap.delete(agentId);
427
+ this.fileLineEndingsMap.delete(agentId);
529
428
  (0, log_1.logInfo)(`[${agentId}] 所有隔离状态已清理`);
530
429
  }
531
430
  }
@@ -539,9 +438,8 @@ class StateManager {
539
438
  const todoTasks = this.listTodoTasks(exports.MAIN_AGENT_ID);
540
439
  const readFileTimestamps = this.getReadFileTimestamps(exports.MAIN_AGENT_ID);
541
440
  const workingDir = (0, ConfManager_1.getConfManager)().getCoreConfig()?.workingDir;
542
- if (this.sessionId && messageHistory.length > 0) {
441
+ if (messageHistory.length > 0) {
543
442
  await (0, history_1.saveHistory)(this.sessionId, messageHistory, todos, workingDir, readFileTimestamps, todoTasks);
544
- // logInfo(`saveHistory: ${JSON.stringify(messageHistory, null, 2)}`)
545
443
  (0, log_1.logInfo)(`会话历史已保存: ${this.sessionId}`);
546
444
  }
547
445
  }
@@ -549,47 +447,76 @@ class StateManager {
549
447
  (0, log_1.logInfo)(`保存会话历史失败: ${error instanceof Error ? error.message : String(error)}`);
550
448
  }
551
449
  }
552
- /**
553
- * 获取全局编辑权限状态
554
- */
450
+ // ============================================================
451
+ // 全局编辑权限(会话级)
452
+ // ============================================================
555
453
  hasGlobalEditPermission() {
556
454
  return this.globalEditPermissionGranted;
557
455
  }
558
- /**
559
- * 授予全局编辑权限
560
- */
561
456
  grantGlobalEditPermission() {
457
+ if (this.globalEditPermissionGranted)
458
+ return;
562
459
  this.globalEditPermissionGranted = true;
563
- (0, log_1.logInfo)('全局编辑权限已授予');
460
+ (0, log_1.logInfo)(`[${this.sessionId}] 全局编辑权限已授予`);
461
+ this.emitAutoEditUpdate(true);
564
462
  }
565
463
  /**
566
- * 检查 Plan 模式信息是否已发送
464
+ * 设置自动编辑状态(仅在 skipFileEditPermission 为 false 时生效)
567
465
  */
466
+ updateAutoEdit(enable) {
467
+ const coreConfig = (0, ConfManager_1.getConfManager)().getCoreConfig();
468
+ if (coreConfig?.skipFileEditPermission)
469
+ return;
470
+ if (this.globalEditPermissionGranted === enable)
471
+ return;
472
+ this.globalEditPermissionGranted = enable;
473
+ (0, log_1.logInfo)(`[${this.sessionId}] 自动编辑已${enable ? '开启' : '关闭'}`);
474
+ this.emitAutoEditUpdate(enable);
475
+ }
476
+ emitAutoEditUpdate(enable) {
477
+ const data = { enable };
478
+ (0, EventSystem_1.getEventBus)().emit('autoEdit:update', data, this.sessionId);
479
+ }
480
+ // ============================================================
481
+ // Plan / Design 模式信息发送标记(会话级)
482
+ // ============================================================
568
483
  isPlanModeInfoSent() {
569
484
  return this.planModeInfoSent;
570
485
  }
571
- /**
572
- * 标记 Plan 模式信息已发送
573
- */
574
486
  markPlanModeInfoSent() {
575
487
  this.planModeInfoSent = true;
576
- (0, log_1.logInfo)('Plan 模式信息已标记为已发送');
488
+ (0, log_1.logInfo)(`[${this.sessionId}] Plan 模式信息已标记为已发送`);
577
489
  }
578
- /**
579
- * 重置 Plan 模式信息发送状态
580
- */
581
490
  resetPlanModeInfoSent() {
582
491
  this.planModeInfoSent = false;
583
- (0, log_1.logInfo)('Plan 模式信息发送状态已重置');
492
+ (0, log_1.logInfo)(`[${this.sessionId}] Plan 模式信息发送状态已重置`);
493
+ }
494
+ isDesignModeInfoSent() {
495
+ return this.designModeInfoSent;
496
+ }
497
+ markDesignModeInfoSent() {
498
+ this.designModeInfoSent = true;
499
+ (0, log_1.logInfo)(`[${this.sessionId}] Design 模式信息已标记为已发送`);
500
+ }
501
+ resetDesignModeInfoSent() {
502
+ this.designModeInfoSent = false;
503
+ (0, log_1.logInfo)(`[${this.sessionId}] Design 模式信息发送状态已重置`);
504
+ }
505
+ // ============================================================
506
+ // 系统提示快照(会话级,整会话不变)
507
+ // ============================================================
508
+ getSystemPromptContent() {
509
+ return this.systemPromptContent;
510
+ }
511
+ setSystemPromptContent(content) {
512
+ this.systemPromptContent = content;
584
513
  }
585
514
  /**
586
515
  * 为指定 agentId 创建状态访问代理对象
587
- * 返回一个封装了该 agentId 所有状态操作的对象
588
516
  */
589
517
  forAgent(agentId) {
590
518
  const isSubagent = agentId !== exports.MAIN_AGENT_ID;
591
519
  return {
592
- // Todos 管理
593
520
  getTodos: () => this.getTodos(agentId),
594
521
  setTodos: (todos) => this.setTodos(todos, agentId),
595
522
  updateTodosIntelligently: (todos) => this.updateTodosIntelligently(todos, agentId),
@@ -598,7 +525,6 @@ class StateManager {
598
525
  this.clearAgentTodos(agentId);
599
526
  }
600
527
  },
601
- // 消息历史管理
602
528
  getMessageHistory: () => this.getMessageHistory(agentId),
603
529
  setMessageHistory: (messages, skipAutoSave) => this.setMessageHistory(messages, agentId, skipAutoSave),
604
530
  finalizeMessages: (messages) => {
@@ -606,22 +532,20 @@ class StateManager {
606
532
  this.updateState('idle', agentId);
607
533
  },
608
534
  flushHistory: () => this.saveSessionHistory(),
609
- // 文件读取时间戳管理
610
535
  getReadFileTimestamps: () => this.getReadFileTimestamps(agentId),
611
536
  getReadFileTimestamp: (filePath) => this.getReadFileTimestamp(filePath, agentId),
612
537
  setReadFileTimestamp: (filePath, timestamp) => this.setReadFileTimestamp(filePath, timestamp, agentId),
613
538
  setReadFileTimestamps: (timestamps) => this.setReadFileTimestamps(timestamps, agentId),
614
- // 状态管理
539
+ getFileLineEnding: (filePath) => this.getFileLineEnding(filePath, agentId),
540
+ setFileLineEnding: (filePath, ending) => this.setFileLineEnding(filePath, ending, agentId),
615
541
  getCurrentState: () => this.getCurrentState(agentId),
616
542
  updateState: (state) => this.updateState(state, agentId),
617
- // TodoTask CRUD
618
543
  createTodoTask: (task) => this.createTodoTask(agentId, task),
619
544
  getTodoTask: (taskId) => this.getTodoTask(agentId, taskId),
620
545
  listTodoTasks: () => this.listTodoTasks(agentId),
621
546
  updateTodoTask: (taskId, updates) => this.updateTodoTask(agentId, taskId, updates),
622
547
  deleteTodoTask: (taskId) => this.deleteTodoTask(agentId, taskId),
623
548
  blockTask: (fromId, toId) => this.blockTask(agentId, fromId, toId),
624
- // 清理
625
549
  clearAllState: () => {
626
550
  if (isSubagent) {
627
551
  this.clearAgentState(agentId);
@@ -630,6 +554,82 @@ class StateManager {
630
554
  };
631
555
  }
632
556
  }
557
+ exports.SessionRuntime = SessionRuntime;
558
+ /**
559
+ * 全局状态管理器(单例注册表)
560
+ * 按 sessionId 持有多个 SessionRuntime
561
+ */
562
+ class StateManager {
563
+ constructor() {
564
+ this.sessions = new Map();
565
+ /** UI 层当前打开的活跃会话(多会话共存时由 UI 指定,用于通知兜底投递) */
566
+ this.activeSessionId = null;
567
+ }
568
+ static getInstance() {
569
+ if (!StateManager.instance) {
570
+ StateManager.instance = new StateManager();
571
+ }
572
+ return StateManager.instance;
573
+ }
574
+ /**
575
+ * 获取(不存在则创建)指定会话的运行时
576
+ */
577
+ session(sessionId) {
578
+ let runtime = this.sessions.get(sessionId);
579
+ if (!runtime) {
580
+ runtime = new SessionRuntime(sessionId);
581
+ this.sessions.set(sessionId, runtime);
582
+ (0, log_1.logInfo)(`SessionRuntime 已创建: ${sessionId}`);
583
+ }
584
+ return runtime;
585
+ }
586
+ /**
587
+ * 从 AgentContext 直接取得代理状态访问器
588
+ */
589
+ forAgent(ctx) {
590
+ return this.session(ctx.sessionId).forAgent(ctx.agentId);
591
+ }
592
+ hasSession(sessionId) {
593
+ return this.sessions.has(sessionId);
594
+ }
595
+ /** 设置 UI 层当前活跃会话 */
596
+ setActiveSession(sessionId) {
597
+ this.activeSessionId = sessionId;
598
+ }
599
+ /** 获取 UI 层当前活跃会话(未设置或已关闭则为 null) */
600
+ getActiveSessionId() {
601
+ return this.activeSessionId;
602
+ }
603
+ /**
604
+ * 移除单个会话的全部状态(会话级 dispose)
605
+ */
606
+ removeSession(sessionId) {
607
+ const runtime = this.sessions.get(sessionId);
608
+ if (runtime) {
609
+ runtime.clearAllState();
610
+ this.sessions.delete(sessionId);
611
+ (0, log_1.logInfo)(`SessionRuntime 已移除: ${sessionId}`);
612
+ }
613
+ // 活跃会话被关闭:清空,等待 UI 指定新的活跃会话
614
+ if (this.activeSessionId === sessionId) {
615
+ this.activeSessionId = null;
616
+ }
617
+ }
618
+ /**
619
+ * 清空所有会话(进程级 dispose)
620
+ */
621
+ clearAll() {
622
+ for (const runtime of this.sessions.values()) {
623
+ runtime.clearAllState();
624
+ }
625
+ this.sessions.clear();
626
+ this.activeSessionId = null;
627
+ (0, log_1.logInfo)(`所有会话状态数据已清空`);
628
+ }
629
+ getSessionIds() {
630
+ return Array.from(this.sessions.keys());
631
+ }
632
+ }
633
633
  exports.StateManager = StateManager;
634
634
  StateManager.instance = null;
635
635
  /**