dominds 1.5.2 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/apps/configuration-file.js +21 -0
  2. package/dist/apps/enabled-apps.js +3 -53
  3. package/dist/apps/local-package-root.js +41 -0
  4. package/dist/apps/runtime.js +10 -0
  5. package/dist/apps-host/client.js +124 -1
  6. package/dist/apps-host/host.js +53 -0
  7. package/dist/apps-host/ipc-types.js +61 -1
  8. package/dist/cli/install.js +41 -8
  9. package/dist/docs/app-constitution.md +22 -0
  10. package/dist/docs/app-constitution.zh.md +22 -0
  11. package/dist/llm/kernel-driver/runtime.js +112 -22
  12. package/dist/minds/load.js +20 -2
  13. package/dist/minds/system-prompt.js +4 -0
  14. package/dist/priming.js +2 -26
  15. package/dist/server/websocket-handler.js +5 -0
  16. package/dist/server.js +5 -2
  17. package/dist/shared/markdown-frontmatter.js +44 -0
  18. package/dist/shared/team_mgmt-manual.js +9 -0
  19. package/dist/skills/load.js +281 -0
  20. package/dist/static/assets/{_basePickBy-B-A5XrWM.js → _basePickBy-CFicLWwx.js} +3 -3
  21. package/dist/static/assets/{_basePickBy-B-A5XrWM.js.map → _basePickBy-CFicLWwx.js.map} +1 -1
  22. package/dist/static/assets/{_baseUniq-BANLb0cu.js → _baseUniq-DQTl8GFk.js} +2 -2
  23. package/dist/static/assets/{_baseUniq-BANLb0cu.js.map → _baseUniq-DQTl8GFk.js.map} +1 -1
  24. package/dist/static/assets/{arc-CYZYnojf.js → arc-Bc5lgJ6S.js} +2 -2
  25. package/dist/static/assets/{arc-CYZYnojf.js.map → arc-Bc5lgJ6S.js.map} +1 -1
  26. package/dist/static/assets/{architectureDiagram-VXUJARFQ-Cxf4pmYG.js → architectureDiagram-VXUJARFQ-DygUo6iw.js} +7 -7
  27. package/dist/static/assets/{architectureDiagram-VXUJARFQ-Cxf4pmYG.js.map → architectureDiagram-VXUJARFQ-DygUo6iw.js.map} +1 -1
  28. package/dist/static/assets/{blockDiagram-VD42YOAC-wvs0G30c.js → blockDiagram-VD42YOAC-0r3VY3gz.js} +7 -7
  29. package/dist/static/assets/{blockDiagram-VD42YOAC-wvs0G30c.js.map → blockDiagram-VD42YOAC-0r3VY3gz.js.map} +1 -1
  30. package/dist/static/assets/{c4Diagram-YG6GDRKO-BKFNexn4.js → c4Diagram-YG6GDRKO-pQD_vC1A.js} +3 -3
  31. package/dist/static/assets/{c4Diagram-YG6GDRKO-BKFNexn4.js.map → c4Diagram-YG6GDRKO-pQD_vC1A.js.map} +1 -1
  32. package/dist/static/assets/{channel-_1qpxJWy.js → channel-CHWYhNRt.js} +2 -2
  33. package/dist/static/assets/{channel-_1qpxJWy.js.map → channel-CHWYhNRt.js.map} +1 -1
  34. package/dist/static/assets/{chunk-4BX2VUAB-BIdC0phm.js → chunk-4BX2VUAB-K89xP4ET.js} +2 -2
  35. package/dist/static/assets/{chunk-4BX2VUAB-BIdC0phm.js.map → chunk-4BX2VUAB-K89xP4ET.js.map} +1 -1
  36. package/dist/static/assets/{chunk-55IACEB6-BNvGenQ9.js → chunk-55IACEB6-DHAy4AJ-.js} +2 -2
  37. package/dist/static/assets/{chunk-55IACEB6-BNvGenQ9.js.map → chunk-55IACEB6-DHAy4AJ-.js.map} +1 -1
  38. package/dist/static/assets/{chunk-B4BG7PRW-jmf-1Wv7.js → chunk-B4BG7PRW-BrImUg93.js} +5 -5
  39. package/dist/static/assets/{chunk-B4BG7PRW-jmf-1Wv7.js.map → chunk-B4BG7PRW-BrImUg93.js.map} +1 -1
  40. package/dist/static/assets/{chunk-DI55MBZ5-nmEmcikR.js → chunk-DI55MBZ5-_jVBMKQY.js} +4 -4
  41. package/dist/static/assets/{chunk-DI55MBZ5-nmEmcikR.js.map → chunk-DI55MBZ5-_jVBMKQY.js.map} +1 -1
  42. package/dist/static/assets/{chunk-FMBD7UC4-kGysaq_j.js → chunk-FMBD7UC4-BmGs24Z_.js} +2 -2
  43. package/dist/static/assets/{chunk-FMBD7UC4-kGysaq_j.js.map → chunk-FMBD7UC4-BmGs24Z_.js.map} +1 -1
  44. package/dist/static/assets/{chunk-QN33PNHL-8JwMLFIJ.js → chunk-QN33PNHL-Bu8ZzYdl.js} +2 -2
  45. package/dist/static/assets/{chunk-QN33PNHL-8JwMLFIJ.js.map → chunk-QN33PNHL-Bu8ZzYdl.js.map} +1 -1
  46. package/dist/static/assets/{chunk-QZHKN3VN-DZleEj00.js → chunk-QZHKN3VN-D4fM_-kX.js} +2 -2
  47. package/dist/static/assets/{chunk-QZHKN3VN-DZleEj00.js.map → chunk-QZHKN3VN-D4fM_-kX.js.map} +1 -1
  48. package/dist/static/assets/{chunk-TZMSLE5B-CXxl_uqH.js → chunk-TZMSLE5B-xK6Lo8h6.js} +2 -2
  49. package/dist/static/assets/{chunk-TZMSLE5B-CXxl_uqH.js.map → chunk-TZMSLE5B-xK6Lo8h6.js.map} +1 -1
  50. package/dist/static/assets/{classDiagram-2ON5EDUG-C-7R0QB6.js → classDiagram-2ON5EDUG-Bn36uVsZ.js} +6 -6
  51. package/dist/static/assets/{classDiagram-2ON5EDUG-C-7R0QB6.js.map → classDiagram-2ON5EDUG-Bn36uVsZ.js.map} +1 -1
  52. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-C-7R0QB6.js → classDiagram-v2-WZHVMYZB-Bn36uVsZ.js} +6 -6
  53. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-C-7R0QB6.js.map → classDiagram-v2-WZHVMYZB-Bn36uVsZ.js.map} +1 -1
  54. package/dist/static/assets/{clone-BwOKYSj8.js → clone-BUW9sxY1.js} +2 -2
  55. package/dist/static/assets/{clone-BwOKYSj8.js.map → clone-BUW9sxY1.js.map} +1 -1
  56. package/dist/static/assets/{cose-bilkent-S5V4N54A-BCBalM7p.js → cose-bilkent-S5V4N54A-BMTYUmA4.js} +2 -2
  57. package/dist/static/assets/{cose-bilkent-S5V4N54A-BCBalM7p.js.map → cose-bilkent-S5V4N54A-BMTYUmA4.js.map} +1 -1
  58. package/dist/static/assets/{dagre-6UL2VRFP-uV2ekQoj.js → dagre-6UL2VRFP-p-0HOF0Q.js} +7 -7
  59. package/dist/static/assets/{dagre-6UL2VRFP-uV2ekQoj.js.map → dagre-6UL2VRFP-p-0HOF0Q.js.map} +1 -1
  60. package/dist/static/assets/{diagram-PSM6KHXK-D-ZMog1-.js → diagram-PSM6KHXK-CfpXvSJR.js} +8 -8
  61. package/dist/static/assets/{diagram-PSM6KHXK-D-ZMog1-.js.map → diagram-PSM6KHXK-CfpXvSJR.js.map} +1 -1
  62. package/dist/static/assets/{diagram-QEK2KX5R-BThSELUH.js → diagram-QEK2KX5R-3T4XwT5a.js} +7 -7
  63. package/dist/static/assets/{diagram-QEK2KX5R-BThSELUH.js.map → diagram-QEK2KX5R-3T4XwT5a.js.map} +1 -1
  64. package/dist/static/assets/{diagram-S2PKOQOG-Di-YN5cd.js → diagram-S2PKOQOG-CPHGTwGV.js} +7 -7
  65. package/dist/static/assets/{diagram-S2PKOQOG-Di-YN5cd.js.map → diagram-S2PKOQOG-CPHGTwGV.js.map} +1 -1
  66. package/dist/static/assets/{erDiagram-Q2GNP2WA-lBZ9DITn.js → erDiagram-Q2GNP2WA-Bj7OGj2H.js} +5 -5
  67. package/dist/static/assets/{erDiagram-Q2GNP2WA-lBZ9DITn.js.map → erDiagram-Q2GNP2WA-Bj7OGj2H.js.map} +1 -1
  68. package/dist/static/assets/{flowDiagram-NV44I4VS-C_60PNQR.js → flowDiagram-NV44I4VS-DOGilHpN.js} +6 -6
  69. package/dist/static/assets/{flowDiagram-NV44I4VS-C_60PNQR.js.map → flowDiagram-NV44I4VS-DOGilHpN.js.map} +1 -1
  70. package/dist/static/assets/{ganttDiagram-JELNMOA3-Dvqq-VHJ.js → ganttDiagram-JELNMOA3-585cSoqi.js} +3 -3
  71. package/dist/static/assets/{ganttDiagram-JELNMOA3-Dvqq-VHJ.js.map → ganttDiagram-JELNMOA3-585cSoqi.js.map} +1 -1
  72. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-BTj8orRe.js → gitGraphDiagram-V2S2FVAM-gmTvHjpH.js} +8 -8
  73. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-BTj8orRe.js.map → gitGraphDiagram-V2S2FVAM-gmTvHjpH.js.map} +1 -1
  74. package/dist/static/assets/{graph-BqCzR2Nl.js → graph-Dtj8yklH.js} +3 -3
  75. package/dist/static/assets/{graph-BqCzR2Nl.js.map → graph-Dtj8yklH.js.map} +1 -1
  76. package/dist/static/assets/{index-DrTqAfFy.js → index-BvNwR1gS.js} +442 -246
  77. package/dist/static/assets/index-BvNwR1gS.js.map +1 -0
  78. package/dist/static/assets/{infoDiagram-HS3SLOUP-DlC6wsrv.js → infoDiagram-HS3SLOUP-BVq8aa78.js} +6 -6
  79. package/dist/static/assets/{infoDiagram-HS3SLOUP-DlC6wsrv.js.map → infoDiagram-HS3SLOUP-BVq8aa78.js.map} +1 -1
  80. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Dg_RgtQX.js → journeyDiagram-XKPGCS4Q-BY5Lcmin.js} +5 -5
  81. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Dg_RgtQX.js.map → journeyDiagram-XKPGCS4Q-BY5Lcmin.js.map} +1 -1
  82. package/dist/static/assets/{kanban-definition-3W4ZIXB7-DuGS3lId.js → kanban-definition-3W4ZIXB7-zEbpyocs.js} +3 -3
  83. package/dist/static/assets/{kanban-definition-3W4ZIXB7-DuGS3lId.js.map → kanban-definition-3W4ZIXB7-zEbpyocs.js.map} +1 -1
  84. package/dist/static/assets/{layout-FDz2bstZ.js → layout-Bst5DR3z.js} +5 -5
  85. package/dist/static/assets/{layout-FDz2bstZ.js.map → layout-Bst5DR3z.js.map} +1 -1
  86. package/dist/static/assets/{linear-CzsdvPGb.js → linear-TSyBw4eX.js} +2 -2
  87. package/dist/static/assets/{linear-CzsdvPGb.js.map → linear-TSyBw4eX.js.map} +1 -1
  88. package/dist/static/assets/{mindmap-definition-VGOIOE7T-WsAF5UNp.js → mindmap-definition-VGOIOE7T-I6ArhFTa.js} +4 -4
  89. package/dist/static/assets/{mindmap-definition-VGOIOE7T-WsAF5UNp.js.map → mindmap-definition-VGOIOE7T-I6ArhFTa.js.map} +1 -1
  90. package/dist/static/assets/{pieDiagram-ADFJNKIX-DJpRJ5ei.js → pieDiagram-ADFJNKIX-DdaOCLgH.js} +8 -8
  91. package/dist/static/assets/{pieDiagram-ADFJNKIX-DJpRJ5ei.js.map → pieDiagram-ADFJNKIX-DdaOCLgH.js.map} +1 -1
  92. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-CMyIzTkY.js → quadrantDiagram-AYHSOK5B-Bp82x7cE.js} +3 -3
  93. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-CMyIzTkY.js.map → quadrantDiagram-AYHSOK5B-Bp82x7cE.js.map} +1 -1
  94. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-D_yqVXGu.js → requirementDiagram-UZGBJVZJ-eSQPrL7r.js} +4 -4
  95. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-D_yqVXGu.js.map → requirementDiagram-UZGBJVZJ-eSQPrL7r.js.map} +1 -1
  96. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-D4-cF724.js → sankeyDiagram-TZEHDZUN-DbMClHuR.js} +2 -2
  97. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-D4-cF724.js.map → sankeyDiagram-TZEHDZUN-DbMClHuR.js.map} +1 -1
  98. package/dist/static/assets/{sequenceDiagram-WL72ISMW-B7J3gWYN.js → sequenceDiagram-WL72ISMW-CxQHJ2QR.js} +4 -4
  99. package/dist/static/assets/{sequenceDiagram-WL72ISMW-B7J3gWYN.js.map → sequenceDiagram-WL72ISMW-CxQHJ2QR.js.map} +1 -1
  100. package/dist/static/assets/{stateDiagram-FKZM4ZOC-DwEYYCcu.js → stateDiagram-FKZM4ZOC-BrJWwcfT.js} +9 -9
  101. package/dist/static/assets/{stateDiagram-FKZM4ZOC-DwEYYCcu.js.map → stateDiagram-FKZM4ZOC-BrJWwcfT.js.map} +1 -1
  102. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-D4LOOQV5.js → stateDiagram-v2-4FDKWEC3-AOoa1rfD.js} +5 -5
  103. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-D4LOOQV5.js.map → stateDiagram-v2-4FDKWEC3-AOoa1rfD.js.map} +1 -1
  104. package/dist/static/assets/{timeline-definition-IT6M3QCI-CyG-TJ_A.js → timeline-definition-IT6M3QCI-CGDQb8vq.js} +3 -3
  105. package/dist/static/assets/{timeline-definition-IT6M3QCI-CyG-TJ_A.js.map → timeline-definition-IT6M3QCI-CGDQb8vq.js.map} +1 -1
  106. package/dist/static/assets/{treemap-GDKQZRPO-yY4GiKmU.js → treemap-GDKQZRPO-DUkGxSl_.js} +5 -5
  107. package/dist/static/assets/{treemap-GDKQZRPO-yY4GiKmU.js.map → treemap-GDKQZRPO-DUkGxSl_.js.map} +1 -1
  108. package/dist/static/assets/{xychartDiagram-PRI3JC2R-5TYN_q15.js → xychartDiagram-PRI3JC2R-DhC3pydn.js} +3 -3
  109. package/dist/static/assets/{xychartDiagram-PRI3JC2R-5TYN_q15.js.map → xychartDiagram-PRI3JC2R-DhC3pydn.js.map} +1 -1
  110. package/dist/static/index.html +1 -1
  111. package/dist/team-config-updates.js +26 -0
  112. package/dist/team.js +23 -5
  113. package/dist/tools/team_mgmt.js +137 -0
  114. package/dist/tools/toolset-manual.js +12 -3
  115. package/package.json +1 -1
  116. package/dist/static/assets/index-DrTqAfFy.js.map +0 -1
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dagre-6UL2VRFP-uV2ekQoj.js","assets/graph-BqCzR2Nl.js","assets/_baseUniq-BANLb0cu.js","assets/layout-FDz2bstZ.js","assets/_basePickBy-B-A5XrWM.js","assets/clone-BwOKYSj8.js","assets/cose-bilkent-S5V4N54A-BCBalM7p.js","assets/cytoscape.esm-Bm8DJGmZ.js","assets/c4Diagram-YG6GDRKO-BKFNexn4.js","assets/chunk-TZMSLE5B-CXxl_uqH.js","assets/flowDiagram-NV44I4VS-C_60PNQR.js","assets/chunk-FMBD7UC4-kGysaq_j.js","assets/chunk-55IACEB6-BNvGenQ9.js","assets/chunk-QN33PNHL-8JwMLFIJ.js","assets/channel-_1qpxJWy.js","assets/erDiagram-Q2GNP2WA-lBZ9DITn.js","assets/gitGraphDiagram-V2S2FVAM-BTj8orRe.js","assets/chunk-4BX2VUAB-BIdC0phm.js","assets/chunk-QZHKN3VN-DZleEj00.js","assets/treemap-GDKQZRPO-yY4GiKmU.js","assets/ganttDiagram-JELNMOA3-Dvqq-VHJ.js","assets/linear-CzsdvPGb.js","assets/init-ZxktEp_H.js","assets/defaultLocale-B2RvLBDe.js","assets/infoDiagram-HS3SLOUP-DlC6wsrv.js","assets/pieDiagram-ADFJNKIX-DJpRJ5ei.js","assets/arc-CYZYnojf.js","assets/ordinal-CxptdPJm.js","assets/quadrantDiagram-AYHSOK5B-CMyIzTkY.js","assets/xychartDiagram-PRI3JC2R-5TYN_q15.js","assets/requirementDiagram-UZGBJVZJ-D_yqVXGu.js","assets/sequenceDiagram-WL72ISMW-B7J3gWYN.js","assets/classDiagram-2ON5EDUG-C-7R0QB6.js","assets/chunk-B4BG7PRW-jmf-1Wv7.js","assets/classDiagram-v2-WZHVMYZB-C-7R0QB6.js","assets/stateDiagram-FKZM4ZOC-DwEYYCcu.js","assets/chunk-DI55MBZ5-nmEmcikR.js","assets/stateDiagram-v2-4FDKWEC3-D4LOOQV5.js","assets/journeyDiagram-XKPGCS4Q-Dg_RgtQX.js","assets/timeline-definition-IT6M3QCI-CyG-TJ_A.js","assets/mindmap-definition-VGOIOE7T-WsAF5UNp.js","assets/kanban-definition-3W4ZIXB7-DuGS3lId.js","assets/sankeyDiagram-TZEHDZUN-D4-cF724.js","assets/diagram-S2PKOQOG-Di-YN5cd.js","assets/diagram-QEK2KX5R-BThSELUH.js","assets/blockDiagram-VD42YOAC-wvs0G30c.js","assets/architectureDiagram-VXUJARFQ-Cxf4pmYG.js","assets/diagram-PSM6KHXK-D-ZMog1-.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dagre-6UL2VRFP-p-0HOF0Q.js","assets/graph-Dtj8yklH.js","assets/_baseUniq-DQTl8GFk.js","assets/layout-Bst5DR3z.js","assets/_basePickBy-CFicLWwx.js","assets/clone-BUW9sxY1.js","assets/cose-bilkent-S5V4N54A-BMTYUmA4.js","assets/cytoscape.esm-Bm8DJGmZ.js","assets/c4Diagram-YG6GDRKO-pQD_vC1A.js","assets/chunk-TZMSLE5B-xK6Lo8h6.js","assets/flowDiagram-NV44I4VS-DOGilHpN.js","assets/chunk-FMBD7UC4-BmGs24Z_.js","assets/chunk-55IACEB6-DHAy4AJ-.js","assets/chunk-QN33PNHL-Bu8ZzYdl.js","assets/channel-CHWYhNRt.js","assets/erDiagram-Q2GNP2WA-Bj7OGj2H.js","assets/gitGraphDiagram-V2S2FVAM-gmTvHjpH.js","assets/chunk-4BX2VUAB-K89xP4ET.js","assets/chunk-QZHKN3VN-D4fM_-kX.js","assets/treemap-GDKQZRPO-DUkGxSl_.js","assets/ganttDiagram-JELNMOA3-585cSoqi.js","assets/linear-TSyBw4eX.js","assets/init-ZxktEp_H.js","assets/defaultLocale-B2RvLBDe.js","assets/infoDiagram-HS3SLOUP-BVq8aa78.js","assets/pieDiagram-ADFJNKIX-DdaOCLgH.js","assets/arc-Bc5lgJ6S.js","assets/ordinal-CxptdPJm.js","assets/quadrantDiagram-AYHSOK5B-Bp82x7cE.js","assets/xychartDiagram-PRI3JC2R-DhC3pydn.js","assets/requirementDiagram-UZGBJVZJ-eSQPrL7r.js","assets/sequenceDiagram-WL72ISMW-CxQHJ2QR.js","assets/classDiagram-2ON5EDUG-Bn36uVsZ.js","assets/chunk-B4BG7PRW-BrImUg93.js","assets/classDiagram-v2-WZHVMYZB-Bn36uVsZ.js","assets/stateDiagram-FKZM4ZOC-BrJWwcfT.js","assets/chunk-DI55MBZ5-_jVBMKQY.js","assets/stateDiagram-v2-4FDKWEC3-AOoa1rfD.js","assets/journeyDiagram-XKPGCS4Q-BY5Lcmin.js","assets/timeline-definition-IT6M3QCI-CGDQb8vq.js","assets/mindmap-definition-VGOIOE7T-I6ArhFTa.js","assets/kanban-definition-3W4ZIXB7-zEbpyocs.js","assets/sankeyDiagram-TZEHDZUN-DbMClHuR.js","assets/diagram-S2PKOQOG-CPHGTwGV.js","assets/diagram-QEK2KX5R-3T4XwT5a.js","assets/blockDiagram-VD42YOAC-0r3VY3gz.js","assets/architectureDiagram-VXUJARFQ-DygUo6iw.js","assets/diagram-PSM6KHXK-CfpXvSJR.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);
@@ -257,6 +257,13 @@ function getUiStrings(language) {
257
257
  emergencyStop: "紧急停止",
258
258
  resumeAll: "全部继续",
259
259
  continueLabel: "继续",
260
+ retryPanelTitleRetrying: "正在重试",
261
+ retryPanelAttemptPrefix: "已重试 ",
262
+ retryPanelAttemptConnector: " / ",
263
+ retryPanelAttemptSuffix: " 次",
264
+ retryPanelCountdownPrefix: "下次重试倒计时 ",
265
+ retryPanelRunningAttemptPrefix: "正在进行第 ",
266
+ retryPanelRunningAttemptSuffix: " 次重试…",
260
267
  stoppedByYou: "已由你停止",
261
268
  stoppedByEmergencyStop: "已被紧急停止终止",
262
269
  interruptedByServerRestart: "因服务器重启而中断",
@@ -579,6 +586,13 @@ function getUiStrings(language) {
579
586
  emergencyStop: "Emergency stop",
580
587
  resumeAll: "Resume all",
581
588
  continueLabel: "Continue",
589
+ retryPanelTitleRetrying: "Retrying",
590
+ retryPanelAttemptPrefix: "Attempt ",
591
+ retryPanelAttemptConnector: " / ",
592
+ retryPanelAttemptSuffix: "",
593
+ retryPanelCountdownPrefix: "Next retry in ",
594
+ retryPanelRunningAttemptPrefix: "Running retry attempt ",
595
+ retryPanelRunningAttemptSuffix: "...",
582
596
  stoppedByYou: "Stopped by you",
583
597
  stoppedByEmergencyStop: "Stopped by emergency stop",
584
598
  interruptedByServerRestart: "Interrupted by server restart",
@@ -97268,12 +97282,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
97268
97282
  registerLayoutLoaders([
97269
97283
  {
97270
97284
  name: "dagre",
97271
- loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./dagre-6UL2VRFP-uV2ekQoj.js"), true ? __vite__mapDeps([0,1,2,3,4,5]) : void 0), "loader")
97285
+ loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./dagre-6UL2VRFP-p-0HOF0Q.js"), true ? __vite__mapDeps([0,1,2,3,4,5]) : void 0), "loader")
97272
97286
  },
97273
97287
  ...[
97274
97288
  {
97275
97289
  name: "cose-bilkent",
97276
- loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./cose-bilkent-S5V4N54A-BCBalM7p.js"), true ? __vite__mapDeps([6,7]) : void 0), "loader")
97290
+ loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./cose-bilkent-S5V4N54A-BMTYUmA4.js"), true ? __vite__mapDeps([6,7]) : void 0), "loader")
97277
97291
  }
97278
97292
  ]
97279
97293
  ]);
@@ -97713,7 +97727,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
97713
97727
  }, "detector");
