@cicctencent/agent-core 0.1.1 → 0.1.4

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 (441) hide show
  1. package/README.md +14 -927
  2. package/dist/cjs/agent/engine.d.ts.map +1 -0
  3. package/dist/cjs/agent/engine.js +766 -0
  4. package/dist/cjs/agent/engine.js.map +1 -0
  5. package/dist/cjs/agent/history-manager.d.ts.map +1 -0
  6. package/dist/cjs/agent/history-manager.js +271 -0
  7. package/dist/cjs/agent/history-manager.js.map +1 -0
  8. package/dist/cjs/agent/llm-caller.d.ts.map +1 -0
  9. package/dist/cjs/agent/llm-caller.js +307 -0
  10. package/dist/cjs/agent/llm-caller.js.map +1 -0
  11. package/dist/cjs/agent/tool-executor.d.ts.map +1 -0
  12. package/dist/cjs/agent/tool-executor.js +568 -0
  13. package/dist/cjs/agent/tool-executor.js.map +1 -0
  14. package/dist/cjs/agent/types.d.ts.map +1 -0
  15. package/dist/cjs/agent/types.js +6 -0
  16. package/dist/cjs/agent/types.js.map +1 -0
  17. package/dist/cjs/agent/workflow.d.ts.map +1 -0
  18. package/dist/cjs/agent/workflow.js +262 -0
  19. package/dist/cjs/agent/workflow.js.map +1 -0
  20. package/dist/cjs/context/collector.d.ts.map +1 -0
  21. package/dist/cjs/context/collector.js +94 -0
  22. package/dist/cjs/context/collector.js.map +1 -0
  23. package/dist/cjs/context/manager.d.ts.map +1 -0
  24. package/dist/cjs/context/manager.js +36 -0
  25. package/dist/cjs/context/manager.js.map +1 -0
  26. package/dist/cjs/context/types.d.ts.map +1 -0
  27. package/dist/cjs/context/types.js +6 -0
  28. package/dist/cjs/context/types.js.map +1 -0
  29. package/dist/cjs/hooks/types.d.ts.map +1 -0
  30. package/dist/cjs/hooks/types.js +6 -0
  31. package/dist/cjs/hooks/types.js.map +1 -0
  32. package/dist/{index.d.ts → cjs/index.d.ts} +1 -0
  33. package/dist/cjs/index.d.ts.map +1 -0
  34. package/dist/cjs/index.js +98 -0
  35. package/dist/cjs/index.js.map +1 -0
  36. package/dist/cjs/llm/anthropic-provider.d.ts.map +1 -0
  37. package/dist/cjs/llm/anthropic-provider.js +356 -0
  38. package/dist/cjs/llm/anthropic-provider.js.map +1 -0
  39. package/dist/cjs/llm/factory.d.ts.map +1 -0
  40. package/dist/cjs/llm/factory.js +34 -0
  41. package/dist/cjs/llm/factory.js.map +1 -0
  42. package/dist/cjs/llm/ollama-provider.d.ts.map +1 -0
  43. package/dist/cjs/llm/ollama-provider.js +34 -0
  44. package/dist/cjs/llm/ollama-provider.js.map +1 -0
  45. package/dist/cjs/llm/openai-provider.d.ts.map +1 -0
  46. package/dist/cjs/llm/openai-provider.js +186 -0
  47. package/dist/cjs/llm/openai-provider.js.map +1 -0
  48. package/dist/cjs/llm/provider.d.ts.map +1 -0
  49. package/dist/cjs/llm/provider.js +18 -0
  50. package/dist/cjs/llm/provider.js.map +1 -0
  51. package/dist/cjs/llm/types.d.ts.map +1 -0
  52. package/dist/cjs/llm/types.js +6 -0
  53. package/dist/cjs/llm/types.js.map +1 -0
  54. package/dist/cjs/mcp/base-client.d.ts.map +1 -0
  55. package/dist/cjs/mcp/base-client.js +112 -0
  56. package/dist/cjs/mcp/base-client.js.map +1 -0
  57. package/dist/cjs/mcp/client.d.ts.map +1 -0
  58. package/dist/cjs/mcp/client.js +76 -0
  59. package/dist/cjs/mcp/client.js.map +1 -0
  60. package/dist/cjs/mcp/factory.d.ts.map +1 -0
  61. package/dist/cjs/mcp/factory.js +43 -0
  62. package/dist/cjs/mcp/factory.js.map +1 -0
  63. package/dist/cjs/mcp/http-client.d.ts.map +1 -0
  64. package/dist/cjs/mcp/http-client.js +142 -0
  65. package/dist/cjs/mcp/http-client.js.map +1 -0
  66. package/dist/cjs/mcp/proxy-agent.d.ts.map +1 -0
  67. package/dist/cjs/mcp/proxy-agent.js +195 -0
  68. package/dist/cjs/mcp/proxy-agent.js.map +1 -0
  69. package/dist/cjs/mcp/stdio-client.d.ts.map +1 -0
  70. package/dist/cjs/mcp/stdio-client.js +95 -0
  71. package/dist/cjs/mcp/stdio-client.js.map +1 -0
  72. package/dist/cjs/mcp/types.d.ts.map +1 -0
  73. package/dist/cjs/mcp/types.js +6 -0
  74. package/dist/cjs/mcp/types.js.map +1 -0
  75. package/dist/cjs/memory/checkpoint.d.ts.map +1 -0
  76. package/dist/cjs/memory/checkpoint.js +160 -0
  77. package/dist/cjs/memory/checkpoint.js.map +1 -0
  78. package/dist/cjs/memory/extractor.d.ts.map +1 -0
  79. package/dist/cjs/memory/extractor.js +121 -0
  80. package/dist/cjs/memory/extractor.js.map +1 -0
  81. package/dist/cjs/memory/persona.d.ts.map +1 -0
  82. package/dist/cjs/memory/persona.js +79 -0
  83. package/dist/cjs/memory/persona.js.map +1 -0
  84. package/dist/cjs/memory/pipeline.d.ts.map +1 -0
  85. package/dist/cjs/memory/pipeline.js +148 -0
  86. package/dist/cjs/memory/pipeline.js.map +1 -0
  87. package/dist/cjs/memory/prompts.d.ts.map +1 -0
  88. package/dist/cjs/memory/prompts.js +70 -0
  89. package/dist/cjs/memory/prompts.js.map +1 -0
  90. package/dist/cjs/memory/recall.d.ts.map +1 -0
  91. package/dist/cjs/memory/recall.js +164 -0
  92. package/dist/cjs/memory/recall.js.map +1 -0
  93. package/dist/cjs/memory/scene.d.ts.map +1 -0
  94. package/dist/cjs/memory/scene.js +101 -0
  95. package/dist/cjs/memory/scene.js.map +1 -0
  96. package/dist/cjs/memory/types.d.ts.map +1 -0
  97. package/dist/cjs/memory/types.js +6 -0
  98. package/dist/cjs/memory/types.js.map +1 -0
  99. package/dist/cjs/middleware/types.d.ts.map +1 -0
  100. package/dist/cjs/middleware/types.js +6 -0
  101. package/dist/cjs/middleware/types.js.map +1 -0
  102. package/dist/cjs/package.json +3 -0
  103. package/dist/cjs/sandbox/types.d.ts.map +1 -0
  104. package/dist/cjs/sandbox/types.js +128 -0
  105. package/dist/cjs/sandbox/types.js.map +1 -0
  106. package/dist/{security → cjs/security}/guard.d.ts +1 -6
  107. package/dist/cjs/security/guard.d.ts.map +1 -0
  108. package/dist/cjs/security/guard.js +291 -0
  109. package/dist/cjs/security/guard.js.map +1 -0
  110. package/dist/{security → cjs/security}/types.d.ts +6 -2
  111. package/dist/cjs/security/types.d.ts.map +1 -0
  112. package/dist/cjs/security/types.js +6 -0
  113. package/dist/cjs/security/types.js.map +1 -0
  114. package/dist/cjs/skill/manager.d.ts.map +1 -0
  115. package/dist/cjs/skill/manager.js +413 -0
  116. package/dist/cjs/skill/manager.js.map +1 -0
  117. package/dist/cjs/skill/router.d.ts.map +1 -0
  118. package/dist/cjs/skill/router.js +139 -0
  119. package/dist/cjs/skill/router.js.map +1 -0
  120. package/dist/cjs/skill/types.d.ts.map +1 -0
  121. package/dist/cjs/skill/types.js +6 -0
  122. package/dist/cjs/skill/types.js.map +1 -0
  123. package/dist/cjs/tool/delegate.d.ts.map +1 -0
  124. package/dist/cjs/tool/delegate.js +78 -0
  125. package/dist/cjs/tool/delegate.js.map +1 -0
  126. package/dist/cjs/tool/registry.d.ts +49 -0
  127. package/dist/cjs/tool/registry.d.ts.map +1 -0
  128. package/dist/cjs/tool/registry.js +87 -0
  129. package/dist/cjs/tool/registry.js.map +1 -0
  130. package/dist/cjs/tool/types.d.ts.map +1 -0
  131. package/dist/cjs/tool/types.js +6 -0
  132. package/dist/cjs/tool/types.js.map +1 -0
  133. package/dist/cjs/types.d.ts.map +1 -0
  134. package/dist/cjs/types.js +6 -0
  135. package/dist/cjs/types.js.map +1 -0
  136. package/dist/cjs/utils/token-counter.d.ts.map +1 -0
  137. package/dist/cjs/utils/token-counter.js +104 -0
  138. package/dist/cjs/utils/token-counter.js.map +1 -0
  139. package/dist/esm/agent/engine.d.ts +113 -0
  140. package/dist/esm/agent/engine.d.ts.map +1 -0
  141. package/dist/esm/agent/engine.js +762 -0
  142. package/dist/esm/agent/engine.js.map +1 -0
  143. package/dist/esm/agent/history-manager.d.ts +78 -0
  144. package/dist/esm/agent/history-manager.d.ts.map +1 -0
  145. package/dist/esm/agent/history-manager.js +267 -0
  146. package/dist/esm/agent/history-manager.js.map +1 -0
  147. package/dist/esm/agent/llm-caller.d.ts +58 -0
  148. package/dist/esm/agent/llm-caller.d.ts.map +1 -0
  149. package/dist/esm/agent/llm-caller.js +303 -0
  150. package/dist/esm/agent/llm-caller.js.map +1 -0
  151. package/dist/esm/agent/tool-executor.d.ts +95 -0
  152. package/dist/esm/agent/tool-executor.d.ts.map +1 -0
  153. package/dist/esm/agent/tool-executor.js +564 -0
  154. package/dist/esm/agent/tool-executor.js.map +1 -0
  155. package/dist/esm/agent/types.d.ts +128 -0
  156. package/dist/esm/agent/types.d.ts.map +1 -0
  157. package/dist/esm/agent/types.js +5 -0
  158. package/dist/esm/agent/types.js.map +1 -0
  159. package/dist/esm/agent/workflow.d.ts +74 -0
  160. package/dist/esm/agent/workflow.d.ts.map +1 -0
  161. package/dist/esm/agent/workflow.js +248 -0
  162. package/dist/esm/agent/workflow.js.map +1 -0
  163. package/dist/esm/context/collector.d.ts +12 -0
  164. package/dist/esm/context/collector.d.ts.map +1 -0
  165. package/dist/esm/context/collector.js +57 -0
  166. package/dist/esm/context/collector.js.map +1 -0
  167. package/dist/esm/context/manager.d.ts +16 -0
  168. package/dist/esm/context/manager.d.ts.map +1 -0
  169. package/dist/esm/context/manager.js +32 -0
  170. package/dist/esm/context/manager.js.map +1 -0
  171. package/dist/esm/context/types.d.ts +39 -0
  172. package/dist/esm/context/types.d.ts.map +1 -0
  173. package/dist/esm/context/types.js +5 -0
  174. package/dist/esm/context/types.js.map +1 -0
  175. package/dist/esm/hooks/types.d.ts +47 -0
  176. package/dist/esm/hooks/types.d.ts.map +1 -0
  177. package/dist/esm/hooks/types.js +5 -0
  178. package/dist/esm/hooks/types.js.map +1 -0
  179. package/{src/index.ts → dist/esm/index.d.ts} +16 -140
  180. package/dist/esm/index.d.ts.map +1 -0
  181. package/dist/esm/index.js +39 -0
  182. package/dist/esm/index.js.map +1 -0
  183. package/dist/esm/llm/anthropic-provider.d.ts +28 -0
  184. package/dist/esm/llm/anthropic-provider.d.ts.map +1 -0
  185. package/dist/esm/llm/anthropic-provider.js +352 -0
  186. package/dist/esm/llm/anthropic-provider.js.map +1 -0
  187. package/{src/llm/factory.ts → dist/esm/llm/factory.d.ts} +3 -18
  188. package/dist/esm/llm/factory.d.ts.map +1 -0
  189. package/dist/esm/llm/factory.js +30 -0
  190. package/dist/esm/llm/factory.js.map +1 -0
  191. package/dist/esm/llm/ollama-provider.d.ts +13 -0
  192. package/dist/esm/llm/ollama-provider.d.ts.map +1 -0
  193. package/dist/esm/llm/ollama-provider.js +30 -0
  194. package/dist/esm/llm/ollama-provider.js.map +1 -0
  195. package/dist/esm/llm/openai-provider.d.ts +18 -0
  196. package/dist/esm/llm/openai-provider.d.ts.map +1 -0
  197. package/dist/esm/llm/openai-provider.js +182 -0
  198. package/dist/esm/llm/openai-provider.js.map +1 -0
  199. package/{src/llm/provider.ts → dist/esm/llm/provider.d.ts} +1 -9
  200. package/dist/esm/llm/provider.d.ts.map +1 -0
  201. package/dist/esm/llm/provider.js +10 -0
  202. package/dist/esm/llm/provider.js.map +1 -0
  203. package/dist/esm/llm/types.d.ts +78 -0
  204. package/dist/esm/llm/types.d.ts.map +1 -0
  205. package/dist/esm/llm/types.js +5 -0
  206. package/dist/esm/llm/types.js.map +1 -0
  207. package/dist/esm/mcp/base-client.d.ts +50 -0
  208. package/dist/esm/mcp/base-client.d.ts.map +1 -0
  209. package/dist/esm/mcp/base-client.js +108 -0
  210. package/dist/esm/mcp/base-client.js.map +1 -0
  211. package/dist/esm/mcp/client.d.ts +27 -0
  212. package/dist/esm/mcp/client.d.ts.map +1 -0
  213. package/dist/esm/mcp/client.js +70 -0
  214. package/dist/esm/mcp/client.js.map +1 -0
  215. package/dist/esm/mcp/factory.d.ts +16 -0
  216. package/dist/esm/mcp/factory.d.ts.map +1 -0
  217. package/dist/esm/mcp/factory.js +39 -0
  218. package/dist/esm/mcp/factory.js.map +1 -0
  219. package/dist/esm/mcp/http-client.d.ts +24 -0
  220. package/dist/esm/mcp/http-client.d.ts.map +1 -0
  221. package/dist/esm/mcp/http-client.js +138 -0
  222. package/dist/esm/mcp/http-client.js.map +1 -0
  223. package/dist/esm/mcp/proxy-agent.d.ts +49 -0
  224. package/dist/esm/mcp/proxy-agent.d.ts.map +1 -0
  225. package/dist/esm/mcp/proxy-agent.js +187 -0
  226. package/dist/esm/mcp/proxy-agent.js.map +1 -0
  227. package/dist/esm/mcp/stdio-client.d.ts +16 -0
  228. package/dist/esm/mcp/stdio-client.d.ts.map +1 -0
  229. package/dist/esm/mcp/stdio-client.js +91 -0
  230. package/dist/esm/mcp/stdio-client.js.map +1 -0
  231. package/dist/esm/mcp/types.d.ts +60 -0
  232. package/dist/esm/mcp/types.d.ts.map +1 -0
  233. package/dist/esm/mcp/types.js +5 -0
  234. package/dist/esm/mcp/types.js.map +1 -0
  235. package/dist/esm/memory/checkpoint.d.ts +62 -0
  236. package/dist/esm/memory/checkpoint.d.ts.map +1 -0
  237. package/dist/esm/memory/checkpoint.js +121 -0
  238. package/dist/esm/memory/checkpoint.js.map +1 -0
  239. package/dist/esm/memory/extractor.d.ts +59 -0
  240. package/dist/esm/memory/extractor.d.ts.map +1 -0
  241. package/dist/esm/memory/extractor.js +117 -0
  242. package/dist/esm/memory/extractor.js.map +1 -0
  243. package/dist/esm/memory/persona.d.ts +38 -0
  244. package/dist/esm/memory/persona.d.ts.map +1 -0
  245. package/dist/esm/memory/persona.js +75 -0
  246. package/dist/esm/memory/persona.js.map +1 -0
  247. package/dist/esm/memory/pipeline.d.ts +50 -0
  248. package/dist/esm/memory/pipeline.d.ts.map +1 -0
  249. package/dist/esm/memory/pipeline.js +144 -0
  250. package/dist/esm/memory/pipeline.js.map +1 -0
  251. package/dist/esm/memory/prompts.d.ts +9 -0
  252. package/dist/esm/memory/prompts.d.ts.map +1 -0
  253. package/{src/memory/prompts.ts → dist/esm/memory/prompts.js} +6 -13
  254. package/dist/esm/memory/prompts.js.map +1 -0
  255. package/dist/esm/memory/recall.d.ts +66 -0
  256. package/dist/esm/memory/recall.d.ts.map +1 -0
  257. package/dist/esm/memory/recall.js +159 -0
  258. package/dist/esm/memory/recall.js.map +1 -0
  259. package/dist/esm/memory/scene.d.ts +49 -0
  260. package/dist/esm/memory/scene.d.ts.map +1 -0
  261. package/dist/esm/memory/scene.js +97 -0
  262. package/dist/esm/memory/scene.js.map +1 -0
  263. package/dist/esm/memory/types.d.ts +43 -0
  264. package/dist/esm/memory/types.d.ts.map +1 -0
  265. package/dist/esm/memory/types.js +5 -0
  266. package/dist/esm/memory/types.js.map +1 -0
  267. package/dist/esm/middleware/types.d.ts +52 -0
  268. package/dist/esm/middleware/types.d.ts.map +1 -0
  269. package/dist/esm/middleware/types.js +5 -0
  270. package/dist/esm/middleware/types.js.map +1 -0
  271. package/dist/esm/package.json +3 -0
  272. package/dist/esm/sandbox/types.d.ts +59 -0
  273. package/dist/esm/sandbox/types.d.ts.map +1 -0
  274. package/dist/esm/sandbox/types.js +125 -0
  275. package/dist/esm/sandbox/types.js.map +1 -0
  276. package/dist/esm/security/guard.d.ts +36 -0
  277. package/dist/esm/security/guard.d.ts.map +1 -0
  278. package/dist/esm/security/guard.js +287 -0
  279. package/dist/esm/security/guard.js.map +1 -0
  280. package/dist/esm/security/types.d.ts +40 -0
  281. package/dist/esm/security/types.d.ts.map +1 -0
  282. package/dist/esm/security/types.js +5 -0
  283. package/dist/esm/security/types.js.map +1 -0
  284. package/dist/esm/skill/manager.d.ts +95 -0
  285. package/dist/esm/skill/manager.d.ts.map +1 -0
  286. package/dist/esm/skill/manager.js +376 -0
  287. package/dist/esm/skill/manager.js.map +1 -0
  288. package/dist/esm/skill/router.d.ts +26 -0
  289. package/dist/esm/skill/router.d.ts.map +1 -0
  290. package/dist/esm/skill/router.js +135 -0
  291. package/dist/esm/skill/router.js.map +1 -0
  292. package/dist/esm/skill/types.d.ts +55 -0
  293. package/dist/esm/skill/types.d.ts.map +1 -0
  294. package/dist/esm/skill/types.js +5 -0
  295. package/dist/esm/skill/types.js.map +1 -0
  296. package/dist/esm/tool/delegate.d.ts +34 -0
  297. package/dist/esm/tool/delegate.d.ts.map +1 -0
  298. package/dist/esm/tool/delegate.js +75 -0
  299. package/dist/esm/tool/delegate.js.map +1 -0
  300. package/dist/esm/tool/registry.d.ts +49 -0
  301. package/dist/esm/tool/registry.d.ts.map +1 -0
  302. package/dist/esm/tool/registry.js +83 -0
  303. package/dist/esm/tool/registry.js.map +1 -0
  304. package/dist/esm/tool/types.d.ts +101 -0
  305. package/dist/esm/tool/types.d.ts.map +1 -0
  306. package/dist/esm/tool/types.js +5 -0
  307. package/dist/esm/tool/types.js.map +1 -0
  308. package/dist/esm/types.d.ts +150 -0
  309. package/dist/esm/types.d.ts.map +1 -0
  310. package/dist/esm/types.js +5 -0
  311. package/dist/esm/types.js.map +1 -0
  312. package/dist/esm/utils/token-counter.d.ts +22 -0
  313. package/dist/esm/utils/token-counter.d.ts.map +1 -0
  314. package/dist/esm/utils/token-counter.js +99 -0
  315. package/dist/esm/utils/token-counter.js.map +1 -0
  316. package/package.json +16 -10
  317. package/dist/agent/engine.d.ts.map +0 -1
  318. package/dist/agent/history-manager.d.ts.map +0 -1
  319. package/dist/agent/llm-caller.d.ts.map +0 -1
  320. package/dist/agent/tool-executor.d.ts.map +0 -1
  321. package/dist/agent/types.d.ts.map +0 -1
  322. package/dist/agent/workflow.d.ts.map +0 -1
  323. package/dist/context/collector.d.ts.map +0 -1
  324. package/dist/context/manager.d.ts.map +0 -1
  325. package/dist/context/types.d.ts.map +0 -1
  326. package/dist/hooks/types.d.ts.map +0 -1
  327. package/dist/index.d.ts.map +0 -1
  328. package/dist/llm/anthropic-provider.d.ts.map +0 -1
  329. package/dist/llm/factory.d.ts.map +0 -1
  330. package/dist/llm/ollama-provider.d.ts.map +0 -1
  331. package/dist/llm/openai-provider.d.ts.map +0 -1
  332. package/dist/llm/provider.d.ts.map +0 -1
  333. package/dist/llm/types.d.ts.map +0 -1
  334. package/dist/mcp/base-client.d.ts.map +0 -1
  335. package/dist/mcp/client.d.ts.map +0 -1
  336. package/dist/mcp/factory.d.ts.map +0 -1
  337. package/dist/mcp/http-client.d.ts.map +0 -1
  338. package/dist/mcp/proxy-agent.d.ts.map +0 -1
  339. package/dist/mcp/stdio-client.d.ts.map +0 -1
  340. package/dist/mcp/types.d.ts.map +0 -1
  341. package/dist/memory/checkpoint.d.ts.map +0 -1
  342. package/dist/memory/extractor.d.ts.map +0 -1
  343. package/dist/memory/persona.d.ts.map +0 -1
  344. package/dist/memory/pipeline.d.ts.map +0 -1
  345. package/dist/memory/prompts.d.ts.map +0 -1
  346. package/dist/memory/recall.d.ts.map +0 -1
  347. package/dist/memory/scene.d.ts.map +0 -1
  348. package/dist/memory/types.d.ts.map +0 -1
  349. package/dist/middleware/types.d.ts.map +0 -1
  350. package/dist/sandbox/types.d.ts.map +0 -1
  351. package/dist/security/guard.d.ts.map +0 -1
  352. package/dist/security/types.d.ts.map +0 -1
  353. package/dist/skill/manager.d.ts.map +0 -1
  354. package/dist/skill/router.d.ts.map +0 -1
  355. package/dist/skill/types.d.ts.map +0 -1
  356. package/dist/tool/delegate.d.ts.map +0 -1
  357. package/dist/tool/registry.d.ts +0 -24
  358. package/dist/tool/registry.d.ts.map +0 -1
  359. package/dist/tool/types.d.ts.map +0 -1
  360. package/dist/types.d.ts.map +0 -1
  361. package/dist/utils/token-counter.d.ts.map +0 -1
  362. package/src/agent/engine.ts +0 -875
  363. package/src/agent/history-manager.ts +0 -323
  364. package/src/agent/llm-caller.ts +0 -383
  365. package/src/agent/tool-executor.ts +0 -713
  366. package/src/agent/types.ts +0 -136
  367. package/src/agent/workflow.ts +0 -339
  368. package/src/context/collector.ts +0 -59
  369. package/src/context/manager.ts +0 -40
  370. package/src/context/types.ts +0 -51
  371. package/src/hooks/types.ts +0 -77
  372. package/src/llm/anthropic-provider.ts +0 -412
  373. package/src/llm/ollama-provider.ts +0 -39
  374. package/src/llm/openai-provider.ts +0 -200
  375. package/src/llm/types.ts +0 -91
  376. package/src/mcp/base-client.ts +0 -159
  377. package/src/mcp/client.ts +0 -81
  378. package/src/mcp/factory.ts +0 -45
  379. package/src/mcp/http-client.ts +0 -149
  380. package/src/mcp/proxy-agent.ts +0 -227
  381. package/src/mcp/stdio-client.ts +0 -104
  382. package/src/mcp/types.ts +0 -65
  383. package/src/memory/checkpoint.ts +0 -146
  384. package/src/memory/extractor.ts +0 -164
  385. package/src/memory/persona.ts +0 -106
  386. package/src/memory/pipeline.ts +0 -192
  387. package/src/memory/recall.ts +0 -217
  388. package/src/memory/scene.ts +0 -137
  389. package/src/memory/types.ts +0 -54
  390. package/src/middleware/types.ts +0 -62
  391. package/src/sandbox/types.ts +0 -185
  392. package/src/security/guard.ts +0 -249
  393. package/src/security/types.ts +0 -46
  394. package/src/skill/manager.ts +0 -420
  395. package/src/skill/router.ts +0 -158
  396. package/src/skill/types.ts +0 -67
  397. package/src/tool/delegate.ts +0 -105
  398. package/src/tool/registry.ts +0 -64
  399. package/src/tool/types.ts +0 -124
  400. package/src/types.ts +0 -188
  401. package/src/utils/token-counter.ts +0 -108
  402. /package/dist/{agent → cjs/agent}/engine.d.ts +0 -0
  403. /package/dist/{agent → cjs/agent}/history-manager.d.ts +0 -0
  404. /package/dist/{agent → cjs/agent}/llm-caller.d.ts +0 -0
  405. /package/dist/{agent → cjs/agent}/tool-executor.d.ts +0 -0
  406. /package/dist/{agent → cjs/agent}/types.d.ts +0 -0
  407. /package/dist/{agent → cjs/agent}/workflow.d.ts +0 -0
  408. /package/dist/{context → cjs/context}/collector.d.ts +0 -0
  409. /package/dist/{context → cjs/context}/manager.d.ts +0 -0
  410. /package/dist/{context → cjs/context}/types.d.ts +0 -0
  411. /package/dist/{hooks → cjs/hooks}/types.d.ts +0 -0
  412. /package/dist/{llm → cjs/llm}/anthropic-provider.d.ts +0 -0
  413. /package/dist/{llm → cjs/llm}/factory.d.ts +0 -0
  414. /package/dist/{llm → cjs/llm}/ollama-provider.d.ts +0 -0
  415. /package/dist/{llm → cjs/llm}/openai-provider.d.ts +0 -0
  416. /package/dist/{llm → cjs/llm}/provider.d.ts +0 -0
  417. /package/dist/{llm → cjs/llm}/types.d.ts +0 -0
  418. /package/dist/{mcp → cjs/mcp}/base-client.d.ts +0 -0
  419. /package/dist/{mcp → cjs/mcp}/client.d.ts +0 -0
  420. /package/dist/{mcp → cjs/mcp}/factory.d.ts +0 -0
  421. /package/dist/{mcp → cjs/mcp}/http-client.d.ts +0 -0
  422. /package/dist/{mcp → cjs/mcp}/proxy-agent.d.ts +0 -0
  423. /package/dist/{mcp → cjs/mcp}/stdio-client.d.ts +0 -0
  424. /package/dist/{mcp → cjs/mcp}/types.d.ts +0 -0
  425. /package/dist/{memory → cjs/memory}/checkpoint.d.ts +0 -0
  426. /package/dist/{memory → cjs/memory}/extractor.d.ts +0 -0
  427. /package/dist/{memory → cjs/memory}/persona.d.ts +0 -0
  428. /package/dist/{memory → cjs/memory}/pipeline.d.ts +0 -0
  429. /package/dist/{memory → cjs/memory}/prompts.d.ts +0 -0
  430. /package/dist/{memory → cjs/memory}/recall.d.ts +0 -0
  431. /package/dist/{memory → cjs/memory}/scene.d.ts +0 -0
  432. /package/dist/{memory → cjs/memory}/types.d.ts +0 -0
  433. /package/dist/{middleware → cjs/middleware}/types.d.ts +0 -0
  434. /package/dist/{sandbox → cjs/sandbox}/types.d.ts +0 -0
  435. /package/dist/{skill → cjs/skill}/manager.d.ts +0 -0
  436. /package/dist/{skill → cjs/skill}/router.d.ts +0 -0
  437. /package/dist/{skill → cjs/skill}/types.d.ts +0 -0
  438. /package/dist/{tool → cjs/tool}/delegate.d.ts +0 -0
  439. /package/dist/{tool → cjs/tool}/types.d.ts +0 -0
  440. /package/dist/{types.d.ts → cjs/types.d.ts} +0 -0
  441. /package/dist/{utils → cjs/utils}/token-counter.d.ts +0 -0
