@qwen-code/web-shell 0.26.3-preview.0 → 0.26.4

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 (55) hide show
  1. package/README.md +110 -9
  2. package/dist/{PierreFilePreview-DK0Qg591.js → PierreFilePreview-CVoJL-kD.js} +1 -1
  3. package/dist/{SpreadsheetPreview-nx5JXOUL.js → SpreadsheetPreview-CPSqOai5.js} +2 -2
  4. package/dist/{WorkspaceFileBrowser-D5vot7Ow.js → WorkspaceFileBrowser-IuQcqNWd.js} +2 -2
  5. package/dist/agents-route-BBfOMyJ5.js +1552 -0
  6. package/dist/daemon-react-sdk.js +1 -1
  7. package/dist/{index-bGRCmaBo.js → index-DyFoZ0bq.js} +59574 -59029
  8. package/dist/index.js +3 -3
  9. package/dist/sw.js +1 -1
  10. package/dist/transcript.js +9243 -9071
  11. package/dist/types/App.d.ts +8 -4
  12. package/dist/types/adapters/messageTypes.d.ts +7 -0
  13. package/dist/types/components/ChatEditor.d.ts +2 -0
  14. package/dist/types/components/DaemonConnectionBanner.d.ts +1 -0
  15. package/dist/types/components/SessionOverviewPanel.d.ts +6 -3
  16. package/dist/types/components/composer/AddMenu.d.ts +2 -1
  17. package/dist/types/components/dialogs/AddWorkspaceDialog.d.ts +7 -3
  18. package/dist/types/components/dialogs/DialogShell.d.ts +5 -2
  19. package/dist/types/components/local-control-api.d.ts +2 -1
  20. package/dist/types/components/managed/ManagedSessionWorktrees.d.ts +12 -0
  21. package/dist/types/components/managed/ManagedWorktreePopover.d.ts +9 -0
  22. package/dist/types/components/managed/generated/managed-agent-api.d.ts +249 -8
  23. package/dist/types/components/managed/java-managed-agent-client.d.ts +8 -9
  24. package/dist/types/components/managed/managed-agent-provider.d.ts +40 -9
  25. package/dist/types/components/managed/managed-worktree-messages.d.ts +41 -0
  26. package/dist/types/components/managed/use-managed-file-upload.d.ts +3 -5
  27. package/dist/types/components/messages/McpApp.d.ts +4 -0
  28. package/dist/types/components/messages/SettingsMessage.d.ts +2 -1
  29. package/dist/types/components/sidebar/SessionDetailsTooltip.d.ts +3 -2
  30. package/dist/types/components/sidebar/WebShellSidebar.d.ts +5 -3
  31. package/dist/types/components/ui/alert.d.ts +1 -1
  32. package/dist/types/components/ui/badge.d.ts +1 -1
  33. package/dist/types/components/ui/button.d.ts +2 -2
  34. package/dist/types/components/workspace-agents/agent-events.d.ts +1 -1
  35. package/dist/types/components/workspace-agents/session-agents-api.d.ts +2 -1
  36. package/dist/types/components/workspace-agents/threads-api.d.ts +2 -1
  37. package/dist/types/components/workspace-agents/useAgentChatEntry.d.ts +3 -1
  38. package/dist/types/customization.d.ts +5 -0
  39. package/dist/types/daemon/availability-context.d.ts +4 -0
  40. package/dist/types/daemon/availability.d.ts +43 -0
  41. package/dist/types/daemon/availability.test-fixtures.d.ts +12 -0
  42. package/dist/types/daemon/rest-request.d.ts +8 -0
  43. package/dist/types/desktop-relay/desktop-relay-client.d.ts +1 -1
  44. package/dist/types/hooks/useMcpAppMessages.d.ts +17 -1
  45. package/dist/types/index.d.ts +1 -1
  46. package/dist/types/live/useLiveVoiceSetup.d.ts +1 -1
  47. package/dist/types/local-files/bridge-client.d.ts +5 -0
  48. package/dist/types/mcp-app/messages.d.ts +4 -2
  49. package/dist/types/mcpAppHostContext.d.ts +25 -3
  50. package/dist/types/session-catalog/session-catalog-store.d.ts +2 -0
  51. package/dist/types/settings.d.ts +1 -1
  52. package/dist/types/utils/planMode.d.ts +1 -1
  53. package/dist/{useDaemonMidTurnInjected-DPmdVYAB.js → useDaemonMidTurnInjected-BpWZTnoN.js} +8272 -6961
  54. package/package.json +1 -1
  55. package/dist/agents-route-CoDAxwQK.js +0 -1546
@@ -21,7 +21,7 @@ import { type ComposerPlaceholderState } from './utils/composerInputState';
21
21
  import type { CommandInfo, Message } from './adapters/types';
