@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.
Files changed (139) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/CHANGELOG.md +17 -0
  3. package/corpus/templates/analytics/actions/get-sql-dashboard.ts +27 -3
  4. package/corpus/templates/analytics/app/components/AnalyticsReviewArtifactPreview.tsx +8 -2
  5. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +14 -10
  6. package/corpus/templates/analytics/app/root.tsx +2 -4
  7. package/corpus/templates/analytics/app/routes/_index.tsx +1 -36
  8. package/corpus/templates/analytics/app/routes/home.tsx +1 -1
  9. package/corpus/templates/analytics/changelog/2026-09-25-human-review-previews-show-same-organization-dashboard-chart.md +6 -0
  10. package/corpus/templates/analytics/changelog/2026-09-25-human-review-skips-saved-bigquery-queries-in-previews.md +6 -0
  11. package/corpus/templates/analytics/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
  12. package/corpus/templates/analytics/server/lib/dashboards-store.ts +14 -0
  13. package/corpus/templates/analytics/server/plugins/auth.ts +0 -3
  14. package/corpus/templates/assets/CHANGELOG.md +16 -0
  15. package/corpus/templates/assets/app/root.tsx +2 -7
  16. package/corpus/templates/assets/app/routes/_index.tsx +1 -36
  17. package/corpus/templates/assets/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
  18. package/corpus/templates/assets/server/plugins/auth.ts +0 -3
  19. package/corpus/templates/brain/app/root.tsx +2 -13
  20. package/corpus/templates/brain/app/routes/_index.tsx +1 -35
  21. package/corpus/templates/brain/app/routes/home.tsx +1 -1
  22. package/corpus/templates/calendar/CHANGELOG.md +15 -0
  23. package/corpus/templates/calendar/app/root.tsx +2 -10
  24. package/corpus/templates/calendar/app/routes/_index.tsx +1 -34
  25. package/corpus/templates/calendar/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
  26. package/corpus/templates/calendar/server/plugins/auth.ts +0 -3
  27. package/corpus/templates/chat/AGENTS.md +3 -3
  28. package/corpus/templates/chat/app/root.tsx +3 -15
  29. package/corpus/templates/chat/app/routes/_index.tsx +1 -37
  30. package/corpus/templates/chat/server/plugins/auth.ts +0 -3
  31. package/corpus/templates/clips/CHANGELOG.md +10 -0
  32. package/corpus/templates/clips/app/root.tsx +2 -10
  33. package/corpus/templates/clips/app/routes/_index.tsx +1 -33
  34. package/corpus/templates/clips/app/routes/share.$shareId.tsx +2 -3
  35. package/corpus/templates/clips/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
  36. package/corpus/templates/clips/server/plugins/auth.ts +0 -3
  37. package/corpus/templates/content/app/root.tsx +2 -3
  38. package/corpus/templates/content/app/routes/_index.tsx +1 -33
  39. package/corpus/templates/content/server/plugins/auth.ts +0 -3
  40. package/corpus/templates/crm/app/root.tsx +3 -16
  41. package/corpus/templates/crm/app/routes/_index.tsx +1 -36
  42. package/corpus/templates/crm/app/routes/home.tsx +1 -1
  43. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +30 -17
  44. package/corpus/templates/design/CHANGELOG.md +31 -0
  45. package/corpus/templates/design/actions/connect-localhost.ts +98 -37
  46. package/corpus/templates/design/actions/get-design.schema.ts +10 -0
  47. package/corpus/templates/design/actions/get-design.ts +25 -6
  48. package/corpus/templates/design/actions/publish-visual-edit-pending.ts +4 -59
  49. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +108 -49
  50. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +63 -21
  51. package/corpus/templates/design/app/components/design/types.ts +2 -0
  52. package/corpus/templates/design/app/pages/design-editor/commands/cross-screen-element-drop.ts +98 -9
  53. package/corpus/templates/design/app/pages/design-editor/commands/cross-screen-insert-timeout.ts +61 -6
  54. package/corpus/templates/design/app/pages/design-editor/commands/mode-change.ts +6 -5
  55. package/corpus/templates/design/app/pages/design-editor/commands/publish-visual-edit-pending.ts +21 -3
  56. package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +4 -7
  57. package/corpus/templates/design/app/root.tsx +2 -20
  58. package/corpus/templates/design/app/routes/_index.tsx +1 -34
  59. package/corpus/templates/design/changelog/2026-09-25-fix-live-visual-edit-recovery-handoff-and-interaction-workfl.md +6 -0
  60. package/corpus/templates/design/changelog/2026-09-25-human-review-previews-show-the-actual-design-when-you-have-o.md +6 -0
  61. package/corpus/templates/design/changelog/2026-09-25-live-screens-recover-safely-from-interrupted-cross-screen-mo.md +6 -0
  62. package/corpus/templates/design/changelog/2026-09-26-canvas-focus-stays-on-toolbar-controls-when-a-live-preview-f.md +6 -0
  63. package/corpus/templates/design/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
  64. package/corpus/templates/design/server/plugins/auth.ts +0 -3
  65. package/corpus/templates/dispatch/app/root.tsx +2 -11
  66. package/corpus/templates/dispatch/app/routes/_index.tsx +1 -34
  67. package/corpus/templates/dispatch/server/plugins/setup-dispatch.ts +0 -3
  68. package/corpus/templates/factory/app/root.tsx +3 -15
  69. package/corpus/templates/factory/app/routes/_index.tsx +1 -34
  70. package/corpus/templates/factory/app/routes/home.tsx +1 -1
  71. package/corpus/templates/forms/AGENTS.md +1 -1
  72. package/corpus/templates/forms/app/root.tsx +2 -4
  73. package/corpus/templates/forms/app/routes/_index.tsx +1 -34
  74. package/corpus/templates/forms/server/plugins/auth.ts +0 -3
  75. package/corpus/templates/mail/CHANGELOG.md +8 -0
  76. package/corpus/templates/mail/app/root.tsx +2 -6
  77. package/corpus/templates/mail/app/routes/_index.tsx +1 -36
  78. package/corpus/templates/mail/app/routes/home.tsx +1 -1
  79. package/corpus/templates/mail/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
  80. package/corpus/templates/mail/server/plugins/auth.ts +0 -3
  81. package/corpus/templates/plan/app/root.tsx +7 -13
  82. package/corpus/templates/plan/app/routes/_index.tsx +1 -35
  83. package/corpus/templates/plan/app/routes/home.tsx +1 -1
  84. package/corpus/templates/plan/server/plugins/auth.ts +0 -3
  85. package/corpus/templates/slides/CHANGELOG.md +21 -0
  86. package/corpus/templates/slides/actions/get-deck.ts +49 -12
  87. package/corpus/templates/slides/app/root.tsx +1 -3
  88. package/corpus/templates/slides/app/routes/_index.tsx +1 -36
  89. package/corpus/templates/slides/app/routes/home.tsx +1 -1
  90. package/corpus/templates/slides/changelog/2026-09-25-human-review-previews-show-same-organization-slides-for-orga.md +6 -0
  91. package/corpus/templates/slides/changelog/2026-09-26-the-app-entry-now-opens-the-shared-sign-in-and-sign-up-scree.md +6 -0
  92. package/corpus/templates/slides/server/plugins/auth.ts +0 -3
  93. package/corpus/templates/tasks/AGENTS.md +1 -1
  94. package/corpus/templates/tasks/README.md +1 -1
  95. package/corpus/templates/tasks/app/root.tsx +2 -11
  96. package/corpus/templates/tasks/app/routes/_index.tsx +1 -37
  97. package/corpus/templates/tasks/app/routes/home.tsx +1 -1
  98. package/dist/cli/design-connect.d.ts +1 -0
  99. package/dist/cli/design-connect.js +94 -32
  100. package/dist/client/auth/AuthPage.d.ts +1 -17
  101. package/dist/client/auth/AuthPage.js +7 -49
  102. package/dist/client/observability/OutputPreview.js +8 -2
  103. package/dist/client/sign-in-landing.d.ts +1 -0
  104. package/dist/client/sign-in-landing.js +8 -0
  105. package/dist/collab/awareness.d.ts +2 -2
  106. package/dist/deploy/workspace-deploy.js +32 -8
  107. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  108. package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
  109. package/dist/provider-api/actions/provider-api.d.ts +3 -3
  110. package/dist/server/auth-marketing.d.ts +0 -7
  111. package/dist/server/auth-marketing.js +0 -36
  112. package/dist/server/auth.d.ts +1 -10
  113. package/dist/server/index.d.ts +1 -1
  114. package/dist/server/index.js +1 -1
  115. package/dist/server/onboarding-html.d.ts +1 -12
  116. package/dist/server/onboarding-html.js +4 -817
  117. package/dist/shared/ssr-auth-redirect.d.ts +3 -3
  118. package/dist/shared/ssr-auth-redirect.js +4 -4
  119. package/dist/templates/chat/AGENTS.md +3 -3
  120. package/dist/templates/chat/app/root.tsx +3 -15
  121. package/dist/templates/chat/app/routes/_index.tsx +1 -37
  122. package/dist/templates/chat/server/plugins/auth.ts +0 -3
  123. package/dist/templates/default/AGENTS.md +2 -4
  124. package/dist/templates/default/DEVELOPING.md +3 -5
  125. package/dist/templates/default/app/root.tsx +2 -9
  126. package/dist/templates/default/app/routes/_index.tsx +8 -15
  127. package/package.json +5 -4
  128. package/src/templates/chat/AGENTS.md +3 -3
  129. package/src/templates/chat/app/root.tsx +3 -15
  130. package/src/templates/chat/app/routes/_index.tsx +1 -37
  131. package/src/templates/chat/server/plugins/auth.ts +0 -3
  132. package/src/templates/default/AGENTS.md +2 -4
  133. package/src/templates/default/DEVELOPING.md +3 -5
  134. package/src/templates/default/app/root.tsx +2 -9
  135. package/src/templates/default/app/routes/_index.tsx +8 -15
  136. package/dist/server/auth-marketing-locales.d.ts +0 -9
  137. package/dist/server/auth-marketing-locales.js +0 -1322
  138. package/dist/templates/chat/public/auth-marketing/chat.webp +0 -0
  139. package/src/templates/chat/public/auth-marketing/chat.webp +0 -0
