@qwen-code/web-shell 0.25.0 → 0.25.1-nightly.20261012.18f80f5666

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 (93) hide show
  1. package/README.md +6 -7
  2. package/dist/agents-route-DlEzBEU4.js +1546 -0
  3. package/dist/daemon-react-sdk.js +1 -1
  4. package/dist/{index-tVJkU24-.js → index-NuS7ToOq.js} +53556 -48611
  5. package/dist/index.js +22 -22
  6. package/dist/sw.js +1 -1
  7. package/dist/transcript.js +9991 -9580
  8. package/dist/types/adapters/messageTypes.d.ts +8 -1
  9. package/dist/types/adapters/transcriptAdapter.d.ts +2 -1
  10. package/dist/types/browser-turn-notifications.d.ts +2 -1
  11. package/dist/types/components/ChatContextHeader.d.ts +3 -1
  12. package/dist/types/components/ChatEditor.d.ts +4 -7
  13. package/dist/types/components/QueuedPromptDisplay.d.ts +4 -1
  14. package/dist/types/components/WorkspaceSelector.d.ts +9 -1
  15. package/dist/types/components/agents/AgentCreatePage.d.ts +7 -1
  16. package/dist/types/components/agents/AgentsManagerPage.d.ts +4 -5
  17. package/dist/types/components/artifacts/ArtifactPanel.d.ts +1 -8
  18. package/dist/types/components/artifacts/TrajectoryFilters.d.ts +15 -0
  19. package/dist/types/components/artifacts/TrajectoryInspector.d.ts +3 -1
  20. package/dist/types/components/artifacts/artifactUtils.d.ts +9 -0
  21. package/dist/types/components/managed/ManagedSessionCwdControl.d.ts +9 -0
  22. package/dist/types/components/managed/ManagedTaskPanel.d.ts +15 -0
  23. package/dist/types/components/managed/ManagedToolResultPanel.d.ts +6 -1
  24. package/dist/types/components/managed/generated/managed-agent-api.d.ts +273 -25
  25. package/dist/types/components/managed/java-managed-agent-client.d.ts +41 -1
  26. package/dist/types/components/managed/managed-agent-provider.d.ts +50 -1
  27. package/dist/types/components/managed/managed-request-error.d.ts +6 -0
  28. package/dist/types/components/managed/managed-task-messages.d.ts +9 -0
  29. package/dist/types/components/managed/managed-task-messages.transcript-stub.d.ts +7 -0
  30. package/dist/types/components/managed/managed-task.test-fixtures.d.ts +4 -0
  31. package/dist/types/components/managed/use-managed-actions.d.ts +6 -5
  32. package/dist/types/components/managed/use-managed-cwd-change.d.ts +21 -0
  33. package/dist/types/components/managed/use-managed-session.d.ts +15 -1
  34. package/dist/types/components/managed/use-managed-task-cancel.d.ts +12 -0
  35. package/dist/types/components/managed/use-managed-tasks.d.ts +49 -0
  36. package/dist/types/components/messages/AssistantMessage.d.ts +3 -1
  37. package/dist/types/components/messages/BrowserNotificationControl.d.ts +1 -0
  38. package/dist/types/components/messages/SelectionCopyMenu.d.ts +8 -0
  39. package/dist/types/components/messages/SelectionCopyMenu.transcript-stub.d.ts +2 -0
  40. package/dist/types/components/messages/ToolApproval.d.ts +2 -1
  41. package/dist/types/components/messages/UserMessage.d.ts +3 -1
  42. package/dist/types/components/messages/agent-message-details.d.ts +36 -0
  43. package/dist/types/components/messages/squad-tag.d.ts +16 -0
  44. package/dist/types/components/messages/toolFormatting.d.ts +3 -3
  45. package/dist/types/components/sidebar/WebShellSidebar.d.ts +8 -4
  46. package/dist/types/components/sidebar/WorkspaceSection.d.ts +9 -2
  47. package/dist/types/components/workspace-agents/ThreadsPage.d.ts +31 -55
  48. package/dist/types/components/workspace-agents/add-runtime-dialog.d.ts +34 -5
  49. package/dist/types/components/workspace-agents/agent-events.d.ts +4 -34
  50. package/dist/types/components/workspace-agents/agents-route.d.ts +19 -0
  51. package/dist/types/components/workspace-agents/agents-view-logic.d.ts +14 -163
  52. package/dist/types/components/workspace-agents/lazy-agents-route.d.ts +7 -0
  53. package/dist/types/components/workspace-agents/messages.d.ts +2 -2
  54. package/dist/types/components/workspace-agents/session-agent-live-runs.d.ts +96 -0
  55. package/dist/types/components/workspace-agents/session-agents-api.d.ts +39 -0
  56. package/dist/types/components/workspace-agents/squads-section.d.ts +28 -0
  57. package/dist/types/components/workspace-agents/threads-api.d.ts +25 -36
  58. package/dist/types/components/workspace-agents/use-session-agent-runs.d.ts +66 -0
  59. package/dist/types/components/workspace-agents/useAgentChatEntry.d.ts +74 -10
  60. package/dist/types/components/workspaces/HostLabel.d.ts +8 -0
  61. package/dist/types/components/workspaces/WorkspaceHostProjects.d.ts +18 -0
  62. package/dist/types/components/workspaces/WorkspaceLocation.d.ts +10 -0
  63. package/dist/types/config/daemon-target.d.ts +76 -0
  64. package/dist/types/config/daemon.d.ts +16 -0
  65. package/dist/types/config/host-fanout.d.ts +53 -0
  66. package/dist/types/config/remote-connections.d.ts +3 -0
  67. package/dist/types/config/workspace-hosts.d.ts +18 -0
  68. package/dist/types/constants/toolNames.d.ts +1 -0
  69. package/dist/types/daemon/session/turn-notification-context.d.ts +2 -1
  70. package/dist/types/daemon/session/types.d.ts +28 -4
  71. package/dist/types/hooks/useQueuedPrompts.d.ts +2 -0
  72. package/dist/types/trajectory/filter-messages.d.ts +9 -0
  73. package/dist/types/trajectory/filter-messages.transcript-stub.d.ts +7 -0
  74. package/dist/types/trajectory/filterTrajectory.d.ts +22 -0
  75. package/dist/types/trajectory/types.d.ts +1 -0
  76. package/dist/types/trajectory/useTrajectoryWindow.d.ts +21 -36
  77. package/dist/types/trajectory/window-messages.d.ts +9 -0
  78. package/dist/types/trajectory/window-messages.transcript-stub.d.ts +7 -0
  79. package/dist/types/utils/askUserPermission.d.ts +1 -1
  80. package/dist/types/utils/cancelledTurn.d.ts +17 -0
  81. package/dist/types/utils/selectionClipboard.d.ts +5 -0
  82. package/dist/types/utils/workspace.d.ts +10 -0
  83. package/dist/types/voice/messages.d.ts +9 -0
  84. package/dist/types/voice/messages.transcript-stub.d.ts +7 -0
  85. package/dist/types/voice/voice-error.d.ts +7 -0
  86. package/dist/{toolNames-CAeFJ9L9.js → useDaemonMidTurnInjected-snTFfPQ9.js} +4953 -4614
  87. package/package.json +4 -1
  88. package/dist/ThreadsRoute-CtecWS_K.js +0 -2358
  89. package/dist/types/components/workspace-agents/LazyThreadsRoute.d.ts +0 -7
  90. package/dist/types/components/workspace-agents/ThreadChat.d.ts +0 -35
  91. package/dist/types/components/workspace-agents/ThreadView.d.ts +0 -72
  92. package/dist/types/components/workspace-agents/ThreadsRoute.d.ts +0 -23
  93. package/dist/types/components/workspace-agents/useProjectConversations.d.ts +0 -10
