@codingame/monaco-vscode-chat-cloud-service-override 0.0.0-stage → 38.0.7

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 (29) hide show
  1. package/common.d.ts +2 -0
  2. package/common.js +29 -0
  3. package/index.d.ts +3 -0
  4. package/index.js +9 -0
  5. package/package.json +52 -3
  6. package/session.d.ts +3 -0
  7. package/session.js +11 -0
  8. package/vscode/src/vs/sessions/contrib/chat/browser/newSession.d.ts +9 -0
  9. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/cloudAutomationStore.d.ts +67 -0
  10. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/cloudAutomationStore.js +695 -0
  11. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/cloudSandboxSessionConfig.d.ts +4 -0
  12. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/cloudSandboxSessionConfig.js +39 -0
  13. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessions.contribution.d.ts +1 -0
  14. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessions.contribution.js +59 -0
  15. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsActions.d.ts +1 -0
  16. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsActions.js +83 -0
  17. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsChangesets.d.ts +87 -0
  18. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsChangesets.js +176 -0
  19. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsProvider.d.ts +422 -0
  20. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsProvider.js +2444 -0
  21. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/githubCloudAutomationStore.d.ts +91 -0
  22. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/githubCloudAutomationStore.js +620 -0
  23. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHost.contribution.d.ts +1 -0
  24. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHost.contribution.js +5 -0
  25. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHostContribution.d.ts +46 -0
  26. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHostContribution.js +321 -0
  27. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxSessionsProvider.d.ts +104 -0
  28. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxSessionsProvider.js +345 -0
  29. package/README.md +0 -3
