@theia/dev-container 1.76.0-next.7 → 1.77.0-next.0

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 (58) hide show
  1. package/lib/electron-browser/container-connection-contribution.d.ts +2 -0
  2. package/lib/electron-browser/container-connection-contribution.d.ts.map +1 -1
  3. package/lib/electron-browser/container-connection-contribution.js +12 -1
  4. package/lib/electron-browser/container-connection-contribution.js.map +1 -1
  5. package/lib/electron-browser/container-output-provider.d.ts +5 -0
  6. package/lib/electron-browser/container-output-provider.d.ts.map +1 -1
  7. package/lib/electron-browser/container-output-provider.js +11 -0
  8. package/lib/electron-browser/container-output-provider.js.map +1 -1
  9. package/lib/electron-browser/dev-container-attach-screen.d.ts +52 -0
  10. package/lib/electron-browser/dev-container-attach-screen.d.ts.map +1 -0
  11. package/lib/electron-browser/dev-container-attach-screen.js +142 -0
  12. package/lib/electron-browser/dev-container-attach-screen.js.map +1 -0
  13. package/lib/electron-browser/dev-container-attach-screen.spec.d.ts +2 -0
  14. package/lib/electron-browser/dev-container-attach-screen.spec.d.ts.map +1 -0
  15. package/lib/electron-browser/dev-container-attach-screen.spec.js +51 -0
  16. package/lib/electron-browser/dev-container-attach-screen.spec.js.map +1 -0
  17. package/lib/electron-browser/dev-container-frontend-module.d.ts +1 -0
  18. package/lib/electron-browser/dev-container-frontend-module.d.ts.map +1 -1
  19. package/lib/electron-browser/dev-container-frontend-module.js +3 -0
  20. package/lib/electron-browser/dev-container-frontend-module.js.map +1 -1
  21. package/lib/electron-browser/dev-container-startup-contribution.d.ts +31 -1
  22. package/lib/electron-browser/dev-container-startup-contribution.d.ts.map +1 -1
  23. package/lib/electron-browser/dev-container-startup-contribution.js +114 -9
  24. package/lib/electron-browser/dev-container-startup-contribution.js.map +1 -1
  25. package/lib/electron-browser/dev-container-startup-contribution.spec.d.ts +2 -0
  26. package/lib/electron-browser/dev-container-startup-contribution.spec.d.ts.map +1 -0
  27. package/lib/electron-browser/dev-container-startup-contribution.spec.js +199 -0
  28. package/lib/electron-browser/dev-container-startup-contribution.spec.js.map +1 -0
  29. package/lib/electron-common/container-output-provider.d.ts +6 -0
  30. package/lib/electron-common/container-output-provider.d.ts.map +1 -1
  31. package/lib/electron-common/remote-container-connection-provider.d.ts +10 -0
  32. package/lib/electron-common/remote-container-connection-provider.d.ts.map +1 -1
  33. package/lib/electron-main/dev-container-claim-contribution.d.ts +13 -0
  34. package/lib/electron-main/dev-container-claim-contribution.d.ts.map +1 -0
  35. package/lib/electron-main/dev-container-claim-contribution.js +38 -0
  36. package/lib/electron-main/dev-container-claim-contribution.js.map +1 -0
  37. package/lib/electron-main/dev-container-electron-main-module.d.ts +4 -0
  38. package/lib/electron-main/dev-container-electron-main-module.d.ts.map +1 -0
  39. package/lib/electron-main/dev-container-electron-main-module.js +25 -0
  40. package/lib/electron-main/dev-container-electron-main-module.js.map +1 -0
  41. package/lib/electron-node/remote-container-connection-provider.d.ts +1 -1
  42. package/lib/electron-node/remote-container-connection-provider.d.ts.map +1 -1
  43. package/lib/electron-node/remote-container-connection-provider.js +10 -5
  44. package/lib/electron-node/remote-container-connection-provider.js.map +1 -1
  45. package/package.json +9 -8
  46. package/src/electron-browser/container-connection-contribution.ts +11 -1
  47. package/src/electron-browser/container-output-provider.ts +11 -0
  48. package/src/electron-browser/dev-container-attach-screen.spec.ts +60 -0
  49. package/src/electron-browser/dev-container-attach-screen.tsx +180 -0
  50. package/src/electron-browser/dev-container-frontend-module.ts +3 -0
  51. package/src/electron-browser/dev-container-startup-contribution.spec.ts +245 -0
  52. package/src/electron-browser/dev-container-startup-contribution.ts +113 -15
  53. package/src/electron-browser/style/dev-container-attach-screen.css +75 -0
  54. package/src/electron-common/container-output-provider.ts +6 -0
  55. package/src/electron-common/remote-container-connection-provider.ts +10 -0
  56. package/src/electron-main/dev-container-claim-contribution.ts +34 -0
  57. package/src/electron-main/dev-container-electron-main-module.ts +24 -0
  58. package/src/electron-node/remote-container-connection-provider.ts +10 -5
