@agent-native/core 0.95.1 → 0.97.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 +6 -0
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +64 -0
- package/corpus/core/docs/content/audit-log.mdx +2 -1
- package/corpus/core/docs/content/automations.mdx +7 -7
- package/corpus/core/docs/content/creating-templates.mdx +1 -1
- package/corpus/core/docs/content/internationalization.mdx +2 -1
- package/corpus/core/docs/content/locales/ar-SA/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/ar-SA/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/ar-SA/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/ar-SA/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/package-lifecycle.mdx +19 -0
- package/corpus/core/docs/content/locales/ar-SA/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/ar-SA/security.mdx +8 -0
- package/corpus/core/docs/content/locales/de-DE/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/de-DE/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/de-DE/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/de-DE/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/package-lifecycle.mdx +22 -0
- package/corpus/core/docs/content/locales/de-DE/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/de-DE/security.mdx +8 -0
- package/corpus/core/docs/content/locales/es-ES/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/es-ES/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/es-ES/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/es-ES/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/package-lifecycle.mdx +22 -0
- package/corpus/core/docs/content/locales/es-ES/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/es-ES/security.mdx +8 -0
- package/corpus/core/docs/content/locales/fr-FR/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/fr-FR/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/fr-FR/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/fr-FR/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/package-lifecycle.mdx +21 -0
- package/corpus/core/docs/content/locales/fr-FR/sandbox-adapters.mdx +19 -8
- package/corpus/core/docs/content/locales/fr-FR/security.mdx +8 -0
- package/corpus/core/docs/content/locales/hi-IN/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/hi-IN/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/hi-IN/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/hi-IN/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/package-lifecycle.mdx +20 -0
- package/corpus/core/docs/content/locales/hi-IN/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/hi-IN/security.mdx +8 -0
- package/corpus/core/docs/content/locales/ja-JP/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/ja-JP/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/ja-JP/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/ja-JP/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/package-lifecycle.mdx +21 -0
- package/corpus/core/docs/content/locales/ja-JP/sandbox-adapters.mdx +17 -6
- package/corpus/core/docs/content/locales/ja-JP/security.mdx +8 -0
- package/corpus/core/docs/content/locales/ko-KR/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/ko-KR/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/ko-KR/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/ko-KR/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/package-lifecycle.mdx +20 -0
- package/corpus/core/docs/content/locales/ko-KR/sandbox-adapters.mdx +17 -6
- package/corpus/core/docs/content/locales/ko-KR/security.mdx +8 -0
- package/corpus/core/docs/content/locales/pt-BR/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/pt-BR/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/pt-BR/getting-started.mdx +7 -1
- package/corpus/core/docs/content/locales/pt-BR/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/package-lifecycle.mdx +21 -0
- package/corpus/core/docs/content/locales/pt-BR/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/pt-BR/security.mdx +8 -0
- package/corpus/core/docs/content/locales/zh-CN/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/zh-CN/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/zh-CN/getting-started.mdx +6 -4
- package/corpus/core/docs/content/locales/zh-CN/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/package-lifecycle.mdx +19 -0
- package/corpus/core/docs/content/locales/zh-CN/sandbox-adapters.mdx +17 -6
- package/corpus/core/docs/content/locales/zh-CN/security.mdx +8 -0
- package/corpus/core/docs/content/locales/zh-TW/audit-log.mdx +2 -1
- package/corpus/core/docs/content/locales/zh-TW/automations.mdx +7 -7
- package/corpus/core/docs/content/locales/zh-TW/getting-started.mdx +6 -4
- package/corpus/core/docs/content/locales/zh-TW/internationalization.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/package-lifecycle.mdx +19 -0
- package/corpus/core/docs/content/locales/zh-TW/sandbox-adapters.mdx +18 -7
- package/corpus/core/docs/content/locales/zh-TW/security.mdx +8 -0
- package/corpus/core/docs/content/package-lifecycle.mdx +51 -0
- package/corpus/core/docs/content/sandbox-adapters.mdx +16 -5
- package/corpus/core/package.json +11 -2
- package/corpus/core/src/a2a/auth-policy.ts +33 -0
- package/corpus/core/src/a2a/client.ts +11 -1
- package/corpus/core/src/agent/durable-background.ts +15 -7
- package/corpus/core/src/agent/production-agent.ts +87 -27
- package/corpus/core/src/agent/run-store.ts +13 -4
- package/corpus/core/src/agent/thread-data-builder.ts +7 -5
- package/corpus/core/src/audit/actions/export-audit-events.ts +162 -0
- package/corpus/core/src/audit/store.ts +8 -3
- package/corpus/core/src/audit/types.ts +3 -0
- package/corpus/core/src/chat-threads/store.ts +20 -1
- package/corpus/core/src/cli/code-agent-executor.ts +1 -0
- package/corpus/core/src/cli/code-agent-runs.ts +14 -0
- package/corpus/core/src/cli/doctor.ts +396 -0
- package/corpus/core/src/cli/index.ts +56 -0
- package/corpus/core/src/cli/info.ts +3 -3
- package/corpus/core/src/cli/package-lifecycle.ts +821 -0
- package/corpus/core/src/client/AgentPanel.tsx +32 -25
- package/corpus/core/src/client/AssistantChat.tsx +36 -20
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +141 -90
- package/corpus/core/src/client/agent-chat-adapter.ts +9 -9
- package/corpus/core/src/client/chat/ChatHistoryList.tsx +404 -0
- package/corpus/core/src/client/chat/index.ts +6 -0
- package/corpus/core/src/client/chat/tool-call-display.tsx +37 -3
- package/corpus/core/src/client/code-agent-chat-adapter.ts +72 -4
- package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +52 -11
- package/corpus/core/src/client/composer/TiptapComposer.tsx +157 -20
- package/corpus/core/src/client/composer/VoiceButton.tsx +28 -0
- package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +5 -0
- package/corpus/core/src/client/conversation/code-agent-transcript.ts +4 -5
- package/corpus/core/src/client/guided-questions.tsx +2 -1
- package/corpus/core/src/client/index.ts +11 -0
- package/corpus/core/src/client/use-chat-threads.ts +10 -1
- package/corpus/core/src/client/voice-provider-status.ts +44 -0
- package/corpus/core/src/code-agents/transcript-normalizer.ts +76 -0
- package/corpus/core/src/deploy/build.ts +12 -11
- package/corpus/core/src/guards/db-tool-scoping.ts +129 -0
- package/corpus/core/src/guards/index.ts +23 -0
- package/corpus/core/src/guards/no-drizzle-push.ts +116 -0
- package/corpus/core/src/guards/no-env-credentials.ts +229 -0
- package/corpus/core/src/guards/no-env-mutation.ts +114 -0
- package/corpus/core/src/guards/no-localhost-fallback.ts +124 -0
- package/corpus/core/src/guards/no-unscoped-credentials.ts +227 -0
- package/corpus/core/src/guards/no-unscoped-queries.ts +834 -0
- package/corpus/core/src/guards/scan-utils.ts +105 -0
- package/corpus/core/src/guards/types.ts +30 -0
- package/corpus/core/src/integrations/a2a-continuation-processor.ts +35 -5
- package/corpus/core/src/integrations/adapters/slack.ts +74 -21
- package/corpus/core/src/integrations/webhook-handler.ts +14 -0
- package/corpus/core/src/localization/default-messages.ts +6 -0
- package/corpus/core/src/observability/hosted-model-experiment.ts +118 -0
- package/corpus/core/src/observability/routes.ts +17 -0
- package/corpus/core/src/observability/store.ts +4 -1
- package/corpus/core/src/observability/traces.ts +41 -2
- package/corpus/core/src/org/accept-pending.ts +9 -1
- package/corpus/core/src/org/migrations.ts +41 -0
- package/corpus/core/src/package-lifecycle/index.ts +1 -0
- package/corpus/core/src/package-lifecycle/manifest.ts +120 -0
- package/corpus/core/src/provider-api/custom-registry.ts +56 -0
- package/corpus/core/src/provider-api/index.ts +2 -0
- package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +19 -1
- package/corpus/core/src/scripts/call-agent.ts +53 -3
- package/corpus/core/src/scripts/chat/search-chats.ts +11 -8
- package/corpus/core/src/secrets/register-framework-secrets.ts +1 -1
- package/corpus/core/src/secrets/storage.ts +47 -27
- package/corpus/core/src/server/action-discovery.ts +4 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +95 -18
- package/corpus/core/src/server/core-routes-plugin.ts +45 -14
- package/corpus/core/src/server/csrf.ts +24 -5
- package/corpus/core/src/server/framework-request-handler.ts +34 -0
- package/corpus/core/src/server/google-realtime-session.ts +1 -36
- package/corpus/core/src/server/poll.ts +24 -2
- package/corpus/core/src/server/realtime-voice.ts +80 -24
- package/corpus/core/src/server/request-origin.ts +63 -0
- package/corpus/core/src/server/transcribe-voice.ts +1 -50
- package/corpus/core/src/server/voice-providers-status.ts +4 -3
- package/corpus/core/src/shared/cache-control.ts +2 -8
- package/corpus/core/src/styles/agent-native.css +1 -0
- package/corpus/core/src/styles/chat-history-list.css +313 -0
- package/corpus/core/src/templates/default/package.json +2 -2
- package/corpus/core/src/templates/headless/package.json +0 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/audit-log/SKILL.md +3 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/automations/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
- package/corpus/core/src/templates/workspace-core/package.json +0 -1
- package/corpus/core/src/templates/workspace-root/package.json +0 -1
- package/corpus/core/src/triggers/actions.ts +11 -3
- package/corpus/core/src/triggers/types.ts +7 -1
- package/corpus/core/src/vite/client.ts +1 -0
- package/corpus/templates/analytics/AGENTS.md +7 -0
- package/corpus/templates/analytics/actions/bigquery.ts +26 -2
- package/corpus/templates/analytics/actions/compose-dashboard.ts +65 -37
- package/corpus/templates/analytics/actions/data-source-status.ts +18 -0
- package/corpus/templates/analytics/actions/mutate-dashboard.ts +73 -24
- package/corpus/templates/analytics/actions/reorder-dashboard-panels.ts +16 -13
- package/corpus/templates/analytics/actions/update-dashboard.ts +53 -42
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +5 -4
- package/corpus/templates/analytics/app/global.css +10 -0
- package/corpus/templates/analytics/app/pages/Ask.tsx +25 -2
- package/corpus/templates/analytics/changelog/2026-07-10-analytics-answers-simple-time-bounded-metrics-without-unnece.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-analytics-chat-reliably-uses-connected-data-sources-across-s.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-chat-threads-now-stay-clear-of-top-actions-and-fade-smoothly.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-context-chips-can-now-be-selected-and-removed-one-at-a-time-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-dashboard-edits-from-the-agent-and-the-ui-at-the-same-time-n.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-the-ask-composer-no-longer-carries-dashboard-or-panel-contex.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-the-ask-section-stays-highlighted-while-its-chat-history-is-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-timed-out-bigquery-jobs-are-now-cancelled-so-they-stop-consu.md +6 -0
- package/corpus/templates/analytics/package.json +1 -2
- package/corpus/templates/analytics/server/lib/bigquery.ts +91 -14
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +154 -11
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +82 -7
- package/corpus/templates/assets/package.json +1 -2
- package/corpus/templates/brain/package.json +1 -2
- package/corpus/templates/calendar/package.json +1 -2
- package/corpus/templates/chat/package.json +1 -2
- package/corpus/templates/clips/changelog/2026-07-10-atomic-view-tracking.md +6 -0
- package/corpus/templates/clips/chrome-extension/package.json +3 -2
- package/corpus/templates/clips/desktop/package.json +6 -4
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +26 -13
- package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +4 -1
- package/corpus/templates/clips/package.json +1 -2
- package/corpus/templates/clips/server/db/schema.ts +29 -17
- package/corpus/templates/clips/server/plugins/db.ts +8 -0
- package/corpus/templates/clips/server/routes/api/view-event.post.ts +260 -105
- package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +16 -0
- package/corpus/templates/content/AGENTS.md +72 -62
- package/corpus/templates/content/actions/_content-database-source-adapters.ts +84 -0
- package/corpus/templates/content/actions/_database-source-utils.ts +206 -96
- package/corpus/templates/content/actions/_notion-database-source-adapter.ts +216 -0
- package/corpus/templates/content/actions/_position-utils.ts +76 -0
- package/corpus/templates/content/actions/_property-utils.ts +31 -20
- package/corpus/templates/content/actions/add-database-item.ts +52 -39
- package/corpus/templates/content/actions/attach-content-database-source.ts +95 -11
- package/corpus/templates/content/actions/change-content-database-source-role.ts +24 -1
- package/corpus/templates/content/actions/configure-document-property.ts +36 -27
- package/corpus/templates/content/actions/create-content-database.ts +40 -30
- package/corpus/templates/content/actions/create-document.ts +39 -32
- package/corpus/templates/content/actions/duplicate-document-property.ts +37 -28
- package/corpus/templates/content/actions/list-notion-database-sources.ts +80 -0
- package/corpus/templates/content/actions/move-document.ts +64 -48
- package/corpus/templates/content/actions/refresh-content-database-source.ts +42 -3
- package/corpus/templates/content/actions/share-local-file-document.ts +36 -27
- package/corpus/templates/content/actions/suggest-source-join-key.ts +39 -16
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +89 -23
- package/corpus/templates/content/app/components/editor/database/settings.tsx +1 -1
- package/corpus/templates/content/app/hooks/use-content-database.ts +18 -1
- package/corpus/templates/content/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/content/app/i18n-data.ts +40 -0
- package/corpus/templates/content/changelog/2026-07-10-failed-row-creation-and-source-attach-now-show-an-error-inst.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-items-added-at-the-same-time-no-longer-end-up-with-identical.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-notion-databases-can-add-read-only-details-to-content-tables.md +6 -0
- package/corpus/templates/content/package.json +1 -2
- package/corpus/templates/content/parity/matrix.md +25 -25
- package/corpus/templates/content/parity/matrix.ts +1 -0
- package/corpus/templates/content/server/routes/api/documents/[id]/move.patch.ts +43 -26
- package/corpus/templates/content/shared/api.ts +16 -1
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +8 -4
- package/corpus/templates/design/AGENTS.md +12 -2
- package/corpus/templates/design/DEVELOPING.md +10 -6
- package/corpus/templates/design/actions/apply-visual-edit.ts +191 -6
- package/corpus/templates/design/actions/duplicate-design.ts +31 -25
- package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +5 -1
- package/corpus/templates/design/changelog/2026-07-10-duplicating-a-design-can-no-longer-produce-a-copy-with-missi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-local-visual-edits-can-now-save-safe-leaf-text-class-and.md +6 -0
- package/corpus/templates/design/package.json +1 -1
- package/corpus/templates/design/shared/local-jsx-visual-edit.ts +388 -0
- package/corpus/templates/dispatch/package.json +1 -2
- package/corpus/templates/forms/actions/patch-form-fields.ts +82 -44
- package/corpus/templates/forms/changelog/2026-07-10-simultaneous-edits-to-different-form-fields-no-longer-overwr.md +6 -0
- package/corpus/templates/forms/package.json +1 -2
- package/corpus/templates/macros/package.json +1 -2
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +3 -1
- package/corpus/templates/mail/changelog/2026-07-10-fixed-calendar-rsvp-buttons-in-emails-firing-duplicate-respo.md +6 -0
- package/corpus/templates/mail/package.json +1 -2
- package/corpus/templates/plan/actions/restore-plan-version.ts +126 -96
- package/corpus/templates/plan/changelog/2026-07-10-restoring-a-plan-version-can-no-longer-leave-a-plan-half-res.md +6 -0
- package/corpus/templates/plan/package.json +1 -2
- package/corpus/templates/plan/server/plans.ts +9 -2
- package/corpus/templates/slides/actions/list-decks.ts +28 -0
- package/corpus/templates/slides/app/components/deck/MermaidRenderer.tsx +41 -26
- package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +4 -8
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +2 -4
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +4 -8
- package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +5 -12
- package/corpus/templates/slides/app/components/editor/HistoryPanel.tsx +3 -6
- package/corpus/templates/slides/app/components/editor/ImageDropPromptPopover.tsx +3 -6
- package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +2 -5
- package/corpus/templates/slides/app/context/DeckContext.tsx +47 -4
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +11 -30
- package/corpus/templates/slides/app/pages/Index.tsx +2 -3
- package/corpus/templates/slides/app/root.tsx +0 -5
- package/corpus/templates/slides/changelog/2026-07-10-deck-lists-load-much-faster-and-no-longer-re-download-slide-.md +6 -0
- package/corpus/templates/slides/package.json +1 -2
- package/dist/a2a/auth-policy.d.ts +19 -0
- package/dist/a2a/auth-policy.d.ts.map +1 -1
- package/dist/a2a/auth-policy.js +32 -0
- package/dist/a2a/auth-policy.js.map +1 -1
- package/dist/a2a/client.d.ts +7 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +2 -1
- package/dist/a2a/client.js.map +1 -1
- package/dist/agent/durable-background.d.ts +8 -5
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +15 -8
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/production-agent.d.ts +6 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +63 -26
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +9 -4
- package/dist/agent/run-store.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts +1 -0
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +6 -5
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/audit/actions/export-audit-events.d.ts +27 -0
- package/dist/audit/actions/export-audit-events.d.ts.map +1 -0
- package/dist/audit/actions/export-audit-events.js +144 -0
- package/dist/audit/actions/export-audit-events.js.map +1 -0
- package/dist/audit/store.d.ts +1 -0
- package/dist/audit/store.d.ts.map +1 -1
- package/dist/audit/store.js +8 -3
- package/dist/audit/store.js.map +1 -1
- package/dist/audit/types.d.ts +3 -0
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js.map +1 -1
- package/dist/chat-threads/store.d.ts +10 -0
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +6 -0
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +1 -0
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/code-agent-runs.d.ts +12 -0
- package/dist/cli/code-agent-runs.d.ts.map +1 -1
- package/dist/cli/code-agent-runs.js +1 -0
- package/dist/cli/code-agent-runs.js.map +1 -1
- package/dist/cli/doctor.d.ts +83 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +277 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/info.js +3 -3
- package/dist/cli/info.js.map +1 -1
- package/dist/cli/package-lifecycle.d.ts +50 -0
- package/dist/cli/package-lifecycle.d.ts.map +1 -0
- package/dist/cli/package-lifecycle.js +560 -0
- package/dist/cli/package-lifecycle.js.map +1 -0
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +3 -3
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +11 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +7 -4
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +83 -10
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.js +7 -3
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/chat/ChatHistoryList.d.ts +88 -0
- package/dist/client/chat/ChatHistoryList.d.ts.map +1 -0
- package/dist/client/chat/ChatHistoryList.js +83 -0
- package/dist/client/chat/ChatHistoryList.js.map +1 -0
- package/dist/client/chat/index.d.ts +1 -0
- package/dist/client/chat/index.d.ts.map +1 -1
- package/dist/client/chat/index.js +1 -0
- package/dist/client/chat/index.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +13 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +10 -2
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/code-agent-chat-adapter.d.ts +17 -1
- package/dist/client/code-agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/code-agent-chat-adapter.js +47 -3
- package/dist/client/code-agent-chat-adapter.js.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts +11 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.js +5 -3
- package/dist/client/composer/RealtimeVoiceMode.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +25 -2
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +96 -5
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts.map +1 -1
- package/dist/client/composer/VoiceButton.js +21 -1
- package/dist/client/composer/VoiceButton.js.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.js +5 -0
- package/dist/client/composer/useRealtimeVoiceMode.js.map +1 -1
- package/dist/client/conversation/code-agent-transcript.d.ts +2 -0
- package/dist/client/conversation/code-agent-transcript.d.ts.map +1 -1
- package/dist/client/conversation/code-agent-transcript.js +3 -5
- package/dist/client/conversation/code-agent-transcript.js.map +1 -1
- package/dist/client/guided-questions.d.ts.map +1 -1
- package/dist/client/guided-questions.js +2 -1
- package/dist/client/guided-questions.js.map +1 -1
- package/dist/client/index.d.ts +3 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +9 -1
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/voice-provider-status.d.ts +10 -0
- package/dist/client/voice-provider-status.d.ts.map +1 -0
- package/dist/client/voice-provider-status.js +32 -0
- package/dist/client/voice-provider-status.js.map +1 -0
- package/dist/code-agents/transcript-normalizer.d.ts +29 -0
- package/dist/code-agents/transcript-normalizer.d.ts.map +1 -1
- package/dist/code-agents/transcript-normalizer.js +55 -0
- package/dist/code-agents/transcript-normalizer.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +13 -11
- package/dist/deploy/build.js.map +1 -1
- package/dist/guards/db-tool-scoping.d.ts +38 -0
- package/dist/guards/db-tool-scoping.d.ts.map +1 -0
- package/dist/guards/db-tool-scoping.js +114 -0
- package/dist/guards/db-tool-scoping.js.map +1 -0
- package/dist/guards/index.d.ts +23 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/index.js +19 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/guards/no-drizzle-push.d.ts +14 -0
- package/dist/guards/no-drizzle-push.d.ts.map +1 -0
- package/dist/guards/no-drizzle-push.js +97 -0
- package/dist/guards/no-drizzle-push.js.map +1 -0
- package/dist/guards/no-env-credentials.d.ts +36 -0
- package/dist/guards/no-env-credentials.d.ts.map +1 -0
- package/dist/guards/no-env-credentials.js +204 -0
- package/dist/guards/no-env-credentials.js.map +1 -0
- package/dist/guards/no-env-mutation.d.ts +23 -0
- package/dist/guards/no-env-mutation.d.ts.map +1 -0
- package/dist/guards/no-env-mutation.js +90 -0
- package/dist/guards/no-env-mutation.js.map +1 -0
- package/dist/guards/no-localhost-fallback.d.ts +30 -0
- package/dist/guards/no-localhost-fallback.d.ts.map +1 -0
- package/dist/guards/no-localhost-fallback.js +105 -0
- package/dist/guards/no-localhost-fallback.js.map +1 -0
- package/dist/guards/no-unscoped-credentials.d.ts +28 -0
- package/dist/guards/no-unscoped-credentials.d.ts.map +1 -0
- package/dist/guards/no-unscoped-credentials.js +199 -0
- package/dist/guards/no-unscoped-credentials.js.map +1 -0
- package/dist/guards/no-unscoped-queries.d.ts +32 -0
- package/dist/guards/no-unscoped-queries.d.ts.map +1 -0
- package/dist/guards/no-unscoped-queries.js +720 -0
- package/dist/guards/no-unscoped-queries.js.map +1 -0
- package/dist/guards/scan-utils.d.ts +28 -0
- package/dist/guards/scan-utils.d.ts.map +1 -0
- package/dist/guards/scan-utils.js +92 -0
- package/dist/guards/scan-utils.js.map +1 -0
- package/dist/guards/types.d.ts +28 -0
- package/dist/guards/types.d.ts.map +1 -0
- package/dist/guards/types.js +11 -0
- package/dist/guards/types.js.map +1 -0
- package/dist/integrations/a2a-continuation-processor.d.ts.map +1 -1
- package/dist/integrations/a2a-continuation-processor.js +25 -5
- package/dist/integrations/a2a-continuation-processor.js.map +1 -1
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +55 -21
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +11 -0
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/localization/default-messages.d.ts +5 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +5 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/hosted-model-experiment.d.ts +39 -0
- package/dist/observability/hosted-model-experiment.d.ts.map +1 -0
- package/dist/observability/hosted-model-experiment.js +90 -0
- package/dist/observability/hosted-model-experiment.js.map +1 -0
- package/dist/observability/routes.d.ts +1 -1
- package/dist/observability/routes.d.ts.map +1 -1
- package/dist/observability/routes.js +16 -0
- package/dist/observability/routes.js.map +1 -1
- package/dist/observability/store.d.ts.map +1 -1
- package/dist/observability/store.js +4 -1
- package/dist/observability/store.js.map +1 -1
- package/dist/observability/traces.d.ts +6 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +28 -2
- package/dist/observability/traces.js.map +1 -1
- package/dist/org/accept-pending.d.ts.map +1 -1
- package/dist/org/accept-pending.js +9 -1
- package/dist/org/accept-pending.js.map +1 -1
- package/dist/org/migrations.d.ts +7 -2
- package/dist/org/migrations.d.ts.map +1 -1
- package/dist/org/migrations.js +41 -0
- package/dist/org/migrations.js.map +1 -1
- package/dist/package-lifecycle/index.d.ts +2 -0
- package/dist/package-lifecycle/index.d.ts.map +1 -0
- package/dist/package-lifecycle/index.js +2 -0
- package/dist/package-lifecycle/index.js.map +1 -0
- package/dist/package-lifecycle/manifest.d.ts +24 -0
- package/dist/package-lifecycle/manifest.d.ts.map +1 -0
- package/dist/package-lifecycle/manifest.js +81 -0
- package/dist/package-lifecycle/manifest.js.map +1 -0
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/custom-registry.d.ts +32 -1
- package/dist/provider-api/custom-registry.d.ts.map +1 -1
- package/dist/provider-api/custom-registry.js +41 -1
- package/dist/provider-api/custom-registry.js.map +1 -1
- package/dist/provider-api/index.d.ts +1 -1
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +1 -1
- package/dist/provider-api/index.js.map +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +19 -1
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +43 -3
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/scripts/chat/search-chats.d.ts +1 -1
- package/dist/scripts/chat/search-chats.d.ts.map +1 -1
- package/dist/scripts/chat/search-chats.js +11 -8
- package/dist/scripts/chat/search-chats.js.map +1 -1
- package/dist/secrets/register-framework-secrets.js +1 -1
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +45 -27
- package/dist/secrets/storage.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +4 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +11 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +74 -19
- 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/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 +36 -12
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/csrf.js +18 -5
- package/dist/server/csrf.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +34 -0
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/google-realtime-session.d.ts.map +1 -1
- package/dist/server/google-realtime-session.js +2 -34
- package/dist/server/google-realtime-session.js.map +1 -1
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +24 -2
- package/dist/server/poll.js.map +1 -1
- package/dist/server/realtime-voice.d.ts.map +1 -1
- package/dist/server/realtime-voice.js +64 -21
- package/dist/server/realtime-voice.js.map +1 -1
- package/dist/server/request-origin.d.ts +10 -0
- package/dist/server/request-origin.d.ts.map +1 -0
- package/dist/server/request-origin.js +60 -0
- package/dist/server/request-origin.js.map +1 -0
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +2 -48
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/server/voice-providers-status.d.ts.map +1 -1
- package/dist/server/voice-providers-status.js +2 -3
- package/dist/server/voice-providers-status.js.map +1 -1
- package/dist/shared/cache-control.d.ts +4 -6
- package/dist/shared/cache-control.d.ts.map +1 -1
- package/dist/shared/cache-control.js +2 -7
- package/dist/shared/cache-control.js.map +1 -1
- package/dist/styles/agent-native.css +1 -0
- package/dist/styles/chat-history-list.css +313 -0
- package/dist/templates/default/package.json +2 -2
- package/dist/templates/headless/package.json +0 -1
- package/dist/templates/workspace-core/.agents/skills/audit-log/SKILL.md +3 -0
- package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
- package/dist/templates/workspace-core/package.json +0 -1
- package/dist/templates/workspace-root/package.json +0 -1
- package/dist/triggers/actions.d.ts.map +1 -1
- package/dist/triggers/actions.js +8 -3
- package/dist/triggers/actions.js.map +1 -1
- package/dist/triggers/types.d.ts +7 -1
- package/dist/triggers/types.d.ts.map +1 -1
- package/dist/triggers/types.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +1 -0
- package/dist/vite/client.js.map +1 -1
- package/docs/content/audit-log.mdx +2 -1
- package/docs/content/automations.mdx +7 -7
- package/docs/content/creating-templates.mdx +1 -1
- package/docs/content/internationalization.mdx +2 -1
- package/docs/content/locales/ar-SA/audit-log.mdx +2 -1
- package/docs/content/locales/ar-SA/automations.mdx +7 -7
- package/docs/content/locales/ar-SA/getting-started.mdx +7 -1
- package/docs/content/locales/ar-SA/internationalization.mdx +1 -1
- package/docs/content/locales/ar-SA/package-lifecycle.mdx +19 -0
- package/docs/content/locales/ar-SA/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/ar-SA/security.mdx +8 -0
- package/docs/content/locales/de-DE/audit-log.mdx +2 -1
- package/docs/content/locales/de-DE/automations.mdx +7 -7
- package/docs/content/locales/de-DE/getting-started.mdx +7 -1
- package/docs/content/locales/de-DE/internationalization.mdx +1 -1
- package/docs/content/locales/de-DE/package-lifecycle.mdx +22 -0
- package/docs/content/locales/de-DE/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/de-DE/security.mdx +8 -0
- package/docs/content/locales/es-ES/audit-log.mdx +2 -1
- package/docs/content/locales/es-ES/automations.mdx +7 -7
- package/docs/content/locales/es-ES/getting-started.mdx +7 -1
- package/docs/content/locales/es-ES/internationalization.mdx +1 -1
- package/docs/content/locales/es-ES/package-lifecycle.mdx +22 -0
- package/docs/content/locales/es-ES/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/es-ES/security.mdx +8 -0
- package/docs/content/locales/fr-FR/audit-log.mdx +2 -1
- package/docs/content/locales/fr-FR/automations.mdx +7 -7
- package/docs/content/locales/fr-FR/getting-started.mdx +7 -1
- package/docs/content/locales/fr-FR/internationalization.mdx +1 -1
- package/docs/content/locales/fr-FR/package-lifecycle.mdx +21 -0
- package/docs/content/locales/fr-FR/sandbox-adapters.mdx +19 -8
- package/docs/content/locales/fr-FR/security.mdx +8 -0
- package/docs/content/locales/hi-IN/audit-log.mdx +2 -1
- package/docs/content/locales/hi-IN/automations.mdx +7 -7
- package/docs/content/locales/hi-IN/getting-started.mdx +7 -1
- package/docs/content/locales/hi-IN/internationalization.mdx +1 -1
- package/docs/content/locales/hi-IN/package-lifecycle.mdx +20 -0
- package/docs/content/locales/hi-IN/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/hi-IN/security.mdx +8 -0
- package/docs/content/locales/ja-JP/audit-log.mdx +2 -1
- package/docs/content/locales/ja-JP/automations.mdx +7 -7
- package/docs/content/locales/ja-JP/getting-started.mdx +7 -1
- package/docs/content/locales/ja-JP/internationalization.mdx +1 -1
- package/docs/content/locales/ja-JP/package-lifecycle.mdx +21 -0
- package/docs/content/locales/ja-JP/sandbox-adapters.mdx +17 -6
- package/docs/content/locales/ja-JP/security.mdx +8 -0
- package/docs/content/locales/ko-KR/audit-log.mdx +2 -1
- package/docs/content/locales/ko-KR/automations.mdx +7 -7
- package/docs/content/locales/ko-KR/getting-started.mdx +7 -1
- package/docs/content/locales/ko-KR/internationalization.mdx +1 -1
- package/docs/content/locales/ko-KR/package-lifecycle.mdx +20 -0
- package/docs/content/locales/ko-KR/sandbox-adapters.mdx +17 -6
- package/docs/content/locales/ko-KR/security.mdx +8 -0
- package/docs/content/locales/pt-BR/audit-log.mdx +2 -1
- package/docs/content/locales/pt-BR/automations.mdx +7 -7
- package/docs/content/locales/pt-BR/getting-started.mdx +7 -1
- package/docs/content/locales/pt-BR/internationalization.mdx +1 -1
- package/docs/content/locales/pt-BR/package-lifecycle.mdx +21 -0
- package/docs/content/locales/pt-BR/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/pt-BR/security.mdx +8 -0
- package/docs/content/locales/zh-CN/audit-log.mdx +2 -1
- package/docs/content/locales/zh-CN/automations.mdx +7 -7
- package/docs/content/locales/zh-CN/getting-started.mdx +6 -4
- package/docs/content/locales/zh-CN/internationalization.mdx +1 -1
- package/docs/content/locales/zh-CN/package-lifecycle.mdx +19 -0
- package/docs/content/locales/zh-CN/sandbox-adapters.mdx +17 -6
- package/docs/content/locales/zh-CN/security.mdx +8 -0
- package/docs/content/locales/zh-TW/audit-log.mdx +2 -1
- package/docs/content/locales/zh-TW/automations.mdx +7 -7
- package/docs/content/locales/zh-TW/getting-started.mdx +6 -4
- package/docs/content/locales/zh-TW/internationalization.mdx +1 -1
- package/docs/content/locales/zh-TW/package-lifecycle.mdx +19 -0
- package/docs/content/locales/zh-TW/sandbox-adapters.mdx +18 -7
- package/docs/content/locales/zh-TW/security.mdx +8 -0
- package/docs/content/package-lifecycle.mdx +51 -0
- package/docs/content/sandbox-adapters.mdx +16 -5
- package/package.json +12 -3
- package/src/templates/default/package.json +2 -2
- package/src/templates/headless/package.json +0 -1
- package/src/templates/workspace-core/.agents/skills/audit-log/SKILL.md +3 -0
- package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
- package/src/templates/workspace-core/package.json +0 -1
- package/src/templates/workspace-root/package.json +0 -1
- package/corpus/templates/slides/app/components/ui/toast.tsx +0 -1
- package/corpus/templates/slides/app/components/ui/toaster.tsx +0 -1
- package/corpus/templates/slides/app/hooks/use-toast.ts +0 -1
|
@@ -415,3 +415,11 @@ AGENT_NATIVE_KEYS_WORKSPACE_FALLBACK=1
|
|
|
415
415
|
```
|
|
416
416
|
|
|
417
417
|
無論此標誌如何,工作空間範圍的秘密寫入仍然需要組織所有者/管理員角色。
|
|
418
|
+
|
|
419
|
+
## 下一步
|
|
420
|
+
|
|
421
|
+
- [**Authentication**](/docs/authentication) — 本頁所依賴的驗證模式、cookie realm 和工作階段細節
|
|
422
|
+
- [**Multi-Tenancy**](/docs/multi-tenancy) — `org_id` 範圍界定背後的組織成員模型
|
|
423
|
+
- [**Sharing**](/docs/sharing) — 應用於可共用資源的 `ownableColumns()` 和存取守衛模式
|
|
424
|
+
- [**Messaging**](/docs/messaging#env-vars) — 上方清單中提到的每個整合的 webhook 簽名金鑰
|
|
425
|
+
- [**Deployment**](/docs/deployment) — 此清單假定已設定的正式環境變數
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Package Lifecycle
|
|
3
|
+
description: Inspect, add, and eject manifest-driven Agent Native packages safely.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Package lifecycle
|
|
7
|
+
|
|
8
|
+
Reusable Agent Native packages can publish a versioned static
|
|
9
|
+
`agent-native.package.json`. The CLI reads that JSON without executing package
|
|
10
|
+
code and reports the package's actions, schema entry point, skills, secret key
|
|
11
|
+
names, and peer providers.
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
agent-native package inspect @agent-native/scheduling
|
|
15
|
+
agent-native package inspect @agent-native/scheduling --json
|
|
16
|
+
agent-native package add @agent-native/scheduling
|
|
17
|
+
agent-native package add @agent-native/scheduling --apply
|
|
18
|
+
agent-native package eject @agent-native/scheduling --apply
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`add` and `eject` are dry-run by default. `--apply` is required before the CLI
|
|
22
|
+
writes files or runs the detected package manager. Use `--root` for a different
|
|
23
|
+
project root; at a workspace root, pass `--app <name>` to select the target app.
|
|
24
|
+
|
|
25
|
+
## Safety and idempotency
|
|
26
|
+
|
|
27
|
+
Before writing, the CLI resolves every contribution and refuses missing or
|
|
28
|
+
ambiguous layouts, existing files with different content, escaping manifest
|
|
29
|
+
paths, and eject targets that already exist. It stages the complete write set,
|
|
30
|
+
uses atomic renames, snapshots package and lock files, and rolls back if the
|
|
31
|
+
package-manager install fails. A provenance record under
|
|
32
|
+
`.agent-native/packages/` makes a repeated add a no-op when generated files are
|
|
33
|
+
unchanged.
|
|
34
|
+
|
|
35
|
+
Inspection and registry staging use static package metadata only. The CLI never
|
|
36
|
+
imports a package's JavaScript manifest and passes `--ignore-scripts` while
|
|
37
|
+
downloading an uninstalled package archive. Reports show credential key names,
|
|
38
|
+
never credential values.
|
|
39
|
+
|
|
40
|
+
## Scheduling pilot
|
|
41
|
+
|
|
42
|
+
`@agent-native/scheduling` is the first package with the generic manifest. Add
|
|
43
|
+
creates action re-export stubs, adds the schema export, copies its agent skills,
|
|
44
|
+
records the dependency, and reports required secret names and providers.
|
|
45
|
+
Eject copies the published Scheduling source to `packages/scheduling`, switches
|
|
46
|
+
the dependency to `workspace:*`, and preserves canonical
|
|
47
|
+
`@agent-native/scheduling` imports so workspace resolution selects the local
|
|
48
|
+
copy.
|
|
49
|
+
|
|
50
|
+
Ejecting other packages, including Pinpoint, is intentionally refused until the
|
|
51
|
+
Scheduling pilot has proven the contract.
|
|
@@ -106,6 +106,10 @@ The seam lives in core at `packages/core/src/coding-tools/sandbox/` — `adapter
|
|
|
106
106
|
path: "index.ts",
|
|
107
107
|
note: "selection: getSandboxAdapter() / registerSandboxAdapter()",
|
|
108
108
|
},
|
|
109
|
+
{
|
|
110
|
+
path: "background.ts",
|
|
111
|
+
note: "durable queue marker and background execution lifecycle",
|
|
112
|
+
},
|
|
109
113
|
{
|
|
110
114
|
path: "local-child-process-adapter.ts",
|
|
111
115
|
note: "the default backend — locked-down Node child process",
|
|
@@ -189,12 +193,17 @@ registerSandboxAdapter(adapter) → AGENT_NATIVE_SANDBOX → local default
|
|
|
189
193
|
|
|
190
194
|
#### `AGENT_NATIVE_SANDBOX` env var {#env}
|
|
191
195
|
|
|
192
|
-
Selects a built-in adapter by id.
|
|
196
|
+
Selects a built-in adapter by id. Both `local` (the default) and `background` are wired; unknown values fall back to local rather than failing the run.
|
|
193
197
|
|
|
194
198
|
```bash
|
|
195
|
-
AGENT_NATIVE_SANDBOX=local
|
|
199
|
+
AGENT_NATIVE_SANDBOX=local # the default — explicit
|
|
200
|
+
AGENT_NATIVE_SANDBOX=background # enqueue every run-code call durably
|
|
196
201
|
```
|
|
197
202
|
|
|
203
|
+
`background` stores the raw code in `sandbox_executions` and returns an `executionId` with `status: "queued"` immediately. A signed self-dispatch starts a fresh serverless invocation; long-lived Node starts detached in-process work; status polling and the periodic sweep redrive lost dispatches or expired leases. Poll the execution later for its persisted result.
|
|
204
|
+
|
|
205
|
+
`BackgroundQueueAdapter` is a durable queue marker, not the executor. Queued work uses a registered non-queued execution adapter when one is available; otherwise it falls back to the local child process. Selecting `background` alone does not provide remote or container isolation, and it does not make an edge runtime compatible with `node:child_process`.
|
|
206
|
+
|
|
198
207
|
#### `registerSandboxAdapter()` {#register}
|
|
199
208
|
|
|
200
209
|
A host process overrides the backend for all subsequent `run-code` invocations through the seam's `index.ts` — for example, to run every call in a remote container:
|
|
@@ -219,13 +228,15 @@ registerSandboxAdapter(new RemoteSandboxAdapter());
|
|
|
219
228
|
|
|
220
229
|
### The seam for a durable runner {#durable}
|
|
221
230
|
|
|
222
|
-
|
|
231
|
+
The built-in `background` adapter already provides durable queuing and a fresh execution budget, while actual execution still uses a non-queued adapter or the local child-process fallback. A separately registered remote or isolated adapter (Docker or a Vercel-Sandbox-style runner) can provide a different execution boundary and can also execute per-call background work.
|
|
232
|
+
|
|
233
|
+
Such an adapter would:
|
|
223
234
|
|
|
224
235
|
1. Implement `SandboxAdapter.run` against an out-of-process runtime.
|
|
225
236
|
2. Tunnel the loopback bridge (or proxy bridge calls back to the parent).
|
|
226
|
-
3.
|
|
237
|
+
3. Supply remote or container isolation independently of the shipped durable queue lifecycle.
|
|
227
238
|
|
|
228
|
-
Register it
|
|
239
|
+
Register it programmatically via `registerSandboxAdapter()`. The agent loop and `run-code.ts` do not need to change.
|
|
229
240
|
|
|
230
241
|
<Callout id="doc-block-adap1tip" tone="info">
|
|
231
242
|
|
package/corpus/core/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.97.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": {
|
|
@@ -101,6 +101,10 @@
|
|
|
101
101
|
"./shared": "./dist/shared/index.js",
|
|
102
102
|
"./voice": "./dist/voice/index.js",
|
|
103
103
|
"./scripts": "./dist/scripts/index.js",
|
|
104
|
+
"./guards": {
|
|
105
|
+
"types": "./dist/guards/index.d.ts",
|
|
106
|
+
"default": "./dist/guards/index.js"
|
|
107
|
+
},
|
|
104
108
|
"./application-state": "./dist/application-state/index.js",
|
|
105
109
|
"./settings": "./dist/settings/index.js",
|
|
106
110
|
"./localization": "./dist/localization/index.js",
|
|
@@ -207,6 +211,10 @@
|
|
|
207
211
|
"default": "./dist/local-artifacts/index.js"
|
|
208
212
|
},
|
|
209
213
|
"./workspace-files": "./dist/workspace-files/index.js",
|
|
214
|
+
"./package-lifecycle": {
|
|
215
|
+
"types": "./dist/package-lifecycle/index.d.ts",
|
|
216
|
+
"default": "./dist/package-lifecycle/index.js"
|
|
217
|
+
},
|
|
210
218
|
"./code-agents": "./dist/code-agents/index.js",
|
|
211
219
|
"./code-agents/transcript-normalizer": "./dist/code-agents/transcript-normalizer.js",
|
|
212
220
|
"./workspace-connections": "./dist/workspace-connections/index.js",
|
|
@@ -219,6 +227,8 @@
|
|
|
219
227
|
"./terminal/server": "./dist/terminal/index.js",
|
|
220
228
|
"./tailwind": "./dist/tailwind.preset.js",
|
|
221
229
|
"./styles/agent-native.css": "./dist/styles/agent-native.css",
|
|
230
|
+
"./styles/agent-conversation.css": "./dist/styles/agent-conversation.css",
|
|
231
|
+
"./styles/chat-history-list.css": "./dist/styles/chat-history-list.css",
|
|
222
232
|
"./agent/engine": "./dist/agent/engine/index.js",
|
|
223
233
|
"./agent/harness": "./dist/agent/harness/index.js",
|
|
224
234
|
"./eval": "./dist/eval/index.js",
|
|
@@ -371,7 +381,6 @@
|
|
|
371
381
|
"react-dom": "^19.2.7",
|
|
372
382
|
"react-router": "^8.1.0",
|
|
373
383
|
"tailwindcss": "catalog:",
|
|
374
|
-
"typescript": "catalog:",
|
|
375
384
|
"typescript-7": "catalog:",
|
|
376
385
|
"vite": "catalog:",
|
|
377
386
|
"vitest": "^4.1.5",
|
|
@@ -31,3 +31,36 @@ export function hasConfiguredA2ASecret(): boolean {
|
|
|
31
31
|
export function shouldAdvertiseJwtA2AAuth(): boolean {
|
|
32
32
|
return hasConfiguredA2ASecret() || isA2AProductionRuntime();
|
|
33
33
|
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* True only when unsigned internal self-dispatch is acceptable: no A2A_SECRET
|
|
37
|
+
* is configured AND we can positively identify a local/dev runtime. Everything
|
|
38
|
+
* else — production, or any UNRECOGNIZED deployed/networked host — must fail
|
|
39
|
+
* closed and require A2A_SECRET. `loopback` should be whether the inbound
|
|
40
|
+
* request arrived over the loopback interface (127.0.0.1/::1); callers that
|
|
41
|
+
* cannot determine the peer address pass `false`.
|
|
42
|
+
*
|
|
43
|
+
* NODE_ENV alone is deliberately NOT a trust grant: a self-hosted deployment
|
|
44
|
+
* that doesn't set NODE_ENV=production and isn't recognized by
|
|
45
|
+
* `isA2AProductionRuntime()` (a bare Docker/VPS/K8s pod) must still fail
|
|
46
|
+
* closed unless the request actually came from loopback or the explicit
|
|
47
|
+
* opt-in flag is set.
|
|
48
|
+
*/
|
|
49
|
+
export function isTrustedLocalRuntime(opts: { loopback: boolean }): boolean {
|
|
50
|
+
if (isA2AProductionRuntime()) return false;
|
|
51
|
+
if (process.env.A2A_ALLOW_UNSIGNED_INTERNAL === "1") return true;
|
|
52
|
+
return opts.loopback === true;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** True if a socket peer address is a loopback/local address. */
|
|
56
|
+
export function isLoopbackAddress(addr: string | undefined | null): boolean {
|
|
57
|
+
if (!addr) return false;
|
|
58
|
+
const a = addr.trim();
|
|
59
|
+
return (
|
|
60
|
+
a === "127.0.0.1" ||
|
|
61
|
+
a === "::1" ||
|
|
62
|
+
a === "::ffff:127.0.0.1" ||
|
|
63
|
+
a.startsWith("127.") ||
|
|
64
|
+
a === "localhost"
|
|
65
|
+
);
|
|
66
|
+
}
|
|
@@ -550,6 +550,13 @@ export async function callAgent(
|
|
|
550
550
|
timeoutMs?: number;
|
|
551
551
|
/** Poll interval for async calls. Primarily useful for tests/retries. */
|
|
552
552
|
pollIntervalMs?: number;
|
|
553
|
+
/**
|
|
554
|
+
* Return receiver-verified artifact text from the last polled task when
|
|
555
|
+
* the call times out. Defaults to true for backwards compatibility.
|
|
556
|
+
* Callers that can continue polling the remote task separately should set
|
|
557
|
+
* this to false so the A2ATaskTimeoutError (and its taskId) is preserved.
|
|
558
|
+
*/
|
|
559
|
+
returnRecoverableArtifactsOnTimeout?: boolean;
|
|
553
560
|
/**
|
|
554
561
|
* Called with each successfully polled task while an async call is still
|
|
555
562
|
* in flight (see `A2AClient.sendAndWait`). Fires once per real poll
|
|
@@ -614,7 +621,10 @@ export async function callAgent(
|
|
|
614
621
|
|
|
615
622
|
return "";
|
|
616
623
|
} catch (err) {
|
|
617
|
-
if (
|
|
624
|
+
if (
|
|
625
|
+
opts?.returnRecoverableArtifactsOnTimeout !== false &&
|
|
626
|
+
err instanceof A2ATaskTimeoutError
|
|
627
|
+
) {
|
|
618
628
|
const recoverableText = extractRecoverableArtifactText(err.lastTask);
|
|
619
629
|
if (recoverableText) return recoverableText;
|
|
620
630
|
}
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
*/
|
|
40
40
|
import {
|
|
41
41
|
hasConfiguredA2ASecret,
|
|
42
|
-
|
|
42
|
+
isTrustedLocalRuntime,
|
|
43
43
|
} from "../a2a/auth-policy.js";
|
|
44
44
|
import {
|
|
45
45
|
extractBearerToken,
|
|
@@ -469,10 +469,13 @@ export function extractProcessRunId(body: unknown): string | null {
|
|
|
469
469
|
*
|
|
470
470
|
* Auth policy mirrors the agent-teams processor exactly:
|
|
471
471
|
* - `A2A_SECRET` set → require a valid `verifyInternalToken(runId, token)`.
|
|
472
|
-
* - no secret
|
|
473
|
-
*
|
|
474
|
-
*
|
|
475
|
-
*
|
|
472
|
+
* - no secret → require `isTrustedLocalRuntime({ loopback })` (see
|
|
473
|
+
* auth-policy.ts): refuse (503) unless `A2A_ALLOW_UNSIGNED_INTERNAL=1` is
|
|
474
|
+
* set. This function has no h3 `event` of its own, so callers that CAN
|
|
475
|
+
* see the inbound socket peer (the route handler, which has the event)
|
|
476
|
+
* should compute `loopback` from it and pass it through; callers that
|
|
477
|
+
* can't determine the peer address should omit it (defaults to `false`
|
|
478
|
+
* — never trust unsigned dispatch without an explicit opt-in).
|
|
476
479
|
*
|
|
477
480
|
* Extracted from the route handler so the auth + marker-prep decision is unit
|
|
478
481
|
* testable without booting the whole Nitro plugin. The route only adds body
|
|
@@ -481,6 +484,7 @@ export function extractProcessRunId(body: unknown): string | null {
|
|
|
481
484
|
export function prepareProcessRunRequest(
|
|
482
485
|
body: unknown,
|
|
483
486
|
authHeader: string | undefined,
|
|
487
|
+
loopback: boolean = false,
|
|
484
488
|
): ProcessRunPreparation {
|
|
485
489
|
if (!body || typeof body !== "object") {
|
|
486
490
|
return {
|
|
@@ -514,12 +518,16 @@ export function prepareProcessRunRequest(
|
|
|
514
518
|
runId,
|
|
515
519
|
};
|
|
516
520
|
}
|
|
517
|
-
} else if (
|
|
521
|
+
} else if (!isTrustedLocalRuntime({ loopback })) {
|
|
522
|
+
// Callers that can see the h3 `event` (the route handler) pass the real
|
|
523
|
+
// loopback signal; callers without one default to non-loopback. Unsigned
|
|
524
|
+
// dispatch is still allowed via A2A_ALLOW_UNSIGNED_INTERNAL=1 for trusted
|
|
525
|
+
// local/dev setups; see auth-policy.ts `isTrustedLocalRuntime`.
|
|
518
526
|
return {
|
|
519
527
|
ok: false,
|
|
520
528
|
status: 503,
|
|
521
529
|
error:
|
|
522
|
-
"Agent chat background processor not configured — set A2A_SECRET on this deployment.",
|
|
530
|
+
"Agent chat background processor not configured — set A2A_SECRET on this deployment (or A2A_ALLOW_UNSIGNED_INTERNAL=1 for trusted local dev).",
|
|
523
531
|
runId,
|
|
524
532
|
};
|
|
525
533
|
}
|
|
@@ -1762,6 +1762,12 @@ export type AgentLoopFinalResponseGuardResult =
|
|
|
1762
1762
|
| {
|
|
1763
1763
|
retryMessage: string;
|
|
1764
1764
|
fallbackMessage?: string;
|
|
1765
|
+
/**
|
|
1766
|
+
* Number of rejected text-only answers the model may correct before the
|
|
1767
|
+
* fallback is emitted. Defaults to one and is capped to keep a broken
|
|
1768
|
+
* guard/model combination from looping indefinitely.
|
|
1769
|
+
*/
|
|
1770
|
+
maxRetries?: number;
|
|
1765
1771
|
};
|
|
1766
1772
|
|
|
1767
1773
|
export type AgentLoopFinalResponseGuard = (
|
|
@@ -3641,7 +3647,11 @@ export async function runAgentLoop(opts: {
|
|
|
3641
3647
|
typeof guard === "string" ? guard : guard.retryMessage;
|
|
3642
3648
|
const fallbackMessage =
|
|
3643
3649
|
typeof guard === "string" ? guard : guard.fallbackMessage;
|
|
3644
|
-
|
|
3650
|
+
const maxGuardRetries =
|
|
3651
|
+
typeof guard === "string"
|
|
3652
|
+
? 1
|
|
3653
|
+
: Math.max(0, Math.min(3, Math.trunc(guard.maxRetries ?? 1)));
|
|
3654
|
+
if (finalGuardRetries < maxGuardRetries) {
|
|
3645
3655
|
finalGuardRetries += 1;
|
|
3646
3656
|
send({ type: "clear" });
|
|
3647
3657
|
messages.push({
|
|
@@ -6160,21 +6170,82 @@ export function createProductionAgentHandler(
|
|
|
6160
6170
|
// DIAGNOSTIC-ONLY: bracket stored-model resolution (getStoredModelForEngine
|
|
6161
6171
|
// settings read).
|
|
6162
6172
|
workerStep("model_start");
|
|
6173
|
+
const storedModel =
|
|
6174
|
+
requestModel == null && configuredModel == null
|
|
6175
|
+
? await getStoredModelForEngine(engine, { appId: options.appId })
|
|
6176
|
+
: undefined;
|
|
6163
6177
|
const modelCandidate =
|
|
6164
|
-
requestModel ??
|
|
6165
|
-
configuredModel ??
|
|
6166
|
-
(await getStoredModelForEngine(engine, { appId: options.appId })) ??
|
|
6167
|
-
engine.defaultModel;
|
|
6178
|
+
requestModel ?? configuredModel ?? storedModel ?? engine.defaultModel;
|
|
6168
6179
|
// DIAGNOSTIC-ONLY: stored-model resolution finished.
|
|
6169
6180
|
workerStep("model_done");
|
|
6170
6181
|
const model = normalizeModelForEngine(engine, modelCandidate);
|
|
6182
|
+
let effectiveModel = model;
|
|
6183
|
+
let modelSelectionSource:
|
|
6184
|
+
| "request"
|
|
6185
|
+
| "configured"
|
|
6186
|
+
| "stored"
|
|
6187
|
+
| "default"
|
|
6188
|
+
| "experiment" =
|
|
6189
|
+
requestModel != null
|
|
6190
|
+
? "request"
|
|
6191
|
+
: configuredModel != null
|
|
6192
|
+
? "configured"
|
|
6193
|
+
: storedModel != null
|
|
6194
|
+
? "stored"
|
|
6195
|
+
: "default";
|
|
6196
|
+
let experimentAssignments: Array<{
|
|
6197
|
+
experimentId: string;
|
|
6198
|
+
variantId: string;
|
|
6199
|
+
}> = [];
|
|
6200
|
+
|
|
6201
|
+
// Database-backed experiments remain available to app operators. A
|
|
6202
|
+
// platform-wide hosted rollout is layered in only when no explicit or
|
|
6203
|
+
// persisted model selection exists, and only on the cross-provider Builder
|
|
6204
|
+
// engine. This preserves the model picker's user intent.
|
|
6205
|
+
try {
|
|
6206
|
+
if (ownerEmail) {
|
|
6207
|
+
const { resolveActiveExperimentConfig } =
|
|
6208
|
+
await import("../observability/experiments.js");
|
|
6209
|
+
const expConfig = await resolveActiveExperimentConfig(ownerEmail);
|
|
6210
|
+
if (expConfig) {
|
|
6211
|
+
experimentAssignments = [...expConfig.assignments];
|
|
6212
|
+
if (typeof expConfig.configs.model === "string") {
|
|
6213
|
+
effectiveModel = normalizeModelForEngine(
|
|
6214
|
+
engine,
|
|
6215
|
+
expConfig.configs.model,
|
|
6216
|
+
);
|
|
6217
|
+
modelSelectionSource = "experiment";
|
|
6218
|
+
}
|
|
6219
|
+
}
|
|
6220
|
+
|
|
6221
|
+
if (modelSelectionSource === "default") {
|
|
6222
|
+
const { resolveHostedDefaultModelExperiment } =
|
|
6223
|
+
await import("../observability/hosted-model-experiment.js");
|
|
6224
|
+
const hostedExperiment = resolveHostedDefaultModelExperiment({
|
|
6225
|
+
userId: ownerEmail,
|
|
6226
|
+
engineName: engine.name,
|
|
6227
|
+
isDefaultModelSelection: true,
|
|
6228
|
+
supportedModels: engine.supportedModels,
|
|
6229
|
+
});
|
|
6230
|
+
if (hostedExperiment) {
|
|
6231
|
+
effectiveModel = hostedExperiment.model;
|
|
6232
|
+
experimentAssignments.push(hostedExperiment.assignment);
|
|
6233
|
+
modelSelectionSource = "experiment";
|
|
6234
|
+
}
|
|
6235
|
+
}
|
|
6236
|
+
}
|
|
6237
|
+
} catch {
|
|
6238
|
+
// Experiments are best-effort. Model resolution must keep working if the
|
|
6239
|
+
// observability tables are unavailable during startup or migration.
|
|
6240
|
+
}
|
|
6241
|
+
|
|
6171
6242
|
const reasoningEffort = resolveAgentRequestReasoningEffort({
|
|
6172
|
-
model,
|
|
6243
|
+
model: effectiveModel,
|
|
6173
6244
|
requestEffort,
|
|
6174
6245
|
configuredEffort: options.reasoningEffort,
|
|
6175
6246
|
});
|
|
6176
6247
|
|
|
6177
|
-
options.onEngineResolved?.(engine,
|
|
6248
|
+
options.onEngineResolved?.(engine, effectiveModel);
|
|
6178
6249
|
|
|
6179
6250
|
// One-line per-turn resolution log so it's obvious in dev which engine
|
|
6180
6251
|
// is actually handling the request. `requestEngine` is what the client
|
|
@@ -6182,7 +6253,7 @@ export function createProductionAgentHandler(
|
|
|
6182
6253
|
// Divergence between them is the usual cause of "status says builder but
|
|
6183
6254
|
// no [builder-engine] log lines appear" confusion.
|
|
6184
6255
|
console.log(
|
|
6185
|
-
`[agent-chat] resolved engine=${engine.name} model=${
|
|
6256
|
+
`[agent-chat] resolved engine=${engine.name} model=${effectiveModel} requestEngine=${requestEngine ?? "(none)"} modelSource=${modelSelectionSource}`,
|
|
6186
6257
|
);
|
|
6187
6258
|
|
|
6188
6259
|
if (
|
|
@@ -7487,25 +7558,6 @@ export function createProductionAgentHandler(
|
|
|
7487
7558
|
}
|
|
7488
7559
|
}
|
|
7489
7560
|
|
|
7490
|
-
// Apply experiment variant overrides (A/B testing)
|
|
7491
|
-
let effectiveModel = model;
|
|
7492
|
-
try {
|
|
7493
|
-
const { resolveActiveExperimentConfig } =
|
|
7494
|
-
await import("../observability/experiments.js");
|
|
7495
|
-
if (!ownerEmail) {
|
|
7496
|
-
// Without an authenticated owner we can't resolve user-scoped experiments.
|
|
7497
|
-
throw new Error("no authenticated user");
|
|
7498
|
-
}
|
|
7499
|
-
const expConfig = await resolveActiveExperimentConfig(ownerEmail);
|
|
7500
|
-
if (expConfig) {
|
|
7501
|
-
if (typeof expConfig.configs.model === "string") {
|
|
7502
|
-
effectiveModel = expConfig.configs.model;
|
|
7503
|
-
}
|
|
7504
|
-
}
|
|
7505
|
-
} catch {
|
|
7506
|
-
// Experiments module unavailable — use default model
|
|
7507
|
-
}
|
|
7508
|
-
|
|
7509
7561
|
// TODO(processor-seam): thread `processors` from ProductionAgentOptions
|
|
7510
7562
|
// through to runAgentLoop here once the handler exposes a way to
|
|
7511
7563
|
// configure them (e.g. a `processors` field on ProductionAgentOptions
|
|
@@ -7592,6 +7644,14 @@ export function createProductionAgentHandler(
|
|
|
7592
7644
|
threadId: threadId ?? null,
|
|
7593
7645
|
userId: ownerEmail,
|
|
7594
7646
|
config: obsConfig,
|
|
7647
|
+
metadata: {
|
|
7648
|
+
modelSelectionSource,
|
|
7649
|
+
...(experimentAssignments.length > 0
|
|
7650
|
+
? { experimentAssignments }
|
|
7651
|
+
: {}),
|
|
7652
|
+
},
|
|
7653
|
+
experimentAssignments,
|
|
7654
|
+
modelSelectionSource,
|
|
7595
7655
|
classifyError: () => {
|
|
7596
7656
|
if (
|
|
7597
7657
|
agentLoopOpts.signal.aborted &&
|
|
@@ -1759,7 +1759,7 @@ export async function listRunsForThread(
|
|
|
1759
1759
|
LIMIT ?`,
|
|
1760
1760
|
args: [threadId, limit],
|
|
1761
1761
|
});
|
|
1762
|
-
|
|
1762
|
+
const reconcileCandidateIds: string[] = [];
|
|
1763
1763
|
for (const r of rows) {
|
|
1764
1764
|
const row = r as {
|
|
1765
1765
|
id?: string;
|
|
@@ -1773,10 +1773,19 @@ export async function listRunsForThread(
|
|
|
1773
1773
|
(row.status === "errored" &&
|
|
1774
1774
|
row.error_code === STALE_RUN_ERROR_EVENT.errorCode);
|
|
1775
1775
|
if (!canReconcileFromEvents) continue;
|
|
1776
|
-
|
|
1777
|
-
(await reconcileTerminalRunFromEvents(runId).catch(() => false)) ||
|
|
1778
|
-
repairedTerminalRow;
|
|
1776
|
+
reconcileCandidateIds.push(runId);
|
|
1779
1777
|
}
|
|
1778
|
+
// Each candidate's reconciliation is independently fenced by the UPDATE's
|
|
1779
|
+
// WHERE clause (status = 'running' OR errored-with-stale-code) inside
|
|
1780
|
+
// reconcileTerminalRunFromEvents, keyed on that run's own id — reconciling
|
|
1781
|
+
// several stale runs in parallel is safe and avoids N sequential
|
|
1782
|
+
// SELECT+UPDATE round-trip pairs on a shared-thread page load.
|
|
1783
|
+
const reconcileResults = await Promise.all(
|
|
1784
|
+
reconcileCandidateIds.map((runId) =>
|
|
1785
|
+
reconcileTerminalRunFromEvents(runId).catch(() => false),
|
|
1786
|
+
),
|
|
1787
|
+
);
|
|
1788
|
+
const repairedTerminalRow = reconcileResults.some(Boolean);
|
|
1780
1789
|
if (repairedTerminalRow) {
|
|
1781
1790
|
const refreshed = await client.execute({
|
|
1782
1791
|
sql: `SELECT id, thread_id, turn_id, status, started_at, heartbeat_at, completed_at, last_progress_at, error_code, abort_reason, dispatch_mode, terminal_reason, diag_stage
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ActionChatUIConfig } from "../action-ui.js";
|
|
2
2
|
import {
|
|
3
|
+
isCredentialGapCodeAgentEvent,
|
|
3
4
|
normalizeCodeAgentTranscript,
|
|
4
5
|
type CodeAgentTranscriptEvent as CoreCodeAgentTranscriptEvent,
|
|
5
6
|
type NormalizedCodeAgentStatusEvent,
|
|
@@ -664,6 +665,7 @@ export interface CodeAgentThreadTranscriptEvent {
|
|
|
664
665
|
metadata?: Record<string, unknown>;
|
|
665
666
|
artifactPath?: string;
|
|
666
667
|
artifactUrl?: string;
|
|
668
|
+
signal?: CoreCodeAgentTranscriptEvent["signal"];
|
|
667
669
|
}
|
|
668
670
|
|
|
669
671
|
export interface BuildRepositoryFromCodeAgentTranscriptOptions {
|
|
@@ -1094,6 +1096,7 @@ function toCoreCodeAgentTranscriptEvent(
|
|
|
1094
1096
|
...(event.artifactPath ? { artifactPath: event.artifactPath } : {}),
|
|
1095
1097
|
...(event.artifactUrl ? { artifactUrl: event.artifactUrl } : {}),
|
|
1096
1098
|
},
|
|
1099
|
+
...(event.signal ? { signal: event.signal } : {}),
|
|
1097
1100
|
};
|
|
1098
1101
|
}
|
|
1099
1102
|
|
|
@@ -1137,6 +1140,9 @@ function toolContentPartForCodeAgentTranscriptItem(
|
|
|
1137
1140
|
? { result: previewCodeAgentTranscriptValue(item.result) ?? "" }
|
|
1138
1141
|
: {}),
|
|
1139
1142
|
...(item.structuredMeta ? { structuredMeta: item.structuredMeta } : {}),
|
|
1143
|
+
...(item.pendingApprovalKey
|
|
1144
|
+
? { approval: { approvalKey: item.pendingApprovalKey } }
|
|
1145
|
+
: {}),
|
|
1140
1146
|
};
|
|
1141
1147
|
}
|
|
1142
1148
|
|
|
@@ -1144,7 +1150,7 @@ function statusTextForCodeAgentTranscriptItem(
|
|
|
1144
1150
|
item: NormalizedCodeAgentStatusEvent,
|
|
1145
1151
|
options: BuildRepositoryFromCodeAgentTranscriptOptions,
|
|
1146
1152
|
): string | null {
|
|
1147
|
-
if (options.hideCredentialMessages &&
|
|
1153
|
+
if (options.hideCredentialMessages && isCredentialGapCodeAgentEvent(item)) {
|
|
1148
1154
|
return null;
|
|
1149
1155
|
}
|
|
1150
1156
|
if (item.statusKind === "artifact") {
|
|
@@ -1219,10 +1225,6 @@ function stringRecordValue(
|
|
|
1219
1225
|
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
1220
1226
|
}
|
|
1221
1227
|
|
|
1222
|
-
function isCredentialCodeAgentText(value: string): boolean {
|
|
1223
|
-
return /No LLM provider key was found|Missing credentials/i.test(value);
|
|
1224
|
-
}
|
|
1225
|
-
|
|
1226
1228
|
export function upsertUserMessage(repo: any, userMsg: UserMessage): any {
|
|
1227
1229
|
const nextRepo = normalizeThreadRepository(repo);
|
|
1228
1230
|
|