97714
97728
  var loader = /* @__PURE__ */ __name(async () => {
97715
97729
  const { diagram: diagram2 } = await __vitePreload(async () => {
97716
- const { diagram: diagram22 } = await import("./c4Diagram-YG6GDRKO-BKFNexn4.js");
97730
+ const { diagram: diagram22 } = await import("./c4Diagram-YG6GDRKO-pQD_vC1A.js");
97717
97731
  return { diagram: diagram22 };
97718
97732
  }, true ? __vite__mapDeps([8,9]) : void 0);
97719
97733
  return { id, diagram: diagram2 };
@@ -97733,7 +97747,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
97733
97747
  }, "detector");
97734
97748
  var loader2 = /* @__PURE__ */ __name(async () => {
97735
97749
  const { diagram: diagram2 } = await __vitePreload(async () => {
97736
- const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-C_60PNQR.js");
97750
+ const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-DOGilHpN.js");
97737
97751
  return { diagram: diagram22 };
97738
97752
  }, true ? __vite__mapDeps([10,11,12,13,14]) : void 0);
97739
97753
  return { id: id2, diagram: diagram2 };
@@ -97759,7 +97773,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
97759
97773
  }, "detector");
97760
97774
  var loader3 = /* @__PURE__ */ __name(async () => {
97761
97775
  const { diagram: diagram2 } = await __vitePreload(async () => {
97762
- const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-C_60PNQR.js");
97776
+ const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-DOGilHpN.js");
97763
97777
  return { diagram: diagram22 };
97764
97778
  }, true ? __vite__mapDeps([10,11,12,13,14]) : void 0);
97765
97779
  return { id: id3, diagram: diagram2 };
@@ -97776,7 +97790,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
97776
97790
  }, "detector");
