@agent-native/core 0.192.0-nightly-20260926081002 → 0.192.0
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.
- package/corpus/README.md +1 -1
- package/corpus/templates/analytics/CHANGELOG.md +17 -0
- package/corpus/templates/analytics/actions/get-sql-dashboard.ts +27 -3
- package/corpus/templates/analytics/app/components/AnalyticsReviewArtifactPreview.tsx +8 -2
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +14 -10
- package/corpus/templates/analytics/app/root.tsx +2 -4
- package/corpus/templates/analytics/app/routes/_index.tsx +1 -36
- package/corpus/templates/analytics/app/routes/home.tsx +1 -1
- package/corpus/templates/analytics/changelog/2026-09-25-human-review-previews-show-same-organization-dashboard-chart.md +6 -0
- package/corpus/templates/analytics/changelog/2026-09-25-human-review-skips-saved-bigquery-queries-in-previews.md +6 -0
- package/corpus/templates/analytics/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +14 -0
- package/corpus/templates/analytics/server/plugins/auth.ts +0 -3
- package/corpus/templates/assets/CHANGELOG.md +16 -0
- package/corpus/templates/assets/app/root.tsx +2 -7
- package/corpus/templates/assets/app/routes/_index.tsx +1 -36
- package/corpus/templates/assets/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
- package/corpus/templates/assets/server/plugins/auth.ts +0 -3
- package/corpus/templates/brain/app/root.tsx +2 -13
- package/corpus/templates/brain/app/routes/_index.tsx +1 -35
- package/corpus/templates/brain/app/routes/home.tsx +1 -1
- package/corpus/templates/calendar/CHANGELOG.md +15 -0
- package/corpus/templates/calendar/app/root.tsx +2 -10
- package/corpus/templates/calendar/app/routes/_index.tsx +1 -34
- package/corpus/templates/calendar/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
- package/corpus/templates/calendar/server/plugins/auth.ts +0 -3
- package/corpus/templates/chat/AGENTS.md +3 -3
- package/corpus/templates/chat/app/root.tsx +3 -15
- package/corpus/templates/chat/app/routes/_index.tsx +1 -37
- package/corpus/templates/chat/server/plugins/auth.ts +0 -3
- package/corpus/templates/clips/CHANGELOG.md +10 -0
- package/corpus/templates/clips/app/root.tsx +2 -10
- package/corpus/templates/clips/app/routes/_index.tsx +1 -33
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +2 -3
- package/corpus/templates/clips/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
- package/corpus/templates/clips/server/plugins/auth.ts +0 -3
- package/corpus/templates/content/app/root.tsx +2 -3
- package/corpus/templates/content/app/routes/_index.tsx +1 -33
- package/corpus/templates/content/server/plugins/auth.ts +0 -3
- package/corpus/templates/crm/app/root.tsx +3 -16
- package/corpus/templates/crm/app/routes/_index.tsx +1 -36
- package/corpus/templates/crm/app/routes/home.tsx +1 -1
- package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +30 -17
- package/corpus/templates/design/CHANGELOG.md +31 -0
- package/corpus/templates/design/actions/connect-localhost.ts +98 -37
- package/corpus/templates/design/actions/get-design.schema.ts +10 -0
- package/corpus/templates/design/actions/get-design.ts +25 -6
- package/corpus/templates/design/actions/publish-visual-edit-pending.ts +4 -59
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +108 -49
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +63 -21
- package/corpus/templates/design/app/components/design/types.ts +2 -0
- package/corpus/templates/design/app/pages/design-editor/commands/cross-screen-element-drop.ts +98 -9
- package/corpus/templates/design/app/pages/design-editor/commands/cross-screen-insert-timeout.ts +61 -6
- package/corpus/templates/design/app/pages/design-editor/commands/mode-change.ts +6 -5
- package/corpus/templates/design/app/pages/design-editor/commands/publish-visual-edit-pending.ts +21 -3
- package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +4 -7
- package/corpus/templates/design/app/root.tsx +2 -20
- package/corpus/templates/design/app/routes/_index.tsx +1 -34
- package/corpus/templates/design/changelog/2026-09-25-fix-live-visual-edit-recovery-handoff-and-interaction-workfl.md +6 -0
- package/corpus/templates/design/changelog/2026-09-25-human-review-previews-show-the-actual-design-when-you-have-o.md +6 -0
- package/corpus/templates/design/changelog/2026-09-25-live-screens-recover-safely-from-interrupted-cross-screen-mo.md +6 -0
- package/corpus/templates/design/changelog/2026-09-26-canvas-focus-stays-on-toolbar-controls-when-a-live-preview-f.md +6 -0
- package/corpus/templates/design/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
- package/corpus/templates/design/server/plugins/auth.ts +0 -3
- package/corpus/templates/dispatch/app/root.tsx +2 -11
- package/corpus/templates/dispatch/app/routes/_index.tsx +1 -34
- package/corpus/templates/dispatch/server/plugins/setup-dispatch.ts +0 -3
- package/corpus/templates/factory/app/root.tsx +3 -15
- package/corpus/templates/factory/app/routes/_index.tsx +1 -34
- package/corpus/templates/factory/app/routes/home.tsx +1 -1
- package/corpus/templates/forms/AGENTS.md +1 -1
- package/corpus/templates/forms/app/root.tsx +2 -4
- package/corpus/templates/forms/app/routes/_index.tsx +1 -34
- package/corpus/templates/forms/server/plugins/auth.ts +0 -3
- package/corpus/templates/mail/CHANGELOG.md +8 -0
- package/corpus/templates/mail/app/root.tsx +2 -6
- package/corpus/templates/mail/app/routes/_index.tsx +1 -36
- package/corpus/templates/mail/app/routes/home.tsx +1 -1
- package/corpus/templates/mail/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
- package/corpus/templates/mail/server/plugins/auth.ts +0 -3
- package/corpus/templates/plan/app/root.tsx +7 -13
- package/corpus/templates/plan/app/routes/_index.tsx +1 -35
- package/corpus/templates/plan/app/routes/home.tsx +1 -1
- package/corpus/templates/plan/server/plugins/auth.ts +0 -3
- package/corpus/templates/slides/CHANGELOG.md +21 -0
- package/corpus/templates/slides/actions/get-deck.ts +49 -12
- package/corpus/templates/slides/app/root.tsx +1 -3
- package/corpus/templates/slides/app/routes/_index.tsx +1 -36
- package/corpus/templates/slides/app/routes/home.tsx +1 -1
- package/corpus/templates/slides/changelog/2026-09-25-human-review-previews-show-same-organization-slides-for-orga.md +6 -0
- package/corpus/templates/slides/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
- package/corpus/templates/slides/server/plugins/auth.ts +0 -3
- package/corpus/templates/tasks/AGENTS.md +1 -1
- package/corpus/templates/tasks/README.md +1 -1
- package/corpus/templates/tasks/app/root.tsx +2 -11
- package/corpus/templates/tasks/app/routes/_index.tsx +1 -37
- package/corpus/templates/tasks/app/routes/home.tsx +1 -1
- package/dist/cli/design-connect.d.ts +1 -0
- package/dist/cli/design-connect.js +94 -32
- package/dist/client/auth/AuthPage.d.ts +1 -17
- package/dist/client/auth/AuthPage.js +7 -49
- package/dist/client/observability/OutputPreview.js +8 -2
- package/dist/client/sign-in-landing.d.ts +1 -0
- package/dist/client/sign-in-landing.js +8 -0
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/deploy/workspace-deploy.js +32 -8
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
- package/dist/provider-api/actions/provider-api.d.ts +3 -3
- package/dist/server/auth-marketing.d.ts +0 -7
- package/dist/server/auth-marketing.js +0 -36
- package/dist/server/auth.d.ts +1 -10
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/onboarding-html.d.ts +1 -12
- package/dist/server/onboarding-html.js +4 -817
- package/dist/shared/ssr-auth-redirect.d.ts +3 -3
- package/dist/shared/ssr-auth-redirect.js +4 -4
- package/dist/templates/chat/AGENTS.md +3 -3
- package/dist/templates/chat/app/root.tsx +3 -15
- package/dist/templates/chat/app/routes/_index.tsx +1 -37
- package/dist/templates/chat/server/plugins/auth.ts +0 -3
- package/dist/templates/default/AGENTS.md +2 -4
- package/dist/templates/default/DEVELOPING.md +3 -5
- package/dist/templates/default/app/root.tsx +2 -9
- package/dist/templates/default/app/routes/_index.tsx +8 -15
- package/package.json +5 -4
- package/src/templates/chat/AGENTS.md +3 -3
- package/src/templates/chat/app/root.tsx +3 -15
- package/src/templates/chat/app/routes/_index.tsx +1 -37
- package/src/templates/chat/server/plugins/auth.ts +0 -3
- package/src/templates/default/AGENTS.md +2 -4
- package/src/templates/default/DEVELOPING.md +3 -5
- package/src/templates/default/app/root.tsx +2 -9
- package/src/templates/default/app/routes/_index.tsx +8 -15
- package/dist/server/auth-marketing-locales.d.ts +0 -9
- package/dist/server/auth-marketing-locales.js +0 -1322
- package/dist/templates/chat/public/auth-marketing/chat.webp +0 -0
- package/src/templates/chat/public/auth-marketing/chat.webp +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Inline browser handoff for the public
|
|
2
|
+
* Inline browser handoff for the public root entry.
|
|
3
3
|
*
|
|
4
4
|
* The server only decides whether this script belongs on the root shell. The
|
|
5
|
-
* browser owns the session check and redirect so the shell stays
|
|
6
|
-
* safe for a shared CDN cache.
|
|
5
|
+
* browser owns the session check and redirect so the root shell stays
|
|
6
|
+
* anonymous and safe for a shared CDN cache.
|
|
7
7
|
*/
|
|
8
8
|
export declare function getSsrAuthRedirectScript(sessionHintCookieName?: string, appHomePath?: string, frameworkRoutePrefix?: string): string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Inline browser handoff for the public
|
|
2
|
+
* Inline browser handoff for the public root entry.
|
|
3
3
|
*
|
|
4
4
|
* The server only decides whether this script belongs on the root shell. The
|
|
5
|
-
* browser owns the session check and redirect so the shell stays
|
|
6
|
-
* safe for a shared CDN cache.
|
|
5
|
+
* browser owns the session check and redirect so the root shell stays
|
|
6
|
+
* anonymous and safe for a shared CDN cache.
|
|
7
7
|
*/
|
|
8
8
|
export function getSsrAuthRedirectScript(sessionHintCookieName = "an_session_hint", appHomePath = "/home", frameworkRoutePrefix = "/_agent-native") {
|
|
9
9
|
if (appHomePath === "/")
|
|
@@ -52,7 +52,7 @@ export function getSsrAuthRedirectScript(sessionHintCookieName = "an_session_hin
|
|
|
52
52
|
if (!session || typeof session.email !== "string" || session.error) return;
|
|
53
53
|
return redirectToAppHome();
|
|
54
54
|
}).catch(function () { // coercion-ok: auth probe intentionally fails open so marketing remains usable.
|
|
55
|
-
// A transient session failure must leave the public
|
|
55
|
+
// A transient session failure must leave the public root usable.
|
|
56
56
|
});
|
|
57
57
|
})();</script>`;
|
|
58
58
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Chat — Agent Guide
|
|
2
2
|
|
|
3
|
-
Chat is the minimal chat-first agent-native app. The public root
|
|
4
|
-
|
|
3
|
+
Chat is the minimal chat-first agent-native app. The public root redirects to
|
|
4
|
+
the shared sign-in/signup page; the authenticated chat app starts at `/home`. Actions carry the real
|
|
5
5
|
capabilities, and screens exist only where a workflow needs durable UI around
|
|
6
6
|
the conversation.
|
|
7
7
|
|
|
@@ -48,7 +48,7 @@ brand. Its `app.name` is used in transactional emails, and its optional
|
|
|
48
48
|
## Application State
|
|
49
49
|
|
|
50
50
|
- `navigation` describes the current view and selected entity ids. The default
|
|
51
|
-
chat view is `chat` at `/home`; `/`
|
|
51
|
+
chat view is `chat` at `/home`; `/` opens the shared sign-in/signup page.
|
|
52
52
|
- `navigate` moves the UI when the app supports it.
|
|
53
53
|
- `view-screen` is the first tool to call when the user's visible context
|
|
54
54
|
matters.
|
|
@@ -167,23 +167,11 @@ function AppContent() {
|
|
|
167
167
|
|
|
168
168
|
export default function Root() {
|
|
169
169
|
const [queryClient] = useState(() => createAgentNativeQueryClient());
|
|
170
|
-
const location = useLocation();
|
|
171
|
-
const isMarketingPath = location.pathname === "/";
|
|
172
170
|
return (
|
|
173
171
|
<AppToolkitProvider>
|
|
174
|
-
<AppProviders
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
i18n={{ catalog: i18nCatalog }}
|
|
178
|
-
>
|
|
179
|
-
{isMarketingPath ? (
|
|
180
|
-
<Outlet />
|
|
181
|
-
) : (
|
|
182
|
-
<>
|
|
183
|
-
<DbSyncSetup />
|
|
184
|
-
<AppContent />
|
|
185
|
-
</>
|
|
186
|
-
)}
|
|
172
|
+
<AppProviders queryClient={queryClient} i18n={{ catalog: i18nCatalog }}>
|
|
173
|
+
<DbSyncSetup />
|
|
174
|
+
<AppContent />
|
|
187
175
|
</AppProviders>
|
|
188
176
|
</AppToolkitProvider>
|
|
189
177
|
);
|
|
@@ -1,37 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { MarketingHome } from "@agent-native/toolkit/marketing";
|
|
3
|
-
|
|
4
|
-
import { APP_TITLE } from "@/lib/app-config";
|
|
5
|
-
|
|
6
|
-
const SEO_TITLE = APP_TITLE + " - Open Source AI app starter with actions";
|
|
7
|
-
const SEO_DESCRIPTION =
|
|
8
|
-
"Open Source starter for agent-native apps with durable chat, shared actions, UI state, tools, and a backend your agent can extend.";
|
|
9
|
-
|
|
10
|
-
export function meta() {
|
|
11
|
-
return [
|
|
12
|
-
{ title: SEO_TITLE },
|
|
13
|
-
{ name: "description", content: SEO_DESCRIPTION },
|
|
14
|
-
{ property: "og:title", content: SEO_TITLE },
|
|
15
|
-
{ property: "og:description", content: SEO_DESCRIPTION },
|
|
16
|
-
{ name: "twitter:card", content: "summary" },
|
|
17
|
-
{ name: "twitter:title", content: SEO_TITLE },
|
|
18
|
-
{ name: "twitter:description", content: SEO_DESCRIPTION },
|
|
19
|
-
];
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export default function MarketingHomeRoute() {
|
|
23
|
-
return (
|
|
24
|
-
<MarketingHome
|
|
25
|
-
appName={APP_TITLE}
|
|
26
|
-
tagline="Start from a chat-first agent-native app and add actions, screens, and workflows as you grow."
|
|
27
|
-
description={SEO_DESCRIPTION}
|
|
28
|
-
valueProps={[
|
|
29
|
-
"Full-page chat with durable threads and tool call history",
|
|
30
|
-
"Use shared actions from chat, UI, HTTP, MCP, A2A, and CLI",
|
|
31
|
-
"Plug in your own agent runtime or use the included app-agent loop",
|
|
32
|
-
]}
|
|
33
|
-
primaryActionHref={appPath("/home")}
|
|
34
|
-
secondaryActionHref={appPath("/sign-in")}
|
|
35
|
-
/>
|
|
36
|
-
);
|
|
37
|
-
}
|
|
1
|
+
export { signInLandingLoader as loader } from "@agent-native/core/client/sign-in-landing";
|
|
@@ -7,9 +7,6 @@ export default createAuthPlugin({
|
|
|
7
7
|
workspaceAppPublicPaths: ["/"],
|
|
8
8
|
marketing: {
|
|
9
9
|
appName: appTitle,
|
|
10
|
-
screenshotPath: "/auth-marketing/chat.webp",
|
|
11
|
-
screenshotWidth: 914,
|
|
12
|
-
screenshotHeight: 818,
|
|
13
10
|
learnMoreUrl: "https://agent-native.com/apps/chat",
|
|
14
11
|
tagline:
|
|
15
12
|
"Start from a chat-first agent-native app and add actions, screens, and workflows as you grow.",
|
|
@@ -65,10 +65,8 @@ more, but both must agree on the key ones and name only real actions. See
|
|
|
65
65
|
|
|
66
66
|
## Public and private routes
|
|
67
67
|
|
|
68
|
-
`app/routes/_index.tsx`
|
|
69
|
-
|
|
70
|
-
action slots, or `children` for a custom hero. Keep the browser-gated app
|
|
71
|
-
under `/home`; never server-redirect `/` based on auth.
|
|
68
|
+
`app/routes/_index.tsx` document-redirects to the shared `/sign-in` page. Keep
|
|
69
|
+
authenticated app UI and data loads under `/home` or another private route.
|
|
72
70
|
|
|
73
71
|
## Lightweight defaults
|
|
74
72
|
|
|
@@ -4,7 +4,7 @@ This guide is for development-mode agents editing this app's source code. For ap
|
|
|
4
4
|
|
|
5
5
|
## Framework Basics
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**Shared auth entry, private app:** This app uses React Router v8 framework mode with `ssr: true`. The `/` route document-redirects to `/sign-in`. Authenticated app routes start at `/home` and render client-side behind the `ClientOnly` session gate in `root.tsx`; browser APIs are safe there.
|
|
8
8
|
|
|
9
9
|
**Do NOT fetch data server-side** in route loaders unless the page genuinely needs SEO/OG content. The standard pattern is: SSR renders the shell, client hydrates, and React reads/writes normal app data through actions with `useActionQuery` / `useActionMutation`.
|
|
10
10
|
|
|
@@ -48,10 +48,8 @@ export default function MyPageRoute() {
|
|
|
48
48
|
}
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
The root route
|
|
52
|
-
|
|
53
|
-
background visuals, action links, and a custom `children` escape hatch. Put
|
|
54
|
-
authenticated app UI and data loads under `/home` or another private route.
|
|
51
|
+
The root route must use the shared sign-in landing loader; put authenticated
|
|
52
|
+
app UI and data loads under `/home` or another private route.
|
|
55
53
|
|
|
56
54
|
## Adding App Data
|
|
57
55
|
|
|
@@ -20,7 +20,6 @@ import {
|
|
|
20
20
|
ScrollRestoration,
|
|
21
21
|
isRouteErrorResponse,
|
|
22
22
|
Link,
|
|
23
|
-
useLocation,
|
|
24
23
|
useRouteError,
|
|
25
24
|
} from "react-router";
|
|
26
25
|
|
|
@@ -255,16 +254,10 @@ function DbSyncSetup() {
|
|
|
255
254
|
|
|
256
255
|
export default function Root() {
|
|
257
256
|
const [queryClient] = useState(() => createAgentNativeQueryClient());
|
|
258
|
-
const location = useLocation();
|
|
259
|
-
const isMarketingHome = location.pathname === "/";
|
|
260
257
|
return (
|
|
261
|
-
<AppProviders
|
|
262
|
-
queryClient={queryClient}
|
|
263
|
-
isPublicPath={isMarketingHome}
|
|
264
|
-
i18n={{ catalog: i18nCatalog }}
|
|
265
|
-
>
|
|
258
|
+
<AppProviders queryClient={queryClient} i18n={{ catalog: i18nCatalog }}>
|
|
266
259
|
<AppToolkitProvider>
|
|
267
|
-
|
|
260
|
+
<DbSyncSetup />
|
|
268
261
|
<Outlet />
|
|
269
262
|
</AppToolkitProvider>
|
|
270
263
|
</AppProviders>
|
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { signInLandingLoader } from "@agent-native/core/client/sign-in-landing";
|
|
2
|
+
import { getAppConfig, resolveAppHomePath } from "@agent-native/core/server";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
return [{ title: "{{APP_TITLE}}" }];
|
|
6
|
-
}
|
|
4
|
+
import HomePage from "./home";
|
|
7
5
|
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
appName="{{APP_TITLE}}"
|
|
12
|
-
tagline="Build with your AI agent."
|
|
13
|
-
description="A starter app for building Agent-Native workflows."
|
|
14
|
-
primaryActionHref={appPath("/home")}
|
|
15
|
-
secondaryActionHref={appPath("/sign-in")}
|
|
16
|
-
/>
|
|
17
|
-
);
|
|
6
|
+
export function loader() {
|
|
7
|
+
const config = getAppConfig();
|
|
8
|
+
return signInLandingLoader(resolveAppHomePath(config.app, config.workspace));
|
|
18
9
|
}
|
|
10
|
+
|
|
11
|
+
export default HomePage;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.192.0
|
|
3
|
+
"version": "0.192.0",
|
|
4
4
|
"description": "The agentic application framework for building autonomous agents with intuitive UIs",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -184,6 +184,7 @@
|
|
|
184
184
|
"./client/AgentSidebar": "./dist/client/AgentSidebar.js",
|
|
185
185
|
"./client/application-state": "./dist/client/application-state.js",
|
|
186
186
|
"./client/api-path": "./dist/client/api-path.js",
|
|
187
|
+
"./client/sign-in-landing": "./dist/client/sign-in-landing.js",
|
|
187
188
|
"./client/oauth-popup": "./dist/client/oauth-popup.js",
|
|
188
189
|
"./client/clipboard": "./dist/client/clipboard.js",
|
|
189
190
|
"./client/route-state": "./dist/client/route-state.js",
|
|
@@ -511,9 +512,9 @@
|
|
|
511
512
|
"yaml": "^2.9.0",
|
|
512
513
|
"yjs": "^13.6.32",
|
|
513
514
|
"zod": "^4.3.6",
|
|
514
|
-
"@agent-native/agentkit": "^0.3.0
|
|
515
|
-
"@agent-native/
|
|
516
|
-
"@agent-native/
|
|
515
|
+
"@agent-native/agentkit": "^0.3.0",
|
|
516
|
+
"@agent-native/toolkit": "^0.22.0",
|
|
517
|
+
"@agent-native/recap-cli": "0.5.44"
|
|
517
518
|
},
|
|
518
519
|
"devDependencies": {
|
|
519
520
|
"@ai-sdk/anthropic": "^3.0.71",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Chat — Agent Guide
|
|
2
2
|
|
|
3
|
-
Chat is the minimal chat-first agent-native app. The public root
|
|
4
|
-
|
|
3
|
+
Chat is the minimal chat-first agent-native app. The public root redirects to
|
|
4
|
+
the shared sign-in/signup page; the authenticated chat app starts at `/home`. Actions carry the real
|
|
5
5
|
capabilities, and screens exist only where a workflow needs durable UI around
|
|
6
6
|
the conversation.
|
|
7
7
|
|
|
@@ -48,7 +48,7 @@ brand. Its `app.name` is used in transactional emails, and its optional
|
|
|
48
48
|
## Application State
|
|
49
49
|
|
|
50
50
|
- `navigation` describes the current view and selected entity ids. The default
|
|
51
|
-
chat view is `chat` at `/home`; `/`
|
|
51
|
+
chat view is `chat` at `/home`; `/` opens the shared sign-in/signup page.
|
|
52
52
|
- `navigate` moves the UI when the app supports it.
|
|
53
53
|
- `view-screen` is the first tool to call when the user's visible context
|
|
54
54
|
matters.
|
|
@@ -167,23 +167,11 @@ function AppContent() {
|
|
|
167
167
|
|
|
168
168
|
export default function Root() {
|
|
169
169
|
const [queryClient] = useState(() => createAgentNativeQueryClient());
|
|
170
|
-
const location = useLocation();
|
|
171
|
-
const isMarketingPath = location.pathname === "/";
|
|
172
170
|
return (
|
|
173
171
|
<AppToolkitProvider>
|
|
174
|
-
<AppProviders
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
i18n={{ catalog: i18nCatalog }}
|
|
178
|
-
>
|
|
179
|
-
{isMarketingPath ? (
|
|
180
|
-
<Outlet />
|
|
181
|
-
) : (
|
|
182
|
-
<>
|
|
183
|
-
<DbSyncSetup />
|
|
184
|
-
<AppContent />
|
|
185
|
-
</>
|
|
186
|
-
)}
|
|
172
|
+
<AppProviders queryClient={queryClient} i18n={{ catalog: i18nCatalog }}>
|
|
173
|
+
<DbSyncSetup />
|
|
174
|
+
<AppContent />
|
|
187
175
|
</AppProviders>
|
|
188
176
|
</AppToolkitProvider>
|
|
189
177
|
);
|
|
@@ -1,37 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { MarketingHome } from "@agent-native/toolkit/marketing";
|
|
3
|
-
|
|
4
|
-
import { APP_TITLE } from "@/lib/app-config";
|
|
5
|
-
|
|
6
|
-
const SEO_TITLE = APP_TITLE + " - Open Source AI app starter with actions";
|
|
7
|
-
const SEO_DESCRIPTION =
|
|
8
|
-
"Open Source starter for agent-native apps with durable chat, shared actions, UI state, tools, and a backend your agent can extend.";
|
|
9
|
-
|
|
10
|
-
export function meta() {
|
|
11
|
-
return [
|
|
12
|
-
{ title: SEO_TITLE },
|
|
13
|
-
{ name: "description", content: SEO_DESCRIPTION },
|
|
14
|
-
{ property: "og:title", content: SEO_TITLE },
|
|
15
|
-
{ property: "og:description", content: SEO_DESCRIPTION },
|
|
16
|
-
{ name: "twitter:card", content: "summary" },
|
|
17
|
-
{ name: "twitter:title", content: SEO_TITLE },
|
|
18
|
-
{ name: "twitter:description", content: SEO_DESCRIPTION },
|
|
19
|
-
];
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export default function MarketingHomeRoute() {
|
|
23
|
-
return (
|
|
24
|
-
<MarketingHome
|
|
25
|
-
appName={APP_TITLE}
|
|
26
|
-
tagline="Start from a chat-first agent-native app and add actions, screens, and workflows as you grow."
|
|
27
|
-
description={SEO_DESCRIPTION}
|
|
28
|
-
valueProps={[
|
|
29
|
-
"Full-page chat with durable threads and tool call history",
|
|
30
|
-
"Use shared actions from chat, UI, HTTP, MCP, A2A, and CLI",
|
|
31
|
-
"Plug in your own agent runtime or use the included app-agent loop",
|
|
32
|
-
]}
|
|
33
|
-
primaryActionHref={appPath("/home")}
|
|
34
|
-
secondaryActionHref={appPath("/sign-in")}
|
|
35
|
-
/>
|
|
36
|
-
);
|
|
37
|
-
}
|
|
1
|
+
export { signInLandingLoader as loader } from "@agent-native/core/client/sign-in-landing";
|
|
@@ -7,9 +7,6 @@ export default createAuthPlugin({
|
|
|
7
7
|
workspaceAppPublicPaths: ["/"],
|
|
8
8
|
marketing: {
|
|
9
9
|
appName: appTitle,
|
|
10
|
-
screenshotPath: "/auth-marketing/chat.webp",
|
|
11
|
-
screenshotWidth: 914,
|
|
12
|
-
screenshotHeight: 818,
|
|
13
10
|
learnMoreUrl: "https://agent-native.com/apps/chat",
|
|
14
11
|
tagline:
|
|
15
12
|
"Start from a chat-first agent-native app and add actions, screens, and workflows as you grow.",
|
|
@@ -65,10 +65,8 @@ more, but both must agree on the key ones and name only real actions. See
|
|
|
65
65
|
|
|
66
66
|
## Public and private routes
|
|
67
67
|
|
|
68
|
-
`app/routes/_index.tsx`
|
|
69
|
-
|
|
70
|
-
action slots, or `children` for a custom hero. Keep the browser-gated app
|
|
71
|
-
under `/home`; never server-redirect `/` based on auth.
|
|
68
|
+
`app/routes/_index.tsx` document-redirects to the shared `/sign-in` page. Keep
|
|
69
|
+
authenticated app UI and data loads under `/home` or another private route.
|
|
72
70
|
|
|
73
71
|
## Lightweight defaults
|
|
74
72
|
|
|
@@ -4,7 +4,7 @@ This guide is for development-mode agents editing this app's source code. For ap
|
|
|
4
4
|
|
|
5
5
|
## Framework Basics
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**Shared auth entry, private app:** This app uses React Router v8 framework mode with `ssr: true`. The `/` route document-redirects to `/sign-in`. Authenticated app routes start at `/home` and render client-side behind the `ClientOnly` session gate in `root.tsx`; browser APIs are safe there.
|
|
8
8
|
|
|
9
9
|
**Do NOT fetch data server-side** in route loaders unless the page genuinely needs SEO/OG content. The standard pattern is: SSR renders the shell, client hydrates, and React reads/writes normal app data through actions with `useActionQuery` / `useActionMutation`.
|
|
10
10
|
|
|
@@ -48,10 +48,8 @@ export default function MyPageRoute() {
|
|
|
48
48
|
}
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
The root route
|
|
52
|
-
|
|
53
|
-
background visuals, action links, and a custom `children` escape hatch. Put
|
|
54
|
-
authenticated app UI and data loads under `/home` or another private route.
|
|
51
|
+
The root route must use the shared sign-in landing loader; put authenticated
|
|
52
|
+
app UI and data loads under `/home` or another private route.
|
|
55
53
|
|
|
56
54
|
## Adding App Data
|
|
57
55
|
|
|
@@ -20,7 +20,6 @@ import {
|
|
|
20
20
|
ScrollRestoration,
|
|
21
21
|
isRouteErrorResponse,
|
|
22
22
|
Link,
|
|
23
|
-
useLocation,
|
|
24
23
|
useRouteError,
|
|
25
24
|
} from "react-router";
|
|
26
25
|
|
|
@@ -255,16 +254,10 @@ function DbSyncSetup() {
|
|
|
255
254
|
|
|
256
255
|
export default function Root() {
|
|
257
256
|
const [queryClient] = useState(() => createAgentNativeQueryClient());
|
|
258
|
-
const location = useLocation();
|
|
259
|
-
const isMarketingHome = location.pathname === "/";
|
|
260
257
|
return (
|
|
261
|
-
<AppProviders
|
|
262
|
-
queryClient={queryClient}
|
|
263
|
-
isPublicPath={isMarketingHome}
|
|
264
|
-
i18n={{ catalog: i18nCatalog }}
|
|
265
|
-
>
|
|
258
|
+
<AppProviders queryClient={queryClient} i18n={{ catalog: i18nCatalog }}>
|
|
266
259
|
<AppToolkitProvider>
|
|
267
|
-
|
|
260
|
+
<DbSyncSetup />
|
|
268
261
|
<Outlet />
|
|
269
262
|
</AppToolkitProvider>
|
|
270
263
|
</AppProviders>
|
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { signInLandingLoader } from "@agent-native/core/client/sign-in-landing";
|
|
2
|
+
import { getAppConfig, resolveAppHomePath } from "@agent-native/core/server";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
return [{ title: "{{APP_TITLE}}" }];
|
|
6
|
-
}
|
|
4
|
+
import HomePage from "./home";
|
|
7
5
|
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
appName="{{APP_TITLE}}"
|
|
12
|
-
tagline="Build with your AI agent."
|
|
13
|
-
description="A starter app for building Agent-Native workflows."
|
|
14
|
-
primaryActionHref={appPath("/home")}
|
|
15
|
-
secondaryActionHref={appPath("/sign-in")}
|
|
16
|
-
/>
|
|
17
|
-
);
|
|
6
|
+
export function loader() {
|
|
7
|
+
const config = getAppConfig();
|
|
8
|
+
return signInLandingLoader(resolveAppHomePath(config.app, config.workspace));
|
|
18
9
|
}
|
|
10
|
+
|
|
11
|
+
export default HomePage;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { LocaleCode } from "../localization/shared.js";
|
|
2
|
-
export interface AuthMarketingLocaleCopy {
|
|
3
|
-
tagline?: string;
|
|
4
|
-
description?: string;
|
|
5
|
-
features?: string[];
|
|
6
|
-
authHeadline?: string;
|
|
7
|
-
authDescription?: string;
|
|
8
|
-
}
|
|
9
|
-
export declare const AUTH_MARKETING_LOCALE_COPY: Partial<Record<LocaleCode, Record<string, AuthMarketingLocaleCopy>>>;
|