@qwen-code/web-shell 0.24.1-preview.1 → 0.24.3-nightly.20260921.2800e9bb4f

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.
Files changed (79) hide show
  1. package/LICENSE +203 -0
  2. package/README.md +51 -4
  3. package/dist/daemon-react-sdk.js +1 -1
  4. package/dist/index.js +54062 -49941
  5. package/dist/sw.js +1 -1
  6. package/dist/{toolNames-DgCpmhML.js → toolNames-DQad2xSu.js} +6114 -5488
  7. package/dist/transcript.js +10297 -9531
  8. package/dist/types/App.d.ts +13 -2
  9. package/dist/types/adapters/messageTypes.d.ts +12 -1
  10. package/dist/types/adapters/reported-artifacts.d.ts +2 -0
  11. package/dist/types/adapters/transcriptToMessages.d.ts +16 -0
  12. package/dist/types/assistant-turn-settlement.d.ts +12 -0
  13. package/dist/types/components/BranchPickerPopover.d.ts +3 -1
  14. package/dist/types/components/ChatContextHeader.d.ts +10 -1
  15. package/dist/types/components/ChatEditor.d.ts +10 -0
  16. package/dist/types/components/GoalStatusStrip.d.ts +12 -0
  17. package/dist/types/components/MessageItem.d.ts +7 -1
  18. package/dist/types/components/SplitView.d.ts +3 -1
  19. package/dist/types/components/StandaloneAuth.d.ts +3 -1
  20. package/dist/types/components/artifacts/ArtifactPanel.d.ts +22 -1
  21. package/dist/types/components/artifacts/TrajectoryPanel.d.ts +14 -0
  22. package/dist/types/components/artifacts/TurnOutputs.d.ts +7 -0
  23. package/dist/types/components/artifacts/artifactUtils.d.ts +1 -1
  24. package/dist/types/components/composer/AddMenu.d.ts +24 -2
  25. package/dist/types/components/dialogs/AddWorkspaceDialog.d.ts +11 -1
  26. package/dist/types/components/dialogs/DaemonStatusDialog.d.ts +4 -0
  27. package/dist/types/components/dialogs/WorkspaceAddStatusDialog.d.ts +11 -0
  28. package/dist/types/components/messages/AssistantMessage.d.ts +5 -1
  29. package/dist/types/components/messages/SettingsMessage.d.ts +4 -1
  30. package/dist/types/components/messages/tools/ShellToolOutput.d.ts +4 -0
  31. package/dist/types/components/messages/tools/shellLiveOutput.d.ts +13 -0
  32. package/dist/types/components/panels/EnvironmentPanel.d.ts +2 -1
  33. package/dist/types/components/sidebar/WorkspaceSection.d.ts +2 -1
  34. package/dist/types/components/ui/alert-dialog.d.ts +1 -1
  35. package/dist/types/components/ui/field.d.ts +1 -1
  36. package/dist/types/components/ui/toggle-group.d.ts +1 -1
  37. package/dist/types/components/workspaces/CapacityRecoveryDialog.d.ts +11 -0
  38. package/dist/types/config/daemon.d.ts +3 -1
  39. package/dist/types/config/remote-connections.d.ts +18 -0
  40. package/dist/types/config/remote-workspace-add.d.ts +17 -0
  41. package/dist/types/customization.d.ts +59 -1
  42. package/dist/types/daemon/session/DaemonSessionProvider.d.ts +3 -2
  43. package/dist/types/daemon/session/actions.d.ts +1 -1
  44. package/dist/types/daemon/session/httpErrors.d.ts +1 -0
  45. package/dist/types/daemon/session/types.d.ts +30 -1
  46. package/dist/types/daemon/workspace/hooks/useDaemonMemory.d.ts +3 -1
  47. package/dist/types/daemon/workspace/types.d.ts +8 -1
  48. package/dist/types/hooks/useAssistantFeedback.d.ts +16 -0
  49. package/dist/types/hooks/useCapacityRecovery.d.ts +8 -0
  50. package/dist/types/hooks/useComposerCore.d.ts +6 -1
  51. package/dist/types/hooks/useContextCompressionReconcile.d.ts +38 -0
  52. package/dist/types/hooks/useQueuedPrompts.d.ts +2 -1
  53. package/dist/types/hooks/useReportedArtifactRegistration.d.ts +20 -0
  54. package/dist/types/hooks/useSessionArtifacts.d.ts +2 -1
  55. package/dist/types/index.d.ts +1 -1
  56. package/dist/types/live/LiveLevelMeter.d.ts +31 -0
  57. package/dist/types/live/LiveVoiceButton.d.ts +7 -1
  58. package/dist/types/live/LiveVoiceMenuItem.d.ts +9 -0
  59. package/dist/types/live/live-model-options.d.ts +24 -0
  60. package/dist/types/live/messages.d.ts +16 -0
  61. package/dist/types/live/messages.transcript-stub.d.ts +12 -0
  62. package/dist/types/live/pcm-player.d.ts +34 -0
  63. package/dist/types/live/screen-share.d.ts +25 -0
  64. package/dist/types/live/useLiveBrowserHost.d.ts +92 -0
  65. package/dist/types/live/useLiveVoice.d.ts +6 -0
  66. package/dist/types/session-catalog/session-catalog-store.d.ts +9 -0
  67. package/dist/types/settings.d.ts +6 -4
  68. package/dist/types/trajectory/buildTrajectory.d.ts +15 -0
  69. package/dist/types/trajectory/projectTrajectoryWindow.d.ts +23 -0
  70. package/dist/types/trajectory/transcriptPageLoader.d.ts +31 -0
  71. package/dist/types/trajectory/types.d.ts +130 -0
  72. package/dist/types/trajectory/useTrajectoryWindow.d.ts +75 -0
  73. package/dist/types/utils/assistantFeedback.d.ts +71 -0
  74. package/dist/types/utils/commitGraph.d.ts +39 -0
  75. package/dist/types/utils/contextCompression.d.ts +38 -0
  76. package/dist/types/utils/sessionPreparation.d.ts +3 -1
  77. package/dist/types/voice/capture-utils.d.ts +22 -0
  78. package/dist/types/voice/useVoiceCapture.d.ts +2 -1
  79. package/package.json +25 -20
