@agent-native/core 0.101.13 → 0.101.14

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 (266) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +7 -0
  3. package/corpus/core/package.json +4 -2
  4. package/corpus/core/src/cli/create.ts +32 -10
  5. package/corpus/core/src/client/AgentPanel.tsx +61 -48
  6. package/corpus/core/src/client/chat/message-components.tsx +1 -0
  7. package/corpus/core/src/client/chat/tool-call-display.tsx +12 -2
  8. package/corpus/templates/clips/app/components/player/share-dialog.tsx +1 -1
  9. package/corpus/templates/clips/app/i18n/ar-SA.ts +1 -0
  10. package/corpus/templates/clips/app/i18n/de-DE.ts +1 -0
  11. package/corpus/templates/clips/app/i18n/en-US.ts +1 -0
  12. package/corpus/templates/clips/app/i18n/es-ES.ts +1 -0
  13. package/corpus/templates/clips/app/i18n/fr-FR.ts +1 -0
  14. package/corpus/templates/clips/app/i18n/hi-IN.ts +1 -0
  15. package/corpus/templates/clips/app/i18n/ja-JP.ts +1 -0
  16. package/corpus/templates/clips/app/i18n/ko-KR.ts +1 -0
  17. package/corpus/templates/clips/app/i18n/pt-BR.ts +1 -0
  18. package/corpus/templates/clips/app/i18n/zh-CN.ts +1 -0
  19. package/corpus/templates/clips/app/i18n/zh-TW.ts +1 -0
  20. package/corpus/templates/clips/changelog/2026-07-15-public-clip-links-are-labeled-share-with-humans-for-clarity.md +6 -0
  21. package/corpus/templates/forms/actions/delete-form.ts +4 -0
  22. package/corpus/templates/forms/actions/patch-form-fields.ts +3 -0
  23. package/corpus/templates/forms/actions/restore-form.ts +3 -0
  24. package/corpus/templates/forms/actions/update-form.ts +3 -0
  25. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +2 -2
  26. package/corpus/templates/forms/app/pages/ResponsesPage.tsx +2 -2
  27. package/corpus/templates/forms/changelog/2026-07-15-published-forms-now-reflect-field-updates-immediately-at-the.md +6 -0
  28. package/corpus/templates/forms/changelog/2026-07-15-response-rows-now-keep-every-column-aligned-to-the-top-for-c.md +6 -0
  29. package/corpus/templates/forms/server/handlers/forms.ts +1 -0
  30. package/corpus/templates/forms/server/lib/public-form-ssr.ts +47 -4
  31. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +189 -82
  32. package/corpus/templates/slides/app/pages/DeckEditor.tsx +1 -1
  33. package/dist/cli/create.d.ts +5 -2
  34. package/dist/cli/create.d.ts.map +1 -1
  35. package/dist/cli/create.js +22 -11
  36. package/dist/cli/create.js.map +1 -1
  37. package/dist/client/AgentPanel.d.ts +2 -0
  38. package/dist/client/AgentPanel.d.ts.map +1 -1
  39. package/dist/client/AgentPanel.js +24 -13
  40. package/dist/client/AgentPanel.js.map +1 -1
  41. package/dist/client/chat/message-components.d.ts.map +1 -1
  42. package/dist/client/chat/message-components.js +1 -1
  43. package/dist/client/chat/message-components.js.map +1 -1
  44. package/dist/client/chat/tool-call-display.d.ts +3 -1
  45. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  46. package/dist/client/chat/tool-call-display.js +6 -5
  47. package/dist/client/chat/tool-call-display.js.map +1 -1
  48. package/dist/notifications/routes.d.ts +2 -2
  49. package/dist/resources/handlers.d.ts +1 -1
  50. package/dist/templates/chat/.agents/skills/actions/SKILL.md +492 -0
  51. package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +189 -0
  52. package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +76 -0
  53. package/dist/templates/chat/.agents/skills/capture-learnings/SKILL.md +89 -0
  54. package/dist/templates/chat/.agents/skills/create-skill/SKILL.md +221 -0
  55. package/dist/templates/chat/.agents/skills/delegate-to-agent/SKILL.md +263 -0
  56. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +112 -0
  57. package/dist/templates/chat/.agents/skills/real-time-sync/SKILL.md +232 -0
  58. package/dist/templates/chat/.agents/skills/security/SKILL.md +280 -0
  59. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +106 -0
  60. package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +95 -0
  61. package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  62. package/dist/templates/chat/.env.example +5 -0
  63. package/dist/templates/chat/.ignore +0 -0
  64. package/dist/templates/chat/.oxfmtrc.json +8 -0
  65. package/dist/templates/chat/.react-router/types/+server-build.d.ts +18 -0
  66. package/dist/templates/chat/.react-router/types/app/+types/root.ts +68 -0
  67. package/dist/templates/chat/AGENTS.md +62 -0
  68. package/dist/templates/chat/CHANGELOG.md +10 -0
  69. package/dist/templates/chat/DEVELOPING.md +185 -0
  70. package/dist/templates/chat/README.md +32 -0
  71. package/dist/templates/chat/_gitignore +43 -0
  72. package/dist/templates/chat/actions/hello.ts +13 -0
  73. package/dist/templates/chat/actions/navigate.ts +41 -0
  74. package/dist/templates/chat/actions/run.ts +2 -0
  75. package/dist/templates/chat/actions/view-screen.ts +31 -0
  76. package/dist/templates/chat/app/components/layout/Header.tsx +59 -0
  77. package/dist/templates/chat/app/components/layout/Layout.tsx +184 -0
  78. package/dist/templates/chat/app/components/layout/Sidebar.tsx +580 -0
  79. package/dist/templates/chat/app/components/ui/button.tsx +1 -0
  80. package/dist/templates/chat/app/components/ui/card.tsx +1 -0
  81. package/dist/templates/chat/app/components/ui/dropdown-menu.tsx +1 -0
  82. package/dist/templates/chat/app/components/ui/input.tsx +1 -0
  83. package/dist/templates/chat/app/components/ui/label.tsx +1 -0
  84. package/dist/templates/chat/app/components/ui/sheet.tsx +1 -0
  85. package/dist/templates/chat/app/components/ui/toolkit-provider.tsx +12 -0
  86. package/dist/templates/chat/app/components/ui/tooltip.tsx +1 -0
  87. package/dist/templates/chat/app/entry.client.tsx +19 -0
  88. package/dist/templates/chat/app/entry.server.tsx +10 -0
  89. package/dist/templates/chat/app/global.css +93 -0
  90. package/dist/templates/chat/app/hooks/use-navigation-state.ts +111 -0
  91. package/dist/templates/chat/app/i18n/ar-SA.ts +68 -0
  92. package/dist/templates/chat/app/i18n/de-DE.ts +71 -0
  93. package/dist/templates/chat/app/i18n/en-US.ts +70 -0
  94. package/dist/templates/chat/app/i18n/es-ES.ts +71 -0
  95. package/dist/templates/chat/app/i18n/fr-FR.ts +71 -0
  96. package/dist/templates/chat/app/i18n/hi-IN.ts +69 -0
  97. package/dist/templates/chat/app/i18n/index.ts +34 -0
  98. package/dist/templates/chat/app/i18n/ja-JP.ts +70 -0
  99. package/dist/templates/chat/app/i18n/ko-KR.ts +70 -0
  100. package/dist/templates/chat/app/i18n/pt-BR.ts +71 -0
  101. package/dist/templates/chat/app/i18n/zh-CN.ts +67 -0
  102. package/dist/templates/chat/app/i18n/zh-TW.ts +67 -0
  103. package/dist/templates/chat/app/i18n-data.ts +556 -0
  104. package/dist/templates/chat/app/lib/agent-page.tsx +40 -0
  105. package/dist/templates/chat/app/lib/app-config.ts +11 -0
  106. package/dist/templates/chat/app/lib/tab-id.ts +1 -0
  107. package/dist/templates/chat/app/lib/utils.ts +1 -0
  108. package/dist/templates/chat/app/root.tsx +172 -0
  109. package/dist/templates/chat/app/routes/_index.tsx +91 -0
  110. package/dist/templates/chat/app/routes/agent.tsx +17 -0
  111. package/dist/templates/chat/app/routes/chat.$threadId.tsx +1 -0
  112. package/dist/templates/chat/app/routes/database.tsx +17 -0
  113. package/dist/templates/chat/app/routes/extensions.$id.$slug.tsx +2 -0
  114. package/dist/templates/chat/app/routes/extensions.$id.tsx +11 -0
  115. package/dist/templates/chat/app/routes/extensions._index.tsx +11 -0
  116. package/dist/templates/chat/app/routes/extensions.tsx +5 -0
  117. package/dist/templates/chat/app/routes/observability.tsx +18 -0
  118. package/dist/templates/chat/app/routes/settings.tsx +88 -0
  119. package/dist/templates/chat/app/routes/team.tsx +11 -0
  120. package/dist/templates/chat/app/routes.ts +4 -0
  121. package/dist/templates/chat/app/vite-env.d.ts +6 -0
  122. package/dist/templates/chat/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  123. package/dist/templates/chat/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  124. package/dist/templates/chat/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  125. package/dist/templates/chat/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  126. package/dist/templates/chat/changelog/2026-06-29-chat-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
  127. package/dist/templates/chat/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  128. package/dist/templates/chat/changelog/2026-07-10-chat-now-makes-ai-connection-setup-clear-without-shifting-th.md +6 -0
  129. package/dist/templates/chat/changelog/2026-07-13-a-full-agent-page-now-brings-context-files-connections-jobs-.md +6 -0
  130. package/dist/templates/chat/changelog/2026-07-14-chat-opens-reliably-on-hosted-deployments-instead-of-failing.md +6 -0
  131. package/dist/templates/chat/changelog/2026-07-14-fixed-chat-template-startup-with-older-core-versions.md +6 -0
  132. package/dist/templates/chat/changelog/2026-07-15-chat-navigation-focuses-on-chat-and-agent.md +6 -0
  133. package/dist/templates/chat/components.json +20 -0
  134. package/dist/templates/chat/data/.gitkeep +0 -0
  135. package/dist/templates/chat/data/sync-config.json +1 -0
  136. package/dist/templates/chat/learnings.defaults.md +5 -0
  137. package/dist/templates/chat/netlify.toml +10 -0
  138. package/dist/templates/chat/package.json +92 -0
  139. package/dist/templates/chat/public/agent-native-icon-dark.svg +10 -0
  140. package/dist/templates/chat/public/agent-native-icon-light.svg +10 -0
  141. package/dist/templates/chat/public/agent-native-logo-dark.svg +21 -0
  142. package/dist/templates/chat/public/agent-native-logo-light.svg +21 -0
  143. package/dist/templates/chat/public/favicon.svg +1 -0
  144. package/dist/templates/chat/public/icon-180.svg +1 -0
  145. package/dist/templates/chat/public/icon-192.svg +1 -0
  146. package/dist/templates/chat/public/icon-512.svg +1 -0
  147. package/dist/templates/chat/public/manifest.json +21 -0
  148. package/dist/templates/chat/react-router.config.ts +7 -0
  149. package/dist/templates/chat/server/middleware/auth.ts +15 -0
  150. package/dist/templates/chat/server/plugins/agent-chat.ts +21 -0
  151. package/dist/templates/chat/server/plugins/auth.ts +17 -0
  152. package/dist/templates/chat/server/routes/[...page].get.ts +5 -0
  153. package/dist/templates/chat/ssr-entry.ts +15 -0
  154. package/dist/templates/chat/tsconfig.json +21 -0
  155. package/dist/templates/chat/vite.config.ts +19 -0
  156. package/package.json +2 -1
  157. package/src/templates/chat/.agents/skills/actions/SKILL.md +492 -0
  158. package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +189 -0
  159. package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +76 -0
  160. package/src/templates/chat/.agents/skills/capture-learnings/SKILL.md +89 -0
  161. package/src/templates/chat/.agents/skills/create-skill/SKILL.md +221 -0
  162. package/src/templates/chat/.agents/skills/delegate-to-agent/SKILL.md +263 -0
  163. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +112 -0
  164. package/src/templates/chat/.agents/skills/real-time-sync/SKILL.md +232 -0
  165. package/src/templates/chat/.agents/skills/security/SKILL.md +280 -0
  166. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +106 -0
  167. package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +95 -0
  168. package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  169. package/src/templates/chat/.env.example +5 -0
  170. package/src/templates/chat/.ignore +0 -0
  171. package/src/templates/chat/.oxfmtrc.json +8 -0
  172. package/src/templates/chat/.react-router/types/+server-build.d.ts +18 -0
  173. package/src/templates/chat/.react-router/types/app/+types/root.ts +68 -0
  174. package/src/templates/chat/AGENTS.md +62 -0
  175. package/src/templates/chat/CHANGELOG.md +10 -0
  176. package/src/templates/chat/DEVELOPING.md +185 -0
  177. package/src/templates/chat/README.md +32 -0
  178. package/src/templates/chat/_gitignore +43 -0
  179. package/src/templates/chat/actions/hello.spec.ts +23 -0
  180. package/src/templates/chat/actions/hello.ts +13 -0
  181. package/src/templates/chat/actions/navigate.spec.ts +68 -0
  182. package/src/templates/chat/actions/navigate.ts +41 -0
  183. package/src/templates/chat/actions/run.ts +2 -0
  184. package/src/templates/chat/actions/view-screen.spec.ts +40 -0
  185. package/src/templates/chat/actions/view-screen.ts +31 -0
  186. package/src/templates/chat/app/components/layout/Header.tsx +59 -0
  187. package/src/templates/chat/app/components/layout/Layout.tsx +184 -0
  188. package/src/templates/chat/app/components/layout/Sidebar.tsx +580 -0
  189. package/src/templates/chat/app/components/ui/button.tsx +1 -0
  190. package/src/templates/chat/app/components/ui/card.tsx +1 -0
  191. package/src/templates/chat/app/components/ui/dropdown-menu.tsx +1 -0
  192. package/src/templates/chat/app/components/ui/input.tsx +1 -0
  193. package/src/templates/chat/app/components/ui/label.tsx +1 -0
  194. package/src/templates/chat/app/components/ui/sheet.tsx +1 -0
  195. package/src/templates/chat/app/components/ui/toolkit-provider.tsx +12 -0
  196. package/src/templates/chat/app/components/ui/tooltip.tsx +1 -0
  197. package/src/templates/chat/app/entry.client.tsx +19 -0
  198. package/src/templates/chat/app/entry.server.tsx +10 -0
  199. package/src/templates/chat/app/global.css +93 -0
  200. package/src/templates/chat/app/hooks/use-navigation-state.ts +111 -0
  201. package/src/templates/chat/app/i18n/ar-SA.ts +68 -0
  202. package/src/templates/chat/app/i18n/de-DE.ts +71 -0
  203. package/src/templates/chat/app/i18n/en-US.ts +70 -0
  204. package/src/templates/chat/app/i18n/es-ES.ts +71 -0
  205. package/src/templates/chat/app/i18n/fr-FR.ts +71 -0
  206. package/src/templates/chat/app/i18n/hi-IN.ts +69 -0
  207. package/src/templates/chat/app/i18n/index.ts +34 -0
  208. package/src/templates/chat/app/i18n/ja-JP.ts +70 -0
  209. package/src/templates/chat/app/i18n/ko-KR.ts +70 -0
  210. package/src/templates/chat/app/i18n/pt-BR.ts +71 -0
  211. package/src/templates/chat/app/i18n/zh-CN.ts +67 -0
  212. package/src/templates/chat/app/i18n/zh-TW.ts +67 -0
  213. package/src/templates/chat/app/i18n-data.ts +556 -0
  214. package/src/templates/chat/app/lib/agent-page.spec.tsx +52 -0
  215. package/src/templates/chat/app/lib/agent-page.tsx +40 -0
  216. package/src/templates/chat/app/lib/app-config.ts +11 -0
  217. package/src/templates/chat/app/lib/tab-id.ts +1 -0
  218. package/src/templates/chat/app/lib/utils.ts +1 -0
  219. package/src/templates/chat/app/root.tsx +172 -0
  220. package/src/templates/chat/app/routes/_index.tsx +91 -0
  221. package/src/templates/chat/app/routes/agent.tsx +17 -0
  222. package/src/templates/chat/app/routes/chat.$threadId.tsx +1 -0
  223. package/src/templates/chat/app/routes/database.tsx +17 -0
  224. package/src/templates/chat/app/routes/extensions.$id.$slug.tsx +2 -0
  225. package/src/templates/chat/app/routes/extensions.$id.tsx +11 -0
  226. package/src/templates/chat/app/routes/extensions._index.tsx +11 -0
  227. package/src/templates/chat/app/routes/extensions.tsx +5 -0
  228. package/src/templates/chat/app/routes/observability.tsx +18 -0
  229. package/src/templates/chat/app/routes/settings.tsx +88 -0
  230. package/src/templates/chat/app/routes/team.tsx +11 -0
  231. package/src/templates/chat/app/routes.ts +4 -0
  232. package/src/templates/chat/app/vite-env.d.ts +6 -0
  233. package/src/templates/chat/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  234. package/src/templates/chat/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  235. package/src/templates/chat/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  236. package/src/templates/chat/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  237. package/src/templates/chat/changelog/2026-06-29-chat-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
  238. package/src/templates/chat/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  239. package/src/templates/chat/changelog/2026-07-10-chat-now-makes-ai-connection-setup-clear-without-shifting-th.md +6 -0
  240. package/src/templates/chat/changelog/2026-07-13-a-full-agent-page-now-brings-context-files-connections-jobs-.md +6 -0
  241. package/src/templates/chat/changelog/2026-07-14-chat-opens-reliably-on-hosted-deployments-instead-of-failing.md +6 -0
  242. package/src/templates/chat/changelog/2026-07-14-fixed-chat-template-startup-with-older-core-versions.md +6 -0
  243. package/src/templates/chat/changelog/2026-07-15-chat-navigation-focuses-on-chat-and-agent.md +6 -0
  244. package/src/templates/chat/components.json +20 -0
  245. package/src/templates/chat/data/.gitkeep +0 -0
  246. package/src/templates/chat/data/sync-config.json +1 -0
  247. package/src/templates/chat/learnings.defaults.md +5 -0
  248. package/src/templates/chat/netlify.toml +10 -0
  249. package/src/templates/chat/package.json +92 -0
  250. package/src/templates/chat/public/agent-native-icon-dark.svg +10 -0
  251. package/src/templates/chat/public/agent-native-icon-light.svg +10 -0
  252. package/src/templates/chat/public/agent-native-logo-dark.svg +21 -0
  253. package/src/templates/chat/public/agent-native-logo-light.svg +21 -0
  254. package/src/templates/chat/public/favicon.svg +1 -0
  255. package/src/templates/chat/public/icon-180.svg +1 -0
  256. package/src/templates/chat/public/icon-192.svg +1 -0
  257. package/src/templates/chat/public/icon-512.svg +1 -0
  258. package/src/templates/chat/public/manifest.json +21 -0
  259. package/src/templates/chat/react-router.config.ts +7 -0
  260. package/src/templates/chat/server/middleware/auth.ts +15 -0
  261. package/src/templates/chat/server/plugins/agent-chat.ts +21 -0
  262. package/src/templates/chat/server/plugins/auth.ts +17 -0
  263. package/src/templates/chat/server/routes/[...page].get.ts +5 -0
  264. package/src/templates/chat/ssr-entry.ts +15 -0
  265. package/src/templates/chat/tsconfig.json +21 -0
  266. package/src/templates/chat/vite.config.ts +19 -0
