@zooique/memora 2.0.3 → 3.0.0

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 +1028 -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
@@ -6,31 +6,33 @@
6
6
  *
7
7
  * 10 个 magic number 分布在 2 文件,已达提取阈值,故集中提取。
8
8
  */
9
+ // 上下文预算装配后,最近对话注入轮数由预算动态派生(见 budget.ts / contextPreparer.ts),
10
+ // agent 常量层不再持有固定轮数默认。
11
+ // SSOT:召回排除默认值下沉到 utils/recallDefaults(记忆层与 agent 层共享,避免两处定义),
12
+ // 消费方 MemoryAdvisor 直接 import 源头,agent 常量层不 re-export。
9
13
  /**
10
14
  * Agent 门面层常量
11
15
  *
12
- * 用于 agent.ts 中的并发锁、输入限制、记忆衰减周期等。
16
+ * 用于 agent.ts 中的并发锁、输入限制、召回/上下文配置等。
13
17
  */
14
18
  export const AGENT_CONSTANTS = {
15
19
  /**
16
- * chat() 并发锁超时(毫秒)。超时后中断 generator 并释放锁。
17
- *
18
- * 取 180s(LLM 120s + 60s 缓冲),与超时体系匹配,作为所有超时失败后的最后兜底:
19
- * - chunk 级读超时 30s(openaiCompatible parseSseStream)
20
- * - LLM 请求超时 120s(LLM_TIMEOUT_MS)
21
- * - 宿主层无进展兜底 60s(chatHandlers STREAM_NO_PROGRESS_TIMEOUT_MS)
20
+ * chat() 并发锁超时。锁超时后仅自动释放锁(放行新对话),不中断生成流——
21
+ * LLM 无进展由 provider 层兜底(请求级 120s + SSE 事件停滞 120s),锁不对整次对话时长设上限。
22
22
  */
23
23
  CHAT_LOCK_TIMEOUT_MS: 180_000,
24
24
  /** close() 关闭时等待归档完成的超时(毫秒)。 */
25
25
  SHUTDOWN_ARCHIVE_TIMEOUT_MS: 5_000,
26
26
  /** chat() 输入最大长度(字节)。128KB。 */
27
27
  CHAT_INPUT_MAX_LENGTH: 128 * 1024,
28
- /** 记忆衰减执行间隔(毫秒)。1 小时。 */
29
- DECAY_INTERVAL_MS: 3_600_000,
30
- /** AgentConfig.maxContextTokens 默认值。120K tokens。 */
28
+ /**
29
+ * AgentConfig.maxContextTokens 默认值。120K tokens。
30
+ * ⚠️ **本键为真源**;镜像一处须同步 = `src/config/loader.ts` 的 `DEFAULT_MAX_CONTEXT_TOKENS`
31
+ * (同语义同值:配置层默认窗口,分层不可 import,按本仓既有做法「重复 + 注释对冲」)。
32
+ * 注意:`strategyKeys.MIN_CONTEXT_LIMIT` **不是镜像**——它是角色包 contextLimit 的声明
33
+ * 下限语义(正数声明不得低于默认窗口,「收紧」无意义),取值依赖本键但不得随本键联动改。
34
+ */
31
35
  DEFAULT_MAX_CONTEXT_TOKENS: 120_000,
32
- /** recallExcludeSources 默认值——永久记忆不参与增量召回。 */
33
- DEFAULT_RECALL_EXCLUDE_SOURCES: ['persona', 'rule', 'skill'],
34
36
  /**
35
37
  * systemPrompt 时间注入的默认 locale(对齐"核心库领域无关"原则,可被 AssembleInput.locale 覆盖)。
36
38
  * 默认 'zh-CN' 是项目母语,宿主可注入其他 locale 实现国际化。
@@ -38,17 +40,29 @@ export const AGENT_CONSTANTS = {
38
40
  DEFAULT_LOCALE: 'zh-CN',
39
41
  /** 召回记忆数量上限。5 条记忆兼顾上下文窗口与召回质量。 */
40
42
  DEFAULT_RECALL_LIMIT: 5,
41
- /** 最近对话历史注入轮数。3 轮(3 条 user + 3 条 assistant)。 */
42
- DEFAULT_RECENT_HISTORY_ROUNDS: 3,
43
+ /** 暂停超时阈值(毫秒)。30 分钟内无心跳则视为超时,自动归档清理。 */
44
+ PAUSE_TIMEOUT_MS: 30 * 60 * 1000,
45
+ /**
46
+ * 孤儿 Round 垃圾回收周期(毫秒)。
47
+ * 每天执行一次:清理 refCount=0 且超龄的孤立问答闭环(崩溃残留 pending / 已删会话遗留)。
48
+ */
49
+ GC_INTERVAL_MS: 24 * 60 * 60 * 1000,
50
+ // ─── completedToolCalls FIFO 封顶 ─────────────────
51
+ //
52
+ // 工具执行日志无上限时,检查点内存快照开销随会话寿命线性增长。
53
+ // 48 条 ≈ 多回合工具调用上限,远超单回合调用量。
54
+ // 截断策略:优先丢弃幂等工具的最早记录,非幂等永不丢弃。
55
+ COMPLETED_TOOL_CALLS_MAX: 48,
43
56
  };
