@agent-native/core 0.83.0 → 0.84.0
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 +28 -0
- package/corpus/core/README.md +2 -2
- package/corpus/core/docs/content/cloneable-saas.mdx +2 -2
- 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/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/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/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/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/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/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/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/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/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/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/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/app/components/editor/BubbleToolbar.tsx +5 -5
- package/corpus/templates/content/app/global.css +6 -5
- package/corpus/templates/content/changelog/2026-06-30-editor-floating-toolbars-now-use-theme-aware-colors-in-light.md +6 -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/deploy/build.js +1 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/notifications/routes.d.ts +1 -1
- 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/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/faq.mdx +1 -1
- package/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
- 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/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/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/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/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/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/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/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/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/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/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
|
@@ -171,6 +171,7 @@ class AcpHarnessSession implements AgentHarnessSession {
|
|
|
171
171
|
private queue: AsyncEventQueue<AgentHarnessEvent> | null = null;
|
|
172
172
|
private readonly pendingPermissions = new Map<string, PendingPermission>();
|
|
173
173
|
private readonly toolTitles = new Map<string, string>();
|
|
174
|
+
private readonly toolInputs = new Map<string, Record<string, unknown>>();
|
|
174
175
|
private approvalCounter = 0;
|
|
175
176
|
private stderrTail = "";
|
|
176
177
|
private childExited = false;
|
|
@@ -358,12 +359,20 @@ class AcpHarnessSession implements AgentHarnessSession {
|
|
|
358
359
|
if (update?.sessionUpdate === "tool_call" && update.title) {
|
|
359
360
|
this.toolTitles.set(update.toolCallId, update.title);
|
|
360
361
|
}
|
|
362
|
+
if (
|
|
363
|
+
(update?.sessionUpdate === "tool_call" ||
|
|
364
|
+
update?.sessionUpdate === "tool_call_update") &&
|
|
365
|
+
update.rawInput
|
|
366
|
+
) {
|
|
367
|
+
this.toolInputs.set(update.toolCallId, update.rawInput);
|
|
368
|
+
}
|
|
361
369
|
// Updates that arrive without an active turn are history replay from
|
|
362
370
|
// loadSession; the transcript already contains them, so drop them.
|
|
363
371
|
if (!this.queue) return;
|
|
364
|
-
for (const event of acpUpdateToHarnessEvents(update,
|
|
365
|
-
this.toolTitles.get(id),
|
|
366
|
-
|
|
372
|
+
for (const event of acpUpdateToHarnessEvents(update, {
|
|
373
|
+
titleFor: (id) => this.toolTitles.get(id),
|
|
374
|
+
inputFor: (id) => this.toolInputs.get(id),
|
|
375
|
+
})) {
|
|
367
376
|
this.queue.push(event);
|
|
368
377
|
}
|
|
369
378
|
}
|
|
@@ -488,8 +497,17 @@ function messageToText(content: string | unknown[]): string {
|
|
|
488
497
|
*/
|
|
489
498
|
export function acpUpdateToHarnessEvents(
|
|
490
499
|
update: AcpSessionUpdate,
|
|
491
|
-
|
|
500
|
+
resolvers?:
|
|
501
|
+
| ((toolCallId: string) => string | undefined)
|
|
502
|
+
| {
|
|
503
|
+
titleFor?: (toolCallId: string) => string | undefined;
|
|
504
|
+
inputFor?: (toolCallId: string) => Record<string, unknown> | undefined;
|
|
505
|
+
},
|
|
492
506
|
): AgentHarnessEvent[] {
|
|
507
|
+
const titleFor =
|
|
508
|
+
typeof resolvers === "function" ? resolvers : resolvers?.titleFor;
|
|
509
|
+
const inputFor =
|
|
510
|
+
typeof resolvers === "function" ? undefined : resolvers?.inputFor;
|
|
493
511
|
switch (update.sessionUpdate) {
|
|
494
512
|
case "agent_message_chunk": {
|
|
495
513
|
const text = acpContentBlockToText(update.content);
|
|
@@ -517,6 +535,9 @@ export function acpUpdateToHarnessEvents(
|
|
|
517
535
|
type: "tool-done",
|
|
518
536
|
id: update.toolCallId,
|
|
519
537
|
name: update.title || titleFor?.(update.toolCallId) || "tool",
|
|
538
|
+
...((update.rawInput ?? inputFor?.(update.toolCallId))
|
|
539
|
+
? { input: update.rawInput ?? inputFor?.(update.toolCallId) }
|
|
540
|
+
: {}),
|
|
520
541
|
result: update.rawOutput ?? acpToolContentText(update.content),
|
|
521
542
|
});
|
|
522
543
|
}
|
|
@@ -531,6 +552,9 @@ export function acpUpdateToHarnessEvents(
|
|
|
531
552
|
type: "tool-done",
|
|
532
553
|
id: update.toolCallId,
|
|
533
554
|
name: update.title || titleFor?.(update.toolCallId) || "tool",
|
|
555
|
+
...((update.rawInput ?? inputFor?.(update.toolCallId))
|
|
556
|
+
? { input: update.rawInput ?? inputFor?.(update.toolCallId) }
|
|
557
|
+
: {}),
|
|
534
558
|
result: update.rawOutput ?? acpToolContentText(content),
|
|
535
559
|
});
|
|
536
560
|
}
|
|
@@ -448,6 +448,9 @@ export function aiSdkHarnessPartToEvents(part: any): AgentHarnessEvent[] {
|
|
|
448
448
|
type: "tool-done",
|
|
449
449
|
id: part.toolCallId ?? part.id,
|
|
450
450
|
name: part.toolName ?? part.name ?? "tool",
|
|
451
|
+
...(part.input !== undefined || part.args !== undefined
|
|
452
|
+
? { input: part.input ?? part.args }
|
|
453
|
+
: {}),
|
|
451
454
|
result: part.output ?? part.result,
|
|
452
455
|
});
|
|
453
456
|
break;
|
|
@@ -32,6 +32,9 @@ export function agentHarnessEventToAgentChatEvents(
|
|
|
32
32
|
{
|
|
33
33
|
type: "tool_done",
|
|
34
34
|
tool: event.name,
|
|
35
|
+
...(event.input !== undefined
|
|
36
|
+
? { input: normalizeToolInput(event.input) }
|
|
37
|
+
: {}),
|
|
35
38
|
result: stringifyResult(event.result),
|
|
36
39
|
...(event.mcpApp ? { mcpApp: event.mcpApp } : {}),
|
|
37
40
|
},
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Central model catalog for built-in agent engines.
|
|
3
3
|
*
|
|
4
|
-
* To bump the framework's managed default, update
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* in this one file.
|
|
4
|
+
* To bump the framework's managed default, update the Anthropic/OpenAI
|
|
5
|
+
* constants below. Builder gateway and OpenRouter IDs are derived here so the
|
|
6
|
+
* usual default bump stays in one file.
|
|
8
7
|
*/
|
|
9
8
|
|
|
10
9
|
// ---------------------------------------------------------------------------
|
|
@@ -15,6 +14,7 @@
|
|
|
15
14
|
// OpenAI https://developers.openai.com/api/docs/models/gpt-5.5
|
|
16
15
|
// https://developers.openai.com/api/docs/models/gpt-5.4
|
|
17
16
|
// Google https://ai.google.dev/gemini-api/docs/models
|
|
17
|
+
// OpenRouter https://openrouter.ai/api/v1/models
|
|
18
18
|
//
|
|
19
19
|
// Family defaults (used when a model id isn't listed explicitly):
|
|
20
20
|
// claude-* → 200_000 (Haiku 4.5 and earlier models)
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
// gemini-2* / gemini-3* → 1_048_576
|
|
23
23
|
// everything else → 128_000 (safe conservative floor)
|
|
24
24
|
//
|
|
25
|
-
// Note: Fable 5, Sonnet 4.6, and Opus 4.6/4.7/4.8 support 1M via the API
|
|
25
|
+
// Note: Fable 5, Sonnet 5, Sonnet 4.6, and Opus 4.6/4.7/4.8 support 1M via the API
|
|
26
26
|
// at standard prices.
|
|
27
27
|
// ---------------------------------------------------------------------------
|
|
28
28
|
|
|
@@ -31,6 +31,7 @@ const MODEL_CONTEXT_WINDOWS: Record<string, number> = {
|
|
|
31
31
|
"claude-fable-5": 1_000_000,
|
|
32
32
|
"claude-opus-4-8": 1_000_000,
|
|
33
33
|
"claude-opus-4-7": 1_000_000,
|
|
34
|
+
"claude-sonnet-5": 1_000_000,
|
|
34
35
|
"claude-sonnet-4-6": 1_000_000,
|
|
35
36
|
"claude-haiku-4-5": 200_000,
|
|
36
37
|
"claude-haiku-4-5-20251001": 200_000,
|
|
@@ -49,10 +50,12 @@ const MODEL_CONTEXT_WINDOWS: Record<string, number> = {
|
|
|
49
50
|
"anthropic/claude-fable-5": 1_000_000,
|
|
50
51
|
"anthropic/claude-opus-4.8": 1_000_000,
|
|
51
52
|
"anthropic/claude-opus-4.7": 1_000_000,
|
|
53
|
+
"anthropic/claude-sonnet-5": 1_000_000,
|
|
52
54
|
"anthropic/claude-sonnet-4.6": 1_000_000,
|
|
53
55
|
"openai/gpt-5.5": 1_050_000,
|
|
54
56
|
"openai/gpt-5.4": 1_050_000,
|
|
55
57
|
"google/gemini-2.5-flash": 1_048_576,
|
|
58
|
+
"z-ai/glm-5.2": 1_048_576,
|
|
56
59
|
|
|
57
60
|
// ── AI-SDK native OpenAI IDs ──────────────────────────────────────────────
|
|
58
61
|
"gpt-5.5": 1_050_000,
|
|
@@ -85,12 +88,13 @@ export function getContextWindowForModel(modelId: string): number {
|
|
|
85
88
|
// Family heuristics for unlisted model IDs
|
|
86
89
|
const id = modelId.toLowerCase();
|
|
87
90
|
|
|
88
|
-
// Anthropic Fable 5, Opus 4.x, and Sonnet 4.6 = 1M
|
|
91
|
+
// Anthropic Fable 5, Opus 4.x, Sonnet 5, and Sonnet 4.6 = 1M
|
|
89
92
|
if (
|
|
90
93
|
id === "claude-fable-5" ||
|
|
91
94
|
id.includes("claude-fable-5") ||
|
|
92
95
|
id.startsWith("claude-opus-4") ||
|
|
93
|
-
id
|
|
96
|
+
id.includes("claude-sonnet-5") ||
|
|
97
|
+
id.includes("claude-sonnet-4-6") ||
|
|
94
98
|
id.includes("claude-sonnet-4.6")
|
|
95
99
|
)
|
|
96
100
|
return 1_000_000;
|
|
@@ -110,10 +114,26 @@ export function getContextWindowForModel(modelId: string): number {
|
|
|
110
114
|
)
|
|
111
115
|
return 1_048_576;
|
|
112
116
|
|
|
117
|
+
// Z.ai GLM 5.x on OpenRouter — 1M context.
|
|
118
|
+
if (id.startsWith("glm-5") || id.includes("/glm-5")) return 1_048_576;
|
|
119
|
+
|
|
113
120
|
return DEFAULT_CONTEXT_WINDOW;
|
|
114
121
|
}
|
|
115
122
|
|
|
116
|
-
const
|
|
123
|
+
const ENABLE_CLAUDE_SONNET_5 = false;
|
|
124
|
+
|
|
125
|
+
export const CLAUDE_SONNET_MODEL_ID = ENABLE_CLAUDE_SONNET_5
|
|
126
|
+
? "claude-sonnet-5"
|
|
127
|
+
: "claude-sonnet-4-6";
|
|
128
|
+
export const CLAUDE_SONNET_MODEL_LABEL = ENABLE_CLAUDE_SONNET_5
|
|
129
|
+
? "Claude Sonnet 5"
|
|
130
|
+
: "Claude Sonnet 4.6";
|
|
131
|
+
|
|
132
|
+
const OPENROUTER_CLAUDE_SONNET_MODEL_ID = ENABLE_CLAUDE_SONNET_5
|
|
133
|
+
? "anthropic/claude-sonnet-5"
|
|
134
|
+
: "anthropic/claude-sonnet-4.6";
|
|
135
|
+
|
|
136
|
+
const ANTHROPIC_DEFAULT_MODEL_ID = CLAUDE_SONNET_MODEL_ID;
|
|
117
137
|
|
|
118
138
|
function builderGatewayModelId(model: string): string {
|
|
119
139
|
return model.replace(/\./g, "-");
|
|
@@ -138,8 +158,8 @@ export const AGENT_MODEL_CONFIG = {
|
|
|
138
158
|
defaultModel: FRAMEWORK_DEFAULT_BUILDER_MODEL,
|
|
139
159
|
supportedModels: [
|
|
140
160
|
"auto",
|
|
141
|
-
"claude-opus-4-
|
|
142
|
-
|
|
161
|
+
"claude-opus-4-8",
|
|
162
|
+
CLAUDE_SONNET_MODEL_ID,
|
|
143
163
|
"claude-haiku-4-5",
|
|
144
164
|
FRAMEWORK_DEFAULT_BUILDER_OPENAI_MODEL,
|
|
145
165
|
"gpt-5-4",
|
|
@@ -156,7 +176,7 @@ export const AGENT_MODEL_CONFIG = {
|
|
|
156
176
|
supportedModels: [
|
|
157
177
|
"claude-fable-5",
|
|
158
178
|
"claude-opus-4-8",
|
|
159
|
-
|
|
179
|
+
CLAUDE_SONNET_MODEL_ID,
|
|
160
180
|
"claude-haiku-4-5-20251001",
|
|
161
181
|
],
|
|
162
182
|
},
|
|
@@ -166,7 +186,7 @@ export const AGENT_MODEL_CONFIG = {
|
|
|
166
186
|
supportedModels: [
|
|
167
187
|
"claude-fable-5",
|
|
168
188
|
"claude-opus-4-8",
|
|
169
|
-
|
|
189
|
+
CLAUDE_SONNET_MODEL_ID,
|
|
170
190
|
"claude-haiku-4-5-20251001",
|
|
171
191
|
],
|
|
172
192
|
},
|
|
@@ -183,11 +203,12 @@ export const AGENT_MODEL_CONFIG = {
|
|
|
183
203
|
supportedModels: [
|
|
184
204
|
"anthropic/claude-fable-5",
|
|
185
205
|
"anthropic/claude-opus-4.8",
|
|
186
|
-
|
|
206
|
+
OPENROUTER_CLAUDE_SONNET_MODEL_ID,
|
|
187
207
|
FRAMEWORK_DEFAULT_OPENROUTER_MODEL,
|
|
188
208
|
"openai/gpt-5.4",
|
|
189
209
|
// Current stable Gemini on OpenRouter (2.5 Flash is GA)
|
|
190
210
|
"google/gemini-2.5-flash",
|
|
211
|
+
"z-ai/glm-5.2",
|
|
191
212
|
],
|
|
192
213
|
},
|
|
193
214
|
google: {
|
|
@@ -3134,7 +3134,13 @@ export async function runAgentLoop(opts: {
|
|
|
3134
3134
|
tool: toolCall.name,
|
|
3135
3135
|
input: toolCall.input as Record<string, string>,
|
|
3136
3136
|
});
|
|
3137
|
-
send({
|
|
3137
|
+
send({
|
|
3138
|
+
type: "tool_done",
|
|
3139
|
+
tool: toolCall.name,
|
|
3140
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3141
|
+
result,
|
|
3142
|
+
completedSideEffect: false,
|
|
3143
|
+
});
|
|
3138
3144
|
recordToolResult(result, false);
|
|
3139
3145
|
return {
|
|
3140
3146
|
type: "tool-result" as const,
|
|
@@ -3152,7 +3158,13 @@ export async function runAgentLoop(opts: {
|
|
|
3152
3158
|
tool: toolCall.name,
|
|
3153
3159
|
input: toolCall.input as Record<string, string>,
|
|
3154
3160
|
});
|
|
3155
|
-
send({
|
|
3161
|
+
send({
|
|
3162
|
+
type: "tool_done",
|
|
3163
|
+
tool: toolCall.name,
|
|
3164
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3165
|
+
result,
|
|
3166
|
+
completedSideEffect: false,
|
|
3167
|
+
});
|
|
3156
3168
|
recordToolResult(result, false);
|
|
3157
3169
|
return {
|
|
3158
3170
|
type: "tool-result" as const,
|
|
@@ -3172,7 +3184,14 @@ export async function runAgentLoop(opts: {
|
|
|
3172
3184
|
tool: toolCall.name,
|
|
3173
3185
|
input: toolCall.input as Record<string, string>,
|
|
3174
3186
|
});
|
|
3175
|
-
send({
|
|
3187
|
+
send({
|
|
3188
|
+
type: "tool_done",
|
|
3189
|
+
tool: toolCall.name,
|
|
3190
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3191
|
+
result,
|
|
3192
|
+
isError: true,
|
|
3193
|
+
completedSideEffect: false,
|
|
3194
|
+
});
|
|
3176
3195
|
recordToolResult(result, true);
|
|
3177
3196
|
return {
|
|
3178
3197
|
type: "tool-result" as const,
|
|
@@ -3247,7 +3266,13 @@ export async function runAgentLoop(opts: {
|
|
|
3247
3266
|
`Awaiting human approval to run "${toolCall.name}". This action did ` +
|
|
3248
3267
|
`NOT execute — a human must approve this specific call before it ` +
|
|
3249
3268
|
`can run. The turn is paused; do not retry.`;
|
|
3250
|
-
send({
|
|
3269
|
+
send({
|
|
3270
|
+
type: "tool_done",
|
|
3271
|
+
tool: toolCall.name,
|
|
3272
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3273
|
+
result,
|
|
3274
|
+
completedSideEffect: false,
|
|
3275
|
+
});
|
|
3251
3276
|
recordToolResult(result, false);
|
|
3252
3277
|
requestedActionStop ??= {
|
|
3253
3278
|
message: `Waiting for your approval to run ${toolCall.name}.`,
|
|
@@ -3280,7 +3305,13 @@ export async function runAgentLoop(opts: {
|
|
|
3280
3305
|
tool: toolCall.name,
|
|
3281
3306
|
input: toolCall.input as Record<string, string>,
|
|
3282
3307
|
});
|
|
3283
|
-
send({
|
|
3308
|
+
send({
|
|
3309
|
+
type: "tool_done",
|
|
3310
|
+
tool: toolCall.name,
|
|
3311
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3312
|
+
result,
|
|
3313
|
+
completedSideEffect: false,
|
|
3314
|
+
});
|
|
3284
3315
|
recordToolResult(result, false);
|
|
3285
3316
|
if (repeats >= 3) {
|
|
3286
3317
|
requestedActionStop ??= {
|
|
@@ -3338,7 +3369,13 @@ export async function runAgentLoop(opts: {
|
|
|
3338
3369
|
tool: toolCall.name,
|
|
3339
3370
|
input: toolCall.input as Record<string, string>,
|
|
3340
3371
|
});
|
|
3341
|
-
send({
|
|
3372
|
+
send({
|
|
3373
|
+
type: "tool_done",
|
|
3374
|
+
tool: toolCall.name,
|
|
3375
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3376
|
+
result,
|
|
3377
|
+
completedSideEffect: false,
|
|
3378
|
+
});
|
|
3342
3379
|
recordToolResult(result, false);
|
|
3343
3380
|
return {
|
|
3344
3381
|
type: "tool-result" as const,
|
|
@@ -3389,6 +3426,7 @@ export async function runAgentLoop(opts: {
|
|
|
3389
3426
|
send({
|
|
3390
3427
|
type: "tool_done",
|
|
3391
3428
|
tool: toolCall.name,
|
|
3429
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3392
3430
|
result,
|
|
3393
3431
|
...(actionEntry.chatUI ? { chatUI: actionEntry.chatUI } : {}),
|
|
3394
3432
|
});
|
|
@@ -3413,7 +3451,14 @@ export async function runAgentLoop(opts: {
|
|
|
3413
3451
|
tool: toolCall.name,
|
|
3414
3452
|
input: toolCall.input as Record<string, string>,
|
|
3415
3453
|
});
|
|
3416
|
-
send({
|
|
3454
|
+
send({
|
|
3455
|
+
type: "tool_done",
|
|
3456
|
+
tool: toolCall.name,
|
|
3457
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3458
|
+
result,
|
|
3459
|
+
isError: true,
|
|
3460
|
+
completedSideEffect: false,
|
|
3461
|
+
});
|
|
3417
3462
|
recordToolResult(result, true);
|
|
3418
3463
|
requestedActionStop ??= {
|
|
3419
3464
|
message:
|
|
@@ -3467,7 +3512,14 @@ export async function runAgentLoop(opts: {
|
|
|
3467
3512
|
toolCallSchemaError.error,
|
|
3468
3513
|
),
|
|
3469
3514
|
);
|
|
3470
|
-
send({
|
|
3515
|
+
send({
|
|
3516
|
+
type: "tool_done",
|
|
3517
|
+
tool: toolCall.name,
|
|
3518
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3519
|
+
result,
|
|
3520
|
+
isError: true,
|
|
3521
|
+
completedSideEffect: false,
|
|
3522
|
+
});
|
|
3471
3523
|
recordToolResult(result, true);
|
|
3472
3524
|
return {
|
|
3473
3525
|
type: "tool-result" as const,
|
|
@@ -3491,7 +3543,14 @@ export async function runAgentLoop(opts: {
|
|
|
3491
3543
|
rawToolInputError,
|
|
3492
3544
|
),
|
|
3493
3545
|
);
|
|
3494
|
-
send({
|
|
3546
|
+
send({
|
|
3547
|
+
type: "tool_done",
|
|
3548
|
+
tool: toolCall.name,
|
|
3549
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3550
|
+
result,
|
|
3551
|
+
isError: true,
|
|
3552
|
+
completedSideEffect: false,
|
|
3553
|
+
});
|
|
3495
3554
|
recordToolResult(result, true);
|
|
3496
3555
|
return {
|
|
3497
3556
|
type: "tool-result" as const,
|
|
@@ -3508,7 +3567,14 @@ export async function runAgentLoop(opts: {
|
|
|
3508
3567
|
!isPlanModeToolCallAllowed(toolCall.name, toolCall.input, actionEntry)
|
|
3509
3568
|
) {
|
|
3510
3569
|
const result = planModeBlockedMessage(toolCall.name);
|
|
3511
|
-
send({
|
|
3570
|
+
send({
|
|
3571
|
+
type: "tool_done",
|
|
3572
|
+
tool: toolCall.name,
|
|
3573
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3574
|
+
result,
|
|
3575
|
+
isError: true,
|
|
3576
|
+
completedSideEffect: false,
|
|
3577
|
+
});
|
|
3512
3578
|
recordToolResult(result, true);
|
|
3513
3579
|
return {
|
|
3514
3580
|
type: "tool-result" as const,
|
|
@@ -3586,6 +3652,14 @@ export async function runAgentLoop(opts: {
|
|
|
3586
3652
|
actionPromise
|
|
3587
3653
|
.then((zombieRaw: unknown) => {
|
|
3588
3654
|
const zombieMcp = isMcpActionResult(zombieRaw) ? zombieRaw : null;
|
|
3655
|
+
if (
|
|
3656
|
+
zombieMcp &&
|
|
3657
|
+
zombieMcp.raw &&
|
|
3658
|
+
typeof zombieMcp.raw === "object" &&
|
|
3659
|
+
(zombieMcp.raw as Record<string, unknown>).isError === true
|
|
3660
|
+
) {
|
|
3661
|
+
return;
|
|
3662
|
+
}
|
|
3589
3663
|
const zombieText = zombieMcp ? zombieMcp.text : zombieRaw;
|
|
3590
3664
|
const zombieStr =
|
|
3591
3665
|
typeof zombieText === "string"
|
|
@@ -3721,7 +3795,10 @@ export async function runAgentLoop(opts: {
|
|
|
3721
3795
|
send({
|
|
3722
3796
|
type: "tool_done",
|
|
3723
3797
|
tool: toolCall.name,
|
|
3798
|
+
input: toolCall.input as Record<string, unknown>,
|
|
3724
3799
|
result,
|
|
3800
|
+
...(isError ? { isError: true } : {}),
|
|
3801
|
+
...(isError ? { completedSideEffect: false } : {}),
|
|
3725
3802
|
...(mcpApp ? { mcpApp } : {}),
|
|
3726
3803
|
...(actionEntry.chatUI ? { chatUI: actionEntry.chatUI } : {}),
|
|
3727
3804
|
});
|
|
@@ -278,8 +278,17 @@ function getMessageRunId(message: any): string | undefined {
|
|
|
278
278
|
}
|
|
279
279
|
|
|
280
280
|
function messageContentIsEmpty(content: unknown): boolean {
|
|
281
|
-
if (
|
|
282
|
-
|
|
281
|
+
if (typeof content === "string") return content.trim().length === 0;
|
|
282
|
+
if (Array.isArray(content)) {
|
|
283
|
+
return !content.some((part: any) => {
|
|
284
|
+
if (!part || typeof part !== "object") return false;
|
|
285
|
+
if (part.type === "text") {
|
|
286
|
+
return typeof part.text === "string" && part.text.trim().length > 0;
|
|
287
|
+
}
|
|
288
|
+
return true;
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
return content == null;
|
|
283
292
|
}
|
|
284
293
|
|
|
285
294
|
function messageText(content: unknown): string {
|
|
@@ -790,7 +799,15 @@ export function mergeThreadDataForClientSave(
|
|
|
790
799
|
const idRewrites = new Map<string, string>();
|
|
791
800
|
|
|
792
801
|
for (const existingEntry of existingMessages) {
|
|
793
|
-
const
|
|
802
|
+
const existingMessage = getStoredMessage(existingEntry);
|
|
803
|
+
if (
|
|
804
|
+
existingMessage?.role === "assistant" &&
|
|
805
|
+
messageContentIsEmpty(existingMessage.content)
|
|
806
|
+
) {
|
|
807
|
+
continue;
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
const existingKeys = messageIdentityKeys(existingMessage);
|
|
794
811
|
const incomingIndex = incomingKeySets.findIndex(
|
|
795
812
|
(keys: Set<string>, index: number) =>
|
|
796
813
|
!usedIncoming.has(index) && existingKeys.some((key) => keys.has(key)),
|
|
@@ -813,7 +830,15 @@ export function mergeThreadDataForClientSave(
|
|
|
813
830
|
}
|
|
814
831
|
|
|
815
832
|
for (let index = 0; index < incomingMessages.length; index++) {
|
|
816
|
-
if (
|
|
833
|
+
if (usedIncoming.has(index)) continue;
|
|
834
|
+
const incomingMessage = getStoredMessage(incomingMessages[index]);
|
|
835
|
+
if (
|
|
836
|
+
incomingMessage?.role === "assistant" &&
|
|
837
|
+
messageContentIsEmpty(incomingMessage.content)
|
|
838
|
+
) {
|
|
839
|
+
continue;
|
|
840
|
+
}
|
|
841
|
+
nextMessages.push(incomingMessages[index]);
|
|
817
842
|
}
|
|
818
843
|
|
|
819
844
|
merged.messages = nextMessages.map((entry) =>
|