agim-cli 1.2.44 → 1.2.48
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/CHANGELOG.md +295 -0
- package/README.md +39 -5
- package/README.zh-CN.md +40 -6
- package/dist/cli-ui/config-wizard.js +15 -2
- package/dist/cli-ui/config-wizard.js.map +1 -1
- package/dist/cli-ui/diag.d.ts +29 -0
- package/dist/cli-ui/diag.d.ts.map +1 -0
- package/dist/cli-ui/diag.js +135 -0
- package/dist/cli-ui/diag.js.map +1 -0
- package/dist/cli-ui/i18n.d.ts +36 -0
- package/dist/cli-ui/i18n.d.ts.map +1 -1
- package/dist/cli-ui/i18n.js +97 -0
- package/dist/cli-ui/i18n.js.map +1 -1
- package/dist/cli-ui/setup-llm.d.ts +30 -0
- package/dist/cli-ui/setup-llm.d.ts.map +1 -0
- package/dist/cli-ui/setup-llm.js +460 -0
- package/dist/cli-ui/setup-llm.js.map +1 -0
- package/dist/cli-ui/setup-mcp.d.ts +19 -0
- package/dist/cli-ui/setup-mcp.d.ts.map +1 -0
- package/dist/cli-ui/setup-mcp.js +308 -0
- package/dist/cli-ui/setup-mcp.js.map +1 -0
- package/dist/cli-ui/token-menu.js +2 -2
- package/dist/cli-ui/token-menu.js.map +1 -1
- package/dist/cli.js +100 -22
- package/dist/cli.js.map +1 -1
- package/dist/core/access-token.d.ts +16 -5
- package/dist/core/access-token.d.ts.map +1 -1
- package/dist/core/access-token.js +82 -13
- package/dist/core/access-token.js.map +1 -1
- package/dist/core/agent-cwd.d.ts.map +1 -1
- package/dist/core/agent-cwd.js +46 -0
- package/dist/core/agent-cwd.js.map +1 -1
- package/dist/core/approval-bus.d.ts +22 -0
- package/dist/core/approval-bus.d.ts.map +1 -1
- package/dist/core/approval-bus.js +93 -0
- package/dist/core/approval-bus.js.map +1 -1
- package/dist/core/ask-user-router.d.ts +24 -0
- package/dist/core/ask-user-router.d.ts.map +1 -0
- package/dist/core/ask-user-router.js +84 -0
- package/dist/core/ask-user-router.js.map +1 -0
- package/dist/core/ask-user-rpc.d.ts +80 -0
- package/dist/core/ask-user-rpc.d.ts.map +1 -0
- package/dist/core/ask-user-rpc.js +388 -0
- package/dist/core/ask-user-rpc.js.map +1 -0
- package/dist/core/audit-log.d.ts +1 -1
- package/dist/core/audit-log.d.ts.map +1 -1
- package/dist/core/audit-log.js.map +1 -1
- package/dist/core/commands/builtin.d.ts.map +1 -1
- package/dist/core/commands/builtin.js +21 -5
- package/dist/core/commands/builtin.js.map +1 -1
- package/dist/core/commands/goal.d.ts +3 -0
- package/dist/core/commands/goal.d.ts.map +1 -0
- package/dist/core/commands/goal.js +240 -0
- package/dist/core/commands/goal.js.map +1 -0
- package/dist/core/commands/heartbeat.d.ts +3 -0
- package/dist/core/commands/heartbeat.d.ts.map +1 -0
- package/dist/core/commands/heartbeat.js +219 -0
- package/dist/core/commands/heartbeat.js.map +1 -0
- package/dist/core/commands/router-compare.d.ts +3 -0
- package/dist/core/commands/router-compare.d.ts.map +1 -0
- package/dist/core/commands/router-compare.js +81 -0
- package/dist/core/commands/router-compare.js.map +1 -0
- package/dist/core/commands/router.d.ts.map +1 -1
- package/dist/core/commands/router.js +9 -1
- package/dist/core/commands/router.js.map +1 -1
- package/dist/core/commands/skill.d.ts +3 -0
- package/dist/core/commands/skill.d.ts.map +1 -0
- package/dist/core/commands/skill.js +91 -0
- package/dist/core/commands/skill.js.map +1 -0
- package/dist/core/config-schema.d.ts +28 -0
- package/dist/core/config-schema.d.ts.map +1 -1
- package/dist/core/config-schema.js +124 -0
- package/dist/core/config-schema.js.map +1 -1
- package/dist/core/goals.d.ts +81 -0
- package/dist/core/goals.d.ts.map +1 -0
- package/dist/core/goals.js +361 -0
- package/dist/core/goals.js.map +1 -0
- package/dist/core/heartbeat-store.d.ts +90 -0
- package/dist/core/heartbeat-store.d.ts.map +1 -0
- package/dist/core/heartbeat-store.js +302 -0
- package/dist/core/heartbeat-store.js.map +1 -0
- package/dist/core/heartbeat.d.ts +35 -0
- package/dist/core/heartbeat.d.ts.map +1 -0
- package/dist/core/heartbeat.js +332 -0
- package/dist/core/heartbeat.js.map +1 -0
- package/dist/core/intent-llm.d.ts +9 -0
- package/dist/core/intent-llm.d.ts.map +1 -1
- package/dist/core/intent-llm.js +77 -32
- package/dist/core/intent-llm.js.map +1 -1
- package/dist/core/llm/agent-loop.d.ts +112 -0
- package/dist/core/llm/agent-loop.d.ts.map +1 -0
- package/dist/core/llm/agent-loop.js +313 -0
- package/dist/core/llm/agent-loop.js.map +1 -0
- package/dist/core/llm/anthropic-provider.d.ts +53 -0
- package/dist/core/llm/anthropic-provider.d.ts.map +1 -0
- package/dist/core/llm/anthropic-provider.js +339 -0
- package/dist/core/llm/anthropic-provider.js.map +1 -0
- package/dist/core/llm/auto-compact.d.ts +35 -0
- package/dist/core/llm/auto-compact.d.ts.map +1 -0
- package/dist/core/llm/auto-compact.js +149 -0
- package/dist/core/llm/auto-compact.js.map +1 -0
- package/dist/core/llm/builtin-dispatcher.d.ts +21 -0
- package/dist/core/llm/builtin-dispatcher.d.ts.map +1 -0
- package/dist/core/llm/builtin-dispatcher.js +196 -0
- package/dist/core/llm/builtin-dispatcher.js.map +1 -0
- package/dist/core/llm/imhub-dispatcher.d.ts +27 -0
- package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -0
- package/dist/core/llm/imhub-dispatcher.js +308 -0
- package/dist/core/llm/imhub-dispatcher.js.map +1 -0
- package/dist/core/llm/index.d.ts +11 -0
- package/dist/core/llm/index.d.ts.map +1 -0
- package/dist/core/llm/index.js +16 -0
- package/dist/core/llm/index.js.map +1 -0
- package/dist/core/llm/introspection.d.ts +73 -0
- package/dist/core/llm/introspection.d.ts.map +1 -0
- package/dist/core/llm/introspection.js +90 -0
- package/dist/core/llm/introspection.js.map +1 -0
- package/dist/core/llm/mcp-client.d.ts +80 -0
- package/dist/core/llm/mcp-client.d.ts.map +1 -0
- package/dist/core/llm/mcp-client.js +270 -0
- package/dist/core/llm/mcp-client.js.map +1 -0
- package/dist/core/llm/mcp-registry.d.ts +57 -0
- package/dist/core/llm/mcp-registry.d.ts.map +1 -0
- package/dist/core/llm/mcp-registry.js +155 -0
- package/dist/core/llm/mcp-registry.js.map +1 -0
- package/dist/core/llm/openai-compat-provider.d.ts +65 -0
- package/dist/core/llm/openai-compat-provider.d.ts.map +1 -0
- package/dist/core/llm/openai-compat-provider.js +451 -0
- package/dist/core/llm/openai-compat-provider.js.map +1 -0
- package/dist/core/llm/policy-approval-gate.d.ts +30 -0
- package/dist/core/llm/policy-approval-gate.d.ts.map +1 -0
- package/dist/core/llm/policy-approval-gate.js +86 -0
- package/dist/core/llm/policy-approval-gate.js.map +1 -0
- package/dist/core/llm/provider-base.d.ts +302 -0
- package/dist/core/llm/provider-base.d.ts.map +1 -0
- package/dist/core/llm/provider-base.js +222 -0
- package/dist/core/llm/provider-base.js.map +1 -0
- package/dist/core/llm/registry.d.ts +44 -0
- package/dist/core/llm/registry.d.ts.map +1 -0
- package/dist/core/llm/registry.js +160 -0
- package/dist/core/llm/registry.js.map +1 -0
- package/dist/core/llm/secrets.d.ts +46 -0
- package/dist/core/llm/secrets.d.ts.map +1 -0
- package/dist/core/llm/secrets.js +157 -0
- package/dist/core/llm/secrets.js.map +1 -0
- package/dist/core/llm/tool-dispatcher.d.ts +37 -0
- package/dist/core/llm/tool-dispatcher.d.ts.map +1 -0
- package/dist/core/llm/tool-dispatcher.js +85 -0
- package/dist/core/llm/tool-dispatcher.js.map +1 -0
- package/dist/core/memory-consolidate.d.ts.map +1 -1
- package/dist/core/memory-consolidate.js +38 -23
- package/dist/core/memory-consolidate.js.map +1 -1
- package/dist/core/memory-distill.d.ts.map +1 -1
- package/dist/core/memory-distill.js +51 -25
- package/dist/core/memory-distill.js.map +1 -1
- package/dist/core/memory-rpc.d.ts.map +1 -1
- package/dist/core/memory-rpc.js +6 -0
- package/dist/core/memory-rpc.js.map +1 -1
- package/dist/core/message-sink.d.ts.map +1 -1
- package/dist/core/message-sink.js +76 -0
- package/dist/core/message-sink.js.map +1 -1
- package/dist/core/notification-evaluator.d.ts +49 -0
- package/dist/core/notification-evaluator.d.ts.map +1 -0
- package/dist/core/notification-evaluator.js +232 -0
- package/dist/core/notification-evaluator.js.map +1 -0
- package/dist/core/onboarding.d.ts.map +1 -1
- package/dist/core/onboarding.js +10 -0
- package/dist/core/onboarding.js.map +1 -1
- package/dist/core/persona.d.ts +10 -0
- package/dist/core/persona.d.ts.map +1 -1
- package/dist/core/persona.js +28 -14
- package/dist/core/persona.js.map +1 -1
- package/dist/core/push-rpc.d.ts +8 -0
- package/dist/core/push-rpc.d.ts.map +1 -1
- package/dist/core/push-rpc.js +41 -1
- package/dist/core/push-rpc.js.map +1 -1
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +6 -0
- package/dist/core/registry.js.map +1 -1
- package/dist/core/render-router.d.ts.map +1 -1
- package/dist/core/render-router.js +23 -6
- package/dist/core/render-router.js.map +1 -1
- package/dist/core/router-compare.d.ts +76 -0
- package/dist/core/router-compare.d.ts.map +1 -0
- package/dist/core/router-compare.js +253 -0
- package/dist/core/router-compare.js.map +1 -0
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/router.js +25 -1
- package/dist/core/router.js.map +1 -1
- package/dist/core/skills/builtin/agim-self/SKILL.md +81 -0
- package/dist/core/skills/loader.d.ts +120 -0
- package/dist/core/skills/loader.d.ts.map +1 -0
- package/dist/core/skills/loader.js +577 -0
- package/dist/core/skills/loader.js.map +1 -0
- package/dist/core/skills-rpc.d.ts +44 -0
- package/dist/core/skills-rpc.d.ts.map +1 -0
- package/dist/core/skills-rpc.js +71 -0
- package/dist/core/skills-rpc.js.map +1 -0
- package/dist/core/types.d.ts +35 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/util/format-age.d.ts +20 -0
- package/dist/core/util/format-age.d.ts.map +1 -0
- package/dist/core/util/format-age.js +86 -0
- package/dist/core/util/format-age.js.map +1 -0
- package/dist/core/viewer-config.d.ts +15 -7
- package/dist/core/viewer-config.d.ts.map +1 -1
- package/dist/core/viewer-config.js +18 -12
- package/dist/core/viewer-config.js.map +1 -1
- package/dist/plugins/agents/acp/acp-adapter.d.ts +3 -0
- package/dist/plugins/agents/acp/acp-adapter.d.ts.map +1 -1
- package/dist/plugins/agents/acp/acp-adapter.js +12 -0
- package/dist/plugins/agents/acp/acp-adapter.js.map +1 -1
- package/dist/plugins/agents/antigravity/index.d.ts +1 -0
- package/dist/plugins/agents/antigravity/index.d.ts.map +1 -1
- package/dist/plugins/agents/antigravity/index.js +1 -0
- package/dist/plugins/agents/antigravity/index.js.map +1 -1
- package/dist/plugins/agents/claude-code/index.d.ts +1 -0
- package/dist/plugins/agents/claude-code/index.d.ts.map +1 -1
- package/dist/plugins/agents/claude-code/index.js +1 -0
- package/dist/plugins/agents/claude-code/index.js.map +1 -1
- package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +22 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -1
- package/dist/plugins/agents/claude-code/mcp-approval-server.js +157 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
- package/dist/plugins/agents/codex/index.d.ts +1 -0
- package/dist/plugins/agents/codex/index.d.ts.map +1 -1
- package/dist/plugins/agents/codex/index.js +1 -0
- package/dist/plugins/agents/codex/index.js.map +1 -1
- package/dist/plugins/agents/native/index.d.ts +34 -0
- package/dist/plugins/agents/native/index.d.ts.map +1 -0
- package/dist/plugins/agents/native/index.js +598 -0
- package/dist/plugins/agents/native/index.js.map +1 -0
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +1 -0
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -1
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +1 -0
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -1
- package/dist/plugins/messengers/wechat/ilink-adapter.d.ts +4 -0
- package/dist/plugins/messengers/wechat/ilink-adapter.d.ts.map +1 -1
- package/dist/plugins/messengers/wechat/ilink-adapter.js +26 -1
- package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -1
- package/dist/web/agim-skills-api.d.ts +4 -0
- package/dist/web/agim-skills-api.d.ts.map +1 -0
- package/dist/web/agim-skills-api.js +150 -0
- package/dist/web/agim-skills-api.js.map +1 -0
- package/dist/web/background-tasks-api.d.ts +7 -0
- package/dist/web/background-tasks-api.d.ts.map +1 -0
- package/dist/web/background-tasks-api.js +225 -0
- package/dist/web/background-tasks-api.js.map +1 -0
- package/dist/web/llm-api.d.ts +8 -0
- package/dist/web/llm-api.d.ts.map +1 -0
- package/dist/web/llm-api.js +300 -0
- package/dist/web/llm-api.js.map +1 -0
- package/dist/web/mcp-api.d.ts +8 -0
- package/dist/web/mcp-api.d.ts.map +1 -0
- package/dist/web/mcp-api.js +205 -0
- package/dist/web/mcp-api.js.map +1 -0
- package/dist/web/public/assets/{a2a-Bg_mT0z1.js → a2a-Mke0F7ZM.js} +3 -3
- package/dist/web/public/assets/{a2a-Bg_mT0z1.js.map → a2a-Mke0F7ZM.js.map} +1 -1
- package/dist/web/public/assets/{activity-U9AaNlDt.js → activity-0zGnf1_m.js} +2 -2
- package/dist/web/public/assets/{activity-U9AaNlDt.js.map → activity-0zGnf1_m.js.map} +1 -1
- package/dist/web/public/assets/{admins-BTC_YEK9.js → admins-DSi3KRky.js} +3 -3
- package/dist/web/public/assets/{admins-BTC_YEK9.js.map → admins-DSi3KRky.js.map} +1 -1
- package/dist/web/public/assets/agents-BLWe20EJ.js +7 -0
- package/dist/web/public/assets/agents-BLWe20EJ.js.map +1 -0
- package/dist/web/public/assets/{approvals-Boj7iXz4.js → approvals-Cu_JdM-8.js} +3 -3
- package/dist/web/public/assets/{approvals-Boj7iXz4.js.map → approvals-Cu_JdM-8.js.map} +1 -1
- package/dist/web/public/assets/asks-DfV8vxey.js +7 -0
- package/dist/web/public/assets/asks-DfV8vxey.js.map +1 -0
- package/dist/web/public/assets/{audit-MprCFoy_.js → audit-2EVhhvGV.js} +2 -2
- package/dist/web/public/assets/{audit-MprCFoy_.js.map → audit-2EVhhvGV.js.map} +1 -1
- package/dist/web/public/assets/bell-Wz_wuOa_.js +7 -0
- package/dist/web/public/assets/bell-Wz_wuOa_.js.map +1 -0
- package/dist/web/public/assets/{bgjobs-B6XvxURz.js → bgjobs-DXROZFAW.js} +2 -2
- package/dist/web/public/assets/{bgjobs-B6XvxURz.js.map → bgjobs-DXROZFAW.js.map} +1 -1
- package/dist/web/public/assets/{brain-C5HejASN.js → brain-Dh5VOzRL.js} +2 -2
- package/dist/web/public/assets/{brain-C5HejASN.js.map → brain-Dh5VOzRL.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-DkCTxO1A.js → briefcase-DfxbvM9i.js} +2 -2
- package/dist/web/public/assets/{briefcase-DkCTxO1A.js.map → briefcase-DfxbvM9i.js.map} +1 -1
- package/dist/web/public/assets/{chevron-right-DEyrYFz4.js → chevron-right-DU8Xla1M.js} +2 -2
- package/dist/web/public/assets/{chevron-right-DEyrYFz4.js.map → chevron-right-DU8Xla1M.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-bADFEXGw.js → circle-check-Be_S993G.js} +2 -2
- package/dist/web/public/assets/{circle-check-bADFEXGw.js.map → circle-check-Be_S993G.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-U4xrkHiS.js → circle-check-big-CsQkLR1u.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-U4xrkHiS.js.map → circle-check-big-CsQkLR1u.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-C6qY5UUl.js → circle-x-qkQu1Swu.js} +2 -2
- package/dist/web/public/assets/{circle-x-C6qY5UUl.js.map → circle-x-qkQu1Swu.js.map} +1 -1
- package/dist/web/public/assets/{confirm-dialog-B53cbWzX.js → confirm-dialog-Bm6MsLXZ.js} +2 -2
- package/dist/web/public/assets/{confirm-dialog-B53cbWzX.js.map → confirm-dialog-Bm6MsLXZ.js.map} +1 -1
- package/dist/web/public/assets/{data-table-BKTemkw9.js → data-table-Dw4Df09-.js} +5 -5
- package/dist/web/public/assets/{data-table-BKTemkw9.js.map → data-table-Dw4Df09-.js.map} +1 -1
- package/dist/web/public/assets/{dialog-Cevi7KvQ.js → dialog-CNsc4COh.js} +3 -3
- package/dist/web/public/assets/{dialog-Cevi7KvQ.js.map → dialog-CNsc4COh.js.map} +1 -1
- package/dist/web/public/assets/{download-DwJNwdwV.js → download-Bnhk_vDY.js} +2 -2
- package/dist/web/public/assets/{download-DwJNwdwV.js.map → download-Bnhk_vDY.js.map} +1 -1
- package/dist/web/public/assets/{email-CZVaRhG_.js → email-jgAX8liM.js} +3 -3
- package/dist/web/public/assets/{email-CZVaRhG_.js.map → email-jgAX8liM.js.map} +1 -1
- package/dist/web/public/assets/{empty-state-C87S9Wor.js → empty-state-D8QXQ5y9.js} +2 -2
- package/dist/web/public/assets/{empty-state-C87S9Wor.js.map → empty-state-D8QXQ5y9.js.map} +1 -1
- package/dist/web/public/assets/{external-link-CIM1wjHP.js → external-link-C8AYvhBb.js} +2 -2
- package/dist/web/public/assets/{external-link-CIM1wjHP.js.map → external-link-C8AYvhBb.js.map} +1 -1
- package/dist/web/public/assets/{eye-TUAOhz72.js → eye-pmI_4E8x.js} +4 -4
- package/dist/web/public/assets/{eye-TUAOhz72.js.map → eye-pmI_4E8x.js.map} +1 -1
- package/dist/web/public/assets/{facts-ByM1VHCp.js → facts-BRHLLX2u.js} +2 -2
- package/dist/web/public/assets/{facts-ByM1VHCp.js.map → facts-BRHLLX2u.js.map} +1 -1
- package/dist/web/public/assets/goals-p7cNp01l.js +17 -0
- package/dist/web/public/assets/goals-p7cNp01l.js.map +1 -0
- package/dist/web/public/assets/{health-B4GF06J-.js → health-CuGIXg8C.js} +2 -2
- package/dist/web/public/assets/{health-B4GF06J-.js.map → health-CuGIXg8C.js.map} +1 -1
- package/dist/web/public/assets/heart-pulse-D0AHQl1d.js +7 -0
- package/dist/web/public/assets/heart-pulse-D0AHQl1d.js.map +1 -0
- package/dist/web/public/assets/heartbeat-DJRDS2GQ.js +7 -0
- package/dist/web/public/assets/heartbeat-DJRDS2GQ.js.map +1 -0
- package/dist/web/public/assets/hot-B1qKTiGD.js +17 -0
- package/dist/web/public/assets/hot-B1qKTiGD.js.map +1 -0
- package/dist/web/public/assets/index-B7QRVy9N.css +1 -0
- package/dist/web/public/assets/index-XJngV1gH.js +166 -0
- package/dist/web/public/assets/index-XJngV1gH.js.map +1 -0
- package/dist/web/public/assets/installed-Dz4-KevJ.js +31 -0
- package/dist/web/public/assets/installed-Dz4-KevJ.js.map +1 -0
- package/dist/web/public/assets/{jobs-DwA9Ip87.js → jobs-kwOypiWd.js} +2 -2
- package/dist/web/public/assets/{jobs-DwA9Ip87.js.map → jobs-kwOypiWd.js.map} +1 -1
- package/dist/web/public/assets/layout-01n3Aibo.js +2 -0
- package/dist/web/public/assets/layout-01n3Aibo.js.map +1 -0
- package/dist/web/public/assets/layout-CVYe2vN8.js +2 -0
- package/dist/web/public/assets/layout-CVYe2vN8.js.map +1 -0
- package/dist/web/public/assets/{layout-CR5gLapT.js → layout-CbHxH58i.js} +2 -2
- package/dist/web/public/assets/{layout-CR5gLapT.js.map → layout-CbHxH58i.js.map} +1 -1
- package/dist/web/public/assets/layout-DD1Dei48.js +2 -0
- package/dist/web/public/assets/layout-DD1Dei48.js.map +1 -0
- package/dist/web/public/assets/{layout-zotlJ5fW.js → layout-s11iwkL-.js} +2 -2
- package/dist/web/public/assets/{layout-zotlJ5fW.js.map → layout-s11iwkL-.js.map} +1 -1
- package/dist/web/public/assets/llm-DPlK10Lg.js +7 -0
- package/dist/web/public/assets/llm-DPlK10Lg.js.map +1 -0
- package/dist/web/public/assets/{loader-circle-BFp6Oc8_.js → loader-circle-DymEG5Cl.js} +2 -2
- package/dist/web/public/assets/{loader-circle-BFp6Oc8_.js.map → loader-circle-DymEG5Cl.js.map} +1 -1
- package/dist/web/public/assets/{map-pin-DPqnsBIG.js → map-pin-CyZg1-Jk.js} +2 -2
- package/dist/web/public/assets/{map-pin-DPqnsBIG.js.map → map-pin-CyZg1-Jk.js.map} +1 -1
- package/dist/web/public/assets/mcp-CiifW_qp.js +7 -0
- package/dist/web/public/assets/mcp-CiifW_qp.js.map +1 -0
- package/dist/web/public/assets/{memos-DCACQN26.js → memos-Bsiq64qW.js} +2 -2
- package/dist/web/public/assets/{memos-DCACQN26.js.map → memos-Bsiq64qW.js.map} +1 -1
- package/dist/web/public/assets/{messengers-CwWP1qI4.js → messengers-alGJK9dO.js} +3 -3
- package/dist/web/public/assets/{messengers-CwWP1qI4.js.map → messengers-alGJK9dO.js.map} +1 -1
- package/dist/web/public/assets/native-agent-CgzcqRsU.js +7 -0
- package/dist/web/public/assets/native-agent-CgzcqRsU.js.map +1 -0
- package/dist/web/public/assets/{network-CrMEVz4-.js → network-BSRJfeGk.js} +2 -2
- package/dist/web/public/assets/{network-CrMEVz4-.js.map → network-BSRJfeGk.js.map} +1 -1
- package/dist/web/public/assets/{outbox-C7FpZzwS.js → outbox-DSDls9xU.js} +3 -3
- package/dist/web/public/assets/{outbox-C7FpZzwS.js.map → outbox-DSDls9xU.js.map} +1 -1
- package/dist/web/public/assets/{pagination-Cgt8W6EX.js → pagination-DVXNZ2ti.js} +3 -3
- package/dist/web/public/assets/{pagination-Cgt8W6EX.js.map → pagination-DVXNZ2ti.js.map} +1 -1
- package/dist/web/public/assets/{persona-Bjty6uqM.js → persona-BB1gIwTX.js} +2 -2
- package/dist/web/public/assets/{persona-Bjty6uqM.js.map → persona-BB1gIwTX.js.map} +1 -1
- package/dist/web/public/assets/{play-CEoS1N8t.js → play-CcECAHfL.js} +2 -2
- package/dist/web/public/assets/{play-CEoS1N8t.js.map → play-CcECAHfL.js.map} +1 -1
- package/dist/web/public/assets/plus-DrStBHss.js +7 -0
- package/dist/web/public/assets/plus-DrStBHss.js.map +1 -0
- package/dist/web/public/assets/policy-BgDYTxy7.js +2 -0
- package/dist/web/public/assets/{policy-DwI-ov9J.js.map → policy-BgDYTxy7.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw-CPSYEbgh.js → refresh-ccw-BBRPVLH8.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw-CPSYEbgh.js.map → refresh-ccw-BBRPVLH8.js.map} +1 -1
- package/dist/web/public/assets/{reminders-X-QFSWvZ.js → reminders-jwy196Xw.js} +4 -9
- package/dist/web/public/assets/reminders-jwy196Xw.js.map +1 -0
- package/dist/web/public/assets/{save-tS3IBPf3.js → save-iBtyruco.js} +2 -2
- package/dist/web/public/assets/{save-tS3IBPf3.js.map → save-iBtyruco.js.map} +1 -1
- package/dist/web/public/assets/{schedules-CfCNvhCV.js → schedules-DDl_Sr5r.js} +3 -3
- package/dist/web/public/assets/{schedules-CfCNvhCV.js.map → schedules-DDl_Sr5r.js.map} +1 -1
- package/dist/web/public/assets/{search-BPvPCccn.js → search-Yb1S22sv.js} +2 -2
- package/dist/web/public/assets/{search-BPvPCccn.js.map → search-Yb1S22sv.js.map} +1 -1
- package/dist/web/public/assets/{service-DSitDFzD.js → service-jrg0kMtK.js} +3 -3
- package/dist/web/public/assets/{service-DSitDFzD.js.map → service-jrg0kMtK.js.map} +1 -1
- package/dist/web/public/assets/{status-badge-HSHkhdur.js → status-badge-Arxyw3TL.js} +2 -2
- package/dist/web/public/assets/{status-badge-HSHkhdur.js.map → status-badge-Arxyw3TL.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-eKq_P0v6.js → subtasks-CkyuMv_X.js} +3 -3
- package/dist/web/public/assets/{subtasks-eKq_P0v6.js.map → subtasks-CkyuMv_X.js.map} +1 -1
- package/dist/web/public/assets/{table-BBISYTH-.js → table-BKdG9tsY.js} +2 -2
- package/dist/web/public/assets/{table-BBISYTH-.js.map → table-BKdG9tsY.js.map} +1 -1
- package/dist/web/public/assets/{topn-JA8llaUI.js → topn-BpX8BKWS.js} +3 -3
- package/dist/web/public/assets/{topn-JA8llaUI.js.map → topn-BpX8BKWS.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-D8F96aYm.js → trash-2-DxKJo_-6.js} +3 -3
- package/dist/web/public/assets/{trash-2-D8F96aYm.js.map → trash-2-DxKJo_-6.js.map} +1 -1
- package/dist/web/public/assets/use-background-tasks-vqoDXiAq.js +2 -0
- package/dist/web/public/assets/use-background-tasks-vqoDXiAq.js.map +1 -0
- package/dist/web/public/assets/use-llm-admin-D4snixaM.js +2 -0
- package/dist/web/public/assets/use-llm-admin-D4snixaM.js.map +1 -0
- package/dist/web/public/assets/{use-memory-BDa1R8Tf.js → use-memory-Cqf3xywK.js} +2 -2
- package/dist/web/public/assets/{use-memory-BDa1R8Tf.js.map → use-memory-Cqf3xywK.js.map} +1 -1
- package/dist/web/public/assets/{use-observability-XgxLMQsY.js → use-observability-Thh7LWoE.js} +2 -2
- package/dist/web/public/assets/{use-observability-XgxLMQsY.js.map → use-observability-Thh7LWoE.js.map} +1 -1
- package/dist/web/public/assets/{use-settings-Bc4s-JUD.js → use-settings-DRhH8owt.js} +2 -2
- package/dist/web/public/assets/{use-settings-Bc4s-JUD.js.map → use-settings-DRhH8owt.js.map} +1 -1
- package/dist/web/public/assets/{use-workspace-JalfqH6H.js → use-workspace-iLKz-h_7.js} +2 -2
- package/dist/web/public/assets/{use-workspace-JalfqH6H.js.map → use-workspace-iLKz-h_7.js.map} +1 -1
- package/dist/web/public/assets/useQuery-gnz30xMJ.js +2 -0
- package/dist/web/public/assets/{useQuery-DFryK9Pn.js.map → useQuery-gnz30xMJ.js.map} +1 -1
- package/dist/web/public/assets/{vector-G2dN_aut.js → vector-COjljy_4.js} +2 -2
- package/dist/web/public/assets/{vector-G2dN_aut.js.map → vector-COjljy_4.js.map} +1 -1
- package/dist/web/public/assets/viewer-AQHSc8hZ.js +12 -0
- package/dist/web/public/assets/viewer-AQHSc8hZ.js.map +1 -0
- package/dist/web/public/assets/{workspace-BaLZIgGn.js → workspace-DRtSCbx5.js} +4 -4
- package/dist/web/public/assets/{workspace-BaLZIgGn.js.map → workspace-DRtSCbx5.js.map} +1 -1
- package/dist/web/public/assets/{workspaces-cX_rV523.js → workspaces-BLR5ZBu6.js} +3 -3
- package/dist/web/public/assets/{workspaces-cX_rV523.js.map → workspaces-BLR5ZBu6.js.map} +1 -1
- package/dist/web/public/assets/{x-D5196-9X.js → x-DGQ0qjhc.js} +2 -2
- package/dist/web/public/assets/{x-D5196-9X.js.map → x-DGQ0qjhc.js.map} +1 -1
- package/dist/web/public/index.html +2 -2
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +45 -0
- package/dist/web/server.js.map +1 -1
- package/package.json +2 -2
- package/dist/web/public/assets/agents-o9odac79.js +0 -12
- package/dist/web/public/assets/agents-o9odac79.js.map +0 -1
- package/dist/web/public/assets/hot-O9Z19xXa.js +0 -17
- package/dist/web/public/assets/hot-O9Z19xXa.js.map +0 -1
- package/dist/web/public/assets/index-CITyis5g.js +0 -166
- package/dist/web/public/assets/index-CITyis5g.js.map +0 -1
- package/dist/web/public/assets/index-Cvacw7Jg.css +0 -1
- package/dist/web/public/assets/installed-CM34mlDU.js +0 -7
- package/dist/web/public/assets/installed-CM34mlDU.js.map +0 -1
- package/dist/web/public/assets/layout-BxrFilDN.js +0 -2
- package/dist/web/public/assets/layout-BxrFilDN.js.map +0 -1
- package/dist/web/public/assets/layout-CcJQxFci.js +0 -2
- package/dist/web/public/assets/layout-CcJQxFci.js.map +0 -1
- package/dist/web/public/assets/layout-DRRveTaR.js +0 -2
- package/dist/web/public/assets/layout-DRRveTaR.js.map +0 -1
- package/dist/web/public/assets/policy-DwI-ov9J.js +0 -2
- package/dist/web/public/assets/reminders-X-QFSWvZ.js.map +0 -1
- package/dist/web/public/assets/use-skills-DCOYAQ8s.js +0 -2
- package/dist/web/public/assets/use-skills-DCOYAQ8s.js.map +0 -1
- package/dist/web/public/assets/useQuery-DFryK9Pn.js +0 -2
- package/dist/web/public/assets/viewer-DliYQkQQ.js +0 -12
- package/dist/web/public/assets/viewer-DliYQkQQ.js.map +0 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type LlmRole } from './registry.js';
|
|
2
|
+
import { type LlmUsage } from './provider-base.js';
|
|
3
|
+
export interface IntrospectionInput {
|
|
4
|
+
/** Role name to look up in the registry. */
|
|
5
|
+
role: LlmRole;
|
|
6
|
+
/** The user prompt. Required. */
|
|
7
|
+
prompt: string;
|
|
8
|
+
/** Optional system prompt prepended as a system message. */
|
|
9
|
+
system?: string;
|
|
10
|
+
/** Hard deadline. Default 30s — short enough that a stuck provider
|
|
11
|
+
* trips fallback fast, long enough that legitimate JSON extraction
|
|
12
|
+
* on a free-tier model completes. */
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
/** Caller may pass through an AbortSignal (e.g. distill's queue is
|
|
15
|
+
* draining); we merge it with timeoutMs. */
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
/** Per-call temperature override (cheap callers usually want 0.2; the
|
|
18
|
+
* provider default is already low so this is rarely needed). */
|
|
19
|
+
temperature?: number;
|
|
20
|
+
/** Per-call model override; falls back to the provider's default. */
|
|
21
|
+
model?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface IntrospectionResult {
|
|
24
|
+
/** Plain text body. Empty string means "model returned nothing useful";
|
|
25
|
+
* the caller decides whether that's a failure. */
|
|
26
|
+
text: string;
|
|
27
|
+
/** Aggregate usage from the provider. */
|
|
28
|
+
usage: LlmUsage;
|
|
29
|
+
/** Backend name that handled the request; useful for audit rows. */
|
|
30
|
+
backendName: string;
|
|
31
|
+
/** Provider type label (e.g. "deepseek" / "openai-compat") for the
|
|
32
|
+
* cost dashboard. */
|
|
33
|
+
providerType: string;
|
|
34
|
+
/** Elapsed wall-clock time. */
|
|
35
|
+
durationMs: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Try to satisfy the introspection request via the configured backend
|
|
39
|
+
* for `role`. Returns null when:
|
|
40
|
+
* - no provider is wired for this role, OR
|
|
41
|
+
* - the provider call failed (errors are logged + classified, never
|
|
42
|
+
* re-thrown — the caller's fallback path takes over).
|
|
43
|
+
*
|
|
44
|
+
* The "return null on failure" contract is exactly what distill /
|
|
45
|
+
* consolidate / intent want: they then fall back to spawning their
|
|
46
|
+
* CLI agent and the user notices nothing.
|
|
47
|
+
*/
|
|
48
|
+
export declare function tryIntrospect(input: IntrospectionInput): Promise<IntrospectionResult | null>;
|
|
49
|
+
/**
|
|
50
|
+
* Stage 5 — try a CHAIN of roles in order until one returns a non-null
|
|
51
|
+
* result. The chain is operator-configurable per call (typically
|
|
52
|
+
* ['cheap', 'native-chat', 'evaluator'] for low-stakes introspection
|
|
53
|
+
* that should escalate to a smarter / different vendor on failure).
|
|
54
|
+
*
|
|
55
|
+
* Returns the first successful IntrospectionResult, augmented with
|
|
56
|
+
* `triedRoles` so the caller can audit which roles got skipped. When
|
|
57
|
+
* every role in the chain returns null, returns null — the caller's
|
|
58
|
+
* existing CLI-fallback path takes over (same contract as
|
|
59
|
+
* tryIntrospect).
|
|
60
|
+
*/
|
|
61
|
+
export interface IntrospectionChainInput extends Omit<IntrospectionInput, 'role'> {
|
|
62
|
+
/** Roles to try in order. Empty array returns null immediately. */
|
|
63
|
+
roles: LlmRole[];
|
|
64
|
+
/** Per-role wall-clock cap (default 30s). */
|
|
65
|
+
perRoleTimeoutMs?: number;
|
|
66
|
+
}
|
|
67
|
+
export interface IntrospectionChainResult extends IntrospectionResult {
|
|
68
|
+
/** Roles attempted in order, including the one that succeeded
|
|
69
|
+
* (always last). Lets the caller log "we fell back twice". */
|
|
70
|
+
triedRoles: LlmRole[];
|
|
71
|
+
}
|
|
72
|
+
export declare function tryIntrospectChain(input: IntrospectionChainInput): Promise<IntrospectionChainResult | null>;
|
|
73
|
+
//# sourceMappingURL=introspection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspection.d.ts","sourceRoot":"","sources":["../../../src/core/llm/introspection.ts"],"names":[],"mappings":"AAUA,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAIrF,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,IAAI,EAAE,OAAO,CAAA;IACb,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;0CAEsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;iDAC6C;IAC7C,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB;qEACiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC;uDACmD;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,yCAAyC;IACzC,KAAK,EAAE,QAAQ,CAAA;IACf,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAA;IACnB;0BACsB;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAmClG;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACxC,mEAAmE;IACnE,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE;mEAC+D;IAC/D,UAAU,EAAE,OAAO,EAAE,CAAA;CACtB;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CA2B1C"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Introspection helper — bridges the registry to the existing CLI-style
|
|
2
|
+
// "give me a string back" pattern that distill / consolidate / intent
|
|
3
|
+
// already use.
|
|
4
|
+
//
|
|
5
|
+
// Callers don't want to know about LlmMessage[] / ChatResult. They have
|
|
6
|
+
// a flat prompt string and a per-call deadline; they want a Promise<{
|
|
7
|
+
// text, costUsd }> back. This file does that mapping in one place so
|
|
8
|
+
// every introspection caller stays a 1-line change.
|
|
9
|
+
import { logger as rootLogger } from '../logger.js';
|
|
10
|
+
import { getProvider } from './registry.js';
|
|
11
|
+
import { LlmProviderError } from './provider-base.js';
|
|
12
|
+
const log = rootLogger.child({ component: 'llm-introspection' });
|
|
13
|
+
/**
|
|
14
|
+
* Try to satisfy the introspection request via the configured backend
|
|
15
|
+
* for `role`. Returns null when:
|
|
16
|
+
* - no provider is wired for this role, OR
|
|
17
|
+
* - the provider call failed (errors are logged + classified, never
|
|
18
|
+
* re-thrown — the caller's fallback path takes over).
|
|
19
|
+
*
|
|
20
|
+
* The "return null on failure" contract is exactly what distill /
|
|
21
|
+
* consolidate / intent want: they then fall back to spawning their
|
|
22
|
+
* CLI agent and the user notices nothing.
|
|
23
|
+
*/
|
|
24
|
+
export async function tryIntrospect(input) {
|
|
25
|
+
const provider = getProvider(input.role);
|
|
26
|
+
if (!provider)
|
|
27
|
+
return null;
|
|
28
|
+
const messages = [{ role: 'user', content: input.prompt }];
|
|
29
|
+
const startedAt = Date.now();
|
|
30
|
+
try {
|
|
31
|
+
const result = await provider.chat(messages, {
|
|
32
|
+
system: input.system,
|
|
33
|
+
timeoutMs: input.timeoutMs ?? 30_000,
|
|
34
|
+
signal: input.signal,
|
|
35
|
+
temperature: input.temperature,
|
|
36
|
+
model: input.model,
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
text: result.text,
|
|
40
|
+
usage: result.usage,
|
|
41
|
+
backendName: provider.name,
|
|
42
|
+
providerType: provider.providerType,
|
|
43
|
+
durationMs: Date.now() - startedAt,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const transient = err instanceof LlmProviderError ? err.transient : false;
|
|
48
|
+
const httpStatus = err instanceof LlmProviderError ? err.httpStatus : undefined;
|
|
49
|
+
log.warn({
|
|
50
|
+
event: 'llm.introspect.failed',
|
|
51
|
+
role: input.role,
|
|
52
|
+
backend: provider.name,
|
|
53
|
+
providerType: provider.providerType,
|
|
54
|
+
transient,
|
|
55
|
+
httpStatus,
|
|
56
|
+
err: err instanceof Error ? err.message : String(err),
|
|
57
|
+
});
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export async function tryIntrospectChain(input) {
|
|
62
|
+
if (!input.roles || input.roles.length === 0)
|
|
63
|
+
return null;
|
|
64
|
+
const tried = [];
|
|
65
|
+
for (const role of input.roles) {
|
|
66
|
+
tried.push(role);
|
|
67
|
+
const r = await tryIntrospect({
|
|
68
|
+
role,
|
|
69
|
+
prompt: input.prompt,
|
|
70
|
+
system: input.system,
|
|
71
|
+
timeoutMs: input.perRoleTimeoutMs ?? input.timeoutMs ?? 30_000,
|
|
72
|
+
signal: input.signal,
|
|
73
|
+
temperature: input.temperature,
|
|
74
|
+
model: input.model,
|
|
75
|
+
});
|
|
76
|
+
if (r) {
|
|
77
|
+
log.info({
|
|
78
|
+
event: 'llm.introspect.chain.success',
|
|
79
|
+
role, attempts: tried.length, totalRoles: input.roles.length,
|
|
80
|
+
});
|
|
81
|
+
return { ...r, triedRoles: tried.slice() };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
log.info({
|
|
85
|
+
event: 'llm.introspect.chain.exhausted',
|
|
86
|
+
attempts: tried.length, roles: tried.join(','),
|
|
87
|
+
});
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=introspection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspection.js","sourceRoot":"","sources":["../../../src/core/llm/introspection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { ToolDef } from './provider-base.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tool naming policy: `mcp_{server}_{tool}`. Avoids name collisions when
|
|
4
|
+
* two servers advertise the same tool name (common: every server has
|
|
5
|
+
* `read_file`). The original tool name is preserved on `originalName`
|
|
6
|
+
* so error messages stay legible and `enabledTools` filtering can match
|
|
7
|
+
* either form.
|
|
8
|
+
*/
|
|
9
|
+
export declare function _namespacedNameForTest(serverName: string, toolName: string): string;
|
|
10
|
+
/** Stage-2 config shape for one MCP server. Mirrors the zod schema in
|
|
11
|
+
* config-schema.ts but kept here as a plain TS interface so this file
|
|
12
|
+
* doesn't import the whole schema module just for the type. */
|
|
13
|
+
export interface McpServerConfig {
|
|
14
|
+
name: string;
|
|
15
|
+
command?: string;
|
|
16
|
+
args?: string[];
|
|
17
|
+
env?: Record<string, string>;
|
|
18
|
+
cwd?: string;
|
|
19
|
+
url?: string;
|
|
20
|
+
headers?: Record<string, string>;
|
|
21
|
+
toolTimeoutMs?: number;
|
|
22
|
+
enabledTools?: string[];
|
|
23
|
+
enabled?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** Result of a single tool call. Stage-2 agent loop treats this as
|
|
26
|
+
* free-form text appended to the conversation as a tool message. */
|
|
27
|
+
export interface ToolCallResult {
|
|
28
|
+
text: string;
|
|
29
|
+
isError: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Wraps one MCP server connection. The caller (`mcp-registry.ts`)
|
|
33
|
+
* holds a Map<server-name, McpClient> and is responsible for lifecycle
|
|
34
|
+
* (connectAll at boot, closeAll on shutdown).
|
|
35
|
+
*/
|
|
36
|
+
export declare class McpClient {
|
|
37
|
+
readonly name: string;
|
|
38
|
+
private readonly cfg;
|
|
39
|
+
private readonly toolTimeoutMs;
|
|
40
|
+
private client;
|
|
41
|
+
private cachedTools;
|
|
42
|
+
constructor(cfg: McpServerConfig);
|
|
43
|
+
/** True once connect() has completed without error. */
|
|
44
|
+
isConnected(): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Pick the right transport for the config and run the MCP handshake.
|
|
47
|
+
* Errors propagate; registry surfaces them as `unhealthy` rows.
|
|
48
|
+
*/
|
|
49
|
+
connect(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Discover the server's tool roster and project into agim ToolDef[].
|
|
52
|
+
* Applies `enabledTools` filter and the namespaced-name policy.
|
|
53
|
+
*/
|
|
54
|
+
listAvailableTools(): Promise<ToolDef[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Invoke a tool by either the namespaced or original name. Returns
|
|
57
|
+
* the concatenated text content + an isError flag (the MCP spec
|
|
58
|
+
* lets a tool succeed at the transport level while reporting a
|
|
59
|
+
* domain-level error; the agent loop should usually pass either
|
|
60
|
+
* back to the model so it can react).
|
|
61
|
+
*/
|
|
62
|
+
callTool(callName: string, args: Record<string, unknown>, opts?: {
|
|
63
|
+
signal?: AbortSignal;
|
|
64
|
+
}): Promise<ToolCallResult>;
|
|
65
|
+
/** Best-effort close. Idempotent. */
|
|
66
|
+
close(): Promise<void>;
|
|
67
|
+
private _resolveOriginalName;
|
|
68
|
+
}
|
|
69
|
+
/** Make sure the input schema is at least an object — MCP servers
|
|
70
|
+
* sometimes return undefined or a non-object for parameterless tools. */
|
|
71
|
+
export declare function _ensureObjectSchemaForTest(raw: unknown): Record<string, unknown>;
|
|
72
|
+
/**
|
|
73
|
+
* MCP tool results are `content: [{type, text, ...}, ...]`. Concatenate
|
|
74
|
+
* every `text` block into one string for the agent loop. Non-text
|
|
75
|
+
* blocks (image, resource) are stringified as `[image]` etc. so the
|
|
76
|
+
* model at least sees they were there; first-class image support
|
|
77
|
+
* lands when we wire vision providers.
|
|
78
|
+
*/
|
|
79
|
+
export declare function _aggregateTextContentForTest(content: unknown): string;
|
|
80
|
+
//# sourceMappingURL=mcp-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../../src/core/llm/mcp-client.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAMjD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnF;AAQD;;gEAEgE;AAChE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;qEACqE;AACrE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;GAIG;AACH,qBAAa,SAAS;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,MAAM,CAAsB;IAKpC,OAAO,CAAC,WAAW,CAAoE;gBAE3E,GAAG,EAAE,eAAe;IAMhC,uDAAuD;IACvD,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAgC9C;;;;;;OAMG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAqC7H,qCAAqC;IAC/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,CAAC,oBAAoB;CAW7B;AAmCD;0EAC0E;AAC1E,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhF;AASD;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAErE"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
// mcp-client — thin wrapper over @modelcontextprotocol/sdk for the
|
|
2
|
+
// native agent loop (Stage 2 sub-PR #2).
|
|
3
|
+
//
|
|
4
|
+
// What this file does:
|
|
5
|
+
// - One McpClient per configured server (stdio / sse / streamable-http)
|
|
6
|
+
// - connect(): instantiate the right transport + Client + handshake
|
|
7
|
+
// - listAvailableTools(): discover tools and expose them as agim's
|
|
8
|
+
// ToolDef[] with namespaced names (`mcp_{server}_{tool}`)
|
|
9
|
+
// - callTool(name, args): run a tool by namespaced or original name,
|
|
10
|
+
// return its text result. Wraps the SDK's untyped result in a
|
|
11
|
+
// simpler "text or error" string for the agent loop.
|
|
12
|
+
// - close(): graceful shutdown (used in cli.ts at process exit so we
|
|
13
|
+
// don't leave orphan stdio subprocesses)
|
|
14
|
+
//
|
|
15
|
+
// What this file deliberately does NOT do (yet):
|
|
16
|
+
// - Resource subscription (server -> client notifications). The
|
|
17
|
+
// agent loop in sub-PR #3 doesn't consume these.
|
|
18
|
+
// - MCP prompts as tools. Useful in nanobot's design but premature
|
|
19
|
+
// until we have a use case here.
|
|
20
|
+
// - Auto-reconnect on transport drop. The SDK does some of this
|
|
21
|
+
// internally; we let the caller (the agent loop) treat connect
|
|
22
|
+
// failures as "tool unavailable for this iteration" via the
|
|
23
|
+
// registry's `unhealthy` flag, then re-probe on subsequent ticks.
|
|
24
|
+
// - Schema normalisation for OpenAI's strict `tools[]` schema. The
|
|
25
|
+
// provider already passes input_schema verbatim; if a server emits
|
|
26
|
+
// an OpenAI-rejected variant (e.g. nullable union via `type: [s,n]`)
|
|
27
|
+
// the openai-compat provider will surface the API error. We can
|
|
28
|
+
// add normalisation later when we hit a real-world server that
|
|
29
|
+
// trips it.
|
|
30
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
31
|
+
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
32
|
+
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
33
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
34
|
+
import { logger as rootLogger } from '../logger.js';
|
|
35
|
+
const log = rootLogger.child({ component: 'mcp-client' });
|
|
36
|
+
const DEFAULT_TOOL_TIMEOUT_MS = 30_000;
|
|
37
|
+
/**
|
|
38
|
+
* Tool naming policy: `mcp_{server}_{tool}`. Avoids name collisions when
|
|
39
|
+
* two servers advertise the same tool name (common: every server has
|
|
40
|
+
* `read_file`). The original tool name is preserved on `originalName`
|
|
41
|
+
* so error messages stay legible and `enabledTools` filtering can match
|
|
42
|
+
* either form.
|
|
43
|
+
*/
|
|
44
|
+
export function _namespacedNameForTest(serverName, toolName) {
|
|
45
|
+
return namespacedName(serverName, toolName);
|
|
46
|
+
}
|
|
47
|
+
function namespacedName(serverName, toolName) {
|
|
48
|
+
const safeServer = serverName.replace(/[^A-Za-z0-9]+/g, '_');
|
|
49
|
+
const safeTool = toolName.replace(/[^A-Za-z0-9_]+/g, '_');
|
|
50
|
+
return `mcp_${safeServer}_${safeTool}`;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Wraps one MCP server connection. The caller (`mcp-registry.ts`)
|
|
54
|
+
* holds a Map<server-name, McpClient> and is responsible for lifecycle
|
|
55
|
+
* (connectAll at boot, closeAll on shutdown).
|
|
56
|
+
*/
|
|
57
|
+
export class McpClient {
|
|
58
|
+
name;
|
|
59
|
+
cfg;
|
|
60
|
+
toolTimeoutMs;
|
|
61
|
+
client = null;
|
|
62
|
+
// Cache the listTools() result so the agent loop doesn't pay the
|
|
63
|
+
// round-trip cost on every iteration. Servers that hot-reload tools
|
|
64
|
+
// mid-session would need an explicit refresh hook; punt until a real
|
|
65
|
+
// case appears.
|
|
66
|
+
cachedTools = null;
|
|
67
|
+
constructor(cfg) {
|
|
68
|
+
this.name = cfg.name;
|
|
69
|
+
this.cfg = cfg;
|
|
70
|
+
this.toolTimeoutMs = cfg.toolTimeoutMs ?? DEFAULT_TOOL_TIMEOUT_MS;
|
|
71
|
+
}
|
|
72
|
+
/** True once connect() has completed without error. */
|
|
73
|
+
isConnected() {
|
|
74
|
+
return this.client !== null;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Pick the right transport for the config and run the MCP handshake.
|
|
78
|
+
* Errors propagate; registry surfaces them as `unhealthy` rows.
|
|
79
|
+
*/
|
|
80
|
+
async connect() {
|
|
81
|
+
if (this.client)
|
|
82
|
+
return; // idempotent
|
|
83
|
+
const transport = buildTransport(this.cfg);
|
|
84
|
+
const client = new Client({ name: 'agim-mcp-client', version: '1' },
|
|
85
|
+
// capabilities — we don't advertise sampling / roots / elicitation
|
|
86
|
+
// yet; tools-only consumer.
|
|
87
|
+
{ capabilities: {} });
|
|
88
|
+
await client.connect(transport);
|
|
89
|
+
this.client = client;
|
|
90
|
+
log.info({
|
|
91
|
+
event: 'mcp.connected', server: this.name,
|
|
92
|
+
transport: classifyTransport(this.cfg),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Discover the server's tool roster and project into agim ToolDef[].
|
|
97
|
+
* Applies `enabledTools` filter and the namespaced-name policy.
|
|
98
|
+
*/
|
|
99
|
+
async listAvailableTools() {
|
|
100
|
+
if (!this.client)
|
|
101
|
+
throw new Error(`mcp-client[${this.name}]: not connected`);
|
|
102
|
+
if (this.cachedTools)
|
|
103
|
+
return this.cachedTools.full;
|
|
104
|
+
const resp = await this.client.listTools({});
|
|
105
|
+
// resp.tools shape per MCP spec: [{name, description?, inputSchema}]
|
|
106
|
+
const filter = this.cfg.enabledTools && this.cfg.enabledTools.length > 0
|
|
107
|
+
&& !(this.cfg.enabledTools.length === 1 && this.cfg.enabledTools[0] === '*')
|
|
108
|
+
? new Set(this.cfg.enabledTools)
|
|
109
|
+
: null;
|
|
110
|
+
const out = [];
|
|
111
|
+
const byCallName = new Map(); // namespaced -> original
|
|
112
|
+
for (const t of resp.tools) {
|
|
113
|
+
if (!t?.name)
|
|
114
|
+
continue;
|
|
115
|
+
const namespaced = namespacedName(this.name, t.name);
|
|
116
|
+
if (filter && !filter.has(t.name) && !filter.has(namespaced))
|
|
117
|
+
continue;
|
|
118
|
+
byCallName.set(namespaced, t.name);
|
|
119
|
+
out.push({
|
|
120
|
+
name: namespaced,
|
|
121
|
+
description: typeof t.description === 'string' ? t.description : '',
|
|
122
|
+
parameters: ensureObjectSchema(t.inputSchema),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
this.cachedTools = { full: out, byCallName };
|
|
126
|
+
log.info({
|
|
127
|
+
event: 'mcp.tools.listed', server: this.name,
|
|
128
|
+
count: out.length, filtered: filter !== null,
|
|
129
|
+
});
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Invoke a tool by either the namespaced or original name. Returns
|
|
134
|
+
* the concatenated text content + an isError flag (the MCP spec
|
|
135
|
+
* lets a tool succeed at the transport level while reporting a
|
|
136
|
+
* domain-level error; the agent loop should usually pass either
|
|
137
|
+
* back to the model so it can react).
|
|
138
|
+
*/
|
|
139
|
+
async callTool(callName, args, opts = {}) {
|
|
140
|
+
if (!this.client)
|
|
141
|
+
throw new Error(`mcp-client[${this.name}]: not connected`);
|
|
142
|
+
const originalName = this._resolveOriginalName(callName);
|
|
143
|
+
if (originalName === null) {
|
|
144
|
+
return { text: `unknown tool: ${callName}`, isError: true };
|
|
145
|
+
}
|
|
146
|
+
const t0 = Date.now();
|
|
147
|
+
try {
|
|
148
|
+
const resp = await this.client.callTool({ name: originalName, arguments: args }, undefined, {
|
|
149
|
+
timeout: this.toolTimeoutMs,
|
|
150
|
+
signal: opts.signal,
|
|
151
|
+
});
|
|
152
|
+
const text = aggregateTextContent(resp?.content);
|
|
153
|
+
const isError = Boolean(resp?.isError);
|
|
154
|
+
log.info({
|
|
155
|
+
event: 'mcp.tool.called',
|
|
156
|
+
server: this.name, tool: originalName,
|
|
157
|
+
elapsedMs: Date.now() - t0,
|
|
158
|
+
bytes: text.length, isError,
|
|
159
|
+
});
|
|
160
|
+
return { text, isError };
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
164
|
+
log.warn({
|
|
165
|
+
event: 'mcp.tool.failed',
|
|
166
|
+
server: this.name, tool: originalName,
|
|
167
|
+
elapsedMs: Date.now() - t0,
|
|
168
|
+
err: msg,
|
|
169
|
+
});
|
|
170
|
+
return { text: `mcp tool call failed: ${msg}`, isError: true };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/** Best-effort close. Idempotent. */
|
|
174
|
+
async close() {
|
|
175
|
+
if (!this.client)
|
|
176
|
+
return;
|
|
177
|
+
try {
|
|
178
|
+
await this.client.close();
|
|
179
|
+
}
|
|
180
|
+
catch { /* ignore */ }
|
|
181
|
+
this.client = null;
|
|
182
|
+
this.cachedTools = null;
|
|
183
|
+
}
|
|
184
|
+
_resolveOriginalName(callName) {
|
|
185
|
+
if (!this.cachedTools)
|
|
186
|
+
return null;
|
|
187
|
+
// First try namespaced (preferred); fall back to original (handy
|
|
188
|
+
// for human-driven /heartbeat run-now style debugging).
|
|
189
|
+
const mapped = this.cachedTools.byCallName.get(callName);
|
|
190
|
+
if (mapped)
|
|
191
|
+
return mapped;
|
|
192
|
+
for (const orig of this.cachedTools.byCallName.values()) {
|
|
193
|
+
if (orig === callName)
|
|
194
|
+
return orig;
|
|
195
|
+
}
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// ─── Transport factory ────────────────────────────────────────────────
|
|
200
|
+
function buildTransport(cfg) {
|
|
201
|
+
if (cfg.command) {
|
|
202
|
+
return new StdioClientTransport({
|
|
203
|
+
command: cfg.command,
|
|
204
|
+
args: cfg.args ?? [],
|
|
205
|
+
env: cfg.env,
|
|
206
|
+
cwd: cfg.cwd,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
if (cfg.url) {
|
|
210
|
+
const u = new URL(cfg.url);
|
|
211
|
+
if (cfg.url.endsWith('/sse')) {
|
|
212
|
+
return new SSEClientTransport(u, cfg.headers ? {
|
|
213
|
+
requestInit: { headers: cfg.headers },
|
|
214
|
+
} : undefined);
|
|
215
|
+
}
|
|
216
|
+
return new StreamableHTTPClientTransport(u, cfg.headers ? {
|
|
217
|
+
requestInit: { headers: cfg.headers },
|
|
218
|
+
} : undefined);
|
|
219
|
+
}
|
|
220
|
+
throw new Error(`mcp-client[${cfg.name}]: must set either command (stdio) or url (http/sse)`);
|
|
221
|
+
}
|
|
222
|
+
function classifyTransport(cfg) {
|
|
223
|
+
if (cfg.command)
|
|
224
|
+
return 'stdio';
|
|
225
|
+
if (cfg.url?.endsWith('/sse'))
|
|
226
|
+
return 'sse';
|
|
227
|
+
return 'streamableHttp';
|
|
228
|
+
}
|
|
229
|
+
// ─── Helpers ──────────────────────────────────────────────────────────
|
|
230
|
+
/** Make sure the input schema is at least an object — MCP servers
|
|
231
|
+
* sometimes return undefined or a non-object for parameterless tools. */
|
|
232
|
+
export function _ensureObjectSchemaForTest(raw) {
|
|
233
|
+
return ensureObjectSchema(raw);
|
|
234
|
+
}
|
|
235
|
+
function ensureObjectSchema(raw) {
|
|
236
|
+
if (raw && typeof raw === 'object' && !Array.isArray(raw)) {
|
|
237
|
+
return raw;
|
|
238
|
+
}
|
|
239
|
+
return { type: 'object', properties: {} };
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* MCP tool results are `content: [{type, text, ...}, ...]`. Concatenate
|
|
243
|
+
* every `text` block into one string for the agent loop. Non-text
|
|
244
|
+
* blocks (image, resource) are stringified as `[image]` etc. so the
|
|
245
|
+
* model at least sees they were there; first-class image support
|
|
246
|
+
* lands when we wire vision providers.
|
|
247
|
+
*/
|
|
248
|
+
export function _aggregateTextContentForTest(content) {
|
|
249
|
+
return aggregateTextContent(content);
|
|
250
|
+
}
|
|
251
|
+
function aggregateTextContent(content) {
|
|
252
|
+
if (!Array.isArray(content))
|
|
253
|
+
return '';
|
|
254
|
+
const out = [];
|
|
255
|
+
for (const block of content) {
|
|
256
|
+
if (!block || typeof block !== 'object')
|
|
257
|
+
continue;
|
|
258
|
+
if (block.type === 'text' && typeof block.text === 'string') {
|
|
259
|
+
out.push(block.text);
|
|
260
|
+
}
|
|
261
|
+
else if (block.type === 'image') {
|
|
262
|
+
out.push('[image]');
|
|
263
|
+
}
|
|
264
|
+
else if (block.type === 'resource' || block.type === 'resource_link') {
|
|
265
|
+
out.push('[resource]');
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return out.join('');
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=mcp-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../../src/core/llm/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type ToolCallResult } from './mcp-client.js';
|
|
2
|
+
import type { ToolDef } from './provider-base.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build McpClient instances from config. Idempotent — repeated calls
|
|
5
|
+
* fully replace the previous state (any open connections are closed
|
|
6
|
+
* first via closeAll).
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadFromConfig(cfg: {
|
|
9
|
+
mcpServers?: unknown;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Connect every registered client. Failures are recorded in
|
|
13
|
+
* `state.unhealthy` so a broken server doesn't poison the startup
|
|
14
|
+
* sequence. Returns a summary so callers (cli.ts boot log) can print
|
|
15
|
+
* something useful.
|
|
16
|
+
*/
|
|
17
|
+
export declare function connectAll(): Promise<{
|
|
18
|
+
ok: string[];
|
|
19
|
+
failed: Record<string, string>;
|
|
20
|
+
toolCount: number;
|
|
21
|
+
}>;
|
|
22
|
+
/** All tools across every connected client. Safe to call before
|
|
23
|
+
* connectAll (returns []). The order is insertion order of the
|
|
24
|
+
* mcpServers config — useful for the web UI listing. */
|
|
25
|
+
export declare function getAllTools(): ToolDef[];
|
|
26
|
+
/** Look up which server owns a given namespaced tool name. */
|
|
27
|
+
export declare function getOwningServer(callName: string): string | null;
|
|
28
|
+
/**
|
|
29
|
+
* Dispatch a tool call to the right client. Returns a "tool unknown"
|
|
30
|
+
* error result rather than throwing; the agent loop converts that into
|
|
31
|
+
* a `{role:'tool', isError:true}` message so the model can recover.
|
|
32
|
+
*/
|
|
33
|
+
export declare function callToolByName(callName: string, args: Record<string, unknown>, opts?: {
|
|
34
|
+
signal?: AbortSignal;
|
|
35
|
+
}): Promise<ToolCallResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Snapshot for cli.ts boot log + future web UI. Reports server count,
|
|
38
|
+
* total advertised tools, and which servers are unhealthy.
|
|
39
|
+
*/
|
|
40
|
+
export declare function describeRegistry(): {
|
|
41
|
+
servers: Array<{
|
|
42
|
+
name: string;
|
|
43
|
+
connected: boolean;
|
|
44
|
+
toolCount: number;
|
|
45
|
+
error?: string;
|
|
46
|
+
}>;
|
|
47
|
+
totalTools: number;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Close every client connection. Idempotent — safe to call from
|
|
51
|
+
* graceful shutdown paths even when nothing is connected.
|
|
52
|
+
*/
|
|
53
|
+
export declare function closeAll(): Promise<void>;
|
|
54
|
+
/** Test-only: clear without close. Use only in test setups where the
|
|
55
|
+
* real clients were never instantiated. */
|
|
56
|
+
export declare function _resetRegistry(): void;
|
|
57
|
+
//# sourceMappingURL=mcp-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-registry.d.ts","sourceRoot":"","sources":["../../../src/core/llm/mcp-registry.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAmC,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAoBjD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBjF;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA2B/G;AAED;;yDAEyD;AACzD,wBAAgB,WAAW,IAAI,OAAO,EAAE,CAEvC;AAED,8DAA8D;AAC9D,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAClC,OAAO,CAAC,cAAc,CAAC,CAazB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI;IAClC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvF,UAAU,EAAE,MAAM,CAAA;CACnB,CAaA;AAED;;;GAGG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAI9C;AAED;4CAC4C;AAC5C,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|