97777
97791
  var loader4 = /* @__PURE__ */ __name(async () => {
97778
97792
  const { diagram: diagram2 } = await __vitePreload(async () => {
97779
- const { diagram: diagram22 } = await import("./erDiagram-Q2GNP2WA-lBZ9DITn.js");
97793
+ const { diagram: diagram22 } = await import("./erDiagram-Q2GNP2WA-Bj7OGj2H.js");
97780
97794
  return { diagram: diagram22 };
97781
97795
  }, true ? __vite__mapDeps([15,12,13,14]) : void 0);
97782
97796
  return { id: id4, diagram: diagram2 };
@@ -97793,7 +97807,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
97793
97807
  }, "detector");
97794
97808
  var loader5 = /* @__PURE__ */ __name(async () => {
97795
97809
  const { diagram: diagram2 } = await __vitePreload(async () => {
97796
- const { diagram: diagram22 } = await import("./gitGraphDiagram-V2S2FVAM-BTj8orRe.js");
97810
+ const { diagram: diagram22 } = await import("./gitGraphDiagram-V2S2FVAM-gmTvHjpH.js");
97797
97811
  return { diagram: diagram22 };
97798
97812
  }, true ? __vite__mapDeps([16,17,18,19,2,4,5]) : void 0);
97799
97813
  return { id: id5, diagram: diagram2 };
@@ -97810,7 +97824,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
97810
97824
  }, "detector");
97811
97825
  var loader6 = /* @__PURE__ */ __name(async () => {
97812
97826
  const { diagram: diagram2 } = await __vitePreload(async () => {
97813
- const { diagram: diagram22 } = await import("./ganttDiagram-JELNMOA3-Dvqq-VHJ.js");
97827
+ const { diagram: diagram22 } = await import("./ganttDiagram-JELNMOA3-585cSoqi.js");
97814
97828
  return { diagram: diagram22 };
97815
97829
  }, true ? __vite__mapDeps([20,21,22,23]) : void 0);
97816
97830
  return { id: id6, diagram: diagram2 };
@@ -97827,7 +97841,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
97827
97841
  }, "detector");
97828
97842
  var loader7 = /* @__PURE__ */ __name(async () => {
97829
97843
  const { diagram: diagram2 } = await __vitePreload(async () => {
97830
- const { diagram: diagram22 } = await import("./infoDiagram-HS3SLOUP-DlC6wsrv.js");
97844
+ const { diagram: diagram22 } = await import("./infoDiagram-HS3SLOUP-BVq8aa78.js");
97831
97845
  return { diagram: diagram22 };
97832
97846
  }, true ? __vite__mapDeps([24,19,2,4,5]) : void 0);
97833
97847
  return { id: id7, diagram: diagram2 };
@@ -97843,7 +97857,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
97843
97857
  }, "detector");
97844
97858
  var loader8 = /* @__PURE__ */ __name(async () => {
97845
97859
  const { diagram: diagram2 } = await __vitePreload(async () => {
97846
- const { diagram: diagram22 } = await import("./pieDiagram-ADFJNKIX-DJpRJ5ei.js");
97860
+ const { diagram: diagram22 } = await import("./pieDiagram-ADFJNKIX-DdaOCLgH.js");
97847
97861
  return { diagram: diagram22 };
97848
97862
  }, true ? __vite__mapDeps([25,17,19,2,4,5,26,27,22]) : void 0);
97849
97863
  return { id: id8, diagram: diagram2 };
@@ -97859,7 +97873,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
97859
97873
  }, "detector");
97860
97874
  var loader9 = /* @__PURE__ */ __name(async () => {
97861
97875
  const { diagram: diagram2 } = await __vitePreload(async () => {
97862
- const { diagram: diagram22 } = await import("./quadrantDiagram-AYHSOK5B-CMyIzTkY.js");
97876
+ const { diagram: diagram22 } = await import("./quadrantDiagram-AYHSOK5B-Bp82x7cE.js");
97863
97877
  return { diagram: diagram22 };
97864
97878
  }, true ? __vite__mapDeps([28,21,22,23]) : void 0);
97865
97879
  return { id: id9, diagram: diagram2 };
@@ -97876,7 +97890,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
97876
97890
  }, "detector");
97877
97891
  var loader10 = /* @__PURE__ */ __name(async () => {
97878
97892
  const { diagram: diagram2 } = await __vitePreload(async () => {
97879
- const { diagram: diagram22 } = await import("./xychartDiagram-PRI3JC2R-5TYN_q15.js");
97893
+ const { diagram: diagram22 } = await import("./xychartDiagram-PRI3JC2R-DhC3pydn.js");
97880
97894
  return { diagram: diagram22 };
97881
97895
  }, true ? __vite__mapDeps([29,22,27,21,23]) : void 0);
97882
97896
  return { id: id10, diagram: diagram2 };
@@ -97893,7 +97907,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
97893
97907
  }, "detector");
97894
97908
  var loader11 = /* @__PURE__ */ __name(async () => {
97895
97909
  const { diagram: diagram2 } = await __vitePreload(async () => {
97896
- const { diagram: diagram22 } = await import("./requirementDiagram-UZGBJVZJ-D_yqVXGu.js");
97910
+ const { diagram: diagram22 } = await import("./requirementDiagram-UZGBJVZJ-eSQPrL7r.js");
97897
97911
  return { diagram: diagram22 };
97898
97912
  }, true ? __vite__mapDeps([30,12,13]) : void 0);
97899
97913
  return { id: id11, diagram: diagram2 };
@@ -97910,7 +97924,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
97910
97924
  }, "detector");
