@zooique/memora 2.0.3 → 3.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 (588) hide show
  1. package/CHANGELOG.md +1037 -0
  2. package/README.en.md +305 -272
  3. package/README.md +303 -260
  4. package/config.example.json +43 -0
  5. package/dist/agent/agent.d.ts +376 -408
  6. package/dist/agent/agent.d.ts.map +1 -1
  7. package/dist/agent/agent.js +1166 -926
  8. package/dist/agent/agent.js.map +1 -1
  9. package/dist/agent/assembler.d.ts +105 -43
  10. package/dist/agent/assembler.d.ts.map +1 -1
  11. package/dist/agent/assembler.js +543 -75
  12. package/dist/agent/assembler.js.map +1 -1
  13. package/dist/agent/budget.d.ts +131 -0
  14. package/dist/agent/budget.d.ts.map +1 -0
  15. package/dist/agent/budget.js +128 -0
  16. package/dist/agent/budget.js.map +1 -0
  17. package/dist/agent/builtinToolHandlers.d.ts +225 -38
  18. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  19. package/dist/agent/builtinToolHandlers.js +748 -132
  20. package/dist/agent/builtinToolHandlers.js.map +1 -1
  21. package/dist/agent/builtinTools.d.ts +198 -7
  22. package/dist/agent/builtinTools.d.ts.map +1 -1
  23. package/dist/agent/builtinTools.js +646 -14
  24. package/dist/agent/builtinTools.js.map +1 -1
  25. package/dist/agent/compaction.d.ts +93 -0
  26. package/dist/agent/compaction.d.ts.map +1 -0
  27. package/dist/agent/compaction.js +192 -0
  28. package/dist/agent/compaction.js.map +1 -0
  29. package/dist/agent/constants.d.ts +137 -20
  30. package/dist/agent/constants.d.ts.map +1 -1
  31. package/dist/agent/constants.js +152 -20
  32. package/dist/agent/constants.js.map +1 -1
  33. package/dist/agent/contextManager.d.ts +119 -77
  34. package/dist/agent/contextManager.d.ts.map +1 -1
  35. package/dist/agent/contextManager.js +192 -135
  36. package/dist/agent/contextManager.js.map +1 -1
  37. package/dist/agent/contextPreparer.d.ts +78 -0
  38. package/dist/agent/contextPreparer.d.ts.map +1 -0
  39. package/dist/agent/contextPreparer.js +128 -0
  40. package/dist/agent/contextPreparer.js.map +1 -0
  41. package/dist/agent/duplicateInterceptor.d.ts +67 -0
  42. package/dist/agent/duplicateInterceptor.d.ts.map +1 -0
  43. package/dist/agent/duplicateInterceptor.js +82 -0
  44. package/dist/agent/duplicateInterceptor.js.map +1 -0
  45. package/dist/agent/guardRail.d.ts +166 -0
  46. package/dist/agent/guardRail.d.ts.map +1 -0
  47. package/dist/agent/guardRail.js +333 -0
  48. package/dist/agent/guardRail.js.map +1 -0
  49. package/dist/agent/loop.d.ts +716 -295
  50. package/dist/agent/loop.d.ts.map +1 -1
  51. package/dist/agent/loop.js +2178 -664
  52. package/dist/agent/loop.js.map +1 -1
  53. package/dist/agent/managers/archiveCoordinator.d.ts +14 -171
  54. package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
  55. package/dist/agent/managers/archiveCoordinator.js +19 -287
  56. package/dist/agent/managers/archiveCoordinator.js.map +1 -1
  57. package/dist/agent/managers/chatLockManager.d.ts +20 -88
  58. package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
  59. package/dist/agent/managers/chatLockManager.js +31 -103
  60. package/dist/agent/managers/chatLockManager.js.map +1 -1
  61. package/dist/agent/managers/dedupManager.d.ts +31 -115
  62. package/dist/agent/managers/dedupManager.d.ts.map +1 -1
  63. package/dist/agent/managers/dedupManager.js +48 -136
  64. package/dist/agent/managers/dedupManager.js.map +1 -1
  65. package/dist/agent/managers/goalConsistencyChecker.d.ts +42 -0
  66. package/dist/agent/managers/goalConsistencyChecker.d.ts.map +1 -0
  67. package/dist/agent/managers/goalConsistencyChecker.js +178 -0
  68. package/dist/agent/managers/goalConsistencyChecker.js.map +1 -0
  69. package/dist/agent/managers/llmCaller.d.ts +124 -0
  70. package/dist/agent/managers/llmCaller.d.ts.map +1 -0
  71. package/dist/agent/managers/llmCaller.js +417 -0
  72. package/dist/agent/managers/llmCaller.js.map +1 -0
  73. package/dist/agent/managers/llmJudgeHelper.d.ts +8 -25
  74. package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -1
  75. package/dist/agent/managers/llmJudgeHelper.js +7 -24
  76. package/dist/agent/managers/llmJudgeHelper.js.map +1 -1
  77. package/dist/agent/managers/loopMetrics.d.ts +58 -0
  78. package/dist/agent/managers/loopMetrics.d.ts.map +1 -0
  79. package/dist/agent/managers/loopMetrics.js +68 -0
  80. package/dist/agent/managers/loopMetrics.js.map +1 -0
  81. package/dist/agent/managers/memoryAdvisor.d.ts +27 -120
  82. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
  83. package/dist/agent/managers/memoryAdvisor.js +85 -207
  84. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  85. package/dist/agent/managers/memoryGovernance.d.ts +10 -42
  86. package/dist/agent/managers/memoryGovernance.d.ts.map +1 -1
  87. package/dist/agent/managers/memoryGovernance.js +19 -36
  88. package/dist/agent/managers/memoryGovernance.js.map +1 -1
  89. package/dist/agent/managers/memoryInspector.d.ts +59 -268
  90. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  91. package/dist/agent/managers/memoryInspector.js +91 -442
  92. package/dist/agent/managers/memoryInspector.js.map +1 -1
  93. package/dist/agent/managers/roundSummaryGenerator.d.ts +56 -0
  94. package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -0
  95. package/dist/agent/managers/roundSummaryGenerator.js +201 -0
  96. package/dist/agent/managers/roundSummaryGenerator.js.map +1 -0
  97. package/dist/agent/managers/sessionArchiver.d.ts +19 -68
  98. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  99. package/dist/agent/managers/sessionArchiver.js +76 -147
  100. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  101. package/dist/agent/managers/sessionManager.d.ts +286 -57
  102. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  103. package/dist/agent/managers/sessionManager.js +846 -85
  104. package/dist/agent/managers/sessionManager.js.map +1 -1
  105. package/dist/agent/managers/sessionNamer.d.ts +35 -0
  106. package/dist/agent/managers/sessionNamer.d.ts.map +1 -0
  107. package/dist/agent/managers/sessionNamer.js +104 -0
  108. package/dist/agent/managers/sessionNamer.js.map +1 -0
  109. package/dist/agent/managers/streamAccumulator.d.ts +8 -33
  110. package/dist/agent/managers/streamAccumulator.d.ts.map +1 -1
  111. package/dist/agent/managers/streamAccumulator.js +4 -29
  112. package/dist/agent/managers/streamAccumulator.js.map +1 -1
  113. package/dist/agent/managers/textPolishManager.d.ts +8 -44
  114. package/dist/agent/managers/textPolishManager.d.ts.map +1 -1
  115. package/dist/agent/managers/textPolishManager.js +9 -41
  116. package/dist/agent/managers/textPolishManager.js.map +1 -1
  117. package/dist/agent/managers/toolCallHelpers.d.ts +105 -0
  118. package/dist/agent/managers/toolCallHelpers.d.ts.map +1 -0
  119. package/dist/agent/managers/toolCallHelpers.js +161 -0
  120. package/dist/agent/managers/toolCallHelpers.js.map +1 -0
  121. package/dist/agent/managers/workProjection.d.ts +55 -100
  122. package/dist/agent/managers/workProjection.d.ts.map +1 -1
  123. package/dist/agent/managers/workProjection.js +164 -268
  124. package/dist/agent/managers/workProjection.js.map +1 -1
  125. package/dist/agent/messageHistory.d.ts +134 -84
  126. package/dist/agent/messageHistory.d.ts.map +1 -1
  127. package/dist/agent/messageHistory.js +419 -133
  128. package/dist/agent/messageHistory.js.map +1 -1
  129. package/dist/agent/needsPlanning.d.ts +28 -0
  130. package/dist/agent/needsPlanning.d.ts.map +1 -0
  131. package/dist/agent/needsPlanning.js +68 -0
  132. package/dist/agent/needsPlanning.js.map +1 -0
  133. package/dist/agent/seed/index.d.ts +11 -0
  134. package/dist/agent/seed/index.d.ts.map +1 -0
  135. package/dist/agent/seed/index.js +10 -0
  136. package/dist/agent/seed/index.js.map +1 -0
  137. package/dist/agent/seed/orchestrator.d.ts +83 -0
  138. package/dist/agent/seed/orchestrator.d.ts.map +1 -0
  139. package/dist/agent/seed/orchestrator.js +260 -0
  140. package/dist/agent/seed/orchestrator.js.map +1 -0
  141. package/dist/agent/seed/prepare.d.ts +49 -0
  142. package/dist/agent/seed/prepare.d.ts.map +1 -0
  143. package/dist/agent/seed/prepare.js +107 -0
  144. package/dist/agent/seed/prepare.js.map +1 -0
  145. package/dist/agent/seed/types.d.ts +115 -0
  146. package/dist/agent/seed/types.d.ts.map +1 -0
  147. package/dist/agent/seed/types.js +15 -0
  148. package/dist/agent/seed/types.js.map +1 -0
  149. package/dist/agent/sessionStateMachine.d.ts +78 -0
  150. package/dist/agent/sessionStateMachine.d.ts.map +1 -0
  151. package/dist/agent/sessionStateMachine.js +182 -0
  152. package/dist/agent/sessionStateMachine.js.map +1 -0
  153. package/dist/agent/taskTableRenderer.d.ts +51 -0
  154. package/dist/agent/taskTableRenderer.d.ts.map +1 -0
  155. package/dist/agent/taskTableRenderer.js +115 -0
  156. package/dist/agent/taskTableRenderer.js.map +1 -0
  157. package/dist/agent/toolExecutor.d.ts +236 -10
  158. package/dist/agent/toolExecutor.d.ts.map +1 -1
  159. package/dist/agent/toolExecutor.js +932 -21
  160. package/dist/agent/toolExecutor.js.map +1 -1
  161. package/dist/agent/toolLedger.d.ts +120 -0
  162. package/dist/agent/toolLedger.d.ts.map +1 -0
  163. package/dist/agent/toolLedger.js +149 -0
  164. package/dist/agent/toolLedger.js.map +1 -0
  165. package/dist/agent/toolResultCache.d.ts +134 -0
  166. package/dist/agent/toolResultCache.d.ts.map +1 -0
  167. package/dist/agent/toolResultCache.js +243 -0
  168. package/dist/agent/toolResultCache.js.map +1 -0
  169. package/dist/agent/toolResultOffload.d.ts +59 -0
  170. package/dist/agent/toolResultOffload.d.ts.map +1 -0
  171. package/dist/agent/toolResultOffload.js +70 -0
  172. package/dist/agent/toolResultOffload.js.map +1 -0
  173. package/dist/agent/toolRunner.d.ts +59 -0
  174. package/dist/agent/toolRunner.d.ts.map +1 -0
  175. package/dist/agent/toolRunner.js +147 -0
  176. package/dist/agent/toolRunner.js.map +1 -0
  177. package/dist/agent/tracer.d.ts +99 -107
  178. package/dist/agent/tracer.d.ts.map +1 -1
  179. package/dist/agent/tracer.js +24 -69
  180. package/dist/agent/tracer.js.map +1 -1
  181. package/dist/agent/types.d.ts +510 -169
  182. package/dist/agent/types.d.ts.map +1 -1
  183. package/dist/agent/types.js +2 -51
  184. package/dist/agent/types.js.map +1 -1
  185. package/dist/code-exec/codeExecutionProvider.d.ts +16 -0
  186. package/dist/code-exec/codeExecutionProvider.d.ts.map +1 -0
  187. package/dist/code-exec/codeExecutionProvider.js +57 -0
  188. package/dist/code-exec/codeExecutionProvider.js.map +1 -0
  189. package/dist/code-exec/types.d.ts +37 -0
  190. package/dist/code-exec/types.d.ts.map +1 -0
  191. package/dist/code-exec/types.js +12 -0
  192. package/dist/code-exec/types.js.map +1 -0
  193. package/dist/config/expandEnvVars.d.ts +22 -0
  194. package/dist/config/expandEnvVars.d.ts.map +1 -0
  195. package/dist/config/expandEnvVars.js +38 -0
  196. package/dist/config/expandEnvVars.js.map +1 -0
  197. package/dist/config/loader.d.ts +27 -98
  198. package/dist/config/loader.d.ts.map +1 -1
  199. package/dist/config/loader.js +110 -223
  200. package/dist/config/loader.js.map +1 -1
  201. package/dist/index.d.ts +67 -77
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +90 -69
  204. package/dist/index.js.map +1 -1
  205. package/dist/llm/abortSignal.d.ts +2 -3
  206. package/dist/llm/abortSignal.d.ts.map +1 -1
  207. package/dist/llm/abortSignal.js +2 -3
  208. package/dist/llm/abortSignal.js.map +1 -1
  209. package/dist/llm/factory.d.ts +22 -32
  210. package/dist/llm/factory.d.ts.map +1 -1
  211. package/dist/llm/factory.js +29 -46
  212. package/dist/llm/factory.js.map +1 -1
  213. package/dist/llm/openaiCompatible.d.ts +25 -40
  214. package/dist/llm/openaiCompatible.d.ts.map +1 -1
  215. package/dist/llm/openaiCompatible.js +179 -120
  216. package/dist/llm/openaiCompatible.js.map +1 -1
  217. package/dist/llm/provider.d.ts +29 -42
  218. package/dist/llm/provider.d.ts.map +1 -1
  219. package/dist/llm/provider.js +11 -10
  220. package/dist/llm/provider.js.map +1 -1
  221. package/dist/llm/types.d.ts +54 -11
  222. package/dist/llm/types.d.ts.map +1 -1
  223. package/dist/llm/types.js +0 -5
  224. package/dist/llm/types.js.map +1 -1
  225. package/dist/logging/logger.d.ts +8 -31
  226. package/dist/logging/logger.d.ts.map +1 -1
  227. package/dist/logging/logger.js +28 -215
  228. package/dist/logging/logger.js.map +1 -1
  229. package/dist/logging/loggerInterface.d.ts +9 -8
  230. package/dist/logging/loggerInterface.d.ts.map +1 -1
  231. package/dist/memory/gcService.d.ts +164 -0
  232. package/dist/memory/gcService.d.ts.map +1 -0
  233. package/dist/memory/gcService.js +215 -0
  234. package/dist/memory/gcService.js.map +1 -0
  235. package/dist/memory/governance.d.ts +11 -44
  236. package/dist/memory/governance.d.ts.map +1 -1
  237. package/dist/memory/governance.js +11 -64
  238. package/dist/memory/governance.js.map +1 -1
  239. package/dist/memory/inMemoryRoundStore.d.ts +124 -0
  240. package/dist/memory/inMemoryRoundStore.d.ts.map +1 -0
  241. package/dist/memory/inMemoryRoundStore.js +216 -0
  242. package/dist/memory/inMemoryRoundStore.js.map +1 -0
  243. package/dist/memory/inMemorySessionStore.d.ts +92 -0
  244. package/dist/memory/inMemorySessionStore.d.ts.map +1 -0
  245. package/dist/memory/inMemorySessionStore.js +219 -0
  246. package/dist/memory/inMemorySessionStore.js.map +1 -0
  247. package/dist/memory/inMemorySessionViewLoader.d.ts +89 -0
  248. package/dist/memory/inMemorySessionViewLoader.d.ts.map +1 -0
  249. package/dist/memory/inMemorySessionViewLoader.js +183 -0
  250. package/dist/memory/inMemorySessionViewLoader.js.map +1 -0
  251. package/dist/memory/inMemoryStorage.d.ts +25 -175
  252. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  253. package/dist/memory/inMemoryStorage.js +32 -221
  254. package/dist/memory/inMemoryStorage.js.map +1 -1
  255. package/dist/memory/keywordsTouch.d.ts +20 -0
  256. package/dist/memory/keywordsTouch.d.ts.map +1 -0
  257. package/dist/memory/keywordsTouch.js +25 -0
  258. package/dist/memory/keywordsTouch.js.map +1 -0
  259. package/dist/memory/lockManager.d.ts +2 -2
  260. package/dist/memory/lockManager.d.ts.map +1 -1
  261. package/dist/memory/lockManager.js +6 -8
  262. package/dist/memory/lockManager.js.map +1 -1
  263. package/dist/memory/projectManager.d.ts +30 -129
  264. package/dist/memory/projectManager.d.ts.map +1 -1
  265. package/dist/memory/projectManager.js +39 -189
  266. package/dist/memory/projectManager.js.map +1 -1
  267. package/dist/memory/projectRegistry.d.ts +14 -62
  268. package/dist/memory/projectRegistry.d.ts.map +1 -1
  269. package/dist/memory/projectRegistry.js +27 -111
  270. package/dist/memory/projectRegistry.js.map +1 -1
  271. package/dist/memory/roundStore.d.ts +629 -0
  272. package/dist/memory/roundStore.d.ts.map +1 -0
  273. package/dist/memory/roundStore.js +116 -0
  274. package/dist/memory/roundStore.js.map +1 -0
  275. package/dist/memory/sessionStore.d.ts +70 -61
  276. package/dist/memory/sessionStore.d.ts.map +1 -1
  277. package/dist/memory/sessionStore.js +23 -1
  278. package/dist/memory/sessionStore.js.map +1 -1
  279. package/dist/memory/sessionViewLoader.d.ts +141 -0
  280. package/dist/memory/sessionViewLoader.d.ts.map +1 -0
  281. package/dist/memory/sessionViewLoader.js +65 -0
  282. package/dist/memory/sessionViewLoader.js.map +1 -0
  283. package/dist/memory/sourceValidation.d.ts +10 -12
  284. package/dist/memory/sourceValidation.d.ts.map +1 -1
  285. package/dist/memory/sourceValidation.js +16 -32
  286. package/dist/memory/sourceValidation.js.map +1 -1
  287. package/dist/memory/storageInterface.d.ts +44 -150
  288. package/dist/memory/storageInterface.d.ts.map +1 -1
  289. package/dist/memory/types.d.ts +65 -164
  290. package/dist/memory/types.d.ts.map +1 -1
  291. package/dist/memory/types.js +81 -83
  292. package/dist/memory/types.js.map +1 -1
  293. package/dist/project-search/projectSearchProvider.d.ts +29 -0
  294. package/dist/project-search/projectSearchProvider.d.ts.map +1 -0
  295. package/dist/project-search/projectSearchProvider.js +57 -0
  296. package/dist/project-search/projectSearchProvider.js.map +1 -0
  297. package/dist/project-search/terms.d.ts +14 -0
  298. package/dist/project-search/terms.d.ts.map +1 -0
  299. package/dist/project-search/terms.js +68 -0
  300. package/dist/project-search/terms.js.map +1 -0
  301. package/dist/project-search/types.d.ts +139 -0
  302. package/dist/project-search/types.d.ts.map +1 -0
  303. package/dist/project-search/types.js +8 -0
  304. package/dist/project-search/types.js.map +1 -0
  305. package/dist/role-pack/capabilityMap.d.ts +28 -0
  306. package/dist/role-pack/capabilityMap.d.ts.map +1 -0
  307. package/dist/role-pack/capabilityMap.js +56 -0
  308. package/dist/role-pack/capabilityMap.js.map +1 -0
  309. package/dist/role-pack/constants.d.ts +21 -0
  310. package/dist/role-pack/constants.d.ts.map +1 -0
  311. package/dist/role-pack/constants.js +21 -0
  312. package/dist/role-pack/constants.js.map +1 -0
  313. package/dist/role-pack/rolePackManager.d.ts +269 -0
  314. package/dist/role-pack/rolePackManager.d.ts.map +1 -0
  315. package/dist/role-pack/rolePackManager.js +1082 -0
  316. package/dist/role-pack/rolePackManager.js.map +1 -0
  317. package/dist/role-pack/strategyKeys.d.ts +100 -0
  318. package/dist/role-pack/strategyKeys.d.ts.map +1 -0
  319. package/dist/role-pack/strategyKeys.js +184 -0
  320. package/dist/role-pack/strategyKeys.js.map +1 -0
  321. package/dist/role-pack/strategyResolver.d.ts +109 -0
  322. package/dist/role-pack/strategyResolver.d.ts.map +1 -0
  323. package/dist/role-pack/strategyResolver.js +304 -0
  324. package/dist/role-pack/strategyResolver.js.map +1 -0
  325. package/dist/role-pack/types.d.ts +237 -0
  326. package/dist/role-pack/types.d.ts.map +1 -0
  327. package/dist/role-pack/types.js +8 -0
  328. package/dist/role-pack/types.js.map +1 -0
  329. package/dist/role-pack/validator.d.ts +38 -0
  330. package/dist/role-pack/validator.d.ts.map +1 -0
  331. package/dist/role-pack/validator.js +436 -0
  332. package/dist/role-pack/validator.js.map +1 -0
  333. package/dist/security/pathGuard.d.ts +69 -72
  334. package/dist/security/pathGuard.d.ts.map +1 -1
  335. package/dist/security/pathGuard.js +151 -131
  336. package/dist/security/pathGuard.js.map +1 -1
  337. package/dist/skill/skillLayer3.d.ts +91 -0
  338. package/dist/skill/skillLayer3.d.ts.map +1 -0
  339. package/dist/skill/skillLayer3.js +104 -0
  340. package/dist/skill/skillLayer3.js.map +1 -0
  341. package/dist/skill/skillManager.d.ts +136 -19
  342. package/dist/skill/skillManager.d.ts.map +1 -1
  343. package/dist/skill/skillManager.js +312 -61
  344. package/dist/skill/skillManager.js.map +1 -1
  345. package/dist/skill/skillScriptRunner.d.ts +97 -0
  346. package/dist/skill/skillScriptRunner.d.ts.map +1 -0
  347. package/dist/skill/skillScriptRunner.js +271 -0
  348. package/dist/skill/skillScriptRunner.js.map +1 -0
  349. package/dist/skill/types.d.ts +73 -16
  350. package/dist/skill/types.d.ts.map +1 -1
  351. package/dist/skill/types.js +5 -1
  352. package/dist/skill/types.js.map +1 -1
  353. package/dist/utils/array.d.ts +5 -6
  354. package/dist/utils/array.d.ts.map +1 -1
  355. package/dist/utils/array.js +6 -6
  356. package/dist/utils/array.js.map +1 -1
  357. package/dist/utils/atomicWrite.d.ts +8 -0
  358. package/dist/utils/atomicWrite.d.ts.map +1 -0
  359. package/dist/utils/atomicWrite.js +31 -0
  360. package/dist/utils/atomicWrite.js.map +1 -0
  361. package/dist/utils/backgroundTask.d.ts +38 -0
  362. package/dist/utils/backgroundTask.d.ts.map +1 -0
  363. package/dist/utils/backgroundTask.js +117 -0
  364. package/dist/utils/backgroundTask.js.map +1 -0
  365. package/dist/utils/configResourceManager.d.ts +40 -72
  366. package/dist/utils/configResourceManager.d.ts.map +1 -1
  367. package/dist/utils/configResourceManager.js +78 -76
  368. package/dist/utils/configResourceManager.js.map +1 -1
  369. package/dist/utils/errors.d.ts +44 -69
  370. package/dist/utils/errors.d.ts.map +1 -1
  371. package/dist/utils/errors.js +54 -71
  372. package/dist/utils/errors.js.map +1 -1
  373. package/dist/utils/eventEmitter.d.ts +104 -103
  374. package/dist/utils/eventEmitter.d.ts.map +1 -1
  375. package/dist/utils/eventEmitter.js +37 -45
  376. package/dist/utils/eventEmitter.js.map +1 -1
  377. package/dist/utils/fileSafe.d.ts +20 -0
  378. package/dist/utils/fileSafe.d.ts.map +1 -0
  379. package/dist/utils/fileSafe.js +56 -0
  380. package/dist/utils/fileSafe.js.map +1 -0
  381. package/dist/utils/frontmatter.d.ts +2 -3
  382. package/dist/utils/frontmatter.d.ts.map +1 -1
  383. package/dist/utils/frontmatter.js +2 -3
  384. package/dist/utils/frontmatter.js.map +1 -1
  385. package/dist/utils/hash.d.ts +12 -0
  386. package/dist/utils/hash.d.ts.map +1 -0
  387. package/dist/utils/hash.js +27 -0
  388. package/dist/utils/hash.js.map +1 -0
  389. package/dist/utils/http.d.ts +17 -0
  390. package/dist/utils/http.d.ts.map +1 -0
  391. package/dist/utils/http.js +29 -0
  392. package/dist/utils/http.js.map +1 -0
  393. package/dist/utils/json.d.ts +1 -1
  394. package/dist/utils/json.js +1 -1
  395. package/dist/utils/math.d.ts +25 -3
  396. package/dist/utils/math.d.ts.map +1 -1
  397. package/dist/utils/math.js +32 -16
  398. package/dist/utils/math.js.map +1 -1
  399. package/dist/utils/objects.d.ts +2 -3
  400. package/dist/utils/objects.d.ts.map +1 -1
  401. package/dist/utils/objects.js +2 -3
  402. package/dist/utils/objects.js.map +1 -1
  403. package/dist/utils/recallDefaults.d.ts +16 -0
  404. package/dist/utils/recallDefaults.d.ts.map +1 -0
  405. package/dist/utils/recallDefaults.js +16 -0
  406. package/dist/utils/recallDefaults.js.map +1 -0
  407. package/dist/utils/safeTimer.d.ts +8 -36
  408. package/dist/utils/safeTimer.d.ts.map +1 -1
  409. package/dist/utils/safeTimer.js +9 -37
  410. package/dist/utils/safeTimer.js.map +1 -1
  411. package/dist/utils/scanner.d.ts +97 -17
  412. package/dist/utils/scanner.d.ts.map +1 -1
  413. package/dist/utils/scanner.js +269 -47
  414. package/dist/utils/scanner.js.map +1 -1
  415. package/dist/utils/segmenter.d.ts +20 -19
  416. package/dist/utils/segmenter.d.ts.map +1 -1
  417. package/dist/utils/segmenter.js +230 -97
  418. package/dist/utils/segmenter.js.map +1 -1
  419. package/dist/utils/strings.d.ts +15 -32
  420. package/dist/utils/strings.d.ts.map +1 -1
  421. package/dist/utils/strings.js +25 -44
  422. package/dist/utils/strings.js.map +1 -1
  423. package/dist/utils/time.d.ts +37 -0
  424. package/dist/utils/time.d.ts.map +1 -1
  425. package/dist/utils/time.js +56 -0
  426. package/dist/utils/time.js.map +1 -1
  427. package/dist/utils/toError.d.ts +13 -1
  428. package/dist/utils/toError.d.ts.map +1 -1
  429. package/dist/utils/toError.js +18 -1
  430. package/dist/utils/toError.js.map +1 -1
  431. package/dist/web-fetch/fetchWebFetchProvider.d.ts +14 -0
  432. package/dist/web-fetch/fetchWebFetchProvider.d.ts.map +1 -0
  433. package/dist/web-fetch/fetchWebFetchProvider.js +69 -0
  434. package/dist/web-fetch/fetchWebFetchProvider.js.map +1 -0
  435. package/dist/web-fetch/types.d.ts +30 -0
  436. package/dist/web-fetch/types.d.ts.map +1 -0
  437. package/dist/web-fetch/types.js +7 -0
  438. package/dist/web-fetch/types.js.map +1 -0
  439. package/dist/web-fetch/webFetchProvider.d.ts +10 -0
  440. package/dist/web-fetch/webFetchProvider.d.ts.map +1 -0
  441. package/dist/web-fetch/webFetchProvider.js +28 -0
  442. package/dist/web-fetch/webFetchProvider.js.map +1 -0
  443. package/dist/web-search/fetchWebSearchProvider.d.ts +27 -0
  444. package/dist/web-search/fetchWebSearchProvider.d.ts.map +1 -0
  445. package/dist/web-search/fetchWebSearchProvider.js +199 -0
  446. package/dist/web-search/fetchWebSearchProvider.js.map +1 -0
  447. package/dist/web-search/types.d.ts +46 -0
  448. package/dist/web-search/types.d.ts.map +1 -0
  449. package/dist/web-search/types.js +2 -0
  450. package/dist/{persona → web-search}/types.js.map +1 -1
  451. package/dist/web-search/webSearchProvider.d.ts +10 -0
  452. package/dist/web-search/webSearchProvider.d.ts.map +1 -0
  453. package/dist/web-search/webSearchProvider.js +30 -0
  454. package/dist/web-search/webSearchProvider.js.map +1 -0
  455. package/docs/architecture/role-pack-authoring-guide.md +243 -0
  456. package/docs/architecture/role-pack-spec.md +767 -0
  457. package/docs/memora-api-reference.md +416 -476
  458. package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +841 -806
  459. package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -0
  460. package/package.json +105 -100
  461. package/role-packs/README.md +41 -0
  462. package/role-packs/memora/345/212/251/346/211/213/manifest.json +12 -0
  463. package/role-packs/memora/345/212/251/346/211/213/persona.md +12 -0
  464. package/role-packs/memora/345/212/251/346/211/213/rules.md +4 -0
  465. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +44 -0
  466. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +46 -0
  467. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +15 -0
  468. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/character-sheet.md +34 -0
  469. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/core-extractor.md +37 -0
  470. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/craft-review.md +69 -0
  471. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/dialogue-craft.md +45 -0
  472. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -0
  473. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/empathy-craft.md +79 -0
  474. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -0
  475. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/hotspot-mapping.md +121 -0
  476. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/idea-lever.md +42 -0
  477. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/logline-craft.md +47 -0
  478. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/longform-guard.md +64 -0
  479. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/need-finder.md +40 -0
  480. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +46 -0
  481. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pacing-hook.md +34 -0
  482. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/polish-method.md +113 -0
  483. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pov-discipline.md +79 -0
  484. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/SKILL.md +112 -0
  485. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/scripts/init-novel-project.mjs +441 -0
  486. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/relationship-web.md +47 -0
  487. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/scene-craft.md +46 -0
  488. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +60 -0
  489. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-structure.md +36 -0
  490. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/style-weaver.md +109 -0
  491. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/three-layer-check.md +27 -0
  492. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/world-builder.md +41 -0
  493. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/manifest.json +48 -0
  494. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/persona.md +73 -0
  495. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/rules.md +19 -0
  496. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/api-doc-writer.md +40 -0
  497. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/doc-planner.md +42 -0
  498. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/nutrient-search.md +28 -0
  499. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/seed-finder.md +28 -0
  500. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/ssot-audit.md +34 -0
  501. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/style-guide.md +40 -0
  502. package/dist/agent/guardrail.d.ts +0 -49
  503. package/dist/agent/guardrail.d.ts.map +0 -1
  504. package/dist/agent/guardrail.js +0 -59
  505. package/dist/agent/guardrail.js.map +0 -1
  506. package/dist/agent/managers/autoConfigRefiner.d.ts +0 -39
  507. package/dist/agent/managers/autoConfigRefiner.d.ts.map +0 -1
  508. package/dist/agent/managers/autoConfigRefiner.js +0 -146
  509. package/dist/agent/managers/autoConfigRefiner.js.map +0 -1
  510. package/dist/agent/managers/configManager.d.ts +0 -209
  511. package/dist/agent/managers/configManager.d.ts.map +0 -1
  512. package/dist/agent/managers/configManager.js +0 -331
  513. package/dist/agent/managers/configManager.js.map +0 -1
  514. package/dist/agent/managers/insightExtractor.d.ts +0 -139
  515. package/dist/agent/managers/insightExtractor.d.ts.map +0 -1
  516. package/dist/agent/managers/insightExtractor.js +0 -401
  517. package/dist/agent/managers/insightExtractor.js.map +0 -1
  518. package/dist/agent/managers/memoryDecayScheduler.d.ts +0 -239
  519. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +0 -1
  520. package/dist/agent/managers/memoryDecayScheduler.js +0 -413
  521. package/dist/agent/managers/memoryDecayScheduler.js.map +0 -1
  522. package/dist/agent/managers/relationBuilder.d.ts +0 -131
  523. package/dist/agent/managers/relationBuilder.d.ts.map +0 -1
  524. package/dist/agent/managers/relationBuilder.js +0 -192
  525. package/dist/agent/managers/relationBuilder.js.map +0 -1
  526. package/dist/agent/personaMatcher.d.ts +0 -29
  527. package/dist/agent/personaMatcher.d.ts.map +0 -1
  528. package/dist/agent/personaMatcher.js +0 -60
  529. package/dist/agent/personaMatcher.js.map +0 -1
  530. package/dist/agent/userFactExtractor.d.ts +0 -25
  531. package/dist/agent/userFactExtractor.d.ts.map +0 -1
  532. package/dist/agent/userFactExtractor.js +0 -88
  533. package/dist/agent/userFactExtractor.js.map +0 -1
  534. package/dist/eval/evalRunner.d.ts +0 -94
  535. package/dist/eval/evalRunner.d.ts.map +0 -1
  536. package/dist/eval/evalRunner.js +0 -141
  537. package/dist/eval/evalRunner.js.map +0 -1
  538. package/dist/eval/evalTypes.d.ts +0 -148
  539. package/dist/eval/evalTypes.d.ts.map +0 -1
  540. package/dist/eval/evalTypes.js +0 -118
  541. package/dist/eval/evalTypes.js.map +0 -1
  542. package/dist/eval/scenarios.d.ts +0 -33
  543. package/dist/eval/scenarios.d.ts.map +0 -1
  544. package/dist/eval/scenarios.js +0 -109
  545. package/dist/eval/scenarios.js.map +0 -1
  546. package/dist/llm/embedding.d.ts +0 -79
  547. package/dist/llm/embedding.d.ts.map +0 -1
  548. package/dist/llm/embedding.js +0 -184
  549. package/dist/llm/embedding.js.map +0 -1
  550. package/dist/memory/hybridMerge.d.ts +0 -50
  551. package/dist/memory/hybridMerge.d.ts.map +0 -1
  552. package/dist/memory/hybridMerge.js +0 -51
  553. package/dist/memory/hybridMerge.js.map +0 -1
  554. package/dist/memory/inMemoryRelationStore.d.ts +0 -58
  555. package/dist/memory/inMemoryRelationStore.d.ts.map +0 -1
  556. package/dist/memory/inMemoryRelationStore.js +0 -80
  557. package/dist/memory/inMemoryRelationStore.js.map +0 -1
  558. package/dist/memory/loader.d.ts +0 -51
  559. package/dist/memory/loader.d.ts.map +0 -1
  560. package/dist/memory/loader.js +0 -100
  561. package/dist/memory/loader.js.map +0 -1
  562. package/dist/memory/recall.d.ts +0 -82
  563. package/dist/memory/recall.d.ts.map +0 -1
  564. package/dist/memory/recall.js +0 -157
  565. package/dist/memory/recall.js.map +0 -1
  566. package/dist/memory/relationStore.d.ts +0 -95
  567. package/dist/memory/relationStore.d.ts.map +0 -1
  568. package/dist/memory/relationStore.js +0 -2
  569. package/dist/memory/relationStore.js.map +0 -1
  570. package/dist/memory/store.d.ts +0 -71
  571. package/dist/memory/store.d.ts.map +0 -1
  572. package/dist/memory/store.js +0 -199
  573. package/dist/memory/store.js.map +0 -1
  574. package/dist/memory/userProfile.d.ts +0 -180
  575. package/dist/memory/userProfile.d.ts.map +0 -1
  576. package/dist/memory/userProfile.js +0 -381
  577. package/dist/memory/userProfile.js.map +0 -1
  578. package/dist/memory/vectorStore.d.ts +0 -179
  579. package/dist/memory/vectorStore.d.ts.map +0 -1
  580. package/dist/memory/vectorStore.js +0 -284
  581. package/dist/memory/vectorStore.js.map +0 -1
  582. package/dist/persona/personaManager.d.ts +0 -109
  583. package/dist/persona/personaManager.d.ts.map +0 -1
  584. package/dist/persona/personaManager.js +0 -315
  585. package/dist/persona/personaManager.js.map +0 -1
  586. package/dist/persona/types.d.ts +0 -32
  587. package/dist/persona/types.d.ts.map +0 -1
  588. package/dist/persona/types.js +0 -5
