@agent-native/core 0.129.1 → 0.130.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/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +78 -0
- package/corpus/core/docs/content/cloneable-saas.mdx +114 -0
- package/corpus/core/docs/content/creating-templates.mdx +28 -2
- package/corpus/core/docs/content/syncing-template-changes.mdx +7 -0
- package/corpus/core/docs/content/template-clips-developers.mdx +12 -5
- package/corpus/core/docs/content/template-dispatch-developers.mdx +1 -1
- package/corpus/core/docs/content/template-dispatch.mdx +1 -1
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/action-ui.ts +1 -0
- package/corpus/core/src/action.ts +5 -1
- package/corpus/core/src/agent/engine/ai-sdk-engine.ts +15 -5
- package/corpus/core/src/agent/harness/runner.ts +5 -0
- package/corpus/core/src/agent/production-agent.ts +33 -0
- package/corpus/core/src/agent/run-loop-with-resume.ts +5 -0
- package/corpus/core/src/agent/run-manager.ts +126 -1
- package/corpus/core/src/agent/thread-data-builder.ts +47 -2
- package/corpus/core/src/agent/types.ts +2 -0
- package/corpus/core/src/chat-threads/store.ts +4 -5
- package/corpus/core/src/cli/create.ts +1139 -65
- package/corpus/core/src/cli/design-connect.ts +3 -7
- package/corpus/core/src/cli/index.ts +5 -3
- package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +83 -47
- package/corpus/core/src/client/AssistantChat.tsx +27 -16
- package/corpus/core/src/client/agent-chat-adapter.ts +24 -0
- package/corpus/core/src/client/blocks/library/wireframe-kit.tsx +17 -2
- package/corpus/core/src/client/chat/index.ts +1 -0
- package/corpus/core/src/client/chat/message-components.tsx +104 -1
- package/corpus/core/src/client/chat/run-recovery.tsx +15 -3
- package/corpus/core/src/client/chat/widgets/DataTableWidget.tsx +10 -29
- package/corpus/core/src/client/chat/widgets/WorkspaceFileWidget.tsx +71 -0
- package/corpus/core/src/client/chat/widgets/builtin-tool-renderers.tsx +22 -0
- package/corpus/core/src/client/chat/widgets/workspace-file-result.ts +49 -0
- package/corpus/core/src/client/embed-auth.ts +2 -0
- package/corpus/core/src/client/org/InvitationBanner.tsx +14 -1
- package/corpus/core/src/client/org/OrgSwitcher.tsx +23 -0
- package/corpus/core/src/client/org/TeamPage.tsx +130 -0
- package/corpus/core/src/client/org/WorkspaceNotice.tsx +85 -0
- package/corpus/core/src/client/org/hooks.ts +14 -0
- package/corpus/core/src/client/org/index.ts +2 -0
- package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +27 -40
- package/corpus/core/src/client/resources/ResourcesPanel.tsx +134 -51
- package/corpus/core/src/client/resources/mcp-integration-catalog.ts +7 -0
- package/corpus/core/src/client/resources/use-resources.ts +6 -0
- package/corpus/core/src/client/use-action.ts +3 -1
- package/corpus/core/src/client/widgets/index.ts +1 -0
- package/corpus/core/src/coding-tools/run-code.ts +2 -1
- package/corpus/core/src/db/client.ts +28 -4
- package/corpus/core/src/deploy/build.ts +31 -3
- package/corpus/core/src/eject/remote-mcp-presets.ts +1 -1
- package/corpus/core/src/index.browser.ts +1 -0
- package/corpus/core/src/index.ts +1 -0
- package/corpus/core/src/integrations/google-docs-poller.ts +3 -0
- package/corpus/core/src/integrations/webhook-handler.ts +28 -11
- package/corpus/core/src/jobs/scheduler.ts +4 -0
- package/corpus/core/src/localization/default-messages.ts +3 -2
- package/corpus/core/src/mcp/build-server.ts +20 -2
- package/corpus/core/src/observability/traces.ts +48 -12
- package/corpus/core/src/org/handlers.ts +52 -1
- package/corpus/core/src/org/migrations.ts +4 -0
- package/corpus/core/src/org/plugin.ts +14 -0
- package/corpus/core/src/org/schema.ts +1 -0
- package/corpus/core/src/org/types.ts +8 -0
- package/corpus/core/src/org/workspace-url.ts +74 -0
- package/corpus/core/src/resources/handlers.ts +35 -5
- package/corpus/core/src/scripts/runner.ts +183 -5
- package/corpus/core/src/server/action-routes.ts +32 -2
- package/corpus/core/src/server/agent-chat-plugin.ts +29 -0
- package/corpus/core/src/server/agent-teams.ts +10 -1
- package/corpus/core/src/server/auth.ts +33 -7
- package/corpus/core/src/server/embed-route.ts +9 -0
- package/corpus/core/src/server/embed-session.ts +62 -3
- package/corpus/core/src/server/open-route.ts +20 -6
- package/corpus/core/src/server/prompts/framework-core-compact.ts +1 -1
- package/corpus/core/src/server/prompts/framework-core.ts +1 -0
- package/corpus/core/src/server/request-context.ts +36 -1
- package/corpus/core/src/shared/embed-auth.ts +1 -0
- package/corpus/core/src/shared/html-document.ts +115 -0
- package/corpus/core/src/shared/index.ts +1 -0
- package/corpus/core/src/sharing/access.ts +8 -1
- package/corpus/core/src/sharing/registry.ts +11 -2
- package/corpus/core/src/workspace-files/actions.ts +100 -0
- package/corpus/core/src/workspace-files/tool.ts +4 -0
- package/corpus/templates/analytics/.agents/skills/analysis-workspace/SKILL.md +4 -0
- package/corpus/templates/analytics/.agents/skills/hubspot/SKILL.md +9 -1
- package/corpus/templates/analytics/AGENTS.md +17 -24
- package/corpus/templates/analytics/actions/data-source-status.ts +11 -1
- package/corpus/templates/analytics/app/i18n-data.ts +34 -0
- package/corpus/templates/analytics/app/lib/data-source-status.ts +86 -0
- package/corpus/templates/analytics/app/lib/native-mcp-exclusions.ts +9 -0
- package/corpus/templates/analytics/app/pages/DataSources.tsx +184 -20
- package/corpus/templates/analytics/changelog/2026-07-28-native-analytics-data-sources-no-longer-show-duplicate-mc.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-exports-now-appear-in-chat-with-a-direct-download-instead-of.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-queued-chat-prompts-no-longer-resend-after-analytics-navigat.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-scheduled-dashboard-emails-load-every-panel-reliably-without.md +6 -0
- package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +6 -3
- package/corpus/templates/analytics/server/lib/credential-keys.ts +1 -1
- package/corpus/templates/analytics/server/lib/hubspot.ts +1 -1
- package/corpus/templates/analytics/server/lib/provider-credentials.ts +55 -1
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +123 -27
- package/corpus/templates/analytics/server/routes/[...page].get.ts +2 -7
- package/corpus/templates/analytics/vite.config.ts +7 -0
- package/corpus/templates/brain/actions/list-connection-providers.ts +100 -2
- package/corpus/templates/brain/app/lib/brain.ts +10 -0
- package/corpus/templates/brain/app/routes/sources.tsx +15 -4
- package/corpus/templates/brain/changelog/2026-07-29-brain-automatically-retries-failed-source-syncs-and-guides-y.md +6 -0
- package/corpus/templates/brain/jobs/process-ingest-queue.ts +13 -0
- package/corpus/templates/brain/server/jobs/sync-sources.ts +27 -22
- package/corpus/templates/brain/server/plugins/agent-chat.ts +2 -1
- package/corpus/templates/brain/server/routes/api/brain/queue/run.post.ts +7 -1
- package/corpus/templates/clips/AGENTS.md +1 -1
- package/corpus/templates/clips/actions/create-recording-agent-link.ts +11 -1
- package/corpus/templates/clips/actions/update-comment.ts +68 -0
- package/corpus/templates/clips/app/components/editor/editor-layout.tsx +0 -1
- package/corpus/templates/clips/app/components/player/comments-panel.tsx +221 -65
- package/corpus/templates/clips/app/components/player/video-player.tsx +101 -27
- package/corpus/templates/clips/app/i18n/en-US.ts +2 -1
- package/corpus/templates/clips/app/routes/bug-report.done.tsx +48 -27
- package/corpus/templates/clips/app/routes/bug-report.tsx +43 -4
- package/corpus/templates/clips/app/routes/record.tsx +2 -0
- package/corpus/templates/clips/changelog/2026-07-29-clip-playback-now-recovers-instead-of-getting-stuck-when-a-b.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-29-comments-can-now-be-edited-after-posting.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-29-download-actions-now-use-a-shorter-clearer-label.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-29-embedded-bug-reports-now-return-a-temporary-agent-readable.md +6 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +1 -1
- package/corpus/templates/clips/desktop/src-tauri/src/system_audio.rs +21 -1
- package/corpus/templates/clips/shared/bug-report.ts +99 -0
- package/corpus/templates/content/actions/_content-database-personal-view.ts +7 -1
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +5 -2
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +20 -8
- package/corpus/templates/content/changelog/2026-07-29-missing-databases-no-longer-trigger-repeated-personal-view-e.md +6 -0
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +83 -47
- package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +474 -55
- package/corpus/templates/design/.generated/bridge/embedded-wheel.generated.ts +3 -0
- package/corpus/templates/design/.generated/bridge/hit-test.generated.ts +18 -1
- package/corpus/templates/design/.generated/bridge/source-location.generated.ts +348 -0
- package/corpus/templates/design/actions/add-localhost-screens.ts +2 -7
- package/corpus/templates/design/actions/apply-visual-edit.ts +7 -1
- package/corpus/templates/design/actions/connect-localhost.ts +5 -9
- package/corpus/templates/design/actions/create-component.ts +16 -13
- package/corpus/templates/design/actions/grant-localhost-write-consent.ts +2 -7
- package/corpus/templates/design/actions/list-design-source-capabilities.ts +4 -7
- package/corpus/templates/design/actions/list-local-files.ts +26 -50
- package/corpus/templates/design/actions/list-localhost-connections.ts +2 -7
- package/corpus/templates/design/actions/migrate-board-objects-to-file.ts +2 -2
- package/corpus/templates/design/actions/open-visual-edit.ts +234 -135
- package/corpus/templates/design/actions/read-local-file.ts +26 -50
- package/corpus/templates/design/actions/request-localhost-write-consent.ts +2 -7
- package/corpus/templates/design/actions/write-local-file.ts +31 -73
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +307 -133
- package/corpus/templates/design/app/components/design/EditPanel.tsx +94 -22
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +137 -60
- package/corpus/templates/design/app/components/design/ResponsiveInteractBar.tsx +75 -14
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +755 -97
- package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +8 -0
- package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +24 -1
- package/corpus/templates/design/app/components/design/bridge/source-location.bridge.ts +530 -0
- package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbenchLoader.tsx +278 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/MonacoHost.tsx +32 -12
- package/corpus/templates/design/app/components/design/code-workbench/editor/monaco-setup.ts +14 -3
- package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +87 -24
- package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +36 -0
- package/corpus/templates/design/app/components/design/code-workbench/store.tsx +2 -1
- package/corpus/templates/design/app/components/design/code-workbench/workspace/localhost-provider.ts +48 -8
- package/corpus/templates/design/app/components/design/design-canvas/content-size-report.ts +3 -13
- package/corpus/templates/design/app/components/design/design-canvas/embedded-frame.ts +4 -2
- package/corpus/templates/design/app/components/design/design-canvas/hit-test.ts +3 -13
- package/corpus/templates/design/app/components/design/edit-panel/element-classification.ts +3 -1
- package/corpus/templates/design/app/components/design/edit-panel/inspect-code-source.ts +93 -0
- package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +4 -2
- package/corpus/templates/design/app/components/design/multi-screen/cross-screen-drop.ts +35 -0
- package/corpus/templates/design/app/components/design/multi-screen/iframe-targeting.ts +24 -0
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +9 -0
- package/corpus/templates/design/app/components/design/types.ts +29 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +7 -4
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +3 -0
- package/corpus/templates/design/app/i18n-data.ts +153 -46
- package/corpus/templates/design/app/i18n-responsive-interact.ts +12 -12
- package/corpus/templates/design/app/lib/design-editor-route.ts +23 -0
- package/corpus/templates/design/app/pages/VisualEdit.tsx +19 -6
- package/corpus/templates/design/app/pages/design-editor/action-error.ts +19 -0
- package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +29 -0
- package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +6 -0
- package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +277 -15
- package/corpus/templates/design/app/pages/design-editor/editor-state.ts +75 -9
- package/corpus/templates/design/app/pages/design-editor/layer-state-scope.ts +28 -0
- package/corpus/templates/design/app/pages/design-editor/live-screen-layer-drop.ts +41 -0
- package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +496 -41
- package/corpus/templates/design/app/pages/design-editor/pending-live-edit-unload-guard.ts +27 -0
- package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +10 -0
- package/corpus/templates/design/app/pages/design-editor/react-semantic-handoff.ts +168 -9
- package/corpus/templates/design/app/pages/design-editor/responsive-interact.ts +41 -3
- package/corpus/templates/design/app/pages/design-editor/screen-command-utils.ts +5 -0
- package/corpus/templates/design/app/pages/design-editor/selection-state.ts +42 -13
- package/corpus/templates/design/app/pages/design-editor/source-location.ts +180 -0
- package/corpus/templates/design/app/pages/design-editor/tool-state.ts +17 -0
- package/corpus/templates/design/app/public-routes.ts +1 -0
- package/corpus/templates/design/app/routes/visual-edit.$id.tsx +15 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-is-easier-to-find-and-named-screens-open-dir.md +1 -1
- package/corpus/templates/design/changelog/2026-07-28-deleting-a-selected-element-now-removes-it-from-the-live-pre.md +6 -0
- package/corpus/templates/design/changelog/2026-07-28-deleting-an-element-on-a-connected-localhost-screen-now-queu.md +6 -0
- package/corpus/templates/design/changelog/2026-07-28-interact-mode-now-shows-a-responsive-device-preview-with-pre.md +6 -0
- package/corpus/templates/design/changelog/2026-07-28-layer-hide-and-lock-now-apply-to-the-live-preview-instead-of.md +6 -0
- package/corpus/templates/design/changelog/2026-07-28-layers-panel-selections-on-a-connected-localhost-screen-can-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-28-locked-layers-now-show-a-subtle-dashed-outline-in-the-live-p.md +6 -0
- package/corpus/templates/design/changelog/2026-07-28-the-apply-design-updates-button-now-counts-pending-live-text.md +6 -0
- package/corpus/templates/design/changelog/2026-07-28-the-design-canvas-no-longer-stalls-on-a-render-loop-while-a-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-28-visual-edit-on-a-local-dev-server-no-longer-requires-signing.md +6 -0
- package/corpus/templates/design/changelog/2026-07-28-visual-edits-on-a-react-19-app-no-longer-report-a-source-lin.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-an-edit-that-cannot-be-written-to-source-now-names-the-reaso.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-applying-a-primitive-dropped-onto-a-connected-localhost-scre.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-changing-a-style-in-the-inspector-now-updates-a-connected-lo.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-choosing-edit-or-annotate-from-a-focused-screen-now-returns-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-concurrent-source-edits-now-return-a-clear-conflict-response.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-creating-a-component-from-an-element-that-repeats-in-the-sou.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-deleting-an-element-you-just-dropped-onto-a-live-screen-no-l.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-dragging-a-layer-across-screens-no-longer-dies-when-the-poin.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-dragging-an-element-from-a-stored-screen-into-a-live-localho.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-drawing-a-box-on-the-canvas-and-dragging-it-into-a-connected.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-fixed-a-loading-screen-flicker-when-reopening-designs-with-a.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-interact-mode-has-edit-and-annotate-buttons-again-so-you-can.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-layer-groups-can-be-dropped-onto-live-localhost-screens.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-localhost-source-errors-now-say-what-actually-went-wrong-whi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-opening-or-refreshing-a-live-localhost-screen-in-single-scre.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-redo-after-undoing-a-drop-onto-a-live-screen-puts-the-elemen.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-shapes-can-be-drawn-directly-onto-live-localhost-screens.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-shapes-drawn-on-the-canvas-board-now-appear-immediately-inst.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-style-edits-on-a-running-localhost-screen-now-preview-live-a.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-the-apply-design-updates-control-now-appears-as-a-clean-conn.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-visual-edits-on-a-mapped-component-instance-now-tell-the-age.md +6 -0
- package/corpus/templates/design/server/lib/design-data-access.ts +21 -7
- package/corpus/templates/design/server/lib/localhost-connection.ts +240 -0
- package/corpus/templates/design/server/routes/[...page].get.ts +2 -5
- package/corpus/templates/design/server/source-workspace.ts +2 -0
- package/corpus/templates/design/shared/code-layer.ts +43 -0
- package/corpus/templates/design/shared/html-content.ts +26 -0
- package/corpus/templates/design/shared/html-integrity.ts +21 -1
- package/corpus/templates/design/shared/local-jsx-visual-edit.ts +15 -0
- package/corpus/templates/design/shared/source-mode.ts +76 -0
- package/corpus/templates/dispatch/changelog/2026-07-29-workspace-members-without-admin-access-now-see-a-clear-permi.md +6 -0
- package/corpus/templates/dispatch/server/lib/usage-metrics.ts +2 -1
- package/corpus/templates/plan/app/lib/plan-annotation-runtime.ts +3 -4
- package/corpus/templates/plan/server/routes/[...page].get.ts +2 -5
- package/corpus/templates/slides/actions/patch-deck.ts +29 -17
- package/corpus/toolkit/CHANGELOG.md +6 -0
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +3 -2
- package/dist/action-ui.d.ts +1 -0
- package/dist/action-ui.d.ts.map +1 -1
- package/dist/action-ui.js +1 -0
- package/dist/action-ui.js.map +1 -1
- package/dist/action.d.ts +5 -1
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +13 -5
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/harness/runner.d.ts.map +1 -1
- package/dist/agent/harness/runner.js +5 -0
- package/dist/agent/harness/runner.js.map +1 -1
- package/dist/agent/production-agent.d.ts +16 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +18 -1
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
- package/dist/agent/run-loop-with-resume.js +6 -0
- package/dist/agent/run-loop-with-resume.js.map +1 -1
- package/dist/agent/run-manager.d.ts +14 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +91 -1
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts +3 -0
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +35 -3
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/agent/types.d.ts +2 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +4 -6
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/cli/create.d.ts +66 -6
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +765 -66
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +2 -7
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/cli/index.js +5 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts +1 -1
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/design-visual-edit-skill.js +83 -47
- package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +16 -9
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +21 -0
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/blocks/library/wireframe-kit.d.ts +2 -0
- package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -1
- package/dist/client/blocks/library/wireframe-kit.js +8 -2
- package/dist/client/blocks/library/wireframe-kit.js.map +1 -1
- package/dist/client/chat/index.d.ts +1 -1
- package/dist/client/chat/index.d.ts.map +1 -1
- package/dist/client/chat/index.js +1 -1
- package/dist/client/chat/index.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +17 -0
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +24 -2
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/run-recovery.d.ts +6 -0
- package/dist/client/chat/run-recovery.d.ts.map +1 -1
- package/dist/client/chat/run-recovery.js +13 -3
- package/dist/client/chat/run-recovery.js.map +1 -1
- package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -1
- package/dist/client/chat/widgets/DataTableWidget.js +2 -3
- package/dist/client/chat/widgets/DataTableWidget.js.map +1 -1
- package/dist/client/chat/widgets/WorkspaceFileWidget.d.ts +5 -0
- package/dist/client/chat/widgets/WorkspaceFileWidget.d.ts.map +1 -0
- package/dist/client/chat/widgets/WorkspaceFileWidget.js +34 -0
- package/dist/client/chat/widgets/WorkspaceFileWidget.js.map +1 -0
- package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
- package/dist/client/chat/widgets/builtin-tool-renderers.js +13 -1
- package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -1
- package/dist/client/chat/widgets/workspace-file-result.d.ts +12 -0
- package/dist/client/chat/widgets/workspace-file-result.d.ts.map +1 -0
- package/dist/client/chat/widgets/workspace-file-result.js +34 -0
- package/dist/client/chat/widgets/workspace-file-result.js.map +1 -0
- package/dist/client/embed-auth.d.ts.map +1 -1
- package/dist/client/embed-auth.js +2 -1
- package/dist/client/embed-auth.js.map +1 -1
- package/dist/client/org/InvitationBanner.d.ts +5 -2
- package/dist/client/org/InvitationBanner.d.ts.map +1 -1
- package/dist/client/org/InvitationBanner.js +9 -2
- package/dist/client/org/InvitationBanner.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +3 -2
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +27 -3
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/org/WorkspaceNotice.d.ts +18 -0
- package/dist/client/org/WorkspaceNotice.d.ts.map +1 -0
- package/dist/client/org/WorkspaceNotice.js +56 -0
- package/dist/client/org/WorkspaceNotice.js.map +1 -0
- package/dist/client/org/hooks.d.ts +1 -0
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +12 -0
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/org/index.d.ts +2 -1
- package/dist/client/org/index.d.ts.map +1 -1
- package/dist/client/org/index.js +2 -1
- package/dist/client/org/index.js.map +1 -1
- package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
- package/dist/client/resources/McpIntegrationDialog.js +8 -12
- package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts +3 -0
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +49 -20
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
- package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.js +3 -0
- package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
- package/dist/client/resources/use-resources.d.ts +1 -0
- package/dist/client/resources/use-resources.d.ts.map +1 -1
- package/dist/client/resources/use-resources.js +3 -0
- package/dist/client/resources/use-resources.js.map +1 -1
- package/dist/client/use-action.d.ts +3 -1
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +3 -1
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/widgets/index.d.ts +1 -1
- package/dist/client/widgets/index.d.ts.map +1 -1
- package/dist/client/widgets/index.js +1 -1
- package/dist/client/widgets/index.js.map +1 -1
- package/dist/coding-tools/run-code.js +2 -1
- package/dist/coding-tools/run-code.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/db/client.d.ts +1 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +24 -3
- package/dist/db/client.js.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +25 -3
- package/dist/deploy/build.js.map +1 -1
- package/dist/eject/remote-mcp-presets.js +1 -1
- package/dist/eject/remote-mcp-presets.js.map +1 -1
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/google-docs-poller.d.ts.map +1 -1
- package/dist/integrations/google-docs-poller.js +4 -1
- package/dist/integrations/google-docs-poller.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +23 -11
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.js +4 -0
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/localization/default-messages.d.ts +3 -2
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +3 -2
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +10 -1
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +27 -7
- package/dist/observability/traces.js.map +1 -1
- package/dist/org/handlers.d.ts +15 -0
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +45 -1
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/migrations.d.ts.map +1 -1
- package/dist/org/migrations.js +4 -0
- package/dist/org/migrations.js.map +1 -1
- package/dist/org/plugin.d.ts +1 -0
- package/dist/org/plugin.d.ts.map +1 -1
- package/dist/org/plugin.js +10 -1
- package/dist/org/plugin.js.map +1 -1
- package/dist/org/schema.d.ts +19 -0
- package/dist/org/schema.d.ts.map +1 -1
- package/dist/org/schema.js +1 -0
- package/dist/org/schema.js.map +1 -1
- package/dist/org/types.d.ts +8 -0
- package/dist/org/types.d.ts.map +1 -1
- package/dist/org/types.js.map +1 -1
- package/dist/org/workspace-url.d.ts +32 -0
- package/dist/org/workspace-url.d.ts.map +1 -0
- package/dist/org/workspace-url.js +63 -0
- package/dist/org/workspace-url.js.map +1 -0
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +11 -11
- package/dist/provider-api/actions/provider-api.d.ts +7 -7
- package/dist/resources/handlers.d.ts +2 -3
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +25 -5
- package/dist/resources/handlers.js.map +1 -1
- package/dist/scripts/runner.d.ts +17 -0
- package/dist/scripts/runner.d.ts.map +1 -1
- package/dist/scripts/runner.js +130 -5
- package/dist/scripts/runner.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +24 -2
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +26 -1
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +10 -1
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/auth.d.ts +22 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +33 -7
- package/dist/server/auth.js.map +1 -1
- package/dist/server/embed-route.d.ts.map +1 -1
- package/dist/server/embed-route.js +6 -1
- package/dist/server/embed-route.js.map +1 -1
- package/dist/server/embed-session.d.ts +7 -0
- package/dist/server/embed-session.d.ts.map +1 -1
- package/dist/server/embed-session.js +46 -4
- package/dist/server/embed-session.js.map +1 -1
- package/dist/server/open-route.d.ts.map +1 -1
- package/dist/server/open-route.js +17 -7
- package/dist/server/open-route.js.map +1 -1
- package/dist/server/prompts/framework-core-compact.js +1 -1
- package/dist/server/prompts/framework-core-compact.js.map +1 -1
- package/dist/server/prompts/framework-core.d.ts.map +1 -1
- package/dist/server/prompts/framework-core.js +1 -0
- package/dist/server/prompts/framework-core.js.map +1 -1
- package/dist/server/request-context.d.ts +26 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +18 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/shared/embed-auth.d.ts +1 -0
- package/dist/shared/embed-auth.d.ts.map +1 -1
- package/dist/shared/embed-auth.js +1 -0
- package/dist/shared/embed-auth.js.map +1 -1
- package/dist/shared/html-document.d.ts +12 -0
- package/dist/shared/html-document.d.ts.map +1 -0
- package/dist/shared/html-document.js +92 -0
- package/dist/shared/html-document.js.map +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/sharing/access.d.ts +1 -0
- package/dist/sharing/access.d.ts.map +1 -1
- package/dist/sharing/access.js +8 -2
- package/dist/sharing/access.js.map +1 -1
- package/dist/sharing/registry.d.ts +3 -0
- package/dist/sharing/registry.d.ts.map +1 -1
- package/dist/sharing/registry.js.map +1 -1
- package/dist/workspace-files/actions.d.ts +28 -0
- package/dist/workspace-files/actions.d.ts.map +1 -0
- package/dist/workspace-files/actions.js +75 -0
- package/dist/workspace-files/actions.js.map +1 -0
- package/dist/workspace-files/tool.d.ts.map +1 -1
- package/dist/workspace-files/tool.js +4 -0
- package/dist/workspace-files/tool.js.map +1 -1
- package/docs/content/cloneable-saas.mdx +114 -0
- package/docs/content/creating-templates.mdx +28 -2
- package/docs/content/syncing-template-changes.mdx +7 -0
- package/docs/content/template-clips-developers.mdx +12 -5
- package/docs/content/template-dispatch-developers.mdx +1 -1
- package/docs/content/template-dispatch.mdx +1 -1
- package/package.json +2 -2
- package/src/action-ui.ts +1 -0
- package/src/action.ts +5 -1
- package/src/agent/engine/ai-sdk-engine.ts +15 -5
- package/src/agent/harness/runner.ts +5 -0
- package/src/agent/production-agent.ts +33 -0
- package/src/agent/run-loop-with-resume.ts +5 -0
- package/src/agent/run-manager.ts +126 -1
- package/src/agent/thread-data-builder.ts +47 -2
- package/src/agent/types.ts +2 -0
- package/src/chat-threads/store.ts +4 -5
- package/src/cli/create.ts +1139 -65
- package/src/cli/design-connect.ts +3 -7
- package/src/cli/index.ts +5 -3
- package/src/cli/skills-content/design-visual-edit-skill.ts +83 -47
- package/src/client/AssistantChat.tsx +27 -16
- package/src/client/agent-chat-adapter.ts +24 -0
- package/src/client/blocks/library/wireframe-kit.tsx +17 -2
- package/src/client/chat/index.ts +1 -0
- package/src/client/chat/message-components.tsx +104 -1
- package/src/client/chat/run-recovery.tsx +15 -3
- package/src/client/chat/widgets/DataTableWidget.tsx +10 -29
- package/src/client/chat/widgets/WorkspaceFileWidget.tsx +71 -0
- package/src/client/chat/widgets/builtin-tool-renderers.tsx +22 -0
- package/src/client/chat/widgets/workspace-file-result.ts +49 -0
- package/src/client/embed-auth.ts +2 -0
- package/src/client/org/InvitationBanner.tsx +14 -1
- package/src/client/org/OrgSwitcher.tsx +23 -0
- package/src/client/org/TeamPage.tsx +130 -0
- package/src/client/org/WorkspaceNotice.tsx +85 -0
- package/src/client/org/hooks.ts +14 -0
- package/src/client/org/index.ts +2 -0
- package/src/client/resources/McpIntegrationDialog.tsx +27 -40
- package/src/client/resources/ResourcesPanel.tsx +134 -51
- package/src/client/resources/mcp-integration-catalog.ts +7 -0
- package/src/client/resources/use-resources.ts +6 -0
- package/src/client/use-action.ts +3 -1
- package/src/client/widgets/index.ts +1 -0
- package/src/coding-tools/run-code.ts +2 -1
- package/src/db/client.ts +28 -4
- package/src/deploy/build.ts +31 -3
- package/src/eject/remote-mcp-presets.ts +1 -1
- package/src/index.browser.ts +1 -0
- package/src/index.ts +1 -0
- package/src/integrations/google-docs-poller.ts +3 -0
- package/src/integrations/webhook-handler.ts +28 -11
- package/src/jobs/scheduler.ts +4 -0
- package/src/localization/default-messages.ts +3 -2
- package/src/mcp/build-server.ts +20 -2
- package/src/observability/traces.ts +48 -12
- package/src/org/handlers.ts +52 -1
- package/src/org/migrations.ts +4 -0
- package/src/org/plugin.ts +14 -0
- package/src/org/schema.ts +1 -0
- package/src/org/types.ts +8 -0
- package/src/org/workspace-url.ts +74 -0
- package/src/resources/handlers.ts +35 -5
- package/src/scripts/runner.ts +183 -5
- package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +2 -1
- package/src/server/action-routes.ts +32 -2
- package/src/server/agent-chat-plugin.ts +29 -0
- package/src/server/agent-teams.ts +10 -1
- package/src/server/auth.ts +33 -7
- package/src/server/embed-route.ts +9 -0
- package/src/server/embed-session.ts +62 -3
- package/src/server/open-route.ts +20 -6
- package/src/server/prompts/framework-core-compact.ts +1 -1
- package/src/server/prompts/framework-core.ts +1 -0
- package/src/server/request-context.ts +36 -1
- package/src/shared/embed-auth.ts +1 -0
- package/src/shared/html-document.ts +115 -0
- package/src/shared/index.ts +1 -0
- package/src/sharing/access.ts +8 -1
- package/src/sharing/registry.ts +11 -2
- package/src/workspace-files/actions.ts +100 -0
- package/src/workspace-files/tool.ts +4 -0
- package/corpus/templates/design/changelog/2026-07-28-interact-mode-can-preview-designs-in-responsive-device-sizes.md +0 -6
- package/corpus/templates/design/changelog/2026-07-28-interact-mode-now-opens-a-full-screen-responsive-preview-wit.md +0 -6
package/corpus/README.md
CHANGED
package/corpus/core/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,83 @@
|
|
|
1
1
|
# @agent-native/core
|
|
2
2
|
|
|
3
|
+
## 0.130.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 279e855: Add a first-class CLI flow for installing community-maintained Agent Native templates from public GitHub repositories, including app selection from community workspace repositories.
|
|
8
|
+
- 279e855: Render compact data exports and durable workspace files as private downloads directly in agent chat.
|
|
9
|
+
- 279e855: Point org members at their own workspace when they land on a different deployment.
|
|
10
|
+
|
|
11
|
+
Orgs can now record a `workspaceUrl` (Settings → Team, owner/admin). Members who
|
|
12
|
+
open a shared hosted app from the template catalog see a notice offering to take
|
|
13
|
+
them to their team's workspace instead of an app that looks empty, and the org
|
|
14
|
+
switcher shows which host they are currently on. Opt-in per org — nothing
|
|
15
|
+
changes for orgs that don't set it, and it offers a choice rather than
|
|
16
|
+
redirecting.
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- 279e855: Let a browser explicitly sign out of the shared `AUTH_DISABLED` development account so preview users can choose a real account.
|
|
21
|
+
- 279e855: Add comment author editing to the Clips template corpus.
|
|
22
|
+
- 279e855: Retry transient SQLite locks while a fresh local app enables WAL during startup.
|
|
23
|
+
- 279e855: Prevent frontend action calls from failing with 405 errors when a mutating action declares PUT or DELETE and the caller uses the default mutation transport.
|
|
24
|
+
- 279e855: Prevent sketch wireframes from overflowing the browser call stack when layout measurements contain non-finite coordinates.
|
|
25
|
+
- 279e855: Fix the chat client telling users "the agent connection kept failing" when a
|
|
26
|
+
turn was actually stopped by `MAX_TOTAL_TRANSIENT_CONTINUATIONS`, the
|
|
27
|
+
whole-turn ceiling on client re-POSTs of `auto_continue`. That cap only ever
|
|
28
|
+
binds turns that were making real progress the whole time, so blaming a
|
|
29
|
+
connection failure named the wrong cause. It now reports its own message:
|
|
30
|
+
the turn hit the limit on how many times it could be automatically
|
|
31
|
+
continued, and suggests retrying as a single, narrower request.
|
|
32
|
+
- 279e855: Stop reporting `$ai_generation` token/cost figures as literal `0` when the
|
|
33
|
+
engine never returned a usage report — every run aborted for no-progress
|
|
34
|
+
before any provider response arrived was indistinguishable from a real
|
|
35
|
+
empty-input call, which made it impossible to size the input of failing
|
|
36
|
+
runs. `input_tokens`, `output_tokens`, `total_tokens`, `cache_read_tokens`,
|
|
37
|
+
`cache_write_tokens`, `cost_cents_x100`, `cost_usd`, and their `$ai_*`
|
|
38
|
+
equivalents are now omitted from the tracking event instead of coerced to
|
|
39
|
+
zero when the engine never reported usage. Also adds `time_to_first_token_ms`,
|
|
40
|
+
measuring elapsed time from run start to the first non-heartbeat engine
|
|
41
|
+
event, omitted (not zeroed) when no such event ever arrived.
|
|
42
|
+
- 279e855: Emit an `agent_run_terminal` analytics event for every terminal agent run
|
|
43
|
+
(completed, errored, aborted, or truncated at a continuation boundary),
|
|
44
|
+
reusing the same best-effort `track()` seam that already carries
|
|
45
|
+
`$ai_generation` into `analytics_events`. Run cutoffs — budget exhaustion,
|
|
46
|
+
loop limits, aborts, and the `truncated` continuation status — were
|
|
47
|
+
previously visible only in each app's operational `agent_runs` table and
|
|
48
|
+
absent from analytics entirely. The event carries `run_id`, `thread_id`,
|
|
49
|
+
`turn_id`, `status`, `terminal_reason`, `error_code`, `error_detail`,
|
|
50
|
+
`dispatch_mode`, `abort_reason`, and `duration_ms`; `model`/`engine`/
|
|
51
|
+
`attempt_count` are forwarded through the new optional `StartRunOptions`
|
|
52
|
+
fields, now populated by every built-in `startRun` caller (main chat,
|
|
53
|
+
agent teams, harness runs, integration webhooks, the Google Docs poller,
|
|
54
|
+
and recurring jobs) with the resolved model actually sent to the engine —
|
|
55
|
+
never the raw client-requested one. `userId` is left unset everywhere: no
|
|
56
|
+
caller in this codebase has an opaque (non-email) user id available at its
|
|
57
|
+
`startRun` call site. Emission fires only after the run's terminal status
|
|
58
|
+
and thread_data are durably persisted, and a missing or failing tracking
|
|
59
|
+
provider can never affect the run.
|
|
60
|
+
- 279e855: Keep a failed or stopped run visible on the turn it belongs to. The assistant
|
|
61
|
+
turn now carries a collapsed inline marker built from the persisted run-error
|
|
62
|
+
metadata (with the run duration when known), so the failure survives the next
|
|
63
|
+
prompt instead of only existing in the transient recovery banner. The banner
|
|
64
|
+
still owns the run it is showing, so the same failure is never announced twice.
|
|
65
|
+
- 279e855: Default MCP connections to personal OAuth, keep personal MCP setup available to organization members, hide unusable organization controls, and honor app preset filters in ejected UIs.
|
|
66
|
+
- 279e855: Prevent queued chat prompts from replaying after navigation or remounting the chat.
|
|
67
|
+
- 279e855: Recover AI SDK provider network failures after its internal retry wrapper preserves the final transport error.
|
|
68
|
+
- 279e855: Fix document bridge injection when page scripts contain closing-tag or dollar-sign literals.
|
|
69
|
+
- 279e855: Correct the Dispatch setup docs to match the current workspace picker.
|
|
70
|
+
- 279e855: Fix `/_agent-native/open` silently dropping a `Set-Cookie` staged during `getSession()` (e.g. `_session` query-param promotion) when it built a bare 302 `Response`, so an authenticated redirect could still leave the browser signed out. Export `redirectWithStagedCookies` so other routes can reuse the fix.
|
|
71
|
+
- 279e855: Add `isLoopbackRequest` to the request context and a `getRequestIsLoopback()` reader. The action-route handler captures the real socket peer (via `getRequestIP` without `x-forwarded-for`, so headers cannot spoof it) while the h3 event is still in scope, letting code below the HTTP layer distinguish a local-dev caller from a remote one. Used by Design to let `/visual-edit` work without a login on a localhost-backed design while keeping remote viewers read-only.
|
|
72
|
+
- Updated dependencies [279e855]
|
|
73
|
+
- @agent-native/toolkit@0.10.12
|
|
74
|
+
|
|
75
|
+
## 0.129.2
|
|
76
|
+
|
|
77
|
+
### Patch Changes
|
|
78
|
+
|
|
79
|
+
- 21e33c7: Keep asynchronous `ask_app` task handles and exact polling arguments visible to MCP callers so they can retrieve the same cross-app task without resubmitting it.
|
|
80
|
+
|
|
3
81
|
## 0.129.1
|
|
4
82
|
|
|
5
83
|
### Patch Changes
|
|
@@ -35,6 +35,120 @@ Don't want a domain app? Use [Chat](/docs/template-chat) when you want a basic a
|
|
|
35
35
|
|
|
36
36
|
See the full catalog under [Apps](/apps), or jump straight to one — for example, [Dispatch](/docs/template-dispatch) is a great place to start if you want a workspace-style app.
|
|
37
37
|
|
|
38
|
+
## Community templates {#community-templates}
|
|
39
|
+
|
|
40
|
+
The named templates in the CLI picker are **first-party**: Agent Native
|
|
41
|
+
maintains, tests, documents, and releases them with the framework. A
|
|
42
|
+
**community template** is maintained and versioned by its repository owner. It
|
|
43
|
+
can use the same framework surface, but a community listing is not an
|
|
44
|
+
endorsement or a promise of support from Agent Native.
|
|
45
|
+
|
|
46
|
+
Run `create`, choose **Community template**, and paste a plain public GitHub
|
|
47
|
+
repository URL:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
https://github.com/owner/repo
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
If the repository root is a single Agent Native app, the CLI installs it
|
|
54
|
+
directly without another picker. If the repository is an Agent Native workspace,
|
|
55
|
+
the CLI discovers valid direct children of `apps/*`, excludes `dispatch`, and
|
|
56
|
+
asks which app to install.
|
|
57
|
+
|
|
58
|
+
A non-empty `agent-native.workspaceCore` marker makes the repository a
|
|
59
|
+
workspace even when its root package also depends on `@agent-native/core`; a
|
|
60
|
+
malformed marker is rejected.
|
|
61
|
+
|
|
62
|
+
Pass the same plain URL to `--template` for scripts, or use the shorter
|
|
63
|
+
`community:` form. Pin a branch, tag, or commit after `#` when you want a
|
|
64
|
+
reproducible starting point. Without a ref, the CLI tries `main`, then `master`:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx @agent-native/core@latest create my-app --template community:owner/repo#v1.2.0
|
|
68
|
+
npx @agent-native/core@latest create my-app --template https://github.com/owner/repo#v1.2.0
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
For a workspace repository, make the source-app choice non-interactive with
|
|
72
|
+
`?app=<app-name>`. The selector comes before the optional `#ref`. Keep the
|
|
73
|
+
whole value quoted because shells such as zsh treat `?` as a glob:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npx @agent-native/core@latest create my-app --template 'community:owner/repo?app=analytics#v1.2.0'
|
|
77
|
+
npx @agent-native/core@latest create my-app --template 'https://github.com/owner/repo?app=analytics#v1.2.0'
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Outside a workspace, `create` makes the selected source app standalone. To add
|
|
81
|
+
it to an existing workspace, pass the community repository explicitly because
|
|
82
|
+
the `add-app` picker lists first-party templates only. Omit `?app` to choose
|
|
83
|
+
from the source workspace interactively, or include it for a scriptable install:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
npx @agent-native/core@latest add-app my-app --template community:owner/repo#v1.2.0
|
|
87
|
+
npx @agent-native/core@latest add-app my-app --template 'community:owner/repo?app=analytics#v1.2.0'
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Only public GitHub repositories are accepted. Private repositories, non-GitHub
|
|
91
|
+
hosts, GitHub tree or subdirectory URLs, and nested app paths are not supported.
|
|
92
|
+
A root app must have a readable `package.json` that lists
|
|
93
|
+
`@agent-native/core` in `dependencies`, `devDependencies`, or
|
|
94
|
+
`peerDependencies`. In a workspace repository, each selectable source app must
|
|
95
|
+
meet the same requirement directly under `apps/<app-name>/`; `dispatch` is
|
|
96
|
+
never selectable.
|
|
97
|
+
|
|
98
|
+
Community workspace apps must be portable leaves, not arbitrary monorepo
|
|
99
|
+
slices:
|
|
100
|
+
|
|
101
|
+
- default `catalog:` dependency references are resolved from the source
|
|
102
|
+
repository's root `pnpm-workspace.yaml`; named catalog references are not
|
|
103
|
+
supported;
|
|
104
|
+
- `workspace:*` references to `@agent-native/core`, `@agent-native/dispatch`,
|
|
105
|
+
and `@agent-native/toolkit` are rewritten to published versions. Other
|
|
106
|
+
sibling workspace packages are not copied, so publish them and use a concrete
|
|
107
|
+
version instead;
|
|
108
|
+
- the source `workspaceCore` dependency is removed. Canonical inherited
|
|
109
|
+
workspace auth and agent-chat plugins are detached for a standalone install
|
|
110
|
+
or rebound to the destination workspace. Any other import of the source
|
|
111
|
+
`workspaceCore` package fails clearly; move that code into the app or publish
|
|
112
|
+
it as a concrete dependency.
|
|
113
|
+
|
|
114
|
+
Keep the rest of each complete app with its `package.json`: `agent-native.json`
|
|
115
|
+
when used, source, actions, agent instructions, and database setup. A
|
|
116
|
+
catalog-ready repository should also include:
|
|
117
|
+
|
|
118
|
+
- a license and a maintainer or support link;
|
|
119
|
+
- a README with setup steps, required environment variables, and the exact CLI
|
|
120
|
+
command;
|
|
121
|
+
- an `.env.example` containing placeholders only, with no secrets, customer
|
|
122
|
+
data, runtime databases, or generated build output;
|
|
123
|
+
- a working install, development command, typecheck, and tests appropriate to
|
|
124
|
+
the template.
|
|
125
|
+
|
|
126
|
+
The installer records the resolved `source` and `ref` under
|
|
127
|
+
`agent-native.communityTemplate` in the installed app's `package.json`. Apps
|
|
128
|
+
selected from a workspace repository also record the source app as
|
|
129
|
+
`agent-native.communityTemplate.app`. `agent-native template sync` remains
|
|
130
|
+
first-party-only; review a newer upstream ref and merge its changes yourself
|
|
131
|
+
when updating a community template.
|
|
132
|
+
|
|
133
|
+
See [Creating Templates](/docs/creating-templates) for the full app, action,
|
|
134
|
+
state, security, and publishing checklist.
|
|
135
|
+
|
|
136
|
+
> **Review community code before installing dependencies or running it.**
|
|
137
|
+
> Community templates are downloaded from third-party repositories; Agent
|
|
138
|
+
> Native does not sandbox, audit, or maintain them. The CLI downloads source
|
|
139
|
+
> only; it does not install dependencies or run template scripts. Inspect the
|
|
140
|
+
> source, license, dependencies, and package install scripts, and prefer a
|
|
141
|
+
> pinned trusted ref.
|
|
142
|
+
|
|
143
|
+
A hosted demo is optional. If you provide one, make it a public try-it link and
|
|
144
|
+
document any sign-in, seed-data, or provider requirements. The repository
|
|
145
|
+
remains the install source of truth, and the repository owner remains
|
|
146
|
+
responsible for both the template and demo.
|
|
147
|
+
|
|
148
|
+
Want to be listed? [Submit a community template](https://github.com/BuilderIO/agent-native/issues/new?template=community-template.yml)
|
|
149
|
+
with the repository URL, a one-sentence description, maintainer and license
|
|
150
|
+
details, the tested CLI command, and an optional hosted demo URL.
|
|
151
|
+
|
|
38
152
|
## What you get out of the box {#what-you-get}
|
|
39
153
|
|
|
40
154
|
Every example app ships with the parts that normally take months to build:
|
|
@@ -501,12 +501,38 @@ Before sharing:
|
|
|
501
501
|
4. Document required env vars and onboarding steps.
|
|
502
502
|
5. Include examples or seed rows through additive migrations, not tracked runtime data files.
|
|
503
503
|
|
|
504
|
-
Community templates
|
|
504
|
+
Community templates install directly from a public GitHub repository. Put the
|
|
505
|
+
Agent Native app at the repository root:
|
|
505
506
|
|
|
506
507
|
```bash
|
|
507
|
-
npx @agent-native/core@latest create my-app --template
|
|
508
|
+
npx @agent-native/core@latest create my-app --template community:owner/repo
|
|
508
509
|
```
|
|
509
510
|
|
|
511
|
+
Add `#branch`, `#tag`, or `#commit` when you want people to install a specific
|
|
512
|
+
revision:
|
|
513
|
+
|
|
514
|
+
```bash
|
|
515
|
+
npx @agent-native/core@latest create my-app --template community:owner/repo#v1.0.0
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
The CLI downloads the source only. It does not install dependencies or run the
|
|
519
|
+
template's scripts. Community templates are third-party code, so review the
|
|
520
|
+
repository, license, dependencies, and install scripts before running
|
|
521
|
+
`pnpm install`.
|
|
522
|
+
|
|
523
|
+
To be listed in the community catalog, include:
|
|
524
|
+
|
|
525
|
+
- A focused, complete Agent Native app at the repository root.
|
|
526
|
+
- A public repository with a license and a README that covers setup, required
|
|
527
|
+
environment variables, and what the template does.
|
|
528
|
+
- A root `package.json` that depends on `@agent-native/core`.
|
|
529
|
+
- Passing typechecks and tests.
|
|
530
|
+
- Optionally, a hosted version people can try and a representative screenshot.
|
|
531
|
+
|
|
532
|
+
[Submit a community template](https://github.com/BuilderIO/agent-native/issues/new?template=community-template.yml)
|
|
533
|
+
when the repository is ready. Community listings stay separate from the
|
|
534
|
+
smaller first-party catalog and remain maintained by their authors.
|
|
535
|
+
|
|
510
536
|
## Contributing to the framework monorepo {#contributing}
|
|
511
537
|
|
|
512
538
|
### Test unpublished framework changes {#test-unpublished-framework-changes}
|
|
@@ -11,6 +11,13 @@ description: "agent-native template pulls later upstream first-party template ch
|
|
|
11
11
|
|
|
12
12
|
`agent-native template` is the missing half. It re-fetches the template at a newer version, re-applies the exact transforms `create` applied, and merges the result into your app file by file.
|
|
13
13
|
|
|
14
|
+
Community templates are intentionally outside this sync flow. Their
|
|
15
|
+
`agent-native.communityTemplate` metadata records where the installed source
|
|
16
|
+
came from, but it is not first-party scaffold provenance and `agent-native
|
|
17
|
+
template sync` will not pull from that repository. Install a pinned community
|
|
18
|
+
ref when you need a stable starting point, then review and port later upstream
|
|
19
|
+
changes manually.
|
|
20
|
+
|
|
14
21
|
## Quick start {#quick-start}
|
|
15
22
|
|
|
16
23
|
```bash
|
|
@@ -64,7 +64,7 @@ For local development, run the web app with `pnpm dev` and point the desktop tra
|
|
|
64
64
|
|
|
65
65
|
**Chrome extension.** The Agent-Native Clips Chrome extension listing is `https://chromewebstore.google.com/detail/baoipacpchggcdigagnajakiidcgcffn`. If you host your own Clips server, keep the Chrome extension option hidden until your Web Store listing is live. Set `VITE_CLIPS_CHROME_EXTENSION_ENABLED=1` after approval to show the extension beside desktop-app download prompts. Set `VITE_CLIPS_CHROME_EXTENSION_URL` only if you need to override the default listing URL. See [Capturing Everywhere](/docs/template-clips-capture-everywhere#browser-logs-with-the-chrome-extension) for what the extension captures.
|
|
66
66
|
|
|
67
|
-
**Embedded bug reports.** Clips can be embedded into an existing product as a lightweight bug-report launcher. The embedded page collects issue metadata, opens the real recorder in a top-level browser window (browser media capture requires a top-level user gesture), and
|
|
67
|
+
**Embedded bug reports.** Clips can be embedded into an existing product as a lightweight bug-report launcher. The embedded page collects issue metadata, opens the real recorder in a top-level browser window (browser media capture requires a top-level user gesture), and relays a completion message back to the host product when the recording is saved.
|
|
68
68
|
|
|
69
69
|
Use `/bug-report` as the iframe URL. The page accepts either plain query parameters or the `bugReport*`-prefixed parameters that the recorder stores:
|
|
70
70
|
|
|
@@ -76,18 +76,25 @@ Use `/bug-report` as the iframe URL. The page accepts either plain query paramet
|
|
|
76
76
|
></iframe>
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
If the host product already has its own launcher UI, it can open `/record` directly with `bugReport=1`, `intent=bug-report`, `mode=screen`, `surface=browser`, and the same fields prefixed with `bugReport`, such as `bugReportProjectId` and `bugReportReturnUrl`.
|
|
80
|
+
|
|
81
|
+
Supported metadata fields are `projectId`, `title`, `description`, `severity` (`low`, `normal`, `high`, `urgent`), `sourceUrl`, `pageTitle`, `appVersion`, `environment`, `reporterEmail`, `reporterName`, `reporterId`, `metadata` (JSON object), and `returnUrl`. Keep query metadata small and avoid secrets, customer data, and other sensitive values. The recorder redirects to `/bug-report/done` after upload and sends this browser message to `window.opener`; the `/bug-report` iframe relays the same message to its parent:
|
|
80
82
|
|
|
81
83
|
```js
|
|
82
84
|
window.addEventListener("message", (event) => {
|
|
85
|
+
if (event.origin !== "https://clips.example.com") return;
|
|
83
86
|
if (event.data?.type !== "agent-native.clips.bug-report.submitted") return;
|
|
84
|
-
|
|
87
|
+
if (event.data.agentAccessStatus === "ready") {
|
|
88
|
+
console.log(event.data.agentContextUrl, event.data.agentAccessExpiresAt);
|
|
89
|
+
}
|
|
85
90
|
});
|
|
86
91
|
```
|
|
87
92
|
|
|
88
|
-
|
|
93
|
+
Always validate both `event.origin` and `event.source` in the host. The completion payload includes `recordingId`, `recordingUrl`, `embedUrl`, `agentShareUrl`, `agentContextUrl`, `agentAccessExpiresAt`, and an explicit `agentAccessStatus` of `ready` or `unavailable`. When access is ready, `agentContextUrl` is a temporary, scoped URL that lets an agent read recording metadata, timestamped transcript segments, recommended frames and frame URLs, and browser diagnostics without receiving the user's workspace session. Normal agent links expire after two hours; embedded bug-report completions use a seven-day scoped link so asynchronous support tickets can be triaged. Treat an unavailable or expired link as an access failure, not an empty recording. `embedUrl` remains subject to the recording's normal viewer access.
|
|
94
|
+
|
|
95
|
+
Bug-report recordings default to workspace visibility instead of public visibility. The saved `recording_bug_reports` sidecar includes the redacted host metadata, while the recording itself remains the canonical media/transcript resource. URLs have credentials, fragments, and query values removed before storage, and the browser-diagnostics pipeline still omits request/response bodies, headers, and cookies. A popup recording only sees diagnostics emitted inside the Clips window. Use the Chrome extension or attach diagnostics from the host product separately when the agent needs console and network context from the source tab.
|
|
89
96
|
|
|
90
|
-
This
|
|
97
|
+
This pilot requires the reporter to already have an active session in the Clips workspace that owns the recording. The current cross-origin popup cannot preserve its completion channel through a first-time sign-in redirect, so users should sign in to Clips in a separate tab before launching it. A fully anonymous customer-support intake should add a signed intake token that can create, upload, and finalize a recording without granting broad recording access; do not expose the existing owner-scoped upload endpoints directly to anonymous users.
|
|
91
98
|
|
|
92
99
|
## Data model
|
|
93
100
|
|
|
@@ -56,7 +56,7 @@ Server plugins register each connected channel's webhook (Slack, Microsoft Teams
|
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
58
|
npx @agent-native/core@latest create my-platform
|
|
59
|
-
#
|
|
59
|
+
# Dispatch is included automatically. Deselect Chat for Dispatch only, or select domain apps to scaffold alongside it
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
If you prefer to name the template directly instead of using the picker:
|
|
@@ -121,7 +121,7 @@ Live demo: [dispatch.agent-native.com](https://dispatch.agent-native.com).
|
|
|
121
121
|
|
|
122
122
|
```bash
|
|
123
123
|
npx @agent-native/core@latest create my-platform
|
|
124
|
-
#
|
|
124
|
+
# Dispatch is included automatically. Deselect Chat for Dispatch only, or select domain apps to scaffold alongside it
|
|
125
125
|
```
|
|
126
126
|
|
|
127
127
|
Dispatch is almost always scaffolded into a workspace alongside the apps it coordinates — a control plane with nothing to coordinate is just an empty inbox. See [Getting started](/docs/getting-started) for installing dependencies, running the dev server, and creating your first account.
|
package/corpus/core/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.130.0",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -3,6 +3,7 @@ export const ACTION_CHAT_UI_DATA_CHART_RENDERER = "core.data-chart";
|
|
|
3
3
|
export const ACTION_CHAT_UI_DATA_INSIGHTS_RENDERER = "core.data-insights";
|
|
4
4
|
export const ACTION_CHAT_UI_DATA_WIDGET_RENDERER = "core.data-widget";
|
|
5
5
|
export const ACTION_CHAT_UI_INLINE_EXTENSION_RENDERER = "core.inline-extension";
|
|
6
|
+
export const ACTION_CHAT_UI_WORKSPACE_FILE_RENDERER = "core.workspace-file";
|
|
6
7
|
|
|
7
8
|
export interface ActionChatUIConfig {
|
|
8
9
|
/**
|
|
@@ -176,7 +176,11 @@ export function isAgentActionStopError(
|
|
|
176
176
|
|
|
177
177
|
/** HTTP exposure config for an action. */
|
|
178
178
|
export interface ActionHttpConfig {
|
|
179
|
-
/**
|
|
179
|
+
/**
|
|
180
|
+
* Method required from direct HTTP callers. Default: "POST". Use "GET" for
|
|
181
|
+
* read-only actions. Browser action clients use the framework's frontend
|
|
182
|
+
* mutation transport and do not need to repeat this method.
|
|
183
|
+
*/
|
|
180
184
|
method?: "GET" | "POST" | "PUT" | "DELETE";
|
|
181
185
|
/** Override route path under /_agent-native/actions/. Default: action filename. */
|
|
182
186
|
path?: string;
|
|
@@ -498,22 +498,32 @@ class AISDKEngine implements AgentEngine {
|
|
|
498
498
|
yield bufferedStop ?? { type: "stop", reason: "end_turn" };
|
|
499
499
|
} catch (err: any) {
|
|
500
500
|
const timedOut = firstEventAbort.didTimeout();
|
|
501
|
+
// AI SDK wraps exhausted retries in RetryError and keeps the final
|
|
502
|
+
// APICallError on `lastError`. Read classification fields from that
|
|
503
|
+
// provider error so the retry wrapper does not erase transport status.
|
|
504
|
+
const providerError =
|
|
505
|
+
err?.lastError instanceof Error ? err.lastError : err;
|
|
501
506
|
// Surface structured fields from AI SDK's APICallError so
|
|
502
507
|
// isRetryableError can check statusCode/providerRetryable directly
|
|
503
508
|
// rather than keyword-matching the message string.
|
|
504
509
|
const statusCode: number | undefined =
|
|
505
|
-
typeof
|
|
506
|
-
|
|
510
|
+
typeof providerError?.statusCode === "number"
|
|
511
|
+
? providerError.statusCode
|
|
512
|
+
: undefined;
|
|
513
|
+
const rawMessage: string =
|
|
514
|
+
providerError?.message ?? String(providerError);
|
|
507
515
|
// Classify on the bare message — the recorded `errorMessage` carries the
|
|
508
516
|
// cause chain, which is where the real transport failure lives.
|
|
509
517
|
const errorMessage = describeErrorWithCauses(err);
|
|
518
|
+
const normalizedRawMessage = rawMessage.trim().toLowerCase();
|
|
510
519
|
const isConnectionError =
|
|
511
520
|
!timedOut &&
|
|
512
521
|
statusCode === undefined &&
|
|
513
|
-
|
|
522
|
+
(normalizedRawMessage === "connection error." ||
|
|
523
|
+
normalizedRawMessage.startsWith("cannot connect to api:"));
|
|
514
524
|
const providerRetryable: boolean | undefined =
|
|
515
|
-
typeof
|
|
516
|
-
?
|
|
525
|
+
typeof providerError?.isRetryable === "boolean"
|
|
526
|
+
? providerError.isRetryable
|
|
517
527
|
: isConnectionError || timedOut
|
|
518
528
|
? true
|
|
519
529
|
: undefined;
|
|
@@ -157,6 +157,11 @@ export function startAgentHarnessRun(
|
|
|
157
157
|
{
|
|
158
158
|
...(opts.runOptions ?? {}),
|
|
159
159
|
turnId: opts.turnId ?? opts.runOptions?.turnId,
|
|
160
|
+
// A harness adapter (e.g. Claude Code, Codex) owns its own model
|
|
161
|
+
// selection internally and does not expose it here, so `model` is
|
|
162
|
+
// left for the caller to supply via `runOptions` if it knows one.
|
|
163
|
+
// `ownerEmail` is PII and is never passed as `userId`.
|
|
164
|
+
engineName: opts.runOptions?.engineName ?? opts.adapter.name,
|
|
160
165
|
},
|
|
161
166
|
);
|
|
162
167
|
}
|
|
@@ -958,6 +958,7 @@ export interface ProductionAgentOptions {
|
|
|
958
958
|
threadId: string | undefined;
|
|
959
959
|
message: string;
|
|
960
960
|
attachments?: AgentChatAttachment[];
|
|
961
|
+
queuedMessageId?: string;
|
|
961
962
|
}) => void | Promise<void>;
|
|
962
963
|
/**
|
|
963
964
|
* Optional per-template request normalizer. Runs after owner resolution and
|
|
@@ -2021,6 +2022,21 @@ export interface AgentLoopUsage {
|
|
|
2021
2022
|
cacheReadTokens: number;
|
|
2022
2023
|
cacheWriteTokens: number;
|
|
2023
2024
|
model: string;
|
|
2025
|
+
/**
|
|
2026
|
+
* True once the engine reported at least one real `usage` event for this
|
|
2027
|
+
* run. The token fields above start at 0 and are only ever incremented —
|
|
2028
|
+
* when this is not true, those zeros are placeholders for "never
|
|
2029
|
+
* reported", not a measured empty usage, and callers must not treat them
|
|
2030
|
+
* as real counts.
|
|
2031
|
+
*/
|
|
2032
|
+
usageReported?: boolean;
|
|
2033
|
+
/**
|
|
2034
|
+
* Wall-clock epoch ms of the first non-heartbeat engine-stream event seen
|
|
2035
|
+
* across this run (all retries/continuations). Undefined means no event
|
|
2036
|
+
* ever arrived — e.g. the run was killed for silence before the model
|
|
2037
|
+
* produced anything.
|
|
2038
|
+
*/
|
|
2039
|
+
firstEngineEventAtMs?: number;
|
|
2024
2040
|
}
|
|
2025
2041
|
|
|
2026
2042
|
export interface AgentLoopToolCallSummary {
|
|
@@ -4230,6 +4246,7 @@ export async function runAgentLoop(opts: {
|
|
|
4230
4246
|
if (event.type !== "gateway-heartbeat") {
|
|
4231
4247
|
hasReceivedFirstEngineEvent = true;
|
|
4232
4248
|
lastModelStreamProgressAt = Date.now();
|
|
4249
|
+
usage.firstEngineEventAtMs ??= lastModelStreamProgressAt;
|
|
4233
4250
|
}
|
|
4234
4251
|
// In-loop processor seam (stream hook). Each chunk is offered to every
|
|
4235
4252
|
// processor's `processOutputStream` before the loop handles it. A
|
|
@@ -4343,6 +4360,7 @@ export async function runAgentLoop(opts: {
|
|
|
4343
4360
|
usage.outputTokens += eventUsage.outputTokens;
|
|
4344
4361
|
usage.cacheReadTokens += eventUsage.cacheReadTokens;
|
|
4345
4362
|
usage.cacheWriteTokens += eventUsage.cacheWriteTokens;
|
|
4363
|
+
usage.usageReported = true;
|
|
4346
4364
|
opts.onUsage?.(eventUsage);
|
|
4347
4365
|
} else if (event.type === "stop") {
|
|
4348
4366
|
terminalStopReason = event.reason;
|
|
@@ -5959,6 +5977,10 @@ export async function runAgentLoopWithMainChatInternalContinuations(
|
|
|
5959
5977
|
usage.cacheReadTokens += next.cacheReadTokens;
|
|
5960
5978
|
usage.cacheWriteTokens += next.cacheWriteTokens;
|
|
5961
5979
|
usage.model = next.model;
|
|
5980
|
+
if (next.usageReported) usage.usageReported = true;
|
|
5981
|
+
// Keep the earliest attempt's first event — a later continuation
|
|
5982
|
+
// attempt starting fresh must not overwrite genuine first-token timing.
|
|
5983
|
+
usage.firstEngineEventAtMs ??= next.firstEngineEventAtMs;
|
|
5962
5984
|
};
|
|
5963
5985
|
|
|
5964
5986
|
const budgetStartedAt = opts.budgetStartedAt ?? Date.now();
|
|
@@ -7113,6 +7135,7 @@ export function createProductionAgentHandler(
|
|
|
7113
7135
|
threadId,
|
|
7114
7136
|
attachments,
|
|
7115
7137
|
displayMessage,
|
|
7138
|
+
queuedMessageId,
|
|
7116
7139
|
internalContinuation,
|
|
7117
7140
|
turnId: requestTurnId,
|
|
7118
7141
|
model: requestModel,
|
|
@@ -8054,6 +8077,9 @@ export function createProductionAgentHandler(
|
|
|
8054
8077
|
threadId,
|
|
8055
8078
|
message: messageToPersist,
|
|
8056
8079
|
attachments: requestAttachments,
|
|
8080
|
+
...(typeof queuedMessageId === "string" && queuedMessageId.trim()
|
|
8081
|
+
? { queuedMessageId: queuedMessageId.trim() }
|
|
8082
|
+
: {}),
|
|
8057
8083
|
});
|
|
8058
8084
|
}
|
|
8059
8085
|
|
|
@@ -9024,6 +9050,13 @@ export function createProductionAgentHandler(
|
|
|
9024
9050
|
dispatchMode: foregroundSelfChainEligible
|
|
9025
9051
|
? "foreground-self-chain"
|
|
9026
9052
|
: "foreground",
|
|
9053
|
+
// Resolved AFTER stored-model/experiment overrides — the same value
|
|
9054
|
+
// actually sent to the engine, not the raw client-requested model.
|
|
9055
|
+
// No userId here: `ownerEmail` is the only identity known at this
|
|
9056
|
+
// scope and is PII (email), which the terminal event must not carry.
|
|
9057
|
+
model: effectiveModel,
|
|
9058
|
+
engineName: engine.name,
|
|
9059
|
+
attemptCount: backgroundContinuationCount,
|
|
9027
9060
|
},
|
|
9028
9061
|
);
|
|
9029
9062
|
|
|
@@ -239,6 +239,11 @@ export async function runAgentLoopDirectWithSoftTimeout(
|
|
|
239
239
|
usage.cacheReadTokens += next.cacheReadTokens;
|
|
240
240
|
usage.cacheWriteTokens += next.cacheWriteTokens;
|
|
241
241
|
usage.model = next.model;
|
|
242
|
+
// Without these, a retry that never got a usage report merges its zeros
|
|
243
|
+
// over an earlier attempt's real numbers, and telemetry reports an
|
|
244
|
+
// unmeasured run as a measured empty one.
|
|
245
|
+
if (next.usageReported) usage.usageReported = true;
|
|
246
|
+
usage.firstEngineEventAtMs ??= next.firstEngineEventAtMs;
|
|
242
247
|
};
|
|
243
248
|
|
|
244
249
|
const localTurnEvents: AgentChatEvent[] = [];
|