@lemoncat7/dsh-partner 2.7.0 → 2.7.2

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 (38) hide show
  1. package/README.md +1 -1
  2. package/docs/releases/2.7.1.md +10 -0
  3. package/docs/releases/2.7.2.md +12 -0
  4. package/lib/channels/direct/message-format.js +127 -127
  5. package/lib/channels/direct/message-format.js.map +1 -1
  6. package/lib/client.js +205 -139
  7. package/lib/client.js.map +4 -4
  8. package/lib/collaboration/service.d.ts.map +1 -1
  9. package/lib/collaboration/service.js +9 -1
  10. package/lib/collaboration/service.js.map +1 -1
  11. package/lib/pendant/renderer.d.ts.map +1 -1
  12. package/lib/pendant/renderer.js +18 -2
  13. package/lib/pendant/renderer.js.map +1 -1
  14. package/lib/pendant/startup.d.ts +4 -0
  15. package/lib/pendant/startup.d.ts.map +1 -0
  16. package/lib/pendant/startup.js +64 -0
  17. package/lib/pendant/startup.js.map +1 -0
  18. package/lib/pendant/widget.d.ts.map +1 -1
  19. package/lib/pendant/widget.js +2 -1
  20. package/lib/pendant/widget.js.map +1 -1
  21. package/lib/pendant-renderer.js +169 -169
  22. package/lib/scheduler/continuations.d.ts.map +1 -1
  23. package/lib/scheduler/continuations.js +18 -3
  24. package/lib/scheduler/continuations.js.map +1 -1
  25. package/lib/ui/capability-resources.d.ts +1 -1
  26. package/lib/ui/capability-resources.d.ts.map +1 -1
  27. package/lib/ui/capability-resources.js +5 -27
  28. package/lib/ui/capability-resources.js.map +1 -1
  29. package/lib/ui/schedule-panel.d.ts.map +1 -1
  30. package/lib/ui/schedule-panel.js +2 -1
  31. package/lib/ui/schedule-panel.js.map +1 -1
  32. package/lib/ui/skills-panel.d.ts.map +1 -1
  33. package/lib/ui/skills-panel.js +46 -16
  34. package/lib/ui/skills-panel.js.map +1 -1
  35. package/lib/ui/storage-settings.js +1 -1
  36. package/lib/ui/storage-settings.js.map +1 -1
  37. package/package.json +3 -2
  38. package/docs/releases/2.7.0.md +0 -21