@@ -0,0 +1,144 @@
1
+ // ============================================================
2
+ // MemoryPipeline — L1→L2→L3 记忆管道调度器
3
+ // ============================================================
4
+ // 调度记忆层级的渐进式提炼:
5
+ // L1 (原子事实) → L2 (场景聚合) → L3 (用户画像)
6
+ // 在对话结束后 fire-and-forget 触发
7
+ import { MemoryExtractor } from "./extractor.js";
8
+ import { SceneAggregator } from "./scene.js";
9
+ import { PersonaGenerator } from "./persona.js";
10
+ import { getMemoryCheckpoint } from "./checkpoint.js";
11
+ /**
12
+ * 记忆管道调度器
13
+ *
14
+ * 调度策略:
15
+ * 1. 每次对话结束:提取 L1 原子事实
16
+ * 2. L1 累积达到阈值:触发 L2 场景聚合
17
+ * 3. L2 累积达到阈值:触发 L3 画像生成
18
+ *
19
+ * 所有操作均为 fire-and-forget,不阻塞对话响应
20
+ */
21
+ export class MemoryPipeline {
22
+ llmProvider;
23
+ l2Threshold;
24
+ l3Threshold;
25
+ constructor(opts) {
26
+ this.llmProvider = opts.llmProvider;
27
+ this.l2Threshold = opts.l2Threshold ?? 5;
28
+ this.l3Threshold = opts.l3Threshold ?? 3;
29
+ }
30
+ /**
31
+ * 执行完整管道(L1 提取 → 条件触发 L2 → 条件触发 L3)
32
+ *
33
+ * @param messages 对话消息
34
+ * @param sessionId 会话 ID
35
+ * @param memoryService MemoryService 实例(延迟导入避免循环依赖)
36
+ */
37
+ async run(messages, sessionId, memoryService) {
38
+ const result = {
39
+ l1Extracted: 0,
40
+ l2Triggered: false,
41
+ l3Triggered: false,
42
+ };
43
+ // === Phase 1: L1 提取 ===
44
+ const existingKeys = memoryService.getKeys();
45
+ const extractor = new MemoryExtractor({ llmProvider: this.llmProvider });
46
+ const facts = await extractor.extract(messages, sessionId, existingKeys);
47
+ // 写入 L1 条目
48
+ for (const fact of facts) {
49
+ memoryService.save(fact.key, fact.content, fact.category, fact.importance, {
50
+ memoryLayer: 'L1',
51
+ sourceSessionId: sessionId,
52
+ sourceTimestamp: new Date().toISOString(),
53
+ });
54
+ }
55
+ result.l1Extracted = facts.length;
56
+ if (facts.length === 0)
57
+ return result;
58
+ console.log(`[Pipeline] L1: extracted ${facts.length} facts from session ${sessionId}`);
59
+ // === Phase 2: 条件触发 L2 聚合 ===
60
+ const l1Entries = memoryService.getAllEntries('L1');
61
+ const l1Count = l1Entries.length;
62
+ const checkpoint = getMemoryCheckpoint();
63
+ if (checkpoint.shouldTriggerL2(l1Count, this.l2Threshold)) {
64
+ try {
65
+ const existingL2 = memoryService.getAllEntries('L2');
66
+ const existingScenes = existingL2.map(e => ({
67
+ sceneId: e.sceneId || e.key,
68
+ title: e.key,
69
+ description: e.content,
70
+ atomIds: e.sourceIds || [],
71
+ }));
72
+ const aggregator = new SceneAggregator({ llmProvider: this.llmProvider });
73
+ const atoms = l1Entries.map(e => ({
74
+ id: e.id,
75
+ key: e.key,
76
+ content: e.content,
77
+ category: e.category,
78
+ }));
79
+ const scenes = await aggregator.aggregate(atoms, existingScenes);
80
+ result.l2Triggered = true;
81
+ result.newScenes = scenes;
82
+ // 写入 L2 条目(upsert by sceneId)
83
+ for (const scene of scenes) {
84
+ memoryService.save(scene.sceneId, `${scene.title}\n${scene.description}`, 'scene', 4, {
85
+ memoryLayer: 'L2',
86
+ sceneId: scene.sceneId,
87
+ sourceLayer: 'L1',
88
+ sourceIds: scene.atomIds,
89
+ });
90
+ }
91
+ // 回填 L1 条目的 sceneId
92
+ for (const scene of scenes) {
93
+ for (const atomId of scene.atomIds) {
94
+ const entry = l1Entries.find(e => e.id === atomId);
95
+ if (entry && entry.sceneId !== scene.sceneId) {
96
+ memoryService.save(entry.key, entry.content, entry.category, entry.importance, {
97
+ memoryLayer: 'L1',
98
+ sceneId: scene.sceneId,
99
+ });
100
+ }
101
+ }
102
+ }
103
+ console.log(`[Pipeline] L2: aggregated ${scenes.length} scenes from ${l1Count} atoms`);
104
+ // 更新检查点
105
+ checkpoint.updateL2(l1Count);
106
+ }
107
+ catch (err) {
108
+ console.warn(`[Pipeline] L2 aggregation failed:`, err?.message);
109
+ }
110
+ }
111
+ // === Phase 3: 条件触发 L3 画像 ===
112
+ const l2Entries = memoryService.getAllEntries('L2');
113
+ if (checkpoint.shouldTriggerL3(l2Entries.length, this.l3Threshold)) {
114
+ try {
115
+ const existingL3 = memoryService.getAllEntries('L3');
116
+ const existingPersona = existingL3.length > 0 ? existingL3[0].content : '';
117
+ const generator = new PersonaGenerator({ llmProvider: this.llmProvider });
118
+ const scenes = l2Entries.map(e => ({
119
+ sceneId: e.sceneId || e.key,
120
+ title: e.key,
121
+ description: e.content,
122
+ atomIds: e.sourceIds || [],
123
+ }));
124
+ const persona = await generator.generate(scenes, existingPersona);
125
+ result.l3Triggered = true;
126
+ result.newPersona = persona;
127
+ if (persona) {
128
+ memoryService.save('user_persona', persona, 'persona', 5, {
129
+ memoryLayer: 'L3',
130
+ sourceLayer: 'L2',
131
+ sourceIds: l2Entries.map(e => e.id),
132
+ });
133
+ console.log(`[Pipeline] L3: persona updated (${persona.length} chars)`);
134
+ checkpoint.updateL3(l2Entries.length);
135
+ }
136
+ }
137
+ catch (err) {
138
+ console.warn(`[Pipeline] L3 generation failed:`, err?.message);
139
+ }
140
+ }
141
+ return result;
142
+ }
143
+ }
144
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/memory/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** 原子事实提取 Prompt(系统提示) */
2
+ export declare const EXTRACTION_SYSTEM_PROMPT = "You are a memory extraction engine. Analyze the conversation and extract persistent, reusable facts.\n\n**Rules:**\n- Only extract OBJECTIVE, PERSISTENT facts that will be useful in future conversations\n- Extract: user preferences, project knowledge, technical stack, learned patterns, important decisions\n- DO NOT extract: one-off task details (e.g. \"fix bug X\"), temporary state, debugging logs\n- Each fact must be atomic (one discrete piece of knowledge)\n- Use concise, declarative language\n- Prefer updating existing keys over creating duplicates\n\n**Categories:**\n- user_preference: User's working habits, tool preferences, coding style\n- project_knowledge: Project architecture, tech stack, conventions\n- learned_fact: New knowledge gained during the conversation\n\n**Output format (strict JSON array):**\n[\n { \"key\": \"snake_case_key\", \"content\": \"Brief factual statement\", \"category\": \"user_preference|project_knowledge|learned_fact\", \"importance\": 1-5 }\n]\n\nIf no extractable facts exist, output an empty array: []\nDo not add explanations or markdown outside the JSON.";
3
+ /** 构建提取用户提示 */
4
+ export declare function buildExtractionUserPrompt(messagesSummary: string, existingKeys: string[]): string;
5
+ /** 场景聚合 Prompt(Phase 4 L2) */
6
+ export declare const SCENE_AGGREGATION_SYSTEM_PROMPT = "You are a memory organizer. Group related atomic facts into thematic scenario blocks.\n\n**Rules:**\n- Each scenario should have a clear title and description\n- Group facts by topic/project/domain (e.g. \"\u8FDE\u63A5\u5668\u529F\u80FD\u5F00\u53D1\", \"\u9879\u76EE\u67B6\u6784\u51B3\u7B56\")\n- Max 15 scenarios total. Merge or archive old scenarios if needed.\n- A fact can belong to only one scenario\n\n**Output format (strict JSON array):**\n[\n {\n \"sceneId\": \"snake_case_id\",\n \"title\": \"\u573A\u666F\u6807\u9898\",\n \"description\": \"\u573A\u666F\u63CF\u8FF0\uFF081-2\u53E5\uFF09\",\n \"atomIds\": [\"atom_id_1\", \"atom_id_2\"]\n }\n]";
7
+ /** 画像生成 Prompt(Phase 4 L3) */
8
+ export declare const PERSONA_GENERATION_SYSTEM_PROMPT = "You are a user profiling engine. Based on the scenario blocks provided, generate or incrementally update a user persona.\n\n**Rules:**\n- Focus on stable, enduring traits: working style, technical preferences, communication patterns\n- Use clear section headers (## \u6280\u672F\u504F\u597D, ## \u5DE5\u4F5C\u98CE\u683C, ## \u9879\u76EE\u80CC\u666F, etc.)\n- Keep the persona concise (max 800 words)\n- When updating: preserve existing content, only modify sections affected by new scenarios\n\n**Output format: Markdown**\nWrite the persona directly as markdown text.";
9
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/memory/prompts.ts"],"names":[],"mappings":"AAIA,0BAA0B;AAC1B,eAAO,MAAM,wBAAwB,wlCAqBiB,CAAC;AAEvD,eAAe;AACf,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,CASR;AAED,8BAA8B;AAC9B,eAAO,MAAM,+BAA+B,gqBAgB1C,CAAC;AAEH,8BAA8B;AAC9B,eAAO,MAAM,gCAAgC,6jBASA,CAAC"}
@@ -1,7 +1,6 @@
1
1
  // ============================================================