44
57
  /**
45
58
  * AgentLoop 引擎层常量
46
59
  *
47
60
  * 用于 loop.ts 中的 token 估算、召回上下文长度、LLM 重试、循环限制等。
48
61
  *
49
- * 注意:AgentLoop 构造选项中的默认值(maxIterations ?? 20 等)保留在 loop.ts 原地,
50
- * 因为它们是 API 契约的一部分——调用方期望"未传入时使用默认值"。
51
- * 这里只提取与 UI/重试/估算相关的纯常量。
62
+ * 注意:AgentLoop 构造选项中的默认值(maxIterations 兜底 DEFAULT_MAX_ITERATIONS 等)定义在
63
+ * role-pack/strategyKeys.ts——这是角色包策略边界层的常量,agent→role-pack 单向依赖引用。
64
+ * loop.ts runIterationLoop 入口动态计算 effectiveMax:角色包 stepBudget > 0 则覆盖,
65
+ * 否则用 maxIterations 兜底。角色包配多少给多少,内核不 clamp。
52
66
  */
53
67
  export const LOOP_CONSTANTS = {
54
68
  /**
@@ -76,17 +90,135 @@ export const LOOP_CONSTANTS = {
76
90
  RETRY_BASE_DELAY_MS: 1000,
77
91
  /** 单次 LLM 请求超时(毫秒)。120 秒。超时后可重试。 */
78
92
  LLM_TIMEOUT_MS: 120_000,
79
- /** 上下文截断时给 LLM 响应预留的缓冲比例。0.9 = 留 10% 给响应。 */
93
+ /**
94
+ * 上下文截断时保留的窗口比例(**保留系数**:乘 `maxContextTokens` 得目标上限)。0.9 = 留 10% 缓冲。
95
+ *
96
+ * ⚠️ 与 `budget.ts` 的 `DEFAULT_OUTPUT_RESERVE_RATIO = 0.15` **不可直接比较**——两者基准不同、
97
+ * 语法相反(同属「给模型回答的预留」,但阶段与依据均不同):
98
+ * · 本常量(**截断线**):`ContextManager.truncateMessages` 触发于 `token > maxContextTokens`,
99
+ * 把 payload 压到 `maxContextTokens × 0.9`。基准 = **窗口总量**;语义 = **保留 90%**(乘法)。
100
+ * · `DEFAULT_OUTPUT_RESERVE_RATIO`(**装配线**):`computeContextBudget` 的
101
+ * `可用 = 窗口 × (1 − 0.15) − 固定开销`。基准 = **窗口总量**;语义 = **预留 15%**(减法)。
102
+ * 二者恰好互余(0.9 保留 ↔ 0.15 预留)纯属巧合,勿据此推导关联或试图统一。
103
+ */
80
104
  CONTEXT_TOKENS_BUFFER_RATIO: 0.9,
105
+ /**
106
+ * 软上限检测:摘要层 token 占容量阈值比例。
107
+ *
108
+ * 当摘要层(含 Round summary / Compressed context 标记的消息)token 占用
109
+ * 超过 maxContextTokens × SUMMARY_LAYER_TOKEN_RATIO 时,判定为"摘要层达容量上限",
110
+ * 触发软上限收尾信号让 LLM 收敛。
111
+ *
112
+ * 0.3 = 摘要层占 30% 容量即触发,配合 CONTEXT_TOKENS_BUFFER_RATIO=0.9
113
+ * 使用:总上下文逼近上限 + 摘要层占比过高 → 注入软上限。
114
+ */
115
+ SUMMARY_LAYER_TOKEN_RATIO: 0.3,
116
+ /**
117
+ * 单条工具结果进入上下文的最大 token 数(≈ 上下文窗口的 5%)。6,000。
118
+ *
119
+ * **同源红线(一个键,三处引用,且只按 token 判定)**:
120
+ * · **不变量**:任何进入上下文的单条 tool 消息(**含 `wrapToolResult` 包裹**)≤ 本键;
121
+ * · `read_file` 分段预算 = 本键 − `TOOL_RESULT_WRAP_OVERHEAD_TOKENS`(生产者侧扣包裹开销);
122
+ * · 入口关落盘判据 = `estimateTokensText(content) > 本键`(`loop.appendToolMessage`,
123
+ * content 即 wrapped 后待入上下文的内容)。
124
+ * 判据是**严格大于**,而 `read_file` 产出(含包裹)恒 ≤ 本键 → `read_file` **结构性不落盘**,
125
+ * 回取 offload 产物时不会再次落盘 → **无限嵌套不可能**。若本键被调到低于 read_file 产出口径、
126
+ * 或 read_file 预算不再扣包裹余量,读回产物即再次超阈 → 再落盘 → 拿到新路径 → 循环;
127
+ * `ToolResultCache` 拦不住这种嵌套(产物文件名含时间戳与随机串,每次去重 key 都不同)。
128
+ *
129
+ * ⚠️ 故本键**不可**改写成「24,000 字符」这类字符数限额 —— 同一字符数在中英文下 token 数
130
+ * 相差近 2 倍(CJK `CJK_CHARS_PER_TOKEN=1.5` vs 其他 `CHARS_PER_TOKEN=3`),按字符限额必然
131
+ * 让其中一侧实际越界。字符只是 token 的估算输入,不是限额本身。
132
+ */
133
+ SINGLE_TOOL_RESULT_MAX_TOKENS: 6_000,
134
+ /**
135
+ * `wrapToolResult` 包裹模板的 token 开销预留(含工具名)。
136
+ *
137
+ * `read_file` 的分段预算 = `SINGLE_TOOL_RESULT_MAX_TOKENS` − 本键,使**含包裹**的输出仍 ≤ 单条上限
138
+ * (不变量在生产者侧成立)。实测模板固定开销 ≈30 tokens(两行 ASCII 标签 + 一句 26 字中文提示)
139
+ * + 工具名(≤ 十余字符),100 已宽裕覆盖超长自定义工具名。
140
+ *
141
+ * ⚠️ 扣除方向不可反:若 `read_file` 直接以 `SINGLE_TOOL_RESULT_MAX_TOKENS` 作预算,其 wrapped 输出
142
+ * 会超出单条上限 → 被入口关落盘 → LLM 每次读文件只看得到路径(荒谬行为,且无测试会红)。
143
+ */
144
+ TOOL_RESULT_WRAP_OVERHEAD_TOKENS: 100,
145
+ /**
146
+ * `search_memories` 工具响应性护栏:整次关键词搜索的上限。
147
+ *
148
+ * 背景:搜索服务为网络调用(web/project search)时以 30s 超时为先例(webSearchProvider.ts),
149
+ * 本地记忆搜索更快,故收窄为 5s——超时降级为提示文案而非挂死工具。
150
+ */
151
+ MEMORY_SEARCH_TIMEOUT_MS: 5_000,
152
+ /**
153
+ * 情报区(LLM 私有工作笔记,大文本统一通道)字符数上限。
154
+ *
155
+ * LLM 经 `remember_intel` 自写的私有笔记累积;超限裁最旧(保留最新)。这是**数据上限**
156
+ * (防单 turn 内多次写入把笔记撑爆),**不是预算维度** —— 情报区仍作为尾部 system 消息
157
+ * 参与现有 `truncateMessages` 窗口淘汰(锚点 C:不新增第 5 个预算维度)。
158
+ */
159
+ MAX_INTEL_PREFIX_LEN: 4_000,
81
160
  /** 摘要缓存 TTL:消息数增长超过此值时缓存过期,需重新生成摘要。 */
82
161
  SUMMARY_CACHE_TTL_MSGS: 10,
83
- /** 召回记忆内容注入上下文时的截断长度(字符)。 */
84
- RECALL_CONTENT_SLICE: 200,
162
+ /** 流式中断的默认追加标记(SSOT):含断点摘要,让 LLM 明确"以上已输出,请继续不重复"。
163
+ * loop(流式响应中断)与 orchestrator(历史写入中断标记)必须用同一份默认文案,
164
+ * 避免宿主未注入 messages 时两条路径降级出不同文案(另一路径为短 "[已中断]")。
165
+ */
166
+ DEFAULT_INTERRUPTED_MARK: '\n\n[已中断]\n\n[断点摘要:以上内容已输出到 LLM,请在此基础上继续回答,不要重复已输出的内容]',
167
+ /** 达到最大迭代/步数预算的默认追加标记(SSOT):loop 的撞线收尾文案默认值,
168
+ * 宿主可经 messages.maxIterationsReached 覆盖(与 DEFAULT_INTERRUPTED_MARK 同族文案)。 */
169
+ DEFAULT_MAX_ITERATIONS_REACHED_MARK: '\n\n[Max iterations reached]',
170
+ /**
171
+ * 上下文预算预警提示:容量逼近警戒线但摘要层未饱和时注入的温和提示,
172
+ * 引导 LLM 主动压缩 / 收敛——软上限(收尾信号)的前一级。低压通用文案不走 UIMessages 覆盖层,
173
+ * 如需宿主定制可后续升级(与 softLimitWrapup 同族,但非高频行为文案)。
174
+ */
175
+ CONTEXT_PRESSURE_HINT: '## 上下文空间提示\n' +
176
+ '当前上下文已接近容量上限。若后续步骤需要更多空间,可调用 compress_context 压缩较早 turn' +
177
+ '或超大工具结果;同时注意收敛回答篇幅,避免无谓展开。',
178
+ /**
179
+ * 搜索收敛护栏(实测:LLM 连续成功联网搜索 10+ 次不收敛,Bing 结果泛泛仍反复搜)。
180
+ * 单 turn(问答闭环)内成功 web_search 次数达到此阈值后,注入收敛提示引导 LLM 停止搜索直接作答。
181
+ * 计入成功(ok=true)与连续轮次无关——一次工具步内并行多个搜索按多次计。
182
+ */
183
+ SEARCH_CONVERGENCE_THRESHOLD: 2,
184
+ /** 搜索收敛提示(executionTemp 幂等:一轮内仅注入一次,下一闭环入口即弃) */
185
+ SEARCH_CONVERGENCE_HINT: '## 搜索收敛提示\n' +
186
+ '你已成功执行多次联网搜索并获取了可用信息。若现有信息已足够支撑回答,请停止继续搜索,' +
187
+ '直接基于已有信息作答;仅当存在明确信息缺口(如用户指定查询的最新数据确实缺失)时才继续搜索。',
188
+ /**
189
+ * 搜索硬上限(实测软提示未能阻止 LLM 持续重搜,故确定性拒绝)。
190
+ * 单 turn(问答闭环)内 web_search 调用次数超过此数后,后续搜索执行时直接拒绝并回填拒绝文案,
191
+ * 不依赖 LLM 听从软提示——软提示引导收敛(< 上限时),硬限兜底(达到上限强制停)。
192
+ */
193
+ MAX_WEB_SEARCH_CALLS: 6,
194
+ /**
195
+ * 工具调用导语纪律(分区式 UI 配套):正文只承载最终交付,工具步的过程叙述
196
+ * 由内核 narrate 事件投影进过程区。约束模型在调用工具前不输出长段规划——长导语若发生在
197
+ * 首轮工具步(消息级分类前)会逐字混入正文,压到一句话可把残余影响降至可忽略。
198
+ * 随「可用工具」节一起注入,无工具定义时(纯对话角色)不出现。
199
+ */
200
+ TOOL_NARRATION_DISCIPLINE: '## 协作规范\n' +
201
+ '- 调用工具前若要说明意图,最多一句话(例如「先检索相关资料」);不要在调用工具前输出长篇规划或过程叙述。\n' +
202
+ '- 工具执行完毕后,基于全部结果输出最终回答;完整的分析、解释与结论只在最终回答中展开。',
85
203
  /** 上下文摘要:参与摘要的最近消息条数。 */
86
204
  SUMMARY_MSG_COUNT: 6,
87
205
  /** 上下文摘要:单条消息内容截断长度(字符)。 */
88
206
  SUMMARY_CONTENT_SLICE: 200,
89
207
  /** 上下文摘要:LLM 调用 maxTokens 参数。 */
90
208
  SUMMARY_MAX_TOKENS: 150,
209
+ /**
210
+ * 任务分类启发式:用户消息超过此长度(字符)判定为 'reasoning'。
211
+ *
212
+ * 原 loop.determineTaskType 内的魔法数 500 归入内核常数。
213
+ * 注意这是内核启发式阈值,不属于角色包可影响的 L2 策略维度——任务类型分类是
214
+ * Provider 路由(影响成本)的内部决策,不开放给角色包配置(避免"策略全景物化")。
215
+ */
216
+ REASONING_INPUT_CHARS: 500,
217
+ /**
218
+ * 任务分类检测窗口:determineTaskType 从后向前取最近 N 条 user 消息做代码块检测,
219
+ * 避免多轮对话中"含代码的请求不在最后一条"被误判为 simple(错配 Provider 成本失真)。
220
+ * 长文本(reasoning)判定仍以最近一条 user 消息为准(反映当前轮意图)。
221
+ */
222
+ TASK_TYPE_WINDOW: 3,
91
223
  };
