@agent-native/core 0.80.8 → 0.80.10
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 +19 -0
- package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +6 -0
- package/corpus/core/docs/content/locales/de-DE/template-design.mdx +8 -0
- package/corpus/core/docs/content/locales/es-ES/template-design.mdx +10 -2
- package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +10 -2
- package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +7 -0
- package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +7 -0
- package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +7 -0
- package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +9 -2
- package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +6 -0
- package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +6 -0
- package/corpus/core/docs/content/template-design.mdx +9 -2
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/cli/design-connect.ts +28 -2
- package/corpus/core/src/cli/mcp.ts +10 -0
- package/corpus/core/src/cli/skills.ts +103 -36
- package/corpus/core/src/client/error-format.ts +25 -0
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +13 -11
- package/corpus/core/src/client/guided-questions.tsx +32 -4
- package/corpus/core/src/client/onboarding/OnboardingPanel.tsx +33 -1
- package/corpus/core/src/client/resources/BuiltinCapabilityDetail.tsx +8 -0
- package/corpus/core/src/client/resources/use-builtin-capabilities.ts +4 -2
- package/corpus/core/src/client/session-replay.ts +34 -0
- package/corpus/core/src/client/sharing/ShareButton.tsx +106 -21
- package/corpus/core/src/coding-tools/index.ts +1 -1
- package/corpus/core/src/mcp/index.ts +2 -0
- package/corpus/core/src/mcp/screen-memory-stdio.ts +290 -0
- package/corpus/core/src/mcp-client/builtin-capabilities.ts +13 -1
- package/corpus/core/src/mcp-client/index.ts +9 -0
- package/corpus/core/src/mcp-client/screen-memory-local.ts +461 -0
- package/corpus/core/src/onboarding/types.ts +7 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +25 -0
- package/corpus/core/src/server/agents-bundle.ts +35 -7
- package/corpus/core/src/styles/agent-native.css +5 -0
- package/corpus/core/src/templates/default/app/global.css +35 -35
- package/corpus/templates/analytics/AGENTS.md +6 -0
- package/corpus/templates/analytics/actions/github-repo-files.ts +9 -0
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +4 -4
- package/corpus/templates/analytics/app/global.css +144 -40
- package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/ChartCard.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +1 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +4 -4
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +9 -9
- package/corpus/templates/analytics/changelog/2026-06-29-agents-can-search-and-read-connected-github-repositories-whe.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-sessions-and-explorer-layouts-adapt-when-the-agent-sidebar-is.md +6 -0
- package/corpus/templates/assets/app/components/layout/Layout.tsx +3 -1
- package/corpus/templates/assets/app/components/library/LibraryPresetGrid.tsx +1 -1
- package/corpus/templates/assets/app/global.css +99 -35
- package/corpus/templates/assets/app/routes/asset.$id.tsx +2 -2
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +4 -4
- package/corpus/templates/assets/app/routes/library.tsx +4 -4
- package/corpus/templates/assets/changelog/2026-06-29-asset-library-and-detail-layouts-adapt-when-the-agent-sidebar.md +6 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/brain/app/global.css +63 -35
- package/corpus/templates/brain/app/routes/search.tsx +1 -1
- package/corpus/templates/brain/app/routes/settings.tsx +1 -1
- package/corpus/templates/brain/app/routes/sources.tsx +2 -2
- package/corpus/templates/brain/changelog/2026-06-29-search-settings-and-source-layouts-adapt-when-the-agent-sidebar.md +6 -0
- package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +4 -4
- package/corpus/templates/calendar/app/components/calendar/FindTimePanel.tsx +3 -2
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +4 -2
- package/corpus/templates/calendar/app/global.css +69 -35
- package/corpus/templates/calendar/changelog/2026-06-29-event-and-find-time-layouts-adapt-when-the-agent-sidebar-is.md +6 -0
- package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/chat/app/global.css +35 -35
- package/corpus/templates/chat/changelog/2026-06-29-chat-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/clips/AGENTS.md +13 -0
- package/corpus/templates/clips/actions/get-screen-memory-status.ts +12 -0
- package/corpus/templates/clips/actions/query-screen-memory-context.ts +29 -0
- package/corpus/templates/clips/actions/view-screen.ts +2 -2
- package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -1
- package/corpus/templates/clips/app/global.css +47 -35
- package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +3 -3
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +45 -18
- package/corpus/templates/clips/changelog/2026-06-29-meeting-detail-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-29-screen-memory-keeps-a-local-rolling-screen-buffer-for-agent-context.md +5 -0
- package/corpus/templates/clips/changelog/2026-06-29-video-chat-is-easier-to-find-on-recording-pages-and-s3-setup.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/styles.css +39 -39
- package/corpus/templates/clips/desktop/src/app.tsx +290 -1
- package/corpus/templates/clips/desktop/src/shared/config.ts +83 -0
- package/corpus/templates/clips/desktop/src/styles.css +67 -52
- package/corpus/templates/clips/desktop/src-tauri/src/config.rs +50 -0
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +17 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +13 -13
- package/corpus/templates/clips/desktop/src-tauri/src/screen_memory.rs +990 -0
- package/corpus/templates/clips/server/plugins/onboarding.ts +2 -0
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +3 -3
- package/corpus/templates/content/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/content/app/global.css +29 -15
- package/corpus/templates/content/changelog/2026-06-29-database-gallery-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +25 -20
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -0
- package/corpus/templates/design/.agents/skills/export-handoff/SKILL.md +8 -0
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +13 -0
- package/corpus/templates/design/AGENTS.md +20 -12
- package/corpus/templates/design/CODE_NATIVE_DESIGN_STUDIO_IMPLEMENTATION_PLAN.md +1054 -0
- package/corpus/templates/design/DESIGN-STUDIO-PLAN.md +717 -0
- package/corpus/templates/design/actions/add-breakpoint.ts +143 -0
- package/corpus/templates/design/actions/add-localhost-screens.ts +5 -0
- package/corpus/templates/design/actions/apply-a11y-fix.ts +317 -0
- package/corpus/templates/design/actions/apply-component-prop-edit.ts +433 -0
- package/corpus/templates/design/actions/apply-design-state.ts +200 -0
- package/corpus/templates/design/actions/apply-design-token-edit.ts +202 -0
- package/corpus/templates/design/actions/apply-motion-edit.ts +450 -0
- package/corpus/templates/design/actions/apply-shader-fill.ts +404 -0
- package/corpus/templates/design/actions/apply-visual-edit.ts +214 -8
- package/corpus/templates/design/actions/capture-design-state.ts +224 -0
- package/corpus/templates/design/actions/connect-builder-app.ts +162 -0
- package/corpus/templates/design/actions/create-component.ts +447 -0
- package/corpus/templates/design/actions/create-design-branch.ts +263 -0
- package/corpus/templates/design/actions/create-design-state.ts +162 -0
- package/corpus/templates/design/actions/delete-design-state.ts +55 -0
- package/corpus/templates/design/actions/deploy-design-preview.ts +275 -0
- package/corpus/templates/design/actions/export-coding-handoff.ts +12 -4
- package/corpus/templates/design/actions/generate-design.ts +6 -21
- package/corpus/templates/design/actions/generate-screens.ts +43 -2
- package/corpus/templates/design/actions/get-component-details.ts +242 -0
- package/corpus/templates/design/actions/get-design-branch-diff.ts +362 -0
- package/corpus/templates/design/actions/get-design-review.ts +314 -0
- package/corpus/templates/design/actions/get-design-surface-index.ts +582 -0
- package/corpus/templates/design/actions/get-design.ts +1 -0
- package/corpus/templates/design/actions/get-motion-timeline.ts +99 -0
- package/corpus/templates/design/actions/index-components.ts +258 -0
- package/corpus/templates/design/actions/index-design-tokens.ts +273 -0
- package/corpus/templates/design/actions/list-design-extensions.ts +309 -0
- package/corpus/templates/design/actions/list-design-source-capabilities.ts +153 -0
- package/corpus/templates/design/actions/list-design-states.ts +72 -0
- package/corpus/templates/design/actions/migrate-inline-design-to-app.ts +298 -0
- package/corpus/templates/design/actions/open-component-source.ts +237 -0
- package/corpus/templates/design/actions/present-design-variants.ts +355 -30
- package/corpus/templates/design/actions/preview-component-prop-edit.ts +254 -0
- package/corpus/templates/design/actions/preview-design-token-edit.ts +113 -0
- package/corpus/templates/design/actions/preview-shader-fill.ts +189 -0
- package/corpus/templates/design/actions/remove-breakpoint.ts +103 -0
- package/corpus/templates/design/actions/remove-motion-timeline.ts +196 -0
- package/corpus/templates/design/actions/run-design-audit.ts +421 -0
- package/corpus/templates/design/actions/run-design-extension-action.ts +284 -0
- package/corpus/templates/design/actions/set-active-breakpoint.ts +39 -0
- package/corpus/templates/design/actions/view-screen.ts +75 -31
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +1738 -135
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +1 -1
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +632 -43
- package/corpus/templates/design/app/components/design/DrawOverlay.tsx +1 -1
- package/corpus/templates/design/app/components/design/EditPanel.tsx +1873 -132
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +384 -219
- package/corpus/templates/design/app/components/design/LocalSourceEditBanner.tsx +157 -0
- package/corpus/templates/design/app/components/design/MotionDock.tsx +1062 -0
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +2103 -295
- package/corpus/templates/design/app/components/design/QuestionFlow.tsx +83 -206
- package/corpus/templates/design/app/components/design/ReviewPanel.tsx +759 -0
- package/corpus/templates/design/app/components/design/StatesPanel.tsx +579 -0
- package/corpus/templates/design/app/components/design/TokensPanel.tsx +573 -0
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +1 -1
- package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +241 -0
- package/corpus/templates/design/app/components/design/index.ts +16 -1
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +238 -137
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +188 -14
- package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +24 -5
- package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +57 -1
- package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +145 -0
- package/corpus/templates/design/app/components/design/inspector/SHADER_INTEGRATION.md +42 -12
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +37 -12
- package/corpus/templates/design/app/components/design/inspector/index.ts +1 -0
- package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +12 -5
- package/corpus/templates/design/app/components/design/types.ts +9 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +23 -5
- package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +1 -1
- package/corpus/templates/design/app/global.css +77 -49
- package/corpus/templates/design/app/hooks/use-question-flow.ts +2 -2
- package/corpus/templates/design/app/hooks/useAgentEditRequest.ts +131 -0
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +11 -2
- package/corpus/templates/design/app/i18n/zh-TW.ts +34 -0
- package/corpus/templates/design/app/i18n-data.ts +314 -3
- package/corpus/templates/design/app/pages/DesignEditor.tsx +4929 -892
- package/corpus/templates/design/app/root.tsx +1 -1
- package/corpus/templates/design/changelog/2026-06-29-added-a-review-panel-in-the-design-editor-s-inspector-with-a.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-containers-no-longer-block-selecting-nested-elements-and-nor.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-copying-and-pasting-layers-no-longer-shows-success-notificat.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-agents-now-generate-and-refine-variants-from-stronger.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-inspector-controls-now-match-figmas-softer-dark-chrome.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-questions-now-appear-as-a-cleaner-canvas-intake-with-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-variant-directions-now-appear-as-board-screens-with-chat-buttons.md +5 -0
- package/corpus/templates/design/changelog/2026-06-29-device-presets-in-all-screens-view-resize-the-selected-previ.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-element-selection-no-longer-snaps-back-to-the-previous-layer.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-frame-resize-measurements-now-stay-beside-the-cursor-while-d.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-inspector-number-fields-have-cleaner-tooltips-and-draggable-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-layer-and-canvas-drags-keep-the-layer-list-stable-while-chan.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-layer-locking-layer-nesting-generated-question-intake-and-im.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-layer-moves-can-be-undone-and-redone-without-flashing-the-ca.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-layer-names-in-the-sidebar-can-scroll-horizontally-instead-o.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-layer-nesting-in-the-sidebar-now-uses-tighter-spacing-so-nam.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-layers-no-longer-repeat-document-wrapper-rows-when-a-screen-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-overview-previews-now-keep-element-hover-and-selection-tied-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-pressing-escape-now-cancels-a-stuck-screen-drag-in-the-overv.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-is-easier-to-find-and-named-screens-open-dir.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-only-highlights-screens-when-the-frame-or-ti.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-previews-now-resize-to-match-the-selected-de.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-selection-now-uses-a-pointer-cursor-instead-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-selection-outlines-now-stay-locked-to-the-se.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-zoom-now-reports-real-screen-scale-separatel.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-zooming-feels-smoother-and-selection-outline.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-zooming-now-stays-on-the-overview-canvas-ins.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-previews-use-a-single-blue-hover-border-in-all-screen.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-selected-containers-show-draggable-padding-and-gap-guides-on.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-selecting-a-nested-layer-from-all-screens-now-keeps-you-in-a.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-share-now-groups-link-sharing-exports-and-agent-handoff.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-design-editor-adds-a-studio-layer-with-tokens-respon.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-design-editor-loading-skeleton-now-uses-a-softer-charcoa.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-device-preview-menu-now-sits-next-to-the-preview-button-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-inspector-stays-read-only-while-an-empty-design-is-still.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-missing-design-view-now-matches-the-rest-of-the-editor-c.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-pen-tool-icon-and-tool-option-menus-better-match-the-edi.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-typography-controls-now-keep-the-font-name-visible-and-move-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-accessibility-findings-now-offer-a-one-click-fix.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-component-instances-now-have-editable-props-in-the-inspe.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-inspect-code-now-shows-the-elements-opening-tag-at-a-gla.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-shader-fill-presets-can-now-be-applied-to-an-element.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-motion-timeline-can-now-add-a-track-to-any-element-a.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-visual-editor-selection-layer-paint-and-drawing-controls-are-more-reliable.md +6 -0
- package/corpus/templates/design/e2e/README.md +3 -3
- package/corpus/templates/design/e2e/global-setup.ts +11 -22
- package/corpus/templates/design/e2e/helpers.ts +128 -11
- package/corpus/templates/design/playwright.config.ts +9 -3
- package/corpus/templates/design/server/db/schema.ts +123 -0
- package/corpus/templates/design/server/lib/coding-handoff.ts +126 -2
- package/corpus/templates/design/server/plugins/core-routes.ts +1 -2
- package/corpus/templates/design/server/plugins/db.ts +90 -0
- package/corpus/templates/design/server/routes/api/design-handoff/[id].zip.get.ts +86 -0
- package/corpus/templates/design/shared/builder-app.ts +297 -0
- package/corpus/templates/design/shared/capability-resolver.ts +123 -0
- package/corpus/templates/design/shared/capture-sanitize.ts +70 -0
- package/corpus/templates/design/shared/code-layer.ts +1141 -93
- package/corpus/templates/design/shared/component-model.ts +239 -0
- package/corpus/templates/design/shared/design-review.ts +275 -0
- package/corpus/templates/design/shared/design-source-capabilities.ts +286 -0
- package/corpus/templates/design/shared/design-state.ts +112 -0
- package/corpus/templates/design/shared/design-surface-index.ts +258 -0
- package/corpus/templates/design/shared/generation-session.ts +41 -0
- package/corpus/templates/design/shared/motion-compiler.ts +278 -0
- package/corpus/templates/design/shared/motion-timeline.ts +193 -0
- package/corpus/templates/design/shared/responsive-classes.ts +452 -0
- package/corpus/templates/design/shared/shader-fill.ts +323 -0
- package/corpus/templates/design/shared/source-mode.ts +245 -0
- package/corpus/templates/dispatch/app/global.css +79 -35
- package/corpus/templates/dispatch/app/routes/integrations.tsx +8 -7
- package/corpus/templates/dispatch/changelog/2026-06-29-integration-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/forms/app/components/layout/Layout.tsx +6 -2
- package/corpus/templates/forms/app/global.css +64 -35
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +2 -2
- package/corpus/templates/forms/app/pages/ResponseInsightsPage.tsx +3 -3
- package/corpus/templates/forms/changelog/2026-06-29-form-list-and-insight-layouts-adapt-when-the-agent-sidebar.md +6 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +3 -1
- package/corpus/templates/macros/app/global.css +25 -9
- package/corpus/templates/macros/changelog/2026-06-29-macro-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +6 -2
- package/corpus/templates/mail/app/global.css +42 -36
- package/corpus/templates/mail/app/pages/InboxPage.tsx +1 -1
- package/corpus/templates/mail/changelog/2026-06-29-the-contact-panel-now-adapts-to-the-available-mail-pane-width.md +6 -0
- package/corpus/templates/plan/app/components/layout/Layout.tsx +3 -1
- package/corpus/templates/plan/app/components/plan/CanvasArea.tsx +6 -2
- package/corpus/templates/plan/app/components/plan/DocumentArea.tsx +6 -7
- package/corpus/templates/plan/app/global.css +74 -42
- package/corpus/templates/plan/changelog/2026-06-29-plan-canvases-open-without-an-initial-pan-and-zoom-flicker.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-29-plan-document-blocks-adapt-to-the-available-document-width.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-29-plan-titles-and-summaries-can-be-edited-inline-without-focus.md +6 -0
- package/corpus/templates/slides/app/components/layout/Layout.tsx +3 -1
- package/corpus/templates/slides/app/global.css +49 -33
- package/corpus/templates/slides/changelog/2026-06-29-slide-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/videos/app/components/layout/Layout.tsx +3 -1
- package/corpus/templates/videos/app/global.css +35 -35
- package/corpus/templates/videos/changelog/2026-06-29-video-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +28 -2
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +10 -0
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +95 -33
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/error-format.d.ts.map +1 -1
- package/dist/client/error-format.js +17 -0
- package/dist/client/error-format.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +3 -4
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/guided-questions.d.ts +4 -0
- package/dist/client/guided-questions.d.ts.map +1 -1
- package/dist/client/guided-questions.js +16 -7
- package/dist/client/guided-questions.js.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.js +26 -1
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/resources/BuiltinCapabilityDetail.d.ts.map +1 -1
- package/dist/client/resources/BuiltinCapabilityDetail.js +1 -1
- package/dist/client/resources/BuiltinCapabilityDetail.js.map +1 -1
- package/dist/client/resources/use-builtin-capabilities.d.ts +1 -1
- package/dist/client/resources/use-builtin-capabilities.d.ts.map +1 -1
- package/dist/client/resources/use-builtin-capabilities.js +2 -1
- package/dist/client/resources/use-builtin-capabilities.js.map +1 -1
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +31 -0
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +14 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +36 -7
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/coding-tools/index.js +1 -1
- package/dist/coding-tools/index.js.map +1 -1
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/screen-memory-stdio.d.ts +6 -0
- package/dist/mcp/screen-memory-stdio.d.ts.map +1 -0
- package/dist/mcp/screen-memory-stdio.js +213 -0
- package/dist/mcp/screen-memory-stdio.js.map +1 -0
- package/dist/mcp-client/builtin-capabilities.d.ts +1 -1
- package/dist/mcp-client/builtin-capabilities.d.ts.map +1 -1
- package/dist/mcp-client/builtin-capabilities.js +10 -0
- package/dist/mcp-client/builtin-capabilities.js.map +1 -1
- package/dist/mcp-client/index.d.ts +1 -0
- package/dist/mcp-client/index.d.ts.map +1 -1
- package/dist/mcp-client/index.js +1 -0
- package/dist/mcp-client/index.js.map +1 -1
- package/dist/mcp-client/screen-memory-local.d.ts +61 -0
- package/dist/mcp-client/screen-memory-local.d.ts.map +1 -0
- package/dist/mcp-client/screen-memory-local.js +336 -0
- package/dist/mcp-client/screen-memory-local.js.map +1 -0
- package/dist/observability/routes.d.ts +3 -3
- package/dist/onboarding/types.d.ts +7 -0
- package/dist/onboarding/types.d.ts.map +1 -1
- package/dist/onboarding/types.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +26 -0
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agents-bundle.d.ts.map +1 -1
- package/dist/server/agents-bundle.js +22 -7
- package/dist/server/agents-bundle.js.map +1 -1
- package/dist/styles/agent-native.css +5 -0
- package/dist/templates/default/app/global.css +35 -35
- package/docs/content/locales/ar-SA/template-design.mdx +6 -0
- package/docs/content/locales/de-DE/template-design.mdx +8 -0
- package/docs/content/locales/es-ES/template-design.mdx +10 -2
- package/docs/content/locales/fr-FR/template-design.mdx +10 -2
- package/docs/content/locales/hi-IN/template-design.mdx +7 -0
- package/docs/content/locales/ja-JP/template-design.mdx +7 -0
- package/docs/content/locales/ko-KR/template-design.mdx +7 -0
- package/docs/content/locales/pt-BR/template-design.mdx +9 -2
- package/docs/content/locales/zh-CN/template-design.mdx +6 -0
- package/docs/content/locales/zh-TW/template-design.mdx +6 -0
- package/docs/content/template-design.mdx +9 -2
- package/package.json +1 -1
- package/src/templates/default/app/global.css +35 -35
- package/corpus/templates/design/app/components/design/VariantGrid.tsx +0 -189
- package/corpus/templates/design/app/components/design/VariantHandoffCard.tsx +0 -115
- package/corpus/templates/design/app/hooks/use-variant-flow.ts +0 -342
package/corpus/README.md
CHANGED
package/corpus/core/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @agent-native/core
|
|
2
2
|
|
|
3
|
+
## 0.80.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- d26a679: Design connect: document the per-element provenance contract (`data-source-file` / `data-source-line` / `data-source-column` / `data-component-name`, plus `data-loc` shorthand) used to map a selected element back to its source location, and surface it in `design connect --help`. The `resolveNodeToFile` bridge capability now carries a reason string describing this contract.
|
|
8
|
+
- d26a679: Harden the app-backed skill installer for visual-plan feedback: built-in skill folders now stage writes before replacing existing installs, include first-time install command metadata, and make `skills update` point first-time users to `skills add` for setup and MCP registration.
|
|
9
|
+
|
|
10
|
+
## 0.80.9
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 82c138c: Expose app main surfaces as named CSS query containers so templates can reflow against the available app pane instead of the viewport.
|
|
15
|
+
- 82c138c: ShareButton can render optional custom tabs beside the default share-link panel.
|
|
16
|
+
- 82c138c: Improve the exported Design skills with a clearer generation quality bar, updated variant-screen flow guidance, and more grounded visual-edit review instructions.
|
|
17
|
+
- 82c138c: Remove the extension viewer notification bell and place the vertical more menu before Share.
|
|
18
|
+
- 82c138c: Allow guided question options to submit immediately when selected, with optional per-question submit and skip message copy.
|
|
19
|
+
- 82c138c: Add a local Clips Screen Memory MCP stdio server for querying recent on-device screen context.
|
|
20
|
+
- 82c138c: Avoid CORS preflights for cross-origin session replay uploads so hosted apps can send recordings to the first-party analytics collector.
|
|
21
|
+
|
|
3
22
|
## 0.80.8
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
|
@@ -374,6 +374,12 @@ npx @agent-native/core@latest skills add visual-edit
|
|
|
374
374
|
المرقمة مثل `localhost:1234/onboarding/1` و`/onboarding/2` و`/onboarding/3`
|
|
375
375
|
كشاشات منفصلة ومرتبة في وضع النظرة العامة.
|
|
376
376
|
|
|
377
|
+
يمكن تحميل مسار الإدخال `/visual-edit` قبل تسجيل دخول المشاهد، كما يمكن لروابط
|
|
378
|
+
`/design/:id` العامة عرض تصاميم عامة للقراءة فقط بدون جلسة. ما يزال حفظ تخطيط
|
|
379
|
+
الشاشة أو إنشاء شاشات جديدة أو المشاركة ينشئ بيانات Design مرتبطة بحساب: يُرسَل
|
|
380
|
+
المستخدمون غير المسجلين إلى `/_agent-native/sign-in?return=...`، ثم يحفظ Design
|
|
381
|
+
المشروع أو ينسخه إلى ذلك الحساب قبل فتح مربع حوار المشاركة.
|
|
382
|
+
|
|
377
383
|
لأسماء طبقات مستقرة، أضف `data-agent-native-layer-name` إلى العناصر المهمة.
|
|
378
384
|
يستخدمه Design قبل البدائل الدلالية/النصية، ويمكنه حفظ إعادة تسمية الطبقات عبر
|
|
379
385
|
تحرير هذا السمة. يدعم HTML المضمن تحرير طبقات الكود محليًا للنصوص والأصناف
|
|
@@ -376,6 +376,14 @@ zu platzieren. Nummerierte Flows wie `localhost:1234/onboarding/1`,
|
|
|
376
376
|
`/onboarding/2` und `/onboarding/3` bleiben als getrennte, geordnete Screens im
|
|
377
377
|
Overview-Modus erhalten.
|
|
378
378
|
|
|
379
|
+
Die Einstiegsroute `/visual-edit` kann laden, bevor der Betrachter angemeldet
|
|
380
|
+
ist, und öffentliche `/design/:id`-Links können öffentliche Designs ohne Sitzung
|
|
381
|
+
schreibgeschützt rendern. Das Speichern des Screen-Layouts, Generieren neuer
|
|
382
|
+
Screens oder Teilen erstellt weiterhin accountgebundene Design-Daten:
|
|
383
|
+
abgemeldete Benutzer gehen durch `/_agent-native/sign-in?return=...`;
|
|
384
|
+
anschließend speichert oder kopiert Design das Projekt in dieses Konto, bevor
|
|
385
|
+
der Teilen-Dialog geöffnet wird.
|
|
386
|
+
|
|
379
387
|
Für stabile Ebenennamen fügen Sie wichtigen Elementen
|
|
380
388
|
`data-agent-native-layer-name` hinzu. Design verwendet dies vor
|
|
381
389
|
semantischen/textbasierten Fallbacks und kann Umbenennungen durch Bearbeiten
|
|
@@ -340,11 +340,11 @@ Cada operación invocable por el agente es un archivo TypeScript en `templates/d
|
|
|
340
340
|
- **Sistemas de diseño**: `create-design-system`, `update-design-system`, `get-design-system`, `list-design-systems`, `delete-design-system`, `set-default-design-system` y `analyze-brand-assets` para recopilar datos de marca antes del análisis.
|
|
341
341
|
- **Importar** — `index-design-system-with-builder` for Builder-backed code/GitHub/Figma file design-system indexing, plus `import-from-url`, `import-document` (DOCX/PPTX/PDF/XLSX), and `import-design-project` for other sources.
|
|
342
342
|
- **Exportación y transferencia**: `export-html`, `export-pdf`, `export-svg`, `export-zip` y `export-coding-handoff` para convertir un diseño en una transferencia de herramienta de codificación.
|
|
343
|
-
- **Contexto y navegación**: `view-screen` (diseño actual, archivo abierto, vista, pregunta pendiente o
|
|
343
|
+
- **Contexto y navegación**: `view-screen` (diseño actual, archivo abierto, vista, pregunta pendiente o elección de variante), `get-design-snapshot` (estado actual desde el cual un agente externo puede continuar) y `navigate`.
|
|
344
344
|
|
|
345
345
|
### Trabajar con el agente
|
|
346
346
|
|
|
347
|
-
El agente siempre sabe lo que tienes abierto. `view-screen` devuelve el diseño actual, el archivo abierto, la vista activa y cualquier pregunta pendiente o
|
|
347
|
+
El agente siempre sabe lo que tienes abierto. `view-screen` devuelve el diseño actual, el archivo abierto, la vista activa y cualquier pregunta pendiente o elección de variante y los inyecta en cada mensaje, por lo que puede decir "hacer esto más denso" o "exportar esta variante" sin nombrar el diseño.
|
|
348
348
|
|
|
349
349
|
Debido a que un diseño son solo archivos HTML/JSX independientes, el agente edita la misma fuente que representa el iframe y de donde proviene cada exportación; no hay un formato de "maqueta de IA" independiente para traducir. Un sistema de diseño vinculado proporciona tokens y `custom_instructions` el agente honra en cada paso de generación. Seleccione texto o una región en la vista previa y presione Cmd+I para enfocar al agente exactamente en esa parte.
|
|
350
350
|
|
|
@@ -375,6 +375,14 @@ por URL. Los flujos numerados como `localhost:1234/onboarding/1`,
|
|
|
375
375
|
`/onboarding/2` y `/onboarding/3` se mantienen como pantallas separadas y
|
|
376
376
|
ordenadas en modo de vista general.
|
|
377
377
|
|
|
378
|
+
La ruta de entrada `/visual-edit` puede cargar antes de que el visitante inicie
|
|
379
|
+
sesión, y los enlaces públicos `/design/:id` pueden renderizar diseños públicos
|
|
380
|
+
de solo lectura sin sesión. Persistir el diseño de pantallas, generar pantallas
|
|
381
|
+
nuevas o compartir sigue creando datos de Design vinculados a una cuenta: los
|
|
382
|
+
usuarios sin sesión pasan por `/_agent-native/sign-in?return=...`; después,
|
|
383
|
+
Design guarda o copia el proyecto en esa cuenta antes de abrir el diálogo de
|
|
384
|
+
compartir.
|
|
385
|
+
|
|
378
386
|
Para nombres de capa estables, agrega `data-agent-native-layer-name` a los
|
|
379
387
|
elementos importantes. Design lo usa antes de los respaldos semánticos/de texto
|
|
380
388
|
y puede persistir cambios de nombre editando ese atributo. HTML inline admite
|
|
@@ -340,11 +340,11 @@ Chaque opération appelable par un agent est un fichier TypeScript dans `templat
|
|
|
340
340
|
- **Systèmes de conception** : `create-design-system`, `update-design-system`, `get-design-system`, `list-design-systems`, `delete-design-system`, `set-default-design-system` et `analyze-brand-assets` pour collecter des données de marque avant l'analyse.
|
|
341
341
|
- **Importer** — `index-design-system-with-builder` for Builder-backed code/GitHub/Figma file design-system indexing, plus `import-from-url`, `import-document` (DOCX/PPTX/PDF/XLSX), and `import-design-project` for other sources.
|
|
342
342
|
- **Exportation et transfert** : `export-html`, `export-pdf`, `export-svg`, `export-zip` et `export-coding-handoff` pour transformer une conception en transfert d'outil de codage.
|
|
343
|
-
- **Contexte et navigation** – `view-screen` (conception actuelle, fichier ouvert, vue, question en attente ou
|
|
343
|
+
- **Contexte et navigation** – `view-screen` (conception actuelle, fichier ouvert, vue, question en attente ou choix de variante), `get-design-snapshot` (état actuel à partir duquel un agent externe peut continuer) et `navigate`.
|
|
344
344
|
|
|
345
345
|
### Travailler avec l'agent
|
|
346
346
|
|
|
347
|
-
L'agent sait toujours ce que vous avez ouvert. La conception actuelle, le fichier ouvert, la vue active et toute question en attente ou
|
|
347
|
+
L'agent sait toujours ce que vous avez ouvert. La conception actuelle, le fichier ouvert, la vue active et toute question en attente ou choix de variante sont renvoyés par `view-screen` et injectés dans chaque message, vous pouvez donc dire « rendre cela plus dense » ou « exporter cette variante » sans nommer la conception.
|
|
348
348
|
|
|
349
349
|
Étant donné qu'une conception n'est constituée que de fichiers HTML/JSX autonomes, l'agent édite la même source que celle du rendu iframe et celle d'où provient chaque exportation : il n'existe pas de format de « maquette IA » distinct à traduire. Un système de conception lié fournit des jetons et `custom_instructions` que l'agent honore à chaque passage de génération. Sélectionnez du texte ou une région dans l'aperçu et appuyez sur Cmd+I pour concentrer l'agent exactement sur cette partie.
|
|
350
350
|
|
|
@@ -375,6 +375,14 @@ URL. Les flows numérotés comme `localhost:1234/onboarding/1`,
|
|
|
375
375
|
`/onboarding/2` et `/onboarding/3` restent des écrans séparés et ordonnés en
|
|
376
376
|
mode overview.
|
|
377
377
|
|
|
378
|
+
La route d'entrée `/visual-edit` peut se charger avant la connexion du visiteur,
|
|
379
|
+
et les liens publics `/design/:id` peuvent afficher des designs publics en
|
|
380
|
+
lecture seule sans session. Persister la disposition des écrans, générer de
|
|
381
|
+
nouveaux écrans ou partager crée toujours des données Design liées à un compte :
|
|
382
|
+
les utilisateurs non connectés passent par `/_agent-native/sign-in?return=...`,
|
|
383
|
+
puis Design enregistre ou copie le projet dans ce compte avant d'ouvrir la
|
|
384
|
+
boîte de dialogue de partage.
|
|
385
|
+
|
|
378
386
|
Pour des noms de couche stables, ajoutez `data-agent-native-layer-name` aux
|
|
379
387
|
éléments importants. Design l'utilise avant les replis sémantiques/textuels et
|
|
380
388
|
peut persister les renommages en modifiant cet attribut. Le HTML inline prend en
|
|
@@ -374,6 +374,13 @@ place करता है। `localhost:1234/onboarding/1`, `/onboarding/2`, औ
|
|
|
374
374
|
`/onboarding/3` जैसे numbered flows overview mode में separate ordered screens
|
|
375
375
|
रहते हैं।
|
|
376
376
|
|
|
377
|
+
`/visual-edit` entry route viewer के sign in करने से पहले load हो सकता है, और
|
|
378
|
+
public `/design/:id` links बिना session के read-only public designs render कर
|
|
379
|
+
सकते हैं। Screen layout persist करना, नए screens generate करना, या sharing अभी
|
|
380
|
+
भी account-backed Design data बनाता है: signed-out users
|
|
381
|
+
`/_agent-native/sign-in?return=...` से गुजरते हैं, फिर Design share dialog खोलने
|
|
382
|
+
से पहले project को उस account में save या copy करता है।
|
|
383
|
+
|
|
377
384
|
Stable layer names के लिए meaningful elements पर
|
|
378
385
|
`data-agent-native-layer-name` जोड़ें। Design semantic/text fallbacks से पहले
|
|
379
386
|
इसे उपयोग करता है और इसी attribute को edit करके layer renames persist कर सकता
|
|
@@ -376,6 +376,13 @@ npx @agent-native/core@latest skills add visual-edit
|
|
|
376
376
|
のような番号付きフローは、overview mode で個別の順序付き画面として保持
|
|
377
377
|
されます。
|
|
378
378
|
|
|
379
|
+
`/visual-edit` の入口ルートは閲覧者がサインインする前でも読み込めます。
|
|
380
|
+
公開 `/design/:id` リンクも、セッションなしで読み取り専用の公開 Design を
|
|
381
|
+
表示できます。画面レイアウトの保存、新しい画面の生成、共有は引き続きア
|
|
382
|
+
カウントに紐づく Design データを作成します。サインアウト中のユーザーは
|
|
383
|
+
`/_agent-native/sign-in?return=...` を経由し、その後 Design が共有ダイアロ
|
|
384
|
+
グを開く前にプロジェクトをそのアカウントへ保存またはコピーします。
|
|
385
|
+
|
|
379
386
|
安定したレイヤー名には、意味のある要素に
|
|
380
387
|
`data-agent-native-layer-name` を追加します。Design はセマンティック/テ
|
|
381
388
|
キストのフォールバックより先にこれを使い、この属性を編集してレイヤー名
|
|
@@ -373,6 +373,13 @@ npx @agent-native/core@latest skills add visual-edit
|
|
|
373
373
|
`localhost:1234/onboarding/1`, `/onboarding/2`, `/onboarding/3` 같은 번호가
|
|
374
374
|
붙은 흐름은 overview mode에서 분리된 순서 있는 화면으로 유지됩니다.
|
|
375
375
|
|
|
376
|
+
`/visual-edit` 진입 route는 보는 사람이 sign in하기 전에도 load될 수 있고,
|
|
377
|
+
public `/design/:id` 링크는 session 없이 read-only public design을 render할 수
|
|
378
|
+
있습니다. Screen layout을 persist하거나 새 screen을 generate하거나 share하는
|
|
379
|
+
일은 여전히 account-backed Design data를 만듭니다. signed-out 사용자는
|
|
380
|
+
`/_agent-native/sign-in?return=...`를 거친 뒤, Design이 share dialog를 열기
|
|
381
|
+
전에 project를 해당 account에 save하거나 copy합니다.
|
|
382
|
+
|
|
376
383
|
안정적인 layer name을 위해 의미 있는 요소에 `data-agent-native-layer-name`을
|
|
377
384
|
추가하세요. Design은 semantic/text fallback보다 이것을 먼저 사용하며, 해당
|
|
378
385
|
attribute를 편집해 layer rename을 persist할 수 있습니다. Inline HTML은 text,
|
|
@@ -340,11 +340,11 @@ Cada operação que pode ser chamada pelo agente é um arquivo TypeScript em `te
|
|
|
340
340
|
- **Sistemas de design** — `create-design-system`, `update-design-system`, `get-design-system`, `list-design-systems`, `delete-design-system`, `set-default-design-system` e `analyze-brand-assets` para coletar dados da marca antes da análise.
|
|
341
341
|
- **Importar** — `index-design-system-with-builder` for Builder-backed code/GitHub/Figma file design-system indexing, plus `import-from-url`, `import-document` (DOCX/PPTX/PDF/XLSX), and `import-design-project` for other sources.
|
|
342
342
|
- **Exportação e transferência** — `export-html`, `export-pdf`, `export-svg`, `export-zip` e `export-coding-handoff` para transformar um design em uma transferência de ferramenta de codificação.
|
|
343
|
-
- **Contexto e navegação** — `view-screen` (design atual, arquivo aberto, visualização, pergunta pendente ou
|
|
343
|
+
- **Contexto e navegação** — `view-screen` (design atual, arquivo aberto, visualização, pergunta pendente ou escolha de variante), `get-design-snapshot` (estado atual para um agente externo continuar) e `navigate`.
|
|
344
344
|
|
|
345
345
|
### Trabalhando com o agente
|
|
346
346
|
|
|
347
|
-
O agente sempre sabe o que você tem em aberto. O design atual, o arquivo aberto, a visualização ativa e qualquer questão pendente ou
|
|
347
|
+
O agente sempre sabe o que você tem em aberto. O design atual, o arquivo aberto, a visualização ativa e qualquer questão pendente ou escolha de variante são retornados por `view-screen` e injetados em cada mensagem, para que você possa dizer "tornar isso mais denso" ou "exportar esta variante" sem nomear o design.
|
|
348
348
|
|
|
349
349
|
Como um design consiste apenas em arquivos HTML/JSX independentes, o agente edita a mesma fonte que o iframe renderiza e de onde vem cada exportação — não há um formato de "maquete de IA" separado para traduzir. Um sistema de design vinculado fornece tokens e `custom_instructions` que o agente homenageia em cada passagem de geração. Selecione o texto ou uma região na visualização e pressione Cmd+I para focar o agente exatamente nessa parte.
|
|
350
350
|
|
|
@@ -374,6 +374,13 @@ para posicionar cada path ou URL solicitado como sua própria tela iframe basead
|
|
|
374
374
|
em URL. Fluxos numerados como `localhost:1234/onboarding/1`, `/onboarding/2` e
|
|
375
375
|
`/onboarding/3` permanecem como telas separadas e ordenadas no modo overview.
|
|
376
376
|
|
|
377
|
+
A rota de entrada `/visual-edit` pode carregar antes de o visitante entrar, e
|
|
378
|
+
links públicos `/design/:id` podem renderizar designs públicos somente leitura
|
|
379
|
+
sem sessão. Persistir o layout das telas, gerar novas telas ou compartilhar
|
|
380
|
+
ainda cria dados do Design vinculados a uma conta: usuários desconectados passam
|
|
381
|
+
por `/_agent-native/sign-in?return=...`; depois, o Design salva ou copia o
|
|
382
|
+
projeto para essa conta antes de abrir o diálogo de compartilhamento.
|
|
383
|
+
|
|
377
384
|
Para nomes de camada estáveis, adicione `data-agent-native-layer-name` a
|
|
378
385
|
elementos importantes. O Design usa isso antes de fallbacks semânticos/de texto
|
|
379
386
|
e pode persistir renomeações editando esse atributo. HTML inline aceita edições
|
|
@@ -370,6 +370,12 @@ npx @agent-native/core@latest skills add visual-edit
|
|
|
370
370
|
`localhost:1234/onboarding/1`、`/onboarding/2`、`/onboarding/3` 这样的编号流程
|
|
371
371
|
会在 overview 模式中保持为分开的有序屏幕。
|
|
372
372
|
|
|
373
|
+
`/visual-edit` 入口路由可以在查看者登录前加载,公开的 `/design/:id` 链接也
|
|
374
|
+
可以在没有会话时以只读方式渲染公开 design。持久保存屏幕布局、生成新屏幕或
|
|
375
|
+
共享仍会创建账号绑定的 Design 数据:未登录用户会经过
|
|
376
|
+
`/_agent-native/sign-in?return=...`,然后 Design 会在打开共享对话框前,把项
|
|
377
|
+
目保存或复制到该账号。
|
|
378
|
+
|
|
373
379
|
为了获得稳定的图层名称,请在有意义的元素上添加
|
|
374
380
|
`data-agent-native-layer-name`。Design 会优先使用它,然后才使用语义/文本回
|
|
375
381
|
退,并且可以通过编辑该属性来持久保存图层重命名。Inline HTML 支持本地代
|
|
@@ -371,6 +371,12 @@ npx @agent-native/core@latest skills add visual-edit
|
|
|
371
371
|
`localhost:1234/onboarding/1`、`/onboarding/2`、`/onboarding/3` 這樣的編號流程
|
|
372
372
|
會在 overview 模式中保持為分開的有序畫面。
|
|
373
373
|
|
|
374
|
+
`/visual-edit` 入口路由可以在檢視者登入前載入,公開的 `/design/:id` 連結也
|
|
375
|
+
可以在沒有 session 時以唯讀方式渲染公開 design。持久保存畫面版面、產生新畫
|
|
376
|
+
面或分享仍會建立帳號綁定的 Design 資料:未登入使用者會經過
|
|
377
|
+
`/_agent-native/sign-in?return=...`,然後 Design 會在開啟分享對話框前,把專
|
|
378
|
+
案保存或複製到該帳號。
|
|
379
|
+
|
|
374
380
|
若要取得穩定的圖層名稱,請在有意義的元素上加入
|
|
375
381
|
`data-agent-native-layer-name`。Design 會優先使用它,然後才使用語意/文字
|
|
376
382
|
後備,並且可以透過編輯該屬性來持久保存圖層重新命名。Inline HTML 支援本
|
|
@@ -340,11 +340,11 @@ Every agent-callable operation is a TypeScript file in `templates/design/actions
|
|
|
340
340
|
- **Design systems** — `create-design-system`, `update-design-system`, `get-design-system`, `list-design-systems`, `delete-design-system`, `set-default-design-system`, and `analyze-brand-assets` for gathering brand data ahead of analysis.
|
|
341
341
|
- **Import** — `index-design-system-with-builder` for Builder-backed code/GitHub/Figma file design-system indexing, plus `import-from-url`, `import-document` (DOCX/PPTX/PDF/XLSX), and `import-design-project` for other sources.
|
|
342
342
|
- **Export & handoff** — `export-html`, `export-pdf`, `export-svg`, `export-zip`, and `export-coding-handoff` to turn a design into a coding-tool handoff.
|
|
343
|
-
- **Context & navigation** — `view-screen` (current design, open file, view, pending question or variant
|
|
343
|
+
- **Context & navigation** — `view-screen` (current design, open file, view, pending question or variant choice), `get-design-snapshot` (current state for an external agent to continue from), and `navigate`.
|
|
344
344
|
|
|
345
345
|
### Working with the agent
|
|
346
346
|
|
|
347
|
-
The agent always knows what you have open. The current design, the open file, the active view, and any pending question or variant
|
|
347
|
+
The agent always knows what you have open. The current design, the open file, the active view, and any pending question or variant choice are returned by `view-screen` and injected into every message, so you can say "make this denser" or "export this variant" without naming the design.
|
|
348
348
|
|
|
349
349
|
Because a design is just standalone HTML/JSX files, the agent edits the same source the iframe renders and every export comes from — there is no separate "AI mockup" format to translate. A linked design system supplies tokens and `custom_instructions` the agent honors on every generation pass. Select text or a region in the preview and hit Cmd+I to focus the agent on exactly that part.
|
|
350
350
|
|
|
@@ -374,6 +374,13 @@ place each requested path or URL as its own URL-backed iframe screen. Numbered
|
|
|
374
374
|
flows such as `localhost:1234/onboarding/1`, `/onboarding/2`, and
|
|
375
375
|
`/onboarding/3` stay as separate ordered screens in overview mode.
|
|
376
376
|
|
|
377
|
+
The `/visual-edit` entry route can load before the viewer signs in, and public
|
|
378
|
+
`/design/:id` links can render read-only public designs without a session.
|
|
379
|
+
Persisting the screen layout, generating new screens, or sharing still creates
|
|
380
|
+
account-backed Design data: signed-out users go through
|
|
381
|
+
`/_agent-native/sign-in?return=...`, then Design saves or copies the project
|
|
382
|
+
into that account before opening the share dialog.
|
|
383
|
+
|
|
377
384
|
For stable layer names, add `data-agent-native-layer-name` to meaningful
|
|
378
385
|
elements. Design uses it before semantic/text fallbacks and can persist layer
|
|
379
386
|
renames by editing that attribute. Inline HTML supports local code-layer edits
|
package/corpus/core/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.80.
|
|
3
|
+
"version": "0.80.10",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -367,7 +367,14 @@ export async function prepareDesignConnectManifest(
|
|
|
367
367
|
reason:
|
|
368
368
|
operation === "writeFile"
|
|
369
369
|
? "The bridge advertises the contract before enabling local file writes."
|
|
370
|
-
:
|
|
370
|
+
: operation === "resolveNodeToFile"
|
|
371
|
+
? // resolveNodeToFile maps a runtime DOM node id (from the editor's
|
|
372
|
+
// 'select' payload) to { file, line, component } provenance. The
|
|
373
|
+
// bridge endpoint exists; per-element provenance data must be
|
|
374
|
+
// emitted by the connected app at build time — see the provenance
|
|
375
|
+
// note in the help text below.
|
|
376
|
+
"Requires the connected app to emit data-source-file / data-source-line / data-component-name attributes (e.g. via @vitejs/plugin-react jsxDEV or a Babel source plugin)."
|
|
377
|
+
: undefined,
|
|
371
378
|
})),
|
|
372
379
|
};
|
|
373
380
|
}
|
|
@@ -442,7 +449,26 @@ Options:
|
|
|
442
449
|
--route-manifest <path> Non-destructive route manifest output path
|
|
443
450
|
--json Print the manifest JSON and exit
|
|
444
451
|
--once Prepare/scaffold the manifest and exit
|
|
445
|
-
--dry-run Print what would be exposed without writing files
|
|
452
|
+
--dry-run Print what would be exposed without writing files
|
|
453
|
+
|
|
454
|
+
Element provenance (resolveNodeToFile):
|
|
455
|
+
The design editor can map a selected DOM element back to its source file,
|
|
456
|
+
line, and React component name when the connected app emits provenance
|
|
457
|
+
attributes at build time. Add one of the following to your app's build:
|
|
458
|
+
|
|
459
|
+
• @vitejs/plugin-react with jsxDEV enabled (development mode default):
|
|
460
|
+
Sets data-source-file and data-source-line on each JSX element
|
|
461
|
+
automatically when using the Babel transform.
|
|
462
|
+
|
|
463
|
+
• A Babel source plugin (e.g. babel-plugin-react-source or a custom plugin):
|
|
464
|
+
Emits data-source-file="src/Button.tsx" data-source-line="12"
|
|
465
|
+
data-source-column="4" data-component-name="Button" on each element.
|
|
466
|
+
|
|
467
|
+
• data-loc="src/Button.tsx:12:4" shorthand attribute (Babel source convention):
|
|
468
|
+
The bridge parses this as { sourceFile, line, column } automatically.
|
|
469
|
+
|
|
470
|
+
Without these attributes the editor still works; provenance is simply absent.
|
|
471
|
+
Cross-origin localhost iframes cannot be read regardless of attributes (CSP).`);
|
|
446
472
|
}
|
|
447
473
|
|
|
448
474
|
export async function runDesign(argv: string[]) {
|
|
@@ -17,6 +17,7 @@ import crypto from "node:crypto";
|
|
|
17
17
|
import fs from "node:fs";
|
|
18
18
|
import path from "node:path";
|
|
19
19
|
|
|
20
|
+
import { runScreenMemoryMCPStdio } from "../mcp/screen-memory-stdio.js";
|
|
20
21
|
import { runMCPStdio } from "../mcp/stdio.js";
|
|
21
22
|
import {
|
|
22
23
|
findWorkspaceRoot,
|
|
@@ -46,6 +47,7 @@ interface ParsedArgs {
|
|
|
46
47
|
client?: string;
|
|
47
48
|
app?: string;
|
|
48
49
|
port?: number;
|
|
50
|
+
screenMemoryDir?: string;
|
|
49
51
|
scope?: string;
|
|
50
52
|
standalone: boolean;
|
|
51
53
|
rotate: boolean;
|
|
@@ -64,6 +66,7 @@ function parseArgs(argv: string[]): ParsedArgs {
|
|
|
64
66
|
if ((v = eat("--client")) !== undefined) out.client = v;
|
|
65
67
|
else if ((v = eat("--app")) !== undefined) out.app = v;
|
|
66
68
|
else if ((v = eat("--port")) !== undefined) out.port = Number(v);
|
|
69
|
+
else if ((v = eat("--dir")) !== undefined) out.screenMemoryDir = v;
|
|
67
70
|
else if ((v = eat("--scope")) !== undefined) out.scope = v;
|
|
68
71
|
else if (a === "--standalone") out.standalone = true;
|
|
69
72
|
else if (a === "--rotate") out.rotate = true;
|
|
@@ -537,6 +540,10 @@ Usage:
|
|
|
537
540
|
Run the MCP stdio transport (what client configs spawn).
|
|
538
541
|
Default: proxy to the running local app; --standalone builds from disk.
|
|
539
542
|
|
|
543
|
+
npx @agent-native/core@latest mcp screen-memory [--dir <path>]
|
|
544
|
+
Run the local Clips Screen Memory stdio server.
|
|
545
|
+
Defaults to the Clips app-data screen-memory folder.
|
|
546
|
+
|
|
540
547
|
npx @agent-native/core@latest mcp install --client <c> [--app <id>] [--scope user|project]
|
|
541
548
|
Provision a token and write the client's MCP config (idempotent).
|
|
542
549
|
Clients: claude-code, codex, cowork, cursor, opencode, github-copilot
|
|
@@ -558,6 +565,9 @@ export async function runMcp(args: string[]): Promise<void> {
|
|
|
558
565
|
case "serve":
|
|
559
566
|
await cmdServe(p);
|
|
560
567
|
return;
|
|
568
|
+
case "screen-memory":
|
|
569
|
+
await runScreenMemoryMCPStdio({ storeDir: p.screenMemoryDir });
|
|
570
|
+
return;
|
|
561
571
|
case "install":
|
|
562
572
|
await cmdInstall(p);
|
|
563
573
|
return;
|
|
@@ -323,17 +323,18 @@ iteration, or a human-in-the-loop choice among design directions.
|
|
|
323
323
|
- Use \`create-design\` first to create a project shell. Do not report the
|
|
324
324
|
design as ready until it has renderable HTML.
|
|
325
325
|
- For open-ended UX exploration, generate distinct, complete HTML directions
|
|
326
|
-
(2-5, three by default) and call \`present-design-variants\`.
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
326
|
+
(2-5, three by default) and call \`present-design-variants\`. Design saves
|
|
327
|
+
every option as a normal screen on the overview board and renders an inline
|
|
328
|
+
chat choice with one button per screen name. After the user picks, delete the
|
|
329
|
+
unchosen variant screens and continue from the kept screen.
|
|
330
|
+
- If the chat choice buttons are not available in the host, ask the user to
|
|
331
|
+
tell you the screen name they prefer. The variants are already real screens
|
|
332
|
+
on the board, so do not ask them to paste HTML or copy a generated handoff
|
|
333
|
+
summary.
|
|
334
334
|
- For direct refinements to an already chosen direction, call
|
|
335
|
-
\`get-design-snapshot\`, edit from the current tuned HTML,
|
|
336
|
-
\`generate-design
|
|
335
|
+
\`get-design-snapshot\`, edit from the current tuned HTML, and use
|
|
336
|
+
\`edit-design\` for surgical changes. Use \`generate-design\` for new files
|
|
337
|
+
or larger structural rewrites.
|
|
337
338
|
- Use \`export-coding-handoff\` when the user wants to implement the chosen
|
|
338
339
|
design in a codebase.
|
|
339
340
|
|
|
@@ -347,8 +348,29 @@ iteration, or a human-in-the-loop choice among design directions.
|
|
|
347
348
|
4. For product UI redesigns, prefer cleaner hierarchy, progressive disclosure,
|
|
348
349
|
and realistic controls over decorative mockups.
|
|
349
350
|
5. After \`present-design-variants\`, wait for the user's pick before
|
|
350
|
-
generating the next version.
|
|
351
|
-
|
|
351
|
+
generating the next version. Keep the chosen screen, delete the other
|
|
352
|
+
variant screens, then refine that direction with \`generate-design\` or
|
|
353
|
+
\`edit-design\`.
|
|
354
|
+
|
|
355
|
+
## Design Quality Bar
|
|
356
|
+
|
|
357
|
+
- Before generating, name the concrete audience, the screen's primary job, and
|
|
358
|
+
the visual thesis. If the brief is vague, make a reasonable choice and state
|
|
359
|
+
it instead of producing a generic dashboard/landing-page default.
|
|
360
|
+
- For existing products, inspect the current screen, design system, tokens,
|
|
361
|
+
component language, or codebase context before inventing a new direction.
|
|
362
|
+
- Make each direction distinct in structure and behavior, not just palette.
|
|
363
|
+
Give every variant one memorable signature choice, then keep the surrounding
|
|
364
|
+
chrome disciplined.
|
|
365
|
+
- Treat copy, data, and imagery as design material. Use realistic domain
|
|
366
|
+
content and first-party/generated assets when images matter; avoid lorem
|
|
367
|
+
ipsum, vague SaaS filler, and decorative placeholder boxes.
|
|
368
|
+
- Build to a quiet quality floor: responsive desktop/mobile layout, visible
|
|
369
|
+
keyboard focus, useful loading/empty/error states for app UI, and reduced
|
|
370
|
+
motion support when custom motion is present.
|
|
371
|
+
- After broad generation or refinement, inspect the rendered Design surface or
|
|
372
|
+
a screenshot-capable host before calling it ready. Fix obvious hierarchy,
|
|
373
|
+
overflow, contrast, broken interaction, and placeholder-content issues first.
|
|
352
374
|
|
|
353
375
|
## Cross-App Use
|
|
354
376
|
|
|
@@ -382,6 +404,8 @@ name: visual-edit
|
|
|
382
404
|
description: >-
|
|
383
405
|
Open a running local app in Design overview mode as URL-backed iframe screens
|
|
384
406
|
for visual editing, flow review, duplication, and route-state exploration.
|
|
407
|
+
Use when the user asks to inspect, compare, or edit a real local app visually
|
|
408
|
+
in Design.
|
|
385
409
|
metadata:
|
|
386
410
|
visibility: exported
|
|
387
411
|
---
|
|
@@ -409,6 +433,28 @@ iframe-backed screens on the infinite canvas.
|
|
|
409
433
|
\`localhost:1234/onboarding/1\` means
|
|
410
434
|
\`http://localhost:1234/onboarding/1\`.
|
|
411
435
|
|
|
436
|
+
## Review Quality
|
|
437
|
+
|
|
438
|
+
- Treat the running app as the truth. Preserve its component language, tokens,
|
|
439
|
+
route state, and real content unless the user explicitly asks for a new visual
|
|
440
|
+
direction.
|
|
441
|
+
- Use multiple URL states to reveal meaningful UX moments: empty/loading/error
|
|
442
|
+
states, focused panels, modals, responsive breakpoints, and completed flow
|
|
443
|
+
steps when those matter to the review.
|
|
444
|
+
- For visual edits, compare before/after at the relevant viewport sizes and
|
|
445
|
+
check key hover/focus/scroll states when the app exposes them.
|
|
446
|
+
|
|
447
|
+
## Account And Sharing Model
|
|
448
|
+
|
|
449
|
+
- The \`/visual-edit\` entry route can open before the viewer signs in. Public
|
|
450
|
+
\`/design/:id\` editor links can also render read-only public designs without a
|
|
451
|
+
session.
|
|
452
|
+
- Do not attempt anonymous write actions. Bridge registration, design creation,
|
|
453
|
+
screen placement, generation, saving, and sharing are account-backed. If a
|
|
454
|
+
signed-out visitor wants to save or share, send them through the framework
|
|
455
|
+
sign-in return flow, then save or copy the design into that account before
|
|
456
|
+
opening the share dialog.
|
|
457
|
+
|
|
412
458
|
## Required Local Bridge
|
|
413
459
|
|
|
414
460
|
From the target app repo, make sure its dev server is running, then run:
|
|
@@ -3027,6 +3073,7 @@ interface SkillInstallMetadata {
|
|
|
3027
3073
|
contentHash: string;
|
|
3028
3074
|
mcpUrl: string;
|
|
3029
3075
|
installedAt: string;
|
|
3076
|
+
installCommand: string;
|
|
3030
3077
|
updateCommand: string;
|
|
3031
3078
|
planMode?: PlanInstallMode;
|
|
3032
3079
|
}
|
|
@@ -3443,30 +3490,48 @@ function writeSkillFolder(
|
|
|
3443
3490
|
bundle: SkillFolderBundle,
|
|
3444
3491
|
installedAt = new Date().toISOString(),
|
|
3445
3492
|
): void {
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
3451
|
-
fs.writeFileSync(target, content, "utf-8");
|
|
3452
|
-
}
|
|
3453
|
-
const metadata: SkillInstallMetadata = {
|
|
3454
|
-
schemaVersion: 1,
|
|
3455
|
-
source: "agent-native",
|
|
3456
|
-
appSkillId: bundle.appSkillId,
|
|
3457
|
-
displayName: bundle.displayName,
|
|
3458
|
-
skillName: bundle.skillName,
|
|
3459
|
-
contentHash: bundle.contentHash,
|
|
3460
|
-
mcpUrl: bundle.mcpUrl,
|
|
3461
|
-
installedAt,
|
|
3462
|
-
updateCommand: `npx @agent-native/core@latest skills update ${bundle.skillName}`,
|
|
3463
|
-
...(bundle.planMode ? { planMode: bundle.planMode } : {}),
|
|
3464
|
-
};
|
|
3465
|
-
fs.writeFileSync(
|
|
3466
|
-
path.join(dir, AGENT_NATIVE_SKILL_METADATA_FILE),
|
|
3467
|
-
`${JSON.stringify(metadata, null, 2)}\n`,
|
|
3468
|
-
"utf-8",
|
|
3493
|
+
const parent = path.dirname(dir);
|
|
3494
|
+
const tempDir = path.join(
|
|
3495
|
+
parent,
|
|
3496
|
+
`.${path.basename(dir)}.${process.pid}.${Date.now()}.tmp`,
|
|
3469
3497
|
);
|
|
3498
|
+
try {
|
|
3499
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
3500
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
3501
|
+
for (const [rel, content] of Object.entries(bundle.files)) {
|
|
3502
|
+
const target = path.join(tempDir, rel);
|
|
3503
|
+
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
3504
|
+
fs.writeFileSync(target, content, "utf-8");
|
|
3505
|
+
}
|
|
3506
|
+
const metadata: SkillInstallMetadata = {
|
|
3507
|
+
schemaVersion: 1,
|
|
3508
|
+
source: "agent-native",
|
|
3509
|
+
appSkillId: bundle.appSkillId,
|
|
3510
|
+
displayName: bundle.displayName,
|
|
3511
|
+
skillName: bundle.skillName,
|
|
3512
|
+
contentHash: bundle.contentHash,
|
|
3513
|
+
mcpUrl: bundle.mcpUrl,
|
|
3514
|
+
installedAt,
|
|
3515
|
+
installCommand: `npx @agent-native/core@latest skills add ${bundle.skillName}`,
|
|
3516
|
+
updateCommand: `npx @agent-native/core@latest skills update ${bundle.skillName}`,
|
|
3517
|
+
...(bundle.planMode ? { planMode: bundle.planMode } : {}),
|
|
3518
|
+
};
|
|
3519
|
+
fs.writeFileSync(
|
|
3520
|
+
path.join(tempDir, AGENT_NATIVE_SKILL_METADATA_FILE),
|
|
3521
|
+
`${JSON.stringify(metadata, null, 2)}\n`,
|
|
3522
|
+
"utf-8",
|
|
3523
|
+
);
|
|
3524
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
3525
|
+
fs.renameSync(tempDir, dir);
|
|
3526
|
+
} catch (error: any) {
|
|
3527
|
+
try {
|
|
3528
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
3529
|
+
} catch {}
|
|
3530
|
+
throw new Error(
|
|
3531
|
+
`Cannot write Agent Native skill folder ${dir}: ${error?.message ?? error}`,
|
|
3532
|
+
{ cause: error },
|
|
3533
|
+
);
|
|
3534
|
+
}
|
|
3470
3535
|
}
|
|
3471
3536
|
|
|
3472
3537
|
function isJsonRecord(value: unknown): value is Record<string, unknown> {
|
|
@@ -6182,7 +6247,9 @@ function runSkillsStatusOrUpdate(
|
|
|
6182
6247
|
const target = parsed.target ? ` for ${parsed.target}` : "";
|
|
6183
6248
|
const hint = isScaffoldGuidanceTarget(parsed.target)
|
|
6184
6249
|
? `Run this from a generated Agent Native app or workspace root.\n`
|
|
6185
|
-
:
|
|
6250
|
+
: update
|
|
6251
|
+
? `The update command only refreshes skill folders that already exist; it does not do first-time install, MCP registration, or auth. Run "npx @agent-native/core@latest skills add ${parsed.target ?? "visual-plan"}" for one-step setup.\n`
|
|
6252
|
+
: `Run "npx @agent-native/core@latest skills add ${parsed.target ?? "visual-plan"}" to install one.\n`;
|
|
6186
6253
|
process.stdout.write(
|
|
6187
6254
|
`No installed Agent Native skill copies found${target}.\n${hint}`,
|
|
6188
6255
|
);
|
|
@@ -81,6 +81,23 @@ function isProviderRateLimit(text: string, errorCode?: string): boolean {
|
|
|
81
81
|
);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
function isProviderAuthenticationError(
|
|
85
|
+
text: string,
|
|
86
|
+
errorCode?: string,
|
|
87
|
+
): boolean {
|
|
88
|
+
const code = normalizeErrorCode(errorCode);
|
|
89
|
+
const lower = text.toLowerCase();
|
|
90
|
+
return (
|
|
91
|
+
code === "authentication_error" ||
|
|
92
|
+
code === "http_401" ||
|
|
93
|
+
lower.includes("invalid x-api-key") ||
|
|
94
|
+
lower.includes("invalid api key") ||
|
|
95
|
+
lower.includes("incorrect api key") ||
|
|
96
|
+
lower.includes("api key is invalid") ||
|
|
97
|
+
(lower.includes("authentication_error") && lower.includes("api"))
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
84
101
|
export function normalizeChatError(
|
|
85
102
|
errorMessage: string,
|
|
86
103
|
errorCode?: string,
|
|
@@ -97,6 +114,14 @@ export function normalizeChatError(
|
|
|
97
114
|
};
|
|
98
115
|
}
|
|
99
116
|
|
|
117
|
+
if (isProviderAuthenticationError(text, errorCode)) {
|
|
118
|
+
return {
|
|
119
|
+
message:
|
|
120
|
+
"The model provider rejected the saved API key. Update the key in API Keys & Connections, then retry.",
|
|
121
|
+
details: text,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
100
125
|
if (/^Gateway error \(no detail; raw event:/i.test(text)) {
|
|
101
126
|
// The previous copy promised auto-recovery and suggested switching models,
|
|
102
127
|
// but neither helps for this code: the server already retried once and
|