@qwen-code/web-shell 0.24.4 → 0.24.5-nightly.20260925.c3a4058a0c
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 +152 -1
- package/dist/code-highlighter.js +4 -0
- package/dist/codeHighlighter-pfciSYNN.js +89 -0
- package/dist/daemon-react-sdk.js +1 -1
- package/dist/index.js +49184 -44478
- package/dist/sw.js +1 -1
- package/dist/{toolNames-Cnaa5VCB.js → toolNames-C6S4xtsA.js} +7018 -6371
- package/dist/transcript.js +11334 -10857
- package/dist/types/App.d.ts +18 -3
- package/dist/types/App.typecheck.d.ts +6 -0
- package/dist/types/ManagedAgentWebShell.d.ts +17 -0
- package/dist/types/adapters/toolClassification.d.ts +1 -0
- package/dist/types/adapters/transcriptToMessages.d.ts +3 -2
- package/dist/types/code-highlighter.d.ts +6 -0
- package/dist/types/components/BranchPickerPopover.d.ts +3 -1
- package/dist/types/components/ChatEditor.d.ts +2 -0
- package/dist/types/components/ChatPane.d.ts +5 -3
- package/dist/types/components/ConversationSearch.d.ts +18 -0
- package/dist/types/components/GlobalTurnNavigation.d.ts +3 -1
- package/dist/types/components/MessageList.d.ts +10 -2
- package/dist/types/components/MessageTimestamp.d.ts +4 -1
- package/dist/types/components/SplitView.d.ts +3 -1
- package/dist/types/components/WorkspaceSessionProvider.d.ts +2 -0
- package/dist/types/components/artifacts/ArtifactPanel.d.ts +18 -1
- package/dist/types/components/artifacts/SideTaskPanel.d.ts +5 -1
- package/dist/types/components/artifacts/TrajectoryOverview.d.ts +71 -0
- package/dist/types/components/artifacts/TurnCallPromptSelect.d.ts +9 -0
- package/dist/types/components/artifacts/TurnCallsPanel.d.ts +38 -0
- package/dist/types/components/artifacts/TurnOutputs.d.ts +6 -1
- package/dist/types/components/artifacts/loadTurnCalls.d.ts +4 -0
- package/dist/types/components/channels/channel-editor-state.d.ts +9 -3
- package/dist/types/components/conversation-search-i18n.d.ts +6 -0
- package/dist/types/components/dialogs/DeleteSessionDialog.d.ts +9 -1
- package/dist/types/components/dialogs/GitDialog.d.ts +6 -2
- package/dist/types/components/dialogs/GitWorktreesDialog.d.ts +11 -0
- package/dist/types/components/managed/ManagedSessionProgress.d.ts +6 -0
- package/dist/types/components/managed/ManagedSessionsPage.d.ts +7 -0
- package/dist/types/components/managed/java-managed-agent-client.d.ts +140 -0
- package/dist/types/components/managed/java-managed-agent-event-projector.d.ts +5 -0
- package/dist/types/components/managed/java-managed-agent-provider.d.ts +8 -0
- package/dist/types/components/managed/managed-agent-provider.d.ts +77 -0
- package/dist/types/components/managed/managed-session-messages.d.ts +4 -0
- package/dist/types/components/managed/managed-session-storage.d.ts +7 -0
- package/dist/types/components/managed/use-managed-session.d.ts +12 -0
- package/dist/types/components/messages/AuthMessage.d.ts +2 -1
- package/dist/types/components/messages/LinkifiedText.d.ts +1 -1
- package/dist/types/components/messages/ModelManagementSection.d.ts +3 -2
- package/dist/types/components/messages/PlanExecutionView.d.ts +14 -66
- package/dist/types/components/messages/SettingsMessage.d.ts +2 -2
- package/dist/types/components/messages/ToolFilePreviewButton.d.ts +2 -1
- package/dist/types/components/messages/ToolGroup.d.ts +3 -0
- package/dist/types/components/messages/codeHighlighter.d.ts +7 -0
- package/dist/types/components/messages/taskExecutionIndex.d.ts +80 -0
- package/dist/types/components/messages/toolFormatting.d.ts +3 -0
- package/dist/types/components/panels/EnvironmentPanel.d.ts +2 -1
- package/dist/types/components/sidebar/WebShellSidebar.d.ts +12 -3
- package/dist/types/components/sidebar/WorkspaceSection.d.ts +8 -1
- package/dist/types/components/workflow/SessionWorkflowCockpit.d.ts +8 -1
- package/dist/types/components/workflow/SessionWorkflowInspector.d.ts +8 -1
- package/dist/types/components/workflow/session-workflow-model.d.ts +9 -1
- package/dist/types/customization.d.ts +9 -1
- package/dist/types/daemon/session/actions.d.ts +1 -1
- package/dist/types/daemon/session/transcript-page-table.d.ts +1 -1
- package/dist/types/daemon/session/turn-navigation-store.d.ts +32 -0
- package/dist/types/daemon/session/types.d.ts +3 -1
- package/dist/types/hooks/useMessageNavigation.d.ts +12 -0
- package/dist/types/hooks/useQueuedPrompts.d.ts +4 -1
- package/dist/types/hooks/useTranscriptViewport.d.ts +4 -1
- package/dist/types/index.d.ts +17 -1
- package/dist/types/live/live-presence.d.ts +14 -0
- package/dist/types/live/screen-feed-sampler.d.ts +12 -0
- package/dist/types/live/useLiveBrowserHost.d.ts +7 -0
- package/dist/types/live/useLiveVoice.d.ts +2 -0
- package/dist/types/modelManagement.d.ts +16 -0
- package/dist/types/navigation.d.ts +37 -0
- package/dist/types/trajectory/buildTimeline.d.ts +67 -0
- package/dist/types/trajectory/timelineRange.d.ts +27 -0
- package/dist/types/trajectory/transcriptPageLoader.d.ts +4 -2
- package/dist/types/trajectory/types.d.ts +3 -3
- package/dist/types/trajectory/useTrajectoryWindow.d.ts +55 -17
- package/dist/types/turnCallsContext.d.ts +12 -0
- package/dist/types/utils/navigationUrl.d.ts +21 -0
- package/dist/types/utils/popoverRoom.d.ts +22 -0
- package/dist/types/utils/sessionPath.d.ts +1 -0
- package/package.json +5 -1
package/dist/types/App.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
import { type WebShellModelManagementOptions } from './modelManagement';
|
|
1
2
|
import './styles/globals.css';
|
|
3
|
+
import { type WebShellMessageNavigationRequest, type WebShellMessageNavigationResult } from './hooks/useMessageNavigation';
|
|
2
4
|
import { type DaemonProductSessionContext, type DaemonStreamingState } from '@qwen-code/web-shell/daemon-react-sdk';
|
|
3
5
|
import type { DaemonAgentTrace, DaemonSessionAgentTaskStatus, DaemonTranscriptBlock, DaemonSessionMonitorTaskStatus, DaemonSessionTaskWithWorkflowStatus, DaemonWorkspaceCapability } from '@qwen-code/sdk/daemon';
|
|
4
6
|
import { type ComposerToolbarAction } from './components/ChatEditor';
|
|
5
7
|
import { type ToastTone } from './components/ToastHost';
|
|
6
8
|
import { type EnvironmentAgentTask } from './components/panels/EnvironmentPanel';
|
|
7
9
|
import { type ModelDialogModel } from './components/dialogs/ModelDialog';
|
|
10
|
+
import type { ManagedAgentProvider } from './components/managed/managed-agent-provider';
|
|
8
11
|
import type { PaneHeaderActionsRenderer } from './components/ChatPane';
|
|
9
12
|
import { type SideTaskListItem } from './components/artifacts/ArtifactPanel';
|
|
10
|
-
import type { TurnOutputKind, TurnOutputOpenRequest } from './components/artifacts/TurnOutputs';
|
|
13
|
+
import type { ArtifactFilter, TurnOutputKind, TurnOutputOpenRequest } from './components/artifacts/TurnOutputs';
|
|
11
14
|
import { type WebShellSettingsOptions } from './settings';
|
|
12
15
|
import { type WebShellShadowDom } from './shadowDom';
|
|
13
16
|
import { type WebShellSidebarBranding, type WebShellSidebarFooterOptions, type WebShellSidebarWorkspaceOverviewOptions, type WebShellSidebarLockedWorkspace, type WebShellSidebarPrimaryNavOptions, type WebShellSidebarSessionActionsOptions } from './components/sidebar/WebShellSidebar';
|
|
@@ -64,6 +67,8 @@ export type SessionChangeEvent = {
|
|
|
64
67
|
error?: Error;
|
|
65
68
|
};
|
|
66
69
|
export interface WebShellApi {
|
|
70
|
+
/** 按持久化记录 ID 定位当前会话消息,包含尚未渲染的历史。宿主先切换会话。 */
|
|
71
|
+
navigateToMessage: (request: WebShellMessageNavigationRequest) => Promise<WebShellMessageNavigationResult>;
|
|
67
72
|
/** Open the in-window split view, matching the built-in sidebar button. */
|
|
68
73
|
openSplitView: () => void;
|
|
69
74
|
/** Open the Session Overview panel, matching the built-in sidebar button. */
|
|
@@ -94,6 +99,8 @@ export type WebShellSlashCommandHandler = (command: WebShellSlashCommand) => boo
|
|
|
94
99
|
export interface WebShellProps {
|
|
95
100
|
/** Native settings-page presentation. Does not restrict commands or daemon access. */
|
|
96
101
|
settings?: WebShellSettingsOptions;
|
|
102
|
+
/** Model add/delete interactions across WebShell. Not a backend permission policy. */
|
|
103
|
+
modelManagement?: WebShellModelManagementOptions;
|
|
97
104
|
/** Host-specific label for the Ask User Question free-text choice. */
|
|
98
105
|
askUserFreeTextLabel?: string;
|
|
99
106
|
/** Called whenever the attached daemon session or workspace changes. */
|
|
@@ -105,6 +112,8 @@ export interface WebShellProps {
|
|
|
105
112
|
}) => void;
|
|
106
113
|
/** Called after a new session is created. Session setup waits up to 30 seconds. */
|
|
107
114
|
onSessionCreated?: (sessionId: string) => Promise<void> | void;
|
|
115
|
+
/** Explicit Managed Agent backend. Omit to keep the daemon provider unchanged. */
|
|
116
|
+
managedAgentProvider?: ManagedAgentProvider;
|
|
108
117
|
/** Visual theme for the embedded shell. */
|
|
109
118
|
theme?: WebShellTheme;
|
|
110
119
|
/** Called when `/theme` changes the web-shell theme. */
|
|
@@ -158,6 +167,8 @@ export interface WebShellProps {
|
|
|
158
167
|
header?: WebShellChatHeaderOptions;
|
|
159
168
|
/** Right extension panel options. */
|
|
160
169
|
rightPanel?: WebShellRightPanelOptions;
|
|
170
|
+
/** Show the tool-call entry on user messages. Defaults to false. */
|
|
171
|
+
showToolCalls?: boolean;
|
|
161
172
|
/** Environment information panel options. */
|
|
162
173
|
environmentPanel?: WebShellEnvironmentPanelOptions;
|
|
163
174
|
/** Session ids to control the split view; an empty array closes it. */
|
|
@@ -173,8 +184,9 @@ export interface WebShellProps {
|
|
|
173
184
|
/**
|
|
174
185
|
* Called instead of the built-in right panel open behavior when a user clicks
|
|
175
186
|
* a turn output such as review changes, an artifact, or a scheduled task.
|
|
187
|
+
* Return false to use the built-in behavior; true or undefined claims the open.
|
|
176
188
|
*/
|
|
177
|
-
onRightPanelOpen?: (request: TurnOutputOpenRequest) => void;
|
|
189
|
+
onRightPanelOpen?: ((request: TurnOutputOpenRequest) => void) | ((request: TurnOutputOpenRequest) => boolean);
|
|
178
190
|
/** Override file-review links without replacing the other right panels. */
|
|
179
191
|
onFileReviewOpen?: (request: Extract<TurnOutputOpenRequest, {
|
|
180
192
|
kind: 'review';
|
|
@@ -189,6 +201,7 @@ export interface WebShellProps {
|
|
|
189
201
|
* Controls which turn output cards appear below messages. Defaults to all.
|
|
190
202
|
*/
|
|
191
203
|
messageTurnOutputs?: readonly TurnOutputKind[];
|
|
204
|
+
filterArtifact?: ArtifactFilter;
|
|
192
205
|
/** Imperative handle for externally opening WebShell surfaces. */
|
|
193
206
|
shellRef?: React.Ref<WebShellApi>;
|
|
194
207
|
/**
|
|
@@ -362,6 +375,8 @@ export interface WebShellProps {
|
|
|
362
375
|
markdownTableMode?: MarkdownTableMode;
|
|
363
376
|
/** Enable virtual scrolling only when rendered transcript rows exceed this threshold. Defaults to 200. */
|
|
364
377
|
virtualScrollThreshold?: number;
|
|
378
|
+
/** 会话消息数超过此阈值时显示搜索入口,默认 10。 */
|
|
379
|
+
conversationSearchThreshold?: number;
|
|
365
380
|
/** Custom Markdown behavior for assistant content only. */
|
|
366
381
|
markdown?: WebShellMarkdownCustomization;
|
|
367
382
|
/**
|
|
@@ -427,4 +442,4 @@ interface SideTaskCatalogState {
|
|
|
427
442
|
export declare function mergeSideTaskCatalog(catalog: SideTaskCatalogState, parentSessionId: string, listedItems: SideTaskListItem[], optimisticIds: ReadonlySet<string>): SideTaskCatalogState;
|
|
428
443
|
export declare function getEnvironmentAgentTasks(messages: readonly Message[], sessionTasks: readonly DaemonSessionTaskWithWorkflowStatus[]): EnvironmentAgentTask[];
|
|
429
444
|
export declare function mergeAgentTrace(liveAgents: readonly EnvironmentAgentTask[], trace: DaemonAgentTrace | undefined, now?: number): EnvironmentAgentTask[];
|
|
430
|
-
export declare function App({ askUserFreeTextLabel, onSessionIdChange, onSessionInfoChange, onSessionCreated, theme: providedTheme, onThemeChange, onThemeResolved, language: providedLanguage, onLanguageChange, onLanguageResolved, brand: providedBrand, onBrandResolved, className: externalClassName, style: externalStyle, shadowDom, onConnectionChange, onStreamingStateChange, onError, onBugReport, hiddenSlashCommands, slashCommandCategoryOrder, onSlashCommand, builtinAtProviders, atProviders, composerTagIcons, fileUploadEnabled, fileUploadDirectory, artifact, fileDropAction, renderToolHeaderExtra, renderWelcomeHeader, renderWelcomeFooter, mobileWelcomeFooterMiddle, parseUserMessageContent, renderUserMessageContent, renderComposerTag, renderComposerTagTooltip, onComposerTagClick, renderAssistantTurnFooter, assistantFeedback, getAssistantSourcesIcon, sourceReferences, renderComposerToolbarStart, renderComposerToolbarEnd, renderComposerToolbarRight, renderComposerHeader, renderComposerFooter, renderChatHeader, renderFooter, bottomStatusItems, chatMaxWidth, sidebar, settings: settingsPresentation, header, rightPanel, environmentPanel, splitSessionIds: externalSplitSessionIds, onSplitSessionIdsChange, renderPaneHeaderActions, onRightPanelOpen, onFileReviewOpen, onWorkspaceFileOpen, onInsightReportOpen, onContextUsageOpen, messageTurnOutputs, shellRef, composerToolbarActions, mainModelFilter, compactComposerOverlays, autoSubmitSlashCommands, additionalSlashCommands, contextUsageAlwaysVisible, userMessageEditing, onUserMessageEditRequest, cycleModeOnTab, sessionSourceType, composerToolbarAdditionalActions, composerPlaceholders, compactThinking, hostOwnsEditDiffPreview, collapseCompletedTurns, markdownTableMode, virtualScrollThreshold, markdown, loadingPhrases, onAgentTasksChange, onTranscriptChange, onSessionArtifactsChange, onToast, composerRef, onComposerReady, composerInput, composerInputVersion, onSessionChange, onAssistantTurnSettled, prepareSubmit, onSubmitBefore, restartSseOnPrompt, historyPageSize, initialSelectedWorkspaceCwd, lockedWorkspaceCwd, lockedWorkspaceCapability, }?: AppProps): import("react/jsx-runtime").JSX.Element;
|
|
445
|
+
export declare function App({ askUserFreeTextLabel, onSessionIdChange, onSessionInfoChange, onSessionCreated, managedAgentProvider, theme: providedTheme, onThemeChange, onThemeResolved, language: providedLanguage, onLanguageChange, onLanguageResolved, brand: providedBrand, onBrandResolved, className: externalClassName, style: externalStyle, shadowDom, onConnectionChange, onStreamingStateChange, onError, onBugReport, hiddenSlashCommands, slashCommandCategoryOrder, onSlashCommand, builtinAtProviders, atProviders, composerTagIcons, fileUploadEnabled, fileUploadDirectory, artifact, fileDropAction, renderToolHeaderExtra, renderWelcomeHeader, renderWelcomeFooter, mobileWelcomeFooterMiddle, parseUserMessageContent, renderUserMessageContent, renderComposerTag, renderComposerTagTooltip, onComposerTagClick, renderAssistantTurnFooter, assistantFeedback, getAssistantSourcesIcon, sourceReferences, renderComposerToolbarStart, renderComposerToolbarEnd, renderComposerToolbarRight, renderComposerHeader, renderComposerFooter, renderChatHeader, renderFooter, bottomStatusItems, chatMaxWidth, sidebar, settings: settingsPresentation, modelManagement, header, rightPanel, showToolCalls, environmentPanel, splitSessionIds: externalSplitSessionIds, onSplitSessionIdsChange, renderPaneHeaderActions, onRightPanelOpen, onFileReviewOpen, onWorkspaceFileOpen, onInsightReportOpen, onContextUsageOpen, messageTurnOutputs, filterArtifact, shellRef, composerToolbarActions, mainModelFilter, compactComposerOverlays, autoSubmitSlashCommands, additionalSlashCommands, contextUsageAlwaysVisible, userMessageEditing, onUserMessageEditRequest, cycleModeOnTab, sessionSourceType, composerToolbarAdditionalActions, composerPlaceholders, compactThinking, hostOwnsEditDiffPreview, collapseCompletedTurns, markdownTableMode, virtualScrollThreshold, conversationSearchThreshold, markdown, loadingPhrases, onAgentTasksChange, onTranscriptChange, onSessionArtifactsChange, onToast, composerRef, onComposerReady, composerInput, composerInputVersion, onSessionChange, onAssistantTurnSettled, prepareSubmit, onSubmitBefore, restartSseOnPrompt, historyPageSize, initialSelectedWorkspaceCwd, lockedWorkspaceCwd, lockedWorkspaceCapability, }?: AppProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { WebShellProps } from './App';
|
|
2
|
+
import type { TurnOutputOpenRequest } from './components/artifacts/TurnOutputs';
|
|
3
|
+
type Assert<T extends true> = T;
|
|
4
|
+
type OpenHandler = NonNullable<WebShellProps['onRightPanelOpen']>;
|
|
5
|
+
export type AsyncVoidHandler = Assert<((request: TurnOutputOpenRequest) => Promise<void>) extends OpenHandler ? true : false>;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import './styles/globals.css';
|
|
2
|
+
import { type CSSProperties } from 'react';
|
|
3
|
+
import { type WebShellBrand } from './brandContext';
|
|
4
|
+
import { type JavaManagedAgentProviderOptions } from './components/managed/java-managed-agent-provider';
|
|
5
|
+
import { type WebShellLanguage } from './i18n';
|
|
6
|
+
import { type WebShellTheme } from './themeContext';
|
|
7
|
+
export interface ManagedAgentWebShellProps extends JavaManagedAgentProviderOptions {
|
|
8
|
+
sessionId?: string;
|
|
9
|
+
onSessionChange?: (sessionId: string | undefined) => void;
|
|
10
|
+
language?: WebShellLanguage;
|
|
11
|
+
theme?: WebShellTheme;
|
|
12
|
+
brand?: WebShellBrand;
|
|
13
|
+
className?: string;
|
|
14
|
+
style?: CSSProperties;
|
|
15
|
+
}
|
|
16
|
+
/** Managed-only 产品入口,不创建 daemon workspace/session context。 */
|
|
17
|
+
export declare function ManagedAgentWebShell(props: ManagedAgentWebShellProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ACPToolCall } from './types.js';
|
|
2
|
+
export declare function resolveToolCallName(toolName: string | undefined, rawInput: unknown): string | undefined;
|
|
2
3
|
export declare function isActiveToolStatus(status: ACPToolCall['status'] | string): boolean;
|
|
3
4
|
export type TerminalBackgroundAgentStatus = 'completed' | 'failed' | 'cancelled' | 'canceled';
|
|
4
5
|
export declare function isTerminalBackgroundAgentStatus(status: unknown): status is TerminalBackgroundAgentStatus;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Copyright 2025 Qwen Team
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import type { DaemonTranscriptBlock } from '@qwen-code/sdk/daemon';
|
|
7
|
-
import type { DaemonMessage } from './messageTypes.js';
|
|
6
|
+
import type { DaemonTranscriptBlock, DaemonToolTranscriptBlock } from '@qwen-code/sdk/daemon';
|
|
7
|
+
import type { DaemonMessage, DaemonMessageToolCall } from './messageTypes.js';
|
|
8
8
|
interface TranscriptMessageLabels {
|
|
9
9
|
promptCancelled?: string;
|
|
10
10
|
branchSuccess?: (name: string) => string;
|
|
@@ -25,6 +25,7 @@ export declare function isRetryableTurnErrorKind(errorKind: string | undefined):
|
|
|
25
25
|
*/
|
|
26
26
|
export declare function assistantBlockRendersAsSystemNotice(block: DaemonTranscriptBlock): boolean;
|
|
27
27
|
export declare function transcriptBlocksToDaemonMessages(blocks: readonly DaemonTranscriptBlock[], options?: TranscriptMessageOptions): DaemonMessage[];
|
|
28
|
+
export declare function daemonToolBlockToToolCall(block: DaemonToolTranscriptBlock, safeToolProjection: boolean): DaemonMessageToolCall;
|
|
28
29
|
type ParsedInsight = {
|
|
29
30
|
type: 'insight_progress';
|
|
30
31
|
stage: string;
|
|
@@ -27,6 +27,8 @@ interface BranchPickerPopoverProps {
|
|
|
27
27
|
onStatusRefreshed?: (status: DaemonWorkspaceGitStatus) => void;
|
|
28
28
|
onOpenDiff?: () => void;
|
|
29
29
|
onOpenCommit?: () => void;
|
|
30
|
+
/** Opens the worktree manager. */
|
|
31
|
+
onOpenWorktrees?: () => void;
|
|
30
32
|
/** Opens the commit history graph. */
|
|
31
33
|
onOpenLog?: () => void;
|
|
32
34
|
children: React.ReactNode;
|
|
@@ -71,5 +73,5 @@ export declare function deriveActionHints(t: TranslateFn, data: DaemonGitBranche
|
|
|
71
73
|
* re-fetched. Exported for tests.
|
|
72
74
|
*/
|
|
73
75
|
export declare function listingContradictsStatus(data: DaemonGitBranchesResult, status: DaemonWorkspaceGitStatus): boolean;
|
|
74
|
-
export declare function BranchPickerPopover({ open, onOpenChange, workspaceCwd, gitCwd, side, onBranchChanged, status, onStatusRefreshed, onOpenDiff, onOpenCommit, onOpenLog, children, }: BranchPickerPopoverProps): import("react/jsx-runtime").JSX.Element;
|
|
76
|
+
export declare function BranchPickerPopover({ open, onOpenChange, workspaceCwd, gitCwd, side, onBranchChanged, status, onStatusRefreshed, onOpenDiff, onOpenCommit, onOpenWorktrees, onOpenLog, children, }: BranchPickerPopoverProps): import("react/jsx-runtime").JSX.Element;
|
|
75
77
|
export {};
|
|
@@ -57,6 +57,8 @@ interface ChatEditorProps {
|
|
|
57
57
|
onOpenGitDiff?: () => void;
|
|
58
58
|
/** Opens the commit dialog. */
|
|
59
59
|
onOpenCommit?: () => void;
|
|
60
|
+
/** Opens the worktree manager. */
|
|
61
|
+
onOpenWorktrees?: () => void;
|
|
60
62
|
/** Opens the commit history graph. */
|
|
61
63
|
onOpenLog?: () => void;
|
|
62
64
|
/** Workspace name shown in the pane composer's `workspace` toolbar chip. */
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { type ReactNode } from 'react';
|
|
7
7
|
import { type DaemonSessionActions } from '@qwen-code/web-shell/daemon-react-sdk';
|
|
8
8
|
import { type DaemonSessionArtifact, type DaemonSessionMonitorTaskStatus, type DaemonSessionSummary, type DaemonWorkspaceCapability } from '@qwen-code/sdk/daemon';
|
|
9
|
+
import { type WebShellModelManagementOptions } from '../modelManagement';
|
|
9
10
|
import { type RegisterContextUsageControls } from '../hooks/useContextUsageControls';
|
|
10
11
|
import type { WebShellSlashCommandHandler } from '../App';
|
|
11
12
|
import type { TurnOutputKind, TurnOutputOpenRequest } from './artifacts/TurnOutputs';
|
|
@@ -27,8 +28,8 @@ export interface ChatPaneProps {
|
|
|
27
28
|
onApprovalChange?: (sessionId: string, pending: boolean) => void;
|
|
28
29
|
/**
|
|
29
30
|
* The workspace this pane's session lives in. Passed explicitly by the split
|
|
30
|
-
* view (which knows it per session)
|
|
31
|
-
*
|
|
31
|
+
* view (which knows it per session); falls back to the connection's own
|
|
32
|
+
* workspace.
|
|
32
33
|
*/
|
|
33
34
|
workspaceCwd?: string;
|
|
34
35
|
/**
|
|
@@ -62,6 +63,7 @@ export interface ChatPaneProps {
|
|
|
62
63
|
onImageIngestionNotice?: (tone: 'warning' | 'error', message: string) => void;
|
|
63
64
|
/** Host slash-command callback shared with the main chat composer. */
|
|
64
65
|
onSlashCommand?: WebShellSlashCommandHandler;
|
|
66
|
+
modelManagement?: WebShellModelManagementOptions;
|
|
65
67
|
onOpenGoals?: () => void;
|
|
66
68
|
onRightPanelOpen?: (request: TurnOutputOpenRequest) => void;
|
|
67
69
|
onOpenMonitor?: (task: DaemonSessionMonitorTaskStatus, sessionId: string, sessionActions: DaemonSessionActions) => void;
|
|
@@ -90,4 +92,4 @@ export interface ChatPaneProps {
|
|
|
90
92
|
* state, approvals, and composer, and the browser scopes keyboard focus to the
|
|
91
93
|
* pane the user clicks into — so there is no cross-pane approval arbitration.
|
|
92
94
|
*/
|
|
93
|
-
export declare function ChatPane({ title, sessionSummary, isActive, onApprovalChange, workspaceCwd, renderHeaderActions, onClose, onToggleMaximize, isMaximized, onError, onImageIngestionNotice, onSlashCommand, onOpenGoals, onRightPanelOpen, onOpenMonitor, onPaneArtifactsChange, registerContextUsageControls, onBeforeContextCompress, onOpenContextUsage, messageTurnOutputs, embedded, onFirstPromptAdmitted, reportCatalogTurnCompletion, hidden, voiceUserRevision, voiceWorkspaceRevisions, voiceWorkspaces, sessionWorkflowEnabled, planControlVisible, }: ChatPaneProps): import("react/jsx-runtime").JSX.Element;
|
|
95
|
+
export declare function ChatPane({ title, sessionSummary, isActive, onApprovalChange, workspaceCwd, renderHeaderActions, onClose, onToggleMaximize, isMaximized, onError, onImageIngestionNotice, onSlashCommand, modelManagement, onOpenGoals, onRightPanelOpen, onOpenMonitor, onPaneArtifactsChange, registerContextUsageControls, onBeforeContextCompress, onOpenContextUsage, messageTurnOutputs, embedded, onFirstPromptAdmitted, reportCatalogTurnCompletion, hidden, voiceUserRevision, voiceWorkspaceRevisions, voiceWorkspaces, sessionWorkflowEnabled, planControlVisible, }: ChatPaneProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Qwen Team
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { type RefObject, type ReactNode } from 'react';
|
|
7
|
+
import type { MessageListHandle } from './MessageList';
|
|
8
|
+
interface ConversationSearchProps {
|
|
9
|
+
children?: (trigger: ReactNode) => ReactNode;
|
|
10
|
+
active?: boolean;
|
|
11
|
+
onRestoreFocus?: () => void;
|
|
12
|
+
threshold?: number;
|
|
13
|
+
className?: string;
|
|
14
|
+
messageListRef: RefObject<MessageListHandle | null>;
|
|
15
|
+
registerInteractionBlocker?: () => () => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function ConversationSearch({ children, active, onRestoreFocus, threshold, className, messageListRef, registerInteractionBlocker, }: ConversationSearchProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export {};
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
* Copyright 2026 Qwen Team
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { type ReactNode } from 'react';
|
|
6
7
|
import type { DaemonTurnNavigationSnapshot, DaemonTurnNavigationStore } from '../daemon/session/turn-navigation-store';
|
|
7
|
-
export declare function GlobalTurnNavigation({ state, store, follow, onSelect, }: {
|
|
8
|
+
export declare function GlobalTurnNavigation({ state, store, follow, onSelect, action, }: {
|
|
9
|
+
action?: ReactNode;
|
|
8
10
|
state: DaemonTurnNavigationSnapshot;
|
|
9
11
|
store: DaemonTurnNavigationStore;
|
|
10
12
|
follow?: {
|
|
@@ -35,7 +35,8 @@ export interface MessageListProps {
|
|
|
35
35
|
* Identity of the session whose transcript `messages` show. Block ids are
|
|
36
36
|
* per-session ordinals, so changing it resets every session-scoped UI state
|
|
37
37
|
* (collapse overrides, pagination keep-open, pending page snapshots, the
|
|
38
|
-
* scroll anchor) — a direct session switch
|
|
38
|
+
* scroll anchor, the settled-stale-message latch) — a direct session switch
|
|
39
|
+
* never renders empty messages.
|
|
39
40
|
*/
|
|
40
41
|
sessionKey?: string;
|
|
41
42
|
transcriptBlockCount?: number;
|
|
@@ -52,7 +53,11 @@ export interface MessageListProps {
|
|
|
52
53
|
transcriptReloadPaused?: boolean;
|
|
53
54
|
/**
|
|
54
55
|
* True while the agent is still answering. The newest turn then stays
|
|
55
|
-
* expanded and un-collapsible so streaming output is never hidden.
|
|
56
|
+
* expanded and un-collapsible so streaming output is never hidden. When
|
|
57
|
+
* false, stale assistant/thinking/tool-group-thought streaming flags left
|
|
58
|
+
* by a restored replay are settled before render — and stay settled when
|
|
59
|
+
* the session responds again, for as long as their content is unchanged —
|
|
60
|
+
* which is what hosts observe through MarkdownRenderContext.isStreaming.
|
|
56
61
|
*/
|
|
57
62
|
isResponding?: boolean;
|
|
58
63
|
welcomeHeader?: ReactNode;
|
|
@@ -75,6 +80,7 @@ export interface MessageListProps {
|
|
|
75
80
|
*/
|
|
76
81
|
bottomOverlayInset?: number;
|
|
77
82
|
hideSessionTimeline?: boolean;
|
|
83
|
+
timelineAction?: ReactNode;
|
|
78
84
|
hideFirstUserMessage?: boolean;
|
|
79
85
|
firstTurnMetrics?: {
|
|
80
86
|
durationMs?: number;
|
|
@@ -213,6 +219,8 @@ export interface MessageListHandle {
|
|
|
213
219
|
* highlight it. Returns false when the message is not in the list.
|
|
214
220
|
*/
|
|
215
221
|
scrollToMessage: (messageId: string, callId?: string) => boolean;
|
|
222
|
+
/** 定位持久化历史搜索结果;调用方可取消仍在加载的选择。 */
|
|
223
|
+
scrollToSearchHit?: (hit: import('../daemon/session/turn-navigation-store').ConversationSearchHit, isCurrent?: () => boolean) => Promise<boolean | 'cancelled'>;
|
|
216
224
|
/** Resume bottom-follow mode and scroll to the latest output. */
|
|
217
225
|
scrollToBottom: (behavior?: ScrollBehavior) => void;
|
|
218
226
|
}
|
|
@@ -13,12 +13,15 @@ interface MessageTimestampProps {
|
|
|
13
13
|
/** When set, render an edit action after the copy button. */
|
|
14
14
|
onEdit?: () => void;
|
|
15
15
|
editTitle?: string;
|
|
16
|
+
/** When set, render an action that opens this turn's tool-call list. */
|
|
17
|
+
onOpenTurnCalls?: () => void;
|
|
18
|
+
turnCallsTitle?: string;
|
|
16
19
|
}
|
|
17
20
|
/**
|
|
18
21
|
* Wraps a rendered history message and reveals its wall-clock time as a
|
|
19
22
|
* CSS-only tooltip on hover.
|
|
20
23
|
*/
|
|
21
|
-
export declare function MessageTimestamp({ timestamp, hideTimestamp, children, chatMode, toolGroupSpacing, copyText, copyTitle, onEdit, editTitle, }: MessageTimestampProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export declare function MessageTimestamp({ timestamp, hideTimestamp, children, chatMode, toolGroupSpacing, copyText, copyTitle, onEdit, editTitle, onOpenTurnCalls, turnCallsTitle, }: MessageTimestampProps): import("react/jsx-runtime").JSX.Element;
|
|
22
25
|
/**
|
|
23
26
|
* Local-time clock, dropping the date only for same-day timestamps:
|
|
24
27
|
* - same day → `HH:mm:ss`
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { type DaemonSessionActions } from '@qwen-code/web-shell/daemon-react-sdk';
|
|
7
7
|
import type { DaemonSessionArtifact, DaemonSessionMonitorTaskStatus, DaemonWorkspaceCapability } from '@qwen-code/sdk/daemon';
|
|
8
8
|
import type { WebShellSlashCommandHandler } from '../App';
|
|
9
|
+
import type { WebShellModelManagementOptions } from '../modelManagement';
|
|
9
10
|
import type { RegisterContextUsageControls } from '../hooks/useContextUsageControls';
|
|
10
11
|
import { type PaneHeaderActionsRenderer } from './ChatPane';
|
|
11
12
|
import type { TurnOutputKind, TurnOutputOpenRequest } from './artifacts/TurnOutputs';
|
|
@@ -34,6 +35,7 @@ export interface SplitViewProps {
|
|
|
34
35
|
onError?: (error: unknown, fallback: string) => void;
|
|
35
36
|
onImageIngestionNotice?: (tone: 'warning' | 'error', message: string) => void;
|
|
36
37
|
onSlashCommand?: WebShellSlashCommandHandler;
|
|
38
|
+
modelManagement?: WebShellModelManagementOptions;
|
|
37
39
|
onOpenGoals?: () => void;
|
|
38
40
|
onRightPanelOpen?: (request: TurnOutputOpenRequest) => void;
|
|
39
41
|
onOpenMonitor?: (task: DaemonSessionMonitorTaskStatus, sessionId: string, sessionActions: DaemonSessionActions) => void;
|
|
@@ -68,4 +70,4 @@ export interface SplitViewProps {
|
|
|
68
70
|
* naturally scopes the keyboard to the pane the user clicks into, so panes never
|
|
69
71
|
* fight over which session an approval or Enter belongs to.
|
|
70
72
|
*/
|
|
71
|
-
export declare function SplitView({ sessionIds, showSessionDetails, onPanesChange, onAssistantTurnSettled, onPendingPanesChange, onExit, onError, onImageIngestionNotice, onSlashCommand, onOpenGoals, onRightPanelOpen, onOpenMonitor, onPaneArtifactsChange, registerContextUsageControls, onBeforeContextCompress, onOpenContextUsage, messageTurnOutputs, renderPaneHeaderActions, includeOtherWorkspaces, workspaceCwd, restartSseOnPrompt, historyPageSize, voiceUserRevision, voiceWorkspaceRevisions, voiceWorkspaces, sessionWorkflowEnabled, planControlVisible, }: SplitViewProps): import("react/jsx-runtime").JSX.Element;
|
|
73
|
+
export declare function SplitView({ sessionIds, showSessionDetails, onPanesChange, onAssistantTurnSettled, onPendingPanesChange, onExit, onError, onImageIngestionNotice, onSlashCommand, modelManagement, onOpenGoals, onRightPanelOpen, onOpenMonitor, onPaneArtifactsChange, registerContextUsageControls, onBeforeContextCompress, onOpenContextUsage, messageTurnOutputs, renderPaneHeaderActions, includeOtherWorkspaces, workspaceCwd, restartSseOnPrompt, historyPageSize, voiceUserRevision, voiceWorkspaceRevisions, voiceWorkspaces, sessionWorkflowEnabled, planControlVisible, }: SplitViewProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { type DaemonProductSessionContext } from '@qwen-code/web-shell/daemon-react-sdk';
|
|
2
2
|
import { type WebShellProps } from '../App';
|
|
3
|
+
import { type WebShellUrlNavigationOptions } from '../navigation';
|
|
3
4
|
import { type WebShellLanguage } from '../i18n';
|
|
4
5
|
import { type WebShellTheme } from '../themeContext';
|
|
5
6
|
interface WorkspaceSessionProviderProps {
|
|
7
|
+
urlNavigation?: WebShellUrlNavigationOptions;
|
|
6
8
|
sessionId?: string;
|
|
7
9
|
workspaceId?: string;
|
|
8
10
|
workspaceCwd?: string;
|
|
@@ -4,6 +4,8 @@ import type { WebShellRightPanelItem } from '../../customization';
|
|
|
4
4
|
import { type DaemonSessionOwnerSnapshot, type DaemonSessionActions } from '@qwen-code/web-shell/daemon-react-sdk';
|
|
5
5
|
import { type TurnOutputFileChange, type TurnOutputOpenRequest, type TurnOutputScheduledTask } from './TurnOutputs';
|
|
6
6
|
import type { EnvironmentAgentTask } from '../panels/EnvironmentPanel';
|
|
7
|
+
import type { WebShellModelManagementOptions } from '../../modelManagement';
|
|
8
|
+
import type { SessionWorkflowProjection } from '../workflow/session-workflow-model';
|
|
7
9
|
import type { WebPreviewState } from '../preview/web-preview';
|
|
8
10
|
import type { TrajectoryPageLoader } from '../../trajectory/useTrajectoryWindow';
|
|
9
11
|
import type { ContextUsageControls } from '../../hooks/useContextUsageControls';
|
|
@@ -169,6 +171,16 @@ export type ArtifactPanelTab = (WebPreviewState & {
|
|
|
169
171
|
kind: 'workflow';
|
|
170
172
|
title: string;
|
|
171
173
|
sessionId?: string;
|
|
174
|
+
} | {
|
|
175
|
+
id: 'turn_calls';
|
|
176
|
+
kind: 'turn_calls';
|
|
177
|
+
title: string;
|
|
178
|
+
sessionId?: string;
|
|
179
|
+
promptLabel?: string;
|
|
180
|
+
/** Id of the turn's leading user message, whose calls this tab lists. */
|
|
181
|
+
turnId: string;
|
|
182
|
+
recordId?: string;
|
|
183
|
+
promptId?: string;
|
|
172
184
|
};
|
|
173
185
|
export interface SideTaskListItem {
|
|
174
186
|
sessionId: string;
|
|
@@ -188,6 +200,7 @@ interface ArtifactPanelProps {
|
|
|
188
200
|
loading?: boolean;
|
|
189
201
|
restoring?: boolean;
|
|
190
202
|
error?: string | null;
|
|
203
|
+
onSelectTurnCallsPrompt?: (turnId: string, recordId?: string, promptId?: string, promptLabel?: string) => void;
|
|
191
204
|
onSelectTab: (tabId: string) => void;
|
|
192
205
|
onCloseTab: (tabId: string) => void;
|
|
193
206
|
onOpenFilePreview: (change: TurnOutputFileChange, workspaceCwd?: string, workspaceId?: string) => void;
|
|
@@ -218,6 +231,7 @@ interface ArtifactPanelProps {
|
|
|
218
231
|
}>;
|
|
219
232
|
onSideTaskCreated?: (tabId: string, sessionId: string) => void;
|
|
220
233
|
onSideTaskTitleChange?: (tabId: string, title: string, fromFirstPrompt?: boolean) => void;
|
|
234
|
+
onSideTaskInitialPromptRefused?: (tabId: string) => void;
|
|
221
235
|
onNestedRightPanelOpen?: (request: TurnOutputOpenRequest) => void;
|
|
222
236
|
onNestedArtifactsChange?: (sessionId: string, artifacts: readonly DaemonSessionArtifact[]) => void;
|
|
223
237
|
onOpenNestedSubagent?: (tool: ACPToolCall, sessionId: string, workspaceCwd?: string) => void;
|
|
@@ -227,10 +241,13 @@ interface ArtifactPanelProps {
|
|
|
227
241
|
onOpenWorkflowAgent?: (task: EnvironmentAgentTask) => void;
|
|
228
242
|
onError?: (error: unknown, fallback: string) => void;
|
|
229
243
|
sessionWorkflowEnabled?: boolean;
|
|
244
|
+
modelManagement?: WebShellModelManagementOptions;
|
|
230
245
|
workflow?: {
|
|
231
246
|
todos: readonly TodoItem[];
|
|
232
247
|
tools: readonly ACPToolCall[];
|
|
233
248
|
tasks: readonly DaemonSessionTaskStatus[];
|
|
249
|
+
/** Shared per-render projection; also feeds the cockpit and its graph. */
|
|
250
|
+
projection?: SessionWorkflowProjection;
|
|
234
251
|
artifacts: readonly DaemonSessionArtifact[];
|
|
235
252
|
selectedTodoId?: string;
|
|
236
253
|
onSelectedTodoIdChange: (todoId: string | undefined) => void;
|
|
@@ -246,5 +263,5 @@ interface ArtifactPanelProps {
|
|
|
246
263
|
fullscreen?: boolean;
|
|
247
264
|
onToggleFullscreen?: () => void;
|
|
248
265
|
}
|
|
249
|
-
export declare function ArtifactPanel({ contextUsageControls, artifacts, tabs, activeTabId, reviewChanges, selectedReviewPath, panelWidth, workspaceCwd, loading, restoring, error, onSelectTab, onCloseTab, onOpenFilePreview, latestReviewAvailable, onOpenLatestReview, onOpenTerminal, onOpenTrajectory, trajectoryTabId, onOpenWebPreview, onWebPreviewChange, items, sideTaskAvailable, sideTasks, sideTasksLoading, onCreateSideTask, onOpenSideTask, onCreateSideTaskSession, onSideTaskCreated, onSideTaskTitleChange, onNestedRightPanelOpen, onNestedArtifactsChange, onOpenNestedSubagent, agentTasks, agentTraceLoading, agentTraceError, onOpenWorkflowAgent, onError, sessionWorkflowEnabled, workflow, onImageIngestionNotice, deferSubagentMount, onClose, variant, fullscreen, onToggleFullscreen, }: ArtifactPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
266
|
+
export declare function ArtifactPanel({ contextUsageControls, artifacts, tabs, activeTabId, reviewChanges, selectedReviewPath, panelWidth, workspaceCwd, loading, restoring, error, onSelectTab, onSelectTurnCallsPrompt, onCloseTab, onOpenFilePreview, latestReviewAvailable, onOpenLatestReview, onOpenTerminal, onOpenTrajectory, trajectoryTabId, onOpenWebPreview, onWebPreviewChange, items, sideTaskAvailable, sideTasks, sideTasksLoading, onCreateSideTask, onOpenSideTask, onCreateSideTaskSession, onSideTaskCreated, onSideTaskTitleChange, onSideTaskInitialPromptRefused, onNestedRightPanelOpen, onNestedArtifactsChange, onOpenNestedSubagent, agentTasks, agentTraceLoading, agentTraceError, onOpenWorkflowAgent, onError, sessionWorkflowEnabled, modelManagement, workflow, onImageIngestionNotice, deferSubagentMount, onClose, variant, fullscreen, onToggleFullscreen, }: ArtifactPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
250
267
|
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { TurnOutputOpenRequest } from './TurnOutputs';
|
|
2
2
|
import type { DaemonSessionArtifact } from '@qwen-code/sdk/daemon';
|
|
3
|
+
import { type WebShellModelManagementOptions } from '../../modelManagement';
|
|
3
4
|
interface SideTaskPanelProps {
|
|
4
5
|
tabId: string;
|
|
5
6
|
sessionId?: string;
|
|
@@ -18,7 +19,10 @@ interface SideTaskPanelProps {
|
|
|
18
19
|
onArtifactsChange?: (sessionId: string, artifacts: readonly DaemonSessionArtifact[]) => void;
|
|
19
20
|
onError?: (error: unknown, fallback: string) => void;
|
|
20
21
|
sessionWorkflowEnabled?: boolean;
|
|
22
|
+
modelManagement?: WebShellModelManagementOptions;
|
|
21
23
|
onImageIngestionNotice?: (tone: 'warning' | 'error', message: string) => void;
|
|
24
|
+
/** Policy refused the stored initial prompt; the parent drops it from the tab. */
|
|
25
|
+
onInitialPromptRefused?: (tabId: string) => void;
|
|
22
26
|
}
|
|
23
|
-
export declare function SideTaskPanel({ tabId, sessionId, parentSessionId, workspaceCwd, title, shouldNameFromFirstPrompt, initialPrompt, createSession, onCreated, onTitleChange, onRightPanelOpen, onArtifactsChange, onError, sessionWorkflowEnabled, onImageIngestionNotice, }: SideTaskPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export declare function SideTaskPanel({ tabId, sessionId, parentSessionId, workspaceCwd, title, shouldNameFromFirstPrompt, initialPrompt, createSession, onCreated, onTitleChange, onRightPanelOpen, onArtifactsChange, onError, sessionWorkflowEnabled, modelManagement, onImageIngestionNotice, onInitialPromptRefused, }: SideTaskPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
24
28
|
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Qwen Team
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { TimelineMode, TimelineModel, TimelineSpan } from '../../trajectory/buildTimeline';
|
|
7
|
+
import { type TimelineRange } from '../../trajectory/timelineRange';
|
|
8
|
+
/**
|
|
9
|
+
* The strip's height, which never changes. It sits above the table as a flex
|
|
10
|
+
* sibling of the scrolled rows, so any change in its height would move every
|
|
11
|
+
* row the reader is looking at. Loading, empty and drawn states all fill the
|
|
12
|
+
* same box.
|
|
13
|
+
*/
|
|
14
|
+
export declare const OVERVIEW_HEIGHT = 64;
|
|
15
|
+
/**
|
|
16
|
+
* How far the pointer has to travel before a press becomes a drag. Below it
|
|
17
|
+
* the press is a click, which selects the span under it — a hand that wobbles
|
|
18
|
+
* a pixel while clicking a 3px bar must not turn the click into a range.
|
|
19
|
+
*/
|
|
20
|
+
export declare const DRAG_THRESHOLD_PX = 4;
|
|
21
|
+
export interface TrajectoryOverviewProps {
|
|
22
|
+
model: TimelineModel | undefined;
|
|
23
|
+
/** Shown inside the box when there is no model to draw. */
|
|
24
|
+
notice?: string;
|
|
25
|
+
selectedKey?: string;
|
|
26
|
+
onSelect: (rowKey: string) => void;
|
|
27
|
+
/** Hover text for one span; the table owns how a row is named. */
|
|
28
|
+
describe: (span: TimelineSpan) => string;
|
|
29
|
+
/** The committed time selection, in the model's domain. */
|
|
30
|
+
range?: TimelineRange;
|
|
31
|
+
/**
|
|
32
|
+
* A drag commits a range; a click on empty track, a right click, or any
|
|
33
|
+
* other way of clearing it reports `undefined`.
|
|
34
|
+
*/
|
|
35
|
+
onRangeChange: (range: TimelineRange | undefined) => void;
|
|
36
|
+
/**
|
|
37
|
+
* Ask for the other way of laying out time. The mode in force is the
|
|
38
|
+
* model's own, so the strip can never draw one mode under the other's label.
|
|
39
|
+
*/
|
|
40
|
+
onModeChange: (mode: TimelineMode) => void;
|
|
41
|
+
}
|
|
42
|
+
/** Percentages as CSS lengths, rounded so tests can name them exactly. */
|
|
43
|
+
export declare function percent(value: number): string;
|
|
44
|
+
/**
|
|
45
|
+
* Percentages of the whole run, for what is drawn inside the zoomable layer.
|
|
46
|
+
*
|
|
47
|
+
* Not rounded like `percent`: these resolve against the layer, which is up to
|
|
48
|
+
* `MAX_ZOOM_RATIO` track widths wide, so any rounding is magnified by the zoom
|
|
49
|
+
* — three decimals was 75px on a long run at the limit, enough to draw a span
|
|
50
|
+
* over the time of its neighbour. Eight decimals is under a thousandth of a
|
|
51
|
+
* pixel at the limit, and fixed notation keeps tiny values from printing as
|
|
52
|
+
* `1e-7`, which CSS would reject.
|
|
53
|
+
*/
|
|
54
|
+
export declare function exactPercent(value: number): string;
|
|
55
|
+
/**
|
|
56
|
+
* A point on the axis, as precise as the stretch in view needs.
|
|
57
|
+
*
|
|
58
|
+
* `formatDuration` rounds to a tenth of a second under a minute and to whole
|
|
59
|
+
* seconds above it, which is right for a run's total but not for the ends of
|
|
60
|
+
* a 20ms window: both ends would print the same. The precision here follows
|
|
61
|
+
* the window instead, about a tenth of its length.
|
|
62
|
+
*/
|
|
63
|
+
export declare function formatWindowTime(ms: number, windowMs: number): string;
|
|
64
|
+
/**
|
|
65
|
+
* A moment on a real-time axis, as a local clock reading with as many
|
|
66
|
+
* fractional digits as the stretch in view needs: whole seconds for ten
|
|
67
|
+
* seconds and more, then one digit per tenfold narrower window, down to
|
|
68
|
+
* milliseconds.
|
|
69
|
+
*/
|
|
70
|
+
export declare function formatClockTime(epochMs: number, windowMs: number, language: string): string;
|
|
71
|
+
export declare function TrajectoryOverview({ model, notice, selectedKey, onSelect, describe, range, onRangeChange, onModeChange, }: TrajectoryOverviewProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OpenTurnCalls } from '../../turnCallsContext';
|
|
2
|
+
export declare function TurnCallPromptSelect({ recordId, promptId, label, refreshKey, onSelect, onLoadError, }: {
|
|
3
|
+
recordId?: string;
|
|
4
|
+
promptId?: string;
|
|
5
|
+
label?: string;
|
|
6
|
+
refreshKey: number;
|
|
7
|
+
onSelect?: OpenTurnCalls;
|
|
8
|
+
onLoadError: (failed: boolean) => void;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { DaemonToolTranscriptBlock, DaemonTranscriptBlock } from '@qwen-code/sdk/daemon';
|
|
2
|
+
import type { ACPToolCall } from '../../adapters/types';
|
|
3
|
+
import type { TurnOutputOpenRequest } from './TurnOutputs';
|
|
4
|
+
import { type OpenTurnCalls } from '../../turnCallsContext';
|
|
5
|
+
export interface TurnCallRow {
|
|
6
|
+
block: DaemonToolTranscriptBlock;
|
|
7
|
+
/** 0 for a top-level call, 1 for a call made by a sub-agent, and so on. */
|
|
8
|
+
depth: number;
|
|
9
|
+
durationMs?: number;
|
|
10
|
+
startedAt?: number;
|
|
11
|
+
recordedStatus?: string;
|
|
12
|
+
live?: true;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The tool calls one turn made, in execution order, each with its nesting depth.
|
|
16
|
+
*
|
|
17
|
+
* `turnId` is the id of the turn's leading user message, which is also the id of
|
|
18
|
+
* that user's transcript block — the same turn identity the transcript's own
|
|
19
|
+
* per-turn grouping uses. A turn's calls are therefore the tool blocks between
|
|
20
|
+
* that block and the next user block. That keeps the panel working for a turn
|
|
21
|
+
* which is still running, and it does not depend on a per-turn stamp landing on
|
|
22
|
+
* tool blocks.
|
|
23
|
+
*
|
|
24
|
+
* A call whose parent is not part of the turn is treated as top-level rather
|
|
25
|
+
* than guessed into a parent.
|
|
26
|
+
*/
|
|
27
|
+
export declare function collectTurnCallRows(blocks: readonly DaemonTranscriptBlock[], turnId: string | undefined, promptId?: string): TurnCallRow[];
|
|
28
|
+
export declare function TurnCallsPanel({ turnId, ownerSessionId, recordId, promptId, promptLabel, onSelectPrompt, workspaceCwd, onOpenFile, onOpenAgent, }: {
|
|
29
|
+
turnId: string;
|
|
30
|
+
ownerSessionId?: string;
|
|
31
|
+
recordId?: string;
|
|
32
|
+
promptId?: string;
|
|
33
|
+
promptLabel?: string;
|
|
34
|
+
onSelectPrompt?: OpenTurnCalls;
|
|
35
|
+
onOpenAgent?: (tool: ACPToolCall, sessionId: string, workspaceCwd?: string) => void;
|
|
36
|
+
workspaceCwd?: string;
|
|
37
|
+
onOpenFile?: (request: TurnOutputOpenRequest) => void;
|
|
38
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -97,7 +97,12 @@ export type TurnOutputOpenRequest = ({
|
|
|
97
97
|
/** Session whose transcript produced this output. */
|
|
98
98
|
sourceSessionId?: string;
|
|
99
99
|
};
|
|
100
|
+
export type ArtifactFilter = (artifact: DaemonSessionArtifact, context: {
|
|
101
|
+
turnId: string;
|
|
102
|
+
sourceSessionId?: string;
|
|
103
|
+
}) => boolean;
|
|
100
104
|
interface TurnOutputsProps {
|
|
105
|
+
sourceSessionId?: string;
|
|
101
106
|
turnId: string;
|
|
102
107
|
changes: readonly TurnOutputFileChange[];
|
|
103
108
|
artifacts: readonly DaemonSessionArtifact[];
|
|
@@ -109,7 +114,7 @@ interface TurnOutputsProps {
|
|
|
109
114
|
onOpenScheduledTask: (task: TurnOutputScheduledTask) => void;
|
|
110
115
|
onError?: (error: unknown, fallback: string) => void;
|
|
111
116
|
}
|
|
112
|
-
declare function TurnOutputsComponent({ turnId, changes, artifacts, scheduledTasks, workspaceCwd, onOpenRequest, onReviewChanges, onOpenArtifact, onOpenScheduledTask, onError, }: TurnOutputsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
117
|
+
declare function TurnOutputsComponent({ turnId, changes, artifacts: allArtifacts, sourceSessionId, scheduledTasks, workspaceCwd, onOpenRequest, onReviewChanges, onOpenArtifact, onOpenScheduledTask, onError, }: TurnOutputsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
113
118
|
export declare const TurnOutputs: import("react").MemoExoticComponent<typeof TurnOutputsComponent>;
|
|
114
119
|
export declare function getArtifactPreviewContent(artifact: DaemonSessionArtifact, changes: readonly TurnOutputFileChange[], workspaceCwd?: string): string | undefined;
|
|
115
120
|
export declare function getFileChangePreviewContent(change: TurnOutputFileChange): string | undefined;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DaemonSessionToolCalls, DaemonToolTranscriptBlock } from '@qwen-code/sdk/daemon';
|
|
2
|
+
import type { TrajectoryToolRow } from '../../trajectory/types';
|
|
3
|
+
export declare function loadTurnCalls(readCalls: () => Promise<DaemonSessionToolCalls>, recordId: string): Promise<TrajectoryToolRow[]>;
|
|
4
|
+
export declare function toolCallDepths(blocks: readonly DaemonToolTranscriptBlock[]): Map<string, number>;
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import type { DaemonChannelInstanceSnapshot, DaemonChannelSecretUpdate, DaemonChannelTypeDescriptor, DaemonChannelUpsertRequest } from '@qwen-code/sdk/daemon';
|
|
7
|
-
export type
|
|
7
|
+
export type ChannelPrivatePolicy = 'disabled' | 'allowlist' | 'pairing' | 'open' | '';
|
|
8
|
+
/** `groups["*"].senders`; `''` means the config leaves it unset. */
|
|
9
|
+
export type ChannelGroupSenders = 'open' | 'allowlist' | '';
|
|
8
10
|
export interface ChannelSecretDraft {
|
|
9
11
|
operation: DaemonChannelSecretUpdate['operation'];
|
|
10
12
|
value?: string;
|
|
@@ -13,13 +15,17 @@ export interface ChannelEditorDraft {
|
|
|
13
15
|
name: string;
|
|
14
16
|
values: Record<string, string | boolean>;
|
|
15
17
|
secrets: Record<string, ChannelSecretDraft>;
|
|
16
|
-
|
|
18
|
+
privatePolicy: ChannelPrivatePolicy;
|
|
17
19
|
allowedGroupIds: string;
|
|
20
|
+
groupSenders: ChannelGroupSenders;
|
|
21
|
+
groupAllowedUsers: string;
|
|
18
22
|
}
|
|
19
23
|
export type ChannelEditorValidationCode = 'required' | 'credential' | 'duplicate' | 'invalid' | 'invalidGroupId' | 'invalidOption' | 'number' | 'outOfRange' | 'policy';
|
|
20
24
|
export type ChannelEditorValidationErrors = Record<string, ChannelEditorValidationCode>;
|
|
21
|
-
export declare function
|
|
25
|
+
export declare function hasDescriptorPrivatePolicy(descriptor: DaemonChannelTypeDescriptor): boolean;
|
|
22
26
|
export declare function hasDescriptorGroupPolicy(descriptor: DaemonChannelTypeDescriptor): boolean;
|
|
27
|
+
export declare function defaultGroupSenders(): Exclude<ChannelGroupSenders, ''>;
|
|
28
|
+
export declare function configuredPrivatePolicy(instance?: DaemonChannelInstanceSnapshot): string;
|
|
23
29
|
export declare function createChannelEditorDraft(descriptor: DaemonChannelTypeDescriptor, instance?: DaemonChannelInstanceSnapshot): ChannelEditorDraft;
|
|
24
30
|
export declare function validateChannelEditorDraft(descriptor: DaemonChannelTypeDescriptor, draft: ChannelEditorDraft, existingNames: readonly string[]): ChannelEditorValidationErrors;
|
|
25
31
|
export declare function buildChannelUpsertRequest(descriptor: DaemonChannelTypeDescriptor, draft: ChannelEditorDraft, expectedRevision: string, instance?: DaemonChannelInstanceSnapshot): DaemonChannelUpsertRequest;
|