@qwen-code/web-shell 0.26.4 → 0.26.5-nightly.20261102.0441faff21

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 (62) hide show
  1. package/README.md +1 -1
  2. package/dist/{PierreFilePreview-CVoJL-kD.js → PierreFilePreview-DuLRVr43.js} +1 -1
  3. package/dist/{SpreadsheetPreview-CPSqOai5.js → SpreadsheetPreview-DfkCKz5L.js} +2 -2
  4. package/dist/{WorkspaceFileBrowser-IuQcqNWd.js → WorkspaceFileBrowser-WVPK4t2E.js} +2 -2
  5. package/dist/{agents-route-BBfOMyJ5.js → agents-route-dRC-txQm.js} +2 -2
  6. package/dist/daemon-react-sdk.js +1 -1
  7. package/dist/{index-DyFoZ0bq.js → index-CTDaf1PT.js} +56298 -53533
  8. package/dist/index.js +3 -3
  9. package/dist/sw.js +1 -1
  10. package/dist/transcript.js +10153 -9866
  11. package/dist/types/App.d.ts +1 -1
  12. package/dist/types/completions/slashCompletion.d.ts +1 -1
  13. package/dist/types/components/ChatEditor.d.ts +6 -2
  14. package/dist/types/components/MessageItem.d.ts +3 -0
  15. package/dist/types/components/MessageList.d.ts +3 -1
  16. package/dist/types/components/SplitView.d.ts +1 -1
  17. package/dist/types/components/WebShellTranscript.d.ts +1 -1
  18. package/dist/types/components/artifacts/ArtifactPanel.d.ts +4 -2
  19. package/dist/types/components/artifacts/ContextUsagePanel.d.ts +3 -2
  20. package/dist/types/components/artifacts/TokenUsageTrend.d.ts +30 -0
  21. package/dist/types/components/artifacts/readContextInstructionFile.d.ts +22 -0
  22. package/dist/types/components/channels/channel-editor-state.d.ts +5 -2
  23. package/dist/types/components/channels/channel-platform.d.ts +1 -0
  24. package/dist/types/components/composer/AddMenu.d.ts +3 -1
  25. package/dist/types/components/managed/generated/managed-agent-api.d.ts +113 -20
  26. package/dist/types/components/managed/java-managed-agent-client.d.ts +3 -1
  27. package/dist/types/components/managed/managed-agent-provider.d.ts +3 -1
  28. package/dist/types/components/managed/managed-session-export.d.ts +1 -0
  29. package/dist/types/components/managed/managed-session-messages.d.ts +1 -1
  30. package/dist/types/components/messages/ContextUsageMessage.d.ts +4 -2
  31. package/dist/types/components/messages/SystemMessage.d.ts +3 -0
  32. package/dist/types/components/messages/tools/DiffView.d.ts +6 -0
  33. package/dist/types/components/plugins/PluginManagerPage.d.ts +2 -1
  34. package/dist/types/components/plugins/manager-page.d.ts +1 -0
  35. package/dist/types/components/sidebar/ActivityView.d.ts +41 -0
  36. package/dist/types/components/sidebar/SidebarSectionHeader.d.ts +7 -0
  37. package/dist/types/components/sidebar/WebShellSidebar.d.ts +7 -3
  38. package/dist/types/components/sidebar/activity-messages.d.ts +4 -0
  39. package/dist/types/components/sidebar/activity-model.d.ts +34 -0
  40. package/dist/types/components/sidebar/pinned-session-order.d.ts +2 -0
  41. package/dist/types/components/sidebar/use-activity-catalog.d.ts +31 -0
  42. package/dist/types/components/workflow-mode-control-state.d.ts +43 -0
  43. package/dist/types/components/workflow-mode-messages.d.ts +28 -0
  44. package/dist/types/daemon/index.d.ts +1 -1
  45. package/dist/types/daemon/session/DaemonSessionProvider.d.ts +9 -0
  46. package/dist/types/daemon/session/actions.d.ts +2 -1
  47. package/dist/types/daemon/session/index.d.ts +1 -1
  48. package/dist/types/daemon/session/mappers.d.ts +6 -0
  49. package/dist/types/daemon/session/session-config-sync.d.ts +22 -0
  50. package/dist/types/daemon/session/types.d.ts +17 -1
  51. package/dist/types/daemon-react-sdk.d.ts +1 -1
  52. package/dist/types/extensions/inputHighlight.d.ts +3 -2
  53. package/dist/types/hooks/useMcpAppMessages.d.ts +9 -10
  54. package/dist/types/hooks/useOtherWorkspaceSessions.d.ts +29 -0
  55. package/dist/types/hooks/useScopedSessions.d.ts +5 -0
  56. package/dist/types/i18n.d.ts +1 -1
  57. package/dist/types/mcpAppHostContext.d.ts +19 -0
  58. package/dist/types/session-catalog/session-catalog-hooks.d.ts +1 -0
  59. package/dist/types/utils/composerTasks.d.ts +7 -0
  60. package/dist/types/utils/standalone-session-routing.d.ts +20 -1
  61. package/dist/{useDaemonMidTurnInjected-BpWZTnoN.js → useDaemonMidTurnInjected-D5dlDeW-.js} +7004 -6445
  62. package/package.json +1 -1
