@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.
Files changed (37) hide show
  1. package/dist/{agents-route-DAa1HKQE.js → agents-route-CufkSNnD.js} +2 -2
  2. package/dist/daemon-react-sdk.js +1 -1
  3. package/dist/{index-zUj3SlrB.js → index-Deg_ZdBo.js} +50292 -48857
  4. package/dist/index.js +3 -3
  5. package/dist/sw.js +1 -1
  6. package/dist/{toolNames-B_KiYcXs.js → toolNames-Co4lBbW-.js} +1564 -1472
  7. package/dist/transcript.js +3815 -3757
  8. package/dist/types/components/ChatEditor.d.ts +4 -7
  9. package/dist/types/components/QueuedPromptDisplay.d.ts +4 -1
  10. package/dist/types/components/WorkspaceSelector.d.ts +9 -1
  11. package/dist/types/components/artifacts/artifactUtils.d.ts +9 -0
  12. package/dist/types/components/managed/ManagedSessionCwdControl.d.ts +9 -0
  13. package/dist/types/components/managed/generated/managed-agent-api.d.ts +81 -17
  14. package/dist/types/components/managed/java-managed-agent-client.d.ts +2 -1
  15. package/dist/types/components/managed/managed-agent-provider.d.ts +18 -1
  16. package/dist/types/components/managed/managed-request-error.d.ts +6 -0
  17. package/dist/types/components/managed/use-managed-actions.d.ts +6 -5
  18. package/dist/types/components/managed/use-managed-cwd-change.d.ts +21 -0
  19. package/dist/types/components/managed/use-managed-session.d.ts +15 -1
  20. package/dist/types/components/sidebar/WebShellSidebar.d.ts +7 -1
  21. package/dist/types/components/sidebar/WorkspaceSection.d.ts +9 -1
  22. package/dist/types/components/workspaces/HostLabel.d.ts +8 -0
  23. package/dist/types/components/workspaces/WorkspaceHostProjects.d.ts +11 -4
  24. package/dist/types/components/workspaces/WorkspaceLocation.d.ts +4 -1
  25. package/dist/types/config/daemon-target.d.ts +76 -0
  26. package/dist/types/config/daemon.d.ts +16 -0
  27. package/dist/types/config/host-fanout.d.ts +53 -0
  28. package/dist/types/config/remote-connections.d.ts +3 -0
  29. package/dist/types/config/workspace-hosts.d.ts +7 -0
  30. package/dist/types/daemon/session/types.d.ts +9 -1
  31. package/dist/types/hooks/useQueuedPrompts.d.ts +2 -0
  32. package/dist/types/trajectory/types.d.ts +1 -0
  33. package/dist/types/trajectory/useTrajectoryWindow.d.ts +21 -36
  34. package/dist/types/trajectory/window-messages.d.ts +9 -0
  35. package/dist/types/trajectory/window-messages.transcript-stub.d.ts +7 -0
  36. package/dist/types/utils/workspace.d.ts +10 -0
  37. 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?: Array<{
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 and fixed server-owned profile with public Session creation. The Session creator may submit later Turns under the same opt-in with current read and create grants on the bound ACTIVE Workspace generation and storage. Cancellation of running work requires the creator’s read grant and the opt-in, even after create authority is revoked (a live cancel reuses the owner's resident Harness attachment; a cold connector cache passively re-attaches for a persisted cancellation after frozen identity checks, independently of current creation grants, registry state or mount readiness; new work still rechecks execution authority); Workspace close follows its separate close capability and lifecycle admission; archive and unarchive follow retention capabilities after reliable Workspace close; delete supports either L3 idle ACTIVE files Sessions or L2 CLOSED/ARCHIVED Sessions; controlled same-Workspace cwd changes ship through the durable cwd_change operations (v1.32). The per-caller workspaceTurns capability on this surface advertises current submit and rename admission; it does not gate cancellation. Freeze selection with the original idempotency key; admission does not prove physical directory readiness. */
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 and 403 session_operation_forbidden when a readable actor is not the creator; 409 idempotency_conflict when one key carries different content; 409 workspace_unavailable when execution is disabled; 404 session_not_found for a deleted Session — a completed change under the same key still replays instead; then 409 session_state_conflict, 409 workspace_unavailable from moved Registry facts, 409 context_revision_conflict and 409 session_context_busy exactly like the public surface. Poll the operation or await session.context.changed; do not treat 202 as activation. */
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; only the Session creator may respond (a Session with no recorded creator and no recorded create command answers to any caller in its tenant). Responses are durable operations, reconciled against the original journal decision. */
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; only the Session creator may respond (a Session with no recorded creator and no recorded create command answers to any caller in its tenant). Responses are durable operations, reconciled against the original journal decision. */
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; only the Session creator may respond (a Session with no recorded creator and no recorded create command answers to any caller in its tenant). Responses are durable operations, reconciled against the original journal decision. */
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, creator 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. */
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 creator 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-creator returns 403; missing close evidence returns 409 workspace_unavailable. */
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-creators return 403. Missing lifecycle capability or close evidence returns 409 workspace_unavailable. */
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 creator with current read access (404 unreadable, 403 readable non-creator). 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. */
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 created the Session and currently holds Workspace read and create grants on a registry row whose state is ACTIVE and still carries the Workspace generation and storage identity the Session was bound to, and the Session is an active, undeleted qwen-code Session on the frozen execution profile. Cancelling only aborts work that is already running, so the creator may cancel a running Turn even when this is false, as long as they can still read the Workspace and the deployment still enables Workspace files. False for every other caller and for unbound Sessions, which do not use it.
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 creator ownership and current read access for a bound Session.
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 Session creator may submit and cancel later Turns under the same opt-in, while close follows its separate capability and lifecycle admission; archive, delete and unarchive follow their separate retention capabilities after reliable Workspace close. */
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 creator (action_forbidden). A Session with no recorded creator and no recorded create command (anonymous open-mode creation, or a Session created before the V40 migration that also has no Workspace creation record) answers to any caller in its tenant, matching its read ACL. The tenant filter's 403 actor_scope_mismatch also applies on this route. */
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 as creator-only. That is a fact about the
16
- * viewer and the Session, not about one Action, so it outlives the refused
17
- * Action, covers every later approval the same Session raises, and survives
18
- * leaving that Session and coming back. It is remembered per mount: a reload
19
- * or reopening the panel starts clean.
15
+ * The service refused an answer under the owner-or-Workspace-operator
16
+ * rule. That refusal is a fact about the viewer's Workspace role row,
17
+ * which an operator can raise while the page stays open, so the latch
18
+ * covers every later approval the same Session raises and survives
19
+ * leaving that Session and coming back — but `retry()` drops it and
20
+ * re-probes instead of treating one 403 as permanent for the mount.
20
21
  */
21
22
  respondForbidden: boolean;
22
23
  respond(actionId: string, optionId: string): Promise<void>;
@@ -0,0 +1,21 @@
1
+ import type { ManagedAgentProvider, ManagedAgentSessionSummary } from './managed-agent-provider';
2
+ interface CwdIntent {
3
+ sessionId: string;
4
+ workspaceId: string;
5
+ cwdRelative: string;
6
+ expectedContextRevision: number;
7
+ idempotencyKey: string;
8
+ operationId?: string;
9
+ }
10
+ export declare function useManagedCwdChange(provider: ManagedAgentProvider, clientId: string, sessionId: string | undefined, summary: ManagedAgentSessionSummary | undefined, refreshSummary: (signal?: AbortSignal) => Promise<ManagedAgentSessionSummary | undefined>): {
11
+ blocked: boolean;
12
+ submit: (cwdRelative: string, expectedContextRevision: number) => Promise<true | undefined>;
13
+ confirm: () => Promise<void>;
14
+ isBlocked: () => boolean;
15
+ key: string;
16
+ pending?: CwdIntent;
17
+ busy: boolean;
18
+ errorCode?: string;
19
+ target?: string;
20
+ };
21
+ export {};
@@ -1,12 +1,26 @@
1
1
  import type { ManagedAgentProvider, ManagedAgentSessionEvent, ManagedAgentSessionSummary } from './managed-agent-provider';
2
+ type SignalLeg = 'session' | 'transcript' | 'stream';
3
+ interface SignalEntry {
4
+ readonly message: string;
5
+ readonly final: boolean;
6
+ readonly seq: number;
7
+ readonly leg: SignalLeg;
8
+ readonly stall?: boolean;
9
+ }
10
+ export declare function failureRetryDelayMs(failures: number): number;
2
11
  export declare function useManagedSession(provider: ManagedAgentProvider, clientId: string, sessionId: string | undefined): {
12
+ stoppedReason: string | undefined;
13
+ stoppedLeg: SignalLeg | undefined;
14
+ error: string | undefined;
3
15
  loadingOlder: boolean;
4
16
  loadOlder: () => Promise<void>;
5
17
  reload: () => void;
18
+ refreshSummary: (signal?: AbortSignal) => Promise<ManagedAgentSessionSummary | undefined>;
6
19
  sessionId?: string;
7
20
  summary?: ManagedAgentSessionSummary;
8
21
  events: ManagedAgentSessionEvent[];
9
22
  olderCursor?: string;
10
23
  loading: boolean;
11
- error?: string;
24
+ signals?: Partial<Record<SignalLeg, SignalEntry>>;
12
25
  };
26
+ export {};
@@ -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;