@qwen-code/web-shell 0.26.5 → 0.26.6

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 (29) hide show
  1. package/dist/{PierreFilePreview-BqZBliqk.js → PierreFilePreview-Dotw1FUV.js} +1 -1
  2. package/dist/{SpreadsheetPreview-Bn-HzKXD.js → SpreadsheetPreview-BlItstJE.js} +2 -2
  3. package/dist/{WorkspaceFileBrowser-BSNZoggH.js → WorkspaceFileBrowser-do-tItX2.js} +2 -2
  4. package/dist/{agents-route-B1Ckyab-.js → agents-route-BczuxqIl.js} +2 -2
  5. package/dist/daemon-react-sdk.js +1 -1
  6. package/dist/{index-minpPSyG.js → index-B-MJlZo9.js} +52979 -51062
  7. package/dist/index.js +3 -3
  8. package/dist/sw.js +1 -1
  9. package/dist/transcript.js +2441 -2306
  10. package/dist/types/components/artifacts/TokenUsageTrend.d.ts +30 -0
  11. package/dist/types/components/channels/channel-editor-state.d.ts +5 -2
  12. package/dist/types/components/channels/channel-platform.d.ts +1 -0
  13. package/dist/types/components/composer/AddMenu.d.ts +3 -1
  14. package/dist/types/components/managed/java-managed-agent-client.d.ts +2 -1
  15. package/dist/types/components/plugins/PluginManagerPage.d.ts +2 -1
  16. package/dist/types/components/plugins/manager-page.d.ts +1 -0
  17. package/dist/types/components/sidebar/ActivityView.d.ts +41 -0
  18. package/dist/types/components/sidebar/SidebarSectionHeader.d.ts +7 -0
  19. package/dist/types/components/sidebar/WebShellSidebar.d.ts +6 -3
  20. package/dist/types/components/sidebar/activity-messages.d.ts +4 -0
  21. package/dist/types/components/sidebar/activity-model.d.ts +34 -0
  22. package/dist/types/components/sidebar/pinned-session-order.d.ts +2 -0
  23. package/dist/types/components/sidebar/use-activity-catalog.d.ts +31 -0
  24. package/dist/types/components/workflow-mode-control-state.d.ts +43 -0
  25. package/dist/types/components/workflow-mode-messages.d.ts +10 -0
  26. package/dist/types/utils/standalone-session-routing.d.ts +20 -1
  27. package/dist/{useDaemonMidTurnInjected-CyCL08_O.js → useDaemonMidTurnInjected-D5dlDeW-.js} +2147 -1979
  28. package/package.json +1 -1
  29. package/dist/types/components/WorkflowModeControl.d.ts +0 -8
@@ -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 {};
@@ -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;
@@ -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;
@@ -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
  }