22
22
  import { type WebShellBrand, type WebShellResolvedBrand } from './brandContext';
23
23
  import { type WebShellTheme } from './themeContext';
24
- import { type WebShellCustomization, 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';
24
+ import { type WebShellCustomization, type WebShellWorkspaceDirectoryPicker, 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';
25
25
  import type { CommandDisplayCategoryOrder } from './utils/commandDisplay';
26
26
  export interface BugReportInfo {
27
27
  title: string;
@@ -38,9 +38,9 @@ export interface WebShellSidebarOptions {
38
38
  showLive?: boolean;
39
39
  /** Hide or replace the complete sidebar branding row. */
40
40
  branding?: false | WebShellSidebarBranding;
41
- /** Customize the primary navigation area (new task button, custom entries). */
41
+ /** Customize the primary navigation area (new session button, custom entries). */
42
42
  primaryNav?: WebShellSidebarPrimaryNavOptions;
43
- /** Whether to hide the "Projects" header row (with search and add workspace). Defaults to false (shown). */
43
+ /** Whether to hide the "Workspaces" header row (with search and add workspace). Defaults to false (shown). */
44
44
  hideProjectHeader?: boolean;
45
45
  /** Customize which action buttons appear on session rows. */
46
46
  sessionActions?: WebShellSidebarSessionActionsOptions;
@@ -201,6 +201,8 @@ export interface WebShellProps {
201
201
  }>) => void;
202
202
  /** Open a workspace file in the embedding host instead of WebShell preview. */
203
203
  onWorkspaceFileOpen?: (path: string) => void;
204
+ /** Select a directory on the connected daemon. Overrides native picking without registering or trusting the path. */
205
+ onPickWorkspaceDirectory?: WebShellWorkspaceDirectoryPicker;
204
206
  /** Open a completed Insight report in a host-native surface. */
205
207
  onInsightReportOpen?: (path: string) => void;
206
208
  /** Open context usage details in the host instead of the built-in panel. */
@@ -220,6 +222,8 @@ export interface WebShellProps {
220
222
  composerToolbarActions?: readonly ComposerToolbarAction[];
221
223
  /** Execution mode choices. Overrides ui.allowedApprovalModes; [] offers none. Presentation only. */
222
224
  allowedApprovalModes?: readonly WebShellApprovalMode[];
225
+ /** Composer presentation shared by the main chat, split panes, and side tasks. */
226
+ composerVariant?: 'default' | 'simple';
223
227
  /** Optionally filter main-model entries without changing shared defaults. */
224
228
  mainModelFilter?: (model: ModelDialogModel) => boolean;
225
229
  /** Stack completion details vertically for narrow embedded hosts. */
@@ -456,4 +460,4 @@ export declare function canArchiveSideTaskSummary(session: Pick<DaemonSessionSum
456
460
  export declare function mergeSideTaskCatalog(catalog: SideTaskCatalogState, parentSessionId: string, listedItems: SideTaskListItem[], optimisticIds: ReadonlySet<string>): SideTaskCatalogState;
457
461
  export declare function getEnvironmentAgentTasks(messages: readonly Message[], sessionTasks: readonly DaemonSessionTaskWithWorkflowStatus[]): EnvironmentAgentTask[];
458
462
  export declare function mergeAgentTrace(liveAgents: readonly EnvironmentAgentTask[], trace: DaemonAgentTrace | undefined, now?: number): EnvironmentAgentTask[];
459
- export declare function App({ onRefreshModels, 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, unavailableModels, mountUnavailableModelTooltip, header, rightPanel, showToolCalls, environmentPanel, splitSessionIds: externalSplitSessionIds, onSplitSessionIdsChange, renderPaneHeaderActions, onRightPanelOpen, onFileReviewOpen, onWorkspaceFileOpen, onInsightReportOpen, onContextUsageOpen, messageTurnOutputs, filterArtifact, shellRef, composerToolbarActions, allowedApprovalModes: allowedApprovalModesProp, 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;
463
+ export declare function App({ onRefreshModels, 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, unavailableModels, mountUnavailableModelTooltip, header, rightPanel, showToolCalls, environmentPanel, splitSessionIds: externalSplitSessionIds, onSplitSessionIdsChange, renderPaneHeaderActions, onRightPanelOpen, onFileReviewOpen, onWorkspaceFileOpen, onPickWorkspaceDirectory, onInsightReportOpen, onContextUsageOpen, messageTurnOutputs, filterArtifact, shellRef, composerToolbarActions, allowedApprovalModes: allowedApprovalModesProp, composerVariant, 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;
@@ -55,6 +55,13 @@ export interface DaemonMessageToolCall {
55
55
  endTime?: number;
56
56
  wasCancelled?: boolean;
57
57
  subContent?: string;
58
+ /**
59
+ * Path-style identity of the agent that produced this call's sub-content,
60
+ * e.g. `/root/general-purpose`. Carried from the transcript block's `agent`
61
+ * field so the panel can name a subagent precisely instead of by type alone
62
+ * — two parallel subagents of the same type are otherwise indistinguishable.
63
+ */
64
+ agentPath?: string;
58
65
  subTools?: DaemonMessageToolCall[];
59
66
  /** Transcript blocks folded into this tool presentation. */
60
67
  sourceBlockIds?: string[];
@@ -53,6 +53,8 @@ interface ChatEditorProps {
53
53
  currentModel?: string;
54
54
  modelControlsDisabled?: boolean;
55
55
  gitBranch?: string;
56
+ /** Service-owned Git control in the workspace row below the composer. */
57
+ gitContextControl?: ReactNode;
56
58
  /** Whether the session is in a worktree (styles the git chip purple). */
57
59
  gitWorktree?: boolean;
58
60
  /** Git working directory for worktree sessions; targets git operations. */
@@ -0,0 +1 @@
1
+ export declare function DaemonConnectionBanner(): import("react/jsx-runtime").JSX.Element | null;
@@ -3,7 +3,8 @@
3
3
  * Copyright 2025 Qwen Team
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import type { DaemonSessionGroupPresetColor, DaemonSessionPrInfo, DaemonSessionSummary, DaemonStatusReportSession } from '@qwen-code/sdk/daemon';
6
+ import { type DaemonProductSessionContext } from '@qwen-code/web-shell/daemon-react-sdk';
7
+ import { type DaemonSessionGroupPresetColor, type DaemonSessionPrInfo, type DaemonSessionSummary, type DaemonStatusReportSession } from '@qwen-code/sdk/daemon';
7
8
  export type SessionCardStatus = 'needsApproval' | 'askUserQuestion' | 'running' | 'idle';
8
9
  export interface SessionCard {
9
10
  sessionId: string;
@@ -17,6 +18,8 @@ export interface SessionCard {
17
18
  gitBranch?: string;
18
19
  /** The workspace the session lives in. */
19
20
  workspaceCwd: string;
21
+ /** Catalog the session came from; 'standalone' has no workspace of its own. */
22
+ sourceType?: string;
20
23
  }
21
24
  type SessionIdentity = Pick<SessionCard, 'sessionId' | 'workspaceCwd'>;
22
25
  /**
@@ -30,13 +33,13 @@ type SessionIdentity = Pick<SessionCard, 'sessionId' | 'workspaceCwd'>;
30
33
  * idle, then most-recent first, so sessions that want attention float to the
31
34
  * top of a 10+ session grid.
32
35
  */
33
- export declare function deriveSessionCards(sessions: DaemonSessionSummary[], currentSessionId: string | undefined, statusSessions?: DaemonStatusReportSession[], currentWorkspaceCwd?: string): SessionCard[];
36
+ export declare function deriveSessionCards(sessions: DaemonSessionSummary[], currentSessionId: string | undefined, statusSessions?: DaemonStatusReportSession[], currentWorkspaceCwd?: string, currentContextKind?: string): SessionCard[];
34
37
  /**
35
38
  * A malformed daemon payload must not white-screen the shell; contain any
36
39
  * render throw to the panel, mirroring DaemonStatusDialog.
37
40
  */
38
41
  export declare function SessionOverviewPanel({ onOpenSession, onOpenSplit, onCurrentSessionRemoved, includeOtherWorkspaces, workspaceCwd, manageLiveState, }: {
39
- onOpenSession: (sessionId: string, workspaceCwd?: string) => void;
42
+ onOpenSession: (sessionId: string, workspaceCwd?: string, sessionContext?: DaemonProductSessionContext) => void;
40
43
  onOpenSplit?: (sessionIds: string[]) => void;
41
44
  onCurrentSessionRemoved?: (session: SessionIdentity) => Promise<boolean | void> | boolean | void;
42
45
  includeOtherWorkspaces?: boolean;
@@ -36,6 +36,7 @@ export interface AddMenuProps {
36
36
  onLiveVoice?: () => void;
37
37
  };
38
38
  commandsOnly?: boolean;
39
+ simpleMode?: boolean;
39
40
  }
40
41
  export interface AddMenuPlanControl {
41
42
  checked: boolean;
@@ -43,4 +44,4 @@ export interface AddMenuPlanControl {
43
44
  disabled?: boolean;
44
45
  onToggle: () => void;
45
46
  }
46
- export declare function AddMenu({ disabled, availabilityKey, addFileAvailable, uploadAvailable, onAddFiles, onFilePickerCancel, onInsertReference, onPrependSkill, getWorkspaceActions, skills, onSkillsOpenChange, skillsLoading, skillsLoadError, skillsLoaded, plan, btw, mobileActions, commandsOnly, }: AddMenuProps): import("react/jsx-runtime").JSX.Element;
47
+ export declare function AddMenu({ disabled, availabilityKey, addFileAvailable, uploadAvailable, onAddFiles, onFilePickerCancel, onInsertReference, onPrependSkill, getWorkspaceActions, skills, onSkillsOpenChange, skillsLoading, skillsLoadError, skillsLoaded, plan, btw, mobileActions, commandsOnly, simpleMode, }: AddMenuProps): import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,4 @@
1
+ import type { WebShellWorkspaceDirectoryPicker } from '../../customization';
1
2
  import { type WorkspaceExecutionMode } from '../workspaces/WorkspaceExecutionSelect';
2
3
  export interface WorkspacePathSuggestion {
3
4
  name: string;
@@ -37,7 +38,7 @@ export interface GitWorkspaceCloneControls {
37
38
  cancel(jobId: string): Promise<void>;
38
39
  }
39
40
  interface AddWorkspaceDialogProps {
40
- /** Overrides the default "Add Workspace" heading. */
41
+ /** Overrides the default "Add workspace" heading. */
41
42
  title?: string;
42
43
  /** Overrides the default submit label; the in-flight label is unchanged. */
43
44
  submitLabel?: string;
@@ -59,7 +60,10 @@ interface AddWorkspaceDialogProps {
59
60
  * surfaces matching subdirectories in a listbox under the input.
60
61
  */
61
62
  onSuggest?: (prefix: string) => Promise<WorkspacePathSuggestions>;
62
- onPick?: () => Promise<string | undefined>;
63
+ onPick?: WebShellWorkspaceDirectoryPicker;
64
+ /** Stable identity for the current connection/target; replace it to cancel a pick. */
65
+ pickerTarget?: unknown;
66
+ pickerUsesHostUi?: boolean;
63
67
  persistenceSupported?: boolean;
64
68
  /**
65
69
  * Git clone controls. Presence means the connected daemon advertises
@@ -67,5 +71,5 @@ interface AddWorkspaceDialogProps {
67
71
  */
68
72
  gitClone?: GitWorkspaceCloneControls;
69
73
  }
70
- export declare function AddWorkspaceDialog({ title, submitLabel, executionMode, onExecutionModeChange, executionModeLocked, browseDirectories, initialPath, pathHint, pathPlaceholder, onClose, onAdd, displayNameEnabled, locations, selectedLocation, onLocationChange, onSuggest, onPick, persistenceSupported, gitClone, }: AddWorkspaceDialogProps): import("react/jsx-runtime").JSX.Element;
74
+ export declare function AddWorkspaceDialog({ title, submitLabel, executionMode, onExecutionModeChange, executionModeLocked, browseDirectories, initialPath, pathHint, pathPlaceholder, onClose, onAdd, displayNameEnabled, locations, selectedLocation, onLocationChange, onSuggest, onPick, pickerTarget, pickerUsesHostUi, persistenceSupported, gitClone, }: AddWorkspaceDialogProps): import("react/jsx-runtime").JSX.Element;
71
75
  export {};
@@ -1,4 +1,4 @@
1
- import { type ReactNode } from 'react';
1
+ import { type ReactNode, type RefObject } from 'react';
2
2
  type DialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'auto';
3
3
  interface DialogShellProps {
4
4
  title: string;
@@ -6,10 +6,13 @@ interface DialogShellProps {
6
6
  size?: DialogSize;
7
7
  allowFullscreen?: boolean;
8
8
  dismissible?: boolean;
9
+ modal?: boolean;
10
+ modalRestoreFocusRef?: RefObject<HTMLElement | null>;
11
+ 'aria-busy'?: boolean;
9
12
  onClose: () => void;
10
13
  children: ReactNode;
11
14
  }
12
15
  export declare const DialogShellIdContext: import("react").Context<object | null>;
13
16
  export declare function isTopDialogShellId(shellId: object | null): boolean;
14
- export declare function DialogShell({ title, subtitle, size, allowFullscreen, dismissible, onClose, children, }: DialogShellProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function DialogShell({ title, subtitle, size, allowFullscreen, dismissible, modal, modalRestoreFocusRef, 'aria-busy': ariaBusy, onClose, children, }: DialogShellProps): import("react/jsx-runtime").JSX.Element;
15
18
  export {};
@@ -3,6 +3,7 @@
3
3
  * Copyright 2025 Qwen Team
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import type { DaemonClient } from '@qwen-code/sdk/daemon';
6
7
  export interface LanCandidate {
7
8
  interfaceName: string;
8
9
  address: string;
@@ -29,4 +30,4 @@ export declare class LocalControlRequestError extends Error {
29
30
  readonly status?: number | undefined;
30
31
  constructor(message: string, payload?: LocalControlStatus | undefined, status?: number | undefined);
31
32
  }
32
- export declare function requestLocalControl(baseUrl: string, token: string | undefined, method: 'GET' | 'POST', path: string, body?: object): Promise<LocalControlStatus>;
33
+ export declare function requestLocalControl(baseUrl: string, token: string | undefined, method: 'GET' | 'POST', path: string, body?: object, client?: DaemonClient): Promise<LocalControlStatus>;
@@ -0,0 +1,12 @@
1
+ import type { ManagedAgentProvider, ManagedSessionWorktree } from './managed-agent-provider';
2
+ export declare function ManagedWorktreeStatus({ worktree, compact, }: {
3
+ worktree: ManagedSessionWorktree;
4
+ compact?: boolean;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ export declare function ManagedSessionWorktrees({ provider, clientId, workspaceId, open, onOpenChange, }: {
7
+ provider: Pick<ManagedAgentProvider, 'storageKey' | 'sessionWorktrees'>;
8
+ clientId: string;
9
+ workspaceId: string;
10
+ open: boolean;
11
+ onOpenChange: (open: boolean) => void;
12
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ export declare function ManagedWorktreePopover({ worktree, currentBranch, open, onOpenChange, disabled, onWorktreeChange, onManage, }: {
2
+ worktree: boolean;
3
+ currentBranch?: string | null;
4
+ open: boolean;
5
+ onOpenChange: (value: boolean) => void;
6
+ disabled: boolean;
7
+ onWorktreeChange: (value: boolean) => void;
8
+ onManage: () => void;
9
+ }): import("react/jsx-runtime").JSX.Element;
@@ -1057,6 +1057,74 @@ export interface paths {
1057
1057
  patch?: never;
1058
1058
  trace?: never;
1059
1059
  };
1060
+ "/api/agent/web-shell/v1/workspaces/worktrees/options": {
1061
+ parameters: {
1062
+ query?: never;
1063
+ header?: never;
1064
+ path?: never;
1065
+ cookie?: never;
1066
+ };
1067
+ get?: never;
1068
+ put?: never;
1069
+ /** Options a main Session worktree */
1070
+ post: operations["webShellSessionWorktreeOptions"];
1071
+ delete?: never;
1072
+ options?: never;
1073
+ head?: never;
1074
+ patch?: never;
1075
+ trace?: never;
1076
+ };
1077
+ "/api/agent/web-shell/v1/workspaces/worktrees/query": {
1078
+ parameters: {
1079
+ query?: never;
1080
+ header?: never;
1081
+ path?: never;
1082
+ cookie?: never;
1083
+ };
1084
+ get?: never;
1085
+ put?: never;
1086
+ /** Query a main Session worktree */
1087
+ post: operations["webShellSessionWorktreeQuery"];
1088
+ delete?: never;
1089
+ options?: never;
1090
+ head?: never;
1091
+ patch?: never;
1092
+ trace?: never;
1093
+ };
1094
+ "/api/agent/web-shell/v1/workspaces/worktrees/inspect": {
1095
+ parameters: {
1096
+ query?: never;
1097
+ header?: never;
1098
+ path?: never;
1099
+ cookie?: never;
1100
+ };
1101
+ get?: never;
1102
+ put?: never;
1103
+ /** Inspect a main Session worktree */
1104
+ post: operations["webShellSessionWorktreeInspect"];
1105
+ delete?: never;
1106
+ options?: never;
1107
+ head?: never;
1108
+ patch?: never;
1109
+ trace?: never;
1110
+ };
1111
+ "/api/agent/web-shell/v1/workspaces/worktrees/cleanup": {
1112
+ parameters: {
1113
+ query?: never;
1114
+ header?: never;
1115
+ path?: never;
1116
+ cookie?: never;
1117
+ };
1118
+ get?: never;
1119
+ put?: never;
1120
+ /** Cleanup a main Session worktree */
1121
+ post: operations["webShellSessionWorktreeCleanup"];
1122
+ delete?: never;
1123
+ options?: never;
1124
+ head?: never;
1125
+ patch?: never;
1126
+ trace?: never;
1127
+ };
1060
1128
  }
1061
1129
  export type webhooks = Record<string, never>;
1062
1130
  export interface components {
@@ -1188,6 +1256,10 @@ export interface components {
1188
1256
  skills?: components["schemas"]["SessionCreationSkill"][];
1189
1257
  /** @description Optional immutable initial extension selection. Omission keeps the legacy configuration path; an explicit empty array starts the unified configuration format. Included in creation idempotency and applied before the first model request. Requires session-extension-packages/1 and an extension-capable original Runtime. */
1190
1258
  extensionPins?: components["schemas"]["ManagedExtensionPackagePin"][];
1259
+ /** @description Opt into a main Session worktree on supported LOCAL storage. Omission uses the current directory; an empty object freezes HEAD at first admission. Requires an explicit Workspace. Preparation is durable and gates Runtime execution; replay preserves the original commit, directory and branch. */
1260
+ worktree?: {
1261
+ baseRef?: string;
1262
+ };
1191
1263
  };
1192
1264
  WebShellSubmitRequest: {
1193
1265
  /** @description Trace correlation only. */
@@ -1290,6 +1362,7 @@ export interface components {
1290
1362
  /** @description Current unsettled lifecycle operation, queried in batch under Session read authorization. A failed close/delete may leave the Session closing/deleting; only explicit retry starts a new operation. Settled Sessions omit this projection. */
1291
1363
  lifecycleOperation?: components["schemas"]["WebShellLifecycleOperation"];
1292
1364
  recovery?: components["schemas"]["SessionRecovery"];
1365
+ worktree?: components["schemas"]["WebShellSessionWorktree"] | null;
1293
1366
  };
1294
1367
  WebShellSessionCapabilities: {
1295
1368
  /**
@@ -2096,18 +2169,22 @@ export interface components {
2096
2169
  skills: components["schemas"]["WebShellSkill"][];
2097
2170
  };
2098
2171
  WebShellWorkspaceFileQueryRequest: {
2099
- workspaceId: string;
2100
- cwdRelative: string;
2172
+ workspaceId?: string;
2173
+ cwdRelative?: string;
2101
2174
  directory: string;
2102
2175
  query?: string;
2103
2176
  expectedScopeRevision?: string;
2104
- };
2177
+ /** Format: uuid */
2178
+ sessionId?: string;
2179
+ } & (unknown | unknown);
2105
2180
  WebShellWorkspaceFileReadRequest: {
2106
- workspaceId: string;
2107
- cwdRelative: string;
2181
+ workspaceId?: string;
2182
+ cwdRelative?: string;
2108
2183
  path: string;
2109
2184
  expectedScopeRevision: string;
2110
- };
2185
+ /** Format: uuid */
2186
+ sessionId?: string;
2187
+ } & (unknown | unknown);
2111
2188
  WebShellWorkspaceFileEntry: {
2112
2189
  path: string;
2113
2190
  name: string;
@@ -2522,6 +2599,52 @@ export interface components {
2522
2599
  /** Format: uuid */
2523
2600
  uploadId: string;
2524
2601
  };
2602
+ WebShellSessionWorktree: {
2603
+ id: string;
2604
+ sessionId: string;
2605
+ workspaceId: string;
2606
+ branch: string;
2607
+ baseCommit: string;
2608
+ cwdRelative: string;
2609
+ operationId: string;
2610
+ /** @enum {string} */
2611
+ state: "preparing" | "ready" | "failed" | "blocked" | "removing" | "removed";
2612
+ revision: number;
2613
+ errorCode?: string | null;
2614
+ };
2615
+ WebShellSessionWorktreeOptions: {
2616
+ supported: boolean;
2617
+ reason?: string | null;
2618
+ baseCommit?: string | null;
2619
+ /** @description Source checkout branch independent of base ref; HEAD when detached, null when unavailable. */
2620
+ currentBranch?: string | null;
2621
+ branches: string[];
2622
+ };
2623
+ WebShellSessionWorktreePage: {
2624
+ data: components["schemas"]["WebShellSessionWorktree"][];
2625
+ };
2626
+ WebShellSessionWorktreeInspection: {
2627
+ worktree: components["schemas"]["WebShellSessionWorktree"];
2628
+ canCleanup: boolean;
2629
+ cleanupBlocker?: string | null;
2630
+ };
2631
+ WebShellSessionWorktreeOptionsRequest: {
2632
+ workspaceId: string;
2633
+ cwdRelative: string;
2634
+ baseRef?: string;
2635
+ };
2636
+ WebShellSessionWorktreeQueryRequest: {
2637
+ workspaceId: string;
2638
+ };
2639
+ WebShellSessionWorktreeInspectRequest: {
2640
+ workspaceId: string;
2641
+ worktreeId: string;
2642
+ };
2643
+ WebShellSessionWorktreeCleanupRequest: {
2644
+ workspaceId: string;
2645
+ worktreeId: string;
2646
+ idempotencyKey: string;
2647
+ };
2525
2648
  };
2526
2649
  responses: {
2527
2650
  /** @description The authenticated actor belongs to another tenant than X-Qwen-Tenant-Id or has an invalid ID (actor_scope_mismatch, which the tenant filter answers on every /v1/agents/ and WebShell route), or the resource is readable but the actor lacks this operation or the original Action responder permission. Artifact content reads may also return artifact_content_forbidden when the actor cannot read the original bytes. */
@@ -4643,11 +4766,13 @@ export interface operations {
4643
4766
  webShellWorkspaceFilesUpload: {
4644
4767
  parameters: {
4645
4768
  query: {
4646
- workspaceId: string;
4647
- cwdRelative: string;
4769
+ workspaceId?: string;
4770
+ cwdRelative?: string;
4648
4771
  path: string;
4649
4772
  expectedScopeRevision: string;
4650
4773
  uploadId: string;
4774
+ /** @description Exactly one locator: Session ID, or Workspace ID plus cwdRelative. */
4775
+ sessionId?: string;
4651
4776
  };
4652
4777
  header?: never;
4653
4778
  path?: never;
@@ -4724,4 +4849,120 @@ export interface operations {
4724
4849
  503: components["responses"]["Unavailable"];
4725
4850
  };
4726
4851
  };
4852
+ webShellSessionWorktreeOptions: {
4853
+ parameters: {
4854
+ query?: never;
4855
+ header?: never;
4856
+ path?: never;
4857
+ cookie?: never;
4858
+ };
4859
+ requestBody: {
4860
+ content: {
4861
+ "application/json": components["schemas"]["WebShellSessionWorktreeOptionsRequest"];
4862
+ };
4863
+ };
4864
+ responses: {
4865
+ /** @description Session worktree result. */
4866
+ 200: {
4867
+ headers: {
4868
+ [name: string]: unknown;
4869
+ };
4870
+ content: {
4871
+ "application/json": components["schemas"]["WebShellSessionWorktreeOptions"];
4872
+ };
4873
+ };
4874
+ 400: components["responses"]["BadRequest"];
4875
+ 401: components["responses"]["Unauthorized"];
4876
+ 403: components["responses"]["Forbidden"];
4877
+ 404: components["responses"]["NotFound"];
4878
+ 409: components["responses"]["Conflict"];
4879
+ };
4880
+ };
4881
+ webShellSessionWorktreeQuery: {
4882
+ parameters: {
4883
+ query?: never;
4884
+ header?: never;
4885
+ path?: never;
4886
+ cookie?: never;
4887
+ };
4888
+ requestBody: {
4889
+ content: {
4890
+ "application/json": components["schemas"]["WebShellSessionWorktreeQueryRequest"];
4891
+ };
4892
+ };
4893
+ responses: {
4894
+ /** @description Session worktree result. */
4895
+ 200: {
4896
+ headers: {
4897
+ [name: string]: unknown;
4898
+ };
4899
+ content: {
4900
+ "application/json": components["schemas"]["WebShellSessionWorktreePage"];
4901
+ };
4902
+ };
4903
+ 400: components["responses"]["BadRequest"];
4904
+ 401: components["responses"]["Unauthorized"];
4905
+ 403: components["responses"]["Forbidden"];
4906
+ 404: components["responses"]["NotFound"];
4907
+ 409: components["responses"]["Conflict"];
4908
+ };
4909
+ };
4910
+ webShellSessionWorktreeInspect: {
4911
+ parameters: {
4912
+ query?: never;
4913
+ header?: never;
4914
+ path?: never;
4915
+ cookie?: never;
4916
+ };
4917
+ requestBody: {
4918
+ content: {
4919
+ "application/json": components["schemas"]["WebShellSessionWorktreeInspectRequest"];
4920
+ };
4921
+ };
4922
+ responses: {
4923
+ /** @description Session worktree result. */
4924
+ 200: {
4925
+ headers: {
4926
+ [name: string]: unknown;
4927
+ };
4928
+ content: {
4929
+ "application/json": components["schemas"]["WebShellSessionWorktreeInspection"];
4930
+ };
4931
+ };
4932
+ 400: components["responses"]["BadRequest"];
4933
+ 401: components["responses"]["Unauthorized"];
4934
+ 403: components["responses"]["Forbidden"];
4935
+ 404: components["responses"]["NotFound"];
4936
+ 409: components["responses"]["Conflict"];
4937
+ };
4938
+ };
4939
+ webShellSessionWorktreeCleanup: {
4940
+ parameters: {
4941
+ query?: never;
4942
+ header?: never;
4943
+ path?: never;
4944
+ cookie?: never;
4945
+ };
4946
+ requestBody: {
4947
+ content: {
4948
+ "application/json": components["schemas"]["WebShellSessionWorktreeCleanupRequest"];
4949
+ };
4950
+ };
4951
+ responses: {
4952
+ /** @description Session worktree result. */
4953
+ 202: {
4954
+ headers: {
4955
+ [name: string]: unknown;
4956
+ };
4957
+ content: {
4958
+ "application/json": components["schemas"]["WebShellSessionWorktree"];
4959
+ };
4960
+ };
4961
+ 400: components["responses"]["BadRequest"];
4962
+ 401: components["responses"]["Unauthorized"];
4963
+ 403: components["responses"]["Forbidden"];
4964
+ 404: components["responses"]["NotFound"];
4965
+ 409: components["responses"]["Conflict"];
4966
+ };
4967
+ };
4727
4968
  }
@@ -1,5 +1,6 @@
1
1
  import type { ManagedExtensionManifest, ManagedExtensionPin, ManagedExtensionPackageOperation, ManagedExtensionSelection } from './managed-extension-types';
2
2
  import type { components } from './generated/managed-agent-api';
3
+ import type { ManagedWorkspaceFileQueryRequest, ManagedWorkspaceFileReadRequest, ManagedWorkspaceFileUploadRequest } from './managed-agent-provider';
3
4
  import type { ManagedArtifact } from './managed-tool-result-types';
4
5
  type Schemas = components['schemas'];
5
6
  export type JavaAgentTurn = Schemas['WebShellTurn'];
@@ -98,15 +99,9 @@ export declare class JavaManagedAgentClient {
98
99
  replayed: boolean;
99
100
  }>;
100
101
  createWorkspace(request: Schemas['WebShellWorkspaceCreateRequest'], signal?: AbortSignal): Promise<JavaAgentWorkspace>;
101
- queryWorkspaceFiles(request: Schemas['WebShellWorkspaceFileQueryRequest'], signal?: AbortSignal): Promise<Schemas['WebShellWorkspaceFilePage']>;
102
- readWorkspaceFile(request: Schemas['WebShellWorkspaceFileReadRequest'], signal?: AbortSignal): Promise<Schemas['WebShellWorkspaceFileSnapshot']>;
103
- uploadWorkspaceFile(request: {
104
- workspaceId: string;
105
- cwdRelative: string;
106
- path: string;
107
- expectedScopeRevision: string;
108
- uploadId: string;
109
- }, data: Blob, signal?: AbortSignal): Promise<Schemas['WebShellWorkspaceFileUploadResult']>;
102
+ queryWorkspaceFiles(request: ManagedWorkspaceFileQueryRequest, signal?: AbortSignal): Promise<Schemas['WebShellWorkspaceFilePage']>;
103
+ readWorkspaceFile(request: ManagedWorkspaceFileReadRequest, signal?: AbortSignal): Promise<Schemas['WebShellWorkspaceFileSnapshot']>;
104
+ uploadWorkspaceFile(request: ManagedWorkspaceFileUploadRequest, data: Blob, signal?: AbortSignal): Promise<Schemas['WebShellWorkspaceFileUploadResult']>;
110
105
  queryWorkspaceFileUpload(uploadId: string, signal?: AbortSignal): Promise<Schemas['WebShellWorkspaceFileUploadStatus']>;
111
106
  workspaceDirectories(request: Schemas['WebShellWorkspaceDirectoryQueryRequest'], signal?: AbortSignal): Promise<Schemas['WebShellWorkspaceDirectoryPage']>;
112
107
  getSessionApproval(sessionId: string, signal?: AbortSignal): Promise<Schemas['WebShellSessionApproval']>;
@@ -134,6 +129,10 @@ export declare class JavaManagedAgentClient {
134
129
  }>;
135
130
  getTranscript(request: Schemas['WebShellTranscriptRequest'], signal?: AbortSignal): Promise<JavaAgentTranscript>;
136
131
  createSession(request: Schemas['WebShellCreateRequest'], signal?: AbortSignal): Promise<JavaAgentCommandAdmission>;
132
+ worktreeOptions(request: Schemas['WebShellSessionWorktreeOptionsRequest'], signal?: AbortSignal): Promise<Schemas['WebShellSessionWorktreeOptions']>;
133
+ listSessionWorktrees(workspaceId: string, signal?: AbortSignal): Promise<Schemas['WebShellSessionWorktreePage']>;
134
+ inspectSessionWorktree(workspaceId: string, worktreeId: string, signal?: AbortSignal): Promise<Schemas['WebShellSessionWorktreeInspection']>;
135
+ cleanupSessionWorktree(request: Schemas['WebShellSessionWorktreeCleanupRequest'], signal?: AbortSignal): Promise<Schemas['WebShellSessionWorktree']>;
137
136
  submitTurn(request: Schemas['WebShellSubmitRequest'], signal?: AbortSignal): Promise<JavaAgentTurnAdmission>;
138
137
  cancelTurn(request: Schemas['WebShellCancelRequest'], signal?: AbortSignal): Promise<JavaAgentTurnAdmission>;
139
138
  queryActions(request: Schemas['WebShellActionQueryRequest'], signal?: AbortSignal): Promise<JavaAgentActionPage>;