package/lib/client.js CHANGED
@@ -56,7 +56,7 @@ function observePluginWorkspace(pluginId, close) {
56
56
  // src/client.tsx
57
57
  var import_dsh_client_ui_primitives24 = require("@deepseek-ai/dsh-client-ui-primitives");
58
58
 
59
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/qrcode.react/lib/esm/index.js
59
+ // node_modules/qrcode.react/lib/esm/index.js
60
60
  var import_react = __toESM(require("react"), 1);
61
61
  var __defProp2 = Object.defineProperty;
62
62
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -1803,8 +1803,12 @@ body[data-ds-dark-theme] .dsh-partner-workspace {
1803
1803
  .dsh-partner-general-settings { padding: 16px clamp(20px, 4vw, 46px); color: var(--partner-text); }
1804
1804
  .dsh-partner-general-settings h2 { font-size: 18px; }
1805
1805
  .dsh-partner-general-settings p { color: var(--partner-text-secondary); line-height: 1.7; overflow-wrap: anywhere; }
1806
- .dsh-partner-migration-paths { display: grid; gap: 12px; margin-top: 12px; min-width: 0; }
1807
- .dsh-partner-migration-paths > div { display: grid; gap: 5px; padding: 12px; border: 1px solid var(--partner-border); border-radius: 10px; min-width: 0; }
1806
+ .dsh-partner-feature-block.is-storage-migration { gap: 10px; padding: 16px 18px; }
1807
+ .dsh-partner-feature-block.is-storage-migration > :is(p, details) { margin-block: 0; }
1808
+ .dsh-partner-feature-block.is-storage-migration p { margin-block: 0; line-height: 1.55; }
1809
+ .dsh-partner-feature-block.is-storage-migration details > p { margin-top: 6px; }
1810
+ .dsh-partner-migration-paths { display: grid; gap: 8px; margin-top: 6px; min-width: 0; }
1811
+ .dsh-partner-migration-paths > div { display: grid; gap: 3px; padding: 10px; border: 1px solid var(--partner-border); border-radius: 10px; min-width: 0; }
1808
1812
  .dsh-partner-migration-paths code { white-space: pre-wrap; overflow-wrap: anywhere; font-size: 12px; }
1809
1813
  .dsh-partner-general-settings :is(summary,button) { min-height: 44px; }
1810
1814
  .dsh-partner-general-settings [role="alert"] { color: var(--partner-danger); overflow-wrap: anywhere; }
@@ -5775,7 +5779,7 @@ var import_dsh_client_ui_primitives9 = require("@deepseek-ai/dsh-client-ui-primi
5775
5779
  // src/pendant/markdown.tsx
5776
5780
  var import_react23 = __toESM(require("react"), 1);
5777
5781
 
5778
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/mdast-util-to-string/lib/index.js
5782
+ // node_modules/mdast-util-to-string/lib/index.js
5779
5783
  var emptyOptions = {};
5780
5784
  function toString(value, options) {
5781
5785
  const settings = options || emptyOptions;
@@ -5812,7 +5816,7 @@ function node(value) {
5812
5816
  return Boolean(value && typeof value === "object");
5813
5817
  }
5814
5818
 
5815
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/decode-named-character-reference/index.dom.js
5819
+ // node_modules/decode-named-character-reference/index.dom.js
5816
5820
  var element = document.createElement("i");
5817
5821
  function decodeNamedCharacterReference(value) {
5818
5822
  const characterReference2 = "&" + value + ";";
@@ -5824,7 +5828,7 @@ function decodeNamedCharacterReference(value) {
5824
5828
  return character === characterReference2 ? false : character;
5825
5829
  }
5826
5830
 
5827
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-chunked/index.js
5831
+ // node_modules/micromark-util-chunked/index.js
5828
5832
  function splice(list2, start, remove, items) {
5829
5833
  const end = list2.length;
5830
5834
  let chunkStart = 0;
@@ -5858,7 +5862,7 @@ function push(list2, items) {
5858
5862
  return items;
5859
5863
  }
5860
5864
 
5861
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-combine-extensions/index.js
5865
+ // node_modules/micromark-util-combine-extensions/index.js
5862
5866
  var hasOwnProperty = {}.hasOwnProperty;
5863
5867
  function combineExtensions(extensions) {
5864
5868
  const all2 = {};
@@ -5898,7 +5902,7 @@ function constructs(existing, list2) {
5898
5902
  splice(existing, 0, 0, before);
5899
5903
  }
5900
5904
 
5901
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-decode-numeric-character-reference/index.js
5905
+ // node_modules/micromark-util-decode-numeric-character-reference/index.js
5902
5906
  function decodeNumericCharacterReference(value, base) {
5903
5907
  const code2 = Number.parseInt(value, base);
5904
5908
  if (
@@ -5916,12 +5920,12 @@ function decodeNumericCharacterReference(value, base) {
5916
5920
  return String.fromCodePoint(code2);
5917
5921
  }
5918
5922
 
5919
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-normalize-identifier/index.js
5923
+ // node_modules/micromark-util-normalize-identifier/index.js
5920
5924
  function normalizeIdentifier(value) {
5921
5925
  return value.replace(/[\t\n\r ]+/g, " ").replace(/^ | $/g, "").toLowerCase().toUpperCase();
5922
5926
  }
5923
5927
 
5924
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-character/index.js
5928
+ // node_modules/micromark-util-character/index.js
5925
5929
  var asciiAlpha = regexCheck(/[A-Za-z]/);
5926
5930
  var asciiAlphanumeric = regexCheck(/[\dA-Za-z]/);
5927
5931
  var asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/);
@@ -5953,7 +5957,7 @@ function regexCheck(regex) {
5953
5957
  }
5954
5958
  }
5955
5959
 
5956
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-factory-space/index.js
5960
+ // node_modules/micromark-factory-space/index.js
5957
5961
  function factorySpace(effects, ok3, type, max) {
5958
5962
  const limit = max ? max - 1 : Infinity;
5959
5963
  let size2 = 0;
@@ -5998,7 +6002,7 @@ function factorySpaceMinMax(effects, ok3, nok, type, min, max) {
5998
6002
  }
5999
6003
  }
6000
6004
 
6001
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark/lib/initialize/content.js
6005
+ // node_modules/micromark/lib/initialize/content.js
6002
6006
  var content = {
6003
6007
  tokenize: initializeContent
6004
6008
  };
@@ -6048,7 +6052,7 @@ function initializeContent(effects) {
6048
6052
  }
6049
6053
  }
6050
6054
 
6051
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-edit-map/index.js
6055
+ // node_modules/micromark-util-edit-map/index.js
6052
6056
  var EditMap = class {
6053
6057
  /**
6054
6058
  * Create a new edit map.
@@ -6146,7 +6150,7 @@ function addImplementation(editMap, at, remove, add, before) {
6146
6150
  editMap.index.set(at, change);
6147
6151
  }
6148
6152
 
6149
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark/lib/initialize/document.js
6153
+ // node_modules/micromark/lib/initialize/document.js
6150
6154
  var document2 = {
6151
6155
  tokenize: initializeDocument
6152
6156
  };
@@ -6340,7 +6344,7 @@ function tokenizeContainer(effects, ok3, nok) {
6340
6344
  return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok3, nok), "linePrefix", this.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4);
6341
6345
  }
6342
6346
 
6343
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-classify-character/index.js
6347
+ // node_modules/micromark-util-classify-character/index.js
6344
6348
  function classifyCharacter(code2) {
6345
6349
  if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {
6346
6350
  return 1;
@@ -6350,7 +6354,7 @@ function classifyCharacter(code2) {
6350
6354
  }
6351
6355
  }
6352
6356
 
6353
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-resolve-all/index.js
6357
+ // node_modules/micromark-util-resolve-all/index.js
6354
6358
  function resolveAll(constructs2, events, context) {
6355
6359
  const called = [];
6356
6360
  let index2 = -1;
@@ -6364,7 +6368,7 @@ function resolveAll(constructs2, events, context) {
6364
6368
  return events;
6365
6369
  }
6366
6370
 
6367
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/attention.js
6371
+ // node_modules/micromark-core-commonmark/lib/attention.js
6368
6372
  var attention = {
6369
6373
  name: "attention",
6370
6374
  resolveAll: resolveAllAttention,
@@ -6487,7 +6491,7 @@ function movePoint(point4, offset) {
6487
6491
  point4._bufferIndex += offset;
6488
6492
  }
6489
6493
 
6490
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/autolink.js
6494
+ // node_modules/micromark-core-commonmark/lib/autolink.js
6491
6495
  var autolink = {
6492
6496
  name: "autolink",
6493
6497
  tokenize: tokenizeAutolink
@@ -6588,7 +6592,7 @@ function tokenizeAutolink(effects, ok3, nok) {
6588
6592
  }
6589
6593
  }
6590
6594
 
6591
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/blank-line.js
6595
+ // node_modules/micromark-core-commonmark/lib/blank-line.js
6592
6596
  var blankLine = {
6593
6597
  partial: true,
6594
6598
  tokenize: tokenizeBlankLine
@@ -6603,7 +6607,7 @@ function tokenizeBlankLine(effects, ok3, nok) {
6603
6607
  }
6604
6608
  }
6605
6609
 
6606
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/block-quote.js
6610
+ // node_modules/micromark-core-commonmark/lib/block-quote.js
6607
6611
  var blockQuote = {
6608
6612
  continuation: {
6609
6613
  tokenize: tokenizeBlockQuoteContinuation
@@ -6661,7 +6665,7 @@ function exit(effects) {
6661
6665
  effects.exit("blockQuote");
6662
6666
  }
6663
6667
 
6664
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/character-escape.js
6668
+ // node_modules/micromark-core-commonmark/lib/character-escape.js
6665
6669
  var characterEscape = {
6666
6670
  name: "characterEscape",
6667
6671
  tokenize: tokenizeCharacterEscape
@@ -6687,7 +6691,7 @@ function tokenizeCharacterEscape(effects, ok3, nok) {
6687
6691
  }
6688
6692
  }
6689
6693
 
6690
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/character-reference.js
6694
+ // node_modules/micromark-core-commonmark/lib/character-reference.js
6691
6695
  var characterReference = {
6692
6696
  name: "characterReference",
6693
6697
  tokenize: tokenizeCharacterReference
@@ -6752,7 +6756,7 @@ function tokenizeCharacterReference(effects, ok3, nok) {
6752
6756
  }
6753
6757
  }
6754
6758
 
6755
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/partial-non-lazy-continuation.js
6759
+ // node_modules/micromark-core-commonmark/lib/partial-non-lazy-continuation.js
6756
6760
  var nonLazyContinuation = {
6757
6761
  partial: true,
6758
6762
  tokenize: tokenizeNonLazyContinuation
@@ -6774,7 +6778,7 @@ function tokenizeNonLazyContinuation(effects, ok3, nok) {
6774
6778
  }
6775
6779
  }
6776
6780
 
6777
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/code-fenced.js
6781
+ // node_modules/micromark-core-commonmark/lib/code-fenced.js
6778
6782
  var codeFenced = {
6779
6783
  concrete: true,
6780
6784
  name: "codeFenced",
@@ -6937,7 +6941,7 @@ function tokenizeCodeFenced(effects, ok3, nok) {
6937
6941
  }
6938
6942
  }
6939
6943
 
6940
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/code-indented.js
6944
+ // node_modules/micromark-core-commonmark/lib/code-indented.js
6941
6945
  var codeIndented = {
6942
6946
  name: "codeIndented",
6943
6947
  tokenize: tokenizeCodeIndented
@@ -6995,7 +6999,7 @@ function tokenizeFurtherStart(effects, ok3, nok) {
6995
6999
  }
6996
7000
  }
6997
7001
 
6998
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/code-text.js
7002
+ // node_modules/micromark-core-commonmark/lib/code-text.js
6999
7003
  var codeText = {
7000
7004
  name: "codeText",
7001
7005
  previous,
@@ -7110,7 +7114,7 @@ function tokenizeCodeText(effects, ok3, nok) {
7110
7114
  }
7111
7115
  }
7112
7116
 
7113
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-subtokenize/lib/splice-buffer.js
7117
+ // node_modules/micromark-util-subtokenize/lib/splice-buffer.js
7114
7118
  var SpliceBuffer = class {
7115
7119
  /**
7116
7120
  * @param {ReadonlyArray<T> | null | undefined} [initial]
@@ -7303,7 +7307,7 @@ function chunkedPush(list2, right) {
7303
7307
  }
7304
7308
  }
7305
7309
 
7306
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-subtokenize/index.js
7310
+ // node_modules/micromark-util-subtokenize/index.js
7307
7311
  function subtokenize(eventsArray) {
7308
7312
  const jumps = {};
7309
7313
  let index2 = -1;
@@ -7456,7 +7460,7 @@ function subcontent(events, eventIndex) {
7456
7460
  return gaps;
7457
7461
  }
7458
7462
 
7459
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/content.js
7463
+ // node_modules/micromark-core-commonmark/lib/content.js
7460
7464
  var content2 = {
7461
7465
  resolve: resolveContent,
7462
7466
  tokenize: tokenizeContent
@@ -7527,7 +7531,7 @@ function tokenizeContinuation(effects, ok3, nok) {
7527
7531
  }
7528
7532
  }
7529
7533
 
7530
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-factory-destination/index.js
7534
+ // node_modules/micromark-factory-destination/index.js
7531
7535
  function factoryDestination(effects, ok3, nok, type, literalType, literalMarkerType, rawType, stringType, max) {
7532
7536
  const limit = max || Number.POSITIVE_INFINITY;
7533
7537
  let balance = 0;
@@ -7619,7 +7623,7 @@ function factoryDestination(effects, ok3, nok, type, literalType, literalMarkerT
7619
7623
  }
7620
7624
  }
7621
7625
 
7622
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-factory-label/index.js
7626
+ // node_modules/micromark-factory-label/index.js
7623
7627
  function factoryLabel(effects, ok3, nok, type, markerType, stringType) {
7624
7628
  const self = this;
7625
7629
  let size2 = 0;
@@ -7680,7 +7684,7 @@ function factoryLabel(effects, ok3, nok, type, markerType, stringType) {
7680
7684
  }
7681
7685
  }
7682
7686
 
7683
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-factory-title/index.js
7687
+ // node_modules/micromark-factory-title/index.js
7684
7688
  function factoryTitle(effects, ok3, nok, type, markerType, stringType) {
7685
7689
  let marker;
7686
7690
  return start;
@@ -7742,7 +7746,7 @@ function factoryTitle(effects, ok3, nok, type, markerType, stringType) {
7742
7746
  }
7743
7747
  }
7744
7748
 
7745
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-factory-whitespace/index.js
7749
+ // node_modules/micromark-factory-whitespace/index.js
7746
7750
  function factoryWhitespace(effects, ok3) {
7747
7751
  let seen;
7748
7752
  return start;
@@ -7761,7 +7765,7 @@ function factoryWhitespace(effects, ok3) {
7761
7765
  }
7762
7766
  }
7763
7767
 
7764
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/definition.js
7768
+ // node_modules/micromark-core-commonmark/lib/definition.js
7765
7769
  var definition = {
7766
7770
  name: "definition",
7767
7771
  tokenize: tokenizeDefinition
@@ -7847,7 +7851,7 @@ function tokenizeTitleBefore(effects, ok3, nok) {
7847
7851
  }
7848
7852
  }
7849
7853
 
7850
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/hard-break-escape.js
7854
+ // node_modules/micromark-core-commonmark/lib/hard-break-escape.js
7851
7855
  var hardBreakEscape = {
7852
7856
  name: "hardBreakEscape",
7853
7857
  tokenize: tokenizeHardBreakEscape
@@ -7868,7 +7872,7 @@ function tokenizeHardBreakEscape(effects, ok3, nok) {
7868
7872
  }
7869
7873
  }
7870
7874
 
7871
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/heading-atx.js
7875
+ // node_modules/micromark-core-commonmark/lib/heading-atx.js
7872
7876
  var headingAtx = {
7873
7877
  name: "headingAtx",
7874
7878
  resolve: resolveHeadingAtx,
@@ -7957,7 +7961,7 @@ function tokenizeHeadingAtx(effects, ok3, nok) {
7957
7961
  }
7958
7962
  }
7959
7963
 
7960
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-html-tag-name/index.js
7964
+ // node_modules/micromark-util-html-tag-name/index.js
7961
7965
  var htmlBlockNames = [
7962
7966
  "address",
7963
7967
  "article",
@@ -8024,7 +8028,7 @@ var htmlBlockNames = [
8024
8028
  ];
8025
8029
  var htmlRawNames = ["pre", "script", "style", "textarea"];
8026
8030
 
8027
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/html-flow.js
8031
+ // node_modules/micromark-core-commonmark/lib/html-flow.js
8028
8032
  var htmlFlow = {
8029
8033
  concrete: true,
8030
8034
  name: "htmlFlow",
@@ -8383,7 +8387,7 @@ function tokenizeBlankLineBefore(effects, ok3, nok) {
8383
8387
  }
8384
8388
  }
8385
8389
 
8386
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/html-text.js
8390
+ // node_modules/micromark-core-commonmark/lib/html-text.js
8387
8391
  var htmlText = {
8388
8392
  name: "htmlText",
8389
8393
  tokenize: tokenizeHtmlText
@@ -8689,7 +8693,7 @@ function tokenizeHtmlText(effects, ok3, nok) {
8689
8693
  }
8690
8694
  }
8691
8695
 
8692
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/label-end.js
8696
+ // node_modules/micromark-core-commonmark/lib/label-end.js
8693
8697
  var labelEnd = {
8694
8698
  name: "labelEnd",
8695
8699
  resolveAll: resolveAllLabelEnd,
@@ -8915,7 +8919,7 @@ function tokenizeReferenceCollapsed(effects, ok3, nok) {
8915
8919
  }
8916
8920
  }
8917
8921
 
8918
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/label-start-image.js
8922
+ // node_modules/micromark-core-commonmark/lib/label-start-image.js
8919
8923
  var labelStartImage = {
8920
8924
  name: "labelStartImage",
8921
8925
  resolveAll: labelEnd.resolveAll,
@@ -8952,7 +8956,7 @@ function tokenizeLabelStartImage(effects, ok3, nok) {
8952
8956
  }
8953
8957
  }
8954
8958
 
8955
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/label-start-link.js
8959
+ // node_modules/micromark-core-commonmark/lib/label-start-link.js
8956
8960
  var labelStartLink = {
8957
8961
  name: "labelStartLink",
8958
8962
  resolveAll: labelEnd.resolveAll,
@@ -8980,7 +8984,7 @@ function tokenizeLabelStartLink(effects, ok3, nok) {
8980
8984
  }
8981
8985
  }
8982
8986
 
8983
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/line-ending.js
8987
+ // node_modules/micromark-core-commonmark/lib/line-ending.js
8984
8988
  var lineEnding = {
8985
8989
  name: "lineEnding",
8986
8990
  tokenize: tokenizeLineEnding
@@ -8995,7 +8999,7 @@ function tokenizeLineEnding(effects, ok3) {
8995
8999
  }
8996
9000
  }
8997
9001
 
8998
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/thematic-break.js
9002
+ // node_modules/micromark-core-commonmark/lib/thematic-break.js
8999
9003
  var thematicBreak = {
9000
9004
  name: "thematicBreak",
9001
9005
  tokenize: tokenizeThematicBreak
@@ -9034,7 +9038,7 @@ function tokenizeThematicBreak(effects, ok3, nok) {
9034
9038
  }
9035
9039
  }
9036
9040
 
9037
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/list.js
9041
+ // node_modules/micromark-core-commonmark/lib/list.js
9038
9042
  var list = {
9039
9043
  continuation: {
9040
9044
  tokenize: tokenizeListContinuation
@@ -9164,7 +9168,7 @@ function tokenizeListItemPrefixWhitespace(effects, ok3, nok) {
9164
9168
  }
9165
9169
  }
9166
9170
 
9167
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-core-commonmark/lib/setext-underline.js
9171
+ // node_modules/micromark-core-commonmark/lib/setext-underline.js
9168
9172
  var setextUnderline = {
9169
9173
  name: "setextUnderline",
9170
9174
  resolveTo: resolveToSetextUnderline,
@@ -9258,7 +9262,7 @@ function tokenizeSetextUnderline(effects, ok3, nok) {
9258
9262
  }
9259
9263
  }
9260
9264
 
9261
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark/lib/initialize/flow.js
9265
+ // node_modules/micromark/lib/initialize/flow.js
9262
9266
  var flow = {
9263
9267
  tokenize: initializeFlow
9264
9268
  };
@@ -9296,7 +9300,7 @@ function initializeFlow(effects) {
9296
9300
  }
9297
9301
  }
9298
9302
 
9299
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark/lib/initialize/text.js
9303
+ // node_modules/micromark/lib/initialize/text.js
9300
9304
  var resolver = {
9301
9305
  resolveAll: createResolver()
9302
9306
  };
@@ -9438,7 +9442,7 @@ function resolveAllLineSuffixes(events, context) {
9438
9442
  return events;
9439
9443
  }
9440
9444
 
9441
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark/lib/constructs.js
9445
+ // node_modules/micromark/lib/constructs.js
9442
9446
  var constructs_exports = {};
9443
9447
  __export(constructs_exports, {
9444
9448
  attentionMarkers: () => attentionMarkers,
@@ -9513,7 +9517,7 @@ var disable = {
9513
9517
  null: []
9514
9518
  };
9515
9519
 
9516
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark/lib/create-tokenizer.js
9520
+ // node_modules/micromark/lib/create-tokenizer.js
9517
9521
  function createTokenizer(parser, initialize, from) {
9518
9522
  let point4 = {
9519
9523
  _bufferIndex: -1,
@@ -9839,7 +9843,7 @@ function serializeChunks(chunks, expandTabs) {
9839
9843
  return result.join("");
9840
9844
  }
9841
9845
 
9842
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark/lib/parse.js
9846
+ // node_modules/micromark/lib/parse.js
9843
9847
  function parse(options) {
9844
9848
  const settings = options || {};
9845
9849
  const constructs2 = (
@@ -9865,14 +9869,14 @@ function parse(options) {
9865
9869
  }
9866
9870
  }
9867
9871
 
9868
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark/lib/postprocess.js
9872
+ // node_modules/micromark/lib/postprocess.js
9869
9873
  function postprocess(events) {
9870
9874
  while (!subtokenize(events)) {
9871
9875
  }
9872
9876
  return events;
9873
9877
  }
9874
9878
 
9875
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark/lib/preprocess.js
9879
+ // node_modules/micromark/lib/preprocess.js
9876
9880
  var search = /[\0\t\n\r]/g;
9877
9881
  function preprocess() {
9878
9882
  let column = 1;
@@ -9952,7 +9956,7 @@ function preprocess() {
9952
9956
  }
9953
9957
  }
9954
9958
 
9955
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-util-decode-string/index.js
9959
+ // node_modules/micromark-util-decode-string/index.js
9956
9960
  var characterEscapeOrReference = /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;
9957
9961
  function decodeString(value) {
9958
9962
  return value.replace(characterEscapeOrReference, decode);
@@ -9970,7 +9974,7 @@ function decode($0, $1, $2) {
9970
9974
  return decodeNamedCharacterReference($2) || $0;
9971
9975
  }
9972
9976
 
9973
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/unist-util-stringify-position/lib/index.js
9977
+ // node_modules/unist-util-stringify-position/lib/index.js
9974
9978
  function stringifyPosition(value) {
9975
9979
  if (!value || typeof value !== "object") {
9976
9980
  return "";
@@ -9996,7 +10000,7 @@ function index(value) {
9996
10000
  return value && typeof value === "number" ? value : 1;
9997
10001
  }
9998
10002
 
9999
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/mdast-util-from-markdown/lib/index.js
10003
+ // node_modules/mdast-util-from-markdown/lib/index.js
10000
10004
  var own = {}.hasOwnProperty;
10001
10005
  function fromMarkdown(value, encoding, options) {
10002
10006
  if (encoding && typeof encoding === "object") {
@@ -10705,7 +10709,7 @@ function defaultOnError(left, right) {
10705
10709
  }
10706
10710
  }
10707
10711
 
10708
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js
10712
+ // node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js
10709
10713
  var wwwPrefix = {
10710
10714
  tokenize: tokenizeWwwPrefix,
10711
10715
  partial: true
@@ -11047,7 +11051,7 @@ function previousUnbalanced(events) {
11047
11051
  return result;
11048
11052
  }
11049
11053
 
11050
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-extension-gfm-footnote/lib/syntax.js
11054
+ // node_modules/micromark-extension-gfm-footnote/lib/syntax.js
11051
11055
  var indent = {
11052
11056
  tokenize: tokenizeIndent2,
11053
11057
  partial: true
@@ -11322,7 +11326,7 @@ function tokenizeIndent2(effects, ok3, nok) {
11322
11326
  }
11323
11327
  }
11324
11328
 
11325
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js
11329
+ // node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js
11326
11330
  function gfmStrikethrough(options) {
11327
11331
  const options_ = options || {};
11328
11332
  let single = options_.singleTilde;
@@ -11416,7 +11420,7 @@ function gfmStrikethrough(options) {
11416
11420
  }
11417
11421
  }
11418
11422
 
11419
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-extension-gfm-table/lib/edit-map.js
11423
+ // node_modules/micromark-extension-gfm-table/lib/edit-map.js
11420
11424
  var EditMap2 = class {
11421
11425
  /**
11422
11426
  * Create a new edit map.
@@ -11502,7 +11506,7 @@ function addImplementation2(editMap, at, remove, add) {
11502
11506
  editMap.index.set(at, change);
11503
11507
  }
11504
11508
 
11505
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-extension-gfm-table/lib/infer.js
11509
+ // node_modules/micromark-extension-gfm-table/lib/infer.js
11506
11510
  function gfmTableAlign(events, index2) {
11507
11511
  let inDelimiterRow = false;
11508
11512
  const align = [];
@@ -11529,7 +11533,7 @@ function gfmTableAlign(events, index2) {
11529
11533
  return align;
11530
11534
  }
11531
11535
 
11532
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-extension-gfm-table/lib/syntax.js
11536
+ // node_modules/micromark-extension-gfm-table/lib/syntax.js
11533
11537
  function gfmTable() {
11534
11538
  return {
11535
11539
  flow: {
@@ -11920,7 +11924,7 @@ function getPoint(events, index2) {
11920
11924
  return event[1][side];
11921
11925
  }
11922
11926
 
11923
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js
11927
+ // node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js
11924
11928
  var tasklistCheck = {
11925
11929
  name: "tasklistCheck",
11926
11930
  tokenize: tokenizeTasklistCheck
@@ -11994,7 +11998,7 @@ function spaceThenNonSpace(effects, ok3, nok) {
11994
11998
  }
11995
11999
  }
11996
12000
 
11997
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/micromark-extension-gfm/index.js
12001
+ // node_modules/micromark-extension-gfm/index.js
11998
12002
  function gfm(options) {
11999
12003
  return combineExtensions([
12000
12004
  gfmAutolinkLiteral(),
@@ -12005,7 +12009,7 @@ function gfm(options) {
12005
12009
  ]);
12006
12010
  }
12007
12011
 
12008
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/ccount/index.js
12012
+ // node_modules/ccount/index.js
12009
12013
  function ccount(value, character) {
12010
12014
  const source = String(value);
12011
12015
  if (typeof character !== "string") {
@@ -12020,11 +12024,11 @@ function ccount(value, character) {
12020
12024
  return count;
12021
12025
  }
12022
12026
 
12023
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/devlop/lib/default.js
12027
+ // node_modules/devlop/lib/default.js
12024
12028
  function ok() {
12025
12029
  }
12026
12030
 
12027
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/escape-string-regexp/index.js
12031
+ // node_modules/escape-string-regexp/index.js
12028
12032
  function escapeStringRegexp(string3) {
12029
12033
  if (typeof string3 !== "string") {
12030
12034
  throw new TypeError("Expected a string");
@@ -12032,7 +12036,7 @@ function escapeStringRegexp(string3) {
12032
12036
  return string3.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
12033
12037
  }
12034
12038
 
12035
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/unist-util-is/lib/index.js
12039
+ // node_modules/unist-util-is/lib/index.js
12036
12040
  var convert = (
12037
12041
  // Note: overloads in JSDoc can’t yet use different `@template`s.
12038
12042
  /**
@@ -12131,12 +12135,12 @@ function looksLikeANode(value) {
12131
12135
  return value !== null && typeof value === "object" && "type" in value;
12132
12136
  }
12133
12137
 
12134
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/unist-util-visit-parents/lib/color.js
12138
+ // node_modules/unist-util-visit-parents/lib/color.js
12135
12139
  function color(d) {
12136
12140
  return d;
12137
12141
  }
12138
12142
 
12139
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/unist-util-visit-parents/lib/index.js
12143
+ // node_modules/unist-util-visit-parents/lib/index.js
12140
12144
  var empty = [];
12141
12145
  var CONTINUE = true;
12142
12146
  var EXIT = false;
@@ -12213,7 +12217,7 @@ function toResult(value) {
12213
12217
  return value === null || value === void 0 ? empty : [value];
12214
12218
  }
12215
12219
 
12216
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/mdast-util-find-and-replace/lib/index.js
12220
+ // node_modules/mdast-util-find-and-replace/lib/index.js
12217
12221
  function findAndReplace(tree, list2, options) {
12218
12222
  const settings = options || {};
12219
12223
  const ignored = convert(settings.ignore || []);
@@ -12318,7 +12322,7 @@ function toFunction(replace2) {
12318
12322
  };
12319
12323
  }
12320
12324
 
12321
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/mdast-util-gfm-autolink-literal/lib/index.js
12325
+ // node_modules/mdast-util-gfm-autolink-literal/lib/index.js
12322
12326
  function gfmAutolinkLiteralFromMarkdown() {
12323
12327
  return {
12324
12328
  transforms: [transformGfmAutolinkLiterals],
@@ -12439,7 +12443,7 @@ function previous2(match, email) {
12439
12443
  (!email || code2 !== 47);
12440
12444
  }
12441
12445
 
12442
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/mdast-util-gfm-footnote/lib/index.js
12446
+ // node_modules/mdast-util-gfm-footnote/lib/index.js
12443
12447
  footnoteReference.peek = footnoteReferencePeek;
12444
12448
  function enterFootnoteCallString() {
12445
12449
  this.buffer();
@@ -12513,7 +12517,7 @@ function gfmFootnoteFromMarkdown() {
12513
12517
  };
12514
12518
  }
12515
12519
 
12516
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/mdast-util-gfm-strikethrough/lib/index.js
12520
+ // node_modules/mdast-util-gfm-strikethrough/lib/index.js
12517
12521
  handleDelete.attention = attentionDelete;
12518
12522
  handleDelete.peek = peekDelete;
12519
12523
  function gfmStrikethroughFromMarkdown() {
@@ -12550,7 +12554,7 @@ function peekDelete() {
12550
12554
  return "~";
12551
12555
  }
12552
12556
 
12553
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/mdast-util-gfm-table/lib/index.js
12557
+ // node_modules/mdast-util-gfm-table/lib/index.js
12554
12558
  function gfmTableFromMarkdown() {
12555
12559
  return {
12556
12560
  enter: {
@@ -12610,7 +12614,7 @@ function replace($0, $1) {
12610
12614
  return $1 === "|" ? $1 : $0;
12611
12615
  }
12612
12616
 
12613
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/mdast-util-gfm-task-list-item/lib/index.js
12617
+ // node_modules/mdast-util-gfm-task-list-item/lib/index.js
12614
12618
  function gfmTaskListItemFromMarkdown() {
12615
12619
  return {
12616
12620
  exit: {
@@ -12657,7 +12661,7 @@ function exitParagraphWithTaskListItem(token) {
12657
12661
  this.exit(token);
12658
12662
  }
12659
12663
 
12660
- // ../../../home/moye/Online Document/dsh-plugins/dsh-partner/node_modules/mdast-util-gfm/lib/index.js
12664
+ // node_modules/mdast-util-gfm/lib/index.js
12661
12665
  function gfmFromMarkdown() {
12662
12666
  return [
12663
12667
  gfmAutolinkLiteralFromMarkdown(),
@@ -12856,6 +12860,63 @@ function PendantReader({ inbox, selected, error, anchor, onSelect, onClose, onVi
12856
12860
  ] });
12857
12861
  }
12858
12862
 
12863
+ // src/pendant/startup.ts
12864
+ function waitForPendantStartup(signal, doc = document) {
12865
+ return new Promise((resolve, reject) => {
12866
+ const win = doc.defaultView;
12867
+ let timer2 = 0, idle = 0;
12868
+ const started = Date.now();
12869
+ const cleanup = () => {
12870
+ win.clearTimeout(timer2);
12871
+ if (idle) win.cancelIdleCallback?.(idle);
12872
+ doc.removeEventListener("visibilitychange", schedule);
12873
+ doc.removeEventListener("pointerdown", schedule);
12874
+ doc.removeEventListener("keydown", schedule);
12875
+ signal.removeEventListener("abort", abort);
12876
+ };
12877
+ const abort = () => {
12878
+ cleanup();
12879
+ reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
12880
+ };
12881
+ const run = () => {
12882
+ idle = 0;
12883
+ if (signal.aborted) {
12884
+ abort();
12885
+ return;
12886
+ }
12887
+ if (doc.hidden) {
12888
+ schedule();
12889
+ return;
12890
+ }
12891
+ cleanup();
12892
+ resolve();
12893
+ };
12894
+ function schedule() {
12895
+ win.clearTimeout(timer2);
12896
+ if (idle) {
12897
+ win.cancelIdleCallback?.(idle);
12898
+ idle = 0;
12899
+ }
12900
+ if (doc.hidden) return;
12901
+ const elapsed = Date.now() - started;
12902
+ timer2 = win.setTimeout(() => {
12903
+ timer2 = 0;
12904
+ if (win.requestIdleCallback) idle = win.requestIdleCallback(run, { timeout: 1500 });
12905
+ else run();
12906
+ }, Math.max(0, 2e3 - elapsed, Math.min(600, 6e3 - elapsed)));
12907
+ }
12908
+ if (signal.aborted) {
12909
+ abort();
12910
+ return;
12911
+ }
12912
+ signal.addEventListener("abort", abort, { once: true });
12913
+ doc.addEventListener("visibilitychange", schedule);
12914
+ doc.addEventListener("pointerdown", schedule, { passive: true });
12915
+ doc.addEventListener("keydown", schedule);
12916
+ schedule();
12917
+ });
12918
+ }
12919
+
12859
12920
  // src/pendant/widget.tsx
12860
12921
  var import_jsx_runtime23 = require("react/jsx-runtime");
12861
12922
  function messageLabel(notice) {
@@ -12904,10 +12965,10 @@ function ActivePendant({ controller, settings }) {
12904
12965
  (0, import_react25.useEffect)(() => {
12905
12966
  const abort = new AbortController();
12906
12967
  const url = `${PARTNER_API}/pendant/renderer.js`;
12907
- void import(
12968
+ void waitForPendantStartup(abort.signal).then(() => import(
12908
12969
  /* @vite-ignore */
12909
12970
  url
12910
- ).then(async (module2) => {
12971
+ )).then(async (module2) => {
12911
12972
  if (abort.signal.aborted || !canvas.current || !hit.current) return;
12912
12973
  const instance = await module2.createLanyard(canvas.current, hit.current, {
12913
12974
  signal: abort.signal,
@@ -13404,8 +13465,12 @@ function SkillsPanel() {
13404
13465
  const [query, setQuery] = (0, import_react30.useState)("");
13405
13466
  const [activeSource, setActiveSource] = (0, import_react30.useState)("market-clawhub");
13406
13467
  const [busy, setBusy] = (0, import_react30.useState)();
13407
- const [loading, setLoading] = (0, import_react30.useState)(true);
13408
- const [error, setError] = (0, import_react30.useState)();
13468
+ const [catalogLoading, setCatalogLoading] = (0, import_react30.useState)(true);
13469
+ const [marketLoading, setMarketLoading] = (0, import_react30.useState)(true);
13470
+ const [networkLoading, setNetworkLoading] = (0, import_react30.useState)(true);
13471
+ const [catalogError, setCatalogError] = (0, import_react30.useState)();
13472
+ const [marketError, setMarketError] = (0, import_react30.useState)();
13473
+ const [networkError, setNetworkError] = (0, import_react30.useState)();
13409
13474
  const [actionError, setActionError] = (0, import_react30.useState)();
13410
13475
  const [addingSource, setAddingSource] = (0, import_react30.useState)(false);
13411
13476
  const [creatingSkill, setCreatingSkill] = (0, import_react30.useState)(false);
@@ -13413,26 +13478,46 @@ function SkillsPanel() {
13413
13478
  const [editingNetwork, setEditingNetwork] = (0, import_react30.useState)(false);
13414
13479
  const [showAllInstalled, setShowAllInstalled] = (0, import_react30.useState)(false);
13415
13480
  const [network, setNetwork] = (0, import_react30.useState)({});
13416
- const load2 = (0, import_react30.useCallback)(async (refresh = false) => {
13481
+ const loadCatalog = (0, import_react30.useCallback)(async () => {
13482
+ setCatalogLoading(true);
13417
13483
  try {
13418
- const [nextCatalog, nextMarket, nextNetwork] = await Promise.all([
13419
- api("/skills"),
13420
- api(`/skills/market${refresh ? "?refresh=1" : ""}`),
13421
- api("/skill-markets/network")
13422
- ]);
13423
- setCatalog(nextCatalog);
13424
- setMarket(nextMarket);
13425
- setNetwork(nextNetwork);
13426
- setError(void 0);
13484
+ setCatalog(await api("/skills"));
13485
+ setCatalogError(void 0);
13427
13486
  } catch (reason) {
13428
- setError(errorMessage(reason));
13487
+ setCatalogError(errorMessage(reason));
13429
13488
  } finally {
13430
- setLoading(false);
13489
+ setCatalogLoading(false);
13431
13490
  }
13432
13491
  }, []);
13492
+ const loadMarket = (0, import_react30.useCallback)(async (refresh = false) => {
13493
+ setMarketLoading(true);
13494
+ try {
13495
+ setMarket(await api(`/skills/market${refresh ? "?refresh=1" : ""}`));
13496
+ setMarketError(void 0);
13497
+ } catch (reason) {
13498
+ setMarketError(errorMessage(reason));
13499
+ } finally {
13500
+ setMarketLoading(false);
13501
+ }
13502
+ }, []);
13503
+ const loadNetwork = (0, import_react30.useCallback)(async () => {
13504
+ setNetworkLoading(true);
13505
+ try {
13506
+ setNetwork(await api("/skill-markets/network"));
13507
+ setNetworkError(void 0);
13508
+ } catch (reason) {
13509
+ setNetworkError(errorMessage(reason));
13510
+ } finally {
13511
+ setNetworkLoading(false);
13512
+ }
13513
+ }, []);
13514
+ const load2 = (0, import_react30.useCallback)(async (refresh = false) => {
13515
+ await Promise.all([loadCatalog(), loadMarket(refresh), loadNetwork()]);
13516
+ }, [loadCatalog, loadMarket, loadNetwork]);
13433
13517
  (0, import_react30.useEffect)(() => {
13434
13518
  void load2();
13435
13519
  }, [load2]);
13520
+ const loading = catalogLoading || marketLoading || networkLoading;
13436
13521
  const installed = new Map(catalog.installed.map((item) => [item.id, item]));
13437
13522
  const visibleInstalled = showAllInstalled ? catalog.installed : catalog.installed.slice(0, 4);
13438
13523
  const visible = (0, import_react30.useMemo)(() => {
@@ -13449,7 +13534,7 @@ function SkillsPanel() {
13449
13534
  setActionError(void 0);
13450
13535
  try {
13451
13536
  await api("/skills/market/install", { method: "POST", body: JSON.stringify({ sourceId: entry.sourceId, entryId: entry.id }) });
13452
- await load2();
13537
+ await loadCatalog();
13453
13538
  } catch (reason) {
13454
13539
  setActionError({ kind: "install", id: entry.id, message: errorMessage(reason) });
13455
13540
  } finally {
@@ -13461,7 +13546,7 @@ function SkillsPanel() {
13461
13546
  setActionError(void 0);
13462
13547
  try {
13463
13548
  await api(`/skills/${encodeURIComponent(id)}`, { method: "DELETE" });
13464
- await load2();
13549
+ await loadCatalog();
13465
13550
  } catch (reason) {
13466
13551
  setActionError({ kind: "uninstall", id, message: errorMessage(reason) });
13467
13552
  } finally {
@@ -13475,12 +13560,23 @@ function SkillsPanel() {
13475
13560
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconRefreshOutlineRegular, { size: 15 }),
13476
13561
  loading ? "\u540C\u6B65\u4E2D\u2026" : "\u5237\u65B0\u5E02\u573A"
13477
13562
  ] }) }),
13478
- error && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(WorkspaceNotice, { children: error }),
13479
- importingSkill && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SkillImportDialog, { close: () => setImportingSkill(false), changed: load2 }),
13480
- creatingSkill && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(WorkspaceDialog, { title: "\u65B0\u5EFA Skill", detail: "\u521B\u5EFA\u4E00\u4E2A\u53EF\u590D\u7528\u7684\u5DE5\u4F5C\u6D41\u7A0B\uFF0C\u5E76\u660E\u786E\u6267\u884C\u4E0A\u4E0B\u6587\u3001\u5DE5\u5177\u8FB9\u754C\u548C\u9A8C\u6536\u6307\u4EE4\u3002", close: () => setCreatingSkill(false), width: "wide", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(NewSkillForm, { existingIds: catalog.installed.map((skill) => skill.id), close: () => setCreatingSkill(false), changed: load2 }) }),
13563
+ catalogError && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(WorkspaceNotice, { children: [
13564
+ "\u5DF2\u5B89\u88C5 Skill \u8BFB\u53D6\u5931\u8D25\uFF1A",
13565
+ catalogError
13566
+ ] }),
13567
+ marketError && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(WorkspaceNotice, { children: [
13568
+ "\u5E02\u573A\u76EE\u5F55\u8BFB\u53D6\u5931\u8D25\uFF1A",
13569
+ marketError
13570
+ ] }),
13571
+ networkError && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(WorkspaceNotice, { children: [
13572
+ "\u5E02\u573A\u7F51\u7EDC\u8BBE\u7F6E\u8BFB\u53D6\u5931\u8D25\uFF1A",
13573
+ networkError
13574
+ ] }),
13575
+ importingSkill && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SkillImportDialog, { close: () => setImportingSkill(false), changed: loadCatalog }),
13576
+ creatingSkill && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(WorkspaceDialog, { title: "\u65B0\u5EFA Skill", detail: "\u521B\u5EFA\u4E00\u4E2A\u53EF\u590D\u7528\u7684\u5DE5\u4F5C\u6D41\u7A0B\uFF0C\u5E76\u660E\u786E\u6267\u884C\u4E0A\u4E0B\u6587\u3001\u5DE5\u5177\u8FB9\u754C\u548C\u9A8C\u6536\u6307\u4EE4\u3002", close: () => setCreatingSkill(false), width: "wide", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(NewSkillForm, { existingIds: catalog.installed.map((skill) => skill.id), close: () => setCreatingSkill(false), changed: loadCatalog }) }),
13481
13577
  editingNetwork && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(WorkspaceDialog, { title: "\u5E02\u573A\u7F51\u7EDC\u8BBE\u7F6E", detail: "\u914D\u7F6E Skill \u7D22\u5F15\u548C\u5B89\u88C5\u5305\u4E0B\u8F7D\u5171\u7528\u7684 HTTP \u4EE3\u7406\uFF0C\u5E76\u5728\u4FDD\u5B58\u524D\u6D4B\u8BD5\u8FDE\u901A\u6027\u3002", close: () => setEditingNetwork(false), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(NetworkSettingsForm, { value: network, close: () => setEditingNetwork(false), changed: async (next) => {
13482
13578
  setNetwork(next);
13483
- await load2(true);
13579
+ await loadMarket(true);
13484
13580
  } }) }),
13485
13581
  addingSource && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(WorkspaceDialog, { title: "\u6DFB\u52A0\u5E02\u573A\u6765\u6E90", detail: "\u63A5\u5165\u56E2\u961F\u6216\u4E2A\u4EBA\u7EF4\u62A4\u7684 Skill \u7D22\u5F15\u3002\u81EA\u5B9A\u4E49\u6765\u6E90\u9ED8\u8BA4\u6309\u4E0D\u53EF\u4FE1\u6765\u6E90\u9694\u79BB\u6267\u884C\u3002", close: () => setAddingSource(false), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(MarketSourceForm, { close: () => setAddingSource(false), changed: () => load2(true) }) }),
13486
13582
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(WorkspaceBlock, { title: "\u5DF2\u5B89\u88C5", detail: `${catalog.installed.length} \u4E2A\u53EF\u4F9B\u4F19\u4F34\u4F7F\u7528`, actions: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
@@ -13489,7 +13585,7 @@ function SkillsPanel() {
13489
13585
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutlineRegular, { size: 14 }),
13490
13586
  "\u65B0\u5EFA Skill"
13491
13587
  ] })
13492
- ] }), children: loading ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CollectionSkeleton, { rows: 2 }) : catalog.installed.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CollectionEmpty, { title: "\u8FD8\u6CA1\u6709\u5B89\u88C5 Skill", detail: "\u53EF\u4EE5\u521B\u5EFA\u81EA\u5DF1\u7684 Skill\uFF0C\u6216\u4ECE\u4E0B\u65B9\u5E02\u573A\u9009\u62E9\u3002", action: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("button", { type: "button", onClick: () => setCreatingSkill(true), children: [
13588
+ ] }), children: catalogLoading ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CollectionSkeleton, { rows: 2 }) : catalog.installed.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CollectionEmpty, { title: "\u8FD8\u6CA1\u6709\u5B89\u88C5 Skill", detail: "\u53EF\u4EE5\u521B\u5EFA\u81EA\u5DF1\u7684 Skill\uFF0C\u6216\u4ECE\u4E0B\u65B9\u5E02\u573A\u9009\u62E9\u3002", action: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("button", { type: "button", onClick: () => setCreatingSkill(true), children: [
13493
13589
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_dsh_client_ui_primitives11.IconPlusOutlineRegular, { size: 14 }),
13494
13590
  "\u65B0\u5EFA\u7B2C\u4E00\u4E2A Skill"
13495
13591
  ] }) }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
@@ -13527,14 +13623,14 @@ function SkillsPanel() {
13527
13623
  ] })
13528
13624
  ] }), children: [
13529
13625
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "dsh-partner-market-toolbar", children: [
13530
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SkillSearch, { value: query, change: setQuery, count: visible.length, label: "\u641C\u7D22 Skill \u5E02\u573A", placeholder: "\u641C\u7D22\u540D\u79F0\u3001\u8BF4\u660E\u6216\u6807\u7B7E", loading }),
13626
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SkillSearch, { value: query, change: setQuery, count: visible.length, label: "\u641C\u7D22 Skill \u5E02\u573A", placeholder: "\u641C\u7D22\u540D\u79F0\u3001\u8BF4\u660E\u6216\u6807\u7B7E", loading: marketLoading }),
13531
13627
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("nav", { className: "dsh-partner-market-sources", "aria-label": "Skill \u5E02\u573A\u6765\u6E90", children: sources.map((source) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("button", { type: "button", className: activeSource === source.id ? "is-active" : "", "aria-pressed": activeSource === source.id, onClick: () => setActiveSource(source.id), children: [
13532
13628
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: source.name }),
13533
13629
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("small", { children: sourceCounts.get(source.id) ?? 0 })
13534
13630
  ] }, source.id)) })
