@agent-native/core 0.152.1 → 0.153.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/corpus/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/adding-a-feature/SKILL.md +208 -0
- package/corpus/templates/analytics/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +6 -4
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/analytics/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/analytics/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/analytics/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/analytics/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/analytics/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/analytics/actions/data-source-status.ts +4 -1
- package/corpus/templates/analytics/actions/migrate-first-party-analytics-to-bigquery.ts +2 -2
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +7 -2
- package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +7 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +30 -32
- package/corpus/templates/analytics/app/components/layout/layout-route-policy.ts +10 -0
- package/corpus/templates/analytics/app/global.css +5 -1
- package/corpus/templates/analytics/app/lib/data-source-status.ts +3 -3
- package/corpus/templates/analytics/app/lib/resource-access.ts +6 -1
- package/corpus/templates/analytics/app/pages/DataSources.tsx +79 -51
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +1 -0
- package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +1 -0
- package/corpus/templates/analytics/changelog/2026-08-12-analytics-sidebar-ask-toggle-and-compact-rail.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-12-data-source-statuses-now-distinguish-workspace-access-from-c.md +6 -0
- package/corpus/templates/analytics/server/jobs/analytics-bigquery-backfill.ts +559 -147
- package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +79 -5
- package/corpus/templates/analytics/server/plugins/db.ts +84 -0
- package/corpus/templates/assets/.agents/skills/adding-a-feature/SKILL.md +208 -0
- package/corpus/templates/assets/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/assets/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/assets/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/assets/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/assets/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/assets/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/assets/app/components/asset/AssetPreviewDialog.tsx +13 -5
- package/corpus/templates/assets/app/lib/asset-urls.ts +13 -0
- package/corpus/templates/assets/app/routes/asset.$id.tsx +16 -6
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +1 -0
- package/corpus/templates/assets/app/routes/library.tsx +336 -78
- package/corpus/templates/assets/shared/api.ts +1 -1
- package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +3 -2
- package/corpus/templates/brain/.agents/skills/brain/SKILL.md +8 -6
- package/corpus/templates/brain/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +7 -0
- package/corpus/templates/brain/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/brain/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/brain/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/brain/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/brain/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/brain/AGENTS.md +2 -1
- package/corpus/templates/brain/actions/ask-brain.ts +19 -16
- package/corpus/templates/brain/actions/create-source.ts +11 -2
- package/corpus/templates/brain/actions/import-markdown-files.ts +237 -0
- package/corpus/templates/brain/actions/resanitize-captures.ts +3 -1
- package/corpus/templates/brain/actions/test-slack-connection.ts +12 -3
- package/corpus/templates/brain/actions/update-source.ts +10 -1
- package/corpus/templates/brain/app/components/brain/Surface.tsx +1 -11
- package/corpus/templates/brain/app/i18n-data.ts +111 -0
- package/corpus/templates/brain/app/lib/brain.ts +23 -1
- package/corpus/templates/brain/app/routes/knowledge.tsx +0 -2
- package/corpus/templates/brain/app/routes/ops.tsx +0 -2
- package/corpus/templates/brain/app/routes/review.tsx +0 -2
- package/corpus/templates/brain/app/routes/search.tsx +0 -2
- package/corpus/templates/brain/app/routes/sources.tsx +354 -6
- package/corpus/templates/brain/server/lib/brain-response-guard.ts +63 -1
- package/corpus/templates/brain/server/lib/brain.ts +9 -6
- package/corpus/templates/brain/server/lib/connectors.ts +20 -6
- package/corpus/templates/brain/server/lib/search.ts +9 -1
- package/corpus/templates/brain/server/lib/source-credentials.ts +95 -57
- package/corpus/templates/brain/server/plugins/agent-chat.ts +5 -2
- package/corpus/templates/brain/server/plugins/auth.ts +2 -0
- package/corpus/templates/calendar/.agents/skills/adding-a-feature/SKILL.md +208 -0
- package/corpus/templates/calendar/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/calendar/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/calendar/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/calendar/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/calendar/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/calendar/app/components/calendar/DayView.tsx +3 -2
- package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +3 -2
- package/corpus/templates/calendar/app/lib/event-layout.ts +16 -35
- package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +1 -0
- package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
- package/corpus/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/chat/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/chat/AGENTS.md +4 -5
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/clips/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/clips/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/clips/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/clips/actions/add-comment.ts +1 -2
- package/corpus/templates/clips/actions/delete-comment.ts +2 -0
- package/corpus/templates/clips/actions/get-recording-insights.ts +9 -8
- package/corpus/templates/clips/actions/get-recording-player-data.ts +4 -1
- package/corpus/templates/clips/actions/react-to-comment.ts +1 -1
- package/corpus/templates/clips/actions/react-to-recording.ts +1 -1
- package/corpus/templates/clips/actions/reply-to-comment.ts +1 -1
- package/corpus/templates/clips/actions/resolve-comment.ts +1 -2
- package/corpus/templates/clips/actions/update-comment.ts +1 -1
- package/corpus/templates/clips/app/components/editor/editor-layout.tsx +1 -0
- package/corpus/templates/clips/app/components/editor/thumbnail-picker.tsx +59 -16
- package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +27 -44
- package/corpus/templates/clips/app/components/player/comments-panel.tsx +88 -39
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +84 -41
- package/corpus/templates/clips/app/components/player/timestamped-comment-button.tsx +3 -1
- package/corpus/templates/clips/app/components/player/video-player.tsx +1 -1
- package/corpus/templates/clips/app/components/sharing/share-ui.tsx +20 -7
- package/corpus/templates/clips/app/i18n/en-US.ts +2 -1
- package/corpus/templates/clips/app/lib/public-meeting.ts +1 -1
- package/corpus/templates/clips/app/lib/thumbnail-capture.ts +71 -0
- package/corpus/templates/clips/app/lib/thumbnail-picker-state.ts +93 -0
- package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +1 -1
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +25 -19
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +8 -0
- package/corpus/templates/clips/changelog/2026-07-23-meeting-recording-meters-and-dismissed-prompts.md +1 -1
- package/corpus/templates/clips/changelog/2026-08-11-clips-asks-to-take-notes-again-when-you-join-an-adhoc-zoom-o.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +1 -1
- package/corpus/templates/clips/desktop/src/styles.css +10 -2
- package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +166 -14
- package/corpus/templates/clips/desktop/src-tauri/src/call_activity.rs +146 -0
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +2 -2
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -0
- package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +2 -122
- package/corpus/templates/clips/desktop/src-tauri/src/util.rs +1 -1
- package/corpus/templates/clips/server/lib/recording-page-access.ts +6 -1
- package/corpus/templates/clips/server/routes/api/public-recording.get.ts +5 -0
- package/corpus/templates/clips/shared/share-meta.ts +19 -3
- package/corpus/templates/content/.agents/skills/adding-a-feature/SKILL.md +208 -0
- package/corpus/templates/content/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/content/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/content/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/content/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/content/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/content/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/content/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/content/actions/_database-utils.ts +10 -0
- package/corpus/templates/content/actions/add-comment.ts +1 -1
- package/corpus/templates/content/actions/attach-content-database-source.ts +158 -61
- package/corpus/templates/content/actions/create-document.ts +1 -0
- package/corpus/templates/content/actions/delete-comment.ts +1 -1
- package/corpus/templates/content/actions/get-document.ts +9 -1
- package/corpus/templates/content/actions/import-content-source.ts +8 -0
- package/corpus/templates/content/actions/list-documents.ts +10 -1
- package/corpus/templates/content/actions/update-comment.ts +1 -1
- package/corpus/templates/content/actions/update-document.ts +11 -0
- package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +52 -29
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +13 -8
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +62 -2
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +163 -53
- package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +16 -0
- package/corpus/templates/content/app/components/editor/database/settings.tsx +22 -13
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +7 -7
- package/corpus/templates/content/app/hooks/use-documents.ts +2 -0
- package/corpus/templates/content/app/i18n-data.ts +10 -0
- package/corpus/templates/content/app/root.tsx +1 -21
- package/corpus/templates/content/changelog/2026-08-05-connect-sources-from-add-column.md +6 -0
- package/corpus/templates/content/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
- package/corpus/templates/content/shared/api.ts +7 -1
- package/corpus/templates/crm/.agents/skills/actions/SKILL.md +146 -0
- package/corpus/templates/crm/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/crm/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/crm/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/crm/.agents/skills/adding-a-feature/SKILL.md +208 -0
- package/corpus/templates/crm/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/crm/.agents/skills/delegate-to-agent/SKILL.md +289 -0
- package/corpus/templates/crm/.agents/skills/frontend-design/SKILL.md +296 -0
- package/corpus/templates/crm/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/crm/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/crm/.agents/skills/real-time-sync/SKILL.md +232 -0
- package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/crm/.agents/skills/security/SKILL.md +324 -0
- package/corpus/templates/crm/.agents/skills/self-modifying-code/SKILL.md +123 -0
- package/corpus/templates/crm/.agents/skills/shadcn-ui/SKILL.md +123 -0
- package/corpus/templates/crm/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/crm/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/crm/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/crm/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/design/.agents/skills/adding-a-feature/SKILL.md +208 -0
- package/corpus/templates/design/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/design/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/design/.agents/skills/real-time-sync/SKILL.md +232 -0
- package/corpus/templates/design/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/design/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/design/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/design/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/design/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/design/actions/index-design-system-with-builder.ts +16 -2
- package/corpus/templates/design/app/components/design-system/ProductionDesignSystemShowcase.tsx +6 -18
- package/corpus/templates/design/app/i18n/en-US.ts +1 -1
- package/corpus/templates/design/app/i18n-data.ts +40 -0
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +153 -131
- package/corpus/templates/design/app/pages/DesignSystems.tsx +7 -61
- package/corpus/templates/design/app/pages/Present.tsx +8 -2
- package/corpus/templates/design/app/pages/Templates.tsx +1 -0
- package/corpus/templates/design/app/pages/design-editor/tool-state.ts +4 -1
- package/corpus/templates/design/app/pages/design-editor/types.ts +6 -1
- package/corpus/templates/design/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/adding-a-feature/SKILL.md +208 -0
- package/corpus/templates/dispatch/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/dispatch/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/dispatch/.agents/skills/real-time-sync/SKILL.md +232 -0
- package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/dispatch/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/dispatch/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/dispatch/actions/apply-workspace-connection-setup.ts +97 -15
- package/corpus/templates/dispatch/actions/connection-permissions.ts +77 -0
- package/corpus/templates/dispatch/actions/delete-workspace-connection.ts +12 -2
- package/corpus/templates/dispatch/actions/list-workspace-user-groups.ts +19 -0
- package/corpus/templates/dispatch/actions/plan-workspace-connection-setup.ts +9 -2
- package/corpus/templates/dispatch/actions/set-workspace-connection-grant.ts +21 -2
- package/corpus/templates/dispatch/actions/upsert-workspace-connection.ts +66 -1
- package/corpus/templates/dispatch/actions/upsert-workspace-user-group.ts +27 -0
- package/corpus/templates/dispatch/app/chat-first-pages.ts +84 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +3989 -3527
- package/corpus/templates/dispatch/app/routes/integrations.tsx +1568 -685
- package/corpus/templates/dispatch/app/routes/settings.tsx +14 -9
- package/corpus/templates/dispatch/changelog/2026-08-12-search-and-pin-workspace-apps-from-the-app-catalog.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-08-12-workspace-integration-access-now-shows-exactly-which-apps-ca.md +6 -0
- package/corpus/templates/dispatch/server/lib/app-roles.ts +5 -0
- package/corpus/templates/dispatch/shared/app-roles.ts +1 -0
- package/corpus/templates/factory/.agents/skills/adding-a-feature/SKILL.md +3 -2
- package/corpus/templates/factory/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/factory/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/factory/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/factory/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/factory/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/factory/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/factory/AGENTS.md +10 -1
- package/corpus/templates/factory/README.md +18 -7
- package/corpus/templates/factory/actions/list-triage-items.ts +10 -4
- package/corpus/templates/factory/actions/poll-github-sources.ts +53 -14
- package/corpus/templates/factory/actions/poll-sentry-errors.ts +31 -13
- package/corpus/templates/factory/actions/poll-slack-channel.ts +41 -5
- package/corpus/templates/factory/actions/provider-api-catalog.ts +13 -0
- package/corpus/templates/factory/actions/provider-api-docs.ts +11 -0
- package/corpus/templates/factory/actions/provider-api-request.ts +17 -0
- package/corpus/templates/factory/actions/save-triage-config.ts +87 -38
- package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +14 -12
- package/corpus/templates/factory/app/components/factory/FactoryCanvas.tsx +60 -77
- package/corpus/templates/factory/app/components/factory/FactoryInspector.tsx +66 -125
- package/corpus/templates/factory/app/components/layout/Header.tsx +1 -0
- package/corpus/templates/factory/app/components/layout/Layout.tsx +8 -3
- package/corpus/templates/factory/app/components/layout/Sidebar.tsx +9 -5
- package/corpus/templates/factory/app/components/ui/input.tsx +15 -1
- package/corpus/templates/factory/app/components/ui/popover.tsx +1 -0
- package/corpus/templates/factory/app/components/ui/switch.tsx +1 -0
- package/corpus/templates/factory/app/components/ui/textarea.tsx +20 -1
- package/corpus/templates/factory/app/hooks/use-navigation-state.ts +5 -3
- package/corpus/templates/factory/app/i18n/en-US.ts +17 -0
- package/corpus/templates/factory/app/routes/_index.tsx +5 -87
- package/corpus/templates/factory/app/routes/chat.$threadId.tsx +1 -1
- package/corpus/templates/factory/app/routes/chat.tsx +91 -0
- package/corpus/templates/factory/app/routes/factory.tsx +554 -430
- package/corpus/templates/factory/app/routes/settings.tsx +1 -1
- package/corpus/templates/factory/server/connectors/credentials.ts +25 -0
- package/corpus/templates/factory/server/lib/provider-api.ts +34 -0
- package/corpus/templates/factory/server/plugins/agent-chat.ts +15 -3
- package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +96 -24
- package/corpus/templates/factory/server/triage/review-state.ts +33 -0
- package/corpus/templates/factory/server/triage/slack-poller.ts +1 -0
- package/corpus/templates/forms/.agents/skills/adding-a-feature/SKILL.md +208 -0
- package/corpus/templates/forms/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/forms/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/forms/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/forms/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/forms/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/forms/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +1 -0
- package/corpus/templates/forms/shared/types.ts +1 -1
- package/corpus/templates/macros/.agents/skills/adding-a-feature/SKILL.md +208 -0
- package/corpus/templates/macros/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/macros/.agents/skills/delegate-to-agent/SKILL.md +289 -0
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/macros/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/macros/.agents/skills/real-time-sync/SKILL.md +232 -0
- package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/macros/.agents/skills/self-modifying-code/SKILL.md +123 -0
- package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/macros/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/macros/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/macros/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/macros/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/mail/.agents/skills/adding-a-feature/SKILL.md +208 -0
- package/corpus/templates/mail/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/mail/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/mail/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/mail/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/mail/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/mail/actions/send-email.ts +9 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +4 -4
- package/corpus/templates/mail/changelog/2026-08-12-agent-sent-messages-appear-immediately.md +6 -0
- package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +3 -2
- package/corpus/templates/plan/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/plan/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/plan/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/plan/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/plan/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/plan/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/plan/actions/delete-plan-comment.ts +6 -0
- package/corpus/templates/plan/actions/reply-to-plan-comment.ts +7 -1
- package/corpus/templates/plan/actions/resolve-plan-comment.ts +7 -1
- package/corpus/templates/plan/actions/update-visual-plan.ts +6 -0
- package/corpus/templates/plan/app/hooks/use-plans.ts +1 -1
- package/corpus/templates/plan/app/pages/PlansPage.tsx +51 -23
- package/corpus/templates/plan/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
- package/corpus/templates/plan/server/plans.ts +2 -2
- package/corpus/templates/plan/shared/types.ts +1 -1
- package/corpus/templates/slides/.agents/skills/adding-a-feature/SKILL.md +208 -0
- package/corpus/templates/slides/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +6 -0
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/slides/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/slides/.agents/skills/real-time-sync/SKILL.md +232 -0
- package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/slides/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/slides/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/slides/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/slides/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/slides/AGENTS.md +4 -0
- package/corpus/templates/slides/actions/add-slide-comment.ts +1 -1
- package/corpus/templates/slides/actions/delete-slide-comment.ts +1 -1
- package/corpus/templates/slides/actions/get-layout-overflows.ts +67 -2
- package/corpus/templates/slides/actions/update-slide-comment.ts +1 -1
- package/corpus/templates/slides/actions/view-screen.ts +76 -26
- package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +30 -8
- package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +2 -1
- package/corpus/templates/slides/app/components/editor/AlignmentGuides.tsx +75 -0
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +81 -81
- package/corpus/templates/slides/app/components/editor/ShareDialog.tsx +28 -25
- package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +175 -10
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +256 -69
- package/corpus/templates/slides/app/components/editor/SlideOverflowWarning.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/canvas-interactions/slides-canvas-adapter.ts +3 -3
- package/corpus/templates/slides/app/components/editor/slide-object-interactions.ts +218 -0
- package/corpus/templates/slides/app/context/DeckContext.tsx +56 -30
- package/corpus/templates/slides/app/hooks/use-deck-role.ts +13 -5
- package/corpus/templates/slides/app/hooks/use-design-systems.ts +1 -1
- package/corpus/templates/slides/app/i18n/en-US.ts +6 -2
- package/corpus/templates/slides/app/lib/create-deck-generation.ts +1 -0
- package/corpus/templates/slides/app/lib/pending-deck-changes.ts +32 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +85 -4
- package/corpus/templates/slides/app/pages/Index.tsx +65 -66
- package/corpus/templates/slides/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
- package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +3 -2
- package/corpus/templates/tasks/.agents/skills/context-awareness/SKILL.md +206 -0
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +73 -80
- package/corpus/templates/tasks/.agents/skills/portability/SKILL.md +107 -0
- package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +339 -0
- package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/corpus/templates/tasks/.agents/skills/sharing/SKILL.md +1 -0
- package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/corpus/templates/tasks/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/corpus/templates/tasks/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/corpus/templates/tasks/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/corpus/templates/tasks/app/components/custom-fields/FieldsPage.tsx +1 -4
- package/corpus/templates/tasks/app/components/inbox/InboxList.tsx +0 -1
- package/corpus/templates/tasks/app/components/inbox/InboxListPage.tsx +0 -1
- package/corpus/templates/tasks/app/components/shared/ListViewHeader.tsx +0 -3
- package/corpus/templates/tasks/app/components/shared/PageHeader.tsx +1 -4
- package/corpus/templates/tasks/app/components/tasks/TaskList.tsx +0 -1
- package/corpus/templates/tasks/app/components/tasks/TaskListPage.tsx +0 -1
- package/dist/agent/engine/ai-sdk-engine.js +5 -0
- package/dist/agent/engine/anthropic-engine.js +8 -0
- package/dist/agent/engine/registry.js +24 -19
- package/dist/agent/engine/translate-anthropic.js +16 -1
- package/dist/agent/production-agent.d.ts +8 -0
- package/dist/agent/production-agent.js +25 -2
- package/dist/agent/run-manager.js +13 -3
- package/dist/automations/service.d.ts +2 -0
- package/dist/automations/service.js +5 -1
- package/dist/chat-threads/schema.d.ts +2 -2
- package/dist/cli/changelog.js +21 -4
- package/dist/cli/create.d.ts +12 -1
- package/dist/cli/create.js +99 -11
- package/dist/cli/index.js +6 -6
- package/dist/cli/process.d.ts +7 -0
- package/dist/cli/process.js +12 -0
- package/dist/cli/workspace-skill-policy.d.ts +15 -0
- package/dist/cli/workspace-skill-policy.js +62 -0
- package/dist/cli/workspacify.js +36 -0
- package/dist/client/AgentPanel.d.ts +14 -2
- package/dist/client/AgentPanel.js +44 -26
- package/dist/client/AssistantChat.js +90 -182
- package/dist/client/FeedbackButton.js +15 -2
- package/dist/client/RouteTransitionIndicator.d.ts +14 -2
- package/dist/client/RouteTransitionIndicator.js +16 -5
- package/dist/client/agent-page/AgentTabsPage.js +19 -6
- package/dist/client/app-config.d.ts +3 -0
- package/dist/client/app-config.js +6 -0
- package/dist/client/app-providers.js +2 -1
- package/dist/client/changelog/Changelog.d.ts +2 -1
- package/dist/client/changelog/Changelog.js +7 -5
- package/dist/client/chat/markdown-renderer.d.ts +3 -1
- package/dist/client/chat/markdown-renderer.js +24 -24
- package/dist/client/chat/message-components.d.ts +23 -0
- package/dist/client/chat/message-components.js +27 -44
- package/dist/client/chat/tool-call-display.d.ts +2 -2
- package/dist/client/chat/tool-call-display.js +6 -3
- package/dist/client/chat-first/app-open-actions.d.ts +28 -0
- package/dist/client/chat-first/app-open-actions.js +25 -0
- package/dist/client/chat-first/index.d.ts +1 -0
- package/dist/client/chat-first/index.js +1 -0
- package/dist/client/chat-first/primary-nav.d.ts +2 -1
- package/dist/client/chat-first/primary-nav.js +12 -5
- package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +14 -0
- package/dist/client/conversation/use-near-bottom-autoscroll.js +14 -0
- package/dist/client/error-format.js +32 -3
- package/dist/client/extensions/EmbeddedExtension.js +1 -0
- package/dist/client/extensions/ExtensionViewer.js +3 -1
- package/dist/client/extensions/InlineExtensionFrame.js +1 -0
- package/dist/client/extensions/iframe-bridge.d.ts +3 -2
- package/dist/client/extensions/iframe-bridge.js +4 -2
- package/dist/client/i18n.js +28 -5
- package/dist/client/integrations/IntegrationConnectionChoice.d.ts +11 -0
- package/dist/client/integrations/IntegrationConnectionChoice.js +6 -0
- package/dist/client/integrations/IntegrationGrid.d.ts +23 -0
- package/dist/client/integrations/IntegrationGrid.js +12 -0
- package/dist/client/integrations/IntegrationsPanel.js +92 -26
- package/dist/client/integrations/index.d.ts +2 -0
- package/dist/client/integrations/index.js +2 -0
- package/dist/client/onboarding/FirstRunOnboarding.d.ts +3 -1
- package/dist/client/onboarding/FirstRunOnboarding.js +26 -16
- package/dist/client/onboarding/first-run-enabled.js +1 -5
- package/dist/client/onboarding/first-run-startup-gate.d.ts +5 -0
- package/dist/client/onboarding/first-run-startup-gate.js +51 -0
- package/dist/client/onboarding/first-run-status.d.ts +7 -0
- package/dist/client/onboarding/first-run-status.js +26 -0
- package/dist/client/onboarding/index.d.ts +3 -0
- package/dist/client/onboarding/index.js +3 -0
- package/dist/client/onboarding/use-onboarding.d.ts +1 -0
- package/dist/client/onboarding/use-onboarding.js +13 -11
- package/dist/client/org/TeamPage.js +174 -28
- package/dist/client/org/WorkspaceNotice.js +7 -4
- package/dist/client/resources/McpConnectionSuggestion.js +29 -72
- package/dist/client/resources/McpIntegrationDialog.d.ts +3 -1
- package/dist/client/resources/McpIntegrationDialog.js +176 -51
- package/dist/client/resources/index.d.ts +1 -0
- package/dist/client/resources/index.js +1 -0
- package/dist/client/resources/mcp-integration-catalog.d.ts +8 -0
- package/dist/client/resources/mcp-integration-catalog.js +28 -0
- package/dist/client/settings/ExtensionsSettingsContent.js +2 -2
- package/dist/client/settings/SettingsPanel.d.ts +6 -0
- package/dist/client/settings/SettingsPanel.js +21 -8
- package/dist/client/settings/SettingsRow.d.ts +3 -1
- package/dist/client/settings/SettingsRow.js +4 -2
- package/dist/client/settings/SettingsSkeleton.js +5 -3
- package/dist/client/settings/SettingsTabsPage.js +2 -2
- package/dist/client/settings/UsageSection.d.ts +4 -1
- package/dist/client/settings/UsageSection.js +187 -93
- package/dist/client/settings/agent-settings-search.js +6 -2
- package/dist/client/setup-connections/useBuilderConnectCardController.d.ts +1 -1
- package/dist/client/setup-connections/useBuilderConnectCardController.js +2 -2
- package/dist/client/sharing/ShareButton.d.ts +4 -2
- package/dist/client/sharing/ShareButton.js +26 -14
- package/dist/client/sharing/ShareDialog.d.ts +1 -1
- package/dist/client/sharing/ShareDialog.js +17 -11
- package/dist/client/sharing/useShareButtonController.d.ts +2 -1
- package/dist/client/sharing/useShareButtonController.js +8 -0
- package/dist/client/sharing/useShareDialogController.d.ts +1 -1
- package/dist/client/sharing/useShareDialogController.js +2 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/config.d.ts +13 -0
- package/dist/config.js +53 -0
- package/dist/dashboard-storage/schema.d.ts +2 -2
- package/dist/data-programs/schema.d.ts +2 -2
- package/dist/extensions/actions.js +2 -1
- package/dist/extensions/html-shell.d.ts +2 -2
- package/dist/extensions/routes.js +4 -1
- package/dist/extensions/schema.d.ts +2 -2
- package/dist/file-upload/pre-upload-attachments.js +1 -1
- package/dist/framework-tools.js +3 -0
- package/dist/history/types.d.ts +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/jobs/background-automation-runner.d.ts +1 -0
- package/dist/jobs/background-automation-runner.js +4 -2
- package/dist/jobs/frontmatter.d.ts +4 -0
- package/dist/jobs/frontmatter.js +16 -0
- package/dist/jobs/run-history.js +1 -1
- package/dist/jobs/tools.js +9 -5
- package/dist/localization/default-messages.d.ts +27 -0
- package/dist/localization/default-messages.js +28 -1
- package/dist/notifications/routes.d.ts +6 -6
- package/dist/onboarding/plugin.js +17 -2
- package/dist/org/context.js +16 -0
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
- package/dist/provider-api/actions/provider-api.d.ts +8 -8
- package/dist/review/actions/create-review-comment.js +1 -1
- package/dist/review/actions/delete-review-comment.js +4 -1
- package/dist/review/actions/list-review-comments.js +4 -2
- package/dist/review/actions/reply-review-comment.js +1 -1
- package/dist/review/types.d.ts +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/action-discovery.js +29 -0
- package/dist/server/agent-chat/plugin-options.d.ts +7 -0
- package/dist/server/agent-chat-plugin.d.ts +2 -0
- package/dist/server/agent-chat-plugin.js +12 -4
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/auth.js +18 -4
- package/dist/server/better-auth-instance.js +8 -1
- package/dist/server/builder-browser.js +31 -0
- package/dist/server/magic-link-attribution.d.ts +21 -0
- package/dist/server/magic-link-attribution.js +115 -0
- package/dist/server/onboarding-html.js +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/server/workspace-provider-oauth.js +38 -26
- package/dist/setup-connections/index.d.ts +1 -1
- package/dist/setup-connections/index.js +1 -1
- package/dist/shared/first-run-onboarding.d.ts +6 -0
- package/dist/shared/first-run-onboarding.js +6 -0
- package/dist/sharing/access.d.ts +1 -1
- package/dist/sharing/access.js +4 -1
- package/dist/sharing/actions/share-resource.d.ts +1 -1
- package/dist/sharing/actions/share-resource.js +2 -2
- package/dist/sharing/registry.d.ts +2 -2
- package/dist/sharing/schema.d.ts +5 -5
- package/dist/sharing/schema.js +9 -6
- package/dist/styles/agent-native.css +21 -0
- package/dist/styles/chat-history-list.css +1 -1
- package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
- package/dist/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
- package/dist/templates/chat/.agents/skills/portability/SKILL.md +107 -0
- package/dist/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
- package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/dist/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
- package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/dist/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/dist/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/dist/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/dist/templates/chat/AGENTS.md +4 -5
- package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +3 -2
- package/dist/templates/default/.agents/skills/context-awareness/SKILL.md +206 -0
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +73 -80
- package/dist/templates/default/.agents/skills/portability/SKILL.md +107 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/dist/templates/default/.agents/skills/sharing/SKILL.md +233 -0
- package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/dist/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/dist/templates/default/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/dist/templates/default/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/dist/templates/default/AGENTS.md +17 -2
- package/dist/templates/default/agent-native.config.ts +6 -0
- package/dist/templates/default/app/i18n/ar-SA.ts +2 -0
- package/dist/templates/default/app/i18n/de-DE.ts +2 -0
- package/dist/templates/default/app/i18n/en-US.ts +3 -1
- package/dist/templates/default/app/i18n/es-ES.ts +2 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +2 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +2 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +2 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +2 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +2 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +2 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +2 -0
- package/dist/templates/headless/.agents/skills/delegate-to-agent/SKILL.md +289 -0
- package/dist/templates/headless/.agents/skills/security/SKILL.md +324 -0
- package/dist/templates/headless/.agents/skills/storing-data/SKILL.md +178 -0
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +3 -2
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +73 -80
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/sharing/SKILL.md +1 -0
- package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +3 -2
- package/dist/templates/workspace-core/AGENTS.md +9 -3
- package/dist/templates/workspace-root/AGENTS.md +26 -1
- package/dist/templates/workspace-root/agent-native.config.ts +8 -0
- package/dist/triggers/actions.js +2 -2
- package/dist/usage/actions/get-usage-alerts.d.ts +5 -0
- package/dist/usage/actions/get-usage-alerts.js +16 -0
- package/dist/usage/actions/get-usage-metrics.d.ts +7 -0
- package/dist/usage/actions/get-usage-metrics.js +26 -0
- package/dist/usage/actions/manage-usage-alert.d.ts +14 -0
- package/dist/usage/actions/manage-usage-alert.js +48 -0
- package/dist/usage/alerts-store.d.ts +78 -0
- package/dist/usage/alerts-store.js +592 -0
- package/dist/usage/metrics-store.d.ts +95 -0
- package/dist/usage/metrics-store.js +386 -0
- package/dist/usage/store.js +10 -0
- package/dist/vite/action-types-plugin.js +28 -0
- package/dist/vite/agent-native-config-loader.d.ts +6 -0
- package/dist/vite/agent-native-config-loader.js +54 -2
- package/dist/vite/client.js +11 -5
- package/dist/workspace-connections/actions/bulk-update-workspace-user-groups.d.ts +6 -0
- package/dist/workspace-connections/actions/bulk-update-workspace-user-groups.js +24 -0
- package/dist/workspace-connections/actions/delete-workspace-user-group.d.ts +7 -0
- package/dist/workspace-connections/actions/delete-workspace-user-group.js +29 -0
- package/dist/workspace-connections/actions/list-workspace-user-groups.d.ts +2 -0
- package/dist/workspace-connections/actions/list-workspace-user-groups.js +13 -0
- package/dist/workspace-connections/actions/upsert-workspace-user-group.d.ts +6 -0
- package/dist/workspace-connections/actions/upsert-workspace-user-group.js +22 -0
- package/dist/workspace-connections/credential-key-aliases.d.ts +3 -0
- package/dist/workspace-connections/credential-key-aliases.js +31 -0
- package/dist/workspace-connections/credentials.js +1 -25
- package/dist/workspace-connections/groups.d.ts +32 -0
- package/dist/workspace-connections/groups.js +288 -0
- package/dist/workspace-connections/index.d.ts +3 -1
- package/dist/workspace-connections/index.js +3 -1
- package/dist/workspace-connections/store.d.ts +9 -0
- package/dist/workspace-connections/store.js +68 -8
- package/docs/content/components.mdx +2 -2
- package/docs/content/sharing.mdx +2 -1
- package/package.json +10 -2
- package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
- package/src/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
- package/src/templates/chat/.agents/skills/portability/SKILL.md +107 -0
- package/src/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
- package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/src/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
- package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/src/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/src/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/src/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/src/templates/chat/AGENTS.md +4 -5
- package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +3 -2
- package/src/templates/default/.agents/skills/context-awareness/SKILL.md +206 -0
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +73 -80
- package/src/templates/default/.agents/skills/portability/SKILL.md +107 -0
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/sharing/SKILL.md +233 -0
- package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/src/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/src/templates/default/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/src/templates/default/.agents/skills/workspace-conventions/SKILL.md +93 -0
- package/src/templates/default/AGENTS.md +17 -2
- package/src/templates/default/agent-native.config.ts +6 -0
- package/src/templates/default/app/i18n/ar-SA.ts +2 -0
- package/src/templates/default/app/i18n/de-DE.ts +2 -0
- package/src/templates/default/app/i18n/en-US.ts +3 -1
- package/src/templates/default/app/i18n/es-ES.ts +2 -0
- package/src/templates/default/app/i18n/fr-FR.ts +2 -0
- package/src/templates/default/app/i18n/hi-IN.ts +2 -0
- package/src/templates/default/app/i18n/ja-JP.ts +2 -0
- package/src/templates/default/app/i18n/ko-KR.ts +2 -0
- package/src/templates/default/app/i18n/pt-BR.ts +2 -0
- package/src/templates/default/app/i18n/zh-CN.ts +2 -0
- package/src/templates/default/app/i18n/zh-TW.ts +2 -0
- package/src/templates/headless/.agents/skills/delegate-to-agent/SKILL.md +289 -0
- package/src/templates/headless/.agents/skills/security/SKILL.md +324 -0
- package/src/templates/headless/.agents/skills/storing-data/SKILL.md +178 -0
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +3 -2
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +73 -80
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +3 -3
- package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/sharing/SKILL.md +1 -0
- package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +116 -44
- package/src/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
- package/src/templates/workspace-core/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
- package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +3 -2
- package/src/templates/workspace-core/AGENTS.md +9 -3
- package/src/templates/workspace-root/AGENTS.md +26 -1
- package/src/templates/workspace-root/agent-native.config.ts +8 -0
- package/corpus/templates/analytics/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/analytics/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/analytics/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/assets/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/assets/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/assets/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/assets/.agents/skills/real-time-collab/SKILL.md +0 -392
- package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/brain/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/brain/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/brain/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/calendar/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/calendar/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/calendar/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/clips/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/clips/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/clips/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/content/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/content/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/content/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/design/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/design/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/design/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/dispatch/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/dispatch/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/dispatch/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/factory/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/factory/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/factory/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/factory/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/forms/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/forms/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/forms/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/macros/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/mail/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/mail/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/mail/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/plan/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/plan/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/plan/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/slides/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/slides/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/slides/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/corpus/templates/tasks/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/corpus/templates/tasks/.agents/skills/create-skill/SKILL.md +0 -195
- package/corpus/templates/tasks/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/dist/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/dist/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
- package/dist/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
- package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/dist/templates/default/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/dist/templates/default/.agents/skills/create-skill/SKILL.md +0 -195
- package/dist/templates/default/.agents/skills/feature-flags/SKILL.md +0 -169
- package/dist/templates/default/.agents/skills/integration-webhooks/SKILL.md +0 -364
- package/dist/templates/default/.agents/skills/internationalization/SKILL.md +0 -82
- package/dist/templates/default/.agents/skills/onboarding/SKILL.md +0 -56
- package/dist/templates/default/.agents/skills/real-time-collab/SKILL.md +0 -392
- package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/dist/templates/headless/.agents/skills/feature-flags/SKILL.md +0 -169
- package/dist/templates/headless/.agents/skills/integration-webhooks/SKILL.md +0 -364
- package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +0 -402
- package/dist/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +0 -4
- package/dist/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +0 -90
- package/dist/templates/headless/.agents/skills/turn-into-skill/SKILL.md +0 -112
- package/dist/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +0 -4
- package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +0 -411
- package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +0 -107
- package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +0 -176
- package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +0 -63
- package/dist/templates/workspace-core/.agents/skills/audit-log/SKILL.md +0 -96
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +0 -295
- package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +0 -242
- package/dist/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +0 -131
- package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/dist/templates/workspace-core/.agents/skills/changelog/SKILL.md +0 -114
- package/dist/templates/workspace-core/.agents/skills/client-methods/SKILL.md +0 -115
- package/dist/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +0 -62
- package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +0 -87
- package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +0 -139
- package/dist/templates/workspace-core/.agents/skills/context-xray/SKILL.md +0 -72
- package/dist/templates/workspace-core/.agents/skills/create-skill/SKILL.md +0 -195
- package/dist/templates/workspace-core/.agents/skills/data-programs/SKILL.md +0 -128
- package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +0 -219
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +0 -533
- package/dist/templates/workspace-core/.agents/skills/extensions/references/api.md +0 -340
- package/dist/templates/workspace-core/.agents/skills/extensions/references/examples.md +0 -259
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +0 -547
- package/dist/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +0 -157
- package/dist/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +0 -169
- package/dist/templates/workspace-core/.agents/skills/generative-ui/SKILL.md +0 -117
- package/dist/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +0 -170
- package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +0 -364
- package/dist/templates/workspace-core/.agents/skills/internationalization/SKILL.md +0 -82
- package/dist/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +0 -52
- package/dist/templates/workspace-core/.agents/skills/native-navigation/SKILL.md +0 -67
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -329
- package/dist/templates/workspace-core/.agents/skills/onboarding/SKILL.md +0 -56
- package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +0 -299
- package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +0 -333
- package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +0 -392
- package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +0 -74
- package/dist/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +0 -70
- package/dist/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +0 -84
- package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +0 -278
- package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/dist/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +0 -101
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +0 -222
- package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +0 -363
- package/src/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/src/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
- package/src/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
- package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/src/templates/default/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/src/templates/default/.agents/skills/create-skill/SKILL.md +0 -195
- package/src/templates/default/.agents/skills/feature-flags/SKILL.md +0 -169
- package/src/templates/default/.agents/skills/integration-webhooks/SKILL.md +0 -364
- package/src/templates/default/.agents/skills/internationalization/SKILL.md +0 -82
- package/src/templates/default/.agents/skills/onboarding/SKILL.md +0 -56
- package/src/templates/default/.agents/skills/real-time-collab/SKILL.md +0 -392
- package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/src/templates/headless/.agents/skills/feature-flags/SKILL.md +0 -169
- package/src/templates/headless/.agents/skills/integration-webhooks/SKILL.md +0 -364
- package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +0 -402
- package/src/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +0 -4
- package/src/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +0 -90
- package/src/templates/headless/.agents/skills/turn-into-skill/SKILL.md +0 -112
- package/src/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +0 -4
- package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +0 -411
- package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +0 -107
- package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +0 -176
- package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +0 -63
- package/src/templates/workspace-core/.agents/skills/audit-log/SKILL.md +0 -96
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +0 -295
- package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +0 -242
- package/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +0 -131
- package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +0 -89
- package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +0 -114
- package/src/templates/workspace-core/.agents/skills/client-methods/SKILL.md +0 -115
- package/src/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +0 -62
- package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +0 -87
- package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +0 -139
- package/src/templates/workspace-core/.agents/skills/context-xray/SKILL.md +0 -72
- package/src/templates/workspace-core/.agents/skills/create-skill/SKILL.md +0 -195
- package/src/templates/workspace-core/.agents/skills/data-programs/SKILL.md +0 -128
- package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +0 -219
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +0 -533
- package/src/templates/workspace-core/.agents/skills/extensions/references/api.md +0 -340
- package/src/templates/workspace-core/.agents/skills/extensions/references/examples.md +0 -259
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +0 -547
- package/src/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +0 -157
- package/src/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +0 -169
- package/src/templates/workspace-core/.agents/skills/generative-ui/SKILL.md +0 -117
- package/src/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +0 -170
- package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +0 -364
- package/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +0 -82
- package/src/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +0 -52
- package/src/templates/workspace-core/.agents/skills/native-navigation/SKILL.md +0 -67
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -329
- package/src/templates/workspace-core/.agents/skills/onboarding/SKILL.md +0 -56
- package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +0 -299
- package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +0 -333
- package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +0 -392
- package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +0 -74
- package/src/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +0 -70
- package/src/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +0 -84
- package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +0 -278
- package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
- package/src/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +0 -101
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +0 -222
- package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +0 -363
|
@@ -821,6 +821,224 @@ export function applySlideObjectMoveDelta(
|
|
|
821
821
|
}
|
|
822
822
|
}
|
|
823
823
|
|
|
824
|
+
export type SlideAlignmentGuideOrientation = "vertical" | "horizontal";
|
|
825
|
+
|
|
826
|
+
export interface SlideAlignmentGuide {
|
|
827
|
+
orientation: SlideAlignmentGuideOrientation;
|
|
828
|
+
/** Position in the shared slide coordinate space. */
|
|
829
|
+
position: number;
|
|
830
|
+
/** Visible span in the shared slide coordinate space. */
|
|
831
|
+
start: number;
|
|
832
|
+
end: number;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
export interface SlideObjectSnapResult {
|
|
836
|
+
deltaX: number;
|
|
837
|
+
deltaY: number;
|
|
838
|
+
guides: SlideAlignmentGuide[];
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
export type SlideObjectAlignment =
|
|
842
|
+
| "left"
|
|
843
|
+
| "center"
|
|
844
|
+
| "right"
|
|
845
|
+
| "top"
|
|
846
|
+
| "middle"
|
|
847
|
+
| "bottom";
|
|
848
|
+
|
|
849
|
+
export type SlideObjectDistribution = "horizontal" | "vertical";
|
|
850
|
+
|
|
851
|
+
export const SLIDE_OBJECT_SNAP_TOLERANCE = 8;
|
|
852
|
+
|
|
853
|
+
function nearestSnapAdjustment(
|
|
854
|
+
movingStart: number,
|
|
855
|
+
movingSize: number,
|
|
856
|
+
proposedDelta: number,
|
|
857
|
+
targetPositions: number[],
|
|
858
|
+
tolerance: number,
|
|
859
|
+
): { delta: number; position: number } | null {
|
|
860
|
+
const anchors = [0, movingSize / 2, movingSize];
|
|
861
|
+
let closest: { distance: number; delta: number; position: number } | null =
|
|
862
|
+
null;
|
|
863
|
+
|
|
864
|
+
for (const anchor of anchors) {
|
|
865
|
+
const proposedPosition = movingStart + proposedDelta + anchor;
|
|
866
|
+
for (const position of targetPositions) {
|
|
867
|
+
const adjustment = position - proposedPosition;
|
|
868
|
+
const distance = Math.abs(adjustment);
|
|
869
|
+
if (distance > tolerance) continue;
|
|
870
|
+
if (!closest || distance < closest.distance) {
|
|
871
|
+
closest = { distance, delta: proposedDelta + adjustment, position };
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
return closest ? { delta: closest.delta, position: closest.position } : null;
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
function uniquePositions(positions: number[]): number[] {
|
|
880
|
+
return Array.from(new Set(positions));
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
function objectAnchorPositions(
|
|
884
|
+
objects: readonly SlideObjectGeometry[],
|
|
885
|
+
axis: "x" | "y",
|
|
886
|
+
): number[] {
|
|
887
|
+
return objects.flatMap((object) => {
|
|
888
|
+
const start = axis === "x" ? object.x : object.y;
|
|
889
|
+
const size = axis === "x" ? object.width : object.height;
|
|
890
|
+
return [start, start + size / 2, start + size];
|
|
891
|
+
});
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
/**
|
|
895
|
+
* Snap a proposed object/group delta to nearby peer or canvas anchors. The
|
|
896
|
+
* moving geometry is the object itself for a single drag and the union bounds
|
|
897
|
+
* for a group drag. The caller can bypass this transient behavior with the
|
|
898
|
+
* platform modifier used by Figma (Cmd/Ctrl) without changing persisted data.
|
|
899
|
+
*/
|
|
900
|
+
export function snapSlideObjectMove({
|
|
901
|
+
moving,
|
|
902
|
+
deltaX,
|
|
903
|
+
deltaY,
|
|
904
|
+
peers,
|
|
905
|
+
canvas,
|
|
906
|
+
tolerance = SLIDE_OBJECT_SNAP_TOLERANCE,
|
|
907
|
+
bypass = false,
|
|
908
|
+
}: {
|
|
909
|
+
moving: SlideObjectGeometry;
|
|
910
|
+
deltaX: number;
|
|
911
|
+
deltaY: number;
|
|
912
|
+
peers: readonly SlideObjectGeometry[];
|
|
913
|
+
canvas?: { width: number; height: number };
|
|
914
|
+
tolerance?: number;
|
|
915
|
+
bypass?: boolean;
|
|
916
|
+
}): SlideObjectSnapResult {
|
|
917
|
+
if (bypass) return { deltaX, deltaY, guides: [] };
|
|
918
|
+
|
|
919
|
+
const xTargets = objectAnchorPositions(peers, "x");
|
|
920
|
+
const yTargets = objectAnchorPositions(peers, "y");
|
|
921
|
+
if (canvas) {
|
|
922
|
+
xTargets.push(0, canvas.width / 2, canvas.width);
|
|
923
|
+
yTargets.push(0, canvas.height / 2, canvas.height);
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
const xSnap = nearestSnapAdjustment(
|
|
927
|
+
moving.x,
|
|
928
|
+
moving.width,
|
|
929
|
+
deltaX,
|
|
930
|
+
uniquePositions(xTargets),
|
|
931
|
+
tolerance,
|
|
932
|
+
);
|
|
933
|
+
const ySnap = nearestSnapAdjustment(
|
|
934
|
+
moving.y,
|
|
935
|
+
moving.height,
|
|
936
|
+
deltaY,
|
|
937
|
+
uniquePositions(yTargets),
|
|
938
|
+
tolerance,
|
|
939
|
+
);
|
|
940
|
+
const guides: SlideAlignmentGuide[] = [];
|
|
941
|
+
if (xSnap) {
|
|
942
|
+
guides.push({
|
|
943
|
+
orientation: "vertical",
|
|
944
|
+
position: xSnap.position,
|
|
945
|
+
start: 0,
|
|
946
|
+
end: canvas?.height ?? moving.y + moving.height,
|
|
947
|
+
});
|
|
948
|
+
}
|
|
949
|
+
if (ySnap) {
|
|
950
|
+
guides.push({
|
|
951
|
+
orientation: "horizontal",
|
|
952
|
+
position: ySnap.position,
|
|
953
|
+
start: 0,
|
|
954
|
+
end: canvas?.width ?? moving.x + moving.width,
|
|
955
|
+
});
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
return {
|
|
959
|
+
deltaX: xSnap?.delta ?? deltaX,
|
|
960
|
+
deltaY: ySnap?.delta ?? deltaY,
|
|
961
|
+
guides,
|
|
962
|
+
};
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
export function unionSlideObjectGeometries(
|
|
966
|
+
geometries: readonly SlideObjectGeometry[],
|
|
967
|
+
): SlideObjectGeometry | null {
|
|
968
|
+
if (geometries.length === 0) return null;
|
|
969
|
+
const left = Math.min(...geometries.map((geometry) => geometry.x));
|
|
970
|
+
const top = Math.min(...geometries.map((geometry) => geometry.y));
|
|
971
|
+
const right = Math.max(
|
|
972
|
+
...geometries.map((geometry) => geometry.x + geometry.width),
|
|
973
|
+
);
|
|
974
|
+
const bottom = Math.max(
|
|
975
|
+
...geometries.map((geometry) => geometry.y + geometry.height),
|
|
976
|
+
);
|
|
977
|
+
return { x: left, y: top, width: right - left, height: bottom - top };
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
export function alignSlideObjectMembers(
|
|
981
|
+
members: readonly SlideObjectMoveMember[],
|
|
982
|
+
alignment: SlideObjectAlignment,
|
|
983
|
+
): Map<string, SlideObjectGeometry> {
|
|
984
|
+
const bounds = unionSlideObjectGeometries(
|
|
985
|
+
members.map((member) => member.start),
|
|
986
|
+
);
|
|
987
|
+
if (!bounds) return new Map();
|
|
988
|
+
|
|
989
|
+
const plan = new Map<string, SlideObjectGeometry>();
|
|
990
|
+
for (const member of members) {
|
|
991
|
+
const geometry = { ...member.start };
|
|
992
|
+
if (alignment === "left") geometry.x = bounds.x;
|
|
993
|
+
if (alignment === "center") {
|
|
994
|
+
geometry.x = bounds.x + (bounds.width - geometry.width) / 2;
|
|
995
|
+
}
|
|
996
|
+
if (alignment === "right") {
|
|
997
|
+
geometry.x = bounds.x + bounds.width - geometry.width;
|
|
998
|
+
}
|
|
999
|
+
if (alignment === "top") geometry.y = bounds.y;
|
|
1000
|
+
if (alignment === "middle") {
|
|
1001
|
+
geometry.y = bounds.y + (bounds.height - geometry.height) / 2;
|
|
1002
|
+
}
|
|
1003
|
+
if (alignment === "bottom") {
|
|
1004
|
+
geometry.y = bounds.y + bounds.height - geometry.height;
|
|
1005
|
+
}
|
|
1006
|
+
plan.set(member.objectId, geometry);
|
|
1007
|
+
}
|
|
1008
|
+
return plan;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
export function distributeSlideObjectMembers(
|
|
1012
|
+
members: readonly SlideObjectMoveMember[],
|
|
1013
|
+
distribution: SlideObjectDistribution,
|
|
1014
|
+
): Map<string, SlideObjectGeometry> {
|
|
1015
|
+
if (members.length < 3) return new Map();
|
|
1016
|
+
|
|
1017
|
+
const axis = distribution === "horizontal" ? "x" : "y";
|
|
1018
|
+
const size = distribution === "horizontal" ? "width" : "height";
|
|
1019
|
+
const sorted = [...members].sort((left, right) => {
|
|
1020
|
+
const positionDelta = left.start[axis] - right.start[axis];
|
|
1021
|
+
return positionDelta || left.objectId.localeCompare(right.objectId);
|
|
1022
|
+
});
|
|
1023
|
+
const first = sorted[0].start[axis];
|
|
1024
|
+
const lastEnd = Math.max(
|
|
1025
|
+
...sorted.map((member) => member.start[axis] + member.start[size]),
|
|
1026
|
+
);
|
|
1027
|
+
const occupied = sorted.reduce((sum, member) => sum + member.start[size], 0);
|
|
1028
|
+
const gap = (lastEnd - first - occupied) / (sorted.length - 1);
|
|
1029
|
+
const plan = new Map<string, SlideObjectGeometry>();
|
|
1030
|
+
let cursor = first;
|
|
1031
|
+
|
|
1032
|
+
for (const member of sorted) {
|
|
1033
|
+
const geometry = { ...member.start };
|
|
1034
|
+
geometry[axis] = cursor;
|
|
1035
|
+
plan.set(member.objectId, geometry);
|
|
1036
|
+
cursor += member.start[size] + gap;
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
return plan;
|
|
1040
|
+
}
|
|
1041
|
+
|
|
824
1042
|
export interface CopiedSlideObjects {
|
|
825
1043
|
html: string[];
|
|
826
1044
|
}
|
|
@@ -313,17 +313,24 @@ const DECK_SAVE_RETRY_BASE_MS = 250;
|
|
|
313
313
|
// Ops are appended by enqueueDeckOp and drained when the debounce fires.
|
|
314
314
|
const pendingOpsQueue = new Map<string, GranularOp[]>();
|
|
315
315
|
|
|
316
|
-
// Cached snapshot for useSyncExternalStore. MUST be stable when
|
|
316
|
+
// Cached snapshot for useSyncExternalStore. MUST be stable when either value
|
|
317
317
|
// is unchanged or React will infinite-loop (it compares snapshots with
|
|
318
318
|
// Object.is — a fresh object literal every call schedules a new update,
|
|
319
319
|
// which calls getSnapshot again, which returns a new object… etc).
|
|
320
|
-
let cachedSnapshot: { saving: boolean } = {
|
|
320
|
+
let cachedSnapshot: { saving: boolean; hasUnsavedChanges: boolean } = {
|
|
321
|
+
saving: false,
|
|
322
|
+
hasUnsavedChanges: false,
|
|
323
|
+
};
|
|
321
324
|
|
|
322
325
|
function recomputeSnapshot() {
|
|
323
326
|
const saving =
|
|
324
327
|
pendingSaves.size > 0 || inFlightSaves.size > 0 || pendingOpsQueue.size > 0;
|
|
325
|
-
|
|
326
|
-
|
|
328
|
+
const hasUnsavedChanges = saving || failedSaveDecks.size > 0;
|
|
329
|
+
if (
|
|
330
|
+
saving !== cachedSnapshot.saving ||
|
|
331
|
+
hasUnsavedChanges !== cachedSnapshot.hasUnsavedChanges
|
|
332
|
+
) {
|
|
333
|
+
cachedSnapshot = { saving, hasUnsavedChanges };
|
|
327
334
|
}
|
|
328
335
|
}
|
|
329
336
|
|
|
@@ -342,8 +349,24 @@ export function subscribeSaveState(listener: () => void): () => void {
|
|
|
342
349
|
return () => saveStateListeners.delete(listener);
|
|
343
350
|
}
|
|
344
351
|
|
|
352
|
+
/**
|
|
353
|
+
* True when a deck still has a local write that has not been confirmed by the
|
|
354
|
+
* server, including a save that exhausted its retry budget.
|
|
355
|
+
*/
|
|
356
|
+
export function hasUnsavedDeckChanges(deckId: string): boolean {
|
|
357
|
+
return (
|
|
358
|
+
pendingSaves.has(deckId) ||
|
|
359
|
+
inFlightSaves.has(deckId) ||
|
|
360
|
+
pendingOpsQueue.has(deckId) ||
|
|
361
|
+
failedSaveDecks.has(deckId)
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
|
|
345
365
|
/** Snapshot of save state — true when anything is debounced or in flight. */
|
|
346
|
-
export function getSaveSnapshot(): {
|
|
366
|
+
export function getSaveSnapshot(): {
|
|
367
|
+
saving: boolean;
|
|
368
|
+
hasUnsavedChanges: boolean;
|
|
369
|
+
} {
|
|
347
370
|
return cachedSnapshot;
|
|
348
371
|
}
|
|
349
372
|
|
|
@@ -1040,12 +1063,7 @@ export function hasUncommittedDeckChanges(
|
|
|
1040
1063
|
deckId: string,
|
|
1041
1064
|
dirtyDeckIds: Set<string>,
|
|
1042
1065
|
): boolean {
|
|
1043
|
-
return (
|
|
1044
|
-
dirtyDeckIds.has(deckId) ||
|
|
1045
|
-
pendingSaves.has(deckId) ||
|
|
1046
|
-
inFlightSaves.has(deckId) ||
|
|
1047
|
-
failedSaveDecks.has(deckId)
|
|
1048
|
-
);
|
|
1066
|
+
return dirtyDeckIds.has(deckId) || hasUnsavedDeckChanges(deckId);
|
|
1049
1067
|
}
|
|
1050
1068
|
|
|
1051
1069
|
/**
|
|
@@ -1174,6 +1192,7 @@ export function DeckProvider({ children }: { children: ReactNode }) {
|
|
|
1174
1192
|
const pendingDuplicateSourceIdsRef = useRef<Set<string>>(new Set());
|
|
1175
1193
|
const dirtyDeckIdsRef = useRef<Set<string>>(new Set());
|
|
1176
1194
|
const deckBaselineRequestIdRef = useRef(0);
|
|
1195
|
+
const openDeckRequestIdByDeckRef = useRef<Map<string, number>>(new Map());
|
|
1177
1196
|
// True only while the SSE channel is actually open. Stays false when SSE is
|
|
1178
1197
|
// never started (embed auth), so the poll keeps its fast intervals there.
|
|
1179
1198
|
const liveChannelConnectedRef = useRef(false);
|
|
@@ -1396,7 +1415,13 @@ export function DeckProvider({ children }: { children: ReactNode }) {
|
|
|
1396
1415
|
// agent-added slides without ever overwriting or dropping local slides.
|
|
1397
1416
|
const refetchOpenDeckIfChanged = useCallback(
|
|
1398
1417
|
async (currentOpenId: string): Promise<Deck | null> => {
|
|
1418
|
+
const requestId =
|
|
1419
|
+
(openDeckRequestIdByDeckRef.current.get(currentOpenId) ?? 0) + 1;
|
|
1420
|
+
openDeckRequestIdByDeckRef.current.set(currentOpenId, requestId);
|
|
1399
1421
|
const serverDeck = await fetchDeckFromAPI(currentOpenId);
|
|
1422
|
+
if (openDeckRequestIdByDeckRef.current.get(currentOpenId) !== requestId) {
|
|
1423
|
+
return null;
|
|
1424
|
+
}
|
|
1400
1425
|
// Null means 404 (row not created yet), a transient failure, or a
|
|
1401
1426
|
// still-pending create — nothing authoritative to reconcile.
|
|
1402
1427
|
if (!serverDeck) return null;
|
|
@@ -1693,21 +1718,16 @@ export function DeckProvider({ children }: { children: ReactNode }) {
|
|
|
1693
1718
|
lastExternalUpdateRef.current = Date.now();
|
|
1694
1719
|
setDecks((prev) => prev.filter((d) => d.id !== data.deckId));
|
|
1695
1720
|
} else if (data.type === "deck-changed") {
|
|
1696
|
-
//
|
|
1697
|
-
// event
|
|
1698
|
-
//
|
|
1699
|
-
//
|
|
1700
|
-
//
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
// Refetch the changed deck from the shared action surface.
|
|
1707
|
-
void fetchDeckFromAPI(data.deckId).then((updated) => {
|
|
1708
|
-
if (stopped || !updated) return;
|
|
1709
|
-
lastExternalUpdateRef.current = Date.now(); // Suppress save-back
|
|
1710
|
-
applyRemoteDeckUpdate(updated);
|
|
1721
|
+
// Do not drop the event while a local edit/save is pending. The
|
|
1722
|
+
// event may be an own-write echo, but it may also be an agent
|
|
1723
|
+
// write that arrived during the same local edit. The reconciler
|
|
1724
|
+
// preserves local slide bodies and local-only slides while still
|
|
1725
|
+
// surfacing server-added slides immediately.
|
|
1726
|
+
void refetchOpenDeckIfChanged(data.deckId).catch((error) => {
|
|
1727
|
+
console.error(
|
|
1728
|
+
`Failed to refresh deck ${data.deckId} after sync event:`,
|
|
1729
|
+
error,
|
|
1730
|
+
);
|
|
1711
1731
|
});
|
|
1712
1732
|
}
|
|
1713
1733
|
}
|
|
@@ -1732,7 +1752,7 @@ export function DeckProvider({ children }: { children: ReactNode }) {
|
|
|
1732
1752
|
liveChannelConnectedRef.current = false;
|
|
1733
1753
|
unsubscribe();
|
|
1734
1754
|
};
|
|
1735
|
-
}, [
|
|
1755
|
+
}, [refetchOpenDeckIfChanged, resyncDeckState]);
|
|
1736
1756
|
|
|
1737
1757
|
// Flush pending (debounced) saves before the tab is hidden or unloaded so the
|
|
1738
1758
|
// last ~500ms of edits aren't lost on close/navigation. `pagehide` is the
|
|
@@ -2344,15 +2364,21 @@ export function useDecks() {
|
|
|
2344
2364
|
}
|
|
2345
2365
|
|
|
2346
2366
|
/**
|
|
2347
|
-
* Subscribe to deck save-state.
|
|
2348
|
-
*
|
|
2367
|
+
* Subscribe to deck save-state. `saving` is true while any deck has a pending
|
|
2368
|
+
* debounce timer or an in-flight PUT. `hasUnsavedChanges` also stays true when
|
|
2369
|
+
* a save has exhausted its retry budget, so navigation can warn before the
|
|
2370
|
+
* user leaves work that is still only local.
|
|
2349
2371
|
*
|
|
2350
2372
|
* Used by SaveStatusIndicator in the toolbar so users always see whether
|
|
2351
2373
|
* their work has been committed (Rochkind reported losing a full deck because
|
|
2352
2374
|
* there was no save signal).
|
|
2353
2375
|
*/
|
|
2354
|
-
export function useSaveState(): {
|
|
2376
|
+
export function useSaveState(): {
|
|
2377
|
+
saving: boolean;
|
|
2378
|
+
hasUnsavedChanges: boolean;
|
|
2379
|
+
} {
|
|
2355
2380
|
return useSyncExternalStore(subscribeSaveState, getSaveSnapshot, () => ({
|
|
2356
2381
|
saving: false,
|
|
2382
|
+
hasUnsavedChanges: false,
|
|
2357
2383
|
}));
|
|
2358
2384
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useActionQuery } from "@agent-native/core/client/hooks";
|
|
2
2
|
|
|
3
|
-
type Role = "viewer" | "editor" | "admin";
|
|
3
|
+
type Role = "viewer" | "commenter" | "editor" | "admin";
|
|
4
4
|
|
|
5
5
|
interface SharesResponse {
|
|
6
6
|
ownerEmail: string | null;
|
|
@@ -11,8 +11,8 @@ interface SharesResponse {
|
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Resolve the signed-in user's role on a deck. Mirrors Google Slides:
|
|
14
|
-
* `Viewer` =
|
|
15
|
-
*
|
|
14
|
+
* `Viewer` = read-only, `Commenter` = read-only with comment affordances;
|
|
15
|
+
* Owner / Editor / Admin get full editing.
|
|
16
16
|
*
|
|
17
17
|
* `assumeEditorWhileLoading` should only be true when a faster, already-known
|
|
18
18
|
* signal (e.g. `deck.createdByMe`) confirms the caller is the owner — that
|
|
@@ -28,6 +28,7 @@ export function useDeckRole(
|
|
|
28
28
|
): {
|
|
29
29
|
role: SharesResponse["role"] | undefined;
|
|
30
30
|
canEdit: boolean;
|
|
31
|
+
canComment: boolean;
|
|
31
32
|
isLoading: boolean;
|
|
32
33
|
} {
|
|
33
34
|
const query = useActionQuery<SharesResponse>(
|
|
@@ -39,6 +40,13 @@ export function useDeckRole(
|
|
|
39
40
|
const canEdit =
|
|
40
41
|
role === undefined
|
|
41
42
|
? assumeEditorWhileLoading
|
|
42
|
-
: role === "owner" || role
|
|
43
|
-
|
|
43
|
+
: role === "owner" || role === "editor" || role === "admin";
|
|
44
|
+
const canComment =
|
|
45
|
+
role === undefined
|
|
46
|
+
? assumeEditorWhileLoading
|
|
47
|
+
: role === "owner" ||
|
|
48
|
+
role === "commenter" ||
|
|
49
|
+
role === "editor" ||
|
|
50
|
+
role === "admin";
|
|
51
|
+
return { role, canEdit, canComment, isLoading: query.isLoading };
|
|
44
52
|
}
|
|
@@ -7,7 +7,7 @@ type DesignSystemSummary = {
|
|
|
7
7
|
data: string;
|
|
8
8
|
isDefault: boolean;
|
|
9
9
|
visibility?: "private" | "org" | "public" | null;
|
|
10
|
-
accessRole?: "owner" | "admin" | "editor" | "viewer";
|
|
10
|
+
accessRole?: "owner" | "admin" | "editor" | "commenter" | "viewer";
|
|
11
11
|
canManage?: boolean;
|
|
12
12
|
createdAt: string;
|
|
13
13
|
};
|
|
@@ -385,6 +385,7 @@ const messages = {
|
|
|
385
385
|
center: "Center",
|
|
386
386
|
right: "Right",
|
|
387
387
|
justify: "Justify",
|
|
388
|
+
distribute: "Distribute",
|
|
388
389
|
fill: "Fill",
|
|
389
390
|
tint: "Tint",
|
|
390
391
|
transparent: "Transparent",
|
|
@@ -563,6 +564,11 @@ const messages = {
|
|
|
563
564
|
dismissLayoutWarning: "Dismiss layout warning",
|
|
564
565
|
slidesAdded_one: "{{count}} slide added",
|
|
565
566
|
slidesAdded_other: "{{count}} slides added",
|
|
567
|
+
unsavedChangesTitle: "Unsaved changes",
|
|
568
|
+
unsavedChangesDescription:
|
|
569
|
+
"If you leave or reload now, you may lose changes that have not been saved yet. Are you sure you want to exit?",
|
|
570
|
+
keepEditing: "Keep editing",
|
|
571
|
+
leaveWithoutSaving: "Exit without saving",
|
|
566
572
|
},
|
|
567
573
|
designSystemSetup: {
|
|
568
574
|
importedBrand: "Imported brand",
|
|
@@ -662,8 +668,6 @@ const messages = {
|
|
|
662
668
|
all: "All",
|
|
663
669
|
showMineDecks: "Show decks created by me",
|
|
664
670
|
mine: "Mine",
|
|
665
|
-
deckCount_one: "deck",
|
|
666
|
-
deckCount_other: "decks",
|
|
667
671
|
createDeckOrVisual: "Create a presentation",
|
|
668
672
|
noMineDecks: "No decks created by you yet.",
|
|
669
673
|
noDecksMatchSearch: "No decks match your search.",
|
|
@@ -396,6 +396,7 @@ export async function startDeckGeneration({
|
|
|
396
396
|
sourceModeInstructions,
|
|
397
397
|
"If the user asked for a specific slide count, keep going sequentially until that count is reached unless a tool error blocks you. If no explicit count was given (including when the guided slide-count question was skipped), infer the count from the distinct topics/sections implied by the request — one slide per section plus a title and closing slide — and add slides for every section before considering the deck done. Do not stop at an arbitrary round number (e.g. 10) if sections remain uncovered, and never call `generate-slides-ai` for this flow; it is a legacy single-shot helper capped at 10 slides.",
|
|
398
398
|
"Every slide is rendered into a fixed native canvas (default 16:9 is 960x540 CSS pixels, with 740x380px available inside standard 80px 110px padding). Keep the main content within that fit budget; split dense source material across more slides instead of packing it tightly. Never use zoom, transform: scale(), clipping, or scroll overflow to hide content overflow, and keep body text at least 16px.",
|
|
399
|
+
"When no reference deck or hydrated design system is available, use a restrained, content-first visual language. Do not invent colorful cards, boxes, or decorative rectangles behind or over text; add a colored shape only when it has a clear semantic role and leaves the text unobscured. Prefer typography, spacing, alignment, and one restrained accent.",
|
|
399
400
|
"Each slide's --content must be full HTML. Slide HTML templates are in your AGENTS.md.",
|
|
400
401
|
"Do NOT use create-deck (the deck already exists). Do NOT call db-schema, the resources tool, or search-files.",
|
|
401
402
|
].join("\n");
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
|
|
3
|
+
export function preventPendingDeckUnload(event: BeforeUnloadEvent): void {
|
|
4
|
+
event.preventDefault();
|
|
5
|
+
event.returnValue = "";
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Keep the browser's native reload/close confirmation attached only while a
|
|
10
|
+
* deck has local work that cannot be recovered from the server.
|
|
11
|
+
*/
|
|
12
|
+
export function usePendingDeckUnloadGuard(hasPendingEdits: boolean): void {
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!hasPendingEdits) return;
|
|
15
|
+
window.addEventListener("beforeunload", preventPendingDeckUnload, {
|
|
16
|
+
capture: true,
|
|
17
|
+
});
|
|
18
|
+
return () => {
|
|
19
|
+
window.removeEventListener("beforeunload", preventPendingDeckUnload, {
|
|
20
|
+
capture: true,
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
}, [hasPendingEdits]);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function shouldBlockPendingDeckNavigation(args: {
|
|
27
|
+
hasPendingEdits: boolean;
|
|
28
|
+
currentPathname: string;
|
|
29
|
+
nextPathname: string;
|
|
30
|
+
}): boolean {
|
|
31
|
+
return args.hasPendingEdits && args.currentPathname !== args.nextPathname;
|
|
32
|
+
}
|
|
@@ -24,7 +24,12 @@ import {
|
|
|
24
24
|
} from "@tabler/icons-react";
|
|
25
25
|
import { nanoid } from "nanoid";
|
|
26
26
|
import { useState, useCallback, useRef, useEffect } from "react";
|
|
27
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
useBlocker,
|
|
29
|
+
useNavigate,
|
|
30
|
+
useParams,
|
|
31
|
+
useSearchParams,
|
|
32
|
+
} from "react-router";
|
|
28
33
|
import { toast } from "sonner";
|
|
29
34
|
|
|
30
35
|
import { SlideCommentsPanel } from "@/components/comments/SlideCommentsPanel";
|
|
@@ -40,8 +45,23 @@ import ImageGenPanel from "@/components/editor/ImageGenPanel";
|
|
|
40
45
|
import { QuestionFlow } from "@/components/editor/QuestionFlow";
|
|
41
46
|
import SlideEditor from "@/components/editor/SlideEditor";
|
|
42
47
|
import { TweaksPanel } from "@/components/editor/TweaksPanel";
|
|
48
|
+
import {
|
|
49
|
+
AlertDialog,
|
|
50
|
+
AlertDialogAction,
|
|
51
|
+
AlertDialogCancel,
|
|
52
|
+
AlertDialogContent,
|
|
53
|
+
AlertDialogDescription,
|
|
54
|
+
AlertDialogFooter,
|
|
55
|
+
AlertDialogHeader,
|
|
56
|
+
AlertDialogTitle,
|
|
57
|
+
} from "@/components/ui/alert-dialog";
|
|
43
58
|
import { Button } from "@/components/ui/button";
|
|
44
|
-
import {
|
|
59
|
+
import {
|
|
60
|
+
deckIdFromPathname,
|
|
61
|
+
hasUnsavedDeckChanges,
|
|
62
|
+
useDecks,
|
|
63
|
+
useSaveState,
|
|
64
|
+
} from "@/context/DeckContext";
|
|
45
65
|
import { useAgentGenerating } from "@/hooks/use-agent-generating";
|
|
46
66
|
import { useDeckDesignSystem } from "@/hooks/use-deck-design-system";
|
|
47
67
|
import { useDeckPresence } from "@/hooks/use-deck-presence";
|
|
@@ -65,6 +85,10 @@ import {
|
|
|
65
85
|
shouldShowNewDeckGeneratingProgress,
|
|
66
86
|
} from "@/lib/generation-state";
|
|
67
87
|
import { isMissingUploadProviderError } from "@/lib/image-drop-to-agent";
|
|
88
|
+
import {
|
|
89
|
+
shouldBlockPendingDeckNavigation,
|
|
90
|
+
usePendingDeckUnloadGuard,
|
|
91
|
+
} from "@/lib/pending-deck-changes";
|
|
68
92
|
import { imageFileLooksSupported } from "@/lib/slide-image-replacement";
|
|
69
93
|
import {
|
|
70
94
|
insertDroppedImageIntoSlideHtml,
|
|
@@ -165,8 +189,34 @@ export default function DeckEditor() {
|
|
|
165
189
|
loadError,
|
|
166
190
|
} = useDecks();
|
|
167
191
|
const [activeSlideId, setActiveSlideId] = useState<string | null>(null);
|
|
192
|
+
const [inlineEditActive, setInlineEditActive] = useState(false);
|
|
168
193
|
const [addSlideGenerating, setAddSlideGenerating] = useState(false);
|
|
169
194
|
const [generatingSlideSelected, setGeneratingSlideSelected] = useState(false);
|
|
195
|
+
const { hasUnsavedChanges: hasUnsavedSave } = useSaveState();
|
|
196
|
+
const hasPendingDeckEdits =
|
|
197
|
+
inlineEditActive || (id ? hasUnsavedDeckChanges(id) : hasUnsavedSave);
|
|
198
|
+
usePendingDeckUnloadGuard(hasPendingDeckEdits);
|
|
199
|
+
const pendingDeckNavigationBlocker = useBlocker(
|
|
200
|
+
useCallback(
|
|
201
|
+
({ currentLocation, nextLocation }) =>
|
|
202
|
+
shouldBlockPendingDeckNavigation({
|
|
203
|
+
hasPendingEdits: hasPendingDeckEdits,
|
|
204
|
+
currentPathname: currentLocation.pathname,
|
|
205
|
+
nextPathname: nextLocation.pathname,
|
|
206
|
+
}),
|
|
207
|
+
[hasPendingDeckEdits],
|
|
208
|
+
),
|
|
209
|
+
);
|
|
210
|
+
const pendingDeckNavigationWarningOpen =
|
|
211
|
+
pendingDeckNavigationBlocker.state === "blocked";
|
|
212
|
+
const keepEditingAfterNavigationAttempt = useCallback(() => {
|
|
213
|
+
if (pendingDeckNavigationBlocker.state !== "blocked") return;
|
|
214
|
+
pendingDeckNavigationBlocker.reset();
|
|
215
|
+
}, [pendingDeckNavigationBlocker]);
|
|
216
|
+
const leaveWithPendingDeckChanges = useCallback(() => {
|
|
217
|
+
if (pendingDeckNavigationBlocker.state !== "blocked") return;
|
|
218
|
+
pendingDeckNavigationBlocker.proceed();
|
|
219
|
+
}, [pendingDeckNavigationBlocker]);
|
|
170
220
|
const { generating } = useAgentGenerating();
|
|
171
221
|
// Generation intent can arrive after this route mounts because the user
|
|
172
222
|
// answers pre-generation questions from the empty editor.
|
|
@@ -253,7 +303,7 @@ export default function DeckEditor() {
|
|
|
253
303
|
// get the full editor. Only assume edit access while the role is still
|
|
254
304
|
// loading when `createdByMe` already confirms ownership — otherwise a
|
|
255
305
|
// viewer would briefly see (and could click) edit affordances.
|
|
256
|
-
const { canEdit } = useDeckRole(id, deck?.createdByMe === true);
|
|
306
|
+
const { canEdit, canComment } = useDeckRole(id, deck?.createdByMe === true);
|
|
257
307
|
const isNewDeckGenerating = shouldShowNewDeckGeneratingProgress({
|
|
258
308
|
generating,
|
|
259
309
|
isNewDeckCreation: wasNewDeckCreation.current,
|
|
@@ -1005,6 +1055,7 @@ export default function DeckEditor() {
|
|
|
1005
1055
|
deckId={id}
|
|
1006
1056
|
deckTitle={deck.title}
|
|
1007
1057
|
canEdit={canEdit}
|
|
1058
|
+
canComment={canComment}
|
|
1008
1059
|
onTitleChange={(title) => updateDeck(id, { title })}
|
|
1009
1060
|
slideCount={deck.slides.length}
|
|
1010
1061
|
currentSlideIndex={currentIndex >= 0 ? currentIndex : 0}
|
|
@@ -1228,7 +1279,11 @@ export default function DeckEditor() {
|
|
|
1228
1279
|
options,
|
|
1229
1280
|
)
|
|
1230
1281
|
}
|
|
1231
|
-
onInlineEditStart={() =>
|
|
1282
|
+
onInlineEditStart={() => {
|
|
1283
|
+
setInlineEditActive(true);
|
|
1284
|
+
markDeckDirty(id);
|
|
1285
|
+
}}
|
|
1286
|
+
onInlineEditEnd={() => setInlineEditActive(false)}
|
|
1232
1287
|
onGenerateImage={() => setImageGenOpen(true)}
|
|
1233
1288
|
onOpenAssetLibrary={(src) => {
|
|
1234
1289
|
setReplaceImageSrc(src);
|
|
@@ -1257,6 +1312,7 @@ export default function DeckEditor() {
|
|
|
1257
1312
|
}
|
|
1258
1313
|
recentEdits={deckRecentEdits}
|
|
1259
1314
|
onComment={(quotedText) => {
|
|
1315
|
+
if (!canComment) return;
|
|
1260
1316
|
setPendingComment({ quotedText });
|
|
1261
1317
|
setSidePanel("comments");
|
|
1262
1318
|
}}
|
|
@@ -1284,6 +1340,7 @@ export default function DeckEditor() {
|
|
|
1284
1340
|
<SlideCommentsPanel
|
|
1285
1341
|
deckId={id}
|
|
1286
1342
|
slideId={currentSlide?.id ?? null}
|
|
1343
|
+
canComment={canComment}
|
|
1287
1344
|
pendingComment={pendingComment}
|
|
1288
1345
|
onPendingDone={() => setPendingComment(null)}
|
|
1289
1346
|
onClose={() => {
|
|
@@ -1365,6 +1422,30 @@ export default function DeckEditor() {
|
|
|
1365
1422
|
canRestore={canEdit}
|
|
1366
1423
|
anchorRef={historyButtonRef}
|
|
1367
1424
|
/>
|
|
1425
|
+
|
|
1426
|
+
<AlertDialog open={pendingDeckNavigationWarningOpen}>
|
|
1427
|
+
<AlertDialogContent>
|
|
1428
|
+
<AlertDialogHeader>
|
|
1429
|
+
<AlertDialogTitle>
|
|
1430
|
+
{t("deckEditor.unsavedChangesTitle")}
|
|
1431
|
+
</AlertDialogTitle>
|
|
1432
|
+
<AlertDialogDescription>
|
|
1433
|
+
{t("deckEditor.unsavedChangesDescription")}
|
|
1434
|
+
</AlertDialogDescription>
|
|
1435
|
+
</AlertDialogHeader>
|
|
1436
|
+
<AlertDialogFooter>
|
|
1437
|
+
<AlertDialogCancel onClick={keepEditingAfterNavigationAttempt}>
|
|
1438
|
+
{t("deckEditor.keepEditing")}
|
|
1439
|
+
</AlertDialogCancel>
|
|
1440
|
+
<AlertDialogAction
|
|
1441
|
+
className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
|
|
1442
|
+
onClick={leaveWithPendingDeckChanges}
|
|
1443
|
+
>
|
|
1444
|
+
{t("deckEditor.leaveWithoutSaving")}
|
|
1445
|
+
</AlertDialogAction>
|
|
1446
|
+
</AlertDialogFooter>
|
|
1447
|
+
</AlertDialogContent>
|
|
1448
|
+
</AlertDialog>
|
|
1368
1449
|
</div>
|
|
1369
1450
|
);
|
|
1370
1451
|
}
|