@agent-native/core 0.32.2 → 0.32.17

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 (240) hide show
  1. package/README.md +3 -1
  2. package/dist/agent/run-store.d.ts.map +1 -1
  3. package/dist/agent/run-store.js +48 -10
  4. package/dist/agent/run-store.js.map +1 -1
  5. package/dist/agent/thread-data-builder.d.ts +12 -0
  6. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  7. package/dist/agent/thread-data-builder.js +104 -6
  8. package/dist/agent/thread-data-builder.js.map +1 -1
  9. package/dist/cli/app-skill.js +2 -2
  10. package/dist/cli/app-skill.js.map +1 -1
  11. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  12. package/dist/cli/code-agent-executor.js +6 -1
  13. package/dist/cli/code-agent-executor.js.map +1 -1
  14. package/dist/cli/code-agent-output-smoother.d.ts +7 -0
  15. package/dist/cli/code-agent-output-smoother.d.ts.map +1 -0
  16. package/dist/cli/code-agent-output-smoother.js +111 -0
  17. package/dist/cli/code-agent-output-smoother.js.map +1 -0
  18. package/dist/cli/connect.d.ts.map +1 -1
  19. package/dist/cli/connect.js +5 -0
  20. package/dist/cli/connect.js.map +1 -1
  21. package/dist/cli/migrate.d.ts.map +1 -1
  22. package/dist/cli/migrate.js +17 -42
  23. package/dist/cli/migrate.js.map +1 -1
  24. package/dist/cli/skills.d.ts +23 -2
  25. package/dist/cli/skills.d.ts.map +1 -1
  26. package/dist/cli/skills.js +405 -41
  27. package/dist/cli/skills.js.map +1 -1
  28. package/dist/cli/templates-meta.d.ts.map +1 -1
  29. package/dist/cli/templates-meta.js +7 -105
  30. package/dist/cli/templates-meta.js.map +1 -1
  31. package/dist/client/AgentPanel.d.ts.map +1 -1
  32. package/dist/client/AgentPanel.js +41 -7
  33. package/dist/client/AgentPanel.js.map +1 -1
  34. package/dist/client/AgentTaskCard.d.ts.map +1 -1
  35. package/dist/client/AgentTaskCard.js +0 -28
  36. package/dist/client/AgentTaskCard.js.map +1 -1
  37. package/dist/client/AssistantChat.d.ts +8 -23
  38. package/dist/client/AssistantChat.d.ts.map +1 -1
  39. package/dist/client/AssistantChat.js +359 -205
  40. package/dist/client/AssistantChat.js.map +1 -1
  41. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  42. package/dist/client/MultiTabAssistantChat.js +254 -14
  43. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  44. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  45. package/dist/client/agent-chat-adapter.js +14 -9
  46. package/dist/client/agent-chat-adapter.js.map +1 -1
  47. package/dist/client/agent-chat.d.ts +24 -0
  48. package/dist/client/agent-chat.d.ts.map +1 -1
  49. package/dist/client/agent-chat.js +73 -0
  50. package/dist/client/agent-chat.js.map +1 -1
  51. package/dist/client/assistant-ui-recovery.d.ts +34 -0
  52. package/dist/client/assistant-ui-recovery.d.ts.map +1 -0
  53. package/dist/client/assistant-ui-recovery.js +122 -0
  54. package/dist/client/assistant-ui-recovery.js.map +1 -0
  55. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  56. package/dist/client/composer/PromptComposer.js +7 -1
  57. package/dist/client/composer/PromptComposer.js.map +1 -1
  58. package/dist/client/composer/TiptapComposer.d.ts +7 -1
  59. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  60. package/dist/client/composer/TiptapComposer.js +22 -2
  61. package/dist/client/composer/TiptapComposer.js.map +1 -1
  62. package/dist/client/frame-protocol.d.ts +6 -2
  63. package/dist/client/frame-protocol.d.ts.map +1 -1
  64. package/dist/client/frame-protocol.js.map +1 -1
  65. package/dist/client/index.d.ts +2 -1
  66. package/dist/client/index.d.ts.map +1 -1
  67. package/dist/client/index.js +2 -1
  68. package/dist/client/index.js.map +1 -1
  69. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  70. package/dist/client/org/OrgSwitcher.js +2 -1
  71. package/dist/client/org/OrgSwitcher.js.map +1 -1
  72. package/dist/client/progress/RunsTray.d.ts +13 -3
  73. package/dist/client/progress/RunsTray.d.ts.map +1 -1
  74. package/dist/client/progress/RunsTray.js +105 -36
  75. package/dist/client/progress/RunsTray.js.map +1 -1
  76. package/dist/client/route-warmup.d.ts +61 -0
  77. package/dist/client/route-warmup.d.ts.map +1 -0
  78. package/dist/client/route-warmup.js +456 -0
  79. package/dist/client/route-warmup.js.map +1 -0
  80. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  81. package/dist/client/settings/SettingsPanel.js +2 -1
  82. package/dist/client/settings/SettingsPanel.js.map +1 -1
  83. package/dist/client/settings/useBuilderStatus.d.ts +5 -0
  84. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  85. package/dist/client/settings/useBuilderStatus.js +10 -4
  86. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  87. package/dist/client/use-action.d.ts +1 -0
  88. package/dist/client/use-action.d.ts.map +1 -1
  89. package/dist/client/use-action.js +22 -4
  90. package/dist/client/use-action.js.map +1 -1
  91. package/dist/code-agents/background-run.d.ts +2 -0
  92. package/dist/code-agents/background-run.d.ts.map +1 -1
  93. package/dist/code-agents/background-run.js.map +1 -1
  94. package/dist/db/client.d.ts +1 -1
  95. package/dist/db/client.d.ts.map +1 -1
  96. package/dist/db/client.js +25 -1
  97. package/dist/db/client.js.map +1 -1
  98. package/dist/deploy/build.d.ts +4 -0
  99. package/dist/deploy/build.d.ts.map +1 -1
  100. package/dist/deploy/build.js +171 -14
  101. package/dist/deploy/build.js.map +1 -1
  102. package/dist/deploy/immutable-assets.d.ts +1 -0
  103. package/dist/deploy/immutable-assets.d.ts.map +1 -1
  104. package/dist/deploy/immutable-assets.js +1 -0
  105. package/dist/deploy/immutable-assets.js.map +1 -1
  106. package/dist/index.browser.d.ts +1 -1
  107. package/dist/index.browser.d.ts.map +1 -1
  108. package/dist/index.browser.js +1 -1
  109. package/dist/index.browser.js.map +1 -1
  110. package/dist/index.d.ts +1 -1
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +1 -1
  113. package/dist/index.js.map +1 -1
  114. package/dist/mcp/connect-route.d.ts.map +1 -1
  115. package/dist/mcp/connect-route.js +118 -82
  116. package/dist/mcp/connect-route.js.map +1 -1
  117. package/dist/progress/routes.d.ts.map +1 -1
  118. package/dist/progress/routes.js +1 -0
  119. package/dist/progress/routes.js.map +1 -1
  120. package/dist/progress/store.d.ts +13 -0
  121. package/dist/progress/store.d.ts.map +1 -1
  122. package/dist/progress/store.js +18 -0
  123. package/dist/progress/store.js.map +1 -1
  124. package/dist/progress/types.d.ts +2 -0
  125. package/dist/progress/types.d.ts.map +1 -1
  126. package/dist/progress/types.js.map +1 -1
  127. package/dist/scripts/db/wipe-leaked-builder-keys.d.ts +2 -2
  128. package/dist/scripts/db/wipe-leaked-builder-keys.d.ts.map +1 -1
  129. package/dist/scripts/db/wipe-leaked-builder-keys.js +14 -3
  130. package/dist/scripts/db/wipe-leaked-builder-keys.js.map +1 -1
  131. package/dist/server/action-routes.d.ts +1 -0
  132. package/dist/server/action-routes.d.ts.map +1 -1
  133. package/dist/server/action-routes.js +36 -2
  134. package/dist/server/action-routes.js.map +1 -1
  135. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  136. package/dist/server/agent-chat-plugin.js +123 -25
  137. package/dist/server/agent-chat-plugin.js.map +1 -1
  138. package/dist/server/agent-discovery.d.ts.map +1 -1
  139. package/dist/server/agent-discovery.js +14 -1
  140. package/dist/server/agent-discovery.js.map +1 -1
  141. package/dist/server/agent-teams-run-queue.d.ts +80 -0
  142. package/dist/server/agent-teams-run-queue.d.ts.map +1 -0
  143. package/dist/server/agent-teams-run-queue.js +208 -0
  144. package/dist/server/agent-teams-run-queue.js.map +1 -0
  145. package/dist/server/agent-teams.d.ts +67 -0
  146. package/dist/server/agent-teams.d.ts.map +1 -1
  147. package/dist/server/agent-teams.js +607 -180
  148. package/dist/server/agent-teams.js.map +1 -1
  149. package/dist/server/auth-marketing.d.ts.map +1 -1
  150. package/dist/server/auth-marketing.js +0 -64
  151. package/dist/server/auth-marketing.js.map +1 -1
  152. package/dist/server/auth.d.ts.map +1 -1
  153. package/dist/server/auth.js +67 -14
  154. package/dist/server/auth.js.map +1 -1
  155. package/dist/server/builder-browser.d.ts +12 -2
  156. package/dist/server/builder-browser.d.ts.map +1 -1
  157. package/dist/server/builder-browser.js +24 -0
  158. package/dist/server/builder-browser.js.map +1 -1
  159. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  160. package/dist/server/core-routes-plugin.js +66 -5
  161. package/dist/server/core-routes-plugin.js.map +1 -1
  162. package/dist/server/credential-provider.d.ts +10 -0
  163. package/dist/server/credential-provider.d.ts.map +1 -1
  164. package/dist/server/credential-provider.js +82 -3
  165. package/dist/server/credential-provider.js.map +1 -1
  166. package/dist/server/csrf.d.ts.map +1 -1
  167. package/dist/server/csrf.js +3 -0
  168. package/dist/server/csrf.js.map +1 -1
  169. package/dist/server/index.d.ts +1 -0
  170. package/dist/server/index.d.ts.map +1 -1
  171. package/dist/server/index.js +1 -0
  172. package/dist/server/index.js.map +1 -1
  173. package/dist/server/onboarding-html.d.ts +1 -0
  174. package/dist/server/onboarding-html.d.ts.map +1 -1
  175. package/dist/server/onboarding-html.js +14 -1
  176. package/dist/server/onboarding-html.js.map +1 -1
  177. package/dist/server/self-dispatch.d.ts +44 -0
  178. package/dist/server/self-dispatch.d.ts.map +1 -0
  179. package/dist/server/self-dispatch.js +113 -0
  180. package/dist/server/self-dispatch.js.map +1 -0
  181. package/dist/server/social-og-image.d.ts +14 -0
  182. package/dist/server/social-og-image.d.ts.map +1 -0
  183. package/dist/server/social-og-image.js +251 -0
  184. package/dist/server/social-og-image.js.map +1 -0
  185. package/dist/server/ssr-handler.d.ts +1 -1
  186. package/dist/server/ssr-handler.d.ts.map +1 -1
  187. package/dist/server/ssr-handler.js +27 -11
  188. package/dist/server/ssr-handler.js.map +1 -1
  189. package/dist/shared/cache-control.d.ts +7 -0
  190. package/dist/shared/cache-control.d.ts.map +1 -1
  191. package/dist/shared/cache-control.js +7 -0
  192. package/dist/shared/cache-control.js.map +1 -1
  193. package/dist/shared/index.d.ts +1 -1
  194. package/dist/shared/index.d.ts.map +1 -1
  195. package/dist/shared/index.js +1 -1
  196. package/dist/shared/index.js.map +1 -1
  197. package/dist/shared/route-warmup-config.d.ts +28 -0
  198. package/dist/shared/route-warmup-config.d.ts.map +1 -0
  199. package/dist/shared/route-warmup-config.js +58 -0
  200. package/dist/shared/route-warmup-config.js.map +1 -0
  201. package/dist/shared/social-meta.d.ts +5 -0
  202. package/dist/shared/social-meta.d.ts.map +1 -1
  203. package/dist/shared/social-meta.js +36 -2
  204. package/dist/shared/social-meta.js.map +1 -1
  205. package/dist/shared/streaming-text-smoothing.d.ts +12 -0
  206. package/dist/shared/streaming-text-smoothing.d.ts.map +1 -0
  207. package/dist/shared/streaming-text-smoothing.js +52 -0
  208. package/dist/shared/streaming-text-smoothing.js.map +1 -0
  209. package/dist/styles/agent-native.css +4 -4
  210. package/dist/templates/default/AGENTS.md +9 -4
  211. package/dist/templates/default/DEVELOPING.md +15 -1
  212. package/dist/templates/workspace-core/AGENTS.md +7 -3
  213. package/dist/templates/workspace-root/AGENTS.md +7 -3
  214. package/dist/vite/client.d.ts +13 -0
  215. package/dist/vite/client.d.ts.map +1 -1
  216. package/dist/vite/client.js +26 -0
  217. package/dist/vite/client.js.map +1 -1
  218. package/dist/vite/index.d.ts +1 -0
  219. package/dist/vite/index.d.ts.map +1 -1
  220. package/dist/vite/index.js.map +1 -1
  221. package/docs/content/client.md +62 -1
  222. package/docs/content/code-agents-ui.md +6 -13
  223. package/docs/content/context-awareness.md +186 -21
  224. package/docs/content/deployment.md +8 -11
  225. package/docs/content/dispatch.md +1 -1
  226. package/docs/content/external-agents.md +32 -2
  227. package/docs/content/migration-workbench.md +4 -21
  228. package/docs/content/multi-app-workspace.md +1 -1
  229. package/docs/content/recurring-jobs.md +1 -1
  230. package/docs/content/security.md +0 -1
  231. package/docs/content/sharing.md +1 -3
  232. package/docs/content/skills-guide.md +12 -10
  233. package/docs/content/template-assets.md +21 -1
  234. package/docs/content/template-design.md +23 -5
  235. package/docs/content/template-dispatch.md +1 -1
  236. package/package.json +2 -1
  237. package/src/templates/default/AGENTS.md +9 -4
  238. package/src/templates/default/DEVELOPING.md +15 -1
  239. package/src/templates/workspace-core/AGENTS.md +7 -3
  240. package/src/templates/workspace-root/AGENTS.md +7 -3
