@researai/deepscientist 1.5.17 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (894) hide show
  1. package/AGENTS.md +309 -130
  2. package/AISB/catalog/aisb.b1.agentic_coding.yaml +244 -0
  3. package/AISB/catalog/aisb.b10.climate_earth.yaml +235 -0
  4. package/AISB/catalog/aisb.b11.model_efficiency.yaml +231 -0
  5. package/AISB/catalog/aisb.b12.embodied_ai.yaml +238 -0
  6. package/AISB/catalog/aisb.b2.agent_systems.yaml +229 -0
  7. package/AISB/catalog/aisb.b3.self_evolving_rl.yaml +237 -0
  8. package/AISB/catalog/aisb.b4.lm_reasoning.yaml +240 -0
  9. package/AISB/catalog/aisb.b5.math_proof.yaml +235 -0
  10. package/AISB/catalog/aisb.b6.research_process.yaml +243 -0
  11. package/AISB/catalog/aisb.b7.multimodal_fusion.yaml +232 -0
  12. package/AISB/catalog/aisb.b8.lifesci_drug.yaml +275 -0
  13. package/AISB/catalog/aisb.b9.material_science.yaml +237 -0
  14. package/AISB/catalog/aisb.t3.001_savvy.yaml +159 -0
  15. package/AISB/catalog/aisb.t3.001_savvy.zh.yaml +121 -0
  16. package/AISB/catalog/aisb.t3.002_pinet.yaml +189 -0
  17. package/AISB/catalog/aisb.t3.002_pinet.zh.yaml +130 -0
  18. package/AISB/catalog/aisb.t3.004_decentralattn.yaml +184 -0
  19. package/AISB/catalog/aisb.t3.004_decentralattn.zh.yaml +153 -0
  20. package/AISB/catalog/aisb.t3.005_tsae.yaml +193 -0
  21. package/AISB/catalog/aisb.t3.005_tsae.zh.yaml +139 -0
  22. package/AISB/catalog/aisb.t3.006_physense.yaml +194 -0
  23. package/AISB/catalog/aisb.t3.006_physense.zh.yaml +118 -0
  24. package/AISB/catalog/aisb.t3.007_reasoningiqa.yaml +169 -0
  25. package/AISB/catalog/aisb.t3.007_reasoningiqa.zh.yaml +133 -0
  26. package/AISB/catalog/aisb.t3.008_meanflows.yaml +188 -0
  27. package/AISB/catalog/aisb.t3.008_meanflows.zh.yaml +140 -0
  28. package/AISB/catalog/aisb.t3.009_scoremissing.yaml +179 -0
  29. package/AISB/catalog/aisb.t3.009_scoremissing.zh.yaml +119 -0
  30. package/AISB/catalog/aisb.t3.010_suitabilityfilter.yaml +221 -0
  31. package/AISB/catalog/aisb.t3.010_suitabilityfilter.zh.yaml +141 -0
  32. package/AISB/catalog/aisb.t3.011_osd.yaml +206 -0
  33. package/AISB/catalog/aisb.t3.011_osd.zh.yaml +163 -0
  34. package/AISB/catalog/aisb.t3.012_efficientqat.yaml +206 -0
  35. package/AISB/catalog/aisb.t3.012_efficientqat.zh.yaml +159 -0
  36. package/AISB/catalog/aisb.t3.013_appl.yaml +152 -0
  37. package/AISB/catalog/aisb.t3.013_appl.zh.yaml +126 -0
  38. package/AISB/catalog/aisb.t3.014_piguard.yaml +207 -0
  39. package/AISB/catalog/aisb.t3.014_piguard.zh.yaml +164 -0
  40. package/AISB/catalog/aisb.t3.015_frspec.yaml +209 -0
  41. package/AISB/catalog/aisb.t3.015_frspec.zh.yaml +163 -0
  42. package/AISB/catalog/aisb.t3.016_mathfusion.yaml +166 -0
  43. package/AISB/catalog/aisb.t3.016_mathfusion.zh.yaml +145 -0
  44. package/AISB/catalog/aisb.t3.017_multimodalglp.yaml +171 -0
  45. package/AISB/catalog/aisb.t3.017_multimodalglp.zh.yaml +122 -0
  46. package/AISB/catalog/aisb.t3.018_cotsynth.yaml +206 -0
  47. package/AISB/catalog/aisb.t3.018_cotsynth.zh.yaml +162 -0
  48. package/AISB/catalog/aisb.t3.019_dyscaleut.yaml +211 -0
  49. package/AISB/catalog/aisb.t3.019_dyscaleut.zh.yaml +148 -0
  50. package/AISB/catalog/aisb.t3.020_aristotle.yaml +173 -0
  51. package/AISB/catalog/aisb.t3.020_aristotle.zh.yaml +119 -0
  52. package/AISB/catalog/aisb.t3.021_tokenrecycling.yaml +160 -0
  53. package/AISB/catalog/aisb.t3.021_tokenrecycling.zh.yaml +129 -0
  54. package/AISB/catalog/aisb.t3.022_chainofreasoning.yaml +204 -0
  55. package/AISB/catalog/aisb.t3.022_chainofreasoning.zh.yaml +161 -0
  56. package/AISB/catalog/aisb.t3.023_guidedembed.yaml +211 -0
  57. package/AISB/catalog/aisb.t3.023_guidedembed.zh.yaml +189 -0
  58. package/AISB/catalog/aisb.t3.024_outputcentric.yaml +148 -0
  59. package/AISB/catalog/aisb.t3.024_outputcentric.zh.yaml +131 -0
  60. package/AISB/catalog/aisb.t3.025_deeper.yaml +143 -0
  61. package/AISB/catalog/aisb.t3.025_deeper.zh.yaml +116 -0
  62. package/AISB/catalog/aisb.t3.026_gartkg.yaml +195 -0
  63. package/AISB/catalog/aisb.t3.026_gartkg.zh.yaml +127 -0
  64. package/AISB/catalog/aisb.t3.027_citeeval.yaml +182 -0
  65. package/AISB/catalog/aisb.t3.027_citeeval.zh.yaml +135 -0
  66. package/AISB/catalog/aisb.t3.028_sbam.yaml +206 -0
  67. package/AISB/catalog/aisb.t3.028_sbam.zh.yaml +166 -0
  68. package/AISB/catalog/aisb.t3.029_cdqgeoembed.yaml +224 -0
  69. package/AISB/catalog/aisb.t3.029_cdqgeoembed.zh.yaml +142 -0
  70. package/AISB/catalog/aisb.t3.030_processrm.yaml +211 -0
  71. package/AISB/catalog/aisb.t3.030_processrm.zh.yaml +166 -0
  72. package/AISB/catalog/aisb.t3.031_circuitstability.yaml +172 -0
  73. package/AISB/catalog/aisb.t3.031_circuitstability.zh.yaml +134 -0
  74. package/AISB/catalog/aisb.t3.032_ptsolver.yaml +169 -0
  75. package/AISB/catalog/aisb.t3.032_ptsolver.zh.yaml +135 -0
  76. package/AISB/catalog/aisb.t3.033_gcse.yaml +144 -0
  77. package/AISB/catalog/aisb.t3.033_gcse.zh.yaml +126 -0
  78. package/AISB/catalog/aisb.t3.034_ensemblewm.yaml +183 -0
  79. package/AISB/catalog/aisb.t3.034_ensemblewm.zh.yaml +146 -0
  80. package/AISB/catalog/aisb.t3.035_moralvalueswa.yaml +207 -0
  81. package/AISB/catalog/aisb.t3.035_moralvalueswa.zh.yaml +165 -0
  82. package/AISB/catalog/aisb.t3.036_weakstrongpref.yaml +210 -0
  83. package/AISB/catalog/aisb.t3.036_weakstrongpref.zh.yaml +194 -0
  84. package/AISB/catalog/aisb.t3.037_dementiamask.yaml +172 -0
  85. package/AISB/catalog/aisb.t3.037_dementiamask.zh.yaml +132 -0
  86. package/AISB/catalog/aisb.t3.038_tinysam.yaml +284 -0
  87. package/AISB/catalog/aisb.t3.038_tinysam.zh.yaml +240 -0
  88. package/AISB/catalog/aisb.t3.039_calf.yaml +224 -0
  89. package/AISB/catalog/aisb.t3.039_calf.zh.yaml +194 -0
  90. package/AISB/catalog/aisb.t3.040_graniteguardian.yaml +199 -0
  91. package/AISB/catalog/aisb.t3.040_graniteguardian.zh.yaml +174 -0
  92. package/AISB/catalog/aisb.t3.041_amdm.yaml +149 -0
  93. package/AISB/catalog/aisb.t3.041_amdm.zh.yaml +137 -0
  94. package/AISB/catalog/aisb.t3.042_xpatch.yaml +216 -0
  95. package/AISB/catalog/aisb.t3.042_xpatch.zh.yaml +182 -0
  96. package/AISB/catalog/aisb.t3.043_vhm.yaml +268 -0
  97. package/AISB/catalog/aisb.t3.043_vhm.zh.yaml +193 -0
  98. package/AISB/catalog/aisb.t3.044_rgvi.yaml +224 -0
  99. package/AISB/catalog/aisb.t3.044_rgvi.zh.yaml +176 -0
  100. package/AISB/catalog/aisb.t3.045_pslstm.yaml +203 -0
  101. package/AISB/catalog/aisb.t3.045_pslstm.zh.yaml +179 -0
  102. package/AISB/catalog/aisb.t3.046_nonstatts.yaml +208 -0
  103. package/AISB/catalog/aisb.t3.046_nonstatts.zh.yaml +194 -0
  104. package/AISB/catalog/aisb.t3.047_timepfn.yaml +156 -0
  105. package/AISB/catalog/aisb.t3.047_timepfn.zh.yaml +124 -0
  106. package/AISB/catalog/aisb.t3.048_proxyspex.yaml +148 -0
  107. package/AISB/catalog/aisb.t3.048_proxyspex.zh.yaml +125 -0
  108. package/AISB/catalog/aisb.t3.049_hogwildinference.yaml +183 -0
  109. package/AISB/catalog/aisb.t3.049_hogwildinference.zh.yaml +138 -0
  110. package/AISB/catalog/aisb.t3.050_causalpfn.yaml +214 -0
  111. package/AISB/catalog/aisb.t3.050_causalpfn.zh.yaml +190 -0
  112. package/AISB/catalog/aisb.t3.051_flashtp.yaml +169 -0
  113. package/AISB/catalog/aisb.t3.051_flashtp.zh.yaml +124 -0
  114. package/AISB/catalog/aisb.t3.052_nsdiff.yaml +155 -0
  115. package/AISB/catalog/aisb.t3.052_nsdiff.zh.yaml +138 -0
  116. package/AISB/catalog/aisb.t3.053_k2vae.yaml +158 -0
  117. package/AISB/catalog/aisb.t3.053_k2vae.zh.yaml +132 -0
  118. package/AISB/catalog/aisb.t3.054_timebase.yaml +178 -0
  119. package/AISB/catalog/aisb.t3.054_timebase.zh.yaml +158 -0
  120. package/AISB/catalog/aisb.t3.055_csbrain.yaml +238 -0
  121. package/AISB/catalog/aisb.t3.055_csbrain.zh.yaml +184 -0
  122. package/AISB/catalog/aisb.t3.056_infosam.yaml +224 -0
  123. package/AISB/catalog/aisb.t3.056_infosam.zh.yaml +189 -0
  124. package/AISB/catalog/aisb.t3.057_mdreid.yaml +129 -0
  125. package/AISB/catalog/aisb.t3.057_mdreid.zh.yaml +117 -0
  126. package/AISB/catalog/aisb.t3.058_mindglitch.yaml +171 -0
  127. package/AISB/catalog/aisb.t3.058_mindglitch.zh.yaml +145 -0
  128. package/AISB/catalog/aisb.t3.059_selfsupervised.yaml +154 -0
  129. package/AISB/catalog/aisb.t3.059_selfsupervised.zh.yaml +125 -0
  130. package/AISB/catalog/aisb.t3.060_iaggad.yaml +121 -0
  131. package/AISB/catalog/aisb.t3.060_iaggad.zh.yaml +100 -0
  132. package/AISB/catalog/aisb.t3.061_hsgkn.yaml +136 -0
  133. package/AISB/catalog/aisb.t3.061_hsgkn.zh.yaml +113 -0
  134. package/AISB/catalog/aisb.t3.062_visionts.yaml +237 -0
  135. package/AISB/catalog/aisb.t3.062_visionts.zh.yaml +216 -0
  136. package/AISB/catalog/aisb.t3.063_tsrag.yaml +162 -0
  137. package/AISB/catalog/aisb.t3.063_tsrag.zh.yaml +138 -0
  138. package/AISB/catalog/aisb.t3.064_pir.yaml +221 -0
  139. package/AISB/catalog/aisb.t3.064_pir.zh.yaml +197 -0
  140. package/AISB/catalog/aisb.t3.065_proteinbinding.yaml +234 -0
  141. package/AISB/catalog/aisb.t3.065_proteinbinding.zh.yaml +167 -0
  142. package/AISB/catalog/aisb.t3.066_tropicalattention.yaml +267 -0
  143. package/AISB/catalog/aisb.t3.066_tropicalattention.zh.yaml +229 -0
  144. package/AISB/catalog/aisb.t3.067_kanad.yaml +193 -0
  145. package/AISB/catalog/aisb.t3.067_kanad.zh.yaml +167 -0
  146. package/AISB/catalog/aisb.t3.068_sempo.yaml +187 -0
  147. package/AISB/catalog/aisb.t3.068_sempo.zh.yaml +148 -0
  148. package/AISB/catalog/aisb.t3.069_treehfd.yaml +129 -0
  149. package/AISB/catalog/aisb.t3.069_treehfd.zh.yaml +111 -0
  150. package/AISB/catalog/aisb.t3.070_certifiedunlearning.yaml +224 -0
  151. package/AISB/catalog/aisb.t3.070_certifiedunlearning.zh.yaml +171 -0
  152. package/AISB/catalog/aisb.t3.071_neuralmjd.yaml +142 -0
  153. package/AISB/catalog/aisb.t3.071_neuralmjd.zh.yaml +120 -0
  154. package/AISB/catalog/aisb.t3.072_fedgmt.yaml +181 -0
  155. package/AISB/catalog/aisb.t3.072_fedgmt.zh.yaml +158 -0
  156. package/AISB/catalog/aisb.t3.073_rld.yaml +161 -0
  157. package/AISB/catalog/aisb.t3.073_rld.zh.yaml +129 -0
  158. package/AISB/catalog/aisb.t3.074_lsvi.yaml +163 -0
  159. package/AISB/catalog/aisb.t3.074_lsvi.zh.yaml +129 -0
  160. package/AISB/catalog/aisb.t3.075_treeslicedentropy.yaml +201 -0
  161. package/AISB/catalog/aisb.t3.075_treeslicedentropy.zh.yaml +148 -0
  162. package/AISB/catalog/aisb.t3.076_aanet.yaml +169 -0
  163. package/AISB/catalog/aisb.t3.076_aanet.zh.yaml +129 -0
  164. package/AISB/catalog/aisb.t3.077_cmnn.yaml +199 -0
  165. package/AISB/catalog/aisb.t3.077_cmnn.zh.yaml +165 -0
  166. package/AISB/catalog/aisb.t3.078_conformalanomaly.yaml +146 -0
  167. package/AISB/catalog/aisb.t3.078_conformalanomaly.zh.yaml +117 -0
  168. package/AISB/catalog/aisb.t3.079_dpfkmeans.yaml +131 -0
  169. package/AISB/catalog/aisb.t3.079_dpfkmeans.zh.yaml +104 -0
  170. package/AISB/catalog/aisb.t3.080_latentscorereweight.yaml +169 -0
  171. package/AISB/catalog/aisb.t3.080_latentscorereweight.zh.yaml +123 -0
  172. package/AISB/catalog/aisb.t3.081_qmamba.yaml +150 -0
  173. package/AISB/catalog/aisb.t3.081_qmamba.zh.yaml +117 -0
  174. package/AISB/catalog/aisb.t3.082_onlinellmrouting.yaml +160 -0
  175. package/AISB/catalog/aisb.t3.082_onlinellmrouting.zh.yaml +133 -0
  176. package/AISB/catalog/aisb.t3.083_starformer.yaml +178 -0
  177. package/AISB/catalog/aisb.t3.083_starformer.zh.yaml +140 -0
  178. package/AISB/catalog/aisb.t3.084_ift.yaml +139 -0
  179. package/AISB/catalog/aisb.t3.084_ift.zh.yaml +111 -0
  180. package/AISB/catalog/aisb.t3.085_neuralsurv.yaml +183 -0
  181. package/AISB/catalog/aisb.t3.085_neuralsurv.zh.yaml +143 -0
  182. package/AISB/catalog/aisb.t3.086_stella.yaml +197 -0
  183. package/AISB/catalog/aisb.t3.086_stella.zh.yaml +142 -0
  184. package/AISB/catalog/aisb.t3.087_moses.yaml +167 -0
  185. package/AISB/catalog/aisb.t3.087_moses.zh.yaml +132 -0
  186. package/AISB/catalog/aisb.t3.088_channelnorm.yaml +140 -0
  187. package/AISB/catalog/aisb.t3.088_channelnorm.zh.yaml +109 -0
  188. package/AISB/catalog/aisb.t3.089_causalvelocity.yaml +730 -0
  189. package/AISB/catalog/aisb.t3.089_causalvelocity.zh.yaml +668 -0
  190. package/AISB/catalog/aisb.t3.090_rstib.yaml +144 -0
  191. package/AISB/catalog/aisb.t3.090_rstib.zh.yaml +109 -0
  192. package/AISB/catalog/aisb.t3.091_timeawarecausal.yaml +132 -0
  193. package/AISB/catalog/aisb.t3.091_timeawarecausal.zh.yaml +107 -0
  194. package/AISB/catalog/aisb.t3.092_kmeanslocalopt.yaml +138 -0
  195. package/AISB/catalog/aisb.t3.092_kmeanslocalopt.zh.yaml +110 -0
  196. package/AISB/catalog/aisb.t3.093_fedwmsam.yaml +134 -0
  197. package/AISB/catalog/aisb.t3.093_fedwmsam.zh.yaml +106 -0
  198. package/AISB/catalog/aisb.t3.094_boundre.yaml +147 -0
  199. package/AISB/catalog/aisb.t3.094_boundre.zh.yaml +114 -0
  200. package/AISB/catalog/aisb.t3.095_fastfeaturecp.yaml +153 -0
  201. package/AISB/catalog/aisb.t3.095_fastfeaturecp.zh.yaml +118 -0
  202. package/AISB/catalog/aisb.t3.096_m3svm.yaml +189 -0
  203. package/AISB/catalog/aisb.t3.096_m3svm.zh.yaml +149 -0
  204. package/AISB/catalog/aisb.t3.097_wassersteintl.yaml +212 -0
  205. package/AISB/catalog/aisb.t3.097_wassersteintl.zh.yaml +169 -0
  206. package/AISB/catalog/aisb.t3.098_xmahalanobis.yaml +171 -0
  207. package/AISB/catalog/aisb.t3.098_xmahalanobis.zh.yaml +127 -0
  208. package/AISB/catalog/aisb.t3.099_ollalanding.yaml +248 -0
  209. package/AISB/catalog/aisb.t3.099_ollalanding.zh.yaml +182 -0
  210. package/AISB/catalog/aisb.t3.100_invmissingdata.yaml +179 -0
  211. package/AISB/catalog/aisb.t3.100_invmissingdata.zh.yaml +150 -0
  212. package/AISB/catalog/aisb.t3.101_acia.yaml +164 -0
  213. package/AISB/catalog/aisb.t3.101_acia.zh.yaml +109 -0
  214. package/AISB/catalog/aisb.t3.102_stochasticff.yaml +178 -0
  215. package/AISB/catalog/aisb.t3.102_stochasticff.zh.yaml +130 -0
  216. package/AISB/catalog/aisb.t3.103_qdcp.yaml +150 -0
  217. package/AISB/catalog/aisb.t3.103_qdcp.zh.yaml +116 -0
  218. package/AISB/catalog/aisb.t3.104_balancedactiveinf.yaml +137 -0
  219. package/AISB/catalog/aisb.t3.104_balancedactiveinf.zh.yaml +104 -0
  220. package/AISB/catalog/aisb.t3.105_binaryclasseval.yaml +161 -0
  221. package/AISB/catalog/aisb.t3.105_binaryclasseval.zh.yaml +130 -0
  222. package/AISB/image/001_aisb.t3.001_savvy.jpg +0 -0
  223. package/AISB/image/002_aisb.t3.002_pinet.jpg +0 -0
  224. package/AISB/image/003_aisb.t3.003_dmsqd.jpg +0 -0
  225. package/AISB/image/004_aisb.t3.004_decentralattn.jpg +0 -0
  226. package/AISB/image/005_aisb.t3.005_tsae.jpg +0 -0
  227. package/AISB/image/006_aisb.t3.006_physense.jpg +0 -0
  228. package/AISB/image/007_aisb.t3.007_reasoningiqa.jpg +0 -0
  229. package/AISB/image/008_aisb.t3.008_meanflows.jpg +0 -0
  230. package/AISB/image/009_aisb.t3.009_scoremissing.jpg +0 -0
  231. package/AISB/image/010_aisb.t3.010_suitabilityfilter.jpg +0 -0
  232. package/AISB/image/011_aisb.t3.011_osd.jpg +0 -0
  233. package/AISB/image/012_aisb.t3.012_efficientqat.jpg +0 -0
  234. package/AISB/image/013_aisb.t3.013_appl.jpg +0 -0
  235. package/AISB/image/014_aisb.t3.014_piguard.jpg +0 -0
  236. package/AISB/image/015_aisb.t3.015_frspec.jpg +0 -0
  237. package/AISB/image/016_aisb.t3.016_mathfusion.jpg +0 -0
  238. package/AISB/image/017_aisb.t3.017_multimodalglp.jpg +0 -0
  239. package/AISB/image/018_aisb.t3.018_cotsynth.jpg +0 -0
  240. package/AISB/image/019_aisb.t3.019_dyscaleut.jpg +0 -0
  241. package/AISB/image/020_aisb.t3.020_aristotle.jpg +0 -0
  242. package/AISB/image/021_aisb.t3.021_tokenrecycling.jpg +0 -0
  243. package/AISB/image/022_aisb.t3.022_chainofreasoning.jpg +0 -0
  244. package/AISB/image/023_aisb.t3.023_guidedembed.jpg +0 -0
  245. package/AISB/image/024_aisb.t3.024_outputcentric.jpg +0 -0
  246. package/AISB/image/025_aisb.t3.025_deeper.jpg +0 -0
  247. package/AISB/image/026_aisb.t3.026_gartkg.jpg +0 -0
  248. package/AISB/image/027_aisb.t3.027_citeeval.jpg +0 -0
  249. package/AISB/image/028_aisb.t3.028_sbam.jpg +0 -0
  250. package/AISB/image/029_aisb.t3.029_cdqgeoembed.jpg +0 -0
  251. package/AISB/image/030_aisb.t3.030_processrm.jpg +0 -0
  252. package/AISB/image/031_aisb.t3.031_circuitstability.jpg +0 -0
  253. package/AISB/image/032_aisb.t3.032_ptsolver.jpg +0 -0
  254. package/AISB/image/033_aisb.t3.033_gcse.jpg +0 -0
  255. package/AISB/image/034_aisb.t3.034_ensemblewm.jpg +0 -0
  256. package/AISB/image/035_aisb.t3.035_moralvalueswa.jpg +0 -0
  257. package/AISB/image/036_aisb.t3.036_weakstrongpref.jpg +0 -0
  258. package/AISB/image/037_aisb.t3.037_dementiamask.jpg +0 -0
  259. package/AISB/image/038_aisb.t3.038_tinysam.jpg +0 -0
  260. package/AISB/image/039_aisb.t3.039_calf.jpg +0 -0
  261. package/AISB/image/040_aisb.t3.040_graniteguardian.jpg +0 -0
  262. package/AISB/image/041_aisb.t3.041_amdm.jpg +0 -0
  263. package/AISB/image/042_aisb.t3.042_xpatch.jpg +0 -0
  264. package/AISB/image/043_aisb.t3.043_vhm.jpg +0 -0
  265. package/AISB/image/044_aisb.t3.044_rgvi.jpg +0 -0
  266. package/AISB/image/045_aisb.t3.045_pslstm.jpg +0 -0
  267. package/AISB/image/046_aisb.t3.046_nonstatts.jpg +0 -0
  268. package/AISB/image/047_aisb.t3.047_timepfn.jpg +0 -0
  269. package/AISB/image/048_aisb.t3.048_proxyspex.jpg +0 -0
  270. package/AISB/image/049_aisb.t3.049_hogwildinference.jpg +0 -0
  271. package/AISB/image/050_aisb.t3.050_causalpfn.jpg +0 -0
  272. package/AISB/image/051_aisb.t3.051_flashtp.jpg +0 -0
  273. package/AISB/image/052_aisb.t3.052_nsdiff.jpg +0 -0
  274. package/AISB/image/053_aisb.t3.053_k2vae.jpg +0 -0
  275. package/AISB/image/054_aisb.t3.054_timebase.jpg +0 -0
  276. package/AISB/image/055_aisb.t3.055_csbrain.jpg +0 -0
  277. package/AISB/image/056_aisb.t3.056_infosam.jpg +0 -0
  278. package/AISB/image/057_aisb.t3.057_mdreid.jpg +0 -0
  279. package/AISB/image/058_aisb.t3.058_mindglitch.jpg +0 -0
  280. package/AISB/image/059_aisb.t3.059_selfsupervised.jpg +0 -0
  281. package/AISB/image/060_aisb.t3.060_iaggad.jpg +0 -0
  282. package/AISB/image/061_aisb.t3.061_hsgkn.jpg +0 -0
  283. package/AISB/image/062_aisb.t3.062_visionts.jpg +0 -0
  284. package/AISB/image/063_aisb.t3.063_tsrag.jpg +0 -0
  285. package/AISB/image/064_aisb.t3.064_pir.jpg +0 -0
  286. package/AISB/image/065_aisb.t3.065_proteinbinding.jpg +0 -0
  287. package/AISB/image/066_aisb.t3.066_tropicalattention.jpg +0 -0
  288. package/AISB/image/067_aisb.t3.067_kanad.jpg +0 -0
  289. package/AISB/image/068_aisb.t3.068_sempo.jpg +0 -0
  290. package/AISB/image/069_aisb.t3.069_treehfd.jpg +0 -0
  291. package/AISB/image/070_aisb.t3.070_certifiedunlearning.jpg +0 -0
  292. package/AISB/image/071_aisb.t3.071_neuralmjd.jpg +0 -0
  293. package/AISB/image/072_aisb.t3.072_fedgmt.jpg +0 -0
  294. package/AISB/image/073_aisb.t3.073_rld.jpg +0 -0
  295. package/AISB/image/074_aisb.t3.074_lsvi.jpg +0 -0
  296. package/AISB/image/075_aisb.t3.075_treeslicedentropy.jpg +0 -0
  297. package/AISB/image/076_aisb.t3.076_aanet.jpg +0 -0
  298. package/AISB/image/077_aisb.t3.077_cmnn.jpg +0 -0
  299. package/AISB/image/078_aisb.t3.078_conformalanomaly.jpg +0 -0
  300. package/AISB/image/079_aisb.t3.079_dpfkmeans.jpg +0 -0
  301. package/AISB/image/080_aisb.t3.080_latentscorereweight.jpg +0 -0
  302. package/AISB/image/081_aisb.t3.081_qmamba.jpg +0 -0
  303. package/AISB/image/082_aisb.t3.082_onlinellmrouting.jpg +0 -0
  304. package/AISB/image/083_aisb.t3.083_starformer.jpg +0 -0
  305. package/AISB/image/084_aisb.t3.084_ift.jpg +0 -0
  306. package/AISB/image/085_aisb.t3.085_neuralsurv.jpg +0 -0
  307. package/AISB/image/086_aisb.t3.086_stella.jpg +0 -0
  308. package/AISB/image/087_aisb.t3.087_moses.jpg +0 -0
  309. package/AISB/image/088_aisb.t3.088_channelnorm.jpg +0 -0
  310. package/AISB/image/089_aisb.t3.089_causalvelocity.jpg +0 -0
  311. package/AISB/image/090_aisb.t3.090_rstib.jpg +0 -0
  312. package/AISB/image/091_aisb.t3.091_timeawarecausal.jpg +0 -0
  313. package/AISB/image/092_aisb.t3.092_kmeanslocalopt.jpg +0 -0
  314. package/AISB/image/093_aisb.t3.093_fedwmsam.jpg +0 -0
  315. package/AISB/image/094_aisb.t3.094_boundre.jpg +0 -0
  316. package/AISB/image/095_aisb.t3.095_fastfeaturecp.jpg +0 -0
  317. package/AISB/image/096_aisb.t3.096_m3svm.jpg +0 -0
  318. package/AISB/image/097_aisb.t3.097_wassersteintl.jpg +0 -0
  319. package/AISB/image/098_aisb.t3.098_xmahalanobis.jpg +0 -0
  320. package/AISB/image/099_aisb.t3.099_ollalanding.jpg +0 -0
  321. package/AISB/image/100_aisb.t3.100_invmissingdata.jpg +0 -0
  322. package/AISB/image/101_aisb.t3.101_acia.jpg +0 -0
  323. package/AISB/image/102_aisb.t3.102_stochasticff.jpg +0 -0
  324. package/AISB/image/103_aisb.t3.103_qdcp.jpg +0 -0
  325. package/AISB/image/104_aisb.t3.104_balancedactiveinf.jpg +0 -0
  326. package/AISB/image/105_aisb.t3.105_binaryclasseval.jpg +0 -0
  327. package/AISB/image/106_aisb.t1.reasoning_lite.jpg +0 -0
  328. package/AISB/image/107_aisb.t2.paper_audit.jpg +0 -0
  329. package/AISB/image/108_aisb.t3.multi_gpu_search.jpg +0 -0
  330. package/AISB/image/109_aisb.t3.tdc_admet.jpg +0 -0
  331. package/AISB/image/aisb.b1.agentic_coding.svg +16 -0
  332. package/AISB/image/aisb.b10.climate_earth.svg +16 -0
  333. package/AISB/image/aisb.b11.model_efficiency.svg +16 -0
  334. package/AISB/image/aisb.b12.embodied_ai.svg +16 -0
  335. package/AISB/image/aisb.b2.agent_systems.svg +16 -0
  336. package/AISB/image/aisb.b3.self_evolving_rl.svg +16 -0
  337. package/AISB/image/aisb.b4.lm_reasoning.svg +16 -0
  338. package/AISB/image/aisb.b5.math_proof.svg +16 -0
  339. package/AISB/image/aisb.b6.research_process.svg +16 -0
  340. package/AISB/image/aisb.b7.multimodal_fusion.svg +16 -0
  341. package/AISB/image/aisb.b8.lifesci_drug.svg +16 -0
  342. package/AISB/image/aisb.b9.material_science.svg +16 -0
  343. package/README.md +132 -11
  344. package/bin/ds.js +376 -49
  345. package/docs/en/00_QUICK_START.md +135 -18
  346. package/docs/en/01_SETTINGS_REFERENCE.md +468 -96
  347. package/docs/en/02_START_RESEARCH_GUIDE.md +26 -5
  348. package/docs/en/03_QQ_CONNECTOR_GUIDE.md +14 -3
  349. package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +2 -0
  350. package/docs/en/05_TUI_GUIDE.md +171 -2
  351. package/docs/en/07_MEMORY_AND_MCP.md +38 -2
  352. package/docs/en/09_DOCTOR.md +64 -4
  353. package/docs/en/10_WEIXIN_CONNECTOR_GUIDE.md +38 -1
  354. package/docs/en/11_LICENSE_AND_RISK.md +4 -0
  355. package/docs/en/12_GUIDED_WORKFLOW_TOUR.md +15 -0
  356. package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +9 -0
  357. package/docs/en/15_CODEX_PROVIDER_SETUP.md +622 -187
  358. package/docs/en/16_TELEGRAM_CONNECTOR_GUIDE.md +14 -0
  359. package/docs/en/17_WHATSAPP_CONNECTOR_GUIDE.md +14 -0
  360. package/docs/en/18_FEISHU_CONNECTOR_GUIDE.md +14 -0
  361. package/docs/en/21_LOCAL_MODEL_BACKENDS_GUIDE.md +105 -2
  362. package/docs/en/22_BENCHSTORE_YAML_REFERENCE.md +469 -0
  363. package/docs/en/23_BENCHSTORE_GITHUB_RELEASES_SPEC.md +316 -0
  364. package/docs/en/24_CLAUDE_CODE_PROVIDER_SETUP.md +469 -0
  365. package/docs/en/25_OPENCODE_PROVIDER_SETUP.md +653 -0
  366. package/docs/en/26_CITATION_AND_ATTRIBUTION.md +119 -0
  367. package/docs/en/27_KIMI_CODE_PROVIDER_SETUP.md +180 -0
  368. package/docs/en/28_DISCORD_CONNECTOR_GUIDE.md +61 -0
  369. package/docs/en/29_SLACK_CONNECTOR_GUIDE.md +60 -0
  370. package/docs/en/30_SETTINGS_CONTROL_CENTER_GUIDE.md +371 -0
  371. package/docs/en/{19_LOCAL_BROWSER_AUTH.md → 31_LOCAL_BROWSER_AUTH.md} +1 -1
  372. package/docs/en/32_WINDOWS_WSL2_DEPLOYMENT_GUIDE.md +273 -0
  373. package/docs/en/33_WORKSPACE_EXPLORER_QA.md +121 -0
  374. package/docs/en/91_DEVELOPMENT.md +29 -0
  375. package/docs/en/99_ACKNOWLEDGEMENTS.md +24 -19
  376. package/docs/en/README.md +44 -7
  377. package/docs/images/admin/admin-connectors-health-en.png +0 -0
  378. package/docs/images/admin/admin-controllers-en.png +0 -0
  379. package/docs/images/admin/admin-diagnostics-en.png +0 -0
  380. package/docs/images/admin/admin-errors-en.png +0 -0
  381. package/docs/images/admin/admin-issues-en.png +0 -0
  382. package/docs/images/admin/admin-logs-en.png +0 -0
  383. package/docs/images/admin/admin-quest-detail-en.png +0 -0
  384. package/docs/images/admin/admin-quests-en.png +0 -0
  385. package/docs/images/admin/admin-repairs-en.png +0 -0
  386. package/docs/images/admin/admin-runtime-en.png +0 -0
  387. package/docs/images/admin/admin-search-en.png +0 -0
  388. package/docs/images/admin/admin-stats-en.png +0 -0
  389. package/docs/images/admin/admin-summary-en.png +0 -0
  390. package/docs/images/connectors/connector-discord-en.png +0 -0
  391. package/docs/images/connectors/connector-feishu-en.png +0 -0
  392. package/docs/images/connectors/connector-lingzhu-en.png +0 -0
  393. package/docs/images/connectors/connector-qq-en.png +0 -0
  394. package/docs/images/connectors/connector-slack-en.png +0 -0
  395. package/docs/images/connectors/connector-telegram-en.png +0 -0
  396. package/docs/images/connectors/connector-weixin-en.png +0 -0
  397. package/docs/images/connectors/connector-whatsapp-en.png +0 -0
  398. package/docs/images/settings/settings-baselines-en.png +0 -0
  399. package/docs/images/settings/settings-config-en.png +0 -0
  400. package/docs/images/settings/settings-connectors-overview-en.png +0 -0
  401. package/docs/images/settings/settings-deepxiv-en.png +0 -0
  402. package/docs/images/settings/settings-mcp-servers-en.png +0 -0
  403. package/docs/images/settings/settings-plugins-en.png +0 -0
  404. package/docs/images/settings/settings-runners-en.png +0 -0
  405. package/docs/zh/00_QUICK_START.md +92 -17
  406. package/docs/zh/01_SETTINGS_REFERENCE.md +219 -98
  407. package/docs/zh/02_START_RESEARCH_GUIDE.md +26 -5
  408. package/docs/zh/05_TUI_GUIDE.md +171 -2
  409. package/docs/zh/07_MEMORY_AND_MCP.md +29 -2
  410. package/docs/zh/09_DOCTOR.md +39 -4
  411. package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +24 -1
  412. package/docs/zh/11_LICENSE_AND_RISK.md +4 -0
  413. package/docs/zh/12_GUIDED_WORKFLOW_TOUR.md +15 -0
  414. package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +9 -0
  415. package/docs/zh/15_CODEX_PROVIDER_SETUP.md +550 -188
  416. package/docs/zh/21_LOCAL_MODEL_BACKENDS_GUIDE.md +105 -2
  417. package/docs/zh/22_BENCHSTORE_YAML_REFERENCE.md +459 -0
  418. package/docs/zh/23_BENCHSTORE_GITHUB_RELEASES_SPEC.md +287 -0
  419. package/docs/zh/23_CLAUDE_RUNNER_GUIDE.md +103 -0
  420. package/docs/zh/24_CLAUDE_CODE_PROVIDER_SETUP.md +460 -0
  421. package/docs/zh/25_OPENCODE_PROVIDER_SETUP.md +660 -0
  422. package/docs/zh/26_CITATION_AND_ATTRIBUTION.md +102 -0
  423. package/docs/zh/27_KIMI_CODE_PROVIDER_SETUP.md +51 -0
  424. package/docs/zh/{19_LOCAL_BROWSER_AUTH.md → 31_LOCAL_BROWSER_AUTH.md} +1 -1
  425. package/docs/zh/32_WINDOWS_WSL2_DEPLOYMENT_GUIDE.md +264 -0
  426. package/docs/zh/33_WORKSPACE_EXPLORER_QA.md +127 -0
  427. package/docs/zh/99_ACKNOWLEDGEMENTS.md +23 -19
  428. package/docs/zh/README.md +29 -7
  429. package/install.sh +122 -16
  430. package/package.json +4 -1
  431. package/pyproject.toml +2 -1
  432. package/src/deepscientist/__init__.py +1 -1
  433. package/src/deepscientist/acp/envelope.py +13 -0
  434. package/src/deepscientist/admin/__init__.py +3 -0
  435. package/src/deepscientist/admin/charts.py +681 -0
  436. package/src/deepscientist/admin/logs.py +119 -0
  437. package/src/deepscientist/admin/repairs.py +217 -0
  438. package/src/deepscientist/admin/service.py +1310 -0
  439. package/src/deepscientist/admin/system_info.py +700 -0
  440. package/src/deepscientist/admin/tasks.py +465 -0
  441. package/src/deepscientist/admin/tool_metrics.py +600 -0
  442. package/src/deepscientist/artifact/guidance.py +8 -4
  443. package/src/deepscientist/artifact/schemas.py +115 -0
  444. package/src/deepscientist/artifact/service.py +4268 -260
  445. package/src/deepscientist/bash_exec/monitor.py +30 -3
  446. package/src/deepscientist/bash_exec/service.py +134 -1
  447. package/src/deepscientist/benchstore/__init__.py +4 -0
  448. package/src/deepscientist/benchstore/prompt_builder.py +224 -0
  449. package/src/deepscientist/benchstore/service.py +1716 -0
  450. package/src/deepscientist/channels/weixin_ilink.py +8 -1
  451. package/src/deepscientist/cli.py +92 -17
  452. package/src/deepscientist/codex_cli_compat.py +2 -2
  453. package/src/deepscientist/config/models.py +82 -11
  454. package/src/deepscientist/config/service.py +927 -91
  455. package/src/deepscientist/connector/weixin_support.py +48 -17
  456. package/src/deepscientist/daemon/api/handlers.py +697 -210
  457. package/src/deepscientist/daemon/api/router.py +76 -1
  458. package/src/deepscientist/daemon/app.py +1054 -51
  459. package/src/deepscientist/diagnostics/runner_failures.py +147 -0
  460. package/src/deepscientist/doctor.py +212 -65
  461. package/src/deepscientist/evidence_packets.py +590 -0
  462. package/src/deepscientist/home.py +52 -4
  463. package/src/deepscientist/kimi_cli_compat.py +50 -0
  464. package/src/deepscientist/latex_runtime.py +2 -2
  465. package/src/deepscientist/mcp/context.py +2 -0
  466. package/src/deepscientist/mcp/schemas.py +114 -0
  467. package/src/deepscientist/mcp/server.py +1566 -126
  468. package/src/deepscientist/memory/service.py +203 -16
  469. package/src/deepscientist/process_control.py +8 -1
  470. package/src/deepscientist/prompts/builder.py +836 -92
  471. package/src/deepscientist/quest/__init__.py +2 -2
  472. package/src/deepscientist/quest/layout.py +12 -1
  473. package/src/deepscientist/quest/node_traces.py +10 -0
  474. package/src/deepscientist/quest/service.py +1430 -139
  475. package/src/deepscientist/quest/stage_views.py +1 -1
  476. package/src/deepscientist/runners/__init__.py +18 -0
  477. package/src/deepscientist/runners/base.py +89 -1
  478. package/src/deepscientist/runners/builtins.py +13 -1
  479. package/src/deepscientist/runners/claude.py +391 -0
  480. package/src/deepscientist/runners/codex.py +421 -21
  481. package/src/deepscientist/runners/codex_telemetry.py +127 -0
  482. package/src/deepscientist/runners/kimi.py +334 -0
  483. package/src/deepscientist/runners/metadata.py +68 -0
  484. package/src/deepscientist/runners/opencode.py +414 -0
  485. package/src/deepscientist/runners/runtime_overrides.py +100 -0
  486. package/src/deepscientist/runners/simple_cli.py +538 -0
  487. package/src/deepscientist/runtime_storage.py +303 -0
  488. package/src/deepscientist/shared.py +61 -16
  489. package/src/deepscientist/skills/installer.py +37 -0
  490. package/src/deepscientist/skills/registry.py +2 -0
  491. package/src/deepscientist/tinytex.py +2 -2
  492. package/src/deepscientist/tui.py +10 -3
  493. package/src/prompts/benchstore/system.md +77 -0
  494. package/src/prompts/connectors/qq.md +33 -2
  495. package/src/prompts/connectors/weixin.md +208 -23
  496. package/src/prompts/contracts/admin_ops.md +74 -0
  497. package/src/prompts/contracts/admin_ops_knowledge.md +138 -0
  498. package/src/prompts/contracts/shared_interaction.md +5 -11
  499. package/src/prompts/start_setup/system.md +422 -0
  500. package/src/prompts/system.md +409 -315
  501. package/src/prompts/system_copilot.md +88 -12
  502. package/src/skills/analysis-campaign/SKILL.md +239 -578
  503. package/src/skills/analysis-campaign/references/artifact-flow-examples.md +102 -0
  504. package/src/skills/analysis-campaign/references/boundary-cases.md +98 -0
  505. package/src/skills/analysis-campaign/references/campaign-checklist-template.md +39 -24
  506. package/src/skills/analysis-campaign/references/campaign-design.md +26 -10
  507. package/src/skills/analysis-campaign/references/campaign-plan-template.md +53 -54
  508. package/src/skills/analysis-campaign/references/operational-guidance.md +97 -0
  509. package/src/skills/analysis-campaign/references/writing-facing-slice-examples.md +10 -20
  510. package/src/skills/baseline/SKILL.md +183 -461
  511. package/src/skills/baseline/references/artifact-flow-examples.md +106 -0
  512. package/src/skills/baseline/references/artifact-payload-examples.md +1 -1
  513. package/src/skills/baseline/references/baseline-checklist-template.md +27 -35
  514. package/src/skills/baseline/references/baseline-plan-template.md +37 -76
  515. package/src/skills/baseline/references/boundary-cases.md +86 -0
  516. package/src/skills/baseline/references/codebase-audit-checklist.md +2 -6
  517. package/src/skills/baseline/references/comparability-contract.md +7 -12
  518. package/src/skills/baseline/references/operational-guidance.md +56 -0
  519. package/src/skills/baseline/references/route-selection.md +5 -25
  520. package/src/skills/decision/SKILL.md +113 -306
  521. package/src/skills/decision/references/checkpoint-memory-template.md +47 -0
  522. package/src/skills/decision/references/operational-guidance.md +94 -0
  523. package/src/skills/decision/references/research-route-criteria.md +7 -8
  524. package/src/skills/decision/references/strategic-decision-template.md +13 -26
  525. package/src/skills/experiment/SKILL.md +132 -670
  526. package/src/skills/experiment/references/execution-playbook.md +374 -0
  527. package/src/skills/experiment/references/main-experiment-checklist-template.md +26 -2
  528. package/src/skills/experiment/references/main-experiment-plan-template.md +28 -17
  529. package/src/skills/experiment/references/operational-guidance.md +108 -0
  530. package/src/skills/finalize/SKILL.md +62 -0
  531. package/src/skills/finalize/references/checkpoint-memory-template.md +49 -0
  532. package/src/skills/finalize/references/resume-packet-template.md +7 -0
  533. package/src/skills/idea/SKILL.md +228 -15
  534. package/src/skills/idea/references/controlled-brainstorming-playbook.md +78 -0
  535. package/src/skills/idea/references/current-board-packet-template.md +61 -0
  536. package/src/skills/idea/references/high-value-idea-sourcing.md +119 -0
  537. package/src/skills/idea/references/idea-generation-playbook.md +21 -0
  538. package/src/skills/idea/references/idea-thinking-flow.md +6 -0
  539. package/src/skills/idea/references/literature-survey-template.md +3 -0
  540. package/src/skills/idea/references/objective-contract-template.md +54 -0
  541. package/src/skills/idea/references/outline-seeding-example.md +56 -0
  542. package/src/skills/idea/references/pre-idea-draft-template.md +105 -0
  543. package/src/skills/idea/references/related-work-playbook.md +75 -2
  544. package/src/skills/idea/references/research-history-playbook.md +114 -0
  545. package/src/skills/idea/references/selection-gate.md +58 -6
  546. package/src/skills/intake-audit/SKILL.md +43 -2
  547. package/src/skills/intake-audit/references/state-audit-template.md +10 -0
  548. package/src/skills/nature-data/SKILL.md +128 -0
  549. package/src/skills/nature-data/UPSTREAM_LICENSE.txt +21 -0
  550. package/src/skills/nature-data/agents/openai.yaml +4 -0
  551. package/src/skills/nature-data/references/chinese-author-alignment.md +84 -0
  552. package/src/skills/nature-data/references/fair-metadata-checklist.md +105 -0
  553. package/src/skills/nature-data/references/policy-principles.md +103 -0
  554. package/src/skills/nature-data/references/repository-and-identifiers.md +96 -0
  555. package/src/skills/nature-data/references/source-basis.md +54 -0
  556. package/src/skills/nature-data/references/statement-patterns.md +153 -0
  557. package/src/skills/nature-figure/SKILL.md +197 -0
  558. package/src/skills/nature-figure/UPSTREAM_LICENSE.txt +21 -0
  559. package/src/skills/nature-figure/agents/openai.yaml +4 -0
  560. package/src/skills/nature-figure/evals/evals.json +37 -0
  561. package/src/skills/nature-figure/references/api.md +428 -0
  562. package/src/skills/nature-figure/references/backend-selection.md +100 -0
  563. package/src/skills/nature-figure/references/chart-types.md +281 -0
  564. package/src/skills/nature-figure/references/common-patterns.md +349 -0
  565. package/src/skills/nature-figure/references/design-theory.md +436 -0
  566. package/src/skills/nature-figure/references/figure-contract.md +93 -0
  567. package/src/skills/nature-figure/references/nature-2026-observations.md +112 -0
  568. package/src/skills/nature-figure/references/qa-contract.md +119 -0
  569. package/src/skills/nature-figure/references/r-template-index.md +66 -0
  570. package/src/skills/nature-figure/references/r-workflow.md +161 -0
  571. package/src/skills/nature-figure/references/tutorials.md +250 -0
  572. package/src/skills/nature-paper2ppt/SKILL.md +507 -0
  573. package/src/skills/nature-paper2ppt/UPSTREAM_LICENSE.txt +21 -0
  574. package/src/skills/nature-paper2ppt/agents/openai.yaml +4 -0
  575. package/src/skills/nature-polishing/SKILL.md +385 -0
  576. package/src/skills/nature-polishing/UPSTREAM_LICENSE.txt +21 -0
  577. package/src/skills/nature-polishing/agents/openai.yaml +4 -0
  578. package/src/skills/nature-polishing/references/phrasebank-playbook.md +162 -0
  579. package/src/skills/nature-polishing/references/section-moves.md +240 -0
  580. package/src/skills/nature-polishing/references/style-guardrails.md +94 -0
  581. package/src/skills/nature-polishing/references/writing-strategy.md +148 -0
  582. package/src/skills/optimize/SKILL.md +177 -1568
  583. package/src/skills/optimize/references/brief-shaping-playbook.md +95 -0
  584. package/src/skills/optimize/references/candidate-board-template.md +13 -0
  585. package/src/skills/optimize/references/candidate-ranking-template.md +51 -0
  586. package/src/skills/optimize/references/codegen-route-playbook.md +50 -0
  587. package/src/skills/optimize/references/debug-response-template.md +29 -0
  588. package/src/skills/optimize/references/frontier-review-template.md +32 -0
  589. package/src/skills/optimize/references/fusion-playbook.md +36 -0
  590. package/src/skills/optimize/references/method-brief-template.md +73 -0
  591. package/src/skills/optimize/references/operational-guidance.md +621 -0
  592. package/src/skills/optimize/references/optimization-memory-template.md +30 -0
  593. package/src/skills/optimize/references/optimize-checklist-template.md +18 -0
  594. package/src/skills/optimize/references/plateau-response-playbook.md +28 -0
  595. package/src/skills/optimize/references/prompt-patterns.md +49 -0
  596. package/src/skills/paper-outline/SKILL.md +227 -0
  597. package/src/skills/paper-outline/references/outline-patterns.md +87 -0
  598. package/src/skills/paper-plot/SKILL.md +79 -0
  599. package/src/skills/paper-plot/agents/openai.yaml +4 -0
  600. package/src/skills/paper-plot/references/bar_grouped_hatch.md +96 -0
  601. package/src/skills/paper-plot/references/bar_paired_delta.md +72 -0
  602. package/src/skills/paper-plot/references/line_confidence_band.md +75 -0
  603. package/src/skills/paper-plot/references/line_loss_with_inset.md +65 -0
  604. package/src/skills/paper-plot/references/line_training_curve.md +44 -0
  605. package/src/skills/paper-plot/references/radar_dual_series.md +59 -0
  606. package/src/skills/paper-plot/references/scatter_broken_axis.md +59 -0
  607. package/src/skills/paper-plot/references/scatter_tsne_cluster.md +72 -0
  608. package/src/skills/paper-plot/scripts/bar_memevolve.py +109 -0
  609. package/src/skills/paper-plot/scripts/bar_spice.py +166 -0
  610. package/src/skills/paper-plot/scripts/line_aime.py +94 -0
  611. package/src/skills/paper-plot/scripts/line_loss_inset.py +157 -0
  612. package/src/skills/paper-plot/scripts/line_selfdistill.py +168 -0
  613. package/src/skills/paper-plot/scripts/radar_dora.py +151 -0
  614. package/src/skills/paper-plot/scripts/scatter_break.py +169 -0
  615. package/src/skills/paper-plot/scripts/scatter_tsne.py +133 -0
  616. package/src/skills/rebuttal/SKILL.md +9 -0
  617. package/src/skills/references/tool-usage-by-stage.md +438 -0
  618. package/src/skills/review/SKILL.md +105 -7
  619. package/src/skills/science/PROVENANCE.md +44 -0
  620. package/src/skills/science/SKILL.md +137 -0
  621. package/src/skills/science/references/artifact-science-tool.md +110 -0
  622. package/src/skills/science/references/claim-type-discipline.md +56 -0
  623. package/src/skills/science/references/domain-index.md +422 -0
  624. package/src/skills/science/references/hpc-via-bash-exec.md +42 -0
  625. package/src/skills/science/references/package-check-playbook.md +64 -0
  626. package/src/skills/science/references/package-index.min.json +3616 -0
  627. package/src/skills/science/references/packages/abinit.md +80 -0
  628. package/src/skills/science/references/packages/acts.md +73 -0
  629. package/src/skills/science/references/packages/aiida-core.md +80 -0
  630. package/src/skills/science/references/packages/alamode.md +80 -0
  631. package/src/skills/science/references/packages/amuse.md +88 -0
  632. package/src/skills/science/references/packages/anndata.md +88 -0
  633. package/src/skills/science/references/packages/arbor.md +80 -0
  634. package/src/skills/science/references/packages/arc.md +73 -0
  635. package/src/skills/science/references/packages/astropy.md +88 -0
  636. package/src/skills/science/references/packages/astroquery.md +88 -0
  637. package/src/skills/science/references/packages/atomate2.md +80 -0
  638. package/src/skills/science/references/packages/atomsmltr.md +73 -0
  639. package/src/skills/science/references/packages/awkward.md +73 -0
  640. package/src/skills/science/references/packages/batman.md +88 -0
  641. package/src/skills/science/references/packages/biopython.md +88 -0
  642. package/src/skills/science/references/packages/bloqade.md +73 -0
  643. package/src/skills/science/references/packages/brian2.md +73 -0
  644. package/src/skills/science/references/packages/bullet3.md +73 -0
  645. package/src/skills/science/references/packages/calculix.md +80 -0
  646. package/src/skills/science/references/packages/cantera.md +73 -0
  647. package/src/skills/science/references/packages/cavity-md-ipi.md +80 -0
  648. package/src/skills/science/references/packages/ccdproc.md +88 -0
  649. package/src/skills/science/references/packages/celerite2.md +88 -0
  650. package/src/skills/science/references/packages/cellrank.md +73 -0
  651. package/src/skills/science/references/packages/cesm.md +80 -0
  652. package/src/skills/science/references/packages/chemicals.md +73 -0
  653. package/src/skills/science/references/packages/chempy.md +73 -0
  654. package/src/skills/science/references/packages/cirq.md +73 -0
  655. package/src/skills/science/references/packages/coffea.md +73 -0
  656. package/src/skills/science/references/packages/cp2k.md +88 -0
  657. package/src/skills/science/references/packages/custodian.md +80 -0
  658. package/src/skills/science/references/packages/dart.md +73 -0
  659. package/src/skills/science/references/packages/datamol.md +88 -0
  660. package/src/skills/science/references/packages/dd4hep.md +73 -0
  661. package/src/skills/science/references/packages/dealii.md +80 -0
  662. package/src/skills/science/references/packages/deepchem.md +88 -0
  663. package/src/skills/science/references/packages/delphes.md +73 -0
  664. package/src/skills/science/references/packages/devito.md +80 -0
  665. package/src/skills/science/references/packages/dftb.md +88 -0
  666. package/src/skills/science/references/packages/dftd4.md +88 -0
  667. package/src/skills/science/references/packages/dftk-jl.md +80 -0
  668. package/src/skills/science/references/packages/dolfinx.md +80 -0
  669. package/src/skills/science/references/packages/drake.md +73 -0
  670. package/src/skills/science/references/packages/dumux.md +73 -0
  671. package/src/skills/science/references/packages/elk.md +80 -0
  672. package/src/skills/science/references/packages/elmerfem.md +80 -0
  673. package/src/skills/science/references/packages/enzo-e.md +88 -0
  674. package/src/skills/science/references/packages/espresso.md +80 -0
  675. package/src/skills/science/references/packages/exoplanet.md +88 -0
  676. package/src/skills/science/references/packages/fairroot.md +73 -0
  677. package/src/skills/science/references/packages/fbpic.md +80 -0
  678. package/src/skills/science/references/packages/fdtdbath-meep.md +80 -0
  679. package/src/skills/science/references/packages/geant4.md +73 -0
  680. package/src/skills/science/references/packages/geosx.md +80 -0
  681. package/src/skills/science/references/packages/gprmax.md +80 -0
  682. package/src/skills/science/references/packages/gromacs.md +80 -0
  683. package/src/skills/science/references/packages/gwaslab.md +73 -0
  684. package/src/skills/science/references/packages/gz-sim.md +73 -0
  685. package/src/skills/science/references/packages/hail.md +88 -0
  686. package/src/skills/science/references/packages/hiphive.md +80 -0
  687. package/src/skills/science/references/packages/hoomd-blue.md +80 -0
  688. package/src/skills/science/references/packages/itensor.md +73 -0
  689. package/src/skills/science/references/packages/itensors-jl.md +73 -0
  690. package/src/skills/science/references/packages/jdftx.md +73 -0
  691. package/src/skills/science/references/packages/jobflow.md +80 -0
  692. package/src/skills/science/references/packages/kadanoffbaym-jl.md +73 -0
  693. package/src/skills/science/references/packages/kite.md +80 -0
  694. package/src/skills/science/references/packages/kratos.md +80 -0
  695. package/src/skills/science/references/packages/kwant.md +73 -0
  696. package/src/skills/science/references/packages/lammps.md +80 -0
  697. package/src/skills/science/references/packages/lightkurve.md +88 -0
  698. package/src/skills/science/references/packages/limix.md +73 -0
  699. package/src/skills/science/references/packages/maxwelllink.md +80 -0
  700. package/src/skills/science/references/packages/mcdc.md +73 -0
  701. package/src/skills/science/references/packages/meep.md +80 -0
  702. package/src/skills/science/references/packages/mfem.md +80 -0
  703. package/src/skills/science/references/packages/mitgcm.md +73 -0
  704. package/src/skills/science/references/packages/modflow6.md +73 -0
  705. package/src/skills/science/references/packages/molecool.md +73 -0
  706. package/src/skills/science/references/packages/mom6.md +73 -0
  707. package/src/skills/science/references/packages/moose.md +80 -0
  708. package/src/skills/science/references/packages/mpas-model.md +73 -0
  709. package/src/skills/science/references/packages/mujoco.md +73 -0
  710. package/src/skills/science/references/packages/mumax3.md +73 -0
  711. package/src/skills/science/references/packages/nekrs.md +80 -0
  712. package/src/skills/science/references/packages/nessi.md +73 -0
  713. package/src/skills/science/references/packages/nest-simulator.md +73 -0
  714. package/src/skills/science/references/packages/netket.md +73 -0
  715. package/src/skills/science/references/packages/neuron.md +73 -0
  716. package/src/skills/science/references/packages/nextflow.md +88 -0
  717. package/src/skills/science/references/packages/nwchem.md +88 -0
  718. package/src/skills/science/references/packages/openbabel.md +88 -0
  719. package/src/skills/science/references/packages/openems.md +80 -0
  720. package/src/skills/science/references/packages/openff-toolkit.md +88 -0
  721. package/src/skills/science/references/packages/openfoam-dev.md +80 -0
  722. package/src/skills/science/references/packages/openmc.md +73 -0
  723. package/src/skills/science/references/packages/openmm.md +80 -0
  724. package/src/skills/science/references/packages/openmoc.md +73 -0
  725. package/src/skills/science/references/packages/openmx.md +80 -0
  726. package/src/skills/science/references/packages/opensees.md +80 -0
  727. package/src/skills/science/references/packages/opensn.md +80 -0
  728. package/src/skills/science/references/packages/opm-simulators.md +73 -0
  729. package/src/skills/science/references/packages/oqupy.md +73 -0
  730. package/src/skills/science/references/packages/packmol.md +80 -0
  731. package/src/skills/science/references/packages/palabos.md +80 -0
  732. package/src/skills/science/references/packages/parflow.md +80 -0
  733. package/src/skills/science/references/packages/pennylane.md +88 -0
  734. package/src/skills/science/references/packages/perceval.md +73 -0
  735. package/src/skills/science/references/packages/phono3py.md +73 -0
  736. package/src/skills/science/references/packages/phonopy.md +73 -0
  737. package/src/skills/science/references/packages/photutils.md +88 -0
  738. package/src/skills/science/references/packages/picongpu.md +80 -0
  739. package/src/skills/science/references/packages/plink-ng.md +88 -0
  740. package/src/skills/science/references/packages/precice.md +73 -0
  741. package/src/skills/science/references/packages/psc.md +80 -0
  742. package/src/skills/science/references/packages/psi4.md +88 -0
  743. package/src/skills/science/references/packages/pybinding.md +73 -0
  744. package/src/skills/science/references/packages/pyfr.md +80 -0
  745. package/src/skills/science/references/packages/pyhf.md +73 -0
  746. package/src/skills/science/references/packages/pyiron_base.md +80 -0
  747. package/src/skills/science/references/packages/pylcp.md +73 -0
  748. package/src/skills/science/references/packages/pylith.md +80 -0
  749. package/src/skills/science/references/packages/pynbody.md +88 -0
  750. package/src/skills/science/references/packages/pysam.md +88 -0
  751. package/src/skills/science/references/packages/pyscf.md +88 -0
  752. package/src/skills/science/references/packages/q-e.md +73 -0
  753. package/src/skills/science/references/packages/qibo.md +73 -0
  754. package/src/skills/science/references/packages/qiskit.md +73 -0
  755. package/src/skills/science/references/packages/quantica-jl.md +73 -0
  756. package/src/skills/science/references/packages/quantumoptics-jl.md +73 -0
  757. package/src/skills/science/references/packages/quimb.md +73 -0
  758. package/src/skills/science/references/packages/qulacs.md +73 -0
  759. package/src/skills/science/references/packages/qutip.md +73 -0
  760. package/src/skills/science/references/packages/rdkit.md +88 -0
  761. package/src/skills/science/references/packages/rmg-py.md +73 -0
  762. package/src/skills/science/references/packages/root.md +73 -0
  763. package/src/skills/science/references/packages/scanpy.md +88 -0
  764. package/src/skills/science/references/packages/scikit-allel.md +88 -0
  765. package/src/skills/science/references/packages/scikit-bio.md +88 -0
  766. package/src/skills/science/references/packages/scqubits.md +73 -0
  767. package/src/skills/science/references/packages/scuff-em.md +80 -0
  768. package/src/skills/science/references/packages/scvi-tools.md +73 -0
  769. package/src/skills/science/references/packages/seissol.md +73 -0
  770. package/src/skills/science/references/packages/sfepy.md +80 -0
  771. package/src/skills/science/references/packages/sisl.md +73 -0
  772. package/src/skills/science/references/packages/smilei.md +80 -0
  773. package/src/skills/science/references/packages/snakemake.md +88 -0
  774. package/src/skills/science/references/packages/specfem3d-globe.md +80 -0
  775. package/src/skills/science/references/packages/specutils.md +88 -0
  776. package/src/skills/science/references/packages/spglib.md +80 -0
  777. package/src/skills/science/references/packages/squidpy.md +88 -0
  778. package/src/skills/science/references/packages/starry.md +88 -0
  779. package/src/skills/science/references/packages/strawberryfields.md +73 -0
  780. package/src/skills/science/references/packages/su2.md +80 -0
  781. package/src/skills/science/references/packages/sunny-jl.md +73 -0
  782. package/src/skills/science/references/packages/sw4.md +73 -0
  783. package/src/skills/science/references/packages/swift.md +88 -0
  784. package/src/skills/science/references/packages/tdnegf.md +73 -0
  785. package/src/skills/science/references/packages/tenpy.md +73 -0
  786. package/src/skills/science/references/packages/thermo.md +73 -0
  787. package/src/skills/science/references/packages/tkwant.md +73 -0
  788. package/src/skills/science/references/packages/tvb-root.md +73 -0
  789. package/src/skills/science/references/packages/uproot5.md +73 -0
  790. package/src/skills/science/references/packages/vampire.md +80 -0
  791. package/src/skills/science/references/packages/wannier_tools.md +73 -0
  792. package/src/skills/science/references/packages/warpx.md +80 -0
  793. package/src/skills/science/references/packages/wrf.md +73 -0
  794. package/src/skills/science/references/packages/xtb.md +88 -0
  795. package/src/skills/science/references/packages/yt.md +73 -0
  796. package/src/skills/science/references/science-task-brief-template.md +71 -0
  797. package/src/skills/scout/SKILL.md +83 -425
  798. package/src/skills/scout/references/literature-scout-template.md +5 -24
  799. package/src/skills/scout/references/operational-guidance.md +191 -0
  800. package/src/skills/scout/references/paper-triage-playbook.md +11 -35
  801. package/src/skills/write/SKILL.md +744 -1246
  802. package/src/skills/write/references/experiments_analysis_patterns.md +129 -0
  803. package/src/skills/write/references/oral_package_patterns.md +252 -0
  804. package/src/skills/write/references/oral_writing_principles.md +291 -0
  805. package/src/skills/write/references/section_rewrite_checklist.md +234 -0
  806. package/src/tui/dist/app/AppContainer.js +1314 -27
  807. package/src/tui/dist/components/Composer.js +26 -1
  808. package/src/tui/dist/components/ConfigScreen.js +2 -1
  809. package/src/tui/dist/components/InputPrompt.js +25 -9
  810. package/src/tui/dist/components/MainContent.js +18 -3
  811. package/src/tui/dist/components/QuestScreen.js +3 -2
  812. package/src/tui/dist/components/UtilityScreen.js +37 -0
  813. package/src/tui/dist/hooks/useSafeInput.js +10 -0
  814. package/src/tui/dist/index.js +13 -1
  815. package/src/tui/dist/layouts/DefaultAppLayout.js +11 -8
  816. package/src/tui/dist/lib/api.js +89 -1
  817. package/src/tui/package.json +1 -1
  818. package/src/ui/dist/assets/{AnalysisPlugin-BCKAfjba.js → AnalysisPlugin-CA94NGmI.js} +1 -1
  819. package/src/ui/dist/assets/CliPlugin-DHBzphZU.js +79 -0
  820. package/src/ui/dist/assets/CodeEditorPlugin-BOFwD2rn.js +2 -0
  821. package/src/ui/dist/assets/{CodeViewerPlugin-CbaFRrUU.js → CodeViewerPlugin-CqDpgjik.js} +4 -4
  822. package/src/ui/dist/assets/{DocViewerPlugin-DAjLVeQD.js → DocViewerPlugin-UDBgt8-4.js} +3 -3
  823. package/src/ui/dist/assets/GitCommitViewerPlugin-BmHtZ0bZ.js +6 -0
  824. package/src/ui/dist/assets/{GitDiffViewerPlugin-CQACjoAA.js → GitDiffViewerPlugin-CAxjNorQ.js} +2 -2
  825. package/src/ui/dist/assets/{GitSnapshotViewer-0r4nLPke.js → GitSnapshotViewer-CweA6VON.js} +2 -2
  826. package/src/ui/dist/assets/{ImageViewerPlugin-nBOmI2v_.js → ImageViewerPlugin-C8wHGvGN.js} +5 -5
  827. package/src/ui/dist/assets/LabPlugin-COyyLUol.js +32 -0
  828. package/src/ui/dist/assets/{LatexPlugin-ZwtV8pIp.js → LatexPlugin-BQjAaA5J.js} +4 -4
  829. package/src/ui/dist/assets/{MarkdownViewerPlugin-DKqVfKyW.js → MarkdownViewerPlugin-Dy1NE2dI.js} +3 -3
  830. package/src/ui/dist/assets/{MarketplacePlugin-BwxStZ9D.js → MarketplacePlugin-DMIZtEJ2.js} +2 -2
  831. package/src/ui/dist/assets/NotebookEditor-CFHMq_Qt.js +91 -0
  832. package/src/ui/dist/assets/{NotebookEditor-DB9N_T9q.js → NotebookEditor-WFyd8Ybt.js} +3 -3
  833. package/src/ui/dist/assets/{PdfLoader-eWBONbQP.js → PdfLoader-CLE5u5TS.js} +3 -3
  834. package/src/ui/dist/assets/{PdfMarkdownPlugin-D22YOZL3.js → PdfMarkdownPlugin-_iNK_H83.js} +1 -1
  835. package/src/ui/dist/assets/PdfViewerPlugin-DgWsbInT.js +22 -0
  836. package/src/ui/dist/assets/SearchPlugin-DrZmn5iw.js +11 -0
  837. package/src/ui/dist/assets/{TextViewerPlugin-C5xqeeUH.js → TextViewerPlugin-D1-T3aC7.js} +4 -4
  838. package/src/ui/dist/assets/branding/runner-claude.svg +107 -0
  839. package/src/ui/dist/assets/branding/runner-codex.svg +10 -0
  840. package/src/ui/dist/assets/branding/runner-kimi.svg +14 -0
  841. package/src/ui/dist/assets/branding/runner-opencode.svg +7 -0
  842. package/src/ui/dist/assets/cli-store-CoZ-x5Ip.js +1 -0
  843. package/src/ui/dist/assets/{code-WlFHE7z_.js → code-DbsmSd3Y.js} +1 -1
  844. package/src/ui/dist/assets/file-diff-panel-DsvyRz47.js +1 -0
  845. package/src/ui/dist/assets/{wrap-text-BC-Hltpd.js → file-jump-queue-DeQBikaw.js} +3 -3
  846. package/src/ui/dist/assets/{file-socket-CfQPKQKj.js → file-socket-DA5XIx88.js} +1 -1
  847. package/src/ui/dist/assets/fonts/ds-fonts.css +50 -4
  848. package/src/ui/dist/assets/images/deepxiv/register-guide.png +0 -0
  849. package/src/ui/dist/assets/index-39vY9LmZ.js +1 -0
  850. package/src/ui/dist/assets/{index-CwNu1aH4.js → index-BsO46tJA.js} +1 -1
  851. package/src/ui/dist/assets/index-CHzJ2xtB.js +3530 -0
  852. package/src/ui/dist/assets/index-DH-zxoZ3.css +33 -0
  853. package/src/ui/dist/assets/{plugin-notebook-HbW2K-1c.js → plugin-notebook-JRhysCqj.js} +2 -2
  854. package/src/ui/dist/assets/{project-sync-C9IdzdZW.js → project-sync-DPmWKmKD.js} +1 -1
  855. package/src/ui/dist/assets/{zoom-out-E_gaeAxL.js → zoom-out-DAukFWen.js} +3 -3
  856. package/src/ui/dist/index.html +3 -3
  857. package/src/skills/analysis-campaign/references/artifact-orchestration.md +0 -58
  858. package/src/skills/baseline/references/memory-playbook.md +0 -40
  859. package/src/skills/baseline/references/publishable-baseline-package.md +0 -30
  860. package/src/skills/write/references/outline-evidence-contract-example.md +0 -107
  861. package/src/skills/write/references/paper-experiment-matrix-template.md +0 -131
  862. package/src/skills/write/references/paper-section-playbook.md +0 -64
  863. package/src/skills/write/references/reviewer-first-writing.md +0 -64
  864. package/src/skills/write/references/revision-checklist.md +0 -70
  865. package/src/skills/write/references/section-contracts.md +0 -82
  866. package/src/skills/write/references/sentence-level-proofing.md +0 -49
  867. package/src/ui/dist/assets/AiManusChatView-Bv-Z8YpU.js +0 -204
  868. package/src/ui/dist/assets/CliPlugin-BCKcpc35.js +0 -109
  869. package/src/ui/dist/assets/CodeEditorPlugin-DbOfSJ8K.js +0 -2
  870. package/src/ui/dist/assets/GitCommitViewerPlugin-CIUqbUDO.js +0 -1
  871. package/src/ui/dist/assets/LabCopilotPanel-BHxOxF4z.js +0 -14
  872. package/src/ui/dist/assets/LabPlugin-BKoZGs95.js +0 -22
  873. package/src/ui/dist/assets/NotebookEditor-BEQhaQbt.js +0 -81
  874. package/src/ui/dist/assets/PdfViewerPlugin-c-RK9DLM.js +0 -17
  875. package/src/ui/dist/assets/SearchPlugin-CxF9ytAx.js +0 -16
  876. package/src/ui/dist/assets/VNCViewer-BoLGLnHz.js +0 -11
  877. package/src/ui/dist/assets/bot-DREQOxzP.js +0 -6
  878. package/src/ui/dist/assets/chevron-up-C9Qpx4DE.js +0 -6
  879. package/src/ui/dist/assets/file-content-BZMz3RYp.js +0 -1
  880. package/src/ui/dist/assets/file-diff-panel-CQhw0jS2.js +0 -1
  881. package/src/ui/dist/assets/file-jump-queue-DA-SdG__.js +0 -1
  882. package/src/ui/dist/assets/git-commit-horizontal-DxZ8DCZh.js +0 -6
  883. package/src/ui/dist/assets/image-Bgl4VIyx.js +0 -6
  884. package/src/ui/dist/assets/index-BpV6lusQ.css +0 -33
  885. package/src/ui/dist/assets/index-CBNVuWcP.js +0 -2496
  886. package/src/ui/dist/assets/index-DrUnlf6K.js +0 -1
  887. package/src/ui/dist/assets/index-NW-h8VzN.js +0 -1
  888. package/src/ui/dist/assets/pdf-effect-queue-J8OnM0jE.js +0 -6
  889. package/src/ui/dist/assets/popover-CLc0pPP8.js +0 -1
  890. package/src/ui/dist/assets/select-Cs2PmzwL.js +0 -11
  891. package/src/ui/dist/assets/sigma-ClKcHAXm.js +0 -6
  892. package/src/ui/dist/assets/trash-DwpbFr3w.js +0 -11
  893. package/src/ui/dist/assets/useCliAccess-NQ8m0Let.js +0 -1
  894. package/src/ui/dist/assets/useFileDiffOverlay-FuhcnKiw.js +0 -1
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/plugin-monaco-C8UgLomw.js","assets/plugin-terminal-MXFIPun8.js"])))=>i.map(i=>d[i]);
2
- import{i as Q,f as B,j as o,b as C,L as M,S as X,B as Y,R as Z,g as $,_ as ee}from"./index-CBNVuWcP.js";import{R as c}from"./plugin-monaco-C8UgLomw.js";import{u as l,a as te}from"./file-content-BZMz3RYp.js";import{a as ne}from"./file-socket-CfQPKQKj.js";import{c as se}from"./monaco-CiHMMNH_.js";import{u as ie}from"./useFileDiffOverlay-FuhcnKiw.js";import{F as re}from"./file-diff-panel-CQhw0jS2.js";import"./plugin-notebook-HbW2K-1c.js";import"./plugin-terminal-MXFIPun8.js";const oe=$(()=>ee(()=>import("./plugin-monaco-C8UgLomw.js").then(r=>r.i),__vite__mapDeps([0,1])),{});se();function ae(r){const i=r.toLowerCase();return i.endsWith(".py")||i.endsWith(".pyw")||i.endsWith(".pyi")?"python":i.endsWith(".json")||i.endsWith(".jsonc")||i.endsWith(".json5")?"json":i.endsWith(".ts")||i.endsWith(".tsx")||i.endsWith(".mts")?"typescript":i.endsWith(".js")||i.endsWith(".jsx")||i.endsWith(".mjs")?"javascript":i.endsWith(".md")||i.endsWith(".markdown")?"markdown":i.endsWith(".yaml")||i.endsWith(".yml")?"yaml":i.endsWith(".html")||i.endsWith(".htm")?"html":i.endsWith(".css")||i.endsWith(".scss")||i.endsWith(".sass")?"css":"plaintext"}function de(){const[r,i]=c.useState(()=>typeof document>"u"?!1:document.documentElement.classList.contains("dark"));return c.useEffect(()=>{const m=document.documentElement,h=new MutationObserver(()=>{i(m.classList.contains("dark"))});return h.observe(m,{attributes:!0,attributeFilter:["class"]}),()=>h.disconnect()},[]),r}function ce(r,i,m){c.useEffect(()=>{const h=window.setTimeout(r,m);return()=>window.clearTimeout(h)},[...i,m])}function be({context:r,tabId:i,setDirty:m,setTitle:h}){const n=r.customData?.projectId??void 0,d=r.customData?.fileMeta??void 0,t=r.resourceId,v=Q(t),P=r.resourcePath??void 0,g=r.resourceName||r.resourcePath||"Untitled",T=c.useMemo(()=>ae(g),[g]),I=de(),D=l(e=>e.ensureLoaded),k=l(e=>e.reload),A=l(e=>e.save),_=l(e=>e.setContent),E=l(e=>e.applyServerSnapshot),N=n&&t?l.getState().getKey(n,t):null,s=l(e=>N?e.entries[N]:void 0),W=te(n,t??void 0),x=B(e=>e.updateFileMeta),{diffEvent:b,clearDiff:K}=ie({fileId:t,filePath:P,projectId:n}),F=c.useRef(null),z=c.useRef(null),w=c.useRef(!1),[O,j]=c.useState(!1);c.useEffect(()=>{h(g)},[g,h]),c.useEffect(()=>{!n||!t||D({projectId:n,fileId:t,updatedAt:d?.updatedAt,mimeType:r.mimeType??d?.mimeType,sizeBytes:d?.sizeBytes}).catch(e=>{console.error("[CodeEditorPlugin] Failed to load file:",e)})},[n,t,D,d?.updatedAt,d?.mimeType,d?.sizeBytes,r.mimeType]),c.useEffect(()=>{if(!n||!t||v)return;const{socket:e,release:u}=ne();z.current={socket:e,release:u};const a=async()=>{if(!w.current&&e.connected)try{w.current=!0,await e.emitWithAck("file:join",{projectId:n,fileId:t,clientVersion:"1.0.0"}),j(!0)}catch(f){console.warn("[CodeEditorPlugin] file:join failed:",f)}},p=()=>{j(!0),a()},y=()=>{j(!1),w.current=!1},R=f=>{if(f?.fileId!==t)return;const G=l.getState().getKey(n,t),L=l.getState().entries[G];L?.isDirty||(E({projectId:n,fileId:t,content:String(f?.content??""),updatedAt:String(f?.updatedAt??""),sizeBytes:typeof f?.size=="number"?f.size:void 0,mimeType:L?.mimeType}),x(t,{updatedAt:String(f?.updatedAt??""),size:typeof f?.size=="number"?f.size:void 0}))};return e.on("connect",p),e.on("disconnect",y),e.on("file:content-updated",R),e.connected&&a(),()=>{try{e.off("connect",p),e.off("disconnect",y),e.off("file:content-updated",R),w.current&&e.emit("file:leave",{projectId:n,fileId:t})}finally{w.current=!1,j(!1),z.current=null,u()}}},[n,t,v]),c.useEffect(()=>{m(!!s?.isDirty)},[s?.isDirty,m]);const S=c.useCallback(async()=>{if(!n||!t||!s)return;try{const a=l.getState().getKey(n,t);l.setState(p=>{const y=p.entries[a];return y?{entries:{...p.entries,[a]:{...y,saveState:"saving",saveError:void 0}}}:p})}catch{}const e=z.current?.socket;if(!v&&e&&e.connected&&w.current)try{const a=await e.emitWithAck("file:update-content",{projectId:n,fileId:t,content:s.content});if("error"in a)throw new Error(a.error.message);E({projectId:n,fileId:t,content:s.content,updatedAt:a.data.updatedAt,sizeBytes:typeof a.data.size=="number"?a.data.size:s.sizeBytes,mimeType:s.mimeType}),v||x(t,{updatedAt:a.data.updatedAt,size:typeof a.data.size=="number"?a.data.size:void 0,mimeType:s.mimeType});return}catch(a){console.warn("[CodeEditorPlugin] realtime save failed, fallback to HTTP:",a)}const u=await A({projectId:n,fileId:t});!v&&u.updatedAt&&x(t,{updatedAt:u.updatedAt,size:u.sizeBytes,mimeType:u.mimeType})},[E,s,t,v,n,A,x]);ce(()=>{!n||!t||!s?.isDirty||s.saveState!=="saving"&&S()},[n,t,s?.content,s?.isDirty],650),c.useEffect(()=>{if(!n||!t)return;const e=u=>{(u.ctrlKey||u.metaKey)&&u.key.toLowerCase()==="s"&&(u.preventDefault(),S())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[n,t,S]);const U=c.useMemo(()=>s?s.saveState==="saving"?"Saving…":s.saveState==="error"?s.saveError||"Save failed":s.isDirty?"Unsaved":"Saved":"",[s]),H=!!n&&!!t&&!!s&&!W,J=T==="json",V=async()=>{const e=F.current;if(e)try{await e.getAction("editor.action.formatDocument").run()}catch(u){console.warn("[CodeEditorPlugin] Format failed:",u)}},q=c.useCallback(async()=>{if(!n||!t||s?.isDirty&&!window.confirm("Discard unsaved changes and reload from server?"))return;const e=B.getState().findNode(t),u=e?.updatedAt??d?.updatedAt,a=e?.size??d?.sizeBytes,p=e?.mimeType??r.mimeType??d?.mimeType;try{await k({projectId:n,fileId:t,updatedAt:u,sizeBytes:a,mimeType:p,ignoreDirty:!0})}catch(y){console.warn("[CodeEditorPlugin] Reload failed:",y)}},[n,t,s?.isDirty,d?.updatedAt,d?.sizeBytes,d?.mimeType,r.mimeType,k]);return c.useEffect(()=>{b?.diff&&(!n||!t||b.changeType!=="delete"&&(s?.isDirty||k({projectId:n,fileId:t,mimeType:r.mimeType??d?.mimeType,sizeBytes:d?.sizeBytes,updatedAt:d?.updatedAt,ignoreDirty:!0})))},[b,s?.isDirty,n,t,r.mimeType,d?.mimeType,d?.sizeBytes,d?.updatedAt,k]),!n||!t?o.jsx("div",{className:"h-full flex items-center justify-center text-sm text-muted-foreground",children:"No file selected."}):o.jsxs("div",{className:"flex flex-col h-full bg-background",children:[o.jsxs("div",{className:"flex items-center justify-between px-3 py-2 border-b border-border/60 bg-white/60 backdrop-blur dark:bg-black/30",children:[o.jsxs("div",{className:"min-w-0 flex items-center gap-2",children:[o.jsx("div",{className:"truncate text-sm font-medium",children:g}),o.jsx("span",{className:"text-[11px] px-2 py-0.5 rounded bg-black/[0.06] dark:bg-white/[0.08] text-muted-foreground uppercase",children:T})]}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("span",{className:C("text-xs",s?.saveState==="error"?"text-red-600":"text-muted-foreground"),title:s?.saveError,children:[U,!v&&!O?" (offline)":""]}),o.jsxs("button",{type:"button",className:C("inline-flex items-center gap-1.5 text-xs px-2.5 py-1.5 rounded-md","border border-black/10 bg-white hover:bg-black/[0.03]","dark:border-white/10 dark:bg-white/[0.04] dark:hover:bg-white/[0.07]",!H&&"opacity-60 pointer-events-none"),onClick:()=>void S(),title:"Save (Ctrl/Cmd+S)",children:[s?.saveState==="saving"?o.jsx(M,{className:"h-3.5 w-3.5 animate-spin"}):o.jsx(X,{className:"h-3.5 w-3.5"}),"Save"]}),J?o.jsxs("button",{type:"button",className:C("inline-flex items-center gap-1.5 text-xs px-2.5 py-1.5 rounded-md","border border-black/10 bg-white hover:bg-black/[0.03]","dark:border-white/10 dark:bg-white/[0.04] dark:hover:bg-white/[0.07]"),onClick:V,title:"Format JSON",children:[o.jsx(Y,{className:"h-3.5 w-3.5"}),"Format"]}):null,o.jsxs("button",{type:"button",className:C("inline-flex items-center gap-1.5 text-xs px-2.5 py-1.5 rounded-md","border border-black/10 bg-white hover:bg-black/[0.03]","dark:border-white/10 dark:bg-white/[0.04] dark:hover:bg-white/[0.07]"),onClick:()=>void q(),title:"Reload from cache/server",children:[o.jsx(Z,{className:"h-3.5 w-3.5"}),"Reload"]})]})]}),o.jsxs("div",{className:"relative flex-1 min-h-0",children:[b?.diff?o.jsx(re,{diff:b.diff,changeType:b.changeType,title:"AI change",subtitle:g,onClose:K,className:"absolute right-4 top-4 z-10 w-[min(420px,46vw)]"}):null,W&&!s?o.jsx("div",{className:"h-full flex items-center justify-center text-muted-foreground",children:o.jsx(M,{className:"h-6 w-6 animate-spin"})}):o.jsx(oe,{height:"100%",language:T,theme:I?"vs-dark":"vs",value:s?.content??"",beforeMount:e=>{try{e.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!0,trailingCommas:"ignore"})}catch{}},onMount:e=>{F.current=e},onChange:e=>{_({projectId:n,fileId:t,content:e??""})},options:{automaticLayout:!0,minimap:{enabled:!1},fontFamily:'"Fira Code", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace',fontSize:13,wordWrap:"off",scrollBeyondLastLine:!1,renderWhitespace:"selection",tabSize:2,insertSpaces:!0}})]})]})}export{be as default};
@@ -1 +0,0 @@
1
- import{u as _,a as F,H as b,j as e,b as x,J as C,R as S,h as E,K as g}from"./index-CBNVuWcP.js";import{r as n}from"./plugin-monaco-C8UgLomw.js";import{f as G,G as M,a as q}from"./GitSnapshotViewer-0r4nLPke.js";import{G as D}from"./git-commit-horizontal-DxZ8DCZh.js";import"./plugin-notebook-HbW2K-1c.js";import"./plugin-terminal-MXFIPun8.js";const w=m=>typeof m!="string"?null:m.trim()||null;function R({context:m,tabId:u,setTitle:j}){const{t:l}=_("workspace"),h=m.customData??{},k=F(a=>a.updateTabState),d=w(h.projectId),r=w(h.sha),[s,p]=n.useState(w(h.initialPath)),[o,v]=n.useState(h.initialMode==="snapshot"?"snapshot":"diff"),t=b({queryKey:["git-commit-viewer","commit",d,r],queryFn:()=>g.gitCommit(d,r),enabled:!!(d&&r),staleTime:3e4});n.useEffect(()=>{const a=t.data?.files||[];if(!a.length){s&&p(null);return}s&&a.some(y=>y.path===s)||p(a[0].path)},[t.data?.files,s]);const c=b({queryKey:["git-commit-viewer","diff",d,r,s],queryFn:()=>g.gitCommitFile(d,r,s),enabled:!!(d&&r&&s&&o==="diff"),staleTime:3e4}),i=b({queryKey:["git-commit-viewer","snapshot",d,r,s],queryFn:()=>g.openDocument(d,`git::${r}::${s}`),enabled:!!(d&&r&&s&&o==="snapshot"),staleTime:3e4}),N=n.useMemo(()=>t.data?.files?.find(a=>a.path===s)||null,[t.data?.files,s]),f=n.useMemo(()=>G(s||i.data?.path||void 0,N?.old_path||null,l("git_viewer_diff",void 0,"Diff")),[N?.old_path,s,i.data?.path,l]);return n.useEffect(()=>{const a=t.data?.subject||t.data?.short_sha||r||l("git_viewer_diff",void 0,"Commit");j(a)},[t.data?.short_sha,t.data?.subject,j,r,l]),n.useEffect(()=>{k(u,{contentKind:o==="snapshot"?"text":"code",documentMode:o,isReadOnly:!0,resourceName:f,resourcePath:s||void 0})},[f,s,u,k,o]),!d||!r?e.jsx("div",{className:"flex h-full items-center justify-center px-6 text-sm text-muted-foreground",children:l("git_viewer_missing_context",void 0,"Missing diff context.")}):e.jsxs("div",{"data-testid":"git-commit-viewer-plugin",className:"flex h-full min-h-0 flex-col bg-[rgba(250,248,244,0.86)] dark:bg-[rgba(18,20,24,0.92)]",children:[e.jsx("div",{className:"border-b border-black/[0.06] px-6 py-5 dark:border-white/[0.08]",children:e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[11px] font-medium uppercase tracking-[0.14em] text-muted-foreground",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(D,{className:"h-3.5 w-3.5"}),"Commit"]}),t.data?.short_sha?e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"·"}),e.jsx("span",{children:t.data.short_sha})]}):null]}),e.jsx("div",{className:"mt-2 break-words text-[24px] font-semibold tracking-[-0.03em] text-foreground",children:t.data?.subject||r}),e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-3 text-sm text-muted-foreground",children:[t.data?.author_name?e.jsx("span",{children:t.data.author_name}):null,t.data?.authored_at?e.jsx("span",{children:t.data.authored_at}):null,typeof t.data?.file_count=="number"?e.jsxs("span",{children:[t.data.file_count," files"]}):null,typeof t.data?.stats?.added=="number"?e.jsxs("span",{className:"text-emerald-700 dark:text-emerald-300",children:["+",t.data.stats.added]}):null,typeof t.data?.stats?.removed=="number"?e.jsxs("span",{className:"text-rose-700 dark:text-rose-300",children:["-",t.data.stats.removed]}):null]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:"flex items-center rounded-full border border-black/[0.08] bg-white/[0.86] p-1 dark:border-white/[0.1] dark:bg-white/[0.03]",children:[e.jsx("button",{type:"button",onClick:()=>v("snapshot"),className:x("rounded-full px-3 py-1.5 text-[12px] font-medium transition-colors",o==="snapshot"?"bg-black/[0.06] text-foreground dark:bg-white/[0.12]":"text-muted-foreground hover:text-foreground"),children:"Snapshot"}),e.jsx("button",{type:"button",onClick:()=>v("diff"),className:x("rounded-full px-3 py-1.5 text-[12px] font-medium transition-colors",o==="diff"?"bg-black/[0.06] text-foreground dark:bg-white/[0.12]":"text-muted-foreground hover:text-foreground"),children:"Diff"})]}),e.jsxs(C,{type:"button",size:"sm",variant:"outline",onClick:()=>{t.refetch(),c.refetch(),i.refetch()},className:"h-9 rounded-full border-black/[0.08] bg-white/[0.86] px-3 text-[12px] shadow-none hover:bg-black/[0.03] dark:border-white/[0.1] dark:bg-white/[0.03] dark:hover:bg-white/[0.06]",children:[e.jsx(S,{className:x("mr-1.5 h-3.5 w-3.5",(t.isFetching||c.isFetching||i.isFetching)&&"animate-spin")}),l("explorer_refresh")]})]})]})}),e.jsxs("div",{className:"grid min-h-0 flex-1 grid-cols-[280px_minmax(0,1fr)]",children:[e.jsxs("div",{className:"border-r border-black/[0.06] bg-white/[0.46] p-4 dark:border-white/[0.08] dark:bg-white/[0.02]",children:[e.jsx("div",{className:"mb-3 text-[11px] font-semibold uppercase tracking-[0.14em] text-muted-foreground",children:"Changed Files"}),e.jsx("div",{className:"space-y-2",children:(t.data?.files||[]).map(a=>e.jsxs("button",{type:"button",onClick:()=>p(a.path),className:x("w-full rounded-[18px] border px-3 py-3 text-left transition",s===a.path?"border-black/[0.12] bg-white shadow-sm dark:border-white/[0.12] dark:bg-white/[0.04]":"border-black/[0.06] bg-white/[0.72] hover:border-black/[0.1] dark:border-white/[0.08] dark:bg-white/[0.02]"),children:[e.jsx("div",{className:"truncate text-sm font-medium text-foreground",children:a.path}),e.jsxs("div",{className:"mt-1 flex flex-wrap items-center gap-2 text-[11px] text-muted-foreground",children:[e.jsx("span",{children:a.status||"modified"}),typeof a.added=="number"?e.jsxs("span",{className:"text-emerald-700 dark:text-emerald-300",children:["+",a.added]}):null,typeof a.removed=="number"?e.jsxs("span",{className:"text-rose-700 dark:text-rose-300",children:["-",a.removed]}):null]})]},a.path))})]}),e.jsxs("div",{className:"min-h-0 overflow-hidden px-6 py-6",children:[s?o==="snapshot"?i.isLoading?e.jsx("div",{className:"text-sm leading-7 text-muted-foreground",children:"Loading snapshot…"}):i.isError?e.jsx("div",{className:"rounded-[20px] border border-rose-200/80 bg-rose-50/70 px-4 py-4 text-sm text-rose-700 dark:border-rose-400/20 dark:bg-rose-500/10 dark:text-rose-200",children:"Failed to load snapshot."}):e.jsx(M,{document:i.data,className:"border border-black/[0.06] bg-white/[0.92] shadow-none dark:border-white/[0.08] dark:bg-[rgba(24,26,31,0.92)]"}):c.isLoading?e.jsx("div",{className:"text-sm leading-7 text-muted-foreground",children:"Loading patch…"}):c.isError?e.jsx("div",{className:"rounded-[20px] border border-rose-200/80 bg-rose-50/70 px-4 py-4 text-sm text-rose-700 dark:border-rose-400/20 dark:bg-rose-500/10 dark:text-rose-200",children:"Failed to load diff."}):e.jsx(q,{diff:c.data,pathLabel:f,className:"border border-black/[0.06] bg-white/[0.92] shadow-none dark:border-white/[0.08] dark:bg-[rgba(24,26,31,0.92)]"}):e.jsx("div",{className:"flex h-full items-center justify-center text-sm text-muted-foreground",children:"Select one changed file to inspect this commit."}),t.data?.body?e.jsxs("div",{className:"mt-5 rounded-[20px] border border-black/[0.06] bg-white/[0.68] px-4 py-4 text-sm leading-7 text-muted-foreground dark:border-white/[0.08] dark:bg-white/[0.03]",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-muted-foreground",children:[e.jsx(E,{className:"h-3.5 w-3.5"}),"Body"]}),e.jsx("div",{className:"whitespace-pre-wrap",children:t.data.body})]}):null]})]})]})}export{R as default};
@@ -1,14 +0,0 @@
1
- import{y as qt,aP as Ft,j as s,aQ as St,n as Ct,u as Pt,ao as H,aR as He,aS as We,aT as zt,aU as vt,aV as ns,aW as yt,aX as Ve,at as Ce,au as at,aY as is,aZ as xt,J as _t,a_ as wt,av as Dt,d as $t,b as Me,x as Bt,a$ as Ht,b0 as dt,b1 as Wt,L as Vt,b2 as os,b3 as rs,b4 as as,b5 as ls,b6 as cs,k as us,b7 as ds,b8 as ms,b9 as fs,ba as hs,bb as ps,bc as gs,bd as bs}from"./index-CBNVuWcP.js";import{r}from"./plugin-monaco-C8UgLomw.js";import{r as Ye}from"./plugin-notebook-HbW2K-1c.js";import{P as xs,a as vs,b as ys}from"./popover-CLc0pPP8.js";import{S as _s,a as ws,b as Ss,c as Cs,d as Ms}from"./select-Cs2PmzwL.js";import{A as js,D as Es,C as ks,a as Mt,u as Ns,b as Qt,r as Ls}from"./AiManusChatView-Bv-Z8YpU.js";import"./plugin-terminal-MXFIPun8.js";import"./chevron-up-C9Qpx4DE.js";import"./file-content-BZMz3RYp.js";import"./file-jump-queue-DA-SdG__.js";import"./pdf-effect-queue-J8OnM0jE.js";import"./file-diff-panel-CQhw0jS2.js";import"./bot-DREQOxzP.js";import"./git-commit-horizontal-DxZ8DCZh.js";import"./NotebookEditor-DB9N_T9q.js";import"./trash-DwpbFr3w.js";/**
2
- * @license lucide-react v0.511.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const As=[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]],Rs=qt("message-circle",As);/**
7
- * @license lucide-react v0.511.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const Ts=[["path",{d:"M7 10v12",key:"1qc93n"}],["path",{d:"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z",key:"emmmcr"}]],jt=qt("thumbs-up",Ts);function it(i,u,t){let n=t.initialDeps??[],e,a=!0;function f(){var d,x,w;let _;t.key&&((d=t.debug)!=null&&d.call(t))&&(_=Date.now());const S=i();if(!(S.length!==n.length||S.some((q,k)=>n[k]!==q)))return e;n=S;let D;if(t.key&&((x=t.debug)!=null&&x.call(t))&&(D=Date.now()),e=u(...S),t.key&&((w=t.debug)!=null&&w.call(t))){const q=Math.round((Date.now()-_)*100)/100,k=Math.round((Date.now()-D)*100)/100,K=k/16,C=(T,I)=>{for(T=String(T);T.length<I;)T=" "+T;return T};console.info(`%c⏱ ${C(k,5)} /${C(q,5)} ms`,`
12
- font-size: .6rem;
13
- font-weight: bold;
14
- color: hsl(${Math.max(0,Math.min(120-120*K,120))}deg 100% 31%);`,t?.key)}return t?.onChange&&!(a&&t.skipInitialOnChange)&&t.onChange(e),a=!1,e}return f.updateDeps=d=>{n=d},f}function Et(i,u){if(i===void 0)throw new Error("Unexpected undefined");return i}const Os=(i,u)=>Math.abs(i-u)<1.01,Is=(i,u,t)=>{let n;return function(...e){i.clearTimeout(n),n=i.setTimeout(()=>u.apply(this,e),t)}},kt=i=>{const{offsetWidth:u,offsetHeight:t}=i;return{width:u,height:t}},qs=i=>i,Fs=i=>{const u=Math.max(i.startIndex-i.overscan,0),t=Math.min(i.endIndex+i.overscan,i.count-1),n=[];for(let e=u;e<=t;e++)n.push(e);return n},Ps=(i,u)=>{const t=i.scrollElement;if(!t)return;const n=i.targetWindow;if(!n)return;const e=f=>{const{width:d,height:x}=f;u({width:Math.round(d),height:Math.round(x)})};if(e(kt(t)),!n.ResizeObserver)return()=>{};const a=new n.ResizeObserver(f=>{const d=()=>{const x=f[0];if(x?.borderBoxSize){const w=x.borderBoxSize[0];if(w){e({width:w.inlineSize,height:w.blockSize});return}}e(kt(t))};i.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(d):d()});return a.observe(t,{box:"border-box"}),()=>{a.unobserve(t)}},Nt={passive:!0},Lt=typeof window>"u"?!0:"onscrollend"in window,zs=(i,u)=>{const t=i.scrollElement;if(!t)return;const n=i.targetWindow;if(!n)return;let e=0;const a=i.options.useScrollendEvent&&Lt?()=>{}:Is(n,()=>{u(e,!1)},i.options.isScrollingResetDelay),f=_=>()=>{const{horizontal:S,isRtl:E}=i.options;e=S?t.scrollLeft*(E&&-1||1):t.scrollTop,a(),u(e,_)},d=f(!0),x=f(!1);t.addEventListener("scroll",d,Nt);const w=i.options.useScrollendEvent&&Lt;return w&&t.addEventListener("scrollend",x,Nt),()=>{t.removeEventListener("scroll",d),w&&t.removeEventListener("scrollend",x)}},Ds=(i,u,t)=>{if(u?.borderBoxSize){const n=u.borderBoxSize[0];if(n)return Math.round(n[t.options.horizontal?"inlineSize":"blockSize"])}return i[t.options.horizontal?"offsetWidth":"offsetHeight"]},$s=(i,{adjustments:u=0,behavior:t},n)=>{var e,a;const f=i+u;(a=(e=n.scrollElement)==null?void 0:e.scrollTo)==null||a.call(e,{[n.options.horizontal?"left":"top"]:f,behavior:t})};class Bs{constructor(u){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.laneAssignments=new Map,this.pendingMeasuredCacheIndexes=[],this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.now=()=>{var t,n,e;return((e=(n=(t=this.targetWindow)==null?void 0:t.performance)==null?void 0:n.now)==null?void 0:e.call(n))??Date.now()},this.observer=(()=>{let t=null;const n=()=>t||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:t=new this.targetWindow.ResizeObserver(e=>{e.forEach(a=>{const f=()=>{this._measureElement(a.target,a)};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(f):f()})}));return{disconnect:()=>{var e;(e=n())==null||e.disconnect(),t=null},observe:e=>{var a;return(a=n())==null?void 0:a.observe(e,{box:"border-box"})},unobserve:e=>{var a;return(a=n())==null?void 0:a.unobserve(e)}}})(),this.range=null,this.setOptions=t=>{Object.entries(t).forEach(([n,e])=>{typeof e>"u"&&delete t[n]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:qs,rangeExtractor:Fs,onChange:()=>{},measureElement:Ds,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,...t}},this.notify=t=>{var n,e;(e=(n=this.options).onChange)==null||e.call(n,this,t)},this.maybeNotify=it(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),t=>{this.notify(t)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(t=>t()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var t;const n=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==n){if(this.cleanup(),!n){this.maybeNotify();return}this.scrollElement=n,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((t=this.scrollElement)==null?void 0:t.window)??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,a)=>{this.scrollAdjustments=0,this.scrollDirection=a?this.getScrollOffset()<e?"forward":"backward":null,this.scrollOffset=e,this.isScrolling=a,this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(t,n)=>{const e=new Map,a=new Map;for(let f=n-1;f>=0;f--){const d=t[f];if(e.has(d.lane))continue;const x=a.get(d.lane);if(x==null||d.end>x.end?a.set(d.lane,d):d.end<x.end&&e.set(d.lane,!0),e.size===this.options.lanes)break}return a.size===this.options.lanes?Array.from(a.values()).sort((f,d)=>f.end===d.end?f.index-d.index:f.end-d.end)[0]:void 0},this.getMeasurementOptions=it(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes],(t,n,e,a,f,d)=>(this.prevLanes!==void 0&&this.prevLanes!==d&&(this.lanesChangedFlag=!0),this.prevLanes=d,this.pendingMeasuredCacheIndexes=[],{count:t,paddingStart:n,scrollMargin:e,getItemKey:a,enabled:f,lanes:d}),{key:!1}),this.getMeasurements=it(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:t,paddingStart:n,scrollMargin:e,getItemKey:a,enabled:f,lanes:d},x)=>{if(!f)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>t)for(const E of this.laneAssignments.keys())E>=t&&this.laneAssignments.delete(E);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMeasuredCacheIndexes=[]),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(E=>{this.itemSizeCache.set(E.key,E.size)}));const w=this.lanesSettling?0:this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[],this.lanesSettling&&this.measurementsCache.length===t&&(this.lanesSettling=!1);const _=this.measurementsCache.slice(0,w),S=new Array(d).fill(void 0);for(let E=0;E<w;E++){const D=_[E];D&&(S[D.lane]=E)}for(let E=w;E<t;E++){const D=a(E),q=this.laneAssignments.get(E);let k,K;if(q!==void 0&&this.options.lanes>1){k=q;const A=S[k],R=A!==void 0?_[A]:void 0;K=R?R.end+this.options.gap:n+e}else{const A=this.options.lanes===1?_[E-1]:this.getFurthestMeasurement(_,E);K=A?A.end+this.options.gap:n+e,k=A?A.lane:E%this.options.lanes,this.options.lanes>1&&this.laneAssignments.set(E,k)}const C=x.get(D),T=typeof C=="number"?C:this.options.estimateSize(E),I=K+T;_[E]={index:E,start:K,size:T,end:I,key:D,lane:k},S[k]=E}return this.measurementsCache=_,_},{key:!1,debug:()=>this.options.debug}),this.calculateRange=it(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(t,n,e,a)=>this.range=t.length>0&&n>0?Hs({measurements:t,outerSize:n,scrollOffset:e,lanes:a}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=it(()=>{let t=null,n=null;const e=this.calculateRange();return e&&(t=e.startIndex,n=e.endIndex),this.maybeNotify.updateDeps([this.isScrolling,t,n]),[this.options.rangeExtractor,this.options.overscan,this.options.count,t,n]},(t,n,e,a,f)=>a===null||f===null?[]:t({startIndex:a,endIndex:f,overscan:n,count:e}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=t=>{const n=this.options.indexAttribute,e=t.getAttribute(n);return e?parseInt(e,10):(console.warn(`Missing attribute name '${n}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=t=>{var n;if(!this.scrollState||this.scrollState.behavior!=="smooth")return!0;const e=this.scrollState.index??((n=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))==null?void 0:n.index);if(e!==void 0&&this.range){const a=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),f=Math.max(0,e-a),d=Math.min(this.options.count-1,e+a);return t>=f&&t<=d}return!0},this._measureElement=(t,n)=>{if(!t.isConnected){this.observer.unobserve(t);return}const e=this.indexFromElement(t),a=this.measurementsCache[e];if(!a)return;const f=a.key,d=this.elementsCache.get(f);d!==t&&(d&&this.observer.unobserve(d),this.observer.observe(t),this.elementsCache.set(f,t)),this.shouldMeasureDuringScroll(e)&&this.resizeItem(e,this.options.measureElement(t,n,this))},this.resizeItem=(t,n)=>{var e;const a=this.measurementsCache[t];if(!a)return;const f=this.itemSizeCache.get(a.key)??a.size,d=n-f;d!==0&&(((e=this.scrollState)==null?void 0:e.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(a,d,this):a.start<this.getScrollOffset()+this.scrollAdjustments)&&this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=d,behavior:void 0}),this.pendingMeasuredCacheIndexes.push(a.index),this.itemSizeCache=new Map(this.itemSizeCache.set(a.key,n)),this.notify(!1))},this.measureElement=t=>{if(!t){this.elementsCache.forEach((n,e)=>{n.isConnected||(this.observer.unobserve(n),this.elementsCache.delete(e))});return}this._measureElement(t,void 0)},this.getVirtualItems=it(()=>[this.getVirtualIndexes(),this.getMeasurements()],(t,n)=>{const e=[];for(let a=0,f=t.length;a<f;a++){const d=t[a],x=n[d];e.push(x)}return e},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=t=>{const n=this.getMeasurements();if(n.length!==0)return Et(n[Ut(0,n.length-1,e=>Et(n[e]).start,t)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const t=this.scrollElement.document.documentElement;return this.options.horizontal?t.scrollWidth-this.scrollElement.innerWidth:t.scrollHeight-this.scrollElement.innerHeight}},this.getOffsetForAlignment=(t,n,e=0)=>{if(!this.scrollElement)return 0;const a=this.getSize(),f=this.getScrollOffset();n==="auto"&&(n=t>=f+a?"end":"start"),n==="center"?t+=(e-a)/2:n==="end"&&(t-=a);const d=this.getMaxScrollOffset();return Math.max(Math.min(d,t),0)},this.getOffsetForIndex=(t,n="auto")=>{t=Math.max(0,Math.min(t,this.options.count-1));const e=this.getSize(),a=this.getScrollOffset(),f=this.measurementsCache[t];if(!f)return;if(n==="auto")if(f.end>=a+e-this.options.scrollPaddingEnd)n="end";else if(f.start<=a+this.options.scrollPaddingStart)n="start";else return[a,n];if(n==="end"&&t===this.options.count-1)return[this.getMaxScrollOffset(),n];const d=n==="end"?f.end+this.options.scrollPaddingEnd:f.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(d,n,f.size),n]},this.scrollToOffset=(t,{align:n="start",behavior:e="auto"}={})=>{const a=this.getOffsetForAlignment(t,n),f=this.now();this.scrollState={index:null,align:n,behavior:e,startedAt:f,lastTargetOffset:a,stableFrames:0},this._scrollToOffset(a,{adjustments:void 0,behavior:e}),this.scheduleScrollReconcile()},this.scrollToIndex=(t,{align:n="auto",behavior:e="auto"}={})=>{t=Math.max(0,Math.min(t,this.options.count-1));const a=this.getOffsetForIndex(t,n);if(!a)return;const[f,d]=a,x=this.now();this.scrollState={index:t,align:d,behavior:e,startedAt:x,lastTargetOffset:f,stableFrames:0},this._scrollToOffset(f,{adjustments:void 0,behavior:e}),this.scheduleScrollReconcile()},this.scrollBy=(t,{behavior:n="auto"}={})=>{const e=this.getScrollOffset()+t,a=this.now();this.scrollState={index:null,align:"start",behavior:n,startedAt:a,lastTargetOffset:e,stableFrames:0},this._scrollToOffset(e,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.getTotalSize=()=>{var t;const n=this.getMeasurements();let e;if(n.length===0)e=this.options.paddingStart;else if(this.options.lanes===1)e=((t=n[n.length-1])==null?void 0:t.end)??0;else{const a=Array(this.options.lanes).fill(null);let f=n.length-1;for(;f>=0&&a.some(d=>d===null);){const d=n[f];a[d.lane]===null&&(a[d.lane]=d.end),f--}e=Math.max(...a.filter(d=>d!==null))}return Math.max(e-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(t,{adjustments:n,behavior:e})=>{this.options.scrollToFn(t,{behavior:e,adjustments:n},this)},this.measure=()=>{this.itemSizeCache=new Map,this.laneAssignments=new Map,this.notify(!1)},this.setOptions(u)}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId==null&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}))}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}const n=this.scrollState.index!=null?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,e=n?n[0]:this.scrollState.lastTargetOffset,a=1,f=e!==this.scrollState.lastTargetOffset;if(!f&&Os(e,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=a){this.scrollState=null;return}}else this.scrollState.stableFrames=0,f&&(this.scrollState.lastTargetOffset=e,this.scrollState.behavior="auto",this._scrollToOffset(e,{adjustments:void 0,behavior:"auto"}));this.scheduleScrollReconcile()}}const Ut=(i,u,t,n)=>{for(;i<=u;){const e=(i+u)/2|0,a=t(e);if(a<n)i=e+1;else if(a>n)u=e-1;else return e}return i>0?i-1:0};function Hs({measurements:i,outerSize:u,scrollOffset:t,lanes:n}){const e=i.length-1,a=x=>i[x].start;if(i.length<=n)return{startIndex:0,endIndex:e};let f=Ut(0,e,a,t),d=f;if(n===1)for(;d<e&&i[d].end<t+u;)d++;else if(n>1){const x=Array(n).fill(0);for(;d<e&&x.some(_=>_<t+u);){const _=i[d];x[_.lane]=_.end,d++}const w=Array(n).fill(t+u);for(;f>=0&&w.some(_=>_>=t);){const _=i[f];w[_.lane]=_.start,f--}f=Math.max(0,f-f%n),d=Math.min(e,d+(n-1-d%n))}return{startIndex:f,endIndex:d}}const At=typeof document<"u"?r.useLayoutEffect:r.useEffect;function Ws({useFlushSync:i=!0,...u}){const t=r.useReducer(()=>({}),{})[1],n={...u,onChange:(a,f)=>{var d;i&&f?Ye.flushSync(t):t(),(d=u.onChange)==null||d.call(u,a,f)}},[e]=r.useState(()=>new Bs(n));return e.setOptions(n),At(()=>e._didMount(),[]),At(()=>e._willUpdate()),e}function Kt(i){return Ws({observeElementRect:Ps,observeElementOffset:zs,scrollToFn:$s,...i})}const Rt="lab-animation-level";function Vs(){const i=Ft(),[u,t]=r.useState("full");return r.useEffect(()=>{if(typeof window>"u")return;const e=window.localStorage.getItem(Rt);if(e){t(e);return}if(i){t("off");return}const a=typeof navigator<"u"&&navigator.hardwareConcurrency<=4;t(a?"simple":"full")},[i]),{level:u,setLevel:e=>{t(e),typeof window<"u"&&window.localStorage.setItem(Rt,e)}}}function Qs({projectId:i,readOnly:u,visible:t,prefill:n,leadMessage:e,hideCopilotGreeting:a,mentionablesOverride:f,defaultAgentOverride:d,mentionsEnabledOverride:x,enforcedMentionPrefix:w,lockedMentionPrefix:_,messageMetadata:S,composerMode:E,composerFooter:D,busyOverride:q,onActionsChange:k,onMetaChange:K,onUserSubmit:C}){const T=r.useMemo(()=>{if(!n?.text)return n??null;const N=n.text;if(!N.startsWith("@"))return n;const Q=N.match(/^@[^\s]+/);if(!Q)return n;const W=Q[0].length;return N[W]===" "?n:{...n,text:`${N.slice(0,W)} ${N.slice(W)}`}},[n]),[I,A]=r.useState(!1),R=r.useId();return s.jsx(js,{mode:"lab-direct",uiMode:"copilot",projectId:i,readOnly:u,visible:t,prefill:T,embedded:!0,historyMode:"overlay",layoutPadding:"flush",sessionListEnabled:!1,historyPanelId:R,historyOpenOverride:I,onHistoryOpenChange:A,onActionsChange:k,onMetaChange:K,mentionablesOverride:f,defaultAgentOverride:d,mentionsEnabledOverride:x,enforcedMentionPrefix:w,lockedMentionPrefix:_,lockLeadingMentionSpace:!0,messageMetadata:S,hideCopilotGreeting:a,composerMode:E,composerFooter:D,leadMessage:e,busyOverride:q,onUserSubmit:C})}const Gt=10,Us=300,Tt=(i,u)=>`text-${i.trim()?i.trim():"text"}-${u}`,Ot=(i,u=Gt)=>{const{scrollTop:t,scrollHeight:n,clientHeight:e}=i;return n-t-e<=u},It=(i,u=Gt)=>i.scrollTop<=u,Yt=({projectId:i,questId:u,surface:t,enabled:n})=>{const[e,a]=r.useState(null),[f,d]=r.useState([]),[x,w]=r.useState(!1),[_,S]=r.useState(null),[E,D]=r.useState(!1),[q,k]=r.useState(!1),[K,C]=r.useState(!1),[T,I]=r.useState(0),A=r.useRef(null),R=r.useRef(null),N=r.useRef([]),Q=r.useRef(new Map),W=r.useRef(new Set),$=r.useRef(null),U=r.useRef(0),P=r.useRef(!1),ie=r.useRef(!1),te=We(O=>O.setSessionIdForSurface),V=`lab-${t}`,J=r.useCallback(O=>typeof O=="number"&&Number.isFinite(O)?(O>U.current&&(U.current=O),O):(U.current+=1,U.current),[]),X=r.useCallback(O=>{N.current=O,d(O)},[]),G=r.useCallback(O=>{X([...N.current,O])},[X]),se=r.useCallback(()=>{N.current=[],d([]),Q.current=new Map,W.current=new Set,$.current=null,U.current=0},[]),y=r.useCallback(()=>{w(!1),S(null),D(!1),k(!1),C(!1),P.current=!1,ie.current=!1,I(0)},[]),h=r.useCallback(O=>{e&&Mt(O,{sessionId:e,messagesRef:N,assistantMessageIndexRef:Q,lastAssistantSegmentIdRef:$,attachmentsSeenRef:W,resolveTimelineSeq:J,buildTextDeltaId:Tt,appendMessage:G,updateMessages:X})},[G,J,e,X]),{sendMessage:m,restoreSession:F,stop:z,connection:ne}=Ns({sessionId:e,projectId:i,onEvent:h}),de=r.useRef(null),ge=r.useRef(!1);r.useEffect(()=>{if(!n||!i||!u){a(null),se(),y();return}A.current&&a(null);let O=!0;return(async()=>{se(),y(),k(!0);try{const me=t==="group"?await gs(i,u):await bs(i,u);if(!O)return;const le=me?.session_id?.trim?.()??me?.session_id;if(!le){a(null),k(!1),C(!0);return}a(le),te(i,`lab-${t}`,le)}catch{O&&k(!1)}})(),()=>{O=!1}},[n,i,u,y,se,te,t]),r.useEffect(()=>{if(!n||!e)return;let O=!0;return(async()=>{const me=ie.current,le=P.current||me;me&&(ie.current=!1),se(),k(!0);try{const ee=await F(le?{full:!0}:{limit:Us});if(!O)return;const ce=Array.isArray(ee?.events)?ee.events:[];let ue=null;ce.forEach(oe=>{!oe||!oe.event||!oe.data||(oe.data?.event_id&&(ue=oe.data.event_id),Mt({event:oe.event,data:oe.data},{sessionId:e,messagesRef:N,assistantMessageIndexRef:Q,lastAssistantSegmentIdRef:$,attachmentsSeenRef:W,resolveTimelineSeq:J,buildTextDeltaId:Tt,appendMessage:G,updateMessages:X}))});const be=!!ee?.events_truncated,p=typeof ee?.event_limit=="number"?ee.event_limit:null;if(w(be),S(p),le?P.current=!be:P.current=!1,ue&&We.getState().setLastEventId(e,ue),!O)return;try{await m({sessionId:e,message:"",surface:`lab-${t}`,replayFromLastEvent:!0})}catch{}}finally{me&&O&&D(!1),O&&(k(!1),C(!0))}})(),()=>{O=!1}},[G,n,J,se,F,T,m,e,t,X]),r.useEffect(()=>{if(!n||!e)return;let O=!0;const Ee=()=>{const me=2e4+Math.floor(Math.random()*1e4);de.current=window.setTimeout(async()=>{if(!O||!e||ge.current){Ee();return}ge.current=!0;try{await m({sessionId:e,message:"",surface:V,replayFromLastEvent:!0})}catch{}finally{ge.current=!1}Ee()},me)};return Ee(),()=>{O=!1,de.current&&(window.clearTimeout(de.current),de.current=null)}},[n,m,e,V]),r.useEffect(()=>{if(!(!n||!e)&&(ne.status==="closed"||ne.status==="error")){if(ge.current)return;ge.current=!0,m({sessionId:e,message:"",surface:V,replayFromLastEvent:!0}).finally(()=>{ge.current=!1})}},[ne.status,n,m,e,V]),r.useEffect(()=>{A.current=e},[e]),r.useEffect(()=>{R.current&&R.current!==e&&z(R.current),R.current=e},[e,z]),r.useEffect(()=>()=>{A.current&&z(A.current)},[z]);const je=r.useCallback(()=>{!e||!n||E||P.current||(ie.current=!0,D(!0),I(O=>O+1))},[n,E,e]);return{sessionId:e,messages:f,connection:ne,sendMessage:m,historyTruncated:x,historyLimit:_,historyLoadingFull:E,historyLoading:q,hasLoadedOnce:K,loadFullHistory:je}},mt=i=>{const u=i.content;return typeof u?.content=="string"?u.content:""},Se=i=>i.content?.metadata??null,Xt=i=>{if(i)return{selection_type:i.selection_type,selection_ref:i.selection_ref,quest_id:i.quest_id,branch_name:i.branch_name??void 0,edge_id:i.edge_id??void 0,agent_instance_id:i.agent_instance_id??void 0,worktree_rel_path:i.worktree_rel_path??void 0}},Zt=i=>i?i.label?.trim()?i.label.trim():i.branch_name?.trim()||i.edge_id?.trim()||i.agent_instance_id?.trim()||i.selection_ref:"",Ks=(i,u)=>{const t=typeof u=="string"?u.trim().toLowerCase():"";return t?t==="queued"?i("copilot_group_reply_state_queued",void 0,"Queued"):t==="acked"?i("copilot_group_reply_state_acked",void 0,"Acknowledged"):t==="final"?i("copilot_group_reply_state_final",void 0,"Final"):t:null};function Jt({selection:i,proposal:u,onClearSelection:t,onClearProposal:n,selectionPrefix:e,proposalPrefix:a}){return!i&&!u?null:s.jsxs("div",{className:"flex flex-wrap items-center gap-2 border-b border-[var(--lab-border)] bg-[var(--lab-background)] px-4 py-3",children:[i?s.jsxs("button",{type:"button",onClick:t,className:"inline-flex items-center gap-2 rounded-full border border-[var(--lab-border)] bg-[var(--lab-surface)] px-3 py-1 text-[11px] font-medium text-[var(--lab-text-primary)]",children:[s.jsx("span",{className:"text-[var(--lab-text-secondary)]",children:e}),s.jsx("span",{children:Zt(i)}),s.jsx("span",{className:"text-[var(--lab-text-muted)]",children:"×"})]}):null,u?s.jsxs("button",{type:"button",onClick:n,className:"inline-flex items-center gap-2 rounded-full border border-[rgba(83,176,174,0.28)] bg-[rgba(83,176,174,0.12)] px-3 py-1 text-[11px] font-medium text-[var(--lab-text-primary)]",children:[s.jsx("span",{className:"text-[var(--lab-text-secondary)]",children:a}),s.jsx("span",{children:u.action_type}),s.jsxs("span",{className:"text-[var(--lab-text-muted)]",children:["· ",u.status]}),s.jsx("span",{className:"text-[var(--lab-text-muted)]",children:"×"})]}):null]})}const ut=i=>i.type!=="text_delta"?null:i.content.role,es=i=>{if(i==null)return"";const u=typeof i=="number"?new Date(i<1e12?i*1e3:i):new Date(i);if(Number.isNaN(u.getTime()))return"";const t=w=>String(w).padStart(2,"0"),n=t(u.getFullYear()%100),e=t(u.getMonth()+1),a=t(u.getDate()),f=t(u.getHours()),d=t(u.getMinutes()),x=t(u.getSeconds());return`${n}-${e}-${a} ${f}-${d}-${x}`},ft=i=>{if(ut(i)==="user")return"You";const t=Se(i);return t?.sender_name?t.sender_name:t?.agent_display_name?t.agent_display_name:t?.sender_label?t.sender_label:t?.agent_label?t.agent_label:t?.agent_id?`@${t.agent_id}`:"Agent"},Gs=i=>{if(!i)return[];const u=n=>{if(typeof n=="string"){const d=n.trim();return d?{url:d}:null}if(!n||typeof n!="object")return null;const e=n,a=typeof e.url=="string"&&e.url||typeof e.src=="string"&&e.src||typeof e.file_url=="string"&&e.file_url||typeof e.preview_url=="string"&&e.preview_url||typeof e.path=="string"&&e.path||"";if(!a)return null;const f=typeof e.label=="string"?e.label:void 0;return{url:a,label:f}},t=Array.isArray(i)?i:typeof i=="object"?i.items||i.images||i.files||[]:[];return Array.isArray(t)?t.map(n=>u(n)).filter(n=>!!n).slice(0,9):[]},Ys=i=>{if(!i)return[];const u=e=>{if(typeof e=="string"){const x=e.trim();return x?{name:x}:null}if(!e||typeof e!="object")return null;const a=e,d=(typeof a.name=="string"&&a.name||typeof a.user_name=="string"&&a.user_name||typeof a.username=="string"&&a.username||typeof a.display_name=="string"&&a.display_name||typeof a.label=="string"&&a.label||typeof a.user_id=="string"&&a.user_id||"").trim();return d?{name:d}:null},t=Array.isArray(i)?i:typeof i=="object"?i.items||i.users||i.likes||[]:[];return(Array.isArray(t)?t:[]).map(e=>u(e)).filter(e=>!!e)},Xs=i=>{if(!i)return[];const u=e=>{if(typeof e=="string"){const _=e.trim();return _?{name:"Unknown",content:_}:null}if(!e||typeof e!="object")return null;const a=e,f=typeof a.name=="string"&&a.name||typeof a.user_name=="string"&&a.user_name||typeof a.username=="string"&&a.username||typeof a.display_name=="string"&&a.display_name||typeof a.label=="string"&&a.label||typeof a.user_id=="string"&&a.user_id||"",d=typeof a.content=="string"&&a.content||typeof a.text=="string"&&a.text||typeof a.message=="string"&&a.message||typeof a.body=="string"&&a.body||"",x=f.trim()||"Unknown",w=d.trim();return w?{name:x,content:w}:null},t=Array.isArray(i)?i:typeof i=="object"?i.items||i.comments||i.entries||[]:[];return(Array.isArray(t)?t:[]).map(e=>u(e)).filter(e=>!!e)},Zs=(i,u)=>{const t=new Map;return i.forEach(n=>{const e=n.name.trim().toLowerCase();e&&(t.has(e)||t.set(e,n.name))}),u.forEach(n=>{const e=n.name.trim().toLowerCase();e&&(t.has(e)||t.set(e,n.name))}),Array.from(t.values())},Js=(i,u)=>{const t=new Map;return i.forEach(n=>{const e=`${n.name.trim().toLowerCase()}::${n.content.trim().toLowerCase()}`;t.has(e)||t.set(e,n)}),u.forEach(n=>{const e=`${n.name.trim().toLowerCase()}::${n.content.trim().toLowerCase()}`;t.has(e)||t.set(e,n)}),Array.from(t.values())},en=i=>{const u=i.content;if(typeof u?.timestamp=="number")return new Date(u.timestamp*1e3).toISOString();const t=u?.metadata;return typeof t?.source_ts=="string"?t.source_ts:null};function _n({disabled:i,agents:u,templates:t,quests:n,onClearChat:e,clearChatDisabled:a}){const f=H(m=>m.mode),d=H(m=>m.setMode),x=H(m=>m.activeAgentId),w=H(m=>m.activeQuestId),_=H(m=>m.followEffects),S=H(m=>m.setFollowEffects),E=H(m=>m.agentStatusOverrides),D=H(m=>m.piOnboardingActive),q=H(m=>m.endPiOnboarding),k=r.useMemo(()=>new Map(t.map(m=>[m.template_id,m])),[t]),K=r.useMemo(()=>zt(u),[u]),C=r.useMemo(()=>x?u.find(m=>m.instance_id===x)??null:null,[x,u]),T=C?.template_id?k.get(C.template_id)??null:null,I=C?.active_quest_id??w??null,A=I?n.find(m=>m.quest_id===I)??null:null,R=A?Dt(A):"Not joined yet",N=C?Ce(C):"",Q=C?Ve(C,T):"",W=C?K.get(C.instance_id)||wt(C.instance_id):null,U=(C?E[C.instance_id]??null:null)??C?.status??"",P=typeof U=="string"?U.trim():"",ie=f==="direct"&&C&&!!P&&vt(P)&&P.toLowerCase()!=="waiting",[te,V]=r.useState(null),J=!!(a||!e),X=[{value:"direct",label:"Direct"},{value:"group",label:"Group"},{value:"friends",label:"Friends"}],G=r.useCallback(m=>{e&&(m.preventDefault(),m.stopPropagation(),V({x:m.clientX,y:m.clientY}))},[e]),se=r.useCallback(()=>{J||!e||(e(),V(null))},[J,e]),y=r.useCallback(()=>{S(!_),V(null)},[_,S]);r.useEffect(()=>{if(!te)return;const m=()=>V(null),F=z=>{z.key==="Escape"&&V(null)};return window.addEventListener("click",m),window.addEventListener("contextmenu",m),window.addEventListener("keydown",F),window.addEventListener("scroll",m,!0),()=>{window.removeEventListener("click",m),window.removeEventListener("contextmenu",m),window.removeEventListener("keydown",F),window.removeEventListener("scroll",m,!0)}},[te]);const h=te&&typeof document<"u"?Ye.createPortal(s.jsxs("div",{className:"lab-copilot-context-menu",style:{left:te.x,top:te.y},children:[s.jsxs("div",{className:"lab-copilot-context-item",children:["Quest: ",R]}),s.jsx("button",{type:"button",onClick:se,disabled:J,children:"Clear chat"}),s.jsxs("button",{type:"button",onClick:y,children:[s.jsx($t,{size:14,className:Me("shrink-0",_?"opacity-100":"opacity-0")}),"Follow effects"]})]}),document.body):null;return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"lab-copilot-header",children:[s.jsx("div",{className:"lab-section-tabs lab-copilot-tabs",role:"tablist","aria-label":"Copilot modes",children:X.map(m=>{const F=f===m.value;return s.jsxs("button",{type:"button",role:"tab","aria-selected":F,disabled:i,onClick:()=>d(m.value),className:Me("lab-section-tab",F&&"lab-section-tab-active",i&&"cursor-not-allowed opacity-60"),children:[m.label,F?s.jsx("span",{className:"lab-section-tab-indicator"}):null]},m.value)})}),f==="direct"&&C?s.jsxs("div",{className:"lab-copilot-agent",onContextMenu:G,children:[s.jsxs("div",{className:"lab-avatar lab-avatar-sm",children:[s.jsx("span",{className:"lab-avatar-ring",style:{borderColor:W||wt(C.instance_id)}}),s.jsx("img",{src:Q,alt:N||"Agent"})]}),s.jsxs("div",{className:"lab-copilot-agent-meta",children:[N?s.jsx("div",{className:"lab-copilot-agent-name",children:N}):null,ie?s.jsxs("div",{className:"lab-copilot-agent-status",children:[s.jsx("span",{className:"lab-status-dot lab-status-dot-running"}),s.jsx("span",{children:"Working"})]}):null]}),D?s.jsx("button",{type:"button",className:"lab-onboarding-exit",onClick:q,children:"Exit onboarding"}):null]}):null]}),h]})}function wn({projectId:i,readOnly:u,cliStatus:t,templates:n,agents:e,quests:a,prefill:f,onActionsChange:d}){const x=St(),{addToast:w}=Ct(),{t:_}=Pt("lab"),S=H(o=>o.mode),E=H(o=>o.activeAgentId),D=H(o=>o.activeQuestId),q=H(o=>o.directPrefill),k=H(o=>o.directComposeRequest),K=H(o=>o.setActiveQuest),C=H(o=>o.setActiveAgent),T=H(o=>o.setDirectPrefill),I=H(o=>o.clearDirectComposeRequest),A=H(o=>o.agentStatusOverrides),R=H(o=>o.setAgentStatusOverride),N=H(o=>o.piOnboardingActive),Q=H(o=>o.piOnboardingQuestId),W=H(o=>o.piOnboardingKind),$=H(o=>o.endPiOnboarding),U=He(o=>o.selection),P=He(o=>o.activeProposal),ie=He(o=>o.setSelection),te=He(o=>o.setActiveProposal),V=We(o=>o.setSessionIdForSurface),J=We(o=>o.clearSessionIdForSurface),X=We(o=>i?o.sessionIdsByProjectSurface[i]?.["lab-direct"]??null:null),G=We(o=>i?o.cliServerIdsByProject[i]??null:null),[se,y]=r.useState(null),[h,m]=r.useState(null),[F,z]=r.useState(null),ne=r.useRef(null),de=r.useRef("init"),ge=r.useRef(null),je=r.useRef(!1),{level:O}=Vs(),Ee=Ft(),me=O==="full"&&!Ee,le=r.useCallback((o,b)=>o?o.threadId===b.threadId&&o.historyOpen===b.historyOpen&&o.isResponding===b.isResponding&&o.ready===b.ready&&o.isRestoring===b.isRestoring&&o.restoreAttempted===b.restoreAttempted&&o.hasHistory===b.hasHistory&&o.error===b.error&&o.title===b.title&&o.statusText===b.statusText&&o.statusPrevText===b.statusPrevText&&o.statusKey===b.statusKey&&o.toolPanelVisible===b.toolPanelVisible&&o.toolToggleVisible===b.toolToggleVisible&&o.attachmentsDrawerOpen===b.attachmentsDrawerOpen&&o.fixWithAiRunning===b.fixWithAiRunning:!1,[]);r.useEffect(()=>{S!=="direct"&&(de.current="init")},[S]);const ee=r.useMemo(()=>new Map(n.map(o=>[o.template_id,o])),[n]),ce=r.useMemo(()=>new Map(e.map(o=>[o.instance_id,o])),[e]),ue=r.useMemo(()=>zt(e),[e]),be=E??null,p=be?ce.get(be)??null:null,oe=!!F?.isResponding,Xe=p&&A[p.instance_id]?A[p.instance_id]:p?.status??"",fe=typeof Xe=="string"?Xe.toLowerCase():"",Ze=!!p&&!!fe&&vt(fe)&&fe!=="waiting",Qe=typeof p?.status=="string"?p.status.toLowerCase():"",Re=S==="direct"&&!!p&&oe&&Qe!=="waiting"?"working":null,ze=p?A[p.instance_id]??null:null;r.useEffect(()=>{const o=ge.current,b=p?.instance_id??null;o&&o!==b&&R(o,null),ge.current=b},[p?.instance_id,R]),r.useEffect(()=>{p?.instance_id&&ze!==Re&&R(p.instance_id,Re)},[p?.instance_id,ze,Re,R]),r.useEffect(()=>{if(!i||S!=="direct"||!p?.instance_id){je.current=!1;return}const o=je.current;je.current=oe,o&&!oe&&x.invalidateQueries({queryKey:["lab-agents",i]})},[p?.instance_id,oe,S,i,x]);const _e=p?.template_id?ee.get(p.template_id)??null:null,Ue=_e?.init_question?.trim()||"",De=!!Ue,$e=(p?.active_quest_id?a.find(o=>o.quest_id===p.active_quest_id):a.find(o=>o.quest_id===D))??null,Ie=S==="direct"&&De,ae=!!(F?.ready&&F?.restoreAttempted&&!F?.isRestoring),ke=Ie&&ae&&!F?.hasHistory,Ke=Ie&&!ae,[Je,he]=r.useState(null),[et,ot]=r.useState(0),Ne=r.useRef(null),Te=r.useRef(0),Le=r.useCallback(()=>{Ne.current&&window.clearTimeout(Ne.current),Ne.current=null,Te.current=0},[]),qe=r.useCallback(()=>{if(Ne.current)return;const o=Math.min(Te.current,4),b=Math.min(15e3,1500*2**o);Te.current=o+1,Ne.current=window.setTimeout(()=>{Ne.current=null,ot(j=>j+1)},b)},[]);r.useEffect(()=>()=>Le(),[Le]),r.useEffect(()=>{D||a.length!==1||K(a[0].quest_id)},[D,a,K]),r.useEffect(()=>{if(!i||S!=="direct")return;if(!p?.instance_id){he(null),Le(),J(i,"lab-direct");return}const o=p.direct_session_id??null;o&&(he(j=>j===o?j:o),X!==o&&V(i,"lab-direct",o));let b=!1;return ns(i,p.instance_id).then(j=>{b||(Le(),he(j.session_id),X!==j.session_id&&V(i,"lab-direct",j.session_id))}).catch(j=>{if(b)return;const Z=typeof j?.response?.data?.detail=="string"?j.response.data.detail:null;if(Z&&["cli_server_required","cli_offline","cli_server_not_bound"].includes(Z)){qe(),x.invalidateQueries({queryKey:["lab-agents",i]});return}o||he(null)}),()=>{b=!0}},[p?.direct_session_id,p?.instance_id,p?.cli_server_id,p?.active_quest_id,p?.active_quest_node_id,J,X,et,S,i,x,Le,qe,V]),r.useEffect(()=>{if(N){if(!p){$();return}_e?.template_key!=="pi"&&p.agent_id!=="pi"&&$()}},[p,_e?.template_key,$,N]),r.useEffect(()=>{N&&F?.hasHistory&&$()},[F?.hasHistory,$,N]);const Be=t!=="online",xe=u||Be,tt=!xe&&!(S==="direct"&&ke),Ge=r.useMemo(()=>e.map(o=>{const b=o.template_id?ee.get(o.template_id)??null:null;return yt(o,b)}),[e,ee]),c=r.useMemo(()=>{if(!p)return;const o=p.template_id?ee.get(p.template_id)??null:null;return yt(p,o)},[p,ee]);r.useEffect(()=>{if(!p){y(null);return}if(ke){y(null);return}if(Ke){y(null);return}const o=p.mention_label?.trim()||p.agent_id,b=o.startsWith("@")?o:`@${o}`;y({text:`${b} `,focus:!1,token:Date.now()})},[p,Ke,ke]);const M=r.useMemo(()=>{if(p){const o=p.mention_label?.trim()||p.agent_id;return o.startsWith("@")?o:`@${o}`}return`@${Es}`},[p]),L=ke,B=S==="direct"?M:void 0,Y=p&&S==="direct"?M:void 0,ve=r.useCallback(()=>{if(xe){w({type:"warning",title:"Recruitment unavailable",description:t==="online"?"Recruitment is disabled in read-only mode.":"Bind an execution server to recruit agents."});return}typeof window<"u"&&window.dispatchEvent(new CustomEvent("lab:open-recruit"))},[w,t,xe]),we=r.useCallback(o=>{C(o)},[C]),st=r.useMemo(()=>{if(!p)return{agent_label:M};const o=Ve(p,_e);return{agent_label:M,agent_id:p.agent_id,agent_instance_id:p.instance_id,agent_display_name:Ce(p),agent_logo:o||void 0}},[p,_e,M]),nt=r.useMemo(()=>{if(!L)return null;const o=Math.floor(Date.now()/1e3);return{id:`lab-starter-${be??"unknown"}`,type:"text_delta",seq:0,ts:o,content:{content:Ue,role:"assistant",status:"completed",timestamp:o,metadata:st}}},[Ue,be,st,L]),rt=r.useCallback(o=>{m(o),d?.(o)},[d]),ht=r.useCallback(o=>{z(b=>le(b,o)?b:o)},[le]),pt=r.useCallback(o=>{k?I():q&&T(null),N&&$()},[I,k,q,$,N,T]),lt=r.useMemo(()=>f||(k?.text?.trim()?{text:k.text,focus:!0,token:k.token}:q&&q.trim()?{text:q,focus:!0,token:Date.now()}:se),[se,k,q,f]);r.useEffect(()=>{const o=k;if(!o||o.submitMode!=="auto"||S!=="direct"||!h?.setComposerValue||!h.submitComposer||F?.isResponding||ne.current===o.token)return;ne.current=o.token,h.setComposerValue(o.text,!0);const b=window.setTimeout(()=>{h.submitComposer?.()},30);return()=>{window.clearTimeout(b)}},[h,F?.isResponding,k,S]),r.useEffect(()=>{if(S!=="direct"||!h)return;const o=p?.instance_id??"none",b=Je??p?.direct_session_id??X??null;if(b){X!==b&&(h.clearThread?.(),h.setThreadId(b)),de.current=o;return}de.current!==o&&(de.current=o,h.setThreadId(null))},[p?.direct_session_id,p?.instance_id,h,X,Je,xe,S]);const ct=r.useMemo(()=>{if(!p)return null;const o=N&&Q?Q:null,b=Ve(p,_e),j=Xt(U);return{lab_mode:"direct",quest_id:o??p.active_quest_id??void 0,quest_node_id:p.active_quest_node_id??void 0,agent_id:p.agent_id,agent_label:at(p),agent_display_name:Ce(p),agent_logo:b||null,agent_avatar_color:p.avatar_frame_color??void 0,agent_instance_id:p.instance_id,cli_server_id:p.cli_server_id??G??void 0,pi_onboarding_kind:N?W??void 0:void 0,selection_context:j,proposal_id:P?.proposal_id??void 0,target_label:at(p),message_kind:j||P?"user_control":N?"pi_onboarding":"text"}},[p,_e,P,G,N,W,Q,U]),l=r.useMemo(()=>s.jsx(Jt,{selection:U,proposal:P?{proposal_id:P.proposal_id,action_type:P.action_type,status:P.status}:null,onClearSelection:()=>ie(null),onClearProposal:()=>te(null),selectionPrefix:_("copilot_selection_chip",void 0,"Ref"),proposalPrefix:_("copilot_proposal_chip",void 0,"Proposal")}),[P,U,te,ie,_]),v=me?{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},transition:{duration:.2,ease:[0,0,.2,1]}}:{initial:!1,animate:{opacity:1},exit:{opacity:1},transition:{duration:0}};return s.jsx("div",{className:"flex h-full min-h-0 flex-col",children:s.jsxs(s.Fragment,{children:[Be?s.jsx("div",{className:"border-b border-[var(--lab-border)] px-5 py-2 text-xs text-[var(--lab-text-secondary)]",children:t==="unbound"?"Bind an execution server to activate Lab Copilot.":"Your execution server is offline. Messages will be sent once it reconnects."}):null,s.jsxs(is,{mode:"wait",initial:!1,children:[S==="direct"?s.jsx(xt.div,{className:"flex flex-1 min-h-0 flex-col overflow-hidden",...v,children:s.jsxs("div",{className:"flex-1 min-h-0 overflow-hidden",children:[N?s.jsxs("div",{className:"lab-pi-onboarding-banner",children:[s.jsxs("div",{children:[s.jsx("div",{className:"lab-pi-onboarding-title",children:"Chat with PI"}),s.jsx("div",{className:"lab-pi-onboarding-subtitle",children:"Send your message to start the conversation."})]}),s.jsx("button",{type:"button",onClick:$,children:"Exit"})]}):null,p?s.jsx(Qs,{projectId:i,readOnly:xe,prefill:lt,leadMessage:L?nt:null,mentionablesOverride:Ge,defaultAgentOverride:c,mentionsEnabledOverride:tt,enforcedMentionPrefix:B,lockedMentionPrefix:Y,messageMetadata:ct??void 0,composerFooter:l,hideCopilotGreeting:L,busyOverride:Ze,onActionsChange:rt,onMetaChange:ht,onUserSubmit:pt}):s.jsx("div",{className:"flex h-full flex-col items-center justify-center px-6 py-8",children:s.jsxs("div",{className:"w-full max-w-3xl",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs("div",{children:[s.jsx("div",{className:"text-base font-semibold text-[var(--lab-text-primary)]",children:"Choose an agent"}),s.jsx("div",{className:"text-xs text-[var(--lab-text-secondary)]",children:"Select an agent to start a direct chat."})]}),s.jsx(_t,{type:"button",size:"sm",className:"h-8 px-3 text-xs",onClick:ve,disabled:xe,children:"Recruit Agent"})]}),e.length===0?s.jsx("div",{className:"mt-4 rounded-xl border border-[var(--lab-border)] bg-[var(--lab-surface)] p-4 text-xs text-[var(--lab-text-secondary)]",children:"No agents yet. Recruit an agent to begin a direct chat."}):s.jsx("div",{className:"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2",children:e.map((o,b)=>{const j=o.template_id?ee.get(o.template_id)??null:null,Z=Ce(o),Oe=at(o),Fe=ue.get(o.instance_id)??wt(o.instance_id,b),ye=Ve(o,j),re=typeof o.status=="string"?o.status.toLowerCase():"idle",Pe=re!=="waiting"&&vt(re),pe=Pe?"lab-status-dot-running":re==="waiting"?"lab-status-dot-busy":"lab-status-dot-idle";return s.jsx("button",{type:"button",className:"text-left",onClick:()=>we(o.instance_id),children:s.jsxs("div",{className:"lab-card lab-card-hover flex items-center gap-3 rounded-xl border border-[var(--lab-border)] bg-[var(--lab-surface)] p-3",children:[s.jsxs("div",{className:"lab-avatar lab-avatar-sm",children:[s.jsx("span",{className:"lab-avatar-ring",style:{borderColor:Fe}}),s.jsx("img",{src:ye,alt:Z})]}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("div",{className:"text-sm font-semibold text-[var(--lab-text-primary)] truncate",children:Z}),s.jsx("div",{className:"text-xs text-[var(--lab-text-secondary)] truncate",children:Oe})]}),s.jsxs("div",{className:"flex items-center gap-2 text-[10px] uppercase text-[var(--lab-text-muted)]",children:[s.jsx("span",{className:`lab-status-dot ${pe}`}),Pe?"Working":re==="waiting"?"Waiting":"Idle"]})]})},o.instance_id)})})]})})]})},"direct"):null,S==="group"?s.jsx(xt.div,{className:"flex flex-1 min-h-0 flex-col overflow-hidden",...v,children:s.jsx(tn,{projectId:i,quest:$e,quests:a,agents:e,templatesById:ee,readOnly:xe,onQuestChange:K})},"group"):null,S==="friends"?s.jsx(xt.div,{className:"flex flex-1 min-h-0 flex-col overflow-hidden",...v,children:s.jsx(nn,{projectId:i,agents:e,templatesById:ee,readOnly:xe,quest:$e,quests:a,onQuestChange:K})},"friends"):null]})]})})}const ts=(i,u,t=90)=>{const n=i.trim();if(!n)return"";const e=u.trim().toLowerCase();if(!e)return n.slice(0,t);const f=n.toLowerCase().indexOf(e);if(f===-1)return n.slice(0,t);const d=Math.floor(t/2),x=Math.max(0,f-d),w=Math.min(n.length,f+e.length+d),_=x>0?"...":"",S=w<n.length?"...":"";return`${_}${n.slice(x,w)}${S}`};function ss({label:i,entities:u,emptyEntitiesLabel:t,searchValue:n,onSearchChange:e,searchResults:a,onSearchSelect:f,searchPlaceholder:d,questId:x,quests:w,onQuestChange:_,canManageRoster:S,rosterBusy:E,availableAgents:D,onAddAgents:q,onRemoveAgent:k}){const K=n.trim().length>0,C=!!(S&&!E),T=D??[],[I,A]=r.useState(!1),[R,N]=r.useState(new Set),[Q,W]=r.useState(!1),[$,U]=r.useState(null);r.useEffect(()=>{I||N(new Set)},[I]),r.useEffect(()=>{N(new Set)},[x]),r.useEffect(()=>{if(!$)return;const y=()=>U(null),h=m=>{m.key==="Escape"&&U(null)};return window.addEventListener("click",y),window.addEventListener("contextmenu",y),window.addEventListener("keydown",h),window.addEventListener("scroll",y,!0),()=>{window.removeEventListener("click",y),window.removeEventListener("contextmenu",y),window.removeEventListener("keydown",h),window.removeEventListener("scroll",y,!0)}},[$]);const P=r.useCallback(y=>{N(h=>{const m=new Set(h);return m.has(y)?m.delete(y):m.add(y),m})},[]),ie=r.useCallback(async()=>{if(!C||!q)return;const y=Array.from(R);if(y.length!==0){W(!0);try{await q(y),A(!1),N(new Set)}finally{W(!1)}}},[C,q,R]),te=r.useCallback((y,h)=>{!C||!k||(y.preventDefault(),y.stopPropagation(),U({agentId:h,x:y.clientX,y:y.clientY}))},[C,k]),V=r.useCallback(()=>{!$||!k||!C||(k($.agentId),U(null))},[$,C,k]),J=$&&typeof document<"u"?Ye.createPortal(s.jsx("div",{className:"lab-copilot-context-menu",style:{left:$.x,top:$.y},children:s.jsx("button",{type:"button",onClick:V,disabled:!C,children:"Remove from quest"})}),document.body):null,X=!!q,G=!C||T.length===0,se=x?T.length===0?"All available agents are already in this quest.":"Add agents to this quest.":"Select a quest to add agents.";return s.jsxs(xs,{modal:!1,children:[s.jsx(vs,{asChild:!0,children:s.jsx("button",{type:"button",className:"ds-copilot-icon-btn lab-copilot-overflow-trigger","aria-label":`${i} options`,"data-tooltip":`${i} options`,children:s.jsx(ls,{size:16})})}),s.jsxs(ys,{align:"end",sideOffset:12,className:"lab-copilot-menu",children:[s.jsxs("div",{className:"lab-copilot-menu-section",children:[s.jsxs("div",{className:"lab-copilot-menu-title",children:[i," roster"]}),s.jsxs("div",{className:"lab-copilot-entity-list",children:[u.map(y=>s.jsxs("div",{className:Me("lab-copilot-entity",C&&"is-manageable"),onContextMenu:h=>te(h,y.id),children:[s.jsx("div",{className:"lab-avatar lab-avatar-sm",children:s.jsx("img",{src:y.avatar,alt:y.name})}),s.jsx("span",{className:"lab-copilot-entity-name",title:y.name,children:y.name})]},y.id)),X?s.jsx("button",{type:"button",className:"lab-copilot-entity lab-copilot-entity-add",onClick:()=>A(!0),disabled:G,title:se,"aria-label":"Add agents",children:s.jsx(cs,{size:14})}):null]}),u.length?null:s.jsx("div",{className:"lab-copilot-menu-muted",children:t})]}),s.jsxs("div",{className:"lab-copilot-menu-section",children:[s.jsx("div",{className:"lab-copilot-menu-title",children:"Search chat"}),s.jsxs("div",{className:"lab-copilot-search",children:[s.jsx(us,{size:14}),s.jsx("input",{type:"text",value:n,onChange:y=>e(y.target.value),placeholder:d,className:"lab-copilot-search-input"})]}),K?a.length?s.jsx("div",{className:"lab-copilot-search-results",children:a.map(y=>s.jsxs("button",{type:"button",className:"lab-copilot-search-result",onClick:()=>f(y),children:[s.jsx("div",{className:"lab-copilot-search-title",children:y.title}),s.jsx("div",{className:"lab-copilot-search-excerpt",children:y.excerpt})]},y.id))}):s.jsx("div",{className:"lab-copilot-menu-muted",children:"No matches found."}):s.jsx("div",{className:"lab-copilot-menu-muted",children:"Type to search this chat."})]}),s.jsxs("div",{className:"lab-copilot-menu-section",children:[s.jsx("div",{className:"lab-copilot-menu-title",children:"Switch quest"}),w.length?s.jsxs(_s,{value:x??"",onValueChange:y=>_(y||null),children:[s.jsx(ws,{className:"lab-copilot-menu-select",children:s.jsx(Ss,{placeholder:"Select quest"})}),s.jsx(Cs,{children:w.map(y=>s.jsx(Ms,{value:y.quest_id,children:s.jsx("span",{className:"block max-w-[var(--radix-select-trigger-width)] line-clamp-2",children:Dt(y)})},y.quest_id))})]}):s.jsx("div",{className:"lab-copilot-menu-muted",children:"No quests available."})]})]}),J,X?s.jsx(ds,{open:I,onOpenChange:A,children:s.jsxs(ms,{className:"lab-copilot-add-dialog",showCloseButton:!0,children:[s.jsxs(fs,{children:[s.jsx(hs,{className:"lab-copilot-add-title",children:"Add agents"}),s.jsx("div",{className:"lab-copilot-add-subtitle",children:x?"Select agents to join this quest.":"Select a quest first to add agents."})]}),T.length?s.jsx("div",{className:"lab-copilot-add-list",children:T.map(y=>{const h=R.has(y.id);return s.jsxs("button",{type:"button",className:Me("lab-copilot-add-row",h&&"is-selected"),onClick:()=>P(y.id),children:[s.jsx("span",{className:"lab-copilot-add-check",children:h?s.jsx($t,{size:12}):null}),s.jsx("div",{className:"lab-avatar lab-avatar-sm",children:s.jsx("img",{src:y.avatar,alt:y.name})}),s.jsx("span",{className:"lab-copilot-add-name",title:y.name,children:y.name})]},y.id)})}):s.jsx("div",{className:"lab-copilot-add-empty",children:x?"No available agents to add right now.":"Select a quest to see available agents."}),s.jsxs(ps,{className:"lab-copilot-add-footer",children:[s.jsx(_t,{variant:"outline",size:"sm",className:"min-h-[40px] px-4 text-xs",onClick:()=>A(!1),children:"Cancel"}),s.jsx(_t,{size:"sm",className:"min-h-[40px] px-4 text-xs",onClick:ie,disabled:G||R.size===0||Q,children:Q?"Adding...":"Add to quest"})]})]})}):null]})}function tn({projectId:i,quest:u,quests:t,agents:n,templatesById:e,readOnly:a,onQuestChange:f}){const{t:d}=Pt("lab"),{addToast:x}=Ct(),w=St(),[_,S]=r.useState(""),[E,D]=r.useState([]),[q,k]=r.useState(!1),[K,C]=r.useState(null),[T,I]=r.useState(null),A=r.useRef(null),R=r.useRef(null),[N,Q]=r.useState(!0),W=H(l=>l.groupPrefill),$=H(l=>l.setGroupPrefill),U=He(l=>l.selection),P=He(l=>l.activeProposal),ie=He(l=>l.setSelection),te=He(l=>l.setActiveProposal),V=H(l=>l.setMode),J=H(l=>l.setActiveAgent),X=We(l=>l.setSessionIdForSurface),G=Bt(l=>l.user),se=Ht(),[y,h]=r.useState(""),m=u?.quest_id??null,{sessionId:F,messages:z,connection:ne,sendMessage:de,historyTruncated:ge,historyLimit:je,historyLoadingFull:O,historyLoading:Ee,hasLoadedOnce:me,loadFullHistory:le}=Yt({projectId:i,questId:m,surface:"group",enabled:!!m}),ee=r.useMemo(()=>new Map(n.map(l=>[l.instance_id,l])),[n]),ce=r.useMemo(()=>m?n.filter(l=>l.active_quest_id===m):[],[n,m]),ue=r.useMemo(()=>ce.map(l=>l.instance_id),[ce]),be=r.useMemo(()=>{const l=new Map;return ce.forEach(g=>{const v=at(g),o=new Set;v&&(o.add(v),o.add(v.replace(/^@/,""))),g.agent_id&&o.add(g.agent_id),g.display_name&&o.add(g.display_name),o.forEach(b=>{const j=b.trim().toLowerCase();j&&(l.has(j)||l.set(j,g.instance_id))})}),l},[ce]),p=r.useMemo(()=>{if(!m)return[];const l={id:"all",label:"@ALL",description:"Notify all agents in this quest",role:"broadcast",source:"lab"},g=ce.map(v=>{const o=v.template_id?e.get(v.template_id)??null:null;return yt(v,o)});return[l,...g]},[ce,m,e]),oe=r.useMemo(()=>ce.map(l=>{const g=l.template_id?e.get(l.template_id)??null:null;return{id:l.instance_id,name:Ce(l),avatar:Ve(l,g)}}),[ce,e]),Xe=r.useMemo(()=>m?n.filter(l=>l.active_quest_id!==m).map(l=>{const g=l.template_id?e.get(l.template_id)??null:null;return{id:l.instance_id,name:Ce(l),avatar:Ve(l,g)}}):[],[n,m,e]),fe=r.useMemo(()=>t.length===0?"Create a quest to get started.":"Select a quest to start collaborating.",[t.length]),Ze=m?"No agents assigned to this quest yet.":"Select a quest to see its agents.",Qe=r.useMemo(()=>ne.status==="rate_limited"?"Rate limited. Retrying...":ne.status==="reconnecting"?"Reconnecting...":ne.status==="error"?ne.error||"Connection error":null,[ne.error,ne.status]),Ae=ge&&!!F,Re=!!m&&Ee&&z.length===0&&!me,ze=typeof je=="number"&&je>0?`Showing latest ${je} messages.`:"Showing recent messages.";r.useMemo(()=>((G?.username||G?.email||G?.id||"You")?.trim?.()??"")||"You",[G?.email,G?.id,G?.username]),r.useEffect(()=>{h(""),C(null),A.current=null,Q(!0),S("")},[m]),r.useEffect(()=>{if(!T)return;const l=()=>I(null),g=v=>{v.key==="Escape"&&I(null)};return window.addEventListener("click",l),window.addEventListener("contextmenu",l),window.addEventListener("keydown",g),window.addEventListener("scroll",l,!0),()=>{window.removeEventListener("click",l),window.removeEventListener("contextmenu",l),window.removeEventListener("keydown",g),window.removeEventListener("scroll",l,!0)}},[T]),r.useEffect(()=>{W&&(_.trim()||S(W.trim()?`${W} `:""),$(null))},[W,_,$]);const _e=r.useCallback(l=>{const g=l.trim();if(!g)return"";const v=g.split(/\s+/);let o=0;for(;o<v.length;){const b=v[o];if(!b||!b.startsWith("@")||b.length===1)break;o+=1}return v.slice(o).join(" ").trim()},[]),Ue=r.useCallback(l=>{const g=l.trim(),v=/@([A-Za-z0-9_.-]+)/g,o=new Set,b=new Set;let j=!1,Z;for(;(Z=v.exec(g))!==null;){const ye=Z[1]?.trim();if(!ye)continue;const re=ye.toLowerCase();if(re==="all"){j=!0;continue}const Pe=re.startsWith("@")?re:`@${re}`,pe=be.get(Pe)??be.get(re);pe?o.add(pe):b.add(`@${ye}`)}return j&&(ue.forEach(ye=>o.add(ye)),b.clear()),{content:_e(g)||(o.size>0||j?"":g),targets:Array.from(o),missing:Array.from(b)}},[be,ue,_e]),De=r.useCallback(l=>{const g=ee.get(l);return g?at(g):""},[ee]),$e=async()=>{if(!(!m||!_.trim()||a||!F))try{const l=Ue(_);if(l.missing.length>0){x({type:"error",title:"Unknown agent",description:`Unknown mention: ${l.missing.join(", ")}`});return}if(l.targets.length===0){x({type:"error",title:"Mention required",description:"Mention a quest agent to start a group request."});return}Q(!0),await de({sessionId:F,message:l.content,surface:"lab-group",mentionTargets:l.targets,metadata:{selection_context:Xt(U),proposal_id:P?.proposal_id??void 0,message_kind:P||U?"user_control":l.targets.length>0?"group_request":"text",target_label:l.targets.length===1&&De(l.targets[0])||void 0}}),S(""),D([])}catch{x({type:"error",title:"Message failed",description:"Message couldn't be sent. Please check your connection and try again."})}};r.useEffect(()=>{const l=z[z.length-1];if(l?.id){if(!A.current){A.current=l.id;return}if(l.id!==A.current){A.current=l.id,C(l.id);const g=window.setTimeout(()=>C(null),1200);return()=>window.clearTimeout(g)}}},[z]);const Ie=r.useCallback(l=>{const g=Se(l),v=Array.isArray(g?.mention_targets)?g?.mention_targets:[];if(!v.length)return"";const o=v.map(b=>De(b)).filter(b=>!!b);return o.length?Array.from(new Set(o)).join(" "):""},[De]),ae=r.useCallback(l=>{const g=mt(l);if(ut(l)!=="user")return g;const v=Ie(l);return v?g?`${v} ${g}`:v:g},[Ie]),ke=r.useCallback(l=>{if(ut(l)!=="user")return l;const g=mt(l),v=ae(l);if(!v||v===g)return l;const o=l.content;return!o||typeof o!="object"||typeof o.content!="string"?l:{...l,content:{...o,content:v}}},[ae]),Ke=r.useMemo(()=>{const l=new Map;return z.forEach(g=>{const v=ae(g);v&&l.set(g.id,v)}),l},[z,ae]),Je=r.useMemo(()=>new Map(z.map(l=>[l.id,l])),[z]),he=r.useMemo(()=>{const l=new Map;return z.forEach(g=>{const v=Se(g),o=typeof v?.group_message_id=="string"?v.group_message_id:"";if(!o)return;const b=ae(g);b&&l.set(o,b)}),l},[z,ae]),et=r.useMemo(()=>{const l=new Map;return z.forEach(g=>{const v=Se(g),o=typeof v?.group_message_id=="string"?v.group_message_id:"";o&&l.set(o,g)}),l},[z]),ot=r.useCallback(l=>{const g=Se(l);if(!g)return null;const v=g,o=v.context&&typeof v.context=="object"?v.context:null,b=typeof v.reply_to_message_id=="string"&&v.reply_to_message_id||typeof v.quote_message_id=="string"&&v.quote_message_id||typeof o?.reply_to_message_id=="string"&&o.reply_to_message_id||typeof o?.quote_message_id=="string"&&o.quote_message_id||"",j=v.quote_snapshot&&typeof v.quote_snapshot=="object"?v.quote_snapshot:o?.quote_snapshot&&typeof o.quote_snapshot=="object"?o.quote_snapshot:null;if(!b&&!j)return null;const Z=j&&typeof j.group_message_id=="string"?j.group_message_id:"",Oe=b||Z,Fe=Oe?et.get(Oe)??null:null,ye=j&&typeof j.content=="string"?j.content:"",re=Oe?he.get(Oe)??"":"",Pe=(ye||re).replace(/\s+/g," ").trim();if(!Pe)return null;let pe="";return Fe?pe=ft(Fe):j&&(pe=typeof j.sender_name=="string"&&j.sender_name||typeof j.agent_display_name=="string"&&j.agent_display_name||typeof j.sender_label=="string"&&j.sender_label||typeof j.agent_label=="string"&&j.agent_label||""),pe||(pe="User"),{sender:pe,content:Pe}},[he,et]),Ne=r.useCallback((l,g)=>{const v=Se(g),o=v?.agent_instance_id??v?.sender_instance_id,b=v?.session_id;!o&&!b||I({messageId:g.id,x:l.clientX,y:l.clientY})},[]),Te=T?Je.get(T.messageId)??null:null,Le=Te?Se(Te):null,qe=Le?.agent_instance_id??null,Be=typeof Le?.session_id=="string"?Le.session_id:null,xe=!!qe,tt=r.useCallback(()=>{qe&&(J(qe),Be&&X(i,"lab-direct",Be),V("direct"),I(null))},[qe,Be,i,J,V,X]),Ge=r.useCallback(()=>{const l=R.current;l&&(typeof l.scrollTo=="function"?l.scrollTo({top:l.scrollHeight,behavior:"auto"}):l.scrollTop=l.scrollHeight)},[]),c=r.useCallback(l=>{const g=l.currentTarget,v=Ot(g);Q(o=>o===v?o:v)},[Ot]);r.useCallback(()=>{Q(!1),le()},[le]),r.useEffect(()=>{!m||z.length===0||N&&window.requestAnimationFrame(()=>Ge())},[N,z,m,Ge]);const M=Ae?1:0,L=z.length+M,B=L>20,Y=Kt({count:L,getScrollElement:()=>R.current,estimateSize:l=>Ae&&l===0?56:160,getItemKey:l=>Ae&&l===0?"lab-group-history-banner":z[l-M]?.id??`lab-group-${l}`,overscan:6}),ve=r.useMemo(()=>{const l=y.trim().toLowerCase();if(!l)return[];const g=[];return z.forEach((v,o)=>{const b=Ke.get(v.id)??"";if(!b||!b.toLowerCase().includes(l))return;const j=ft(v);g.push({id:v.id,index:o,title:j,excerpt:ts(b,l)})}),g},[Ke,z,y]),we=r.useCallback(async l=>{if(!(!m||a||l.length===0)){k(!0);try{const g=await Promise.allSettled(l.map(o=>dt(i,o,{quest_id:m,quest_node_id:null}))),v=[];if(g.forEach((o,b)=>{o.status!=="fulfilled"&&v.push(l[b])}),v.length){const o=v.map(b=>{const j=ee.get(b);return j?Ce(j):b});x({type:"error",title:"Unable to add agents",description:`Failed to add: ${o.join(", ")}`})}w.invalidateQueries({queryKey:["lab-agents",i]})}finally{k(!1)}}},[x,ee,i,w,m,a]),st=r.useCallback(async l=>{if(!(!m||a)){k(!0);try{await dt(i,l,{quest_id:null,quest_node_id:null}),w.invalidateQueries({queryKey:["lab-agents",i]})}catch{const v=ee.get(l),o=v?Ce(v):l;x({type:"error",title:"Unable to remove agent",description:`Failed to remove ${o} from this quest.`})}finally{k(!1)}}},[x,ee,i,w,m,a]),nt=r.useCallback(l=>{C(l),typeof window<"u"&&window.setTimeout(()=>C(null),1200)},[]),rt=r.useCallback(l=>{if(l&&R.current){if(Q(!1),B)Y.scrollToIndex(l.index,{align:"center"});else{const g=R.current?.querySelector(`[data-group-message-id="${l.id}"]`);g&&g.scrollIntoView({behavior:"smooth",block:"center"})}nt(l.id)}},[nt,M,Y,B]);r.useEffect(()=>{y.trim()&&ve.length!==0&&rt(ve[0])},[ve,rt,y]);const ht=se?Ye.createPortal(s.jsx(ss,{label:"Group",entities:oe,emptyEntitiesLabel:Ze,searchValue:y,onSearchChange:h,searchResults:ve,onSearchSelect:rt,searchPlaceholder:"Search group chat",questId:m,quests:t,onQuestChange:f,canManageRoster:!a&&!!m,rosterBusy:q,availableAgents:Xe,onAddAgents:we,onRemoveAgent:st}),se):null,pt=T&&typeof document<"u"?Ye.createPortal(s.jsx("div",{className:"lab-copilot-context-menu",style:{left:T.x,top:T.y},children:s.jsx("button",{type:"button",onClick:tt,disabled:!xe,children:"Open direct session"})}),document.body):null,lt=l=>{const g=ke(l),v=g.content,o=l.type==="text_delta"&&v.status==="in_progress",b=K===l.id,j=ut(g),Z=Se(g),Oe=j==="assistant"?es(v?.timestamp):"",Fe=ot(g),ye=typeof Z?.sender_label=="string"?Z.sender_label:typeof Z?.agent_label=="string"?Z.agent_label:null,re=typeof Z?.target_label=="string"?Z.target_label:null,Pe=typeof Z?.reply_state=="string"?Z.reply_state:null,pe=Ks(d,Pe),gt=typeof Z?.proposal_id=="string"?Z.proposal_id:null,bt=Zt(Z?.selection_context&&typeof Z.selection_context=="object"?{...Z.selection_context,label:typeof Z.selection_context.branch_name=="string"?Z.selection_context.branch_name:void 0}:null);return s.jsxs("div",{className:Me("rounded-[12px] px-1",b&&"lab-message-highlight"),"data-group-message-id":l.id,children:[ye||re||pe||gt||bt?s.jsxs("div",{className:"mb-2 flex flex-wrap items-center gap-2 px-2",children:[ye||re?s.jsxs("span",{className:"inline-flex items-center rounded-full border border-[var(--lab-border)] bg-[var(--lab-surface)] px-2 py-0.5 text-[10px] font-medium text-[var(--lab-text-secondary)]",children:[ye||d("copilot_group_sender_fallback",void 0,"Agent"),re?` → ${re}`:""]}):null,pe?s.jsx("span",{className:"inline-flex items-center rounded-full border border-[rgba(83,176,174,0.2)] bg-[rgba(83,176,174,0.1)] px-2 py-0.5 text-[10px] font-medium text-[var(--lab-text-secondary)]",children:pe}):null,gt?s.jsxs("span",{className:"inline-flex items-center rounded-full border border-[var(--lab-border)] bg-[var(--lab-background)] px-2 py-0.5 text-[10px] text-[var(--lab-text-secondary)]",children:[d("copilot_group_proposal_badge",void 0,"Proposal")," · ",gt.slice(0,8)]}):null,bt?s.jsx("span",{className:"inline-flex items-center rounded-full border border-[var(--lab-border)] bg-[var(--lab-background)] px-2 py-0.5 text-[10px] text-[var(--lab-text-secondary)]",children:bt}):null]}):null,s.jsx(Qt,{message:g,compact:!0,onAvatarContextMenu:Ne,displayStreaming:o,streamActive:ne.status==="open"||ne.status==="connecting"||ne.status==="reconnecting"}),Fe?s.jsx("div",{className:Me("mt-2 flex w-full",j==="user"?"justify-end":"justify-start"),children:s.jsx("div",{className:"max-w-[85%] rounded-[8px] bg-[rgba(0,0,0,0.06)] px-3 py-2 text-[10px] leading-relaxed text-[var(--text-secondary)]",children:s.jsxs("div",{className:"line-clamp-2",children:[s.jsxs("span",{className:"font-medium text-[var(--text-tertiary)]",children:[Fe.sender,":"]})," ",Fe.content]})})}):null,Oe?s.jsx("div",{className:"lab-message-timestamp",children:Oe}):null]},l.id)},ct=()=>s.jsx("div",{className:"mb-3 flex justify-center",children:s.jsxs("div",{className:Me("inline-flex max-w-full items-center gap-2 rounded-full border px-3 py-1 font-medium","border-[var(--lab-border)] bg-[var(--lab-surface)] text-[var(--lab-text-secondary)]","text-[11px]"),children:[s.jsx("span",{children:ze}),s.jsx("button",{type:"button",onClick:()=>{Q(!1),le()},disabled:O,className:"text-[var(--lab-text-primary)] underline decoration-dotted underline-offset-4 disabled:cursor-not-allowed disabled:opacity-50",children:O?"Loading full history...":"Load full history"})]})});return s.jsxs("div",{className:"flex h-full min-h-0 flex-col",children:[ht,pt,s.jsxs("div",{className:"ai-manus-root ai-manus-copilot ai-manus-embedded flex flex-1 min-h-0 flex-col",children:[s.jsxs("div",{className:"relative flex flex-1 min-h-0 flex-col",children:[s.jsx(Wt,{ref:R,className:"flex-1 min-h-0",onScroll:c,children:s.jsx("div",{className:"flex min-h-full flex-col px-4 py-4",children:m?s.jsxs(s.Fragment,{children:[Qe?s.jsx("div",{className:"mb-3 text-center text-[11px] text-[var(--text-tertiary)]",children:Qe}):null,B?s.jsx("div",{style:{height:Y.getTotalSize(),position:"relative"},children:Y.getVirtualItems().map(l=>{if(Ae&&l.index===0)return s.jsx("div",{"data-index":l.index,ref:Y.measureElement,style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${l.start}px)`},children:ct()},l.key);const g=z[l.index-M];return g?s.jsx("div",{"data-index":l.index,ref:Y.measureElement,style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${l.start}px)`},children:s.jsx("div",{className:"pb-3",children:lt(g)})},l.key):null})}):s.jsxs("div",{className:"flex flex-col",children:[Ae?ct():null,z.map(l=>lt(l))]})]}):s.jsx("div",{className:"flex flex-1 items-center justify-center text-[12px] text-[var(--text-tertiary)]",children:fe})})}),Re?s.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center pointer-events-none",children:s.jsxs("div",{className:Me("flex items-center gap-2 rounded-full border px-3 py-1.5 text-[11px] font-medium shadow-sm","border-[var(--lab-border)] bg-[var(--lab-surface)] text-[var(--lab-text-secondary)]"),children:[s.jsx(Vt,{className:"h-4 w-4 animate-spin"}),s.jsx("span",{children:d("common_loading",void 0,"Loading...")})]})}):null]}),s.jsxs("div",{className:"border-t border-[var(--border-main)] px-4 py-3",children:[s.jsx(Jt,{selection:U,proposal:P?{proposal_id:P.proposal_id,action_type:P.action_type,status:P.status}:null,onClearSelection:()=>ie(null),onClearProposal:()=>te(null),selectionPrefix:d("copilot_selection_chip",void 0,"Ref"),proposalPrefix:d("copilot_proposal_chip",void 0,"Proposal")}),s.jsx(ks,{value:_,onChange:S,onSubmit:$e,isRunning:!1,mentionables:p,mentionEnabled:!a,includeDefaultAgent:!1,lockLeadingMentionSpace:!0,attachments:E,onAttachmentsChange:D,attachmentsEnabled:!1,readOnly:a,inputDisabled:!m,rows:2,placeholder:m?a?d("copilot_group_placeholder_offline",void 0,"Your execution server is offline. Messages will be sent once it reconnects."):d("copilot_group_placeholder",void 0,"Message @ALL or a quest agent"):fe,compact:!0,containerClassName:"pb-0"})]})]})]})}function sn({message:i,readOnly:u,liked:t,busy:n,likeUsers:e,comments:a,onToggleLike:f,onCommentSubmit:d,onAvatarContextMenu:x}){const w=Se(i),_=w,S=typeof w?.moment_id=="string"?w.moment_id:"",E=mt(i),D=Gs(w?.moment_media),q=w?.sender_name||ft(i),k=w?.sender_label||w?.agent_label,K=w?.sender_avatar_url||w?.agent_logo||"",C=w?.sender_avatar_color||w?.agent_avatar_color||"",T=es(en(i)),I=E?Ls(E):"",[A,R]=r.useState(!1),[N,Q]=r.useState("");r.useEffect(()=>{R(!1),Q("")},[S]);const W=h=>{if(typeof h=="number"&&Number.isFinite(h))return h;if(typeof h=="string"){const m=Number(h);if(Number.isFinite(m))return m}return 0},$=W(w?.moment_like_count),U=W(w?.moment_comment_count),P=q?.trim().slice(0,1).toUpperCase()||"?",ie=(()=>{const m=(k||q||"Agent").trim();return m?m.startsWith("@")?m:`@${m}`:"@Agent"})(),te=Zs(Ys(_?.moment_like_users??_?.moment_likes??_?.like_users??_?.likes??_?.moment_reactions??null),e.map(h=>({name:h}))),V=Js(Xs(_?.moment_comments??_?.moment_comment_list??_?.comments??_?.moment_comment_items??_?.comment_items??null),a),J=te.length>0||V.length>0,X=async()=>{!S||u||n||await f(S,!t)},G=()=>{u||R(h=>!h)},se=async()=>{if(!S||u||n)return;const h=N.trim();if(!h)return;await d(S,h)&&(Q(""),R(!1))},y=h=>{h.key==="Enter"&&!h.shiftKey&&(h.preventDefault(),se())};return s.jsxs("div",{className:"lab-moment-card",children:[s.jsxs("div",{className:"lab-avatar lab-avatar-sm lab-moment-avatar",onContextMenu:h=>x?.(h,i),children:[s.jsx("span",{className:"lab-avatar-ring",style:C?{borderColor:C}:void 0}),K?s.jsx("img",{src:K,alt:q}):s.jsx("span",{children:P})]}),s.jsxs("div",{className:"lab-moment-main",children:[s.jsx("div",{className:"lab-moment-name",children:ie}),I?s.jsx("div",{className:"lab-moment-content",dangerouslySetInnerHTML:{__html:I}}):null,D.length?s.jsx("div",{className:"lab-moment-media",children:D.map((h,m)=>s.jsx("div",{className:"lab-moment-media-item",children:s.jsx("img",{src:h.url,alt:h.label||`Moment media ${m+1}`})},`${h.url}-${m}`))}):null,s.jsxs("div",{className:"lab-moment-meta-row",children:[T?s.jsx("div",{className:"lab-moment-timestamp",children:T}):s.jsx("div",{}),s.jsxs("div",{className:"lab-moment-actions",children:[s.jsxs("button",{type:"button",className:Me("lab-moment-action",t&&"is-active"),onClick:X,disabled:u||n,"aria-label":"Like moment",children:[s.jsx(jt,{size:14}),s.jsx("span",{children:$})]}),s.jsxs("button",{type:"button",className:"lab-moment-action",onClick:G,disabled:u||n,"aria-label":"Comment on moment",children:[s.jsx(Rs,{size:14}),s.jsx("span",{children:U})]})]})]}),J?s.jsxs("div",{className:"lab-moment-reactions",children:[te.length?s.jsxs("div",{className:"lab-moment-like-row",children:[s.jsx(jt,{size:12}),s.jsx("span",{className:"lab-moment-like-names",children:te.join(", ")})]}):null,V.map((h,m)=>s.jsxs("div",{className:"lab-moment-comment-row",children:[s.jsx("span",{className:"lab-moment-comment-name",children:h.name}),s.jsx("span",{className:"lab-moment-comment-sep",children:":"}),s.jsx("span",{className:"lab-moment-comment-text",children:h.content})]},`${h.name}-${m}`))]}):null,A?s.jsxs("div",{className:"lab-moment-comment",children:[s.jsx("textarea",{value:N,onChange:h=>Q(h.target.value),onKeyDown:y,placeholder:"Write a comment",className:"lab-moment-comment-input",rows:2,disabled:u||n}),s.jsxs("div",{className:"lab-moment-comment-actions",children:[s.jsx("button",{type:"button",className:"lab-moment-action lab-moment-action-secondary",onClick:()=>R(!1),disabled:u||n,children:"Cancel"}),s.jsx("button",{type:"button",className:"lab-moment-action lab-moment-action-primary",onClick:se,disabled:u||n||!N.trim(),children:"Send"})]})]}):null]})]})}function nn({projectId:i,agents:u,templatesById:t,readOnly:n,quest:e,quests:a,onQuestChange:f}){const{addToast:d}=Ct(),x=St(),[w,_]=r.useState(!1),[S,E]=r.useState(new Set),[D,q]=r.useState({}),[k,K]=r.useState({}),[C,T]=r.useState({}),[I,A]=r.useState(null),R=r.useRef(null),N=r.useRef(null),[Q,W]=r.useState(null),[$,U]=r.useState(!0),P=H(c=>c.setMode),ie=H(c=>c.setActiveAgent),te=We(c=>c.setSessionIdForSurface),V=Bt(c=>c.user),J=r.useMemo(()=>((V?.username||V?.email||V?.id||"You")?.trim?.()??"")||"You",[V?.email,V?.id,V?.username]),X=Ht(),[G,se]=r.useState(""),y=r.useMemo(()=>new Map(u.map(c=>[c.instance_id,c])),[u]),h=e?.quest_id??null,{messages:m,connection:F,historyTruncated:z,historyLimit:ne,historyLoadingFull:de,historyLoading:ge,hasLoadedOnce:je,loadFullHistory:O}=Yt({projectId:i,questId:h,surface:"friends",enabled:!!h}),Ee=r.useMemo(()=>h?u.filter(c=>c.active_quest_id===h).map(c=>{const M=c.template_id?t.get(c.template_id)??null:null;return{id:c.instance_id,name:Ce(c),avatar:Ve(c,M)}}):[],[u,h,t]),me=r.useMemo(()=>h?u.filter(c=>c.active_quest_id!==h).map(c=>{const M=c.template_id?t.get(c.template_id)??null:null;return{id:c.instance_id,name:Ce(c),avatar:Ve(c,M)}}):[],[u,h,t]),le=h?"No agents assigned to this quest yet.":"Select a quest to see its agents.",ee=r.useMemo(()=>h?"No friend updates yet for this quest.":"Select a quest to view friend updates.",[h]),ce=r.useMemo(()=>F.status==="rate_limited"?"Rate limited. Retrying...":F.status==="reconnecting"?"Reconnecting...":F.status==="error"?F.error||"Connection error":null,[F.error,F.status]),ue=z&&!!h,be=!!h&&ge&&m.length===0&&!je,p=typeof ne=="number"&&ne>0?`Showing latest ${ne} messages.`:"Showing recent messages.";r.useEffect(()=>{if(!I)return;const c=()=>A(null),M=L=>{L.key==="Escape"&&A(null)};return window.addEventListener("click",c),window.addEventListener("contextmenu",c),window.addEventListener("keydown",M),window.addEventListener("scroll",c,!0),()=>{window.removeEventListener("click",c),window.removeEventListener("contextmenu",c),window.removeEventListener("keydown",M),window.removeEventListener("scroll",c,!0)}},[I]),r.useEffect(()=>{se(""),W(null),N.current=null,U(!0),E(new Set),q({}),K({}),T({})},[h]),r.useEffect(()=>{const c=m[m.length-1];if(c?.id){if(!N.current){N.current=c.id;return}if(c.id!==N.current){N.current=c.id,W(c.id);const M=window.setTimeout(()=>W(null),1200);return()=>window.clearTimeout(M)}}},[m]);const oe=r.useMemo(()=>{const c=new Map;return m.forEach(M=>{const L=mt(M);L&&c.set(M.id,L)}),c},[m]),Xe=r.useMemo(()=>new Map(m.map(c=>[c.id,c])),[m]),fe=r.useMemo(()=>m.length?[...m].reverse():[],[m]),Ze=r.useCallback((c,M)=>{const L=Se(M),B=L?.agent_instance_id,Y=L?.session_id;!B&&!Y||A({messageId:M.id,x:c.clientX,y:c.clientY})},[]),Qe=I?Xe.get(I.messageId)??null:null,Ae=Qe?Se(Qe):null,Re=Ae?.agent_instance_id??null,ze=typeof Ae?.session_id=="string"?Ae.session_id:null,_e=!!Re,Ue=r.useCallback(()=>{Re&&(ie(Re),ze&&te(i,"lab-direct",ze),P("direct"),A(null))},[Re,ze,i,ie,P,te]),De=fe.length+(ue?1:0),$e=ue?fe.length:-1,Ie=De>20,ae=Kt({count:De,getScrollElement:()=>R.current,estimateSize:c=>ue&&c===$e?56:180,getItemKey:c=>ue&&c===$e?"lab-friends-history-banner":fe[c]?.id??`lab-friends-${c}`,overscan:6}),ke=r.useMemo(()=>{const c=G.trim().toLowerCase();if(!c)return[];const M=[];return fe.forEach((L,B)=>{const Y=oe.get(L.id)??"";if(!Y||!Y.toLowerCase().includes(c))return;const ve=ft(L);M.push({id:L.id,index:B,title:ve,excerpt:ts(Y,c)})}),M},[fe,oe,G]),Ke=r.useCallback(async c=>{if(!(!h||n||c.length===0)){_(!0);try{const M=await Promise.allSettled(c.map(B=>dt(i,B,{quest_id:h,quest_node_id:null}))),L=[];if(M.forEach((B,Y)=>{B.status!=="fulfilled"&&L.push(c[Y])}),L.length){const B=L.map(Y=>{const ve=y.get(Y);return ve?Ce(ve):Y});d({type:"error",title:"Unable to add agents",description:`Failed to add: ${B.join(", ")}`})}x.invalidateQueries({queryKey:["lab-agents",i]})}finally{_(!1)}}},[d,y,i,x,h,n]),Je=r.useCallback(async c=>{if(!(!h||n)){_(!0);try{await dt(i,c,{quest_id:null,quest_node_id:null}),x.invalidateQueries({queryKey:["lab-agents",i]})}catch{const L=y.get(c),B=L?Ce(L):c;d({type:"error",title:"Unable to remove agent",description:`Failed to remove ${B} from this quest.`})}finally{_(!1)}}},[d,y,i,x,h,n]),he=r.useCallback((c,M)=>{E(L=>{const B=new Set(L);return M?B.add(c):B.delete(c),B})},[]),et=r.useCallback(async(c,M)=>{if(!(!c||n)){he(c,!0);try{M?await os(i,c):await rs(i,c),q(L=>({...L,[c]:M})),K(L=>{const B=L[c]??[],Y=new Set(B);return M?Y.add(J):Y.delete(J),{...L,[c]:Array.from(Y)}})}catch{d({type:"error",title:"Unable to update like",description:"Please try again once your connection stabilizes."})}finally{he(c,!1)}}},[d,J,i,n,he]),ot=r.useCallback(async(c,M)=>{if(!c||n)return!1;he(c,!0);try{return await as(i,c,{content:M}),T(L=>{const B=L[c]??[],Y={name:J,content:M};return{...L,[c]:[...B,Y]}}),!0}catch{return d({type:"error",title:"Unable to send comment",description:"Please try again once your connection stabilizes."}),!1}finally{he(c,!1)}},[d,J,i,n,he]),Ne=r.useCallback(c=>{W(c),typeof window<"u"&&window.setTimeout(()=>W(null),1200)},[]),Te=r.useCallback(c=>{if(c&&R.current){if(Ie)ae.scrollToIndex(c.index,{align:"center"});else{const M=R.current?.querySelector(`[data-friend-post-id="${c.id}"]`);M&&M.scrollIntoView({behavior:"smooth",block:"center"})}Ne(c.id)}},[Ne,ae,Ie]);r.useEffect(()=>{G.trim()&&ke.length!==0&&Te(ke[0])},[ke,Te,G]);const Le=X?Ye.createPortal(s.jsx(ss,{label:"Friends",entities:Ee,emptyEntitiesLabel:le,searchValue:G,onSearchChange:se,searchResults:ke,onSearchSelect:Te,searchPlaceholder:"Search friend updates",questId:h,quests:a,onQuestChange:f,canManageRoster:!n&&!!h,rosterBusy:w,availableAgents:me,onAddAgents:Ke,onRemoveAgent:Je}),X):null,qe=I&&typeof document<"u"?Ye.createPortal(s.jsx("div",{className:"lab-copilot-context-menu",style:{left:I.x,top:I.y},children:s.jsx("button",{type:"button",onClick:Ue,disabled:!_e,children:"Open direct session"})}),document.body):null,Be=r.useCallback(c=>{const M=c.currentTarget,L=It(M);U(B=>B===L?B:L)},[It]),xe=c=>{const M=c.content,L=Se(c),B=c.type==="text_delta"&&M.status==="in_progress",Y=Q===c.id,ve=L?.message_kind==="moment",we=typeof L?.moment_id=="string"?L.moment_id:"",st=we?k[we]??[]:[],nt=we?C[we]??[]:[];return s.jsx("div",{className:Me("rounded-[12px] px-1",Y&&"lab-message-highlight"),"data-friend-post-id":c.id,children:ve?s.jsx(sn,{message:c,readOnly:n,liked:we?!!D[we]:!1,busy:we?S.has(we):!1,likeUsers:st,comments:nt,onToggleLike:et,onCommentSubmit:ot,onAvatarContextMenu:Ze}):s.jsx(Qt,{message:c,compact:!0,onAvatarContextMenu:Ze,displayStreaming:B,streamActive:F.status==="open"||F.status==="connecting"||F.status==="reconnecting"})},c.id)},tt=()=>s.jsx("div",{className:"mb-4 flex justify-center",children:s.jsxs("div",{className:Me("inline-flex max-w-full items-center gap-2 rounded-full border px-3 py-1 font-medium","border-[var(--lab-border)] bg-[var(--lab-surface)] text-[var(--lab-text-secondary)]","text-[11px]"),children:[s.jsx("span",{children:p}),s.jsx("button",{type:"button",onClick:()=>{U(!1),O()},disabled:de,className:"text-[var(--lab-text-primary)] underline decoration-dotted underline-offset-4 disabled:cursor-not-allowed disabled:opacity-50",children:de?"Loading full history...":"Load full history"})]})}),Ge=r.useCallback(()=>{const c=R.current;c&&(typeof c.scrollTo=="function"?c.scrollTo({top:0,behavior:"auto"}):c.scrollTop=0)},[]);return r.useEffect(()=>{!h||m.length===0||$&&window.requestAnimationFrame(()=>Ge())},[$,m,h,Ge]),s.jsxs("div",{className:"flex h-full min-h-0 flex-col",children:[Le,qe,s.jsx("div",{className:"ai-manus-root ai-manus-copilot ai-manus-embedded flex flex-1 min-h-0 flex-col",children:s.jsxs("div",{className:"relative flex flex-1 min-h-0 flex-col",children:[s.jsx(Wt,{ref:R,className:"flex-1 min-h-0",onScroll:Be,children:s.jsxs("div",{className:"px-5 py-6",children:[ce?s.jsx("div",{className:"mb-3 text-center text-[11px] text-[var(--text-tertiary)]",children:ce}):null,h?m.length===0?s.jsx("div",{className:"flex min-h-[200px] items-center justify-center text-[12px] text-[var(--text-tertiary)]",children:ee}):Ie?s.jsx("div",{style:{height:ae.getTotalSize(),position:"relative"},children:ae.getVirtualItems().map(c=>{if(ue&&c.index===$e)return s.jsx("div",{"data-index":c.index,ref:ae.measureElement,style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${c.start}px)`},children:tt()},c.key);const M=fe[c.index];return M?s.jsx("div",{"data-index":c.index,ref:ae.measureElement,style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${c.start}px)`},children:s.jsx("div",{className:"pb-5",children:xe(M)})},c.key):null})}):s.jsxs("div",{className:"flex flex-col lab-friends-list",children:[fe.map(c=>xe(c)),ue?tt():null]}):s.jsx("div",{className:"flex min-h-[200px] items-center justify-center text-[12px] text-[var(--text-tertiary)]",children:ee})]})}),be?s.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center pointer-events-none",children:s.jsxs("div",{className:Me("flex items-center gap-2 rounded-full border px-3 py-1.5 text-[11px] font-medium shadow-sm","border-[var(--lab-border)] bg-[var(--lab-surface)] text-[var(--lab-text-secondary)]"),children:[s.jsx(Vt,{className:"h-4 w-4 animate-spin"}),s.jsx("span",{children:"Loading..."})]})}):null]})})]})}export{_n as LabCopilotHeader,wn as default};
@@ -1,22 +0,0 @@
1
- import{y as kt,H as le,j as e,be as ue,bf as ie,K as xt,bg as Jt,u as ke,at as He,aX as rt,a_ as Ye,aU as pt,bh as gt,bi as Zt,bj as It,bk as ea,bl as ta,b as ne,bm as We,bn as Xe,bo as Mt,bp as Bt,bq as Rt,br as Dt,aw as Ve,l as aa,aQ as ut,ao as Ue,aR as yt,bs as sa,J as Fe,R as Oe,bt as wt,bu as na,b1 as ia,O as at,bv as _t,bw as Nt,bx as ra,by as la,bz as oa,bA as ca,bB as ua,bC as da,bD as ma,bE as st,bF as va,s as ba,bG as ha,ap as fa,aq as xa,bH as pa,bI as ga,bJ as ya}from"./index-CBNVuWcP.js";import{r as i}from"./plugin-monaco-C8UgLomw.js";import{B as nt}from"./bot-DREQOxzP.js";import"./plugin-notebook-HbW2K-1c.js";import"./plugin-terminal-MXFIPun8.js";/**
2
- * @license lucide-react v0.511.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const wa=[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]],_a=kt("inbox",wa);/**
7
- * @license lucide-react v0.511.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const Na=[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]],ja=kt("layout-dashboard",Na),Ee=t=>{const a=String(t||"").trim().replace(/[_-]+/g," ");return a?a.replace(/\b\w/g,s=>s.toUpperCase()):"N/A"},Sa=t=>{try{return JSON.stringify(t,null,2)}catch{return String(t)}},qa=t=>!t||typeof t!="object"||Array.isArray(t)?null:t,Ea=t=>typeof t=="string"?t.trim()||null:typeof t=="number"||typeof t=="boolean"?String(t):null;function Ce({label:t,value:a}){return e.jsxs("div",{className:"rounded-[14px] border border-[var(--lab-border)] bg-[var(--lab-background)] px-3 py-2.5",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.12em] text-[var(--lab-text-secondary)]",children:t}),e.jsx("div",{className:"mt-1 text-sm text-[var(--lab-text-primary)]",children:a})]})}function Ca({projectId:t,questId:a,trace:s,isLoading:u,payloadJson:n,payloadTruncated:r}){const f=s?.payload_json||qa(n)?.payload||n||null,w=[...s?.actions||[]].reverse().find(c=>c.artifact_id||c.head_commit)||null,x=s?.head_commit||w?.head_commit||null,p=s?.artifact_kind||w?.artifact_kind||null,j=s?.artifact_id||w?.artifact_id||null,_=le({queryKey:["lab-trace-commit",a,x],queryFn:()=>xt.gitCommit(a,x),enabled:!!(a&&x),staleTime:15e3}),b=i.useMemo(()=>{const c=[...s?.changed_files||[]].filter(Boolean),g=_.data?.files?.map(G=>G.path).filter(Boolean)||[],K=Object.values(s?.paths_map||{}).map(G=>Ea(G)).filter(G=>!!(G&&!G.startsWith("/")));return[...new Set([...c,...g,...K])]},[_.data?.files,s?.changed_files,s?.paths_map]),[R,H]=i.useState(null);i.useEffect(()=>{if(!b.length){H(null);return}(!R||!b.includes(R))&&H(b[0]||null)},[b,R]);const y=le({queryKey:["lab-trace-commit-file",a,x,R],queryFn:()=>xt.gitCommitFile(a,x,R),enabled:!!(a&&x&&R),staleTime:15e3});return u&&!s?e.jsxs("div",{className:"space-y-3",children:[e.jsx(ue,{className:"h-24 w-full rounded-[18px]"}),e.jsx(ue,{className:"h-20 w-full rounded-[18px]"}),e.jsx(ue,{className:"h-32 w-full rounded-[18px]"})]}):s?e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"rounded-[18px] border border-[var(--lab-border)] bg-[var(--lab-surface)] px-4 py-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(ie,{variant:"outline",children:Ee(s.selection_type)}),s.stage_title?e.jsx(ie,{variant:"outline",children:s.stage_title}):null,s.status?e.jsx(ie,{variant:"outline",children:Ee(s.status)}):null,p?e.jsx(ie,{variant:"outline",children:Ee(p)}):null]}),e.jsx("div",{className:"mt-3 text-sm font-semibold text-[var(--lab-text-primary)]",children:s.title}),e.jsx("div",{className:"mt-1 text-xs leading-5 text-[var(--lab-text-secondary)]",children:s.summary||"No normalized summary is available for this node."})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsx(Ce,{label:"Branch",value:s.branch_name||"N/A"}),e.jsx(Ce,{label:"Stage",value:s.stage_title||"N/A"}),e.jsx(Ce,{label:"Artifact",value:j||"N/A"}),e.jsx(Ce,{label:"Commit",value:x||"N/A"}),e.jsx(Ce,{label:"Actions",value:s.counts?.actions??s.actions.length}),e.jsx(Ce,{label:"Updated",value:s.updated_at||"N/A"})]}),f?e.jsxs("div",{className:"rounded-[18px] border border-[var(--lab-border)] bg-[var(--lab-surface)] px-4 py-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("div",{className:"text-xs font-semibold uppercase tracking-[0.12em] text-[var(--lab-text-secondary)]",children:"Artifact Payload"}),r?e.jsx(ie,{variant:"outline",children:"Truncated"}):null]}),e.jsx("pre",{className:"mt-3 max-h-[280px] overflow-auto whitespace-pre-wrap rounded-[14px] bg-[var(--lab-background)] p-3 text-[11px] leading-5 text-[var(--lab-text-primary)]",children:Sa(f)})]}):null,x?e.jsxs("div",{className:"rounded-[18px] border border-[var(--lab-border)] bg-[var(--lab-surface)] px-4 py-4",children:[e.jsx("div",{className:"text-xs font-semibold uppercase tracking-[0.12em] text-[var(--lab-text-secondary)]",children:"Commit"}),_.isLoading?e.jsx(ue,{className:"mt-3 h-20 w-full rounded-[14px]"}):_.data?e.jsxs("div",{className:"mt-3 space-y-2 text-xs text-[var(--lab-text-secondary)]",children:[e.jsx("div",{className:"text-sm font-semibold text-[var(--lab-text-primary)]",children:_.data.subject}),e.jsxs("div",{children:[_.data.short_sha," · ",_.data.author_name||"Unknown author"]}),e.jsx("div",{children:_.data.authored_at||"Unknown time"}),e.jsxs("div",{children:[_.data.file_count||0," files · +",_.data.stats?.added||0," / -",_.data.stats?.removed||0]})]}):e.jsx("div",{className:"mt-3 text-sm text-[var(--lab-text-secondary)]",children:"Commit metadata is unavailable."})]}):null,b.length?e.jsxs("div",{className:"rounded-[18px] border border-[var(--lab-border)] bg-[var(--lab-surface)] px-4 py-4",children:[e.jsx("div",{className:"text-xs font-semibold uppercase tracking-[0.12em] text-[var(--lab-text-secondary)]",children:"Changed Files"}),e.jsx("div",{className:"mt-3 flex flex-wrap gap-2",children:b.slice(0,12).map(c=>e.jsx("button",{type:"button",className:`rounded-full border px-2.5 py-1 text-[11px] ${R===c?"border-[var(--lab-accent-strong)] bg-[rgba(64,113,175,0.1)] text-[var(--lab-text-primary)]":"border-[var(--lab-border)] bg-[var(--lab-background)] text-[var(--lab-text-secondary)]"}`,onClick:()=>H(c),children:c},c))}),R?e.jsxs("div",{className:"mt-3",children:[e.jsx("div",{className:"text-xs font-semibold text-[var(--lab-text-primary)]",children:R}),y.isLoading?e.jsx(ue,{className:"mt-2 h-36 w-full rounded-[14px]"}):y.data?.lines?.length?e.jsx("pre",{className:"mt-2 max-h-[320px] overflow-auto whitespace-pre-wrap rounded-[14px] bg-[var(--lab-background)] p-3 text-[11px] leading-5 text-[var(--lab-text-primary)]",children:y.data.lines.join(`
12
- `)}):e.jsx("div",{className:"mt-2 text-sm text-[var(--lab-text-secondary)]",children:t&&a?"Preview unavailable for this file.":"Preview unavailable."})]}):null]}):null,e.jsxs("div",{className:"rounded-[18px] border border-[var(--lab-border)] bg-[var(--lab-surface)] px-4 py-4",children:[e.jsx("div",{className:"text-xs font-semibold uppercase tracking-[0.12em] text-[var(--lab-text-secondary)]",children:"Trace Actions"}),e.jsx("div",{className:"mt-3 space-y-3",children:s.actions.length?s.actions.map(c=>e.jsxs("div",{className:"rounded-[14px] border border-[var(--lab-border)] bg-[var(--lab-background)] px-3 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("div",{className:"text-sm font-semibold text-[var(--lab-text-primary)]",children:c.title||c.tool_name||c.raw_event_type||c.kind||c.action_id}),c.kind?e.jsx(ie,{variant:"outline",children:Ee(c.kind)}):null,c.status?e.jsx(ie,{variant:"outline",children:Ee(c.status)}):null,c.artifact_kind?e.jsx(ie,{variant:"outline",children:Ee(c.artifact_kind)}):null]}),e.jsx("div",{className:"mt-1 text-[11px] text-[var(--lab-text-secondary)]",children:c.created_at||"N/A"}),c.summary?e.jsx("div",{className:"mt-2 text-xs leading-5 text-[var(--lab-text-secondary)]",children:c.summary}):null,c.head_commit?e.jsxs("div",{className:"mt-2 text-xs text-[var(--lab-text-secondary)]",children:["Commit: ",e.jsx("span",{className:"font-semibold text-[var(--lab-text-primary)]",children:c.head_commit})]}):null,c.tool_name?e.jsxs("div",{className:"mt-2 text-xs text-[var(--lab-text-secondary)]",children:["Tool: ",e.jsx("span",{className:"font-semibold text-[var(--lab-text-primary)]",children:c.tool_name})]}):null,c.mcp_server||c.mcp_tool?e.jsxs("div",{className:"mt-2 text-xs text-[var(--lab-text-secondary)]",children:["MCP:"," ",e.jsxs("span",{className:"font-semibold text-[var(--lab-text-primary)]",children:[c.mcp_server||"unknown",c.mcp_tool?`.${c.mcp_tool}`:""]})]}):null,c.args?e.jsx("pre",{className:"mt-2 max-h-36 overflow-auto whitespace-pre-wrap rounded-[12px] bg-[rgba(15,23,42,0.04)] p-2 text-[11px] leading-5 text-[var(--lab-text-primary)]",children:c.args}):null,c.output?e.jsx("pre",{className:"mt-2 max-h-40 overflow-auto whitespace-pre-wrap rounded-[12px] bg-[rgba(15,23,42,0.04)] p-2 text-[11px] leading-5 text-[var(--lab-text-primary)]",children:c.output}):null]},c.action_id)):e.jsx("div",{className:"text-sm text-[var(--lab-text-secondary)]",children:"No action records yet."})})]})]}):e.jsx("div",{className:"rounded-[18px] border border-[var(--lab-border)] bg-[var(--lab-surface)] px-4 py-4 text-sm text-[var(--lab-text-secondary)]",children:"No trace is attached to this node yet."})}const lt="ds:lab:focus",ot=t=>{typeof window>"u"||window.dispatchEvent(new CustomEvent(lt,{detail:t}))},jt=t=>"kind"in t?t.kind:"quest",Aa=(t,a)=>{const s=jt(t),u=jt(a);if(s!==u)return!1;if(s==="quest"&&u==="quest"){const n=t,r=a;return n.questId===r.questId&&n.title===r.title&&n.status===r.status&&n.piState===r.piState&&n.baselineBound===r.baselineBound&&n.hasCliBinding===r.hasCliBinding&&n.headBranch===r.headBranch&&n.lastEventAt===r.lastEventAt&&n.pendingQuestionCount===r.pendingQuestionCount&&n.piAgentName===r.piAgentName&&n.piAgentLogo===r.piAgentLogo&&n.piAgentFrameColor===r.piAgentFrameColor&&n.createdAt===r.createdAt&&n.isActive===r.isActive}if(s==="agent"&&u==="agent"){const n=t,r=a;return n.questId===r.questId&&n.agentId===r.agentId&&n.name===r.name&&n.avatar===r.avatar&&n.avatarColor===r.avatarColor&&n.statusTone===r.statusTone&&n.statusState===r.statusState&&n.statusLabel===r.statusLabel}if(s==="pi"&&u==="pi"){const n=t,r=a;return n.agentId===r.agentId&&n.name===r.name&&n.avatar===r.avatar&&n.avatarColor===r.avatarColor&&n.statusTone===r.statusTone&&n.statusState===r.statusState&&n.statusLabel===r.statusLabel}if(s==="pending"&&u==="pending"){const n=t,r=a;return n.count===r.count}return!1},Je=2,W=14,oe=44,Qe=oe+12,La=420,Ta=520,ct=420,Kt=600,Pa=t=>{if(typeof window>"u")return null;try{const a=window.localStorage.getItem(`ds:lab:overview_layout:v${Je}:${t}`);if(!a)return null;const s=JSON.parse(a);return s?.version!==Je?null:s}catch{return null}},ka=(t,a)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(`ds:lab:overview_layout:v${Je}:${t}`,JSON.stringify(a))}catch{}},Ma=(t,a)=>{const r=t%3,f=Math.floor(t/3);return{x:a.x+r*260,y:a.y+f*170}},St=2,Ba=494,Ra=221,Da=340,Ka=150,$e=28,qt=28,Ft=0,Fa=40,Oa=220,Qa=(t,a)=>{const s=Math.max(1,Math.ceil(t/St)),u=(St-1)*Ba+Da,n=(s-1)*Ra+a,r=u+$e*2,f=n+$e*2+qt,w=Ft-u/2-$e,x=Fa-$e-qt;return{x:w,y:x,width:r,height:f}},_e=(t,a,s)=>Math.min(s,Math.max(a,t)),$a=(t,a)=>!(t.x+t.width<=a.x||a.x+a.width<=t.x||t.y+t.height<=a.y||a.y+a.height<=t.y),Et=.5,Ct=(t,a)=>{const s=Number.isFinite(t.x)?t.x:a.x,u=Number.isFinite(t.y)?t.y:a.y;return{x:s,y:u}},ze=(t,a)=>Math.abs(t.x-a.x)>Et||Math.abs(t.y-a.y)>Et,At=(t,a,s)=>{const u=W,n=Math.max(W,a.width-oe-W),r=W,f=Math.max(W,a.height-oe-W),w=_e(t.x,u,n),x=_e(t.y,r,f),j=[{edge:"left",dist:Math.abs(w-u)},{edge:"right",dist:Math.abs(w-n)},{edge:"top",dist:Math.abs(x-r)},{edge:"bottom",dist:Math.abs(x-f)}].sort((y,c)=>y.dist-c.dist)[0]?.edge??"left",_=[],b=(y,c)=>{_.push({x:_e(y,u,n),y:_e(c,r,f)})};if(j==="left"||j==="right"){const y=j==="left"?u:n;b(y,x),b(y,x+Qe),b(y,x-Qe),b(j==="left"?n:u,x)}else{const y=j==="top"?r:f;b(w,y),b(w+Qe,y),b(w-Qe,y),b(w,j==="top"?f:r)}b(u,r),b(n,r),b(u,f),b(n,f);const R=new Set,H=_.filter(y=>{const c=`${y.x}:${y.y}`;return R.has(c)?!1:(R.add(c),!0)});for(const y of H){const c={x:y.x,y:y.y,width:oe,height:oe};if(!s.some(g=>$a(c,g)))return y}return H[0]??{x:u,y:r}},Lt=(t,a,s)=>{if(a)return{width:oe,height:oe};const u=t==="action"?ct:La,n=t==="action"?Kt:Ta;return{width:Math.min(u,Math.max(oe,s.width-24)),height:Math.min(n,Math.max(oe,s.height-24))}},Tt=(t,a)=>({x:Number.isFinite(t?.x)?Number(t?.x):a.x,y:Number.isFinite(t?.y)?Number(t?.y):a.y,collapsed:typeof t?.collapsed=="boolean"?t.collapsed:a.collapsed}),Ot=i.createContext(null),za=({data:t})=>{const{t:a}=ke("lab"),s=t,u=s.status?String(s.status).toLowerCase():null,n=s.piState?String(s.piState).toLowerCase():null,r=!!s.baselineBound,f=s.headBranch?.trim()||"main",w=!!s.hasCliBinding,x=Math.max(0,Number(s.pendingQuestionCount??0)),p=x>0,j=s.lastEventAt?Ve(s.lastEventAt):a("overview_last_event_none",void 0,"No event yet");return e.jsxs("div",{className:ne("lab-overview-quest-node",s.isActive&&"is-active",u?`is-${u}`:null),children:[e.jsx(We,{type:"target",position:Xe.Left,className:"lab-flow-handle"}),e.jsx(We,{type:"source",position:Xe.Right,className:"lab-flow-handle"}),e.jsxs("div",{className:"lab-overview-quest-node__title-row",children:[e.jsx("div",{className:"lab-overview-quest-node__title",children:s.title||"Quest"}),s.piAgentName?e.jsxs("button",{type:"button",className:"lab-overview-pi-chip nodrag nopan nowheel",onClick:_=>{_.stopPropagation(),s.onPiClick?.()},"aria-label":a("overview_open_pi_chat",void 0,"Open PI chat"),title:a("overview_open_pi_chat",void 0,"Open PI chat"),children:[e.jsx("span",{className:"lab-overview-pi-avatar",style:s.piAgentFrameColor?{borderColor:s.piAgentFrameColor}:void 0,children:s.piAgentLogo?e.jsx("img",{src:s.piAgentLogo,alt:""}):e.jsx("span",{className:"lab-overview-pi-avatar__fallback",children:a("overview_pi_label")})}),e.jsx("span",{className:"lab-overview-pi-label",children:s.piAgentName})]}):null]}),e.jsxs("div",{className:"lab-overview-quest-node__meta",children:[e.jsx("span",{children:u||a("overview_unknown",void 0,"unknown")}),e.jsxs("span",{children:[a("overview_pi_label",void 0,"PI")," ",n||a("overview_unknown",void 0,"unknown")]})]}),e.jsxs("div",{className:"lab-overview-quest-node__chips",children:[e.jsx("span",{className:"lab-overview-quest-chip",children:r?a("overview_baseline_bound",void 0,"Baseline bound"):a("overview_baseline_pending",void 0,"Baseline pending")}),e.jsx("span",{className:"lab-overview-quest-chip",children:a("overview_head_branch",{branch:f},"Head {branch}")}),e.jsx("span",{className:"lab-overview-quest-chip",children:w?a("overview_cli_bound",void 0,"CLI bound"):a("overview_cli_pending",void 0,"CLI pending")}),p?e.jsx("span",{className:"lab-overview-quest-chip lab-overview-quest-chip--attention",children:a("overview_decision_count",{count:x},"{count} decisions")}):null,typeof s.progressingCount=="number"?e.jsx("span",{className:"lab-overview-quest-chip",children:a("overview_progressing_count",{count:s.progressingCount},"{count} progressing")}):null,typeof s.experimentCount=="number"?e.jsx("span",{className:"lab-overview-quest-chip",children:a("overview_experiment_count",{count:s.experimentCount},"{count} experiments")}):null,typeof s.pushFailedCount=="number"&&s.pushFailedCount>0?e.jsx("span",{className:"lab-overview-quest-chip lab-overview-quest-chip--attention",children:a("overview_push_failed_count",{count:s.pushFailedCount},"{count} push failed")}):null,typeof s.writerConflictCount=="number"&&s.writerConflictCount>0?e.jsx("span",{className:"lab-overview-quest-chip lab-overview-quest-chip--attention",children:a("overview_writer_conflict_count",{count:s.writerConflictCount},"{count} writer conflicts")}):null,s.runtimeLabel?e.jsx("span",{className:"lab-overview-quest-chip",children:s.runtimeLabel}):null,e.jsx("span",{className:"lab-overview-quest-chip",title:s.lastEventAt??void 0,children:a("overview_last_event",{value:j},"Last event {value}")})]})]})},Ga=({data:t})=>{const a=t,s=`lab-status-${a.statusTone}`;return e.jsxs("div",{className:"lab-overview-agent-node",children:[e.jsx(We,{type:"target",position:Xe.Left,className:"lab-flow-handle"}),e.jsxs("div",{className:ne("lab-avatar lab-avatar-sm",s),children:[e.jsx("span",{className:"lab-avatar-ring",style:{borderColor:a.avatarColor}}),e.jsx("img",{src:a.avatar,alt:a.name})]}),e.jsxs("div",{className:"lab-overview-agent-node__meta",children:[e.jsx("div",{className:"lab-overview-agent-node__name",children:a.name}),e.jsxs("div",{className:"lab-overview-agent-node__status",children:[e.jsx("span",{className:ne("lab-status-indicator",a.statusState==="working"&&"lab-status-indicator-working",a.statusState==="waiting"&&"lab-status-indicator-waiting"),"aria-label":a.statusLabel,title:a.statusLabel,children:a.statusState==="waiting"?e.jsx(Mt,{className:"h-3.5 w-3.5","aria-hidden":"true"}):a.statusState==="working"?e.jsx(Bt,{compact:!0,sizePx:16,className:"lab-status-orbit"}):a.statusState==="paused"?e.jsx(Rt,{className:"h-3.5 w-3.5","aria-hidden":"true"}):e.jsx(Dt,{className:"h-3.5 w-3.5","aria-hidden":"true"})}),e.jsx("span",{className:"lab-overview-agent-node__status-label",children:a.statusLabel})]})]})]})},Va=({data:t})=>{const a=t,s=`lab-status-${a.statusTone}`;return e.jsxs("div",{className:"lab-overview-agent-node",children:[e.jsx(We,{type:"source",position:Xe.Right,className:"lab-flow-handle"}),e.jsxs("div",{className:ne("lab-avatar lab-avatar-sm",s),children:[e.jsx("span",{className:"lab-avatar-ring",style:{borderColor:a.avatarColor}}),e.jsx("img",{src:a.avatar,alt:a.name})]}),e.jsxs("div",{className:"lab-overview-agent-node__meta",children:[e.jsx("div",{className:"lab-overview-agent-node__name",children:a.name}),e.jsxs("div",{className:"lab-overview-agent-node__status",children:[e.jsx("span",{className:ne("lab-status-indicator",a.statusState==="working"&&"lab-status-indicator-working",a.statusState==="waiting"&&"lab-status-indicator-waiting"),"aria-label":a.statusLabel,title:a.statusLabel,children:a.statusState==="waiting"?e.jsx(Mt,{className:"h-3.5 w-3.5","aria-hidden":"true"}):a.statusState==="working"?e.jsx(Bt,{compact:!0,sizePx:16,className:"lab-status-orbit"}):a.statusState==="paused"?e.jsx(Rt,{className:"h-3.5 w-3.5","aria-hidden":"true"}):e.jsx(Dt,{className:"h-3.5 w-3.5","aria-hidden":"true"})}),e.jsx("span",{className:"lab-overview-agent-node__status-label",children:a.statusLabel})]})]})]})},Ua=({data:t})=>{const{t:a}=ke("lab"),s=t,u=i.useContext(Ot);return e.jsxs("div",{className:"lab-overview-pending-node","aria-label":a("overview_pending_decisions"),children:[e.jsxs("div",{className:"lab-overview-pending-node__header",children:[e.jsxs("div",{children:[e.jsx("div",{className:"lab-overview-pending-node__title",children:a("overview_pending_decisions")}),e.jsx("div",{className:"lab-overview-pending-node__subtitle",children:s.count===1?a("overview_pending_single"):a("overview_pending_plural",{count:s.count})})]}),e.jsx("span",{className:"lab-overview-pending-node__count","aria-hidden":"true",children:s.count})]}),e.jsx("div",{className:"lab-overview-pending-node__content nodrag nowheel",children:u})]})},Ha={overviewQuest:za,overviewAgent:Ga,overviewPi:Va,overviewPending:Ua};function Pt({boundsRef:t,title:a,icon:s,state:u,zIndex:n,onChange:r,onActivate:f,className:w,children:x}){const p=i.useRef(null),j=i.useRef(null),_=i.useRef(null),b=i.useRef(!1);i.useEffect(()=>()=>{_.current?.(),_.current=null},[]);const R=i.useCallback(c=>{if(c.stopPropagation(),typeof c.button=="number"&&c.button!==0||(f?.(),!j.current))return;const g=t.current;if(!g)return;_.current?.(),b.current=!1;const K=g.getBoundingClientRect(),G=j.current.getBoundingClientRect(),Q=G.left-K.left,$=G.top-K.top;p.current={originX:Q,originY:$,pointerId:c.pointerId,startX:c.clientX,startY:c.clientY,moved:!1},j.current.setPointerCapture(c.pointerId);const Y=h=>{if(!p.current||h.pointerId!==p.current.pointerId)return;const E=h.clientX-p.current.startX,C=h.clientY-p.current.startY;Math.abs(E)+Math.abs(C)>2&&(p.current.moved=!0);const d=Math.max(W,K.width-G.width-W),V=Math.max(W,K.height-G.height-W),B=_e(p.current.originX+E,W,d),O=_e(p.current.originY+C,W,V);r({...u,x:B,y:O})},A=h=>{p.current&&h.pointerId===p.current.pointerId&&(b.current=p.current.moved,p.current=null,_.current?.(),_.current=null)};window.addEventListener("pointermove",Y),window.addEventListener("pointerup",A),window.addEventListener("pointercancel",A),_.current=()=>{window.removeEventListener("pointermove",Y),window.removeEventListener("pointerup",A),window.removeEventListener("pointercancel",A)}},[t,f,r,u]),H=i.useCallback(c=>{c.stopPropagation(),r({...u,collapsed:!0})},[r,u]),y=i.useCallback(()=>{if(b.current){b.current=!1;return}f?.(),r({...u,collapsed:!1})},[f,r,u]);return u.collapsed?e.jsx("button",{ref:j,type:"button",className:ne("lab-floating-orb nowheel nopan",w),style:{transform:`translate3d(${u.x}px, ${u.y}px, 0)`,zIndex:n},onPointerDown:R,onClick:c=>{c.stopPropagation(),y()},"aria-label":`Show ${a}`,children:s}):e.jsxs("div",{ref:j,className:ne("lab-floating-panel nowheel nopan",w),style:{transform:`translate3d(${u.x}px, ${u.y}px, 0)`,zIndex:n},onPointerDown:c=>{c.stopPropagation(),f?.()},children:[e.jsxs("div",{className:"lab-floating-panel__header",onPointerDown:R,children:[e.jsxs("div",{className:"lab-floating-panel__title",children:[e.jsx("span",{className:"lab-floating-panel__icon",children:s}),e.jsx("span",{children:a})]}),e.jsx("button",{type:"button",className:"lab-floating-panel__collapse",onPointerDown:c=>c.stopPropagation(),onClick:H,"aria-label":`Collapse ${a}`,children:e.jsx(aa,{size:16})})]}),e.jsx("div",{className:"lab-floating-panel__content",children:x})]})}function Ya({projectId:t,quests:a,agents:s=[],templates:u=[],graphVm:n,waitingAnswerByAgentId:r=new Map,pendingDecisionCount:f,activeQuestId:w,hasPiAgent:x,piAgent:p,readOnly:j,canvasLevel:_="map",actionPanel:b,overviewPanel:R,showFloatingPanels:H=!0,onOpenCanvas:y,onOpenQuestPiChat:c,onOpenPiChat:g,onSelectAgent:K}){const{t:G}=ke("lab"),Q=i.useRef(null),[$,Y]=i.useState(!1),A=i.useMemo(()=>Pa(t),[t]),h=A?.viewport??null,E=h&&Number.isFinite(h.x)&&Number.isFinite(h.y)&&Number.isFinite(h.zoom)&&h.zoom>=.15&&h.zoom<=3?h:void 0,C=i.useRef(!1),d=i.useRef(!1),V=i.useRef([]),B=i.useRef(A?.viewport??null),O=i.useRef(null),X=i.useRef(2),[z,de]=i.useState({overview:1,action:2}),[D,ce]=i.useState(()=>Tt(A?.panels?.overview,{x:16,y:16,collapsed:!1})),[U,J]=i.useState(()=>Tt(A?.panels?.action,{x:16,y:88,collapsed:!1})),Ne=i.useMemo(()=>{const m=new Map;return n?.quests?.forEach(l=>{m.set(l.questId,l)}),m},[n]),ee=i.useCallback(m=>{X.current+=1;const l=X.current;de(N=>({...N,[m]:l}))},[]),me=i.useCallback(()=>{typeof window>"u"||(O.current&&window.clearTimeout(O.current),O.current=window.setTimeout(()=>{const m={};V.current.forEach(l=>{m[l.id]={x:l.position.x,y:l.position.y}}),ka(t,{version:Je,viewport:B.current,nodes:m,panels:{overview:{x:D.x,y:D.y,collapsed:D.collapsed},action:{x:U.x,y:U.y,collapsed:U.collapsed}}})},450))},[U,D,t]),Z=i.useMemo(()=>Qa(4,Ka),[]),Se=i.useMemo(()=>{const m=Math.round(Z.x+Z.width+140),l=Math.round(Z.y);return{x:m,y:l}},[Z]),M=i.useMemo(()=>{if(typeof f=="number")return Math.max(0,f);let m=0;for(const l of r.values())l&&(m+=1);return m},[f,r]),te=_==="ops",fe=M>0&&!te,Le=te||!fe;i.useLayoutEffect(()=>{const m=Q.current;if(!m)return;const l=m.getBoundingClientRect();J(N=>{const F=Number.isFinite(A?.panels?.action?.x),k=Number.isFinite(A?.panels?.action?.y);if(F||k||N.x!==16||N.y!==88)return N;const v=Math.max(W,l.width-ct-W);return{...N,x:v}})},[A?.panels?.action?.x,A?.panels?.action?.y]),i.useLayoutEffect(()=>{const m=Q.current;if(!m)return;const l=m.getBoundingClientRect(),N=(q,se)=>{const I=Math.max(W,l.width-se.width-W),be=Math.max(W,l.height-se.height-W);return{x:_e(q.x,W,I),y:_e(q.y,W,be)}},F=Lt("overview",D.collapsed,l),k=Lt("action",U.collapsed,l);let v=D;if(!D.collapsed){const q=N(D,F);(q.x!==D.x||q.y!==D.y)&&(v={...D,...q})}let L=U;if(!U.collapsed){const q=N(U,k);(q.x!==U.x||q.y!==U.y)&&(L={...U,...q})}const T=[];if(v.collapsed||T.push({x:v.x,y:v.y,...F}),L.collapsed||T.push({x:L.x,y:L.y,...k}),v.collapsed){const q=Ct(At(v,l,T),v);ze(q,v)&&(v={...v,...q}),T.push({x:v.x,y:v.y,width:oe,height:oe})}if(L.collapsed){const q=Ct(At(L,l,T),L);ze(q,L)&&(L={...L,...q})}(ze(v,D)||v.collapsed!==D.collapsed)&&ce(v),(ze(L,U)||L.collapsed!==U.collapsed)&&J(L)},[U,D,A?.panels?.action?.x,A?.panels?.action?.y]),i.useEffect(()=>{te&&(ee("action"),J(m=>m.collapsed?{...m,collapsed:!1}:m))},[ee,te]);const o=i.useMemo(()=>{if(!fe)return null;const m=ct,l=Kt,N=A?.nodes?.["overview:pending"]??null,F=Math.round(Z.x+Z.width/2-m/2),k=Math.round(Z.y+Z.height+96);return{id:"overview:pending",type:"overviewPending",position:N||{x:F,y:k},draggable:!j,selectable:!j,data:{kind:"pending",count:M},style:{width:m,height:l,zIndex:2}}},[Z,fe,j,M,A?.nodes]),S=i.useMemo(()=>{const m=A?.nodes??{};return a.map((l,N)=>{const F=Ne.get(l.quest_id),k=`quest:${l.quest_id}`,v=m?.[k]??null,L=v||Ma(N,Se),T=F?.summary,q=F?.runtime,se=q&&q.runningAgents>0?G("overview_runtime_running",{count:q.runningAgents},"{count} running"):null;return{id:k,type:"overviewQuest",position:L,draggable:!j,data:{questId:l.quest_id,title:l.title||"Quest",status:l.status??null,piState:l.pi_state??q?.piState??null,baselineBound:F?.governance.formalBaselineState==="confirmed"||l.governance?.formalBaselineState==="confirmed",hasCliBinding:!!l.cli_server_id,headBranch:F?.topology.headBranch??l.git_head_branch??null,lastEventAt:l.last_event_at??null,pendingQuestionCount:Math.max(0,Number(l.pending_question_count??0)),piAgentName:p?.name??null,piAgentLogo:p?.logo??null,piAgentFrameColor:p?.frameColor??null,onPiClick:p?.name?()=>{if(c){c(l.quest_id);return}g?.()}:null,createdAt:l.created_at??null,isActive:l.quest_id===w,progressingCount:T?.progressingCount??void 0,experimentCount:T?.experimentCount??void 0,runtimeLabel:se,pushFailedCount:T?.pushFailedCount??void 0,writerConflictCount:T?.writerConflictCount??void 0}}})},[w,Ne,g,c,p,G,a,j,A?.nodes,Se]),P=i.useMemo(()=>new Map(u.map(m=>[m.template_id,m])),[u]),ae=i.useMemo(()=>{if(!x||!s.length)return null;const m=u.find(je=>je.template_key==="pi")??null,l=(m?s.find(je=>je.template_id===m.template_id):s.find(je=>je.agent_id==="pi"))??null;if(!l)return null;const N=A?.nodes??{},F={x:Ft-Oa/2,y:Z.y+Z.height+48},k=`pi:${l.instance_id}`,v=N?.[k]??F,L=l.template_id?P.get(l.template_id)??null:null,T=He(l)||"PI",q=rt(l,L),se=l.avatar_frame_color?.trim()||Ye(l.instance_id,0),I=typeof l.status=="string"?l.status.toLowerCase():"idle",be=r.get(l.instance_id)??!1,Be=I==="waiting"&&!be,Re=I==="waiting"&&!be?"idle":I,qe=be,Te=!qe&&pt(Re),De=qe?"waiting":Te?"working":gt(Re),bt=qe?"waiting":Te?"working":Be?"paused":"resting",Ze=qe?"Waiting for answer":Te?"Working":Be?"Paused":"Resting";return{id:k,type:"overviewPi",position:v,draggable:!j,data:{kind:"pi",agentId:l.instance_id,name:T,avatar:q,avatarColor:se,statusTone:De,statusState:bt,statusLabel:Ze}}},[s,Z,x,j,A?.nodes,u,P,r]),ve=i.useMemo(()=>{if(!s.length||!S.length)return[];const m=A?.nodes??{},l=new Map(S.map(v=>[v.id,v])),N=new Set(a.map(v=>v.quest_id)),F=new Map;s.forEach(v=>{const L=v.active_quest_id;if(!L||!N.has(L))return;const T=F.get(L)??[];T.push(v),F.set(L,T)});const k=[];return F.forEach((v,L)=>{const T=l.get(`quest:${L}`);if(!T)return;const q=v.length>3?2:1,se=Math.ceil(v.length/q);v.forEach((I,be)=>{const Be=be%q,Re=Math.floor(be/q),qe=240+Be*170,Te=(Re-(se-1)/2)*90,De=`agent:${L}:${I.instance_id}`,Ze=m?.[De]??null??{x:T.position.x+qe,y:T.position.y+Te},je=I.template_id?P.get(I.template_id)??null:null,Vt=He(I),Ut=rt(I,je),Ht=I.avatar_frame_color?.trim()||Ye(I.instance_id,be),Ie=typeof I.status=="string"?I.status.toLowerCase():"idle",et=r.get(I.instance_id)??!1,ht=Ie==="waiting"&&!et,ft=Ie==="waiting"&&!et?"idle":Ie,Ke=et,tt=!Ke&&pt(ft),Yt=Ke?"waiting":tt?"working":gt(ft),Wt=Ke?"waiting":tt?"working":ht?"paused":"resting",Xt=Ke?"Waiting for answer":tt?"Working":ht?"Paused":"Resting";k.push({id:De,type:"overviewAgent",position:Ze,draggable:!j,data:{kind:"agent",questId:L,agentId:I.instance_id,name:Vt,avatar:Ut,avatarColor:Ht,statusTone:Yt,statusState:Wt,statusLabel:Xt}})})}),k},[s,S,a,j,A?.nodes,P,r]),$t=i.useMemo(()=>{const m=ae?[ae]:[];return[...o?[o]:[],...m,...S,...ve]},[ve,o,ae,S]),[xe,dt,zt]=Zt($t),mt=i.useMemo(()=>{const m={stroke:"var(--lab-border-strong)",strokeWidth:1.2,strokeDasharray:"4 6"};return ve.map(l=>({id:`agent-edge:${l.data.questId}:${l.data.agentId}`,source:`quest:${l.data.questId}`,target:l.id,type:"smoothstep",style:m,animated:!1}))},[ve]),vt=i.useMemo(()=>ae?S.map(m=>({id:`pi-edge:${ae.id}:${m.id}`,source:ae.id,target:m.id,type:"smoothstep",style:{stroke:"var(--lab-accent-strong)",strokeWidth:1.4,strokeDasharray:"2 6"},animated:!1})):[],[ae,S]),Gt=i.useMemo(()=>[...vt,...mt],[mt,vt]),Me=It();return i.useEffect(()=>{V.current=xe},[xe]),i.useEffect(()=>{dt(m=>{const l=new Map(m.map(v=>[v.id,v])),N=ae?[ae]:[],k=[...o?[o]:[],...N,...S,...ve].map(v=>{const L=l.get(v.id);return L&&(v.type==="overviewQuest"||v.type==="overviewAgent"||v.type==="overviewPi"||v.type==="overviewPending")?{...v,position:L.position}:v});if(m.length===k.length){let v=!0;for(let L=0;L<k.length;L+=1){const T=m[L],q=k[L];if(!T||!q||T.id!==q.id){v=!1;break}if(T.position.x!==q.position.x||T.position.y!==q.position.y){v=!1;break}if(!Aa(T.data,q.data)){v=!1;break}}if(v)return m}return k})},[w,ve,o,ae,S,dt]),i.useEffect(()=>{me()},[U,D,me]),i.useEffect(()=>{if(!xe.length||E||C.current)return;let m=0,l=0;const N=()=>{l+=1;try{Me.fitView({padding:.2,duration:450}),C.current=!0}catch{l<8&&typeof window<"u"&&(m=window.requestAnimationFrame(N))}};return N(),()=>{m&&typeof window<"u"&&window.cancelAnimationFrame(m)}},[Me,E,xe.length]),i.useEffect(()=>{if(!xe.length||!E||C.current||d.current)return;const m=Q.current;if(!m)return;const l=m.getBoundingClientRect();if(!l.width||!l.height)return;const N=E.x,F=E.y,k=E.zoom,v=160;if(!xe.some(T=>{const q=T.position.x*k+N,se=T.position.y*k+F;return q>-v&&q<l.width+v&&se>-v&&se<l.height+v})){let T=0,q=0;const se=()=>{q+=1;try{Me.fitView({padding:.2,duration:450}),C.current=!0}catch{q<8&&typeof window<"u"&&(T=window.requestAnimationFrame(se))}};return se(),()=>{T&&typeof window<"u"&&window.cancelAnimationFrame(T)}}d.current=!0},[Me,E,xe]),i.useEffect(()=>()=>{O.current&&window.clearTimeout(O.current)},[]),i.useLayoutEffect(()=>{Y(!1);const m=Q.current;if(!m||typeof window>"u")return;let l=0,N=0;const F=()=>{N+=1;const k=m.getBoundingClientRect();if(k.width>0&&k.height>0){Y(!0);return}N<6&&(l=window.requestAnimationFrame(F))};return F(),()=>{l&&window.cancelAnimationFrame(l)}},[t]),e.jsx(Ot.Provider,{value:fe?b:null,children:e.jsxs("div",{ref:Q,className:ne("lab-overview-canvas",te&&"lab-overview-canvas--ops"),children:[$?null:e.jsx("div",{className:"space-y-3 p-4",children:H?e.jsxs(e.Fragment,{children:[te?null:R,b]}):null}),e.jsx("div",{className:"lab-quest-graph-shell lab-quest-graph-shell--full",children:e.jsx(ea,{nodes:xe,edges:Gt,nodeTypes:Ha,onNodesChange:zt,nodesDraggable:!j,panOnDrag:!0,zoomOnScroll:!0,zoomOnPinch:!0,minZoom:.15,maxZoom:3,defaultViewport:E,onNodeDragStop:()=>me(),onMoveEnd:(m,l)=>{B.current=l,me()},onNodeClick:(m,l)=>{const N=l.data;if(N&&typeof N=="object"&&N.kind==="pending"){ot({projectId:t,focusType:"overview",focusId:t}),H&&Le&&(ee("action"),J(k=>({...k,collapsed:!1})));return}if(N&&typeof N=="object"&&N.kind==="agent"){const k=N;K?.(k.agentId,k.questId);return}if(N&&typeof N=="object"&&N.kind==="pi"){K?.(N.agentId,null),g?.();return}const F=l.data?.questId;F&&(ot({projectId:t,focusType:"quest",focusId:F}),y?.(F))},children:e.jsx(ta,{color:"var(--lab-border)",gap:28,size:1,variant:"dots"})})}),$?e.jsxs(e.Fragment,{children:[H&&!te?e.jsx(Pt,{boundsRef:Q,title:G("overview_overall"),icon:e.jsx(ja,{size:16}),state:D,zIndex:z.overview,onChange:ce,onActivate:()=>ee("overview"),className:"lab-overview-panel--overview",children:R}):null,H&&Le?e.jsx(Pt,{boundsRef:Q,title:G("overview_action_center"),icon:e.jsx(_a,{size:16}),state:U,zIndex:z.action,onChange:J,onActivate:()=>ee("action"),className:"lab-overview-panel--action",children:b}):null]}):null]})})}function Wa(t){return e.jsx(Jt,{children:e.jsx(Ya,{...t})})}const Ae=t=>{const a=String(t||"").trim().replace(/[_-]+/g," ");return a?a.replace(/\b\w/g,s=>s.toUpperCase()):"N/A"};function pe({children:t,mono:a=!1}){return e.jsx("span",{className:ne("inline-flex max-w-full items-center rounded-full border border-[var(--lab-border)] px-2.5 py-1 text-[10px] font-medium uppercase tracking-[0.14em] text-[var(--lab-text-secondary)]",a&&"font-mono normal-case tracking-[0.02em]"),children:e.jsx("span",{className:"truncate",children:t})})}function ge({title:t,hint:a,actions:s,children:u,first:n=!1}){return e.jsxs("section",{className:ne("py-5",n?"pt-0":"border-t border-dashed border-[var(--lab-border)]"),children:[e.jsxs("div",{className:"mb-5 flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-[0.18em] text-[var(--lab-text-secondary)]",children:t}),a?e.jsx("div",{className:"mt-2 text-sm leading-7 text-[var(--lab-text-secondary)]",children:a}):null]}),s?e.jsx("div",{className:"shrink-0",children:s}):null]}),u]})}function ye({icon:t,label:a,value:s,hint:u}){return e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.16em] text-[var(--lab-text-secondary)]",children:[e.jsx("span",{className:"shrink-0",children:t}),e.jsx("span",{children:a})]}),e.jsx("div",{className:"mt-2 break-words text-[15px] font-semibold leading-6 text-[var(--lab-text-primary)]",children:s}),u?e.jsx("div",{className:"mt-2 break-words text-sm leading-6 text-[var(--lab-text-secondary)]",children:u}):null]})}function Ge({items:t}){return e.jsx("div",{className:"divide-y divide-dashed divide-[var(--lab-border)]",children:t.map(a=>e.jsxs("div",{className:"grid gap-2 py-3 sm:grid-cols-[130px_minmax(0,1fr)]",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.16em] text-[var(--lab-text-secondary)]",children:a.label}),e.jsx("div",{className:"break-words text-sm leading-7 text-[var(--lab-text-primary)]",children:a.value})]},a.label))})}function Xa(t){return t==="truth"?"border-[rgba(64,113,175,0.24)] bg-[rgba(64,113,175,0.1)] text-[#315c97] dark:text-[#9ec5ff]":t==="runtime"?"border-[rgba(99,102,241,0.24)] bg-[rgba(99,102,241,0.1)] text-[#4f46e5] dark:text-[#c7d2fe]":t==="overlay"?"border-[rgba(83,176,174,0.26)] bg-[rgba(83,176,174,0.12)] text-[#0f766e] dark:text-[#8be4db]":"border-[rgba(148,163,184,0.26)] bg-[rgba(148,163,184,0.12)] text-[var(--lab-text-secondary)]"}function Ja({projectId:t,readOnly:a,onRefresh:s,onOpenStageSelection:u,cliStatus:n,labStream:r,projectName:f,templates:w,agents:x,quests:p,overview:j,isLoading:_,lockedQuestId:b=null,immersiveLockedQuest:R=!1}){const{t:H}=ke("lab"),y=ut(),c=Ue(o=>o.setActiveQuest),g=yt(o=>o.selection),K=yt(o=>o.clear),[G,Q]=i.useState(null),[$,Y]=i.useState(null),[A,h]=i.useState(null),[E,C]=i.useState(null),d=b??G,V=i.useMemo(()=>new Map(w.map(o=>[o.template_id,o])),[w]),B=i.useMemo(()=>p.find(o=>o.quest_id===d)??null,[p,d]),O=i.useMemo(()=>x.find(o=>o.instance_id===E)??null,[x,E]),X=i.useMemo(()=>{const o=w.filter(S=>["pi","principal-investigator"].includes(String(S.template_key||"").trim().toLowerCase()));if(o.length){const S=x.find(P=>o.some(ae=>P.template_id===ae.template_id))??null;if(S)return S}return x.find(S=>{const P=String(S.agent_id||"").trim().toLowerCase(),ae=String(S.mention_label||"").trim().replace(/^@/,"").toLowerCase();return P==="pi"||ae==="pi"||P.endsWith(":pi")||String(S.template_id||"").trim().toLowerCase().includes("principal")})??null},[x,w]),z=X?.template_id?V.get(X.template_id)??null:null,de=X?{name:He(X),logo:rt(X,z),frameColor:X.avatar_frame_color||Ye(X.instance_id,0)}:null,D=i.useMemo(()=>{const o=j.graph_vm?.project?.pendingDecisionCount;return typeof o=="number"?Math.max(0,o):p.reduce((S,P)=>S+Math.max(0,Number(P.pending_question_count??0)),0)},[j.graph_vm?.project?.pendingDecisionCount,p]);i.useEffect(()=>{b||d&&!B&&!_.quests&&(Q(null),Y(null),h(null),K())},[K,_.quests,b,B,d]),i.useEffect(()=>{b&&(Y(o=>o??null),h(o=>o??null),C(null))},[b]),i.useEffect(()=>{c(d)},[d,c]),i.useEffect(()=>{const o=S=>{const P=S.detail;if(P&&!(P.projectId&&P.projectId!==t)){if(P.focusType==="overview"||P.focusType==="canvas"){b||Q(null),Y(null),h(null),C(null),K();return}if(P.focusType==="agent"){C(P.focusId??null);return}if(P.focusType==="quest"||P.focusType==="quest-branch"||P.focusType==="quest-event"){if(b&&P.focusId&&P.focusId!==b)return;b||Q(P.focusId??null),Y(P.branch??null),h(P.eventId??null),C(null),K()}}};return window.addEventListener(lt,o),()=>window.removeEventListener(lt,o)},[K,b,t]);const ce=le({queryKey:["lab-quest-detail",t,d,"canvas-studio"],queryFn:()=>ra(t,d),enabled:!!(t&&d),staleTime:1e4}),U=le({queryKey:["lab-quest-summary",t,d,A??null,"canvas-studio"],queryFn:()=>la(t,d,{atEventId:A}),enabled:!!(t&&d),staleTime:1e4}),J=le({queryKey:["lab-quest-event-payload",t,d,g?.selection_type??null,g?.selection_ref??null,"canvas-studio"],queryFn:()=>oa(t,d,g?.selection_ref,{maxBytes:1e5}),enabled:!!(t&&d&&g?.selection_type==="event_node"&&g?.selection_ref),staleTime:1e4}),Ne=le({queryKey:["lab-quest-node-trace",t,d,g?.selection_type??null,g?.selection_ref??null,"canvas-studio"],queryFn:()=>ca(t,d,g?.selection_ref,{selectionType:g?.selection_type??null}),enabled:!!(t&&d&&g?.selection_ref&&["branch_node","event_node","stage_node"].includes(String(g?.selection_type||""))),staleTime:1e4}),ee=i.useMemo(()=>sa({selectionType:g?.selection_type,edgeType:g?.summary??g?.selection_ref??null,hasActiveProposal:!1}),[g?.selection_ref,g?.selection_type,g?.summary]),me=i.useCallback(()=>{Promise.resolve(s?.()),y.invalidateQueries({queryKey:["lab-agents",t]}),y.invalidateQueries({queryKey:["lab-quests",t]}),y.invalidateQueries({queryKey:["lab-overview",t]}),d&&(y.invalidateQueries({queryKey:["lab-quest-detail",t,d]}),y.invalidateQueries({queryKey:["lab-quest-summary",t,d]}),y.invalidateQueries({queryKey:["lab-quest-graph",t,d]}),y.invalidateQueries({queryKey:["lab-quest-node-trace",t,d]}))},[s,t,y,d]),Z=i.useCallback((o,S,P)=>{b&&o!==b||(b||Q(o),Y(S??null),h(P??null),C(null),K())},[K,b]),Se=i.useCallback(()=>{b||Q(null),Y(null),h(null),K()},[K,b]),M=()=>e.jsxs("div",{className:"space-y-0",children:[_.quests||_.agents||_.overview?e.jsxs("div",{className:"space-y-3",children:[e.jsx(ue,{className:"h-24 w-full rounded-[18px]"}),e.jsx(ue,{className:"h-20 w-full rounded-[18px]"})]}):null,e.jsxs(ge,{first:!0,title:"Overall",hint:"Select a quest node to enter its canvas. After that, click a branch, event, or stage node to inspect its durable detail state here.",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(pe,{children:"Home"}),e.jsx(pe,{children:Ae(n)}),e.jsxs(pe,{children:[p.length," quests"]}),e.jsxs(pe,{children:[x.length," agents"]})]}),e.jsxs("div",{className:"mt-4 flex items-center gap-2",children:[e.jsx(at,{className:"h-4 w-4 text-[#4071af]"}),e.jsx("div",{className:"text-[22px] font-semibold tracking-[-0.03em] text-[var(--lab-text-primary)]",children:f||H("plugin_home_title",void 0,"Home")})]})]}),e.jsx(ge,{title:"Operational Status",hint:"Keep this panel focused on high-signal canvas state rather than dashboard clutter.",children:e.jsxs("div",{className:"grid gap-x-8 gap-y-5 sm:grid-cols-2",children:[e.jsx(ye,{icon:e.jsx(_t,{className:"h-4 w-4"}),label:"Quests",value:p.length,hint:"Durable research repositories tracked in this project."}),e.jsx(ye,{icon:e.jsx(nt,{className:"h-4 w-4"}),label:"Agents",value:x.length,hint:"Live agent instances visible to the Lab surface."}),e.jsx(ye,{icon:e.jsx(at,{className:"h-4 w-4"}),label:"Pending",value:D,hint:"User decisions or unresolved blocking items."}),e.jsx(ye,{icon:e.jsx(Oe,{className:"h-4 w-4"}),label:"CLI",value:Ae(n),hint:"Shared runtime binding for this project workspace."})]})}),e.jsx(ge,{title:"Next Step",hint:"The Lab plugin is now canvas-first. Explorer handles navigation, center tabs handle content, and this rail only summarizes context.",children:e.jsx(Ge,{items:[{label:"Canvas",value:"Open a quest node to switch from map view into its research graph."},{label:"Selection",value:"Branch, event, and stage nodes expose stable detail summaries here."},{label:"Explorer",value:"Changed files now open in center tabs instead of rendering inline in the navigator."}]})}),O?te(O):null]}),te=o=>{const S=o.template_id?V.get(o.template_id)??null:null;return e.jsxs(ge,{title:"Agent",hint:"Current agent focus selected from the overview canvas.",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-full border border-[var(--lab-border)] bg-[var(--lab-background)]",style:{boxShadow:`0 0 0 2px ${o.avatar_frame_color||Ye(o.instance_id)}`},children:e.jsx(nt,{className:"h-4 w-4 text-[var(--lab-text-primary)]"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-sm font-semibold text-[var(--lab-text-primary)]",children:He(o)}),e.jsx("div",{className:"truncate text-xs text-[var(--lab-text-secondary)]",children:S?.template_key||o.agent_id})]})]}),e.jsx("div",{className:"mt-5",children:e.jsx(Ge,{items:[{label:"Status",value:Ae(o.status)},{label:"Quest",value:o.active_quest_id||"Unassigned"},{label:"Branch",value:o.active_quest_branch||"N/A"},{label:"Stage",value:o.active_quest_stage_key||"N/A"}]})})]})},he=()=>{if(!d)return null;const o=ce.data?.quest??B,S=U.data?.quest??null,P=S?.runtime??null,ve=(S?.governance??null)?.lastPushStatus||(typeof o?.github_push?.status=="string"?o.github_push.status:null)||"N/A";return ce.isLoading&&!o?e.jsxs("div",{className:"space-y-3",children:[e.jsx(ue,{className:"h-28 w-full rounded-[18px]"}),e.jsx(ue,{className:"h-20 w-full rounded-[18px]"}),e.jsx(ue,{className:"h-20 w-full rounded-[18px]"})]}):e.jsxs("div",{className:"space-y-0",children:[e.jsxs(ge,{first:!0,title:"Overall",hint:o?.description?.trim()||o?.summary?.trim()||"No quest description yet.",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(pe,{children:Ae(o?.status)}),e.jsx(pe,{children:S?.topology?.headBranch||o?.git_head_branch||"main"}),e.jsx(pe,{mono:!0,children:d}),$?e.jsx(pe,{children:$}):null]}),e.jsx("div",{className:"mt-4 text-[22px] font-semibold tracking-[-0.03em] text-[var(--lab-text-primary)]",children:o?.title||d}),e.jsxs("div",{className:"mt-5 grid gap-x-8 gap-y-5 sm:grid-cols-2",children:[e.jsx(ye,{icon:e.jsx(_t,{className:"h-4 w-4"}),label:"Branches",value:S?.topology?.branchCount??0,hint:`Head ${S?.topology?.headBranch||o?.git_head_branch||"main"}`}),e.jsx(ye,{icon:e.jsx(nt,{className:"h-4 w-4"}),label:"Running Agents",value:P?.runningAgents??0,hint:"Live agents attached to this quest."}),e.jsx(ye,{icon:e.jsx(at,{className:"h-4 w-4"}),label:"Pending Questions",value:Math.max(0,Number(o?.pending_question_count??0)),hint:"Open decisions or direct user replies still waiting."}),e.jsx(ye,{icon:e.jsx(Oe,{className:"h-4 w-4"}),label:"Push Status",value:ve,hint:o?.last_event_at?`Last event ${Ve(o.last_event_at)}`:"No event timestamp yet."})]})]}),g?e.jsxs(e.Fragment,{children:[e.jsxs(ge,{title:"Selection",hint:g.summary||"No structured summary is attached to this node yet.",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[ee?e.jsx("span",{className:ne("inline-flex items-center rounded-full border px-2 py-0.5 text-[10px] font-semibold",Xa(ee.tone)),children:H(Nt[ee.tone].labelKey,void 0,Nt[ee.tone].labelDefault)}):null,e.jsx(ie,{variant:"outline",children:Ae(g.selection_type)})]}),e.jsx("div",{className:"mt-4 text-base font-semibold text-[var(--lab-text-primary)]",children:g.label||g.selection_ref}),e.jsx("div",{className:"mt-5",children:e.jsx(Ge,{items:[{label:"Ref",value:g.selection_ref},{label:"Branch No",value:g.branch_no||"N/A"},{label:"Branch",value:g.branch_name||"N/A"},{label:"Parent",value:g.parent_branch||"N/A"},{label:"Foundation",value:g.foundation_label||"N/A"},{label:"Stage",value:g.stage_key||"N/A"},{label:"Worktree",value:g.worktree_rel_path||"N/A"},{label:"Agent",value:g.agent_instance_id||"N/A"}]})})]}),e.jsx(ge,{title:"Trace",hint:"Durable actions, artifact payloads, and commit evidence attached to the selected node.",children:e.jsx(Ca,{projectId:t,questId:d,trace:Ne.data?.trace??null,isLoading:Ne.isLoading,payloadJson:J.data?.payload_json??null,payloadTruncated:J.data?.truncated??null})})]}):e.jsx(ge,{title:"Operational Status",hint:"Quest-level runtime, topology, and governance signals.",children:e.jsx(Ge,{items:[{label:"Head Branch",value:S?.topology?.headBranch||o?.git_head_branch||"main"},{label:"Pending Questions",value:Math.max(0,Number(o?.pending_question_count??0))},{label:"Branch Count",value:S?.topology?.branchCount??0},{label:"Running Agents",value:P?.runningAgents??0},{label:"Push Status",value:ve},{label:"Last Event",value:o?.last_event_at?Ve(o.last_event_at):"N/A"},{label:"Created",value:o?.created_at?Ve(o.created_at):"N/A"}]})})]})},fe=B?B.title||B.quest_id:f||H("plugin_home_title",void 0,"Home"),Le=B?b?"Research canvas":"Quest canvas":"Quest map";return b&&R&&d?e.jsxs("div",{className:"relative flex h-full min-h-0 w-full flex-1 overflow-hidden",children:[e.jsx("div",{className:"absolute right-4 top-4 z-20",children:e.jsxs(Fe,{type:"button",size:"sm",variant:"outline",className:"h-9 rounded-full border-[var(--lab-border)] bg-[rgba(255,255,255,0.94)] px-3 text-[11px] text-[var(--lab-text-primary)] shadow-[0_10px_28px_rgba(15,23,42,0.08)] backdrop-blur dark:bg-[rgba(28,29,34,0.94)]",onClick:me,children:[e.jsx(Oe,{className:"mr-1.5 h-3.5 w-3.5"}),"Refresh"]})}),e.jsx("div",{className:"h-full min-h-0 w-full overflow-hidden",children:e.jsx(wt,{projectId:t,questId:d,readOnly:a,highlightBranch:$,atEventId:A,preferredViewMode:A?"event":"branch",activeBranch:$,onBranchSelect:o=>{Y(o),h(null)},onEventSelect:(o,S)=>{h(o),S&&Y(S)},showFloatingPanels:!1,minimalChrome:!0,onStageOpen:u})})]}):e.jsxs("div",{className:"flex h-full min-h-0 flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-[20px] border border-[var(--lab-border)] bg-[var(--lab-surface)] px-4 py-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[d&&!b?e.jsx(Fe,{type:"button",size:"sm",variant:"ghost",className:"h-8 px-2",onClick:Se,children:e.jsx(na,{className:"h-4 w-4"})}):null,e.jsx("div",{className:"truncate text-sm font-semibold text-[var(--lab-text-primary)]",children:fe})]}),e.jsxs("div",{className:"mt-1 flex flex-wrap items-center gap-2 text-xs text-[var(--lab-text-secondary)]",children:[e.jsx("span",{children:Le}),e.jsx("span",{children:"·"}),e.jsxs("span",{children:[p.length," quests"]}),e.jsx("span",{children:"·"}),e.jsxs("span",{children:[x.length," agents"]}),r?.status&&r.status!=="idle"?e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"·"}),e.jsxs("span",{children:["stream ",r.status]})]}):null]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[$?e.jsx(ie,{variant:"outline",children:$}):null,e.jsx(ie,{variant:"outline",children:Ae(n)}),e.jsxs(Fe,{type:"button",size:"sm",variant:"outline",className:"h-8 px-3",onClick:me,children:[e.jsx(Oe,{className:"mr-1.5 h-3.5 w-3.5"}),"Refresh"]})]})]}),e.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 xl:grid-cols-[minmax(0,1fr)_360px]",children:[e.jsx("div",{className:"min-h-0 overflow-hidden rounded-[24px] border border-[var(--lab-border)] bg-[var(--lab-surface)]",children:d?e.jsx(wt,{projectId:t,questId:d,readOnly:a,highlightBranch:$,atEventId:A,preferredViewMode:A?"event":"branch",activeBranch:$,onBranchSelect:o=>{Y(o),h(null)},onEventSelect:(o,S)=>{h(o),S&&Y(S)},showFloatingPanels:!1,onStageOpen:u}):e.jsx(Wa,{projectId:t,quests:p,agents:x,templates:w,graphVm:j.graph_vm??null,pendingDecisionCount:D,activeQuestId:d,hasPiAgent:!!de,piAgent:de,readOnly:a,actionPanel:null,overviewPanel:null,showFloatingPanels:!1,onOpenCanvas:Z,onSelectAgent:o=>{C(o)}})}),e.jsx("aside",{className:"min-h-0 overflow-hidden rounded-[24px] border border-[var(--lab-border)] bg-[var(--lab-surface)]",children:e.jsx(ia,{className:"h-full",children:e.jsxs("div",{className:"space-y-3 p-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-semibold text-[var(--lab-text-primary)]",children:"Details"}),e.jsx("div",{className:"mt-1 text-xs text-[var(--lab-text-secondary)]",children:d?"Selected node and quest context.":"Overview context and node guidance."})]}),d?e.jsx(Fe,{type:"button",size:"sm",variant:"ghost",className:"h-8 px-3",onClick:()=>{K(),h(null)},children:"Clear node"}):null]}),d?he():M()]})})})]})]})}const Za=80,Ia=new Set(["lab.agent.changed","lab.agent.status"]),es=new Set(["lab.assignment.changed"]),ts=new Set(["lab.quest.changed","lab.quest.event","lab.quest.sync"]),as=new Set(["lab.quest.runtime"]),ss=new Set(["lab.memory.changed"]),ns=new Set(["lab.paper.changed"]),is=new Set(["lab.baseline.archive","lab.baseline.restore"]),Pe=t=>!t||typeof t!="object"?null:t,re=t=>{if(typeof t!="string")return null;const a=t.trim();return a||null},rs=t=>{if(typeof t=="boolean")return t;if(typeof t=="number")return t!==0;if(typeof t=="string"){const a=t.trim().toLowerCase();return a==="1"||a==="true"||a==="yes"}return!1},ls=t=>Array.isArray(t)?t.map(a=>re(a)).filter(a=>!!a):[],os=t=>{if(!t)return null;const a=Pe(t.data),s=re(a?.quest_id)??re(a?.questId)??re(a?.active_quest_id)??re(t.quest_id)??re(t.questId)??re(t.active_quest_id);if(s)return s;const u=Pe(a?.quest);return re(u?.quest_id)??re(u?.id)},Qt=t=>[{queryKey:["lab-agents",t]},{queryKey:["lab-quests",t]},{queryKey:["lab-overview",t]}],we=(t,a)=>a?[{queryKey:["lab-quest-detail",t,a]},{queryKey:["lab-quest",t,a]},{queryKey:["lab-quest-summary",t,a]},{queryKey:["lab-quest-graph",t,a]},{queryKey:["lab-quest-events",t,a]},{queryKey:["lab-quest-event-payload",t,a]},{queryKey:["lab-quest-node-trace",t,a]},{queryKey:["lab-quest-decision-events",t,a]},{queryKey:["lab-quest-pi-qa-events",t,a]},{queryKey:["lab-quest-branch-insights",t,a]},{queryKey:["lab-quest-runtime",t,a]},{queryKey:["lab-papers",t,a]},{queryKey:["lab-memory",t,a]}]:[{queryKey:["lab-quest-detail",t]},{queryKey:["lab-quest",t]},{queryKey:["lab-quest-summary",t]},{queryKey:["lab-quest-graph",t]},{queryKey:["lab-quest-events",t]},{queryKey:["lab-quest-event-payload",t]},{queryKey:["lab-quest-node-trace",t]},{queryKey:["lab-quest-decision-events",t]},{queryKey:["lab-quest-pi-qa-events",t]},{queryKey:["lab-quest-branch-insights",t]},{queryKey:["lab-quest-runtime",t]},{queryKey:["lab-papers",t]},{queryKey:["lab-memory",t]}],cs=t=>[{queryKey:["lab-memory",t]}],us=(t,a,s)=>Ia.has(t)?[{queryKey:["lab-agents",a]},{queryKey:["lab-overview",a]}]:es.has(t)?[{queryKey:["lab-agents",a]},{queryKey:["lab-quests",a]},{queryKey:["lab-overview",a]},...we(a,s)]:ts.has(t)?[{queryKey:["lab-agents",a]},{queryKey:["lab-quests",a]},{queryKey:["lab-overview",a]},...we(a,s)]:as.has(t)?[{queryKey:["lab-quests",a]},{queryKey:["lab-overview",a]},...we(a,s)]:ss.has(t)?[...cs(a),...we(a,s)]:ns.has(t)?[{queryKey:["lab-papers",a]},{queryKey:["lab-overview",a]},...we(a,s)]:is.has(t)?[{queryKey:["lab-baselines",a]},{queryKey:["lab-quests",a]},{queryKey:["lab-overview",a]},...we(a,s)]:t.startsWith("lab.")?[{queryKey:["lab-quests",a]},{queryKey:["lab-overview",a]},...s?we(a,s):[]]:Qt(a),ds=(t,a,s)=>{if(t!=="lab.agent.changed")return null;const u=Pe(s?.data);if(!u)return null;const n=re(u.action)?.toLowerCase();if(n!=="created"&&n!=="promoted"||!rs(u.auto_focus))return null;const r=re(u.agent_instance_id);return r?{projectId:a,focusType:"agent",focusId:r}:null};function ms({projectId:t,enabled:a}){const s=ut(),[u,n]=i.useState({status:"idle",lastEventAt:null}),r=ua();return i.useEffect(()=>{if(!a||!t||r){n(h=>h.status==="idle"?h:{...h,status:"idle"});return}let f=!1,w=null,x=null,p=0,j=null,_=null;const b=new Set,R=[],H=512,y=new Map,c=`${da()}/api/v1/projects/${t}/lab/stream`,g=h=>{const E=h.split(/\n/);let C="",d="";const V=[];for(const B of E)if(B){if(B.startsWith("event:")){C=B.slice(6).trim();continue}if(B.startsWith("data:")){V.push(B.slice(5).trimStart());continue}B.startsWith("id:")&&(d=B.slice(3).trim())}return V.length===0?null:{event:C||"message",data:V.join(`
13
- `),id:d||void 0}},K=(h,E)=>{const C=(E||"").trim();if(!C)return!1;const d=(h||"").trim().toLowerCase(),V=d?`${d}|${C}`:C;if(b.has(V))return!0;if(b.add(V),R.push(V),R.length>H){const B=R.shift();B&&b.delete(B)}return!1},G=()=>{if(y.size===0)return;const h=Array.from(y.values());y.clear(),h.forEach(E=>{s.invalidateQueries({queryKey:E.queryKey,exact:E.exact})})},Q=h=>{h.forEach(E=>{const C=`${E.exact?1:0}:${JSON.stringify(E.queryKey)}`;y.set(C,E)}),!x&&(x=window.setTimeout(()=>{x=null,G()},Za))},$=(h,E)=>{if(h==="lab.ping")return;n(z=>({...z,lastEventAt:Date.now()}));let C=null;try{const z=JSON.parse(E||"{}");C=Pe(z)}catch{C=null}const d=os(C),V=Pe(C?.data),B=ls(V?.quest_ids),O=us(h,t,d);Q(O),B.forEach(z=>{Q(we(t,z))});const X=ds(h,t,C);X&&ot(X)},Y=()=>{if(f)return;w&&window.clearTimeout(w);const h=Math.min(p,4),E=Math.min(1e4,1e3*2**h),C=Math.min(250,p*50);n(d=>d.status==="connecting"||d.status==="open"?{...d,status:"reconnecting"}:d),w=window.setTimeout(A,E+C)},A=()=>{if(f)return;_&&_.abort(),_=new AbortController;const h=_;n(E=>({...E,status:p>0?"reconnecting":"connecting"})),(async()=>{try{const E=typeof window<"u"?window.localStorage.getItem("ds_access_token"):null;if(!E)return;const C={Accept:"text/event-stream",Authorization:`Bearer ${E}`};j&&(C["Last-Event-ID"]=j);const d=await fetch(c,{method:"GET",headers:C,signal:h.signal});if(f||h.signal.aborted)return;if(d.status===401){typeof window<"u"&&(window.localStorage.removeItem("ds_access_token"),ma("session_expired"));return}if(!d.ok)throw new Error(`HTTP ${d.status}: ${d.statusText}`);p=0,n(z=>({...z,status:"open"})),Q(Qt(t));const V=d.body?.getReader();if(!V)throw new Error("No response body");const B=new TextDecoder;let O="";for(;!(f||h.signal.aborted);){const{done:z,value:de}=await V.read();if(z||f||h.signal.aborted)break;O+=B.decode(de,{stream:!0}),O.includes("\r")&&(O=O.replace(/\r\n/g,`
14
- `));let D=O.indexOf(`
15
-
16
- `);for(;D!==-1;){const ce=O.slice(0,D);O=O.slice(D+2);const U=ce.replace(/\r\n/g,`
17
- `).trim(),J=g(U);if(J?.id&&(j=J.id,K(J.event,J.id))){D=O.indexOf(`
18
-
19
- `);continue}J&&!f&&!h.signal.aborted&&$(J.event,J.data),D=O.indexOf(`
20
-
21
- `)}}const X=O.replace(/\r\n/g,`
22
- `).trim();if(X&&!f&&!h.signal.aborted){const z=g(X);if(z?.id&&(j=z.id,K(z.event,z.id)))return;z&&$(z.event,z.data)}!f&&!h.signal.aborted&&(p+=1,Y())}catch{if(f||h.signal.aborted)return;n(E=>({...E,status:"error"})),p+=1,Y()}})()};return A(),()=>{f=!0,G(),w&&window.clearTimeout(w),x&&window.clearTimeout(x),_&&_.abort()}},[a,r,t,s]),u}function it({liveEnabled:t,streamStatus:a,fastMs:s,slowMs:u}){return t?a==="open"?u:s:!1}function vs({projectId:t,readOnly:a,lockedQuestId:s=null,immersiveLockedQuest:u=!1,onRefresh:n,onOpenStageSelection:r}){const f=ut(),w=Ue(M=>M.setActiveQuest),x=Ue(M=>M.activeQuestId),p=Ue(M=>M.clearSelections),j=st(M=>M.servers),_=st(M=>M.loadServers),b=st(M=>M.projectId),R=va(),H=i.useMemo(()=>{const M=R?.context?.customData,te=typeof M?.projectId=="string"?M.projectId:null,he=!te||te===t;return R?.pluginId===ba.LAB&&he},[R,t]);i.useEffect(()=>{t&&b!==t&&_(t)},[b,_,t]);const y=i.useMemo(()=>j.filter(M=>M.status!=="offline"&&M.status!=="error"),[j]),c=j.length===0?"unbound":y.length>0?"online":"offline",g=!0,[K,G]=i.useState(!0);i.useEffect(()=>{const M=()=>{G(typeof document<"u"&&document.visibilityState==="visible")};return M(),document.addEventListener("visibilitychange",M),()=>document.removeEventListener("visibilitychange",M)},[]);const Q=3e4,$=!!(t&&H&&K),Y=!!(t&&K),A=5e3,h=1e4,E=1e4,C=ms({projectId:t,enabled:Y}),d=C?.status??"idle",V=it({liveEnabled:$,streamStatus:d,fastMs:A,slowMs:A}),B=it({liveEnabled:$,streamStatus:d,fastMs:h,slowMs:3e4}),O=it({liveEnabled:$,streamStatus:d,fastMs:E,slowMs:3e4}),X=i.useRef($);i.useEffect(()=>{const M=X.current;X.current=$,!(!t||!$||M)&&(f.invalidateQueries({queryKey:["lab-agents",t]}),f.invalidateQueries({queryKey:["lab-quests",t]}),f.invalidateQueries({queryKey:["lab-overview",t]}))},[$,t,f]);const z=le({queryKey:["lab-templates",t],queryFn:()=>ha(t),enabled:!!t,staleTime:Q}),de=le({queryKey:["lab-agents",t],queryFn:()=>fa(t,{silent:!0}),enabled:!!t,staleTime:Q,refetchInterval:V}),D=le({queryKey:["lab-quests",t],queryFn:()=>xa(t,{silent:!0}),enabled:!!t,staleTime:Q,refetchInterval:B}),ce=le({queryKey:["lab-overview",t],queryFn:()=>pa(t,{silent:!0}),staleTime:Q,refetchInterval:O}),U=le({queryKey:["project",t],queryFn:()=>ga(t),enabled:!!t,staleTime:Q}),J=z.data?.items??[],Ne=de.data?.items??[],ee=D.data?.items??[],me=ce.data??{},Z=i.useMemo(()=>ee.length===0?null:ee.reduce((te,he)=>{const fe=te?.created_at?new Date(te.created_at).getTime():0;return(he?.created_at?new Date(he.created_at).getTime():0)>fe?he:te},ee[0])?.quest_id??null,[ee]),Se=U.data?.name??null;return i.useEffect(()=>{if(s){w(s);return}x||!Z||w(Z)},[x,Z,s,w]),i.useEffect(()=>{p()},[p,t]),e.jsx("div",{className:"lab-root flex h-full min-h-0 flex-col","data-activity":K?"active":"inactive",children:e.jsx("div",{className:ne("lab-panel h-full min-h-0 flex-1 overflow-hidden"),children:e.jsx(Ja,{projectId:t,readOnly:g,onRefresh:n,onOpenStageSelection:r,cliStatus:c,labStream:C,projectName:Se,templates:J,agents:Ne,quests:ee,overview:me,isLoading:{agents:de.isLoading,quests:D.isLoading,overview:ce.isLoading},lockedQuestId:s,immersiveLockedQuest:u})})})}const bs="ds:lab:focus";function ys({context:t,setTitle:a}){const{t:s}=ke("lab"),u=ya("lab.use"),n=typeof t.customData?.projectId=="string"?t.customData.projectId:null,r=!!t.customData?.readOnly,f=t.customData?.focusType==="agent"||t.customData?.focusType==="quest"||t.customData?.focusType==="quest-branch"||t.customData?.focusType==="quest-event"||t.customData?.focusType==="overview"?t.customData.focusType:null,w=typeof t.customData?.focusId=="string"?t.customData.focusId:null,x=typeof t.customData?.branch=="string"?t.customData.branch:null,p=typeof t.customData?.eventId=="string"?t.customData.eventId:null;return i.useEffect(()=>{a(s("plugin_home_title",void 0,"Home"))},[a,s]),i.useEffect(()=>{!n||!f||!w&&f!=="overview"||window.dispatchEvent(new CustomEvent(bs,{detail:{projectId:n,focusType:f,focusId:w,branch:x,eventId:p}}))},[x,p,w,f,n]),n?!u.isEntitlementLoading&&!u.isMaxEntitled?e.jsx("div",{className:"flex h-full items-center justify-center rounded-2xl border border-[var(--soft-border)] bg-[var(--soft-bg-surface)]",children:e.jsxs("div",{className:"px-6 text-center",children:[e.jsx("div",{className:"text-sm font-medium text-[var(--soft-text-primary)]",children:s("plugin_plan_access_required",void 0,"Plan access required")}),e.jsx("div",{className:"mt-1 text-xs text-[var(--soft-text-secondary)]",children:s("plugin_max_only_desc",void 0,"Lab is currently available for Max users only.")})]})}):e.jsx(vs,{projectId:n,readOnly:r}):e.jsx("div",{className:"flex h-full items-center justify-center rounded-2xl border border-[var(--soft-border)] bg-[var(--soft-bg-surface)]",children:e.jsx("div",{className:"text-sm text-[var(--soft-text-secondary)]",children:s("plugin_project_not_found",void 0,"Project not found.")})})}export{ys as default};