@agent-native/core 0.122.0 → 0.122.2

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 (187) hide show
  1. package/README.md +5 -25
  2. package/corpus/README.md +1 -1
  3. package/corpus/core/CHANGELOG.md +15 -0
  4. package/corpus/core/package.json +1 -1
  5. package/corpus/core/src/a2a/client.ts +57 -4
  6. package/corpus/core/src/agent/production-agent.ts +65 -1
  7. package/corpus/core/src/agent/run-store.ts +61 -1
  8. package/corpus/core/src/client/settings/SettingsPanel.tsx +9 -9
  9. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +12 -2
  10. package/corpus/core/src/extensions/url-safety.ts +67 -4
  11. package/corpus/core/src/server/builder-design-systems.ts +1 -1
  12. package/corpus/core/src/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  13. package/corpus/core/src/templates/default/app/root.tsx +1 -1
  14. package/corpus/core/src/templates/default/public/manifest.json +2 -2
  15. package/corpus/core/src/vite/client.ts +64 -3
  16. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +15 -0
  17. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +1 -23
  18. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/report-panel-window.ts +3 -3
  19. package/corpus/templates/analytics/app/routes/_index.tsx +1 -1
  20. package/corpus/templates/analytics/changelog/2026-07-25-analytics-dashboards-and-scheduled-reports-are-faster-and-mo.md +6 -0
  21. package/corpus/templates/analytics/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  22. package/corpus/templates/analytics/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  23. package/corpus/templates/analytics/package.json +1 -1
  24. package/corpus/templates/analytics/public/manifest.json +1 -1
  25. package/corpus/templates/analytics/server/db/schema.ts +12 -0
  26. package/corpus/templates/analytics/server/lib/dashboard-panel-query.ts +8 -4
  27. package/corpus/templates/analytics/server/lib/dashboard-report.ts +136 -5
  28. package/corpus/templates/analytics/server/lib/dashboard-time-scope.ts +250 -1
  29. package/corpus/templates/analytics/server/lib/first-party-analytics-cache.ts +167 -0
  30. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +34 -9
  31. package/corpus/templates/analytics/server/lib/first-party-dashboard-repair.ts +105 -23
  32. package/corpus/templates/analytics/server/lib/first-party-unbounded-panel-repair.ts +169 -0
  33. package/corpus/templates/analytics/server/plugins/auth.ts +1 -1
  34. package/corpus/templates/analytics/server/plugins/db.ts +41 -1
  35. package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +6 -3
  36. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +0 -2
  37. package/corpus/templates/assets/app/routes/_index.tsx +1 -1
  38. package/corpus/templates/assets/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  39. package/corpus/templates/assets/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  40. package/corpus/templates/assets/server/plugins/auth.ts +1 -1
  41. package/corpus/templates/brain/app/lib/brain.ts +0 -7
  42. package/corpus/templates/brain/app/routes/_index.tsx +1 -2
  43. package/corpus/templates/brain/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  44. package/corpus/templates/brain/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  45. package/corpus/templates/brain/package.json +1 -1
  46. package/corpus/templates/brain/public/manifest.json +1 -1
  47. package/corpus/templates/brain/server/plugins/auth.ts +1 -1
  48. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +0 -6
  49. package/corpus/templates/calendar/app/routes/_app._index.tsx +1 -1
  50. package/corpus/templates/calendar/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  51. package/corpus/templates/calendar/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  52. package/corpus/templates/calendar/package.json +1 -1
  53. package/corpus/templates/calendar/public/manifest.json +1 -1
  54. package/corpus/templates/calendar/server/plugins/auth.ts +1 -1
  55. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  56. package/corpus/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  57. package/corpus/templates/clips/actions/import-loom-recording.ts +53 -98
  58. package/corpus/templates/clips/actions/lib/loom-import-job.ts +260 -0
  59. package/corpus/templates/clips/app/components/library/library-layout.tsx +0 -7
  60. package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -1
  61. package/corpus/templates/clips/app/routes/_index.tsx +1 -1
  62. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +6 -0
  63. package/corpus/templates/clips/app/routes/record.tsx +5 -0
  64. package/corpus/templates/clips/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  65. package/corpus/templates/clips/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  66. package/corpus/templates/clips/server/db/schema.ts +2 -0
  67. package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +2 -1
  68. package/corpus/templates/clips/server/plugins/auth.ts +1 -1
  69. package/corpus/templates/clips/server/plugins/db.ts +8 -0
  70. package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +56 -3
  71. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -39
  72. package/corpus/templates/content/app/routes/_app._index.tsx +1 -2
  73. package/corpus/templates/content/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  74. package/corpus/templates/content/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  75. package/corpus/templates/content/package.json +1 -1
  76. package/corpus/templates/content/public/manifest.json +1 -1
  77. package/corpus/templates/content/server/plugins/auth.ts +1 -1
  78. package/corpus/templates/design/actions/edit-design.ts +66 -27
  79. package/corpus/templates/design/app/components/layout/Sidebar.tsx +0 -2
  80. package/corpus/templates/design/app/routes/_index.tsx +1 -1
  81. package/corpus/templates/design/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  82. package/corpus/templates/design/changelog/2026-07-25-design-edits-retry-concurrent-changes.md +6 -0
  83. package/corpus/templates/design/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  84. package/corpus/templates/design/server/plugins/auth.ts +1 -1
  85. package/corpus/templates/design/server/source-workspace.ts +5 -1
  86. package/corpus/templates/dispatch/app/dispatch-extensions.tsx +1 -10
  87. package/corpus/templates/dispatch/app/routes/overview.tsx +1 -1
  88. package/corpus/templates/dispatch/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  89. package/corpus/templates/dispatch/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  90. package/corpus/templates/dispatch/package.json +1 -1
  91. package/corpus/templates/dispatch/public/manifest.json +1 -1
  92. package/corpus/templates/forms/.agents/skills/form-responses/SKILL.md +6 -4
  93. package/corpus/templates/forms/actions/create-form.ts +5 -1
  94. package/corpus/templates/forms/actions/export-responses.ts +22 -11
  95. package/corpus/templates/forms/actions/update-form.ts +5 -1
  96. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +0 -35
  97. package/corpus/templates/forms/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  98. package/corpus/templates/forms/changelog/2026-07-25-fields-can-be-created-without-ids.md +6 -0
  99. package/corpus/templates/forms/changelog/2026-07-25-response-exports-use-file-storage.md +6 -0
  100. package/corpus/templates/forms/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  101. package/corpus/templates/forms/package.json +1 -1
  102. package/corpus/templates/forms/public/manifest.json +1 -1
  103. package/corpus/templates/forms/server/lib/validate-fields.ts +43 -0
  104. package/corpus/templates/forms/server/plugins/auth.ts +1 -1
  105. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +0 -2
  106. package/corpus/templates/macros/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  107. package/corpus/templates/macros/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  108. package/corpus/templates/macros/package.json +1 -1
  109. package/corpus/templates/macros/server/plugins/auth.ts +2 -2
  110. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +0 -39
  111. package/corpus/templates/mail/app/routes/$view.$threadId.tsx +1 -1
  112. package/corpus/templates/mail/app/routes/$view.tsx +1 -1
  113. package/corpus/templates/mail/app/routes/_index.tsx +1 -1
  114. package/corpus/templates/mail/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  115. package/corpus/templates/mail/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  116. package/corpus/templates/mail/package.json +1 -1
  117. package/corpus/templates/mail/public/manifest.json +1 -1
  118. package/corpus/templates/mail/server/plugins/auth.ts +1 -1
  119. package/corpus/templates/plan/agent-native.app-skill.json +1 -1
  120. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +4 -9
  121. package/corpus/templates/plan/app/lib/app-config.ts +1 -1
  122. package/corpus/templates/plan/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  123. package/corpus/templates/plan/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  124. package/corpus/templates/plan/package.json +1 -1
  125. package/corpus/templates/plan/public/manifest.json +1 -1
  126. package/corpus/templates/plan/server/plugins/auth.ts +1 -1
  127. package/corpus/templates/slides/actions/extract-pdf.ts +4 -4
  128. package/corpus/templates/slides/actions/import-file.ts +3 -4
  129. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +0 -2
  130. package/corpus/templates/slides/app/routes/_index.tsx +1 -1
  131. package/corpus/templates/slides/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  132. package/corpus/templates/slides/changelog/2026-07-25-gemini-image-models-updated.md +6 -0
  133. package/corpus/templates/slides/changelog/2026-07-25-pdf-imports-tolerate-missing-canvas.md +6 -0
  134. package/corpus/templates/slides/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  135. package/corpus/templates/slides/package.json +1 -1
  136. package/corpus/templates/slides/public/manifest.json +1 -1
  137. package/corpus/templates/slides/server/handlers/image-providers/gemini.ts +5 -2
  138. package/corpus/templates/slides/server/lib/pdf-parse-setup.ts +150 -0
  139. package/corpus/templates/slides/server/plugins/auth.ts +1 -1
  140. package/dist/a2a/client.d.ts.map +1 -1
  141. package/dist/a2a/client.js +58 -4
  142. package/dist/a2a/client.js.map +1 -1
  143. package/dist/agent/production-agent.d.ts.map +1 -1
  144. package/dist/agent/production-agent.js +63 -1
  145. package/dist/agent/production-agent.js.map +1 -1
  146. package/dist/agent/run-store.d.ts.map +1 -1
  147. package/dist/agent/run-store.js +49 -0
  148. package/dist/agent/run-store.js.map +1 -1
  149. package/dist/client/settings/SettingsPanel.js +9 -9
  150. package/dist/client/settings/SettingsPanel.js.map +1 -1
  151. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  152. package/dist/client/settings/SettingsTabsPage.js +7 -4
  153. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  154. package/dist/collab/awareness.d.ts +2 -2
  155. package/dist/collab/awareness.d.ts.map +1 -1
  156. package/dist/collab/routes.d.ts +1 -1
  157. package/dist/extensions/url-safety.d.ts +9 -16
  158. package/dist/extensions/url-safety.d.ts.map +1 -1
  159. package/dist/extensions/url-safety.js +48 -4
  160. package/dist/extensions/url-safety.js.map +1 -1
  161. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  162. package/dist/notifications/routes.d.ts +3 -3
  163. package/dist/observability/routes.d.ts +3 -3
  164. package/dist/secrets/routes.d.ts +9 -9
  165. package/dist/server/builder-design-systems.js +1 -1
  166. package/dist/server/builder-design-systems.js.map +1 -1
  167. package/dist/server/transcribe-voice.d.ts +1 -1
  168. package/dist/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  169. package/dist/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  170. package/dist/templates/default/app/root.tsx +1 -1
  171. package/dist/templates/default/public/manifest.json +2 -2
  172. package/dist/vite/client.d.ts.map +1 -1
  173. package/dist/vite/client.js +64 -1
  174. package/dist/vite/client.js.map +1 -1
  175. package/package.json +3 -3
  176. package/src/a2a/client.ts +57 -4
  177. package/src/agent/production-agent.ts +65 -1
  178. package/src/agent/run-store.ts +61 -1
  179. package/src/client/settings/SettingsPanel.tsx +9 -9
  180. package/src/client/settings/SettingsTabsPage.tsx +12 -2
  181. package/src/extensions/url-safety.ts +67 -4
  182. package/src/server/builder-design-systems.ts +1 -1
  183. package/src/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  184. package/src/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  185. package/src/templates/default/app/root.tsx +1 -1
  186. package/src/templates/default/public/manifest.json +2 -2
  187. package/src/vite/client.ts +64 -3