92
224
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/agent/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;;;;;;;OAOG;IACH,oBAAoB,EAAE,OAAO;IAE7B,gCAAgC;IAChC,2BAA2B,EAAE,KAAK;IAElC,+BAA+B;IAC/B,qBAAqB,EAAE,GAAG,GAAG,IAAI;IAEjC,yBAAyB;IACzB,iBAAiB,EAAE,SAAS;IAE5B,oDAAoD;IACpD,0BAA0B,EAAE,OAAO;IAEnC,6CAA6C;IAC7C,8BAA8B,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAU;IAErE;;;OAGG;IACH,cAAc,EAAE,OAAO;IAEvB,kCAAkC;IAClC,oBAAoB,EAAE,CAAC;IAEvB,gDAAgD;IAChD,6BAA6B,EAAE,CAAC;CACxB,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B;;;;;OAKG;IACH,eAAe,EAAE,CAAC;IAElB;;;;;;;;;;OAUG;IACH,mBAAmB,EAAE,GAAG;IAExB,4BAA4B;IAC5B,eAAe,EAAE,CAAC;IAElB,gCAAgC;IAChC,mBAAmB,EAAE,IAAI;IAEzB,oCAAoC;IACpC,cAAc,EAAE,OAAO;IAEvB,6CAA6C;IAC7C,2BAA2B,EAAE,GAAG;IAEhC,uCAAuC;IACvC,sBAAsB,EAAE,EAAE;IAE1B,6BAA6B;IAC7B,oBAAoB,EAAE,GAAG;IAEzB,yBAAyB;IACzB,iBAAiB,EAAE,CAAC;IAEpB,4BAA4B;IAC5B,qBAAqB,EAAE,GAAG;IAE1B,iCAAiC;IACjC,kBAAkB,EAAE,GAAG;CACf,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/agent/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8DAA8D;AAC9D,uBAAuB;AACvB,+DAA+D;AAC/D,uDAAuD;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;;;OAGG;IACH,oBAAoB,EAAE,OAAO;IAE7B,gCAAgC;IAChC,2BAA2B,EAAE,KAAK;IAElC,+BAA+B;IAC/B,qBAAqB,EAAE,GAAG,GAAG,IAAI;IAEjC;;;;;;OAMG;IACH,0BAA0B,EAAE,OAAO;IAEnC;;;OAGG;IACH,cAAc,EAAE,OAAO;IAEvB,kCAAkC;IAClC,oBAAoB,EAAE,CAAC;IAEvB,wCAAwC;IACxC,gBAAgB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;IAEhC;;;OAGG;IACH,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAEnC,mDAAmD;IACnD,EAAE;IACF,iCAAiC;IACjC,6BAA6B;IAC7B,8BAA8B;IAC9B,wBAAwB,EAAE,EAAE;CACpB,CAAC;AAEX;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B;;;;;OAKG;IACH,eAAe,EAAE,CAAC;IAElB;;;;;;;;;;OAUG;IACH,mBAAmB,EAAE,GAAG;IAExB,4BAA4B;IAC5B,eAAe,EAAE,CAAC;IAElB,gCAAgC;IAChC,mBAAmB,EAAE,IAAI;IAEzB,oCAAoC;IACpC,cAAc,EAAE,OAAO;IAEvB;;;;;;;;;;OAUG;IACH,2BAA2B,EAAE,GAAG;IAEhC;;;;;;;;;OASG;IACH,yBAAyB,EAAE,GAAG;IAE9B;;;;;;;;;;;;;;;;OAgBG;IACH,6BAA6B,EAAE,KAAK;IAEpC;;;;;;;;;OASG;IACH,gCAAgC,EAAE,GAAG;IAErC;;;;;OAKG;IACH,wBAAwB,EAAE,KAAK;IAE/B;;;;;;OAMG;IACH,oBAAoB,EAAE,KAAK;IAE3B,uCAAuC;IACvC,sBAAsB,EAAE,EAAE;IAE1B;;;OAGG;IACH,wBAAwB,EACtB,wDAAwD;IAE1D;kFAC8E;IAC9E,mCAAmC,EAAE,8BAA8B;IAEnE;;;;OAIG;IACH,qBAAqB,EACnB,cAAc;QACd,yDAAyD;QACzD,4BAA4B;IAE9B;;;;OAIG;IACH,4BAA4B,EAAE,CAAC;IAE/B,iDAAiD;IACjD,uBAAuB,EACrB,aAAa;QACb,4CAA4C;QAC5C,gDAAgD;IAElD;;;;OAIG;IACH,oBAAoB,EAAE,CAAC;IAEvB;;;;;OAKG;IACH,yBAAyB,EACvB,WAAW;QACX,yDAAyD;QACzD,8CAA8C;IAEhD,yBAAyB;IACzB,iBAAiB,EAAE,CAAC;IAEpB,4BAA4B;IAC5B,qBAAqB,EAAE,GAAG;IAE1B,iCAAiC;IACjC,kBAAkB,EAAE,GAAG;IAEvB;;;;;;OAMG;IACH,qBAAqB,EAAE,GAAG;IAE1B;;;;OAIG;IACH,gBAAgB,EAAE,CAAC;CACX,CAAC"}
@@ -7,6 +7,8 @@
7
7
  * 3. 关键消息提取(extractKeyMessages)—— 按重要性权重贪心选取
