@agent-native/core 0.79.21 → 0.79.22
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 +2 -2
- package/corpus/core/CHANGELOG.md +10 -0
- package/corpus/core/docs/content/deployment.md +82 -82
- package/corpus/core/docs/content/faq.md +1 -1
- package/corpus/core/docs/content/tracking.md +3 -3
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/engine/openai-compatible-endpoint.ts +25 -0
- package/corpus/core/src/agent/engine/provider-env-vars.ts +2 -0
- package/corpus/core/src/agent/engine/registry.ts +59 -11
- package/corpus/core/src/client/FeedbackButton.tsx +11 -1
- package/corpus/core/src/client/agent-engine-key.ts +57 -10
- package/corpus/core/src/client/analytics.ts +78 -27
- package/corpus/core/src/client/blocks/library/HighlightedCode.tsx +1 -1
- package/corpus/core/src/client/index.ts +2 -0
- package/corpus/core/src/client/session-replay.ts +159 -17
- package/corpus/core/src/client/settings/SettingsPanel.tsx +119 -4
- package/corpus/core/src/scripts/agent-engines/manage-agent-engine.ts +5 -0
- package/corpus/core/src/scripts/agent-engines/set-agent-engine.ts +8 -3
- package/corpus/core/src/scripts/agent-engines/test-agent-engine.ts +54 -6
- package/corpus/core/src/server/agent-engine-api-key-route.ts +83 -12
- package/corpus/core/src/server/core-routes-plugin.ts +26 -2
- package/corpus/core/src/styles/blocks.css +23 -7
- package/corpus/templates/analytics/actions/list-session-recordings.ts +1 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +22 -4
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +64 -50
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-layout.ts +38 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-sync.ts +89 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +138 -59
- package/corpus/templates/analytics/changelog/2026-06-27-dashboard-charts-drag-smoothly-when-rearranging-panels.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-27-dashboard-email-reports-still-send-when-the-live-screenshot-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-27-fixed-dashboard-edits-so-charts-no-longer-briefly-snap-back-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-27-mobile-navigation-chrome-and-motion.md +1 -0
- package/corpus/templates/analytics/changelog/2026-06-27-session-replay-lists-now-show-only-signed-in-recordings-with.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-27-sidebar-loading-placeholders-are-visible-in-light-mode.md +6 -0
- package/corpus/templates/analytics/netlify.toml +4 -0
- package/corpus/templates/analytics/scripts/seed-session-replay.ts +1 -0
- package/corpus/templates/analytics/server/jobs/dashboard-report.ts +1 -0
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +120 -29
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +1 -1
- package/corpus/templates/analytics/server/lib/session-replay.ts +158 -46
- package/corpus/templates/assets/changelog/2026-06-27-mobile-navigation-chrome-and-motion.md +1 -0
- package/corpus/templates/clips/app/components/capture-install-options.tsx +0 -9
- package/corpus/templates/clips/changelog/2026-06-27-clips-no-longer-shows-desktop-app-prompts-on-mobile-screens.md +1 -0
- package/corpus/templates/clips/changelog/2026-06-27-recorder-download-options-now-show-the-chrome-extension-and-.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-27-recorder-setup-mobile-capture-options.md +1 -0
- package/corpus/templates/clips/chrome-extension/package.json +1 -1
- package/corpus/templates/clips/chrome-extension/src/sentry.ts +17 -1
- package/corpus/templates/clips/desktop/package.json +1 -0
- package/corpus/templates/clips/desktop/scripts/check-tauri-prereqs.mjs +45 -0
- package/corpus/templates/clips/desktop/src/lib/sentry.ts +71 -0
- package/corpus/templates/clips/desktop/src/main.tsx +2 -0
- package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +2 -1
- package/corpus/templates/clips/desktop/src-tauri/build.rs +29 -0
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +3 -0
- package/corpus/templates/clips/desktop/src-tauri/src/logfile.rs +1 -0
- package/corpus/templates/clips/desktop/src-tauri/src/sentry_report.rs +142 -0
- package/corpus/templates/clips/desktop/vite.config.ts +66 -0
- package/corpus/templates/design/changelog/2026-06-27-mobile-navigation-chrome-and-motion.md +1 -0
- package/corpus/templates/forms/actions/export-responses.ts +3 -2
- package/corpus/templates/forms/actions/list-responses.ts +2 -1
- package/corpus/templates/forms/actions/response-insights.ts +13 -4
- package/corpus/templates/forms/changelog/2026-06-27-anonymous-feedback-no-longer-shows-internal-agent-native-ano.md +6 -0
- package/corpus/templates/forms/server/handlers/submissions.ts +5 -8
- package/corpus/templates/forms/server/lib/integrations.ts +9 -6
- package/corpus/templates/forms/shared/submitter-email.ts +20 -0
- package/corpus/templates/forms/shared/types.ts +1 -1
- package/corpus/templates/plan/app/components/plan/wireframe/html-artboard.css +49 -10
- package/corpus/templates/slides/changelog/2026-06-27-mobile-navigation-chrome-and-motion.md +1 -0
- package/dist/agent/engine/openai-compatible-endpoint.d.ts +3 -0
- package/dist/agent/engine/openai-compatible-endpoint.d.ts.map +1 -0
- package/dist/agent/engine/openai-compatible-endpoint.js +23 -0
- package/dist/agent/engine/openai-compatible-endpoint.js.map +1 -0
- package/dist/agent/engine/provider-env-vars.d.ts +1 -0
- package/dist/agent/engine/provider-env-vars.d.ts.map +1 -1
- package/dist/agent/engine/provider-env-vars.js +1 -0
- package/dist/agent/engine/provider-env-vars.js.map +1 -1
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +39 -12
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/client/FeedbackButton.d.ts.map +1 -1
- package/dist/client/FeedbackButton.js +6 -1
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/agent-engine-key.d.ts +14 -0
- package/dist/client/agent-engine-key.d.ts.map +1 -1
- package/dist/client/agent-engine-key.js +35 -10
- package/dist/client/agent-engine-key.js.map +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +71 -24
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/blocks/library/HighlightedCode.d.ts +1 -1
- package/dist/client/blocks/library/HighlightedCode.js +1 -1
- package/dist/client/blocks/library/HighlightedCode.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/session-replay.d.ts +1 -1
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +115 -17
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +42 -6
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +7 -7
- package/dist/progress/routes.d.ts +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.d.ts.map +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.js +4 -0
- package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.d.ts.map +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.js +5 -4
- package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
- package/dist/scripts/agent-engines/test-agent-engine.d.ts.map +1 -1
- package/dist/scripts/agent-engines/test-agent-engine.js +37 -5
- package/dist/scripts/agent-engines/test-agent-engine.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +4 -4
- package/dist/server/agent-engine-api-key-route.d.ts.map +1 -1
- package/dist/server/agent-engine-api-key-route.js +71 -11
- package/dist/server/agent-engine-api-key-route.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +20 -3
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/styles/blocks.css +23 -7
- package/docs/content/deployment.md +82 -82
- package/docs/content/faq.md +1 -1
- package/docs/content/tracking.md +3 -3
- package/package.json +1 -1
package/dist/styles/blocks.css
CHANGED
|
@@ -1231,6 +1231,7 @@
|
|
|
1231
1231
|
--wf-muted: var(--plan-muted, hsl(var(--muted-foreground)));
|
|
1232
1232
|
--wf-line: var(--plan-line, hsl(var(--border)));
|
|
1233
1233
|
--wf-sketch: var(--plan-muted-line, hsl(var(--border)));
|
|
1234
|
+
--wf-diagram-line: var(--wf-line);
|
|
1234
1235
|
--wf-paper: var(--plan-document, hsl(var(--background)));
|
|
1235
1236
|
--wf-card: var(--plan-block, hsl(var(--card)));
|
|
1236
1237
|
--wf-accent: hsl(var(--ring));
|
|
@@ -1256,6 +1257,10 @@
|
|
|
1256
1257
|
line-height: 1.4;
|
|
1257
1258
|
}
|
|
1258
1259
|
|
|
1260
|
+
.plan-diagram-frame[data-theme="dark"] {
|
|
1261
|
+
--wf-diagram-line: color-mix(in srgb, var(--wf-sketch) 72%, var(--wf-line));
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1259
1264
|
.plan-diagram-frame[data-style="sketchy"] {
|
|
1260
1265
|
--wf-font: var(--wf-font-hand);
|
|
1261
1266
|
line-height: 1.32;
|
|
@@ -1275,9 +1280,7 @@
|
|
|
1275
1280
|
}
|
|
1276
1281
|
|
|
1277
1282
|
.plan-diagram-frame-content
|
|
1278
|
-
>
|
|
1279
|
-
[data-diagram-frame]
|
|
1280
|
-
) {
|
|
1283
|
+
> .diagram-panel:not([data-rough]):not([data-diagram-frame]) {
|
|
1281
1284
|
--rough-skip: 1;
|
|
1282
1285
|
background: transparent;
|
|
1283
1286
|
border-color: transparent;
|
|
@@ -1318,7 +1321,8 @@
|
|
|
1318
1321
|
|
|
1319
1322
|
.plan-diagram-frame
|
|
1320
1323
|
:is(.diagram-panel, .diagram-card, .diagram-node, .diagram-box) {
|
|
1321
|
-
|
|
1324
|
+
--rough-stroke: var(--wf-diagram-line);
|
|
1325
|
+
border: 1.25px solid var(--wf-diagram-line);
|
|
1322
1326
|
border-radius: var(--wf-radius);
|
|
1323
1327
|
background: var(--wf-card);
|
|
1324
1328
|
}
|
|
@@ -1333,7 +1337,8 @@
|
|
|
1333
1337
|
[class*="panel"],
|
|
1334
1338
|
[class*="box"]
|
|
1335
1339
|
) {
|
|
1336
|
-
|
|
1340
|
+
--rough-stroke: var(--wf-diagram-line);
|
|
1341
|
+
border-color: var(--wf-diagram-line) !important;
|
|
1337
1342
|
background: var(--wf-card) !important;
|
|
1338
1343
|
color: var(--wf-ink) !important;
|
|
1339
1344
|
}
|
|
@@ -1366,7 +1371,8 @@
|
|
|
1366
1371
|
|
|
1367
1372
|
.plan-diagram-frame
|
|
1368
1373
|
:is(.diagram-pill, [class*="pill"], [class*="badge"], [class*="chip"]) {
|
|
1369
|
-
|
|
1374
|
+
--rough-stroke: var(--wf-diagram-line);
|
|
1375
|
+
border-color: var(--wf-diagram-line) !important;
|
|
1370
1376
|
background: var(--wf-paper) !important;
|
|
1371
1377
|
color: var(--wf-ink) !important;
|
|
1372
1378
|
}
|
|
@@ -1411,7 +1417,7 @@
|
|
|
1411
1417
|
* variant used across the docs diagrams stays pill-shaped, not a full bar. */
|
|
1412
1418
|
width: fit-content;
|
|
1413
1419
|
max-width: 100%;
|
|
1414
|
-
border: 1px solid var(--wf-line);
|
|
1420
|
+
border: 1px solid var(--wf-diagram-line);
|
|
1415
1421
|
border-radius: 999px;
|
|
1416
1422
|
padding: 3px 11px;
|
|
1417
1423
|
color: var(--wf-ink);
|
|
@@ -1453,6 +1459,16 @@
|
|
|
1453
1459
|
[data-rough],
|
|
1454
1460
|
hr
|
|
1455
1461
|
) {
|
|
1462
|
+
border-color: color-mix(
|
|
1463
|
+
in srgb,
|
|
1464
|
+
var(--wf-diagram-line) 54%,
|
|
1465
|
+
transparent
|
|
1466
|
+
) !important;
|
|
1467
|
+
}
|
|
1468
|
+
|
|
1469
|
+
.plan-diagram-frame[data-rough-ready]
|
|
1470
|
+
.plan-diagram-frame-content
|
|
1471
|
+
> .diagram-panel:not([data-rough]):not([data-diagram-frame]) {
|
|
1456
1472
|
border-color: transparent !important;
|
|
1457
1473
|
}
|
|
1458
1474
|
|
|
@@ -66,6 +66,85 @@ background processors. Local `--build-only` artifact checks still run without it
|
|
|
66
66
|
|
|
67
67
|
Per-app independent deploy is still supported — just `cd apps/<name> && npx @agent-native/core@latest build` like a standalone scaffold.
|
|
68
68
|
|
|
69
|
+
## How It Works {#how-it-works}
|
|
70
|
+
|
|
71
|
+
When you run `npx @agent-native/core@latest build`, Nitro builds both the client SPA and the server API into `.output/`:
|
|
72
|
+
|
|
73
|
+
```an-file-tree title="Build output"
|
|
74
|
+
{
|
|
75
|
+
"entries": [
|
|
76
|
+
{ "path": ".output/", "note": "self-contained — copy to any environment and run" },
|
|
77
|
+
{ "path": ".output/public/", "note": "built SPA (static assets)" },
|
|
78
|
+
{ "path": ".output/server/index.mjs", "note": "server entry point" },
|
|
79
|
+
{ "path": ".output/server/chunks/", "note": "server code chunks" }
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The output is self-contained — copy `.output/` to any environment and run it.
|
|
85
|
+
|
|
86
|
+
```an-diagram title="Build to deploy" summary="One source tree builds to a Nitro preset; the same self-contained output runs on Node, Vercel, Netlify, Cloudflare, AWS, or Deno. Every instance points at the same persistent DATABASE_URL."
|
|
87
|
+
{
|
|
88
|
+
"html": "<div class=\"diagram-deploy\"><div class=\"diagram-box\" data-rough>App source</div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">→</div><div class=\"diagram-panel center\" data-rough><span class=\"diagram-pill accent\">build</span><small class=\"diagram-muted\">Nitro preset</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">→</div><div class=\"diagram-grid\"><span class=\"diagram-pill\">Node.js</span><span class=\"diagram-pill\">Vercel</span><span class=\"diagram-pill\">Netlify</span><span class=\"diagram-pill\">Cloudflare</span><span class=\"diagram-pill\">AWS Lambda</span><span class=\"diagram-pill\">Deno</span></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">→</div><div class=\"diagram-box\" data-rough>Persistent DATABASE_URL<br><small class=\"diagram-muted\">shared by every instance</small></div></div>",
|
|
89
|
+
"css": ".diagram-deploy{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.diagram-deploy .center{display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px 16px}.diagram-deploy .diagram-arrow{font-size:22px;line-height:1}.diagram-deploy .diagram-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}"
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Setting the Preset {#setting-the-preset}
|
|
94
|
+
|
|
95
|
+
By default, Nitro builds for Node.js. To target a different platform, set the preset in your `vite.config.ts`:
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
import { agentNative } from "@agent-native/core/vite";
|
|
99
|
+
import { defineConfig } from "vite";
|
|
100
|
+
|
|
101
|
+
export default defineConfig({
|
|
102
|
+
plugins: [agentNative({ nitro: { preset: "vercel" } })],
|
|
103
|
+
});
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Or use the `NITRO_PRESET` environment variable at build time:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
NITRO_PRESET=netlify npx @agent-native/core@latest build
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Node.js (Default) {#nodejs}
|
|
113
|
+
|
|
114
|
+
The default preset. Build and run:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
npx @agent-native/core@latest build
|
|
118
|
+
node .output/server/index.mjs
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Set `PORT` to configure the listen port (default: `3000`).
|
|
122
|
+
|
|
123
|
+
Use the current Node.js LTS line for production deploys. As of May 2026, that
|
|
124
|
+
is Node.js 24; Node.js 20 reached end-of-life on April 30, 2026 and no longer
|
|
125
|
+
receives upstream security updates.
|
|
126
|
+
|
|
127
|
+
### Docker {#docker}
|
|
128
|
+
|
|
129
|
+
```dockerfile
|
|
130
|
+
FROM node:24-slim AS build
|
|
131
|
+
WORKDIR /app
|
|
132
|
+
COPY package.json pnpm-lock.yaml ./
|
|
133
|
+
RUN corepack enable && pnpm install --frozen-lockfile
|
|
134
|
+
COPY . .
|
|
135
|
+
RUN pnpm build
|
|
136
|
+
|
|
137
|
+
FROM node:24-slim
|
|
138
|
+
WORKDIR /app
|
|
139
|
+
COPY --from=build /app/.output .output
|
|
140
|
+
# data/ is a runtime-created SQLite directory — do not copy a dev DB into prod.
|
|
141
|
+
# For production, set DATABASE_URL to a hosted Postgres or Turso instance.
|
|
142
|
+
RUN mkdir -p /app/data
|
|
143
|
+
ENV PORT=3000
|
|
144
|
+
EXPOSE 3000
|
|
145
|
+
CMD ["node", ".output/server/index.mjs"]
|
|
146
|
+
```
|
|
147
|
+
|
|
69
148
|
### Self-hosted workspace with Docker Compose {#workspace-docker-compose}
|
|
70
149
|
|
|
71
150
|
The Dockerfile above is for one standalone app. A workspace is not one Nitro
|
|
@@ -79,7 +158,7 @@ Build each app with the same base path that the proxy will use at runtime. The
|
|
|
79
158
|
base path is a build-time input for the client bundle and a runtime input for
|
|
80
159
|
the server:
|
|
81
160
|
|
|
82
|
-
```bash
|
|
161
|
+
```bash maxLines=8
|
|
83
162
|
APP_BASE_PATH=/mail VITE_APP_BASE_PATH=/mail npx @agent-native/core@latest build
|
|
84
163
|
node .output/server/index.mjs
|
|
85
164
|
```
|
|
@@ -87,7 +166,7 @@ node .output/server/index.mjs
|
|
|
87
166
|
A reusable workspace Dockerfile can take the app name and path prefix as build
|
|
88
167
|
arguments:
|
|
89
168
|
|
|
90
|
-
```dockerfile
|
|
169
|
+
```dockerfile maxLines=12
|
|
91
170
|
FROM node:24-slim AS build
|
|
92
171
|
WORKDIR /workspace
|
|
93
172
|
RUN corepack enable
|
|
@@ -117,7 +196,7 @@ Then compose Postgres, the app containers, and your proxy. This example uses
|
|
|
117
196
|
Caddy because it can terminate HTTP locally or sit behind Cloudflare's SSL
|
|
118
197
|
proxy, but the important part is the path-prefix routing:
|
|
119
198
|
|
|
120
|
-
```yaml
|
|
199
|
+
```yaml maxLines=30
|
|
121
200
|
services:
|
|
122
201
|
postgres:
|
|
123
202
|
image: postgres:17
|
|
@@ -199,85 +278,6 @@ Notes for this shape:
|
|
|
199
278
|
normal `X-Forwarded-Proto` / `X-Forwarded-Host` headers and route the public
|
|
200
279
|
host to the proxy container.
|
|
201
280
|
|
|
202
|
-
## How It Works {#how-it-works}
|
|
203
|
-
|
|
204
|
-
When you run `npx @agent-native/core@latest build`, Nitro builds both the client SPA and the server API into `.output/`:
|
|
205
|
-
|
|
206
|
-
```an-file-tree title="Build output"
|
|
207
|
-
{
|
|
208
|
-
"entries": [
|
|
209
|
-
{ "path": ".output/", "note": "self-contained — copy to any environment and run" },
|
|
210
|
-
{ "path": ".output/public/", "note": "built SPA (static assets)" },
|
|
211
|
-
{ "path": ".output/server/index.mjs", "note": "server entry point" },
|
|
212
|
-
{ "path": ".output/server/chunks/", "note": "server code chunks" }
|
|
213
|
-
]
|
|
214
|
-
}
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
The output is self-contained — copy `.output/` to any environment and run it.
|
|
218
|
-
|
|
219
|
-
```an-diagram title="Build to deploy" summary="One source tree builds to a Nitro preset; the same self-contained output runs on Node, Vercel, Netlify, Cloudflare, AWS, or Deno. Every instance points at the same persistent DATABASE_URL."
|
|
220
|
-
{
|
|
221
|
-
"html": "<div class=\"diagram-deploy\"><div class=\"diagram-box\" data-rough>App source</div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">→</div><div class=\"diagram-panel center\" data-rough><span class=\"diagram-pill accent\">build</span><small class=\"diagram-muted\">Nitro preset</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">→</div><div class=\"diagram-grid\"><span class=\"diagram-pill\">Node.js</span><span class=\"diagram-pill\">Vercel</span><span class=\"diagram-pill\">Netlify</span><span class=\"diagram-pill\">Cloudflare</span><span class=\"diagram-pill\">AWS Lambda</span><span class=\"diagram-pill\">Deno</span></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">→</div><div class=\"diagram-box\" data-rough>Persistent DATABASE_URL<br><small class=\"diagram-muted\">shared by every instance</small></div></div>",
|
|
222
|
-
"css": ".diagram-deploy{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.diagram-deploy .center{display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px 16px}.diagram-deploy .diagram-arrow{font-size:22px;line-height:1}.diagram-deploy .diagram-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}"
|
|
223
|
-
}
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
## Setting the Preset {#setting-the-preset}
|
|
227
|
-
|
|
228
|
-
By default, Nitro builds for Node.js. To target a different platform, set the preset in your `vite.config.ts`:
|
|
229
|
-
|
|
230
|
-
```ts
|
|
231
|
-
import { agentNative } from "@agent-native/core/vite";
|
|
232
|
-
import { defineConfig } from "vite";
|
|
233
|
-
|
|
234
|
-
export default defineConfig({
|
|
235
|
-
plugins: [agentNative({ nitro: { preset: "vercel" } })],
|
|
236
|
-
});
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
Or use the `NITRO_PRESET` environment variable at build time:
|
|
240
|
-
|
|
241
|
-
```bash
|
|
242
|
-
NITRO_PRESET=netlify npx @agent-native/core@latest build
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
## Node.js (Default) {#nodejs}
|
|
246
|
-
|
|
247
|
-
The default preset. Build and run:
|
|
248
|
-
|
|
249
|
-
```bash
|
|
250
|
-
npx @agent-native/core@latest build
|
|
251
|
-
node .output/server/index.mjs
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
Set `PORT` to configure the listen port (default: `3000`).
|
|
255
|
-
|
|
256
|
-
Use the current Node.js LTS line for production deploys. As of May 2026, that
|
|
257
|
-
is Node.js 24; Node.js 20 reached end-of-life on April 30, 2026 and no longer
|
|
258
|
-
receives upstream security updates.
|
|
259
|
-
|
|
260
|
-
### Docker {#docker}
|
|
261
|
-
|
|
262
|
-
```dockerfile
|
|
263
|
-
FROM node:24-slim AS build
|
|
264
|
-
WORKDIR /app
|
|
265
|
-
COPY package.json pnpm-lock.yaml ./
|
|
266
|
-
RUN corepack enable && pnpm install --frozen-lockfile
|
|
267
|
-
COPY . .
|
|
268
|
-
RUN pnpm build
|
|
269
|
-
|
|
270
|
-
FROM node:24-slim
|
|
271
|
-
WORKDIR /app
|
|
272
|
-
COPY --from=build /app/.output .output
|
|
273
|
-
# data/ is a runtime-created SQLite directory — do not copy a dev DB into prod.
|
|
274
|
-
# For production, set DATABASE_URL to a hosted Postgres or Turso instance.
|
|
275
|
-
RUN mkdir -p /app/data
|
|
276
|
-
ENV PORT=3000
|
|
277
|
-
EXPOSE 3000
|
|
278
|
-
CMD ["node", ".output/server/index.mjs"]
|
|
279
|
-
```
|
|
280
|
-
|
|
281
281
|
## Vercel {#vercel}
|
|
282
282
|
|
|
283
283
|
```ts
|
package/docs/content/faq.md
CHANGED
|
@@ -54,7 +54,7 @@ Yes. Pick any host that runs Node — Netlify, Vercel, Cloudflare, AWS, Deno Dep
|
|
|
54
54
|
|
|
55
55
|
### What AI models does it support? {#what-models}
|
|
56
56
|
|
|
57
|
-
Anthropic Claude, OpenAI (GPT-5 family), Google Gemini, and any provider that speaks the OpenAI API shape
|
|
57
|
+
Anthropic Claude, OpenAI (GPT-5 family), Google Gemini, and any provider that speaks the OpenAI API shape. For OpenAI-compatible gateways like LiteLLM, choose OpenAI in Settings and add the gateway URL under Advanced. You configure the model in settings; switching is a config change, not a code rewrite. The framework's heaviest tested path is Claude, so that's the default recommendation.
|
|
58
58
|
|
|
59
59
|
### Do I need to know AI/ML? {#do-i-need-to-know-ai}
|
|
60
60
|
|
package/docs/content/tracking.md
CHANGED
|
@@ -144,7 +144,6 @@ configureTracking({
|
|
|
144
144
|
endpoint: "https://analytics.example.com/api/analytics/track",
|
|
145
145
|
sessionReplay: {
|
|
146
146
|
enabled: true,
|
|
147
|
-
requireSignedInUser: true,
|
|
148
147
|
sampleRate: 0.1,
|
|
149
148
|
},
|
|
150
149
|
getDefaultProps: (_event, props) => ({
|
|
@@ -163,11 +162,12 @@ Agent Native template roots already call `configureTracking()`. Hosted template
|
|
|
163
162
|
VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY=anpk_...
|
|
164
163
|
VITE_AGENT_NATIVE_ANALYTICS_ENDPOINT=https://analytics.example.com/api/analytics/track
|
|
165
164
|
VITE_AGENT_NATIVE_SESSION_REPLAY_ENABLED=true
|
|
166
|
-
VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH=true
|
|
167
165
|
VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=0.1
|
|
168
166
|
```
|
|
169
167
|
|
|
170
|
-
The browser helper also performs a best-effort, non-blocking read of the current Agent Native auth session.
|
|
168
|
+
The browser helper also performs a best-effort, non-blocking read of the current Agent Native auth session. Replay is signed-in-only by default: when `sessionReplay` is enabled, recording does not start unless the session resolves to a user email address. Signed-in replays include email-backed `userId`/`userEmail` plus `orgId`.
|
|
169
|
+
|
|
170
|
+
Set `sessionReplay.requireSignedInUser: false` or `VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH=false` only for an intentional anonymous replay deployment. When auth gating is disabled, anonymous recordings remain queryable by anonymous visitor, session, app/template, hostname, and path.
|
|
171
171
|
|
|
172
172
|
Session replay is sampled deterministically per browser session. A `sampleRate` of `0.1` records about 10% of eligible sessions; use `1` when the eligible population is intentionally small, such as logged-in-only dogfooding.
|
|
173
173
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.79.
|
|
3
|
+
"version": "0.79.22",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|