@@ -21,22 +21,65 @@ const inversify_1 = require("@theia/core/shared/inversify");
21
21
  const remote_container_connection_provider_1 = require("../electron-common/remote-container-connection-provider");
22
22
  const remote_registry_contribution_1 = require("@theia/remote/lib/electron-browser/remote-registry-contribution");
23
23
  const core_1 = require("@theia/core");
24
+ const launch_arguments_1 = require("@theia/core/lib/common/launch-arguments");
25
+ const window_launch_args_1 = require("@theia/core/lib/browser/window/window-launch-args");
24
26
  const remote_preferences_1 = require("@theia/remote/lib/electron-common/remote-preferences");
27
+ const container_output_provider_1 = require("./container-output-provider");
28
+ const dev_container_attach_screen_1 = require("./dev-container-attach-screen");
29
+ const remote_cli_args_collector_1 = require("@theia/remote/lib/electron-browser/remote-cli-args-collector");
25
30
  let DevContainerStartupContribution = class DevContainerStartupContribution extends remote_registry_contribution_1.AbstractRemoteRegistryContribution {
26
31
  registerRemoteCommands() {
27
32
  // no commands to register — this contribution only handles startup
28
33
  }
29
34
  onStart() {
35
+ // For a CLI-driven attach the window is opened empty and reloads into the container once the
36
+ // attach completes. Show the "attaching" screen from the first paint so the user never
37
+ // interacts with the transient local window, before the (possibly RPC-bound) container id is
38
+ // even resolved.
39
+ if (this.isAttachPending()) {
40
+ this.attachScreen.showAttaching();
41
+ }
30
42
  this.handleStartupAttach();
31
43
  }
32
44
  async handleStartupAttach() {
45
+ let args;
33
46
  try {
34
- const args = await this.connectionProvider.getAttachContainerArgs();
35
- if (!args) {
36
- return;
47
+ args = await this.resolveAttachArgs();
48
+ }
49
+ catch (e) {
50
+ // A rejection here (e.g. failing to redeem the launch args or reach the backend) must not
51
+ // escape as an unhandled rejection and leave the attach screen stuck on "Preparing to attach".
52
+ this.logger.error('CLI: Failed to resolve attach arguments during startup:', e);
53
+ const message = e instanceof Error ? e.message : String(e);
54
+ if (this.isAttachPending()) {
55
+ this.attachScreen.reportError(message, {
56
+ retry: () => this.handleStartupAttach(),
57
+ close: () => this.disposeAttachScreen()
58
+ });
37
59
  }
38
- const { containerId, scanForDevJson } = args;
60
+ else {
61
+ // No attach screen is up, so fall back to a notification.
62
+ this.disposeAttachScreen();
63
+ this.messageService.error(core_1.nls.localize('theia/remote/dev-container/cliAttachError', 'Failed to attach to container: {0}', message));
64
+ }
65
+ return;
66
+ }
67
+ if (!args) {
68
+ // Not attaching after all (e.g. a second-instance window without --attach-container):
69
+ // make sure a preliminary screen is not left up.
70
+ this.disposeAttachScreen();
71
+ return;
72
+ }
73
+ await this.runStartupAttach(args);
74
+ }
75
+ async runStartupAttach(args) {
76
+ const { containerId, scanForDevJson } = args;
77
+ this.attachScreen.showAttaching(containerId);
78
+ // Surface the backend's live status messages (RemoteStatusReport) on the attach screen.
79
+ const statusSubscription = this.containerOutputProvider.onDidReportStatus(message => this.attachScreen.reportStage(message));
80
+ try {
39
81
  this.logger.info(`CLI: --attach-container ${containerId}, initiating attach from frontend...`);
82
+ this.attachScreen.reportStage(core_1.nls.localize('theia/remote/dev-container/attachScreen/locating', 'Locating container {0}...', containerId));
40
83
  const containers = await this.connectionProvider.listRunningContainers();
41
84
  // Match by ID prefix (either direction — user may pass a short prefix or a full 64-char ID
42
85
  // while listRunningContainers returns 12-char truncated IDs) or exact name.
@@ -46,29 +89,75 @@ let DevContainerStartupContribution = class DevContainerStartupContribution exte
46
89
  }
47
90
  const target = matches[0];
48
91
  if (!target) {
49
- const msg = core_1.nls.localize('theia/remote/dev-container/cliContainerNotFound', 'Container "{0}" not found or not running.', containerId);
50
- this.logger.error(`CLI: ${msg}`);
51
- this.messageService.error(msg);
52
- return;
92
+ throw new Error(core_1.nls.localize('theia/remote/dev-container/cliContainerNotFound', 'Container "{0}" not found or not running.', containerId));
53
93
  }
94
+ this.attachScreen.reportStage(core_1.nls.localize('theia/remote/dev-container/attachScreen/preparingWorkspace', 'Preparing workspace...'));
54
95
  const candidates = await this.connectionProvider.getWorkspaceCandidates(target.id);
55
96
  const workspacePath = candidates.length > 0 ? candidates[0].path : '/';
56
97
  const devcontainerFile = scanForDevJson
57
98
  ? await this.connectionProvider.scanForDevContainerConfig(target.id, workspacePath)
58
99
  : undefined;
100
+ this.attachScreen.reportStage(core_1.nls.localize('theia/remote/dev-container/attachScreen/starting', 'Starting the application inside the container...'));
59
101
  const result = await this.connectionProvider.attachToContainer({
60
102
  containerId: target.id,
61
103
  workspacePath,
62
104
  devcontainerFile,
63
105
  nodeDownloadTemplate: this.remotePreferences['remote.nodeDownloadTemplate'],
106
+ additionalArgs: await this.remoteCliArgsCollector.collect(),
64
107
  });
65
108
  this.logger.info(`CLI: startup attach ready, proxy on port ${result.port}, workspace: ${result.workspacePath}`);
109
+ // Reloads the window into the container; the attach screen is torn down by the navigation.
66
110
  this.openRemote(result.port, false, result.workspacePath);
67
111
  }
68
112
  catch (e) {
69
113
  this.logger.error('CLI: Failed to attach to container during startup:', e);
70
- this.messageService.error(core_1.nls.localize('theia/remote/dev-container/cliAttachError', 'Failed to attach to container: {0}', e instanceof Error ? e.message : String(e)));
114
+ const message = e instanceof Error ? e.message : String(e);
115
+ this.attachScreen.reportError(message, {
116
+ retry: () => this.runStartupAttach(args),
117
+ close: () => this.attachScreen.dispose()
118
+ });
71
119
  }
120
+ finally {
121
+ statusSubscription.dispose();
122
+ }
123
+ }
124
+ /**
125
+ * Whether this window was opened for a CLI-driven attach. Decided from the window's own launch
126
+ * options, which are available synchronously from the first paint, rather than from a flag in
127
+ * the URL: only `@theia/dev-container` knows what `--attach-container` means.
128
+ */
129
+ isAttachPending() {
130
+ const args = this.launchArgs.getLaunchArgs();
131
+ return args !== undefined && launch_arguments_1.LaunchArguments.lastValue(args, 'attach-container') !== undefined;
132
+ }
133
+ /**
134
+ * Disposes the attach screen, but only when it is actually on screen. The screen is a singleton,
135
+ * so disposing it on the many windows that never attach would leave a disposed widget behind
136
+ * that a later {@link DevContainerAttachScreen.showAttaching} could no longer attach.
137
+ */
138
+ disposeAttachScreen() {
139
+ if (this.attachScreen.isAttached) {
140
+ this.attachScreen.dispose();
141
+ }
142
+ }
143
+ /**
144
+ * Resolves the container to attach to on startup.
145
+ *
146
+ * A forwarded (second-instance) launch carries its CLI options, provided by the trusted main
147
+ * process. For such windows those options are the only source, because the shared backend still
148
+ * reflects the original cold-start launch and cannot distinguish between windows. A cold-start
149
+ * window has no forwarded options and reads them from the backend instead.
150
+ */
151
+ async resolveAttachArgs() {
152
+ const forwarded = this.launchArgs.getLaunchArgs();
153
+ if (forwarded !== undefined) {
154
+ const containerId = launch_arguments_1.LaunchArguments.lastValue(forwarded, 'attach-container');
155
+ if (!containerId) {
156
+ return undefined;
157
+ }
158
+ return { containerId, scanForDevJson: !launch_arguments_1.LaunchArguments.isNegated(forwarded, 'dev-json') };
159
+ }
160
+ return this.connectionProvider.getAttachContainerArgs();
72
161
  }
73
162
  };