8
8
  * 4. 上下文摘要生成(generateContextSummary)—— LLM 生成"遗忘补偿"
9
9
  * 5. 摘要缓存管理(getOrCreateSummary)—— 缓存 TTL + 过期重生成
10
+ * 6. 软上限判定(shouldInjectSoftLimitWrapup)—— 摘要层饱和注入收尾信号(自 AgentLoop 迁入)
11
+ * 7. 压力预警(shouldInjectContextPressureHint)—— 容量到线但摘要健康的前一级提示
10
12
  *
11
13
  * 设计理由:AgentLoop 1151 行超阈值,上下文管理是独立职责,
12
14
  * 拆分后 AgentLoop 聚焦对话循环,ContextManager 聚焦上下文窗口管理。
@@ -15,13 +17,25 @@
15
17
  * 所有方法接收 messages 作为参数,是无状态的纯计算 + 缓存。
16
18
  */
17
19
  import type { LlmProvider, Message } from '../llm/provider.js';
20
+ import type { ProviderRouter } from '../llm/types.js';
18
21
  import { type ITracer } from '../agent/tracer.js';
22
+ /** 软上限摘要化判定标记:第一级替换产物文案前缀(compaction.ts ReplaceRoundsStrategy) */
23
+ export declare const SOFT_LIMIT_SUMMARY_MARKER_ROUND = "Round summary \u00B7 roundId:";
24
+ /** 软上限摘要化判定标记:第二级压缩产物文案前缀(loop.compressContext) */
25
+ export declare const SOFT_LIMIT_SUMMARY_MARKER_COMPRESS = "Compressed context";
19
26
  /** ContextManager 构造选项(模块私有,0 外部 import) */
