@qwen-code/web-shell 0.24.6 → 0.24.7-nightly.20260929.b906f937ec

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 (57) hide show
  1. package/README.md +10 -0
  2. package/dist/ThreadsRoute-DIWrKAvJ.js +1726 -0
  3. package/dist/daemon-react-sdk.js +1 -1
  4. package/dist/index-BQmwkK6l.js +121229 -0
  5. package/dist/index.js +69 -118171
  6. package/dist/sw.js +1 -1
  7. package/dist/{toolNames-C6S4xtsA.js → toolNames-C6G4mcM3.js} +5485 -4631
  8. package/dist/transcript.js +9384 -9198
  9. package/dist/types/adapters/messageTypes.d.ts +11 -0
  10. package/dist/types/components/BranchPickerPopover.d.ts +2 -1
  11. package/dist/types/components/ChatEditor.d.ts +1 -0
  12. package/dist/types/components/DesktopRelayControl.d.ts +51 -0
  13. package/dist/types/components/MessageList.d.ts +1 -0
  14. package/dist/types/components/agents/AgentCreatePage.d.ts +10 -1
  15. package/dist/types/components/agents/AgentsManagerPage.d.ts +5 -1
  16. package/dist/types/components/artifacts/ArtifactPanel.d.ts +8 -1
  17. package/dist/types/components/artifacts/TrajectoryInspector.d.ts +15 -0
  18. package/dist/types/components/composer/AddMenu.d.ts +5 -1
  19. package/dist/types/components/dialogs/BranchSessionDialog.d.ts +6 -0
  20. package/dist/types/components/dialogs/GitDiffDialog.d.ts +2 -1
  21. package/dist/types/components/dialogs/GitLogDialog.d.ts +2 -1
  22. package/dist/types/components/managed/WorkspaceBindingCreator.d.ts +6 -0
  23. package/dist/types/components/managed/generated/managed-agent-api.d.ts +1074 -0
  24. package/dist/types/components/managed/java-managed-agent-client.d.ts +32 -113
  25. package/dist/types/components/managed/java-managed-agent-provider.d.ts +1 -0
  26. package/dist/types/components/managed/managed-agent-provider.d.ts +31 -1
  27. package/dist/types/components/messages/AssistantMessage.d.ts +3 -0
  28. package/dist/types/components/messages/AuthorAvatar.d.ts +16 -0
  29. package/dist/types/components/messages/McpApp.d.ts +1 -1
  30. package/dist/types/components/messages/toolFormatting.d.ts +2 -0
  31. package/dist/types/components/panels/EnvironmentPanel.d.ts +2 -1
  32. package/dist/types/components/sidebar/UpdateControl.d.ts +10 -0
  33. package/dist/types/components/sidebar/WebShellSidebar.d.ts +6 -3
  34. package/dist/types/components/sidebar/WorkspaceSection.d.ts +2 -1
  35. package/dist/types/components/sidebar/sessionSearch.d.ts +2 -1
  36. package/dist/types/components/workspace-agents/LazyThreadsRoute.d.ts +7 -0
  37. package/dist/types/components/workspace-agents/ThreadChat.d.ts +30 -0
  38. package/dist/types/components/workspace-agents/ThreadView.d.ts +65 -0
  39. package/dist/types/components/workspace-agents/ThreadsPage.d.ts +97 -0
  40. package/dist/types/components/workspace-agents/ThreadsRoute.d.ts +23 -0
  41. package/dist/types/components/workspace-agents/agent-events.d.ts +50 -0
  42. package/dist/types/components/workspace-agents/agents-view-logic.d.ts +176 -0
  43. package/dist/types/components/workspace-agents/messages.d.ts +16 -0
  44. package/dist/types/components/workspace-agents/messages.transcript-stub.d.ts +12 -0
  45. package/dist/types/components/workspace-agents/threads-api.d.ts +43 -0
  46. package/dist/types/components/workspace-agents/useAgentChatEntry.d.ts +36 -0
  47. package/dist/types/components/workspace-agents/useProjectConversations.d.ts +10 -0
  48. package/dist/types/customization.d.ts +10 -0
  49. package/dist/types/daemon/session/transcript-page-table.d.ts +10 -1
  50. package/dist/types/daemon/session/types.d.ts +2 -2
  51. package/dist/types/desktop-relay/desktop-relay-client.d.ts +63 -0
  52. package/dist/types/mcpAppHostContext.d.ts +7 -0
  53. package/dist/types/settings/messages.d.ts +16 -0
  54. package/dist/types/settings/messages.transcript-stub.d.ts +12 -0
  55. package/dist/types/settings.d.ts +1 -0
  56. package/dist/types/trajectory/summarizeTrajectory.d.ts +20 -0
  57. package/package.json +3 -1
