@agent-native/core 0.83.0 → 0.84.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +34 -0
- package/corpus/core/README.md +2 -2
- package/corpus/core/docs/content/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/evals.mdx +34 -12
- package/corpus/core/docs/content/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/ar-SA/evals.mdx +7 -0
- package/corpus/core/docs/content/locales/ar-SA/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/de-DE/evals.mdx +8 -0
- package/corpus/core/docs/content/locales/de-DE/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/es-ES/evals.mdx +8 -0
- package/corpus/core/docs/content/locales/es-ES/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/fr-FR/evals.mdx +8 -0
- package/corpus/core/docs/content/locales/fr-FR/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/hi-IN/evals.mdx +8 -0
- package/corpus/core/docs/content/locales/hi-IN/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/ja-JP/evals.mdx +7 -0
- package/corpus/core/docs/content/locales/ja-JP/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/ko-KR/evals.mdx +7 -0
- package/corpus/core/docs/content/locales/ko-KR/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/pt-BR/evals.mdx +8 -0
- package/corpus/core/docs/content/locales/pt-BR/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-CN/evals.mdx +7 -0
- package/corpus/core/docs/content/locales/zh-CN/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-TW/evals.mdx +7 -0
- package/corpus/core/docs/content/locales/zh-TW/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/template-chat.mdx +1 -1
- package/corpus/core/docs/content/template-chat.mdx +1 -1
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/engine/builtin.ts +1 -1
- package/corpus/core/src/agent/engine/output-tokens.ts +1 -1
- package/corpus/core/src/agent/harness/acp-adapter.ts +28 -4
- package/corpus/core/src/agent/harness/ai-sdk-adapter.ts +3 -0
- package/corpus/core/src/agent/harness/translate.ts +3 -0
- package/corpus/core/src/agent/harness/types.ts +1 -0
- package/corpus/core/src/agent/model-config.ts +34 -13
- package/corpus/core/src/agent/production-agent.ts +87 -10
- package/corpus/core/src/agent/thread-data-builder.ts +29 -4
- package/corpus/core/src/agent/tool-call-journal.ts +109 -48
- package/corpus/core/src/agent/types.ts +6 -1
- package/corpus/core/src/cli/design-connect.ts +106 -0
- package/corpus/core/src/cli/gateway-helpers.ts +17 -0
- package/corpus/core/src/cli/recap.ts +0 -2
- package/corpus/core/src/cli/skills.ts +54 -16
- package/corpus/core/src/cli/workspace-dev.ts +29 -5
- package/corpus/core/src/client/AssistantChat.tsx +89 -42
- package/corpus/core/src/client/DefaultSpinner.tsx +8 -1
- package/corpus/core/src/client/chat/message-components.tsx +49 -1
- package/corpus/core/src/client/chat/repo-helpers.ts +71 -0
- package/corpus/core/src/client/chat/run-recovery.tsx +15 -5
- package/corpus/core/src/client/components/ApiKeySettings.tsx +8 -8
- package/corpus/core/src/client/components/CodeRequiredDialog.tsx +26 -15
- package/corpus/core/src/client/components/MissingKeyCard.tsx +13 -6
- package/corpus/core/src/client/composer/TiptapComposer.tsx +4 -3
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +0 -1
- package/corpus/core/src/client/guided-questions.tsx +21 -27
- package/corpus/core/src/client/integrations/IntegrationCard.tsx +1 -1
- package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +1 -1
- package/corpus/core/src/client/onboarding/OnboardingBanner.tsx +2 -2
- package/corpus/core/src/client/onboarding/OnboardingPanel.tsx +23 -19
- package/corpus/core/src/client/resources/ResourceEditor.tsx +18 -10
- package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
- package/corpus/core/src/client/settings/SettingsPanel.tsx +8 -3
- package/corpus/core/src/client/settings/useBuilderStatus.ts +8 -41
- package/corpus/core/src/client/useProductionAgent.ts +6 -2
- package/corpus/core/src/deploy/build.ts +1 -1
- package/corpus/core/src/eval/define-eval.ts +4 -1
- package/corpus/core/src/eval/report.ts +23 -8
- package/corpus/core/src/eval/runner.ts +41 -6
- package/corpus/core/src/eval/types.ts +11 -0
- package/corpus/core/src/observability/traces.ts +3 -3
- package/corpus/core/src/onboarding/default-steps.ts +1 -1
- package/corpus/core/src/scripts/agent-engines/manage-agent-engine.ts +1 -1
- package/corpus/core/src/scripts/agent-engines/set-agent-engine.ts +1 -1
- package/corpus/core/src/server/agent-chat-plugin.ts +177 -81
- package/corpus/core/src/server/core-routes-plugin.ts +7 -1
- package/corpus/core/src/server/open-route.ts +59 -40
- package/corpus/core/src/shared/reasoning-effort.ts +2 -0
- package/corpus/core/src/sharing/access.ts +22 -2
- package/corpus/core/src/sharing/registry.ts +18 -0
- package/corpus/core/src/styles/agent-native.css +104 -20
- package/corpus/core/src/styles/rich-markdown-editor.css +11 -10
- package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +10 -10
- package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +10 -10
- package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +6 -5
- package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +9 -9
- package/corpus/templates/analytics/app/global.css +4 -0
- package/corpus/templates/analytics/app/lib/chart-theme.ts +13 -0
- package/corpus/templates/analytics/app/pages/adhoc/_shared/KpiChart.tsx +22 -24
- package/corpus/templates/analytics/changelog/2026-06-30-dashboard-charts-now-use-theme-aware-tooltip-and-grid-colors.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-30-fixed-ask-composer-spacing-so-the-chat-field-has-a-comfortab.md +6 -0
- package/corpus/templates/calendar/AGENTS.md +4 -0
- package/corpus/templates/calendar/actions/connect-google-calendar.ts +80 -0
- package/corpus/templates/calendar/changelog/2026-06-30-calendar-now-gives-the-agent-a-safe-google-connection-link-i.md +6 -0
- package/corpus/templates/calendar/server/plugins/agent-chat.ts +4 -0
- package/corpus/templates/content/AGENTS.md +9 -2
- package/corpus/templates/content/actions/_database-row-batch.ts +230 -0
- package/corpus/templates/content/actions/_database-utils.ts +17 -9
- package/corpus/templates/content/actions/_notion-action-utils.ts +26 -0
- package/corpus/templates/content/actions/connect-notion-status.ts +13 -4
- package/corpus/templates/content/actions/create-and-link-notion-page.ts +23 -0
- package/corpus/templates/content/actions/delete-database-items.ts +55 -0
- package/corpus/templates/content/actions/delete-document.ts +4 -4
- package/corpus/templates/content/actions/disconnect-notion.ts +16 -0
- package/corpus/templates/content/actions/duplicate-database-item.ts +1 -1
- package/corpus/templates/content/actions/duplicate-database-items.ts +191 -0
- package/corpus/templates/content/actions/link-notion-page.ts +10 -7
- package/corpus/templates/content/actions/list-notion-links.ts +3 -4
- package/corpus/templates/content/actions/pull-notion-page.ts +7 -9
- package/corpus/templates/content/actions/push-notion-page.ts +7 -9
- package/corpus/templates/content/actions/refresh-notion-sync-status.ts +24 -0
- package/corpus/templates/content/actions/resolve-notion-sync-conflict.ts +23 -0
- package/corpus/templates/content/actions/search-notion-pages.ts +67 -0
- package/corpus/templates/content/actions/unlink-notion-page.ts +23 -0
- package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +5 -5
- package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +27 -34
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +16 -13
- package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +10 -10
- package/corpus/templates/content/app/components/editor/NotionConflictBanner.tsx +1 -1
- package/corpus/templates/content/app/components/editor/NotionSyncBar.tsx +18 -9
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +27 -34
- package/corpus/templates/content/app/components/editor/database/navigation-state.ts +10 -4
- package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +32 -17
- package/corpus/templates/content/app/global.css +6 -5
- package/corpus/templates/content/app/hooks/use-content-database.ts +35 -0
- package/corpus/templates/content/app/hooks/use-notion.ts +108 -99
- package/corpus/templates/content/changelog/2026-06-30-editor-floating-toolbars-now-use-theme-aware-colors-in-light.md +6 -0
- package/corpus/templates/content/package.json +3 -0
- package/corpus/templates/content/parity/README.md +69 -0
- package/corpus/templates/content/parity/eval-scenarios.ts +118 -0
- package/corpus/templates/content/parity/exceptions.allowlist.ts +17 -0
- package/corpus/templates/content/parity/matrix.md +28 -0
- package/corpus/templates/content/parity/matrix.ts +606 -0
- package/corpus/templates/content/parity/matrix.types.ts +42 -0
- package/corpus/templates/content/parity/parity-evals.eval.ts +4 -0
- package/corpus/templates/content/parity/render-matrix.ts +90 -0
- package/corpus/templates/content/parity/scenario-to-eval.ts +57 -0
- package/corpus/templates/content/shared/api.ts +11 -0
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +6 -1
- package/corpus/templates/design/actions/add-localhost-screens.ts +63 -8
- package/corpus/templates/design/actions/apply-motion-edit.ts +12 -46
- package/corpus/templates/design/actions/list-design-native-assets.ts +2 -1
- package/corpus/templates/design/actions/migrate-board-objects-to-file.ts +49 -1
- package/corpus/templates/design/actions/navigate.ts +3 -12
- package/corpus/templates/design/actions/open-visual-edit.ts +341 -0
- package/corpus/templates/design/actions/view-screen.ts +1 -1
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +1 -1
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +345 -14
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +71 -91
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +25 -27
- package/corpus/templates/design/app/components/design/DeviceFrame.tsx +1 -1
- package/corpus/templates/design/app/components/design/DrawOverlay.tsx +2 -2
- package/corpus/templates/design/app/components/design/EditPanel.tsx +1111 -570
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +162 -32
- package/corpus/templates/design/app/components/design/MotionDock.tsx +268 -240
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1038 -150
- package/corpus/templates/design/app/components/design/QuestionFlow.tsx +1 -1
- package/corpus/templates/design/app/components/design/ReviewPanel.tsx +81 -102
- package/corpus/templates/design/app/components/design/StatesPanel.tsx +6 -6
- package/corpus/templates/design/app/components/design/TokensPanel.tsx +11 -11
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +9 -7
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +1129 -155
- package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +130 -37
- package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +24 -11
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +184 -162
- package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +137 -79
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +13 -13
- package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +8 -8
- package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +2 -2
- package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +4 -4
- package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +3 -3
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +13 -7
- package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +14 -11
- package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +4 -4
- package/corpus/templates/design/app/components/design/inspector/index.ts +2 -0
- package/corpus/templates/design/app/components/design/types.ts +19 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +61 -78
- package/corpus/templates/design/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/design/app/components/layout/Layout.tsx +3 -2
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +0 -2
- package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +5 -4
- package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +1 -1
- package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +2 -2
- package/corpus/templates/design/app/global.css +56 -0
- package/corpus/templates/design/app/hooks/use-agent-generating.ts +4 -5
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +6 -7
- package/corpus/templates/design/app/hooks/use-question-flow.ts +3 -2
- package/corpus/templates/design/app/hooks/useAgentEditRequest.ts +6 -4
- package/corpus/templates/design/app/i18n/zh-TW.ts +5 -14
- package/corpus/templates/design/app/i18n-data.ts +63 -188
- package/corpus/templates/design/app/lib/agent-chat.ts +13 -0
- package/corpus/templates/design/app/pages/DesignEditor.tsx +1428 -384
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +9 -5
- package/corpus/templates/design/app/pages/DesignSystems.tsx +2 -2
- package/corpus/templates/design/app/pages/Index.tsx +49 -26
- package/corpus/templates/design/app/pages/NotFound.tsx +25 -8
- package/corpus/templates/design/app/pages/VisualEdit.tsx +17 -5
- package/corpus/templates/design/app/routes/examples.tsx +1 -7
- package/corpus/templates/design/app/routes/templates.tsx +7 -4
- package/corpus/templates/design/changelog/2026-06-30-board-shapes-and-auto-layout-controls-are-clearer.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-component-selections-now-use-purple-component-chrome-and-sho.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-constraints-now-stay-tucked-into-a-compact-inspector-preview.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-creating-a-component-now-opens-in-a-compact-inspector-popove.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-cards-no-longer-show-legacy-project-type-badges.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-chat-now-keeps-new-turns-in-the-visible-design-agent-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-editor-panels-now-keep-their-compact-text-sizing-cons.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-no-longer-shows-the-connected-local-code-warning-bann.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-now-opens-to-the-files-panel-unless-a-generation-is-a.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-opens-with-a-cleaner-empty-canvas-and-loading-preview.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-tools-use-simpler-less-decorative-icons.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-dragging-absolute-elements-no-longer-shows-coordinate-labels.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-fixed-all-screens-opening-too-zoomed-in-by-default.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-fixed-the-public-design-assets-sidebar-so-native-components-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-fixed-the-screen-overview-board-so-empty-board-space-no-long.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-full-view-screens-can-now-scroll-while-remaining-editable.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-inspector-element-headers-show-the-selected-html-tag-and-the.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-inspector-inputs-stay-compact-across-desktop-breakpoints.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-layers-can-be-multi-selected-from-the-canvas-and-edited-toge.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-local-visual-edit-links-can-edit-localhost-frames-without-si.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-localhost-visual-edit-frames-can-now-be-selected-and-edited.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-marquee-selection-now-works-inside-screens-multi-selected-la.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-motion-is-now-available-from-the-persistent-left-rail-and-th.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-motion-timeline-collapse-and-reopen-animations-feel-smoother.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-multi-select-outlines-now-stay-consistent-across-all-screens.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-new-board-shapes-now-start-with-neutral-gray-styling.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-new-designs-open-into-a-steadier-loading-state-before-the-ed.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-new-designs-show-a-loading-state-during-handoff-and-keep-edi.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-public-visual-edit-design-links-now-open-directly-instead-of.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-removed-the-confusing-states-section-from-the-design-editor-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-removed-the-templates-gallery-from-design-navigation.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-share-stays-visible-as-soon-as-editable-designs-load.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-signed-out-save-and-share-controls-use-simpler-labels-and-op.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-text-added-on-the-canvas-now-focuses-cleanly-with-the-right-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-design-editor-loading-skeleton-is-simpler-and-its-bottom.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-design-editor-loading-skeleton-now-follows-the-current-t.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-design-inspector-no-longer-shows-child-layout-controls-o.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-design-inspector-no-longer-shows-the-ask-ai-section-abov.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-design-review-panel-no-longer-shows-a-separate-inline-au.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-empty-designs-page-now-focuses-on-a-single-primary-new-d.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-layers-panel-header-stays-as-layers-while-multiple-items.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-missing-design-screen-now-uses-a-neutral-back-button.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-motion-timeline-now-closes-without-squeezing-the-canvas-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-new-design-connect-ai-setup-now-lines-up-with-the-compos.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-screen-overview-board-now-blends-into-the-canvas-and-new.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-drops-now-show-screen-guides.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-layers-now-keep-a-transparent-backdrop-and-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-layers-now-select-reliably-from-all-screens.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-visual-edit-can-open-and-refresh-localhost-screens-in-one-au.md +6 -0
- package/corpus/templates/design/e2e/helpers.ts +15 -4
- package/corpus/templates/design/server/db/index.ts +52 -0
- package/corpus/templates/design/server/plugins/agent-chat.ts +5 -0
- package/corpus/templates/design/server/plugins/auth.ts +1 -0
- package/corpus/templates/design/server/plugins/core-routes.ts +4 -0
- package/corpus/templates/design/shared/board-file.ts +380 -5
- package/corpus/templates/design/shared/board-objects.ts +2 -2
- package/corpus/templates/design/shared/code-layer.ts +50 -6
- package/corpus/templates/design/shared/motion-compiler.ts +27 -0
- package/corpus/templates/macros/app/components/DailyProgress.tsx +41 -37
- package/corpus/templates/macros/app/components/ExerciseCard.tsx +2 -2
- package/corpus/templates/macros/app/components/MealCard.tsx +2 -2
- package/corpus/templates/macros/app/components/VoiceDictation.tsx +1 -1
- package/corpus/templates/macros/app/components/WeeklyCaloriesChart.tsx +1 -1
- package/corpus/templates/macros/app/components/WeightCard.tsx +2 -2
- package/corpus/templates/macros/app/components/WeightTracker.tsx +1 -1
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +1 -1
- package/corpus/templates/macros/app/routes/_index.tsx +5 -5
- package/corpus/templates/macros/app/routes/analytics.tsx +1 -1
- package/corpus/templates/macros/changelog/2026-06-30-dashboard-loading-and-chart-surfaces-now-use-theme-aware-col.md +6 -0
- package/corpus/templates/mail/app/components/email/ComposeBubbleToolbar.tsx +14 -11
- package/corpus/templates/mail/app/global.css +3 -2
- package/corpus/templates/mail/changelog/2026-06-30-compose-floating-toolbars-now-use-theme-aware-colors-in-ligh.md +6 -0
- package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -2
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +3 -3
- package/corpus/templates/slides/app/global.css +10 -0
- package/corpus/templates/slides/app/pages/Index.tsx +55 -51
- package/corpus/templates/slides/changelog/2026-06-30-deck-thumbnails-collapse-cleanly-to-one-column-when-the-chat.md +6 -0
- package/dist/agent/engine/anthropic-engine.d.ts +2 -2
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts +2 -2
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builtin.js +1 -1
- package/dist/agent/engine/builtin.js.map +1 -1
- package/dist/agent/engine/output-tokens.js +1 -1
- package/dist/agent/engine/output-tokens.js.map +1 -1
- package/dist/agent/harness/acp-adapter.d.ts +4 -1
- package/dist/agent/harness/acp-adapter.d.ts.map +1 -1
- package/dist/agent/harness/acp-adapter.js +19 -2
- package/dist/agent/harness/acp-adapter.js.map +1 -1
- package/dist/agent/harness/ai-sdk-adapter.d.ts.map +1 -1
- package/dist/agent/harness/ai-sdk-adapter.js +3 -0
- package/dist/agent/harness/ai-sdk-adapter.js.map +1 -1
- package/dist/agent/harness/translate.d.ts.map +1 -1
- package/dist/agent/harness/translate.js +3 -0
- package/dist/agent/harness/translate.js.map +1 -1
- package/dist/agent/harness/types.d.ts +1 -0
- package/dist/agent/harness/types.d.ts.map +1 -1
- package/dist/agent/harness/types.js.map +1 -1
- package/dist/agent/model-config.d.ts +21 -20
- package/dist/agent/model-config.d.ts.map +1 -1
- package/dist/agent/model-config.js +31 -13
- package/dist/agent/model-config.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +85 -10
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +27 -6
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/agent/tool-call-journal.d.ts +11 -9
- package/dist/agent/tool-call-journal.d.ts.map +1 -1
- package/dist/agent/tool-call-journal.js +92 -40
- package/dist/agent/tool-call-journal.js.map +1 -1
- package/dist/agent/types.d.ts +5 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +84 -0
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/cli/gateway-helpers.d.ts +4 -0
- package/dist/cli/gateway-helpers.d.ts.map +1 -1
- package/dist/cli/gateway-helpers.js +9 -0
- package/dist/cli/gateway-helpers.js.map +1 -1
- package/dist/cli/recap.d.ts.map +1 -1
- package/dist/cli/recap.js +0 -2
- package/dist/cli/recap.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +54 -16
- package/dist/cli/skills.js.map +1 -1
- package/dist/cli/workspace-dev.d.ts.map +1 -1
- package/dist/cli/workspace-dev.js +33 -6
- package/dist/cli/workspace-dev.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +72 -26
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/DefaultSpinner.d.ts.map +1 -1
- package/dist/client/DefaultSpinner.js +8 -1
- package/dist/client/DefaultSpinner.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +7 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +37 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/repo-helpers.d.ts +1 -0
- package/dist/client/chat/repo-helpers.d.ts.map +1 -1
- package/dist/client/chat/repo-helpers.js +59 -0
- package/dist/client/chat/repo-helpers.js.map +1 -1
- package/dist/client/chat/run-recovery.d.ts.map +1 -1
- package/dist/client/chat/run-recovery.js +4 -4
- package/dist/client/chat/run-recovery.js.map +1 -1
- package/dist/client/components/ApiKeySettings.js +8 -8
- package/dist/client/components/ApiKeySettings.js.map +1 -1
- package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
- package/dist/client/components/CodeRequiredDialog.js +24 -15
- package/dist/client/components/CodeRequiredDialog.js.map +1 -1
- package/dist/client/components/MissingKeyCard.d.ts.map +1 -1
- package/dist/client/components/MissingKeyCard.js +11 -6
- package/dist/client/components/MissingKeyCard.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +4 -3
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/guided-questions.d.ts.map +1 -1
- package/dist/client/guided-questions.js +6 -6
- package/dist/client/guided-questions.js.map +1 -1
- package/dist/client/integrations/IntegrationCard.js +1 -1
- package/dist/client/integrations/IntegrationCard.js.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.js +1 -1
- package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
- package/dist/client/onboarding/OnboardingBanner.js +2 -2
- package/dist/client/onboarding/OnboardingBanner.js.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.js +23 -19
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
- package/dist/client/resources/ResourceEditor.js +13 -10
- package/dist/client/resources/ResourceEditor.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +2 -1
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +8 -3
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +6 -38
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/useProductionAgent.d.ts +2 -1
- package/dist/client/useProductionAgent.d.ts.map +1 -1
- package/dist/client/useProductionAgent.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/build.js +1 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/eval/define-eval.d.ts.map +1 -1
- package/dist/eval/define-eval.js +2 -1
- package/dist/eval/define-eval.js.map +1 -1
- package/dist/eval/report.d.ts.map +1 -1
- package/dist/eval/report.js +19 -4
- package/dist/eval/report.js.map +1 -1
- package/dist/eval/runner.d.ts.map +1 -1
- package/dist/eval/runner.js +38 -6
- package/dist/eval/runner.js.map +1 -1
- package/dist/eval/types.d.ts +11 -0
- package/dist/eval/types.d.ts.map +1 -1
- package/dist/eval/types.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +5 -5
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js.map +1 -1
- package/dist/onboarding/default-steps.js +1 -1
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.js +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.js +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +3 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +134 -72
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +3 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +4 -1
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/open-route.d.ts +9 -0
- package/dist/server/open-route.d.ts.map +1 -1
- package/dist/server/open-route.js +48 -38
- package/dist/server/open-route.js.map +1 -1
- package/dist/shared/reasoning-effort.js +3 -0
- package/dist/shared/reasoning-effort.js.map +1 -1
- package/dist/sharing/access.d.ts.map +1 -1
- package/dist/sharing/access.js +18 -2
- package/dist/sharing/access.js.map +1 -1
- package/dist/sharing/registry.d.ts +10 -0
- package/dist/sharing/registry.d.ts.map +1 -1
- package/dist/sharing/registry.js.map +1 -1
- package/dist/styles/agent-native.css +104 -20
- package/dist/styles/rich-markdown-editor.css +11 -10
- package/docs/content/cloneable-saas.mdx +2 -2
- package/docs/content/evals.mdx +34 -12
- package/docs/content/faq.mdx +1 -1
- package/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
- package/docs/content/locales/ar-SA/evals.mdx +7 -0
- package/docs/content/locales/ar-SA/faq.mdx +1 -1
- package/docs/content/locales/ar-SA/template-chat.mdx +1 -1
- package/docs/content/locales/de-DE/cloneable-saas.mdx +2 -2
- package/docs/content/locales/de-DE/evals.mdx +8 -0
- package/docs/content/locales/de-DE/faq.mdx +1 -1
- package/docs/content/locales/de-DE/template-chat.mdx +1 -1
- package/docs/content/locales/es-ES/cloneable-saas.mdx +2 -2
- package/docs/content/locales/es-ES/evals.mdx +8 -0
- package/docs/content/locales/es-ES/faq.mdx +1 -1
- package/docs/content/locales/es-ES/template-chat.mdx +1 -1
- package/docs/content/locales/fr-FR/cloneable-saas.mdx +2 -2
- package/docs/content/locales/fr-FR/evals.mdx +8 -0
- package/docs/content/locales/fr-FR/faq.mdx +1 -1
- package/docs/content/locales/fr-FR/template-chat.mdx +1 -1
- package/docs/content/locales/hi-IN/cloneable-saas.mdx +2 -2
- package/docs/content/locales/hi-IN/evals.mdx +8 -0
- package/docs/content/locales/hi-IN/faq.mdx +1 -1
- package/docs/content/locales/hi-IN/template-chat.mdx +1 -1
- package/docs/content/locales/ja-JP/cloneable-saas.mdx +2 -2
- package/docs/content/locales/ja-JP/evals.mdx +7 -0
- package/docs/content/locales/ja-JP/faq.mdx +1 -1
- package/docs/content/locales/ja-JP/template-chat.mdx +1 -1
- package/docs/content/locales/ko-KR/cloneable-saas.mdx +2 -2
- package/docs/content/locales/ko-KR/evals.mdx +7 -0
- package/docs/content/locales/ko-KR/faq.mdx +1 -1
- package/docs/content/locales/ko-KR/template-chat.mdx +1 -1
- package/docs/content/locales/pt-BR/cloneable-saas.mdx +2 -2
- package/docs/content/locales/pt-BR/evals.mdx +8 -0
- package/docs/content/locales/pt-BR/faq.mdx +1 -1
- package/docs/content/locales/pt-BR/template-chat.mdx +1 -1
- package/docs/content/locales/zh-CN/cloneable-saas.mdx +2 -2
- package/docs/content/locales/zh-CN/evals.mdx +7 -0
- package/docs/content/locales/zh-CN/faq.mdx +1 -1
- package/docs/content/locales/zh-CN/template-chat.mdx +1 -1
- package/docs/content/locales/zh-TW/cloneable-saas.mdx +2 -2
- package/docs/content/locales/zh-TW/evals.mdx +7 -0
- package/docs/content/locales/zh-TW/faq.mdx +1 -1
- package/docs/content/locales/zh-TW/template-chat.mdx +1 -1
- package/docs/content/template-chat.mdx +1 -1
- package/package.json +1 -1
- package/corpus/templates/content/server/routes/api/notion/disconnect.post.ts +0 -12
- package/corpus/templates/design/app/components/design/LocalSourceEditBanner.tsx +0 -157
- package/corpus/templates/design/app/lib/design-templates.ts +0 -1305
- package/corpus/templates/design/app/pages/Templates.tsx +0 -279
|
@@ -12,12 +12,13 @@ export function MissingKeyCard({
|
|
|
12
12
|
return (
|
|
13
13
|
<div
|
|
14
14
|
style={{
|
|
15
|
-
border: "1px solid
|
|
15
|
+
border: "1px solid hsl(var(--border))",
|
|
16
16
|
borderRadius: 8,
|
|
17
17
|
padding: "24px 28px",
|
|
18
18
|
maxWidth: 420,
|
|
19
19
|
margin: "32px auto",
|
|
20
|
-
background: "
|
|
20
|
+
background: "hsl(var(--card))",
|
|
21
|
+
color: "hsl(var(--card-foreground))",
|
|
21
22
|
textAlign: "center",
|
|
22
23
|
}}
|
|
23
24
|
>
|
|
@@ -25,13 +26,19 @@ export function MissingKeyCard({
|
|
|
25
26
|
style={{
|
|
26
27
|
fontSize: 14,
|
|
27
28
|
fontWeight: 600,
|
|
28
|
-
color: "
|
|
29
|
+
color: "hsl(var(--card-foreground))",
|
|
29
30
|
marginBottom: 8,
|
|
30
31
|
}}
|
|
31
32
|
>
|
|
32
33
|
{label}
|
|
33
34
|
</div>
|
|
34
|
-
<p
|
|
35
|
+
<p
|
|
36
|
+
style={{
|
|
37
|
+
fontSize: 13,
|
|
38
|
+
color: "hsl(var(--muted-foreground))",
|
|
39
|
+
margin: "0 0 16px",
|
|
40
|
+
}}
|
|
41
|
+
>
|
|
35
42
|
{message}
|
|
36
43
|
</p>
|
|
37
44
|
<a
|
|
@@ -41,8 +48,8 @@ export function MissingKeyCard({
|
|
|
41
48
|
padding: "8px 16px",
|
|
42
49
|
fontSize: 13,
|
|
43
50
|
fontWeight: 500,
|
|
44
|
-
color: "
|
|
45
|
-
background: "
|
|
51
|
+
color: "hsl(var(--primary-foreground))",
|
|
52
|
+
background: "hsl(var(--primary))",
|
|
46
53
|
borderRadius: 6,
|
|
47
54
|
textDecoration: "none",
|
|
48
55
|
}}
|
|
@@ -750,6 +750,7 @@ const FRIENDLY_MODEL_NAMES: Record<string, string> = {
|
|
|
750
750
|
"qwen3-coder": "Qwen3 Coder",
|
|
751
751
|
"kimi-k2-5": "Kimi K2.5",
|
|
752
752
|
"deepseek-v3-1": "DeepSeek v3.1",
|
|
753
|
+
"z-ai/glm-5.2": "GLM 5.2",
|
|
753
754
|
};
|
|
754
755
|
|
|
755
756
|
export const MODEL_SELECTOR_POPOVER_STYLE = {
|
|
@@ -759,13 +760,13 @@ export const MODEL_SELECTOR_POPOVER_STYLE = {
|
|
|
759
760
|
|
|
760
761
|
function friendlyModelName(model: string): string {
|
|
761
762
|
if (FRIENDLY_MODEL_NAMES[model]) return FRIENDLY_MODEL_NAMES[model];
|
|
762
|
-
// Claude: claude-{tier}-{major}-
|
|
763
|
+
// Claude: claude-{tier}-{major}[-minor][-dateYYYYMMDD] → Tier Major[.Minor]
|
|
763
764
|
const claude = model.match(
|
|
764
|
-
/^claude-(opus|sonnet|haiku)-(\d+)
|
|
765
|
+
/^claude-(opus|sonnet|haiku)-(\d+)(?:-(\d+))?(?:-\d{8,})?$/,
|
|
765
766
|
);
|
|
766
767
|
if (claude) {
|
|
767
768
|
const tier = claude[1][0].toUpperCase() + claude[1].slice(1);
|
|
768
|
-
return `${tier} ${claude[2]}
|
|
769
|
+
return `${tier} ${claude[2]}${claude[3] ? `.${claude[3]}` : ""}`;
|
|
769
770
|
}
|
|
770
771
|
// GPT: gpt-{major}-{minor}[-suffix] or gpt-{major}.{minor}[-suffix]
|
|
771
772
|
if (model.startsWith("gpt-")) {
|
|
@@ -596,7 +596,6 @@ function ExtensionSortMenu({
|
|
|
596
596
|
<DropdownMenuRadioItem value="alphabetical">
|
|
597
597
|
{copy.alphabetical}
|
|
598
598
|
</DropdownMenuRadioItem>
|
|
599
|
-
<DropdownMenuSeparator />
|
|
600
599
|
<DropdownMenuRadioItem value="manual">
|
|
601
600
|
{copy.manualOrder}
|
|
602
601
|
</DropdownMenuRadioItem>
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
IconCheck,
|
|
3
3
|
IconChevronRight,
|
|
4
|
-
IconHelpCircle,
|
|
5
4
|
IconUpload,
|
|
6
5
|
IconX,
|
|
7
6
|
} from "@tabler/icons-react";
|
|
@@ -433,8 +432,8 @@ export function GuidedQuestionFlow({
|
|
|
433
432
|
questions,
|
|
434
433
|
onSubmit,
|
|
435
434
|
onSkip,
|
|
436
|
-
title = "
|
|
437
|
-
description = "
|
|
435
|
+
title = "Before I generate",
|
|
436
|
+
description = "Use Other for custom details, or let the agent decide.",
|
|
438
437
|
skipLabel = "Skip",
|
|
439
438
|
submitLabel = "Continue",
|
|
440
439
|
className,
|
|
@@ -465,28 +464,23 @@ export function GuidedQuestionFlow({
|
|
|
465
464
|
return (
|
|
466
465
|
<div
|
|
467
466
|
className={cn(
|
|
468
|
-
"flex h-full w-full items-center justify-center bg-background text-foreground",
|
|
467
|
+
"guided-question-flow flex h-full w-full items-center justify-center bg-background text-foreground",
|
|
469
468
|
className,
|
|
470
469
|
)}
|
|
471
470
|
>
|
|
472
|
-
<div className="flex max-h-full w-full max-w-3xl flex-col px-
|
|
473
|
-
<div className="
|
|
474
|
-
<
|
|
475
|
-
|
|
476
|
-
</
|
|
477
|
-
|
|
478
|
-
<
|
|
479
|
-
{
|
|
480
|
-
</
|
|
481
|
-
|
|
482
|
-
<p className="mt-1 max-w-2xl text-sm leading-5 text-muted-foreground">
|
|
483
|
-
{description}
|
|
484
|
-
</p>
|
|
485
|
-
)}
|
|
486
|
-
</div>
|
|
471
|
+
<div className="guided-question-flow-inner flex max-h-full w-full max-w-3xl flex-col px-3 py-4">
|
|
472
|
+
<div className="guided-question-flow-header mb-4 min-w-0">
|
|
473
|
+
<h2 className="guided-question-flow-title text-lg font-semibold leading-tight tracking-normal text-foreground">
|
|
474
|
+
{title}
|
|
475
|
+
</h2>
|
|
476
|
+
{description && (
|
|
477
|
+
<p className="guided-question-flow-description mt-1 max-w-2xl text-sm leading-5 text-muted-foreground">
|
|
478
|
+
{description}
|
|
479
|
+
</p>
|
|
480
|
+
)}
|
|
487
481
|
</div>
|
|
488
482
|
|
|
489
|
-
<div className="min-h-0 flex-1
|
|
483
|
+
<div className="guided-question-flow-list min-h-0 flex-1 overflow-y-auto pe-1">
|
|
490
484
|
{questions.map((question, index) => (
|
|
491
485
|
<QuestionCard
|
|
492
486
|
key={question.id}
|
|
@@ -501,7 +495,7 @@ export function GuidedQuestionFlow({
|
|
|
501
495
|
))}
|
|
502
496
|
</div>
|
|
503
497
|
|
|
504
|
-
<div className="mt-
|
|
498
|
+
<div className="guided-question-flow-footer mt-4 flex shrink-0 items-center justify-between gap-3 border-t border-border pt-3">
|
|
505
499
|
<div className="flex items-center gap-1.5">
|
|
506
500
|
{questions.map((question, index) => (
|
|
507
501
|
<span
|
|
@@ -553,9 +547,9 @@ function QuestionCard({
|
|
|
553
547
|
onSubmitAnswer: (value: unknown) => void;
|
|
554
548
|
}) {
|
|
555
549
|
return (
|
|
556
|
-
<section className="
|
|
557
|
-
<div className="mb-
|
|
558
|
-
<div className="
|
|
550
|
+
<section className="guided-question-card border-t border-border/60 py-3 first:border-t-0 first:pt-0 last:pb-0">
|
|
551
|
+
<div className="mb-2 flex gap-2.5">
|
|
552
|
+
<div className="guided-question-index mt-0.5 min-w-4 text-xs font-medium tabular-nums text-muted-foreground">
|
|
559
553
|
{index + 1}
|
|
560
554
|
</div>
|
|
561
555
|
<div className="min-w-0">
|
|
@@ -670,8 +664,8 @@ function TextOptions({
|
|
|
670
664
|
const allowOther = question.allowOther !== false;
|
|
671
665
|
|
|
672
666
|
return (
|
|
673
|
-
<div className="space-y-
|
|
674
|
-
<div className="
|
|
667
|
+
<div className="space-y-2.5">
|
|
668
|
+
<div className="guided-question-flow-options grid grid-cols-1 gap-2">
|
|
675
669
|
{options.map((option) => (
|
|
676
670
|
<OptionButton
|
|
677
671
|
key={`${option.value}:${option.label}`}
|
|
@@ -724,7 +718,7 @@ function OptionButton({
|
|
|
724
718
|
onClick={onClick}
|
|
725
719
|
aria-pressed={selected}
|
|
726
720
|
className={cn(
|
|
727
|
-
"group flex min-h-
|
|
721
|
+
"group flex min-h-11 min-w-0 cursor-pointer items-start gap-2 rounded-md border px-2.5 py-2 text-start transition-colors",
|
|
728
722
|
selected
|
|
729
723
|
? "border-primary bg-primary/10 text-foreground ring-2 ring-primary/25"
|
|
730
724
|
: "border-border bg-muted/30 text-muted-foreground hover:border-muted-foreground/50 hover:bg-muted/45 hover:text-foreground",
|
|
@@ -53,8 +53,8 @@ const styles: Record<string, React.CSSProperties> = {
|
|
|
53
53
|
width: "100%",
|
|
54
54
|
padding: "8px 12px",
|
|
55
55
|
border: "none",
|
|
56
|
-
borderBottom: "1px solid
|
|
57
|
-
background: "
|
|
56
|
+
borderBottom: "1px solid hsl(var(--border) / 0.7)",
|
|
57
|
+
background: "hsl(var(--primary) / 0.06)",
|
|
58
58
|
color: "inherit",
|
|
59
59
|
fontSize: 12,
|
|
60
60
|
cursor: "pointer",
|
|
@@ -749,9 +749,9 @@ function buttonPrimary(primary: boolean | undefined): React.CSSProperties {
|
|
|
749
749
|
borderRadius: 6,
|
|
750
750
|
border: primary
|
|
751
751
|
? "1px solid transparent"
|
|
752
|
-
: "1px solid
|
|
753
|
-
background: primary ? "
|
|
754
|
-
color: primary ? "
|
|
752
|
+
: "1px solid hsl(var(--border) / 0.8)",
|
|
753
|
+
background: primary ? "hsl(var(--primary))" : "hsl(var(--muted) / 0.4)",
|
|
754
|
+
color: primary ? "hsl(var(--primary-foreground))" : "inherit",
|
|
755
755
|
fontSize: 12,
|
|
756
756
|
fontWeight: 500,
|
|
757
757
|
cursor: "pointer",
|
|
@@ -761,9 +761,9 @@ function buttonPrimary(primary: boolean | undefined): React.CSSProperties {
|
|
|
761
761
|
function buttonDisabled(primary: boolean | undefined): React.CSSProperties {
|
|
762
762
|
return {
|
|
763
763
|
...buttonPrimary(primary),
|
|
764
|
-
border: "1px solid
|
|
765
|
-
background:
|
|
766
|
-
color: "
|
|
764
|
+
border: "1px solid hsl(var(--border) / 0.6)",
|
|
765
|
+
background: "hsl(var(--muted) / 0.35)",
|
|
766
|
+
color: "hsl(var(--muted-foreground))",
|
|
767
767
|
cursor: "not-allowed",
|
|
768
768
|
};
|
|
769
769
|
}
|
|
@@ -792,8 +792,8 @@ function badgeStyle(
|
|
|
792
792
|
|
|
793
793
|
const styles: Record<string, React.CSSProperties> = {
|
|
794
794
|
root: {
|
|
795
|
-
borderBottom: "1px solid
|
|
796
|
-
background: "
|
|
795
|
+
borderBottom: "1px solid hsl(var(--border) / 0.7)",
|
|
796
|
+
background: "hsl(var(--muted) / 0.25)",
|
|
797
797
|
fontSize: 12,
|
|
798
798
|
display: "flex",
|
|
799
799
|
flexDirection: "column",
|
|
@@ -804,7 +804,7 @@ const styles: Record<string, React.CSSProperties> = {
|
|
|
804
804
|
display: "flex",
|
|
805
805
|
alignItems: "center",
|
|
806
806
|
justifyContent: "space-between",
|
|
807
|
-
borderBottom: "1px solid
|
|
807
|
+
borderBottom: "1px solid hsl(var(--border) / 0.7)",
|
|
808
808
|
background: "rgba(34,197,94,0.04)",
|
|
809
809
|
fontSize: 12,
|
|
810
810
|
},
|
|
@@ -915,7 +915,7 @@ const styles: Record<string, React.CSSProperties> = {
|
|
|
915
915
|
width: 16,
|
|
916
916
|
height: 16,
|
|
917
917
|
borderRadius: "50%",
|
|
918
|
-
border: "1px solid
|
|
918
|
+
border: "1px solid hsl(var(--border))",
|
|
919
919
|
},
|
|
920
920
|
cardBody: {
|
|
921
921
|
paddingBlock: "0 10px",
|
|
@@ -937,9 +937,9 @@ const styles: Record<string, React.CSSProperties> = {
|
|
|
937
937
|
},
|
|
938
938
|
method: {
|
|
939
939
|
padding: "8px 10px",
|
|
940
|
-
border: "1px solid
|
|
940
|
+
border: "1px solid hsl(var(--border) / 0.65)",
|
|
941
941
|
borderRadius: 6,
|
|
942
|
-
background: "
|
|
942
|
+
background: "hsl(var(--card) / 0.55)",
|
|
943
943
|
display: "flex",
|
|
944
944
|
flexDirection: "column",
|
|
945
945
|
gap: 6,
|
|
@@ -967,8 +967,8 @@ const styles: Record<string, React.CSSProperties> = {
|
|
|
967
967
|
gap: 8,
|
|
968
968
|
padding: "7px 8px",
|
|
969
969
|
borderRadius: 6,
|
|
970
|
-
border: "1px solid
|
|
971
|
-
background: "
|
|
970
|
+
border: "1px solid hsl(var(--border) / 0.7)",
|
|
971
|
+
background: "hsl(var(--muted) / 0.35)",
|
|
972
972
|
color: "inherit",
|
|
973
973
|
cursor: "pointer",
|
|
974
974
|
fontSize: 11,
|
|
@@ -996,8 +996,8 @@ const styles: Record<string, React.CSSProperties> = {
|
|
|
996
996
|
padding: "6px 8px",
|
|
997
997
|
fontSize: 12,
|
|
998
998
|
borderRadius: 5,
|
|
999
|
-
border: "1px solid
|
|
1000
|
-
background: "
|
|
999
|
+
border: "1px solid hsl(var(--input))",
|
|
1000
|
+
background: "hsl(var(--background))",
|
|
1001
1001
|
color: "inherit",
|
|
1002
1002
|
outline: "none",
|
|
1003
1003
|
boxSizing: "border-box" as const,
|
|
@@ -1007,13 +1007,17 @@ const styles: Record<string, React.CSSProperties> = {
|
|
|
1007
1007
|
padding: "6px 8px",
|
|
1008
1008
|
fontSize: 12,
|
|
1009
1009
|
borderRadius: 5,
|
|
1010
|
-
border: "1px solid
|
|
1011
|
-
background: "
|
|
1010
|
+
border: "1px solid hsl(var(--input))",
|
|
1011
|
+
background: "hsl(var(--background))",
|
|
1012
1012
|
color: "inherit",
|
|
1013
1013
|
outline: "none",
|
|
1014
1014
|
boxSizing: "border-box" as const,
|
|
1015
1015
|
},
|
|
1016
|
-
methodHint: {
|
|
1016
|
+
methodHint: {
|
|
1017
|
+
margin: 0,
|
|
1018
|
+
fontSize: 11,
|
|
1019
|
+
color: "hsl(var(--muted-foreground))",
|
|
1020
|
+
},
|
|
1017
1021
|
errText: { margin: 0, fontSize: 11, color: "#f87171" },
|
|
1018
1022
|
footer: {
|
|
1019
1023
|
padding: "0 12px 10px",
|
|
@@ -11,6 +11,10 @@ import React, {
|
|
|
11
11
|
} from "react";
|
|
12
12
|
import { Markdown } from "tiptap-markdown";
|
|
13
13
|
|
|
14
|
+
import {
|
|
15
|
+
CLAUDE_SONNET_MODEL_ID,
|
|
16
|
+
CLAUDE_SONNET_MODEL_LABEL,
|
|
17
|
+
} from "../../agent/model-config.js";
|
|
14
18
|
import {
|
|
15
19
|
type ParsedFrontmatter,
|
|
16
20
|
getRemoteAgentIdFromPath,
|
|
@@ -189,7 +193,9 @@ function FrontmatterBar({
|
|
|
189
193
|
<option value="inherit">Default model</option>
|
|
190
194
|
<option value="claude-fable-5">Claude Fable 5</option>
|
|
191
195
|
<option value="claude-opus-4-8">Claude Opus 4.8</option>
|
|
192
|
-
<option value=
|
|
196
|
+
<option value={CLAUDE_SONNET_MODEL_ID}>
|
|
197
|
+
{CLAUDE_SONNET_MODEL_LABEL}
|
|
198
|
+
</option>
|
|
193
199
|
<option value="claude-haiku-4-5-20251001">Claude Haiku 4.5</option>
|
|
194
200
|
</select>
|
|
195
201
|
) : null}
|
|
@@ -665,7 +671,7 @@ function InlineBubbleToolbar({ editor }: { editor: any }) {
|
|
|
665
671
|
onClick={handleSetLink}
|
|
666
672
|
style={{
|
|
667
673
|
fontSize: 11,
|
|
668
|
-
color: "
|
|
674
|
+
color: "hsl(var(--primary))",
|
|
669
675
|
padding: "2px 6px",
|
|
670
676
|
fontWeight: 500,
|
|
671
677
|
background: "none",
|
|
@@ -689,7 +695,7 @@ function InlineBubbleToolbar({ editor }: { editor: any }) {
|
|
|
689
695
|
style={{
|
|
690
696
|
width: 1,
|
|
691
697
|
height: 16,
|
|
692
|
-
background: "
|
|
698
|
+
background: "hsl(var(--border))",
|
|
693
699
|
margin: "0 2px",
|
|
694
700
|
}}
|
|
695
701
|
/>
|
|
@@ -1437,28 +1443,30 @@ const editorStyles = `
|
|
|
1437
1443
|
.re-bubble-toolbar {
|
|
1438
1444
|
display: flex;
|
|
1439
1445
|
align-items: center;
|
|
1440
|
-
background: hsl(
|
|
1446
|
+
background: hsl(var(--popover));
|
|
1447
|
+
color: hsl(var(--popover-foreground));
|
|
1448
|
+
border: 1px solid hsl(var(--border));
|
|
1441
1449
|
border-radius: 6px;
|
|
1442
1450
|
padding: 3px;
|
|
1443
|
-
box-shadow: 0 4px 16px rgb(0 0 0 / 0.
|
|
1451
|
+
box-shadow: 0 4px 16px rgb(0 0 0 / 0.12);
|
|
1444
1452
|
}
|
|
1445
1453
|
.re-bubble-btn {
|
|
1446
1454
|
padding: 3px 6px;
|
|
1447
1455
|
border-radius: 4px;
|
|
1448
1456
|
font-size: 12px;
|
|
1449
|
-
color:
|
|
1457
|
+
color: hsl(var(--muted-foreground));
|
|
1450
1458
|
background: none;
|
|
1451
1459
|
border: none;
|
|
1452
1460
|
cursor: pointer;
|
|
1453
1461
|
line-height: 1;
|
|
1454
1462
|
}
|
|
1455
1463
|
.re-bubble-btn:hover {
|
|
1456
|
-
background:
|
|
1457
|
-
color:
|
|
1464
|
+
background: hsl(var(--accent));
|
|
1465
|
+
color: hsl(var(--accent-foreground));
|
|
1458
1466
|
}
|
|
1459
1467
|
.re-bubble-btn--active {
|
|
1460
|
-
background:
|
|
1461
|
-
color:
|
|
1468
|
+
background: hsl(var(--accent));
|
|
1469
|
+
color: hsl(var(--accent-foreground));
|
|
1462
1470
|
}
|
|
1463
1471
|
|
|
1464
1472
|
/* Slash command menu */
|
|
@@ -22,6 +22,10 @@ import React, {
|
|
|
22
22
|
useMemo,
|
|
23
23
|
} from "react";
|
|
24
24
|
|
|
25
|
+
import {
|
|
26
|
+
CLAUDE_SONNET_MODEL_ID,
|
|
27
|
+
CLAUDE_SONNET_MODEL_LABEL,
|
|
28
|
+
} from "../../agent/model-config.js";
|
|
25
29
|
import { serializeFrontmatter } from "../../resources/metadata.js";
|
|
26
30
|
import { sendToAgentChat } from "../agent-chat.js";
|
|
27
31
|
import { agentNativePath } from "../api-path.js";
|
|
@@ -90,7 +94,7 @@ const AGENT_MODEL_OPTIONS = [
|
|
|
90
94
|
{ value: "inherit", label: "Default model" },
|
|
91
95
|
{ value: "claude-fable-5", label: "Claude Fable 5" },
|
|
92
96
|
{ value: "claude-opus-4-8", label: "Claude Opus 4.8" },
|
|
93
|
-
{ value:
|
|
97
|
+
{ value: CLAUDE_SONNET_MODEL_ID, label: CLAUDE_SONNET_MODEL_LABEL },
|
|
94
98
|
{ value: "claude-haiku-4-5-20251001", label: "Claude Haiku 4.5" },
|
|
95
99
|
] as const;
|
|
96
100
|
|
|
@@ -499,12 +499,13 @@ function ManualSetupCard({
|
|
|
499
499
|
// ─── LLM helpers ────────────────────────────────────────────────────────────
|
|
500
500
|
|
|
501
501
|
function friendlyModelName(model: string): string {
|
|
502
|
+
if (model === "z-ai/glm-5.2") return "GLM 5.2";
|
|
502
503
|
const claude = model.match(
|
|
503
|
-
/^claude-(opus|sonnet|haiku)-(\d+)
|
|
504
|
+
/^claude-(opus|sonnet|haiku)-(\d+)(?:-(\d+))?(?:-\d{8,})?$/,
|
|
504
505
|
);
|
|
505
506
|
if (claude) {
|
|
506
507
|
const tier = claude[1][0].toUpperCase() + claude[1].slice(1);
|
|
507
|
-
return `${tier} ${claude[2]}
|
|
508
|
+
return `${tier} ${claude[2]}${claude[3] ? `.${claude[3]}` : ""}`;
|
|
508
509
|
}
|
|
509
510
|
if (model.startsWith("gpt-")) return `GPT-${model.slice(4)}`;
|
|
510
511
|
if (/^o\d/.test(model)) return model;
|
|
@@ -718,6 +719,10 @@ function LLMSectionInner({
|
|
|
718
719
|
envVar,
|
|
719
720
|
builderConnected,
|
|
720
721
|
});
|
|
722
|
+
const manualSetupHint =
|
|
723
|
+
selectedEngine === "ai-sdk:openrouter"
|
|
724
|
+
? "Provide an OpenRouter key to use OpenRouter models like GLM 5.2."
|
|
725
|
+
: "Choose your AI provider and model.";
|
|
721
726
|
|
|
722
727
|
const engineChanged =
|
|
723
728
|
selectedEngine !== currentEngine || selectedModel !== currentModel;
|
|
@@ -889,7 +894,7 @@ function LLMSectionInner({
|
|
|
889
894
|
/>
|
|
890
895
|
{!builderConnected && (
|
|
891
896
|
<ManualSetupCard
|
|
892
|
-
hint=
|
|
897
|
+
hint={manualSetupHint}
|
|
893
898
|
docsUrl={PROVIDER_DOCS[selectedEngine]}
|
|
894
899
|
sourceBadge={sourceBadge}
|
|
895
900
|
docsLabel="Get an API key"
|
|
@@ -188,7 +188,6 @@ export interface BuilderConnectFlow {
|
|
|
188
188
|
|
|
189
189
|
const POLL_INTERVAL_MS = 2000;
|
|
190
190
|
const POLL_TIMEOUT_MS = 5 * 60 * 1000;
|
|
191
|
-
const POPUP_CLOSED_CONFIRMATION_GRACE_MS = 5000;
|
|
192
191
|
const CALLBACK_SUCCESS_STATUS_RETRY_MS = 500;
|
|
193
192
|
const CALLBACK_SUCCESS_STATUS_RETRIES = 10;
|
|
194
193
|
const BUILDER_CONNECT_PARAM = "_an_connect";
|
|
@@ -447,15 +446,6 @@ function delay(ms: number): Promise<void> {
|
|
|
447
446
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
448
447
|
}
|
|
449
448
|
|
|
450
|
-
function isPopupClosed(opened: Window | null): boolean {
|
|
451
|
-
if (!opened) return false;
|
|
452
|
-
try {
|
|
453
|
-
return opened.closed === true;
|
|
454
|
-
} catch {
|
|
455
|
-
return false;
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
|
|
459
449
|
function isTrustedBuilderConnectMessageOrigin(origin: string): boolean {
|
|
460
450
|
if (typeof window !== "undefined" && origin === window.location.origin) {
|
|
461
451
|
return true;
|
|
@@ -693,8 +683,6 @@ export function useBuilderConnectFlow(
|
|
|
693
683
|
const clickTrackingSource =
|
|
694
684
|
startOptions?.trackingSource ?? trackingSource;
|
|
695
685
|
const clickTrackingFlow = startOptions?.trackingFlow ?? trackingFlow;
|
|
696
|
-
let openedPopup: Window | null = null;
|
|
697
|
-
let popupClosedAt: number | null = null;
|
|
698
686
|
connectStartedAtRef.current = started;
|
|
699
687
|
setConnecting(true);
|
|
700
688
|
setError(null);
|
|
@@ -730,7 +718,6 @@ export function useBuilderConnectFlow(
|
|
|
730
718
|
source: clickTrackingSource,
|
|
731
719
|
flow: clickTrackingFlow,
|
|
732
720
|
});
|
|
733
|
-
openedPopup = opened;
|
|
734
721
|
if (!opened) {
|
|
735
722
|
// Agent Native Desktop handles the popup in Electron and reports
|
|
736
723
|
// null to the embedded webview, so null is not a blocker here.
|
|
@@ -783,7 +770,6 @@ export function useBuilderConnectFlow(
|
|
|
783
770
|
);
|
|
784
771
|
})();
|
|
785
772
|
} else {
|
|
786
|
-
openedPopup = opened;
|
|
787
773
|
showBuilderConnectPopupPlaceholder(opened);
|
|
788
774
|
void (async () => {
|
|
789
775
|
const s = await fetchStatus();
|
|
@@ -884,25 +870,6 @@ export function useBuilderConnectFlow(
|
|
|
884
870
|
setError(
|
|
885
871
|
`Couldn't save Builder credentials: ${s.connectError.message}. Try again or contact support.`,
|
|
886
872
|
);
|
|
887
|
-
} else if (isPopupClosed(openedPopup)) {
|
|
888
|
-
popupClosedAt ??= Date.now();
|
|
889
|
-
if (Date.now() - popupClosedAt > POPUP_CLOSED_CONFIRMATION_GRACE_MS) {
|
|
890
|
-
stopPoll();
|
|
891
|
-
connectStartedAtRef.current = null;
|
|
892
|
-
setConnecting(false);
|
|
893
|
-
trackEvent("builder connect failed", {
|
|
894
|
-
feature: "builder",
|
|
895
|
-
stage: "client",
|
|
896
|
-
reason: "popup_closed_without_status",
|
|
897
|
-
source: clickTrackingSource,
|
|
898
|
-
flow:
|
|
899
|
-
cleanTrackingParam(clickTrackingFlow) ??
|
|
900
|
-
inferBuilderConnectTrackingFlow(clickTrackingSource),
|
|
901
|
-
});
|
|
902
|
-
setError(
|
|
903
|
-
"Builder finished, but this workspace couldn't confirm the saved credentials. Refresh this page or try Connect Builder.io again.",
|
|
904
|
-
);
|
|
905
|
-
}
|
|
906
873
|
} else if (Date.now() - started > POLL_TIMEOUT_MS) {
|
|
907
874
|
stopPoll();
|
|
908
875
|
connectStartedAtRef.current = null;
|
|
@@ -972,7 +939,6 @@ export function useBuilderConnectFlow(
|
|
|
972
939
|
)
|
|
973
940
|
? s?.connectError
|
|
974
941
|
: null;
|
|
975
|
-
stopPoll();
|
|
976
942
|
setHasFetchedStatus(true);
|
|
977
943
|
if (s) {
|
|
978
944
|
setConfigured(false);
|
|
@@ -983,13 +949,14 @@ export function useBuilderConnectFlow(
|
|
|
983
949
|
statusConnectUrlAtRef.current = nextConnectUrl ? Date.now() : null;
|
|
984
950
|
setOrgName(s.orgName ?? null);
|
|
985
951
|
}
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
952
|
+
if (connectError) {
|
|
953
|
+
stopPoll();
|
|
954
|
+
connectStartedAtRef.current = null;
|
|
955
|
+
setConnecting(false);
|
|
956
|
+
setError(
|
|
957
|
+
`Couldn't save Builder credentials: ${connectError.message}. Try again or contact support.`,
|
|
958
|
+
);
|
|
959
|
+
}
|
|
993
960
|
return;
|
|
994
961
|
}
|
|
995
962
|
stopPoll();
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { useState, useCallback, useRef } from "react";
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
AgentMessage,
|
|
5
|
+
AgentChatEvent,
|
|
6
|
+
AgentToolInput,
|
|
7
|
+
} from "../agent/types.js";
|
|
4
8
|
import { agentNativePath } from "./api-path.js";
|
|
5
9
|
import { formatChatErrorText } from "./error-format.js";
|
|
6
10
|
|
|
@@ -10,7 +14,7 @@ export interface ProductionAgentMessage {
|
|
|
10
14
|
content: string;
|
|
11
15
|
toolCalls?: Array<{
|
|
12
16
|
tool: string;
|
|
13
|
-
input:
|
|
17
|
+
input: AgentToolInput;
|
|
14
18
|
result?: string;
|
|
15
19
|
}>;
|
|
16
20
|
}
|
|
@@ -1135,7 +1135,7 @@ async function getHandler() {
|
|
|
1135
1135
|
headers: {
|
|
1136
1136
|
"Access-Control-Allow-Origin": "*",
|
|
1137
1137
|
"Access-Control-Allow-Methods": "GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS",
|
|
1138
|
-
"Access-Control-Allow-Headers": "Content-Type,Authorization,X-Requested-With,X-Request-Source,X-Agent-Native-CSRF,X-Agent-Native-Embed-Target",
|
|
1138
|
+
"Access-Control-Allow-Headers": "Content-Type,Authorization,X-Requested-With,X-Request-Source,X-Agent-Native-CSRF,X-User-Timezone,X-Agent-Native-Tool-Bridge,X-Agent-Native-Tool-Id,X-Agent-Native-Frontend,X-Agent-Native-Embed-Target",
|
|
1139
1139
|
},
|
|
1140
1140
|
});
|
|
1141
1141
|
}
|
|
@@ -35,7 +35,10 @@ export function defineEval(spec: Eval): Eval {
|
|
|
35
35
|
if (!spec.input || typeof spec.input.prompt !== "string") {
|
|
36
36
|
throw new Error(`defineEval("${spec.name}"): \`input.prompt\` is required`);
|
|
37
37
|
}
|
|
38
|
-
if (
|
|
38
|
+
if (
|
|
39
|
+
(!Array.isArray(spec.scorers) || spec.scorers.length === 0) &&
|
|
40
|
+
!spec.skipReason
|
|
41
|
+
) {
|
|
39
42
|
throw new Error(
|
|
40
43
|
`defineEval("${spec.name}"): at least one scorer is required`,
|
|
41
44
|
);
|
|
@@ -27,13 +27,19 @@ export function formatReport(report: EvalRunReport): string {
|
|
|
27
27
|
lines.push(" ─────");
|
|
28
28
|
|
|
29
29
|
for (const row of report.results) {
|
|
30
|
-
const mark = row.passed ? "✓" : "✗";
|
|
30
|
+
const mark = row.status === "skipped" ? "-" : row.passed ? "✓" : "✗";
|
|
31
31
|
lines.push("");
|
|
32
|
-
|
|
33
|
-
` ${mark} ${row.eval} (
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
if (row.status === "skipped") {
|
|
33
|
+
lines.push(` ${mark} ${row.eval} (skipped)`);
|
|
34
|
+
lines.push(` reason: ${row.skipReason ?? "No reason provided"}`);
|
|
35
|
+
continue;
|
|
36
|
+
} else {
|
|
37
|
+
lines.push(
|
|
38
|
+
` ${mark} ${row.eval} (avg ${pct(row.avgScore)}, threshold ${pct(
|
|
39
|
+
row.threshold,
|
|
40
|
+
)})`,
|
|
41
|
+
);
|
|
42
|
+
}
|
|
37
43
|
if (row.error) {
|
|
38
44
|
lines.push(` ⚠ run error: ${row.error}`);
|
|
39
45
|
}
|
|
@@ -50,9 +56,18 @@ export function formatReport(report: EvalRunReport): string {
|
|
|
50
56
|
|
|
51
57
|
lines.push("");
|
|
52
58
|
lines.push(" ─────");
|
|
53
|
-
const
|
|
59
|
+
const skipped = report.skipped ?? 0;
|
|
60
|
+
const executedTotal = report.total - skipped;
|
|
61
|
+
const executedPassed = report.passed - skipped;
|
|
62
|
+
const verdict =
|
|
63
|
+
executedTotal === 0 && skipped > 0
|
|
64
|
+
? "SKIPPED"
|
|
65
|
+
: report.failed === 0
|
|
66
|
+
? "PASS"
|
|
67
|
+
: "FAIL";
|
|
54
68
|
lines.push(
|
|
55
|
-
` ${verdict}: ${
|
|
69
|
+
` ${verdict}: ${executedPassed}/${executedTotal} evals passed` +
|
|
70
|
+
(skipped > 0 ? `, ${skipped} skipped` : "") +
|
|
56
71
|
(report.failed > 0 ? `, ${report.failed} below threshold` : ""),
|
|
57
72
|
);
|
|
58
73
|
lines.push("");
|