20
27
  interface ContextManagerOptions {
21
28
  /** 上下文窗口 token 上限 */
22
29
  readonly maxContextTokens: number;
23
30
  /** LLM Provider(用于生成上下文摘要) */
24
31
  readonly provider: LlmProvider;
32
+ /**
33
+ * Provider 路由选择器(多模型路由基础,可选)
34
+ *
35
+ * 有配置时,摘要生成走 'summary' 路由,使用轻量模型。
36
+ * 不配置时回退到主 Provider(完全向后兼容)。
37
+ */
38
+ readonly providerRouter?: ProviderRouter;
25
39
  /** 截断时生成占位消息的文案函数(来自 UIMessages.contextTruncated) */
26
40
  readonly contextTruncatedFn: (skipped: number, kept: number) => string;
27
41
  /**
@@ -36,7 +50,50 @@ interface ContextManagerOptions {
36
50
  * 未注入时静默忽略。宿主可通过此回调向用户通知上下文被截断。
37
51
  */
38
52
  readonly onContextTruncated?: (skippedCount: number, keptCount: number) => void;
53
+ /**
54
+ * 已存轮次摘要加载器(截断优先复用,可选)
55
+ *
56
+ * 截断生成上下文摘要前,先尝试取已持久化的 round-summary(零成本、保真),
57
+ * 仅当没有已存摘要时才现调 LLM——让摘要生成退出截断关键路径。
58
+ * 返回空字符串/undefined 表示无已存摘要,回退 LLM 生成。
59
+ */
60
+ readonly roundSummaryLoader?: () => string;
61
+ /**
62
+ * 最少保留的最近原始对话轮数(可选,默认 0)
63
+ *
64
+ * 截断时强制保留最近 N 轮完整原始对话(不被摘要替代),在此基础上再按 token 上限收集。
65
+ * 宿主可据 provider 的 prompt caching(KV cache 复用)能力放宽此值——多塞原始对话几乎
66
+ * 零成本且保真。0 表示不强制(保持纯 token 驱动截断)。
67
+ */
68
+ readonly minRecentRounds?: number;
69
+ }
70
+ /** 可估算 token 的最小消息形状(宿主历史会话重算无需构造完整内核 Message) */
71
+ export interface EstimableMessage {
72
+ readonly content: string;
73
+ readonly toolCalls?: unknown;
39
74
  }