@@ -1,54 +1,31 @@
1
1
  import type { AgentLoop } from '../agent/loop.js';
2
- import type { AgentChunk, ArchiveMode, AgentOptions, AgentContext } from '../agent/types.js';
2
+ import type { AgentChunk, ArchiveMode, AgentOptions, AgentContext, ToolExecutionRecord, SessionCheckpoint } from '../agent/types.js';
3
+ import type { InteractiveInputKind } from '../memory/roundStore.js';
3
4
  import type { ToolExecutor } from '../agent/toolExecutor.js';
4
5
  import type { MessageHistory } from '../agent/messageHistory.js';
5
6
  import { ProjectManager, type ProjectContext } from '../memory/projectManager.js';
6
7
  import { SecurityGuard } from '../security/pathGuard.js';
7
- import type { PersonaManager } from '../persona/personaManager.js';
8
- import type { UserProfile, UserProfileEntry } from '../memory/userProfile.js';
9
8
  import type { SkillManager } from '../skill/skillManager.js';
10
- import type { InsightExtractor } from '../agent/managers/insightExtractor.js';
9
+ import type { RolePackManager } from '../role-pack/rolePackManager.js';
10
+ import type { BehaviorStrategy } from '../role-pack/types.js';
11
11
  import type { SessionArchiveResult } from '../agent/managers/sessionArchiver.js';