97911
97925
  var loader12 = /* @__PURE__ */ __name(async () => {
97912
97926
  const { diagram: diagram2 } = await __vitePreload(async () => {
97913
- const { diagram: diagram22 } = await import("./sequenceDiagram-WL72ISMW-B7J3gWYN.js");
97927
+ const { diagram: diagram22 } = await import("./sequenceDiagram-WL72ISMW-CxQHJ2QR.js");
97914
97928
  return { diagram: diagram22 };
97915
97929
  }, true ? __vite__mapDeps([31,9,18]) : void 0);
97916
97930
  return { id: id12, diagram: diagram2 };
@@ -97930,7 +97944,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
97930
97944
  }, "detector");
97931
97945
  var loader13 = /* @__PURE__ */ __name(async () => {
97932
97946
  const { diagram: diagram2 } = await __vitePreload(async () => {
97933
- const { diagram: diagram22 } = await import("./classDiagram-2ON5EDUG-C-7R0QB6.js");
97947
+ const { diagram: diagram22 } = await import("./classDiagram-2ON5EDUG-Bn36uVsZ.js");
97934
97948
  return { diagram: diagram22 };
97935
97949
  }, true ? __vite__mapDeps([32,33,11,12,13]) : void 0);
97936
97950
  return { id: id13, diagram: diagram2 };
@@ -97950,7 +97964,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
97950
97964
  }, "detector");
97951
97965
  var loader14 = /* @__PURE__ */ __name(async () => {
97952
97966
  const { diagram: diagram2 } = await __vitePreload(async () => {
97953
- const { diagram: diagram22 } = await import("./classDiagram-v2-WZHVMYZB-C-7R0QB6.js");
97967
+ const { diagram: diagram22 } = await import("./classDiagram-v2-WZHVMYZB-Bn36uVsZ.js");
97954
97968
  return { diagram: diagram22 };
97955
97969
  }, true ? __vite__mapDeps([34,33,11,12,13]) : void 0);
97956
97970
  return { id: id14, diagram: diagram2 };
@@ -97970,7 +97984,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
97970
97984
  }, "detector");
97971
97985
  var loader15 = /* @__PURE__ */ __name(async () => {
97972
97986
  const { diagram: diagram2 } = await __vitePreload(async () => {
97973
- const { diagram: diagram22 } = await import("./stateDiagram-FKZM4ZOC-DwEYYCcu.js");
97987
+ const { diagram: diagram22 } = await import("./stateDiagram-FKZM4ZOC-BrJWwcfT.js");
97974
97988
  return { diagram: diagram22 };
97975
97989
  }, true ? __vite__mapDeps([35,36,12,13,1,2,3,4]) : void 0);
97976
97990
  return { id: id15, diagram: diagram2 };
@@ -97993,7 +98007,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
97993
98007
  }, "detector");
97994
98008
  var loader16 = /* @__PURE__ */ __name(async () => {
97995
98009
  const { diagram: diagram2 } = await __vitePreload(async () => {
97996
- const { diagram: diagram22 } = await import("./stateDiagram-v2-4FDKWEC3-D4LOOQV5.js");
98010
+ const { diagram: diagram22 } = await import("./stateDiagram-v2-4FDKWEC3-AOoa1rfD.js");
97997
98011
  return { diagram: diagram22 };
97998
98012
  }, true ? __vite__mapDeps([37,36,12,13]) : void 0);
97999
98013
  return { id: id16, diagram: diagram2 };
@@ -98010,7 +98024,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
98010
98024
  }, "detector");
98011
98025
  var loader17 = /* @__PURE__ */ __name(async () => {
98012
98026
  const { diagram: diagram2 } = await __vitePreload(async () => {
98013
- const { diagram: diagram22 } = await import("./journeyDiagram-XKPGCS4Q-Dg_RgtQX.js");
98027
+ const { diagram: diagram22 } = await import("./journeyDiagram-XKPGCS4Q-BY5Lcmin.js");
98014
98028
  return { diagram: diagram22 };
98015
98029
  }, true ? __vite__mapDeps([38,9,11,26]) : void 0);
98016
98030
  return { id: id17, diagram: diagram2 };
@@ -98080,7 +98094,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
98080
98094
  }, "detector");
98081
98095
  var loader18 = /* @__PURE__ */ __name(async () => {
98082
98096
  const { diagram: diagram2 } = await __vitePreload(async () => {
98083
- const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-C_60PNQR.js");
98097
+ const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-DOGilHpN.js");
98084
98098
  return { diagram: diagram22 };
98085
98099
  }, true ? __vite__mapDeps([10,11,12,13,14]) : void 0);
98086
98100
  return { id: id18, diagram: diagram2 };
@@ -98097,7 +98111,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
98097
98111
  }, "detector");
98098
98112
  var loader19 = /* @__PURE__ */ __name(async () => {
98099
98113
  const { diagram: diagram2 } = await __vitePreload(async () => {
98100
- const { diagram: diagram22 } = await import("./timeline-definition-IT6M3QCI-CyG-TJ_A.js");
98114
+ const { diagram: diagram22 } = await import("./timeline-definition-IT6M3QCI-CGDQb8vq.js");
98101
98115
  return { diagram: diagram22 };
98102
98116
  }, true ? __vite__mapDeps([39,26]) : void 0);
98103
98117
  return { id: id19, diagram: diagram2 };
@@ -98114,7 +98128,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
98114
98128
  }, "detector");
98115
98129
  var loader20 = /* @__PURE__ */ __name(async () => {
98116
98130
  const { diagram: diagram2 } = await __vitePreload(async () => {
98117
- const { diagram: diagram22 } = await import("./mindmap-definition-VGOIOE7T-WsAF5UNp.js");
98131
+ const { diagram: diagram22 } = await import("./mindmap-definition-VGOIOE7T-I6ArhFTa.js");
98118
98132
  return { diagram: diagram22 };
98119
98133
  }, true ? __vite__mapDeps([40,12,13]) : void 0);
98120
98134
  return { id: id20, diagram: diagram2 };
@@ -98131,7 +98145,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
98131
98145
  }, "detector");
98132
98146
  var loader21 = /* @__PURE__ */ __name(async () => {
98133
98147
  const { diagram: diagram2 } = await __vitePreload(async () => {
98134
- const { diagram: diagram22 } = await import("./kanban-definition-3W4ZIXB7-DuGS3lId.js");
98148
+ const { diagram: diagram22 } = await import("./kanban-definition-3W4ZIXB7-zEbpyocs.js");
98135
98149
  return { diagram: diagram22 };
98136
98150
  }, true ? __vite__mapDeps([41,11]) : void 0);
98137
98151
  return { id: id21, diagram: diagram2 };
@@ -98148,7 +98162,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
98148
98162
  }, "detector");
98149
98163
  var loader22 = /* @__PURE__ */ __name(async () => {
98150
98164
  const { diagram: diagram2 } = await __vitePreload(async () => {
98151
- const { diagram: diagram22 } = await import("./sankeyDiagram-TZEHDZUN-D4-cF724.js");
98165
+ const { diagram: diagram22 } = await import("./sankeyDiagram-TZEHDZUN-DbMClHuR.js");
98152
98166
  return { diagram: diagram22 };
98153
98167
  }, true ? __vite__mapDeps([42,27,22]) : void 0);
98154
98168
  return { id: id22, diagram: diagram2 };
@@ -98165,7 +98179,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
98165
98179
  }, "detector");
98166
98180
  var loader23 = /* @__PURE__ */ __name(async () => {
98167
98181
  const { diagram: diagram2 } = await __vitePreload(async () => {
98168
- const { diagram: diagram22 } = await import("./diagram-S2PKOQOG-Di-YN5cd.js");
98182
+ const { diagram: diagram22 } = await import("./diagram-S2PKOQOG-CPHGTwGV.js");
98169
98183
  return { diagram: diagram22 };
98170
98184
  }, true ? __vite__mapDeps([43,17,19,2,4,5]) : void 0);
98171
98185
  return { id: id23, diagram: diagram2 };
@@ -98181,7 +98195,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
98181
98195
  }, "detector");
98182
98196
  var loader24 = /* @__PURE__ */ __name(async () => {
98183
98197
  const { diagram: diagram2 } = await __vitePreload(async () => {
98184
- const { diagram: diagram22 } = await import("./diagram-QEK2KX5R-BThSELUH.js");
98198
+ const { diagram: diagram22 } = await import("./diagram-QEK2KX5R-3T4XwT5a.js");
98185
98199
  return { diagram: diagram22 };
98186
98200
  }, true ? __vite__mapDeps([44,17,19,2,4,5]) : void 0);
98187
98201
  return { id: id24, diagram: diagram2 };
@@ -98197,7 +98211,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
98197
98211
  }, "detector");
98198
98212
  var loader25 = /* @__PURE__ */ __name(async () => {
98199
98213
  const { diagram: diagram2 } = await __vitePreload(async () => {
98200
- const { diagram: diagram22 } = await import("./blockDiagram-VD42YOAC-wvs0G30c.js");
98214
+ const { diagram: diagram22 } = await import("./blockDiagram-VD42YOAC-0r3VY3gz.js");
98201
98215
  return { diagram: diagram22 };
98202
98216
  }, true ? __vite__mapDeps([45,11,5,2,1,14]) : void 0);
98203
98217
  return { id: id25, diagram: diagram2 };
@@ -98214,7 +98228,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
98214
98228
  }, "detector");
98215
98229
  var loader26 = /* @__PURE__ */ __name(async () => {
98216
98230
  const { diagram: diagram2 } = await __vitePreload(async () => {
98217
- const { diagram: diagram22 } = await import("./architectureDiagram-VXUJARFQ-Cxf4pmYG.js");
98231
+ const { diagram: diagram22 } = await import("./architectureDiagram-VXUJARFQ-DygUo6iw.js");
98218
98232
  return { diagram: diagram22 };
98219
98233
  }, true ? __vite__mapDeps([46,17,19,2,4,5,7]) : void 0);
98220
98234
  return { id: id26, diagram: diagram2 };
@@ -98231,7 +98245,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
98231
98245
  }, "detector");
