agim-cli 1.2.45 → 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/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-Cdl8iY0e.js → a2a-Mke0F7ZM.js} +3 -3
- package/dist/web/public/assets/{a2a-Cdl8iY0e.js.map → a2a-Mke0F7ZM.js.map} +1 -1
- package/dist/web/public/assets/{activity-DXahuK1C.js → activity-0zGnf1_m.js} +2 -2
- package/dist/web/public/assets/{activity-DXahuK1C.js.map → activity-0zGnf1_m.js.map} +1 -1
- package/dist/web/public/assets/{admins-C8fJsuHC.js → admins-DSi3KRky.js} +3 -3
- package/dist/web/public/assets/{admins-C8fJsuHC.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-CpyL90ef.js → approvals-Cu_JdM-8.js} +3 -3
- package/dist/web/public/assets/{approvals-CpyL90ef.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-DDqpiC3z.js → audit-2EVhhvGV.js} +2 -2
- package/dist/web/public/assets/{audit-DDqpiC3z.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-CAFV-I4I.js → bgjobs-DXROZFAW.js} +2 -2
- package/dist/web/public/assets/{bgjobs-CAFV-I4I.js.map → bgjobs-DXROZFAW.js.map} +1 -1
- package/dist/web/public/assets/{brain-CJyZe3Oa.js → brain-Dh5VOzRL.js} +2 -2
- package/dist/web/public/assets/{brain-CJyZe3Oa.js.map → brain-Dh5VOzRL.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-DcLbQF2I.js → briefcase-DfxbvM9i.js} +2 -2
- package/dist/web/public/assets/{briefcase-DcLbQF2I.js.map → briefcase-DfxbvM9i.js.map} +1 -1
- package/dist/web/public/assets/{chevron-right-BhKELKvM.js → chevron-right-DU8Xla1M.js} +2 -2
- package/dist/web/public/assets/{chevron-right-BhKELKvM.js.map → chevron-right-DU8Xla1M.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-D1qST9RS.js → circle-check-Be_S993G.js} +2 -2
- package/dist/web/public/assets/{circle-check-D1qST9RS.js.map → circle-check-Be_S993G.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-EKe3o9y1.js → circle-check-big-CsQkLR1u.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-EKe3o9y1.js.map → circle-check-big-CsQkLR1u.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-DtePUX5x.js → circle-x-qkQu1Swu.js} +2 -2
- package/dist/web/public/assets/{circle-x-DtePUX5x.js.map → circle-x-qkQu1Swu.js.map} +1 -1
- package/dist/web/public/assets/{confirm-dialog-CCfCf6BG.js → confirm-dialog-Bm6MsLXZ.js} +2 -2
- package/dist/web/public/assets/{confirm-dialog-CCfCf6BG.js.map → confirm-dialog-Bm6MsLXZ.js.map} +1 -1
- package/dist/web/public/assets/{data-table-BRLUxacD.js → data-table-Dw4Df09-.js} +5 -5
- package/dist/web/public/assets/{data-table-BRLUxacD.js.map → data-table-Dw4Df09-.js.map} +1 -1
- package/dist/web/public/assets/{dialog-By4YA8bm.js → dialog-CNsc4COh.js} +3 -3
- package/dist/web/public/assets/{dialog-By4YA8bm.js.map → dialog-CNsc4COh.js.map} +1 -1
- package/dist/web/public/assets/{download-CiTB2sCh.js → download-Bnhk_vDY.js} +2 -2
- package/dist/web/public/assets/{download-CiTB2sCh.js.map → download-Bnhk_vDY.js.map} +1 -1
- package/dist/web/public/assets/{email-H-b2AExg.js → email-jgAX8liM.js} +3 -3
- package/dist/web/public/assets/{email-H-b2AExg.js.map → email-jgAX8liM.js.map} +1 -1
- package/dist/web/public/assets/{empty-state-DZJTUlvz.js → empty-state-D8QXQ5y9.js} +2 -2
- package/dist/web/public/assets/{empty-state-DZJTUlvz.js.map → empty-state-D8QXQ5y9.js.map} +1 -1
- package/dist/web/public/assets/{external-link-CfU6Rttn.js → external-link-C8AYvhBb.js} +2 -2
- package/dist/web/public/assets/{external-link-CfU6Rttn.js.map → external-link-C8AYvhBb.js.map} +1 -1
- package/dist/web/public/assets/{eye-BvWcd0pJ.js → eye-pmI_4E8x.js} +4 -4
- package/dist/web/public/assets/{eye-BvWcd0pJ.js.map → eye-pmI_4E8x.js.map} +1 -1
- package/dist/web/public/assets/{facts-BRDbQLSI.js → facts-BRHLLX2u.js} +2 -2
- package/dist/web/public/assets/{facts-BRDbQLSI.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-DJPFOiKw.js → health-CuGIXg8C.js} +2 -2
- package/dist/web/public/assets/{health-DJPFOiKw.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-DdWaBgOh.js → jobs-kwOypiWd.js} +2 -2
- package/dist/web/public/assets/{jobs-DdWaBgOh.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-Dr12u0W_.js → layout-CbHxH58i.js} +2 -2
- package/dist/web/public/assets/{layout-Dr12u0W_.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-BybpkTy0.js → layout-s11iwkL-.js} +2 -2
- package/dist/web/public/assets/{layout-BybpkTy0.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-BiR4Xs-3.js → loader-circle-DymEG5Cl.js} +2 -2
- package/dist/web/public/assets/{loader-circle-BiR4Xs-3.js.map → loader-circle-DymEG5Cl.js.map} +1 -1
- package/dist/web/public/assets/{map-pin-B8hea8yW.js → map-pin-CyZg1-Jk.js} +2 -2
- package/dist/web/public/assets/{map-pin-B8hea8yW.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-C0_I1Uzt.js → memos-Bsiq64qW.js} +2 -2
- package/dist/web/public/assets/{memos-C0_I1Uzt.js.map → memos-Bsiq64qW.js.map} +1 -1
- package/dist/web/public/assets/{messengers-DuS5_JlE.js → messengers-alGJK9dO.js} +3 -3
- package/dist/web/public/assets/{messengers-DuS5_JlE.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-CpkocMHV.js → network-BSRJfeGk.js} +2 -2
- package/dist/web/public/assets/{network-CpkocMHV.js.map → network-BSRJfeGk.js.map} +1 -1
- package/dist/web/public/assets/{outbox-mGqTV2Ex.js → outbox-DSDls9xU.js} +3 -3
- package/dist/web/public/assets/{outbox-mGqTV2Ex.js.map → outbox-DSDls9xU.js.map} +1 -1
- package/dist/web/public/assets/{pagination-BAYvy11u.js → pagination-DVXNZ2ti.js} +3 -3
- package/dist/web/public/assets/{pagination-BAYvy11u.js.map → pagination-DVXNZ2ti.js.map} +1 -1
- package/dist/web/public/assets/{persona-CM0TLPJa.js → persona-BB1gIwTX.js} +2 -2
- package/dist/web/public/assets/{persona-CM0TLPJa.js.map → persona-BB1gIwTX.js.map} +1 -1
- package/dist/web/public/assets/{play-DMgMpe7N.js → play-CcECAHfL.js} +2 -2
- package/dist/web/public/assets/{play-DMgMpe7N.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-Ch-xirrA.js.map → policy-BgDYTxy7.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw-D8mc4hxU.js → refresh-ccw-BBRPVLH8.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw-D8mc4hxU.js.map → refresh-ccw-BBRPVLH8.js.map} +1 -1
- package/dist/web/public/assets/{reminders-Dbe7Rc4h.js → reminders-jwy196Xw.js} +4 -9
- package/dist/web/public/assets/reminders-jwy196Xw.js.map +1 -0
- package/dist/web/public/assets/{save-1aALBaZc.js → save-iBtyruco.js} +2 -2
- package/dist/web/public/assets/{save-1aALBaZc.js.map → save-iBtyruco.js.map} +1 -1
- package/dist/web/public/assets/{schedules-BBQ2wcnS.js → schedules-DDl_Sr5r.js} +3 -3
- package/dist/web/public/assets/{schedules-BBQ2wcnS.js.map → schedules-DDl_Sr5r.js.map} +1 -1
- package/dist/web/public/assets/{search-DDYjsJ7-.js → search-Yb1S22sv.js} +2 -2
- package/dist/web/public/assets/{search-DDYjsJ7-.js.map → search-Yb1S22sv.js.map} +1 -1
- package/dist/web/public/assets/{service-DMp11TKF.js → service-jrg0kMtK.js} +3 -3
- package/dist/web/public/assets/{service-DMp11TKF.js.map → service-jrg0kMtK.js.map} +1 -1
- package/dist/web/public/assets/{status-badge-Cvj81JKi.js → status-badge-Arxyw3TL.js} +2 -2
- package/dist/web/public/assets/{status-badge-Cvj81JKi.js.map → status-badge-Arxyw3TL.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-BC3Pf7OZ.js → subtasks-CkyuMv_X.js} +3 -3
- package/dist/web/public/assets/{subtasks-BC3Pf7OZ.js.map → subtasks-CkyuMv_X.js.map} +1 -1
- package/dist/web/public/assets/{table-B6nK6k3L.js → table-BKdG9tsY.js} +2 -2
- package/dist/web/public/assets/{table-B6nK6k3L.js.map → table-BKdG9tsY.js.map} +1 -1
- package/dist/web/public/assets/{topn-BwFh2jKv.js → topn-BpX8BKWS.js} +3 -3
- package/dist/web/public/assets/{topn-BwFh2jKv.js.map → topn-BpX8BKWS.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-CqpMjbu5.js → trash-2-DxKJo_-6.js} +3 -3
- package/dist/web/public/assets/{trash-2-CqpMjbu5.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-jxZdt-RL.js → use-memory-Cqf3xywK.js} +2 -2
- package/dist/web/public/assets/{use-memory-jxZdt-RL.js.map → use-memory-Cqf3xywK.js.map} +1 -1
- package/dist/web/public/assets/{use-observability-9TDgLO9y.js → use-observability-Thh7LWoE.js} +2 -2
- package/dist/web/public/assets/{use-observability-9TDgLO9y.js.map → use-observability-Thh7LWoE.js.map} +1 -1
- package/dist/web/public/assets/{use-settings-DFB_c2pr.js → use-settings-DRhH8owt.js} +2 -2
- package/dist/web/public/assets/{use-settings-DFB_c2pr.js.map → use-settings-DRhH8owt.js.map} +1 -1
- package/dist/web/public/assets/{use-workspace-C-Eg6yWa.js → use-workspace-iLKz-h_7.js} +2 -2
- package/dist/web/public/assets/{use-workspace-C-Eg6yWa.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-rLmHxFp4.js.map → useQuery-gnz30xMJ.js.map} +1 -1
- package/dist/web/public/assets/{vector-D9UqmLi6.js → vector-COjljy_4.js} +2 -2
- package/dist/web/public/assets/{vector-D9UqmLi6.js.map → vector-COjljy_4.js.map} +1 -1
- package/dist/web/public/assets/{viewer-_OpObeWr.js → viewer-AQHSc8hZ.js} +3 -3
- package/dist/web/public/assets/{viewer-_OpObeWr.js.map → viewer-AQHSc8hZ.js.map} +1 -1
- package/dist/web/public/assets/{workspace-DSHRdspq.js → workspace-DRtSCbx5.js} +4 -4
- package/dist/web/public/assets/{workspace-DSHRdspq.js.map → workspace-DRtSCbx5.js.map} +1 -1
- package/dist/web/public/assets/{workspaces-CsBdhbXz.js → workspaces-BLR5ZBu6.js} +3 -3
- package/dist/web/public/assets/{workspaces-CsBdhbXz.js.map → workspaces-BLR5ZBu6.js.map} +1 -1
- package/dist/web/public/assets/{x-D1re-vBd.js → x-DGQ0qjhc.js} +2 -2
- package/dist/web/public/assets/{x-D1re-vBd.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-lrzFDGgX.js +0 -12
- package/dist/web/public/assets/agents-lrzFDGgX.js.map +0 -1
- package/dist/web/public/assets/hot-CFGHGkqL.js +0 -17
- package/dist/web/public/assets/hot-CFGHGkqL.js.map +0 -1
- package/dist/web/public/assets/index-C4hk1i67.js +0 -166
- package/dist/web/public/assets/index-C4hk1i67.js.map +0 -1
- package/dist/web/public/assets/index-Cvacw7Jg.css +0 -1
- package/dist/web/public/assets/installed-UONWfKHS.js +0 -7
- package/dist/web/public/assets/installed-UONWfKHS.js.map +0 -1
- package/dist/web/public/assets/layout-C8_IQRGM.js +0 -2
- package/dist/web/public/assets/layout-C8_IQRGM.js.map +0 -1
- package/dist/web/public/assets/layout-CxRHLqvi.js +0 -2
- package/dist/web/public/assets/layout-CxRHLqvi.js.map +0 -1
- package/dist/web/public/assets/layout-LC5zjw1h.js +0 -2
- package/dist/web/public/assets/layout-LC5zjw1h.js.map +0 -1
- package/dist/web/public/assets/policy-Ch-xirrA.js +0 -2
- package/dist/web/public/assets/reminders-Dbe7Rc4h.js.map +0 -1
- package/dist/web/public/assets/use-skills-OZKB5x-S.js +0 -2
- package/dist/web/public/assets/use-skills-OZKB5x-S.js.map +0 -1
- package/dist/web/public/assets/useQuery-rLmHxFp4.js +0 -2
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
// builtin-dispatcher — safe-by-default tools the native agent can call
|
|
2
|
+
// without spinning up an MCP server (Stage 2 sub-PR #4).
|
|
3
|
+
//
|
|
4
|
+
// Scope of "safe":
|
|
5
|
+
// - read-only or trivially-reversible
|
|
6
|
+
// - no network, no filesystem mutation, no shell
|
|
7
|
+
// - bounded execution time so a model loop can't burn budget here
|
|
8
|
+
//
|
|
9
|
+
// Concrete tools shipped in this initial cut:
|
|
10
|
+
// * native_echo(text) → return the text verbatim. Useful
|
|
11
|
+
// for the model to confirm it heard
|
|
12
|
+
// a piece of input, and for tests.
|
|
13
|
+
// * native_now() → ISO timestamp + Asia/Shanghai
|
|
14
|
+
// offset. Honors IMHUB_TZ_OFFSET_HOURS.
|
|
15
|
+
// * native_sleep_ms(ms, ≤ 5000) → pause for the requested ms; lets
|
|
16
|
+
// the model deliberately yield in
|
|
17
|
+
// tests / rate-limit shimming. Hard
|
|
18
|
+
// capped to 5s.
|
|
19
|
+
// * native_random_uuid() → fresh v4 UUID. Trivial but the
|
|
20
|
+
// agent occasionally needs a stable
|
|
21
|
+
// id without inventing one.
|
|
22
|
+
//
|
|
23
|
+
// These are intentionally tiny + boring. The whole point is for the
|
|
24
|
+
// native loop to have *something* to call when no MCP server is wired,
|
|
25
|
+
// so demos / tests / the smoke-test path all work end-to-end. Anything
|
|
26
|
+
// non-trivial (read_file / web_search / exec) belongs in an MCP server
|
|
27
|
+
// where ops can audit + sandbox properly.
|
|
28
|
+
import { randomUUID } from 'node:crypto';
|
|
29
|
+
import { logger as rootLogger } from '../logger.js';
|
|
30
|
+
const log = rootLogger.child({ component: 'builtin-dispatcher' });
|
|
31
|
+
const MAX_SLEEP_MS = 5_000;
|
|
32
|
+
/** Definitions advertised to the LLM. Returned by `getBuiltinTools()`
|
|
33
|
+
* so callers can concat with MCP tools and pass the union to runAgentLoop. */
|
|
34
|
+
export function getBuiltinTools() {
|
|
35
|
+
return [
|
|
36
|
+
{
|
|
37
|
+
name: 'native_echo',
|
|
38
|
+
description: 'Return the text argument verbatim. Useful when the model needs to confirm what it received, or to log a checkpoint.',
|
|
39
|
+
parameters: {
|
|
40
|
+
type: 'object',
|
|
41
|
+
properties: {
|
|
42
|
+
text: { type: 'string', description: 'Text to echo back.' },
|
|
43
|
+
},
|
|
44
|
+
required: ['text'],
|
|
45
|
+
additionalProperties: false,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'native_now',
|
|
50
|
+
description: 'Return the current local time as ISO 8601 plus the agim-configured timezone offset (default Asia/Shanghai, override via IMHUB_TZ_OFFSET_HOURS).',
|
|
51
|
+
parameters: {
|
|
52
|
+
type: 'object',
|
|
53
|
+
properties: {},
|
|
54
|
+
additionalProperties: false,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'native_sleep_ms',
|
|
59
|
+
description: 'Pause for the requested number of milliseconds (max 5000). Useful for deliberate yielding; never use to "wait for data" — call the right tool instead.',
|
|
60
|
+
parameters: {
|
|
61
|
+
type: 'object',
|
|
62
|
+
properties: {
|
|
63
|
+
ms: { type: 'number', description: 'Milliseconds to sleep. Clamped to [0, 5000].' },
|
|
64
|
+
},
|
|
65
|
+
required: ['ms'],
|
|
66
|
+
additionalProperties: false,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'native_random_uuid',
|
|
71
|
+
description: 'Generate a fresh random v4 UUID.',
|
|
72
|
+
parameters: {
|
|
73
|
+
type: 'object',
|
|
74
|
+
properties: {},
|
|
75
|
+
additionalProperties: false,
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
/** True iff `name` is one of the builtin tool names. Cheap O(1) check
|
|
81
|
+
* the dispatcher uses to decide whether to handle vs pass through. */
|
|
82
|
+
export function isBuiltinToolName(name) {
|
|
83
|
+
switch (name) {
|
|
84
|
+
case 'native_echo':
|
|
85
|
+
case 'native_now':
|
|
86
|
+
case 'native_sleep_ms':
|
|
87
|
+
case 'native_random_uuid':
|
|
88
|
+
return true;
|
|
89
|
+
default:
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Build the built-in dispatcher. Returns a ToolDispatcher compatible
|
|
95
|
+
* with combineDispatchers — i.e. an unknown tool name yields a
|
|
96
|
+
* `{source:'unknown'}` result so the next dispatcher in the chain gets
|
|
97
|
+
* a turn. Combine like this:
|
|
98
|
+
*
|
|
99
|
+
* const dispatch = combineDispatchers(
|
|
100
|
+
* buildBuiltinDispatcher(),
|
|
101
|
+
* buildMcpDispatcher(),
|
|
102
|
+
* )
|
|
103
|
+
*/
|
|
104
|
+
export function buildBuiltinDispatcher() {
|
|
105
|
+
return async (call, signal) => {
|
|
106
|
+
switch (call.name) {
|
|
107
|
+
case 'native_echo':
|
|
108
|
+
return runEcho(call.arguments);
|
|
109
|
+
case 'native_now':
|
|
110
|
+
return runNow();
|
|
111
|
+
case 'native_sleep_ms':
|
|
112
|
+
return runSleep(call.arguments, signal);
|
|
113
|
+
case 'native_random_uuid':
|
|
114
|
+
return runRandomUuid();
|
|
115
|
+
default:
|
|
116
|
+
return {
|
|
117
|
+
text: `unknown tool "${call.name}" (not in builtin set)`,
|
|
118
|
+
isError: true,
|
|
119
|
+
source: 'unknown',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// ─── tool impls ──────────────────────────────────────────────────────
|
|
125
|
+
function runEcho(args) {
|
|
126
|
+
const text = typeof args.text === 'string' ? args.text : '';
|
|
127
|
+
return { text, isError: false, source: 'builtin' };
|
|
128
|
+
}
|
|
129
|
+
function runNow() {
|
|
130
|
+
const offsetHours = resolveTzOffsetHours();
|
|
131
|
+
const now = new Date();
|
|
132
|
+
// Build the offset string ourselves so we don't pull in a TZ DB.
|
|
133
|
+
const sign = offsetHours >= 0 ? '+' : '-';
|
|
134
|
+
const absHours = Math.abs(offsetHours);
|
|
135
|
+
const hh = Math.floor(absHours).toString().padStart(2, '0');
|
|
136
|
+
const mm = Math.round((absHours - Math.floor(absHours)) * 60).toString().padStart(2, '0');
|
|
137
|
+
const offsetStr = `UTC${sign}${hh}:${mm}`;
|
|
138
|
+
// Apply the offset to the UTC clock to get the wall-clock string in
|
|
139
|
+
// the operator's chosen zone. This is intentionally NOT a JS Date
|
|
140
|
+
// mutation (which would imply a real timezone); it's just a display.
|
|
141
|
+
const shifted = new Date(now.getTime() + offsetHours * 3600_000);
|
|
142
|
+
const local = shifted.toISOString().replace(/Z$/, '');
|
|
143
|
+
return {
|
|
144
|
+
text: JSON.stringify({
|
|
145
|
+
utc: now.toISOString(),
|
|
146
|
+
local,
|
|
147
|
+
offset: offsetStr,
|
|
148
|
+
}),
|
|
149
|
+
isError: false,
|
|
150
|
+
source: 'builtin',
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async function runSleep(args, signal) {
|
|
154
|
+
const raw = typeof args.ms === 'number' ? args.ms : Number(args.ms);
|
|
155
|
+
if (!Number.isFinite(raw)) {
|
|
156
|
+
return { text: 'ms must be a number', isError: true, source: 'builtin' };
|
|
157
|
+
}
|
|
158
|
+
const ms = Math.max(0, Math.min(MAX_SLEEP_MS, Math.floor(raw)));
|
|
159
|
+
try {
|
|
160
|
+
await new Promise((resolve, reject) => {
|
|
161
|
+
if (signal.aborted) {
|
|
162
|
+
reject(signal.reason ?? new Error('aborted'));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const t = setTimeout(() => {
|
|
166
|
+
signal.removeEventListener('abort', onAbort);
|
|
167
|
+
resolve();
|
|
168
|
+
}, ms);
|
|
169
|
+
const onAbort = () => {
|
|
170
|
+
clearTimeout(t);
|
|
171
|
+
reject(signal.reason ?? new Error('aborted'));
|
|
172
|
+
};
|
|
173
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
174
|
+
});
|
|
175
|
+
return { text: `slept ${ms}ms`, isError: false, source: 'builtin' };
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
179
|
+
log.debug({ event: 'builtin.sleep.aborted', err: msg });
|
|
180
|
+
return { text: `sleep aborted after partial wait: ${msg}`, isError: true, source: 'builtin' };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function runRandomUuid() {
|
|
184
|
+
return { text: randomUUID(), isError: false, source: 'builtin' };
|
|
185
|
+
}
|
|
186
|
+
// ─── helpers ─────────────────────────────────────────────────────────
|
|
187
|
+
function resolveTzOffsetHours() {
|
|
188
|
+
const raw = process.env.IMHUB_TZ_OFFSET_HOURS;
|
|
189
|
+
if (raw) {
|
|
190
|
+
const n = Number(raw);
|
|
191
|
+
if (Number.isFinite(n) && n >= -14 && n <= 14)
|
|
192
|
+
return n;
|
|
193
|
+
}
|
|
194
|
+
return 8; // Asia/Shanghai default — matches the rest of agim
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=builtin-dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-dispatcher.js","sourceRoot":"","sources":["../../../src/core/llm/builtin-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { logger as rootLogger } from '../logger.js';
|
|
2
|
+
import type { ToolDispatcher } from './tool-dispatcher.js';
|
|
3
|
+
import type { ToolDef } from './provider-base.js';
|
|
4
|
+
/** Per-turn caller identity. Matches the subset of `RunContext` the
|
|
5
|
+
* agim RPC handlers consume + the optional `agent` for A2A self-call
|
|
6
|
+
* detection. */
|
|
7
|
+
export interface ImhubDispatcherCtx {
|
|
8
|
+
platform: string;
|
|
9
|
+
channelId: string;
|
|
10
|
+
threadId: string;
|
|
11
|
+
userId: string;
|
|
12
|
+
/** Calling agent name. A2A uses this to reject self-calls. */
|
|
13
|
+
callerAgent: string;
|
|
14
|
+
/** Optional pino-compatible logger for the RouteContext A2A needs. */
|
|
15
|
+
logger?: typeof rootLogger;
|
|
16
|
+
/** Optional A2A depth — defaults to 0 for native-originated calls. */
|
|
17
|
+
callerDepth?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Tool roster the LLM sees. JSON Schemas are kept terse — they match
|
|
21
|
+
* the RPC handlers' real expectations without copying claude-code's
|
|
22
|
+
* MCP server's full prose docstrings, which can grow to multi-KB.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getImhubTools(): ToolDef[];
|
|
25
|
+
/** Build a dispatcher closure over the per-turn IM context. */
|
|
26
|
+
export declare function buildImhubDispatcher(ctx: ImhubDispatcherCtx): ToolDispatcher;
|
|
27
|
+
//# sourceMappingURL=imhub-dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imhub-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/llm/imhub-dispatcher.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,sBAAsB,CAAA;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAUjD;;iBAEiB;AACjB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAA;IACnB,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,UAAU,CAAA;IAC1B,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AA4BD;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,EAAE,CAoIzC;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,GAAG,cAAc,CAmG5E"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
// imhub-dispatcher — wires agim's internal RPC handlers (skills /
|
|
2
|
+
// memo / push / ask-user / a2a) into the native LLM agent loop so a
|
|
3
|
+
// `native` adapter call can invoke `mcp__imhub__read_skill` etc. with
|
|
4
|
+
// the exact same wire shape claude-code's MCP sidecar exposes to
|
|
5
|
+
// `claude-code` / `codex` / `opencode`.
|
|
6
|
+
//
|
|
7
|
+
// Why this file exists
|
|
8
|
+
// --------------------
|
|
9
|
+
// `mcp-client.ts` in this directory only handles operator-configured
|
|
10
|
+
// external MCP servers (stdio / sse / streamable-http). The "imhub"
|
|
11
|
+
// tools (read_skill, save_memo, ask_user, push_message, call_agent…)
|
|
12
|
+
// live inside the agim process and historically were only reachable
|
|
13
|
+
// via the claude-code MCP sidecar process. Before this file, a native
|
|
14
|
+
// agent could only call the four `native_*` built-ins (echo, now,
|
|
15
|
+
// sleep, random_uuid) — it couldn't read its own skills, save a
|
|
16
|
+
// memo, or hand off to claude-code via call_agent.
|
|
17
|
+
//
|
|
18
|
+
// What this file does
|
|
19
|
+
// -------------------
|
|
20
|
+
// 1. `getImhubTools()` returns the `ToolDef[]` to advertise to the
|
|
21
|
+
// LLM, all named `mcp__imhub__<op>` so the LLM and downstream
|
|
22
|
+
// audit observers see the same tool naming as the claude-code MCP
|
|
23
|
+
// surface.
|
|
24
|
+
// 2. `buildImhubDispatcher(ctx)` returns a `ToolDispatcher` that
|
|
25
|
+
// receives a per-IM-turn `RunContext`-equivalent (closure) and
|
|
26
|
+
// routes each call into the corresponding RPC handler.
|
|
27
|
+
//
|
|
28
|
+
// Tool naming uses double-underscore (`mcp__imhub__read_skill`) to
|
|
29
|
+
// stay byte-identical to the claude-code MCP-server-emitted names —
|
|
30
|
+
// log greps, audit dashboards, and policy gates configured against
|
|
31
|
+
// the claude-code surface keep matching when native is in use.
|
|
32
|
+
//
|
|
33
|
+
// Anything the dispatcher doesn't recognise returns
|
|
34
|
+
// `source: 'unknown'` so `combineDispatchers(builtin, imhub, mcp)`
|
|
35
|
+
// can fall through to the next layer (external MCP servers).
|
|
36
|
+
import { logger as rootLogger } from '../logger.js';
|
|
37
|
+
import { handleSkillsOp } from '../skills-rpc.js';
|
|
38
|
+
import { handleMemoOp } from '../memo-rpc.js';
|
|
39
|
+
import { handlePushOp } from '../push-rpc.js';
|
|
40
|
+
import { handleAskOp } from '../ask-user-rpc.js';
|
|
41
|
+
import { callAgentByName } from '../a2a.js';
|
|
42
|
+
const log = rootLogger.child({ component: 'imhub-dispatcher' });
|
|
43
|
+
function safeJson(v) {
|
|
44
|
+
try {
|
|
45
|
+
return JSON.stringify(v, null, 2);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return String(v);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function ok(text) {
|
|
52
|
+
return { text, isError: false, source: 'imhub' };
|
|
53
|
+
}
|
|
54
|
+
function err(text) {
|
|
55
|
+
return { text, isError: true, source: 'imhub' };
|
|
56
|
+
}
|
|
57
|
+
function unknown(name) {
|
|
58
|
+
// matches builtin-dispatcher's marker so combineDispatchers falls
|
|
59
|
+
// through to the next dispatcher in the stack.
|
|
60
|
+
return {
|
|
61
|
+
text: `imhub-dispatcher: no handler for "${name}"`,
|
|
62
|
+
isError: true,
|
|
63
|
+
source: 'unknown',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Tool roster the LLM sees. JSON Schemas are kept terse — they match
|
|
68
|
+
* the RPC handlers' real expectations without copying claude-code's
|
|
69
|
+
* MCP server's full prose docstrings, which can grow to multi-KB.
|
|
70
|
+
*/
|
|
71
|
+
export function getImhubTools() {
|
|
72
|
+
return [
|
|
73
|
+
{
|
|
74
|
+
name: 'mcp__imhub__read_skill',
|
|
75
|
+
description: 'Read the full body of one agim skill (a markdown reference card maintained by the operator). The skill summary is already injected into the system prompt; call this when you need the full text (examples, exact slash command syntax, gotchas).',
|
|
76
|
+
parameters: {
|
|
77
|
+
type: 'object',
|
|
78
|
+
properties: {
|
|
79
|
+
name: { type: 'string', description: 'Skill name as shown in the system prompt list, e.g. "agim-self".' },
|
|
80
|
+
},
|
|
81
|
+
required: ['name'],
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: 'mcp__imhub__list_skills',
|
|
86
|
+
description: 'Enumerate every skill currently available to this agim install (name + one-line description). Cheap; use it instead of guessing what skill names exist.',
|
|
87
|
+
parameters: { type: 'object', properties: {} },
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'mcp__imhub__save_memo',
|
|
91
|
+
description: 'Record any kind of memo for the user (5W1H). Extract `what` (required), plus `who`, `when_at` / `when_text`, `where_lat`/`where_lng`/`where_label` or `address`, `how`, `why`, `memo` (full original phrasing) from the user message. Defaults to permanent storage; pass `expires_in_hours` for transient notes. All times Asia/Shanghai (UTC+8) format "YYYY-MM-DD HH:MM:SS".',
|
|
92
|
+
parameters: {
|
|
93
|
+
type: 'object',
|
|
94
|
+
properties: {
|
|
95
|
+
what: { type: 'string', description: 'Core thing being recorded (REQUIRED, ≤200 chars).' },
|
|
96
|
+
who: { type: 'string' },
|
|
97
|
+
when_at: { type: 'string', description: 'UTC+8 datetime "YYYY-MM-DD HH:MM:SS".' },
|
|
98
|
+
when_text: { type: 'string', description: 'Raw user phrase if when_at not parseable.' },
|
|
99
|
+
where_lat: { type: 'number' },
|
|
100
|
+
where_lng: { type: 'number' },
|
|
101
|
+
where_label: { type: 'string' },
|
|
102
|
+
address: { type: 'string', description: 'Free-text address; server geocodes when lat/lng absent.' },
|
|
103
|
+
how: { type: 'string' },
|
|
104
|
+
why: { type: 'string' },
|
|
105
|
+
memo: { type: 'string', description: 'Full original phrasing of the user request.' },
|
|
106
|
+
expires_in_hours: { type: 'number', description: 'Auto-expire after N hours. Omit for permanent.' },
|
|
107
|
+
},
|
|
108
|
+
required: ['what'],
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'mcp__imhub__search_memos',
|
|
113
|
+
description: 'Recall memos for queries about saved knowledge ("我的车在哪", "我爸爸的生日"). Combines free-text query with optional structured filters; all filters AND-combine.',
|
|
114
|
+
parameters: {
|
|
115
|
+
type: 'object',
|
|
116
|
+
properties: {
|
|
117
|
+
query: { type: 'string', description: 'Free-text — fuzzy LIKE match across what/who/where_label/how/why/when_text/memo.' },
|
|
118
|
+
what: { type: 'string' },
|
|
119
|
+
who: { type: 'string' },
|
|
120
|
+
has_location: { type: 'boolean' },
|
|
121
|
+
when_after: { type: 'string', description: 'UTC+8 "YYYY-MM-DD HH:MM:SS"; memos with when_at OR created_at ≥ this.' },
|
|
122
|
+
when_before: { type: 'string' },
|
|
123
|
+
limit: { type: 'integer', minimum: 1, maximum: 50, default: 10 },
|
|
124
|
+
include_expired: { type: 'boolean', default: false },
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: 'mcp__imhub__update_memo',
|
|
130
|
+
description: 'Patch an existing memo by id. Pass only the fields you want to change.',
|
|
131
|
+
parameters: {
|
|
132
|
+
type: 'object',
|
|
133
|
+
properties: {
|
|
134
|
+
id: { type: 'integer' },
|
|
135
|
+
what: { type: 'string' },
|
|
136
|
+
who: { type: 'string' },
|
|
137
|
+
when_at: { type: 'string' },
|
|
138
|
+
when_text: { type: 'string' },
|
|
139
|
+
where_lat: { type: 'number' },
|
|
140
|
+
where_lng: { type: 'number' },
|
|
141
|
+
where_label: { type: 'string' },
|
|
142
|
+
memo: { type: 'string' },
|
|
143
|
+
expires_in_hours: { type: 'number' },
|
|
144
|
+
},
|
|
145
|
+
required: ['id'],
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'mcp__imhub__delete_memo',
|
|
150
|
+
description: 'Drop one memo by id.',
|
|
151
|
+
parameters: {
|
|
152
|
+
type: 'object',
|
|
153
|
+
properties: { id: { type: 'integer' } },
|
|
154
|
+
required: ['id'],
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'mcp__imhub__push_message',
|
|
159
|
+
description: 'Push a follow-up message back into the caller IM thread without waiting for the next user turn. Use for proactive notifications during long-running tasks. Default pushes into the caller thread; cross-thread requires operator opt-in (IMHUB_PUSH_CROSS_THREAD=on).',
|
|
160
|
+
parameters: {
|
|
161
|
+
type: 'object',
|
|
162
|
+
properties: {
|
|
163
|
+
text: { type: 'string', description: 'Body to push. Required.' },
|
|
164
|
+
toThread: { type: 'string', description: 'Optional override "<platform>:<channelId>:<threadId>". Cross-thread requires operator opt-in.' },
|
|
165
|
+
},
|
|
166
|
+
required: ['text'],
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: 'mcp__imhub__ask_user',
|
|
171
|
+
description: 'Present the user with an N-way multiple-choice question and reliably get a typed answer back (1-indexed). Use when you need disambiguation rather than free-form chat. Default timeout 90s.',
|
|
172
|
+
parameters: {
|
|
173
|
+
type: 'object',
|
|
174
|
+
properties: {
|
|
175
|
+
question: { type: 'string', description: 'Single-line question, ≤400 chars.' },
|
|
176
|
+
choices: { type: 'array', items: { type: 'string' }, description: '2-9 short choice labels.' },
|
|
177
|
+
timeoutSec: { type: 'integer', minimum: 5, maximum: 600, default: 90 },
|
|
178
|
+
allowTextReply: { type: 'boolean', default: true, description: 'When true, text "1"/"a"/label substring also matches.' },
|
|
179
|
+
},
|
|
180
|
+
required: ['question', 'choices'],
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: 'mcp__imhub__call_agent',
|
|
185
|
+
description: 'Hand off a prompt to another registered agent (claude-code, codex, opencode, antigravity, native, or any remote ACP). Subject to A2A guardrails: depth limit, self-call ban, workspace ACL, per-user budget. Returns the callee\'s final text.',
|
|
186
|
+
parameters: {
|
|
187
|
+
type: 'object',
|
|
188
|
+
properties: {
|
|
189
|
+
agent: { type: 'string', description: 'Target agent name. Must not be the caller.' },
|
|
190
|
+
prompt: { type: 'string', description: 'Prompt to send.' },
|
|
191
|
+
},
|
|
192
|
+
required: ['agent', 'prompt'],
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
];
|
|
196
|
+
}
|
|
197
|
+
/** Build a dispatcher closure over the per-turn IM context. */
|
|
198
|
+
export function buildImhubDispatcher(ctx) {
|
|
199
|
+
const runCtxBase = {
|
|
200
|
+
threadId: ctx.threadId,
|
|
201
|
+
platform: ctx.platform,
|
|
202
|
+
userId: ctx.userId,
|
|
203
|
+
channelId: ctx.channelId,
|
|
204
|
+
};
|
|
205
|
+
return async (call, signal) => {
|
|
206
|
+
if (!call.name.startsWith('mcp__imhub__'))
|
|
207
|
+
return unknown(call.name);
|
|
208
|
+
const op = call.name.slice('mcp__imhub__'.length);
|
|
209
|
+
const args = (call.arguments && typeof call.arguments === 'object' ? call.arguments : {});
|
|
210
|
+
try {
|
|
211
|
+
switch (op) {
|
|
212
|
+
case 'read_skill': {
|
|
213
|
+
const r = await handleSkillsOp({ op: 'read', name: args.name });
|
|
214
|
+
if (!r.ok)
|
|
215
|
+
return err(`read_skill failed: ${r.error}`);
|
|
216
|
+
if (r.result.op !== 'read')
|
|
217
|
+
return err('unexpected response shape');
|
|
218
|
+
if (!r.result.available)
|
|
219
|
+
return err(`skill "${r.result.name}" unavailable: ${r.result.unavailableReason || 'unknown'}`);
|
|
220
|
+
return ok(r.result.body);
|
|
221
|
+
}
|
|
222
|
+
case 'list_skills': {
|
|
223
|
+
const r = await handleSkillsOp({ op: 'list' });
|
|
224
|
+
if (!r.ok)
|
|
225
|
+
return err(`list_skills failed: ${r.error}`);
|
|
226
|
+
return ok(safeJson(r.result));
|
|
227
|
+
}
|
|
228
|
+
case 'save_memo': {
|
|
229
|
+
const r = await handleMemoOp('save', args, runCtxBase);
|
|
230
|
+
if (!r.ok)
|
|
231
|
+
return err(`save_memo failed: ${r.error}`);
|
|
232
|
+
return ok(safeJson(r.result));
|
|
233
|
+
}
|
|
234
|
+
case 'search_memos': {
|
|
235
|
+
const r = await handleMemoOp('search', args, runCtxBase);
|
|
236
|
+
if (!r.ok)
|
|
237
|
+
return err(`search_memos failed: ${r.error}`);
|
|
238
|
+
return ok(safeJson(r.result));
|
|
239
|
+
}
|
|
240
|
+
case 'update_memo': {
|
|
241
|
+
const r = await handleMemoOp('update', args, runCtxBase);
|
|
242
|
+
if (!r.ok)
|
|
243
|
+
return err(`update_memo failed: ${r.error}`);
|
|
244
|
+
return ok(safeJson(r.result));
|
|
245
|
+
}
|
|
246
|
+
case 'delete_memo': {
|
|
247
|
+
const r = await handleMemoOp('delete', args, runCtxBase);
|
|
248
|
+
if (!r.ok)
|
|
249
|
+
return err(`delete_memo failed: ${r.error}`);
|
|
250
|
+
return ok(safeJson(r.result));
|
|
251
|
+
}
|
|
252
|
+
case 'push_message': {
|
|
253
|
+
const r = await handlePushOp(args, runCtxBase);
|
|
254
|
+
if (!r.ok)
|
|
255
|
+
return err(`push_message failed: ${r.error}`);
|
|
256
|
+
return ok(safeJson(r.result));
|
|
257
|
+
}
|
|
258
|
+
case 'ask_user': {
|
|
259
|
+
const r = await handleAskOp(args, runCtxBase);
|
|
260
|
+
if (!r.ok)
|
|
261
|
+
return err(`ask_user failed (${r.reason || 'error'}): ${r.error}`);
|
|
262
|
+
return ok(safeJson(r.result));
|
|
263
|
+
}
|
|
264
|
+
case 'call_agent': {
|
|
265
|
+
const agentName = typeof args.agent === 'string' ? args.agent : '';
|
|
266
|
+
const prompt = typeof args.prompt === 'string' ? args.prompt : '';
|
|
267
|
+
if (!agentName || !prompt)
|
|
268
|
+
return err('call_agent requires both `agent` (string) and `prompt` (string).');
|
|
269
|
+
// Construct a minimal RouteContext from the run context so A2A
|
|
270
|
+
// can audit / route. Lifted to a partial cast because most of
|
|
271
|
+
// RouteContext's optional fields (intent, agentSessionId, …)
|
|
272
|
+
// are only used by full-router dispatch — not A2A.
|
|
273
|
+
const routeCtx = {
|
|
274
|
+
channelId: ctx.channelId,
|
|
275
|
+
threadId: ctx.threadId,
|
|
276
|
+
platform: ctx.platform,
|
|
277
|
+
userId: ctx.userId,
|
|
278
|
+
defaultAgent: ctx.callerAgent,
|
|
279
|
+
traceId: `native-a2a-${Date.now()}`,
|
|
280
|
+
logger: (ctx.logger ?? rootLogger).child({ component: 'a2a-from-native', threadId: ctx.threadId }),
|
|
281
|
+
};
|
|
282
|
+
const result = await callAgentByName(agentName, prompt, routeCtx, {
|
|
283
|
+
callerDepth: ctx.callerDepth ?? 0,
|
|
284
|
+
callerAgent: ctx.callerAgent,
|
|
285
|
+
});
|
|
286
|
+
if (!result.ok)
|
|
287
|
+
return err(`call_agent failed: ${result.error}`);
|
|
288
|
+
// CallAgentResult exposes the callee's final text as `result`.
|
|
289
|
+
// Outputs, jobId, durationMs etc. are returned as a JSON
|
|
290
|
+
// sidecar so the model can reference produced artifacts if
|
|
291
|
+
// it asks for them — keeps the main payload terse.
|
|
292
|
+
return ok(typeof result.result === 'string' ? result.result : safeJson(result));
|
|
293
|
+
}
|
|
294
|
+
default:
|
|
295
|
+
return unknown(call.name);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
catch (e) {
|
|
299
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
300
|
+
log.warn({ event: 'imhub.dispatcher.error', name: call.name, err: msg });
|
|
301
|
+
return err(`imhub.${op} crashed: ${msg}`);
|
|
302
|
+
}
|
|
303
|
+
finally {
|
|
304
|
+
void signal; // signal is provided for future cancellation; current handlers don't honour it.
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=imhub-dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imhub-dispatcher.js","sourceRoot":"","sources":["../../../src/core/llm/imhub-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { LlmProvider, LlmProviderError, type ChatOptions, type ChatResult, type ChatStreamChunk, type FinishReason, type LlmMessage, type LlmMessageRole, type LlmUsage, type ProviderConfigBase, type NormalizedOptions, type ToolCallRequest, type ToolChoice, type ToolDef, } from './provider-base.js';
|
|
2
|
+
export { OpenAICompatProvider, type OpenAICompatProviderConfig, } from './openai-compat-provider.js';
|
|
3
|
+
export { AnthropicProvider, type AnthropicProviderConfig, } from './anthropic-provider.js';
|
|
4
|
+
export { loadFromConfig, getProvider, getProviderByName, listProviders, describeRegistry, _resetRegistry, type LlmRole, } from './registry.js';
|
|
5
|
+
export { LLM_SECRETS_PATH, envKeyForBackend, loadSecretsFile, resolveSecret, saveSecret, removeSecret, listConfiguredBackends, describeSecretSource, } from './secrets.js';
|
|
6
|
+
export { tryIntrospect, type IntrospectionInput, type IntrospectionResult, } from './introspection.js';
|
|
7
|
+
export { McpClient, type McpServerConfig, type ToolCallResult, } from './mcp-client.js';
|
|
8
|
+
export { loadFromConfig as loadMcpFromConfig, connectAll as connectAllMcp, getAllTools as getAllMcpTools, getOwningServer as getMcpOwningServer, callToolByName as callMcpToolByName, describeRegistry as describeMcpRegistry, closeAll as closeAllMcp, _resetRegistry as _resetMcpRegistry, } from './mcp-registry.js';
|
|
9
|
+
export { runAgentLoop, alwaysAllowGate, type AgentLoopInput, type AgentLoopResult, type ApprovalGate, type LoopFinishReason, type ToolCallReport, } from './agent-loop.js';
|
|
10
|
+
export { buildMcpDispatcher, combineDispatchers, type DispatcherResult, type ToolDispatcher, } from './tool-dispatcher.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/llm/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,OAAO,GACb,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EACL,oBAAoB,EACpB,KAAK,0BAA0B,GAChC,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,KAAK,OAAO,GACb,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EACL,SAAS,EACT,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,cAAc,IAAI,iBAAiB,EACnC,UAAU,IAAI,aAAa,EAC3B,WAAW,IAAI,cAAc,EAC7B,eAAe,IAAI,kBAAkB,EACrC,cAAc,IAAI,iBAAiB,EACnC,gBAAgB,IAAI,mBAAmB,EACvC,QAAQ,IAAI,WAAW,EACvB,cAAc,IAAI,iBAAiB,GACpC,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Barrel re-export — the public surface of the native LLM client (D+ Stage 1).
|
|
2
|
+
//
|
|
3
|
+
// Internal modules should import from `./llm/index.js` to keep deep-path
|
|
4
|
+
// imports out of caller code. Stage 2 will add tool-loop / MCP exports
|
|
5
|
+
// here without breaking Stage-1 callers.
|
|
6
|
+
export { LlmProvider, LlmProviderError, } from './provider-base.js';
|
|
7
|
+
export { OpenAICompatProvider, } from './openai-compat-provider.js';
|
|
8
|
+
export { AnthropicProvider, } from './anthropic-provider.js';
|
|
9
|
+
export { loadFromConfig, getProvider, getProviderByName, listProviders, describeRegistry, _resetRegistry, } from './registry.js';
|
|
10
|
+
export { LLM_SECRETS_PATH, envKeyForBackend, loadSecretsFile, resolveSecret, saveSecret, removeSecret, listConfiguredBackends, describeSecretSource, } from './secrets.js';
|
|
11
|
+
export { tryIntrospect, } from './introspection.js';
|
|
12
|
+
export { McpClient, } from './mcp-client.js';
|
|
13
|
+
export { loadFromConfig as loadMcpFromConfig, connectAll as connectAllMcp, getAllTools as getAllMcpTools, getOwningServer as getMcpOwningServer, callToolByName as callMcpToolByName, describeRegistry as describeMcpRegistry, closeAll as closeAllMcp, _resetRegistry as _resetMcpRegistry, } from './mcp-registry.js';
|
|
14
|
+
export { runAgentLoop, alwaysAllowGate, } from './agent-loop.js';
|
|
15
|
+
export { buildMcpDispatcher, combineDispatchers, } from './tool-dispatcher.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/llm/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,yCAAyC;AAEzC,OAAO,EACL,WAAW,EACX,gBAAgB,GAajB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EACL,oBAAoB,GAErB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,iBAAiB,GAElB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,cAAc,GAEf,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,aAAa,GAGd,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EACL,SAAS,GAGV,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,cAAc,IAAI,iBAAiB,EACnC,UAAU,IAAI,aAAa,EAC3B,WAAW,IAAI,cAAc,EAC7B,eAAe,IAAI,kBAAkB,EACrC,cAAc,IAAI,iBAAiB,EACnC,gBAAgB,IAAI,mBAAmB,EACvC,QAAQ,IAAI,WAAW,EACvB,cAAc,IAAI,iBAAiB,GACpC,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,YAAY,EACZ,eAAe,GAMhB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAGnB,MAAM,sBAAsB,CAAA"}
|