@@ -44,13 +44,13 @@ import { getAllowedCorsOrigin, readCorsAllowedOrigins, } from "./cors-origins.js
44
44
  import { getOnboardingHtml, getResetPasswordHtml, } from "./onboarding-html.js";
45
45
  import { readBody } from "../server/h3-helpers.js";
46
46
  import { readDesktopSso, writeDesktopSso, clearDesktopSso, } from "./desktop-sso.js";
47
- import { isElectron as isElectronRequest, getAppBasePath, getAppUrl, encodeOAuthState, decodeOAuthState, createOAuthSession, oauthCallbackResponse, oauthErrorPage, resolveOAuthRedirectUri, isAllowedOAuthRedirectUri, } from "./google-oauth.js";
47
+ import { isElectron as isElectronRequest, getAppBasePath, getAppUrl, getOrigin, encodeOAuthState, decodeOAuthState, createOAuthSession, oauthCallbackResponse, oauthErrorPage, resolveOAuthRedirectUri, isAllowedOAuthRedirectUri, } from "./google-oauth.js";
48
48
  import { safeOAuthReturnUrl } from "./oauth-return-url.js";
49
49
  import { captureAuthError } from "./sentry.js";
50
50
  import { extractOAuthStateAppId } from "../shared/oauth-state.js";
