@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
package/corpus/README.md
CHANGED
|
@@ -3,14 +3,23 @@
|
|
|
3
3
|
All notable user-facing changes to Agent-Native Analytics are documented here. Open it any
|
|
4
4
|
time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
5
5
|
|
|
6
|
+
## 2026-09-26
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- The app entry now opens the shared sign-in and sign-up screen instead of a separate marketing page.
|
|
11
|
+
|
|
6
12
|
## 2026-09-25
|
|
7
13
|
|
|
8
14
|
### Added
|
|
9
15
|
|
|
16
|
+
- Analytics learns confirmed metric definitions and query corrections from completed chats.
|
|
10
17
|
- Org admins can review agent runs from Settings
|
|
11
18
|
|
|
12
19
|
### Improved
|
|
13
20
|
|
|
21
|
+
- Analytics captures confirmed query guidance for future conversations
|
|
22
|
+
- Public status pages, dashboards, and analyses show resource details in link previews
|
|
14
23
|
- The chat composer keeps a consistent background while AI setup is open.
|
|
15
24
|
- First-run onboarding records setup choices and Builder connection outcomes
|
|
16
25
|
- Human review previews Analytics dashboards as real charts
|
|
@@ -18,8 +27,16 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
18
27
|
|
|
19
28
|
### Fixed
|
|
20
29
|
|
|
30
|
+
- Archived dashboards no longer appear in public link previews
|
|
31
|
+
- Human Review previews show same-organization dashboard charts for organization admins.
|
|
32
|
+
- Show one recent prompt per chat turn.
|
|
21
33
|
- Opening Settings no longer opens the chat sidebar.
|
|
22
34
|
|
|
35
|
+
### Security
|
|
36
|
+
|
|
37
|
+
- Analytics provider credentials stay scoped to their configured endpoints
|
|
38
|
+
- Human Review previews do not run saved dashboard queries
|
|
39
|
+
|
|
23
40
|
## 2026-09-24
|
|
24
41
|
|
|
25
42
|
### Improved
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { defineAction, embedApp } from "@agent-native/core";
|
|
1
|
+
import { defineAction, embedApp, fail } from "@agent-native/core";
|
|
2
2
|
import {
|
|
3
|
+
currentRequestUserIsOrgAdmin,
|
|
3
4
|
getRequestUserEmail,
|
|
4
5
|
getRequestOrgId,
|
|
5
6
|
buildDeepLink,
|
|
@@ -12,7 +13,10 @@ import {
|
|
|
12
13
|
} from "../server/lib/agent-readable-resource-context";
|
|
13
14
|
import { repairKnownFirstPartyDashboardQueries } from "../server/lib/canonical-first-party-dashboard-repair";
|
|
14
15
|
import { loadDashboardSeed } from "../server/lib/dashboard-seeds";
|
|
15
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
getDashboard,
|
|
18
|
+
getOrgDashboardForReview,
|
|
19
|
+
} from "../server/lib/dashboards-store";
|
|
16
20
|
|
|
17
21
|
export default defineAction({
|
|
18
22
|
description:
|
|
@@ -25,6 +29,12 @@ export default defineAction({
|
|
|
25
29
|
.describe(
|
|
26
30
|
"If true, include the full dashboard config including panel SQL. Defaults to false to keep agent context compact.",
|
|
27
31
|
),
|
|
32
|
+
reviewPreview: z
|
|
33
|
+
.boolean()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe(
|
|
36
|
+
"Human Review only: read a dashboard in the current organization. Requires an organization owner or admin.",
|
|
37
|
+
),
|
|
28
38
|
}),
|
|
29
39
|
http: { method: "GET" },
|
|
30
40
|
readOnly: true,
|
|
@@ -61,7 +71,21 @@ export default defineAction({
|
|
|
61
71
|
const orgId = getRequestOrgId() || null;
|
|
62
72
|
const ctx = { email, orgId };
|
|
63
73
|
|
|
64
|
-
|
|
74
|
+
let dash;
|
|
75
|
+
if (args.reviewPreview) {
|
|
76
|
+
if (!orgId || !(await currentRequestUserIsOrgAdmin(orgId))) {
|
|
77
|
+
fail(
|
|
78
|
+
"Only organization owners and admins can preview reviewed dashboards.",
|
|
79
|
+
{ statusCode: 403 },
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
dash = await getOrgDashboardForReview(args.id, orgId);
|
|
83
|
+
} else {
|
|
84
|
+
dash = await getDashboard(args.id, ctx);
|
|
85
|
+
}
|
|
86
|
+
if (args.reviewPreview && (!dash || dash.kind !== "sql")) {
|
|
87
|
+
fail("Dashboard not found.", { statusCode: 404 });
|
|
88
|
+
}
|
|
65
89
|
if (!dash || dash.kind !== "sql") {
|
|
66
90
|
const seed = loadDashboardSeed(args.id);
|
|
67
91
|
if (seed) {
|
|
@@ -132,7 +132,11 @@ export function firstReviewDashboardPanel(
|
|
|
132
132
|
...panels.filter((panel) => !preferredIds.includes(panel.id)),
|
|
133
133
|
];
|
|
134
134
|
return ordered.find(
|
|
135
|
-
(panel) =>
|
|
135
|
+
(panel) =>
|
|
136
|
+
panel.source !== "demo" &&
|
|
137
|
+
panel.source !== "program" &&
|
|
138
|
+
panel.chartType !== "section" &&
|
|
139
|
+
panel.chartType !== "extension",
|
|
136
140
|
);
|
|
137
141
|
}
|
|
138
142
|
|
|
@@ -146,7 +150,7 @@ export function AnalyticsReviewArtifactPreview({
|
|
|
146
150
|
const t = useT();
|
|
147
151
|
const { data, isLoading, isError } = useActionQuery<Record<string, unknown>>(
|
|
148
152
|
"get-sql-dashboard",
|
|
149
|
-
{ id: artifactId, includeConfig: true },
|
|
153
|
+
{ id: artifactId, includeConfig: true, reviewPreview: true },
|
|
150
154
|
{ staleTime: 5 * 60_000 },
|
|
151
155
|
);
|
|
152
156
|
const panel = firstReviewDashboardPanel(data);
|
|
@@ -194,6 +198,8 @@ export function AnalyticsReviewArtifactPreview({
|
|
|
194
198
|
panel={panel}
|
|
195
199
|
resolvedSql={resolvedSql}
|
|
196
200
|
timeRange={timeRangeDays(vars.timeRange)}
|
|
201
|
+
loadData={false}
|
|
202
|
+
showLoadingWhenDisabled={false}
|
|
197
203
|
dashboardId={artifactId}
|
|
198
204
|
/>
|
|
199
205
|
</div>
|
|
@@ -1267,6 +1267,7 @@ interface SqlChartProps {
|
|
|
1267
1267
|
resolvedSql?: string;
|
|
1268
1268
|
className?: string;
|
|
1269
1269
|
loadData?: boolean;
|
|
1270
|
+
showLoadingWhenDisabled?: boolean;
|
|
1270
1271
|
timeRange?: number;
|
|
1271
1272
|
reportScreenshot?: boolean;
|
|
1272
1273
|
onExportCsvChange?: (handler: (() => void) | null) => void;
|
|
@@ -1281,6 +1282,7 @@ export function SqlChart({
|
|
|
1281
1282
|
panel,
|
|
1282
1283
|
resolvedSql,
|
|
1283
1284
|
loadData = true,
|
|
1285
|
+
showLoadingWhenDisabled = true,
|
|
1284
1286
|
timeRange,
|
|
1285
1287
|
reportScreenshot = false,
|
|
1286
1288
|
onExportCsvChange,
|
|
@@ -1407,7 +1409,7 @@ export function SqlChart({
|
|
|
1407
1409
|
: "min-h-[250px]";
|
|
1408
1410
|
const placeholderPadY = isMetric ? "py-2" : "py-8";
|
|
1409
1411
|
|
|
1410
|
-
if (
|
|
1412
|
+
if (isLoading || isFetching || (!loadData && showLoadingWhenDisabled)) {
|
|
1411
1413
|
return <SqlChartLoadingSkeleton panel={panel} />;
|
|
1412
1414
|
}
|
|
1413
1415
|
|
|
@@ -1420,15 +1422,17 @@ export function SqlChart({
|
|
|
1420
1422
|
<p className="text-center text-sm text-destructive break-words">
|
|
1421
1423
|
{formatSqlChartError(error)}
|
|
1422
1424
|
</p>
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1425
|
+
{loadData ? (
|
|
1426
|
+
<Button
|
|
1427
|
+
type="button"
|
|
1428
|
+
variant="secondary"
|
|
1429
|
+
size="sm"
|
|
1430
|
+
onClick={() => void refetch()}
|
|
1431
|
+
>
|
|
1432
|
+
<IconRefresh className="mr-2 h-3.5 w-3.5" />
|
|
1433
|
+
{t("sqlDashboard.refresh")}
|
|
1434
|
+
</Button>
|
|
1435
|
+
) : null}
|
|
1432
1436
|
</div>
|
|
1433
1437
|
);
|
|
1434
1438
|
}
|
|
@@ -141,13 +141,11 @@ export default function Root() {
|
|
|
141
141
|
const location = useLocation();
|
|
142
142
|
|
|
143
143
|
// Public, unauthenticated routes render SSR-first without the authenticated
|
|
144
|
-
// app chrome (sidebar/chat/command palette).
|
|
145
|
-
// `/` workspace-app public path in server/plugins/auth.ts.
|
|
144
|
+
// app chrome (sidebar/chat/command palette).
|
|
146
145
|
const isPublicStatusPath =
|
|
147
146
|
location.pathname === "/status" || location.pathname.startsWith("/status/");
|
|
148
|
-
const isMarketingPath = location.pathname === "/";
|
|
149
147
|
|
|
150
|
-
if (isPublicStatusPath
|
|
148
|
+
if (isPublicStatusPath) {
|
|
151
149
|
return (
|
|
152
150
|
<AppToolkitProvider>
|
|
153
151
|
<AppProviders
|
|
@@ -1,36 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { MarketingHome } from "@agent-native/toolkit/marketing";
|
|
3
|
-
|
|
4
|
-
const SEO_TITLE =
|
|
5
|
-
"Analytics - Open Source Alternative to Amplitude & FullStory";
|
|
6
|
-
const SEO_DESCRIPTION =
|
|
7
|
-
"Open Source analytics app and alternative to Amplitude and FullStory where AI agents connect to warehouses, product analytics, and CRM data to answer questions and build dashboards.";
|
|
8
|
-
|
|
9
|
-
export function meta() {
|
|
10
|
-
return [
|
|
11
|
-
{ title: SEO_TITLE },
|
|
12
|
-
{ name: "description", content: SEO_DESCRIPTION },
|
|
13
|
-
{ property: "og:title", content: SEO_TITLE },
|
|
14
|
-
{ property: "og:description", content: SEO_DESCRIPTION },
|
|
15
|
-
{ name: "twitter:card", content: "summary" },
|
|
16
|
-
{ name: "twitter:title", content: SEO_TITLE },
|
|
17
|
-
{ name: "twitter:description", content: SEO_DESCRIPTION },
|
|
18
|
-
];
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export default function MarketingHomeRoute() {
|
|
22
|
-
return (
|
|
23
|
-
<MarketingHome
|
|
24
|
-
appName="Analytics"
|
|
25
|
-
tagline="Your AI agent queries your data sources, builds dashboards, and answers business questions alongside you."
|
|
26
|
-
description={SEO_DESCRIPTION}
|
|
27
|
-
valueProps={[
|
|
28
|
-
"Ask questions across BigQuery, HubSpot, Jira, and more",
|
|
29
|
-
"Build dashboards from live data across your sources",
|
|
30
|
-
"Re-run saved analyses with fresh numbers",
|
|
31
|
-
]}
|
|
32
|
-
primaryActionHref={appPath("/home")}
|
|
33
|
-
secondaryActionHref={appPath("/sign-in")}
|
|
34
|
-
/>
|
|
35
|
-
);
|
|
36
|
-
}
|
|
1
|
+
export { signInLandingLoader as loader } from "@agent-native/core/client/sign-in-landing";
|
|
@@ -33,7 +33,7 @@ export function clientLoader({ url }: LoaderFunctionArgs) {
|
|
|
33
33
|
throw withSsrHtmlContentType(redirect(target(url)), { varyByQuery: true });
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
// Private app entry retained at /home; /
|
|
36
|
+
// Private app entry retained at /home; / redirects to shared sign-in/signup.
|
|
37
37
|
export default function IndexRoute() {
|
|
38
38
|
return null;
|
|
39
39
|
}
|
|
@@ -862,6 +862,20 @@ export async function getDashboard(
|
|
|
862
862
|
);
|
|
863
863
|
}
|
|
864
864
|
|
|
865
|
+
export async function getOrgDashboardForReview(
|
|
866
|
+
id: string,
|
|
867
|
+
orgId: string,
|
|
868
|
+
): Promise<DashboardRecord | null> {
|
|
869
|
+
const [row] = await getDb()
|
|
870
|
+
.select()
|
|
871
|
+
.from(schema.dashboards)
|
|
872
|
+
.where(
|
|
873
|
+
and(eq(schema.dashboards.id, id), eq(schema.dashboards.orgId, orgId)),
|
|
874
|
+
)
|
|
875
|
+
.limit(1);
|
|
876
|
+
return row ? rowToDashboard(row, "viewer") : null;
|
|
877
|
+
}
|
|
878
|
+
|
|
865
879
|
export async function getPublicDashboardMetadata(id: string) {
|
|
866
880
|
const config = sql`case
|
|
867
881
|
when ${schema.dashboards.config} is json
|
|
@@ -41,9 +41,6 @@ const authPlugin = createAuthPlugin({
|
|
|
41
41
|
publicCorsPaths: ["/track", "/api/analytics/track", "/api/analytics/replay"],
|
|
42
42
|
marketing: {
|
|
43
43
|
appName: "Analytics",
|
|
44
|
-
screenshotPath: "/auth-marketing/analytics.webp",
|
|
45
|
-
screenshotWidth: 927,
|
|
46
|
-
screenshotHeight: 818,
|
|
47
44
|
learnMoreUrl: "https://agent-native.com/apps/analytics",
|
|
48
45
|
tagline:
|
|
49
46
|
"Your AI agent queries your data sources, builds dashboards, and answers business questions alongside you.",
|
|
@@ -3,6 +3,22 @@
|
|
|
3
3
|
All notable user-facing changes to Assets are documented here. Open it any
|
|
4
4
|
time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
5
5
|
|
|
6
|
+
## 2026-09-26
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- The app entry now opens the shared sign-in and sign-up screen instead of a separate marketing page.
|
|
11
|
+
|
|
12
|
+
## 2026-09-25
|
|
13
|
+
|
|
14
|
+
### Improved
|
|
15
|
+
|
|
16
|
+
- Public asset library links show their title and description in previews.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Public previews no longer show archived asset library details
|
|
21
|
+
|
|
6
22
|
## 2026-09-24
|
|
7
23
|
|
|
8
24
|
### Added
|
|
@@ -180,19 +180,14 @@ function AppContent() {
|
|
|
180
180
|
|
|
181
181
|
export default function Root() {
|
|
182
182
|
const [queryClient] = useState(() => createAgentNativeQueryClient());
|
|
183
|
-
const location = useLocation();
|
|
184
|
-
const isMarketingPath = location.pathname === "/";
|
|
185
183
|
return (
|
|
186
184
|
<AppToolkitProvider>
|
|
187
185
|
<AppProviders
|
|
188
186
|
queryClient={queryClient}
|
|
189
|
-
|
|
190
|
-
toaster={
|
|
191
|
-
isMarketingPath ? null : <Toaster richColors position="bottom-left" />
|
|
192
|
-
}
|
|
187
|
+
toaster={<Toaster richColors position="bottom-left" />}
|
|
193
188
|
i18n={{ catalog: i18nCatalog }}
|
|
194
189
|
>
|
|
195
|
-
|
|
190
|
+
<AppContent />
|
|
196
191
|
</AppProviders>
|
|
197
192
|
</AppToolkitProvider>
|
|
198
193
|
);
|
|
@@ -1,36 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { MarketingHome } from "@agent-native/toolkit/marketing";
|
|
3
|
-
|
|
4
|
-
const SEO_TITLE =
|
|
5
|
-
"Assets - Open Source AI asset library for brand-safe images and video";
|
|
6
|
-
const SEO_DESCRIPTION =
|
|
7
|
-
"Open Source asset manager for AI teams to organize brand libraries, search creative work, and generate on-brand images and videos.";
|
|
8
|
-
|
|
9
|
-
export function meta() {
|
|
10
|
-
return [
|
|
11
|
-
{ title: SEO_TITLE },
|
|
12
|
-
{ name: "description", content: SEO_DESCRIPTION },
|
|
13
|
-
{ property: "og:title", content: SEO_TITLE },
|
|
14
|
-
{ property: "og:description", content: SEO_DESCRIPTION },
|
|
15
|
-
{ name: "twitter:card", content: "summary" },
|
|
16
|
-
{ name: "twitter:title", content: SEO_TITLE },
|
|
17
|
-
{ name: "twitter:description", content: SEO_DESCRIPTION },
|
|
18
|
-
];
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export default function MarketingHomeRoute() {
|
|
22
|
-
return (
|
|
23
|
-
<MarketingHome
|
|
24
|
-
appName="Assets"
|
|
25
|
-
tagline="Your AI agent creates, refines, and organizes on-brand assets alongside you."
|
|
26
|
-
description={SEO_DESCRIPTION}
|
|
27
|
-
valueProps={[
|
|
28
|
-
"Build reusable libraries from logos, product shots, videos, and references",
|
|
29
|
-
"Generate heroes, diagrams, product visuals, and videos from a prompt",
|
|
30
|
-
"Audit prompts, references, outputs, and refinements across every run",
|
|
31
|
-
]}
|
|
32
|
-
primaryActionHref={appPath("/home")}
|
|
33
|
-
secondaryActionHref={appPath("/sign-in")}
|
|
34
|
-
/>
|
|
35
|
-
);
|
|
36
|
-
}
|
|
1
|
+
export { signInLandingLoader as loader } from "@agent-native/core/client/sign-in-landing";
|
|
@@ -4,9 +4,6 @@ export default createAuthPlugin({
|
|
|
4
4
|
workspaceAppPublicPaths: ["/"],
|
|
5
5
|
marketing: {
|
|
6
6
|
appName: "Assets",
|
|
7
|
-
screenshotPath: "/auth-marketing/assets.webp",
|
|
8
|
-
screenshotWidth: 914,
|
|
9
|
-
screenshotHeight: 818,
|
|
10
7
|
learnMoreUrl: "https://agent-native.com/apps/assets",
|
|
11
8
|
tagline:
|
|
12
9
|
"Your AI agent creates, refines, and organizes on-brand assets alongside you.",
|
|
@@ -21,7 +21,6 @@ import {
|
|
|
21
21
|
Outlet,
|
|
22
22
|
Scripts,
|
|
23
23
|
ScrollRestoration,
|
|
24
|
-
useLocation,
|
|
25
24
|
useNavigate,
|
|
26
25
|
} from "react-router";
|
|
27
26
|
import type { LinksFunction } from "react-router";
|
|
@@ -223,25 +222,15 @@ export default function Root() {
|
|
|
223
222
|
},
|
|
224
223
|
}),
|
|
225
224
|
);
|
|
226
|
-
const location = useLocation();
|
|
227
|
-
const isMarketingPath = location.pathname === "/";
|
|
228
|
-
|
|
229
225
|
return (
|
|
230
226
|
<AppToolkitProvider>
|
|
231
227
|
<AppProviders
|
|
232
228
|
queryClient={queryClient}
|
|
233
|
-
isPublicPath={isMarketingPath}
|
|
234
229
|
tooltipDelayDuration={250}
|
|
235
230
|
i18n={{ catalog: i18nCatalog }}
|
|
236
231
|
>
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
) : (
|
|
240
|
-
<>
|
|
241
|
-
<DbSyncSetup />
|
|
242
|
-
<AppContent />
|
|
243
|
-
</>
|
|
244
|
-
)}
|
|
232
|
+
<DbSyncSetup />
|
|
233
|
+
<AppContent />
|
|
245
234
|
</AppProviders>
|
|
246
235
|
</AppToolkitProvider>
|
|
247
236
|
);
|
|
@@ -1,35 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { MarketingHome } from "@agent-native/toolkit/marketing";
|
|
3
|
-
|
|
4
|
-
const SEO_TITLE = "Brain - Open Source company knowledge base for AI agents";
|
|
5
|
-
const SEO_DESCRIPTION =
|
|
6
|
-
"Open Source company knowledge base that turns Slack, meetings, transcripts, docs, and decisions into cited answers for AI agents.";
|
|
7
|
-
|
|
8
|
-
export function meta() {
|
|
9
|
-
return [
|
|
10
|
-
{ title: SEO_TITLE },
|
|
11
|
-
{ name: "description", content: SEO_DESCRIPTION },
|
|
12
|
-
{ property: "og:title", content: SEO_TITLE },
|
|
13
|
-
{ property: "og:description", content: SEO_DESCRIPTION },
|
|
14
|
-
{ name: "twitter:card", content: "summary" },
|
|
15
|
-
{ name: "twitter:title", content: SEO_TITLE },
|
|
16
|
-
{ name: "twitter:description", content: SEO_DESCRIPTION },
|
|
17
|
-
];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export default function MarketingHomeRoute() {
|
|
21
|
-
return (
|
|
22
|
-
<MarketingHome
|
|
23
|
-
appName="Brain"
|
|
24
|
-
tagline="A company knowledge layer where raw conversations become reviewed, searchable institutional knowledge."
|
|
25
|
-
description={SEO_DESCRIPTION}
|
|
26
|
-
valueProps={[
|
|
27
|
-
"Import transcripts, notes, Slack exports, and meeting summaries",
|
|
28
|
-
"Validate every fact against exact source quotes",
|
|
29
|
-
"Review company knowledge through proposal workflows",
|
|
30
|
-
]}
|
|
31
|
-
primaryActionHref={appPath("/home")}
|
|
32
|
-
secondaryActionHref={appPath("/sign-in")}
|
|
33
|
-
/>
|
|
34
|
-
);
|
|
35
|
-
}
|
|
1
|
+
export { signInLandingLoader as loader } from "@agent-native/core/client/sign-in-landing";
|
|
@@ -25,7 +25,7 @@ export function meta() {
|
|
|
25
25
|
];
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
// Private app entry retained at /home; /
|
|
28
|
+
// Private app entry retained at /home; / redirects to shared sign-in/signup.
|
|
29
29
|
export default function AskRoute() {
|
|
30
30
|
const t = useT();
|
|
31
31
|
const { status: builderStatus, stale: builderStatusStale } =
|
|
@@ -3,14 +3,29 @@
|
|
|
3
3
|
All notable user-facing changes to Agent-Native Calendar are documented here. Open it any
|
|
4
4
|
time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
5
5
|
|
|
6
|
+
## 2026-09-26
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- The app entry now opens the shared sign-in and sign-up screen instead of a separate marketing page.
|
|
11
|
+
|
|
6
12
|
## 2026-09-25
|
|
7
13
|
|
|
8
14
|
### Added
|
|
9
15
|
|
|
10
16
|
- Add Jev invitation rules for auto-accept, auto-decline, and auto-hide with automation status.
|
|
11
17
|
|
|
18
|
+
### Improved
|
|
19
|
+
|
|
20
|
+
- If Zoom cannot confirm a meeting, Calendar keeps the booking and follows up with meeting details
|
|
21
|
+
- Public booking links show their title, description, and duration in previews.
|
|
22
|
+
|
|
12
23
|
### Fixed
|
|
13
24
|
|
|
25
|
+
- Calendar rule Undo stays consistent during RSVP updates, and one failed event no longer blocks later activity.
|
|
26
|
+
- Gong requests keep legacy credentials paired with their saved API endpoint
|
|
27
|
+
- Reserved bookings reach Google Calendar when Zoom fails, and guests can retry when meeting creation never started.
|
|
28
|
+
- Invitation rules continue scanning after a single RSVP lookup fails
|
|
14
29
|
- Booking links without a meeting type now show a not-found page.
|
|
15
30
|
- Personal booking pages use the host's saved timezone for availability.
|
|
16
31
|
- Booking link previews now show their image in browser-based link preview tools
|
|
@@ -208,12 +208,6 @@ function isAgentNativeDesktop(): boolean {
|
|
|
208
208
|
);
|
|
209
209
|
}
|
|
210
210
|
|
|
211
|
-
function AppContent() {
|
|
212
|
-
const location = useLocation();
|
|
213
|
-
if (location.pathname === "/") return <Outlet />;
|
|
214
|
-
return <PrivateAppContent />;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
211
|
function PrivateAppContent() {
|
|
218
212
|
const [cmdkOpen, setCmdkOpen] = useState(false);
|
|
219
213
|
const navigate = useNavigate();
|
|
@@ -295,9 +289,7 @@ export default function Root() {
|
|
|
295
289
|
);
|
|
296
290
|
const location = useLocation();
|
|
297
291
|
const loaderData = useLoaderData<typeof loader>();
|
|
298
|
-
const
|
|
299
|
-
const isPublicPath =
|
|
300
|
-
isMarketingHome || isPublicBookingPath(location.pathname);
|
|
292
|
+
const isPublicPath = isPublicBookingPath(location.pathname);
|
|
301
293
|
|
|
302
294
|
return (
|
|
303
295
|
<AppToolkitProvider>
|
|
@@ -314,7 +306,7 @@ export default function Root() {
|
|
|
314
306
|
persistPreference: !isPublicPath,
|
|
315
307
|
}}
|
|
316
308
|
>
|
|
317
|
-
<
|
|
309
|
+
<PrivateAppContent />
|
|
318
310
|
</AppProviders>
|
|
319
311
|
</AppToolkitProvider>
|
|
320
312
|
);
|
|
@@ -1,34 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { MarketingHome } from "@agent-native/toolkit/marketing";
|
|
3
|
-
|
|
4
|
-
const SEO_TITLE =
|
|
5
|
-
"Calendar - Open Source AI scheduling and Google Calendar automation";
|
|
6
|
-
const SEO_DESCRIPTION =
|
|
7
|
-
"Open Source AI calendar app for Google Calendar scheduling, booking links, meeting coordination, and agent-managed event updates.";
|
|
8
|
-
|
|
9
|
-
export function meta() {
|
|
10
|
-
return [
|
|
11
|
-
{ title: SEO_TITLE },
|
|
12
|
-
{
|
|
13
|
-
name: "description",
|
|
14
|
-
content: SEO_DESCRIPTION,
|
|
15
|
-
},
|
|
16
|
-
{ property: "og:title", content: SEO_TITLE },
|
|
17
|
-
{ property: "og:description", content: SEO_DESCRIPTION },
|
|
18
|
-
{ name: "twitter:card", content: "summary" },
|
|
19
|
-
{ name: "twitter:title", content: SEO_TITLE },
|
|
20
|
-
{ name: "twitter:description", content: SEO_DESCRIPTION },
|
|
21
|
-
];
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export default function MarketingHomeRoute() {
|
|
25
|
-
return (
|
|
26
|
-
<MarketingHome
|
|
27
|
-
appName="Calendar"
|
|
28
|
-
tagline={SEO_TITLE}
|
|
29
|
-
description={SEO_DESCRIPTION}
|
|
30
|
-
primaryActionHref={appPath("/home")}
|
|
31
|
-
secondaryActionHref={appPath("/sign-in")}
|
|
32
|
-
/>
|
|
33
|
-
);
|
|
34
|
-
}
|
|
1
|
+
export { signInLandingLoader as loader } from "@agent-native/core/client/sign-in-landing";
|
|
@@ -10,9 +10,6 @@ export default createAuthPlugin({
|
|
|
10
10
|
workspaceAppPublicPaths: ["/"],
|
|
11
11
|
marketing: {
|
|
12
12
|
appName: "Calendar",
|
|
13
|
-
screenshotPath: "/auth-marketing/calendar.webp",
|
|
14
|
-
screenshotWidth: 914,
|
|
15
|
-
screenshotHeight: 818,
|
|
16
13
|
learnMoreUrl: "https://agent-native.com/apps/calendar",
|
|
17
14
|
tagline:
|
|
18
15
|
"Your AI agent schedules, reschedules, and manages your calendar so you never have to.",
|
|
@@ -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
|
);
|