@@ -1,80 +1,27 @@
1
+ import type { components } from './generated/managed-agent-api';
2
+ type Schemas = components['schemas'];
1
3
  export type JavaAgentDate = number | string;
2
- export interface JavaAgentTurn {
3
- turnId: string;
4
- sessionId: string;
5
- status: string;
6
- submittedAt: JavaAgentDate;
7
- completedAt?: JavaAgentDate;
8
- errorCode?: string;
9
- usage?: Record<string, unknown>;
10
- }
4
+ export type JavaAgentTurn = Schemas['WebShellTurn'];
11
5
  export interface JavaAgentEnvironment {
12
6
  environmentId?: string;
13
7
  state?: string;
14
8
  errorCode?: string;
15
9
  }
16
- export interface JavaAgentSession {
17
- sessionId: string;
18
- title?: string;
19
- agentId?: string;
20
- status: string;
21
- createdAt: JavaAgentDate;
22
- updatedAt: JavaAgentDate;
23
- activeTurn?: JavaAgentTurn;
24
- environment?: JavaAgentEnvironment;
25
- lastSequence: number;
26
- }
27
- export interface JavaAgentEvent {
28
- sequence: number;
29
- eventId: string;
30
- sessionId: string;
31
- turnId: string;
32
- itemId?: string;
33
- type: string;
34
- createdAt: JavaAgentDate;
35
- data?: Record<string, unknown>;
36
- terminal: boolean;
37
- }
38
- export interface JavaAgentContentPart {
39
- partId: string;
40
- type: 'input_text' | 'output_text' | 'reasoning' | string;
41
- text: string;
42
- firstSequence: number;
43
- lastSequence: number;
44
- }
45
- export interface JavaAgentItem {
46
- itemId: string;
47
- sessionId: string;
48
- turnId: string;
49
- type: 'message' | 'tool_call' | string;
50
- role?: string;
51
- status: string;
52
- content: JavaAgentContentPart[];
53
- attributes: Record<string, unknown>;
54
- firstSequence: number;
55
- lastSequence: number;
56
- createdAt: JavaAgentDate;
57
- updatedAt: JavaAgentDate;
58
- }
59
- export interface JavaAgentCommandAdmission {
60
- sessionId: string;
61
- turnId?: string;
62
- status: string;
63
- replayed: boolean;
64
- }
65
- export interface JavaAgentCursorPage<T> {
66
- data: T[];
67
- nextCursor?: string;
68
- hasMore: boolean;
69
- }
70
- export interface JavaAgentTranscript {
71
- items?: JavaAgentItem[];
72
- events: JavaAgentEvent[];
73
- coveredSequence?: number;
74
- olderCursor?: string;
75
- hasMore: boolean;
76
- lastSequence: number;
77
- }
10
+ export type JavaAgentSession = Omit<Schemas['WebShellSession'], 'environment'> & {
11
+ environment?: JavaAgentEnvironment | null;
12
+ };
13
+ export type JavaAgentWorkspace = Schemas['WebShellWorkspace'];
14
+ export type JavaAgentWorkspacePage = Schemas['WebShellWorkspacePage'];
15
+ export type JavaAgentSessionPage = Omit<Schemas['WebShellSessionPage'], 'data'> & {
16
+ data: JavaAgentSession[];
17
+ };
18
+ export type JavaAgentEvent = Schemas['WebShellEvent'];
19
+ export type JavaAgentResyncRequired = Schemas['WebShellResyncRequired'];
20
+ export declare function isJavaAgentResyncRequired(frame: JavaAgentEvent | JavaAgentResyncRequired): frame is JavaAgentResyncRequired;
21
+ export type JavaAgentContentPart = Schemas['WebShellContentPart'];
22
+ export type JavaAgentItem = Schemas['WebShellItem'];
23
+ export type JavaAgentCommandAdmission = Schemas['WebShellAdmission'];
24
+ export type JavaAgentTranscript = Schemas['WebShellTranscript'];
78
25
  export interface JavaManagedAgentClientOptions {
79
26
  baseUrl: string;
80
27
  getHeaders?: () => HeadersInit | Promise<HeadersInit>;
@@ -92,49 +39,21 @@ export declare class JavaManagedAgentClient {
92
39
  private readonly fetchImpl;
93
40
  private readonly credentials;
94
41
  constructor(options: JavaManagedAgentClientOptions);
95
- listSessions(request: {
96
- cursor?: string;
97
- limit?: number;
98
- }, signal?: AbortSignal): Promise<JavaAgentCursorPage<JavaAgentSession>>;
42
+ listSessions(request: Schemas['WebShellListRequest'], signal?: AbortSignal): Promise<JavaAgentSessionPage>;
99
43
  getSession(sessionId: string, signal?: AbortSignal): Promise<JavaAgentSession>;
100
- getTranscript(request: {
101
- sessionId: string;
102
- cursor?: string;
103
- limit?: number;
104
- }, signal?: AbortSignal): Promise<JavaAgentTranscript>;
105
- createSession(request: {
106
- requestId: string;
107
- idempotencyKey: string;
108
- agentId: string;
109
- environmentId?: string;
110
- title?: string;
111
- input: Array<{
112
- type: 'text';
113
- text: string;
114
- }>;
115
- metadata?: Record<string, unknown>;
116
- }, signal?: AbortSignal): Promise<JavaAgentCommandAdmission>;
117
- submitTurn(request: {
118
- requestId: string;
119
- idempotencyKey: string;
120
- sessionId: string;
121
- input: Array<{
122
- type: 'text';
123
- text: string;
124
- }>;
125
- metadata?: Record<string, unknown>;
126
- }, signal?: AbortSignal): Promise<JavaAgentCommandAdmission>;
127
- cancelTurn(request: {
128
- requestId: string;
129
- idempotencyKey: string;
130
- sessionId: string;
131
- turnId: string;
132
- }, signal?: AbortSignal): Promise<JavaAgentCommandAdmission>;
133
- streamEvents(request: {
134
- sessionId: string;
135
- afterSequence?: number;
136
- limit?: number;
137
- }, signal?: AbortSignal): AsyncGenerator<JavaAgentEvent>;
44
+ listWorkspaces(request: Schemas['WebShellWorkspaceQueryRequest'], signal?: AbortSignal): Promise<JavaAgentWorkspacePage>;
45
+ getWorkspace(workspaceId: string, signal?: AbortSignal): Promise<{
46
+ workspaceId: string;
47
+ displayName: string;
48
+ canCreateSession: boolean;
49
+ state: "active" | "draining" | "removed";
50
+ }>;
51
+ getTranscript(request: Schemas['WebShellTranscriptRequest'], signal?: AbortSignal): Promise<JavaAgentTranscript>;
52
+ createSession(request: Schemas['WebShellCreateRequest'], signal?: AbortSignal): Promise<JavaAgentCommandAdmission>;
53
+ submitTurn(request: Schemas['WebShellSubmitRequest'], signal?: AbortSignal): Promise<JavaAgentCommandAdmission>;
54
+ cancelTurn(request: Schemas['WebShellCancelRequest'], signal?: AbortSignal): Promise<JavaAgentCommandAdmission>;
55
+ streamEvents(request: Schemas['WebShellStreamRequest'], signal?: AbortSignal): AsyncGenerator<JavaAgentEvent | JavaAgentResyncRequired>;
138
56
  private post;
139
57
  private request;
140
58
  }
59
+ export {};
@@ -4,5 +4,6 @@ export interface JavaManagedAgentProviderOptions extends JavaManagedAgentClientO
4
4
  agentId?: string;
5
5
  environmentId?: string;
6
6
  productScope?: string;
7
+ enableWorkspaceBinding?: boolean;
7
8
  }