13535
13631
  ] }),
13536
13632
  market.errors.some((item) => item.sourceId === activeSource) && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "dsh-partner-inline-warning", children: market.errors.filter((item) => item.sourceId === activeSource).map((item) => item.error).join("\uFF1B") }),
13537
- loading ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CollectionSkeleton, { rows: 4 }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "dsh-partner-market-grid", children: visible.map((entry) => {
13633
+ marketLoading ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CollectionSkeleton, { rows: 4 }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "dsh-partner-market-grid", children: visible.map((entry) => {
13538
13634
  const current2 = installed.get(entry.id);
13539
13635
  const cardError = actionError?.kind === "install" && actionError.id === entry.id ? actionError.message : void 0;
13540
13636
  const errorId = cardError ? `dsh-partner-skill-error-${entry.id}` : void 0;
@@ -13562,7 +13658,7 @@ function SkillsPanel() {
13562
13658
  ] })
13563
13659
  ] }, `${entry.sourceId}:${entry.id}`);
13564
13660
  }) }),
13565
- !loading && visible.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CollectionEmpty, { title: query ? "\u6CA1\u6709\u5339\u914D\u7684 Skill" : "\u5F53\u524D\u6765\u6E90\u6682\u65F6\u4E0D\u53EF\u7528", detail: query ? "\u6362\u4E00\u4E2A\u5173\u952E\u8BCD\uFF0C\u6216\u5207\u6362\u5E02\u573A\u6765\u6E90\u3002" : "\u5237\u65B0\u5E02\u573A\uFF0C\u6216\u68C0\u67E5\u4EE3\u7406\u4E0E\u6765\u6E90\u914D\u7F6E\u3002" })
13661
+ !marketLoading && visible.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CollectionEmpty, { title: query ? "\u6CA1\u6709\u5339\u914D\u7684 Skill" : "\u5F53\u524D\u6765\u6E90\u6682\u65F6\u4E0D\u53EF\u7528", detail: query ? "\u6362\u4E00\u4E2A\u5173\u952E\u8BCD\uFF0C\u6216\u5207\u6362\u5E02\u573A\u6765\u6E90\u3002" : "\u5237\u65B0\u5E02\u573A\uFF0C\u6216\u68C0\u67E5\u4EE3\u7406\u4E0E\u6765\u6E90\u914D\u7F6E\u3002" })
13566
13662
  ] })