@@ -57,7 +57,47 @@ export declare class JavaManagedAgentClient {
57
57
  submitTurn(request: Schemas['WebShellSubmitRequest'], signal?: AbortSignal): Promise<JavaAgentCommandAdmission>;
58
58
  cancelTurn(request: Schemas['WebShellCancelRequest'], signal?: AbortSignal): Promise<JavaAgentCommandAdmission>;
59
59
  queryActions(request: Schemas['WebShellActionQueryRequest'], signal?: AbortSignal): Promise<JavaAgentActionPage>;
60
+ listTasks(request: Schemas['WebShellTaskQueryRequest'], signal?: AbortSignal): Promise<{
61
+ data: components["schemas"]["WebShellTask"][];
62
+ hasMore: boolean;
63
+ nextCursor?: string | null;
64
+ }>;
65
+ getTask(request: Schemas['WebShellTaskGetRequest'], signal?: AbortSignal): Promise<{
66
+ taskId: string;
67
+ sessionId: string;
68
+ kind: components["schemas"]["TaskKind"];
69
+ state: components["schemas"]["TaskState"];
70
+ definitionRevision?: number;
71
+ runtimeState?: components["schemas"]["TaskRuntimeState"];
72
+ createdAt: number;
73
+ startedAt?: number;
74
+ settledAt?: number;
75
+ outputCursor?: string;
76
+ artifactRefs: string[];
77
+ actionCapabilities: components["schemas"]["TaskActionCapability"][];
78
+ }>;
79
+ listTaskEvents(request: Schemas['WebShellTaskEventQueryRequest'], signal?: AbortSignal): Promise<{
80
+ data: components["schemas"]["WebShellTaskEvent"][];
81
+ hasMore: boolean;
82
+ nextCursor: string;
83
+ }>;
84
+ cancelTask(request: Schemas['WebShellTaskCancelRequest'], signal?: AbortSignal): Promise<{
85
+ operationId: string;
86
+ sessionId: string;
87
+ type: "create_session" | "submit_input" | "cancel" | "action_response" | "close" | "archive" | "delete" | "task_cancel";
88
+ taskId?: string;
89
+ status: "pending" | "running" | "completed" | "failed" | "cancelled" | "recovery_blocked";
90
+ admissionStage: "java_durable" | "harness_confirmed";
91
+ deliveryState: "pending" | "leased" | "confirmed" | "blocked";
92
+ receiptId?: string;
93
+ actionResolution?: components["schemas"]["WebShellActionResolution"];
94
+ failureCode?: string;
95
+ replayed: boolean;
96
+ }>;
60
97
  respondAction(request: Schemas['WebShellActionRespondRequest'], signal?: AbortSignal): Promise<Schemas['WebShellCommandOperation']>;
98
+ /** Reads an operation's latest durable status; polling is not a replay. */
99
+ queryOperation(request: Schemas['WebShellOperationRequest'], signal?: AbortSignal): Promise<Schemas['WebShellOperation']>;
100
+ changeCwd(request: Schemas['WebShellChangeCwdRequest'], signal?: AbortSignal): Promise<Schemas['WebShellCwdOperation']>;
61
101
  getToolResult(sessionId: string, itemId: string, signal?: AbortSignal): Promise<{
62
102
  result: components["schemas"]["PublicToolResult"];
63
103
  access: components["schemas"]["ArtifactAccess"];
@@ -78,7 +118,7 @@ export declare class JavaManagedAgentClient {
78
118
  readArtifactRange(artifact: ManagedArtifact, offset: number, length: number, signal?: AbortSignal): Promise<Uint8Array>;
79
119
  openArtifactStream(artifact: ManagedArtifact, signal?: AbortSignal): Promise<ReadableStream<Uint8Array>>;
80
120
  private artifactContent;
81
- streamEvents(request: Schemas['WebShellStreamRequest'], signal?: AbortSignal): AsyncGenerator<JavaAgentEvent | JavaAgentResyncRequired>;
121
+ streamEvents(request: Schemas['WebShellStreamRequest'], signal?: AbortSignal, onOpen?: () => void, onAlive?: () => void): AsyncGenerator<JavaAgentEvent | JavaAgentResyncRequired>;
82
122
  private post;
83
123
  private request;
84
124
  }
@@ -1,3 +1,4 @@
1
+ import type { components } from './generated/managed-agent-api';
1
2
  import type { ManagedToolResultReader } from './managed-tool-result-types';
2
3
  export type ManagedAgentSessionPhase = 'created' | 'admitted' | 'runtime_starting' | 'agent_running' | 'waiting_runtime' | 'tool_running' | 'cancelling' | 'completed' | 'failed' | 'cancelled';
3
4
  export type ManagedAgentRuntimeState = 'unknown' | 'starting' | 'ready' | 'failed';
@@ -9,6 +10,8 @@ export interface ManagedAgentSessionSummary {
9
10
  workspace?: {
10
11
  workspaceId: string;
11
12
  cwdRelative: string;
13
+ contextRevision?: number;
14
+ state?: 'ready' | 'changing' | 'recovery_blocked';
12
15
  };
13
16
  createdAt: number;
14
17
  admittedAt: number;
@@ -20,16 +23,18 @@ export interface ManagedAgentSessionSummary {
20
23
  canSend: boolean;
21
24
  canCancel: boolean;
22
25
  actions?: boolean;
26
+ tasks?: boolean;
23
27
  artifacts?: boolean;
24
28
  /** The caller may submit later Turns to this Workspace-bound Session. */
25
29
  workspaceTurns?: boolean;
30
+ cwdChange?: boolean;
26
31
  };
27
32
  failure?: {
28
33
  code: string;
29
34
  message: string;
30
35
  };
31
36
  }
32
- export type ManagedAgentSessionEventType = 'accepted' | 'runtime_starting' | 'runtime_ready' | 'runtime_failed' | 'runtime_released' | 'agent_started' | 'assistant_thought' | 'assistant_delta' | 'tool_requested' | 'tool_started' | 'tool_completed' | 'tool_result_updated' | 'completed' | 'failed' | 'cancelling' | 'cancelled' | 'action_updated' | 'stream_gap';
37
+ export type ManagedAgentSessionEventType = 'accepted' | 'runtime_starting' | 'runtime_ready' | 'runtime_failed' | 'runtime_released' | 'agent_started' | 'assistant_thought' | 'assistant_delta' | 'tool_requested' | 'tool_started' | 'tool_completed' | 'tool_result_updated' | 'completed' | 'failed' | 'cancelling' | 'cancelled' | 'action_updated' | 'context_changed' | 'stream_gap';
33
38
  export interface ManagedAgentSessionEvent {
34
39
  id: number;
35
40
  at: number;
@@ -60,6 +65,14 @@ export interface ManagedAgentRequestOptions {
60
65
  export interface ManagedAgentCommandOptions extends ManagedAgentRequestOptions {
61
66
  idempotencyKey: string;
62
67
  }
68
+ export type ManagedCwdOperation = components['schemas']['WebShellCwdOperation'];
69
+ export type ManagedTask = components['schemas']['WebShellTask'];
70
+ export type ManagedTaskPage = components['schemas']['WebShellTaskPage'];
71
+ export type ManagedTaskEvent = components['schemas']['WebShellTaskEvent'];
72
+ export type ManagedTaskEventPage = components['schemas']['WebShellTaskEventPage'];
73
+ export type ManagedTaskCancelOperation = components['schemas']['WebShellCommandOperation'] & {
74
+ type: 'task_cancel';
75
+ };
63
76
  /** A Hosted tool approval waiting for the Session owner's answer. */
64
77
  export interface ManagedAgentPendingAction {
65
78
  actionId: string;
@@ -75,6 +88,7 @@ export interface ManagedAgentPendingAction {
75
88
  id: string;
76
89
  label: string;
77
90
  }>;
91
+ inputPreview?: components['schemas']['WebShellActionInputPreview'];
78
92
  }
79
93
  export interface ManagedAgentProvider {
80
94
  readonly kind: 'daemon' | 'java';
@@ -87,6 +101,28 @@ export interface ManagedAgentProvider {
87
101
  respond(action: ManagedAgentPendingAction, optionId: string, options: ManagedAgentCommandOptions): Promise<void>;
88
102
  };
89
103
  readonly toolResults?: ManagedToolResultReader;
104
+ readonly tasks?: {
105
+ list(sessionId: string, options: ManagedAgentRequestOptions & {
106
+ cursor?: string;
107
+ limit?: number;
108
+ }): Promise<ManagedTaskPage>;
109
+ get(sessionId: string, taskId: string, options: ManagedAgentRequestOptions): Promise<ManagedTask>;
110
+ listEvents(sessionId: string, taskId: string, options: ManagedAgentRequestOptions & {
111
+ after?: string;
112
+ limit?: number;
113
+ }): Promise<ManagedTaskEventPage>;
114
+ readonly cancel?: {
115
+ submit(sessionId: string, taskId: string, options: ManagedAgentCommandOptions): Promise<ManagedTaskCancelOperation>;
116
+ query(sessionId: string, taskId: string, operationId: string, options: ManagedAgentRequestOptions): Promise<ManagedTaskCancelOperation>;
117
+ };
118
+ };
119
+ readonly cwdChange?: {
120
+ submit(sessionId: string, request: {
121
+ cwdRelative: string;
122
+ expectedContextRevision: number;
123
+ }, options: ManagedAgentCommandOptions): Promise<ManagedCwdOperation>;
124
+ query(sessionId: string, operationId: string, options: ManagedAgentRequestOptions): Promise<ManagedCwdOperation>;
125
+ };
90
126
  readonly workspaceBinding?: {
91
127
  readonly agentId: string;
92
128
  list(options: ManagedAgentRequestOptions & {
@@ -130,6 +166,19 @@ export interface ManagedAgentProvider {
130
166
  cancel(sessionId: string, turnId: string, options: ManagedAgentCommandOptions): Promise<void>;
131
167
  subscribeEvents(sessionId: string, options: ManagedAgentRequestOptions & {
132
168
  lastEventId?: number;
169
+ /**
170
+ * Called once the stream connection has been (re-)established. An
171
+ * established stream can stay silent indefinitely — heartbeats are
172
+ * not events — so this is the only liveness signal that does not
173
+ * depend on stream activity.
174
+ */
175
+ onEstablished?(): void;
176
+ /**
177
+ * Called for each complete heartbeat or comment frame the stream
178
+ * delivers. Heartbeats never decode into events, so on an idle
179
+ * Session this is the only sign of life an established stream gives.
180
+ */
181
+ onAlive?(): void;
133
182
  }): AsyncIterable<ManagedAgentSessionEvent>;
134
183
  }
135
184
  export interface ManagedAgentWorkspace {
@@ -12,3 +12,9 @@
12
12
  * are worth another attempt.
13
13
  */
14
14
  export declare function isNonRetryableClientError(error: unknown): boolean;
15
+ /**
16
+ * A 401/403. This client re-derives its credentials on every request, so an
17
+ * expired short-lived token gets a fresh answer on the very next attempt
18
+ * once the host refreshes — never a terminal condition.
19
+ */
20
+ export declare function isAuthFailure(error: unknown): boolean;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ type ManagedTaskMessage = string | ((vars?: Record<string, string | number>) => string);
7
+ export declare const MANAGED_TASK_MESSAGES_EN: Record<string, ManagedTaskMessage>;
8
+ export declare const MANAGED_TASK_MESSAGES_ZH: Record<string, ManagedTaskMessage>;
9
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare const MANAGED_TASK_MESSAGES_EN: {};
7
+ export declare const MANAGED_TASK_MESSAGES_ZH: {};
@@ -0,0 +1,4 @@
1
+ import type { ManagedTask, ManagedTaskCancelOperation, ManagedTaskEvent } from './managed-agent-provider';
2
+ export declare const task: ManagedTask;
3
+ export declare const taskOperation: ManagedTaskCancelOperation;
4
+ export declare function taskEvent(cursor: string, type?: string): ManagedTaskEvent;
@@ -12,11 +12,12 @@ export interface ManagedActionsState {
12
12
  /** Sending an answer failed; the approval is shown again. */
13
13
  answerError?: unknown;
14
14
  /**
15
- * The service refused an answer as creator-only. That is a fact about the
16
- * viewer and the Session, not about one Action, so it outlives the refused
17
- * Action, covers every later approval the same Session raises, and survives
18
- * leaving that Session and coming back. It is remembered per mount: a reload
19
- * or reopening the panel starts clean.
15
+ * The service refused an answer under the owner-or-Workspace-operator
16
+ * rule. That refusal is a fact about the viewer's Workspace role row,
17
+ * which an operator can raise while the page stays open, so the latch
18
+ * covers every later approval the same Session raises and survives
19
+ * leaving that Session and coming back — but `retry()` drops it and
20
+ * re-probes instead of treating one 403 as permanent for the mount.
20
21
  */
21
22
  respondForbidden: boolean;
22
23
  respond(actionId: string, optionId: string): Promise<void>;
@@ -0,0 +1,21 @@
1
+ import type { ManagedAgentProvider, ManagedAgentSessionSummary } from './managed-agent-provider';
2
+ interface CwdIntent {
3
+ sessionId: string;
4
+ workspaceId: string;
5
+ cwdRelative: string;
6
+ expectedContextRevision: number;
7
+ idempotencyKey: string;
8
+ operationId?: string;
9
+ }
10
+ export declare function useManagedCwdChange(provider: ManagedAgentProvider, clientId: string, sessionId: string | undefined, summary: ManagedAgentSessionSummary | undefined, refreshSummary: (signal?: AbortSignal) => Promise<ManagedAgentSessionSummary | undefined>): {
11
+ blocked: boolean;
12
+ submit: (cwdRelative: string, expectedContextRevision: number) => Promise<true | undefined>;
13
+ confirm: () => Promise<void>;
14
+ isBlocked: () => boolean;
15
+ key: string;
16
+ pending?: CwdIntent;
17
+ busy: boolean;
18
+ errorCode?: string;
19
+ target?: string;
20
+ };
21
+ export {};
@@ -1,12 +1,26 @@
1
1
  import type { ManagedAgentProvider, ManagedAgentSessionEvent, ManagedAgentSessionSummary } from './managed-agent-provider';
2
+ type SignalLeg = 'session' | 'transcript' | 'stream';
3
+ interface SignalEntry {
4
+ readonly message: string;
5
+ readonly final: boolean;
6
+ readonly seq: number;
7
+ readonly leg: SignalLeg;
8
+ readonly stall?: boolean;
9
+ }
10
+ export declare function failureRetryDelayMs(failures: number): number;
2
11
  export declare function useManagedSession(provider: ManagedAgentProvider, clientId: string, sessionId: string | undefined): {
12
+ stoppedReason: string | undefined;
13
+ stoppedLeg: SignalLeg | undefined;
14
+ error: string | undefined;
3
15
  loadingOlder: boolean;
4
16
  loadOlder: () => Promise<void>;
5
17
  reload: () => void;
18
+ refreshSummary: (signal?: AbortSignal) => Promise<ManagedAgentSessionSummary | undefined>;
6
19
  sessionId?: string;
7
20
  summary?: ManagedAgentSessionSummary;
8
21
  events: ManagedAgentSessionEvent[];
9
22
  olderCursor?: string;
10
23
  loading: boolean;
11
- error?: string;
24
+ signals?: Partial<Record<SignalLeg, SignalEntry>>;
12
25
  };
26
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { ManagedAgentProvider, ManagedTask } from './managed-agent-provider';
2
+ export interface ManagedTaskCancelState {
3
+ status: 'submitting' | 'stopping' | 'unconfirmed' | 'failed';
4
+ busy: boolean;
5
+ code?: string;
6
+ }
7
+ export declare function useManagedTaskCancel(provider: ManagedAgentProvider, clientId: string, sessionId: string | undefined, snapshots: readonly ManagedTask[], refreshTasks: () => void, applySnapshot: (task: ManagedTask) => void): {
8
+ states: Record<string, ManagedTaskCancelState>;
9
+ pendingTaskIds: string[];
10
+ submit(task: ManagedTask): Promise<void>;
11
+ resume(taskId: string): Promise<void>;
12
+ };
@@ -0,0 +1,49 @@
1
+ import type { ManagedAgentProvider, ManagedTask } from './managed-agent-provider';
2
+ export declare function isManagedTaskTerminal(task: ManagedTask): boolean;
3
+ export declare function useManagedTasks(provider: ManagedAgentProvider, clientId: string, sessionId: string | undefined, open: boolean): {
4
+ page: {
5
+ data: import("./generated/managed-agent-api").components["schemas"]["WebShellTask"][];
6
+ hasMore: boolean;
7
+ nextCursor?: string | null;
8
+ };
9
+ task: {
10
+ taskId: string;
11
+ sessionId: string;
12
+ kind: import("./generated/managed-agent-api").components["schemas"]["TaskKind"];
13
+ state: import("./generated/managed-agent-api").components["schemas"]["TaskState"];
14
+ definitionRevision?: number;
15
+ runtimeState?: import("./generated/managed-agent-api").components["schemas"]["TaskRuntimeState"];
16
+ createdAt: number;
17
+ startedAt?: number;
18
+ settledAt?: number;
19
+ outputCursor?: string;
20
+ artifactRefs: string[];
21
+ actionCapabilities: import("./generated/managed-agent-api").components["schemas"]["TaskActionCapability"][];
22
+ } | undefined;
23
+ selectedId: string | undefined;
24
+ events: {
25
+ schemaVersion: number;
26
+ projectionVersion: number;
27
+ taskId: string;
28
+ sessionId: string;
29
+ type: import("./generated/managed-agent-api").components["schemas"]["TaskEventType"];
30
+ cursor: string;
31
+ createdAt: number;
32
+ state?: import("./generated/managed-agent-api").components["schemas"]["TaskState"];
33
+ runtimeState?: import("./generated/managed-agent-api").components["schemas"]["TaskRuntimeState"];
34
+ text?: string;
35
+ truncated?: boolean;
36
+ artifactId?: string;
37
+ }[];
38
+ moreEvents: boolean;
39
+ historyGap: boolean;
40
+ loading: boolean;
41
+ error: unknown;
42
+ hasPrevious: boolean;
43
+ refresh: () => void;
44
+ apply: (task: ManagedTask) => void;
45
+ select: (taskId?: string) => void;
46
+ next: () => void;
47
+ previous: () => void;
48
+ loadMoreEvents: () => void;
49
+ };
@@ -1,9 +1,11 @@
1
1
  import { type WebShellAssistantFeedbackRating, type WebShellAssistantTurnFooterRenderInfo, type WebShellSource } from '../../customization';
2
- import type { DaemonSessionGenerationEvent } from '@qwen-code/sdk/daemon';
2
+ import type { DaemonSessionGenerationEvent, QwenAgentMessageMeta } from '@qwen-code/sdk/daemon';
3
3
  import type { DaemonMessageAuthor } from '../../adapters/messageTypes';
4
4
  interface AssistantMessageProps {
5
5
  content: string;
6
6
  author?: DaemonMessageAuthor;
7
+ /** A workspace agent's reply: its run status, error, steps and tokens. */
8
+ agentMessage?: QwenAgentMessageMeta;
7
9
  isStreaming?: boolean;
8
10
  timestamp?: number;
9
11
  onBranchSession?: () => void | Promise<void>;
@@ -0,0 +1 @@
1
+ export declare function BrowserNotificationControl(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,8 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface SelectionCopyMenuProps {
3
+ children: ReactNode;
4
+ className: string;
5
+ content: string;
6
+ enabled: boolean;
7
+ }
8
+ export declare function SelectionCopyMenu({ children, className, content, enabled, }: SelectionCopyMenuProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import type { SelectionCopyMenuProps } from './SelectionCopyMenu';
2
+ export declare function SelectionCopyMenu({ children, className, }: SelectionCopyMenuProps): import("react/jsx-runtime").JSX.Element;
@@ -5,6 +5,7 @@ interface ToolApprovalProps {
5
5
  onConfirm: (id: string, selectedOption: string) => void | Promise<void>;
6
6
  variant?: 'inline' | 'floating';
7
7
  disabled?: boolean;
8
+ showBrowserNotifications?: boolean;
8
9
  /**
9
10
  * Whether this approval should pull keyboard focus to its safe-default option
10
11
  * when it becomes the topmost (visible) one — on appearance, or when a panel/
@@ -32,5 +33,5 @@ export declare function parseTitle(title?: string): {
32
33
  toolName: string;
33
34
  description: string;
34
35
  };
35
- export declare function ToolApproval({ request, onConfirm, variant, disabled, keyboardActive, extraDescriptionId, planTodos, planExecutionMode, generateContent, }: ToolApprovalProps): import("react/jsx-runtime").JSX.Element;
36
+ export declare function ToolApproval({ request, onConfirm, variant, disabled, showBrowserNotifications, keyboardActive, extraDescriptionId, planTodos, planExecutionMode, generateContent, }: ToolApprovalProps): import("react/jsx-runtime").JSX.Element;
36
37
  export {};
@@ -1,6 +1,6 @@
1
1
  import type { DaemonInputAnnotation } from '@qwen-code/sdk/daemon';
2
2
  import type { ComposerTagClickHandler, ComposerTagRenderer, WebShellComposerTag, WebShellComposerTagIconMap } from '../../customization';
3
- import type { AttachmentPreviewRequest } from '../../adapters/messageTypes';
3
+ import type { AttachmentPreviewRequest, DaemonMessageAuthor } from '../../adapters/messageTypes';
4
4
  import type { ImageTabSource } from '../artifacts/ArtifactPanel';
5
5
  interface UserMessageImage {
6
6
  data: string;
@@ -32,6 +32,8 @@ interface UserMessageProps {
32
32
  /** Click an uploaded image to preview it in the right panel. */
33
33
  onImagePreview?: (src: string, alt?: string, source?: ImageTabSource) => void;
34
34
  onAttachmentPreview?: (file: AttachmentPreviewRequest) => void;
35
+ /** Set when a workspace agent, not the user, posted this message. */
36
+ author?: DaemonMessageAuthor;
35
37
  }
36
38
  export declare const UserMessage: import("react").NamedExoticComponent<UserMessageProps>;
37
39
  export declare function ReadonlyComposerTag({ tag, composerTagIcons, renderComposerTag, renderComposerTagTooltip, onComposerTagClick, title, preserveCustomKindLabel, }: {
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { QwenAgentMessageMeta, SessionAgentStep } from '@qwen-code/sdk/daemon';
7
+ /** True when an agent's text shows nothing: render it as no text at all. */
8
+ export declare function isBlankAgentText(text: string): boolean;
9
+ /**
10
+ * One line per tool call an agent made, like a CI job's step list. Shared by
11
+ * the live run card and the finished reply, so a run reads the same before
12
+ * and after its record lands.
13
+ *
14
+ * Renders in exported transcripts: only `agentMessage.*` strings (i18n.tsx),
15
+ * never the collaboration dictionary.
16
+ */
17
+ export declare function AgentStepList({ steps, label, settled, }: {
18
+ steps: readonly SessionAgentStep[];
19
+ label?: string;
20
+ /**
21
+ * The run has ended (completed, failed, stopped, offline). A step still
22
+ * marked running then never finished; show it as stopped, not spinning.
23
+ */
24
+ settled?: boolean;
25
+ }): import("react/jsx-runtime").JSX.Element | null;
26
+ /** "1,234 tokens", or nothing when the run reported no usage. */
27
+ export declare function AgentTokenUsage({ totalTokens }: {
28
+ totalTokens?: number;
29
+ }): import("react/jsx-runtime").JSX.Element | null;
30
+ /**
31
+ * Status, error, steps and token usage of a finished agent reply. A completed
32
+ * run shows no status word: its text is the result.
33
+ */
34
+ export declare function AgentMessageDetails({ meta }: {
35
+ meta: QwenAgentMessageMeta;
36
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * "This belongs to squad X": a small muted pill, the squad's counterpart to
8
+ * AuthorAvatar. Used on a leader's and a member's author line, the leader's
9
+ * no-action line and the live engagement bar, so a reader learns it once.
10
+ *
11
+ * Renders in exported transcripts: no collaboration strings here.
12
+ */
13
+ export declare function SquadTag({ name, className, }: {
14
+ name: string;
15
+ className?: string;
16
+ }): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,6 @@
1
- import type { ACPToolCall } from '../../adapters/types';
2
- export { isActiveToolStatus } from '../../adapters/toolClassification';
1
+ import type { ACPToolCall } from '../../adapters/types.js';
2
+ export { isAskUserQuestionToolName } from '../../constants/toolNames.js';
3
+ export { isActiveToolStatus } from '../../adapters/toolClassification.js';
3
4
  /**
4
5
  * Internal-tool-name → display-name lookup. This is a standalone copy of
5
6
  * core's `ToolDisplayNames` (mapped to wire names, as the CLI's shared
@@ -19,7 +20,6 @@ export declare function formatToolDisplayName(toolName: string): string;
19
20
  * English {@link formatToolDisplayName}. Pass the `t` from `useI18n()`.
20
21
  */
21
22
  export declare function localizeToolDisplayName(toolName: string, t: (key: string, vars?: Record<string, string | number>) => string): string;
22
- export declare function isAskUserQuestionToolName(toolName: string): boolean;
23
23
  export declare function isAdvisorToolName(toolName: string): boolean;
24
24
  export declare function isCompletedAskUserQuestion(tool: ACPToolCall): boolean;
25
25
  export declare function getQuestionAnswerResult(tool: ACPToolCall): {
@@ -58,8 +58,6 @@ export interface WebShellSidebarWorkspaceOverviewOptions {
58
58
  }
59
59
  export type { WorkspaceManagementTarget, WorkspaceOverviewItem };
60
60
  interface WebShellSidebarProps {
61
- selectedCollaborationId?: string;
62
- onOpenCollaboration?: (id: string, cwd: string) => void;
63
61
  collapsed: boolean;
64
62
  layout?: 'single' | 'rail';
65
63
  activePage?: string;
@@ -67,7 +65,7 @@ interface WebShellSidebarProps {
67
65
  onOpenHome?: () => void;
68
66
  onCollapsedChange: (collapsed: boolean) => void;
69
67
  onOpenSettings: () => void;
70
- onOpenAgents?: (view?: 'agents' | 'tasks' | 'runtime') => void;
68
+ onOpenAgents?: (view?: 'agents' | 'squads' | 'runtime') => void;
71
69
  onOpenPlugins: () => void;
72
70
  onOpenChannels: () => void;
73
71
  onOpenLive?: () => void;
@@ -91,6 +89,12 @@ interface WebShellSidebarProps {
91
89
  onNewSession: (workspaceCwd?: string) => Promise<boolean> | boolean;
92
90
  onNewStandaloneSession?: () => Promise<boolean> | boolean;
93
91
  onLoadSession: (sessionId: string, workspaceCwd?: string) => Promise<void> | void;
92
+ /**
93
+ * Opens a session listed by a fan-out host group (#13727): the caller
94
+ * focuses that host in-app and loads the session there. When absent, the
95
+ * groups fall back to full navigation via `openHostedWorkspace`.
96
+ */
97
+ onOpenHostSession?: (origin: string, sessionId: string, workspaceCwd?: string) => void;
94
98
  onSelectCurrentSession?: () => void;
95
99
  onSessionRenameConfirmed?: (workspaceCwd: string | undefined, sessionId: string, displayName: string) => void;
96
100
  /**
@@ -158,4 +162,4 @@ interface WebShellSidebarProps {
158
162
  onLoadStandaloneSession?: (sessionId: string) => Promise<void> | void;
159
163
  onStandaloneNotice?: (message: string) => void;
160
164
  }
161
- export declare function WebShellSidebar({ selectedCollaborationId, onOpenCollaboration, collapsed, layout, activePage, containerWidth, onOpenHome, onCollapsedChange, onOpenSettings, onOpenAgents, onOpenPlugins, onOpenChannels, onOpenLive, onLiveVoiceSlotChange, onOpenManagedSessions, onOpenDaemonStatus, onOpenScheduledTasks, onOpenWorkflows, onOpenGoals, onOpenSessions, canOpenSessionsOverview, onOpenWorkspacesOverview, onOpenSplitView, canOpenSplitView, onNewSession, onNewStandaloneSession, onLoadSession, onSelectCurrentSession, onSessionRenameConfirmed, onSessionsDeleted, onError, theme, onThemeChange, mobileOpen, onMobileClose, selectedWorkspaceCwd, onSelectWorkspace, onOpenGitDiff, onOpenCommit, onOpenAddWorkspace, workspaces: providedWorkspaces, lockedWorkspaceCwd, lockedWorkspace: lockedWorkspaceOptions, branding, primaryNav: primaryNavOptions, showSessionSourceSwitch, showLive, hideProjectHeader, sessionActions: sessionActionsOptions, footer, workspaceOverview, onOpenWorkspaceManagement, onNewWorktreeSession, projectFeaturesEnabled, onLoadStandaloneSession, onStandaloneNotice, }: WebShellSidebarProps): import("react/jsx-runtime").JSX.Element;
165
+ export declare function WebShellSidebar({ collapsed, layout, activePage, containerWidth, onOpenHome, onCollapsedChange, onOpenSettings, onOpenAgents, onOpenPlugins, onOpenChannels, onOpenLive, onLiveVoiceSlotChange, onOpenManagedSessions, onOpenDaemonStatus, onOpenScheduledTasks, 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, showSessionSourceSwitch, showLive, hideProjectHeader, sessionActions: sessionActionsOptions, footer, workspaceOverview, onOpenWorkspaceManagement, onNewWorktreeSession, projectFeaturesEnabled, onLoadStandaloneSession, onStandaloneNotice, }: WebShellSidebarProps): import("react/jsx-runtime").JSX.Element;
@@ -9,8 +9,15 @@ export interface WorkspaceHeaderActionsContext {
9
9
  gitBranch: string | null | undefined;
10
10
  }
11
11
  interface WorkspaceSectionProps {
12
- additionalSessions?: readonly DaemonSessionSummary[];
13
12
  workspace: DaemonWorkspaceCapability;
13
+ /**
14
+ * localStorage seed for the expansion/collapsed-group preferences,
15
+ * defaulting to the workspace id. Multi-host renderers pass an
16
+ * origin-prefixed id so two daemons hosting the same workspace id
17
+ * never share a preference; single-host callers leave it unset and
18
+ * keep the keys they always had.
19
+ */
20
+ storageKey?: string;
14
21
  remote?: boolean;
15
22
  renderHeader?: (expanded: boolean) => ReactNode;
16
23
  hideHeader?: boolean;
@@ -118,5 +125,5 @@ interface WorkspaceSectionProps {
118
125
  /** Commit entry for the same picker; the row still opens without it. */
119
126
  onOpenCommit?: (workspaceCwd: string) => void;
120
127
  }
121
- export declare function WorkspaceSection({ additionalSessions, workspace, remote, renderHeader, hideHeader, client, reloadToken, untrustedLabel, readOnlyLabel, trustToOpenLabel, noSessionsLabel, loadErrorLabel, organizationEnabled, sessionCatalogRequestsEnabled, sessionGroupCatalog, sessionLiveStateEnabled, sourceType, channelGroupingEnabled, ungroupedLabel, searchQuery, expanded: controlledExpanded, autoExpandKey, forceAutoExpand, onExpandedChange, renderSessions, renderSession, pendingSession, mapSession, showSessionDetails, headerActions, overviewEnabled, overviewMenuOpen, overviewItems, gitBranchWanted, sessionStats, onRenameGroup, onDeleteGroup, renameGroupLabel, deleteGroupLabel, groupActionsDisabled, excludePinned, limitSessions, isPinnedSectionMember, onOpenPathLocally, onOpenTerminalLocally, onOpenGitDiff, onOpenCommit, }: WorkspaceSectionProps): import("react/jsx-runtime").JSX.Element;
128
+ export declare function WorkspaceSection({ workspace, storageKey, remote, renderHeader, hideHeader, client, reloadToken, untrustedLabel, readOnlyLabel, trustToOpenLabel, noSessionsLabel, loadErrorLabel, organizationEnabled, sessionCatalogRequestsEnabled, sessionGroupCatalog, sessionLiveStateEnabled, sourceType, channelGroupingEnabled, ungroupedLabel, searchQuery, expanded: controlledExpanded, autoExpandKey, forceAutoExpand, onExpandedChange, renderSessions, renderSession, pendingSession, mapSession, showSessionDetails, headerActions, overviewEnabled, overviewMenuOpen, overviewItems, gitBranchWanted, sessionStats, onRenameGroup, onDeleteGroup, renameGroupLabel, deleteGroupLabel, groupActionsDisabled, excludePinned, limitSessions, isPinnedSectionMember, onOpenPathLocally, onOpenTerminalLocally, onOpenGitDiff, onOpenCommit, }: WorkspaceSectionProps): import("react/jsx-runtime").JSX.Element;
122
129
  export {};