@agent-native/core 0.92.10 → 0.92.12
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 +1 -1
- package/corpus/core/CHANGELOG.md +29 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/production-agent.ts +214 -17
- package/corpus/core/src/agent/run-manager.ts +72 -14
- package/corpus/core/src/agent/run-store.ts +152 -27
- package/corpus/core/src/cli/design-connect.ts +433 -151
- package/corpus/core/src/cli/skills.ts +14 -0
- package/corpus/core/src/client/AssistantChat.tsx +25 -0
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +40 -6
- package/corpus/core/src/client/agent-chat-adapter.ts +56 -12
- package/corpus/core/src/client/agent-chat.ts +165 -1
- package/corpus/core/src/client/chat/index.ts +9 -1
- package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +38 -2
- package/corpus/core/src/client/index.ts +5 -0
- package/corpus/core/src/client/rich-markdown-editor/useCollabReconcile.ts +18 -7
- package/corpus/core/src/collab/awareness-store.ts +23 -12
- package/corpus/core/src/collab/client.ts +16 -5
- package/corpus/core/src/collab/index.ts +4 -0
- package/corpus/core/src/collab/recent-edits.ts +65 -2
- package/corpus/core/src/index.browser.ts +1 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +98 -11
- package/corpus/core/src/server/builder-design-systems.ts +30 -4
- package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +12 -6
- package/corpus/templates/clips/AGENTS.md +4 -0
- package/corpus/templates/clips/actions/create-recording.ts +2 -0
- package/corpus/templates/clips/actions/lib/create-recording-schema.ts +5 -3
- package/corpus/templates/clips/actions/request-transcript.ts +102 -33
- package/corpus/templates/clips/app/components/library/library-grid.tsx +1 -0
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +59 -19
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +75 -9
- package/corpus/templates/clips/app/components/player/video-player.tsx +17 -12
- package/corpus/templates/clips/app/hooks/use-player-shortcuts.ts +1 -0
- package/corpus/templates/clips/app/i18n/ar-SA.ts +1 -0
- package/corpus/templates/clips/app/i18n/de-DE.ts +1 -0
- package/corpus/templates/clips/app/i18n/en-US.ts +1 -0
- package/corpus/templates/clips/app/i18n/es-ES.ts +1 -0
- package/corpus/templates/clips/app/i18n/fr-FR.ts +1 -0
- package/corpus/templates/clips/app/i18n/hi-IN.ts +1 -0
- package/corpus/templates/clips/app/i18n/ja-JP.ts +1 -0
- package/corpus/templates/clips/app/i18n/ko-KR.ts +1 -0
- package/corpus/templates/clips/app/i18n/pt-BR.ts +1 -0
- package/corpus/templates/clips/app/i18n/zh-CN.ts +1 -0
- package/corpus/templates/clips/app/i18n/zh-TW.ts +1 -0
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +70 -37
- package/corpus/templates/clips/app/routes/record.tsx +17 -4
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +2 -0
- package/corpus/templates/clips/changelog/2026-07-09-desktop-popover-sits-closer-to-the-menu-bar.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-desktop-recording-optimization-progress-stays-visible-until-the-clip-opens.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-fixed-large-video-file-uploads-failing-before-their-resumabl.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-fixed-new-video-uploads-defaulting-to-private.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-long-recordings-now-get-enough-time-to-download-their-media-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-meeting-notes-no-longer-lowers-your-microphone-volume-for-ot.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-on-mobile-tapping-a-playing-clip-reveals-playback-controls-w.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-regenerate-any-clip-transcript-from-its-saved-recording-or-r.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-slack-previews-now-show-the-clip-length-alongside-its-descri.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-fixed-copying-agent-responses-and-transcript-text-from-recor.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +12 -2
- package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +8 -1
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +8 -5
- package/corpus/templates/clips/desktop/src/lib/transcription-engine.ts +5 -5
- package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +3 -0
- package/corpus/templates/clips/desktop/src/styles.css +6 -3
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +29 -11
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +1 -1
- package/corpus/templates/clips/desktop/src-tauri/src/system_audio.rs +103 -21
- package/corpus/templates/clips/desktop/src-tauri/src/whisper_speech.rs +117 -39
- package/corpus/templates/clips/server/lib/slack-unfurls.ts +20 -1
- package/corpus/templates/clips/server/lib/streaming-upload-mode.ts +10 -4
- package/corpus/templates/clips/shared/recording-core.ts +12 -0
- package/corpus/templates/content/AGENTS.md +7 -6
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +82 -7
- package/corpus/templates/content/actions/_database-source-utils.ts +149 -30
- package/corpus/templates/content/actions/_document-flush.ts +132 -17
- package/corpus/templates/content/actions/_notion-action-utils.ts +15 -0
- package/corpus/templates/content/actions/add-content-database-source-field-property.ts +4 -7
- package/corpus/templates/content/actions/attach-content-database-source.ts +41 -17
- package/corpus/templates/content/actions/change-content-database-source-role.ts +46 -8
- package/corpus/templates/content/actions/create-and-link-notion-page.ts +2 -0
- package/corpus/templates/content/actions/link-notion-page.ts +2 -0
- package/corpus/templates/content/actions/pull-document.ts +5 -7
- package/corpus/templates/content/actions/pull-notion-page.ts +2 -0
- package/corpus/templates/content/actions/push-notion-page.ts +10 -0
- package/corpus/templates/content/actions/resolve-notion-sync-conflict.ts +2 -0
- package/corpus/templates/content/actions/suggest-source-join-key.ts +8 -1
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +88 -23
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +32 -2
- package/corpus/templates/content/app/hooks/use-notion.ts +6 -6
- package/corpus/templates/content/app/i18n/zh-TW.ts +1 -0
- package/corpus/templates/content/app/i18n-data.ts +18 -0
- package/corpus/templates/content/changelog/2026-07-09-builder-source-refreshes-now-keep-mapped-fields-such-as-topi.md +6 -0
- package/corpus/templates/content/changelog/2026-07-09-notion-conflict-choices-and-version-restores-preserve-docume.md +6 -0
- package/corpus/templates/content/server/lib/notion-sync.ts +80 -64
- package/corpus/templates/content/shared/api.ts +1 -0
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +29 -2
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +86 -0
- package/corpus/templates/design/.agents/skills/export-handoff/SKILL.md +57 -0
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +11 -0
- package/corpus/templates/design/AGENTS.md +45 -10
- package/corpus/templates/design/actions/add-localhost-screens.ts +66 -13
- package/corpus/templates/design/actions/apply-component-prop-edit.ts +45 -36
- package/corpus/templates/design/actions/apply-motion-edit.ts +25 -31
- package/corpus/templates/design/actions/apply-shader-fill.ts +29 -42
- package/corpus/templates/design/actions/detach-component-instance.ts +337 -0
- package/corpus/templates/design/actions/export-design-as-figma-svg.ts +219 -0
- package/corpus/templates/design/actions/generate-design.ts +79 -12
- package/corpus/templates/design/actions/generate-screens.ts +57 -12
- package/corpus/templates/design/actions/get-figma-styles.ts +115 -0
- package/corpus/templates/design/actions/go-to-main-component.ts +254 -0
- package/corpus/templates/design/actions/grant-localhost-write-consent.ts +4 -3
- package/corpus/templates/design/actions/import-design-source.ts +4 -31
- package/corpus/templates/design/actions/import-figma-clipboard.ts +134 -0
- package/corpus/templates/design/actions/import-figma-frame.ts +95 -0
- package/corpus/templates/design/actions/index-design-system-with-builder.ts +16 -1
- package/corpus/templates/design/actions/list-design-components.ts +104 -0
- package/corpus/templates/design/actions/list-figma-library-assets.ts +1 -24
- package/corpus/templates/design/actions/open-component-source.ts +2 -4
- package/corpus/templates/design/actions/present-design-variants.ts +412 -16
- package/corpus/templates/design/actions/preview-source-edit.ts +14 -1
- package/corpus/templates/design/actions/run-design-audit.ts +25 -3
- package/corpus/templates/design/actions/show-design-questions.ts +10 -0
- package/corpus/templates/design/actions/swap-component-instance.ts +544 -0
- package/corpus/templates/design/actions/take-design-screenshot.ts +45 -60
- package/corpus/templates/design/actions/write-local-file.ts +25 -1
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +152 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +1077 -58
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +5 -5
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +73 -21
- package/corpus/templates/design/app/components/design/EditPanel.tsx +16 -11
- package/corpus/templates/design/app/components/design/KeyboardShortcutsPanel.tsx +364 -0
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +180 -53
- package/corpus/templates/design/app/components/design/LocalhostWriteConsentDialog.tsx +0 -2
- package/corpus/templates/design/app/components/design/MotionDock.tsx +144 -21
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1152 -167
- package/corpus/templates/design/app/components/design/QuestionFlow.tsx +27 -5
- package/corpus/templates/design/app/components/design/ReviewPanel.tsx +23 -2
- package/corpus/templates/design/app/components/design/TokensPanel.tsx +63 -49
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +1293 -54
- package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +7 -0
- package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +6 -1
- package/corpus/templates/design/app/components/design/bridge/motion-preview.bridge.ts +23 -6
- package/corpus/templates/design/app/components/design/bridge/sample.bridge.ts +7 -0
- package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +5 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/MonacoHost.tsx +14 -2
- package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +37 -2
- package/corpus/templates/design/app/components/design/code-workbench/format/format-on-open-guard.ts +25 -0
- package/corpus/templates/design/app/components/design/code-workbench/format/format-on-open.ts +19 -1
- package/corpus/templates/design/app/components/design/code-workbench/model-registry.ts +43 -5
- package/corpus/templates/design/app/components/design/code-workbench/search/SearchView.tsx +27 -2
- package/corpus/templates/design/app/components/design/code-workbench/search/search-engine.ts +10 -1
- package/corpus/templates/design/app/components/design/code-workbench/store.tsx +19 -2
- package/corpus/templates/design/app/components/design/design-canvas/annotation-snapshot.ts +265 -0
- package/corpus/templates/design/app/components/design/design-canvas/annotation-submit.ts +16 -5
- package/corpus/templates/design/app/components/design/design-canvas/coordinate-transforms.ts +16 -2
- package/corpus/templates/design/app/components/design/design-canvas/embedded-frame.ts +7 -2
- package/corpus/templates/design/app/components/design/design-canvas/iframe-events.ts +3 -1
- package/corpus/templates/design/app/components/design/edit-panel/code-inspect-helpers.tsx +78 -8
- package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +451 -73
- package/corpus/templates/design/app/components/design/edit-panel/document-colors.ts +12 -4
- package/corpus/templates/design/app/components/design/edit-panel/effects-properties.tsx +398 -272
- package/corpus/templates/design/app/components/design/edit-panel/element-classification.ts +41 -7
- package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +16 -3
- package/corpus/templates/design/app/components/design/edit-panel/field-primitives.tsx +24 -4
- package/corpus/templates/design/app/components/design/edit-panel/fill-gradient-helpers.ts +222 -4
- package/corpus/templates/design/app/components/design/edit-panel/fill-properties.tsx +171 -78
- package/corpus/templates/design/app/components/design/edit-panel/inspector-controls.tsx +45 -5
- package/corpus/templates/design/app/components/design/edit-panel/layout-properties.tsx +299 -28
- package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +120 -150
- package/corpus/templates/design/app/components/design/edit-panel/position-helpers.ts +53 -1
- package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +284 -117
- package/corpus/templates/design/app/components/design/edit-panel/selection-helpers.ts +81 -0
- package/corpus/templates/design/app/components/design/edit-panel/stroke-properties.tsx +19 -14
- package/corpus/templates/design/app/components/design/edit-panel/style-options.ts +7 -0
- package/corpus/templates/design/app/components/design/edit-panel/typography-helpers.ts +155 -0
- package/corpus/templates/design/app/components/design/edit-panel/typography-properties.tsx +268 -46
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +350 -31
- package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +13 -4
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +233 -23
- package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +72 -2
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +51 -11
- package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +84 -11
- package/corpus/templates/design/app/components/design/inspector/index.ts +3 -0
- package/corpus/templates/design/app/components/design/keyboard-shortcuts.ts +552 -0
- package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +157 -0
- package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +53 -0
- package/corpus/templates/design/app/components/design/multi-screen/overview-layout.ts +184 -0
- package/corpus/templates/design/app/components/design/multi-screen/primitive-drop-target.ts +403 -26
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +20 -1
- package/corpus/templates/design/app/components/design/types.ts +33 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +59 -7
- package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +119 -17
- package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +275 -63
- package/corpus/templates/design/app/hooks/use-question-flow.ts +14 -3
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +67 -10
- package/corpus/templates/design/app/i18n/zh-TW.ts +91 -1
- package/corpus/templates/design/app/i18n-data.ts +1217 -10
- package/corpus/templates/design/app/i18n-keyboard-shortcuts.ts +577 -0
- package/corpus/templates/design/app/lib/agent-chat.ts +23 -0
- package/corpus/templates/design/app/lib/design-import.ts +24 -0
- package/corpus/templates/design/app/lib/figma-clipboard.ts +157 -0
- package/corpus/templates/design/app/lib/figma-svg-copy.ts +221 -0
- package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +143 -30
- package/corpus/templates/design/app/pages/design-editor/collab-sync.ts +15 -0
- package/corpus/templates/design/app/pages/design-editor/editor-session.ts +33 -0
- package/corpus/templates/design/app/pages/design-editor/editor-state.ts +38 -0
- package/corpus/templates/design/app/pages/design-editor/overview-annotation-context.ts +157 -0
- package/corpus/templates/design/app/pages/design-editor/overview-camera.ts +62 -6
- package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +245 -0
- package/corpus/templates/design/app/pages/design-editor/react-semantic-handoff.ts +586 -0
- package/corpus/templates/design/app/pages/design-editor/screen-auto-layout.ts +169 -0
- package/corpus/templates/design/app/pages/design-editor/selection-state.ts +201 -1
- package/corpus/templates/design/changelog/2026-07-09-added-underline-strikethrough-and-text-case-uppercase-lowerc.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-annotate-now-draws-across-the-all-screens-canvas-without-swi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-auto-layout-children-can-now-be-dragged-into-freeform-screen.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-board-shapes-now-stay-visible-and-nest-correctly-across-the-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-component-source-navigation-now-opens-reliably-from-the-insp.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-cross-screen-local-react-layer-moves-now-hand-off-exact-sour.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-cross-screen-moves-undo-and-redo-now-keep-both-screens-stabl.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-detach-a-component-instance-into-plain-editable-eleme.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-dragging-layers-into-auto-layout-now-respects-ignore-auto-la.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-drawing-annotations-sent-to-the-agent-now-include-a-rendered.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-editor-sidebars-now-use-figma-matched-default-widths-for-a-r.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-empty-frames-and-rectangles-now-expose-full-auto-layout-cont.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-export-any-design-screen-as-a-real-vector-svg-for-figma-with.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-grid-auto-layout-now-uses-true-responsive-rows-and-columns-w.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-hidden-and-locked-screens-now-behave-consistently-between-la.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-image-fills-now-preserve-valid-urls-and-layered-fit-settings.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-import-figma-frames-as-pixel-accurate-design-screens-via-a-s.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-inspect-code-now-hides-internal-styling-metadata-and-wraps-l.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-inspector-blur-and-shadow-effects-now-preserve-other-effects.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-jump-to-a-components-other-instances-from-the-inspecto.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-keyboard-shortcuts-are-now-discoverable-in-a-figma-style-bot.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-layer-selection-now-keeps-cmd-or-ctrl-toggles-and-shift-rang.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-layers-dropped-into-auto-layout-now-participate-correctly-in.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-local-live-edit-screens-now-enter-and-leave-full-view-withou.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-local-preview-urls-now-live-in-the-inspector-instead-of-taki.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-local-react-layers-can-now-be-hidden-and-locked-from-layers-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-local-react-layers-now-keep-exact-source-provenance-and-supp.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-local-react-visual-editing-now-loads-reliably-and-shows-live.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-paste-from-figma-cmd-v-now-imports-exact-editable-nodes-when.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-pressing-escape-after-selecting-a-screen-now-reveals-page-pr.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-right-click-overlapping-or-nested-objects-to-choose-the-exac.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-scale-edge-stretch-and-center-constraints-now-preserve-layer.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-screen-rows-can-now-be-reordered-in-layers-with-matching-can.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-screen-selection-stays-responsive-in-designs-with-hundreds-o.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-shift-a-now-enables-auto-layout-on-a-selected-screen-with-fl.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-swap-a-component-instance-for-another-from-the-libra.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-drawing-annotations-now-stay-available-to-retry-when-the.md +6 -0
- package/corpus/templates/design/e2e/global-setup.ts +3 -6
- package/corpus/templates/design/e2e/helpers.ts +27 -6
- package/corpus/templates/design/server/lib/design-to-figma-svg.ts +1412 -0
- package/corpus/templates/design/server/lib/figma-clipboard-match.ts +196 -0
- package/corpus/templates/design/server/lib/figma-node-import.ts +311 -0
- package/corpus/templates/design/server/lib/figma-node-to-html.ts +1334 -0
- package/corpus/templates/design/server/lib/figma-paste-fallback.ts +64 -0
- package/corpus/templates/design/server/lib/playwright-runtime.ts +78 -0
- package/corpus/templates/design/server/plugins/db.ts +41 -0
- package/corpus/templates/design/server/source-workspace.ts +64 -0
- package/corpus/templates/design/shared/board-file.ts +13 -2
- package/corpus/templates/design/shared/canvas-math.ts +231 -33
- package/corpus/templates/design/shared/code-layer.ts +122 -8
- package/corpus/templates/design/shared/component-library.ts +161 -0
- package/corpus/templates/design/shared/db-conflict.ts +27 -0
- package/corpus/templates/design/shared/design-source-capabilities.ts +2 -1
- package/corpus/templates/design/shared/figma-url.ts +149 -0
- package/corpus/templates/design/shared/pen-path.ts +16 -7
- package/corpus/templates/design/shared/source-mode.ts +1 -0
- package/corpus/templates/plan/app/components/plan/CanvasArea.tsx +7 -19
- package/corpus/templates/plan/changelog/2026-07-09-canvas-panning-now-keeps-zoom-fixed-even-at-the-edges.md +6 -0
- package/corpus/templates/slides/actions/index-design-system-with-builder.ts +16 -1
- package/corpus/templates/slides/app/context/DeckContext.tsx +311 -70
- package/corpus/templates/slides/changelog/2026-07-09-fixed-the-slide-rail-going-permanently-stale-during-a-long-a.md +6 -0
- package/dist/agent/production-agent.d.ts +82 -7
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +180 -17
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +63 -14
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +46 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +129 -22
- package/dist/agent/run-store.js.map +1 -1
- package/dist/cli/design-connect.d.ts +6 -0
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +336 -139
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +14 -0
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +2 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +19 -3
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +38 -18
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +48 -12
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-chat.d.ts +60 -0
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +122 -1
- package/dist/client/agent-chat.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/extensions/EmbeddedExtension.d.ts +12 -0
- package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.js +36 -2
- package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/useCollabReconcile.js +18 -6
- package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -1
- package/dist/collab/awareness-store.d.ts +5 -0
- package/dist/collab/awareness-store.d.ts.map +1 -1
- package/dist/collab/awareness-store.js +19 -12
- package/dist/collab/awareness-store.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +13 -5
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/index.d.ts +1 -0
- package/dist/collab/index.d.ts.map +1 -1
- package/dist/collab/index.js +1 -0
- package/dist/collab/index.js.map +1 -1
- package/dist/collab/recent-edits.d.ts +3 -1
- package/dist/collab/recent-edits.d.ts.map +1 -1
- package/dist/collab/recent-edits.js +57 -2
- package/dist/collab/recent-edits.js.map +1 -1
- package/dist/collab/struct-routes.d.ts +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/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +3 -3
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +87 -10
- 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/builder-design-systems.d.ts +15 -0
- package/dist/server/builder-design-systems.d.ts.map +1 -1
- package/dist/server/builder-design-systems.js +9 -4
- package/dist/server/builder-design-systems.js.map +1 -1
- package/package.json +1 -1
|
@@ -33,7 +33,7 @@ import { getDefaultMaxIterations, MAX_AGENT_MAX_ITERATIONS, MIN_AGENT_MAX_ITERAT
|
|
|
33
33
|
import { maybeCompactThread, buildObservationalContext, hasObservationalMemory, serializeObservationalMemoryBlock, } from "./observational-memory/index.js";
|
|
34
34
|
import { ProcessorChain, TripWire, toolCallsFromContent, } from "./processors.js";
|
|
35
35
|
import { startRun, subscribeToRun, getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun, tryClaimRunSlot, } from "./run-manager.js";
|
|
36
|
-
import { writeLedgerEntry, readLedgerEntry, clearLedgerForThread, getCurrentTurnEventsForThread, insertRun, updateRunHeartbeat, updateRunStatusIfRunning, setRunTerminalReason, claimBackgroundRun, readBackgroundRunClaim, recordRunDiagnostic, countRunsForTurn, RUN_DIAG_STAGE, UNCLAIMED_BACKGROUND_RUN_GRACE_MS, } from "./run-store.js";
|
|
36
|
+
import { writeLedgerEntry, readLedgerEntry, clearLedgerForThread, getCurrentTurnEventsForThread, insertRun, updateRunHeartbeat, updateRunStatusIfRunning, setRunError, setRunTerminalReason, claimBackgroundRun, readBackgroundRunClaim, recordRunDiagnostic, countRunsForTurn, RUN_DIAG_STAGE, UNCLAIMED_BACKGROUND_RUN_GRACE_MS, } from "./run-store.js";
|
|
37
37
|
import { buildCurrentTimeUserContext } from "./runtime-context.js";
|
|
38
38
|
import { classifyToolCallJournal, findCompletedJournalEntry, } from "./tool-call-journal.js";
|
|
39
39
|
import { redactSensitiveFields, sanitizeToolErrorText, sanitizeToolErrorValue, } from "./tool-error-redaction.js";
|
|
@@ -3690,10 +3690,25 @@ export function shouldChainBackgroundContinuation(opts) {
|
|
|
3690
3690
|
}
|
|
3691
3691
|
export async function markBackgroundContinuationChunkTerminal(opts) {
|
|
3692
3692
|
const updateStatus = opts.deps?.updateRunStatusIfRunning ?? updateRunStatusIfRunning;
|
|
3693
|
+
const persistError = opts.deps?.setRunError ?? setRunError;
|
|
3693
3694
|
const setTerminalReason = opts.deps?.setRunTerminalReason ?? setRunTerminalReason;
|
|
3694
|
-
const
|
|
3695
|
+
const terminalEvent = opts.terminalEvent;
|
|
3696
|
+
const isTerminalFailure = terminalEvent?.type === "error" ||
|
|
3697
|
+
terminalEvent?.type === "missing_api_key";
|
|
3698
|
+
const terminalReason = terminalEvent?.type === "error"
|
|
3699
|
+
? `error:${terminalEvent.errorCode || "unknown"}`
|
|
3700
|
+
: terminalEvent?.type === "missing_api_key"
|
|
3701
|
+
? "missing_api_key"
|
|
3702
|
+
: opts.continuationReason;
|
|
3703
|
+
const updated = await updateStatus(opts.runId, isTerminalFailure ? "errored" : "completed");
|
|
3695
3704
|
if (updated) {
|
|
3696
|
-
await setTerminalReason(opts.runId,
|
|
3705
|
+
await setTerminalReason(opts.runId, terminalReason);
|
|
3706
|
+
if (terminalEvent?.type === "error") {
|
|
3707
|
+
await persistError(opts.runId, terminalEvent.errorCode, terminalEvent.details || terminalEvent.error);
|
|
3708
|
+
}
|
|
3709
|
+
else if (terminalEvent?.type === "missing_api_key") {
|
|
3710
|
+
await persistError(opts.runId, LLM_MISSING_CREDENTIALS_ERROR_CODE, LLM_MISSING_CREDENTIALS_MESSAGE);
|
|
3711
|
+
}
|
|
3697
3712
|
}
|
|
3698
3713
|
return updated;
|
|
3699
3714
|
}
|
|
@@ -3782,6 +3797,69 @@ export function resolveContinuationDispatchBudget(opts) {
|
|
|
3782
3797
|
backoffCapMs: Infinity,
|
|
3783
3798
|
};
|
|
3784
3799
|
}
|
|
3800
|
+
/**
|
|
3801
|
+
* True when a `fireInternalDispatch` failure is Netlify's Functions platform
|
|
3802
|
+
* loop-protection response (`HTTP 508 Loop Detected`), matched against the
|
|
3803
|
+
* exact message `self-dispatch.ts`'s `dispatchResponseError` constructs
|
|
3804
|
+
* (`Self-dispatch to ${path} returned HTTP ${res.status} ${res.statusText}...`).
|
|
3805
|
+
* Matches on the status code alone (not the reason phrase text) so it is
|
|
3806
|
+
* robust to any wording Netlify's edge puts in `statusText`.
|
|
3807
|
+
*
|
|
3808
|
+
* VERIFIED: production `agent_runs` diagnostics show exactly this failure mode
|
|
3809
|
+
* — 8 successful `chain_dispatch_sent` self-dispatches followed by a 9th/10th
|
|
3810
|
+
* that dies with `HTTP 508 Loop Detected`, terminal reason
|
|
3811
|
+
* `background_continuation_dispatch_failed`. UNVERIFIED (Netlify does not
|
|
3812
|
+
* document the mechanism — checked the Functions overview, Functions API
|
|
3813
|
+
* reference, Background Functions overview, Status Codes reference, and
|
|
3814
|
+
* Request Chain troubleshooting docs, none mention it): the ONLY public
|
|
3815
|
+
* confirmation is a Netlify staff forum reply — "we prevent multiple
|
|
3816
|
+
* executions after one-another as that's a 'loop' ... I believe we enforce
|
|
3817
|
+
* this after 9 or 10 self-invocations"
|
|
3818
|
+
* (https://answers.netlify.com/t/self-invoke-background-function-via-post-requests/146012)
|
|
3819
|
+
* — which also confirms Background Functions do NOT escape the limit (the
|
|
3820
|
+
* reporter's case was already a `-background` function self-invoking). See
|
|
3821
|
+
* `MAX_NESTED_SELF_DISPATCH_DEPTH` for how this classification is used.
|
|
3822
|
+
*/
|
|
3823
|
+
export function isLoopProtectionDispatchError(err) {
|
|
3824
|
+
if (!(err instanceof Error))
|
|
3825
|
+
return false;
|
|
3826
|
+
return /\bHTTP\s*508\b/i.test(err.message);
|
|
3827
|
+
}
|
|
3828
|
+
/**
|
|
3829
|
+
* Conservative safety margin on NESTED self-dispatch chaining — a
|
|
3830
|
+
* continuation dispatched directly from within the live invocation that is
|
|
3831
|
+
* about to finish, as opposed to being picked up later by the
|
|
3832
|
+
* unclaimed-background-run sweep (`agent-chat-plugin.ts`), which fires its
|
|
3833
|
+
* redispatch from an unrelated, timer-driven invocation rather than from
|
|
3834
|
+
* inside the chain's own execution.
|
|
3835
|
+
*
|
|
3836
|
+
* Netlify's loop-protection ceiling is undocumented and platform-reported
|
|
3837
|
+
* only approximately ("I believe... 9 or 10" — see
|
|
3838
|
+
* `isLoopProtectionDispatchError`), so hard-coding that exact number here
|
|
3839
|
+
* would be pinning behavior to a number Netlify itself won't commit to, and
|
|
3840
|
+
* production evidence shows it can trigger by the 9th self-dispatch. Rather
|
|
3841
|
+
* than only reacting after triggering that undocumented limit,
|
|
3842
|
+
* `chainServerDrivenContinuation` proactively hands a chunk to the sweep once
|
|
3843
|
+
* `backgroundContinuationCount` (nested hops since the last chain break)
|
|
3844
|
+
* reaches this value — comfortably below the observed ~9-10 failure point —
|
|
3845
|
+
* instead of attempting another nested dispatch. This is the SAME deferred-
|
|
3846
|
+
* recovery path already used when a dispatch fails outright: the row is left
|
|
3847
|
+
* `status='running', dispatch_mode='background'` for the sweep to redispatch,
|
|
3848
|
+
* never silently dropped.
|
|
3849
|
+
*
|
|
3850
|
+
* The sweep's redispatch marker intentionally omits `continuationCount` (see
|
|
3851
|
+
* the "Unclaimed background-run sweep" in `agent-chat-plugin.ts`), so a
|
|
3852
|
+
* sweep-recovered chunk's own `backgroundContinuationCount` resets to 0 —
|
|
3853
|
+
* this constant therefore bounds each NESTED segment between chain breaks,
|
|
3854
|
+
* not the whole turn. The TRUE ceiling on total turn length is unaffected by
|
|
3855
|
+
* that reset: it is the durable per-turn SQL ledger (`countRunsForTurn`,
|
|
3856
|
+
* checked above in this function) plus `MAX_BACKGROUND_RUN_CONTINUATIONS` —
|
|
3857
|
+
* both counted independently of this in-marker value — so a legitimately
|
|
3858
|
+
* long turn keeps making progress in bounded nested segments, each recovered
|
|
3859
|
+
* by the sweep, until it genuinely exhausts the intentional overall budget
|
|
3860
|
+
* and fails loud with `turn_continuation_budget_exhausted`.
|
|
3861
|
+
*/
|
|
3862
|
+
export const MAX_NESTED_SELF_DISPATCH_DEPTH = 6;
|
|
3785
3863
|
/**
|
|
3786
3864
|
* Server-driven continuation handoff for a chunk that hit its soft-timeout
|
|
3787
3865
|
* boundary still unfinished: mint the next chunk's runId, PRE-INSERT its run
|
|
@@ -3790,12 +3868,26 @@ export function resolveContinuationDispatchBudget(opts) {
|
|
|
3790
3868
|
* `_process-run` self-dispatch carrying ids only (the body is persisted on
|
|
3791
3869
|
* the row as `dispatch_payload`), fully AWAIT the dispatch acknowledgment
|
|
3792
3870
|
* with retries, and mark this chunk terminal only after the handoff landed.
|
|
3793
|
-
* On failure
|
|
3794
|
-
*
|
|
3795
|
-
*
|
|
3796
|
-
* the
|
|
3797
|
-
*
|
|
3798
|
-
*
|
|
3871
|
+
* On failure this chunk always goes terminal loudly (diag stage + terminal
|
|
3872
|
+
* reason recorded — never a silent loss), but the successor row's fate
|
|
3873
|
+
* depends on WHY the dispatch failed:
|
|
3874
|
+
* - the pre-insert itself failed (no successor row exists) — nothing for a
|
|
3875
|
+
* sweep to find, so this is unrecoverable: fail loud immediately with
|
|
3876
|
+
* `background_continuation_dispatch_failed`.
|
|
3877
|
+
* - every dispatch attempt failed but the successor row DOES exist with its
|
|
3878
|
+
* `dispatch_payload` intact — this is RECOVERABLE: the row is left alone
|
|
3879
|
+
* (`status='running', dispatch_mode='background'`) instead of being
|
|
3880
|
+
* errored, so the unclaimed-background-run sweep in `agent-chat-plugin.ts`
|
|
3881
|
+
* can redispatch it once `UNCLAIMED_BACKGROUND_RUN_GRACE_MS` has passed.
|
|
3882
|
+
* This chunk is flipped to errored with the distinct, honest
|
|
3883
|
+
* `background_continuation_dispatch_deferred` reason — the TURN is
|
|
3884
|
+
* deferred, not dead. The sweep still bounds this by
|
|
3885
|
+
* `UNCLAIMED_BACKGROUND_RUN_REDISPATCH_BOUND_MS`: past that it falls back
|
|
3886
|
+
* to the existing loud reap, so a genuinely dead handoff never hangs
|
|
3887
|
+
* silently forever. (For a FOREGROUND self-chain the client additionally
|
|
3888
|
+
* still receives the terminal `auto_continue` event — run-manager emits
|
|
3889
|
+
* it after this callback — so the existing client re-POST path is a
|
|
3890
|
+
* second, faster fallback alongside the sweep.)
|
|
3799
3891
|
*
|
|
3800
3892
|
* `chainViaDurableBackground` selects the dispatch target:
|
|
3801
3893
|
* - true → the durable-background worker chain (unchanged behavior): the
|
|
@@ -3942,7 +4034,18 @@ export async function chainServerDrivenContinuation(opts) {
|
|
|
3942
4034
|
};
|
|
3943
4035
|
let dispatched = false;
|
|
3944
4036
|
let lastDispatchErr;
|
|
3945
|
-
|
|
4037
|
+
// Proactive nested-chain safety margin — see `MAX_NESTED_SELF_DISPATCH_DEPTH`.
|
|
4038
|
+
// Skip the nested dispatch attempt entirely once this segment's hop count
|
|
4039
|
+
// reaches the cap; a nested attempt at this depth is expected to trip
|
|
4040
|
+
// Netlify's loop protection, so there is nothing to gain by trying it and
|
|
4041
|
+
// burning this worker's remaining wall clock on a doomed call. Falls
|
|
4042
|
+
// straight into the same deferred-recovery path below as an exhausted
|
|
4043
|
+
// retry budget.
|
|
4044
|
+
const nestedDepthExceeded = opts.backgroundContinuationCount >= MAX_NESTED_SELF_DISPATCH_DEPTH;
|
|
4045
|
+
if (nestedDepthExceeded) {
|
|
4046
|
+
lastDispatchErr = new Error(`proactive nested-dispatch depth cap reached (backgroundContinuationCount=${opts.backgroundContinuationCount} >= MAX_NESTED_SELF_DISPATCH_DEPTH=${MAX_NESTED_SELF_DISPATCH_DEPTH}) — deferring to the unclaimed-background-run sweep instead of risking Netlify loop protection`);
|
|
4047
|
+
}
|
|
4048
|
+
for (let attempt = 0; !nestedDepthExceeded && attempt < maxDispatchAttempts && !dispatched; attempt++) {
|
|
3946
4049
|
try {
|
|
3947
4050
|
if (attempt > 0) {
|
|
3948
4051
|
// Uncapped budgets (durable-background and true-foreground) keep
|
|
@@ -4003,22 +4106,81 @@ export async function chainServerDrivenContinuation(opts) {
|
|
|
4003
4106
|
}
|
|
4004
4107
|
}
|
|
4005
4108
|
console.error(`[agent-chat] background continuation dispatch attempt ${attempt + 1} failed:`, dispatchErr instanceof Error ? dispatchErr.message : dispatchErr);
|
|
4109
|
+
// Netlify loop protection (see `isLoopProtectionDispatchError`) is a
|
|
4110
|
+
// property of this same live, nested call chain — retrying the exact
|
|
4111
|
+
// same nested self-dispatch within the next few seconds will not
|
|
4112
|
+
// change that, so further attempts are a guaranteed-doomed use of
|
|
4113
|
+
// this worker's remaining wall clock. Stop immediately (instead of
|
|
4114
|
+
// burning the full `maxDispatchAttempts` budget) and fall into the
|
|
4115
|
+
// same deferred-recovery path below, which hands the successor to the
|
|
4116
|
+
// sweep — a genuinely different, non-nested invocation.
|
|
4117
|
+
if (isLoopProtectionDispatchError(dispatchErr)) {
|
|
4118
|
+
break;
|
|
4119
|
+
}
|
|
4006
4120
|
}
|
|
4007
4121
|
}
|
|
4008
4122
|
if (!dispatched) {
|
|
4009
|
-
// The pre-inserted successor row would otherwise sit unclaimed until
|
|
4010
|
-
// the sweep reaps it — error it now so the failure is immediate and
|
|
4011
|
-
// truthful.
|
|
4012
4123
|
if (nextRowInserted) {
|
|
4013
|
-
|
|
4014
|
-
|
|
4124
|
+
// Classify WHY this handoff is being deferred — distinct, greppable
|
|
4125
|
+
// tags so production diagnostics (which is all that is readable from
|
|
4126
|
+
// a background worker) can tell "we proactively avoided Netlify loop
|
|
4127
|
+
// protection", "we hit loop protection and stopped retrying", and "a
|
|
4128
|
+
// generic transient dispatch failure exhausted its retry budget"
|
|
4129
|
+
// apart, instead of lumping every deferred handoff into one bucket.
|
|
4130
|
+
const deferralClassification = nestedDepthExceeded
|
|
4131
|
+
? "proactive_depth_cap"
|
|
4132
|
+
: isLoopProtectionDispatchError(lastDispatchErr)
|
|
4133
|
+
? "netlify_loop_protection"
|
|
4134
|
+
: "dispatch_budget_exhausted";
|
|
4135
|
+
// RECOVERABLE: the successor row already exists in SQL with its
|
|
4136
|
+
// rehydration payload (`dispatch_payload`) intact and is still
|
|
4137
|
+
// `status='running', dispatch_mode='background'` — exactly the state
|
|
4138
|
+
// the unclaimed-background-run sweep (`agent-chat-plugin.ts`) already
|
|
4139
|
+
// scans for. Do NOT error it here: leave it alone so the sweep can
|
|
4140
|
+
// redispatch it once `UNCLAIMED_BACKGROUND_RUN_GRACE_MS` has passed,
|
|
4141
|
+
// bounded by `UNCLAIMED_BACKGROUND_RUN_REDISPATCH_BOUND_MS` before it
|
|
4142
|
+
// falls back to the existing loud reap
|
|
4143
|
+
// (`background_worker_never_started`) — so this is deferred, never a
|
|
4144
|
+
// silent hang. This chunk still goes terminal (its own soft-timeout
|
|
4145
|
+
// budget is genuinely spent), but with an honest reason: the TURN is
|
|
4146
|
+
// not dead, only this handoff attempt was.
|
|
4147
|
+
//
|
|
4148
|
+
// THREE-SITE INVARIANT (keep in lockstep — a future reader must not
|
|
4149
|
+
// "fix" one without the others): this deferral only survives because
|
|
4150
|
+
// the ~1s client poll in `getActiveRunForThreadAsync`
|
|
4151
|
+
// (run-manager.ts) ALSO skips `reapUnclaimedBackgroundRun` while the
|
|
4152
|
+
// successor is within `UNCLAIMED_BACKGROUND_RUN_REDISPATCH_BOUND_MS`
|
|
4153
|
+
// (via `shouldRedispatchUnclaimedBackgroundRun`). Without that guard a
|
|
4154
|
+
// connected client would reap this row at the 25s grace, before the
|
|
4155
|
+
// ~2-min sweep, defeating the deferral. The sweep in agent-chat-plugin
|
|
4156
|
+
// is the recovery actor; run-manager is the guard; this is the
|
|
4157
|
+
// producer.
|
|
4158
|
+
await d
|
|
4159
|
+
.recordRunDiagnostic(nextRunId, RUN_DIAG_STAGE.workerThrew, `chain_dispatch_deferred[${deferralClassification}]: dispatch budget exhausted (${maxDispatchAttempts} attempts) awaiting unclaimed-run sweep redispatch; ${lastDispatchErr instanceof Error
|
|
4160
|
+
? lastDispatchErr.message
|
|
4161
|
+
: String(lastDispatchErr)}`)
|
|
4162
|
+
.catch(() => { });
|
|
4163
|
+
await d
|
|
4164
|
+
.recordRunDiagnostic(runId, RUN_DIAG_STAGE.workerThrew, `chain_dispatch_deferred[${deferralClassification}] nextRunId=${nextRunId} ${lastDispatchErr instanceof Error
|
|
4165
|
+
? lastDispatchErr.message
|
|
4166
|
+
: String(lastDispatchErr)}`)
|
|
4167
|
+
.catch(() => { });
|
|
4168
|
+
console.error(`[agent-chat] background continuation dispatch deferred (${deferralClassification}); leaving the pre-inserted successor for the unclaimed-run sweep to redispatch:`, lastDispatchErr instanceof Error
|
|
4169
|
+
? lastDispatchErr.message
|
|
4170
|
+
: lastDispatchErr);
|
|
4171
|
+
const statusUpdated = await d
|
|
4172
|
+
.updateRunStatusIfRunning(runId, "errored")
|
|
4015
4173
|
.catch(() => false);
|
|
4016
|
-
if (
|
|
4174
|
+
if (statusUpdated) {
|
|
4017
4175
|
await d
|
|
4018
|
-
.setRunTerminalReason(
|
|
4176
|
+
.setRunTerminalReason(runId, "background_continuation_dispatch_deferred")
|
|
4019
4177
|
.catch(() => { });
|
|
4020
4178
|
}
|
|
4179
|
+
return;
|
|
4021
4180
|
}
|
|
4181
|
+
// No successor row exists at all (the pre-insert itself failed) — there
|
|
4182
|
+
// is nothing for the sweep to find and recover, so this really is
|
|
4183
|
+
// fatal. Fail loud immediately via the shared catch block below.
|
|
4022
4184
|
throw lastDispatchErr instanceof Error
|
|
4023
4185
|
? lastDispatchErr
|
|
4024
4186
|
: new Error(String(lastDispatchErr));
|
|
@@ -4030,6 +4192,7 @@ export async function chainServerDrivenContinuation(opts) {
|
|
|
4030
4192
|
.markBackgroundContinuationChunkTerminal({
|
|
4031
4193
|
runId,
|
|
4032
4194
|
continuationReason,
|
|
4195
|
+
terminalEvent: run.events.at(-1)?.event,
|
|
4033
4196
|
})
|
|
4034
4197
|
.catch(() => { });
|
|
4035
4198
|
}
|