dominds 1.5.2 → 1.6.1

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 (161) 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/api-routes.js +61 -3
  16. package/dist/server/websocket-handler.js +5 -0
  17. package/dist/server.js +5 -2
  18. package/dist/shared/markdown-frontmatter.js +44 -0
  19. package/dist/shared/team_mgmt-manual.js +9 -0
  20. package/dist/skills/load.js +281 -0
  21. package/dist/static/assets/{_basePickBy-B-A5XrWM.js → _basePickBy-DSCRdLZO.js} +3 -3
  22. package/dist/static/assets/{_basePickBy-B-A5XrWM.js.map → _basePickBy-DSCRdLZO.js.map} +1 -1
  23. package/dist/static/assets/{_baseUniq-BANLb0cu.js → _baseUniq-4QF_OoKK.js} +2 -2
  24. package/dist/static/assets/{_baseUniq-BANLb0cu.js.map → _baseUniq-4QF_OoKK.js.map} +1 -1
  25. package/dist/static/assets/{arc-CYZYnojf.js → arc-BVQeKKx9.js} +2 -2
  26. package/dist/static/assets/{arc-CYZYnojf.js.map → arc-BVQeKKx9.js.map} +1 -1
  27. package/dist/static/assets/{architectureDiagram-VXUJARFQ-Cxf4pmYG.js → architectureDiagram-VXUJARFQ-B4I8KFTn.js} +7 -7
  28. package/dist/static/assets/{architectureDiagram-VXUJARFQ-Cxf4pmYG.js.map → architectureDiagram-VXUJARFQ-B4I8KFTn.js.map} +1 -1
  29. package/dist/static/assets/{blockDiagram-VD42YOAC-wvs0G30c.js → blockDiagram-VD42YOAC-CexS18Qs.js} +7 -7
  30. package/dist/static/assets/{blockDiagram-VD42YOAC-wvs0G30c.js.map → blockDiagram-VD42YOAC-CexS18Qs.js.map} +1 -1
  31. package/dist/static/assets/{c4Diagram-YG6GDRKO-BKFNexn4.js → c4Diagram-YG6GDRKO-CuSqcxrm.js} +3 -3
  32. package/dist/static/assets/{c4Diagram-YG6GDRKO-BKFNexn4.js.map → c4Diagram-YG6GDRKO-CuSqcxrm.js.map} +1 -1
  33. package/dist/static/assets/{channel-_1qpxJWy.js → channel-BYCxsEk5.js} +2 -2
  34. package/dist/static/assets/{channel-_1qpxJWy.js.map → channel-BYCxsEk5.js.map} +1 -1
  35. package/dist/static/assets/{chunk-4BX2VUAB-BIdC0phm.js → chunk-4BX2VUAB-N8tlmsFc.js} +2 -2
  36. package/dist/static/assets/{chunk-4BX2VUAB-BIdC0phm.js.map → chunk-4BX2VUAB-N8tlmsFc.js.map} +1 -1
  37. package/dist/static/assets/{chunk-55IACEB6-BNvGenQ9.js → chunk-55IACEB6-DxOFWSAF.js} +2 -2
  38. package/dist/static/assets/{chunk-55IACEB6-BNvGenQ9.js.map → chunk-55IACEB6-DxOFWSAF.js.map} +1 -1
  39. package/dist/static/assets/{chunk-B4BG7PRW-jmf-1Wv7.js → chunk-B4BG7PRW-C1tSyN_l.js} +5 -5
  40. package/dist/static/assets/{chunk-B4BG7PRW-jmf-1Wv7.js.map → chunk-B4BG7PRW-C1tSyN_l.js.map} +1 -1
  41. package/dist/static/assets/{chunk-DI55MBZ5-nmEmcikR.js → chunk-DI55MBZ5-BTmIrFZd.js} +4 -4
  42. package/dist/static/assets/{chunk-DI55MBZ5-nmEmcikR.js.map → chunk-DI55MBZ5-BTmIrFZd.js.map} +1 -1
  43. package/dist/static/assets/{chunk-FMBD7UC4-kGysaq_j.js → chunk-FMBD7UC4-s7Uar1x2.js} +2 -2
  44. package/dist/static/assets/{chunk-FMBD7UC4-kGysaq_j.js.map → chunk-FMBD7UC4-s7Uar1x2.js.map} +1 -1
  45. package/dist/static/assets/{chunk-QN33PNHL-8JwMLFIJ.js → chunk-QN33PNHL-DC20K06j.js} +2 -2
  46. package/dist/static/assets/{chunk-QN33PNHL-8JwMLFIJ.js.map → chunk-QN33PNHL-DC20K06j.js.map} +1 -1
  47. package/dist/static/assets/{chunk-QZHKN3VN-DZleEj00.js → chunk-QZHKN3VN-6mPLLfRu.js} +2 -2
  48. package/dist/static/assets/{chunk-QZHKN3VN-DZleEj00.js.map → chunk-QZHKN3VN-6mPLLfRu.js.map} +1 -1
  49. package/dist/static/assets/{chunk-TZMSLE5B-CXxl_uqH.js → chunk-TZMSLE5B-GrDvKWzz.js} +2 -2
  50. package/dist/static/assets/{chunk-TZMSLE5B-CXxl_uqH.js.map → chunk-TZMSLE5B-GrDvKWzz.js.map} +1 -1
  51. package/dist/static/assets/{classDiagram-2ON5EDUG-C-7R0QB6.js → classDiagram-2ON5EDUG-fO59bj9m.js} +6 -6
  52. package/dist/static/assets/{classDiagram-2ON5EDUG-C-7R0QB6.js.map → classDiagram-2ON5EDUG-fO59bj9m.js.map} +1 -1
  53. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-C-7R0QB6.js → classDiagram-v2-WZHVMYZB-fO59bj9m.js} +6 -6
  54. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-C-7R0QB6.js.map → classDiagram-v2-WZHVMYZB-fO59bj9m.js.map} +1 -1
  55. package/dist/static/assets/{clone-BwOKYSj8.js → clone-IE0Tnwxn.js} +2 -2
  56. package/dist/static/assets/{clone-BwOKYSj8.js.map → clone-IE0Tnwxn.js.map} +1 -1
  57. package/dist/static/assets/{cose-bilkent-S5V4N54A-BCBalM7p.js → cose-bilkent-S5V4N54A-CfeoQnK-.js} +2 -2
  58. package/dist/static/assets/{cose-bilkent-S5V4N54A-BCBalM7p.js.map → cose-bilkent-S5V4N54A-CfeoQnK-.js.map} +1 -1
  59. package/dist/static/assets/{dagre-6UL2VRFP-uV2ekQoj.js → dagre-6UL2VRFP-DsiyUZhi.js} +7 -7
  60. package/dist/static/assets/{dagre-6UL2VRFP-uV2ekQoj.js.map → dagre-6UL2VRFP-DsiyUZhi.js.map} +1 -1
  61. package/dist/static/assets/{diagram-PSM6KHXK-D-ZMog1-.js → diagram-PSM6KHXK-IAjJ50CC.js} +8 -8
  62. package/dist/static/assets/{diagram-PSM6KHXK-D-ZMog1-.js.map → diagram-PSM6KHXK-IAjJ50CC.js.map} +1 -1
  63. package/dist/static/assets/{diagram-QEK2KX5R-BThSELUH.js → diagram-QEK2KX5R-DiZLndjJ.js} +7 -7
  64. package/dist/static/assets/{diagram-QEK2KX5R-BThSELUH.js.map → diagram-QEK2KX5R-DiZLndjJ.js.map} +1 -1
  65. package/dist/static/assets/{diagram-S2PKOQOG-Di-YN5cd.js → diagram-S2PKOQOG-ZL3Kts-u.js} +7 -7
  66. package/dist/static/assets/{diagram-S2PKOQOG-Di-YN5cd.js.map → diagram-S2PKOQOG-ZL3Kts-u.js.map} +1 -1
  67. package/dist/static/assets/{erDiagram-Q2GNP2WA-lBZ9DITn.js → erDiagram-Q2GNP2WA-DbVLZtGY.js} +5 -5
  68. package/dist/static/assets/{erDiagram-Q2GNP2WA-lBZ9DITn.js.map → erDiagram-Q2GNP2WA-DbVLZtGY.js.map} +1 -1
  69. package/dist/static/assets/{flowDiagram-NV44I4VS-C_60PNQR.js → flowDiagram-NV44I4VS-CVd2p2Br.js} +6 -6
  70. package/dist/static/assets/{flowDiagram-NV44I4VS-C_60PNQR.js.map → flowDiagram-NV44I4VS-CVd2p2Br.js.map} +1 -1
  71. package/dist/static/assets/{ganttDiagram-JELNMOA3-Dvqq-VHJ.js → ganttDiagram-JELNMOA3-6NsYNEcf.js} +3 -3
  72. package/dist/static/assets/{ganttDiagram-JELNMOA3-Dvqq-VHJ.js.map → ganttDiagram-JELNMOA3-6NsYNEcf.js.map} +1 -1
  73. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-BTj8orRe.js → gitGraphDiagram-V2S2FVAM-B0Y7WTbj.js} +8 -8
  74. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-BTj8orRe.js.map → gitGraphDiagram-V2S2FVAM-B0Y7WTbj.js.map} +1 -1
  75. package/dist/static/assets/{graph-BqCzR2Nl.js → graph-BE1Fw6SE.js} +3 -3
  76. package/dist/static/assets/{graph-BqCzR2Nl.js.map → graph-BE1Fw6SE.js.map} +1 -1
  77. package/dist/static/assets/{index-DrTqAfFy.js → index-1Tlt2ebA.js} +727 -297
  78. package/dist/static/assets/index-1Tlt2ebA.js.map +1 -0
  79. package/dist/static/assets/{infoDiagram-HS3SLOUP-DlC6wsrv.js → infoDiagram-HS3SLOUP-p6CQsk4A.js} +6 -6
  80. package/dist/static/assets/{infoDiagram-HS3SLOUP-DlC6wsrv.js.map → infoDiagram-HS3SLOUP-p6CQsk4A.js.map} +1 -1
  81. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Dg_RgtQX.js → journeyDiagram-XKPGCS4Q-DR4cvYtN.js} +5 -5
  82. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Dg_RgtQX.js.map → journeyDiagram-XKPGCS4Q-DR4cvYtN.js.map} +1 -1
  83. package/dist/static/assets/{kanban-definition-3W4ZIXB7-DuGS3lId.js → kanban-definition-3W4ZIXB7-JPOdtj9o.js} +3 -3
  84. package/dist/static/assets/{kanban-definition-3W4ZIXB7-DuGS3lId.js.map → kanban-definition-3W4ZIXB7-JPOdtj9o.js.map} +1 -1
  85. package/dist/static/assets/{layout-FDz2bstZ.js → layout-BOn5O0Mv.js} +5 -5
  86. package/dist/static/assets/{layout-FDz2bstZ.js.map → layout-BOn5O0Mv.js.map} +1 -1
  87. package/dist/static/assets/{linear-CzsdvPGb.js → linear-BVAPTXI-.js} +2 -2
  88. package/dist/static/assets/{linear-CzsdvPGb.js.map → linear-BVAPTXI-.js.map} +1 -1
  89. package/dist/static/assets/{mindmap-definition-VGOIOE7T-WsAF5UNp.js → mindmap-definition-VGOIOE7T-DUJXw6w6.js} +4 -4
  90. package/dist/static/assets/{mindmap-definition-VGOIOE7T-WsAF5UNp.js.map → mindmap-definition-VGOIOE7T-DUJXw6w6.js.map} +1 -1
  91. package/dist/static/assets/{pieDiagram-ADFJNKIX-DJpRJ5ei.js → pieDiagram-ADFJNKIX-76JJOJvZ.js} +8 -8
  92. package/dist/static/assets/{pieDiagram-ADFJNKIX-DJpRJ5ei.js.map → pieDiagram-ADFJNKIX-76JJOJvZ.js.map} +1 -1
  93. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-CMyIzTkY.js → quadrantDiagram-AYHSOK5B-iKXJUo4i.js} +3 -3
  94. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-CMyIzTkY.js.map → quadrantDiagram-AYHSOK5B-iKXJUo4i.js.map} +1 -1
  95. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-D_yqVXGu.js → requirementDiagram-UZGBJVZJ-B0uk_5yk.js} +4 -4
  96. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-D_yqVXGu.js.map → requirementDiagram-UZGBJVZJ-B0uk_5yk.js.map} +1 -1
  97. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-D4-cF724.js → sankeyDiagram-TZEHDZUN-O3weNg52.js} +2 -2
  98. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-D4-cF724.js.map → sankeyDiagram-TZEHDZUN-O3weNg52.js.map} +1 -1
  99. package/dist/static/assets/{sequenceDiagram-WL72ISMW-B7J3gWYN.js → sequenceDiagram-WL72ISMW-DFnXuPNE.js} +4 -4
  100. package/dist/static/assets/{sequenceDiagram-WL72ISMW-B7J3gWYN.js.map → sequenceDiagram-WL72ISMW-DFnXuPNE.js.map} +1 -1
  101. package/dist/static/assets/{stateDiagram-FKZM4ZOC-DwEYYCcu.js → stateDiagram-FKZM4ZOC-BZjZXttD.js} +9 -9
  102. package/dist/static/assets/{stateDiagram-FKZM4ZOC-DwEYYCcu.js.map → stateDiagram-FKZM4ZOC-BZjZXttD.js.map} +1 -1
  103. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-D4LOOQV5.js → stateDiagram-v2-4FDKWEC3-C_R3IF0y.js} +5 -5
  104. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-D4LOOQV5.js.map → stateDiagram-v2-4FDKWEC3-C_R3IF0y.js.map} +1 -1
  105. package/dist/static/assets/{timeline-definition-IT6M3QCI-CyG-TJ_A.js → timeline-definition-IT6M3QCI-Kkhw0x0F.js} +3 -3
  106. package/dist/static/assets/{timeline-definition-IT6M3QCI-CyG-TJ_A.js.map → timeline-definition-IT6M3QCI-Kkhw0x0F.js.map} +1 -1
  107. package/dist/static/assets/{treemap-GDKQZRPO-yY4GiKmU.js → treemap-GDKQZRPO-DCcRUg7I.js} +5 -5
  108. package/dist/static/assets/{treemap-GDKQZRPO-yY4GiKmU.js.map → treemap-GDKQZRPO-DCcRUg7I.js.map} +1 -1
  109. package/dist/static/assets/{xychartDiagram-PRI3JC2R-5TYN_q15.js → xychartDiagram-PRI3JC2R-DQKFjqLB.js} +3 -3
  110. package/dist/static/assets/{xychartDiagram-PRI3JC2R-5TYN_q15.js.map → xychartDiagram-PRI3JC2R-DQKFjqLB.js.map} +1 -1
  111. package/dist/static/index.html +1 -1
  112. package/dist/team-config-updates.js +26 -0
  113. package/dist/team.js +23 -5
  114. package/dist/tools/registry-snapshot.js +5 -1
  115. package/dist/tools/team_mgmt.js +137 -0
  116. package/dist/tools/toolset-manual.js +20 -5
  117. package/package.json +1 -1
  118. package/dist/apps/installed-file.js +0 -207
  119. package/dist/apps/runtime-port.js +0 -91
  120. package/dist/docs/kernel-app-architecture.md +0 -286
  121. package/dist/docs/kernel-app-architecture.zh.md +0 -285
  122. package/dist/llm/driver-entry.js +0 -28
  123. package/dist/llm/driver-v2/context-health.js +0 -121
  124. package/dist/llm/driver-v2/context.js +0 -56
  125. package/dist/llm/driver-v2/core.js +0 -1545
  126. package/dist/llm/driver-v2/index.js +0 -26
  127. package/dist/llm/driver-v2/orchestrator.js +0 -158
  128. package/dist/llm/driver-v2/policy.js +0 -129
  129. package/dist/llm/driver-v2/restore-dialog-hierarchy.js +0 -73
  130. package/dist/llm/driver-v2/round.js +0 -366
  131. package/dist/llm/driver-v2/runtime-utils.js +0 -365
  132. package/dist/llm/driver-v2/saying-events.js +0 -20
  133. package/dist/llm/driver-v2/subdialog-txn.js +0 -42
  134. package/dist/llm/driver-v2/supdialog-response.js +0 -400
  135. package/dist/llm/driver-v2/tellask-bridge.js +0 -1148
  136. package/dist/llm/driver-v2/types.js +0 -10
  137. package/dist/llm/driver-v2-ref-only/context-health.js +0 -121
  138. package/dist/llm/driver-v2-ref-only/context.js +0 -17
  139. package/dist/llm/driver-v2-ref-only/core.js +0 -1710
  140. package/dist/llm/driver-v2-ref-only/index.js +0 -26
  141. package/dist/llm/driver-v2-ref-only/orchestrator.js +0 -158
  142. package/dist/llm/driver-v2-ref-only/policy.js +0 -129
  143. package/dist/llm/driver-v2-ref-only/restore-dialog-hierarchy.js +0 -73
  144. package/dist/llm/driver-v2-ref-only/round.js +0 -366
  145. package/dist/llm/driver-v2-ref-only/runtime-utils.js +0 -473
  146. package/dist/llm/driver-v2-ref-only/saying-events.js +0 -18
  147. package/dist/llm/driver-v2-ref-only/subdialog-txn.js +0 -42
  148. package/dist/llm/driver-v2-ref-only/supdialog-response.js +0 -453
  149. package/dist/llm/driver-v2-ref-only/tellask-bridge.js +0 -1178
  150. package/dist/llm/driver-v2-ref-only/types.js +0 -10
  151. package/dist/static/assets/index-DrTqAfFy.js.map +0 -1
  152. package/dist/tools/prompts/memory/en/errors.md +0 -155
  153. package/dist/tools/prompts/memory/en/index.md +0 -47
  154. package/dist/tools/prompts/memory/en/principles.md +0 -79
  155. package/dist/tools/prompts/memory/en/scenarios.md +0 -174
  156. package/dist/tools/prompts/memory/en/tools.md +0 -154
  157. package/dist/tools/prompts/memory/zh/errors.md +0 -155
  158. package/dist/tools/prompts/memory/zh/index.md +0 -47
  159. package/dist/tools/prompts/memory/zh/principles.md +0 -79
  160. package/dist/tools/prompts/memory/zh/scenarios.md +0 -174
  161. package/dist/tools/prompts/memory/zh/tools.md +0 -154
