dsh-plugin-core 0.32.0 → 0.33.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +197 -64
- package/README.zh-CN.md +242 -0
- package/dist/adv/explorer/FileBrowser.d.ts +58 -0
- package/dist/adv/explorer/FileBrowser.d.ts.map +1 -0
- package/dist/adv/explorer/FileBrowser.js +632 -0
- package/dist/adv/explorer/FileBrowser.js.map +1 -0
- package/dist/adv/explorer/crumb-nav.d.ts +45 -0
- package/dist/adv/explorer/crumb-nav.d.ts.map +1 -0
- package/dist/adv/explorer/crumb-nav.js +78 -0
- package/dist/adv/explorer/crumb-nav.js.map +1 -0
- package/dist/adv/explorer/crumbs-menu.d.ts +37 -0
- package/dist/adv/explorer/crumbs-menu.d.ts.map +1 -0
- package/dist/adv/explorer/crumbs-menu.js +102 -0
- package/dist/adv/explorer/crumbs-menu.js.map +1 -0
- package/dist/adv/explorer/explorer-css.d.ts +2 -0
- package/dist/adv/explorer/explorer-css.d.ts.map +1 -0
- package/dist/adv/explorer/explorer-css.generated.d.ts +2 -0
- package/dist/adv/explorer/explorer-css.generated.d.ts.map +1 -0
- package/dist/adv/explorer/explorer-css.generated.js +4 -0
- package/dist/adv/explorer/explorer-css.generated.js.map +1 -0
- package/dist/adv/explorer/explorer-css.js +3 -0
- package/dist/adv/explorer/explorer-css.js.map +1 -0
- package/dist/adv/explorer/fs-face.d.ts +36 -0
- package/dist/adv/explorer/fs-face.d.ts.map +1 -0
- package/dist/adv/explorer/fs-face.js +74 -0
- package/dist/adv/explorer/fs-face.js.map +1 -0
- package/dist/adv/explorer/index.d.ts +6 -0
- package/dist/adv/explorer/index.d.ts.map +1 -0
- package/dist/adv/explorer/index.js +6 -0
- package/dist/adv/explorer/index.js.map +1 -0
- package/dist/adv/explorer/landing.d.ts +26 -0
- package/dist/adv/explorer/landing.d.ts.map +1 -0
- package/dist/adv/explorer/landing.js +43 -0
- package/dist/adv/explorer/landing.js.map +1 -0
- package/dist/adv/explorer/open.d.ts +137 -0
- package/dist/adv/explorer/open.d.ts.map +1 -0
- package/dist/adv/explorer/open.js +350 -0
- package/dist/adv/explorer/open.js.map +1 -0
- package/dist/adv/explorer/picker-placement.d.ts +69 -0
- package/dist/adv/explorer/picker-placement.d.ts.map +1 -0
- package/dist/adv/explorer/picker-placement.js +122 -0
- package/dist/adv/explorer/picker-placement.js.map +1 -0
- package/dist/adv/explorer/preview/BytesPreview.d.ts +12 -0
- package/dist/adv/explorer/preview/BytesPreview.d.ts.map +1 -0
- package/dist/adv/explorer/preview/BytesPreview.js +60 -0
- package/dist/adv/explorer/preview/BytesPreview.js.map +1 -0
- package/dist/adv/explorer/preview/HtmlPreview.d.ts +17 -0
- package/dist/adv/explorer/preview/HtmlPreview.d.ts.map +1 -0
- package/dist/adv/explorer/preview/HtmlPreview.js +113 -0
- package/dist/adv/explorer/preview/HtmlPreview.js.map +1 -0
- package/dist/adv/explorer/preview/OfficePreview.d.ts +12 -0
- package/dist/adv/explorer/preview/OfficePreview.d.ts.map +1 -0
- package/dist/adv/explorer/preview/OfficePreview.js +63 -0
- package/dist/adv/explorer/preview/OfficePreview.js.map +1 -0
- package/dist/adv/explorer/preview/TextPreview.d.ts +18 -0
- package/dist/adv/explorer/preview/TextPreview.d.ts.map +1 -0
- package/dist/adv/explorer/preview/TextPreview.js +122 -0
- package/dist/adv/explorer/preview/TextPreview.js.map +1 -0
- package/dist/adv/explorer/preview/index.d.ts +24 -0
- package/dist/adv/explorer/preview/index.d.ts.map +1 -0
- package/dist/adv/explorer/preview/index.js +58 -0
- package/dist/adv/explorer/preview/index.js.map +1 -0
- package/dist/adv/explorer/preview/md-labels.d.ts +3 -0
- package/dist/adv/explorer/preview/md-labels.d.ts.map +1 -0
- package/dist/adv/explorer/preview/md-labels.js +12 -0
- package/dist/adv/explorer/preview/md-labels.js.map +1 -0
- package/dist/adv/explorer/preview-title-bar.d.ts +26 -0
- package/dist/adv/explorer/preview-title-bar.d.ts.map +1 -0
- package/dist/adv/explorer/preview-title-bar.js +48 -0
- package/dist/adv/explorer/preview-title-bar.js.map +1 -0
- package/dist/adv/explorer/types.d.ts +259 -0
- package/dist/adv/explorer/types.d.ts.map +1 -0
- package/dist/adv/explorer/types.js +379 -0
- package/dist/adv/explorer/types.js.map +1 -0
- package/dist/adv/session/SessionViewModal.d.ts +37 -0
- package/dist/adv/session/SessionViewModal.d.ts.map +1 -0
- package/dist/adv/session/SessionViewModal.js +1133 -0
- package/dist/adv/session/SessionViewModal.js.map +1 -0
- package/dist/adv/session/changes.d.ts +73 -0
- package/dist/adv/session/changes.d.ts.map +1 -0
- package/dist/adv/session/changes.js +134 -0
- package/dist/adv/session/changes.js.map +1 -0
- package/dist/adv/session/faces.d.ts +244 -0
- package/dist/adv/session/faces.d.ts.map +1 -0
- package/dist/adv/session/faces.js +17 -0
- package/dist/adv/session/faces.js.map +1 -0
- package/dist/adv/session/index.d.ts +7 -0
- package/dist/adv/session/index.d.ts.map +1 -0
- package/dist/adv/session/index.js +27 -0
- package/dist/adv/session/index.js.map +1 -0
- package/dist/adv/session/mirror/AskCard.d.ts +35 -0
- package/dist/adv/session/mirror/AskCard.d.ts.map +1 -0
- package/dist/adv/session/mirror/AskCard.js +131 -0
- package/dist/adv/session/mirror/AskCard.js.map +1 -0
- package/dist/adv/session/mirror/BashRow.d.ts +14 -0
- package/dist/adv/session/mirror/BashRow.d.ts.map +1 -0
- package/dist/adv/session/mirror/BashRow.js +143 -0
- package/dist/adv/session/mirror/BashRow.js.map +1 -0
- package/dist/adv/session/mirror/ChangedFileDiff.d.ts +25 -0
- package/dist/adv/session/mirror/ChangedFileDiff.d.ts.map +1 -0
- package/dist/adv/session/mirror/ChangedFileDiff.js +178 -0
- package/dist/adv/session/mirror/ChangedFileDiff.js.map +1 -0
- package/dist/adv/session/mirror/ChangedFilesCard.d.ts +18 -0
- package/dist/adv/session/mirror/ChangedFilesCard.d.ts.map +1 -0
- package/dist/adv/session/mirror/ChangedFilesCard.js +165 -0
- package/dist/adv/session/mirror/ChangedFilesCard.js.map +1 -0
- package/dist/adv/session/mirror/ChatGroupSeat.d.ts +24 -0
- package/dist/adv/session/mirror/ChatGroupSeat.d.ts.map +1 -0
- package/dist/adv/session/mirror/ChatGroupSeat.js +135 -0
- package/dist/adv/session/mirror/ChatGroupSeat.js.map +1 -0
- package/dist/adv/session/mirror/ChatNodeSeat.d.ts +43 -0
- package/dist/adv/session/mirror/ChatNodeSeat.d.ts.map +1 -0
- package/dist/adv/session/mirror/ChatNodeSeat.js +133 -0
- package/dist/adv/session/mirror/ChatNodeSeat.js.map +1 -0
- package/dist/adv/session/mirror/ChatView.d.ts +47 -0
- package/dist/adv/session/mirror/ChatView.d.ts.map +1 -0
- package/dist/adv/session/mirror/ChatView.js +138 -0
- package/dist/adv/session/mirror/ChatView.js.map +1 -0
- package/dist/adv/session/mirror/CommandCard.d.ts +20 -0
- package/dist/adv/session/mirror/CommandCard.d.ts.map +1 -0
- package/dist/adv/session/mirror/CommandCard.js +69 -0
- package/dist/adv/session/mirror/CommandCard.js.map +1 -0
- package/dist/adv/session/mirror/ContextInjectionRow.d.ts +18 -0
- package/dist/adv/session/mirror/ContextInjectionRow.d.ts.map +1 -0
- package/dist/adv/session/mirror/ContextInjectionRow.js +50 -0
- package/dist/adv/session/mirror/ContextInjectionRow.js.map +1 -0
- package/dist/adv/session/mirror/Deliverables.d.ts +24 -0
- package/dist/adv/session/mirror/Deliverables.d.ts.map +1 -0
- package/dist/adv/session/mirror/Deliverables.js +175 -0
- package/dist/adv/session/mirror/Deliverables.js.map +1 -0
- package/dist/adv/session/mirror/GenericCommandCard.d.ts +136 -0
- package/dist/adv/session/mirror/GenericCommandCard.d.ts.map +1 -0
- package/dist/adv/session/mirror/GenericCommandCard.js +948 -0
- package/dist/adv/session/mirror/GenericCommandCard.js.map +1 -0
- package/dist/adv/session/mirror/MessageIconActions.d.ts +16 -0
- package/dist/adv/session/mirror/MessageIconActions.d.ts.map +1 -0
- package/dist/adv/session/mirror/MessageIconActions.js +69 -0
- package/dist/adv/session/mirror/MessageIconActions.js.map +1 -0
- package/dist/adv/session/mirror/MessageItem.d.ts +93 -0
- package/dist/adv/session/mirror/MessageItem.d.ts.map +1 -0
- package/dist/adv/session/mirror/MessageItem.js +194 -0
- package/dist/adv/session/mirror/MessageItem.js.map +1 -0
- package/dist/adv/session/mirror/ReasoningRow.d.ts +11 -0
- package/dist/adv/session/mirror/ReasoningRow.d.ts.map +1 -0
- package/dist/adv/session/mirror/ReasoningRow.js +111 -0
- package/dist/adv/session/mirror/ReasoningRow.js.map +1 -0
- package/dist/adv/session/mirror/RunningStatus.d.ts +12 -0
- package/dist/adv/session/mirror/RunningStatus.d.ts.map +1 -0
- package/dist/adv/session/mirror/RunningStatus.js +57 -0
- package/dist/adv/session/mirror/RunningStatus.js.map +1 -0
- package/dist/adv/session/mirror/StatDialog.d.ts +20 -0
- package/dist/adv/session/mirror/StatDialog.d.ts.map +1 -0
- package/dist/adv/session/mirror/StatDialog.js +49 -0
- package/dist/adv/session/mirror/StatDialog.js.map +1 -0
- package/dist/adv/session/mirror/ToolDetails.d.ts +65 -0
- package/dist/adv/session/mirror/ToolDetails.d.ts.map +1 -0
- package/dist/adv/session/mirror/ToolDetails.js +268 -0
- package/dist/adv/session/mirror/ToolDetails.js.map +1 -0
- package/dist/adv/session/mirror/TurnProcessNodeView.d.ts +10 -0
- package/dist/adv/session/mirror/TurnProcessNodeView.d.ts.map +1 -0
- package/dist/adv/session/mirror/TurnProcessNodeView.js +57 -0
- package/dist/adv/session/mirror/TurnProcessNodeView.js.map +1 -0
- package/dist/adv/session/mirror/TurnTailNodeView.d.ts +57 -0
- package/dist/adv/session/mirror/TurnTailNodeView.d.ts.map +1 -0
- package/dist/adv/session/mirror/TurnTailNodeView.js +106 -0
- package/dist/adv/session/mirror/TurnTailNodeView.js.map +1 -0
- package/dist/adv/session/mirror/TurnTriggerNodeView.d.ts +16 -0
- package/dist/adv/session/mirror/TurnTriggerNodeView.d.ts.map +1 -0
- package/dist/adv/session/mirror/TurnTriggerNodeView.js +103 -0
- package/dist/adv/session/mirror/TurnTriggerNodeView.js.map +1 -0
- package/dist/adv/session/mirror/TurnUsagePanel.d.ts +21 -0
- package/dist/adv/session/mirror/TurnUsagePanel.d.ts.map +1 -0
- package/dist/adv/session/mirror/TurnUsagePanel.js +41 -0
- package/dist/adv/session/mirror/TurnUsagePanel.js.map +1 -0
- package/dist/adv/session/mirror/control-details.d.ts +9 -0
- package/dist/adv/session/mirror/control-details.d.ts.map +1 -0
- package/dist/adv/session/mirror/control-details.js +549 -0
- package/dist/adv/session/mirror/control-details.js.map +1 -0
- package/dist/adv/session/mirror/detail-i18n.d.ts +4 -0
- package/dist/adv/session/mirror/detail-i18n.d.ts.map +1 -0
- package/dist/adv/session/mirror/detail-i18n.js +153 -0
- package/dist/adv/session/mirror/detail-i18n.js.map +1 -0
- package/dist/adv/session/mirror/message-chrome.d.ts +39 -0
- package/dist/adv/session/mirror/message-chrome.d.ts.map +1 -0
- package/dist/adv/session/mirror/message-chrome.js +153 -0
- package/dist/adv/session/mirror/message-chrome.js.map +1 -0
- package/dist/adv/session/mirror/process-groups.d.ts +56 -0
- package/dist/adv/session/mirror/process-groups.d.ts.map +1 -0
- package/dist/adv/session/mirror/process-groups.js +204 -0
- package/dist/adv/session/mirror/process-groups.js.map +1 -0
- package/dist/adv/session/official-classes.d.ts +28 -0
- package/dist/adv/session/official-classes.d.ts.map +1 -0
- package/dist/adv/session/official-classes.js +152 -0
- package/dist/adv/session/official-classes.js.map +1 -0
- package/dist/adv/session/open-review.d.ts +13 -0
- package/dist/adv/session/open-review.d.ts.map +1 -0
- package/dist/adv/session/open-review.js +32 -0
- package/dist/adv/session/open-review.js.map +1 -0
- package/dist/adv/session/open-session-view.d.ts +19 -0
- package/dist/adv/session/open-session-view.d.ts.map +1 -0
- package/dist/adv/session/open-session-view.js +147 -0
- package/dist/adv/session/open-session-view.js.map +1 -0
- package/dist/adv/session/pending-inputs.d.ts +33 -0
- package/dist/adv/session/pending-inputs.d.ts.map +1 -0
- package/dist/adv/session/pending-inputs.js +130 -0
- package/dist/adv/session/pending-inputs.js.map +1 -0
- package/dist/adv/session/session-css.d.ts +2 -0
- package/dist/adv/session/session-css.d.ts.map +1 -0
- package/dist/adv/session/session-css.generated.d.ts +2 -0
- package/dist/adv/session/session-css.generated.d.ts.map +1 -0
- package/dist/adv/session/session-css.generated.js +4 -0
- package/dist/adv/session/session-css.generated.js.map +1 -0
- package/dist/adv/session/session-css.js +3 -0
- package/dist/adv/session/session-css.js.map +1 -0
- package/dist/adv/session/tail-follow.d.ts +29 -0
- package/dist/adv/session/tail-follow.d.ts.map +1 -0
- package/dist/adv/session/tail-follow.js +106 -0
- package/dist/adv/session/tail-follow.js.map +1 -0
- package/dist/ui/actions/Button.d.ts +102 -0
- package/dist/ui/actions/Button.d.ts.map +1 -0
- package/dist/ui/actions/Button.js +233 -0
- package/dist/ui/actions/Button.js.map +1 -0
- package/dist/ui/actions/button-css.generated.d.ts +2 -0
- package/dist/ui/actions/button-css.generated.d.ts.map +1 -0
- package/dist/ui/actions/button-css.generated.js +4 -0
- package/dist/ui/actions/button-css.generated.js.map +1 -0
- package/dist/ui/display/Card.d.ts +65 -0
- package/dist/ui/display/Card.d.ts.map +1 -0
- package/dist/ui/display/Card.js +109 -0
- package/dist/ui/display/Card.js.map +1 -0
- package/dist/ui/display/Chip.d.ts +28 -0
- package/dist/ui/display/Chip.d.ts.map +1 -0
- package/dist/ui/display/Chip.js +36 -0
- package/dist/ui/display/Chip.js.map +1 -0
- package/dist/ui/display/CodeViewer.d.ts +38 -0
- package/dist/ui/display/CodeViewer.d.ts.map +1 -0
- package/dist/ui/display/CodeViewer.js +107 -0
- package/dist/ui/display/CodeViewer.js.map +1 -0
- package/dist/ui/display/FieldHint.d.ts +18 -0
- package/dist/ui/display/FieldHint.d.ts.map +1 -0
- package/dist/ui/display/FieldHint.js +40 -0
- package/dist/ui/display/FieldHint.js.map +1 -0
- package/dist/ui/display/FlipText.d.ts +43 -0
- package/dist/ui/display/FlipText.d.ts.map +1 -0
- package/dist/ui/display/FlipText.js +59 -0
- package/dist/ui/display/FlipText.js.map +1 -0
- package/dist/ui/display/LiveText.d.ts +13 -0
- package/dist/ui/display/LiveText.d.ts.map +1 -0
- package/dist/ui/display/LiveText.js +19 -0
- package/dist/ui/display/LiveText.js.map +1 -0
- package/dist/ui/display/MarqueeText.d.ts +22 -0
- package/dist/ui/display/MarqueeText.d.ts.map +1 -0
- package/dist/ui/display/MarqueeText.js +52 -0
- package/dist/ui/display/MarqueeText.js.map +1 -0
- package/dist/ui/display/SectionHead.d.ts +35 -0
- package/dist/ui/display/SectionHead.d.ts.map +1 -0
- package/dist/ui/display/SectionHead.js +45 -0
- package/dist/ui/display/SectionHead.js.map +1 -0
- package/dist/ui/display/Surface.d.ts +43 -0
- package/dist/ui/display/Surface.d.ts.map +1 -0
- package/dist/ui/display/Surface.js +39 -0
- package/dist/ui/display/Surface.js.map +1 -0
- package/dist/ui/display/Table.d.ts +30 -0
- package/dist/ui/display/Table.d.ts.map +1 -0
- package/dist/ui/display/Table.js +96 -0
- package/dist/ui/display/Table.js.map +1 -0
- package/dist/ui/display/card-css.d.ts +2 -0
- package/dist/ui/display/card-css.d.ts.map +1 -0
- package/dist/ui/display/card-css.generated.d.ts +2 -0
- package/dist/ui/display/card-css.generated.d.ts.map +1 -0
- package/dist/ui/display/card-css.generated.js +4 -0
- package/dist/ui/display/card-css.generated.js.map +1 -0
- package/dist/ui/display/card-css.js +5 -0
- package/dist/ui/display/card-css.js.map +1 -0
- package/dist/ui/display/chip-css.d.ts +2 -0
- package/dist/ui/display/chip-css.d.ts.map +1 -0
- package/dist/ui/display/chip-css.generated.d.ts +2 -0
- package/dist/ui/display/chip-css.generated.d.ts.map +1 -0
- package/dist/ui/display/chip-css.generated.js +4 -0
- package/dist/ui/display/chip-css.generated.js.map +1 -0
- package/dist/ui/display/chip-css.js +12 -0
- package/dist/ui/display/chip-css.js.map +1 -0
- package/dist/ui/display/code-viewer-css.d.ts +2 -0
- package/dist/ui/display/code-viewer-css.d.ts.map +1 -0
- package/dist/ui/display/code-viewer-css.generated.d.ts +2 -0
- package/dist/ui/display/code-viewer-css.generated.d.ts.map +1 -0
- package/dist/ui/display/code-viewer-css.generated.js +4 -0
- package/dist/ui/display/code-viewer-css.generated.js.map +1 -0
- package/dist/ui/display/code-viewer-css.js +3 -0
- package/dist/ui/display/code-viewer-css.js.map +1 -0
- package/dist/ui/display/code-viewer-lang.d.ts +15 -0
- package/dist/ui/display/code-viewer-lang.d.ts.map +1 -0
- package/dist/ui/display/code-viewer-lang.js +190 -0
- package/dist/ui/display/code-viewer-lang.js.map +1 -0
- package/dist/ui/display/code-viewer-theme.d.ts +5 -0
- package/dist/ui/display/code-viewer-theme.d.ts.map +1 -0
- package/dist/ui/display/code-viewer-theme.js +138 -0
- package/dist/ui/display/code-viewer-theme.js.map +1 -0
- package/dist/ui/display/flip-css.d.ts +2 -0
- package/dist/ui/display/flip-css.d.ts.map +1 -0
- package/dist/ui/display/flip-css.generated.d.ts +2 -0
- package/dist/ui/display/flip-css.generated.d.ts.map +1 -0
- package/dist/ui/display/flip-css.generated.js +4 -0
- package/dist/ui/display/flip-css.generated.js.map +1 -0
- package/dist/ui/display/flip-css.js +4 -0
- package/dist/ui/display/flip-css.js.map +1 -0
- package/dist/ui/display/hint-css.generated.d.ts +2 -0
- package/dist/ui/display/hint-css.generated.d.ts.map +1 -0
- package/dist/ui/display/hint-css.generated.js +4 -0
- package/dist/ui/display/hint-css.generated.js.map +1 -0
- package/dist/ui/display/marquee-css.d.ts +2 -0
- package/dist/ui/display/marquee-css.d.ts.map +1 -0
- package/dist/ui/display/marquee-css.generated.d.ts +2 -0
- package/dist/ui/display/marquee-css.generated.d.ts.map +1 -0
- package/dist/ui/display/marquee-css.generated.js +4 -0
- package/dist/ui/display/marquee-css.generated.js.map +1 -0
- package/dist/ui/display/marquee-css.js +4 -0
- package/dist/ui/display/marquee-css.js.map +1 -0
- package/dist/ui/display/section-head-css.generated.d.ts +2 -0
- package/dist/ui/display/section-head-css.generated.d.ts.map +1 -0
- package/dist/ui/display/section-head-css.generated.js +4 -0
- package/dist/ui/display/section-head-css.generated.js.map +1 -0
- package/dist/ui/display/surface-css.d.ts +2 -0
- package/dist/ui/display/surface-css.d.ts.map +1 -0
- package/dist/ui/display/surface-css.generated.d.ts +2 -0
- package/dist/ui/display/surface-css.generated.d.ts.map +1 -0
- package/dist/ui/display/surface-css.generated.js +4 -0
- package/dist/ui/display/surface-css.generated.js.map +1 -0
- package/dist/ui/display/surface-css.js +7 -0
- package/dist/ui/display/surface-css.js.map +1 -0
- package/dist/ui/display/table-css.generated.d.ts +2 -0
- package/dist/ui/display/table-css.generated.d.ts.map +1 -0
- package/dist/ui/display/table-css.generated.js +4 -0
- package/dist/ui/display/table-css.generated.js.map +1 -0
- package/dist/ui/display/table-logic.d.ts +110 -0
- package/dist/ui/display/table-logic.d.ts.map +1 -0
- package/dist/ui/display/table-logic.js +81 -0
- package/dist/ui/display/table-logic.js.map +1 -0
- package/dist/ui/display/table-plain-css.generated.d.ts +2 -0
- package/dist/ui/display/table-plain-css.generated.d.ts.map +1 -0
- package/dist/ui/display/table-plain-css.generated.js +4 -0
- package/dist/ui/display/table-plain-css.generated.js.map +1 -0
- package/dist/ui/display/table-shared.d.ts +101 -0
- package/dist/ui/display/table-shared.d.ts.map +1 -0
- package/dist/ui/display/table-shared.js +229 -0
- package/dist/ui/display/table-shared.js.map +1 -0
- package/dist/ui/feedback/AlertModal.d.ts +41 -0
- package/dist/ui/feedback/AlertModal.d.ts.map +1 -0
- package/dist/ui/feedback/AlertModal.js +45 -0
- package/dist/ui/feedback/AlertModal.js.map +1 -0
- package/dist/ui/feedback/ConfirmModal.d.ts +50 -0
- package/dist/ui/feedback/ConfirmModal.d.ts.map +1 -0
- package/dist/ui/feedback/ConfirmModal.js +47 -0
- package/dist/ui/feedback/ConfirmModal.js.map +1 -0
- package/dist/ui/feedback/Loader.d.ts +49 -0
- package/dist/ui/feedback/Loader.d.ts.map +1 -0
- package/dist/ui/feedback/Loader.js +79 -0
- package/dist/ui/feedback/Loader.js.map +1 -0
- package/dist/ui/feedback/LoaderBar.d.ts +38 -0
- package/dist/ui/feedback/LoaderBar.d.ts.map +1 -0
- package/dist/ui/feedback/LoaderBar.js +79 -0
- package/dist/ui/feedback/LoaderBar.js.map +1 -0
- package/dist/ui/feedback/Loading.d.ts +69 -0
- package/dist/ui/feedback/Loading.d.ts.map +1 -0
- package/dist/ui/feedback/Loading.js +164 -0
- package/dist/ui/feedback/Loading.js.map +1 -0
- package/dist/ui/feedback/Modal.d.ts +73 -0
- package/dist/ui/feedback/Modal.d.ts.map +1 -0
- package/dist/ui/feedback/Modal.js +83 -0
- package/dist/ui/feedback/Modal.js.map +1 -0
- package/dist/ui/feedback/SideSheet.d.ts +70 -0
- package/dist/ui/feedback/SideSheet.d.ts.map +1 -0
- package/dist/ui/feedback/SideSheet.js +130 -0
- package/dist/ui/feedback/SideSheet.js.map +1 -0
- package/dist/ui/feedback/Toast.d.ts +45 -0
- package/dist/ui/feedback/Toast.d.ts.map +1 -0
- package/dist/ui/feedback/Toast.js +225 -0
- package/dist/ui/feedback/Toast.js.map +1 -0
- package/dist/ui/feedback/feedback-css.d.ts +2 -0
- package/dist/ui/feedback/feedback-css.d.ts.map +1 -0
- package/dist/ui/feedback/feedback-css.generated.d.ts +2 -0
- package/dist/ui/feedback/feedback-css.generated.d.ts.map +1 -0
- package/dist/ui/feedback/feedback-css.generated.js +4 -0
- package/dist/ui/feedback/feedback-css.generated.js.map +1 -0
- package/dist/ui/feedback/feedback-css.js +4 -0
- package/dist/ui/feedback/feedback-css.js.map +1 -0
- package/dist/ui/feedback/host-toast.d.ts +23 -0
- package/dist/ui/feedback/host-toast.d.ts.map +1 -0
- package/dist/ui/feedback/host-toast.js +34 -0
- package/dist/ui/feedback/host-toast.js.map +1 -0
- package/dist/ui/feedback/loader-bar-art.d.ts +6 -0
- package/dist/ui/feedback/loader-bar-art.d.ts.map +1 -0
- package/dist/ui/feedback/loader-bar-art.js +6 -0
- package/dist/ui/feedback/loader-bar-art.js.map +1 -0
- package/dist/ui/feedback/loader-bar-css.generated.d.ts +2 -0
- package/dist/ui/feedback/loader-bar-css.generated.d.ts.map +1 -0
- package/dist/ui/feedback/loader-bar-css.generated.js +4 -0
- package/dist/ui/feedback/loader-bar-css.generated.js.map +1 -0
- package/dist/ui/feedback/loader-css.generated.d.ts +2 -0
- package/dist/ui/feedback/loader-css.generated.d.ts.map +1 -0
- package/dist/ui/feedback/loader-css.generated.js +4 -0
- package/dist/ui/feedback/loader-css.generated.js.map +1 -0
- package/dist/ui/feedback/loading-css.generated.d.ts +2 -0
- package/dist/ui/feedback/loading-css.generated.d.ts.map +1 -0
- package/dist/ui/feedback/loading-css.generated.js +4 -0
- package/dist/ui/feedback/loading-css.generated.js.map +1 -0
- package/dist/ui/feedback/loading-host.d.ts +49 -0
- package/dist/ui/feedback/loading-host.d.ts.map +1 -0
- package/dist/ui/feedback/loading-host.js +57 -0
- package/dist/ui/feedback/loading-host.js.map +1 -0
- package/dist/ui/feedback/modal-host.d.ts +51 -0
- package/dist/ui/feedback/modal-host.d.ts.map +1 -0
- package/dist/ui/feedback/modal-host.js +170 -0
- package/dist/ui/feedback/modal-host.js.map +1 -0
- package/dist/ui/feedback/side-sheet-css.d.ts +2 -0
- package/dist/ui/feedback/side-sheet-css.d.ts.map +1 -0
- package/dist/ui/feedback/side-sheet-css.generated.d.ts +2 -0
- package/dist/ui/feedback/side-sheet-css.generated.d.ts.map +1 -0
- package/dist/ui/feedback/side-sheet-css.generated.js +4 -0
- package/dist/ui/feedback/side-sheet-css.generated.js.map +1 -0
- package/dist/ui/feedback/side-sheet-css.js +2 -0
- package/dist/ui/feedback/side-sheet-css.js.map +1 -0
- package/dist/ui/feedback/toast-host.d.ts +24 -0
- package/dist/ui/feedback/toast-host.d.ts.map +1 -0
- package/dist/ui/feedback/toast-host.js +20 -0
- package/dist/ui/feedback/toast-host.js.map +1 -0
- package/dist/ui/index.d.ts +44 -44
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +44 -44
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/infra/chevron.d.ts +22 -0
- package/dist/ui/infra/chevron.d.ts.map +1 -0
- package/dist/ui/infra/chevron.js +33 -0
- package/dist/ui/infra/chevron.js.map +1 -0
- package/dist/ui/infra/controls-css.d.ts +16 -0
- package/dist/ui/infra/controls-css.d.ts.map +1 -0
- package/dist/ui/infra/controls-css.js +26 -0
- package/dist/ui/infra/controls-css.js.map +1 -0
- package/dist/ui/infra/css.d.ts +35 -0
- package/dist/ui/infra/css.d.ts.map +1 -0
- package/dist/ui/infra/css.js +52 -0
- package/dist/ui/infra/css.js.map +1 -0
- package/dist/ui/infra/host-data.d.ts +119 -0
- package/dist/ui/infra/host-data.d.ts.map +1 -0
- package/dist/ui/infra/host-data.js +122 -0
- package/dist/ui/infra/host-data.js.map +1 -0
- package/dist/ui/infra/locale.d.ts +4 -0
- package/dist/ui/infra/locale.d.ts.map +1 -0
- package/dist/ui/infra/locale.js +17 -0
- package/dist/ui/infra/locale.js.map +1 -0
- package/dist/ui/infra/overlay-css.d.ts +2 -0
- package/dist/ui/infra/overlay-css.d.ts.map +1 -0
- package/dist/ui/infra/overlay-css.generated.d.ts +2 -0
- package/dist/ui/infra/overlay-css.generated.d.ts.map +1 -0
- package/dist/ui/infra/overlay-css.generated.js +4 -0
- package/dist/ui/infra/overlay-css.generated.js.map +1 -0
- package/dist/ui/infra/overlay-css.js +2 -0
- package/dist/ui/infra/overlay-css.js.map +1 -0
- package/dist/ui/infra/overlay.d.ts +62 -0
- package/dist/ui/infra/overlay.d.ts.map +1 -0
- package/dist/ui/infra/overlay.js +94 -0
- package/dist/ui/infra/overlay.js.map +1 -0
- package/dist/ui/infra/panel-css.d.ts +2 -0
- package/dist/ui/infra/panel-css.d.ts.map +1 -0
- package/dist/ui/infra/panel-css.generated.d.ts +2 -0
- package/dist/ui/infra/panel-css.generated.d.ts.map +1 -0
- package/dist/ui/infra/panel-css.generated.js +4 -0
- package/dist/ui/infra/panel-css.generated.js.map +1 -0
- package/dist/ui/infra/panel-css.js +2 -0
- package/dist/ui/infra/panel-css.js.map +1 -0
- package/dist/ui/infra/panel.d.ts +41 -0
- package/dist/ui/infra/panel.d.ts.map +1 -0
- package/dist/ui/infra/panel.js +37 -0
- package/dist/ui/infra/panel.js.map +1 -0
- package/dist/ui/infra/side-panel-css.d.ts +2 -0
- package/dist/ui/infra/side-panel-css.d.ts.map +1 -0
- package/dist/ui/infra/side-panel-css.generated.d.ts +2 -0
- package/dist/ui/infra/side-panel-css.generated.d.ts.map +1 -0
- package/dist/ui/infra/side-panel-css.generated.js +4 -0
- package/dist/ui/infra/side-panel-css.generated.js.map +1 -0
- package/dist/ui/infra/side-panel-css.js +2 -0
- package/dist/ui/infra/side-panel-css.js.map +1 -0
- package/dist/ui/infra/thenable.d.ts +9 -0
- package/dist/ui/infra/thenable.d.ts.map +1 -0
- package/dist/ui/infra/thenable.js +15 -0
- package/dist/ui/infra/thenable.js.map +1 -0
- package/dist/ui/infra/ticker.d.ts +8 -0
- package/dist/ui/infra/ticker.d.ts.map +1 -0
- package/dist/ui/infra/ticker.js +49 -0
- package/dist/ui/infra/ticker.js.map +1 -0
- package/dist/ui/infra/tooltip.d.ts +29 -0
- package/dist/ui/infra/tooltip.d.ts.map +1 -0
- package/dist/ui/infra/tooltip.js +10 -0
- package/dist/ui/infra/tooltip.js.map +1 -0
- package/dist/ui/inputs/Checkbox.d.ts +24 -0
- package/dist/ui/inputs/Checkbox.d.ts.map +1 -0
- package/dist/ui/inputs/Checkbox.js +35 -0
- package/dist/ui/inputs/Checkbox.js.map +1 -0
- package/dist/ui/inputs/DateTimePicker.d.ts +45 -0
- package/dist/ui/inputs/DateTimePicker.d.ts.map +1 -0
- package/dist/ui/inputs/DateTimePicker.js +462 -0
- package/dist/ui/inputs/DateTimePicker.js.map +1 -0
- package/dist/ui/inputs/Field.d.ts +125 -0
- package/dist/ui/inputs/Field.d.ts.map +1 -0
- package/dist/ui/inputs/Field.js +175 -0
- package/dist/ui/inputs/Field.js.map +1 -0
- package/dist/ui/inputs/InputGroup.d.ts +91 -0
- package/dist/ui/inputs/InputGroup.d.ts.map +1 -0
- package/dist/ui/inputs/InputGroup.js +125 -0
- package/dist/ui/inputs/InputGroup.js.map +1 -0
- package/dist/ui/inputs/ModelPicker.d.ts +48 -0
- package/dist/ui/inputs/ModelPicker.d.ts.map +1 -0
- package/dist/ui/inputs/ModelPicker.js +101 -0
- package/dist/ui/inputs/ModelPicker.js.map +1 -0
- package/dist/ui/inputs/Picker.d.ts +56 -0
- package/dist/ui/inputs/Picker.d.ts.map +1 -0
- package/dist/ui/inputs/Picker.js +244 -0
- package/dist/ui/inputs/Picker.js.map +1 -0
- package/dist/ui/inputs/Segmented.d.ts +99 -0
- package/dist/ui/inputs/Segmented.d.ts.map +1 -0
- package/dist/ui/inputs/Segmented.js +135 -0
- package/dist/ui/inputs/Segmented.js.map +1 -0
- package/dist/ui/inputs/Textarea.d.ts +36 -0
- package/dist/ui/inputs/Textarea.d.ts.map +1 -0
- package/dist/ui/inputs/Textarea.js +35 -0
- package/dist/ui/inputs/Textarea.js.map +1 -0
- package/dist/ui/inputs/WorkspacePicker.d.ts +35 -0
- package/dist/ui/inputs/WorkspacePicker.d.ts.map +1 -0
- package/dist/ui/inputs/WorkspacePicker.js +39 -0
- package/dist/ui/inputs/WorkspacePicker.js.map +1 -0
- package/dist/ui/inputs/datetime-css.generated.d.ts +2 -0
- package/dist/ui/inputs/datetime-css.generated.d.ts.map +1 -0
- package/dist/ui/inputs/datetime-css.generated.js +4 -0
- package/dist/ui/inputs/datetime-css.generated.js.map +1 -0
- package/dist/ui/inputs/datetime-logic.d.ts +102 -0
- package/dist/ui/inputs/datetime-logic.d.ts.map +1 -0
- package/dist/ui/inputs/datetime-logic.js +200 -0
- package/dist/ui/inputs/datetime-logic.js.map +1 -0
- package/dist/ui/inputs/field-css.generated.d.ts +2 -0
- package/dist/ui/inputs/field-css.generated.d.ts.map +1 -0
- package/dist/ui/inputs/field-css.generated.js +4 -0
- package/dist/ui/inputs/field-css.generated.js.map +1 -0
- package/dist/ui/inputs/input-group-css.generated.d.ts +2 -0
- package/dist/ui/inputs/input-group-css.generated.d.ts.map +1 -0
- package/dist/ui/inputs/input-group-css.generated.js +4 -0
- package/dist/ui/inputs/input-group-css.generated.js.map +1 -0
- package/dist/ui/inputs/picker-css.d.ts +2 -0
- package/dist/ui/inputs/picker-css.d.ts.map +1 -0
- package/dist/ui/inputs/picker-css.generated.d.ts +2 -0
- package/dist/ui/inputs/picker-css.generated.d.ts.map +1 -0
- package/dist/ui/inputs/picker-css.generated.js +4 -0
- package/dist/ui/inputs/picker-css.generated.js.map +1 -0
- package/dist/ui/inputs/picker-css.js +4 -0
- package/dist/ui/inputs/picker-css.js.map +1 -0
- package/dist/ui/inputs/picker-icons.d.ts +12 -0
- package/dist/ui/inputs/picker-icons.d.ts.map +1 -0
- package/dist/ui/inputs/picker-icons.js +29 -0
- package/dist/ui/inputs/picker-icons.js.map +1 -0
- package/dist/ui/inputs/picker-logic.d.ts +33 -0
- package/dist/ui/inputs/picker-logic.d.ts.map +1 -0
- package/dist/ui/inputs/picker-logic.js +68 -0
- package/dist/ui/inputs/picker-logic.js.map +1 -0
- package/dist/ui/inputs/segmented-css.generated.d.ts +2 -0
- package/dist/ui/inputs/segmented-css.generated.d.ts.map +1 -0
- package/dist/ui/inputs/segmented-css.generated.js +4 -0
- package/dist/ui/inputs/segmented-css.generated.js.map +1 -0
- package/dist/ui/layout/PanelDock.d.ts +132 -0
- package/dist/ui/layout/PanelDock.d.ts.map +1 -0
- package/dist/ui/layout/PanelDock.js +390 -0
- package/dist/ui/layout/PanelDock.js.map +1 -0
- package/dist/ui/layout/QuickToolbar.d.ts +54 -0
- package/dist/ui/layout/QuickToolbar.d.ts.map +1 -0
- package/dist/ui/layout/QuickToolbar.js +254 -0
- package/dist/ui/layout/QuickToolbar.js.map +1 -0
- package/dist/ui/layout/SplitGroup.d.ts +37 -0
- package/dist/ui/layout/SplitGroup.d.ts.map +1 -0
- package/dist/ui/layout/SplitGroup.js +36 -0
- package/dist/ui/layout/SplitGroup.js.map +1 -0
- package/dist/ui/layout/panel-dock-css.d.ts +2 -0
- package/dist/ui/layout/panel-dock-css.d.ts.map +1 -0
- package/dist/ui/layout/panel-dock-css.generated.d.ts +2 -0
- package/dist/ui/layout/panel-dock-css.generated.d.ts.map +1 -0
- package/dist/ui/layout/panel-dock-css.generated.js +4 -0
- package/dist/ui/layout/panel-dock-css.generated.js.map +1 -0
- package/dist/ui/layout/panel-dock-css.js +4 -0
- package/dist/ui/layout/panel-dock-css.js.map +1 -0
- package/dist/ui/layout/panel-dock-logic.d.ts +67 -0
- package/dist/ui/layout/panel-dock-logic.d.ts.map +1 -0
- package/dist/ui/layout/panel-dock-logic.js +110 -0
- package/dist/ui/layout/panel-dock-logic.js.map +1 -0
- package/dist/ui/layout/quick-toolbar-css.generated.d.ts +2 -0
- package/dist/ui/layout/quick-toolbar-css.generated.d.ts.map +1 -0
- package/dist/ui/layout/quick-toolbar-css.generated.js +4 -0
- package/dist/ui/layout/quick-toolbar-css.generated.js.map +1 -0
- package/dist/ui/layout/quick-toolbar-logic.d.ts +76 -0
- package/dist/ui/layout/quick-toolbar-logic.d.ts.map +1 -0
- package/dist/ui/layout/quick-toolbar-logic.js +40 -0
- package/dist/ui/layout/quick-toolbar-logic.js.map +1 -0
- package/dist/ui/layout/resizer.d.ts +29 -0
- package/dist/ui/layout/resizer.d.ts.map +1 -0
- package/dist/ui/layout/resizer.js +42 -0
- package/dist/ui/layout/resizer.js.map +1 -0
- package/dist/ui/layout/split-group-css.generated.d.ts +2 -0
- package/dist/ui/layout/split-group-css.generated.d.ts.map +1 -0
- package/dist/ui/layout/split-group-css.generated.js +4 -0
- package/dist/ui/layout/split-group-css.generated.js.map +1 -0
- package/dist/ui/navigation/Pagination.d.ts +59 -0
- package/dist/ui/navigation/Pagination.d.ts.map +1 -0
- package/dist/ui/navigation/Pagination.js +112 -0
- package/dist/ui/navigation/Pagination.js.map +1 -0
- package/dist/ui/navigation/pagination-css.generated.d.ts +2 -0
- package/dist/ui/navigation/pagination-css.generated.d.ts.map +1 -0
- package/dist/ui/navigation/pagination-css.generated.js +4 -0
- package/dist/ui/navigation/pagination-css.generated.js.map +1 -0
- package/dist/ui/navigation/pagination-logic.d.ts +36 -0
- package/dist/ui/navigation/pagination-logic.d.ts.map +1 -0
- package/dist/ui/navigation/pagination-logic.js +73 -0
- package/dist/ui/navigation/pagination-logic.js.map +1 -0
- package/dist/ui/official.js +2 -2
- package/dist/ui/official.js.map +1 -1
- package/dist/utils/i18n.d.ts +2 -2
- package/dist/utils/i18n.d.ts.map +1 -1
- package/dist/utils/i18n.js +1 -1
- package/dist/utils/i18n.js.map +1 -1
- package/docs/README.md +2 -1
- package/docs/design/architecture.md +9 -8
- package/docs/design/copywriting.md +23 -0
- package/docs/design/external/dsh-host.md +5 -5
- package/docs/design/structure.md +132 -128
- package/docs/design/style.md +5 -5
- package/docs/help/utils.doc.ts +3 -3
- package/docs/help/utils.md +3 -3
- package/docs/requirements.md +30 -290
- package/package.json +1 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// 官方对照:ui-chat@0.2.1-rc.5 lib/client.js:6107-6260(reasoningText / latestCompletedParagraphFirstLine /
|
|
2
|
+
// ReasoningRow)+ ReasoningContent(lib/client.js:6568-6576)。
|
|
3
|
+
// root[data-variant=think][data-state=running|ok][data-expanded][data-preview]
|
|
4
|
+
// > [running] visuallyHidden「正在思考」
|
|
5
|
+
// > DisclosureRow(icon=IconThinkOutlineRegular 14px,title=t("message.think")=「思考」,running ⇒ 整行 shimmer)
|
|
6
|
+
// collapsedContent = separator(data-shimmer-decoration, 2×2px) + summary[data-streaming]
|
|
7
|
+
// > summaryText > TextShimmer(summary)
|
|
8
|
+
// content = thinkBody > MarkdownText(compact, streaming=running)
|
|
9
|
+
// 折叠态 root 固定一行高(contain:size layout + height 24px+delta);[data-preview] 缺失 ⇒ separator/summary 隐藏。
|
|
10
|
+
import { Fragment, createElement as h, useMemo, useState } from 'react';
|
|
11
|
+
import { DisclosureRow, IconThinkOutlineRegular, MarkdownText, TextShimmer } from '../../../ui/official.js';
|
|
12
|
+
import { officialClass } from '../official-classes.js';
|
|
13
|
+
import { markdownLabels } from '../../explorer/preview/md-labels.js';
|
|
14
|
+
/** 官方 firstLine(lib/client.js:6140 区):首行。 */
|
|
15
|
+
function firstLine(text) {
|
|
16
|
+
const newline = text.indexOf('\n');
|
|
17
|
+
return newline === -1 ? text : text.slice(0, newline);
|
|
18
|
+
}
|
|
19
|
+
/** 官方 reasoningText:剥掉模型签名包裹(`<signature>…</signature>`),无可见内容返回空串。 */
|
|
20
|
+
function reasoningText(text) {
|
|
21
|
+
if (text[0] !== '<')
|
|
22
|
+
return text;
|
|
23
|
+
const opening = '<signature>';
|
|
24
|
+
if (opening.startsWith(text))
|
|
25
|
+
return '';
|
|
26
|
+
if (!text.startsWith(opening))
|
|
27
|
+
return text;
|
|
28
|
+
const end = text.indexOf('</signature>', 11);
|
|
29
|
+
if (end === -1)
|
|
30
|
+
return '';
|
|
31
|
+
let start = end + 12;
|
|
32
|
+
while (start < text.length) {
|
|
33
|
+
if (text[start] === '\n')
|
|
34
|
+
start += 1;
|
|
35
|
+
else if (text[start] === '\r' && text[start + 1] === '\n')
|
|
36
|
+
start += 2;
|
|
37
|
+
else
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
return text.slice(start);
|
|
41
|
+
}
|
|
42
|
+
/** 官方 latestCompletedParagraphFirstLine:最后一段已结束段落的首行(流式预览用)。 */
|
|
43
|
+
function latestCompletedParagraphFirstLine(text) {
|
|
44
|
+
let summary = '';
|
|
45
|
+
let paragraphStart = 0;
|
|
46
|
+
const separator = /\r?\n(?:[\t ]*\r?\n)+/g;
|
|
47
|
+
for (;;) {
|
|
48
|
+
const nextParagraph = separator.exec(text);
|
|
49
|
+
const paragraphEnd = nextParagraph === null ? text.length : nextParagraph.index + nextParagraph[0].indexOf('\n');
|
|
50
|
+
const newline = text.indexOf('\n', paragraphStart);
|
|
51
|
+
if (newline !== -1 && newline <= paragraphEnd) {
|
|
52
|
+
const candidate = text.slice(paragraphStart, newline).trim();
|
|
53
|
+
if (candidate !== '')
|
|
54
|
+
summary = candidate;
|
|
55
|
+
}
|
|
56
|
+
if (nextParagraph === null)
|
|
57
|
+
return summary;
|
|
58
|
+
paragraphStart = nextParagraph.index + nextParagraph[0].length;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** 思考行:折叠 = 「思考 · 首行预览 ⌄」;展开 = thinkBody 全文(MarkdownText compact)。 */
|
|
62
|
+
export function ReasoningRowMirror(props) {
|
|
63
|
+
const { text: rawText, running = false, preview: settledPreview = true, t } = props;
|
|
64
|
+
const [open, setOpen] = useState(false);
|
|
65
|
+
const text = useMemo(() => reasoningText(rawText), [rawText]);
|
|
66
|
+
if (text !== rawText && text.trim() === '')
|
|
67
|
+
return null;
|
|
68
|
+
const summaryText = running ? latestCompletedParagraphFirstLine(text) : firstLine(text);
|
|
69
|
+
// lib 目标是 ES2020(无 String.replaceAll)⇒ split/join 等价去 `**`。
|
|
70
|
+
const summary = summaryText.split('**').join('');
|
|
71
|
+
const preview = !open && summary !== '' && (running || settledPreview);
|
|
72
|
+
return h('div', {
|
|
73
|
+
className: officialClass('ReasoningRow', 'root') ?? '',
|
|
74
|
+
'data-variant': 'think',
|
|
75
|
+
'data-state': running ? 'running' : 'ok',
|
|
76
|
+
'data-expanded': open || undefined,
|
|
77
|
+
'data-preview': preview || undefined,
|
|
78
|
+
}, running
|
|
79
|
+
? h('span', { className: officialClass('accessibility', 'visuallyHidden') ?? '' }, t('reasoningRunning'))
|
|
80
|
+
: null, h(DisclosureRow, {
|
|
81
|
+
icon: h(IconThinkOutlineRegular, { size: 14 }),
|
|
82
|
+
title: t('thinkLabel'),
|
|
83
|
+
running,
|
|
84
|
+
open,
|
|
85
|
+
expandable: true,
|
|
86
|
+
expandOnRowClick: true,
|
|
87
|
+
onToggle: () => { setOpen(value => !value); },
|
|
88
|
+
rowClassName: officialClass('ReasoningRow', 'row') ?? '',
|
|
89
|
+
leadingClassName: officialClass('ReasoningRow', 'leading') ?? '',
|
|
90
|
+
titleClassName: officialClass('ReasoningRow', 'title') ?? '',
|
|
91
|
+
collapsedContent: h(Fragment, null, h('span', {
|
|
92
|
+
className: officialClass('ReasoningRow', 'separator') ?? '',
|
|
93
|
+
'data-shimmer-decoration': true,
|
|
94
|
+
'aria-hidden': true,
|
|
95
|
+
}),
|
|
96
|
+
// 官方是 summary > summaryText 两层:外层 nowrap 截断、内层 text-overflow:ellipsis(省略号)。
|
|
97
|
+
h('span', {
|
|
98
|
+
className: officialClass('ReasoningRow', 'summary') ?? '',
|
|
99
|
+
'data-streaming': running || undefined,
|
|
100
|
+
}, h('span', { className: officialClass('ReasoningRow', 'summaryText') ?? '' }, h(TextShimmer, null, summary)))),
|
|
101
|
+
children: open
|
|
102
|
+
? h('div', { className: officialClass('ReasoningRow', 'thinkBody') ?? '' }, h(MarkdownText, {
|
|
103
|
+
text,
|
|
104
|
+
streaming: running,
|
|
105
|
+
labels: markdownLabels(),
|
|
106
|
+
variant: 'compact',
|
|
107
|
+
}))
|
|
108
|
+
: undefined,
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=ReasoningRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReasoningRow.js","sourceRoot":"","sources":["../../../../src/adv/session/mirror/ReasoningRow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createElement as h } from 'react';
|
|
2
|
+
import type { Translate } from '../../../utils/i18n.js';
|
|
3
|
+
/**
|
|
4
|
+
* 运行中状态行:会话流末尾一行「深度求索中,用时 N 秒 ···」(蓝色 shimmer)。
|
|
5
|
+
* @param startTime - 当前 turn 开始时间;undefined = 尚未起轮(只显示「深度求索中」)。
|
|
6
|
+
* @param t - 翻译席位。
|
|
7
|
+
*/
|
|
8
|
+
export declare function RunningStatusMirror(props: {
|
|
9
|
+
startTime: number | undefined;
|
|
10
|
+
t: Translate;
|
|
11
|
+
}): ReturnType<typeof h>;
|
|
12
|
+
//# sourceMappingURL=RunningStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunningStatus.d.ts","sourceRoot":"","sources":["../../../../src/adv/session/mirror/RunningStatus.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAuB,MAAM,OAAO,CAAA;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAuBvD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CA+BvB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// 官方对照:ui-chat@0.2.1-rc.5 lib/client.js:5580-5638(RunningWhaleTail + RunningStatus;
|
|
2
|
+
// 0.2.2-alpha.3 仅多 paused/holding 两个占位参数,默认渲染同构)
|
|
3
|
+
// root div.running[data-chat-running]
|
|
4
|
+
// > visuallyHidden(role=status) > runningDivider(.5px 顶部横线,官方 CSS 按「前一项是否 tail」显隐)
|
|
5
|
+
// > runningContent > runningIcon(鲸尾:animated APNG mask + still SVG 兜底)+ TextShimmer(label)
|
|
6
|
+
// label:startTime 缺失 =「深度求索中」;否则「深度求索中,用时 {duration} ···」(duration = formatRunDuration)。
|
|
7
|
+
// ⚠ 0.2.x 起运行态只由这一行代表:turn 未关闭时官方 TurnProcessNodeView 整块不渲染(见 TurnProcessNodeView.ts)。
|
|
8
|
+
import { createElement as h, useEffect, useState } from 'react';
|
|
9
|
+
import { TextShimmer } from '../../../ui/official.js';
|
|
10
|
+
import { officialClass } from '../official-classes.js';
|
|
11
|
+
import { durationText, formatRunDuration } from './message-chrome.js';
|
|
12
|
+
/** 官方 LIVE_RUN_CLOCK_INTERVAL_MS(lib/client.js:979)。 */
|
|
13
|
+
const LIVE_RUN_CLOCK_INTERVAL_MS = 1000;
|
|
14
|
+
/** 官方静态兜底 SVG 的鲸尾路径(lib/client.js:6340 REST_PATH,16×16)。 */
|
|
15
|
+
const REST_PATH = 'M8.844 13.742C8.967 12.328 8.45 10.4 8.45 9.65C8.45 8.94 8.88 8.43 9.6 8.43C11.285 8.43 12.106 8.281 12.685 8.104C13.71 7.791 14.585 6.768 15.055 5.945C15.137 5.803 14.99 5.641 14.829 5.671C13.829 5.86 12.828 5.376 11.827 4.978C10.659 4.514 9.491 4.707 8.935 4.876C8.805 4.915 8.658 4.819 8.636 4.686C8.468 3.643 7.405 2.615 5.498 2.238C4.54 2.048 3.748 1.574 3.347 1.202C3.252 1.113 3.088 1.125 3.03 1.242C2.628 2.059 2.168 3.82 5.248 6.115C5.82 6.494 6.31 6.785 6.574 7.637C6.72 8.104 6.157 9.168 6.061 9.368C5.157 11.27 5.089 12.19 4.926 13.742';
|
|
16
|
+
/** 官方 RunningWhaleTail:APNG mask 动画(官方 CSS 提供资源)+ 静态 SVG 兜底。 */
|
|
17
|
+
function RunningWhaleTail() {
|
|
18
|
+
return h('span', { className: officialClass('ChatView', 'runningIcon') ?? '', 'aria-hidden': 'true' }, h('span', { className: officialClass('ChatView', 'runningWhaleAnimated') ?? '' }), h('svg', {
|
|
19
|
+
className: officialClass('ChatView', 'runningWhaleStill') ?? '',
|
|
20
|
+
width: '100%',
|
|
21
|
+
height: '100%',
|
|
22
|
+
viewBox: '0 0 16 16',
|
|
23
|
+
fill: 'none',
|
|
24
|
+
}, h('path', { d: REST_PATH, stroke: 'currentColor', strokeWidth: 1 })));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 运行中状态行:会话流末尾一行「深度求索中,用时 N 秒 ···」(蓝色 shimmer)。
|
|
28
|
+
* @param startTime - 当前 turn 开始时间;undefined = 尚未起轮(只显示「深度求索中」)。
|
|
29
|
+
* @param t - 翻译席位。
|
|
30
|
+
*/
|
|
31
|
+
export function RunningStatusMirror(props) {
|
|
32
|
+
const { startTime, t } = props;
|
|
33
|
+
const [now, setNow] = useState(() => Date.now());
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (startTime === undefined)
|
|
36
|
+
return;
|
|
37
|
+
setNow(Date.now());
|
|
38
|
+
const timer = setInterval(() => { setNow(Date.now()); }, LIVE_RUN_CLOCK_INTERVAL_MS);
|
|
39
|
+
return () => { clearInterval(timer); };
|
|
40
|
+
}, [startTime]);
|
|
41
|
+
const label = startTime === undefined
|
|
42
|
+
? t('chatDeepDiving')
|
|
43
|
+
: t('chatDeepDivingFor', { duration: durationText(formatRunDuration(Math.max(1000, now - startTime), t)) });
|
|
44
|
+
return h('div', {
|
|
45
|
+
className: officialClass('ChatView', 'running') ?? '',
|
|
46
|
+
'data-chat-running': true,
|
|
47
|
+
}, h('span', {
|
|
48
|
+
className: officialClass('accessibility', 'visuallyHidden') ?? '',
|
|
49
|
+
role: 'status',
|
|
50
|
+
'aria-live': 'polite',
|
|
51
|
+
'aria-atomic': 'true',
|
|
52
|
+
}, t('chatDeepDiving')), h('span', { className: officialClass('ChatView', 'runningDivider') ?? '', 'aria-hidden': 'true' }), h('span', { className: officialClass('ChatView', 'runningContent') ?? '' }, h(RunningWhaleTail, null), h(TextShimmer, {
|
|
53
|
+
active: true,
|
|
54
|
+
className: officialClass('ChatView', 'runningText') ?? '',
|
|
55
|
+
}, label)));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=RunningStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunningStatus.js","sourceRoot":"","sources":["../../../../src/adv/session/mirror/RunningStatus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CSSProperties, RefObject } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* 官方 stat-dialog.ts 的 MEASURE_STYLE:首趟(pos 未定)时面板「隐藏但仍布局」,
|
|
4
|
+
* 好让 useAnchoredPosition 量到真实尺寸。官方要求面板铺 `pos ?? MEASURE_STYLE`;
|
|
5
|
+
* 漏了它 ⇒ 首趟完全无定位、面板落进文档流撑长页面(真机 2026-10-23:点用量无反应 + 滚动条变长)。
|
|
6
|
+
*/
|
|
7
|
+
export declare const STAT_MEASURE_STYLE: CSSProperties;
|
|
8
|
+
export interface StatDialogSeat {
|
|
9
|
+
open: boolean;
|
|
10
|
+
setOpen(open: boolean): void;
|
|
11
|
+
rootRef: RefObject<HTMLSpanElement | null>;
|
|
12
|
+
panelRef: RefObject<HTMLDivElement | null>;
|
|
13
|
+
pos: CSSProperties | undefined;
|
|
14
|
+
}
|
|
15
|
+
/** 官方 useStatDialog:把弹层挂在触发器上方(side: 'top'),点外 / Esc 关闭。 */
|
|
16
|
+
export declare function useStatDialog(controlled?: {
|
|
17
|
+
open?: boolean;
|
|
18
|
+
setOpen?(open: boolean): void;
|
|
19
|
+
}): StatDialogSeat;
|
|
20
|
+
//# sourceMappingURL=StatDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatDialog.d.ts","sourceRoot":"","sources":["../../../../src/adv/session/mirror/StatDialog.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMrD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAyD,CAAA;AAE1F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,CAAA;IAC1C,QAAQ,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAC1C,GAAG,EAAE,aAAa,GAAG,SAAS,CAAA;CAC/B;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,GAAG,cAAc,CA4B5G"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// 官方对照:packages/client/ui-chat/src/client/chat/stat-dialog.js(0.1.7-rc.2 lib/client.js:6278-6350)
|
|
2
|
+
// PANEL_MARGIN = 12 / PANEL_GAP = 8(lib/client.js:6281-6283)
|
|
3
|
+
// useStatDialog = 受控开关 + useAnchoredPosition(side:'top') + useDismissOnOutsidePointer + Escape 关闭。
|
|
4
|
+
// 官方用的是 primitives 的同名 hook,这里直接复用同一份实现(不是自绘定位)。
|
|
5
|
+
import { useEffect, useRef, useState } from 'react';
|
|
6
|
+
import { useAnchoredPosition, useDismissOnOutsidePointer } from '../../../ui/official.js';
|
|
7
|
+
const PANEL_MARGIN = 12;
|
|
8
|
+
const PANEL_GAP = 8;
|
|
9
|
+
/**
|
|
10
|
+
* 官方 stat-dialog.ts 的 MEASURE_STYLE:首趟(pos 未定)时面板「隐藏但仍布局」,
|
|
11
|
+
* 好让 useAnchoredPosition 量到真实尺寸。官方要求面板铺 `pos ?? MEASURE_STYLE`;
|
|
12
|
+
* 漏了它 ⇒ 首趟完全无定位、面板落进文档流撑长页面(真机 2026-10-23:点用量无反应 + 滚动条变长)。
|
|
13
|
+
*/
|
|
14
|
+
export const STAT_MEASURE_STYLE = { visibility: 'hidden', left: 0, top: 0 };
|
|
15
|
+
/** 官方 useStatDialog:把弹层挂在触发器上方(side: 'top'),点外 / Esc 关闭。 */
|
|
16
|
+
export function useStatDialog(controlled) {
|
|
17
|
+
const [ownOpen, setOwnOpen] = useState(false);
|
|
18
|
+
const open = controlled?.open ?? ownOpen;
|
|
19
|
+
const setOpen = controlled?.setOpen ?? setOwnOpen;
|
|
20
|
+
const rootRef = useRef(null);
|
|
21
|
+
const panelRef = useRef(null);
|
|
22
|
+
const pos = useAnchoredPosition({ open, anchorRef: rootRef, panelRef, side: 'top', gap: PANEL_GAP, margin: PANEL_MARGIN });
|
|
23
|
+
useDismissOnOutsidePointer(rootRef, open, setOpen, panelRef);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (!open)
|
|
26
|
+
return;
|
|
27
|
+
const onKeyDown = (event) => {
|
|
28
|
+
if (event.key === 'Escape')
|
|
29
|
+
setOpen(false);
|
|
30
|
+
};
|
|
31
|
+
// 官方 chat:6806-6820:pointerdown 之外还要捕获阶段 click(只发 click 的交互也得关)。
|
|
32
|
+
const onClick = (event) => {
|
|
33
|
+
const target = event.target;
|
|
34
|
+
if (!(target instanceof Node))
|
|
35
|
+
return;
|
|
36
|
+
if (rootRef.current?.contains(target) === true || panelRef.current?.contains(target) === true)
|
|
37
|
+
return;
|
|
38
|
+
setOpen(false);
|
|
39
|
+
};
|
|
40
|
+
document.addEventListener('keydown', onKeyDown);
|
|
41
|
+
document.addEventListener('click', onClick, true);
|
|
42
|
+
return () => {
|
|
43
|
+
document.removeEventListener('keydown', onKeyDown);
|
|
44
|
+
document.removeEventListener('click', onClick, true);
|
|
45
|
+
};
|
|
46
|
+
}, [open, setOpen]);
|
|
47
|
+
return { open, setOpen, rootRef, panelRef, pos };
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=StatDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatDialog.js","sourceRoot":"","sources":["../../../../src/adv/session/mirror/StatDialog.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,+DAA+D;AAC/D,qGAAqG;AACrG,iDAAiD;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEnD,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AAEzF,MAAM,YAAY,GAAG,EAAE,CAAA;AACvB,MAAM,SAAS,GAAG,CAAC,CAAA;AAEnB;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAkB,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;AAU1F,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CAAC,UAA8D;IAC1F,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAA;IACtD,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,IAAI,OAAO,CAAA;IACxC,MAAM,OAAO,GAAG,UAAU,EAAE,OAAO,IAAI,UAAU,CAAA;IACjD,MAAM,OAAO,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAA;IACpD,MAAM,GAAG,GAAG,mBAAmB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;IAC1H,0BAA0B,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC5D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,MAAM,SAAS,GAAG,CAAC,KAAoB,EAAQ,EAAE;YAC/C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5C,CAAC,CAAA;QACD,iEAAiE;QACjE,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAQ,EAAE;YAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;YAC3B,IAAI,CAAC,CAAC,MAAM,YAAY,IAAI,CAAC;gBAAE,OAAM;YACrC,IAAI,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI;gBAAE,OAAM;YACrG,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC,CAAA;QACD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC/C,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QACjD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAClD,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QACtD,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IACnB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAA;AAClD,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type ReactElement } from 'react';
|
|
2
|
+
import { type Translate } from '../../../utils/i18n.js';
|
|
3
|
+
export interface DetailField {
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
}
|
|
7
|
+
export interface DetailItemModel {
|
|
8
|
+
title?: string;
|
|
9
|
+
subtitle?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
fields: DetailField[];
|
|
12
|
+
lines?: readonly string[];
|
|
13
|
+
status?: {
|
|
14
|
+
value: 'completed' | 'in_progress' | 'pending';
|
|
15
|
+
label: string;
|
|
16
|
+
};
|
|
17
|
+
badge?: {
|
|
18
|
+
tone?: string;
|
|
19
|
+
label: string;
|
|
20
|
+
};
|
|
21
|
+
location?: {
|
|
22
|
+
path: string;
|
|
23
|
+
line?: number;
|
|
24
|
+
};
|
|
25
|
+
change?: {
|
|
26
|
+
value?: 'added' | 'removed' | 'updated';
|
|
27
|
+
label: string;
|
|
28
|
+
};
|
|
29
|
+
previousStatus?: string;
|
|
30
|
+
markdown?: string;
|
|
31
|
+
code?: {
|
|
32
|
+
text: string;
|
|
33
|
+
language?: string;
|
|
34
|
+
};
|
|
35
|
+
groups?: {
|
|
36
|
+
label: string;
|
|
37
|
+
items: DetailItemModel[];
|
|
38
|
+
}[];
|
|
39
|
+
}
|
|
40
|
+
export interface ToolDetailsModel {
|
|
41
|
+
items: DetailItemModel[];
|
|
42
|
+
summary?: string;
|
|
43
|
+
empty?: string;
|
|
44
|
+
caption?: string;
|
|
45
|
+
unchanged?: {
|
|
46
|
+
label: string;
|
|
47
|
+
items: DetailItemModel[];
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 官方 detailsCardModel(3985-4029)的「目标 / 定时任务」子集。
|
|
52
|
+
* 结算成功且结果为合法 JSON 才出详情卡;其余一律 null ⇒ 调用方走 ioCard 兜底。
|
|
53
|
+
*/
|
|
54
|
+
export declare function detailsCardModel(name: string, argsRaw: string, output: string, settled: boolean, isError: boolean, t: Translate): ToolDetailsModel | null;
|
|
55
|
+
/** 官方 DetailsRow 的摘要优先级(4080):summary → 第一项 title → empty → 原摘要。 */
|
|
56
|
+
export declare function detailsSummary(model: ToolDetailsModel): string | undefined;
|
|
57
|
+
/** 官方 ToolDetails(1458-1492):caption + 空态 / 列表 + 可折叠的「未变更」组。 */
|
|
58
|
+
export declare function ToolDetailsView({ model, t, onOpenFile }: {
|
|
59
|
+
model: ToolDetailsModel;
|
|
60
|
+
t: Translate;
|
|
61
|
+
onOpenFile?: (path: string, options?: {
|
|
62
|
+
line?: number;
|
|
63
|
+
}) => void;
|
|
64
|
+
}): ReactElement;
|
|
65
|
+
//# sourceMappingURL=ToolDetails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolDetails.d.ts","sourceRoot":"","sources":["../../../../src/adv/session/mirror/ToolDetails.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,OAAO,CAAA;AAU7D,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlE,MAAM,WAAW,WAAW;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAC7D,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1E,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACxC,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACnE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,eAAe,EAAE,CAAA;KAAE,EAAE,CAAA;CACvD;AACD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,eAAe,EAAE,CAAA;KAAE,CAAA;CACxD;AAqID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAmCzJ;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAE1E;AA4ED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE;IACxD,KAAK,EAAE,gBAAgB,CAAA;IACvB,CAAC,EAAE,SAAS,CAAA;IACZ,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACjE,GAAG,YAAY,CAcf"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
// 官方对照:ui-tool `components/ToolDetails`(lib/client.js:1357-1492)
|
|
2
|
+
// + `models/details-card-model`(:2988-3010、:3805-3821、:3854-3977、:3985-4029)。
|
|
3
|
+
//
|
|
4
|
+
// 本轮只移植「目标 / 定时任务」两族的模型(官方 `controlDetails` / `inspectionDetails`
|
|
5
|
+
// 那 400+ 行仍落回 ioCard);视图保留这两族真正会用到的字段。
|
|
6
|
+
// shortcut: control/inspection 系工具无专属详情,等宿主真机有样本再按同一模型接口补。
|
|
7
|
+
import { createElement as h } from 'react';
|
|
8
|
+
import { CodeBlock, IconCheckOutlineRegular, IconChevronRightOutlineRegular, IconPlayOutlineRegular, MarkdownText, } from '../../../ui/official.js';
|
|
9
|
+
import { officialClass } from '../official-classes.js';
|
|
10
|
+
import { markdownLabels } from '../../explorer/preview/md-labels.js';
|
|
11
|
+
import { getLocale } from '../../../utils/i18n.js';
|
|
12
|
+
import { controlDetails, inspectionDetails } from './control-details.js';
|
|
13
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
14
|
+
const nonempty = (value) => typeof value === 'string' && value.trim() !== '';
|
|
15
|
+
const count = (value) => typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
|
|
16
|
+
function detailJson(text) {
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(text);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** 官方 formatDate(3808-3821):本地化绝对时间,格式化失败退回原始 ISO 串。 */
|
|
25
|
+
function formatDate(date, fallback) {
|
|
26
|
+
try {
|
|
27
|
+
return new Intl.DateTimeFormat(getLocale(), {
|
|
28
|
+
year: 'numeric', month: 'short', day: 'numeric',
|
|
29
|
+
hour: '2-digit', minute: '2-digit', second: '2-digit', timeZoneName: 'short',
|
|
30
|
+
}).format(date);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return fallback;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** 官方 goalDetail(3854-3883):形状不全一律返回 null ⇒ 落回 ioCard,不半渲染。 */
|
|
37
|
+
function goalDetail(value, t) {
|
|
38
|
+
if (!isRecord(value))
|
|
39
|
+
return null;
|
|
40
|
+
if (value.goal === null)
|
|
41
|
+
return { items: [], empty: t('detailGoalEmpty') };
|
|
42
|
+
const goal = value.goal;
|
|
43
|
+
if (!isRecord(goal) || !nonempty(goal.id) || !nonempty(goal.objective))
|
|
44
|
+
return null;
|
|
45
|
+
if (!count(goal.revision) || !count(goal.roundsStarted) || !count(goal.maxGoalRounds))
|
|
46
|
+
return null;
|
|
47
|
+
const phase = goal.phase;
|
|
48
|
+
if (phase !== 'active' && phase !== 'paused' && phase !== 'blocked' && phase !== 'complete')
|
|
49
|
+
return null;
|
|
50
|
+
if (value.activation !== 'armed' && value.activation !== 'disarmed')
|
|
51
|
+
return null;
|
|
52
|
+
const phases = {
|
|
53
|
+
active: () => t('detailGoalActive'),
|
|
54
|
+
paused: () => t('detailGoalPaused'),
|
|
55
|
+
blocked: () => t('detailGoalBlocked'),
|
|
56
|
+
complete: () => t('detailGoalComplete'),
|
|
57
|
+
};
|
|
58
|
+
const fields = [
|
|
59
|
+
{
|
|
60
|
+
label: t('detailState'),
|
|
61
|
+
value: phase === 'active' && value.activation === 'disarmed' ? t('detailGoalDisarmed') : phases[phase](),
|
|
62
|
+
},
|
|
63
|
+
{ label: t('detailGoalRounds'), value: `${goal.roundsStarted} / ${goal.maxGoalRounds}` },
|
|
64
|
+
];
|
|
65
|
+
if (goal.blockedReason !== undefined) {
|
|
66
|
+
const reason = goal.blockedReason;
|
|
67
|
+
if (!isRecord(reason) || !nonempty(reason.code) || !nonempty(reason.message))
|
|
68
|
+
return null;
|
|
69
|
+
fields.push({ label: t('detailGoalReason'), value: reason.message });
|
|
70
|
+
}
|
|
71
|
+
return { items: [{ title: goal.objective, fields }] };
|
|
72
|
+
}
|
|
73
|
+
const WEEKDAY_KEYS = [
|
|
74
|
+
'detailWeekday1', 'detailWeekday2', 'detailWeekday3', 'detailWeekday4',
|
|
75
|
+
'detailWeekday5', 'detailWeekday6', 'detailWeekday7',
|
|
76
|
+
];
|
|
77
|
+
/** 官方 interval(3894-3899)。 */
|
|
78
|
+
function interval(seconds, t) {
|
|
79
|
+
if (seconds % 86400 === 0)
|
|
80
|
+
return t('detailDays', { count: seconds / 86400 });
|
|
81
|
+
if (seconds % 3600 === 0)
|
|
82
|
+
return t('detailHours', { count: seconds / 3600 });
|
|
83
|
+
if (seconds % 60 === 0)
|
|
84
|
+
return t('detailMinutes', { count: seconds / 60 });
|
|
85
|
+
return t('detailSeconds', { count: seconds });
|
|
86
|
+
}
|
|
87
|
+
const shortTime = (time) => time.replace(/:00\.000$/, '').replace(/\.000$/, '');
|
|
88
|
+
function weekdayText(days, t) {
|
|
89
|
+
if (!Array.isArray(days) || days.length === 0)
|
|
90
|
+
return undefined;
|
|
91
|
+
const labels = [];
|
|
92
|
+
for (const day of days) {
|
|
93
|
+
if (typeof day !== 'number' || !Number.isInteger(day))
|
|
94
|
+
return undefined;
|
|
95
|
+
const key = WEEKDAY_KEYS[day - 1];
|
|
96
|
+
if (key === undefined)
|
|
97
|
+
return undefined;
|
|
98
|
+
labels.push(t(key));
|
|
99
|
+
}
|
|
100
|
+
return labels.join(t('detailWeekdayJoin'));
|
|
101
|
+
}
|
|
102
|
+
/** 官方 scheduleItem(3916-3977):只认形状齐全、时间可解析的记录。 */
|
|
103
|
+
function scheduleItem(value, t) {
|
|
104
|
+
if (!isRecord(value) || !nonempty(value.id) || !nonempty(value.prompt))
|
|
105
|
+
return null;
|
|
106
|
+
if (typeof value.scheduledAt !== 'string')
|
|
107
|
+
return null;
|
|
108
|
+
if (value.deliveryMode !== 'host' && value.deliveryMode !== 'session-local')
|
|
109
|
+
return null;
|
|
110
|
+
if (value.state !== 'scheduled' && value.state !== 'overdue')
|
|
111
|
+
return null;
|
|
112
|
+
const date = new Date(value.scheduledAt);
|
|
113
|
+
if (!Number.isFinite(date.getTime()) || date.toISOString() !== value.scheduledAt)
|
|
114
|
+
return null;
|
|
115
|
+
let frequency;
|
|
116
|
+
switch (value.kind) {
|
|
117
|
+
case 'at':
|
|
118
|
+
frequency = t('detailScheduleOnce');
|
|
119
|
+
break;
|
|
120
|
+
case 'after':
|
|
121
|
+
if (!count(value.afterSeconds) || value.afterSeconds === 0)
|
|
122
|
+
return null;
|
|
123
|
+
frequency = t('detailScheduleOnce');
|
|
124
|
+
break;
|
|
125
|
+
case 'every':
|
|
126
|
+
if (!count(value.everySeconds) || value.everySeconds === 0)
|
|
127
|
+
return null;
|
|
128
|
+
frequency = t('detailScheduleEvery', { interval: interval(value.everySeconds, t) });
|
|
129
|
+
break;
|
|
130
|
+
case 'daily':
|
|
131
|
+
if (!nonempty(value.time) || !nonempty(value.timeZone))
|
|
132
|
+
return null;
|
|
133
|
+
frequency = t('detailScheduleDaily', { time: shortTime(value.time), zone: value.timeZone });
|
|
134
|
+
break;
|
|
135
|
+
case 'weekly': {
|
|
136
|
+
const days = weekdayText(value.weekdays, t);
|
|
137
|
+
if (!nonempty(value.time) || !nonempty(value.timeZone) || days === undefined)
|
|
138
|
+
return null;
|
|
139
|
+
frequency = t('detailScheduleWeekly', { days, time: shortTime(value.time), zone: value.timeZone });
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
case 'cron':
|
|
143
|
+
if (!nonempty(value.expression) || !nonempty(value.timeZone))
|
|
144
|
+
return null;
|
|
145
|
+
frequency = t('detailScheduleCron', { expression: value.expression, zone: value.timeZone });
|
|
146
|
+
break;
|
|
147
|
+
default:
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
title: nonempty(value.title) ? value.title : value.prompt,
|
|
152
|
+
fields: [
|
|
153
|
+
{ label: t('detailScheduleWhen'), value: formatDate(date, value.scheduledAt) },
|
|
154
|
+
{ label: t('detailScheduleFrequency'), value: frequency },
|
|
155
|
+
{ label: t('detailState'), value: value.state === 'scheduled' ? t('detailScheduleScheduled') : t('detailScheduleOverdue') },
|
|
156
|
+
],
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 官方 detailsCardModel(3985-4029)的「目标 / 定时任务」子集。
|
|
161
|
+
* 结算成功且结果为合法 JSON 才出详情卡;其余一律 null ⇒ 调用方走 ioCard 兜底。
|
|
162
|
+
*/
|
|
163
|
+
export function detailsCardModel(name, argsRaw, output, settled, isError, t) {
|
|
164
|
+
if (!settled || isError || output === '')
|
|
165
|
+
return null;
|
|
166
|
+
const args = detailJson(argsRaw);
|
|
167
|
+
if (!isRecord(args))
|
|
168
|
+
return null;
|
|
169
|
+
const value = detailJson(output);
|
|
170
|
+
// 官方顺序(3992):control → inspection → goal/schedule;前两者吃文本格式,JSON 解析失败也可能出卡。
|
|
171
|
+
const recorded = controlDetails(name, args, output, value, t) ?? inspectionDetails(name, args, output, value, t);
|
|
172
|
+
if (recorded !== null)
|
|
173
|
+
return recorded;
|
|
174
|
+
if (value === undefined)
|
|
175
|
+
return null;
|
|
176
|
+
switch (name) {
|
|
177
|
+
case 'create_goal':
|
|
178
|
+
case 'get_goal':
|
|
179
|
+
case 'update_goal':
|
|
180
|
+
return goalDetail(value, t);
|
|
181
|
+
case 'schedule_create':
|
|
182
|
+
case 'schedule_update': {
|
|
183
|
+
const item = scheduleItem(value, t);
|
|
184
|
+
return item === null ? null : { items: [item] };
|
|
185
|
+
}
|
|
186
|
+
case 'schedule_list': {
|
|
187
|
+
if (!Array.isArray(value))
|
|
188
|
+
return null;
|
|
189
|
+
const items = [];
|
|
190
|
+
for (const entry of value) {
|
|
191
|
+
const item = scheduleItem(entry, t);
|
|
192
|
+
if (item === null)
|
|
193
|
+
return null;
|
|
194
|
+
items.push(item);
|
|
195
|
+
}
|
|
196
|
+
return { items, summary: t('detailScheduleCount', { count: items.length }), empty: t('detailScheduleEmpty') };
|
|
197
|
+
}
|
|
198
|
+
case 'schedule_delete':
|
|
199
|
+
if (!isRecord(value) || !nonempty(value.id) || value.deleted !== true)
|
|
200
|
+
return null;
|
|
201
|
+
return { items: [{ title: value.id, fields: [{ label: t('detailState'), value: t('detailScheduleDeleted') }] }] };
|
|
202
|
+
default:
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/** 官方 DetailsRow 的摘要优先级(4080):summary → 第一项 title → empty → 原摘要。 */
|
|
207
|
+
export function detailsSummary(model) {
|
|
208
|
+
return model.summary ?? model.items[0]?.title ?? model.empty;
|
|
209
|
+
}
|
|
210
|
+
/** 官方 DetailItem(1357-1449)本轮用到的字段;markdown/code/groups 由后续模型补齐。 */
|
|
211
|
+
function DetailItem({ item, t, onOpenFile }) {
|
|
212
|
+
const cls = (semantic) => officialClass('ToolDetails', semantic) ?? '';
|
|
213
|
+
const status = item.status;
|
|
214
|
+
return h('li', { className: cls('item'), 'data-change': item.change?.value }, item.title !== undefined
|
|
215
|
+
? h('div', { className: cls('heading') }, status !== undefined
|
|
216
|
+
? h('span', { className: cls('status'), role: 'img', 'aria-label': item.change?.label ?? status.label }, item.change?.value === 'added' ? '+' : item.change?.value === 'removed' ? '−'
|
|
217
|
+
: status.value === 'completed' ? h(IconCheckOutlineRegular, { size: 14 })
|
|
218
|
+
: status.value === 'in_progress' ? h(IconPlayOutlineRegular, { size: 14 })
|
|
219
|
+
: h('span', { className: cls('pending') }))
|
|
220
|
+
: null, item.location !== undefined && onOpenFile !== undefined
|
|
221
|
+
? h('button', {
|
|
222
|
+
className: cls('path'), type: 'button',
|
|
223
|
+
onClick: () => {
|
|
224
|
+
const location = item.location;
|
|
225
|
+
if (location !== undefined) {
|
|
226
|
+
if (location.line === undefined)
|
|
227
|
+
onOpenFile(location.path);
|
|
228
|
+
else
|
|
229
|
+
onOpenFile(location.path, { line: location.line });
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
}, item.title)
|
|
233
|
+
: h('span', { className: cls('text') }, item.title), item.badge !== undefined
|
|
234
|
+
? h('span', { className: cls('badge'), 'data-tone': item.badge.tone }, item.badge.label)
|
|
235
|
+
: null, status !== undefined
|
|
236
|
+
? h('span', { className: cls('statusText') }, item.previousStatus !== undefined
|
|
237
|
+
? h('span', null, h('span', { className: cls('previous') }, item.previousStatus), h('span', null, ' → '))
|
|
238
|
+
: null, h('span', null, status.label), item.change?.value === 'updated' && item.previousStatus === undefined
|
|
239
|
+
? h('span', null, ' · ', item.change.label)
|
|
240
|
+
: null)
|
|
241
|
+
: null)
|
|
242
|
+
: null, item.subtitle !== undefined ? h('div', { className: cls('subtitle') }, item.subtitle) : null, item.description !== undefined ? h('p', { className: cls('description') }, item.description) : null, item.fields.length > 0
|
|
243
|
+
? h('dl', { className: cls('fields') }, item.fields.map(field => h('div', { key: field.label, className: cls('field') }, h('dt', null, field.label), h('dd', null, field.value))))
|
|
244
|
+
: null, item.lines !== undefined
|
|
245
|
+
? h('ul', { className: cls('lines') }, item.lines.map((line, index) => h('li', { key: index }, line)))
|
|
246
|
+
: null, item.markdown !== undefined
|
|
247
|
+
? h('div', { className: cls('prose') }, h(MarkdownText, { text: item.markdown, labels: markdownLabels() }))
|
|
248
|
+
: null, item.code !== undefined
|
|
249
|
+
? h(CodeBlock, {
|
|
250
|
+
code: item.code.text,
|
|
251
|
+
lang: item.code.language,
|
|
252
|
+
toolbarLabels: { codeLabel: t('codeBlockLabel'), wrapLabel: t('diffWrapLabel'), unwrapLabel: t('diffUnwrapLabel') },
|
|
253
|
+
copyLabel: t('copyLabel'),
|
|
254
|
+
copiedLabel: t('copiedLabel'),
|
|
255
|
+
className: cls('code'),
|
|
256
|
+
})
|
|
257
|
+
: null, ...(item.groups ?? []).map((group, index) => h('details', { key: index, className: cls('group') }, h('summary', null, h(IconChevronRightOutlineRegular), h('span', null, group.label)), h('ul', { className: cls('list') }, group.items.map((child, childIndex) => h(DetailItem, { key: childIndex, item: child, t, onOpenFile }))))));
|
|
258
|
+
}
|
|
259
|
+
/** 官方 ToolDetails(1458-1492):caption + 空态 / 列表 + 可折叠的「未变更」组。 */
|
|
260
|
+
export function ToolDetailsView({ model, t, onOpenFile }) {
|
|
261
|
+
const cls = (semantic) => officialClass('ToolDetails', semantic) ?? '';
|
|
262
|
+
return h('div', { className: cls('root'), 'data-caption': model.caption !== undefined || undefined }, model.caption !== undefined ? h('div', { className: cls('caption') }, model.caption) : null, model.items.length === 0
|
|
263
|
+
? h('p', { className: cls('empty') }, model.empty)
|
|
264
|
+
: h('ul', { className: cls('list') }, model.items.map((item, index) => h(DetailItem, { key: index, item, t, onOpenFile }))), model.unchanged !== undefined
|
|
265
|
+
? h('details', { className: cls('unchanged') }, h('summary', null, h(IconChevronRightOutlineRegular), model.unchanged.label), h('ul', { className: cls('list') }, model.unchanged.items.map((item, index) => h(DetailItem, { key: index, item, t, onOpenFile }))))
|
|
266
|
+
: null);
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=ToolDetails.js.map
|