75
+ /**
76
+ * 估算消息序列 token 数(CJK 感知,零状态纯函数)。
77
+ *
78
+ * 单一真理源:先累计全部字符、最后一次向上取整——与逐条取整再求和**不等价**
79
+ * (后者系统性高估)。运行时(`ContextManager.estimateTokens` / contextPreparer
80
+ * 各层计量)与宿主历史会话占用重算共用本函数,两端口径不漂移。
81
+ *
82
+ * @param messages 待估算的消息序列(content 计入,toolCalls 序列化后计入)
83
+ * @returns token 数(按 CJK/其他字符分轨估算后向上取整)
84
+ */
85
+ export declare function estimateTokensMessages(messages: readonly EstimableMessage[]): number;
86
+ /**
87
+ * 估算单段文本 token 数(CJK 感知,零状态纯函数)。
88
+ *
89
+ * 供「单段文本」场景使用(如宿主对一条记忆正文的独立计量)。
90
+ * 计量**消息序列**须用 `estimateTokensMessages`:本函数逐条调用再求和会放大
91
+ * 取整误差,与本函数同口径但结果不等价。
92
+ *
93
+ * @param text 待估算文本
94
+ * @returns token 数(按 CJK/其他字符分轨估算后向上取整)
95
+ */
96
+ export declare function estimateTokensText(text: string): number;
40
97
  /**
41
98
  * 上下文窗口管理器
42
99
  *
@@ -44,119 +101,104 @@ interface ContextManagerOptions {
44
101
  * 从 AgentLoop 提取,保持无状态设计(不持有 messages 引用)。
45
102
  */
