@wzrhine/agent 0.0.0-stage → 0.1.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 +23 -0
- package/LICENSE +21 -0
- package/README.md +29 -3
- package/dist/agent.css +15 -0
- package/dist/components/artifact/ArtifactCard.d.ts +56 -0
- package/dist/components/artifact/ArtifactCard.d.ts.map +1 -0
- package/dist/components/artifact/ArtifactCard.js +78 -0
- package/dist/components/artifact/ArtifactCard.js.map +1 -0
- package/dist/components/artifact/FilePreview.d.ts +117 -0
- package/dist/components/artifact/FilePreview.d.ts.map +1 -0
- package/dist/components/artifact/FilePreview.js +207 -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 +56 -0
- package/dist/components/composer/AttachmentList.js.map +1 -0
- package/dist/components/composer/Composer.d.ts +113 -0
- package/dist/components/composer/Composer.d.ts.map +1 -0
- package/dist/components/composer/Composer.js +327 -0
- package/dist/components/composer/Composer.js.map +1 -0
- package/dist/components/composer/ComposerInput.d.ts +101 -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 +55 -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 +40 -0
- package/dist/components/composer/ModelPicker.d.ts.map +1 -0
- package/dist/components/composer/ModelPicker.js +115 -0
- package/dist/components/composer/ModelPicker.js.map +1 -0
- package/dist/components/composer/PermissionPicker.d.ts +31 -0
- package/dist/components/composer/PermissionPicker.d.ts.map +1 -0
- package/dist/components/composer/PermissionPicker.js +43 -0
- package/dist/components/composer/PermissionPicker.js.map +1 -0
- package/dist/components/composer/SendStopButton.d.ts +71 -0
- package/dist/components/composer/SendStopButton.d.ts.map +1 -0
- package/dist/components/composer/SendStopButton.js +87 -0
- package/dist/components/composer/SendStopButton.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 +88 -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 +30 -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 +60 -0
- package/dist/components/intervention/QuestionnaireCard.d.ts.map +1 -0
- package/dist/components/intervention/QuestionnaireCard.js +322 -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 +29 -0
- package/dist/components/intervention/questionnaire-answers.d.ts.map +1 -0
- package/dist/components/intervention/questionnaire-answers.js +81 -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 +34 -0
- package/dist/components/message/CitationChip.d.ts.map +1 -0
- package/dist/components/message/CitationChip.js +30 -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 +63 -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 +100 -0
- package/dist/components/message/MessageList.d.ts.map +1 -0
- package/dist/components/message/MessageList.js +266 -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 +146 -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 +18 -0
- package/dist/components/message/use-copy.d.ts.map +1 -0
- package/dist/components/message/use-copy.js +65 -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 +38 -0
- package/dist/components/shell/AgentHeader.js.map +1 -0
- package/dist/components/shell/AgentShell.d.ts +138 -0
- package/dist/components/shell/AgentShell.d.ts.map +1 -0
- package/dist/components/shell/AgentShell.js +206 -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 +50 -0
- package/dist/components/shell/ResizeHandle.d.ts.map +1 -0
- package/dist/components/shell/ResizeHandle.js +84 -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 +106 -0
- package/dist/components/tools/ToolDetails.d.ts.map +1 -0
- package/dist/components/tools/ToolDetails.js +247 -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 +54 -0
- package/dist/components/tools/ToolRecord.d.ts.map +1 -0
- package/dist/components/tools/ToolRecord.js +78 -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 +44 -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/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 +60 -0
- package/dist/components/workspace/SubAgentCard.d.ts.map +1 -0
- package/dist/components/workspace/SubAgentCard.js +73 -0
- package/dist/components/workspace/SubAgentCard.js.map +1 -0
- package/dist/components/workspace/TerminalRow.d.ts +51 -0
- package/dist/components/workspace/TerminalRow.d.ts.map +1 -0
- package/dist/components/workspace/TerminalRow.js +62 -0
- package/dist/components/workspace/TerminalRow.js.map +1 -0
- package/dist/components/workspace/shared.d.ts +22 -0
- package/dist/components/workspace/shared.d.ts.map +1 -0
- package/dist/components/workspace/shared.js +36 -0
- package/dist/components/workspace/shared.js.map +1 -0
- package/dist/index.d.ts +130 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -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 +10 -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 +7 -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 +51 -0
- package/dist/provider/AgentMessages.d.ts.map +1 -0
- package/dist/provider/AgentMessages.js +77 -0
- package/dist/provider/AgentMessages.js.map +1 -0
- package/dist/provider/messages/composer.d.ts +90 -0
- package/dist/provider/messages/composer.d.ts.map +1 -0
- package/dist/provider/messages/composer.js +155 -0
- package/dist/provider/messages/composer.js.map +1 -0
- package/dist/provider/messages/intervention.d.ts +135 -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 +118 -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 +20 -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 +210 -0
- package/dist/provider/messages/tools.d.ts.map +1 -0
- package/dist/provider/messages/tools.js +482 -0
- package/dist/provider/messages/tools.js.map +1 -0
- package/dist/provider/messages/workspace.d.ts +176 -0
- package/dist/provider/messages/workspace.d.ts.map +1 -0
- package/dist/provider/messages/workspace.js +325 -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 +441 -0
- package/dist/styles/tools.css +929 -0
- package/dist/styles/workspace.css +1294 -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,155 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Button, Input, Tab, TabList, TabPanel, Tabs } from '@wzrhine/react';
|
|
5
|
+
import { terminalStatusMeta } from '@wzrhine/agent-core';
|
|
6
|
+
import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
|
|
7
|
+
import { ChunkPager } from '../tools/ChunkPager.js';
|
|
8
|
+
import { StatusGlyph } from '../../primitives/StatusGlyph.js';
|
|
9
|
+
import { AgentStatus, statusProps } from '../../primitives/AgentStatus.js';
|
|
10
|
+
import { AgentIcon } from '../../primitives/icons.js';
|
|
11
|
+
import { cx } from '../../utils/cx.js';
|
|
12
|
+
import { Heading, useWorkspaceMessages } from './shared.js';
|
|
13
|
+
/** Statuses in which the session accepts input. */
|
|
14
|
+
const INPUT_STATUSES = ['running', 'waiting-input'];
|
|
15
|
+
/** Statuses in which a stop request still makes sense. */
|
|
16
|
+
const STOP_STATUSES = ['opening', 'running', 'waiting-input', 'idle', 'unknown'];
|
|
17
|
+
/** Inherited / read-only terminals are history only: no input, no stop. */
|
|
18
|
+
export function isTerminalReadOnly(terminal) {
|
|
19
|
+
return Boolean(terminal.readOnly || terminal.inherited);
|
|
20
|
+
}
|
|
21
|
+
/** Distance from the bottom (in CSS pixels) that still counts as "following" the output. */
|
|
22
|
+
const FOLLOW_SLACK = 8;
|
|
23
|
+
/**
|
|
24
|
+
* PersistentTerminal (atlas 22): one terminal session with its own lifecycle. A command
|
|
25
|
+
* returning never closes the session (`idle` says so); a stop request shows 「停止尚未确认」 until
|
|
26
|
+
* the adapter confirms it; `unknown` is never shown as ended.
|
|
27
|
+
*
|
|
28
|
+
* Accessibility: the console is `role="log"` with `aria-live="off"`, so streamed chunks are never
|
|
29
|
+
* read out one by one; the session status sits in a polite `role="status"` instead. The console
|
|
30
|
+
* is focusable for keyboard scrolling. The input is a labelled single-line field; Enter sends,
|
|
31
|
+
* except while an IME composition is active.
|
|
32
|
+
*
|
|
33
|
+
* `terminal.newerOutput` (the loaded snapshot is older than the session) adds 「有新输出,读取最新」
|
|
34
|
+
* (`onReadLatest`); `terminal.notes` render as small notes; `terminal.history` is an ordered list
|
|
35
|
+
* 「调用记录」 (command, glyph + status text, exit code, `<time>`) with `onLoadMoreHistory`. With
|
|
36
|
+
* `page` the stored output is read through a `ChunkPager` instead of the live tail.
|
|
37
|
+
*
|
|
38
|
+
* Motion: none. The cursor is a static block; the console follows new output only while the
|
|
39
|
+
* reader is at the bottom, otherwise a 「有新输出」 button appears.
|
|
40
|
+
*/
|
|
41
|
+
export const PersistentTerminal = React.forwardRef(function PersistentTerminal({ terminal, onInput, onStop, onLoadEarlier, onReadLatest, onLoadMoreHistory, page, pager, headingLevel = 3, hideName = false, messages: override, className, ...rest }, ref) {
|
|
42
|
+
const m = useWorkspaceMessages(override);
|
|
43
|
+
const status = useAgentMessages().status;
|
|
44
|
+
const id = React.useId();
|
|
45
|
+
const nameId = `${id}-name`;
|
|
46
|
+
const readOnly = isTerminalReadOnly(terminal);
|
|
47
|
+
const meta = terminalStatusMeta[terminal.status];
|
|
48
|
+
const canInput = Boolean(onInput) && !readOnly && INPUT_STATUSES.includes(terminal.status);
|
|
49
|
+
const canStop = Boolean(onStop) && Boolean(terminal.stoppable) && !readOnly;
|
|
50
|
+
const stopPending = terminal.status === 'stop-pending';
|
|
51
|
+
const settled = terminal.status === 'ended' || terminal.status === 'failed';
|
|
52
|
+
return (_jsxs("section", { ...rest, ref: ref, className: cx('rl-agent-terminal', className), "aria-labelledby": nameId, "data-status": terminal.status, "data-readonly": readOnly || undefined, children: [_jsxs("header", { className: "rl-agent-terminal__header", children: [_jsx(AgentIcon, { name: "terminal", className: "rl-agent-terminal__icon" }), _jsxs("div", { className: "rl-agent-terminal__identity", children: [_jsx(Heading, { level: headingLevel, id: nameId, className: hideName ? 'rl-agent-sr' : 'rl-agent-terminal__name', children: terminal.name }), _jsx("span", { className: "rl-agent-terminal__id", children: terminal.id }), terminal.backend && _jsx("span", { className: "rl-agent-terminal__backend", children: m.terminalBackend[terminal.backend] }), terminal.shell && _jsx("span", { className: "rl-agent-terminal__shell", children: terminal.shell })] }), _jsxs("span", { role: "status", className: "rl-agent-terminal__status", children: [_jsx(AgentStatus, { ...statusProps(meta, status.terminal[terminal.status]) }), settled && terminal.exitCode !== undefined && _jsx("span", { className: "rl-agent-terminal__exit", children: m.terminalExitCode(terminal.exitCode) })] }), canStop && !stopPending && STOP_STATUSES.includes(terminal.status) && (_jsx(Button, { size: "sm", variant: "secondary", className: "rl-agent-terminal__stop", iconStart: _jsx(AgentIcon, { name: "stop" }), "aria-label": m.terminalStop(terminal.name), onClick: () => void onStop(terminal), children: m.terminalStopVisible }))] }), terminal.cwd && (_jsxs("p", { className: "rl-agent-terminal__cwd", title: terminal.cwd, children: [_jsx("span", { className: "rl-agent-terminal__cwd-label", children: m.terminalCwd }), _jsx("span", { className: "rl-agent-terminal__cwd-path", children: terminal.cwd })] })), readOnly && (_jsxs("p", { className: "rl-agent-terminal__notice", "data-tone": "neutral", children: [_jsx(AgentIcon, { name: "history" }), m.terminalReadOnly] })), stopPending && (_jsxs("div", { className: "rl-agent-terminal__notice", "data-tone": "warning", children: [_jsx(AgentIcon, { name: "warning" }), _jsx("span", { children: m.terminalStopPending }), canStop && (_jsx(Button, { size: "sm", variant: "ghost", iconStart: _jsx(AgentIcon, { name: "retry" }), onClick: () => void onStop(terminal), children: m.terminalRetryStop }))] })), terminal.status === 'unknown' && (_jsxs("p", { className: "rl-agent-terminal__notice", "data-tone": "warning", children: [_jsx(AgentIcon, { name: "warning" }), m.terminalUnknownNotice] })), terminal.status === 'idle' && !readOnly && (_jsxs("p", { className: "rl-agent-terminal__notice", "data-tone": "neutral", children: [_jsx(AgentIcon, { name: "info" }), m.terminalIdleNotice] })), terminal.receipt && (terminal.receipt.status === 'rejected' || terminal.receipt.status === 'unknown') && (_jsxs("p", { className: "rl-agent-terminal__notice", "data-tone": terminal.receipt.status === 'rejected' ? 'danger' : 'warning', children: [_jsx(AgentIcon, { name: "warning" }), status.action[terminal.receipt.status], terminal.receipt.reason ? ` · ${terminal.receipt.reason}` : ''] })), terminal.notes && terminal.notes.length > 0 && (_jsx("ul", { className: "rl-agent-terminal__notes", "aria-label": m.terminalNotes, children: terminal.notes.map((note, i) => (_jsxs("li", { className: "rl-agent-terminal__note", children: [_jsx(AgentIcon, { name: "info" }), _jsx("span", { children: note })] }, i))) })), terminal.newerOutput && onReadLatest && (_jsx("div", { className: "rl-agent-terminal__latest", children: _jsx(Button, { size: "sm", variant: "secondary", iconStart: _jsx(AgentIcon, { name: "arrow-down" }), onClick: () => void onReadLatest(terminal), children: m.terminalReadLatest }) })), page ? (_jsx(ChunkPager, { ...pager, className: "rl-agent-terminal__pager", page: page, label: m.terminalOutput(terminal.name), canGoBack: pager?.canGoBack ?? false })) : (_jsx(TerminalConsole, { terminal: terminal, messages: m, onLoadEarlier: onLoadEarlier, showCursor: canInput })), canInput && _jsx(TerminalInput, { terminal: terminal, onInput: onInput, messages: m }), terminal.history && terminal.history.length > 0 && (_jsx(TerminalHistory, { terminal: terminal, onLoadMore: onLoadMoreHistory, messages: m }))] }));
|
|
53
|
+
});
|
|
54
|
+
function TerminalConsole({ terminal, messages: m, onLoadEarlier, showCursor, }) {
|
|
55
|
+
const scrollRef = React.useRef(null);
|
|
56
|
+
const following = React.useRef(true);
|
|
57
|
+
const anchorFromBottom = React.useRef(null);
|
|
58
|
+
const [hasNew, setHasNew] = React.useState(false);
|
|
59
|
+
const output = terminal.output ?? '';
|
|
60
|
+
React.useLayoutEffect(() => {
|
|
61
|
+
const el = scrollRef.current;
|
|
62
|
+
if (!el)
|
|
63
|
+
return;
|
|
64
|
+
if (anchorFromBottom.current !== null) {
|
|
65
|
+
// Older output was prepended: keep the same lines under the reader's eyes.
|
|
66
|
+
el.scrollTop = el.scrollHeight - anchorFromBottom.current;
|
|
67
|
+
anchorFromBottom.current = null;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (following.current)
|
|
71
|
+
el.scrollTop = el.scrollHeight;
|
|
72
|
+
else
|
|
73
|
+
setHasNew(true);
|
|
74
|
+
}, [output]);
|
|
75
|
+
const onScroll = () => {
|
|
76
|
+
const el = scrollRef.current;
|
|
77
|
+
if (!el)
|
|
78
|
+
return;
|
|
79
|
+
const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight <= FOLLOW_SLACK;
|
|
80
|
+
following.current = atBottom;
|
|
81
|
+
if (atBottom)
|
|
82
|
+
setHasNew(false);
|
|
83
|
+
};
|
|
84
|
+
const jumpToLatest = () => {
|
|
85
|
+
const el = scrollRef.current;
|
|
86
|
+
following.current = true;
|
|
87
|
+
setHasNew(false);
|
|
88
|
+
if (el)
|
|
89
|
+
el.scrollTop = el.scrollHeight;
|
|
90
|
+
el?.focus();
|
|
91
|
+
};
|
|
92
|
+
const loadEarlier = () => {
|
|
93
|
+
const el = scrollRef.current;
|
|
94
|
+
if (el)
|
|
95
|
+
anchorFromBottom.current = el.scrollHeight - el.scrollTop;
|
|
96
|
+
void onLoadEarlier?.(terminal);
|
|
97
|
+
};
|
|
98
|
+
return (_jsxs("div", { className: "rl-agent-terminal__console-wrap", children: [(terminal.outputTruncated || terminal.partialCapture) && (_jsxs("div", { className: "rl-agent-terminal__console-meta", children: [terminal.outputTruncated && onLoadEarlier && (_jsx(Button, { size: "sm", variant: "ghost", iconStart: _jsx(AgentIcon, { name: "arrow-up" }), onClick: loadEarlier, children: m.terminalLoadEarlier })), terminal.partialCapture && (_jsxs("span", { className: "rl-agent-terminal__partial", children: [_jsx(AgentIcon, { name: "warning" }), m.terminalPartialCapture] }))] })), _jsx("div", { ref: scrollRef, className: "rl-agent-terminal__console", role: "log", "aria-live": "off", "aria-label": m.terminalOutput(terminal.name), tabIndex: 0, onScroll: onScroll, children: output ? (_jsxs("pre", { className: "rl-agent-terminal__output", children: [output, showCursor && _jsx("span", { className: "rl-agent-terminal__cursor", "aria-hidden": "true" })] })) : (_jsx("p", { className: "rl-agent-terminal__empty", children: m.terminalNoOutput })) }), hasNew && (_jsx(Button, { size: "sm", variant: "secondary", className: "rl-agent-terminal__new", iconStart: _jsx(AgentIcon, { name: "arrow-down" }), onClick: jumpToLatest, children: m.terminalNewOutput }))] }));
|
|
99
|
+
}
|
|
100
|
+
const historyGlyph = {
|
|
101
|
+
running: { glyph: 'active', tone: 'info' },
|
|
102
|
+
returned: { glyph: 'done', tone: 'success' },
|
|
103
|
+
failed: { glyph: 'failed', tone: 'danger' },
|
|
104
|
+
unknown: { glyph: 'unknown', tone: 'warning' },
|
|
105
|
+
};
|
|
106
|
+
function TerminalHistory({ terminal, onLoadMore, messages: m, }) {
|
|
107
|
+
const format = useAgentFormat();
|
|
108
|
+
const id = React.useId();
|
|
109
|
+
const items = terminal.history ?? [];
|
|
110
|
+
return (_jsxs("section", { className: "rl-agent-terminal__history", "aria-labelledby": `${id}-title`, children: [_jsx("p", { id: `${id}-title`, className: "rl-agent-terminal__history-title", children: m.terminalHistory }), onLoadMore && (_jsx(Button, { size: "sm", variant: "ghost", className: "rl-agent-terminal__history-more", iconStart: _jsx(AgentIcon, { name: "arrow-up" }), onClick: () => void onLoadMore(terminal), children: m.terminalHistoryLoadMore })), _jsx("ol", { className: "rl-agent-terminal__history-list", children: items.map((item) => {
|
|
111
|
+
const g = historyGlyph[item.status] ?? historyGlyph.unknown;
|
|
112
|
+
return (_jsxs("li", { className: "rl-agent-terminal__history-item", "data-status": item.status, children: [_jsx("code", { className: "rl-agent-terminal__history-command", title: item.command, children: item.command }), _jsxs("span", { className: "rl-agent-terminal__history-status", "data-tone": g.tone, children: [_jsx(StatusGlyph, { name: g.glyph, tone: g.tone }), _jsx("span", { children: m.terminalHistoryStatus[item.status] ?? m.terminalHistoryStatus.unknown })] }), item.exitCode !== undefined && _jsx("span", { className: "rl-agent-terminal__history-exit", children: m.terminalExitCode(item.exitCode) }), item.at && (_jsx("time", { className: "rl-agent-terminal__history-time", dateTime: item.at, children: format.time(item.at) }))] }, item.id));
|
|
113
|
+
}) })] }));
|
|
114
|
+
}
|
|
115
|
+
function TerminalInput({ terminal, onInput, messages: m, }) {
|
|
116
|
+
const [draft, setDraft] = React.useState('');
|
|
117
|
+
const composing = React.useRef(false);
|
|
118
|
+
const inputId = React.useId();
|
|
119
|
+
const send = () => {
|
|
120
|
+
const text = draft;
|
|
121
|
+
setDraft('');
|
|
122
|
+
void onInput(text, terminal);
|
|
123
|
+
};
|
|
124
|
+
return (_jsxs("form", { className: "rl-agent-terminal__input", onSubmit: (event) => {
|
|
125
|
+
event.preventDefault();
|
|
126
|
+
send();
|
|
127
|
+
}, children: [_jsx("label", { htmlFor: inputId, className: "rl-agent-sr", children: m.terminalInputLabel(terminal.name) }), _jsx("span", { className: "rl-agent-terminal__prompt", "aria-hidden": "true", children: ">" }), _jsx(Input, { id: inputId, size: "sm", mono: true, className: "rl-agent-terminal__field", value: draft, placeholder: m.terminalInputPlaceholder, autoComplete: "off", spellCheck: false, onChange: (event) => setDraft(event.currentTarget.value), onCompositionStart: () => {
|
|
128
|
+
composing.current = true;
|
|
129
|
+
}, onCompositionEnd: () => {
|
|
130
|
+
composing.current = false;
|
|
131
|
+
}, onKeyDown: (event) => {
|
|
132
|
+
if (event.key !== 'Enter')
|
|
133
|
+
return;
|
|
134
|
+
// IME guard (ADR-0011 §8): composition flag, native isComposing and keyCode 229.
|
|
135
|
+
if (composing.current || event.nativeEvent.isComposing || event.keyCode === 229) {
|
|
136
|
+
event.preventDefault();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
event.preventDefault();
|
|
140
|
+
send();
|
|
141
|
+
} }), _jsx(Button, { type: "submit", size: "sm", variant: "secondary", className: "rl-agent-terminal__send", iconStart: _jsx(AgentIcon, { name: "send" }), children: m.terminalSend })] }));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Several terminals as tabs (Tabs from `@wzrhine/react`: roving focus, arrow keys, Home / End).
|
|
145
|
+
* Each tab names the terminal and its status, so the status is readable without opening it.
|
|
146
|
+
*/
|
|
147
|
+
export function TerminalTabs({ terminals, value, defaultValue, onValueChange, onInput, onStop, onLoadEarlier, onReadLatest, onLoadMoreHistory, headingLevel, messages: override, className, ...rest }) {
|
|
148
|
+
const m = useWorkspaceMessages(override);
|
|
149
|
+
const status = useAgentMessages().status;
|
|
150
|
+
if (terminals.length === 0) {
|
|
151
|
+
return (_jsx("p", { ...rest, className: cx('rl-agent-terminal-tabs__empty', className), children: m.terminalEmpty }));
|
|
152
|
+
}
|
|
153
|
+
return (_jsx("div", { ...rest, className: cx('rl-agent-terminal-tabs', className), children: _jsxs(Tabs, { value: value, defaultValue: value === undefined ? (defaultValue ?? terminals[0].id) : undefined, onValueChange: onValueChange, size: "sm", children: [_jsx(TabList, { "aria-label": m.terminalTabs, children: terminals.map((terminal) => (_jsx(Tab, { value: terminal.id, meta: status.terminal[terminal.status], children: terminal.name }, terminal.id))) }), terminals.map((terminal) => (_jsx(TabPanel, { value: terminal.id, className: "rl-agent-terminal-tabs__panel", children: _jsx(PersistentTerminal, { terminal: terminal, onInput: onInput, onStop: onStop, onLoadEarlier: onLoadEarlier, onReadLatest: onReadLatest, onLoadMoreHistory: onLoadMoreHistory, headingLevel: headingLevel, hideName: true, messages: override }) }, terminal.id)))] }) }));
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=PersistentTerminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersistentTerminal.js","sourceRoot":"","sources":["../../../src/components/workspace/PersistentTerminal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,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,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG5D,mDAAmD;AACnD,MAAM,cAAc,GAA4B,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC7E,0DAA0D;AAC1D,MAAM,aAAa,GAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAE1G,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,QAAsB;IACvD,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC1D,CAAC;AAED,4FAA4F;AAC5F,MAAM,YAAY,GAAG,CAAC,CAAC;AAwBvB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,UAAU,CAAuC,SAAS,kBAAkB,CAClH,EACE,QAAQ,EACR,OAAO,EACP,MAAM,EACN,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,IAAI,EACJ,KAAK,EACL,YAAY,GAAG,CAAC,EAChB,QAAQ,GAAG,KAAK,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EACT,GAAG,IAAI,EACR,EACD,GAAG;IAEH,MAAM,CAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,GAAG,EAAE,OAAO,CAAC;IAC5B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5E,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,KAAK,cAAc,CAAC;IACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC;IAE5E,OAAO,CACL,sBACM,IAAI,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,qBAC5B,MAAM,iBACV,QAAQ,CAAC,MAAM,mBACb,QAAQ,IAAI,SAAS,aAEpC,kBAAQ,SAAS,EAAC,2BAA2B,aAC3C,KAAC,SAAS,IAAC,IAAI,EAAC,UAAU,EAAC,SAAS,EAAC,yBAAyB,GAAG,EACjE,eAAK,SAAS,EAAC,6BAA6B,aAC1C,KAAC,OAAO,IAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,yBAAyB,YACtG,QAAQ,CAAC,IAAI,GACN,EACV,eAAM,SAAS,EAAC,uBAAuB,YAAE,QAAQ,CAAC,EAAE,GAAQ,EAC3D,QAAQ,CAAC,OAAO,IAAI,eAAM,SAAS,EAAC,4BAA4B,YAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAQ,EAC7G,QAAQ,CAAC,KAAK,IAAI,eAAM,SAAS,EAAC,0BAA0B,YAAE,QAAQ,CAAC,KAAK,GAAQ,IACjF,EACN,gBAAM,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,2BAA2B,aACvD,KAAC,WAAW,OAAK,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAI,EACvE,OAAO,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,eAAM,SAAS,EAAC,yBAAyB,YAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAQ,IAClI,EACN,OAAO,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CACrE,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,WAAW,EACnB,SAAS,EAAC,yBAAyB,EACnC,SAAS,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,MAAM,GAAG,gBACxB,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EACzC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,MAAO,CAAC,QAAQ,CAAC,YAEpC,CAAC,CAAC,mBAAmB,GACf,CACV,IACM,EACR,QAAQ,CAAC,GAAG,IAAI,CACf,aAAG,SAAS,EAAC,wBAAwB,EAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,aACvD,eAAM,SAAS,EAAC,8BAA8B,YAAE,CAAC,CAAC,WAAW,GAAQ,EACrE,eAAM,SAAS,EAAC,6BAA6B,YAAE,QAAQ,CAAC,GAAG,GAAQ,IACjE,CACL,EACA,QAAQ,IAAI,CACX,aAAG,SAAS,EAAC,2BAA2B,eAAW,SAAS,aAC1D,KAAC,SAAS,IAAC,IAAI,EAAC,SAAS,GAAG,EAC3B,CAAC,CAAC,gBAAgB,IACjB,CACL,EACA,WAAW,IAAI,CACd,eAAK,SAAS,EAAC,2BAA2B,eAAW,SAAS,aAC5D,KAAC,SAAS,IAAC,IAAI,EAAC,SAAS,GAAG,EAC5B,yBAAO,CAAC,CAAC,mBAAmB,GAAQ,EACnC,OAAO,IAAI,CACV,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,OAAO,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,MAAO,CAAC,QAAQ,CAAC,YAC3G,CAAC,CAAC,iBAAiB,GACb,CACV,IACG,CACP,EACA,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,CAChC,aAAG,SAAS,EAAC,2BAA2B,eAAW,SAAS,aAC1D,KAAC,SAAS,IAAC,IAAI,EAAC,SAAS,GAAG,EAC3B,CAAC,CAAC,qBAAqB,IACtB,CACL,EACA,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,QAAQ,IAAI,CAC1C,aAAG,SAAS,EAAC,2BAA2B,eAAW,SAAS,aAC1D,KAAC,SAAS,IAAC,IAAI,EAAC,MAAM,GAAG,EACxB,CAAC,CAAC,kBAAkB,IACnB,CACL,EACA,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,CACxG,aAAG,SAAS,EAAC,2BAA2B,eAAY,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,aAC/G,KAAC,SAAS,IAAC,IAAI,EAAC,SAAS,GAAG,EAC3B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EACtC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAC7D,CACL,EACA,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAC9C,aAAI,SAAS,EAAC,0BAA0B,gBAAa,CAAC,CAAC,aAAa,YACjE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC/B,cAAY,SAAS,EAAC,yBAAyB,aAC7C,KAAC,SAAS,IAAC,IAAI,EAAC,MAAM,GAAG,EACzB,yBAAO,IAAI,GAAQ,KAFZ,CAAC,CAGL,CACN,CAAC,GACC,CACN,EACA,QAAQ,CAAC,WAAW,IAAI,YAAY,IAAI,CACvC,cAAK,SAAS,EAAC,2BAA2B,YACxC,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,SAAS,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,YAAY,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,YAAY,CAAC,QAAQ,CAAC,YACzH,CAAC,CAAC,kBAAkB,GACd,GACL,CACP,EACA,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,UAAU,OAAK,KAAK,EAAE,SAAS,EAAC,0BAA0B,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,IAAI,KAAK,GAAI,CACzJ,CAAC,CAAC,CAAC,CACF,KAAC,eAAe,IAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,GAAI,CACzG,EACA,QAAQ,IAAI,KAAC,aAAa,IAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAQ,EAAE,QAAQ,EAAE,CAAC,GAAI,EACjF,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAClD,KAAC,eAAe,IAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,GAAI,CACpF,IACO,CACX,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,EACvB,QAAQ,EACR,QAAQ,EAAE,CAAC,EACX,aAAa,EACb,UAAU,GAMX;IACC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAgB,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;IAErC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;QACzB,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,IAAI,gBAAgB,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACtC,2EAA2E;YAC3E,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC;YAC1D,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;YAChC,OAAO;QACT,CAAC;QACD,IAAI,SAAS,CAAC,OAAO;YAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;;YACjD,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,IAAI,YAAY,CAAC;QAClF,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC7B,IAAI,QAAQ;YAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC;QAC7B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,IAAI,EAAE;YAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;QACvC,EAAE,EAAE,KAAK,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC;QAC7B,IAAI,EAAE;YAAE,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC;QAClE,KAAK,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,iCAAiC,aAC7C,CAAC,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,cAAc,CAAC,IAAI,CACxD,eAAK,SAAS,EAAC,iCAAiC,aAC7C,QAAQ,CAAC,eAAe,IAAI,aAAa,IAAI,CAC5C,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,UAAU,GAAG,EAAE,OAAO,EAAE,WAAW,YAC7F,CAAC,CAAC,mBAAmB,GACf,CACV,EACA,QAAQ,CAAC,cAAc,IAAI,CAC1B,gBAAM,SAAS,EAAC,4BAA4B,aAC1C,KAAC,SAAS,IAAC,IAAI,EAAC,SAAS,GAAG,EAC3B,CAAC,CAAC,sBAAsB,IACpB,CACR,IACG,CACP,EACD,cACE,GAAG,EAAE,SAAS,EACd,SAAS,EAAC,4BAA4B,EACtC,IAAI,EAAC,KAAK,eACA,KAAK,gBACH,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC3C,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,QAAQ,YAEjB,MAAM,CAAC,CAAC,CAAC,CACR,eAAK,SAAS,EAAC,2BAA2B,aACvC,MAAM,EACN,UAAU,IAAI,eAAM,SAAS,EAAC,2BAA2B,iBAAa,MAAM,GAAG,IAC5E,CACP,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,0BAA0B,YAAE,CAAC,CAAC,gBAAgB,GAAK,CACjE,GACG,EACL,MAAM,IAAI,CACT,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,SAAS,EAAC,wBAAwB,EAAC,SAAS,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,YAAY,GAAG,EAAE,OAAO,EAAE,YAAY,YACvI,CAAC,CAAC,iBAAiB,GACb,CACV,IACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAgH;IAChI,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAC1C,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;IAC5C,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC3C,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;CAC/C,CAAC;AAEF,SAAS,eAAe,CAAC,EACvB,QAAQ,EACR,UAAU,EACV,QAAQ,EAAE,CAAC,GAKZ;IACC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,OAAO,CACL,mBAAS,SAAS,EAAC,4BAA4B,qBAAkB,GAAG,EAAE,QAAQ,aAC5E,YAAG,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAC,kCAAkC,YAC/D,CAAC,CAAC,eAAe,GAChB,EACH,UAAU,IAAI,CACb,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,iCAAiC,EAAC,SAAS,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,UAAU,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,YAC7J,CAAC,CAAC,uBAAuB,GACnB,CACV,EACD,aAAI,SAAS,EAAC,iCAAiC,YAC5C,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBAClB,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC;oBAC5D,OAAO,CACL,cAAkB,SAAS,EAAC,iCAAiC,iBAAc,IAAI,CAAC,MAAM,aACpF,eAAM,SAAS,EAAC,oCAAoC,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,YACrE,IAAI,CAAC,OAAO,GACR,EACP,gBAAM,SAAS,EAAC,mCAAmC,eAAY,CAAC,CAAC,IAAI,aACnE,KAAC,WAAW,IAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,GAAI,EAC5C,yBAAO,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,OAAO,GAAQ,IACjF,EACN,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,eAAM,SAAS,EAAC,iCAAiC,YAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAQ,EAC3H,IAAI,CAAC,EAAE,IAAI,CACV,eAAM,SAAS,EAAC,iCAAiC,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,YAChE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAChB,CACR,KAbM,IAAI,CAAC,EAAE,CAcX,CACN,CAAC;gBACJ,CAAC,CAAC,GACC,IACG,CACX,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,QAAQ,EACR,OAAO,EACP,QAAQ,EAAE,CAAC,GAKZ;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAE9B,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,MAAM,IAAI,GAAG,KAAK,CAAC;QACnB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,KAAK,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,OAAO,CACL,gBACE,SAAS,EAAC,0BAA0B,EACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,EAAE,CAAC;QACT,CAAC,aAED,gBAAO,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,aAAa,YAC7C,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAC9B,EACR,eAAM,SAAS,EAAC,2BAA2B,iBAAa,MAAM,kBAEvD,EACP,KAAC,KAAK,IACJ,EAAE,EAAE,OAAO,EACX,IAAI,EAAC,IAAI,EACT,IAAI,QACJ,SAAS,EAAC,0BAA0B,EACpC,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,CAAC,CAAC,wBAAwB,EACvC,YAAY,EAAC,KAAK,EAClB,UAAU,EAAE,KAAK,EACjB,QAAQ,EAAE,CAAC,KAA0C,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EAC7F,kBAAkB,EAAE,GAAG,EAAE;oBACvB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC3B,CAAC,EACD,gBAAgB,EAAE,GAAG,EAAE;oBACrB,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC5B,CAAC,EACD,SAAS,EAAE,CAAC,KAA4C,EAAE,EAAE;oBAC1D,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;wBAAE,OAAO;oBAClC,iFAAiF;oBACjF,IAAI,SAAS,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;wBAChF,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,OAAO;oBACT,CAAC;oBACD,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,EAAE,CAAC;gBACT,CAAC,GACD,EACF,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,SAAS,EAAC,yBAAyB,EAAC,SAAS,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,MAAM,GAAG,YACzH,CAAC,CAAC,YAAY,GACR,IACJ,CACR,CAAC;AACJ,CAAC;AAiBD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,SAAS,EACT,KAAK,EACL,YAAY,EACZ,aAAa,EACb,OAAO,EACP,MAAM,EACN,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EACT,GAAG,IAAI,EACW;IAClB,MAAM,CAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC;IACzC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CACL,eAAO,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,YACnE,CAAC,CAAC,aAAa,GACd,CACL,CAAC;IACJ,CAAC;IACD,OAAO,CACL,iBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,YAC/D,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAC,IAAI,aAC7I,KAAC,OAAO,kBAAa,CAAC,CAAC,YAAY,YAChC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC3B,KAAC,GAAG,IAAmB,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,YAC9E,QAAQ,CAAC,IAAI,IADN,QAAQ,CAAC,EAAE,CAEf,CACP,CAAC,GACM,EACT,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC3B,KAAC,QAAQ,IAAmB,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAC,+BAA+B,YACvF,KAAC,kBAAkB,IACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,YAAY,EAC1B,QAAQ,QACR,QAAQ,EAAE,QAAQ,GAClB,IAXW,QAAQ,CAAC,EAAE,CAYf,CACZ,CAAC,IACG,GACH,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -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,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":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Several sub-agents as a list of cards. Duplicate ids are dropped (first wins); order is the
|
|
55
|
+
* given order. Each card keeps its own heading so screen-reader users can jump between them.
|
|
56
|
+
* `groupInherited` moves inherited records into a second list under its own heading (one level
|
|
57
|
+
* above the cards); the given order is kept inside each group.
|
|
58
|
+
*/
|
|
59
|
+
export declare function SubAgentList({ agents, onOpen, onOpenSnapshot, groupInherited, headingLevel, title, animate, messages: override, className, ...rest }: SubAgentListProps): React.JSX.Element;
|
|
60
|
+
//# 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;CAClC,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,SAAS,EACT,GAAG,IAAI,EACR,EAAE,iBAAiB,qBA2CnB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
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, 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 = groupInherited ? unique.filter((a) => !a.inherited) : unique;
|
|
69
|
+
const inheritedGroup = groupInherited ? unique.filter((a) => a.inherited) : [];
|
|
70
|
+
const renderItems = (items) => (_jsx("ul", { className: "rl-agent-subagent-list__items", children: items.map((agent) => (_jsx("li", { children: _jsx(SubAgentCard, { agent: agent, onOpen: onOpen, onOpenSnapshot: onOpenSnapshot, headingLevel: headingLevel, animate: animate, messages: override }) }, agent.id))) }));
|
|
71
|
+
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: m.subagentEmpty })) : (_jsxs(_Fragment, { children: [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)] }))] }))] }));
|
|
72
|
+
}
|
|
73
|
+
//# 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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"}
|