@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,39 @@
1
+ // ============================================================
2
+ // MCPClient Factory — 根据 transport 类型创建对应 Client
3
+ // 支持上层应用通过 registerTransport 注册自定义 transport
4
+ // ============================================================
5
+ import { StdioMCPClient } from "./stdio-client.js";
6
+ import { HttpMCPClient } from "./http-client.js";
7
+ /** 已注册的自定义 transport 工厂映射 */
8
+ const customTransports = new Map();
9
+ /**
10
+ * 注册自定义 transport 工厂
11
+ * 上层应用通过此方法扩展 core 层不内置的 transport 类型(如 api-bridge)
12
+ */
13
+ export function registerTransport(transport, factory) {
14
+ customTransports.set(transport, factory);
15
+ console.log(`[MCP Factory] registered custom transport: ${transport}`);
16
+ }
17
+ /**
18
+ * 根据 MCPServerConfig.transport 创建对应的 MCPClient 实例
19
+ *
20
+ * 内置支持:stdio / http / sse
21
+ * 自定义 transport:通过 registerTransport 注册后支持
22
+ */
23
+ export function createMCPClient(config) {
24
+ switch (config.transport) {
25
+ case 'stdio':
26
+ return new StdioMCPClient();
27
+ case 'http':
28
+ case 'sse':
29
+ case 'streamableHttp':
30
+ return new HttpMCPClient();
31
+ default: {
32
+ const factory = customTransports.get(config.transport);
33
+ if (factory)
34
+ return factory();
35
+ throw new Error(`Unsupported MCP transport: ${config.transport}`);
36
+ }
37
+ }
38
+ }
39
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/mcp/factory.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,iDAAiD;AACjD,6CAA6C;AAC7C,+DAA+D;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjD,6BAA6B;AAC7B,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA4B,CAAC;AAE7D;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,OAAyB;IAC5E,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,8CAA8C,SAAS,EAAE,CAAC,CAAC;AACzE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAuB;IACrD,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC;QACzB,KAAK,OAAO;YACV,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,gBAAgB;YACnB,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACvD,IAAI,OAAO;gBAAE,OAAO,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { MCPClientBase } from './base-client.ts';
2
+ import type { MCPServerConfig } from './types.ts';
3
+ export declare class HttpMCPClient extends MCPClientBase {
4
+ private endpoint;
5
+ private sessionId?;
6
+ private dispatcher?;
7
+ /** 用户自定义请求头(如 Authorization) */
8
+ private customHeaders?;
9
+ /** 结构化鉴权配置 */
10
+ private authConfig?;
11
+ protected doConnect(config: MCPServerConfig): Promise<void>;
12
+ protected doDisconnect(): void;
13
+ /** 根据 auth 配置生成鉴权请求头 */
14
+ private buildAuthHeaders;
15
+ protected send(request: {
16
+ jsonrpc: string;
17
+ id: number;
18
+ method: string;
19
+ params?: Record<string, unknown>;
20
+ }): void;
21
+ /** 解析 SSE 文本块中的 JSON-RPC 响应 */
22
+ private parseSSE;
23
+ }
24
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,gCAAgC;IAChC,OAAO,CAAC,aAAa,CAAC,CAAyB;IAC/C,cAAc;IACd,OAAO,CAAC,UAAU,CAAC,CAAiD;cAEpD,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE,SAAS,CAAC,YAAY,IAAI,IAAI;IAW9B,wBAAwB;IACxB,OAAO,CAAC,gBAAgB;IAkBxB,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAuEhH,+BAA+B;IAC/B,OAAO,CAAC,QAAQ;CAkBjB"}
@@ -0,0 +1,138 @@
1
+ // ============================================================
2
+ // HttpMCPClient — HTTP / SSE 传输的 MCP 客户端
3
+ // ============================================================
4
+ import { MCPClientBase } from "./base-client.js";
5
+ import { resolveProxyAgentForCategory } from "./proxy-agent.js";
6
+ export class HttpMCPClient extends MCPClientBase {
7
+ endpoint = '';
8
+ sessionId;
9
+ dispatcher;
10
+ /** 用户自定义请求头(如 Authorization) */
11
+ customHeaders;
12
+ /** 结构化鉴权配置 */
13
+ authConfig;
14
+ async doConnect(config) {
15
+ if (!config.endpoint) {
16
+ throw new Error(`${config.transport} transport requires an "endpoint" URL in config`);
17
+ }
18
+ this.endpoint = config.endpoint;
19
+ this.dispatcher = resolveProxyAgentForCategory(config.proxyCategory, 'MCP:HTTP');
20
+ this.customHeaders = config.headers;
21
+ this.authConfig = config.auth;
22
+ }
23
+ doDisconnect() {
24
+ this.endpoint = '';
25
+ this.sessionId = undefined;
26
+ this.customHeaders = undefined;
27
+ this.authConfig = undefined;
28
+ if (this.dispatcher && typeof this.dispatcher.close === 'function') {
29
+ this.dispatcher.close().catch(() => { });
30
+ }
31
+ this.dispatcher = undefined;
32
+ }
33
+ /** 根据 auth 配置生成鉴权请求头 */
34
+ buildAuthHeaders() {
35
+ if (!this.authConfig)
36
+ return {};
37
+ const { type, value, name } = this.authConfig;
38
+ switch (type) {
39
+ case 'bearer':
40
+ return { Authorization: `Bearer ${value}` };
41
+ case 'basic':
42
+ // value 已是 base64(user:pass) 编码
43
+ return { Authorization: `Basic ${value}` };
44
+ case 'apiKey':
45
+ return { [name || 'X-API-Key']: value };
46
+ case 'custom':
47
+ return { [name || 'X-Custom-Auth']: value };
48
+ default:
49
+ return {};
50
+ }
51
+ }
52
+ send(request) {
53
+ // 通知(id=0)不需要响应,用 fire-and-forget
54
+ const isNotification = request.id === 0;
55
+ const headers = {
56
+ 'Content-Type': 'application/json',
57
+ 'Accept': 'application/json, text/event-stream',
58
+ };
59
+ // MCP SSE/StreamableHTTP 传输可能返回 session id
60
+ if (this.sessionId) {
61
+ headers['Mcp-Session-Id'] = this.sessionId;
62
+ }
63
+ // 注入结构化鉴权头(优先于自定义 headers,确保鉴权不被覆盖)
64
+ Object.assign(headers, this.buildAuthHeaders());
65
+ // 注入用户自定义请求头(最后注入,允许覆盖默认值)
66
+ if (this.customHeaders) {
67
+ Object.assign(headers, this.customHeaders);
68
+ }
69
+ const body = JSON.stringify(request);
70
+ // 使用 fetch(Node 18+ 内置),注入 proxy dispatcher
71
+ fetch(this.endpoint, {
72
+ method: 'POST',
73
+ headers,
74
+ body,
75
+ signal: isNotification ? AbortSignal.timeout(10000) : undefined,
76
+ ...(this.dispatcher ? { dispatcher: this.dispatcher } : {}),
77
+ }).then(async (res) => {
78
+ if (isNotification)
79
+ return;
80
+ // 捕获 session id
81
+ const sessionId = res.headers.get('mcp-session-id');
82
+ if (sessionId)
83
+ this.sessionId = sessionId;
84
+ // 检查 HTTP 错误状态码
85
+ if (!res.ok) {
86
+ const errBody = await res.text().catch(() => '');
87
+ console.error(`[MCP:HTTP] Server returned ${res.status} ${res.statusText} for id=${request.id}: ${errBody.substring(0, 500)}`);
88
+ this.handleResponse({
89
+ jsonrpc: '2.0',
90
+ id: request.id,
91
+ error: { code: -32000, message: `HTTP ${res.status}: ${errBody.substring(0, 200)}` },
92
+ });
93
+ return;
94
+ }
95
+ const contentType = res.headers.get('content-type') || '';
96
+ if (contentType.includes('text/event-stream')) {
97
+ // SSE 响应:解析事件流中的 JSON-RPC 响应
98
+ const text = await res.text();
99
+ this.parseSSE(text);
100
+ }
101
+ else {
102
+ // 普通 JSON 响应
103
+ const data = await res.json();
104
+ this.handleResponse(data);
105
+ }
106
+ }).catch((err) => {
107
+ if (isNotification)
108
+ return;
109
+ // 通知 handleResponse 超时由 pending 的 timer 负责
110
+ // 此处仅打日志
111
+ if (!isNotification) {
112
+ console.debug(`[MCP:HTTP] Request failed for id=${request.id}:`, err.message);
113
+ }
114
+ });
115
+ }
116
+ /** 解析 SSE 文本块中的 JSON-RPC 响应 */
117
+ parseSSE(text) {
118
+ // 支持 \r\n 和 \n 行分隔符
119
+ const lines = text.replace(/\r\n/g, '\n').split('\n');
120
+ for (const line of lines) {
121
+ if (line.startsWith('data:')) {
122
+ const jsonStr = line.slice(5).trim();
123
+ if (!jsonStr)
124
+ continue;
125
+ try {
126
+ const data = JSON.parse(jsonStr);
127
+ if (data.id !== undefined && data.id !== 0) {
128
+ this.handleResponse(data);
129
+ }
130
+ }
131
+ catch {
132
+ // 非 JSON data 忽略
133
+ }
134
+ }
135
+ }
136
+ }
137
+ }
138
+ //# sourceMappingURL=http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { type Dispatcher } from 'undici';
2
+ /** 代理模式:system=系统代理, custom=自定义, direct=直连 */
3
+ export type ProxyMode = 'system' | 'custom' | 'direct';
4
+ /** 单分类代理配置 */
5
+ export interface ProxyCategoryConfig {
6
+ mode: ProxyMode;
7
+ /** mode='custom' 时的代理 URL */
8
+ url?: string;
9
+ }
10
+ /** 分类代理设置(LLM / MCP / Fetch 各自独立) */
11
+ export interface ProxySettings {
12
+ llm: ProxyCategoryConfig;
13
+ mcp: ProxyCategoryConfig;
14
+ fetch: ProxyCategoryConfig;
15
+ }
16
+ /** 默认代理设置:全部分类走系统代理 */
17
+ export declare const DEFAULT_PROXY_SETTINGS: ProxySettings;
18
+ /**
19
+ * 从 Windows 注册表读取系统代理配置
20
+ * 仅 Windows 平台生效,其他平台返回 undefined
21
+ * 结果缓存,避免重复查询注册表
22
+ */
23
+ export declare function getWindowsSystemProxy(): string | undefined;
24
+ /** 清除系统代理缓存(设置变更时可调用) */
25
+ export declare function clearSystemProxyCache(): void;
26
+ /**
27
+ * 获取系统代理 URL
28
+ * 优先级:环境变量 HTTPS_PROXY / HTTP_PROXY / ALL_PROXY > macOS scutil > Windows 注册表
29
+ */
30
+ export declare function getSystemProxyUrl(): string | undefined;
31
+ /**
32
+ * 根据分类代理配置创建 dispatcher
33
+ *
34
+ * - `mode='system'`:自动检测系统代理(环境变量 + Windows 注册表)
35
+ * - `mode='custom'`:使用用户指定的代理 URL
36
+ * - `mode='direct'`:不走代理,返回 undefined
37
+ *
38
+ * @param category 分类代理配置
39
+ * @param label 日志标签(如 'LLM', 'MCP', 'Fetch')
40
+ * @returns dispatcher 实例,无代理时返回 undefined
41
+ */
42
+ export declare function resolveProxyAgentForCategory(category?: ProxyCategoryConfig, label?: string): Dispatcher | undefined;
43
+ /**
44
+ * 获取分类代理的有效 URL(用于 axios 等不支持 undici Dispatcher 的场景)
45
+ *
46
+ * @returns 代理 URL 字符串,无代理时返回 undefined
47
+ */
48
+ export declare function resolveProxyUrlForCategory(category?: ProxyCategoryConfig): string | undefined;
49
+ //# sourceMappingURL=proxy-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-agent.d.ts","sourceRoot":"","sources":["../../../src/mcp/proxy-agent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAMrD,8CAA8C;AAC9C,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvD,cAAc;AACd,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,mBAAmB,CAAC;IACzB,GAAG,EAAE,mBAAmB,CAAC;IACzB,KAAK,EAAE,mBAAmB,CAAC;CAC5B;AAED,uBAAuB;AACvB,eAAO,MAAM,sBAAsB,EAAE,aAIpC,CAAC;AAkDF;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAkC1D;AAED,yBAAyB;AACzB,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAStD;AA2BD;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,CAAC,EAAE,mBAAmB,EAC9B,KAAK,SAAU,GACd,UAAU,GAAG,SAAS,CAyBxB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,CAAC,EAAE,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAY7F"}
@@ -0,0 +1,187 @@
1
+ // ============================================================
2
+ // Proxy Agent — 通用 HTTP/HTTPS/SOCKS 代理解析工具
3
+ // ============================================================
4
+ import { ProxyAgent } from 'undici';
5
+ import { SocksProxyAgent } from 'socks-proxy-agent';
6
+ import { execSync } from 'child_process';
7
+ /** 默认代理设置:全部分类走系统代理 */
8
+ export const DEFAULT_PROXY_SETTINGS = {
9
+ llm: { mode: 'system' },
10
+ mcp: { mode: 'system' },
11
+ fetch: { mode: 'system' },
12
+ };
13
+ // ---- macOS 系统代理检测 ----
14
+ /**
15
+ * 从 macOS 系统偏好设置读取代理配置
16
+ * 通过 scutil --proxy 查询,仅 macOS 平台生效
17
+ */
18
+ function getMacOSSystemProxy() {
19
+ if (process.platform !== 'darwin')
20
+ return undefined;
21
+ try {
22
+ const output = execSync('scutil --proxy', { encoding: 'utf-8', timeout: 3000 });
23
+ const parsed = {};
24
+ // scutil 输出格式: " Key : Value"
25
+ for (const line of output.split('\n')) {
26
+ const m = line.trim().match(/^(\w+)\s*:\s*(.+)$/);
27
+ if (m)
28
+ parsed[m[1]] = m[2].trim();
29
+ }
30
+ // 优先 HTTPS 代理,其次 HTTP 代理,最后 SOCKS 代理
31
+ if (parsed['HTTPSEnable'] === '1' && parsed['HTTPSProxy']) {
32
+ const port = parsed['HTTPSPort'] || '443';
33
+ const url = `http://${parsed['HTTPSProxy']}:${port}`;
34
+ console.debug(`[Proxy] macOS system HTTPS proxy detected: ${url}`);
35
+ return url;
36
+ }
37
+ if (parsed['HTTPEnable'] === '1' && parsed['HTTPProxy']) {
38
+ const port = parsed['HTTPPort'] || '80';
39
+ const url = `http://${parsed['HTTPProxy']}:${port}`;
40
+ console.debug(`[Proxy] macOS system HTTP proxy detected: ${url}`);
41
+ return url;
42
+ }
43
+ if (parsed['SOCKSEnable'] === '1' && parsed['SOCKSProxy']) {
44
+ const port = parsed['SOCKSPort'] || '1080';
45
+ const url = `socks5://${parsed['SOCKSProxy']}:${port}`;
46
+ console.debug(`[Proxy] macOS system SOCKS proxy detected: ${url}`);
47
+ return url;
48
+ }
49
+ return undefined;
50
+ }
51
+ catch {
52
+ return undefined;
53
+ }
54
+ }
55
+ // ---- Windows 系统代理检测 ----
56
+ let _cachedSystemProxy = null;
57
+ /**
58
+ * 从 Windows 注册表读取系统代理配置
59
+ * 仅 Windows 平台生效,其他平台返回 undefined
60
+ * 结果缓存,避免重复查询注册表
61
+ */
62
+ export function getWindowsSystemProxy() {
63
+ if (_cachedSystemProxy !== null)
64
+ return _cachedSystemProxy || undefined;
65
+ if (process.platform !== 'win32') {
66
+ _cachedSystemProxy = undefined;
67
+ return undefined;
68
+ }
69
+ try {
70
+ const regPath = 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings';
71
+ const output = execSync(`reg query "${regPath}" /v ProxyEnable`, { encoding: 'utf-8', timeout: 3000, windowsHide: true });
72
+ const enabledMatch = output.match(/ProxyEnable\s+REG_DWORD\s+0x(\d+)/i);
73
+ if (!enabledMatch || enabledMatch[1] === '0') {
74
+ _cachedSystemProxy = undefined;
75
+ return undefined;
76
+ }
77
+ const serverOutput = execSync(`reg query "${regPath}" /v ProxyServer`, { encoding: 'utf-8', timeout: 3000, windowsHide: true });
78
+ const serverMatch = serverOutput.match(/ProxyServer\s+REG_SZ\s+(.+)/i);
79
+ if (!serverMatch) {
80
+ _cachedSystemProxy = undefined;
81
+ return undefined;
82
+ }
83
+ const proxyServer = serverMatch[1].trim();
84
+ // Windows 代理可能是 ip:port 格式,需要补全协议
85
+ const proxyUrl = proxyServer.includes('://') ? proxyServer : `http://${proxyServer}`;
86
+ _cachedSystemProxy = proxyUrl;
87
+ console.debug(`[Proxy] Windows system proxy detected: ${proxyUrl}`);
88
+ return proxyUrl;
89
+ }
90
+ catch {
91
+ _cachedSystemProxy = undefined;
92
+ return undefined;
93
+ }
94
+ }
95
+ /** 清除系统代理缓存(设置变更时可调用) */
96
+ export function clearSystemProxyCache() {
97
+ _cachedSystemProxy = null;
98
+ }
99
+ /**
100
+ * 获取系统代理 URL
101
+ * 优先级:环境变量 HTTPS_PROXY / HTTP_PROXY / ALL_PROXY > macOS scutil > Windows 注册表
102
+ */
103
+ export function getSystemProxyUrl() {
104
+ return process.env.HTTPS_PROXY
105
+ || process.env.https_proxy
106
+ || process.env.HTTP_PROXY
107
+ || process.env.http_proxy
108
+ || process.env.ALL_PROXY
109
+ || process.env.all_proxy
110
+ || getMacOSSystemProxy()
111
+ || getWindowsSystemProxy();
112
+ }
113
+ // ---- Dispatcher 创建 ----
114
+ /**
115
+ * 根据代理 URL 创建对应的 dispatcher
116
+ *
117
+ * 自动识别协议:
118
+ * - `http://proxy:8080` → undici ProxyAgent(HTTP 代理)
119
+ * - `https://proxy:8443` → undici ProxyAgent(HTTPS 代理)
120
+ * - `socks5://proxy:1080`→ SocksProxyAgent(SOCKS5)
121
+ * - `socks4://proxy:1080`→ SocksProxyAgent(SOCKS4)
122
+ *
123
+ * @returns dispatcher 实例,无代理时返回 undefined
124
+ */
125
+ function createDispatcherFromUrl(proxyUrl, label = 'Proxy') {
126
+ if (proxyUrl.startsWith('socks')) {
127
+ console.debug(`[${label}] using SOCKS proxy: ${proxyUrl}`);
128
+ return new SocksProxyAgent(proxyUrl);
129
+ }
130
+ console.debug(`[${label}] using HTTP proxy: ${proxyUrl}`);
131
+ return new ProxyAgent(proxyUrl);
132
+ }
133
+ // ---- 新版分类代理解析 ----
134
+ /**
135
+ * 根据分类代理配置创建 dispatcher
136
+ *
137
+ * - `mode='system'`:自动检测系统代理(环境变量 + Windows 注册表)
138
+ * - `mode='custom'`:使用用户指定的代理 URL
139
+ * - `mode='direct'`:不走代理,返回 undefined
140
+ *
141
+ * @param category 分类代理配置
142
+ * @param label 日志标签(如 'LLM', 'MCP', 'Fetch')
143
+ * @returns dispatcher 实例,无代理时返回 undefined
144
+ */
145
+ export function resolveProxyAgentForCategory(category, label = 'Proxy') {
146
+ if (!category)
147
+ return undefined;
148
+ switch (category.mode) {
149
+ case 'direct':
150
+ console.debug(`[${label}] proxy mode: direct (no proxy)`);
151
+ return undefined;
152
+ case 'custom':
153
+ if (!category.url) {
154
+ console.debug(`[${label}] proxy mode: custom but no URL configured, falling back to direct`);
155
+ return undefined;
156
+ }
157
+ return createDispatcherFromUrl(category.url, label);
158
+ case 'system':
159
+ default: {
160
+ const systemUrl = getSystemProxyUrl();
161
+ if (!systemUrl) {
162
+ console.debug(`[${label}] proxy mode: system, no system proxy detected`);
163
+ return undefined;
164
+ }
165
+ return createDispatcherFromUrl(systemUrl, label);
166
+ }
167
+ }
168
+ }
169
+ /**
170
+ * 获取分类代理的有效 URL(用于 axios 等不支持 undici Dispatcher 的场景)
171
+ *
172
+ * @returns 代理 URL 字符串,无代理时返回 undefined
173
+ */
174
+ export function resolveProxyUrlForCategory(category) {
175
+ if (!category)
176
+ return undefined;
177
+ switch (category.mode) {
178
+ case 'direct':
179
+ return undefined;
180
+ case 'custom':
181
+ return category.url || undefined;
182
+ case 'system':
183
+ default:
184
+ return getSystemProxyUrl();
185
+ }
186
+ }
187
+ //# sourceMappingURL=proxy-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-agent.js","sourceRoot":"","sources":["../../../src/mcp/proxy-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { MCPClientBase } from './base-client.ts';
2
+ import type { MCPServerConfig } from './types.ts';
3
+ export declare class StdioMCPClient extends MCPClientBase {
4
+ private process;
5
+ private buffer;
6
+ protected doConnect(config: MCPServerConfig): Promise<void>;
7
+ protected doDisconnect(): void;
8
+ protected send(request: {
9
+ jsonrpc: string;
10
+ id: number;
11
+ method: string;
12
+ params?: Record<string, unknown>;
13
+ }): void;
14
+ private flushBuffer;
15
+ }
16
+ //# sourceMappingURL=stdio-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/stdio-client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,cAAe,SAAQ,aAAa;IAC/C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAM;cAEJ,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDjE,SAAS,CAAC,YAAY,IAAI,IAAI;IAQ9B,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAgBhH,OAAO,CAAC,WAAW;CAkBpB"}
@@ -0,0 +1,91 @@
1
+ // ============================================================
2
+ // StdioMCPClient — 通过子进程 stdio 通信的 MCP 客户端
3
+ // ============================================================
4
+ import { spawn } from 'child_process';
5
+ import { MCPClientBase } from "./base-client.js";
6
+ export class StdioMCPClient extends MCPClientBase {
7
+ process = null;
8
+ buffer = '';
9
+ async doConnect(config) {
10
+ if (!config.command) {
11
+ throw new Error('stdio transport requires a "command" in config');
12
+ }
13
+ return new Promise((resolve, reject) => {
14
+ const child = spawn(config.command, config.args || [], {
15
+ env: { ...process.env, ...(config.env || {}) },
16
+ stdio: ['pipe', 'pipe', 'pipe'],
17
+ });
18
+ this.process = child;
19
+ // 超时检查
20
+ const timer = setTimeout(() => {
21
+ reject(new Error(`stdio MCP server '${config.name}' failed to start within 10s`));
22
+ }, 10000);
23
+ child.on('spawn', () => {
24
+ clearTimeout(timer);
25
+ resolve();
26
+ });
27
+ child.on('error', (err) => {
28
+ clearTimeout(timer);
29
+ reject(new Error(`Failed to start MCP server '${config.name}': ${err.message}`));
30
+ });
31
+ // stdout 接收 JSON-RPC 响应(逐行)
32
+ child.stdout?.on('data', (chunk) => {
33
+ this.buffer += chunk.toString();
34
+ this.flushBuffer();
35
+ });
36
+ // stderr 用于日志
37
+ child.stderr?.on('data', (chunk) => {
38
+ const msg = chunk.toString().trim();
39
+ if (msg)
40
+ console.debug(`[MCP:${config.name}] ${msg}`);
41
+ });
42
+ child.on('exit', (code) => {
43
+ if (this.connected) {
44
+ console.warn(`[MCP:${config.name}] process exited with code ${code}`);
45
+ this.connected = false;
46
+ }
47
+ });
48
+ });
49
+ }
50
+ doDisconnect() {
51
+ if (this.process) {
52
+ this.process.kill('SIGTERM');
53
+ this.process = null;
54
+ }
55
+ this.buffer = '';
56
+ }
57
+ send(request) {
58
+ if (!this.process?.stdin?.writable) {
59
+ throw new Error('MCP stdio process is not writable');
60
+ }
61
+ // 通知 (id=0) 不发 content-length,用 JSON-RPC notification 格式
62
+ if (request.id === 0) {
63
+ const msg = JSON.stringify({ jsonrpc: request.jsonrpc, method: request.method, params: request.params });
64
+ this.process.stdin.write(msg + '\n');
65
+ return;
66
+ }
67
+ const msg = JSON.stringify(request);
68
+ this.process.stdin.write(msg + '\n');
69
+ }
70
+ // ---- 内部 ----
71
+ flushBuffer() {
72
+ const lines = this.buffer.split('\n');
73
+ this.buffer = lines.pop() || ''; // 最后一行可能不完整
74
+ for (const line of lines) {
75
+ const trimmed = line.trim();
76
+ if (!trimmed)
77
+ continue;
78
+ try {
79
+ const data = JSON.parse(trimmed);
80
+ // 只处理有 id 的响应(非 notification)
81
+ if (data.id !== undefined && data.id !== 0) {
82
+ this.handleResponse(data);
83
+ }
84
+ }
85
+ catch {
86
+ // 非 JSON 行忽略
87
+ }
88
+ }
89
+ }
90
+ }
91
+ //# sourceMappingURL=stdio-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio-client.js","sourceRoot":"","sources":["../../../src/mcp/stdio-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { ToolDefinition } from '../tool/types.ts';
2
+ import type { ProxyCategoryConfig } from './proxy-agent.ts';
3
+ export type MCPTransport = 'stdio' | 'http' | 'sse' | 'streamableHttp' | (string & {});
4
+ export interface MCPServerConfig {
5
+ name: string;
6
+ transport: MCPTransport;
7
+ /** stdio 模式:启动命令 */
8
+ command?: string;
9
+ /** stdio 模式:命令参数 */
10
+ args?: string[];
11
+ /** stdio 模式:环境变量 */
12
+ env?: Record<string, string>;
13
+ /** HTTP/SSE/StreamableHTTP 模式:服务端点 */
14
+ endpoint?: string;
15
+ /** HTTP/SSE/StreamableHTTP 模式:自定义请求头(如 Authorization) */
16
+ headers?: Record<string, string>;
17
+ /** HTTP/SSE/StreamableHTTP 模式:结构化鉴权配置(bearer/basic/apiKey/custom) */
18
+ auth?: {
19
+ type: 'bearer' | 'basic' | 'apiKey' | 'custom';
20
+ value: string;
21
+ name?: string;
22
+ };
23
+ /** 请求超时(毫秒) */
24
+ timeout?: number;
25
+ /** 自动重连配置 */
26
+ autoReconnect?: boolean | {
27
+ maxRetries?: number;
28
+ interval?: number;
29
+ };
30
+ /**
31
+ * 分类代理配置(支持 system / custom / direct 三种模式)
32
+ *
33
+ * 由上层应用(如 workspace settings)传入对应的 ProxyCategoryConfig,
34
+ * 客户端根据 mode 自动创建 dispatcher。
35
+ */
36
+ proxyCategory?: ProxyCategoryConfig;
37
+ /** 扩展配置(自定义 transport 的专属数据统一放在此处) */
38
+ extra?: Record<string, unknown>;
39
+ }
40
+ export interface MCPClient {
41
+ /** 连接 MCP 服务 */
42
+ connect(config: MCPServerConfig): Promise<void>;
43
+ /** 发现远程工具列表 */
44
+ listTools(): Promise<ToolDefinition[]>;
45
+ /** 调用远程工具 */
46
+ callTool(name: string, args: Record<string, unknown>): Promise<string>;
47
+ /** 发现远程资源列表(可选能力) */
48
+ listResources?(): Promise<Array<{
49
+ uri: string;
50
+ name: string;
51
+ description?: string;
52
+ }>>;
53
+ /** 读取远程资源(可选能力) */
54
+ readResource?(uri: string): Promise<string>;
55
+ /** 断开连接 */
56
+ disconnect(): void;
57
+ /** 连接状态 */
58
+ isConnected(): boolean;
59
+ }
60
+ //# sourceMappingURL=types.d.ts.map