46
103
  export declare class ContextManager {
47
- /** 上下文窗口 token 上限(readonly,构造时传入) */
48
- private readonly maxContextTokens;
49
- /** LLM Provider(用于 generateContextSummary) */
104
+ private maxContextTokens;
50
105
  private readonly provider;
51
- /** 截断占位消息文案函数 */
106
+ private readonly providerRouter;
52
107
  private readonly contextTruncatedFn;
53
- /** 可观测性 Tracer(用于 generateContextSummary span 埋点,默认 NOOP) */
54
108
  private readonly tracer;
55
- /** 上下文摘要缓存(首次截断后生成,后续截断复用) */
56
109
  private contextSummary;
57
- /** 摘要缓存生成时的消息数量,用于判断缓存是否过期 */
58
110
  private contextSummaryMsgCount;
59
- /** 截断次数统计(truncateMessages 实际触发截断 +1,供 getMetrics 读取) */
60
111
  private _truncationCount;
61
- /** 截断事件回调(宿主可注入以通知用户) */
62
112
  private readonly onContextTruncated;
113
+ private readonly roundSummaryLoader;
114
+ private readonly minRecentRounds;
63
115
  constructor(opts: ContextManagerOptions);
64
- /** 截断次数(供 AgentLoop.getMetrics 读取) */
65
- get truncationCount(): number;
66
116
  /**
67
- * 估算消息数组的 token 数(CJK 中文适配)
117
+ * 运行时更新上下文窗口上限(token)
68
118
  *
69
- * 区分 CJK 与非 CJK 字符分别估算:
70
- * - CJK 字符(中文/日文/韩文):cjkChars / CJK_CHARS_PER_TOKEN(1.5)
71
- * - 非 CJK 字符(英文/数字/符号):otherChars / CHARS_PER_TOKEN(3)
72
- * 统一字符估算会严重低估中文(4 字符 ≈ 1.3 token,实际约 4-8 token)。
119
+ * 截断判定 / 软上限 / 召回注入警戒线均内读本字段,更新即刻生效。
73
120
  *
74
- * toolCalls 的 JSON 序列化字符数也计入(同样区分 CJK/非 CJK)。
75
- *
76
- * @param messages 消息数组
77
- * @returns 估算的 token 数
121
+ * @param tokens 新窗口 token 数
78
122
  */
79
- estimateTokens(messages: readonly Message[]): number;
123
+ setMaxContextTokens(tokens: number): void;
124
+ get truncationCount(): number;
80
125
  /**
81
- * 检查是否需要截断(token 超阈值 + 消息数 > 3)
126
+ * 估算消息 token 数。
82
127
  *
83
- * @param messages 消息数组
84
- * @returns 是否需要截断
128
+ * CJK(中/日/韩)与其它字符密度不同需分开估算:
129
+ * 统一按 3 字符/token 会严重低估中文(实际约 1.5 字符/token)。
130
+ * toolCalls 序列化字符同样计入。
85
131
  */
132
+ estimateTokens(messages: readonly Message[]): number;
133
+ /** token 超阈值且消息数 > 3(避免单条消息触发截断)时才需要截断 */
86
134
  shouldTruncate(messages: readonly Message[]): boolean;
87
135
  /**
88
- * 截断消息数组以适配上下文窗口
89
- *
90
- * 策略:保留下方、裁中间、提取关键消息。
91
- * - messages[0](system prompt)始终保留(这是 Agent 的"灵魂")
92
- * - 从尾部向前取最近的消息对(user + assistant + tool),直到估算 token 接近上限
93
- * - 从被裁剪的消息中按重要性权重提取关键用户消息,插入到 placeholder 之前
94
- * - 头部被裁剪的消息替换为一条摘要占位消息
136
+ * 软上限判定:上下文逼近容量上限(≥ 缓冲阈值)且摘要层 token 占比过高时,注入收尾信号让 LLM 收敛。
137
+ * 从 AgentLoop._shouldInjectSoftLimitWrapup 迁入(与 estimateTokens/maxContextTokens 同属上下文预算层)。
95
138
  *
96
- * 重要性权重:user 消息 > tool 结果 > assistant 回复
97
- * 被裁剪的用户消息中,内容较长的(信息量大)优先保留
139
+ * 精确检测摘要层 token 占用(替代原"存在标记即触发"的近似判断):
140
+ * - 过滤出标记为摘要的消息(Round summary / Compressed context)
141
+ * - 计算摘要层 token 占用
142
+ * - 当摘要层 token ≥ maxContextTokens × SUMMARY_LAYER_TOKEN_RATIO 时判定为"摘要层达容量上限"
98
143
  *
99
- * 如果 system prompt 本身就超过 maxContextTokens,不做截断(让 LLM API 报错,
100
- * 开发者需要缩减 bootstrapMemories 或 toolDefinitions)。
101
- *
102
- * @param messages 完整消息数组
103
- * @param summary 可选的上下文摘要(注入到 system prompt 和 placeholder 之间)
104
- * @returns 截断后的消息数组(可能是原数组引用,无修改时)
144
+ * @param messages 当前工作记忆(读型判定,不修改)
145
+ * @returns 是否应注入软上限收尾信号
105
146
  */
106
- truncateMessages(messages: readonly Message[], summary?: string): readonly Message[];
147
+ shouldInjectSoftLimitWrapup(messages: readonly Message[]): boolean;
107
148
  /**
108
- * 从被裁剪的消息中按重要性提取关键消息
149
+ * 上下文压力预警判定:容量表达警戒线(≥ CONTEXT_TOKENS_BUFFER_RATIO)但
150
+ * 摘要层未饱和(低于 SUMMARY_LAYER_TOKEN_RATIO)时 → 可注入温和提示(压缩/收敛引导)。
109
151
  *
110
- * 重要性权重:
111
- * - user 消息:权重 3(用户输入信息量最高)
112
- * - tool 消息:权重 2(工具结果有参考价值)
113
- * - assistant 消息:权重 1(助手回复可从上下文推断)
152
+ * 与 shouldInjectSoftLimitWrapup 互补——同一容量闸的两级:
153
+ * 摘要层饱和 → shouldInjectSoftLimitWrapup(收尾信号)
154
+ * 容量到线但摘要健康 → shouldInjectContextPressureHint(软上限的前一级预警)
114
155
  *
115
- * 贪心选取:按权重降序 + 内容长度降序排列,逐条选取直到 token 用完。
116
- * 最终按原始顺序返回(保持时间线一致性)。
117
- *
118
- * @param cutMessages 被裁剪的消息数组
119
- * @param availableTokens 可用 token 数
120
- * @returns 提取的关键消息数组(按原始顺序)
156
+ * @param messages 当前工作记忆(读型判定,不修改)
157
+ * @returns 是否应注入上下文空间预警提示
121
158
  */
122
- private extractKeyMessages;
159
+ shouldInjectContextPressureHint(messages: readonly Message[]): boolean;
123
160
  /**
124
- * 评估单条消息的重要性权重
161
+ * 截断消息数组以适配上下文窗口。
125
162
  *
126
- * @param msg 消息
127
- * @returns 权重值(user=3, tool=2, assistant=1)
163
+ * 策略:保留下方(最近)、裁中间、头部折叠成占位消息。
164
+ * - messages[0](system prompt)始终保留;
165
+ * - 从被裁剪段按重要性(user > tool > assistant)提取关键消息;
166
+ * - 若 system prompt 本身已超窗口则不截断(配置问题,交由 LLM API 报错)。
128
167
  */
168
+ truncateMessages(messages: readonly Message[], summary?: string): readonly Message[];
169
+ /**
170
+ * 从被裁剪段按重要性贪心选取关键消息,保留信息量最高的用户输入。
171
+ * 权重:user=3 > tool=2 > assistant=1,同级按内容长度;最后恢复原始顺序。
172
+ */
173
+ private extractKeyMessages;
174
+ /** 消息重要性权重:user>tool>assistant */
129
175
  private messageImportance;
130
176
  /**
131
- * 获取或创建上下文摘要(带缓存管理)
177
+ * 作废摘要缓存
132
178
  *
133
- * 缓存 TTL:消息数增长超过 SUMMARY_CACHE_TTL_MSGS 时缓存过期,需重新生成。
134
- * 首次调用时生成摘要并缓存,后续调用复用缓存直到过期。
179
+ * 缓存过期靠 `messages.length - contextSummaryMsgCount > TTL` 这个**单向**数值判断,
180
+ * 只覆盖「消息增长」。当消息集合被整体替换(`AgentLoop.restoreHistory` 恢复检查点)
181
+ * 且新历史更短时,差值为负 → 陈旧摘要永不过期,会把上一段会话的摘要注入新上下文。
135
182
  *
136
- * signal 参数让摘要生成可被用户取消中断,
137
- * 避免摘要 LLM 调用卡住时 generator 永久挂起(与 executeToolCalls 同源问题)。
183
+ * 修法不是把条件改成 `Math.abs`:truncateMessages 的正常裁剪同样让消息变少,
184
+ * 而那时摘要恰恰更该保留(它描述的就是被裁掉的历史)。真理源是「消息集合是否被替换」
185
+ * 这一事实,故由替换方显式作废,而非从长度差反推。
186
+ */
187
+ resetSummary(): void;
188
+ /**
189
+ * 获取或创建上下文摘要(带缓存)。
138
190
  *
139
- * @param messages 当前消息数组(用于生成摘要和判断缓存过期)
140
- * @param signal 可选的 AbortSignal,中断摘要生成
141
- * @returns 摘要字符串(失败/中断时返回空字符串,降级为无摘要)
191
+ * 缓存 TTL:消息数增长超 SUMMARY_CACHE_TTL_MSGS 即过期重生成。
192
+ * signal 使摘要 LLM 可被中断,避免其卡住时挂起调用方。
142
193
  */
143
194
  getOrCreateSummary(messages: readonly Message[], signal?: AbortSignal): Promise<string>;
144
195
  /**
145
- * 生成上下文摘要(enableContextSummary 时调用)
146
- *
147
- * 在首次截断时,提取即将被裁剪的消息中最近几条用户/助手对话,
148
- * 调用 provider 生成一句摘要,作为"遗忘补偿"注入到 system prompt 中。
149
- *
150
- * 通过 tracer span 埋点(TRACE_SPANS.CONTEXT_SUMMARY),
151
- * 让宿主监控面板能观察截断频率、摘要生成耗时与失败率。
152
- *
153
- * signal 参数传入 provider.chat 的 ChatOptions,
154
- * 让 fetch 请求和 SSE 流读取都能被 abort 中断;
155
- * for await 循环中也检查 signal.aborted 提前退出。
196
+ * 生成上下文摘要:把被裁剪段压缩成"遗忘补偿"注入 system prompt。
156
197
  *
157
- * @param messages 当前消息数组
158
- * @param signal 可选的 AbortSignal
159
- * @returns 摘要字符串(失败/中断时返回空字符串,降级为无摘要)
198
+ * 策略:
199
+ * - 优先复用已存的 round-summary(每轮后台生成的零成本产物),仅无已存摘要才调 LLM;
200
+ * - 走 providerRouter 的 'summary' 路由(轻量模型),未配置则回退主 provider;
201
+ * - abort 或失败一律降级为空串返回,不影响主流程。
160
202
  */
161
203
  private generateContextSummary;
162
204
  }
