@agent-native/core 0.122.0 → 0.122.1

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 (143) hide show
  1. package/README.md +4 -12
  2. package/corpus/README.md +1 -1
  3. package/corpus/core/CHANGELOG.md +9 -0
  4. package/corpus/core/package.json +1 -1
  5. package/corpus/core/src/a2a/client.ts +57 -4
  6. package/corpus/core/src/client/settings/SettingsPanel.tsx +9 -9
  7. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +12 -2
  8. package/corpus/core/src/extensions/url-safety.ts +67 -4
  9. package/corpus/core/src/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  10. package/corpus/core/src/templates/default/app/root.tsx +1 -1
  11. package/corpus/core/src/templates/default/public/manifest.json +2 -2
  12. package/corpus/core/src/vite/client.ts +64 -3
  13. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +1 -23
  14. package/corpus/templates/analytics/app/routes/_index.tsx +1 -1
  15. package/corpus/templates/analytics/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  16. package/corpus/templates/analytics/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  17. package/corpus/templates/analytics/package.json +1 -1
  18. package/corpus/templates/analytics/public/manifest.json +1 -1
  19. package/corpus/templates/analytics/server/plugins/auth.ts +1 -1
  20. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +0 -2
  21. package/corpus/templates/assets/app/routes/_index.tsx +1 -1
  22. package/corpus/templates/assets/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  23. package/corpus/templates/assets/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  24. package/corpus/templates/assets/server/plugins/auth.ts +1 -1
  25. package/corpus/templates/brain/app/lib/brain.ts +0 -7
  26. package/corpus/templates/brain/app/routes/_index.tsx +1 -2
  27. package/corpus/templates/brain/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  28. package/corpus/templates/brain/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  29. package/corpus/templates/brain/package.json +1 -1
  30. package/corpus/templates/brain/public/manifest.json +1 -1
  31. package/corpus/templates/brain/server/plugins/auth.ts +1 -1
  32. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +0 -6
  33. package/corpus/templates/calendar/app/routes/_app._index.tsx +1 -1
  34. package/corpus/templates/calendar/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  35. package/corpus/templates/calendar/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  36. package/corpus/templates/calendar/package.json +1 -1
  37. package/corpus/templates/calendar/public/manifest.json +1 -1
  38. package/corpus/templates/calendar/server/plugins/auth.ts +1 -1
  39. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  40. package/corpus/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  41. package/corpus/templates/clips/actions/import-loom-recording.ts +53 -98
  42. package/corpus/templates/clips/actions/lib/loom-import-job.ts +260 -0
  43. package/corpus/templates/clips/app/components/library/library-layout.tsx +0 -7
  44. package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -1
  45. package/corpus/templates/clips/app/routes/_index.tsx +1 -1
  46. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +6 -0
  47. package/corpus/templates/clips/app/routes/record.tsx +5 -0
  48. package/corpus/templates/clips/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  49. package/corpus/templates/clips/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  50. package/corpus/templates/clips/server/db/schema.ts +2 -0
  51. package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +2 -1
  52. package/corpus/templates/clips/server/plugins/auth.ts +1 -1
  53. package/corpus/templates/clips/server/plugins/db.ts +8 -0
  54. package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +56 -3
  55. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -39
  56. package/corpus/templates/content/app/routes/_app._index.tsx +1 -2
  57. package/corpus/templates/content/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  58. package/corpus/templates/content/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  59. package/corpus/templates/content/package.json +1 -1
  60. package/corpus/templates/content/public/manifest.json +1 -1
  61. package/corpus/templates/content/server/plugins/auth.ts +1 -1
  62. package/corpus/templates/design/app/components/layout/Sidebar.tsx +0 -2
  63. package/corpus/templates/design/app/routes/_index.tsx +1 -1
  64. package/corpus/templates/design/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  65. package/corpus/templates/design/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  66. package/corpus/templates/design/server/plugins/auth.ts +1 -1
  67. package/corpus/templates/dispatch/app/dispatch-extensions.tsx +1 -10
  68. package/corpus/templates/dispatch/app/routes/overview.tsx +1 -1
  69. package/corpus/templates/dispatch/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  70. package/corpus/templates/dispatch/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  71. package/corpus/templates/dispatch/package.json +1 -1
  72. package/corpus/templates/dispatch/public/manifest.json +1 -1
  73. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +0 -35
  74. package/corpus/templates/forms/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  75. package/corpus/templates/forms/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  76. package/corpus/templates/forms/package.json +1 -1
  77. package/corpus/templates/forms/public/manifest.json +1 -1
  78. package/corpus/templates/forms/server/plugins/auth.ts +1 -1
  79. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +0 -2
  80. package/corpus/templates/macros/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  81. package/corpus/templates/macros/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  82. package/corpus/templates/macros/package.json +1 -1
  83. package/corpus/templates/macros/server/plugins/auth.ts +2 -2
  84. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +0 -39
  85. package/corpus/templates/mail/app/routes/$view.$threadId.tsx +1 -1
  86. package/corpus/templates/mail/app/routes/$view.tsx +1 -1
  87. package/corpus/templates/mail/app/routes/_index.tsx +1 -1
  88. package/corpus/templates/mail/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  89. package/corpus/templates/mail/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  90. package/corpus/templates/mail/package.json +1 -1
  91. package/corpus/templates/mail/public/manifest.json +1 -1
  92. package/corpus/templates/mail/server/plugins/auth.ts +1 -1
  93. package/corpus/templates/plan/agent-native.app-skill.json +1 -1
  94. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +4 -9
  95. package/corpus/templates/plan/app/lib/app-config.ts +1 -1
  96. package/corpus/templates/plan/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  97. package/corpus/templates/plan/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  98. package/corpus/templates/plan/package.json +1 -1
  99. package/corpus/templates/plan/public/manifest.json +1 -1
  100. package/corpus/templates/plan/server/plugins/auth.ts +1 -1
  101. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +0 -2
  102. package/corpus/templates/slides/app/routes/_index.tsx +1 -1
  103. package/corpus/templates/slides/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  104. package/corpus/templates/slides/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  105. package/corpus/templates/slides/package.json +1 -1
  106. package/corpus/templates/slides/public/manifest.json +1 -1
  107. package/corpus/templates/slides/server/plugins/auth.ts +1 -1
  108. package/dist/a2a/client.d.ts.map +1 -1
  109. package/dist/a2a/client.js +58 -4
  110. package/dist/a2a/client.js.map +1 -1
  111. package/dist/client/settings/SettingsPanel.js +9 -9
  112. package/dist/client/settings/SettingsPanel.js.map +1 -1
  113. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  114. package/dist/client/settings/SettingsTabsPage.js +7 -4
  115. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  116. package/dist/collab/struct-routes.d.ts +1 -1
  117. package/dist/extensions/url-safety.d.ts +9 -16
  118. package/dist/extensions/url-safety.d.ts.map +1 -1
  119. package/dist/extensions/url-safety.js +48 -4
  120. package/dist/extensions/url-safety.js.map +1 -1
  121. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  122. package/dist/notifications/routes.d.ts +2 -2
  123. package/dist/observability/routes.d.ts +3 -3
  124. package/dist/resources/handlers.d.ts +1 -1
  125. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  126. package/dist/server/transcribe-voice.d.ts +1 -1
  127. package/dist/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  128. package/dist/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  129. package/dist/templates/default/app/root.tsx +1 -1
  130. package/dist/templates/default/public/manifest.json +2 -2
  131. package/dist/vite/client.d.ts.map +1 -1
  132. package/dist/vite/client.js +64 -1
  133. package/dist/vite/client.js.map +1 -1
  134. package/package.json +1 -1
  135. package/src/a2a/client.ts +57 -4
  136. package/src/client/settings/SettingsPanel.tsx +9 -9
  137. package/src/client/settings/SettingsTabsPage.tsx +12 -2
  138. package/src/extensions/url-safety.ts +67 -4
  139. package/src/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  140. package/src/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  141. package/src/templates/default/app/root.tsx +1 -1
  142. package/src/templates/default/public/manifest.json +2 -2
  143. package/src/vite/client.ts +64 -3
