@agent-native/core 0.49.22 → 0.49.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/production-agent.d.ts +1 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +15 -0
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/tool-search.d.ts.map +1 -1
- package/dist/agent/tool-search.js +32 -7
- package/dist/agent/tool-search.js.map +1 -1
- package/dist/cli/connect.d.ts +2 -3
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +60 -37
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/pr-visual-recap-workflow.d.ts +5 -7
- package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
- package/dist/cli/pr-visual-recap-workflow.js +5 -7
- package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
- package/dist/cli/recap.d.ts +44 -52
- package/dist/cli/recap.d.ts.map +1 -1
- package/dist/cli/recap.js +420 -414
- package/dist/cli/recap.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +6 -3
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +1 -1
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +23 -3
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat.d.ts +8 -0
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +24 -1
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.js +4 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
- package/dist/client/blocks/library/DiffBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/DiffBlock.js +20 -7
- package/dist/client/blocks/library/DiffBlock.js.map +1 -1
- package/dist/client/blocks/library/annotation-rail.js +5 -5
- package/dist/client/blocks/library/annotation-rail.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +15 -2
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/coding-tools/run-code.d.ts.map +1 -1
- package/dist/coding-tools/run-code.js +69 -17
- package/dist/coding-tools/run-code.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +2 -0
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/mcp/build-server.d.ts +12 -10
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +53 -89
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/connect-route.d.ts.map +1 -1
- package/dist/mcp/connect-route.js +5 -4
- package/dist/mcp/connect-route.js.map +1 -1
- package/dist/mcp/oauth-token.d.ts +6 -5
- package/dist/mcp/oauth-token.d.ts.map +1 -1
- package/dist/mcp/oauth-token.js.map +1 -1
- package/dist/mcp/stdio.d.ts.map +1 -1
- package/dist/mcp/stdio.js +9 -2
- package/dist/mcp/stdio.js.map +1 -1
- package/dist/provider-api/staging.d.ts.map +1 -1
- package/dist/provider-api/staging.js +6 -4
- package/dist/provider-api/staging.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +10 -7
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/docs/content/actions.md +1 -1
- package/docs/content/external-agents.md +53 -40
- package/docs/content/mcp-protocol.md +16 -11
- package/docs/content/pr-visual-recap.md +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-server.d.ts","sourceRoot":"","sources":["../../src/mcp/build-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAsChE,MAAM,WAAW,SAAS;IACxB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;KAC1B,CAAC,CAAC;IACH,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAChD,qEAAqE;IACrE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B
|
|
1
|
+
{"version":3,"file":"build-server.d.ts","sourceRoot":"","sources":["../../src/mcp/build-server.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/build-server.js
CHANGED
|
@@ -39,6 +39,10 @@ const COMPACT_MCP_APP_CATALOG_BUILTINS = new Set([
|
|
|
39
39
|
"open_app",
|
|
40
40
|
"ask_app",
|
|
41
41
|
"create_embed_session",
|
|
42
|
+
// `tool-search` MUST stay in every compact/connector surface: it is how a
|
|
43
|
+
// compacted client discovers and loads any action on demand, which is what
|
|
44
|
+
// makes "small catalog by default" safe instead of limiting.
|
|
45
|
+
"tool-search",
|
|
42
46
|
]);
|
|
43
47
|
function isActionAdvertisedInCompactMcpAppCatalog(name, entry, config) {
|
|
44
48
|
if (COMPACT_MCP_APP_CATALOG_BUILTINS.has(name))
|
|
@@ -52,71 +56,38 @@ function isActionAdvertisedInCompactMcpAppCatalog(name, entry, config) {
|
|
|
52
56
|
}
|
|
53
57
|
return false;
|
|
54
58
|
}
|
|
55
|
-
const MCP_APP_OAUTH_CLIENT_RE = /\b(chatgpt|openai|claude|anthropic)\b/i;
|
|
56
|
-
const NON_APP_OAUTH_CLIENT_RE = /\b(code|cli|cursor|codex|goose|postman|mcpjam|inspector)\b/i;
|
|
57
|
-
const MCP_APP_OAUTH_REDIRECT_HOST_RE = /(^|\.)((chatgpt|openai)\.com|claude\.ai|anthropic\.com)$/i;
|
|
58
|
-
const FULL_CATALOG_CLIENT_RE = /\b(agent-native-mcp-(proxy|stdio|standalone)|code|cli|cursor|codex|goose|postman|mcpjam|inspector)\b/i;
|
|
59
|
-
async function isKnownMcpAppOAuthClient(identity) {
|
|
60
|
-
const clientId = identity?.oauthClientId?.trim();
|
|
61
|
-
if (!clientId)
|
|
62
|
-
return false;
|
|
63
|
-
function isKnownAppClientName(value) {
|
|
64
|
-
if (!value)
|
|
65
|
-
return false;
|
|
66
|
-
return (MCP_APP_OAUTH_CLIENT_RE.test(value) &&
|
|
67
|
-
!NON_APP_OAUTH_CLIENT_RE.test(value));
|
|
68
|
-
}
|
|
69
|
-
function isKnownNonAppClientName(value) {
|
|
70
|
-
return Boolean(value && NON_APP_OAUTH_CLIENT_RE.test(value));
|
|
71
|
-
}
|
|
72
|
-
function isKnownMcpAppRedirectUri(uri) {
|
|
73
|
-
try {
|
|
74
|
-
const url = new URL(uri);
|
|
75
|
-
return (url.protocol === "https:" &&
|
|
76
|
-
MCP_APP_OAUTH_REDIRECT_HOST_RE.test(url.hostname));
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
if (isKnownAppClientName(clientId))
|
|
83
|
-
return true;
|
|
84
|
-
if (isKnownNonAppClientName(clientId))
|
|
85
|
-
return false;
|
|
86
|
-
try {
|
|
87
|
-
const { getOAuthClient } = await import("./oauth-store.js");
|
|
88
|
-
const client = await getOAuthClient(clientId);
|
|
89
|
-
// If the token carries an OAuth client id but its registration is missing,
|
|
90
|
-
// keep the model on the compact MCP Apps surface instead of exposing every
|
|
91
|
-
// private action/schema.
|
|
92
|
-
if (!client)
|
|
93
|
-
return true;
|
|
94
|
-
if (isKnownAppClientName(client.clientName))
|
|
95
|
-
return true;
|
|
96
|
-
if (isKnownNonAppClientName(client.clientName))
|
|
97
|
-
return false;
|
|
98
|
-
if (client.redirectUris.some(isKnownMcpAppRedirectUri))
|
|
99
|
-
return true;
|
|
100
|
-
// Most OAuth hosts are UI-oriented MCP clients. Preserve the full catalog
|
|
101
|
-
// only for known code/CLI clients so unknown browser hosts cannot trigger
|
|
102
|
-
// massive resources/list payloads.
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
// On metadata lookup errors, fail compact instead of falling back to the
|
|
107
|
-
// full action surface; ChatGPT/Claude old tokens otherwise get huge lists.
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
59
|
function explicitlyRequestsFullMcpCatalog(requestMeta) {
|
|
60
|
+
// Full catalog is a deliberate, rare opt-in — NEVER a default, and NEVER
|
|
61
|
+
// inferred from the client name / user-agent. It is reached only by an
|
|
62
|
+
// explicit deployment env or a token minted with
|
|
63
|
+
// `agent-native connect --full-catalog` (which embeds `catalog_scope: "full"`,
|
|
64
|
+
// surfaced here as requestMeta.fullCatalog). Dumping ~105 tool schemas
|
|
65
|
+
// (100k+ tokens) into a context window just because a client called itself
|
|
66
|
+
// "code"/"cursor"/"codex" was a recurring footgun. Everything else gets the
|
|
67
|
+
// connector/compact catalog plus `tool-search`, which keeps every tool
|
|
68
|
+
// reachable on demand.
|
|
112
69
|
if (process.env.AGENT_NATIVE_MCP_FULL_CATALOG === "1")
|
|
113
70
|
return true;
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
71
|
+
return requestMeta?.fullCatalog === true;
|
|
72
|
+
}
|
|
73
|
+
const warnedFullCatalogKeys = new Set();
|
|
74
|
+
/**
|
|
75
|
+
* Loud, deduped warning emitted whenever the full MCP catalog is actually
|
|
76
|
+
* served. Full catalog is a deliberate, rare opt-in (env or a `--full-catalog`
|
|
77
|
+
* token claim); logging it makes an accidental ~100k-token tool dump visible
|
|
78
|
+
* instead of silent, so a regression can't quietly reintroduce the footgun.
|
|
79
|
+
*/
|
|
80
|
+
function warnFullCatalogServed(toolCount) {
|
|
81
|
+
const source = process.env.AGENT_NATIVE_MCP_FULL_CATALOG === "1"
|
|
82
|
+
? "AGENT_NATIVE_MCP_FULL_CATALOG=1"
|
|
83
|
+
: "a token minted with --full-catalog (catalog_scope:full)";
|
|
84
|
+
const key = `${source}:${toolCount}`;
|
|
85
|
+
if (warnedFullCatalogKeys.has(key))
|
|
86
|
+
return;
|
|
87
|
+
warnedFullCatalogKeys.add(key);
|
|
88
|
+
console.warn(`[agent-native] Serving the FULL MCP tool catalog (${toolCount} tools) via ${source}. ` +
|
|
89
|
+
`This is a large context payload meant to be a rare, explicit opt-in — most ` +
|
|
90
|
+
`clients should use the default compact/connector catalog + tool-search instead.`);
|
|
120
91
|
}
|
|
121
92
|
/**
|
|
122
93
|
* Returns true when the given action name is in the template's connector
|
|
@@ -132,18 +103,6 @@ function isActionInConnectorCatalog(name, config) {
|
|
|
132
103
|
return false;
|
|
133
104
|
return config.connectorCatalog.includes(name);
|
|
134
105
|
}
|
|
135
|
-
function shouldUseCompactMcpCatalogByDefault(identity, requestMeta) {
|
|
136
|
-
if (explicitlyRequestsFullMcpCatalog(requestMeta))
|
|
137
|
-
return false;
|
|
138
|
-
// OAuth callers are classified through `isKnownMcpAppOAuthClient`: unknown
|
|
139
|
-
// OAuth clients compact by default, while known code/CLI clients stay full.
|
|
140
|
-
if (identity?.oauthClientId)
|
|
141
|
-
return false;
|
|
142
|
-
// A real authenticated remote HTTP caller with no OAuth client metadata is
|
|
143
|
-
// usually a chat-host static-token connector. Keep it on the app-facing
|
|
144
|
-
// verbs so a host cannot dump every action schema into a giant tool card.
|
|
145
|
-
return requestMeta?.fullSurface === true;
|
|
146
|
-
}
|
|
147
106
|
function metadataObject(value) {
|
|
148
107
|
return value && typeof value === "object" && !Array.isArray(value)
|
|
149
108
|
? value
|
|
@@ -844,25 +803,27 @@ export async function createMCPServerForRequest(config, identity, requestMeta) {
|
|
|
844
803
|
: config.actions;
|
|
845
804
|
const actions = mergeBuiltinTools(config, baseActions, requestMeta);
|
|
846
805
|
const visibleActions = Object.fromEntries(Object.entries(actions).filter(([, entry]) => isActionVisibleForOAuthScope(entry, effectiveIdentity?.oauthScopes)));
|
|
847
|
-
const
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
806
|
+
const fullCatalogRequested = explicitlyRequestsFullMcpCatalog(requestMeta);
|
|
807
|
+
// Compact/connector is the DEFAULT for every caller — hosted connectors,
|
|
808
|
+
// code clients (Claude Code / Cursor / Codex), and the local CLI alike. The
|
|
809
|
+
// full ~105-tool catalog is served only on the explicit opt-in above, so a
|
|
810
|
+
// host can never dump every action schema into one giant tool card. The
|
|
811
|
+
// `mcp:apps` scope still lands on this compact MCP-Apps surface; with no
|
|
812
|
+
// opt-in, everyone else does too.
|
|
813
|
+
const compactMcpAppCatalog = !fullCatalogRequested;
|
|
853
814
|
const advertisedActionsBeforeConnector = compactMcpAppCatalog
|
|
854
815
|
? Object.fromEntries(Object.entries(visibleActions).filter(([name, entry]) => isActionAdvertisedInCompactMcpAppCatalog(name, entry, config)))
|
|
855
816
|
: visibleActions;
|
|
856
|
-
// Connector-catalog tier:
|
|
857
|
-
//
|
|
858
|
-
//
|
|
859
|
-
//
|
|
860
|
-
//
|
|
861
|
-
// db-exec / seed-* / extension /
|
|
862
|
-
|
|
863
|
-
|
|
817
|
+
// Connector-catalog tier: when a template declares a connector allow-list,
|
|
818
|
+
// serve exactly that curated surface (+ cross-app builtins + tool-search) to
|
|
819
|
+
// external callers unless they explicitly opted into the full catalog. This
|
|
820
|
+
// is active by default whenever a catalog is declared — no env flag required —
|
|
821
|
+
// so the ~105-tool full catalog can never leak just because a deployment
|
|
822
|
+
// forgot to set one. It also keeps db-exec / seed-* / extension /
|
|
823
|
+
// browser-session footguns off the external surface.
|
|
824
|
+
const connectorCatalogActive = Array.isArray(config.connectorCatalog) &&
|
|
864
825
|
config.connectorCatalog.length > 0 &&
|
|
865
|
-
!
|
|
826
|
+
!fullCatalogRequested;
|
|
866
827
|
// When the connector catalog is active, filter directly from visibleActions
|
|
867
828
|
// rather than advertisedActionsBeforeConnector. This ensures the connector
|
|
868
829
|
// tier is an independent, template-declared surface that doesn't accidentally
|
|
@@ -871,6 +832,9 @@ export async function createMCPServerForRequest(config, identity, requestMeta) {
|
|
|
871
832
|
const advertisedActions = connectorCatalogActive
|
|
872
833
|
? Object.fromEntries(Object.entries(visibleActions).filter(([name]) => isActionInConnectorCatalog(name, config)))
|
|
873
834
|
: advertisedActionsBeforeConnector;
|
|
835
|
+
if (fullCatalogRequested) {
|
|
836
|
+
warnFullCatalogServed(Object.keys(advertisedActions).length);
|
|
837
|
+
}
|
|
874
838
|
const supportsMcpApps = compactMcpAppCatalog ||
|
|
875
839
|
Object.values(advertisedActions).some((entry) => Boolean(entry.mcpApp?.resource));
|
|
876
840
|
const server = new Server(mcpServerInfo(config, requestMeta), {
|