@agent-native/core 0.22.32 → 0.22.34
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/action.d.ts +7 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +26 -1
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.spec.d.ts +2 -0
- package/dist/client/extensions/ExtensionViewer.spec.d.ts.map +1 -0
- package/dist/client/extensions/ExtensionViewer.spec.js +94 -0
- package/dist/client/extensions/ExtensionViewer.spec.js.map +1 -0
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +5 -50
- package/dist/deploy/build.js.map +1 -1
- package/dist/mcp/build-server.d.ts +8 -0
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +55 -13
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/embed-app.d.ts.map +1 -1
- package/dist/mcp/embed-app.js +19 -0
- package/dist/mcp/embed-app.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +13 -1
- package/dist/mcp/server.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/scripts/dev-session.d.ts +9 -13
- package/dist/scripts/dev-session.d.ts.map +1 -1
- package/dist/scripts/dev-session.js +28 -18
- package/dist/scripts/dev-session.js.map +1 -1
- package/dist/scripts/runner.js +1 -1
- package/dist/scripts/runner.js.map +1 -1
- package/dist/server/auth-marketing.d.ts +14 -0
- package/dist/server/auth-marketing.d.ts.map +1 -0
- package/dist/server/auth-marketing.js +268 -0
- package/dist/server/auth-marketing.js.map +1 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +34 -25
- package/dist/server/auth.js.map +1 -1
- package/dist/server/embed-route.d.ts.map +1 -1
- package/dist/server/embed-route.js +39 -1
- package/dist/server/embed-route.js.map +1 -1
- package/dist/server/onboarding-html.d.ts +6 -0
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +6 -1
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/ssr-handler.d.ts +0 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +6 -7
- package/dist/server/ssr-handler.js.map +1 -1
- package/docs/content/actions.md +1 -1
- package/docs/content/external-agents.md +43 -10
- package/docs/content/mcp-protocol.md +18 -1
- package/package.json +1 -1
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
// @vitest-environment happy-dom
|
|
3
|
+
import { act } from "react";
|
|
4
|
+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
5
|
+
import { createRoot } from "react-dom/client";
|
|
6
|
+
import { MemoryRouter } from "react-router";
|
|
7
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
8
|
+
import { ExtensionViewer } from "./ExtensionViewer.js";
|
|
9
|
+
const embedState = vi.hoisted(() => ({ active: false }));
|
|
10
|
+
vi.mock("../embed-auth.js", () => ({
|
|
11
|
+
ensureEmbedAuthFetchInterceptor: vi.fn(),
|
|
12
|
+
isEmbedMcpChatBridgeActive: () => embedState.active,
|
|
13
|
+
}));
|
|
14
|
+
vi.mock("../sharing/ShareButton.js", () => ({
|
|
15
|
+
ShareButton: () => _jsx("button", { type: "button", children: "Share" }),
|
|
16
|
+
}));
|
|
17
|
+
vi.mock("../AgentPanel.js", () => ({
|
|
18
|
+
AgentToggleButton: () => _jsx("button", { type: "button", children: "Agent" }),
|
|
19
|
+
}));
|
|
20
|
+
vi.mock("../notifications/NotificationsBell.js", () => ({
|
|
21
|
+
NotificationsBell: () => _jsx("button", { type: "button", children: "Notifications" }),
|
|
22
|
+
}));
|
|
23
|
+
vi.mock("../composer/PromptComposer.js", () => ({
|
|
24
|
+
PromptComposer: () => _jsx("div", {}),
|
|
25
|
+
}));
|
|
26
|
+
vi.mock("../components/ui/popover.js", () => ({
|
|
27
|
+
Popover: ({ children }) => (_jsx("div", { children: children })),
|
|
28
|
+
PopoverContent: ({ children }) => (_jsx("div", { children: children })),
|
|
29
|
+
PopoverTrigger: ({ children }) => (_jsx(_Fragment, { children: children })),
|
|
30
|
+
}));
|
|
31
|
+
vi.mock("../components/ui/tooltip.js", () => ({
|
|
32
|
+
Tooltip: ({ children }) => _jsx(_Fragment, { children: children }),
|
|
33
|
+
TooltipContent: ({ children }) => (_jsx("div", { children: children })),
|
|
34
|
+
TooltipProvider: ({ children }) => (_jsx(_Fragment, { children: children })),
|
|
35
|
+
TooltipTrigger: ({ children }) => (_jsx(_Fragment, { children: children })),
|
|
36
|
+
}));
|
|
37
|
+
const extensionResponse = {
|
|
38
|
+
id: "ext-1",
|
|
39
|
+
name: "GitHub Stars Over Time",
|
|
40
|
+
description: "Tracks stars",
|
|
41
|
+
content: "<section>Star history chart</section>",
|
|
42
|
+
updatedAt: "2026-05-22T00:00:00.000Z",
|
|
43
|
+
ownerEmail: "owner@example.test",
|
|
44
|
+
role: "owner",
|
|
45
|
+
canDelete: true,
|
|
46
|
+
};
|
|
47
|
+
describe("ExtensionViewer MCP embeds", () => {
|
|
48
|
+
let container;
|
|
49
|
+
let root;
|
|
50
|
+
let queryClient;
|
|
51
|
+
beforeEach(() => {
|
|
52
|
+
vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
|
|
53
|
+
vi.stubGlobal("fetch", vi.fn(async () => Response.json(extensionResponse)));
|
|
54
|
+
embedState.active = false;
|
|
55
|
+
queryClient = new QueryClient({
|
|
56
|
+
defaultOptions: {
|
|
57
|
+
queries: { retry: false },
|
|
58
|
+
mutations: { retry: false },
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
container = document.createElement("div");
|
|
62
|
+
root = createRoot(container);
|
|
63
|
+
});
|
|
64
|
+
afterEach(() => {
|
|
65
|
+
act(() => root.unmount());
|
|
66
|
+
queryClient.clear();
|
|
67
|
+
container.remove();
|
|
68
|
+
vi.unstubAllGlobals();
|
|
69
|
+
});
|
|
70
|
+
async function renderViewer() {
|
|
71
|
+
await act(async () => {
|
|
72
|
+
root.render(_jsx(QueryClientProvider, { client: queryClient, children: _jsx(MemoryRouter, { initialEntries: ["/extensions/ext-1/github-stars"], children: _jsx(ExtensionViewer, { extensionId: "ext-1" }) }) }));
|
|
73
|
+
});
|
|
74
|
+
await vi.waitFor(() => {
|
|
75
|
+
expect(container.querySelector("iframe")).toBeTruthy();
|
|
76
|
+
});
|
|
77
|
+
return container.querySelector("iframe");
|
|
78
|
+
}
|
|
79
|
+
it("uses the extension render route in the normal app", async () => {
|
|
80
|
+
const iframe = await renderViewer();
|
|
81
|
+
expect(iframe.getAttribute("src")).toContain("/_agent-native/extensions/ext-1/render");
|
|
82
|
+
expect(iframe.getAttribute("srcdoc")).toBeNull();
|
|
83
|
+
expect(iframe.getAttribute("sandbox")).toBe("allow-scripts allow-forms");
|
|
84
|
+
});
|
|
85
|
+
it("uses sandboxed srcdoc inside MCP chat embeds to avoid a blocked nested route frame", async () => {
|
|
86
|
+
embedState.active = true;
|
|
87
|
+
const iframe = await renderViewer();
|
|
88
|
+
expect(iframe.getAttribute("src")).toBeNull();
|
|
89
|
+
expect(iframe.getAttribute("srcdoc")).toContain("Star history chart");
|
|
90
|
+
expect(iframe.getAttribute("srcdoc")).toContain("agent-native-extension-binding");
|
|
91
|
+
expect(iframe.getAttribute("sandbox")).toBe("allow-scripts allow-forms");
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=ExtensionViewer.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtensionViewer.spec.js","sourceRoot":"","sources":["../../../src/client/extensions/ExtensionViewer.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["// @vitest-environment happy-dom\nimport React, { act } from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport { MemoryRouter } from \"react-router\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { ExtensionViewer } from \"./ExtensionViewer.js\";\n\nconst embedState = vi.hoisted(() => ({ active: false }));\n\nvi.mock(\"../embed-auth.js\", () => ({\n ensureEmbedAuthFetchInterceptor: vi.fn(),\n isEmbedMcpChatBridgeActive: () => embedState.active,\n}));\n\nvi.mock(\"../sharing/ShareButton.js\", () => ({\n ShareButton: () => <button type=\"button\">Share</button>,\n}));\n\nvi.mock(\"../AgentPanel.js\", () => ({\n AgentToggleButton: () => <button type=\"button\">Agent</button>,\n}));\n\nvi.mock(\"../notifications/NotificationsBell.js\", () => ({\n NotificationsBell: () => <button type=\"button\">Notifications</button>,\n}));\n\nvi.mock(\"../composer/PromptComposer.js\", () => ({\n PromptComposer: () => <div />,\n}));\n\nvi.mock(\"../components/ui/popover.js\", () => ({\n Popover: ({ children }: { children: React.ReactNode }) => (\n <div>{children}</div>\n ),\n PopoverContent: ({ children }: { children: React.ReactNode }) => (\n <div>{children}</div>\n ),\n PopoverTrigger: ({ children }: { children: React.ReactNode }) => (\n <>{children}</>\n ),\n}));\n\nvi.mock(\"../components/ui/tooltip.js\", () => ({\n Tooltip: ({ children }: { children: React.ReactNode }) => <>{children}</>,\n TooltipContent: ({ children }: { children: React.ReactNode }) => (\n <div>{children}</div>\n ),\n TooltipProvider: ({ children }: { children: React.ReactNode }) => (\n <>{children}</>\n ),\n TooltipTrigger: ({ children }: { children: React.ReactNode }) => (\n <>{children}</>\n ),\n}));\n\nconst extensionResponse = {\n id: \"ext-1\",\n name: \"GitHub Stars Over Time\",\n description: \"Tracks stars\",\n content: \"<section>Star history chart</section>\",\n updatedAt: \"2026-05-22T00:00:00.000Z\",\n ownerEmail: \"owner@example.test\",\n role: \"owner\",\n canDelete: true,\n};\n\ndescribe(\"ExtensionViewer MCP embeds\", () => {\n let container: HTMLDivElement;\n let root: Root;\n let queryClient: QueryClient;\n\n beforeEach(() => {\n vi.stubGlobal(\"IS_REACT_ACT_ENVIRONMENT\", true);\n vi.stubGlobal(\n \"fetch\",\n vi.fn(async () => Response.json(extensionResponse)),\n );\n embedState.active = false;\n queryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n });\n container = document.createElement(\"div\");\n root = createRoot(container);\n });\n\n afterEach(() => {\n act(() => root.unmount());\n queryClient.clear();\n container.remove();\n vi.unstubAllGlobals();\n });\n\n async function renderViewer() {\n await act(async () => {\n root.render(\n <QueryClientProvider client={queryClient}>\n <MemoryRouter initialEntries={[\"/extensions/ext-1/github-stars\"]}>\n <ExtensionViewer extensionId=\"ext-1\" />\n </MemoryRouter>\n </QueryClientProvider>,\n );\n });\n await vi.waitFor(() => {\n expect(container.querySelector(\"iframe\")).toBeTruthy();\n });\n return container.querySelector(\"iframe\") as HTMLIFrameElement;\n }\n\n it(\"uses the extension render route in the normal app\", async () => {\n const iframe = await renderViewer();\n\n expect(iframe.getAttribute(\"src\")).toContain(\n \"/_agent-native/extensions/ext-1/render\",\n );\n expect(iframe.getAttribute(\"srcdoc\")).toBeNull();\n expect(iframe.getAttribute(\"sandbox\")).toBe(\"allow-scripts allow-forms\");\n });\n\n it(\"uses sandboxed srcdoc inside MCP chat embeds to avoid a blocked nested route frame\", async () => {\n embedState.active = true;\n const iframe = await renderViewer();\n\n expect(iframe.getAttribute(\"src\")).toBeNull();\n expect(iframe.getAttribute(\"srcdoc\")).toContain(\"Star history chart\");\n expect(iframe.getAttribute(\"srcdoc\")).toContain(\n \"agent-native-extension-binding\",\n );\n expect(iframe.getAttribute(\"sandbox\")).toBe(\"allow-scripts allow-forms\");\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/deploy/build.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/deploy/build.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAiC7B;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,EAAE,EACzB,WAAW,EAAE,MAAM,EAAE,EACrB,kBAAkB,GAAE,MAAM,EAAO,EACjC,OAAO,GAAE,gBAAgB,EAAO,EAChC,aAAa,GAAE,oBAAoB,GAAG,IAAW,GAChD,MAAM,CA6ZR;AA0VD,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAmVD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,gBAAgB,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
package/dist/deploy/build.js
CHANGED
|
@@ -21,11 +21,9 @@ import { discoverApiRoutes, discoverPlugins, discoverActionFiles, getMissingDefa
|
|
|
21
21
|
import { getWorkspaceCoreExports, } from "./workspace-core.js";
|
|
22
22
|
import { generateActionRegistryForProject } from "../vite/action-types-plugin.js";
|
|
23
23
|
import { mcpEmbedStaticAssetRouteRules } from "../shared/mcp-embed-headers.js";
|
|
24
|
-
import { EMBED_SESSION_COOKIE, EMBED_TOKEN_QUERY_PARAM, } from "../shared/embed-auth.js";
|
|
25
24
|
const cwd = process.cwd();
|
|
26
25
|
const preset = process.env.NITRO_PRESET || "node";
|
|
27
26
|
const DEFAULT_SSR_CACHE_CONTROL = "public, max-age=5, stale-while-revalidate=604800, stale-if-error=3600";
|
|
28
|
-
const AUTHENTICATED_SSR_CACHE_CONTROL = "private, max-age=5, stale-while-revalidate=604800, stale-if-error=3600";
|
|
29
27
|
function normalizeConfiguredAppBasePath() {
|
|
30
28
|
const raw = process.env.VITE_APP_BASE_PATH || process.env.APP_BASE_PATH;
|
|
31
29
|
if (!raw || raw === "/")
|
|
@@ -264,62 +262,21 @@ function injectHeadScript(html, script) {
|
|
|
264
262
|
}
|
|
265
263
|
|
|
266
264
|
const DEFAULT_SSR_CACHE_CONTROL = ${JSON.stringify(DEFAULT_SSR_CACHE_CONTROL)};
|
|
267
|
-
const AUTHENTICATED_SSR_CACHE_CONTROL = ${JSON.stringify(AUTHENTICATED_SSR_CACHE_CONTROL)};
|
|
268
|
-
const EMBED_SESSION_COOKIE = ${JSON.stringify(EMBED_SESSION_COOKIE)};
|
|
269
|
-
const EMBED_TOKEN_QUERY_PARAM = ${JSON.stringify(EMBED_TOKEN_QUERY_PARAM)};
|
|
270
|
-
const ANONYMOUS_SESSION_COOKIE_NAMES = new Set(["an_docs_session"]);
|
|
271
|
-
const BETTER_AUTH_SESSION_COOKIE_RE = /\\.session_(?:token|data)$/;
|
|
272
265
|
|
|
273
|
-
function
|
|
274
|
-
if (ANONYMOUS_SESSION_COOKIE_NAMES.has(name)) return false;
|
|
275
|
-
const bareName = String(name || "").replace(/^__(?:Secure|Host)-/, "");
|
|
276
|
-
return (
|
|
277
|
-
bareName === EMBED_SESSION_COOKIE ||
|
|
278
|
-
bareName === "an_session" ||
|
|
279
|
-
bareName === "an_session_workspace" ||
|
|
280
|
-
bareName.startsWith("an_session_") ||
|
|
281
|
-
bareName === "an.session_token" ||
|
|
282
|
-
bareName === "an.session_data" ||
|
|
283
|
-
BETTER_AUTH_SESSION_COOKIE_RE.test(bareName)
|
|
284
|
-
);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
function requestHasAuthenticatedCookie(cookieHeader) {
|
|
288
|
-
if (!cookieHeader) return false;
|
|
289
|
-
return String(cookieHeader)
|
|
290
|
-
.split(";")
|
|
291
|
-
.map((cookie) => cookie.trim().split("=", 1)[0]?.trim())
|
|
292
|
-
.filter(Boolean)
|
|
293
|
-
.some(isAuthenticatedCookieName);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
function requestHasAuthSignal(request) {
|
|
297
|
-
const url = new URL(request.url);
|
|
298
|
-
return Boolean(
|
|
299
|
-
request.headers.get("authorization") ||
|
|
300
|
-
requestHasAuthenticatedCookie(request.headers.get("cookie")) ||
|
|
301
|
-
url.searchParams.has(EMBED_TOKEN_QUERY_PARAM) ||
|
|
302
|
-
url.searchParams.has("_session")
|
|
303
|
-
);
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
function applyDefaultSsrCacheHeader(headers, status, hasAuthSignal) {
|
|
266
|
+
function applyDefaultSsrCacheHeader(headers, status) {
|
|
307
267
|
if (headers.has("cache-control")) return;
|
|
308
268
|
if (status < 200 || status >= 400) return;
|
|
309
269
|
|
|
310
270
|
const contentType = (headers.get("content-type") || "").toLowerCase();
|
|
311
271
|
if (!contentType.includes("text/html")) return;
|
|
312
272
|
|
|
313
|
-
headers.set(
|
|
314
|
-
"cache-control",
|
|
315
|
-
hasAuthSignal ? AUTHENTICATED_SSR_CACHE_CONTROL : DEFAULT_SSR_CACHE_CONTROL,
|
|
316
|
-
);
|
|
273
|
+
headers.set("cache-control", DEFAULT_SSR_CACHE_CONTROL);
|
|
317
274
|
}
|
|
318
275
|
|
|
319
|
-
async function rewriteMountedResponse(response, basePath
|
|
276
|
+
async function rewriteMountedResponse(response, basePath) {
|
|
320
277
|
const sentryClientConfigScript = getSentryClientConfigScript();
|
|
321
278
|
const headers = new Headers(response.headers);
|
|
322
|
-
applyDefaultSsrCacheHeader(headers, response.status
|
|
279
|
+
applyDefaultSsrCacheHeader(headers, response.status);
|
|
323
280
|
|
|
324
281
|
const location = headers.get("location");
|
|
325
282
|
if (location?.startsWith("/") && !location.startsWith("//")) {
|
|
@@ -435,7 +392,6 @@ ${actionRegistrations.join("\n")}
|
|
|
435
392
|
return new Response(null, { status: 404 });
|
|
436
393
|
}
|
|
437
394
|
const request = requestWithPathname(event.req, p);
|
|
438
|
-
const hasAuthSignal = requestHasAuthSignal(event.req);
|
|
439
395
|
if (event.req.method === "HEAD") {
|
|
440
396
|
const getRequest = requestWithMethod(request, "GET");
|
|
441
397
|
const response = await rrHandler(getRequest);
|
|
@@ -446,10 +402,9 @@ ${actionRegistrations.join("\n")}
|
|
|
446
402
|
headers: response.headers,
|
|
447
403
|
}),
|
|
448
404
|
basePath,
|
|
449
|
-
hasAuthSignal,
|
|
450
405
|
);
|
|
451
406
|
}
|
|
452
|
-
return rewriteMountedResponse(await rrHandler(request), basePath
|
|
407
|
+
return rewriteMountedResponse(await rrHandler(request), basePath);
|
|
453
408
|
}));
|
|
454
409
|
|
|
455
410
|
_handler = app.fetch.bind(app);
|