@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,182 @@
1
+ /**
2
+ * @file OpenAI 兼容 LLM Provider
3
+ * @description 使用原生 fetch 实现,支持任意 OpenAI 兼容端点(OpenAI / DeepSeek / Ollama / vLLM 等)
4
+ */
5
+ export class OpenAIProvider {
6
+ config;
7
+ constructor(config) {
8
+ this.config = {
9
+ ...config,
10
+ provider: config.provider || 'openai',
11
+ model: config.model || 'gpt-4',
12
+ baseUrl: config.baseUrl || 'https://api.openai.com/v1',
13
+ temperature: config.temperature ?? 0.7,
14
+ maxTokens: (typeof config.maxTokens === 'number' && config.maxTokens > 0) ? config.maxTokens : 4096,
15
+ timeout: config.timeout ?? 120000,
16
+ };
17
+ }
18
+ getModel() {
19
+ return {
20
+ provider: this.config.provider,
21
+ model: this.config.model,
22
+ contextWindow: 128000,
23
+ supportsTools: true,
24
+ supportsStreaming: true,
25
+ };
26
+ }
27
+ async ping() {
28
+ try {
29
+ const res = await this.doRequest({
30
+ model: this.config.model,
31
+ messages: [{ role: 'user', content: 'ping' }],
32
+ max_tokens: 5,
33
+ });
34
+ return res.ok;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ async chat(params) {
41
+ const body = this.buildRequestBody(params, false);
42
+ const res = await this.doRequest(body, params.abortSignal);
43
+ if (!res.ok) {
44
+ const errText = await res.text().catch(() => 'Unknown error');
45
+ throw new Error(`LLM API error ${res.status}: ${errText}`);
46
+ }
47
+ const data = await res.json();
48
+ return {
49
+ choices: data.choices?.map((c) => ({
50
+ message: c.message,
51
+ finish_reason: c.finish_reason || 'stop',
52
+ })) || [],
53
+ usage: data.usage
54
+ ? {
55
+ promptTokens: data.usage.prompt_tokens || 0,
56
+ completionTokens: data.usage.completion_tokens || 0,
57
+ totalTokens: data.usage.total_tokens || 0,
58
+ }
59
+ : undefined,
60
+ };
61
+ }
62
+ async *chatStream(params) {
63
+ const body = this.buildRequestBody(params, true);
64
+ const res = await this.doRequest(body, params.abortSignal);
65
+ if (!res.ok) {
66
+ const errText = await res.text().catch(() => 'Unknown error');
67
+ throw new Error(`LLM API error ${res.status}: ${errText}`);
68
+ }
69
+ const reader = res.body?.getReader();
70
+ if (!reader)
71
+ throw new Error('No response body');
72
+ const decoder = new TextDecoder();
73
+ let buffer = '';
74
+ try {
75
+ while (true) {
76
+ const { done, value } = await reader.read();
77
+ if (done)
78
+ break;
79
+ buffer += decoder.decode(value, { stream: true });
80
+ const lines = buffer.split('\n');
81
+ buffer = lines.pop() || '';
82
+ for (const line of lines) {
83
+ const trimmed = line.trim();
84
+ if (!trimmed || trimmed === 'data: [DONE]')
85
+ continue;
86
+ if (!trimmed.startsWith('data: '))
87
+ continue;
88
+ try {
89
+ const json = JSON.parse(trimmed.slice(6));
90
+ const delta = json.choices?.[0]?.delta;
91
+ const finish = json.choices?.[0]?.finish_reason;
92
+ // 解析 usage(通常在最后一个 chunk 中,stream_options.include_usage=true)
93
+ if (json.usage) {
94
+ yield {
95
+ delta: {},
96
+ finish_reason: finish || undefined,
97
+ usage: {
98
+ promptTokens: json.usage.prompt_tokens || 0,
99
+ completionTokens: json.usage.completion_tokens || 0,
100
+ totalTokens: json.usage.total_tokens || 0,
101
+ },
102
+ };
103
+ continue;
104
+ }
105
+ if (delta || finish) {
106
+ yield {
107
+ delta: {
108
+ content: delta?.content || null,
109
+ reasoning_content: delta?.reasoning_content || null,
110
+ role: delta?.role,
111
+ tool_calls: delta?.tool_calls,
112
+ },
113
+ finish_reason: finish || undefined,
114
+ };
115
+ }
116
+ }
117
+ catch {
118
+ // skip malformed chunks
119
+ }
120
+ }
121
+ }
122
+ }
123
+ finally {
124
+ reader.releaseLock();
125
+ }
126
+ }
127
+ /** 更新配置(如 API Key 变更后) */
128
+ updateConfig(updates) {
129
+ Object.assign(this.config, updates);
130
+ }
131
+ // ---- 内部方法 ----
132
+ buildRequestBody(params, stream) {
133
+ const body = {
134
+ model: this.config.model,
135
+ messages: params.messages,
136
+ temperature: params.temperature ?? this.config.temperature,
137
+ max_tokens: (typeof params.maxTokens === 'number' && params.maxTokens > 0)
138
+ ? params.maxTokens
139
+ : (typeof this.config.maxTokens === 'number' && this.config.maxTokens > 0)
140
+ ? this.config.maxTokens
141
+ : 4096,
142
+ stream,
143
+ };
144
+ if (params.tools?.length) {
145
+ body.tools = params.tools;
146
+ if (params.toolChoice)
147
+ body.tool_choice = params.toolChoice;
148
+ }
149
+ if (stream) {
150
+ body.stream_options = { include_usage: true };
151
+ }
152
+ return body;
153
+ }
154
+ async doRequest(body, signal) {
155
+ const url = `${this.config.baseUrl.replace(/\/$/, '')}/chat/completions`;
156
+ const controller = new AbortController();
157
+ const timeout = setTimeout(() => controller.abort(), this.config.timeout);
158
+ // 合并外部 signal
159
+ if (signal) {
160
+ if (signal.aborted)
161
+ controller.abort();
162
+ else
163
+ signal.addEventListener('abort', () => controller.abort(), { once: true });
164
+ }
165
+ try {
166
+ return await fetch(url, {
167
+ method: 'POST',
168
+ headers: {
169
+ 'Content-Type': 'application/json',
170
+ ...(this.config.apiKey ? { Authorization: `Bearer ${this.config.apiKey}` } : {}),
171
+ },
172
+ body: JSON.stringify(body),
173
+ signal: controller.signal,
174
+ ...(this.config.proxy ? { dispatcher: this.config.proxy } : {}),
175
+ });
176
+ }
177
+ finally {
178
+ clearTimeout(timeout);
179
+ }
180
+ }
181
+ }
182
+ //# sourceMappingURL=openai-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-provider.js","sourceRoot":"","sources":["../../../src/llm/openai-provider.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,7 @@
1
- // ============================================================
2
- // LLM Provider — 类型接口 + 实现 + 工厂
3
- // ============================================================
4
-
5
- // 类型接口
6
1
  export type { LLMProvider, ModelConfig, ModelInfo, ChatParams, ChatResponse, ChatChunk } from './types.ts';
7
-
8
- // 实现
9
2
  export { OpenAIProvider } from './openai-provider.ts';
10
3
  export { AnthropicProvider } from './anthropic-provider.ts';
11
4
  export { OllamaProvider } from './ollama-provider.ts';
12
-
13
- // 工厂
14
5
  export { createLLMProvider, BUILTIN_PROVIDERS } from './factory.ts';
15
6
  export type { BuiltinProvider } from './factory.ts';
7
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/llm/provider.ts"],"names":[],"mappings":"AAKA,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG3G,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ // ============================================================
2
+ // LLM Provider — 类型接口 + 实现 + 工厂
3
+ // ============================================================
4
+ // 实现
5
+ export { OpenAIProvider } from "./openai-provider.js";
6
+ export { AnthropicProvider } from "./anthropic-provider.js";
7
+ export { OllamaProvider } from "./ollama-provider.js";
8
+ // 工厂
9
+ export { createLLMProvider, BUILTIN_PROVIDERS } from "./factory.js";
10
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/llm/provider.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,gCAAgC;AAChC,+DAA+D;AAK/D,KAAK;AACL,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,KAAK;AACL,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,78 @@
1
+ import type { Message, TokenUsage } from '../types.ts';
2
+ import type { ToolDefinition } from '../tool/types.ts';
3
+ import type { Dispatcher } from 'undici';
4
+ export interface ModelConfig {
5
+ /** 供应商标识:'openai' | 'anthropic' | 'azure' | 'ollama' | 自定义 */
6
+ provider: string;
7
+ /** 模型名称 */
8
+ model: string;
9
+ /** API Key */
10
+ apiKey?: string;
11
+ /** API Base URL(自定义端点) */
12
+ baseUrl?: string;
13
+ /** 温度参数,默认 0.7 */
14
+ temperature?: number;
15
+ /** 最大输出 token 数 */
16
+ maxTokens?: number;
17
+ /** 请求超时(毫秒) */
18
+ timeout?: number;
19
+ /** 供应商特定参数透传 */
20
+ extra?: Record<string, unknown>;
21
+ /** 网络代理 dispatcher(运行时注入,不持久化) */
22
+ proxy?: Dispatcher;
23
+ }
24
+ export interface ModelInfo {
25
+ provider: string;
26
+ model: string;
27
+ contextWindow: number;
28
+ supportsTools: boolean;
29
+ supportsStreaming: boolean;
30
+ }
31
+ /** LLM 推理请求参数 */
32
+ export interface ChatParams {
33
+ messages: Message[];
34
+ /** 可用工具列表(OpenAI Function Calling 格式) */
35
+ tools?: ToolDefinition[];
36
+ /** 工具调用策略 */
37
+ toolChoice?: 'auto' | 'none' | {
38
+ type: 'function';
39
+ function: {
40
+ name: string;
41
+ };
42
+ };
43
+ /** 覆盖 ModelConfig 中的 temperature */
44
+ temperature?: number;
45
+ /** 覆盖 ModelConfig 中的 maxTokens */
46
+ maxTokens?: number;
47
+ /** 中止信号 */
48
+ abortSignal?: AbortSignal;
49
+ }
50
+ /** LLM 推理响应 */
51
+ export interface ChatResponse {
52
+ choices: Array<{
53
+ message: Message;
54
+ /** 结束原因:'stop' | 'tool_calls' | 'length' | 'content_filter' */
55
+ finish_reason: string;
56
+ }>;
57
+ usage?: TokenUsage;
58
+ }
59
+ /** 流式响应片段 */
60
+ export interface ChatChunk {
61
+ /** 增量内容 */
62
+ delta: Partial<Message>;
63
+ finish_reason?: string;
64
+ /** Token 使用统计(仅最后一个 chunk 可能包含) */
65
+ usage?: TokenUsage;
66
+ }
67
+ /** LLM 供应商统一接口 */
68
+ export interface LLMProvider {
69
+ /** 非流式推理 */
70
+ chat(params: ChatParams): Promise<ChatResponse>;
71
+ /** 流式推理(返回 AsyncGenerator 逐片段推送) */
72
+ chatStream(params: ChatParams): AsyncGenerator<ChatChunk>;
73
+ /** 获取当前模型信息 */
74
+ getModel(): ModelInfo;
75
+ /** 测试连接是否正常 */
76
+ ping(): Promise<boolean>;
77
+ }
78
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/llm/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAIzC,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kCAAkC;IAClC,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAID,iBAAiB;AACjB,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAChF,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,eAAe;AACf,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,+DAA+D;QAC/D,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,aAAa;AACb,MAAM,WAAW,SAAS;IACxB,WAAW;IACX,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAID,kBAAkB;AAClB,MAAM,WAAW,WAAW;IAC1B,YAAY;IACZ,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAEhD,oCAAoC;IACpC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAE1D,eAAe;IACf,QAAQ,IAAI,SAAS,CAAC;IAEtB,eAAe;IACf,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B"}
@@ -0,0 +1,5 @@
1
+ // ============================================================
2
+ // LLM Provider 类型定义
3
+ // ============================================================
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/llm/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,oBAAoB;AACpB,+DAA+D"}
@@ -0,0 +1,50 @@
1
+ import type { MCPClient, MCPServerConfig } from './types.ts';
2
+ import type { ToolDefinition } from '../tool/types.ts';
3
+ /** JSON-RPC 请求 */
4
+ interface JsonRpcRequest {
5
+ jsonrpc: '2.0';
6
+ id: number;
7
+ method: string;
8
+ params?: Record<string, unknown>;
9
+ }
10
+ /** JSON-RPC 响应 */
11
+ interface JsonRpcResponse {
12
+ jsonrpc: '2.0';
13
+ id: number;
14
+ result?: unknown;
15
+ error?: {
16
+ code: number;
17
+ message: string;
18
+ data?: unknown;
19
+ };
20
+ }
21
+ /**
22
+ * MCPClient 抽象基类
23
+ * 子类只需实现 send() 和 doConnect() / doDisconnect()
24
+ */
25
+ export declare abstract class MCPClientBase implements MCPClient {
26
+ protected config: MCPServerConfig;
27
+ protected connected: boolean;
28
+ private requestId;
29
+ /** 等待响应的 Promise 队列:id → { resolve, reject, timer } */
30
+ private pending;
31
+ /** 建立物理连接 */
32
+ protected abstract doConnect(config: MCPServerConfig): Promise<void>;
33
+ /** 断开物理连接 */
34
+ protected abstract doDisconnect(): void;
35
+ /** 发送 JSON-RPC 消息到 MCP 服务端 */
36
+ protected abstract send(request: JsonRpcRequest): void;
37
+ connect(config: MCPServerConfig): Promise<void>;
38
+ listTools(): Promise<ToolDefinition[]>;
39
+ callTool(name: string, args: Record<string, unknown>): Promise<string>;
40
+ disconnect(): void;
41
+ isConnected(): boolean;
42
+ /** 发送 JSON-RPC 请求并等待响应 */
43
+ protected call(method: string, params?: Record<string, unknown>): Promise<unknown>;
44
+ /** 发送 JSON-RPC 通知(无 id,无响应) */
45
+ protected notify(method: string, params?: Record<string, unknown>): void;
46
+ /** 子类收到 JSON-RPC 响应时调用此方法 */
47
+ protected handleResponse(data: JsonRpcResponse): void;
48
+ }
49
+ export {};
50
+ //# sourceMappingURL=base-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/base-client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kBAAkB;AAClB,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,kBAAkB;AAClB,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D;AAED;;;GAGG;AACH,8BAAsB,aAAc,YAAW,SAAS;IACtD,SAAS,CAAC,MAAM,EAAG,eAAe,CAAC;IACnC,SAAS,CAAC,SAAS,UAAS;IAC5B,OAAO,CAAC,SAAS,CAAK;IACtB,uDAAuD;IACvD,OAAO,CAAC,OAAO,CAIV;IAIL,aAAa;IACb,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAEpE,aAAa;IACb,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI;IAEvC,8BAA8B;IAC9B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIhD,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/C,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IActC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAe5E,UAAU,IAAI,IAAI;IAWlB,WAAW,IAAI,OAAO;IAMtB,0BAA0B;IAC1B,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBlF,+BAA+B;IAC/B,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAQxE,6BAA6B;IAC7B,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;CAatD"}
@@ -0,0 +1,108 @@
1
+ // ============================================================
2
+ // MCPClientBase — JSON-RPC 2.0 基础层
3
+ // ============================================================
4
+ /**
5
+ * MCPClient 抽象基类
6
+ * 子类只需实现 send() 和 doConnect() / doDisconnect()
7
+ */
8
+ export class MCPClientBase {
9
+ config;
10
+ connected = false;
11
+ requestId = 0;
12
+ /** 等待响应的 Promise 队列:id → { resolve, reject, timer } */
13
+ pending = new Map();
14
+ // ---- 公共接口 ----
15
+ async connect(config) {
16
+ this.config = config;
17
+ await this.doConnect(config);
18
+ this.connected = true;
19
+ // MCP 协议握手
20
+ await this.call('initialize', {
21
+ protocolVersion: '2024-11-05',
22
+ capabilities: {},
23
+ clientInfo: { name: 'work_agent', version: '1.0.0' },
24
+ });
25
+ // 通知初始化完成
26
+ this.notify('notifications/initialized');
27
+ }
28
+ async listTools() {
29
+ const result = await this.call('tools/list', {});
30
+ if (!result?.tools)
31
+ return [];
32
+ return result.tools.map((t) => ({
33
+ type: 'function',
34
+ function: {
35
+ name: t.name,
36
+ description: t.description || '',
37
+ parameters: t.inputSchema || { type: 'object', properties: {} },
38
+ },
39
+ }));
40
+ }
41
+ async callTool(name, args) {
42
+ const result = await this.call('tools/call', { name, arguments: args });
43
+ if (result?.isError) {
44
+ const errMsg = result.content?.map(c => c.text || '').join('\n') || 'MCP tool returned error';
45
+ throw new Error(errMsg);
46
+ }
47
+ // 提取文本结果
48
+ return result?.content?.map(c => c.text || JSON.stringify(c)).join('\n') || '';
49
+ }
50
+ disconnect() {
51
+ // 拒绝所有等待中的请求
52
+ for (const [id, p] of this.pending) {
53
+ clearTimeout(p.timer);
54
+ p.reject(new Error('MCP client disconnected'));
55
+ }
56
+ this.pending.clear();
57
+ this.connected = false;
58
+ this.doDisconnect();
59
+ }
60
+ isConnected() {
61
+ return this.connected;
62
+ }
63
+ // ---- JSON-RPC 核心 ----
64
+ /** 发送 JSON-RPC 请求并等待响应 */
65
+ call(method, params) {
66
+ const id = ++this.requestId;
67
+ const timeout = this.config.timeout || 30000;
68
+ return new Promise((resolve, reject) => {
69
+ const timer = setTimeout(() => {
70
+ this.pending.delete(id);
71
+ reject(new Error(`MCP call '${method}' timed out after ${timeout}ms`));
72
+ }, timeout);
73
+ this.pending.set(id, { resolve, reject, timer });
74
+ try {
75
+ this.send({ jsonrpc: '2.0', id, method, params });
76
+ }
77
+ catch (e) {
78
+ clearTimeout(timer);
79
+ this.pending.delete(id);
80
+ reject(e);
81
+ }
82
+ });
83
+ }
84
+ /** 发送 JSON-RPC 通知(无 id,无响应) */
85
+ notify(method, params) {
86
+ try {
87
+ this.send({ jsonrpc: '2.0', id: 0, method, params });
88
+ }
89
+ catch {
90
+ // 通知失败静默忽略
91
+ }
92
+ }
93
+ /** 子类收到 JSON-RPC 响应时调用此方法 */
94
+ handleResponse(data) {
95
+ const pending = this.pending.get(data.id);
96
+ if (!pending)
97
+ return;
98
+ this.pending.delete(data.id);
99
+ clearTimeout(pending.timer);
100
+ if (data.error) {
101
+ pending.reject(new Error(`MCP error ${data.error.code}: ${data.error.message}`));
102
+ }
103
+ else {
104
+ pending.resolve(data.result);
105
+ }
106
+ }
107
+ }
108
+ //# sourceMappingURL=base-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-client.js","sourceRoot":"","sources":["../../../src/mcp/base-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { MCPClient } from './types.ts';
2
+ import type { ToolRegistry } from '../tool/registry.ts';
3
+ /** MCP 工具名前缀,用于与 builtin/skill 等工具区分 */
4
+ export declare const MCP_TOOL_PREFIX = "mcp_";
5
+ /**
6
+ * 将名称中的非安全字符替换为下划线,确保可安全用于工具名拼接
7
+ */
8
+ export declare function sanitizeForToolName(name: string): string;
9
+ /**
10
+ * 构建带命名空间的 MCP 工具名
11
+ *
12
+ * - 连接器工具:`mcp_{connectorId}_{serverName}_{toolName}`
13
+ * - 独立工具:`mcp_{serverName}_{toolName}`
14
+ *
15
+ * 命名空间从根源上解决多 MCP 服务器工具名冲突问题。
16
+ */
17
+ export declare function buildMCPToolName(toolName: string, serverName: string, connectorId?: string): string;
18
+ /**
19
+ * 将 MCP 服务的远程工具批量注册到 ToolRegistry
20
+ *
21
+ * 工具名自动添加命名空间前缀 `mcp_[{connectorId}_]{serverName}_{toolName}`,
22
+ * 避免多 MCP 服务器间工具名冲突。调用 MCP 服务时使用原始名字。
23
+ *
24
+ * @param connectorId 连接器 ID(公有 MCP 服务器传 undefined,连接器私有传连接器 ID)
25
+ */
26
+ export declare function registerMCPTools(registry: ToolRegistry, mcpClient: MCPClient, serverName: string, connectorId?: string, serverId?: number | string): Promise<void>;
27
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/mcp/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,wCAAwC;AACxC,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAQnG;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
@@ -0,0 +1,70 @@
1
+ // ============================================================
2
+ // MCP Client — 工具自动注册辅助函数
3
+ // ============================================================
4
+ /** MCP 工具名前缀,用于与 builtin/skill 等工具区分 */
5
+ export const MCP_TOOL_PREFIX = 'mcp_';
6
+ /**
7
+ * 将名称中的非安全字符替换为下划线,确保可安全用于工具名拼接
8
+ */
9
+ export function sanitizeForToolName(name) {
10
+ return name
11
+ .replace(/[^a-zA-Z0-9_]/g, '_') // 非安全字符 → _
12
+ .replace(/_+/g, '_') // 合并连续下划线
13
+ .replace(/^_|_$/g, ''); // 去除首尾下划线
14
+ }
15
+ /**
16
+ * 构建带命名空间的 MCP 工具名
17
+ *
18
+ * - 连接器工具:`mcp_{connectorId}_{serverName}_{toolName}`
19
+ * - 独立工具:`mcp_{serverName}_{toolName}`
20
+ *
21
+ * 命名空间从根源上解决多 MCP 服务器工具名冲突问题。
22
+ */
23
+ export function buildMCPToolName(toolName, serverName, connectorId) {
24
+ const safeTool = sanitizeForToolName(toolName);
25
+ const safeServer = sanitizeForToolName(serverName);
26
+ if (connectorId) {
27
+ const safeConn = sanitizeForToolName(connectorId);
28
+ return `${MCP_TOOL_PREFIX}${safeConn}_${safeServer}_${safeTool}`;
29
+ }
30
+ return `${MCP_TOOL_PREFIX}${safeServer}_${safeTool}`;
31
+ }
32
+ /**
33
+ * 将 MCP 服务的远程工具批量注册到 ToolRegistry
34
+ *
35
+ * 工具名自动添加命名空间前缀 `mcp_[{connectorId}_]{serverName}_{toolName}`,
36
+ * 避免多 MCP 服务器间工具名冲突。调用 MCP 服务时使用原始名字。
37
+ *
38
+ * @param connectorId 连接器 ID(公有 MCP 服务器传 undefined,连接器私有传连接器 ID)
39
+ */
40
+ export async function registerMCPTools(registry, mcpClient, serverName, connectorId, serverId) {
41
+ const remoteTools = await mcpClient.listTools();
42
+ console.log(`[MCP] registerMCPTools for '${serverName}' (connector=${connectorId || 'none'}): ${remoteTools.length} tools — ${remoteTools.map(t => t.function.name).join(', ')}`);
43
+ for (const def of remoteTools) {
44
+ const originalName = def.function.name;
45
+ const prefixedName = buildMCPToolName(originalName, serverName, connectorId);
46
+ registry.register({
47
+ definition: {
48
+ ...def,
49
+ function: { ...def.function, name: prefixedName },
50
+ },
51
+ executor: async (args) => {
52
+ console.log(`[MCP] executor '${prefixedName}' called (server=${serverName})`);
53
+ console.log(` → args: ${JSON.stringify(args)}`);
54
+ try {
55
+ const result = await mcpClient.callTool(originalName, args);
56
+ console.log(` ← result (${result.length} chars): ${result.substring(0, 200)}${result.length > 200 ? '...' : ''}`);
57
+ return result;
58
+ }
59
+ catch (e) {
60
+ console.error(` ✗ executor '${prefixedName}' failed: ${e?.message || e}`);
61
+ throw e;
62
+ }
63
+ },
64
+ category: 'mcp',
65
+ concurrent: true, // MCP 工具默认可并发(纯网络请求)
66
+ metadata: { mcpServer: serverName, serverId, originalName, connectorId },
67
+ });
68
+ }
69
+ }
70
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/mcp/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { MCPClient, MCPServerConfig } from './types.ts';
2
+ /** 自定义 transport 工厂函数签名 */
3
+ export type TransportFactory = () => MCPClient;
4
+ /**
5
+ * 注册自定义 transport 工厂
6
+ * 上层应用通过此方法扩展 core 层不内置的 transport 类型(如 api-bridge)
7
+ */
8
+ export declare function registerTransport(transport: string, factory: TransportFactory): void;
9
+ /**
10
+ * 根据 MCPServerConfig.transport 创建对应的 MCPClient 实例
11
+ *
12
+ * 内置支持:stdio / http / sse
13
+ * 自定义 transport:通过 registerTransport 注册后支持
14
+ */
15
+ export declare function createMCPClient(config: MCPServerConfig): MCPClient;
16
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/mcp/factory.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7D,2BAA2B;AAC3B,MAAM,MAAM,gBAAgB,GAAG,MAAM,SAAS,CAAC;AAK/C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAGpF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAclE"}