src/vs/platform/agentHost/common/agentHostConnectionsService.ts

126 LOC · 126 covered · 0 uncovered · 1 ranges · 2050 concepts · 1 introducers · 1133 tests

File neighbourhood

The centred file is linked to every concept that introduces one of its ranges, every test that runs code from the file, and the gray connector concepts standing between those tests and the file's own introducer concepts. Undirected links join concepts to every file where they introduce source and concepts to the tests they introduce; arrows show specialization between the displayed concepts and bridge only concepts omitted from this view. Concept colors match the source ranges below; connector concepts have no source color and are shown in gray.

Focused file, its introducer and connector concepts, their introduced files, and tests that run code from the file

In the embedded map, ordinary wheel input scrolls the page; use the visible controls to zoom and drag to pan. Open the full-screen map for canvas navigation: wheel pans, Ctrl/Command plus wheel zooms, and arrow keys pan when this region is focused. On touch screens, open the full-screen map to pan or pinch. If JavaScript or WebGL is unavailable, use the related-file, concept, and source links on this page.

Graph controls are ready.

Interactive rendering requires JavaScript and WebGL. Use the related-file, concept, and source links on this page while the interactive map is unavailable.

1 > /*--------------------------------------------------------------------------------------------- chatSessionsService.ts ×12
2 > * Copyright (c) Microsoft Corporation. All rights reserved.
3 > * Licensed under the MIT License. See License.txt in the project root for license information.
4 > *--------------------------------------------------------------------------------------------*/
5 >
6 > import { Event } from '../../../base/common/event.js';
7 > import type { URI } from '../../../base/common/uri.js';
8 > import { createDecorator } from '../../instantiation/common/instantiation.js';
9 > import type { IAgentConnection } from './agentService.js';
10 >
11 > /**
12 > * Chat-session resource scheme prefix for the window's ambient/local agent
13 > * host: `agent-host-<provider>`.
14 > *
15 > * Remote agent host session schemes (`remote-<authority>-<provider>`) are
16 > * handled by `agentHostSessionType.ts` (`isRemoteAgentHostSessionType` and
17 > * friends), which also owns the authority disambiguation.
18 > */
19 > export const LOCAL_AGENT_HOST_SCHEME_PREFIX = 'agent-host-';
20 >
21 > /**
22 > * Reserved connection authority for the window's ambient/primary agent host.
23 > *
24 > * NOTE: "ambient" is not the same as "local". In a local window the ambient
25 > * host is the in-process utility agent host; in a window attached to a remote
26 > * authority the ambient host is itself remote (the `EditorRemoteAgentHostServiceClient`).
27 > * The `'local'` string is reserved/canonical for this ambient connection — it
28 > * is already used as the agent-host URI authority for in-window resources
29 > * (see `toAgentHostUri` in `agentHostUri.ts`).
30 > */
31 > export const AMBIENT_AGENT_HOST_AUTHORITY = 'local';
32 >
33 > /**
34 > * A descriptor for a single agent-host connection exposed by
35 > * {@link IAgentHostConnectionsService}. Covers both the window's ambient host
36 > * and every connected remote host with one uniform shape.
37 > */
38 > export interface IAgentHostConnectionInfo {
39 > /**
40 > * Sanitized connection authority. The ambient host uses
41 > * {@link AMBIENT_AGENT_HOST_AUTHORITY}; remotes use the authority derived
42 > * from their address via `agentHostAuthority`.
43 > */
44 > readonly authority: string;
45 > /** Raw remote address. `undefined` for the ambient host. */
46 > readonly address: string | undefined;
47 > /** Human-readable label for the connection. */
48 > readonly name: string;
49 > /**
50 > * `true` for the window's ambient/primary host. Remember this host may
51 > * itself be remote in a remote window — see {@link AMBIENT_AGENT_HOST_AUTHORITY}.
52 > */
53 > readonly isAmbient: boolean;
54 > /** The live connection, or `undefined` when not currently connected. */
55 > readonly connection: IAgentConnection | undefined;
56 > }
57 >
58 > /**
59 > * The result of resolving a chat-session resource to its backing agent host:
60 > * the owning {@link IAgentConnection} and the canonical backend agent-session
61 > * URI (`<provider>:/<rawId>`) used for protocol operations on that connection.
62 > */
63 > export interface IAgentHostSessionResolution {
64 > readonly connection: IAgentConnection;
65 > readonly backendSession: URI;
66 > }
67 >
68 > export const IAgentHostConnectionsService = createDecorator<IAgentHostConnectionsService>('agentHostConnectionsService');
69 >
70 > /**
71 > * A thin, read-only facade over the window's ambient agent host
72 > * (`IAgentHostService`) and the registry of remote agent hosts
73 > * (`IRemoteAgentHostService`), so consumers can enumerate and resolve
74 > * {@link IAgentConnection}s without branching on local-vs-remote or
75 > * fanning out over "1 ambient + N remote" themselves.
76 > *
77 > * This service deliberately does NOT expose lifecycle/management operations:
78 > * ambient-process concerns (restart, inspect, auth-pending) stay on
79 > * `IAgentHostService`, and remote-registry mutations (add/remove/reconnect/
80 > * upgrade) stay on `IRemoteAgentHostService`. This facade only answers
81 > * "which connections exist?" and "give me the connection for X".
82 > */
83 > export interface IAgentHostConnectionsService {
84 > readonly _serviceBrand: undefined;
85 >
86 > /** Fires when the set of connections changes (ambient lifecycle or remotes added/removed). */
87 > readonly onDidChangeConnections: Event<void>;
88 >
89 > /**
90 > * All known connections as `[ambient, ...remotes]`. The ambient entry is
91 > * always present with a live `connection`; only remote entries may have
92 > * `connection: undefined` (e.g. while connecting/disconnected). Remote
93 > * entries reflect the current `IRemoteAgentHostService` registry.
94 > */
95 > readonly connections: readonly IAgentHostConnectionInfo[];
96 >
97 > /** The window's ambient/primary connection (local, or the window-remote bridge). */
98 > readonly ambientConnection: IAgentConnection;
99 >
100 > /**
101 > * Resolves a live connection by sanitized authority, including
102 > * {@link AMBIENT_AGENT_HOST_AUTHORITY} for the ambient host. Returns
103 > * `undefined` when no connected host matches.
104 > */
105 > getConnectionByAuthority(authority: string): IAgentConnection | undefined;
106 >
107 > /**
108 > * Resolves a live remote connection by raw address. The ambient host has no
109 > * address and is never returned here — use {@link ambientConnection} or
110 > * {@link getConnectionByAuthority} with {@link AMBIENT_AGENT_HOST_AUTHORITY}.
111 > */
112 > getConnectionByAddress(address: string): IAgentConnection | undefined;
113 >
114 > /**
115 > * Resolves an agent-host chat-session resource to its owning connection and
116 > * backend session URI. Handles both local schemes
117 > * (`agent-host-<provider>`) — backed by the ambient connection — and remote
118 > * schemes (`remote-<authority>-<provider>`) — resolved against the live
119 > * remote registry. Returns `undefined` when the resource is not an
120 > * agent-host session, or when the matching remote host is not connected.
121 > *
122 > * NOTE: provisional/untitled sessions are a workbench concern and are NOT
123 > * handled here — callers that support them should resolve those first.
124 > */
125 > resolveSessionResource(sessionResource: URI): IAgentHostSessionResolution | undefined;
126 > }