dsh-dock 0.18.0 → 0.19.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.
package/client.js CHANGED
@@ -40,18 +40,18 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
40
40
  ));
41
41
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
42
42
 
43
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js
43
+ // node_modules/qrcode/lib/can-promise.js
44
44
  var require_can_promise = __commonJS({
45
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js"(exports, module2) {
45
+ "node_modules/qrcode/lib/can-promise.js"(exports, module2) {
46
46
  module2.exports = function() {
47
47
  return typeof Promise === "function" && Promise.prototype && Promise.prototype.then;
48
48
  };
49
49
  }
50
50
  });
51
51
 
52
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js
52
+ // node_modules/qrcode/lib/core/utils.js
53
53
  var require_utils = __commonJS({
54
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js"(exports) {
54
+ "node_modules/qrcode/lib/core/utils.js"(exports) {
55
55
  var toSJISFunction;
56
56
  var CODEWORDS_COUNT = [
57
57
  0,
@@ -128,9 +128,9 @@ var require_utils = __commonJS({
128
128
  }
129
129
  });
130
130
 
131
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js
131
+ // node_modules/qrcode/lib/core/error-correction-level.js
132
132
  var require_error_correction_level = __commonJS({
133
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js"(exports) {
133
+ "node_modules/qrcode/lib/core/error-correction-level.js"(exports) {
134
134
  exports.L = { bit: 1 };
135
135
  exports.M = { bit: 0 };
136
136
  exports.Q = { bit: 3 };
@@ -173,9 +173,9 @@ var require_error_correction_level = __commonJS({
173
173
  }
174
174
  });
175
175
 
176
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js
176
+ // node_modules/qrcode/lib/core/bit-buffer.js
177
177
  var require_bit_buffer = __commonJS({
178
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js"(exports, module2) {
178
+ "node_modules/qrcode/lib/core/bit-buffer.js"(exports, module2) {
179
179
  function BitBuffer() {
180
180
  this.buffer = [];
181
181
  this.length = 0;
@@ -208,9 +208,9 @@ var require_bit_buffer = __commonJS({
208
208
  }
209
209
  });
210
210
 
211
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js
211
+ // node_modules/qrcode/lib/core/bit-matrix.js
212
212
  var require_bit_matrix = __commonJS({
213
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js"(exports, module2) {
213
+ "node_modules/qrcode/lib/core/bit-matrix.js"(exports, module2) {
214
214
  function BitMatrix(size) {
215
215
  if (!size || size < 1) {
216
216
  throw new Error("BitMatrix size must be defined and greater than 0");
@@ -237,9 +237,9 @@ var require_bit_matrix = __commonJS({
237
237
  }
238
238
  });
239
239
 
240
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js
240
+ // node_modules/qrcode/lib/core/alignment-pattern.js
241
241
  var require_alignment_pattern = __commonJS({
242
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js"(exports) {
242
+ "node_modules/qrcode/lib/core/alignment-pattern.js"(exports) {
243
243
  var getSymbolSize = require_utils().getSymbolSize;
244
244
  exports.getRowColCoords = function getRowColCoords(version) {
245
245
  if (version === 1) return [];
@@ -272,9 +272,9 @@ var require_alignment_pattern = __commonJS({
272
272
  }
273
273
  });
274
274
 
275
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js
275
+ // node_modules/qrcode/lib/core/finder-pattern.js
276
276
  var require_finder_pattern = __commonJS({
277
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js"(exports) {
277
+ "node_modules/qrcode/lib/core/finder-pattern.js"(exports) {
278
278
  var getSymbolSize = require_utils().getSymbolSize;
279
279
  var FINDER_PATTERN_SIZE = 7;
280
280
  exports.getPositions = function getPositions(version) {
@@ -291,9 +291,9 @@ var require_finder_pattern = __commonJS({
291
291
  }
292
292
  });
293
293
 
294
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js
294
+ // node_modules/qrcode/lib/core/mask-pattern.js
295
295
  var require_mask_pattern = __commonJS({
296
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js"(exports) {
296
+ "node_modules/qrcode/lib/core/mask-pattern.js"(exports) {
297
297
  exports.Patterns = {
298
298
  PATTERN000: 0,
299
299
  PATTERN001: 1,
@@ -433,9 +433,9 @@ var require_mask_pattern = __commonJS({
433
433
  }
434
434
  });
435
435
 
436
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js
436
+ // node_modules/qrcode/lib/core/error-correction-code.js
437
437
  var require_error_correction_code = __commonJS({
438
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js"(exports) {
438
+ "node_modules/qrcode/lib/core/error-correction-code.js"(exports) {
439
439
  var ECLevel = require_error_correction_level();
440
440
  var EC_BLOCKS_TABLE = [
441
441
  // L M Q H
@@ -794,9 +794,9 @@ var require_error_correction_code = __commonJS({
794
794
  }
795
795
  });
796
796
 
797
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js
797
+ // node_modules/qrcode/lib/core/galois-field.js
798
798
  var require_galois_field = __commonJS({
799
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js"(exports) {
799
+ "node_modules/qrcode/lib/core/galois-field.js"(exports) {
800
800
  var EXP_TABLE = new Uint8Array(512);
801
801
  var LOG_TABLE = new Uint8Array(256);
802
802
  (function initTables() {
@@ -827,9 +827,9 @@ var require_galois_field = __commonJS({
827
827
  }
828
828
  });
829
829
 
830
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js
830
+ // node_modules/qrcode/lib/core/polynomial.js
831
831
  var require_polynomial = __commonJS({
832
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js"(exports) {
832
+ "node_modules/qrcode/lib/core/polynomial.js"(exports) {
833
833
  var GF = require_galois_field();
834
834
  exports.mul = function mul(p1, p2) {
835
835
  const coeff = new Uint8Array(p1.length + p2.length - 1);
@@ -863,9 +863,9 @@ var require_polynomial = __commonJS({
863
863
  }
864
864
  });
865
865
 
866
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js
866
+ // node_modules/qrcode/lib/core/reed-solomon-encoder.js
867
867
  var require_reed_solomon_encoder = __commonJS({
868
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js"(exports, module2) {
868
+ "node_modules/qrcode/lib/core/reed-solomon-encoder.js"(exports, module2) {
869
869
  var Polynomial = require_polynomial();
870
870
  function ReedSolomonEncoder(degree) {
871
871
  this.genPoly = void 0;
@@ -895,18 +895,18 @@ var require_reed_solomon_encoder = __commonJS({
895
895
  }
896
896
  });
897
897
 
898
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js
898
+ // node_modules/qrcode/lib/core/version-check.js
899
899
  var require_version_check = __commonJS({
900
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js"(exports) {
900
+ "node_modules/qrcode/lib/core/version-check.js"(exports) {
901
901
  exports.isValid = function isValid(version) {
902
902
  return !isNaN(version) && version >= 1 && version <= 40;
903
903
  };
904
904
  }
905
905
  });
906
906
 
907
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js
907
+ // node_modules/qrcode/lib/core/regex.js
908
908
  var require_regex = __commonJS({
909
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js"(exports) {
909
+ "node_modules/qrcode/lib/core/regex.js"(exports) {
910
910
  var numeric = "[0-9]+";
911
911
  var alphanumeric = "[A-Z $%*+\\-./:]+";
912
912
  var kanji = "(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";
@@ -932,9 +932,9 @@ var require_regex = __commonJS({
932
932
  }
933
933
  });
934
934
 
935
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js
935
+ // node_modules/qrcode/lib/core/mode.js
936
936
  var require_mode = __commonJS({
937
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js"(exports) {
937
+ "node_modules/qrcode/lib/core/mode.js"(exports) {
938
938
  var VersionCheck = require_version_check();
939
939
  var Regex = require_regex();
940
940
  exports.NUMERIC = {
@@ -1013,9 +1013,9 @@ var require_mode = __commonJS({
1013
1013
  }
1014
1014
  });
1015
1015
 
1016
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js
1016
+ // node_modules/qrcode/lib/core/version.js
1017
1017
  var require_version = __commonJS({
1018
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js"(exports) {
1018
+ "node_modules/qrcode/lib/core/version.js"(exports) {
1019
1019
  var Utils = require_utils();
1020
1020
  var ECCode = require_error_correction_code();
1021
1021
  var ECLevel = require_error_correction_level();
@@ -1108,9 +1108,9 @@ var require_version = __commonJS({
1108
1108
  }
1109
1109
  });
1110
1110
 
1111
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js
1111
+ // node_modules/qrcode/lib/core/format-info.js
1112
1112
  var require_format_info = __commonJS({
1113
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js"(exports) {
1113
+ "node_modules/qrcode/lib/core/format-info.js"(exports) {
1114
1114
  var Utils = require_utils();
1115
1115
  var G15 = 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0;
1116
1116
  var G15_MASK = 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1;
@@ -1126,9 +1126,9 @@ var require_format_info = __commonJS({
1126
1126
  }
1127
1127
  });
1128
1128
 
1129
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js
1129
+ // node_modules/qrcode/lib/core/numeric-data.js
1130
1130
  var require_numeric_data = __commonJS({
1131
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js"(exports, module2) {
1131
+ "node_modules/qrcode/lib/core/numeric-data.js"(exports, module2) {
1132
1132
  var Mode = require_mode();
1133
1133
  function NumericData(data) {
1134
1134
  this.mode = Mode.NUMERIC;
@@ -1161,9 +1161,9 @@ var require_numeric_data = __commonJS({
1161
1161
  }
1162
1162
  });
1163
1163
 
1164
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js
1164
+ // node_modules/qrcode/lib/core/alphanumeric-data.js
1165
1165
  var require_alphanumeric_data = __commonJS({
1166
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js"(exports, module2) {
1166
+ "node_modules/qrcode/lib/core/alphanumeric-data.js"(exports, module2) {
1167
1167
  var Mode = require_mode();
1168
1168
  var ALPHA_NUM_CHARS = [
1169
1169
  "0",
@@ -1240,9 +1240,9 @@ var require_alphanumeric_data = __commonJS({
1240
1240
  }
1241
1241
  });
1242
1242
 
1243
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js
1243
+ // node_modules/qrcode/lib/core/byte-data.js
1244
1244
  var require_byte_data = __commonJS({
1245
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js"(exports, module2) {
1245
+ "node_modules/qrcode/lib/core/byte-data.js"(exports, module2) {
1246
1246
  var Mode = require_mode();
1247
1247
  function ByteData(data) {
1248
1248
  this.mode = Mode.BYTE;
@@ -1270,9 +1270,9 @@ var require_byte_data = __commonJS({
1270
1270
  }
1271
1271
  });
1272
1272
 
1273
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js
1273
+ // node_modules/qrcode/lib/core/kanji-data.js
1274
1274
  var require_kanji_data = __commonJS({
1275
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js"(exports, module2) {
1275
+ "node_modules/qrcode/lib/core/kanji-data.js"(exports, module2) {
1276
1276
  var Mode = require_mode();
1277
1277
  var Utils = require_utils();
1278
1278
  function KanjiData(data) {
@@ -1309,9 +1309,9 @@ var require_kanji_data = __commonJS({
1309
1309
  }
1310
1310
  });
1311
1311
 
1312
- // .devdeps/node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js
1312
+ // node_modules/dijkstrajs/dijkstra.js
1313
1313
  var require_dijkstra = __commonJS({
1314
- ".devdeps/node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js"(exports, module2) {
1314
+ "node_modules/dijkstrajs/dijkstra.js"(exports, module2) {
1315
1315
  "use strict";
1316
1316
  var dijkstra = {
1317
1317
  single_source_shortest_paths: function(graph, s, d) {
@@ -1410,9 +1410,9 @@ var require_dijkstra = __commonJS({
1410
1410
  }
1411
1411
  });
1412
1412
 
1413
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js
1413
+ // node_modules/qrcode/lib/core/segments.js
1414
1414
  var require_segments = __commonJS({
1415
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js"(exports) {
1415
+ "node_modules/qrcode/lib/core/segments.js"(exports) {
1416
1416
  var Mode = require_mode();
1417
1417
  var NumericData = require_numeric_data();
1418
1418
  var AlphanumericData = require_alphanumeric_data();
@@ -1596,9 +1596,9 @@ var require_segments = __commonJS({
1596
1596
  }
1597
1597
  });
1598
1598
 
1599
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js
1599
+ // node_modules/qrcode/lib/core/qrcode.js
1600
1600
  var require_qrcode = __commonJS({
1601
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js"(exports) {
1601
+ "node_modules/qrcode/lib/core/qrcode.js"(exports) {
1602
1602
  var Utils = require_utils();
1603
1603
  var ECLevel = require_error_correction_level();
1604
1604
  var BitBuffer = require_bit_buffer();
@@ -1857,9 +1857,9 @@ var require_qrcode = __commonJS({
1857
1857
  }
1858
1858
  });
1859
1859
 
1860
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js
1860
+ // node_modules/qrcode/lib/renderer/utils.js
1861
1861
  var require_utils2 = __commonJS({
1862
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js"(exports) {
1862
+ "node_modules/qrcode/lib/renderer/utils.js"(exports) {
1863
1863
  function hex2rgba(hex) {
1864
1864
  if (typeof hex === "number") {
1865
1865
  hex = hex.toString();
@@ -1937,9 +1937,9 @@ var require_utils2 = __commonJS({
1937
1937
  }
1938
1938
  });
1939
1939
 
1940
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js
1940
+ // node_modules/qrcode/lib/renderer/canvas.js
1941
1941
  var require_canvas = __commonJS({
1942
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js"(exports) {
1942
+ "node_modules/qrcode/lib/renderer/canvas.js"(exports) {
1943
1943
  var Utils = require_utils2();
1944
1944
  function clearCanvas(ctx, canvas, size) {
1945
1945
  ctx.clearRect(0, 0, canvas.width, canvas.height);
@@ -1990,9 +1990,9 @@ var require_canvas = __commonJS({
1990
1990
  }
1991
1991
  });
1992
1992
 
1993
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js
1993
+ // node_modules/qrcode/lib/renderer/svg-tag.js
1994
1994
  var require_svg_tag = __commonJS({
1995
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js"(exports) {
1995
+ "node_modules/qrcode/lib/renderer/svg-tag.js"(exports) {
1996
1996
  var Utils = require_utils2();
1997
1997
  function getColorAttrib(color, attrib) {
1998
1998
  const alpha = color.a / 255;
@@ -2048,9 +2048,9 @@ var require_svg_tag = __commonJS({
2048
2048
  }
2049
2049
  });
2050
2050
 
2051
- // .devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js
2051
+ // node_modules/qrcode/lib/browser.js
2052
2052
  var require_browser = __commonJS({
2053
- ".devdeps/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js"(exports) {
2053
+ "node_modules/qrcode/lib/browser.js"(exports) {
2054
2054
  var canPromise = require_can_promise();
2055
2055
  var QRCode2 = require_qrcode();
2056
2056
  var CanvasRenderer = require_canvas();
@@ -7407,6 +7407,14 @@ function speakVoice(text, cfg) {
7407
7407
  poll();
7408
7408
  return true;
7409
7409
  }
7410
+ function voiceTone(cfg) {
7411
+ const m = cfg && cfg.voiceMode;
7412
+ return m === "detailed" || m === "medium" ? m : "brief";
7413
+ }
7414
+ function cardTone(cfg) {
7415
+ const m = cfg && cfg.cardMode;
7416
+ return m === "brief" || m === "medium" ? m : "detailed";
7417
+ }
7410
7418
  function endReasonSpeech(reason) {
7411
7419
  if (reason === "error") return "\u51FA\u9519\u4E86";
7412
7420
  if (reason === "aborted") return "\u5DF2\u505C\u6B62";
@@ -7416,12 +7424,21 @@ function endReasonSpeech(reason) {
7416
7424
  return "\u5B8C\u6210\u4E86";
7417
7425
  }
7418
7426
  function endBroadcastText(success, record, task, cfg) {
7419
- const mode = cfg && cfg.voiceMode === "detailed" ? "detailed" : "brief";
7427
+ const mode = voiceTone(cfg);
7420
7428
  const reason = record && record.endReason || "";
7421
7429
  const title = record && record.title || task && task.title || "";
7422
7430
  if (mode === "brief") {
7423
7431
  return success ? "\u4EFB\u52A1\u5B8C\u6210" : "\u4EFB\u52A1\u505C\u6B62\u4E86";
7424
7432
  }
7433
+ if (mode === "medium") {
7434
+ const who = title ? "\u4EFB\u52A1\u300C" + truncate2(title, 30) + "\u300D" : "\u4EFB\u52A1";
7435
+ const parts2 = [success ? who + "\u5B8C\u6210\u4E86" : who + "\u505C\u6B62\u4E86"];
7436
+ if (!success) parts2.push("\uFF0C\u539F\u56E0\uFF1A" + endReasonSpeech(reason));
7437
+ const dur2 = record && record.duration || 0;
7438
+ if (dur2 > 0) parts2.push("\uFF0C\u8017\u65F6" + fmtDur(dur2));
7439
+ parts2.push("\u3002");
7440
+ return parts2.join("");
7441
+ }
7425
7442
  const parts = [];
7426
7443
  if (title) parts.push("\u4EFB\u52A1\uFF1A" + truncate2(title, 30) + "\u3002");
7427
7444
  parts.push(success ? "\u5DF2\u5B8C\u6210\u3002" : "\u7ED3\u675F\uFF0C\u539F\u56E0\uFF1A" + endReasonSpeech(reason) + "\u3002");
@@ -7439,21 +7456,32 @@ function endBroadcastText(success, record, task, cfg) {
7439
7456
  return parts.join("");
7440
7457
  }
7441
7458
  function confirmBroadcastText(task, approval, cfg) {
7442
- const mode = cfg && cfg.voiceMode === "detailed" ? "detailed" : "brief";
7459
+ const mode = voiceTone(cfg);
7443
7460
  if (mode === "brief") return "\u4EFB\u52A1\u9700\u8981\u6388\u6743";
7444
7461
  const tool = approval && approval.toolName || "\u5DE5\u5177";
7445
7462
  const scene = toolLabel(tool);
7463
+ if (mode === "medium") {
7464
+ const who = task && task.title ? "\u4EFB\u52A1\u300C" + truncate2(task.title, 30) + "\u300D" : "\u4EFB\u52A1";
7465
+ return who + "\u9700\u8981\u6388\u6743\uFF0C\u6B63\u5728\u7B49\u4F60\u6279\u51C6" + (scene || "\u5DE5\u5177 " + tool) + "\u3002";
7466
+ }
7446
7467
  const parts = [];
7447
7468
  if (task && task.title) parts.push("\u4EFB\u52A1\uFF1A" + truncate2(task.title, 30) + "\u3002");
7448
7469
  parts.push("\u6B63\u5728\u7B49\u5F85\u4F60\u6279\u51C6" + (scene ? "\u6267\u884C" + scene : "") + "\uFF0C\u5DE5\u5177\u662F" + tool + "\uFF0C\u8BF7\u56DE\u5230\u4F1A\u8BDD\u5904\u7406\u3002");
7449
7470
  return parts.join("");
7450
7471
  }
7451
7472
  function stuckBroadcastText(task, cfg) {
7452
- const mode = cfg && cfg.voiceMode === "detailed" ? "detailed" : "brief";
7453
- if (mode === "brief") return "\u4EFB\u52A1\u5361\u4F4F\u4E86";
7454
- const parts = [];
7455
- if (task && task.title) parts.push("\u4EFB\u52A1\uFF1A" + truncate2(task.title, 30) + "\u3002");
7456
- parts.push("\u7F16\u7A0B\u9636\u6BB5\u5DF2\u7ECF" + fmtDur(Math.max(0, cfg && cfg.stuckMs || STUCK_MS)) + "\u6CA1\u6709\u4EFB\u4F55\u52A8\u9759\uFF0C\u53EF\u80FD\u5361\u4F4F\u4E86\uFF0C\u8BF7\u67E5\u770B\u3002");
7473
+ const mode = voiceTone(cfg);
7474
+ const where = (task && task.isSubtask ? "\u5B50\u4EFB\u52A1" : "\u4E3B\u4EFB\u52A1") + (task && task.title ? "\u300C" + truncate2(task.title, 30) + "\u300D" : "");
7475
+ if (mode === "brief") return where + "\u5361\u4F4F\u4E86";
7476
+ if (mode === "medium") {
7477
+ return where + "\u5361\u4F4F\u4E86\uFF0C\u5DF2\u7ECF" + fmtDur(Math.max(0, cfg && cfg.stuckMs || STUCK_MS)) + "\u6CA1\u6709\u4EFB\u4F55\u52A8\u9759\u3002";
7478
+ }
7479
+ const parts = [where + "\u5361\u4F4F\u4E86\u3002"];
7480
+ parts.push("\u7F16\u7A0B\u9636\u6BB5\u5DF2\u7ECF" + fmtDur(Math.max(0, cfg && cfg.stuckMs || STUCK_MS)) + "\u6CA1\u6709\u4EFB\u4F55\u52A8\u9759\uFF0C");
7481
+ const tool = task && task.lastToolName || "";
7482
+ const scene = tool ? toolLabel(tool) : "";
7483
+ parts.push(tool ? "\u6700\u540E\u5728\u6267\u884C" + tool + (scene ? "\uFF08" + scene + "\uFF09" : "") + "\uFF0C" : "");
7484
+ parts.push("\u8BF7\u67E5\u770B\u3002");
7457
7485
  return parts.join("");
7458
7486
  }
7459
7487
  var STUCK_MS = 18e3;
@@ -7565,9 +7593,9 @@ function Toast(props) {
7565
7593
  }, []);
7566
7594
  const jump = (0, import_react10.useCallback)(() => {
7567
7595
  if (!t.sessionTitle && !t.sessionId) return;
7568
- const ok = openSessionById(t.sessionId) || (t.sessionTitle ? openSessionByTitle(t.sessionTitle) : false);
7569
- if (ok && t.kind !== "confirm") setClosing(true);
7570
- }, [t.sessionId, t.sessionTitle, t.kind]);
7596
+ const ok = openSessionById(t.sessionId) || (t.fallbackSessionId ? openSessionById(t.fallbackSessionId) : false) || (t.sessionTitle ? openSessionByTitle(t.sessionTitle) : false);
7597
+ if (ok && t.kind !== "confirm" && t.kind !== "stuck") setClosing(true);
7598
+ }, [t.sessionId, t.sessionTitle, t.fallbackSessionId, t.kind]);
7571
7599
  (0, import_react10.useEffect)(() => {
7572
7600
  if (t.closing && !closing) setClosing(true);
7573
7601
  }, [t.closing, closing]);
@@ -7586,7 +7614,7 @@ function Toast(props) {
7586
7614
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-toast-head", children: [
7587
7615
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-toast-mark", style: { background: markColor } }),
7588
7616
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "dknt-toast-title", title: t.sessionTitle || t.title, children: [
7589
- t.kind === "confirm" ? "\u270B " : "",
7617
+ t.kind === "confirm" ? "\u270B " : t.kind === "stuck" ? "\u23F3 " : "",
7590
7618
  props.collapsed ? t.sessionTitle || t.title : t.title,
7591
7619
  !props.collapsed && t.sessionTitle && t.kind !== "confirm" ? " \xB7 " + t.sessionTitle : ""
7592
7620
  ] }),
@@ -7618,8 +7646,15 @@ function NotifyOverlay(props) {
7618
7646
  const remindedApprovalsRef = (0, import_react10.useRef)(/* @__PURE__ */ new Map());
7619
7647
  const toastSeqRef = (0, import_react10.useRef)(0);
7620
7648
  const pushToast = (0, import_react10.useCallback)((toast) => {
7649
+ const st = notifyStore.snap.status;
7650
+ const cfg = st && st.config;
7651
+ if (cfg && cfg.notifyCards === false) return;
7621
7652
  setToasts((prev) => prev.concat([toast]).slice(-12));
7622
7653
  }, []);
7654
+ (0, import_react10.useEffect)(() => {
7655
+ const cfg = snap.status && snap.status.config;
7656
+ if (cfg && cfg.notifyCards === false) setToasts((prev) => prev.length ? [] : prev);
7657
+ }, [snap.status]);
7623
7658
  (0, import_react10.useEffect)(() => {
7624
7659
  let stopped = false;
7625
7660
  let timer = null;
@@ -7679,12 +7714,17 @@ function NotifyOverlay(props) {
7679
7714
  if (cfg.notifyOnConfirm === false) continue;
7680
7715
  const toolName = fresh[0].toolName || "";
7681
7716
  const scene = toolLabel(toolName);
7717
+ const tone = cardTone(cfg);
7682
7718
  const lines = [
7683
7719
  "\u4EFB\u52A1\uFF1A" + (task.title || "(\u65E0\u6807\u9898)"),
7684
7720
  "\u5DE5\u5177\uFF1A" + (toolName || "\u672A\u77E5") + (scene ? "\uFF08" + scene + "\uFF09" : "")
7685
7721
  ];
7686
- if (fresh[0].reason) lines.push("\u8BF4\u660E\uFF1A" + truncate2(fresh[0].reason, 140));
7687
- lines.push(fresh.length > 1 ? "\u5171 " + fresh.length + " \u9879\u7B49\u5F85\u4F60\u7684\u786E\u8BA4" : "\u8BF7\u5728\u4F1A\u8BDD\u91CC\u786E\u8BA4\u540E\u7EE7\u7EED");
7722
+ if (tone !== "brief" && fresh[0].reason) lines.push("\u8BF4\u660E\uFF1A" + truncate2(fresh[0].reason, 140));
7723
+ if (fresh.length > 1) {
7724
+ lines.push(tone === "brief" ? "\u5171 " + fresh.length + " \u9879\u7B49\u5F85\u786E\u8BA4" : "\u5171 " + fresh.length + " \u9879\u7B49\u5F85\u4F60\u7684\u786E\u8BA4");
7725
+ } else if (tone === "detailed") {
7726
+ lines.push("\u8BF7\u5728\u4F1A\u8BDD\u91CC\u786E\u8BA4\u540E\u7EE7\u7EED");
7727
+ }
7688
7728
  pushToast({
7689
7729
  id: ++toastSeqRef.current,
7690
7730
  kind: "confirm",
@@ -7737,7 +7777,7 @@ function NotifyOverlay(props) {
7737
7777
  setToasts((prev) => {
7738
7778
  let changed = false;
7739
7779
  const next = prev.map((x) => {
7740
- if (x.kind === "confirm" || x.closing) return x;
7780
+ if (x.kind === "confirm" || x.kind === "stuck" || x.closing) return x;
7741
7781
  if (!x.sessionTitle && !x.sessionId) return x;
7742
7782
  const hit = cur.id && x.sessionId && cur.id === x.sessionId || !cur.id && x.sessionTitle && titleMatches(x.sessionTitle, cur.title);
7743
7783
  if (!hit) return x;
@@ -7759,7 +7799,10 @@ function NotifyOverlay(props) {
7759
7799
  for (const sid of Array.from(stuckSeenRef.current.keys())) {
7760
7800
  if (!activeIds.has(sid)) stuckSeenRef.current.delete(sid);
7761
7801
  }
7762
- if (cfg.voiceNotify !== true || cfg.voiceOnStuck === false) return;
7802
+ const parentsWaitingOnSubtask = /* @__PURE__ */ new Set();
7803
+ for (const t of st.active) {
7804
+ if (t.isSubtask && t.parentSessionId) parentsWaitingOnSubtask.add(t.parentSessionId);
7805
+ }
7763
7806
  for (const task of st.active) {
7764
7807
  const approvals = Array.isArray(task.approvals) ? task.approvals : [];
7765
7808
  if (approvals.length > 0) {
@@ -7769,14 +7812,58 @@ function NotifyOverlay(props) {
7769
7812
  if (task.phase !== "code") {
7770
7813
  continue;
7771
7814
  }
7815
+ if (parentsWaitingOnSubtask.has(task.sessionId)) continue;
7772
7816
  const lastAct = task.lastActivityAt || task.phaseAt || 0;
7773
7817
  if (!lastAct || now - lastAct < STUCK_MS) continue;
7774
7818
  const prev = stuckSeenRef.current.get(task.sessionId);
7775
7819
  if (prev === lastAct) continue;
7776
7820
  stuckSeenRef.current.set(task.sessionId, lastAct);
7777
- speakVoice(stuckBroadcastText(task, Object.assign({}, cfg, { stuckMs: now - lastAct })), cfg);
7821
+ const stuckMs = now - lastAct;
7822
+ if (cfg.voiceNotify === true && cfg.voiceOnStuck !== false) {
7823
+ speakVoice(stuckBroadcastText(task, Object.assign({}, cfg, { stuckMs })), cfg);
7824
+ }
7825
+ if (cfg.notifyOnStuck === false) continue;
7826
+ const label = task.isSubtask ? "\u5B50\u4EFB\u52A1" : "\u4E3B\u4EFB\u52A1";
7827
+ const title = task.title || "(\u65E0\u6807\u9898)";
7828
+ const tool = task.lastToolName || "";
7829
+ const tone = cardTone(cfg);
7830
+ const lines = ["\u4EFB\u52A1\uFF1A" + label + "\xB7" + title];
7831
+ if (tone !== "brief") lines.push("\u5DF2\u505C\u6EDE\uFF1A" + fmtDur(stuckMs) + "\uFF08\u7F16\u7A0B\u9636\u6BB5\u65E0\u6D3B\u52A8\uFF09");
7832
+ if (tone === "detailed") {
7833
+ if (tool) lines.push("\u6700\u540E\u52A8\u4F5C\uFF1A" + tool + (toolLabel(tool) ? "\uFF08" + toolLabel(tool) + "\uFF09" : ""));
7834
+ lines.push("\u6062\u590D\u6D3B\u52A8\u6216\u4EFB\u52A1\u7ED3\u675F\u540E\u81EA\u52A8\u6536\u8D77\uFF1B\u70B9\u51FB\u5361\u7247\u76F4\u8FBE\u4F1A\u8BDD");
7835
+ }
7836
+ pushToast({
7837
+ id: ++toastSeqRef.current,
7838
+ kind: "stuck",
7839
+ title: label + "\u5361\u4F4F\u4E86",
7840
+ body: lines.join("\n"),
7841
+ sessionId: task.sessionId || "",
7842
+ sessionTitle: title,
7843
+ // 子任务会话通常不在侧栏里:跳不到自己时回退到父会话(看主会话里的子代理进度)
7844
+ fallbackSessionId: task.isSubtask && task.parentSessionId ? task.parentSessionId : "",
7845
+ // 停点指纹:恢复活动(lastActivityAt 变了)即由下面的对账 effect 收起
7846
+ stuckAt: lastAct
7847
+ });
7778
7848
  }
7779
7849
  }, [snap.status]);
7850
+ (0, import_react10.useEffect)(() => {
7851
+ const st = snap.status;
7852
+ if (!st || !st.active) return;
7853
+ const byId = new Map(st.active.map((x) => [x.sessionId, x]));
7854
+ setToasts((prev) => {
7855
+ let changed = false;
7856
+ const next = prev.map((x) => {
7857
+ if (x.kind !== "stuck" || x.closing) return x;
7858
+ const task = byId.get(x.sessionId);
7859
+ const stillStalled = !!task && (task.lastActivityAt || task.phaseAt || 0) === x.stuckAt && (Array.isArray(task.approvals) ? task.approvals.length : 0) === 0;
7860
+ if (stillStalled) return x;
7861
+ changed = true;
7862
+ return Object.assign({}, x, { closing: true });
7863
+ });
7864
+ return changed ? next : prev;
7865
+ });
7866
+ }, [snap.status]);
7780
7867
  const handleTaskEnd = (task, record, cfg) => {
7781
7868
  const reason = record && record.endReason || "";
7782
7869
  const success = isSuccessReason2(reason);
@@ -7790,15 +7877,17 @@ function NotifyOverlay(props) {
7790
7877
  const provider = record && record.provider || task.provider || "";
7791
7878
  const startTs = record && record.startTime || task.startTime;
7792
7879
  const endTs = record && record.endTime || Date.now();
7793
- const lines = [
7794
- "\u4EFB\u52A1\uFF1A" + (record && record.title || task.title || "(\u65E0\u6807\u9898)"),
7795
- "\u6A21\u578B\uFF1A" + models + (provider ? "\uFF08" + provider + "\uFF09" : ""),
7796
- "\u8017\u65F6\uFF1A" + fmtDur(record && record.duration || endTs - startTs) + "\uFF08" + fmtTime2(startTs) + " \u2192 " + fmtTime2(endTs) + "\uFF09",
7797
- "\u56DE\u5408 " + (record && record.turns || task.turns || 0) + " \xB7 \u6B65\u9AA4 " + (record && record.steps || task.steps || 0) + (record && record.toolCalls || task.toolCalls ? " \xB7 \u5DE5\u5177 " + (record && record.toolCalls || task.toolCalls) + " \u6B21" : ""),
7798
- "Token\uFF1A\u8F93\u5165 " + fmtNum2(record && record.inputTokens || task.inputTokens) + " / \u8F93\u51FA " + fmtNum2(record && record.outputTokens || task.outputTokens)
7799
- ];
7800
- if (record && record.lastText) lines.push("\u6458\u8981\uFF1A" + truncate2(record.lastText, 140));
7801
- if (!success && record && record.errorMessage) lines.push("\u9519\u8BEF\uFF1A" + truncate2(record.errorMessage, 120));
7880
+ const tone = cardTone(cfg);
7881
+ const durText = fmtDur(record && record.duration || endTs - startTs);
7882
+ const lines = ["\u4EFB\u52A1\uFF1A" + (record && record.title || task.title || "(\u65E0\u6807\u9898)")];
7883
+ if (tone !== "brief") lines.push("\u6A21\u578B\uFF1A" + models + (provider ? "\uFF08" + provider + "\uFF09" : ""));
7884
+ lines.push(tone === "brief" ? "\u8017\u65F6\uFF1A" + durText : "\u8017\u65F6\uFF1A" + durText + "\uFF08" + fmtTime2(startTs) + " \u2192 " + fmtTime2(endTs) + "\uFF09");
7885
+ if (tone === "detailed") {
7886
+ lines.push("\u56DE\u5408 " + (record && record.turns || task.turns || 0) + " \xB7 \u6B65\u9AA4 " + (record && record.steps || task.steps || 0) + (record && record.toolCalls || task.toolCalls ? " \xB7 \u5DE5\u5177 " + (record && record.toolCalls || task.toolCalls) + " \u6B21" : ""));
7887
+ lines.push("Token\uFF1A\u8F93\u5165 " + fmtNum2(record && record.inputTokens || task.inputTokens) + " / \u8F93\u51FA " + fmtNum2(record && record.outputTokens || task.outputTokens));
7888
+ if (record && record.lastText) lines.push("\u6458\u8981\uFF1A" + truncate2(record.lastText, 140));
7889
+ if (!success && record && record.errorMessage) lines.push("\u9519\u8BEF\uFF1A" + truncate2(record.errorMessage, 120));
7890
+ }
7802
7891
  const title = success ? "\u4EFB\u52A1\u5B8C\u6210" : "\u4EFB\u52A1" + info.label;
7803
7892
  pushToast({
7804
7893
  id: ++toastSeqRef.current,
@@ -7971,6 +8060,19 @@ function NotifyView(props) {
7971
8060
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-sec-sub", children: "\u54EA\u4E9B\u65F6\u523B\u63D0\u9192\u4F60\uFF1B\u4E0E\u3010\u4EFB\u52A1\u52A8\u753B\u3011\u7684\u52A8\u6548\u4E92\u4E0D\u4F9D\u8D56" })
7972
8061
  ] }),
7973
8062
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-rows-narrow", children: [
8063
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-row", children: [
8064
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-label", children: "\u9875\u5185\u5361\u7247" }),
8065
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8066
+ "button",
8067
+ {
8068
+ type: "button",
8069
+ className: "dknt-miniswitch" + (cfg.notifyCards !== false ? " on" : ""),
8070
+ onClick: () => patch({ notifyCards: cfg.notifyCards === false }),
8071
+ children: cfg.notifyCards !== false ? "\u5F00" : "\u5173"
8072
+ }
8073
+ ),
8074
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-sub", children: "\u53F3\u4FA7\u901A\u77E5\u5361\u7247\u603B\u5F00\u5173\uFF1A\u5173\u95ED\u540E\u4E0B\u9762\u5404\u7C7B\u5361\u7247\uFF08\u5B8C\u6210 / \u5F02\u5E38 / \u9700\u786E\u8BA4 / \u5361\u4F4F\uFF09\u4E00\u5F8B\u4E0D\u5F39\uFF0C\u5DF2\u6302\u7740\u7684\u4E00\u5E76\u6536\u8D77\uFF1B\u8BED\u97F3\u64AD\u62A5\u3001\u63D0\u793A\u97F3\u3001\u7CFB\u7EDF\u901A\u77E5\u3001\u9489\u9489\u98DE\u4E66\u63A8\u9001\u4E0D\u53D7\u5F71\u54CD" })
8075
+ ] }),
7974
8076
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-row", children: [
7975
8077
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-label", children: "\u5B8C\u6210\u901A\u77E5" }),
7976
8078
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
@@ -8009,6 +8111,19 @@ function NotifyView(props) {
8009
8111
  }
8010
8112
  ),
8011
8113
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-sub", children: "\u5DE5\u5177\u7B49\u5F85\u4F60\u6279\u51C6\u65F6\u5F39\u5361\u7247\u5E76\u54CD\u786E\u8BA4\u97F3\uFF1B\u5BA1\u6279\u5904\u7406\u5B8C\u81EA\u52A8\u6536\u8D77\uFF0C\u6CA1\u5904\u7406\u5B8C\u5C31\u4E00\u76F4\u663E\u793A\uFF08\u70B9\u5361\u7247\u76F4\u8FBE\u4F1A\u8BDD\uFF09" })
8114
+ ] }),
8115
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-row", children: [
8116
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-label", children: "\u5361\u4F4F\u63D0\u9192" }),
8117
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8118
+ "button",
8119
+ {
8120
+ type: "button",
8121
+ className: "dknt-miniswitch" + (cfg.notifyOnStuck !== false ? " on" : ""),
8122
+ onClick: () => patch({ notifyOnStuck: cfg.notifyOnStuck === false }),
8123
+ children: cfg.notifyOnStuck !== false ? "\u5F00" : "\u5173"
8124
+ }
8125
+ ),
8126
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-sub", children: "\u7F16\u7A0B\u9636\u6BB5 18 \u79D2\u6CA1\u6709\u52A8\u9759\u65F6\u5F39\u5361\u7247\uFF0C\u5199\u660E\u662F\u4E3B\u4EFB\u52A1\u8FD8\u662F\u5B50\u4EFB\u52A1\u3001\u505C\u6EDE\u4E86\u591A\u4E45\u3001\u6700\u540E\u5728\u6267\u884C\u4EC0\u4E48\uFF1B\u6062\u590D\u6D3B\u52A8 / \u4EFB\u52A1\u7ED3\u675F\u81EA\u52A8\u6536\u8D77\uFF0C\u540C\u4E00\u505C\u70B9\u53EA\u5F39\u4E00\u6B21\uFF08\u8BED\u97F3\u64AD\u62A5\u8D70\u300C\u8BED\u97F3\u64AD\u62A5\u300D\u533A\u7684\u5361\u4F4F\u5F00\u5173\uFF0C\u4E92\u4E0D\u5E72\u6270\uFF09" })
8012
8127
  ] })
8013
8128
  ] })
8014
8129
  ] }, "events"),
@@ -8018,9 +8133,25 @@ function NotifyView(props) {
8018
8133
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-sec-sub", children: "\u9875\u5185\u5361\u7247\u3001\u63D0\u793A\u97F3\u3001\u6D4F\u89C8\u5668\u7CFB\u7EDF\u901A\u77E5\u53EF\u81EA\u7531\u7EC4\u5408" })
8019
8134
  ] }),
8020
8135
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-rows-narrow", children: [
8136
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-row", children: [
8137
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-label", children: "\u5361\u7247\u53E3\u5F84" }),
8138
+ [["brief", "\u7B80\u6D01"], ["medium", "\u9002\u4E2D"], ["detailed", "\u8BE6\u7EC6"]].map(([v, label]) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8139
+ "button",
8140
+ {
8141
+ type: "button",
8142
+ className: "dknt-miniswitch" + (cardTone(cfg) === v ? " on" : ""),
8143
+ style: { marginRight: 6 },
8144
+ title: "\u53F3\u4FA7\u901A\u77E5\u5361\u7247\u6B63\u6587\u6309" + label + "\u6863\u663E\u793A",
8145
+ onClick: () => patch({ cardMode: v }),
8146
+ children: label
8147
+ },
8148
+ v
8149
+ )),
8150
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-sub", children: "\u53F3\u4FA7\u5361\u7247\u6B63\u6587\u5199\u591A\u5C11\uFF08\u4E0E\u5404\u7C7B\u578B\u5F00\u5173\u3001\u8BED\u97F3\u64AD\u62A5\u4E92\u4E0D\u5F71\u54CD\uFF09\uFF1A\u7B80\u6D01\uFF1D\u4EFB\u52A1\u4E0E\u8017\u65F6 / \u8C01\u5361\u4F4F\uFF1B\u9002\u4E2D\uFF1D\u52A0\u6A21\u578B\u3001\u8D77\u6B62\u65F6\u95F4\u3001\u505C\u6EDE\u65F6\u957F\uFF1B\u8BE6\u7EC6\uFF1D\u5168\u90E8\uFF08\u56DE\u5408\u6B65\u9AA4\u3001Token\u3001\u6458\u8981\u6216\u9519\u8BEF\u3001\u6700\u540E\u52A8\u4F5C\uFF09" })
8151
+ ] }),
8021
8152
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-row", children: [
8022
8153
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-label", children: "\u5361\u7247\u6536\u7EB3" }),
8023
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-sub", children: "\u6240\u6709\u5361\u7247\u90FD\u4E0D\u8D85\u65F6\u81EA\u52A8\u6D88\u5931\uFF1A\u7ED3\u675F\u5361\u7247\u6CA1\u770B\u8FC7\u5C31\u4E00\u76F4\u6302\u7740\uFF08\u540E\u53F0\u8DD1\u5B8C\u7684\u5207\u56DE\u6765\u4E5F\u5728\uFF09\uFF0C\u70B9\u5361\u7247\u76F4\u8FBE\u5BF9\u5E94\u4F1A\u8BDD\uFF0C\u6216\u70B9\u8FDB\u8BE5\u4F1A\u8BDD\uFF0C\u5361\u7247\u81EA\u52A8\u6536\u8D77\uFF1B\u9700\u786E\u8BA4\u5361\u7247\u6302\u5230\u5BA1\u6279\u5904\u7406\u5B8C\u30023 \u5F20\u53CA\u4EE5\u4E0A\u81EA\u52A8\u53E0\u653E\u6210\u6807\u9898\u6761\uFF0C\u9F20\u6807\u79FB\u4E0A\u53BB\u6574\u4F53\u5C55\u5F00" })
8154
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-sub", children: "\u6240\u6709\u5361\u7247\u90FD\u4E0D\u8D85\u65F6\u81EA\u52A8\u6D88\u5931\uFF1A\u7ED3\u675F\u5361\u7247\u6CA1\u770B\u8FC7\u5C31\u4E00\u76F4\u6302\u7740\uFF08\u540E\u53F0\u8DD1\u5B8C\u7684\u5207\u56DE\u6765\u4E5F\u5728\uFF09\uFF0C\u70B9\u5361\u7247\u76F4\u8FBE\u5BF9\u5E94\u4F1A\u8BDD\uFF0C\u6216\u70B9\u8FDB\u8BE5\u4F1A\u8BDD\uFF0C\u5361\u7247\u81EA\u52A8\u6536\u8D77\uFF1B\u9700\u786E\u8BA4\u5361\u7247\u6302\u5230\u5BA1\u6279\u5904\u7406\u5B8C\uFF1B\u5361\u4F4F\u5361\u7247\u6302\u5230\u6062\u590D\u6D3B\u52A8\u30023 \u5F20\u53CA\u4EE5\u4E0A\u81EA\u52A8\u53E0\u653E\u6210\u6807\u9898\u6761\uFF0C\u9F20\u6807\u79FB\u4E0A\u53BB\u6574\u4F53\u5C55\u5F00\uFF1B\u8981\u6574\u4F53\u4E0D\u5F39\u770B\u4E0A\u9762\u300C\u9875\u5185\u5361\u7247\u300D\u603B\u5F00\u5173" })
8024
8155
  ] }),
8025
8156
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-row", children: [
8026
8157
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-label", children: "\u7CFB\u7EDF\u901A\u77E5" }),
@@ -8109,25 +8240,19 @@ function NotifyView(props) {
8109
8240
  cfg.voiceNotify ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-rows-narrow", children: [
8110
8241
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-row", children: [
8111
8242
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-label", children: "\u64AD\u62A5\u53E3\u5F84" }),
8112
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8243
+ [["brief", "\u7B80\u6D01"], ["medium", "\u9002\u4E2D"], ["detailed", "\u8BE6\u7EC6"]].map(([v, label]) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8113
8244
  "button",
8114
8245
  {
8115
8246
  type: "button",
8116
- className: "dknt-miniswitch" + (cfg.voiceMode !== "detailed" ? " on" : ""),
8117
- onClick: () => patch({ voiceMode: "brief" }),
8118
- children: "\u7B80\u6D01"
8119
- }
8120
- ),
8121
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8122
- "button",
8123
- {
8124
- type: "button",
8125
- className: "dknt-miniswitch" + (cfg.voiceMode === "detailed" ? " on" : ""),
8126
- onClick: () => patch({ voiceMode: "detailed" }),
8127
- children: "\u8BE6\u7EC6"
8128
- }
8129
- ),
8130
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-sub", children: "\u7B80\u6D01\uFF1A\u4E00\u53E5\u300C\u4EFB\u52A1\u5B8C\u6210 / \u4EFB\u52A1\u505C\u6B62\u4E86 / \u4EFB\u52A1\u9700\u8981\u6388\u6743 / \u4EFB\u52A1\u5361\u4F4F\u4E86\u300D\uFF1B\u8BE6\u7EC6\uFF1A\u5E26\u4E0A\u4EFB\u52A1\u6807\u9898\u3001\u8017\u65F6\u3001\u56DE\u5408\u7EDF\u8BA1\u4E0E\u539F\u56E0" })
8247
+ className: "dknt-miniswitch" + (voiceTone(cfg) === v ? " on" : ""),
8248
+ style: { marginRight: 6 },
8249
+ title: "\u8BED\u97F3\u64AD\u62A5\u6309" + label + "\u6863\u8BF4",
8250
+ onClick: () => patch({ voiceMode: v }),
8251
+ children: label
8252
+ },
8253
+ v
8254
+ )),
8255
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-sub", children: "\u7B80\u6D01\uFF1A\u4E00\u53E5\u300C\u4EFB\u52A1\u5B8C\u6210 / \u4EFB\u52A1\u505C\u6B62\u4E86 / \u4EFB\u52A1\u9700\u8981\u6388\u6743 / \u4E3B\u4EFB\u52A1\uFF08\u6216\u5B50\u4EFB\u52A1\uFF09\xB7\u6807\u9898 \u5361\u4F4F\u4E86\u300D\uFF1B\u9002\u4E2D\uFF1A\u70B9\u540D\u4EFB\u52A1\uFF0C\u7ED3\u675F\u5E26\u539F\u56E0\u4E0E\u8017\u65F6\u3001\u5361\u4F4F\u5E26\u505C\u6EDE\u65F6\u957F\uFF1B\u8BE6\u7EC6\uFF1A\u7ED3\u675F\u5E26\u56DE\u5408\u7EDF\u8BA1\u4E0E\u56DE\u590D\u6458\u8981\uFF0C\u9700\u6388\u6743\u5E26\u5DE5\u5177\u540D\uFF0C\u5361\u4F4F\u5E26\u6700\u540E\u52A8\u4F5C" })
8131
8256
  ] }),
8132
8257
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dknt-row", children: [
8133
8258
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-row-label", children: "\u64AD\u62A5\u65F6\u523B" }),
@@ -8403,7 +8528,7 @@ function NotifyStat(props) {
8403
8528
  if (snap.error) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dknt-err", children: "\u901A\u77E5\u72B6\u6001\u4E0D\u53EF\u7528\uFF08\u5BBF\u4E3B\u9700\u91CD\u542F\u52A0\u8F7D\u901A\u77E5\u8DEF\u7531\uFF09" });
8404
8529
  if (!cfg) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { children: "\u7B49\u5F85\u901A\u77E5\u914D\u7F6E\u2026" });
8405
8530
  const events = [cfg.notifyOnComplete ? "\u5B8C\u6210" : "", cfg.notifyOnError ? "\u5F02\u5E38" : "", cfg.notifyOnConfirm !== false ? "\u9700\u786E\u8BA4" : ""].filter(Boolean);
8406
- const extras = [cfg.soundNotify !== false ? "\u63D0\u793A\u97F3" : "", cfg.systemNotify ? "\u7CFB\u7EDF\u901A\u77E5" : "", cfg.voiceNotify ? "\u8BED\u97F3\u64AD\u62A5" + (cfg.voiceMode === "detailed" ? "\xB7\u8BE6" : "\xB7\u7B80") : ""].filter(Boolean);
8531
+ const extras = [cfg.soundNotify !== false ? "\u63D0\u793A\u97F3" : "", cfg.systemNotify ? "\u7CFB\u7EDF\u901A\u77E5" : "", cfg.voiceNotify ? "\u8BED\u97F3\u64AD\u62A5" + (cfg.voiceMode === "detailed" ? "\xB7\u8BE6" : cfg.voiceMode === "medium" ? "\xB7\u9002" : "\xB7\u7B80") : ""].filter(Boolean);
8407
8532
  const push = [cfg.dingtalkEnabled ? "\u9489\u9489" : "", cfg.feishuEnabled ? "\u98DE\u4E66" : ""].filter(Boolean);
8408
8533
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { children: (events.length ? "\u901A\u77E5\uFF1A" + events.join("/") : "\u901A\u77E5\u4E8B\u4EF6\u5168\u5173") + (extras.length ? " \xB7 " + extras.join("/") : "") + (push.length ? " \xB7 \u63A8\u9001\uFF1A" + push.join("/") : "") });
8409
8534
  }
@@ -14332,7 +14457,7 @@ var feature13 = {
14332
14457
  };
14333
14458
 
14334
14459
  // src/client.jsx
14335
- var DOCK_VERSION = "0.18.0";
14460
+ var DOCK_VERSION = "0.19.0";
14336
14461
  var BUILTIN_FEATURES = [feature, feature2, feature3, feature4, feature5, feature6, feature7, feature8, feature9, feature10, feature11, feature12, feature13];
14337
14462
  var PLANNED_FEATURES = [];
14338
14463
  var PLANNED_NOTES = {};