@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
@@ -1,46 +0,0 @@
1
- // ============================================================
2
- // Security Guard 类型定义
3
- // ============================================================
4
-
5
- // ---- SanitizeResult ----
6
-
7
- export type Severity = 'safe' | 'warn' | 'danger' | 'blocked';
8
-
9
- export interface SanitizeResult {
10
- /** 是否允许执行 */
11
- safe: boolean;
12
- /** 改写后的命令(如 rm → mv 到回收站) */
13
- rewritten?: string;
14
- /** 拒绝/警告原因 */
15
- reason?: string;
16
- /** 严重程度 */
17
- severity: Severity;
18
- }
19
-
20
- // ---- SecurityRule / SecurityPolicy ----
21
-
22
- export interface SecurityRule {
23
- /** 规则名称 */
24
- name: string;
25
- /** 匹配模式(正则或函数) */
26
- pattern: RegExp | ((command: string) => boolean);
27
- /** 命中后的严重程度 */
28
- severity: Severity;
29
- /** 命中后的处理:'block' 阻止 | 'rewrite' 改写 | 'warn' 放行但记录 */
30
- action: 'block' | 'rewrite' | 'warn';
31
- /** 改写函数(action='rewrite' 时使用) */
32
- rewriter?: (command: string) => string;
33
- /** 规则描述 */
34
- description?: string;
35
- }
36
-
37
- export interface SecurityPolicy {
38
- /** 是否启用删除保护(rm → mv 到回收站) */
39
- deleteProtection: boolean;
40
- /** 回收站路径 */
41
- trashDir: string;
42
- /** 是否启用黑名单 */
43
- blacklistEnabled: boolean;
44
- /** 自定义规则 */
45
- rules: SecurityRule[];
46
- }
@@ -1,420 +0,0 @@
1
- // ============================================================
2
- // SkillManager — Skill 懒加载 / 解析 / 管理
3
- // ============================================================
4
-
5
- import * as fs from 'fs';
6
- import * as path from 'path';
7
- import type { Skill, SkillManifest, SkillSource } from './types.ts';
8
-
9
- /** 简单 LRU 缓存(基于 Map 插入顺序) */
10
- class LRUCache<V> {
11
- private cache = new Map<string, V>();
12
- private max: number;
13
-
14
- constructor(max: number) {
15
- this.max = max;
16
- }
17
-
18
- get(key: string): V | undefined {
19
- const val = this.cache.get(key);
20
- if (val !== undefined) {
21
- // 移到末尾(最近使用)
22
- this.cache.delete(key);
23
- this.cache.set(key, val);
24
- }
25
- return val;
26
- }
27
-
28
- set(key: string, value: V): void {
29
- if (this.cache.has(key)) {
30
- this.cache.delete(key);
31
- } else if (this.cache.size >= this.max) {
32
- // 删除最旧的(Map 的第一个 key)
33
- const firstKey = this.cache.keys().next().value;
34
- if (firstKey !== undefined) this.cache.delete(firstKey);
35
- }
36
- this.cache.set(key, value);
37
- }
38
-
39
- has(key: string): boolean {
40
- return this.cache.has(key);
41
- }
42
-
43
- delete(key: string): void {
44
- this.cache.delete(key);
45
- }
46
-
47
- clear(): void {
48
- this.cache.clear();
49
- }
50
-
51
- get size(): number {
52
- return this.cache.size;
53
- }
54
- }
55
-
56
- /** 懒加载配置 */
57
- interface LazyLoadConfig {
58
- /** content LRU 缓存容量(默认 30) */
59
- cacheSize?: number;
60
- /** 是否在启动时就加载 content(false=懒加载,默认 true 保持向后兼容) */
61
- lazy?: boolean;
62
- }
63
-
64
- export class SkillManager {
65
- /** 轻量清单索引(仅 front matter,不含 content) */
66
- private manifests = new Map<string, SkillManifest>();
67
- /** content LRU 缓存(懒加载时按需填充) */
68
- private contentCache: LRUCache<string>;
69
- /** 是否启用懒加载 */
70
- private lazy: boolean;
71
- /** 记录加载的目录,用于 reload */
72
- private loadedDirs: Array<{ dir: string; source: SkillSource; connectorId?: string }> = [];
73
-
74
- constructor(config?: LazyLoadConfig) {
75
- this.contentCache = new LRUCache(config?.cacheSize ?? 30);
76
- this.lazy = config?.lazy ?? false;
77
- }
78
-
79
- /**
80
- * 将连接器 ID 和 Skill ID 拼接为内部存储 key
81
- * 格式:`{connectorId}__{skillId}`
82
- */
83
- static connectorSkillKey(connectorId: string, skillId: string): string {
84
- return `${connectorId}__${skillId}`;
85
- }
86
-
87
- /**
88
- * 拆分连接器 Skill key,返回 [connectorId, skillId],无连接器则返回 null
89
- */
90
- static splitConnectorSkillKey(key: string): [string, string] | null {
91
- const idx = key.indexOf('__');
92
- if (idx <= 0) return null;
93
- return [key.substring(0, idx), key.substring(idx + 2)];
94
- }
95
-
96
- /**
97
- * 从目录加载 Skill 文件
98
- *
99
- * - lazy=true:仅解析 front matter(manifest),不读 content,毫秒级完成
100
- * - lazy=false(默认):全量读取,保持向后兼容
101
- */
102
- loadFromDir(dir: string, source: SkillSource, connectorId?: string): void {
103
- this.loadedDirs.push({ dir, source, connectorId });
104
-
105
- const resolvedDir = dir.startsWith('~')
106
- ? path.join(process.env.HOME || '', dir.slice(1))
107
- : path.resolve(dir);
108
-
109
- if (!fs.existsSync(resolvedDir)) return;
110
-
111
- const files = fs.readdirSync(resolvedDir);
112
- for (const file of files) {
113
- if (!file.endsWith('.md')) continue;
114
- const baseId = path.basename(file, '.md');
115
- const filePath = path.join(resolvedDir, file);
116
- const storageId = connectorId
117
- ? SkillManager.connectorSkillKey(connectorId, baseId)
118
- : baseId;
119
-
120
- if (this.lazy) {
121
- // 懒加载模式:仅解析 front matter,不读 content
122
- const manifest = this.parseManifest(baseId, filePath, source, connectorId);
123
- if (manifest) {
124
- this.manifests.set(storageId, manifest);
125
- }
126
- } else {
127
- // 兼容模式:全量读取(保持原有行为)
128
- const raw = fs.readFileSync(filePath, 'utf-8');
129
- const skill = this.parse(baseId, raw, source);
130
- if (connectorId) {
131
- skill.metadata = { ...skill.metadata, connectorId };
132
- }
133
- this.manifests.set(storageId, this.toManifest(skill, filePath));
134
- this.contentCache.set(storageId, skill.content);
135
- }
136
- }
137
- }
138
-
139
- /** 手动注册 Skill(全量,含 content) */
140
- register(skill: Skill): void {
141
- this.manifests.set(skill.id, this.toManifest(skill));
142
- if (skill.content) {
143
- this.contentCache.set(skill.id, skill.content);
144
- }
145
- }
146
-
147
- /** 注销 Skill */
148
- unregister(id: string): void {
149
- this.manifests.delete(id);
150
- this.contentCache.delete(id);
151
- }
152
-
153
- /**
154
- * 获取指定 Skill(含 content)
155
- *
156
- * - 缓存命中:直接返回
157
- * - 缓存未命中 + 有 filePath:从磁盘懒加载 content
158
- * - 缓存未命中 + 无 filePath:返回空 content(仅 manifest)
159
- */
160
- get(id: string): Skill | undefined {
161
- const manifest = this.manifests.get(id);
162
- if (!manifest) return undefined;
163
-
164
- let content = this.contentCache.get(id);
165
- if (content === undefined) {
166
- // 懒加载:从磁盘读取 content
167
- content = this.loadContent(manifest);
168
- if (content) {
169
- this.contentCache.set(id, content);
170
- // 自动加载引用的 Skills(referencedSkills)
171
- this.preloadReferencedSkills(manifest);
172
- }
173
- }
174
-
175
- return { ...manifest, content: content || '' };
176
- }
177
-
178
- /**
179
- * 获取 Skill 清单(不含 content,用于路由目录构建和 UI 展示)
180
- */
181
- getManifest(id: string): SkillManifest | undefined {
182
- return this.manifests.get(id);
183
- }
184
-
185
- /**
186
- * 获取所有 Skill 清单(不含 content)
187
- * 适用于 SkillRouter 构建路由目录、Engine 构建 skill catalog、UI 列表展示
188
- */
189
- getAllManifests(): SkillManifest[] {
190
- return [...this.manifests.values()];
191
- }
192
-
193
- /** 获取所有已注册 Skill(含 content,触发懒加载) */
194
- getAll(): Skill[] {
195
- return [...this.manifests.keys()].map(id => this.get(id)!).filter(Boolean);
196
- }
197
-
198
- /** 按标签过滤 */
199
- getByTag(tag: string): Skill[] {
200
- return this.getAll().filter((s) =>
201
- s.tags.some((t) => t.toLowerCase() === tag.toLowerCase()),
202
- );
203
- }
204
-
205
- /** 检查某个目录是否已在加载列表中 */
206
- hasLoadedDir(dir: string): boolean {
207
- const resolvedDir = dir.startsWith('~')
208
- ? path.join(process.env.HOME || '', dir.slice(1))
209
- : path.resolve(dir);
210
- return this.loadedDirs.some(d => {
211
- const existing = d.dir.startsWith('~')
212
- ? path.join(process.env.HOME || '', d.dir.slice(1))
213
- : path.resolve(d.dir);
214
- return existing === resolvedDir;
215
- });
216
- }
217
-
218
- /** 获取缓存统计信息 */
219
- getCacheStats(): { manifestCount: number; cachedContentCount: number; lazyMode: boolean } {
220
- return {
221
- manifestCount: this.manifests.size,
222
- cachedContentCount: this.contentCache.size,
223
- lazyMode: this.lazy,
224
- };
225
- }
226
-
227
- /** 重新加载(文件变更后刷新) */
228
- reload(): void {
229
- this.manifests.clear();
230
- this.contentCache.clear();
231
- const dirs = [...this.loadedDirs];
232
- this.loadedDirs = []; // 重置,loadFromDir 会重新填充
233
- for (const { dir, source, connectorId } of dirs) {
234
- this.loadFromDir(dir, source, connectorId);
235
- }
236
- }
237
-
238
- // ---- 内部方法 ----
239
-
240
- /**
241
- * 从磁盘懒加载 content
242
- * 支持 Markdown 文件(含 front matter)和纯文本
243
- */
244
- private loadContent(manifest: SkillManifest): string {
245
- if (!manifest.filePath) return '';
246
- try {
247
- if (!fs.existsSync(manifest.filePath)) return '';
248
- const raw = fs.readFileSync(manifest.filePath, 'utf-8');
249
- const normalized = raw.replace(/\r\n/g, '\n');
250
- const match = normalized.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
251
- if (match) {
252
- return match[2].trim();
253
- }
254
- return raw;
255
- } catch (err: any) {
256
- console.warn(`[SkillManager] Failed to lazy-load content for "${manifest.id}":`, err?.message);
257
- return '';
258
- }
259
- }
260
-
261
- /**
262
- * 预加载引用的 Skills(referencedSkills)
263
- * 当某个 Skill 被加载时,自动加载它引用的其他 Skills
264
- */
265
- private preloadReferencedSkills(manifest: SkillManifest): void {
266
- if (!manifest.referencedSkills?.length) return;
267
- for (const refId of manifest.referencedSkills) {
268
- if (!this.contentCache.has(refId)) {
269
- const refManifest = this.manifests.get(refId);
270
- if (refManifest) {
271
- const content = this.loadContent(refManifest);
272
- if (content) {
273
- this.contentCache.set(refId, content);
274
- }
275
- }
276
- }
277
- }
278
- }
279
-
280
- /** 从 Skill 对象提取清单(剥离 content) */
281
- private toManifest(skill: Skill, filePath?: string): SkillManifest {
282
- const { content, ...manifest } = skill;
283
- if (filePath) manifest.filePath = filePath;
284
- if (!manifest.contentSize && content) {
285
- manifest.contentSize = content.length;
286
- }
287
- return manifest;
288
- }
289
-
290
- /**
291
- * 仅解析 front matter(不读 content),用于懒加载模式
292
- * 通过读取文件前 N 字节提取 YAML front matter,避免加载整个文件
293
- */
294
- private parseManifest(id: string, filePath: string, source: SkillSource, connectorId?: string): SkillManifest | null {
295
- try {
296
- // 只读取文件前 2KB 来提取 front matter
297
- const fd = fs.openSync(filePath, 'r');
298
- const buf = Buffer.alloc(2048);
299
- const bytesRead = fs.readSync(fd, buf, 0, 2048, 0);
300
- fs.closeSync(fd);
301
-
302
- const head = buf.toString('utf-8', 0, bytesRead);
303
- const normalized = head.replace(/\r\n/g, '\n');
304
- const match = normalized.match(/^---\n([\s\S]*?)\n---/);
305
-
306
- const fileSize = fs.statSync(filePath).size;
307
-
308
- if (!match) {
309
- // 无 front matter,使用文件名作为 name
310
- return {
311
- id,
312
- name: id,
313
- description: '',
314
- tags: [],
315
- aliases: [],
316
- source,
317
- filePath,
318
- contentSize: fileSize,
319
- referencedSkills: [],
320
- requires: [],
321
- ...(connectorId ? { metadata: { connectorId } } : {}),
322
- };
323
- }
324
-
325
- const fm = match[1];
326
- const referencedSkills = this.parseTags(this.extractField(fm, 'referenced_skills') || this.extractField(fm, 'referencedSkills') || '');
327
-
328
- const manifest: SkillManifest = {
329
- id,
330
- name: this.extractField(fm, 'name') || id,
331
- description: this.extractField(fm, 'description') || '',
332
- tags: this.parseTags(this.extractField(fm, 'tags') || ''),
333
- aliases: this.parseTags(this.extractField(fm, 'aliases') || ''),
334
- source,
335
- version: this.extractField(fm, 'version') || undefined,
336
- author: this.extractField(fm, 'author') || undefined,
337
- requires: this.parseTags(this.extractField(fm, 'requires') || ''),
338
- referencedSkills: referencedSkills.length > 0 ? referencedSkills : undefined,
339
- filePath,
340
- contentSize: fileSize,
341
- ...(connectorId ? { metadata: { connectorId } } : {}),
342
- };
343
-
344
- return manifest;
345
- } catch (err: any) {
346
- console.warn(`[SkillManager] Failed to parse manifest for "${id}":`, err?.message);
347
- return null;
348
- }
349
- }
350
-
351
- /** 解析完整的 Markdown 文件(含 content),用于兼容模式 */
352
- private parse(id: string, raw: string, source: SkillSource): Skill {
353
- // 统一行尾为 \n(兼容 Windows CRLF)
354
- const normalized = raw.replace(/\r\n/g, '\n');
355
- const match = normalized.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
356
- if (!match) {
357
- return {
358
- id,
359
- name: id,
360
- description: '',
361
- tags: [],
362
- aliases: [],
363
- content: raw,
364
- source,
365
- requires: [],
366
- };
367
- }
368
-
369
- let frontMatter = match[1];
370
- let content = match[2].trim();
371
-
372
- // 检测双重 frontmatter(旧版 createSkillFromFile 产生的问题)
373
- const doubleMatch = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
374
- if (doubleMatch) {
375
- const fm1Fields = frontMatter.split('\n').filter(l => /^\w+:/.test(l)).length;
376
- const fm2Fields = doubleMatch[1].split('\n').filter(l => /^\w+:/.test(l)).length;
377
- if (fm2Fields > fm1Fields) {
378
- frontMatter = doubleMatch[1];
379
- content = doubleMatch[2].trim();
380
- }
381
- }
382
-
383
- return {
384
- id,
385
- name: this.extractField(frontMatter, 'name') || id,
386
- description: this.extractField(frontMatter, 'description') || '',
387
- tags: this.parseTags(this.extractField(frontMatter, 'tags') || ''),
388
- aliases: this.parseTags(this.extractField(frontMatter, 'aliases') || ''),
389
- content,
390
- source,
391
- version: this.extractField(frontMatter, 'version') || undefined,
392
- author: this.extractField(frontMatter, 'author') || undefined,
393
- requires: this.parseTags(this.extractField(frontMatter, 'requires') || ''),
394
- referencedSkills: this.parseReferencedSkills(frontMatter),
395
- };
396
- }
397
-
398
- /** 解析 referenced_skills 字段 */
399
- private parseReferencedSkills(frontMatter: string): string[] | undefined {
400
- const raw = this.extractField(frontMatter, 'referenced_skills') || this.extractField(frontMatter, 'referencedSkills') || '';
401
- const tags = this.parseTags(raw);
402
- return tags.length > 0 ? tags : undefined;
403
- }
404
-
405
- private extractField(frontMatter: string, field: string): string {
406
- const regex = new RegExp(`^${field}:\\s*(.+)$`, 'm');
407
- const match = frontMatter.match(regex);
408
- return match ? match[1].trim() : '';
409
- }
410
-
411
- private parseTags(raw: string): string[] {
412
- // 支持 [tag1, tag2] 和 tag1, tag2 两种格式
413
- const cleaned = raw.replace(/^\[|\]$/g, '');
414
- if (!cleaned.trim()) return [];
415
- return cleaned
416
- .split(',')
417
- .map((t) => t.trim())
418
- .filter(Boolean);
419
- }
420
- }
@@ -1,158 +0,0 @@
1
- // ============================================================
2
- // SkillRouter — 三级路由(自定义策略/显式/关键词)
3
- // ============================================================
4
- // 未命中时由 Engine 在 system prompt 中注入 skill catalog,
5
- // Agent 通过 load_skill 工具按需加载,无需独立 LLM 路由调用
6
-
7
- import type { Skill, SkillManifest, RouteResult, RouteStrategy } from './types.ts';
8
- import type { SkillManager } from './manager.ts';
9
-
10
- export class SkillRouter {
11
- private strategies: RouteStrategy[] = [];
12
- private skillManager: SkillManager;
13
-
14
- constructor(skillManager: SkillManager) {
15
- this.skillManager = skillManager;
16
- }
17
-
18
- /**
19
- * 路由:自定义策略 → 显式调用 → 关键词匹配
20
- * 命中即停,全部未命中返回 { skill: null }(由 Engine 注入 skill catalog,Agent 自主调用 load_skill)
21
- */
22
- async route(message: string): Promise<RouteResult> {
23
- // 使用 manifests 做路由匹配(避免触发全量懒加载)
24
- const manifests = this.skillManager.getAllManifests();
25
- if (manifests.length === 0) {
26
- return { skill: null, message, matchType: 'explicit', confidence: 0 };
27
- }
28
-
29
- // ① 自定义策略(优先级最高)— 需要全量 Skill,保持兼容
30
- const skills = this.skillManager.getAll();
31
- for (const strategy of this.strategies) {
32
- const result = await strategy.match(message, skills);
33
- if (result) return result;
34
- }
35
-
36
- // ② 显式调用(斜杠命令)
37
- const explicitResult = this.matchExplicit(message);
38
- if (explicitResult) return explicitResult;
39
-
40
- // ③ 关键词匹配(仅用 manifest,不触发加载)
41
- const keywordResult = this.matchByKeywords(message, manifests);
42
- if (keywordResult) return keywordResult;
43
-
44
- // ④ 全部未命中 → Engine 会在 system prompt 注入 skill catalog
45
- return { skill: null, message, matchType: 'explicit', confidence: 0 };
46
- }
47
-
48
- /** 注册自定义路由策略(优先级高于内置三级路由) */
49
- addStrategy(strategy: RouteStrategy): void {
50
- this.strategies.push(strategy);
51
- }
52
-
53
- /** 移除自定义策略 */
54
- removeStrategy(name: string): void {
55
- this.strategies = this.strategies.filter((s) => s.name !== name);
56
- }
57
-
58
- // ---- 第1级:显式调用(斜杠命令) ----
59
-
60
- private matchExplicit(message: string): RouteResult | null {
61
- if (!message.startsWith('/')) return null;
62
-
63
- // 支持两种格式:
64
- // 1. /skill-id (公有 Skill 或匹配唯一后缀的连接器 Skill)
65
- // 2. /connector-id/skill-id (显式指定连接器的 Skill)
66
- const match = message.match(/^\/([a-z0-9_-]+)(?:\/([a-z0-9_-]+))?\s*(.*)/is);
67
- if (!match) return null;
68
-
69
- const first = match[1];
70
- const second = match[2];
71
- const rest = match[3] || '';
72
-
73
- if (second) {
74
- // 格式 /connector/skill → 查找连接器前缀 key: {connector}__{skill}
75
- const prefixedKey = `${first}__${second}`;
76
- const skill = this.skillManager.get(prefixedKey);
77
- if (skill) {
78
- return { skill, message: rest || skill.description, matchType: 'explicit', confidence: 1 };
79
- }
80
- return null;
81
- }
82
-
83
- // 格式 /skill-id → 先精确匹配,再查找连接器后缀唯一匹配
84
- let skill = this.skillManager.get(first);
85
- if (skill) {
86
- return { skill, message: rest || skill.description, matchType: 'explicit', confidence: 1 };
87
- }
88
-
89
- // 尝试后缀匹配:查找 key 以 `__{first}` 结尾的连接器 Skill
90
- const suffix = `__${first}`;
91
- const allManifests = this.skillManager.getAllManifests();
92
- const candidates = allManifests.filter(m => {
93
- const key = this.getManifestStorageKey(m);
94
- return key.endsWith(suffix);
95
- });
96
- if (candidates.length === 1) {
97
- const storageKey = this.getManifestStorageKey(candidates[0]);
98
- const skill = this.skillManager.get(storageKey);
99
- if (skill) {
100
- return { skill, message: rest || skill.description, matchType: 'explicit', confidence: 1 };
101
- }
102
- }
103
-
104
- return null;
105
- }
106
-
107
- /**
108
- * 获取 Skill 在 SkillManager 中的存储 key
109
- * 通过 metadata.connectorId 判断是否为连接器 Skill
110
- */
111
- private getSkillStorageKey(skill: Skill): string {
112
- const connectorId = skill.metadata?.connectorId as string | undefined;
113
- return connectorId ? `${connectorId}__${skill.id}` : skill.id;
114
- }
115
-
116
- /** 获取 Manifest 在 SkillManager 中的存储 key(同 getSkillStorageKey,但用 manifest 类型) */
117
- private getManifestStorageKey(manifest: SkillManifest): string {
118
- const connectorId = manifest.metadata?.connectorId as string | undefined;
119
- return connectorId ? `${connectorId}__${manifest.id}` : manifest.id;
120
- }
121
-
122
- // ---- 第2级:关键词匹配(保守模式,仅高置信度时命中)----
123
-
124
- private matchByKeywords(message: string, manifests: SkillManifest[]): RouteResult | null {
125
- let bestMatch: { manifest: SkillManifest; score: number; coverage: number } | null = null;
126
- const lowerMsg = message.toLowerCase();
127
-
128
- for (const manifest of manifests) {
129
- // 合并 tags + aliases 作为匹配词库
130
- const keywords = [...manifest.tags, ...manifest.aliases];
131
- if (keywords.length === 0) continue;
132
-
133
- const score = keywords.filter((kw) => lowerMsg.includes(kw.toLowerCase())).length;
134
- const coverage = score / keywords.length;
135
-
136
- // 保守策略:至少 2 个关键词命中,且覆盖率 >= 50%
137
- if (score >= 2 && coverage >= 0.5 && (!bestMatch || score > bestMatch.score)) {
138
- bestMatch = { manifest, score, coverage };
139
- }
140
- }
141
-
142
- if (!bestMatch) return null;
143
-
144
- // 命中后才触发懒加载全量内容
145
- const storageKey = this.getManifestStorageKey(bestMatch.manifest);
146
- const skill = this.skillManager.get(storageKey);
147
- if (!skill) return null;
148
-
149
- return {
150
- skill,
151
- message,
152
- matchType: 'keyword',
153
- confidence: bestMatch.coverage,
154
- };
155
- }
156
- }
157
-
158
-
@@ -1,67 +0,0 @@
1
- // ============================================================
2
- // Skill System 类型定义
3
- // ============================================================
4
-
5
- // ---- Skill 类型 ----
6
-
7
- export type SkillSource = 'system' | 'user' | 'remote';
8
-
9
- /**
10
- * Skill 轻量清单(仅 front matter,不含 content)
11
- * 用于大规模 Skill 库的索引、路由和 UI 展示
12
- */
13
- export interface SkillManifest {
14
- /** 唯一标识 */
15
- id: string;
16
- /** 显示名称 */
17
- name: string;
18
- /** 功能描述(LLM 路由和 UI 展示用) */
19
- description: string;
20
- /** 关键词标签(用于关键词路由匹配) */
21
- tags: string[];
22
- /** 别名/同义词 */
23
- aliases: string[];
24
- /** 来源 */
25
- source: SkillSource;
26
- /** 版本号 */
27
- version?: string;
28
- /** 作者信息 */
29
- author?: string;
30
- /** 依赖的 MCP 工具名列表 */
31
- requires?: string[];
32
- /** 引用的其他 Skill ID 列表(懒加载,使用时自动加载) */
33
- referencedSkills?: string[];
34
- /** 文件路径(懒加载时从此路径读取 content) */
35
- filePath?: string;
36
- /** content 字符数(预估,用于 UI 展示和预算管理) */
37
- contentSize?: number;
38
- /** 扩展元数据 */
39
- metadata?: Record<string, unknown>;
40
- }
41
-
42
- export interface Skill extends SkillManifest {
43
- /** Skill 正文内容(懒加载时可能为空,需通过 SkillManager.get() 触发加载) */
44
- content: string;
45
- }
46
-
47
- // ---- RouteResult / RouteStrategy ----
48
-
49
- export type MatchType = 'explicit' | 'keyword' | 'custom';
50
-
51
- export interface RouteResult {
52
- /** 匹配到的 Skill(null 表示无匹配,使用裸 Agent) */
53
- skill: Skill | null;
54
- /** 路由后实际传给 Agent 的消息(显式调用时会剥离 /command 前缀) */
55
- message: string;
56
- /** 匹配方式 */
57
- matchType: MatchType;
58
- /** 匹配置信度(0-1) */
59
- confidence: number;
60
- }
61
-
62
- /** 自定义路由策略接口 */
63
- export interface RouteStrategy {
64
- name: string;
65
- /** 执行路由,返回 RouteResult 或 null(交给下一策略) */
66
- match(message: string, skills: Skill[]): Promise<RouteResult | null>;
67
- }