@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,271 @@
1
+ /**
2
+ * 技能脚本执行器 — L3 脚本运行时。
3
+ * 三级渐进披露 L3:脚本在宿主环境(隔离子进程)执行,源代码不入 LLM 上下文,
4
+ * 只有执行结果(stdout/stderr)作为工具返回值注入。
5
+ * 安全模型:继承宿主用户环境变量(用户会话环境——脚本可读项目所需配置与用户 shell 环境;
6
+ * 密钥默认经 SecretStorage→配置对象注入、不经 env(宿主默认路径);env 回退配置模式
7
+ * (MEMORA_API_KEY 等,security_rules 支持)下 key 在进程 env、对脚本可见——owner 信任
8
+ * 模型(默认自动批准)+ 脚本来源审阅(判据 B)为边界,视同用户本地 shell 语义)+ 超时
9
+ * 限制(默认 60s,最大 600s——适配脚本内 API 调用/批处理长耗时)+ 白名单 runtime(node/python/shell)+ Windows 隐藏窗口
10
+ * (windowsHide:true,不弹 conhost)。
11
+ * 注:当前为简单子进程执行,非完整沙箱(文件系统/网络隔离由宿主在生产环境实现)。
12
+ */
13
+ import * as childProcess from 'node:child_process';
14
+ import { logger } from '../logging/logger.js';
15
+ /** 默认执行超时(毫秒):脚本常用交互/构建任务在 1 分钟内完成;超长任务由 LLM 传 timeoutMs */
16
+ const DEFAULT_TIMEOUT_MS = 60_000;
17
+ /** 最大执行超时(毫秒):适配脚本内 API 调用/批处理等长耗时任务 */
18
+ const MAX_TIMEOUT_MS = 600_000;
19
+ /**
20
+ * 超时钳制真理源(SSOT):实际超时 = clamp(timeoutMs, 1s, MAX_TIMEOUT_MS)
21
+ *
22
+ * 执行侧(spawn 的 timeout 选项)与文案侧(formatScriptResult 的「超过 Ns」)必须同源,
23
+ * 否则两处漂移会重现「实际 60s 超时却告知超过 600s」的谎报。
24
+ *
25
+ * @param timeoutMs 调用方传入的超时(毫秒;toolExecutor 由 LLM 的 timeout_ms 秒值 ×1000 得到)
26
+ * @returns 钳制后的实际超时(毫秒,落在 [1_000, MAX_TIMEOUT_MS] 区间内)
27
+ */
28
+ function normalizeTimeoutMs(timeoutMs) {
29
+ return Math.min(Math.max(timeoutMs, 1_000), MAX_TIMEOUT_MS);
30
+ }
31
+ /**
32
+ * Windows 平台 shell 档脚本守卫
33
+ *
34
+ * 缺陷事实链:`.sh` → runtime `shell`(scanner.SCRIPT_RUNTIME_MAP)→ win32 派发
35
+ * `cmd /c <path>`(resolveCommand shell 分支)——而 `.sh` 不是 cmd 原生可执行类型
36
+ * (只有 `.bat`/`.cmd` 是),命令退到「Windows 关联程序」路径:status=0 但
37
+ * stdout/stderr 全空(静默空跑)。`formatExecutionResult` 见 status=0 向模型报
38
+ * 「成功」→ 模型认定脚本已跑完 → 静默失败。
39
+ * `.ps1` 同理:`cmd /c` 不起 PowerShell,同样静默空跑(不新增 powershell runtime 档——
40
+ * 那是新能力,留待宿主 shell 选型一并设计)。
41
+ *
42
+ * 本守卫改的是「喂给判据的事实」(Win 下喂进 spawn 的 `cmd /c foo.sh` 只会制造假
43
+ * status=0),非判据本身——属止血。POSIX 不受影响(`sh <path>` 合法)。
44
+ *
45
+ * @param scriptPath 脚本路径
46
+ * @param runtime 运行时(node/python/shell)
47
+ * @param platform 当前平台(win32 才拦截;参数化便于测试)
48
+ * @returns 命中拦截返回显式错误文案(含替代方案),否则 null
49
+ */
50
+ export function guardWindowsShellScript(scriptPath, runtime, platform) {
51
+ if (platform !== 'win32' || runtime !== 'shell')
52
+ return null;
53
+ const ext = scriptPath.slice(scriptPath.lastIndexOf('.')).toLowerCase();
54
+ // cmd 原生可执行类型:批处理文件(与 scanner SCRIPT_RUNTIME_MAP 注释同源,
55
+ // win32 派发 `cmd /c` 实测 status=0 + 输出正确)
56
+ if (ext === '.bat' || ext === '.cmd')
57
+ return null;
58
+ return (`Windows 平台 shell 档仅支持 .bat/.cmd(cmd 原生可执行类型)。当前脚本扩展名 "${ext}" ` +
59
+ (ext === '.ps1'
60
+ ? '(.ps1 静默空跑:cmd /c 不起 PowerShell,且内核未接入 PowerShell runtime档)。'
61
+ : '(shell 档在 Windows 依赖 sh/bash 解释器——本机无 Git Bash 时会静默空跑:退出码 0 但 stdout/stderr 全空,不是执行成功)。') +
62
+ '请改用跨平台脚本 .mjs/.js/.py;确需 Windows 批处理用 .bat/.cmd。');
63
+ }
64
+ /**
65
+ * 执行技能脚本:在隔离子进程中运行,收集 stdout/stderr/exitCode/timedOut
66
+ *
67
+ * @param scriptPath 脚本绝对路径
68
+ * @param runtime 运行时(node/python/shell 白名单三档)
69
+ * @param args 传给脚本的参数数组
70
+ * @param timeoutMs 超时(毫秒,限制在 [1s, MAX_TIMEOUT_MS] 内)
71
+ * @param cwd 子进程工作目录(可选;run_project_script 以项目根为 cwd,
72
+ * 使项目脚本可加载项目本地依赖/相对数据文件)
73
+ * @param nodePath node 可执行文件路径(可选,缺省 'node' 走 PATH)——供宿主注入真实
74
+ * node 路径用。
75
+ * ⚠️ 宿主尚未接入——`hosts/memora-vscode` 零注入点,故实际恒走缺省 `'node'`。
76
+ * 且真解不止「传个路径」:Electron 宿主(VS Code)的
77
+ * `process.execPath` 指向应用二进制,需配 `ELECTRON_RUN_AS_NODE` 一类环境变量才能以
78
+ * node 语义执行 `.mjs` **文件**,而内核只收路径、不收环境(边界铁律:内核不持有平台知识)。
79
+ * ⇒ 真解 = 接口扩展(宿主上报运行时环境,内核零解释转发),留待与宿主 shell 选型同批。
80
+ * 此处保留该可选参数:接入点已就绪,扩展时无须再动调用链。
81
+ */
82
+ export async function runSkillScript(scriptPath, runtime, args = [], timeoutMs = DEFAULT_TIMEOUT_MS, cwd, nodePath) {
83
+ // win32 + shell + 非 .bat/.cmd → 在 spawn 前显式拒绝,
84
+ // 不让假 status=0 进入 formatExecutionResult(喂给判据的事实必须为真)
85
+ const guardError = guardWindowsShellScript(scriptPath, runtime, process.platform);
86
+ if (guardError) {
87
+ return { stdout: '', stderr: guardError, exitCode: -1, timedOut: false };
88
+ }
89
+ // 超时限制在 [1s, MAX_TIMEOUT_MS] 内(与超时文案同源,见 normalizeTimeoutMs)
90
+ const effectiveTimeout = normalizeTimeoutMs(timeoutMs);
91
+ const { command, args: cmdArgs } = resolveCommand(runtime, scriptPath, args, nodePath);
92
+ /**
93
+ * 单次子进程执行(spawn + 输出收集)。
94
+ *
95
+ * @returns 执行结果 + enoent 标记(命令不存在 → 供调用方判定 L2 fallback 重试)
96
+ */
97
+ const runOnce = (cmd, runArgs) => new Promise((resolve) => {
98
+ /** ENOENT 标记:spawn 命令不存在(如 Windows 缺 python 命令,仅 python runtime 场景用) */
99
+ let enoent = false;
100
+ let child;
101
+ try {
102
+ child = childProcess.spawn(cmd, runArgs, {
103
+ timeout: effectiveTimeout,
104
+ // 继承宿主用户环境变量(不走 PATH/HOME 最小白名单——
105
+ // 项目脚本读用户环境(API KEY/PATH/工作区变量)是合理需求;密钥默认经
106
+ // SecretStorage→config 不经 env,env 回退模式下 key 在 env 属 owner 信任
107
+ // 语义(见文件头安全模型)。对齐宿主 codeExecutor 持久会话环境语义)
108
+ // 禁子进程彩色输出:FORCE_COLOR:0/NO_COLOR:1 源头禁色(对齐宿主 codeExecutor
109
+ // 同构);回流净化由 toolExecutor sanitizeExternalText 兜底剥残留 ANSI——
110
+ // 源头禁根因 + 通用防御两层不冲突
111
+ env: { ...process.env, FORCE_COLOR: '0', NO_COLOR: '1' },
112
+ stdio: ['ignore', 'pipe', 'pipe'],
113
+ // 隐藏子进程窗口(Windows):不传则每次执行弹 conhost 黑框(对齐宿主
114
+ // codeExecutor 既有 windowsHide 语义 + 大厂仅隐藏子进程回流输出共识)
115
+ windowsHide: true,
116
+ // cwd 缺省时由 node 决定(当前进程目录);仅显式传入时指定
117
+ ...(cwd ? { cwd } : {}),
118
+ });
119
+ }
120
+ catch (err) {
121
+ logger.error({ scriptPath, runtime, err }, '启动脚本进程失败');
122
+ resolve({
123
+ stdout: '',
124
+ stderr: `启动失败: ${err.message}`,
125
+ exitCode: -1,
126
+ timedOut: false,
127
+ enoent: false,
128
+ });
129
+ return;
130
+ }
131
+ let stdout = '';
132
+ let stderr = '';
133
+ let timedOut = false;
134
+ child.stdout?.on('data', (data) => {
135
+ stdout += data.toString('utf-8');
136
+ });
137
+ child.stderr?.on('data', (data) => {
138
+ stderr += data.toString('utf-8');
139
+ });
140
+ child.on('error', (err) => {
141
+ // ENOENT = 命令不存在(Windows python 9009 场景:现代 Python 只装 py 启动器)
142
+ // 记标记供 L2 fallback,其余错误原样返回
143
+ enoent = err.code === 'ENOENT';
144
+ logger.error({ scriptPath, err }, '脚本进程执行错误');
145
+ resolve({ stdout, stderr: stderr || String(err), exitCode: -1, timedOut: false, enoent });
146
+ });
147
+ child.on('close', (code, signal) => {
148
+ if (signal === 'SIGTERM' || signal === 'SIGKILL') {
149
+ timedOut = true;
150
+ logger.warn({ scriptPath, effectiveTimeout }, '脚本执行超时,已被终止');
151
+ }
152
+ resolve({
153
+ stdout,
154
+ stderr,
155
+ exitCode: code ?? 0,
156
+ timedOut,
157
+ enoent,
158
+ });
159
+ });
160
+ });
161
+ const result = await runOnce(command, cmdArgs);
162
+ // Windows python 不可用兜底链。python 命令在本机
163
+ // 不可用有两种形态:① spawn ENOENT(现代 Python 只装 py 启动器、无 python 命令);
164
+ // ② 退出码 9009(spawn 命中 Windows Store 空壳启动器 python.exe,它启动即退出 9009;
165
+ // 非 ENOENT,故不能只看 enoent 标记)。命中即在两个候选解释器间逐级替换重试:
166
+ // ① `py -3`(py 启动器)② `cmd /c python`(shell 派发——cmd 按 PATHEXT 解析 .bat shim,
167
+ // pyenv/conda 的 python.bat 由此生效;原生 spawn 不解析 .bat 的跨层缺环在此补上)。
168
+ if (shouldFallbackPythonToPy(runtime, process.platform) &&
169
+ isPythonUnavailable(result, process.platform)) {
170
+ // ① py 启动器重试:任一成功(上已判定不可用、此命令=解释器本体)即返回
171
+ const pyResult = await runOnce('py', ['-3', scriptPath, ...args]);
172
+ if (!isPythonUnavailable(pyResult, process.platform)) {
173
+ return pyResult;
174
+ }
175
+ // ② shell 派发兜底:cmd /c python —— 经 cmd 的 PATHEXT 解析让 pyenv/conda shim 生效
176
+ return await runOnce('cmd', ['/c', 'python', scriptPath, ...args]);
177
+ }
178
+ return result;
179
+ }
180
+ /**
181
+ * 兜底判定:python runtime 在 Windows 下进入兜底链(纯函数,平台参数化可测)
182
+ *
183
+ * @param runtime 脚本运行时
184
+ * @param platform 当前平台(process.platform;参数化便于测试)
185
+ * @returns 是否应进入「py -3 → cmd /c python」兜底链
186
+ */
187
+ export function shouldFallbackPythonToPy(runtime, platform) {
188
+ return runtime === 'python' && platform === 'win32';
189
+ }
190
+ /**
191
+ * python 是否不可用(判定「要不要继续走兜底链」)
192
+ *
193
+ * 两种失败形态任一命中即不可用:
194
+ * ① enoent —— spawn 未找到 python 命令(PATH 缺 python / 只装 py 启动器)
195
+ * ② exitCode 9009 —— spawn 命中 Windows Store 空壳启动器 python.exe,它非文件缺失、
196
+ * 而是启动后立即以 9009(Windows「命令未找到」)退出。此形态 spawn 不报 ENOENT、
197
+ * `enoent` 标记为 false,必须靠退出码识别,否则 python 被误判「执行失败」而非「不可用」。
198
+ *
199
+ * @param result 单次执行结果(含 enoent/exitCode 标记)
200
+ * @param platform 当前平台(win32 之外的平台不判 9009——非 Windows「命令未找到」语义)
201
+ */
202
+ export function isPythonUnavailable(result, platform) {
203
+ if (platform !== 'win32')
204
+ return result.enoent;
205
+ return result.enoent || result.exitCode === 9009;
206
+ }
207
+ /**
208
+ * 根据 runtime 解析执行命令:node/python 直接执行,shell 依平台用 cmd /c(Windows)或 sh -c
209
+ *
210
+ * @param nodePath node 可执行文件路径(可选):缺省 'node'(走 PATH 查找)。
211
+ * 供给方(宿主)可注入真实 node 路径(如 VS Code 内置 node / 用户配置的 node),
212
+ * 避免「系统无独立 node → .js/.mjs 技能脚本 ENOENT」。
213
+ */
214
+ function resolveCommand(runtime, scriptPath, args, nodePath) {
215
+ switch (runtime) {
216
+ case 'node':
217
+ return { command: nodePath ?? 'node', args: [scriptPath, ...args] };
218
+ case 'python':
219
+ return { command: 'python', args: [scriptPath, ...args] };
220
+ case 'shell':
221
+ // Windows 用 cmd /c,其余平台用 sh 直接解释脚本文件
222
+ // 注意:用 sh <scriptPath> 而非 sh -c(-c 把路径当命令执行,依赖文件可执行位,POSIX 下无 chmod 会报 126)
223
+ if (process.platform === 'win32') {
224
+ return { command: 'cmd', args: ['/c', scriptPath, ...args] };
225
+ }
226
+ return { command: 'sh', args: [scriptPath, ...args] };
227
+ default:
228
+ return { command: scriptPath, args };
229
+ }
230
+ }
231
+ /**
232
+ * 执行结果三态格式化(run_skill_script 与 run_code 共用的格式化真理源)
233
+ *
234
+ * 超时 / 非零退出码 / 成功三态;前缀与文案由 labels 定制,成功分支统一
235
+ * 「无输出兜底 + stderr 附加」。stdout/stderr 须由调用方先行净化。
236
+ *
237
+ * @param result 执行结果
238
+ * @param labels 三态前缀标签与详情文案
239
+ * @returns 格式化后的可读字符串(供工具返回值注入 LLM 上下文)
240
+ */
241
+ export function formatExecutionResult(result, labels) {
242
+ if (result.timedOut) {
243
+ return `[${labels.kind}_TIMEOUT] ${labels.timeoutDetail}\nstdout: ${result.stdout}\nstderr: ${result.stderr}`;
244
+ }
245
+ if (result.exitCode !== 0) {
246
+ return `[${labels.kind}_ERROR] ${labels.errorDetail}(退出码: ${result.exitCode})\nstdout: ${result.stdout}\nstderr: ${result.stderr}`;
247
+ }
248
+ // 成功:优先 stdout,stderr 附加
249
+ const output = result.stdout || '(无输出)';
250
+ if (result.stderr) {
251
+ return `${output}\n[stderr] ${result.stderr}`;
252
+ }
253
+ return output;
254
+ }
255
+ /**
256
+ * 格式化脚本执行结果为可读字符串(供 tool 返回值):formatExecutionResult 的 SCRIPT 变体
257
+ *
258
+ * 超时文案的「超过 Ns」取本次**实际**超时(经 normalizeTimeoutMs 钳制),不再恒写上限 600s:
259
+ * 默认 60s 超时却报「超过 600s」是对 LLM 的谎报,会诱导它盲目调大 timeout_ms 重试。
260
+ *
261
+ * @param result 执行结果
262
+ * @param timeoutMs 本次实际超时(毫秒);省略则用 DEFAULT_TIMEOUT_MS(与执行侧默认同源)
263
+ */
264
+ export function formatScriptResult(result, timeoutMs = DEFAULT_TIMEOUT_MS) {
265
+ return formatExecutionResult(result, {
266
+ kind: 'SCRIPT',
267
+ timeoutDetail: `脚本执行超时(超过 ${Math.round(normalizeTimeoutMs(timeoutMs) / 1000)}s)`,
268
+ errorDetail: '脚本执行失败',
269
+ });
270
+ }
271
+ //# sourceMappingURL=skillScriptRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillScriptRunner.js","sourceRoot":"","sources":["../../src/skill/skillScriptRunner.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,90 @@
1
1
  /**
2
- * 技能模块类型定义
2
+ * 技能模块类型定义 — 三级渐进披露
3
+ *
4
+ * L1 元数据:name + description(必填,渐进披露唯一激活依据)→ 常驻 system prompt(对齐主流:仅两字段)
5
+ * L2 正文:content(SKILL.md 全文)→ read_skill 按需加载
6
+ * L3 资源/脚本:resources + references + scripts → read_resource / run_skill_script 按需调用
3
7
  */
