@qwen-code/web-shell 0.25.1-preview.1 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{agents-route-DAa1HKQE.js → agents-route-CufkSNnD.js} +2 -2
- package/dist/daemon-react-sdk.js +1 -1
- package/dist/{index-zUj3SlrB.js → index-Deg_ZdBo.js} +50292 -48857
- package/dist/index.js +3 -3
- package/dist/sw.js +1 -1
- package/dist/{toolNames-B_KiYcXs.js → toolNames-Co4lBbW-.js} +1564 -1472
- package/dist/transcript.js +3815 -3757
- package/dist/types/components/ChatEditor.d.ts +4 -7
- package/dist/types/components/QueuedPromptDisplay.d.ts +4 -1
- package/dist/types/components/WorkspaceSelector.d.ts +9 -1
- package/dist/types/components/artifacts/artifactUtils.d.ts +9 -0
- package/dist/types/components/managed/ManagedSessionCwdControl.d.ts +9 -0
- package/dist/types/components/managed/generated/managed-agent-api.d.ts +81 -17
- package/dist/types/components/managed/java-managed-agent-client.d.ts +2 -1
- package/dist/types/components/managed/managed-agent-provider.d.ts +18 -1
- package/dist/types/components/managed/managed-request-error.d.ts +6 -0
- package/dist/types/components/managed/use-managed-actions.d.ts +6 -5
- package/dist/types/components/managed/use-managed-cwd-change.d.ts +21 -0
- package/dist/types/components/managed/use-managed-session.d.ts +15 -1
- package/dist/types/components/sidebar/WebShellSidebar.d.ts +7 -1
- package/dist/types/components/sidebar/WorkspaceSection.d.ts +9 -1
- package/dist/types/components/workspaces/HostLabel.d.ts +8 -0
- package/dist/types/components/workspaces/WorkspaceHostProjects.d.ts +11 -4
- package/dist/types/components/workspaces/WorkspaceLocation.d.ts +4 -1
- package/dist/types/config/daemon-target.d.ts +76 -0
- package/dist/types/config/daemon.d.ts +16 -0
- package/dist/types/config/host-fanout.d.ts +53 -0
- package/dist/types/config/remote-connections.d.ts +3 -0
- package/dist/types/config/workspace-hosts.d.ts +7 -0
- package/dist/types/daemon/session/types.d.ts +9 -1
- package/dist/types/hooks/useQueuedPrompts.d.ts +2 -0
- package/dist/types/trajectory/types.d.ts +1 -0
- package/dist/types/trajectory/useTrajectoryWindow.d.ts +21 -36
- package/dist/types/trajectory/window-messages.d.ts +9 -0
- package/dist/types/trajectory/window-messages.transcript-stub.d.ts +7 -0
- package/dist/types/utils/workspace.d.ts +10 -0
- package/package.json +1 -1
|
@@ -10,6 +10,7 @@ import { type ComposerSubmitMetadata, type EditorHandle } from '../hooks/useComp
|
|
|
10
10
|
import type { ContextUsageControls } from '../hooks/useContextUsageControls';
|
|
11
11
|
import type { VoiceStatusRevision, VoiceWorkspaceTarget } from '../voice/voice-workspace-target';
|
|
12
12
|
import { type SessionGitIntent } from './GitModePopover';
|
|
13
|
+
import { type WorkspaceSelectorOption } from './WorkspaceSelector';
|
|
13
14
|
export type ComposerToolbarAction = 'approvalMode' | 'plan' | 'contextUsage' | 'gitBranch' | 'model' | 'commands' | 'files' | 'widthMode' | 'voice' | 'workspace' | 'addMenu';
|
|
14
15
|
interface ChatEditorProps {
|
|
15
16
|
onSubmit: (text: string, images?: import('../adapters/promptTypes').PromptImage[], files?: import('../adapters/promptTypes').PromptFile[], commitAccepted?: import('../hooks/useComposerCore').ComposerSubmitCommit, metadata?: ComposerSubmitMetadata) => boolean | void;
|
|
@@ -101,16 +102,12 @@ interface ChatEditorProps {
|
|
|
101
102
|
onSelectModel?: (model: string) => void;
|
|
102
103
|
reasoning?: DaemonReasoningControls;
|
|
103
104
|
onSelectReasoningEffort?: (value: ReasoningSelection, source?: 'toggle') => Promise<void> | void;
|
|
104
|
-
workspaces?:
|
|
105
|
-
id: string;
|
|
106
|
-
cwd: string;
|
|
107
|
-
label: string;
|
|
108
|
-
primary: boolean;
|
|
109
|
-
trusted: boolean;
|
|
110
|
-
}>;
|
|
105
|
+
workspaces?: WorkspaceSelectorOption[];
|
|
111
106
|
selectedWorkspaceCwd?: string;
|
|
112
107
|
workspaceSelectionDisabled?: boolean;
|
|
113
108
|
onSelectWorkspace?: (workspaceCwd: string | undefined) => void;
|
|
109
|
+
/** Host-aware variant; see WorkspaceSelector. */
|
|
110
|
+
onSelectHostedWorkspace?: (hostOrigin: string, workspaceCwd: string | undefined) => void;
|
|
114
111
|
scratchWorkspaceSupported?: boolean;
|
|
115
112
|
existingFolderWorkspaceSupported?: boolean;
|
|
116
113
|
standaloneTargetSupported?: boolean;
|
|
@@ -44,13 +44,16 @@ export interface QueuedPrompt {
|
|
|
44
44
|
isRemoving?: boolean;
|
|
45
45
|
payloadCompleteness?: 'complete' | 'summary-only';
|
|
46
46
|
}
|
|
47
|
-
export declare function QueuedPromptDisplay({ prompts, t, canMutateMidTurn, canInsertMidTurn, onDelete, onInsert, onEdit, onImagePreview, onAttachmentPreview, }: {
|
|
47
|
+
export declare function QueuedPromptDisplay({ prompts, t, canMutateMidTurn, canInsertMidTurn, canSendMidTurnNow, onDelete, onInsert, onSendNow, onEdit, onImagePreview, onAttachmentPreview, }: {
|
|
48
48
|
prompts: readonly QueuedPrompt[];
|
|
49
49
|
t: ReturnType<typeof getTranslator>;
|
|
50
50
|
canMutateMidTurn?: boolean;
|
|
51
51
|
canInsertMidTurn?: boolean;
|
|
52
|
+
/** The daemon can deliver queued mid-turn messages on request. */
|
|
53
|
+
canSendMidTurnNow?: boolean;
|
|
52
54
|
onDelete: (id: number) => void;
|
|
53
55
|
onInsert: (id: number) => void;
|
|
56
|
+
onSendNow?: (id: number) => void;
|
|
54
57
|
onEdit: (id: number) => void;
|
|
55
58
|
onImagePreview?: (src: string, alt?: string) => void;
|
|
56
59
|
onAttachmentPreview?: (file: AttachmentPreviewRequest) => void;
|
|
@@ -4,6 +4,8 @@ export interface WorkspaceSelectorOption {
|
|
|
4
4
|
label: string;
|
|
5
5
|
primary: boolean;
|
|
6
6
|
trusted: boolean;
|
|
7
|
+
/** Daemon host this workspace lives on; defaults to the page origin. */
|
|
8
|
+
hostOrigin?: string;
|
|
7
9
|
}
|
|
8
10
|
interface WorkspaceSelectorProps {
|
|
9
11
|
workspaces: WorkspaceSelectorOption[];
|
|
@@ -17,6 +19,12 @@ interface WorkspaceSelectorProps {
|
|
|
17
19
|
selectedStandalone?: boolean;
|
|
18
20
|
className?: string;
|
|
19
21
|
onSelectWorkspace: (cwd: string | undefined) => void;
|
|
22
|
+
/**
|
|
23
|
+
* Host-aware selection for multi-daemon pages. When provided it fires
|
|
24
|
+
* INSTEAD of `onSelectWorkspace`, with the option's host (page origin when
|
|
25
|
+
* unset); `undefined` cwd keeps marking the host's primary workspace.
|
|
26
|
+
*/
|
|
27
|
+
onSelectHostedWorkspace?: (hostOrigin: string, cwd: string | undefined) => void;
|
|
20
28
|
onSelectStandalone?: () => void;
|
|
21
29
|
onCreateScratch: () => void;
|
|
22
30
|
onOpenExistingFolder: () => void;
|
|
@@ -25,5 +33,5 @@ interface WorkspaceSelectorProps {
|
|
|
25
33
|
* Composer workspace menu. Capability-gated creation actions and disabled
|
|
26
34
|
* untrusted entries keep presentation aligned with daemon authorization.
|
|
27
35
|
*/
|
|
28
|
-
export declare function WorkspaceSelector({ workspaces, selectedWorkspaceCwd, disabled, busy, scratchSupported, existingFolderSupported, standaloneSupported, selectedStandalone, className, onSelectWorkspace, onSelectStandalone, onCreateScratch, onOpenExistingFolder, }: WorkspaceSelectorProps): import("react/jsx-runtime").JSX.Element | null;
|
|
36
|
+
export declare function WorkspaceSelector({ workspaces, selectedWorkspaceCwd, disabled, busy, scratchSupported, existingFolderSupported, standaloneSupported, selectedStandalone, className, onSelectWorkspace, onSelectHostedWorkspace, onSelectStandalone, onCreateScratch, onOpenExistingFolder, }: WorkspaceSelectorProps): import("react/jsx-runtime").JSX.Element | null;
|
|
29
37
|
export {};
|
|
@@ -30,6 +30,15 @@ export declare function readWorkspaceFileAsBlob(readFileBytes: (filePath: string
|
|
|
30
30
|
}): Promise<Blob>;
|
|
31
31
|
export declare function downloadWorkspaceFile(workspaceActions: Pick<DaemonWorkspaceActions, 'readFileBytes' | 'stat'>, workspacePath: string, mimeType?: string, isCancelled?: () => boolean): Promise<void>;
|
|
32
32
|
export declare function getArtifactLocation(artifact: DaemonSessionArtifact): string;
|
|
33
|
+
/**
|
|
34
|
+
* Workspace files are shown by filename. Links and managed artifacts have no
|
|
35
|
+
* file, so they keep the stored title.
|
|
36
|
+
*/
|
|
37
|
+
export declare function artifactDisplayName(artifact: Pick<DaemonSessionArtifact, 'title'> & {
|
|
38
|
+
workspacePath?: string;
|
|
39
|
+
}): string;
|
|
40
|
+
/** A backslash stays in the name, matching `path.posix.basename`. */
|
|
41
|
+
export declare function workspaceFileName(workspacePath: string | undefined): string | undefined;
|
|
33
42
|
export declare function normalizePath(value: string | undefined): string;
|
|
34
43
|
export declare function stripWorkspacePath(path: string, workspaceCwd?: string): string;
|
|
35
44
|
export declare function isSamePath(left: string | undefined, right: string | undefined, workspaceCwd?: string): boolean;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ManagedAgentSessionSummary } from './managed-agent-provider';
|
|
2
|
+
import type { useManagedCwdChange } from './use-managed-cwd-change';
|
|
3
|
+
export declare function ManagedSessionCwdControl({ summary, supported, cwd, disabledReason, onSubmit, }: {
|
|
4
|
+
summary: ManagedAgentSessionSummary;
|
|
5
|
+
supported: boolean;
|
|
6
|
+
cwd: ReturnType<typeof useManagedCwdChange>;
|
|
7
|
+
disabledReason?: string;
|
|
8
|
+
onSubmit: (path: string, revision: number) => Promise<boolean | void>;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -57,7 +57,7 @@ export interface paths {
|
|
|
57
57
|
};
|
|
58
58
|
get?: never;
|
|
59
59
|
put?: never;
|
|
60
|
-
/** @description POST SSE consumed through fetch response.body. An afterSequence below the replay floor ends the stream with one agent.session.resync_required frame instead of a 409; reload the transcript and resume after its lastSequence. */
|
|
60
|
+
/** @description POST SSE consumed through fetch response.body. An afterSequence below the replay floor ends the stream with one agent.session.resync_required frame instead of a 409 only while the Snapshot backs the floor (replay_floor_sequence <= snapshot_through_sequence); a stream reconciliation discards the Snapshot without lowering the floor, and during that rebuild such a cursor is served from the retained events. On the resync frame, reload the transcript and resume after its lastSequence. */
|
|
61
61
|
post: operations["webShellStreamEvents"];
|
|
62
62
|
delete?: never;
|
|
63
63
|
options?: never;
|
|
@@ -74,7 +74,7 @@ export interface paths {
|
|
|
74
74
|
};
|
|
75
75
|
get?: never;
|
|
76
76
|
put?: never;
|
|
77
|
-
/** @description Maps workspaceId/cwdRelative to public Workspace selection without using environmentId or absolute cwd. Shares G0's opt-in initial file-tool Turn admission
|
|
77
|
+
/** @description Maps workspaceId/cwdRelative to public Workspace selection without using environmentId or absolute cwd. Shares G0's opt-in initial file-tool Turn admission with public Session creation: the fixed server-owned profile for the built-in qwen-code agent, and the profile selected by a stored definition's single allowlisted hosted_profile tools entry for a definition-pinned Session. Any caller holding the OPERATOR role may submit later Turns and rename the Session under the same opt-in, while the Workspace registry row stays ACTIVE and still backs the binding, the actor recorded by the Workspace create command keeps OPERATOR or above, and the Session is active and undeleted and is either a qwen-code Session on the frozen execution profile or pinned to a stored definition; Workspace close follows its separate close capability and lifecycle admission; the same caller may cancel a running Turn (its delivery re-checks no grant it needs survives the cancellation), and the Session's own liveness keeps OPERATOR access even when its Workspace's background-exit observation closes some other bound Session; cancel is always allowed for its own running Turn even outside the Workspace files opt-in. A definition-pinned Session keeps its pinned revision's tool profile, model and instructions for its whole life, and a replay of the create command reuses the original pin; a WebShell Session inherits its Workspace's default Workspace selection when the request omits one. */
|
|
78
78
|
post: operations["webShellCreateSession"];
|
|
79
79
|
delete?: never;
|
|
80
80
|
options?: never;
|
|
@@ -140,7 +140,7 @@ export interface paths {
|
|
|
140
140
|
};
|
|
141
141
|
get?: never;
|
|
142
142
|
put?: never;
|
|
143
|
-
/** @description W2, implemented: the camelCase twin of the public changeSessionCwd with the matched refusal order: 400 invalid_request for a missing or malformed field; 401 actor_required without a trusted actor; 400 invalid_idempotency_key for a malformed idempotencyKey — with two documented divergences: a key over 128 characters is refused during request validation with 400 invalid_request before the service's check, and a blank idempotencyKey is refused there too, while the public header answers 400 invalid_idempotency_key for both shapes; 400 invalid_cwd for a lexical violation and 400 invalid_request for an expectedContextRevision below 1; 404 session_not_found for an unknown Session id; 400 unsupported_feature for an unbound Session; 404 session_not_found for an unreadable Session
|
|
143
|
+
/** @description W2, implemented: the camelCase twin of the public changeSessionCwd with the matched refusal order: 400 invalid_request for a missing or malformed field; 401 actor_required without a trusted actor; 400 invalid_idempotency_key for a malformed idempotencyKey — with two documented divergences: a key over 128 characters is refused during request validation with 400 invalid_request before the service's check, and a blank idempotencyKey is refused there too, while the public header answers 400 invalid_idempotency_key for both shapes; 400 invalid_cwd for a lexical violation and 400 invalid_request for an expectedContextRevision below 1; 404 session_not_found for an unknown Session id; 400 unsupported_feature for an unbound Session; 404 session_not_found for an unreadable Session; 409 idempotency_conflict when one key carries different content, and a completed change under the same key always replays instead, before the role refusal; 403 session_operation_forbidden when a readable actor's Workspace role is below OPERATOR; 409 workspace_unavailable when execution is disabled; 404 session_not_found for a deleted Session; then 409 session_state_conflict, 409 workspace_unavailable from moved Registry facts (the recorded create-command actor's grant included, and the settlement re-checks the V56-persisted initiator the same way, so demoting either actor fails the operation, exactly like the public surface), 409 context_revision_conflict and 409 session_context_busy. Poll the operation or await session.context.changed; do not treat 202 as activation. */
|
|
144
144
|
post: operations["webShellChangeCwd"];
|
|
145
145
|
delete?: never;
|
|
146
146
|
options?: never;
|
|
@@ -173,7 +173,7 @@ export interface paths {
|
|
|
173
173
|
};
|
|
174
174
|
get?: never;
|
|
175
175
|
put?: never;
|
|
176
|
-
/** @description D6 serves Hosted permission Actions. Question Actions and vote_recorded remain planned. Reads follow Session authorization;
|
|
176
|
+
/** @description D6 serves Hosted permission Actions. Question Actions and vote_recorded remain planned. Reads follow Session authorization; the Session's recorded owner or any caller holding OPERATOR on the bound Workspace may respond (an unbound Session with no recorded creator and no recorded create command answers to any caller in its tenant, matching its read ACL; a bound Session without an owner record answers through the create-command actor recorded for it, or through the Workspace role arm). Responses are durable operations, reconciled against the original journal decision. */
|
|
177
177
|
post: operations["queryWebShellActions"];
|
|
178
178
|
delete?: never;
|
|
179
179
|
options?: never;
|
|
@@ -190,7 +190,7 @@ export interface paths {
|
|
|
190
190
|
};
|
|
191
191
|
get?: never;
|
|
192
192
|
put?: never;
|
|
193
|
-
/** @description D6 serves Hosted permission Actions. Question Actions and vote_recorded remain planned. Reads follow Session authorization;
|
|
193
|
+
/** @description D6 serves Hosted permission Actions. Question Actions and vote_recorded remain planned. Reads follow Session authorization; the Session's recorded owner or any caller holding OPERATOR on the bound Workspace may respond (an unbound Session with no recorded creator and no recorded create command answers to any caller in its tenant, matching its read ACL; a bound Session without an owner record answers through the create-command actor recorded for it, or through the Workspace role arm). Responses are durable operations, reconciled against the original journal decision. */
|
|
194
194
|
post: operations["getWebShellAction"];
|
|
195
195
|
delete?: never;
|
|
196
196
|
options?: never;
|
|
@@ -207,7 +207,7 @@ export interface paths {
|
|
|
207
207
|
};
|
|
208
208
|
get?: never;
|
|
209
209
|
put?: never;
|
|
210
|
-
/** @description D6 serves Hosted permission Actions. Question Actions and vote_recorded remain planned. Reads follow Session authorization;
|
|
210
|
+
/** @description D6 serves Hosted permission Actions. Question Actions and vote_recorded remain planned. Reads follow Session authorization; the Session's recorded owner or any caller holding OPERATOR on the bound Workspace may respond (an unbound Session with no recorded creator and no recorded create command answers to any caller in its tenant, matching its read ACL; a bound Session without an owner record answers through the create-command actor recorded for it, or through the Workspace role arm). Responses are durable operations, reconciled against the original journal decision. */
|
|
211
211
|
post: operations["respondWebShellAction"];
|
|
212
212
|
delete?: never;
|
|
213
213
|
options?: never;
|
|
@@ -224,7 +224,7 @@ export interface paths {
|
|
|
224
224
|
};
|
|
225
225
|
get?: never;
|
|
226
226
|
put?: never;
|
|
227
|
-
/** @description Uses the same close admission,
|
|
227
|
+
/** @description Uses the same close admission, owner authorization and durable cleanup semantics as the public close route. sessionClose describes deployment support; it does not grant actor authorization. New L3 Workspace close operations run SessionEnd only, retain data, and finish after durable effects verification and original Runtime stop. SessionDelete is reserved for ACTIVE delete. Missing protocol support rejects new admission; previously admitted operations retain their saved protocol. Unknown outcomes remain recovery_blocked. */
|
|
228
228
|
post: operations["closeWebShellSession"];
|
|
229
229
|
delete?: never;
|
|
230
230
|
options?: never;
|
|
@@ -241,7 +241,7 @@ export interface paths {
|
|
|
241
241
|
};
|
|
242
242
|
get?: never;
|
|
243
243
|
put?: never;
|
|
244
|
-
/** @description Workspace-bound archive requires a closed Session with completed reliable-close evidence and the
|
|
244
|
+
/** @description Workspace-bound archive requires a closed Session with completed reliable-close evidence and the Session's recorded owner with current read access. It completes atomically during admission, preserves data and the permanent close fence, and calls neither Harness nor Runtime. A readable non-owner returns 403; missing close evidence returns 409 workspace_unavailable. */
|
|
245
245
|
post: operations["archiveWebShellSession"];
|
|
246
246
|
delete?: never;
|
|
247
247
|
options?: never;
|
|
@@ -258,7 +258,7 @@ export interface paths {
|
|
|
258
258
|
};
|
|
259
259
|
get?: never;
|
|
260
260
|
put?: never;
|
|
261
|
-
/** @description Workspace-bound ACTIVE deletion supports idle hosted-workspace-files/1 Sessions when L3 lifecycle protocol and reliable Runtime stop are available. Only the creator with current read access may admit it; accepted, running, cancelling or approval-waiting Turns return 409 turn_active. Admission persists a lifecycle-only execution fence and a versioned actor-scoped operation. SessionEnd settles before SessionDelete; committed Hook results are verified in Session Store and saved before permanent draining, attachment cleanup and original worker stop. Unknown outcomes or missing original stop evidence remain recovery_blocked and are never replayed on a replacement worker. CLOSED/ARCHIVED deletion retains L2: completed reliable-close evidence is required and no Harness or Hook is invoked. Completion atomically commits retirement, tombstone, receipt and terminal event, retaining shared Workspace files and neighboring holders. Authorized same-actor/key replays return the original operation, including after deletion; readable non-
|
|
261
|
+
/** @description Workspace-bound ACTIVE deletion supports idle hosted-workspace-files/1 Sessions when L3 lifecycle protocol and reliable Runtime stop are available. Only the Session's recorded owner (owner_actor_key, with the pre-V40 creator fallback) with current read access may admit it; accepted, running, cancelling or approval-waiting Turns return 409 turn_active. Admission persists a lifecycle-only execution fence and a versioned actor-scoped operation. SessionEnd settles before SessionDelete; committed Hook results are verified in Session Store and saved before permanent draining, attachment cleanup and original worker stop. Unknown outcomes or missing original stop evidence remain recovery_blocked and are never replayed on a replacement worker. CLOSED/ARCHIVED deletion retains L2: completed reliable-close evidence is required and no Harness or Hook is invoked. Completion atomically commits retirement, tombstone, receipt and terminal event, retaining shared Workspace files and neighboring holders. Authorized same-actor/key replays return the original operation, including after deletion; a readable non-owner returns 403. Missing lifecycle capability or close evidence returns 409 workspace_unavailable. */
|
|
262
262
|
post: operations["deleteWebShellSession"];
|
|
263
263
|
delete?: never;
|
|
264
264
|
options?: never;
|
|
@@ -331,6 +331,22 @@ export interface paths {
|
|
|
331
331
|
patch?: never;
|
|
332
332
|
trace?: never;
|
|
333
333
|
};
|
|
334
|
+
"/api/agent/web-shell/v1/tasks/cancel": {
|
|
335
|
+
parameters: {
|
|
336
|
+
query?: never;
|
|
337
|
+
header?: never;
|
|
338
|
+
path?: never;
|
|
339
|
+
cookie?: never;
|
|
340
|
+
};
|
|
341
|
+
get?: never;
|
|
342
|
+
put?: never;
|
|
343
|
+
post: operations["cancelWebShellTask"];
|
|
344
|
+
delete?: never;
|
|
345
|
+
options?: never;
|
|
346
|
+
head?: never;
|
|
347
|
+
patch?: never;
|
|
348
|
+
trace?: never;
|
|
349
|
+
};
|
|
334
350
|
"/api/agent/web-shell/v1/tool-results/get": {
|
|
335
351
|
parameters: {
|
|
336
352
|
query?: never;
|
|
@@ -388,7 +404,7 @@ export interface paths {
|
|
|
388
404
|
};
|
|
389
405
|
get?: never;
|
|
390
406
|
put?: never;
|
|
391
|
-
/** @description Synchronously restores an archived Session to closed. Workspace-bound Sessions require completed reliable-close evidence and the
|
|
407
|
+
/** @description Synchronously restores an archived Session to closed. Workspace-bound Sessions require completed reliable-close evidence and the Session's recorded owner with current read access (404 unreadable, 403 readable non-owner). Bound keys are tenant/Session/actor scoped. Replay returns the current visible Session without repeating the mutation; a deleted Session returns 404. The permanent close fence is preserved and no Harness or Runtime call is made. */
|
|
392
408
|
post: operations["unarchiveWebShellSession"];
|
|
393
409
|
delete?: never;
|
|
394
410
|
options?: never;
|
|
@@ -525,17 +541,22 @@ export interface components {
|
|
|
525
541
|
capabilities: components["schemas"]["WebShellSessionCapabilities"];
|
|
526
542
|
};
|
|
527
543
|
WebShellSessionCapabilities: {
|
|
544
|
+
/**
|
|
545
|
+
* @description True when Workspace files are enabled, the bound Session is active and undeleted, the caller holds OPERATOR or above on the Workspace and the exact ACTIVE Registry generation/storage and create-command-actor OPERATOR/OWNER grant still hold, matching cwd admission. This does not promise an idle Session and is independent of workspaceTurns execution-profile gates. Missing means false. Existing operations remain queryable under read authorization even when this capability is false.
|
|
546
|
+
* @default false
|
|
547
|
+
*/
|
|
548
|
+
cwdChange?: boolean;
|
|
528
549
|
/** @default false */
|
|
529
550
|
actions: boolean;
|
|
530
551
|
/**
|
|
531
|
-
* @description True when the caller may submit later Turns of this Workspace-bound Session: the deployment enables Workspace files, the caller
|
|
552
|
+
* @description True when the caller may submit later Turns of this Workspace-bound Session or rename it: the deployment enables Workspace files, the caller holds the OPERATOR role on a Workspace registry row whose state is ACTIVE and still backs the Session's binding, the actor recorded by the Workspace create command keeps OPERATOR or above, and the Session is active and undeleted and is either a qwen-code Session or a Session pinned to a stored definition (both on the Workspace's frozen execution profile). Cancelling only aborts work already running, so an OPERATOR caller may cancel a running Turn even when this is false; the capability does not gate cancellation. False for every other caller and for unbound Sessions, which do not use it.
|
|
532
553
|
* @default false
|
|
533
554
|
*/
|
|
534
555
|
workspaceTurns: boolean;
|
|
535
556
|
tasks: boolean;
|
|
536
557
|
artifacts: boolean;
|
|
537
558
|
/**
|
|
538
|
-
* @description Deployment support for close independently of archive/delete. Admission also requires
|
|
559
|
+
* @description Deployment support for close independently of archive/delete. Admission also requires Session ownership and current read access for a bound Session.
|
|
539
560
|
* @default false
|
|
540
561
|
*/
|
|
541
562
|
sessionClose?: boolean;
|
|
@@ -646,6 +667,8 @@ export interface components {
|
|
|
646
667
|
replay_floor_sequence?: number | null;
|
|
647
668
|
/** Format: int64 */
|
|
648
669
|
snapshot_through_sequence?: number | null;
|
|
670
|
+
/** @description Names the definition field that cannot take effect on 409 agent_definition_unsupported; other errors may omit this field. */
|
|
671
|
+
field?: string;
|
|
649
672
|
};
|
|
650
673
|
};
|
|
651
674
|
/**
|
|
@@ -687,7 +710,7 @@ export interface components {
|
|
|
687
710
|
* @default false
|
|
688
711
|
*/
|
|
689
712
|
workspaceContext: boolean;
|
|
690
|
-
/** @description Supports authorized Workspace discovery, Session creation, and saved binding read-back. This capability does not advertise execution readiness. Deployments may separately opt in to an initial Workspace Read/Write/Edit Turn at creation; the
|
|
713
|
+
/** @description Supports authorized Workspace discovery, Session creation, and saved binding read-back. This capability does not advertise execution readiness. Deployments may separately opt in to an initial Workspace Read/Write/Edit Turn at creation; callers holding the OPERATOR role may submit later Turns or rename under the same opt-in while the registry row stays ACTIVE and still backs the Session's binding and the actor recorded by the Workspace create command keeps OPERATOR or above, and may cancel a running Turn (its delivery re-checks no grants), while close follows its separate capability and lifecycle admission; archive, delete and unarchive follow their separate retention capabilities after reliable Workspace close. */
|
|
691
714
|
workspaceBinding: boolean;
|
|
692
715
|
};
|
|
693
716
|
/** @description Same authorized explicit default as default_workspace, including when outside this page; null if absent or not creatable. A non-null default is active and has canCreateSession=true. */
|
|
@@ -759,6 +782,8 @@ export interface components {
|
|
|
759
782
|
sessionId: string;
|
|
760
783
|
/** @enum {unknown} */
|
|
761
784
|
type: "create_session" | "submit_input" | "cancel" | "action_response" | "close" | "archive" | "delete" | "task_cancel";
|
|
785
|
+
/** @description Task that a task_cancel operation targets. */
|
|
786
|
+
taskId?: string;
|
|
762
787
|
/** @enum {unknown} */
|
|
763
788
|
status: "pending" | "running" | "completed" | "failed" | "cancelled" | "recovery_blocked";
|
|
764
789
|
/** @enum {unknown} */
|
|
@@ -767,10 +792,10 @@ export interface components {
|
|
|
767
792
|
deliveryState: "pending" | "leased" | "confirmed" | "blocked";
|
|
768
793
|
receiptId?: string;
|
|
769
794
|
actionResolution?: components["schemas"]["WebShellActionResolution"];
|
|
770
|
-
/** @description Reason a durable response or task cancellation failed. Action response failures come from the original committed Action, or a definitive invalid response. Workspace close recovery_blocked reports original resource identity or unsettled execution; the Session remains closing. */
|
|
795
|
+
/** @description Reason a durable response or task cancellation failed. Action response failures come from the original committed Action, or a definitive invalid response. Task cancel failures are task_already_settled (the run ended before the stop request was recorded), task_action_unavailable and task_not_found; a recovery_blocked task cancel reports task_cancel_unconfirmed. Workspace close recovery_blocked reports original resource identity or unsettled execution; the Session remains closing. */
|
|
771
796
|
failureCode?: string;
|
|
772
797
|
replayed: boolean;
|
|
773
|
-
} & (unknown & unknown & unknown & unknown);
|
|
798
|
+
} & (unknown & unknown & unknown & unknown & unknown);
|
|
774
799
|
WebShellQuestionAction: {
|
|
775
800
|
actionId: string;
|
|
776
801
|
/** Format: uuid */
|
|
@@ -894,7 +919,7 @@ export interface components {
|
|
|
894
919
|
*/
|
|
895
920
|
TaskRuntimeState: "unbound" | "provisioning" | "ready" | "draining" | "lost";
|
|
896
921
|
/**
|
|
897
|
-
* @description Actions the task supports now, the same for every caller. cancel: the cancel route accepts a new command for this task; whether a caller may use it is an authorization check (403 on the cancel route). send_input: reserved for a later capability route. read_output: the task events route returns output events for this task to any caller that can read it. read_output does not change during the task's life, and a task without it produces no output events: its output goes only to Artifacts, so the events route never filters out events that exist.
|
|
922
|
+
* @description Actions the task supports now, the same for every caller. cancel: the cancel route accepts a new command for this task (since 1.40, child_agent tasks in pending, running, waiting or degraded, in an active Session); whether a caller may use it is an authorization check (403 on the cancel route). send_input: reserved for a later capability route. read_output: the task events route returns output events for this task to any caller that can read it. read_output does not change during the task's life, and a task without it produces no output events: its output goes only to Artifacts, so the events route never filters out events that exist.
|
|
898
923
|
* @enum {string}
|
|
899
924
|
*/
|
|
900
925
|
TaskActionCapability: "cancel" | "send_input" | "read_output";
|
|
@@ -983,6 +1008,14 @@ export interface components {
|
|
|
983
1008
|
/** @default 20 */
|
|
984
1009
|
limit?: number;
|
|
985
1010
|
};
|
|
1011
|
+
WebShellTaskCancelRequest: {
|
|
1012
|
+
/** @description Trace correlation only; excluded from the request digest, so a retry with another requestId still replays. A header-safe value (1 to 128 visible ASCII characters) is echoed as X-Request-Id; any other value is replaced by a server-chosen id. */
|
|
1013
|
+
requestId?: string | null;
|
|
1014
|
+
/** Format: uuid */
|
|
1015
|
+
sessionId: string;
|
|
1016
|
+
taskId: string;
|
|
1017
|
+
idempotencyKey: string;
|
|
1018
|
+
};
|
|
986
1019
|
/** @description state_changed, output or artifact. The set is open: a later minor version may add types and optional fields. Clients ignore unknown optional fields and unknown types, while still checkpointing event cursors; strict validation against an older minor response schema is not supported. Existing fields forbidden for a known type cannot be repurposed on that type. */
|
|
987
1020
|
TaskEventType: string;
|
|
988
1021
|
ToolResultPreview: {
|
|
@@ -1532,7 +1565,7 @@ export interface operations {
|
|
|
1532
1565
|
};
|
|
1533
1566
|
400: components["responses"]["BadRequest"];
|
|
1534
1567
|
401: components["responses"]["Unauthorized"];
|
|
1535
|
-
/** @description Responding requires the Session
|
|
1568
|
+
/** @description Responding requires the Session's recorded owner or a Workspace OPERATOR (action_forbidden). An unbound Session with no recorded creator and no recorded create command (anonymous open-mode creation, or an unbound Session created before the V40 migration that also has no Workspace creation record) answers to any caller in its tenant, matching its read ACL; a bound Session with no recorded owner answers through the create-command actor recorded for it, or through the Workspace role arm. The tenant filter's 403 actor_scope_mismatch also applies on this route. */
|
|
1536
1569
|
403: components["responses"]["Forbidden"];
|
|
1537
1570
|
/** @description Unknown or unreadable Session (session_not_found), or unknown Action (action_not_found). */
|
|
1538
1571
|
404: components["responses"]["NotFound"];
|
|
@@ -1748,6 +1781,37 @@ export interface operations {
|
|
|
1748
1781
|
413: components["responses"]["PayloadTooLarge"];
|
|
1749
1782
|
};
|
|
1750
1783
|
};
|
|
1784
|
+
cancelWebShellTask: {
|
|
1785
|
+
parameters: {
|
|
1786
|
+
query?: never;
|
|
1787
|
+
header?: never;
|
|
1788
|
+
path?: never;
|
|
1789
|
+
cookie?: never;
|
|
1790
|
+
};
|
|
1791
|
+
requestBody: {
|
|
1792
|
+
content: {
|
|
1793
|
+
"application/json": components["schemas"]["WebShellTaskCancelRequest"];
|
|
1794
|
+
};
|
|
1795
|
+
};
|
|
1796
|
+
responses: {
|
|
1797
|
+
/** @description Same authorized task cancellation semantics as the public API: key validation, current access, idempotent replay, then new-request capability, Session, task and storage-migration checks (409 workspace_unavailable under a migration fence). Replay returns the same operation and latest durable state. 202 is durable admission, completed is authority acceptance, and neither proves physical stop. Admission requires no other open operation on the Session (409 session_operation_active), as on the lifecycle routes. A requestId in the body becomes the response's X-Request-Id and stays out of the request digest. */
|
|
1798
|
+
202: {
|
|
1799
|
+
headers: {
|
|
1800
|
+
"X-Request-Id": components["headers"]["RequestId"];
|
|
1801
|
+
[name: string]: unknown;
|
|
1802
|
+
};
|
|
1803
|
+
content: {
|
|
1804
|
+
"application/json": components["schemas"]["WebShellCommandOperation"];
|
|
1805
|
+
};
|
|
1806
|
+
};
|
|
1807
|
+
400: components["responses"]["BadRequest"];
|
|
1808
|
+
401: components["responses"]["Unauthorized"];
|
|
1809
|
+
403: components["responses"]["Forbidden"];
|
|
1810
|
+
404: components["responses"]["NotFound"];
|
|
1811
|
+
409: components["responses"]["Conflict"];
|
|
1812
|
+
413: components["responses"]["PayloadTooLarge"];
|
|
1813
|
+
};
|
|
1814
|
+
};
|
|
1751
1815
|
getWebShellToolResult: {
|
|
1752
1816
|
parameters: {
|
|
1753
1817
|
query?: never;
|
|
@@ -60,6 +60,7 @@ export declare class JavaManagedAgentClient {
|
|
|
60
60
|
respondAction(request: Schemas['WebShellActionRespondRequest'], signal?: AbortSignal): Promise<Schemas['WebShellCommandOperation']>;
|
|
61
61
|
/** Reads an operation's latest durable status; polling is not a replay. */
|
|
62
62
|
queryOperation(request: Schemas['WebShellOperationRequest'], signal?: AbortSignal): Promise<Schemas['WebShellOperation']>;
|
|
63
|
+
changeCwd(request: Schemas['WebShellChangeCwdRequest'], signal?: AbortSignal): Promise<Schemas['WebShellCwdOperation']>;
|
|
63
64
|
getToolResult(sessionId: string, itemId: string, signal?: AbortSignal): Promise<{
|
|
64
65
|
result: components["schemas"]["PublicToolResult"];
|
|
65
66
|
access: components["schemas"]["ArtifactAccess"];
|
|
@@ -80,7 +81,7 @@ export declare class JavaManagedAgentClient {
|
|
|
80
81
|
readArtifactRange(artifact: ManagedArtifact, offset: number, length: number, signal?: AbortSignal): Promise<Uint8Array>;
|
|
81
82
|
openArtifactStream(artifact: ManagedArtifact, signal?: AbortSignal): Promise<ReadableStream<Uint8Array>>;
|
|
82
83
|
private artifactContent;
|
|
83
|
-
streamEvents(request: Schemas['WebShellStreamRequest'], signal?: AbortSignal, onOpen?: () => void): AsyncGenerator<JavaAgentEvent | JavaAgentResyncRequired>;
|
|
84
|
+
streamEvents(request: Schemas['WebShellStreamRequest'], signal?: AbortSignal, onOpen?: () => void, onAlive?: () => void): AsyncGenerator<JavaAgentEvent | JavaAgentResyncRequired>;
|
|
84
85
|
private post;
|
|
85
86
|
private request;
|
|
86
87
|
}
|
|
@@ -10,6 +10,8 @@ export interface ManagedAgentSessionSummary {
|
|
|
10
10
|
workspace?: {
|
|
11
11
|
workspaceId: string;
|
|
12
12
|
cwdRelative: string;
|
|
13
|
+
contextRevision?: number;
|
|
14
|
+
state?: 'ready' | 'changing' | 'recovery_blocked';
|
|
13
15
|
};
|
|
14
16
|
createdAt: number;
|
|
15
17
|
admittedAt: number;
|
|
@@ -24,13 +26,14 @@ export interface ManagedAgentSessionSummary {
|
|
|
24
26
|
artifacts?: boolean;
|
|
25
27
|
/** The caller may submit later Turns to this Workspace-bound Session. */
|
|
26
28
|
workspaceTurns?: boolean;
|
|
29
|
+
cwdChange?: boolean;
|
|
27
30
|
};
|
|
28
31
|
failure?: {
|
|
29
32
|
code: string;
|
|
30
33
|
message: string;
|
|
31
34
|
};
|
|
32
35
|
}
|
|
33
|
-
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';
|
|
36
|
+
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';
|
|
34
37
|
export interface ManagedAgentSessionEvent {
|
|
35
38
|
id: number;
|
|
36
39
|
at: number;
|
|
@@ -61,6 +64,7 @@ export interface ManagedAgentRequestOptions {
|
|
|
61
64
|
export interface ManagedAgentCommandOptions extends ManagedAgentRequestOptions {
|
|
62
65
|
idempotencyKey: string;
|
|
63
66
|
}
|
|
67
|
+
export type ManagedCwdOperation = components['schemas']['WebShellCwdOperation'];
|
|
64
68
|
/** A Hosted tool approval waiting for the Session owner's answer. */
|
|
65
69
|
export interface ManagedAgentPendingAction {
|
|
66
70
|
actionId: string;
|
|
@@ -89,6 +93,13 @@ export interface ManagedAgentProvider {
|
|
|
89
93
|
respond(action: ManagedAgentPendingAction, optionId: string, options: ManagedAgentCommandOptions): Promise<void>;
|
|
90
94
|
};
|
|
91
95
|
readonly toolResults?: ManagedToolResultReader;
|
|
96
|
+
readonly cwdChange?: {
|
|
97
|
+
submit(sessionId: string, request: {
|
|
98
|
+
cwdRelative: string;
|
|
99
|
+
expectedContextRevision: number;
|
|
100
|
+
}, options: ManagedAgentCommandOptions): Promise<ManagedCwdOperation>;
|
|
101
|
+
query(sessionId: string, operationId: string, options: ManagedAgentRequestOptions): Promise<ManagedCwdOperation>;
|
|
102
|
+
};
|
|
92
103
|
readonly workspaceBinding?: {
|
|
93
104
|
readonly agentId: string;
|
|
94
105
|
list(options: ManagedAgentRequestOptions & {
|
|
@@ -139,6 +150,12 @@ export interface ManagedAgentProvider {
|
|
|
139
150
|
* depend on stream activity.
|
|
140
151
|
*/
|
|
141
152
|
onEstablished?(): void;
|
|
153
|
+
/**
|
|
154
|
+
* Called for each complete heartbeat or comment frame the stream
|
|
155
|
+
* delivers. Heartbeats never decode into events, so on an idle
|
|
156
|
+
* Session this is the only sign of life an established stream gives.
|
|
157
|
+
*/
|
|
158
|
+
onAlive?(): void;
|
|
142
159
|
}): AsyncIterable<ManagedAgentSessionEvent>;
|
|
143
160
|
}
|
|
144
161
|
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;
|
|
@@ -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
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
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
|
-
|
|
24
|
+
signals?: Partial<Record<SignalLeg, SignalEntry>>;
|
|
12
25
|
};
|
|
26
|
+
export {};
|
|
@@ -89,6 +89,12 @@ interface WebShellSidebarProps {
|
|
|
89
89
|
onNewSession: (workspaceCwd?: string) => Promise<boolean> | boolean;
|
|
90
90
|
onNewStandaloneSession?: () => Promise<boolean> | boolean;
|
|
91
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;
|
|
92
98
|
onSelectCurrentSession?: () => void;
|
|
93
99
|
onSessionRenameConfirmed?: (workspaceCwd: string | undefined, sessionId: string, displayName: string) => void;
|
|
94
100
|
/**
|
|
@@ -156,4 +162,4 @@ interface WebShellSidebarProps {
|
|
|
156
162
|
onLoadStandaloneSession?: (sessionId: string) => Promise<void> | void;
|
|
157
163
|
onStandaloneNotice?: (message: string) => void;
|
|
158
164
|
}
|
|
159
|
-
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, 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;
|
|
@@ -10,6 +10,14 @@ export interface WorkspaceHeaderActionsContext {
|
|
|
10
10
|
}
|
|
11
11
|
interface WorkspaceSectionProps {
|
|
12
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;
|
|
13
21
|
remote?: boolean;
|
|
14
22
|
renderHeader?: (expanded: boolean) => ReactNode;
|
|
15
23
|
hideHeader?: boolean;
|
|
@@ -117,5 +125,5 @@ interface WorkspaceSectionProps {
|
|
|
117
125
|
/** Commit entry for the same picker; the row still opens without it. */
|
|
118
126
|
onOpenCommit?: (workspaceCwd: string) => void;
|
|
119
127
|
}
|
|
120
|
-
export declare function WorkspaceSection({ 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;
|
|
121
129
|
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Icon + short name for one daemon host: the page origin reads as "Local",
|
|
3
|
+
* anything else shows its URL host. Shared by the sidebar host groups and
|
|
4
|
+
* the composer workspace picker so every surface names hosts identically.
|
|
5
|
+
*/
|
|
6
|
+
export declare function HostLabel({ origin }: {
|
|
7
|
+
origin: string;
|
|
8
|
+
}): import("react/jsx-runtime").JSX.Element;
|