@agent-native/core 0.15.12 → 0.16.0
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/README.md +37 -0
- package/dist/agent/app-model-defaults.d.ts +37 -0
- package/dist/agent/app-model-defaults.d.ts.map +1 -0
- package/dist/agent/app-model-defaults.js +136 -0
- package/dist/agent/app-model-defaults.js.map +1 -0
- package/dist/agent/engine/registry.d.ts +12 -7
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +28 -8
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/production-agent.d.ts +2 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +3 -1
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/browser-sessions/actions.d.ts +7 -0
- package/dist/browser-sessions/actions.d.ts.map +1 -0
- package/dist/browser-sessions/actions.js +223 -0
- package/dist/browser-sessions/actions.js.map +1 -0
- package/dist/browser-sessions/routes.d.ts +7 -0
- package/dist/browser-sessions/routes.d.ts.map +1 -0
- package/dist/browser-sessions/routes.js +159 -0
- package/dist/browser-sessions/routes.js.map +1 -0
- package/dist/browser-sessions/store.d.ts +33 -0
- package/dist/browser-sessions/store.d.ts.map +1 -0
- package/dist/browser-sessions/store.js +506 -0
- package/dist/browser-sessions/store.js.map +1 -0
- package/dist/browser-sessions/types.d.ts +68 -0
- package/dist/browser-sessions/types.d.ts.map +1 -0
- package/dist/browser-sessions/types.js +2 -0
- package/dist/browser-sessions/types.js.map +1 -0
- package/dist/cli/code-agent-commands.d.ts +36 -0
- package/dist/cli/code-agent-commands.d.ts.map +1 -0
- package/dist/cli/code-agent-commands.js +192 -0
- package/dist/cli/code-agent-commands.js.map +1 -0
- package/dist/cli/code-agent-connector.d.ts +17 -0
- package/dist/cli/code-agent-connector.d.ts.map +1 -0
- package/dist/cli/code-agent-connector.js +724 -0
- package/dist/cli/code-agent-connector.js.map +1 -0
- package/dist/cli/code-agent-executor.d.ts +31 -0
- package/dist/cli/code-agent-executor.d.ts.map +1 -0
- package/dist/cli/code-agent-executor.js +921 -0
- package/dist/cli/code-agent-executor.js.map +1 -0
- package/dist/cli/code-agent-runs.d.ts +102 -0
- package/dist/cli/code-agent-runs.d.ts.map +1 -0
- package/dist/cli/code-agent-runs.js +277 -0
- package/dist/cli/code-agent-runs.js.map +1 -0
- package/dist/cli/code.d.ts +66 -0
- package/dist/cli/code.d.ts.map +1 -0
- package/dist/cli/code.js +1306 -0
- package/dist/cli/code.js.map +1 -0
- package/dist/cli/create.d.ts +2 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +11 -1
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +26 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/migrate.d.ts +27 -0
- package/dist/cli/migrate.d.ts.map +1 -1
- package/dist/cli/migrate.js +1328 -20
- package/dist/cli/migrate.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +27 -3
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/cli/workspacify.d.ts +2 -0
- package/dist/cli/workspacify.d.ts.map +1 -1
- package/dist/cli/workspacify.js +2 -1
- package/dist/cli/workspacify.js.map +1 -1
- package/dist/client/AgentNative.d.ts +32 -0
- package/dist/client/AgentNative.d.ts.map +1 -0
- package/dist/client/AgentNative.js +79 -0
- package/dist/client/AgentNative.js.map +1 -0
- package/dist/client/AgentNativeEmbedded.d.ts +47 -0
- package/dist/client/AgentNativeEmbedded.d.ts.map +1 -0
- package/dist/client/AgentNativeEmbedded.js +148 -0
- package/dist/client/AgentNativeEmbedded.js.map +1 -0
- package/dist/client/AgentNativeFrame.d.ts +25 -0
- package/dist/client/AgentNativeFrame.d.ts.map +1 -0
- package/dist/client/AgentNativeFrame.js +68 -0
- package/dist/client/AgentNativeFrame.js.map +1 -0
- package/dist/client/AgentPanel.d.ts +19 -2
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +15 -4
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +79 -48
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +2 -1
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.js +3 -2
- package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
- package/dist/client/browser-session-bridge.d.ts +44 -0
- package/dist/client/browser-session-bridge.d.ts.map +1 -0
- package/dist/client/browser-session-bridge.js +339 -0
- package/dist/client/browser-session-bridge.js.map +1 -0
- package/dist/client/client-action.d.ts +7 -0
- package/dist/client/client-action.d.ts.map +1 -0
- package/dist/client/client-action.js +4 -0
- package/dist/client/client-action.js.map +1 -0
- package/dist/client/components/ui/tooltip.d.ts.map +1 -1
- package/dist/client/components/ui/tooltip.js +1 -1
- package/dist/client/components/ui/tooltip.js.map +1 -1
- package/dist/client/composer/AgentComposerFrame.d.ts +17 -0
- package/dist/client/composer/AgentComposerFrame.d.ts.map +1 -0
- package/dist/client/composer/AgentComposerFrame.js +14 -0
- package/dist/client/composer/AgentComposerFrame.js.map +1 -0
- package/dist/client/composer/MentionPopover.d.ts.map +1 -1
- package/dist/client/composer/MentionPopover.js +2 -2
- package/dist/client/composer/MentionPopover.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts +35 -2
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +31 -17
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +20 -2
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +112 -22
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/index.d.ts +3 -2
- package/dist/client/composer/index.d.ts.map +1 -1
- package/dist/client/composer/index.js +1 -0
- package/dist/client/composer/index.js.map +1 -1
- package/dist/client/composer/types.d.ts +1 -0
- package/dist/client/composer/types.d.ts.map +1 -1
- package/dist/client/composer/types.js.map +1 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.d.ts +58 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.d.ts.map +1 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.d.ts +2 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.d.ts.map +1 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.js +110 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.js.map +1 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.js +354 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.js.map +1 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.spec.d.ts +2 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.spec.d.ts.map +1 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.spec.js +68 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.spec.js.map +1 -0
- package/dist/client/extensions/agent-native-extension-runtime.d.ts +69 -0
- package/dist/client/extensions/agent-native-extension-runtime.d.ts.map +1 -0
- package/dist/client/extensions/agent-native-extension-runtime.js +348 -0
- package/dist/client/extensions/agent-native-extension-runtime.js.map +1 -0
- package/dist/client/extensions/index.d.ts +2 -0
- package/dist/client/extensions/index.d.ts.map +1 -1
- package/dist/client/extensions/index.js +2 -0
- package/dist/client/extensions/index.js.map +1 -1
- package/dist/client/extensions/portable-extension.d.ts +86 -0
- package/dist/client/extensions/portable-extension.d.ts.map +1 -0
- package/dist/client/extensions/portable-extension.js +480 -0
- package/dist/client/extensions/portable-extension.js.map +1 -0
- package/dist/client/host-bridge.d.ts +266 -0
- package/dist/client/host-bridge.d.ts.map +1 -0
- package/dist/client/host-bridge.js +745 -0
- package/dist/client/host-bridge.js.map +1 -0
- package/dist/client/host-tools.d.ts +40 -0
- package/dist/client/host-tools.d.ts.map +1 -0
- package/dist/client/host-tools.js +94 -0
- package/dist/client/host-tools.js.map +1 -0
- package/dist/client/index.d.ts +13 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +11 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/resources/BuiltinCapabilityDetail.d.ts +10 -0
- package/dist/client/resources/BuiltinCapabilityDetail.d.ts.map +1 -0
- package/dist/client/resources/BuiltinCapabilityDetail.js +51 -0
- package/dist/client/resources/BuiltinCapabilityDetail.js.map +1 -0
- package/dist/client/resources/ResourceEditor.d.ts +3 -1
- package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
- package/dist/client/resources/ResourceEditor.js +40 -17
- package/dist/client/resources/ResourceEditor.js.map +1 -1
- package/dist/client/resources/ResourceTree.d.ts.map +1 -1
- package/dist/client/resources/ResourceTree.js +23 -2
- package/dist/client/resources/ResourceTree.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +77 -17
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/index.d.ts +1 -0
- package/dist/client/resources/index.d.ts.map +1 -1
- package/dist/client/resources/index.js +1 -0
- package/dist/client/resources/index.js.map +1 -1
- package/dist/client/resources/use-builtin-capabilities.d.ts +62 -0
- package/dist/client/resources/use-builtin-capabilities.d.ts.map +1 -0
- package/dist/client/resources/use-builtin-capabilities.js +54 -0
- package/dist/client/resources/use-builtin-capabilities.js.map +1 -0
- package/dist/client/resources/use-resources.d.ts +30 -2
- package/dist/client/resources/use-resources.d.ts.map +1 -1
- package/dist/client/resources/use-resources.js +42 -1
- package/dist/client/resources/use-resources.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +151 -2
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/use-chat-models.d.ts.map +1 -1
- package/dist/client/use-chat-models.js +20 -0
- package/dist/client/use-chat-models.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +46 -2
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-chat-threads.spec.js +77 -0
- package/dist/client/use-chat-threads.spec.js.map +1 -1
- package/dist/code-agents/index.d.ts +4 -0
- package/dist/code-agents/index.d.ts.map +1 -0
- package/dist/code-agents/index.js +4 -0
- package/dist/code-agents/index.js.map +1 -0
- package/dist/connections/catalog.d.ts +134 -0
- package/dist/connections/catalog.d.ts.map +1 -0
- package/dist/connections/catalog.js +180 -0
- package/dist/connections/catalog.js.map +1 -0
- package/dist/connections/index.d.ts +2 -0
- package/dist/connections/index.d.ts.map +1 -0
- package/dist/connections/index.js +2 -0
- package/dist/connections/index.js.map +1 -0
- package/dist/extensions/change-marker.d.ts +10 -0
- package/dist/extensions/change-marker.d.ts.map +1 -0
- package/dist/extensions/change-marker.js +42 -0
- package/dist/extensions/change-marker.js.map +1 -0
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +1 -7
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/schema.d.ts +1 -0
- package/dist/extensions/schema.d.ts.map +1 -1
- package/dist/extensions/schema.js +1 -0
- package/dist/extensions/schema.js.map +1 -1
- package/dist/extensions/slots/routes.js +1 -1
- package/dist/extensions/slots/routes.js.map +1 -1
- package/dist/extensions/store.d.ts +3 -0
- package/dist/extensions/store.d.ts.map +1 -1
- package/dist/extensions/store.js +112 -4
- package/dist/extensions/store.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/adapters/telegram.d.ts.map +1 -1
- package/dist/integrations/adapters/telegram.js +1 -0
- package/dist/integrations/adapters/telegram.js.map +1 -1
- package/dist/integrations/index.d.ts +5 -1
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +4 -1
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/plugin.d.ts +8 -0
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +760 -32
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/remote-commands-store.d.ts +36 -0
- package/dist/integrations/remote-commands-store.d.ts.map +1 -0
- package/dist/integrations/remote-commands-store.js +273 -0
- package/dist/integrations/remote-commands-store.js.map +1 -0
- package/dist/integrations/remote-devices-store.d.ts +43 -0
- package/dist/integrations/remote-devices-store.d.ts.map +1 -0
- package/dist/integrations/remote-devices-store.js +315 -0
- package/dist/integrations/remote-devices-store.js.map +1 -0
- package/dist/integrations/remote-push-store.d.ts +37 -0
- package/dist/integrations/remote-push-store.d.ts.map +1 -0
- package/dist/integrations/remote-push-store.js +299 -0
- package/dist/integrations/remote-push-store.js.map +1 -0
- package/dist/integrations/remote-retry-job.d.ts +7 -0
- package/dist/integrations/remote-retry-job.d.ts.map +1 -0
- package/dist/integrations/remote-retry-job.js +45 -0
- package/dist/integrations/remote-retry-job.js.map +1 -0
- package/dist/integrations/remote-run-events-store.d.ts +18 -0
- package/dist/integrations/remote-run-events-store.d.ts.map +1 -0
- package/dist/integrations/remote-run-events-store.js +82 -0
- package/dist/integrations/remote-run-events-store.js.map +1 -0
- package/dist/integrations/remote-types.d.ts +101 -0
- package/dist/integrations/remote-types.d.ts.map +1 -0
- package/dist/integrations/remote-types.js +2 -0
- package/dist/integrations/remote-types.js.map +1 -0
- package/dist/integrations/webhook-handler.d.ts +2 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +4 -1
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +4 -2
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +9 -3
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/mcp-client/builtin-capabilities.d.ts +20 -0
- package/dist/mcp-client/builtin-capabilities.d.ts.map +1 -0
- package/dist/mcp-client/builtin-capabilities.js +75 -0
- package/dist/mcp-client/builtin-capabilities.js.map +1 -0
- package/dist/mcp-client/builtin-store.d.ts +10 -0
- package/dist/mcp-client/builtin-store.d.ts.map +1 -0
- package/dist/mcp-client/builtin-store.js +55 -0
- package/dist/mcp-client/builtin-store.js.map +1 -0
- package/dist/mcp-client/index.d.ts +3 -1
- package/dist/mcp-client/index.d.ts.map +1 -1
- package/dist/mcp-client/index.js +3 -1
- package/dist/mcp-client/index.js.map +1 -1
- package/dist/mcp-client/routes.d.ts +28 -0
- package/dist/mcp-client/routes.d.ts.map +1 -1
- package/dist/mcp-client/routes.js +195 -1
- package/dist/mcp-client/routes.js.map +1 -1
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +34 -0
- package/dist/org/context.js.map +1 -1
- package/dist/resources/handlers.d.ts +4 -0
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +46 -7
- package/dist/resources/handlers.js.map +1 -1
- package/dist/resources/script-helpers.d.ts +8 -1
- package/dist/resources/script-helpers.d.ts.map +1 -1
- package/dist/resources/script-helpers.js +18 -8
- package/dist/resources/script-helpers.js.map +1 -1
- package/dist/resources/store.d.ts +19 -0
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +86 -3
- package/dist/resources/store.js.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +18 -7
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.d.ts.map +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.js +100 -7
- package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
- package/dist/scripts/resources/delete.d.ts.map +1 -1
- package/dist/scripts/resources/delete.js +4 -1
- package/dist/scripts/resources/delete.js.map +1 -1
- package/dist/scripts/resources/effective.d.ts +11 -0
- package/dist/scripts/resources/effective.d.ts.map +1 -0
- package/dist/scripts/resources/effective.js +54 -0
- package/dist/scripts/resources/effective.js.map +1 -0
- package/dist/scripts/resources/index.d.ts.map +1 -1
- package/dist/scripts/resources/index.js +1 -0
- package/dist/scripts/resources/index.js.map +1 -1
- package/dist/scripts/resources/list.d.ts +1 -1
- package/dist/scripts/resources/list.d.ts.map +1 -1
- package/dist/scripts/resources/list.js +17 -5
- package/dist/scripts/resources/list.js.map +1 -1
- package/dist/scripts/resources/read.d.ts +1 -1
- package/dist/scripts/resources/read.d.ts.map +1 -1
- package/dist/scripts/resources/read.js +20 -5
- package/dist/scripts/resources/read.js.map +1 -1
- package/dist/scripts/resources/write.d.ts.map +1 -1
- package/dist/scripts/resources/write.js +4 -1
- package/dist/scripts/resources/write.js.map +1 -1
- package/dist/scripts/runner.d.ts +11 -1
- package/dist/scripts/runner.d.ts.map +1 -1
- package/dist/scripts/runner.js +75 -27
- package/dist/scripts/runner.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +5 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +24 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +608 -54
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +2 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/embedded.d.ts +72 -0
- package/dist/server/embedded.d.ts.map +1 -0
- package/dist/server/embedded.js +119 -0
- package/dist/server/embedded.js.map +1 -0
- package/dist/server/index.d.ts +8 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +7 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +184 -13
- package/dist/server/poll.js.map +1 -1
- package/dist/server/resources-plugin.d.ts.map +1 -1
- package/dist/server/resources-plugin.js +11 -2
- package/dist/server/resources-plugin.js.map +1 -1
- package/dist/sharing/actions/extension-change.d.ts +4 -0
- package/dist/sharing/actions/extension-change.d.ts.map +1 -0
- package/dist/sharing/actions/extension-change.js +13 -0
- package/dist/sharing/actions/extension-change.js.map +1 -0
- package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
- package/dist/sharing/actions/set-resource-visibility.js +3 -0
- package/dist/sharing/actions/set-resource-visibility.js.map +1 -1
- package/dist/sharing/actions/share-resource.d.ts.map +1 -1
- package/dist/sharing/actions/share-resource.js +4 -0
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/sharing/actions/unshare-resource.d.ts.map +1 -1
- package/dist/sharing/actions/unshare-resource.js +3 -0
- package/dist/sharing/actions/unshare-resource.js.map +1 -1
- package/dist/templates/default/AGENTS.md +3 -3
- package/dist/templates/workspace-core/AGENTS.md +7 -0
- package/dist/templates/workspace-root/AGENTS.md +7 -0
- package/dist/templates/workspace-root/README.md +25 -0
- package/dist/triggers/dispatcher.d.ts +3 -1
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +9 -3
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/workspace-connections/index.d.ts +2 -0
- package/dist/workspace-connections/index.d.ts.map +1 -0
- package/dist/workspace-connections/index.js +2 -0
- package/dist/workspace-connections/index.js.map +1 -0
- package/dist/workspace-connections/store.d.ts +229 -0
- package/dist/workspace-connections/store.d.ts.map +1 -0
- package/dist/workspace-connections/store.js +938 -0
- package/dist/workspace-connections/store.js.map +1 -0
- package/docs/content/agent-teams.md +6 -0
- package/docs/content/cloneable-saas.md +1 -0
- package/docs/content/code-agents-ui.md +261 -0
- package/docs/content/dispatch.md +40 -3
- package/docs/content/embedding-sdk.md +459 -0
- package/docs/content/faq.md +1 -0
- package/docs/content/getting-started.md +1 -0
- package/docs/content/mcp-clients.md +41 -3
- package/docs/content/migration-workbench.md +237 -54
- package/docs/content/multi-app-workspace.md +41 -0
- package/docs/content/multi-tenancy.md +1 -1
- package/docs/content/template-brain.md +418 -0
- package/docs/content/template-dispatch.md +30 -0
- package/docs/content/workspace-connections.md +509 -0
- package/docs/content/workspace-management.md +12 -12
- package/docs/content/workspace.md +180 -40
- package/package.json +7 -2
- package/src/templates/default/AGENTS.md +3 -3
- package/src/templates/workspace-core/AGENTS.md +7 -0
- package/src/templates/workspace-root/AGENTS.md +7 -0
- package/src/templates/workspace-root/README.md +25 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-capabilities.d.ts","sourceRoot":"","sources":["../../src/mcp-client/builtin-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,MAAM,sBAAsB,GAC9B,yBAAyB,GACzB,oBAAoB,GACpB,cAAc,CAAC;AAEnB,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,sBAAsB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,wBAAwB,EAAE,oBAAoB,EAoC1D,CAAC;AAMF,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,MAAM,GACT,oBAAoB,GAAG,IAAI,CAE7B;AAED,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,GACT,EAAE,IAAI,sBAAsB,CAE9B;AAED,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,oBAAoB,EAChC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,OAAO,CAET;AAED,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,SAAS,MAAM,EAAE,GACrB,sBAAsB,EAAE,CAkB1B;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,oBAAoB,GAC/B,oBAAoB,CAOtB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export const BUILTIN_MCP_CAPABILITIES = [
|
|
2
|
+
{
|
|
3
|
+
id: "browser-chrome-devtools",
|
|
4
|
+
serverId: "chrome-devtools",
|
|
5
|
+
name: "Chrome DevTools",
|
|
6
|
+
description: "Attach to a live Chrome browser through Chrome DevTools MCP.",
|
|
7
|
+
command: "npx",
|
|
8
|
+
args: [
|
|
9
|
+
"-y",
|
|
10
|
+
"chrome-devtools-mcp@0.26.0",
|
|
11
|
+
"--autoConnect",
|
|
12
|
+
"--no-usage-statistics",
|
|
13
|
+
],
|
|
14
|
+
exclusiveGroup: "browser",
|
|
15
|
+
notes: "Uses --autoConnect and requires Chrome 144+ with remote debugging enabled.",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: "browser-playwright",
|
|
19
|
+
serverId: "playwright",
|
|
20
|
+
name: "Playwright Browser",
|
|
21
|
+
description: "Launch and control a Playwright-managed browser.",
|
|
22
|
+
command: "npx",
|
|
23
|
+
args: ["-y", "@playwright/mcp@0.0.75"],
|
|
24
|
+
exclusiveGroup: "browser",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: "computer-use",
|
|
28
|
+
serverId: "computer-use",
|
|
29
|
+
name: "Computer Use",
|
|
30
|
+
description: "Control local macOS apps through the Computer Use MCP server.",
|
|
31
|
+
command: "npx",
|
|
32
|
+
args: ["-y", "computer-use-mcp@1.8.0"],
|
|
33
|
+
platforms: ["darwin"],
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
const CAPABILITY_BY_ID = new Map(BUILTIN_MCP_CAPABILITIES.map((capability) => [capability.id, capability]));
|
|
37
|
+
export function getBuiltinMcpCapability(id) {
|
|
38
|
+
return CAPABILITY_BY_ID.get(id) ?? null;
|
|
39
|
+
}
|
|
40
|
+
export function isBuiltinMcpCapabilityId(id) {
|
|
41
|
+
return CAPABILITY_BY_ID.has(id);
|
|
42
|
+
}
|
|
43
|
+
export function isBuiltinMcpCapabilityAvailable(capability, platform = process.platform) {
|
|
44
|
+
return !capability.platforms || capability.platforms.includes(platform);
|
|
45
|
+
}
|
|
46
|
+
export function normalizeBuiltinMcpCapabilityIds(ids) {
|
|
47
|
+
const enabled = [];
|
|
48
|
+
for (const rawId of ids) {
|
|
49
|
+
const capability = getBuiltinMcpCapability(rawId);
|
|
50
|
+
if (!capability)
|
|
51
|
+
continue;
|
|
52
|
+
if (capability.exclusiveGroup) {
|
|
53
|
+
for (let i = enabled.length - 1; i >= 0; i--) {
|
|
54
|
+
const existing = getBuiltinMcpCapability(enabled[i]);
|
|
55
|
+
if (existing?.exclusiveGroup === capability.exclusiveGroup) {
|
|
56
|
+
enabled.splice(i, 1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (enabled.includes(capability.id)) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
enabled.push(capability.id);
|
|
64
|
+
}
|
|
65
|
+
return enabled;
|
|
66
|
+
}
|
|
67
|
+
export function toBuiltinMcpServerConfig(capability) {
|
|
68
|
+
return {
|
|
69
|
+
type: "stdio",
|
|
70
|
+
command: capability.command,
|
|
71
|
+
args: capability.args,
|
|
72
|
+
description: capability.description,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=builtin-capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-capabilities.js","sourceRoot":"","sources":["../../src/mcp-client/builtin-capabilities.ts"],"names":[],"mappings":"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","sourcesContent":["import type { McpStdioServerConfig } from \"./config.js\";\n\nexport type BuiltinMcpCapabilityId =\n | \"browser-chrome-devtools\"\n | \"browser-playwright\"\n | \"computer-use\";\n\nexport interface BuiltinMcpCapability {\n id: BuiltinMcpCapabilityId;\n serverId: string;\n name: string;\n description: string;\n command: string;\n args: string[];\n exclusiveGroup?: \"browser\";\n platforms?: NodeJS.Platform[];\n notes?: string;\n}\n\nexport const BUILTIN_MCP_CAPABILITIES: BuiltinMcpCapability[] = [\n {\n id: \"browser-chrome-devtools\",\n serverId: \"chrome-devtools\",\n name: \"Chrome DevTools\",\n description: \"Attach to a live Chrome browser through Chrome DevTools MCP.\",\n command: \"npx\",\n args: [\n \"-y\",\n \"chrome-devtools-mcp@0.26.0\",\n \"--autoConnect\",\n \"--no-usage-statistics\",\n ],\n exclusiveGroup: \"browser\",\n notes:\n \"Uses --autoConnect and requires Chrome 144+ with remote debugging enabled.\",\n },\n {\n id: \"browser-playwright\",\n serverId: \"playwright\",\n name: \"Playwright Browser\",\n description: \"Launch and control a Playwright-managed browser.\",\n command: \"npx\",\n args: [\"-y\", \"@playwright/mcp@0.0.75\"],\n exclusiveGroup: \"browser\",\n },\n {\n id: \"computer-use\",\n serverId: \"computer-use\",\n name: \"Computer Use\",\n description:\n \"Control local macOS apps through the Computer Use MCP server.\",\n command: \"npx\",\n args: [\"-y\", \"computer-use-mcp@1.8.0\"],\n platforms: [\"darwin\"],\n },\n];\n\nconst CAPABILITY_BY_ID = new Map(\n BUILTIN_MCP_CAPABILITIES.map((capability) => [capability.id, capability]),\n);\n\nexport function getBuiltinMcpCapability(\n id: string,\n): BuiltinMcpCapability | null {\n return CAPABILITY_BY_ID.get(id as BuiltinMcpCapabilityId) ?? null;\n}\n\nexport function isBuiltinMcpCapabilityId(\n id: string,\n): id is BuiltinMcpCapabilityId {\n return CAPABILITY_BY_ID.has(id as BuiltinMcpCapabilityId);\n}\n\nexport function isBuiltinMcpCapabilityAvailable(\n capability: BuiltinMcpCapability,\n platform: NodeJS.Platform = process.platform,\n): boolean {\n return !capability.platforms || capability.platforms.includes(platform);\n}\n\nexport function normalizeBuiltinMcpCapabilityIds(\n ids: readonly string[],\n): BuiltinMcpCapabilityId[] {\n const enabled: BuiltinMcpCapabilityId[] = [];\n for (const rawId of ids) {\n const capability = getBuiltinMcpCapability(rawId);\n if (!capability) continue;\n if (capability.exclusiveGroup) {\n for (let i = enabled.length - 1; i >= 0; i--) {\n const existing = getBuiltinMcpCapability(enabled[i]);\n if (existing?.exclusiveGroup === capability.exclusiveGroup) {\n enabled.splice(i, 1);\n }\n }\n } else if (enabled.includes(capability.id)) {\n continue;\n }\n enabled.push(capability.id);\n }\n return enabled;\n}\n\nexport function toBuiltinMcpServerConfig(\n capability: BuiltinMcpCapability,\n): McpStdioServerConfig {\n return {\n type: \"stdio\",\n command: capability.command,\n args: capability.args,\n description: capability.description,\n };\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type BuiltinMcpCapabilityId } from "./builtin-capabilities.js";
|
|
2
|
+
import type { RemoteMcpScope } from "./remote-store.js";
|
|
3
|
+
export interface StoredBuiltinMcpCapabilities {
|
|
4
|
+
enabledIds: BuiltinMcpCapabilityId[];
|
|
5
|
+
}
|
|
6
|
+
export declare function builtinMcpCapabilitiesSettingsKey(): string;
|
|
7
|
+
export declare function listEnabledBuiltinMcpCapabilities(scope: RemoteMcpScope, scopeId: string): Promise<BuiltinMcpCapabilityId[]>;
|
|
8
|
+
export declare function setEnabledBuiltinMcpCapabilities(scope: RemoteMcpScope, scopeId: string, ids: readonly string[]): Promise<BuiltinMcpCapabilityId[]>;
|
|
9
|
+
export declare function setBuiltinMcpCapabilityEnabled(scope: RemoteMcpScope, scopeId: string, id: string, enabled: boolean): Promise<BuiltinMcpCapabilityId[] | null>;
|
|
10
|
+
//# sourceMappingURL=builtin-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-store.d.ts","sourceRoot":"","sources":["../../src/mcp-client/builtin-store.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,sBAAsB,EAAE,CAAC;CACtC;AAkCD,wBAAgB,iCAAiC,IAAI,MAAM,CAE1D;AAED,wBAAsB,iCAAiC,CACrD,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAInC;AAED,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,SAAS,MAAM,EAAE,GACrB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAInC;AAED,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,sBAAsB,EAAE,GAAG,IAAI,CAAC,CAS1C"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { getUserSetting, putUserSetting, deleteUserSetting, } from "../settings/user-settings.js";
|
|
2
|
+
import { getOrgSetting, putOrgSetting, deleteOrgSetting, } from "../settings/org-settings.js";
|
|
3
|
+
import { getBuiltinMcpCapability, normalizeBuiltinMcpCapabilityIds, } from "./builtin-capabilities.js";
|
|
4
|
+
const SETTINGS_KEY = "mcp-builtin-capabilities";
|
|
5
|
+
async function readSetting(scope, scopeId) {
|
|
6
|
+
return scope === "user"
|
|
7
|
+
? getUserSetting(scopeId, SETTINGS_KEY)
|
|
8
|
+
: getOrgSetting(scopeId, SETTINGS_KEY);
|
|
9
|
+
}
|
|
10
|
+
async function writeSetting(scope, scopeId, enabledIds) {
|
|
11
|
+
if (enabledIds.length === 0) {
|
|
12
|
+
if (scope === "user") {
|
|
13
|
+
await deleteUserSetting(scopeId, SETTINGS_KEY);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
await deleteOrgSetting(scopeId, SETTINGS_KEY);
|
|
17
|
+
}
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const value = {
|
|
21
|
+
enabledIds,
|
|
22
|
+
};
|
|
23
|
+
if (scope === "user") {
|
|
24
|
+
await putUserSetting(scopeId, SETTINGS_KEY, value);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
await putOrgSetting(scopeId, SETTINGS_KEY, value);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function builtinMcpCapabilitiesSettingsKey() {
|
|
31
|
+
return SETTINGS_KEY;
|
|
32
|
+
}
|
|
33
|
+
export async function listEnabledBuiltinMcpCapabilities(scope, scopeId) {
|
|
34
|
+
const raw = await readSetting(scope, scopeId);
|
|
35
|
+
if (!raw || !Array.isArray(raw.enabledIds))
|
|
36
|
+
return [];
|
|
37
|
+
return normalizeBuiltinMcpCapabilityIds(raw.enabledIds.map(String));
|
|
38
|
+
}
|
|
39
|
+
export async function setEnabledBuiltinMcpCapabilities(scope, scopeId, ids) {
|
|
40
|
+
const enabledIds = normalizeBuiltinMcpCapabilityIds(ids);
|
|
41
|
+
await writeSetting(scope, scopeId, enabledIds);
|
|
42
|
+
return enabledIds;
|
|
43
|
+
}
|
|
44
|
+
export async function setBuiltinMcpCapabilityEnabled(scope, scopeId, id, enabled) {
|
|
45
|
+
const capability = getBuiltinMcpCapability(id);
|
|
46
|
+
if (!capability)
|
|
47
|
+
return null;
|
|
48
|
+
const existing = await listEnabledBuiltinMcpCapabilities(scope, scopeId);
|
|
49
|
+
const next = enabled
|
|
50
|
+
? normalizeBuiltinMcpCapabilityIds([...existing, capability.id])
|
|
51
|
+
: existing.filter((existingId) => existingId !== capability.id);
|
|
52
|
+
await writeSetting(scope, scopeId, next);
|
|
53
|
+
return next;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=builtin-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-store.js","sourceRoot":"","sources":["../../src/mcp-client/builtin-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,uBAAuB,EACvB,gCAAgC,GAEjC,MAAM,2BAA2B,CAAC;AAGnC,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAMhD,KAAK,UAAU,WAAW,CACxB,KAAqB,EACrB,OAAe;IAEf,OAAO,KAAK,KAAK,MAAM;QACrB,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC;QACvC,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,KAAqB,EACrB,OAAe,EACf,UAAoC;IAEpC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,MAAM,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAChD,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAA2D;QACpE,UAAU;KACX,CAAC;IACF,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,MAAM,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iCAAiC;IAC/C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,KAAqB,EACrB,OAAe;IAEf,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IACtD,OAAO,gCAAgC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,KAAqB,EACrB,OAAe,EACf,GAAsB;IAEtB,MAAM,UAAU,GAAG,gCAAgC,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,KAAqB,EACrB,OAAe,EACf,EAAU,EACV,OAAgB;IAEhB,MAAM,UAAU,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,QAAQ,GAAG,MAAM,iCAAiC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,OAAO;QAClB,CAAC,CAAC,gCAAgC,CAAC,CAAC,GAAG,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import {\n getUserSetting,\n putUserSetting,\n deleteUserSetting,\n} from \"../settings/user-settings.js\";\nimport {\n getOrgSetting,\n putOrgSetting,\n deleteOrgSetting,\n} from \"../settings/org-settings.js\";\nimport {\n getBuiltinMcpCapability,\n normalizeBuiltinMcpCapabilityIds,\n type BuiltinMcpCapabilityId,\n} from \"./builtin-capabilities.js\";\nimport type { RemoteMcpScope } from \"./remote-store.js\";\n\nconst SETTINGS_KEY = \"mcp-builtin-capabilities\";\n\nexport interface StoredBuiltinMcpCapabilities {\n enabledIds: BuiltinMcpCapabilityId[];\n}\n\nasync function readSetting(\n scope: RemoteMcpScope,\n scopeId: string,\n): Promise<Record<string, unknown> | null> {\n return scope === \"user\"\n ? getUserSetting(scopeId, SETTINGS_KEY)\n : getOrgSetting(scopeId, SETTINGS_KEY);\n}\n\nasync function writeSetting(\n scope: RemoteMcpScope,\n scopeId: string,\n enabledIds: BuiltinMcpCapabilityId[],\n): Promise<void> {\n if (enabledIds.length === 0) {\n if (scope === \"user\") {\n await deleteUserSetting(scopeId, SETTINGS_KEY);\n } else {\n await deleteOrgSetting(scopeId, SETTINGS_KEY);\n }\n return;\n }\n const value: StoredBuiltinMcpCapabilities & Record<string, unknown> = {\n enabledIds,\n };\n if (scope === \"user\") {\n await putUserSetting(scopeId, SETTINGS_KEY, value);\n } else {\n await putOrgSetting(scopeId, SETTINGS_KEY, value);\n }\n}\n\nexport function builtinMcpCapabilitiesSettingsKey(): string {\n return SETTINGS_KEY;\n}\n\nexport async function listEnabledBuiltinMcpCapabilities(\n scope: RemoteMcpScope,\n scopeId: string,\n): Promise<BuiltinMcpCapabilityId[]> {\n const raw = await readSetting(scope, scopeId);\n if (!raw || !Array.isArray(raw.enabledIds)) return [];\n return normalizeBuiltinMcpCapabilityIds(raw.enabledIds.map(String));\n}\n\nexport async function setEnabledBuiltinMcpCapabilities(\n scope: RemoteMcpScope,\n scopeId: string,\n ids: readonly string[],\n): Promise<BuiltinMcpCapabilityId[]> {\n const enabledIds = normalizeBuiltinMcpCapabilityIds(ids);\n await writeSetting(scope, scopeId, enabledIds);\n return enabledIds;\n}\n\nexport async function setBuiltinMcpCapabilityEnabled(\n scope: RemoteMcpScope,\n scopeId: string,\n id: string,\n enabled: boolean,\n): Promise<BuiltinMcpCapabilityId[] | null> {\n const capability = getBuiltinMcpCapability(id);\n if (!capability) return null;\n const existing = await listEnabledBuiltinMcpCapabilities(scope, scopeId);\n const next = enabled\n ? normalizeBuiltinMcpCapabilityIds([...existing, capability.id])\n : existing.filter((existingId) => existingId !== capability.id);\n await writeSetting(scope, scopeId, next);\n return next;\n}\n"]}
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
export { loadMcpConfig, autoDetectMcpConfig, type McpConfig, type McpServerConfig, } from "./config.js";
|
|
8
8
|
export { McpClientManager, parseMcpToolName, MCP_TOOL_PREFIX, type McpTool, type McpClientManagerOptions, } from "./manager.js";
|
|
9
9
|
export { listRemoteServers, addRemoteServer, removeRemoteServer, validateRemoteUrl, normalizeServerName, mergedConfigKey, parseMergedKey, hashEmail, toHttpServerConfig, toHttpServerConfigAsync, materializeHeaders, type RemoteMcpScope, type StoredRemoteMcpServer, } from "./remote-store.js";
|
|
10
|
-
export {
|
|
10
|
+
export { BUILTIN_MCP_CAPABILITIES, getBuiltinMcpCapability, isBuiltinMcpCapabilityAvailable, normalizeBuiltinMcpCapabilityIds, toBuiltinMcpServerConfig, type BuiltinMcpCapability, type BuiltinMcpCapabilityId, } from "./builtin-capabilities.js";
|
|
11
|
+
export { builtinMcpCapabilitiesSettingsKey, listEnabledBuiltinMcpCapabilities, setEnabledBuiltinMcpCapabilities, setBuiltinMcpCapabilityEnabled, type StoredBuiltinMcpCapabilities, } from "./builtin-store.js";
|
|
12
|
+
export { mountMcpServersRoutes, buildMergedConfig, builtinMergedConfigKey, type ClientBuiltinCapability, } from "./routes.js";
|
|
11
13
|
export { mountMcpHubRoutes, listHubServers, getHubStatus, isHubServeEnabled, isHubConsumeEnabled, type HubServerRecord, type HubServersResponse, } from "./hub-routes.js";
|
|
12
14
|
export { fetchHubServers } from "./hub-client.js";
|
|
13
15
|
export { isMcpToolAllowedForRequest } from "./visibility.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp-client/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,KAAK,OAAO,EACZ,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp-client/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,KAAK,OAAO,EACZ,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,+BAA+B,EAC/B,gCAAgC,EAChC,wBAAwB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,GAC5B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,iCAAiC,EACjC,iCAAiC,EACjC,gCAAgC,EAChC,8BAA8B,EAC9B,KAAK,4BAA4B,GAClC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAG7D;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,cAAc,CAAC;AAE9D,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAM7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAClC,IAAI,CAaN"}
|
package/dist/mcp-client/index.js
CHANGED
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
export { loadMcpConfig, autoDetectMcpConfig, } from "./config.js";
|
|
8
8
|
export { McpClientManager, parseMcpToolName, MCP_TOOL_PREFIX, } from "./manager.js";
|
|
9
9
|
export { listRemoteServers, addRemoteServer, removeRemoteServer, validateRemoteUrl, normalizeServerName, mergedConfigKey, parseMergedKey, hashEmail, toHttpServerConfig, toHttpServerConfigAsync, materializeHeaders, } from "./remote-store.js";
|
|
10
|
-
export {
|
|
10
|
+
export { BUILTIN_MCP_CAPABILITIES, getBuiltinMcpCapability, isBuiltinMcpCapabilityAvailable, normalizeBuiltinMcpCapabilityIds, toBuiltinMcpServerConfig, } from "./builtin-capabilities.js";
|
|
11
|
+
export { builtinMcpCapabilitiesSettingsKey, listEnabledBuiltinMcpCapabilities, setEnabledBuiltinMcpCapabilities, setBuiltinMcpCapabilityEnabled, } from "./builtin-store.js";
|
|
12
|
+
export { mountMcpServersRoutes, buildMergedConfig, builtinMergedConfigKey, } from "./routes.js";
|
|
11
13
|
export { mountMcpHubRoutes, listHubServers, getHubStatus, isHubServeEnabled, isHubConsumeEnabled, } from "./hub-routes.js";
|
|
12
14
|
export { fetchHubServers } from "./hub-client.js";
|
|
13
15
|
export { isMcpToolAllowedForRequest } from "./visibility.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp-client/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,mBAAmB,GAGpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAGhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,GAGnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp-client/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MCP client module — symmetric counterpart to `@agent-native/core/mcp`\n * (the MCP server). Connects to local MCP servers configured in\n * `mcp.config.json` or the `MCP_SERVERS` env var and exposes their tools\n * to the agent-chat tool-use loop.\n */\n\nexport {\n loadMcpConfig,\n autoDetectMcpConfig,\n type McpConfig,\n type McpServerConfig,\n} from \"./config.js\";\n\nexport {\n McpClientManager,\n parseMcpToolName,\n MCP_TOOL_PREFIX,\n type McpTool,\n type McpClientManagerOptions,\n} from \"./manager.js\";\n\nexport {\n listRemoteServers,\n addRemoteServer,\n removeRemoteServer,\n validateRemoteUrl,\n normalizeServerName,\n mergedConfigKey,\n parseMergedKey,\n hashEmail,\n toHttpServerConfig,\n toHttpServerConfigAsync,\n materializeHeaders,\n type RemoteMcpScope,\n type StoredRemoteMcpServer,\n} from \"./remote-store.js\";\n\nexport {\n BUILTIN_MCP_CAPABILITIES,\n getBuiltinMcpCapability,\n isBuiltinMcpCapabilityAvailable,\n normalizeBuiltinMcpCapabilityIds,\n toBuiltinMcpServerConfig,\n type BuiltinMcpCapability,\n type BuiltinMcpCapabilityId,\n} from \"./builtin-capabilities.js\";\n\nexport {\n builtinMcpCapabilitiesSettingsKey,\n listEnabledBuiltinMcpCapabilities,\n setEnabledBuiltinMcpCapabilities,\n setBuiltinMcpCapabilityEnabled,\n type StoredBuiltinMcpCapabilities,\n} from \"./builtin-store.js\";\n\nexport {\n mountMcpServersRoutes,\n buildMergedConfig,\n builtinMergedConfigKey,\n type ClientBuiltinCapability,\n} from \"./routes.js\";\n\nexport {\n mountMcpHubRoutes,\n listHubServers,\n getHubStatus,\n isHubServeEnabled,\n isHubConsumeEnabled,\n type HubServerRecord,\n type HubServersResponse,\n} from \"./hub-routes.js\";\n\nexport { fetchHubServers } from \"./hub-client.js\";\n\nexport { isMcpToolAllowedForRequest } from \"./visibility.js\";\nimport { isMcpToolAllowedForRequest } from \"./visibility.js\";\n\n/**\n * Convert MCP tools into `ActionEntry` values suitable for registration in\n * the agent's action registry. Each tool is marked `http: false` so it's\n * never auto-mounted as an HTTP endpoint — MCP tools are agent-only.\n */\nimport type { ActionEntry } from \"../agent/production-agent.js\";\nimport type { McpClientManager, McpTool } from \"./manager.js\";\n\nexport function mcpToolsToActionEntries(\n manager: McpClientManager,\n): Record<string, ActionEntry> {\n const entries: Record<string, ActionEntry> = {};\n for (const tool of manager.getTools()) {\n entries[tool.name] = mcpToolToActionEntry(manager, tool);\n }\n return entries;\n}\n\n/**\n * Mutate a target action dict in place so it matches the current MCP tool set:\n * - adds new `mcp__*` keys that aren't in target,\n * - removes `mcp__*` keys that no longer exist in the manager,\n * - leaves non-MCP keys untouched.\n *\n * Used by the agent-chat plugin to keep its `prodActions` / `devActions`\n * registries in sync after `McpClientManager.reconfigure()` runs.\n */\nexport function syncMcpActionEntries(\n manager: McpClientManager,\n target: Record<string, ActionEntry>,\n): void {\n const current = new Set<string>();\n for (const tool of manager.getTools()) {\n current.add(tool.name);\n if (!target[tool.name]) {\n target[tool.name] = mcpToolToActionEntry(manager, tool);\n }\n }\n for (const key of Object.keys(target)) {\n if (key.startsWith(\"mcp__\") && !current.has(key)) {\n delete target[key];\n }\n }\n}\n\nfunction mcpToolToActionEntry(\n manager: McpClientManager,\n tool: McpTool,\n): ActionEntry {\n return {\n tool: {\n description: tool.description,\n parameters: tool.inputSchema as any,\n },\n http: false,\n run: async (args: Record<string, string>) => {\n // Defense-in-depth: even if a cross-scope MCP tool somehow makes it\n // into the LLM's visible tool list, reject invocation here so we never\n // execute a user's credentials on behalf of another user.\n if (!isMcpToolAllowedForRequest(tool.name)) {\n return `Error: MCP tool ${tool.name} is not available in the current request scope.`;\n }\n try {\n const result = await manager.callTool(tool.name, args);\n // MCP tool results are typically `{ content: [{ type: \"text\", text: ... }], isError? }`.\n // Flatten text content for the agent's string-based tool result slot.\n if (\n result &&\n typeof result === \"object\" &&\n Array.isArray((result as any).content)\n ) {\n const parts = (result as any).content as Array<Record<string, any>>;\n const text = parts\n .map((p) => {\n if (p?.type === \"text\" && typeof p.text === \"string\")\n return p.text;\n if (p?.type === \"image\")\n return `[image: ${p?.mimeType ?? \"unknown\"}]`;\n return JSON.stringify(p);\n })\n .join(\"\\n\");\n if ((result as any).isError) return `Error: ${text}`;\n return text || \"(no output)\";\n }\n return typeof result === \"string\" ? result : JSON.stringify(result);\n } catch (err: any) {\n return `Error calling MCP tool ${tool.name}: ${err?.message ?? err}`;\n }\n },\n };\n}\n"]}
|
|
@@ -10,9 +10,12 @@
|
|
|
10
10
|
* DELETE /_agent-native/mcp/servers/:id remove a server (scope via ?scope=)
|
|
11
11
|
* POST /_agent-native/mcp/servers/:id/test dry-run connect (no persist)
|
|
12
12
|
* POST /_agent-native/mcp/servers/test dry-run a URL before persisting
|
|
13
|
+
* GET /_agent-native/mcp/builtin list built-in capability toggles
|
|
14
|
+
* POST /_agent-native/mcp/builtin update built-in capability toggles
|
|
13
15
|
*/
|
|
14
16
|
import type { McpClientManager } from "./manager.js";
|
|
15
17
|
import type { McpConfig } from "./config.js";
|
|
18
|
+
import { type BuiltinMcpCapability, type BuiltinMcpCapabilityId } from "./builtin-capabilities.js";
|
|
16
19
|
import { type RemoteMcpScope } from "./remote-store.js";
|
|
17
20
|
export { formatMcpConnectError } from "./errors.js";
|
|
18
21
|
export interface ClientServer {
|
|
@@ -29,6 +32,30 @@ export interface ClientServer {
|
|
|
29
32
|
mergedId: string;
|
|
30
33
|
status: ServerStatus;
|
|
31
34
|
}
|
|
35
|
+
export interface ClientBuiltinCapability {
|
|
36
|
+
id: BuiltinMcpCapabilityId;
|
|
37
|
+
serverId: string;
|
|
38
|
+
name: string;
|
|
39
|
+
description: string;
|
|
40
|
+
command: string;
|
|
41
|
+
args: string[];
|
|
42
|
+
exclusiveGroup?: string;
|
|
43
|
+
available: boolean;
|
|
44
|
+
unavailableReason?: string;
|
|
45
|
+
notes?: string;
|
|
46
|
+
enabled: {
|
|
47
|
+
user: boolean;
|
|
48
|
+
org: boolean;
|
|
49
|
+
};
|
|
50
|
+
mergedIds: {
|
|
51
|
+
user?: string;
|
|
52
|
+
org?: string;
|
|
53
|
+
};
|
|
54
|
+
status: {
|
|
55
|
+
user?: ServerStatus;
|
|
56
|
+
org?: ServerStatus;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
32
59
|
type ServerStatus = {
|
|
33
60
|
state: "connected";
|
|
34
61
|
toolCount: number;
|
|
@@ -38,6 +65,7 @@ type ServerStatus = {
|
|
|
38
65
|
} | {
|
|
39
66
|
state: "unknown";
|
|
40
67
|
};
|
|
68
|
+
export declare function builtinMergedConfigKey(scope: RemoteMcpScope, capability: BuiltinMcpCapability, ownerId: string): string;
|
|
41
69
|
/**
|
|
42
70
|
* Build the merged MCP config the manager should run with: file/env config
|
|
43
71
|
* plus **every** user-scope and org-scope remote server persisted in the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/mcp-client/routes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/mcp-client/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAeH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AAG9D,OAAO,EAML,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC5B,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EAOL,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AA+BpD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,sBAAsB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAAC;IACzC,SAAS,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,YAAY,CAAC;QAAC,GAAG,CAAC,EAAE,YAAY,CAAA;KAAE,CAAC;CACrD;AAED,KAAK,YAAY,GACb;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AA6BzB,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,oBAAoB,EAChC,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA2EnE;AAmCD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,gBAAgB,GACxB,IAAI,CAyEN"}
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* DELETE /_agent-native/mcp/servers/:id remove a server (scope via ?scope=)
|
|
11
11
|
* POST /_agent-native/mcp/servers/:id/test dry-run connect (no persist)
|
|
12
12
|
* POST /_agent-native/mcp/servers/test dry-run a URL before persisting
|
|
13
|
+
* GET /_agent-native/mcp/builtin list built-in capability toggles
|
|
14
|
+
* POST /_agent-native/mcp/builtin update built-in capability toggles
|
|
13
15
|
*/
|
|
14
16
|
import { defineEventHandler, getMethod, getQuery, setResponseHeader, setResponseStatus, } from "h3";
|
|
15
17
|
import { getH3App } from "../server/framework-request-handler.js";
|
|
@@ -19,6 +21,8 @@ import { getSession } from "../server/auth.js";
|
|
|
19
21
|
import { getAllSettings } from "../settings/store.js";
|
|
20
22
|
import { loadMcpConfig, autoDetectMcpConfig } from "./config.js";
|
|
21
23
|
import { formatMcpConnectError } from "./errors.js";
|
|
24
|
+
import { BUILTIN_MCP_CAPABILITIES, getBuiltinMcpCapability, isBuiltinMcpCapabilityAvailable, normalizeBuiltinMcpCapabilityIds, toBuiltinMcpServerConfig, } from "./builtin-capabilities.js";
|
|
25
|
+
import { builtinMcpCapabilitiesSettingsKey, listEnabledBuiltinMcpCapabilities, setBuiltinMcpCapabilityEnabled, setEnabledBuiltinMcpCapabilities, } from "./builtin-store.js";
|
|
22
26
|
import { addRemoteServer, listRemoteServers, mergedConfigKey, removeRemoteServer, toHttpServerConfigAsync, validateRemoteUrl, } from "./remote-store.js";
|
|
23
27
|
import { fetchHubServers } from "./hub-client.js";
|
|
24
28
|
export { formatMcpConnectError } from "./errors.js";
|
|
@@ -58,6 +62,18 @@ function statusFor(manager, mergedId) {
|
|
|
58
62
|
}
|
|
59
63
|
return { state: "unknown" };
|
|
60
64
|
}
|
|
65
|
+
function pseudoStoredBuiltin(capability) {
|
|
66
|
+
return {
|
|
67
|
+
id: `builtin_${capability.id}`,
|
|
68
|
+
name: capability.serverId,
|
|
69
|
+
url: `builtin:${capability.id}`,
|
|
70
|
+
description: capability.description,
|
|
71
|
+
createdAt: 0,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function builtinMergedConfigKey(scope, capability, ownerId) {
|
|
75
|
+
return mergedConfigKey(scope, pseudoStoredBuiltin(capability), ownerId);
|
|
76
|
+
}
|
|
61
77
|
/**
|
|
62
78
|
* Build the merged MCP config the manager should run with: file/env config
|
|
63
79
|
* plus **every** user-scope and org-scope remote server persisted in the
|
|
@@ -102,6 +118,34 @@ export async function buildMergedConfig() {
|
|
|
102
118
|
await toHttpServerConfigAsync(scope, ownerId, stored);
|
|
103
119
|
}
|
|
104
120
|
}
|
|
121
|
+
for (const [fullKey, value] of Object.entries(all)) {
|
|
122
|
+
const settingsKey = builtinMcpCapabilitiesSettingsKey();
|
|
123
|
+
const userMatch = new RegExp(`^u:([^:]+):${settingsKey}$`).exec(fullKey);
|
|
124
|
+
const orgMatch = new RegExp(`^o:([^:]+):${settingsKey}$`).exec(fullKey);
|
|
125
|
+
let scope = null;
|
|
126
|
+
let ownerId = null;
|
|
127
|
+
if (userMatch) {
|
|
128
|
+
scope = "user";
|
|
129
|
+
ownerId = userMatch[1];
|
|
130
|
+
}
|
|
131
|
+
else if (orgMatch) {
|
|
132
|
+
scope = "org";
|
|
133
|
+
ownerId = orgMatch[1];
|
|
134
|
+
}
|
|
135
|
+
if (!scope || !ownerId)
|
|
136
|
+
continue;
|
|
137
|
+
const enabledIds = normalizeBuiltinMcpCapabilityIds(Array.isArray(value.enabledIds)
|
|
138
|
+
? value.enabledIds.map(String)
|
|
139
|
+
: []);
|
|
140
|
+
for (const id of enabledIds) {
|
|
141
|
+
const capability = getBuiltinMcpCapability(id);
|
|
142
|
+
if (!capability || !isBuiltinMcpCapabilityAvailable(capability)) {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
servers[builtinMergedConfigKey(scope, capability, ownerId)] =
|
|
146
|
+
toBuiltinMcpServerConfig(capability);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
105
149
|
// Hub-consume: if this app is configured to consume from a remote hub
|
|
106
150
|
// (AGENT_NATIVE_MCP_HUB_URL + AGENT_NATIVE_MCP_HUB_TOKEN), pull its
|
|
107
151
|
// org-scope servers and merge. Hub entries use `hub_<orgId>_<name>` so
|
|
@@ -188,11 +232,156 @@ export function mountMcpServersRoutes(nitroApp, manager) {
|
|
|
188
232
|
setResponseStatus(event, 404);
|
|
189
233
|
return { error: "Not found" };
|
|
190
234
|
}));
|
|
235
|
+
getH3App(nitroApp).use("/_agent-native/mcp/builtin", defineEventHandler(async (event) => {
|
|
236
|
+
const method = getMethod(event);
|
|
237
|
+
const pathname = (event.url?.pathname || "")
|
|
238
|
+
.replace(/^\/+/, "")
|
|
239
|
+
.replace(/\/+$/, "");
|
|
240
|
+
const parts = pathname ? pathname.split("/") : [];
|
|
241
|
+
setResponseHeader(event, "Content-Type", "application/json");
|
|
242
|
+
if (parts.length === 0) {
|
|
243
|
+
if (method === "GET")
|
|
244
|
+
return handleBuiltinList(event, manager);
|
|
245
|
+
if (method === "POST")
|
|
246
|
+
return handleBuiltinUpdate(event, manager);
|
|
247
|
+
setResponseStatus(event, 405);
|
|
248
|
+
return { error: "Method not allowed" };
|
|
249
|
+
}
|
|
250
|
+
setResponseStatus(event, 404);
|
|
251
|
+
return { error: "Not found" };
|
|
252
|
+
}));
|
|
191
253
|
}
|
|
192
254
|
catch (err) {
|
|
193
|
-
console.warn(`[mcp-client] Failed to mount
|
|
255
|
+
console.warn(`[mcp-client] Failed to mount MCP routes: ${err?.message ?? err}`);
|
|
194
256
|
}
|
|
195
257
|
}
|
|
258
|
+
async function handleBuiltinList(event, manager) {
|
|
259
|
+
const { email, orgId, role } = await resolveContextForRequest(event);
|
|
260
|
+
const userEnabled = email
|
|
261
|
+
? await listEnabledBuiltinMcpCapabilities("user", email)
|
|
262
|
+
: [];
|
|
263
|
+
const orgEnabled = orgId
|
|
264
|
+
? await listEnabledBuiltinMcpCapabilities("org", orgId)
|
|
265
|
+
: [];
|
|
266
|
+
return {
|
|
267
|
+
capabilities: BUILTIN_MCP_CAPABILITIES.map((capability) => {
|
|
268
|
+
const available = isBuiltinMcpCapabilityAvailable(capability);
|
|
269
|
+
const userMergedId = email
|
|
270
|
+
? builtinMergedConfigKey("user", capability, email)
|
|
271
|
+
: undefined;
|
|
272
|
+
const orgMergedId = orgId
|
|
273
|
+
? builtinMergedConfigKey("org", capability, orgId)
|
|
274
|
+
: undefined;
|
|
275
|
+
return {
|
|
276
|
+
id: capability.id,
|
|
277
|
+
serverId: capability.serverId,
|
|
278
|
+
name: capability.name,
|
|
279
|
+
description: capability.description,
|
|
280
|
+
command: capability.command,
|
|
281
|
+
args: capability.args,
|
|
282
|
+
exclusiveGroup: capability.exclusiveGroup,
|
|
283
|
+
available,
|
|
284
|
+
unavailableReason: available
|
|
285
|
+
? undefined
|
|
286
|
+
: `Only available on ${capability.platforms?.join(", ")}`,
|
|
287
|
+
notes: capability.notes,
|
|
288
|
+
enabled: {
|
|
289
|
+
user: userEnabled.includes(capability.id),
|
|
290
|
+
org: orgEnabled.includes(capability.id),
|
|
291
|
+
},
|
|
292
|
+
mergedIds: {
|
|
293
|
+
user: userMergedId,
|
|
294
|
+
org: orgMergedId,
|
|
295
|
+
},
|
|
296
|
+
status: {
|
|
297
|
+
user: userMergedId && userEnabled.includes(capability.id)
|
|
298
|
+
? statusFor(manager, userMergedId)
|
|
299
|
+
: undefined,
|
|
300
|
+
org: orgMergedId && orgEnabled.includes(capability.id)
|
|
301
|
+
? statusFor(manager, orgMergedId)
|
|
302
|
+
: undefined,
|
|
303
|
+
},
|
|
304
|
+
};
|
|
305
|
+
}),
|
|
306
|
+
user: { enabledIds: userEnabled },
|
|
307
|
+
org: { enabledIds: orgEnabled, orgId, role },
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
async function handleBuiltinUpdate(event, manager) {
|
|
311
|
+
const body = (await readBody(event).catch(() => ({})));
|
|
312
|
+
const scope = body.scope === "org" ? "org" : body.scope === "user" ? "user" : null;
|
|
313
|
+
if (!scope) {
|
|
314
|
+
setResponseStatus(event, 400);
|
|
315
|
+
return { error: 'scope must be "user" or "org"' };
|
|
316
|
+
}
|
|
317
|
+
const { email, orgId, role } = await resolveContextForRequest(event);
|
|
318
|
+
let scopeId = null;
|
|
319
|
+
if (scope === "user") {
|
|
320
|
+
scopeId = email;
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
if (!orgId) {
|
|
324
|
+
setResponseStatus(event, 400);
|
|
325
|
+
return {
|
|
326
|
+
error: "You must belong to an organization to change org-scope built-ins",
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
if (role !== "owner" && role !== "admin") {
|
|
330
|
+
setResponseStatus(event, 403);
|
|
331
|
+
return {
|
|
332
|
+
error: "Only owners and admins can change org-scope MCP built-ins",
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
scopeId = orgId;
|
|
336
|
+
}
|
|
337
|
+
if (!scopeId) {
|
|
338
|
+
setResponseStatus(event, 401);
|
|
339
|
+
return { error: "Authentication required" };
|
|
340
|
+
}
|
|
341
|
+
if (Array.isArray(body.enabledIds)) {
|
|
342
|
+
for (const rawId of body.enabledIds) {
|
|
343
|
+
const error = validateBuiltinCapabilityForEnable(String(rawId));
|
|
344
|
+
if (error) {
|
|
345
|
+
setResponseStatus(event, 400);
|
|
346
|
+
return { error };
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
await setEnabledBuiltinMcpCapabilities(scope, scopeId, body.enabledIds.map(String));
|
|
350
|
+
}
|
|
351
|
+
else if (typeof body.id === "string" && typeof body.enabled === "boolean") {
|
|
352
|
+
if (body.enabled) {
|
|
353
|
+
const error = validateBuiltinCapabilityForEnable(body.id);
|
|
354
|
+
if (error) {
|
|
355
|
+
setResponseStatus(event, 400);
|
|
356
|
+
return { error };
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
else if (!getBuiltinMcpCapability(body.id)) {
|
|
360
|
+
setResponseStatus(event, 400);
|
|
361
|
+
return { error: `Unknown built-in MCP capability "${body.id}"` };
|
|
362
|
+
}
|
|
363
|
+
const result = await setBuiltinMcpCapabilityEnabled(scope, scopeId, body.id, body.enabled);
|
|
364
|
+
if (!result) {
|
|
365
|
+
setResponseStatus(event, 400);
|
|
366
|
+
return { error: `Unknown built-in MCP capability "${body.id}"` };
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
setResponseStatus(event, 400);
|
|
371
|
+
return { error: "Provide enabledIds or id + enabled" };
|
|
372
|
+
}
|
|
373
|
+
await reconfigureManager(manager);
|
|
374
|
+
return handleBuiltinList(event, manager);
|
|
375
|
+
}
|
|
376
|
+
function validateBuiltinCapabilityForEnable(id) {
|
|
377
|
+
const capability = getBuiltinMcpCapability(id);
|
|
378
|
+
if (!capability)
|
|
379
|
+
return `Unknown built-in MCP capability "${id}"`;
|
|
380
|
+
if (!isBuiltinMcpCapabilityAvailable(capability)) {
|
|
381
|
+
return `${capability.name} is only available on ${capability.platforms?.join(", ")}`;
|
|
382
|
+
}
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
196
385
|
async function handleList(event, manager) {
|
|
197
386
|
const { email, orgId, role } = await resolveContextForRequest(event);
|
|
198
387
|
const userServers = email ? await listRemoteServers("user", email) : [];
|
|
@@ -296,6 +485,11 @@ async function handleDelete(event, manager, id) {
|
|
|
296
485
|
return { ok: true };
|
|
297
486
|
}
|
|
298
487
|
async function handleTestUrl(event) {
|
|
488
|
+
const { email, orgId } = await resolveContextForRequest(event);
|
|
489
|
+
if (!email && !orgId) {
|
|
490
|
+
setResponseStatus(event, 401);
|
|
491
|
+
return { error: "Authentication required" };
|
|
492
|
+
}
|
|
299
493
|
const body = (await readBody(event).catch(() => ({})));
|
|
300
494
|
const url = typeof body.url === "string" ? body.url : "";
|
|
301
495
|
const check = validateRemoteUrl(url);
|