@agent-native/core 0.90.1 → 0.90.2
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/core/CHANGELOG.md +14 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/client/AgentPanel.tsx +1 -1
- package/corpus/core/src/client/rich-markdown-editor/useCollabReconcile.ts +11 -6
- 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/db/create-get-db.ts +32 -2
- package/corpus/core/src/server/framework-request-handler.ts +52 -4
- 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/clips/app/components/library/library-layout.tsx +7 -2
- package/corpus/templates/clips/app/components/library/sort-menu.tsx +1 -1
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +114 -33
- package/corpus/templates/clips/app/routes/_app.library._index.tsx +27 -1
- package/corpus/templates/clips/app/routes/record.tsx +157 -68
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +5 -5
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +20 -3
- package/corpus/templates/clips/shared/finalize-recovery.ts +23 -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/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/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/dist/client/AgentPanel.js +1 -1
- package/dist/client/AgentPanel.js.map +1 -1
- 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/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/collab/struct-routes.d.ts +1 -1
- 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/observability/routes.d.ts +3 -3
- package/dist/secrets/routes.d.ts +9 -9
- 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/package.json +1 -1
- 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
|
@@ -24,16 +24,17 @@ import {
|
|
|
24
24
|
agentEnterDocument,
|
|
25
25
|
agentLeaveDocument,
|
|
26
26
|
agentUpdateSelection,
|
|
27
|
-
applyText,
|
|
28
|
-
getText,
|
|
29
|
-
hasCollabState,
|
|
30
|
-
seedFromText,
|
|
31
27
|
} from "@agent-native/core/collab";
|
|
32
28
|
import { accessFilter, assertAccess } from "@agent-native/core/sharing";
|
|
33
29
|
import { and, eq } from "drizzle-orm";
|
|
34
30
|
import { z } from "zod";
|
|
35
31
|
|
|
36
32
|
import { getDb, schema } from "../server/db/index.js";
|
|
33
|
+
import {
|
|
34
|
+
readLiveSourceFile,
|
|
35
|
+
writeInlineSourceFile,
|
|
36
|
+
type SourceWorkspaceFile,
|
|
37
|
+
} from "../server/source-workspace.js";
|
|
37
38
|
import { applyVisualEdit, type EditIntent } from "../shared/code-layer.js";
|
|
38
39
|
import { agentSelectionDescriptor } from "../shared/collab-selection.js";
|
|
39
40
|
import {
|
|
@@ -79,21 +80,6 @@ const findingSchema = z
|
|
|
79
80
|
// Live-content + resolve/persist helpers (mirrors apply-visual-edit's scoped path)
|
|
80
81
|
// ---------------------------------------------------------------------------
|
|
81
82
|
|
|
82
|
-
async function liveContent(
|
|
83
|
-
fileId: string,
|
|
84
|
-
storedContent: string,
|
|
85
|
-
): Promise<string> {
|
|
86
|
-
try {
|
|
87
|
-
if (await hasCollabState(fileId)) {
|
|
88
|
-
const live = await getText(fileId, "content");
|
|
89
|
-
if (typeof live === "string") return live;
|
|
90
|
-
}
|
|
91
|
-
} catch {
|
|
92
|
-
// Collab reads are best-effort; SQL content remains the fallback.
|
|
93
|
-
}
|
|
94
|
-
return storedContent;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
83
|
async function resolveEditableDesignFile(source: {
|
|
98
84
|
designId?: string;
|
|
99
85
|
fileId?: string;
|
|
@@ -103,6 +89,7 @@ async function resolveEditableDesignFile(source: {
|
|
|
103
89
|
designId: string;
|
|
104
90
|
filename: string;
|
|
105
91
|
content: string;
|
|
92
|
+
versionHash: string;
|
|
106
93
|
}> {
|
|
107
94
|
if (!source.fileId && !source.designId) {
|
|
108
95
|
throw new Error("designId or fileId is required.");
|
|
@@ -152,42 +139,73 @@ async function resolveEditableDesignFile(source: {
|
|
|
152
139
|
// Writes require editor access to the owning design.
|
|
153
140
|
await assertAccess("design", file.designId, "editor");
|
|
154
141
|
|
|
142
|
+
// Read the LIVE base (collab text when present, else the SQL row) ONCE
|
|
143
|
+
// here and capture its versionHash. This is the actual base the deterministic
|
|
144
|
+
// edit engine transforms in run() below, so this hash — not a fresh re-read
|
|
145
|
+
// computed at persist time — is what proves the transform's input is still
|
|
146
|
+
// current when persistDesignFileEdit writes. Mirrors apply-visual-edit.ts's
|
|
147
|
+
// resolveEditableDesignFile/persistDesignFileEdit split.
|
|
148
|
+
const workspaceFile: SourceWorkspaceFile = {
|
|
149
|
+
id: file.id,
|
|
150
|
+
designId: file.designId,
|
|
151
|
+
filename: file.filename,
|
|
152
|
+
fileType: "html",
|
|
153
|
+
content: file.content ?? "",
|
|
154
|
+
createdAt: null,
|
|
155
|
+
updatedAt: null,
|
|
156
|
+
};
|
|
157
|
+
const live = await readLiveSourceFile(workspaceFile);
|
|
158
|
+
|
|
155
159
|
return {
|
|
156
160
|
id: file.id,
|
|
157
161
|
designId: file.designId,
|
|
158
162
|
filename: file.filename,
|
|
159
|
-
content:
|
|
163
|
+
content: live.content,
|
|
164
|
+
versionHash: live.versionHash,
|
|
160
165
|
};
|
|
161
166
|
}
|
|
162
167
|
|
|
163
168
|
async function persistDesignFileEdit(file: {
|
|
164
169
|
id: string;
|
|
165
170
|
designId: string;
|
|
171
|
+
filename: string;
|
|
166
172
|
content: string;
|
|
173
|
+
expectedVersionHash: string;
|
|
167
174
|
}): Promise<void> {
|
|
168
175
|
// Re-assert at the write boundary so the persist path is independently scoped.
|
|
169
176
|
await assertAccess("design", file.designId, "editor");
|
|
170
177
|
|
|
171
|
-
const db = getDb();
|
|
172
|
-
const now = new Date().toISOString();
|
|
173
|
-
|
|
174
178
|
agentEnterDocument(file.id);
|
|
175
179
|
try {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
180
|
+
// Pass through the versionHash captured in resolveEditableDesignFile at
|
|
181
|
+
// the SAME read the transform used as its base (NOT a fresh re-read of
|
|
182
|
+
// the (already-transformed) content here — re-reading here would always
|
|
183
|
+
// observe whatever is live "now" and trivially match itself, proving
|
|
184
|
+
// nothing about whether a sibling write landed between the transform's
|
|
185
|
+
// base read and this persist). writeInlineSourceFile re-reads the live
|
|
186
|
+
// text immediately before its own applyText/DB write and rejects if it no
|
|
187
|
+
// longer matches this hash — closing the race window where a concurrent
|
|
188
|
+
// editor/agent write lands between the base read (used to compute this
|
|
189
|
+
// patch) and this persist call (the same stale-diff-base bug fixed for
|
|
190
|
+
// insert-design-native-asset.ts / insert-asset.ts: a diff computed from a
|
|
191
|
+
// stale base, char-diffed into a collab doc that has since moved on,
|
|
192
|
+
// corrupts or drops the other writer's change).
|
|
193
|
+
const workspaceFile: SourceWorkspaceFile = {
|
|
194
|
+
id: file.id,
|
|
195
|
+
designId: file.designId,
|
|
196
|
+
filename: file.filename,
|
|
197
|
+
fileType: "html",
|
|
198
|
+
content: file.content,
|
|
199
|
+
createdAt: null,
|
|
200
|
+
updatedAt: null,
|
|
201
|
+
};
|
|
186
202
|
|
|
187
|
-
await
|
|
188
|
-
.
|
|
189
|
-
|
|
190
|
-
|
|
203
|
+
await writeInlineSourceFile({
|
|
204
|
+
designId: file.designId,
|
|
205
|
+
file: workspaceFile,
|
|
206
|
+
content: file.content,
|
|
207
|
+
expectedVersionHash: file.expectedVersionHash,
|
|
208
|
+
});
|
|
191
209
|
} finally {
|
|
192
210
|
agentLeaveDocument(file.id);
|
|
193
211
|
}
|
|
@@ -298,7 +316,9 @@ export default defineAction({
|
|
|
298
316
|
await persistDesignFileEdit({
|
|
299
317
|
id: file.id,
|
|
300
318
|
designId: file.designId,
|
|
319
|
+
filename: file.filename,
|
|
301
320
|
content: patch.content,
|
|
321
|
+
expectedVersionHash: file.versionHash,
|
|
302
322
|
});
|
|
303
323
|
}
|
|
304
324
|
|
|
@@ -26,9 +26,6 @@ import {
|
|
|
26
26
|
agentEnterDocument,
|
|
27
27
|
agentLeaveDocument,
|
|
28
28
|
agentUpdateSelection,
|
|
29
|
-
applyText,
|
|
30
|
-
hasCollabState,
|
|
31
|
-
seedFromText,
|
|
32
29
|
} from "@agent-native/core/collab";
|
|
33
30
|
import {
|
|
34
31
|
accessFilter,
|
|
@@ -40,6 +37,10 @@ import { z } from "zod";
|
|
|
40
37
|
|
|
41
38
|
import { getDb, schema } from "../server/db/index.js";
|
|
42
39
|
import "../server/db/index.js"; // ensure registerShareableResource runs
|
|
40
|
+
import {
|
|
41
|
+
writeInlineSourceFile,
|
|
42
|
+
type SourceWorkspaceFile,
|
|
43
|
+
} from "../server/source-workspace.js";
|
|
43
44
|
import { resolveSourceCapabilities } from "../shared/capability-resolver.js";
|
|
44
45
|
import {
|
|
45
46
|
applyVisualEdit,
|
|
@@ -57,6 +58,7 @@ import {
|
|
|
57
58
|
} from "../shared/component-model.js";
|
|
58
59
|
import { hasCapability } from "../shared/design-source-capabilities.js";
|
|
59
60
|
import { normalizeDesignSourceType } from "../shared/source-mode.js";
|
|
61
|
+
import { sourceContentHash } from "../shared/source-workspace.js";
|
|
60
62
|
|
|
61
63
|
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
62
64
|
|
|
@@ -122,34 +124,46 @@ export function applyRootAttributeEdit(
|
|
|
122
124
|
async function persistEdit(file: {
|
|
123
125
|
id: string;
|
|
124
126
|
designId: string;
|
|
127
|
+
filename: string;
|
|
125
128
|
content: string;
|
|
129
|
+
expectedVersionHash: string;
|
|
126
130
|
}): Promise<string> {
|
|
127
131
|
await assertAccess("design", file.designId, "editor");
|
|
128
|
-
const db = getDb();
|
|
129
|
-
const now = new Date().toISOString();
|
|
130
132
|
|
|
131
133
|
agentEnterDocument(file.id);
|
|
132
134
|
try {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
// Pass through the versionHash of the ACTUAL base the transform used
|
|
136
|
+
// (captured by the caller in run() at the same read as `html`, BEFORE
|
|
137
|
+
// applyRootAttributeEdit/applyVisualEdit computed `patchedContent` from
|
|
138
|
+
// it) — not a fresh re-read of the (already-transformed) content here.
|
|
139
|
+
// Re-reading the live/SQL state at persist time and hashing THAT would
|
|
140
|
+
// always match itself trivially, proving nothing about whether a sibling
|
|
141
|
+
// write landed between the transform's base read and this persist call.
|
|
142
|
+
// writeInlineSourceFile re-reads the live text immediately before its own
|
|
143
|
+
// applyText/DB write and rejects it if it no longer matches this hash —
|
|
144
|
+
// closing the race window (the same stale-diff-base bug fixed for
|
|
145
|
+
// insert-design-native-asset.ts / insert-asset.ts / apply-visual-edit.ts).
|
|
146
|
+
const workspaceFile: SourceWorkspaceFile = {
|
|
147
|
+
id: file.id,
|
|
148
|
+
designId: file.designId,
|
|
149
|
+
filename: file.filename,
|
|
150
|
+
fileType: "html",
|
|
151
|
+
content: file.content,
|
|
152
|
+
createdAt: null,
|
|
153
|
+
updatedAt: null,
|
|
154
|
+
};
|
|
137
155
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
156
|
+
const result = await writeInlineSourceFile({
|
|
157
|
+
designId: file.designId,
|
|
158
|
+
file: workspaceFile,
|
|
159
|
+
content: file.content,
|
|
160
|
+
expectedVersionHash: file.expectedVersionHash,
|
|
161
|
+
});
|
|
143
162
|
|
|
144
|
-
|
|
145
|
-
.update(schema.designs)
|
|
146
|
-
.set({ updatedAt: now })
|
|
147
|
-
.where(eq(schema.designs.id, file.designId));
|
|
163
|
+
return result.updatedAt;
|
|
148
164
|
} finally {
|
|
149
165
|
agentLeaveDocument(file.id);
|
|
150
166
|
}
|
|
151
|
-
|
|
152
|
-
return now;
|
|
153
167
|
}
|
|
154
168
|
|
|
155
169
|
// ─── Action ───────────────────────────────────────────────────────────────────
|
|
@@ -316,6 +330,11 @@ export default defineAction({
|
|
|
316
330
|
typeof source?.currentContent === "string"
|
|
317
331
|
? source.currentContent
|
|
318
332
|
: (file.content ?? "");
|
|
333
|
+
// Capture the hash of this EXACT base — the same string the transform
|
|
334
|
+
// below reads from — so persistEdit can pass it through as
|
|
335
|
+
// expectedVersionHash. A re-read at persist time would hash whatever is
|
|
336
|
+
// live "then" instead of proving this base is still current.
|
|
337
|
+
const baseVersionHash = sourceContentHash(html);
|
|
319
338
|
|
|
320
339
|
// ── Resolve node ─────────────────────────────────────────────────────────
|
|
321
340
|
const codeLayerSource: CodeLayerSource = {
|
|
@@ -388,7 +407,9 @@ export default defineAction({
|
|
|
388
407
|
const updatedAt = await persistEdit({
|
|
389
408
|
id: file.id,
|
|
390
409
|
designId: file.designId,
|
|
410
|
+
filename: file.filename,
|
|
391
411
|
content: patchedContent,
|
|
412
|
+
expectedVersionHash: baseVersionHash,
|
|
392
413
|
});
|
|
393
414
|
|
|
394
415
|
agentUpdateSelection(file.id, {
|