@qwen-code/web-shell 0.25.3 → 0.25.4-preview.1

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 (56) hide show
  1. package/NOTICES.txt +1240 -0
  2. package/README.md +33 -27
  3. package/dist/{PierreFilePreview-CDwdShQj.js → PierreFilePreview-DDGm1BwT.js} +1 -1
  4. package/dist/{SpreadsheetPreview-DrhBxOLb.js → SpreadsheetPreview-Bo3dF5jL.js} +2 -2
  5. package/dist/{WorkspaceFileBrowser-Cj-IkaDU.js → WorkspaceFileBrowser-K5x5fG6c.js} +656 -656
  6. package/dist/{agents-route-CNZAhyBJ.js → agents-route-hV5r9VDG.js} +2 -2
  7. package/dist/daemon-react-sdk.js +1 -1
  8. package/dist/docx-preview-BucJeYCm.js +5570 -0
  9. package/dist/{index-D0B7Fiw9.js → index-CU9u4ISL.js} +58969 -56718
  10. package/dist/index.js +3 -3
  11. package/dist/sw.js +1 -1
  12. package/dist/transcript.js +11784 -11135
  13. package/dist/types/App.d.ts +4 -2
  14. package/dist/types/adapters/messageTypes.d.ts +3 -0
  15. package/dist/types/adapters/transcriptToMessages.d.ts +3 -1
  16. package/dist/types/components/ChatEditor.d.ts +5 -0
  17. package/dist/types/components/MessageDeletionToolbar.d.ts +4 -0
  18. package/dist/types/components/MessageItem.d.ts +2 -0
  19. package/dist/types/components/MessageList.d.ts +2 -0
  20. package/dist/types/components/MessageTimestamp.d.ts +5 -2
  21. package/dist/types/components/ModelRefreshControl.d.ts +5 -0
  22. package/dist/types/components/artifacts/CodeReviewArtifactDetail.d.ts +5 -0
  23. package/dist/types/components/artifacts/DocxPreview.d.ts +8 -0
  24. package/dist/types/components/artifacts/TrajectoryExecutions.d.ts +9 -1
  25. package/dist/types/components/artifacts/TrajectoryInspector.d.ts +2 -1
  26. package/dist/types/components/artifacts/artifactUtils.d.ts +7 -0
  27. package/dist/types/components/artifacts/token-usage-messages.d.ts +9 -0
  28. package/dist/types/components/artifacts/token-usage-messages.transcript-stub.d.ts +7 -0
  29. package/dist/types/components/channels/channel-platform.d.ts +1 -1
  30. package/dist/types/components/dialogs/ModelDialog.d.ts +3 -1
  31. package/dist/types/components/managed/generated/managed-agent-api.d.ts +251 -7
  32. package/dist/types/components/managed/java-managed-agent-client.d.ts +10 -0
  33. package/dist/types/components/managed/managed-agent-provider.d.ts +7 -0
  34. package/dist/types/components/managed/managed-pending-storage.d.ts +2 -0
  35. package/dist/types/components/managed/managed-session-messages.d.ts +1 -0
  36. package/dist/types/components/managed/use-managed-file-references.d.ts +19 -0
  37. package/dist/types/components/message-deletion-messages.d.ts +7 -0
  38. package/dist/types/components/message-deletion-messages.transcript-stub.d.ts +7 -0
  39. package/dist/types/components/messages/TasksStatusMessage.d.ts +6 -0
  40. package/dist/types/components/messages/toolFormatting.d.ts +1 -0
  41. package/dist/types/components/messages/tools/ToolDetailsContext.d.ts +13 -0
  42. package/dist/types/customization.d.ts +2 -1
  43. package/dist/types/daemon/session/actions.d.ts +10 -2
  44. package/dist/types/daemon/session/types.d.ts +6 -1
  45. package/dist/types/hooks/useAtMentionSources.d.ts +5 -0
  46. package/dist/types/hooks/useComposerCore.d.ts +2 -0
  47. package/dist/types/hooks/useMessageDeletion.d.ts +33 -0
  48. package/dist/types/hooks/useModelRefresh.d.ts +6 -0
  49. package/dist/types/transcript.d.ts +2 -2
  50. package/dist/types/utils/composerTag.d.ts +1 -0
  51. package/dist/types/utils/dom.d.ts +1 -0
  52. package/dist/types/utils/message-deletion.d.ts +20 -0
  53. package/dist/types/utils/planMode.d.ts +1 -1
  54. package/dist/types/utils/plural.d.ts +7 -0
  55. package/dist/{useDaemonMidTurnInjected-BDFSY1Yl.js → useDaemonMidTurnInjected-CfhBFIym.js} +5686 -5264
  56. package/package.json +3 -1