@@ -136,7 +136,7 @@ export interface WebShellProps {
136
136
  */
137
137
  onThemeResolved?: (theme: WebShellTheme) => void;
138
138
  /** UI language for the web-shell. Defaults to `?language=` or browser language. */
139
- language?: 'en' | 'zh-CN' | 'zh' | 'zh-cn';
139
+ language?: 'en' | 'zh-CN' | 'zh' | 'zh-cn' | 'ru' | 'ru-ru';
140
140
  /** Called when `/language ui` changes the web-shell UI language. */
141
141
  onLanguageChange?: (language: WebShellLanguage) => void;
142
142
  /**
@@ -29,7 +29,7 @@ export interface SlashCommandCompletionResult {
29
29
  type Translate = (key: string) => string;
30
30
  export declare function getMissingSlashPrefixCompletion(text: string, commands: CommandInfo[]): string | null;
31
31
  export declare function getImplicitTabCompletion(text: string, commands: CommandInfo[], language: WebShellLanguage): string | null;
32
- export declare function getSlashCommandArgumentHint(text: string, commands: CommandInfo[], language: WebShellLanguage): string | null;
32
+ export declare function getSlashCommandArgumentHint(text: string, commands: CommandInfo[], language: WebShellLanguage, skillNames?: ReadonlySet<string>): string | null;
33
33
  export declare function getSlashCommandCompletionResult(text: string, cursor: number, commands: CommandInfo[], skills?: SkillInfo[], language?: WebShellLanguage, translate?: Translate, categoryOrder?: CommandDisplayCategoryOrder, includeEmpty?: boolean): SlashCommandCompletionResult | null;
34
34
  export declare function slashCompletionSource(getCommands: () => CommandInfo[], getSkills?: () => SkillInfo[], getLanguage?: () => WebShellLanguage, translate?: Translate, getCategoryOrder?: () => CommandDisplayCategoryOrder | undefined): (context: CompletionContext) => CompletionResult | null;
35
35
  export {};
@@ -7,7 +7,7 @@ import type { UseDaemonFollowupSuggestionReturn } from '@qwen-code/web-shell/dae
7
7
  import type { DaemonSessionGroupPresetColor, DaemonWorkspaceGitStatus, ReasoningSelection } from '@qwen-code/sdk/daemon';
8
8
  import type { CommandDisplayCategoryOrder } from '../utils/commandDisplay';
9
9
  import type { SkillInfo } from '../completions/slashCompletion';
10
- import type { DaemonReasoningControls } from '@qwen-code/web-shell/daemon-react-sdk';
10
+ import type { DaemonReasoningControls, DaemonWorkflowMode, DaemonWorkflowModeStatus } from '@qwen-code/web-shell/daemon-react-sdk';
11
11
  import { type WebShellComposerInput, type WebShellComposerTag, type WebShellComposerTagIconMap, type WebShellAtProvider, type WebShellBuiltinAtProvidersConfig } from '../customization';
12
12
  import { type ComposerSubmitMetadata, type EditorHandle } from '../hooks/useComposerCore';
13
13
  import { type UseFileUploadOptions } from '../hooks/useFileUpload';
@@ -16,7 +16,7 @@ import type { WebShellUnavailableModel, WebShellUnavailableModelTooltipMount } f
16
16
  import type { VoiceStatusRevision, VoiceWorkspaceTarget } from '../voice/voice-workspace-target';
17
17
  import { type SessionGitIntent } from './GitModePopover';
18
18
  import { type WorkspaceSelectorOption } from './WorkspaceSelector';
19
- export type ComposerToolbarAction = 'approvalMode' | 'plan' | 'contextUsage' | 'gitBranch' | 'model' | 'commands' | 'files' | 'widthMode' | 'voice' | 'workspace' | 'addMenu';
19
+ export type ComposerToolbarAction = 'approvalMode' | 'plan' | 'workflowMode' | 'contextUsage' | 'gitBranch' | 'model' | 'commands' | 'files' | 'widthMode' | 'voice' | 'workspace' | 'addMenu';
20
20
  interface ChatEditorProps {
21
21
  onSubmit: (text: string, images?: import('../adapters/promptTypes').PromptImage[], files?: import('../adapters/promptTypes').PromptFile[], commitAccepted?: import('../hooks/useComposerCore').ComposerSubmitCommit, metadata?: ComposerSubmitMetadata) => boolean | void;
22
22
  onInputTextChange?: (text: string) => void;
@@ -115,6 +115,10 @@ interface ChatEditorProps {
115
115
  mountUnavailableModelTooltip?: WebShellUnavailableModelTooltipMount;
116
116
  onSelectMode?: (mode: string) => void;
117
117
  onSelectModel?: (model: string) => void;
118
+ workflowMode?: DaemonWorkflowMode;
119
+ workflowModeStatus?: DaemonWorkflowModeStatus;
120
+ workflowModePending?: boolean;
121
+ onWorkflowModeChange?: (requested: boolean) => void;
118
122
  reasoning?: DaemonReasoningControls;
119
123
  onSelectReasoningEffort?: (value: ReasoningSelection, source?: 'toggle') => Promise<void> | void;
120
124
  workspaces?: WorkspaceSelectorOption[];
@@ -1,4 +1,5 @@
1
1
  import type { Message, PermissionRequest } from '../adapters/types';
2
+ import type { DaemonContextMemoryDetail } from '@qwen-code/web-shell/daemon-react-sdk';
2
3
  import type { WebShellAssistantFeedbackRating, WebShellAssistantTurnFooterRenderInfo, WebShellSource } from '../customization';
3
4
  import { type SessionContentGenerator } from './messages/AssistantMessage';
4
5
  import type { TurnOutputOpenRequest } from './artifacts/TurnOutputs';
@@ -8,6 +9,8 @@ interface MessageItemProps {
8
9
  pendingApproval?: PermissionRequest | null;
9
10
  /** Run /context detail, exactly like typing it (context-usage panels). */
10
11
  onShowContextDetail?: () => void;
12
+ /** Open a context instruction file in a read-only preview. */
13
+ onOpenMemoryFile?: (file: DaemonContextMemoryDetail, workspaceCwd: string) => void;
11
14
  onLocateBackgroundSource?: (messageId: string, callId?: string) => boolean;
12
15
  /** Click an uploaded image in a user message to preview it in the right panel. */
13
16
  onImagePreview?: (src: string, alt?: string) => void;
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
- import type { DaemonSessionArtifact } from '@qwen-code/sdk/daemon';
2
+ import type { DaemonContextMemoryDetail, DaemonSessionArtifact } from '@qwen-code/sdk/daemon';
3
3
  import type { Message, TurnCollapseHead } from '../adapters/types';
4
4
  import type { PermissionRequest } from '../adapters/types';
5
5
  import { type ParallelAgentDisplayItem } from '../adapters/parallelAgentGrouping';
@@ -16,6 +16,8 @@ export interface MessageListProps {
16
16
  pendingApproval: PermissionRequest | null;
17
17
  /** Run /context detail, exactly like typing it (context-usage panels). */
18
18
  onShowContextDetail?: () => void;
19
+ /** Open a context instruction file in a read-only preview. */
20
+ onOpenMemoryFile?: (file: DaemonContextMemoryDetail, workspaceCwd: string) => void;
19
21
  /** Click an uploaded image in a user message to preview it in the right panel. */
20
22
  onImagePreview?: (src: string, alt?: string) => void;
21
23
  onAttachmentPreview?: (file: AttachmentPreviewRequest) => void;
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { type DaemonSessionActions } from '@qwen-code/web-shell/daemon-react-sdk';
7
- import type { DaemonSessionArtifact, DaemonSessionMonitorTaskStatus, DaemonWorkspaceCapability } from '@qwen-code/sdk/daemon';
7
+ import { type DaemonSessionArtifact, type DaemonSessionMonitorTaskStatus, type DaemonWorkspaceCapability } from '@qwen-code/sdk/daemon';
8
8
  import type { WebShellSlashCommandHandler } from '../App';
9
9
  import type { WebShellModelManagementOptions } from '../modelManagement';
10
10
  import type { WebShellUnavailableModel, WebShellUnavailableModelTooltipMount } from '../unavailableModels';
@@ -8,7 +8,7 @@ export interface WebShellTranscriptProps {
8
8
  blocks: readonly DaemonTranscriptBlock[];
9
9
  renderMode?: 'readonly' | 'document';
10
10
  theme?: WebShellTheme;
11
- language?: 'en' | 'zh-CN' | 'zh' | 'zh-cn';
11
+ language?: 'en' | 'zh-CN' | 'zh' | 'zh-cn' | 'ru' | 'ru-ru';
12
12
  className?: string;
13
13
  style?: CSSProperties;
14
14
  chatMaxWidth?: number;
@@ -1,7 +1,7 @@
1
1
  import type { DaemonSessionArtifact, SessionSource, DaemonSessionMonitorTaskStatus, DaemonSessionShellTaskStatus, DaemonSessionTaskStatus } from '@qwen-code/sdk/daemon';
2
2
  import type { ACPToolCall, TodoItem } from '../../adapters/types';
3
3
  import type { WebShellRightPanelItem } from '../../customization';
4
- import { type DaemonSessionOwnerSnapshot, type DaemonSessionActions } from '@qwen-code/web-shell/daemon-react-sdk';
4
+ import { type DaemonContextMemoryDetail, 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
7
  import type { WebShellModelManagementOptions } from '../../modelManagement';
@@ -213,6 +213,8 @@ interface ArtifactPanelProps {
213
213
  onSelectTab: (tabId: string) => void;
214
214
  onCloseTab: (tabId: string) => void;
215
215
  onOpenFilePreview: (change: TurnOutputFileChange | string, workspaceCwd?: string, workspaceId?: string) => void;
216
+ /** Open a context-panel memory file in a read-only preview. */
217
+ onOpenMemoryFile?: (file: DaemonContextMemoryDetail, workspaceCwd: string) => void;
216
218
  latestReviewAvailable?: boolean;
217
219
  onOpenLatestReview?: () => void;
218
220
  /** Open an interactive terminal tab in this panel (shown as an empty-state action). */
@@ -280,5 +282,5 @@ interface ArtifactPanelProps {
280
282
  fullscreen?: boolean;
281
283
  onToggleFullscreen?: () => void;
282
284
  }
283
- export declare function ArtifactPanel({ contextUsageControls, artifacts, tabs, activeTabId, reviewChanges, selectedReviewPath, panelWidth, workspaceCwd, loading, restoring, error, onSelectTab, onSelectTurnCallsPrompt, onCloseTab, onOpenFilePreview, latestReviewAvailable, onOpenLatestReview, onOpenTerminal, onOpenTrajectory, trajectoryTabId, onOpenFiles, onReferenceFile, onOpenWebPreview, onWebPreviewChange, items, sideTaskAvailable, sideTasks, archivedSideTasks, sideTasksLoading, onCreateSideTask, onOpenSideTask, onArchiveSideTasks, onUnarchiveSideTasks, onSideTaskMenuOpen, onCreateSideTaskSession, onSideTaskCreated, onSideTaskTitleChange, onSideTaskInitialPromptRefused, onNestedRightPanelOpen, onNestedArtifactsChange, onOpenNestedSubagent, agentTasks, agentTraceLoading, agentTraceError, onOpenWorkflowAgent, onError, sessionWorkflowEnabled, modelManagement, unavailableModels, mountUnavailableModelTooltip, workflow, onImageIngestionNotice, deferSubagentMount, onClose, variant, fullscreen, onToggleFullscreen, }: ArtifactPanelProps): import("react/jsx-runtime").JSX.Element;
285
+ export declare function ArtifactPanel({ contextUsageControls, artifacts, tabs, activeTabId, reviewChanges, selectedReviewPath, panelWidth, workspaceCwd, loading, restoring, error, onSelectTab, onSelectTurnCallsPrompt, onCloseTab, onOpenFilePreview, onOpenMemoryFile, latestReviewAvailable, onOpenLatestReview, onOpenTerminal, onOpenTrajectory, trajectoryTabId, onOpenFiles, onReferenceFile, onOpenWebPreview, onWebPreviewChange, items, sideTaskAvailable, sideTasks, archivedSideTasks, sideTasksLoading, onCreateSideTask, onOpenSideTask, onArchiveSideTasks, onUnarchiveSideTasks, onSideTaskMenuOpen, onCreateSideTaskSession, onSideTaskCreated, onSideTaskTitleChange, onSideTaskInitialPromptRefused, onNestedRightPanelOpen, onNestedArtifactsChange, onOpenNestedSubagent, agentTasks, agentTraceLoading, agentTraceError, onOpenWorkflowAgent, onError, sessionWorkflowEnabled, modelManagement, unavailableModels, mountUnavailableModelTooltip, workflow, onImageIngestionNotice, deferSubagentMount, onClose, variant, fullscreen, onToggleFullscreen, }: ArtifactPanelProps): import("react/jsx-runtime").JSX.Element;
284
286
  export {};
@@ -1,7 +1,8 @@
1
- import type { DaemonSessionActions } from '@qwen-code/web-shell/daemon-react-sdk';
1
+ import type { DaemonContextMemoryDetail, DaemonSessionActions } from '@qwen-code/web-shell/daemon-react-sdk';
2
2
  import type { ContextUsageControls } from '../../hooks/useContextUsageControls';
3
- export declare function ContextUsagePanel({ sessionActions, sessionId, controls, }: {
3
+ export declare function ContextUsagePanel({ sessionActions, sessionId, controls, onOpenMemoryFile, }: {
4
4
  sessionActions?: DaemonSessionActions;
5
5
  sessionId: string;
6
6
  controls?: Omit<ContextUsageControls, 'captureOwner'>;
7
+ onOpenMemoryFile?: (file: DaemonContextMemoryDetail, workspaceCwd: string) => void;
7
8
  }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { DaemonSessionStatsModelMetrics } from '@qwen-code/web-shell/daemon-react-sdk';
7
+ type TimingSample = NonNullable<DaemonSessionStatsModelMetrics['timingSamples']>[number];
8
+ type FailureSample = NonNullable<DaemonSessionStatsModelMetrics['failures']>['recent'][number];
9
+ export interface TrendSeries {
10
+ key: string;
11
+ label: string;
12
+ /** Color slot shared with the model card. */
13
+ color: string;
14
+ samples: TimingSample[];
15
+ failures: FailureSample[];
16
+ }
17
+ export type TrendMetric = 'speed' | 'ttft';
18
+ /** Output tokens per second, or undefined when the window is too short. */
19
+ export declare function sampleSpeed(sample: TimingSample): number | undefined;
20
+ /** Linear-interpolated quantile of an unsorted list; undefined when empty. */
21
+ export declare function quantile(values: number[], q: number): number | undefined;
22
+ export declare function TokenUsageTrend({ series }: {
23
+ series: TrendSeries[];
24
+ }): import("react/jsx-runtime").JSX.Element;
25
+ /** Per-model output-speed spread: every sample as a dot on a shared scale. */
26
+ export declare function SpeedSpread({ samples, scaleMax, }: {
27
+ samples: TimingSample[];
28
+ scaleMax: number;
29
+ }): import("react/jsx-runtime").JSX.Element | null;
30
+ export {};
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { DaemonCapabilities, DaemonClient } from '@qwen-code/sdk/daemon';
7
+ export interface ContextInstructionFileContent {
8
+ content: string;
9
+ /** True when the served text is only the beginning of the file. */
10
+ truncated: boolean;
11
+ }
12
+ /**
13
+ * Read a context instruction file for the read-only preview.
14
+ *
15
+ * The read goes through the session's owning workspace, never the primary:
16
+ * a secondary workspace's file is outside the primary sandbox and the
17
+ * primary file route rejects it. The backend only exposes an `absolutePath`
18
+ * for files this preview can open, so a path inside the workspace is read
19
+ * through that workspace's file route, and a path outside it must be a
20
+ * global memory file, served by the (workspace-independent) memory route.
21
+ */
22
+ export declare function readContextInstructionFile(client: DaemonClient, capabilities: DaemonCapabilities | undefined, workspaceCwd: string, absolutePath: string): Promise<ContextInstructionFileContent>;
@@ -20,12 +20,15 @@ export interface ChannelEditorDraft {
20
20
  groupSenders: ChannelGroupSenders;
21
21
  groupAllowedUsers: string;
22
22
  }
23
- export type ChannelEditorValidationCode = 'required' | 'credential' | 'duplicate' | 'invalid' | 'invalidGroupId' | 'invalidOption' | 'number' | 'outOfRange' | 'policy';
23
+ export type ChannelEditorValidationCode = 'required' | 'credential' | 'duplicate' | 'invalid' | 'invalidGroupId' | 'invalidOption' | 'invalidRepoId' | 'conflictingRepoAliases' | 'number' | 'outOfRange' | 'policy';
24
24
  export type ChannelEditorValidationErrors = Record<string, ChannelEditorValidationCode>;
25
+ /** Access fields that only gate direct messages, which repository-only channels never receive. */
26
+ export declare const PRIVATE_ONLY_FIELD_KEYS: Set<string>;
27
+ export declare function toList(value: string): string[];
25
28
  export declare function hasDescriptorPrivatePolicy(descriptor: DaemonChannelTypeDescriptor): boolean;
26
29
  export declare function hasDescriptorGroupPolicy(descriptor: DaemonChannelTypeDescriptor): boolean;
27
30
  export declare function defaultGroupSenders(): Exclude<ChannelGroupSenders, ''>;
28
31
  export declare function configuredPrivatePolicy(instance?: DaemonChannelInstanceSnapshot): string;
29
32
  export declare function createChannelEditorDraft(descriptor: DaemonChannelTypeDescriptor, instance?: DaemonChannelInstanceSnapshot): ChannelEditorDraft;
30
- export declare function validateChannelEditorDraft(descriptor: DaemonChannelTypeDescriptor, draft: ChannelEditorDraft, existingNames: readonly string[]): ChannelEditorValidationErrors;
33
+ export declare function validateChannelEditorDraft(descriptor: DaemonChannelTypeDescriptor, draft: ChannelEditorDraft, existingNames: readonly string[], instance?: DaemonChannelInstanceSnapshot): ChannelEditorValidationErrors;
31
34
  export declare function buildChannelUpsertRequest(descriptor: DaemonChannelTypeDescriptor, draft: ChannelEditorDraft, expectedRevision: string, instance?: DaemonChannelInstanceSnapshot): DaemonChannelUpsertRequest;
@@ -7,3 +7,4 @@ import type { DaemonChannelTypeDescriptor } from '@qwen-code/sdk/daemon';
7
7
  export declare const PLATFORM_MARKS: Record<string, string>;
8
8
  export declare function isSupportedChannelType(type: unknown): type is 'dingtalk' | 'dws' | 'wecom' | 'wecom-callback' | 'feishu' | 'github' | 'gitlab';
9
9
  export declare function isChannelPlatformAvailable(descriptor: DaemonChannelTypeDescriptor): boolean;
10
+ export declare function isRepositoryOnlyChannelType(type: unknown): boolean;
@@ -3,6 +3,7 @@ import { type SkillInfo } from '../../completions/slashCompletion';
3
3
  import type { CommandDisplayCategoryOrder } from '../../utils/commandDisplay';
4
4
  import type { WebShellComposerTag } from '../../customization';
5
5
  import type { AtMentionWorkspaceActions } from '../../hooks/useAtMentionSources';
6
+ import { type WorkflowModeControlOptions } from '../workflow-mode-control-state';
6
7
  export interface AddMenuProps {
7
8
  disabled?: boolean;
8
9
  availabilityKey: string;
@@ -23,6 +24,7 @@ export interface AddMenuProps {
23
24
  * Omitted when the host has not enabled Plan.
24
25
  */
25
26
  plan?: AddMenuPlanControl;
27
+ workflow?: WorkflowModeControlOptions;
26
28
  btw?: {
27
29
  onSelect: () => void;
28
30
  disabledReason?: string;
@@ -44,4 +46,4 @@ export interface AddMenuPlanControl {
44
46
  disabled?: boolean;
45
47
  onToggle: () => void;
46
48
  }
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;
49
+ export declare function AddMenu({ disabled, availabilityKey, addFileAvailable, uploadAvailable, onAddFiles, onFilePickerCancel, onInsertReference, onPrependSkill, getWorkspaceActions, skills, onSkillsOpenChange, skillsLoading, skillsLoadError, skillsLoaded, plan, workflow, btw, mobileActions, commandsOnly, simpleMode, }: AddMenuProps): import("react/jsx-runtime").JSX.Element;
@@ -57,7 +57,7 @@ export interface paths {
57
57
  };
58
58
  get?: never;
59
59
  put?: never;
60
- /** @description Without a cursor, a Session that has a Snapshot returns all of its Items, the events up to the Snapshot other than turn.accepted, item.output_text.delta, item.reasoning.delta, item.tool_call.updated and item.tool_result.updated, which the Items already hold, and every event after it. Otherwise, and for an olderCursor, limit bounds the page of events. */
60
+ /** @description Requires current Session read authorization. Read the most recent limit current message Items and selected bounded Turn control events; olderCursor pages toward older Items. Bodies and statuses remain live. The response coveredSequence and lastSequence both identify actual message projection coverage for SSE continuation, never an unmaterialized event tail. No persisted conversation snapshot or whole-history replay is read. Projection rebuild invalidates cursors. If projection coverage is below the replay floor, return retryable message_projection_pending. */
61
61
  post: operations["webShellTranscript"];
62
62
  delete?: never;
63
63
  options?: never;
@@ -74,7 +74,7 @@ export interface paths {
74
74
  };
75
75
  get?: never;
76
76
  put?: never;
77
- /** @description POST SSE consumed through fetch response.body. An afterSequence strictly below the durable replay floor ends the stream with one agent.session.resync_required frame. Projection rebuilds preserve that floor and the current immutable Snapshot. On the resync frame, reload the transcript and resume after its lastSequence. */
77
+ /** @description POST SSE consumed through fetch response.body. An afterSequence strictly below the durable replay floor ends the stream with one agent.session.resync_required frame. Projection rebuilds preserve that floor and invalidate message-page cursors. On the resync frame, reload the transcript and resume after its lastSequence. */
78
78
  post: operations["webShellStreamEvents"];
79
79
  delete?: never;
80
80
  options?: never;
@@ -803,8 +803,8 @@ export interface paths {
803
803
  get?: never;
804
804
  put?: never;
805
805
  /**
806
- * Read one immutable public Session snapshot page for reading exports
807
- * @description Requires current Session read authorization on every page. Reuses the public item snapshot cursor, whose subsequent pages retain the original snapshot version and watermark. No private journal, Runtime or storage credentials are returned. The client waits for a snapshot covering its captured Session watermark before using its first page.
806
+ * Read one current Session message page for exports
807
+ * @description Requires current Session read authorization on every page. Read current message bodies forward within the first request sequence membership bound. snapshotThroughSequence retains its wire name for that fixed bound and does not change between pages. Content and status may change; no frozen snapshot version or cursor retention is provided. An initial projection behind committed events returns retryable message_projection_pending instead of silently exporting incomplete history. No private journal, Runtime or storage credentials are returned. A projection-generation change returns 409 message_projection_changed; discard the cursor and restart this read.
808
808
  */
809
809
  post: operations["webShellExportSession"];
810
810
  delete?: never;
@@ -1125,6 +1125,26 @@ export interface paths {
1125
1125
  patch?: never;
1126
1126
  trace?: never;
1127
1127
  };
1128
+ "/api/agent/web-shell/v1/transcript/items/query": {
1129
+ parameters: {
1130
+ query?: never;
1131
+ header?: never;
1132
+ path?: never;
1133
+ cookie?: never;
1134
+ };
1135
+ get?: never;
1136
+ put?: never;
1137
+ /**
1138
+ * Read recent current Session Items and page toward older Items
1139
+ * @description Requires current Session read authorization on every page. Read at most limit recent current message Items in chronological order; nextCursor continues toward older Items in the initial sequence membership range. snapshotThroughSequence names that fixed membership upper bound, while bodies and statuses remain live. Cursors bind scope, backward direction and projection generation. Rebuild invalidates the cursor. No snapshot copies are generated and no live tail is scanned; transcript reads provide actual projection coverage for SSE handoff. Projection coverage below the replay floor returns retryable message_projection_pending.
1140
+ */
1141
+ post: operations["webShellRecentTranscriptItems"];
1142
+ delete?: never;
1143
+ options?: never;
1144
+ head?: never;
1145
+ patch?: never;
1146
+ trace?: never;
1147
+ };
1128
1148
  }
1129
1149
  export type webhooks = Record<string, never>;
1130
1150
  export interface components {
@@ -1432,11 +1452,17 @@ export interface components {
1432
1452
  WebShellTranscript: {
1433
1453
  items: components["schemas"]["WebShellItem"][];
1434
1454
  events: components["schemas"]["WebShellEvent"][];
1435
- /** Format: int64 */
1455
+ /**
1456
+ * Format: int64
1457
+ * @description Actual message projection coverage of this read; resume SSE after this sequence.
1458
+ */
1436
1459
  coveredSequence: number;
1437
1460
  olderCursor?: string | null;
1438
1461
  hasMore: boolean;
1439
- /** Format: int64 */
1462
+ /**
1463
+ * Format: int64
1464
+ * @description Actual message projection coverage for SSE handoff, equal to coveredSequence; unmaterialized tail events are delivered by SSE.
1465
+ */
1440
1466
  lastSequence: number;
1441
1467
  };
1442
1468
  WebShellContentPart: {
@@ -1499,7 +1525,10 @@ export interface components {
1499
1525
  sessionId: string;
1500
1526
  /** Format: int64 */
1501
1527
  replayFloorSequence: number;
1502
- /** Format: int64 */
1528
+ /**
1529
+ * Format: int64
1530
+ * @description Retained wire name for current message projection coverage; no persisted conversation snapshot is implied.
1531
+ */
1503
1532
  snapshotThroughSequence: number;
1504
1533
  /** @constant */
1505
1534
  action: "reload_snapshot";
@@ -2385,7 +2414,10 @@ export interface components {
2385
2414
  items: components["schemas"]["WebShellItem"][];
2386
2415
  nextCursor?: string | null;
2387
2416
  hasMore: boolean;
2388
- /** Format: int64 */
2417
+ /**
2418
+ * Format: int64
2419
+ * @description Fixed first-request sequence membership upper bound. Bodies and statuses are read live on every page; this does not identify a retained content version.
2420
+ */
2389
2421
  snapshotThroughSequence: number;
2390
2422
  };
2391
2423
  WebShellExportRequest: {
@@ -2701,8 +2733,8 @@ export interface components {
2701
2733
  "application/json": components["schemas"]["ErrorEnvelope"];
2702
2734
  };
2703
2735
  };
2704
- /** @description Replay cursor is older than the retained replay floor. */
2705
- CursorExpired: {
2736
+ /** @description Task event cursor is strictly below the task's durable retention floor, which survives an empty retained set; equality is valid. The envelope's replay_floor_sequence and snapshot_through_sequence stay absent because task cursors are opaque. */
2737
+ TaskCursorExpired: {
2706
2738
  headers: {
2707
2739
  [name: string]: unknown;
2708
2740
  };
@@ -2710,8 +2742,8 @@ export interface components {
2710
2742
  "application/json": components["schemas"]["ErrorEnvelope"];
2711
2743
  };
2712
2744
  };
2713
- /** @description Task event cursor is strictly below the task's durable retention floor, which survives an empty retained set; equality is valid. The envelope's replay_floor_sequence and snapshot_through_sequence stay absent because task cursors are opaque. */
2714
- TaskCursorExpired: {
2745
+ /** @description A dependency such as the Hosted Harness is unavailable; retry later. */
2746
+ Unavailable: {
2715
2747
  headers: {
2716
2748
  [name: string]: unknown;
2717
2749
  };
@@ -2719,8 +2751,35 @@ export interface components {
2719
2751
  "application/json": components["schemas"]["ErrorEnvelope"];
2720
2752
  };
2721
2753
  };
2722
- /** @description A dependency such as the Hosted Harness is unavailable; retry later. */
2723
- Unavailable: {
2754
+ /** @description 409 message_projection_changed: the message projection generation changed. Discard the message cursor and restart this read; this is not replay-floor cursor expiration. */
2755
+ MessageProjectionChanged: {
2756
+ headers: {
2757
+ [name: string]: unknown;
2758
+ };
2759
+ content: {
2760
+ "application/json": components["schemas"]["ErrorEnvelope"];
2761
+ };
2762
+ };
2763
+ /** @description 413 message_page_too_large: selected message bodies or Turn control events exceed the response byte budget. Reducing limit can help a multi-Item page, but a single oversized Item cannot be returned even with limit=1. Signed POST requests may also return payload_too_large when their request body exceeds the configured signed-body limit. */
2764
+ MessagePageTooLarge: {
2765
+ headers: {
2766
+ [name: string]: unknown;
2767
+ };
2768
+ content: {
2769
+ "application/json": components["schemas"]["ErrorEnvelope"];
2770
+ };
2771
+ };
2772
+ /** @description 400 invalid_message_cursor for malformed, wrong-scope, wrong-direction or out-of-range message cursors; invalid_limit outside 1..100; invalid_event_cursor for a negative numeric after. */
2773
+ InvalidMessagePage: {
2774
+ headers: {
2775
+ [name: string]: unknown;
2776
+ };
2777
+ content: {
2778
+ "application/json": components["schemas"]["ErrorEnvelope"];
2779
+ };
2780
+ };
2781
+ /** @description 503 message_projection_pending: projection coverage is below the replay floor, or the initial forward read is behind committed events. Retry after message projection catches up. */
2782
+ MessageProjectionPending: {
2724
2783
  headers: {
2725
2784
  [name: string]: unknown;
2726
2785
  };
@@ -2855,11 +2914,13 @@ export interface operations {
2855
2914
  "application/json": components["schemas"]["WebShellTranscript"];
2856
2915
  };
2857
2916
  };
2858
- 400: components["responses"]["BadRequest"];
2917
+ 400: components["responses"]["InvalidMessagePage"];
2859
2918
  401: components["responses"]["Unauthorized"];
2860
2919
  403: components["responses"]["Forbidden"];
2861
2920
  404: components["responses"]["NotFound"];
2862
- 413: components["responses"]["PayloadTooLarge"];
2921
+ 409: components["responses"]["MessageProjectionChanged"];
2922
+ 413: components["responses"]["MessagePageTooLarge"];
2923
+ 503: components["responses"]["MessageProjectionPending"];
2863
2924
  };
2864
2925
  };
2865
2926
  webShellStreamEvents: {
@@ -4341,7 +4402,7 @@ export interface operations {
4341
4402
  };
4342
4403
  };
4343
4404
  responses: {
4344
- /** @description Immutable public item snapshot page. */
4405
+ /** @description Chronological page of current message Items within the initial sequence membership range; content remains live. */
4345
4406
  200: {
4346
4407
  headers: {
4347
4408
  [name: string]: unknown;
@@ -4350,12 +4411,13 @@ export interface operations {
4350
4411
  "application/json": components["schemas"]["WebShellExportPage"];
4351
4412
  };
4352
4413
  };
4353
- 400: components["responses"]["BadRequest"];
4414
+ 400: components["responses"]["InvalidMessagePage"];
4354
4415
  401: components["responses"]["Unauthorized"];
4355
4416
  403: components["responses"]["Forbidden"];
4356
4417
  404: components["responses"]["NotFound"];
4357
- 409: components["responses"]["CursorExpired"];
4358
- 413: components["responses"]["PayloadTooLarge"];
4418
+ 409: components["responses"]["MessageProjectionChanged"];
4419
+ 413: components["responses"]["MessagePageTooLarge"];
4420
+ 503: components["responses"]["MessageProjectionPending"];
4359
4421
  };
4360
4422
  };
4361
4423
  webShellQueryUserMessages: {
@@ -4965,4 +5027,35 @@ export interface operations {
4965
5027
  409: components["responses"]["Conflict"];
4966
5028
  };
4967
5029
  };
5030
+ webShellRecentTranscriptItems: {
5031
+ parameters: {
5032
+ query?: never;
5033
+ header?: never;
5034
+ path?: never;
5035
+ cookie?: never;
5036
+ };
5037
+ requestBody: {
5038
+ content: {
5039
+ "application/json": components["schemas"]["WebShellExportRequest"];
5040
+ };
5041
+ };
5042
+ responses: {
5043
+ /** @description Bounded recent current message Item page. Items are chronological within each page. */
5044
+ 200: {
5045
+ headers: {
5046
+ [name: string]: unknown;
5047
+ };
5048
+ content: {
5049
+ "application/json": components["schemas"]["WebShellExportPage"];
5050
+ };
5051
+ };
5052
+ 400: components["responses"]["InvalidMessagePage"];
5053
+ 401: components["responses"]["Unauthorized"];
5054
+ 403: components["responses"]["Forbidden"];
5055
+ 404: components["responses"]["NotFound"];
5056
+ 409: components["responses"]["MessageProjectionChanged"];
5057
+ 413: components["responses"]["MessagePageTooLarge"];
5058
+ 503: components["responses"]["MessageProjectionPending"];
5059
+ };
5060
+ };
4968
5061
  }
@@ -37,7 +37,8 @@ export interface JavaManagedAgentClientOptions {
37
37
  export declare class JavaManagedAgentHttpError extends Error {
38
38
  readonly status: number;
39
39
  readonly code: string;
40
- constructor(status: number, code: string, message: string);
40
+ readonly requestId?: string | undefined;
41
+ constructor(status: number, code: string, message: string, requestId?: string | undefined);
41
42
  }
42
43
  export declare class JavaManagedAgentClient {
43
44
  private readonly options;
@@ -128,6 +129,7 @@ export declare class JavaManagedAgentClient {
128
129
  snapshotThroughSequence: number;
129
130
  }>;
130
131
  getTranscript(request: Schemas['WebShellTranscriptRequest'], signal?: AbortSignal): Promise<JavaAgentTranscript>;
132
+ getRecentTranscriptItems(request: Schemas['WebShellExportRequest'], signal?: AbortSignal): Promise<Schemas['WebShellExportPage']>;
131
133
  createSession(request: Schemas['WebShellCreateRequest'], signal?: AbortSignal): Promise<JavaAgentCommandAdmission>;
132
134
  worktreeOptions(request: Schemas['WebShellSessionWorktreeOptionsRequest'], signal?: AbortSignal): Promise<Schemas['WebShellSessionWorktreeOptions']>;
133
135
  listSessionWorktrees(workspaceId: string, signal?: AbortSignal): Promise<Schemas['WebShellSessionWorktreePage']>;
@@ -159,7 +159,7 @@ export interface ManagedAgentSessionEvent {
159
159
  turnId: string;
160
160
  data?: unknown;
161
161
  /**
162
- * Projected from a durable snapshot item rather than a raw event. The
162
+ * Projected from a materialized Item rather than a raw event. The
163
163
  * server can retract its items (reconciliation), after which these
164
164
  * projections must not survive a resync.
165
165
  */
@@ -169,6 +169,7 @@ export interface ManagedAgentSessionTranscript {
169
169
  events: ManagedAgentSessionEvent[];
170
170
  olderCursor?: string;
171
171
  lastEventId: number;
172
+ history?: 'items';
172
173
  }
173
174
  export interface ManagedAgentTurnAdmission {
174
175
  sessionId: string;
@@ -231,6 +232,7 @@ export interface ManagedAgentProvider {
231
232
  exportSnapshot?(sessionId: string, options: ManagedAgentRequestOptions & {
232
233
  cursor?: string;
233
234
  }): Promise<ManagedExportPage>;
235
+ readonly exportConsistency?: 'live';
234
236
  readonly storageKey: string;
235
237
  readonly canCancel: boolean;
236
238
  /** Present when the provider can filter the complete Session history by title. */
@@ -13,6 +13,7 @@ export interface ManagedReadingExport {
13
13
  session: ManagedAgentSessionSummary;
14
14
  exportedAt: string;
15
15
  snapshotThroughSequence: number;
16
+ consistency?: 'live';
16
17
  blocks: ExportBlock[];
17
18
  }
18
19
  export declare function collectManagedReadingExport(provider: ManagedAgentProvider, clientId: string, sessionId: string, signal: AbortSignal): Promise<ManagedReadingExport>;
@@ -1,5 +1,5 @@
1
1
  import type { Message } from '../../adapters/types';
2
2
  import type { ManagedAgentSessionEvent } from './managed-agent-provider';
3
- export declare function mergeManagedEvents(current: readonly ManagedAgentSessionEvent[], incoming: readonly ManagedAgentSessionEvent[]): ManagedAgentSessionEvent[];
3
+ export declare function mergeManagedEvents(current: readonly ManagedAgentSessionEvent[], incoming: readonly ManagedAgentSessionEvent[], itemPages?: boolean): ManagedAgentSessionEvent[];
4
4
  export declare function managedEventsToMessages(events: readonly ManagedAgentSessionEvent[], truncatedLabel: string): Message[];
5
5
  export declare function createManagedMessageProjector(): (events: readonly ManagedAgentSessionEvent[], truncatedLabel: string) => Message[];
@@ -1,13 +1,15 @@
1
- import type { DaemonSessionContextUsageStatus } from '@qwen-code/web-shell/daemon-react-sdk';
1
+ import type { DaemonContextMemoryDetail, DaemonSessionContextUsageStatus } from '@qwen-code/web-shell/daemon-react-sdk';
2
2
  export declare function createContextUsageMessageData(status: DaemonSessionContextUsageStatus): {
3
3
  type: string;
4
4
  status: DaemonSessionContextUsageStatus;
5
5
  };
6
6
  export declare function serializeContextUsageMessage(status: DaemonSessionContextUsageStatus): string;
7
7
  export declare function parseContextUsageMessage(content: string, data?: unknown): DaemonSessionContextUsageStatus | null;
8
- export declare function ContextUsageMessage({ status, onShowDetail, compact, }: {
8
+ export declare function ContextUsageMessage({ status, onShowDetail, compact, onOpenMemoryFile, }: {
9
9
  status: DaemonSessionContextUsageStatus;
10
10
  /** Run /context detail, exactly like typing it. */
11
11
  onShowDetail?: () => void;
12
12
  compact?: boolean;
13
+ /** Open a memory file row in a read-only preview. */
14
+ onOpenMemoryFile?: (file: DaemonContextMemoryDetail) => void;
13
15
  }): import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,4 @@
1
+ import type { DaemonContextMemoryDetail } from '@qwen-code/web-shell/daemon-react-sdk';
1
2
  interface SystemMessageProps {
2
3
  content: string;
3
4
  variant: 'info' | 'error' | 'warning';
@@ -14,6 +15,8 @@ interface SystemMessageProps {
14
15
  }>;
15
16
  /** Run /context detail, exactly like typing it (context-usage panels). */
16
17
  onShowContextDetail?: () => void;
18
+ /** Open a context instruction file in a read-only preview. */
19
+ onOpenMemoryFile?: (file: DaemonContextMemoryDetail, workspaceCwd: string) => void;
17
20
  onLocateBackgroundSource?: (messageId: string, callId?: string) => boolean;
18
21
  /** Click an image to preview it in the right panel. */
19
22
  onImagePreview?: (src: string, alt?: string) => void;
@@ -1,5 +1,11 @@
1
1
  interface DiffViewProps {
2
2
  diff: string;
3
+ /**
4
+ * The surrounding region scrolls instead of the line list (floating
5
+ * approval card): the list fills that region with its full height instead
6
+ * of capping itself at 400px with a nested scrollbar.
7
+ */
8
+ fillScrollRegion?: boolean;
3
9
  }
4
10
  export declare const DiffView: import("react").NamedExoticComponent<DiffViewProps>;
5
11
  export {};
@@ -5,6 +5,7 @@ type PluginTab = 'extensions' | 'mcp' | 'skills' | 'agents';
5
5
  interface PluginManagerPageProps {
6
6
  onClose: () => void;
7
7
  onUseSkill: (name: string) => void;
8
+ showBackButton?: boolean;
8
9
  initialFocusRef?: Ref<HTMLButtonElement>;
9
10
  initialTab?: PluginTab;
10
11
  skillsWorkspaceCwd?: string;
@@ -13,5 +14,5 @@ interface PluginManagerPageProps {
13
14
  managedExtensions?: Omit<ManagedExtensionsManagerPageProps, 'onClose'>;
14
15
  managedMcp?: ManagedMcpManagerPageProps;
15
16
  }
16
- export declare function PluginManagerPage({ onClose, onUseSkill, initialFocusRef, initialTab, skillsWorkspaceCwd, onSkillsWorkspaceChange, managedSkills, managedExtensions, managedMcp, }: PluginManagerPageProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function PluginManagerPage({ onClose, onUseSkill, showBackButton, initialFocusRef, initialTab, skillsWorkspaceCwd, onSkillsWorkspaceChange, managedSkills, managedExtensions, managedMcp, }: PluginManagerPageProps): import("react/jsx-runtime").JSX.Element;
17
18
  export {};
@@ -1,4 +1,5 @@
1
1
  export interface EmbeddedManagerPage {
2
2
  onRoot: () => void;
3
3
  onDetailChange: (open: boolean) => void;
4
+ onBack?: () => void;
4
5
  }