@opensumi/ide-extension 3.8.3-next-1741949132.0 → 3.8.3-next-1742180589.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 (2) hide show
  1. package/lib/worker-host.js +52 -223
  2. package/package.json +35 -35
@@ -50897,10 +50897,9 @@ exports["default"] = warningOnce;
50897
50897
  * Where possible, operations execute without creating a new Buffer and copying everything over.
50898
50898
  */
50899
50899
  Object.defineProperty(exports, "__esModule", ({ value: true }));
50900
- exports.Cursor = exports.Buffers = exports.buffer4Capacity = exports.emptyBuffer = void 0;
50900
+ exports.Cursor = exports.Buffers = exports.emptyBuffer = void 0;
50901
50901
  exports.copy = copy;
50902
50902
  exports.emptyBuffer = new Uint8Array(0);
50903
- exports.buffer4Capacity = new Uint8Array(4);
50904
50903
  function copy(source, target, targetStart, sourceStart, sourceEnd) {
50905
50904
  target.set(source.subarray(sourceStart, sourceEnd), targetStart);
50906
50905
  }
@@ -50950,31 +50949,6 @@ class Buffers {
50950
50949
  }
50951
50950
  return target;
50952
50951
  }
50953
- slice4(start) {
50954
- let end = start + 4;
50955
- const buffers = this.buffers;
50956
- if (end > this.size) {
50957
- end = this.size;
50958
- }
50959
- if (start >= end) {
50960
- return exports.emptyBuffer;
50961
- }
50962
- let startBytes = 0;
50963
- let si = 0;
50964
- for (; si < buffers.length && startBytes + buffers[si].length <= start; si++) {
50965
- startBytes += buffers[si].length;
50966
- }
50967
- const target = exports.buffer4Capacity;
50968
- let ti = 0;
50969
- for (let ii = si; ti < end - start && ii < buffers.length; ii++) {
50970
- const len = buffers[ii].length;
50971
- const _start = ti === 0 ? start - startBytes : 0;
50972
- const _end = ti + len >= end - start ? Math.min(_start + (end - start) - ti, len) : len;
50973
- copy(buffers[ii], target, ti, _start, _end);
50974
- ti += _end - _start;
50975
- }
50976
- return target;
50977
- }
50978
50952
  pos(i) {
50979
50953
  if (i < 0 || i >= this.size) {
50980
50954
  throw new Error(`out of range, ${i} not in [0, ${this.size})`);
@@ -51146,11 +51120,6 @@ class Cursor {
51146
51120
  this.skip(n);
51147
51121
  return buffers;
51148
51122
  }
51149
- read4() {
51150
- const buffers = this.buffers.slice4(this.offset);
51151
- this.skip(4);
51152
- return buffers;
51153
- }
51154
51123
  skip(n) {
51155
51124
  let count = 0;
51156
51125
  while (this.chunkIndex < this.buffers.buffers.length) {
@@ -51453,7 +51422,6 @@ exports.BaseConnection = BaseConnection;
51453
51422
 
51454
51423
  Object.defineProperty(exports, "__esModule", ({ value: true }));
51455
51424
  exports.LengthFieldBasedFrameDecoder = exports.indicator = void 0;
51456
- /* eslint-disable no-console */
51457
51425
  const writer_1 = __webpack_require__(/*! @furyjs/fury/dist/lib/writer */ "../../node_modules/@furyjs/fury/dist/lib/writer.js");
51458
51426
  const ide_core_common_1 = __webpack_require__(/*! @opensumi/ide-core-common */ "../core-common/lib/index.js");
51459
51427
  const buffers_1 = __webpack_require__(/*! ../../buffers/buffers */ "../connection/lib/common/buffers/buffers.js");
@@ -51461,33 +51429,26 @@ const buffers_1 = __webpack_require__(/*! ../../buffers/buffers */ "../connectio
51461
51429
  * You can use `Buffer.from('\r\n\r\n')` to get this indicator.
51462
51430
  */
51463
51431
  exports.indicator = new Uint8Array([0x0d, 0x0a, 0x0d, 0x0a]);
51464
- /**
51465
- * The number of bytes in the length field.
51466
- *
51467
- * How many bytes are used to represent data length.
51468
- *
51469
- * For example, if the length field is 4 bytes, then the maximum length of the data is 2^32 = 4GB
51470
- */
51471
- const lengthFieldLength = 4;
51472
51432
  /**
51473
51433
  * sticky packet unpacking problems are generally problems at the transport layer.
51474
51434
  * we use a length field to represent the length of the data, and then read the data according to the length
51475
51435
  */
51476
51436
  class LengthFieldBasedFrameDecoder {
51477
51437
  constructor() {
51438
+ this.dataEmitter = new ide_core_common_1.Emitter();
51439
+ this.onData = this.dataEmitter.event;
51478
51440
  this.buffers = new buffers_1.Buffers();
51479
51441
  this.cursor = this.buffers.cursor();
51480
- this.processingPromise = null;
51481
51442
  this.contentLength = -1;
51482
51443
  this.state = 0;
51483
- }
51484
- onData(listener) {
51485
- this._onDataListener = listener;
51486
- return {
51487
- dispose: () => {
51488
- this._onDataListener = null;
51489
- },
51490
- };
51444
+ /**
51445
+ * The number of bytes in the length field.
51446
+ *
51447
+ * How many bytes are used to represent data length.
51448
+ *
51449
+ * For example, if the length field is 4 bytes, then the maximum length of the data is 2^32 = 4GB
51450
+ */
51451
+ this.lengthFieldLength = 4;
51491
51452
  }
51492
51453
  reset() {
51493
51454
  this.contentLength = -1;
@@ -51496,70 +51457,30 @@ class LengthFieldBasedFrameDecoder {
51496
51457
  }
51497
51458
  push(chunk) {
51498
51459
  this.buffers.push(chunk);
51499
- // 确保同一时间只有一个处理过程
51500
- if (!this.processingPromise) {
51501
- this.processingPromise = this.processBuffers().finally(() => {
51502
- this.processingPromise = null;
51503
- });
51460
+ let done = false;
51461
+ while (!done) {
51462
+ done = this.readFrame();
51504
51463
  }
51505
51464
  }
51506
- async processBuffers() {
51507
- let iterations = 0;
51508
- let hasMoreData = false;
51509
- do {
51510
- hasMoreData = false;
51511
- while (iterations < LengthFieldBasedFrameDecoder.MAX_ITERATIONS) {
51512
- if (this.buffers.byteLength === 0) {
51513
- break;
51514
- }
51515
- const result = await this.readFrame();
51516
- if (result === true) {
51517
- break;
51518
- }
51519
- iterations++;
51520
- if (iterations % 10 === 0) {
51521
- await new Promise((resolve) => setTimeout(resolve, 0));
51522
- }
51523
- }
51524
- // 检查剩余数据
51525
- if (this.buffers.byteLength > 0) {
51526
- hasMoreData = true;
51527
- // 异步继续处理,避免阻塞
51528
- await new Promise((resolve) => (0, ide_core_common_1.setImmediate)(resolve));
51529
- iterations = 0; // 重置迭代计数器
51530
- }
51531
- } while (hasMoreData);
51532
- }
51533
- async readFrame() {
51534
- try {
51535
- const found = this.readLengthField();
51536
- if (!found) {
51537
- return true;
51538
- }
51465
+ readFrame() {
51466
+ const found = this.readLengthField();
51467
+ if (found) {
51539
51468
  const start = this.cursor.offset;
51540
51469
  const end = start + this.contentLength;
51541
- if (end > this.buffers.byteLength) {
51542
- return true;
51543
- }
51544
51470
  const binary = this.buffers.slice(start, end);
51545
- // 立即清理已处理的数据
51546
- this.buffers.splice(0, end);
51547
- this.reset();
51548
- if (this._onDataListener) {
51549
- try {
51550
- await Promise.resolve().then(() => { var _a; return (_a = this._onDataListener) === null || _a === void 0 ? void 0 : _a.call(this, binary); });
51551
- }
51552
- catch (error) {
51553
- console.error('[Frame Decoder] Error in data listener:', error);
51554
- }
51471
+ this.dataEmitter.fire(binary);
51472
+ if (this.buffers.byteLength > end) {
51473
+ this.contentLength = -1;
51474
+ this.state = 0;
51475
+ this.cursor.moveTo(end);
51476
+ // has more data, continue to parse
51477
+ return false;
51555
51478
  }
51556
- return false;
51557
- }
51558
- catch (error) {
51559
- console.error('[Frame Decoder] Error processing frame:', error);
51479
+ // delete used buffers
51480
+ this.buffers.splice(0, end);
51560
51481
  this.reset();
51561
- return true;
51562
51482
  }
51483
+ return true;
51563
51484
  }
51564
51485
  readLengthField() {
51565
51486
  const bufferLength = this.buffers.byteLength;
@@ -51575,12 +51496,12 @@ class LengthFieldBasedFrameDecoder {
51575
51496
  return false;
51576
51497
  }
51577
51498
  if (this.contentLength === -1) {
51578
- if (this.cursor.offset + lengthFieldLength > bufferLength) {
51499
+ if (this.cursor.offset + this.lengthFieldLength > bufferLength) {
51579
51500
  // Not enough data yet, wait for more data
51580
51501
  return false;
51581
51502
  }
51582
51503
  // read the content length
51583
- const buf = this.cursor.read4();
51504
+ const buf = this.cursor.read(this.lengthFieldLength);
51584
51505
  // fury writer use little endian
51585
51506
  this.contentLength = (0, ide_core_common_1.readUInt32LE)(buf, 0);
51586
51507
  }
@@ -51595,12 +51516,12 @@ class LengthFieldBasedFrameDecoder {
51595
51516
  let result = iter.next();
51596
51517
  while (!result.done) {
51597
51518
  switch (result.value) {
51598
- case 0x0d: // \r
51519
+ case 0x0d:
51599
51520
  switch (this.state) {
51600
51521
  case 0:
51601
51522
  this.state = 1;
51602
51523
  break;
51603
- case 2: // 第二个 \r
51524
+ case 2:
51604
51525
  this.state = 3;
51605
51526
  break;
51606
51527
  default:
@@ -51608,12 +51529,12 @@ class LengthFieldBasedFrameDecoder {
51608
51529
  break;
51609
51530
  }
51610
51531
  break;
51611
- case 0x0a: // \n
51532
+ case 0x0a:
51612
51533
  switch (this.state) {
51613
51534
  case 1:
51614
51535
  this.state = 2;
51615
51536
  break;
51616
- case 3: // 第二个 \n
51537
+ case 3:
51617
51538
  this.state = 4;
51618
51539
  iter.return();
51619
51540
  break;
@@ -51630,27 +51551,19 @@ class LengthFieldBasedFrameDecoder {
51630
51551
  }
51631
51552
  }
51632
51553
  dispose() {
51633
- this._onDataListener = null;
51554
+ this.dataEmitter.dispose();
51634
51555
  this.buffers.dispose();
51635
- this.reset();
51636
51556
  }
51637
51557
  static construct(content) {
51638
- // 每次都创建新的 writer,避免所有权问题
51639
- const writer = (0, writer_1.BinaryWriter)({});
51640
- try {
51641
- writer.buffer(exports.indicator);
51642
- writer.uint32(content.byteLength);
51643
- writer.buffer(content);
51644
- return writer;
51645
- }
51646
- catch (error) {
51647
- console.warn('[Frame Decoder] Error constructing frame:', error);
51648
- throw error;
51649
- }
51558
+ LengthFieldBasedFrameDecoder.writer.reset();
51559
+ LengthFieldBasedFrameDecoder.writer.buffer(exports.indicator);
51560
+ LengthFieldBasedFrameDecoder.writer.uint32(content.byteLength);
51561
+ LengthFieldBasedFrameDecoder.writer.buffer(content);
51562
+ return LengthFieldBasedFrameDecoder.writer.dump();
51650
51563
  }
51651
51564
  }
51652
51565
  exports.LengthFieldBasedFrameDecoder = LengthFieldBasedFrameDecoder;
51653
- LengthFieldBasedFrameDecoder.MAX_ITERATIONS = 50;
51566
+ LengthFieldBasedFrameDecoder.writer = (0, writer_1.BinaryWriter)({});
51654
51567
  //# sourceMappingURL=frame-decoder.js.map
51655
51568
 
51656
51569
  /***/ }),
@@ -51829,17 +51742,10 @@ class StreamConnection extends base_1.BaseConnection {
51829
51742
  });
51830
51743
  }
51831
51744
  send(data) {
51832
- const handle = frame_decoder_1.LengthFieldBasedFrameDecoder.construct(data).dumpAndOwn();
51833
- try {
51834
- this.writable.write(handle.get(), (error) => {
51835
- if (error) {
51836
- console.error('Failed to write data:', error);
51837
- }
51838
- });
51839
- }
51840
- finally {
51841
- handle.dispose();
51842
- }
51745
+ const result = frame_decoder_1.LengthFieldBasedFrameDecoder.construct(data);
51746
+ this.writable.write(result, () => {
51747
+ // TODO: logger error
51748
+ });
51843
51749
  }
51844
51750
  onMessage(cb) {
51845
51751
  return this.decoder.onData(cb);
@@ -51908,84 +51814,22 @@ exports.StreamConnection = StreamConnection;
51908
51814
 
51909
51815
  Object.defineProperty(exports, "__esModule", ({ value: true }));
51910
51816
  exports.WSWebSocketConnection = void 0;
51911
- const constants_1 = __webpack_require__(/*! ../../constants */ "../connection/lib/common/constants.js");
51912
51817
  const base_1 = __webpack_require__(/*! ./base */ "../connection/lib/common/connection/drivers/base.js");
51913
- const frame_decoder_1 = __webpack_require__(/*! ./frame-decoder */ "../connection/lib/common/connection/drivers/frame-decoder.js");
51914
51818
  class WSWebSocketConnection extends base_1.BaseConnection {
51915
51819
  constructor(socket) {
51916
51820
  super();
51917
51821
  this.socket = socket;
51918
- this.decoder = new frame_decoder_1.LengthFieldBasedFrameDecoder();
51919
- this.sendQueue = [];
51920
- this.pendingSize = 0;
51921
- this.sending = false;
51922
- this.socket.on('message', (data) => {
51923
- this.decoder.push(data);
51924
- });
51925
- }
51926
- async processSendQueue() {
51927
- if (this.sending) {
51928
- return;
51929
- }
51930
- this.sending = true;
51931
- while (this.sendQueue.length > 0) {
51932
- const { data, resolve, reject } = this.sendQueue[0];
51933
- let handle = null;
51934
- try {
51935
- handle = frame_decoder_1.LengthFieldBasedFrameDecoder.construct(data).dumpAndOwn();
51936
- const packet = handle.get();
51937
- for (let i = 0; i < packet.byteLength; i += constants_1.chunkSize) {
51938
- if (!this.isOpen()) {
51939
- throw new Error('Connection closed while sending');
51940
- }
51941
- await new Promise((resolve, reject) => {
51942
- const chunk = packet.subarray(i, Math.min(i + constants_1.chunkSize, packet.byteLength));
51943
- this.socket.send(chunk, { binary: true }, (error) => {
51944
- if (error) {
51945
- reject(error);
51946
- }
51947
- else {
51948
- resolve();
51949
- }
51950
- });
51951
- });
51952
- }
51953
- resolve();
51954
- }
51955
- catch (error) {
51956
- reject(error instanceof Error ? error : new Error(String(error)));
51957
- }
51958
- finally {
51959
- if (handle) {
51960
- try {
51961
- handle.dispose();
51962
- }
51963
- catch (error) {
51964
- console.warn('[WSWebSocket] Error disposing handle:', error);
51965
- }
51966
- }
51967
- this.pendingSize -= this.sendQueue[0].data.byteLength;
51968
- this.sendQueue.shift();
51969
- }
51970
- }
51971
- this.sending = false;
51972
51822
  }
51973
51823
  send(data) {
51974
- return new Promise((resolve, reject) => {
51975
- // 检查队列大小限制
51976
- if (this.sendQueue.length >= WSWebSocketConnection.MAX_QUEUE_SIZE) {
51977
- reject(new Error('Send queue full'));
51978
- return;
51979
- }
51980
- this.pendingSize += data.byteLength;
51981
- this.sendQueue.push({ data, resolve, reject });
51982
- this.processSendQueue().catch((error) => {
51983
- console.error('[WSWebSocket] Error processing queue:', error);
51984
- });
51985
- });
51824
+ this.socket.send(data);
51986
51825
  }
51987
51826
  onMessage(cb) {
51988
- return this.decoder.onData(cb);
51827
+ this.socket.on('message', cb);
51828
+ return {
51829
+ dispose: () => {
51830
+ this.socket.off('message', cb);
51831
+ },
51832
+ };
51989
51833
  }
51990
51834
  onceClose(cb) {
51991
51835
  this.socket.once('close', cb);
@@ -52000,17 +51844,9 @@ class WSWebSocketConnection extends base_1.BaseConnection {
52000
51844
  }
52001
51845
  dispose() {
52002
51846
  this.socket.removeAllListeners();
52003
- // 拒绝所有待发送的消息
52004
- while (this.sendQueue.length > 0) {
52005
- const { reject } = this.sendQueue.shift();
52006
- reject(new Error('Connection disposed'));
52007
- }
52008
- this.pendingSize = 0;
52009
- this.sending = false;
52010
51847
  }
52011
51848
  }
52012
51849
  exports.WSWebSocketConnection = WSWebSocketConnection;
52013
- WSWebSocketConnection.MAX_QUEUE_SIZE = 1000; // 限制队列长度
52014
51850
  //# sourceMappingURL=ws-websocket.js.map
52015
51851
 
52016
51852
  /***/ }),
@@ -52039,12 +51875,8 @@ tslib_1.__exportStar(__webpack_require__(/*! ./drivers */ "../connection/lib/com
52039
51875
  "use strict";
52040
51876
 
52041
51877
  Object.defineProperty(exports, "__esModule", ({ value: true }));
52042
- exports.chunkSize = exports.METHOD_NOT_REGISTERED = void 0;
51878
+ exports.METHOD_NOT_REGISTERED = void 0;
52043
51879
  exports.METHOD_NOT_REGISTERED = '$$METHOD_NOT_REGISTERED';
52044
- /**
52045
- * 分片大小, 1MB
52046
- */
52047
- exports.chunkSize = 1 * 1024 * 1024;
52048
51880
  //# sourceMappingURL=constants.js.map
52049
51881
 
52050
51882
  /***/ }),
@@ -52301,9 +52133,6 @@ const oneOf = (schemas, context) => {
52301
52133
  case 7:
52302
52134
  v = serializers[7].read();
52303
52135
  break;
52304
- default: {
52305
- throw new Error('unknown index: ' + idx);
52306
- }
52307
52136
  }
52308
52137
  v.kind = kinds[idx];
52309
52138
  return v;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensumi/ide-extension",
3
- "version": "3.8.3-next-1741949132.0",
3
+ "version": "3.8.3-next-1742180589.0",
4
4
  "files": [
5
5
  "lib",
6
6
  "hosted"
@@ -23,18 +23,18 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "@opensumi/events": "^1.0.0",
26
- "@opensumi/ide-connection": "3.8.3-next-1741949132.0",
27
- "@opensumi/ide-core-browser": "3.8.3-next-1741949132.0",
28
- "@opensumi/ide-core-node": "3.8.3-next-1741949132.0",
29
- "@opensumi/ide-debug": "3.8.3-next-1741949132.0",
30
- "@opensumi/ide-file-search": "3.8.3-next-1741949132.0",
31
- "@opensumi/ide-file-service": "3.8.3-next-1741949132.0",
32
- "@opensumi/ide-logs": "3.8.3-next-1741949132.0",
33
- "@opensumi/ide-markdown": "3.8.3-next-1741949132.0",
34
- "@opensumi/ide-task": "3.8.3-next-1741949132.0",
35
- "@opensumi/ide-terminal-next": "3.8.3-next-1741949132.0",
36
- "@opensumi/ide-utils": "3.8.3-next-1741949132.0",
37
- "@opensumi/ide-webview": "3.8.3-next-1741949132.0",
26
+ "@opensumi/ide-connection": "3.8.3-next-1742180589.0",
27
+ "@opensumi/ide-core-browser": "3.8.3-next-1742180589.0",
28
+ "@opensumi/ide-core-node": "3.8.3-next-1742180589.0",
29
+ "@opensumi/ide-debug": "3.8.3-next-1742180589.0",
30
+ "@opensumi/ide-file-search": "3.8.3-next-1742180589.0",
31
+ "@opensumi/ide-file-service": "3.8.3-next-1742180589.0",
32
+ "@opensumi/ide-logs": "3.8.3-next-1742180589.0",
33
+ "@opensumi/ide-markdown": "3.8.3-next-1742180589.0",
34
+ "@opensumi/ide-task": "3.8.3-next-1742180589.0",
35
+ "@opensumi/ide-terminal-next": "3.8.3-next-1742180589.0",
36
+ "@opensumi/ide-utils": "3.8.3-next-1742180589.0",
37
+ "@opensumi/ide-webview": "3.8.3-next-1742180589.0",
38
38
  "address": "^1.1.2",
39
39
  "glob-to-regexp": "0.4.1",
40
40
  "is-running": "^2.1.0",
@@ -45,28 +45,28 @@
45
45
  "v8-inspect-profiler": "^0.1.1"
46
46
  },
47
47
  "devDependencies": {
48
- "@opensumi/ide-ai-native": "3.8.3-next-1741949132.0",
49
- "@opensumi/ide-comments": "3.8.3-next-1741949132.0",
50
- "@opensumi/ide-components": "3.8.3-next-1741949132.0",
48
+ "@opensumi/ide-ai-native": "3.8.3-next-1742180589.0",
49
+ "@opensumi/ide-comments": "3.8.3-next-1742180589.0",
50
+ "@opensumi/ide-components": "3.8.3-next-1742180589.0",
51
51
  "@opensumi/ide-core-browser": "workspace:*",
52
- "@opensumi/ide-core-common": "3.8.3-next-1741949132.0",
53
- "@opensumi/ide-decoration": "3.8.3-next-1741949132.0",
54
- "@opensumi/ide-dev-tool": "3.8.3-next-1741949132.0",
55
- "@opensumi/ide-editor": "3.8.3-next-1741949132.0",
56
- "@opensumi/ide-extension-storage": "3.8.3-next-1741949132.0",
57
- "@opensumi/ide-file-tree-next": "3.8.3-next-1741949132.0",
58
- "@opensumi/ide-i18n": "3.8.3-next-1741949132.0",
59
- "@opensumi/ide-main-layout": "3.8.3-next-1741949132.0",
60
- "@opensumi/ide-monaco": "3.8.3-next-1741949132.0",
61
- "@opensumi/ide-output": "3.8.3-next-1741949132.0",
62
- "@opensumi/ide-overlay": "3.8.3-next-1741949132.0",
63
- "@opensumi/ide-quick-open": "3.8.3-next-1741949132.0",
64
- "@opensumi/ide-scm": "3.8.3-next-1741949132.0",
65
- "@opensumi/ide-testing": "3.8.3-next-1741949132.0",
66
- "@opensumi/ide-theme": "3.8.3-next-1741949132.0",
67
- "@opensumi/ide-toolbar": "3.8.3-next-1741949132.0",
68
- "@opensumi/ide-workspace": "3.8.3-next-1741949132.0",
69
- "@opensumi/ide-workspace-edit": "3.8.3-next-1741949132.0"
52
+ "@opensumi/ide-core-common": "3.8.3-next-1742180589.0",
53
+ "@opensumi/ide-decoration": "3.8.3-next-1742180589.0",
54
+ "@opensumi/ide-dev-tool": "3.8.3-next-1742180589.0",
55
+ "@opensumi/ide-editor": "3.8.3-next-1742180589.0",
56
+ "@opensumi/ide-extension-storage": "3.8.3-next-1742180589.0",
57
+ "@opensumi/ide-file-tree-next": "3.8.3-next-1742180589.0",
58
+ "@opensumi/ide-i18n": "3.8.3-next-1742180589.0",
59
+ "@opensumi/ide-main-layout": "3.8.3-next-1742180589.0",
60
+ "@opensumi/ide-monaco": "3.8.3-next-1742180589.0",
61
+ "@opensumi/ide-output": "3.8.3-next-1742180589.0",
62
+ "@opensumi/ide-overlay": "3.8.3-next-1742180589.0",
63
+ "@opensumi/ide-quick-open": "3.8.3-next-1742180589.0",
64
+ "@opensumi/ide-scm": "3.8.3-next-1742180589.0",
65
+ "@opensumi/ide-testing": "3.8.3-next-1742180589.0",
66
+ "@opensumi/ide-theme": "3.8.3-next-1742180589.0",
67
+ "@opensumi/ide-toolbar": "3.8.3-next-1742180589.0",
68
+ "@opensumi/ide-workspace": "3.8.3-next-1742180589.0",
69
+ "@opensumi/ide-workspace-edit": "3.8.3-next-1742180589.0"
70
70
  },
71
- "gitHead": "d845e5d4e4a3f6ced08b98ed51d13ea92200ec26"
71
+ "gitHead": "4f63d1022d691c45d1ea4042d64f926eb2899d8c"
72
72
  }