74
163
  exports.DevContainerStartupContribution = DevContainerStartupContribution;
@@ -89,6 +178,22 @@ tslib_1.__decorate([
89
178
  (0, inversify_1.inject)(remote_preferences_1.RemotePreferences),
90
179
  tslib_1.__metadata("design:type", Object)
91
180
  ], DevContainerStartupContribution.prototype, "remotePreferences", void 0);
181
+ tslib_1.__decorate([
182
+ (0, inversify_1.inject)(remote_cli_args_collector_1.RemoteCliArgsCollector),
183
+ tslib_1.__metadata("design:type", remote_cli_args_collector_1.RemoteCliArgsCollector)
184
+ ], DevContainerStartupContribution.prototype, "remoteCliArgsCollector", void 0);
185
+ tslib_1.__decorate([
186
+ (0, inversify_1.inject)(container_output_provider_1.ContainerOutputProvider),
187
+ tslib_1.__metadata("design:type", container_output_provider_1.ContainerOutputProvider)
188
+ ], DevContainerStartupContribution.prototype, "containerOutputProvider", void 0);
189
+ tslib_1.__decorate([
190
+ (0, inversify_1.inject)(dev_container_attach_screen_1.DevContainerAttachScreen),
191
+ tslib_1.__metadata("design:type", dev_container_attach_screen_1.DevContainerAttachScreen)
192
+ ], DevContainerStartupContribution.prototype, "attachScreen", void 0);
193
+ tslib_1.__decorate([
194
+ (0, inversify_1.inject)(window_launch_args_1.WindowLaunchArgs),
195
+ tslib_1.__metadata("design:type", Object)
196
+ ], DevContainerStartupContribution.prototype, "launchArgs", void 0);
92
197
  exports.DevContainerStartupContribution = DevContainerStartupContribution = tslib_1.__decorate([
93
198
  (0, inversify_1.injectable)()
94
199
  ], DevContainerStartupContribution);
