@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qCAAqC;AACrC,eAAO,MAAM,UAAU,oHAC4F,CAAC;AAEpH;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,CAAC,CAWnB"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * HTTP 网络工具:浏览器 User-Agent 常量 + 带超时控制的 fetch。
3
+ * web-search / web-fetch 默认实现共享,避免同语义逻辑双处维护(SSOT 下沉)。
4
+ */
5
+ /** 通用浏览器 User-Agent(避免被目标站当作爬虫拒绝) */
6
+ export const BROWSER_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
7
+ /**
8
+ * 带超时控制的 fetch:手动 AbortController + setTimeout(兼容性优于 AbortSignal.timeout),
9
+ * 防不可达端点挂起调用方;成功/失败均清理定时器。
10
+ *
11
+ * @param url 目标 URL
12
+ * @param timeoutMs 超时毫秒
13
+ * @param userAgent 可选 UA 头(缺省不发送)
14
+ * @returns fetch Response(调用方负责检查 ok 与 body 读取)
15
+ */
16
+ export async function fetchWithTimeout(url, timeoutMs, userAgent) {
17
+ const controller = new AbortController();
18
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
19
+ try {
20
+ return await fetch(url, {
21
+ headers: userAgent ? { 'User-Agent': userAgent } : undefined,
22
+ signal: controller.signal,
23
+ });
24
+ }
25
+ finally {
26
+ clearTimeout(timer);
27
+ }
28
+ }
29
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qCAAqC;AACrC,MAAM,CAAC,MAAM,UAAU,GACrB,iHAAiH,CAAC;AAEpH;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,SAAiB,EACjB,SAAkB;IAElB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE;YACtB,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;YAC5D,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * JSON 工具函数
3
3
  *
4
- * 从 InsightExtractor 和 WorkProjectionManager 提取的公共 JSON 解析函数,
4
+ * 从多个 Manager(如 WorkProjectionManager)提取的公共 JSON 解析函数,
5
5
  * 统一 LLM 输出的 JSON 解析策略。
6
6
  */
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * JSON 工具函数
3
3
  *
4
- * 从 InsightExtractor 和 WorkProjectionManager 提取的公共 JSON 解析函数,
4
+ * 从多个 Manager(如 WorkProjectionManager)提取的公共 JSON 解析函数,
5
5
  * 统一 LLM 输出的 JSON 解析策略。
6
6
  */
7
7
  /**
@@ -4,13 +4,35 @@
4
4
  /**
5
5
  * 将数值四舍五入到指定小数位数
6
6
  *
7
- * 替代 `Math.round(x * 10^n) / 10^n` 惯用法,消除 4 处重复
8
- * (ADR-017 枝叶层 2 次提取原则,3 次阈值已满足)。
7
+ * 替代 `Math.round(x * 10^n) / 10^n` 惯用法,消除 4 处重复。
9
8
  *
10
9
  * @param value - 待四舍五入的数值
11
10
  * @param decimals - 保留的小数位数(0~20,默认 2)
12
11
  * @returns 四舍五入后的数值;value 为 NaN/Infinity 时原样返回
13
12
  */
14
13
  export declare function roundTo(value: number, decimals?: number): number;
