@agent-native/core 0.114.16 → 0.115.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/agent-native.eject.json +2 -0
- package/corpus/README.md +3 -3
- package/corpus/core/CHANGELOG.md +29 -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 +105 -3
- 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/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/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 +83 -3
- package/dist/agent/production-agent.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/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/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.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/observability/routes.d.ts +5 -5
- 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/secrets/routes.d.ts +9 -9
- 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/transcribe-voice.d.ts +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 +6 -2
- package/src/action.ts +22 -1
- package/src/agent/production-agent.ts +105 -3
- 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/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,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: customizing-agent-native
|
|
3
|
+
description: >-
|
|
4
|
+
How to configure, compose, or eject Agent Native features into app-owned
|
|
5
|
+
code. Use when overriding shared components or integrations, customizing a
|
|
6
|
+
template, adding UI to chat or headless apps, or inspecting package source.
|
|
7
|
+
scope: dev
|
|
8
|
+
metadata:
|
|
9
|
+
internal: true
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Customizing Agent Native
|
|
13
|
+
|
|
14
|
+
## Rule
|
|
15
|
+
|
|
16
|
+
Start with the public component and its props, slots, callbacks, and stable
|
|
17
|
+
class names. If those seams are not enough, use the eject CLI to transfer the
|
|
18
|
+
smallest supported feature into the app and make that copy app-owned. Never
|
|
19
|
+
edit `node_modules`, deep-import a private source file at runtime, or patch an
|
|
20
|
+
`@agent-native/*` package.
|
|
21
|
+
|
|
22
|
+
Use this order:
|
|
23
|
+
|
|
24
|
+
1. Configure the public component.
|
|
25
|
+
2. Compose public primitives behind a local app component.
|
|
26
|
+
3. Eject the smallest feature into app-owned source.
|
|
27
|
+
4. Propose a new Toolkit seam when the same override is useful in two apps.
|
|
28
|
+
|
|
29
|
+
Ejection is for intentional product customization, not for hiding an upgrade
|
|
30
|
+
failure or replacing Core runtime behavior.
|
|
31
|
+
|
|
32
|
+
## Eject A Feature
|
|
33
|
+
|
|
34
|
+
Discover and inspect the ejection units published by installed first-party
|
|
35
|
+
packages before changing source:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
agent-native eject --list
|
|
39
|
+
agent-native eject inspect <unit>
|
|
40
|
+
agent-native eject <unit> --app <app>
|
|
41
|
+
agent-native eject <unit> --app <app> --apply
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The command is dry-run by default. It prints the file closure, consumer import
|
|
45
|
+
rewrites, protected package contracts, and verification commands before
|
|
46
|
+
writing. `--apply` copies the package-version-matched source into the app and
|
|
47
|
+
rewrites only imports covered by the unit manifest.
|
|
48
|
+
|
|
49
|
+
Every first-party public ejection unit must have a complete manifest. If one is
|
|
50
|
+
missing, treat that as a framework coverage bug instead of inventing a copy
|
|
51
|
+
recipe. For an unknown third-party package, use the emitted add-style blueprint
|
|
52
|
+
as a starting point. Protected runtime behavior is never copied; follow the
|
|
53
|
+
reported configuration, adapter, or extension seam instead.
|
|
54
|
+
|
|
55
|
+
Applied ejections are recorded in the committed
|
|
56
|
+
`agent-native.ejections.json`, including package version, manifest digest,
|
|
57
|
+
target hashes, and import rewrites. Use the recorded state to review drift or
|
|
58
|
+
undo an unchanged ejection:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
agent-native eject diff <unit> --app <app>
|
|
62
|
+
agent-native eject restore <unit> --app <app>
|
|
63
|
+
agent-native eject restore <unit> --app <app> --apply
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Restore is hash-gated. It refuses to remove locally edited files or reverse
|
|
67
|
+
changed imports and prints their diff instead. Keep an edited ejection as
|
|
68
|
+
app-owned code, or reconcile those edits before restoring it.
|
|
69
|
+
|
|
70
|
+
## Find The Installed Implementation
|
|
71
|
+
|
|
72
|
+
Use the source that matches the installed package version:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pnpm action docs-search --query "<component or feature>"
|
|
76
|
+
pnpm action source-search --query "<component or symbol>"
|
|
77
|
+
rg -n "<component or symbol>" node_modules/@agent-native/toolkit/src
|
|
78
|
+
rg -n "<component or symbol>" node_modules/@agent-native/core/corpus
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
- Toolkit publishes readable TypeScript under
|
|
82
|
+
`node_modules/@agent-native/toolkit/src/` for selective UI adoption.
|
|
83
|
+
- Core and first-party template source lives under
|
|
84
|
+
`node_modules/@agent-native/core/corpus/core/` and
|
|
85
|
+
`node_modules/@agent-native/core/corpus/templates/`.
|
|
86
|
+
- Treat those trees as read-only references. Prefer `agent-native eject` so the
|
|
87
|
+
package manifest selects the complete source closure and rewrites imports.
|
|
88
|
+
Manual inspection is still useful for deciding whether to configure,
|
|
89
|
+
compose, eject, or propose a shared seam.
|
|
90
|
+
|
|
91
|
+
Do not manually guess at sibling dependencies. The ejection manifest owns the
|
|
92
|
+
required file closure and keeps protected contracts on public package imports.
|
|
93
|
+
|
|
94
|
+
## Preserve The Agent-Native Contract
|
|
95
|
+
|
|
96
|
+
UI ownership may change; product contracts should not:
|
|
97
|
+
|
|
98
|
+
- Keep app operations in `defineAction` actions and call them through
|
|
99
|
+
`useActionQuery`, `useActionMutation`, or another named client helper.
|
|
100
|
+
- Keep navigation, selection, and focused-object state visible through the
|
|
101
|
+
existing application-state keys.
|
|
102
|
+
- Keep AI work in the shared agent chat instead of adding direct LLM calls.
|
|
103
|
+
- Keep auth, access checks, persistence, chat transport, and agent execution in
|
|
104
|
+
Core. Do not copy those runtimes into the app.
|
|
105
|
+
- Keep local adapters narrow so package upgrades still improve every surface
|
|
106
|
+
the app has not intentionally taken ownership of.
|
|
107
|
+
|
|
108
|
+
## App Shapes
|
|
109
|
+
|
|
110
|
+
- **Template app:** begin with its existing local adapters and domain UI. Use
|
|
111
|
+
Toolkit for repeated workspace UI; eject only the unit being customized.
|
|
112
|
+
- **Chat app:** keep `AgentChatSurface`, thread state, and chat transport in
|
|
113
|
+
Core. Compose or eject Toolkit presentation such as chat-history UI around it.
|
|
114
|
+
- **Headless app:** stay action-first while no UI is needed. When adding a UI,
|
|
115
|
+
use the Chat template as the on-ramp or add Toolkit components without
|
|
116
|
+
replacing the existing actions.
|
|
117
|
+
- **Workspace:** put one-app overrides in that app. Promote a local component
|
|
118
|
+
to `packages/shared` only when multiple workspace apps use it.
|
|
119
|
+
|
|
120
|
+
## After Ejecting
|
|
121
|
+
|
|
122
|
+
- Commit `agent-native.ejections.json` with the app-owned files and rewrites.
|
|
123
|
+
- Remove unused dependencies and imports from the ejected files.
|
|
124
|
+
- Keep visible text in the app's localization catalogs.
|
|
125
|
+
- Run the manifest verification commands plus the app's formatter, typecheck,
|
|
126
|
+
and focused tests.
|
|
127
|
+
- Re-check the installed source during future package upgrades; the app-owned
|
|
128
|
+
ejection does not receive upstream fixes automatically. Use `eject diff` to
|
|
129
|
+
distinguish recorded output from subsequent local edits.
|
|
130
|
+
|
|
131
|
+
## Don't
|
|
132
|
+
|
|
133
|
+
- Don't edit or import from `node_modules/@agent-native/*/src` at runtime.
|
|
134
|
+
- Don't add `pnpm.overrides`, patches, or resolutions for Agent Native packages.
|
|
135
|
+
- Don't copy Core auth, DB, action, agent-loop, or transport internals.
|
|
136
|
+
- Don't manually copy a first-party unit with a missing recipe; fix its manifest.
|
|
137
|
+
- Don't eject a full package when a prop, slot, wrapper, or smaller unit works.
|
|
138
|
+
|
|
139
|
+
## Related Skills
|
|
140
|
+
|
|
141
|
+
- `agent-native-docs` — version-matched docs and source lookup
|
|
142
|
+
- `agent-native-toolkit` — shared-vs-app-owned architecture boundary
|
|
143
|
+
- `self-modifying-code` — safe app source edits
|
|
144
|
+
- `upgrade-agent-native` — supported package upgrade path
|
|
145
|
+
- `adding-a-feature` — UI/action/instructions/application-state parity
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feature-flags
|
|
3
|
+
description: >-
|
|
4
|
+
Declare, evaluate, manage, and remove framework feature flags. Use when
|
|
5
|
+
shipping a capability gradually, targeting users or organizations, or
|
|
6
|
+
replacing a compile-time rollout switch with a production-safe runtime flag.
|
|
7
|
+
scope: dev
|
|
8
|
+
metadata:
|
|
9
|
+
internal: true
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Feature Flags
|
|
13
|
+
|
|
14
|
+
A feature flag is a boolean declared in app code, evaluated locally by Core,
|
|
15
|
+
and managed from the Analytics fleet control plane. Code owns whether a flag
|
|
16
|
+
exists. Runtime settings own only its rollout state.
|
|
17
|
+
|
|
18
|
+
Flags let an app deploy dormant code and turn it on in the real environment
|
|
19
|
+
without another deployment. They are not experiments: do not add variants,
|
|
20
|
+
hypotheses, conversion metrics, exposure tracking, or lifecycle states.
|
|
21
|
+
|
|
22
|
+
## When to use one
|
|
23
|
+
|
|
24
|
+
Use a flag for a reversible rollout of a user-facing capability whose dormant
|
|
25
|
+
code is safe to deploy. Flags are useful for production dogfooding, exact-user
|
|
26
|
+
or organization pilots, and deterministic percentage rollouts.
|
|
27
|
+
|
|
28
|
+
Do not use a flag for authentication, authorization, secrets, audit enablement,
|
|
29
|
+
SSR cache behavior, or another security boundary. Client hiding is presentation
|
|
30
|
+
only; every guarded server action must evaluate the same registered flag.
|
|
31
|
+
|
|
32
|
+
## Agent workflow
|
|
33
|
+
|
|
34
|
+
### 1. Declare
|
|
35
|
+
|
|
36
|
+
Keep definitions in a shared TypeScript module so server and client code use the
|
|
37
|
+
same stable key. Flags are boolean and default-off.
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
import { defineFeatureFlag } from "@agent-native/core/feature-flags/registry";
|
|
41
|
+
|
|
42
|
+
export const FULL_APP_BUILDING = defineFeatureFlag({
|
|
43
|
+
key: "full-app-building",
|
|
44
|
+
displayName: "Full app building",
|
|
45
|
+
description: "Create and edit Fusion-backed applications.",
|
|
46
|
+
});
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Keys are immutable, never reused, and contain only letters, numbers, dots,
|
|
50
|
+
underscores, or hyphens. Prefer a concise app-owned name. Do not create flag
|
|
51
|
+
definitions or rollout rows from Analytics.
|
|
52
|
+
|
|
53
|
+
### 2. Register
|
|
54
|
+
|
|
55
|
+
Register app definitions from a Nitro plugin before actions are discovered.
|
|
56
|
+
Do not add app-specific flags to a Core registry.
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import { createFeatureFlagsPlugin } from "@agent-native/core/server";
|
|
60
|
+
|
|
61
|
+
import { FULL_APP_BUILDING } from "../../shared/feature-flags.js";
|
|
62
|
+
|
|
63
|
+
export default createFeatureFlagsPlugin({ flags: [FULL_APP_BUILDING] });
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 3. Guard server and client
|
|
67
|
+
|
|
68
|
+
The server action is the enforcement boundary:
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import { isFeatureFlagEnabled } from "@agent-native/core/feature-flags";
|
|
72
|
+
|
|
73
|
+
run: async (args, ctx) => {
|
|
74
|
+
if (!(await isFeatureFlagEnabled(FULL_APP_BUILDING, ctx))) {
|
|
75
|
+
throw new Error("Full app building is not enabled for this account.");
|
|
76
|
+
}
|
|
77
|
+
// guarded operation
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Use the client hook only to hide or reveal hydrated UI:
|
|
82
|
+
|
|
83
|
+
```tsx
|
|
84
|
+
import { useFeatureFlag } from "@agent-native/core/client/feature-flags";
|
|
85
|
+
|
|
86
|
+
const enabled = useFeatureFlag(FULL_APP_BUILDING.key);
|
|
87
|
+
return enabled ? <FullAppOption /> : null;
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The client hook intentionally returns false while loading or for an unknown
|
|
91
|
+
flag. Never replace that fail-closed behavior with app-local bucketing or a
|
|
92
|
+
compile-time fallback. Never evaluate personalized flags in the public SSR
|
|
93
|
+
shell; it is shared and cached for every visitor.
|
|
94
|
+
|
|
95
|
+
### 4. Verify and roll out
|
|
96
|
+
|
|
97
|
+
1. Verify the off path before changing rollout state.
|
|
98
|
+
2. Confirm the registered flag appears in **Analytics → Feature flags** for the
|
|
99
|
+
app and is Off by default.
|
|
100
|
+
3. Use **Enable for me** for initial production dogfood.
|
|
101
|
+
4. Expand to exact emails, organization IDs, or a percentage only from
|
|
102
|
+
Analytics.
|
|
103
|
+
5. Confirm the client presentation and authoritative server action agree.
|
|
104
|
+
|
|
105
|
+
## Management contract
|
|
106
|
+
|
|
107
|
+
Core mounts three actions in registered apps:
|
|
108
|
+
|
|
109
|
+
| Action | Purpose |
|
|
110
|
+
| --- | --- |
|
|
111
|
+
| `get-feature-flags` | Return the current caller's evaluated boolean values. |
|
|
112
|
+
| `list-feature-flags` | Return definitions and rollout metadata to an authorized operator. |
|
|
113
|
+
| `set-feature-flag` | Atomically turn a flag off, enable it for the operator, or replace targeting rules. |
|
|
114
|
+
|
|
115
|
+
Analytics calls the app-local operator actions through narrowly scoped A2A
|
|
116
|
+
delegation. Tokens require an exact audience, organization, scope, operator
|
|
117
|
+
role, and audit correlation id. Management is permission-checked and audited
|
|
118
|
+
by the target app. Never manage flags through generic settings routes, raw SQL,
|
|
119
|
+
or per-app toggle UIs.
|
|
120
|
+
|
|
121
|
+
## Rollout semantics
|
|
122
|
+
|
|
123
|
+
The operator modes are **Off**, **Targeted**, and **Everyone**. Core stores them
|
|
124
|
+
as `off`, `rules`, and `on`.
|
|
125
|
+
|
|
126
|
+
Targeted rules combine exact normalized emails, exact organization IDs, and a
|
|
127
|
+
percentage with OR semantics. Exact matches are checked first. Percentage
|
|
128
|
+
buckets use Core's stable hash of the flag key and authenticated user identity;
|
|
129
|
+
anonymous callers fail closed. Raising a percentage preserves the users already
|
|
130
|
+
included at a lower percentage. Do not implement bucketing in app code.
|
|
131
|
+
|
|
132
|
+
Unknown definitions, missing state, malformed state, storage errors, and
|
|
133
|
+
evaluation errors all return the code default (`false` in v1). Explicit Off
|
|
134
|
+
wins over every target; Everyone enables every authenticated caller.
|
|
135
|
+
|
|
136
|
+
## Remove a flag
|
|
137
|
+
|
|
138
|
+
After a rollout is permanent:
|
|
139
|
+
|
|
140
|
+
1. Replace guarded branches with the chosen behavior.
|
|
141
|
+
2. Delete the server and client gates.
|
|
142
|
+
3. Delete the definition and registration entry.
|
|
143
|
+
4. Verify the flag disappears from the Analytics fleet.
|
|
144
|
+
5. Remove stale tests and rollout instructions.
|
|
145
|
+
|
|
146
|
+
A permanent flag is just an if statement with a pension plan.
|
|
147
|
+
|
|
148
|
+
## Verification checklist
|
|
149
|
+
|
|
150
|
+
- Unknown and unregistered keys evaluate false.
|
|
151
|
+
- UI hiding and server enforcement use the same registered key.
|
|
152
|
+
- Exact-user, organization, deterministic percentage, Everyone, and Off paths
|
|
153
|
+
have focused tests.
|
|
154
|
+
- Increasing a percentage is monotonic; anonymous percentage evaluation is off.
|
|
155
|
+
- Unauthorized callers cannot list targeting details or mutate flags.
|
|
156
|
+
- Mutations are atomic, read back stored state, emit refresh, and appear in the
|
|
157
|
+
audit log with the flag key.
|
|
158
|
+
- Analytics represents ready, no-definition, unsupported, forbidden, legacy,
|
|
159
|
+
and unreachable directory apps honestly.
|
|
160
|
+
- Future agents can find this skill from root `AGENTS.md`, and
|
|
161
|
+
`pnpm guard:workspace-skills` passes after syncing generated copies.
|
|
162
|
+
|
|
163
|
+
## Related skills
|
|
164
|
+
|
|
165
|
+
- **adding-a-feature** — preserve UI/action/instruction/application-state parity
|
|
166
|
+
- **actions** — define and call guarded app operations
|
|
167
|
+
- **audit-log** — inspect automatic action mutation history
|
|
168
|
+
- **reliable-mutations** — make rollout changes atomic and provable
|
|
169
|
+
- **security** — keep security controls out of feature flags
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: upgrade-agent-native
|
|
3
|
+
description: >-
|
|
4
|
+
Bring an older Agent Native app or workspace current. Use when updating
|
|
5
|
+
@agent-native/core, fixing a broken upgrade, or when tempted to patch or
|
|
6
|
+
override core/dispatch packages to make an old branch run.
|
|
7
|
+
scope: dev
|
|
8
|
+
metadata:
|
|
9
|
+
internal: true
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Upgrade Agent Native
|
|
13
|
+
|
|
14
|
+
## Rule
|
|
15
|
+
|
|
16
|
+
When an older Agent Native app/branch needs to run on current packages, use
|
|
17
|
+
`agent-native upgrade`. Never "fix" upgrade breakage with
|
|
18
|
+
`pnpm.overrides`, `patchedDependencies`, `resolutions`, local patches, or
|
|
19
|
+
edits under `node_modules/@agent-native/*` — especially not against
|
|
20
|
+
`@agent-native/core` or `@agent-native/dispatch`.
|
|
21
|
+
|
|
22
|
+
## Why
|
|
23
|
+
|
|
24
|
+
Agents often respond to a failed core bump by inventing framework patches and
|
|
25
|
+
dispatch behavior overrides. That hides the real app-level break, drifts from
|
|
26
|
+
upstream, and makes the next upgrade worse. The supported path is bump →
|
|
27
|
+
install → refresh scaffold skills → verify, then fix **app** code only.
|
|
28
|
+
|
|
29
|
+
## How
|
|
30
|
+
|
|
31
|
+
1. **Preview migration codemods first**
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npx @agent-native/core@latest upgrade --codemods
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Codemods are preview-by-default: read the diff before applying it. Do not
|
|
38
|
+
manually edit imports before running this command; the migration manifest is
|
|
39
|
+
the source of truth for renamed specifiers and symbols.
|
|
40
|
+
|
|
41
|
+
2. **Apply the reviewed codemods, then run the upgrade**
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx @agent-native/core@latest upgrade --codemods --yes
|
|
45
|
+
npx @agent-native/core@latest upgrade
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Or from an already-installed CLI: `pnpm exec agent-native upgrade` /
|
|
49
|
+
`agent-native upgrade`.
|
|
50
|
+
|
|
51
|
+
What it does:
|
|
52
|
+
|
|
53
|
+
- Blocks (unless `--force`) when `@agent-native/*` overrides/patches exist
|
|
54
|
+
- Rewrites non-local `@agent-native/*` dependency pins to `latest`
|
|
55
|
+
- Runs the package manager install
|
|
56
|
+
- Runs `skills update scaffold --project`
|
|
57
|
+
- Runs `typecheck` when the project has that script
|
|
58
|
+
|
|
59
|
+
3. **If upgrade or typecheck fails**
|
|
60
|
+
|
|
61
|
+
- Read the concrete error
|
|
62
|
+
- Fix **app** source, actions, config, or env — not framework packages
|
|
63
|
+
- Re-run `agent-native upgrade` or `pnpm typecheck`
|
|
64
|
+
- Stop and ask the user if you cannot fix the app-level error
|
|
65
|
+
|
|
66
|
+
Intentional app-level UI customization is a separate workflow. Read
|
|
67
|
+
`customizing-agent-native` when the product needs to own a selectively
|
|
68
|
+
copied component; do not use that path to reproduce framework runtime
|
|
69
|
+
behavior or hide version skew.
|
|
70
|
+
|
|
71
|
+
4. **Dry-run / partial runs**
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
agent-native upgrade --dry-run
|
|
75
|
+
agent-native upgrade --skip-verify
|
|
76
|
+
agent-native upgrade --skip-install # package.json bumps only
|
|
77
|
+
agent-native doctor --only migration-manifest
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`migration-manifest` has no opt-out. Run it in CI before upgrading to find
|
|
81
|
+
imports that will break, then use `npx @agent-native/core@latest upgrade --codemods`
|
|
82
|
+
to preview the supported rewrite.
|
|
83
|
+
|
|
84
|
+
## Don't
|
|
85
|
+
|
|
86
|
+
- Don't add `pnpm.overrides`, `overrides`, `resolutions`, or
|
|
87
|
+
`patchedDependencies` for any `@agent-native/*` package
|
|
88
|
+
- Don't edit `node_modules/@agent-native/core` or
|
|
89
|
+
`node_modules/@agent-native/dispatch`
|
|
90
|
+
- Don't invent local "dispatch behavior" shims to paper over version skew
|
|
91
|
+
- Don't keep iterating with more framework patches after a failed install
|
|
92
|
+
- Don't skip `skills update scaffold --project` after a core bump (the
|
|
93
|
+
upgrade command does this for you)
|
|
94
|
+
|
|
95
|
+
## Related Skills
|
|
96
|
+
|
|
97
|
+
- **self-modifying-code** — Tier 4: framework packages are off limits
|
|
98
|
+
- **agent-native-docs** — version-matched docs after the bump
|
|
99
|
+
- **customizing-agent-native** — intentional app-owned UI copies, not upgrade patches
|
|
100
|
+
- **portability** — keep app code provider-agnostic across upgrades
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# CRM — Agent Guide
|
|
2
|
+
|
|
3
|
+
CRM is a standalone Native SQL CRM and a HubSpot/Salesforce Connected/Hybrid
|
|
4
|
+
companion. Actions are the shared contract for UI, agent chat, HTTP, MCP, A2A,
|
|
5
|
+
and CLI. Read `shared/crm-contract.ts` before changing CRM semantics; it is the
|
|
6
|
+
source of truth for vocabulary, field policies, provenance, provider identity,
|
|
7
|
+
and write policy.
|
|
8
|
+
|
|
9
|
+
## Hard boundaries
|
|
10
|
+
|
|
11
|
+
- Native SQL, HubSpot, and Salesforce are the initial modes. Native SQL is
|
|
12
|
+
local-authoritative, requires no external connection, and stays portable
|
|
13
|
+
across SQLite, Postgres, and D1.
|
|
14
|
+
- Workspace Connections own provider credentials. Never ask for, store, log,
|
|
15
|
+
or expose provider tokens.
|
|
16
|
+
- The local mirror is scoped and thin. Unknown fields are remote-only;
|
|
17
|
+
sensitive fields default to redacted; only allow-listed fields are mirrored.
|
|
18
|
+
- Never store raw provider payloads, transcripts, audio, video, screenshots,
|
|
19
|
+
base64, or file bodies in SQL. Evidence is a URL/id plus bounded quote,
|
|
20
|
+
timestamp, speaker, and source metadata.
|
|
21
|
+
- Do not merge identities from email/domain matches. Preserve the provider
|
|
22
|
+
identity tuple and directional relationships.
|
|
23
|
+
|
|
24
|
+
## Actions
|
|
25
|
+
|
|
26
|
+
| Action | Purpose |
|
|
27
|
+
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
|
28
|
+
| `get-crm-overview` | Read the scoped CRM summary and connection/mirror health. |
|
|
29
|
+
| `configure-native-crm` | Start a local-authoritative Native SQL CRM without a provider connection. |
|
|
30
|
+
| `configure-crm-connection` | Register an authorized HubSpot or Salesforce workspace Connection for the companion mirror. |
|
|
31
|
+
| `list-crm-records` | List a bounded set of CRM records using declared filters. |
|
|
32
|
+
| `get-crm-record` | Read one record and its permitted scoped detail. |
|
|
33
|
+
| `sync-crm` | Refresh a declared mirror cohort; never treat it as an export-all operation. |
|
|
34
|
+
| `list-crm-saved-views` / `save-crm-saved-view` | List or save scoped CRM views. |
|
|
35
|
+
| `install-crm-pipeline-dashboard` | Idempotently verify and install the CRM-owned Pipeline dashboard and data program. |
|
|
36
|
+
| `get-crm-pipeline-data` | Read bounded, access-scoped opportunity totals by stage for the dashboard program. |
|
|
37
|
+
| `get-crm-dashboard` / `list-crm-dashboards` / `save-crm-dashboard` | Read, list, or revision-write access-scoped Pipeline dashboards. |
|
|
38
|
+
| `list-crm-dashboard-revisions` / `restore-crm-dashboard-revision` | Inspect and restore a dashboard's bounded revision history. |
|
|
39
|
+
| `list-crm-tasks` / `manage-crm-task` | Read and manage CRM follow-up tasks. |
|
|
40
|
+
| `update-crm-record` | Submit a typed, access-checked, revision-aware record mutation. |
|
|
41
|
+
| `list-crm-proposals` / `apply-crm-proposals` | Review provider proposals and record the upstream handoff. |
|
|
42
|
+
| `attach-call-evidence` | Attach a bounded call evidence reference; never attach a transcript or media. |
|
|
43
|
+
| `get-crm-automation-recipe` | Return the default-off, record-selected Clips call-evidence review recipe. |
|
|
44
|
+
| `create-crm-signal-tracker` / `list-crm-signal-trackers` / `manage-crm-signal-tracker` | Create, inspect, enable, disable, or delete access-scoped keyword and delegated-agent moment detectors. |
|
|
45
|
+
| `run-crm-signal-trackers` / `list-crm-signal-hits` | Find deterministic hits and prepare bounded smart/summary agent work. |
|
|
46
|
+
| `record-crm-smart-signal` / `record-crm-call-insight` | Persist only evidence-grounded delegated results as reviewable signals. |
|
|
47
|
+
| `review-crm-signal` | Confirm or dismiss one grounded CRM signal. |
|
|
48
|
+
| `view-screen` | Read current navigation, selection, and visible CRM context. |
|
|
49
|
+
| `navigate` | Move the UI to overview, records, tasks, proposals, or settings. |
|
|
50
|
+
| `provider-api-catalog` / `provider-api-docs` / `provider-api-request` | Discover and make authorized, read-only exact provider API requests. |
|
|
51
|
+
| `query-staged-dataset` | Reduce staged, paginated provider results for broad analyses. |
|
|
52
|
+
| data program, automation, extension surfaces | Use shared framework capabilities under their scoped access and data limits. |
|
|
53
|
+
|
|
54
|
+
## Agent behavior
|
|
55
|
+
|
|
56
|
+
- Call `view-screen` before acting on “this record,” “these accounts,” the
|
|
57
|
+
selected row, or a visible saved view. For standalone read requests, call the
|
|
58
|
+
focused CRM action directly.
|
|
59
|
+
- Navigate before presenting a requested CRM view. Keep visible context aligned
|
|
60
|
+
with the action result.
|
|
61
|
+
- For a standalone CRM, use `configure-native-crm`; then create and update
|
|
62
|
+
local-authoritative records through the normal CRM actions. Do not call
|
|
63
|
+
`sync-crm`, provider API actions, or require a workspace Connection for
|
|
64
|
+
Native SQL.
|
|
65
|
+
- Use first-class actions for ordinary workflows. For an exact HubSpot or Salesforce API
|
|
66
|
+
request that actions cannot express, discover it with provider API actions,
|
|
67
|
+
fetch it with explicit pagination, then stage/reduce large results. Report
|
|
68
|
+
source, scope, filters, counts, pagination, and uncertainty.
|
|
69
|
+
- Agent provider changes are normally proposals. Changes involving ownership,
|
|
70
|
+
amounts, stage, deletion, bulk scope, or external side effects require an
|
|
71
|
+
exact preview and approval. This release does not complete provider writes:
|
|
72
|
+
review the proposal, direct the user to make the change in HubSpot or
|
|
73
|
+
Salesforce, and never claim the upstream change succeeded.
|
|
74
|
+
- A stored automation may execute only the `crm-sales-routine-local-v1` pack:
|
|
75
|
+
one routine, compensatable local update to one record. The trigger dispatcher,
|
|
76
|
+
not action input, supplies that policy context. Provider updates remain
|
|
77
|
+
proposals; ownership, amount, stage, deletion, bulk, and external effects
|
|
78
|
+
stay approval-gated or denied.
|
|
79
|
+
- Use `run-crm-signal-trackers` for attached Clips evidence. Keyword detectors
|
|
80
|
+
run locally; smart detectors and call summaries are delegated through agent
|
|
81
|
+
chat. Record only exact, bounded evidence citations through the signal record
|
|
82
|
+
actions. Never pass or reconstruct a transcript.
|
|
83
|
+
- Manage a tracker only with editor access. Enabling, disabling, and deleting a
|
|
84
|
+
tracker are local CRM configuration changes: they never invoke a model or
|
|
85
|
+
mutate a connected provider. Use `navigate` with
|
|
86
|
+
`{ view: "settings", settingsSection: "intelligence" }` to open its settings tab.
|
|
87
|
+
- The Clips review recipe is default-off and always scoped to one explicit CRM
|
|
88
|
+
record. It may subscribe to `clip.created` only after the user explicitly
|
|
89
|
+
approves the exact A2A activation call. The trigger belongs to Clips, where
|
|
90
|
+
`clip.created` is registered. It must ignore the event URL, call
|
|
91
|
+
`prepare-crm-call-evidence` with the event clip ID, and send only that bounded
|
|
92
|
+
durable HTTPS `/r/<id>` reference back to `attach-call-evidence` for the
|
|
93
|
+
selected record. It rejects media, tokens, transcripts, inferred records,
|
|
94
|
+
tasks, field/provider writes, and broader scopes. Use
|
|
95
|
+
`get-crm-automation-recipe` before configuring this flow.
|
|
96
|
+
- Use `install-crm-pipeline-dashboard` to set up the Pipeline view. It owns one
|
|
97
|
+
per-user data program that calls `get-crm-pipeline-data`; do not replace it
|
|
98
|
+
with a provider-specific action or embed raw rows in dashboard config. Use
|
|
99
|
+
`save-crm-dashboard` with `expectedUpdatedAt` for dashboard edits, and
|
|
100
|
+
`restore-crm-dashboard-revision` to roll back a saved revision.
|
|
101
|
+
|
|
102
|
+
## Four-area change guide
|
|
103
|
+
|
|
104
|
+
When changing a provider workflow, keep UI, actions, agent instructions, and
|
|
105
|
+
application state aligned. The setup route records the selected native mode or
|
|
106
|
+
connection; `configure-native-crm`, `configure-crm-connection`, and `sync-crm`
|
|
107
|
+
are the shared UI/agent operations; signal selection stores record/evidence IDs
|
|
108
|
+
only; `view-screen` and `navigate` expose the selected CRM context. Do not introduce provider-specific API routes, browser
|
|
109
|
+
credential inputs, or unscoped state.
|
|
110
|
+
|
|
111
|
+
## Implementation
|
|
112
|
+
|
|
113
|
+
Before building common workspace or agent UI, read `agent-native-toolkit`; use
|
|
114
|
+
`customizing-agent-native` when composing or ejecting shared surfaces.
|
|
115
|
+
|
|
116
|
+
Use `defineAction` and action hooks rather than duplicate `/api` CRUD routes.
|
|
117
|
+
Use shared Toolkit surfaces for connections, settings, navigation, sharing,
|
|
118
|
+
automations, and extensions before adding app-local equivalents. Keep SQL
|
|
119
|
+
schema changes additive and preserve access-scope checks independently from
|
|
120
|
+
provider permissions.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# CRM changelog
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# CRM — Development Guide
|
|
2
|
+
|
|
3
|
+
CRM is a React Router + Nitro Agent Native template. The UI and agent share the
|
|
4
|
+
same `actions/` contract; normal client reads and writes use action hooks, not
|
|
5
|
+
custom CRUD routes.
|
|
6
|
+
|
|
7
|
+
## Commands
|
|
8
|
+
|
|
9
|
+
- `pnpm dev` — run the local app
|
|
10
|
+
- `pnpm typecheck` — run the framework typecheck
|
|
11
|
+
- `pnpm test` — run unit tests
|
|
12
|
+
- `pnpm build` — build the React Router and Nitro app
|
|
13
|
+
|
|
14
|
+
## Architecture boundaries
|
|
15
|
+
|
|
16
|
+
- `shared/crm-contract.ts` is the canonical CRM vocabulary and provider-neutral
|
|
17
|
+
contract.
|
|
18
|
+
- `actions/` contains UI/agent operations. Read actions are GET; mutations use
|
|
19
|
+
the shared action surface and must preserve access checks and audit behavior.
|
|
20
|
+
- `server/` owns provider adapters, scoped mirror lifecycle, and startup
|
|
21
|
+
plugins. Use a route only for protocols actions cannot model.
|
|
22
|
+
- `app/` owns the persistent workspace shell and domain views. Keep normal
|
|
23
|
+
data fetching client-side through `useActionQuery` and `useActionMutation`.
|
|
24
|
+
|
|
25
|
+
## Data and provider rules
|
|
26
|
+
|
|
27
|
+
CRM SQL is a thin projection, not a raw HubSpot backup. Only allow-listed
|
|
28
|
+
fields are mirrored; remote-only values are fetched ephemerally and redacted
|
|
29
|
+
values are never fetched or exposed. Store evidence as bounded references and
|
|
30
|
+
quotes only. Raw provider responses, transcripts, media, screenshots, and file
|
|
31
|
+
bodies belong in their source system or approved blob storage, never SQL.
|
|
32
|
+
|
|
33
|
+
Use workspace Connections for credentials. Never add provider tokens to source,
|
|
34
|
+
fixtures, docs, logs, or `.env.example`. Provider API actions are the escape
|
|
35
|
+
hatch for legitimate unmodeled HubSpot or Salesforce requests; stage large
|
|
36
|
+
results and reduce them via data programs instead of loading an unbounded
|
|
37
|
+
payload into chat.
|
|
38
|
+
|
|
39
|
+
## Dashboards
|
|
40
|
+
|
|
41
|
+
CRM owns its dashboard schema, revision history, access policy, data programs,
|
|
42
|
+
and panel resolvers. It composes `@agent-native/toolkit/dashboard` for cards,
|
|
43
|
+
tables, layout, and chart rendering only; never add fetching, provider tokens,
|
|
44
|
+
or direct SQL access to Toolkit components. The Pipeline dashboard is installed
|
|
45
|
+
idempotently through `install-crm-pipeline-dashboard` and reads its bounded
|
|
46
|
+
opportunity data through `get-crm-pipeline-data`.
|
|
47
|
+
|
|
48
|
+
`@agent-native/core/dashboard-storage` is instantiated per app. Keep CRM's
|
|
49
|
+
dashboard rows and revisions scoped through its store, and use the `program`
|
|
50
|
+
panel source for CRM-owned data programs. Add a provider panel source only when
|
|
51
|
+
the CRM adapter can enforce the workspace connection, field policy, and access
|
|
52
|
+
scope.
|
|
53
|
+
|
|
54
|
+
## Signals and provider writes
|
|
55
|
+
|
|
56
|
+
Call evidence is a Clips-owned artifact reference. CRM may store only bounded
|
|
57
|
+
quotes, timestamps, evidence references, confidence, detector/model metadata,
|
|
58
|
+
and review state; it must never store a transcript body, media, or provider
|
|
59
|
+
payload. Keyword trackers run locally. Smart trackers and call summaries must
|
|
60
|
+
delegate to the agent chat, then validate evidence before persisting a signal.
|
|
61
|
+
|
|
62
|
+
Keep provider mutations proposal-first. `update-crm-record` records a
|
|
63
|
+
revision-aware, idempotent proposal for provider-authoritative fields;
|
|
64
|
+
`apply-crm-proposals` is the only path that can invoke an adapter after
|
|
65
|
+
approval. Delegated policy is narrow, access-scoped, and never bypasses the
|
|
66
|
+
field firewall or destructive/bulk gates.
|