13567
13663
  ] });
13568
13664
  }
@@ -15184,6 +15280,7 @@ function SchedulePanel({ companions }) {
15184
15280
  const [loading, setLoading] = (0, import_react38.useState)(true);
15185
15281
  const [error, setError] = (0, import_react38.useState)();
15186
15282
  const eligible = companions.filter((c) => c.capabilities.includes("schedules"));
15283
+ const visibleSchedules = schedules.filter((item) => item.schedule.kind !== "once" || !item.continuation || !["completed", "cancelled"].includes(item.continuation.state));
15187
15284
  const load2 = (0, import_react38.useCallback)(async () => {
15188
15285
  try {
15189
15286
  const value = await api("/schedules");
@@ -15259,10 +15356,10 @@ function SchedulePanel({ companions }) {
15259
15356
  eligible.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(WorkspaceNotice, { children: "\u8BF7\u5148\u5728\u4F19\u4F34\u80FD\u529B\u4E2D\u52FE\u9009\u201C\u5B9A\u65F6\u4EFB\u52A1\u201D\u3002\u5173\u95ED\u80FD\u529B\u540E\uFF0C\u5DF2\u6709\u8BA1\u5212\u4E0D\u4F1A\u7EE7\u7EED\u6267\u884C\u3002" }),
15260
15357
  error && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(WorkspaceNotice, { children: error }),
15261
15358
  creating && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(WorkspaceDialog, { title: "\u65B0\u5EFA\u5B9A\u65F6\u4EFB\u52A1", detail: "\u9009\u62E9\u6267\u884C\u4F19\u4F34\u3001\u8FD0\u884C\u9891\u7387\u548C\u4F1A\u8BDD\u4FDD\u7559\u7B56\u7565\u3002\u957F\u4EFB\u52A1\u7EED\u63A5\u7531\u4F19\u4F34\u901A\u8FC7\u5DE5\u5177\u9884\u7EA6\uFF0C\u65E0\u9700\u5728\u8FD9\u91CC\u624B\u52A8\u521B\u5EFA\u3002", close: () => setCreating(false), width: "wide", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ScheduleForm, { companions: eligible, close: () => setCreating(false), changed: load2 }) }),
15262
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(WorkspaceBlock, { title: "\u6267\u884C\u8BA1\u5212", detail: `${schedules.filter((item) => item.enabled && eligible.some((c) => c.id === item.companionId)).length} \u4E2A\u542F\u7528`, children: loading ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(CollectionSkeleton, { rows: 3 }) : schedules.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(CollectionEmpty, { title: "\u8FD8\u6CA1\u6709\u5B9A\u65F6\u4EFB\u52A1", detail: "\u5468\u671F\u8BA1\u5212\u548C\u957F\u4EFB\u52A1\u7EED\u63A5\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002", action: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("button", { type: "button", disabled: eligible.length === 0, onClick: () => setCreating(true), children: [
15359
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(WorkspaceBlock, { title: "\u6267\u884C\u8BA1\u5212", detail: `${visibleSchedules.filter((item) => item.enabled && eligible.some((c) => c.id === item.companionId)).length} \u4E2A\u542F\u7528`, children: loading ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(CollectionSkeleton, { rows: 3 }) : visibleSchedules.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(CollectionEmpty, { title: "\u8FD8\u6CA1\u6709\u5B9A\u65F6\u4EFB\u52A1", detail: "\u5468\u671F\u8BA1\u5212\u548C\u7B49\u5F85\u5904\u7406\u7684\u957F\u4EFB\u52A1\u7EED\u63A5\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002", action: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("button", { type: "button", disabled: eligible.length === 0, onClick: () => setCreating(true), children: [
15263
15360
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_dsh_client_ui_primitives17.IconPlusOutlineRegular, { size: 14 }),
15264
15361
  "\u521B\u5EFA\u7B2C\u4E00\u4E2A\u8BA1\u5212"
15265
- ] }) }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "dsh-partner-schedule-list", children: schedules.map((entry) => {
15362
+ ] }) }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "dsh-partner-schedule-list", children: visibleSchedules.map((entry) => {
15266
15363
  const wake = entry.continuation, allowed = eligible.some((c) => c.id === entry.companionId);
15267
15364
  const terminal = wake && ["completed", "blocked", "cancelled"].includes(wake.state);
15268
15365
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("article", { children: [
@@ -15648,47 +15745,16 @@ var titles = { skills: "Skill", access: "\u53EF\u8BBF\u95EE\u4F19\u4F34", mcp: "
15648
15745
  function CapabilityResources({ companionId, capabilities, disabled, children }) {
15649
15746
  const [opened, setOpened] = (0, import_react41.useState)();
15650
15747
  const [busy, setBusy] = (0, import_react41.useState)(false);
15651
- const [revision, setRevision] = (0, import_react41.useState)(0);
15652
- const [counts, setCounts] = (0, import_react41.useState)({});
15653
- const [failed, setFailed] = (0, import_react41.useState)(false);
15654
- (0, import_react41.useEffect)(() => {
15655
- let live = true;
15656
- setFailed(false);
15657
- const requests = [
15658
- ["access", api(`/companions/${encodeURIComponent(companionId)}/access`).then((v) => v.targetIds.length)]
15659
- ];
15660
- if (capabilities.includes("skills")) requests.push(["skills", api("/skills").then((v) => v.installed.filter((s) => v.bindings.some((b) => b.companionId === companionId && b.skillId === s.id && b.enabled)).length)]);
15661
- if (capabilities.includes("mcp")) requests.push(["mcp", api("/mcp").then((v) => v.servers.filter((s) => v.bindings.some((b) => b.companionId === companionId && b.serverId === s.id)).length)]);
15662
- for (const [key, request] of requests) void request.then((count) => {
15663
- if (live) setCounts((v) => ({ ...v, [key]: count }));
15664
- }).catch(() => {
15665
- if (live) {
15666
- setCounts((v) => ({ ...v, [key]: void 0 }));
15667
- setFailed(true);
15668
- }
15669
- });
15670
- return () => {
15671
- live = false;
15672
- };
15673
- }, [companionId, capabilities, revision]);
15674
15748
  const close = () => {
15675
15749
  if (busy) return;
15676
15750
  setOpened(void 0);
15677
- setRevision((v) => v + 1);
15678
15751
  };
15679
- const manage = (key) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("button", { className: "dsh-partner-capability-manage", type: "button", disabled: disabled || key !== "access" && !capabilities.includes(key), "aria-haspopup": "dialog", "aria-label": `\u7BA1\u7406${titles[key]}`, onClick: () => {
15752
+ const manage = (key) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("button", { className: "dsh-partner-capability-manage", type: "button", disabled: disabled || key !== "access" && !capabilities.includes(key), "aria-haspopup": "dialog", "aria-label": `\u7BA1\u7406${titles[key]}`, onClick: () => {
15680
15753
  setBusy(false);
15681
15754
  setOpened(key);
15682
- }, children: [
15683
- "\u7BA1\u7406",
15684
- counts[key] !== void 0 ? ` \xB7 ${counts[key]}` : ""
15685
- ] });
15755
+ }, children: "\u7BA1\u7406" });
15686
15756
  return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
15687
15757
  children(manage),
15688
- failed && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("p", { className: "dsh-partner-inline-note", children: [
15689
- "\u90E8\u5206\u6570\u91CF\u8BFB\u53D6\u5931\u8D25\uFF0C\u53EF\u6253\u5F00\u7BA1\u7406\u91CD\u8BD5\u3002",
15690
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("button", { type: "button", onClick: () => setRevision((v) => v + 1), children: "\u5237\u65B0\u6570\u91CF" })
15691
- ] }),
15692
15758
  opened && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(WorkspaceDialog, { className: "is-capability-resources", eyebrow: "", title: `\u7BA1\u7406${titles[opened]}`, detail: opened === "access" ? "\u9009\u62E9\u6B64\u4F19\u4F34\u53EF\u4EE5\u8BBF\u95EE\u548C\u59D4\u6D3E\u7684\u4F19\u4F34\uFF0C\u5355\u5411\u6388\u6743\u3002" : "\u9009\u62E9\u9700\u8981\u542F\u7528\u7684\u80FD\u529B\uFF0C\u4FEE\u6539\u81EA\u52A8\u4FDD\u5B58\uFF0C\u4E0B\u4E00\u8F6E\u751F\u6548\u3002", close, children: [
15693
15759
  busy && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { role: "status", className: "dsh-partner-inline-note", children: "\u6B63\u5728\u4FDD\u5B58\uFF0C\u8BF7\u7A0D\u5019\u2026" }),
15694
15760
  opened === "skills" && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(CompanionSkillSettings, { companionId, onBusyChange: setBusy }),
@@ -16917,7 +16983,7 @@ function GeneralSettingsPanel() {
16917
16983
  return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("section", { className: "dsh-partner-general-settings", "aria-busy": busy, children: [
16918
16984
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("h2", { children: "\u57FA\u672C\u8BBE\u7F6E" }),
16919
16985
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(AttachmentStoragePanel, {}),
16920
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(WorkspaceBlock, { title: "\u5347\u7EA7\u8FC1\u79FB", detail: "\u624B\u52A8\u6574\u7406\u516C\u5171\u6570\u636E\u548C\u6BCF\u4F4D\u4F19\u4F34\u7684\u79C1\u6709\u76EE\u5F55\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u6267\u884C\u3002", actions: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("button", { type: "button", disabled: busy, onClick: () => void inspect(), children: busy ? "\u5904\u7406\u4E2D\u2026" : "\u68C0\u67E5\u8FC1\u79FB" }), children: [
16986
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(WorkspaceBlock, { className: "is-storage-migration", title: "\u5347\u7EA7\u8FC1\u79FB", detail: "\u624B\u52A8\u6574\u7406\u516C\u5171\u6570\u636E\u548C\u6BCF\u4F4D\u4F19\u4F34\u7684\u79C1\u6709\u76EE\u5F55\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u6267\u884C\u3002", actions: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("button", { type: "button", disabled: busy, onClick: () => void inspect(), children: busy ? "\u5904\u7406\u4E2D\u2026" : "\u68C0\u67E5\u8FC1\u79FB" }), children: [
16921
16987
  /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("p", { children: [
16922
16988
  "\u6570\u636E\u5B58\u50A8\u7248\u672C\uFF1A",
16923
16989
  version === void 0 ? "\u6B63\u5728\u8BFB\u53D6\u2026" : `v${version}${version === 0 ? " \xB7 \u5F85\u8FC1\u79FB" : " \xB7 \u5DF2\u5347\u7EA7"}`