15
- export declare function cosineSimilarity(a: number[], b: number[]): number;
14
+ /**
15
+ * 正整数解析(单一真源):缺省 / 非法 / ≤0 → undefined,否则返回 parseInt 结果。
16
+ *
17
+ * 供 `builtinToolHandlers`(read_file 分段 offset/limit)与 `toolResultCache`(去重主体)
18
+ * 共用——两处语义一致(「缺省 / 非法 / <1 一律视为缺省,默认值交给调用方」),
19
+ * 避免同一规则散落两处(legacy-contract-audit 重复实现)。
20
+ *
21
+ * @param v 输入(string | number 之外一律归 undefined;`"12px"` 这类前导数字按 parseInt 语义解析)
22
+ * @returns 正整数,或 undefined
23
+ */
24
+ export declare function positiveInt(v: unknown): number | undefined;
25
+ /**
26
+ * 工具 limit 参数解析 + 上限钳制(单一真源)
27
+ *
28
+ * 收口 builtinToolHandlers 三个工具(search_memories / trace_summary / list_sessions)
29
+ * 各自手写的「parseInt + NaN/负→默认值 + 超上限钳制」三份。语义与 positiveInt 一致:
30
+ * 非法输入回退默认值;合法但超上限则钳制到上限(各工具上限是自身契约,由调用方传入)。
31
+ *
32
+ * @param value 参数原始字符串(undefined 时直接回退默认值)
33
+ * @param defaultValue 非法 / 缺失时的回退值
34
+ * @param max 上限(钳制,应 ≥ defaultValue)
35
+ * @returns 解析后的 limit 值
36
+ */
37
+ export declare function parseLimit(value: string | undefined, defaultValue: number, max: number): number;
16
38
  //# sourceMappingURL=math.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAK3D;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAajE"}
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAK3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/F"}
@@ -4,8 +4,7 @@
4
4
  /**
5
5
  * 将数值四舍五入到指定小数位数
6
6
  *
7
- * 替代 `Math.round(x * 10^n) / 10^n` 惯用法,消除 4 处重复
8
- * (ADR-017 枝叶层 2 次提取原则,3 次阈值已满足)。
7
+ * 替代 `Math.round(x * 10^n) / 10^n` 惯用法,消除 4 处重复。
9
8
  *
10
9
  * @param value - 待四舍五入的数值
11
10
  * @param decimals - 保留的小数位数(0~20,默认 2)
@@ -18,19 +17,36 @@ export function roundTo(value, decimals = 2) {
18
17
  const factor = 10 ** decimals;
19
18
  return Math.round(value * factor) / factor;
20
19
  }
21
- export function cosineSimilarity(a, b) {
22
- if (a.length !== b.length)
23
- return 0;
24
- let dot = 0;
25
- let normA = 0;
26
- let normB = 0;
27
- for (let i = 0; i < a.length; i++) {
28
- // QC-17 移除非空断言:循环条件保证索引有效,用 ?? 0 兜底(数学上 0 不影响点积)
29
- dot += (a[i] ?? 0) * (b[i] ?? 0);
30
- normA += (a[i] ?? 0) * (a[i] ?? 0);
31
- normB += (b[i] ?? 0) * (b[i] ?? 0);
32
- }
33
- const denominator = Math.sqrt(normA) * Math.sqrt(normB);
34
- return denominator === 0 ? 0 : dot / denominator;
20
+ /**
21
+ * 正整数解析(单一真源):缺省 / 非法 / ≤0 → undefined,否则返回 parseInt 结果。
22
+ *
23
+ * 供 `builtinToolHandlers`(read_file 分段 offset/limit)与 `toolResultCache`(去重主体)
24
+ * 共用——两处语义一致(「缺省 / 非法 / <1 一律视为缺省,默认值交给调用方」),
25
+ * 避免同一规则散落两处(legacy-contract-audit 重复实现)。
26
+ *
27
+ * @param v 输入(string | number 之外一律归 undefined;`"12px"` 这类前导数字按 parseInt 语义解析)
28
+ * @returns 正整数,或 undefined
29
+ */
30
+ export function positiveInt(v) {
31
+ const n = Number.parseInt(String(v), 10);
32
+ return Number.isNaN(n) || n < 1 ? undefined : n;
33
+ }
34
+ /**
35
+ * 工具 limit 参数解析 + 上限钳制(单一真源)
36
+ *
37
+ * 收口 builtinToolHandlers 三个工具(search_memories / trace_summary / list_sessions)
38
+ * 各自手写的「parseInt + NaN/负→默认值 + 超上限钳制」三份。语义与 positiveInt 一致:
39
+ * 非法输入回退默认值;合法但超上限则钳制到上限(各工具上限是自身契约,由调用方传入)。
40
+ *
41
+ * @param value 参数原始字符串(undefined 时直接回退默认值)
42
+ * @param defaultValue 非法 / 缺失时的回退值
43
+ * @param max 上限(钳制,应 ≥ defaultValue)
44
+ * @returns 解析后的 limit 值
45
+ */
46
+ export function parseLimit(value, defaultValue, max) {
47
+ if (value === undefined)
48
+ return Math.min(defaultValue, max);
49
+ const n = positiveInt(value);
50
+ return Math.min(n ?? defaultValue, max);
35
51
  }
