@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
package/bin/ds.js CHANGED
@@ -36,12 +36,39 @@ const pythonCommands = new Set([
36
36
  const UPDATE_PACKAGE_NAME = String(packageJson.name || '@researai/deepscientist').trim() || '@researai/deepscientist';
37
37
  const UPDATE_CHECK_TTL_MS = 12 * 60 * 60 * 1000;
38
38
 
39
- const optionsWithValues = new Set(['--home', '--host', '--port', '--quest-id', '--mode', '--proxy', '--codex-profile', '--codex', '--auth']);
39
+ const optionsWithValues = new Set(['--home', '--host', '--port', '--quest-id', '--mode', '--proxy', '--codex-profile', '--codex', '--auth', '--runner', '--debug-log']);
40
40
 
41
- function buildCodexOverrideEnv({ yolo = true, profile = null, binary = null } = {}) {
41
+ function normalizeRunnerName(value, fallback = '') {
42
+ const normalized = String(value || '')
43
+ .trim()
44
+ .toLowerCase()
45
+ .replace(/_/g, '-');
46
+ if (!normalized) return fallback;
47
+ if (normalized === 'claude-code' || normalized === 'claudecode') return 'claude';
48
+ if (normalized === 'kimi-code' || normalized === 'kimicode') return 'kimi';
49
+ if (normalized === 'open-code' || normalized === 'open code' || normalized === 'opencode-ai' || normalized === 'opencodeai') return 'opencode';
50
+ return normalized.replace(/-/g, '');
51
+ }
52
+
53
+ function runnerDisplayName(value) {
54
+ const normalized = normalizeRunnerName(value, 'codex');
55
+ return {
56
+ codex: 'Codex',
57
+ claude: 'Claude Code',
58
+ kimi: 'Kimi Code',
59
+ opencode: 'OpenCode',
60
+ }[normalized] || normalized || 'runner';
61
+ }
62
+
63
+ function buildCodexOverrideEnv({ yolo = true, profile = null, binary = null, runner = null } = {}) {
42
64
  const normalizedProfile = typeof profile === 'string' ? profile.trim() : '';
43
65
  const normalizedBinary = typeof binary === 'string' ? binary.trim() : '';
66
+ const normalizedRunner = normalizeRunnerName(runner);
44
67
  const overrides = {};
68
+ if (normalizedRunner) {
69
+ overrides.DEEPSCIENTIST_DEFAULT_RUNNER = normalizedRunner;
70
+ overrides.DEEPSCIENTIST_ENABLE_RUNNER = normalizedRunner;
71
+ }
45
72
  if (normalizedBinary) {
46
73
  overrides.DEEPSCIENTIST_CODEX_BINARY = normalizedBinary;
47
74
  }
@@ -152,6 +179,7 @@ Usage:
152
179
  ds --restart
153
180
  ds --status
154
181
  ds doctor
182
+ ds --runner claude
155
183
  ds latex status
156
184
  ds --home ~/DeepScientist --port 20999
157
185
 
@@ -161,6 +189,8 @@ Launcher flags:
161
189
  --auth [true|false] Require a 16-character local browser password. Default is false
162
190
  --tui Start the terminal workspace only
163
191
  --both Start web + terminal workspace together
192
+ --debug Show the TUI debug strip and write redacted JSONL snapshots when TUI is open
193
+ --debug-log <path> Write TUI debug snapshots to this JSONL file. Default: /tmp/deepscientist_tui_debug.jsonl
164
194
  --no-browser Do not auto-open the browser
165
195
  --daemon-only Start the managed daemon and exit
166
196
  --status Print managed daemon health as JSON
@@ -170,6 +200,7 @@ Launcher flags:
170
200
  --here Create/use ./DeepScientist under the current working directory as home
171
201
  --proxy <url> Use an outbound HTTP/WS proxy for npm and Python runtime traffic
172
202
  --yolo [true|false] Control Codex YOLO mode. Default is true; pass false to restore on-request + workspace-write
203
+ --runner <name> Select builtin runner for this launch: codex, claude, kimi, or opencode
173
204
  --codex-profile <id> Run DeepScientist with a specific Codex profile, for example \`m27\`
174
205
  --codex <path> Run DeepScientist with a specific Codex executable path for this launch
175
206
  --quest-id <id> Open the TUI on one quest directly
@@ -610,6 +641,54 @@ function resolveHome(args) {
610
641
  return path.join(os.homedir(), 'DeepScientist');
611
642
  }
612
643
 
644
+ function hasManagedDaemonState(home) {
645
+ const state = readDaemonState(home);
646
+ return Boolean(
647
+ state
648
+ && typeof state === 'object'
649
+ && (
650
+ state.daemon_id
651
+ || state.pid
652
+ || state.url
653
+ || state.launch_url
654
+ || state.home
655
+ )
656
+ );
657
+ }
658
+
659
+ function resolveManagementHome(rawArgs, options = {}) {
660
+ if (
661
+ options.home
662
+ || rawArgs.includes('--here')
663
+ || process.env.DEEPSCIENTIST_HOME
664
+ || process.env.DS_HOME
665
+ ) {
666
+ return options.home || resolveHome(rawArgs);
667
+ }
668
+
669
+ const cwdHome = normalizeHomePath(path.join(process.cwd(), 'DeepScientist'));
670
+ if (hasManagedDaemonState(cwdHome)) {
671
+ return cwdHome;
672
+ }
673
+
674
+ const defaultHome = normalizeHomePath(resolveHome(rawArgs));
675
+ if (hasManagedDaemonState(defaultHome)) {
676
+ return defaultHome;
677
+ }
678
+
679
+ const installs = readInstallIndex()
680
+ .installs
681
+ .map((item) => normalizeInstallRecord(item))
682
+ .filter(Boolean);
683
+ const indexedHomes = [...new Set(installs.map((item) => item.home).filter(Boolean))];
684
+ const managedHomes = indexedHomes.filter((home) => hasManagedDaemonState(home));
685
+ if (managedHomes.length === 1) {
686
+ return managedHomes[0];
687
+ }
688
+
689
+ return defaultHome;
690
+ }
691
+
613
692
  function formatHttpHost(host) {
614
693
  const normalized = String(host || '').trim();
615
694
  if (!normalized) {
@@ -890,15 +969,19 @@ function pythonVersionText(probe) {
890
969
  return version;
891
970
  }
892
971
 
893
- function renderLaunchHints({ home, url, bindUrl, pythonSelection, yolo, authEnabled, authToken }) {
972
+ function renderLaunchHints({ home, url, bindUrl, pythonSelection, yolo, authEnabled, authToken, runnerName }) {
973
+ const normalizedRunner = normalizeRunnerName(runnerName, 'codex');
894
974
  const runtimeRows = [
895
975
  ['Version', packageJson.version],
896
976
  ['Home', truncateMiddle(home)],
897
977
  ['Browser URL', url],
898
978
  ['Bind URL', bindUrl],
899
979
  ['Python', truncateMiddle(pythonVersionText(pythonSelection))],
900
- ['Codex mode', yolo ? 'YOLO (never + danger-full-access)' : 'Default (on-request + workspace-write)'],
980
+ ['Runner', runnerDisplayName(normalizedRunner)],
901
981
  ];
982
+ if (normalizedRunner === 'codex') {
983
+ runtimeRows.push(['Codex mode', yolo ? 'YOLO (never + danger-full-access)' : 'Default (on-request + workspace-write)']);
984
+ }
902
985
  if (authEnabled && authToken) {
903
986
  runtimeRows.splice(4, 0, ['Auth token', authToken]);
904
987
  }
@@ -940,6 +1023,7 @@ function printLaunchCard({
940
1023
  yolo,
941
1024
  authEnabled,
942
1025
  authToken,
1026
+ runnerName,
943
1027
  }) {
944
1028
  const width = Math.max(72, Math.min(process.stdout.columns || 100, 108));
945
1029
  const divider = colorize('\u001B[38;5;245m', '─'.repeat(Math.max(36, width - 6)));
@@ -1009,7 +1093,7 @@ function printLaunchCard({
1009
1093
  console.log(centerText('Need to move this installation later? Use ds migrate /new/path.', width));
1010
1094
  console.log(centerText(officialRepositoryLine(), width));
1011
1095
  console.log('');
1012
- renderLaunchHints({ home, url, bindUrl, pythonSelection, yolo, authEnabled, authToken });
1096
+ renderLaunchHints({ home, url, bindUrl, pythonSelection, yolo, authEnabled, authToken, runnerName });
1013
1097
  }
1014
1098
 
1015
1099
  function escapeHtml(value) {
@@ -1021,21 +1105,28 @@ function escapeHtml(value) {
1021
1105
  .replaceAll("'", '&#39;');
1022
1106
  }
1023
1107
 
1024
- function writeCodexPreflightReport(home, probe) {
1108
+ function writeRunnerPreflightReport(home, runnerName, probe) {
1025
1109
  const reportDir = path.join(home, 'runtime', 'preflight');
1026
1110
  ensureDir(reportDir);
1027
- const reportPath = path.join(reportDir, 'codex-preflight.html');
1111
+ const normalizedRunner = normalizeRunnerName(runnerName, 'runner');
1112
+ const runnerLabel = {
1113
+ codex: 'Codex',
1114
+ claude: 'Claude Code',
1115
+ kimi: 'Kimi Code',
1116
+ opencode: 'OpenCode',
1117
+ }[normalizedRunner] || String(runnerName || 'runner').trim() || 'runner';
1118
+ const reportPath = path.join(reportDir, `${normalizedRunner}-preflight.html`);
1028
1119
  const warnings = Array.isArray(probe?.warnings) ? probe.warnings : [];
1029
1120
  const errors = Array.isArray(probe?.errors) ? probe.errors : [];
1030
1121
  const guidance = Array.isArray(probe?.guidance) ? probe.guidance : [];
1031
1122
  const details = probe && typeof probe.details === 'object' ? probe.details : {};
1032
1123
  const profile = typeof details.profile === 'string' ? details.profile.trim() : '';
1033
- const intro = profile
1034
- ? `DeepScientist blocked startup because the Codex hello probe did not pass for profile \`${profile}\`. Verify that \`codex --profile ${profile}\` works on this machine and that the profile's provider-specific API key, Base URL, and model configuration are already set up.`
1035
- : 'DeepScientist blocked startup because the Codex hello probe did not pass. In most installs, `npm install -g @researai/deepscientist` also installs the bundled Codex dependency. If `codex` is still missing, repair it with `npm install -g @openai/codex`. Then run `codex login` (or just `codex`), finish authentication, run `ds doctor`, and launch `ds` again.';
1036
- const introZh = profile
1037
- ? `DeepScientist 启动前进行了 Codex 可用性检查,但 profile \`${profile}\` 的 hello 探测没有通过。请先确认 \`codex --profile ${profile}\` 在当前机器上可以正常启动,并确保该 profile 依赖的 provider API Key、Base URL 和模型配置都已经在 Codex 中配置好。`
1038
- : 'DeepScientist 启动前进行了 Codex 可用性检查,但 hello 探测没有通过。正常情况下,`npm install -g @researai/deepscientist` 也会一并安装 bundled Codex 依赖;如果此后 `codex` 仍不可用,请再执行 `npm install -g @openai/codex` 修复。然后运行 `codex login`(或直接运行 `codex`)完成认证,再执行 `ds doctor`,最后重新启动 `ds`。';
1124
+ const intro = profile && normalizedRunner === 'codex'
1125
+ ? `DeepScientist blocked startup because the ${runnerLabel} hello probe did not pass for profile \`${profile}\`. Verify that \`codex --profile ${profile}\` works on this machine and that the profile's provider-specific API key, Base URL, and model configuration are already set up.`
1126
+ : `DeepScientist blocked startup because the selected runner (${runnerLabel}) did not pass its startup probe. Start DeepScientist with a runner that already works, or enter the web workspace with the default runner and configure another runner later from Settings.`;
1127
+ const introZh = profile && normalizedRunner === 'codex'
1128
+ ? `DeepScientist 启动前进行了 ${runnerLabel} 可用性检查,但 profile \`${profile}\` 的 hello 探测没有通过。请先确认 \`codex --profile ${profile}\` 在当前机器上可以正常启动,并确保该 profile 依赖的 provider API Key、Base URL 和模型配置都已经在 Codex 中配置好。`
1129
+ : `DeepScientist 启动前检查了所选 runner(${runnerLabel}),但它没有通过启动探测。你可以先用已经可用的默认 runner 进入 Web 工作区,再在 Settings 里配置或切换 Claude Code / Kimi Code / OpenCode。`;
1039
1130
  const renderItems = (items, tone) =>
1040
1131
  items
1041
1132
  .map(
@@ -1048,7 +1139,7 @@ function writeCodexPreflightReport(home, probe) {
1048
1139
  <head>
1049
1140
  <meta charset="utf-8" />
1050
1141
  <meta name="viewport" content="width=device-width, initial-scale=1" />
1051
- <title>DeepScientist Codex check failed</title>
1142
+ <title>DeepScientist runner check failed</title>
1052
1143
  <style>
1053
1144
  :root { color-scheme: light dark; font-family: Inter, system-ui, sans-serif; }
1054
1145
  body {
@@ -1095,12 +1186,12 @@ function writeCodexPreflightReport(home, probe) {
1095
1186
  <body>
1096
1187
  <main class="page">
1097
1188
  <section class="panel">
1098
- <h1>DeepScientist could not start Codex</h1>
1189
+ <h1>DeepScientist could not start the selected runner</h1>
1099
1190
  <p class="meta">${escapeHtml(intro)}</p>
1100
1191
  <p class="meta">${escapeHtml(introZh)}</p>
1101
1192
 
1102
1193
  <h2>Summary</h2>
1103
- <p>${escapeHtml(probe?.summary || 'Codex startup probe failed.')}</p>
1194
+ <p>${escapeHtml(probe?.summary || `${runnerLabel} startup probe failed.`)}</p>
1104
1195
 
1105
1196
  ${errors.length ? `<h2>Errors</h2><ul>${renderItems(errors, 'error')}</ul>` : ''}
1106
1197
  ${warnings.length ? `<h2>Warnings</h2><ul>${renderItems(warnings, 'warn')}</ul>` : ''}
@@ -1143,6 +1234,171 @@ function writeCodexPreflightReport(home, probe) {
1143
1234
  };
1144
1235
  }
1145
1236
 
1237
+
1238
+ function readConfiguredDefaultRunner(home, fallback = 'codex') {
1239
+ const configPath = path.join(home, 'config', 'config.yaml');
1240
+ if (!fs.existsSync(configPath)) {
1241
+ return fallback;
1242
+ }
1243
+ try {
1244
+ const text = fs.readFileSync(configPath, 'utf8');
1245
+ const match = text.match(new RegExp("^\\s*default_runner:\\s*[\"']?([^\"'\\n]+)[\"']?\\s*$", "m"));
1246
+ const value = match ? String(match[1] || '').trim().toLowerCase() : '';
1247
+ return value || fallback;
1248
+ } catch {
1249
+ return fallback;
1250
+ }
1251
+ }
1252
+
1253
+ function readRunnerBootstrapState(home, runtimePython, runnerName, envOverrides = {}) {
1254
+ const snippet = [
1255
+ 'import json, pathlib, sys',
1256
+ 'from deepscientist.config import ConfigManager',
1257
+ 'home = pathlib.Path(sys.argv[1])',
1258
+ 'runner = str(sys.argv[2])',
1259
+ 'manager = ConfigManager(home)',
1260
+ 'print(json.dumps(manager.runner_bootstrap_state(runner), ensure_ascii=False))',
1261
+ ].join('\n');
1262
+ const result = runSync(runtimePython, ['-c', snippet, home, runnerName], {
1263
+ capture: true,
1264
+ allowFailure: true,
1265
+ env: {
1266
+ ...process.env,
1267
+ ...envOverrides,
1268
+ },
1269
+ });
1270
+ if (result.status !== 0) {
1271
+ return { runner: runnerName, ready: false, last_checked_at: null, last_result: {} };
1272
+ }
1273
+ try {
1274
+ return JSON.parse(result.stdout || '{}');
1275
+ } catch {
1276
+ return { runner: runnerName, ready: false, last_checked_at: null, last_result: {} };
1277
+ }
1278
+ }
1279
+
1280
+ function probeRunnerBootstrap(home, runtimePython, runnerName, envOverrides = {}) {
1281
+ const snippet = [
1282
+ 'import json, pathlib, sys',
1283
+ 'from deepscientist.config import ConfigManager',
1284
+ 'home = pathlib.Path(sys.argv[1])',
1285
+ 'runner = str(sys.argv[2])',
1286
+ 'manager = ConfigManager(home)',
1287
+ 'print(json.dumps(manager.probe_runner_bootstrap(runner, persist=True), ensure_ascii=False))',
1288
+ ].join('\n');
1289
+ const result = runSync(runtimePython, ['-c', snippet, home, runnerName], {
1290
+ capture: true,
1291
+ allowFailure: true,
1292
+ env: {
1293
+ ...process.env,
1294
+ ...envOverrides,
1295
+ },
1296
+ });
1297
+ let payload = null;
1298
+ try {
1299
+ payload = JSON.parse(result.stdout || '{}');
1300
+ } catch {
1301
+ payload = null;
1302
+ }
1303
+ if (payload && typeof payload === 'object') {
1304
+ return payload;
1305
+ }
1306
+ return {
1307
+ ok: false,
1308
+ summary: `${runnerName} startup probe crashed before a structured result was returned.`,
1309
+ warnings: [],
1310
+ errors: [result.stderr || 'Unable to parse the startup probe result.'],
1311
+ details: {
1312
+ runner: runnerName,
1313
+ exit_code: result.status ?? null,
1314
+ stdout_excerpt: result.stdout || '',
1315
+ stderr_excerpt: result.stderr || '',
1316
+ },
1317
+ guidance: [
1318
+ `Run \`${runnerName}\` manually and complete any required setup.`,
1319
+ 'Then start DeepScientist again.',
1320
+ ],
1321
+ };
1322
+ }
1323
+
1324
+ function readEnabledRunnerNames(home, runtimePython, envOverrides = {}) {
1325
+ const snippet = [
1326
+ 'import json, pathlib, sys',
1327
+ 'from deepscientist.config import ConfigManager',
1328
+ 'home = pathlib.Path(sys.argv[1])',
1329
+ 'manager = ConfigManager(home)',
1330
+ 'payload = manager.load_runners_config()',
1331
+ 'print(json.dumps(sorted(name for name, cfg in payload.items() if isinstance(cfg, dict) and bool(cfg.get("enabled", False))), ensure_ascii=False))',
1332
+ ].join('\n');
1333
+ const result = runSync(runtimePython, ['-c', snippet, home], {
1334
+ capture: true,
1335
+ allowFailure: true,
1336
+ env: {
1337
+ ...process.env,
1338
+ ...envOverrides,
1339
+ },
1340
+ });
1341
+ if (result.status !== 0) {
1342
+ return [];
1343
+ }
1344
+ try {
1345
+ const parsed = JSON.parse(result.stdout || '[]');
1346
+ return Array.isArray(parsed) ? parsed.map((item) => String(item || '').trim().toLowerCase()).filter(Boolean) : [];
1347
+ } catch {
1348
+ return [];
1349
+ }
1350
+ }
1351
+
1352
+ function readRunnerReadyState(home, runtimePython, runnerName, envOverrides = {}) {
1353
+ if (String(runnerName || '').trim().toLowerCase() === 'codex') {
1354
+ const state = readCodexBootstrapState(home, runtimePython, envOverrides);
1355
+ return { ready: Boolean(state.codex_ready), state };
1356
+ }
1357
+ const state = readRunnerBootstrapState(home, runtimePython, runnerName, envOverrides);
1358
+ return { ready: Boolean(state.ready), state };
1359
+ }
1360
+
1361
+ function probeRunnerReady(home, runtimePython, runnerName, envOverrides = {}) {
1362
+ if (String(runnerName || '').trim().toLowerCase() === 'codex') {
1363
+ return probeCodexBootstrap(home, runtimePython, envOverrides);
1364
+ }
1365
+ return probeRunnerBootstrap(home, runtimePython, runnerName, envOverrides);
1366
+ }
1367
+
1368
+ function resolveStartupRunner(home, runtimePython, preferredRunner, envOverrides = {}, options = {}) {
1369
+ const normalizedPreferred = normalizeRunnerName(preferredRunner, 'codex');
1370
+ const enabled = readEnabledRunnerNames(home, runtimePython, envOverrides);
1371
+ const allowFallback = options.allowFallback !== false;
1372
+ const ordered = allowFallback
1373
+ ? [
1374
+ normalizedPreferred,
1375
+ ...enabled.filter((name) => name !== normalizedPreferred),
1376
+ ]
1377
+ : [normalizedPreferred];
1378
+ const seen = new Set();
1379
+ const candidates = ordered.filter((name) => {
1380
+ if (!name || seen.has(name)) return false;
1381
+ seen.add(name);
1382
+ return true;
1383
+ });
1384
+
1385
+ let preferredProbe = null;
1386
+ for (const runnerName of candidates) {
1387
+ const bootstrap = readRunnerReadyState(home, runtimePython, runnerName, envOverrides);
1388
+ if (bootstrap.ready) {
1389
+ return { ok: true, runnerName, preferredRunner: normalizedPreferred, fallback: runnerName !== normalizedPreferred, probe: null };
1390
+ }
1391
+ const probe = probeRunnerReady(home, runtimePython, runnerName, envOverrides);
1392
+ if (runnerName === normalizedPreferred) {
1393
+ preferredProbe = probe;
1394
+ }
1395
+ if (probe && probe.ok === true) {
1396
+ return { ok: true, runnerName, preferredRunner: normalizedPreferred, fallback: runnerName !== normalizedPreferred, probe };
1397
+ }
1398
+ }
1399
+ return { ok: false, runnerName: normalizedPreferred, preferredRunner: normalizedPreferred, fallback: false, probe: preferredProbe };
1400
+ }
1401
+
1146
1402
  function readCodexBootstrapState(home, runtimePython, envOverrides = {}) {
1147
1403
  const snippet = [
1148
1404
  'import json, pathlib, sys',
@@ -1211,10 +1467,12 @@ function probeCodexBootstrap(home, runtimePython, envOverrides = {}) {
1211
1467
  };
1212
1468
  }
1213
1469
 
1214
- function createCodexPreflightError(home, probe) {
1215
- const report = writeCodexPreflightReport(home, probe);
1216
- const error = new Error(probe?.summary || 'Codex startup probe failed.');
1217
- error.code = 'DS_CODEX_PREFLIGHT';
1470
+ function createRunnerPreflightError(home, runnerName, probe) {
1471
+ const report = writeRunnerPreflightReport(home, runnerName, probe);
1472
+ const normalizedRunner = normalizeRunnerName(runnerName, 'codex');
1473
+ const error = new Error(probe?.summary || `${normalizedRunner} startup probe failed.`);
1474
+ error.code = 'DS_RUNNER_PREFLIGHT';
1475
+ error.runnerName = normalizedRunner;
1218
1476
  error.reportPath = report.path;
1219
1477
  error.reportUrl = report.url;
1220
1478
  error.probe = probe;
@@ -1239,6 +1497,9 @@ function parseLauncherArgs(argv) {
1239
1497
  let auth = null;
1240
1498
  let codexProfile = null;
1241
1499
  let codexBinary = null;
1500
+ let runner = null;
1501
+ let tuiDebug = false;
1502
+ let tuiDebugLogPath = null;
1242
1503
 
1243
1504
  if (args[0] === 'ui') {
1244
1505
  args.shift();
@@ -1257,6 +1518,7 @@ function parseLauncherArgs(argv) {
1257
1518
  else if (arg === '--open-browser') openBrowser = true;
1258
1519
  else if (arg === '--daemon-only') daemonOnly = true;
1259
1520
  else if (arg === '--skip-update-check') skipUpdateCheck = true;
1521
+ else if (arg === '--debug') tuiDebug = true;
1260
1522
  else if (arg === '--here') continue;
1261
1523
  else {
1262
1524
  const parsedYolo = parseYoloArg(args, index, yolo);
@@ -1284,6 +1546,11 @@ function parseLauncherArgs(argv) {
1284
1546
  if (!next.ok) return { help: false, error: next.error };
1285
1547
  codexBinary = next.value;
1286
1548
  index += 1;
1549
+ } else if (arg === '--runner') {
1550
+ const next = readRequiredOptionValue(args, index, '--runner');
1551
+ if (!next.ok) return { help: false, error: next.error };
1552
+ runner = next.value;
1553
+ index += 1;
1287
1554
  } else if (arg === '--host') {
1288
1555
  const next = readRequiredOptionValue(args, index, '--host');
1289
1556
  if (!next.ok) return { help: false, error: next.error };
@@ -1311,6 +1578,12 @@ function parseLauncherArgs(argv) {
1311
1578
  if (!next.ok) return { help: false, error: next.error };
1312
1579
  questId = next.value;
1313
1580
  index += 1;
1581
+ } else if (arg === '--debug-log') {
1582
+ const next = readRequiredOptionValue(args, index, '--debug-log');
1583
+ if (!next.ok) return { help: false, error: next.error };
1584
+ tuiDebugLogPath = next.value;
1585
+ tuiDebug = true;
1586
+ index += 1;
1314
1587
  } else if (arg === '--mode') {
1315
1588
  const next = readRequiredOptionValue(args, index, '--mode');
1316
1589
  if (!next.ok) return { help: false, error: next.error };
@@ -1341,10 +1614,13 @@ function parseLauncherArgs(argv) {
1341
1614
  skipUpdateCheck,
1342
1615
  yolo,
1343
1616
  auth,
1344
- codexProfile,
1345
- codexBinary,
1346
- error: null,
1347
- };
1617
+ codexProfile,
1618
+ codexBinary,
1619
+ runner,
1620
+ tuiDebug,
1621
+ tuiDebugLogPath,
1622
+ error: null,
1623
+ };
1348
1624
  }
1349
1625
 
1350
1626
  function printUpdateHelp() {
@@ -2656,7 +2932,9 @@ function syncUvProjectEnvironment(home, uvBinary, pythonTarget, editable) {
2656
2932
  args.splice(3, 0, '--compile-bytecode');
2657
2933
  }
2658
2934
  if (!editable) {
2659
- args.push('--no-editable');
2935
+ // Force-refresh the local project package so same-version source installs
2936
+ // don't reuse a stale cached wheel during runtime rebuilds.
2937
+ args.push('--no-editable', '--reinstall-package', 'deepscientist');
2660
2938
  }
2661
2939
  step(2, 4, 'Syncing locked Python environment');
2662
2940
  const result = runSync(uvBinary, args, {
@@ -4279,6 +4557,7 @@ async function performSelfUpdate(home, options = {}) {
4279
4557
  };
4280
4558
  }
4281
4559
 
4560
+ const npmBinary = resolveNpmBinary();
4282
4561
  const installResult = runNpmInstallLatest(home, npmBinary);
4283
4562
  if (!installResult.ok) {
4284
4563
  const message = summarizeUpdateFailure(installResult);
@@ -4674,7 +4953,7 @@ function readConfiguredUiAddressFromFile(home, fallbackHost, fallbackPort) {
4674
4953
  }
4675
4954
  }
4676
4955
 
4677
- async function startDaemon(home, runtimePython, host, port, proxy = null, envOverrides = {}, authEnabled = false) {
4956
+ async function startDaemon(home, runtimePython, host, port, proxy = null, envOverrides = {}, authEnabled = false, runnerName = null, allowRunnerFallback = true) {
4678
4957
  const browserUrl = browserUiUrl(host, port);
4679
4958
  const daemonBindUrl = bindUiUrl(host, port);
4680
4959
  const state = readDaemonState(home);
@@ -4711,6 +4990,7 @@ async function startDaemon(home, runtimePython, host, port, proxy = null, envOve
4711
4990
  reused: true,
4712
4991
  authEnabled: stateAuthEnabled,
4713
4992
  authToken: resolvedAuthToken,
4993
+ runnerName: normalizeRunnerName(runnerName || readConfiguredDefaultRunner(home, "codex"), "codex"),
4714
4994
  };
4715
4995
  }
4716
4996
  console.error(
@@ -4728,13 +5008,21 @@ async function startDaemon(home, runtimePython, host, port, proxy = null, envOve
4728
5008
  removeDaemonState(home);
4729
5009
  }
4730
5010
 
4731
- const bootstrapState = readCodexBootstrapState(home, runtimePython, envOverrides);
4732
- if (!bootstrapState.codex_ready) {
4733
- console.log('Codex is not marked ready yet. Running startup probe...');
4734
- const probe = probeCodexBootstrap(home, runtimePython, envOverrides);
4735
- if (!probe || probe.ok !== true) {
4736
- throw createCodexPreflightError(home, probe);
4737
- }
5011
+ const requestedRunner = normalizeRunnerName(runnerName || readConfiguredDefaultRunner(home, "codex"), "codex");
5012
+ const startupRunner = resolveStartupRunner(home, runtimePython, requestedRunner, envOverrides, {
5013
+ allowFallback: allowRunnerFallback,
5014
+ });
5015
+ if (!startupRunner.ok) {
5016
+ throw createRunnerPreflightError(home, requestedRunner, startupRunner.probe);
5017
+ }
5018
+ const effectiveRunner = startupRunner.runnerName;
5019
+ const effectiveEnvOverrides = {
5020
+ ...envOverrides,
5021
+ DEEPSCIENTIST_DEFAULT_RUNNER: effectiveRunner,
5022
+ DEEPSCIENTIST_ENABLE_RUNNER: effectiveRunner,
5023
+ };
5024
+ if (startupRunner.fallback) {
5025
+ console.log(`WARNING: ${requestedRunner} is not ready yet. Starting DeepScientist with fallback runner \`${effectiveRunner}\` for this session.`);
4738
5026
  }
4739
5027
 
4740
5028
  ensureNodeBundle('src/ui', 'dist/index.html');
@@ -4744,7 +5032,7 @@ async function startDaemon(home, runtimePython, host, port, proxy = null, envOve
4744
5032
  host,
4745
5033
  port,
4746
5034
  proxy,
4747
- envOverrides,
5035
+ envOverrides: effectiveEnvOverrides,
4748
5036
  authEnabled,
4749
5037
  authToken: desiredAuthToken,
4750
5038
  });
@@ -4764,7 +5052,7 @@ async function startDaemon(home, runtimePython, host, port, proxy = null, envOve
4764
5052
  host,
4765
5053
  port,
4766
5054
  proxy,
4767
- envOverrides,
5055
+ envOverrides: effectiveEnvOverrides,
4768
5056
  daemonId: String((liveState || {}).daemon_id || ''),
4769
5057
  });
4770
5058
  if (supervisorPid) {
@@ -4776,6 +5064,7 @@ async function startDaemon(home, runtimePython, host, port, proxy = null, envOve
4776
5064
  reused: false,
4777
5065
  authEnabled,
4778
5066
  authToken: desiredAuthToken,
5067
+ runnerName: effectiveRunner,
4779
5068
  };
4780
5069
  }
4781
5070
  await sleep(250);
@@ -4836,14 +5125,15 @@ function openBrowser(url) {
4836
5125
  return false;
4837
5126
  }
4838
5127
 
4839
- function handleCodexPreflightFailure(error) {
4840
- if (!error || error.code !== 'DS_CODEX_PREFLIGHT') {
5128
+ function handleRunnerPreflightFailure(error) {
5129
+ if (!error || error.code !== 'DS_RUNNER_PREFLIGHT') {
4841
5130
  return false;
4842
5131
  }
4843
5132
  const errorLabel = colorize('\u001B[1;38;5;196m', 'ERROR');
4844
5133
  const warningLabel = colorize('\u001B[1;38;5;214m', 'WARNING');
4845
5134
  console.error('');
4846
- console.error(`${errorLabel} DeepScientist could not start because Codex is not ready yet.`);
5135
+ const runnerLabel = String(error.runnerName || 'codex').trim() || 'runner';
5136
+ console.error(`${errorLabel} DeepScientist could not start because ${runnerLabel} is not ready yet.`);
4847
5137
  console.error(`Report: ${error.reportPath}`);
4848
5138
  if (Array.isArray(error.probe?.errors)) {
4849
5139
  for (const item of error.probe.errors) {
@@ -4873,7 +5163,7 @@ function handleCodexPreflightFailure(error) {
4873
5163
  return true;
4874
5164
  }
4875
5165
 
4876
- function launchTui(url, questId, home, runtimePython, authToken = null) {
5166
+ function launchTui(url, questId, home, runtimePython, authToken = null, debugOptions = {}) {
4877
5167
  const entry = ensureNodeBundle('src/tui', 'dist/index.js');
4878
5168
  const args = [entry, '--base-url', url];
4879
5169
  if (questId) {
@@ -4882,6 +5172,12 @@ function launchTui(url, questId, home, runtimePython, authToken = null) {
4882
5172
  if (typeof authToken === 'string' && authToken.trim()) {
4883
5173
  args.push('--auth-token', authToken.trim());
4884
5174
  }
5175
+ if (debugOptions && debugOptions.enabled) {
5176
+ args.push('--debug');
5177
+ }
5178
+ if (debugOptions && typeof debugOptions.logPath === 'string' && debugOptions.logPath.trim()) {
5179
+ args.push('--debug-log', debugOptions.logPath.trim());
5180
+ }
4885
5181
  const child = spawn(process.execPath, args, {
4886
5182
  cwd: repoRoot,
4887
5183
  stdio: 'inherit',
@@ -5161,7 +5457,9 @@ async function launcherMain(rawArgs) {
5161
5457
  process.exit(1);
5162
5458
  }
5163
5459
 
5164
- const home = options.home || resolveHome(rawArgs);
5460
+ const home = (options.stop || options.status || options.restart)
5461
+ ? resolveManagementHome(rawArgs, options)
5462
+ : (options.home || resolveHome(rawArgs));
5165
5463
  applyLauncherProxy(options.proxy);
5166
5464
  ensureDir(home);
5167
5465
  registerCurrentInstall(home);
@@ -5205,9 +5503,12 @@ async function launcherMain(rawArgs) {
5205
5503
  yolo: options.yolo,
5206
5504
  profile: options.codexProfile,
5207
5505
  binary: options.codexBinary,
5506
+ runner: options.runner,
5208
5507
  });
5209
5508
  ensureInitialized(home, runtimePython);
5210
- await maybeHandleMiniMaxCodexVersion(home, runtimePython, options);
5509
+ if (!options.runner || String(options.runner).trim().toLowerCase() === "codex") {
5510
+ await maybeHandleMiniMaxCodexVersion(home, runtimePython, options);
5511
+ }
5211
5512
  if (await maybeHandleStartupUpdate(home, rawArgs, options)) {
5212
5513
  return true;
5213
5514
  }
@@ -5236,9 +5537,20 @@ async function launcherMain(rawArgs) {
5236
5537
  step(4, 4, 'Starting local daemon and UI surfaces');
5237
5538
  let started;
5238
5539
  try {
5239
- started = await startDaemon(home, runtimePython, host, port, options.proxy, codexOverrideEnv, authEnabled);
5540
+ const selectedRunner = normalizeRunnerName(options.runner || readConfiguredDefaultRunner(home, "codex"), "codex");
5541
+ started = await startDaemon(
5542
+ home,
5543
+ runtimePython,
5544
+ host,
5545
+ port,
5546
+ options.proxy,
5547
+ codexOverrideEnv,
5548
+ authEnabled,
5549
+ selectedRunner,
5550
+ !options.runner
5551
+ );
5240
5552
  } catch (error) {
5241
- if (handleCodexPreflightFailure(error)) return true;
5553
+ if (handleRunnerPreflightFailure(error)) return true;
5242
5554
  throw error;
5243
5555
  }
5244
5556
  const browserOpened = shouldOpenBrowser ? openBrowser(started.url) : false;
@@ -5254,6 +5566,7 @@ async function launcherMain(rawArgs) {
5254
5566
  yolo: options.yolo,
5255
5567
  authEnabled: started.authEnabled,
5256
5568
  authToken: started.authToken,
5569
+ runnerName: started.runnerName || selectedRunner,
5257
5570
  });
5258
5571
 
5259
5572
  if (options.daemonOnly) {
@@ -5262,7 +5575,10 @@ async function launcherMain(rawArgs) {
5262
5575
  if (mode === 'web') {
5263
5576
  process.exit(0);
5264
5577
  }
5265
- launchTui(browserUiUrl(host, port), options.questId, home, runtimePython, started.authToken);
5578
+ launchTui(browserUiUrl(host, port), options.questId, home, runtimePython, started.authToken, {
5579
+ enabled: options.tuiDebug,
5580
+ logPath: options.tuiDebugLogPath,
5581
+ });
5266
5582
  return true;
5267
5583
  }
5268
5584
 
@@ -5305,24 +5621,34 @@ async function main() {
5305
5621
  const home = resolveHome(args);
5306
5622
  const pythonRuntime = ensurePythonRuntime(home);
5307
5623
  const runtimePython = pythonRuntime.runtimePython;
5624
+ const runnerOptionForEnv = positional.value === 'doctor' || positional.value === 'docker'
5625
+ ? null
5626
+ : readOptionValue(args, '--runner');
5308
5627
  const codexOverrideEnv = buildCodexOverrideEnv({
5309
5628
  yolo: resolveYoloFlag(args, true),
5310
5629
  profile: readOptionValue(args, '--codex-profile'),
5311
5630
  binary: readOptionValue(args, '--codex'),
5631
+ runner: runnerOptionForEnv,
5312
5632
  });
5313
5633
  if (positional.value === 'run' || positional.value === 'daemon') {
5314
5634
  maybePrintOptionalLatexNotice(home);
5315
5635
  }
5316
5636
  if (positional.value === 'run' || positional.value === 'daemon') {
5317
- const bootstrapState = readCodexBootstrapState(home, runtimePython, codexOverrideEnv);
5318
- if (!bootstrapState.codex_ready) {
5637
+ const selectedRunner = normalizeRunnerName(readOptionValue(args, '--runner') || readConfiguredDefaultRunner(home, "codex"), "codex");
5638
+ const bootstrapState = selectedRunner === "codex"
5639
+ ? readCodexBootstrapState(home, runtimePython, codexOverrideEnv)
5640
+ : readRunnerBootstrapState(home, runtimePython, selectedRunner, codexOverrideEnv);
5641
+ const runnerReady = selectedRunner === "codex" ? Boolean(bootstrapState.codex_ready) : Boolean(bootstrapState.ready);
5642
+ if (!runnerReady) {
5319
5643
  try {
5320
- const probe = probeCodexBootstrap(home, runtimePython, codexOverrideEnv);
5644
+ const probe = selectedRunner === "codex"
5645
+ ? probeCodexBootstrap(home, runtimePython, codexOverrideEnv)
5646
+ : probeRunnerBootstrap(home, runtimePython, selectedRunner, codexOverrideEnv);
5321
5647
  if (!probe || probe.ok !== true) {
5322
- throw createCodexPreflightError(home, probe);
5648
+ throw createRunnerPreflightError(home, selectedRunner, probe);
5323
5649
  }
5324
5650
  } catch (error) {
5325
- if (handleCodexPreflightFailure(error)) return;
5651
+ if (handleRunnerPreflightFailure(error)) return;
5326
5652
  throw error;
5327
5653
  }
5328
5654
  }
@@ -5348,6 +5674,7 @@ module.exports = {
5348
5674
  legacyVenvRootPath,
5349
5675
  resolveUvBinary,
5350
5676
  resolveHome,
5677
+ resolveManagementHome,
5351
5678
  parseLauncherArgs,
5352
5679
  generateBrowserAuthToken,
5353
5680
  appendBrowserAuthToken,