@@ -17,7 +17,6 @@ import {
17
17
  IconMenu2,
18
18
  IconX,
19
19
  IconMessageCircle,
20
- IconHierarchy2,
21
20
  IconSettings,
22
21
  IconForms,
23
22
  IconLayoutSidebarLeftCollapse,
@@ -317,26 +316,6 @@ export function Sidebar() {
317
316
  </Popover>
318
317
 
319
318
  <div className="mt-auto flex flex-col items-center gap-1">
320
- <Tooltip>
321
- <TooltipTrigger asChild>
322
- <Link
323
- to="/agent"
324
- aria-label={t("settings.agentTitle")}
325
- className={cn(
326
- "forms-sidebar-nav-item flex size-10 items-center justify-center rounded-lg active:scale-[0.96] transition-[background-color,box-shadow,color,transform]",
327
- location.pathname.startsWith("/agent")
328
- ? "bg-accent text-accent-foreground"
329
- : "text-muted-foreground hover:bg-accent/50 hover:text-foreground",
330
- )}
331
- >
332
- <IconHierarchy2 className="h-4 w-4" />
333
- </Link>
334
- </TooltipTrigger>
335
- <TooltipContent side="right">
336
- {t("settings.agentTitle")}
337
- </TooltipContent>
338
- </Tooltip>
339
-
340
319
  <Tooltip>
341
320
  <TooltipTrigger asChild>
342
321
  <Link
@@ -465,20 +444,6 @@ export function Sidebar() {
465
444
 
466
445
  {/* Pinned nav + footer */}
467
446
  <div className="shrink-0 px-3 py-1.5">
468
- <Link
469
- to="/agent"
470
- onClick={() => isMobile && setMobileOpen(false)}
471
- className={cn(
472
- "forms-sidebar-nav-item flex min-h-[44px] w-full items-center gap-2.5 rounded-lg px-3 py-2 text-sm active:scale-[0.96] transition-[background-color,box-shadow,color,transform]",
473
- location.pathname.startsWith("/agent")
474
- ? "bg-accent text-accent-foreground"
475
- : "text-muted-foreground hover:bg-accent/50 hover:text-foreground",
476
- )}
477
- >
478
- <IconHierarchy2 size={14} className="shrink-0" />
479
- <span>{t("settings.agentTitle")}</span>
480
- </Link>
481
-
482
447
  <Link
483
448
  to="/settings"
484
449
  onClick={() => isMobile && setMobileOpen(false)}
@@ -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: fixed
3
+ date: 2026-07-25
4
+ ---
5
+
6
+ Forms can create and update fields without manually supplied IDs.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-25
4
+ ---
5
+
6
+ Response exports now save to file storage and return a downloadable URL.
@@ -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": "forms",
3
- "displayName": "Agent-Native Forms",
3
+ "displayName": "Forms",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "Agent Native Forms",
2
+ "name": "Forms",
3
3
  "short_name": "Forms",
4
4
  "description": "Form builder",
5
5
  "start_url": ".",
@@ -6,6 +6,49 @@
6
6
  export const FIELD_ID_PATTERN = /^[A-Za-z0-9_-]+$/;
7
7
  const CONDITIONAL_OPERATORS = new Set(["equals", "not_equals", "contains"]);
8
8
 
9
+ /**
10
+ * Generates a safe id for a whole-array field replacement (create-form,
11
+ * update-form) when the model omits one — the #1 create-form failure in
12
+ * the 2026-07-25 reliability sweep ("field #1 has an invalid id undefined").
13
+ * Never used by patch-form-fields: there a missing id on an upsert op is
14
+ * ambiguous (new field vs. a forgotten reference to an existing one), so it
15
+ * must keep failing loud rather than risk silently creating a duplicate.
16
+ * Ids are slugified from `label` through the same FIELD_ID_PATTERN charset
17
+ * `assertValidFields` enforces, so a generated id can never fail that check.
18
+ */
19
+ export function normalizeFieldIds(fields: unknown): unknown {
20
+ if (!Array.isArray(fields)) return fields;
21
+ const usedIds = new Set(
22
+ fields
23
+ .map((f) =>
24
+ f && typeof f === "object" ? (f as Record<string, unknown>).id : null,
25
+ )
26
+ .filter(
27
+ (id): id is string =>
28
+ typeof id === "string" && FIELD_ID_PATTERN.test(id),
29
+ ),
30
+ );
31
+ return fields.map((field) => {
32
+ if (field == null || typeof field !== "object") return field;
33
+ const f = field as Record<string, unknown>;
34
+ if (typeof f.id === "string" && FIELD_ID_PATTERN.test(f.id)) return field;
35
+ const label = typeof f.label === "string" ? f.label : "";
36
+ const base =
37
+ label
38
+ .toLowerCase()
39
+ .replace(/[^a-z0-9_-]+/g, "_")
40
+ .replace(/^_+|_+$/g, "")
41
+ .slice(0, 40) || "field";
42
+ let candidate = base;
43
+ let suffix = 1;
44
+ while (usedIds.has(candidate)) {
45
+ candidate = `${base}_${++suffix}`;
46
+ }
47
+ usedIds.add(candidate);
48
+ return { ...f, id: candidate };
49
+ });
50
+ }
51
+
9
52
  export function assertValidFields(fields: unknown): void {
10
53
  if (!Array.isArray(fields)) {
11
54
  throw new Error("fields must be an array");
@@ -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 Forms",
5
+ appName: "Forms",
6
6
  tagline:
7
7
  "Your AI agent builds, publishes, and analyzes forms alongside you.",
8
8
  features: [
@@ -13,7 +13,6 @@ import {
13
13
  IconFlame,
14
14
  IconLoader2,
15
15
  IconChartBar,
16
- IconHierarchy2,
17
16
  IconSettings,
18
17
  IconLayoutSidebarLeftCollapse,
19
18
  IconLayoutSidebarLeftExpand,
@@ -46,7 +45,6 @@ const navItems = [
46
45
  ];
47
46
 
48
47
  const bottomNavItems = [
49
- { icon: IconHierarchy2, labelKey: "settings.agentTitle", href: "/agent" },
50
48
  { icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
51
49
  ];
52
50
 
@@ -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": "macros",
3
- "displayName": "Agent-Native Macros",
3
+ "displayName": "Macros",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -38,9 +38,9 @@ function getSupabase() {
38
38
  const LOGIN_HTML = `<!DOCTYPE html>
39
39
  <html lang="en"><head>
40
40
  <meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
41
- <title>Agent-Native Macros — Sign in</title>
41
+ <title>Macros — Sign in</title>
42
42
  <meta name="description" content="Log meals, exercises, and weight by typing or voice while the agent estimates calories and macros for you."/>
43
- <meta property="og:title" content="Agent-Native Macros"/>
43
+ <meta property="og:title" content="Macros"/>
44
44
  <meta property="og:description" content="Log meals, exercises, and weight by typing or voice while the agent estimates calories and macros for you."/>
45
45
  <style>
46
46
  *{margin:0;padding:0;box-sizing:border-box}
@@ -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: [
@@ -2,6 +2,8 @@ import fs from "fs";
2
2
 
3
3
  import { parseArgs } from "@agent-native/core";
4
4
 
5
+ import { setupPdfParse } from "../server/lib/pdf-parse-setup.js";
6
+
5
7
  export default async function (args: string[]) {
6
8
  const { path: pdfPath } = parseArgs(args);
7
9
  if (!pdfPath) {
@@ -10,12 +12,10 @@ export default async function (args: string[]) {
10
12
  }
11
13
 
12
14
  const buf = fs.readFileSync(pdfPath);
13
- const { CanvasFactory, getData } = await import("pdf-parse/worker");
14
- const { PDFParse } = await import("pdf-parse");
15
- PDFParse.setWorker(getData());
15
+ const { PDFParse, canvasFactory } = await setupPdfParse();
16
16
  const pdf = new PDFParse({
17
17
  data: new Uint8Array(buf),
18
- CanvasFactory,
18
+ CanvasFactory: canvasFactory,
19
19
  });
20
20
  const result = await pdf.getText().finally(() => pdf.destroy());
21
21
  const pages = result.pages || [];
@@ -14,6 +14,7 @@ import { z } from "zod";
14
14
  import { getDb, schema } from "../server/db/index.js";
15
15
  import { notifyClients } from "../server/handlers/decks.js";
16
16
  import { upsertBuilderProxyDesignSystem } from "../server/lib/builder-design-system-proxy.js";
17
+ import { setupPdfParse } from "../server/lib/pdf-parse-setup.js";
17
18
  import { readUserUploadedFile } from "./_uploaded-files.js";
18
19
 
19
20
  const DEFAULT_MAX_SOURCE_CHARS = 60_000;
@@ -211,14 +212,12 @@ export default defineAction({
211
212
  }
212
213
 
213
214
  if (detectedFormat === "pdf") {
214
- const { CanvasFactory, getData } = await import("pdf-parse/worker");
215
- const { PDFParse } = await import("pdf-parse");
216
- PDFParse.setWorker(getData());
215
+ const { PDFParse, canvasFactory } = await setupPdfParse();
217
216
  const { convertSectionsToSlides } =
218
217
  await import("../server/handlers/import/html-converter.js");
219
218
  const pdf = new PDFParse({
220
219
  data: new Uint8Array(fileBuffer),
221
- CanvasFactory,
220
+ CanvasFactory: canvasFactory,
222
221
  });
223
222
  const result = await pdf.getText().finally(() => pdf.destroy());
224
223
  const pages = normalizePdfPages(result);
@@ -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: fixed
3
+ date: 2026-07-25
4
+ ---
5
+
6
+ AI image generation uses the current Gemini image models.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-25
4
+ ---
5
+
6
+ PDF imports keep extracting text when native canvas bindings are unavailable.
@@ -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": ".",
@@ -74,9 +74,12 @@ export class GeminiProvider implements ImageProvider {
74
74
  imageConfig.aspectRatio = config.aspectRatio;
75
75
  }
76
76
 
77
+ // Google retired the "-preview" aliases (shut down 2026-06-25); the GA
78
+ // model ids dropped the suffix. Sending the old preview ids 404s every
79
+ // call before falling through to gemini-2.5-flash-image.
77
80
  const geminiModels = [
78
- "gemini-3.1-flash-image-preview",
79
- "gemini-3-pro-image-preview",
81
+ "gemini-3.1-flash-image",
82
+ "gemini-3-pro-image",
80
83
  "gemini-2.5-flash-image",
81
84
  ];
82
85
  let lastError: Error | null = null;