@agent-native/core 0.90.1 → 0.90.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +26 -0
- package/corpus/core/docs/content/agent-native-toolkit.mdx +87 -80
- package/corpus/core/docs/content/locales/ar-SA/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/de-DE/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/es-ES/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/fr-FR/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/hi-IN/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/ja-JP/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/ko-KR/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/pt-BR/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/zh-CN/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/zh-TW/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/toolkit-agent-ux.mdx +43 -0
- package/corpus/core/docs/content/toolkit-app-adapters.mdx +9 -0
- package/corpus/core/docs/content/toolkit-collaboration-ui.mdx +12 -0
- package/corpus/core/docs/content/toolkit-collaboration.mdx +74 -0
- package/corpus/core/docs/content/toolkit-command-navigation.mdx +106 -0
- package/corpus/core/docs/content/toolkit-comments-review.mdx +98 -0
- package/corpus/core/docs/content/toolkit-history.mdx +95 -0
- package/corpus/core/docs/content/toolkit-observability.mdx +41 -0
- package/corpus/core/docs/content/toolkit-org-team.mdx +80 -0
- package/corpus/core/docs/content/toolkit-resources.mdx +57 -0
- package/corpus/core/docs/content/toolkit-settings.mdx +65 -0
- package/corpus/core/docs/content/toolkit-setup-connections.mdx +109 -0
- package/corpus/core/docs/content/toolkit-sharing-ui.mdx +18 -6
- package/corpus/core/docs/content/toolkit-sharing.mdx +81 -0
- package/corpus/core/docs/content/toolkit-shell-hooks.mdx +9 -0
- package/corpus/core/docs/content/toolkit-ui.mdx +9 -0
- package/corpus/core/package.json +35 -1
- package/corpus/core/src/agent/engine/ai-sdk-engine.ts +19 -1
- package/corpus/core/src/agent/engine/anthropic-engine.ts +25 -1
- package/corpus/core/src/agent/engine/registry.ts +23 -16
- package/corpus/core/src/agent/production-agent.ts +37 -6
- package/corpus/core/src/client/AgentPanel.tsx +1 -1
- package/corpus/core/src/client/command-navigation/index.ts +15 -0
- package/corpus/core/src/client/comments-review/index.ts +1 -0
- package/corpus/core/src/client/history/VersionHistoryPanel.tsx +145 -0
- package/corpus/core/src/client/history/index.ts +18 -0
- package/corpus/core/src/client/history/use-history.ts +86 -0
- package/corpus/core/src/client/index.ts +76 -9
- package/corpus/core/src/client/org/OrgSwitcher.tsx +6 -6
- package/corpus/core/src/client/org/RequireActiveOrg.tsx +2 -2
- package/corpus/core/src/client/org/TeamPage.tsx +3 -3
- package/corpus/core/src/client/org/hooks.ts +32 -0
- package/corpus/core/src/client/org/index.ts +30 -1
- package/corpus/core/src/client/org-team/index.ts +1 -0
- package/corpus/core/src/client/review/ReviewStatusBadge.tsx +39 -0
- package/corpus/core/src/client/review/ReviewThreadPanel.tsx +278 -0
- package/corpus/core/src/client/review/index.ts +25 -0
- package/corpus/core/src/client/review/use-review.ts +114 -0
- package/corpus/core/src/client/rich-markdown-editor/useCollabReconcile.ts +11 -6
- package/corpus/core/src/client/settings/index.ts +11 -1
- package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +94 -0
- package/corpus/core/src/client/setup-connections/ProviderReadinessBadge.tsx +73 -0
- package/corpus/core/src/client/setup-connections/SetupConnectionsPage.tsx +94 -0
- package/corpus/core/src/client/setup-connections/index.ts +46 -0
- package/corpus/core/src/client/sharing/ShareButton.tsx +20 -14
- package/corpus/core/src/client/sharing/ShareDialog.tsx +3 -3
- package/corpus/core/src/client/use-action.ts +39 -2
- package/corpus/core/src/client/use-db-sync.ts +44 -18
- package/corpus/core/src/command-navigation/actions.ts +100 -0
- package/corpus/core/src/command-navigation/index.ts +12 -0
- package/corpus/core/src/comments-review/index.ts +1 -0
- package/corpus/core/src/db/create-get-db.ts +32 -2
- package/corpus/core/src/file-upload/builder.ts +24 -3
- package/corpus/core/src/file-upload/types.ts +3 -1
- package/corpus/core/src/history/actions/create-resource-version.ts +89 -0
- package/corpus/core/src/history/actions/get-resource-version.ts +60 -0
- package/corpus/core/src/history/actions/list-resource-history.ts +53 -0
- package/corpus/core/src/history/actions/list-resource-versions.ts +43 -0
- package/corpus/core/src/history/actions/restore-resource-version.ts +96 -0
- package/corpus/core/src/history/index.ts +27 -0
- package/corpus/core/src/history/registry.ts +99 -0
- package/corpus/core/src/history/store.ts +348 -0
- package/corpus/core/src/history/types.ts +69 -0
- package/corpus/core/src/index.ts +10 -0
- package/corpus/core/src/navigation/index.ts +170 -0
- package/corpus/core/src/org/index.ts +8 -0
- package/corpus/core/src/org/permissions.ts +30 -0
- package/corpus/core/src/org-team/index.ts +1 -0
- package/corpus/core/src/private-blob/registry.ts +1 -0
- package/corpus/core/src/review/actions/consume-review-feedback.ts +38 -0
- package/corpus/core/src/review/actions/create-review-comment.ts +107 -0
- package/corpus/core/src/review/actions/delete-review-comment.ts +55 -0
- package/corpus/core/src/review/actions/get-review-feedback.ts +54 -0
- package/corpus/core/src/review/actions/list-review-comments.ts +53 -0
- package/corpus/core/src/review/actions/reply-review-comment.ts +107 -0
- package/corpus/core/src/review/actions/resolve-review-thread.ts +60 -0
- package/corpus/core/src/review/actions/set-review-status.ts +58 -0
- package/corpus/core/src/review/index.ts +36 -0
- package/corpus/core/src/review/mentions.ts +44 -0
- package/corpus/core/src/review/registry.ts +99 -0
- package/corpus/core/src/review/store.ts +687 -0
- package/corpus/core/src/review/types.ts +97 -0
- package/corpus/core/src/server/action-discovery.ts +54 -0
- package/corpus/core/src/server/agent-engine-api-key-route.ts +5 -0
- package/corpus/core/src/server/credential-provider.ts +108 -0
- package/corpus/core/src/server/framework-request-handler.ts +52 -4
- package/corpus/core/src/setup-connections/index.ts +89 -0
- package/corpus/core/src/setup-connections/onboarding.ts +47 -0
- package/corpus/core/src/transcription/builder-transcription.ts +9 -2
- package/corpus/core/src/vite/action-types-plugin.ts +52 -0
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +2 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/analytics/app/global.css +22 -10
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +6 -1
- package/corpus/templates/analytics/app/i18n-data.ts +81 -13
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +2 -2
- package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +2 -2
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +528 -108
- package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +466 -183
- package/corpus/templates/analytics/changelog/2026-07-07-session-replays-load-sooner-show-clearer-activity-timelines-.md +6 -0
- package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +5 -0
- package/corpus/templates/assets/.agents/skills/logo-composite/SKILL.md +34 -6
- package/corpus/templates/assets/AGENTS.md +23 -4
- package/corpus/templates/assets/actions/_generation-preset-settings.ts +48 -0
- package/corpus/templates/assets/actions/_helpers.ts +8 -1
- package/corpus/templates/assets/actions/_preset-skeleton-validation.ts +64 -0
- package/corpus/templates/assets/actions/create-generation-preset.ts +11 -3
- package/corpus/templates/assets/actions/generate-image-batch.ts +7 -2
- package/corpus/templates/assets/actions/generate-image.ts +342 -25
- package/corpus/templates/assets/actions/get-library.ts +4 -3
- package/corpus/templates/assets/actions/navigate.ts +2 -1
- package/corpus/templates/assets/actions/refresh-generation-run.ts +5 -1
- package/corpus/templates/assets/actions/update-asset.ts +1 -0
- package/corpus/templates/assets/actions/update-generation-preset.ts +8 -1
- package/corpus/templates/assets/actions/view-screen.ts +8 -1
- package/corpus/templates/assets/app/components/generation/GenerationResults.tsx +9 -1
- package/corpus/templates/assets/app/hooks/use-image-model-menu.ts +1 -0
- package/corpus/templates/assets/app/hooks/use-navigation-state.ts +11 -0
- package/corpus/templates/assets/app/i18n/zh-TW.ts +64 -0
- package/corpus/templates/assets/app/i18n-data.ts +650 -0
- package/corpus/templates/assets/app/routes/asset.$id.tsx +2 -1
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +44 -33
- package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +1474 -0
- package/corpus/templates/assets/app/routes/library.tsx +43 -1
- package/corpus/templates/assets/server/lib/generation.ts +366 -44
- package/corpus/templates/assets/server/lib/image-processing.ts +252 -0
- package/corpus/templates/assets/server/lib/preset-skeleton.ts +137 -0
- package/corpus/templates/assets/shared/api.ts +47 -0
- package/corpus/templates/brain/app/routes/settings.tsx +2 -2
- package/corpus/templates/calendar/app/components/calendar/AttendeeAutocomplete.tsx +32 -6
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +120 -40
- package/corpus/templates/calendar/app/hooks/use-people.ts +55 -0
- package/corpus/templates/calendar/changelog/2026-07-07-guest-suggestions-now-find-coworkers-from-your-google-worksp.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-07-zoom-stays-selected-after-connecting-it-from-a-draft-event.md +6 -0
- package/corpus/templates/clips/actions/create-recording.ts +5 -1
- package/corpus/templates/clips/actions/finalize-recording.ts +140 -1
- package/corpus/templates/clips/actions/import-loom-recording.ts +1 -0
- package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +1 -0
- package/corpus/templates/clips/actions/request-transcript.ts +31 -0
- package/corpus/templates/clips/actions/set-thumbnail.ts +2 -0
- package/corpus/templates/clips/app/components/library/library-layout.tsx +7 -2
- package/corpus/templates/clips/app/components/library/organization-switcher.tsx +2 -2
- package/corpus/templates/clips/app/components/library/sort-menu.tsx +1 -1
- package/corpus/templates/clips/app/components/player/scrubber-position.ts +9 -0
- package/corpus/templates/clips/app/components/player/scrubber.tsx +5 -2
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +69 -41
- package/corpus/templates/clips/app/components/player/video-player.tsx +38 -1
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +114 -33
- package/corpus/templates/clips/app/components/sharing/share-ui.tsx +3 -3
- package/corpus/templates/clips/app/components/sharing/slack-share-hint.tsx +9 -19
- package/corpus/templates/clips/app/routes/_app.library._index.tsx +27 -1
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +9 -3
- package/corpus/templates/clips/app/routes/record.tsx +178 -80
- package/corpus/templates/clips/changelog/2026-07-02-recordings-now-wait-for-storage-media-to-serve-before-finishing.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-07-a-pending-app-update-no-longer-blocks-screen-recording-updat.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-07-chrome-extension-recordings-keep-audio-after-refreshing-tab.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-07-clip-playback-progress-now-starts-and-finishes-at-the-right-times.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-07-sharing-public-clips-now-stays-focused-on-the-normal-link-wi.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/background.ts +18 -0
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +23 -8
- package/corpus/templates/clips/desktop/src/app.tsx +40 -3
- package/corpus/templates/clips/desktop/src/hooks/useMediaDevices.ts +19 -7
- package/corpus/templates/clips/desktop/src/lib/permissions.ts +2 -0
- package/corpus/templates/clips/desktop/src/lib/updater.ts +25 -2
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +7 -0
- package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +1 -0
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +23 -6
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +28 -3
- package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +13 -6
- package/corpus/templates/clips/shared/finalize-recovery.ts +35 -3
- package/corpus/templates/content/AGENTS.md +52 -52
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +188 -8
- package/corpus/templates/content/actions/_builder-docs-client.ts +41 -3
- package/corpus/templates/content/actions/_database-source-utils.ts +998 -160
- package/corpus/templates/content/actions/_database-utils.ts +44 -4
- package/corpus/templates/content/actions/_notion-action-utils.ts +6 -2
- package/corpus/templates/content/actions/add-content-database-source-field-property.ts +23 -1
- package/corpus/templates/content/actions/attach-content-database-source.ts +85 -12
- package/corpus/templates/content/actions/change-content-database-source-role.ts +9 -1
- package/corpus/templates/content/actions/delete-content-database.ts +1 -0
- package/corpus/templates/content/actions/delete-document.ts +337 -52
- package/corpus/templates/content/actions/get-document.ts +11 -2
- package/corpus/templates/content/actions/list-content-databases.ts +57 -9
- package/corpus/templates/content/actions/prepare-builder-source-review.ts +23 -6
- package/corpus/templates/content/actions/refresh-content-database-source.ts +26 -3
- package/corpus/templates/content/actions/restore-content-database.ts +1 -0
- package/corpus/templates/content/actions/update-document.ts +43 -0
- package/corpus/templates/content/app/components/editor/BuilderBodySyncingNotice.tsx +21 -0
- package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +0 -1
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +70 -28
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +69 -17
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +4 -4
- package/corpus/templates/content/app/components/editor/body-hydration.ts +112 -0
- package/corpus/templates/content/app/components/editor/builder-body-hydration-pump.ts +52 -0
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +9076 -2876
- package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +41 -1
- package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +36 -11
- package/corpus/templates/content/app/components/editor/previewDocumentSaveController.ts +21 -1
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +11 -1
- package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +11 -8
- package/corpus/templates/content/app/global.css +41 -0
- package/corpus/templates/content/app/hooks/use-content-database.ts +346 -42
- package/corpus/templates/content/app/hooks/use-db-sync.ts +9 -0
- package/corpus/templates/content/app/hooks/use-documents.ts +47 -0
- package/corpus/templates/content/app/hooks/use-notion.ts +12 -10
- package/corpus/templates/content/app/i18n/zh-TW.ts +35 -0
- package/corpus/templates/content/app/i18n-data.ts +355 -0
- package/corpus/templates/content/app/root.tsx +22 -0
- package/corpus/templates/content/changelog/2026-07-01-builder-database-sources-keep-loading-rows-in-the-background.md +6 -0
- package/corpus/templates/content/changelog/2026-07-01-builder-source-attach-starts-with-usable-rows.md +6 -0
- package/corpus/templates/content/changelog/2026-07-01-builder-source-attachment-now-stays-connected-after-large.md +6 -0
- package/corpus/templates/content/changelog/2026-07-01-builder-source-refreshes-now-show-progress-for-large-docs-blog.md +6 -0
- package/corpus/templates/content/changelog/2026-07-01-database-pages-now-delete-to-trash-without-route-errors.md +6 -0
- package/corpus/templates/content/changelog/2026-07-02-builder-source-refreshes-recover-from-stalled-background-row.md +6 -0
- package/corpus/templates/content/changelog/2026-07-02-builder-sourced-rows-open-with-sync-protection.md +6 -0
- package/corpus/templates/content/changelog/2026-07-02-database-rows-and-pages-open-faster-from-recently-loaded-dat.md +6 -0
- package/corpus/templates/content/changelog/2026-07-02-preview-panels-close-reliably-narrow-sidebar-row-actions-sta.md +6 -0
- package/corpus/templates/content/changelog/2026-07-06-builder-sync-progress-no-longer-shows-continue.md +6 -0
- package/corpus/templates/content/changelog/2026-07-07-permanently-deleting-trashed-databases-now-finishes-reliably.md +6 -0
- package/corpus/templates/content/shared/api.ts +13 -0
- package/corpus/templates/content/shared/builder-mdx.ts +16 -3
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +23 -13
- package/corpus/templates/design/.agents/skills/responsive-breakpoints/SKILL.md +98 -0
- package/corpus/templates/design/.agents/skills/shader-fills/SKILL.md +162 -0
- package/corpus/templates/design/AGENTS.md +9 -2
- package/corpus/templates/design/actions/add-breakpoint.ts +6 -3
- package/corpus/templates/design/actions/apply-a11y-fix.ts +57 -37
- package/corpus/templates/design/actions/apply-component-prop-edit.ts +41 -20
- package/corpus/templates/design/actions/apply-motion-edit.ts +251 -38
- package/corpus/templates/design/actions/apply-shader-fill.ts +90 -66
- package/corpus/templates/design/actions/apply-visual-edit.ts +282 -55
- package/corpus/templates/design/actions/create-component.ts +29 -60
- package/corpus/templates/design/actions/create-file.ts +9 -2
- package/corpus/templates/design/actions/duplicate-design.ts +31 -2
- package/corpus/templates/design/actions/edit-design.ts +36 -38
- package/corpus/templates/design/actions/generate-design-title.ts +87 -0
- package/corpus/templates/design/actions/generate-design.ts +53 -18
- package/corpus/templates/design/actions/generate-screens.ts +108 -4
- package/corpus/templates/design/actions/get-motion-timeline.ts +35 -7
- package/corpus/templates/design/actions/insert-asset.ts +34 -29
- package/corpus/templates/design/actions/insert-design-native-asset.ts +129 -32
- package/corpus/templates/design/actions/insert-figma-library-asset.ts +35 -30
- package/corpus/templates/design/actions/present-design-variants.ts +7 -2
- package/corpus/templates/design/actions/remove-motion-timeline.ts +31 -36
- package/corpus/templates/design/actions/update-file.ts +190 -75
- package/corpus/templates/design/app/components/design/BreakpointBar.tsx +403 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +469 -222
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +708 -53
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +83 -3
- package/corpus/templates/design/app/components/design/EditPanel.tsx +1091 -6948
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +419 -85
- package/corpus/templates/design/app/components/design/MotionDock.tsx +1124 -103
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +2610 -1398
- package/corpus/templates/design/app/components/design/ReadOnlyDesignBanner.tsx +22 -0
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +2182 -235
- package/corpus/templates/design/app/components/design/bridge/motion-preview.bridge.ts +187 -11
- package/corpus/templates/design/app/components/design/bridge/shader-fill-preview.bridge.ts +376 -1
- package/corpus/templates/design/app/components/design/bridge/shader-runtime.bridge.ts +746 -0
- package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +17 -0
- package/corpus/templates/design/app/components/design/code-workbench/SideBar.tsx +1 -1
- package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +1 -3
- package/corpus/templates/design/app/components/design/code-workbench/quickinput/QuickInput.tsx +1 -1
- package/corpus/templates/design/app/components/design/edit-panel/appearance-properties.tsx +518 -0
- package/corpus/templates/design/app/components/design/edit-panel/code-inspect-helpers.tsx +562 -0
- package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +763 -0
- package/corpus/templates/design/app/components/design/edit-panel/document-colors.ts +94 -0
- package/corpus/templates/design/app/components/design/edit-panel/effects-properties.tsx +780 -0
- package/corpus/templates/design/app/components/design/edit-panel/element-classification.ts +446 -0
- package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +79 -0
- package/corpus/templates/design/app/components/design/edit-panel/field-primitives.tsx +315 -0
- package/corpus/templates/design/app/components/design/edit-panel/fill-gradient-helpers.ts +344 -0
- package/corpus/templates/design/app/components/design/edit-panel/fill-properties.tsx +594 -0
- package/corpus/templates/design/app/components/design/edit-panel/frame-presets-panel.tsx +119 -0
- package/corpus/templates/design/app/components/design/edit-panel/inspector-controls.tsx +248 -0
- package/corpus/templates/design/app/components/design/edit-panel/interaction-state-helpers.ts +45 -0
- package/corpus/templates/design/app/components/design/edit-panel/layout-properties.tsx +693 -0
- package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +724 -0
- package/corpus/templates/design/app/components/design/edit-panel/position-helpers.ts +207 -0
- package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +628 -0
- package/corpus/templates/design/app/components/design/edit-panel/selection-helpers.ts +91 -0
- package/corpus/templates/design/app/components/design/edit-panel/stroke-properties.tsx +649 -0
- package/corpus/templates/design/app/components/design/edit-panel/style-change-types.ts +118 -0
- package/corpus/templates/design/app/components/design/edit-panel/style-options.ts +88 -0
- package/corpus/templates/design/app/components/design/edit-panel/transform-helpers.ts +100 -0
- package/corpus/templates/design/app/components/design/edit-panel/typography-helpers.ts +117 -0
- package/corpus/templates/design/app/components/design/edit-panel/typography-properties.tsx +501 -0
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +91 -40
- package/corpus/templates/design/app/components/design/inspector/BreakpointOverrideIndicator.tsx +82 -0
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +189 -87
- package/corpus/templates/design/app/components/design/inspector/GlslShaderPanel.tsx +1097 -0
- package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +44 -0
- package/corpus/templates/design/app/components/design/inspector/InteractionStatePanel.tsx +258 -0
- package/corpus/templates/design/app/components/design/inspector/MotionKeyframeDiamond.tsx +144 -0
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +99 -9
- package/corpus/templates/design/app/components/design/inspector/frame-size-presets.ts +116 -0
- package/corpus/templates/design/app/components/design/inspector/index.ts +26 -0
- package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +29 -0
- package/corpus/templates/design/app/components/design/multi-screen/alt-hover-measurement.ts +171 -0
- package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +220 -0
- package/corpus/templates/design/app/components/design/multi-screen/chrome-transitions.ts +35 -0
- package/corpus/templates/design/app/components/design/multi-screen/cross-screen-drop.ts +134 -0
- package/corpus/templates/design/app/components/design/multi-screen/culling.ts +185 -0
- package/corpus/templates/design/app/components/design/multi-screen/gradient-overlay-geometry.ts +120 -0
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +892 -0
- package/corpus/templates/design/app/components/design/multi-screen/vector-edit-geometry.ts +21 -0
- package/corpus/templates/design/app/components/design/types.ts +15 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +109 -5
- package/corpus/templates/design/app/global.css +8 -8
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +259 -2
- package/corpus/templates/design/app/i18n/zh-TW.ts +163 -9
- package/corpus/templates/design/app/i18n-breakpoints.ts +205 -0
- package/corpus/templates/design/app/i18n-data.ts +1664 -152
- package/corpus/templates/design/app/i18n-motion.ts +563 -0
- package/corpus/templates/design/app/lib/design-import.ts +73 -0
- package/corpus/templates/design/app/pages/Index.tsx +41 -22
- package/corpus/templates/design/changelog/2026-06-29-design-inspector-controls-now-match-figmas-softer-dark-chrome.md +1 -1
- package/corpus/templates/design/changelog/2026-06-30-design-now-has-a-figma-style-left-rail-for-file-agent-assets.md +1 -1
- package/corpus/templates/design/changelog/2026-06-30-design-tools-now-use-a-quieter-figma-style-list-layout.md +1 -1
- package/corpus/templates/design/changelog/2026-06-30-multi-select-outlines-now-stay-consistent-across-all-screens.md +1 -1
- package/corpus/templates/design/changelog/2026-07-03-canvas-interactions-now-match-figma-rotation-aware-resizing-.md +1 -1
- package/corpus/templates/design/changelog/2026-07-03-layers-panel-matches-figma-top-layer-on-top-drag-with-auto-s.md +1 -1
- package/corpus/templates/design/changelog/2026-07-05-designs-get-ai-generated-names-from-your-prompt.md +6 -0
- package/corpus/templates/design/changelog/2026-07-05-local-code-screens-keep-their-connection-when-duplicated-and.md +6 -0
- package/corpus/templates/design/changelog/2026-07-05-press-a-to-draw-screens-on-the-canvas-inside-a-screen-it-dr.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-3d-rotation-and-perspective-controls-on-every-element.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-ai-generated-and-duplicated-screens-now-get-their-editor-sel.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-applying-shaders-and-fills-in-quick-succession-can-no-longer.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-breakpoint-frames-in-the-overview-now-support-click-to-selec.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-breakpoint-segments-in-the-inspector-now-show-a-device-icon-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-breakpoint-targeting-now-lives-in-one-compact-control-in-the.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-canvas-edits-can-no-longer-be-overwritten-by-stale-collabora.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-canvas-edits-inside-screens-save-reliably-again.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-cleaner-inspector-removed-the-ask-ai-box-from-the-design-tab.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-clicking-empty-canvas-space-now-deselects-an-element-inside-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-dragging-an-element-onto-a-rectangle-now-nests-it-inside-wit.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-dragging-screens-and-objects-on-the-canvas-is-now-much-smoot.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-drawing-a-shape-or-text-on-the-canvas-no-longer-flashes-away.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-dropping-an-element-between-two-others-inside-a-screen-now-s.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-duplicating-a-screen-now-places-the-copy-exactly-where-you-d.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-edit-gradients-directly-on-elements-inside-screens-scale-str.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-edits-from-collaborators-and-the-agent-now-update-the-canvas.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-a-bug-where-most-style-position-and-text-edits-briefly.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-a-confusing-raw-error-message-when-a-file-upload-fails.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-a-rare-case-where-an-edit-could-be-silently-overwritte.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-inserted-assets-sometimes-disappearing-reappearing-or-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-inspector-value-scrubbing-producing-erratic-numbers-an.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-padding-gap-and-min-max-size-scrubbing-not-updating-th.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-text-stroke-color-turning-black-and-glyphs-disappearin.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-the-collapsed-effects-and-stroke-inspector-sections-sh.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-the-new-design-dialog-closing-unexpectedly-when-using-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-the-typography-section-missing-when-selecting-text-nes.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-full-view-no-longer-flashes-back-to-the-overview-on-entry-no.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-keyframe-animation-timeline-per-property-keyframes-easing-cu.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-moving-restyling-and-scrubbing-values-on-elements-in-ai-gene.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-padding-and-corner-radius-value-scrubbing-now-snaps-to-whole.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-padding-handles-now-only-resize-on-the-handle-line-itself-sh.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-preview-and-edit-hover-focus-and-pressed-states-with-real-cs.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-promoting-an-element-to-a-component-now-works-correctly-for-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-reduced-url-history-churn-and-selection-overlay-flicker-whil.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-removed-the-decorative-dot-before-screen-names-in-the-overvi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-responsive-breakpoints-edit-at-any-width-with-cascading-over.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-screen-labels-no-longer-turn-blue-when-you-hover-inside-the-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-scrolling-a-screen-with-an-element-selected-stays-smooth-on-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-selecting-multiple-elements-and-dragging-now-moves-the-whole.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-selection-borders-handles-and-value-readouts-now-stay-the-sa.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-selection-handles-and-editing-chrome-now-stay-a-constant-siz.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-shader-fills-and-effects-ai-authored-or-preset-glsl-shaders-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-text-drawn-on-the-canvas-now-defaults-to-white-and-inter-in-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-text-dropped-into-a-shape-now-stays-readable-instead-of-disa.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-the-add-tweak-controls-prompt-no-longer-jumps-to-the-corner-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-the-padding-value-readout-now-stays-visible-while-you-hover-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-the-selected-element-attachment-now-clears-from-the-chat-com.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-the-zoom-menu-is-more-compact-with-tight-rows-and-right-alig.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-undo-and-redo-no-longer-flash-the-screen-changes-now-apply-i.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-zoom-presets-like-zoom-to-50-now-stay-on-the-focused-screen-.md +6 -0
- package/corpus/templates/design/server/lib/import-design-files.ts +11 -2
- package/corpus/templates/design/server/source-workspace.ts +139 -59
- package/corpus/templates/design/shared/board-file.ts +11 -2
- package/corpus/templates/design/shared/breakpoint-media.ts +543 -0
- package/corpus/templates/design/shared/canvas-math.ts +354 -35
- package/corpus/templates/design/shared/code-layer.ts +277 -8
- package/corpus/templates/design/shared/design-state.ts +11 -4
- package/corpus/templates/design/shared/interaction-states.ts +548 -0
- package/corpus/templates/design/shared/motion-compiler.ts +186 -23
- package/corpus/templates/design/shared/motion-easing.ts +294 -0
- package/corpus/templates/design/shared/motion-timeline.ts +400 -34
- package/corpus/templates/design/shared/prompt-title.ts +95 -0
- package/corpus/templates/design/shared/responsive-classes.ts +448 -10
- package/corpus/templates/design/shared/screen-annotation.ts +46 -0
- package/corpus/templates/design/shared/shader-fills.ts +1009 -0
- package/corpus/templates/design/shared/shader-presets.ts +852 -4
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +15 -2
- package/corpus/templates/slides/app/components/editor/ImportButton.tsx +10 -1
- package/corpus/templates/slides/app/lib/upload-response.ts +71 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +2 -2
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +15 -1
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +20 -1
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +22 -14
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +27 -7
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/client/AgentPanel.js +1 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/command-navigation/index.d.ts +4 -0
- package/dist/client/command-navigation/index.d.ts.map +1 -0
- package/dist/client/command-navigation/index.js +4 -0
- package/dist/client/command-navigation/index.js.map +1 -0
- package/dist/client/comments-review/index.d.ts +2 -0
- package/dist/client/comments-review/index.d.ts.map +1 -0
- package/dist/client/comments-review/index.js +2 -0
- package/dist/client/comments-review/index.js.map +1 -0
- package/dist/client/history/VersionHistoryPanel.d.ts +18 -0
- package/dist/client/history/VersionHistoryPanel.d.ts.map +1 -0
- package/dist/client/history/VersionHistoryPanel.js +24 -0
- package/dist/client/history/VersionHistoryPanel.js.map +1 -0
- package/dist/client/history/index.d.ts +3 -0
- package/dist/client/history/index.d.ts.map +1 -0
- package/dist/client/history/index.js +3 -0
- package/dist/client/history/index.js.map +1 -0
- package/dist/client/history/use-history.d.ts +46 -0
- package/dist/client/history/use-history.d.ts.map +1 -0
- package/dist/client/history/use-history.js +18 -0
- package/dist/client/history/use-history.js.map +1 -0
- package/dist/client/index.d.ts +6 -4
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -4
- package/dist/client/index.js.map +1 -1
- package/dist/client/org/OrgSwitcher.js +5 -5
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/RequireActiveOrg.js +2 -2
- package/dist/client/org/RequireActiveOrg.js.map +1 -1
- package/dist/client/org/TeamPage.js +3 -3
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/org/hooks.d.ts +12 -1
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +15 -0
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/org/index.d.ts +4 -2
- package/dist/client/org/index.d.ts.map +1 -1
- package/dist/client/org/index.js +3 -1
- package/dist/client/org/index.js.map +1 -1
- package/dist/client/org-team/index.d.ts +2 -0
- package/dist/client/org-team/index.d.ts.map +1 -0
- package/dist/client/org-team/index.js +2 -0
- package/dist/client/org-team/index.js.map +1 -0
- package/dist/client/review/ReviewStatusBadge.d.ts +7 -0
- package/dist/client/review/ReviewStatusBadge.d.ts.map +1 -0
- package/dist/client/review/ReviewStatusBadge.js +19 -0
- package/dist/client/review/ReviewStatusBadge.js.map +1 -0
- package/dist/client/review/ReviewThreadPanel.d.ts +20 -0
- package/dist/client/review/ReviewThreadPanel.d.ts.map +1 -0
- package/dist/client/review/ReviewThreadPanel.js +84 -0
- package/dist/client/review/ReviewThreadPanel.js.map +1 -0
- package/dist/client/review/index.d.ts +4 -0
- package/dist/client/review/index.d.ts.map +1 -0
- package/dist/client/review/index.js +4 -0
- package/dist/client/review/index.js.map +1 -0
- package/dist/client/review/use-review.d.ts +68 -0
- package/dist/client/review/use-review.d.ts.map +1 -0
- package/dist/client/review/use-review.js +22 -0
- package/dist/client/review/use-review.js.map +1 -0
- package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/useCollabReconcile.js +11 -6
- package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -1
- package/dist/client/settings/index.d.ts +1 -1
- package/dist/client/settings/index.d.ts.map +1 -1
- package/dist/client/settings/index.js +1 -1
- package/dist/client/settings/index.js.map +1 -1
- package/dist/client/setup-connections/BuilderConnectCard.d.ts +9 -0
- package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -0
- package/dist/client/setup-connections/BuilderConnectCard.js +25 -0
- package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -0
- package/dist/client/setup-connections/ProviderReadinessBadge.d.ts +8 -0
- package/dist/client/setup-connections/ProviderReadinessBadge.d.ts.map +1 -0
- package/dist/client/setup-connections/ProviderReadinessBadge.js +32 -0
- package/dist/client/setup-connections/ProviderReadinessBadge.js.map +1 -0
- package/dist/client/setup-connections/SetupConnectionsPage.d.ts +17 -0
- package/dist/client/setup-connections/SetupConnectionsPage.d.ts.map +1 -0
- package/dist/client/setup-connections/SetupConnectionsPage.js +10 -0
- package/dist/client/setup-connections/SetupConnectionsPage.js.map +1 -0
- package/dist/client/setup-connections/index.d.ts +7 -0
- package/dist/client/setup-connections/index.d.ts.map +1 -0
- package/dist/client/setup-connections/index.js +7 -0
- package/dist/client/setup-connections/index.js.map +1 -0
- package/dist/client/sharing/ShareButton.d.ts +4 -4
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +13 -7
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.js +3 -3
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/client/use-action.d.ts +3 -0
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +34 -3
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +4 -0
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +37 -18
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/command-navigation/actions.d.ts +25 -0
- package/dist/command-navigation/actions.d.ts.map +1 -0
- package/dist/command-navigation/actions.js +64 -0
- package/dist/command-navigation/actions.js.map +1 -0
- package/dist/command-navigation/index.d.ts +4 -0
- package/dist/command-navigation/index.d.ts.map +1 -0
- package/dist/command-navigation/index.js +4 -0
- package/dist/command-navigation/index.js.map +1 -0
- package/dist/comments-review/index.d.ts +2 -0
- package/dist/comments-review/index.d.ts.map +1 -0
- package/dist/comments-review/index.js +2 -0
- package/dist/comments-review/index.js.map +1 -0
- package/dist/db/create-get-db.d.ts +25 -0
- package/dist/db/create-get-db.d.ts.map +1 -1
- package/dist/db/create-get-db.js +25 -2
- package/dist/db/create-get-db.js.map +1 -1
- package/dist/file-upload/builder.d.ts.map +1 -1
- package/dist/file-upload/builder.js +18 -2
- package/dist/file-upload/builder.js.map +1 -1
- package/dist/file-upload/types.d.ts +3 -0
- package/dist/file-upload/types.d.ts.map +1 -1
- package/dist/file-upload/types.js.map +1 -1
- package/dist/history/actions/create-resource-version.d.ts +10 -0
- package/dist/history/actions/create-resource-version.d.ts.map +1 -0
- package/dist/history/actions/create-resource-version.js +65 -0
- package/dist/history/actions/create-resource-version.js.map +1 -0
- package/dist/history/actions/get-resource-version.d.ts +10 -0
- package/dist/history/actions/get-resource-version.d.ts.map +1 -0
- package/dist/history/actions/get-resource-version.js +38 -0
- package/dist/history/actions/get-resource-version.js.map +1 -0
- package/dist/history/actions/list-resource-history.d.ts +10 -0
- package/dist/history/actions/list-resource-history.d.ts.map +1 -0
- package/dist/history/actions/list-resource-history.js +45 -0
- package/dist/history/actions/list-resource-history.js.map +1 -0
- package/dist/history/actions/list-resource-versions.d.ts +10 -0
- package/dist/history/actions/list-resource-versions.d.ts.map +1 -0
- package/dist/history/actions/list-resource-versions.js +35 -0
- package/dist/history/actions/list-resource-versions.js.map +1 -0
- package/dist/history/actions/restore-resource-version.d.ts +11 -0
- package/dist/history/actions/restore-resource-version.d.ts.map +1 -0
- package/dist/history/actions/restore-resource-version.js +59 -0
- package/dist/history/actions/restore-resource-version.js.map +1 -0
- package/dist/history/index.d.ts +4 -0
- package/dist/history/index.d.ts.map +1 -0
- package/dist/history/index.js +3 -0
- package/dist/history/index.js.map +1 -0
- package/dist/history/registry.d.ts +10 -0
- package/dist/history/registry.d.ts.map +1 -0
- package/dist/history/registry.js +61 -0
- package/dist/history/registry.js.map +1 -0
- package/dist/history/store.d.ts +34 -0
- package/dist/history/store.d.ts.map +1 -0
- package/dist/history/store.js +265 -0
- package/dist/history/store.js.map +1 -0
- package/dist/history/types.d.ts +55 -0
- package/dist/history/types.d.ts.map +1 -0
- package/dist/history/types.js +2 -0
- package/dist/history/types.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/navigation/index.d.ts +53 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +105 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/observability/routes.d.ts +3 -3
- package/dist/org/index.d.ts +1 -0
- package/dist/org/index.d.ts.map +1 -1
- package/dist/org/index.js +1 -0
- package/dist/org/index.js.map +1 -1
- package/dist/org/permissions.d.ts +7 -0
- package/dist/org/permissions.d.ts.map +1 -0
- package/dist/org/permissions.js +21 -0
- package/dist/org/permissions.js.map +1 -0
- package/dist/org-team/index.d.ts +2 -0
- package/dist/org-team/index.d.ts.map +1 -0
- package/dist/org-team/index.js +2 -0
- package/dist/org-team/index.js.map +1 -0
- package/dist/private-blob/registry.d.ts.map +1 -1
- package/dist/private-blob/registry.js +1 -0
- package/dist/private-blob/registry.js.map +1 -1
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/review/actions/consume-review-feedback.d.ts +9 -0
- package/dist/review/actions/consume-review-feedback.d.ts.map +1 -0
- package/dist/review/actions/consume-review-feedback.js +29 -0
- package/dist/review/actions/consume-review-feedback.js.map +1 -0
- package/dist/review/actions/create-review-comment.d.ts +18 -0
- package/dist/review/actions/create-review-comment.d.ts.map +1 -0
- package/dist/review/actions/create-review-comment.js +81 -0
- package/dist/review/actions/create-review-comment.js.map +1 -0
- package/dist/review/actions/delete-review-comment.d.ts +10 -0
- package/dist/review/actions/delete-review-comment.d.ts.map +1 -0
- package/dist/review/actions/delete-review-comment.js +45 -0
- package/dist/review/actions/delete-review-comment.js.map +1 -0
- package/dist/review/actions/get-review-feedback.d.ts +10 -0
- package/dist/review/actions/get-review-feedback.d.ts.map +1 -0
- package/dist/review/actions/get-review-feedback.js +45 -0
- package/dist/review/actions/get-review-feedback.js.map +1 -0
- package/dist/review/actions/list-review-comments.d.ts +13 -0
- package/dist/review/actions/list-review-comments.d.ts.map +1 -0
- package/dist/review/actions/list-review-comments.js +44 -0
- package/dist/review/actions/list-review-comments.js.map +1 -0
- package/dist/review/actions/reply-review-comment.d.ts +16 -0
- package/dist/review/actions/reply-review-comment.d.ts.map +1 -0
- package/dist/review/actions/reply-review-comment.js +84 -0
- package/dist/review/actions/reply-review-comment.js.map +1 -0
- package/dist/review/actions/resolve-review-thread.d.ts +11 -0
- package/dist/review/actions/resolve-review-thread.d.ts.map +1 -0
- package/dist/review/actions/resolve-review-thread.js +46 -0
- package/dist/review/actions/resolve-review-thread.js.map +1 -0
- package/dist/review/actions/set-review-status.d.ts +9 -0
- package/dist/review/actions/set-review-status.d.ts.map +1 -0
- package/dist/review/actions/set-review-status.js +43 -0
- package/dist/review/actions/set-review-status.js.map +1 -0
- package/dist/review/index.d.ts +5 -0
- package/dist/review/index.d.ts.map +1 -0
- package/dist/review/index.js +4 -0
- package/dist/review/index.js.map +1 -0
- package/dist/review/mentions.d.ts +4 -0
- package/dist/review/mentions.d.ts.map +1 -0
- package/dist/review/mentions.js +39 -0
- package/dist/review/mentions.js.map +1 -0
- package/dist/review/registry.d.ts +10 -0
- package/dist/review/registry.d.ts.map +1 -0
- package/dist/review/registry.js +61 -0
- package/dist/review/registry.js.map +1 -0
- package/dist/review/store.d.ts +63 -0
- package/dist/review/store.d.ts.map +1 -0
- package/dist/review/store.js +558 -0
- package/dist/review/store.js.map +1 -0
- package/dist/review/types.d.ts +77 -0
- package/dist/review/types.d.ts.map +1 -0
- package/dist/review/types.js +2 -0
- package/dist/review/types.js.map +1 -0
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +54 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts.map +1 -1
- package/dist/server/agent-engine-api-key-route.js +5 -0
- package/dist/server/agent-engine-api-key-route.js.map +1 -1
- package/dist/server/credential-provider.d.ts +26 -0
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +82 -0
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +37 -1
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/setup-connections/index.d.ts +6 -0
- package/dist/setup-connections/index.d.ts.map +1 -0
- package/dist/setup-connections/index.js +6 -0
- package/dist/setup-connections/index.js.map +1 -0
- package/dist/setup-connections/onboarding.d.ts +14 -0
- package/dist/setup-connections/onboarding.d.ts.map +1 -0
- package/dist/setup-connections/onboarding.js +23 -0
- package/dist/setup-connections/onboarding.js.map +1 -0
- package/dist/transcription/builder-transcription.d.ts +1 -0
- package/dist/transcription/builder-transcription.d.ts.map +1 -1
- package/dist/transcription/builder-transcription.js +5 -2
- package/dist/transcription/builder-transcription.js.map +1 -1
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +52 -0
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/content/agent-native-toolkit.mdx +87 -80
- package/docs/content/locales/ar-SA/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/de-DE/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/es-ES/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/fr-FR/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/hi-IN/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/ja-JP/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/ko-KR/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/pt-BR/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/zh-CN/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/zh-TW/agent-native-toolkit.mdx +89 -80
- package/docs/content/toolkit-agent-ux.mdx +43 -0
- package/docs/content/toolkit-app-adapters.mdx +9 -0
- package/docs/content/toolkit-collaboration-ui.mdx +12 -0
- package/docs/content/toolkit-collaboration.mdx +74 -0
- package/docs/content/toolkit-command-navigation.mdx +106 -0
- package/docs/content/toolkit-comments-review.mdx +98 -0
- package/docs/content/toolkit-history.mdx +95 -0
- package/docs/content/toolkit-observability.mdx +41 -0
- package/docs/content/toolkit-org-team.mdx +80 -0
- package/docs/content/toolkit-resources.mdx +57 -0
- package/docs/content/toolkit-settings.mdx +65 -0
- package/docs/content/toolkit-setup-connections.mdx +109 -0
- package/docs/content/toolkit-sharing-ui.mdx +18 -6
- package/docs/content/toolkit-sharing.mdx +81 -0
- package/docs/content/toolkit-shell-hooks.mdx +9 -0
- package/docs/content/toolkit-ui.mdx +9 -0
- package/package.json +36 -2
- package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +0 -153
- package/corpus/templates/design/app/hooks/useAgentEditRequest.ts +0 -133
- package/corpus/templates/design/app/pages/DesignEditor.tsx +0 -22924
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core";
|
|
2
2
|
import {
|
|
3
|
-
hasCollabState,
|
|
4
|
-
getText,
|
|
5
|
-
applyText,
|
|
6
|
-
seedFromText,
|
|
7
3
|
agentEnterDocument,
|
|
8
4
|
agentLeaveDocument,
|
|
9
5
|
agentUpdateSelection,
|
|
@@ -13,6 +9,11 @@ import { and, eq } from "drizzle-orm";
|
|
|
13
9
|
import { z } from "zod";
|
|
14
10
|
|
|
15
11
|
import { getDb, schema } from "../server/db/index.js";
|
|
12
|
+
import {
|
|
13
|
+
readLiveSourceFile,
|
|
14
|
+
writeInlineSourceFile,
|
|
15
|
+
type SourceWorkspaceFile,
|
|
16
|
+
} from "../server/source-workspace.js";
|
|
16
17
|
import {
|
|
17
18
|
applyOneEdit,
|
|
18
19
|
type ApplyEditsResult,
|
|
@@ -225,7 +226,6 @@ export default defineAction({
|
|
|
225
226
|
await assertAccess("design", designId, "editor");
|
|
226
227
|
|
|
227
228
|
const db = getDb();
|
|
228
|
-
const now = new Date().toISOString();
|
|
229
229
|
const requestedFileId = fileId?.trim();
|
|
230
230
|
const targetFilename = requestedFileId
|
|
231
231
|
? undefined
|
|
@@ -238,7 +238,9 @@ export default defineAction({
|
|
|
238
238
|
const [file] = await db
|
|
239
239
|
.select({
|
|
240
240
|
id: schema.designFiles.id,
|
|
241
|
+
designId: schema.designFiles.designId,
|
|
241
242
|
filename: schema.designFiles.filename,
|
|
243
|
+
fileType: schema.designFiles.fileType,
|
|
242
244
|
content: schema.designFiles.content,
|
|
243
245
|
})
|
|
244
246
|
.from(schema.designFiles)
|
|
@@ -263,20 +265,26 @@ export default defineAction({
|
|
|
263
265
|
);
|
|
264
266
|
}
|
|
265
267
|
|
|
266
|
-
//
|
|
267
|
-
//
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
268
|
+
// Read the LIVE base (collab text when present, else the SQL row) right
|
|
269
|
+
// before transforming, and carry its versionHash through to the write
|
|
270
|
+
// below. writeInlineSourceFile re-reads the live text immediately before
|
|
271
|
+
// its own applyText/DB write and rejects if it no longer matches this
|
|
272
|
+
// hash — closing the race window where a concurrent editor/agent write
|
|
273
|
+
// lands between this read and the persist (the same stale-diff-base bug
|
|
274
|
+
// fixed for insert-design-native-asset.ts and insert-asset.ts: a diff
|
|
275
|
+
// computed from a stale base, char-diffed into a collab doc that has
|
|
276
|
+
// since moved on, corrupts or drops the other writer's change).
|
|
277
|
+
const workspaceFile: SourceWorkspaceFile = {
|
|
278
|
+
id: file.id,
|
|
279
|
+
designId: file.designId,
|
|
280
|
+
filename: file.filename ?? "",
|
|
281
|
+
fileType: file.fileType ?? "html",
|
|
282
|
+
content: file.content,
|
|
283
|
+
createdAt: null,
|
|
284
|
+
updatedAt: null,
|
|
285
|
+
};
|
|
286
|
+
const live = await readLiveSourceFile(workspaceFile);
|
|
287
|
+
const base = live.content;
|
|
280
288
|
|
|
281
289
|
const resolvedMode =
|
|
282
290
|
mode ??
|
|
@@ -296,8 +304,9 @@ export default defineAction({
|
|
|
296
304
|
// rather than a fabricated `[data-edit-target=...]` selector that could
|
|
297
305
|
// never resolve against the rendered iframe. Region attribution instead
|
|
298
306
|
// rides on the `{ kind: "text", quote }` recentEdits descriptor that
|
|
299
|
-
// `applyText(..., "agent")` auto-publishes from the content diff
|
|
300
|
-
// clients render a lingering highlight
|
|
307
|
+
// `applyText(..., "agent")` auto-publishes from the content diff inside
|
|
308
|
+
// writeInlineSourceFile below — clients render a lingering highlight
|
|
309
|
+
// over the changed text.
|
|
301
310
|
agentEnterDocument(file.id);
|
|
302
311
|
agentUpdateSelection(file.id, {
|
|
303
312
|
selection: null,
|
|
@@ -306,23 +315,12 @@ export default defineAction({
|
|
|
306
315
|
});
|
|
307
316
|
|
|
308
317
|
try {
|
|
309
|
-
await
|
|
310
|
-
.
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
// so live editors get a minimal update.
|
|
316
|
-
if (await hasCollabState(file.id)) {
|
|
317
|
-
await applyText(file.id, nextContent, "content", "agent");
|
|
318
|
-
} else {
|
|
319
|
-
await seedFromText(file.id, nextContent);
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
await db
|
|
323
|
-
.update(schema.designs)
|
|
324
|
-
.set({ updatedAt: now })
|
|
325
|
-
.where(eq(schema.designs.id, designId));
|
|
318
|
+
await writeInlineSourceFile({
|
|
319
|
+
designId: file.designId,
|
|
320
|
+
file: workspaceFile,
|
|
321
|
+
content: nextContent,
|
|
322
|
+
expectedVersionHash: live.versionHash,
|
|
323
|
+
});
|
|
326
324
|
} finally {
|
|
327
325
|
agentLeaveDocument(file.id);
|
|
328
326
|
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { completeText } from "@agent-native/core/server";
|
|
3
|
+
import { assertAccess } from "@agent-native/core/sharing";
|
|
4
|
+
import { eq } from "drizzle-orm";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
|
|
7
|
+
import { getDb, schema } from "../server/db/index.js";
|
|
8
|
+
import { sanitizeGeneratedDesignTitle } from "../shared/prompt-title.js";
|
|
9
|
+
|
|
10
|
+
const TITLE_SYSTEM_PROMPT =
|
|
11
|
+
"Generate a very short title (2-5 words) for a design/prototype that " +
|
|
12
|
+
"starts from this brief. Title Case, no quotes, no trailing punctuation. " +
|
|
13
|
+
"Return only the title, nothing else.";
|
|
14
|
+
|
|
15
|
+
export default defineAction({
|
|
16
|
+
description:
|
|
17
|
+
"Generate a concise, human-friendly title for a design from its " +
|
|
18
|
+
"generation prompt and save it. Internal plumbing used right after a " +
|
|
19
|
+
"design is created from the prompt box — not a step in the normal " +
|
|
20
|
+
"design-generation flow, so agents should not call this directly.",
|
|
21
|
+
// UI-only plumbing: callable via the frontend action surface, hidden from
|
|
22
|
+
// the agent/MCP/A2A tool lists so it doesn't spend a tool-call slot.
|
|
23
|
+
agentTool: false,
|
|
24
|
+
schema: z.object({
|
|
25
|
+
designId: z.string().describe("Design ID to update"),
|
|
26
|
+
prompt: z.string().describe("The user's original generation prompt"),
|
|
27
|
+
previousTitle: z
|
|
28
|
+
.string()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe(
|
|
31
|
+
"The placeholder title written when the design was created. If the " +
|
|
32
|
+
"design's current title no longer matches this (the user renamed " +
|
|
33
|
+
"it in the meantime), the generated title is discarded.",
|
|
34
|
+
),
|
|
35
|
+
}),
|
|
36
|
+
run: async ({ designId, prompt, previousTitle }) => {
|
|
37
|
+
await assertAccess("design", designId, "editor");
|
|
38
|
+
|
|
39
|
+
const cleanPrompt = prompt.replace(/\s+/g, " ").trim().slice(0, 2000);
|
|
40
|
+
if (!cleanPrompt) return { updated: false, reason: "empty-prompt" };
|
|
41
|
+
|
|
42
|
+
let generated: string | null = null;
|
|
43
|
+
try {
|
|
44
|
+
const result = await completeText({
|
|
45
|
+
systemPrompt: TITLE_SYSTEM_PROMPT,
|
|
46
|
+
input: cleanPrompt.slice(0, 500),
|
|
47
|
+
maxOutputTokens: 30,
|
|
48
|
+
temperature: 0.3,
|
|
49
|
+
timeoutMs: 15_000,
|
|
50
|
+
});
|
|
51
|
+
generated = sanitizeGeneratedDesignTitle(result.text);
|
|
52
|
+
} catch {
|
|
53
|
+
// Best-effort: the placeholder title (already saved at creation time)
|
|
54
|
+
// stays as-is on any model/engine failure.
|
|
55
|
+
return { updated: false, reason: "generation-failed" };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (!generated) return { updated: false, reason: "empty-result" };
|
|
59
|
+
|
|
60
|
+
const db = getDb();
|
|
61
|
+
const now = new Date().toISOString();
|
|
62
|
+
|
|
63
|
+
// Read-then-write inside one transaction so we only overwrite the
|
|
64
|
+
// placeholder title — never a title the user already changed in the
|
|
65
|
+
// meantime (manual rename racing this background call).
|
|
66
|
+
const outcome = await db.transaction(async (tx) => {
|
|
67
|
+
const [current] = await tx
|
|
68
|
+
.select({ title: schema.designs.title })
|
|
69
|
+
.from(schema.designs)
|
|
70
|
+
.where(eq(schema.designs.id, designId));
|
|
71
|
+
|
|
72
|
+
if (!current) return { updated: false, reason: "not-found" as const };
|
|
73
|
+
if (previousTitle !== undefined && current.title !== previousTitle) {
|
|
74
|
+
return { updated: false, reason: "title-changed" as const };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
await tx
|
|
78
|
+
.update(schema.designs)
|
|
79
|
+
.set({ title: generated, updatedAt: now })
|
|
80
|
+
.where(eq(schema.designs.id, designId));
|
|
81
|
+
|
|
82
|
+
return { updated: true as const, title: generated };
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
return outcome;
|
|
86
|
+
},
|
|
87
|
+
});
|
|
@@ -4,8 +4,6 @@ import {
|
|
|
4
4
|
writeAppState,
|
|
5
5
|
} from "@agent-native/core/application-state";
|
|
6
6
|
import {
|
|
7
|
-
hasCollabState,
|
|
8
|
-
applyText,
|
|
9
7
|
seedFromText,
|
|
10
8
|
agentEnterDocument,
|
|
11
9
|
agentLeaveDocument,
|
|
@@ -18,6 +16,11 @@ import { nanoid } from "nanoid";
|
|
|
18
16
|
import { z } from "zod";
|
|
19
17
|
|
|
20
18
|
import { getDb, schema } from "../server/db/index.js";
|
|
19
|
+
import {
|
|
20
|
+
readLiveSourceFile,
|
|
21
|
+
writeInlineSourceFile,
|
|
22
|
+
type SourceWorkspaceFile,
|
|
23
|
+
} from "../server/source-workspace.js";
|
|
21
24
|
import {
|
|
22
25
|
mergeCanvasFramePlacements,
|
|
23
26
|
type CanvasFramePlacement,
|
|
@@ -27,6 +30,7 @@ import {
|
|
|
27
30
|
type DesignGenerationSession,
|
|
28
31
|
updateGenerationSessionWithSavedFiles,
|
|
29
32
|
} from "../shared/generation-session.js";
|
|
33
|
+
import { annotateScreenHtmlForPersist } from "../shared/screen-annotation.js";
|
|
30
34
|
|
|
31
35
|
/** Editor deep link so external agents can surface "Open design". */
|
|
32
36
|
function designDeepLink(designId: string): string {
|
|
@@ -287,7 +291,16 @@ const generateDesignAction = defineAction({
|
|
|
287
291
|
|
|
288
292
|
const existingByName = new Map(existingFiles.map((f) => [f.filename, f]));
|
|
289
293
|
|
|
290
|
-
|
|
294
|
+
// Stamp missing data-agent-native-node-id attributes before persisting so
|
|
295
|
+
// every generated screen is born fully addressable by id-keyed editor
|
|
296
|
+
// operations (move/select/style), instead of depending on a client-side
|
|
297
|
+
// backfill the first time a human opens the screen.
|
|
298
|
+
const annotatedFiles = files.map((file) => ({
|
|
299
|
+
...file,
|
|
300
|
+
content: annotateScreenHtmlForPersist(file.content, file.fileType),
|
|
301
|
+
}));
|
|
302
|
+
|
|
303
|
+
for (const file of annotatedFiles) {
|
|
291
304
|
const existing = existingByName.get(file.filename);
|
|
292
305
|
if (existing) {
|
|
293
306
|
// Publish agent presence so live editors see "AI is generating" in place.
|
|
@@ -298,22 +311,44 @@ const generateDesignAction = defineAction({
|
|
|
298
311
|
});
|
|
299
312
|
|
|
300
313
|
try {
|
|
301
|
-
//
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
314
|
+
// `file.content` here is LLM-generated content produced upstream of
|
|
315
|
+
// this action call, so there can be a large async window (the full
|
|
316
|
+
// generation time) between whenever this file's content was last
|
|
317
|
+
// known and this write. Read the LIVE base (collab text when
|
|
318
|
+
// present, else the SQL row) right before persisting and carry its
|
|
319
|
+
// versionHash through to writeInlineSourceFile, which re-reads the
|
|
320
|
+
// live text immediately before its own applyText/DB write and
|
|
321
|
+
// rejects if it no longer matches — closing the race window where a
|
|
322
|
+
// concurrent editor/agent write lands mid-generation. See
|
|
323
|
+
// insert-design-native-asset.ts and insert-asset.ts for the
|
|
324
|
+
// identical pattern.
|
|
325
|
+
const workspaceFile: SourceWorkspaceFile = {
|
|
326
|
+
id: existing.id,
|
|
327
|
+
designId: existing.designId,
|
|
328
|
+
filename: existing.filename ?? "",
|
|
329
|
+
fileType: existing.fileType ?? "html",
|
|
330
|
+
content: existing.content,
|
|
331
|
+
createdAt: null,
|
|
332
|
+
updatedAt: null,
|
|
333
|
+
};
|
|
334
|
+
const live = await readLiveSourceFile(workspaceFile);
|
|
335
|
+
|
|
336
|
+
await writeInlineSourceFile({
|
|
337
|
+
designId: existing.designId,
|
|
338
|
+
file: workspaceFile,
|
|
339
|
+
content: file.content,
|
|
340
|
+
expectedVersionHash: live.versionHash,
|
|
341
|
+
});
|
|
310
342
|
|
|
311
|
-
//
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
await
|
|
343
|
+
// writeInlineSourceFile only persists content/updatedAt; keep
|
|
344
|
+
// fileType in sync separately when the caller changed it (e.g.
|
|
345
|
+
// html -> jsx), matching the original update behavior.
|
|
346
|
+
const nextFileType = file.fileType ?? "html";
|
|
347
|
+
if (nextFileType !== (existing.fileType ?? "html")) {
|
|
348
|
+
await db
|
|
349
|
+
.update(schema.designFiles)
|
|
350
|
+
.set({ fileType: nextFileType, updatedAt: now })
|
|
351
|
+
.where(eq(schema.designFiles.id, existing.id));
|
|
317
352
|
}
|
|
318
353
|
} finally {
|
|
319
354
|
agentLeaveDocument(existing.id);
|
|
@@ -6,13 +6,87 @@ import { nanoid } from "nanoid";
|
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
|
|
8
8
|
import "../server/db/index.js";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
type AssignedCanvasRegion,
|
|
11
|
+
DEFAULT_ASSIGNED_REGION_GAP,
|
|
12
|
+
DEFAULT_ASSIGNED_REGION_MAX_COLUMNS,
|
|
13
|
+
} from "../shared/canvas-math.js";
|
|
10
14
|
import {
|
|
11
15
|
designGenerationSessionKey,
|
|
12
16
|
type DesignGenerationFrame,
|
|
13
17
|
type DesignGenerationSession,
|
|
14
18
|
} from "../shared/generation-session.js";
|
|
15
19
|
|
|
20
|
+
// Mirrors the mobile/tablet/desktop viewport vocabulary already used by
|
|
21
|
+
// present-design-variants.ts's inferVariantSize, so a screen's canvas region
|
|
22
|
+
// matches its intended device instead of every screen defaulting to the same
|
|
23
|
+
// fixed desktop-shaped region regardless of content (B5-10: AI-generated
|
|
24
|
+
// desktop designs were being placed in mobile-width screens because neither
|
|
25
|
+
// this schema nor assignRegions had any per-screen size signal).
|
|
26
|
+
const DEVICE_REGION_SIZE: Record<
|
|
27
|
+
"mobile" | "tablet" | "desktop",
|
|
28
|
+
{ width: number; height: number }
|
|
29
|
+
> = {
|
|
30
|
+
mobile: { width: 390, height: 844 },
|
|
31
|
+
tablet: { width: 768, height: 1024 },
|
|
32
|
+
desktop: { width: 1440, height: 1024 },
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
function regionSizeForScreen(screen: {
|
|
36
|
+
deviceType?: "mobile" | "tablet" | "desktop";
|
|
37
|
+
width?: number;
|
|
38
|
+
height?: number;
|
|
39
|
+
}): { width: number; height: number } {
|
|
40
|
+
const base = DEVICE_REGION_SIZE[screen.deviceType ?? "desktop"];
|
|
41
|
+
return {
|
|
42
|
+
width: screen.width && screen.width > 0 ? screen.width : base.width,
|
|
43
|
+
height: screen.height && screen.height > 0 ? screen.height : base.height,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Pack per-screen-sized regions into rows/columns, matching assignRegions'
|
|
49
|
+
* layout shape (row/column-major, one gap between cells) but sizing each
|
|
50
|
+
* region individually instead of assuming every region is the same fixed
|
|
51
|
+
* size. Row height is the tallest region in that row, mirroring how
|
|
52
|
+
* assignRegions would behave if every item in a row shared one size.
|
|
53
|
+
*/
|
|
54
|
+
function assignRegionsForSizes(
|
|
55
|
+
sizes: Array<{ width: number; height: number }>,
|
|
56
|
+
{
|
|
57
|
+
columns,
|
|
58
|
+
gap = DEFAULT_ASSIGNED_REGION_GAP,
|
|
59
|
+
}: { columns: number; gap?: number },
|
|
60
|
+
): AssignedCanvasRegion[] {
|
|
61
|
+
const regions: AssignedCanvasRegion[] = [];
|
|
62
|
+
let rowY = 0;
|
|
63
|
+
|
|
64
|
+
for (let rowStart = 0; rowStart < sizes.length; rowStart += columns) {
|
|
65
|
+
const row = sizes.slice(rowStart, rowStart + columns);
|
|
66
|
+
let x = 0;
|
|
67
|
+
let rowHeight = 0;
|
|
68
|
+
|
|
69
|
+
row.forEach((size, offset) => {
|
|
70
|
+
const index = rowStart + offset;
|
|
71
|
+
regions.push({
|
|
72
|
+
index,
|
|
73
|
+
row: Math.floor(index / columns),
|
|
74
|
+
column: index % columns,
|
|
75
|
+
x,
|
|
76
|
+
y: rowY,
|
|
77
|
+
width: size.width,
|
|
78
|
+
height: size.height,
|
|
79
|
+
});
|
|
80
|
+
x += size.width + gap;
|
|
81
|
+
rowHeight = Math.max(rowHeight, size.height);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
rowY += rowHeight + gap;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return regions;
|
|
88
|
+
}
|
|
89
|
+
|
|
16
90
|
const AGENT_NAMES = [
|
|
17
91
|
"Atlas",
|
|
18
92
|
"Nova",
|
|
@@ -52,6 +126,29 @@ const requestedScreenSchema = z
|
|
|
52
126
|
.describe("Target filename for this screen, such as onboarding.html"),
|
|
53
127
|
role: z.enum(["screen", "variant"]).optional().default("screen"),
|
|
54
128
|
variantOf: z.string().trim().min(1).optional(),
|
|
129
|
+
deviceType: z
|
|
130
|
+
.enum(["mobile", "tablet", "desktop"])
|
|
131
|
+
.optional()
|
|
132
|
+
.describe(
|
|
133
|
+
"Intended viewport for this screen. Defaults to desktop-sized when " +
|
|
134
|
+
"omitted — pass 'mobile' for phone screens and 'tablet' for iPad-" +
|
|
135
|
+
"width screens so the canvas region matches the content instead of " +
|
|
136
|
+
"always sizing every screen as desktop.",
|
|
137
|
+
),
|
|
138
|
+
width: z
|
|
139
|
+
.number()
|
|
140
|
+
.positive()
|
|
141
|
+
.optional()
|
|
142
|
+
.describe(
|
|
143
|
+
"Optional explicit canvas region width in px, overriding deviceType.",
|
|
144
|
+
),
|
|
145
|
+
height: z
|
|
146
|
+
.number()
|
|
147
|
+
.positive()
|
|
148
|
+
.optional()
|
|
149
|
+
.describe(
|
|
150
|
+
"Optional explicit canvas region height in px, overriding deviceType.",
|
|
151
|
+
),
|
|
55
152
|
})
|
|
56
153
|
.superRefine((screen, ctx) => {
|
|
57
154
|
if (screen.role === "variant" && !screen.variantOf) {
|
|
@@ -71,6 +168,10 @@ export default defineAction({
|
|
|
71
168
|
"assigns non-overlapping canvas regions and returns per-frame generation " +
|
|
72
169
|
"instructions including canvasFrame placements. The session state is " +
|
|
73
170
|
"agent-facing planning state consumed by generate-design and view-screen. " +
|
|
171
|
+
"Pass each screen's deviceType ('mobile', 'tablet', or 'desktop') so its " +
|
|
172
|
+
"canvas region matches the content — a desktop dashboard should not be " +
|
|
173
|
+
"boxed into a 390px mobile-width frame. Defaults to desktop when omitted; " +
|
|
174
|
+
"pass explicit width/height instead for a non-standard viewport. " +
|
|
74
175
|
"After this action, fan out calls to generate-design for each returned " +
|
|
75
176
|
"frame, passing the returned canvasFrame values to generate-design so " +
|
|
76
177
|
"screens appear in the infinite overview canvas.",
|
|
@@ -150,9 +251,12 @@ export default defineAction({
|
|
|
150
251
|
await assertAccess("design-system", designSystemId, "viewer");
|
|
151
252
|
}
|
|
152
253
|
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
columns:
|
|
254
|
+
const regionSizes = screens.map(regionSizeForScreen);
|
|
255
|
+
const regions = assignRegionsForSizes(regionSizes, {
|
|
256
|
+
columns:
|
|
257
|
+
screens.length <= 3
|
|
258
|
+
? screens.length
|
|
259
|
+
: DEFAULT_ASSIGNED_REGION_MAX_COLUMNS,
|
|
156
260
|
});
|
|
157
261
|
|
|
158
262
|
const seenFilenames = new Map<string, number>();
|
|
@@ -10,8 +10,17 @@ import {
|
|
|
10
10
|
hashCss,
|
|
11
11
|
parse,
|
|
12
12
|
parseFirstAnimationDurationMs,
|
|
13
|
+
parsePlaybackMode,
|
|
14
|
+
parseTimelineSpanMs,
|
|
13
15
|
} from "../shared/motion-compiler.js";
|
|
14
|
-
import type {
|
|
16
|
+
import type {
|
|
17
|
+
MotionPlaybackMode,
|
|
18
|
+
MotionTrack,
|
|
19
|
+
} from "../shared/motion-timeline.js";
|
|
20
|
+
import {
|
|
21
|
+
MOTION_DEFAULT_PLAYBACK_MODE,
|
|
22
|
+
readTimelinePlaybackMode,
|
|
23
|
+
} from "../shared/motion-timeline.js";
|
|
15
24
|
|
|
16
25
|
type TimelineSource = "stored" | "recovered-css" | "stored-css-drift";
|
|
17
26
|
|
|
@@ -22,6 +31,12 @@ interface TimelineResult {
|
|
|
22
31
|
filePath: string | null;
|
|
23
32
|
tracks: unknown;
|
|
24
33
|
durationMs: number;
|
|
34
|
+
/**
|
|
35
|
+
* Timeline playback mode: from the tracks JSON stamp for stored rows,
|
|
36
|
+
* recovered from animation-iteration-count/direction for CSS-recovered
|
|
37
|
+
* timelines, "once" for timelines that predate the field.
|
|
38
|
+
*/
|
|
39
|
+
playbackMode: MotionPlaybackMode;
|
|
25
40
|
defaultEase: string;
|
|
26
41
|
compiledHash: string | null;
|
|
27
42
|
cssHash?: string | null;
|
|
@@ -47,6 +62,7 @@ async function readManagedCssForSource(args: {
|
|
|
47
62
|
hash: string;
|
|
48
63
|
tracks: MotionTrack[];
|
|
49
64
|
durationMs: number | null;
|
|
65
|
+
playbackMode: MotionPlaybackMode | null;
|
|
50
66
|
} | null> {
|
|
51
67
|
if (!args.sourceRef) return null;
|
|
52
68
|
|
|
@@ -88,7 +104,10 @@ async function readManagedCssForSource(args: {
|
|
|
88
104
|
css,
|
|
89
105
|
hash: hashCss(css),
|
|
90
106
|
tracks,
|
|
91
|
-
|
|
107
|
+
// Timeline span (max delay + duration) is robust when tracks carry
|
|
108
|
+
// per-track offsets/durations; fall back to the first duration.
|
|
109
|
+
durationMs: parseTimelineSpanMs(css) ?? parseFirstAnimationDurationMs(css),
|
|
110
|
+
playbackMode: parsePlaybackMode(css),
|
|
92
111
|
};
|
|
93
112
|
}
|
|
94
113
|
|
|
@@ -96,10 +115,13 @@ export default defineAction({
|
|
|
96
115
|
description:
|
|
97
116
|
"Read one or all motion timelines for a design. " +
|
|
98
117
|
"Returns timeline metadata (id, sourceRef, filePath, durationMs, " +
|
|
99
|
-
"defaultEase, compiledHash) and the
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
118
|
+
"playbackMode [loop|once|ping-pong], defaultEase, compiledHash) and the " +
|
|
119
|
+
"full tracks array (each track has targetNodeId, property, keyframes " +
|
|
120
|
+
"with per-segment easing incl. spring(...)/linear(...), and optional " +
|
|
121
|
+
"delayMs/durationMs start-offset timing). If sourceRef points at a " +
|
|
122
|
+
"design file and the metadata is missing or stale, recovers editable " +
|
|
123
|
+
"tracks (incl. offsets and playback mode) from the managed " +
|
|
124
|
+
"<style data-agent-native-motion> block. Read-only.",
|
|
103
125
|
readOnly: true,
|
|
104
126
|
http: { method: "GET" },
|
|
105
127
|
schema: z.object({
|
|
@@ -151,13 +173,17 @@ export default defineAction({
|
|
|
151
173
|
.limit(timelineId ? 1 : 100);
|
|
152
174
|
|
|
153
175
|
const timelines: TimelineResult[] = rows.map((row) => {
|
|
176
|
+
const parsedTracks = parseTrackJson(row.tracks);
|
|
154
177
|
return {
|
|
155
178
|
id: row.id,
|
|
156
179
|
designId: row.designId,
|
|
157
180
|
sourceRef: row.sourceRef ?? null,
|
|
158
181
|
filePath: row.filePath ?? null,
|
|
159
|
-
tracks:
|
|
182
|
+
tracks: parsedTracks,
|
|
160
183
|
durationMs: row.durationMs,
|
|
184
|
+
playbackMode:
|
|
185
|
+
readTimelinePlaybackMode(parsedTracks) ??
|
|
186
|
+
MOTION_DEFAULT_PLAYBACK_MODE,
|
|
161
187
|
defaultEase: row.defaultEase,
|
|
162
188
|
compiledHash: row.compiledHash ?? null,
|
|
163
189
|
cssHash: null,
|
|
@@ -183,6 +209,7 @@ export default defineAction({
|
|
|
183
209
|
// Recover the compiled animation-duration instead of inventing a
|
|
184
210
|
// default the next save would silently persist.
|
|
185
211
|
durationMs: managedCss.durationMs ?? 1000,
|
|
212
|
+
playbackMode: managedCss.playbackMode ?? MOTION_DEFAULT_PLAYBACK_MODE,
|
|
186
213
|
defaultEase: "ease",
|
|
187
214
|
compiledHash: managedCss.hash,
|
|
188
215
|
cssHash: managedCss.hash,
|
|
@@ -197,6 +224,7 @@ export default defineAction({
|
|
|
197
224
|
// In the drift case the CSS is the runtime truth — surface its
|
|
198
225
|
// compiled duration alongside its recovered tracks.
|
|
199
226
|
durationMs: managedCss.durationMs ?? first.durationMs,
|
|
227
|
+
playbackMode: managedCss.playbackMode ?? first.playbackMode,
|
|
200
228
|
cssHash: managedCss.hash,
|
|
201
229
|
source: "stored-css-drift",
|
|
202
230
|
};
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core";
|
|
2
2
|
import { readAppStateForCurrentTab } from "@agent-native/core/application-state";
|
|
3
|
-
import {
|
|
4
|
-
hasCollabState,
|
|
5
|
-
getText,
|
|
6
|
-
applyText,
|
|
7
|
-
seedFromText,
|
|
8
|
-
} from "@agent-native/core/collab";
|
|
9
3
|
import { accessFilter, assertAccess } from "@agent-native/core/sharing";
|
|
10
4
|
import { and, eq } from "drizzle-orm";
|
|
11
5
|
import { z } from "zod";
|
|
12
6
|
|
|
13
7
|
import { getDb, schema } from "../server/db/index.js";
|
|
8
|
+
import {
|
|
9
|
+
readLiveSourceFile,
|
|
10
|
+
writeInlineSourceFile,
|
|
11
|
+
type SourceWorkspaceFile,
|
|
12
|
+
} from "../server/source-workspace.js";
|
|
14
13
|
|
|
15
14
|
const schemaInput = z.object({
|
|
16
15
|
assetUrl: z
|
|
@@ -355,15 +354,29 @@ export default defineAction({
|
|
|
355
354
|
if (!file) throw new Error("No editable HTML design file found.");
|
|
356
355
|
await assertAccess("design", file.designId, "editor");
|
|
357
356
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
357
|
+
// Read the LIVE base (collab text when present, else the SQL row) right
|
|
358
|
+
// before transforming, and carry its versionHash through to the write
|
|
359
|
+
// below. writeInlineSourceFile re-reads the live text immediately before
|
|
360
|
+
// its own applyText/DB write and rejects if it no longer matches this
|
|
361
|
+
// hash — closing the race window where a concurrent editor/agent write
|
|
362
|
+
// lands between this read and the persist (the same stale-diff-base bug
|
|
363
|
+
// fixed for update-file: a diff computed from a stale base, char-diffed
|
|
364
|
+
// into a collab doc that has since moved on, corrupts or drops the
|
|
365
|
+
// other writer's change). See update-file.ts and apply-source-edit.ts
|
|
366
|
+
// for the identical pattern. writeInlineSourceFile/readLiveSourceFile
|
|
367
|
+
// only ever dereference file.id (and content/filename for the read); the
|
|
368
|
+
// createdAt/updatedAt fields aren't selected above and aren't needed.
|
|
369
|
+
const workspaceFile: SourceWorkspaceFile = {
|
|
370
|
+
id: file.id,
|
|
371
|
+
designId: file.designId,
|
|
372
|
+
filename: file.filename ?? "",
|
|
373
|
+
fileType: file.fileType ?? "html",
|
|
374
|
+
content: file.content,
|
|
375
|
+
createdAt: null,
|
|
376
|
+
updatedAt: null,
|
|
377
|
+
};
|
|
378
|
+
const live = await readLiveSourceFile(workspaceFile);
|
|
379
|
+
const base = live.content;
|
|
367
380
|
|
|
368
381
|
const mode = args.mode ?? "figure";
|
|
369
382
|
let content: string;
|
|
@@ -384,21 +397,13 @@ export default defineAction({
|
|
|
384
397
|
insertedNodeId = createInsertedNodeId("asset");
|
|
385
398
|
content = appendAssetMarkup(base, args, insertedNodeId);
|
|
386
399
|
}
|
|
387
|
-
const now = new Date().toISOString();
|
|
388
|
-
await db
|
|
389
|
-
.update(schema.designFiles)
|
|
390
|
-
.set({ content, updatedAt: now })
|
|
391
|
-
.where(eq(schema.designFiles.id, file.id));
|
|
392
|
-
await db
|
|
393
|
-
.update(schema.designs)
|
|
394
|
-
.set({ updatedAt: now })
|
|
395
|
-
.where(eq(schema.designs.id, file.designId));
|
|
396
400
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
401
|
+
await writeInlineSourceFile({
|
|
402
|
+
designId: file.designId,
|
|
403
|
+
file: workspaceFile,
|
|
404
|
+
content,
|
|
405
|
+
expectedVersionHash: live.versionHash,
|
|
406
|
+
});
|
|
402
407
|
|
|
403
408
|
return {
|
|
404
409
|
designId: file.designId,
|