@agent-native/core 0.114.16 → 0.115.3
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/agent-native.eject.json +2 -0
- package/corpus/README.md +3 -3
- package/corpus/core/CHANGELOG.md +41 -0
- package/corpus/core/agent-native.eject.json +2 -0
- package/corpus/core/docs/content/agent-native-toolkit.mdx +16 -0
- package/corpus/core/docs/content/recurring-jobs.mdx +35 -6
- package/corpus/core/export-snapshot.json +4 -0
- package/corpus/core/package.json +5 -1
- package/corpus/core/src/action.ts +22 -1
- package/corpus/core/src/agent/production-agent.ts +122 -3
- package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +19 -2
- package/corpus/core/src/cli/templates-meta.ts +12 -0
- package/corpus/core/src/client/AssistantChat.tsx +53 -26
- package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +19 -0
- package/corpus/core/src/client/agent-page/use-jobs.ts +1 -0
- package/corpus/core/src/client/blocks/library/wireframe.tsx +3 -1
- package/corpus/core/src/client/chat/message-components.tsx +35 -1
- package/corpus/core/src/client/chat/tool-call-display.tsx +38 -3
- package/corpus/core/src/connections/catalog.ts +20 -1
- package/corpus/core/src/connections/reader.ts +65 -0
- package/corpus/core/src/dashboard-storage/index.ts +27 -0
- package/corpus/core/src/dashboard-storage/panel-source.ts +168 -0
- package/corpus/core/src/dashboard-storage/schema.ts +62 -0
- package/corpus/core/src/dashboard-storage/store.ts +333 -0
- package/corpus/core/src/deploy/build.ts +95 -16
- package/corpus/core/src/eject/provider-api-definitions.ts +1 -0
- package/corpus/core/src/eject/workspace-connections.ts +1 -0
- package/corpus/core/src/extensions/actions.ts +199 -73
- package/corpus/core/src/jobs/actions/list-recurring-jobs.ts +2 -0
- package/corpus/core/src/jobs/scheduler.ts +71 -4
- package/corpus/core/src/jobs/tools.ts +31 -1
- package/corpus/core/src/localization/default-messages.ts +1 -0
- package/corpus/core/src/mcp-client/index.ts +6 -0
- package/corpus/core/src/provider-api/actions/provider-api.ts +1 -1
- package/corpus/core/src/provider-api/index.ts +190 -5
- package/corpus/core/src/secrets/register-framework-secrets.ts +8 -0
- package/corpus/core/src/server/agent-chat/context-tools.ts +9 -0
- package/corpus/core/src/server/agent-chat/framework-prompts.ts +2 -2
- package/corpus/core/src/server/agent-chat-plugin.ts +22 -2
- package/corpus/core/src/server/core-routes-plugin.ts +1 -0
- package/corpus/core/src/server/credential-provider.ts +9 -3
- package/corpus/core/src/server/workspace-provider-oauth.ts +181 -4
- package/corpus/core/src/styles/agent-native.css +45 -2
- package/corpus/core/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/corpus/core/src/templates/default/.agents/skills/app-branding/SKILL.md +159 -0
- package/corpus/core/src/templates/default/.agents/skills/app-permissions/SKILL.md +155 -0
- package/corpus/core/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +31 -18
- package/corpus/core/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +15 -0
- package/corpus/core/src/triggers/actions.ts +11 -2
- package/corpus/core/src/triggers/dispatcher.ts +20 -1
- package/corpus/core/src/triggers/types.ts +5 -0
- package/corpus/core/src/vite/action-types-plugin.ts +9 -1
- package/corpus/templates/analytics/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/analytics/AGENTS.md +11 -11
- package/corpus/templates/analytics/_gitignore +39 -0
- package/corpus/templates/analytics/actions/query-dashboard-panel.ts +30 -0
- package/corpus/templates/analytics/actions/update-dashboard.ts +2 -1
- package/corpus/templates/analytics/app/lib/sql-query.ts +11 -25
- package/corpus/templates/analytics/changelog/2026-07-21-fixed-extension-updates-failing-before-changes-could-be-appl.md +6 -0
- package/corpus/templates/analytics/server/lib/dashboard-panel-query.ts +1 -0
- package/corpus/templates/analytics/server/lib/dashboard-panel-source-resolver.ts +51 -0
- package/corpus/templates/analytics/server/lib/prometheus.ts +1 -1
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/assets/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/brain/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/calendar/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/calendar/_gitignore +39 -0
- package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/corpus/templates/chat/AGENTS.md +1 -1
- package/corpus/templates/clips/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/clips/AGENTS.md +7 -0
- package/corpus/templates/clips/actions/prepare-crm-call-evidence.ts +58 -0
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +88 -11
- package/corpus/templates/clips/changelog/2026-07-21-crm-call-evidence-handoff.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-21-recording-retries-and-restarts-keep-their-upload-session-so-.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/background.ts +20 -5
- package/corpus/templates/clips/chrome-extension/src/native-recording-state.ts +19 -0
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +8 -0
- package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +9 -0
- package/corpus/templates/clips/desktop/src-tauri/src/recording_indicator.rs +54 -28
- package/corpus/templates/clips/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/content/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/content/_gitignore +39 -0
- package/corpus/templates/content/learnings.defaults.md +5 -0
- package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +133 -0
- package/corpus/templates/crm/.agents/skills/crm/SKILL.md +128 -0
- package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +145 -0
- package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +100 -0
- package/corpus/templates/crm/.env.example +5 -0
- package/corpus/templates/crm/AGENTS.md +120 -0
- package/corpus/templates/crm/CHANGELOG.md +1 -0
- package/corpus/templates/crm/DEVELOPING.md +66 -0
- package/corpus/templates/crm/README.md +106 -0
- package/corpus/templates/crm/_gitignore +12 -0
- package/corpus/templates/crm/actions/_crm-action-utils.ts +87 -0
- package/corpus/templates/crm/actions/_crm-dashboard.ts +69 -0
- package/corpus/templates/crm/actions/_crm-signal-utils.ts +79 -0
- package/corpus/templates/crm/actions/apply-crm-proposals.ts +203 -0
- package/corpus/templates/crm/actions/attach-call-evidence.ts +170 -0
- package/corpus/templates/crm/actions/configure-crm-connection.ts +126 -0
- package/corpus/templates/crm/actions/configure-native-crm.ts +44 -0
- package/corpus/templates/crm/actions/create-crm-record.ts +148 -0
- package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +58 -0
- package/corpus/templates/crm/actions/delete-staged-dataset.ts +14 -0
- package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +36 -0
- package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +33 -0
- package/corpus/templates/crm/actions/get-crm-dashboard.ts +14 -0
- package/corpus/templates/crm/actions/get-crm-overview.ts +13 -0
- package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +61 -0
- package/corpus/templates/crm/actions/get-crm-record.ts +75 -0
- package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +81 -0
- package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +15 -0
- package/corpus/templates/crm/actions/list-crm-dashboards.ts +15 -0
- package/corpus/templates/crm/actions/list-crm-proposals.ts +31 -0
- package/corpus/templates/crm/actions/list-crm-records.ts +79 -0
- package/corpus/templates/crm/actions/list-crm-saved-views.ts +15 -0
- package/corpus/templates/crm/actions/list-crm-signal-hits.ts +43 -0
- package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +32 -0
- package/corpus/templates/crm/actions/list-crm-tasks.ts +22 -0
- package/corpus/templates/crm/actions/list-staged-datasets.ts +14 -0
- package/corpus/templates/crm/actions/list-workspace-connections.ts +47 -0
- package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +87 -0
- package/corpus/templates/crm/actions/manage-crm-task.ts +132 -0
- package/corpus/templates/crm/actions/navigate.ts +63 -0
- package/corpus/templates/crm/actions/provider-api-catalog.ts +22 -0
- package/corpus/templates/crm/actions/provider-api-docs.ts +54 -0
- package/corpus/templates/crm/actions/provider-api-request.ts +92 -0
- package/corpus/templates/crm/actions/query-staged-dataset.ts +44 -0
- package/corpus/templates/crm/actions/record-crm-call-insight.ts +160 -0
- package/corpus/templates/crm/actions/record-crm-smart-signal.ts +150 -0
- package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +23 -0
- package/corpus/templates/crm/actions/review-crm-signal.ts +31 -0
- package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +103 -0
- package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +275 -0
- package/corpus/templates/crm/actions/run.ts +11 -0
- package/corpus/templates/crm/actions/save-crm-dashboard.ts +51 -0
- package/corpus/templates/crm/actions/save-crm-saved-view.ts +119 -0
- package/corpus/templates/crm/actions/sync-crm.ts +146 -0
- package/corpus/templates/crm/actions/update-crm-record.ts +508 -0
- package/corpus/templates/crm/actions/view-screen.ts +218 -0
- package/corpus/templates/crm/agent-native.app-skill.json +58 -0
- package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +158 -0
- package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +83 -0
- package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +225 -0
- package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +413 -0
- package/corpus/templates/crm/app/components/crm/RecordActions.tsx +510 -0
- package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +134 -0
- package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +367 -0
- package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +92 -0
- package/corpus/templates/crm/app/components/crm/Surface.tsx +96 -0
- package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +180 -0
- package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +106 -0
- package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +84 -0
- package/corpus/templates/crm/app/entry.client.tsx +16 -0
- package/corpus/templates/crm/app/entry.server.tsx +10 -0
- package/corpus/templates/crm/app/global.css +167 -0
- package/corpus/templates/crm/app/hooks/use-navigation-state.ts +60 -0
- package/corpus/templates/crm/app/i18n/en-US.ts +89 -0
- package/corpus/templates/crm/app/i18n/index.ts +34 -0
- package/corpus/templates/crm/app/lib/dashboard.ts +13 -0
- package/corpus/templates/crm/app/lib/navigation.ts +54 -0
- package/corpus/templates/crm/app/lib/tab-id.ts +1 -0
- package/corpus/templates/crm/app/lib/types.ts +172 -0
- package/corpus/templates/crm/app/lib/utils.ts +1 -0
- package/corpus/templates/crm/app/root.tsx +88 -0
- package/corpus/templates/crm/app/routes/_index.tsx +26 -0
- package/corpus/templates/crm/app/routes/accounts.tsx +41 -0
- package/corpus/templates/crm/app/routes/agent.tsx +5 -0
- package/corpus/templates/crm/app/routes/ask.tsx +53 -0
- package/corpus/templates/crm/app/routes/dashboard.tsx +118 -0
- package/corpus/templates/crm/app/routes/opportunities.tsx +41 -0
- package/corpus/templates/crm/app/routes/people.tsx +41 -0
- package/corpus/templates/crm/app/routes/proposals.tsx +266 -0
- package/corpus/templates/crm/app/routes/records.$recordId.tsx +35 -0
- package/corpus/templates/crm/app/routes/settings.tsx +63 -0
- package/corpus/templates/crm/app/routes/setup.tsx +308 -0
- package/corpus/templates/crm/app/routes/tasks.tsx +252 -0
- package/corpus/templates/crm/app/routes/views.tsx +333 -0
- package/corpus/templates/crm/app/routes.ts +17 -0
- package/corpus/templates/crm/app/vite-env.d.ts +6 -0
- package/corpus/templates/crm/changelog/2026-07-21-agent-native-crm.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-21-clips-call-evidence-review-recipe.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-find-and-review-evidence-grounded-call-signals-w.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-manage-keyword-and-smart-call-signal-trackers-fr.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-21-delegated-local-crm-automation.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-21-native-sql.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboard.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboards-now-install-correctly-from-the-crm-actio.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-21-salesforce-connection.md +6 -0
- package/corpus/templates/crm/components.json +20 -0
- package/corpus/templates/crm/docs/architecture/crm-contract.md +180 -0
- package/corpus/templates/crm/learnings.defaults.md +5 -0
- package/corpus/templates/crm/package.json +59 -0
- package/corpus/templates/crm/public/favicon.svg +1 -0
- package/corpus/templates/crm/public/icon-180.svg +1 -0
- package/corpus/templates/crm/public/manifest.json +11 -0
- package/corpus/templates/crm/react-router.config.ts +7 -0
- package/corpus/templates/crm/server/crm/adapter.ts +32 -0
- package/corpus/templates/crm/server/crm/crm-field-firewall.ts +64 -0
- package/corpus/templates/crm/server/crm/crm-mirror.ts +711 -0
- package/corpus/templates/crm/server/crm/hubspot-adapter.ts +1143 -0
- package/corpus/templates/crm/server/crm/native-adapter.ts +1715 -0
- package/corpus/templates/crm/server/crm/read-through.ts +207 -0
- package/corpus/templates/crm/server/crm/salesforce-adapter.ts +1255 -0
- package/corpus/templates/crm/server/db/crm-store.ts +1170 -0
- package/corpus/templates/crm/server/db/index.ts +169 -0
- package/corpus/templates/crm/server/db/schema.ts +441 -0
- package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +65 -0
- package/corpus/templates/crm/server/lib/intelligence/evidence.ts +105 -0
- package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +100 -0
- package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +144 -0
- package/corpus/templates/crm/server/lib/intelligence/summary.ts +141 -0
- package/corpus/templates/crm/server/lib/provider-api.ts +64 -0
- package/corpus/templates/crm/server/middleware/auth.ts +4 -0
- package/corpus/templates/crm/server/plugins/agent-chat.ts +68 -0
- package/corpus/templates/crm/server/plugins/auth.ts +14 -0
- package/corpus/templates/crm/server/plugins/core-routes.ts +17 -0
- package/corpus/templates/crm/server/plugins/db.ts +454 -0
- package/corpus/templates/crm/server/routes/[...page].get.ts +5 -0
- package/corpus/templates/crm/shared/crm-automation-recipes.ts +132 -0
- package/corpus/templates/crm/shared/crm-contract.ts +254 -0
- package/corpus/templates/crm/shared/crm-sales-config.ts +63 -0
- package/corpus/templates/crm/ssr-entry.ts +11 -0
- package/corpus/templates/crm/tsconfig.json +24 -0
- package/corpus/templates/crm/vite.config.ts +15 -0
- package/corpus/templates/crm/vitest.config.ts +5 -0
- package/corpus/templates/design/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/dispatch/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/forms/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/forms/_gitignore +39 -0
- package/corpus/templates/forms/learnings.defaults.md +5 -0
- package/corpus/templates/macros/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/macros/_gitignore +39 -0
- package/corpus/templates/macros/learnings.defaults.md +5 -0
- package/corpus/templates/mail/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/mail/_gitignore +39 -0
- package/corpus/templates/plan/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +19 -2
- package/corpus/templates/plan/AGENTS.md +10 -0
- package/corpus/templates/plan/actions/create-prototype-plan.ts +27 -3
- package/corpus/templates/plan/actions/get-plan-blocks.ts +1 -1
- package/corpus/templates/plan/actions/update-visual-plan.ts +3 -2
- package/corpus/templates/plan/app/components/plan/PlanContentRenderer.tsx +18 -4
- package/corpus/templates/plan/app/components/plan/PlanVisualSurface.tsx +10 -3
- package/corpus/templates/plan/app/components/plan/wireframe/Wireframe.tsx +3 -1
- package/corpus/templates/plan/app/i18n/en-US.ts +6 -0
- package/corpus/templates/plan/app/lib/create-plan-routing.ts +39 -0
- package/corpus/templates/plan/app/pages/PlansPage.tsx +31 -107
- package/corpus/templates/plan/changelog/2026-07-22-high-fidelity-mockup-requests-now-preserve-branded-css-use-d.md +6 -0
- package/corpus/templates/plan/shared/plan-content.ts +110 -2
- package/corpus/templates/slides/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/slides/_gitignore +39 -0
- package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/corpus/templates/tasks/_gitignore +39 -0
- package/corpus/toolkit/CHANGELOG.md +12 -0
- package/corpus/toolkit/README.md +30 -0
- package/corpus/toolkit/agent-native.eject.json +33 -0
- package/corpus/toolkit/package.json +15 -1
- package/corpus/toolkit/src/dashboard/DataTable.tsx +273 -0
- package/corpus/toolkit/src/dashboard/DateRangePicker.tsx +57 -0
- package/corpus/toolkit/src/dashboard/GenericChartPanel.tsx +461 -0
- package/corpus/toolkit/src/dashboard/MetricCard.tsx +54 -0
- package/corpus/toolkit/src/dashboard/StatsCard.tsx +49 -0
- package/corpus/toolkit/src/dashboard/dashboard-layout.ts +329 -0
- package/corpus/toolkit/src/dashboard/index.ts +6 -0
- package/corpus/toolkit/src/index.ts +1 -0
- package/corpus/toolkit/src/ui/calendar.tsx +8 -8
- package/corpus/toolkit/src/ui/date-picker.tsx +4 -1
- package/dist/action.d.ts +14 -1
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js.map +1 -1
- package/dist/agent/production-agent.d.ts +3 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +97 -3
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/skills-content/visual-plan-skill.d.ts +1 -1
- package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/visual-plan-skill.js +19 -2
- package/dist/cli/skills-content/visual-plan-skill.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +12 -0
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +4 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +30 -17
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
- package/dist/client/agent-page/AgentJobsTab.js +3 -1
- package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
- package/dist/client/agent-page/use-jobs.d.ts +1 -0
- package/dist/client/agent-page/use-jobs.d.ts.map +1 -1
- package/dist/client/agent-page/use-jobs.js.map +1 -1
- package/dist/client/blocks/library/wireframe.d.ts.map +1 -1
- package/dist/client/blocks/library/wireframe.js +3 -2
- package/dist/client/blocks/library/wireframe.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +5 -0
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +17 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +3 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +17 -7
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/connections/catalog.d.ts +17 -3
- package/dist/connections/catalog.d.ts.map +1 -1
- package/dist/connections/catalog.js +16 -1
- package/dist/connections/catalog.js.map +1 -1
- package/dist/connections/reader.d.ts +18 -0
- package/dist/connections/reader.d.ts.map +1 -1
- package/dist/connections/reader.js +41 -0
- package/dist/connections/reader.js.map +1 -1
- package/dist/dashboard-storage/index.d.ts +4 -0
- package/dist/dashboard-storage/index.d.ts.map +1 -0
- package/dist/dashboard-storage/index.js +4 -0
- package/dist/dashboard-storage/index.js.map +1 -0
- package/dist/dashboard-storage/panel-source.d.ts +68 -0
- package/dist/dashboard-storage/panel-source.d.ts.map +1 -0
- package/dist/dashboard-storage/panel-source.js +76 -0
- package/dist/dashboard-storage/panel-source.js.map +1 -0
- package/dist/dashboard-storage/schema.d.ts +562 -0
- package/dist/dashboard-storage/schema.d.ts.map +1 -0
- package/dist/dashboard-storage/schema.js +32 -0
- package/dist/dashboard-storage/schema.js.map +1 -0
- package/dist/dashboard-storage/store.d.ts +62 -0
- package/dist/dashboard-storage/store.d.ts.map +1 -0
- package/dist/dashboard-storage/store.js +227 -0
- package/dist/dashboard-storage/store.js.map +1 -0
- package/dist/deploy/build.d.ts +7 -0
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +78 -14
- package/dist/deploy/build.js.map +1 -1
- package/dist/eject/provider-api-definitions.d.ts +2 -1
- package/dist/eject/provider-api-definitions.d.ts.map +1 -1
- package/dist/eject/provider-api-definitions.js +1 -0
- package/dist/eject/provider-api-definitions.js.map +1 -1
- package/dist/eject/workspace-connections.d.ts.map +1 -1
- package/dist/eject/workspace-connections.js +1 -0
- package/dist/eject/workspace-connections.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +165 -67
- package/dist/extensions/actions.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/jobs/actions/list-recurring-jobs.d.ts +1 -0
- package/dist/jobs/actions/list-recurring-jobs.d.ts.map +1 -1
- package/dist/jobs/actions/list-recurring-jobs.js +1 -0
- package/dist/jobs/actions/list-recurring-jobs.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +17 -2
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +51 -2
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/jobs/tools.d.ts.map +1 -1
- package/dist/jobs/tools.js +32 -2
- package/dist/jobs/tools.js.map +1 -1
- package/dist/localization/default-messages.d.ts +1 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +1 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp-client/index.d.ts +2 -0
- package/dist/mcp-client/index.d.ts.map +1 -1
- package/dist/mcp-client/index.js +5 -0
- package/dist/mcp-client/index.js.map +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +8 -8
- package/dist/provider-api/actions/provider-api.d.ts +8 -6
- package/dist/provider-api/actions/provider-api.d.ts.map +1 -1
- package/dist/provider-api/actions/provider-api.js +1 -1
- package/dist/provider-api/actions/provider-api.js.map +1 -1
- package/dist/provider-api/index.d.ts +11 -7
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +143 -5
- package/dist/provider-api/index.js.map +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +7 -0
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/server/agent-chat/context-tools.d.ts.map +1 -1
- package/dist/server/agent-chat/context-tools.js +9 -0
- package/dist/server/agent-chat/context-tools.js.map +1 -1
- package/dist/server/agent-chat/framework-prompts.js +2 -2
- package/dist/server/agent-chat/framework-prompts.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +18 -2
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +1 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts +4 -3
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +9 -3
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/workspace-provider-oauth.d.ts +6 -1
- package/dist/server/workspace-provider-oauth.d.ts.map +1 -1
- package/dist/server/workspace-provider-oauth.js +141 -4
- package/dist/server/workspace-provider-oauth.js.map +1 -1
- package/dist/styles/agent-native.css +45 -2
- package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/dist/templates/chat/AGENTS.md +1 -1
- package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/dist/templates/default/.agents/skills/app-branding/SKILL.md +159 -0
- package/dist/templates/default/.agents/skills/app-permissions/SKILL.md +155 -0
- package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +31 -18
- package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +15 -0
- package/dist/triggers/actions.d.ts.map +1 -1
- package/dist/triggers/actions.js +10 -2
- package/dist/triggers/actions.js.map +1 -1
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +15 -0
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/triggers/types.d.ts +5 -0
- package/dist/triggers/types.d.ts.map +1 -1
- package/dist/triggers/types.js.map +1 -1
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +4 -1
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/content/agent-native-toolkit.mdx +16 -0
- package/docs/content/recurring-jobs.mdx +35 -6
- package/package.json +7 -3
- package/src/action.ts +22 -1
- package/src/agent/production-agent.ts +122 -3
- package/src/cli/skills-content/visual-plan-skill.ts +19 -2
- package/src/cli/templates-meta.ts +12 -0
- package/src/client/AssistantChat.tsx +53 -26
- package/src/client/agent-page/AgentJobsTab.tsx +19 -0
- package/src/client/agent-page/use-jobs.ts +1 -0
- package/src/client/blocks/library/wireframe.tsx +3 -1
- package/src/client/chat/message-components.tsx +35 -1
- package/src/client/chat/tool-call-display.tsx +38 -3
- package/src/connections/catalog.ts +20 -1
- package/src/connections/reader.ts +65 -0
- package/src/dashboard-storage/index.ts +27 -0
- package/src/dashboard-storage/panel-source.ts +168 -0
- package/src/dashboard-storage/schema.ts +62 -0
- package/src/dashboard-storage/store.ts +333 -0
- package/src/deploy/build.ts +95 -16
- package/src/eject/provider-api-definitions.ts +1 -0
- package/src/eject/workspace-connections.ts +1 -0
- package/src/extensions/actions.ts +199 -73
- package/src/jobs/actions/list-recurring-jobs.ts +2 -0
- package/src/jobs/scheduler.ts +71 -4
- package/src/jobs/tools.ts +31 -1
- package/src/localization/default-messages.ts +1 -0
- package/src/mcp-client/index.ts +6 -0
- package/src/provider-api/actions/provider-api.ts +1 -1
- package/src/provider-api/index.ts +190 -5
- package/src/secrets/register-framework-secrets.ts +8 -0
- package/src/server/agent-chat/context-tools.ts +9 -0
- package/src/server/agent-chat/framework-prompts.ts +2 -2
- package/src/server/agent-chat-plugin.ts +22 -2
- package/src/server/core-routes-plugin.ts +1 -0
- package/src/server/credential-provider.ts +9 -3
- package/src/server/workspace-provider-oauth.ts +181 -4
- package/src/styles/agent-native.css +45 -2
- package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/src/templates/chat/AGENTS.md +1 -1
- package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/src/templates/default/.agents/skills/app-branding/SKILL.md +159 -0
- package/src/templates/default/.agents/skills/app-permissions/SKILL.md +155 -0
- package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +27 -0
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +31 -18
- package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +15 -0
- package/src/triggers/actions.ts +11 -2
- package/src/triggers/dispatcher.ts +20 -1
- package/src/triggers/types.ts +5 -0
- package/src/vite/action-types-plugin.ts +9 -1
- package/corpus/templates/analytics/server/handlers/sql-query.ts +0 -36
- package/corpus/templates/analytics/server/routes/api/sql-query.post.ts +0 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-native-docs
|
|
3
|
+
description: >-
|
|
4
|
+
How to find version-matched Agent Native framework docs and source bundled in
|
|
5
|
+
node_modules. Use before implementing or answering questions about
|
|
6
|
+
@agent-native/core APIs, generated apps, workspaces, templates, or advanced
|
|
7
|
+
features.
|
|
8
|
+
scope: dev
|
|
9
|
+
metadata:
|
|
10
|
+
internal: true
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Agent Native Docs Lookup
|
|
14
|
+
|
|
15
|
+
## Rule
|
|
16
|
+
|
|
17
|
+
Before implementing or explaining non-trivial Agent Native behavior, read the
|
|
18
|
+
version-matched docs installed with `@agent-native/core`. When examples,
|
|
19
|
+
imports, or implementation details matter, inspect the packaged source corpus
|
|
20
|
+
too.
|
|
21
|
+
|
|
22
|
+
## Why
|
|
23
|
+
|
|
24
|
+
Generated apps and workspaces may be on a different framework version than the
|
|
25
|
+
public docs or model memory. The installed package is the source that matches
|
|
26
|
+
the app in front of you. It also includes a source-only corpus of core and
|
|
27
|
+
first-party templates so agents can replicate current best-practice patterns
|
|
28
|
+
without needing the framework monorepo checkout.
|
|
29
|
+
|
|
30
|
+
## How
|
|
31
|
+
|
|
32
|
+
From a generated app directory:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pnpm action docs-search --query "<feature>"
|
|
36
|
+
pnpm action docs-search --slug <slug>
|
|
37
|
+
pnpm action docs-search --list
|
|
38
|
+
pnpm action source-search --query "<pattern>"
|
|
39
|
+
pnpm action source-search --path templates/plan/AGENTS.md
|
|
40
|
+
pnpm action source-search --path toolkit/src/index.ts
|
|
41
|
+
pnpm action source-search --list
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The headless `pnpm agent` loop and built-in app agent also expose a read-only
|
|
45
|
+
`docs-search` tool with the same `query`, `slug`, and `list` options, plus a
|
|
46
|
+
read-only `source-search` tool with `query`, `path`, and `list`.
|
|
47
|
+
|
|
48
|
+
If the action runner is unavailable, search the package directly:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
rg -n "actions|automations|a2a|sharing" node_modules/@agent-native/core/docs
|
|
52
|
+
rg -n "defineAction|useActionQuery" node_modules/@agent-native/core/corpus
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Then read `node_modules/@agent-native/core/docs/AGENTS.md` or the matching file
|
|
56
|
+
under `node_modules/@agent-native/core/docs/content/`. For source examples,
|
|
57
|
+
read files under `node_modules/@agent-native/core/corpus/core/` or
|
|
58
|
+
`node_modules/@agent-native/core/corpus/templates/`.
|
|
59
|
+
|
|
60
|
+
Toolkit source is searchable at `toolkit/` in the Core corpus and also ships as
|
|
61
|
+
readable TypeScript under `node_modules/@agent-native/toolkit/src/`. Read
|
|
62
|
+
`customizing-agent-native` before taking ownership of a shared component: inspect package
|
|
63
|
+
source as a read-only reference, then configure, compose, or eject the smallest
|
|
64
|
+
supported unit into app-owned source. Preserve public actions, application
|
|
65
|
+
state, auth, and agent-chat runtime contracts. Never edit `node_modules` or
|
|
66
|
+
deep-import its private source. Manual copying is only the fallback described by
|
|
67
|
+
an unknown third-party package's add-style blueprint.
|
|
68
|
+
|
|
69
|
+
## Reuse Proven Patterns (rg + cp)
|
|
70
|
+
|
|
71
|
+
Version-matched installed source outranks web docs or memory: it is the exact
|
|
72
|
+
code shipping with this app. `node_modules/@agent-native/core/corpus/templates/`
|
|
73
|
+
holds source for every first-party template, not just the one this app started
|
|
74
|
+
from, so a pattern from the mail template is fair game for a tasks app. Grep
|
|
75
|
+
across it, then copy a whole file as a starting point instead of writing the
|
|
76
|
+
pattern from scratch:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Find how other templates solved a similar problem
|
|
80
|
+
rg -n "drag.*drop|reorder" node_modules/@agent-native/core/corpus/templates
|
|
81
|
+
|
|
82
|
+
# Grab a proven action file as a starting point, then adapt names/schema
|
|
83
|
+
cp node_modules/@agent-native/core/corpus/templates/mail/actions/archive-email.ts \
|
|
84
|
+
actions/archive-item.ts
|
|
85
|
+
|
|
86
|
+
# Read the full framework source behind an API, not just the corpus copy
|
|
87
|
+
rg -n "defineAction" node_modules/@agent-native/core/src/action.ts
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Copying template-level app code (actions, components, skill files) is the
|
|
91
|
+
expected reuse path — templates exist to be forked. This is different from
|
|
92
|
+
copying `core`/`toolkit` **runtime internals**: for those, follow
|
|
93
|
+
`customizing-agent-native`'s configure/compose/eject ladder instead of
|
|
94
|
+
hand-duplicating framework logic.
|
|
95
|
+
|
|
96
|
+
## Useful Slugs
|
|
97
|
+
|
|
98
|
+
| Need | Slugs |
|
|
99
|
+
| ------------------------------ | ------------------------------------------------------------- |
|
|
100
|
+
| Actions and typed client calls | `actions`, `client` |
|
|
101
|
+
| SQL, auth, access, sharing | `database`, `authentication`, `security`, `sharing` |
|
|
102
|
+
| UI state visible to the agent | `context-awareness` |
|
|
103
|
+
| Headless and chat-first apps | `pure-agent-apps`, `agent-surfaces`, `using-your-agent` |
|
|
104
|
+
| Automations and schedules | `automations`, `recurring-jobs` |
|
|
105
|
+
| Cross-app and external agents | `a2a-protocol`, `external-agents`, `mcp-protocol`, `mcp-apps` |
|
|
106
|
+
| Skills and instructions | `skills-guide`, `writing-agent-instructions` |
|
|
107
|
+
|
|
108
|
+
## Don't
|
|
109
|
+
|
|
110
|
+
- Do not rely on memory for framework APIs when package docs are present.
|
|
111
|
+
- Do not add custom REST wrappers for app data before reading `actions`.
|
|
112
|
+
- Do not add inline LLM calls before reading `using-your-agent` and
|
|
113
|
+
`agent-surfaces`.
|
|
114
|
+
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
115
|
+
will do; read `customizing-agent-native` for the supported override ladder.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# React Router generated types
|
|
2
|
+
.react-router/
|
|
3
|
+
|
|
4
|
+
# Logs
|
|
5
|
+
logs
|
|
6
|
+
*.log
|
|
7
|
+
npm-debug.log*
|
|
8
|
+
pnpm-debug.log*
|
|
9
|
+
|
|
10
|
+
node_modules
|
|
11
|
+
dist
|
|
12
|
+
dist-ssr
|
|
13
|
+
*.local
|
|
14
|
+
|
|
15
|
+
# Editor directories and files
|
|
16
|
+
.vscode/*
|
|
17
|
+
!.vscode/extensions.json
|
|
18
|
+
.idea
|
|
19
|
+
.DS_Store
|
|
20
|
+
*.suo
|
|
21
|
+
*.ntvs*
|
|
22
|
+
*.njsproj
|
|
23
|
+
*.sln
|
|
24
|
+
*.sw?
|
|
25
|
+
|
|
26
|
+
# Environment
|
|
27
|
+
.env
|
|
28
|
+
.env.*
|
|
29
|
+
!.env.example
|
|
30
|
+
|
|
31
|
+
# Data
|
|
32
|
+
data/uploads/
|
|
33
|
+
data/settings.json
|
|
34
|
+
data/.sessions.json
|
|
35
|
+
|
|
36
|
+
# Learnings (personal preferences and memory — use learnings.defaults.md for tracked defaults)
|
|
37
|
+
learnings.md
|
|
38
|
+
|
|
39
|
+
.vercel/
|
|
@@ -66,6 +66,33 @@ state, auth, and agent-chat runtime contracts. Never edit `node_modules` or
|
|
|
66
66
|
deep-import its private source. Manual copying is only the fallback described by
|
|
67
67
|
an unknown third-party package's add-style blueprint.
|
|
68
68
|
|
|
69
|
+
## Reuse Proven Patterns (rg + cp)
|
|
70
|
+
|
|
71
|
+
Version-matched installed source outranks web docs or memory: it is the exact
|
|
72
|
+
code shipping with this app. `node_modules/@agent-native/core/corpus/templates/`
|
|
73
|
+
holds source for every first-party template, not just the one this app started
|
|
74
|
+
from, so a pattern from the mail template is fair game for a tasks app. Grep
|
|
75
|
+
across it, then copy a whole file as a starting point instead of writing the
|
|
76
|
+
pattern from scratch:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Find how other templates solved a similar problem
|
|
80
|
+
rg -n "drag.*drop|reorder" node_modules/@agent-native/core/corpus/templates
|
|
81
|
+
|
|
82
|
+
# Grab a proven action file as a starting point, then adapt names/schema
|
|
83
|
+
cp node_modules/@agent-native/core/corpus/templates/mail/actions/archive-email.ts \
|
|
84
|
+
actions/archive-item.ts
|
|
85
|
+
|
|
86
|
+
# Read the full framework source behind an API, not just the corpus copy
|
|
87
|
+
rg -n "defineAction" node_modules/@agent-native/core/src/action.ts
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Copying template-level app code (actions, components, skill files) is the
|
|
91
|
+
expected reuse path — templates exist to be forked. This is different from
|
|
92
|
+
copying `core`/`toolkit` **runtime internals**: for those, follow
|
|
93
|
+
`customizing-agent-native`'s configure/compose/eject ladder instead of
|
|
94
|
+
hand-duplicating framework logic.
|
|
95
|
+
|
|
69
96
|
## Useful Slugs
|
|
70
97
|
|
|
71
98
|
| Need | Slugs |
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# React Router generated types
|
|
2
|
+
.react-router/
|
|
3
|
+
|
|
4
|
+
# Logs
|
|
5
|
+
logs
|
|
6
|
+
*.log
|
|
7
|
+
npm-debug.log*
|
|
8
|
+
pnpm-debug.log*
|
|
9
|
+
|
|
10
|
+
node_modules
|
|
11
|
+
dist
|
|
12
|
+
dist-ssr
|
|
13
|
+
*.local
|
|
14
|
+
|
|
15
|
+
# Editor directories and files
|
|
16
|
+
.vscode/*
|
|
17
|
+
!.vscode/extensions.json
|
|
18
|
+
.idea
|
|
19
|
+
.DS_Store
|
|
20
|
+
*.suo
|
|
21
|
+
*.ntvs*
|
|
22
|
+
*.njsproj
|
|
23
|
+
*.sln
|
|
24
|
+
*.sw?
|
|
25
|
+
|
|
26
|
+
# Environment
|
|
27
|
+
.env
|
|
28
|
+
.env.*
|
|
29
|
+
!.env.example
|
|
30
|
+
|
|
31
|
+
# Data
|
|
32
|
+
data/uploads/
|
|
33
|
+
data/settings.json
|
|
34
|
+
data/.sessions.json
|
|
35
|
+
|
|
36
|
+
# Learnings (personal preferences and memory — use learnings.defaults.md for tracked defaults)
|
|
37
|
+
learnings.md
|
|
38
|
+
|
|
39
|
+
.vercel/
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @agent-native/toolkit
|
|
2
2
|
|
|
3
|
+
## 0.9.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 0341a7d: Add an ejectable dashboard presentation kit with cards, tables, date ranges, chart state rendering, and layout helpers.
|
|
8
|
+
|
|
9
|
+
## 0.8.3
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 5c78d2d: Fix cramped calendar day grid under Tailwind v4 and make the date picker responsive: smaller cell size on mobile, 20% smaller on desktop, and a viewport-bounded popover width.
|
|
14
|
+
|
|
3
15
|
## 0.8.2
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/corpus/toolkit/README.md
CHANGED
|
@@ -28,6 +28,14 @@ import { ToolkitProvider } from "@agent-native/toolkit/provider";
|
|
|
28
28
|
import { ChatHistoryList } from "@agent-native/toolkit/chat-history";
|
|
29
29
|
import { PresenceBar } from "@agent-native/toolkit/collab-ui";
|
|
30
30
|
import { ContextMeterView } from "@agent-native/toolkit/context-ui";
|
|
31
|
+
import {
|
|
32
|
+
DataTable,
|
|
33
|
+
DateRangePicker,
|
|
34
|
+
GenericChartPanel,
|
|
35
|
+
MetricCard,
|
|
36
|
+
StatsCard,
|
|
37
|
+
buildDashboardPanelGroups,
|
|
38
|
+
} from "@agent-native/toolkit/dashboard";
|
|
31
39
|
import { VisualTweakControl } from "@agent-native/toolkit/design-tweaks";
|
|
32
40
|
import { SharedRichEditor } from "@agent-native/toolkit/editor";
|
|
33
41
|
import { VisibilityBadge } from "@agent-native/toolkit/sharing";
|
|
@@ -45,6 +53,28 @@ import `@agent-native/toolkit/chat-history.css`.
|
|
|
45
53
|
Inside template apps, prefer local adapters such as `@/components/ui/button` so
|
|
46
54
|
apps can replace their primitives without changing every callsite.
|
|
47
55
|
|
|
56
|
+
## Dashboard kit
|
|
57
|
+
|
|
58
|
+
`@agent-native/toolkit/dashboard` is an ejectable, presentation-only dashboard
|
|
59
|
+
kit. It includes metric and stats cards, tables, a date-range picker, panel
|
|
60
|
+
ordering and layout helpers, and `GenericChartPanel`. Supply rows, schema, and
|
|
61
|
+
callbacks through app-owned action-backed adapters; the kit never fetches data,
|
|
62
|
+
stores dashboard state, resolves credentials, or imports Core runtime APIs.
|
|
63
|
+
|
|
64
|
+
Inspect or take ownership of the complete unit with:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
agent-native eject inspect toolkit/dashboard
|
|
68
|
+
agent-native eject toolkit/dashboard --app <app> --apply
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
For durable dashboards, use `@agent-native/core/dashboard-storage` in the app's
|
|
72
|
+
server layer. Instantiate its schema and access-scoped store per app, rather
|
|
73
|
+
than sharing dashboard rows between apps. Resolve panel data with a
|
|
74
|
+
`PanelSourceResolver`; the built-in `program` resolver runs an app-owned data
|
|
75
|
+
program and is the zero-wiring default. Provider-specific resolvers stay in the
|
|
76
|
+
app that owns their credentials and query policy.
|
|
77
|
+
|
|
48
78
|
## Customize Or Take Ownership
|
|
49
79
|
|
|
50
80
|
Use public props, slots, callbacks, stable classes, and local adapters first.
|
|
@@ -133,6 +133,7 @@
|
|
|
133
133
|
"@tabler/icons-react",
|
|
134
134
|
"clsx",
|
|
135
135
|
"react",
|
|
136
|
+
"recharts",
|
|
136
137
|
"tailwind-merge"
|
|
137
138
|
],
|
|
138
139
|
"verification": ["pnpm typecheck"]
|
|
@@ -206,6 +207,38 @@
|
|
|
206
207
|
],
|
|
207
208
|
"verification": ["pnpm typecheck"]
|
|
208
209
|
},
|
|
210
|
+
{
|
|
211
|
+
"id": "toolkit/dashboard",
|
|
212
|
+
"label": "Dashboard kit",
|
|
213
|
+
"catalog": "toolkit-ui",
|
|
214
|
+
"catalogItems": ["dashboard"],
|
|
215
|
+
"entrypoints": ["./dashboard", "./dashboard/*"],
|
|
216
|
+
"strategy": "source-copy",
|
|
217
|
+
"sourceEntries": ["src/dashboard"],
|
|
218
|
+
"targetRoot": "app/components/agent-native/toolkit",
|
|
219
|
+
"dependencies": [
|
|
220
|
+
"@radix-ui/react-select",
|
|
221
|
+
"@radix-ui/react-slot",
|
|
222
|
+
"@tabler/icons-react",
|
|
223
|
+
"class-variance-authority",
|
|
224
|
+
"clsx",
|
|
225
|
+
"react",
|
|
226
|
+
"recharts",
|
|
227
|
+
"tailwind-merge"
|
|
228
|
+
],
|
|
229
|
+
"protectedImports": [
|
|
230
|
+
"@agent-native/toolkit/ui/button",
|
|
231
|
+
"@agent-native/toolkit/ui/card",
|
|
232
|
+
"@agent-native/toolkit/ui/select",
|
|
233
|
+
"@agent-native/toolkit/ui/skeleton",
|
|
234
|
+
"@agent-native/toolkit/ui/table",
|
|
235
|
+
"@agent-native/toolkit/utils"
|
|
236
|
+
],
|
|
237
|
+
"verification": [
|
|
238
|
+
"pnpm --filter @agent-native/toolkit typecheck",
|
|
239
|
+
"pnpm --filter @agent-native/toolkit test"
|
|
240
|
+
]
|
|
241
|
+
},
|
|
209
242
|
{
|
|
210
243
|
"id": "toolkit/editor",
|
|
211
244
|
"label": "Rich editor",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/toolkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Reusable app-building UI and helpers for Agent-Native apps.",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -61,6 +61,20 @@
|
|
|
61
61
|
"import": "./dist/collab-ui/*.js",
|
|
62
62
|
"default": "./dist/collab-ui/*.js"
|
|
63
63
|
},
|
|
64
|
+
"./dashboard": {
|
|
65
|
+
"types": "./dist/dashboard/index.d.ts",
|
|
66
|
+
"browser": "./dist/dashboard/index.js",
|
|
67
|
+
"development": "./dist/dashboard/index.js",
|
|
68
|
+
"import": "./dist/dashboard/index.js",
|
|
69
|
+
"default": "./dist/dashboard/index.js"
|
|
70
|
+
},
|
|
71
|
+
"./dashboard/*": {
|
|
72
|
+
"types": "./dist/dashboard/*.d.ts",
|
|
73
|
+
"browser": "./dist/dashboard/*.js",
|
|
74
|
+
"development": "./dist/dashboard/*.js",
|
|
75
|
+
"import": "./dist/dashboard/*.js",
|
|
76
|
+
"default": "./dist/dashboard/*.js"
|
|
77
|
+
},
|
|
64
78
|
"./chat-history": {
|
|
65
79
|
"types": "./dist/chat-history/index.d.ts",
|
|
66
80
|
"browser": "./dist/chat-history/index.js",
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IconArrowsUpDown,
|
|
3
|
+
IconChevronLeft,
|
|
4
|
+
IconChevronRight,
|
|
5
|
+
} from "@tabler/icons-react";
|
|
6
|
+
import { useMemo, useState } from "react";
|
|
7
|
+
|
|
8
|
+
import { Button } from "../ui/button.js";
|
|
9
|
+
import { Card, CardContent, CardHeader, CardTitle } from "../ui/card.js";
|
|
10
|
+
import {
|
|
11
|
+
Select,
|
|
12
|
+
SelectContent,
|
|
13
|
+
SelectItem,
|
|
14
|
+
SelectTrigger,
|
|
15
|
+
SelectValue,
|
|
16
|
+
} from "../ui/select.js";
|
|
17
|
+
import { Skeleton } from "../ui/skeleton.js";
|
|
18
|
+
import {
|
|
19
|
+
Table,
|
|
20
|
+
TableBody,
|
|
21
|
+
TableCell,
|
|
22
|
+
TableHead,
|
|
23
|
+
TableHeader,
|
|
24
|
+
TableRow,
|
|
25
|
+
} from "../ui/table.js";
|
|
26
|
+
import { cn } from "../utils.js";
|
|
27
|
+
|
|
28
|
+
const DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100];
|
|
29
|
+
const TABLE_MIN_HEIGHT_CLASS = "min-h-[386px]";
|
|
30
|
+
|
|
31
|
+
export interface DataTableLabels {
|
|
32
|
+
noData: string;
|
|
33
|
+
rowsPerPage: string;
|
|
34
|
+
of: string;
|
|
35
|
+
previousPage: string;
|
|
36
|
+
nextPage: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface DataTableProps {
|
|
40
|
+
title?: string;
|
|
41
|
+
data: Record<string, unknown>[];
|
|
42
|
+
columns?: string[];
|
|
43
|
+
loading?: boolean;
|
|
44
|
+
error?: string;
|
|
45
|
+
maxRows?: number;
|
|
46
|
+
pageSizeOptions?: number[];
|
|
47
|
+
labels?: Partial<DataTableLabels>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const DEFAULT_LABELS: DataTableLabels = {
|
|
51
|
+
noData: "No data available.",
|
|
52
|
+
rowsPerPage: "Rows per page",
|
|
53
|
+
of: "of",
|
|
54
|
+
previousPage: "Previous page",
|
|
55
|
+
nextPage: "Next page",
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/** A source-agnostic, sortable and paginated dashboard table. */
|
|
59
|
+
export function DataTable({
|
|
60
|
+
title,
|
|
61
|
+
data,
|
|
62
|
+
columns: columnsProp,
|
|
63
|
+
loading,
|
|
64
|
+
error,
|
|
65
|
+
maxRows,
|
|
66
|
+
pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,
|
|
67
|
+
labels: labelOverrides,
|
|
68
|
+
}: DataTableProps) {
|
|
69
|
+
const labels = { ...DEFAULT_LABELS, ...labelOverrides };
|
|
70
|
+
const [sortColumn, setSortColumn] = useState<string | null>(null);
|
|
71
|
+
const [sortDirection, setSortDirection] = useState<"asc" | "desc">("desc");
|
|
72
|
+
const [page, setPage] = useState(0);
|
|
73
|
+
const [pageSize, setPageSize] = useState(pageSizeOptions[0] ?? 10);
|
|
74
|
+
|
|
75
|
+
const columns = useMemo(() => {
|
|
76
|
+
if (columnsProp) return columnsProp;
|
|
77
|
+
return data.length === 0 ? [] : Object.keys(data[0]);
|
|
78
|
+
}, [columnsProp, data]);
|
|
79
|
+
const rows = useMemo(
|
|
80
|
+
() =>
|
|
81
|
+
maxRows != null && data.length > maxRows ? data.slice(0, maxRows) : data,
|
|
82
|
+
[data, maxRows],
|
|
83
|
+
);
|
|
84
|
+
const sortedRows = useMemo(() => {
|
|
85
|
+
if (!sortColumn) return rows;
|
|
86
|
+
return [...rows].sort((a, b) => {
|
|
87
|
+
const aValue = a[sortColumn];
|
|
88
|
+
const bValue = b[sortColumn];
|
|
89
|
+
if (aValue == null && bValue == null) return 0;
|
|
90
|
+
if (aValue == null) return 1;
|
|
91
|
+
if (bValue == null) return -1;
|
|
92
|
+
const comparison =
|
|
93
|
+
typeof aValue === "number" && typeof bValue === "number"
|
|
94
|
+
? aValue - bValue
|
|
95
|
+
: String(aValue).localeCompare(String(bValue));
|
|
96
|
+
return sortDirection === "asc" ? comparison : -comparison;
|
|
97
|
+
});
|
|
98
|
+
}, [rows, sortColumn, sortDirection]);
|
|
99
|
+
const pageCount = Math.ceil(sortedRows.length / pageSize);
|
|
100
|
+
const pagedRows = sortedRows.slice(page * pageSize, (page + 1) * pageSize);
|
|
101
|
+
|
|
102
|
+
const handleSort = (column: string) => {
|
|
103
|
+
if (sortColumn === column) {
|
|
104
|
+
setSortDirection((direction) => (direction === "asc" ? "desc" : "asc"));
|
|
105
|
+
} else {
|
|
106
|
+
setSortColumn(column);
|
|
107
|
+
setSortDirection("desc");
|
|
108
|
+
}
|
|
109
|
+
setPage(0);
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
const content = loading ? (
|
|
113
|
+
<DataTableLoadingSkeleton />
|
|
114
|
+
) : error ? (
|
|
115
|
+
<p className="py-4 text-sm text-destructive">{error}</p>
|
|
116
|
+
) : data.length === 0 ? (
|
|
117
|
+
<p className="py-4 text-center text-sm text-muted-foreground">
|
|
118
|
+
{labels.noData}
|
|
119
|
+
</p>
|
|
120
|
+
) : (
|
|
121
|
+
<div className={cn("overflow-x-auto", TABLE_MIN_HEIGHT_CLASS)}>
|
|
122
|
+
<Table>
|
|
123
|
+
<TableHeader>
|
|
124
|
+
<TableRow>
|
|
125
|
+
{columns.map((column) => (
|
|
126
|
+
<TableHead
|
|
127
|
+
key={column}
|
|
128
|
+
className="cursor-pointer select-none whitespace-nowrap hover:text-foreground"
|
|
129
|
+
onClick={() => handleSort(column)}
|
|
130
|
+
>
|
|
131
|
+
<span className="flex items-center gap-1">
|
|
132
|
+
{column}
|
|
133
|
+
<IconArrowsUpDown
|
|
134
|
+
className={cn(
|
|
135
|
+
"h-3 w-3",
|
|
136
|
+
sortColumn === column
|
|
137
|
+
? "text-foreground"
|
|
138
|
+
: "text-muted-foreground/50",
|
|
139
|
+
)}
|
|
140
|
+
/>
|
|
141
|
+
</span>
|
|
142
|
+
</TableHead>
|
|
143
|
+
))}
|
|
144
|
+
</TableRow>
|
|
145
|
+
</TableHeader>
|
|
146
|
+
<TableBody>
|
|
147
|
+
{pagedRows.map((row, index) => (
|
|
148
|
+
<TableRow key={index}>
|
|
149
|
+
{columns.map((column) => (
|
|
150
|
+
<TableCell
|
|
151
|
+
key={column}
|
|
152
|
+
className="max-w-[300px] truncate whitespace-nowrap"
|
|
153
|
+
>
|
|
154
|
+
{formatValue(row[column])}
|
|
155
|
+
</TableCell>
|
|
156
|
+
))}
|
|
157
|
+
</TableRow>
|
|
158
|
+
))}
|
|
159
|
+
</TableBody>
|
|
160
|
+
</Table>
|
|
161
|
+
{sortedRows.length > (pageSizeOptions[0] ?? 10) && (
|
|
162
|
+
<div className="flex items-center justify-between border-t border-border px-2 py-2 text-xs text-muted-foreground">
|
|
163
|
+
<div className="flex items-center gap-2">
|
|
164
|
+
<span>{labels.rowsPerPage}</span>
|
|
165
|
+
<Select
|
|
166
|
+
value={String(pageSize)}
|
|
167
|
+
onValueChange={(value) => {
|
|
168
|
+
setPageSize(Number(value));
|
|
169
|
+
setPage(0);
|
|
170
|
+
}}
|
|
171
|
+
>
|
|
172
|
+
<SelectTrigger className="h-6 w-16 border-border px-2 py-0 text-xs">
|
|
173
|
+
<SelectValue />
|
|
174
|
+
</SelectTrigger>
|
|
175
|
+
<SelectContent>
|
|
176
|
+
{pageSizeOptions.map((size) => (
|
|
177
|
+
<SelectItem key={size} value={String(size)}>
|
|
178
|
+
{size}
|
|
179
|
+
</SelectItem>
|
|
180
|
+
))}
|
|
181
|
+
</SelectContent>
|
|
182
|
+
</Select>
|
|
183
|
+
</div>
|
|
184
|
+
<div className="flex items-center gap-2">
|
|
185
|
+
<span>
|
|
186
|
+
{page * pageSize + 1}–
|
|
187
|
+
{Math.min((page + 1) * pageSize, sortedRows.length)} {labels.of}{" "}
|
|
188
|
+
{sortedRows.length}
|
|
189
|
+
</span>
|
|
190
|
+
<Button
|
|
191
|
+
aria-label={labels.previousPage}
|
|
192
|
+
variant="ghost"
|
|
193
|
+
size="icon"
|
|
194
|
+
className="h-6 w-6"
|
|
195
|
+
onClick={() => setPage((current) => current - 1)}
|
|
196
|
+
disabled={page === 0}
|
|
197
|
+
>
|
|
198
|
+
<IconChevronLeft className="h-3.5 w-3.5" />
|
|
199
|
+
</Button>
|
|
200
|
+
<Button
|
|
201
|
+
aria-label={labels.nextPage}
|
|
202
|
+
variant="ghost"
|
|
203
|
+
size="icon"
|
|
204
|
+
className="h-6 w-6"
|
|
205
|
+
onClick={() => setPage((current) => current + 1)}
|
|
206
|
+
disabled={page >= pageCount - 1}
|
|
207
|
+
>
|
|
208
|
+
<IconChevronRight className="h-3.5 w-3.5" />
|
|
209
|
+
</Button>
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
)}
|
|
213
|
+
</div>
|
|
214
|
+
);
|
|
215
|
+
|
|
216
|
+
if (!title) return content;
|
|
217
|
+
return (
|
|
218
|
+
<Card className="border-border/50 bg-card">
|
|
219
|
+
<CardHeader>
|
|
220
|
+
<CardTitle className="text-base">{title}</CardTitle>
|
|
221
|
+
</CardHeader>
|
|
222
|
+
<CardContent>{content}</CardContent>
|
|
223
|
+
</Card>
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function formatValue(value: unknown): string {
|
|
228
|
+
if (value == null) return "-";
|
|
229
|
+
if (typeof value === "number")
|
|
230
|
+
return Number.isInteger(value) ? value.toLocaleString() : value.toFixed(4);
|
|
231
|
+
return typeof value === "object" ? JSON.stringify(value) : String(value);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function DataTableLoadingSkeleton() {
|
|
235
|
+
const columnWidths = ["w-24", "w-32", "w-20", "w-28"];
|
|
236
|
+
return (
|
|
237
|
+
<div className={cn("space-y-1", TABLE_MIN_HEIGHT_CLASS)}>
|
|
238
|
+
<div className="overflow-x-auto">
|
|
239
|
+
<div className="min-w-[480px]">
|
|
240
|
+
<div className="grid h-8 grid-cols-4 items-center border-b border-border px-2">
|
|
241
|
+
{columnWidths.map((width, index) => (
|
|
242
|
+
<Skeleton key={index} className={cn("h-3", width)} />
|
|
243
|
+
))}
|
|
244
|
+
</div>
|
|
245
|
+
{Array.from({ length: 10 }).map((_, row) => (
|
|
246
|
+
<div
|
|
247
|
+
key={row}
|
|
248
|
+
className="grid h-8 grid-cols-4 items-center border-b border-border/50 px-2"
|
|
249
|
+
>
|
|
250
|
+
{columnWidths.map((width, column) => (
|
|
251
|
+
<Skeleton
|
|
252
|
+
key={column}
|
|
253
|
+
className={cn(
|
|
254
|
+
"h-3",
|
|
255
|
+
column === 0
|
|
256
|
+
? "w-36"
|
|
257
|
+
: column === 2
|
|
258
|
+
? "ml-auto w-16"
|
|
259
|
+
: width,
|
|
260
|
+
)}
|
|
261
|
+
/>
|
|
262
|
+
))}
|
|
263
|
+
</div>
|
|
264
|
+
))}
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
<div className="flex h-8 items-center justify-between border-t border-border px-2 text-xs">
|
|
268
|
+
<Skeleton className="h-3 w-28" />
|
|
269
|
+
<Skeleton className="h-3 w-24" />
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
);
|
|
273
|
+
}
|