@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.
- package/README.md +10 -0
- package/dist/ThreadsRoute-DIWrKAvJ.js +1726 -0
- package/dist/daemon-react-sdk.js +1 -1
- package/dist/index-BQmwkK6l.js +121229 -0
- package/dist/index.js +69 -118171
- package/dist/sw.js +1 -1
- package/dist/{toolNames-C6S4xtsA.js → toolNames-C6G4mcM3.js} +5485 -4631
- package/dist/transcript.js +9384 -9198
- package/dist/types/adapters/messageTypes.d.ts +11 -0
- package/dist/types/components/BranchPickerPopover.d.ts +2 -1
- package/dist/types/components/ChatEditor.d.ts +1 -0
- package/dist/types/components/DesktopRelayControl.d.ts +51 -0
- package/dist/types/components/MessageList.d.ts +1 -0
- package/dist/types/components/agents/AgentCreatePage.d.ts +10 -1
- package/dist/types/components/agents/AgentsManagerPage.d.ts +5 -1
- package/dist/types/components/artifacts/ArtifactPanel.d.ts +8 -1
- package/dist/types/components/artifacts/TrajectoryInspector.d.ts +15 -0
- package/dist/types/components/composer/AddMenu.d.ts +5 -1
- package/dist/types/components/dialogs/BranchSessionDialog.d.ts +6 -0
- package/dist/types/components/dialogs/GitDiffDialog.d.ts +2 -1
- package/dist/types/components/dialogs/GitLogDialog.d.ts +2 -1
- package/dist/types/components/managed/WorkspaceBindingCreator.d.ts +6 -0
- package/dist/types/components/managed/generated/managed-agent-api.d.ts +1074 -0
- package/dist/types/components/managed/java-managed-agent-client.d.ts +32 -113
- package/dist/types/components/managed/java-managed-agent-provider.d.ts +1 -0
- package/dist/types/components/managed/managed-agent-provider.d.ts +31 -1
- package/dist/types/components/messages/AssistantMessage.d.ts +3 -0
- package/dist/types/components/messages/AuthorAvatar.d.ts +16 -0
- package/dist/types/components/messages/McpApp.d.ts +1 -1
- package/dist/types/components/messages/toolFormatting.d.ts +2 -0
- package/dist/types/components/panels/EnvironmentPanel.d.ts +2 -1
- package/dist/types/components/sidebar/UpdateControl.d.ts +10 -0
- package/dist/types/components/sidebar/WebShellSidebar.d.ts +6 -3
- package/dist/types/components/sidebar/WorkspaceSection.d.ts +2 -1
- package/dist/types/components/sidebar/sessionSearch.d.ts +2 -1
- package/dist/types/components/workspace-agents/LazyThreadsRoute.d.ts +7 -0
- package/dist/types/components/workspace-agents/ThreadChat.d.ts +30 -0
- package/dist/types/components/workspace-agents/ThreadView.d.ts +65 -0
- package/dist/types/components/workspace-agents/ThreadsPage.d.ts +97 -0
- package/dist/types/components/workspace-agents/ThreadsRoute.d.ts +23 -0
- package/dist/types/components/workspace-agents/agent-events.d.ts +50 -0
- package/dist/types/components/workspace-agents/agents-view-logic.d.ts +176 -0
- package/dist/types/components/workspace-agents/messages.d.ts +16 -0
- package/dist/types/components/workspace-agents/messages.transcript-stub.d.ts +12 -0
- package/dist/types/components/workspace-agents/threads-api.d.ts +43 -0
- package/dist/types/components/workspace-agents/useAgentChatEntry.d.ts +36 -0
- package/dist/types/components/workspace-agents/useProjectConversations.d.ts +10 -0
- package/dist/types/customization.d.ts +10 -0
- package/dist/types/daemon/session/transcript-page-table.d.ts +10 -1
- package/dist/types/daemon/session/types.d.ts +2 -2
- package/dist/types/desktop-relay/desktop-relay-client.d.ts +63 -0
- package/dist/types/mcpAppHostContext.d.ts +7 -0
- package/dist/types/settings/messages.d.ts +16 -0
- package/dist/types/settings/messages.transcript-stub.d.ts +12 -0
- package/dist/types/settings.d.ts +1 -0
- package/dist/types/trajectory/summarizeTrajectory.d.ts +20 -0
- 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
|
|
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
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
export
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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,
|
|
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,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;
|