36
52
  //# sourceMappingURL=math.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,QAAQ,GAAG,CAAC;IACjD,0CAA0C;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,EAAE,IAAI,QAAQ,CAAC;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,iDAAiD;QACjD,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,QAAQ,GAAG,CAAC;IACjD,0CAA0C;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,EAAE,IAAI,QAAQ,CAAC;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,CAAU;IACpC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,KAAyB,EAAE,YAAoB,EAAE,GAAW;IACrF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,YAAY,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC"}
@@ -1,14 +1,13 @@
1
1
  /**
2
2
  * 对象类型守卫工具函数
3
3
  *
4
- * 从 lockManager / projectRegistry / spriteConfig 提取的公共对象类型校验函数,
5
- * 消除跨模块重复的类型守卫代码(ADR-017 枝叶层 2 次提取原则)。
4
+ * 从多个模块提取的公共对象类型校验函数,
5
+ * 消除跨模块重复的类型守卫代码。
6
6
  */
7
7
  /**
8
8
  * 判断值是否为普通对象(非 null、非数组)
9
9
  *
10
10
  * 用于校验 JSON.parse 的结果,避免对非对象类型执行展开或属性访问。
11
- * 三处原私有实现完全一致(lockManager / projectRegistry / spriteConfig)。
12
11
  *
13
12
  * @param value 待校验的值
14
13
  * @returns true 表示是普通对象(类型收窄为 Record<string, unknown>)
@@ -1 +1 @@
1
- {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../src/utils/objects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E"}
1
+ {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../src/utils/objects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E"}
@@ -1,14 +1,13 @@
1
1
  /**
2
2
  * 对象类型守卫工具函数
3
3
  *
4
- * 从 lockManager / projectRegistry / spriteConfig 提取的公共对象类型校验函数,
5
- * 消除跨模块重复的类型守卫代码(ADR-017 枝叶层 2 次提取原则)。
4
+ * 从多个模块提取的公共对象类型校验函数,
5
+ * 消除跨模块重复的类型守卫代码。
6
6
  */
7
7
  /**
8
8
  * 判断值是否为普通对象(非 null、非数组)
9
9
  *
10
10
  * 用于校验 JSON.parse 的结果,避免对非对象类型执行展开或属性访问。
11
- * 三处原私有实现完全一致(lockManager / projectRegistry / spriteConfig)。
12
11
  *
13
12
  * @param value 待校验的值
14
13
  * @returns true 表示是普通对象(类型收窄为 Record<string, unknown>)
@@ -1 +1 @@
1
- {"version":3,"file":"objects.js","sourceRoot":"","sources":["../../src/utils/objects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
1
+ {"version":3,"file":"objects.js","sourceRoot":"","sources":["../../src/utils/objects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 召回默认值——单一真理源(记忆层与 agent 层共享)。
3
+ *
4
+ * 召回不设保底下限(无 `DEFAULT_MIN_FALLBACK`)——保底仅在「检查点恢复的温记忆召回」
5
+ * 场景有意义,该链路不在实现内。
6
+ */
7
+ /**
8
+ * 召回排除 source 默认值(空数组)——设定记忆(persona/rule/skill)归角色包、
9
+ * 记忆库不写入,不参与召回排除(memory-role-pack-boundary),此处为空默认。
10
+ *
11
+ * **唯一活性消费者 = `MemoryAdvisor.suggest()`**(关联推荐的 `excludeSources` 本地参数缺省值);
12
+ * 不存在同名配置管道 `config.recallExcludeSources`(ContextPreparer 侧)——`assembleContext`
13
+ * 从不读取该配置(死配置),勿因「两处同名」而误以为是一根链。
14
+ */
15
+ export declare const DEFAULT_RECALL_EXCLUDE_SOURCES: readonly string[];
16
+ //# sourceMappingURL=recallDefaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recallDefaults.d.ts","sourceRoot":"","sources":["../../src/utils/recallDefaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,EAAE,SAAS,MAAM,EAAO,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 召回默认值——单一真理源(记忆层与 agent 层共享)。
3
+ *
4
+ * 召回不设保底下限(无 `DEFAULT_MIN_FALLBACK`)——保底仅在「检查点恢复的温记忆召回」
5
+ * 场景有意义,该链路不在实现内。
6
+ */
7
+ /**
8
+ * 召回排除 source 默认值(空数组)——设定记忆(persona/rule/skill)归角色包、
9
+ * 记忆库不写入,不参与召回排除(memory-role-pack-boundary),此处为空默认。
10
+ *
11
+ * **唯一活性消费者 = `MemoryAdvisor.suggest()`**(关联推荐的 `excludeSources` 本地参数缺省值);
12
+ * 不存在同名配置管道 `config.recallExcludeSources`(ContextPreparer 侧)——`assembleContext`
13
+ * 从不读取该配置(死配置),勿因「两处同名」而误以为是一根链。
14
+ */
15
+ export const DEFAULT_RECALL_EXCLUDE_SOURCES = [];
16
+ //# sourceMappingURL=recallDefaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recallDefaults.js","sourceRoot":"","sources":["../../src/utils/recallDefaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAsB,EAAE,CAAC"}
@@ -1,45 +1,17 @@
1
1
  /**
2
- * 安全定时器工具 — 提供可追踪的生命周期管理
3
- *
4
- * 原生 setTimeout / setInterval 不跟踪定时器 ID,
5
- * 如果忘记清理可能导致内存泄漏。本模块提供轻量包装,
6
- * 统一管理定时器的创建和清理。
7
- */
8
- /**
9
- * 安全的 setTimeout 包装
10
- * 返回的 timer ID 可用于 clearSafeTimeout 清理
2
+ * 安全定时器工具——原生 setTimeout/setInterval 不跟踪 ID,忘记清理会内存泄漏;
3
+ * 本模块统一登记创建与清理,提供可追踪的生命周期管理。
11
4
  */