@@ -16,7 +16,7 @@ import { type ComposerPlaceholderState } from './utils/composerInputState';
16
16
  import type { CommandInfo, Message } from './adapters/types';
17
17
  import { type WebShellBrand, type WebShellResolvedBrand } from './brandContext';
18
18
  import { type WebShellTheme } from './themeContext';
19
- import { type WebShellComposerApi, type WebShellComposerInput, type WebShellMarkdownCustomization, type WebShellSourceIconResolver, type WebShellSourceReference, type ToolHeaderExtraRenderer, type UserMessageContentRenderer, type UserMessageContentParser, type AssistantTurnFooterRenderer, type WebShellArtifactCustomization, type WelcomeHeaderRenderer, type WelcomeFooterRenderer, type ComposerToolbarStartRenderer, type ComposerToolbarEndRenderer, type ComposerToolbarRightRenderer, type ComposerHeaderRenderer, type ComposerFooterRenderer, type ChatHeaderRenderer, type WebShellChatHeaderOptions, type WebShellRightPanelOptions, type WebShellEnvironmentPanelOptions, type FooterRenderer, type LoadingPhrasesResolver, type MarkdownTableMode, type WebShellAtProvider, type WebShellBuiltinAtProvidersConfig, type ComposerTagClickHandler, type ComposerTagRenderer, type WebShellComposerTagIconMap, type WebShellBottomStatusItem, type WebShellPreparedSubmit, type WebShellSubmitSnapshot, type WebShellSessionArtifactsChange } from './customization';
19
+ import { type WebShellAssistantFeedbackOptions, type WebShellComposerApi, type WebShellComposerInput, type WebShellMarkdownCustomization, type WebShellSourceIconResolver, type WebShellSourceReference, type ToolHeaderExtraRenderer, type UserMessageContentRenderer, type UserMessageContentParser, type AssistantTurnFooterRenderer, type WebShellArtifactCustomization, type WelcomeHeaderRenderer, type WelcomeFooterRenderer, type ComposerToolbarStartRenderer, type ComposerToolbarEndRenderer, type ComposerToolbarRightRenderer, type ComposerHeaderRenderer, type ComposerFooterRenderer, type ChatHeaderRenderer, type WebShellChatHeaderOptions, type WebShellRightPanelOptions, type WebShellEnvironmentPanelOptions, type FooterRenderer, type LoadingPhrasesResolver, type MarkdownTableMode, type WebShellAtProvider, type WebShellBuiltinAtProvidersConfig, type ComposerTagClickHandler, type ComposerTagRenderer, type WebShellComposerTagIconMap, type WebShellBottomStatusItem, type WebShellPreparedSubmit, type WebShellSubmitSnapshot, type WebShellAssistantTurnSettledEvent, type WebShellSessionArtifactsChange } from './customization';
20
20
  import type { CommandDisplayCategoryOrder } from './utils/commandDisplay';