@@ -169,6 +169,9 @@ export interface ManagedAgentProvider {
169
169
  respond(action: ManagedAgentPendingAction, optionId: string, options: ManagedAgentCommandOptions): Promise<void>;
170
170
  };
171
171
  readonly toolResults?: ManagedToolResultReader;
172
+ readonly toolDetails?: {
173
+ get(sessionId: string, itemId: string, options: ManagedAgentRequestOptions): Promise<components['schemas']['WebShellToolDetails']>;
174
+ };
172
175
  readonly tasks?: {
173
176
  list(sessionId: string, options: ManagedAgentRequestOptions & {
174
177
  cursor?: string;
@@ -208,6 +211,10 @@ export interface ManagedAgentProvider {
208
211
  expectedRevision: number;
209
212
  }, options: ManagedAgentCommandOptions): Promise<ManagedModelChangeResult>;
210
213
  };
214
+ readonly workspaceFiles?: {
215
+ query(request: components['schemas']['WebShellWorkspaceFileQueryRequest'], options: ManagedAgentRequestOptions): Promise<components['schemas']['WebShellWorkspaceFilePage']>;
216
+ read(request: components['schemas']['WebShellWorkspaceFileReadRequest'], options: ManagedAgentRequestOptions): Promise<components['schemas']['WebShellWorkspaceFileSnapshot']>;
217
+ };
211
218
  readonly workspaceBinding?: {
212
219
  readonly agentId: string;
213
220
  readonly registration?: ManagedWorkspaceRegistration;
@@ -0,0 +1,2 @@
1
+ export declare function readManagedPending(key: string): Promise<unknown>;
2
+ export declare function saveManagedPending(key: string, value?: unknown): Promise<boolean>;
@@ -2,3 +2,4 @@ import type { Message } from '../../adapters/types';
2
2
  import type { ManagedAgentSessionEvent } from './managed-agent-provider';
3
3
  export declare function mergeManagedEvents(current: readonly ManagedAgentSessionEvent[], incoming: readonly ManagedAgentSessionEvent[]): ManagedAgentSessionEvent[];
4
4
  export declare function managedEventsToMessages(events: readonly ManagedAgentSessionEvent[], truncatedLabel: string): Message[];
5
+ export declare function createManagedMessageProjector(): (events: readonly ManagedAgentSessionEvent[], truncatedLabel: string) => Message[];
@@ -0,0 +1,19 @@
1
+ import type { AtMentionWorkspaceActions } from '../../hooks/useAtMentionSources';
2
+ import type { ComposerSubmitMetadata } from '../../hooks/useComposerCore';
3
+ import type { ManagedAgentProvider } from './managed-agent-provider';
4
+ import type { PromptFile } from '../../adapters/promptTypes';
5
+ export declare function useManagedFileReferences(provider: ManagedAgentProvider, clientId: string, workspace: {
6
+ workspaceId: string;
7
+ cwdRelative: string;
8
+ contextRevision?: number;
9
+ state?: string;
10
+ } | undefined, sessionId?: string): {
11
+ actions: AtMentionWorkspaceActions | undefined;
12
+ busy: boolean;
13
+ prepareInput: (text: string, files?: readonly PromptFile[], metadata?: ComposerSubmitMetadata) => Promise<{
14
+ text: string;
15
+ files: PromptFile[];
16
+ }>;
17
+ assertCurrent: () => void;
18
+ error: string | undefined;
19
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare const MESSAGE_DELETION_MESSAGES_EN: Record<string, string | ((vars?: Record<string, string | number>) => string)>;
7
+ export declare const MESSAGE_DELETION_MESSAGES_ZH: Record<string, string | ((vars?: Record<string, string | number>) => string)>;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare const MESSAGE_DELETION_MESSAGES_EN: {};
7
+ export declare const MESSAGE_DELETION_MESSAGES_ZH: {};
@@ -36,4 +36,10 @@ export declare function ShellTaskDetail({ task, actions: providedActions, }: {
36
36
  task: DaemonSessionShellTaskStatus;
37
37
  actions?: DaemonSessionActions;
38
38
  }): import("react/jsx-runtime").JSX.Element;
39
+ /**
40
+ * Tab title for a shell task. The full command is unreadable once the tab
41
+ * truncates it, so use the executable's basename (`/opt/homebrew/.../mariadbd`
42
+ * becomes `mariadbd`) and fall back to the first line.
43
+ */
44
+ export declare function shellTaskPanelTitle(command: string): string;
39
45
  export { ACTIVE_EVENT as TASKS_STATUS_ACTIVE_EVENT };
@@ -34,6 +34,7 @@ export declare function getToolDescription(tool: ACPToolCall, workspaceCwd?: str
34
34
  export declare function getToolSummaryDescription(tool: ACPToolCall, workspaceCwd?: string): string;
35
35
  export declare function getShellToolSemanticDescription(tool: ACPToolCall): string;
36
36
  export declare function extractText(tool: ACPToolCall): string | null;
37
+ export declare function hasRecordedOutput(tool: ACPToolCall): boolean;
37
38
  export declare function getAdvisorDisplayText(tool: ACPToolCall): string | null;
38
39
  export declare function getToolResultSummary(tool: ACPToolCall): string;
39
40
  export declare function getEmptyMcpToolTitleDescription(toolName: string | undefined, title: string | undefined, input: Record<string, unknown> | undefined): string | undefined;
@@ -0,0 +1,13 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { ACPToolCall } from '../../../adapters/types';
3
+ export type ToolDetailsLoader = (callId: string, signal: AbortSignal) => Promise<Pick<ACPToolCall, 'args' | 'rawOutput'>>;
4
+ export declare const ToolDetailsContext: import("react").Context<ToolDetailsLoader | undefined>;
5
+ export declare function useToolDetails(tool: ACPToolCall, expanded: boolean): {
6
+ tool: import("../../../adapters/messageTypes").DaemonMessageToolCall;
7
+ loading: boolean;
8
+ };
9
+ export declare function ToolDetails({ tool, enabled, children, }: {
10
+ tool: ACPToolCall;
11
+ enabled: boolean;
12
+ children: (tool: ACPToolCall) => ReactNode;
13
+ }): import("react/jsx-runtime").JSX.Element;
@@ -5,7 +5,7 @@ import type { Components, Options } from 'react-markdown';
5
5
  import type { ChartRendererRegistry, MarkdownChartLabelOverrides } from '@datafe-open/markdown-chart';
6
6
  import type { MarkdownChartReactErrorHandler } from '@datafe-open/markdown-chart-react';
7
7
  import type { DaemonInputAnnotation, DaemonSessionArtifact, DaemonSessionAttachmentReference, SessionSource, GoalSnapshotV2 } from '@qwen-code/sdk/daemon';
8
- import type { DaemonStreamingState } from '@qwen-code/web-shell/daemon-react-sdk';
8
+ import type { DaemonSessionActions, DaemonStreamingState } from '@qwen-code/web-shell/daemon-react-sdk';
9
9
  import type { ACPToolCall } from './adapters/types';
10
10
  import type { WelcomeHeaderProps } from './components/WelcomeHeader';
11
11
  import type { WebShellTheme } from './themeContext';
@@ -513,6 +513,7 @@ export type FooterRenderer = ComponentType<WebShellFooterRenderInfo>;
513
513
  */
514
514
  export type LoadingPhrasesResolver = (language: string) => readonly string[] | undefined | null;
515
515
  export interface WebShellCustomization {
516
+ onRefreshModels?: Parameters<DaemonSessionActions['refreshModels']>[0];
516
517
  allowedApprovalModes?: readonly WebShellApprovalMode[];
517
518
  filterArtifact?: ArtifactFilter;
518
519
  artifact?: WebShellArtifactCustomization;
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import type { Dispatch, SetStateAction } from 'react';
7
- import type { DaemonSessionClient, CreateSessionRequest, DaemonTranscriptStore, DaemonCapabilities } from '@qwen-code/sdk/daemon';
7
+ import type { DaemonClient, DaemonSessionClient, CreateSessionRequest, DaemonTranscriptStore, DaemonCapabilities } from '@qwen-code/sdk/daemon';
8
8
  import { type TimerRef } from '../timing.js';
9
9
  import type { ActivePrompt, AddDaemonSessionNotice, DaemonActivePromptState, DaemonConnectionState, DaemonPromptStatus, DaemonSessionActions, SettledPrompt, PendingSessionLoad, DaemonProductSessionContext } from './types.js';
10
10
  interface RefBox<T> {
@@ -14,6 +14,13 @@ export declare function resolveSessionRestoreTimeouts(capabilities: DaemonCapabi
14
14
  requestTimeoutMs: number;
15
15
  watchdogTimeoutMs: number | undefined;
16
16
  };
17
+ /**
18
+ * Limit for a workspace create, which waits for the capability preflight and
19
+ * then for the create request. The SDK sizes that request from the same
20
+ * advertised session budget as a restore, so an action limit below the sum of
21
+ * the two reports a timeout on a spawn the daemon is still finishing.
22
+ */
23
+ export declare function resolveCreateWatchdogTimeoutMs(capabilities: DaemonCapabilities | undefined): number;
17
24
  export interface CreateDaemonSessionActionsArgs {
18
25
  store: DaemonTranscriptStore;
19
26
  sessionRef: RefBox<DaemonSessionClient | undefined>;
@@ -54,6 +61,7 @@ export interface CreateDaemonSessionActionsArgs {
54
61
  createDetachedSession: (workspaceCwd?: string, overrides?: Pick<CreateSessionRequest, 'approvalMode' | 'sourceType' | 'worktree' | 'branch'>) => Promise<DaemonSessionClient>;
55
62
  createDetachedStandaloneSession: (overrides?: Pick<CreateSessionRequest, 'approvalMode' | 'modelServiceId'>) => Promise<DaemonSessionClient>;
56
63
  getDefaultSessionContext: () => DaemonProductSessionContext | undefined;
64
+ getClient?: () => DaemonClient | undefined;
57
65
  getConnection: () => DaemonConnectionState;
58
66
  getEventDetailMode: () => 'full' | 'summary';
59
67
  hasSessionActivePrompt: () => boolean;
@@ -80,7 +88,7 @@ export interface CreateDaemonSessionActionsArgs {
80
88
  export declare function getWorkspaceModelsAfterSessionClear(current: DaemonConnectionState): DaemonConnectionState['models'];
81
89
  export declare function getConnectionAfterSessionClear(current: DaemonConnectionState, clearedSessionId: string | undefined, preserveWorkspaceMetadata?: boolean, dropSessionContext?: boolean): DaemonConnectionState;
82
90
  export declare function advanceSessionRecoveryGeneration(generations: WeakMap<DaemonSessionClient, number>, session: DaemonSessionClient): number;
83
- export declare function createDaemonSessionActions({ store, sessionRef, activePromptsRef, settledPromptsRef, pendingSessionLoadRef, pendingSessionLoadIdRef, sessionConfigGeneration, sessionRecoveryGeneration, heartbeatSupportedRef, manualSessionClearRef, skipNextCleanupDetachSessionRef, passiveAssistantDoneTimerRef, daemonActivePromptRef, settleRestoredActivePrompt, flushTranscript, getCreateSessionRequest, createDetachedSession, createDetachedStandaloneSession, getDefaultSessionContext, getConnection, getEventDetailMode, hasSessionActivePrompt, resetCurrentSessionActivePrompt, restartEventStream, addNotice, setConnection, setPromptStatus, setRestoreSessionId, setRestoreSessionContext, setRestoreMode, setRestoreSessionNonce, setAttachSessionNonce, setNewSessionNonce, clearLiveJournalRepair, onPromptAdmitted, onContinuationAdmitted, onPromptRemoved, }: CreateDaemonSessionActionsArgs): DaemonSessionActions;
91
+ export declare function createDaemonSessionActions({ store, sessionRef, activePromptsRef, settledPromptsRef, pendingSessionLoadRef, pendingSessionLoadIdRef, sessionConfigGeneration, sessionRecoveryGeneration, heartbeatSupportedRef, manualSessionClearRef, skipNextCleanupDetachSessionRef, passiveAssistantDoneTimerRef, daemonActivePromptRef, settleRestoredActivePrompt, flushTranscript, getCreateSessionRequest, createDetachedSession, createDetachedStandaloneSession, getDefaultSessionContext, getClient, getConnection, getEventDetailMode, hasSessionActivePrompt, resetCurrentSessionActivePrompt, restartEventStream, addNotice, setConnection, setPromptStatus, setRestoreSessionId, setRestoreSessionContext, setRestoreMode, setRestoreSessionNonce, setAttachSessionNonce, setNewSessionNonce, clearLiveJournalRepair, onPromptAdmitted, onContinuationAdmitted, onPromptRemoved, }: CreateDaemonSessionActionsArgs): DaemonSessionActions;
84
92
  /**
85
93
  * Key under which a shell command tracks its prompt in the active-prompt map.
86
94
  * Shell commands run as their own prompt alongside a conversation turn, so they
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import type { ReactNode } from 'react';
7
- import type { CreateSessionRequest, DaemonBranchSessionRequest, DaemonCapabilities, DaemonBackgroundTurn, DaemonEvent, DaemonApprovalMode, DaemonApprovalModeResult, DaemonAvailableCommand, DaemonForkSessionResult, DaemonInputAnnotation, DaemonSessionBtwResult, DaemonSessionGenerationEvent, DaemonSessionAttachmentReference, DaemonSessionAttachmentData, DaemonMidTurnMessageResult, DaemonMidTurnMessagesResult, DaemonRemoveMidTurnMessageResult, DaemonSendMidTurnMessagesNowResult, DaemonPendingPromptsResult, DaemonRemovePendingPromptResult, DaemonSessionContextStatus, DaemonSessionSavedWorkflowDetail, DaemonSessionContextUsageStatus, DaemonSessionRecapResult, DaemonRewindResult, DaemonRewindSnapshotInfo, DaemonSession, DaemonSessionSummary, DaemonSessionSupportedCommandsStatus, DaemonSessionTaskWithWorkflowStatus, DaemonSessionTasksStatus, DaemonSessionWorkflowTaskStatus, DaemonSessionWorkflowTasksStatus, DaemonSessionStatsStatus, DaemonSessionArtifactsEnvelope, DaemonSessionArtifactInput, DaemonSessionArtifactMutationResult, SessionSourceInput, SessionSourcesResult, SessionSourceUpsertResult, SessionSourceRemoveResult, DaemonSkillToggleMutation, DaemonShellCommandResult, DaemonTranscriptBlock, DaemonTranscriptStore, DaemonWorkspaceGitStatus, DaemonWorkspaceProvidersStatus, DaemonStandaloneCreationRecovery, DaemonStandaloneWorkingDirectory, HeartbeatResult, GoalControlRequest, GoalSnapshotV2, GoalStateResponse, PermissionResponse, PromptContentBlock, PromptResult, ReasoningSelection, SessionMetadataResult, SetModelResult } from '@qwen-code/sdk/daemon';
7
+ import type { CreateSessionRequest, DaemonBranchSessionRequest, DaemonCapabilities, DaemonBackgroundTurn, DaemonEvent, DaemonApprovalMode, DaemonApprovalModeResult, DaemonAvailableCommand, DaemonForkSessionResult, DaemonInputAnnotation, DaemonSessionBtwResult, DaemonSessionGenerationEvent, DaemonSessionAttachmentReference, DaemonSessionAttachmentData, DaemonMidTurnMessageResult, DaemonMidTurnMessagesResult, DaemonRemoveMidTurnMessageResult, DaemonSendMidTurnMessagesNowResult, DaemonPendingPromptsResult, DaemonRemovePendingPromptResult, DaemonSessionContextStatus, DaemonSessionSavedWorkflowDetail, DaemonSessionContextUsageStatus, DaemonSessionRecapResult, DaemonRewindResult, DaemonRewindSnapshotInfo, DaemonSession, DaemonSessionSummary, DaemonSessionSupportedCommandsStatus, DaemonSessionTaskRuntimeStatus, DaemonSessionTaskWithWorkflowStatus, DaemonSessionTasksStatus, DaemonSessionWorkflowTaskStatus, DaemonSessionWorkflowTasksStatus, DaemonSessionStatsStatus, DaemonSessionArtifactsEnvelope, DaemonSessionArtifactInput, DaemonSessionArtifactMutationResult, SessionSourceInput, SessionSourcesResult, SessionSourceUpsertResult, SessionSourceRemoveResult, DaemonSkillToggleMutation, DaemonShellCommandResult, DaemonTranscriptBlock, DaemonTranscriptStore, DaemonWorkspaceGitStatus, DaemonWorkspaceProvidersStatus, DaemonStandaloneCreationRecovery, DaemonStandaloneWorkingDirectory, HeartbeatResult, GoalControlRequest, GoalSnapshotV2, GoalStateResponse, PermissionResponse, PromptContentBlock, PromptResult, ReasoningSelection, SessionMetadataResult, SetModelResult } from '@qwen-code/sdk/daemon';
8
8
  export type DaemonConnectionStatus = 'idle' | 'connecting' | 'connected' | 'disconnected' | 'error';
9
9
  export interface DaemonSessionOwnerSnapshot {
10
10
  isCurrent(): boolean;
@@ -375,6 +375,10 @@ export interface DaemonSessionActions {
375
375
  submitPrompt(text: string, options?: SubmitPromptOptions): Promise<SubmitPromptResult>;
376
376
  cancel(): Promise<void>;
377
377
  setModel(modelId: string): Promise<SetModelResult>;
378
+ refreshModels(beforeRefresh?: (target: {
379
+ workspaceCwd: string;
380
+ sessionId?: string;
381
+ }) => void | Promise<void>): Promise<void>;
378
382
  setReasoningEffort(value: ReasoningSelection, opts?: {
379
383
  persist?: boolean;
380
384
  }): Promise<void>;
@@ -517,6 +521,7 @@ export interface DaemonSessionActions {
517
521
  removePendingPrompt(promptId: string, opts?: PendingPromptActionOptions): Promise<DaemonRemovePendingPromptResult>;
518
522
  sendShellCommand(command: string): Promise<DaemonShellCommandResult>;
519
523
  getTasks(opts?: GetTasksActionOptions): Promise<DaemonSessionTasksStatus>;
524
+ getTaskRuntime(taskId: string): Promise<DaemonSessionTaskRuntimeStatus>;
520
525
  getWorkflowTasks(opts?: GetTasksActionOptions): Promise<DaemonSessionWorkflowTasksStatus>;
521
526
  cancelTask(taskId: string, kind: DaemonSessionTaskWithWorkflowStatus['kind']): Promise<{
522
527
  cancelled: boolean;
@@ -66,6 +66,11 @@ export declare function createBuiltinProviderCache(): BuiltinProviderCache;
66
66
  export declare function getCached<K, V>(cache: Map<K, Promise<V>>, key: K, load: () => Promise<V>): Promise<V>;
67
67
  export interface AtMentionWorkspaceActions {
68
68
  globWorkspace?: GlobWorkspaceFn;
69
+ searchWorkspaceFiles?: (query: string, signal: AbortSignal) => Promise<string[]>;
70
+ prepareFileReference?: (tag: WebShellComposerTag) => Promise<WebShellComposerTag>;
71
+ onFileReferenceDiscarded?: () => void;
72
+ scopeKey?: string;
73
+ filesOnly?: boolean;
69
74
  loadExtensionsStatus?: LoadExtensionsStatusFn;
70
75
  listDirectory?: ListDirectoryFn;
71
76
  loadMcpStatus?: LoadMcpStatusFn;
@@ -101,6 +101,8 @@ export interface UseComposerCoreOptions {
101
101
  shellModeEnabled?: boolean;
102
102
  attachmentsEnabled?: boolean;
103
103
  workspaceFeaturesEnabled?: boolean;
104
+ fileReferenceActions?: AtMentionWorkspaceActions;
105
+ persistFileReferences?: boolean;
104
106
  composerTagIcons?: WebShellComposerTagIconMap;
105
107
  parseUserMessageContent?: UserMessageContentParser;
106
108
  renderComposerTag?: ComposerTagRenderer;
@@ -0,0 +1,33 @@
1
+ import type { Message } from '../adapters/types';
2
+ export interface MessageDeletionControls {
3
+ active: boolean;
4
+ busy: boolean;
5
+ disabled: boolean;
6
+ selected: ReadonlySet<string>;
7
+ allowed: ReadonlySet<string>;
8
+ groupByMessage: ReadonlyMap<string, string>;
9
+ error?: string;
10
+ confirming: boolean;
11
+ canDelete(message: Message): boolean;
12
+ start(message: Message): void;
13
+ toggle(groupId: string): void;
14
+ cancel(): void;
15
+ setConfirming(value: boolean): void;
16
+ submit(): void;
17
+ }
18
+ export declare function useMessageDeletion(messages: Message[], sessionBlocked: boolean, historical?: boolean): {
19
+ active: boolean;
20
+ busy: boolean;
21
+ disabled: boolean;
22
+ groupByMessage: Map<string, string>;
23
+ error: string | undefined;
24
+ confirming: boolean;
25
+ selected: Set<string>;
26
+ allowed: Set<string>;
27
+ canDelete: (message: import("../adapters/messageTypes").DaemonMessage) => boolean;
28
+ start: (message: import("../adapters/messageTypes").DaemonMessage) => void;
29
+ toggle: (id: string) => void;
30
+ cancel: () => void;
31
+ setConfirming: import("react").Dispatch<import("react").SetStateAction<boolean>>;
32
+ submit: () => void;
33
+ } | undefined;
@@ -0,0 +1,6 @@
1
+ import type { DaemonSessionActions } from '@qwen-code/web-shell/daemon-react-sdk';
2
+ export declare function useModelRefresh(beforeRefresh?: Parameters<DaemonSessionActions['refreshModels']>[0]): {
3
+ refresh: (() => Promise<void>) | undefined;
4
+ refreshing: boolean;
5
+ error: string | undefined;
6
+ };
@@ -16,8 +16,8 @@
16
16
  * renders `McpStatusMessage`, `TasksStatusMessage` and the artifact turn
17
17
  * outputs, and those call the strict `useDaemonActions` / `useDaemonWorkspace`
18
18
  * hooks, so their provider guards are in `dist/transcript.js`. Decoupling them
19
- * is #11100. `client/build-artifact.test.ts` therefore bounds this entry's size
20
- * rather than asserting a symbol is absent.
19
+ * is #11100. Artifact tests enforce specific package boundaries rather than
20
+ * asserting that the daemon runtime is absent.
21
21
  *
22
22
  * Do not rely on importing the package root or incidental tree shaking to
23
23
  * keep this payload small; see
@@ -30,6 +30,7 @@ export declare function isPreviewableFileComposerTag(tag: WebShellComposerTag):
30
30
  kind: 'file';
31
31
  value: string;
32
32
  };
33
+ export declare function isValidComposerTag(tag: unknown): tag is WebShellComposerTag;
33
34
  export interface ParseUserMessageContentOptions {
34
35
  requireSourcePreservation?: boolean;
35
36
  }
@@ -1,2 +1,3 @@
1
1
  export declare function isEditableTarget(target: EventTarget | null): boolean;
2
2
  export declare function getShadowAwareActiveElement(element: Element | null | undefined): Element | null;
3
+ export declare function isFocusUnclaimed(root: Node): boolean;
@@ -0,0 +1,20 @@
1
+ import type { DaemonTranscriptBlock, DaemonTranscriptStore } from '@qwen-code/sdk/daemon';
2
+ import type { Message } from '../adapters/types.js';
3
+ export interface MessageDeletionGroup {
4
+ id: string;
5
+ promptId?: string;
6
+ promptIds?: string[];
7
+ recordIds: string[];
8
+ }
9
+ export declare function messageDeletionGroups(messages: readonly Message[], groups: readonly MessageDeletionGroup[]): Map<string, string>;
10
+ export declare function localMessageDeletionGroups(messages: readonly Message[]): {
11
+ id: string;
12
+ recordIds: never[];
13
+ }[];
14
+ export declare function localDeletionBlocks(blocks: readonly DaemonTranscriptBlock[]): DaemonTranscriptBlock[];
15
+ export declare function removeDeletedMessageBlocks(store: DaemonTranscriptStore, deletedGroupIds: readonly string[], deletedPromptIds: readonly string[]): void;
16
+ export declare function restoreLocalDeletionBlocks(store: DaemonTranscriptStore, before: readonly DaemonTranscriptBlock[]): void;
17
+ export declare function beginLocalCommand(store: DaemonTranscriptStore, id: string): void;
18
+ export declare function finishLocalCommand(store: DaemonTranscriptStore, id?: string): void;
19
+ export declare function hasPendingLocalCommands(store: DaemonTranscriptStore): boolean;
20
+ export declare function clearPendingLocalCommands(store: DaemonTranscriptStore): void;
@@ -1,6 +1,6 @@
1
1
  import { DAEMON_APPROVAL_MODES } from '@qwen-code/web-shell/daemon-react-sdk';
2
2
  export type WebShellApprovalMode = Exclude<(typeof DAEMON_APPROVAL_MODES)[number], 'plan'>;
3
- export declare const EXECUTION_APPROVAL_MODES: ("auto" | "default" | "auto-edit" | "yolo")[];
3
+ export declare const EXECUTION_APPROVAL_MODES: ("default" | "auto-edit" | "yolo" | "auto")[];
4
4
  export declare function resolveApprovalModes(value: unknown): readonly WebShellApprovalMode[];
5
5
  export declare function nextApprovalMode(available: readonly WebShellApprovalMode[], current: string): WebShellApprovalMode | undefined;
6
6
  export declare function parsePlanCommand(args: string, enabled: boolean): {
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /** English count plus its noun, pluralised the regular way. */
7
+ export declare function plural(count: string | number | undefined, noun: string): string;