package/corpus/README.md CHANGED
@@ -31,4 +31,4 @@ rg -n "defineAction|useActionQuery" node_modules/@agent-native/core/corpus
31
31
 
32
32
  ## Generated Counts
33
33
 
34
- - template files: 10122
34
+ - template files: 10136
@@ -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 { getDashboard } from "../server/lib/dashboards-store";
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
- const dash = await getDashboard(args.id, ctx);
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) => panel.chartType !== "section" && panel.chartType !== "extension",
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 (!loadData || isLoading || isFetching) {
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
- <Button
1424
- type="button"
1425
- variant="secondary"
1426
- size="sm"
1427
- onClick={() => void refetch()}
1428
- >
1429
- <IconRefresh className="mr-2 h-3.5 w-3.5" />
1430
- {t("sqlDashboard.refresh")}
1431
- </Button>
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). See the status routes and the
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 || isMarketingPath) {
148
+ if (isPublicStatusPath) {
151
149
  return (
152
150
  <AppToolkitProvider>
153
151
  <AppProviders
@@ -1,36 +1 @@
1
- import { appPath } from "@agent-native/core/client/api-path";
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; / serves the public marketing page.
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
  }
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-09-25
4
+ ---
5
+
6
+ Human Review previews show same-organization dashboard charts for organization admins.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: security
3
+ date: 2026-09-25
4
+ ---
5
+
6
+ Human Review previews do not run saved dashboard queries
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: changed
3
+ date: 2026-09-26
4
+ ---
5
+
6
+ The app entry now opens the shared sign-in and sign-up screen instead of a separate marketing page.
@@ -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
- isPublicPath={isMarketingPath}
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
- {isMarketingPath ? <Outlet /> : <AppContent />}
190
+ <AppContent />
196
191
  </AppProviders>
197
192
  </AppToolkitProvider>
198
193
  );
@@ -1,36 +1 @@
1
- import { appPath } from "@agent-native/core/client/api-path";
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";
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: changed
3
+ date: 2026-09-26
4
+ ---
5
+
6
+ The app entry now opens the shared sign-in and sign-up screen instead of a separate marketing page.
@@ -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
- {isMarketingPath ? (
238
- <Outlet />
239
- ) : (
240
- <>
241
- <DbSyncSetup />
242
- <AppContent />
243
- </>
244
- )}
232
+ <DbSyncSetup />
233
+ <AppContent />
245
234
  </AppProviders>
246
235
  </AppToolkitProvider>
247
236
  );
@@ -1,35 +1 @@
1
- import { appPath } from "@agent-native/core/client/api-path";
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; / serves the public marketing page.
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 isMarketingHome = location.pathname === "/";
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
- <AppContent />
309
+ <PrivateAppContent />
318
310
  </AppProviders>
319
311
  </AppToolkitProvider>
320
312
  );
@@ -1,34 +1 @@
1
- import { appPath } from "@agent-native/core/client/api-path";
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";
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: changed
3
+ date: 2026-09-26
4
+ ---
5
+
6
+ The app entry now opens the shared sign-in and sign-up screen instead of a separate marketing page.
@@ -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 is a marketing
4
- surface; the authenticated chat app starts at `/home`. Actions carry the real
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`; `/` is the public SSR marketing page.
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
- queryClient={queryClient}
176
- isPublicPath={isMarketingPath}
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
  );