@@ -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-DsiyUZhi.js","assets/graph-BE1Fw6SE.js","assets/_baseUniq-4QF_OoKK.js","assets/layout-BOn5O0Mv.js","assets/_basePickBy-DSCRdLZO.js","assets/clone-IE0Tnwxn.js","assets/cose-bilkent-S5V4N54A-CfeoQnK-.js","assets/cytoscape.esm-Bm8DJGmZ.js","assets/c4Diagram-YG6GDRKO-CuSqcxrm.js","assets/chunk-TZMSLE5B-GrDvKWzz.js","assets/flowDiagram-NV44I4VS-CVd2p2Br.js","assets/chunk-FMBD7UC4-s7Uar1x2.js","assets/chunk-55IACEB6-DxOFWSAF.js","assets/chunk-QN33PNHL-DC20K06j.js","assets/channel-BYCxsEk5.js","assets/erDiagram-Q2GNP2WA-DbVLZtGY.js","assets/gitGraphDiagram-V2S2FVAM-B0Y7WTbj.js","assets/chunk-4BX2VUAB-N8tlmsFc.js","assets/chunk-QZHKN3VN-6mPLLfRu.js","assets/treemap-GDKQZRPO-DCcRUg7I.js","assets/ganttDiagram-JELNMOA3-6NsYNEcf.js","assets/linear-BVAPTXI-.js","assets/init-ZxktEp_H.js","assets/defaultLocale-B2RvLBDe.js","assets/infoDiagram-HS3SLOUP-p6CQsk4A.js","assets/pieDiagram-ADFJNKIX-76JJOJvZ.js","assets/arc-BVQeKKx9.js","assets/ordinal-CxptdPJm.js","assets/quadrantDiagram-AYHSOK5B-iKXJUo4i.js","assets/xychartDiagram-PRI3JC2R-DQKFjqLB.js","assets/requirementDiagram-UZGBJVZJ-B0uk_5yk.js","assets/sequenceDiagram-WL72ISMW-DFnXuPNE.js","assets/classDiagram-2ON5EDUG-fO59bj9m.js","assets/chunk-B4BG7PRW-C1tSyN_l.js","assets/classDiagram-v2-WZHVMYZB-fO59bj9m.js","assets/stateDiagram-FKZM4ZOC-BZjZXttD.js","assets/chunk-DI55MBZ5-BTmIrFZd.js","assets/stateDiagram-v2-4FDKWEC3-C_R3IF0y.js","assets/journeyDiagram-XKPGCS4Q-DR4cvYtN.js","assets/timeline-definition-IT6M3QCI-Kkhw0x0F.js","assets/mindmap-definition-VGOIOE7T-DUJXw6w6.js","assets/kanban-definition-3W4ZIXB7-JPOdtj9o.js","assets/sankeyDiagram-TZEHDZUN-O3weNg52.js","assets/diagram-S2PKOQOG-ZL3Kts-u.js","assets/diagram-QEK2KX5R-DiZLndjJ.js","assets/blockDiagram-VD42YOAC-CexS18Qs.js","assets/architectureDiagram-VXUJARFQ-B4I8KFTn.js","assets/diagram-PSM6KHXK-IAjJ50CC.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",
@@ -1236,8 +1250,24 @@ class ApiClient {
1236
1250
  async getTaskDocuments() {
1237
1251
  return this.request("/api/task-documents");
1238
1252
  }
1239
- async getToolsRegistry() {
1240
- return this.request(`/api/tools-registry?ts=${Date.now()}`);
1253
+ async getToolsRegistry(options) {
1254
+ const params = new URLSearchParams({ ts: String(Date.now()) });
1255
+ if (typeof options?.agentId === "string" && options.agentId.trim() !== "") {
1256
+ params.set("agentId", options.agentId.trim());
1257
+ }
1258
+ if (typeof options?.taskDocPath === "string" && options.taskDocPath.trim() !== "") {
1259
+ params.set("taskDocPath", options.taskDocPath.trim());
1260
+ }
1261
+ if (typeof options?.rootId === "string" && options.rootId.trim() !== "") {
1262
+ params.set("rootId", options.rootId.trim());
1263
+ }
1264
+ if (typeof options?.selfId === "string" && options.selfId.trim() !== "") {
1265
+ params.set("selfId", options.selfId.trim());
1266
+ }
1267
+ if (options?.status === "running" || options?.status === "completed" || options?.status === "archived") {
1268
+ params.set("status", options.status);
1269
+ }
1270
+ return this.request(`/api/tools-registry?${params.toString()}`);
1241
1271
  }
1242
1272
  async getRtwsDiligence(lang) {
1243
1273
  return this.request(`/api/rtws/diligence?lang=${encodeURIComponent(lang)}`);
@@ -97268,12 +97298,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
97268
97298
  registerLayoutLoaders([
97269
97299
  {
97270
97300
  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")
97301
+ loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./dagre-6UL2VRFP-DsiyUZhi.js"), true ? __vite__mapDeps([0,1,2,3,4,5]) : void 0), "loader")
97272
97302
  },
97273
97303
  ...[
97274
97304
  {
97275
97305
  name: "cose-bilkent",
97276
- loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./cose-bilkent-S5V4N54A-BCBalM7p.js"), true ? __vite__mapDeps([6,7]) : void 0), "loader")
97306
+ loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./cose-bilkent-S5V4N54A-CfeoQnK-.js"), true ? __vite__mapDeps([6,7]) : void 0), "loader")
97277
97307
  }
97278
97308
  ]
97279
97309
  ]);
@@ -97713,7 +97743,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
97713
97743
  }, "detector");
97714
97744
  var loader = /* @__PURE__ */ __name(async () => {
97715
97745
  const { diagram: diagram2 } = await __vitePreload(async () => {
97716
- const { diagram: diagram22 } = await import("./c4Diagram-YG6GDRKO-BKFNexn4.js");
97746
+ const { diagram: diagram22 } = await import("./c4Diagram-YG6GDRKO-CuSqcxrm.js");
97717
97747
  return { diagram: diagram22 };
97718
97748
  }, true ? __vite__mapDeps([8,9]) : void 0);
97719
97749
  return { id, diagram: diagram2 };
@@ -97733,7 +97763,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
97733
97763
  }, "detector");
97734
97764
  var loader2 = /* @__PURE__ */ __name(async () => {
97735
97765
  const { diagram: diagram2 } = await __vitePreload(async () => {
97736
- const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-C_60PNQR.js");
97766
+ const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-CVd2p2Br.js");
97737
97767
  return { diagram: diagram22 };
97738
97768
  }, true ? __vite__mapDeps([10,11,12,13,14]) : void 0);
97739
97769
  return { id: id2, diagram: diagram2 };
@@ -97759,7 +97789,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
97759
97789
  }, "detector");
97760
97790
  var loader3 = /* @__PURE__ */ __name(async () => {
97761
97791
  const { diagram: diagram2 } = await __vitePreload(async () => {
97762
- const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-C_60PNQR.js");
97792
+ const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-CVd2p2Br.js");
97763
97793
  return { diagram: diagram22 };
97764
97794
  }, true ? __vite__mapDeps([10,11,12,13,14]) : void 0);
97765
97795
  return { id: id3, diagram: diagram2 };
@@ -97776,7 +97806,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
97776
97806
  }, "detector");
97777
97807
  var loader4 = /* @__PURE__ */ __name(async () => {
97778
97808
  const { diagram: diagram2 } = await __vitePreload(async () => {
97779
- const { diagram: diagram22 } = await import("./erDiagram-Q2GNP2WA-lBZ9DITn.js");
97809
+ const { diagram: diagram22 } = await import("./erDiagram-Q2GNP2WA-DbVLZtGY.js");
97780
97810
  return { diagram: diagram22 };
97781
97811
  }, true ? __vite__mapDeps([15,12,13,14]) : void 0);
97782
97812
  return { id: id4, diagram: diagram2 };
@@ -97793,7 +97823,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
97793
97823
  }, "detector");
97794
97824
  var loader5 = /* @__PURE__ */ __name(async () => {
97795
97825
  const { diagram: diagram2 } = await __vitePreload(async () => {
97796
- const { diagram: diagram22 } = await import("./gitGraphDiagram-V2S2FVAM-BTj8orRe.js");
97826
+ const { diagram: diagram22 } = await import("./gitGraphDiagram-V2S2FVAM-B0Y7WTbj.js");
97797
97827
  return { diagram: diagram22 };
97798
97828
  }, true ? __vite__mapDeps([16,17,18,19,2,4,5]) : void 0);
97799
97829
  return { id: id5, diagram: diagram2 };
@@ -97810,7 +97840,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
97810
97840
  }, "detector");
97811
97841
  var loader6 = /* @__PURE__ */ __name(async () => {
97812
97842
  const { diagram: diagram2 } = await __vitePreload(async () => {
97813
- const { diagram: diagram22 } = await import("./ganttDiagram-JELNMOA3-Dvqq-VHJ.js");
97843
+ const { diagram: diagram22 } = await import("./ganttDiagram-JELNMOA3-6NsYNEcf.js");
97814
97844
  return { diagram: diagram22 };
97815
97845
  }, true ? __vite__mapDeps([20,21,22,23]) : void 0);
97816
97846
  return { id: id6, diagram: diagram2 };
@@ -97827,7 +97857,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
97827
97857
  }, "detector");
97828
97858
  var loader7 = /* @__PURE__ */ __name(async () => {
97829
97859
  const { diagram: diagram2 } = await __vitePreload(async () => {
97830
- const { diagram: diagram22 } = await import("./infoDiagram-HS3SLOUP-DlC6wsrv.js");
97860
+ const { diagram: diagram22 } = await import("./infoDiagram-HS3SLOUP-p6CQsk4A.js");
97831
97861
  return { diagram: diagram22 };
97832
97862
  }, true ? __vite__mapDeps([24,19,2,4,5]) : void 0);
97833
97863
  return { id: id7, diagram: diagram2 };
@@ -97843,7 +97873,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
97843
97873
  }, "detector");
97844
97874
  var loader8 = /* @__PURE__ */ __name(async () => {
97845
97875
  const { diagram: diagram2 } = await __vitePreload(async () => {
97846
- const { diagram: diagram22 } = await import("./pieDiagram-ADFJNKIX-DJpRJ5ei.js");
97876
+ const { diagram: diagram22 } = await import("./pieDiagram-ADFJNKIX-76JJOJvZ.js");
97847
97877
  return { diagram: diagram22 };
97848
97878
  }, true ? __vite__mapDeps([25,17,19,2,4,5,26,27,22]) : void 0);
97849
97879
  return { id: id8, diagram: diagram2 };
@@ -97859,7 +97889,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
97859
97889
  }, "detector");
97860
97890
  var loader9 = /* @__PURE__ */ __name(async () => {
97861
97891
  const { diagram: diagram2 } = await __vitePreload(async () => {
97862
- const { diagram: diagram22 } = await import("./quadrantDiagram-AYHSOK5B-CMyIzTkY.js");
97892
+ const { diagram: diagram22 } = await import("./quadrantDiagram-AYHSOK5B-iKXJUo4i.js");
97863
97893
  return { diagram: diagram22 };
97864
97894
  }, true ? __vite__mapDeps([28,21,22,23]) : void 0);
97865
97895
  return { id: id9, diagram: diagram2 };
@@ -97876,7 +97906,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
97876
97906
  }, "detector");
97877
97907
  var loader10 = /* @__PURE__ */ __name(async () => {
97878
97908
  const { diagram: diagram2 } = await __vitePreload(async () => {
97879
- const { diagram: diagram22 } = await import("./xychartDiagram-PRI3JC2R-5TYN_q15.js");
97909
+ const { diagram: diagram22 } = await import("./xychartDiagram-PRI3JC2R-DQKFjqLB.js");
97880
97910
  return { diagram: diagram22 };
97881
97911
  }, true ? __vite__mapDeps([29,22,27,21,23]) : void 0);
97882
97912
  return { id: id10, diagram: diagram2 };
@@ -97893,7 +97923,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
97893
97923
  }, "detector");
97894
97924
  var loader11 = /* @__PURE__ */ __name(async () => {
97895
97925
  const { diagram: diagram2 } = await __vitePreload(async () => {
97896
- const { diagram: diagram22 } = await import("./requirementDiagram-UZGBJVZJ-D_yqVXGu.js");
97926
+ const { diagram: diagram22 } = await import("./requirementDiagram-UZGBJVZJ-B0uk_5yk.js");
97897
97927
  return { diagram: diagram22 };
97898
97928
  }, true ? __vite__mapDeps([30,12,13]) : void 0);
97899
97929
  return { id: id11, diagram: diagram2 };
@@ -97910,7 +97940,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
97910
97940
  }, "detector");
97911
97941
  var loader12 = /* @__PURE__ */ __name(async () => {
97912
97942
  const { diagram: diagram2 } = await __vitePreload(async () => {
97913
- const { diagram: diagram22 } = await import("./sequenceDiagram-WL72ISMW-B7J3gWYN.js");
97943
+ const { diagram: diagram22 } = await import("./sequenceDiagram-WL72ISMW-DFnXuPNE.js");
97914
97944
  return { diagram: diagram22 };
97915
97945
  }, true ? __vite__mapDeps([31,9,18]) : void 0);
97916
97946
  return { id: id12, diagram: diagram2 };
@@ -97930,7 +97960,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
97930
97960
  }, "detector");
97931
97961
  var loader13 = /* @__PURE__ */ __name(async () => {
97932
97962
  const { diagram: diagram2 } = await __vitePreload(async () => {
97933
- const { diagram: diagram22 } = await import("./classDiagram-2ON5EDUG-C-7R0QB6.js");
97963
+ const { diagram: diagram22 } = await import("./classDiagram-2ON5EDUG-fO59bj9m.js");
97934
97964
  return { diagram: diagram22 };
97935
97965
  }, true ? __vite__mapDeps([32,33,11,12,13]) : void 0);
97936
97966
  return { id: id13, diagram: diagram2 };
@@ -97950,7 +97980,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
97950
97980
  }, "detector");
97951
97981
  var loader14 = /* @__PURE__ */ __name(async () => {
97952
97982
  const { diagram: diagram2 } = await __vitePreload(async () => {
97953
- const { diagram: diagram22 } = await import("./classDiagram-v2-WZHVMYZB-C-7R0QB6.js");
97983
+ const { diagram: diagram22 } = await import("./classDiagram-v2-WZHVMYZB-fO59bj9m.js");
97954
97984
  return { diagram: diagram22 };
97955
97985
  }, true ? __vite__mapDeps([34,33,11,12,13]) : void 0);
97956
97986
  return { id: id14, diagram: diagram2 };
@@ -97970,7 +98000,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
97970
98000
  }, "detector");
97971
98001
  var loader15 = /* @__PURE__ */ __name(async () => {
97972
98002
  const { diagram: diagram2 } = await __vitePreload(async () => {
97973
- const { diagram: diagram22 } = await import("./stateDiagram-FKZM4ZOC-DwEYYCcu.js");
98003
+ const { diagram: diagram22 } = await import("./stateDiagram-FKZM4ZOC-BZjZXttD.js");
97974
98004
  return { diagram: diagram22 };
97975
98005
  }, true ? __vite__mapDeps([35,36,12,13,1,2,3,4]) : void 0);
97976
98006
  return { id: id15, diagram: diagram2 };
@@ -97993,7 +98023,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
97993
98023
  }, "detector");
97994
98024
  var loader16 = /* @__PURE__ */ __name(async () => {
97995
98025
  const { diagram: diagram2 } = await __vitePreload(async () => {
97996
- const { diagram: diagram22 } = await import("./stateDiagram-v2-4FDKWEC3-D4LOOQV5.js");
98026
+ const { diagram: diagram22 } = await import("./stateDiagram-v2-4FDKWEC3-C_R3IF0y.js");
97997
98027
  return { diagram: diagram22 };
97998
98028
  }, true ? __vite__mapDeps([37,36,12,13]) : void 0);
97999
98029
  return { id: id16, diagram: diagram2 };
@@ -98010,7 +98040,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
98010
98040
  }, "detector");
98011
98041
  var loader17 = /* @__PURE__ */ __name(async () => {
98012
98042
  const { diagram: diagram2 } = await __vitePreload(async () => {
98013
- const { diagram: diagram22 } = await import("./journeyDiagram-XKPGCS4Q-Dg_RgtQX.js");
98043
+ const { diagram: diagram22 } = await import("./journeyDiagram-XKPGCS4Q-DR4cvYtN.js");
98014
98044
  return { diagram: diagram22 };
98015
98045
  }, true ? __vite__mapDeps([38,9,11,26]) : void 0);
98016
98046
  return { id: id17, diagram: diagram2 };
@@ -98080,7 +98110,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
98080
98110
  }, "detector");
98081
98111
  var loader18 = /* @__PURE__ */ __name(async () => {
98082
98112
  const { diagram: diagram2 } = await __vitePreload(async () => {
98083
- const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-C_60PNQR.js");
98113
+ const { diagram: diagram22 } = await import("./flowDiagram-NV44I4VS-CVd2p2Br.js");
98084
98114
  return { diagram: diagram22 };
98085
98115
  }, true ? __vite__mapDeps([10,11,12,13,14]) : void 0);
98086
98116
  return { id: id18, diagram: diagram2 };
@@ -98097,7 +98127,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
98097
98127
  }, "detector");
98098
98128
  var loader19 = /* @__PURE__ */ __name(async () => {
98099
98129
  const { diagram: diagram2 } = await __vitePreload(async () => {
98100
- const { diagram: diagram22 } = await import("./timeline-definition-IT6M3QCI-CyG-TJ_A.js");
98130
+ const { diagram: diagram22 } = await import("./timeline-definition-IT6M3QCI-Kkhw0x0F.js");
98101
98131
  return { diagram: diagram22 };
98102
98132
  }, true ? __vite__mapDeps([39,26]) : void 0);
98103
98133
  return { id: id19, diagram: diagram2 };
@@ -98114,7 +98144,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
98114
98144
  }, "detector");
98115
98145
  var loader20 = /* @__PURE__ */ __name(async () => {
98116
98146
  const { diagram: diagram2 } = await __vitePreload(async () => {
98117
- const { diagram: diagram22 } = await import("./mindmap-definition-VGOIOE7T-WsAF5UNp.js");
98147
+ const { diagram: diagram22 } = await import("./mindmap-definition-VGOIOE7T-DUJXw6w6.js");
98118
98148
  return { diagram: diagram22 };
98119
98149
  }, true ? __vite__mapDeps([40,12,13]) : void 0);
98120
98150
  return { id: id20, diagram: diagram2 };
@@ -98131,7 +98161,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
98131
98161
  }, "detector");
98132
98162
  var loader21 = /* @__PURE__ */ __name(async () => {
98133
98163
  const { diagram: diagram2 } = await __vitePreload(async () => {
98134
- const { diagram: diagram22 } = await import("./kanban-definition-3W4ZIXB7-DuGS3lId.js");
98164
+ const { diagram: diagram22 } = await import("./kanban-definition-3W4ZIXB7-JPOdtj9o.js");
98135
98165
  return { diagram: diagram22 };
98136
98166
  }, true ? __vite__mapDeps([41,11]) : void 0);
98137
98167
  return { id: id21, diagram: diagram2 };
@@ -98148,7 +98178,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
98148
98178
  }, "detector");
98149
98179
  var loader22 = /* @__PURE__ */ __name(async () => {
98150
98180
  const { diagram: diagram2 } = await __vitePreload(async () => {
98151
- const { diagram: diagram22 } = await import("./sankeyDiagram-TZEHDZUN-D4-cF724.js");
98181
+ const { diagram: diagram22 } = await import("./sankeyDiagram-TZEHDZUN-O3weNg52.js");
98152
98182
  return { diagram: diagram22 };
98153
98183
  }, true ? __vite__mapDeps([42,27,22]) : void 0);
98154
98184
  return { id: id22, diagram: diagram2 };
@@ -98165,7 +98195,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
98165
98195
  }, "detector");
98166
98196
  var loader23 = /* @__PURE__ */ __name(async () => {
98167
98197
  const { diagram: diagram2 } = await __vitePreload(async () => {
98168
- const { diagram: diagram22 } = await import("./diagram-S2PKOQOG-Di-YN5cd.js");
98198
+ const { diagram: diagram22 } = await import("./diagram-S2PKOQOG-ZL3Kts-u.js");
98169
98199
  return { diagram: diagram22 };
98170
98200
  }, true ? __vite__mapDeps([43,17,19,2,4,5]) : void 0);
98171
98201
  return { id: id23, diagram: diagram2 };
@@ -98181,7 +98211,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
98181
98211
  }, "detector");
98182
98212
  var loader24 = /* @__PURE__ */ __name(async () => {
98183
98213
  const { diagram: diagram2 } = await __vitePreload(async () => {
98184
- const { diagram: diagram22 } = await import("./diagram-QEK2KX5R-BThSELUH.js");
98214
+ const { diagram: diagram22 } = await import("./diagram-QEK2KX5R-DiZLndjJ.js");
98185
98215
  return { diagram: diagram22 };
98186
98216
  }, true ? __vite__mapDeps([44,17,19,2,4,5]) : void 0);
98187
98217
  return { id: id24, diagram: diagram2 };
@@ -98197,7 +98227,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
98197
98227
  }, "detector");
98198
98228
  var loader25 = /* @__PURE__ */ __name(async () => {
98199
98229
  const { diagram: diagram2 } = await __vitePreload(async () => {
98200
- const { diagram: diagram22 } = await import("./blockDiagram-VD42YOAC-wvs0G30c.js");
98230
+ const { diagram: diagram22 } = await import("./blockDiagram-VD42YOAC-CexS18Qs.js");
98201
98231
  return { diagram: diagram22 };
98202
98232
  }, true ? __vite__mapDeps([45,11,5,2,1,14]) : void 0);
98203
98233
  return { id: id25, diagram: diagram2 };
@@ -98214,7 +98244,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
98214
98244
  }, "detector");
98215
98245
  var loader26 = /* @__PURE__ */ __name(async () => {
98216
98246
  const { diagram: diagram2 } = await __vitePreload(async () => {
98217
- const { diagram: diagram22 } = await import("./architectureDiagram-VXUJARFQ-Cxf4pmYG.js");
98247
+ const { diagram: diagram22 } = await import("./architectureDiagram-VXUJARFQ-B4I8KFTn.js");
98218
98248
  return { diagram: diagram22 };
98219
98249
  }, true ? __vite__mapDeps([46,17,19,2,4,5,7]) : void 0);
98220
98250
  return { id: id26, diagram: diagram2 };
@@ -98231,7 +98261,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
98231
98261
  }, "detector");
98232
98262
  var loader27 = /* @__PURE__ */ __name(async () => {
98233
98263
  const { diagram: diagram2 } = await __vitePreload(async () => {
98234
- const { diagram: diagram22 } = await import("./diagram-PSM6KHXK-D-ZMog1-.js");
98264
+ const { diagram: diagram22 } = await import("./diagram-PSM6KHXK-IAjJ50CC.js");
98235
98265
  return { diagram: diagram22 };
98236
98266
  }, true ? __vite__mapDeps([47,13,17,19,2,4,5,23,27,22]) : void 0);
98237
98267
  return { id: id27, diagram: diagram2 };
@@ -99509,7 +99539,6 @@ const CALLING_EXPAND_STEP_VIEWPORT_RATIO = 1 / 3;
99509
99539
  const AUTO_SCROLL_FOLLOW_THRESHOLD_PX = 32;
99510
99540
  const AUTO_SCROLL_WHEEL_RESISTANCE_PX = 56;
99511
99541
  const AUTO_SCROLL_WHEEL_DECAY_MS = 520;
99512
- const AUTO_SCROLL_WHEEL_SETTLE_POLL_MS = 96;
99513
99542
  const AUTO_SCROLL_WHEEL_MAX_RESISTANCE = 1.8;
99514
99543
  const AUTO_SCROLL_WHEEL_IDLE_EPSILON = 0.03;
99515
99544
  class DomindsDialogContainer extends HTMLElement {
@@ -99520,19 +99549,25 @@ class DomindsDialogContainer extends HTMLElement {
99520
99549
  this.serverWorkLanguage = "en";
99521
99550
  this.runState = null;
99522
99551
  this.suppressEvents = false;
99523
- this.autoScrollEnabled = true;
99552
+ this.autoScrollMode = "following";
99524
99553
  this.autoScrollPinnedToBottom = true;
99525
- this.autoScrollLastUserRemainingPx = 0;
99554
+ this.autoScrollLastRemainingPx = 0;
99526
99555
  this.scrollContainer = null;
99527
99556
  this.boundOnScrollContainerScroll = null;
99528
99557
  this.boundOnScrollContainerWheel = null;
99558
+ this.boundOnScrollContainerPointerDown = null;
99559
+ this.boundOnWindowPointerUp = null;
99560
+ this.boundOnWindowKeyDown = null;
99529
99561
  this.autoScrollResizeObserver = null;
99530
99562
  this.autoScrollResizeScrollRaf = null;
99531
99563
  this.autoScrollResizeObservedEl = null;
99564
+ this.autoScrollRealignRaf = null;
99532
99565
  this.autoScrollWheelResistance = 0;
99533
99566
  this.autoScrollWheelLastDecayAtMs = 0;
99534
99567
  this.autoScrollWheelLastUpEventAtMs = 0;
99535
- this.autoScrollWheelSettleTimer = null;
99568
+ this.autoScrollPointerActive = false;
99569
+ this.autoScrollKeyboardIntent = "none";
99570
+ this.autoScrollKeyboardIntentRaf = null;
99536
99571
  this.teammateCallingSectionBySeq = /* @__PURE__ */ new Map();
99537
99572
  this.callingSectionByCallId = /* @__PURE__ */ new Map();
99538
99573
  this.pendingCallTimingById = /* @__PURE__ */ new Map();
@@ -99542,6 +99577,7 @@ class DomindsDialogContainer extends HTMLElement {
99542
99577
  this.queuedUserBubbleByMsgId = /* @__PURE__ */ new Map();
99543
99578
  this.pendingTeammateCallAnchorByGenseq = /* @__PURE__ */ new Map();
99544
99579
  this.progressiveExpandObserverByTarget = /* @__PURE__ */ new WeakMap();
99580
+ this.retryPanelState = { kind: "hidden" };
99545
99581
  this.pendingScrollRequest = null;
99546
99582
  this.highlightSeq = 0;
99547
99583
  this.pendingHighlight = null;
@@ -99679,13 +99715,13 @@ class DomindsDialogContainer extends HTMLElement {
99679
99715
  if (name !== "ui-language") return;
99680
99716
  const parsed = normalizeLanguageCode(newValue || "");
99681
99717
  this.uiLanguage = parsed ?? "en";
99682
- this.updateResumePanel();
99683
99718
  }
99684
99719
  async connectedCallback() {
99685
99720
  const parsed = normalizeLanguageCode(this.getAttribute("ui-language") || "");
99686
99721
  this.uiLanguage = parsed ?? "en";
99687
99722
  this.render();
99688
99723
  this.ensureScrollContainerListener();
99724
+ this.ensureAutoScrollWindowListeners();
99689
99725
  this.installCallSiteScrollListeners();
99690
99726
  await this.loadTeamConfiguration();
99691
99727
  const sr = this.shadowRoot;
@@ -99823,6 +99859,7 @@ class DomindsDialogContainer extends HTMLElement {
99823
99859
  }
99824
99860
  disconnectedCallback() {
99825
99861
  this.detachScrollContainerListener();
99862
+ this.detachAutoScrollWindowListeners();
99826
99863
  this.cleanup();
99827
99864
  }
99828
99865
  installCallSiteScrollListeners() {
@@ -99917,10 +99954,43 @@ class DomindsDialogContainer extends HTMLElement {
99917
99954
  if (container && wheelListener) {
99918
99955
  container.removeEventListener("wheel", wheelListener);
99919
99956
  }
99957
+ const pointerDownListener = this.boundOnScrollContainerPointerDown;
99958
+ if (container && pointerDownListener) {
99959
+ container.removeEventListener("pointerdown", pointerDownListener);
99960
+ }
99920
99961
  this.scrollContainer = null;
99921
99962
  this.boundOnScrollContainerScroll = null;
99922
99963
  this.boundOnScrollContainerWheel = null;
99923
- this.stopAutoScrollWheelSettleTimer();
99964
+ this.boundOnScrollContainerPointerDown = null;
99965
+ this.resetAutoScrollTransientState();
99966
+ }
99967
+ ensureAutoScrollWindowListeners() {
99968
+ if (this.boundOnWindowPointerUp === null) {
99969
+ this.boundOnWindowPointerUp = () => {
99970
+ this.autoScrollPointerActive = false;
99971
+ };
99972
+ window.addEventListener("pointerup", this.boundOnWindowPointerUp, { passive: true });
99973
+ window.addEventListener("pointercancel", this.boundOnWindowPointerUp, { passive: true });
99974
+ }
99975
+ if (this.boundOnWindowKeyDown === null) {
99976
+ this.boundOnWindowKeyDown = (event) => {
99977
+ this.handleAutoScrollKeyDown(event);
99978
+ };
99979
+ window.addEventListener("keydown", this.boundOnWindowKeyDown, { passive: true });
99980
+ }
99981
+ }
99982
+ detachAutoScrollWindowListeners() {
99983
+ if (this.boundOnWindowPointerUp !== null) {
99984
+ window.removeEventListener("pointerup", this.boundOnWindowPointerUp);
99985
+ window.removeEventListener("pointercancel", this.boundOnWindowPointerUp);
99986
+ this.boundOnWindowPointerUp = null;
99987
+ }
99988
+ if (this.boundOnWindowKeyDown !== null) {
99989
+ window.removeEventListener("keydown", this.boundOnWindowKeyDown);
99990
+ this.boundOnWindowKeyDown = null;
99991
+ }
99992
+ this.autoScrollPointerActive = false;
99993
+ this.clearAutoScrollKeyboardIntent();
99924
99994
  }
99925
99995
  ensureScrollContainerListener() {
99926
99996
  const container = this.parentElement instanceof HTMLElement ? this.parentElement : null;
@@ -99936,8 +100006,14 @@ class DomindsDialogContainer extends HTMLElement {
99936
100006
  this.boundOnScrollContainerWheel = (event) => {
99937
100007
  this.handleAutoScrollWheel(event);
99938
100008
  };
100009
+ this.boundOnScrollContainerPointerDown = () => {
100010
+ this.autoScrollPointerActive = true;
100011
+ };
99939
100012
  container.addEventListener("scroll", this.boundOnScrollContainerScroll, { passive: true });
99940
100013
  container.addEventListener("wheel", this.boundOnScrollContainerWheel, { passive: true });
100014
+ container.addEventListener("pointerdown", this.boundOnScrollContainerPointerDown, {
100015
+ passive: true
100016
+ });
99941
100017
  this.refreshAutoScrollStateFromScroll(container);
99942
100018
  }
99943
100019
  getScrollContainerRemainingPx(container) {
@@ -99946,10 +100022,17 @@ class DomindsDialogContainer extends HTMLElement {
99946
100022
  isScrollContainerAtBottom(container) {
99947
100023
  return this.getScrollContainerRemainingPx(container) <= AUTO_SCROLL_FOLLOW_THRESHOLD_PX;
99948
100024
  }
99949
- stopAutoScrollWheelSettleTimer() {
99950
- if (this.autoScrollWheelSettleTimer === null) return;
99951
- window.clearTimeout(this.autoScrollWheelSettleTimer);
99952
- this.autoScrollWheelSettleTimer = null;
100025
+ isAutoScrollFollowing() {
100026
+ return this.autoScrollMode === "following";
100027
+ }
100028
+ resetAutoScrollWheelResistance() {
100029
+ this.autoScrollWheelResistance = 0;
100030
+ this.autoScrollWheelLastDecayAtMs = 0;
100031
+ this.autoScrollWheelLastUpEventAtMs = 0;
100032
+ }
100033
+ resetAutoScrollTransientState() {
100034
+ this.resetAutoScrollWheelResistance();
100035
+ this.clearAutoScrollKeyboardIntent();
99953
100036
  }
99954
100037
  decayAutoScrollWheelResistance(nowMs) {
99955
100038
  if (this.autoScrollWheelLastDecayAtMs === 0) {
@@ -99969,40 +100052,140 @@ class DomindsDialogContainer extends HTMLElement {
99969
100052
  getAutoScrollWheelResistancePx(nowMs) {
99970
100053
  return this.decayAutoScrollWheelResistance(nowMs) * AUTO_SCROLL_WHEEL_RESISTANCE_PX;
99971
100054
  }
99972
- recomputeAutoScrollEnabled(nowMs) {
99973
- const effectiveRemainingPx = this.autoScrollLastUserRemainingPx + (this.autoScrollPinnedToBottom ? this.getAutoScrollWheelResistancePx(nowMs) : 0);
99974
- this.autoScrollEnabled = effectiveRemainingPx <= AUTO_SCROLL_FOLLOW_THRESHOLD_PX;
100055
+ clearAutoScrollKeyboardIntent() {
100056
+ if (this.autoScrollKeyboardIntentRaf !== null) {
100057
+ cancelAnimationFrame(this.autoScrollKeyboardIntentRaf);
100058
+ this.autoScrollKeyboardIntentRaf = null;
100059
+ }
100060
+ this.autoScrollKeyboardIntent = "none";
100061
+ }
100062
+ scheduleAutoScrollKeyboardIntentClear() {
100063
+ if (this.autoScrollKeyboardIntentRaf !== null) return;
100064
+ this.autoScrollKeyboardIntentRaf = requestAnimationFrame(() => {
100065
+ this.autoScrollKeyboardIntentRaf = null;
100066
+ this.autoScrollKeyboardIntent = "none";
100067
+ });
100068
+ }
100069
+ pauseAutoScroll() {
100070
+ this.autoScrollMode = "paused";
100071
+ this.resetAutoScrollWheelResistance();
99975
100072
  this.updateScrollToBottomButton();
99976
100073
  }
100074
+ resumeAutoScroll() {
100075
+ this.autoScrollMode = "following";
100076
+ this.autoScrollPinnedToBottom = true;
100077
+ this.autoScrollLastRemainingPx = 0;
100078
+ this.autoScrollPointerActive = false;
100079
+ this.clearAutoScrollKeyboardIntent();
100080
+ this.resetAutoScrollWheelResistance();
100081
+ this.updateScrollToBottomButton();
100082
+ }
100083
+ isEditableTarget(target) {
100084
+ if (!(target instanceof HTMLElement)) return false;
100085
+ if (target.isContentEditable) return true;
100086
+ const tagName = target.tagName;
100087
+ return tagName === "INPUT" || tagName === "TEXTAREA" || tagName === "SELECT";
100088
+ }
100089
+ isAutoScrollNavigationKey(key) {
100090
+ return key === "Home" || key === "End" || key === "PageUp" || key === "PageDown" || key === "ArrowUp" || key === "ArrowDown" || key === " " || key === "Spacebar";
100091
+ }
100092
+ isTowardLatestNavigationKey(event) {
100093
+ if (event.key === "End" || event.key === "PageDown" || event.key === "ArrowDown") {
100094
+ return true;
100095
+ }
100096
+ if (event.key === " " || event.key === "Spacebar") {
100097
+ return event.shiftKey !== true;
100098
+ }
100099
+ return false;
100100
+ }
100101
+ didUserMoveTowardLatest(nextRemainingPx) {
100102
+ return nextRemainingPx <= this.autoScrollLastRemainingPx + 0.5;
100103
+ }
100104
+ tryResumeAutoScrollFromBottom() {
100105
+ const container = this.scrollContainer;
100106
+ if (!container) return false;
100107
+ if (this.isAutoScrollFollowing()) return false;
100108
+ if (!this.isScrollContainerAtBottom(container)) return false;
100109
+ this.resumeAutoScroll();
100110
+ this.scrollToBottom({ force: true });
100111
+ return true;
100112
+ }
100113
+ handleAutoScrollKeyDown(event) {
100114
+ if (!this.isAutoScrollNavigationKey(event.key)) return;
100115
+ if (event.defaultPrevented) return;
100116
+ if (event.metaKey || event.ctrlKey || event.altKey) return;
100117
+ if (this.isEditableTarget(event.target)) return;
100118
+ if (this.isTowardLatestNavigationKey(event) && this.tryResumeAutoScrollFromBottom()) {
100119
+ return;
100120
+ }
100121
+ if (this.isTowardLatestNavigationKey(event)) {
100122
+ this.autoScrollKeyboardIntent = "toward_latest";
100123
+ this.scheduleAutoScrollKeyboardIntentClear();
100124
+ return;
100125
+ }
100126
+ this.pauseAutoScroll();
100127
+ }
100128
+ scheduleAutoScrollRealign() {
100129
+ if (this.autoScrollRealignRaf !== null) return;
100130
+ this.autoScrollRealignRaf = requestAnimationFrame(() => {
100131
+ this.autoScrollRealignRaf = null;
100132
+ if (!this.isAutoScrollFollowing()) return;
100133
+ this.scrollToBottom({ force: true });
100134
+ });
100135
+ }
99977
100136
  refreshAutoScrollStateFromScroll(container) {
99978
100137
  const remainingPx = this.getScrollContainerRemainingPx(container);
99979
- this.autoScrollPinnedToBottom = this.isScrollContainerAtBottom(container);
99980
- this.autoScrollLastUserRemainingPx = remainingPx;
99981
- this.recomputeAutoScrollEnabled(performance.now());
100138
+ const atBottom = this.isScrollContainerAtBottom(container);
100139
+ const movedTowardLatest = this.didUserMoveTowardLatest(remainingPx);
100140
+ this.autoScrollPinnedToBottom = atBottom;
100141
+ if (this.autoScrollPointerActive) {
100142
+ if (this.isAutoScrollFollowing()) {
100143
+ if (!movedTowardLatest) {
100144
+ this.pauseAutoScroll();
100145
+ } else if (!atBottom) {
100146
+ this.scheduleAutoScrollRealign();
100147
+ }
100148
+ }
100149
+ this.autoScrollLastRemainingPx = remainingPx;
100150
+ return;
100151
+ }
100152
+ if (this.autoScrollKeyboardIntent === "toward_latest") {
100153
+ if (this.isAutoScrollFollowing() && !atBottom) {
100154
+ this.scheduleAutoScrollRealign();
100155
+ }
100156
+ this.autoScrollLastRemainingPx = remainingPx;
100157
+ this.clearAutoScrollKeyboardIntent();
100158
+ return;
100159
+ }
100160
+ if (this.isAutoScrollFollowing()) {
100161
+ if (!atBottom) {
100162
+ this.scheduleAutoScrollRealign();
100163
+ }
100164
+ this.autoScrollLastRemainingPx = 0;
100165
+ this.updateScrollToBottomButton();
100166
+ return;
100167
+ }
100168
+ this.autoScrollLastRemainingPx = remainingPx;
100169
+ this.updateScrollToBottomButton();
99982
100170
  }
99983
100171
  resetAutoScrollState(enabled) {
99984
- this.autoScrollPinnedToBottom = enabled;
99985
- this.autoScrollLastUserRemainingPx = enabled ? 0 : AUTO_SCROLL_FOLLOW_THRESHOLD_PX + 1;
99986
- this.autoScrollEnabled = enabled;
99987
- this.autoScrollWheelResistance = 0;
99988
- this.autoScrollWheelLastDecayAtMs = 0;
99989
- this.autoScrollWheelLastUpEventAtMs = 0;
99990
- this.stopAutoScrollWheelSettleTimer();
100172
+ if (enabled) {
100173
+ this.resumeAutoScroll();
100174
+ return;
100175
+ }
100176
+ this.autoScrollMode = "paused";
100177
+ this.autoScrollPinnedToBottom = false;
100178
+ this.autoScrollLastRemainingPx = AUTO_SCROLL_FOLLOW_THRESHOLD_PX + 1;
100179
+ this.autoScrollPointerActive = false;
100180
+ this.clearAutoScrollKeyboardIntent();
100181
+ this.resetAutoScrollWheelResistance();
99991
100182
  this.updateScrollToBottomButton();
99992
100183
  }
99993
- scheduleAutoScrollWheelSettle() {
99994
- if (!this.autoScrollPinnedToBottom) return;
99995
- if (this.autoScrollWheelSettleTimer !== null) return;
99996
- this.autoScrollWheelSettleTimer = window.setTimeout(() => {
99997
- this.autoScrollWheelSettleTimer = null;
99998
- this.recomputeAutoScrollEnabled(performance.now());
99999
- if (this.autoScrollWheelResistance >= AUTO_SCROLL_WHEEL_IDLE_EPSILON) {
100000
- this.scheduleAutoScrollWheelSettle();
100001
- }
100002
- }, AUTO_SCROLL_WHEEL_SETTLE_POLL_MS);
100003
- }
100004
100184
  handleAutoScrollWheel(event) {
100005
100185
  if (!Number.isFinite(event.deltaY) || event.deltaY === 0) return;
100186
+ if (event.deltaY > 0 && this.tryResumeAutoScrollFromBottom()) {
100187
+ return;
100188
+ }
100006
100189
  const nowMs = performance.now();
100007
100190
  const currentResistance = this.decayAutoScrollWheelResistance(nowMs);
100008
100191
  const intensity = Math.min(1.25, Math.abs(event.deltaY) / 90);
@@ -100014,12 +100197,13 @@ class DomindsDialogContainer extends HTMLElement {
100014
100197
  currentResistance + 0.18 + intensity * 0.32 + continuityBoost
100015
100198
  );
100016
100199
  this.autoScrollWheelLastUpEventAtMs = nowMs;
100200
+ if (this.isAutoScrollFollowing() && this.getAutoScrollWheelResistancePx(nowMs) > AUTO_SCROLL_FOLLOW_THRESHOLD_PX) {
100201
+ this.pauseAutoScroll();
100202
+ }
100017
100203
  } else {
100018
100204
  this.autoScrollWheelResistance = Math.max(0, currentResistance - (0.1 + intensity * 0.2));
100019
100205
  }
100020
100206
  this.autoScrollWheelLastDecayAtMs = nowMs;
100021
- this.recomputeAutoScrollEnabled(nowMs);
100022
- this.scheduleAutoScrollWheelSettle();
100023
100207
  }
100024
100208
  async loadTeamConfiguration() {
100025
100209
  try {
@@ -100113,7 +100297,8 @@ class DomindsDialogContainer extends HTMLElement {
100113
100297
  resetForCourse(course) {
100114
100298
  this.clearGenerationGlow();
100115
100299
  this.stopAutoScrollObservation();
100116
- this.stopAutoScrollWheelSettleTimer();
100300
+ this.resetAutoScrollTransientState();
100301
+ this.clearRetryPanel();
100117
100302
  this.generationBubble = void 0;
100118
100303
  this.thinkingSection = void 0;
100119
100304
  this.markdownSection = void 0;
@@ -100136,7 +100321,8 @@ class DomindsDialogContainer extends HTMLElement {
100136
100321
  cleanup() {
100137
100322
  this.clearGenerationGlow();
100138
100323
  this.stopAutoScrollObservation();
100139
- this.stopAutoScrollWheelSettleTimer();
100324
+ this.resetAutoScrollTransientState();
100325
+ this.clearRetryPanel();
100140
100326
  this.previousDialog = void 0;
100141
100327
  this.runState = null;
100142
100328
  this.generationBubble = void 0;
@@ -100158,6 +100344,10 @@ class DomindsDialogContainer extends HTMLElement {
100158
100344
  }
100159
100345
  }
100160
100346
  stopAutoScrollObservation() {
100347
+ if (this.autoScrollRealignRaf !== null) {
100348
+ cancelAnimationFrame(this.autoScrollRealignRaf);
100349
+ this.autoScrollRealignRaf = null;
100350
+ }
100161
100351
  if (this.autoScrollResizeScrollRaf !== null) {
100162
100352
  cancelAnimationFrame(this.autoScrollResizeScrollRaf);
100163
100353
  this.autoScrollResizeScrollRaf = null;
@@ -100172,7 +100362,7 @@ class DomindsDialogContainer extends HTMLElement {
100172
100362
  if (typeof ResizeObserver === "undefined") return;
100173
100363
  this.autoScrollResizeObservedEl = el;
100174
100364
  this.autoScrollResizeObserver = new ResizeObserver(() => {
100175
- if (!this.autoScrollEnabled) return;
100365
+ if (!this.isAutoScrollFollowing()) return;
100176
100366
  if (this.autoScrollResizeScrollRaf !== null) return;
100177
100367
  this.autoScrollResizeScrollRaf = requestAnimationFrame(() => {
100178
100368
  this.autoScrollResizeScrollRaf = null;
@@ -100232,7 +100422,9 @@ class DomindsDialogContainer extends HTMLElement {
100232
100422
  break;
100233
100423
  }
100234
100424
  this.runState = event.runState;
100235
- this.updateResumePanel();
100425
+ if (event.runState.kind === "interrupted" || event.runState.kind === "dead") {
100426
+ this.clearRetryPanel();
100427
+ }
100236
100428
  break;
100237
100429
  case "dlg_run_state_marker_evt": {
100238
100430
  if (!this.currentDialog || event.dialog.selfId !== this.currentDialog.selfId || event.dialog.rootId !== this.currentDialog.rootId) {
@@ -100243,10 +100435,10 @@ class DomindsDialogContainer extends HTMLElement {
100243
100435
  kind: "interrupted",
100244
100436
  reason: event.reason ?? { kind: "system_stop", detail: "Interrupted." }
100245
100437
  };
100438
+ this.clearRetryPanel();
100246
100439
  } else if (this.runState !== null && this.runState.kind === "interrupted") {
100247
100440
  this.runState = { kind: "proceeding" };
100248
100441
  }
100249
- this.updateResumePanel();
100250
100442
  let reasonText;
100251
100443
  const reason = event.reason;
100252
100444
  if (reason) {
@@ -100414,6 +100606,9 @@ class DomindsDialogContainer extends HTMLElement {
100414
100606
  }
100415
100607
  // === GENERATING EVENTS (Frontend Bubble Management) ===
100416
100608
  handleGeneratingStart(seq2, timestamp2, msgId) {
100609
+ if (this.retryPanelState.kind !== "hidden" && this.retryPanelState.genseq !== seq2) {
100610
+ this.clearRetryPanel();
100611
+ }
100417
100612
  const applyPendingCallAnchor = (bubble2) => {
100418
100613
  const pendingAnchor = this.pendingTeammateCallAnchorByGenseq.get(seq2);
100419
100614
  if (!pendingAnchor) return;
@@ -100664,6 +100859,9 @@ class DomindsDialogContainer extends HTMLElement {
100664
100859
  bubble.classList.remove("generating");
100665
100860
  bubble.classList.add("completed");
100666
100861
  bubble.setAttribute("data-finalized", "true");
100862
+ if (this.retryPanelState.kind !== "hidden" && this.retryPanelState.genseq === seq2) {
100863
+ this.clearRetryPanel();
100864
+ }
100667
100865
  this.thinkingSection = void 0;
100668
100866
  this.markdownSection = void 0;
100669
100867
  this.callingSection = void 0;
@@ -100677,10 +100875,8 @@ class DomindsDialogContainer extends HTMLElement {
100677
100875
  `.generation-bubble[data-seq="${String(seq2)}"]`
100678
100876
  ) : null;
100679
100877
  if (targetBubble) {
100680
- targetBubble.remove();
100681
- }
100682
- if (this.generationBubble && this.generationBubble.getAttribute("data-seq") === String(seq2)) {
100683
- this.generationBubble = void 0;
100878
+ this.resetGenerationBubbleForRetry(targetBubble);
100879
+ this.generationBubble = targetBubble;
100684
100880
  this.thinkingSection = void 0;
100685
100881
  this.markdownSection = void 0;
100686
100882
  this.callingSection = void 0;
@@ -100864,6 +101060,28 @@ class DomindsDialogContainer extends HTMLElement {
100864
101060
  }
100865
101061
  }
100866
101062
  }
101063
+ resetGenerationBubbleForRetry(bubble) {
101064
+ bubble.classList.remove("completed");
101065
+ bubble.classList.add("generating");
101066
+ bubble.setAttribute("data-finalized", "false");
101067
+ const modelEl = bubble.querySelector(".bubble-author-model");
101068
+ if (modelEl) {
101069
+ modelEl.textContent = "";
101070
+ }
101071
+ const body = bubble.querySelector(".bubble-body");
101072
+ if (!body) return;
101073
+ let sawDivider = false;
101074
+ for (const child of Array.from(body.children)) {
101075
+ if (!(child instanceof HTMLElement)) continue;
101076
+ if (child.classList.contains("user-response-divider")) {
101077
+ sawDivider = true;
101078
+ continue;
101079
+ }
101080
+ if (sawDivider) {
101081
+ child.remove();
101082
+ }
101083
+ }
101084
+ }
100867
101085
  compactWebSearchItemId(itemId) {
100868
101086
  const raw = itemId.trim();
100869
101087
  if (raw.length <= 28) return raw;
@@ -101004,6 +101222,24 @@ class DomindsDialogContainer extends HTMLElement {
101004
101222
  })();
101005
101223
  mentionEl.textContent = this.uiLanguage === "zh" ? `诉请对象: ${joined}${sessionPart}` : `Mentions: ${joined}${sessionPart}`;
101006
101224
  }
101225
+ renderSpecialCallingHeadline(section, callName) {
101226
+ const headlineEl = section.querySelector(".calling-headline");
101227
+ if (!headlineEl) return;
101228
+ switch (callName) {
101229
+ case "tellaskBack": {
101230
+ const assignment = this.currentDialog?.assignmentFromSup;
101231
+ const requesterLabel = assignment && assignment.originMemberId.trim() !== "" ? this.formatCallerLabel(assignment) : void 0;
101232
+ headlineEl.textContent = this.uiLanguage === "zh" ? `回问对象: 上游诉请者${requesterLabel ? ` ${requesterLabel}` : ""}` : `Ask-back target: upstream requester${requesterLabel ? ` ${requesterLabel}` : ""}`;
101233
+ return;
101234
+ }
101235
+ case "askHuman":
101236
+ headlineEl.textContent = this.uiLanguage === "zh" ? "诉请对象: 人类用户" : "Target: human user";
101237
+ return;
101238
+ case "freshBootsReasoning":
101239
+ headlineEl.textContent = this.uiLanguage === "zh" ? "支线类型: 扪心自问(FBR)" : "Sideline type: FBR";
101240
+ return;
101241
+ }
101242
+ }
101007
101243
  renderCallTiming(section, state2, startedAtMs, endedAtMs) {
101008
101244
  const timingEl = section.querySelector(".calling-timing");
101009
101245
  if (!timingEl) return;
@@ -101211,6 +101447,11 @@ class DomindsDialogContainer extends HTMLElement {
101211
101447
  case "tellaskSessionless":
101212
101448
  this.renderMentionList(callingSection, mentionList);
101213
101449
  break;
101450
+ case "tellaskBack":
101451
+ case "askHuman":
101452
+ case "freshBootsReasoning":
101453
+ this.renderSpecialCallingHeadline(callingSection, event.callName);
101454
+ break;
101214
101455
  }
101215
101456
  const bodyEl = callingSection.querySelector(".calling-body");
101216
101457
  if (bodyEl) {
@@ -102297,52 +102538,65 @@ ${event.content}`;
102297
102538
  if (trimmed.length <= 240) return trimmed;
102298
102539
  return `${trimmed.slice(0, 240)}...`;
102299
102540
  }
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}`;
102541
+ describeRetryFailure(event) {
102542
+ if (typeof event.status === "number") {
102543
+ return `HTTP ${event.status}`;
102544
+ }
102545
+ if (typeof event.code === "string" && event.code.trim() !== "") {
102546
+ return event.code.trim();
102305
102547
  }
102306
- return isZh ? `LLM 重试已耗尽(${event.attempt}/${event.totalAttempts})` : `LLM retries exhausted (${event.attempt}/${event.totalAttempts})`;
102548
+ if (event.failureKind === "retriable") {
102549
+ return this.uiLanguage === "zh" ? "可重试错误" : "Retriable error";
102550
+ }
102551
+ if (event.failureKind === "rejected") {
102552
+ return this.uiLanguage === "zh" ? "请求被拒绝" : "Request rejected";
102553
+ }
102554
+ return this.uiLanguage === "zh" ? "致命错误" : "Fatal error";
102307
102555
  }
102308
102556
  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}`;
102557
+ if (event.phase === "exhausted") {
102558
+ this.clearRetryPanel();
102559
+ return;
102560
+ }
102561
+ const failureLabel = this.describeRetryFailure(event);
102337
102562
  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();
102563
+ if (event.phase === "waiting") {
102564
+ const backoffMs = Math.max(0, Math.floor(event.backoffMs ?? 0));
102565
+ this.retryPanelState = {
102566
+ kind: "retry-waiting",
102567
+ genseq: event.genseq,
102568
+ attempt: event.attempt,
102569
+ totalAttempts: event.totalAttempts,
102570
+ provider: event.provider,
102571
+ failureLabel,
102572
+ error: errorText,
102573
+ nextRetryAtMs: Date.now() + backoffMs
102574
+ };
102575
+ } else {
102576
+ this.retryPanelState = {
102577
+ kind: "retry-running",
102578
+ genseq: event.genseq,
102579
+ attempt: event.attempt,
102580
+ totalAttempts: event.totalAttempts,
102581
+ provider: event.provider,
102582
+ failureLabel,
102583
+ error: errorText
102584
+ };
102585
+ }
102586
+ this.emitRetryPanelStateChanged();
102587
+ }
102588
+ clearRetryPanel() {
102589
+ this.retryPanelState = { kind: "hidden" };
102590
+ this.emitRetryPanelStateChanged();
102591
+ }
102592
+ emitRetryPanelStateChanged() {
102593
+ this.dispatchEvent(
102594
+ new CustomEvent("dialog-retry-panel-state", {
102595
+ detail: { state: this.retryPanelState },
102596
+ bubbles: true,
102597
+ composed: true
102598
+ })
102599
+ );
102346
102600
  }
102347
102601
  handleProtocolError(err) {
102348
102602
  const container = this.shadowRoot?.querySelector(".messages");
@@ -102450,15 +102704,6 @@ ${event.content}`;
102450
102704
  <style>${this.getStyles()}</style>
102451
102705
  <div class="container">
102452
102706
  <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
102707
  <div id="scroll-to-bottom-wrap" class="scroll-to-bottom-wrap hidden">
102463
102708
  <button
102464
102709
  id="scroll-to-bottom-btn"
@@ -102472,14 +102717,6 @@ ${event.content}`;
102472
102717
  </div>
102473
102718
  </div>
102474
102719
  `;
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
102720
  const scrollBtn = this.shadowRoot.querySelector(
102484
102721
  "#scroll-to-bottom-btn"
102485
102722
  );
@@ -102489,7 +102726,6 @@ ${event.content}`;
102489
102726
  this.scrollToBottom({ force: true });
102490
102727
  };
102491
102728
  }
102492
- this.updateResumePanel();
102493
102729
  this.updateScrollToBottomButton();
102494
102730
  }
102495
102731
  updateScrollToBottomButton() {
@@ -102497,48 +102733,12 @@ ${event.content}`;
102497
102733
  if (!root2) return;
102498
102734
  const wrap = root2.querySelector("#scroll-to-bottom-wrap");
102499
102735
  if (!wrap) return;
102500
- const shouldShow = this.scrollContainer !== null && !this.autoScrollEnabled;
102736
+ const shouldShow = this.scrollContainer !== null && !this.isAutoScrollFollowing();
102501
102737
  wrap.classList.toggle("hidden", !shouldShow);
102502
102738
  }
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
- }
102739
+ stabilizeAutoFollowAfterViewportChange() {
102740
+ if (!this.isAutoScrollFollowing()) return;
102741
+ this.scheduleAutoScrollRealign();
102542
102742
  }
102543
102743
  formatInterruptionReason(reason) {
102544
102744
  const t2 = getUiStrings(this.uiLanguage);
@@ -102646,52 +102846,6 @@ ${event.content}`;
102646
102846
  height: 18px;
102647
102847
  }
102648
102848
 
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
102849
  .run-marker {
102696
102850
  padding: 2px 3px;
102697
102851
  }
@@ -103192,58 +103346,6 @@ ${event.content}`;
103192
103346
  margin-bottom: 0;
103193
103347
  }
103194
103348
 
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
103349
  /* Calling section styles (nested inside markdown) */
103248
103350
  .calling-section {
103249
103351
  margin: 4px 0;
@@ -103894,8 +103996,7 @@ ${event.content}`;
103894
103996
  if (!scrollContainer) return;
103895
103997
  const forceScroll = options !== void 0 && options.force === true;
103896
103998
  if (!forceScroll) {
103897
- this.recomputeAutoScrollEnabled(performance.now());
103898
- if (!this.autoScrollEnabled) return;
103999
+ if (!this.isAutoScrollFollowing()) return;
103899
104000
  }
103900
104001
  const doScroll = () => {
103901
104002
  const maxScroll = scrollContainer.scrollHeight - scrollContainer.clientHeight;
@@ -106817,6 +106918,7 @@ const TEAM_MGMT_MANUAL_TOPIC_KEYS = [
106817
106918
  "team",
106818
106919
  "member-properties",
106819
106920
  "minds",
106921
+ "skills",
106820
106922
  "priming",
106821
106923
  "env",
106822
106924
  "permissions",
@@ -106840,6 +106942,9 @@ const TEAM_MGMT_MANUAL_TOPIC_META = {
106840
106942
  minds: {
106841
106943
  titleI18n: { zh: "角色资产(.minds/team/<id>/*)", en: "Minds Assets (.minds/team/<id>/*)" }
106842
106944
  },
106945
+ skills: {
106946
+ titleI18n: { zh: "技能(.minds/skills/*)", en: "Skills (.minds/skills/*)" }
106947
+ },
106843
106948
  priming: {
106844
106949
  titleI18n: {
106845
106950
  zh: "启动脚本(.minds/priming/*)",
@@ -106870,6 +106975,7 @@ const TEAM_MGMT_MANUAL_UI_TOPIC_ORDER = [
106870
106975
  "builtin-defaults",
106871
106976
  "mcp",
106872
106977
  "minds",
106978
+ "skills",
106873
106979
  "priming",
106874
106980
  "env",
106875
106981
  "troubleshooting"
@@ -106890,6 +106996,7 @@ const TEAM_MGMT_MANUAL_UI_TOOL_TOPICS_BY_KEY = {
106890
106996
  // Other
106891
106997
  mcp: ["mcp"],
106892
106998
  minds: ["minds"],
106999
+ skills: ["skills"],
106893
107000
  priming: ["priming"],
106894
107001
  env: ["env"],
106895
107002
  troubleshooting: ["troubleshooting"]
@@ -111122,6 +111229,8 @@ const _DomindsApp = class _DomindsApp extends HTMLElement {
111122
111229
  this.generatingDialogKeys = /* @__PURE__ */ new Set();
111123
111230
  this.currentDialog = null;
111124
111231
  this.currentDialogStatus = null;
111232
+ this.retryPanelState = { kind: "hidden" };
111233
+ this.retryPanelTicker = null;
111125
111234
  this.teamMembers = [];
111126
111235
  this.defaultResponder = null;
111127
111236
  this.taskDocuments = [];
@@ -111277,6 +111386,7 @@ const _DomindsApp = class _DomindsApp extends HTMLElement {
111277
111386
  this.runControlRefreshTimers = [];
111278
111387
  this.toolsRegistryTimestamp = "";
111279
111388
  this.toolsRegistryToolsets = [];
111389
+ this.toolsRegistryRequestSeq = 0;
111280
111390
  this.q4hQuestionCount = 0;
111281
111391
  this.q4hQuestions = [];
111282
111392
  this.q4hDialogContexts = [];
@@ -111803,6 +111913,7 @@ const _DomindsApp = class _DomindsApp extends HTMLElement {
111803
111913
  this.updateToolsRegistryUi();
111804
111914
  this.updateContextHealthUi();
111805
111915
  this.updateToastHistoryUi();
111916
+ this.updateDialogViewportPanels();
111806
111917
  }
111807
111918
  applyUiLanguageSelectDecorations(t2) {
111808
111919
  if (!this.shadowRoot) return;
@@ -112168,6 +112279,7 @@ ${formatUiLanguageOptionLabel({
112168
112279
  }
112169
112280
  disconnectedCallback() {
112170
112281
  this.wsManager.disconnect();
112282
+ this.stopRetryPanelTicker();
112171
112283
  for (const t2 of this.runControlRefreshTimers) {
112172
112284
  clearTimeout(t2);
112173
112285
  }
@@ -112236,6 +112348,7 @@ ${formatUiLanguageOptionLabel({
112236
112348
  this.applyUiLanguageToDom();
112237
112349
  this.updateProblemsUi();
112238
112350
  this.updateToolsRegistryUi();
112351
+ this.updateDialogViewportPanels();
112239
112352
  }
112240
112353
  /**
112241
112354
  * Surgical update: Update only the dialog list without destroying the container.
@@ -114124,14 +114237,130 @@ ${formatUiLanguageOptionLabel({
114124
114237
  background: var(--dominds-sidebar-bg, #f8f9fa);
114125
114238
  }
114126
114239
 
114240
+ .conversation-viewport {
114241
+ position: relative;
114242
+ flex: 1;
114243
+ min-height: 0;
114244
+ }
114245
+
114127
114246
  /* 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
- }
114247
+ .conversation-scroll-area {
114248
+ flex: 1;
114249
+ height: 100%;
114250
+ min-height: 0;
114251
+ overflow-y: auto;
114252
+ contain: content;
114253
+ background: var(--dominds-sidebar-bg, #f8f9fa);
114254
+ }
114255
+
114256
+ .dialog-viewport-panels {
114257
+ display: flex;
114258
+ flex-direction: column;
114259
+ gap: 10px;
114260
+ flex-shrink: 0;
114261
+ padding: 0 12px 12px 12px;
114262
+ background: var(--dominds-sidebar-bg, #f8f9fa);
114263
+ }
114264
+
114265
+ .dialog-viewport-panels.hidden,
114266
+ .dialog-viewport-panel.hidden {
114267
+ display: none;
114268
+ }
114269
+
114270
+ .dialog-viewport-panel {
114271
+ padding: 9px 10px;
114272
+ border: 1px solid var(--dominds-border, var(--color-border-primary, #e2e8f0));
114273
+ border-radius: 8px;
114274
+ background: var(
114275
+ --dominds-sidebar-bg,
114276
+ var(--dominds-bg, var(--color-bg-secondary, #ffffff))
114277
+ );
114278
+ }
114279
+
114280
+ .dialog-viewport-panel-header {
114281
+ display: flex;
114282
+ align-items: flex-start;
114283
+ gap: 8px;
114284
+ }
114285
+
114286
+ .dialog-viewport-panel-header .icon-mask {
114287
+ width: 16px;
114288
+ height: 16px;
114289
+ flex: 0 0 auto;
114290
+ margin-top: 1px;
114291
+ }
114292
+
114293
+ .dialog-viewport-panel-text {
114294
+ min-width: 0;
114295
+ display: flex;
114296
+ flex-direction: column;
114297
+ gap: 1px;
114298
+ }
114299
+
114300
+ .dialog-viewport-panel-title {
114301
+ font-weight: 600;
114302
+ font-size: var(--dominds-font-size-md, 13px);
114303
+ color: var(--dominds-fg, var(--color-fg-primary, #0f172a));
114304
+ }
114305
+
114306
+ .dialog-viewport-panel-summary {
114307
+ font-size: var(--dominds-font-size-sm, 12px);
114308
+ color: var(--dominds-muted, var(--color-fg-tertiary, #64748b));
114309
+ margin-top: 1px;
114310
+ }
114311
+
114312
+ .dialog-viewport-panel-error {
114313
+ margin-top: 4px;
114314
+ font-size: var(--dominds-font-size-sm, 12px);
114315
+ color: var(--dominds-fg, var(--color-fg-secondary, #475569));
114316
+ white-space: pre-wrap;
114317
+ word-break: break-word;
114318
+ }
114319
+
114320
+ .retry-panel {
114321
+ border-color: color-mix(
114322
+ in srgb,
114323
+ var(--dominds-warning, var(--color-warning, #f59e0b)) 40%,
114324
+ var(--dominds-border, var(--color-border-primary, #e2e8f0))
114325
+ );
114326
+ background: color-mix(
114327
+ in srgb,
114328
+ var(--dominds-warning, #f59e0b) 14%,
114329
+ var(--dominds-sidebar-bg, var(--dominds-bg, #ffffff))
114330
+ );
114331
+ }
114332
+
114333
+ .retry-panel .icon-mask {
114334
+ color: var(--dominds-warning, var(--color-warning, #f59e0b));
114335
+ }
114336
+
114337
+ .resume-panel {
114338
+ display: flex;
114339
+ align-items: center;
114340
+ justify-content: space-between;
114341
+ gap: 10px;
114342
+ }
114343
+
114344
+ .dialog-viewport-panel-actions {
114345
+ display: flex;
114346
+ align-items: center;
114347
+ flex-shrink: 0;
114348
+ }
114349
+
114350
+ .dialog-resume-btn {
114351
+ border: 1px solid var(--dominds-border, var(--color-border-primary, #e2e8f0));
114352
+ background: var(--dominds-primary, var(--color-accent-primary, #007acc));
114353
+ color: white;
114354
+ padding: 6px 8px;
114355
+ border-radius: 8px;
114356
+ cursor: pointer;
114357
+ font-weight: 600;
114358
+ }
114359
+
114360
+ .dialog-resume-btn:disabled {
114361
+ opacity: 0.6;
114362
+ cursor: not-allowed;
114363
+ }
114135
114364
 
114136
114365
  .q4h-input-wrap {
114137
114366
  flex-shrink: 0;
@@ -115708,9 +115937,32 @@ ${uiLanguageButtonTooltip}">
115708
115937
  ` : ""}
115709
115938
 
115710
115939
  <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>
115940
+ <div class="conversation-viewport">
115941
+ <div class="conversation-scroll-area">
115942
+ <dominds-dialog-container id="dialog-container" ui-language="${this.uiLanguage}"></dominds-dialog-container>
115943
+ </div>
115944
+ </div>
115945
+ <div id="dialog-viewport-panels" class="dialog-viewport-panels hidden">
115946
+ <div id="dialog-retry-panel" class="dialog-viewport-panel retry-panel hidden" data-state="hidden">
115947
+ <div class="dialog-viewport-panel-header">
115948
+ <span class="icon-mask app-icon-refresh" aria-hidden="true"></span>
115949
+ <div class="dialog-viewport-panel-text">
115950
+ <div id="dialog-retry-title" class="dialog-viewport-panel-title"></div>
115951
+ <div id="dialog-retry-summary" class="dialog-viewport-panel-summary"></div>
115952
+ </div>
115953
+ </div>
115954
+ <div id="dialog-retry-error" class="dialog-viewport-panel-error"></div>
115955
+ </div>
115956
+ <div id="dialog-resume-panel" class="dialog-viewport-panel resume-panel hidden">
115957
+ <div class="dialog-viewport-panel-text">
115958
+ <div id="dialog-resume-title" class="dialog-viewport-panel-title">${t2.continueLabel}</div>
115959
+ <div id="dialog-resume-reason" class="dialog-viewport-panel-summary"></div>
115960
+ </div>
115961
+ <div class="dialog-viewport-panel-actions">
115962
+ <button id="dialog-resume-btn" class="dialog-resume-btn" type="button">${t2.continueLabel}</button>
115963
+ </div>
115964
+ </div>
115965
+ </div>
115714
115966
  <div class="bottom-panel ${this.bottomPanelExpanded ? "expanded" : "collapsed"}" id="bottom-panel">
115715
115967
  <div class="bottom-panel-resize-handle ${this.bottomPanelExpanded ? "" : "hidden"}" id="bottom-panel-resize-handle" role="separator" aria-orientation="horizontal">
115716
115968
  <div class="bp-resize-grip left" data-role="resize" aria-hidden="true"></div>
@@ -116050,6 +116302,11 @@ ${content}`;
116050
116302
  void this.openCreateDialogFlow({ source: "toolbar" });
116051
116303
  return;
116052
116304
  }
116305
+ const resumeBtn = target.closest("#dialog-resume-btn");
116306
+ if (resumeBtn) {
116307
+ this.resumeCurrentDialog();
116308
+ return;
116309
+ }
116053
116310
  const savePrimingBtn = target.closest("#navibar-save-priming");
116054
116311
  if (savePrimingBtn) {
116055
116312
  await this.saveCurrentCourseAsPrimingScript();
@@ -116082,19 +116339,13 @@ ${content}`;
116082
116339
  case "tools":
116083
116340
  this.activityView = { kind: "tools" };
116084
116341
  this.updateActivityView();
116085
- this.toolsRegistryToolsets = [];
116086
- this.toolsRegistryTimestamp = "";
116087
- this.updateToolsRegistryUi();
116088
- void this.loadToolsRegistry();
116342
+ this.refreshToolsRegistryView();
116089
116343
  return;
116090
116344
  }
116091
116345
  }
116092
116346
  const toolsRefresh = target.closest("#tools-registry-refresh");
116093
116347
  if (toolsRefresh) {
116094
- this.toolsRegistryToolsets = [];
116095
- this.toolsRegistryTimestamp = "";
116096
- this.updateToolsRegistryUi();
116097
- void this.loadToolsRegistry();
116348
+ this.refreshToolsRegistryView();
116098
116349
  return;
116099
116350
  }
116100
116351
  const prevBtn = target.closest("#course-navi-prev");
@@ -116286,6 +116537,17 @@ ${content}`;
116286
116537
  input.setDisabled(course !== latest);
116287
116538
  }
116288
116539
  });
116540
+ dialogContainerEl.addEventListener("dialog-retry-panel-state", (e2) => {
116541
+ const ce2 = e2;
116542
+ const detail = ce2.detail && typeof ce2.detail === "object" ? ce2.detail : null;
116543
+ const state2 = detail?.state;
116544
+ if (!state2 || typeof state2 !== "object" || !("kind" in state2)) {
116545
+ console.warn("Invalid dialog-retry-panel-state payload", ce2.detail);
116546
+ return;
116547
+ }
116548
+ this.retryPanelState = state2;
116549
+ this.updateDialogViewportPanels();
116550
+ });
116289
116551
  }
116290
116552
  const uiLangButton = this.shadowRoot.querySelector("#ui-language-menu-button");
116291
116553
  const uiLangMenu = this.shadowRoot.querySelector("#ui-language-menu");
@@ -117457,6 +117719,7 @@ ${content}`;
117457
117719
  clearCurrentDialogSelection() {
117458
117720
  this.currentDialog = null;
117459
117721
  this.currentDialogStatus = null;
117722
+ this.retryPanelState = { kind: "hidden" };
117460
117723
  this.updateBrowserTitle(null);
117461
117724
  const root2 = this.shadowRoot;
117462
117725
  if (!root2) return;
@@ -117473,6 +117736,7 @@ ${content}`;
117473
117736
  this.q4hInput.clearDialog();
117474
117737
  this.q4hInput.setRunState(null);
117475
117738
  }
117739
+ this.updateDialogViewportPanels();
117476
117740
  }
117477
117741
  updateBrowserTitle(dialog) {
117478
117742
  if (dialog === null) {
@@ -117939,6 +118203,140 @@ ${content}`;
117939
118203
  const rootMatch = this.getRootDialog(rootId);
117940
118204
  return rootMatch ? rootMatch.status : null;
117941
118205
  }
118206
+ ensureRetryPanelTicker() {
118207
+ if (this.retryPanelState.kind !== "retry-waiting") {
118208
+ this.stopRetryPanelTicker();
118209
+ return;
118210
+ }
118211
+ if (this.retryPanelTicker !== null) return;
118212
+ this.retryPanelTicker = window.setInterval(() => {
118213
+ if (this.retryPanelState.kind !== "retry-waiting") {
118214
+ this.stopRetryPanelTicker();
118215
+ return;
118216
+ }
118217
+ this.updateDialogViewportPanels();
118218
+ }, 200);
118219
+ }
118220
+ stopRetryPanelTicker() {
118221
+ if (this.retryPanelTicker === null) return;
118222
+ window.clearInterval(this.retryPanelTicker);
118223
+ this.retryPanelTicker = null;
118224
+ }
118225
+ formatRetryCountdown(remainingMs) {
118226
+ const safeMs = Math.max(0, remainingMs);
118227
+ if (safeMs >= 1e4) {
118228
+ const seconds2 = Math.ceil(safeMs / 1e3);
118229
+ return this.uiLanguage === "zh" ? `${seconds2} 秒` : `${seconds2}s`;
118230
+ }
118231
+ const seconds = (safeMs / 1e3).toFixed(1);
118232
+ return this.uiLanguage === "zh" ? `${seconds} 秒` : `${seconds}s`;
118233
+ }
118234
+ buildRetryWaitingSummary(state2) {
118235
+ const t2 = getUiStrings(this.uiLanguage);
118236
+ const attemptText = `${t2.retryPanelAttemptPrefix}${state2.attempt}${t2.retryPanelAttemptConnector}${state2.totalAttempts}${t2.retryPanelAttemptSuffix}`;
118237
+ const providerText = state2.provider.trim();
118238
+ const failureText = providerText === "" ? state2.failureLabel : `${providerText} · ${state2.failureLabel}`;
118239
+ const remainingMs = Math.max(0, state2.nextRetryAtMs - Date.now());
118240
+ const countdown = this.formatRetryCountdown(remainingMs);
118241
+ return `${attemptText} · ${t2.retryPanelCountdownPrefix}${countdown} · ${failureText}`;
118242
+ }
118243
+ buildRetryRunningSummary(state2) {
118244
+ const t2 = getUiStrings(this.uiLanguage);
118245
+ const attemptText = `${t2.retryPanelRunningAttemptPrefix}${state2.attempt}${t2.retryPanelRunningAttemptSuffix}`;
118246
+ const providerText = state2.provider.trim();
118247
+ const failureText = providerText === "" ? state2.failureLabel : `${providerText} · ${state2.failureLabel}`;
118248
+ return `${attemptText} · ${failureText}`;
118249
+ }
118250
+ getCurrentDialogRunState() {
118251
+ const current = this.currentDialog;
118252
+ if (!current) return null;
118253
+ return this.dialogRunStatesByKey.get(this.dialogKey(current.rootId, current.selfId)) ?? null;
118254
+ }
118255
+ formatInterruptionReason(reason) {
118256
+ const t2 = getUiStrings(this.uiLanguage);
118257
+ switch (reason.kind) {
118258
+ case "user_stop":
118259
+ return t2.stoppedByYou;
118260
+ case "emergency_stop":
118261
+ return t2.stoppedByEmergencyStop;
118262
+ case "server_restart":
118263
+ return t2.interruptedByServerRestart;
118264
+ case "system_stop":
118265
+ return reason.detail;
118266
+ default: {
118267
+ const _exhaustive = reason;
118268
+ return String(_exhaustive);
118269
+ }
118270
+ }
118271
+ }
118272
+ updateDialogViewportPanels() {
118273
+ const root2 = this.shadowRoot;
118274
+ if (!root2) return;
118275
+ const dialogContainer = root2.querySelector(
118276
+ "#dialog-container"
118277
+ );
118278
+ const wrap = root2.querySelector("#dialog-viewport-panels");
118279
+ const retryPanel = root2.querySelector("#dialog-retry-panel");
118280
+ const retryTitle = root2.querySelector("#dialog-retry-title");
118281
+ const retrySummary = root2.querySelector("#dialog-retry-summary");
118282
+ const retryError = root2.querySelector("#dialog-retry-error");
118283
+ const resumePanel = root2.querySelector("#dialog-resume-panel");
118284
+ const resumeTitle = root2.querySelector("#dialog-resume-title");
118285
+ const resumeReason = root2.querySelector("#dialog-resume-reason");
118286
+ const resumeBtn = root2.querySelector("#dialog-resume-btn");
118287
+ if (!wrap || !retryPanel || !retryTitle || !retrySummary || !retryError || !resumePanel || !resumeTitle || !resumeReason || !resumeBtn) {
118288
+ return;
118289
+ }
118290
+ const wrapWasHidden = wrap.classList.contains("hidden");
118291
+ const retryWasHidden = retryPanel.classList.contains("hidden");
118292
+ const resumeWasHidden = resumePanel.classList.contains("hidden");
118293
+ const t2 = getUiStrings(this.uiLanguage);
118294
+ const retryState = this.retryPanelState;
118295
+ const retryVisible = this.currentDialog !== null && retryState.kind !== "hidden";
118296
+ retryPanel.classList.toggle("hidden", !retryVisible);
118297
+ if (!retryVisible) {
118298
+ retryTitle.textContent = "";
118299
+ retrySummary.textContent = "";
118300
+ retryError.textContent = "";
118301
+ this.stopRetryPanelTicker();
118302
+ } else {
118303
+ retryTitle.textContent = t2.retryPanelTitleRetrying;
118304
+ retrySummary.textContent = retryState.kind === "retry-waiting" ? this.buildRetryWaitingSummary(retryState) : this.buildRetryRunningSummary(retryState);
118305
+ retryError.textContent = retryState.error;
118306
+ if (retryState.kind === "retry-waiting") {
118307
+ this.ensureRetryPanelTicker();
118308
+ } else {
118309
+ this.stopRetryPanelTicker();
118310
+ }
118311
+ }
118312
+ const runState = this.getCurrentDialogRunState();
118313
+ const interruptedRunState = this.currentDialog !== null && runState !== null && runState.kind === "interrupted" ? runState : null;
118314
+ const resumeVisible = interruptedRunState !== null;
118315
+ resumePanel.classList.toggle("hidden", !resumeVisible);
118316
+ resumeTitle.textContent = t2.continueLabel;
118317
+ resumeBtn.textContent = t2.continueLabel;
118318
+ resumeBtn.disabled = !resumeVisible;
118319
+ if (!resumeVisible) {
118320
+ resumeReason.textContent = "";
118321
+ } else {
118322
+ resumeReason.textContent = this.formatInterruptionReason(interruptedRunState.reason);
118323
+ }
118324
+ const hasVisiblePanels = retryVisible || resumeVisible;
118325
+ wrap.classList.toggle("hidden", !hasVisiblePanels);
118326
+ if (dialogContainer && (wrapWasHidden !== !hasVisiblePanels || retryWasHidden !== !retryVisible || resumeWasHidden !== !resumeVisible)) {
118327
+ dialogContainer.stabilizeAutoFollowAfterViewportChange();
118328
+ }
118329
+ }
118330
+ resumeCurrentDialog() {
118331
+ if (!this.currentDialog) return;
118332
+ this.wsManager.sendRaw({
118333
+ type: "resume_dialog",
118334
+ dialog: {
118335
+ selfId: this.currentDialog.selfId,
118336
+ rootId: this.currentDialog.rootId
118337
+ }
118338
+ });
118339
+ }
117942
118340
  updateInputPanelVisibility() {
117943
118341
  const t2 = getUiStrings(this.uiLanguage);
117944
118342
  const readOnly = this.currentDialogStatus === "completed" || this.currentDialogStatus === "archived";
@@ -117964,6 +118362,7 @@ ${content}`;
117964
118362
  if (this.q4hInput) {
117965
118363
  this.q4hInput.setDisabled(disabled);
117966
118364
  }
118365
+ this.updateDialogViewportPanels();
117967
118366
  }
117968
118367
  async applyDialogSelection(dialog, options) {
117969
118368
  const selfId = dialog.selfId || dialog.rootId;
@@ -117988,6 +118387,7 @@ ${content}`;
117988
118387
  }
117989
118388
  this.currentDialog = normalizedDialog;
117990
118389
  this.currentDialogStatus = normalizedDialog.status ?? this.resolveDialogStatus(normalizedDialog);
118390
+ this.retryPanelState = { kind: "hidden" };
117991
118391
  this.updateInputPanelVisibility();
117992
118392
  this.applyDiligenceState({
117993
118393
  disableDiligencePush: false,
@@ -117995,6 +118395,9 @@ ${content}`;
117995
118395
  remaining: null
117996
118396
  });
117997
118397
  this.updateBottomPanelFooterUi();
118398
+ if (this.activityView.kind === "tools") {
118399
+ this.refreshToolsRegistryView();
118400
+ }
117998
118401
  try {
117999
118402
  const dialogContainer = this.shadowRoot?.querySelector("#dialog-container");
118000
118403
  if (dialogContainer instanceof DomindsDialogContainer) {
@@ -118642,8 +119045,35 @@ ${content}`;
118642
119045
  ts.textContent = this.toolsRegistryTimestamp ? this.toolsRegistryTimestamp : "";
118643
119046
  }
118644
119047
  }
119048
+ refreshToolsRegistryView() {
119049
+ this.toolsRegistryToolsets = [];
119050
+ this.toolsRegistryTimestamp = "";
119051
+ this.updateToolsRegistryUi();
119052
+ void this.loadToolsRegistry();
119053
+ }
119054
+ getToolsRegistryRequestOptions() {
119055
+ const currentDialog = this.currentDialog;
119056
+ if (!currentDialog) {
119057
+ return {};
119058
+ }
119059
+ const rootDialog = this.getRootDialog(currentDialog.rootId) ?? void 0;
119060
+ const agentId = typeof currentDialog.agentId === "string" && currentDialog.agentId.trim() !== "" ? currentDialog.agentId.trim() : typeof rootDialog?.agentId === "string" && rootDialog.agentId.trim() !== "" ? rootDialog.agentId.trim() : void 0;
119061
+ const taskDocPath = typeof currentDialog.taskDocPath === "string" && currentDialog.taskDocPath.trim() !== "" ? currentDialog.taskDocPath.trim() : typeof rootDialog?.taskDocPath === "string" && rootDialog.taskDocPath.trim() !== "" ? rootDialog.taskDocPath.trim() : void 0;
119062
+ const status = currentDialog.status ?? rootDialog?.status ?? this.currentDialogStatus ?? void 0;
119063
+ return {
119064
+ agentId,
119065
+ taskDocPath,
119066
+ rootId: currentDialog.rootId,
119067
+ selfId: currentDialog.selfId,
119068
+ status
119069
+ };
119070
+ }
118645
119071
  async loadToolsRegistry() {
118646
- const res = await this.apiClient.getToolsRegistry();
119072
+ const requestSeq = ++this.toolsRegistryRequestSeq;
119073
+ const res = await this.apiClient.getToolsRegistry(this.getToolsRegistryRequestOptions());
119074
+ if (requestSeq !== this.toolsRegistryRequestSeq) {
119075
+ return;
119076
+ }
118647
119077
  if (!res.success || !res.data) {
118648
119078
  const t2 = getUiStrings(this.uiLanguage);
118649
119079
  const message = res.error || t2.toolsRegistryLoadFailedToast;
@@ -121620,4 +122050,4 @@ export {
121620
122050
  clear$2 as y,
121621
122051
  defaultConfig2 as z
121622
122052
  };
121623
- //# sourceMappingURL=index-DrTqAfFy.js.map
122053
+ //# sourceMappingURL=index-1Tlt2ebA.js.map