4
- /** 技能条目(从 skills/*.md 解析) */
8
+ import type { ResourceSubdir, ScriptRuntime } from '../utils/scanner.js';
9
+ /** L3 资源条目(resources/ 或 references/ 目录下的参考文件) */
10
+ export interface SkillResource {
11
+ /** 资源相对路径(相对技能目录根,如 "resources/api-spec.md") */
12
+ path: string;
13
+ /** 资源描述(可选,供 L1 清单提示) */
14
+ description?: string;
15
+ /** 文件大小(字节),用于判断是否需要分块读取 */
16
+ size?: number;
17
+ /**
18
+ * 资源来源子目录(resources / references)。
19
+ * references/ 为 TRAE / Agent Skills 主流辅助文档目录(兼容主流),read_resource 据此选择读取基目录。
20
+ * 取值 SSOT 在 `utils/scanner`(目录名常量派生),此处只引用类型不重复字面量。
21
+ */
22
+ subdir?: ResourceSubdir;
23
+ }
24
+ /** L3 脚本条目(scripts/ 目录下的可执行脚本) */
25
+ export interface SkillScript {
26
+ /** 脚本相对路径(相对技能目录根,如 "scripts/lint.ts") */
27
+ path: string;
28
+ /** 运行时(由目录扫描按扩展名推断,SSOT 在 utils/scanner.SCRIPT_RUNTIME_MAP) */
29
+ runtime: ScriptRuntime;
30
+ /** 脚本描述(可选) */
31
+ description?: string;
32
+ /**
33
+ * 脚本文件大小(字节),由 `utils/scanner.discoverLayer3` 发现时产出
34
+ * (经 skillLayer3.projectDiscoveredLayer3 投影写入)。
35
+ *
36
+ * 内核当前无读取方(`resources.size` 才有:`agent/assembler.ts` 的 list_resources 回调输出);
37
+ * 保留该字段是为让「L3 投影」在脚本侧与资源侧同构,不丢已发现的事实。
38
+ */
39
+ size?: number;
40
+ }
41
+ /** L3 层数据(资源 + 脚本,可选) */
42
+ export interface SkillLayer3 {
43
+ /** 资源列表 */
44
+ resources: SkillResource[];
45
+ /** 脚本列表 */
46
+ scripts: SkillScript[];
47
+ }
48
+ /** 技能条目(从 skills/*.md 或 skills/<dir>/SKILL.md 解析) */
5
49
  export interface SkillEntry {
6
- /** 技能名(文件名去 .md) */
50
+ /** 技能名(文件名去 .md,或目录名) */
7
51
  name: string;
8
- /** 触发关键词列表 */
9
- keywords: string[];
10
- /** 触发正则(可选,优先级高于 keywords) */
11
- trigger?: RegExp;
12
52
  /** 技能描述(可选) */
13
53
  description?: string;
14
- /** 技能 prompt 正文 */
54
+ /** 技能 prompt 正文(L2 内容) */
15
55
  content: string;
16
56
  /** 来源路径 */
17
57
  filePath: string;
18
58
  /**
19
59
  * 来源层(agent / project)
20
60
  *
21
- * skillManager 写入(project 层扫描),精灵宿主通过 systemHandlers 读取
22
- * 并在 settingsPanelManager 中渲染"全局/项目"标签。
61
+ * skillManager 写入(project 层扫描)。
62
+ * ⚠️ 展示语义不由本字段单独决定:宿主以 filePath 前缀为主判据,
63
+ * 本字段仅在无路径/未命中时兜底(project → 用户源,agent → 内置源)。
23
64
  */
24
65
  layer: 'agent' | 'project';
66
+ /**
67
+ * L3 层数据(资源 + 脚本,可选)
68
+ *
69
+ * 当技能目录包含 resources/ 或 scripts/ 时自动填充。
70
+ * 三级渐进披露:L3 内容不进 system prompt,由 read_resource / run_skill_script 按需调用。
71
+ */
72
+ layer3?: SkillLayer3;
73
+ }
74
+ /** 技能校验单条问题(写→验→用闭环) */
75
+ export interface SkillIssue {
76
+ /** 级别:error=不可生效 / warning=可加载但变弱 */
77
+ level: 'error' | 'warning';
78
+ /** 问题归属字段(frontmatter/description/layer/body/file) */
79
+ field?: string;
80
+ /** 人类可读问题描述(说明影响,供 UI 错误定位) */
81
+ message: string;
25
82
  }
