@agent-native/core 0.7.4 → 0.7.7
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 +6 -5
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +8 -4
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/types.d.ts +1 -1
- package/dist/agent/engine/types.d.ts.map +1 -1
- package/dist/agent/production-agent.d.ts +7 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +153 -118
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +4 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +46 -25
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +12 -3
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +25 -4
- package/dist/agent/run-store.js.map +1 -1
- package/dist/chat-threads/store.d.ts +13 -0
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +66 -10
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +8 -1
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/info.d.ts +2 -0
- package/dist/cli/info.d.ts.map +1 -0
- package/dist/cli/info.js +103 -0
- package/dist/cli/info.js.map +1 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +249 -85
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +12 -1
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +3 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +46 -2
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts +21 -0
- package/dist/client/composer/VoiceButton.d.ts.map +1 -0
- package/dist/client/composer/VoiceButton.js +51 -0
- package/dist/client/composer/VoiceButton.js.map +1 -0
- package/dist/client/composer/useVoiceDictation.d.ts +38 -0
- package/dist/client/composer/useVoiceDictation.d.ts.map +1 -0
- package/dist/client/composer/useVoiceDictation.js +398 -0
- package/dist/client/composer/useVoiceDictation.js.map +1 -0
- package/dist/client/onboarding/OnboardingPanel.js +2 -2
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +5 -4
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +90 -24
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/resources/McpServerDetail.d.ts +15 -0
- package/dist/client/resources/McpServerDetail.d.ts.map +1 -0
- package/dist/client/resources/McpServerDetail.js +65 -0
- package/dist/client/resources/McpServerDetail.js.map +1 -0
- package/dist/client/resources/ResourceEditor.js +1 -1
- package/dist/client/resources/ResourceEditor.js.map +1 -1
- package/dist/client/resources/ResourceTree.d.ts +6 -1
- package/dist/client/resources/ResourceTree.d.ts.map +1 -1
- package/dist/client/resources/ResourceTree.js +18 -7
- 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 +191 -20
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/use-mcp-servers.d.ts +68 -0
- package/dist/client/resources/use-mcp-servers.d.ts.map +1 -0
- package/dist/client/resources/use-mcp-servers.js +83 -0
- package/dist/client/resources/use-mcp-servers.js.map +1 -0
- package/dist/client/resources/use-resources.d.ts +39 -1
- package/dist/client/resources/use-resources.d.ts.map +1 -1
- package/dist/client/resources/use-resources.js +102 -0
- 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 +3 -2
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts +14 -0
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -0
- package/dist/client/settings/VoiceTranscriptionSection.js +111 -0
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -0
- package/dist/client/sharing/ShareButton.d.ts +6 -4
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +299 -34
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.d.ts +22 -4
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sharing/ShareDialog.js +170 -148
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/client/sharing/VisibilityBadge.d.ts.map +1 -1
- package/dist/client/sharing/VisibilityBadge.js +1 -2
- package/dist/client/sharing/VisibilityBadge.js.map +1 -1
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +20 -1
- package/dist/client/use-action.js.map +1 -1
- package/dist/db/migrations.d.ts +18 -3
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +25 -3
- package/dist/db/migrations.js.map +1 -1
- package/dist/deploy/workspace-core.js +2 -2
- package/dist/mcp-client/config.d.ts +20 -1
- package/dist/mcp-client/config.d.ts.map +1 -1
- package/dist/mcp-client/config.js +28 -11
- package/dist/mcp-client/config.js.map +1 -1
- package/dist/mcp-client/hub-client.d.ts +38 -0
- package/dist/mcp-client/hub-client.d.ts.map +1 -0
- package/dist/mcp-client/hub-client.js +147 -0
- package/dist/mcp-client/hub-client.js.map +1 -0
- package/dist/mcp-client/hub-routes.d.ts +42 -0
- package/dist/mcp-client/hub-routes.d.ts.map +1 -0
- package/dist/mcp-client/hub-routes.js +114 -0
- package/dist/mcp-client/hub-routes.js.map +1 -0
- package/dist/mcp-client/index.d.ts +15 -0
- package/dist/mcp-client/index.d.ts.map +1 -1
- package/dist/mcp-client/index.js +35 -0
- package/dist/mcp-client/index.js.map +1 -1
- package/dist/mcp-client/manager.d.ts +54 -8
- package/dist/mcp-client/manager.d.ts.map +1 -1
- package/dist/mcp-client/manager.js +276 -59
- package/dist/mcp-client/manager.js.map +1 -1
- package/dist/mcp-client/remote-store.d.ts +102 -0
- package/dist/mcp-client/remote-store.d.ts.map +1 -0
- package/dist/mcp-client/remote-store.js +200 -0
- package/dist/mcp-client/remote-store.js.map +1 -0
- package/dist/mcp-client/routes.d.ts +55 -0
- package/dist/mcp-client/routes.d.ts.map +1 -0
- package/dist/mcp-client/routes.js +384 -0
- package/dist/mcp-client/routes.js.map +1 -0
- package/dist/mcp-client/visibility.d.ts +16 -0
- package/dist/mcp-client/visibility.d.ts.map +1 -0
- package/dist/mcp-client/visibility.js +45 -0
- package/dist/mcp-client/visibility.js.map +1 -0
- package/dist/org/context.js +2 -2
- package/dist/org/context.js.map +1 -1
- package/dist/org/handlers.js +2 -2
- package/dist/org/handlers.js.map +1 -1
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +30 -0
- package/dist/resources/handlers.js.map +1 -1
- package/dist/secrets/register-framework-secrets.d.ts +13 -0
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -0
- package/dist/secrets/register-framework-secrets.js +59 -0
- package/dist/secrets/register-framework-secrets.js.map +1 -0
- package/dist/secrets/register.d.ts.map +1 -1
- package/dist/secrets/register.js +8 -1
- package/dist/secrets/register.js.map +1 -1
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +22 -2
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +16 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +237 -70
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/app-url.d.ts.map +1 -1
- package/dist/server/app-url.js +11 -3
- package/dist/server/app-url.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +50 -0
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +99 -4
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +44 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +6 -0
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/date-utils.d.ts +15 -0
- package/dist/server/date-utils.d.ts.map +1 -0
- package/dist/server/date-utils.js +41 -0
- package/dist/server/date-utils.js.map +1 -0
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/onboarding-html.d.ts +3 -0
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +13 -3
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/request-context.d.ts +9 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +10 -0
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +26 -0
- package/dist/server/transcribe-voice.d.ts.map +1 -0
- package/dist/server/transcribe-voice.js +143 -0
- package/dist/server/transcribe-voice.js.map +1 -0
- package/dist/styles/agent-native.css +111 -0
- package/dist/tailwind.preset.d.ts +2 -2
- package/dist/tailwind.preset.d.ts.map +1 -1
- package/dist/tailwind.preset.js +27 -7
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/templates/default/app/global.css +65 -68
- package/dist/templates/default/components.json +1 -1
- package/dist/templates/default/package.json +2 -4
- package/dist/templates/default/vite.config.ts +3 -0
- package/dist/templates/workspace-core/package.json +1 -4
- package/dist/templates/workspace-core/src/index.ts +1 -1
- package/dist/templates/workspace-core/styles/tokens.css +22 -0
- package/dist/templates/workspace-core/tsconfig.json +1 -1
- package/dist/vite/client.d.ts +6 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +18 -1
- package/dist/vite/client.js.map +1 -1
- package/docs/content/actions.md +169 -74
- package/docs/content/agent-teams.md +139 -0
- package/docs/content/cloneable-saas.md +98 -0
- package/docs/content/creating-templates.md +9 -11
- package/docs/content/deployment.md +2 -9
- package/docs/content/drop-in-agent.md +200 -0
- package/docs/content/enterprise-workspace.md +22 -10
- package/docs/content/getting-started.md +34 -19
- package/docs/content/integrations.md +3 -3
- package/docs/content/key-concepts.md +50 -23
- package/docs/content/mcp-clients.md +71 -0
- package/docs/content/pure-agent-apps.md +69 -0
- package/docs/content/recurring-jobs.md +123 -0
- package/docs/content/skills-guide.md +8 -0
- package/docs/content/template-analytics.md +190 -0
- package/docs/content/template-calendar.md +151 -0
- package/docs/content/template-clips.md +55 -0
- package/docs/content/template-content.md +141 -0
- package/docs/content/template-dispatch.md +58 -0
- package/docs/content/template-forms.md +51 -0
- package/docs/content/template-mail.md +169 -0
- package/docs/content/template-slides.md +218 -0
- package/docs/content/template-starter.md +68 -0
- package/docs/content/template-video.md +162 -0
- package/docs/content/voice-input.md +59 -0
- package/docs/content/what-is-agent-native.md +142 -45
- package/docs/content/workspace-management.md +1 -0
- package/docs/content/{resources.md → workspace.md} +94 -42
- package/package.json +9 -16
- package/src/templates/default/app/global.css +65 -68
- package/src/templates/default/components.json +1 -1
- package/src/templates/default/package.json +2 -4
- package/src/templates/default/vite.config.ts +3 -0
- package/src/templates/workspace-core/package.json +1 -4
- package/src/templates/workspace-core/src/index.ts +1 -1
- package/src/templates/workspace-core/styles/tokens.css +22 -0
- package/src/templates/workspace-core/tsconfig.json +1 -1
- package/dist/templates/default/postcss.config.js +0 -6
- package/dist/templates/default/tailwind.config.ts +0 -7
- package/dist/templates/workspace-core/tailwind.preset.ts +0 -34
- package/src/templates/default/postcss.config.js +0 -6
- package/src/templates/default/tailwind.config.ts +0 -7
- package/src/templates/workspace-core/tailwind.preset.ts +0 -34
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,eAAe,GAChB,MAAM,aAAa,CAAC;AAIrB;;;GAGG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,GAAG;SACP,OAAO,CAAC,8BAA8B,EAAE,mBAAmB,CAAC;SAC5D,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;SAClC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,YAAY,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAC5C,sBAAsB;YACtB,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,CAAC,EAAE,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,GAAG,IAAI,EAAE,CAAC;YACV,IAAI,QAAQ,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC7B,GAAG,IAAI,IAAI,CAAC;gBACZ,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YACD,QAAQ,GAAG,CAAC,QAAQ,CAAC;YACrB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,OAAO;gBAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,GAAG,GAAG,EAAE,CAAC;YACT,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,GAAG,IAAI,EAAE,CAAC;QACV,CAAC,EAAE,CAAC;IACN,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,IAAI,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,GAAG,CAAC;AACb,CAAC;
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* An enterprise can sit many agent-native apps in one monorepo alongside a
|
|
5
5
|
* private "workspace core" package that provides shared plugins, skills,
|
|
6
|
-
* actions, AGENTS.md, and
|
|
6
|
+
* actions, AGENTS.md, and shared Tailwind v4 design tokens. Apps inherit everything from
|
|
7
7
|
* the workspace core without writing any boilerplate — this is the
|
|
8
8
|
* middle layer of the three-layer inheritance model:
|
|
9
9
|
*
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* actions/ (shared agent-callable actions)
|
|
23
23
|
* skills/ (shared .agents/skills/<name>/SKILL.md)
|
|
24
24
|
* AGENTS.md (enterprise-wide agent instructions)
|
|
25
|
-
*
|
|
25
|
+
* styles/tokens.css (brand tokens — `@import "@agent-native/core/styles/agent-native.css"` then your `@theme` overrides)
|
|
26
26
|
*/
|
|
27
27
|
import path from "path";
|
|
28
28
|
let _fs;
|
|
@@ -11,7 +11,12 @@
|
|
|
11
11
|
* This module is Node-only — it reads the filesystem. `loadMcpConfig()` guards
|
|
12
12
|
* every fs operation with `isNode()` so a non-Node bundle simply gets `null`.
|
|
13
13
|
*/
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Stdio transport — spawns a local binary and speaks MCP over its stdio.
|
|
16
|
+
* This is the default when no `type` field is set (backward compat).
|
|
17
|
+
*/
|
|
18
|
+
export interface McpStdioServerConfig {
|
|
19
|
+
type?: "stdio";
|
|
15
20
|
/** Executable or path to spawn over stdio */
|
|
16
21
|
command: string;
|
|
17
22
|
/** Arguments passed to the command */
|
|
@@ -23,6 +28,20 @@ export interface McpServerConfig {
|
|
|
23
28
|
/** Human-readable description (optional, shown in /mcp/status) */
|
|
24
29
|
description?: string;
|
|
25
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* HTTP transport — connects to a remote MCP server over Streamable HTTP
|
|
33
|
+
* (the transport hosted providers like Zapier / Cloudflare / Composio use).
|
|
34
|
+
*/
|
|
35
|
+
export interface McpHttpServerConfig {
|
|
36
|
+
type: "http";
|
|
37
|
+
/** Full URL of the remote MCP server's Streamable HTTP endpoint. */
|
|
38
|
+
url: string;
|
|
39
|
+
/** Extra headers to send with every request (e.g. Authorization). */
|
|
40
|
+
headers?: Record<string, string>;
|
|
41
|
+
/** Human-readable description (optional, shown in /mcp/status) */
|
|
42
|
+
description?: string;
|
|
43
|
+
}
|
|
44
|
+
export type McpServerConfig = McpStdioServerConfig | McpHttpServerConfig;
|
|
26
45
|
export interface McpConfig {
|
|
27
46
|
/** Map of server id → config */
|
|
28
47
|
servers: Record<string, McpServerConfig>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/mcp-client/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/mcp-client/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,mBAAmB,CAAC;AAEzE,MAAM,WAAW,SAAS;IACxB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8DD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAcjE;AAiCD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,GAAG,IAAI,CA0CtD"}
|
|
@@ -35,17 +35,33 @@ function parseConfig(raw, source) {
|
|
|
35
35
|
if (!cfg || typeof cfg !== "object")
|
|
36
36
|
continue;
|
|
37
37
|
const c = cfg;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
const description = typeof c.description === "string" ? c.description : undefined;
|
|
39
|
+
if (c.type === "http") {
|
|
40
|
+
if (typeof c.url !== "string" || !c.url)
|
|
41
|
+
continue;
|
|
42
|
+
valid[id] = {
|
|
43
|
+
type: "http",
|
|
44
|
+
url: c.url,
|
|
45
|
+
headers: c.headers && typeof c.headers === "object"
|
|
46
|
+
? Object.fromEntries(Object.entries(c.headers).map(([k, v]) => [k, String(v)]))
|
|
47
|
+
: undefined,
|
|
48
|
+
description,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
if (typeof c.command !== "string" || !c.command)
|
|
53
|
+
continue;
|
|
54
|
+
valid[id] = {
|
|
55
|
+
type: "stdio",
|
|
56
|
+
command: c.command,
|
|
57
|
+
args: Array.isArray(c.args) ? c.args.map(String) : undefined,
|
|
58
|
+
env: c.env && typeof c.env === "object"
|
|
59
|
+
? Object.fromEntries(Object.entries(c.env).map(([k, v]) => [k, String(v)]))
|
|
60
|
+
: undefined,
|
|
61
|
+
cwd: typeof c.cwd === "string" ? c.cwd : undefined,
|
|
62
|
+
description,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
49
65
|
}
|
|
50
66
|
if (Object.keys(valid).length === 0)
|
|
51
67
|
return null;
|
|
@@ -135,6 +151,7 @@ export function autoDetectMcpConfig() {
|
|
|
135
151
|
return {
|
|
136
152
|
servers: {
|
|
137
153
|
"claude-in-chrome": {
|
|
154
|
+
type: "stdio",
|
|
138
155
|
command: candidate,
|
|
139
156
|
description: "Auto-detected claude-in-chrome MCP server (Chrome automation)",
|
|
140
157
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp-client/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp-client/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hub consume — fetches a remote agent-native app's org-scope MCP servers
|
|
3
|
+
* and projects them into the local MCP manager's config shape.
|
|
4
|
+
*
|
|
5
|
+
* Opt-in via env:
|
|
6
|
+
* AGENT_NATIVE_MCP_HUB_URL = https://dispatch.example.com
|
|
7
|
+
* AGENT_NATIVE_MCP_HUB_TOKEN = <shared secret, matches hub's token>
|
|
8
|
+
*
|
|
9
|
+
* Failures are non-fatal — if the hub is unreachable or the token is
|
|
10
|
+
* wrong, the app boots with just its local MCP config and logs a warning.
|
|
11
|
+
*/
|
|
12
|
+
import type { McpServerConfig } from "./config.js";
|
|
13
|
+
export type HubFetchResult = {
|
|
14
|
+
state: "disabled";
|
|
15
|
+
} | {
|
|
16
|
+
state: "ok";
|
|
17
|
+
servers: Record<string, McpServerConfig>;
|
|
18
|
+
} | {
|
|
19
|
+
state: "unreachable";
|
|
20
|
+
/** Last-known-good servers if we have them, otherwise an empty map. */
|
|
21
|
+
servers: Record<string, McpServerConfig>;
|
|
22
|
+
error: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Fetch the remote hub's org-scope servers. Returns a tri-state so callers
|
|
26
|
+
* can distinguish "hub said empty" from "hub is unreachable" and keep the
|
|
27
|
+
* last-known-good set live across transient failures.
|
|
28
|
+
*/
|
|
29
|
+
export declare function fetchHubServersDetailed(): Promise<HubFetchResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Back-compat convenience that always returns a server map. On unreachable,
|
|
32
|
+
* callers get the last-known-good set (empty on first-fetch failure) so one
|
|
33
|
+
* flaky hub call can't wipe loaded servers from the running manager.
|
|
34
|
+
*/
|
|
35
|
+
export declare function fetchHubServers(): Promise<Record<string, McpServerConfig>>;
|
|
36
|
+
/** Reset the in-memory cache. Exposed for tests only. */
|
|
37
|
+
export declare function _resetHubCacheForTests(): void;
|
|
38
|
+
//# sourceMappingURL=hub-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-client.d.ts","sourceRoot":"","sources":["../../src/mcp-client/hub-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAuB,eAAe,EAAE,MAAM,aAAa,CAAC;AA+BxE,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,GACrB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAAE,GACzD;IACE,KAAK,EAAE,aAAa,CAAC;IACrB,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN;;;;GAIG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,cAAc,CAAC,CAyFvE;AAED;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAC9C,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAChC,CAIA;AAED,yDAAyD;AACzD,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hub consume — fetches a remote agent-native app's org-scope MCP servers
|
|
3
|
+
* and projects them into the local MCP manager's config shape.
|
|
4
|
+
*
|
|
5
|
+
* Opt-in via env:
|
|
6
|
+
* AGENT_NATIVE_MCP_HUB_URL = https://dispatch.example.com
|
|
7
|
+
* AGENT_NATIVE_MCP_HUB_TOKEN = <shared secret, matches hub's token>
|
|
8
|
+
*
|
|
9
|
+
* Failures are non-fatal — if the hub is unreachable or the token is
|
|
10
|
+
* wrong, the app boots with just its local MCP config and logs a warning.
|
|
11
|
+
*/
|
|
12
|
+
import { isHubConsumeEnabled } from "./hub-routes.js";
|
|
13
|
+
const FETCH_TIMEOUT_MS = 5_000;
|
|
14
|
+
/**
|
|
15
|
+
* Normalize an orgId to the canonical form used by the visibility gate.
|
|
16
|
+
* Must match `isMcpToolAllowedForRequest()` in `visibility.ts` — otherwise
|
|
17
|
+
* a hub server published under "ACME-Corp" would build a key
|
|
18
|
+
* `hub_ACME-Corp_...` that can never match a request whose active org is
|
|
19
|
+
* normalized to "acme-corp", and the tool would be invisible to everyone.
|
|
20
|
+
*/
|
|
21
|
+
function normalizeOrgId(orgId) {
|
|
22
|
+
return orgId.toLowerCase().replace(/[^a-z0-9-]/g, "-");
|
|
23
|
+
}
|
|
24
|
+
/** Merged-config key prefix for hub-sourced servers — avoids collision with
|
|
25
|
+
* the consuming app's own `org_<orgId>_<name>` entries. */
|
|
26
|
+
function hubMergedKey(orgId, name) {
|
|
27
|
+
return `hub_${normalizeOrgId(orgId)}_${name}`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Last successful fetch, cached in-memory. A transient hub outage during a
|
|
31
|
+
* local reconfigure() call must NOT wipe loaded hub servers from the running
|
|
32
|
+
* MCP manager — we keep serving the last good snapshot until the hub is
|
|
33
|
+
* reachable again.
|
|
34
|
+
*/
|
|
35
|
+
let lastGoodServers = null;
|
|
36
|
+
/**
|
|
37
|
+
* Fetch the remote hub's org-scope servers. Returns a tri-state so callers
|
|
38
|
+
* can distinguish "hub said empty" from "hub is unreachable" and keep the
|
|
39
|
+
* last-known-good set live across transient failures.
|
|
40
|
+
*/
|
|
41
|
+
export async function fetchHubServersDetailed() {
|
|
42
|
+
if (!isHubConsumeEnabled())
|
|
43
|
+
return { state: "disabled" };
|
|
44
|
+
const base = process.env.AGENT_NATIVE_MCP_HUB_URL.trim();
|
|
45
|
+
const token = process.env.AGENT_NATIVE_MCP_HUB_TOKEN.trim();
|
|
46
|
+
const url = joinUrl(base, "/_agent-native/mcp/hub/servers");
|
|
47
|
+
const fallbackServers = lastGoodServers ?? {};
|
|
48
|
+
let res;
|
|
49
|
+
try {
|
|
50
|
+
const controller = typeof AbortController !== "undefined" ? new AbortController() : null;
|
|
51
|
+
const timeout = controller
|
|
52
|
+
? setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS)
|
|
53
|
+
: null;
|
|
54
|
+
try {
|
|
55
|
+
res = await fetch(url, {
|
|
56
|
+
method: "GET",
|
|
57
|
+
headers: {
|
|
58
|
+
Authorization: `Bearer ${token}`,
|
|
59
|
+
Accept: "application/json",
|
|
60
|
+
},
|
|
61
|
+
signal: controller?.signal,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
if (timeout)
|
|
66
|
+
clearTimeout(timeout);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
const msg = err?.message ?? String(err);
|
|
71
|
+
console.warn(`[mcp-client] hub fetch failed (${url}): ${msg}`);
|
|
72
|
+
return { state: "unreachable", servers: fallbackServers, error: msg };
|
|
73
|
+
}
|
|
74
|
+
if (!res.ok) {
|
|
75
|
+
const msg = `hub returned ${res.status}`;
|
|
76
|
+
// Auth / config errors (401 unauthorized, 403 forbidden, 404 misconfig)
|
|
77
|
+
// must NOT fall back to the cached set — if the hub is deliberately
|
|
78
|
+
// revoking access (e.g. a rotated token), keeping servers in the
|
|
79
|
+
// manager would leave revoked tools callable until process restart.
|
|
80
|
+
// Transient errors (408 timeout, 429 rate limit, 5xx) are retryable,
|
|
81
|
+
// so for those we keep serving the last-known-good set.
|
|
82
|
+
const isAuthOrConfigError = res.status === 401 ||
|
|
83
|
+
res.status === 403 ||
|
|
84
|
+
res.status === 404 ||
|
|
85
|
+
res.status === 410;
|
|
86
|
+
if (isAuthOrConfigError) {
|
|
87
|
+
console.warn(`[mcp-client] hub fetch returned ${res.status} from ${url} — clearing cached servers`);
|
|
88
|
+
lastGoodServers = null;
|
|
89
|
+
return { state: "unreachable", servers: {}, error: msg };
|
|
90
|
+
}
|
|
91
|
+
console.warn(`[mcp-client] hub fetch returned ${res.status} from ${url} — keeping last-known-good set`);
|
|
92
|
+
return { state: "unreachable", servers: fallbackServers, error: msg };
|
|
93
|
+
}
|
|
94
|
+
let body;
|
|
95
|
+
try {
|
|
96
|
+
body = (await res.json());
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
const msg = err?.message ?? String(err);
|
|
100
|
+
console.warn(`[mcp-client] hub response was not JSON: ${msg}`);
|
|
101
|
+
return { state: "unreachable", servers: fallbackServers, error: msg };
|
|
102
|
+
}
|
|
103
|
+
if (!body || !Array.isArray(body.servers)) {
|
|
104
|
+
return {
|
|
105
|
+
state: "unreachable",
|
|
106
|
+
servers: fallbackServers,
|
|
107
|
+
error: "malformed hub response",
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
const out = {};
|
|
111
|
+
for (const s of body.servers) {
|
|
112
|
+
if (!s || typeof s.url !== "string" || !s.name || !s.orgId)
|
|
113
|
+
continue;
|
|
114
|
+
const cfg = {
|
|
115
|
+
type: "http",
|
|
116
|
+
url: s.url,
|
|
117
|
+
headers: s.headers && Object.keys(s.headers).length > 0 ? s.headers : undefined,
|
|
118
|
+
description: s.description,
|
|
119
|
+
};
|
|
120
|
+
out[hubMergedKey(s.orgId, s.name)] = cfg;
|
|
121
|
+
}
|
|
122
|
+
lastGoodServers = out;
|
|
123
|
+
return { state: "ok", servers: out };
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Back-compat convenience that always returns a server map. On unreachable,
|
|
127
|
+
* callers get the last-known-good set (empty on first-fetch failure) so one
|
|
128
|
+
* flaky hub call can't wipe loaded servers from the running manager.
|
|
129
|
+
*/
|
|
130
|
+
export async function fetchHubServers() {
|
|
131
|
+
const result = await fetchHubServersDetailed();
|
|
132
|
+
if (result.state === "disabled")
|
|
133
|
+
return {};
|
|
134
|
+
return result.servers;
|
|
135
|
+
}
|
|
136
|
+
/** Reset the in-memory cache. Exposed for tests only. */
|
|
137
|
+
export function _resetHubCacheForTests() {
|
|
138
|
+
lastGoodServers = null;
|
|
139
|
+
}
|
|
140
|
+
function joinUrl(base, path) {
|
|
141
|
+
if (base.endsWith("/"))
|
|
142
|
+
base = base.slice(0, -1);
|
|
143
|
+
if (!path.startsWith("/"))
|
|
144
|
+
path = `/${path}`;
|
|
145
|
+
return `${base}${path}`;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=hub-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-client.js","sourceRoot":"","sources":["../../src/mcp-client/hub-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hub serve — exposes this app's org-scope MCP servers to other agent-native
|
|
3
|
+
* apps in the same workspace.
|
|
4
|
+
*
|
|
5
|
+
* An app becomes a hub by setting `AGENT_NATIVE_MCP_HUB_TOKEN=<secret>` in
|
|
6
|
+
* its environment. Consuming apps set the same token plus
|
|
7
|
+
* `AGENT_NATIVE_MCP_HUB_URL` pointing at the hub; at startup they pull the
|
|
8
|
+
* hub's org-scope server list (URL + headers + description) and merge it
|
|
9
|
+
* into their own running MCP manager.
|
|
10
|
+
*
|
|
11
|
+
* Convention: dispatch is the hub. Any template can consume from it.
|
|
12
|
+
*
|
|
13
|
+
* User-scope servers are intentionally NOT shared — personal credentials
|
|
14
|
+
* stay with the user who added them. Only `o:<orgId>:mcp-servers-remote`
|
|
15
|
+
* entries are returned.
|
|
16
|
+
*/
|
|
17
|
+
export interface HubServerRecord {
|
|
18
|
+
/** `<orgId>-<name>` — unique within the hub response. */
|
|
19
|
+
id: string;
|
|
20
|
+
orgId: string;
|
|
21
|
+
name: string;
|
|
22
|
+
url: string;
|
|
23
|
+
headers?: Record<string, string>;
|
|
24
|
+
description?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface HubServersResponse {
|
|
27
|
+
servers: HubServerRecord[];
|
|
28
|
+
generatedAt: number;
|
|
29
|
+
}
|
|
30
|
+
/** Is this process configured to serve as a hub for other apps? */
|
|
31
|
+
export declare function isHubServeEnabled(): boolean;
|
|
32
|
+
/** Is this process configured to consume from a remote hub? */
|
|
33
|
+
export declare function isHubConsumeEnabled(): boolean;
|
|
34
|
+
export declare function listHubServers(): Promise<HubServerRecord[]>;
|
|
35
|
+
export declare function mountMcpHubRoutes(nitroApp: any): void;
|
|
36
|
+
/** Status used by the UI to show a "hub mode" card. */
|
|
37
|
+
export declare function getHubStatus(): {
|
|
38
|
+
serving: boolean;
|
|
39
|
+
consuming: boolean;
|
|
40
|
+
hubUrl: string | null;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=hub-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-routes.d.ts","sourceRoot":"","sources":["../../src/mcp-client/hub-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAiBH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,+DAA+D;AAC/D,wBAAgB,mBAAmB,IAAI,OAAO,CAK7C;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAsBjE;AAmBD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,CAgCrD;AAED,uDAAuD;AACvD,wBAAgB,YAAY,IAAI;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAMA"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hub serve — exposes this app's org-scope MCP servers to other agent-native
|
|
3
|
+
* apps in the same workspace.
|
|
4
|
+
*
|
|
5
|
+
* An app becomes a hub by setting `AGENT_NATIVE_MCP_HUB_TOKEN=<secret>` in
|
|
6
|
+
* its environment. Consuming apps set the same token plus
|
|
7
|
+
* `AGENT_NATIVE_MCP_HUB_URL` pointing at the hub; at startup they pull the
|
|
8
|
+
* hub's org-scope server list (URL + headers + description) and merge it
|
|
9
|
+
* into their own running MCP manager.
|
|
10
|
+
*
|
|
11
|
+
* Convention: dispatch is the hub. Any template can consume from it.
|
|
12
|
+
*
|
|
13
|
+
* User-scope servers are intentionally NOT shared — personal credentials
|
|
14
|
+
* stay with the user who added them. Only `o:<orgId>:mcp-servers-remote`
|
|
15
|
+
* entries are returned.
|
|
16
|
+
*/
|
|
17
|
+
import { defineEventHandler, getMethod, getRequestHeader, setResponseHeader, setResponseStatus, } from "h3";
|
|
18
|
+
import { getH3App } from "../server/framework-request-handler.js";
|
|
19
|
+
import { getAllSettings } from "../settings/store.js";
|
|
20
|
+
/** Env var that enables hub-serve. Acts as the shared bearer secret. */
|
|
21
|
+
const TOKEN_ENV = "AGENT_NATIVE_MCP_HUB_TOKEN";
|
|
22
|
+
/** Is this process configured to serve as a hub for other apps? */
|
|
23
|
+
export function isHubServeEnabled() {
|
|
24
|
+
return !!process.env[TOKEN_ENV]?.trim();
|
|
25
|
+
}
|
|
26
|
+
/** Is this process configured to consume from a remote hub? */
|
|
27
|
+
export function isHubConsumeEnabled() {
|
|
28
|
+
return (!!process.env.AGENT_NATIVE_MCP_HUB_URL?.trim() &&
|
|
29
|
+
!!process.env.AGENT_NATIVE_MCP_HUB_TOKEN?.trim());
|
|
30
|
+
}
|
|
31
|
+
export async function listHubServers() {
|
|
32
|
+
const all = await getAllSettings().catch(() => ({}));
|
|
33
|
+
const out = [];
|
|
34
|
+
for (const [fullKey, value] of Object.entries(all)) {
|
|
35
|
+
const m = /^o:([^:]+):mcp-servers-remote$/.exec(fullKey);
|
|
36
|
+
if (!m)
|
|
37
|
+
continue;
|
|
38
|
+
const orgId = m[1];
|
|
39
|
+
const list = value.servers;
|
|
40
|
+
if (!Array.isArray(list))
|
|
41
|
+
continue;
|
|
42
|
+
for (const stored of list) {
|
|
43
|
+
if (!stored || typeof stored.url !== "string" || !stored.name)
|
|
44
|
+
continue;
|
|
45
|
+
out.push({
|
|
46
|
+
id: `${orgId}-${stored.name}`,
|
|
47
|
+
orgId,
|
|
48
|
+
name: stored.name,
|
|
49
|
+
url: stored.url,
|
|
50
|
+
headers: stored.headers,
|
|
51
|
+
description: stored.description,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
function checkBearer(event) {
|
|
58
|
+
const expected = process.env[TOKEN_ENV]?.trim();
|
|
59
|
+
if (!expected)
|
|
60
|
+
return "Hub serve is not enabled on this app";
|
|
61
|
+
const header = getRequestHeader(event, "authorization") ?? "";
|
|
62
|
+
const match = /^Bearer\s+(.+)$/.exec(header);
|
|
63
|
+
if (!match)
|
|
64
|
+
return "Bearer token required";
|
|
65
|
+
// Constant-time compare to avoid timing leaks on the shared secret.
|
|
66
|
+
const provided = match[1].trim();
|
|
67
|
+
if (provided.length !== expected.length)
|
|
68
|
+
return "Invalid token";
|
|
69
|
+
let diff = 0;
|
|
70
|
+
for (let i = 0; i < provided.length; i++) {
|
|
71
|
+
diff |= provided.charCodeAt(i) ^ expected.charCodeAt(i);
|
|
72
|
+
}
|
|
73
|
+
if (diff !== 0)
|
|
74
|
+
return "Invalid token";
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
export function mountMcpHubRoutes(nitroApp) {
|
|
78
|
+
if (globalThis.__agentNativeMcpHubMounted)
|
|
79
|
+
return;
|
|
80
|
+
globalThis.__agentNativeMcpHubMounted = true;
|
|
81
|
+
try {
|
|
82
|
+
getH3App(nitroApp).use("/_agent-native/mcp/hub/servers", defineEventHandler(async (event) => {
|
|
83
|
+
if (getMethod(event) !== "GET") {
|
|
84
|
+
setResponseStatus(event, 405);
|
|
85
|
+
return { error: "Method not allowed" };
|
|
86
|
+
}
|
|
87
|
+
const authError = checkBearer(event);
|
|
88
|
+
if (authError) {
|
|
89
|
+
setResponseStatus(event, 401);
|
|
90
|
+
return { error: authError };
|
|
91
|
+
}
|
|
92
|
+
setResponseHeader(event, "Content-Type", "application/json");
|
|
93
|
+
setResponseHeader(event, "Cache-Control", "no-store");
|
|
94
|
+
const servers = await listHubServers();
|
|
95
|
+
const payload = {
|
|
96
|
+
servers,
|
|
97
|
+
generatedAt: Date.now(),
|
|
98
|
+
};
|
|
99
|
+
return payload;
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
console.warn(`[mcp-client] Failed to mount /_agent-native/mcp/hub/servers: ${err?.message ?? err}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** Status used by the UI to show a "hub mode" card. */
|
|
107
|
+
export function getHubStatus() {
|
|
108
|
+
return {
|
|
109
|
+
serving: isHubServeEnabled(),
|
|
110
|
+
consuming: isHubConsumeEnabled(),
|
|
111
|
+
hubUrl: process.env.AGENT_NATIVE_MCP_HUB_URL?.trim() || null,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=hub-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-routes.js","sourceRoot":"","sources":["../../src/mcp-client/hub-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
*/
|
|
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
|
+
export { listRemoteServers, addRemoteServer, removeRemoteServer, validateRemoteUrl, normalizeServerName, mergedConfigKey, parseMergedKey, hashEmail, toHttpServerConfig, type RemoteMcpScope, type StoredRemoteMcpServer, } from "./remote-store.js";
|
|
10
|
+
export { mountMcpServersRoutes, buildMergedConfig } from "./routes.js";
|
|
11
|
+
export { mountMcpHubRoutes, listHubServers, getHubStatus, isHubServeEnabled, isHubConsumeEnabled, type HubServerRecord, type HubServersResponse, } from "./hub-routes.js";
|
|
12
|
+
export { fetchHubServers } from "./hub-client.js";
|
|
13
|
+
export { isMcpToolAllowedForRequest } from "./visibility.js";
|
|
9
14
|
/**
|
|
10
15
|
* Convert MCP tools into `ActionEntry` values suitable for registration in
|
|
11
16
|
* the agent's action registry. Each tool is marked `http: false` so it's
|
|
@@ -14,4 +19,14 @@ export { McpClientManager, parseMcpToolName, MCP_TOOL_PREFIX, type McpTool, type
|
|
|
14
19
|
import type { ActionEntry } from "../agent/production-agent.js";
|
|
15
20
|
import type { McpClientManager } from "./manager.js";
|
|
16
21
|
export declare function mcpToolsToActionEntries(manager: McpClientManager): Record<string, ActionEntry>;
|
|
22
|
+
/**
|
|
23
|
+
* Mutate a target action dict in place so it matches the current MCP tool set:
|
|
24
|
+
* - adds new `mcp__*` keys that aren't in target,
|
|
25
|
+
* - removes `mcp__*` keys that no longer exist in the manager,
|
|
26
|
+
* - leaves non-MCP keys untouched.
|
|
27
|
+
*
|
|
28
|
+
* Used by the agent-chat plugin to keep its `prodActions` / `devActions`
|
|
29
|
+
* registries in sync after `McpClientManager.reconfigure()` runs.
|
|
30
|
+
*/
|
|
31
|
+
export declare function syncMcpActionEntries(manager: McpClientManager, target: Record<string, ActionEntry>): void;
|
|
17
32
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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;;;;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"}
|
|
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,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEvE,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
|
@@ -6,6 +6,12 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export { loadMcpConfig, autoDetectMcpConfig, } from "./config.js";
|
|
8
8
|
export { McpClientManager, parseMcpToolName, MCP_TOOL_PREFIX, } from "./manager.js";
|
|
9
|
+
export { listRemoteServers, addRemoteServer, removeRemoteServer, validateRemoteUrl, normalizeServerName, mergedConfigKey, parseMergedKey, hashEmail, toHttpServerConfig, } from "./remote-store.js";
|
|
10
|
+
export { mountMcpServersRoutes, buildMergedConfig } from "./routes.js";
|
|
11
|
+
export { mountMcpHubRoutes, listHubServers, getHubStatus, isHubServeEnabled, isHubConsumeEnabled, } from "./hub-routes.js";
|
|
12
|
+
export { fetchHubServers } from "./hub-client.js";
|
|
13
|
+
export { isMcpToolAllowedForRequest } from "./visibility.js";
|
|
14
|
+
import { isMcpToolAllowedForRequest } from "./visibility.js";
|
|
9
15
|
export function mcpToolsToActionEntries(manager) {
|
|
10
16
|
const entries = {};
|
|
11
17
|
for (const tool of manager.getTools()) {
|
|
@@ -13,6 +19,29 @@ export function mcpToolsToActionEntries(manager) {
|
|
|
13
19
|
}
|
|
14
20
|
return entries;
|
|
15
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Mutate a target action dict in place so it matches the current MCP tool set:
|
|
24
|
+
* - adds new `mcp__*` keys that aren't in target,
|
|
25
|
+
* - removes `mcp__*` keys that no longer exist in the manager,
|
|
26
|
+
* - leaves non-MCP keys untouched.
|
|
27
|
+
*
|
|
28
|
+
* Used by the agent-chat plugin to keep its `prodActions` / `devActions`
|
|
29
|
+
* registries in sync after `McpClientManager.reconfigure()` runs.
|
|
30
|
+
*/
|
|
31
|
+
export function syncMcpActionEntries(manager, target) {
|
|
32
|
+
const current = new Set();
|
|
33
|
+
for (const tool of manager.getTools()) {
|
|
34
|
+
current.add(tool.name);
|
|
35
|
+
if (!target[tool.name]) {
|
|
36
|
+
target[tool.name] = mcpToolToActionEntry(manager, tool);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
for (const key of Object.keys(target)) {
|
|
40
|
+
if (key.startsWith("mcp__") && !current.has(key)) {
|
|
41
|
+
delete target[key];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
16
45
|
function mcpToolToActionEntry(manager, tool) {
|
|
17
46
|
return {
|
|
18
47
|
tool: {
|
|
@@ -21,6 +50,12 @@ function mcpToolToActionEntry(manager, tool) {
|
|
|
21
50
|
},
|
|
22
51
|
http: false,
|
|
23
52
|
run: async (args) => {
|
|
53
|
+
// Defense-in-depth: even if a cross-scope MCP tool somehow makes it
|
|
54
|
+
// into the LLM's visible tool list, reject invocation here so we never
|
|
55
|
+
// execute a user's credentials on behalf of another user.
|
|
56
|
+
if (!isMcpToolAllowedForRequest(tool.name)) {
|
|
57
|
+
return `Error: MCP tool ${tool.name} is not available in the current request scope.`;
|
|
58
|
+
}
|
|
24
59
|
try {
|
|
25
60
|
const result = await manager.callTool(tool.name, args);
|
|
26
61
|
// MCP tool results are typically `{ content: [{ type: "text", text: ... }], isError? }`.
|