8
9
  export declare function createJavaManagedAgentProvider(options: JavaManagedAgentProviderOptions): ManagedAgentProvider;
@@ -1,10 +1,14 @@
1
- export type ManagedAgentSessionPhase = 'admitted' | 'runtime_starting' | 'agent_running' | 'waiting_runtime' | 'tool_running' | 'cancelling' | 'completed' | 'failed' | 'cancelled';
1
+ export type ManagedAgentSessionPhase = 'created' | 'admitted' | 'runtime_starting' | 'agent_running' | 'waiting_runtime' | 'tool_running' | 'cancelling' | 'completed' | 'failed' | 'cancelled';
2
2
  export type ManagedAgentRuntimeState = 'unknown' | 'starting' | 'ready' | 'failed';
3
3
  export interface ManagedAgentSessionSummary {
4
4
  sessionId: string;
5
5
  activeTurnId?: string;
6
6
  title: string;
7
7
  workspaceCwd?: string;
8
+ workspace?: {
9
+ workspaceId: string;
10
+ cwdRelative: string;
11
+ };
8
12
  createdAt: number;
9
13
  admittedAt: number;
10
14
  updatedAt: number;
@@ -50,6 +54,26 @@ export interface ManagedAgentProvider {
50
54
  readonly storageKey: string;
51
55
  readonly canCancel: boolean;
52
56
  readonly acceptsWorkspaceCwd: boolean;
57
+ readonly workspaceBinding?: {
58
+ readonly agentId: string;
59
+ list(options: ManagedAgentRequestOptions & {
60
+ cursor?: string;
61
+ limit?: number;
62
+ }): Promise<{
63
+ data: ManagedAgentWorkspace[];
64
+ defaultWorkspace?: ManagedAgentWorkspace | null;
65
+ nextCursor?: string;
66
+ supported: boolean;
67
+ }>;
68
+ get(workspaceId: string, options: ManagedAgentRequestOptions): Promise<ManagedAgentWorkspace>;
69
+ createEmpty(request: {
70
+ agentId: string;
71
+ workspaceId: string;
72
+ cwdRelative: string;
73
+ }, options: ManagedAgentCommandOptions): Promise<{
74
+ sessionId: string;
75
+ }>;
76
+ };
53
77
  listSessions(options: ManagedAgentRequestOptions & {
54
78
  workspaceCwd?: string;
55
79
  limit?: number;
@@ -75,3 +99,9 @@ export interface ManagedAgentProvider {
75
99
  lastEventId?: number;
76
100
  }): AsyncIterable<ManagedAgentSessionEvent>;
77
101
  }
102
+ export interface ManagedAgentWorkspace {
103
+ workspaceId: string;
104
+ displayName: string;
105
+ state: string;
106
+ canCreateSession: boolean;
107
+ }
@@ -1,7 +1,9 @@
1
1
  import { type WebShellAssistantFeedbackRating, type WebShellAssistantTurnFooterRenderInfo, type WebShellSource } from '../../customization';
2
2
  import type { DaemonSessionGenerationEvent } from '@qwen-code/sdk/daemon';
3
+ import type { DaemonMessageAuthor } from '../../adapters/messageTypes';
3
4
  interface AssistantMessageProps {
4
5
  content: string;
6
+ author?: DaemonMessageAuthor;
5
7
  isStreaming?: boolean;
6
8
  timestamp?: number;
7
9
  onBranchSession?: () => void | Promise<void>;
@@ -19,6 +21,7 @@ interface AssistantMessageProps {
19
21
  export declare const AssistantMessage: import("react").NamedExoticComponent<AssistantMessageProps>;
20
22
  interface ThinkingMessageProps {
21
23
  content: string;
24
+ author?: DaemonMessageAuthor;
22
25
  isStreaming?: boolean;
23
26
  timestamp?: number;
24
27
  isLocateFlashing?: boolean;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * The initial of a named assistant voice, tinted with its color when it has
8
+ * one. The same mark stands for an agent in its replies, the Team panel and
9
+ * the Agents page, so a reader learns it once.
10
+ */
11
+ export declare function AuthorAvatar({ name, color, size, className, }: {
12
+ name: string;
13
+ color?: string;
14
+ size?: 'sm' | 'md';
15
+ className?: string;
16
+ }): import("react/jsx-runtime").JSX.Element;
@@ -13,7 +13,7 @@ export interface McpAppDisplay {
13
13
  permissions?: SandboxResource['permissions'];
14
14
  }
15
15
  export declare function getMcpAppDisplay(value: unknown): McpAppDisplay | undefined;
16
- export declare function resolveMcpAppSandboxUrl(daemonBaseUrl: string, hostUrl: string): string | undefined;
16
+ export declare function resolveMcpAppSandboxUrl(daemonBaseUrl: string, hostUrl: string, dataMode?: boolean): string | undefined;
17
17
  export declare function applySandboxCspQuery(sandboxUrl: string, cspJson: string): string;
18
18
  export declare function McpApp({ display }: {
19
19
  display: McpAppDisplay;
@@ -36,6 +36,8 @@ export declare function getShellToolSemanticDescription(tool: ACPToolCall): stri
36
36
  export declare function extractText(tool: ACPToolCall): string | null;
37
37
  export declare function getAdvisorDisplayText(tool: ACPToolCall): string | null;
38
38
  export declare function getToolResultSummary(tool: ACPToolCall): string;
39
+ export declare function getEmptyMcpToolTitleDescription(toolName: string | undefined, title: string | undefined, input: Record<string, unknown> | undefined): string | undefined;
40
+ export declare function isEmptyMcpToolTitle(toolName: string | undefined, title: string | undefined, input: Record<string, unknown> | undefined): boolean;
39
41
  /**
40
42
  * Like every other is*ToolName helper, normalizes case so callers can pass
41
43
  * the raw wire name. One predicate on purpose: ToolGroup gates the detail
@@ -13,6 +13,7 @@ interface EnvironmentPanelProps {
13
13
  workspaceCwd?: string;
14
14
  gitWorkspaceCwd?: string;
15
15
  gitCwd?: string;
16
+ gitSessionId?: string;
16
17
  branch?: string;
17
18
  gitStatus?: DaemonWorkspaceGitStatus;
18
19
  tasks: readonly DaemonSessionTaskWithWorkflowStatus[];
@@ -43,5 +44,5 @@ export type EnvironmentAgentTask = DaemonSessionAgentTaskStatus & {
43
44
  color?: string;
44
45
  lineageState?: 'complete' | 'orphaned' | 'cycle';
45
46
  };
46
- export declare function EnvironmentPanel({ sources, onOpenSource, retrySourceRegistration, floating, hidden, workspaceCwd, gitWorkspaceCwd, gitCwd, branch, gitStatus, tasks, agentTasks, attachments, attachmentsLoading, attachmentsError, onRetryAttachments, artifacts, artifactsLoading, items, onOpenGitDiff, onOpenGitCommit, onOpenGitWorktrees, onOpenGitLog, onOpenAgent, onOpenAgentWorkflow, onOpenTask, onReadImage, onImagePreview, onAttachmentPreview, onAttachmentPreviewError, onOpenArtifact, onDismiss, }: EnvironmentPanelProps): import("react/jsx-runtime").JSX.Element;
47
+ export declare function EnvironmentPanel({ sources, onOpenSource, retrySourceRegistration, floating, hidden, workspaceCwd, gitWorkspaceCwd, gitCwd, gitSessionId, branch, gitStatus, tasks, agentTasks, attachments, attachmentsLoading, attachmentsError, onRetryAttachments, artifacts, artifactsLoading, items, onOpenGitDiff, onOpenGitCommit, onOpenGitWorktrees, onOpenGitLog, onOpenAgent, onOpenAgentWorkflow, onOpenTask, onReadImage, onImagePreview, onAttachmentPreview, onAttachmentPreviewError, onOpenArtifact, onDismiss, }: EnvironmentPanelProps): import("react/jsx-runtime").JSX.Element;
47
48
  export {};
@@ -0,0 +1,10 @@
1
+ import type { DaemonClient } from '@qwen-code/sdk/daemon';
2
+ interface UpdateControlProps {
3
+ client: Pick<DaemonClient, 'daemonUpdateStatus' | 'prepareDaemonUpdate' | 'restartDaemonForUpdate'>;
4
+ collapsed: boolean;
5
+ currentVersion: string;
6
+ onError: (error: unknown, fallback: string) => void;
7
+ onRestarted?: (url: string) => void;
8
+ }
9
+ export declare function UpdateControl({ client, collapsed, currentVersion, onError, onRestarted, }: UpdateControlProps): import("react/jsx-runtime").JSX.Element | null;
10
+ export {};
@@ -2,7 +2,7 @@ import { type ReactNode } from 'react';
2
2
  import { type DaemonWorkspaceCapability } from '@qwen-code/sdk/daemon';
3
3
  import { type WebShellTheme } from '../../themeContext';
4
4
  import { type WorkspaceManagementTarget, type WorkspaceOverviewItem } from './workspaceOverviewModel';
5
- export type WebShellSidebarFooterItem = 'settings' | 'version' | 'theme' | 'sessionsOverview' | 'workspacesOverview' | 'splitView' | 'daemonStatus' | 'localFiles' | 'collapse';
5
+ export type WebShellSidebarFooterItem = 'settings' | 'update' | 'version' | 'theme' | 'sessionsOverview' | 'workspacesOverview' | 'splitView' | 'daemonStatus' | 'localFiles' | 'desktopRelay' | 'collapse';
6
6
  export interface WebShellSidebarBranding {
7
7
  /** Replace the complete top branding row. */
8
8
  render?: () => ReactNode;
@@ -15,7 +15,7 @@ export interface WebShellSidebarLockedWorkspace {
15
15
  expanded: boolean;
16
16
  }) => ReactNode;
17
17
  }
18
- export type WebShellSidebarPrimaryNavItem = 'newTask' | 'plugins' | 'channels' | 'scheduledTasks' | 'workflows' | 'goals' | 'managed';
18
+ export type WebShellSidebarPrimaryNavItem = 'newTask' | 'agents' | 'plugins' | 'channels' | 'scheduledTasks' | 'workflows' | 'goals' | 'managed';
19
19
  export interface WebShellSidebarPrimaryNavOptions {
20
20
  /** Built-in primary nav entries to show. Defaults to all. */
21
21
  items?: readonly WebShellSidebarPrimaryNavItem[];
@@ -54,9 +54,12 @@ export interface WebShellSidebarWorkspaceOverviewOptions {
54
54
  }
55
55
  export type { WorkspaceManagementTarget, WorkspaceOverviewItem };
56
56
  interface WebShellSidebarProps {
57
+ selectedCollaborationId?: string;
58
+ onOpenCollaboration?: (id: string, cwd: string) => void;
57
59
  collapsed: boolean;
58
60
  onCollapsedChange: (collapsed: boolean) => void;
59
61
  onOpenSettings: () => void;
62
+ onOpenAgents?: (view?: 'agents' | 'tasks') => void;
60
63
  onOpenPlugins: () => void;
61
64
  onOpenChannels: () => void;
62
65
  onOpenManagedSessions?: () => void;
@@ -145,4 +148,4 @@ interface WebShellSidebarProps {
145
148
  onLoadStandaloneSession?: (sessionId: string) => Promise<void> | void;
146
149
  onStandaloneNotice?: (message: string) => void;
147
150
  }
148
- export declare function WebShellSidebar({ collapsed, onCollapsedChange, onOpenSettings, onOpenPlugins, onOpenChannels, 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;
151
+ export declare function WebShellSidebar({ selectedCollaborationId, onOpenCollaboration, collapsed, onCollapsedChange, onOpenSettings, onOpenAgents, onOpenPlugins, onOpenChannels, 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;
@@ -9,6 +9,7 @@ export interface WorkspaceHeaderActionsContext {
9
9
  gitBranch: string | null | undefined;
10
10
  }
11
11
  interface WorkspaceSectionProps {
12
+ additionalSessions?: readonly DaemonSessionSummary[];
12
13
  workspace: DaemonWorkspaceCapability;
13
14
  remote?: boolean;
14
15
  renderHeader?: (expanded: boolean) => ReactNode;
@@ -116,5 +117,5 @@ interface WorkspaceSectionProps {
116
117
  /** Commit entry for the same picker; the row still opens without it. */
117
118
  onOpenCommit?: (workspaceCwd: string) => void;
118
119
  }
119
- export declare function WorkspaceSection({ workspace, remote, renderHeader, 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;
120
+ export declare function WorkspaceSection({ additionalSessions, workspace, remote, renderHeader, 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;
120
121
  export {};
@@ -8,7 +8,8 @@ export declare function sessionMatchesGitQuery(session: DaemonSessionSummary, qu
8
8
  /**
9
9
  * The sidebar's session-source scope: the "channel" tab lists only
10
10
  * channel-source sessions, the "default" tab lists unattributed (legacy)
11
- * and default/Qwen Live tasks, and no filter lists everything.
11
+ * and default/Qwen Live tasks, every other source lists exact matches, and
12
+ * no filter lists everything.
12
13
  */
13
14
  export declare function sessionMatchesSource(session: DaemonSessionSummary, source: string | undefined): boolean;
14
15
  /**
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { ThreadsRouteProps } from './ThreadsRoute';
7
+ export declare function LazyThreadsRoute(props: ThreadsRouteProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,30 @@
1
+ import { type ThreadDetailView } from './ThreadView';
2
+ import { type RoutingPreviewTarget } from './agents-view-logic';
3
+ interface AgentEntry {
4
+ id: string;
5
+ name: string;
6
+ color?: string;
7
+ enabled: boolean;
8
+ retiredAt?: number;
9
+ }
10
+ export declare function ThreadChat({ thread, agents, preview, pending, onSend, onDraftChange, onOpenAgentSession, onCancelRun, onMarkDone, onOpenThread, onRespondPermission, onAssign, onBack, activityOnly, onOpenActivity, headerActionsContainer, }: {
11
+ headerActionsContainer?: HTMLElement | null;
12
+ activityOnly?: boolean;
13
+ onOpenActivity?: () => void;
14
+ preview?: readonly RoutingPreviewTarget[];
15
+ agents: readonly AgentEntry[];
16
+ thread: ThreadDetailView;
17
+ pending: boolean;
18
+ onSend: (text: string) => Promise<boolean>;
19
+ onDraftChange: (text: string) => void;
20
+ onOpenAgentSession?: (sessionId: string) => void;
21
+ onCancelRun: (runId: string) => void;
22
+ onMarkDone: () => void;
23
+ onOpenThread: (threadId: string) => void;
24
+ onRespondPermission?: (sessionId: string, requestId: string, optionId: string) => Promise<unknown>;
25
+ /** Hands the conversation to another agent. */
26
+ onAssign?: (assignee?: string) => void;
27
+ /** Shown when the conversation is not in the shell's own chat column. */
28
+ onBack?: () => void;
29
+ }): import("react/jsx-runtime").JSX.Element;
30
+ export {};
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type RunRow, type RunView } from './agents-view-logic';
7
+ export interface ThreadPostView {
8
+ sourceRunId?: string;
9
+ id: string;
10
+ sequence: number;
11
+ authorKind: 'human' | 'agent' | 'system';
12
+ authorName: string;
13
+ authorDeleted?: boolean;
14
+ text: string;
15
+ at: number;
16
+ outcomes?: readonly {
17
+ agentName?: string;
18
+ kind: 'dispatch' | 'coalesce' | 'skip';
19
+ reason?: string;
20
+ into?: 'queued' | 'running';
21
+ }[];
22
+ }
23
+ export interface ThreadDetailView {
24
+ id: string;
25
+ title: string;
26
+ body: string;
27
+ /** What "done" means here, in the author's words. */
28
+ acceptanceCriteria?: string;
29
+ priority?: 'urgent' | 'high' | 'normal' | 'low';
30
+ parent?: {
31
+ id: string;
32
+ title: string;
33
+ };
34
+ assigneeName?: string;
35
+ status: 'open' | 'in_progress' | 'blocked' | 'in_review' | 'done' | 'cancelled';
36
+ /** The resolver's sentence. Rendered verbatim. */
37
+ reason: string;
38
+ posts: readonly ThreadPostView[];
39
+ runs: readonly RunView[];
40
+ children?: readonly ThreadChildView[];
41
+ budget: {
42
+ turnsUsed: number;
43
+ turnLimit: number;
44
+ tokensUsed: number;
45
+ tokenLimit: number;
46
+ };
47
+ }
48
+ export interface ThreadChildView {
49
+ id: string;
50
+ title: string;
51
+ status: ThreadDetailView['status'];
52
+ reason: string;
53
+ assigneeName?: string;
54
+ }
55
+ /**
56
+ * One run: its state, how long it has gone, and what it is doing, with the
57
+ * thinking and output so far folded under it. Under a member in the Team
58
+ * panel the member row already names the agent, so `hideAgent` drops it.
59
+ */
60
+ export declare function RunRowView({ row, hideAgent, onOpenAgentSession, onCancelRun, }: {
61
+ row: RunRow;
62
+ hideAgent?: boolean;
63
+ onOpenAgentSession?: (sessionId: string) => void;
64
+ onCancelRun?: (runId: string) => void;
65
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type RoutingPreviewTarget, type ThreadSummaryView } from './agents-view-logic';
7
+ /**
8
+ * A change to one agent's configuration. Absent leaves a field alone; `null`
9
+ * clears the override and returns the agent to what its definition says.
10
+ */
11
+ export interface AgentConfigPatch {
12
+ description?: string | null;
13
+ color?: string | null;
14
+ model?: string | null;
15
+ instructions?: string | null;
16
+ agentType?: string | null;
17
+ maxConcurrentRuns?: number | null;
18
+ }
19
+ /** What every agent in this workspace may do. A property of the subsystem. */
20
+ export interface AgentCapabilitiesView {
21
+ readOnly: boolean;
22
+ allowed: readonly string[];
23
+ threadTools: readonly string[];
24
+ }
25
+ export interface ThreadsPageProps {
26
+ createError?: string;
27
+ agents: readonly WorkspaceAgentSummaryView[];
28
+ threads: readonly ThreadSummaryView[];
29
+ view: AgentWorkspaceView;
30
+ onViewChange: (view: AgentWorkspaceView) => void;
31
+ onOpenThread: (threadId: string) => void;
32
+ onDeleteAgent: (agentId: string) => void;
33
+ onSetAgentEnabled: (agentId: string, enabled: boolean) => void;
34
+ onUpdateAgent?: (agentId: string, patch: AgentConfigPatch) => void;
35
+ onOpenAgentBuilder?: () => void;
36
+ onOpenDefinitions?: () => void;
37
+ capabilities?: AgentCapabilitiesView;
38
+ onCreateThread: (input: NewThread) => Promise<boolean> | void;
39
+ workspaceCwd?: string;
40
+ workspaces?: readonly {
41
+ cwd: string;
42
+ }[];
43
+ onWorkspaceChange?: (cwd: string) => void;
44
+ onPreviewThread?: (assignee?: string) => void;
45
+ createPreview?: readonly RoutingPreviewTarget[];
46
+ pending?: boolean;
47
+ }
48
+ export interface WorkspaceAgentSummaryView {
49
+ id: string;
50
+ name: string;
51
+ description?: string;
52
+ color?: string;
53
+ /** Definition supplying the persona. Absent uses the workspace default. */
54
+ agentType?: string;
55
+ model?: string;
56
+ /** What this identity is told on top of its definition's prompt. */
57
+ instructions?: string;
58
+ maxConcurrentRuns?: number;
59
+ enabled: boolean;
60
+ status: 'offline' | 'idle' | 'working' | 'blocked' | 'error';
61
+ /** Set once the identity is retired: it keeps its posts and takes no work. */
62
+ retiredAt?: number;
63
+ workingOn?: {
64
+ id: string;
65
+ title: string;
66
+ state: 'working' | 'finishing' | 'stopping';
67
+ };
68
+ waiting: number;
69
+ }
70
+ export type AgentWorkspaceView = 'agents' | 'tasks';
71
+ export interface NewWorkspaceAgent {
72
+ name: string;
73
+ description?: string;
74
+ agentType?: string;
75
+ model?: string;
76
+ instructions?: string;
77
+ maxConcurrentRuns?: number;
78
+ }
79
+ export type ThreadPriorityChoice = 'urgent' | 'high' | 'normal' | 'low';
80
+ export interface NewThread {
81
+ title: string;
82
+ body: string;
83
+ /** What "done" means. Sent only when written, so a blank stays absent. */
84
+ acceptanceCriteria?: string;
85
+ priority?: ThreadPriorityChoice;
86
+ assignee?: string;
87
+ /** The first post; the assignee starts from it. */
88
+ message?: string;
89
+ }
90
+ /**
91
+ * The thread list, grouped by what each thread needs.
92
+ *
93
+ * Recency sorting is the obvious default and it buries the two threads that
94
+ * need a person under twenty that do not. Grouping answers the question
95
+ * someone actually opens this page with.
96
+ */
97
+ export declare function ThreadsPage({ agents, threads, view, onViewChange, onOpenThread, onDeleteAgent, onSetAgentEnabled, onUpdateAgent, onOpenAgentBuilder, onOpenDefinitions, capabilities, onCreateThread, workspaceCwd, workspaces, onWorkspaceChange, createError, onPreviewThread, createPreview, pending, }: ThreadsPageProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type AgentWorkspaceView } from './ThreadsPage';
7
+ export interface ThreadsRouteProps {
8
+ /** `new-agent` opens straight into the New agent page. */
9
+ initialView?: AgentWorkspaceView | 'new-agent';
10
+ initialThreadId?: string;
11
+ workspaceCwd?: string;
12
+ chat?: boolean;
13
+ activityOnly?: boolean;
14
+ onOpenActivity?: (threadId: string, workspaceCwd: string) => void;
15
+ headerActionsContainer?: HTMLElement | null;
16
+ onTitleChange?: (threadId: string, title: string) => void;
17
+ onOpenThreadChat?: (threadId: string, workspaceCwd: string) => void;
18
+ /** Switches the shell to an agent's own session. Absent when embedded
19
+ * somewhere with no session view to switch to. */
20
+ onOpenAgentSession?: (sessionId: string) => void;
21
+ onOpenDefinitions?: () => void;
22
+ }
23
+ export declare function ThreadsRoute({ initialView, initialThreadId, workspaceCwd: boundWorkspaceCwd, chat, activityOnly, onOpenActivity, headerActionsContainer, onTitleChange, onOpenThreadChat, onOpenAgentSession, onOpenDefinitions, }: ThreadsRouteProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Client for `GET /workspaces/:ws/agent/events`, the collaboration stream.
8
+ *
9
+ * `fetch` rather than `EventSource`: the daemon wants a bearer header, which
10
+ * `EventSource` cannot send. Frames are plain `event:` + one `data:` line.
11
+ */
12
+ export interface AgentPermissionPromptView {
13
+ requestId: string;
14
+ title: string;
15
+ options: Array<{
16
+ optionId: string;
17
+ name: string;
18
+ kind?: string;
19
+ }>;
20
+ }
21
+ export interface AgentRunStepView {
22
+ id: string;
23
+ title: string;
24
+ status: 'running' | 'done' | 'failed';
25
+ }
26
+ export interface AgentRunProgressEvent {
27
+ type: 'progress';
28
+ threadId: string;
29
+ runId: string;
30
+ attempt: number;
31
+ sessionId: string;
32
+ stage: string;
33
+ detail: string;
34
+ outputText: string;
35
+ thoughtText: string;
36
+ activityAt: number;
37
+ permission?: AgentPermissionPromptView;
38
+ steps?: AgentRunStepView[];
39
+ }
40
+ export type AgentLiveEvent = {
41
+ type: 'changed';
42
+ threadId?: string;
43
+ } | AgentRunProgressEvent;
44
+ export type AgentStreamState = 'open' | 'closed';
45
+ /**
46
+ * Subscribes to a workspace's stream. Subscribers of the same URL share one
47
+ * connection: browsers allow only a handful per origin, and the sidebar plus
48
+ * an open conversation would otherwise hold several for the same workspace.
49
+ */
50
+ export declare function subscribeAgentStream(url: string, token: string | undefined, onEvent: (event: AgentLiveEvent) => void, onState: (state: AgentStreamState) => void): () => void;