2
2
  // Memory Extraction Prompt Templates
3
3
  // ============================================================
4
-
5
4
  /** 原子事实提取 Prompt(系统提示) */
6
5
  export const EXTRACTION_SYSTEM_PROMPT = `You are a memory extraction engine. Analyze the conversation and extract persistent, reusable facts.
7
6
 
@@ -25,22 +24,16 @@ export const EXTRACTION_SYSTEM_PROMPT = `You are a memory extraction engine. Ana
25
24
 
26
25
  If no extractable facts exist, output an empty array: []
27
26
  Do not add explanations or markdown outside the JSON.`;
28
-
29
27
  /** 构建提取用户提示 */
30
- export function buildExtractionUserPrompt(
31
- messagesSummary: string,
32
- existingKeys: string[],
33
- ): string {
34
- const keysSection = existingKeys.length > 0
35
- ? `**Existing memory keys (avoid duplicates, update if needed):**\n${existingKeys.map(k => `- ${k}`).join('\n')}\n\n`
36
- : '';
37
-
38
- return `${keysSection}**Conversation to analyze:**
28
+ export function buildExtractionUserPrompt(messagesSummary, existingKeys) {
29
+ const keysSection = existingKeys.length > 0
30
+ ? `**Existing memory keys (avoid duplicates, update if needed):**\n${existingKeys.map(k => `- ${k}`).join('\n')}\n\n`
31
+ : '';
32
+ return `${keysSection}**Conversation to analyze:**
39
33
  ${messagesSummary}
40
34
 
41
35
  Extract persistent facts from the above conversation. Output ONLY a JSON array.`;
42
36
  }
