dominds 1.26.2 → 1.26.4

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 (140) hide show
  1. package/README.md +2 -0
  2. package/README.zh.md +2 -0
  3. package/dist/cli.js +10 -8
  4. package/dist/docs/cli-usage.md +1 -1
  5. package/dist/docs/cli-usage.zh.md +1 -1
  6. package/dist/llm/gen/mock.js +11 -3
  7. package/dist/llm/kernel-driver/context-health.d.ts +1 -0
  8. package/dist/llm/kernel-driver/context-health.js +7 -0
  9. package/dist/llm/kernel-driver/drive.js +25 -30
  10. package/dist/llm/kernel-driver/idle-reminder-wake.js +6 -2
  11. package/dist/llm/kernel-driver/reminder-context.d.ts +26 -0
  12. package/dist/llm/kernel-driver/reminder-context.js +82 -0
  13. package/dist/llm/kernel-driver/reply-guidance.js +10 -4
  14. package/dist/llm/kernel-driver/tellask-special.js +50 -35
  15. package/dist/mcp/supervisor.js +2 -2
  16. package/dist/minds/system-prompt-parts.js +30 -30
  17. package/dist/minds/system-prompt.js +63 -40
  18. package/dist/persistence.js +15 -1
  19. package/dist/runtime/driver-messages.d.ts +38 -7
  20. package/dist/runtime/driver-messages.js +320 -119
  21. package/dist/runtime/inter-dialog-format.js +24 -12
  22. package/dist/runtime/reply-prompt-copy.d.ts +8 -8
  23. package/dist/runtime/reply-prompt-copy.js +69 -38
  24. package/dist/server/api-routes.js +7 -2
  25. package/dist/server/certificates.js +65 -25
  26. package/dist/server/dominds-self-update.d.ts +1 -0
  27. package/dist/server/dominds-self-update.js +113 -56
  28. package/dist/supervisor-protocol.d.ts +2 -3
  29. package/dist/tools/mcp.js +12 -12
  30. package/dist/tools/prompts/control/en/index.md +2 -2
  31. package/dist/tools/prompts/control/en/principles.md +12 -12
  32. package/dist/tools/prompts/control/en/scenarios.md +5 -5
  33. package/dist/tools/prompts/control/en/tools.md +10 -10
  34. package/dist/tools/prompts/control/zh/index.md +3 -3
  35. package/dist/tools/prompts/control/zh/principles.md +12 -12
  36. package/dist/tools/prompts/control/zh/scenarios.md +7 -7
  37. package/dist/tools/prompts/control/zh/tools.md +11 -11
  38. package/dist/tools/prompts/mcp_admin/en/principles.md +4 -4
  39. package/dist/tools/prompts/mcp_admin/en/scenarios.md +1 -1
  40. package/dist/tools/prompts/mcp_admin/en/tools.md +3 -3
  41. package/dist/tools/prompts/mcp_admin/zh/principles.md +4 -4
  42. package/dist/tools/prompts/mcp_admin/zh/scenarios.md +1 -1
  43. package/dist/tools/prompts/mcp_admin/zh/tools.md +3 -3
  44. package/dist/tools/team_mgmt-mcp-manual.js +12 -12
  45. package/package.json +2 -1
  46. package/webapp/dist/assets/{_basePickBy-DUivPKf7.js → _basePickBy-mFK6EVZU.js} +3 -3
  47. package/webapp/dist/assets/{_basePickBy-DUivPKf7.js.map → _basePickBy-mFK6EVZU.js.map} +1 -1
  48. package/webapp/dist/assets/{_baseUniq-hcs024vD.js → _baseUniq-C8zyOqn7.js} +2 -2
  49. package/webapp/dist/assets/{_baseUniq-hcs024vD.js.map → _baseUniq-C8zyOqn7.js.map} +1 -1
  50. package/webapp/dist/assets/{arc-Dr6-FXp5.js → arc-Vdl3uhV8.js} +2 -2
  51. package/webapp/dist/assets/{arc-Dr6-FXp5.js.map → arc-Vdl3uhV8.js.map} +1 -1
  52. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DXqcDq4R.js → architectureDiagram-2XIMDMQ5-D3Xtb8u_.js} +7 -7
  53. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DXqcDq4R.js.map → architectureDiagram-2XIMDMQ5-D3Xtb8u_.js.map} +1 -1
  54. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-IIP6LGXS.js → blockDiagram-WCTKOSBZ-Bozcnodw.js} +7 -7
  55. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-IIP6LGXS.js.map → blockDiagram-WCTKOSBZ-Bozcnodw.js.map} +1 -1
  56. package/webapp/dist/assets/{c4Diagram-IC4MRINW-D_d3F9XD.js → c4Diagram-IC4MRINW-CLkxlY6N.js} +3 -3
  57. package/webapp/dist/assets/{c4Diagram-IC4MRINW-D_d3F9XD.js.map → c4Diagram-IC4MRINW-CLkxlY6N.js.map} +1 -1
  58. package/webapp/dist/assets/{channel-CWWjsXtU.js → channel-CqGyLCM_.js} +2 -2
  59. package/webapp/dist/assets/{channel-CWWjsXtU.js.map → channel-CqGyLCM_.js.map} +1 -1
  60. package/webapp/dist/assets/{chunk-4BX2VUAB-BF4yph2W.js → chunk-4BX2VUAB-BNsJpMh4.js} +2 -2
  61. package/webapp/dist/assets/{chunk-4BX2VUAB-BF4yph2W.js.map → chunk-4BX2VUAB-BNsJpMh4.js.map} +1 -1
  62. package/webapp/dist/assets/{chunk-55IACEB6-Hn3CmDYz.js → chunk-55IACEB6-B59p6vzX.js} +2 -2
  63. package/webapp/dist/assets/{chunk-55IACEB6-Hn3CmDYz.js.map → chunk-55IACEB6-B59p6vzX.js.map} +1 -1
  64. package/webapp/dist/assets/{chunk-FMBD7UC4-C05pl9Ov.js → chunk-FMBD7UC4-CB17a_Ki.js} +2 -2
  65. package/webapp/dist/assets/{chunk-FMBD7UC4-C05pl9Ov.js.map → chunk-FMBD7UC4-CB17a_Ki.js.map} +1 -1
  66. package/webapp/dist/assets/{chunk-JSJVCQXG-BVlq_BAS.js → chunk-JSJVCQXG-DVnVflN-.js} +2 -2
  67. package/webapp/dist/assets/{chunk-JSJVCQXG-BVlq_BAS.js.map → chunk-JSJVCQXG-DVnVflN-.js.map} +1 -1
  68. package/webapp/dist/assets/{chunk-KX2RTZJC-BQoaRWif.js → chunk-KX2RTZJC-D9_5LvIO.js} +2 -2
  69. package/webapp/dist/assets/{chunk-KX2RTZJC-BQoaRWif.js.map → chunk-KX2RTZJC-D9_5LvIO.js.map} +1 -1
  70. package/webapp/dist/assets/{chunk-NQ4KR5QH-0okCAXtW.js → chunk-NQ4KR5QH-CZWI2G2c.js} +4 -4
  71. package/webapp/dist/assets/{chunk-NQ4KR5QH-0okCAXtW.js.map → chunk-NQ4KR5QH-CZWI2G2c.js.map} +1 -1
  72. package/webapp/dist/assets/{chunk-QZHKN3VN-DEiprgz-.js → chunk-QZHKN3VN-WCLg8cNX.js} +2 -2
  73. package/webapp/dist/assets/{chunk-QZHKN3VN-DEiprgz-.js.map → chunk-QZHKN3VN-WCLg8cNX.js.map} +1 -1
  74. package/webapp/dist/assets/{chunk-WL4C6EOR-B-Xkb3lo.js → chunk-WL4C6EOR-BFkz_P__.js} +6 -6
  75. package/webapp/dist/assets/{chunk-WL4C6EOR-B-Xkb3lo.js.map → chunk-WL4C6EOR-BFkz_P__.js.map} +1 -1
  76. package/webapp/dist/assets/{classDiagram-VBA2DB6C-DCCQrdwF.js → classDiagram-VBA2DB6C-DWQ1VnaI.js} +7 -7
  77. package/webapp/dist/assets/{classDiagram-VBA2DB6C-DCCQrdwF.js.map → classDiagram-VBA2DB6C-DWQ1VnaI.js.map} +1 -1
  78. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-DCCQrdwF.js → classDiagram-v2-RAHNMMFH-DWQ1VnaI.js} +7 -7
  79. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-DCCQrdwF.js.map → classDiagram-v2-RAHNMMFH-DWQ1VnaI.js.map} +1 -1
  80. package/webapp/dist/assets/{clone-Drtik9pk.js → clone-D3QHqx6z.js} +2 -2
  81. package/webapp/dist/assets/{clone-Drtik9pk.js.map → clone-D3QHqx6z.js.map} +1 -1
  82. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BBWvHErL.js → cose-bilkent-S5V4N54A-D2dZHRG3.js} +2 -2
  83. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BBWvHErL.js.map → cose-bilkent-S5V4N54A-D2dZHRG3.js.map} +1 -1
  84. package/webapp/dist/assets/{dagre-KLK3FWXG-2qk0ikdt.js → dagre-KLK3FWXG-Cwz7pFDo.js} +7 -7
  85. package/webapp/dist/assets/{dagre-KLK3FWXG-2qk0ikdt.js.map → dagre-KLK3FWXG-Cwz7pFDo.js.map} +1 -1
  86. package/webapp/dist/assets/{diagram-E7M64L7V-C1DbHDbf.js → diagram-E7M64L7V-C6z0VVoW.js} +8 -8
  87. package/webapp/dist/assets/{diagram-E7M64L7V-C1DbHDbf.js.map → diagram-E7M64L7V-C6z0VVoW.js.map} +1 -1
  88. package/webapp/dist/assets/{diagram-IFDJBPK2-DToz8zk9.js → diagram-IFDJBPK2-CZ1KR1hO.js} +7 -7
  89. package/webapp/dist/assets/{diagram-IFDJBPK2-DToz8zk9.js.map → diagram-IFDJBPK2-CZ1KR1hO.js.map} +1 -1
  90. package/webapp/dist/assets/{diagram-P4PSJMXO-B9V-tQMe.js → diagram-P4PSJMXO-ChwZDZYa.js} +7 -7
  91. package/webapp/dist/assets/{diagram-P4PSJMXO-B9V-tQMe.js.map → diagram-P4PSJMXO-ChwZDZYa.js.map} +1 -1
  92. package/webapp/dist/assets/{erDiagram-INFDFZHY-CV68FwGf.js → erDiagram-INFDFZHY-DCnHsk_Z.js} +5 -5
  93. package/webapp/dist/assets/{erDiagram-INFDFZHY-CV68FwGf.js.map → erDiagram-INFDFZHY-DCnHsk_Z.js.map} +1 -1
  94. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CW06almb.js → flowDiagram-PKNHOUZH-C5Hi85ST.js} +7 -7
  95. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CW06almb.js.map → flowDiagram-PKNHOUZH-C5Hi85ST.js.map} +1 -1
  96. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C96NncCU.js → ganttDiagram-A5KZAMGK-vT15RP6A.js} +3 -3
  97. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C96NncCU.js.map → ganttDiagram-A5KZAMGK-vT15RP6A.js.map} +1 -1
  98. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CAuIexWi.js → gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js} +8 -8
  99. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CAuIexWi.js.map → gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js.map} +1 -1
  100. package/webapp/dist/assets/{graph-CvhwAY6w.js → graph-CqFTrHii.js} +3 -3
  101. package/webapp/dist/assets/{graph-CvhwAY6w.js.map → graph-CqFTrHii.js.map} +1 -1
  102. package/webapp/dist/assets/{index-BOO_zFrI.js → index-C_PzQ5W5.js} +600 -400
  103. package/webapp/dist/assets/{index-BOO_zFrI.js.map → index-C_PzQ5W5.js.map} +1 -1
  104. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-C16Sckpz.js → infoDiagram-LFFYTUFH-DlyOw8IT.js} +6 -6
  105. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-C16Sckpz.js.map → infoDiagram-LFFYTUFH-DlyOw8IT.js.map} +1 -1
  106. package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oNG6I0p3.js → ishikawaDiagram-PHBUUO56-iZCVn19K.js} +2 -2
  107. package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oNG6I0p3.js.map → ishikawaDiagram-PHBUUO56-iZCVn19K.js.map} +1 -1
  108. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-437hhFHC.js → journeyDiagram-4ABVD52K-B95gnBKj.js} +5 -5
  109. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-437hhFHC.js.map → journeyDiagram-4ABVD52K-B95gnBKj.js.map} +1 -1
  110. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DsCV_Tpx.js → kanban-definition-K7BYSVSG-DQ2gfPUK.js} +3 -3
  111. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DsCV_Tpx.js.map → kanban-definition-K7BYSVSG-DQ2gfPUK.js.map} +1 -1
  112. package/webapp/dist/assets/{layout-BttZf7fQ.js → layout-VOBFudHV.js} +5 -5
  113. package/webapp/dist/assets/{layout-BttZf7fQ.js.map → layout-VOBFudHV.js.map} +1 -1
  114. package/webapp/dist/assets/{linear-B75vD4Ho.js → linear-BtBp93s2.js} +2 -2
  115. package/webapp/dist/assets/{linear-B75vD4Ho.js.map → linear-BtBp93s2.js.map} +1 -1
  116. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-DA1-XaNi.js → mindmap-definition-YRQLILUH-m2w1nBbY.js} +4 -4
  117. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-DA1-XaNi.js.map → mindmap-definition-YRQLILUH-m2w1nBbY.js.map} +1 -1
  118. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Bx6hUJ4Q.js → pieDiagram-SKSYHLDU-ByoyS2as.js} +8 -8
  119. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Bx6hUJ4Q.js.map → pieDiagram-SKSYHLDU-ByoyS2as.js.map} +1 -1
  120. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-zyduIle0.js → quadrantDiagram-337W2JSQ-BnKSsLfA.js} +3 -3
  121. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-zyduIle0.js.map → quadrantDiagram-337W2JSQ-BnKSsLfA.js.map} +1 -1
  122. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BgfjyEJM.js → requirementDiagram-Z7DCOOCP-jU2C7qJN.js} +4 -4
  123. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BgfjyEJM.js.map → requirementDiagram-Z7DCOOCP-jU2C7qJN.js.map} +1 -1
  124. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-lmOWaczS.js → sankeyDiagram-WA2Y5GQK-R175tX8b.js} +2 -2
  125. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-lmOWaczS.js.map → sankeyDiagram-WA2Y5GQK-R175tX8b.js.map} +1 -1
  126. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DqJz-iYI.js → sequenceDiagram-2WXFIKYE-CBhN4j2Q.js} +4 -4
  127. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DqJz-iYI.js.map → sequenceDiagram-2WXFIKYE-CBhN4j2Q.js.map} +1 -1
  128. package/webapp/dist/assets/{stateDiagram-RAJIS63D-CngWYuX-.js → stateDiagram-RAJIS63D-DZSAyRfJ.js} +9 -9
  129. package/webapp/dist/assets/{stateDiagram-RAJIS63D-CngWYuX-.js.map → stateDiagram-RAJIS63D-DZSAyRfJ.js.map} +1 -1
  130. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-BxyHvrvU.js → stateDiagram-v2-FVOUBMTO-x29lKJpl.js} +5 -5
  131. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-BxyHvrvU.js.map → stateDiagram-v2-FVOUBMTO-x29lKJpl.js.map} +1 -1
  132. package/webapp/dist/assets/{timeline-definition-YZTLITO2-C7t6WVS3.js → timeline-definition-YZTLITO2-BQR2qEXt.js} +3 -3
  133. package/webapp/dist/assets/{timeline-definition-YZTLITO2-C7t6WVS3.js.map → timeline-definition-YZTLITO2-BQR2qEXt.js.map} +1 -1
  134. package/webapp/dist/assets/{treemap-KZPCXAKY-BDZ3n5TC.js → treemap-KZPCXAKY-b823qTE1.js} +5 -5
  135. package/webapp/dist/assets/{treemap-KZPCXAKY-BDZ3n5TC.js.map → treemap-KZPCXAKY-b823qTE1.js.map} +1 -1
  136. package/webapp/dist/assets/{vennDiagram-LZ73GAT5-CEw7GPed.js → vennDiagram-LZ73GAT5-BrxPNUYz.js} +2 -2
  137. package/webapp/dist/assets/{vennDiagram-LZ73GAT5-CEw7GPed.js.map → vennDiagram-LZ73GAT5-BrxPNUYz.js.map} +1 -1
  138. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DmS8BiaA.js → xychartDiagram-JWTSCODW-BgOzlz6Z.js} +3 -3
  139. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DmS8BiaA.js.map → xychartDiagram-JWTSCODW-BgOzlz6Z.js.map} +1 -1
  140. package/webapp/dist/index.html +1 -1
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dagre-KLK3FWXG-2qk0ikdt.js","assets/graph-CvhwAY6w.js","assets/_baseUniq-hcs024vD.js","assets/layout-BttZf7fQ.js","assets/_basePickBy-DUivPKf7.js","assets/clone-Drtik9pk.js","assets/cose-bilkent-S5V4N54A-BBWvHErL.js","assets/cytoscape.esm-Bm8DJGmZ.js","assets/c4Diagram-IC4MRINW-D_d3F9XD.js","assets/chunk-JSJVCQXG-BVlq_BAS.js","assets/flowDiagram-PKNHOUZH-CW06almb.js","assets/chunk-FMBD7UC4-C05pl9Ov.js","assets/chunk-55IACEB6-Hn3CmDYz.js","assets/chunk-KX2RTZJC-BQoaRWif.js","assets/channel-CWWjsXtU.js","assets/erDiagram-INFDFZHY-CV68FwGf.js","assets/gitGraphDiagram-K3NZZRJ6-CAuIexWi.js","assets/chunk-4BX2VUAB-BF4yph2W.js","assets/chunk-QZHKN3VN-DEiprgz-.js","assets/treemap-KZPCXAKY-BDZ3n5TC.js","assets/ganttDiagram-A5KZAMGK-C96NncCU.js","assets/linear-B75vD4Ho.js","assets/init-ZxktEp_H.js","assets/defaultLocale-B2RvLBDe.js","assets/infoDiagram-LFFYTUFH-C16Sckpz.js","assets/pieDiagram-SKSYHLDU-Bx6hUJ4Q.js","assets/arc-Dr6-FXp5.js","assets/ordinal-CxptdPJm.js","assets/quadrantDiagram-337W2JSQ-zyduIle0.js","assets/xychartDiagram-JWTSCODW-DmS8BiaA.js","assets/requirementDiagram-Z7DCOOCP-BgfjyEJM.js","assets/sequenceDiagram-2WXFIKYE-DqJz-iYI.js","assets/classDiagram-VBA2DB6C-DCCQrdwF.js","assets/chunk-WL4C6EOR-B-Xkb3lo.js","assets/classDiagram-v2-RAHNMMFH-DCCQrdwF.js","assets/stateDiagram-RAJIS63D-CngWYuX-.js","assets/chunk-NQ4KR5QH-0okCAXtW.js","assets/stateDiagram-v2-FVOUBMTO-BxyHvrvU.js","assets/journeyDiagram-4ABVD52K-437hhFHC.js","assets/timeline-definition-YZTLITO2-C7t6WVS3.js","assets/mindmap-definition-YRQLILUH-DA1-XaNi.js","assets/kanban-definition-K7BYSVSG-DsCV_Tpx.js","assets/sankeyDiagram-WA2Y5GQK-lmOWaczS.js","assets/diagram-P4PSJMXO-B9V-tQMe.js","assets/diagram-IFDJBPK2-DToz8zk9.js","assets/blockDiagram-WCTKOSBZ-IIP6LGXS.js","assets/architectureDiagram-2XIMDMQ5-DXqcDq4R.js","assets/diagram-E7M64L7V-C1DbHDbf.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dagre-KLK3FWXG-Cwz7pFDo.js","assets/graph-CqFTrHii.js","assets/_baseUniq-C8zyOqn7.js","assets/layout-VOBFudHV.js","assets/_basePickBy-mFK6EVZU.js","assets/clone-D3QHqx6z.js","assets/cose-bilkent-S5V4N54A-D2dZHRG3.js","assets/cytoscape.esm-Bm8DJGmZ.js","assets/c4Diagram-IC4MRINW-CLkxlY6N.js","assets/chunk-JSJVCQXG-DVnVflN-.js","assets/flowDiagram-PKNHOUZH-C5Hi85ST.js","assets/chunk-FMBD7UC4-CB17a_Ki.js","assets/chunk-55IACEB6-B59p6vzX.js","assets/chunk-KX2RTZJC-D9_5LvIO.js","assets/channel-CqGyLCM_.js","assets/erDiagram-INFDFZHY-DCnHsk_Z.js","assets/gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js","assets/chunk-4BX2VUAB-BNsJpMh4.js","assets/chunk-QZHKN3VN-WCLg8cNX.js","assets/treemap-KZPCXAKY-b823qTE1.js","assets/ganttDiagram-A5KZAMGK-vT15RP6A.js","assets/linear-BtBp93s2.js","assets/init-ZxktEp_H.js","assets/defaultLocale-B2RvLBDe.js","assets/infoDiagram-LFFYTUFH-DlyOw8IT.js","assets/pieDiagram-SKSYHLDU-ByoyS2as.js","assets/arc-Vdl3uhV8.js","assets/ordinal-CxptdPJm.js","assets/quadrantDiagram-337W2JSQ-BnKSsLfA.js","assets/xychartDiagram-JWTSCODW-BgOzlz6Z.js","assets/requirementDiagram-Z7DCOOCP-jU2C7qJN.js","assets/sequenceDiagram-2WXFIKYE-CBhN4j2Q.js","assets/classDiagram-VBA2DB6C-DWQ1VnaI.js","assets/chunk-WL4C6EOR-BFkz_P__.js","assets/classDiagram-v2-RAHNMMFH-DWQ1VnaI.js","assets/stateDiagram-RAJIS63D-DZSAyRfJ.js","assets/chunk-NQ4KR5QH-CZWI2G2c.js","assets/stateDiagram-v2-FVOUBMTO-x29lKJpl.js","assets/journeyDiagram-4ABVD52K-B95gnBKj.js","assets/timeline-definition-YZTLITO2-BQR2qEXt.js","assets/mindmap-definition-YRQLILUH-m2w1nBbY.js","assets/kanban-definition-K7BYSVSG-DQ2gfPUK.js","assets/sankeyDiagram-WA2Y5GQK-R175tX8b.js","assets/diagram-P4PSJMXO-ChwZDZYa.js","assets/diagram-IFDJBPK2-CZ1KR1hO.js","assets/blockDiagram-WCTKOSBZ-Bozcnodw.js","assets/architectureDiagram-2XIMDMQ5-D3Xtb8u_.js","assets/diagram-E7M64L7V-C6z0VVoW.js"])))=>i.map(i=>d[i]);
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -279,10 +279,14 @@ function getUiStrings(language2) {
279
279
  domindsVersionRestartAvailableTitle: "新版本已就绪,点击重启",
280
280
  domindsVersionInstallConfirm: "检测到 npm registry 上有新版 Dominds。\n\n当前: v<current>\n最新: v<latest>\n\n现在安装并在完成后等待重启吗?",
281
281
  domindsVersionRestartConfirm: "将以最新可用版本重启 Dominds 后台。\n\n当前: v<current>\n目标: v<latest>\n\n是否继续?",
282
+ domindsVersionForceRestartConfirm: "强制重启 Dominds 后台?\n\n当前: v<current>\n\n确认后会立即中断当前连接并重启后台。",
283
+ domindsVersionInstallAndRestartConfirm: "检查到新版本 v<latest>。\n\n当前: v<current>\n\n请选择使用新版重启,还是不执行升级流程、直接重启当前后台入口。",
284
+ domindsVersionUpdateChoiceTitle: "Dominds 更新重启",
285
+ domindsVersionUpdateChoiceInstallButton: "使用新版重启",
286
+ domindsVersionUpdateChoiceRestartButton: "直接重启",
282
287
  domindsVersionInstallSuccess: "最新版 Dominds 已安装完成,请点击重启。",
283
288
  domindsVersionInstallVerifiedAfterCommandFailure: "安装命令返回异常,但磁盘文件和版本探针已确认 v<latest> 安装成功,请点击重启。",
284
289
  domindsVersionInstallInProgress: "后端正在安装……",
285
- domindsVersionRestartScheduled: "Dominds 后台正在重启…",
286
290
  domindsVersionRestartInProgress: "后端正在重启,若页面没有自动刷新,可手动刷新看看。",
287
291
  domindsVersionActionFailedPrefix: "Dominds 更新失败:",
288
292
  domindsVersionCheckUpdateAvailable: "检查完成:发现新版本 v<latest>,点击版本号可安装。",
@@ -458,6 +462,7 @@ function getUiStrings(language2) {
458
462
  retryCountdownPrefix: "将在 ",
459
463
  retryCountdownSuffix: " 后重试。",
460
464
  invalidMessageFormatToast: "收到无效消息格式,请刷新页面。",
465
+ copyFailedToast: "复制失败 / Copy failed.",
461
466
  linkCopiedToast: "链接已复制。",
462
467
  linkCopyFailedToast: "复制链接失败。",
463
468
  forkDialogFailedToast: "Fork 对话失败。",
@@ -626,8 +631,8 @@ function getUiStrings(language2) {
626
631
  setupWriteRcWrite: "写入",
627
632
  setupWriteRcOverwrite: "覆盖",
628
633
  setupFileModalLoading: "加载中…",
629
- setupFileModalSelectToCopy: "可直接选择复制,或点击“复制”按钮。",
630
- setupFileModalCopy: "复制",
634
+ setupFileModalSelectToCopy: "可直接选择复制,或点击“复制 / Copy”按钮。",
635
+ setupFileModalCopy: "复制 / Copy",
631
636
  setupSelectProviderModelFirst: "请先选择提供商与模型。",
632
637
  setupSelectProminentModelParamsFirst: "请先为 prominent 模型参数选择取值。",
633
638
  setupProminentModelParamUnset: "留空(不设置)",
@@ -675,10 +680,14 @@ function getUiStrings(language2) {
675
680
  domindsVersionRestartAvailableTitle: "The latest Dominds is ready. Click to restart.",
676
681
  domindsVersionInstallConfirm: "A newer Dominds version is available on npm registry.\n\nCurrent: v<current>\nLatest: v<latest>\n\nInstall it now and wait for restart?",
677
682
  domindsVersionRestartConfirm: "Dominds backend will restart into the latest available version.\n\nCurrent: v<current>\nTarget: v<latest>\n\nContinue?",
683
+ domindsVersionForceRestartConfirm: "Force restart the Dominds backend?\n\nCurrent: v<current>\n\nConfirming will immediately interrupt the current connection and restart the backend.",
684
+ domindsVersionInstallAndRestartConfirm: "A newer version v<latest> is available.\n\nCurrent: v<current>\n\nChoose whether to restart into the latest version, or skip the update flow and restart the current backend entrypoint.",
685
+ domindsVersionUpdateChoiceTitle: "Dominds update restart",
686
+ domindsVersionUpdateChoiceInstallButton: "Restart into latest",
687
+ domindsVersionUpdateChoiceRestartButton: "Restart now",
678
688
  domindsVersionInstallSuccess: "Latest Dominds is installed. Click restart when ready.",
679
689
  domindsVersionInstallVerifiedAfterCommandFailure: "The install command returned an error, but installed files and version probe confirmed v<latest>. Click restart when ready.",
680
690
  domindsVersionInstallInProgress: "Backend is installing…",
681
- domindsVersionRestartScheduled: "Dominds backend is restarting…",
682
691
  domindsVersionRestartInProgress: "Backend is restarting. If the page does not refresh automatically, try a manual refresh.",
683
692
  domindsVersionActionFailedPrefix: "Dominds update failed: ",
684
693
  domindsVersionCheckUpdateAvailable: "Check complete: v<latest> is available. Click the version to install.",
@@ -854,6 +863,7 @@ function getUiStrings(language2) {
854
863
  retryCountdownPrefix: "Retrying in ",
855
864
  retryCountdownSuffix: ".",
856
865
  invalidMessageFormatToast: "Received invalid message format. Please refresh the page.",
866
+ copyFailedToast: "复制失败 / Copy failed.",
857
867
  linkCopiedToast: "Link copied.",
858
868
  linkCopyFailedToast: "Failed to copy link.",
859
869
  forkDialogFailedToast: "Failed to fork dialog.",
@@ -1022,8 +1032,8 @@ function getUiStrings(language2) {
1022
1032
  setupWriteRcWrite: "Write",
1023
1033
  setupWriteRcOverwrite: "Overwrite",
1024
1034
  setupFileModalLoading: "Loading…",
1025
- setupFileModalSelectToCopy: "Select to copy, or use the Copy button.",
1026
- setupFileModalCopy: "Copy",
1035
+ setupFileModalSelectToCopy: "可直接选择复制,或点击“复制 / Copy”按钮。",
1036
+ setupFileModalCopy: "复制 / Copy",
1027
1037
  setupSelectProviderModelFirst: "Please select a provider and model first.",
1028
1038
  setupSelectProminentModelParamsFirst: "Please select values for prominent model params first.",
1029
1039
  setupProminentModelParamUnset: "Leave unset",
@@ -5560,6 +5570,294 @@ class CreateDialogFlowController {
5560
5570
  return `create-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
5561
5571
  }
5562
5572
  }
5573
+ const MANUAL_COPY_MODAL_ATTR = "data-dominds-manual-copy-modal";
5574
+ const MANUAL_COPY_TEXTS = {
5575
+ title: "需要手动复制 / Manual copy required",
5576
+ close: "关闭 / Close",
5577
+ selectAll: "全选文本 / Select all text",
5578
+ insecureHttpMessages: {
5579
+ zh: "当前页面通过 HTTP 非 localhost 地址访问,浏览器不会开放剪贴板权限。请在下方只读文本框中手动全选并复制。",
5580
+ en: "This page is loaded over HTTP from a non-localhost address, so the browser does not expose clipboard access. Select and copy the read-only text below manually."
5581
+ },
5582
+ unavailableMessages: {
5583
+ zh: "浏览器当前没有开放剪贴板写入权限。请在下方只读文本框中手动全选并复制。",
5584
+ en: "The browser has not granted clipboard write access. Select and copy the read-only text below manually."
5585
+ }
5586
+ };
5587
+ const manualCopyModalCleanups = /* @__PURE__ */ new WeakMap();
5588
+ function escapeHtmlText$2(value) {
5589
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
5590
+ }
5591
+ function isLocalClipboardHost(hostname) {
5592
+ const loopbackIpv4Match = /^127(?:\.\d{1,3}){3}$/.test(hostname);
5593
+ return hostname === "localhost" || hostname.endsWith(".localhost") || loopbackIpv4Match || hostname === "::1" || hostname === "[::1]";
5594
+ }
5595
+ function getManualCopyMessageHtml() {
5596
+ const insecureHttp = window.location.protocol === "http:" && !isLocalClipboardHost(window.location.hostname);
5597
+ const messages = insecureHttp ? MANUAL_COPY_TEXTS.insecureHttpMessages : MANUAL_COPY_TEXTS.unavailableMessages;
5598
+ return `
5599
+ <p class="manual-copy-message" id="manual-copy-message-zh" lang="zh">${escapeHtmlText$2(messages.zh)}</p>
5600
+ <p class="manual-copy-message" id="manual-copy-message-en" lang="en">${escapeHtmlText$2(messages.en)}</p>
5601
+ `;
5602
+ }
5603
+ async function copyTextToClipboard(text2, restoreFocusTo) {
5604
+ if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
5605
+ try {
5606
+ await navigator.clipboard.writeText(text2);
5607
+ return true;
5608
+ } catch {
5609
+ }
5610
+ }
5611
+ try {
5612
+ if (!document.body) return false;
5613
+ const ta = document.createElement("textarea");
5614
+ const previousActiveElement = document.activeElement;
5615
+ try {
5616
+ ta.value = text2;
5617
+ ta.setAttribute("readonly", "true");
5618
+ ta.style.position = "fixed";
5619
+ ta.style.left = "-9999px";
5620
+ ta.style.top = "0";
5621
+ ta.style.opacity = "0";
5622
+ document.body.appendChild(ta);
5623
+ ta.focus();
5624
+ ta.select();
5625
+ ta.setSelectionRange(0, ta.value.length);
5626
+ const ok = document.execCommand("copy");
5627
+ return ok === true;
5628
+ } finally {
5629
+ ta.remove();
5630
+ const focusTarget = restoreFocusTo ?? (previousActiveElement instanceof HTMLElement ? previousActiveElement : null);
5631
+ if (focusTarget !== null && focusTarget.isConnected) {
5632
+ focusTarget.focus();
5633
+ }
5634
+ }
5635
+ } catch {
5636
+ return false;
5637
+ }
5638
+ }
5639
+ async function copyTextOrShowManualCopy(text2, restoreFocusTo) {
5640
+ const ok = await copyTextToClipboard(text2, restoreFocusTo);
5641
+ if (ok) return { kind: "copied" };
5642
+ showManualCopyModal(text2, restoreFocusTo);
5643
+ return { kind: "manual_copy_shown" };
5644
+ }
5645
+ function showManualCopyModal(text2, restoreFocusTo) {
5646
+ const existing = document.querySelector(`[${MANUAL_COPY_MODAL_ATTR}="true"]`);
5647
+ if (existing instanceof HTMLElement) {
5648
+ const cleanup = manualCopyModalCleanups.get(existing);
5649
+ if (cleanup) {
5650
+ cleanup();
5651
+ } else {
5652
+ existing.remove();
5653
+ }
5654
+ }
5655
+ const modal = document.createElement("div");
5656
+ modal.dataset.domindsManualCopyModal = "true";
5657
+ modal.innerHTML = `
5658
+ <style>
5659
+ ${ICON_MASK_BASE_CSS}
5660
+ [${MANUAL_COPY_MODAL_ATTR}="true"] {
5661
+ position: fixed;
5662
+ inset: 0;
5663
+ z-index: 10000;
5664
+ display: flex;
5665
+ align-items: center;
5666
+ justify-content: center;
5667
+ padding: 20px;
5668
+ min-height: 0;
5669
+ box-sizing: border-box;
5670
+ font-family: var(--dominds-font-family, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
5671
+ }
5672
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-backdrop {
5673
+ position: absolute;
5674
+ inset: 0;
5675
+ background: rgba(0, 0, 0, 0.38);
5676
+ }
5677
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-dialog {
5678
+ position: relative;
5679
+ z-index: 1;
5680
+ width: min(720px, 100%);
5681
+ max-height: calc(100vh - 40px);
5682
+ display: flex;
5683
+ flex-direction: column;
5684
+ background: var(--dominds-bg-secondary, var(--color-bg-secondary, #ffffff));
5685
+ color: var(--dominds-fg, var(--color-fg-primary, #242424));
5686
+ border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
5687
+ border-radius: 8px;
5688
+ box-shadow: 0 18px 54px rgba(0, 0, 0, 0.22);
5689
+ overflow: hidden;
5690
+ }
5691
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-header {
5692
+ display: flex;
5693
+ align-items: center;
5694
+ justify-content: space-between;
5695
+ gap: 12px;
5696
+ padding: 12px 14px;
5697
+ border-bottom: 1px solid var(--dominds-border, var(--color-border-primary, #e5e5e5));
5698
+ background: var(--color-bg-tertiary, #f6f6f6);
5699
+ }
5700
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-title {
5701
+ margin: 0;
5702
+ font-size: 14px;
5703
+ line-height: 1.35;
5704
+ font-weight: 650;
5705
+ }
5706
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-close {
5707
+ width: 28px;
5708
+ height: 28px;
5709
+ border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
5710
+ border-radius: 6px;
5711
+ padding: 0;
5712
+ display: inline-flex;
5713
+ align-items: center;
5714
+ justify-content: center;
5715
+ background: transparent;
5716
+ color: inherit;
5717
+ cursor: pointer;
5718
+ }
5719
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-close .icon-mask {
5720
+ width: 14px;
5721
+ height: 14px;
5722
+ --icon-mask: ${ICON_MASK_URLS.close};
5723
+ }
5724
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-close:hover,
5725
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-close:focus-visible {
5726
+ border-color: var(--dominds-primary, var(--color-accent-primary, #005fb8));
5727
+ outline: none;
5728
+ }
5729
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-body {
5730
+ display: flex;
5731
+ flex-direction: column;
5732
+ gap: 10px;
5733
+ flex: 1 1 auto;
5734
+ min-height: 0;
5735
+ padding: 14px;
5736
+ overflow: hidden;
5737
+ }
5738
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-message {
5739
+ margin: 0;
5740
+ color: var(--dominds-muted, var(--color-fg-secondary, #525252));
5741
+ font-size: 13px;
5742
+ line-height: 1.45;
5743
+ }
5744
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-text {
5745
+ width: 100%;
5746
+ min-height: min(260px, 42vh);
5747
+ box-sizing: border-box;
5748
+ flex: 1 1 auto;
5749
+ resize: vertical;
5750
+ padding: 10px;
5751
+ border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
5752
+ border-radius: 6px;
5753
+ background: var(--dominds-bg, var(--color-bg-primary, #fbfbfb));
5754
+ color: var(--dominds-fg, var(--color-fg-primary, #242424));
5755
+ font: 12px/1.45 ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
5756
+ white-space: pre;
5757
+ }
5758
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-footer {
5759
+ display: flex;
5760
+ justify-content: flex-end;
5761
+ padding: 0 14px 14px;
5762
+ }
5763
+ [${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-select {
5764
+ border: 1px solid var(--dominds-primary, var(--color-accent-primary, #005fb8));
5765
+ border-radius: 6px;
5766
+ background: var(--dominds-primary, var(--color-accent-primary, #005fb8));
5767
+ color: #ffffff;
5768
+ padding: 6px 12px;
5769
+ font-size: 13px;
5770
+ cursor: pointer;
5771
+ }
5772
+ </style>
5773
+ <div class="manual-copy-backdrop"></div>
5774
+ <div class="manual-copy-dialog" role="dialog" aria-modal="true" aria-labelledby="manual-copy-title" aria-describedby="manual-copy-message-zh manual-copy-message-en">
5775
+ <div class="manual-copy-header">
5776
+ <h3 class="manual-copy-title" id="manual-copy-title">${escapeHtmlText$2(MANUAL_COPY_TEXTS.title)}</h3>
5777
+ <button class="manual-copy-close" type="button" aria-label="${escapeHtmlText$2(MANUAL_COPY_TEXTS.close)}" title="${escapeHtmlText$2(MANUAL_COPY_TEXTS.close)}">
5778
+ <span class="icon-mask" aria-hidden="true"></span>
5779
+ </button>
5780
+ </div>
5781
+ <div class="manual-copy-body">
5782
+ ${getManualCopyMessageHtml()}
5783
+ <textarea class="manual-copy-text" readonly spellcheck="false"></textarea>
5784
+ </div>
5785
+ <div class="manual-copy-footer">
5786
+ <button class="manual-copy-select" type="button">${escapeHtmlText$2(MANUAL_COPY_TEXTS.selectAll)}</button>
5787
+ </div>
5788
+ </div>
5789
+ `;
5790
+ const close2 = () => {
5791
+ document.removeEventListener("keydown", onDocumentKeydown, true);
5792
+ manualCopyModalCleanups.delete(modal);
5793
+ modal.remove();
5794
+ if (restoreFocusTo !== null && restoreFocusTo.isConnected) {
5795
+ restoreFocusTo.focus();
5796
+ }
5797
+ };
5798
+ const closeButton = modal.querySelector(".manual-copy-close");
5799
+ const backdrop = modal.querySelector(".manual-copy-backdrop");
5800
+ const selectButton = modal.querySelector(".manual-copy-select");
5801
+ const textarea = modal.querySelector(".manual-copy-text");
5802
+ if (!(closeButton instanceof HTMLButtonElement)) {
5803
+ throw new Error("Manual copy modal close button missing.");
5804
+ }
5805
+ if (!(backdrop instanceof HTMLElement)) {
5806
+ throw new Error("Manual copy modal backdrop missing.");
5807
+ }
5808
+ if (!(selectButton instanceof HTMLButtonElement)) {
5809
+ throw new Error("Manual copy modal select button missing.");
5810
+ }
5811
+ if (!(textarea instanceof HTMLTextAreaElement)) {
5812
+ throw new Error("Manual copy modal textarea missing.");
5813
+ }
5814
+ const closeButtonEl = closeButton;
5815
+ const backdropEl = backdrop;
5816
+ const selectButtonEl = selectButton;
5817
+ const textareaEl = textarea;
5818
+ textareaEl.value = text2;
5819
+ const selectText = () => {
5820
+ textareaEl.focus();
5821
+ textareaEl.select();
5822
+ };
5823
+ function onDocumentKeydown(event) {
5824
+ if (event.key === "Escape") {
5825
+ event.preventDefault();
5826
+ close2();
5827
+ return;
5828
+ }
5829
+ if (event.key !== "Tab") return;
5830
+ const focusableElements = [closeButtonEl, textareaEl, selectButtonEl];
5831
+ const activeElement = document.activeElement;
5832
+ const first = focusableElements[0];
5833
+ const last = focusableElements[focusableElements.length - 1];
5834
+ if (activeElement !== closeButtonEl && activeElement !== textareaEl && activeElement !== selectButtonEl) {
5835
+ event.preventDefault();
5836
+ if (event.shiftKey) {
5837
+ last.focus();
5838
+ } else {
5839
+ first.focus();
5840
+ }
5841
+ return;
5842
+ }
5843
+ if (event.shiftKey && activeElement === first) {
5844
+ event.preventDefault();
5845
+ last.focus();
5846
+ return;
5847
+ }
5848
+ if (!event.shiftKey && activeElement === last) {
5849
+ event.preventDefault();
5850
+ first.focus();
5851
+ }
5852
+ }
5853
+ closeButtonEl.addEventListener("click", close2);
5854
+ backdropEl.addEventListener("click", close2);
5855
+ selectButtonEl.addEventListener("click", selectText);
5856
+ document.addEventListener("keydown", onDocumentKeydown, true);
5857
+ manualCopyModalCleanups.set(modal, close2);
5858
+ document.body.appendChild(modal);
5859
+ selectText();
5860
+ }
5563
5861
  var storageExports = requireStorage();
5564
5862
  const mannedToolIcon = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20122.88%20120.92'%20style='enable-background:new%200%200%20122.88%20120.92'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e.st0{fill-rule:evenodd;clip-rule:evenodd;}%3c/style%3e%3cg%20transform='scale(0.8)%20translate(15,%2015)'%3e%3cpath%20class='st0'%20d='M117.32,101.23c0.8-2.32,1.23-4.81,1.23-7.39c0-6.28-2.55-11.97-6.67-16.09c-4.12-4.12-9.81-6.66-16.09-6.66%20c-6.28,0-11.97,2.55-16.09,6.66c-4.12,4.12-6.66,9.81-6.66,16.09c0,6.28,2.55,11.97,6.66,16.09c4.12,4.12,9.81,6.66,16.09,6.66%20c5.75,0,11-2.13,15.01-5.65C113.74,108.36,116.05,104.93,117.32,101.23L117.32,101.23z%20M86.36,96.38%20c-2.05,0.37-4.05,1.07-5.14,3.79c-0.71,1.76-0.54,3.89,0.35,5.82c2.42-7.38,10.92-3.02,5.45,3.34c4,0.2,6.53-2.6,6.93-6.37%20c0.19-1.78,0.34-2.74,0.73-3.51c0.21-0.42,0.5-0.78,0.89-1.2c1.31-1.44,2.77-2.7,4.2-4.19c2.69-2.81,8.42-0.22,10.61-5.72%20c0.71-1.76,0.54-3.89-0.35-5.82c-2.42,7.38-10.92,3.02-5.45-3.34c-4-0.2-6.53,2.6-6.93,6.37c-0.17,1.66,0.12,3.07-1.72,4.96%20c-1.29,1.29-2.66,2.61-3.99,3.87c-0.52,0.51-0.9,0.81-1.35,1.03c-0.8,0.4-1.78,0.52-4.22,0.95L86.36,96.38L86.36,96.38z%20M86.25,23.86l-0.03,0.09c-6.47-1.21-15.81-1.84-25.66-1.72c-9.96,0.11-20.49,0.98-29.17,2.76l-0.01-0.04%20C23.81-10.65,96.24-5.56,86.25,23.86L86.25,23.86z%20M44.15,62.42c-4.4,3.08-8.99,4.22-13.47,5.05l6.41,18.16h32.89%20c-0.82,2.59-1.27,5.35-1.27,8.21c0,7.48,3.03,14.25,7.93,19.15c4.9,4.9,11.67,7.93,19.15,7.93c7.48,0,14.25-3.03,19.15-7.93%20c5.15-5.15,7.93-11.84,7.93-19.15c0-7.48-3.03-14.25-7.93-19.15c-4.9-4.9-11.67-7.93-19.15-7.93c-2.32,0-4.57,0.29-6.72,0.84%20c-3.97-0.4-8.09-0.72-11.02-2.24c-1.34-0.83-2.51-1.99-3.59-3.46l-0.19-3c1.04-0.85,2.04-1.85,2.89-2.96%20c1.93-2.41,2.67-4.89,3.59-8.04c0.19-0.67,0.37-1.33,0.59-2c1.82-0.19,3.41-2.22,4.37-4.74c0.52-1.41,0.93-3,1.04-4.41%20c0.15-1.48,0-2.85-0.52-3.78c-0.41-0.74-1.04-1.22-1.89-1.3c-0.06-0.74,0.27-2.31,0.72-3.98c-6.13-1.1-15.03-1.67-24.5-1.56%20c-9.72,0.11-19.99,0.95-28.4,2.69l0.82,3.93c-0.63,1.04-0.78,2.67-0.59,4.41c0.19,1.7,0.7,3.48,1.45,4.97%20c0.96,1.89,2.33,3.22,3.93,3.22c0.15,0.44,0.33,0.93,0.48,1.41c1.3,3.82,2.26,6.71,4.59,9.45c0.67,0.82,1.41,1.56,2.19,2.22%20l-0.19,3.37C44.63,62,44.39,62.21,44.15,62.42L44.15,62.42z%20M71.94,60.07c-4.18,2.79-6.73,4.32-12.14,4.19%20c-5.26-0.08-8.01-1.86-12.22-4.52C47.26,77.31,72.37,78.36,71.94,60.07L71.94,60.07z%20M78.21,47.33c0.22-0.78,0.48-1.59,0.78-2.56%20c0.11-0.41,0.52-0.7,0.93-0.63c1.22,0.22,2.45-1.56,3.3-3.71c0.48-1.3,0.85-2.7,0.96-3.96c0.11-1.19,0-2.22-0.33-2.85%20c-0.33-0.61-1.25-0.26-1.93-0.85c-3.51,9.31-34.11,13.52-46.63,0.7c-0.44,0.7-0.52,1.96-0.37,3.37c0.19,1.48,0.63,3.11,1.3,4.41%20c0.78,1.52,1.78,2.56,2.78,2.3c0.41-0.11,0.85,0.11,1,0.52c0.3,0.82,0.48,1.45,0.7,2.07C47.18,65.2,71.84,66.69,78.21,47.33%20L78.21,47.33z%20M28.14,91.38c1.45,0,2.63,1.18,2.63,2.63c0,1.45-1.18,2.63-2.63,2.63c-1.45,0-2.63-1.18-2.63-2.63%20C25.52,92.56,26.69,91.38,28.14,91.38L28.14,91.38z%20M23.25,68.84C14.98,70.72,7.71,74.8,3.63,92.75L0,106.64h19.67V89.45%20c0-2.11,1.72-3.83,3.83-3.83h4.09C27.42,78.97,24.1,71.99,23.25,68.84L23.25,68.84z'/%3e%3c/g%3e%3c/svg%3e";
5565
5863
  const {
@@ -64281,25 +64579,6 @@ function setupUpwardProgressiveExpandBehavior(options) {
64281
64579
  };
64282
64580
  }
64283
64581
  const DOMINDS_CODE_BLOCK_CODE_ATTR = "data-code";
64284
- const MANUAL_COPY_TEXTS = {
64285
- zh: {
64286
- copyCode: "复制代码",
64287
- title: "需要手动复制",
64288
- close: "关闭",
64289
- selectAll: "全选文本",
64290
- insecureHttpMessage: "当前页面通过 HTTP 非 localhost 地址访问,浏览器不会开放剪贴板权限。请在下方只读文本框中手动全选并复制。",
64291
- unavailableMessage: "浏览器当前没有开放剪贴板写入权限。请在下方只读文本框中手动全选并复制。"
64292
- },
64293
- en: {
64294
- copyCode: "Copy code",
64295
- title: "Manual copy required",
64296
- close: "Close",
64297
- selectAll: "Select all",
64298
- insecureHttpMessage: "This page is loaded over HTTP from a non-localhost address, so the browser does not expose clipboard access. Select and copy the read-only text below manually.",
64299
- unavailableMessage: "The browser has not granted clipboard write access. Select and copy the read-only text below manually."
64300
- }
64301
- };
64302
- const manualCopyModalCleanups = /* @__PURE__ */ new WeakMap();
64303
64582
  function encodeDomindsCodeBlockDataCode(code2) {
64304
64583
  return encodeURIComponent(code2);
64305
64584
  }
@@ -64317,250 +64596,11 @@ function toLanguageClassToken(language2) {
64317
64596
  const token2 = language2.replace(/[^A-Za-z0-9_-]/g, "-").replace(/^-+|-+$/g, "");
64318
64597
  return token2.length > 0 ? token2 : "plaintext";
64319
64598
  }
64320
- function isLocalClipboardHost(hostname) {
64321
- const loopbackIpv4Match = /^127(?:\.\d{1,3}){3}$/.test(hostname);
64322
- return hostname === "localhost" || hostname.endsWith(".localhost") || loopbackIpv4Match || hostname === "::1" || hostname === "[::1]";
64323
- }
64324
- function getManualCopyTexts(language2) {
64325
- return language2.toLowerCase().startsWith("zh") ? MANUAL_COPY_TEXTS.zh : MANUAL_COPY_TEXTS.en;
64326
- }
64327
64599
  function getElementLanguage(element) {
64328
64600
  const langElement = element.closest("[lang]");
64329
64601
  if (!(langElement instanceof Element)) return "en";
64330
64602
  return langElement.getAttribute("lang") ?? "en";
64331
64603
  }
64332
- function getManualCopyMessage(texts) {
64333
- if (window.location.protocol === "http:" && !isLocalClipboardHost(window.location.hostname)) {
64334
- return texts.insecureHttpMessage;
64335
- }
64336
- return texts.unavailableMessage;
64337
- }
64338
- function showManualCopyModal(text2, language2, restoreFocusTo) {
64339
- const texts = getManualCopyTexts(language2);
64340
- const existing = document.querySelector('[data-dominds-manual-copy-modal="true"]');
64341
- if (existing instanceof HTMLElement) {
64342
- const cleanup = manualCopyModalCleanups.get(existing);
64343
- if (cleanup) {
64344
- cleanup();
64345
- } else {
64346
- existing.remove();
64347
- }
64348
- }
64349
- const modal = document.createElement("div");
64350
- modal.dataset.domindsManualCopyModal = "true";
64351
- modal.innerHTML = `
64352
- <style>
64353
- ${ICON_MASK_BASE_CSS}
64354
- [data-dominds-manual-copy-modal="true"] {
64355
- position: fixed;
64356
- inset: 0;
64357
- z-index: 10000;
64358
- display: flex;
64359
- align-items: center;
64360
- justify-content: center;
64361
- padding: 20px;
64362
- min-height: 0;
64363
- box-sizing: border-box;
64364
- font-family: var(--dominds-font-family, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
64365
- }
64366
- [data-dominds-manual-copy-modal="true"] .manual-copy-backdrop {
64367
- position: absolute;
64368
- inset: 0;
64369
- background: rgba(0, 0, 0, 0.38);
64370
- }
64371
- [data-dominds-manual-copy-modal="true"] .manual-copy-dialog {
64372
- position: relative;
64373
- z-index: 1;
64374
- width: min(720px, 100%);
64375
- max-height: calc(100vh - 40px);
64376
- display: flex;
64377
- flex-direction: column;
64378
- background: var(--dominds-bg-secondary, var(--color-bg-secondary, #ffffff));
64379
- color: var(--dominds-fg, var(--color-fg-primary, #242424));
64380
- border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
64381
- border-radius: 8px;
64382
- box-shadow: 0 18px 54px rgba(0, 0, 0, 0.22);
64383
- overflow: hidden;
64384
- }
64385
- [data-dominds-manual-copy-modal="true"] .manual-copy-header {
64386
- display: flex;
64387
- align-items: center;
64388
- justify-content: space-between;
64389
- gap: 12px;
64390
- padding: 12px 14px;
64391
- border-bottom: 1px solid var(--dominds-border, var(--color-border-primary, #e5e5e5));
64392
- background: var(--color-bg-tertiary, #f6f6f6);
64393
- }
64394
- [data-dominds-manual-copy-modal="true"] .manual-copy-title {
64395
- margin: 0;
64396
- font-size: 14px;
64397
- line-height: 1.35;
64398
- font-weight: 650;
64399
- }
64400
- [data-dominds-manual-copy-modal="true"] .manual-copy-close {
64401
- width: 28px;
64402
- height: 28px;
64403
- border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
64404
- border-radius: 6px;
64405
- padding: 0;
64406
- display: inline-flex;
64407
- align-items: center;
64408
- justify-content: center;
64409
- background: transparent;
64410
- color: inherit;
64411
- cursor: pointer;
64412
- }
64413
- [data-dominds-manual-copy-modal="true"] .manual-copy-close .icon-mask {
64414
- width: 14px;
64415
- height: 14px;
64416
- --icon-mask: ${ICON_MASK_URLS.close};
64417
- }
64418
- [data-dominds-manual-copy-modal="true"] .manual-copy-close:hover,
64419
- [data-dominds-manual-copy-modal="true"] .manual-copy-close:focus-visible {
64420
- border-color: var(--dominds-primary, var(--color-accent-primary, #005fb8));
64421
- outline: none;
64422
- }
64423
- [data-dominds-manual-copy-modal="true"] .manual-copy-body {
64424
- display: flex;
64425
- flex-direction: column;
64426
- gap: 10px;
64427
- flex: 1 1 auto;
64428
- min-height: 0;
64429
- padding: 14px;
64430
- overflow: hidden;
64431
- }
64432
- [data-dominds-manual-copy-modal="true"] .manual-copy-message {
64433
- margin: 0;
64434
- color: var(--dominds-muted, var(--color-fg-secondary, #525252));
64435
- font-size: 13px;
64436
- line-height: 1.45;
64437
- }
64438
- [data-dominds-manual-copy-modal="true"] .manual-copy-text {
64439
- width: 100%;
64440
- min-height: min(260px, 42vh);
64441
- box-sizing: border-box;
64442
- flex: 1 1 auto;
64443
- resize: vertical;
64444
- padding: 10px;
64445
- border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
64446
- border-radius: 6px;
64447
- background: var(--dominds-bg, var(--color-bg-primary, #fbfbfb));
64448
- color: var(--dominds-fg, var(--color-fg-primary, #242424));
64449
- font: 12px/1.45 ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
64450
- white-space: pre;
64451
- }
64452
- [data-dominds-manual-copy-modal="true"] .manual-copy-footer {
64453
- display: flex;
64454
- justify-content: flex-end;
64455
- padding: 0 14px 14px;
64456
- }
64457
- [data-dominds-manual-copy-modal="true"] .manual-copy-select {
64458
- border: 1px solid var(--dominds-primary, var(--color-accent-primary, #005fb8));
64459
- border-radius: 6px;
64460
- background: var(--dominds-primary, var(--color-accent-primary, #005fb8));
64461
- color: #ffffff;
64462
- padding: 6px 12px;
64463
- font-size: 13px;
64464
- cursor: pointer;
64465
- }
64466
- </style>
64467
- <div class="manual-copy-backdrop"></div>
64468
- <div class="manual-copy-dialog" role="dialog" aria-modal="true" aria-labelledby="manual-copy-title" aria-describedby="manual-copy-message">
64469
- <div class="manual-copy-header">
64470
- <h3 class="manual-copy-title" id="manual-copy-title">${escapeHtmlText$1(texts.title)}</h3>
64471
- <button class="manual-copy-close" type="button" aria-label="${escapeHtmlText$1(
64472
- texts.close
64473
- )}" title="${escapeHtmlText$1(texts.close)}">
64474
- <span class="icon-mask" aria-hidden="true"></span>
64475
- </button>
64476
- </div>
64477
- <div class="manual-copy-body">
64478
- <p class="manual-copy-message" id="manual-copy-message">${escapeHtmlText$1(getManualCopyMessage(texts))}</p>
64479
- <textarea class="manual-copy-text" readonly spellcheck="false"></textarea>
64480
- </div>
64481
- <div class="manual-copy-footer">
64482
- <button class="manual-copy-select" type="button">${escapeHtmlText$1(texts.selectAll)}</button>
64483
- </div>
64484
- </div>
64485
- `;
64486
- const close2 = () => {
64487
- document.removeEventListener("keydown", onDocumentKeydown, true);
64488
- manualCopyModalCleanups.delete(modal);
64489
- modal.remove();
64490
- if (restoreFocusTo !== null && restoreFocusTo.isConnected) {
64491
- restoreFocusTo.focus();
64492
- }
64493
- };
64494
- const closeButton = modal.querySelector(".manual-copy-close");
64495
- const backdrop = modal.querySelector(".manual-copy-backdrop");
64496
- const selectButton = modal.querySelector(".manual-copy-select");
64497
- const textarea = modal.querySelector(".manual-copy-text");
64498
- if (!(closeButton instanceof HTMLButtonElement)) {
64499
- throw new Error("Manual copy modal close button missing.");
64500
- }
64501
- if (!(backdrop instanceof HTMLElement)) {
64502
- throw new Error("Manual copy modal backdrop missing.");
64503
- }
64504
- if (!(selectButton instanceof HTMLButtonElement)) {
64505
- throw new Error("Manual copy modal select button missing.");
64506
- }
64507
- if (!(textarea instanceof HTMLTextAreaElement)) {
64508
- throw new Error("Manual copy modal textarea missing.");
64509
- }
64510
- const closeButtonEl = closeButton;
64511
- const backdropEl = backdrop;
64512
- const selectButtonEl = selectButton;
64513
- const textareaEl = textarea;
64514
- textareaEl.value = text2;
64515
- const selectText = () => {
64516
- textareaEl.focus();
64517
- textareaEl.select();
64518
- };
64519
- function onDocumentKeydown(event) {
64520
- if (event.key === "Escape") {
64521
- event.preventDefault();
64522
- close2();
64523
- return;
64524
- }
64525
- if (event.key !== "Tab") return;
64526
- const focusableElements = [closeButtonEl, textareaEl, selectButtonEl];
64527
- const activeElement = document.activeElement;
64528
- const first = focusableElements[0];
64529
- const last = focusableElements[focusableElements.length - 1];
64530
- if (activeElement !== closeButtonEl && activeElement !== textareaEl && activeElement !== selectButtonEl) {
64531
- event.preventDefault();
64532
- if (event.shiftKey) {
64533
- last.focus();
64534
- } else {
64535
- first.focus();
64536
- }
64537
- return;
64538
- }
64539
- if (event.shiftKey && activeElement === first) {
64540
- event.preventDefault();
64541
- last.focus();
64542
- return;
64543
- }
64544
- if (!event.shiftKey && activeElement === last) {
64545
- event.preventDefault();
64546
- first.focus();
64547
- }
64548
- }
64549
- closeButtonEl.addEventListener("click", close2);
64550
- backdropEl.addEventListener("click", close2);
64551
- selectButtonEl.addEventListener("click", selectText);
64552
- document.addEventListener("keydown", onDocumentKeydown, true);
64553
- manualCopyModalCleanups.set(modal, close2);
64554
- document.body.appendChild(modal);
64555
- selectText();
64556
- }
64557
- async function copyTextToClipboard(text2, language2, restoreFocusTo) {
64558
- if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
64559
- await navigator.clipboard.writeText(text2);
64560
- return;
64561
- }
64562
- showManualCopyModal(text2, language2, restoreFocusTo);
64563
- }
64564
64604
  class DomindsCodeBlock extends HTMLElement {
64565
64605
  constructor() {
64566
64606
  super();
@@ -64626,7 +64666,7 @@ class DomindsCodeBlock extends HTMLElement {
64626
64666
  }
64627
64667
  if (!this.hasCodeSource) return;
64628
64668
  const language2 = this._language || "plaintext";
64629
- const texts = getManualCopyTexts(getElementLanguage(this));
64669
+ const copyCodeText = "复制代码 / Copy code";
64630
64670
  const languageLabel = escapeHtmlText$1(language2);
64631
64671
  const languageClassToken = toLanguageClassToken(language2);
64632
64672
  try {
@@ -64786,7 +64826,7 @@ class DomindsCodeBlock extends HTMLElement {
64786
64826
  <div class="code-block-wrapper">
64787
64827
  <div class="code-header">
64788
64828
  <span class="language">${languageLabel}</span>
64789
- <button class="copy-btn" title="${escapeHtmlText$1(texts.copyCode)}" aria-label="${escapeHtmlText$1(texts.copyCode)}"><span class="icon-mask" aria-hidden="true"></span></button>
64829
+ <button class="copy-btn" title="${escapeHtmlText$1(copyCodeText)}" aria-label="${escapeHtmlText$1(copyCodeText)}"><span class="icon-mask" aria-hidden="true"></span></button>
64790
64830
  </div>
64791
64831
  <pre><code class="hljs language-${languageClassToken}">${highlighted}</code></pre>
64792
64832
  <div class="code-expand-footer code-expand-footer-down is-hidden">
@@ -64807,13 +64847,17 @@ class DomindsCodeBlock extends HTMLElement {
64807
64847
  const button = this.querySelector(".copy-btn");
64808
64848
  if (!(button instanceof HTMLButtonElement)) return;
64809
64849
  button.addEventListener("click", () => {
64810
- const language2 = getElementLanguage(this);
64811
- void copyTextToClipboard(this._code, language2, button).catch((error2) => {
64812
- console.error("Copy code failed:", error2);
64813
- showManualCopyModal(this._code, language2, button);
64814
- });
64850
+ void this.copyCodeToClipboard(button);
64815
64851
  });
64816
64852
  }
64853
+ async copyCodeToClipboard(button) {
64854
+ try {
64855
+ await copyTextOrShowManualCopy(this._code, button);
64856
+ } catch (error2) {
64857
+ console.error("Copy code failed:", error2);
64858
+ alert("复制失败 / Copy failed.");
64859
+ }
64860
+ }
64817
64861
  setupProgressiveExpand() {
64818
64862
  const target = this.querySelector("pre");
64819
64863
  const footer = this.querySelector(".code-expand-footer");
@@ -99486,12 +99530,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
99486
99530
  registerLayoutLoaders([
99487
99531
  {
99488
99532
  name: "dagre",
99489
- loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./dagre-KLK3FWXG-2qk0ikdt.js"), true ? __vite__mapDeps([0,1,2,3,4,5]) : void 0), "loader")
99533
+ loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./dagre-KLK3FWXG-Cwz7pFDo.js"), true ? __vite__mapDeps([0,1,2,3,4,5]) : void 0), "loader")
99490
99534
  },
99491
99535
  ...[
99492
99536
  {
99493
99537
  name: "cose-bilkent",
99494
- loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./cose-bilkent-S5V4N54A-BBWvHErL.js"), true ? __vite__mapDeps([6,7]) : void 0), "loader")
99538
+ loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./cose-bilkent-S5V4N54A-D2dZHRG3.js"), true ? __vite__mapDeps([6,7]) : void 0), "loader")
99495
99539
  }
99496
99540
  ]
99497
99541
  ]);
@@ -99931,7 +99975,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
99931
99975
  }, "detector");
99932
99976
  var loader = /* @__PURE__ */ __name(async () => {
99933
99977
  const { diagram: diagram2 } = await __vitePreload(async () => {
99934
- const { diagram: diagram22 } = await import("./c4Diagram-IC4MRINW-D_d3F9XD.js");
99978
+ const { diagram: diagram22 } = await import("./c4Diagram-IC4MRINW-CLkxlY6N.js");
99935
99979
  return { diagram: diagram22 };
99936
99980
  }, true ? __vite__mapDeps([8,9]) : void 0);
99937
99981
  return { id: id$1, diagram: diagram2 };
@@ -99951,7 +99995,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
99951
99995
  }, "detector");
99952
99996
  var loader2 = /* @__PURE__ */ __name(async () => {
99953
99997
  const { diagram: diagram2 } = await __vitePreload(async () => {
99954
- const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-CW06almb.js");
99998
+ const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-C5Hi85ST.js");
99955
99999
  return { diagram: diagram22 };
99956
100000
  }, true ? __vite__mapDeps([10,11,9,12,13,14]) : void 0);
99957
100001
  return { id: id2, diagram: diagram2 };
@@ -99977,7 +100021,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
99977
100021
  }, "detector");
99978
100022
  var loader3 = /* @__PURE__ */ __name(async () => {
99979
100023
  const { diagram: diagram2 } = await __vitePreload(async () => {
99980
- const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-CW06almb.js");
100024
+ const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-C5Hi85ST.js");
99981
100025
  return { diagram: diagram22 };
99982
100026
  }, true ? __vite__mapDeps([10,11,9,12,13,14]) : void 0);
99983
100027
  return { id: id3, diagram: diagram2 };
@@ -99994,7 +100038,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
99994
100038
  }, "detector");
99995
100039
  var loader4 = /* @__PURE__ */ __name(async () => {
99996
100040
  const { diagram: diagram2 } = await __vitePreload(async () => {
99997
- const { diagram: diagram22 } = await import("./erDiagram-INFDFZHY-CV68FwGf.js");
100041
+ const { diagram: diagram22 } = await import("./erDiagram-INFDFZHY-DCnHsk_Z.js");
99998
100042
  return { diagram: diagram22 };
99999
100043
  }, true ? __vite__mapDeps([15,12,13,14]) : void 0);
100000
100044
  return { id: id4, diagram: diagram2 };
@@ -100011,7 +100055,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
100011
100055
  }, "detector");
100012
100056
  var loader5 = /* @__PURE__ */ __name(async () => {
100013
100057
  const { diagram: diagram2 } = await __vitePreload(async () => {
100014
- const { diagram: diagram22 } = await import("./gitGraphDiagram-K3NZZRJ6-CAuIexWi.js");
100058
+ const { diagram: diagram22 } = await import("./gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js");
100015
100059
  return { diagram: diagram22 };
100016
100060
  }, true ? __vite__mapDeps([16,17,18,19,2,4,5]) : void 0);
100017
100061
  return { id: id5, diagram: diagram2 };
@@ -100028,7 +100072,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
100028
100072
  }, "detector");
100029
100073
  var loader6 = /* @__PURE__ */ __name(async () => {
100030
100074
  const { diagram: diagram2 } = await __vitePreload(async () => {
100031
- const { diagram: diagram22 } = await import("./ganttDiagram-A5KZAMGK-C96NncCU.js");
100075
+ const { diagram: diagram22 } = await import("./ganttDiagram-A5KZAMGK-vT15RP6A.js");
100032
100076
  return { diagram: diagram22 };
100033
100077
  }, true ? __vite__mapDeps([20,21,22,23]) : void 0);
100034
100078
  return { id: id6, diagram: diagram2 };
@@ -100045,7 +100089,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
100045
100089
  }, "detector");
100046
100090
  var loader7 = /* @__PURE__ */ __name(async () => {
100047
100091
  const { diagram: diagram2 } = await __vitePreload(async () => {
100048
- const { diagram: diagram22 } = await import("./infoDiagram-LFFYTUFH-C16Sckpz.js");
100092
+ const { diagram: diagram22 } = await import("./infoDiagram-LFFYTUFH-DlyOw8IT.js");
100049
100093
  return { diagram: diagram22 };
100050
100094
  }, true ? __vite__mapDeps([24,19,2,4,5]) : void 0);
100051
100095
  return { id: id7, diagram: diagram2 };
@@ -100061,7 +100105,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
100061
100105
  }, "detector");
100062
100106
  var loader8 = /* @__PURE__ */ __name(async () => {
100063
100107
  const { diagram: diagram2 } = await __vitePreload(async () => {
100064
- const { diagram: diagram22 } = await import("./pieDiagram-SKSYHLDU-Bx6hUJ4Q.js");
100108
+ const { diagram: diagram22 } = await import("./pieDiagram-SKSYHLDU-ByoyS2as.js");
100065
100109
  return { diagram: diagram22 };
100066
100110
  }, true ? __vite__mapDeps([25,17,19,2,4,5,26,27,22]) : void 0);
100067
100111
  return { id: id8, diagram: diagram2 };
@@ -100077,7 +100121,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
100077
100121
  }, "detector");
100078
100122
  var loader9 = /* @__PURE__ */ __name(async () => {
100079
100123
  const { diagram: diagram2 } = await __vitePreload(async () => {
100080
- const { diagram: diagram22 } = await import("./quadrantDiagram-337W2JSQ-zyduIle0.js");
100124
+ const { diagram: diagram22 } = await import("./quadrantDiagram-337W2JSQ-BnKSsLfA.js");
100081
100125
  return { diagram: diagram22 };
100082
100126
  }, true ? __vite__mapDeps([28,21,22,23]) : void 0);
100083
100127
  return { id: id9, diagram: diagram2 };
@@ -100094,7 +100138,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
100094
100138
  }, "detector");
100095
100139
  var loader10 = /* @__PURE__ */ __name(async () => {
100096
100140
  const { diagram: diagram2 } = await __vitePreload(async () => {
100097
- const { diagram: diagram22 } = await import("./xychartDiagram-JWTSCODW-DmS8BiaA.js");
100141
+ const { diagram: diagram22 } = await import("./xychartDiagram-JWTSCODW-BgOzlz6Z.js");
100098
100142
  return { diagram: diagram22 };
100099
100143
  }, true ? __vite__mapDeps([29,22,27,21,23]) : void 0);
100100
100144
  return { id: id10, diagram: diagram2 };
@@ -100111,7 +100155,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
100111
100155
  }, "detector");
100112
100156
  var loader11 = /* @__PURE__ */ __name(async () => {
100113
100157
  const { diagram: diagram2 } = await __vitePreload(async () => {
100114
- const { diagram: diagram22 } = await import("./requirementDiagram-Z7DCOOCP-BgfjyEJM.js");
100158
+ const { diagram: diagram22 } = await import("./requirementDiagram-Z7DCOOCP-jU2C7qJN.js");
100115
100159
  return { diagram: diagram22 };
100116
100160
  }, true ? __vite__mapDeps([30,12,13]) : void 0);
100117
100161
  return { id: id11, diagram: diagram2 };
@@ -100128,7 +100172,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
100128
100172
  }, "detector");
100129
100173
  var loader12 = /* @__PURE__ */ __name(async () => {
100130
100174
  const { diagram: diagram2 } = await __vitePreload(async () => {
100131
- const { diagram: diagram22 } = await import("./sequenceDiagram-2WXFIKYE-DqJz-iYI.js");
100175
+ const { diagram: diagram22 } = await import("./sequenceDiagram-2WXFIKYE-CBhN4j2Q.js");
100132
100176
  return { diagram: diagram22 };
100133
100177
  }, true ? __vite__mapDeps([31,9,18]) : void 0);
100134
100178
  return { id: id12, diagram: diagram2 };
@@ -100148,7 +100192,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
100148
100192
  }, "detector");
100149
100193
  var loader13 = /* @__PURE__ */ __name(async () => {
100150
100194
  const { diagram: diagram2 } = await __vitePreload(async () => {
100151
- const { diagram: diagram22 } = await import("./classDiagram-VBA2DB6C-DCCQrdwF.js");
100195
+ const { diagram: diagram22 } = await import("./classDiagram-VBA2DB6C-DWQ1VnaI.js");
100152
100196
  return { diagram: diagram22 };
100153
100197
  }, true ? __vite__mapDeps([32,33,11,9,12,13]) : void 0);
100154
100198
  return { id: id13, diagram: diagram2 };
@@ -100168,7 +100212,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
100168
100212
  }, "detector");
100169
100213
  var loader14 = /* @__PURE__ */ __name(async () => {
100170
100214
  const { diagram: diagram2 } = await __vitePreload(async () => {
100171
- const { diagram: diagram22 } = await import("./classDiagram-v2-RAHNMMFH-DCCQrdwF.js");
100215
+ const { diagram: diagram22 } = await import("./classDiagram-v2-RAHNMMFH-DWQ1VnaI.js");
100172
100216
  return { diagram: diagram22 };
100173
100217
  }, true ? __vite__mapDeps([34,33,11,9,12,13]) : void 0);
100174
100218
  return { id: id14, diagram: diagram2 };
@@ -100188,7 +100232,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
100188
100232
  }, "detector");
100189
100233
  var loader15 = /* @__PURE__ */ __name(async () => {
100190
100234
  const { diagram: diagram2 } = await __vitePreload(async () => {
100191
- const { diagram: diagram22 } = await import("./stateDiagram-RAJIS63D-CngWYuX-.js");
100235
+ const { diagram: diagram22 } = await import("./stateDiagram-RAJIS63D-DZSAyRfJ.js");
100192
100236
  return { diagram: diagram22 };
100193
100237
  }, true ? __vite__mapDeps([35,36,12,13,1,2,3,4]) : void 0);
100194
100238
  return { id: id15, diagram: diagram2 };
@@ -100211,7 +100255,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
100211
100255
  }, "detector");
100212
100256
  var loader16 = /* @__PURE__ */ __name(async () => {
100213
100257
  const { diagram: diagram2 } = await __vitePreload(async () => {
100214
- const { diagram: diagram22 } = await import("./stateDiagram-v2-FVOUBMTO-BxyHvrvU.js");
100258
+ const { diagram: diagram22 } = await import("./stateDiagram-v2-FVOUBMTO-x29lKJpl.js");
100215
100259
  return { diagram: diagram22 };
100216
100260
  }, true ? __vite__mapDeps([37,36,12,13]) : void 0);
100217
100261
  return { id: id16, diagram: diagram2 };
@@ -100228,7 +100272,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
100228
100272
  }, "detector");
100229
100273
  var loader17 = /* @__PURE__ */ __name(async () => {
100230
100274
  const { diagram: diagram2 } = await __vitePreload(async () => {
100231
- const { diagram: diagram22 } = await import("./journeyDiagram-4ABVD52K-437hhFHC.js");
100275
+ const { diagram: diagram22 } = await import("./journeyDiagram-4ABVD52K-B95gnBKj.js");
100232
100276
  return { diagram: diagram22 };
100233
100277
  }, true ? __vite__mapDeps([38,11,9,26]) : void 0);
100234
100278
  return { id: id17, diagram: diagram2 };
@@ -100298,7 +100342,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
100298
100342
  }, "detector");
100299
100343
  var loader18 = /* @__PURE__ */ __name(async () => {
100300
100344
  const { diagram: diagram2 } = await __vitePreload(async () => {
100301
- const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-CW06almb.js");
100345
+ const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-C5Hi85ST.js");
100302
100346
  return { diagram: diagram22 };
100303
100347
  }, true ? __vite__mapDeps([10,11,9,12,13,14]) : void 0);
100304
100348
  return { id: id18, diagram: diagram2 };
@@ -100315,7 +100359,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
100315
100359
  }, "detector");
100316
100360
  var loader19 = /* @__PURE__ */ __name(async () => {
100317
100361
  const { diagram: diagram2 } = await __vitePreload(async () => {
100318
- const { diagram: diagram22 } = await import("./timeline-definition-YZTLITO2-C7t6WVS3.js");
100362
+ const { diagram: diagram22 } = await import("./timeline-definition-YZTLITO2-BQR2qEXt.js");
100319
100363
  return { diagram: diagram22 };
100320
100364
  }, true ? __vite__mapDeps([39,26]) : void 0);
100321
100365
  return { id: id19, diagram: diagram2 };
@@ -100332,7 +100376,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
100332
100376
  }, "detector");
100333
100377
  var loader20 = /* @__PURE__ */ __name(async () => {
100334
100378
  const { diagram: diagram2 } = await __vitePreload(async () => {
100335
- const { diagram: diagram22 } = await import("./mindmap-definition-YRQLILUH-DA1-XaNi.js");
100379
+ const { diagram: diagram22 } = await import("./mindmap-definition-YRQLILUH-m2w1nBbY.js");
100336
100380
  return { diagram: diagram22 };
100337
100381
  }, true ? __vite__mapDeps([40,12,13]) : void 0);
100338
100382
  return { id: id20, diagram: diagram2 };
@@ -100349,7 +100393,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
100349
100393
  }, "detector");
100350
100394
  var loader21 = /* @__PURE__ */ __name(async () => {
100351
100395
  const { diagram: diagram2 } = await __vitePreload(async () => {
100352
- const { diagram: diagram22 } = await import("./kanban-definition-K7BYSVSG-DsCV_Tpx.js");
100396
+ const { diagram: diagram22 } = await import("./kanban-definition-K7BYSVSG-DQ2gfPUK.js");
100353
100397
  return { diagram: diagram22 };
100354
100398
  }, true ? __vite__mapDeps([41,11]) : void 0);
100355
100399
  return { id: id21, diagram: diagram2 };
@@ -100366,7 +100410,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
100366
100410
  }, "detector");
100367
100411
  var loader22 = /* @__PURE__ */ __name(async () => {
100368
100412
  const { diagram: diagram2 } = await __vitePreload(async () => {
100369
- const { diagram: diagram22 } = await import("./sankeyDiagram-WA2Y5GQK-lmOWaczS.js");
100413
+ const { diagram: diagram22 } = await import("./sankeyDiagram-WA2Y5GQK-R175tX8b.js");
100370
100414
  return { diagram: diagram22 };
100371
100415
  }, true ? __vite__mapDeps([42,27,22]) : void 0);
100372
100416
  return { id: id22, diagram: diagram2 };
@@ -100383,7 +100427,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
100383
100427
  }, "detector");
100384
100428
  var loader23 = /* @__PURE__ */ __name(async () => {
100385
100429
  const { diagram: diagram2 } = await __vitePreload(async () => {
100386
- const { diagram: diagram22 } = await import("./diagram-P4PSJMXO-B9V-tQMe.js");
100430
+ const { diagram: diagram22 } = await import("./diagram-P4PSJMXO-ChwZDZYa.js");
100387
100431
  return { diagram: diagram22 };
100388
100432
  }, true ? __vite__mapDeps([43,17,19,2,4,5]) : void 0);
100389
100433
  return { id: id23, diagram: diagram2 };
@@ -100399,7 +100443,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
100399
100443
  }, "detector");
100400
100444
  var loader24 = /* @__PURE__ */ __name(async () => {
100401
100445
  const { diagram: diagram2 } = await __vitePreload(async () => {
100402
- const { diagram: diagram22 } = await import("./diagram-IFDJBPK2-DToz8zk9.js");
100446
+ const { diagram: diagram22 } = await import("./diagram-IFDJBPK2-CZ1KR1hO.js");
100403
100447
  return { diagram: diagram22 };
100404
100448
  }, true ? __vite__mapDeps([44,17,19,2,4,5]) : void 0);
100405
100449
  return { id: id24, diagram: diagram2 };
@@ -100415,7 +100459,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
100415
100459
  }, "detector");
100416
100460
  var loader25 = /* @__PURE__ */ __name(async () => {
100417
100461
  const { diagram: diagram2 } = await __vitePreload(async () => {
100418
- const { diagram: diagram22 } = await import("./blockDiagram-WCTKOSBZ-IIP6LGXS.js");
100462
+ const { diagram: diagram22 } = await import("./blockDiagram-WCTKOSBZ-Bozcnodw.js");
100419
100463
  return { diagram: diagram22 };
100420
100464
  }, true ? __vite__mapDeps([45,11,5,2,1,14]) : void 0);
100421
100465
  return { id: id25, diagram: diagram2 };
@@ -100432,7 +100476,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
100432
100476
  }, "detector");
100433
100477
  var loader26 = /* @__PURE__ */ __name(async () => {
100434
100478
  const { diagram: diagram2 } = await __vitePreload(async () => {
100435
- const { diagram: diagram22 } = await import("./architectureDiagram-2XIMDMQ5-DXqcDq4R.js");
100479
+ const { diagram: diagram22 } = await import("./architectureDiagram-2XIMDMQ5-D3Xtb8u_.js");
100436
100480
  return { diagram: diagram22 };
100437
100481
  }, true ? __vite__mapDeps([46,17,19,2,4,5,7]) : void 0);
100438
100482
  return { id: id26, diagram: diagram2 };
@@ -100449,7 +100493,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
100449
100493
  }, "detector");
100450
100494
  var loader27 = /* @__PURE__ */ __name(async () => {
100451
100495
  const { diagram: diagram2 } = await __vitePreload(async () => {
100452
- const { diagram: diagram22 } = await import("./ishikawaDiagram-PHBUUO56-oNG6I0p3.js");
100496
+ const { diagram: diagram22 } = await import("./ishikawaDiagram-PHBUUO56-iZCVn19K.js");
100453
100497
  return { diagram: diagram22 };
100454
100498
  }, true ? [] : void 0);
100455
100499
  return { id: id27, diagram: diagram2 };
@@ -100465,7 +100509,7 @@ var detector28 = /* @__PURE__ */ __name((txt) => {
100465
100509
  }, "detector");
100466
100510
  var loader28 = /* @__PURE__ */ __name(async () => {
100467
100511
  const { diagram: diagram2 } = await __vitePreload(async () => {
100468
- const { diagram: diagram22 } = await import("./vennDiagram-LZ73GAT5-CEw7GPed.js");
100512
+ const { diagram: diagram22 } = await import("./vennDiagram-LZ73GAT5-BrxPNUYz.js");
100469
100513
  return { diagram: diagram22 };
100470
100514
  }, true ? [] : void 0);
100471
100515
  return { id: id28, diagram: diagram2 };
@@ -100482,7 +100526,7 @@ var detector29 = /* @__PURE__ */ __name((txt) => {
100482
100526
  }, "detector");
100483
100527
  var loader29 = /* @__PURE__ */ __name(async () => {
100484
100528
  const { diagram: diagram2 } = await __vitePreload(async () => {
100485
- const { diagram: diagram22 } = await import("./diagram-E7M64L7V-C1DbHDbf.js");
100529
+ const { diagram: diagram22 } = await import("./diagram-E7M64L7V-C6z0VVoW.js");
100486
100530
  return { diagram: diagram22 };
100487
100531
  }, true ? __vite__mapDeps([47,13,17,19,2,4,5,23,27,22]) : void 0);
100488
100532
  return { id: id29, diagram: diagram2 };
@@ -102590,27 +102634,15 @@ class DomindsDialogContainer extends HTMLElement {
102590
102634
  const doneIconHtml = '<span class="icon-mask dc-icon-check-circle" aria-hidden="true"></span>';
102591
102635
  const copyIconHtml = '<span class="icon-mask dc-icon-copy" aria-hidden="true"></span>';
102592
102636
  try {
102593
- await navigator.clipboard.writeText(text2);
102594
- const prev2 = btn.innerHTML || "";
102595
- btn.innerHTML = doneIconHtml;
102596
- setTimeout(() => btn.innerHTML = prev2 || copyIconHtml, 1200);
102597
- } catch (err) {
102598
- try {
102599
- const ta = document.createElement("textarea");
102600
- ta.value = text2;
102601
- ta.style.position = "fixed";
102602
- ta.style.opacity = "0";
102603
- document.body.appendChild(ta);
102604
- ta.focus();
102605
- ta.select();
102606
- document.execCommand("copy");
102607
- ta.remove();
102637
+ const result = await copyTextOrShowManualCopy(text2, btn);
102638
+ if (result.kind === "copied") {
102608
102639
  const prev2 = btn.innerHTML || "";
102609
102640
  btn.innerHTML = doneIconHtml;
102610
102641
  setTimeout(() => btn.innerHTML = prev2 || copyIconHtml, 1200);
102611
- } catch (err2) {
102612
- console.warn("Clipboard write failed", err2);
102613
102642
  }
102643
+ } catch (err) {
102644
+ console.warn("Clipboard write failed", err);
102645
+ this.emitToast(getUiStrings(this.uiLanguage).copyFailedToast, "warning");
102614
102646
  }
102615
102647
  }
102616
102648
  });
@@ -105776,34 +105808,17 @@ ${event.content}`;
105776
105808
  emitToast(message, kind = "info") {
105777
105809
  dispatchDomindsEvent(this, "ui-toast", { message, kind }, { bubbles: true, composed: true });
105778
105810
  }
105779
- async copyTextToClipboard(text2) {
105780
- try {
105781
- if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
105782
- await navigator.clipboard.writeText(text2);
105783
- return true;
105784
- }
105785
- const ta = document.createElement("textarea");
105786
- ta.value = text2;
105787
- ta.setAttribute("readonly", "true");
105788
- ta.style.position = "fixed";
105789
- ta.style.left = "-9999px";
105790
- document.body.appendChild(ta);
105791
- ta.select();
105792
- const ok = document.execCommand("copy");
105793
- document.body.removeChild(ta);
105794
- return ok === true;
105795
- } catch {
105796
- return false;
105797
- }
105798
- }
105799
105811
  async copyLinkToClipboardWithToast(urlStr) {
105800
- const ok = await this.copyTextToClipboard(urlStr);
105801
105812
  const t2 = getUiStrings(this.uiLanguage);
105802
- if (ok) {
105803
- this.emitToast(t2.linkCopiedToast, "info");
105804
- return;
105813
+ try {
105814
+ const result = await copyTextOrShowManualCopy(urlStr, null);
105815
+ if (result.kind === "copied") {
105816
+ this.emitToast(t2.linkCopiedToast, "info");
105817
+ }
105818
+ } catch (error2) {
105819
+ console.warn("Manual link copy fallback failed", error2);
105820
+ this.emitToast(t2.linkCopyFailedToast, "warning");
105805
105821
  }
105806
- this.emitToast(t2.linkCopyFailedToast, "warning");
105807
105822
  }
105808
105823
  // === REMINDER EVENTS ===
105809
105824
  handleFullRemindersUpdate(event) {
@@ -113682,7 +113697,7 @@ class DomindsTeamMembers extends HTMLElement {
113682
113697
  if (action === "mention") {
113683
113698
  this.emitMention(memberId2);
113684
113699
  } else if (action === "copy") {
113685
- void this.copyMention(memberId2);
113700
+ void this.copyMention(memberId2, actionBtn);
113686
113701
  }
113687
113702
  return;
113688
113703
  }
@@ -113718,25 +113733,14 @@ class DomindsTeamMembers extends HTMLElement {
113718
113733
  const detail = { memberId, mention };
113719
113734
  dispatchDomindsEvent(this, "team-member-mention", detail, { bubbles: true, composed: true });
113720
113735
  }
113721
- async copyMention(memberId) {
113736
+ async copyMention(memberId, restoreFocusTo) {
113722
113737
  const t2 = getUiStrings(this.props.uiLanguage);
113723
113738
  const mention = `@${memberId}`;
113724
113739
  try {
113725
- if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
113726
- await navigator.clipboard.writeText(mention);
113740
+ const result = await copyTextOrShowManualCopy(mention, restoreFocusTo);
113741
+ if (result.kind === "copied") {
113727
113742
  this.emitToast(`${t2.teamMembersCopiedPrefix}${mention}`);
113728
- return;
113729
113743
  }
113730
- const ta = document.createElement("textarea");
113731
- ta.value = mention;
113732
- ta.setAttribute("readonly", "true");
113733
- ta.style.position = "fixed";
113734
- ta.style.left = "-9999px";
113735
- document.body.appendChild(ta);
113736
- ta.select();
113737
- document.execCommand("copy");
113738
- document.body.removeChild(ta);
113739
- this.emitToast(`${t2.teamMembersCopiedPrefix}${mention}`);
113740
113744
  } catch (error2) {
113741
113745
  const msg = error2 instanceof Error ? error2.message : t2.unknownError;
113742
113746
  this.emitToast(`${t2.teamMembersCopyFailedPrefix}${msg}`, "warning");
@@ -117529,7 +117533,9 @@ const _DomindsApp = class _DomindsApp extends HTMLElement {
117529
117533
  this.backendMode = null;
117530
117534
  this.domindsSelfUpdate = null;
117531
117535
  this.domindsSelfUpdateCheckInFlight = false;
117536
+ this.domindsSelfUpdateCheckPromise = null;
117532
117537
  this.domindsSelfUpdateInstallFailureToastKey = null;
117538
+ this.domindsVersionForceRestartPromise = null;
117533
117539
  this.domindsVersionClickTimer = null;
117534
117540
  this.toolbarCurrentCourse = 1;
117535
117541
  this.toolbarTotalCourses = 1;
@@ -119105,11 +119111,12 @@ ${formatUiLanguageOptionLabel({
119105
119111
  }
119106
119112
  switch (state2.kind) {
119107
119113
  case "install":
119108
- case "installing":
119109
119114
  lines.push(`${t2.domindsVersionTooltipStatus}: ${t2.domindsVersionUpdateAvailableTitle}`);
119110
119115
  break;
119116
+ case "installing":
119117
+ lines.push(`${t2.domindsVersionTooltipStatus}: ${t2.domindsVersionInstallInProgress}`);
119118
+ break;
119111
119119
  case "restart":
119112
- case "restarting":
119113
119120
  lines.push(
119114
119121
  `${t2.domindsVersionTooltipStatus}: ${this.domindsSelfUpdate?.reason === "install_verified_after_command_failure" ? this.formatVersionCheckResult(
119115
119122
  t2.domindsVersionInstallVerifiedAfterCommandFailure,
@@ -119117,6 +119124,9 @@ ${formatUiLanguageOptionLabel({
119117
119124
  ) : t2.domindsVersionRestartAvailableTitle}`
119118
119125
  );
119119
119126
  break;
119127
+ case "restarting":
119128
+ lines.push(`${t2.domindsVersionTooltipStatus}: ${t2.domindsVersionRestartInProgress}`);
119129
+ break;
119120
119130
  case "idle":
119121
119131
  if (this.domindsSelfUpdate?.reason === "latest_check_failed" && this.domindsSelfUpdate.message) {
119122
119132
  lines.push(`${t2.domindsVersionTooltipStatus}: ${this.domindsSelfUpdate.message}`);
@@ -119140,7 +119150,7 @@ ${formatUiLanguageOptionLabel({
119140
119150
  versionIndicator.classList.toggle("hidden", !isVisible);
119141
119151
  const actionState = this.getDomindsVersionActionState();
119142
119152
  const isActionable = actionState.kind === "install" || actionState.kind === "restart";
119143
- const needsAttention = isActionable;
119153
+ const needsAttention = isActionable || actionState.kind === "installing";
119144
119154
  versionIndicator.disabled = false;
119145
119155
  versionIndicator.dataset.actionable = isActionable ? "true" : "false";
119146
119156
  versionIndicator.dataset.attention = needsAttention ? "true" : "false";
@@ -119269,6 +119279,9 @@ ${formatUiLanguageOptionLabel({
119269
119279
  }
119270
119280
  this.domindsSelfUpdate = nextStatus;
119271
119281
  this.updateDomindsVersionUi();
119282
+ if (nextStatus.reason === "install_failed") {
119283
+ throw new Error(nextStatus.message || t2.unknownError);
119284
+ }
119272
119285
  if (nextStatus.busy === "installing") {
119273
119286
  this.showInfo(t2.domindsVersionInstallInProgress);
119274
119287
  return;
@@ -119286,14 +119299,31 @@ ${formatUiLanguageOptionLabel({
119286
119299
  );
119287
119300
  return;
119288
119301
  }
119289
- this.showInfo(t2.domindsVersionRestartScheduled);
119302
+ throw new Error(nextStatus.message || t2.unknownError);
119290
119303
  } catch (error2) {
119291
119304
  const message = error2 instanceof Error ? error2.message : t2.unknownError;
119292
119305
  this.showToast(`${t2.domindsVersionActionFailedPrefix}${message}`, "error");
119293
119306
  }
119294
119307
  }
119295
- async handleDomindsVersionCheck() {
119296
- if (this.domindsSelfUpdateCheckInFlight) return;
119308
+ async requestDomindsVersionAction(action) {
119309
+ const t2 = getUiStrings(this.uiLanguage);
119310
+ const resp = await this.apiClient.actDomindsSelfUpdate(action);
119311
+ if (!resp.success) {
119312
+ if (resp.status === 401) {
119313
+ this.onAuthRejected("api");
119314
+ throw new Error(_DomindsApp.AUTH_REJECTED_ERROR_MESSAGE);
119315
+ }
119316
+ throw new Error(resp.error || t2.unknownError);
119317
+ }
119318
+ const nextStatus = resp.data?.update;
119319
+ if (!nextStatus) {
119320
+ throw new Error("Missing Dominds self-update action payload");
119321
+ }
119322
+ this.domindsSelfUpdate = nextStatus;
119323
+ this.updateDomindsVersionUi();
119324
+ return nextStatus;
119325
+ }
119326
+ async runDomindsVersionCheck() {
119297
119327
  this.domindsSelfUpdateCheckInFlight = true;
119298
119328
  this.updateDomindsVersionUi();
119299
119329
  try {
@@ -119301,7 +119331,7 @@ ${formatUiLanguageOptionLabel({
119301
119331
  if (!resp.success) {
119302
119332
  if (resp.status === 401) {
119303
119333
  this.onAuthRejected("api");
119304
- return;
119334
+ return null;
119305
119335
  }
119306
119336
  const t2 = getUiStrings(this.uiLanguage);
119307
119337
  throw new Error(resp.error || t2.unknownError);
@@ -119311,16 +119341,192 @@ ${formatUiLanguageOptionLabel({
119311
119341
  throw new Error("Missing Dominds self-update check payload");
119312
119342
  }
119313
119343
  this.domindsSelfUpdate = nextStatus;
119314
- this.showDomindsVersionCheckResult(nextStatus);
119344
+ return nextStatus;
119315
119345
  } catch (error2) {
119316
119346
  const t2 = getUiStrings(this.uiLanguage);
119317
119347
  const message = error2 instanceof Error ? error2.message : t2.unknownError;
119318
119348
  this.showToast(`${t2.domindsVersionCheckFailedPrefix}${message}`, "error");
119349
+ return null;
119319
119350
  } finally {
119320
119351
  this.domindsSelfUpdateCheckInFlight = false;
119321
119352
  this.updateDomindsVersionUi();
119353
+ this.domindsSelfUpdateCheckPromise = null;
119354
+ }
119355
+ }
119356
+ ensureDomindsVersionCheck() {
119357
+ if (this.domindsSelfUpdateCheckPromise !== null) return this.domindsSelfUpdateCheckPromise;
119358
+ this.domindsSelfUpdateCheckPromise = this.runDomindsVersionCheck();
119359
+ return this.domindsSelfUpdateCheckPromise;
119360
+ }
119361
+ async handleDomindsVersionCheck() {
119362
+ const status = await this.ensureDomindsVersionCheck();
119363
+ if (status !== null && this.domindsVersionForceRestartPromise === null) {
119364
+ this.showDomindsVersionCheckResult(status);
119365
+ }
119366
+ }
119367
+ async handleDomindsVersionForceRestart() {
119368
+ if (this.domindsVersionForceRestartPromise !== null) {
119369
+ await this.domindsVersionForceRestartPromise;
119370
+ return;
119371
+ }
119372
+ this.domindsVersionForceRestartPromise = this.runDomindsVersionForceRestart();
119373
+ try {
119374
+ await this.domindsVersionForceRestartPromise;
119375
+ } finally {
119376
+ this.domindsVersionForceRestartPromise = null;
119377
+ }
119378
+ }
119379
+ async runDomindsVersionForceRestart() {
119380
+ const t2 = getUiStrings(this.uiLanguage);
119381
+ if (this.backendMode !== "production") return;
119382
+ const checkedStatus = await this.ensureDomindsVersionCheck();
119383
+ if (checkedStatus === null) return;
119384
+ try {
119385
+ if (checkedStatus.action === "install" || checkedStatus.action === "restart") {
119386
+ const choice2 = await this.promptDomindsUpdateRestartChoice(
119387
+ this.formatVersionCheckResult(t2.domindsVersionInstallAndRestartConfirm, checkedStatus)
119388
+ );
119389
+ if (choice2 === null) return;
119390
+ if (choice2 === "install_and_restart") {
119391
+ if (checkedStatus.action === "restart") {
119392
+ await this.requestDomindsVersionAction("restart");
119393
+ this.showInfo(t2.domindsVersionRestartInProgress);
119394
+ return;
119395
+ }
119396
+ const installStatus = await this.requestDomindsVersionAction("install");
119397
+ if (installStatus.busy === "installing") {
119398
+ this.showInfo(t2.domindsVersionInstallInProgress);
119399
+ await this.waitForDomindsInstallCompletionAndRestart();
119400
+ return;
119401
+ }
119402
+ if (installStatus.action === "restart") {
119403
+ await this.requestDomindsVersionAction("restart");
119404
+ this.showInfo(t2.domindsVersionRestartInProgress);
119405
+ return;
119406
+ }
119407
+ throw new Error(installStatus.message || t2.unknownError);
119408
+ }
119409
+ if (choice2 !== "restart_only") {
119410
+ const _exhaustive = choice2;
119411
+ throw new Error(`Unexpected Dominds update restart choice: ${String(_exhaustive)}`);
119412
+ }
119413
+ } else if (!window.confirm(this.formatVersionActionPrompt(t2.domindsVersionForceRestartConfirm, null))) {
119414
+ return;
119415
+ }
119416
+ await this.requestDomindsVersionAction("force_restart");
119417
+ this.showInfo(t2.domindsVersionRestartInProgress);
119418
+ } catch (error2) {
119419
+ const message = error2 instanceof Error ? error2.message : t2.unknownError;
119420
+ if (message !== _DomindsApp.AUTH_REJECTED_ERROR_MESSAGE) {
119421
+ this.showToast(`${t2.domindsVersionActionFailedPrefix}${message}`, "error");
119422
+ }
119322
119423
  }
119323
119424
  }
119425
+ promptDomindsUpdateRestartChoice(message) {
119426
+ const t2 = getUiStrings(this.uiLanguage);
119427
+ const root2 = this.shadowRoot;
119428
+ if (root2 === null) return Promise.resolve(null);
119429
+ return new Promise((resolve) => {
119430
+ const modal = document.createElement("div");
119431
+ modal.className = "dominds-modal dominds-version-choice-modal";
119432
+ const previouslyFocused = root2.activeElement;
119433
+ let settled = false;
119434
+ modal.innerHTML = `
119435
+ <div class="modal-backdrop"></div>
119436
+ <div class="modal-content" role="dialog" aria-modal="true" aria-labelledby="dominds-version-choice-title">
119437
+ <div class="modal-header">
119438
+ <h3 id="dominds-version-choice-title">${htmlExports.escapeHtml(t2.domindsVersionUpdateChoiceTitle)}</h3>
119439
+ <button type="button" class="modal-close" aria-label="${htmlExports.escapeHtml(t2.close)}">
119440
+ <span class="icon-mask app-icon-close" aria-hidden="true"></span>
119441
+ </button>
119442
+ </div>
119443
+ <div class="modal-body">
119444
+ <p class="modal-description">${htmlExports.escapeHtml(message)}</p>
119445
+ </div>
119446
+ <div class="modal-footer">
119447
+ <button type="button" class="btn btn-primary" data-choice="install_and_restart">${htmlExports.escapeHtml(
119448
+ t2.domindsVersionUpdateChoiceInstallButton
119449
+ )}</button>
119450
+ <button type="button" class="btn btn-secondary" data-choice="restart_only">${htmlExports.escapeHtml(
119451
+ t2.domindsVersionUpdateChoiceRestartButton
119452
+ )}</button>
119453
+ </div>
119454
+ </div>
119455
+ `;
119456
+ const close2 = (choice2) => {
119457
+ if (settled) return;
119458
+ settled = true;
119459
+ modal.remove();
119460
+ if (previouslyFocused instanceof HTMLElement) {
119461
+ previouslyFocused.focus();
119462
+ }
119463
+ resolve(choice2);
119464
+ };
119465
+ modal.addEventListener("click", (event) => {
119466
+ const target = event.target;
119467
+ if (!(target instanceof Element)) return;
119468
+ if (target.closest(".modal-close") || target.classList.contains("modal-backdrop")) {
119469
+ close2(null);
119470
+ return;
119471
+ }
119472
+ const choiceButton = target.closest("[data-choice]");
119473
+ if (!(choiceButton instanceof HTMLElement)) return;
119474
+ const choice2 = choiceButton.dataset.choice;
119475
+ if (choice2 === "install_and_restart" || choice2 === "restart_only") {
119476
+ close2(choice2);
119477
+ }
119478
+ });
119479
+ modal.addEventListener("keydown", (event) => {
119480
+ if (event.key === "Escape") {
119481
+ event.preventDefault();
119482
+ close2(null);
119483
+ }
119484
+ });
119485
+ root2.appendChild(modal);
119486
+ const firstButton = modal.querySelector('[data-choice="install_and_restart"]');
119487
+ if (firstButton instanceof HTMLButtonElement) {
119488
+ firstButton.focus();
119489
+ }
119490
+ });
119491
+ }
119492
+ async waitForDomindsInstallCompletionAndRestart() {
119493
+ const t2 = getUiStrings(this.uiLanguage);
119494
+ const deadlineMs = Date.now() + 15 * 60 * 1e3;
119495
+ while (Date.now() < deadlineMs) {
119496
+ await new Promise((resolve) => {
119497
+ window.setTimeout(resolve, 1500);
119498
+ });
119499
+ const resp = await this.apiClient.checkDomindsSelfUpdate();
119500
+ if (!resp.success) {
119501
+ if (resp.status === 401) {
119502
+ this.onAuthRejected("api");
119503
+ throw new Error(_DomindsApp.AUTH_REJECTED_ERROR_MESSAGE);
119504
+ }
119505
+ throw new Error(resp.error || t2.unknownError);
119506
+ }
119507
+ const nextStatus = resp.data?.update;
119508
+ if (!nextStatus) {
119509
+ throw new Error("Missing Dominds self-update check payload");
119510
+ }
119511
+ this.domindsSelfUpdate = nextStatus;
119512
+ this.updateDomindsVersionUi();
119513
+ if (nextStatus.busy === "installing") continue;
119514
+ if (nextStatus.reason === "install_failed") {
119515
+ throw new Error(nextStatus.message || t2.unknownError);
119516
+ }
119517
+ if (nextStatus.action === "restart") {
119518
+ await this.requestDomindsVersionAction("restart");
119519
+ this.showInfo(t2.domindsVersionRestartInProgress);
119520
+ return;
119521
+ }
119522
+ if (nextStatus.busy === "restarting") {
119523
+ this.showInfo(t2.domindsVersionRestartInProgress);
119524
+ return;
119525
+ }
119526
+ throw new Error(nextStatus.message || t2.unknownError);
119527
+ }
119528
+ throw new Error("Dominds install did not finish before the auto-restart wait timeout");
119529
+ }
119324
119530
  queueDomindsVersionClickAction() {
119325
119531
  if (this.domindsVersionClickTimer !== null) {
119326
119532
  window.clearTimeout(this.domindsVersionClickTimer);
@@ -122589,6 +122795,10 @@ ${formatUiLanguageOptionLabel({
122589
122795
  line-height: 1.5;
122590
122796
  }
122591
122797
 
122798
+ .dominds-version-choice-modal .modal-description {
122799
+ white-space: pre-line;
122800
+ }
122801
+
122592
122802
  .form-group {
122593
122803
  margin-bottom: 12px;
122594
122804
  }
@@ -124112,8 +124322,13 @@ ${content}`;
124112
124322
  }
124113
124323
  const versionBtn = target.closest("#dominds-version");
124114
124324
  if (versionBtn) {
124115
- if (evt2 instanceof MouseEvent && evt2.detail > 1) {
124325
+ if (evt2 instanceof MouseEvent && evt2.detail === 2) {
124326
+ this.cancelDomindsVersionClickAction();
124327
+ return;
124328
+ }
124329
+ if (evt2 instanceof MouseEvent && evt2.detail >= 3) {
124116
124330
  this.cancelDomindsVersionClickAction();
124331
+ void this.handleDomindsVersionForceRestart();
124117
124332
  return;
124118
124333
  }
124119
124334
  this.queueDomindsVersionClickAction();
@@ -125058,34 +125273,17 @@ ${content}`;
125058
125273
  }
125059
125274
  window.history.replaceState({}, "", target.toString());
125060
125275
  }
125061
- async copyTextToClipboard(text2) {
125062
- try {
125063
- if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
125064
- await navigator.clipboard.writeText(text2);
125065
- return true;
125066
- }
125067
- const ta = document.createElement("textarea");
125068
- ta.value = text2;
125069
- ta.setAttribute("readonly", "true");
125070
- ta.style.position = "fixed";
125071
- ta.style.left = "-9999px";
125072
- document.body.appendChild(ta);
125073
- ta.select();
125074
- const ok = document.execCommand("copy");
125075
- document.body.removeChild(ta);
125076
- return ok === true;
125077
- } catch {
125078
- return false;
125079
- }
125080
- }
125081
125276
  async copyLinkToClipboardWithToast(urlStr) {
125082
- const ok = await this.copyTextToClipboard(urlStr);
125083
125277
  const t2 = getUiStrings(this.uiLanguage);
125084
- if (ok) {
125085
- this.showToast(t2.linkCopiedToast, "info");
125086
- return;
125278
+ try {
125279
+ const result = await copyTextOrShowManualCopy(urlStr, null);
125280
+ if (result.kind === "copied") {
125281
+ this.showToast(t2.linkCopiedToast, "info");
125282
+ }
125283
+ } catch (error2) {
125284
+ console.warn("Manual link copy fallback failed", error2);
125285
+ this.showToast(t2.linkCopyFailedToast, "warning");
125087
125286
  }
125088
- this.showToast(t2.linkCopyFailedToast, "warning");
125089
125287
  }
125090
125288
  applyPendingQ4HSelectionFromDeepLink() {
125091
125289
  const questionId = this.pendingDeepLinkQ4HSelectionQuestionId;
@@ -128934,6 +129132,7 @@ ${content}`;
128934
129132
  // Resize handle removed: input is resized via a dedicated handle inside `dominds-q4h-input`.
128935
129133
  };
128936
129134
  _DomindsApp.DEFAULT_BROWSER_TITLE = "Dominds - DevOps Mindsets";
129135
+ _DomindsApp.AUTH_REJECTED_ERROR_MESSAGE = "Dominds API auth rejected";
128937
129136
  _DomindsApp.TOAST_HISTORY_STORAGE_KEY = "dominds-toast-history-v2";
128938
129137
  _DomindsApp.TOAST_HISTORY_MAX = 200;
128939
129138
  _DomindsApp.UNIFIED_TIMESTAMP_PATTERN = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/;
@@ -129912,7 +130111,7 @@ class DomindsSetup extends HTMLElement {
129912
130111
  }
129913
130112
  const copyFileBtn = this.shadowRoot.querySelector("#file-modal-copy");
129914
130113
  if (copyFileBtn instanceof HTMLButtonElement) {
129915
- copyFileBtn.onclick = () => void this.copyFileModalRaw();
130114
+ copyFileBtn.onclick = () => void this.copyFileModalRaw(copyFileBtn);
129916
130115
  }
129917
130116
  this.renderFileModalCodeBlock();
129918
130117
  }
@@ -129998,13 +130197,14 @@ class DomindsSetup extends HTMLElement {
129998
130197
  this.render();
129999
130198
  queueMicrotask(() => this.renderFileModalCodeBlock());
130000
130199
  }
130001
- async copyFileModalRaw() {
130200
+ async copyFileModalRaw(restoreFocusTo = null) {
130002
130201
  if (this.fileModal.kind !== "ready") return;
130003
130202
  const raw = this.fileModal.response.raw;
130004
130203
  try {
130005
- await navigator.clipboard.writeText(raw);
130006
- } catch {
130007
- window.prompt("Copy the content below:", raw);
130204
+ await copyTextOrShowManualCopy(raw, restoreFocusTo);
130205
+ } catch (error2) {
130206
+ console.error("Copy file modal raw failed:", error2);
130207
+ alert("复制失败 / Copy failed.");
130008
130208
  }
130009
130209
  }
130010
130210
  buildTeamYamlSnippet() {
@@ -130971,4 +131171,4 @@ export {
130971
131171
  purify as y,
130972
131172
  clear$2 as z
130973
131173
  };
130974
- //# sourceMappingURL=index-BOO_zFrI.js.map
131174
+ //# sourceMappingURL=index-C_PzQ5W5.js.map