@wzrhine/agent 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/LICENSE +21 -0
- package/README.md +29 -3
- package/dist/agent.css +16 -0
- package/dist/components/artifact/ArtifactCard.d.ts +59 -0
- package/dist/components/artifact/ArtifactCard.d.ts.map +1 -0
- package/dist/components/artifact/ArtifactCard.js +79 -0
- package/dist/components/artifact/ArtifactCard.js.map +1 -0
- package/dist/components/artifact/FilePreview.d.ts +121 -0
- package/dist/components/artifact/FilePreview.d.ts.map +1 -0
- package/dist/components/artifact/FilePreview.js +213 -0
- package/dist/components/artifact/FilePreview.js.map +1 -0
- package/dist/components/artifact/FilePreviewTabs.d.ts +51 -0
- package/dist/components/artifact/FilePreviewTabs.d.ts.map +1 -0
- package/dist/components/artifact/FilePreviewTabs.js +150 -0
- package/dist/components/artifact/FilePreviewTabs.js.map +1 -0
- package/dist/components/composer/AttachmentList.d.ts +33 -0
- package/dist/components/composer/AttachmentList.d.ts.map +1 -0
- package/dist/components/composer/AttachmentList.js +60 -0
- package/dist/components/composer/AttachmentList.js.map +1 -0
- package/dist/components/composer/Composer.d.ts +119 -0
- package/dist/components/composer/Composer.d.ts.map +1 -0
- package/dist/components/composer/Composer.js +336 -0
- package/dist/components/composer/Composer.js.map +1 -0
- package/dist/components/composer/ComposerInput.d.ts +103 -0
- package/dist/components/composer/ComposerInput.d.ts.map +1 -0
- package/dist/components/composer/ComposerInput.js +301 -0
- package/dist/components/composer/ComposerInput.js.map +1 -0
- package/dist/components/composer/ComposerNotice.d.ts +38 -0
- package/dist/components/composer/ComposerNotice.d.ts.map +1 -0
- package/dist/components/composer/ComposerNotice.js +16 -0
- package/dist/components/composer/ComposerNotice.js.map +1 -0
- package/dist/components/composer/MentionMenu.d.ts +37 -0
- package/dist/components/composer/MentionMenu.d.ts.map +1 -0
- package/dist/components/composer/MentionMenu.js +56 -0
- package/dist/components/composer/MentionMenu.js.map +1 -0
- package/dist/components/composer/MenuPanel.d.ts +49 -0
- package/dist/components/composer/MenuPanel.d.ts.map +1 -0
- package/dist/components/composer/MenuPanel.js +50 -0
- package/dist/components/composer/MenuPanel.js.map +1 -0
- package/dist/components/composer/ModelPicker.d.ts +53 -0
- package/dist/components/composer/ModelPicker.d.ts.map +1 -0
- package/dist/components/composer/ModelPicker.js +126 -0
- package/dist/components/composer/ModelPicker.js.map +1 -0
- package/dist/components/composer/PermissionPicker.d.ts +35 -0
- package/dist/components/composer/PermissionPicker.d.ts.map +1 -0
- package/dist/components/composer/PermissionPicker.js +51 -0
- package/dist/components/composer/PermissionPicker.js.map +1 -0
- package/dist/components/composer/ReferencePicker.d.ts +31 -0
- package/dist/components/composer/ReferencePicker.d.ts.map +1 -0
- package/dist/components/composer/ReferencePicker.js +50 -0
- package/dist/components/composer/ReferencePicker.js.map +1 -0
- package/dist/components/composer/SendStopButton.d.ts +73 -0
- package/dist/components/composer/SendStopButton.d.ts.map +1 -0
- package/dist/components/composer/SendStopButton.js +88 -0
- package/dist/components/composer/SendStopButton.js.map +1 -0
- package/dist/components/composer/SkillPicker.d.ts +26 -0
- package/dist/components/composer/SkillPicker.d.ts.map +1 -0
- package/dist/components/composer/SkillPicker.js +26 -0
- package/dist/components/composer/SkillPicker.js.map +1 -0
- package/dist/components/composer/SlashCommandMenu.d.ts +33 -0
- package/dist/components/composer/SlashCommandMenu.d.ts.map +1 -0
- package/dist/components/composer/SlashCommandMenu.js +43 -0
- package/dist/components/composer/SlashCommandMenu.js.map +1 -0
- package/dist/components/composer/composer-text.d.ts +10 -0
- package/dist/components/composer/composer-text.d.ts.map +1 -0
- package/dist/components/composer/composer-text.js +26 -0
- package/dist/components/composer/composer-text.js.map +1 -0
- package/dist/components/composer/composer-utils.d.ts +74 -0
- package/dist/components/composer/composer-utils.d.ts.map +1 -0
- package/dist/components/composer/composer-utils.js +133 -0
- package/dist/components/composer/composer-utils.js.map +1 -0
- package/dist/components/conversation/ConversationList.d.ts +94 -0
- package/dist/components/conversation/ConversationList.d.ts.map +1 -0
- package/dist/components/conversation/ConversationList.js +81 -0
- package/dist/components/conversation/ConversationList.js.map +1 -0
- package/dist/components/conversation/ConversationRow.d.ts +66 -0
- package/dist/components/conversation/ConversationRow.d.ts.map +1 -0
- package/dist/components/conversation/ConversationRow.js +65 -0
- package/dist/components/conversation/ConversationRow.js.map +1 -0
- package/dist/components/conversation/conversation-status.d.ts +21 -0
- package/dist/components/conversation/conversation-status.d.ts.map +1 -0
- package/dist/components/conversation/conversation-status.js +33 -0
- package/dist/components/conversation/conversation-status.js.map +1 -0
- package/dist/components/intervention/ApprovalDiff.d.ts +14 -0
- package/dist/components/intervention/ApprovalDiff.d.ts.map +1 -0
- package/dist/components/intervention/ApprovalDiff.js +25 -0
- package/dist/components/intervention/ApprovalDiff.js.map +1 -0
- package/dist/components/intervention/ApprovalPanel.d.ts +57 -0
- package/dist/components/intervention/ApprovalPanel.d.ts.map +1 -0
- package/dist/components/intervention/ApprovalPanel.js +111 -0
- package/dist/components/intervention/ApprovalPanel.js.map +1 -0
- package/dist/components/intervention/ErrorRecoveryNotice.d.ts +28 -0
- package/dist/components/intervention/ErrorRecoveryNotice.d.ts.map +1 -0
- package/dist/components/intervention/ErrorRecoveryNotice.js +31 -0
- package/dist/components/intervention/ErrorRecoveryNotice.js.map +1 -0
- package/dist/components/intervention/GrantList.d.ts +49 -0
- package/dist/components/intervention/GrantList.d.ts.map +1 -0
- package/dist/components/intervention/GrantList.js +58 -0
- package/dist/components/intervention/GrantList.js.map +1 -0
- package/dist/components/intervention/InterventionDock.d.ts +24 -0
- package/dist/components/intervention/InterventionDock.d.ts.map +1 -0
- package/dist/components/intervention/InterventionDock.js +18 -0
- package/dist/components/intervention/InterventionDock.js.map +1 -0
- package/dist/components/intervention/QuestionnaireCard.d.ts +81 -0
- package/dist/components/intervention/QuestionnaireCard.d.ts.map +1 -0
- package/dist/components/intervention/QuestionnaireCard.js +333 -0
- package/dist/components/intervention/QuestionnaireCard.js.map +1 -0
- package/dist/components/intervention/action-lock.d.ts +20 -0
- package/dist/components/intervention/action-lock.d.ts.map +1 -0
- package/dist/components/intervention/action-lock.js +65 -0
- package/dist/components/intervention/action-lock.js.map +1 -0
- package/dist/components/intervention/icons.d.ts +8 -0
- package/dist/components/intervention/icons.d.ts.map +1 -0
- package/dist/components/intervention/icons.js +11 -0
- package/dist/components/intervention/icons.js.map +1 -0
- package/dist/components/intervention/questionnaire-answers.d.ts +34 -0
- package/dist/components/intervention/questionnaire-answers.d.ts.map +1 -0
- package/dist/components/intervention/questionnaire-answers.js +97 -0
- package/dist/components/intervention/questionnaire-answers.js.map +1 -0
- package/dist/components/message/AgentMessage.d.ts +98 -0
- package/dist/components/message/AgentMessage.d.ts.map +1 -0
- package/dist/components/message/AgentMessage.js +94 -0
- package/dist/components/message/AgentMessage.js.map +1 -0
- package/dist/components/message/CitationChip.d.ts +38 -0
- package/dist/components/message/CitationChip.d.ts.map +1 -0
- package/dist/components/message/CitationChip.js +32 -0
- package/dist/components/message/CitationChip.js.map +1 -0
- package/dist/components/message/CodeBlock.d.ts +45 -0
- package/dist/components/message/CodeBlock.d.ts.map +1 -0
- package/dist/components/message/CodeBlock.js +21 -0
- package/dist/components/message/CodeBlock.js.map +1 -0
- package/dist/components/message/JumpToLatest.d.ts +27 -0
- package/dist/components/message/JumpToLatest.d.ts.map +1 -0
- package/dist/components/message/JumpToLatest.js +17 -0
- package/dist/components/message/JumpToLatest.js.map +1 -0
- package/dist/components/message/Markdown.d.ts +21 -0
- package/dist/components/message/Markdown.d.ts.map +1 -0
- package/dist/components/message/Markdown.js +21 -0
- package/dist/components/message/Markdown.js.map +1 -0
- package/dist/components/message/MessageActions.d.ts +67 -0
- package/dist/components/message/MessageActions.d.ts.map +1 -0
- package/dist/components/message/MessageActions.js +83 -0
- package/dist/components/message/MessageActions.js.map +1 -0
- package/dist/components/message/MessageList.d.ts +106 -0
- package/dist/components/message/MessageList.d.ts.map +1 -0
- package/dist/components/message/MessageList.js +327 -0
- package/dist/components/message/MessageList.js.map +1 -0
- package/dist/components/message/MessagePart.d.ts +44 -0
- package/dist/components/message/MessagePart.d.ts.map +1 -0
- package/dist/components/message/MessagePart.js +150 -0
- package/dist/components/message/MessagePart.js.map +1 -0
- package/dist/components/message/RunDetails.d.ts +26 -0
- package/dist/components/message/RunDetails.d.ts.map +1 -0
- package/dist/components/message/RunDetails.js +113 -0
- package/dist/components/message/RunDetails.js.map +1 -0
- package/dist/components/message/SkillUseList.d.ts +22 -0
- package/dist/components/message/SkillUseList.d.ts.map +1 -0
- package/dist/components/message/SkillUseList.js +20 -0
- package/dist/components/message/SkillUseList.js.map +1 -0
- package/dist/components/message/ThinkingBlock.d.ts +44 -0
- package/dist/components/message/ThinkingBlock.d.ts.map +1 -0
- package/dist/components/message/ThinkingBlock.js +34 -0
- package/dist/components/message/ThinkingBlock.js.map +1 -0
- package/dist/components/message/icons.d.ts +14 -0
- package/dist/components/message/icons.d.ts.map +1 -0
- package/dist/components/message/icons.js +16 -0
- package/dist/components/message/icons.js.map +1 -0
- package/dist/components/message/plain-text.d.ts +11 -0
- package/dist/components/message/plain-text.d.ts.map +1 -0
- package/dist/components/message/plain-text.js +58 -0
- package/dist/components/message/plain-text.js.map +1 -0
- package/dist/components/message/renderers.d.ts +30 -0
- package/dist/components/message/renderers.d.ts.map +1 -0
- package/dist/components/message/renderers.js +2 -0
- package/dist/components/message/renderers.js.map +1 -0
- package/dist/components/message/use-copy.d.ts +19 -0
- package/dist/components/message/use-copy.d.ts.map +1 -0
- package/dist/components/message/use-copy.js +67 -0
- package/dist/components/message/use-copy.js.map +1 -0
- package/dist/components/process/AgentProcess.d.ts +47 -0
- package/dist/components/process/AgentProcess.d.ts.map +1 -0
- package/dist/components/process/AgentProcess.js +78 -0
- package/dist/components/process/AgentProcess.js.map +1 -0
- package/dist/components/process/RunStatus.d.ts +60 -0
- package/dist/components/process/RunStatus.d.ts.map +1 -0
- package/dist/components/process/RunStatus.js +34 -0
- package/dist/components/process/RunStatus.js.map +1 -0
- package/dist/components/shell/AgentEmptyState.d.ts +35 -0
- package/dist/components/shell/AgentEmptyState.d.ts.map +1 -0
- package/dist/components/shell/AgentEmptyState.js +20 -0
- package/dist/components/shell/AgentEmptyState.js.map +1 -0
- package/dist/components/shell/AgentHeader.d.ts +84 -0
- package/dist/components/shell/AgentHeader.d.ts.map +1 -0
- package/dist/components/shell/AgentHeader.js +43 -0
- package/dist/components/shell/AgentHeader.js.map +1 -0
- package/dist/components/shell/AgentShell.d.ts +154 -0
- package/dist/components/shell/AgentShell.d.ts.map +1 -0
- package/dist/components/shell/AgentShell.js +210 -0
- package/dist/components/shell/AgentShell.js.map +1 -0
- package/dist/components/shell/AgentSidePane.d.ts +54 -0
- package/dist/components/shell/AgentSidePane.d.ts.map +1 -0
- package/dist/components/shell/AgentSidePane.js +26 -0
- package/dist/components/shell/AgentSidePane.js.map +1 -0
- package/dist/components/shell/ResizeHandle.d.ts +54 -0
- package/dist/components/shell/ResizeHandle.d.ts.map +1 -0
- package/dist/components/shell/ResizeHandle.js +94 -0
- package/dist/components/shell/ResizeHandle.js.map +1 -0
- package/dist/components/shell/use-controllable.d.ts +9 -0
- package/dist/components/shell/use-controllable.d.ts.map +1 -0
- package/dist/components/shell/use-controllable.js +26 -0
- package/dist/components/shell/use-controllable.js.map +1 -0
- package/dist/components/tools/ChunkPager.d.ts +48 -0
- package/dist/components/tools/ChunkPager.d.ts.map +1 -0
- package/dist/components/tools/ChunkPager.js +68 -0
- package/dist/components/tools/ChunkPager.js.map +1 -0
- package/dist/components/tools/CodeModeToolTree.d.ts +64 -0
- package/dist/components/tools/CodeModeToolTree.d.ts.map +1 -0
- package/dist/components/tools/CodeModeToolTree.js +97 -0
- package/dist/components/tools/CodeModeToolTree.js.map +1 -0
- package/dist/components/tools/DiffPreview.d.ts +83 -0
- package/dist/components/tools/DiffPreview.d.ts.map +1 -0
- package/dist/components/tools/DiffPreview.js +95 -0
- package/dist/components/tools/DiffPreview.js.map +1 -0
- package/dist/components/tools/ToolActivity.d.ts +63 -0
- package/dist/components/tools/ToolActivity.d.ts.map +1 -0
- package/dist/components/tools/ToolActivity.js +45 -0
- package/dist/components/tools/ToolActivity.js.map +1 -0
- package/dist/components/tools/ToolDetails.d.ts +118 -0
- package/dist/components/tools/ToolDetails.d.ts.map +1 -0
- package/dist/components/tools/ToolDetails.js +258 -0
- package/dist/components/tools/ToolDetails.js.map +1 -0
- package/dist/components/tools/ToolHistory.d.ts +48 -0
- package/dist/components/tools/ToolHistory.d.ts.map +1 -0
- package/dist/components/tools/ToolHistory.js +37 -0
- package/dist/components/tools/ToolHistory.js.map +1 -0
- package/dist/components/tools/ToolOutput.d.ts +61 -0
- package/dist/components/tools/ToolOutput.d.ts.map +1 -0
- package/dist/components/tools/ToolOutput.js +45 -0
- package/dist/components/tools/ToolOutput.js.map +1 -0
- package/dist/components/tools/ToolRecord.d.ts +58 -0
- package/dist/components/tools/ToolRecord.d.ts.map +1 -0
- package/dist/components/tools/ToolRecord.js +79 -0
- package/dist/components/tools/ToolRecord.js.map +1 -0
- package/dist/components/tools/shared.d.ts +93 -0
- package/dist/components/tools/shared.d.ts.map +1 -0
- package/dist/components/tools/shared.js +160 -0
- package/dist/components/tools/shared.js.map +1 -0
- package/dist/components/workspace/ActivityLedger.d.ts +44 -0
- package/dist/components/workspace/ActivityLedger.d.ts.map +1 -0
- package/dist/components/workspace/ActivityLedger.js +63 -0
- package/dist/components/workspace/ActivityLedger.js.map +1 -0
- package/dist/components/workspace/CompactionNotice.d.ts +63 -0
- package/dist/components/workspace/CompactionNotice.d.ts.map +1 -0
- package/dist/components/workspace/CompactionNotice.js +36 -0
- package/dist/components/workspace/CompactionNotice.js.map +1 -0
- package/dist/components/workspace/ContextUsage.d.ts +50 -0
- package/dist/components/workspace/ContextUsage.d.ts.map +1 -0
- package/dist/components/workspace/ContextUsage.js +106 -0
- package/dist/components/workspace/ContextUsage.js.map +1 -0
- package/dist/components/workspace/PersistentTerminal.d.ts +86 -0
- package/dist/components/workspace/PersistentTerminal.d.ts.map +1 -0
- package/dist/components/workspace/PersistentTerminal.js +155 -0
- package/dist/components/workspace/PersistentTerminal.js.map +1 -0
- package/dist/components/workspace/PinnedSummary.d.ts +43 -0
- package/dist/components/workspace/PinnedSummary.d.ts.map +1 -0
- package/dist/components/workspace/PinnedSummary.js +33 -0
- package/dist/components/workspace/PinnedSummary.js.map +1 -0
- package/dist/components/workspace/RunOverview.d.ts +29 -0
- package/dist/components/workspace/RunOverview.d.ts.map +1 -0
- package/dist/components/workspace/RunOverview.js +20 -0
- package/dist/components/workspace/RunOverview.js.map +1 -0
- package/dist/components/workspace/RunSummary.d.ts +35 -0
- package/dist/components/workspace/RunSummary.d.ts.map +1 -0
- package/dist/components/workspace/RunSummary.js +46 -0
- package/dist/components/workspace/RunSummary.js.map +1 -0
- package/dist/components/workspace/SubAgentCard.d.ts +64 -0
- package/dist/components/workspace/SubAgentCard.d.ts.map +1 -0
- package/dist/components/workspace/SubAgentCard.js +78 -0
- package/dist/components/workspace/SubAgentCard.js.map +1 -0
- package/dist/components/workspace/TerminalRow.d.ts +61 -0
- package/dist/components/workspace/TerminalRow.d.ts.map +1 -0
- package/dist/components/workspace/TerminalRow.js +65 -0
- package/dist/components/workspace/TerminalRow.js.map +1 -0
- package/dist/components/workspace/shared.d.ts +26 -0
- package/dist/components/workspace/shared.d.ts.map +1 -0
- package/dist/components/workspace/shared.js +41 -0
- package/dist/components/workspace/shared.js.map +1 -0
- package/dist/index.d.ts +136 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/motion/agent-motion.d.ts +62 -0
- package/dist/motion/agent-motion.d.ts.map +1 -0
- package/dist/motion/agent-motion.js +61 -0
- package/dist/motion/agent-motion.js.map +1 -0
- package/dist/primitives/AgentSpark.d.ts +17 -0
- package/dist/primitives/AgentSpark.d.ts.map +1 -0
- package/dist/primitives/AgentSpark.js +11 -0
- package/dist/primitives/AgentSpark.js.map +1 -0
- package/dist/primitives/AgentStatus.d.ts +32 -0
- package/dist/primitives/AgentStatus.d.ts.map +1 -0
- package/dist/primitives/AgentStatus.js +13 -0
- package/dist/primitives/AgentStatus.js.map +1 -0
- package/dist/primitives/StatusGlyph.d.ts +16 -0
- package/dist/primitives/StatusGlyph.d.ts.map +1 -0
- package/dist/primitives/StatusGlyph.js +31 -0
- package/dist/primitives/StatusGlyph.js.map +1 -0
- package/dist/primitives/icons.d.ts +13 -0
- package/dist/primitives/icons.d.ts.map +1 -0
- package/dist/primitives/icons.js +55 -0
- package/dist/primitives/icons.js.map +1 -0
- package/dist/provider/AgentMessages.d.ts +61 -0
- package/dist/provider/AgentMessages.d.ts.map +1 -0
- package/dist/provider/AgentMessages.js +81 -0
- package/dist/provider/AgentMessages.js.map +1 -0
- package/dist/provider/messages/composer.d.ts +112 -0
- package/dist/provider/messages/composer.d.ts.map +1 -0
- package/dist/provider/messages/composer.js +165 -0
- package/dist/provider/messages/composer.js.map +1 -0
- package/dist/provider/messages/intervention.d.ts +136 -0
- package/dist/provider/messages/intervention.d.ts.map +1 -0
- package/dist/provider/messages/intervention.js +321 -0
- package/dist/provider/messages/intervention.js.map +1 -0
- package/dist/provider/messages/message.d.ts +119 -0
- package/dist/provider/messages/message.d.ts.map +1 -0
- package/dist/provider/messages/message.js +224 -0
- package/dist/provider/messages/message.js.map +1 -0
- package/dist/provider/messages/shell.d.ts +70 -0
- package/dist/provider/messages/shell.d.ts.map +1 -0
- package/dist/provider/messages/shell.js +109 -0
- package/dist/provider/messages/shell.js.map +1 -0
- package/dist/provider/messages/status.d.ts +21 -0
- package/dist/provider/messages/status.d.ts.map +1 -0
- package/dist/provider/messages/status.js +195 -0
- package/dist/provider/messages/status.js.map +1 -0
- package/dist/provider/messages/tools.d.ts +217 -0
- package/dist/provider/messages/tools.d.ts.map +1 -0
- package/dist/provider/messages/tools.js +496 -0
- package/dist/provider/messages/tools.js.map +1 -0
- package/dist/provider/messages/workspace.d.ts +187 -0
- package/dist/provider/messages/workspace.d.ts.map +1 -0
- package/dist/provider/messages/workspace.js +333 -0
- package/dist/provider/messages/workspace.js.map +1 -0
- package/dist/styles/artifact.css +564 -0
- package/dist/styles/base.css +220 -0
- package/dist/styles/composer.css +1001 -0
- package/dist/styles/conversation.css +275 -0
- package/dist/styles/intervention.css +929 -0
- package/dist/styles/message.css +917 -0
- package/dist/styles/process.css +207 -0
- package/dist/styles/shell.css +453 -0
- package/dist/styles/tools.css +929 -0
- package/dist/styles/workspace.css +1297 -0
- package/dist/styles/wpi-adoption.css +24 -0
- package/dist/utils/cx.d.ts +3 -0
- package/dist/utils/cx.d.ts.map +1 -0
- package/dist/utils/cx.js +5 -0
- package/dist/utils/cx.js.map +1 -0
- package/package.json +64 -3
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { CitationView, PinnedSummaryView } from '@wzrhine/agent-core';
|
|
3
|
+
import type { HeadingLevel, WorkspaceMessagesProp } from './shared.js';
|
|
4
|
+
export type PinnedSummaryProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
|
|
5
|
+
summary: PinnedSummaryView;
|
|
6
|
+
/** Body expanded (controlled). */
|
|
7
|
+
expanded?: boolean;
|
|
8
|
+
defaultExpanded?: boolean;
|
|
9
|
+
onExpandedChange?: (expanded: boolean) => void;
|
|
10
|
+
/** Pin state; the pin toggle is drawn only with `onPinChange`. */
|
|
11
|
+
pinned?: boolean;
|
|
12
|
+
onPinChange?: (pinned: boolean) => void;
|
|
13
|
+
/** Opens a source. Without it sources are listed as text. */
|
|
14
|
+
onOpenSource?: (citation: CitationView) => void;
|
|
15
|
+
/** Markdown renderer for the body; default is plain text with kept line breaks. */
|
|
16
|
+
renderMarkdown?: (source: string) => React.ReactNode;
|
|
17
|
+
headingLevel?: HeadingLevel;
|
|
18
|
+
messages?: WorkspaceMessagesProp;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* PinnedSummary (atlas 28): read-only card with the important context of a conversation. The body
|
|
22
|
+
* sits in a Collapsible (CSS height transition, interruptible, instant under reduced motion).
|
|
23
|
+
* Content updates never replay an entrance; `updating` shows a small Spinner with 「正在更新」,
|
|
24
|
+
* `stale` a warning sentence, `missing` an empty sentence. Unavailable sources stay listed but
|
|
25
|
+
* disabled, with the reason as visible text.
|
|
26
|
+
*/
|
|
27
|
+
export declare const PinnedSummary: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children"> & {
|
|
28
|
+
summary: PinnedSummaryView;
|
|
29
|
+
/** Body expanded (controlled). */
|
|
30
|
+
expanded?: boolean;
|
|
31
|
+
defaultExpanded?: boolean;
|
|
32
|
+
onExpandedChange?: (expanded: boolean) => void;
|
|
33
|
+
/** Pin state; the pin toggle is drawn only with `onPinChange`. */
|
|
34
|
+
pinned?: boolean;
|
|
35
|
+
onPinChange?: (pinned: boolean) => void;
|
|
36
|
+
/** Opens a source. Without it sources are listed as text. */
|
|
37
|
+
onOpenSource?: (citation: CitationView) => void;
|
|
38
|
+
/** Markdown renderer for the body; default is plain text with kept line breaks. */
|
|
39
|
+
renderMarkdown?: (source: string) => React.ReactNode;
|
|
40
|
+
headingLevel?: HeadingLevel;
|
|
41
|
+
messages?: WorkspaceMessagesProp;
|
|
42
|
+
} & React.RefAttributes<HTMLElement>>;
|
|
43
|
+
//# sourceMappingURL=PinnedSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PinnedSummary.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/PinnedSummary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK3E,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACrF,OAAO,EAAE,iBAAiB,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,6DAA6D;IAC7D,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD,mFAAmF;IACnF,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IACrD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;aAvBf,iBAAiB;IAC1B,kCAAkC;eACvB,OAAO;sBACA,OAAO;uBACN,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI;IAC9C,kEAAkE;aACzD,OAAO;kBACF,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI;IACvC,6DAA6D;mBAC9C,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI;IAC/C,mFAAmF;qBAClE,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS;mBACrC,YAAY;eAChB,qBAAqB;qCA4GhC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Collapsible, IconButton, Spinner } from '@wzrhine/react';
|
|
5
|
+
import { useAgentFormat } from '../../provider/AgentMessages.js';
|
|
6
|
+
import { AgentIcon } from '../../primitives/icons.js';
|
|
7
|
+
import { cx } from '../../utils/cx.js';
|
|
8
|
+
import { Heading, useWorkspaceMessages } from './shared.js';
|
|
9
|
+
/**
|
|
10
|
+
* PinnedSummary (atlas 28): read-only card with the important context of a conversation. The body
|
|
11
|
+
* sits in a Collapsible (CSS height transition, interruptible, instant under reduced motion).
|
|
12
|
+
* Content updates never replay an entrance; `updating` shows a small Spinner with 「正在更新」,
|
|
13
|
+
* `stale` a warning sentence, `missing` an empty sentence. Unavailable sources stay listed but
|
|
14
|
+
* disabled, with the reason as visible text.
|
|
15
|
+
*/
|
|
16
|
+
export const PinnedSummary = React.forwardRef(function PinnedSummary({ summary, expanded, defaultExpanded = true, onExpandedChange, pinned, onPinChange, onOpenSource, renderMarkdown, headingLevel = 3, messages: override, className, ...rest }, ref) {
|
|
17
|
+
const m = useWorkspaceMessages(override);
|
|
18
|
+
const format = useAgentFormat();
|
|
19
|
+
const id = React.useId();
|
|
20
|
+
const titleId = `${id}-title`;
|
|
21
|
+
const sources = summary.sources ?? [];
|
|
22
|
+
return (_jsxs("section", { ...rest, ref: ref, className: cx('rl-agent-summary', className), "aria-labelledby": titleId, "data-status": summary.status, children: [_jsxs("header", { className: "rl-agent-summary__header", children: [_jsx(AgentIcon, { name: "pin", className: "rl-agent-summary__icon" }), _jsx(Heading, { level: headingLevel, id: titleId, className: "rl-agent-summary__title", children: summary.title }), onPinChange && (_jsx(IconButton, { size: "sm", variant: "ghost", icon: _jsx(AgentIcon, { name: "pin" }), label: m.summaryPin, pressed: Boolean(pinned), onClick: () => onPinChange(!pinned) }))] }), _jsxs("p", { className: "rl-agent-summary__state", role: "status", children: [summary.status === 'updating' && (_jsxs(_Fragment, { children: [_jsx(Spinner, { size: "sm" }), _jsx("span", { children: m.summaryStatus.updating })] })), summary.status === 'stale' && (_jsxs("span", { className: "rl-agent-summary__stale", children: [_jsx(AgentIcon, { name: "warning" }), m.summaryStatus.stale] }))] }), summary.status === 'missing' && !summary.body ? (_jsx("p", { className: "rl-agent-summary__missing", children: m.summaryStatus.missing })) : (_jsxs(Collapsible, { className: "rl-agent-summary__disclosure", open: expanded, defaultOpen: expanded === undefined ? defaultExpanded : undefined, onOpenChange: onExpandedChange, trigger: _jsx("span", { children: m.summaryToggle }), children: [_jsx("div", { className: "rl-agent-summary__body", children: renderMarkdown ? renderMarkdown(summary.body) : _jsx("p", { className: "rl-agent-summary__text", children: summary.body }) }), summary.tags && summary.tags.length > 0 && (_jsx("ul", { className: "rl-agent-summary__tags", "aria-label": m.summaryTags, children: summary.tags.map((tag) => (_jsx("li", { className: "rl-agent-summary__tag", children: tag }, tag))) })), sources.length > 0 && (_jsxs("div", { className: "rl-agent-summary__sources", children: [_jsx("p", { className: "rl-agent-summary__sources-title", id: `${id}-sources`, children: m.summarySources(sources.length) }), _jsx("ul", { className: "rl-agent-summary__source-list", "aria-labelledby": `${id}-sources`, children: sources.map((source) => (_jsx("li", { children: _jsx(SourceButton, { source: source, onOpenSource: onOpenSource, m: m }) }, source.id))) })] }))] })), summary.updatedAt && (_jsx("p", { className: "rl-agent-summary__updated", children: _jsx("time", { dateTime: summary.updatedAt, children: m.summaryUpdatedAt(format.time(summary.updatedAt)) }) }))] }));
|
|
23
|
+
});
|
|
24
|
+
function SourceButton({ source, onOpenSource, m }) {
|
|
25
|
+
const reasonId = React.useId();
|
|
26
|
+
const content = (_jsxs(_Fragment, { children: [_jsxs("span", { className: "rl-agent-summary__source-index", children: ["[", source.index, "]"] }), _jsx("span", { className: "rl-agent-summary__source-title", children: source.title })] }));
|
|
27
|
+
const reason = source.unavailable ? (_jsx("span", { id: reasonId, className: "rl-agent-summary__source-reason", children: source.reason ?? m.summarySourceUnavailable })) : null;
|
|
28
|
+
if (!onOpenSource) {
|
|
29
|
+
return (_jsxs("span", { className: "rl-agent-summary__source", "data-unavailable": source.unavailable || undefined, title: source.locator, children: [content, reason] }));
|
|
30
|
+
}
|
|
31
|
+
return (_jsxs("span", { className: "rl-agent-summary__source-row", children: [_jsx("button", { type: "button", className: "rl-agent-summary__source", disabled: source.unavailable, "aria-label": m.summaryOpenSource(source.title), "aria-describedby": source.unavailable ? reasonId : undefined, title: source.locator, "data-unavailable": source.unavailable || undefined, onClick: () => onOpenSource(source), children: content }), reason] }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=PinnedSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PinnedSummary.js","sourceRoot":"","sources":["../../../src/components/workspace/PinnedSummary.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { SubagentView } from '@wzrhine/agent-core';
|
|
3
|
+
import type { WorkspaceMessagesProp } from './shared.js';
|
|
4
|
+
export interface RunOverviewFact {
|
|
5
|
+
label: React.ReactNode;
|
|
6
|
+
value: React.ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export interface RunOverviewSection {
|
|
9
|
+
id: string;
|
|
10
|
+
title: React.ReactNode;
|
|
11
|
+
content: React.ReactNode;
|
|
12
|
+
defaultOpen?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export type RunOverviewProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
|
|
15
|
+
open?: boolean;
|
|
16
|
+
defaultOpen?: boolean;
|
|
17
|
+
onOpenChange?: (open: boolean) => void;
|
|
18
|
+
facts?: readonly RunOverviewFact[];
|
|
19
|
+
sections?: readonly RunOverviewSection[];
|
|
20
|
+
subagents?: readonly SubagentView[];
|
|
21
|
+
terminals?: React.ReactNode;
|
|
22
|
+
onClose?: () => void;
|
|
23
|
+
onReopen?: () => void;
|
|
24
|
+
sectionOpen?: Readonly<Record<string, boolean>>;
|
|
25
|
+
onSectionOpenChange?: (id: string, open: boolean) => void;
|
|
26
|
+
messages?: WorkspaceMessagesProp;
|
|
27
|
+
};
|
|
28
|
+
export declare function RunOverview({ open: openProp, defaultOpen, onOpenChange, facts, sections, subagents, terminals, onClose, onReopen, sectionOpen, onSectionOpenChange, messages: override, className, ...rest }: RunOverviewProps): React.JSX.Element;
|
|
29
|
+
//# sourceMappingURL=RunOverview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunOverview.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/RunOverview.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,WAAW,eAAe;IAAG,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;CAAE;AACpF,MAAM,WAAW,kBAAkB;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAAE;AAC5H,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACnF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACzC,SAAS,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IACpC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChD,mBAAmB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAkB,EAAE,YAAY,EAAE,KAAU,EAAE,QAAa,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,gBAAgB,qBAc/O"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Button, Collapsible } from '@wzrhine/react';
|
|
5
|
+
import { SubAgentList } from './SubAgentCard.js';
|
|
6
|
+
import { cx } from '../../utils/cx.js';
|
|
7
|
+
import { useWorkspaceMessages } from './shared.js';
|
|
8
|
+
export function RunOverview({ open: openProp, defaultOpen = true, onOpenChange, facts = [], sections = [], subagents, terminals, onClose, onReopen, sectionOpen, onSectionOpenChange, messages: override, className, ...rest }) {
|
|
9
|
+
const m = useWorkspaceMessages(override);
|
|
10
|
+
const [inner, setInner] = React.useState(defaultOpen);
|
|
11
|
+
const [innerSections, setInnerSections] = React.useState({});
|
|
12
|
+
const open = openProp ?? inner;
|
|
13
|
+
const setOpen = (next) => { if (openProp === undefined)
|
|
14
|
+
setInner(next); onOpenChange?.(next); };
|
|
15
|
+
if (!open)
|
|
16
|
+
return _jsx("button", { type: "button", className: cx('rl-agent-run-overview__capsule', className), onClick: () => { setOpen(true); onReopen?.(); }, children: m.runOverview.capsule });
|
|
17
|
+
return _jsxs("aside", { ...rest, className: cx('rl-agent-run-overview', className), "aria-label": m.runOverview.label, children: [_jsxs("header", { className: "rl-agent-run-overview__header", children: [_jsx("strong", { children: m.runOverview.label }), onClose && _jsx(Button, { size: "sm", variant: "ghost", onClick: () => { setOpen(false); onClose(); }, children: m.runOverview.close }), !onClose && _jsx(Button, { size: "sm", variant: "ghost", onClick: () => setOpen(false), children: m.runOverview.collapse })] }), facts.length > 0 && _jsx("dl", { className: "rl-agent-run-overview__facts", children: facts.map((fact, index) => _jsxs("div", { children: [_jsx("dt", { children: fact.label }), _jsx("dd", { children: fact.value })] }, index)) }), subagents && _jsx(SubAgentList, { agents: [...subagents], groupBy: "state", groupInherited: true, title: m.runOverview.subagents }), terminals, sections.map((section) => _jsx(Collapsible, { open: sectionOpen?.[section.id] ?? innerSections[section.id] ?? section.defaultOpen ?? true, onOpenChange: (next) => { if (!sectionOpen)
|
|
18
|
+
setInnerSections((old) => ({ ...old, [section.id]: next })); onSectionOpenChange?.(section.id, next); }, trigger: section.title, className: "rl-agent-run-overview__section", children: section.content }, section.id))] });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=RunOverview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunOverview.js","sourceRoot":"","sources":["../../../src/components/workspace/RunOverview.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { AgentActionHandler, RunSummaryView } from '@wzrhine/agent-core';
|
|
3
|
+
import type { HeadingLevel, WorkspaceMessagesProp } from './shared.js';
|
|
4
|
+
export type RunSummaryProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
|
|
5
|
+
run: RunSummaryView;
|
|
6
|
+
onOpenTrace?: () => void;
|
|
7
|
+
onOpenDetails?: () => void;
|
|
8
|
+
/** Retries persisting the result (`persistence: 'failed'`). */
|
|
9
|
+
onRetrySave?: AgentActionHandler;
|
|
10
|
+
/** Opens one artifact from the mini list. */
|
|
11
|
+
onOpenArtifact?: (id: string) => void;
|
|
12
|
+
headingLevel?: HeadingLevel;
|
|
13
|
+
messages?: WorkspaceMessagesProp;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* RunSummary (atlas 36): outcome of one run. Run success and persistence are separate facts: a
|
|
17
|
+
* completed run whose result is still saving shows both (「已完成」 + 「结果保存中」), a failed save
|
|
18
|
+
* offers 「重试保存」. `sideEffects` adds a sentence asking the user to check external state.
|
|
19
|
+
* Token counts carry their completeness label.
|
|
20
|
+
*
|
|
21
|
+
* Motion: when the status settles while mounted, the frame colour transitions once (`fast`,
|
|
22
|
+
* CSS); nothing loops. Reduced motion → the colour changes directly.
|
|
23
|
+
*/
|
|
24
|
+
export declare const RunSummary: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children"> & {
|
|
25
|
+
run: RunSummaryView;
|
|
26
|
+
onOpenTrace?: () => void;
|
|
27
|
+
onOpenDetails?: () => void;
|
|
28
|
+
/** Retries persisting the result (`persistence: 'failed'`). */
|
|
29
|
+
onRetrySave?: AgentActionHandler;
|
|
30
|
+
/** Opens one artifact from the mini list. */
|
|
31
|
+
onOpenArtifact?: (id: string) => void;
|
|
32
|
+
headingLevel?: HeadingLevel;
|
|
33
|
+
messages?: WorkspaceMessagesProp;
|
|
34
|
+
} & React.RefAttributes<HTMLElement>>;
|
|
35
|
+
//# sourceMappingURL=RunSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunSummary.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/RunSummary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAc,MAAM,qBAAqB,CAAC;AAM1F,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IAClF,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,6CAA6C;IAC7C,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAYF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU;SA9BhB,cAAc;kBACL,MAAM,IAAI;oBACR,MAAM,IAAI;IAC1B,+DAA+D;kBACjD,kBAAkB;IAChC,6CAA6C;qBAC5B,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI;mBACtB,YAAY;eAChB,qBAAqB;qCA+IhC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Button } from '@wzrhine/react';
|
|
5
|
+
import { runStatusMeta } from '@wzrhine/agent-core';
|
|
6
|
+
import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
|
|
7
|
+
import { AgentStatus, statusProps } from '../../primitives/AgentStatus.js';
|
|
8
|
+
import { AgentIcon } from '../../primitives/icons.js';
|
|
9
|
+
import { cx } from '../../utils/cx.js';
|
|
10
|
+
import { completenessTag, Heading, useWorkspaceMessages } from './shared.js';
|
|
11
|
+
const partialMeta = { glyph: 'unknown', tone: 'warning', active: false, settled: true };
|
|
12
|
+
const savingMeta = { glyph: 'saving', tone: 'info', active: true, settled: false };
|
|
13
|
+
const persistenceMeta = {
|
|
14
|
+
saved: { glyph: 'done', tone: 'success', active: false, settled: true },
|
|
15
|
+
saving: savingMeta,
|
|
16
|
+
failed: { glyph: 'failed', tone: 'danger', active: false, settled: true },
|
|
17
|
+
unknown: { glyph: 'unknown', tone: 'warning', active: false, settled: false },
|
|
18
|
+
};
|
|
19
|
+
const artifactTone = { generating: 'info', partial: 'warning', saved: 'success', failed: 'danger', unavailable: 'neutral', stale: 'warning' };
|
|
20
|
+
/**
|
|
21
|
+
* RunSummary (atlas 36): outcome of one run. Run success and persistence are separate facts: a
|
|
22
|
+
* completed run whose result is still saving shows both (「已完成」 + 「结果保存中」), a failed save
|
|
23
|
+
* offers 「重试保存」. `sideEffects` adds a sentence asking the user to check external state.
|
|
24
|
+
* Token counts carry their completeness label.
|
|
25
|
+
*
|
|
26
|
+
* Motion: when the status settles while mounted, the frame colour transitions once (`fast`,
|
|
27
|
+
* CSS); nothing loops. Reduced motion → the colour changes directly.
|
|
28
|
+
*/
|
|
29
|
+
export const RunSummary = React.forwardRef(function RunSummary({ run, onOpenTrace, onOpenDetails, onRetrySave, onOpenArtifact, headingLevel = 3, messages: override, className, ...rest }, ref) {
|
|
30
|
+
const m = useWorkspaceMessages(override);
|
|
31
|
+
const status = useAgentMessages().status;
|
|
32
|
+
const format = useAgentFormat();
|
|
33
|
+
const id = React.useId();
|
|
34
|
+
const titleId = `${id}-title`;
|
|
35
|
+
const outcome = run.status === 'partial'
|
|
36
|
+
? statusProps(partialMeta, m.runPartial)
|
|
37
|
+
: run.status === 'saving'
|
|
38
|
+
? statusProps(savingMeta, m.runSaving)
|
|
39
|
+
: statusProps(runStatusMeta[run.status], status.run[run.status]);
|
|
40
|
+
// `status: 'saving'` already says it; don't repeat the persistence pill.
|
|
41
|
+
const persistence = run.persistence && run.persistence !== 'saved' && !(run.status === 'saving' && run.persistence === 'saving') ? run.persistence : undefined;
|
|
42
|
+
const tag = run.usage ? completenessTag(run.usage.completeness, status.completeness) : undefined;
|
|
43
|
+
const settled = run.status === 'completed' || run.status === 'failed' || run.status === 'cancelled' || run.status === 'interrupted' || run.status === 'partial';
|
|
44
|
+
return (_jsxs("section", { ...rest, ref: ref, className: cx('rl-agent-run-summary', className), "aria-labelledby": titleId, "data-status": run.status, "data-tone": outcome.tone, "data-settled": settled || undefined, children: [_jsxs("header", { className: "rl-agent-run-summary__header", children: [_jsx(Heading, { level: headingLevel, id: titleId, className: "rl-agent-run-summary__title", children: run.title ?? m.runTitle }), _jsxs("span", { role: "status", className: "rl-agent-run-summary__outcome", children: [_jsx(AgentStatus, { ...outcome, size: "md" }), persistence && _jsx(AgentStatus, { ...statusProps(persistenceMeta[persistence], m.runPersistence[persistence]) })] })] }), _jsxs("dl", { className: "rl-agent-run-summary__metrics", "aria-label": m.runMetrics, children: [run.elapsedMs !== undefined && (_jsxs("div", { children: [_jsx("dt", { children: m.runElapsed }), _jsx("dd", { children: format.duration(run.elapsedMs) })] })), run.toolCount !== undefined && (_jsxs("div", { children: [_jsx("dt", { children: m.runTools }), _jsx("dd", { children: m.runToolCount(run.toolCount) })] })), run.failedTools !== undefined && run.failedTools > 0 && (_jsxs("div", { "data-tone": "danger", children: [_jsx("dt", { children: m.runFailedTools }), _jsx("dd", { children: m.runToolCount(run.failedTools) })] })), run.usage && (_jsxs("div", { children: [_jsx("dt", { children: m.runTokens }), _jsxs("dd", { children: [run.usage.tokens !== undefined && run.usage.completeness !== 'unknown' ? format.compact(run.usage.tokens) : status.completeness.unknown, tag && run.usage.completeness !== 'unknown' && _jsx("span", { className: "rl-agent-run-summary__tag", children: tag })] })] }))] }), run.artifacts && run.artifacts.length > 0 && (_jsxs("div", { className: "rl-agent-run-summary__artifacts", children: [_jsx("p", { className: "rl-agent-run-summary__label", id: `${id}-artifacts`, children: m.runArtifacts }), _jsx("ul", { "aria-labelledby": `${id}-artifacts`, children: run.artifacts.map((artifact) => (_jsxs("li", { className: "rl-agent-run-summary__artifact", children: [onOpenArtifact && artifact.status !== 'unavailable' ? (_jsx("button", { type: "button", className: "rl-agent-run-summary__artifact-title", title: artifact.title, onClick: () => onOpenArtifact(artifact.id), children: artifact.title })) : (_jsx("span", { className: "rl-agent-run-summary__artifact-title", title: artifact.title, children: artifact.title })), _jsx("span", { className: "rl-agent-run-summary__artifact-status", "data-tone": artifactTone[artifact.status], children: m.artifactStatus[artifact.status] })] }, artifact.id))) })] })), run.sideEffects && (_jsxs("p", { className: "rl-agent-run-summary__notice", "data-tone": "warning", children: [_jsx(AgentIcon, { name: "warning" }), m.runSideEffects] })), (onOpenTrace || onOpenDetails || (run.persistence === 'failed' && onRetrySave)) && (_jsxs("div", { className: "rl-agent-run-summary__actions", children: [run.persistence === 'failed' && onRetrySave && (_jsx(Button, { size: "sm", variant: "primary", iconStart: _jsx(AgentIcon, { name: "retry" }), onClick: () => void onRetrySave(), children: m.runRetrySave })), onOpenTrace && (_jsx(Button, { size: "sm", variant: "secondary", iconStart: _jsx(AgentIcon, { name: "list" }), onClick: onOpenTrace, children: m.runOpenTrace })), onOpenDetails && (_jsx(Button, { size: "sm", variant: "ghost", onClick: onOpenDetails, children: m.runOpenDetails }))] }))] }));
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=RunSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunSummary.js","sourceRoot":"","sources":["../../../src/components/workspace/RunSummary.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAe7E,MAAM,WAAW,GAAe,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpG,MAAM,UAAU,GAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC/F,MAAM,eAAe,GAAmE;IACtF,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;IACvE,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;IACzE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;CAC9E,CAAC;AACF,MAAM,YAAY,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAW,CAAC;AAEvJ;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAA+B,SAAS,UAAU,CAC1F,EAAE,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAC1H,GAAG;IAEH,MAAM,CAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC;IACzC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,CAAC;IAE9B,MAAM,OAAO,GACX,GAAG,CAAC,MAAM,KAAK,SAAS;QACtB,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC;QACxC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ;YACvB,CAAC,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC;YACtC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,yEAAyE;IACzE,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/J,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC;IAEhK,OAAO,CACL,sBACM,IAAI,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC,qBAC/B,OAAO,iBACX,GAAG,CAAC,MAAM,eACZ,OAAO,CAAC,IAAI,kBACT,OAAO,IAAI,SAAS,aAElC,kBAAQ,SAAS,EAAC,8BAA8B,aAC9C,KAAC,OAAO,IAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,6BAA6B,YAC/E,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,GAChB,EACV,gBAAM,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,+BAA+B,aAC3D,KAAC,WAAW,OAAK,OAAO,EAAE,IAAI,EAAC,IAAI,GAAG,EACrC,WAAW,IAAI,KAAC,WAAW,OAAK,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,GAAI,IACxG,IACA,EACT,cAAI,SAAS,EAAC,+BAA+B,gBAAa,CAAC,CAAC,UAAU,aACnE,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,CAC9B,0BACE,uBAAK,CAAC,CAAC,UAAU,GAAM,EACvB,uBAAK,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,GAAM,IACrC,CACP,EACA,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,CAC9B,0BACE,uBAAK,CAAC,CAAC,QAAQ,GAAM,EACrB,uBAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,GAAM,IACpC,CACP,EACA,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,CACvD,4BAAe,QAAQ,aACrB,uBAAK,CAAC,CAAC,cAAc,GAAM,EAC3B,uBAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,GAAM,IACtC,CACP,EACA,GAAG,CAAC,KAAK,IAAI,CACZ,0BACE,uBAAK,CAAC,CAAC,SAAS,GAAM,EACtB,yBACG,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EACvI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,eAAM,SAAS,EAAC,2BAA2B,YAAE,GAAG,GAAQ,IACrG,IACD,CACP,IACE,EACJ,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAC5C,eAAK,SAAS,EAAC,iCAAiC,aAC9C,YAAG,SAAS,EAAC,6BAA6B,EAAC,EAAE,EAAE,GAAG,EAAE,YAAY,YAC7D,CAAC,CAAC,YAAY,GACb,EACJ,gCAAqB,GAAG,EAAE,YAAY,YACnC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC/B,cAAsB,SAAS,EAAC,gCAAgC,aAC7D,cAAc,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,CACrD,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,sCAAsC,EAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,YACrI,QAAQ,CAAC,KAAK,GACR,CACV,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,sCAAsC,EAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,YACzE,QAAQ,CAAC,KAAK,GACV,CACR,EACD,eAAM,SAAS,EAAC,uCAAuC,eAAY,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,YAC7F,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,GAC7B,KAZA,QAAQ,CAAC,EAAE,CAaf,CACN,CAAC,GACC,IACD,CACP,EACA,GAAG,CAAC,WAAW,IAAI,CAClB,aAAG,SAAS,EAAC,8BAA8B,eAAW,SAAS,aAC7D,KAAC,SAAS,IAAC,IAAI,EAAC,SAAS,GAAG,EAC3B,CAAC,CAAC,cAAc,IACf,CACL,EACA,CAAC,WAAW,IAAI,aAAa,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,CAAC,IAAI,CAClF,eAAK,SAAS,EAAC,+BAA+B,aAC3C,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,WAAW,IAAI,CAC9C,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,OAAO,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,WAAW,EAAE,YACzG,CAAC,CAAC,YAAY,GACR,CACV,EACA,WAAW,IAAI,CACd,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,SAAS,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,MAAM,GAAG,EAAE,OAAO,EAAE,WAAW,YAC7F,CAAC,CAAC,YAAY,GACR,CACV,EACA,aAAa,IAAI,CAChB,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAE,aAAa,YACrD,CAAC,CAAC,cAAc,GACV,CACV,IACG,CACP,IACO,CACX,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { SparkPhase, SubagentView } from '@wzrhine/agent-core';
|
|
3
|
+
import type { HeadingLevel, WorkspaceMessagesProp } from './shared.js';
|
|
4
|
+
/** AgentSpark phase for a sub-agent, or `undefined` when nothing is in progress. */
|
|
5
|
+
export declare function subagentSparkPhase(agent: Pick<SubagentView, 'status' | 'phase'>): SparkPhase | undefined;
|
|
6
|
+
export type SubAgentCardProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
|
|
7
|
+
agent: SubagentView;
|
|
8
|
+
/** Opens the sub-task; draws 「查看子任务」. Not drawn for inherited records. */
|
|
9
|
+
onOpen?: (id: string) => void;
|
|
10
|
+
/** Opens the read-only snapshot of an inherited record; draws 「查看快照」. */
|
|
11
|
+
onOpenSnapshot?: (id: string) => void;
|
|
12
|
+
headingLevel?: HeadingLevel;
|
|
13
|
+
/** Animate the spark (default). `false` forces the static frame, e.g. in long lists. */
|
|
14
|
+
animate?: boolean;
|
|
15
|
+
messages?: WorkspaceMessagesProp;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* SubAgentCard (atlas 24): one child agent tracked separately from its parent. Usage is shown as
|
|
19
|
+
* a number with a completeness label (「部分用量」); no progress bar is derived from the status.
|
|
20
|
+
* `needs-attention` / `waiting-user` get a warning frame plus a sentence, never colour alone.
|
|
21
|
+
*
|
|
22
|
+
* `agent.inherited` marks a record taken over from an earlier run / parent: a 「继承的子任务记录」
|
|
23
|
+
* badge, no attention prompt and no live actions; only `onOpenSnapshot` (「查看快照」) is offered.
|
|
24
|
+
*
|
|
25
|
+
* Accessibility: an `<article>` with a heading (the name); the open action is a separate button
|
|
26
|
+
* inside, so Tab moves card by card through their buttons. Motion: AgentSpark only while active
|
|
27
|
+
* (shared lifecycle, static under reduced motion); no auto-scroll of the parent.
|
|
28
|
+
*/
|
|
29
|
+
export declare const SubAgentCard: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children"> & {
|
|
30
|
+
agent: SubagentView;
|
|
31
|
+
/** Opens the sub-task; draws 「查看子任务」. Not drawn for inherited records. */
|
|
32
|
+
onOpen?: (id: string) => void;
|
|
33
|
+
/** Opens the read-only snapshot of an inherited record; draws 「查看快照」. */
|
|
34
|
+
onOpenSnapshot?: (id: string) => void;
|
|
35
|
+
headingLevel?: HeadingLevel;
|
|
36
|
+
/** Animate the spark (default). `false` forces the static frame, e.g. in long lists. */
|
|
37
|
+
animate?: boolean;
|
|
38
|
+
messages?: WorkspaceMessagesProp;
|
|
39
|
+
} & React.RefAttributes<HTMLElement>>;
|
|
40
|
+
export type SubAgentListProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
|
|
41
|
+
agents: SubagentView[];
|
|
42
|
+
onOpen?: (id: string) => void;
|
|
43
|
+
onOpenSnapshot?: (id: string) => void;
|
|
44
|
+
/** Put inherited records under their own 「继承的子任务记录」 heading after the live ones. */
|
|
45
|
+
groupInherited?: boolean;
|
|
46
|
+
/** Level of each card heading; the list heading (`title`) is one level above. */
|
|
47
|
+
headingLevel?: HeadingLevel;
|
|
48
|
+
/** Visible list heading; omitted → the list is named by `aria-label` only. */
|
|
49
|
+
title?: React.ReactNode;
|
|
50
|
+
animate?: boolean;
|
|
51
|
+
messages?: WorkspaceMessagesProp;
|
|
52
|
+
groupBy?: 'none' | 'state';
|
|
53
|
+
variant?: 'card' | 'row';
|
|
54
|
+
disabled?: boolean;
|
|
55
|
+
empty?: React.ReactNode;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Several sub-agents as a list of cards. Duplicate ids are dropped (first wins); order is the
|
|
59
|
+
* given order. Each card keeps its own heading so screen-reader users can jump between them.
|
|
60
|
+
* `groupInherited` moves inherited records into a second list under its own heading (one level
|
|
61
|
+
* above the cards); the given order is kept inside each group.
|
|
62
|
+
*/
|
|
63
|
+
export declare function SubAgentList({ agents, onOpen, onOpenSnapshot, groupInherited, headingLevel, title, animate, messages: override, groupBy, variant, disabled, empty, className, ...rest }: SubAgentListProps): React.JSX.Element;
|
|
64
|
+
//# sourceMappingURL=SubAgentCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubAgentCard.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/SubAgentCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,UAAU,EAAkB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOpF,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,UAAU,GAAG,SAAS,CAYxG;AAID,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACpF,KAAK,EAAE,YAAY,CAAC;IACpB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,yEAAyE;IACzE,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY;WAvBhB,YAAY;IACnB,0EAA0E;aACjE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI;IAC7B,yEAAyE;qBACxD,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI;mBACtB,YAAY;IAC3B,wFAAwF;cAC9E,OAAO;eACN,qBAAqB;qCAuGhC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACpF,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,oFAAoF;IACpF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iFAAiF;IACjF,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,MAAM,EACN,cAAc,EACd,cAAsB,EACtB,YAAgB,EAChB,KAAK,EACL,OAAO,EACP,QAAQ,EAAE,QAAQ,EAClB,OAA2C,EAC3C,OAAgB,EAChB,QAAgB,EAChB,KAAK,EACL,SAAS,EACT,GAAG,IAAI,EACR,EAAE,iBAAiB,qBAgDnB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Button } from '@wzrhine/react';
|
|
5
|
+
import { sparkPhase, subagentStatusMeta } from '@wzrhine/agent-core';
|
|
6
|
+
import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
|
|
7
|
+
import { AgentSpark } from '../../primitives/AgentSpark.js';
|
|
8
|
+
import { AgentStatus, statusProps } from '../../primitives/AgentStatus.js';
|
|
9
|
+
import { AgentIcon } from '../../primitives/icons.js';
|
|
10
|
+
import { cx } from '../../utils/cx.js';
|
|
11
|
+
import { Heading, useWorkspaceMessages } from './shared.js';
|
|
12
|
+
/** AgentSpark phase for a sub-agent, or `undefined` when nothing is in progress. */
|
|
13
|
+
export function subagentSparkPhase(agent) {
|
|
14
|
+
switch (agent.status) {
|
|
15
|
+
case 'running':
|
|
16
|
+
return sparkPhase('running', agent.phase);
|
|
17
|
+
case 'preparing':
|
|
18
|
+
case 'queued':
|
|
19
|
+
return 'responding';
|
|
20
|
+
case 'waiting-children':
|
|
21
|
+
return 'waiting';
|
|
22
|
+
default:
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const ATTENTION = ['needs-attention', 'waiting-user'];
|
|
27
|
+
/**
|
|
28
|
+
* SubAgentCard (atlas 24): one child agent tracked separately from its parent. Usage is shown as
|
|
29
|
+
* a number with a completeness label (「部分用量」); no progress bar is derived from the status.
|
|
30
|
+
* `needs-attention` / `waiting-user` get a warning frame plus a sentence, never colour alone.
|
|
31
|
+
*
|
|
32
|
+
* `agent.inherited` marks a record taken over from an earlier run / parent: a 「继承的子任务记录」
|
|
33
|
+
* badge, no attention prompt and no live actions; only `onOpenSnapshot` (「查看快照」) is offered.
|
|
34
|
+
*
|
|
35
|
+
* Accessibility: an `<article>` with a heading (the name); the open action is a separate button
|
|
36
|
+
* inside, so Tab moves card by card through their buttons. Motion: AgentSpark only while active
|
|
37
|
+
* (shared lifecycle, static under reduced motion); no auto-scroll of the parent.
|
|
38
|
+
*/
|
|
39
|
+
export const SubAgentCard = React.forwardRef(function SubAgentCard({ agent, onOpen, onOpenSnapshot, headingLevel = 3, animate = true, messages: override, className, ...rest }, ref) {
|
|
40
|
+
const m = useWorkspaceMessages(override);
|
|
41
|
+
const status = useAgentMessages().status;
|
|
42
|
+
const format = useAgentFormat();
|
|
43
|
+
const id = React.useId();
|
|
44
|
+
const nameId = `${id}-name`;
|
|
45
|
+
const meta = subagentStatusMeta[agent.status];
|
|
46
|
+
const inherited = Boolean(agent.inherited);
|
|
47
|
+
const spark = inherited ? undefined : subagentSparkPhase(agent);
|
|
48
|
+
const attention = !inherited && (ATTENTION.includes(agent.status) || (agent.pendingInput ?? 0) > 0);
|
|
49
|
+
const label = agent.status === 'running' && agent.phase ? status.phase[agent.phase] : status.subagent[agent.status];
|
|
50
|
+
const parent = agent.parentLabel ?? (agent.parentId ? m.subagentParent(agent.parentId) : undefined);
|
|
51
|
+
const usage = agent.usage;
|
|
52
|
+
return (_jsxs("article", { ...rest, ref: ref, className: cx('rl-agent-subagent', className), "aria-labelledby": nameId, "data-status": agent.status, "data-attention": attention || undefined, "data-inherited": inherited || undefined, children: [_jsxs("header", { className: "rl-agent-subagent__header", children: [spark ? _jsx(AgentSpark, { phase: spark, animate: animate }) : _jsx(AgentIcon, { name: "agent", className: "rl-agent-subagent__icon" }), _jsx(Heading, { level: headingLevel, id: nameId, className: "rl-agent-subagent__name", children: agent.name }), _jsx(AgentStatus, { className: "rl-agent-subagent__status", ...statusProps(meta, label), active: false, meta: agent.elapsedMs !== undefined ? format.duration(agent.elapsedMs) : undefined })] }), inherited && (_jsxs("p", { className: "rl-agent-subagent__inherited", children: [_jsx(AgentIcon, { name: "history" }), _jsx("span", { children: m.subagentInherited }), _jsx("span", { className: "rl-agent-subagent__tag", children: m.terminalReadOnlyShort })] })), parent && _jsx("p", { className: "rl-agent-subagent__parent", children: parent }), _jsx("p", { className: "rl-agent-subagent__task", children: agent.task }), (usage || agent.resultAvailable) && (_jsxs("p", { className: "rl-agent-subagent__facts", children: [usage && (_jsxs("span", { className: "rl-agent-subagent__usage", children: [usage.tokens !== undefined && usage.completeness !== 'unknown' ? m.subagentTokens(format.compact(usage.tokens)) : m.subagentUsageUnknown, usage.completeness === 'partial' && _jsx("span", { className: "rl-agent-subagent__tag", children: m.subagentPartialUsage }), usage.completeness === 'estimated' && _jsx("span", { className: "rl-agent-subagent__tag", children: m.subagentEstimatedUsage })] })), agent.resultAvailable && (_jsxs("span", { className: "rl-agent-subagent__result", children: [_jsx(AgentIcon, { name: "check" }), m.subagentResult] }))] })), attention && (_jsxs("p", { className: "rl-agent-subagent__attention", children: [_jsx(AgentIcon, { name: "warning" }), _jsx("span", { children: m.subagentAttention }), (agent.pendingInput ?? 0) > 0 && _jsx("span", { className: "rl-agent-subagent__badge", children: m.subagentPendingInput(agent.pendingInput) })] })), !inherited && onOpen && (_jsx("div", { className: "rl-agent-subagent__actions", children: _jsx(Button, { size: "sm", variant: attention ? 'primary' : 'secondary', "aria-label": m.subagentOpenNamed(agent.name), onClick: () => onOpen(agent.id), children: m.subagentOpen }) })), inherited && onOpenSnapshot && (_jsx("div", { className: "rl-agent-subagent__actions", children: _jsx(Button, { size: "sm", variant: "secondary", iconStart: _jsx(AgentIcon, { name: "history" }), "aria-label": m.subagentOpenSnapshotNamed(agent.name), onClick: () => onOpenSnapshot(agent.id), children: m.subagentOpenSnapshot }) }))] }));
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* Several sub-agents as a list of cards. Duplicate ids are dropped (first wins); order is the
|
|
56
|
+
* given order. Each card keeps its own heading so screen-reader users can jump between them.
|
|
57
|
+
* `groupInherited` moves inherited records into a second list under its own heading (one level
|
|
58
|
+
* above the cards); the given order is kept inside each group.
|
|
59
|
+
*/
|
|
60
|
+
export function SubAgentList({ agents, onOpen, onOpenSnapshot, groupInherited = false, headingLevel = 3, title, animate, messages: override, groupBy = groupInherited ? 'state' : 'none', variant = 'card', disabled = false, empty, className, ...rest }) {
|
|
61
|
+
const m = useWorkspaceMessages(override);
|
|
62
|
+
const id = React.useId();
|
|
63
|
+
const unique = React.useMemo(() => {
|
|
64
|
+
const seen = new Set();
|
|
65
|
+
return agents.filter((a) => (seen.has(a.id) ? false : (seen.add(a.id), true)));
|
|
66
|
+
}, [agents]);
|
|
67
|
+
const titleLevel = Math.max(2, headingLevel - 1);
|
|
68
|
+
const live = groupBy === 'state' || groupInherited ? unique.filter((a) => !a.inherited) : unique;
|
|
69
|
+
const inheritedGroup = groupBy === 'state' || groupInherited ? unique.filter((a) => a.inherited) : [];
|
|
70
|
+
const stateGroups = groupBy === 'state' ? [
|
|
71
|
+
['active', live.filter((a) => ['queued', 'preparing', 'running', 'waiting-children'].includes(a.status))],
|
|
72
|
+
['attention', live.filter((a) => ['waiting-user', 'needs-attention'].includes(a.status))],
|
|
73
|
+
['completed', live.filter((a) => !['queued', 'preparing', 'running', 'waiting-children', 'waiting-user', 'needs-attention'].includes(a.status))],
|
|
74
|
+
].filter(([, items]) => items.length > 0) : [];
|
|
75
|
+
const renderItems = (items) => (_jsx("ul", { className: "rl-agent-subagent-list__items", children: items.map((agent) => (_jsx("li", { children: _jsx(SubAgentCard, { agent: agent, onOpen: disabled ? undefined : onOpen, onOpenSnapshot: disabled ? undefined : onOpenSnapshot, headingLevel: headingLevel, animate: animate, messages: override, "data-variant": variant, "aria-disabled": disabled || undefined }) }, agent.id))) }));
|
|
76
|
+
return (_jsxs("section", { ...rest, className: cx('rl-agent-subagent-list', className), "aria-labelledby": title != null ? `${id}-title` : undefined, "aria-label": title == null ? m.subagentList : undefined, children: [title != null && (_jsx(Heading, { level: titleLevel, id: `${id}-title`, className: "rl-agent-subagent-list__title", children: title })), unique.length === 0 ? (_jsx("p", { className: "rl-agent-subagent-list__empty", children: empty ?? m.subagentEmpty })) : (_jsxs(_Fragment, { children: [groupBy === 'state' ? stateGroups.map(([key, items]) => _jsxs("div", { className: "rl-agent-subagent-list__group", role: "group", "aria-label": m.subagentGroup[key], children: [_jsx(Heading, { level: titleLevel, className: "rl-agent-subagent-list__group-title", children: m.subagentGroup[key] }), renderItems(items)] }, key)) : live.length > 0 && renderItems(live), inheritedGroup.length > 0 && (_jsxs("div", { className: "rl-agent-subagent-list__group", role: "group", "aria-labelledby": `${id}-inherited`, children: [_jsx(Heading, { level: titleLevel, id: `${id}-inherited`, className: "rl-agent-subagent-list__group-title", children: m.subagentInheritedGroup }), renderItems(inheritedGroup)] }))] }))] }));
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=SubAgentCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubAgentCard.js","sourceRoot":"","sources":["../../../src/components/workspace/SubAgentCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { AgentActionHandler, TerminalView } from '@wzrhine/agent-core';
|
|
3
|
+
import type { WorkspaceMessagesProp } from './shared.js';
|
|
4
|
+
import type { TerminalGroupKey } from '../../provider/messages/workspace.js';
|
|
5
|
+
export type TerminalRowProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
6
|
+
terminal: TerminalView;
|
|
7
|
+
/** Opens the terminal (row button). Without it the row is plain text. */
|
|
8
|
+
onOpen?: (terminal: TerminalView) => void;
|
|
9
|
+
/** Stop action; a separate button, drawn only when the terminal is stoppable. */
|
|
10
|
+
onStop?: AgentActionHandler<[terminal: TerminalView, context: {
|
|
11
|
+
actionId: string;
|
|
12
|
+
}]>;
|
|
13
|
+
/** Marks the open terminal (`aria-current`). */
|
|
14
|
+
current?: boolean;
|
|
15
|
+
messages?: WorkspaceMessagesProp;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* TerminalRow (atlas 23): sidebar summary of one terminal. Opening and stopping are two separate
|
|
19
|
+
* buttons (never nested). The long cwd is truncated visually, the full path is in the title and
|
|
20
|
+
* in the open button's description. Read-only rows say so in text, not only by missing controls.
|
|
21
|
+
* Motion: none beyond the colour transitions of the buttons.
|
|
22
|
+
*/
|
|
23
|
+
export declare const TerminalRow: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & {
|
|
24
|
+
terminal: TerminalView;
|
|
25
|
+
/** Opens the terminal (row button). Without it the row is plain text. */
|
|
26
|
+
onOpen?: (terminal: TerminalView) => void;
|
|
27
|
+
/** Stop action; a separate button, drawn only when the terminal is stoppable. */
|
|
28
|
+
onStop?: AgentActionHandler<[terminal: TerminalView, context: {
|
|
29
|
+
actionId: string;
|
|
30
|
+
}]>;
|
|
31
|
+
/** Marks the open terminal (`aria-current`). */
|
|
32
|
+
current?: boolean;
|
|
33
|
+
messages?: WorkspaceMessagesProp;
|
|
34
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
35
|
+
/** Which TerminalList group a terminal belongs to. Inherited first, then status. */
|
|
36
|
+
export declare function terminalGroup(terminal: TerminalView): TerminalGroupKey;
|
|
37
|
+
export type TerminalListProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
38
|
+
terminals: TerminalView[];
|
|
39
|
+
currentId?: string;
|
|
40
|
+
onOpen?: TerminalRowProps['onOpen'];
|
|
41
|
+
onStop?: TerminalRowProps['onStop'];
|
|
42
|
+
/** `false` hides the 「加载更多终端」 button even when `onLoadMore` is given. */
|
|
43
|
+
hasMore?: boolean;
|
|
44
|
+
onLoadMore?: () => void;
|
|
45
|
+
/** Groups collapsed on first render (uncontrolled per group). Default: inherited. */
|
|
46
|
+
defaultCollapsed?: TerminalGroupKey[];
|
|
47
|
+
messages?: WorkspaceMessagesProp;
|
|
48
|
+
loading?: boolean;
|
|
49
|
+
error?: React.ReactNode;
|
|
50
|
+
onRetry?: () => void;
|
|
51
|
+
empty?: React.ReactNode;
|
|
52
|
+
loadingMore?: boolean;
|
|
53
|
+
total?: number;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Terminals grouped into 未关闭 / 状态待确认 / 已结束 / 继承记录, each a Collapsible with a count.
|
|
57
|
+
* Within a group the given order is kept: a status flicker moves a row between groups at most,
|
|
58
|
+
* never reshuffles a group. Empty groups are not drawn.
|
|
59
|
+
*/
|
|
60
|
+
export declare function TerminalList({ terminals, currentId, onOpen, onStop, hasMore, onLoadMore, defaultCollapsed, messages: override, loading, error, onRetry, empty, loadingMore, total, className, ...rest }: TerminalListProps): React.JSX.Element;
|
|
61
|
+
//# sourceMappingURL=TerminalRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalRow.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/TerminalRow.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAO5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAAG;IACtF,QAAQ,EAAE,YAAY,CAAC;IACvB,yEAAyE;IACzE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,iFAAiF;IACjF,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACrF,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW;cAhBZ,YAAY;IACtB,yEAAyE;aAChE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI;IACzC,iFAAiF;aACxE,kBAAkB,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,gDAAgD;cACtC,OAAO;eACN,qBAAqB;wCAuFhC,CAAC;AAEH,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB,CAKtE;AAID,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAAG;IACvF,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACtC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,gBAAgC,EAChC,QAAQ,EAAE,QAAQ,EAClB,OAAe,EACf,KAAK,EACL,OAAO,EACP,KAAK,EACL,WAAmB,EACnB,KAAK,EACL,SAAS,EACT,GAAG,IAAI,EACR,EAAE,iBAAiB,qBAiDnB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Button, Collapsible, IconButton } from '@wzrhine/react';
|
|
5
|
+
import { terminalStatusMeta } from '@wzrhine/agent-core';
|
|
6
|
+
import { useAgentMessages } from '../../provider/AgentMessages.js';
|
|
7
|
+
import { AgentStatus, statusProps } from '../../primitives/AgentStatus.js';
|
|
8
|
+
import { AgentIcon } from '../../primitives/icons.js';
|
|
9
|
+
import { cx } from '../../utils/cx.js';
|
|
10
|
+
import { isTerminalReadOnly } from './PersistentTerminal.js';
|
|
11
|
+
import { useWorkspaceMessages } from './shared.js';
|
|
12
|
+
/**
|
|
13
|
+
* TerminalRow (atlas 23): sidebar summary of one terminal. Opening and stopping are two separate
|
|
14
|
+
* buttons (never nested). The long cwd is truncated visually, the full path is in the title and
|
|
15
|
+
* in the open button's description. Read-only rows say so in text, not only by missing controls.
|
|
16
|
+
* Motion: none beyond the colour transitions of the buttons.
|
|
17
|
+
*/
|
|
18
|
+
export const TerminalRow = React.forwardRef(function TerminalRow({ terminal, onOpen, onStop, current, messages: override, className, ...rest }, ref) {
|
|
19
|
+
const m = useWorkspaceMessages(override);
|
|
20
|
+
const status = useAgentMessages().status;
|
|
21
|
+
const id = React.useId();
|
|
22
|
+
const descId = `${id}-desc`;
|
|
23
|
+
const readOnly = isTerminalReadOnly(terminal);
|
|
24
|
+
const meta = terminalStatusMeta[terminal.status];
|
|
25
|
+
const receiptPending = terminal.receipt?.status === 'submitting' || terminal.receipt?.status === 'accepted';
|
|
26
|
+
const receiptUnknown = terminal.receipt?.status === 'unknown' && terminal.receipt.retryable !== false;
|
|
27
|
+
const receiptUnretryable = terminal.receipt?.status === 'unknown' && terminal.receipt.retryable === false;
|
|
28
|
+
const canStop = Boolean(onStop) && Boolean(terminal.stoppable) && !readOnly && !meta.settled && !receiptPending && !receiptUnretryable && terminal.status !== 'stop-pending' && terminal.status !== 'closing';
|
|
29
|
+
const name = (_jsxs(_Fragment, { children: [_jsx("span", { className: "rl-agent-terminal-row__name", children: terminal.name }), terminal.backend && _jsx("span", { className: "rl-agent-terminal-row__backend", children: m.terminalBackend[terminal.backend] })] }));
|
|
30
|
+
const description = (_jsxs("span", { id: descId, className: "rl-agent-terminal-row__detail", children: [terminal.lastCommand && (_jsxs("span", { className: "rl-agent-terminal-row__command", title: terminal.lastCommand, children: [_jsxs("span", { className: "rl-agent-sr", children: [m.terminalLastCommand, " "] }), terminal.lastCommand] })), terminal.cwd && (_jsxs("span", { className: "rl-agent-terminal-row__cwd", title: terminal.cwd, children: [_jsxs("span", { className: "rl-agent-sr", children: [m.terminalCwd, " "] }), terminal.cwd] })), terminal.source && _jsx("span", { className: "rl-agent-terminal-row__source", children: terminal.source }), terminal.activity && _jsx("span", { className: "rl-agent-terminal-row__activity", children: terminal.activity }), terminal.tail && _jsx("span", { className: "rl-agent-terminal-row__tail", title: terminal.tail, children: terminal.tail }), terminal.receipt && terminal.receipt.status !== 'idle' && _jsxs("span", { className: "rl-agent-terminal-row__receipt", "data-status": terminal.receipt.status, children: [status.action[terminal.receipt.status], terminal.receipt.reason ? ` · ${terminal.receipt.reason}` : ''] }), _jsxs("span", { className: "rl-agent-terminal-row__meta", children: [terminal.calls !== undefined && _jsx("span", { children: m.terminalCalls(terminal.calls) }), readOnly && _jsx("span", { className: "rl-agent-terminal-row__readonly", children: m.terminalReadOnlyDescription })] })] }));
|
|
31
|
+
return (_jsxs("div", { ...rest, ref: ref, className: cx('rl-agent-terminal-row', className), "data-status": terminal.status, "data-readonly": readOnly || undefined, "data-current": current || undefined, children: [_jsxs("div", { className: "rl-agent-terminal-row__main", children: [onOpen ? (_jsx("button", { type: "button", className: "rl-agent-terminal-row__open", "aria-label": m.terminalOpen(terminal.name), "aria-describedby": descId, "aria-current": current ? 'true' : undefined, onClick: () => onOpen(terminal), children: name })) : (_jsx("span", { className: "rl-agent-terminal-row__title", children: name })), _jsx(AgentStatus, { className: "rl-agent-terminal-row__status", ...statusProps(meta, status.terminal[terminal.status]) }), canStop && (_jsx(IconButton, { size: "sm", variant: "ghost", icon: _jsx(AgentIcon, { name: receiptUnknown ? 'retry' : 'stop' }), label: receiptUnknown ? m.terminalRetryStop : m.terminalStop(terminal.name), onClick: () => void onStop(terminal, { actionId: receiptUnknown ? (terminal.receipt?.actionId ?? `${terminal.id}:stop`) : `${terminal.id}:stop` }) }))] }), description] }));
|
|
32
|
+
});
|
|
33
|
+
/** Which TerminalList group a terminal belongs to. Inherited first, then status. */
|
|
34
|
+
export function terminalGroup(terminal) {
|
|
35
|
+
if (isTerminalReadOnly(terminal))
|
|
36
|
+
return 'inherited';
|
|
37
|
+
if (terminal.status === 'unknown')
|
|
38
|
+
return 'unknown';
|
|
39
|
+
if (terminal.status === 'ended' || terminal.status === 'failed')
|
|
40
|
+
return 'ended';
|
|
41
|
+
return 'open';
|
|
42
|
+
}
|
|
43
|
+
const GROUP_ORDER = ['open', 'unknown', 'ended', 'inherited'];
|
|
44
|
+
/**
|
|
45
|
+
* Terminals grouped into 未关闭 / 状态待确认 / 已结束 / 继承记录, each a Collapsible with a count.
|
|
46
|
+
* Within a group the given order is kept: a status flicker moves a row between groups at most,
|
|
47
|
+
* never reshuffles a group. Empty groups are not drawn.
|
|
48
|
+
*/
|
|
49
|
+
export function TerminalList({ terminals, currentId, onOpen, onStop, hasMore, onLoadMore, defaultCollapsed = ['inherited'], messages: override, loading = false, error, onRetry, empty, loadingMore = false, total, className, ...rest }) {
|
|
50
|
+
const m = useWorkspaceMessages(override);
|
|
51
|
+
const groups = React.useMemo(() => {
|
|
52
|
+
const map = new Map();
|
|
53
|
+
const seen = new Set();
|
|
54
|
+
for (const terminal of terminals) {
|
|
55
|
+
if (seen.has(terminal.id))
|
|
56
|
+
continue;
|
|
57
|
+
seen.add(terminal.id);
|
|
58
|
+
const key = terminalGroup(terminal);
|
|
59
|
+
map.set(key, [...(map.get(key) ?? []), terminal]);
|
|
60
|
+
}
|
|
61
|
+
return GROUP_ORDER.filter((key) => map.has(key)).map((key) => ({ key, items: map.get(key) }));
|
|
62
|
+
}, [terminals]);
|
|
63
|
+
return (_jsxs("div", { ...rest, className: cx('rl-agent-terminal-list', className), role: "group", "aria-label": m.terminalList, children: [loading && _jsx("p", { role: "status", children: m.terminalLoading }), error && _jsxs("p", { role: "alert", children: [error, onRetry && _jsx(Button, { size: "sm", variant: "secondary", onClick: onRetry, children: m.retry })] }), !loading && !error && total !== undefined && _jsxs("p", { className: "rl-agent-terminal-list__total", "aria-live": "polite", children: [terminals.length, " / ", total] }), !loading && !error && groups.length === 0 && _jsx("p", { className: "rl-agent-terminal-list__empty", children: empty ?? m.terminalEmpty }), groups.map(({ key, items }) => (_jsx(Collapsible, { className: "rl-agent-terminal-list__group", "data-group": key, defaultOpen: !defaultCollapsed.includes(key), trigger: _jsxs(_Fragment, { children: [_jsx("span", { className: "rl-agent-terminal-list__label", children: m.terminalGroup[key] }), _jsx("span", { className: "rl-agent-terminal-list__count", children: items.length })] }), children: _jsx("ul", { className: "rl-agent-terminal-list__items", children: items.map((terminal) => (_jsx("li", { children: _jsx(TerminalRow, { terminal: terminal, onOpen: onOpen, onStop: onStop, current: terminal.id === currentId, messages: override }) }, terminal.id))) }) }, key))), hasMore !== false && onLoadMore && (_jsx(Button, { size: "sm", variant: "ghost", loading: loadingMore, className: "rl-agent-terminal-list__more", onClick: onLoadMore, children: total !== undefined ? `${m.terminalLoadMore} (${total})` : m.terminalLoadMore }))] }));
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=TerminalRow.js.map
|