@agent-native/core 0.47.1 → 0.48.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/agent-native.js +41 -0
- package/dist/a2a/handlers.js +2 -2
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/server.js +2 -2
- package/dist/a2a/server.js.map +1 -1
- package/dist/action.d.ts +43 -2
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js.map +1 -1
- package/dist/agent/context-xray/actions/context-evict.d.ts +7 -1
- package/dist/agent/context-xray/actions/context-evict.d.ts.map +1 -1
- package/dist/agent/context-xray/actions/context-manifest-get.d.ts +4 -1
- package/dist/agent/context-xray/actions/context-manifest-get.d.ts.map +1 -1
- package/dist/agent/context-xray/actions/context-pin.d.ts +7 -1
- package/dist/agent/context-xray/actions/context-pin.d.ts.map +1 -1
- package/dist/agent/context-xray/actions/context-report.d.ts +12 -1
- package/dist/agent/context-xray/actions/context-report.d.ts.map +1 -1
- package/dist/agent/context-xray/actions/context-restore.d.ts +7 -1
- package/dist/agent/context-xray/actions/context-restore.d.ts.map +1 -1
- package/dist/agent/context-xray/apply-directives.d.ts.map +1 -1
- package/dist/agent/context-xray/apply-directives.js.map +1 -1
- package/dist/agent/context-xray/schema.d.ts +10 -10
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +26 -3
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +47 -8
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/builtin.js +1 -1
- package/dist/agent/engine/builtin.js.map +1 -1
- package/dist/agent/engine/output-tokens.d.ts +1 -1
- package/dist/agent/engine/output-tokens.d.ts.map +1 -1
- package/dist/agent/engine/output-tokens.js +6 -2
- package/dist/agent/engine/output-tokens.js.map +1 -1
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +7 -4
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/engine/types.d.ts +19 -0
- package/dist/agent/engine/types.d.ts.map +1 -1
- package/dist/agent/engine/types.js +6 -0
- package/dist/agent/engine/types.js.map +1 -1
- package/dist/agent/model-config.d.ts +22 -14
- package/dist/agent/model-config.d.ts.map +1 -1
- package/dist/agent/model-config.js +113 -8
- package/dist/agent/model-config.js.map +1 -1
- package/dist/agent/production-agent.d.ts +19 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +253 -39
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
- package/dist/agent/run-loop-with-resume.js +10 -0
- package/dist/agent/run-loop-with-resume.js.map +1 -1
- package/dist/agent/run-manager.d.ts +1 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +36 -9
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +47 -4
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +154 -4
- package/dist/agent/run-store.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +57 -2
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/agent/types.d.ts +3 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/agent-web/generator.d.ts +3 -3
- package/dist/appearance/actions/change-appearance.d.ts +6 -1
- package/dist/appearance/actions/change-appearance.d.ts.map +1 -1
- package/dist/application-state/handlers.d.ts +2 -2
- package/dist/application-state/handlers.d.ts.map +1 -1
- package/dist/application-state/store.d.ts.map +1 -1
- package/dist/application-state/store.js +17 -0
- package/dist/application-state/store.js.map +1 -1
- package/dist/catalog.json +2 -1
- package/dist/cli/code-agent-commands.d.ts.map +1 -1
- package/dist/cli/code-agent-commands.js +2 -0
- package/dist/cli/code-agent-commands.js.map +1 -1
- package/dist/cli/code-agent-connector.js +7 -13
- package/dist/cli/code-agent-connector.js.map +1 -1
- package/dist/cli/code-agent-executor.d.ts +54 -2
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +504 -48
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/code-agent-runs.d.ts +13 -0
- package/dist/cli/code-agent-runs.d.ts.map +1 -1
- package/dist/cli/code-agent-runs.js +36 -0
- package/dist/cli/code-agent-runs.js.map +1 -1
- package/dist/cli/code.js +59 -5
- package/dist/cli/code.js.map +1 -1
- package/dist/cli/connect.js +141 -3
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/index.js +0 -0
- package/dist/cli/pr-visual-recap-workflow.js +1 -1
- package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
- package/dist/cli/recap.js +476 -46
- package/dist/cli/recap.js.map +1 -1
- package/dist/cli/skills.js +298 -179
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +29 -2
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AgentTaskCard.d.ts.map +1 -1
- package/dist/client/AgentTaskCard.js +17 -2
- package/dist/client/AgentTaskCard.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +310 -1732
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/CommandMenu.d.ts +1 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +1 -1
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/HighlightedCodeBlock.d.ts +40 -0
- package/dist/client/HighlightedCodeBlock.d.ts.map +1 -0
- package/dist/client/HighlightedCodeBlock.js +110 -0
- package/dist/client/HighlightedCodeBlock.js.map +1 -0
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +8 -1
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/PoweredByBadge.d.ts +2 -2
- package/dist/client/PoweredByBadge.d.ts.map +1 -1
- package/dist/client/RunStuckBanner.d.ts +1 -1
- package/dist/client/RunStuckBanner.d.ts.map +1 -1
- package/dist/client/StarfieldBackground.d.ts.map +1 -1
- package/dist/client/StarfieldBackground.js +10 -5
- package/dist/client/StarfieldBackground.js.map +1 -1
- package/dist/client/Turnstile.d.ts +1 -1
- package/dist/client/Turnstile.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +3 -2
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +13 -9
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/app-providers.d.ts +99 -0
- package/dist/client/app-providers.d.ts.map +1 -0
- package/dist/client/app-providers.js +19 -0
- package/dist/client/app-providers.js.map +1 -0
- package/dist/client/assistant-ui-recovery.d.ts +1 -1
- package/dist/client/auth-redirect-url.d.ts +1 -1
- package/dist/client/auth-redirect-url.d.ts.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts +0 -19
- package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.js +141 -55
- package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
- package/dist/client/blocks/library/DiffBlock.js +1 -1
- package/dist/client/blocks/library/DiffBlock.js.map +1 -1
- package/dist/client/blocks/library/FileTreeBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/FileTreeBlock.js +1 -1
- package/dist/client/blocks/library/FileTreeBlock.js.map +1 -1
- package/dist/client/blocks/library/HighlightedCode.d.ts.map +1 -1
- package/dist/client/blocks/library/HighlightedCode.js +5 -3
- package/dist/client/blocks/library/HighlightedCode.js.map +1 -1
- package/dist/client/blocks/library/annotation-rail.d.ts +5 -4
- package/dist/client/blocks/library/annotation-rail.d.ts.map +1 -1
- package/dist/client/blocks/library/annotation-rail.js +22 -3
- package/dist/client/blocks/library/annotation-rail.js.map +1 -1
- package/dist/client/blocks/library/diagram.js +1 -1
- package/dist/client/blocks/library/diagram.js.map +1 -1
- package/dist/client/blocks/library/diff.config.d.ts +3 -2
- package/dist/client/blocks/library/diff.config.d.ts.map +1 -1
- package/dist/client/blocks/library/diff.config.js +4 -3
- package/dist/client/blocks/library/diff.config.js.map +1 -1
- package/dist/client/blocks/library/question-form.d.ts.map +1 -1
- package/dist/client/blocks/library/question-form.js +2 -1
- package/dist/client/blocks/library/question-form.js.map +1 -1
- package/dist/client/blocks/library/wireframe-kit.d.ts +1 -1
- package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -1
- package/dist/client/blocks/library/wireframe.js +1 -1
- package/dist/client/blocks/library/wireframe.js.map +1 -1
- package/dist/client/chat/attachment-adapters.d.ts +58 -0
- package/dist/client/chat/attachment-adapters.d.ts.map +1 -0
- package/dist/client/chat/attachment-adapters.js +331 -0
- package/dist/client/chat/attachment-adapters.js.map +1 -0
- package/dist/client/chat/index.d.ts +13 -0
- package/dist/client/chat/index.d.ts.map +1 -0
- package/dist/client/chat/index.js +13 -0
- package/dist/client/chat/index.js.map +1 -0
- package/dist/client/chat/markdown-renderer.d.ts +49 -0
- package/dist/client/chat/markdown-renderer.d.ts.map +1 -0
- package/dist/client/chat/markdown-renderer.js +391 -0
- package/dist/client/chat/markdown-renderer.js.map +1 -0
- package/dist/client/chat/message-components.d.ts +35 -0
- package/dist/client/chat/message-components.d.ts.map +1 -0
- package/dist/client/chat/message-components.js +452 -0
- package/dist/client/chat/message-components.js.map +1 -0
- package/dist/client/chat/repo-helpers.d.ts +41 -0
- package/dist/client/chat/repo-helpers.d.ts.map +1 -0
- package/dist/client/chat/repo-helpers.js +61 -0
- package/dist/client/chat/repo-helpers.js.map +1 -0
- package/dist/client/chat/run-recovery.d.ts +41 -0
- package/dist/client/chat/run-recovery.d.ts.map +1 -0
- package/dist/client/chat/run-recovery.js +348 -0
- package/dist/client/chat/run-recovery.js.map +1 -0
- package/dist/client/chat/tool-call-display.d.ts +34 -0
- package/dist/client/chat/tool-call-display.d.ts.map +1 -0
- package/dist/client/chat/tool-call-display.js +284 -0
- package/dist/client/chat/tool-call-display.js.map +1 -0
- package/dist/client/code-agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/code-agent-chat-adapter.js +20 -0
- package/dist/client/code-agent-chat-adapter.js.map +1 -1
- package/dist/client/collab/index.d.ts +10 -0
- package/dist/client/collab/index.d.ts.map +1 -0
- package/dist/client/collab/index.js +10 -0
- package/dist/client/collab/index.js.map +1 -0
- package/dist/client/components/AgentPresenceChip.d.ts +1 -1
- package/dist/client/components/AgentPresenceChip.d.ts.map +1 -1
- package/dist/client/components/ApiKeySettings.d.ts +1 -1
- package/dist/client/components/ApiKeySettings.d.ts.map +1 -1
- package/dist/client/components/CodeAgentIndicator.d.ts +1 -1
- package/dist/client/components/CodeAgentIndicator.d.ts.map +1 -1
- package/dist/client/components/CodeRequiredDialog.d.ts +1 -1
- package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
- package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -1
- package/dist/client/components/LiveCursorOverlay.js.map +1 -1
- package/dist/client/components/PresenceBar.d.ts +1 -1
- package/dist/client/components/PresenceBar.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +6 -26
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +8 -2
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +21 -9
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts +2 -2
- package/dist/client/composer/VoiceButton.d.ts.map +1 -1
- package/dist/client/composer/index.d.ts +1 -1
- package/dist/client/composer/index.d.ts.map +1 -1
- package/dist/client/composer/index.js +1 -1
- package/dist/client/composer/index.js.map +1 -1
- package/dist/client/composer/use-skills.d.ts +1 -1
- package/dist/client/context-xray/ContextMeter.d.ts +1 -1
- package/dist/client/context-xray/ContextMeter.d.ts.map +1 -1
- package/dist/client/context-xray/ContextMeter.js +3 -3
- package/dist/client/context-xray/ContextMeter.js.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.js +4 -3
- package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
- package/dist/client/context-xray/format.d.ts +11 -0
- package/dist/client/context-xray/format.d.ts.map +1 -1
- package/dist/client/context-xray/format.js +16 -0
- package/dist/client/context-xray/format.js.map +1 -1
- package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
- package/dist/client/conversation/AgentConversation.js +8 -53
- package/dist/client/conversation/AgentConversation.js.map +1 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +1 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.d.ts.map +1 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.js +14 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.js.map +1 -1
- package/dist/client/create-query-client.d.ts +28 -0
- package/dist/client/create-query-client.d.ts.map +1 -0
- package/dist/client/create-query-client.js +78 -0
- package/dist/client/create-query-client.js.map +1 -0
- package/dist/client/db-admin/DevDatabaseLink.d.ts +1 -1
- package/dist/client/db-admin/DevDatabaseLink.d.ts.map +1 -1
- package/dist/client/db-admin/RowSidePanel.d.ts +1 -1
- package/dist/client/db-admin/RowSidePanel.d.ts.map +1 -1
- package/dist/client/db-admin/RowSidePanel.js +2 -2
- package/dist/client/db-admin/RowSidePanel.js.map +1 -1
- package/dist/client/db-admin/TableEditor.d.ts +1 -1
- package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
- package/dist/client/db-admin/TableEditor.js +1 -1
- package/dist/client/db-admin/TableEditor.js.map +1 -1
- package/dist/client/db-admin/cell-format.d.ts +1 -1
- package/dist/client/db-admin/cell-format.d.ts.map +1 -1
- package/dist/client/dev-overlay/DevOverlay.d.ts +1 -1
- package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
- package/dist/client/editor/index.d.ts +2 -0
- package/dist/client/editor/index.d.ts.map +1 -0
- package/dist/client/editor/index.js +2 -0
- package/dist/client/editor/index.js.map +1 -0
- package/dist/client/error-format.d.ts.map +1 -1
- package/dist/client/error-format.js +4 -0
- package/dist/client/error-format.js.map +1 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.d.ts +1 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.d.ts.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionSlot.d.ts +1 -1
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewerPage.d.ts +1 -1
- package/dist/client/extensions/ExtensionViewerPage.d.ts.map +1 -1
- package/dist/client/guided-questions.d.ts +6 -6
- package/dist/client/host-bridge.d.ts.map +1 -1
- package/dist/client/host-bridge.js +2 -0
- package/dist/client/host-bridge.js.map +1 -1
- package/dist/client/index.d.ts +7 -6
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +5 -3
- package/dist/client/index.js.map +1 -1
- package/dist/client/onboarding/OnboardingBanner.d.ts +1 -1
- package/dist/client/onboarding/OnboardingBanner.d.ts.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.d.ts +1 -1
- package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
- package/dist/client/onboarding/SetupButton.d.ts +1 -1
- package/dist/client/onboarding/SetupButton.d.ts.map +1 -1
- package/dist/client/org/InvitationBanner.d.ts +1 -1
- package/dist/client/org/InvitationBanner.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +1 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/RequireActiveOrg.d.ts +1 -1
- package/dist/client/org/RequireActiveOrg.d.ts.map +1 -1
- package/dist/client/org/hooks.d.ts +3 -3
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.d.ts +2 -2
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +34 -9
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
- package/dist/client/resources/ResourceEditor.js +1 -1
- package/dist/client/resources/ResourceEditor.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +2 -0
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts +1 -1
- package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/CodeBlockNode.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/CodeBlockNode.js +2 -1
- package/dist/client/rich-markdown-editor/CodeBlockNode.js.map +1 -1
- package/dist/client/rich-markdown-editor/ImageExtension.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/ImageExtension.js +2 -1
- package/dist/client/rich-markdown-editor/ImageExtension.js.map +1 -1
- package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts +1 -1
- package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/RegistryBlockNode.js +1 -1
- package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +1 -1
- package/dist/client/rich-markdown-editor/RichMarkdownEditor.d.ts +1 -1
- package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/SharedRichEditor.js +2 -3
- package/dist/client/rich-markdown-editor/SharedRichEditor.js.map +1 -1
- package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts +1 -1
- package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts.map +1 -1
- package/dist/client/route-state.d.ts +12 -2
- package/dist/client/route-state.d.ts.map +1 -1
- package/dist/client/route-state.js +1 -1
- package/dist/client/route-state.js.map +1 -1
- package/dist/client/route-warmup.d.ts +1 -1
- package/dist/client/route-warmup.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +2 -2
- package/dist/client/sharing/ShareDialog.d.ts +1 -1
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sse-event-processor.d.ts +8 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +33 -10
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/terminal/AgentTerminal.d.ts +1 -1
- package/dist/client/terminal/AgentTerminal.d.ts.map +1 -1
- package/dist/client/terminal/AgentTerminal.js +4 -2
- package/dist/client/terminal/AgentTerminal.js.map +1 -1
- package/dist/client/tool-cells/BashCell.d.ts +25 -0
- package/dist/client/tool-cells/BashCell.d.ts.map +1 -0
- package/dist/client/tool-cells/BashCell.js +49 -0
- package/dist/client/tool-cells/BashCell.js.map +1 -0
- package/dist/client/tool-cells/EditCell.d.ts +24 -0
- package/dist/client/tool-cells/EditCell.d.ts.map +1 -0
- package/dist/client/tool-cells/EditCell.js +126 -0
- package/dist/client/tool-cells/EditCell.js.map +1 -0
- package/dist/client/tool-cells/FilesChangedSummary.d.ts +13 -0
- package/dist/client/tool-cells/FilesChangedSummary.d.ts.map +1 -0
- package/dist/client/tool-cells/FilesChangedSummary.js +98 -0
- package/dist/client/tool-cells/FilesChangedSummary.js.map +1 -0
- package/dist/client/tool-cells/WriteCell.d.ts +17 -0
- package/dist/client/tool-cells/WriteCell.d.ts.map +1 -0
- package/dist/client/tool-cells/WriteCell.js +26 -0
- package/dist/client/tool-cells/WriteCell.js.map +1 -0
- package/dist/client/tool-cells/index.d.ts +8 -0
- package/dist/client/tool-cells/index.d.ts.map +1 -0
- package/dist/client/tool-cells/index.js +5 -0
- package/dist/client/tool-cells/index.js.map +1 -0
- package/dist/client/transcription/BuilderTranscriptionCta.d.ts +1 -1
- package/dist/client/transcription/BuilderTranscriptionCta.d.ts.map +1 -1
- package/dist/client/use-chat-threads.d.ts +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +11 -8
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +2 -0
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +329 -302
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/code-agents/transcript-normalizer.d.ts +15 -1
- package/dist/code-agents/transcript-normalizer.d.ts.map +1 -1
- package/dist/code-agents/transcript-normalizer.js +47 -0
- package/dist/code-agents/transcript-normalizer.js.map +1 -1
- package/dist/coding-tools/index.d.ts +75 -0
- package/dist/coding-tools/index.d.ts.map +1 -1
- package/dist/coding-tools/index.js +137 -10
- package/dist/coding-tools/index.js.map +1 -1
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +15 -9
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/ydoc-manager.d.ts +1 -1
- package/dist/collab/ydoc-manager.d.ts.map +1 -1
- package/dist/collab/ydoc-manager.js +1 -1
- package/dist/collab/ydoc-manager.js.map +1 -1
- package/dist/db/client.d.ts +9 -1
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +204 -48
- package/dist/db/client.js.map +1 -1
- package/dist/db/create-get-db.d.ts +38 -0
- package/dist/db/create-get-db.d.ts.map +1 -1
- package/dist/db/create-get-db.js +204 -4
- package/dist/db/create-get-db.js.map +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +159 -67
- package/dist/db/migrations.js.map +1 -1
- package/dist/demo/actions/toggle-demo-mode.d.ts +6 -1
- package/dist/demo/actions/toggle-demo-mode.d.ts.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +80 -39
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.js +20 -10
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/extensions/schema.d.ts +51 -51
- package/dist/extensions/slots/schema.d.ts +13 -13
- package/dist/file-upload/actions/upload-image.d.ts +26 -1
- package/dist/file-upload/actions/upload-image.d.ts.map +1 -1
- package/dist/file-upload/index.d.ts +1 -1
- package/dist/file-upload/index.d.ts.map +1 -1
- package/dist/file-upload/index.js +1 -1
- package/dist/file-upload/index.js.map +1 -1
- package/dist/file-upload/pre-upload-attachments.d.ts +37 -0
- package/dist/file-upload/pre-upload-attachments.d.ts.map +1 -1
- package/dist/file-upload/pre-upload-attachments.js +79 -19
- package/dist/file-upload/pre-upload-attachments.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/adapters/slack.js +1 -1
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/plugin.js +1 -1
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/jobs/scheduler.js +70 -21
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/mcp/actions/create-org-service-token.d.ts +14 -0
- package/dist/mcp/actions/create-org-service-token.d.ts.map +1 -0
- package/dist/mcp/actions/create-org-service-token.js +74 -0
- package/dist/mcp/actions/create-org-service-token.js.map +1 -0
- package/dist/mcp/actions/list-org-service-tokens.d.ts +17 -0
- package/dist/mcp/actions/list-org-service-tokens.d.ts.map +1 -0
- package/dist/mcp/actions/list-org-service-tokens.js +42 -0
- package/dist/mcp/actions/list-org-service-tokens.js.map +1 -0
- package/dist/mcp/actions/revoke-org-service-token.d.ts +7 -0
- package/dist/mcp/actions/revoke-org-service-token.d.ts.map +1 -0
- package/dist/mcp/actions/revoke-org-service-token.js +28 -0
- package/dist/mcp/actions/revoke-org-service-token.js.map +1 -0
- package/dist/mcp/actions/service-token-access.d.ts +24 -0
- package/dist/mcp/actions/service-token-access.d.ts.map +1 -0
- package/dist/mcp/actions/service-token-access.js +63 -0
- package/dist/mcp/actions/service-token-access.js.map +1 -0
- package/dist/mcp/build-server.d.ts +42 -11
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +53 -3
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/connect-route.d.ts +35 -0
- package/dist/mcp/connect-route.d.ts.map +1 -1
- package/dist/mcp/connect-route.js +57 -2
- package/dist/mcp/connect-route.js.map +1 -1
- package/dist/mcp/connect-store.d.ts +43 -0
- package/dist/mcp/connect-store.d.ts.map +1 -1
- package/dist/mcp/connect-store.js +129 -12
- package/dist/mcp/connect-store.js.map +1 -1
- package/dist/mcp/oauth-token.d.ts +10 -0
- package/dist/mcp/oauth-token.d.ts.map +1 -1
- package/dist/mcp/oauth-token.js +2 -0
- package/dist/mcp/oauth-token.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +3 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp-client/routes.js +1 -1
- package/dist/mcp-client/routes.js.map +1 -1
- package/dist/org/context.d.ts +4 -0
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +10 -0
- package/dist/org/context.js.map +1 -1
- package/dist/org/handlers.d.ts +11 -7
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +0 -8
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/migrations.d.ts.map +1 -1
- package/dist/org/migrations.js +8 -0
- package/dist/org/migrations.js.map +1 -1
- package/dist/org/schema.d.ts +15 -15
- package/dist/progress/actions.d.ts.map +1 -1
- package/dist/progress/actions.js +13 -5
- package/dist/progress/actions.js.map +1 -1
- package/dist/provider-api/actions/delete-staged-dataset.d.ts +9 -0
- package/dist/provider-api/actions/delete-staged-dataset.d.ts.map +1 -0
- package/dist/provider-api/actions/delete-staged-dataset.js +35 -0
- package/dist/provider-api/actions/delete-staged-dataset.js.map +1 -0
- package/dist/provider-api/actions/list-staged-datasets.d.ts +15 -0
- package/dist/provider-api/actions/list-staged-datasets.d.ts.map +1 -0
- package/dist/provider-api/actions/list-staged-datasets.js +41 -0
- package/dist/provider-api/actions/list-staged-datasets.js.map +1 -0
- package/dist/provider-api/actions/query-staged-dataset.d.ts +29 -0
- package/dist/provider-api/actions/query-staged-dataset.d.ts.map +1 -0
- package/dist/provider-api/actions/query-staged-dataset.js +116 -0
- package/dist/provider-api/actions/query-staged-dataset.js.map +1 -0
- package/dist/provider-api/custom-registry.d.ts.map +1 -1
- package/dist/provider-api/custom-registry.js.map +1 -1
- package/dist/provider-api/index.d.ts +10 -10
- package/dist/provider-api/index.js +0 -5
- package/dist/provider-api/index.js.map +1 -1
- package/dist/provider-api/staged-datasets-aggregate.d.ts +46 -0
- package/dist/provider-api/staged-datasets-aggregate.d.ts.map +1 -0
- package/dist/provider-api/staged-datasets-aggregate.js +209 -0
- package/dist/provider-api/staged-datasets-aggregate.js.map +1 -0
- package/dist/provider-api/staged-datasets-store.d.ts +76 -0
- package/dist/provider-api/staged-datasets-store.d.ts.map +1 -0
- package/dist/provider-api/staged-datasets-store.js +319 -0
- package/dist/provider-api/staged-datasets-store.js.map +1 -0
- package/dist/provider-api/staging.d.ts +100 -0
- package/dist/provider-api/staging.d.ts.map +1 -0
- package/dist/provider-api/staging.js +281 -0
- package/dist/provider-api/staging.js.map +1 -0
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +13 -1
- package/dist/resources/handlers.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +1 -2
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/scripts/resources/migrate-learnings.d.ts +1 -1
- package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -1
- package/dist/scripts/resources/migrate-learnings.js +1 -1
- package/dist/scripts/resources/migrate-learnings.js.map +1 -1
- package/dist/secrets/schema.d.ts +7 -7
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +14 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +3 -2
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +33 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +251 -180
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-discovery.d.ts.map +1 -1
- package/dist/server/agent-discovery.js +13 -16
- package/dist/server/agent-discovery.js.map +1 -1
- package/dist/server/agent-teams-run-queue.d.ts +31 -8
- package/dist/server/agent-teams-run-queue.d.ts.map +1 -1
- package/dist/server/agent-teams-run-queue.js +61 -18
- package/dist/server/agent-teams-run-queue.js.map +1 -1
- package/dist/server/agent-teams.d.ts +27 -1
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +214 -14
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/app-base-path.d.ts +20 -0
- package/dist/server/app-base-path.d.ts.map +1 -1
- package/dist/server/app-base-path.js +36 -0
- package/dist/server/app-base-path.js.map +1 -1
- package/dist/server/attachment-actions.d.ts +43 -0
- package/dist/server/attachment-actions.d.ts.map +1 -0
- package/dist/server/attachment-actions.js +214 -0
- package/dist/server/attachment-actions.js.map +1 -0
- package/dist/server/auth.js +1 -1
- package/dist/server/auth.js.map +1 -1
- package/dist/server/complete-text.d.ts +56 -0
- package/dist/server/complete-text.d.ts.map +1 -0
- package/dist/server/complete-text.js +147 -0
- package/dist/server/complete-text.js.map +1 -0
- package/dist/server/core-routes-plugin.d.ts +1 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +37 -27
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/cors-origins.d.ts.map +1 -1
- package/dist/server/cors-origins.js +6 -1
- package/dist/server/cors-origins.js.map +1 -1
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +2 -1
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/csrf.d.ts +1 -1
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/email-actions.d.ts +19 -0
- package/dist/server/email-actions.d.ts.map +1 -0
- package/dist/server/email-actions.js +191 -0
- package/dist/server/email-actions.js.map +1 -0
- package/dist/server/embed-route.js +1 -1
- package/dist/server/embed-route.js.map +1 -1
- package/dist/server/embed-session.d.ts.map +1 -1
- package/dist/server/embed-session.js +5 -1
- package/dist/server/embed-session.js.map +1 -1
- package/dist/server/entry-server.d.ts +24 -0
- package/dist/server/entry-server.d.ts.map +1 -0
- package/dist/server/entry-server.js +54 -0
- package/dist/server/entry-server.js.map +1 -0
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +2 -10
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +2 -9
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/google-realtime-session.d.ts.map +1 -1
- package/dist/server/google-realtime-session.js +6 -4
- package/dist/server/google-realtime-session.js.map +1 -1
- package/dist/server/h3-helpers.d.ts +39 -0
- package/dist/server/h3-helpers.d.ts.map +1 -1
- package/dist/server/h3-helpers.js +104 -1
- package/dist/server/h3-helpers.js.map +1 -1
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +1 -8
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/open-route.d.ts.map +1 -1
- package/dist/server/open-route.js +1 -0
- package/dist/server/open-route.js.map +1 -1
- package/dist/server/prompts/framework-core-compact.d.ts +19 -0
- package/dist/server/prompts/framework-core-compact.d.ts.map +1 -0
- package/dist/server/prompts/framework-core-compact.js +69 -0
- package/dist/server/prompts/framework-core-compact.js.map +1 -0
- package/dist/server/prompts/framework-core.d.ts +26 -0
- package/dist/server/prompts/framework-core.d.ts.map +1 -0
- package/dist/server/prompts/framework-core.js +130 -0
- package/dist/server/prompts/framework-core.js.map +1 -0
- package/dist/server/prompts/index.d.ts +9 -0
- package/dist/server/prompts/index.d.ts.map +1 -0
- package/dist/server/prompts/index.js +9 -0
- package/dist/server/prompts/index.js.map +1 -0
- package/dist/server/prompts/model-overlays.d.ts +18 -0
- package/dist/server/prompts/model-overlays.d.ts.map +1 -0
- package/dist/server/prompts/model-overlays.js +46 -0
- package/dist/server/prompts/model-overlays.js.map +1 -0
- package/dist/server/prompts/shared-rules.d.ts +29 -0
- package/dist/server/prompts/shared-rules.d.ts.map +1 -0
- package/dist/server/prompts/shared-rules.js +54 -0
- package/dist/server/prompts/shared-rules.js.map +1 -0
- package/dist/server/security-headers.d.ts +7 -1
- package/dist/server/security-headers.d.ts.map +1 -1
- package/dist/server/security-headers.js +11 -0
- package/dist/server/security-headers.js.map +1 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +135 -46
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +7 -4
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/settings/store.d.ts.map +1 -1
- package/dist/settings/store.js +9 -0
- package/dist/settings/store.js.map +1 -1
- package/dist/shared/markdown-block-split.d.ts +39 -0
- package/dist/shared/markdown-block-split.d.ts.map +1 -0
- package/dist/shared/markdown-block-split.js +97 -0
- package/dist/shared/markdown-block-split.js.map +1 -0
- package/dist/shared/reasoning-effort.js +13 -1
- package/dist/shared/reasoning-effort.js.map +1 -1
- package/dist/shared/streaming-text-smoothing.d.ts +18 -0
- package/dist/shared/streaming-text-smoothing.d.ts.map +1 -1
- package/dist/shared/streaming-text-smoothing.js +70 -4
- package/dist/shared/streaming-text-smoothing.js.map +1 -1
- package/dist/sharing/actions/list-resource-shares.d.ts +24 -1
- package/dist/sharing/actions/list-resource-shares.d.ts.map +1 -1
- package/dist/sharing/actions/set-resource-visibility.d.ts +8 -1
- package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
- package/dist/sharing/actions/share-resource.d.ts +12 -1
- package/dist/sharing/actions/share-resource.d.ts.map +1 -1
- package/dist/sharing/actions/unshare-resource.d.ts +8 -1
- package/dist/sharing/actions/unshare-resource.d.ts.map +1 -1
- package/dist/sharing/schema.d.ts +10 -10
- package/dist/styles/agent-conversation.css +239 -0
- package/dist/templates/default/.agents/skills/delegate-to-agent/SKILL.md +50 -2
- package/dist/templates/default/AGENTS.md +1 -1
- package/dist/templates/default/DEVELOPING.md +19 -0
- package/dist/templates/default/app/entry.client.tsx +4 -1
- package/dist/templates/default/app/entry.server.tsx +4 -56
- package/dist/templates/default/app/global.css +3 -2
- package/dist/templates/default/app/root.tsx +8 -24
- package/dist/templates/default/app/routes/_index.tsx +0 -13
- package/dist/templates/default/package.json +6 -5
- package/dist/templates/default/tsconfig.json +2 -1
- package/dist/templates/starter-shell-sync.spec.ts +118 -0
- package/dist/templates/ui-primitives-sync.spec.ts +399 -0
- package/dist/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +50 -2
- package/dist/terminal/pty-server.js +1 -1
- package/dist/terminal/pty-server.js.map +1 -1
- package/dist/triggers/dispatcher.js +1 -1
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/usage/store.d.ts.map +1 -1
- package/dist/usage/store.js +60 -7
- package/dist/usage/store.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +44 -12
- package/dist/vite/client.js.map +1 -1
- package/dist/workspace-files/schema.d.ts +8 -8
- package/dist/workspace-files/tool.d.ts.map +1 -1
- package/dist/workspace-files/tool.js +0 -1
- package/dist/workspace-files/tool.js.map +1 -1
- package/docs/content/a2a-protocol.md +18 -12
- package/docs/content/actions.md +42 -10
- package/docs/content/agent-mentions.md +7 -8
- package/docs/content/agent-teams.md +23 -37
- package/docs/content/agent-web-surfaces.md +18 -9
- package/docs/content/authentication.md +6 -17
- package/docs/content/automations.md +43 -15
- package/docs/content/cli-adapters.md +25 -24
- package/docs/content/client.md +66 -17
- package/docs/content/cloneable-saas.md +19 -23
- package/docs/content/code-agents-ui.md +3 -31
- package/docs/content/components.md +308 -0
- package/docs/content/context-awareness.md +4 -0
- package/docs/content/creating-templates.md +4 -2
- package/docs/content/cross-app-sso.md +45 -19
- package/docs/content/database.md +26 -1
- package/docs/content/deployment.md +3 -1
- package/docs/content/dispatch.md +9 -37
- package/docs/content/drop-in-agent.md +123 -2
- package/docs/content/embedding-sdk.md +35 -0
- package/docs/content/extensions.md +2 -2
- package/docs/content/external-agents.md +86 -171
- package/docs/content/faq.md +6 -27
- package/docs/content/frames.md +9 -12
- package/docs/content/getting-started.md +80 -77
- package/docs/content/key-concepts.md +29 -19
- package/docs/content/mcp-apps.md +103 -0
- package/docs/content/mcp-clients.md +2 -2
- package/docs/content/mcp-protocol.md +40 -17
- package/docs/content/messaging.md +11 -4
- package/docs/content/migration-workbench.md +4 -47
- package/docs/content/multi-app-workspace.md +48 -17
- package/docs/content/multi-tenancy.md +1 -1
- package/docs/content/notifications.md +8 -6
- package/docs/content/observability.md +26 -15
- package/docs/content/onboarding.md +7 -1
- package/docs/content/pr-visual-recap.md +203 -23
- package/docs/content/progress.md +5 -5
- package/docs/content/pure-agent-apps.md +3 -1
- package/docs/content/real-time-collaboration.md +106 -0
- package/docs/content/recurring-jobs.md +17 -1
- package/docs/content/security.md +17 -3
- package/docs/content/server.md +39 -3
- package/docs/content/sharing.md +20 -1
- package/docs/content/skills-guide.md +151 -125
- package/docs/content/template-analytics.md +8 -0
- package/docs/content/template-assets.md +2 -0
- package/docs/content/template-brain.md +59 -3
- package/docs/content/template-calendar.md +8 -0
- package/docs/content/template-clips.md +11 -2
- package/docs/content/template-content.md +24 -4
- package/docs/content/template-design.md +19 -17
- package/docs/content/template-dispatch.md +2 -0
- package/docs/content/template-forms.md +28 -1
- package/docs/content/template-mail.md +17 -0
- package/docs/content/template-plan.md +177 -10
- package/docs/content/template-slides.md +51 -12
- package/docs/content/template-videos.md +17 -0
- package/docs/content/tracking.md +17 -13
- package/docs/content/using-your-agent.md +15 -5
- package/docs/content/voice-input.md +1 -1
- package/docs/content/what-is-agent-native.md +5 -6
- package/docs/content/workspace-connections.md +138 -424
- package/docs/content/workspace-management.md +12 -128
- package/docs/content/workspace.md +125 -199
- package/docs/content/writing-agent-instructions.md +17 -1
- package/package.json +25 -6
- package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +50 -2
- package/src/templates/default/AGENTS.md +1 -1
- package/src/templates/default/DEVELOPING.md +19 -0
- package/src/templates/default/app/entry.client.tsx +4 -1
- package/src/templates/default/app/entry.server.tsx +4 -56
- package/src/templates/default/app/global.css +3 -2
- package/src/templates/default/app/root.tsx +8 -24
- package/src/templates/default/app/routes/_index.tsx +0 -13
- package/src/templates/default/package.json +6 -5
- package/src/templates/default/tsconfig.json +2 -1
- package/src/templates/starter-shell-sync.spec.ts +118 -0
- package/src/templates/ui-primitives-sync.spec.ts +399 -0
- package/src/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +50 -2
- package/tsconfig.base.json +2 -10
- package/dist/cli/app-skill.d.ts +0 -157
- package/dist/cli/app-skill.d.ts.map +0 -1
- package/dist/cli/audit-agent-web.d.ts +0 -2
- package/dist/cli/audit-agent-web.d.ts.map +0 -1
- package/dist/cli/code-agent-connector.d.ts +0 -17
- package/dist/cli/code-agent-connector.d.ts.map +0 -1
- package/dist/cli/code.d.ts +0 -66
- package/dist/cli/code.d.ts.map +0 -1
- package/dist/cli/connect.d.ts +0 -140
- package/dist/cli/connect.d.ts.map +0 -1
- package/dist/cli/context-xray-local.d.ts +0 -16
- package/dist/cli/context-xray-local.d.ts.map +0 -1
- package/dist/cli/create-workspace.d.ts +0 -8
- package/dist/cli/create-workspace.d.ts.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/info.d.ts +0 -2
- package/dist/cli/info.d.ts.map +0 -1
- package/dist/cli/mcp-config-writers.d.ts +0 -82
- package/dist/cli/mcp-config-writers.d.ts.map +0 -1
- package/dist/cli/mcp.d.ts +0 -16
- package/dist/cli/mcp.d.ts.map +0 -1
- package/dist/cli/migrate.d.ts +0 -38
- package/dist/cli/migrate.d.ts.map +0 -1
- package/dist/cli/plan-local.d.ts +0 -43
- package/dist/cli/plan-local.d.ts.map +0 -1
- package/dist/cli/plan-publish-store.d.ts +0 -62
- package/dist/cli/plan-publish-store.d.ts.map +0 -1
- package/dist/cli/pr-visual-recap-workflow.d.ts +0 -11
- package/dist/cli/pr-visual-recap-workflow.d.ts.map +0 -1
- package/dist/cli/recap.d.ts +0 -297
- package/dist/cli/recap.d.ts.map +0 -1
- package/dist/cli/skills.d.ts +0 -162
- package/dist/cli/skills.d.ts.map +0 -1
- package/dist/cli/workspace-dev.d.ts +0 -96
- package/dist/cli/workspace-dev.d.ts.map +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { AgentChatSurface, AgentPanel, AgentSidebar, AgentToggleButton, focusAgentChat, type AgentChatSurfaceMode, type AgentChatSurfaceProps, type AgentPanelProps, type AgentSidebarProps, } from "../AgentPanel.js";
|
|
2
|
+
export { AssistantChat, clearChatStorage, type AssistantChatProps, type AssistantChatHandle, type AssistantChatAdapterContext, } from "../AssistantChat.js";
|
|
3
|
+
export { MultiTabAssistantChat, type MultiTabAssistantChatProps, type MultiTabAssistantChatHeaderProps, } from "../MultiTabAssistantChat.js";
|
|
4
|
+
export { createAgentChatAdapter, type AgentChatSurfaceKind, type CreateAgentChatAdapterOptions, } from "../agent-chat-adapter.js";
|
|
5
|
+
export { codeAgentTranscriptEventsToContent, createCodeAgentChatAdapter, type CodeAgentChatController, type CodeAgentChatControlResult, type CodeAgentChatFollowUpMode, type CodeAgentChatTranscriptEvent, type CreateCodeAgentChatAdapterOptions, } from "../code-agent-chat-adapter.js";
|
|
6
|
+
export { sendToAgentChat, type AgentChatMessage } from "../agent-chat.js";
|
|
7
|
+
export { useAgentChatGenerating } from "../use-agent-chat.js";
|
|
8
|
+
export { useSendToAgentChat } from "../use-send-to-agent-chat.js";
|
|
9
|
+
export { useChatModels, type UseChatModelsResult, type EngineModelGroup, } from "../use-chat-models.js";
|
|
10
|
+
export { useChatThreads, type ChatThreadScope, type ChatThreadSnapshot, type ChatThreadSummary, type ChatThreadData, type UseChatThreadsOptions, } from "../use-chat-threads.js";
|
|
11
|
+
export * from "../composer/index.js";
|
|
12
|
+
export * from "../conversation/index.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,GACtC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,6BAA6B,GACnC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kCAAkC,EAClC,0BAA0B,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,iCAAiC,GACvC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { AgentChatSurface, AgentPanel, AgentSidebar, AgentToggleButton, focusAgentChat, } from "../AgentPanel.js";
|
|
2
|
+
export { AssistantChat, clearChatStorage, } from "../AssistantChat.js";
|
|
3
|
+
export { MultiTabAssistantChat, } from "../MultiTabAssistantChat.js";
|
|
4
|
+
export { createAgentChatAdapter, } from "../agent-chat-adapter.js";
|
|
5
|
+
export { codeAgentTranscriptEventsToContent, createCodeAgentChatAdapter, } from "../code-agent-chat-adapter.js";
|
|
6
|
+
export { sendToAgentChat } from "../agent-chat.js";
|
|
7
|
+
export { useAgentChatGenerating } from "../use-agent-chat.js";
|
|
8
|
+
export { useSendToAgentChat } from "../use-send-to-agent-chat.js";
|
|
9
|
+
export { useChatModels, } from "../use-chat-models.js";
|
|
10
|
+
export { useChatThreads, } from "../use-chat-threads.js";
|
|
11
|
+
export * from "../composer/index.js";
|
|
12
|
+
export * from "../conversation/index.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,cAAc,GAKf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,gBAAgB,GAIjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,GAGtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,sBAAsB,GAGvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kCAAkC,EAClC,0BAA0B,GAM3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAyB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EACL,aAAa,GAGd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,GAMf,MAAM,wBAAwB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC","sourcesContent":["export {\n AgentChatSurface,\n AgentPanel,\n AgentSidebar,\n AgentToggleButton,\n focusAgentChat,\n type AgentChatSurfaceMode,\n type AgentChatSurfaceProps,\n type AgentPanelProps,\n type AgentSidebarProps,\n} from \"../AgentPanel.js\";\nexport {\n AssistantChat,\n clearChatStorage,\n type AssistantChatProps,\n type AssistantChatHandle,\n type AssistantChatAdapterContext,\n} from \"../AssistantChat.js\";\nexport {\n MultiTabAssistantChat,\n type MultiTabAssistantChatProps,\n type MultiTabAssistantChatHeaderProps,\n} from \"../MultiTabAssistantChat.js\";\nexport {\n createAgentChatAdapter,\n type AgentChatSurfaceKind,\n type CreateAgentChatAdapterOptions,\n} from \"../agent-chat-adapter.js\";\nexport {\n codeAgentTranscriptEventsToContent,\n createCodeAgentChatAdapter,\n type CodeAgentChatController,\n type CodeAgentChatControlResult,\n type CodeAgentChatFollowUpMode,\n type CodeAgentChatTranscriptEvent,\n type CreateCodeAgentChatAdapterOptions,\n} from \"../code-agent-chat-adapter.js\";\nexport { sendToAgentChat, type AgentChatMessage } from \"../agent-chat.js\";\nexport { useAgentChatGenerating } from \"../use-agent-chat.js\";\nexport { useSendToAgentChat } from \"../use-send-to-agent-chat.js\";\nexport {\n useChatModels,\n type UseChatModelsResult,\n type EngineModelGroup,\n} from \"../use-chat-models.js\";\nexport {\n useChatThreads,\n type ChatThreadScope,\n type ChatThreadSnapshot,\n type ChatThreadSummary,\n type ChatThreadData,\n type UseChatThreadsOptions,\n} from \"../use-chat-threads.js\";\nexport * from \"../composer/index.js\";\nexport * from \"../conversation/index.js\";\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { default as ReactMarkdownType } from "react-markdown";
|
|
3
|
+
import type { defaultUrlTransform as DefaultUrlTransformType } from "react-markdown";
|
|
4
|
+
import type remarkGfmType from "remark-gfm";
|
|
5
|
+
type ReactMarkdownModule = {
|
|
6
|
+
default: typeof ReactMarkdownType;
|
|
7
|
+
defaultUrlTransform: typeof DefaultUrlTransformType;
|
|
8
|
+
};
|
|
9
|
+
export declare let markdownModule: ReactMarkdownModule | null;
|
|
10
|
+
export declare let remarkGfmFn: typeof remarkGfmType | null;
|
|
11
|
+
export declare function loadMarkdown(): void;
|
|
12
|
+
export declare function onMarkdownReady(fn: () => void): () => void;
|
|
13
|
+
type ShikiHighlighter = {
|
|
14
|
+
codeToHtml: (code: string, options: {
|
|
15
|
+
lang: string;
|
|
16
|
+
themes: {
|
|
17
|
+
light: string;
|
|
18
|
+
dark: string;
|
|
19
|
+
};
|
|
20
|
+
defaultColor?: false | "light" | "dark";
|
|
21
|
+
}) => string | Promise<string>;
|
|
22
|
+
getLoadedLanguages: () => string[];
|
|
23
|
+
};
|
|
24
|
+
export declare function loadHighlighter(): Promise<ShikiHighlighter>;
|
|
25
|
+
export declare const TextStreamingContext: React.Context<boolean>;
|
|
26
|
+
export declare function HighlightedCodeBlock({ code, lang, }: {
|
|
27
|
+
code: string;
|
|
28
|
+
lang: string;
|
|
29
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export declare function markdownUrlTransform(value: string): string;
|
|
31
|
+
export declare function extractCodeText(child: React.ReactNode): string;
|
|
32
|
+
export declare const markdownComponents: {
|
|
33
|
+
a(props: React.AnchorHTMLAttributes<HTMLAnchorElement>): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
pre(props: React.HTMLAttributes<HTMLPreElement>): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
};
|
|
36
|
+
export declare function useSmoothStreamingText(targetText: string, streaming: boolean, resetKey: string): string;
|
|
37
|
+
export declare function useMarkdownReady(): boolean;
|
|
38
|
+
export declare const MemoizedMarkdownBlock: React.MemoExoticComponent<({ blockText, }: {
|
|
39
|
+
blockText: string;
|
|
40
|
+
}) => import("react/jsx-runtime").JSX.Element | null>;
|
|
41
|
+
export declare function SmoothMarkdownText({ text, streaming, resetKey, statusType, }: {
|
|
42
|
+
text: string;
|
|
43
|
+
streaming: boolean;
|
|
44
|
+
resetKey: string;
|
|
45
|
+
statusType?: string;
|
|
46
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
export declare function MarkdownText(): import("react/jsx-runtime").JSX.Element;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=markdown-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-renderer.d.ts","sourceRoot":"","sources":["../../../src/client/chat/markdown-renderer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAMN,MAAM,OAAO,CAAC;AAOf,OAAO,KAAK,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,IAAI,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,KAAK,aAAa,MAAM,YAAY,CAAC;AAwB5C,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,OAAO,iBAAiB,CAAC;IAClC,mBAAmB,EAAE,OAAO,uBAAuB,CAAC;CACrD,CAAC;AAEF,eAAO,IAAI,cAAc,EAAE,mBAAmB,GAAG,IAAW,CAAC;AAC7D,eAAO,IAAI,WAAW,EAAE,OAAO,aAAa,GAAG,IAAW,CAAC;AAG3D,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAO1D;AASD,KAAK,gBAAgB,GAAG;IACtB,UAAU,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QACxC,YAAY,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;KACzC,KACE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,kBAAkB,EAAE,MAAM,MAAM,EAAE,CAAC;CACpC,CAAC;AAGF,wBAAgB,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAwC3D;AAOD,eAAO,MAAM,oBAAoB,wBAA6B,CAAC;AAM/D,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,IAAI,GACL,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,2CAWA;AA8BD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI1D;AAID,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAQ9D;AAID,eAAO,MAAM,kBAAkB;aACpB,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;eA+C3C,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;CAuBhD,CAAC;AAwCF,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CA0LR;AAID,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C;AAMD,eAAO,MAAM,qBAAqB,6CAE/B;IACD,SAAS,EAAE,MAAM,CAAC;CACnB,oDAaC,CAAC;AAIH,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,UAAuB,GACxB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,2CA0DA;AAID,wBAAgB,YAAY,4CAoB3B"}
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
// Owns: lazy react-markdown/shiki loaders, SmoothMarkdownText, MarkdownText,
|
|
3
|
+
// HighlightedCodeBlock wrapper, and the markdownComponents/markdownUrlTransform
|
|
4
|
+
// used by every markdown render path in AssistantChat.
|
|
5
|
+
import React, { useState, useEffect, useCallback, useMemo, useRef, } from "react";
|
|
6
|
+
import { useThread, useMessageRuntime, useMessagePartText, } from "@assistant-ui/react";
|
|
7
|
+
import { initialSmoothStreamingGraphemeCount, SMOOTH_STREAMING_COMMIT_INTERVAL_MS, smoothStreamingPunctuationDelayMs, smoothStreamingRevealCount, splitStreamingTextGraphemes, } from "../../shared/streaming-text-smoothing.js";
|
|
8
|
+
import { splitMarkdownBlocks } from "../../shared/markdown-block-split.js";
|
|
9
|
+
import { HighlightedCodeBlock as SharedHighlightedCodeBlock } from "../HighlightedCodeBlock.js";
|
|
10
|
+
import { IframeEmbed, parseEmbedBody } from "../IframeEmbed.js";
|
|
11
|
+
import { cn } from "../utils.js";
|
|
12
|
+
import { NEW_CHAT_ACTION_HREF, BUILDER_SPACE_SETTINGS_URL, } from "../error-format.js";
|
|
13
|
+
import { IconPlus, IconExternalLink } from "@tabler/icons-react";
|
|
14
|
+
export let markdownModule = null;
|
|
15
|
+
export let remarkGfmFn = null;
|
|
16
|
+
const markdownListeners = new Set();
|
|
17
|
+
export function loadMarkdown() {
|
|
18
|
+
if (markdownModule !== null)
|
|
19
|
+
return; // already loaded
|
|
20
|
+
Promise.all([import("react-markdown"), import("remark-gfm")]).then(([md, gfm]) => {
|
|
21
|
+
markdownModule = md;
|
|
22
|
+
remarkGfmFn = gfm.default;
|
|
23
|
+
markdownListeners.forEach((fn) => fn());
|
|
24
|
+
markdownListeners.clear();
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
export function onMarkdownReady(fn) {
|
|
28
|
+
if (markdownModule !== null) {
|
|
29
|
+
fn();
|
|
30
|
+
return () => { };
|
|
31
|
+
}
|
|
32
|
+
markdownListeners.add(fn);
|
|
33
|
+
return () => markdownListeners.delete(fn);
|
|
34
|
+
}
|
|
35
|
+
loadMarkdown();
|
|
36
|
+
let highlighterLoader = null;
|
|
37
|
+
export function loadHighlighter() {
|
|
38
|
+
if (!highlighterLoader) {
|
|
39
|
+
highlighterLoader = (async () => {
|
|
40
|
+
// Use the JavaScript regex engine instead of Oniguruma WASM (~608 KB saved).
|
|
41
|
+
// forgiving:true degrades unsupported patterns gracefully instead of throwing.
|
|
42
|
+
const [{ createHighlighterCore }, { createJavaScriptRegexEngine }] = await Promise.all([
|
|
43
|
+
import("shiki/core"),
|
|
44
|
+
import("shiki/engine/javascript"),
|
|
45
|
+
]);
|
|
46
|
+
return createHighlighterCore({
|
|
47
|
+
themes: [
|
|
48
|
+
import("shiki/themes/github-light-default.mjs"),
|
|
49
|
+
import("shiki/themes/github-dark-default.mjs"),
|
|
50
|
+
],
|
|
51
|
+
langs: [
|
|
52
|
+
import("shiki/langs/javascript.mjs"),
|
|
53
|
+
import("shiki/langs/typescript.mjs"),
|
|
54
|
+
import("shiki/langs/jsx.mjs"),
|
|
55
|
+
import("shiki/langs/tsx.mjs"),
|
|
56
|
+
import("shiki/langs/json.mjs"),
|
|
57
|
+
import("shiki/langs/css.mjs"),
|
|
58
|
+
import("shiki/langs/html.mjs"),
|
|
59
|
+
import("shiki/langs/markdown.mjs"),
|
|
60
|
+
import("shiki/langs/bash.mjs"),
|
|
61
|
+
import("shiki/langs/shellscript.mjs"),
|
|
62
|
+
import("shiki/langs/python.mjs"),
|
|
63
|
+
import("shiki/langs/yaml.mjs"),
|
|
64
|
+
import("shiki/langs/sql.mjs"),
|
|
65
|
+
],
|
|
66
|
+
engine: createJavaScriptRegexEngine({ forgiving: true }),
|
|
67
|
+
});
|
|
68
|
+
})().catch((error) => {
|
|
69
|
+
// Reset on failure so a future code block can retry instead of
|
|
70
|
+
// silently failing forever on a stale chunk / network blip.
|
|
71
|
+
highlighterLoader = null;
|
|
72
|
+
throw error;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return highlighterLoader;
|
|
76
|
+
}
|
|
77
|
+
// ─── Streaming context ───────────────────────────────────────────────────────
|
|
78
|
+
// Declared at module level so HighlightedCodeBlock (used in markdownComponents
|
|
79
|
+
// below) can read the current streaming state without the components object
|
|
80
|
+
// needing to be rebuilt on every render.
|
|
81
|
+
export const TextStreamingContext = React.createContext(false);
|
|
82
|
+
// ─── HighlightedCodeBlock wrapper ────────────────────────────────────────────
|
|
83
|
+
// Reads streaming state from context so markdownComponents (a static constant)
|
|
84
|
+
// can opt into debounced highlighting without needing to rebuild on every render.
|
|
85
|
+
export function HighlightedCodeBlock({ code, lang, }) {
|
|
86
|
+
const streaming = React.useContext(TextStreamingContext);
|
|
87
|
+
return (_jsx(SharedHighlightedCodeBlock, { code: code, lang: lang, containerClass: "agent-markdown-shiki", streaming: streaming, loadHighlighter: loadHighlighter }));
|
|
88
|
+
}
|
|
89
|
+
// ─── CTA helpers ─────────────────────────────────────────────────────────────
|
|
90
|
+
const CTA_BUTTON_CLASSES = "agent-markdown-cta mt-1 inline-flex items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background no-underline shadow-sm transition-colors hover:bg-foreground/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background cursor-pointer";
|
|
91
|
+
function isBuilderErrorCtaHref(href) {
|
|
92
|
+
if (!href)
|
|
93
|
+
return false;
|
|
94
|
+
try {
|
|
95
|
+
const url = new URL(href);
|
|
96
|
+
if (url.protocol !== "https:" || url.hostname !== "builder.io") {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
return (url.href === BUILDER_SPACE_SETTINGS_URL ||
|
|
100
|
+
url.pathname === "/account/billing" ||
|
|
101
|
+
/^\/app\/organizations\/[^/]+\/billing$/.test(url.pathname));
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// react-markdown's defaultUrlTransform strips href values whose protocol
|
|
108
|
+
// isn't on its safe list (https, mailto, etc.). Our in-app pseudo-href
|
|
109
|
+
// `agent-native:new-chat` would be blanked out by that, so let it through
|
|
110
|
+
// while delegating every other URL to the default transform for sanitization.
|
|
111
|
+
// Falls back to the value unchanged when the react-markdown module hasn't
|
|
112
|
+
// landed yet (conservative: no stripping beats an empty href).
|
|
113
|
+
export function markdownUrlTransform(value) {
|
|
114
|
+
if (value === NEW_CHAT_ACTION_HREF)
|
|
115
|
+
return value;
|
|
116
|
+
if (!markdownModule)
|
|
117
|
+
return value;
|
|
118
|
+
return markdownModule.defaultUrlTransform(value);
|
|
119
|
+
}
|
|
120
|
+
// ─── Code text extraction ─────────────────────────────────────────────────────
|
|
121
|
+
export function extractCodeText(child) {
|
|
122
|
+
if (typeof child === "string")
|
|
123
|
+
return child;
|
|
124
|
+
if (Array.isArray(child))
|
|
125
|
+
return child.map(extractCodeText).join("");
|
|
126
|
+
if (React.isValidElement(child)) {
|
|
127
|
+
const props = child.props;
|
|
128
|
+
return extractCodeText(props.children);
|
|
129
|
+
}
|
|
130
|
+
return "";
|
|
131
|
+
}
|
|
132
|
+
// ─── Markdown components ──────────────────────────────────────────────────────
|
|
133
|
+
export const markdownComponents = {
|
|
134
|
+
a(props) {
|
|
135
|
+
const { href, children, className, rel: _rel, target: _target, ...rest } = props;
|
|
136
|
+
if (href === NEW_CHAT_ACTION_HREF) {
|
|
137
|
+
// In-app action: dispatch a CustomEvent that MultiTabAssistantChat
|
|
138
|
+
// listens for and opens a new chat tab. Not an external navigation.
|
|
139
|
+
return (_jsxs("button", { type: "button", onClick: (e) => {
|
|
140
|
+
e.preventDefault();
|
|
141
|
+
window.dispatchEvent(new CustomEvent("agent-chat:new-chat"));
|
|
142
|
+
}, className: cn(CTA_BUTTON_CLASSES, className), children: [_jsx(IconPlus, { size: 13, strokeWidth: 2, "aria-hidden": "true" }), _jsx("span", { children: children })] }));
|
|
143
|
+
}
|
|
144
|
+
const isBuilderCta = isBuilderErrorCtaHref(href);
|
|
145
|
+
if (!isBuilderCta) {
|
|
146
|
+
return (_jsx("a", { href: href, className: className, ...rest, children: children }));
|
|
147
|
+
}
|
|
148
|
+
return (_jsxs("a", { href: href, target: "_blank", rel: "noreferrer", className: cn(CTA_BUTTON_CLASSES, className), ...rest, children: [_jsx("span", { children: children }), _jsx(IconExternalLink, { size: 13, strokeWidth: 2, "aria-hidden": "true" })] }));
|
|
149
|
+
},
|
|
150
|
+
pre(props) {
|
|
151
|
+
const { children, ...rest } = props;
|
|
152
|
+
if (React.isValidElement(children)) {
|
|
153
|
+
const childProps = children.props;
|
|
154
|
+
const className = childProps.className || "";
|
|
155
|
+
if (/\blanguage-embed\b/.test(className)) {
|
|
156
|
+
const body = extractCodeText(childProps.children);
|
|
157
|
+
const parsed = parseEmbedBody(body);
|
|
158
|
+
return (_jsx(IframeEmbed, { ...parsed }));
|
|
159
|
+
}
|
|
160
|
+
const langMatch = className.match(/\blanguage-([\w+-]+)\b/);
|
|
161
|
+
if (langMatch) {
|
|
162
|
+
const code = extractCodeText(childProps.children).replace(/\n$/, "");
|
|
163
|
+
return _jsx(HighlightedCodeBlock, { code: code, lang: langMatch[1] });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return _jsx("pre", { ...rest, children: children });
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
// ─── Smooth streaming ─────────────────────────────────────────────────────────
|
|
170
|
+
function usePrefersReducedMotion() {
|
|
171
|
+
const [prefersReducedMotion, setPrefersReducedMotion] = useState(() => typeof window !== "undefined" && window.matchMedia
|
|
172
|
+
? window.matchMedia("(prefers-reduced-motion: reduce)").matches
|
|
173
|
+
: false);
|
|
174
|
+
useEffect(() => {
|
|
175
|
+
if (typeof window === "undefined" || !window.matchMedia)
|
|
176
|
+
return undefined;
|
|
177
|
+
const media = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
178
|
+
const handleChange = () => setPrefersReducedMotion(media.matches);
|
|
179
|
+
handleChange();
|
|
180
|
+
if (typeof media.addEventListener === "function") {
|
|
181
|
+
media.addEventListener("change", handleChange);
|
|
182
|
+
return () => media.removeEventListener("change", handleChange);
|
|
183
|
+
}
|
|
184
|
+
media.addListener(handleChange);
|
|
185
|
+
return () => media.removeListener(handleChange);
|
|
186
|
+
}, []);
|
|
187
|
+
return prefersReducedMotion;
|
|
188
|
+
}
|
|
189
|
+
function sliceGraphemes(targetText, graphemes, count) {
|
|
190
|
+
if (count >= graphemes.length)
|
|
191
|
+
return targetText;
|
|
192
|
+
if (count <= 0)
|
|
193
|
+
return "";
|
|
194
|
+
return graphemes.slice(0, count).join("");
|
|
195
|
+
}
|
|
196
|
+
export function useSmoothStreamingText(targetText, streaming, resetKey) {
|
|
197
|
+
const prefersReducedMotion = usePrefersReducedMotion();
|
|
198
|
+
const [visibleText, setVisibleText] = useState(() => {
|
|
199
|
+
if (!streaming || prefersReducedMotion)
|
|
200
|
+
return targetText;
|
|
201
|
+
const graphemes = splitStreamingTextGraphemes(targetText);
|
|
202
|
+
return sliceGraphemes(targetText, graphemes, initialSmoothStreamingGraphemeCount(graphemes));
|
|
203
|
+
});
|
|
204
|
+
const visibleTextRef = useRef(visibleText);
|
|
205
|
+
const visibleCountRef = useRef(splitStreamingTextGraphemes(visibleText).length);
|
|
206
|
+
const targetTextRef = useRef(targetText);
|
|
207
|
+
const targetGraphemesRef = useRef(splitStreamingTextGraphemes(targetText));
|
|
208
|
+
const frameRef = useRef(null);
|
|
209
|
+
const lastCommitAtRef = useRef(0);
|
|
210
|
+
const pauseUntilRef = useRef(0);
|
|
211
|
+
const resetKeyRef = useRef(resetKey);
|
|
212
|
+
const stepRef = useRef(() => { });
|
|
213
|
+
const commitVisibleCount = useCallback((nextCount) => {
|
|
214
|
+
const graphemes = targetGraphemesRef.current;
|
|
215
|
+
const boundedCount = Math.max(0, Math.min(nextCount, graphemes.length));
|
|
216
|
+
const nextText = sliceGraphemes(targetTextRef.current, graphemes, boundedCount);
|
|
217
|
+
visibleCountRef.current = boundedCount;
|
|
218
|
+
if (visibleTextRef.current !== nextText) {
|
|
219
|
+
visibleTextRef.current = nextText;
|
|
220
|
+
setVisibleText(nextText);
|
|
221
|
+
}
|
|
222
|
+
}, []);
|
|
223
|
+
const cancelFrame = useCallback(() => {
|
|
224
|
+
if (frameRef.current != null &&
|
|
225
|
+
typeof window !== "undefined" &&
|
|
226
|
+
typeof window.cancelAnimationFrame === "function") {
|
|
227
|
+
window.cancelAnimationFrame(frameRef.current);
|
|
228
|
+
}
|
|
229
|
+
frameRef.current = null;
|
|
230
|
+
pauseUntilRef.current = 0;
|
|
231
|
+
}, []);
|
|
232
|
+
const scheduleFrame = useCallback(() => {
|
|
233
|
+
if (frameRef.current != null)
|
|
234
|
+
return;
|
|
235
|
+
if (typeof window === "undefined" ||
|
|
236
|
+
typeof window.requestAnimationFrame !== "function") {
|
|
237
|
+
commitVisibleCount(targetGraphemesRef.current.length);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
frameRef.current = window.requestAnimationFrame((time) => {
|
|
241
|
+
frameRef.current = null;
|
|
242
|
+
stepRef.current(time);
|
|
243
|
+
});
|
|
244
|
+
}, [commitVisibleCount]);
|
|
245
|
+
stepRef.current = (time) => {
|
|
246
|
+
const targetGraphemes = targetGraphemesRef.current;
|
|
247
|
+
const backlog = targetGraphemes.length - visibleCountRef.current;
|
|
248
|
+
if (backlog <= 0) {
|
|
249
|
+
pauseUntilRef.current = 0;
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (pauseUntilRef.current > time) {
|
|
253
|
+
scheduleFrame();
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
const lastCommitAt = lastCommitAtRef.current || time - SMOOTH_STREAMING_COMMIT_INTERVAL_MS;
|
|
257
|
+
if (time - lastCommitAt < SMOOTH_STREAMING_COMMIT_INTERVAL_MS &&
|
|
258
|
+
backlog > 1) {
|
|
259
|
+
scheduleFrame();
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const revealCount = smoothStreamingRevealCount({
|
|
263
|
+
backlog,
|
|
264
|
+
elapsedMs: Math.min(120, Math.max(8, time - lastCommitAt)),
|
|
265
|
+
});
|
|
266
|
+
if (revealCount > 0) {
|
|
267
|
+
const nextCount = visibleCountRef.current + revealCount;
|
|
268
|
+
commitVisibleCount(nextCount);
|
|
269
|
+
lastCommitAtRef.current = time;
|
|
270
|
+
const nextBacklog = targetGraphemes.length - visibleCountRef.current;
|
|
271
|
+
const pauseMs = smoothStreamingPunctuationDelayMs(targetGraphemes[visibleCountRef.current - 1], nextBacklog);
|
|
272
|
+
pauseUntilRef.current = pauseMs > 0 ? time + pauseMs : 0;
|
|
273
|
+
}
|
|
274
|
+
if (visibleCountRef.current < targetGraphemes.length) {
|
|
275
|
+
scheduleFrame();
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
pauseUntilRef.current = 0;
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
useEffect(() => {
|
|
282
|
+
const targetGraphemes = splitStreamingTextGraphemes(targetText);
|
|
283
|
+
targetTextRef.current = targetText;
|
|
284
|
+
targetGraphemesRef.current = targetGraphemes;
|
|
285
|
+
const keyChanged = resetKeyRef.current !== resetKey;
|
|
286
|
+
resetKeyRef.current = resetKey;
|
|
287
|
+
if (!streaming || prefersReducedMotion) {
|
|
288
|
+
cancelFrame();
|
|
289
|
+
commitVisibleCount(targetGraphemes.length);
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
const visibleNoLongerMatchesTarget = visibleTextRef.current.length > 0 &&
|
|
293
|
+
!targetText.startsWith(visibleTextRef.current);
|
|
294
|
+
if (visibleNoLongerMatchesTarget ||
|
|
295
|
+
visibleCountRef.current > targetGraphemes.length ||
|
|
296
|
+
(keyChanged && visibleTextRef.current.length === 0)) {
|
|
297
|
+
commitVisibleCount(initialSmoothStreamingGraphemeCount(targetGraphemes));
|
|
298
|
+
lastCommitAtRef.current = 0;
|
|
299
|
+
pauseUntilRef.current = 0;
|
|
300
|
+
}
|
|
301
|
+
if (visibleCountRef.current < targetGraphemes.length) {
|
|
302
|
+
scheduleFrame();
|
|
303
|
+
}
|
|
304
|
+
}, [
|
|
305
|
+
targetText,
|
|
306
|
+
streaming,
|
|
307
|
+
prefersReducedMotion,
|
|
308
|
+
resetKey,
|
|
309
|
+
cancelFrame,
|
|
310
|
+
commitVisibleCount,
|
|
311
|
+
scheduleFrame,
|
|
312
|
+
]);
|
|
313
|
+
// When the tab returns from background, rAF has been paused and the backlog
|
|
314
|
+
// may be tens of thousands of characters. Animating from where we left off
|
|
315
|
+
// would replay minutes of content at the normal rate — instead jump the
|
|
316
|
+
// cursor to near the tail so only the final ~200 graphemes animate in.
|
|
317
|
+
// Reduced-motion users already get instant reveals (handled above), so this
|
|
318
|
+
// guard only applies to the normal animation path.
|
|
319
|
+
useEffect(() => {
|
|
320
|
+
if (typeof document === "undefined")
|
|
321
|
+
return;
|
|
322
|
+
const onVisibilityChange = () => {
|
|
323
|
+
if (document.visibilityState !== "visible")
|
|
324
|
+
return;
|
|
325
|
+
if (!streaming || prefersReducedMotion)
|
|
326
|
+
return;
|
|
327
|
+
const graphemes = targetGraphemesRef.current;
|
|
328
|
+
const backlog = graphemes.length - visibleCountRef.current;
|
|
329
|
+
const BACKGROUND_CATCH_UP_THRESHOLD = 2000;
|
|
330
|
+
const BACKGROUND_TAIL_GRAPHEMES = 200;
|
|
331
|
+
if (backlog > BACKGROUND_CATCH_UP_THRESHOLD) {
|
|
332
|
+
commitVisibleCount(Math.max(0, graphemes.length - BACKGROUND_TAIL_GRAPHEMES));
|
|
333
|
+
lastCommitAtRef.current = 0;
|
|
334
|
+
pauseUntilRef.current = 0;
|
|
335
|
+
scheduleFrame();
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
document.addEventListener("visibilitychange", onVisibilityChange);
|
|
339
|
+
return () => document.removeEventListener("visibilitychange", onVisibilityChange);
|
|
340
|
+
}, [streaming, prefersReducedMotion, commitVisibleCount, scheduleFrame]);
|
|
341
|
+
useEffect(() => cancelFrame, [cancelFrame]);
|
|
342
|
+
return visibleText;
|
|
343
|
+
}
|
|
344
|
+
// ─── Markdown readiness hook ──────────────────────────────────────────────────
|
|
345
|
+
export function useMarkdownReady() {
|
|
346
|
+
const [ready, setReady] = useState(() => markdownModule !== null);
|
|
347
|
+
useEffect(() => {
|
|
348
|
+
if (markdownModule !== null)
|
|
349
|
+
return;
|
|
350
|
+
return onMarkdownReady(() => setReady(true));
|
|
351
|
+
}, []);
|
|
352
|
+
return ready;
|
|
353
|
+
}
|
|
354
|
+
// ─── MemoizedMarkdownBlock ────────────────────────────────────────────────────
|
|
355
|
+
// Renders a single stable markdown block. Wrapped in React.memo so React
|
|
356
|
+
// skips re-rendering completed blocks when only the tail changes.
|
|
357
|
+
export const MemoizedMarkdownBlock = React.memo(function MemoizedMarkdownBlock({ blockText, }) {
|
|
358
|
+
const ReactMarkdown = markdownModule?.default;
|
|
359
|
+
const gfm = remarkGfmFn;
|
|
360
|
+
if (!ReactMarkdown || !gfm)
|
|
361
|
+
return null;
|
|
362
|
+
return (_jsx(ReactMarkdown, { remarkPlugins: [gfm], components: markdownComponents, urlTransform: markdownUrlTransform, children: blockText }));
|
|
363
|
+
});
|
|
364
|
+
// ─── SmoothMarkdownText ────────────────────────────────────────────────────────
|
|
365
|
+
export function SmoothMarkdownText({ text, streaming, resetKey, statusType = "complete", }) {
|
|
366
|
+
const mdReady = useMarkdownReady();
|
|
367
|
+
const visibleText = useSmoothStreamingText(text, streaming, resetKey);
|
|
368
|
+
const isVisuallyStreaming = streaming && visibleText !== text;
|
|
369
|
+
const ReactMarkdown = markdownModule?.default;
|
|
370
|
+
const gfm = remarkGfmFn;
|
|
371
|
+
// Block-memoized rendering: during streaming split the visible text into
|
|
372
|
+
// stable completed blocks + an in-progress tail. Only the tail re-renders
|
|
373
|
+
// on every commit; completed blocks are React.memo'd and skipped.
|
|
374
|
+
// On completion we fall through to a single ReactMarkdown pass to guarantee
|
|
375
|
+
// byte-identical final output (no block-split artifacts).
|
|
376
|
+
const split = useMemo(() => (isVisuallyStreaming ? splitMarkdownBlocks(visibleText) : null), [isVisuallyStreaming, visibleText]);
|
|
377
|
+
return (_jsx("div", { className: "agent-markdown break-words", "data-status": statusType, "data-streaming": isVisuallyStreaming ? "true" : undefined, children: mdReady && ReactMarkdown && gfm ? (split ? (_jsxs(_Fragment, { children: [split.completedBlocks.map((block, i) => (_jsx(MemoizedMarkdownBlock, { blockText: block }, i))), split.tail ? (_jsx(ReactMarkdown, { remarkPlugins: [gfm], components: markdownComponents, urlTransform: markdownUrlTransform, children: split.tail })) : null] })) : (_jsx(ReactMarkdown, { remarkPlugins: [gfm], components: markdownComponents, urlTransform: markdownUrlTransform, children: visibleText }))) : (_jsx("span", { style: { whiteSpace: "pre-wrap" }, children: visibleText })) }));
|
|
378
|
+
}
|
|
379
|
+
// ─── MarkdownText ──────────────────────────────────────────────────────────────
|
|
380
|
+
export function MarkdownText() {
|
|
381
|
+
const textPart = useMessagePartText();
|
|
382
|
+
const messageRuntime = useMessageRuntime();
|
|
383
|
+
const message = messageRuntime.getState();
|
|
384
|
+
const thread = useThread();
|
|
385
|
+
const textStreaming = React.useContext(TextStreamingContext);
|
|
386
|
+
const lastMessage = thread.messages[thread.messages.length - 1];
|
|
387
|
+
const isLastAssistantMessage = message.role === "assistant" && lastMessage?.id === message.id;
|
|
388
|
+
const statusType = textPart.status?.type ?? message.status?.type ?? "complete";
|
|
389
|
+
return (_jsx(SmoothMarkdownText, { text: textPart.text, streaming: textStreaming && isLastAssistantMessage, resetKey: `${message.id}:${statusType}`, statusType: statusType }));
|
|
390
|
+
}
|
|
391
|
+
//# sourceMappingURL=markdown-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-renderer.js","sourceRoot":"","sources":["../../../src/client/chat/markdown-renderer.tsx"],"names":[],"mappings":"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","sourcesContent":["// Owns: lazy react-markdown/shiki loaders, SmoothMarkdownText, MarkdownText,\n// HighlightedCodeBlock wrapper, and the markdownComponents/markdownUrlTransform\n// used by every markdown render path in AssistantChat.\n\nimport React, {\n useState,\n useEffect,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport {\n useThread,\n useMessageRuntime,\n useMessagePartText,\n} from \"@assistant-ui/react\";\n// react-markdown + remark-gfm type imports only — loaded lazily below.\nimport type { default as ReactMarkdownType } from \"react-markdown\";\nimport type { defaultUrlTransform as DefaultUrlTransformType } from \"react-markdown\";\nimport type remarkGfmType from \"remark-gfm\";\nimport {\n initialSmoothStreamingGraphemeCount,\n SMOOTH_STREAMING_COMMIT_INTERVAL_MS,\n smoothStreamingPunctuationDelayMs,\n smoothStreamingRevealCount,\n splitStreamingTextGraphemes,\n} from \"../../shared/streaming-text-smoothing.js\";\nimport { splitMarkdownBlocks } from \"../../shared/markdown-block-split.js\";\nimport { HighlightedCodeBlock as SharedHighlightedCodeBlock } from \"../HighlightedCodeBlock.js\";\nimport { IframeEmbed, parseEmbedBody } from \"../IframeEmbed.js\";\nimport { cn } from \"../utils.js\";\nimport {\n NEW_CHAT_ACTION_HREF,\n BUILDER_SPACE_SETTINGS_URL,\n} from \"../error-format.js\";\nimport { IconPlus, IconExternalLink } from \"@tabler/icons-react\";\n\n// ─── Lazy markdown loader ────────────────────────────────────────────────────\n// react-markdown + remark-gfm are deferred so they stay off the critical path\n// of every page. The loader fires as soon as this module is evaluated (i.e.\n// when the lazy AssistantChat chunk lands — not at initial page parse).\n// This mirrors the existing shiki lazy-load pattern further below.\n\ntype ReactMarkdownModule = {\n default: typeof ReactMarkdownType;\n defaultUrlTransform: typeof DefaultUrlTransformType;\n};\n\nexport let markdownModule: ReactMarkdownModule | null = null;\nexport let remarkGfmFn: typeof remarkGfmType | null = null;\nconst markdownListeners = new Set<() => void>();\n\nexport function loadMarkdown(): void {\n if (markdownModule !== null) return; // already loaded\n Promise.all([import(\"react-markdown\"), import(\"remark-gfm\")]).then(\n ([md, gfm]) => {\n markdownModule = md as ReactMarkdownModule;\n remarkGfmFn = gfm.default;\n markdownListeners.forEach((fn) => fn());\n markdownListeners.clear();\n },\n );\n}\n\nexport function onMarkdownReady(fn: () => void): () => void {\n if (markdownModule !== null) {\n fn();\n return () => {};\n }\n markdownListeners.add(fn);\n return () => markdownListeners.delete(fn);\n}\n\nloadMarkdown();\n\n// ─── Lazy shiki highlighter ──────────────────────────────────────────────────\n// Using the fine-grained API so we only ship the languages and themes we\n// actually use (instead of shiki's full ~30 MB bundle of every grammar).\n// Required to keep the Cloudflare Pages Functions bundle under 25 MiB.\n\ntype ShikiHighlighter = {\n codeToHtml: (\n code: string,\n options: {\n lang: string;\n themes: { light: string; dark: string };\n defaultColor?: false | \"light\" | \"dark\";\n },\n ) => string | Promise<string>;\n getLoadedLanguages: () => string[];\n};\n\nlet highlighterLoader: Promise<ShikiHighlighter> | null = null;\nexport function loadHighlighter(): Promise<ShikiHighlighter> {\n if (!highlighterLoader) {\n highlighterLoader = (async () => {\n // Use the JavaScript regex engine instead of Oniguruma WASM (~608 KB saved).\n // forgiving:true degrades unsupported patterns gracefully instead of throwing.\n const [{ createHighlighterCore }, { createJavaScriptRegexEngine }] =\n await Promise.all([\n import(\"shiki/core\"),\n import(\"shiki/engine/javascript\"),\n ]);\n return createHighlighterCore({\n themes: [\n import(\"shiki/themes/github-light-default.mjs\"),\n import(\"shiki/themes/github-dark-default.mjs\"),\n ],\n langs: [\n import(\"shiki/langs/javascript.mjs\"),\n import(\"shiki/langs/typescript.mjs\"),\n import(\"shiki/langs/jsx.mjs\"),\n import(\"shiki/langs/tsx.mjs\"),\n import(\"shiki/langs/json.mjs\"),\n import(\"shiki/langs/css.mjs\"),\n import(\"shiki/langs/html.mjs\"),\n import(\"shiki/langs/markdown.mjs\"),\n import(\"shiki/langs/bash.mjs\"),\n import(\"shiki/langs/shellscript.mjs\"),\n import(\"shiki/langs/python.mjs\"),\n import(\"shiki/langs/yaml.mjs\"),\n import(\"shiki/langs/sql.mjs\"),\n ],\n engine: createJavaScriptRegexEngine({ forgiving: true }),\n }) as unknown as Promise<ShikiHighlighter>;\n })().catch((error) => {\n // Reset on failure so a future code block can retry instead of\n // silently failing forever on a stale chunk / network blip.\n highlighterLoader = null;\n throw error;\n });\n }\n return highlighterLoader;\n}\n\n// ─── Streaming context ───────────────────────────────────────────────────────\n// Declared at module level so HighlightedCodeBlock (used in markdownComponents\n// below) can read the current streaming state without the components object\n// needing to be rebuilt on every render.\n\nexport const TextStreamingContext = React.createContext(false);\n\n// ─── HighlightedCodeBlock wrapper ────────────────────────────────────────────\n// Reads streaming state from context so markdownComponents (a static constant)\n// can opt into debounced highlighting without needing to rebuild on every render.\n\nexport function HighlightedCodeBlock({\n code,\n lang,\n}: {\n code: string;\n lang: string;\n}) {\n const streaming = React.useContext(TextStreamingContext);\n return (\n <SharedHighlightedCodeBlock\n code={code}\n lang={lang}\n containerClass=\"agent-markdown-shiki\"\n streaming={streaming}\n loadHighlighter={loadHighlighter}\n />\n );\n}\n\n// ─── CTA helpers ─────────────────────────────────────────────────────────────\n\nconst CTA_BUTTON_CLASSES =\n \"agent-markdown-cta mt-1 inline-flex items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background no-underline shadow-sm transition-colors hover:bg-foreground/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background cursor-pointer\";\n\nfunction isBuilderErrorCtaHref(href: string | undefined): boolean {\n if (!href) return false;\n try {\n const url = new URL(href);\n if (url.protocol !== \"https:\" || url.hostname !== \"builder.io\") {\n return false;\n }\n return (\n url.href === BUILDER_SPACE_SETTINGS_URL ||\n url.pathname === \"/account/billing\" ||\n /^\\/app\\/organizations\\/[^/]+\\/billing$/.test(url.pathname)\n );\n } catch {\n return false;\n }\n}\n\n// react-markdown's defaultUrlTransform strips href values whose protocol\n// isn't on its safe list (https, mailto, etc.). Our in-app pseudo-href\n// `agent-native:new-chat` would be blanked out by that, so let it through\n// while delegating every other URL to the default transform for sanitization.\n// Falls back to the value unchanged when the react-markdown module hasn't\n// landed yet (conservative: no stripping beats an empty href).\nexport function markdownUrlTransform(value: string): string {\n if (value === NEW_CHAT_ACTION_HREF) return value;\n if (!markdownModule) return value;\n return markdownModule.defaultUrlTransform(value);\n}\n\n// ─── Code text extraction ─────────────────────────────────────────────────────\n\nexport function extractCodeText(child: React.ReactNode): string {\n if (typeof child === \"string\") return child;\n if (Array.isArray(child)) return child.map(extractCodeText).join(\"\");\n if (React.isValidElement(child)) {\n const props = child.props as { children?: React.ReactNode };\n return extractCodeText(props.children);\n }\n return \"\";\n}\n\n// ─── Markdown components ──────────────────────────────────────────────────────\n\nexport const markdownComponents = {\n a(props: React.AnchorHTMLAttributes<HTMLAnchorElement>) {\n const {\n href,\n children,\n className,\n rel: _rel,\n target: _target,\n ...rest\n } = props;\n if (href === NEW_CHAT_ACTION_HREF) {\n // In-app action: dispatch a CustomEvent that MultiTabAssistantChat\n // listens for and opens a new chat tab. Not an external navigation.\n return (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n window.dispatchEvent(new CustomEvent(\"agent-chat:new-chat\"));\n }}\n className={cn(CTA_BUTTON_CLASSES, className)}\n >\n <IconPlus size={13} strokeWidth={2} aria-hidden=\"true\" />\n <span>{children}</span>\n </button>\n );\n }\n const isBuilderCta = isBuilderErrorCtaHref(href);\n if (!isBuilderCta) {\n return (\n <a href={href} className={className} {...rest}>\n {children}\n </a>\n );\n }\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cn(CTA_BUTTON_CLASSES, className)}\n {...rest}\n >\n <span>{children}</span>\n <IconExternalLink size={13} strokeWidth={2} aria-hidden=\"true\" />\n </a>\n );\n },\n pre(props: React.HTMLAttributes<HTMLPreElement>) {\n const { children, ...rest } = props;\n if (React.isValidElement(children)) {\n const childProps = children.props as {\n className?: string;\n children?: React.ReactNode;\n };\n const className = childProps.className || \"\";\n if (/\\blanguage-embed\\b/.test(className)) {\n const body = extractCodeText(childProps.children);\n const parsed = parseEmbedBody(body);\n return (\n <IframeEmbed {...(parsed as Parameters<typeof IframeEmbed>[0])} />\n );\n }\n const langMatch = className.match(/\\blanguage-([\\w+-]+)\\b/);\n if (langMatch) {\n const code = extractCodeText(childProps.children).replace(/\\n$/, \"\");\n return <HighlightedCodeBlock code={code} lang={langMatch[1]} />;\n }\n }\n return <pre {...rest}>{children}</pre>;\n },\n};\n\n// ─── Smooth streaming ─────────────────────────────────────────────────────────\n\nfunction usePrefersReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(() =>\n typeof window !== \"undefined\" && window.matchMedia\n ? window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n : false,\n );\n\n useEffect(() => {\n if (typeof window === \"undefined\" || !window.matchMedia) return undefined;\n\n const media = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const handleChange = () => setPrefersReducedMotion(media.matches);\n handleChange();\n\n if (typeof media.addEventListener === \"function\") {\n media.addEventListener(\"change\", handleChange);\n return () => media.removeEventListener(\"change\", handleChange);\n }\n\n media.addListener(handleChange);\n return () => media.removeListener(handleChange);\n }, []);\n\n return prefersReducedMotion;\n}\n\nfunction sliceGraphemes(\n targetText: string,\n graphemes: readonly string[],\n count: number,\n): string {\n if (count >= graphemes.length) return targetText;\n if (count <= 0) return \"\";\n return graphemes.slice(0, count).join(\"\");\n}\n\nexport function useSmoothStreamingText(\n targetText: string,\n streaming: boolean,\n resetKey: string,\n): string {\n const prefersReducedMotion = usePrefersReducedMotion();\n const [visibleText, setVisibleText] = useState(() => {\n if (!streaming || prefersReducedMotion) return targetText;\n const graphemes = splitStreamingTextGraphemes(targetText);\n return sliceGraphemes(\n targetText,\n graphemes,\n initialSmoothStreamingGraphemeCount(graphemes),\n );\n });\n const visibleTextRef = useRef(visibleText);\n const visibleCountRef = useRef(\n splitStreamingTextGraphemes(visibleText).length,\n );\n const targetTextRef = useRef(targetText);\n const targetGraphemesRef = useRef(splitStreamingTextGraphemes(targetText));\n const frameRef = useRef<number | null>(null);\n const lastCommitAtRef = useRef(0);\n const pauseUntilRef = useRef(0);\n const resetKeyRef = useRef(resetKey);\n const stepRef = useRef<(time: number) => void>(() => {});\n\n const commitVisibleCount = useCallback((nextCount: number) => {\n const graphemes = targetGraphemesRef.current;\n const boundedCount = Math.max(0, Math.min(nextCount, graphemes.length));\n const nextText = sliceGraphemes(\n targetTextRef.current,\n graphemes,\n boundedCount,\n );\n visibleCountRef.current = boundedCount;\n if (visibleTextRef.current !== nextText) {\n visibleTextRef.current = nextText;\n setVisibleText(nextText);\n }\n }, []);\n\n const cancelFrame = useCallback(() => {\n if (\n frameRef.current != null &&\n typeof window !== \"undefined\" &&\n typeof window.cancelAnimationFrame === \"function\"\n ) {\n window.cancelAnimationFrame(frameRef.current);\n }\n frameRef.current = null;\n pauseUntilRef.current = 0;\n }, []);\n\n const scheduleFrame = useCallback(() => {\n if (frameRef.current != null) return;\n if (\n typeof window === \"undefined\" ||\n typeof window.requestAnimationFrame !== \"function\"\n ) {\n commitVisibleCount(targetGraphemesRef.current.length);\n return;\n }\n\n frameRef.current = window.requestAnimationFrame((time) => {\n frameRef.current = null;\n stepRef.current(time);\n });\n }, [commitVisibleCount]);\n\n stepRef.current = (time) => {\n const targetGraphemes = targetGraphemesRef.current;\n const backlog = targetGraphemes.length - visibleCountRef.current;\n if (backlog <= 0) {\n pauseUntilRef.current = 0;\n return;\n }\n\n if (pauseUntilRef.current > time) {\n scheduleFrame();\n return;\n }\n\n const lastCommitAt =\n lastCommitAtRef.current || time - SMOOTH_STREAMING_COMMIT_INTERVAL_MS;\n if (\n time - lastCommitAt < SMOOTH_STREAMING_COMMIT_INTERVAL_MS &&\n backlog > 1\n ) {\n scheduleFrame();\n return;\n }\n\n const revealCount = smoothStreamingRevealCount({\n backlog,\n elapsedMs: Math.min(120, Math.max(8, time - lastCommitAt)),\n });\n\n if (revealCount > 0) {\n const nextCount = visibleCountRef.current + revealCount;\n commitVisibleCount(nextCount);\n lastCommitAtRef.current = time;\n const nextBacklog = targetGraphemes.length - visibleCountRef.current;\n const pauseMs = smoothStreamingPunctuationDelayMs(\n targetGraphemes[visibleCountRef.current - 1],\n nextBacklog,\n );\n pauseUntilRef.current = pauseMs > 0 ? time + pauseMs : 0;\n }\n\n if (visibleCountRef.current < targetGraphemes.length) {\n scheduleFrame();\n } else {\n pauseUntilRef.current = 0;\n }\n };\n\n useEffect(() => {\n const targetGraphemes = splitStreamingTextGraphemes(targetText);\n targetTextRef.current = targetText;\n targetGraphemesRef.current = targetGraphemes;\n\n const keyChanged = resetKeyRef.current !== resetKey;\n resetKeyRef.current = resetKey;\n\n if (!streaming || prefersReducedMotion) {\n cancelFrame();\n commitVisibleCount(targetGraphemes.length);\n return;\n }\n\n const visibleNoLongerMatchesTarget =\n visibleTextRef.current.length > 0 &&\n !targetText.startsWith(visibleTextRef.current);\n\n if (\n visibleNoLongerMatchesTarget ||\n visibleCountRef.current > targetGraphemes.length ||\n (keyChanged && visibleTextRef.current.length === 0)\n ) {\n commitVisibleCount(initialSmoothStreamingGraphemeCount(targetGraphemes));\n lastCommitAtRef.current = 0;\n pauseUntilRef.current = 0;\n }\n\n if (visibleCountRef.current < targetGraphemes.length) {\n scheduleFrame();\n }\n }, [\n targetText,\n streaming,\n prefersReducedMotion,\n resetKey,\n cancelFrame,\n commitVisibleCount,\n scheduleFrame,\n ]);\n\n // When the tab returns from background, rAF has been paused and the backlog\n // may be tens of thousands of characters. Animating from where we left off\n // would replay minutes of content at the normal rate — instead jump the\n // cursor to near the tail so only the final ~200 graphemes animate in.\n // Reduced-motion users already get instant reveals (handled above), so this\n // guard only applies to the normal animation path.\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const onVisibilityChange = () => {\n if (document.visibilityState !== \"visible\") return;\n if (!streaming || prefersReducedMotion) return;\n const graphemes = targetGraphemesRef.current;\n const backlog = graphemes.length - visibleCountRef.current;\n const BACKGROUND_CATCH_UP_THRESHOLD = 2000;\n const BACKGROUND_TAIL_GRAPHEMES = 200;\n if (backlog > BACKGROUND_CATCH_UP_THRESHOLD) {\n commitVisibleCount(\n Math.max(0, graphemes.length - BACKGROUND_TAIL_GRAPHEMES),\n );\n lastCommitAtRef.current = 0;\n pauseUntilRef.current = 0;\n scheduleFrame();\n }\n };\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n return () =>\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n }, [streaming, prefersReducedMotion, commitVisibleCount, scheduleFrame]);\n\n useEffect(() => cancelFrame, [cancelFrame]);\n\n return visibleText;\n}\n\n// ─── Markdown readiness hook ──────────────────────────────────────────────────\n\nexport function useMarkdownReady(): boolean {\n const [ready, setReady] = useState(() => markdownModule !== null);\n useEffect(() => {\n if (markdownModule !== null) return;\n return onMarkdownReady(() => setReady(true));\n }, []);\n return ready;\n}\n\n// ─── MemoizedMarkdownBlock ────────────────────────────────────────────────────\n// Renders a single stable markdown block. Wrapped in React.memo so React\n// skips re-rendering completed blocks when only the tail changes.\n\nexport const MemoizedMarkdownBlock = React.memo(function MemoizedMarkdownBlock({\n blockText,\n}: {\n blockText: string;\n}) {\n const ReactMarkdown = markdownModule?.default;\n const gfm = remarkGfmFn;\n if (!ReactMarkdown || !gfm) return null;\n return (\n <ReactMarkdown\n remarkPlugins={[gfm]}\n components={markdownComponents}\n urlTransform={markdownUrlTransform}\n >\n {blockText}\n </ReactMarkdown>\n );\n});\n\n// ─── SmoothMarkdownText ────────────────────────────────────────────────────────\n\nexport function SmoothMarkdownText({\n text,\n streaming,\n resetKey,\n statusType = \"complete\",\n}: {\n text: string;\n streaming: boolean;\n resetKey: string;\n statusType?: string;\n}) {\n const mdReady = useMarkdownReady();\n const visibleText = useSmoothStreamingText(text, streaming, resetKey);\n const isVisuallyStreaming = streaming && visibleText !== text;\n const ReactMarkdown = markdownModule?.default;\n const gfm = remarkGfmFn;\n\n // Block-memoized rendering: during streaming split the visible text into\n // stable completed blocks + an in-progress tail. Only the tail re-renders\n // on every commit; completed blocks are React.memo'd and skipped.\n // On completion we fall through to a single ReactMarkdown pass to guarantee\n // byte-identical final output (no block-split artifacts).\n const split = useMemo(\n () => (isVisuallyStreaming ? splitMarkdownBlocks(visibleText) : null),\n [isVisuallyStreaming, visibleText],\n );\n\n return (\n <div\n className=\"agent-markdown break-words\"\n data-status={statusType}\n data-streaming={isVisuallyStreaming ? \"true\" : undefined}\n >\n {mdReady && ReactMarkdown && gfm ? (\n split ? (\n // Streaming: render completed blocks (memoized) + live tail block\n <>\n {split.completedBlocks.map((block, i) => (\n <MemoizedMarkdownBlock key={i} blockText={block} />\n ))}\n {split.tail ? (\n <ReactMarkdown\n remarkPlugins={[gfm]}\n components={markdownComponents}\n urlTransform={markdownUrlTransform}\n >\n {split.tail}\n </ReactMarkdown>\n ) : null}\n </>\n ) : (\n // Not streaming (or streaming complete): single-pass render\n <ReactMarkdown\n remarkPlugins={[gfm]}\n components={markdownComponents}\n urlTransform={markdownUrlTransform}\n >\n {visibleText}\n </ReactMarkdown>\n )\n ) : (\n // Plain text while the react-markdown chunk is in flight.\n // The chunk is already being fetched by loadMarkdown() above, so\n // this placeholder is typically only visible for one render frame.\n <span style={{ whiteSpace: \"pre-wrap\" }}>{visibleText}</span>\n )}\n </div>\n );\n}\n\n// ─── MarkdownText ──────────────────────────────────────────────────────────────\n\nexport function MarkdownText() {\n const textPart = useMessagePartText();\n const messageRuntime = useMessageRuntime();\n const message = messageRuntime.getState();\n const thread = useThread();\n const textStreaming = React.useContext(TextStreamingContext);\n const lastMessage = thread.messages[thread.messages.length - 1];\n const isLastAssistantMessage =\n message.role === \"assistant\" && lastMessage?.id === message.id;\n const statusType =\n textPart.status?.type ?? message.status?.type ?? \"complete\";\n\n return (\n <SmoothMarkdownText\n text={textPart.text}\n streaming={textStreaming && isLastAssistantMessage}\n resetKey={`${message.id}:${statusType}`}\n statusType={statusType}\n />\n );\n}\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export declare function displayableUserMessageText(text: string): string;
|
|
3
|
+
interface FormattedMessageTimestamp {
|
|
4
|
+
short: string;
|
|
5
|
+
full: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function formatMessageTimestamp(value: unknown): FormattedMessageTimestamp | null;
|
|
8
|
+
export declare function MessageTimestamp({ timestamp, className, }: {
|
|
9
|
+
timestamp: FormattedMessageTimestamp;
|
|
10
|
+
className?: string;
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare function SelectionAttachedPill(): import("react/jsx-runtime").JSX.Element | null;
|
|
13
|
+
export declare const CheckpointContext: React.Context<{
|
|
14
|
+
apiUrl: string;
|
|
15
|
+
devMode: boolean;
|
|
16
|
+
threadId?: string;
|
|
17
|
+
} | null>;
|
|
18
|
+
export declare const MessageActionsContext: React.Context<{
|
|
19
|
+
onForkChat?: () => void | boolean | Promise<void | boolean>;
|
|
20
|
+
} | null>;
|
|
21
|
+
export declare function MessageBranchPicker(): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare function MessageActionsMenu({ showRevert, onRevert, }?: {
|
|
23
|
+
showRevert?: boolean;
|
|
24
|
+
onRevert?: () => void;
|
|
25
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export declare function UserMessage(): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export declare function AssistantMessage(): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export declare function RunningActivityStatus({ label }: {
|
|
29
|
+
label: string;
|
|
30
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export declare function ThinkingIndicator({ label, }?: {
|
|
32
|
+
label?: string;
|
|
33
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=message-components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-components.d.ts","sourceRoot":"","sources":["../../../src/client/chat/message-components.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAuExE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D;AAID,UAAU,yBAAyB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAqBD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb,yBAAyB,GAAG,IAAI,CAyClC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,SAAS,GACV,EAAE;IACD,SAAS,EAAE,yBAAyB,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAYA;AAID,wBAAgB,qBAAqB,mDAgEpC;AAID,eAAO,MAAM,iBAAiB;YACpB,MAAM;aACL,OAAO;eACL,MAAM;SACJ,CAAC;AAEhB,eAAO,MAAM,qBAAqB;iBACnB,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;SAC9C,CAAC;AAIhB,wBAAgB,mBAAmB,4CA+BlC;AAwMD,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,QAAQ,GACT,GAAE;IACD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,2CAiIL;AAID,wBAAgB,WAAW,4CAuI1B;AAID,wBAAgB,gBAAgB,4CAiL/B;AAID,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,2CAMjE;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAkB,GACnB,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,2CAgBzB"}
|