5
+ /** 安全 setTimeout:触发后自动从注册表移除;返回 timer ID */
12
6
  export declare function safeSetTimeout(callback: () => void, ms: number): ReturnType<typeof setTimeout>;
13
- /**
14
- * 安全的 setInterval 包装
15
- * 返回的 timer ID 可用于 clearSafeInterval 清理
16
- */
7
+ /** 安全 setInterval:周期定时器,返回 timer ID */
17
8
  export declare function safeSetInterval(callback: () => void, ms: number): ReturnType<typeof setInterval>;
18
- /**
19
- * 清理安全的 setTimeout
20
- */
9
+ /** 清理安全 setTimeout(同时从注册表移除) */
21
10
  export declare function clearSafeTimeout(id: ReturnType<typeof setTimeout> | null): void;
22
- /**
23
- * 清理安全的 setInterval
24
- */
11
+ /** 清理安全 setInterval(同时从注册表移除) */
25
12
  export declare function clearSafeInterval(id: ReturnType<typeof setInterval> | null): void;
26
- /**
27
- * 获取活跃定时器数量(仅供测试 + 调试用,验证 activeTimers 注册表清理)
28
- *
29
- * 场景:safeSetTimeout 触发后应自动从注册表移除;clearSafeTimeout/clearSafeInterval
30
- * 应立即从注册表移除。此函数用于直接断言注册表状态,而非仅通过回调触发间接验证。
31
- *
32
- * @returns 当前活跃定时器数量
33
- */
13
+ /** 获取活跃定时器数量(测试 + 调试用,验证注册表清理) */
34
14
  export declare function getActiveTimerCount(): number;
35
- /**
36
- * 清理所有活跃定时器(兜底清理机制)
37
- *
38
- * 场景:
39
- * - 测试隔离:每个测试 beforeEach 调用,确保 activeTimers 注册表无残留
40
- *
41
- * 注意:此函数会清理所有通过 safeSetTimeout/safeSetInterval 创建的定时器,
42
- * 包括尚未触发的 timeout 和正在重复的 interval。
43
- */
15
+ /** 清理所有活跃定时器(兜底,用于测试隔离,清理含未触发 timeout 与运行中 interval) */
44
16
  export declare function clearAllSafeTimers(): void;