21
21
  export interface BugReportInfo {
22
22
  title: string;
@@ -326,6 +326,11 @@ export interface WebShellProps {
326
326
  onComposerTagClick?: ComposerTagClickHandler;
327
327
  /** Custom renderer displayed after the final assistant message of each turn. */
328
328
  renderAssistantTurnFooter?: AssistantTurnFooterRenderer;
329
+ /**
330
+ * Satisfied / not-satisfied marks on each completed assistant turn. Omit the
331
+ * object to leave the answer footer unchanged.
332
+ */
333
+ assistantFeedback?: WebShellAssistantFeedbackOptions;
329
334
  getAssistantSourcesIcon?: WebShellSourceIconResolver;
330
335
  sourceReferences?: readonly WebShellSourceReference[];
331
336
  /** Custom renderer inserted before the built-in chat composer toolbar controls. */
@@ -377,6 +382,12 @@ export interface WebShellProps {
377
382
  composerInputVersion?: number;
378
383
  /** Called when a session-level event occurs (rename, submit, turn complete). */
379
384
  onSessionChange?: (event: SessionChangeEvent) => void;
385
+ /**
386
+ * Called for authoritative terminals observed live, or replayed for a prompt
387
+ * this provider admitted. Multiple mounted providers can report the same
388
+ * `(sessionId, promptId)`, so hosts should deduplicate by that key.
389
+ */
390
+ onAssistantTurnSettled?: (event: WebShellAssistantTurnSettledEvent) => void;
380
391
  /**
381
392
  * Prepare the immutable payload for a daemon submission. Called once for a
382
393
  * direct or queued logical submit, after local command routing and before
@@ -416,4 +427,4 @@ interface SideTaskCatalogState {
416
427
  export declare function mergeSideTaskCatalog(catalog: SideTaskCatalogState, parentSessionId: string, listedItems: SideTaskListItem[], optimisticIds: ReadonlySet<string>): SideTaskCatalogState;
417
428
  export declare function getEnvironmentAgentTasks(messages: readonly Message[], sessionTasks: readonly DaemonSessionTaskWithWorkflowStatus[]): EnvironmentAgentTask[];
418
429
  export declare function mergeAgentTrace(liveAgents: readonly EnvironmentAgentTask[], trace: DaemonAgentTrace | undefined, now?: number): EnvironmentAgentTask[];
419
- 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, 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, prepareSubmit, onSubmitBefore, restartSseOnPrompt, historyPageSize, initialSelectedWorkspaceCwd, lockedWorkspaceCwd, lockedWorkspaceCapability, }?: AppProps): import("react/jsx-runtime").JSX.Element;
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;
@@ -3,7 +3,7 @@
3
3
  * Copyright 2025 Qwen Team
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import type { DaemonBackgroundTurn, DaemonInputAnnotation } from '@qwen-code/sdk/daemon';
6
+ import type { DaemonBackgroundTurn, DaemonSessionArtifactInput, DaemonInputAnnotation } from '@qwen-code/sdk/daemon';
7
7
  export interface AttachmentPreviewRequest {
8
8
  name: string;
9
9
  mimeType?: string;
@@ -65,6 +65,16 @@ export interface DaemonMessageTodoItem {
65
65
  */
66
66
  export interface DaemonMessageMeta {
67
67
  backgroundTurn?: DaemonBackgroundTurn;
68
+ /**
69
+ * Admitted prompt this message belongs to, copied from the daemon-stamped
70
+ * `promptId` of the transcript blocks it was built from.
71
+ *
72
+ * Unlike a block id (a per-projection ordinal), this survives a reload: the
73
+ * live stream stamps it on assistant blocks, and a replay stamps it on the
74
+ * user block, which is the same value the turn's persisted record carries.
75
+ * Undefined for locally appended messages the daemon has not echoed yet.
76
+ */
77
+ promptId?: string;
68
78
  /**
69
79
  * Wall-clock epoch milliseconds when the backing transcript block was first
70
80
  * observed, populated from `serverTimestamp ?? clientReceivedAt`. Surfaced
@@ -96,6 +106,7 @@ export interface DaemonUserMessage extends DaemonMessageMeta {
96
106
  source?: string;
97
107
  }
98
108
  export interface DaemonAssistantMessage extends DaemonMessageMeta {
109
+ reportedArtifacts?: DaemonSessionArtifactInput[];
99
110
  id: string;
100
111
  role: 'assistant';
101
112
  content: string;
@@ -0,0 +1,2 @@
1
+ import type { DaemonSessionArtifactInput } from '@qwen-code/sdk/daemon';
2
+ export declare function readReportedArtifacts(meta: Record<string, unknown> | undefined): DaemonSessionArtifactInput[];
@@ -17,6 +17,13 @@ interface TranscriptMessageOptions {
17
17
  safeToolProjection?: boolean;
18
18
  }
19
19
  export declare function isRetryableTurnErrorKind(errorKind: string | undefined): boolean;
20
+ /**
21
+ * Whether an assistant block renders as a `role: 'system'` notice instead of
22
+ * assistant text. Consumers that publish a turn's final answer ask the adapter
23
+ * rather than re-deriving the notice set, so a future notice source is excluded
24
+ * from them by construction.
25
+ */
26
+ export declare function assistantBlockRendersAsSystemNotice(block: DaemonTranscriptBlock): boolean;
20
27
  export declare function transcriptBlocksToDaemonMessages(blocks: readonly DaemonTranscriptBlock[], options?: TranscriptMessageOptions): DaemonMessage[];
21
28
  type ParsedInsight = {
22
29
  type: 'insight_progress';
@@ -38,4 +45,13 @@ type InsightSegment = {
38
45
  data: ParsedInsight;
39
46
  };
40
47
  export declare function splitInsightSegments(text: string): InsightSegment[] | null;
48
+ /**
49
+ * The visible assistant text of a block's text, with insight protocol frames
50
+ * (`insight_progress` / `insight_ready` / `insight_error`) stripped exactly as
51
+ * `transcriptBlocksToDaemonMessages` strips them. A payload-only block — one
52
+ * whose only content is such a frame — renders to no assistant text and
53
+ * therefore yields an empty string, so callers that publish a turn's final
54
+ * answer can skip it instead of leaking raw protocol JSON.
55
+ */
56
+ export declare function assistantVisibleTextOf(text: string): string;
41
57
  export {};
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { WebShellAssistantTurnSettledEvent } from './customization.js';
7
+ type AssistantTurnSettledHandler = (event: WebShellAssistantTurnSettledEvent) => void;
8
+ export declare function useAssistantTurnSettlementProjection(onAssistantTurnSettled: AssistantTurnSettledHandler | undefined): void;
9
+ export declare function AssistantTurnSettlementObserver({ onAssistantTurnSettled, }: {
10
+ onAssistantTurnSettled: AssistantTurnSettledHandler;
11
+ }): null;
12
+ export {};
@@ -27,6 +27,8 @@ interface BranchPickerPopoverProps {
27
27
  onStatusRefreshed?: (status: DaemonWorkspaceGitStatus) => void;
28
28
  onOpenDiff?: () => void;
29
29
  onOpenCommit?: () => void;
30
+ /** Opens the commit history graph. */
31
+ onOpenLog?: () => void;
30
32
  children: React.ReactNode;
31
33
  }
32
34
  type HintTone = 'muted' | 'info' | 'warning';
@@ -69,5 +71,5 @@ export declare function deriveActionHints(t: TranslateFn, data: DaemonGitBranche
69
71
  * re-fetched. Exported for tests.
70
72
  */
71
73
  export declare function listingContradictsStatus(data: DaemonGitBranchesResult, status: DaemonWorkspaceGitStatus): boolean;
72
- export declare function BranchPickerPopover({ open, onOpenChange, workspaceCwd, gitCwd, side, onBranchChanged, status, onStatusRefreshed, onOpenDiff, onOpenCommit, children, }: BranchPickerPopoverProps): import("react/jsx-runtime").JSX.Element;
74
+ export declare function BranchPickerPopover({ open, onOpenChange, workspaceCwd, gitCwd, side, onBranchChanged, status, onStatusRefreshed, onOpenDiff, onOpenCommit, onOpenLog, children, }: BranchPickerPopoverProps): import("react/jsx-runtime").JSX.Element;
73
75
  export {};
@@ -1,6 +1,15 @@
1
1
  import type { ReactNode } from 'react';
2
2
  interface ChatContextHeaderProps {
3
3
  content: ReactNode;
4
+ /**
5
+ * Workspace shown as the header's leading icon. Omitting it means the shell
6
+ * has no workspace: the icon stays the same folder and only its tooltip says
7
+ * so, because the icon is the one place that always answers "which workspace
8
+ * is this session in?".
9
+ */
10
+ workspaceName?: string;
11
+ /** Full workspace path, shown as the leading icon's hover tooltip. */
12
+ workspacePath?: string;
4
13
  environmentOpen: boolean;
5
14
  environmentAvailable: boolean;
6
15
  rightPanelOpen: boolean;
@@ -14,5 +23,5 @@ interface ChatContextHeaderProps {
14
23
  /** Shows the Local Control QR entry; hidden when omitted. */
15
24
  onOpenLocalControlSettings?: () => void;
16
25
  }
17
- export declare function ChatContextHeader({ content, environmentOpen, environmentAvailable, rightPanelOpen, rightPanelAvailable, onToggleEnvironment, onToggleRightPanel, onOpenTokenUsage, onOpenContextUsage, onOpenLocalControlSettings, }: ChatContextHeaderProps): import("react/jsx-runtime").JSX.Element;
26
+ export declare function ChatContextHeader({ content, workspaceName, workspacePath, environmentOpen, environmentAvailable, rightPanelOpen, rightPanelAvailable, onToggleEnvironment, onToggleRightPanel, onOpenTokenUsage, onOpenContextUsage, onOpenLocalControlSettings, }: ChatContextHeaderProps): import("react/jsx-runtime").JSX.Element;
18
27
  export {};
@@ -57,6 +57,8 @@ interface ChatEditorProps {
57
57
  onOpenGitDiff?: () => void;
58
58
  /** Opens the commit dialog. */
59
59
  onOpenCommit?: () => void;
60
+ /** Opens the commit history graph. */
61
+ onOpenLog?: () => void;
60
62
  /** Workspace name shown in the pane composer's `workspace` toolbar chip. */
61
63
  workspaceName?: string;
62
64
  /** Full workspace cwd, used as the chip's tooltip. */
@@ -70,6 +72,14 @@ interface ChatEditorProps {
70
72
  showChatWidthToggle?: boolean;
71
73
  chatWidthToggleMin?: number;
72
74
  visibleToolbarActions?: readonly ComposerToolbarAction[];
75
+ /**
76
+ * Where the composer's context chips (workspace selector, git branch) land.
77
+ * `toolbar` (default) keeps both in the composer toolbar. `below` moves both
78
+ * to the row directly under the composer box. `header` leaves the workspace
79
+ * to the chat header, which shows it as a leading icon, and keeps git in the
80
+ * toolbar.
81
+ */
82
+ contextChipPlacement?: 'toolbar' | 'below' | 'header';
73
83
  /** Current context-window occupancy for the `contextUsage` toolbar ring. */
74
84
  tokenCount?: number;
75
85
  contextWindow?: number;
@@ -10,4 +10,16 @@ export interface GoalStatusStripProps {
10
10
  }
11
11
  export declare function getGoalActiveTimeMs(snapshot: GoalSnapshotV2, now: number): number;
12
12
  export declare function getGoalTokenLabel(goal: NonNullable<GoalSnapshotV2['goal']>, t: ReturnType<typeof useI18n>['t']): string | undefined;
13
+ /**
14
+ * Active time, against its ceiling when `model.goalMaxActiveMinutes` armed
15
+ * one for this Goal.
16
+ */
17
+ export declare function getGoalActiveTimeLabel(goal: NonNullable<GoalSnapshotV2['goal']>, activeTimeMs: number, t: ReturnType<typeof useI18n>['t']): string;
18
+ /**
19
+ * Finished turns against the ceiling `model.goalMaxTurns` armed. A Goal with
20
+ * no turn ceiling shows no turn figure here: the strip is one line, and the
21
+ * count alone says nothing about how much room is left. Zero stays hidden,
22
+ * as it does for tokens.
23
+ */
24
+ export declare function getGoalTurnBudgetLabel(goal: NonNullable<GoalSnapshotV2['goal']>, t: ReturnType<typeof useI18n>['t']): string | undefined;
13
25
  export declare function GoalStatusStrip({ snapshot, busy, onEdit, onPause, onResume, onClear, }: GoalStatusStripProps): import("react/jsx-runtime").JSX.Element | null;
@@ -1,5 +1,5 @@
1
1
  import type { Message, PermissionRequest } from '../adapters/types';
2
- import type { WebShellAssistantTurnFooterRenderInfo, WebShellSource } from '../customization';
2
+ import type { WebShellAssistantFeedbackRating, WebShellAssistantTurnFooterRenderInfo, WebShellSource } from '../customization';
3
3
  import { type SessionContentGenerator } from './messages/AssistantMessage';
4
4
  import type { TurnOutputOpenRequest } from './artifacts/TurnOutputs';
5
5
  import type { AttachmentPreviewRequest } from '../adapters/messageTypes';
@@ -33,6 +33,12 @@ interface MessageItemProps {
33
33
  branchRecordId?: string;
34
34
  showAssistantActions?: boolean;
35
35
  showAssistantBranch?: boolean;
36
+ /** Turn id marks are keyed by; unset hides the marks for this message. */
37
+ assistantFeedbackTurnId?: string;
38
+ /** Admitted prompt id of the turn; unset hides the marks for this message. */
39
+ assistantFeedbackPromptId?: string;
40
+ assistantFeedbackRating?: WebShellAssistantFeedbackRating;
41
+ onAssistantFeedbackRate?: (promptId: string, turnId: string, rating: WebShellAssistantFeedbackRating | null) => void;
36
42
  isLocateFlashing?: boolean;
37
43
  assistantTurnFooterInfo?: WebShellAssistantTurnFooterRenderInfo;
38
44
  turnSources?: readonly WebShellSource[];
@@ -9,6 +9,7 @@ import type { WebShellSlashCommandHandler } from '../App';
9
9
  import type { RegisterContextUsageControls } from '../hooks/useContextUsageControls';
10
10
  import { type PaneHeaderActionsRenderer } from './ChatPane';
11
11
  import type { TurnOutputKind, TurnOutputOpenRequest } from './artifacts/TurnOutputs';
12
+ import type { WebShellAssistantTurnSettledEvent } from '../customization';
12
13
  export interface SplitViewProps {
13
14
  /** Sessions to show in the split view. */
14
15
  sessionIds?: string[];
@@ -22,6 +23,7 @@ export interface SplitViewProps {
22
23
  * each render would re-fire the reporting effect and loop.
23
24
  */
24
25
  onPanesChange?: (sessionIds: string[]) => void;
26
+ onAssistantTurnSettled?: (event: WebShellAssistantTurnSettledEvent) => void;
25
27
  /**
26
28
  * Report panes surfacing approvals, including hidden panes. Keep stable while
27
29
  * consumer inputs are unchanged; a new callback receives the current list.
@@ -66,4 +68,4 @@ export interface SplitViewProps {
66
68
  * naturally scopes the keyboard to the pane the user clicks into, so panes never
67
69
  * fight over which session an approval or Enter belongs to.
68
70
  */
69
- export declare function SplitView({ sessionIds, showSessionDetails, onPanesChange, 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;
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;
@@ -12,6 +12,8 @@ export declare function StandaloneAuth({ baseUrl, initialToken, initialAddress,
12
12
  invalidTarget?: boolean;
13
13
  /** The daemon came from a link to an origin this browser has not used. */
14
14
  unconfirmedTarget?: boolean;
15
- onChangeTarget?: (daemonOrigin: string, token?: string) => boolean | void;
15
+ onChangeTarget?: (daemonOrigin: string, token?: string, options?: {
16
+ continueFlow?: 'workspace' | 'connection';
17
+ }) => boolean | void;
16
18
  children: (token: string | undefined) => ReactNode;
17
19
  }): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
@@ -5,6 +5,7 @@ import { type DaemonSessionOwnerSnapshot, type DaemonSessionActions } from '@qwe
5
5
  import { type TurnOutputFileChange, type TurnOutputOpenRequest, type TurnOutputScheduledTask } from './TurnOutputs';
6
6
  import type { EnvironmentAgentTask } from '../panels/EnvironmentPanel';
7
7
  import type { WebPreviewState } from '../preview/web-preview';
8
+ import type { TrajectoryPageLoader } from '../../trajectory/useTrajectoryWindow';
8
9
  import type { ContextUsageControls } from '../../hooks/useContextUsageControls';
9
10
  export type ImageTabSource = {
10
11
  kind: 'attachment';
@@ -138,6 +139,17 @@ export type ArtifactPanelTab = (WebPreviewState & {
138
139
  title: string;
139
140
  workspaceCwd?: string;
140
141
  initialized?: boolean;
142
+ } | {
143
+ id: string;
144
+ kind: 'trajectory';
145
+ title: string;
146
+ sessionId: string;
147
+ /**
148
+ * Fetches transcript pages for `sessionId`. Not serialisable, so a
149
+ * restored tab carries none until the host rewires it — the panel shows
150
+ * its loading state until then.
151
+ */
152
+ loadPage?: TrajectoryPageLoader;
141
153
  } | {
142
154
  id: string;
143
155
  kind: 'token_usage';
@@ -183,6 +195,15 @@ interface ArtifactPanelProps {
183
195
  onOpenLatestReview?: () => void;
184
196
  /** Open an interactive terminal tab in this panel (shown as an empty-state action). */
185
197
  onOpenTerminal?: () => void;
198
+ /** Open this session's trajectory tab (shown as an empty-state action). */
199
+ onOpenTrajectory?: () => void;
200
+ /**
201
+ * Id of the tab `onOpenTrajectory` opens. Tabs can belong to other sessions
202
+ * — split view opens one per pane, and a restored tab keeps the session it
203
+ * was opened for — so the entry has to look for this session's tab rather
204
+ * than for any trajectory tab at all.
205
+ */
206
+ trajectoryTabId?: string;
186
207
  onOpenWebPreview?: () => void;
187
208
  onWebPreviewChange?: (tabId: string, state: WebPreviewState) => void;
188
209
  items?: readonly WebShellRightPanelItem[];
@@ -225,5 +246,5 @@ interface ArtifactPanelProps {
225
246
  fullscreen?: boolean;
226
247
  onToggleFullscreen?: () => void;
227
248
  }
228
- export declare function ArtifactPanel({ contextUsageControls, artifacts, tabs, activeTabId, reviewChanges, selectedReviewPath, panelWidth, workspaceCwd, loading, restoring, error, onSelectTab, onCloseTab, onOpenFilePreview, latestReviewAvailable, onOpenLatestReview, onOpenTerminal, 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;
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;
229
250
  export {};
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type TrajectoryPageLoader } from '../../trajectory/useTrajectoryWindow';
7
+ export interface TrajectoryPanelProps {
8
+ /**
9
+ * Fetches transcript pages for this tab's session. Absent while a restored
10
+ * tab is waiting to be rewired, which renders as the loading state.
11
+ */
12
+ loadPage?: TrajectoryPageLoader;
13
+ }
14
+ export declare function TrajectoryPanel({ loadPage }: TrajectoryPanelProps): import("react/jsx-runtime").JSX.Element;
@@ -116,6 +116,13 @@ export declare function getFileChangePreviewContent(change: TurnOutputFileChange
116
116
  export declare function isRenderedFilePath(value: string): boolean;
117
117
  export declare function isDownloadableReviewFilePath(value: string): boolean;
118
118
  export declare function canOpenWorkspaceArtifact(artifact: DaemonSessionArtifact): boolean;
119
+ /**
120
+ * Link artifacts are entries to a resource, so their card opens the address in
121
+ * a new page instead of the side panel. Only a URL the shell may hand to the
122
+ * external opener qualifies, and published deliveries stay with the panel's
123
+ * live preview (`handleTurnOutputOpen`).
124
+ */
125
+ export declare function getArtifactExternalUrl(artifact: DaemonSessionArtifact): string | undefined;
119
126
  export declare function getWorkspaceArtifactOpenBlockReason(artifact: DaemonSessionArtifact, t: (key: string, vars?: Record<string, string | number>) => string): string | undefined;
120
127
  export declare function displayPath(path: string, workspaceCwd?: string): string;
121
128
  export {};
@@ -34,4 +34,4 @@ export declare function normalizePath(value: string | undefined): string;
34
34
  export declare function stripWorkspacePath(path: string, workspaceCwd?: string): string;
35
35
  export declare function isSamePath(left: string | undefined, right: string | undefined, workspaceCwd?: string): boolean;
36
36
  export declare function artifactPreviewDocument(html: string, title: string): string;
37
- export declare function withArtifactPreviewCsp(html: string): string;
37
+ export declare function loadArtifactPreviewDocument(html: string, title: string, signal: AbortSignal): Promise<string>;
@@ -1,4 +1,6 @@
1
- import type { SkillInfo } from '../../completions/slashCompletion';
1
+ import type { CommandInfo } from '../../adapters/types';
2
+ import { type SkillInfo } from '../../completions/slashCompletion';
3
+ import type { CommandDisplayCategoryOrder } from '../../utils/commandDisplay';
2
4
  import type { WebShellComposerTag } from '../../customization';
3
5
  import type { AtMentionWorkspaceActions } from '../../hooks/useAtMentionSources';
4
6
  export interface AddMenuProps {
@@ -16,5 +18,25 @@ export interface AddMenuProps {
16
18
  skillsLoading?: boolean;
17
19
  skillsLoadError?: boolean;
18
20
  skillsLoaded?: boolean;
21
+ /**
22
+ * Plan is chosen rarely, so its entry lives here rather than on the toolbar.
23
+ * Omitted when the host has not enabled Plan.
24
+ */
25
+ plan?: AddMenuPlanControl;
26
+ mobileActions?: {
27
+ commands: readonly CommandInfo[];
28
+ categoryOrder?: CommandDisplayCategoryOrder;
29
+ onHistory: () => void;
30
+ onToggleShell: () => void;
31
+ shellMode: boolean;
32
+ onLiveVoice?: () => void;
33
+ };
34
+ commandsOnly?: boolean;
19
35
  }
20
- export declare function AddMenu({ disabled, availabilityKey, addFileAvailable, uploadAvailable, onAddFiles, onFilePickerCancel, onInsertReference, onPrependSkill, getWorkspaceActions, skills, onSkillsOpenChange, skillsLoading, skillsLoadError, skillsLoaded, }: AddMenuProps): import("react/jsx-runtime").JSX.Element;
36
+ export interface AddMenuPlanControl {
37
+ checked: boolean;
38
+ /** Mode controls are busy; the row says so, as no row is disabled silently. */
39
+ disabled?: boolean;
40
+ onToggle: () => void;
41
+ }
42
+ export declare function AddMenu({ disabled, availabilityKey, addFileAvailable, uploadAvailable, onAddFiles, onFilePickerCancel, onInsertReference, onPrependSkill, getWorkspaceActions, skills, onSkillsOpenChange, skillsLoading, skillsLoadError, skillsLoaded, plan, mobileActions, commandsOnly, }: AddMenuProps): import("react/jsx-runtime").JSX.Element;
@@ -8,10 +8,20 @@ export interface WorkspacePathSuggestions {
8
8
  suggestions: WorkspacePathSuggestion[];
9
9
  truncated: boolean;
10
10
  }
11
+ export interface WorkspaceLocationOption {
12
+ origin: string;
13
+ label: string;
14
+ remote: boolean;
15
+ }
11
16
  interface AddWorkspaceDialogProps {
17
+ browseDirectories?: boolean;
18
+ initialPath?: string;
12
19
  onClose: () => void;
13
20
  onAdd: (cwd: string, persist: boolean, displayName?: string) => Promise<void>;
14
21
  displayNameEnabled?: boolean;
22
+ locations?: WorkspaceLocationOption[];
23
+ selectedLocation?: string;
24
+ onLocationChange?: (origin: string) => boolean | void;
15
25
  /**
16
26
  * Directory autocomplete backend. When provided, typing an absolute path
17
27
  * surfaces matching subdirectories in a listbox under the input.
@@ -20,5 +30,5 @@ interface AddWorkspaceDialogProps {
20
30
  onPick?: () => Promise<string | undefined>;
21
31
  persistenceSupported?: boolean;
22
32
  }
23
- export declare function AddWorkspaceDialog({ onClose, onAdd, displayNameEnabled, onSuggest, onPick, persistenceSupported, }: AddWorkspaceDialogProps): import("react/jsx-runtime").JSX.Element;
33
+ export declare function AddWorkspaceDialog({ browseDirectories, initialPath, onClose, onAdd, displayNameEnabled, locations, selectedLocation, onLocationChange, onSuggest, onPick, persistenceSupported, }: AddWorkspaceDialogProps): import("react/jsx-runtime").JSX.Element;
24
34
  export {};
@@ -1,3 +1,7 @@
1
1
  export declare function DaemonStatusDialog({ onChangeTarget, }?: {
2
2
  onChangeTarget?: (daemonOrigin: string, token?: string) => boolean | void;
3
3
  }): import("react/jsx-runtime").JSX.Element;
4
+ export declare function DaemonConnectionsSettings({ onChangeTarget, onAddConnection, }?: {
5
+ onChangeTarget?: (daemonOrigin: string, token?: string) => boolean | void;
6
+ onAddConnection?: (daemonOrigin: string, token?: string) => boolean | void;
7
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The folder step before it can show folders: the daemon's capabilities are
3
+ * still loading, the lookup failed, or the daemon cannot register workspaces at
4
+ * all. One shell for all three, so the states cannot overlap or leave a gap.
5
+ */
6
+ export declare function WorkspaceAddStatusDialog({ message, tone, subtitle, onClose, }: {
7
+ message: string;
8
+ tone: 'status' | 'alert';
9
+ subtitle?: string;
10
+ onClose: () => void;
11
+ }): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,4 @@
1
- import { type WebShellAssistantTurnFooterRenderInfo, type WebShellSource } from '../../customization';
1
+ import { type WebShellAssistantFeedbackRating, type WebShellAssistantTurnFooterRenderInfo, type WebShellSource } from '../../customization';
2
2
  import type { DaemonSessionGenerationEvent } from '@qwen-code/sdk/daemon';
3
3
  interface AssistantMessageProps {
4
4
  content: string;
@@ -7,6 +7,10 @@ interface AssistantMessageProps {
7
7
  onBranchSession?: () => void | Promise<void>;
8
8
  showFooterActions?: boolean;
9
9
  showBranchAction?: boolean;
10
+ /** Satisfied / not-satisfied marks are only offered when this is set. */
11
+ showAssistantFeedback?: boolean;
12
+ assistantFeedbackRating?: WebShellAssistantFeedbackRating;
13
+ onAssistantFeedbackRate?: (rating: WebShellAssistantFeedbackRating | null) => void;
10
14
  isLocateFlashing?: boolean;
11
15
  customFooterInfo?: WebShellAssistantTurnFooterRenderInfo;
12
16
  turnSources?: readonly WebShellSource[];
@@ -1,3 +1,4 @@
1
+ import { type ReactNode } from 'react';
1
2
  import type { DaemonSettingDescriptor, DaemonSettingUpdateResult, DaemonWorkspaceSettingsStatus } from '@qwen-code/web-shell/daemon-react-sdk';
2
3
  import { type WebShellLanguage } from '../../i18n';
3
4
  import type { UseLiveVoiceSetupResult } from '../../live/useLiveVoiceSetup';
@@ -15,6 +16,8 @@ interface SettingsMessageProps {
15
16
  onChatWidthModeChange: (mode: ChatWidthMode) => void;
16
17
  /** Model list/add/delete/select, rendered inside the Model category. */
17
18
  modelManagement?: ModelManagementProps;
19
+ /** Browser-local remote computer catalog and connection controls. */
20
+ connections?: ReactNode;
18
21
  embedded?: boolean;
19
22
  /** Category to select on open (deep link, e.g. 'Daemon'). */
20
23
  initialCategory?: string;
@@ -42,5 +45,5 @@ export type FlatRow = {
42
45
  localKey: 'chatWidth' | 'browserNotifications';
43
46
  };
44
47
  export declare function nextSettingIdx(rows: FlatRow[], current: number, dir: 1 | -1): number;
45
- export declare function SettingsMessage({ settingsState, presentation, onLanguageChange, onSubDialog, onThemeChange, chatWidthMode, onChatWidthModeChange, modelManagement, embedded, initialCategory, }: SettingsMessageProps): import("react/jsx-runtime").JSX.Element;
48
+ export declare function SettingsMessage({ settingsState, presentation, onLanguageChange, onSubDialog, onThemeChange, chatWidthMode, onChatWidthModeChange, modelManagement, connections, embedded, initialCategory, }: SettingsMessageProps): import("react/jsx-runtime").JSX.Element;
46
49
  export {};
@@ -0,0 +1,4 @@
1
+ import type { ACPToolCall } from '../../../adapters/types';
2
+ export declare function ShellToolOutput({ tool }: {
3
+ tool: ACPToolCall;
4
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import type { CSSProperties } from 'react';
2
+ interface ShellSegment {
3
+ text: string;
4
+ style?: CSSProperties;
5
+ }
6
+ export interface ShellLiveOutput {
7
+ segments?: ShellSegment[];
8
+ timeoutMs?: number;
9
+ totalLines?: number;
10
+ totalBytes?: number;
11
+ }
12
+ export declare function parseShellLiveOutput(value: unknown): ShellLiveOutput | null;
13
+ export {};
@@ -26,6 +26,7 @@ interface EnvironmentPanelProps {
26
26
  items?: readonly WebShellEnvironmentPanelItem[];
27
27
  onOpenGitDiff?: () => void;
28
28
  onOpenGitCommit?: () => void;
29
+ onOpenGitLog?: () => void;
29
30
  onOpenAgent?: (task: DaemonSessionAgentTaskStatus) => void;
30
31
  onOpenAgentWorkflow?: () => void;
31
32
  onOpenTask: (task: DaemonSessionTaskWithWorkflowStatus) => void;
@@ -41,5 +42,5 @@ export type EnvironmentAgentTask = DaemonSessionAgentTaskStatus & {
41
42
  color?: string;
42
43
  lineageState?: 'complete' | 'orphaned' | 'cycle';
43
44
  };
44
- export declare function EnvironmentPanel({ sources, onOpenSource, retrySourceRegistration, floating, hidden, workspaceCwd, gitWorkspaceCwd, gitCwd, branch, gitStatus, tasks, agentTasks, attachments, attachmentsLoading, attachmentsError, onRetryAttachments, artifacts, artifactsLoading, items, onOpenGitDiff, onOpenGitCommit, onOpenAgent, onOpenAgentWorkflow, onOpenTask, onReadImage, onImagePreview, onAttachmentPreview, onAttachmentPreviewError, onOpenArtifact, onDismiss, }: EnvironmentPanelProps): import("react/jsx-runtime").JSX.Element;
45
+ export declare function EnvironmentPanel({ sources, onOpenSource, retrySourceRegistration, floating, hidden, workspaceCwd, gitWorkspaceCwd, gitCwd, branch, gitStatus, tasks, agentTasks, attachments, attachmentsLoading, attachmentsError, onRetryAttachments, artifacts, artifactsLoading, items, onOpenGitDiff, onOpenGitCommit, onOpenGitLog, onOpenAgent, onOpenAgentWorkflow, onOpenTask, onReadImage, onImagePreview, onAttachmentPreview, onAttachmentPreviewError, onOpenArtifact, onDismiss, }: EnvironmentPanelProps): import("react/jsx-runtime").JSX.Element;
45
46
  export {};
@@ -10,6 +10,7 @@ export interface WorkspaceHeaderActionsContext {
10
10
  }
11
11
  interface WorkspaceSectionProps {
12
12
  workspace: DaemonWorkspaceCapability;
13
+ remote?: boolean;
13
14
  renderHeader?: (expanded: boolean) => ReactNode;
14
15
  client: DaemonClient;
15
16
  reloadToken: number;
@@ -108,5 +109,5 @@ interface WorkspaceSectionProps {
108
109
  /** Commit entry for the same picker; the row still opens without it. */
109
110
  onOpenCommit?: (workspaceCwd: string) => void;
110
111
  }
111
- export declare function WorkspaceSection({ workspace, renderHeader, client, reloadToken, untrustedLabel, readOnlyLabel, trustToOpenLabel, noSessionsLabel, loadErrorLabel, organizationEnabled, sessionCatalogRequestsEnabled, sessionGroupCatalog, sessionLiveStateEnabled, sourceType, channelGroupingEnabled, ungroupedLabel, searchQuery, expanded: controlledExpanded, autoExpandKey, onExpandedChange, renderSessions, renderSession, mapSession, showSessionDetails, headerActions, overviewEnabled, overviewMenuOpen, overviewItems, gitBranchWanted, sessionStats, onRenameGroup, onDeleteGroup, renameGroupLabel, deleteGroupLabel, groupActionsDisabled, excludePinned, limitSessions, isPinnedSectionMember, onOpenPathLocally, onOpenTerminalLocally, onOpenGitDiff, onOpenCommit, }: WorkspaceSectionProps): import("react/jsx-runtime").JSX.Element;
112
+ export declare function WorkspaceSection({ workspace, remote, renderHeader, client, reloadToken, untrustedLabel, readOnlyLabel, trustToOpenLabel, noSessionsLabel, loadErrorLabel, organizationEnabled, sessionCatalogRequestsEnabled, sessionGroupCatalog, sessionLiveStateEnabled, sourceType, channelGroupingEnabled, ungroupedLabel, searchQuery, expanded: controlledExpanded, autoExpandKey, onExpandedChange, renderSessions, renderSession, mapSession, showSessionDetails, headerActions, overviewEnabled, overviewMenuOpen, overviewItems, gitBranchWanted, sessionStats, onRenameGroup, onDeleteGroup, renameGroupLabel, deleteGroupLabel, groupActionsDisabled, excludePinned, limitSessions, isPinnedSectionMember, onOpenPathLocally, onOpenTerminalLocally, onOpenGitDiff, onOpenCommit, }: WorkspaceSectionProps): import("react/jsx-runtime").JSX.Element;
112
113
  export {};
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { AlertDialog as AlertDialogPrimitive } from 'radix-ui';
3
- import { Button } from '@/components/ui/button';
3
+ import { Button } from './button';
4
4
  declare function AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
5
5
  declare function AlertDialogTrigger({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
6
6
  declare function AlertDialogPortal({ container, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import { type VariantProps } from 'class-variance-authority';
2
- import { Label } from '@/components/ui/label';
2
+ import { Label } from './label';
3
3
  declare function FieldSet({ className, ...props }: React.ComponentProps<'fieldset'>): import("react/jsx-runtime").JSX.Element;
4
4
  declare function FieldLegend({ className, variant, ...props }: React.ComponentProps<'legend'> & {
5
5
  variant?: 'legend' | 'label';
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  import { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';
4
- import { toggleVariants } from '@/components/ui/toggle';
4
+ import { toggleVariants } from './toggle';
5
5
  declare function ToggleGroup({ className, variant, size, spacing, orientation, children, ...props }: React.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants> & {
6
6
  spacing?: number;
7
7
  orientation?: 'horizontal' | 'vertical';
@@ -0,0 +1,11 @@
1
+ import type { DaemonClient } from '@qwen-code/sdk/daemon';
2
+ export interface CapacityRecoveryIntent {
3
+ client: DaemonClient;
4
+ requesterCwd?: string;
5
+ isCurrent(): boolean;
6
+ resume(): Promise<unknown>;
7
+ }
8
+ export declare function CapacityRecoveryDialog({ intent, onClose, }: {
9
+ intent: CapacityRecoveryIntent;
10
+ onClose(): void;
11
+ }): import("react/jsx-runtime").JSX.Element;
@@ -38,4 +38,6 @@ export declare function getAllowedDaemonOrigin(raw: string): string;
38
38
  export declare function buildDaemonConnectionUrl(raw: string, currentHref: string): string | undefined;
39
39
  export declare function confirmDaemonTarget(origin: string): void;
40
40
  export declare function isKnownDaemonTarget(origin: string): boolean;
41
- export declare function navigateToDaemon(raw: string, token?: string): boolean;
41
+ export declare function navigateToDaemon(raw: string, token?: string, options?: {
42
+ continueFlow?: 'workspace' | 'connection';
43
+ }): boolean;
@@ -0,0 +1,18 @@
1
+ export declare function formatOriginHost(origin: string): string;
2
+ export declare function readRemoteConnections(): string[];
3
+ export declare function rememberRemoteConnection(origin: string): void;
4
+ export declare function forgetRemoteConnection(origin: string): string[];
5
+ export declare function isRemoteConnectionKnown(origin: string): boolean;
6
+ /**
7
+ * Remote computers offered as a workspace location: the persisted catalog plus
8
+ * the daemon this tab is pointed at, which is reachable now even if the catalog
9
+ * write was refused. Callers use the count to decide whether a location step is
10
+ * worth showing at all, so both sites must agree on the list.
11
+ */
12
+ export declare function listRemoteComputers(): string[];
13
+ export declare function isRemoteConnectionAddActive(): boolean;
14
+ export declare function startRemoteConnectionAdd(daemonOrigin: string, token?: string): boolean;
15
+ export declare function completeRemoteConnectionAdd(origin: string): boolean;
16
+ export declare function leaveRemoteConnectionAdd(): boolean;
17
+ export declare function getInitialConnectionsSettingsCategory(): string | undefined;
18
+ export declare function clearInitialConnectionsSettingsCategory(): void;