12
12
  import type { TextPolishManager } from '../agent/managers/textPolishManager.js';
13
- import type { ConfigManager } from '../agent/managers/configManager.js';
14
13
  import type { WorkProjectionManager } from '../agent/managers/workProjection.js';
15
14
  import type { MemoryInspector } from '../agent/managers/memoryInspector.js';
16
- import { SessionManager, type AgentForkResult } from '../agent/managers/sessionManager.js';
15
+ import { type GCResult } from '../memory/gcService.js';
16
+ import type { SessionManager, AgentForkResult } from '../agent/managers/sessionManager.js';
17
17
  import { MemoryGovernance } from '../agent/managers/memoryGovernance.js';
18
18
  import { type ArchiveTriggerOptions } from '../agent/managers/archiveCoordinator.js';
19
19
  import { TypedEventEmitter, type AgentEventMap } from '../utils/eventEmitter.js';
20
20
  import type { LlmProvider, Message } from '../llm/provider.js';
21
- import type { Memory } from '../memory/types.js';
22
21
  import type { AgentMetrics } from '../agent/tracer.js';
22
+ import type { BackgroundTaskStats } from '../utils/backgroundTask.js';
23
23
  /**
24
24
  * Memora Agent 门面类
25
25
  *
26
- * **设计哲学**:单 Agent,单配置,单记忆。每个 Agent 实例拥有独立的
27
- * 对话管线(AgentLoop)、独立的消息历史(MessageHistory)和独立的
28
- * 运行时状态(chatBusy)。activeSkill 已移除——技能匹配改为当轮实时注入,无需跨轮状态缓存。
29
- *
30
- * **多实例**:宿主可通过 new Agent({ dataDir: './agent2' }) 创建
31
- * 独立实例。只要 dataDir 不同,它们拥有完全隔离的记忆库和会话。
32
- * 内核不负责多 Agent 编排——那是宿主层的职责。
33
- *
34
- * **fork vs 多实例**:
35
- * - forkSession() 分叉对话历史,但记忆索引全局共享
36
- * - new Agent() + 独立 dataDir 实现完全隔离的记忆空间
37
- *
38
- * @example
39
- * ```ts
40
- * const agent = new Agent({
41
- * projectPath: '/path/to/project',
42
- * provider: new OpenAIProvider({ apiKey: '...' }),
43
- * configDir: '/path/to/config',
44
- * dataDir: '/path/to/data',
45
- * permission: 'owner',
46
- * allowedPaths: ['/path/to/project'],
47
- * });
48
- * await agent.init();
49
- * const iter = agent.chat('你好');
50
- * for await (const chunk of iter) { ... }
51
- * ```
26
+ * 单 Agent,单配置,单记忆:每个实例拥有独立的对话管线、消息历史与运行时状态。
27
+ * 多实例只需 dataDir 不同即可彻底隔离记忆库与会话;forkSession() 分叉对话历史但记忆索引全局共享。
28
+ * skill 为当轮实时注入,不跨轮缓存。
52
29
  */
