@agent-native/core 0.69.0 → 0.70.1
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/README.md +15 -15
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +109 -0
- package/corpus/core/docs/design/durable-agent-runs.md +217 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/action.ts +89 -0
- package/corpus/core/src/agent/model-config.ts +0 -2
- package/corpus/core/src/agent/run-loop-with-resume.ts +48 -0
- 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 +74 -47
- package/corpus/core/src/client/AgentPanel.tsx +5 -3
- package/corpus/core/src/client/AssistantChat.tsx +8 -0
- 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/client-surface.ts +41 -0
- package/corpus/core/src/client/composer/TiptapComposer.tsx +123 -12
- package/corpus/core/src/client/feedback-context.ts +4 -0
- package/corpus/core/src/client/index.ts +12 -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/client/sse-event-processor.ts +7 -1
- package/corpus/core/src/mcp/build-server.ts +57 -1
- package/corpus/core/src/mcp/embed-app.ts +197 -7
- package/corpus/core/src/mcp/oauth-route.ts +109 -13
- 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 +136 -0
- package/corpus/core/src/server/google-oauth.ts +19 -6
- package/corpus/core/src/server/onboarding-html.ts +35 -0
- 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/reliable-mutations/SKILL.md +72 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +22 -0
- package/corpus/templates/analytics/AGENTS.md +8 -1
- package/corpus/templates/analytics/CHANGELOG.md +10 -0
- package/corpus/templates/analytics/actions/install-dashboard-template.ts +99 -4
- package/corpus/templates/analytics/actions/open-traffic-dashboard.ts +1 -1
- package/corpus/templates/analytics/actions/update-dashboard.ts +39 -8
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +30 -3
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +180 -144
- package/corpus/templates/analytics/app/components/layout/Header.tsx +2 -3
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -5
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +221 -215
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +6 -6
- 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/SqlChartCard.tsx +32 -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-long-dashboard-and-analysis-names-in-the-sidebar-now-truncat.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-23-open-any-dashboard-chart-full-screen-in-a-modal-from-the-pan.md +6 -0
- 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/actions/generate-image.ts +24 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/assets/app/global.css +17 -1
- package/corpus/templates/assets/app/root.tsx +7 -1
- package/corpus/templates/assets/app/routes/_index.tsx +94 -14
- package/corpus/templates/assets/app/routes/settings.tsx +6 -0
- package/corpus/templates/assets/changelog/2026-06-23-chat-dates-in-the-sidebar-no-longer-wrap-onto-two-lines.md +6 -0
- package/corpus/templates/assets/changelog/2026-06-23-clicking-image-video-or-refine-on-the-start-screen-now-drops.md +6 -0
- package/corpus/templates/assets/changelog/2026-06-23-pick-your-image-generation-model-right-from-the-chat-model-m.md +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/library/library-grid.tsx +1 -20
- 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/countdown-overlay.tsx +72 -48
- package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +7 -11
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +31 -0
- package/corpus/templates/clips/app/components/sharing/slack-share-hint.tsx +71 -0
- package/corpus/templates/clips/app/lib/countdown-audio-cue.ts +35 -17
- 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/record.tsx +78 -5
- 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-removed-select-button-from-library-hover-a-clip-to-select-it.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/changelog/2026-06-23-shared-video-links-now-play-for-anyone-without-signing-in.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-skip-or-cancel-the-recording-countdown-with-buttons-beside-t.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-the-desktop-camera-bubble-now-looks-sharp-the-instant-it-ope.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-the-desktop-recording-widget-now-grows-downward-only-when-yo.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-the-recording-start-sound-is-now-a-softer-more-modern-chime.md +6 -0
- package/corpus/templates/clips/chrome-extension/public/manifest.json +17 -8
- package/corpus/templates/clips/chrome-extension/src/background.ts +769 -180
- package/corpus/templates/clips/chrome-extension/src/content-script.ts +177 -0
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +466 -329
- package/corpus/templates/clips/chrome-extension/src/overlay.css +377 -0
- package/corpus/templates/clips/chrome-extension/src/overlay.html +12 -0
- package/corpus/templates/clips/chrome-extension/src/overlay.ts +330 -0
- package/corpus/templates/clips/chrome-extension/src/permission.html +227 -0
- package/corpus/templates/clips/chrome-extension/src/permission.ts +105 -0
- package/corpus/templates/clips/chrome-extension/src/popup.html +3 -0
- package/corpus/templates/clips/chrome-extension/src/popup.ts +50 -2
- package/corpus/templates/clips/chrome-extension/src/styles.css +50 -0
- package/corpus/templates/clips/chrome-extension/vite.config.ts +3 -0
- package/corpus/templates/clips/desktop/src/lib/audio-cue.ts +41 -24
- package/corpus/templates/clips/desktop/src/lib/bubble-webrtc.ts +119 -2
- 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/countdown.tsx +21 -2
- package/corpus/templates/clips/desktop/src/overlays/region-record-border.tsx +76 -0
- package/corpus/templates/clips/desktop/src/styles.css +119 -2
- package/corpus/templates/clips/desktop/src-tauri/capabilities/default.json +2 -1
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +140 -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 +85 -6
- package/corpus/templates/clips/shared/share-attribution.ts +79 -0
- package/corpus/templates/content/AGENTS.md +20 -3
- package/corpus/templates/content/CHANGELOG.md +10 -0
- package/corpus/templates/content/actions/_database-utils.ts +15 -0
- package/corpus/templates/content/actions/_property-utils.ts +371 -4
- package/corpus/templates/content/actions/configure-document-property.ts +35 -1
- package/corpus/templates/content/actions/create-content-database.ts +5 -1
- package/corpus/templates/content/actions/delete-document-property.ts +52 -2
- package/corpus/templates/content/actions/duplicate-document-property.ts +34 -17
- package/corpus/templates/content/actions/reorder-document-property.ts +79 -0
- package/corpus/templates/content/actions/set-document-property.ts +39 -0
- package/corpus/templates/content/app/components/editor/DocumentBlockFields.tsx +806 -0
- package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +226 -68
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +59 -30
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +25 -1
- package/corpus/templates/content/app/components/editor/blockFieldSaveController.ts +180 -0
- package/corpus/templates/content/app/components/editor/blockFieldSaveRegistry.ts +179 -0
- package/corpus/templates/content/app/components/editor/previewDocumentSaveController.ts +244 -0
- package/corpus/templates/content/app/components/editor/previewDocumentSaveRegistry.ts +132 -0
- package/corpus/templates/content/app/global.css +9 -0
- package/corpus/templates/content/app/hooks/use-document-properties.ts +21 -0
- package/corpus/templates/content/app/root.tsx +7 -1
- package/corpus/templates/content/server/db/schema.ts +30 -0
- package/corpus/templates/content/server/plugins/db.ts +87 -0
- package/corpus/templates/content/shared/api.ts +7 -0
- package/corpus/templates/content/shared/properties.ts +109 -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/.agents/skills/form-responses/SKILL.md +10 -0
- package/corpus/templates/forms/CHANGELOG.md +10 -0
- package/corpus/templates/forms/actions/export-responses.ts +6 -0
- package/corpus/templates/forms/actions/list-responses.ts +2 -0
- package/corpus/templates/forms/actions/response-insights.ts +2 -0
- package/corpus/templates/forms/app/pages/ResponsesPage.tsx +138 -1
- package/corpus/templates/forms/app/root.tsx +7 -1
- package/corpus/templates/forms/changelog/2026-06-23-response-tables-now-show-the-page-each-submission-came-from-.md +6 -0
- package/corpus/templates/forms/changelog/2026-06-23-response-tables-now-show-whether-feedback-came-from-the-web-.md +6 -0
- package/corpus/templates/forms/server/db/schema.ts +7 -0
- package/corpus/templates/forms/server/handlers/submissions.ts +19 -2
- package/corpus/templates/forms/server/lib/integrations.ts +76 -2
- package/corpus/templates/forms/server/plugins/db.ts +20 -0
- package/corpus/templates/forms/shared/types.ts +12 -0
- 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/components/plan/wireframe/html-artboard.css +3 -1
- package/corpus/templates/plan/app/pages/PlansPage.tsx +107 -7
- package/corpus/templates/plan/app/root.tsx +7 -1
- package/corpus/templates/plan/changelog/2026-06-23-large-diagrams-in-a-plan-now-scroll-within-their-block-inste.md +6 -0
- 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/action.js +87 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/model-config.d.ts +2 -2
- package/dist/agent/model-config.d.ts.map +1 -1
- package/dist/agent/model-config.js +0 -2
- package/dist/agent/model-config.js.map +1 -1
- package/dist/agent/run-loop-with-resume.d.ts +13 -0
- package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
- package/dist/agent/run-loop-with-resume.js +44 -0
- package/dist/agent/run-loop-with-resume.js.map +1 -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 +74 -47
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +5 -3
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +6 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +2 -2
- package/dist/client/AssistantChat.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/client-surface.d.ts +17 -0
- package/dist/client/client-surface.d.ts.map +1 -0
- package/dist/client/client-surface.js +24 -0
- package/dist/client/client-surface.js.map +1 -0
- package/dist/client/composer/TiptapComposer.d.ts +26 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +27 -5
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/feedback-context.d.ts +3 -0
- package/dist/client/feedback-context.d.ts.map +1 -1
- package/dist/client/feedback-context.js +2 -0
- package/dist/client/feedback-context.js.map +1 -1
- package/dist/client/index.d.ts +3 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -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/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +7 -1
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/mcp/build-server.d.ts +21 -0
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +43 -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 +197 -7
- package/dist/mcp/embed-app.js.map +1 -1
- package/dist/mcp/oauth-route.d.ts.map +1 -1
- package/dist/mcp/oauth-route.js +95 -12
- package/dist/mcp/oauth-route.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 +101 -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/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +35 -0
- package/dist/server/onboarding-html.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/reliable-mutations/SKILL.md +72 -0
- package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
- package/docs/design/durable-agent-runs.md +217 -0
- package/package.json +1 -1
- package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +111 -0
- package/src/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +72 -0
- package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
- package/corpus/templates/analytics/app/pages/About.tsx +0 -108
- package/corpus/templates/analytics/app/routes/about.tsx +0 -9
- /package/corpus/templates/analytics/app/routes/{dashboards.tsx → dashboards._index.tsx} +0 -0
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
IconChevronDown,
|
|
17
17
|
IconSun,
|
|
18
18
|
IconMoon,
|
|
19
|
-
IconInfoCircle,
|
|
20
19
|
IconTrash,
|
|
21
20
|
IconDots,
|
|
22
21
|
IconLoader2,
|
|
@@ -146,7 +145,6 @@ import { CSS } from "@dnd-kit/utilities";
|
|
|
146
145
|
const bottomItems = [
|
|
147
146
|
{ icon: IconUsers, label: "Team", href: "/team" },
|
|
148
147
|
{ icon: IconSettings, label: "Settings", href: "/settings" },
|
|
149
|
-
{ icon: IconInfoCircle, label: "About", href: "/about" },
|
|
150
148
|
];
|
|
151
149
|
|
|
152
150
|
function getStoredBoolean(key: string, fallback: boolean): boolean {
|
|
@@ -236,7 +234,7 @@ function SidebarSectionSettingsPopover({
|
|
|
236
234
|
<PopoverTrigger asChild>
|
|
237
235
|
<button
|
|
238
236
|
type="button"
|
|
239
|
-
className="flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground/65 transition-all hover:bg-sidebar-accent hover:text-foreground focus:outline-none focus:ring-2 focus:ring-ring"
|
|
237
|
+
className="flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground/65 opacity-0 transition-all hover:bg-sidebar-accent hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring group-hover/section:opacity-100 data-[state=open]:opacity-100"
|
|
240
238
|
aria-label={`${label} settings`}
|
|
241
239
|
>
|
|
242
240
|
<IconSettings className="h-3.5 w-3.5" />
|
|
@@ -734,7 +732,7 @@ function SortableDashboardItem({
|
|
|
734
732
|
visibility: Visibility,
|
|
735
733
|
) => Promise<void>;
|
|
736
734
|
}) {
|
|
737
|
-
const href = `/
|
|
735
|
+
const href = `/dashboards/${d.id}`;
|
|
738
736
|
const { mutateAsync: deleteView } = useDeleteDashboardView();
|
|
739
737
|
const [deletingViewId, setDeletingViewId] = useState<string | null>(null);
|
|
740
738
|
|
|
@@ -1337,7 +1335,7 @@ export function Sidebar({ mobile }: { mobile?: boolean } = {}) {
|
|
|
1337
1335
|
);
|
|
1338
1336
|
|
|
1339
1337
|
const activeDashboardId = useMemo(() => {
|
|
1340
|
-
const match = location.pathname.match(/^\/adhoc\/([^/]+)/);
|
|
1338
|
+
const match = location.pathname.match(/^\/(?:adhoc|dashboards)\/([^/]+)/);
|
|
1341
1339
|
if (!match?.[1]) return null;
|
|
1342
1340
|
return new URLSearchParams(location.search).get("id") || match[1];
|
|
1343
1341
|
}, [location.pathname, location.search]);
|
|
@@ -1830,7 +1828,9 @@ export function Sidebar({ mobile }: { mobile?: boolean } = {}) {
|
|
|
1830
1828
|
[sidebarWidth],
|
|
1831
1829
|
);
|
|
1832
1830
|
|
|
1833
|
-
const isAdhocActive =
|
|
1831
|
+
const isAdhocActive =
|
|
1832
|
+
location.pathname.startsWith("/adhoc") ||
|
|
1833
|
+
location.pathname.startsWith("/dashboards");
|
|
1834
1834
|
|
|
1835
1835
|
return (
|
|
1836
1836
|
<div
|
|
@@ -1945,227 +1945,233 @@ export function Sidebar({ mobile }: { mobile?: boolean } = {}) {
|
|
|
1945
1945
|
</Link>
|
|
1946
1946
|
|
|
1947
1947
|
{/* Dashboards section */}
|
|
1948
|
-
<div
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
<button
|
|
1957
|
-
type="button"
|
|
1958
|
-
onClick={toggleDashOpen}
|
|
1959
|
-
className="flex min-w-0 flex-1 items-center gap-3 px-3 py-2 text-left"
|
|
1960
|
-
aria-expanded={dashOpen}
|
|
1961
|
-
>
|
|
1962
|
-
<IconChartBar className="h-4 w-4 shrink-0" />
|
|
1963
|
-
<span className="min-w-0 flex-1 truncate">Dashboards</span>
|
|
1964
|
-
</button>
|
|
1965
|
-
<SidebarSectionSettingsPopover
|
|
1966
|
-
label="Dashboards"
|
|
1967
|
-
sortMode={dashboardSortMode}
|
|
1968
|
-
onSortModeChange={setDashboardSortMode}
|
|
1969
|
-
sharedOnly={dashFilter === "org"}
|
|
1970
|
-
onSharedOnlyChange={(checked) =>
|
|
1971
|
-
setDashFilter(checked ? "org" : "all")
|
|
1972
|
-
}
|
|
1973
|
-
/>
|
|
1974
|
-
<button
|
|
1975
|
-
type="button"
|
|
1976
|
-
onClick={toggleDashOpen}
|
|
1977
|
-
className="mr-1 flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-sidebar-accent hover:text-foreground"
|
|
1978
|
-
aria-label={
|
|
1979
|
-
dashOpen ? "Collapse dashboards" : "Expand dashboards"
|
|
1980
|
-
}
|
|
1948
|
+
<div className="group/section min-w-0 space-y-1">
|
|
1949
|
+
<div
|
|
1950
|
+
className={cn(
|
|
1951
|
+
"flex w-full min-w-0 items-center rounded-lg transition-all hover:text-primary",
|
|
1952
|
+
isAdhocActive
|
|
1953
|
+
? "text-sidebar-accent-foreground"
|
|
1954
|
+
: "text-muted-foreground hover:bg-sidebar-accent/50",
|
|
1955
|
+
)}
|
|
1981
1956
|
>
|
|
1982
|
-
<
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1957
|
+
<button
|
|
1958
|
+
type="button"
|
|
1959
|
+
onClick={toggleDashOpen}
|
|
1960
|
+
className="flex min-w-0 flex-1 items-center gap-3 px-3 py-2 text-left"
|
|
1961
|
+
aria-expanded={dashOpen}
|
|
1962
|
+
>
|
|
1963
|
+
<IconChartBar className="h-4 w-4 shrink-0" />
|
|
1964
|
+
<span className="min-w-0 flex-1 truncate">Dashboards</span>
|
|
1965
|
+
</button>
|
|
1966
|
+
<SidebarSectionSettingsPopover
|
|
1967
|
+
label="Dashboards"
|
|
1968
|
+
sortMode={dashboardSortMode}
|
|
1969
|
+
onSortModeChange={setDashboardSortMode}
|
|
1970
|
+
sharedOnly={dashFilter === "org"}
|
|
1971
|
+
onSharedOnlyChange={(checked) =>
|
|
1972
|
+
setDashFilter(checked ? "org" : "all")
|
|
1973
|
+
}
|
|
1987
1974
|
/>
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
onDragEnd={handleDashboardDragEnd}
|
|
1996
|
-
>
|
|
1997
|
-
<SortableContext
|
|
1998
|
-
items={displayedDashboards.map((d) => d.id)}
|
|
1999
|
-
strategy={verticalListSortingStrategy}
|
|
1975
|
+
<button
|
|
1976
|
+
type="button"
|
|
1977
|
+
onClick={toggleDashOpen}
|
|
1978
|
+
className="mr-1 flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-sidebar-accent hover:text-foreground"
|
|
1979
|
+
aria-label={
|
|
1980
|
+
dashOpen ? "Collapse dashboards" : "Expand dashboards"
|
|
1981
|
+
}
|
|
2000
1982
|
>
|
|
2001
|
-
<
|
|
2002
|
-
{
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
d={d}
|
|
2006
|
-
isActive={activeDashboardId === d.id}
|
|
2007
|
-
location={location}
|
|
2008
|
-
favoriteIds={favoriteIds}
|
|
2009
|
-
onToggleFavorite={toggleFavorite}
|
|
2010
|
-
onDelete={handleDashboardDelete}
|
|
2011
|
-
onRename={handleDashboardRename}
|
|
2012
|
-
onArchive={handleDashboardArchive}
|
|
2013
|
-
onSetVisibility={handleDashboardSetVisibility}
|
|
2014
|
-
onPrefetch={prefetchDashboard}
|
|
2015
|
-
views={allViewsMap[d.id]}
|
|
2016
|
-
/>
|
|
2017
|
-
))}
|
|
2018
|
-
{filteredDashboards.length > SIDEBAR_PREVIEW_COUNT && (
|
|
2019
|
-
<button
|
|
2020
|
-
onClick={() => setDashShowAll(!dashShowAll)}
|
|
2021
|
-
className="flex items-center gap-1 px-3 py-1 text-[11px] text-muted-foreground/70 hover:text-primary"
|
|
2022
|
-
>
|
|
2023
|
-
{dashShowAll
|
|
2024
|
-
? "Show less"
|
|
2025
|
-
: `Show ${filteredDashboards.length - SIDEBAR_PREVIEW_COUNT} more`}
|
|
2026
|
-
</button>
|
|
1983
|
+
<IconChevronDown
|
|
1984
|
+
className={cn(
|
|
1985
|
+
"h-3.5 w-3.5 shrink-0 transition-transform",
|
|
1986
|
+
!dashOpen && "-rotate-90",
|
|
2027
1987
|
)}
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
<div
|
|
2032
|
-
key={`sql-skeleton-${i}`}
|
|
2033
|
-
className="flex items-center gap-2 px-3 py-1"
|
|
2034
|
-
>
|
|
2035
|
-
<Skeleton className="h-3.5 w-3.5 shrink-0 rounded-sm" />
|
|
2036
|
-
<Skeleton
|
|
2037
|
-
className="h-3 rounded"
|
|
2038
|
-
style={{ width: `${60 + ((i * 17) % 30)}%` }}
|
|
2039
|
-
/>
|
|
2040
|
-
</div>
|
|
2041
|
-
))}
|
|
2042
|
-
<NewDashboardDialog />
|
|
2043
|
-
</div>
|
|
2044
|
-
</SortableContext>
|
|
2045
|
-
</DndContext>
|
|
2046
|
-
)}
|
|
1988
|
+
/>
|
|
1989
|
+
</button>
|
|
1990
|
+
</div>
|
|
2047
1991
|
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
1992
|
+
{dashOpen && (
|
|
1993
|
+
<DndContext
|
|
1994
|
+
sensors={sensors}
|
|
1995
|
+
collisionDetection={closestCenter}
|
|
1996
|
+
onDragEnd={handleDashboardDragEnd}
|
|
1997
|
+
>
|
|
1998
|
+
<SortableContext
|
|
1999
|
+
items={displayedDashboards.map((d) => d.id)}
|
|
2000
|
+
strategy={verticalListSortingStrategy}
|
|
2001
|
+
>
|
|
2002
|
+
<div className="ml-4 min-w-0 space-y-0.5">
|
|
2003
|
+
{displayedDashboards.map((d) => (
|
|
2004
|
+
<SortableDashboardItem
|
|
2005
|
+
key={d.id}
|
|
2006
|
+
d={d}
|
|
2007
|
+
isActive={activeDashboardId === d.id}
|
|
2008
|
+
location={location}
|
|
2009
|
+
favoriteIds={favoriteIds}
|
|
2010
|
+
onToggleFavorite={toggleFavorite}
|
|
2011
|
+
onDelete={handleDashboardDelete}
|
|
2012
|
+
onRename={handleDashboardRename}
|
|
2013
|
+
onArchive={handleDashboardArchive}
|
|
2014
|
+
onSetVisibility={handleDashboardSetVisibility}
|
|
2015
|
+
onPrefetch={prefetchDashboard}
|
|
2016
|
+
views={allViewsMap[d.id]}
|
|
2017
|
+
/>
|
|
2018
|
+
))}
|
|
2019
|
+
{filteredDashboards.length > SIDEBAR_PREVIEW_COUNT && (
|
|
2020
|
+
<button
|
|
2021
|
+
onClick={() => setDashShowAll(!dashShowAll)}
|
|
2022
|
+
className="flex items-center gap-1 px-3 py-1 text-[11px] text-muted-foreground/70 hover:text-primary"
|
|
2023
|
+
>
|
|
2024
|
+
{dashShowAll
|
|
2025
|
+
? "Show less"
|
|
2026
|
+
: `Show ${filteredDashboards.length - SIDEBAR_PREVIEW_COUNT} more`}
|
|
2027
|
+
</button>
|
|
2028
|
+
)}
|
|
2029
|
+
{sqlDashboardsLoading &&
|
|
2030
|
+
sqlDashboards.length === 0 &&
|
|
2031
|
+
Array.from({ length: 3 }).map((_, i) => (
|
|
2032
|
+
<div
|
|
2033
|
+
key={`sql-skeleton-${i}`}
|
|
2034
|
+
className="flex items-center gap-2 px-3 py-1"
|
|
2035
|
+
>
|
|
2036
|
+
<Skeleton className="h-3.5 w-3.5 shrink-0 rounded-sm" />
|
|
2037
|
+
<Skeleton
|
|
2038
|
+
className="h-3 rounded"
|
|
2039
|
+
style={{ width: `${60 + ((i * 17) % 30)}%` }}
|
|
2040
|
+
/>
|
|
2041
|
+
</div>
|
|
2042
|
+
))}
|
|
2043
|
+
<NewDashboardDialog />
|
|
2044
|
+
</div>
|
|
2045
|
+
</SortableContext>
|
|
2046
|
+
</DndContext>
|
|
2055
2047
|
)}
|
|
2056
|
-
>
|
|
2057
|
-
<button
|
|
2058
|
-
type="button"
|
|
2059
|
-
onClick={toggleAnalysesOpen}
|
|
2060
|
-
className="flex min-w-0 flex-1 items-center gap-3 px-3 py-2 text-left"
|
|
2061
|
-
aria-expanded={analysesOpen}
|
|
2062
|
-
>
|
|
2063
|
-
<IconReportAnalytics className="h-4 w-4 shrink-0" />
|
|
2064
|
-
<span className="min-w-0 flex-1 truncate">Analyses</span>
|
|
2065
|
-
</button>
|
|
2066
|
-
<SidebarSectionSettingsPopover
|
|
2067
|
-
label="Analyses"
|
|
2068
|
-
sortMode={analysisSortMode}
|
|
2069
|
-
onSortModeChange={setAnalysisSortMode}
|
|
2070
|
-
sharedOnly={analysisFilter === "org"}
|
|
2071
|
-
onSharedOnlyChange={(checked) =>
|
|
2072
|
-
setAnalysisFilter(checked ? "org" : "all")
|
|
2073
|
-
}
|
|
2074
|
-
showHidden={analysisHiddenFilter === "hidden"}
|
|
2075
|
-
onShowHiddenChange={(checked) =>
|
|
2076
|
-
setAnalysisHiddenFilter(checked ? "hidden" : "visible")
|
|
2077
|
-
}
|
|
2078
|
-
/>
|
|
2079
|
-
<button
|
|
2080
|
-
type="button"
|
|
2081
|
-
onClick={toggleAnalysesOpen}
|
|
2082
|
-
className="mr-1 flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-sidebar-accent hover:text-foreground"
|
|
2083
|
-
aria-label={
|
|
2084
|
-
analysesOpen ? "Collapse analyses" : "Expand analyses"
|
|
2085
|
-
}
|
|
2086
|
-
>
|
|
2087
|
-
<IconChevronDown
|
|
2088
|
-
className={cn(
|
|
2089
|
-
"h-3.5 w-3.5 shrink-0 transition-transform",
|
|
2090
|
-
!analysesOpen && "-rotate-90",
|
|
2091
|
-
)}
|
|
2092
|
-
/>
|
|
2093
|
-
</button>
|
|
2094
2048
|
</div>
|
|
2095
2049
|
|
|
2096
|
-
{
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2050
|
+
{/* Analyses section */}
|
|
2051
|
+
<div className="group/section min-w-0 space-y-1">
|
|
2052
|
+
<div
|
|
2053
|
+
className={cn(
|
|
2054
|
+
"flex w-full min-w-0 items-center rounded-lg transition-all hover:text-primary",
|
|
2055
|
+
location.pathname.startsWith("/analyses")
|
|
2056
|
+
? "text-sidebar-accent-foreground"
|
|
2057
|
+
: "text-muted-foreground hover:bg-sidebar-accent/50",
|
|
2058
|
+
)}
|
|
2101
2059
|
>
|
|
2102
|
-
<
|
|
2103
|
-
|
|
2104
|
-
|
|
2060
|
+
<button
|
|
2061
|
+
type="button"
|
|
2062
|
+
onClick={toggleAnalysesOpen}
|
|
2063
|
+
className="flex min-w-0 flex-1 items-center gap-3 px-3 py-2 text-left"
|
|
2064
|
+
aria-expanded={analysesOpen}
|
|
2105
2065
|
>
|
|
2106
|
-
<
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
))}
|
|
2135
|
-
{filteredAnalyses.length > SIDEBAR_PREVIEW_COUNT && (
|
|
2136
|
-
<button
|
|
2137
|
-
onClick={() => setAnalysesShowAll(!analysesShowAll)}
|
|
2138
|
-
className="flex items-center gap-1 px-3 py-1 text-[11px] text-muted-foreground/70 hover:text-primary"
|
|
2139
|
-
>
|
|
2140
|
-
{analysesShowAll
|
|
2141
|
-
? "Show less"
|
|
2142
|
-
: `Show ${filteredAnalyses.length - SIDEBAR_PREVIEW_COUNT} more`}
|
|
2143
|
-
</button>
|
|
2066
|
+
<IconReportAnalytics className="h-4 w-4 shrink-0" />
|
|
2067
|
+
<span className="min-w-0 flex-1 truncate">Analyses</span>
|
|
2068
|
+
</button>
|
|
2069
|
+
<SidebarSectionSettingsPopover
|
|
2070
|
+
label="Analyses"
|
|
2071
|
+
sortMode={analysisSortMode}
|
|
2072
|
+
onSortModeChange={setAnalysisSortMode}
|
|
2073
|
+
sharedOnly={analysisFilter === "org"}
|
|
2074
|
+
onSharedOnlyChange={(checked) =>
|
|
2075
|
+
setAnalysisFilter(checked ? "org" : "all")
|
|
2076
|
+
}
|
|
2077
|
+
showHidden={analysisHiddenFilter === "hidden"}
|
|
2078
|
+
onShowHiddenChange={(checked) =>
|
|
2079
|
+
setAnalysisHiddenFilter(checked ? "hidden" : "visible")
|
|
2080
|
+
}
|
|
2081
|
+
/>
|
|
2082
|
+
<button
|
|
2083
|
+
type="button"
|
|
2084
|
+
onClick={toggleAnalysesOpen}
|
|
2085
|
+
className="mr-1 flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-sidebar-accent hover:text-foreground"
|
|
2086
|
+
aria-label={
|
|
2087
|
+
analysesOpen ? "Collapse analyses" : "Expand analyses"
|
|
2088
|
+
}
|
|
2089
|
+
>
|
|
2090
|
+
<IconChevronDown
|
|
2091
|
+
className={cn(
|
|
2092
|
+
"h-3.5 w-3.5 shrink-0 transition-transform",
|
|
2093
|
+
!analysesOpen && "-rotate-90",
|
|
2144
2094
|
)}
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2095
|
+
/>
|
|
2096
|
+
</button>
|
|
2097
|
+
</div>
|
|
2098
|
+
|
|
2099
|
+
{analysesOpen && (
|
|
2100
|
+
<DndContext
|
|
2101
|
+
sensors={sensors}
|
|
2102
|
+
collisionDetection={closestCenter}
|
|
2103
|
+
onDragEnd={handleAnalysisDragEnd}
|
|
2104
|
+
>
|
|
2105
|
+
<SortableContext
|
|
2106
|
+
items={displayedAnalyses.map((a) => a.id)}
|
|
2107
|
+
strategy={verticalListSortingStrategy}
|
|
2108
|
+
>
|
|
2109
|
+
<div className="ml-4 min-w-0 space-y-0.5">
|
|
2110
|
+
{displayedAnalyses.map((a) => (
|
|
2111
|
+
<SortableRow
|
|
2112
|
+
key={a.id}
|
|
2113
|
+
id={a.id}
|
|
2114
|
+
favoriteKey={`analysis:${a.id}`}
|
|
2115
|
+
name={a.name}
|
|
2116
|
+
href={`/analyses/${a.id}`}
|
|
2117
|
+
isActive={location.pathname === `/analyses/${a.id}`}
|
|
2118
|
+
favoriteIds={favoriteIds}
|
|
2119
|
+
onToggleFavorite={toggleFavorite}
|
|
2120
|
+
onDelete={() => handleAnalysisDelete(a)}
|
|
2121
|
+
onRename={(name) => handleAnalysisRename(a, name)}
|
|
2122
|
+
hidden={analysisHiddenFilter === "hidden"}
|
|
2123
|
+
onHide={
|
|
2124
|
+
analysisHiddenFilter === "hidden"
|
|
2125
|
+
? undefined
|
|
2126
|
+
: () => handleAnalysisHide(a)
|
|
2127
|
+
}
|
|
2128
|
+
onUnhide={
|
|
2129
|
+
analysisHiddenFilter === "hidden"
|
|
2130
|
+
? () => handleAnalysisUnhide(a)
|
|
2131
|
+
: undefined
|
|
2132
|
+
}
|
|
2133
|
+
visibility={a.visibility}
|
|
2134
|
+
onSetVisibility={(v) =>
|
|
2135
|
+
handleAnalysisSetVisibility(a, v)
|
|
2136
|
+
}
|
|
2137
|
+
onPrefetch={() => prefetchAnalysis(a.id)}
|
|
2138
|
+
/>
|
|
2158
2139
|
))}
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2140
|
+
{filteredAnalyses.length > SIDEBAR_PREVIEW_COUNT && (
|
|
2141
|
+
<button
|
|
2142
|
+
onClick={() => setAnalysesShowAll(!analysesShowAll)}
|
|
2143
|
+
className="flex items-center gap-1 px-3 py-1 text-[11px] text-muted-foreground/70 hover:text-primary"
|
|
2144
|
+
>
|
|
2145
|
+
{analysesShowAll
|
|
2146
|
+
? "Show less"
|
|
2147
|
+
: `Show ${filteredAnalyses.length - SIDEBAR_PREVIEW_COUNT} more`}
|
|
2148
|
+
</button>
|
|
2149
|
+
)}
|
|
2150
|
+
{analysesLoading &&
|
|
2151
|
+
sortedAnalyses.length === 0 &&
|
|
2152
|
+
Array.from({ length: 3 }).map((_, i) => (
|
|
2153
|
+
<div
|
|
2154
|
+
key={`analysis-skeleton-${i}`}
|
|
2155
|
+
className="flex items-center gap-2 px-3 py-1"
|
|
2156
|
+
>
|
|
2157
|
+
<Skeleton className="h-3.5 w-3.5 shrink-0 rounded-sm" />
|
|
2158
|
+
<Skeleton
|
|
2159
|
+
className="h-3 rounded"
|
|
2160
|
+
style={{ width: `${60 + ((i * 17) % 30)}%` }}
|
|
2161
|
+
/>
|
|
2162
|
+
</div>
|
|
2163
|
+
))}
|
|
2164
|
+
{!analysesLoading && sortedAnalyses.length === 0 && (
|
|
2165
|
+
<p className="px-3 py-1 text-[11px] text-muted-foreground/60">
|
|
2166
|
+
No analyses yet
|
|
2167
|
+
</p>
|
|
2168
|
+
)}
|
|
2169
|
+
<NewAnalysisDialog />
|
|
2170
|
+
</div>
|
|
2171
|
+
</SortableContext>
|
|
2172
|
+
</DndContext>
|
|
2173
|
+
)}
|
|
2174
|
+
</div>
|
|
2169
2175
|
</nav>
|
|
2170
2176
|
|
|
2171
2177
|
<div className="mt-auto min-w-0 px-2 pt-2 text-sm font-medium lg:px-4">
|
|
@@ -26,9 +26,12 @@ export function useNavigationState() {
|
|
|
26
26
|
state.view = "overview";
|
|
27
27
|
} else if (pathname === "/ask") {
|
|
28
28
|
state.view = "ask";
|
|
29
|
-
} else if (
|
|
29
|
+
} else if (
|
|
30
|
+
pathname.startsWith("/dashboards/") ||
|
|
31
|
+
pathname.startsWith("/adhoc/")
|
|
32
|
+
) {
|
|
30
33
|
state.view = "adhoc";
|
|
31
|
-
const match = pathname.match(/\/adhoc\/(.+)/);
|
|
34
|
+
const match = pathname.match(/\/(?:adhoc|dashboards)\/(.+)/);
|
|
32
35
|
if (match) {
|
|
33
36
|
state.dashboardId = match[1];
|
|
34
37
|
localStorage.setItem("last-dashboard-id", match[1]);
|
|
@@ -60,15 +63,13 @@ export function useNavigationState() {
|
|
|
60
63
|
state.view = "catalog";
|
|
61
64
|
} else if (pathname === "/settings") {
|
|
62
65
|
state.view = "settings";
|
|
63
|
-
} else if (pathname === "/about") {
|
|
64
|
-
state.view = "about";
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
return state;
|
|
68
69
|
},
|
|
69
70
|
getCommandPath: (cmd) => {
|
|
70
71
|
if (cmd.view === "adhoc" && cmd.dashboardId)
|
|
71
|
-
return `/
|
|
72
|
+
return `/dashboards/${cmd.dashboardId}`;
|
|
72
73
|
if (cmd.view === "analyses" && cmd.analysisId)
|
|
73
74
|
return `/analyses/${cmd.analysisId}`;
|
|
74
75
|
if (cmd.view === "analyses") return "/analyses";
|
|
@@ -81,7 +82,6 @@ export function useNavigationState() {
|
|
|
81
82
|
if (cmd.view === "ask") return "/ask";
|
|
82
83
|
if (cmd.view === "settings") return "/settings";
|
|
83
84
|
if (cmd.view === "overview") return "/overview";
|
|
84
|
-
if (cmd.view === "about") return "/about";
|
|
85
85
|
return "/";
|
|
86
86
|
},
|
|
87
87
|
onNavigate: (_command, path) => {
|
|
@@ -8,7 +8,7 @@ export function demoNodeExporterDashboardPath(
|
|
|
8
8
|
tab: DEMO_NODE_EXPORTER_DEFAULT_TAB,
|
|
9
9
|
});
|
|
10
10
|
if (options.intro) params.set("demoIntro", "1");
|
|
11
|
-
return `/
|
|
11
|
+
return `/dashboards/${dashboardId}?${params.toString()}`;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export function withDemoIntro(path: string): string {
|
|
@@ -19,7 +19,8 @@ function isLastOpenedItem(value: unknown): value is LastOpenedItem {
|
|
|
19
19
|
typeof item.id === "string" &&
|
|
20
20
|
item.id.length > 0 &&
|
|
21
21
|
typeof item.path === "string" &&
|
|
22
|
-
(item.path.startsWith("/
|
|
22
|
+
(item.path.startsWith("/dashboards/") ||
|
|
23
|
+
item.path.startsWith("/adhoc/") ||
|
|
23
24
|
item.path.startsWith("/analyses/") ||
|
|
24
25
|
item.path.startsWith("/extensions/")) &&
|
|
25
26
|
typeof item.updatedAt === "number"
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
+
import { ChangelogSettingsCard } from "@agent-native/core/client";
|
|
1
2
|
import { useAuth } from "@/components/auth/AuthProvider";
|
|
2
3
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
|
3
4
|
import { Button } from "@/components/ui/button";
|
|
4
5
|
import { Link } from "react-router";
|
|
6
|
+
import changelog from "../../CHANGELOG.md?raw";
|
|
5
7
|
|
|
6
8
|
export default function Settings() {
|
|
7
9
|
const { auth } = useAuth();
|
|
8
10
|
|
|
9
11
|
return (
|
|
10
12
|
<div className="space-y-6 max-w-2xl">
|
|
13
|
+
<ChangelogSettingsCard markdown={changelog} />
|
|
14
|
+
|
|
11
15
|
<Card className="bg-card border-border/50">
|
|
12
16
|
<CardHeader>
|
|
13
17
|
<CardTitle className="text-base">Account</CardTitle>
|
|
@@ -326,7 +326,7 @@ export default function ExplorerDashboardPage() {
|
|
|
326
326
|
queryKey: ["explorer-dashboards-palette"],
|
|
327
327
|
});
|
|
328
328
|
toast.success(`Archived "${dashboard?.name ?? "dashboard"}"`);
|
|
329
|
-
navigate("/
|
|
329
|
+
navigate("/dashboards/explorer");
|
|
330
330
|
} catch (err) {
|
|
331
331
|
toast.error(
|
|
332
332
|
err instanceof Error ? err.message : "Couldn't archive dashboard",
|
|
@@ -657,7 +657,7 @@ export default function ExplorerDashboardPage() {
|
|
|
657
657
|
queryKey: ["explorer-dashboards-palette"],
|
|
658
658
|
});
|
|
659
659
|
setConfirmDeleteOpen(false);
|
|
660
|
-
navigate("/
|
|
660
|
+
navigate("/dashboards/explorer");
|
|
661
661
|
} catch (err) {
|
|
662
662
|
toast.error(
|
|
663
663
|
err instanceof Error
|
|
@@ -717,7 +717,7 @@ export default function ExplorerDashboardPage() {
|
|
|
717
717
|
onRemove={() => removeChart(chart.id)}
|
|
718
718
|
onToggleWidth={() => toggleWidth(chart.id)}
|
|
719
719
|
onEdit={() =>
|
|
720
|
-
navigate(`/
|
|
720
|
+
navigate(`/dashboards/explorer?config=${chart.configId}`)
|
|
721
721
|
}
|
|
722
722
|
editable={canEdit}
|
|
723
723
|
/>
|
|
@@ -224,7 +224,7 @@ export function DashboardFilterBar({
|
|
|
224
224
|
<Collapsible
|
|
225
225
|
open={filtersOpen}
|
|
226
226
|
onOpenChange={setFiltersOpen}
|
|
227
|
-
className="rounded-lg border border-border bg-card p-3"
|
|
227
|
+
className="group rounded-lg border border-border bg-card p-3"
|
|
228
228
|
>
|
|
229
229
|
<div className="flex items-center justify-between gap-3">
|
|
230
230
|
<div className="flex items-baseline gap-2">
|
|
@@ -235,7 +235,7 @@ export function DashboardFilterBar({
|
|
|
235
235
|
auto-applied
|
|
236
236
|
</span>
|
|
237
237
|
</div>
|
|
238
|
-
<div className="flex items-center gap-1">
|
|
238
|
+
<div className="flex items-center gap-1 opacity-0 transition-opacity focus-within:opacity-100 group-hover:opacity-100 group-data-[state=closed]:opacity-100">
|
|
239
239
|
{onSaveView && filtersActive && (
|
|
240
240
|
<Button
|
|
241
241
|
variant="ghost"
|