98232
98246
  var loader27 = /* @__PURE__ */ __name(async () => {
98233
98247
  const { diagram: diagram2 } = await __vitePreload(async () => {
98234
- const { diagram: diagram22 } = await import("./diagram-PSM6KHXK-D-ZMog1-.js");
98248
+ const { diagram: diagram22 } = await import("./diagram-PSM6KHXK-CfpXvSJR.js");
98235
98249
  return { diagram: diagram22 };
98236
98250
  }, true ? __vite__mapDeps([47,13,17,19,2,4,5,23,27,22]) : void 0);
98237
98251
  return { id: id27, diagram: diagram2 };
@@ -99542,6 +99556,7 @@ class DomindsDialogContainer extends HTMLElement {
99542
99556
  this.queuedUserBubbleByMsgId = /* @__PURE__ */ new Map();
99543
99557
  this.pendingTeammateCallAnchorByGenseq = /* @__PURE__ */ new Map();
99544
99558
  this.progressiveExpandObserverByTarget = /* @__PURE__ */ new WeakMap();
99559
+ this.retryPanelState = { kind: "hidden" };
99545
99560
  this.pendingScrollRequest = null;
99546
99561
  this.highlightSeq = 0;
99547
99562
  this.pendingHighlight = null;
@@ -99679,7 +99694,6 @@ class DomindsDialogContainer extends HTMLElement {
99679
99694
  if (name !== "ui-language") return;
99680
99695
  const parsed = normalizeLanguageCode(newValue || "");
99681
99696
  this.uiLanguage = parsed ?? "en";
99682
- this.updateResumePanel();
99683
99697
  }
99684
99698
  async connectedCallback() {
99685
99699
  const parsed = normalizeLanguageCode(this.getAttribute("ui-language") || "");
@@ -100114,6 +100128,7 @@ class DomindsDialogContainer extends HTMLElement {
100114
100128
  this.clearGenerationGlow();
100115
100129
  this.stopAutoScrollObservation();
100116
100130
  this.stopAutoScrollWheelSettleTimer();
100131
+ this.clearRetryPanel();
100117
100132
  this.generationBubble = void 0;
100118
100133
  this.thinkingSection = void 0;
100119
100134
  this.markdownSection = void 0;
@@ -100137,6 +100152,7 @@ class DomindsDialogContainer extends HTMLElement {
100137
100152
  this.clearGenerationGlow();
100138
100153
  this.stopAutoScrollObservation();
100139
100154
  this.stopAutoScrollWheelSettleTimer();
100155
+ this.clearRetryPanel();
100140
100156
  this.previousDialog = void 0;
100141
100157
  this.runState = null;
100142
100158
  this.generationBubble = void 0;
@@ -100232,7 +100248,9 @@ class DomindsDialogContainer extends HTMLElement {
100232
100248
  break;
100233
100249
  }
100234
100250
  this.runState = event.runState;
100235
- this.updateResumePanel();
100251
+ if (event.runState.kind === "interrupted" || event.runState.kind === "dead") {
100252
+ this.clearRetryPanel();
100253
+ }
100236
100254
  break;
100237
100255
  case "dlg_run_state_marker_evt": {
100238
100256
  if (!this.currentDialog || event.dialog.selfId !== this.currentDialog.selfId || event.dialog.rootId !== this.currentDialog.rootId) {
@@ -100243,10 +100261,10 @@ class DomindsDialogContainer extends HTMLElement {
100243
100261
  kind: "interrupted",
100244
100262
  reason: event.reason ?? { kind: "system_stop", detail: "Interrupted." }
100245
100263
  };
100264
+ this.clearRetryPanel();
100246
100265
  } else if (this.runState !== null && this.runState.kind === "interrupted") {
100247
100266
  this.runState = { kind: "proceeding" };
100248
100267
  }
100249
- this.updateResumePanel();
100250
100268
  let reasonText;
100251
100269
  const reason = event.reason;
100252
100270
  if (reason) {
@@ -100414,6 +100432,9 @@ class DomindsDialogContainer extends HTMLElement {
100414
100432
  }
100415
100433
  // === GENERATING EVENTS (Frontend Bubble Management) ===
100416
100434
  handleGeneratingStart(seq2, timestamp2, msgId) {
100435
+ if (this.retryPanelState.kind !== "hidden" && this.retryPanelState.genseq !== seq2) {
100436
+ this.clearRetryPanel();
100437
+ }
100417
100438
  const applyPendingCallAnchor = (bubble2) => {
100418
100439
  const pendingAnchor = this.pendingTeammateCallAnchorByGenseq.get(seq2);
100419
100440
  if (!pendingAnchor) return;
@@ -100664,6 +100685,9 @@ class DomindsDialogContainer extends HTMLElement {
100664
100685
  bubble.classList.remove("generating");
100665
100686
  bubble.classList.add("completed");
100666
100687
  bubble.setAttribute("data-finalized", "true");
100688
+ if (this.retryPanelState.kind !== "hidden" && this.retryPanelState.genseq === seq2) {
100689
+ this.clearRetryPanel();
100690
+ }
100667
100691
  this.thinkingSection = void 0;
100668
100692
  this.markdownSection = void 0;
100669
100693
  this.callingSection = void 0;
@@ -100677,10 +100701,8 @@ class DomindsDialogContainer extends HTMLElement {
100677
100701
  `.generation-bubble[data-seq="${String(seq2)}"]`
100678
100702
  ) : null;
100679
100703
  if (targetBubble) {
100680
- targetBubble.remove();
100681
- }
100682
- if (this.generationBubble && this.generationBubble.getAttribute("data-seq") === String(seq2)) {
100683
- this.generationBubble = void 0;
100704
+ this.resetGenerationBubbleForRetry(targetBubble);
100705
+ this.generationBubble = targetBubble;
100684
100706
  this.thinkingSection = void 0;
100685
100707
  this.markdownSection = void 0;
100686
100708
  this.callingSection = void 0;
@@ -100864,6 +100886,28 @@ class DomindsDialogContainer extends HTMLElement {
100864
100886
  }
100865
100887
  }
100866
100888
  }
100889
+ resetGenerationBubbleForRetry(bubble) {
100890
+ bubble.classList.remove("completed");
100891
+ bubble.classList.add("generating");
100892
+ bubble.setAttribute("data-finalized", "false");
100893
+ const modelEl = bubble.querySelector(".bubble-author-model");
100894
+ if (modelEl) {
100895
+ modelEl.textContent = "";
100896
+ }
100897
+ const body = bubble.querySelector(".bubble-body");
100898
+ if (!body) return;
100899
+ let sawDivider = false;
100900
+ for (const child of Array.from(body.children)) {
100901
+ if (!(child instanceof HTMLElement)) continue;
100902
+ if (child.classList.contains("user-response-divider")) {
100903
+ sawDivider = true;
100904
+ continue;
100905
+ }
100906
+ if (sawDivider) {
100907
+ child.remove();
100908
+ }
100909
+ }
100910
+ }
100867
100911
  compactWebSearchItemId(itemId) {
100868
100912
  const raw = itemId.trim();
100869
100913
  if (raw.length <= 28) return raw;
@@ -102297,52 +102341,65 @@ ${event.content}`;
102297
102341
  if (trimmed.length <= 240) return trimmed;
102298
102342
  return `${trimmed.slice(0, 240)}...`;
102299
102343
  }
102300
- buildRetryToastMessage(event) {
102301
- const isZh = this.uiLanguage === "zh";
102302
- if (event.phase === "retrying") {
102303
- const waitText = typeof event.backoffMs === "number" ? isZh ? `,${event.backoffMs}ms 后重试` : `, retrying in ${event.backoffMs}ms` : "";
102304
- return isZh ? `LLM 重试 ${event.attempt}/${event.totalAttempts}${waitText}` : `LLM retry ${event.attempt}/${event.totalAttempts}${waitText}`;
102344
+ describeRetryFailure(event) {
102345
+ if (typeof event.status === "number") {
102346
+ return `HTTP ${event.status}`;
102347
+ }
102348
+ if (typeof event.code === "string" && event.code.trim() !== "") {
102349
+ return event.code.trim();
102350
+ }
102351
+ if (event.failureKind === "retriable") {
102352
+ return this.uiLanguage === "zh" ? "可重试错误" : "Retriable error";
102353
+ }
102354
+ if (event.failureKind === "rejected") {
102355
+ return this.uiLanguage === "zh" ? "请求被拒绝" : "Request rejected";
102305
102356
  }
102306
- return isZh ? `LLM 重试已耗尽(${event.attempt}/${event.totalAttempts})` : `LLM retries exhausted (${event.attempt}/${event.totalAttempts})`;
102357
+ return this.uiLanguage === "zh" ? "致命错误" : "Fatal error";
102307
102358
  }
102308
102359
  handleLlmRetry(event) {
102309
- const toastKind = event.phase === "retrying" ? "info" : "warning";
102310
- this.emitToast(this.buildRetryToastMessage(event), toastKind);
102311
- const container = this.shadowRoot?.querySelector(".messages");
102312
- const activeBubble = this.generationBubble;
102313
- const targetBubble = activeBubble && activeBubble.getAttribute("data-seq") === String(event.genseq) ? activeBubble : container ? container.querySelector(
102314
- `.generation-bubble[data-seq="${String(event.genseq)}"]`
102315
- ) : null;
102316
- if (!targetBubble) return;
102317
- let section = targetBubble.querySelector(".retry-section");
102318
- if (!section) {
102319
- section = document.createElement("div");
102320
- section.className = "retry-section";
102321
- section.innerHTML = `
102322
- <div class="section-header">
102323
- <span class="section-icon icon-mask dc-icon-refresh" aria-hidden="true"></span>
102324
- <span class="section-title">${this.uiLanguage === "zh" ? "重试中" : "Retrying"}</span>
102325
- </div>
102326
- <div class="retry-items"></div>
102327
- `;
102328
- const body = targetBubble.querySelector(".bubble-body");
102329
- (body || targetBubble).appendChild(section);
102330
- }
102331
- const items = section.querySelector(".retry-items");
102332
- if (!items) return;
102333
- const item = document.createElement("div");
102334
- item.className = `retry-item ${event.phase === "exhausted" ? "retry-item-final" : ""}`;
102335
- const statusText = typeof event.status === "number" ? `HTTP ${event.status}` : typeof event.code === "string" && event.code !== "" ? event.code : event.failureKind;
102336
- const metaText = event.phase === "retrying" ? this.uiLanguage === "zh" ? `第 ${event.attempt}/${event.totalAttempts} 次,等待 ${event.backoffMs ?? 0}ms,${statusText}` : `Attempt ${event.attempt}/${event.totalAttempts}, wait ${event.backoffMs ?? 0}ms, ${statusText}` : this.uiLanguage === "zh" ? `已耗尽重试 ${event.attempt}/${event.totalAttempts},${statusText}` : `Retries exhausted ${event.attempt}/${event.totalAttempts}, ${statusText}`;
102360
+ if (event.phase === "exhausted") {
102361
+ this.clearRetryPanel();
102362
+ return;
102363
+ }
102364
+ const failureLabel = this.describeRetryFailure(event);
102337
102365
  const errorText = this.summarizeRetryError(event.error);
102338
- const suggestionText = event.phase === "exhausted" && typeof event.suggestion === "string" && event.suggestion.trim() !== "" ? `<div class="retry-suggestion">${this.escapeHtml(event.suggestion)}</div>` : "";
102339
- item.innerHTML = `
102340
- <div class="retry-meta">${this.escapeHtml(metaText)}</div>
102341
- <div class="retry-error">${this.escapeHtml(errorText)}</div>
102342
- ${suggestionText}
102343
- `;
102344
- items.appendChild(item);
102345
- this.scrollToBottom();
102366
+ if (event.phase === "waiting") {
102367
+ const backoffMs = Math.max(0, Math.floor(event.backoffMs ?? 0));
102368
+ this.retryPanelState = {
102369
+ kind: "retry-waiting",
102370
+ genseq: event.genseq,
102371
+ attempt: event.attempt,
102372
+ totalAttempts: event.totalAttempts,
102373
+ provider: event.provider,
102374
+ failureLabel,
102375
+ error: errorText,
102376
+ nextRetryAtMs: Date.now() + backoffMs
102377
+ };
102378
+ } else {
102379
+ this.retryPanelState = {
102380
+ kind: "retry-running",
102381
+ genseq: event.genseq,
102382
+ attempt: event.attempt,
102383
+ totalAttempts: event.totalAttempts,
102384
+ provider: event.provider,
102385
+ failureLabel,
102386
+ error: errorText
102387
+ };
102388
+ }
102389
+ this.emitRetryPanelStateChanged();
102390
+ }
102391
+ clearRetryPanel() {
102392
+ this.retryPanelState = { kind: "hidden" };
102393
+ this.emitRetryPanelStateChanged();
102394
+ }
102395
+ emitRetryPanelStateChanged() {
102396
+ this.dispatchEvent(
102397
+ new CustomEvent("dialog-retry-panel-state", {
102398
+ detail: { state: this.retryPanelState },
102399
+ bubbles: true,
102400
+ composed: true
102401
+ })
102402
+ );
102346
102403
  }
102347
102404
  handleProtocolError(err) {
102348
102405
  const container = this.shadowRoot?.querySelector(".messages");
@@ -102450,15 +102507,6 @@ ${event.content}`;
102450
102507
  <style>${this.getStyles()}</style>
102451
102508
  <div class="container">
102452
102509
  <div class="messages"></div>
102453
- <div id="resume-panel" class="resume-panel hidden">
102454
- <div class="resume-text">
102455
- <div class="resume-title">${t2.continueLabel}</div>
102456
- <div id="resume-reason" class="resume-reason"></div>
102457
- </div>
102458
- <div class="resume-actions">
102459
- <button id="resume-btn" class="resume-btn" type="button">${t2.continueLabel}</button>
102460
- </div>
102461
- </div>
102462
102510
  <div id="scroll-to-bottom-wrap" class="scroll-to-bottom-wrap hidden">
102463
102511
  <button
102464
102512
  id="scroll-to-bottom-btn"
@@ -102472,14 +102520,6 @@ ${event.content}`;
102472
102520
  </div>
102473
102521
  </div>
102474
102522
  `;
102475
- const btn = this.shadowRoot.querySelector("#resume-btn");
102476
- if (btn) {
102477
- btn.onclick = () => {
102478
- const dialog = this.currentDialog;
102479
- if (!dialog) return;
102480
- this.wsManager.sendRaw({ type: "resume_dialog", dialog });
102481
- };
102482
- }
102483
102523
  const scrollBtn = this.shadowRoot.querySelector(
102484
102524
  "#scroll-to-bottom-btn"
102485
102525
  );
@@ -102489,7 +102529,6 @@ ${event.content}`;
102489
102529
  this.scrollToBottom({ force: true });
102490
102530
  };
102491
102531
  }
102492
- this.updateResumePanel();
102493
102532
  this.updateScrollToBottomButton();
102494
102533
  }
102495
102534
  updateScrollToBottomButton() {
@@ -102500,46 +102539,6 @@ ${event.content}`;
102500
102539
  const shouldShow = this.scrollContainer !== null && !this.autoScrollEnabled;
102501
102540
  wrap.classList.toggle("hidden", !shouldShow);
102502
102541
  }
102503
- updateResumePanel() {
102504
- const root2 = this.shadowRoot;
102505
- if (!root2) return;
102506
- const panel = root2.querySelector("#resume-panel");
102507
- const reasonEl = root2.querySelector("#resume-reason");
102508
- const btn = root2.querySelector("#resume-btn");
102509
- const titleEl = root2.querySelector(".resume-title");
102510
- if (!panel || !reasonEl || !btn) return;
102511
- const t2 = getUiStrings(this.uiLanguage);
102512
- if (titleEl) titleEl.textContent = t2.continueLabel;
102513
- btn.textContent = t2.continueLabel;
102514
- const state2 = this.runState;
102515
- const canShow = !!this.currentDialog && state2 !== null && state2.kind === "interrupted";
102516
- panel.classList.toggle("hidden", !canShow);
102517
- if (!canShow) {
102518
- reasonEl.textContent = "";
102519
- btn.disabled = true;
102520
- return;
102521
- }
102522
- btn.disabled = false;
102523
- const reason = state2.reason;
102524
- switch (reason.kind) {
102525
- case "user_stop":
102526
- reasonEl.textContent = t2.stoppedByYou;
102527
- break;
102528
- case "emergency_stop":
102529
- reasonEl.textContent = t2.stoppedByEmergencyStop;
102530
- break;
102531
- case "server_restart":
102532
- reasonEl.textContent = t2.interruptedByServerRestart;
102533
- break;
102534
- case "system_stop":
102535
- reasonEl.textContent = reason.detail;
102536
- break;
102537
- default: {
102538
- const _exhaustive = reason;
102539
- reasonEl.textContent = String(_exhaustive);
102540
- }
102541
- }
102542
- }
102543
102542
  formatInterruptionReason(reason) {
102544
102543
  const t2 = getUiStrings(this.uiLanguage);
102545
102544
  switch (reason.kind) {
@@ -102646,52 +102645,6 @@ ${event.content}`;
102646
102645
  height: 18px;
102647
102646
  }
102648
102647
 
102649
- .resume-panel {
102650
- margin: 0 12px 12px 12px;
102651
- padding: 9px 10px;
102652
- border: 1px solid var(--dominds-border, var(--color-border-primary, #e2e8f0));
102653
- border-radius: 8px;
102654
- background: var(
102655
- --dominds-sidebar-bg,
102656
- var(--dominds-bg, var(--color-bg-secondary, #ffffff))
102657
- );
102658
- display: flex;
102659
- align-items: center;
102660
- justify-content: space-between;
102661
- gap: 8px;
102662
- }
102663
-
102664
- .resume-panel.hidden {
102665
- display: none;
102666
- }
102667
-
102668
- .resume-title {
102669
- font-weight: 600;
102670
- font-size: var(--dominds-font-size-md, 13px);
102671
- color: var(--dominds-fg, var(--color-fg-primary, #0f172a));
102672
- }
102673
-
102674
- .resume-reason {
102675
- font-size: var(--dominds-font-size-sm, 12px);
102676
- color: var(--dominds-muted, var(--color-fg-tertiary, #64748b));
102677
- margin-top: 1px;
102678
- }
102679
-
102680
- .resume-btn {
102681
- border: 1px solid var(--dominds-border, var(--color-border-primary, #e2e8f0));
102682
- background: var(--dominds-primary, var(--color-accent-primary, #007acc));
102683
- color: white;
102684
- padding: 6px 8px;
102685
- border-radius: 8px;
102686
- cursor: pointer;
102687
- font-weight: 600;
102688
- }
102689
-
102690
- .resume-btn:disabled {
102691
- opacity: 0.6;
102692
- cursor: not-allowed;
102693
- }
102694
-
102695
102648
  .run-marker {
102696
102649
  padding: 2px 3px;
102697
102650
  }
@@ -103192,58 +103145,6 @@ ${event.content}`;
103192
103145
  margin-bottom: 0;
103193
103146
  }
103194
103147
 
103195
- .retry-section {
103196
- margin: 4px 0;
103197
- padding: 4px 6px;
103198
- border-radius: 6px;
103199
- border-left: 3px solid var(--dominds-warning, var(--color-warning, #f59e0b));
103200
- background: color-mix(
103201
- in srgb,
103202
- var(--dominds-warning, #f59e0b) 10%,
103203
- var(--dominds-bg, var(--color-bg-primary, #ffffff))
103204
- );
103205
- }
103206
-
103207
- .retry-items {
103208
- display: flex;
103209
- flex-direction: column;
103210
- gap: 4px;
103211
- }
103212
-
103213
- .retry-item {
103214
- padding: 2px 0;
103215
- }
103216
-
103217
- .retry-item-final {
103218
- border-top: 1px dashed
103219
- color-mix(
103220
- in srgb,
103221
- var(--dominds-warning, #f59e0b) 45%,
103222
- transparent
103223
- );
103224
- margin-top: 2px;
103225
- padding-top: 6px;
103226
- }
103227
-
103228
- .retry-meta {
103229
- font-size: var(--dominds-font-size-sm, 12px);
103230
- color: var(--dominds-fg, var(--color-fg-secondary, #475569));
103231
- opacity: 0.92;
103232
- }
103233
-
103234
- .retry-error {
103235
- font-size: var(--dominds-font-size-sm, 12px);
103236
- color: var(--dominds-fg, var(--color-fg-secondary, #475569));
103237
- white-space: pre-wrap;
103238
- word-break: break-word;
103239
- }
103240
-
103241
- .retry-suggestion {
103242
- margin-top: 2px;
103243
- font-size: var(--dominds-font-size-sm, 12px);
103244
- color: var(--dominds-fg-muted, var(--color-fg-muted, #64748b));
103245
- }
103246
-
103247
103148
  /* Calling section styles (nested inside markdown) */
103248
103149
  .calling-section {
103249
103150
  margin: 4px 0;
@@ -106817,6 +106718,7 @@ const TEAM_MGMT_MANUAL_TOPIC_KEYS = [
106817
106718
  "team",
106818
106719
  "member-properties",
106819
106720
  "minds",
106721
+ "skills",
106820
106722
  "priming",
106821
106723
  "env",
106822
106724
  "permissions",
@@ -106840,6 +106742,9 @@ const TEAM_MGMT_MANUAL_TOPIC_META = {
106840
106742
  minds: {
106841
106743
  titleI18n: { zh: "角色资产(.minds/team/<id>/*)", en: "Minds Assets (.minds/team/<id>/*)" }
106842
106744
  },
106745
+ skills: {
106746
+ titleI18n: { zh: "技能(.minds/skills/*)", en: "Skills (.minds/skills/*)" }
106747
+ },
106843
106748
  priming: {
106844
106749
  titleI18n: {
106845
106750
  zh: "启动脚本(.minds/priming/*)",
@@ -106870,6 +106775,7 @@ const TEAM_MGMT_MANUAL_UI_TOPIC_ORDER = [
106870
106775
  "builtin-defaults",
106871
106776
  "mcp",
106872
106777
  "minds",
106778
+ "skills",
106873
106779
  "priming",
106874
106780
  "env",
106875
106781
  "troubleshooting"
@@ -106890,6 +106796,7 @@ const TEAM_MGMT_MANUAL_UI_TOOL_TOPICS_BY_KEY = {
106890
106796
  // Other
106891
106797
  mcp: ["mcp"],
106892
106798
  minds: ["minds"],
106799
+ skills: ["skills"],
106893
106800
  priming: ["priming"],
106894
106801
  env: ["env"],
106895
106802
  troubleshooting: ["troubleshooting"]
@@ -111122,6 +111029,8 @@ const _DomindsApp = class _DomindsApp extends HTMLElement {
111122
111029
  this.generatingDialogKeys = /* @__PURE__ */ new Set();
111123
111030
  this.currentDialog = null;
111124
111031
  this.currentDialogStatus = null;
111032
+ this.retryPanelState = { kind: "hidden" };
111033
+ this.retryPanelTicker = null;
111125
111034
  this.teamMembers = [];
111126
111035
  this.defaultResponder = null;
111127
111036
  this.taskDocuments = [];
@@ -111803,6 +111712,7 @@ const _DomindsApp = class _DomindsApp extends HTMLElement {
111803
111712
  this.updateToolsRegistryUi();
111804
111713
  this.updateContextHealthUi();
111805
111714
  this.updateToastHistoryUi();
111715
+ this.updateDialogViewportPanels();
111806
111716
  }
111807
111717
  applyUiLanguageSelectDecorations(t2) {
111808
111718
  if (!this.shadowRoot) return;
@@ -112168,6 +112078,7 @@ ${formatUiLanguageOptionLabel({
112168
112078
  }
112169
112079
  disconnectedCallback() {
112170
112080
  this.wsManager.disconnect();
112081
+ this.stopRetryPanelTicker();
112171
112082
  for (const t2 of this.runControlRefreshTimers) {
112172
112083
  clearTimeout(t2);
112173
112084
  }
@@ -112236,6 +112147,7 @@ ${formatUiLanguageOptionLabel({
112236
112147
  this.applyUiLanguageToDom();
112237
112148
  this.updateProblemsUi();
112238
112149
  this.updateToolsRegistryUi();
112150
+ this.updateDialogViewportPanels();
112239
112151
  }
112240
112152
  /**
112241
112153
  * Surgical update: Update only the dialog list without destroying the container.
@@ -114124,14 +114036,130 @@ ${formatUiLanguageOptionLabel({
114124
114036
  background: var(--dominds-sidebar-bg, #f8f9fa);
114125
114037
  }
114126
114038
 
114039
+ .conversation-viewport {
114040
+ position: relative;
114041
+ flex: 1;
114042
+ min-height: 0;
114043
+ }
114044
+
114127
114045
  /* Conversation area scrolls independently */
114128
- .conversation-scroll-area {
114129
- flex: 1;
114130
- min-height: 0;
114131
- overflow-y: auto;
114132
- contain: content;
114133
- background: var(--dominds-sidebar-bg, #f8f9fa);
114134
- }
114046
+ .conversation-scroll-area {
114047
+ flex: 1;
114048
+ height: 100%;
114049
+ min-height: 0;
114050
+ overflow-y: auto;
114051
+ contain: content;
114052
+ background: var(--dominds-sidebar-bg, #f8f9fa);
114053
+ }
114054
+
114055
+ .dialog-viewport-panels {
114056
+ display: flex;
114057
+ flex-direction: column;
114058
+ gap: 10px;
114059
+ flex-shrink: 0;
114060
+ padding: 0 12px 12px 12px;
114061
+ background: var(--dominds-sidebar-bg, #f8f9fa);
114062
+ }
114063
+
114064
+ .dialog-viewport-panels.hidden,
114065
+ .dialog-viewport-panel.hidden {
114066
+ display: none;
114067
+ }
114068
+
114069
+ .dialog-viewport-panel {
114070
+ padding: 9px 10px;
114071
+ border: 1px solid var(--dominds-border, var(--color-border-primary, #e2e8f0));
114072
+ border-radius: 8px;
114073
+ background: var(
114074
+ --dominds-sidebar-bg,
114075
+ var(--dominds-bg, var(--color-bg-secondary, #ffffff))
114076
+ );
114077
+ }
114078
+
114079
+ .dialog-viewport-panel-header {
114080
+ display: flex;
114081
+ align-items: flex-start;
114082
+ gap: 8px;
114083
+ }
114084
+
114085
+ .dialog-viewport-panel-header .icon-mask {
114086
+ width: 16px;
114087
+ height: 16px;
114088
+ flex: 0 0 auto;
114089
+ margin-top: 1px;
114090
+ }
114091
+
114092
+ .dialog-viewport-panel-text {
114093
+ min-width: 0;
114094
+ display: flex;
114095
+ flex-direction: column;
114096
+ gap: 1px;
114097
+ }
114098
+
114099
+ .dialog-viewport-panel-title {
114100
+ font-weight: 600;
114101
+ font-size: var(--dominds-font-size-md, 13px);
114102
+ color: var(--dominds-fg, var(--color-fg-primary, #0f172a));
114103
+ }
114104
+
114105
+ .dialog-viewport-panel-summary {
114106
+ font-size: var(--dominds-font-size-sm, 12px);
114107
+ color: var(--dominds-muted, var(--color-fg-tertiary, #64748b));
114108
+ margin-top: 1px;
114109
+ }
114110
+
114111
+ .dialog-viewport-panel-error {
114112
+ margin-top: 4px;
114113
+ font-size: var(--dominds-font-size-sm, 12px);
114114
+ color: var(--dominds-fg, var(--color-fg-secondary, #475569));
114115
+ white-space: pre-wrap;
114116
+ word-break: break-word;
114117
+ }
114118
+
114119
+ .retry-panel {
114120
+ border-color: color-mix(
114121
+ in srgb,
114122
+ var(--dominds-warning, var(--color-warning, #f59e0b)) 40%,
114123
+ var(--dominds-border, var(--color-border-primary, #e2e8f0))
114124
+ );
114125
+ background: color-mix(
114126
+ in srgb,
114127
+ var(--dominds-warning, #f59e0b) 14%,
114128
+ var(--dominds-sidebar-bg, var(--dominds-bg, #ffffff))
114129
+ );
114130
+ }
114131
+
114132
+ .retry-panel .icon-mask {
114133
+ color: var(--dominds-warning, var(--color-warning, #f59e0b));
114134
+ }
114135
+
114136
+ .resume-panel {
114137
+ display: flex;
114138
+ align-items: center;
114139
+ justify-content: space-between;
114140
+ gap: 10px;
114141
+ }
114142
+
114143
+ .dialog-viewport-panel-actions {
114144
+ display: flex;
114145
+ align-items: center;
114146
+ flex-shrink: 0;
114147
+ }
114148
+
114149
+ .dialog-resume-btn {
114150
+ border: 1px solid var(--dominds-border, var(--color-border-primary, #e2e8f0));
114151
+ background: var(--dominds-primary, var(--color-accent-primary, #007acc));
114152
+ color: white;
114153
+ padding: 6px 8px;
114154
+ border-radius: 8px;
114155
+ cursor: pointer;
114156
+ font-weight: 600;
114157
+ }
114158
+
114159
+ .dialog-resume-btn:disabled {
114160
+ opacity: 0.6;
114161
+ cursor: not-allowed;
114162
+ }
114135
114163
 
114136
114164
  .q4h-input-wrap {
114137
114165
  flex-shrink: 0;
@@ -115708,9 +115736,32 @@ ${uiLanguageButtonTooltip}">
115708
115736
  ` : ""}
115709
115737
 
115710
115738
  <div class="dialog-section">
115711
- <div class="conversation-scroll-area">
115712
- <dominds-dialog-container id="dialog-container" ui-language="${this.uiLanguage}"></dominds-dialog-container>
115713
- </div>
115739
+ <div class="conversation-viewport">
115740
+ <div class="conversation-scroll-area">
115741
+ <dominds-dialog-container id="dialog-container" ui-language="${this.uiLanguage}"></dominds-dialog-container>
115742
+ </div>
115743
+ </div>
115744
+ <div id="dialog-viewport-panels" class="dialog-viewport-panels hidden">
115745
+ <div id="dialog-retry-panel" class="dialog-viewport-panel retry-panel hidden" data-state="hidden">
115746
+ <div class="dialog-viewport-panel-header">
115747
+ <span class="icon-mask app-icon-refresh" aria-hidden="true"></span>
115748
+ <div class="dialog-viewport-panel-text">
115749
+ <div id="dialog-retry-title" class="dialog-viewport-panel-title"></div>
115750
+ <div id="dialog-retry-summary" class="dialog-viewport-panel-summary"></div>
115751
+ </div>
115752
+ </div>
115753
+ <div id="dialog-retry-error" class="dialog-viewport-panel-error"></div>
115754
+ </div>
115755
+ <div id="dialog-resume-panel" class="dialog-viewport-panel resume-panel hidden">
115756
+ <div class="dialog-viewport-panel-text">
115757
+ <div id="dialog-resume-title" class="dialog-viewport-panel-title">${t2.continueLabel}</div>
115758
+ <div id="dialog-resume-reason" class="dialog-viewport-panel-summary"></div>
115759
+ </div>
115760
+ <div class="dialog-viewport-panel-actions">
115761
+ <button id="dialog-resume-btn" class="dialog-resume-btn" type="button">${t2.continueLabel}</button>
115762
+ </div>
115763
+ </div>
115764
+ </div>
115714
115765
  <div class="bottom-panel ${this.bottomPanelExpanded ? "expanded" : "collapsed"}" id="bottom-panel">
115715
115766
  <div class="bottom-panel-resize-handle ${this.bottomPanelExpanded ? "" : "hidden"}" id="bottom-panel-resize-handle" role="separator" aria-orientation="horizontal">
115716
115767
  <div class="bp-resize-grip left" data-role="resize" aria-hidden="true"></div>
@@ -116050,6 +116101,11 @@ ${content}`;
116050
116101
  void this.openCreateDialogFlow({ source: "toolbar" });
116051
116102
  return;
116052
116103
  }
116104
+ const resumeBtn = target.closest("#dialog-resume-btn");
116105
+ if (resumeBtn) {
116106
+ this.resumeCurrentDialog();
116107
+ return;
116108
+ }
116053
116109
  const savePrimingBtn = target.closest("#navibar-save-priming");
116054
116110
  if (savePrimingBtn) {
116055
116111
  await this.saveCurrentCourseAsPrimingScript();
@@ -116286,6 +116342,17 @@ ${content}`;
116286
116342
  input.setDisabled(course !== latest);
116287
116343
  }
116288
116344
  });
116345
+ dialogContainerEl.addEventListener("dialog-retry-panel-state", (e2) => {
116346
+ const ce2 = e2;
116347
+ const detail = ce2.detail && typeof ce2.detail === "object" ? ce2.detail : null;
116348
+ const state2 = detail?.state;
116349
+ if (!state2 || typeof state2 !== "object" || !("kind" in state2)) {
116350
+ console.warn("Invalid dialog-retry-panel-state payload", ce2.detail);
116351
+ return;
116352
+ }
116353
+ this.retryPanelState = state2;
116354
+ this.updateDialogViewportPanels();
116355
+ });
116289
116356
  }
116290
116357
  const uiLangButton = this.shadowRoot.querySelector("#ui-language-menu-button");
116291
116358
  const uiLangMenu = this.shadowRoot.querySelector("#ui-language-menu");
@@ -117457,6 +117524,7 @@ ${content}`;
117457
117524
  clearCurrentDialogSelection() {
117458
117525
  this.currentDialog = null;
117459
117526
  this.currentDialogStatus = null;
117527
+ this.retryPanelState = { kind: "hidden" };
117460
117528
  this.updateBrowserTitle(null);
117461
117529
  const root2 = this.shadowRoot;
117462
117530
  if (!root2) return;
@@ -117473,6 +117541,7 @@ ${content}`;
117473
117541
  this.q4hInput.clearDialog();
117474
117542
  this.q4hInput.setRunState(null);
117475
117543
  }
117544
+ this.updateDialogViewportPanels();
117476
117545
  }
117477
117546
  updateBrowserTitle(dialog) {
117478
117547
  if (dialog === null) {
@@ -117939,6 +118008,131 @@ ${content}`;
117939
118008
  const rootMatch = this.getRootDialog(rootId);
117940
118009
  return rootMatch ? rootMatch.status : null;
117941
118010
  }
118011
+ ensureRetryPanelTicker() {
118012
+ if (this.retryPanelState.kind !== "retry-waiting") {
118013
+ this.stopRetryPanelTicker();
118014
+ return;
118015
+ }
118016
+ if (this.retryPanelTicker !== null) return;
118017
+ this.retryPanelTicker = window.setInterval(() => {
118018
+ if (this.retryPanelState.kind !== "retry-waiting") {
118019
+ this.stopRetryPanelTicker();
118020
+ return;
118021
+ }
118022
+ this.updateDialogViewportPanels();
118023
+ }, 200);
118024
+ }
118025
+ stopRetryPanelTicker() {
118026
+ if (this.retryPanelTicker === null) return;
118027
+ window.clearInterval(this.retryPanelTicker);
118028
+ this.retryPanelTicker = null;
118029
+ }
118030
+ formatRetryCountdown(remainingMs) {
118031
+ const safeMs = Math.max(0, remainingMs);
118032
+ if (safeMs >= 1e4) {
118033
+ const seconds2 = Math.ceil(safeMs / 1e3);
118034
+ return this.uiLanguage === "zh" ? `${seconds2} 秒` : `${seconds2}s`;
118035
+ }
118036
+ const seconds = (safeMs / 1e3).toFixed(1);
118037
+ return this.uiLanguage === "zh" ? `${seconds} 秒` : `${seconds}s`;
118038
+ }
118039
+ buildRetryWaitingSummary(state2) {
118040
+ const t2 = getUiStrings(this.uiLanguage);
118041
+ const attemptText = `${t2.retryPanelAttemptPrefix}${state2.attempt}${t2.retryPanelAttemptConnector}${state2.totalAttempts}${t2.retryPanelAttemptSuffix}`;
118042
+ const providerText = state2.provider.trim();
118043
+ const failureText = providerText === "" ? state2.failureLabel : `${providerText} · ${state2.failureLabel}`;
118044
+ const remainingMs = Math.max(0, state2.nextRetryAtMs - Date.now());
118045
+ const countdown = this.formatRetryCountdown(remainingMs);
118046
+ return `${attemptText} · ${t2.retryPanelCountdownPrefix}${countdown} · ${failureText}`;
118047
+ }
118048
+ buildRetryRunningSummary(state2) {
118049
+ const t2 = getUiStrings(this.uiLanguage);
118050
+ const attemptText = `${t2.retryPanelRunningAttemptPrefix}${state2.attempt}${t2.retryPanelRunningAttemptSuffix}`;
118051
+ const providerText = state2.provider.trim();
118052
+ const failureText = providerText === "" ? state2.failureLabel : `${providerText} · ${state2.failureLabel}`;
118053
+ return `${attemptText} · ${failureText}`;
118054
+ }
118055
+ getCurrentDialogRunState() {
118056
+ const current = this.currentDialog;
118057
+ if (!current) return null;
118058
+ return this.dialogRunStatesByKey.get(this.dialogKey(current.rootId, current.selfId)) ?? null;
118059
+ }
118060
+ formatInterruptionReason(reason) {
118061
+ const t2 = getUiStrings(this.uiLanguage);
118062
+ switch (reason.kind) {
118063
+ case "user_stop":
118064
+ return t2.stoppedByYou;
118065
+ case "emergency_stop":
118066
+ return t2.stoppedByEmergencyStop;
118067
+ case "server_restart":
118068
+ return t2.interruptedByServerRestart;
118069
+ case "system_stop":
118070
+ return reason.detail;
118071
+ default: {
118072
+ const _exhaustive = reason;
118073
+ return String(_exhaustive);
118074
+ }
118075
+ }
118076
+ }
118077
+ updateDialogViewportPanels() {
118078
+ const root2 = this.shadowRoot;
118079
+ if (!root2) return;
118080
+ const wrap = root2.querySelector("#dialog-viewport-panels");
118081
+ const retryPanel = root2.querySelector("#dialog-retry-panel");
118082
+ const retryTitle = root2.querySelector("#dialog-retry-title");
118083
+ const retrySummary = root2.querySelector("#dialog-retry-summary");
118084
+ const retryError = root2.querySelector("#dialog-retry-error");
118085
+ const resumePanel = root2.querySelector("#dialog-resume-panel");
118086
+ const resumeTitle = root2.querySelector("#dialog-resume-title");
118087
+ const resumeReason = root2.querySelector("#dialog-resume-reason");
118088
+ const resumeBtn = root2.querySelector("#dialog-resume-btn");
118089
+ if (!wrap || !retryPanel || !retryTitle || !retrySummary || !retryError || !resumePanel || !resumeTitle || !resumeReason || !resumeBtn) {
118090
+ return;
118091
+ }
118092
+ const t2 = getUiStrings(this.uiLanguage);
118093
+ const retryState = this.retryPanelState;
118094
+ const retryVisible = this.currentDialog !== null && retryState.kind !== "hidden";
118095
+ retryPanel.classList.toggle("hidden", !retryVisible);
118096
+ if (!retryVisible) {
118097
+ retryTitle.textContent = "";
118098
+ retrySummary.textContent = "";
118099
+ retryError.textContent = "";
118100
+ this.stopRetryPanelTicker();
118101
+ } else {
118102
+ retryTitle.textContent = t2.retryPanelTitleRetrying;
118103
+ retrySummary.textContent = retryState.kind === "retry-waiting" ? this.buildRetryWaitingSummary(retryState) : this.buildRetryRunningSummary(retryState);
118104
+ retryError.textContent = retryState.error;
118105
+ if (retryState.kind === "retry-waiting") {
118106
+ this.ensureRetryPanelTicker();
118107
+ } else {
118108
+ this.stopRetryPanelTicker();
118109
+ }
118110
+ }
118111
+ const runState = this.getCurrentDialogRunState();
118112
+ const interruptedRunState = this.currentDialog !== null && runState !== null && runState.kind === "interrupted" ? runState : null;
118113
+ const resumeVisible = interruptedRunState !== null;
118114
+ resumePanel.classList.toggle("hidden", !resumeVisible);
118115
+ resumeTitle.textContent = t2.continueLabel;
118116
+ resumeBtn.textContent = t2.continueLabel;
118117
+ resumeBtn.disabled = !resumeVisible;
118118
+ if (!resumeVisible) {
118119
+ resumeReason.textContent = "";
118120
+ } else {
118121
+ resumeReason.textContent = this.formatInterruptionReason(interruptedRunState.reason);
118122
+ }
118123
+ const hasVisiblePanels = retryVisible || resumeVisible;
118124
+ wrap.classList.toggle("hidden", !hasVisiblePanels);
118125
+ }
118126
+ resumeCurrentDialog() {
118127
+ if (!this.currentDialog) return;
118128
+ this.wsManager.sendRaw({
118129
+ type: "resume_dialog",
118130
+ dialog: {
118131
+ selfId: this.currentDialog.selfId,
118132
+ rootId: this.currentDialog.rootId
118133
+ }
118134
+ });
118135
+ }
117942
118136
  updateInputPanelVisibility() {
117943
118137
  const t2 = getUiStrings(this.uiLanguage);
117944
118138
  const readOnly = this.currentDialogStatus === "completed" || this.currentDialogStatus === "archived";
@@ -117964,6 +118158,7 @@ ${content}`;
117964
118158
  if (this.q4hInput) {
117965
118159
  this.q4hInput.setDisabled(disabled);
117966
118160
  }
118161
+ this.updateDialogViewportPanels();
117967
118162
  }
117968
118163
  async applyDialogSelection(dialog, options) {
117969
118164
  const selfId = dialog.selfId || dialog.rootId;
@@ -117988,6 +118183,7 @@ ${content}`;
117988
118183
  }
117989
118184
  this.currentDialog = normalizedDialog;
117990
118185
  this.currentDialogStatus = normalizedDialog.status ?? this.resolveDialogStatus(normalizedDialog);
118186
+ this.retryPanelState = { kind: "hidden" };
117991
118187
  this.updateInputPanelVisibility();
117992
118188
  this.applyDiligenceState({
117993
118189
  disableDiligencePush: false,
@@ -121620,4 +121816,4 @@ export {
121620
121816
  clear$2 as y,
121621
121817
  defaultConfig2 as z
121622
121818
  };
121623
- //# sourceMappingURL=index-DrTqAfFy.js.map
121819
+ //# sourceMappingURL=index-BvNwR1gS.js.map