51
51
  import { isValidWorkspaceAppIdFormat } from "../shared/workspace-app-id.js";
52
+ import { AGENT_NATIVE_SOCIAL_IMAGE_ALT, AGENT_NATIVE_SOCIAL_IMAGE_HEIGHT, AGENT_NATIVE_SOCIAL_IMAGE_PATH, AGENT_NATIVE_SOCIAL_IMAGE_TYPE, AGENT_NATIVE_SOCIAL_IMAGE_WIDTH, } from "../shared/social-meta.js";
52
53
  import { normalizeWorkspaceAppAudience, workspaceAppAudienceFromEnv, workspaceAppRouteAccessFromEnv, } from "../shared/workspace-app-audience.js";
53
- import { DEFAULT_SSR_CACHE_CONTROL } from "../shared/cache-control.js";
54
54
  import { resolveAuthCookieNamespace } from "./cookie-namespace.js";
55
55
  import { BUILDER_CONNECT_OWNER_COOKIE, BUILDER_CONNECT_PARAM, BUILDER_STATE_PARAM, verifyBuilderCallbackStateAndGetOwner, verifyBuilderConnectTokenAndGetOwner, } from "./builder-browser.js";
56
56
  // Pure env-read feature switch from a leaf module (no dependency back on
@@ -72,7 +72,7 @@ export function getSessionMaxAge() {
72
72
  *
73
73
  * Browsers scope cookies by host (NOT host+port — RFC 6265), so two apps
74
74
  * running on different localhost ports share one cookie jar. When multiple
75
- * templates run side-by-side (`dev:all`, the desktop app, multi-template
75
+ * templates run side-by-side (eager repo dev, the desktop app, multi-template
76
76
  * deploys on a shared domain), they would otherwise stomp on each other's
77
77
  * `an_session` cookie and ping-pong each other into a logged-out state.
78
78
  *
@@ -315,7 +315,8 @@ export function getConfiguredLoginHtml(event) {
315
315
  const url = event.node?.req?.url ?? event.path ?? "/";
316
316
  const queryStart = url.indexOf("?");
317
317
  const rawPath = queryStart >= 0 ? url.slice(0, queryStart) : url;
318
- return config.getLoginHtml?.(event, rawPath) ?? config.loginHtml ?? null;
318
+ const loginHtml = config.getLoginHtml?.(event, rawPath) ?? config.loginHtml ?? null;
319
+ return loginHtml ? injectLoginSocialImageMeta(loginHtml, event) : null;
319
320
  }
320
321
  /**
321
322
  * True only when the request originates from the local machine — the raw
@@ -598,6 +599,7 @@ function getOnboardingHtmlOptions(options, event, rawPath) {
598
599
  googleAuthMode: options.googleAuthMode,
599
600
  requestHost: event ? getRequestHost(event) : undefined,
600
601
  requestPath: rawPath,
602
+ requestOrigin: event ? getOrigin(event) : undefined,
601
603
  };
602
604
  }
603
605
  function getAuthOnboardingHtml(options, event, rawPath) {
@@ -904,12 +906,56 @@ function shouldBypassAuthForBuilderConnect(event, p) {
904
906
  }
905
907
  return false;
906
908
  }
907
- function loginHtmlResponse(loginHtml) {
908
- return new Response(loginHtml, {
909
+ const LOGIN_OG_IMAGE_META_RE = /<meta\b(?=[^>]*\bproperty=(["'])og:image\1)[^>]*>/i;
910
+ const LOGIN_TWITTER_CARD_META_RE = /<meta\b(?=[^>]*\bname=(["'])twitter:card\1)[^>]*>/i;
911
+ const LOGIN_TWITTER_IMAGE_META_RE = /<meta\b(?=[^>]*\bname=(["'])twitter:image\1)[^>]*>/i;
912
+ function escapeHtmlAttr(value) {
913
+ return value
914
+ .replace(/&/g, "&amp;")
915
+ .replace(/</g, "&lt;")
916
+ .replace(/>/g, "&gt;")
917
+ .replace(/"/g, "&quot;");
918
+ }
919
+ function injectLoginSocialImageMeta(loginHtml, event) {
920
+ const headCloseIdx = loginHtml.indexOf("</head>");
921
+ if (headCloseIdx === -1)
922
+ return loginHtml;
923
+ const hasAnySocialImage = LOGIN_OG_IMAGE_META_RE.test(loginHtml) ||
924
+ LOGIN_TWITTER_IMAGE_META_RE.test(loginHtml);
925
+ const imageUrl = escapeHtmlAttr(getAppUrl(event, AGENT_NATIVE_SOCIAL_IMAGE_PATH));
926
+ const tags = [];
927
+ if (!hasAnySocialImage) {
928
+ tags.push(`<meta property="og:image" content="${imageUrl}">`);
929
+ tags.push(`<meta property="og:image:secure_url" content="${imageUrl}">`);
930
+ tags.push(`<meta property="og:image:type" content="${AGENT_NATIVE_SOCIAL_IMAGE_TYPE}">`);
931
+ tags.push(`<meta property="og:image:width" content="${AGENT_NATIVE_SOCIAL_IMAGE_WIDTH}">`);
932
+ tags.push(`<meta property="og:image:height" content="${AGENT_NATIVE_SOCIAL_IMAGE_HEIGHT}">`);
933
+ tags.push(`<meta property="og:image:alt" content="${AGENT_NATIVE_SOCIAL_IMAGE_ALT}">`);
934
+ }
935
+ if (!LOGIN_TWITTER_CARD_META_RE.test(loginHtml)) {
936
+ tags.push(`<meta name="twitter:card" content="summary_large_image">`);
937
+ }
938
+ if (!hasAnySocialImage) {
939
+ tags.push(`<meta name="twitter:image" content="${imageUrl}">`);
940
+ tags.push(`<meta name="twitter:image:alt" content="${AGENT_NATIVE_SOCIAL_IMAGE_ALT}">`);
941
+ }
942
+ if (tags.length === 0)
943
+ return loginHtml;
944
+ return (loginHtml.slice(0, headCloseIdx) +
945
+ tags.join("") +
946
+ loginHtml.slice(headCloseIdx));
947
+ }
948
+ function loginHtmlResponse(loginHtml, event) {
949
+ return new Response(injectLoginSocialImageMeta(loginHtml, event), {
909
950
  status: 200,
910
951
  headers: {
911
952
  "Content-Type": "text/html; charset=utf-8",
912
- "Cache-Control": DEFAULT_SSR_CACHE_CONTROL,
953
+ // Login HTML is selected by the absence of a session cookie. Never put it
954
+ // in a shared CDN cache: the same route may redirect authenticated users
955
+ // or render the app after sign-in.
956
+ "Cache-Control": "private, no-store, max-age=0, must-revalidate",
957
+ "CDN-Cache-Control": "no-store",
958
+ "Netlify-CDN-Cache-Control": "no-store",
913
959
  "X-Robots-Tag": "noindex, nofollow",
914
960
  },
915
961
  });
@@ -989,6 +1035,13 @@ function createAuthGuardFn() {
989
1035
  if (p === "/_agent-native/integrations/process-a2a-continuation") {
990
1036
  return;
991
1037
  }
1038
+ // Agent Teams durable sub-agent processor. Self-fired by `spawnTask` to run
1039
+ // a queued sub-agent in a fresh function invocation; authenticity is
1040
+ // verified by the same HMAC internal-token scheme plus an atomic SQL claim,
1041
+ // so it bypasses cookie/session auth (mirrors the integration processor).
1042
+ if (p === "/_agent-native/agent-teams/_process-run") {
1043
+ return;
1044
+ }
992
1045
  // A2A endpoint verifies authenticity via JWT signed with the org's A2A
993
1046
  // secret (or the global A2A_SECRET fallback), not via session cookies.
994
1047
  if (p === "/_agent-native/a2a") {
@@ -999,10 +1052,10 @@ function createAuthGuardFn() {
999
1052
  // authoritative gate — exactly like A2A above. Without this bypass the
1000
1053
  // guard's blanket 401-for-/_agent-native/* below shadows that check, so
1001
1054
  // an external coding agent (Claude Code / Codex / Cowork) connecting via
1002
- // the stdio proxy or HTTP can never reach it. Exact path only: the MCP
1003
- // handler returns early for `/_agent-native/mcp/*` management subroutes,
1004
- // which keep their normal session auth.
1005
- if (p === "/_agent-native/mcp") {
1055
+ // the stdio proxy or HTTP can never reach it. Exact protocol endpoint only:
1056
+ // tolerate the common trailing slash, but keep
1057
+ // `/_agent-native/mcp/*` management subroutes on normal session auth.
1058
+ if (p === "/_agent-native/mcp" || p === "/_agent-native/mcp/") {
1006
1059
  return;
1007
1060
  }
1008
1061
  // MCP connect — frictionless external-agent connection. Like /open
@@ -1089,7 +1142,7 @@ function createAuthGuardFn() {
1089
1142
  headers: { Location: safeReturn },
1090
1143
  });
1091
1144
  }
1092
- return loginHtmlResponse(loginHtml);
1145
+ return loginHtmlResponse(loginHtml, event);
1093
1146
  }
1094
1147
  // Auth entry pages are framework-owned pages, not app routes. When a user
1095
1148
  // already has a session, redirect them back to the mounted app instead of
@@ -1102,7 +1155,7 @@ function createAuthGuardFn() {
1102
1155
  headers: { Location: getAppBasePath() || "/" },
1103
1156
  });
1104
1157
  }
1105
- return loginHtmlResponse(loginHtml);
1158
+ return loginHtmlResponse(loginHtml, event);
1106
1159
  }
1107
1160
  // Skip static assets (Vite chunks, fonts, images, etc.)
1108
1161
  if (p.startsWith("/assets/") ||
@@ -1154,7 +1207,7 @@ function createAuthGuardFn() {
1154
1207
  if (autoSession)
1155
1208
  return autoSession;
1156
1209
  }
1157
- return loginHtmlResponse(loginHtml);
1210
+ return loginHtmlResponse(loginHtml, event);
1158
1211
  };
1159
1212
  }
1160
1213
  // `.test` is an RFC 6761 reserved TLD that never resolves, so this stays a