26
- /** 技能匹配结果 */
27
- export interface SkillMatch {
28
- /** 匹配的技能 */
29
- skill: SkillEntry;
30
- /** 匹配得分(0-1,用于排序) */
31
- score: number;
83
+ /** 技能校验结果(单一入口 validateFile 返回;UI 据此叠加健康徽章 + 错误定位) */
84
+ export interface SkillValidation {
85
+ /** 是否可用(无 error 即 true;warning 不阻断) */
86
+ ok: boolean;
87
+ /** 问题清单(error + warning) */
88
+ issues: SkillIssue[];
32
89
  }
33
90
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skill/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5B;AAED,aAAa;AACb,MAAM,WAAW,UAAU;IACzB,YAAY;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skill/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExE,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,yBAAyB;AACzB,MAAM,WAAW,WAAW;IAC1B,WAAW;IACX,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,WAAW;IACX,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wBAAwB;AACxB,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,4BAA4B;IAC5B,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB"}
@@ -1,5 +1,9 @@
1
1
  /**
2
- * 技能模块类型定义
2
+ * 技能模块类型定义 — 三级渐进披露
3
+ *
4
+ * L1 元数据:name + description(必填,渐进披露唯一激活依据)→ 常驻 system prompt(对齐主流:仅两字段)
5
+ * L2 正文:content(SKILL.md 全文)→ read_skill 按需加载
6
+ * L3 资源/脚本:resources + references + scripts → read_resource / run_skill_script 按需调用
3
7
  */
4
8
  export {};
5
9
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skill/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skill/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -4,21 +4,20 @@
4
4
  * 职责:
5
5
  * - 提供通用的数组排序、去重、拷贝等纯函数工具
6
6
  *
7
- * 设计原则(ADR-017 枝叶层 2 次提取):
7
+ * 设计原则:
8
8
  * - 同一模式在 2+ 文件出现时提取到此处
9
9
  * - 纯函数,零依赖,可被任何内核模块安全导入
10
10
  */
11
11
  /**
12
- * 按 score 字段降序排序的比较函数
12
+ * 按 accessedAt 字段降序排序(最近使用优先)的比较函数
13
13
  *
14
- * 用于记忆/角色/技能等带 score 字段的排序场景。
15
- * 9 处 `.sort((a, b) => b.score - a.score)` 的统一提取(ADR-017 枝叶层 2 次提取)。
14
+ * 使用轨迹唯一事实源为 accessedAt;采集/推荐等需要「采样 top-N」的场景统一按 accessedAt 降序。
16
15
  *
17
16
  * @param a 前一个元素
18
17
  * @param b 后一个元素
19
18
  * @returns 负数表示 a 排前,正数表示 b 排前
20
19
  */
21
- export declare function byScoreDesc<T extends {
22
- score: number;
20
+ export declare function byAccessedDesc<T extends {
21
+ accessedAt: string;
23
22
  }>(a: T, b: T): number;
24
23
  //# sourceMappingURL=array.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAE3E"}
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAGnF"}
@@ -4,21 +4,21 @@
4
4
  * 职责:
5
5
  * - 提供通用的数组排序、去重、拷贝等纯函数工具
6
6
  *
7
- * 设计原则(ADR-017 枝叶层 2 次提取):
7
+ * 设计原则:
8
8
  * - 同一模式在 2+ 文件出现时提取到此处
9
9
  * - 纯函数,零依赖,可被任何内核模块安全导入
10
10
  */
11
11
  /**
12
- * 按 score 字段降序排序的比较函数
12
+ * 按 accessedAt 字段降序排序(最近使用优先)的比较函数
13
13
  *
14
- * 用于记忆/角色/技能等带 score 字段的排序场景。
15
- * 9 处 `.sort((a, b) => b.score - a.score)` 的统一提取(ADR-017 枝叶层 2 次提取)。
14
+ * 使用轨迹唯一事实源为 accessedAt;采集/推荐等需要「采样 top-N」的场景统一按 accessedAt 降序。
16
15
  *
17
16
  * @param a 前一个元素
18
17
  * @param b 后一个元素
19
18
  * @returns 负数表示 a 排前,正数表示 b 排前
20
19
  */
21
- export function byScoreDesc(a, b) {
22
- return b.score - a.score;
20
+ export function byAccessedDesc(a, b) {
21
+ // ISO 8601 字符串可直接按字典序比较(时间正序 → 字符串升序)
22
+ return a.accessedAt < b.accessedAt ? 1 : a.accessedAt > b.accessedAt ? -1 : 0;
23
23
  }
24
24
  //# sourceMappingURL=array.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAA8B,CAAI,EAAE,CAAI;IACjE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAmC,CAAI,EAAE,CAAI;IACzE,sCAAsC;IACtC,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 原子写入文本文件(UTF-8)
3
+ *
4
+ * @param filePath - 目标文件绝对路径(其所在目录须已存在)
5
+ * @param content - 待写入的文本内容
6
+ */
7
+ export declare function atomicWriteFile(filePath: string, content: string): Promise<void>;
8
+ //# sourceMappingURL=atomicWrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomicWrite.d.ts","sourceRoot":"","sources":["../../src/utils/atomicWrite.ts"],"names":[],"mappings":"AAoBA;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItF"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 原子写文件 — 先写同目录临时文件,再 rename 覆盖目标
3
+ *
4
+ * 解决的问题:直写目标路径时若进程在写入中途崩溃/断电,目标文件会停留在
5
+ * 被截断的半成品状态。对「唯一真理源」类文件而言这等于数据永久损坏。
6
+ * rename 在同一文件系统内是原子操作——目标要么是旧内容,要么是完整新内容。
7
+ *
8
+ * 适用:内容为唯一真理源且损坏后不可重建的文件
9
+ * - 设定记忆 md(文件即真理源,记忆库只是派生索引)
10
+ *
11
+ * 不适用(用了反而制造 Bug):
12
+ * - 锁文件:语义要求排他创建,rename 会静默覆盖他人持有的锁
13
+ * - 面向用户的文件写工具:rename 更换 inode,破坏硬链接、符号链接目标、
14
+ * 以及编辑器/监视器对该 inode 的订阅
15
+ *
16
+ * 临时文件与目标同目录,确保 rename 不跨设备(跨设备 rename 会抛 EXDEV)。
17
+ * 调用方需自行保证目标目录已存在。
18
+ */
19
+ import { writeFile, rename } from 'node:fs/promises';
20
+ /**
21
+ * 原子写入文本文件(UTF-8)
22
+ *
23
+ * @param filePath - 目标文件绝对路径(其所在目录须已存在)
24
+ * @param content - 待写入的文本内容
25
+ */
26
+ export async function atomicWriteFile(filePath, content) {
27
+ const tmpPath = `${filePath}.tmp`;
28
+ await writeFile(tmpPath, content, 'utf-8');
29
+ await rename(tmpPath, filePath);
30
+ }
31
+ //# sourceMappingURL=atomicWrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomicWrite.js","sourceRoot":"","sources":["../../src/utils/atomicWrite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,OAAe;IACrE,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAC;IAClC,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,38 @@
1
+ /** 后台任务累计统计快照(宿主读后台健康度,纯只读) */
2
+ export interface BackgroundTaskStats {
3
+ /** 在途任务数(含排队中的) */
4
+ pending: number;
5
+ /** 成功完成数(累计) */
6
+ completed: number;
7
+ /** 失败数(累计,未被业务侧消化的) */
8
+ failed: number;
9
+ }
10
+ /**
11
+ * 启动一个后台任务(不阻塞调用方)。统一计数 + 兜底失败日志 + 并发槽位控制。
12
+ * 保留「调用即纳入在途计数」的契约——无论立即执行还是排队等待。
13
+ *
14
+ * @param label 任务标签(日志/观测区分用途)
15
+ * @param factory 返回业务 Promise 的工厂;内部不要自行 `catch`,交给本门面统一兜底计数
16
+ * @param onFailure 失败时的业务侧补救(如宿主事件 emit);缺省仅记日志
17
+ */
18
+ export declare function backgroundTask(label: string, factory: () => Promise<unknown>, onFailure?: (err: unknown) => void): void;
19
+ /** 读取后台任务累计统计快照(只读副本,宿主可观测后台健康度) */
20
+ export declare function getBackgroundTaskStats(): BackgroundTaskStats;
21
+ /**
22
+ * 等待所有在途后台任务完成(带超时保护,防止任务永不返回阻塞 close)。
23
+ * Agent.close() 必须调用此函数——否则后台命中刷新/摘要生成等任务可能在 storage 关闭后 upsert 失效。
24
+ *
25
+ * @param timeoutMs 超时时间(毫秒),默认 5000ms
26
+ * @returns **等待开始时**的在途任务数(0 = 进入本函数时无在途任务)。
27
+ * ⚠️ 该值是「曾经在途」而非「已等到完成」:超时放弃剩余任务时返回值仍为初始在途数,
28
+ * 不代表实际完成数。调用方据此判断「是否有在途任务」是正确的(如 `Agent.close()` 的
29
+ * `awaited > 0`),但**不可当作已完成计数**使用。
30
+ */
31
+ export declare function awaitBackgroundTasks(timeoutMs?: number): Promise<number>;
32
+ /**
33
+ * 重置模块级状态(仅测试使用,生产代码禁止调用)。
34
+ * 清理 activeCount、pendingQueue、stats,确保测试用例间状态隔离。
35
+ * @internal
36
+ */
37
+ export declare function _resetBackgroundTaskState(): void;
38
+ //# sourceMappingURL=backgroundTask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgroundTask.d.ts","sourceRoot":"","sources":["../../src/utils/backgroundTask.ts"],"names":[],"mappings":"AAaA,+BAA+B;AAC/B,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAmBD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC/B,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GACjC,IAAI,CAWN;AA4CD,oCAAoC;AACpC,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB5E;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAMhD"}