@@ -1 +1 @@
1
- {"version":3,"file":"dev-container-startup-contribution.js","sourceRoot":"","sources":["../../src/electron-browser/dev-container-startup-contribution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev-container-startup-contribution.js","sourceRoot":"","sources":["../../src/electron-browser/dev-container-startup-contribution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dev-container-startup-contribution.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-container-startup-contribution.spec.d.ts","sourceRoot":"","sources":["../../src/electron-browser/dev-container-startup-contribution.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource GmbH and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const jsdom_1 = require("@theia/core/lib/browser/test/jsdom");
19
+ let disableJSDOM = (0, jsdom_1.enableJSDOM)();
20
+ const chai_1 = require("chai");
21
+ const launchArgs = (values) => ({ values, negated: [] });
22
+ const dev_container_startup_contribution_1 = require("./dev-container-startup-contribution");
23
+ disableJSDOM();
24
+ class TestDevContainerStartupContribution extends dev_container_startup_contribution_1.DevContainerStartupContribution {
25
+ constructor() {
26
+ super(...arguments);
27
+ this.backendCalls = 0;
28
+ }
29
+ resolve() {
30
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+ this.launchArgs = { getLaunchArgs: () => this.forwardedArgs };
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ this.connectionProvider = {
34
+ getAttachContainerArgs: async () => {
35
+ this.backendCalls++;
36
+ return this.backendArgs;
37
+ }
38
+ };
39
+ return this.resolveAttachArgs();
40
+ }
41
+ }
42
+ describe('DevContainerStartupContribution#resolveAttachArgs', () => {
43
+ before(() => disableJSDOM = (0, jsdom_1.enableJSDOM)());
44
+ after(() => disableJSDOM());
45
+ let contribution;
46
+ beforeEach(() => {
47
+ contribution = new TestDevContainerStartupContribution();
48
+ });
49
+ it('reads the container from the backend on a cold-start window (no forwarded options)', async () => {
50
+ contribution.forwardedArgs = undefined;
51
+ contribution.backendArgs = { containerId: 'A', scanForDevJson: true };
52
+ const result = await contribution.resolve();
53
+ (0, chai_1.expect)(result).to.deep.equal({ containerId: 'A', scanForDevJson: true });
54
+ (0, chai_1.expect)(contribution.backendCalls).to.equal(1);
55
+ });
56
+ it('reads the container from the forwarded options on a second-instance window', async () => {
57
+ contribution.forwardedArgs = launchArgs({ 'attach-container': ['B'] });
58
+ contribution.backendArgs = { containerId: 'A', scanForDevJson: true };
59
+ const result = await contribution.resolve();
60
+ (0, chai_1.expect)(result).to.deep.equal({ containerId: 'B', scanForDevJson: true });
61
+ // The stale backend value (from the first launch) must not be consulted.
62
+ (0, chai_1.expect)(contribution.backendCalls).to.equal(0);
63
+ });
64
+ it('honors --no-dev-json in the forwarded options', async () => {
65
+ contribution.forwardedArgs = { values: { 'attach-container': ['B'] }, negated: ['dev-json'] };
66
+ const result = await contribution.resolve();
67
+ (0, chai_1.expect)(result).to.deep.equal({ containerId: 'B', scanForDevJson: false });
68
+ });
69
+ it('does not attach for a second-instance window without --attach-container', async () => {
70
+ contribution.forwardedArgs = launchArgs({ 'session-preference': ['foo=1'] });
71
+ contribution.backendArgs = { containerId: 'A', scanForDevJson: true };
72
+ const result = await contribution.resolve();
73
+ (0, chai_1.expect)(result).to.be.undefined;
74
+ (0, chai_1.expect)(contribution.backendCalls).to.equal(0);
75
+ });
76
+ });
77
+ class AttachHarness extends dev_container_startup_contribution_1.DevContainerStartupContribution {
78
+ constructor() {
79
+ super(...arguments);
80
+ this.stages = [];
81
+ this.errors = [];
82
+ this.disposeCount = 0;
83
+ this.showCount = 0;
84
+ this.openRemoteCalls = [];
85
+ }
86
+ setup(opts) {
87
+ /* eslint-disable @typescript-eslint/no-explicit-any */
88
+ this.logger = { info: () => { }, warn: () => { }, error: () => { } };
89
+ this.attachScreen = {
90
+ showAttaching: () => { this.showCount++; },
91
+ reportStage: (message) => this.stages.push(message),
92
+ reportError: (message, actions) => this.errors.push({ message, actions }),
93
+ dispose: () => { this.disposeCount++; }
94
+ };
95
+ this.containerOutputProvider = {
96
+ onDidReportStatus: (cb) => {
97
+ this.statusListener = cb;
98
+ return { dispose: () => { this.statusListener = undefined; } };
99
+ }
100
+ };
101
+ this.remotePreferences = {};
102
+ this.remoteCliArgsCollector = { collect: async () => [] };
103
+ this.connectionProvider = {
104
+ listRunningContainers: async () => opts.containers ?? [],
105
+ getWorkspaceCandidates: async () => [],
106
+ scanForDevContainerConfig: async () => undefined,
107
+ attachToContainer: async () => {
108
+ if (opts.statusDuringAttach) {
109
+ this.statusListener?.(opts.statusDuringAttach);
110
+ }
111
+ if (opts.attachResult instanceof Error) {
112
+ throw opts.attachResult;
113
+ }
114
+ return opts.attachResult;
115
+ }
116
+ };
117
+ /* eslint-enable @typescript-eslint/no-explicit-any */
118
+ }
119
+ openRemote(port) {
120
+ this.openRemoteCalls.push(port);
121
+ }
122
+ run(args) {
123
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
124
+ return this.runStartupAttach(args);
125
+ }
126
+ }
127
+ describe('DevContainerStartupContribution#runStartupAttach', () => {
128
+ before(() => disableJSDOM = (0, jsdom_1.enableJSDOM)());
129
+ after(() => disableJSDOM());
130
+ const runningB = { id: 'abc123def456', name: 'B', image: 'img', status: 'running', created: 0 };
131
+ it('reloads into the container on success without showing an error', async () => {
132
+ const harness = new AttachHarness();
133
+ harness.setup({ containers: [runningB], attachResult: { port: '9000', workspacePath: '/w', containerId: 'abc123def456' } });
134
+ await harness.run({ containerId: 'B', scanForDevJson: false });
135
+ (0, chai_1.expect)(harness.openRemoteCalls).to.deep.equal(['9000']);
136
+ (0, chai_1.expect)(harness.errors).to.have.lengthOf(0);
137
+ (0, chai_1.expect)(harness.showCount).to.be.greaterThan(0);
138
+ });
139
+ it('forwards backend status messages to the attach screen', async () => {
140
+ const harness = new AttachHarness();
141
+ harness.setup({
142
+ containers: [runningB],
143
+ attachResult: { port: '9000', workspacePath: '/w', containerId: 'abc123def456' },
144
+ statusDuringAttach: 'Starting application on remote...'
145
+ });
146
+ await harness.run({ containerId: 'B', scanForDevJson: false });
147
+ (0, chai_1.expect)(harness.stages).to.include('Starting application on remote...');
148
+ });
149
+ it('shows an error with retry/close when the container is not found, without reloading', async () => {
150
+ const harness = new AttachHarness();
151
+ harness.setup({ containers: [] });
152
+ await harness.run({ containerId: 'missing', scanForDevJson: false });
153
+ (0, chai_1.expect)(harness.openRemoteCalls).to.have.lengthOf(0);
154
+ (0, chai_1.expect)(harness.errors).to.have.lengthOf(1);
155
+ (0, chai_1.expect)(harness.errors[0].message).to.match(/not found/i);
156
+ });
157
+ it('retry re-runs the attach; close dismisses the screen', async () => {
158
+ const harness = new AttachHarness();
159
+ harness.setup({ containers: [] });
160
+ await harness.run({ containerId: 'missing', scanForDevJson: false });
161
+ (0, chai_1.expect)(harness.errors).to.have.lengthOf(1);
162
+ await harness.errors[0].actions.retry();
163
+ (0, chai_1.expect)(harness.errors).to.have.lengthOf(2);
164
+ harness.errors[1].actions.close();
165
+ (0, chai_1.expect)(harness.disposeCount).to.be.greaterThan(0);
166
+ });
167
+ });
168
+ class StartupHarness extends dev_container_startup_contribution_1.DevContainerStartupContribution {
169
+ constructor() {
170
+ super(...arguments);
171
+ this.errors = [];
172
+ }
173
+ setup() {
174
+ /* eslint-disable @typescript-eslint/no-explicit-any */
175
+ this.logger = { info: () => { }, warn: () => { }, error: () => { } };
176
+ this.launchArgs = { getLaunchArgs: () => undefined };
177
+ this.attachScreen = { isAttached: false, dispose: () => { } };
178
+ this.messageService = { error: (message) => this.errors.push(message) };
179
+ this.connectionProvider = {
180
+ getAttachContainerArgs: async () => { throw new Error('backend unreachable'); }
181
+ };
182
+ /* eslint-enable @typescript-eslint/no-explicit-any */
183
+ }
184
+ run() {
185
+ return this.handleStartupAttach();
186
+ }
187
+ }
188
+ describe('DevContainerStartupContribution#handleStartupAttach', () => {
189
+ before(() => disableJSDOM = (0, jsdom_1.enableJSDOM)());
190
+ after(() => disableJSDOM());
191
+ it('reports a failure to resolve the attach arguments on a cold start', async () => {
192
+ const harness = new StartupHarness();
193
+ harness.setup();
194
+ await harness.run();
195
+ (0, chai_1.expect)(harness.errors).to.have.lengthOf(1);
196
+ (0, chai_1.expect)(harness.errors[0]).to.contain('backend unreachable');
197
+ });
198
+ });
199
+ //# sourceMappingURL=dev-container-startup-contribution.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-container-startup-contribution.spec.js","sourceRoot":"","sources":["../../src/electron-browser/dev-container-startup-contribution.spec.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
1
  export interface ContainerOutputProvider {
2
2
  onRemoteOutput(output: string): void;
3
+ /**
4
+ * Receives curated status messages (from {@link RemoteStatusReport}) describing the current
5
+ * attach phase, e.g. "Starting application on remote...". Used to drive the "attaching" screen.
6
+ * Optional so that existing implementers of this interface keep compiling.
7
+ */
8
+ onRemoteStatus?(message: string): void;
3
9
  }
4
10
  //# sourceMappingURL=container-output-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"container-output-provider.d.ts","sourceRoot":"","sources":["../../src/electron-common/container-output-provider.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,uBAAuB;IACpC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC"}
1
+ {"version":3,"file":"container-output-provider.d.ts","sourceRoot":"","sources":["../../src/electron-common/container-output-provider.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,uBAAuB;IACpC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;;OAIG;IACH,cAAc,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C"}
@@ -8,6 +8,11 @@ export interface ContainerConnectionOptions {
8
8
  lastContainerInfo?: LastContainerInfo;
9
9
  devcontainerFile: string;
10
10
  workspacePath?: string;
11
+ /**
12
+ * Additional CLI arguments to pass to the container's remote backend, e.g. the
13
+ * `--session-preference` values forwarded to a second-instance window.
14
+ */
15
+ additionalArgs?: string[];
11
16
  }
12
17
  export interface LastContainerInfo {
13
18
  id: string;
@@ -39,6 +44,11 @@ export interface AttachContainerOptions {
39
44
  workspacePath: string;
40
45
  nodeDownloadTemplate?: string;
41
46
  devcontainerFile?: string;
47
+ /**
48
+ * Additional CLI arguments to pass to the container's remote backend, e.g. the
49
+ * `--session-preference` values forwarded to a second-instance window.
50
+ */
51
+ additionalArgs?: string[];
42
52
  }
43
53
  export interface AttachContainerArgs {
44
54
  containerId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"remote-container-connection-provider.d.ts","sourceRoot":"","sources":["../../src/electron-common/remote-container-connection-provider.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGtD,eAAO,MAAM,qCAAqC,sBAAsB,CAAC;AAEzE,eAAO,MAAM,iCAAiC,eAA8C,CAAC;AAE7F,MAAM,WAAW,0BAA0B;IACvC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,MAAM,EAAE,aAAa,GAAG,YAAY,GAAG,oBAAoB,GAAG,UAAU,CAAC;CAC5E;AAED,MAAM,WAAW,sBAAsB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iCAAkC,SAAQ,SAAS,CAAC,uBAAuB,CAAC;IACzF,kBAAkB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC5F,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACzE,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;IACjF,qBAAqB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACzD,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC3E,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACnG,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IACnE,iBAAiB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACvF,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD"}
1
+ {"version":3,"file":"remote-container-connection-provider.d.ts","sourceRoot":"","sources":["../../src/electron-common/remote-container-connection-provider.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGtD,eAAO,MAAM,qCAAqC,sBAAsB,CAAC;AAEzE,eAAO,MAAM,iCAAiC,eAA8C,CAAC;AAE7F,MAAM,WAAW,0BAA0B;IACvC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,MAAM,EAAE,aAAa,GAAG,YAAY,GAAG,oBAAoB,GAAG,UAAU,CAAC;CAC5E;AAED,MAAM,WAAW,sBAAsB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iCAAkC,SAAQ,SAAS,CAAC,uBAAuB,CAAC;IACzF,kBAAkB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC5F,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACzE,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;IACjF,qBAAqB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACzD,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC3E,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACnG,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IACnE,iBAAiB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACvF,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD"}
@@ -0,0 +1,13 @@
1
+ import { ElectronMainApplicationContribution } from '@theia/core/lib/electron-main/electron-main-application';
2
+ import { LaunchArguments } from '@theia/core/lib/common/launch-arguments';
3
+ /**
4
+ * Claims windows opened for a CLI `--attach-container` launch. Such a window is opened empty and
5
+ * reloads into the container once the attach completes; claiming it lets core open an empty window
6
+ * (instead of restoring the last workspace) and flag it so the dev-container frontend can show its
7
+ * "attaching" screen from the first paint. Keeps the knowledge of `--attach-container` in
8
+ * `@theia/dev-container` rather than in core.
9
+ */
10
+ export declare class DevContainerClaimContribution implements ElectronMainApplicationContribution {
11
+ claimsWindow(args: LaunchArguments): boolean;
12
+ }
13
+ //# sourceMappingURL=dev-container-claim-contribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-container-claim-contribution.d.ts","sourceRoot":"","sources":["../../src/electron-main/dev-container-claim-contribution.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,mCAAmC,EAAE,MAAM,yDAAyD,CAAC;AAC9G,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE1E;;;;;;GAMG;AACH,qBACa,6BAA8B,YAAW,mCAAmC;IAErF,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO;CAG/C"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource GmbH and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.DevContainerClaimContribution = void 0;
19
+ const tslib_1 = require("tslib");
20
+ const inversify_1 = require("@theia/core/shared/inversify");
21
+ const launch_arguments_1 = require("@theia/core/lib/common/launch-arguments");
22
+ /**
23
+ * Claims windows opened for a CLI `--attach-container` launch. Such a window is opened empty and
24
+ * reloads into the container once the attach completes; claiming it lets core open an empty window
25
+ * (instead of restoring the last workspace) and flag it so the dev-container frontend can show its
26
+ * "attaching" screen from the first paint. Keeps the knowledge of `--attach-container` in
27
+ * `@theia/dev-container` rather than in core.
28
+ */
29
+ let DevContainerClaimContribution = class DevContainerClaimContribution {
30
+ claimsWindow(args) {
31
+ return launch_arguments_1.LaunchArguments.lastValue(args, 'attach-container') !== undefined;
32
+ }
33
+ };
34
+ exports.DevContainerClaimContribution = DevContainerClaimContribution;
35
+ exports.DevContainerClaimContribution = DevContainerClaimContribution = tslib_1.__decorate([
36
+ (0, inversify_1.injectable)()
37
+ ], DevContainerClaimContribution);
38
+ //# sourceMappingURL=dev-container-claim-contribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-container-claim-contribution.js","sourceRoot":"","sources":["../../src/electron-main/dev-container-claim-contribution.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oDAAoD;AACpD,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,4DAA0D;AAE1D,8EAA0E;AAE1E;;;;;;GAMG;AAEI,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAEtC,YAAY,CAAC,IAAqB;QAC9B,OAAO,kCAAe,CAAC,SAAS,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,SAAS,CAAC;IAC7E,CAAC;CACJ,CAAA;AALY,sEAA6B;wCAA7B,6BAA6B;IADzC,IAAA,sBAAU,GAAE;GACA,6BAA6B,CAKzC"}
@@ -0,0 +1,4 @@
1
+ import { ContainerModule } from '@theia/core/shared/inversify';
2
+ declare const _default: ContainerModule;
3
+ export default _default;
4
+ //# sourceMappingURL=dev-container-electron-main-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-container-electron-main-module.d.ts","sourceRoot":"","sources":["../../src/electron-main/dev-container-electron-main-module.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAI/D,wBAGG"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource GmbH and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const inversify_1 = require("@theia/core/shared/inversify");
19
+ const electron_main_application_1 = require("@theia/core/lib/electron-main/electron-main-application");
20
+ const dev_container_claim_contribution_1 = require("./dev-container-claim-contribution");
21
+ exports.default = new inversify_1.ContainerModule(bind => {
22
+ bind(dev_container_claim_contribution_1.DevContainerClaimContribution).toSelf().inSingletonScope();
23
+ bind(electron_main_application_1.ElectronMainApplicationContribution).toService(dev_container_claim_contribution_1.DevContainerClaimContribution);
24
+ });
25
+ //# sourceMappingURL=dev-container-electron-main-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-container-electron-main-module.js","sourceRoot":"","sources":["../../src/electron-main/dev-container-electron-main-module.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oDAAoD;AACpD,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,4DAA+D;AAC/D,uGAA8G;AAC9G,yFAAmF;AAEnF,kBAAe,IAAI,2BAAe,CAAC,IAAI,CAAC,EAAE;IACtC,IAAI,CAAC,gEAA6B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAChE,IAAI,CAAC,+DAAmC,CAAC,CAAC,SAAS,CAAC,gEAA6B,CAAC,CAAC;AACvF,CAAC,CAAC,CAAC"}
@@ -40,7 +40,7 @@ export declare class DevContainerConnectionProvider implements RemoteContainerCo
40
40
  *
41
41
  * @returns the local proxy port and the remote connection
42
42
  */
43
- protected setupRemoteConnection(container: Docker.Container, docker: Docker, config: DevContainerConfiguration, nodeDownloadTemplate: string | undefined, report: RemoteStatusReport): Promise<{
43
+ protected setupRemoteConnection(container: Docker.Container, docker: Docker, config: DevContainerConfiguration, nodeDownloadTemplate: string | undefined, report: RemoteStatusReport, additionalArgs?: string[]): Promise<{
44
44
  localPort: number;
45
45
  remote: RemoteDockerContainerConnection;
46
46
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"remote-container-connection-provider.d.ts","sourceRoot":"","sources":["../../src/electron-node/remote-container-connection-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-container-connection-provider.d.ts","sourceRoot":"","sources":["../../src/electron-node/remote-container-connection-provider.ts"],"names":[],"mappings":"AAkBA,OAAO,EACH,mBAAmB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,yBAAyB,EAClG,gBAAgB,EAAE,iCAAiC,EAAE,oBAAoB,EAAE,kBAAkB,EAChG,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2DAA2D,CAAC;AACpG,OAAO,EAAE,kBAAkB,EAAE,MAAM,4DAA4D,CAAC;AAChG,OAAO,EAAE,yBAAyB,EAAE,MAAM,8DAA8D,CAAC;AACzG,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAEpF,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAEvF,OAAO,EAAE,+BAA+B,EAAE,gCAAgC,EAAE,MAAM,sCAAsC,CAAC;AACzH,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAIhE,qBACa,8BAA+B,YAAW,iCAAiC,EAAE,SAAS,CAAC,uBAAuB,CAAC;IAGxH,SAAS,CAAC,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;IAGpE,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAGnD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,yBAAyB,CAAC;IAG7D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;IAG5D,SAAS,CAAC,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;IAGpE,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,2BAA2B,CAAC;IAGhE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAGnC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAElD,SAAS,CAAC,cAAc,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAE9D,SAAS,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAI1C,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAsCzC,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAavE,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAwD3F,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA+DnH,kBAAkB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAqCjG,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIlE,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAWlE,iBAAiB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAsDtF,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAQvF,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAIzC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAetF;;;;;OAKG;cACa,qBAAqB,CACjC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,EAC9E,oBAAoB,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAChG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,+BAA+B,CAAA;KAAE,CAAC;IAgD1E,OAAO,IAAI,IAAI;CAGlB"}