@@ -0,0 +1,172 @@
1
+ import { useDbSync } from "@agent-native/core/client";
2
+ import {
3
+ AppProviders,
4
+ CommandMenu,
5
+ appPath,
6
+ configureTracking,
7
+ createAgentNativeQueryClient,
8
+ getLocaleInitScript,
9
+ getThemeInitScript,
10
+ useCommandMenuShortcut,
11
+ useT,
12
+ } from "@agent-native/core/client";
13
+ import { IconBrain, IconSun, IconMoon } from "@tabler/icons-react";
14
+ import { useQueryClient } from "@tanstack/react-query";
15
+ import { useTheme } from "next-themes";
16
+ import { useCallback, useState } from "react";
17
+ import {
18
+ Links,
19
+ Meta,
20
+ Outlet,
21
+ Scripts,
22
+ ScrollRestoration,
23
+ useNavigate,
24
+ } from "react-router";
25
+ import type { LinksFunction } from "react-router";
26
+
27
+ import { Layout as AppLayout } from "@/components/layout/Layout";
28
+ import { AppToolkitProvider } from "@/components/ui/toolkit-provider";
29
+ import { useNavigationState } from "@/hooks/use-navigation-state";
30
+ import { APP_TITLE } from "@/lib/app-config";
31
+ import { TAB_ID } from "@/lib/tab-id";
32
+
33
+ import changelog from "../CHANGELOG.md?raw";
34
+ import { i18nCatalog } from "./i18n";
35
+
36
+ import stylesheet from "./global.css?url";
37
+
38
+ configureTracking({
39
+ getDefaultProps: (_name, properties) => ({
40
+ ...properties,
41
+ app: "chat",
42
+ }),
43
+ });
44
+
45
+ export const links: LinksFunction = () => [
46
+ { rel: "stylesheet", href: stylesheet },
47
+ ];
48
+
49
+ const THEME_INIT_SCRIPT = getThemeInitScript();
50
+ const LOCALE_INIT_SCRIPT = getLocaleInitScript();
51
+
52
+ export function Layout({ children }: { children: React.ReactNode }) {
53
+ return (
54
+ <html lang="en" suppressHydrationWarning>
55
+ <head>
56
+ <meta charSet="utf-8" />
57
+ <meta
58
+ name="viewport"
59
+ content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
60
+ />
61
+ <script
62
+ suppressHydrationWarning
63
+ dangerouslySetInnerHTML={{ __html: THEME_INIT_SCRIPT }}
64
+ />
65
+ <script
66
+ data-agent-native-locale-init
67
+ suppressHydrationWarning
68
+ dangerouslySetInnerHTML={{ __html: LOCALE_INIT_SCRIPT }}
69
+ />
70
+ <link rel="manifest" href={appPath("/manifest.json")} />
71
+ <meta name="theme-color" content="#18181B" />
72
+ <meta name="mobile-web-app-capable" content="yes" />
73
+ <meta
74
+ name="apple-mobile-web-app-status-bar-style"
75
+ content="black-translucent"
76
+ />
77
+ <meta name="apple-mobile-web-app-title" content={APP_TITLE} />
78
+ <link rel="icon" type="image/svg+xml" href={appPath("/favicon.svg")} />
79
+ <link rel="apple-touch-icon" href={appPath("/icon-180.svg")} />
80
+ <Meta />
81
+ <Links />
82
+ </head>
83
+ <body>
84
+ {children}
85
+ <ScrollRestoration />
86
+ <Scripts />
87
+ </body>
88
+ </html>
89
+ );
90
+ }
91
+
92
+ function DbSyncSetup() {
93
+ const qc = useQueryClient();
94
+ useNavigationState();
95
+ useDbSync({
96
+ queryClient: qc,
97
+ ignoreSource: TAB_ID,
98
+ });
99
+ return null;
100
+ }
101
+
102
+ function ThemeToggleItem() {
103
+ const { resolvedTheme, setTheme } = useTheme();
104
+ const t = useT();
105
+ const isDark = resolvedTheme === "dark";
106
+ return (
107
+ <CommandMenu.Item
108
+ onSelect={() => setTheme(isDark ? "light" : "dark")}
109
+ keywords={["theme", "dark", "light", "mode"]}
110
+ >
111
+ {isDark ? <IconSun size={16} /> : <IconMoon size={16} />}
112
+ {t("root.toggleTheme")}
113
+ </CommandMenu.Item>
114
+ );
115
+ }
116
+
117
+ function AppContent() {
118
+ const [cmdkOpen, setCmdkOpen] = useState(false);
119
+ const navigate = useNavigate();
120
+ const t = useT();
121
+ useCommandMenuShortcut(useCallback(() => setCmdkOpen(true), []));
122
+ return (
123
+ <>
124
+ <CommandMenu
125
+ open={cmdkOpen}
126
+ onOpenChange={setCmdkOpen}
127
+ changelog={changelog}
128
+ changelogKey="chat"
129
+ >
130
+ <CommandMenu.Group heading={t("root.commandActions")}>
131
+ <CommandMenu.Item onSelect={() => {}}>
132
+ {t("root.commandSearch")}
133
+ </CommandMenu.Item>
134
+ <CommandMenu.Item
135
+ onSelect={() => navigate("/agent")}
136
+ keywords={[
137
+ "agent",
138
+ "context",
139
+ "files",
140
+ "connections",
141
+ "jobs",
142
+ "access",
143
+ ]}
144
+ >
145
+ <IconBrain size={16} />
146
+ {t("settings.openAgentSettings")}
147
+ </CommandMenu.Item>
148
+ </CommandMenu.Group>
149
+ <CommandMenu.Group heading={t("root.commandAppearance")}>
150
+ <ThemeToggleItem />
151
+ </CommandMenu.Group>
152
+ </CommandMenu>
153
+ <AppLayout>
154
+ <Outlet />
155
+ </AppLayout>
156
+ </>
157
+ );
158
+ }
159
+
160
+ export default function Root() {
161
+ const [queryClient] = useState(() => createAgentNativeQueryClient());
162
+ return (
163
+ <AppToolkitProvider>
164
+ <AppProviders queryClient={queryClient} i18n={{ catalog: i18nCatalog }}>
165
+ <DbSyncSetup />
166
+ <AppContent />
167
+ </AppProviders>
168
+ </AppToolkitProvider>
169
+ );
170
+ }
171
+
172
+ export { ErrorBoundary } from "@agent-native/core/client";
@@ -0,0 +1,91 @@
1
+ import {
2
+ AgentChatSurface,
3
+ markAgentChatHomeHandoff,
4
+ useT,
5
+ } from "@agent-native/core/client";
6
+ import { useEffect } from "react";
7
+ import { useNavigate, useParams } from "react-router";
8
+
9
+ import { APP_TITLE } from "@/lib/app-config";
10
+ import { TAB_ID } from "@/lib/tab-id";
11
+
12
+ const SEO_TITLE = `${APP_TITLE} - Open Source AI app starter with actions`;
13
+ const SEO_DESCRIPTION =
14
+ "Open Source starter for agent-native apps with durable chat, shared actions, UI state, tools, and a backend your agent can extend.";
15
+
16
+ export function meta() {
17
+ return [
18
+ { title: SEO_TITLE },
19
+ {
20
+ name: "description",
21
+ content: SEO_DESCRIPTION,
22
+ },
23
+ { property: "og:title", content: SEO_TITLE },
24
+ { property: "og:description", content: SEO_DESCRIPTION },
25
+ { name: "twitter:card", content: "summary" },
26
+ { name: "twitter:title", content: SEO_TITLE },
27
+ { name: "twitter:description", content: SEO_DESCRIPTION },
28
+ ];
29
+ }
30
+
31
+ function chatThreadPath(threadId: string | null) {
32
+ return threadId ? `/chat/${encodeURIComponent(threadId)}` : "/";
33
+ }
34
+
35
+ export default function ChatRoute() {
36
+ const { threadId } = useParams();
37
+ const navigate = useNavigate();
38
+ const t = useT();
39
+
40
+ useEffect(() => {
41
+ function handleChatRunning(event: Event) {
42
+ const detail = (event as CustomEvent).detail;
43
+ if (detail?.isRunning === true) markAgentChatHomeHandoff("chat");
44
+ }
45
+
46
+ window.addEventListener("agentNative.chatRunning", handleChatRunning);
47
+ return () =>
48
+ window.removeEventListener("agentNative.chatRunning", handleChatRunning);
49
+ }, []);
50
+
51
+ return (
52
+ <div className="flex h-full min-h-0 flex-col bg-background">
53
+ <AgentChatSurface
54
+ mode="page"
55
+ chatViewTransition
56
+ className="h-full"
57
+ defaultMode="chat"
58
+ storageKey="chat"
59
+ threadUrlSync={{
60
+ routeThreadId: threadId ?? null,
61
+ getPath: chatThreadPath,
62
+ navigate,
63
+ }}
64
+ browserTabId={TAB_ID}
65
+ showHeader={false}
66
+ showTabBar={false}
67
+ dynamicSuggestions={false}
68
+ suggestions={[
69
+ t("chat.suggestionCapabilities"),
70
+ t("chat.suggestionCustomize"),
71
+ t("chat.suggestionActions"),
72
+ ]}
73
+ emptyStateText={t("chat.emptyState")}
74
+ emptyStateDisplay="hidden"
75
+ centerComposerWhenEmpty
76
+ composerLayoutVariant="hero"
77
+ composerPlaceholder={t("chat.composerPlaceholder")}
78
+ composerSlot={
79
+ <div className="mx-auto mb-5 max-w-xl px-4 text-center">
80
+ <h1 className="text-2xl font-semibold tracking-normal text-foreground sm:text-3xl">
81
+ {t("chat.heroTitle")}
82
+ </h1>
83
+ <p className="mt-2 text-sm leading-6 text-muted-foreground">
84
+ {t("chat.heroDescription")}
85
+ </p>
86
+ </div>
87
+ }
88
+ />
89
+ </div>
90
+ );
91
+ }
@@ -0,0 +1,17 @@
1
+ import * as AgentClient from "@agent-native/core/client";
2
+ import { useSetPageTitle } from "@agent-native/toolkit/app-shell";
3
+
4
+ import { resolveAgentPageComponent } from "@/lib/agent-page";
5
+ import { APP_TITLE } from "@/lib/app-config";
6
+
7
+ export function meta() {
8
+ return [{ title: `Agent - ${APP_TITLE}` }];
9
+ }
10
+
11
+ export default function AgentRoute() {
12
+ const t = AgentClient.useT();
13
+ useSetPageTitle(t("settings.agentTitle"));
14
+
15
+ const AgentPage = resolveAgentPageComponent(AgentClient);
16
+ return <AgentPage appName={APP_TITLE} />;
17
+ }
@@ -0,0 +1 @@
1
+ export { default, meta } from "./_index";
@@ -0,0 +1,17 @@
1
+ import { useT } from "@agent-native/core/client";
2
+ import { DbAdminPage } from "@agent-native/core/client/db-admin";
3
+ import { useSetPageTitle } from "@agent-native/toolkit/app-shell";
4
+
5
+ export function meta() {
6
+ return [{ title: "Database" }];
7
+ }
8
+
9
+ export default function DatabasePage() {
10
+ const t = useT();
11
+ useSetPageTitle(t("pages.databaseTitle"));
12
+ return (
13
+ <div className="h-full">
14
+ <DbAdminPage />
15
+ </div>
16
+ );
17
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./extensions.$id";
2
+ export { default } from "./extensions.$id";
@@ -0,0 +1,11 @@
1
+ import { ExtensionViewerPage } from "@agent-native/core/client/extensions";
2
+
3
+ import { APP_TITLE } from "@/lib/app-config";
4
+
5
+ export function meta() {
6
+ return [{ title: `Extension — ${APP_TITLE}` }];
7
+ }
8
+
9
+ export default function ExtensionViewerRoute() {
10
+ return <ExtensionViewerPage />;
11
+ }
@@ -0,0 +1,11 @@
1
+ import { ExtensionsListPage } from "@agent-native/core/client/extensions";
2
+
3
+ import { APP_TITLE } from "@/lib/app-config";
4
+
5
+ export function meta() {
6
+ return [{ title: `Extensions — ${APP_TITLE}` }];
7
+ }
8
+
9
+ export default function ExtensionsRoute() {
10
+ return <ExtensionsListPage />;
11
+ }
@@ -0,0 +1,5 @@
1
+ import { Outlet } from "react-router";
2
+
3
+ export default function ExtensionsLayout() {
4
+ return <Outlet />;
5
+ }
@@ -0,0 +1,18 @@
1
+ import { ObservabilityDashboard, useT } from "@agent-native/core/client";
2
+ import { useSetPageTitle } from "@agent-native/toolkit/app-shell";
3
+
4
+ import enUS from "@/i18n/en-US";
5
+
6
+ export function meta() {
7
+ return [{ title: enUS.pages.observabilityPageTitle }];
8
+ }
9
+
10
+ export default function ObservabilityPage() {
11
+ const t = useT();
12
+ useSetPageTitle(t("pages.observabilityPageTitle"));
13
+ return (
14
+ <div className="p-6">
15
+ <ObservabilityDashboard />
16
+ </div>
17
+ );
18
+ }
@@ -0,0 +1,88 @@
1
+ import {
2
+ ChangelogSettingsCard,
3
+ LanguagePicker,
4
+ SettingsTabsPage,
5
+ useAgentSettingsTabs,
6
+ useT,
7
+ type SettingsSearchEntry,
8
+ } from "@agent-native/core/client";
9
+ import { TeamPage } from "@agent-native/core/client/org";
10
+ import { useSetPageTitle } from "@agent-native/toolkit/app-shell";
11
+ import { useMemo } from "react";
12
+
13
+ import {
14
+ Card,
15
+ CardContent,
16
+ CardDescription,
17
+ CardHeader,
18
+ CardTitle,
19
+ } from "@/components/ui/card";
20
+ import { Label } from "@/components/ui/label";
21
+ import { APP_TITLE } from "@/lib/app-config";
22
+
23
+ import changelog from "../../CHANGELOG.md?raw";
24
+
25
+ export function meta() {
26
+ return [{ title: `Settings - ${APP_TITLE}` }];
27
+ }
28
+
29
+ export default function SettingsRoute() {
30
+ const t = useT();
31
+ const agentSettingsTabs = useAgentSettingsTabs();
32
+ useSetPageTitle(t("settings.title"));
33
+
34
+ const generalSearchEntries = useMemo<SettingsSearchEntry[]>(
35
+ () => [
36
+ {
37
+ id: "chat-language",
38
+ label: t("settings.languageTitle"),
39
+ keywords: "language locale translation i18n",
40
+ hash: "language",
41
+ },
42
+ ],
43
+ [t],
44
+ );
45
+
46
+ return (
47
+ <SettingsTabsPage
48
+ teamLabel={t("navigation.team")}
49
+ extraTabs={agentSettingsTabs}
50
+ generalSearchEntries={generalSearchEntries}
51
+ general={
52
+ <div className="mx-auto w-full max-w-2xl space-y-6">
53
+ <p className="text-sm leading-6 text-muted-foreground">
54
+ {t("settings.description")}
55
+ </p>
56
+
57
+ <Card id="language" className="scroll-mt-16">
58
+ <CardHeader>
59
+ <CardTitle className="text-base">
60
+ {t("settings.languageTitle")}
61
+ </CardTitle>
62
+ <CardDescription>
63
+ {t("settings.languageDescription")}
64
+ </CardDescription>
65
+ </CardHeader>
66
+ <CardContent className="max-w-xs space-y-1.5">
67
+ <Label>{t("settings.languageLabel")}</Label>
68
+ <LanguagePicker label={t("settings.languageLabel")} />
69
+ </CardContent>
70
+ </Card>
71
+ </div>
72
+ }
73
+ team={
74
+ <div className="mx-auto w-full max-w-3xl">
75
+ <TeamPage
76
+ showTitle={false}
77
+ createOrgDescription={t("pages.teamCreateOrgDescription")}
78
+ />
79
+ </div>
80
+ }
81
+ whatsNew={
82
+ <div className="mx-auto w-full max-w-2xl">
83
+ <ChangelogSettingsCard markdown={changelog} />
84
+ </div>
85
+ }
86
+ />
87
+ );
88
+ }
@@ -0,0 +1,11 @@
1
+ import { Navigate } from "react-router";
2
+
3
+ import { APP_TITLE } from "@/lib/app-config";
4
+
5
+ export function meta() {
6
+ return [{ title: `Team — ${APP_TITLE}` }];
7
+ }
8
+
9
+ export default function TeamRoute() {
10
+ return <Navigate to="/settings#organization" replace />;
11
+ }
@@ -0,0 +1,4 @@
1
+ import { type RouteConfig } from "@react-router/dev/routes";
2
+ import { flatRoutes } from "@react-router/fs-routes";
3
+
4
+ export default flatRoutes() satisfies RouteConfig;
@@ -0,0 +1,6 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ declare module "react-dom/server.browser" {
4
+ export * from "react-dom/server";
5
+ export { default } from "react-dom/server";
6
+ }
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-06-24
4
+ ---
5
+
6
+ A new Settings page gives quick access to language, workspace, and agent preferences.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-06-24
4
+ ---
5
+
6
+ Added a language picker and localized app chrome for supported languages.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-27
4
+ ---
5
+
6
+ Traditional Chinese copy now uses Taiwan terminology and clearer technical wording.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-06-28
4
+ ---
5
+
6
+ Left sidebar collapse motion and footer controls now feel smoother and use less divider chrome.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-06-29
4
+ ---
5
+
6
+ Chat layouts adapt when the agent sidebar is open.
@@ -0,0 +1,5 @@
1
+ ---
2
+ type: improved
3
+ ---
4
+
5
+ Settings are cleaner and searchable, with a consistent navigation that jumps straight to any setting.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-10
4
+ ---
5
+
6
+ Chat now makes AI connection setup clear without shifting the composer.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-07-13
4
+ ---
5
+
6
+ A full Agent page now brings context, files, connections, jobs, and external access together
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-14
4
+ ---
5
+
6
+ Chat opens reliably on hosted deployments instead of failing during startup
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-14
4
+ ---
5
+
6
+ Fixed chat template startup with older core versions
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: removed
3
+ date: 2026-07-15
4
+ ---
5
+
6
+ The main navigation is now focused on Chat, Agent, and essential workspace settings.
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "default",
4
+ "rsc": false,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "",
8
+ "css": "app/global.css",
9
+ "baseColor": "slate",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "aliases": {
14
+ "components": "@/components",
15
+ "utils": "@/lib/utils",
16
+ "ui": "@/components/ui",
17
+ "lib": "@/lib",
18
+ "hooks": "@/hooks"
19
+ }
20
+ }
File without changes
@@ -0,0 +1 @@
1
+ { "patterns": ["data/**/*.json"] }
@@ -0,0 +1,5 @@
1
+ # Learnings
2
+
3
+ <!-- This file is your app's memory. The AI reads it at the start of every conversation and updates it when it learns something new. -->
4
+ <!-- Your personal learnings.md is gitignored so preferences and private info stay local. -->
5
+ <!-- This defaults file is what new checkouts start with. -->
@@ -0,0 +1,10 @@
1
+ [build]
2
+ ignore = "node ./scripts/netlify-ignore-build.mjs chat"
3
+ command = "export DATABASE_URL=${NETLIFY_DATABASE_URL:-$DATABASE_URL} && pnpm install && NITRO_PRESET=netlify pnpm --filter chat build"
4
+ publish = "templates/chat/dist"
5
+ functions = "templates/chat/.netlify/functions-internal"
6
+
7
+ [build.environment]
8
+ GA_MEASUREMENT_ID = "G-ESF7FYXGN9"
9
+ NITRO_PRESET = "netlify"
10
+ NPM_CONFIG_PRODUCTION = "false"