43
-
44
37
  /** 场景聚合 Prompt(Phase 4 L2) */
45
38
  export const SCENE_AGGREGATION_SYSTEM_PROMPT = `You are a memory organizer. Group related atomic facts into thematic scenario blocks.
46
39
 
@@ -59,7 +52,6 @@ export const SCENE_AGGREGATION_SYSTEM_PROMPT = `You are a memory organizer. Grou
59
52
  "atomIds": ["atom_id_1", "atom_id_2"]
60
53
  }
61
54
  ]`;
62
-
63
55
  /** 画像生成 Prompt(Phase 4 L3) */
64
56
  export const PERSONA_GENERATION_SYSTEM_PROMPT = `You are a user profiling engine. Based on the scenario blocks provided, generate or incrementally update a user persona.
65
57
 
@@ -71,3 +63,4 @@ export const PERSONA_GENERATION_SYSTEM_PROMPT = `You are a user profiling engine
71
63
 
72
64
  **Output format: Markdown**
73
65
  Write the persona directly as markdown text.`;
66
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/memory/prompts.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,qCAAqC;AACrC,+DAA+D;AAE/D,0BAA0B;AAC1B,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;sDAqBc,CAAC;AAEvD,eAAe;AACf,MAAM,UAAU,yBAAyB,CACvC,eAAuB,EACvB,YAAsB;IAEtB,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC;QACzC,CAAC,CAAC,mEAAmE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;QACrH,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,GAAG,WAAW;EACrB,eAAe;;gFAE+D,CAAC;AACjF,CAAC;AAED,8BAA8B;AAC9B,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;EAgB7C,CAAC;AAEH,8BAA8B;AAC9B,MAAM,CAAC,MAAM,gCAAgC,GAAG;;;;;;;;;6CASH,CAAC"}
@@ -0,0 +1,66 @@
1
+ import type { MemoryEntry, MemoryLayer } from './types.ts';
2
+ /** 召回结果 */
3
+ export interface RecallResult {
4
+ /** 召回的记忆条目(按相关度排序) */
5
+ entries: ScoredMemoryEntry[];
6
+ /** 是否超时 */
7
+ timedOut: boolean;
8
+ /** 召回策略描述 */
9
+ strategy: string;
10
+ }
11
+ /** 带分数的记忆条目 */
12
+ export interface ScoredMemoryEntry extends MemoryEntry {
13
+ /** 相关度分数 0-1 */
14
+ relevanceScore: number;
15
+ }
16
+ /** 召回配置 */
17
+ export interface RecallOptions {
18
+ /** 最大返回条数,默认 5 */
19
+ maxResults?: number;
20
+ /** 召回超时(毫秒),默认 3000 */
21
+ timeoutMs?: number;
22
+ /** 仅召回指定层级 */
23
+ layers?: MemoryLayer[];
24
+ }
25
+ /**
26
+ * 智能记忆召回引擎
27
+ *
28
+ * 召回策略(优先级排序):
29
+ * 1. 关键词匹配:userText 分词后与 key/content 做模糊匹配
30
+ * 2. 重要性加权:importance 高的记忆权重更大
31
+ * 3. 时效性衰减:近期更新的记忆优先(updatedAt 越新分数越高)
32
+ *
33
+ * 超时保护:超过 timeoutMs 立即返回空结果,不阻塞对话
34
+ */
35
+ export declare class MemoryRecallEngine {
36
+ /**
37
+ * 召回相关记忆(带超时保护)
38
+ */
39
+ recall(userText: string, allMemories: MemoryEntry[], options?: RecallOptions): Promise<RecallResult>;
40
+ private recallInner;
41
+ /**
42
+ * 提取查询词项(简单分词)
43
+ * 支持中英文混合:英文按空格,中文按字
44
+ */
45
+ private extractTerms;
46
+ /**
47
+ * 计算关键词匹配分数(TF-IDF 加权)
48
+ * 稀有词(出现在少量记忆中)获得更高权重,常见词权重降低
49
+ */
50
+ private computeKeywordScore;
51
+ /**
52
+ * 构建 IDF 映射表:term → IDF 分数
53
+ * IDF = log(N / df),N=总文档数,df=包含该 term 的文档数
54
+ */
55
+ private buildIDFMap;
56
+ /**
57
+ * 计算时效性分数(0-1)
58
+ * 24 小时内的记忆得 1.0,30 天前的记忆得 ~0.1
59
+ */
60
+ private computeRecencyScore;
61
+ }
62
+ /**
63
+ * 将召回结果格式化为可注入 system prompt 的文本
64
+ */
65
+ export declare function formatRecallForPrompt(result: RecallResult): string;
66
+ //# sourceMappingURL=recall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../../src/memory/recall.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,WAAW;AACX,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,WAAW;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAe;AACf,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,gBAAgB;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,WAAW;AACX,MAAM,WAAW,aAAa;IAC5B,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc;IACd,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAkB;IAE7B;;OAEG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EAAE,EAC1B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC;YAWV,WAAW;IAgDzB;;;OAGG;IACH,OAAO,CAAC,YAAY;IA0BpB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;;OAGG;IACH,OAAO,CAAC,WAAW;IAuBnB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAS5B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CASlE"}
@@ -0,0 +1,159 @@
1
+ // ============================================================
2
+ // MemoryRecallEngine — 智能记忆召回引擎(带超时保护)
3
+ // ============================================================
4
+ /**
5
+ * 智能记忆召回引擎
6
+ *
7
+ * 召回策略(优先级排序):
8
+ * 1. 关键词匹配:userText 分词后与 key/content 做模糊匹配
9
+ * 2. 重要性加权:importance 高的记忆权重更大
10
+ * 3. 时效性衰减:近期更新的记忆优先(updatedAt 越新分数越高)
11
+ *
12
+ * 超时保护:超过 timeoutMs 立即返回空结果,不阻塞对话
13
+ */
14
+ export class MemoryRecallEngine {
15
+ /**
16
+ * 召回相关记忆(带超时保护)
17
+ */
18
+ async recall(userText, allMemories, options = {}) {
19
+ const timeoutMs = options.timeoutMs ?? 3000;
20
+ return Promise.race([
21
+ this.recallInner(userText, allMemories, options),
22
+ new Promise((resolve) => setTimeout(() => resolve({ entries: [], timedOut: true, strategy: 'timeout' }), timeoutMs)),
23
+ ]);
24
+ }
25
+ async recallInner(userText, allMemories, options) {
26
+ const maxResults = options.maxResults ?? 5;
27
+ const layers = options.layers;
28
+ // 层级过滤
29
+ let candidates = layers
30
+ ? allMemories.filter(e => layers.includes(e.memoryLayer))
31
+ : allMemories;
32
+ if (candidates.length === 0) {
33
+ return { entries: [], timedOut: false, strategy: 'empty' };
34
+ }
35
+ // 提取查询关键词(简单分词:空格 + 标点切分,过滤短词)
36
+ const queryTerms = this.extractTerms(userText);
37
+ // 构建 IDF 映射表(TF-IDF 加权)
38
+ const idfMap = this.buildIDFMap(queryTerms, candidates);
39
+ // 对每条记忆计算分数
40
+ const scored = candidates.map(entry => {
41
+ const keywordScore = this.computeKeywordScore(entry, queryTerms, idfMap);
42
+ const importanceScore = (entry.importance || 3) / 5; // 0.2 ~ 1.0
43
+ const recencyScore = this.computeRecencyScore(entry.updatedAt); // 0.0 ~ 1.0
44
+ // 加权合成
45
+ const relevanceScore = keywordScore * 0.6 + importanceScore * 0.2 + recencyScore * 0.2;
46
+ return { ...entry, relevanceScore };
47
+ });
48
+ // 过滤低分(阈值 0.05)并排序
49
+ const filtered = scored
50
+ .filter(e => e.relevanceScore > 0.05)
51
+ .sort((a, b) => b.relevanceScore - a.relevanceScore)
52
+ .slice(0, maxResults);
53
+ return {
54
+ entries: filtered,
55
+ timedOut: false,
56
+ strategy: filtered.length > 0 ? 'keyword+importance+recency' : 'no_match',
57
+ };
58
+ }
59
+ /**
60
+ * 提取查询词项(简单分词)
61
+ * 支持中英文混合:英文按空格,中文按字
62
+ */
63
+ extractTerms(text) {
64
+ if (!text)
65
+ return [];
66
+ // 英文:小写 + 按空格/标点切分
67
+ const englishTerms = text
68
+ .toLowerCase()
69
+ .split(/[\s,.!?;:,。!?;:]+/)
70
+ .filter(t => t.length >= 2);
71
+ // 中文:提取连续中文片段,再按 2-gram 切分
72
+ const chineseSegments = text.match(/[\u4e00-\u9fff]{2,}/g) || [];
73
+ const chineseTerms = [];
74
+ for (const seg of chineseSegments) {
75
+ for (let i = 0; i < seg.length - 1; i++) {
76
+ chineseTerms.push(seg.slice(i, i + 2));
77
+ }
78
+ if (seg.length >= 3) {
79
+ for (let i = 0; i < seg.length - 2; i++) {
80
+ chineseTerms.push(seg.slice(i, i + 3));
81
+ }
82
+ }
83
+ }
84
+ return [...new Set([...englishTerms, ...chineseTerms])];
85
+ }
86
+ /**
87
+ * 计算关键词匹配分数(TF-IDF 加权)
88
+ * 稀有词(出现在少量记忆中)获得更高权重,常见词权重降低
89
+ */
90
+ computeKeywordScore(entry, terms, idfMap) {
91
+ if (terms.length === 0)
92
+ return 0;
93
+ const text = `${entry.key} ${entry.content} ${entry.category}`.toLowerCase();
94
+ let weightedScore = 0;
95
+ let totalWeight = 0;
96
+ for (const term of terms) {
97
+ if (text.includes(term.toLowerCase())) {
98
+ const idf = idfMap?.get(term) ?? 1.0;
99
+ weightedScore += idf;
100
+ }
101
+ totalWeight += idfMap?.get(term) ?? 1.0;
102
+ }
103
+ return totalWeight > 0 ? weightedScore / totalWeight : 0;
104
+ }
105
+ /**
106
+ * 构建 IDF 映射表:term → IDF 分数
107
+ * IDF = log(N / df),N=总文档数,df=包含该 term 的文档数
108
+ */
109
+ buildIDFMap(terms, candidates) {
110
+ const N = candidates.length;
111
+ if (N === 0)
112
+ return new Map();
113
+ const df = new Map();
114
+ for (const term of terms) {
115
+ let count = 0;
116
+ const lowerTerm = term.toLowerCase();
117
+ for (const entry of candidates) {
118
+ const text = `${entry.key} ${entry.content} ${entry.category}`.toLowerCase();
119
+ if (text.includes(lowerTerm))
120
+ count++;
121
+ }
122
+ df.set(term, count);
123
+ }
124
+ const idf = new Map();
125
+ for (const [term, count] of df) {
126
+ // 加 1 平滑避免除零
127
+ idf.set(term, Math.log((N + 1) / (count + 1)) + 1);
128
+ }
129
+ return idf;
130
+ }
131
+ /**
132
+ * 计算时效性分数(0-1)
133
+ * 24 小时内的记忆得 1.0,30 天前的记忆得 ~0.1
134
+ */
135
+ computeRecencyScore(updatedAt) {
136
+ const age = Date.now() - new Date(updatedAt).getTime();
137
+ const dayMs = 24 * 60 * 60 * 1000;
138
+ if (age < dayMs)
139
+ return 1.0; // 24 小时内
140
+ if (age < 7 * dayMs)
141
+ return 0.8; // 7 天内
142
+ if (age < 30 * dayMs)
143
+ return 0.5; // 30 天内
144
+ return 0.2; // 超过 30 天
145
+ }
146
+ }
147
+ /**
148
+ * 将召回结果格式化为可注入 system prompt 的文本
149
+ */
150
+ export function formatRecallForPrompt(result) {
151
+ if (result.entries.length === 0)
152
+ return '';
153
+ const lines = result.entries.map(e => {
154
+ const score = e.relevanceScore.toFixed(2);
155
+ return `- [${e.category}] ${e.key}: ${e.content}(相关度: ${score})`;
156
+ });
157
+ return `## Long-term Memory (auto-recalled, ${result.entries.length} entries)\n${lines.join('\n')}`;
158
+ }
159
+ //# sourceMappingURL=recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.js","sourceRoot":"","sources":["../../../src/memory/recall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { LLMProvider } from '../llm/types.ts';
2
+ /** 场景块(L2) */
3
+ export interface SceneBlock {
4
+ /** 场景 ID(snake_case) */
5
+ sceneId: string;
6
+ /** 场景标题 */
7
+ title: string;
8
+ /** 场景描述 */
9
+ description: string;
10
+ /** 归属的原子事实 ID 列表 */
11
+ atomIds: string[];
12
+ }
13
+ /** 聚合器配置 */
14
+ export interface SceneAggregatorOptions {
15
+ llmProvider: LLMProvider;
16
+ /** 最大场景数,默认 15 */
17
+ maxScenes?: number;
18
+ /** 超时(毫秒),默认 30000 */
19
+ timeoutMs?: number;
20
+ }
21
+ /**
22
+ * L2 场景聚合器
23
+ *
24
+ * 工作流程:
25
+ * 1. 收集所有 L1 原子事实
26
+ * 2. 通过 LLM 将相关事实分组为场景块
27
+ * 3. 输出 SceneBlock[],供 MemoryService 更新 L2 条目
28
+ */
29
+ export declare class SceneAggregator {
30
+ private llmProvider;
31
+ private maxScenes;
32
+ private timeoutMs;
33
+ constructor(opts: SceneAggregatorOptions);
34
+ /**
35
+ * 聚合原子事实为场景块
36
+ * @param atoms L1 原子事实列表(key + content + id)
37
+ * @param existingScenes 已有场景(用于增量更新)
38
+ */
39
+ aggregate(atoms: Array<{
40
+ id: string;
41
+ key: string;
42
+ content: string;
43
+ category: string;
44
+ }>, existingScenes?: SceneBlock[]): Promise<SceneBlock[]>;
45
+ private buildUserPrompt;
46
+ private callLLM;
47
+ private parseScenes;
48
+ }
49
+ //# sourceMappingURL=scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../../../src/memory/scene.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,cAAc;AACd,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,YAAY;AACZ,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;gBAEd,IAAI,EAAE,sBAAsB;IAMxC;;;;OAIG;IACG,SAAS,CACb,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EAC5E,cAAc,GAAE,UAAU,EAAO,GAChC,OAAO,CAAC,UAAU,EAAE,CAAC;IAcxB,OAAO,CAAC,eAAe;YAqBT,OAAO;IAqBrB,OAAO,CAAC,WAAW;CAsBpB"}
@@ -0,0 +1,97 @@
1
+ // ============================================================
2
+ // SceneAggregator — L2 场景聚合器
3
+ // ============================================================
4
+ // 将 L1 原子事实聚合为主题场景块(L2 Scene),
5
+ // 便于召回时按主题整体命中,提升上下文注入效率
6
+ import { SCENE_AGGREGATION_SYSTEM_PROMPT } from "./prompts.js";
7
+ /**
8
+ * L2 场景聚合器
9
+ *
10
+ * 工作流程:
11
+ * 1. 收集所有 L1 原子事实
12
+ * 2. 通过 LLM 将相关事实分组为场景块
13
+ * 3. 输出 SceneBlock[],供 MemoryService 更新 L2 条目
14
+ */
15
+ export class SceneAggregator {
16
+ llmProvider;
17
+ maxScenes;
18
+ timeoutMs;
19
+ constructor(opts) {
20
+ this.llmProvider = opts.llmProvider;
21
+ this.maxScenes = opts.maxScenes ?? 15;
22
+ this.timeoutMs = opts.timeoutMs ?? 30000;
23
+ }
24
+ /**
25
+ * 聚合原子事实为场景块
26
+ * @param atoms L1 原子事实列表(key + content + id)
27
+ * @param existingScenes 已有场景(用于增量更新)
28
+ */
29
+ async aggregate(atoms, existingScenes = []) {
30
+ if (atoms.length === 0)
31
+ return existingScenes;
32
+ const userPrompt = this.buildUserPrompt(atoms, existingScenes);
33
+ try {
34
+ const raw = await this.callLLM(userPrompt);
35
+ return this.parseScenes(raw);
36
+ }
37
+ catch (err) {
38
+ console.warn(`[SceneAggregator] Aggregation failed: ${err?.message || err}`);
39
+ return existingScenes;
40
+ }
41
+ }
42
+ buildUserPrompt(atoms, existingScenes) {
43
+ const atomsText = atoms
44
+ .map(a => `- [${a.id}] (${a.category}) ${a.key}: ${a.content}`)
45
+ .join('\n');
46
+ let prompt = `**Atomic facts to organize:**\n${atomsText}\n`;
47
+ if (existingScenes.length > 0) {
48
+ const scenesText = existingScenes
49
+ .map(s => `- ${s.sceneId}: ${s.title} (${s.atomIds.length} atoms)`)
50
+ .join('\n');
51
+ prompt += `\n**Existing scenes (merge/update as needed):**\n${scenesText}\n`;
52
+ }
53
+ prompt += `\nGroup these facts into at most ${this.maxScenes} thematic scenarios. Output ONLY a JSON array.`;
54
+ return prompt;
55
+ }
56
+ async callLLM(userPrompt) {
57
+ const messages = [
58
+ { role: 'system', content: SCENE_AGGREGATION_SYSTEM_PROMPT },
59
+ { role: 'user', content: userPrompt },
60
+ ];
61
+ const chunks = [];
62
+ const stream = this.llmProvider.chatStream({
63
+ messages,
64
+ abortSignal: AbortSignal.timeout(this.timeoutMs),
65
+ });
66
+ for await (const chunk of stream) {
67
+ if (chunk.delta.content) {
68
+ chunks.push(chunk.delta.content);
69
+ }
70
+ }
71
+ return chunks.join('');
72
+ }
73
+ parseScenes(raw) {
74
+ const jsonMatch = raw.match(/\[[\s\S]*\]/);
75
+ if (!jsonMatch)
76
+ return [];
77
+ try {
78
+ const parsed = JSON.parse(jsonMatch[0]);
79
+ if (!Array.isArray(parsed))
80
+ return [];
81
+ return parsed
82
+ .filter((item) => item.sceneId && item.title)
83
+ .slice(0, this.maxScenes)
84
+ .map((item) => ({
85
+ sceneId: String(item.sceneId).replace(/[^a-z0-9_]/g, '_').toLowerCase(),
86
+ title: String(item.title),
87
+ description: String(item.description || ''),
88
+ atomIds: Array.isArray(item.atomIds) ? item.atomIds.map(String) : [],
89
+ }));
90
+ }
91
+ catch {
92
+ console.warn('[SceneAggregator] Failed to parse LLM output');
93
+ return [];
94
+ }
95
+ }
96
+ }
97
+ //# sourceMappingURL=scene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene.js","sourceRoot":"","sources":["../../../src/memory/scene.ts"],"names":[],"mappings":"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"}