@cicctencent/agent-core 0.1.1 → 0.1.3
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.
- package/dist/cjs/agent/engine.d.ts.map +1 -0
- package/dist/cjs/agent/engine.js +766 -0
- package/dist/cjs/agent/engine.js.map +1 -0
- package/dist/cjs/agent/history-manager.d.ts.map +1 -0
- package/dist/cjs/agent/history-manager.js +271 -0
- package/dist/cjs/agent/history-manager.js.map +1 -0
- package/dist/cjs/agent/llm-caller.d.ts.map +1 -0
- package/dist/cjs/agent/llm-caller.js +307 -0
- package/dist/cjs/agent/llm-caller.js.map +1 -0
- package/dist/cjs/agent/tool-executor.d.ts.map +1 -0
- package/dist/cjs/agent/tool-executor.js +568 -0
- package/dist/cjs/agent/tool-executor.js.map +1 -0
- package/dist/cjs/agent/types.d.ts.map +1 -0
- package/dist/cjs/agent/types.js +6 -0
- package/dist/cjs/agent/types.js.map +1 -0
- package/dist/cjs/agent/workflow.d.ts.map +1 -0
- package/dist/cjs/agent/workflow.js +262 -0
- package/dist/cjs/agent/workflow.js.map +1 -0
- package/dist/cjs/context/collector.d.ts.map +1 -0
- package/dist/cjs/context/collector.js +94 -0
- package/dist/cjs/context/collector.js.map +1 -0
- package/dist/cjs/context/manager.d.ts.map +1 -0
- package/dist/cjs/context/manager.js +36 -0
- package/dist/cjs/context/manager.js.map +1 -0
- package/dist/cjs/context/types.d.ts.map +1 -0
- package/dist/cjs/context/types.js +6 -0
- package/dist/cjs/context/types.js.map +1 -0
- package/dist/cjs/hooks/types.d.ts.map +1 -0
- package/dist/cjs/hooks/types.js +6 -0
- package/dist/cjs/hooks/types.js.map +1 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +98 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/llm/anthropic-provider.d.ts.map +1 -0
- package/dist/cjs/llm/anthropic-provider.js +356 -0
- package/dist/cjs/llm/anthropic-provider.js.map +1 -0
- package/dist/cjs/llm/factory.d.ts.map +1 -0
- package/dist/cjs/llm/factory.js +34 -0
- package/dist/cjs/llm/factory.js.map +1 -0
- package/dist/cjs/llm/ollama-provider.d.ts.map +1 -0
- package/dist/cjs/llm/ollama-provider.js +34 -0
- package/dist/cjs/llm/ollama-provider.js.map +1 -0
- package/dist/cjs/llm/openai-provider.d.ts.map +1 -0
- package/dist/cjs/llm/openai-provider.js +186 -0
- package/dist/cjs/llm/openai-provider.js.map +1 -0
- package/dist/cjs/llm/provider.d.ts.map +1 -0
- package/dist/cjs/llm/provider.js +18 -0
- package/dist/cjs/llm/provider.js.map +1 -0
- package/dist/cjs/llm/types.d.ts.map +1 -0
- package/dist/cjs/llm/types.js +6 -0
- package/dist/cjs/llm/types.js.map +1 -0
- package/dist/cjs/mcp/base-client.d.ts.map +1 -0
- package/dist/cjs/mcp/base-client.js +112 -0
- package/dist/cjs/mcp/base-client.js.map +1 -0
- package/dist/cjs/mcp/client.d.ts.map +1 -0
- package/dist/cjs/mcp/client.js +76 -0
- package/dist/cjs/mcp/client.js.map +1 -0
- package/dist/cjs/mcp/factory.d.ts.map +1 -0
- package/dist/cjs/mcp/factory.js +43 -0
- package/dist/cjs/mcp/factory.js.map +1 -0
- package/dist/cjs/mcp/http-client.d.ts.map +1 -0
- package/dist/cjs/mcp/http-client.js +142 -0
- package/dist/cjs/mcp/http-client.js.map +1 -0
- package/dist/cjs/mcp/proxy-agent.d.ts.map +1 -0
- package/dist/cjs/mcp/proxy-agent.js +195 -0
- package/dist/cjs/mcp/proxy-agent.js.map +1 -0
- package/dist/cjs/mcp/stdio-client.d.ts.map +1 -0
- package/dist/cjs/mcp/stdio-client.js +95 -0
- package/dist/cjs/mcp/stdio-client.js.map +1 -0
- package/dist/cjs/mcp/types.d.ts.map +1 -0
- package/dist/cjs/mcp/types.js +6 -0
- package/dist/cjs/mcp/types.js.map +1 -0
- package/dist/cjs/memory/checkpoint.d.ts.map +1 -0
- package/dist/cjs/memory/checkpoint.js +160 -0
- package/dist/cjs/memory/checkpoint.js.map +1 -0
- package/dist/cjs/memory/extractor.d.ts.map +1 -0
- package/dist/cjs/memory/extractor.js +121 -0
- package/dist/cjs/memory/extractor.js.map +1 -0
- package/dist/cjs/memory/persona.d.ts.map +1 -0
- package/dist/cjs/memory/persona.js +79 -0
- package/dist/cjs/memory/persona.js.map +1 -0
- package/dist/cjs/memory/pipeline.d.ts.map +1 -0
- package/dist/cjs/memory/pipeline.js +148 -0
- package/dist/cjs/memory/pipeline.js.map +1 -0
- package/dist/cjs/memory/prompts.d.ts.map +1 -0
- package/dist/cjs/memory/prompts.js +70 -0
- package/dist/cjs/memory/prompts.js.map +1 -0
- package/dist/cjs/memory/recall.d.ts.map +1 -0
- package/dist/cjs/memory/recall.js +164 -0
- package/dist/cjs/memory/recall.js.map +1 -0
- package/dist/cjs/memory/scene.d.ts.map +1 -0
- package/dist/cjs/memory/scene.js +101 -0
- package/dist/cjs/memory/scene.js.map +1 -0
- package/dist/cjs/memory/types.d.ts.map +1 -0
- package/dist/cjs/memory/types.js +6 -0
- package/dist/cjs/memory/types.js.map +1 -0
- package/dist/cjs/middleware/types.d.ts.map +1 -0
- package/dist/cjs/middleware/types.js +6 -0
- package/dist/cjs/middleware/types.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/sandbox/types.d.ts.map +1 -0
- package/dist/cjs/sandbox/types.js +128 -0
- package/dist/cjs/sandbox/types.js.map +1 -0
- package/dist/cjs/security/guard.d.ts.map +1 -0
- package/dist/cjs/security/guard.js +229 -0
- package/dist/cjs/security/guard.js.map +1 -0
- package/dist/cjs/security/types.d.ts.map +1 -0
- package/dist/cjs/security/types.js +6 -0
- package/dist/cjs/security/types.js.map +1 -0
- package/dist/cjs/skill/manager.d.ts.map +1 -0
- package/dist/cjs/skill/manager.js +413 -0
- package/dist/cjs/skill/manager.js.map +1 -0
- package/dist/cjs/skill/router.d.ts.map +1 -0
- package/dist/cjs/skill/router.js +139 -0
- package/dist/cjs/skill/router.js.map +1 -0
- package/dist/cjs/skill/types.d.ts.map +1 -0
- package/dist/cjs/skill/types.js +6 -0
- package/dist/cjs/skill/types.js.map +1 -0
- package/dist/cjs/tool/delegate.d.ts.map +1 -0
- package/dist/cjs/tool/delegate.js +78 -0
- package/dist/cjs/tool/delegate.js.map +1 -0
- package/dist/cjs/tool/registry.d.ts.map +1 -0
- package/dist/cjs/tool/registry.js +57 -0
- package/dist/cjs/tool/registry.js.map +1 -0
- package/dist/cjs/tool/types.d.ts.map +1 -0
- package/dist/cjs/tool/types.js +6 -0
- package/dist/cjs/tool/types.js.map +1 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +6 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils/token-counter.d.ts.map +1 -0
- package/dist/cjs/utils/token-counter.js +104 -0
- package/dist/cjs/utils/token-counter.js.map +1 -0
- package/dist/esm/agent/engine.d.ts +113 -0
- package/dist/esm/agent/engine.d.ts.map +1 -0
- package/dist/esm/agent/engine.js +762 -0
- package/dist/esm/agent/engine.js.map +1 -0
- package/dist/esm/agent/history-manager.d.ts +78 -0
- package/dist/esm/agent/history-manager.d.ts.map +1 -0
- package/dist/esm/agent/history-manager.js +267 -0
- package/dist/esm/agent/history-manager.js.map +1 -0
- package/dist/esm/agent/llm-caller.d.ts +58 -0
- package/dist/esm/agent/llm-caller.d.ts.map +1 -0
- package/dist/esm/agent/llm-caller.js +303 -0
- package/dist/esm/agent/llm-caller.js.map +1 -0
- package/dist/esm/agent/tool-executor.d.ts +95 -0
- package/dist/esm/agent/tool-executor.d.ts.map +1 -0
- package/dist/esm/agent/tool-executor.js +564 -0
- package/dist/esm/agent/tool-executor.js.map +1 -0
- package/dist/esm/agent/types.d.ts +128 -0
- package/dist/esm/agent/types.d.ts.map +1 -0
- package/dist/esm/agent/types.js +5 -0
- package/dist/esm/agent/types.js.map +1 -0
- package/dist/esm/agent/workflow.d.ts +74 -0
- package/dist/esm/agent/workflow.d.ts.map +1 -0
- package/dist/esm/agent/workflow.js +248 -0
- package/dist/esm/agent/workflow.js.map +1 -0
- package/dist/esm/context/collector.d.ts +12 -0
- package/dist/esm/context/collector.d.ts.map +1 -0
- package/dist/esm/context/collector.js +57 -0
- package/dist/esm/context/collector.js.map +1 -0
- package/dist/esm/context/manager.d.ts +16 -0
- package/dist/esm/context/manager.d.ts.map +1 -0
- package/dist/esm/context/manager.js +32 -0
- package/dist/esm/context/manager.js.map +1 -0
- package/dist/esm/context/types.d.ts +39 -0
- package/dist/esm/context/types.d.ts.map +1 -0
- package/dist/esm/context/types.js +5 -0
- package/dist/esm/context/types.js.map +1 -0
- package/dist/esm/hooks/types.d.ts +47 -0
- package/dist/esm/hooks/types.d.ts.map +1 -0
- package/dist/esm/hooks/types.js +5 -0
- package/dist/esm/hooks/types.js.map +1 -0
- package/{src/index.ts → dist/esm/index.d.ts} +15 -140
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +39 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/llm/anthropic-provider.d.ts +28 -0
- package/dist/esm/llm/anthropic-provider.d.ts.map +1 -0
- package/dist/esm/llm/anthropic-provider.js +352 -0
- package/dist/esm/llm/anthropic-provider.js.map +1 -0
- package/{src/llm/factory.ts → dist/esm/llm/factory.d.ts} +3 -18
- package/dist/esm/llm/factory.d.ts.map +1 -0
- package/dist/esm/llm/factory.js +30 -0
- package/dist/esm/llm/factory.js.map +1 -0
- package/dist/esm/llm/ollama-provider.d.ts +13 -0
- package/dist/esm/llm/ollama-provider.d.ts.map +1 -0
- package/dist/esm/llm/ollama-provider.js +30 -0
- package/dist/esm/llm/ollama-provider.js.map +1 -0
- package/dist/esm/llm/openai-provider.d.ts +18 -0
- package/dist/esm/llm/openai-provider.d.ts.map +1 -0
- package/dist/esm/llm/openai-provider.js +182 -0
- package/dist/esm/llm/openai-provider.js.map +1 -0
- package/{src/llm/provider.ts → dist/esm/llm/provider.d.ts} +1 -9
- package/dist/esm/llm/provider.d.ts.map +1 -0
- package/dist/esm/llm/provider.js +10 -0
- package/dist/esm/llm/provider.js.map +1 -0
- package/dist/esm/llm/types.d.ts +78 -0
- package/dist/esm/llm/types.d.ts.map +1 -0
- package/dist/esm/llm/types.js +5 -0
- package/dist/esm/llm/types.js.map +1 -0
- package/dist/esm/mcp/base-client.d.ts +50 -0
- package/dist/esm/mcp/base-client.d.ts.map +1 -0
- package/dist/esm/mcp/base-client.js +108 -0
- package/dist/esm/mcp/base-client.js.map +1 -0
- package/dist/esm/mcp/client.d.ts +27 -0
- package/dist/esm/mcp/client.d.ts.map +1 -0
- package/dist/esm/mcp/client.js +70 -0
- package/dist/esm/mcp/client.js.map +1 -0
- package/dist/esm/mcp/factory.d.ts +16 -0
- package/dist/esm/mcp/factory.d.ts.map +1 -0
- package/dist/esm/mcp/factory.js +39 -0
- package/dist/esm/mcp/factory.js.map +1 -0
- package/dist/esm/mcp/http-client.d.ts +24 -0
- package/dist/esm/mcp/http-client.d.ts.map +1 -0
- package/dist/esm/mcp/http-client.js +138 -0
- package/dist/esm/mcp/http-client.js.map +1 -0
- package/dist/esm/mcp/proxy-agent.d.ts +49 -0
- package/dist/esm/mcp/proxy-agent.d.ts.map +1 -0
- package/dist/esm/mcp/proxy-agent.js +187 -0
- package/dist/esm/mcp/proxy-agent.js.map +1 -0
- package/dist/esm/mcp/stdio-client.d.ts +16 -0
- package/dist/esm/mcp/stdio-client.d.ts.map +1 -0
- package/dist/esm/mcp/stdio-client.js +91 -0
- package/dist/esm/mcp/stdio-client.js.map +1 -0
- package/dist/esm/mcp/types.d.ts +60 -0
- package/dist/esm/mcp/types.d.ts.map +1 -0
- package/dist/esm/mcp/types.js +5 -0
- package/dist/esm/mcp/types.js.map +1 -0
- package/dist/esm/memory/checkpoint.d.ts +62 -0
- package/dist/esm/memory/checkpoint.d.ts.map +1 -0
- package/dist/esm/memory/checkpoint.js +121 -0
- package/dist/esm/memory/checkpoint.js.map +1 -0
- package/dist/esm/memory/extractor.d.ts +59 -0
- package/dist/esm/memory/extractor.d.ts.map +1 -0
- package/dist/esm/memory/extractor.js +117 -0
- package/dist/esm/memory/extractor.js.map +1 -0
- package/dist/esm/memory/persona.d.ts +38 -0
- package/dist/esm/memory/persona.d.ts.map +1 -0
- package/dist/esm/memory/persona.js +75 -0
- package/dist/esm/memory/persona.js.map +1 -0
- package/dist/esm/memory/pipeline.d.ts +50 -0
- package/dist/esm/memory/pipeline.d.ts.map +1 -0
- package/dist/esm/memory/pipeline.js +144 -0
- package/dist/esm/memory/pipeline.js.map +1 -0
- package/dist/esm/memory/prompts.d.ts +9 -0
- package/dist/esm/memory/prompts.d.ts.map +1 -0
- package/{src/memory/prompts.ts → dist/esm/memory/prompts.js} +6 -13
- package/dist/esm/memory/prompts.js.map +1 -0
- package/dist/esm/memory/recall.d.ts +66 -0
- package/dist/esm/memory/recall.d.ts.map +1 -0
- package/dist/esm/memory/recall.js +159 -0
- package/dist/esm/memory/recall.js.map +1 -0
- package/dist/esm/memory/scene.d.ts +49 -0
- package/dist/esm/memory/scene.d.ts.map +1 -0
- package/dist/esm/memory/scene.js +97 -0
- package/dist/esm/memory/scene.js.map +1 -0
- package/dist/esm/memory/types.d.ts +43 -0
- package/dist/esm/memory/types.d.ts.map +1 -0
- package/dist/esm/memory/types.js +5 -0
- package/dist/esm/memory/types.js.map +1 -0
- package/dist/esm/middleware/types.d.ts +52 -0
- package/dist/esm/middleware/types.d.ts.map +1 -0
- package/dist/esm/middleware/types.js +5 -0
- package/dist/esm/middleware/types.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/sandbox/types.d.ts +59 -0
- package/dist/esm/sandbox/types.d.ts.map +1 -0
- package/dist/esm/sandbox/types.js +125 -0
- package/dist/esm/sandbox/types.js.map +1 -0
- package/dist/esm/security/guard.d.ts +41 -0
- package/dist/esm/security/guard.d.ts.map +1 -0
- package/dist/esm/security/guard.js +225 -0
- package/dist/esm/security/guard.js.map +1 -0
- package/dist/esm/security/types.d.ts +36 -0
- package/dist/esm/security/types.d.ts.map +1 -0
- package/dist/esm/security/types.js +5 -0
- package/dist/esm/security/types.js.map +1 -0
- package/dist/esm/skill/manager.d.ts +95 -0
- package/dist/esm/skill/manager.d.ts.map +1 -0
- package/dist/esm/skill/manager.js +376 -0
- package/dist/esm/skill/manager.js.map +1 -0
- package/dist/esm/skill/router.d.ts +26 -0
- package/dist/esm/skill/router.d.ts.map +1 -0
- package/dist/esm/skill/router.js +135 -0
- package/dist/esm/skill/router.js.map +1 -0
- package/dist/esm/skill/types.d.ts +55 -0
- package/dist/esm/skill/types.d.ts.map +1 -0
- package/dist/esm/skill/types.js +5 -0
- package/dist/esm/skill/types.js.map +1 -0
- package/dist/esm/tool/delegate.d.ts +34 -0
- package/dist/esm/tool/delegate.d.ts.map +1 -0
- package/dist/esm/tool/delegate.js +75 -0
- package/dist/esm/tool/delegate.js.map +1 -0
- package/dist/esm/tool/registry.d.ts +24 -0
- package/dist/esm/tool/registry.d.ts.map +1 -0
- package/dist/esm/tool/registry.js +53 -0
- package/dist/esm/tool/registry.js.map +1 -0
- package/dist/esm/tool/types.d.ts +101 -0
- package/dist/esm/tool/types.d.ts.map +1 -0
- package/dist/esm/tool/types.js +5 -0
- package/dist/esm/tool/types.js.map +1 -0
- package/dist/esm/types.d.ts +150 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +5 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/token-counter.d.ts +22 -0
- package/dist/esm/utils/token-counter.d.ts.map +1 -0
- package/dist/esm/utils/token-counter.js +99 -0
- package/dist/esm/utils/token-counter.js.map +1 -0
- package/package.json +16 -10
- package/dist/agent/engine.d.ts.map +0 -1
- package/dist/agent/history-manager.d.ts.map +0 -1
- package/dist/agent/llm-caller.d.ts.map +0 -1
- package/dist/agent/tool-executor.d.ts.map +0 -1
- package/dist/agent/types.d.ts.map +0 -1
- package/dist/agent/workflow.d.ts.map +0 -1
- package/dist/context/collector.d.ts.map +0 -1
- package/dist/context/manager.d.ts.map +0 -1
- package/dist/context/types.d.ts.map +0 -1
- package/dist/hooks/types.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/llm/anthropic-provider.d.ts.map +0 -1
- package/dist/llm/factory.d.ts.map +0 -1
- package/dist/llm/ollama-provider.d.ts.map +0 -1
- package/dist/llm/openai-provider.d.ts.map +0 -1
- package/dist/llm/provider.d.ts.map +0 -1
- package/dist/llm/types.d.ts.map +0 -1
- package/dist/mcp/base-client.d.ts.map +0 -1
- package/dist/mcp/client.d.ts.map +0 -1
- package/dist/mcp/factory.d.ts.map +0 -1
- package/dist/mcp/http-client.d.ts.map +0 -1
- package/dist/mcp/proxy-agent.d.ts.map +0 -1
- package/dist/mcp/stdio-client.d.ts.map +0 -1
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/memory/checkpoint.d.ts.map +0 -1
- package/dist/memory/extractor.d.ts.map +0 -1
- package/dist/memory/persona.d.ts.map +0 -1
- package/dist/memory/pipeline.d.ts.map +0 -1
- package/dist/memory/prompts.d.ts.map +0 -1
- package/dist/memory/recall.d.ts.map +0 -1
- package/dist/memory/scene.d.ts.map +0 -1
- package/dist/memory/types.d.ts.map +0 -1
- package/dist/middleware/types.d.ts.map +0 -1
- package/dist/sandbox/types.d.ts.map +0 -1
- package/dist/security/guard.d.ts.map +0 -1
- package/dist/security/types.d.ts.map +0 -1
- package/dist/skill/manager.d.ts.map +0 -1
- package/dist/skill/router.d.ts.map +0 -1
- package/dist/skill/types.d.ts.map +0 -1
- package/dist/tool/delegate.d.ts.map +0 -1
- package/dist/tool/registry.d.ts.map +0 -1
- package/dist/tool/types.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/utils/token-counter.d.ts.map +0 -1
- package/src/agent/engine.ts +0 -875
- package/src/agent/history-manager.ts +0 -323
- package/src/agent/llm-caller.ts +0 -383
- package/src/agent/tool-executor.ts +0 -713
- package/src/agent/types.ts +0 -136
- package/src/agent/workflow.ts +0 -339
- package/src/context/collector.ts +0 -59
- package/src/context/manager.ts +0 -40
- package/src/context/types.ts +0 -51
- package/src/hooks/types.ts +0 -77
- package/src/llm/anthropic-provider.ts +0 -412
- package/src/llm/ollama-provider.ts +0 -39
- package/src/llm/openai-provider.ts +0 -200
- package/src/llm/types.ts +0 -91
- package/src/mcp/base-client.ts +0 -159
- package/src/mcp/client.ts +0 -81
- package/src/mcp/factory.ts +0 -45
- package/src/mcp/http-client.ts +0 -149
- package/src/mcp/proxy-agent.ts +0 -227
- package/src/mcp/stdio-client.ts +0 -104
- package/src/mcp/types.ts +0 -65
- package/src/memory/checkpoint.ts +0 -146
- package/src/memory/extractor.ts +0 -164
- package/src/memory/persona.ts +0 -106
- package/src/memory/pipeline.ts +0 -192
- package/src/memory/recall.ts +0 -217
- package/src/memory/scene.ts +0 -137
- package/src/memory/types.ts +0 -54
- package/src/middleware/types.ts +0 -62
- package/src/sandbox/types.ts +0 -185
- package/src/security/guard.ts +0 -249
- package/src/security/types.ts +0 -46
- package/src/skill/manager.ts +0 -420
- package/src/skill/router.ts +0 -158
- package/src/skill/types.ts +0 -67
- package/src/tool/delegate.ts +0 -105
- package/src/tool/registry.ts +0 -64
- package/src/tool/types.ts +0 -124
- package/src/types.ts +0 -188
- package/src/utils/token-counter.ts +0 -108
- /package/dist/{agent → cjs/agent}/engine.d.ts +0 -0
- /package/dist/{agent → cjs/agent}/history-manager.d.ts +0 -0
- /package/dist/{agent → cjs/agent}/llm-caller.d.ts +0 -0
- /package/dist/{agent → cjs/agent}/tool-executor.d.ts +0 -0
- /package/dist/{agent → cjs/agent}/types.d.ts +0 -0
- /package/dist/{agent → cjs/agent}/workflow.d.ts +0 -0
- /package/dist/{context → cjs/context}/collector.d.ts +0 -0
- /package/dist/{context → cjs/context}/manager.d.ts +0 -0
- /package/dist/{context → cjs/context}/types.d.ts +0 -0
- /package/dist/{hooks → cjs/hooks}/types.d.ts +0 -0
- /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
- /package/dist/{llm → cjs/llm}/anthropic-provider.d.ts +0 -0
- /package/dist/{llm → cjs/llm}/factory.d.ts +0 -0
- /package/dist/{llm → cjs/llm}/ollama-provider.d.ts +0 -0
- /package/dist/{llm → cjs/llm}/openai-provider.d.ts +0 -0
- /package/dist/{llm → cjs/llm}/provider.d.ts +0 -0
- /package/dist/{llm → cjs/llm}/types.d.ts +0 -0
- /package/dist/{mcp → cjs/mcp}/base-client.d.ts +0 -0
- /package/dist/{mcp → cjs/mcp}/client.d.ts +0 -0
- /package/dist/{mcp → cjs/mcp}/factory.d.ts +0 -0
- /package/dist/{mcp → cjs/mcp}/http-client.d.ts +0 -0
- /package/dist/{mcp → cjs/mcp}/proxy-agent.d.ts +0 -0
- /package/dist/{mcp → cjs/mcp}/stdio-client.d.ts +0 -0
- /package/dist/{mcp → cjs/mcp}/types.d.ts +0 -0
- /package/dist/{memory → cjs/memory}/checkpoint.d.ts +0 -0
- /package/dist/{memory → cjs/memory}/extractor.d.ts +0 -0
- /package/dist/{memory → cjs/memory}/persona.d.ts +0 -0
- /package/dist/{memory → cjs/memory}/pipeline.d.ts +0 -0
- /package/dist/{memory → cjs/memory}/prompts.d.ts +0 -0
- /package/dist/{memory → cjs/memory}/recall.d.ts +0 -0
- /package/dist/{memory → cjs/memory}/scene.d.ts +0 -0
- /package/dist/{memory → cjs/memory}/types.d.ts +0 -0
- /package/dist/{middleware → cjs/middleware}/types.d.ts +0 -0
- /package/dist/{sandbox → cjs/sandbox}/types.d.ts +0 -0
- /package/dist/{security → cjs/security}/guard.d.ts +0 -0
- /package/dist/{security → cjs/security}/types.d.ts +0 -0
- /package/dist/{skill → cjs/skill}/manager.d.ts +0 -0
- /package/dist/{skill → cjs/skill}/router.d.ts +0 -0
- /package/dist/{skill → cjs/skill}/types.d.ts +0 -0
- /package/dist/{tool → cjs/tool}/delegate.d.ts +0 -0
- /package/dist/{tool → cjs/tool}/registry.d.ts +0 -0
- /package/dist/{tool → cjs/tool}/types.d.ts +0 -0
- /package/dist/{types.d.ts → cjs/types.d.ts} +0 -0
- /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
|