@agent-native/core 0.68.3 → 0.70.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 +2 -2
- package/corpus/core/CHANGELOG.md +54 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/changelog/parse.ts +245 -0
- package/corpus/core/src/cli/changelog.ts +199 -0
- package/corpus/core/src/cli/index.ts +19 -0
- package/corpus/core/src/cli/recap.ts +24 -1
- package/corpus/core/src/cli/skills.ts +72 -45
- package/corpus/core/src/client/CommandMenu.tsx +183 -75
- package/corpus/core/src/client/agent-chat-adapter.ts +44 -7
- package/corpus/core/src/client/analytics.ts +181 -0
- package/corpus/core/src/client/changelog/Changelog.tsx +321 -0
- package/corpus/core/src/client/index.ts +11 -0
- package/corpus/core/src/client/mcp-apps/McpAppRenderer.tsx +54 -0
- package/corpus/core/src/client/settings/useBuilderStatus.ts +82 -20
- package/corpus/core/src/extensions/web-search-tool.ts +45 -4
- package/corpus/core/src/mcp/build-server.ts +1 -1
- package/corpus/core/src/mcp/embed-app.ts +112 -6
- package/corpus/core/src/secrets/register-framework-secrets.ts +7 -0
- package/corpus/core/src/server/attribution.ts +211 -0
- package/corpus/core/src/server/auth.ts +6 -0
- package/corpus/core/src/server/better-auth-instance.ts +49 -5
- package/corpus/core/src/server/builder-browser.ts +27 -1
- package/corpus/core/src/server/core-routes-plugin.ts +58 -0
- package/corpus/core/src/server/google-oauth.ts +19 -6
- package/corpus/core/src/shared/mcp-embed-headers.ts +1 -1
- package/corpus/core/src/styles/agent-conversation.css +21 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +111 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
- package/corpus/templates/analytics/CHANGELOG.md +10 -0
- package/corpus/templates/analytics/actions/install-dashboard-template.ts +2 -2
- package/corpus/templates/analytics/actions/open-traffic-dashboard.ts +1 -1
- package/corpus/templates/analytics/actions/update-dashboard.ts +5 -3
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +180 -144
- package/corpus/templates/analytics/app/components/layout/Header.tsx +2 -2
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -5
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +221 -213
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +6 -3
- package/corpus/templates/analytics/app/lib/demo-dashboard-path.ts +1 -1
- package/corpus/templates/analytics/app/lib/last-opened.ts +2 -1
- package/corpus/templates/analytics/app/pages/Settings.tsx +4 -0
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +3 -3
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +2 -2
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +101 -99
- package/corpus/templates/analytics/app/pages/overview/OverviewPage.tsx +1 -1
- package/corpus/templates/analytics/app/routes/adhoc.$id.tsx +18 -5
- package/corpus/templates/analytics/app/routes/catalog.tsx +1 -1
- package/corpus/templates/analytics/app/routes/dashboards.$id.tsx +9 -0
- package/corpus/templates/analytics/app/routes/traffic.tsx +1 -1
- package/corpus/templates/analytics/changelog/2026-06-23-the-dashboards-and-analyses-sidebar-settings-buttons-now-sta.md +6 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +145 -0
- package/corpus/templates/analytics/server/db/index.ts +1 -1
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +9 -2
- package/corpus/templates/analytics/server/lib/demo-dashboards.ts +1 -1
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +2 -2
- package/corpus/templates/analytics/server/plugins/core-routes.ts +6 -6
- package/corpus/templates/assets/CHANGELOG.md +10 -0
- package/corpus/templates/assets/app/root.tsx +7 -1
- package/corpus/templates/assets/app/routes/settings.tsx +6 -0
- package/corpus/templates/brain/CHANGELOG.md +10 -0
- package/corpus/templates/brain/app/root.tsx +7 -1
- package/corpus/templates/brain/app/routes/settings.tsx +8 -1
- package/corpus/templates/calendar/CHANGELOG.md +10 -0
- package/corpus/templates/calendar/app/pages/Settings.tsx +4 -0
- package/corpus/templates/calendar/app/root.tsx +7 -1
- package/corpus/templates/chat/CHANGELOG.md +10 -0
- package/corpus/templates/chat/app/root.tsx +7 -1
- package/corpus/templates/clips/CHANGELOG.md +10 -0
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +33 -7
- package/corpus/templates/clips/app/components/player/sign-in-prompt-dialog.tsx +8 -0
- package/corpus/templates/clips/app/components/player/video-player.tsx +150 -20
- package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +72 -20
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +69 -2
- package/corpus/templates/clips/app/components/sharing/slack-share-hint.tsx +71 -0
- package/corpus/templates/clips/app/lib/recorder-preferences.ts +67 -0
- package/corpus/templates/clips/app/root.tsx +7 -1
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +15 -1
- package/corpus/templates/clips/app/routes/_app.trash.tsx +21 -0
- package/corpus/templates/clips/app/routes/record.tsx +92 -8
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +86 -5
- package/corpus/templates/clips/changelog/2026-06-23-clips-shared-in-slack-no-longer-show-a-could-not-start-playb.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-made-the-play-button-on-shared-and-embedded-clips-scale-with.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-public-clip-share-links-now-show-whether-they-ll-play-inline.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-screen-camera-recordings-now-keep-the-presenter-s-face-in-th.md +6 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +20 -0
- package/corpus/templates/clips/desktop/src/main.tsx +3 -0
- package/corpus/templates/clips/desktop/src/overlays/region-record-border.tsx +76 -0
- package/corpus/templates/clips/desktop/src/styles.css +49 -0
- package/corpus/templates/clips/desktop/src-tauri/capabilities/default.json +2 -1
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +67 -1
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +2 -0
- package/corpus/templates/clips/desktop/src-tauri/src/util.rs +4 -1
- package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +51 -1
- package/corpus/templates/clips/shared/share-attribution.ts +79 -0
- package/corpus/templates/content/CHANGELOG.md +10 -0
- package/corpus/templates/content/app/root.tsx +7 -1
- package/corpus/templates/content/vitest.config.ts +3 -0
- package/corpus/templates/design/CHANGELOG.md +10 -0
- package/corpus/templates/design/actions/generate-design.ts +4 -0
- package/corpus/templates/design/app/root.tsx +7 -1
- package/corpus/templates/design/app/routes/settings.tsx +10 -2
- package/corpus/templates/dispatch/CHANGELOG.md +10 -0
- package/corpus/templates/dispatch/app/root.tsx +7 -1
- package/corpus/templates/forms/CHANGELOG.md +10 -0
- package/corpus/templates/forms/app/root.tsx +7 -1
- package/corpus/templates/macros/CHANGELOG.md +10 -0
- package/corpus/templates/macros/app/root.tsx +7 -1
- package/corpus/templates/mail/CHANGELOG.md +10 -0
- package/corpus/templates/mail/app/components/layout/CommandPalette.tsx +3 -0
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +27 -0
- package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +31 -17
- package/corpus/templates/plan/.agents/skills/visual-plan/references/wireframe.md +7 -4
- package/corpus/templates/plan/.agents/skills/visual-recap/SKILL.md +34 -24
- package/corpus/templates/plan/.agents/skills/visual-recap/references/wireframe.md +7 -4
- package/corpus/templates/plan/AGENTS.md +4 -0
- package/corpus/templates/plan/CHANGELOG.md +10 -0
- package/corpus/templates/plan/actions/view-screen.ts +5 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +98 -1
- package/corpus/templates/plan/app/pages/PlansPage.tsx +107 -7
- package/corpus/templates/plan/app/root.tsx +7 -1
- package/corpus/templates/plan/shared/share-attribution.ts +72 -0
- package/corpus/templates/slides/CHANGELOG.md +10 -0
- package/corpus/templates/slides/app/root.tsx +7 -1
- package/corpus/templates/videos/CHANGELOG.md +4 -151
- package/corpus/templates/videos/app/root.tsx +7 -1
- package/dist/changelog/parse.d.ts +70 -0
- package/dist/changelog/parse.d.ts.map +1 -0
- package/dist/changelog/parse.js +200 -0
- package/dist/changelog/parse.js.map +1 -0
- package/dist/cli/changelog.d.ts +4 -0
- package/dist/cli/changelog.d.ts.map +1 -0
- package/dist/cli/changelog.js +166 -0
- package/dist/cli/changelog.js.map +1 -0
- package/dist/cli/index.js +18 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/recap.d.ts.map +1 -1
- package/dist/cli/recap.js +22 -1
- package/dist/cli/recap.js.map +1 -1
- package/dist/cli/skills.d.ts +3 -3
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +72 -45
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/CommandMenu.d.ts +17 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +49 -13
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +43 -6
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/analytics.d.ts +18 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +177 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/changelog/Changelog.d.ts +47 -0
- package/dist/client/changelog/Changelog.d.ts.map +1 -0
- package/dist/client/changelog/Changelog.js +138 -0
- package/dist/client/changelog/Changelog.js.map +1 -0
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/mcp-apps/McpAppRenderer.d.ts +1 -0
- package/dist/client/mcp-apps/McpAppRenderer.d.ts.map +1 -1
- package/dist/client/mcp-apps/McpAppRenderer.js +42 -1
- package/dist/client/mcp-apps/McpAppRenderer.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +2 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +58 -10
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/extensions/web-search-tool.d.ts +5 -3
- package/dist/extensions/web-search-tool.d.ts.map +1 -1
- package/dist/extensions/web-search-tool.js +36 -4
- package/dist/extensions/web-search-tool.js.map +1 -1
- package/dist/mcp/build-server.js +1 -1
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/embed-app.d.ts.map +1 -1
- package/dist/mcp/embed-app.js +112 -6
- package/dist/mcp/embed-app.js.map +1 -1
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +6 -0
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/server/attribution.d.ts +83 -0
- package/dist/server/attribution.d.ts.map +1 -0
- package/dist/server/attribution.js +178 -0
- package/dist/server/attribution.js.map +1 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +7 -0
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +9 -1
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +32 -2
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/builder-browser.d.ts +4 -0
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +20 -1
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +25 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +38 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +16 -2
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/shared/mcp-embed-headers.js +1 -1
- package/dist/shared/mcp-embed-headers.js.map +1 -1
- package/dist/styles/agent-conversation.css +21 -0
- package/dist/templates/workspace-core/.agents/skills/changelog/SKILL.md +111 -0
- package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
- package/package.json +1 -1
- package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +111 -0
- package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
- /package/corpus/templates/analytics/app/routes/{dashboards.tsx → dashboards._index.tsx} +0 -0
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
IconLayoutDashboard,
|
|
17
17
|
IconSun,
|
|
18
18
|
IconMoon,
|
|
19
|
+
IconHistory,
|
|
19
20
|
} from "@tabler/icons-react";
|
|
20
21
|
import { useTheme } from "next-themes";
|
|
21
22
|
import { dashboards } from "@/pages/adhoc/registry";
|
|
@@ -25,8 +26,10 @@ import {
|
|
|
25
26
|
appApiPath,
|
|
26
27
|
callAction,
|
|
27
28
|
useChangeVersions,
|
|
29
|
+
ChangelogDialog,
|
|
28
30
|
} from "@agent-native/core/client";
|
|
29
31
|
import { extensionPath } from "@agent-native/core/client/extensions";
|
|
32
|
+
import changelog from "../../../CHANGELOG.md?raw";
|
|
30
33
|
import { commandPaletteKeywords } from "./command-palette-search";
|
|
31
34
|
|
|
32
35
|
interface SavedConfig {
|
|
@@ -47,11 +50,11 @@ interface ExtensionSearchItem {
|
|
|
47
50
|
}
|
|
48
51
|
|
|
49
52
|
const defaultTools = [
|
|
50
|
-
{ id: "explorer", name: "Explorer", href: "/
|
|
53
|
+
{ id: "explorer", name: "Explorer", href: "/dashboards/explorer" },
|
|
51
54
|
{
|
|
52
55
|
id: "customer-health",
|
|
53
56
|
name: "Customer Health",
|
|
54
|
-
href: "/
|
|
57
|
+
href: "/dashboards/customer-health",
|
|
55
58
|
},
|
|
56
59
|
];
|
|
57
60
|
|
|
@@ -181,6 +184,7 @@ function persistThemePreference(theme: "light" | "dark") {
|
|
|
181
184
|
|
|
182
185
|
export function CommandPalette() {
|
|
183
186
|
const [open, setOpen] = useState(false);
|
|
187
|
+
const [changelogOpen, setChangelogOpen] = useState(false);
|
|
184
188
|
const [searchQuery, setSearchQuery] = useState("");
|
|
185
189
|
const navigate = useNavigate();
|
|
186
190
|
const { resolvedTheme, setTheme } = useTheme();
|
|
@@ -263,168 +267,200 @@ export function CommandPalette() {
|
|
|
263
267
|
: sqlDashboards.filter((dashboard) => !dashboard.hiddenAt);
|
|
264
268
|
|
|
265
269
|
return (
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
d.
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
{
|
|
270
|
+
<>
|
|
271
|
+
<CommandDialog
|
|
272
|
+
open={open}
|
|
273
|
+
onOpenChange={(next) => {
|
|
274
|
+
setOpen(next);
|
|
275
|
+
if (!next) setSearchQuery("");
|
|
276
|
+
}}
|
|
277
|
+
>
|
|
278
|
+
<CommandInput
|
|
279
|
+
placeholder="Search dashboards, extensions, charts..."
|
|
280
|
+
value={searchQuery}
|
|
281
|
+
onValueChange={setSearchQuery}
|
|
282
|
+
/>
|
|
283
|
+
<CommandList>
|
|
284
|
+
{!asyncGroupsLoading && (
|
|
285
|
+
<CommandEmpty>No results found.</CommandEmpty>
|
|
286
|
+
)}
|
|
287
|
+
|
|
288
|
+
{explorerDashboardsFetching && explorerDashboards.length === 0 && (
|
|
289
|
+
<CommandLoadingGroup heading="Explorer Dashboards" rows={2} />
|
|
290
|
+
)}
|
|
291
|
+
|
|
292
|
+
{visibleExplorerDashboards.length > 0 && (
|
|
293
|
+
<CommandGroup heading="Explorer Dashboards">
|
|
294
|
+
{visibleExplorerDashboards.map((d) => (
|
|
295
|
+
<CommandItem
|
|
296
|
+
key={`ed-${d.id}`}
|
|
297
|
+
onSelect={() =>
|
|
298
|
+
go(`/dashboards/explorer-dashboard?id=${d.id}`)
|
|
299
|
+
}
|
|
300
|
+
keywords={commandPaletteKeywords(
|
|
301
|
+
d.name,
|
|
302
|
+
"explorer dashboard",
|
|
303
|
+
"dashboard",
|
|
304
|
+
)}
|
|
305
|
+
>
|
|
306
|
+
<IconLayoutDashboard className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
307
|
+
<span className="truncate">{d.name}</span>
|
|
308
|
+
{d.hiddenAt ? (
|
|
309
|
+
<span className="ml-2 rounded border border-border px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">
|
|
310
|
+
Hidden
|
|
311
|
+
</span>
|
|
312
|
+
) : null}
|
|
313
|
+
</CommandItem>
|
|
314
|
+
))}
|
|
315
|
+
</CommandGroup>
|
|
316
|
+
)}
|
|
317
|
+
|
|
318
|
+
{sqlDashboardsFetching && sqlDashboards.length === 0 && (
|
|
319
|
+
<CommandLoadingGroup heading="SQL Dashboards" rows={3} />
|
|
320
|
+
)}
|
|
321
|
+
|
|
322
|
+
{visibleSqlDashboards.length > 0 && (
|
|
323
|
+
<CommandGroup heading="SQL Dashboards">
|
|
324
|
+
{visibleSqlDashboards.map((d) => (
|
|
325
|
+
<CommandItem
|
|
326
|
+
key={`sql-${d.id}`}
|
|
327
|
+
onSelect={() => go(`/dashboards/${d.id}`)}
|
|
328
|
+
keywords={commandPaletteKeywords(
|
|
329
|
+
d.name,
|
|
330
|
+
"sql dashboard",
|
|
331
|
+
"dashboard",
|
|
332
|
+
)}
|
|
333
|
+
>
|
|
334
|
+
<IconLayoutDashboard className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
335
|
+
<span className="truncate">{d.name}</span>
|
|
336
|
+
{d.hiddenAt ? (
|
|
337
|
+
<span className="ml-2 rounded border border-border px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">
|
|
338
|
+
Hidden
|
|
339
|
+
</span>
|
|
340
|
+
) : null}
|
|
341
|
+
</CommandItem>
|
|
342
|
+
))}
|
|
343
|
+
</CommandGroup>
|
|
344
|
+
)}
|
|
345
|
+
|
|
346
|
+
{extensionsFetching && extensions.length === 0 && (
|
|
347
|
+
<CommandLoadingGroup heading="Extensions" rows={3} />
|
|
348
|
+
)}
|
|
349
|
+
|
|
350
|
+
{extensions.length > 0 && (
|
|
351
|
+
<CommandGroup heading="Extensions">
|
|
352
|
+
{extensions.map((extension) => (
|
|
353
|
+
<CommandItem
|
|
354
|
+
key={`extension-${extension.id}`}
|
|
355
|
+
onSelect={() =>
|
|
356
|
+
go(extensionPath(extension.id, extension.name))
|
|
357
|
+
}
|
|
358
|
+
keywords={commandPaletteKeywords(
|
|
359
|
+
extension.name,
|
|
360
|
+
extension.description,
|
|
361
|
+
"extension",
|
|
362
|
+
"tool",
|
|
363
|
+
)}
|
|
364
|
+
>
|
|
365
|
+
<IconTool className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
366
|
+
{extension.name}
|
|
367
|
+
</CommandItem>
|
|
368
|
+
))}
|
|
369
|
+
</CommandGroup>
|
|
370
|
+
)}
|
|
371
|
+
|
|
372
|
+
<CommandGroup heading="Dashboards">
|
|
373
|
+
{dashboards.map((d) => (
|
|
316
374
|
<CommandItem
|
|
317
|
-
key={`
|
|
318
|
-
onSelect={() => go(`/
|
|
319
|
-
keywords={commandPaletteKeywords(
|
|
320
|
-
d.name,
|
|
321
|
-
"sql dashboard",
|
|
322
|
-
"dashboard",
|
|
323
|
-
)}
|
|
375
|
+
key={`dash-${d.id}`}
|
|
376
|
+
onSelect={() => go(`/dashboards/${d.id}`)}
|
|
377
|
+
keywords={commandPaletteKeywords(d.name, "dashboard")}
|
|
324
378
|
>
|
|
325
|
-
<
|
|
326
|
-
|
|
327
|
-
{d.hiddenAt ? (
|
|
328
|
-
<span className="ml-2 rounded border border-border px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">
|
|
329
|
-
Hidden
|
|
330
|
-
</span>
|
|
331
|
-
) : null}
|
|
379
|
+
<IconFlask className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
380
|
+
{d.name}
|
|
332
381
|
</CommandItem>
|
|
333
382
|
))}
|
|
334
383
|
</CommandGroup>
|
|
335
|
-
)}
|
|
336
|
-
|
|
337
|
-
{extensionsFetching && extensions.length === 0 && (
|
|
338
|
-
<CommandLoadingGroup heading="Extensions" rows={3} />
|
|
339
|
-
)}
|
|
340
384
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
{extensions.map((extension) => (
|
|
385
|
+
<CommandGroup heading="Tools">
|
|
386
|
+
{defaultTools.map((t) => (
|
|
344
387
|
<CommandItem
|
|
345
|
-
key={`
|
|
346
|
-
onSelect={() => go(
|
|
347
|
-
keywords={commandPaletteKeywords(
|
|
348
|
-
extension.name,
|
|
349
|
-
extension.description,
|
|
350
|
-
"extension",
|
|
351
|
-
"tool",
|
|
352
|
-
)}
|
|
388
|
+
key={`tool-${t.id}`}
|
|
389
|
+
onSelect={() => go(t.href)}
|
|
390
|
+
keywords={commandPaletteKeywords(t.name, "tool")}
|
|
353
391
|
>
|
|
354
392
|
<IconTool className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
355
|
-
{
|
|
393
|
+
{t.name}
|
|
356
394
|
</CommandItem>
|
|
357
395
|
))}
|
|
358
396
|
</CommandGroup>
|
|
359
|
-
)}
|
|
360
397
|
|
|
361
|
-
|
|
362
|
-
{dashboards.map((d) => (
|
|
398
|
+
<CommandGroup heading="Appearance">
|
|
363
399
|
<CommandItem
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
400
|
+
onSelect={() => {
|
|
401
|
+
const nextTheme = isDark ? "light" : "dark";
|
|
402
|
+
setTheme(nextTheme);
|
|
403
|
+
persistThemePreference(nextTheme);
|
|
404
|
+
}}
|
|
405
|
+
keywords={["theme", "dark", "light", "mode"]}
|
|
367
406
|
>
|
|
368
|
-
|
|
369
|
-
|
|
407
|
+
{isDark ? (
|
|
408
|
+
<IconSun className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
409
|
+
) : (
|
|
410
|
+
<IconMoon className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
411
|
+
)}
|
|
412
|
+
Toggle {isDark ? "light" : "dark"} mode
|
|
370
413
|
</CommandItem>
|
|
371
|
-
|
|
372
|
-
</CommandGroup>
|
|
414
|
+
</CommandGroup>
|
|
373
415
|
|
|
374
|
-
|
|
375
|
-
{defaultTools.map((t) => (
|
|
416
|
+
<CommandGroup heading="Help">
|
|
376
417
|
<CommandItem
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
418
|
+
onSelect={() => {
|
|
419
|
+
setOpen(false);
|
|
420
|
+
setChangelogOpen(true);
|
|
421
|
+
}}
|
|
422
|
+
keywords={commandPaletteKeywords(
|
|
423
|
+
"What's new",
|
|
424
|
+
"changelog",
|
|
425
|
+
"updates",
|
|
426
|
+
"release notes",
|
|
427
|
+
"changes",
|
|
428
|
+
)}
|
|
380
429
|
>
|
|
381
|
-
<
|
|
382
|
-
|
|
430
|
+
<IconHistory className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
431
|
+
What's new
|
|
383
432
|
</CommandItem>
|
|
384
|
-
))}
|
|
385
|
-
</CommandGroup>
|
|
386
|
-
|
|
387
|
-
<CommandGroup heading="Appearance">
|
|
388
|
-
<CommandItem
|
|
389
|
-
onSelect={() => {
|
|
390
|
-
const nextTheme = isDark ? "light" : "dark";
|
|
391
|
-
setTheme(nextTheme);
|
|
392
|
-
persistThemePreference(nextTheme);
|
|
393
|
-
}}
|
|
394
|
-
keywords={["theme", "dark", "light", "mode"]}
|
|
395
|
-
>
|
|
396
|
-
{isDark ? (
|
|
397
|
-
<IconSun className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
398
|
-
) : (
|
|
399
|
-
<IconMoon className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
400
|
-
)}
|
|
401
|
-
Toggle {isDark ? "light" : "dark"} mode
|
|
402
|
-
</CommandItem>
|
|
403
|
-
</CommandGroup>
|
|
404
|
-
|
|
405
|
-
{savedChartsFetching && savedCharts.length === 0 && (
|
|
406
|
-
<CommandLoadingGroup heading="Saved Charts" rows={2} />
|
|
407
|
-
)}
|
|
408
|
-
|
|
409
|
-
{savedCharts.length > 0 && (
|
|
410
|
-
<CommandGroup heading="Saved Charts">
|
|
411
|
-
{savedCharts.map((c) => (
|
|
412
|
-
<CommandItem
|
|
413
|
-
key={`chart-${c.id}`}
|
|
414
|
-
onSelect={() => go(`/adhoc/explorer?config=${c.id}`)}
|
|
415
|
-
keywords={commandPaletteKeywords(
|
|
416
|
-
c.name,
|
|
417
|
-
"saved chart",
|
|
418
|
-
"chart",
|
|
419
|
-
)}
|
|
420
|
-
>
|
|
421
|
-
<IconChartBar className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
422
|
-
{c.name}
|
|
423
|
-
</CommandItem>
|
|
424
|
-
))}
|
|
425
433
|
</CommandGroup>
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
434
|
+
|
|
435
|
+
{savedChartsFetching && savedCharts.length === 0 && (
|
|
436
|
+
<CommandLoadingGroup heading="Saved Charts" rows={2} />
|
|
437
|
+
)}
|
|
438
|
+
|
|
439
|
+
{savedCharts.length > 0 && (
|
|
440
|
+
<CommandGroup heading="Saved Charts">
|
|
441
|
+
{savedCharts.map((c) => (
|
|
442
|
+
<CommandItem
|
|
443
|
+
key={`chart-${c.id}`}
|
|
444
|
+
onSelect={() => go(`/dashboards/explorer?config=${c.id}`)}
|
|
445
|
+
keywords={commandPaletteKeywords(
|
|
446
|
+
c.name,
|
|
447
|
+
"saved chart",
|
|
448
|
+
"chart",
|
|
449
|
+
)}
|
|
450
|
+
>
|
|
451
|
+
<IconChartBar className="mr-2 h-4 w-4 text-muted-foreground" />
|
|
452
|
+
{c.name}
|
|
453
|
+
</CommandItem>
|
|
454
|
+
))}
|
|
455
|
+
</CommandGroup>
|
|
456
|
+
)}
|
|
457
|
+
</CommandList>
|
|
458
|
+
</CommandDialog>
|
|
459
|
+
<ChangelogDialog
|
|
460
|
+
open={changelogOpen}
|
|
461
|
+
onOpenChange={setChangelogOpen}
|
|
462
|
+
markdown={changelog}
|
|
463
|
+
/>
|
|
464
|
+
</>
|
|
429
465
|
);
|
|
430
466
|
}
|
|
@@ -15,7 +15,7 @@ const pageTitles: Record<string, string> = {
|
|
|
15
15
|
"/data-dictionary": "Data Dictionary",
|
|
16
16
|
"/catalog": "Template Catalog",
|
|
17
17
|
"/analyses": "Analyses",
|
|
18
|
-
"/
|
|
18
|
+
"/dashboards/explorer": "Explorer",
|
|
19
19
|
"/team": "Team",
|
|
20
20
|
"/settings": "Settings",
|
|
21
21
|
"/about": "About",
|
|
@@ -24,7 +24,7 @@ const pageTitles: Record<string, string> = {
|
|
|
24
24
|
function resolveTitle(pathname: string): ReactNode {
|
|
25
25
|
if (pageTitles[pathname]) return pageTitles[pathname];
|
|
26
26
|
|
|
27
|
-
const adhocMatch = pathname.match(/^\/adhoc\/(.+)$/);
|
|
27
|
+
const adhocMatch = pathname.match(/^\/(?:adhoc|dashboards)\/(.+)$/);
|
|
28
28
|
if (adhocMatch) {
|
|
29
29
|
const id = adhocMatch[1];
|
|
30
30
|
const dash = dashboards.find((d) => d.id === id);
|
|
@@ -29,12 +29,14 @@ export function Layout({ children }: LayoutProps) {
|
|
|
29
29
|
const navigate = useNavigate();
|
|
30
30
|
|
|
31
31
|
// Analytics has two distinct "primary resources" — dashboards
|
|
32
|
-
// (`/adhoc/:id`) and ad-hoc analyses
|
|
33
|
-
// chat to that artifact so a dashboard
|
|
34
|
-
// different analysis (and vice versa). The list
|
|
35
|
-
// leave scope null so general data questions still work.
|
|
32
|
+
// (`/dashboards/:id`, legacy `/adhoc/:id`) and ad-hoc analyses
|
|
33
|
+
// (`/analyses/:id`). Each binds the chat to that artifact so a dashboard
|
|
34
|
+
// chat doesn't leak into a different analysis (and vice versa). The list
|
|
35
|
+
// pages and overview leave scope null so general data questions still work.
|
|
36
36
|
const analyticsScope = useMemo(() => {
|
|
37
|
-
const dashMatch = location.pathname.match(
|
|
37
|
+
const dashMatch = location.pathname.match(
|
|
38
|
+
/^\/(?:adhoc|dashboards)\/([^/]+)/,
|
|
39
|
+
);
|
|
38
40
|
if (dashMatch?.[1]) {
|
|
39
41
|
return { type: "dashboard" as const, id: dashMatch[1] };
|
|
40
42
|
}
|