53
30
  export declare class Agent extends TypedEventEmitter<AgentEventMap> {
54
31
  #private;
@@ -56,68 +33,59 @@ export declare class Agent extends TypedEventEmitter<AgentEventMap> {
56
33
  private history;
57
34
  private loop;
58
35
  private toolExec;
59
- private personaManager;
60
36
  private skillManager;
61
- private insightExtractor;
62
- private configManager;
37
+ /** 角色包管理器(角色+技能+规则的唯一真理源) */
38
+ private _rolePackManager;
63
39
  private memoryInspector;
64
- /**
65
- * 语义去重管理器(L1 LLM 记忆治理)
66
- *
67
- * SPLIT-3 闭环(2026-07-21):从 MemoryInspector 拆分出 deduplicateMemories 职责,
68
- * 让 MemoryInspector 回归纯存储读写。Agent.deduplicateMemories() 委托本对象。
69
- */
70
- private dedupManager;
71
- /**
72
- * 记忆顾问(L3 冲突检测 / sourceHealth / suggest)
73
- *
74
- * v2 PROXY-1 闭环:Agent.detectConflicts 直接调用 advisor,
75
- * 不再经 MemoryInspector 转发,消除 3 层无意义代理。
76
- * sourceHealth/suggest 仍由 inspector 转发以保持 agent.memory 统一入口语义。
77
- */
78
- private memoryAdvisor;
79
40
  /** 记忆治理统一门面(L0/L1/L2/L3 + 诊断) */
80
41
  private _governance;
81
- private workProjection;
82
- /** AutoConfigRefiner(模式 3:Agent 智能总结) */
83
- private autoConfigRefiner;
84
- /** SessionArchiver(会话内容归档器,content 类记忆) */
85
- private sessionArchiver;
86
42
  /** TextPolishManager(文本润色管理器,LLM 语法修正 + 表达优化) */
87
43
  private textPolisher;
88
44
  /** 会话管理器(从 Agent 拆分出的会话管理职责) */
89
45
  private _sessionManager;
90
- private _initialized;
91
- private pctx;
46
+ /** WorkProjectionManager(作品投影极简 JSON 索引,宿主经 works getter 消费) */
47
+ private workProjection;
92
48
  /**
93
- * chat() 并发锁管理器(init 时创建,close 时销毁)
94
- *
95
- * 职责:chat() 并发锁 + token 校验(race condition 防护)+ 超时保护 + 外部 signal 合并。
96
- * 详见 ChatLockManager 类注释。
49
+ * 内部组件聚合对象——收敛 12 个「仅门面内部消费、不对宿主暴露」的专职组件,
50
+ * 减少门面扁平字段数;宿主 getter 契约字段(memory/works/polish 等)不在此列。
97
51
  */
98
- private chatLockManager;
52
+ private internals;
53
+ private _initialized;
54
+ private pctx;
99
55
  /** 最近一次 chat() 调用的时间戳 */
100
56
  private _lastInteractionAt;
101
57
  /**
102
- * 对话进行中暂存的配置重载请求集合(chatLock 释放后补执行)
103
- *
104
- * 场景:用户在对话中通过 create_persona / create_skill 工具创建配置,
105
- * reloadConfig 因 chatLock 冲突失败时,将 source 暂存于此。
106
- * chat() 的 finally 块释放锁后遍历此集合逐个补执行 reloadConfig,
107
- * 兑现"对话结束后自动加载"的承诺(见 tools.ts createConfigHandler 提示文案)。
108
- *
109
- * 用 Set 而非数组:同一 source 多次请求只需补执行一次(去重)。
58
+ * 流活跃标志:chat()/resumeExecution() 的 AsyncGenerator 生命周期内置 true、finally 置 false。
59
+ * 与 chatLock.isBusy(并发锁,180s 超时后自动释放但**不中断生成流**)语义解耦——
60
+ * requestPause 空闲守卫必须用「流是否在产出」而非「锁是否持有」判任务是否结束,
61
+ * 否则长任务运行超锁期后点暂停会被误判为「任务已结束」——锁超时会自动释放但生成流仍在跑,
62
+ * 故判据只能是流活跃,不能是锁持有。
63
+ */
64
+ private _flowActive;
65
+ /**
66
+ * 对话中因 chatLock 冲突暂存的配置重载请求(锁释放后补执行,兑现"对话后自动加载");
67
+ * 用 Set 去重——同一 source 只需补执行一次。
110
68
  */
111
69
  private pendingConfigReload;
112
- /** 记忆衰减调度器(init 时创建,close 时销毁) */
113
- private memoryDecayScheduler;
114
- /** 归档协调器(归档操作委托给 ArchiveCoordinator) */
115
- private archiveCoordinator;
116
70
  constructor(opts: AgentOptions);
117
71
  /**
118
72
  * 初始化 Agent:加载索引、组装内部组件
119
73
  */
120
74
  init(projectPathOverride?: string): Promise<ProjectContext>;
75
+ /**
76
+ * 登记作品投影实时刷新处理器:register_work 工具 / 右键登记成功后,
77
+ * 内核 WorkProjectionManager 触发 workProjectionGenerated 事件(携带已写入内存 entries 的投影),
78
+ * 立即重建 AgentLoop 的 systemPromptPrefix,使 AI 在下一轮对话即可感知新索引——
79
+ * 否则需切角色包 / reloadConfig / 开新会话才生效。
80
+ * 与 registerPauseTimeoutArchiver 同生命周期(init 内注册,close 的 removeAllListeners 兜底)。
81
+ */
82
+ private registerWorkProjectionRefresh;
83
+ /**
84
+ * 注册暂停超时归档处理器(SessionManager 两条超时路径——启动加载与运行时定时器——统一在此消费)
85
+ * 注册在 init() 内(close() 的 removeAllListeners + init 起始的 disposePreviousInstance 保证实例周期内恰好一个监听器),
86
+ * 挂在生命周期稳定的 Agent 上,rebuildComponents() 重建管理器后仍有效。
87
+ */
88
+ private registerPauseTimeoutArchiver;
121
89
  /**
122
90
  * 关闭旧实例(如果已初始化),失败不阻塞重建
123
91
  */
@@ -134,6 +102,16 @@ export declare class Agent extends TypedEventEmitter<AgentEventMap> {
134
102
  * 创建 init() 后期组件(初始化完成后才需要的组件)
135
103
  */
136
104
  private createPostInitComponents;
105
+ /**
106
+ * 构造种子闭环编排器,注入门面稳定能力(getParts 快照 + 工具暴露 + 流收口协议)
107
+ *
108
+ * 构造偏好在 agent.ts 而非 assembler.ts(方案的"assembler 构造"):seed 依赖
109
+ * sessionNamer(post-init 才创建)与 consumeExecutionStream(门面私有流收口协议),
110
+ * 二者均无法在 assembler 阶段就绪,故收敛到 post-init 门面组装处。
111
+ *
112
+ * @returns 已接线门面能力的 SeedOrchestrator
113
+ */
114
+ private createSeedOrchestrator;
137
115
  /**
138
116
  * 流式对话(核心 API)
139
117
  */
@@ -146,15 +124,6 @@ export declare class Agent extends TypedEventEmitter<AgentEventMap> {
146
124
  * 获取对话锁 — 返回锁上下文
147
125
  */
148
126
  private acquireChatLock;
149
- /**
150
- * 准备对话上下文:角色匹配 → 记忆召回 → 技能注入 → 用户消息写历史
151
- * @returns 召回的记忆列表(供 loop.processUserInput 注入为 system 消息)
152
- */
153
- private prepareChatContext;
154
- /**
155
- * 执行 LLM 流式循环 → 追加助手消息 → 触发后处理
156
- */
157
- private executeChatLoop;
158
127
  /**
159
128
  * 补执行对话期间暂存的配置重载请求
160
129
  */
@@ -162,466 +131,465 @@ export declare class Agent extends TypedEventEmitter<AgentEventMap> {
162
131
  /**
163
132
  * 强制释放对话锁
164
133
  *
165
- * 场景:宿主主进程"无进展超时"兜底后,generator 可能仍卡在不可中断的 await 点
166
- * (executeToolCalls 和 generateContextSummary 已覆盖 signal 响应,但其他
167
- * 第三方库或未来新增的 await 点仍可能不响应 signal)。
168
- * 此时 _chatBusy 锁未释放,用户再发消息会被 chat() 的竞态保护拒绝,
169
- * 表现为"UI 能操作但发不出消息",需等到 3 分钟锁超时才能恢复。
170
- *
171
- * 本方法让宿主在确认 generator 挂起后强制释放锁,让用户能立即发起新对话。
172
- *
173
- * 安全机制(委托至 ChatLockManager.forceRelease):
174
- * - 递增 _chatLockToken,让原 chat() 的 finally 块检测到 token 不匹配后
175
- * 跳过资源清理(避免误清新调用者的 _chatBusy/chatAbortController)
176
- * - abort chatAbortController,让响应 signal 的 await 点(如 fetch)退出
177
- * - 原 generator 仍可能在后台运行(无法真正中断不响应 signal 的 await),
178
- * 但其 finally 块的 token 校验会阻止它影响新调用
179
- *
180
- * 幂等性:_chatBusy 已 false 时 no-op(多次调用安全)
181
- *
182
- * 使用约束:
183
- * - 仅在宿主确认 generator 挂起(如无进展超时)后调用
184
- * - 不应在常规 abort 路径调用(常规 abort 走 signal,generator 自然退出)
185
- * - 调用后不应再消费原 chat() generator 的后续 chunk(token 已变,chunk 无意义)
134
+ * 宿主在"无进展超时"确认 generator 挂起后调用,使用户能立即发起新对话(否则需等锁超时)。
135
+ * 安全机制委托 ChatLockManager.forceRelease:递增 token 让原 chat() 的 finally 跳过清理、abort signal 让响应点退出;
136
+ * 原 generator 仍可能后台运行但不影响新调用。幂等(未忙时 no-op)。
186
137
  */
187
138
  forceReleaseChatLock(): void;
188
139
  /**
189
- * 召回记忆 + 注入最近对话上下文
190
- *
191
- * 从 chat() 中提取,职责:
192
- * 1. 双通道召回(语义 + 关键词)
193
- * 2. Layer 5: 最近对话注入
194
- *
195
- * @param input 用户输入
196
- * @returns 召回的记忆列表
140
+ * 发送用户消息,非流式返回完整回复
197
141
  */
198
- private recallAndInject;
142
+ chatSync(input: string, signal?: AbortSignal): Promise<string>;
199
143
  /**
200
- * 匹配技能并立即注入本轮对话(当轮生效,不延迟到下一轮)
144
+ * 软暂停后续跑(不中断工作模型 v2.1)
201
145
  *
202
- * 与 persona 的 tryAutoMatchPersona 同模式:匹配 → 注入 → 本轮 LLM 即生效。
203
- * 原设计为 injectActiveSkill(注入上一轮匹配结果),导致用户说"写代码"的第一轮
204
- * 得不到技能增强,需再发一条消息才生效。已改为实时匹配注入。
146
+ * 翻状态机为 RUNNING(触发 sessionResumed → 宿主转发 STATUS{running}),
147
+ * 驱动 loop.continueAfterPause 续跑并转发 chunk,完成后追加历史 + 后处理(同 chat 尾处理)。
148
+ * 硬停止(signal.abort)仍是唯一霸道中止路径,与软暂停严格区分。
205
149
  *
206
- * 匹配策略:regex trigger 优先(score=1.0),其次关键词匹配(阈值 0.3)。
207
- * 清理机制:cleanTemporarySystemMessages() 每轮开头清除临时 system 消息,
208
- * 技能 prompt 自然不会累积到下一轮。
150
+ * 归属:补充输入归属当前问答闭环(复用 prepare 分配的闭环节点 roundId,不分裂新轮),
151
+ * 以 kind 区分交互类型(question-answer=主动提问回答 / supplement=暂停/流中补充)。
209
152
  *
210
- * @param input 用户输入文本
153
+ * @param input - 可选补充输入(空=续跑原路径;有=注入修正后续轮)
154
+ * @param signal - 可选 AbortSignal(硬停止仍走此路径)
155
+ * @param kind - 交互输入类型(默认 supplement;对主动提问的回答传 'question-answer')
211
156
  */
212
- private matchAndInjectSkill;
157
+ resumeExecution(input?: string, signal?: AbortSignal, kind?: InteractiveInputKind): AsyncGenerator<AgentChunk, void, unknown>;
213
158
  /**
214
- * 对话后处理:用户画像归档、角色匹配、技能匹配、Insight 提取
159
+ * 消费执行流的单一真理源
215
160
  *
216
- * 所有归档/匹配操作均为 best-effort:任何子步骤失败不应影响用户已收到的回答,
217
- * 失败仅记录日志,不向上抛出异常。
161
+ * chat() 与续跑(continueAfterPause)必须共用同一份消费逻辑——两份同构实现会漂移
162
+ * (实证:续跑漏 paused 分支导致三方分叉);收口于此,新增 chunk 类型只需改一处。
163
+ * 暂停幂等锁的释放放 finally——清理是"退出本作用域的不变式"而非某分支动作,新增 return 分支无遗漏。
218
164
  *
219
- * ADR-015 归档模式控制:
220
- * - 角色匹配 + 技能匹配不受 archiveMode 影响(每轮都执行,非归档行为)
221
- * - `manual` 模式跳过所有自动归档(profile + insight),需用户手动调用
222
- * archiveProfileFacts() / archiveInsight() 触发
223
- * - `full` / `insights-only` 模式下 profile + insight 都自动归档
224
- * (会话归档实现后,`insights-only` 将跳过对话原始内容自动归档)
165
+ * @returns 消费结果;failed 为 true 时调用方应立即 return(错误 chunk 已 yield)
225
166
  */
226
- private postProcess;
167
+ private consumeExecutionStream;
227
168
  /**
228
- * postProcess 内部实现(为 span 埋点提供 try/finally 包裹边界)
229
- *
230
- * 原 postProcess 逻辑完整保留于此,由外层 postProcess 负责 span 生命周期管理。
169
+ * 暂停会话(用户/Agent/系统均可触发,暂停前自动创建检查点)
170
+ * @param lowRisk 低风险暂停不计入连续暂停计数(默认 false)
231
171
  */
232
- private doPostProcess;
172
+ pause(reason: string, source?: 'user' | 'agent' | 'system', lowRisk?: boolean): boolean;
233
173
  /**
234
- * 发送用户消息,非流式返回完整回复
174
+ * 恢复会话(从 PAUSED 恢复到 RUNNING)
235
175
  */
236
- chatSync(input: string, signal?: AbortSignal): Promise<string>;
176
+ resume(): boolean;
237
177
  /**
238
- * 分叉当前会话(委托至 SessionManager)
178
+ * 自动恢复暂停状态(chat() 与续跑共用):
179
+ * ERROR 态直接 throw(拒绝,须先 recover 保持状态一致);PAUSED 态尝试自动恢复。
180
+ * 续跑(continueAfterPause)不走自动恢复,由独立的暂停恢复短路逻辑处理。
239
181
  *
240
- * 分叉后原会话完整保留,新分支拥有独立消息历史。
241
- * 记忆索引(IMemoryStorage)全局共享,不受分叉影响。
182
+ * @returns true=恢复成功或无需恢复;false=恢复失败(暂停超时等)
242
183
  */
243
- forkSession(targetSession?: string): AgentForkResult;
184
+ private autoResumeIfPaused;
244
185
  /**
245
- * 切换到指定项目
186
+ * 请求软暂停(不中断工作模型 v2.1)
246
187
  *
247
- * 切换后自动 rebuildComponents(),无需手动调用。
248
- * Agent 级记忆(memora.db)保留,项目级配置(.memora/)重新加载。
188
+ * 经 sm.requestPause 暂存 pending(SessionStateMachine 是 pending 真理源)+ loop.pauseRequested
189
+ * 入 interruptQueue(在下一 step 边界挂起,不 abort)。
190
+ * 状态机翻 PAUSED 延后到 loop 边界真正挂起时——内核事实驱动而非申请即翻转;与硬停止(abort)严格区分,
191
+ * 软暂停保留历史、可经 resumeExecution 续跑。
192
+ *
193
+ * @returns true=请求已注册(下一 step 边界生效);false=无法暂停
249
194
  */
250
- switchProject(nameOrPath: string): Promise<AgentContext>;
195
+ requestPause(reason: string, source?: 'user' | 'agent' | 'system'): boolean;
251
196
  /**
252
- * 组装所有运行时组件(委托给 assembler 工厂)
197
+ * 取消待处理的软暂停请求:清空 loop 的 pauseRequested 标志(与 requestPause 对称),
198
+ * 并同步清理 SessionStateMachine 的 pending 暂停状态。
253
199
  */
254
- private assembleComponents;
200
+ cancelPauseRequest(): void;
255
201
  /**
256
- * 用当前 pctx 重建 history / loop
202
+ * 是否存在待处理的暂停申请(申请已发、尚未在 loop 边界挂起)
203
+ *
204
+ * 供宿主 UI 区分三态:无申请(暂停)/ 申请在途(取消暂停)/ 已暂停(继续)。
205
+ * 状态真理源 SessionStateMachine.isPausePending():流中 requestPause 置位、边界挂起后 consumePendingPause 消费、
206
+ * cancelPauseRequest 主动清理;空闲态由 requestPause 空闲守卫作废(见上,return false 不触达状态机)——
207
+ * isPausePending 仅在流中「申请在途」时为 true(空闲态不翻 PAUSED)。
257
208
  */
258
- private rebuildComponentsWithCurrentCtx;
209
+ isPausePending(): boolean;
259
210
  /**
260
- * 创建会话管理器(提取重复的 forwardEvent + SessionManager 构造逻辑)
211
+ * 放弃当前暂停检查点(宿主 stop 语义的内核出口)
261
212
  *
262
- * assembleComponents 和 rebuildComponentsWithCurrentCtx 共享同一套构造逻辑:
263
- * - 通过回调访问当前组件(支持 rebuild 后自动获取最新引用)
264
- * - 事件转发桥接:SessionManager 使用宽类型 (string, Record<string,unknown>),
265
- * Agent 内部桥接到 TypedEventEmitter 的强类型 emit
266
- * - 运行时校验事件名是否在 AgentEventMap 中,避免不安全的类型断言
213
+ * 与 pause() 对称:pause 创建检查点;discardCurrentCheckpoint 销毁检查点。
214
+ * 宿主 handleStop 在 paused 态调用——用户决定彻底放弃暂停执行,不再 resume。
267
215
  *
268
- * @returns 新的 SessionManager 实例
216
+ * 除转发 SessionManager.discardCheckpoint(清内存 + 状态机 resetToRunning——检查点不落盘,无存储清理动作),
217
+ * 还须协同 loop.clearPendingInterjections() 清排队插话——pause 生效时 step 边界优先返回不消费 queue,
218
+ * 只清 checkpoint 会留孤儿 queue,下次 chat() 首个 step 误消费残留(坑)。
219
+ * 返回值以 checkpoint 清理为主(queue 有残留不判失败)。
220
+ * @returns true=成功清理;false=无暂停检查点(空闲态调了个空)
269
221
  */
270
- private createSessionManager;
271
- setProvider(provider: LlmProvider): void;
272
- setBackgroundProvider(provider: LlmProvider | null): void;
222
+ discardCurrentCheckpoint(): boolean;
273
223
  /**
274
- * 运行时切换归档模式
224
+ * 执行中插话(申请):把用户补充输入排队,当前 step 完成后在 step 边界统一注入为 user 消息。
275
225
  *
276
- * 与 setProvider 一致,对话进行中禁止切换(避免本轮 postProcess 行为不一致)。
226
+ * 与 requestPause(step 边界挂起待续跑)同为「申请 → 气口生效」——不中断当前 LLM/工具执行,
227
+ * 只在边界拿到补充输入后开始下一轮 step。插话是唯一写入口(interject → pendingInterjections 排队),
228
+ * 无「立即中断」模式:只有单一申请模式(无 inputInterrupt 立即中断通道)。
277
229
  *
278
- * @param mode 目标模式
230
+ * 归属:插话同时以「补充」交互输入持久化到当前闭环节点(interactiveInputs),
231
+ * 保证跨重启重放时插话内容不丢失、不分裂新轮。持久化 fire-and-forget(appendUser 内部
232
+ * 已 catch 写入失败,仅记日志),不阻塞插话本身。
279
233
  */
280
- setArchiveMode(mode: ArchiveMode): void;
234
+ interject(content: string): void;
281
235
  /**
282
- * 查询当前归档模式
283
- *
284
- * 宿主 UI(如设置面板)可据此同步显示当前模式。
236
+ * 删除待注入的插话(宿主 UI 层用户后悔)。与 interject 对称。
237
+ * 注意:interject 时已持久化到 history(交互输入归属),此处只从内核队列移除,不删除已落盘记录——
238
+ * 未来若需完整"撤回"需额外方案(如软删标记),当前先保证 step 边界不会注入已删除的补充。
239
+ * @param index 要删除的插话在队列中的位置(宿主镜像数组与内核队列同序同长度)
240
+ * @returns true=成功删除;false=index 越界或队列为空
285
241
  */
286
- getArchiveMode(): ArchiveMode;
242
+ removePendingInterject(index: number): boolean;
287
243
  /**
288
- * 手动切换角色(宿主 UI 角色选择器入口)
289
- *
290
- * 与 doPostProcess 中的自动匹配走同一条事件链路,确保:
291
- * 1. AgentLoop 的 systemPromptPrefix 立即刷新(下一次对话使用新角色 prompt)
292
- * 2. 发射 personaSwitched 事件,触发 spriteLifecycleManager 的完整副作用:
293
- * - emit('personaChanged') 通知宿主 UI
294
- * - proactiveEngine.addNotice('persona', ...) 记录通知
295
- * - perceptionCoordinator.refreshBeforeChat() 基于新角色 traits 重新推导情感基调
296
- *
297
- * 对话进行中切换角色会破坏当前 system prompt,与项目切换一致拒绝。
244
+ * 清空全部待注入插话(宿主「全部清空」按钮触发,或 stop→discard 协同清理)。
298
245
  *
299
- * @param name 目标角色名
300
- * @returns 切换成功返回新角色的 system prompt 段;角色不存在或切换失败返回 null
246
+ * 逻辑下沉 loop.clearPendingInterjections 原子方法——清队列唯一入口在内核,
247
+ * 宿主不维护队列镜像,避免镜像与内核双写不一致;discardCurrentCheckpoint 经同一方法协同清理。
248
+ * @returns 被清除的条目数(宿主可用于 notice 反馈;无队列时返回 0)
301
249
  */
302
- switchPersona(name: string): string | null;
250
+ clearPendingInterjections(): number;
303
251
  /**
304
- * 获取角色切换锁定状态(透传 PersonaManager,P0-2 用户体验打磨)
305
- *
306
- * 与 switchPersona 分离:switchPersona 仍返回 string | null 不变,
307
- * 锁定原因查询走独立路径,避免破坏既有契约(cli.ts、sprite.test.ts 等消费者无感)。
308
- *
309
- * 宿主 IPC 层调用此方法前置判断锁定状态,区分"切换失败"原因
310
- * (locked / busy / not_found / invalid),让用户知道为什么没反应。
311
- *
312
- * @returns locked 是否处于锁定状态;unlockAt 锁定自动恢复时间戳(ms epoch),未锁定时为 null
252
+ * 读取当前待注入插话队列快照(宿主渲染层只读镜像,不修改内核状态)。
253
+ * 返回副本,宿主无法暗改内核 queue;宿主渲染直接读本快照,不另维护队列镜像。
313
254
  */
314
- getPersonaSwitchLockStatus(): {
315
- locked: boolean;
316
- unlockAt: number | null;
317
- };
255
+ getPendingInterjections(): readonly string[];
318
256
  /**
319
- * 刷新 AgentLoop 的 systemPromptPrefix(角色 prompt + profile prompt)
320
- *
321
- * 提取自 doPostProcess 自动匹配 + switchPersona 手动切换两处共用逻辑(ADR-017 枝叶层 2 次提取)。
322
- * 组装规则:[personaPrompt, profilePrompt].filter(Boolean).join('\n\n') + 末尾分隔符 '---'
323
- *
324
- * 调用时机:
325
- * - tryAutoMatchPersona 中角色自动匹配成功后(chat() 回答前)
326
- * - switchPersona 手动切换成功后
327
- * - loop 为 null 时静默跳过(init 前或 close 后的边界场景)
257
+ * 放弃在途主动提问(ask_user 工具挂起后,宿主「跳过/取消提问」时调用):
258
+ * 委托 loop.cancelAsk 补占位 tool 结果(防 assistant.tool_calls 无配对 → 400),
259
+ * 随后 resumeExecution() 续跑。与 answerQuestion 二选一消费在途提问。
328
260
  */
329
- private refreshPersonaPrefixOnLoop;
261
+ cancelAsk(): void;
330
262
  /**
331
- * 角色自动匹配(best-effort:失败不阻塞对话流程)
263
+ * 回答在途主动提问(ask_user 工具):
264
+ * 答案以 ask_user 的 tool result 回填(与 assistant.tool_calls 配对,结构合法)。
265
+ * 调用后宿主以 resumeExecution(回答文本, undefined, 'question-answer') 续跑——
266
+ * 回答文本同时作为新 user 输入注入并记录为闭环节点交互输入(round 不分裂),
267
+ * 与既有续跑主流程一致(本方法只负责结构化回填,不做历史记录,避免双写)。
268
+ * 返回 false 表示无在途提问(提供方未调用 / 已消费)。
269
+ */
270
+ answerQuestion(answers: readonly string[]): boolean;
271
+ /**
272
+ * 追加计划任务项(SESSION_APPEND_TASK 落点):在现有 plan 末尾追加新任务项
273
+ */
274
+ appendPlanItem(description: string): number;
275
+ /**
276
+ * 卸载运行态挂载物:清空检查点计划与任务项推进日志(宿主任务流结束/停止/异常广播 idle 前调用),
277
+ * 回到"空闲 = 无挂载物"的资源层常态;会话历史与记忆等资源层内容不受影响。
278
+ */
279
+ clearPlan(): void;
280
+ /**
281
+ * turn 结束自动收尾:非暂停态 → 无条件 clearPlan(任务表收紧为 turn 内能力,不跨 turn 残留)。
332
282
  *
333
- * 在 chat() 回答前执行,确保本轮 LLM 调用就用匹配到的角色 system prompt。
334
- * 两层匹配策略:关键词高置信度 → LLM 辅助(低置信度且 backgroundProvider 已注入时)。
335
- * LLM 辅助匹配在 agent 层执行,遵循 backend_layers_rules §分层职责(persona/ 不直接调 LLM)。
283
+ * 任务表生命周期 = 单个 turn:LLM 在 turn 内编排并完成任务表;chat() 流退出(turn 真正结束)
284
+ * 时,无论任务项是否全部标记完成,都清空运行时挂载物(checkpoint.plan 与 planItemLog)。这样:
285
+ * ① 宏任务一个 turn 完不成 → 本 turn 结束兜底丢弃,下个 turn 由 LLM 重新规划全新任务表;
286
+ * ② 续跑轮(resumeExecution = ask_user 问答/暂停补充)是同一 turn 的闭环收尾,与 chat() 同构
287
+ * 走本方法——turn 真正结束即无条件清空,chat() 与续跑轮共用本收口点。
336
288
  *
337
- * 匹配成功时:切换角色 + 发射 personaSwitched 事件 + 刷新 AgentLoop 前缀。
338
- * 匹配失败/异常时:静默降级,保持当前角色。
289
+ * 唯一例外是暂停态(pauseMeta):turn 尚未真正结束,暂停恢复后要继续用 plan 推进,
290
+ * 故保留不清;恢复完成后该 turn 最终退出时仍会走本方法无条件清空。
339
291
  *
340
- * @param input 用户输入文本
292
+ * 运行时状态(plan/planItemLog)清空,但对话记录里的 round-block 折叠块已沉淀为历史(不落盘删除)。
293
+ * 挂点:chat() 与 resumeExecution 的 finally 块(generator close 时触发,确保所有 yield 已被宿主消费)
341
294
  */
342
- private tryAutoMatchPersona;
295
+ private clearPlanOnTurnEnd;
343
296
  /**
344
- * 判断是否应回退到默认角色
297
+ * 内核→宿主信号:当前会话是否可"无输入续跑"(决定暂停按钮显隐 + 暂停后继续 UI)
345
298
  *
346
- * 回退条件(全部满足):
347
- * 1. 当前激活角色不是默认角色(已在默认角色则无需回退)
348
- * 2. 角色管理器存在且非锁定状态(锁定时 switchPersona 也会被拦截,回退无意义)
299
+ * 真值条件:① 状态机已 paused(已软暂停必可续跑,最高优先级——pauseRequested 在下一 step 边界才挂起,
300
+ * 彼时 inAutonomousStep 已重置为 false,仅看它会误报);② loop 在自主工具步(可暴露暂停按钮在边界挂起);
301
+ * ③ 存在未完成的计划任务项(多轮任务可续跑下一轮)。三者皆否(纯单轮、无待续目标)→ 隐藏暂停按钮(仅停止)。
302
+ */
303
+ canContinueWithoutInput(): boolean;
304
+ /**
305
+ * 触发会话异常(公开 API,宿主显式调用):仅 RUNNING 状态可触发,异常时自动创建检查点保存状态。
306
+ * 生产内部无调用者——运行时异常(LLM 超时/工具失败)走 yield {type:'error'} 事件流不翻状态机;
307
+ * 本 API 供宿主在自定义异常(如外部服务故障)显式触发,或经检查点恢复回填进入 ERROR 态。
308
+ */
309
+ triggerError(cause: string): boolean;
310
+ /**
311
+ * 从异常恢复:校验恢复条件(error.recovered === true 且 cause 已解除)
312
+ */
313
+ recover(): boolean;
314
+ /**
315
+ * 创建会话检查点:快照当前运行时状态(热记忆等),生成纯内存态快照
316
+ * (不落盘、无序列化/恢复路径——中止/断电走「中断轮补全为完整 turn」)。
317
+ * 无 role/standard 会话能力位,createCheckpoint 仅收 mainGoal。
318
+ */
319
+ createCheckpoint(mainGoal?: string): SessionCheckpoint | null;
320
+ /**
321
+ * 获取当前检查点
322
+ */
323
+ getCheckpoint(): SessionCheckpoint | null;
324
+ /**
325
+ * 获取最近一次处理线程的工具执行历史(loop 域聚合出口,补待办 #3)
349
326
  *
350
- * 注意:bgProvider 未配置时也会触发回退——因为关键词 + LLM 均未命中说明当前角色不匹配本轮对话,
351
- * 回退默认角色比卡在错误角色上更合理。
327
+ * 数据源自 sessionManager 检查点的 completedToolCalls(已由
328
+ * AGENT_CONSTANTS.COMPLETED_TOOL_CALLS_MAX 做 FIFO 封顶)。本方法剥离「恢复/幂等」内部
329
+ * 语义,提供稳定的 execute 域只读契约——宿主可在透明面板/观测面消费本轮及历史的工具调用
330
+ * 明细(工具名 / 成败 / 结果摘要),与累计 AgentMetrics.tools 互补。
352
331
  *
353
- * @returns 是否应回退到默认角色
332
+ * @param limit 返回条数上限(默认取封顶上限,超界由调用方控制,取最近 limit 条)
333
+ * @returns 工具执行记录(记录顺序:时间正序即旧→新;无记录返回空数组;返回浅拷贝防宿主改动检查点)
354
334
  */
355
- private shouldFallbackToDefault;
335
+ getRecentToolExecutions(limit?: number): ToolExecutionRecord[];
356
336
  /**
357
- * 手动触发 profile facts 归档(manual 模式下使用)
337
+ * 向 loop 注入 system 消息
338
+ */
339
+ injectSystemMessage(message: string): void;
340
+ /**
341
+ * 从指定 Round 位置分叉当前会话(委托至 SessionManager):
342
+ * round-based 模式唯一分叉方式——创建新会话,复制 Round ID 列表(指针复制),
343
+ * 新会话是完全平等的普通会话。记忆索引全局共享不受影响。
358
344
  *
359
- * manual 模式下 postProcess 跳过自动归档,用户需通过此 API 主动归档。
360
- * full / insights-only 模式下也可调用(会重复归档,但不推荐)。
345
+ * 自动命名场景(未传 targetSession):分叉后异步触发 SessionNamer 为新会话生成标题
346
+ * (best-effort,不阻塞分叉返回);用户显式指定会话名时尊重用户命名,不触发 LLM 覆盖。
361
347
  *
362
- * FIX-P1-4:新增 options 参数透传给 ArchiveCoordinator。
363
- * 宿主自动触发时传 `{ autoTriggered: true }`,由 ArchiveCoordinator 内部按模式判断;
364
- * 用户手动触发时无需传 options(默认 autoTriggered=false,无条件执行)。
348
+ * @param roundId - 分叉点的 Round ID(可选;不传默认使用最后一个 Round)
349
+ * @param targetSession - 可选,自定义新会话名
350
+ */
351
+ forkSession(roundId?: string, targetSession?: string): AgentForkResult;
352
+ /**
353
+ * 分叉会话首轮命名(best-effort,fire-and-forget)
365
354
  *
366
- * 归档逻辑已委托给 ArchiveCoordinator
355
+ * 分叉新会话是平等普通会话,自动命名(未提供 targetSession)时应拥有 LLM 生成的语义标题。
356
+ * 取新会话第一个 Round 的用户消息作为命名输入(分叉点即新会话起点,语义=首轮问答);
357
+ * SessionNamer 内部已有 autoName 存在即跳过(幂等),LLM 失败/无价值降级占位标题。
367
358
  *
368
- * @param input 本轮用户输入
369
- * @param options 触发选项(autoTriggered 默认 false,即手动触发)
370
- * @returns 写入/更新的 UserProfileEntry 列表
359
+ * @param result - 分叉结果(含新会话名/日期/Round 列表)
371
360
  */
372
- archiveProfileFacts(input: string, options?: ArchiveTriggerOptions): Promise<UserProfileEntry[]>;
361
+ private ensureForkSessionTitle;
373
362
  /**
374
- * 手动触发 insight 提取(manual 模式下使用)
363
+ * 切换到指定项目:切换后自动 rebuildComponents();Agent 级记忆存储(宿主注入,实例不随项目切换重建)保留,项目级配置(.memora/)重新加载
375
364
  *
376
- * manual 模式下 postProcess 跳过自动归档,用户需通过此 API 主动归档。
377
- * 内部仍走 classify 判断(避免无价值输入浪费 LLM 调用)。
365
+ * `nameOrPath` 只接受两种输入:① 项目注册表中的项目名(依赖注册表跨项目共享,见 dataDir/registryDir);
366
+ * ② 项目根目录的**绝对路径**。二者都不满足时抛 configError——否则相对串会以 process.cwd()
367
+ * 为基准解析,静默造出非预期的项目目录并占用其锁。
368
+ */
369
+ switchProject(nameOrPath: string): Promise<AgentContext>;
370
+ /**
371
+ * 组装所有运行时组件(一行委托给 assembler 工厂)
378
372
  *
379
- * FIX-P1-4:新增 options 参数透传给 ArchiveCoordinator。
380
- * 宿主自动触发时传 `{ autoTriggered: true }`,由 ArchiveCoordinator 内部按模式判断;
381
- * 用户手动触发时无需传 options(默认 autoTriggered=false,无条件执行)。
373
+ * 接线回调(工具幂等 outbox / 任务表 / loop 回调 / createSessionManager)与装配私有状态
374
+ * (暂存队列 / 停滞计数器)全部由 assembler 组装收口——Agent 只注入稳定能力(hooks)。
375
+ */
376
+ private assembleComponents;
377
+ setProvider(provider: LlmProvider): void;
378
+ /**
379
+ * 运行时更新上下文窗口上限(token)
382
380
  *
383
- * 归档逻辑已委托给 ArchiveCoordinator
381
+ * 模型热切换配套:同步三处装配期值拷贝(loop 截断/软上限、ContextManager 阈值、
382
+ * ContextPreparer 预算与占用快照),全部对新窗口即刻生效。对话进行中禁止更新
383
+ * (与 setProvider 同守卫)。
384
384
  *
385
- * @param input 本轮用户输入
386
- * @param assistantContent 本轮助手回复内容
387
- * @param options 触发选项(autoTriggered 默认 false,即手动触发)
388
- * @returns 写入/更新的 Memory 列表
385
+ * @param tokens 新窗口 token 数
389
386
  */
390
- archiveInsight(input: string, assistantContent: string, options?: ArchiveTriggerOptions): Promise<Memory[]>;
387
+ setContextWindow(tokens: number): void;
391
388
  /**
392
- * 手动归档会话内容(content 类记忆)
389
+ * 运行时更新 per-LLM 输出预算默认值(token)
393
390
  *
394
- * 适用于 `insights-only` / `manual` 模式下用户手动触发会话内容归档。
395
- * `full` 模式下由宿主在会话切换前自动调用,无需用户干预。
391
+ * Provider 热切换配套(与 setContextWindow 同链路):同步 #config 拷贝并即时生效于 loop——
392
+ * 切换 Provider 后新配置的 maxTokens 无需重装 Agent。undefined = 清除(回服务端默认)。
393
+ * 不设 assertNotBusy:maxTokens 是请求参数(非上下文结构),轮内下一迭代即用新值,无一致性风险。
396
394
  *
397
- * FIX-P1-4:新增 options 参数透传给 ArchiveCoordinator。
398
- * 宿主自动触发时传 `{ autoTriggered: true }`,由 ArchiveCoordinator 内部按模式判断;
399
- * 用户手动触发时无需传 options(默认 autoTriggered=false,无条件执行)。
395
+ * @param tokens 新输出预算(token);undefined 清除
396
+ */
397
+ setMaxTokens(tokens: number | undefined): void;
398
+ /**
399
+ * 读取本轮请求体**实际**携带的 max_tokens(生效值),供宿主取证面写 meta。
400
400
  *
401
- * 归档逻辑已委托给 ArchiveCoordinator
401
+ * 薄委托:优先级裁决收敛在 AgentLoop.buildChatOptions(见其注释),此处不复制规则——
402
+ * 否则「谁压过谁」会在宿主侧长出第二真理源。loop 未装配时返回 undefined。
403
+ */
404
+ getEffectiveMaxTokens(): number | undefined;
405
+ setBackgroundProvider(provider: LlmProvider | null): void;
406
+ /**
407
+ * 运行时切换归档模式:对话进行中禁止切换(避免本轮 postProcess 行为不一致),无变更幂等返回
408
+ */
409
+ setArchiveMode(mode: ArchiveMode): void;
410
+ /**
411
+ * 查询当前归档模式(宿主 UI 可据此同步显示)
412
+ */
413
+ getArchiveMode(): ArchiveMode;
414
+ /**
415
+ * 获取角色包切换锁定状态(透传 RolePackManager,宿主 IPC 层据此区分"切换失败"原因)
416
+ * @returns locked 是否锁定;unlockAt 锁定自动恢复时间戳(ms epoch),未锁定时为 null
417
+ */
418
+ getRolePackSwitchLockStatus(): {
419
+ locked: boolean;
420
+ unlockAt: number | null;
421
+ };
422
+ /**
423
+ * 获取当前激活角色包的 traits(宿主情感计算 API)
402
424
  *
403
- * @param date 会话日期 YYYY-MM-DD
404
- * @param session 会话标识(不含日期前缀)
405
- * @param options 触发选项(autoTriggered 默认 false,即手动触发)
406
- * @returns 归档结果(memories 可能为空,表示无归档价值或 LLM 失败)
425
+ * @returns traits 键值对,无激活角色包或无 traits 时返回 undefined
407
426
  */
408
- archiveSessionContent(date: string, session: string, options?: ArchiveTriggerOptions): Promise<SessionArchiveResult>;
427
+ getActiveTraits(): Record<string, number> | undefined;
409
428
  /**
410
- * 获取 pending 归档队列长度(MIND2-C3)
429
+ * 刷新 AgentLoop 的 systemPromptPrefix(SSOT:buildSystemPromptPrefix)
411
430
  *
412
- * 返回待重试的失败归档数。归档失败时输入入队,下次同阶段归档调用时自动重试。
413
- * 供宿主 UI 展示"N 条待补归档"提示,或判断是否需要手动触发重试。
431
+ * 角色包是 system prompt 的唯一注入源。调用时机:手动切换成功后、reloadConfig 重载后;
432
+ * loop 为 null 时静默跳过(init 前或 close 后边界)。统一走 buildSystemPromptPrefix 真理源,
433
+ * 全局技能清单也在该前缀内(不能只拼 rolePackPrompt)。等价于「按 activePack 视角刷新」(roundRole=null)。
434
+ */
435
+ private refreshRolePackPrefixOnLoop;
436
+ /**
437
+ * 会议阶梯推进:按当前 active 任务项的 rolePack 派生本轮装配视角。
414
438
  *
415
- * @returns pending 队列长度(0 表示无待补)
439
+ * 由 assembler.getTaskTable 每轮注入时驱动(hooks.applyActivePlanItemAssembly),与任务表渲染同源,
440
+ * 保证后继 step 换角色即时生效(装配视角不能只在 prepare.run 设一次,否则展示层正确/装配层冻结)。
441
+ * roundRole=candidate(可能为 null,无有效覆盖时回落 activePack 组长),调 refreshRolePackPrefixForRound 重建前缀。
442
+ * 防重:candidate 与 rolePackManager 当前 roundAssemblyPerspective 一致则跳过,避免每轮迭代重复重建。
416
443
  */
417
- getPendingArchiveCount(): number;
444
+ private applyActivePlanItemAssemblyIfChanged;
418
445
  /**
419
- * 重载配置类记忆:从 configDir 重新扫描指定 source 的配置文件并更新内存缓存 + SQLite 索引
446
+ * 按本轮表层装配视角刷新 AgentLoop 前缀(会议机制)
420
447
  *
421
- * 解决方案:installSkill 写入文件后或 confirmConfigSuggestion 写入配置文件后,
422
- * 调用此方法使当前会话立即生效,无需重启 Agent。
448
+ * roundRole=null(日常态)→ 回落 activePack 前缀;roundRole 为任务项角色 → 该角色
449
+ * persona/rules/skills 全量表层装配(buildSystemPrompt(name))。策略键恒为 activePack:
450
+ * ChatOptions(temperature/outputLimit)由 activePack 策略构建,不随视角变(键不换防抖动)。
451
+ * 由 seed prepare 每轮调用(`refreshRolePackPrefixForRound` 契约),保证前缀始终匹配本轮装配角色。
452
+ */
453
+ private refreshRolePackPrefixForRound;
454
+ /**
455
+ * 从当前激活的角色包策略构建 ChatOptions 覆盖项
456
+ * 将 act.temperature / act.outputLimit 映射到 ChatOptions 字段;输出上限最终与 per-LLM 默认值
457
+ * 取**更小值**(两者皆为「上限」,须同时满足)——收敛在 `buildChatOptions`,此处不裁决大小。
458
+ */
459
+ private buildChatOptionsFromStrategy;
460
+ /**
461
+ * 角色包系统的唯一切换入口(自动匹配 + 手动切换共用):activate 更新激活态 → 发射 rolePackSwitched 事件
462
+ * → 刷新 AgentLoop 前缀 → 同步工具白名单。
463
+ * @returns 是否切换成功。false 有两种成因(**均不发射切换事件**):角色包不存在、
464
+ * 切换锁已激活(30s 内超 5 次限流);调用方须以 getRolePackSwitchLockStatus() 区分,
465
+ * 不可由「返回 false + 未收到 rolePackSwitchLocked」推断为"不存在"(被锁时该事件不发射,
466
+ * 仅在**触发锁定**的那一次切换中发射,而那一次返回 true)。同名切换幂等返回 true。
467
+ */
468
+ switchRolePack(name: string): boolean;
469
+ /**
470
+ * 手动归档会话(更新 SessionMeta,委托 ArchiveCoordinator)
423
471
  *
424
- * 支持的 source:
425
- * - 'skill' → SkillManager.reload() 清空缓存重新扫描 skills/ 目录
426
- * - 'persona' → PersonaManager.reload() 清空缓存重新扫描 personas/ 目录(保持激活角色)
427
- * - 'rule' → 无操作(rule 类型由 ConfigManager CRUD 即时同步 bootstrap 段,详见 deleteRule/updateRule)
428
- * - 'guardrail' → 抛错(guardrail 是 AgentLoop 的 readonly 数组,需 rebuildComponents 才能重载)
429
- * - undefined → 重载 skill + persona(全量重载,不含 guardrail)
472
+ * 适用于 manual 模式(用户手动触发;full 模式由宿主切换前自动调用)。
473
+ * options 透传给 ArchiveCoordinator:宿主自动触发传 { autoTriggered: true }(按其模式判断),
474
+ * 用户手动触发省略 options(默认 autoTriggered=false,无条件执行)。
430
475
  *
431
- * @param source 配置类型,缺省时重载全部可热更新的配置
432
- * @returns 重载结果统计
476
+ * @returns 归档结果(updatedFields 可能为空,表示无归档价值或 LLM 失败)
477
+ */
478
+ archiveSession(date: string, session: string, options?: ArchiveTriggerOptions): Promise<SessionArchiveResult>;
479
+ /**
480
+ * 重载配置类记忆:从 configDir 重新扫描指定 source 并更新内存缓存(设定记忆纯文件装载,不写记忆库),使当前会话立即生效(无需重启)。
481
+ * - 'skill' → SkillManager.reload() 重扫 skills/
482
+ * - 'rolePack' → RolePackManager.reload() 重扫 role-packs/(保持激活角色,刷新 AgentLoop 前缀)
483
+ * - 'rule' → 经角色包管理机制热更新(即 rolePack)
484
+ * - undefined → 全量重载 skill + rolePack
433
485
  */
434
486
  reloadConfig(source?: string): Promise<{
435
487
  skill: number;
436
- persona: number;
488
+ rolePack: number;
437
489
  }>;
438
490
  /**
439
- * 重建内部组件(history / loop / managers)
440
- *
441
- * 通常不需要手动调用——switchProject() 已自动执行 rebuild。
442
- * 仅在宿主项目需要强制刷新组件时使用(如热更新配置后)。
491
+ * 重建内部组件(history / loop / managers):通常由 switchProject() 自动触发,仅强制刷新时手动调用
443
492
  */
444
493
  rebuildComponents(): Promise<void>;
445
494
  /**
446
- * 检查 Agent 是否已初始化
447
- *
448
- * @param methodName 调用方法名(用于错误消息)
449
- * @param requires 需要检查的组件列表
495
+ * 检查 Agent 是否已初始化(methodName 用于错误消息,requires 为需检查的组件列表)
450
496
  */
451
497
  private assertInitialized;
452
498
  /**
453
- * 断言对话未进行中 — 统一守卫,避免在 chat() 进行中执行会破坏状态一致性的操作
454
- *
455
- * 提取原因:switchProject / setProvider / setBackgroundProvider / setArchiveMode /
456
- * switchPersona / rebuildComponents 等 6 处方法均有相同的 `if (isBusy) throw chatBusyError('XXX')` 守卫,
457
- * 违反 DRY 原则(v2 神木回天 REPEAT-4 闭环)。
458
- *
459
- * 注意:reloadConfig 不使用本方法——它在 isBusy 时需暂存 source 而非直接抛错。
460
- *
461
- * @param operation 操作名称(用于错误消息,如 "切换项目")
499
+ * 断言对话未进行中(统一守卫):破坏状态一致性的入口统一在此做 isBusy 检查。
500
+ * reloadConfig 不使用本方法——它在 isBusy 时需暂存 source 而非直接抛错。
462
501
  */
463
502
  private assertNotBusy;
503
+ private get requireLoop();
504
+ private get requireArchiveCoordinator();
505
+ private get requireSessionManager();
464
506
  /**
465
- * 断言 getter:获取 loop,若 null 则抛出明确错误
466
- * 替代 `this.loop!` 非空断言,提供更好的重构安全性
507
+ * 获取角色包管理器(system prompt 的唯一注入源,返回 null 表示 Agent 未初始化)
467
508
  */
468
- private get requireLoop();
509
+ get rolePackManager(): RolePackManager | null;
469
510
  /**
470
- * 断言 getter:获取 history,若 null 则抛出明确错误
511
+ * 获取当前激活的 L2 行为策略:从激活角色包读取,未激活时用全局默认值;供各阶段按策略调整行为
471
512
  */
472
- private get requireHistory();
513
+ getActiveStrategy(): BehaviorStrategy;
473
514
  /**
474
- * 断言 getter:获取 pctx,若 null 则抛出明确错误
515
+ * 应用当前角色包的工具暴露面(换角色 → 工具集切换):声明 capabilities 时解析为工具白名单,未声明放行全部。
516
+ * 空数组(parseCapabilities 对 undefined 返回 [])同样视为"未声明能力"放行全部,避免误解释为"禁止所有"。
517
+ * toolMode=block 全禁与此正交;变更经 setToolWhitelist → onToolsChanged 链路同步 loop 快照与 system prompt。
475
518
  */
476
- private get requirePctx();
477
- private get requireArchiveCoordinator();
478
- private get requireSessionManager();
519
+ private applyRolePackToolExposure;
479
520
  /**
480
- * 关闭 Agent,释放 SQLite 连接等资源
521
+ * 立即执行一次孤儿 Round 垃圾回收(宿主手动触发入口)。
522
+ *
523
+ * roundStore+storage 未注入时返回空统计(降级不报错);
524
+ * 对话进行中(chatLock busy)经 shouldSkip 跳过并返回空统计。
525
+ *
526
+ * @returns GC 结果统计(scanned/deleted/memoryCleaned 等)
527
+ */
528
+ gcNow(): GCResult;
529
+ /**
530
+ * 关闭 Agent,释放存储连接等资源
481
531
  */
482
532
  close(): Promise<void>;
483
533
  /**
484
- * 统一 null 化所有组件字段(新增 Manager 时在此处追加一行)
485
- *
486
- * 仅处理"纯 null 化"字段,带副作用的清理(dispose/stop/close/shutdown)
487
- * 仍由 close() 显式调用,顺序敏感不可合并。
534
+ * 统一 null 化所有组件字段(新增 Manager 时在此追加一行);带副作用的清理仍由 close() 显式调用,顺序敏感不可合并
488
535
  */
489
536
  private nullifyAllComponents;
490
537
  get initialized(): boolean;
491
538
  get context(): AgentContext | null;
492
539
  /**
493
- * @deprecated 直接暴露 AgentLoop 破坏封装,将在下一主版本移除。
494
- * 使用 getMessages() / getMessageCount() 等有界接口替代。
540
+ * 获取 AgentLoop 实例(宿主集成面,用于 restoreHistory 等底层操作;getMessages/getMessageCount 无法替代)
495
541
  */
496
542
  get agentLoop(): AgentLoop | null;
497
543
  /**
498
- * 获取当前消息列表(只读副本,不可绕过 Agent 编排链路直接修改)
544
+ * 获取当前消息列表(只读副本,不可绕过编排链路直接修改)
499
545
  */
500
546
  getMessages(): readonly Message[];
501
547
  /** 获取当前消息数量 */
502
548
  getMessageCount(): number;
503
549
  /**
504
- * @deprecated 直接暴露 MessageHistory 破坏封装,将在下一主版本移除。
505
- * 使用 Agent 的对话管理方法(chat/chatSync/forkSession)替代直接操作。
550
+ * 获取 MessageHistory 实例(宿主集成面,用于日期/会话判断等底层操作;
551
+ * currentDateValue/currentSessionValue 等只读属性无替代接口)
506
552
  */
507
553
  get agentHistory(): MessageHistory | null;
508
554
  /**
509
- * 注入情感基调到 system prompt(Phase 2.1:AffectController)
510
- *
511
- * 委托至 AgentLoop.injectAffect(),在角色前缀和 bootstrap 记忆之间插入情感描述。
512
- * 与角色切换独立——切换角色不会清除情感注入。
513
- *
514
- * @param affectString 情感描述文本,传空字符串清除注入
555
+ * 注入情感基调到 system prompt:委托 AgentLoop.injectAffect(),在角色前缀与 bootstrap 记忆间插入情感描述;
556
+ * 与角色切换独立(切换角色不清除情感注入),传空串清除。
515
557
  */
516
558
  injectAffect(affectString: string): void;
517
559
  get provider(): LlmProvider;
518
560
  get isBusy(): boolean;
519
561
  get lastInteractionAt(): Date | null;
520
- /**
521
- * 记忆治理统一门面(L0 衰减 / L1 去重 / L2 时效性 / L3 冲突 / 诊断 / 推荐)
522
- *
523
- * 统一入口替代散落在 Agent 上的 6 个独立方法:
524
- * agent.governance.decay() → 原 runMemoryDecayOnce()
525
- * agent.governance.deduplicate() → 原 deduplicateMemories()
526
- * agent.governance.evaluateTimeliness() → 原 evaluateTimeliness()
527
- * agent.governance.detectConflicts() → 原 detectConflicts()
528
- * agent.governance.sourceHealth() → 原 sourceHealth()
529
- * agent.governance.suggest() → 原 suggest()
530
- */
562
+ /** 记忆治理统一门面(语义去重 / 来源健康诊断 / 冲突检测 / 建议推荐),Agent 上的记忆管理方法统一收口于此(无显式衰减层面) */
531
563
  get governance(): MemoryGovernance | null;
532
564
  /**
533
- * 获取 Agent 运行时指标快照(可观测性增强)
534
- *
535
- * 聚合 AgentLoop 指标(LLM 调用、记忆召回、工具调用、上下文管理)
536
- * 与 Agent 层指标(记忆衰减),返回完整的 AgentMetrics 快照。
537
- *
538
- * 未初始化时返回全零指标(合理的默认值,不抛异常)。
539
- * 纯只读、同步、零副作用——适合宿主项目定期轮询构建监控面板。
540
- *
541
- * 使用方式:
542
- * const metrics = agent.getMetrics();
543
- * console.log(`LLM 调用 ${metrics.llm.callCount} 次,命中率 ${metrics.recall.hitRate}`);
544
- *
545
- * @returns AgentMetrics 完整快照(含衰减指标)
565
+ * 后台任务统计快照(宿主观测后台副作用健康度,纯只读转发 utils 单例)。
566
+ * @returns 在途 / 成功 / 失败计数
546
567
  */
547
- getMetrics(): AgentMetrics;
568
+ getBackgroundTaskStats(): BackgroundTaskStats;
548
569
  /**
549
- * 角色管理器(可能为 null)
550
- *
551
- * 返回 null 时表示 Agent 未初始化或角色系统未加载。
552
- * 链式调用建议使用可选链:`agent.persona?.activeName`
553
- */
554
- get persona(): PersonaManager | null;
555
- /**
556
- * 工具执行器(可能为 null)
557
- *
558
- * 返回 null 时表示 Agent 未初始化。
570
+ * 获取 Agent 运行时指标快照(可观测性):聚合 AgentLoop 指标与 Agent 层治理指标;
571
+ * 未初始化返回全零默认值(不抛异常),纯只读同步零副作用,适合宿主定期轮询监控面板。
559
572
  */
573
+ getMetrics(): AgentMetrics;
574
+ /** 角色包管理器(角色+技能+规则的唯一真理源,system prompt 的唯一注入源) */
575
+ get rolePack(): RolePackManager | null;
576
+ /** 工具执行器(返回 null 表示 Agent 未初始化) */
560
577
  get tools(): ToolExecutor | null;
561
- /**
562
- * 技能管理器(可能为 null)
563
- *
564
- * 返回 null 时表示 Agent 未初始化或技能系统未加载。
565
- */
578
+ /** 技能管理器(返回 null 表示未初始化或技能系统未加载) */
566
579
  get skills(): SkillManager | null;
567
- /**
568
- * 配置管理器(可能为 null)—— 规则/技能注入 + 配置建议
569
- *
570
- * 返回 null 时表示 Agent 未初始化。
571
- */
572
- get config(): ConfigManager | null;
573
- /**
574
- * Insight 提取器(可能为 null)—— 输入分类 + 记忆提取
575
- *
576
- * 返回 null 时表示 Agent 未初始化或 LLM Provider 未配置。
577
- */
578
- get insight(): InsightExtractor | null;
579
- /**
580
- * 记忆查看器(可能为 null)—— 快照 + 搜索 + 统计
581
- *
582
- * 返回 null 时表示 Agent 未初始化或存储层未就绪。
583
- * 宿主项目常用模式:`const mem = agent.memory; if (!mem) return [];`
584
- */
580
+ /** 角色包管理器(返回 null 表示未初始化或角色包系统未加载) */
581
+ get rolePacks(): RolePackManager | null;
582
+ /** 记忆查看器(快照 + 搜索 + 统计;宿主常用 `const mem = agent.memory; if (!mem) return []`) */
585
583
  get memory(): MemoryInspector | null;
586
- /**
587
- * 项目管理器(可能为 null)
588
- *
589
- * 返回 null 时表示 Agent 未初始化。
590
- */
584
+ /** 项目管理器(返回 null 表示 Agent 未初始化) */
591
585
  get projects(): ProjectManager | null;
592
- /**
593
- * 用户画像管理器(可能为 null)—— 实时归档 + 确认/拒绝
594
- *
595
- * 返回 null 时表示 Agent 未初始化。
596
- * 宿主常用模式:
597
- * - `agent.userProfile?.getPending()` 查询待确认条目
598
- * - `await agent.userProfile?.confirm(id)` 确认条目
599
- * - `await agent.userProfile?.reject(id)` 拒绝条目
600
- */
601
- get userProfile(): UserProfile | null;
602
- /**
603
- * 安全守卫(可能为 null)—— 写入确认回调注册
604
- *
605
- * 返回 null 时表示 Agent 未初始化或 projectPath 未设置。
606
- * 宿主常用模式:
607
- * - `agent.security?.onWriteConfirmation(callback)` 注册写入确认回调
608
- * - 回调返回 true 允许写入,返回 false 拒绝写入
609
- *
610
- * 详见 M1 写入确认 UI 闭环
611
- */
586
+ /** 安全守卫(写入确认回调注册:`onWriteConfirmation` 返回 true 放行、false 拒绝;未初始化/projectPath 未设为 null) */
612
587
  get security(): SecurityGuard | null;
613
- /**
614
- * 作品投影管理器(可能为 null)—— 文件内容 → 概要+结构+决策
615
- *
616
- * 返回 null 时表示 Agent 未初始化。
617
- * 宿主常用模式:
618
- * - `agent.works?.ensureProjection(filePath, content)` 读取文件后触发生成
619
- * - `agent.works?.loadAll()` 获取所有投影
620
- */
588
+ /** 作品投影管理器(用户主动登记的 JSON 极简索引;`registerWork`/`listWorks`/`loadAndGetContextBlock`/`isFileMalformed`) */
621
589
  get works(): WorkProjectionManager | null;
622
- /** 会话管理器(宿主可通过此 getter 访问会话恢复/切换/分叉功能) */
590
+ /** 会话管理器(会话恢复/切换/分叉功能) */
623
591
  get sessionManager(): SessionManager | null;
624
- /** 文本润色管理器(宿主可通过此 getter 调用 polish 方法) */
592
+ /** 文本润色管理器(polish 方法) */
625
593
  get polish(): TextPolishManager | null;
626
594
  }
627
595
  //# sourceMappingURL=agent.d.ts.map