@@ -0,0 +1,41 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type ActivityEntry, type ActivityPreferences } from './activity-model';
3
+ export declare const ACTIVITY_PREFERENCES_EVENT = "qwen-code-activity-preferences-changed";
4
+ export declare function readActivityPreferences(): ActivityPreferences;
5
+ interface ActivityOperationState {
6
+ undo?: {
7
+ entries: ActivityEntry[];
8
+ priorityKeys: string[];
9
+ };
10
+ pending: boolean;
11
+ result?: string;
12
+ }
13
+ export declare function useActivityOperations(scope: string): {
14
+ state: ActivityOperationState;
15
+ update: (change: (state: ActivityOperationState) => ActivityOperationState) => void;
16
+ };
17
+ export interface ActivityViewProps {
18
+ operations: ReturnType<typeof useActivityOperations>;
19
+ entries: ActivityEntry[];
20
+ loading: boolean;
21
+ unavailable: boolean;
22
+ hasMore: boolean;
23
+ onLoadMore: () => void | Promise<void>;
24
+ onRetry: () => void;
25
+ renderSession: (entry: ActivityEntry, preview?: string) => ReactNode;
26
+ onMarkRead: (entries: ActivityEntry[]) => Promise<void>;
27
+ onArchive: (entries: ActivityEntry[]) => Promise<{
28
+ succeeded: ActivityEntry[];
29
+ failed: number;
30
+ }>;
31
+ onUndo: (entries: ActivityEntry[]) => Promise<{
32
+ succeeded: ActivityEntry[];
33
+ failed: number;
34
+ }>;
35
+ loadPreview: (entry: ActivityEntry) => Promise<string | undefined>;
36
+ canArchive: boolean;
37
+ pinnedExpanded: boolean;
38
+ onPinnedExpandedChange: (expanded: boolean) => void;
39
+ }
40
+ export declare function ActivityView({ operations, entries, loading, unavailable, hasMore, onLoadMore, onRetry, renderSession, onMarkRead, onArchive, onUndo, loadPreview, canArchive, pinnedExpanded, onPinnedExpandedChange, }: ActivityViewProps): import("react/jsx-runtime").JSX.Element;
41
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from 'react';
2
+ export declare function SidebarSectionHeader({ label, expanded, onToggle, action, }: {
3
+ label: string;
4
+ expanded?: boolean;
5
+ onToggle?: () => void;
6
+ action?: ReactNode;
7
+ }): import("react/jsx-runtime").JSX.Element;
@@ -33,7 +33,7 @@ export interface WebShellSidebarFooterOptions {
33
33
  export declare const DEFAULT_FOOTER_ITEMS: readonly WebShellSidebarFooterItem[];
34
34
  export declare const DESKTOP_DEFAULT_FOOTER_ITEMS: readonly WebShellSidebarFooterItem[];
35
35
  export declare const DEFAULT_PRIMARY_NAV_ITEMS: readonly WebShellSidebarPrimaryNavItem[];
36
- export type WebShellSidebarSessionActionItem = 'details' | 'rename' | 'group' | 'export' | 'delete' | 'pin' | 'archive';
36
+ export type WebShellSidebarSessionActionItem = 'details' | 'rename' | 'group' | 'export' | 'delete' | 'pin' | 'split' | 'archive';
37
37
  /** Subset of action items that have working inline (hover-button) handlers. */
38
38
  export type WebShellSidebarSessionInlineActionItem = 'pin' | 'rename' | 'export' | 'delete';
39
39
  export interface WebShellSidebarSessionActionsOptions {
@@ -46,7 +46,7 @@ export interface WebShellSidebarSessionActionsOptions {
46
46
  * archive a session.
47
47
  * Only items that also pass their built-in visibility condition are rendered.
48
48
  * Only items with working inline handlers are accepted
49
- * (details/group/archive are dropdown-only).
49
+ * (details/group/archive/split are dropdown-only).
50
50
  * Recent sessions use dedicated Pin and Archive buttons instead of this
51
51
  * layout; the items policy still controls whether those actions are enabled.
52
52
  * Archived rows use Export and Restore inline, independently of this option.
@@ -92,6 +92,8 @@ interface WebShellSidebarProps {
92
92
  /** Opens the Workspaces overview panel (table of registered workspaces). */
93
93
  onOpenWorkspacesOverview?: () => void;
94
94
  onOpenSplitView: () => void;
95
+ onAddSessionToSplitView?: (sessionId: string) => void;
96
+ splitSessionIds?: readonly string[];
95
97
  /** Whether to offer the in-window split view (large screens only). */
96
98
  canOpenSplitView?: boolean;
97
99
  onNewSession: (workspaceCwd?: string) => Promise<boolean> | boolean;
@@ -104,6 +106,7 @@ interface WebShellSidebarProps {
104
106
  */
105
107
  onOpenHostSession?: (origin: string, sessionId: string, workspaceCwd?: string) => void;
106
108
  onSelectCurrentSession?: () => void;
109
+ onSessionArchived?: (sessionId: string, workspaceCwd: string) => void;
107
110
  onSessionRenameConfirmed?: (workspaceCwd: string | undefined, sessionId: string, displayName: string) => void;
108
111
  /**
109
112
  * `attachedSessionId` is the session this client was attached to when the
@@ -182,4 +185,4 @@ interface WebShellSidebarProps {
182
185
  onLoadStandaloneSession?: (sessionId: string, displayName?: string) => Promise<void> | void;
183
186
  onStandaloneNotice?: (message: string) => void;
184
187
  }
185
- export declare function WebShellSidebar({ collapsed, layout, activePage, containerWidth, onOpenHome, onCollapsedChange, onOpenSettings, canOpenSettings, onOpenAgents, onOpenPlugins, onOpenChannels, onOpenLive, onLiveVoiceSlotChange, onOpenManagedSessions, onOpenDaemonStatus, onOpenScheduledTasks, onOpenPrWatches, onOpenWorkflows, onOpenGoals, onOpenSessions, canOpenSessionsOverview, onOpenWorkspacesOverview, onOpenSplitView, canOpenSplitView, onNewSession, onNewStandaloneSession, onLoadSession, onOpenHostSession, onSelectCurrentSession, onSessionRenameConfirmed, onSessionsDeleted, onError, theme, onThemeChange, mobileOpen, onMobileClose, selectedWorkspaceCwd, onSelectWorkspace, onOpenGitDiff, onOpenCommit, onOpenAddWorkspace, workspaces: providedWorkspaces, lockedWorkspaceCwd, lockedWorkspace: lockedWorkspaceOptions, branding, primaryNav: primaryNavOptions, sessionContent, sessionHeader, managedWorkspaces, managedArchivedSessions, archivedSessionsTarget, onSearchQueryChange, currentSessionActive, showSessionSourceSwitch, showLive, hideProjectHeader, sessionActions: sessionActionsOptions, footer, workspaceOverview, onOpenWorkspaceManagement, onNewWorktreeSession, projectFeaturesEnabled, onLoadStandaloneSession, onStandaloneNotice, }: WebShellSidebarProps): import("react/jsx-runtime").JSX.Element;
188
+ export declare function WebShellSidebar({ collapsed, layout, activePage, containerWidth, onOpenHome, onCollapsedChange, onOpenSettings, canOpenSettings, onOpenAgents, onOpenPlugins, onOpenChannels, onOpenLive, onLiveVoiceSlotChange, onOpenManagedSessions, onOpenDaemonStatus, onOpenScheduledTasks, onOpenPrWatches, onOpenWorkflows, onOpenGoals, onOpenSessions, canOpenSessionsOverview, onOpenWorkspacesOverview, onOpenSplitView, onAddSessionToSplitView, splitSessionIds, canOpenSplitView, onNewSession, onNewStandaloneSession, onLoadSession, onOpenHostSession, onSelectCurrentSession, onSessionArchived, onSessionRenameConfirmed, onSessionsDeleted, onError, theme, onThemeChange, mobileOpen, onMobileClose, selectedWorkspaceCwd, onSelectWorkspace, onOpenGitDiff, onOpenCommit, onOpenAddWorkspace, workspaces: providedWorkspaces, lockedWorkspaceCwd, lockedWorkspace: lockedWorkspaceOptions, branding, primaryNav: primaryNavOptions, sessionContent, sessionHeader, managedWorkspaces, managedArchivedSessions, archivedSessionsTarget, onSearchQueryChange, currentSessionActive, showSessionSourceSwitch, showLive, hideProjectHeader, sessionActions: sessionActionsOptions, footer, workspaceOverview, onOpenWorkspaceManagement, onNewWorktreeSession, projectFeaturesEnabled, onLoadStandaloneSession, onStandaloneNotice, }: WebShellSidebarProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ type Message = string | ((vars?: Record<string, string | number>) => string);
2
+ export declare const ACTIVITY_MESSAGES_EN: Record<string, Message>;
3
+ export declare const ACTIVITY_MESSAGES_ZH: Record<string, Message>;
4
+ export {};
@@ -0,0 +1,34 @@
1
+ import type { DaemonSessionSummary } from '@qwen-code/sdk/daemon';
2
+ export interface ActivityEntry {
3
+ key: string;
4
+ session: DaemonSessionSummary;
5
+ unread?: boolean;
6
+ }
7
+ export type ActivityState = 'input' | 'approval' | 'error' | 'unread' | 'active' | 'idle';
8
+ export interface ActivityPreferences {
9
+ priority: boolean;
10
+ pinned: boolean;
11
+ scheduled: boolean;
12
+ }
13
+ export declare const DEFAULT_ACTIVITY_PREFERENCES: ActivityPreferences;
14
+ export interface ActivitySnapshot {
15
+ activatedAt: number;
16
+ priorityKeys: string[];
17
+ recentTimes: ReadonlyMap<string, number>;
18
+ }
19
+ export declare function activityRecency({ session }: ActivityEntry): number;
20
+ export declare function isActivityUnread(entry: ActivityEntry): boolean;
21
+ export declare function activityState(entry: ActivityEntry): ActivityState;
22
+ export declare function activityNeedsAttention(entry: ActivityEntry): boolean;
23
+ export declare function isActivityEligible(entry: ActivityEntry, preferences: ActivityPreferences): boolean;
24
+ export declare function openActivitySnapshot(entries: ActivityEntry[], preferences: ActivityPreferences, now?: number): ActivitySnapshot;
25
+ export declare function updateActivitySnapshot(snapshot: ActivitySnapshot, entries: ActivityEntry[], preferences: ActivityPreferences): ActivitySnapshot;
26
+ export declare function clearReadActivitySnapshot(snapshot: ActivitySnapshot, entries: ActivityEntry[], preferences: ActivityPreferences): ActivitySnapshot;
27
+ export declare function selectActivitySections(snapshot: ActivitySnapshot, entries: ActivityEntry[], preferences: ActivityPreferences): {
28
+ priority: ActivityEntry[];
29
+ pinned: ActivityEntry[];
30
+ recent: {
31
+ dayStart: number;
32
+ entries: ActivityEntry[];
33
+ }[];
34
+ };
@@ -0,0 +1,2 @@
1
+ import type { DaemonSessionSummary } from '@qwen-code/sdk/daemon';
2
+ export declare function comparePinnedSectionSessions(a: DaemonSessionSummary, b: DaemonSessionSummary): number;
@@ -0,0 +1,31 @@
1
+ import type { DaemonClient, DaemonEvent } from '@qwen-code/sdk/daemon';
2
+ import type { ActivityEntry } from './activity-model';
3
+ export declare function activityKey(workspaceCwd: string, sessionId: string): string;
4
+ export declare function activityPreview(events: readonly DaemonEvent[]): string | undefined;
5
+ export declare function activityBatch<T, R>(items: readonly T[], run: (item: T) => Promise<R>): Promise<PromiseSettledResult<R>[]>;
6
+ interface ActivityCatalogOptions {
7
+ client: DaemonClient;
8
+ workspaceCwds: readonly string[];
9
+ enabled: boolean;
10
+ open: boolean;
11
+ liveStateEnabled: boolean;
12
+ currentKey?: string;
13
+ onArchivedCurrent: (entry: ActivityEntry) => void;
14
+ }
15
+ export declare function useActivityCatalog({ client, workspaceCwds, enabled, open, liveStateEnabled, currentKey, onArchivedCurrent, }: ActivityCatalogOptions): {
16
+ entries: ActivityEntry[];
17
+ loading: boolean;
18
+ unavailable: boolean;
19
+ hasMore: boolean;
20
+ archive: (items: ActivityEntry[]) => Promise<{
21
+ succeeded: ActivityEntry[];
22
+ failed: number;
23
+ }>;
24
+ undo: (items: ActivityEntry[]) => Promise<{
25
+ succeeded: ActivityEntry[];
26
+ failed: number;
27
+ }>;
28
+ loadPreview: (entry: ActivityEntry) => Promise<string | undefined>;
29
+ retry: () => void;
30
+ };
31
+ export {};
@@ -0,0 +1,43 @@
1
+ import type { DaemonWorkflowMode, DaemonWorkflowModeStatus } from '@qwen-code/web-shell/daemon-react-sdk';
2
+ import type { WebShellLanguage } from '../i18n';
3
+ export interface WorkflowModeControlOptions {
4
+ workflowMode?: DaemonWorkflowMode;
5
+ workflowModeStatus?: DaemonWorkflowModeStatus;
6
+ workflowModePending?: boolean;
7
+ onWorkflowModeChange?: (requested: boolean) => void;
8
+ }
9
+ export declare function getWorkflowModeControlState({ workflowMode, workflowModeStatus: status, workflowModePending: pending, onWorkflowModeChange, }: WorkflowModeControlOptions, language: WebShellLanguage): {
10
+ mode: DaemonWorkflowMode | undefined;
11
+ disabled: boolean;
12
+ description: string;
13
+ summary: string;
14
+ messages: {
15
+ label: string;
16
+ menuDescription: string;
17
+ short: {
18
+ unbound: string;
19
+ updating: string;
20
+ syncing: string;
21
+ unknown: string;
22
+ onUnavailable: string;
23
+ unavailable: string;
24
+ };
25
+ details: string;
26
+ unbound: string;
27
+ updating: string;
28
+ syncing: string;
29
+ unknown: string;
30
+ on: string;
31
+ off: string;
32
+ onUnavailable: string;
33
+ unavailable: string;
34
+ initializing: string;
35
+ workflowUnavailable: string;
36
+ unsupported: string;
37
+ nextTurn: string;
38
+ updateFailed: string;
39
+ clickToTurnOff: string;
40
+ };
41
+ status: "unknown" | "ready" | "unbound" | "syncing";
42
+ pending: boolean;
43
+ } | null;
@@ -1,6 +1,15 @@
1
1
  import type { WebShellLanguage } from '../i18n';
2
2
  export declare function getWorkflowModeMessages(language: WebShellLanguage): {
3
3
  label: string;
4
+ menuDescription: string;
5
+ short: {
6
+ unbound: string;
7
+ updating: string;
8
+ syncing: string;
9
+ unknown: string;
10
+ onUnavailable: string;
11
+ unavailable: string;
12
+ };
4
13
  details: string;
5
14
  unbound: string;
6
15
  updating: string;
@@ -15,4 +24,5 @@ export declare function getWorkflowModeMessages(language: WebShellLanguage): {
15
24
  unsupported: string;
16
25
  nextTurn: string;
17
26
  updateFailed: string;
27
+ clickToTurnOff: string;
18
28
  };
@@ -1,2 +1,21 @@
1
1
  import { type DaemonClient, type DaemonCapabilities } from '@qwen-code/sdk/daemon';
2
- export declare function keepWorkspaceSplitSessionIds(client: DaemonClient, capabilities: DaemonCapabilities | undefined, sessionIds: readonly string[]): Promise<string[]>;
2
+ /**
3
+ * Outcome of classifying one session id for the workspace split view.
4
+ *
5
+ * - `standalone`: the id resolves in the standalone registry, so it is
6
+ * ineligible for a workspace split and is dropped silently.
7
+ * - `workspace`: the id is provably absent from the standalone registry
8
+ * (404 `standalone_session_not_found`), so it belongs to the workspace and
9
+ * is kept.
10
+ * - `failed`: classification could not complete (non-404 error). The id is
11
+ * dropped, but unlike the other two outcomes it is reported separately so
12
+ * the caller can surface the failure instead of opening a partial split
13
+ * silently.
14
+ */
15
+ export type SplitSessionOutcome = 'standalone' | 'workspace' | 'failed';
16
+ export interface SplitSessionClassification {
17
+ kept: string[];
18
+ transientFailures: string[];
19
+ }
20
+ export type SplitSessionClassifier = (sessionId: string) => Promise<SplitSessionOutcome>;
21
+ export declare function keepWorkspaceSplitSessionIds(client: DaemonClient, capabilities: DaemonCapabilities | undefined, sessionIds: readonly string[], classify?: SplitSessionClassifier): Promise<SplitSessionClassification>;