@@ -1 +1 @@
1
- {"version":3,"file":"contextManager.d.ts","sourceRoot":"","sources":["../../src/agent/contextManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,EAA4B,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG3E,4CAA4C;AAC5C,UAAU,qBAAqB;IAC7B,qBAAqB;IACrB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACvE;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACjF;AAiDD;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,8CAA8C;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,iBAAiB;IACjB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4C;IAC/E,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC,8BAA8B;IAC9B,OAAO,CAAC,cAAc,CAAuB;IAC7C,8BAA8B;IAC9B,OAAO,CAAC,sBAAsB,CAAa;IAC3C,yDAAyD;IACzD,OAAO,CAAC,gBAAgB,CAAa;IACrC,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwD;gBAE/E,IAAI,EAAE,qBAAqB;IASvC,sCAAsC;IACtC,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM;IAsBpD;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO;IAIrD;;;;;;;;;;;;;;;;;;OAkBG;IACH,gBAAgB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE;IAgGpF;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;;;;;;;;;;OAYG;IACG,kBAAkB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB7F;;;;;;;;;;;;;;;;OAgBG;YACW,sBAAsB;CAgFrC"}
1
+ {"version":3,"file":"contextManager.d.ts","sourceRoot":"","sources":["../../src/agent/contextManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,EAA4B,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG3E,kEAAkE;AAClE,eAAO,MAAM,+BAA+B,kCAA6B,CAAC;AAC1E,mDAAmD;AACnD,eAAO,MAAM,kCAAkC,uBAAuB,CAAC;AAEvE,4CAA4C;AAC5C,UAAU,qBAAqB;IAC7B,qBAAqB;IACrB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,qDAAqD;IACrD,QAAQ,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACvE;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAChF;;;;;;OAMG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,MAAM,CAAC;IAC3C;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAiDD,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,CAgBpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IAIzB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4C;IAC/E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,sBAAsB,CAAa;IAC3C,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwD;IAC3F,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,IAAI,EAAE,qBAAqB;IAWvC;;;;;;OAMG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIzC,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM;IAIpD,0CAA0C;IAC1C,cAAc,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO;IAIrD;;;;;;;;;;;OAWG;IACH,2BAA2B,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO;IAuBlE;;;;;;;;;;OAUG;IACH,+BAA+B,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO;IAatE;;;;;;;OAOG;IACH,gBAAgB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE;IAmGpF;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA6B1B,kCAAkC;IAClC,OAAO,CAAC,iBAAiB;IAMzB;;;;;;;;;;OAUG;IACH,YAAY,IAAI,IAAI;IAKpB;;;;;OAKG;IACG,kBAAkB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAe7F;;;;;;;OAOG;YACW,sBAAsB;CAsFrC"}