45
17
  //# sourceMappingURL=safeTimer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"safeTimer.d.ts","sourceRoot":"","sources":["../../src/utils/safeTimer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,IAAI,EACpB,EAAE,EAAE,MAAM,GACT,UAAU,CAAC,OAAO,UAAU,CAAC,CAO/B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,IAAI,EACpB,EAAE,EAAE,MAAM,GACT,UAAU,CAAC,OAAO,WAAW,CAAC,CAIhC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,GAAG,IAAI,CAK/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,GAAG,IAAI,CAKjF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC"}
1
+ {"version":3,"file":"safeTimer.d.ts","sourceRoot":"","sources":["../../src/utils/safeTimer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,4CAA4C;AAC5C,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAO9F;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAIhG;AAED,gCAAgC;AAChC,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,GAAG,IAAI,CAK/E;AAED,iCAAiC;AACjC,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,GAAG,IAAI,CAKjF;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wDAAwD;AACxD,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC"}
@@ -1,16 +1,10 @@
1
1
  /**
2
- * 安全定时器工具 — 提供可追踪的生命周期管理
3
- *
4
- * 原生 setTimeout / setInterval 不跟踪定时器 ID,
5
- * 如果忘记清理可能导致内存泄漏。本模块提供轻量包装,
6
- * 统一管理定时器的创建和清理。
2
+ * 安全定时器工具——原生 setTimeout/setInterval 不跟踪 ID,忘记清理会内存泄漏;
3
+ * 本模块统一登记创建与清理,提供可追踪的生命周期管理。
7
4
  */
8
- /** 定时器注册表,用于跟踪所有活跃定时器 */
5
+ /** 所有活跃定时器注册表(供统一清理与调试断言) */
9
6
  const activeTimers = new Set();
10
- /**
11
- * 安全的 setTimeout 包装
12
- * 返回的 timer ID 可用于 clearSafeTimeout 清理
13
- */
7
+ /** 安全 setTimeout:触发后自动从注册表移除;返回 timer ID */
14
8
  export function safeSetTimeout(callback, ms) {
15
9
  const id = setTimeout(() => {
16
10
  activeTimers.delete(id);
@@ -19,53 +13,31 @@ export function safeSetTimeout(callback, ms) {
19
13
  activeTimers.add(id);
20
14
  return id;
21
15
  }
22
- /**
23
- * 安全的 setInterval 包装
24
- * 返回的 timer ID 可用于 clearSafeInterval 清理
25
- */
16
+ /** 安全 setInterval:周期定时器,返回 timer ID */
26
17
  export function safeSetInterval(callback, ms) {
27
18
  const id = setInterval(callback, ms);
28
19
  activeTimers.add(id);
29
20
  return id;
30
21
  }
31
- /**
32
- * 清理安全的 setTimeout
33
- */
22
+ /** 清理安全 setTimeout(同时从注册表移除) */
34
23
  export function clearSafeTimeout(id) {
35
24
  if (id !== null) {
36
25
  clearTimeout(id);
37
26
  activeTimers.delete(id);
38
27
  }
39
28
  }
40
- /**
41
- * 清理安全的 setInterval
42
- */
29
+ /** 清理安全 setInterval(同时从注册表移除) */
43
30
  export function clearSafeInterval(id) {
44
31
  if (id !== null) {
45
32
  clearInterval(id);
46
33
  activeTimers.delete(id);
47
34
  }
48
35
  }
49
- /**
50
- * 获取活跃定时器数量(仅供测试 + 调试用,验证 activeTimers 注册表清理)
51
- *
52
- * 场景:safeSetTimeout 触发后应自动从注册表移除;clearSafeTimeout/clearSafeInterval
53
- * 应立即从注册表移除。此函数用于直接断言注册表状态,而非仅通过回调触发间接验证。
54
- *
55
- * @returns 当前活跃定时器数量
56
- */
36
+ /** 获取活跃定时器数量(测试 + 调试用,验证注册表清理) */
57
37
  export function getActiveTimerCount() {
58
38
  return activeTimers.size;
59
39
  }
60
- /**
61
- * 清理所有活跃定时器(兜底清理机制)
62
- *
63
- * 场景:
64
- * - 测试隔离:每个测试 beforeEach 调用,确保 activeTimers 注册表无残留
65
- *
66
- * 注意:此函数会清理所有通过 safeSetTimeout/safeSetInterval 创建的定时器,
67
- * 包括尚未触发的 timeout 和正在重复的 interval。
68
- */
40
+ /** 清理所有活跃定时器(兜底,用于测试隔离,清理含未触发 timeout 与运行中 interval) */
69
41
  export function clearAllSafeTimers() {
70
42
  for (const id of activeTimers) {
71
43
  clearTimeout(id);
@@ -1 +1 @@
1
- {"version":3,"file":"safeTimer.js","sourceRoot":"","sources":["../../src/utils/safeTimer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yBAAyB;AACzB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkE,CAAC;AAE/F;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAoB,EACpB,EAAU;IAEV,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;QACzB,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,QAAQ,EAAE,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAoB,EACpB,EAAU;IAEV,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACrC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAwC;IACvE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAyC;IACzE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,YAAY,CAAC,IAAI,CAAC;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB;IAChC,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,aAAa,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IACD,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"safeTimer.js","sourceRoot":"","sources":["../../src/utils/safeTimer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6BAA6B;AAC7B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkE,CAAC;AAE/F,4CAA4C;AAC5C,MAAM,UAAU,cAAc,CAAC,QAAoB,EAAE,EAAU;IAC7D,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;QACzB,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,QAAQ,EAAE,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,eAAe,CAAC,QAAoB,EAAE,EAAU;IAC9D,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACrC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,gBAAgB,CAAC,EAAwC;IACvE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,iBAAiB,CAAC,EAAyC;IACzE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,mBAAmB;IACjC,OAAO,YAAY,CAAC,IAAI,CAAC;AAC3B,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,kBAAkB;IAChC,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,aAAa,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IACD,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC"}
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Markdown 目录扫描工具
3
3
  *
4
- * 从 PersonaManager / SkillManager 提取的公共目录扫描逻辑,
4
+ * 从 RolePackManager / SkillManager 提取的公共目录扫描逻辑,
5
5
  * 消除跨模块重复的"扫描 *.md → 解析 frontmatter → 提取字段"代码。
6
6
  *
7
- * 使用异步 I/O(与 FileStore / ToolExecutor 保持一致)。
7
+ * 使用异步 I/O(与 ToolExecutor 保持一致)。
8
8
  */
9
9
  /** 扫描结果条目(通用 frontmatter 解析产物) */
10
10
  export interface ScannedMarkdownEntry {
@@ -17,38 +17,118 @@ export interface ScannedMarkdownEntry {
17
17
  /** 文件绝对路径 */
18
18
  filePath: string;
19
19
  }
20
+ /** 技能主文件约定名(文件夹形态的唯一入口,SSOT:scanner 校验 + skillManager/rolePackManager 据此判定 L3 归属) */
21
+ export declare const SKILL_MAIN_FILE = "SKILL.md";
20
22
  /**
21
- * 扫描目录下的 *.md 文件,解析 frontmatter
23
+ * 判定技能是否「文件夹形态」(入口为 SKILL.md)——单一真理源(SSOT)。
22
24
  *
23
- * 排除规则:
25
+ * 主流(Agent Skills 开放标准):技能 = 文件夹 + 强制 SKILL.md,L3(resources/ scripts/)
26
+ * 仅归属于文件夹形态;顶层裸 .md 是轻量单文件兼容形态(纯 L1/L2),不拥有 L3。
27
+ * skillManager(经 skillLayer3)与 rolePackManager 均复用此判定,杜绝重复硬编码主文件名判定。
28
+ *
29
+ * @param filePath 技能文件绝对路径(SKILL.md 或裸 .md)
30
+ * @returns true 表示文件夹形态(拥有 L3 资源/脚本归属权)
31
+ */
32
+ export declare function isFolderFormSkill(filePath: string): boolean;
33
+ /**
34
+ * 扫描目录下的 Markdown 文件,解析 frontmatter
35
+ *
36
+ * 支持两种形式:
37
+ * 1. 单文件形式:直接子项下的 *.md 文件
38
+ * 2. 文件夹形式:子目录中的 SKILL.md(Claude Code 标准)
39
+ *
40
+ * 排除规则(单文件):
24
41
  * - 文件名以 `.` 开头的隐藏文件
25
42
  * - 文件名以 `_` 前缀的私有文件
26
43
  * - README.md / CHANGELOG.md / LICENSE
27
44
  *
45
+ * 排除规则(文件夹):
46
+ * - 目录名以 `.` 开头的隐藏目录
47
+ * - 目录名以 `_` 开头的私有目录
48
+ * - 子目录内无技能主文件(SKILL.md,大小写不敏感判定)则跳过
49
+ *
28
50
  * @param dir 目录路径
29
51
  * @returns 解析后的条目列表
30
52
  */
31
53
  export declare function scanMarkdownDir(dir: string): Promise<ScannedMarkdownEntry[]>;
32
54
  /**
33
- * 从 frontmatter 中解析逗号分隔的关键词列表
55
+ * 解析目录路径:如果 configDir 存在则 resolve 子目录,否则返回 undefined
56
+ */
57
+ export declare function resolveSubdir(configDir: string | undefined, sub: string): string | undefined;
58
+ /** 资源主目录(memora 自有约定;条目未标 subdir 时路径解析的回退基目录) */
59
+ export declare const DEFAULT_RESOURCE_SUBDIR = "resources";
60
+ /** 资源兼容目录(TRAE / Agent Skills 主流辅助文档目录,兼容主流) */
61
+ export declare const REFERENCES_SUBDIR = "references";
62
+ /** 脚本目录 */
63
+ export declare const SCRIPTS_SUBDIR = "scripts";
64
+ /** L3 资源来源子目录(取值从常量派生,防类型与字面量两处各写) */
65
+ export type ResourceSubdir = typeof DEFAULT_RESOURCE_SUBDIR | typeof REFERENCES_SUBDIR;
66
+ /**
67
+ * 脚本运行时(SSOT 单一来源:值域由 SCRIPT_RUNTIME_MAP 语义派生,本类型单点定义)。
68
+ * role-pack/skill 层的脚本运行时字段经此引用,勿在别处复写字面量联合。
69
+ */
70
+ export type ScriptRuntime = 'node' | 'python' | 'shell';
71
+ /** L3 资源/脚本发现结果 */
72
+ export interface DiscoveredLayer3 {
73
+ /** 资源列表(resources/ 与 references/ 两个目录合并,条目带来源子目录) */
74
+ resources: Array<{
75
+ path: string;
76
+ size: number;
77
+ subdir: ResourceSubdir;
78
+ }>;
79
+ /** 脚本列表(scripts/ 目录下的文件) */
80
+ scripts: Array<{
81
+ path: string;
82
+ runtime: ScriptRuntime;
83
+ size: number;
84
+ }>;
85
+ }
86
+ /**
87
+ * 可执行脚本扩展名 → runtime 映射(SSOT 单一真源,供 rolePackManager / toolExecutor 共用)。
88
+ *
89
+ * '.ts' 语义声明(唯一一处):node 无法直接解析 TS——映射仅作兜底推断,实际可用性
90
+ * 取决于宿主执行器是否具备转译能力(如 vscode codeExecutor 仅别名 .js/.mjs/.cjs)。
91
+ *
92
+ * '.bat'/'.cmd' 语义声明:Windows 批处理——shell 档在 win32 派发
93
+ * `cmd /c <path>`(skillScriptRunner.resolveCommand),批处理是 cmd 的原生可执行类型
94
+ * (实测 status=0、stdout 正确)。**缺映射时会被 toolExecutor 兜底成 node 而必炸**
95
+ * (拿批处理语法喂 node),故必须显式归入 shell 档。POSIX 下 `sh <path>` 跑批处理无
96
+ * 意义,但**不额外加平台分支**——跨平台同表比按平台分叉简单,且 POSIX 侧不会产出 .bat。
97
+ */
98
+ export declare const SCRIPT_RUNTIME_MAP: Readonly<Record<string, ScriptRuntime>>;
99
+ /**
100
+ * 按脚本扩展名推断 runtime(未知扩展名返回 undefined,缺省策略由调用方自定:
101
+ * toolExecutor 兜底 node / rolePackManager 返回 null / 扫描跳过)。
34
102
  *
35
- * @param fm frontmatter 键值对
36
- * @param key 关键词字段名(默认 'keywords')
37
- * @returns 关键词数组
103
+ * @param ext 小写扩展名(含点,如 '.py')
38
104
  */
39
- export declare function parseKeywords(fm: Record<string, string>, key?: string): string[];
105
+ export declare function inferRuntimeFromExt(ext: string): ScriptRuntime | undefined;
40
106
  /**
41
- * 从 frontmatter 中解析正则触发器
107
+ * 发现技能目录下的 L3 资源(resources/ + references/)和脚本(scripts/)
42
108
  *
43
- * 支持格式:/pattern/flags 或纯 pattern(默认 'i' flag)
109
+ * 三级渐进披露 L3 层扫描:
110
+ * - resources/ 目录下的文件 → 资源列表(memora 自有约定)
111
+ * - references/ 目录下的文件 → 资源列表(TRAE / Agent Skills 主流辅助文档目录,兼容主流)
112
+ * - scripts/ 目录下的可执行文件 → 脚本列表(按扩展名推断 runtime)
113
+ * 资源条目统一带 subdir 来源,read_resource 据此选择读取基目录。
44
114
  *
45
- * @param fm frontmatter 键值对
46
- * @param key 触发器字段名(默认 'trigger')
47
- * @returns 正则表达式,解析失败返回 undefined
115
+ * @param skillDir 技能目录路径(如 configDir/skills/my-skill/)
116
+ * @returns 发现的资源和脚本列表
48
117
  */
49
- export declare function parseTrigger(fm: Record<string, string>, key?: string): RegExp | undefined;
118
+ export declare function discoverLayer3(skillDir: string): Promise<DiscoveredLayer3>;
50
119
  /**
51
- * 解析目录路径:如果 configDir 存在则 resolve 子目录,否则返回 undefined
120
+ * 路径穿越防护:检查子路径是否在基目录内
121
+ *
122
+ * 将 base + sub 拼接后 resolve 为绝对路径,检查其是否以 base 为边界前缀。
123
+ * 防止 LLM 通过 `../` 等手段读取/执行技能目录外的文件。
124
+ *
125
+ * 边界前缀(追加 sep):防兄弟目录绕过——`base=/x/skills/myskill`,
126
+ * 若不追加 `sep`,`/x/skills/myskill-evil/f` 会以 `myskill` 为前缀误放行。
127
+ * 与 SecurityGuard.assertPathAllowed 的 `allowedRoot + sep` 同标准(防前缀绕过统一事实)。
128
+ *
129
+ * @param base 基目录绝对路径
130
+ * @param sub 相对子路径(可能含 `../`)
131
+ * @returns 安全的完整路径(已 resolve),穿越时返回 null
52
132
  */
53
- export declare function resolveSubdir(configDir: string | undefined, sub: string): string | undefined;
133
+ export declare function resolveSafePath(base: string, sub: string): string | null;
54
134
  //# sourceMappingURL=scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/utils/scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,kCAAkC;AAClC,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA0ClF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,SAAa,GAAG,MAAM,EAAE,CAOpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,SAAY,GAAG,MAAM,GAAG,SAAS,CAgB5F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG5F"}
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/utils/scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,kCAAkC;AAClC,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qFAAqF;AACrF,eAAO,MAAM,eAAe,aAAa,CAAC;AAE1C;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAK3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA0FlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG5F;AAMD,iDAAiD;AACjD,eAAO,MAAM,uBAAuB,cAAc,CAAC;AACnD,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,WAAW;AACX,eAAO,MAAM,cAAc,YAAY,CAAC;AAExC,sCAAsC;AACtC,MAAM,MAAM,cAAc,GAAG,OAAO,uBAAuB,GAAG,OAAO,iBAAiB,CAAC;AAEvF;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExD,mBAAmB;AACnB,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IACzE,4BAA4B;IAC5B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAWtE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE1E;AAmBD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkBhF;AAmGD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxE"}