@@ -0,0 +1,321 @@
1
+
2
+ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
+ import { raceCancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
4
+ import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
5
+ import { CancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
6
+ import { MutableDisposable, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
7
+ import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
8
+ import { isWeb } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
9
+ import { isEqual } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
10
+ import { equalsIgnoreCase } from '@codingame/monaco-vscode-api/vscode/vs/base/common/strings';
11
+ import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
12
+ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
13
+ import { AgentSession } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agent';
14
+ import { IAgentHostService } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agentService.service';
15
+ import { ChangesetKind } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/changesetUri';
16
+ import { cloudSandboxAddress, CLOUD_SANDBOX_SESSION_SCHEME, CLOUD_SANDBOX_AGENT_PROVIDER, CloudSandboxAuthenticationRequiredError } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/cloudSandboxAgentHost';
17
+ import { ICloudSandboxAgentHostService, ICloudSandboxApiService } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/cloudSandboxAgentHost.service';
18
+ import { readCloudSandboxProjects } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/meta/copilotd/cloudSandboxProjectMeta';
19
+ import { IRemoteAgentHostService } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/remoteAgentHostService.service';
20
+ import { withSessionWorkspaceless } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/state/sessionState';
21
+ import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
22
+ import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
23
+ import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
24
+ import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service';
25
+ import { IWorkspaceTrustManagementService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspaceTrust.service';
26
+ import { IChatSessionsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatSessionsService.service';
27
+ import { CloudSandboxSessionContribution, discoveredSessionProject } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/remoteAgentHost/cloudSandboxSessionContribution';
28
+ import { IRemoteAgentHostConnectionCustomizationService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/remoteAgentHost/remoteAgentHostConnectionCustomization.service';
29
+ import { IChatEntitlementService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/chat/common/chatEntitlementService.service';
30
+ import { IHostService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/host/browser/host.service';
31
+ import { getGitHubRepositoryFromRemoteUrl } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/git/common/utils';
32
+ import { IAgentHostFilterService } from '@codingame/monaco-vscode-api/vscode/vs/sessions/services/agentHostFilter/common/agentHostFilter.service';
33
+ import { ISessionsProvidersService } from '@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/browser/sessionsProvidersService.service';
34
+ import { CloudSandboxSessionsProvider } from './cloudSandboxSessionsProvider.js';
35
+
36
+ const CLOUD_SANDBOX_CREATION_PROVIDER_ID = "cloud-sandbox-creation";
37
+ const CLOUD_SANDBOX_HOST_GROUP = {
38
+ id: "githubsandbox",
39
+ label: ( localize(5127, "GitHub Sandboxes")),
40
+ order: 1,
41
+ connectable: false,
42
+ sessionCreationProviderId: isWeb ? CLOUD_SANDBOX_CREATION_PROVIDER_ID : undefined
43
+ };
44
+ const CLOUD_SANDBOX_CONNECTION_LABELS = {
45
+ unavailableTitle: ( localize(5128, "Environment Offline")),
46
+ unavailable: ( localize(5129, "Environment offline.")),
47
+ connectingTitle: ( localize(5130, "Connecting to the Environment")),
48
+ connecting: ( localize(5131, "Connecting...")),
49
+ reconnecting: ( localize(5132, "Reconnecting...")),
50
+ reconnectingIn: seconds => ( localize(5133, "Reconnecting in {0}s", seconds)),
51
+ incompatibleTitle: ( localize(5134, "Cannot Connect to the Environment")),
52
+ incompatible: ( localize(
53
+ 5135,
54
+ "This environment is incompatible with this version of Visual Studio Code."
55
+ ))
56
+ };
57
+ let CloudSandboxAgentHostContribution = class CloudSandboxAgentHostContribution extends CloudSandboxSessionContribution {
58
+ static {
59
+ this.ID = "workbench.contrib.cloudSandboxAgentHost";
60
+ }
61
+ get supportsBackgroundConnection() {
62
+ return true;
63
+ }
64
+ constructor(
65
+ cloudSandboxService,
66
+ apiService,
67
+ _remoteService,
68
+ _sandboxConnectionCustomizations,
69
+ _sessionsProvidersService,
70
+ _agentHostFilterService,
71
+ configurationService,
72
+ instantiationService,
73
+ chatSessionsService,
74
+ logService,
75
+ chatEntitlementService,
76
+ hostService,
77
+ storageService,
78
+ workspaceTrustManagementService,
79
+ localAgentHostService
80
+ ) {
81
+ super(
82
+ cloudSandboxService,
83
+ apiService,
84
+ _remoteService,
85
+ _sandboxConnectionCustomizations,
86
+ configurationService,
87
+ instantiationService,
88
+ chatSessionsService,
89
+ logService,
90
+ chatEntitlementService,
91
+ hostService,
92
+ storageService,
93
+ workspaceTrustManagementService,
94
+ localAgentHostService
95
+ );
96
+ this._remoteService = _remoteService;
97
+ this._sandboxConnectionCustomizations = _sandboxConnectionCustomizations;
98
+ this._sessionsProvidersService = _sessionsProvidersService;
99
+ this._agentHostFilterService = _agentHostFilterService;
100
+ this._hostGroupRegistration = this._register(( new MutableDisposable()));
101
+ this._updateRegistration();
102
+ this._register(
103
+ this._agentHostFilterService.registerDiscoveryHandler(() => this._discoverAndSeed())
104
+ );
105
+ this._register(this._agentHostFilterService.onDidChange(() => {
106
+ if (this._agentHostFilterService.selectedHostId === CLOUD_SANDBOX_HOST_GROUP.id) {
107
+ void this._refreshIfStale();
108
+ }
109
+ }));
110
+ }
111
+ async prepareSession(environmentId, repoNwo, token) {
112
+ const address = cloudSandboxAddress(environmentId);
113
+ const connection = this._remoteService.getConnection(address);
114
+ if (!connection) {
115
+ throw ( new Error(( localize(5136, "The cloud sandbox connection is no longer available."))));
116
+ }
117
+ const store = ( new DisposableStore());
118
+ try {
119
+ const prepare = this._sandboxConnectionCustomizations.get(address)?.createSessionPreparation?.(connection, store);
120
+ if (!prepare) {
121
+ throw ( new Error(( localize(5137, "Cloud sandbox repository preparation is not registered."))));
122
+ }
123
+ await prepare(( URI.from({
124
+ scheme: Schemas.https,
125
+ authority: "github.com",
126
+ path: `/${repoNwo}`
127
+ })), token);
128
+ } finally {
129
+ store.dispose();
130
+ }
131
+ }
132
+ _updateRegistration() {
133
+ if (!this._isEnabled()) {
134
+ this._hostGroupRegistration.clear();
135
+ } else {
136
+ if (!this._hostGroupRegistration.value) {
137
+ this._hostGroupRegistration.value = this._agentHostFilterService.registerHostGroup(CLOUD_SANDBOX_HOST_GROUP);
138
+ }
139
+ void this._discoverAndSeed();
140
+ }
141
+ }
142
+ _ensureProvider(env) {
143
+ super._ensureProvider(env);
144
+ if (env.sessionId && env.taskId) {
145
+ const rawId = env.sessionId;
146
+ const address = cloudSandboxAddress(env.environmentId);
147
+ this._providerInstances.get(address)?.setTaskRenameHandler(rawId, title => this._renameSandboxSession(address, rawId, title));
148
+ this._providerInstances.get(address)?.setTaskArchiveHandler(
149
+ rawId,
150
+ archived => this._setSandboxSessionArchived(address, rawId, archived)
151
+ );
152
+ }
153
+ }
154
+ _createProvider(env, store) {
155
+ const provider = store.add(this._instantiateProvider({
156
+ address: cloudSandboxAddress(env.environmentId),
157
+ name: env.name,
158
+ connectOnDemand: async () => {
159
+ await this.connect({
160
+ environmentId: env.environmentId,
161
+ sessionId: env.sessionId,
162
+ name: env.name
163
+ });
164
+ },
165
+ disconnectOnDemand: () => this._disconnectEnvironment(cloudSandboxAddress(env.environmentId)),
166
+ deleteSessionsOnDemand: {
167
+ ownsSession: session => isEqual(
168
+ session,
169
+ AgentSession.uri(CLOUD_SANDBOX_SESSION_SCHEME, AgentSession.id(session))
170
+ ) && this._ownsSandboxSession(cloudSandboxAddress(env.environmentId), AgentSession.id(session)),
171
+ deleteSessions: sessions => this._deleteSandboxSession(
172
+ cloudSandboxAddress(env.environmentId),
173
+ sessions.map(session => AgentSession.id(session)),
174
+ rawId => provider.removeDeletedSession(rawId)
175
+ )
176
+ },
177
+ sessionSchemeAlias: {
178
+ ui: CLOUD_SANDBOX_AGENT_PROVIDER,
179
+ backend: CLOUD_SANDBOX_SESSION_SCHEME
180
+ },
181
+ defaultChangesetKind: ChangesetKind.Session,
182
+ omitHostFromWorkspaceLabel: true,
183
+ workspaceTypeIcon: Codicon.package,
184
+ readOnlyWhenDisconnected: true,
185
+ connectionLabels: CLOUD_SANDBOX_CONNECTION_LABELS,
186
+ hostGroup: CLOUD_SANDBOX_HOST_GROUP
187
+ }));
188
+ store.add(this._sessionsProvidersService.registerProvider(provider));
189
+ return provider;
190
+ }
191
+ _instantiateProvider(config) {
192
+ return this._instantiationService.createInstance(CloudSandboxSessionsProvider, config);
193
+ }
194
+ async provisionSession(request, token, progress) {
195
+ if (!this._isEnabled()) {
196
+ throw ( new Error("Copilot cloud sandbox connections are not enabled."));
197
+ }
198
+ const accountKey = await this._apiService.getAccountKey();
199
+ if (!this._isEnabled() || token.isCancellationRequested) {
200
+ throw ( new CancellationError());
201
+ }
202
+ if (!accountKey) {
203
+ throw ( new CloudSandboxAuthenticationRequiredError());
204
+ }
205
+ this._restoreAccount(accountKey);
206
+ const enabledToken = this._enabledCts.token;
207
+ progress?.report(( localize(5138, "Setting up cloud container")));
208
+ const provisioningStartedAt = Date.now();
209
+ const created = await this._apiService.createSession(request, token);
210
+ const name = request.repoNwo ?? created.taskId;
211
+ const address = cloudSandboxAddress(created.environmentId);
212
+ if (!this._isEnabled() || token.isCancellationRequested || enabledToken.isCancellationRequested) {
213
+ throw ( new CancellationError());
214
+ }
215
+ this._provisioning.add(address);
216
+ let seededProvider;
217
+ let connectionAttempt;
218
+ try {
219
+ const now = Date.now();
220
+ this._ensureProvider({
221
+ ...created,
222
+ name,
223
+ repoName: request.repoNwo,
224
+ hasRepository: request.repoNwo !== undefined,
225
+ updatedAt: ( new Date(now)).toISOString()
226
+ });
227
+ const provider = this._providerInstances.get(address);
228
+ if (!provider) {
229
+ throw ( new Error(
230
+ `No sessions provider was registered for sandbox environment ${created.environmentId}`
231
+ ));
232
+ }
233
+ const project = discoveredSessionProject(request.repoNwo);
234
+ provider.seedProvisionalSession({
235
+ session: AgentSession.uri(CLOUD_SANDBOX_SESSION_SCHEME, created.sessionId),
236
+ provider: CLOUD_SANDBOX_AGENT_PROVIDER,
237
+ _meta: withSessionWorkspaceless(undefined, request.repoNwo === undefined),
238
+ startTime: now,
239
+ modifiedTime: now,
240
+ summary: name,
241
+ ...(project ? {
242
+ project
243
+ } : {})
244
+ });
245
+ seededProvider = provider;
246
+ this._persistInventory();
247
+ progress?.report(( localize(5139, "Connecting to cloud container")));
248
+ connectionAttempt = this.connect({
249
+ environmentId: created.environmentId,
250
+ sessionId: created.sessionId,
251
+ name,
252
+ connectionSource: "created",
253
+ provisioningStartedAt
254
+ });
255
+ await raceCancellationError(connectionAttempt, token);
256
+ if (token.isCancellationRequested || !this._isEnabled() || this._providerInstances.get(address) !== provider) {
257
+ throw ( new CancellationError());
258
+ }
259
+ const session = provider.getCachedSession(created.sessionId);
260
+ if (!session) {
261
+ throw ( new Error(
262
+ `Provisioned sandbox session ${created.sessionId} did not surface on its provider`
263
+ ));
264
+ }
265
+ return {
266
+ ...created,
267
+ provider,
268
+ session
269
+ };
270
+ } catch (error) {
271
+ if (seededProvider && this._providerInstances.get(address) === seededProvider) {
272
+ seededProvider.publishWithheldSession(created.sessionId);
273
+ }
274
+ throw error;
275
+ } finally {
276
+ const releaseProvisioning = () => {
277
+ this._provisioning.delete(address);
278
+ };
279
+ if (connectionAttempt) {
280
+ void connectionAttempt.then(releaseProvisioning, releaseProvisioning);
281
+ } else {
282
+ releaseProvisioning();
283
+ }
284
+ }
285
+ }
286
+ trackSessionCreationProgress(environmentId, repoNwo, progress) {
287
+ const store = ( new DisposableStore());
288
+ const connection = this._remoteService.getConnection(cloudSandboxAddress(environmentId));
289
+ if (!connection) {
290
+ return store;
291
+ }
292
+ let cloningProjectId;
293
+ const update = () => {
294
+ const state = connection.rootState.value;
295
+ if (!state || state instanceof Error) {
296
+ return;
297
+ }
298
+ const projects = readCloudSandboxProjects(state)?.filter(project => {
299
+ const remote = project.remoteUrl && getGitHubRepositoryFromRemoteUrl(project.remoteUrl, ["github.com"]);
300
+ return remote && equalsIgnoreCase(`${remote.owner}/${remote.repo}`, repoNwo);
301
+ });
302
+ const project = projects?.find(project => project.status === "ready") ?? projects?.find(project => project.status === "cloning") ?? projects?.[0];
303
+ if (project?.status === "cloning") {
304
+ cloningProjectId = project.id;
305
+ progress.report(project.progress === undefined ? ( localize(5140, "Cloning repository")) : ( localize(5141, "Cloning repository ({0}%)", Math.round(project.progress))));
306
+ } else if (project?.status === "ready") {
307
+ progress.report(( localize(5142, "Starting Copilot agent")));
308
+ store.dispose();
309
+ } else if (project?.status === "failed" && project.id === cloningProjectId) {
310
+ progress.report(( localize(5143, "Repository cloning failed")));
311
+ store.dispose();
312
+ }
313
+ };
314
+ store.add(connection.rootState.onDidChange(update));
315
+ update();
316
+ return store;
317
+ }
318
+ };
319
+ CloudSandboxAgentHostContribution = ( __decorate([( __param(0, ICloudSandboxAgentHostService)), ( __param(1, ICloudSandboxApiService)), ( __param(2, IRemoteAgentHostService)), ( __param(3, IRemoteAgentHostConnectionCustomizationService)), ( __param(4, ISessionsProvidersService)), ( __param(5, IAgentHostFilterService)), ( __param(6, IConfigurationService)), ( __param(7, IInstantiationService)), ( __param(8, IChatSessionsService)), ( __param(9, ILogService)), ( __param(10, IChatEntitlementService)), ( __param(11, IHostService)), ( __param(12, IStorageService)), ( __param(13, IWorkspaceTrustManagementService)), ( __param(14, IAgentHostService))], CloudSandboxAgentHostContribution));
320
+
321
+ export { CLOUD_SANDBOX_CREATION_PROVIDER_ID, CloudSandboxAgentHostContribution };
@@ -0,0 +1,104 @@
1
+ import { DisposableStore } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
2
+ import { IObservable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/observable";
3
+ import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
4
+ import { type IAgentSessionMetadata } from "@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agent";
5
+ import type { ISession } from "@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/common/session";
6
+ import type { AgentHostSessionAdapter } from "@codingame/monaco-vscode-api/vscode/vs/sessions/contrib/providers/agentHost/browser/baseAgentHostSessionsProvider";
7
+ import { RemoteAgentHostSessionsProvider } from "@codingame/monaco-vscode-api/vscode/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostSessionsProvider";
8
+ import { CancellationToken } from "@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation";
9
+ /**
10
+ * Sessions provider for a Copilot cloud sandbox.
11
+ *
12
+ * Adds the handling for sessions this client provisioned but the host has not materialized yet:
13
+ * Mission Control mints the session id and returns it before the sandbox is even awake, so such a
14
+ * session is real, addressable, and unknown to the host all at once.
15
+ */
16
+ export declare class CloudSandboxSessionsProvider extends RemoteAgentHostSessionsProvider {
17
+ private readonly _configurationUnavailable;
18
+ protected get supportsOfflineDrafts(): boolean;
19
+ get environment(): {
20
+ id: string;
21
+ label: string;
22
+ };
23
+ readonly supportsWorkspaceSelection = false;
24
+ /** Sandboxes are per-session environments, not persistent Automation hosts. */
25
+ get automations(): undefined;
26
+ protected _adoptCachedSessionMeta(meta: IAgentSessionMetadata): IAgentSessionMetadata | undefined;
27
+ private _taskRenameHandler;
28
+ private _taskArchiveHandler;
29
+ private readonly _archiveSequencer;
30
+ /**
31
+ * Provisional sessions kept out of {@link getSessions} because the caller is still showing a
32
+ * placeholder row for them. They stay reachable by resource, so opening one still works.
33
+ */
34
+ private readonly _withheldSessions;
35
+ /**
36
+ * Backend session key → deadline after which eviction resumes, or `undefined` while the clock has not
37
+ * started. It starts when a connected host first omits the session, not at seed time, because
38
+ * waking a sandbox can take minutes.
39
+ */
40
+ private readonly _provisionalSessions;
41
+ private readonly _pendingSessionTitles;
42
+ /** How long a provisional session resists eviction after the host first omits it. */
43
+ static readonly PROVISIONAL_GRACE_MS: number;
44
+ /** Resolves creation options without requiring the host to know the preallocated session yet. */
45
+ resolveInitialSessionConfig(sessionId: string, values: Record<string, unknown>, token: CancellationToken): Promise<Record<string, unknown>>;
46
+ protected _adapterOptions(): {
47
+ readOnly: IObservable<boolean>;
48
+ allowOfflineDrafts: import("@codingame/monaco-vscode-api/vscode/vs/base/common/observable").IObservableWithChange<boolean, void>;
49
+ defaultChangesetKind: import("@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/changesetUri").ChangesetKind.Branch | import("@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/changesetUri").ChangesetKind.Uncommitted | import("@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/changesetUri").ChangesetKind.Session | undefined;
50
+ buildWorkspace: (project: IAgentSessionMetadata["project"], workingDirectories: readonly URI[] | undefined, gitHubInfo: IObservable<import("@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/common/session").IGitHubInfo | undefined>, gitState: import("@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/state/sessionState").ISessionGitState | undefined) => import("@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/common/session").ISessionWorkspace | undefined;
51
+ preserveStatusWhenDisconnected: boolean;
52
+ useSessionTitleForDefaultChat: boolean;
53
+ isSessionTitlePlaceholder: (title: string, session: URI) => boolean;
54
+ externalSessionState: (resource: URI, store: DisposableStore) => IObservable<boolean>;
55
+ };
56
+ private _localSessionStorageKey;
57
+ protected updateAdapter(adapter: AgentHostSessionAdapter, meta: IAgentSessionMetadata): boolean;
58
+ protected _onBackendSessionRemoved(rawId: string): void;
59
+ /** Reopened cached chats also need a background connection, even when content activation is skipped. */
60
+ prepareSessionForOpen(): Promise<void>;
61
+ isSessionConfigResolving(sessionId: string): IObservable<boolean>;
62
+ setSessionConfigValue(sessionId: string, property: string, value: unknown): Promise<void>;
63
+ replaceSessionConfig(sessionId: string, values: Record<string, unknown>): Promise<void>;
64
+ private _assertConfigurationAvailable;
65
+ protected _resolveArchivedState(sessionKey: string, isArchived: boolean): boolean;
66
+ /** Bind the discovered session's Mission Control archive operation. */
67
+ setTaskArchiveHandler(rawId: string, setArchived: (archived: boolean) => Promise<void>): void;
68
+ /** Bind the discovered session's Mission Control rename operation. */
69
+ setTaskRenameHandler(rawId: string, rename: (title: string) => Promise<void>): void;
70
+ /** Preserve the initial title without letting a transient task metadata failure block the first turn. */
71
+ setInitialSessionTitle(sessionId: string, title: string): Promise<void>;
72
+ renameSession(sessionId: string, title: string): Promise<void>;
73
+ private _renameSession;
74
+ archiveSession(sessionId: string): Promise<void>;
75
+ unarchiveSession(sessionId: string): Promise<void>;
76
+ private _setArchived;
77
+ setSessionArchived(rawId: string, archived: boolean): void;
78
+ /**
79
+ * Seed a session this client just provisioned. It is cached so a later discovery pass
80
+ * reconciles against it rather than adding a second entry, but stays out of the sessions list
81
+ * until {@link publishWithheldSession} and resists eviction until the host lists it.
82
+ */
83
+ seedProvisionalSession(rawMeta: IAgentSessionMetadata): void;
84
+ /**
85
+ * Reveal a session seeded by {@link seedProvisionalSession}, so {@link getSessions} returns it.
86
+ *
87
+ * Pass `announce: false` when the caller immediately fires its own change event covering this
88
+ * session: the list re-reads {@link getSessions} on any change, so a single event can both drop
89
+ * a placeholder row and reveal this one.
90
+ */
91
+ publishWithheldSession(rawId: string, options?: {
92
+ announce?: boolean;
93
+ }): void;
94
+ /**
95
+ * Look up a cached session by raw id, **including** ones withheld from {@link getSessions},
96
+ * which callers that seeded a session need before it is listed.
97
+ */
98
+ getCachedSession(rawId: string): ISession | undefined;
99
+ getSessionModifiedTime(rawId: string): number | undefined;
100
+ removeDeletedSession(rawId: string): void;
101
+ getSessions(): ISession[];
102
+ protected _isSessionEvictable(rawId: string): boolean;
103
+ protected _onHostListedSessions(rawIds: ReadonlySet<string>): void;
104
+ }