@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.
Files changed (54) hide show
  1. package/dist/action.d.ts +7 -0
  2. package/dist/action.d.ts.map +1 -1
  3. package/dist/action.js.map +1 -1
  4. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  5. package/dist/client/extensions/ExtensionViewer.js +26 -1
  6. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  7. package/dist/client/extensions/ExtensionViewer.spec.d.ts +2 -0
  8. package/dist/client/extensions/ExtensionViewer.spec.d.ts.map +1 -0
  9. package/dist/client/extensions/ExtensionViewer.spec.js +94 -0
  10. package/dist/client/extensions/ExtensionViewer.spec.js.map +1 -0
  11. package/dist/deploy/build.d.ts.map +1 -1
  12. package/dist/deploy/build.js +5 -50
  13. package/dist/deploy/build.js.map +1 -1
  14. package/dist/mcp/build-server.d.ts +8 -0
  15. package/dist/mcp/build-server.d.ts.map +1 -1
  16. package/dist/mcp/build-server.js +55 -13
  17. package/dist/mcp/build-server.js.map +1 -1
  18. package/dist/mcp/embed-app.d.ts.map +1 -1
  19. package/dist/mcp/embed-app.js +19 -0
  20. package/dist/mcp/embed-app.js.map +1 -1
  21. package/dist/mcp/server.d.ts.map +1 -1
  22. package/dist/mcp/server.js +13 -1
  23. package/dist/mcp/server.js.map +1 -1
  24. package/dist/mcp/stdio.d.ts.map +1 -1
  25. package/dist/mcp/stdio.js +9 -2
  26. package/dist/mcp/stdio.js.map +1 -1
  27. package/dist/scripts/dev-session.d.ts +9 -13
  28. package/dist/scripts/dev-session.d.ts.map +1 -1
  29. package/dist/scripts/dev-session.js +28 -18
  30. package/dist/scripts/dev-session.js.map +1 -1
  31. package/dist/scripts/runner.js +1 -1
  32. package/dist/scripts/runner.js.map +1 -1
  33. package/dist/server/auth-marketing.d.ts +14 -0
  34. package/dist/server/auth-marketing.d.ts.map +1 -0
  35. package/dist/server/auth-marketing.js +268 -0
  36. package/dist/server/auth-marketing.js.map +1 -0
  37. package/dist/server/auth.d.ts.map +1 -1
  38. package/dist/server/auth.js +34 -25
  39. package/dist/server/auth.js.map +1 -1
  40. package/dist/server/embed-route.d.ts.map +1 -1
  41. package/dist/server/embed-route.js +39 -1
  42. package/dist/server/embed-route.js.map +1 -1
  43. package/dist/server/onboarding-html.d.ts +6 -0
  44. package/dist/server/onboarding-html.d.ts.map +1 -1
  45. package/dist/server/onboarding-html.js +6 -1
  46. package/dist/server/onboarding-html.js.map +1 -1
  47. package/dist/server/ssr-handler.d.ts +0 -1
  48. package/dist/server/ssr-handler.d.ts.map +1 -1
  49. package/dist/server/ssr-handler.js +6 -7
  50. package/dist/server/ssr-handler.js.map +1 -1
  51. package/docs/content/actions.md +1 -1
  52. package/docs/content/external-agents.md +43 -10
  53. package/docs/content/mcp-protocol.md +18 -1
  54. 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;AAuC7B;;;;;;;;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,CAwcR;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"}
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"}
@@ -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 isAuthenticatedCookieName(name) {
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, hasAuthSignal) {
276
+ async function rewriteMountedResponse(response, basePath) {
320
277
  const sentryClientConfigScript = getSentryClientConfigScript();
321
278
  const headers = new Headers(response.headers);
322
- applyDefaultSsrCacheHeader(headers, response.status, hasAuthSignal);
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, hasAuthSignal);
407
+ return rewriteMountedResponse(await rrHandler(request), basePath);
453
408
  }));
454
409
 
455
410
  _handler = app.fetch.bind(app);