@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,44 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { LedgerEventView } from '@wzrhine/agent-core';
|
|
3
|
+
import type { LedgerFilterKey } from '../../provider/messages/workspace.js';
|
|
4
|
+
import type { WorkspaceMessagesProp } from './shared.js';
|
|
5
|
+
/** Events in sequence order, duplicates dropped (first occurrence wins). */
|
|
6
|
+
export declare function orderLedger(events: readonly LedgerEventView[]): LedgerEventView[];
|
|
7
|
+
export type ActivityLedgerProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
|
|
8
|
+
events: LedgerEventView[];
|
|
9
|
+
/** Actor filter (controlled). */
|
|
10
|
+
filter?: LedgerFilterKey;
|
|
11
|
+
defaultFilter?: LedgerFilterKey;
|
|
12
|
+
onFilterChange?: (filter: LedgerFilterKey) => void;
|
|
13
|
+
/** Opens one event; each row title becomes a button. */
|
|
14
|
+
onOpenEvent?: (event: LedgerEventView) => void;
|
|
15
|
+
/** First load in progress (Skeleton rows, `aria-busy`). */
|
|
16
|
+
loading?: boolean;
|
|
17
|
+
/** Show the filter tabs (default true). */
|
|
18
|
+
showFilters?: boolean;
|
|
19
|
+
messages?: WorkspaceMessagesProp;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* ActivityLedger (atlas 33): audit events of agent, tool, system and user in `sequence` order.
|
|
23
|
+
* Filtering hides rows but never reorders them; duplicate ids are dropped. Each row has the
|
|
24
|
+
* actor (icon + text), title, optional detail, a `<time dateTime>` and the outcome as glyph +
|
|
25
|
+
* text. Filter tabs are `@wzrhine/react` Tabs (arrow keys, `aria-selected`).
|
|
26
|
+
*
|
|
27
|
+
* Motion: rows present on first render are static; rows that arrive later enter once with
|
|
28
|
+
* AgentEntrance `row` (4px, fast; reduced → no movement). Nothing replays on filter changes.
|
|
29
|
+
*/
|
|
30
|
+
export declare const ActivityLedger: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children"> & {
|
|
31
|
+
events: LedgerEventView[];
|
|
32
|
+
/** Actor filter (controlled). */
|
|
33
|
+
filter?: LedgerFilterKey;
|
|
34
|
+
defaultFilter?: LedgerFilterKey;
|
|
35
|
+
onFilterChange?: (filter: LedgerFilterKey) => void;
|
|
36
|
+
/** Opens one event; each row title becomes a button. */
|
|
37
|
+
onOpenEvent?: (event: LedgerEventView) => void;
|
|
38
|
+
/** First load in progress (Skeleton rows, `aria-busy`). */
|
|
39
|
+
loading?: boolean;
|
|
40
|
+
/** Show the filter tabs (default true). */
|
|
41
|
+
showFilters?: boolean;
|
|
42
|
+
messages?: WorkspaceMessagesProp;
|
|
43
|
+
} & React.RefAttributes<HTMLElement>>;
|
|
44
|
+
//# sourceMappingURL=ActivityLedger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActivityLedger.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/ActivityLedger.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAA0B,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAOpG,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,sCAAsC,CAAC;AAE9F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAczD,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,eAAe,EAAE,CAKjF;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACtF,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,iCAAiC;IACjC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,wDAAwD;IACxD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;YAvBjB,eAAe,EAAE;IACzB,iCAAiC;aACxB,eAAe;oBACR,eAAe;qBACd,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI;IAClD,wDAAwD;kBAC1C,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI;IAC9C,2DAA2D;cACjD,OAAO;IACjB,2CAA2C;kBAC7B,OAAO;eACV,qBAAqB;qCA8FhC,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Skeleton, Tab, TabList, Tabs } from '@wzrhine/react';
|
|
5
|
+
import { dedupeById } from '@wzrhine/agent-core';
|
|
6
|
+
import { useAgentFormat } from '../../provider/AgentMessages.js';
|
|
7
|
+
import { AgentEntrance } from '../../motion/agent-motion.js';
|
|
8
|
+
import { StatusGlyph } from '../../primitives/StatusGlyph.js';
|
|
9
|
+
import { AgentIcon } from '../../primitives/icons.js';
|
|
10
|
+
import { cx } from '../../utils/cx.js';
|
|
11
|
+
import { useIsNewId, useWorkspaceMessages } from './shared.js';
|
|
12
|
+
const FILTERS = ['all', 'agent', 'tool', 'system', 'user'];
|
|
13
|
+
const actorIcon = { agent: 'agent', tool: 'tool', system: 'info', user: 'at' };
|
|
14
|
+
const outcomeGlyph = {
|
|
15
|
+
info: { glyph: 'idle', tone: 'info' },
|
|
16
|
+
success: { glyph: 'done', tone: 'success' },
|
|
17
|
+
warning: { glyph: 'unknown', tone: 'warning' },
|
|
18
|
+
danger: { glyph: 'failed', tone: 'danger' },
|
|
19
|
+
neutral: { glyph: 'idle', tone: 'neutral' },
|
|
20
|
+
};
|
|
21
|
+
/** Events in sequence order, duplicates dropped (first occurrence wins). */
|
|
22
|
+
export function orderLedger(events) {
|
|
23
|
+
return dedupeById(events)
|
|
24
|
+
.map((event, index) => ({ event, index }))
|
|
25
|
+
.sort((a, b) => a.event.sequence - b.event.sequence || a.index - b.index)
|
|
26
|
+
.map(({ event }) => event);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* ActivityLedger (atlas 33): audit events of agent, tool, system and user in `sequence` order.
|
|
30
|
+
* Filtering hides rows but never reorders them; duplicate ids are dropped. Each row has the
|
|
31
|
+
* actor (icon + text), title, optional detail, a `<time dateTime>` and the outcome as glyph +
|
|
32
|
+
* text. Filter tabs are `@wzrhine/react` Tabs (arrow keys, `aria-selected`).
|
|
33
|
+
*
|
|
34
|
+
* Motion: rows present on first render are static; rows that arrive later enter once with
|
|
35
|
+
* AgentEntrance `row` (4px, fast; reduced → no movement). Nothing replays on filter changes.
|
|
36
|
+
*/
|
|
37
|
+
export const ActivityLedger = React.forwardRef(function ActivityLedger({ events, filter, defaultFilter = 'all', onFilterChange, onOpenEvent, loading, showFilters = true, messages: override, className, ...rest }, ref) {
|
|
38
|
+
const m = useWorkspaceMessages(override);
|
|
39
|
+
const format = useAgentFormat();
|
|
40
|
+
const [innerFilter, setInnerFilter] = React.useState(defaultFilter);
|
|
41
|
+
const active = filter ?? innerFilter;
|
|
42
|
+
const ordered = React.useMemo(() => orderLedger(events), [events]);
|
|
43
|
+
const isNew = useIsNewId(ordered.map((e) => e.id));
|
|
44
|
+
const visible = active === 'all' ? ordered : ordered.filter((e) => e.actor === active);
|
|
45
|
+
const counts = React.useMemo(() => {
|
|
46
|
+
const c = { all: ordered.length, agent: 0, tool: 0, system: 0, user: 0 };
|
|
47
|
+
for (const e of ordered)
|
|
48
|
+
c[e.actor] += 1;
|
|
49
|
+
return c;
|
|
50
|
+
}, [ordered]);
|
|
51
|
+
const listId = React.useId();
|
|
52
|
+
const change = (next) => {
|
|
53
|
+
const key = next;
|
|
54
|
+
if (filter === undefined)
|
|
55
|
+
setInnerFilter(key);
|
|
56
|
+
onFilterChange?.(key);
|
|
57
|
+
};
|
|
58
|
+
return (_jsxs("section", { ...rest, ref: ref, className: cx('rl-agent-ledger', className), "aria-label": m.ledgerList, "aria-busy": loading || undefined, children: [showFilters && (_jsx(Tabs, { value: active, onValueChange: change, size: "sm", variant: "segmented", className: "rl-agent-ledger__filters", children: _jsx(TabList, { "aria-label": m.ledgerFilters, children: FILTERS.map((key) => (_jsx(Tab, { value: key, meta: counts[key], "aria-controls": listId, children: m.ledgerFilter[key] }, key))) }) })), loading && ordered.length === 0 ? (_jsxs("div", { className: "rl-agent-ledger__loading", children: [_jsx(Skeleton, { lines: 3 }), _jsx("span", { className: "rl-agent-sr", children: m.ledgerLoading })] })) : visible.length === 0 ? (_jsx("p", { className: "rl-agent-ledger__empty", id: listId, children: ordered.length === 0 ? m.ledgerEmpty : m.ledgerEmptyFiltered })) : (_jsx("ol", { className: "rl-agent-ledger__list", id: listId, children: visible.map((event) => {
|
|
59
|
+
const outcome = event.outcome ? outcomeGlyph[event.outcome] : undefined;
|
|
60
|
+
return (_jsxs(AgentEntrance, { as: "li", kind: "row", animate: isNew(event.id), className: "rl-agent-ledger__row", "data-actor": event.actor, "data-outcome": event.outcome, children: [_jsxs("span", { className: "rl-agent-ledger__actor", children: [_jsx(AgentIcon, { name: actorIcon[event.actor] }), _jsx("span", { children: m.ledgerActor[event.actor] })] }), _jsxs("span", { className: "rl-agent-ledger__main", children: [onOpenEvent ? (_jsx("button", { type: "button", className: "rl-agent-ledger__title rl-agent-ledger__open", "aria-label": m.ledgerOpen(event.title), onClick: () => onOpenEvent(event), children: event.title })) : (_jsx("span", { className: "rl-agent-ledger__title", children: event.title })), event.detail && _jsx("span", { className: "rl-agent-ledger__detail", children: event.detail })] }), outcome && (_jsxs("span", { className: "rl-agent-ledger__outcome", "data-tone": outcome.tone, children: [_jsx(StatusGlyph, { name: outcome.glyph, tone: outcome.tone }), _jsx("span", { children: m.ledgerOutcome[event.outcome] })] })), _jsx("time", { className: "rl-agent-ledger__time", dateTime: event.at, children: format.time(event.at) })] }, event.id));
|
|
61
|
+
}) }))] }));
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=ActivityLedger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActivityLedger.js","sourceRoot":"","sources":["../../../src/components/workspace/ActivityLedger.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { AgentActionHandler } from '@wzrhine/agent-core';
|
|
3
|
+
import type { CompactionPhase, CompactionStatus } from '../../provider/messages/workspace.js';
|
|
4
|
+
import type { WorkspaceMessagesProp } from './shared.js';
|
|
5
|
+
export type { CompactionPhase, CompactionStatus };
|
|
6
|
+
export type CompactionNoticeProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
7
|
+
status: CompactionStatus;
|
|
8
|
+
/** Sub-step of a running compaction, shown as a sub-label. */
|
|
9
|
+
phase?: CompactionPhase;
|
|
10
|
+
/** Hint after a failed / interrupted compaction; default 「可输入 /compact 重试」. `null` hides it. */
|
|
11
|
+
retryHint?: React.ReactNode;
|
|
12
|
+
tokensBefore?: number;
|
|
13
|
+
tokensAfter?: number;
|
|
14
|
+
/** Elapsed time of a running compaction (the host updates it; nothing polls here). */
|
|
15
|
+
elapsedMs?: number;
|
|
16
|
+
/** Text of the compaction summary (plain text, or markdown through `renderMarkdown`). */
|
|
17
|
+
summary?: string;
|
|
18
|
+
renderMarkdown?: (source: string) => React.ReactNode;
|
|
19
|
+
/** Cancels a running compaction. */
|
|
20
|
+
onCancel?: AgentActionHandler;
|
|
21
|
+
/** Retries saving the result (`save-pending`). */
|
|
22
|
+
onRetrySave?: AgentActionHandler;
|
|
23
|
+
/** Summary disclosure (controlled). */
|
|
24
|
+
summaryOpen?: boolean;
|
|
25
|
+
onSummaryOpenChange?: (open: boolean) => void;
|
|
26
|
+
/** Busy flag for the buttons while an action is being submitted. */
|
|
27
|
+
busy?: boolean;
|
|
28
|
+
messages?: WorkspaceMessagesProp;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* CompactionNotice (Wpi context compaction bar): a strip in the message flow for one context
|
|
32
|
+
* compaction. Running: AgentSpark (executing rhythm) + 「正在整理上下文」 + elapsed + cancel.
|
|
33
|
+
* Completed: token delta 「32K → 12K token」 and an optional summary disclosure (Collapsible).
|
|
34
|
+
* `phase` adds a sub-label while running (「准备中」 / 「正在生成摘要」 / 「正在保存结果」).
|
|
35
|
+
* Failed and interrupted (the run stopped before the compaction settled; the old context is kept)
|
|
36
|
+
* show `retryHint`, default 「可输入 /compact 重试」. Save pending: 「重试保存」. The title is a polite
|
|
37
|
+
* status, so the transition to a settled state is announced once.
|
|
38
|
+
*/
|
|
39
|
+
export declare const CompactionNotice: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & {
|
|
40
|
+
status: CompactionStatus;
|
|
41
|
+
/** Sub-step of a running compaction, shown as a sub-label. */
|
|
42
|
+
phase?: CompactionPhase;
|
|
43
|
+
/** Hint after a failed / interrupted compaction; default 「可输入 /compact 重试」. `null` hides it. */
|
|
44
|
+
retryHint?: React.ReactNode;
|
|
45
|
+
tokensBefore?: number;
|
|
46
|
+
tokensAfter?: number;
|
|
47
|
+
/** Elapsed time of a running compaction (the host updates it; nothing polls here). */
|
|
48
|
+
elapsedMs?: number;
|
|
49
|
+
/** Text of the compaction summary (plain text, or markdown through `renderMarkdown`). */
|
|
50
|
+
summary?: string;
|
|
51
|
+
renderMarkdown?: (source: string) => React.ReactNode;
|
|
52
|
+
/** Cancels a running compaction. */
|
|
53
|
+
onCancel?: AgentActionHandler;
|
|
54
|
+
/** Retries saving the result (`save-pending`). */
|
|
55
|
+
onRetrySave?: AgentActionHandler;
|
|
56
|
+
/** Summary disclosure (controlled). */
|
|
57
|
+
summaryOpen?: boolean;
|
|
58
|
+
onSummaryOpenChange?: (open: boolean) => void;
|
|
59
|
+
/** Busy flag for the buttons while an action is being submitted. */
|
|
60
|
+
busy?: boolean;
|
|
61
|
+
messages?: WorkspaceMessagesProp;
|
|
62
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
63
|
+
//# sourceMappingURL=CompactionNotice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompactionNotice.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/CompactionNotice.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,kBAAkB,EAA8B,MAAM,qBAAqB,CAAC;AAK1F,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAE9F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC;AAElD,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAAG;IAC3F,MAAM,EAAE,gBAAgB,CAAC;IACzB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,gGAAgG;IAChG,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IACrD,oCAAoC;IACpC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,kDAAkD;IAClD,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,uCAAuC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAUF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB;YAzCnB,gBAAgB;IACxB,8DAA8D;YACtD,eAAe;IACvB,gGAAgG;gBACpF,KAAK,CAAC,SAAS;mBACZ,MAAM;kBACP,MAAM;IACpB,sFAAsF;gBAC1E,MAAM;IAClB,yFAAyF;cAC/E,MAAM;qBACC,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS;IACpD,oCAAoC;eACzB,kBAAkB;IAC7B,kDAAkD;kBACpC,kBAAkB;IAChC,uCAAuC;kBACzB,OAAO;0BACC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI;IAC7C,oEAAoE;WAC7D,OAAO;eACH,qBAAqB;wCAoFhC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
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 { useAgentFormat } from '../../provider/AgentMessages.js';
|
|
6
|
+
import { AgentSpark } from '../../primitives/AgentSpark.js';
|
|
7
|
+
import { StatusGlyph } from '../../primitives/StatusGlyph.js';
|
|
8
|
+
import { cx } from '../../utils/cx.js';
|
|
9
|
+
import { useWorkspaceMessages } from './shared.js';
|
|
10
|
+
const settledGlyph = {
|
|
11
|
+
completed: { glyph: 'compacting', tone: 'success' },
|
|
12
|
+
cancelled: { glyph: 'stopped', tone: 'neutral' },
|
|
13
|
+
failed: { glyph: 'failed', tone: 'danger' },
|
|
14
|
+
interrupted: { glyph: 'unknown', tone: 'warning' },
|
|
15
|
+
'save-pending': { glyph: 'saving', tone: 'warning' },
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* CompactionNotice (Wpi context compaction bar): a strip in the message flow for one context
|
|
19
|
+
* compaction. Running: AgentSpark (executing rhythm) + 「正在整理上下文」 + elapsed + cancel.
|
|
20
|
+
* Completed: token delta 「32K → 12K token」 and an optional summary disclosure (Collapsible).
|
|
21
|
+
* `phase` adds a sub-label while running (「准备中」 / 「正在生成摘要」 / 「正在保存结果」).
|
|
22
|
+
* Failed and interrupted (the run stopped before the compaction settled; the old context is kept)
|
|
23
|
+
* show `retryHint`, default 「可输入 /compact 重试」. Save pending: 「重试保存」. The title is a polite
|
|
24
|
+
* status, so the transition to a settled state is announced once.
|
|
25
|
+
*/
|
|
26
|
+
export const CompactionNotice = React.forwardRef(function CompactionNotice({ status, phase, retryHint, tokensBefore, tokensAfter, elapsedMs, summary, renderMarkdown, onCancel, onRetrySave, summaryOpen, onSummaryOpenChange, busy, messages: override, className, ...rest }, ref) {
|
|
27
|
+
const m = useWorkspaceMessages(override);
|
|
28
|
+
const format = useAgentFormat();
|
|
29
|
+
const running = status === 'running';
|
|
30
|
+
const delta = tokensBefore !== undefined && tokensAfter !== undefined ? m.compactionDelta(format.compact(tokensBefore), format.compact(tokensAfter)) : undefined;
|
|
31
|
+
const text = summary?.trim();
|
|
32
|
+
const glyph = running ? undefined : settledGlyph[status];
|
|
33
|
+
const hint = retryHint === undefined ? m.compactionRetryHint : retryHint;
|
|
34
|
+
return (_jsxs("div", { ...rest, ref: ref, className: cx('rl-agent-compaction', className), "data-status": status, children: [_jsxs("div", { className: "rl-agent-compaction__row", children: [running ? _jsx(AgentSpark, { phase: "executing" }) : _jsx(StatusGlyph, { name: glyph.glyph, tone: glyph.tone }), _jsxs("p", { className: "rl-agent-compaction__title", role: "status", children: [_jsx("span", { children: m.compactionStatus[status] }), running && phase && _jsx("span", { className: "rl-agent-compaction__phase", children: m.compactionPhase[phase] }), !running && delta && _jsx("span", { className: "rl-agent-compaction__delta", children: delta })] }), running && elapsedMs !== undefined && _jsx("span", { className: "rl-agent-compaction__elapsed", children: format.duration(elapsedMs) }), (status === 'failed' || status === 'interrupted') && hint != null && hint !== false && _jsx("span", { className: "rl-agent-compaction__hint", children: hint }), running && onCancel && (_jsx(Button, { size: "sm", variant: "ghost", loading: busy, onClick: () => void onCancel(), children: m.compactionCancel })), status === 'save-pending' && onRetrySave && (_jsx(Button, { size: "sm", variant: "secondary", loading: busy, onClick: () => void onRetrySave(), children: m.compactionRetrySave }))] }), !running && text && (_jsx(Collapsible, { className: "rl-agent-compaction__summary", open: summaryOpen, defaultOpen: summaryOpen === undefined ? false : undefined, onOpenChange: onSummaryOpenChange, trigger: _jsx("span", { children: m.compactionSummary }), children: renderMarkdown ? renderMarkdown(text) : _jsx("p", { className: "rl-agent-compaction__text", children: text }) }))] }));
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=CompactionNotice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompactionNotice.js","sourceRoot":"","sources":["../../../src/components/workspace/CompactionNotice.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { PopoverAlign, PopoverSide } from '@wzrhine/react';
|
|
3
|
+
import type { ContextUsageView } from '@wzrhine/agent-core';
|
|
4
|
+
import type { WorkspaceMessagesProp } from './shared.js';
|
|
5
|
+
export type ContextUsageVariant = 'ring' | 'bar' | 'full';
|
|
6
|
+
export type ContextUsageProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
7
|
+
usage: ContextUsageView;
|
|
8
|
+
/**
|
|
9
|
+
* `ring`: compact trigger (ring + 「12.4K / 32K」) that opens the full view in a Popover.
|
|
10
|
+
* `bar`: one line with a meter. `full`: meter, breakdown legend, warnings and note.
|
|
11
|
+
*/
|
|
12
|
+
variant?: ContextUsageVariant;
|
|
13
|
+
/** Popover placement for `ring`. */
|
|
14
|
+
side?: PopoverSide;
|
|
15
|
+
align?: PopoverAlign;
|
|
16
|
+
/** `ring`: also open the Popover on hover (focus and click still open it). */
|
|
17
|
+
openOnHover?: boolean;
|
|
18
|
+
messages?: WorkspaceMessagesProp;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* ContextUsage (atlas 27): context / token budget. A percentage — the ring arc, the Meter — is
|
|
22
|
+
* drawn only when `usagePercent` returns a number (exact or estimated value with a reliable max);
|
|
23
|
+
* unknown or partial data shows text without a `role="meter"`. Non-exact numbers always carry
|
|
24
|
+
* 「估计值」 / 「部分数据」. Near (≥ 80%) and over the limit add a warning sentence, not only colour.
|
|
25
|
+
* `usage.stats` (cache hit rate, TTFT, TPS…) render in the full view and the popover as one
|
|
26
|
+
* `<dl>` per section; a missing value shows 「—」 (read as 「无数据」), never 0.
|
|
27
|
+
*
|
|
28
|
+
* Motion: none of its own (the Popover has its CSS transition); values update directly.
|
|
29
|
+
*/
|
|
30
|
+
export declare const ContextUsage: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & {
|
|
31
|
+
usage: ContextUsageView;
|
|
32
|
+
/**
|
|
33
|
+
* `ring`: compact trigger (ring + 「12.4K / 32K」) that opens the full view in a Popover.
|
|
34
|
+
* `bar`: one line with a meter. `full`: meter, breakdown legend, warnings and note.
|
|
35
|
+
*/
|
|
36
|
+
variant?: ContextUsageVariant;
|
|
37
|
+
/** Popover placement for `ring`. */
|
|
38
|
+
side?: PopoverSide;
|
|
39
|
+
align?: PopoverAlign;
|
|
40
|
+
/** `ring`: also open the Popover on hover (focus and click still open it). */
|
|
41
|
+
openOnHover?: boolean;
|
|
42
|
+
messages?: WorkspaceMessagesProp;
|
|
43
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
44
|
+
//# sourceMappingURL=ContextUsage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextUsage.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/ContextUsage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,KAAK,EAAE,gBAAgB,EAAkC,MAAM,qBAAqB,CAAC;AAK5F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAAG;IACvF,KAAK,EAAE,gBAAgB,CAAC;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,oCAAoC;IACpC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAgHF;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY;WAtIhB,gBAAgB;IACvB;;;OAGG;cACO,mBAAmB;IAC7B,oCAAoC;WAC7B,WAAW;YACV,YAAY;IACpB,8EAA8E;kBAChE,OAAO;eACV,qBAAqB;wCAqKhC,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
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 { Meter, Popover } from '@wzrhine/react';
|
|
5
|
+
import { usageLevel, usagePercent } from '@wzrhine/agent-core';
|
|
6
|
+
import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
|
|
7
|
+
import { AgentIcon } from '../../primitives/icons.js';
|
|
8
|
+
import { cx } from '../../utils/cx.js';
|
|
9
|
+
import { completenessTag, useWorkspaceMessages } from './shared.js';
|
|
10
|
+
function useDerived(usage, override) {
|
|
11
|
+
const m = useWorkspaceMessages(override);
|
|
12
|
+
const status = useAgentMessages().status;
|
|
13
|
+
const format = useAgentFormat();
|
|
14
|
+
const percent = usagePercent(usage.used, usage.max, usage.completeness);
|
|
15
|
+
const level = usage.completeness === 'unknown' ? 'unknown' : usageLevel(usage.used, usage.max);
|
|
16
|
+
const value = (n) => (usage.unit === 'bytes' ? format.bytes(n) : format.compact(n));
|
|
17
|
+
let summary = m.contextUnknown;
|
|
18
|
+
if (usage.used !== undefined && usage.completeness !== 'unknown') {
|
|
19
|
+
summary = usage.max !== undefined && usage.max > 0 ? `${value(usage.used)} / ${value(usage.max)}` : value(usage.used);
|
|
20
|
+
}
|
|
21
|
+
return { m, percent, level, summary, tag: completenessTag(usage.completeness, status.completeness), label: usage.label ?? m.contextTitle };
|
|
22
|
+
}
|
|
23
|
+
/** The ring: an arc for a reliable percentage, a dashed circle when there is none. */
|
|
24
|
+
function Ring({ percent, level }) {
|
|
25
|
+
const arc = percent === null ? null : Math.max(0, Math.min(100, percent));
|
|
26
|
+
return (_jsxs("svg", { className: "rl-agent-context__ring", viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", "data-level": level, "data-unknown": arc === null || undefined, children: [_jsx("circle", { className: "rl-agent-context__ring-track", cx: "8", cy: "8", r: "6", pathLength: "100" }), arc !== null && _jsx("circle", { className: "rl-agent-context__ring-arc", cx: "8", cy: "8", r: "6", pathLength: "100", strokeDasharray: `${arc} 100` })] }));
|
|
27
|
+
}
|
|
28
|
+
function Warning({ level, m }) {
|
|
29
|
+
if (level !== 'near' && level !== 'over')
|
|
30
|
+
return null;
|
|
31
|
+
return (_jsxs("p", { className: "rl-agent-context__warning", "data-level": level, children: [_jsx(AgentIcon, { name: "warning" }), level === 'over' ? m.contextOver : m.contextNear] }));
|
|
32
|
+
}
|
|
33
|
+
/** Meter when the percentage is reliable; otherwise plain text (never a role=meter without a max). */
|
|
34
|
+
function Measure({ usage, d, size }) {
|
|
35
|
+
const { m, percent, level, summary, tag, label } = d;
|
|
36
|
+
const unit = m.contextUnit[usage.unit];
|
|
37
|
+
if (percent !== null && usage.used !== undefined && usage.max !== undefined) {
|
|
38
|
+
const text = `${summary} · ${m.contextPercent(percent)}`;
|
|
39
|
+
return (_jsx(Meter, { className: "rl-agent-context__meter", "data-level": level, size: size, label: _jsxs(_Fragment, { children: [label, tag && _jsx("span", { className: "rl-agent-context__tag", children: tag })] }), value: Math.min(usage.used, usage.max), high: usage.max * 0.8, optimum: 0, max: usage.max, valueText: text, getValueText: () => [summary, unit, m.contextPercent(percent), tag].filter(Boolean).join(' ') }));
|
|
40
|
+
}
|
|
41
|
+
return (_jsxs("p", { className: "rl-agent-context__line", "data-level": level, children: [_jsx("span", { className: "rl-agent-context__label", children: label }), _jsxs("span", { className: "rl-agent-context__value", children: [summary, usage.used !== undefined && usage.completeness !== 'unknown' && unit ? ` ${unit}` : ''] }), tag && _jsx("span", { className: "rl-agent-context__tag", children: tag }), (usage.max === undefined || usage.max <= 0) && usage.completeness !== 'unknown' && _jsx("span", { className: "rl-agent-context__hint", children: m.contextNoMax })] }));
|
|
42
|
+
}
|
|
43
|
+
function Breakdown({ usage, m }) {
|
|
44
|
+
const format = useAgentFormat();
|
|
45
|
+
const segments = (usage.segments ?? []).filter((s) => s.value > 0);
|
|
46
|
+
if (segments.length === 0)
|
|
47
|
+
return null;
|
|
48
|
+
const sum = segments.reduce((acc, s) => acc + s.value, 0);
|
|
49
|
+
// With a reliable max the stacked bar shows the share of the window; otherwise the composition.
|
|
50
|
+
const total = usage.max && usage.max > 0 && usage.completeness !== 'unknown' ? Math.max(usage.max, sum) : sum;
|
|
51
|
+
const value = (n) => (usage.unit === 'bytes' ? format.bytes(n) : format.compact(n));
|
|
52
|
+
return (_jsxs("div", { className: "rl-agent-context__breakdown", children: [_jsx("div", { className: "rl-agent-context__stack", "aria-hidden": "true", children: segments.map((s) => (_jsx("span", { className: "rl-agent-context__segment", "data-tone": s.tone ?? 'neutral', style: { inlineSize: `${(s.value / total) * 100}%` } }, s.id))) }), _jsx("ul", { className: "rl-agent-context__legend", "aria-label": m.contextBreakdown, children: segments.map((s) => (_jsxs("li", { className: "rl-agent-context__legend-item", children: [_jsx("span", { className: "rl-agent-context__swatch", "data-tone": s.tone ?? 'neutral', "aria-hidden": "true" }), _jsx("span", { className: "rl-agent-context__legend-label", children: s.label }), _jsx("span", { className: "rl-agent-context__legend-value", children: value(s.value) })] }, s.id))) })] }));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* ContextUsage (atlas 27): context / token budget. A percentage — the ring arc, the Meter — is
|
|
56
|
+
* drawn only when `usagePercent` returns a number (exact or estimated value with a reliable max);
|
|
57
|
+
* unknown or partial data shows text without a `role="meter"`. Non-exact numbers always carry
|
|
58
|
+
* 「估计值」 / 「部分数据」. Near (≥ 80%) and over the limit add a warning sentence, not only colour.
|
|
59
|
+
* `usage.stats` (cache hit rate, TTFT, TPS…) render in the full view and the popover as one
|
|
60
|
+
* `<dl>` per section; a missing value shows 「—」 (read as 「无数据」), never 0.
|
|
61
|
+
*
|
|
62
|
+
* Motion: none of its own (the Popover has its CSS transition); values update directly.
|
|
63
|
+
*/
|
|
64
|
+
export const ContextUsage = React.forwardRef(function ContextUsage({ usage, variant = 'full', side = 'top', align = 'end', openOnHover, messages: override, className, ...rest }, ref) {
|
|
65
|
+
const d = useDerived(usage, override);
|
|
66
|
+
const { m, level, summary, tag } = d;
|
|
67
|
+
if (variant === 'ring') {
|
|
68
|
+
return (_jsx("div", { ...rest, ref: ref, className: cx('rl-agent-context', className), "data-variant": "ring", "data-level": level, children: _jsx(Popover, { side: side, align: align, size: "sm", openOnHover: openOnHover, title: m.contextTitle, trigger: _jsxs("button", { type: "button", className: "rl-agent-context__trigger", "data-level": level, "aria-label": m.contextTrigger(tag ? `${summary} · ${tag}` : summary), children: [_jsx(Ring, { percent: d.percent, level: level }), _jsx("span", { className: "rl-agent-context__value", children: summary }), tag && _jsx("span", { className: "rl-agent-context__tag", children: tag })] }), children: _jsx(ContextUsageDetail, { usage: usage, d: d }) }) }));
|
|
69
|
+
}
|
|
70
|
+
return (_jsx("div", { ...rest, ref: ref, className: cx('rl-agent-context', className), "data-variant": variant, "data-level": level, children: variant === 'bar' ? (_jsxs(_Fragment, { children: [_jsx(Measure, { usage: usage, d: d, size: "sm" }), _jsx(Warning, { level: level, m: m })] })) : (_jsx(ContextUsageDetail, { usage: usage, d: d })) }));
|
|
71
|
+
});
|
|
72
|
+
function ContextUsageDetail({ usage, d }) {
|
|
73
|
+
return (_jsxs("div", { className: "rl-agent-context__detail", children: [_jsx(Measure, { usage: usage, d: d, size: "md" }), _jsx(Warning, { level: d.level, m: d.m }), _jsx(Breakdown, { usage: usage, m: d.m }), _jsx(Stats, { sections: usage.stats, m: d.m }), usage.note && (_jsxs("p", { className: "rl-agent-context__note", children: [_jsx(AgentIcon, { name: "info" }), usage.note] }))] }));
|
|
74
|
+
}
|
|
75
|
+
function Stats({ sections, m }) {
|
|
76
|
+
const status = useAgentMessages().status;
|
|
77
|
+
const format = useAgentFormat();
|
|
78
|
+
const id = React.useId();
|
|
79
|
+
const shown = (sections ?? []).filter((s) => s.rows.length > 0);
|
|
80
|
+
if (shown.length === 0)
|
|
81
|
+
return null;
|
|
82
|
+
const valueOf = (row) => {
|
|
83
|
+
const v = row.value;
|
|
84
|
+
switch (row.unit) {
|
|
85
|
+
case 'ms':
|
|
86
|
+
return m.contextStatValue(format.duration(v), 'ms');
|
|
87
|
+
case 'tokens':
|
|
88
|
+
return m.contextStatValue(format.compact(v), 'tokens');
|
|
89
|
+
case 'percent':
|
|
90
|
+
return m.contextStatValue(format.number(Math.round(v * 10) / 10), 'percent');
|
|
91
|
+
case 'tokens-per-s':
|
|
92
|
+
return m.contextStatValue(format.number(Math.round(v * 10) / 10), 'tokens-per-s');
|
|
93
|
+
default:
|
|
94
|
+
return m.contextStatValue(format.number(v), 'count');
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
return (_jsx("div", { className: "rl-agent-context__stats", role: "group", "aria-label": m.contextStats, children: shown.map((section, i) => {
|
|
98
|
+
const titleId = `${id}-${i}`;
|
|
99
|
+
return (_jsxs("section", { className: "rl-agent-context__stat-section", "aria-labelledby": titleId, children: [_jsx("p", { id: titleId, className: "rl-agent-context__stat-title", children: section.title }), _jsx("dl", { className: "rl-agent-context__stat-list", children: section.rows.map((row, j) => {
|
|
100
|
+
const missing = row.value === undefined || !Number.isFinite(row.value) || row.completeness === 'unknown';
|
|
101
|
+
const tag = !missing && row.completeness ? completenessTag(row.completeness, status.completeness) : undefined;
|
|
102
|
+
return (_jsxs("div", { className: "rl-agent-context__stat", children: [_jsx("dt", { children: row.label }), _jsxs("dd", { "data-missing": missing || undefined, children: [missing ? (_jsxs(_Fragment, { children: [_jsx("span", { "aria-hidden": "true", children: "\u2014" }), _jsx("span", { className: "rl-agent-sr", children: m.contextStatMissing })] })) : (valueOf(row)), tag && _jsx("span", { className: "rl-agent-context__tag", children: tag })] })] }, `${row.label}-${j}`));
|
|
103
|
+
}) })] }, section.id));
|
|
104
|
+
}) }));
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=ContextUsage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextUsage.js","sourceRoot":"","sources":["../../../src/components/workspace/ContextUsage.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AA4BpE,SAAS,UAAU,CAAC,KAAuB,EAAE,QAAgC;IAC3E,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,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/F,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,IAAI,OAAO,GAAG,CAAC,CAAC,cAAc,CAAC;IAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACjE,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxH,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;AAC7I,CAAC;AAED,sFAAsF;AACtF,SAAS,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAsC;IAClE,MAAM,GAAG,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,OAAO,CACL,eAAK,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAC,WAAW,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,gBAAa,KAAK,kBAAgB,GAAG,KAAK,IAAI,IAAI,SAAS,aACzJ,iBAAQ,SAAS,EAAC,8BAA8B,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,UAAU,EAAC,KAAK,GAAG,EACvF,GAAG,KAAK,IAAI,IAAI,iBAAQ,SAAS,EAAC,4BAA4B,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,UAAU,EAAC,KAAK,EAAC,eAAe,EAAE,GAAG,GAAG,MAAM,GAAI,IAClI,CACP,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAA2E;IACpG,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACtD,OAAO,CACL,aAAG,SAAS,EAAC,2BAA2B,gBAAa,KAAK,aACxD,KAAC,SAAS,IAAC,IAAI,EAAC,SAAS,GAAG,EAC3B,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,IAC/C,CACL,CAAC;AACJ,CAAC;AAED,sGAAsG;AACtG,SAAS,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAA+G;IAC9I,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC5E,MAAM,IAAI,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,OAAO,CACL,KAAC,KAAK,IACJ,SAAS,EAAC,yBAAyB,gBACvB,KAAK,EACjB,IAAI,EAAE,IAAI,EACV,KAAK,EACH,8BACG,KAAK,EACL,GAAG,IAAI,eAAM,SAAS,EAAC,uBAAuB,YAAE,GAAG,GAAQ,IAC3D,EAEL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EACtC,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,EACrB,OAAO,EAAE,CAAC,EACV,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,SAAS,EAAE,IAAI,EACf,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAC7F,CACH,CAAC;IACJ,CAAC;IACD,OAAO,CACL,aAAG,SAAS,EAAC,wBAAwB,gBAAa,KAAK,aACrD,eAAM,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAQ,EACxD,gBAAM,SAAS,EAAC,yBAAyB,aACtC,OAAO,EACP,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAClF,EACN,GAAG,IAAI,eAAM,SAAS,EAAC,uBAAuB,YAAE,GAAG,GAAQ,EAC3D,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,eAAM,SAAS,EAAC,wBAAwB,YAAE,CAAC,CAAC,YAAY,GAAQ,IAClJ,CACL,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAA2E;IACtG,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACnE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1D,gGAAgG;IAChG,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9G,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,OAAO,CACL,eAAK,SAAS,EAAC,6BAA6B,aAC1C,cAAK,SAAS,EAAC,yBAAyB,iBAAa,MAAM,YACxD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,eAAiB,SAAS,EAAC,2BAA2B,eAAY,CAAC,CAAC,IAAI,IAAI,SAAS,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,IAAhI,CAAC,CAAC,EAAE,CAAgI,CAChJ,CAAC,GACE,EACN,aAAI,SAAS,EAAC,0BAA0B,gBAAa,CAAC,CAAC,gBAAgB,YACpE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,cAAe,SAAS,EAAC,+BAA+B,aACtD,eAAM,SAAS,EAAC,0BAA0B,eAAY,CAAC,CAAC,IAAI,IAAI,SAAS,iBAAc,MAAM,GAAG,EAChG,eAAM,SAAS,EAAC,gCAAgC,YAAE,CAAC,CAAC,KAAK,GAAQ,EACjE,eAAM,SAAS,EAAC,gCAAgC,YAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAQ,KAHjE,CAAC,CAAC,EAAE,CAIR,CACN,CAAC,GACC,IACD,CACP,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAoC,SAAS,YAAY,CACnG,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAC7G,GAAG;IAEH,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAErC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CACL,iBAAS,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,kBAAe,MAAM,gBAAa,KAAK,YAC1G,KAAC,OAAO,IACN,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,IAAI,EACT,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,CAAC,CAAC,YAAY,EACrB,OAAO,EACL,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,2BAA2B,gBAAa,KAAK,gBAAc,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAChJ,KAAC,IAAI,IAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,GAAI,EAC1C,eAAM,SAAS,EAAC,yBAAyB,YAAE,OAAO,GAAQ,EACzD,GAAG,IAAI,eAAM,SAAS,EAAC,uBAAuB,YAAE,GAAG,GAAQ,IACrD,YAGX,KAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,GAAI,GAClC,GACN,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,iBAAS,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,kBAAgB,OAAO,gBAAc,KAAK,YAC5G,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CACnB,8BACE,KAAC,OAAO,IAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAC,IAAI,GAAG,EACzC,KAAC,OAAO,IAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,GAAI,IAC9B,CACJ,CAAC,CAAC,CAAC,CACF,KAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,GAAI,CAC3C,GACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAiE;IACrG,OAAO,CACL,eAAK,SAAS,EAAC,0BAA0B,aACvC,KAAC,OAAO,IAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAC,IAAI,GAAG,EACzC,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAI,EACnC,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAI,EACnC,KAAC,KAAK,IAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAI,EACvC,KAAK,CAAC,IAAI,IAAI,CACb,aAAG,SAAS,EAAC,wBAAwB,aACnC,KAAC,SAAS,IAAC,IAAI,EAAC,MAAM,GAAG,EACxB,KAAK,CAAC,IAAI,IACT,CACL,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAiF;IAC3G,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,KAAK,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,OAAO,GAAG,CAAC,GAAiB,EAAU,EAAE;QAC5C,MAAM,CAAC,GAAG,GAAG,CAAC,KAAM,CAAC;QACrB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,IAAI;gBACP,OAAO,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACtD,KAAK,QAAQ;gBACX,OAAO,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACzD,KAAK,SAAS;gBACZ,OAAO,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;YAC/E,KAAK,cAAc;gBACjB,OAAO,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;YACpF;gBACE,OAAO,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CACL,cAAK,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAC,OAAO,gBAAa,CAAC,CAAC,YAAY,YAC7E,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YACxB,MAAM,OAAO,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,CACL,mBAA0B,SAAS,EAAC,gCAAgC,qBAAkB,OAAO,aAC3F,YAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,8BAA8B,YACrD,OAAO,CAAC,KAAK,GACZ,EACJ,aAAI,SAAS,EAAC,6BAA6B,YACxC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;4BAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC;4BACzG,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;4BAC9G,OAAO,CACL,eAA+B,SAAS,EAAC,wBAAwB,aAC/D,uBAAK,GAAG,CAAC,KAAK,GAAM,EACpB,8BAAkB,OAAO,IAAI,SAAS,aACnC,OAAO,CAAC,CAAC,CAAC,CACT,8BACE,8BAAkB,MAAM,uBAAS,EACjC,eAAM,SAAS,EAAC,aAAa,YAAE,CAAC,CAAC,kBAAkB,GAAQ,IAC1D,CACJ,CAAC,CAAC,CAAC,CACF,OAAO,CAAC,GAAG,CAAC,CACb,EACA,GAAG,IAAI,eAAM,SAAS,EAAC,uBAAuB,YAAE,GAAG,GAAQ,IACzD,KAZG,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,CAavB,CACP,CAAC;wBACJ,CAAC,CAAC,GACC,KAzBO,OAAO,CAAC,EAAE,CA0Bd,CACX,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { AgentActionHandler, MaterialPageView, TerminalView } from '@wzrhine/agent-core';
|
|
3
|
+
import type { ChunkPagerActions } from '../tools/ChunkPager.js';
|
|
4
|
+
import type { HeadingLevel, WorkspaceMessagesProp } from './shared.js';
|
|
5
|
+
/** Inherited / read-only terminals are history only: no input, no stop. */
|
|
6
|
+
export declare function isTerminalReadOnly(terminal: TerminalView): boolean;
|
|
7
|
+
export type PersistentTerminalProps = Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'onInput'> & {
|
|
8
|
+
terminal: TerminalView;
|
|
9
|
+
/** Sends one line to the session. Without it (or when read-only) no input line is drawn. */
|
|
10
|
+
onInput?: AgentActionHandler<[text: string, terminal: TerminalView]>;
|
|
11
|
+
/** Requests a stop. Drawn only when `terminal.stoppable`. Also used by 「重试停止」. */
|
|
12
|
+
onStop?: AgentActionHandler<[terminal: TerminalView]>;
|
|
13
|
+
/** Loads older output (`terminal.outputTruncated`). The scroll position is kept. */
|
|
14
|
+
onLoadEarlier?: AgentActionHandler<[terminal: TerminalView]>;
|
|
15
|
+
/** Reads the newest output (`terminal.newerOutput`); draws 「有新输出,读取最新」. */
|
|
16
|
+
onReadLatest?: AgentActionHandler<[terminal: TerminalView]>;
|
|
17
|
+
/** Loads earlier entries of `terminal.history`. */
|
|
18
|
+
onLoadMoreHistory?: AgentActionHandler<[terminal: TerminalView]>;
|
|
19
|
+
/** One page of stored output; replaces the live tail with a `ChunkPager`. */
|
|
20
|
+
page?: MaterialPageView;
|
|
21
|
+
/** Paging callbacks for `page` (`canGoBack` defaults to false). */
|
|
22
|
+
pager?: Partial<ChunkPagerActions>;
|
|
23
|
+
headingLevel?: HeadingLevel;
|
|
24
|
+
/** Hide the name heading (e.g. inside `TerminalTabs`, where the tab already names it). */
|
|
25
|
+
hideName?: boolean;
|
|
26
|
+
messages?: WorkspaceMessagesProp;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* PersistentTerminal (atlas 22): one terminal session with its own lifecycle. A command
|
|
30
|
+
* returning never closes the session (`idle` says so); a stop request shows 「停止尚未确认」 until
|
|
31
|
+
* the adapter confirms it; `unknown` is never shown as ended.
|
|
32
|
+
*
|
|
33
|
+
* Accessibility: the console is `role="log"` with `aria-live="off"`, so streamed chunks are never
|
|
34
|
+
* read out one by one; the session status sits in a polite `role="status"` instead. The console
|
|
35
|
+
* is focusable for keyboard scrolling. The input is a labelled single-line field; Enter sends,
|
|
36
|
+
* except while an IME composition is active.
|
|
37
|
+
*
|
|
38
|
+
* `terminal.newerOutput` (the loaded snapshot is older than the session) adds 「有新输出,读取最新」
|
|
39
|
+
* (`onReadLatest`); `terminal.notes` render as small notes; `terminal.history` is an ordered list
|
|
40
|
+
* 「调用记录」 (command, glyph + status text, exit code, `<time>`) with `onLoadMoreHistory`. With
|
|
41
|
+
* `page` the stored output is read through a `ChunkPager` instead of the live tail.
|
|
42
|
+
*
|
|
43
|
+
* Motion: none. The cursor is a static block; the console follows new output only while the
|
|
44
|
+
* reader is at the bottom, otherwise a 「有新输出」 button appears.
|
|
45
|
+
*/
|
|
46
|
+
export declare const PersistentTerminal: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children" | "onInput"> & {
|
|
47
|
+
terminal: TerminalView;
|
|
48
|
+
/** Sends one line to the session. Without it (or when read-only) no input line is drawn. */
|
|
49
|
+
onInput?: AgentActionHandler<[text: string, terminal: TerminalView]>;
|
|
50
|
+
/** Requests a stop. Drawn only when `terminal.stoppable`. Also used by 「重试停止」. */
|
|
51
|
+
onStop?: AgentActionHandler<[terminal: TerminalView]>;
|
|
52
|
+
/** Loads older output (`terminal.outputTruncated`). The scroll position is kept. */
|
|
53
|
+
onLoadEarlier?: AgentActionHandler<[terminal: TerminalView]>;
|
|
54
|
+
/** Reads the newest output (`terminal.newerOutput`); draws 「有新输出,读取最新」. */
|
|
55
|
+
onReadLatest?: AgentActionHandler<[terminal: TerminalView]>;
|
|
56
|
+
/** Loads earlier entries of `terminal.history`. */
|
|
57
|
+
onLoadMoreHistory?: AgentActionHandler<[terminal: TerminalView]>;
|
|
58
|
+
/** One page of stored output; replaces the live tail with a `ChunkPager`. */
|
|
59
|
+
page?: MaterialPageView;
|
|
60
|
+
/** Paging callbacks for `page` (`canGoBack` defaults to false). */
|
|
61
|
+
pager?: Partial<ChunkPagerActions>;
|
|
62
|
+
headingLevel?: HeadingLevel;
|
|
63
|
+
/** Hide the name heading (e.g. inside `TerminalTabs`, where the tab already names it). */
|
|
64
|
+
hideName?: boolean;
|
|
65
|
+
messages?: WorkspaceMessagesProp;
|
|
66
|
+
} & React.RefAttributes<HTMLElement>>;
|
|
67
|
+
export type TerminalTabsProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'onInput' | 'defaultValue'> & {
|
|
68
|
+
terminals: TerminalView[];
|
|
69
|
+
/** Active terminal id (controlled). */
|
|
70
|
+
value?: string;
|
|
71
|
+
defaultValue?: string;
|
|
72
|
+
onValueChange?: (id: string) => void;
|
|
73
|
+
onInput?: PersistentTerminalProps['onInput'];
|
|
74
|
+
onStop?: PersistentTerminalProps['onStop'];
|
|
75
|
+
onLoadEarlier?: PersistentTerminalProps['onLoadEarlier'];
|
|
76
|
+
onReadLatest?: PersistentTerminalProps['onReadLatest'];
|
|
77
|
+
onLoadMoreHistory?: PersistentTerminalProps['onLoadMoreHistory'];
|
|
78
|
+
headingLevel?: HeadingLevel;
|
|
79
|
+
messages?: WorkspaceMessagesProp;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Several terminals as tabs (Tabs from `@wzrhine/react`: roving focus, arrow keys, Home / End).
|
|
83
|
+
* Each tab names the terminal and its status, so the status is readable without opening it.
|
|
84
|
+
*/
|
|
85
|
+
export declare function TerminalTabs({ terminals, value, defaultValue, onValueChange, onInput, onStop, onLoadEarlier, onReadLatest, onLoadMoreHistory, headingLevel, messages: override, className, ...rest }: TerminalTabsProps): React.JSX.Element;
|
|
86
|
+
//# sourceMappingURL=PersistentTerminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersistentTerminal.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/PersistentTerminal.tsx"],"names":[],"mappings":"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"}
|