@agent-native/core 0.46.0 → 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 +47 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +267 -46
- 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 +331 -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/coding-tools/run-code.d.ts +40 -0
- package/dist/coding-tools/run-code.d.ts.map +1 -0
- package/dist/coding-tools/run-code.js +511 -0
- package/dist/coding-tools/run-code.js.map +1 -0
- 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/fetch-tool.d.ts.map +1 -1
- package/dist/extensions/fetch-tool.js +62 -7
- package/dist/extensions/fetch-tool.js.map +1 -1
- package/dist/extensions/schema.d.ts +51 -51
- package/dist/extensions/slots/schema.d.ts +13 -13
- package/dist/extensions/web-search-tool.d.ts +41 -0
- package/dist/extensions/web-search-tool.d.ts.map +1 -0
- package/dist/extensions/web-search-tool.js +200 -0
- package/dist/extensions/web-search-tool.js.map +1 -0
- 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 +92 -0
- package/dist/provider-api/custom-registry.d.ts.map +1 -0
- package/dist/provider-api/custom-registry.js +289 -0
- package/dist/provider-api/custom-registry.js.map +1 -0
- package/dist/provider-api/index.d.ts +88 -52
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +569 -23
- 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/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +36 -3
- package/dist/secrets/register-framework-secrets.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 +69 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +369 -179
- 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/index.d.ts +4 -0
- package/dist/workspace-files/index.d.ts.map +1 -0
- package/dist/workspace-files/index.js +4 -0
- package/dist/workspace-files/index.js.map +1 -0
- package/dist/workspace-files/schema.d.ts +195 -0
- package/dist/workspace-files/schema.d.ts.map +1 -0
- package/dist/workspace-files/schema.js +48 -0
- package/dist/workspace-files/schema.js.map +1 -0
- package/dist/workspace-files/store.d.ts +89 -0
- package/dist/workspace-files/store.d.ts.map +1 -0
- package/dist/workspace-files/store.js +298 -0
- package/dist/workspace-files/store.js.map +1 -0
- package/dist/workspace-files/tool.d.ts +15 -0
- package/dist/workspace-files/tool.d.ts.map +1 -0
- package/dist/workspace-files/tool.js +225 -0
- package/dist/workspace-files/tool.js.map +1 -0
- 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 +26 -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,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EditCell — renders an edit tool call as a syntax-highlighted unified diff.
|
|
3
|
+
*
|
|
4
|
+
* The diff is computed client-side from oldText / newText stored in the
|
|
5
|
+
* structured metadata. The HighlightedCodeBlock from AssistantChat is not
|
|
6
|
+
* accessible here, so we do a lightweight line-diff + per-line class approach
|
|
7
|
+
* instead (no dep on shiki required for the diff view itself).
|
|
8
|
+
*
|
|
9
|
+
* Collapsed by default beyond MAX_COLLAPSED_LINES; expand button shows all.
|
|
10
|
+
*/
|
|
11
|
+
export interface EditCellMeta {
|
|
12
|
+
toolKind: "edit";
|
|
13
|
+
filePath: string;
|
|
14
|
+
oldText?: string;
|
|
15
|
+
newText?: string;
|
|
16
|
+
truncated?: boolean;
|
|
17
|
+
}
|
|
18
|
+
interface EditCellProps {
|
|
19
|
+
meta: EditCellMeta;
|
|
20
|
+
isRunning: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function EditCell({ meta, isRunning }: EditCellProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=EditCell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditCell.d.ts","sourceRoot":"","sources":["../../../src/client/tool-cells/EditCell.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AA2KD,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,aAAa,2CAgG1D"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* EditCell — renders an edit tool call as a syntax-highlighted unified diff.
|
|
4
|
+
*
|
|
5
|
+
* The diff is computed client-side from oldText / newText stored in the
|
|
6
|
+
* structured metadata. The HighlightedCodeBlock from AssistantChat is not
|
|
7
|
+
* accessible here, so we do a lightweight line-diff + per-line class approach
|
|
8
|
+
* instead (no dep on shiki required for the diff view itself).
|
|
9
|
+
*
|
|
10
|
+
* Collapsed by default beyond MAX_COLLAPSED_LINES; expand button shows all.
|
|
11
|
+
*/
|
|
12
|
+
import { memo, useMemo, useState } from "react";
|
|
13
|
+
import { IconChevronDown, IconFile, IconFileDiff, IconLoader2, } from "@tabler/icons-react";
|
|
14
|
+
import { cn } from "../utils.js";
|
|
15
|
+
/** Lines shown collapsed before "expand" is offered. */
|
|
16
|
+
const MAX_COLLAPSED_LINES = 40;
|
|
17
|
+
function computeLineDiff(oldText, newText) {
|
|
18
|
+
const oldLines = oldText.split("\n");
|
|
19
|
+
const newLines = newText.split("\n");
|
|
20
|
+
// Simple Myers-style LCS via DP for line-level diffs.
|
|
21
|
+
// For very large files we cap input to keep it snappy.
|
|
22
|
+
const MAX_LINES = 2000;
|
|
23
|
+
const a = oldLines.slice(0, MAX_LINES);
|
|
24
|
+
const b = newLines.slice(0, MAX_LINES);
|
|
25
|
+
const m = a.length;
|
|
26
|
+
const n = b.length;
|
|
27
|
+
// Build LCS table
|
|
28
|
+
const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
|
|
29
|
+
for (let i = m - 1; i >= 0; i--) {
|
|
30
|
+
for (let j = n - 1; j >= 0; j--) {
|
|
31
|
+
if (a[i] === b[j]) {
|
|
32
|
+
dp[i][j] = dp[i + 1][j + 1] + 1;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
dp[i][j] = Math.max(dp[i + 1][j], dp[i][j + 1]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const result = [];
|
|
40
|
+
let i = 0;
|
|
41
|
+
let j = 0;
|
|
42
|
+
let oldLineNo = 1;
|
|
43
|
+
let newLineNo = 1;
|
|
44
|
+
while (i < m || j < n) {
|
|
45
|
+
if (i < m && j < n && a[i] === b[j]) {
|
|
46
|
+
result.push({
|
|
47
|
+
kind: "context",
|
|
48
|
+
text: a[i],
|
|
49
|
+
oldLineNo: oldLineNo++,
|
|
50
|
+
newLineNo: newLineNo++,
|
|
51
|
+
});
|
|
52
|
+
i++;
|
|
53
|
+
j++;
|
|
54
|
+
}
|
|
55
|
+
else if (j < n && (i >= m || dp[i + 1][j] >= dp[i][j + 1])) {
|
|
56
|
+
result.push({ kind: "added", text: b[j], newLineNo: newLineNo++ });
|
|
57
|
+
j++;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
result.push({ kind: "removed", text: a[i], oldLineNo: oldLineNo++ });
|
|
61
|
+
i++;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Append any overflow lines as context
|
|
65
|
+
if (oldLines.length > MAX_LINES) {
|
|
66
|
+
for (let k = MAX_LINES; k < oldLines.length; k++) {
|
|
67
|
+
result.push({
|
|
68
|
+
kind: "removed",
|
|
69
|
+
text: oldLines[k],
|
|
70
|
+
oldLineNo: oldLineNo++,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (newLines.length > MAX_LINES) {
|
|
75
|
+
for (let k = MAX_LINES; k < newLines.length; k++) {
|
|
76
|
+
result.push({
|
|
77
|
+
kind: "added",
|
|
78
|
+
text: newLines[k],
|
|
79
|
+
newLineNo: newLineNo++,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
/** Compute +N -N line counts from a diff. */
|
|
86
|
+
function diffStats(lines) {
|
|
87
|
+
let added = 0;
|
|
88
|
+
let removed = 0;
|
|
89
|
+
for (const line of lines) {
|
|
90
|
+
if (line.kind === "added")
|
|
91
|
+
added++;
|
|
92
|
+
else if (line.kind === "removed")
|
|
93
|
+
removed++;
|
|
94
|
+
}
|
|
95
|
+
return { added, removed };
|
|
96
|
+
}
|
|
97
|
+
// ─── Component ───────────────────────────────────────────────────────────────
|
|
98
|
+
const DiffView = memo(function DiffView({ lines, maxLines, }) {
|
|
99
|
+
const visible = maxLines === null ? lines : lines.slice(0, maxLines);
|
|
100
|
+
return (_jsx("div", { className: "overflow-x-auto", children: _jsx("table", { className: "w-full min-w-full border-collapse font-mono text-[11px] leading-relaxed", children: _jsx("tbody", { children: visible.map((line, idx) => (_jsxs("tr", { className: cn(line.kind === "added" &&
|
|
101
|
+
"bg-emerald-500/8 dark:bg-emerald-400/8", line.kind === "removed" && "bg-destructive/8"), children: [_jsx("td", { className: "w-8 select-none border-r border-border/30 px-1.5 text-right text-[10px] text-muted-foreground/60", children: line.oldLineNo ?? "" }), _jsx("td", { className: "w-8 select-none border-r border-border/30 px-1.5 text-right text-[10px] text-muted-foreground/60", children: line.newLineNo ?? "" }), _jsx("td", { className: cn("w-4 select-none text-center text-[10px] font-bold", line.kind === "added" &&
|
|
102
|
+
"text-emerald-600 dark:text-emerald-400", line.kind === "removed" && "text-destructive", line.kind === "context" && "text-muted-foreground/40"), children: line.kind === "added"
|
|
103
|
+
? "+"
|
|
104
|
+
: line.kind === "removed"
|
|
105
|
+
? "-"
|
|
106
|
+
: " " }), _jsx("td", { className: cn("px-2 text-foreground", line.kind === "added" &&
|
|
107
|
+
"text-emerald-800 dark:text-emerald-200", line.kind === "removed" && "text-red-800 dark:text-red-200"), children: _jsx("span", { style: { whiteSpace: "pre-wrap", wordBreak: "break-all" }, children: line.text }) })] }, idx))) }) }) }));
|
|
108
|
+
});
|
|
109
|
+
export function EditCell({ meta, isRunning }) {
|
|
110
|
+
const [expanded, setExpanded] = useState(false);
|
|
111
|
+
const [showAll, setShowAll] = useState(false);
|
|
112
|
+
const diff = useMemo(() => {
|
|
113
|
+
if (!meta.oldText && !meta.newText)
|
|
114
|
+
return null;
|
|
115
|
+
return computeLineDiff(meta.oldText ?? "", meta.newText ?? "");
|
|
116
|
+
}, [meta.oldText, meta.newText]);
|
|
117
|
+
const stats = useMemo(() => (diff ? diffStats(diff) : null), [diff]);
|
|
118
|
+
const hasDiff = diff !== null && diff.length > 0;
|
|
119
|
+
const totalLines = diff?.length ?? 0;
|
|
120
|
+
const maxCollapsed = showAll || totalLines <= MAX_COLLAPSED_LINES ? null : MAX_COLLAPSED_LINES;
|
|
121
|
+
const hiddenLines = maxCollapsed !== null ? totalLines - MAX_COLLAPSED_LINES : 0;
|
|
122
|
+
return (_jsxs("div", { className: "my-1 overflow-hidden rounded-md border border-border/60", children: [_jsxs("button", { type: "button", onClick: () => hasDiff && setExpanded((e) => !e), className: cn("flex w-full items-center gap-2 px-2.5 py-1.5 text-left text-xs font-mono", isRunning
|
|
123
|
+
? "bg-muted text-muted-foreground"
|
|
124
|
+
: "bg-muted text-muted-foreground hover:bg-accent", hasDiff && "cursor-pointer", !hasDiff && "cursor-default"), "aria-expanded": hasDiff ? expanded : undefined, children: [_jsx("span", { className: "shrink-0", children: isRunning ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : (_jsx(IconFileDiff, { className: "h-3 w-3 text-amber-500" })) }), _jsx(IconFile, { className: "h-3 w-3 shrink-0 text-muted-foreground/70" }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium text-foreground", children: meta.filePath }), stats && !isRunning && (_jsxs("span", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [stats.added > 0 && (_jsxs("span", { className: "text-[10px] font-semibold text-emerald-600 dark:text-emerald-400", children: ["+", stats.added] })), stats.removed > 0 && (_jsxs("span", { className: "text-[10px] font-semibold text-destructive", children: ["-", stats.removed] })), meta.truncated && (_jsx("span", { className: "text-[10px] text-muted-foreground", children: "(partial)" }))] })), hasDiff && (_jsx(IconChevronDown, { className: cn("ml-1 h-3 w-3 shrink-0 opacity-40", expanded && "rotate-180") }))] }), expanded && hasDiff && (_jsxs("div", { className: "border-t border-border/40 bg-background", children: [_jsx(DiffView, { lines: diff, maxLines: maxCollapsed }), hiddenLines > 0 && (_jsx("div", { className: "border-t border-border/40 px-3 py-1 text-[11px] text-muted-foreground", children: _jsxs("button", { type: "button", className: "cursor-pointer underline hover:text-foreground", onClick: () => setShowAll(true), children: ["Show ", hiddenLines, " more lines"] }) }))] }))] }));
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=EditCell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditCell.js","sourceRoot":"","sources":["../../../src/client/tool-cells/EditCell.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * EditCell — renders an edit tool call as a syntax-highlighted unified diff.\n *\n * The diff is computed client-side from oldText / newText stored in the\n * structured metadata. The HighlightedCodeBlock from AssistantChat is not\n * accessible here, so we do a lightweight line-diff + per-line class approach\n * instead (no dep on shiki required for the diff view itself).\n *\n * Collapsed by default beyond MAX_COLLAPSED_LINES; expand button shows all.\n */\n\nimport { memo, useMemo, useState } from \"react\";\nimport {\n IconChevronDown,\n IconFile,\n IconFileDiff,\n IconLoader2,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../utils.js\";\n\nexport interface EditCellMeta {\n toolKind: \"edit\";\n filePath: string;\n oldText?: string;\n newText?: string;\n truncated?: boolean;\n}\n\ninterface EditCellProps {\n meta: EditCellMeta;\n isRunning: boolean;\n}\n\n/** Lines shown collapsed before \"expand\" is offered. */\nconst MAX_COLLAPSED_LINES = 40;\n\n// ─── Diff computation ────────────────────────────────────────────────────────\n\ninterface DiffLine {\n kind: \"context\" | \"added\" | \"removed\";\n text: string;\n oldLineNo?: number;\n newLineNo?: number;\n}\n\nfunction computeLineDiff(oldText: string, newText: string): DiffLine[] {\n const oldLines = oldText.split(\"\\n\");\n const newLines = newText.split(\"\\n\");\n\n // Simple Myers-style LCS via DP for line-level diffs.\n // For very large files we cap input to keep it snappy.\n const MAX_LINES = 2000;\n const a = oldLines.slice(0, MAX_LINES);\n const b = newLines.slice(0, MAX_LINES);\n\n const m = a.length;\n const n = b.length;\n\n // Build LCS table\n const dp: number[][] = Array.from({ length: m + 1 }, () =>\n new Array(n + 1).fill(0),\n );\n for (let i = m - 1; i >= 0; i--) {\n for (let j = n - 1; j >= 0; j--) {\n if (a[i] === b[j]) {\n dp[i][j] = dp[i + 1][j + 1] + 1;\n } else {\n dp[i][j] = Math.max(dp[i + 1][j], dp[i][j + 1]);\n }\n }\n }\n\n const result: DiffLine[] = [];\n let i = 0;\n let j = 0;\n let oldLineNo = 1;\n let newLineNo = 1;\n\n while (i < m || j < n) {\n if (i < m && j < n && a[i] === b[j]) {\n result.push({\n kind: \"context\",\n text: a[i],\n oldLineNo: oldLineNo++,\n newLineNo: newLineNo++,\n });\n i++;\n j++;\n } else if (j < n && (i >= m || dp[i + 1][j] >= dp[i][j + 1])) {\n result.push({ kind: \"added\", text: b[j], newLineNo: newLineNo++ });\n j++;\n } else {\n result.push({ kind: \"removed\", text: a[i], oldLineNo: oldLineNo++ });\n i++;\n }\n }\n\n // Append any overflow lines as context\n if (oldLines.length > MAX_LINES) {\n for (let k = MAX_LINES; k < oldLines.length; k++) {\n result.push({\n kind: \"removed\",\n text: oldLines[k],\n oldLineNo: oldLineNo++,\n });\n }\n }\n if (newLines.length > MAX_LINES) {\n for (let k = MAX_LINES; k < newLines.length; k++) {\n result.push({\n kind: \"added\",\n text: newLines[k],\n newLineNo: newLineNo++,\n });\n }\n }\n\n return result;\n}\n\n/** Compute +N -N line counts from a diff. */\nfunction diffStats(lines: DiffLine[]): { added: number; removed: number } {\n let added = 0;\n let removed = 0;\n for (const line of lines) {\n if (line.kind === \"added\") added++;\n else if (line.kind === \"removed\") removed++;\n }\n return { added, removed };\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\nconst DiffView = memo(function DiffView({\n lines,\n maxLines,\n}: {\n lines: DiffLine[];\n maxLines: number | null;\n}) {\n const visible = maxLines === null ? lines : lines.slice(0, maxLines);\n\n return (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full min-w-full border-collapse font-mono text-[11px] leading-relaxed\">\n <tbody>\n {visible.map((line, idx) => (\n <tr\n key={idx}\n className={cn(\n line.kind === \"added\" &&\n \"bg-emerald-500/8 dark:bg-emerald-400/8\",\n line.kind === \"removed\" && \"bg-destructive/8\",\n )}\n >\n {/* Old line number */}\n <td className=\"w-8 select-none border-r border-border/30 px-1.5 text-right text-[10px] text-muted-foreground/60\">\n {line.oldLineNo ?? \"\"}\n </td>\n {/* New line number */}\n <td className=\"w-8 select-none border-r border-border/30 px-1.5 text-right text-[10px] text-muted-foreground/60\">\n {line.newLineNo ?? \"\"}\n </td>\n {/* Sigil */}\n <td\n className={cn(\n \"w-4 select-none text-center text-[10px] font-bold\",\n line.kind === \"added\" &&\n \"text-emerald-600 dark:text-emerald-400\",\n line.kind === \"removed\" && \"text-destructive\",\n line.kind === \"context\" && \"text-muted-foreground/40\",\n )}\n >\n {line.kind === \"added\"\n ? \"+\"\n : line.kind === \"removed\"\n ? \"-\"\n : \" \"}\n </td>\n {/* Content */}\n <td\n className={cn(\n \"px-2 text-foreground\",\n line.kind === \"added\" &&\n \"text-emerald-800 dark:text-emerald-200\",\n line.kind === \"removed\" && \"text-red-800 dark:text-red-200\",\n )}\n >\n <span\n style={{ whiteSpace: \"pre-wrap\", wordBreak: \"break-all\" }}\n >\n {line.text}\n </span>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n});\n\nexport function EditCell({ meta, isRunning }: EditCellProps) {\n const [expanded, setExpanded] = useState(false);\n const [showAll, setShowAll] = useState(false);\n\n const diff = useMemo(() => {\n if (!meta.oldText && !meta.newText) return null;\n return computeLineDiff(meta.oldText ?? \"\", meta.newText ?? \"\");\n }, [meta.oldText, meta.newText]);\n\n const stats = useMemo(() => (diff ? diffStats(diff) : null), [diff]);\n const hasDiff = diff !== null && diff.length > 0;\n\n const totalLines = diff?.length ?? 0;\n const maxCollapsed =\n showAll || totalLines <= MAX_COLLAPSED_LINES ? null : MAX_COLLAPSED_LINES;\n const hiddenLines =\n maxCollapsed !== null ? totalLines - MAX_COLLAPSED_LINES : 0;\n\n return (\n <div className=\"my-1 overflow-hidden rounded-md border border-border/60\">\n {/* Header */}\n <button\n type=\"button\"\n onClick={() => hasDiff && setExpanded((e) => !e)}\n className={cn(\n \"flex w-full items-center gap-2 px-2.5 py-1.5 text-left text-xs font-mono\",\n isRunning\n ? \"bg-muted text-muted-foreground\"\n : \"bg-muted text-muted-foreground hover:bg-accent\",\n hasDiff && \"cursor-pointer\",\n !hasDiff && \"cursor-default\",\n )}\n aria-expanded={hasDiff ? expanded : undefined}\n >\n <span className=\"shrink-0\">\n {isRunning ? (\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n <IconFileDiff className=\"h-3 w-3 text-amber-500\" />\n )}\n </span>\n\n <IconFile className=\"h-3 w-3 shrink-0 text-muted-foreground/70\" />\n <span className=\"min-w-0 flex-1 truncate font-medium text-foreground\">\n {meta.filePath}\n </span>\n\n {stats && !isRunning && (\n <span className=\"ml-auto flex shrink-0 items-center gap-1.5\">\n {stats.added > 0 && (\n <span className=\"text-[10px] font-semibold text-emerald-600 dark:text-emerald-400\">\n +{stats.added}\n </span>\n )}\n {stats.removed > 0 && (\n <span className=\"text-[10px] font-semibold text-destructive\">\n -{stats.removed}\n </span>\n )}\n {meta.truncated && (\n <span className=\"text-[10px] text-muted-foreground\">\n (partial)\n </span>\n )}\n </span>\n )}\n\n {hasDiff && (\n <IconChevronDown\n className={cn(\n \"ml-1 h-3 w-3 shrink-0 opacity-40\",\n expanded && \"rotate-180\",\n )}\n />\n )}\n </button>\n\n {/* Diff body */}\n {expanded && hasDiff && (\n <div className=\"border-t border-border/40 bg-background\">\n <DiffView lines={diff} maxLines={maxCollapsed} />\n {hiddenLines > 0 && (\n <div className=\"border-t border-border/40 px-3 py-1 text-[11px] text-muted-foreground\">\n <button\n type=\"button\"\n className=\"cursor-pointer underline hover:text-foreground\"\n onClick={() => setShowAll(true)}\n >\n Show {hiddenLines} more lines\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FilesChangedSummary — aggregates all edit/write tool calls in a turn and
|
|
3
|
+
* renders a compact "+N -M path" summary row per file. Click a row to expand
|
|
4
|
+
* to that file's diff. Derived purely from ContentPart structuredMeta.
|
|
5
|
+
*/
|
|
6
|
+
import type { ContentPart } from "../sse-event-processor.js";
|
|
7
|
+
interface FilesChangedSummaryProps {
|
|
8
|
+
/** All content parts in the current assistant turn. */
|
|
9
|
+
parts: ContentPart[];
|
|
10
|
+
}
|
|
11
|
+
export declare const FilesChangedSummary: import("react").MemoExoticComponent<({ parts, }: FilesChangedSummaryProps) => import("react/jsx-runtime").JSX.Element | null>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=FilesChangedSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilesChangedSummary.d.ts","sourceRoot":"","sources":["../../../src/client/tool-cells/FilesChangedSummary.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAI7D,UAAU,wBAAwB;IAChC,uDAAuD;IACvD,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAiFD,eAAO,MAAM,mBAAmB,mDAE7B,wBAAwB,oDAwGzB,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* FilesChangedSummary — aggregates all edit/write tool calls in a turn and
|
|
4
|
+
* renders a compact "+N -M path" summary row per file. Click a row to expand
|
|
5
|
+
* to that file's diff. Derived purely from ContentPart structuredMeta.
|
|
6
|
+
*/
|
|
7
|
+
import { memo, useMemo, useState } from "react";
|
|
8
|
+
import { IconFiles } from "@tabler/icons-react";
|
|
9
|
+
import { cn } from "../utils.js";
|
|
10
|
+
import { EditCell } from "./EditCell.js";
|
|
11
|
+
import { WriteCell } from "./WriteCell.js";
|
|
12
|
+
function countLines(text) {
|
|
13
|
+
return text ? text.split("\n").length : 0;
|
|
14
|
+
}
|
|
15
|
+
function editLineDelta(oldText, newText) {
|
|
16
|
+
const oldLines = oldText ? oldText.split("\n") : [];
|
|
17
|
+
const newLines = newText ? newText.split("\n") : [];
|
|
18
|
+
// Simple count: compare total lines per side. For a real diff the
|
|
19
|
+
// edit cell already shows the full diff, so this approximation is fine
|
|
20
|
+
// for the summary bar.
|
|
21
|
+
const base = Math.min(oldLines.length, newLines.length);
|
|
22
|
+
const added = newLines.length - base;
|
|
23
|
+
const removed = oldLines.length - base;
|
|
24
|
+
return { added, removed };
|
|
25
|
+
}
|
|
26
|
+
function extractFileEntries(parts) {
|
|
27
|
+
const entries = [];
|
|
28
|
+
for (let i = 0; i < parts.length; i++) {
|
|
29
|
+
const part = parts[i];
|
|
30
|
+
if (part.type !== "tool-call" || !part.structuredMeta)
|
|
31
|
+
continue;
|
|
32
|
+
const meta = part.structuredMeta;
|
|
33
|
+
const kind = meta.toolKind;
|
|
34
|
+
if (kind === "edit") {
|
|
35
|
+
const { added, removed } = editLineDelta(meta.oldText, meta.newText);
|
|
36
|
+
entries.push({
|
|
37
|
+
filePath: meta.filePath ?? "",
|
|
38
|
+
kind: "edit",
|
|
39
|
+
added,
|
|
40
|
+
removed,
|
|
41
|
+
partIndex: i,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else if (kind === "write") {
|
|
45
|
+
const lineCount = typeof meta.lineCount === "number"
|
|
46
|
+
? meta.lineCount
|
|
47
|
+
: countLines(meta.content ?? "");
|
|
48
|
+
entries.push({
|
|
49
|
+
filePath: meta.filePath ?? "",
|
|
50
|
+
kind: "write",
|
|
51
|
+
added: lineCount,
|
|
52
|
+
removed: 0,
|
|
53
|
+
partIndex: i,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Deduplicate: last edit/write per file path wins for the summary row,
|
|
58
|
+
// but keep the expanded view as-is.
|
|
59
|
+
const seen = new Map();
|
|
60
|
+
const deduped = [];
|
|
61
|
+
for (const entry of entries) {
|
|
62
|
+
const key = `${entry.kind}:${entry.filePath}`;
|
|
63
|
+
if (seen.has(key)) {
|
|
64
|
+
const existing = seen.get(key);
|
|
65
|
+
deduped[existing] = entry;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
seen.set(key, deduped.length);
|
|
69
|
+
deduped.push(entry);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return deduped;
|
|
73
|
+
}
|
|
74
|
+
export const FilesChangedSummary = memo(function FilesChangedSummary({ parts, }) {
|
|
75
|
+
const entries = useMemo(() => extractFileEntries(parts), [parts]);
|
|
76
|
+
const [expanded, setExpanded] = useState(new Set());
|
|
77
|
+
if (entries.length === 0)
|
|
78
|
+
return null;
|
|
79
|
+
const toggle = (key) => {
|
|
80
|
+
setExpanded((prev) => {
|
|
81
|
+
const next = new Set(prev);
|
|
82
|
+
if (next.has(key))
|
|
83
|
+
next.delete(key);
|
|
84
|
+
else
|
|
85
|
+
next.add(key);
|
|
86
|
+
return next;
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
const totalAdded = entries.reduce((s, e) => s + e.added, 0);
|
|
90
|
+
const totalRemoved = entries.reduce((s, e) => s + e.removed, 0);
|
|
91
|
+
return (_jsxs("div", { className: "my-2 overflow-hidden rounded-md border border-border/60", children: [_jsxs("div", { className: "flex items-center gap-2 border-b border-border/40 bg-muted px-2.5 py-1.5 text-xs text-muted-foreground", children: [_jsx(IconFiles, { className: "h-3.5 w-3.5 shrink-0" }), _jsxs("span", { className: "font-medium text-foreground", children: [entries.length, " file", entries.length === 1 ? "" : "s", " changed"] }), _jsxs("span", { className: "ml-auto flex items-center gap-1.5", children: [totalAdded > 0 && (_jsxs("span", { className: "text-[10px] font-semibold text-emerald-600 dark:text-emerald-400", children: ["+", totalAdded] })), totalRemoved > 0 && (_jsxs("span", { className: "text-[10px] font-semibold text-destructive", children: ["-", totalRemoved] }))] })] }), entries.map((entry) => {
|
|
92
|
+
const key = `${entry.kind}:${entry.filePath}`;
|
|
93
|
+
const isExpanded = expanded.has(key);
|
|
94
|
+
const part = parts[entry.partIndex];
|
|
95
|
+
return (_jsxs("div", { className: "border-b border-border/30 last:border-b-0", children: [_jsxs("button", { type: "button", onClick: () => toggle(key), className: "flex w-full cursor-pointer items-center gap-2 px-2.5 py-1 text-left text-[11px] hover:bg-accent", children: [_jsx("span", { className: cn("inline-block h-1.5 w-1.5 shrink-0 rounded-full", entry.kind === "write" ? "bg-emerald-500" : "bg-amber-500") }), _jsx("span", { className: "min-w-0 flex-1 truncate font-mono text-foreground", children: entry.filePath }), _jsxs("span", { className: "ml-auto flex shrink-0 items-center gap-1", children: [entry.added > 0 && (_jsxs("span", { className: "text-[10px] font-semibold text-emerald-600 dark:text-emerald-400", children: ["+", entry.added] })), entry.removed > 0 && (_jsxs("span", { className: "text-[10px] font-semibold text-destructive", children: ["-", entry.removed] }))] })] }), isExpanded && part.type === "tool-call" && part.structuredMeta && (_jsx("div", { className: "pl-4", children: entry.kind === "edit" ? (_jsx(EditCell, { meta: part.structuredMeta, isRunning: false })) : (_jsx(WriteCell, { meta: part.structuredMeta, isRunning: false })) }))] }, key));
|
|
96
|
+
})] }));
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=FilesChangedSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilesChangedSummary.js","sourceRoot":"","sources":["../../../src/client/tool-cells/FilesChangedSummary.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * FilesChangedSummary — aggregates all edit/write tool calls in a turn and\n * renders a compact \"+N -M path\" summary row per file. Click a row to expand\n * to that file's diff. Derived purely from ContentPart structuredMeta.\n */\n\nimport { memo, useMemo, useState } from \"react\";\nimport { IconFiles } from \"@tabler/icons-react\";\nimport { cn } from \"../utils.js\";\nimport type { ContentPart } from \"../sse-event-processor.js\";\nimport { EditCell } from \"./EditCell.js\";\nimport { WriteCell } from \"./WriteCell.js\";\n\ninterface FilesChangedSummaryProps {\n /** All content parts in the current assistant turn. */\n parts: ContentPart[];\n}\n\ninterface FileEntry {\n filePath: string;\n kind: \"edit\" | \"write\";\n added: number;\n removed: number;\n partIndex: number;\n}\n\nfunction countLines(text: string): number {\n return text ? text.split(\"\\n\").length : 0;\n}\n\nfunction editLineDelta(\n oldText: string | undefined,\n newText: string | undefined,\n): { added: number; removed: number } {\n const oldLines = oldText ? oldText.split(\"\\n\") : [];\n const newLines = newText ? newText.split(\"\\n\") : [];\n\n // Simple count: compare total lines per side. For a real diff the\n // edit cell already shows the full diff, so this approximation is fine\n // for the summary bar.\n const base = Math.min(oldLines.length, newLines.length);\n const added = newLines.length - base;\n const removed = oldLines.length - base;\n return { added, removed };\n}\n\nfunction extractFileEntries(parts: ContentPart[]): FileEntry[] {\n const entries: FileEntry[] = [];\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (part.type !== \"tool-call\" || !part.structuredMeta) continue;\n const meta = part.structuredMeta as Record<string, unknown>;\n const kind = meta.toolKind as string | undefined;\n if (kind === \"edit\") {\n const { added, removed } = editLineDelta(\n meta.oldText as string | undefined,\n meta.newText as string | undefined,\n );\n entries.push({\n filePath: (meta.filePath as string) ?? \"\",\n kind: \"edit\",\n added,\n removed,\n partIndex: i,\n });\n } else if (kind === \"write\") {\n const lineCount =\n typeof meta.lineCount === \"number\"\n ? meta.lineCount\n : countLines((meta.content as string | undefined) ?? \"\");\n entries.push({\n filePath: (meta.filePath as string) ?? \"\",\n kind: \"write\",\n added: lineCount,\n removed: 0,\n partIndex: i,\n });\n }\n }\n\n // Deduplicate: last edit/write per file path wins for the summary row,\n // but keep the expanded view as-is.\n const seen = new Map<string, number>();\n const deduped: FileEntry[] = [];\n for (const entry of entries) {\n const key = `${entry.kind}:${entry.filePath}`;\n if (seen.has(key)) {\n const existing = seen.get(key)!;\n deduped[existing] = entry;\n } else {\n seen.set(key, deduped.length);\n deduped.push(entry);\n }\n }\n return deduped;\n}\n\nexport const FilesChangedSummary = memo(function FilesChangedSummary({\n parts,\n}: FilesChangedSummaryProps) {\n const entries = useMemo(() => extractFileEntries(parts), [parts]);\n const [expanded, setExpanded] = useState<Set<string>>(new Set());\n\n if (entries.length === 0) return null;\n\n const toggle = (key: string) => {\n setExpanded((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n };\n\n const totalAdded = entries.reduce((s, e) => s + e.added, 0);\n const totalRemoved = entries.reduce((s, e) => s + e.removed, 0);\n\n return (\n <div className=\"my-2 overflow-hidden rounded-md border border-border/60\">\n {/* Summary header */}\n <div className=\"flex items-center gap-2 border-b border-border/40 bg-muted px-2.5 py-1.5 text-xs text-muted-foreground\">\n <IconFiles className=\"h-3.5 w-3.5 shrink-0\" />\n <span className=\"font-medium text-foreground\">\n {entries.length} file{entries.length === 1 ? \"\" : \"s\"} changed\n </span>\n <span className=\"ml-auto flex items-center gap-1.5\">\n {totalAdded > 0 && (\n <span className=\"text-[10px] font-semibold text-emerald-600 dark:text-emerald-400\">\n +{totalAdded}\n </span>\n )}\n {totalRemoved > 0 && (\n <span className=\"text-[10px] font-semibold text-destructive\">\n -{totalRemoved}\n </span>\n )}\n </span>\n </div>\n\n {/* Per-file rows */}\n {entries.map((entry) => {\n const key = `${entry.kind}:${entry.filePath}`;\n const isExpanded = expanded.has(key);\n const part = parts[entry.partIndex];\n\n return (\n <div key={key} className=\"border-b border-border/30 last:border-b-0\">\n <button\n type=\"button\"\n onClick={() => toggle(key)}\n className=\"flex w-full cursor-pointer items-center gap-2 px-2.5 py-1 text-left text-[11px] hover:bg-accent\"\n >\n <span\n className={cn(\n \"inline-block h-1.5 w-1.5 shrink-0 rounded-full\",\n entry.kind === \"write\" ? \"bg-emerald-500\" : \"bg-amber-500\",\n )}\n />\n <span className=\"min-w-0 flex-1 truncate font-mono text-foreground\">\n {entry.filePath}\n </span>\n <span className=\"ml-auto flex shrink-0 items-center gap-1\">\n {entry.added > 0 && (\n <span className=\"text-[10px] font-semibold text-emerald-600 dark:text-emerald-400\">\n +{entry.added}\n </span>\n )}\n {entry.removed > 0 && (\n <span className=\"text-[10px] font-semibold text-destructive\">\n -{entry.removed}\n </span>\n )}\n </span>\n </button>\n\n {isExpanded && part.type === \"tool-call\" && part.structuredMeta && (\n <div className=\"pl-4\">\n {entry.kind === \"edit\" ? (\n <EditCell\n meta={\n part.structuredMeta as unknown as Parameters<\n typeof EditCell\n >[0][\"meta\"]\n }\n isRunning={false}\n />\n ) : (\n <WriteCell\n meta={\n part.structuredMeta as unknown as Parameters<\n typeof WriteCell\n >[0][\"meta\"]\n }\n isRunning={false}\n />\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n});\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WriteCell — renders a write tool call as a new-file view with added-line styling.
|
|
3
|
+
*/
|
|
4
|
+
export interface WriteCellMeta {
|
|
5
|
+
toolKind: "write";
|
|
6
|
+
filePath: string;
|
|
7
|
+
content?: string;
|
|
8
|
+
truncated?: boolean;
|
|
9
|
+
lineCount?: number;
|
|
10
|
+
}
|
|
11
|
+
interface WriteCellProps {
|
|
12
|
+
meta: WriteCellMeta;
|
|
13
|
+
isRunning: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function WriteCell({ meta, isRunning }: WriteCellProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=WriteCell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WriteCell.d.ts","sourceRoot":"","sources":["../../../src/client/tool-cells/WriteCell.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAyCD,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,cAAc,2CA4E5D"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* WriteCell — renders a write tool call as a new-file view with added-line styling.
|
|
4
|
+
*/
|
|
5
|
+
import { memo, useState } from "react";
|
|
6
|
+
import { IconChevronDown, IconFilePlus, IconLoader2, } from "@tabler/icons-react";
|
|
7
|
+
import { cn } from "../utils.js";
|
|
8
|
+
const MAX_COLLAPSED_LINES = 40;
|
|
9
|
+
const FileContentView = memo(function FileContentView({ content, maxLines, }) {
|
|
10
|
+
const lines = content.split("\n");
|
|
11
|
+
const visible = maxLines !== null ? lines.slice(0, maxLines) : lines;
|
|
12
|
+
return (_jsx("div", { className: "overflow-x-auto", children: _jsx("table", { className: "w-full min-w-full border-collapse font-mono text-[11px] leading-relaxed", children: _jsx("tbody", { children: visible.map((line, idx) => (_jsxs("tr", { className: "bg-emerald-500/8 dark:bg-emerald-400/8", children: [_jsx("td", { className: "w-8 select-none border-r border-border/30 px-1.5 text-right text-[10px] text-muted-foreground/60", children: idx + 1 }), _jsx("td", { className: "w-4 select-none text-center text-[10px] font-bold text-emerald-600 dark:text-emerald-400", children: "+" }), _jsx("td", { className: "px-2 text-emerald-800 dark:text-emerald-200", children: _jsx("span", { style: { whiteSpace: "pre-wrap", wordBreak: "break-all" }, children: line }) })] }, idx))) }) }) }));
|
|
13
|
+
});
|
|
14
|
+
export function WriteCell({ meta, isRunning }) {
|
|
15
|
+
const [expanded, setExpanded] = useState(false);
|
|
16
|
+
const [showAll, setShowAll] = useState(false);
|
|
17
|
+
const hasContent = Boolean(meta.content);
|
|
18
|
+
const lines = meta.content ? meta.content.split("\n") : [];
|
|
19
|
+
const totalLines = lines.length;
|
|
20
|
+
const maxCollapsed = showAll || totalLines <= MAX_COLLAPSED_LINES ? null : MAX_COLLAPSED_LINES;
|
|
21
|
+
const hiddenLines = maxCollapsed !== null ? totalLines - MAX_COLLAPSED_LINES : 0;
|
|
22
|
+
return (_jsxs("div", { className: "my-1 overflow-hidden rounded-md border border-border/60", children: [_jsxs("button", { type: "button", onClick: () => hasContent && setExpanded((e) => !e), className: cn("flex w-full items-center gap-2 px-2.5 py-1.5 text-left text-xs font-mono", isRunning
|
|
23
|
+
? "bg-muted text-muted-foreground"
|
|
24
|
+
: "bg-muted text-muted-foreground hover:bg-accent", hasContent && "cursor-pointer", !hasContent && "cursor-default"), "aria-expanded": hasContent ? expanded : undefined, children: [_jsx("span", { className: "shrink-0", children: isRunning ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : (_jsx(IconFilePlus, { className: "h-3 w-3 text-emerald-500" })) }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium text-foreground", children: meta.filePath }), _jsxs("span", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [meta.lineCount !== undefined && !isRunning && (_jsxs("span", { className: "text-[10px] font-semibold text-emerald-600 dark:text-emerald-400", children: ["+", meta.lineCount] })), meta.truncated && (_jsx("span", { className: "text-[10px] text-muted-foreground", children: "(partial)" })), hasContent && (_jsx(IconChevronDown, { className: cn("h-3 w-3 opacity-40", expanded && "rotate-180") }))] })] }), expanded && hasContent && meta.content && (_jsxs("div", { className: "border-t border-border/40 bg-background", children: [_jsx(FileContentView, { content: meta.content, maxLines: maxCollapsed }), hiddenLines > 0 && (_jsx("div", { className: "border-t border-border/40 px-3 py-1 text-[11px] text-muted-foreground", children: _jsxs("button", { type: "button", className: "cursor-pointer underline hover:text-foreground", onClick: () => setShowAll(true), children: ["Show ", hiddenLines, " more lines"] }) }))] }))] }));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=WriteCell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WriteCell.js","sourceRoot":"","sources":["../../../src/client/tool-cells/WriteCell.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * WriteCell — renders a write tool call as a new-file view with added-line styling.\n */\n\nimport { memo, useState } from \"react\";\nimport {\n IconChevronDown,\n IconFilePlus,\n IconLoader2,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../utils.js\";\n\nexport interface WriteCellMeta {\n toolKind: \"write\";\n filePath: string;\n content?: string;\n truncated?: boolean;\n lineCount?: number;\n}\n\ninterface WriteCellProps {\n meta: WriteCellMeta;\n isRunning: boolean;\n}\n\nconst MAX_COLLAPSED_LINES = 40;\n\nconst FileContentView = memo(function FileContentView({\n content,\n maxLines,\n}: {\n content: string;\n maxLines: number | null;\n}) {\n const lines = content.split(\"\\n\");\n const visible = maxLines !== null ? lines.slice(0, maxLines) : lines;\n\n return (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full min-w-full border-collapse font-mono text-[11px] leading-relaxed\">\n <tbody>\n {visible.map((line, idx) => (\n <tr key={idx} className=\"bg-emerald-500/8 dark:bg-emerald-400/8\">\n <td className=\"w-8 select-none border-r border-border/30 px-1.5 text-right text-[10px] text-muted-foreground/60\">\n {idx + 1}\n </td>\n <td className=\"w-4 select-none text-center text-[10px] font-bold text-emerald-600 dark:text-emerald-400\">\n +\n </td>\n <td className=\"px-2 text-emerald-800 dark:text-emerald-200\">\n <span\n style={{ whiteSpace: \"pre-wrap\", wordBreak: \"break-all\" }}\n >\n {line}\n </span>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n});\n\nexport function WriteCell({ meta, isRunning }: WriteCellProps) {\n const [expanded, setExpanded] = useState(false);\n const [showAll, setShowAll] = useState(false);\n\n const hasContent = Boolean(meta.content);\n const lines = meta.content ? meta.content.split(\"\\n\") : [];\n const totalLines = lines.length;\n const maxCollapsed =\n showAll || totalLines <= MAX_COLLAPSED_LINES ? null : MAX_COLLAPSED_LINES;\n const hiddenLines =\n maxCollapsed !== null ? totalLines - MAX_COLLAPSED_LINES : 0;\n\n return (\n <div className=\"my-1 overflow-hidden rounded-md border border-border/60\">\n {/* Header */}\n <button\n type=\"button\"\n onClick={() => hasContent && setExpanded((e) => !e)}\n className={cn(\n \"flex w-full items-center gap-2 px-2.5 py-1.5 text-left text-xs font-mono\",\n isRunning\n ? \"bg-muted text-muted-foreground\"\n : \"bg-muted text-muted-foreground hover:bg-accent\",\n hasContent && \"cursor-pointer\",\n !hasContent && \"cursor-default\",\n )}\n aria-expanded={hasContent ? expanded : undefined}\n >\n <span className=\"shrink-0\">\n {isRunning ? (\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n <IconFilePlus className=\"h-3 w-3 text-emerald-500\" />\n )}\n </span>\n\n <span className=\"min-w-0 flex-1 truncate font-medium text-foreground\">\n {meta.filePath}\n </span>\n\n <span className=\"ml-auto flex shrink-0 items-center gap-1.5\">\n {meta.lineCount !== undefined && !isRunning && (\n <span className=\"text-[10px] font-semibold text-emerald-600 dark:text-emerald-400\">\n +{meta.lineCount}\n </span>\n )}\n {meta.truncated && (\n <span className=\"text-[10px] text-muted-foreground\">(partial)</span>\n )}\n {hasContent && (\n <IconChevronDown\n className={cn(\"h-3 w-3 opacity-40\", expanded && \"rotate-180\")}\n />\n )}\n </span>\n </button>\n\n {/* Content body */}\n {expanded && hasContent && meta.content && (\n <div className=\"border-t border-border/40 bg-background\">\n <FileContentView content={meta.content} maxLines={maxCollapsed} />\n {hiddenLines > 0 && (\n <div className=\"border-t border-border/40 px-3 py-1 text-[11px] text-muted-foreground\">\n <button\n type=\"button\"\n className=\"cursor-pointer underline hover:text-foreground\"\n onClick={() => setShowAll(true)}\n >\n Show {hiddenLines} more lines\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { BashCell } from "./BashCell.js";
|
|
2
|
+
export type { BashCellMeta } from "./BashCell.js";
|
|
3
|
+
export { EditCell } from "./EditCell.js";
|
|
4
|
+
export type { EditCellMeta } from "./EditCell.js";
|
|
5
|
+
export { WriteCell } from "./WriteCell.js";
|
|
6
|
+
export type { WriteCellMeta } from "./WriteCell.js";
|
|
7
|
+
export { FilesChangedSummary } from "./FilesChangedSummary.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/tool-cells/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/tool-cells/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["export { BashCell } from \"./BashCell.js\";\nexport type { BashCellMeta } from \"./BashCell.js\";\nexport { EditCell } from \"./EditCell.js\";\nexport type { EditCellMeta } from \"./EditCell.js\";\nexport { WriteCell } from \"./WriteCell.js\";\nexport type { WriteCellMeta } from \"./WriteCell.js\";\nexport { FilesChangedSummary } from \"./FilesChangedSummary.js\";\n"]}
|
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Drop this next to transcript displays in any template.
|
|
7
7
|
*/
|
|
8
|
-
export declare function BuilderTranscriptionCta(): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function BuilderTranscriptionCta(): import("react/jsx-runtime").JSX.Element | null;
|
|
9
9
|
//# sourceMappingURL=BuilderTranscriptionCta.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuilderTranscriptionCta.d.ts","sourceRoot":"","sources":["../../../src/client/transcription/BuilderTranscriptionCta.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,wBAAgB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"BuilderTranscriptionCta.d.ts","sourceRoot":"","sources":["../../../src/client/transcription/BuilderTranscriptionCta.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,wBAAgB,uBAAuB,mDAyGtC"}
|
|
@@ -42,7 +42,7 @@ export interface UseChatThreadsOptions {
|
|
|
42
42
|
}
|
|
43
43
|
export declare function useChatThreads(apiUrl?: string, storageKey?: string, scope?: ChatThreadScope | null, options?: UseChatThreadsOptions): {
|
|
44
44
|
threads: ChatThreadSummary[];
|
|
45
|
-
activeThreadId: string;
|
|
45
|
+
activeThreadId: string | null;
|
|
46
46
|
isLoading: boolean;
|
|
47
47
|
createThread: (preferredId?: string) => Promise<string | null>;
|
|
48
48
|
switchThread: (id: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-chat-threads.d.ts","sourceRoot":"","sources":["../../src/client/use-chat-threads.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,iBAAiB,GAAG,WAAW,GAAG,WAAW,CAAC;AAMnD,MAAM,WAAW,qBAAqB;IACpC,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAqED,wBAAgB,cAAc,CAC5B,MAAM,SAA+C,EACrD,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,EAC9B,OAAO,CAAC,EAAE,qBAAqB;;;;iCA0Xd,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;uBAoNV,MAAM;uBAK/B,MAAM;6BAtMA,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;0BAkBtB,MAAM,UAAU,OAAO,KAAG,OAAO,CAAC,OAAO,CAAC;8BAuD1C,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;6BAgEzB,MAAM,SAAS,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;2BA0M7C,MAAM,mBACC,kBAAkB,GAAG,IAAI,KACzC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;yBA7GnB,MAAM,QACJ;QACJ,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,iBAAiB,CAAC;KACjC;8BA0Ec,MAAM,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"use-chat-threads.d.ts","sourceRoot":"","sources":["../../src/client/use-chat-threads.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,iBAAiB,GAAG,WAAW,GAAG,WAAW,CAAC;AAMnD,MAAM,WAAW,qBAAqB;IACpC,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAqED,wBAAgB,cAAc,CAC5B,MAAM,SAA+C,EACrD,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,EAC9B,OAAO,CAAC,EAAE,qBAAqB;;;;iCA0Xd,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;uBAoNV,MAAM;uBAK/B,MAAM;6BAtMA,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;0BAkBtB,MAAM,UAAU,OAAO,KAAG,OAAO,CAAC,OAAO,CAAC;8BAuD1C,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;6BAgEzB,MAAM,SAAS,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;2BA0M7C,MAAM,mBACC,kBAAkB,GAAG,IAAI,KACzC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;yBA7GnB,MAAM,QACJ;QACJ,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,iBAAiB,CAAC;KACjC;8BA0Ec,MAAM,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;2BAgInD,MAAM,KAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;;sBA5P9C,MAAM;EAiSd"}
|
|
@@ -723,20 +723,23 @@ export function useChatThreads(apiUrl = agentNativePath("/_agent-native/agent-ch
|
|
|
723
723
|
else {
|
|
724
724
|
thread = await res.json();
|
|
725
725
|
}
|
|
726
|
+
// thread is non-null: the null branch returned early above (line 935)
|
|
727
|
+
// and the else branch always assigns it.
|
|
728
|
+
const t = thread;
|
|
726
729
|
setThreads((prev) => [
|
|
727
730
|
{
|
|
728
|
-
id:
|
|
729
|
-
title:
|
|
730
|
-
preview:
|
|
731
|
-
messageCount:
|
|
732
|
-
createdAt:
|
|
733
|
-
updatedAt:
|
|
734
|
-
scope:
|
|
731
|
+
id: t.id,
|
|
732
|
+
title: t.title,
|
|
733
|
+
preview: t.preview,
|
|
734
|
+
messageCount: t.messageCount,
|
|
735
|
+
createdAt: t.createdAt,
|
|
736
|
+
updatedAt: t.updatedAt,
|
|
737
|
+
scope: t.scope ?? null,
|
|
735
738
|
},
|
|
736
739
|
...prev,
|
|
737
740
|
]);
|
|
738
741
|
emitThreadsUpdated();
|
|
739
|
-
return
|
|
742
|
+
return t.id;
|
|
740
743
|
}
|
|
741
744
|
catch (err) {
|
|
742
745
|
console.error(`[chat] fork threw for ${sourceId}:`, err);
|