@@ -14,7 +14,6 @@ import { normalizeMailLabel } from "@shared/gmail-labels";
14
14
  import type { Label } from "@shared/types";
15
15
  import {
16
16
  IconMenu2,
17
- IconHierarchy2,
18
17
  IconSettings,
19
18
  IconSearch,
20
19
  IconCheck,
@@ -1775,25 +1774,6 @@ function AppLayoutInner({ children }: AppLayoutProps) {
1775
1774
 
1776
1775
  <div className="flex items-center justify-end gap-1 px-2 py-2">
1777
1776
  <DevDatabaseLink />
1778
- <Tooltip>
1779
- <TooltipTrigger asChild>
1780
- <Link
1781
- to="/agent"
1782
- onClick={closeSidebar}
1783
- aria-label={t("settings.openAgentSettings")}
1784
- className={cn(
1785
- "flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground",
1786
- location.pathname === "/agent" &&
1787
- "bg-accent/60 text-foreground",
1788
- )}
1789
- >
1790
- <IconHierarchy2 className="h-4 w-4" />
1791
- </Link>
1792
- </TooltipTrigger>
1793
- <TooltipContent>
1794
- {t("settings.openAgentSettings")}
1795
- </TooltipContent>
1796
- </Tooltip>
1797
1777
  <Tooltip>
1798
1778
  <TooltipTrigger asChild>
1799
1779
  <Link
@@ -2196,25 +2176,6 @@ function StandardLayout({ children }: AppLayoutProps) {
2196
2176
  <div className="flex items-center justify-end gap-1 px-2 py-2">
2197
2177
  <DevDatabaseLink />
2198
2178
  <div className="flex shrink-0 items-center gap-0.5">
2199
- <Tooltip>
2200
- <TooltipTrigger asChild>
2201
- <Link
2202
- to="/agent"
2203
- onClick={() => setSidebarOpen(false)}
2204
- aria-label={t("settings.openAgentSettings")}
2205
- className={cn(
2206
- "flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground",
2207
- location.pathname === "/agent" &&
2208
- "bg-accent/60 text-foreground",
2209
- )}
2210
- >
2211
- <IconHierarchy2 className="h-4 w-4" />
2212
- </Link>
2213
- </TooltipTrigger>
2214
- <TooltipContent>
2215
- {t("settings.openAgentSettings")}
2216
- </TooltipContent>
2217
- </Tooltip>
2218
2179
  <Tooltip>
2219
2180
  <TooltipTrigger asChild>
2220
2181
  <Link
@@ -1,7 +1,7 @@
1
1
  import { InboxPage } from "@/pages/InboxPage";
2
2
 
3
3
  const SEO_TITLE =
4
- "Agent-Native Mail - Open Source AI email client and Superhuman alternative";
4
+ "Mail - Open Source AI email client and Superhuman alternative";
5
5
  const SEO_DESCRIPTION =
6
6
  "Open Source AI email client for Gmail triage, drafting, organization, follow-ups, and inbox workflows built around shared actions.";
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { InboxPage } from "@/pages/InboxPage";
2
2
 
3
3
  const SEO_TITLE =
4
- "Agent-Native Mail - Open Source AI email client and Superhuman alternative";
4
+ "Mail - Open Source AI email client and Superhuman alternative";
5
5
  const SEO_DESCRIPTION =
6
6
  "Open Source AI email client for Gmail triage, drafting, organization, follow-ups, and inbox workflows built around shared actions.";
7
7
 
@@ -3,7 +3,7 @@ import { redirect } from "react-router";
3
3
  import { Spinner } from "@/components/ui/spinner";
4
4
 
5
5
  const SEO_TITLE =
6
- "Agent-Native Mail - Open Source AI email client and Superhuman alternative";
6
+ "Mail - Open Source AI email client and Superhuman alternative";
7
7
  const SEO_DESCRIPTION =
8
8
  "Open Source AI email client for Gmail triage, drafting, organization, follow-ups, and inbox workflows built around shared actions.";
9
9
 
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-25
4
+ ---
5
+
6
+ App branding now uses the product name without the Agent-Native prefix.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-25
4
+ ---
5
+
6
+ Settings navigation now keeps Manage agent as a dedicated linked destination at the bottom.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mail",
3
- "displayName": "Agent-Native Mail",
3
+ "displayName": "Mail",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "Agent Native Mail",
2
+ "name": "Mail",
3
3
  "short_name": "Mail",
4
4
  "description": "Email client",
5
5
  "start_url": ".",
@@ -26,7 +26,7 @@ export default createAuthPlugin({
26
26
  "https://www.googleapis.com/auth/calendar.events",
27
27
  ],
28
28
  marketing: {
29
- appName: "Agent-Native Mail",
29
+ appName: "Mail",
30
30
  tagline: "Your AI agent reads, drafts, and organizes email alongside you.",
31
31
  features: [
32
32
  "Replies that match your tone and style",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "id": "plans",
4
- "displayName": "Agent-Native Plan",
4
+ "displayName": "Plan",
5
5
  "description": "Generate and review coding-agent plans as structured visual documents with diagrams, wireframes, prototypes, annotations, share links, feedback, and HTML export.",
6
6
  "hosted": {
7
7
  "url": "https://plan.agent-native.com",
@@ -20,7 +20,6 @@ import {
20
20
  type ChatHistoryItem,
21
21
  } from "@agent-native/toolkit/chat-history";
22
22
  import {
23
- IconHierarchy2,
24
23
  IconClipboardCheck,
25
24
  IconEdit,
26
25
  IconLayoutSidebarLeftCollapse,
@@ -57,19 +56,16 @@ const PLAN_CHAT_STORAGE_KEY = "plans";
57
56
 
58
57
  const PLAN_BRANDING_CODE_CONTEXT = [
59
58
  "The user is using the Plan app branding customization popover.",
60
- "Make source-code changes for Agent-Native Plan branding in templates/plan.",
59
+ "Make source-code changes for Plan branding in templates/plan.",
61
60
  "Inspect the current brand surfaces first: app/lib/app-config.ts, app/components/layout/Sidebar.tsx, app/root.tsx metadata/icons, public brand assets, and app/global.css theme tokens.",
62
61
  "Keep runtime plan data, stored plans, recaps, comments, and generated plan content unchanged unless the user explicitly asks for those data changes.",
63
62
  "Use existing Plan styling, shadcn primitives, Tabler icons, and repo patterns. Keep changes tightly scoped.",
64
63
  ].join("\n");
65
64
 
66
65
  function buildBrandingCustomizationMessage(request: string) {
67
- return [
68
- "Customize the Agent-Native Plan app branding.",
69
- "",
70
- "Request:",
71
- request,
72
- ].join("\n");
66
+ return ["Customize the Plan app branding.", "", "Request:", request].join(
67
+ "\n",
68
+ );
73
69
  }
74
70
 
75
71
  const navItems = [
@@ -78,7 +74,6 @@ const navItems = [
78
74
  ];
79
75
 
80
76
  const bottomNavItems = [
81
- { icon: IconHierarchy2, labelKey: "settings.agentTitle", href: "/agent" },
82
77
  { icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
83
78
  ];
84
79
 
@@ -8,4 +8,4 @@ export const APP_NAME =
8
8
  rawAppName === APP_NAME_PLACEHOLDER ? "plan" : rawAppName;
9
9
 
10
10
  export const APP_TITLE =
11
- rawAppTitle === APP_TITLE_PLACEHOLDER ? "Agent-Native Plan" : rawAppTitle;
11
+ rawAppTitle === APP_TITLE_PLACEHOLDER ? "Plan" : rawAppTitle;
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-25
4
+ ---
5
+
6
+ App branding now uses the product name without the Agent-Native prefix.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-25
4
+ ---
5
+
6
+ Settings navigation now keeps Manage agent as a dedicated linked destination at the bottom.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plan",
3
- "displayName": "Agent-Native Plan",
3
+ "displayName": "Plan",
4
4
  "private": true,
5
5
  "description": "Generate and review coding-agent plans with diagrams, wireframes, annotations, prototypes, and feedback.",
6
6
  "type": "module",
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "Agent-Native Plan",
2
+ "name": "Plan",
3
3
  "short_name": "Plan",
4
4
  "description": "Generate and review coding-agent plans with diagrams, wireframes, prototypes, annotations, sharing, and feedback.",
5
5
  "start_url": ".",
@@ -59,7 +59,7 @@ export default createAuthPlugin({
59
59
  ...PUBLIC_AGENT_CHAT_PATHS,
60
60
  ],
61
61
  marketing: {
62
- appName: "Agent-Native Plan",
62
+ appName: "Plan",
63
63
  tagline:
64
64
  "Turn coding-agent plans into visual, annotatable HTML before code changes happen.",
65
65
  features: [
@@ -7,7 +7,6 @@ import { FeedbackButton } from "@agent-native/core/client/ui";
7
7
  import { SidebarFooterActions } from "@agent-native/toolkit/app-shell";
8
8
  import {
9
9
  IconStack2,
10
- IconHierarchy2,
11
10
  IconPalette,
12
11
  IconSettings,
13
12
  IconLayoutSidebarLeftCollapse,
@@ -33,7 +32,6 @@ const navItems = [
33
32
  ];
34
33
 
35
34
  const bottomNavItems = [
36
- { icon: IconHierarchy2, labelKey: "settings.agentTitle", href: "/agent" },
37
35
  { icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
38
36
  ];
39
37
 
@@ -1,7 +1,7 @@
1
1
  import Index from "@/pages/Index";
2
2
 
3
3
  const SEO_TITLE =
4
- "Agent-Native Slides - Open Source AI presentation builder and Google Slides alternative";
4
+ "Slides - Open Source AI presentation builder and Google Slides alternative";
5
5
  const SEO_DESCRIPTION =
6
6
  "Open Source AI presentation builder for generating, editing, refining, and exporting React decks as Google Slides-ready presentations.";
7
7
 
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-25
4
+ ---
5
+
6
+ App branding now uses the product name without the Agent-Native prefix.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-25
4
+ ---
5
+
6
+ Settings navigation now keeps Manage agent as a dedicated linked destination at the bottom.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slides",
3
- "displayName": "Agent-Native Slides",
3
+ "displayName": "Slides",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "Agent Native Slides",
2
+ "name": "Slides",
3
3
  "short_name": "Slides",
4
4
  "description": "AI slide deck creator",
5
5
  "start_url": ".",
@@ -2,7 +2,7 @@ import { createAuthPlugin } from "@agent-native/core/server";
2
2
 
3
3
  export default createAuthPlugin({
4
4
  marketing: {
5
- appName: "Agent-Native Slides",
5
+ appName: "Slides",
6
6
  tagline:
7
7
  "Your AI agent builds, edits, and refines presentations alongside you.",
8
8
  features: [
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,49 @@
1
1
  import * as jose from "jose";
2
2
  import { ssrfSafeFetch } from "../extensions/url-safety.js";
3
+ /**
4
+ * A workspace serves every app from one gateway on loopback, so sibling A2A
5
+ * targets are private addresses by construction and the SSRF guard cannot tell
6
+ * them apart from an attack. Trust only origins this deployment configured for
7
+ * itself — never a value that arrived on a request.
8
+ */
9
+ function workspacePrivateOrigins() {
10
+ const origins = [
11
+ process.env.WORKSPACE_GATEWAY_URL,
12
+ process.env.APP_URL,
13
+ process.env.BETTER_AUTH_URL,
14
+ // Escape hatch for contexts that never receive the gateway manifest (the
15
+ // action CLI, one-off scripts). Comma-separated origins.
16
+ ...(process.env.AGENT_NATIVE_A2A_ALLOWED_ORIGINS ?? "").split(","),
17
+ ]
18
+ .map((value) => value?.trim())
19
+ .filter((value) => !!value);
20
+ // The gateway also hands each child the sibling manifest, and siblings are
21
+ // reached on their own loopback ports rather than through the gateway.
22
+ const raw = process.env.AGENT_NATIVE_WORKSPACE_APPS_JSON;
23
+ if (raw) {
24
+ try {
25
+ const parsed = JSON.parse(raw);
26
+ const apps = Array.isArray(parsed?.apps)
27
+ ? parsed.apps
28
+ : Array.isArray(parsed)
29
+ ? parsed
30
+ : [];
31
+ for (const app of apps) {
32
+ const url = app?.url ?? app?.origin ?? app?.baseUrl;
33
+ if (typeof url === "string" && url)
34
+ origins.push(url);
35
+ const port = app?.port;
36
+ if (typeof port === "number" && Number.isFinite(port)) {
37
+ origins.push(`http://127.0.0.1:${port}`);
38
+ }
39
+ }
40
+ }
41
+ catch {
42
+ // A malformed manifest must not disable the SSRF guard.
43
+ }
44
+ }
45
+ return origins;
46
+ }
3
47
  import { sanitizeA2ACorrelationMetadata } from "./correlation.js";
4
48
  const DEFAULT_A2A_POLL_REQUEST_TIMEOUT_MS = 15_000;
5
49
  export class A2ATaskTimeoutError extends Error {
@@ -87,7 +131,7 @@ export class A2AClient {
87
131
  return;
88
132
  for (const endpoint of this.endpointCandidates) {
89
133
  try {
90
- const res = await ssrfSafeFetch(endpoint, { method: "OPTIONS" }, { maxRedirects: 3 });
134
+ const res = await ssrfSafeFetch(endpoint, { method: "OPTIONS" }, { maxRedirects: 3, allowedPrivateOrigins: workspacePrivateOrigins() });
91
135
  if (res.status !== 404 && res.status !== 405) {
92
136
  this.endpointCandidates = [endpoint];
93
137
  return;
@@ -157,7 +201,7 @@ export class A2AClient {
157
201
  throw lastError ?? new Error("No A2A endpoint candidates available");
158
202
  }
159
203
  async getAgentCard() {
160
- const res = await ssrfSafeFetch(`${this.baseUrl}/.well-known/agent-card.json`, {}, { maxRedirects: 3 });
204
+ const res = await ssrfSafeFetch(`${this.baseUrl}/.well-known/agent-card.json`, {}, { maxRedirects: 3, allowedPrivateOrigins: workspacePrivateOrigins() });
161
205
  if (!res.ok) {
162
206
  throw new Error(`Failed to fetch agent card (${res.status})`);
163
207
  }
@@ -372,7 +416,7 @@ export class A2AClient {
372
416
  headers: this.headers(apiKey),
373
417
  body: JSON.stringify(body),
374
418
  signal: controller?.signal,
375
- }, { maxRedirects: 3 });
419
+ }, { maxRedirects: 3, allowedPrivateOrigins: workspacePrivateOrigins() });
376
420
  }
377
421
  finally {
378
422
  if (timer)
@@ -609,7 +653,17 @@ async function buildA2AApiKeyAttempts(opts, audience) {
609
653
  }
610
654
  function normalizeA2AAudience(url) {
611
655
  const explicit = splitExplicitA2AEndpoint(url.replace(/\/$/, ""));
612
- return (explicit?.baseUrl ?? url).replace(/\/$/, "");
656
+ const base = (explicit?.baseUrl ?? url).replace(/\/$/, "");
657
+ // Receivers derive their expected audience from APP_URL, which carries no
658
+ // app path. In a workspace every app is mounted under one gateway origin, so
659
+ // signing the path-qualified URL yields an audience the receiver can never
660
+ // match. The origin is the identifier both sides agree on.
661
+ try {
662
+ return new URL(base).origin;
663
+ }
664
+ catch {
665
+ return base;
666
+ }
613
667
  }
614
668
  function isA2AAuthRejection(err) {
615
669
  const message = err instanceof Error ? err.message : String(err ?? "");